commit 1593228d50ef4929372a2d9b4072499d1863546c Author: Nitcloud Date: Wed Sep 11 13:32:02 2024 +0800 remove lsp diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..f9b22b7 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,24 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": [ + "out", + "dist", + "**/*.d.ts" + ] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f2ae135 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +library +node_modules +out +./*.log +./*.str +dist +script/__pycache__ +.vscode-test/ +*.vsix +parser_stuck.v +out-js/ +*.pyc +*.pyd +resources/hdlParser/parser.js +resources/hdlParser/parser.wasm +resources/dide-viewer/view/* +resources/dide-lsp/server/* \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..3ac9aeb --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "dbaeumer.vscode-eslint" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..670d6e6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,34 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..30bf8c2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..3b17e53 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..ce086d0 --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,17 @@ +.vscode/** +.gitignore +**/.gitignore +.git +**/*.map +.eslintrc.json +dist +webpack.config.js +node_modules +out-js +src +script +resources/**/*.js +resources/**/*.d.ts +resources/**/*.wasm +tsconfig.json +design \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..050b9c3 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,154 @@ +# Change Log + +All notable changes to the "digital-ide" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + + + +## [0.3.4] - 2024-08-28 + +Feature + +wave 渲染器 https://nc-ai-lab.feishu.cn/wiki/K7gVwwU02iNMc8krIHucPwhqnff#share-NjuodrRQAoxEotxRicOc7BXDnOh + + + +--- + +## [0.3.3] - 2024-02-05 + +Feature +- 重做了文档化功能,并且添加了参数和接口的 diagram 可视化的渲染模块 +- 增加了波形显示器,支持以下特性 + - 完整的 vcd 支持,对于 IEEE VCD 标准完全支持。 + - 基于 wasm 的 数据解析 和基于 webgl2 的渲染,拥有接近原生的运行速度。 + - 主线程渲染和渲染数据的加载实现了调度隔离,再大的 vcd 也不会造成卡顿。 + - 支持用户自定义调整波形颜色,移动灵敏度等等。 + - 支持用户自定义搜索信号名称。 + +Bug 修复 +- Verilog 参数例化位置错误 +- [issue-51] 文档化的部分问题 +- 点击 Refuse 会在用户工作区创建 json 文件 + + +--- +## [0.3.2] - 2023-11-01 + +Feature +- 增加对于 vhdl 的 全面支持(文件树、LSP等) +- 增加对 XDC,TCL 等脚本的 LSP 支持 +- 增加 verilog, vhdl, xdc, tcl, vvp, vcd 等语言或生成文件的工作区图标 +- 增加对于 vivado, modelsim, verilator 的支持,用户可以通过设置 `function.lsp.linter.vhdl.diagnostor`(设置 vhdl) 和 `function.lsp.linter.vlog.diagnostor`(设置 verilog) 来使用这些第三方工具的仿真和自动纠错。 +- 增加对于 TCL, XDC, VVP 等脚本的 LSP 和 语法高亮 支持。 + +Change +- 将插件的工作状态显示在 vscode 下侧的状态栏上,利于用户了解目前的设置状态 +- 状态栏右下角现在可以看到目前选择的linter以及是否正常工作了 +- 优化项目配置目录 +- 优化自动补全的性能 + +Bug 修复 +- 修复文档化 input, output 处注释无法正常显示到文档的 bug +- 修复 iverilog 仿真功能中,将重复的路径作为编译参数编译的 bug +- 修复 iverilog 仿真功能中,将 `include 加入或去除后,无法通过仿真编译的 bug (没有更新 instance 的 instModPathStatus 属性) +- 修复其他已知 bug + + + +## [0.1.23] - 2022-12-24 +- Finish the css of documentation, see `./css/documentation.css` for detail. + +## [0.1.23] - 2022-12-23 +- Finish the function of documentation, webview display +- Finish the function of documentation, support export markdown and html + +## [0.1.23] - 2022-12-22 +- Rename partial tokens of verilog, make highlighting more colorful + +## [0.1.23] - 2022-12-05 +- Tree View can display the module that has not solved the dependence +- Finish the function of Instance and add icon for each solved module + +## [0.1.23] - 2022-12-02 +- Add unit test for most of logic + +## [0.1.23] - 2022-12-01 +- Finish reconstruction of HDLparam +- Finish the implementation of tree view + +## [0.1.22] - 2022-01-20 + +- Fix lib files do not display in tree view + +## [0.1.21] - 2022-01-20 + +- Fix issue [#26](https://github.com/Bestduan/Digital-IDE/issues/26) +- Rename as Digital-IDE +- Fix generate property.json file + +## [0.1.20] - 2022-01-12 + +- Fix issue [#32](https://github.com/Bestduan/Digital-IDE/issues/32) + +## [0.1.18] - 2021-09-12 + +- delete generate tb file +- add function netlist show +- Fix issue [#25](https://github.com/Bestduan/fpga_support_plug/issues/25) +- Fix issue [#24](https://github.com/Bestduan/fpga_support_plug/issues/24) + +## [0.1.17] - 2021-09-04 + +- Fix issue [#22](https://github.com/Bestduan/fpga_support_plug/issues/22) +- Fix issue [#21](https://github.com/Bestduan/fpga_support_plug/issues/21) +- Fix issue [#20](https://github.com/Bestduan/fpga_support_plug/issues/20) + + +## [0.1.16] - 2021-07-26 + +- Optimization of the kernel, fix High CPU usage +- Fix some other known bugs +- Add Formatter function + +## [0.1.15] - 2021-05-02 + +- Fix some bugs and add instructions + +## [0.1.12] - 2021-04-28 + +- Added simulation function, automatically pop up error message + +## [0.1.10] - 2020-04-16 + +- Added simulation function, automatically pop up error message + +## [0.1.8] - 2020-03-30 + +- Fixed the problem of repeatedly opening a new project and supported adding devices directly from the Makefile + +## [0.1.6] - 2020-03-19 + +- Add support for IP design and bd design +- Add module jump (`Alt + F12` or `F12`) +- Change the startup shortcut key +- Fix some bugs to enhance robustness + +## [0.1.4] - 2020-03-10 + +- Address the BUG existing in 0.1.3 + +## [0.1.2] - 2020-03-03 + +- Add Xilinx IP of Soc's cortexM3 +- Provide an example for `m3_for_xilinx.bd` +- Resolve the file structure conversion problem + +## [0.0.2] - 2020-02-28 + +- Added testbench / instance function + +## [0.0.1] - 2020-02-15 + +- Initial Release \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8ffd140 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 DIDE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..dec09b0 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +
+ +
+ +# Digital IDE - version 0.3.3 + +![](https://img.shields.io/badge/version-0.3.3-blue) +![](https://img.shields.io/badge/engine-wasm-blue) +![](https://img.shields.io/badge/Verilog-support-green) +![](https://img.shields.io/badge/VHDL-support-green) +![](https://img.shields.io/badge/SystemVerilog-building-black) + +- [Document (New)](https://sterben.nitcloud.cn/) +- [中文文档 (New)](https://sterben.nitcloud.cn/zh/) +- [Video](https://www.bilibili.com/video/BV1t14y1179V/?spm_id_from=333.999.0.0) + + +--- + +## Feature +- 增加对于 vhdl 的 全面支持(文件树、LSP等) +- 增加对 XDC,TCL 等脚本的 LSP 支持 +- 增加 verilog, vhdl, xdc, tcl, vvp, vcd 等语言或生成文件的工作区图标 +- 增加对于 vivado, modelsim, verilator 的支持,用户可以通过设置 `function.lsp.linter.vhdl.diagnostor`(设置 vhdl) 和 `function.lsp.linter.vlog.diagnostor`(设置 verilog) 来使用这些第三方工具的仿真和自动纠错。 +- 增加对于 TCL, XDC, VVP 等脚本的 LSP 和 语法高亮 支持。 + +## Change +- 将插件的工作状态显示在 vscode 下侧的状态栏上,利于用户了解目前的设置状态 +- 状态栏右下角现在可以看到目前选择的linter以及是否正常工作了 +- 优化项目配置目录 +- 优化自动补全的性能 + +## Bug 修复 +- 修复文档化 input, output 处注释无法正常显示到文档的 bug +- 修复 iverilog 仿真功能中,将重复的路径作为编译参数编译的 bug +- 修复 iverilog 仿真功能中,将 `include 加入或去除后,无法通过仿真编译的 bug (没有更新 instance 的 instModPathStatus 属性) +- 修复其他已知 bug + +--- + +## develop + +```bash +python script/command/make_package.py +``` + +## library更新 + +library的更新不会随着Digital-IDE的git一起保存,是专门去拉取更新的,但是打包要一起打包进插件之中。 \ No newline at end of file diff --git a/config/arm.configuration.json b/config/arm.configuration.json new file mode 100644 index 0000000..17f1fa9 --- /dev/null +++ b/config/arm.configuration.json @@ -0,0 +1,18 @@ +{ + "comments": { + "lineComment": "@", + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + { "open": "(", "close": ")" }, + { "open": "[", "close": "]" }, + { "open": "'", "close": "'", "notIn": ["string"] }, + { "open": "\"", "close": "\"", "notIn": ["string"] }, + { "open": "/*", "close": " */", "notIn": ["string"] } + ] +} \ No newline at end of file diff --git a/config/bd.configuration.json b/config/bd.configuration.json new file mode 100644 index 0000000..f831368 --- /dev/null +++ b/config/bd.configuration.json @@ -0,0 +1,29 @@ +{ + "comments": { + "lineComment": "#" + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""] + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""] + ], + "folding": { + "markers": { + "start": "{", + "end": "}" + } + }, + "wordPattern": "(?:(?:[^\\s\\{\\$\\\"]+|(?:\\$(?:\\w+|\\{[^\\}]+\\})))+)" +} diff --git a/config/link.configuration.json b/config/link.configuration.json new file mode 100644 index 0000000..b3c2984 --- /dev/null +++ b/config/link.configuration.json @@ -0,0 +1,24 @@ +{ + "comments": { + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} \ No newline at end of file diff --git a/config/systemverilog.configuration.json b/config/systemverilog.configuration.json new file mode 100644 index 0000000..5645c86 --- /dev/null +++ b/config/systemverilog.configuration.json @@ -0,0 +1,31 @@ +{ + "comments": { + "lineComment": "//", + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["begin", "end"], + ["case", "endcase"], + ["class", "endclass"], + ["clocking", "endclocking"], + ["function", "endfunction"], + ["group", "endgroup"], + ["interface", "endinterface"], + ["module", "endmodule"], + ["package", "endpackage"], + ["primitive", "endprimitive"], + ["program", "endprogram"], + ["property", "endproperty"], + ["sequence", "endsequence"], + ["task", "endtask"] + ], + "autoClosingPairs": [ + {"open":"(", "close":")", "notIn":["string", "comment"]}, + {"open":"[", "close":"]", "notIn":["string", "comment"]}, + {"open":"{", "close":"}", "notIn":["string", "comment"]}, + {"open":"\"", "close":"\"", "notIn":["string", "comment"]} + ] +} \ No newline at end of file diff --git a/config/tcl.configuration.json b/config/tcl.configuration.json new file mode 100644 index 0000000..f831368 --- /dev/null +++ b/config/tcl.configuration.json @@ -0,0 +1,29 @@ +{ + "comments": { + "lineComment": "#" + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""] + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""] + ], + "folding": { + "markers": { + "start": "{", + "end": "}" + } + }, + "wordPattern": "(?:(?:[^\\s\\{\\$\\\"]+|(?:\\$(?:\\w+|\\{[^\\}]+\\})))+)" +} diff --git a/config/verilog.configuration.json b/config/verilog.configuration.json new file mode 100644 index 0000000..96f1c94 --- /dev/null +++ b/config/verilog.configuration.json @@ -0,0 +1,23 @@ +{ + "comments": { + "lineComment": "//", + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["begin", "end"], + ["case", "endcase"], + ["function", "endfunction"], + ["module", "endmodule"], + ["task", "endtask"] + ], + + "autoClosingPairs": [ + {"open":"(", "close":")", "notIn":["string", "comment"]}, + {"open":"[", "close":"]", "notIn":["string", "comment"]}, + {"open":"{", "close":"}", "notIn":["string", "comment"]}, + {"open":"\"", "close":"\"", "notIn":["string", "comment"]} + ] +} \ No newline at end of file diff --git a/config/vhdl.configuration.json b/config/vhdl.configuration.json new file mode 100644 index 0000000..ef4af8d --- /dev/null +++ b/config/vhdl.configuration.json @@ -0,0 +1,26 @@ +{ + "comments": { + "lineComment": "--", + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + ["{" , "}"], + ["[" , "]"], + ["(" , ")"], + ["'" , "'"], + ["`" , "`"], + ["\"", "\""] + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} diff --git a/config/vvp.configuration.json b/config/vvp.configuration.json new file mode 100644 index 0000000..ad4745f --- /dev/null +++ b/config/vvp.configuration.json @@ -0,0 +1,17 @@ +{ + "comments": { + "lineComment": "#" + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + { "open": "(", "close": ")" }, + { "open": "[", "close": "]" }, + { "open": "'", "close": "'", "notIn": ["string"] }, + { "open": "\"", "close": "\"", "notIn": ["string"] }, + { "open": "/*", "close": " */", "notIn": ["string"] } + ] +} \ No newline at end of file diff --git a/css/boxicons.2.0.7.min.css b/css/boxicons.2.0.7.min.css new file mode 100644 index 0000000..565effe --- /dev/null +++ b/css/boxicons.2.0.7.min.css @@ -0,0 +1 @@ +@font-face{font-family:'boxicons';font-weight:normal;font-style:normal;src:url('../fonts/boxicons.eot');src:url('../fonts/boxicons.eot') format('embedded-opentype'),url('../fonts/boxicons.woff2') format('woff2'),url('../fonts/boxicons.woff') format('woff'),url('../fonts/boxicons.ttf') format('truetype'),url('../fonts/boxicons.svg?#boxicons') format('svg')}.bx{font-family:'boxicons'!important;font-weight:normal;font-style:normal;font-variant:normal;line-height:1;display:inline-block;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bx-ul{margin-left:2em;padding-left:0;list-style:none}.bx-ul>li{position:relative}.bx-ul .bx{font-size:inherit;line-height:inherit;position:absolute;left:-2em;width:2em;text-align:center}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes burst{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}90%{-webkit-transform:scale(1.5);transform:scale(1.5);opacity:0}}@keyframes burst{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}90%{-webkit-transform:scale(1.5);transform:scale(1.5);opacity:0}}@-webkit-keyframes flashing{0%{opacity:1}45%{opacity:0}90%{opacity:1}}@keyframes flashing{0%{opacity:1}45%{opacity:0}90%{opacity:1}}@-webkit-keyframes fade-left{0%{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}75%{-webkit-transform:translateX(-20px);transform:translateX(-20px);opacity:0}}@keyframes fade-left{0%{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}75%{-webkit-transform:translateX(-20px);transform:translateX(-20px);opacity:0}}@-webkit-keyframes fade-right{0%{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}75%{-webkit-transform:translateX(20px);transform:translateX(20px);opacity:0}}@keyframes fade-right{0%{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}75%{-webkit-transform:translateX(20px);transform:translateX(20px);opacity:0}}@-webkit-keyframes fade-up{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}75%{-webkit-transform:translateY(-20px);transform:translateY(-20px);opacity:0}}@keyframes fade-up{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}75%{-webkit-transform:translateY(-20px);transform:translateY(-20px);opacity:0}}@-webkit-keyframes fade-down{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}75%{-webkit-transform:translateY(20px);transform:translateY(20px);opacity:0}}@keyframes fade-down{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}75%{-webkit-transform:translateY(20px);transform:translateY(20px);opacity:0}}@-webkit-keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.95,.95,.95) rotate3d(0,0,1,-10deg);transform:scale3d(.95,.95,.95) rotate3d(0,0,1,-10deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1,1,1) rotate3d(0,0,1,10deg);transform:scale3d(1,1,1) rotate3d(0,0,1,10deg)}40%,60%,80%{-webkit-transform:scale3d(1,1,1) rotate3d(0,0,1,-10deg);transform:scale3d(1,1,1) rotate3d(0,0,1,-10deg)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.95,.95,.95) rotate3d(0,0,1,-10deg);transform:scale3d(.95,.95,.95) rotate3d(0,0,1,-10deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1,1,1) rotate3d(0,0,1,10deg);transform:scale3d(1,1,1) rotate3d(0,0,1,10deg)}40%,60%,80%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bx-spin{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.bx-spin-hover:hover{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.bx-tada{-webkit-animation:tada 1.5s ease infinite;animation:tada 1.5s ease infinite}.bx-tada-hover:hover{-webkit-animation:tada 1.5s ease infinite;animation:tada 1.5s ease infinite}.bx-flashing{-webkit-animation:flashing 1.5s infinite linear;animation:flashing 1.5s infinite linear}.bx-flashing-hover:hover{-webkit-animation:flashing 1.5s infinite linear;animation:flashing 1.5s infinite linear}.bx-burst{-webkit-animation:burst 1.5s infinite linear;animation:burst 1.5s infinite linear}.bx-burst-hover:hover{-webkit-animation:burst 1.5s infinite linear;animation:burst 1.5s infinite linear}.bx-fade-up{-webkit-animation:fade-up 1.5s infinite linear;animation:fade-up 1.5s infinite linear}.bx-fade-up-hover:hover{-webkit-animation:fade-up 1.5s infinite linear;animation:fade-up 1.5s infinite linear}.bx-fade-down{-webkit-animation:fade-down 1.5s infinite linear;animation:fade-down 1.5s infinite linear}.bx-fade-down-hover:hover{-webkit-animation:fade-down 1.5s infinite linear;animation:fade-down 1.5s infinite linear}.bx-fade-left{-webkit-animation:fade-left 1.5s infinite linear;animation:fade-left 1.5s infinite linear}.bx-fade-left-hover:hover{-webkit-animation:fade-left 1.5s infinite linear;animation:fade-left 1.5s infinite linear}.bx-fade-right{-webkit-animation:fade-right 1.5s infinite linear;animation:fade-right 1.5s infinite linear}.bx-fade-right-hover:hover{-webkit-animation:fade-right 1.5s infinite linear;animation:fade-right 1.5s infinite linear}.bx-xs{font-size:1rem!important}.bx-sm{font-size:1.55rem!important}.bx-md{font-size:2.25rem!important}.bx-fw{font-size:1.2857142857em;line-height:.8em;width:1.2857142857em;height:.8em;margin-top:-.2em!important;vertical-align:middle}.bx-lg{font-size:3.0!important}.bx-pull-left{float:left;margin-right:.3em!important}.bx-pull-right{float:right;margin-left:.3em!important}.bx-rotate-90{transform:rotate(90deg);-ms-filter:'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'}.bx-rotate-180{transform:rotate(180deg);-ms-filter:'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'}.bx-rotate-270{transform:rotate(270deg);-ms-filter:'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'}.bx-flip-horizontal{transform:scaleX(-1);-ms-filter:'progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1)'}.bx-flip-vertical{transform:scaleY(-1);-ms-filter:'progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1)'}.bx-border{padding:.25em;border:.07em solid rgba(0,0,0,.1);border-radius:.25em}.bx-border-circle{padding:.25em;border:.07em solid rgba(0,0,0,.1);border-radius:50%}.bx-abacus:before{content:"\e900"}.bx-accessibility:before{content:"\e901"}.bx-add-to-queue:before{content:"\e902"}.bx-adjust:before{content:"\e903"}.bx-alarm:before{content:"\e904"}.bx-alarm-add:before{content:"\e905"}.bx-alarm-exclamation:before{content:"\e906"}.bx-alarm-off:before{content:"\e907"}.bx-alarm-snooze:before{content:"\e908"}.bx-album:before{content:"\e909"}.bx-align-justify:before{content:"\e90a"}.bx-align-left:before{content:"\e90b"}.bx-align-middle:before{content:"\e90c"}.bx-align-right:before{content:"\e90d"}.bx-analyse:before{content:"\e90e"}.bx-anchor:before{content:"\e90f"}.bx-angry:before{content:"\e910"}.bx-aperture:before{content:"\e911"}.bx-arch:before{content:"\e912"}.bx-archive:before{content:"\e913"}.bx-archive-in:before{content:"\e914"}.bx-archive-out:before{content:"\e915"}.bx-area:before{content:"\e916"}.bx-arrow-back:before{content:"\e917"}.bx-arrow-from-bottom:before{content:"\e918"}.bx-arrow-from-left:before{content:"\e919"}.bx-arrow-from-right:before{content:"\e91a"}.bx-arrow-from-top:before{content:"\e91b"}.bx-arrow-to-bottom:before{content:"\e91c"}.bx-arrow-to-left:before{content:"\e91d"}.bx-arrow-to-right:before{content:"\e91e"}.bx-arrow-to-top:before{content:"\e91f"}.bx-at:before{content:"\e920"}.bx-atom:before{content:"\e921"}.bx-award:before{content:"\e922"}.bx-badge:before{content:"\e923"}.bx-badge-check:before{content:"\e924"}.bx-ball:before{content:"\e925"}.bx-band-aid:before{content:"\e926"}.bx-bar-chart:before{content:"\e927"}.bx-bar-chart-alt:before{content:"\e928"}.bx-bar-chart-alt-2:before{content:"\e929"}.bx-bar-chart-square:before{content:"\e92a"}.bx-barcode:before{content:"\e92b"}.bx-barcode-reader:before{content:"\e92c"}.bx-baseball:before{content:"\e92d"}.bx-basket:before{content:"\e92e"}.bx-basketball:before{content:"\e92f"}.bx-bath:before{content:"\e930"}.bx-battery:before{content:"\e931"}.bx-bed:before{content:"\e932"}.bx-been-here:before{content:"\e933"}.bx-beer:before{content:"\e934"}.bx-bell:before{content:"\e935"}.bx-bell-minus:before{content:"\e936"}.bx-bell-off:before{content:"\e937"}.bx-bell-plus:before{content:"\e938"}.bx-bible:before{content:"\e939"}.bx-bitcoin:before{content:"\e93a"}.bx-blanket:before{content:"\e93b"}.bx-block:before{content:"\e93c"}.bx-bluetooth:before{content:"\e93d"}.bx-body:before{content:"\e93e"}.bx-bold:before{content:"\e93f"}.bx-bolt-circle:before{content:"\e940"}.bx-bomb:before{content:"\e941"}.bx-bone:before{content:"\e942"}.bx-bong:before{content:"\e943"}.bx-book:before{content:"\e944"}.bx-book-add:before{content:"\e945"}.bx-book-alt:before{content:"\e946"}.bx-book-bookmark:before{content:"\e947"}.bx-book-content:before{content:"\e948"}.bx-book-heart:before{content:"\e949"}.bx-bookmark:before{content:"\e94a"}.bx-bookmark-alt:before{content:"\e94b"}.bx-bookmark-alt-minus:before{content:"\e94c"}.bx-bookmark-alt-plus:before{content:"\e94d"}.bx-bookmark-heart:before{content:"\e94e"}.bx-bookmark-minus:before{content:"\e94f"}.bx-bookmark-plus:before{content:"\e950"}.bx-bookmarks:before{content:"\e951"}.bx-book-open:before{content:"\e952"}.bx-book-reader:before{content:"\e953"}.bx-border-all:before{content:"\e954"}.bx-border-bottom:before{content:"\e955"}.bx-border-inner:before{content:"\e956"}.bx-border-left:before{content:"\e957"}.bx-border-none:before{content:"\e958"}.bx-border-outer:before{content:"\e959"}.bx-border-radius:before{content:"\e95a"}.bx-border-right:before{content:"\e95b"}.bx-border-top:before{content:"\e95c"}.bx-bot:before{content:"\e95d"}.bx-bowling-ball:before{content:"\e95e"}.bx-box:before{content:"\e95f"}.bx-bracket:before{content:"\e960"}.bx-braille:before{content:"\e961"}.bx-brain:before{content:"\e962"}.bx-briefcase:before{content:"\e963"}.bx-briefcase-alt:before{content:"\e964"}.bx-briefcase-alt-2:before{content:"\e965"}.bx-brightness:before{content:"\e966"}.bx-brightness-half:before{content:"\e967"}.bx-broadcast:before{content:"\e968"}.bx-brush:before{content:"\e969"}.bx-brush-alt:before{content:"\e96a"}.bx-bug:before{content:"\e96b"}.bx-bug-alt:before{content:"\e96c"}.bx-building:before{content:"\e96d"}.bx-building-house:before{content:"\e96e"}.bx-buildings:before{content:"\e96f"}.bx-bulb:before{content:"\e970"}.bx-bullseye:before{content:"\e971"}.bx-buoy:before{content:"\e972"}.bx-bus:before{content:"\e973"}.bx-bus-school:before{content:"\e974"}.bx-cabinet:before{content:"\e975"}.bx-cake:before{content:"\e976"}.bx-calculator:before{content:"\e977"}.bx-calendar:before{content:"\e978"}.bx-calendar-alt:before{content:"\e979"}.bx-calendar-check:before{content:"\e97a"}.bx-calendar-edit:before{content:"\e97b"}.bx-calendar-event:before{content:"\e97c"}.bx-calendar-exclamation:before{content:"\e97d"}.bx-calendar-heart:before{content:"\e97e"}.bx-calendar-minus:before{content:"\e97f"}.bx-calendar-plus:before{content:"\e980"}.bx-calendar-star:before{content:"\e981"}.bx-calendar-week:before{content:"\e982"}.bx-calendar-x:before{content:"\e983"}.bx-camera:before{content:"\e984"}.bx-camera-home:before{content:"\e985"}.bx-camera-movie:before{content:"\e986"}.bx-camera-off:before{content:"\e987"}.bx-capsule:before{content:"\e988"}.bx-captions:before{content:"\e989"}.bx-car:before{content:"\e98a"}.bx-card:before{content:"\e98b"}.bx-caret-down:before{content:"\e98c"}.bx-caret-down-circle:before{content:"\e98d"}.bx-caret-down-square:before{content:"\e98e"}.bx-caret-left:before{content:"\e98f"}.bx-caret-left-circle:before{content:"\e990"}.bx-caret-left-square:before{content:"\e991"}.bx-caret-right:before{content:"\e992"}.bx-caret-right-circle:before{content:"\e993"}.bx-caret-right-square:before{content:"\e994"}.bx-caret-up:before{content:"\e995"}.bx-caret-up-circle:before{content:"\e996"}.bx-caret-up-square:before{content:"\e997"}.bx-carousel:before{content:"\e998"}.bx-cart:before{content:"\e999"}.bx-cart-alt:before{content:"\e99a"}.bx-cast:before{content:"\e99b"}.bx-category:before{content:"\e99c"}.bx-category-alt:before{content:"\e99d"}.bx-cctv:before{content:"\e99e"}.bx-certification:before{content:"\e99f"}.bx-chair:before{content:"\e9a0"}.bx-chalkboard:before{content:"\e9a1"}.bx-chart:before{content:"\e9a2"}.bx-chat:before{content:"\e9a3"}.bx-check:before{content:"\e9a4"}.bx-checkbox:before{content:"\e9a5"}.bx-checkbox-checked:before{content:"\e9a6"}.bx-checkbox-square:before{content:"\e9a7"}.bx-check-circle:before{content:"\e9a8"}.bx-check-double:before{content:"\e9a9"}.bx-check-shield:before{content:"\e9aa"}.bx-check-square:before{content:"\e9ab"}.bx-chevron-down:before{content:"\e9ac"}.bx-chevron-down-circle:before{content:"\e9ad"}.bx-chevron-down-square:before{content:"\e9ae"}.bx-chevron-left:before{content:"\e9af"}.bx-chevron-left-circle:before{content:"\e9b0"}.bx-chevron-left-square:before{content:"\e9b1"}.bx-chevron-right:before{content:"\e9b2"}.bx-chevron-right-circle:before{content:"\e9b3"}.bx-chevron-right-square:before{content:"\e9b4"}.bx-chevrons-down:before{content:"\e9b5"}.bx-chevrons-left:before{content:"\e9b6"}.bx-chevrons-right:before{content:"\e9b7"}.bx-chevrons-up:before{content:"\e9b8"}.bx-chevron-up:before{content:"\e9b9"}.bx-chevron-up-circle:before{content:"\e9ba"}.bx-chevron-up-square:before{content:"\e9bb"}.bx-chip:before{content:"\e9bc"}.bx-church:before{content:"\e9bd"}.bx-circle:before{content:"\e9be"}.bx-clinic:before{content:"\e9bf"}.bx-clipboard:before{content:"\e9c0"}.bx-closet:before{content:"\e9c1"}.bx-cloud:before{content:"\e9c2"}.bx-cloud-download:before{content:"\e9c3"}.bx-cloud-drizzle:before{content:"\e9c4"}.bx-cloud-lightning:before{content:"\e9c5"}.bx-cloud-light-rain:before{content:"\e9c6"}.bx-cloud-rain:before{content:"\e9c7"}.bx-cloud-snow:before{content:"\e9c8"}.bx-cloud-upload:before{content:"\e9c9"}.bx-code:before{content:"\e9ca"}.bx-code-alt:before{content:"\e9cb"}.bx-code-block:before{content:"\e9cc"}.bx-code-curly:before{content:"\e9cd"}.bx-coffee:before{content:"\e9ce"}.bx-coffee-togo:before{content:"\e9cf"}.bx-cog:before{content:"\e9d0"}.bx-coin:before{content:"\e9d1"}.bx-coin-stack:before{content:"\e9d2"}.bx-collapse:before{content:"\e9d3"}.bx-collection:before{content:"\e9d4"}.bx-color-fill:before{content:"\e9d5"}.bx-columns:before{content:"\e9d6"}.bx-command:before{content:"\e9d7"}.bx-comment:before{content:"\e9d8"}.bx-comment-add:before{content:"\e9d9"}.bx-comment-check:before{content:"\e9da"}.bx-comment-detail:before{content:"\e9db"}.bx-comment-dots:before{content:"\e9dc"}.bx-comment-edit:before{content:"\e9dd"}.bx-comment-error:before{content:"\e9de"}.bx-comment-minus:before{content:"\e9df"}.bx-comment-x:before{content:"\e9e0"}.bx-compass:before{content:"\e9e1"}.bx-confused:before{content:"\e9e2"}.bx-conversation:before{content:"\e9e3"}.bx-cookie:before{content:"\e9e4"}.bx-cool:before{content:"\e9e5"}.bx-copy:before{content:"\e9e6"}.bx-copy-alt:before{content:"\e9e7"}.bx-copyright:before{content:"\e9e8"}.bx-credit-card:before{content:"\e9e9"}.bx-credit-card-alt:before{content:"\e9ea"}.bx-credit-card-front:before{content:"\e9eb"}.bx-crop:before{content:"\e9ec"}.bx-crosshair:before{content:"\e9ed"}.bx-crown:before{content:"\e9ee"}.bx-cube:before{content:"\e9ef"}.bx-cube-alt:before{content:"\e9f0"}.bx-cuboid:before{content:"\e9f1"}.bx-current-location:before{content:"\e9f2"}.bx-customize:before{content:"\e9f3"}.bx-cut:before{content:"\e9f4"}.bx-cycling:before{content:"\e9f5"}.bx-cylinder:before{content:"\e9f6"}.bx-data:before{content:"\e9f7"}.bx-desktop:before{content:"\e9f8"}.bx-detail:before{content:"\e9f9"}.bx-devices:before{content:"\e9fa"}.bx-dialpad:before{content:"\e9fb"}.bx-dialpad-alt:before{content:"\e9fc"}.bx-diamond:before{content:"\e9fd"}.bx-dice-1:before{content:"\e9fe"}.bx-dice-2:before{content:"\e9ff"}.bx-dice-3:before{content:"\ea00"}.bx-dice-4:before{content:"\ea01"}.bx-dice-5:before{content:"\ea02"}.bx-dice-6:before{content:"\ea03"}.bx-directions:before{content:"\ea04"}.bx-disc:before{content:"\ea05"}.bx-dish:before{content:"\ea06"}.bx-dislike:before{content:"\ea07"}.bx-dizzy:before{content:"\ea08"}.bx-dna:before{content:"\ea09"}.bx-dock-bottom:before{content:"\ea0a"}.bx-dock-left:before{content:"\ea0b"}.bx-dock-right:before{content:"\ea0c"}.bx-dock-top:before{content:"\ea0d"}.bx-dollar:before{content:"\ea0e"}.bx-dollar-circle:before{content:"\ea0f"}.bx-donate-blood:before{content:"\ea10"}.bx-donate-heart:before{content:"\ea11"}.bx-door-open:before{content:"\ea12"}.bx-dots-horizontal:before{content:"\ea13"}.bx-dots-horizontal-rounded:before{content:"\ea14"}.bx-dots-vertical:before{content:"\ea15"}.bx-dots-vertical-rounded:before{content:"\ea16"}.bx-doughnut-chart:before{content:"\ea17"}.bx-down-arrow:before{content:"\ea18"}.bx-down-arrow-alt:before{content:"\ea19"}.bx-down-arrow-circle:before{content:"\ea1a"}.bx-download:before{content:"\ea1b"}.bx-downvote:before{content:"\ea1c"}.bx-drink:before{content:"\ea1d"}.bx-droplet:before{content:"\ea1e"}.bx-dumbbell:before{content:"\ea1f"}.bx-duplicate:before{content:"\ea20"}.bx-edit:before{content:"\ea21"}.bx-edit-alt:before{content:"\ea22"}.bx-envelope:before{content:"\ea23"}.bx-envelope-open:before{content:"\ea24"}.bx-equalizer:before{content:"\ea25"}.bx-eraser:before{content:"\ea26"}.bx-error:before{content:"\ea27"}.bx-error-alt:before{content:"\ea28"}.bx-error-circle:before{content:"\ea29"}.bx-euro:before{content:"\ea2a"}.bx-exclude:before{content:"\ea2b"}.bx-exit:before{content:"\ea2c"}.bx-exit-fullscreen:before{content:"\ea2d"}.bx-expand:before{content:"\ea2e"}.bx-expand-alt:before{content:"\ea2f"}.bx-export:before{content:"\ea30"}.bx-extension:before{content:"\ea31"}.bx-face:before{content:"\ea32"}.bx-fast-forward:before{content:"\ea33"}.bx-fast-forward-circle:before{content:"\ea34"}.bx-female:before{content:"\ea35"}.bx-female-sign:before{content:"\ea36"}.bx-file:before{content:"\ea37"}.bx-file-blank:before{content:"\ea38"}.bx-file-find:before{content:"\ea39"}.bx-film:before{content:"\ea3a"}.bx-filter:before{content:"\ea3b"}.bx-filter-alt:before{content:"\ea3c"}.bx-fingerprint:before{content:"\ea3d"}.bx-first-aid:before{content:"\ea3e"}.bx-first-page:before{content:"\ea3f"}.bx-flag:before{content:"\ea40"}.bx-folder:before{content:"\ea41"}.bx-folder-minus:before{content:"\ea42"}.bx-folder-open:before{content:"\ea43"}.bx-folder-plus:before{content:"\ea44"}.bx-font:before{content:"\ea45"}.bx-font-color:before{content:"\ea46"}.bx-font-family:before{content:"\ea47"}.bx-font-size:before{content:"\ea48"}.bx-food-menu:before{content:"\ea49"}.bx-food-tag:before{content:"\ea4a"}.bx-football:before{content:"\ea4b"}.bx-fridge:before{content:"\ea4c"}.bx-fullscreen:before{content:"\ea4d"}.bx-game:before{content:"\ea4e"}.bx-gas-pump:before{content:"\ea4f"}.bx-ghost:before{content:"\ea50"}.bx-gift:before{content:"\ea51"}.bx-git-branch:before{content:"\ea52"}.bx-git-commit:before{content:"\ea53"}.bx-git-compare:before{content:"\ea54"}.bx-git-merge:before{content:"\ea55"}.bx-git-pull-request:before{content:"\ea56"}.bx-git-repo-forked:before{content:"\ea57"}.bx-glasses:before{content:"\ea58"}.bx-glasses-alt:before{content:"\ea59"}.bx-globe:before{content:"\ea5a"}.bx-globe-alt:before{content:"\ea5b"}.bx-grid:before{content:"\ea5c"}.bx-grid-alt:before{content:"\ea5d"}.bx-grid-horizontal:before{content:"\ea5e"}.bx-grid-small:before{content:"\ea5f"}.bx-grid-vertical:before{content:"\ea60"}.bx-group:before{content:"\ea61"}.bx-handicap:before{content:"\ea62"}.bx-happy:before{content:"\ea63"}.bx-happy-alt:before{content:"\ea64"}.bx-happy-beaming:before{content:"\ea65"}.bx-happy-heart-eyes:before{content:"\ea66"}.bx-hash:before{content:"\ea67"}.bx-hdd:before{content:"\ea68"}.bx-heading:before{content:"\ea69"}.bx-headphone:before{content:"\ea6a"}.bx-health:before{content:"\ea6b"}.bx-heart:before{content:"\ea6c"}.bx-heart-circle:before{content:"\ea6d"}.bx-heart-square:before{content:"\ea6e"}.bx-help-circle:before{content:"\ea6f"}.bx-hide:before{content:"\ea70"}.bx-highlight:before{content:"\ea71"}.bx-history:before{content:"\ea72"}.bx-hive:before{content:"\ea73"}.bx-home:before{content:"\ea74"}.bx-home-alt:before{content:"\ea75"}.bx-home-circle:before{content:"\ea76"}.bx-home-heart:before{content:"\ea77"}.bx-home-smile:before{content:"\ea78"}.bx-horizontal-center:before{content:"\ea79"}.bx-hotel:before{content:"\ea7a"}.bx-hourglass:before{content:"\ea7b"}.bx-id-card:before{content:"\ea7c"}.bx-image:before{content:"\ea7d"}.bx-image-add:before{content:"\ea7e"}.bx-image-alt:before{content:"\ea7f"}.bx-images:before{content:"\ea80"}.bx-import:before{content:"\ea81"}.bx-infinite:before{content:"\ea82"}.bx-info-circle:before{content:"\ea83"}.bx-info-square:before{content:"\ea84"}.bx-intersect:before{content:"\ea85"}.bx-italic:before{content:"\ea86"}.bx-joystick:before{content:"\ea87"}.bx-joystick-alt:before{content:"\ea88"}.bx-joystick-button:before{content:"\ea89"}.bx-key:before{content:"\ea8a"}.bx-label:before{content:"\ea8b"}.bx-landscape:before{content:"\ea8c"}.bx-laptop:before{content:"\ea8d"}.bx-last-page:before{content:"\ea8e"}.bx-laugh:before{content:"\ea8f"}.bx-layer:before{content:"\ea90"}.bx-layer-minus:before{content:"\ea91"}.bx-layer-plus:before{content:"\ea92"}.bx-layout:before{content:"\ea93"}.bx-left-arrow:before{content:"\ea94"}.bx-left-arrow-alt:before{content:"\ea95"}.bx-left-arrow-circle:before{content:"\ea96"}.bx-left-down-arrow-circle:before{content:"\ea97"}.bx-left-indent:before{content:"\ea98"}.bx-left-top-arrow-circle:before{content:"\ea99"}.bx-library:before{content:"\ea9a"}.bx-like:before{content:"\ea9b"}.bx-line-chart:before{content:"\ea9c"}.bx-line-chart-down:before{content:"\ea9d"}.bx-link:before{content:"\ea9e"}.bx-link-alt:before{content:"\ea9f"}.bx-link-external:before{content:"\eaa0"}.bx-lira:before{content:"\eaa1"}.bx-list-check:before{content:"\eaa2"}.bx-list-minus:before{content:"\eaa3"}.bx-list-ol:before{content:"\eaa4"}.bx-list-plus:before{content:"\eaa5"}.bx-list-ul:before{content:"\eaa6"}.bx-loader:before{content:"\eaa7"}.bx-loader-alt:before{content:"\eaa8"}.bx-loader-circle:before{content:"\eaa9"}.bx-location-plus:before{content:"\eaaa"}.bx-lock:before{content:"\eaab"}.bx-lock-alt:before{content:"\eaac"}.bx-lock-open:before{content:"\eaad"}.bx-lock-open-alt:before{content:"\eaae"}.bx-log-in:before{content:"\eaaf"}.bx-log-in-circle:before{content:"\eab0"}.bx-log-out:before{content:"\eab1"}.bx-log-out-circle:before{content:"\eab2"}.bx-low-vision:before{content:"\eab3"}.bx-magnet:before{content:"\eab4"}.bx-mail-send:before{content:"\eab5"}.bx-male:before{content:"\eab6"}.bx-male-sign:before{content:"\eab7"}.bx-map:before{content:"\eab8"}.bx-map-alt:before{content:"\eab9"}.bx-map-pin:before{content:"\eaba"}.bx-mask:before{content:"\eabb"}.bx-medal:before{content:"\eabc"}.bx-meh:before{content:"\eabd"}.bx-meh-alt:before{content:"\eabe"}.bx-meh-blank:before{content:"\eabf"}.bx-memory-card:before{content:"\eac0"}.bx-menu:before{content:"\eac1"}.bx-menu-alt-left:before{content:"\eac2"}.bx-menu-alt-right:before{content:"\eac3"}.bx-merge:before{content:"\eac4"}.bx-message:before{content:"\eac5"}.bx-message-add:before{content:"\eac6"}.bx-message-alt:before{content:"\eac7"}.bx-message-alt-add:before{content:"\eac8"}.bx-message-alt-check:before{content:"\eac9"}.bx-message-alt-detail:before{content:"\eaca"}.bx-message-alt-dots:before{content:"\eacb"}.bx-message-alt-edit:before{content:"\eacc"}.bx-message-alt-error:before{content:"\eacd"}.bx-message-alt-minus:before{content:"\eace"}.bx-message-alt-x:before{content:"\eacf"}.bx-message-check:before{content:"\ead0"}.bx-message-detail:before{content:"\ead1"}.bx-message-dots:before{content:"\ead2"}.bx-message-edit:before{content:"\ead3"}.bx-message-error:before{content:"\ead4"}.bx-message-minus:before{content:"\ead5"}.bx-message-rounded:before{content:"\ead6"}.bx-message-rounded-add:before{content:"\ead7"}.bx-message-rounded-check:before{content:"\ead8"}.bx-message-rounded-detail:before{content:"\ead9"}.bx-message-rounded-dots:before{content:"\eada"}.bx-message-rounded-edit:before{content:"\eadb"}.bx-message-rounded-error:before{content:"\eadc"}.bx-message-rounded-minus:before{content:"\eadd"}.bx-message-rounded-x:before{content:"\eade"}.bx-message-square:before{content:"\eadf"}.bx-message-square-add:before{content:"\eae0"}.bx-message-square-check:before{content:"\eae1"}.bx-message-square-detail:before{content:"\eae2"}.bx-message-square-dots:before{content:"\eae3"}.bx-message-square-edit:before{content:"\eae4"}.bx-message-square-error:before{content:"\eae5"}.bx-message-square-minus:before{content:"\eae6"}.bx-message-square-x:before{content:"\eae7"}.bx-message-x:before{content:"\eae8"}.bx-meteor:before{content:"\eae9"}.bx-microchip:before{content:"\eaea"}.bx-microphone:before{content:"\eaeb"}.bx-microphone-off:before{content:"\eaec"}.bx-minus:before{content:"\eaed"}.bx-minus-back:before{content:"\eaee"}.bx-minus-circle:before{content:"\eaef"}.bx-minus-front:before{content:"\eaf0"}.bx-mobile:before{content:"\eaf1"}.bx-mobile-alt:before{content:"\eaf2"}.bx-mobile-landscape:before{content:"\eaf3"}.bx-mobile-vibration:before{content:"\eaf4"}.bx-money:before{content:"\eaf5"}.bx-moon:before{content:"\eaf6"}.bx-mouse:before{content:"\eaf7"}.bx-mouse-alt:before{content:"\eaf8"}.bx-move:before{content:"\eaf9"}.bx-move-horizontal:before{content:"\eafa"}.bx-move-vertical:before{content:"\eafb"}.bx-movie:before{content:"\eafc"}.bx-movie-play:before{content:"\eafd"}.bx-music:before{content:"\eafe"}.bx-navigation:before{content:"\eaff"}.bx-network-chart:before{content:"\eb00"}.bx-news:before{content:"\eb01"}.bx-no-entry:before{content:"\eb02"}.bx-note:before{content:"\eb03"}.bx-notepad:before{content:"\eb04"}.bx-notification:before{content:"\eb05"}.bx-notification-off:before{content:"\eb06"}.bx-outline:before{content:"\eb07"}.bx-package:before{content:"\eb08"}.bx-paint:before{content:"\eb09"}.bx-paint-roll:before{content:"\eb0a"}.bx-palette:before{content:"\eb0b"}.bx-paperclip:before{content:"\eb0c"}.bx-paper-plane:before{content:"\eb0d"}.bx-paragraph:before{content:"\eb0e"}.bx-paste:before{content:"\eb0f"}.bx-pause:before{content:"\eb10"}.bx-pause-circle:before{content:"\eb11"}.bx-pen:before{content:"\eb12"}.bx-pencil:before{content:"\eb13"}.bx-phone:before{content:"\eb14"}.bx-phone-call:before{content:"\eb15"}.bx-phone-incoming:before{content:"\eb16"}.bx-phone-outgoing:before{content:"\eb17"}.bx-photo-album:before{content:"\eb18"}.bx-pie-chart:before{content:"\eb19"}.bx-pie-chart-alt:before{content:"\eb1a"}.bx-pie-chart-alt-2:before{content:"\eb1b"}.bx-pin:before{content:"\eb1c"}.bx-planet:before{content:"\eb1d"}.bx-play:before{content:"\eb1e"}.bx-play-circle:before{content:"\eb1f"}.bx-plug:before{content:"\eb20"}.bx-plus:before{content:"\eb21"}.bx-plus-circle:before{content:"\eb22"}.bx-plus-medical:before{content:"\eb23"}.bx-pointer:before{content:"\eb24"}.bx-poll:before{content:"\eb25"}.bx-polygon:before{content:"\eb26"}.bx-pound:before{content:"\eb27"}.bx-power-off:before{content:"\eb28"}.bx-printer:before{content:"\eb29"}.bx-pulse:before{content:"\eb2a"}.bx-purchase-tag:before{content:"\eb2b"}.bx-purchase-tag-alt:before{content:"\eb2c"}.bx-pyramid:before{content:"\eb2d"}.bx-question-mark:before{content:"\eb2e"}.bx-radar:before{content:"\eb2f"}.bx-radio:before{content:"\eb30"}.bx-radio-circle:before{content:"\eb31"}.bx-radio-circle-marked:before{content:"\eb32"}.bx-receipt:before{content:"\eb33"}.bx-rectangle:before{content:"\eb34"}.bx-recycle:before{content:"\eb35"}.bx-redo:before{content:"\eb36"}.bx-refresh:before{content:"\eb37"}.bx-rename:before{content:"\eb38"}.bx-repeat:before{content:"\eb39"}.bx-reply:before{content:"\eb3a"}.bx-reply-all:before{content:"\eb3b"}.bx-repost:before{content:"\eb3c"}.bx-reset:before{content:"\eb3d"}.bx-restaurant:before{content:"\eb3e"}.bx-revision:before{content:"\eb3f"}.bx-rewind:before{content:"\eb40"}.bx-rewind-circle:before{content:"\eb41"}.bx-right-arrow:before{content:"\eb42"}.bx-right-arrow-alt:before{content:"\eb43"}.bx-right-arrow-circle:before{content:"\eb44"}.bx-right-down-arrow-circle:before{content:"\eb45"}.bx-right-indent:before{content:"\eb46"}.bx-right-top-arrow-circle:before{content:"\eb47"}.bx-rocket:before{content:"\eb48"}.bx-rotate-left:before{content:"\eb49"}.bx-rotate-right:before{content:"\eb4a"}.bx-rss:before{content:"\eb4b"}.bx-ruble:before{content:"\eb4c"}.bx-ruler:before{content:"\eb4d"}.bx-run:before{content:"\eb4e"}.bx-rupee:before{content:"\eb4f"}.bx-sad:before{content:"\eb50"}.bx-save:before{content:"\eb51"}.bx-scan:before{content:"\eb52"}.bx-screenshot:before{content:"\eb53"}.bx-search:before{content:"\eb54"}.bx-search-alt:before{content:"\eb55"}.bx-search-alt-2:before{content:"\eb56"}.bx-selection:before{content:"\eb57"}.bx-select-multiple:before{content:"\eb58"}.bx-send:before{content:"\eb59"}.bx-server:before{content:"\eb5a"}.bx-shape-circle:before{content:"\eb5b"}.bx-shape-polygon:before{content:"\eb5c"}.bx-shape-square:before{content:"\eb5d"}.bx-shape-triangle:before{content:"\eb5e"}.bx-share:before{content:"\eb5f"}.bx-share-alt:before{content:"\eb60"}.bx-shekel:before{content:"\eb61"}.bx-shield:before{content:"\eb62"}.bx-shield-alt:before{content:"\eb63"}.bx-shield-alt-2:before{content:"\eb64"}.bx-shield-quarter:before{content:"\eb65"}.bx-shield-x:before{content:"\eb66"}.bx-shocked:before{content:"\eb67"}.bx-shopping-bag:before{content:"\eb68"}.bx-show:before{content:"\eb69"}.bx-show-alt:before{content:"\eb6a"}.bx-shuffle:before{content:"\eb6b"}.bx-sidebar:before{content:"\eb6c"}.bx-sitemap:before{content:"\eb6d"}.bx-skip-next:before{content:"\eb6e"}.bx-skip-next-circle:before{content:"\eb6f"}.bx-skip-previous:before{content:"\eb70"}.bx-skip-previous-circle:before{content:"\eb71"}.bx-sleepy:before{content:"\eb72"}.bx-slider:before{content:"\eb73"}.bx-slider-alt:before{content:"\eb74"}.bx-slideshow:before{content:"\eb75"}.bx-smile:before{content:"\eb76"}.bx-sort:before{content:"\eb77"}.bx-sort-alt-2:before{content:"\eb78"}.bx-sort-a-z:before{content:"\eb79"}.bx-sort-down:before{content:"\eb7a"}.bx-sort-up:before{content:"\eb7b"}.bx-sort-z-a:before{content:"\eb7c"}.bx-spa:before{content:"\eb7d"}.bx-space-bar:before{content:"\eb7e"}.bx-spray-can:before{content:"\eb7f"}.bx-spreadsheet:before{content:"\eb80"}.bx-square:before{content:"\eb81"}.bx-square-rounded:before{content:"\eb82"}.bx-star:before{content:"\eb83"}.bx-station:before{content:"\eb84"}.bx-stats:before{content:"\eb85"}.bx-sticker:before{content:"\eb86"}.bx-stop:before{content:"\eb87"}.bx-stop-circle:before{content:"\eb88"}.bx-stopwatch:before{content:"\eb89"}.bx-store:before{content:"\eb8a"}.bx-store-alt:before{content:"\eb8b"}.bx-street-view:before{content:"\eb8c"}.bx-strikethrough:before{content:"\eb8d"}.bx-subdirectory-left:before{content:"\eb8e"}.bx-subdirectory-right:before{content:"\eb8f"}.bx-sun:before{content:"\eb90"}.bx-support:before{content:"\eb91"}.bx-swim:before{content:"\eb92"}.bx-sync:before{content:"\eb93"}.bx-tab:before{content:"\eb94"}.bx-table:before{content:"\eb95"}.bx-tachometer:before{content:"\eb96"}.bx-tag:before{content:"\eb97"}.bx-tag-alt:before{content:"\eb98"}.bx-target-lock:before{content:"\eb99"}.bx-task:before{content:"\eb9a"}.bx-task-x:before{content:"\eb9b"}.bx-taxi:before{content:"\eb9c"}.bx-tennis-ball:before{content:"\eb9d"}.bx-terminal:before{content:"\eb9e"}.bx-test-tube:before{content:"\eb9f"}.bx-text:before{content:"\eba0"}.bx-time:before{content:"\eba1"}.bx-time-five:before{content:"\eba2"}.bx-timer:before{content:"\eba3"}.bx-tired:before{content:"\eba4"}.bx-toggle-left:before{content:"\eba5"}.bx-toggle-right:before{content:"\eba6"}.bx-tone:before{content:"\eba7"}.bx-traffic-cone:before{content:"\eba8"}.bx-train:before{content:"\eba9"}.bx-transfer:before{content:"\ebaa"}.bx-transfer-alt:before{content:"\ebab"}.bx-trash:before{content:"\ebac"}.bx-trash-alt:before{content:"\ebad"}.bx-trending-down:before{content:"\ebae"}.bx-trending-up:before{content:"\ebaf"}.bx-trim:before{content:"\ebb0"}.bx-trip:before{content:"\ebb1"}.bx-trophy:before{content:"\ebb2"}.bx-tv:before{content:"\ebb3"}.bx-underline:before{content:"\ebb4"}.bx-undo:before{content:"\ebb5"}.bx-unite:before{content:"\ebb6"}.bx-unlink:before{content:"\ebb7"}.bx-up-arrow:before{content:"\ebb8"}.bx-up-arrow-alt:before{content:"\ebb9"}.bx-up-arrow-circle:before{content:"\ebba"}.bx-upload:before{content:"\ebbb"}.bx-upside-down:before{content:"\ebbc"}.bx-upvote:before{content:"\ebbd"}.bx-usb:before{content:"\ebbe"}.bx-user:before{content:"\ebbf"}.bx-user-check:before{content:"\ebc0"}.bx-user-circle:before{content:"\ebc1"}.bx-user-minus:before{content:"\ebc2"}.bx-user-pin:before{content:"\ebc3"}.bx-user-plus:before{content:"\ebc4"}.bx-user-voice:before{content:"\ebc5"}.bx-user-x:before{content:"\ebc6"}.bx-vector:before{content:"\ebc7"}.bx-vertical-center:before{content:"\ebc8"}.bx-vial:before{content:"\ebc9"}.bx-video:before{content:"\ebca"}.bx-video-off:before{content:"\ebcb"}.bx-video-plus:before{content:"\ebcc"}.bx-video-recording:before{content:"\ebcd"}.bx-voicemail:before{content:"\ebce"}.bx-volume:before{content:"\ebcf"}.bx-volume-full:before{content:"\ebd0"}.bx-volume-low:before{content:"\ebd1"}.bx-volume-mute:before{content:"\ebd2"}.bx-walk:before{content:"\ebd3"}.bx-wallet:before{content:"\ebd4"}.bx-wallet-alt:before{content:"\ebd5"}.bx-water:before{content:"\ebd6"}.bx-webcam:before{content:"\ebd7"}.bx-wifi:before{content:"\ebd8"}.bx-wifi-0:before{content:"\ebd9"}.bx-wifi-1:before{content:"\ebda"}.bx-wifi-2:before{content:"\ebdb"}.bx-wifi-off:before{content:"\ebdc"}.bx-wind:before{content:"\ebdd"}.bx-window:before{content:"\ebde"}.bx-window-alt:before{content:"\ebdf"}.bx-window-close:before{content:"\ebe0"}.bx-window-open:before{content:"\ebe1"}.bx-windows:before{content:"\ebe2"}.bx-wine:before{content:"\ebe3"}.bx-wink-smile:before{content:"\ebe4"}.bx-wink-tongue:before{content:"\ebe5"}.bx-won:before{content:"\ebe6"}.bx-world:before{content:"\ebe7"}.bx-wrench:before{content:"\ebe8"}.bx-x:before{content:"\ebe9"}.bx-x-circle:before{content:"\ebea"}.bx-yen:before{content:"\ebeb"}.bx-zoom-in:before{content:"\ebec"}.bx-zoom-out:before{content:"\ebed"}.bxs-add-to-queue:before{content:"\ebee"}.bxs-adjust:before{content:"\ebef"}.bxs-adjust-alt:before{content:"\ebf0"}.bxs-alarm:before{content:"\ebf1"}.bxs-alarm-add:before{content:"\ebf2"}.bxs-alarm-exclamation:before{content:"\ebf3"}.bxs-alarm-off:before{content:"\ebf4"}.bxs-alarm-snooze:before{content:"\ebf5"}.bxs-album:before{content:"\ebf6"}.bxs-ambulance:before{content:"\ebf7"}.bxs-analyse:before{content:"\ebf8"}.bxs-angry:before{content:"\ebf9"}.bxs-arch:before{content:"\ebfa"}.bxs-archive:before{content:"\ebfb"}.bxs-archive-in:before{content:"\ebfc"}.bxs-archive-out:before{content:"\ebfd"}.bxs-area:before{content:"\ebfe"}.bxs-arrow-from-bottom:before{content:"\ebff"}.bxs-arrow-from-left:before{content:"\ec00"}.bxs-arrow-from-right:before{content:"\ec01"}.bxs-arrow-from-top:before{content:"\ec02"}.bxs-arrow-to-bottom:before{content:"\ec03"}.bxs-arrow-to-left:before{content:"\ec04"}.bxs-arrow-to-right:before{content:"\ec05"}.bxs-arrow-to-top:before{content:"\ec06"}.bxs-award:before{content:"\ec07"}.bxs-baby-carriage:before{content:"\ec08"}.bxs-backpack:before{content:"\ec09"}.bxs-badge:before{content:"\ec0a"}.bxs-badge-check:before{content:"\ec0b"}.bxs-badge-dollar:before{content:"\ec0c"}.bxs-ball:before{content:"\ec0d"}.bxs-band-aid:before{content:"\ec0e"}.bxs-bank:before{content:"\ec0f"}.bxs-bar-chart-alt-2:before{content:"\ec10"}.bxs-bar-chart-square:before{content:"\ec11"}.bxs-barcode:before{content:"\ec12"}.bxs-baseball:before{content:"\ec13"}.bxs-basket:before{content:"\ec14"}.bxs-basketball:before{content:"\ec15"}.bxs-bath:before{content:"\ec16"}.bxs-battery:before{content:"\ec17"}.bxs-battery-charging:before{content:"\ec18"}.bxs-battery-full:before{content:"\ec19"}.bxs-battery-low:before{content:"\ec1a"}.bxs-bed:before{content:"\ec1b"}.bxs-been-here:before{content:"\ec1c"}.bxs-beer:before{content:"\ec1d"}.bxs-bell:before{content:"\ec1e"}.bxs-bell-minus:before{content:"\ec1f"}.bxs-bell-off:before{content:"\ec20"}.bxs-bell-plus:before{content:"\ec21"}.bxs-bell-ring:before{content:"\ec22"}.bxs-bible:before{content:"\ec23"}.bxs-binoculars:before{content:"\ec24"}.bxs-blanket:before{content:"\ec25"}.bxs-bolt:before{content:"\ec26"}.bxs-bolt-circle:before{content:"\ec27"}.bxs-bomb:before{content:"\ec28"}.bxs-bone:before{content:"\ec29"}.bxs-bong:before{content:"\ec2a"}.bxs-book:before{content:"\ec2b"}.bxs-book-add:before{content:"\ec2c"}.bxs-book-alt:before{content:"\ec2d"}.bxs-book-bookmark:before{content:"\ec2e"}.bxs-book-content:before{content:"\ec2f"}.bxs-book-heart:before{content:"\ec30"}.bxs-bookmark:before{content:"\ec31"}.bxs-bookmark-alt:before{content:"\ec32"}.bxs-bookmark-alt-minus:before{content:"\ec33"}.bxs-bookmark-alt-plus:before{content:"\ec34"}.bxs-bookmark-heart:before{content:"\ec35"}.bxs-bookmark-minus:before{content:"\ec36"}.bxs-bookmark-plus:before{content:"\ec37"}.bxs-bookmarks:before{content:"\ec38"}.bxs-bookmark-star:before{content:"\ec39"}.bxs-book-open:before{content:"\ec3a"}.bxs-book-reader:before{content:"\ec3b"}.bxs-bot:before{content:"\ec3c"}.bxs-bowling-ball:before{content:"\ec3d"}.bxs-box:before{content:"\ec3e"}.bxs-brain:before{content:"\ec3f"}.bxs-briefcase:before{content:"\ec40"}.bxs-briefcase-alt:before{content:"\ec41"}.bxs-briefcase-alt-2:before{content:"\ec42"}.bxs-brightness:before{content:"\ec43"}.bxs-brightness-half:before{content:"\ec44"}.bxs-brush:before{content:"\ec45"}.bxs-brush-alt:before{content:"\ec46"}.bxs-bug:before{content:"\ec47"}.bxs-bug-alt:before{content:"\ec48"}.bxs-building:before{content:"\ec49"}.bxs-building-house:before{content:"\ec4a"}.bxs-buildings:before{content:"\ec4b"}.bxs-bulb:before{content:"\ec4c"}.bxs-bullseye:before{content:"\ec4d"}.bxs-buoy:before{content:"\ec4e"}.bxs-bus:before{content:"\ec4f"}.bxs-business:before{content:"\ec50"}.bxs-bus-school:before{content:"\ec51"}.bxs-cabinet:before{content:"\ec52"}.bxs-cake:before{content:"\ec53"}.bxs-calculator:before{content:"\ec54"}.bxs-calendar:before{content:"\ec55"}.bxs-calendar-alt:before{content:"\ec56"}.bxs-calendar-check:before{content:"\ec57"}.bxs-calendar-edit:before{content:"\ec58"}.bxs-calendar-event:before{content:"\ec59"}.bxs-calendar-exclamation:before{content:"\ec5a"}.bxs-calendar-heart:before{content:"\ec5b"}.bxs-calendar-minus:before{content:"\ec5c"}.bxs-calendar-plus:before{content:"\ec5d"}.bxs-calendar-star:before{content:"\ec5e"}.bxs-calendar-week:before{content:"\ec5f"}.bxs-calendar-x:before{content:"\ec60"}.bxs-camera:before{content:"\ec61"}.bxs-camera-home:before{content:"\ec62"}.bxs-camera-movie:before{content:"\ec63"}.bxs-camera-off:before{content:"\ec64"}.bxs-camera-plus:before{content:"\ec65"}.bxs-capsule:before{content:"\ec66"}.bxs-captions:before{content:"\ec67"}.bxs-car:before{content:"\ec68"}.bxs-car-battery:before{content:"\ec69"}.bxs-car-crash:before{content:"\ec6a"}.bxs-card:before{content:"\ec6b"}.bxs-caret-down-circle:before{content:"\ec6c"}.bxs-caret-down-square:before{content:"\ec6d"}.bxs-caret-left-circle:before{content:"\ec6e"}.bxs-caret-left-square:before{content:"\ec6f"}.bxs-caret-right-circle:before{content:"\ec70"}.bxs-caret-right-square:before{content:"\ec71"}.bxs-caret-up-circle:before{content:"\ec72"}.bxs-caret-up-square:before{content:"\ec73"}.bxs-car-garage:before{content:"\ec74"}.bxs-car-mechanic:before{content:"\ec75"}.bxs-carousel:before{content:"\ec76"}.bxs-cart:before{content:"\ec77"}.bxs-cart-add:before{content:"\ec78"}.bxs-cart-alt:before{content:"\ec79"}.bxs-cart-download:before{content:"\ec7a"}.bxs-car-wash:before{content:"\ec7b"}.bxs-category:before{content:"\ec7c"}.bxs-category-alt:before{content:"\ec7d"}.bxs-cctv:before{content:"\ec7e"}.bxs-certification:before{content:"\ec7f"}.bxs-chalkboard:before{content:"\ec80"}.bxs-chart:before{content:"\ec81"}.bxs-chat:before{content:"\ec82"}.bxs-checkbox:before{content:"\ec83"}.bxs-checkbox-checked:before{content:"\ec84"}.bxs-check-circle:before{content:"\ec85"}.bxs-check-shield:before{content:"\ec86"}.bxs-check-square:before{content:"\ec87"}.bxs-chess:before{content:"\ec88"}.bxs-chevron-down:before{content:"\ec89"}.bxs-chevron-down-circle:before{content:"\ec8a"}.bxs-chevron-down-square:before{content:"\ec8b"}.bxs-chevron-left:before{content:"\ec8c"}.bxs-chevron-left-circle:before{content:"\ec8d"}.bxs-chevron-left-square:before{content:"\ec8e"}.bxs-chevron-right:before{content:"\ec8f"}.bxs-chevron-right-circle:before{content:"\ec90"}.bxs-chevron-right-square:before{content:"\ec91"}.bxs-chevrons-down:before{content:"\ec92"}.bxs-chevrons-left:before{content:"\ec93"}.bxs-chevrons-right:before{content:"\ec94"}.bxs-chevrons-up:before{content:"\ec95"}.bxs-chevron-up:before{content:"\ec96"}.bxs-chevron-up-circle:before{content:"\ec97"}.bxs-chevron-up-square:before{content:"\ec98"}.bxs-chip:before{content:"\ec99"}.bxs-church:before{content:"\ec9a"}.bxs-circle:before{content:"\ec9b"}.bxs-city:before{content:"\ec9c"}.bxs-clinic:before{content:"\ec9d"}.bxs-cloud:before{content:"\ec9e"}.bxs-cloud-download:before{content:"\ec9f"}.bxs-cloud-lightning:before{content:"\eca0"}.bxs-cloud-rain:before{content:"\eca1"}.bxs-cloud-upload:before{content:"\eca2"}.bxs-coffee:before{content:"\eca3"}.bxs-coffee-alt:before{content:"\eca4"}.bxs-coffee-togo:before{content:"\eca5"}.bxs-cog:before{content:"\eca6"}.bxs-coin:before{content:"\eca7"}.bxs-coin-stack:before{content:"\eca8"}.bxs-collection:before{content:"\eca9"}.bxs-color-fill:before{content:"\ecaa"}.bxs-comment:before{content:"\ecab"}.bxs-comment-add:before{content:"\ecac"}.bxs-comment-check:before{content:"\ecad"}.bxs-comment-detail:before{content:"\ecae"}.bxs-comment-dots:before{content:"\ecaf"}.bxs-comment-edit:before{content:"\ecb0"}.bxs-comment-error:before{content:"\ecb1"}.bxs-comment-minus:before{content:"\ecb2"}.bxs-comment-x:before{content:"\ecb3"}.bxs-compass:before{content:"\ecb4"}.bxs-component:before{content:"\ecb5"}.bxs-confused:before{content:"\ecb6"}.bxs-contact:before{content:"\ecb7"}.bxs-conversation:before{content:"\ecb8"}.bxs-cookie:before{content:"\ecb9"}.bxs-cool:before{content:"\ecba"}.bxs-copy:before{content:"\ecbb"}.bxs-copy-alt:before{content:"\ecbc"}.bxs-copyright:before{content:"\ecbd"}.bxs-coupon:before{content:"\ecbe"}.bxs-credit-card:before{content:"\ecbf"}.bxs-credit-card-alt:before{content:"\ecc0"}.bxs-credit-card-front:before{content:"\ecc1"}.bxs-crop:before{content:"\ecc2"}.bxs-crown:before{content:"\ecc3"}.bxs-cube:before{content:"\ecc4"}.bxs-cube-alt:before{content:"\ecc5"}.bxs-cuboid:before{content:"\ecc6"}.bxs-customize:before{content:"\ecc7"}.bxs-cylinder:before{content:"\ecc8"}.bxs-dashboard:before{content:"\ecc9"}.bxs-data:before{content:"\ecca"}.bxs-detail:before{content:"\eccb"}.bxs-devices:before{content:"\eccc"}.bxs-diamond:before{content:"\eccd"}.bxs-dice-1:before{content:"\ecce"}.bxs-dice-2:before{content:"\eccf"}.bxs-dice-3:before{content:"\ecd0"}.bxs-dice-4:before{content:"\ecd1"}.bxs-dice-5:before{content:"\ecd2"}.bxs-dice-6:before{content:"\ecd3"}.bxs-direction-left:before{content:"\ecd4"}.bxs-direction-right:before{content:"\ecd5"}.bxs-directions:before{content:"\ecd6"}.bxs-disc:before{content:"\ecd7"}.bxs-discount:before{content:"\ecd8"}.bxs-dish:before{content:"\ecd9"}.bxs-dislike:before{content:"\ecda"}.bxs-dizzy:before{content:"\ecdb"}.bxs-dock-bottom:before{content:"\ecdc"}.bxs-dock-left:before{content:"\ecdd"}.bxs-dock-right:before{content:"\ecde"}.bxs-dock-top:before{content:"\ecdf"}.bxs-dollar-circle:before{content:"\ece0"}.bxs-donate-blood:before{content:"\ece1"}.bxs-donate-heart:before{content:"\ece2"}.bxs-door-open:before{content:"\ece3"}.bxs-doughnut-chart:before{content:"\ece4"}.bxs-down-arrow:before{content:"\ece5"}.bxs-down-arrow-alt:before{content:"\ece6"}.bxs-down-arrow-circle:before{content:"\ece7"}.bxs-down-arrow-square:before{content:"\ece8"}.bxs-download:before{content:"\ece9"}.bxs-downvote:before{content:"\ecea"}.bxs-drink:before{content:"\eceb"}.bxs-droplet:before{content:"\ecec"}.bxs-droplet-half:before{content:"\eced"}.bxs-dryer:before{content:"\ecee"}.bxs-duplicate:before{content:"\ecef"}.bxs-edit:before{content:"\ecf0"}.bxs-edit-alt:before{content:"\ecf1"}.bxs-edit-location:before{content:"\ecf2"}.bxs-eject:before{content:"\ecf3"}.bxs-envelope:before{content:"\ecf4"}.bxs-envelope-open:before{content:"\ecf5"}.bxs-eraser:before{content:"\ecf6"}.bxs-error:before{content:"\ecf7"}.bxs-error-alt:before{content:"\ecf8"}.bxs-error-circle:before{content:"\ecf9"}.bxs-ev-station:before{content:"\ecfa"}.bxs-exit:before{content:"\ecfb"}.bxs-extension:before{content:"\ecfc"}.bxs-eyedropper:before{content:"\ecfd"}.bxs-face:before{content:"\ecfe"}.bxs-face-mask:before{content:"\ecff"}.bxs-factory:before{content:"\ed00"}.bxs-fast-forward-circle:before{content:"\ed01"}.bxs-file:before{content:"\ed02"}.bxs-file-archive:before{content:"\ed03"}.bxs-file-blank:before{content:"\ed04"}.bxs-file-css:before{content:"\ed05"}.bxs-file-doc:before{content:"\ed06"}.bxs-file-export:before{content:"\ed07"}.bxs-file-find:before{content:"\ed08"}.bxs-file-gif:before{content:"\ed09"}.bxs-file-html:before{content:"\ed0a"}.bxs-file-image:before{content:"\ed0b"}.bxs-file-import:before{content:"\ed0c"}.bxs-file-jpg:before{content:"\ed0d"}.bxs-file-js:before{content:"\ed0e"}.bxs-file-json:before{content:"\ed0f"}.bxs-file-md:before{content:"\ed10"}.bxs-file-pdf:before{content:"\ed11"}.bxs-file-plus:before{content:"\ed12"}.bxs-file-png:before{content:"\ed13"}.bxs-file-txt:before{content:"\ed14"}.bxs-film:before{content:"\ed15"}.bxs-filter-alt:before{content:"\ed16"}.bxs-first-aid:before{content:"\ed17"}.bxs-flag:before{content:"\ed18"}.bxs-flag-alt:before{content:"\ed19"}.bxs-flag-checkered:before{content:"\ed1a"}.bxs-flame:before{content:"\ed1b"}.bxs-flask:before{content:"\ed1c"}.bxs-florist:before{content:"\ed1d"}.bxs-folder:before{content:"\ed1e"}.bxs-folder-minus:before{content:"\ed1f"}.bxs-folder-open:before{content:"\ed20"}.bxs-folder-plus:before{content:"\ed21"}.bxs-food-menu:before{content:"\ed22"}.bxs-fridge:before{content:"\ed23"}.bxs-game:before{content:"\ed24"}.bxs-gas-pump:before{content:"\ed25"}.bxs-ghost:before{content:"\ed26"}.bxs-gift:before{content:"\ed27"}.bxs-graduation:before{content:"\ed28"}.bxs-grid:before{content:"\ed29"}.bxs-grid-alt:before{content:"\ed2a"}.bxs-group:before{content:"\ed2b"}.bxs-guitar-amp:before{content:"\ed2c"}.bxs-hand-down:before{content:"\ed2d"}.bxs-hand-left:before{content:"\ed2e"}.bxs-hand-right:before{content:"\ed2f"}.bxs-hand-up:before{content:"\ed30"}.bxs-happy:before{content:"\ed31"}.bxs-happy-alt:before{content:"\ed32"}.bxs-happy-beaming:before{content:"\ed33"}.bxs-happy-heart-eyes:before{content:"\ed34"}.bxs-hdd:before{content:"\ed35"}.bxs-heart:before{content:"\ed36"}.bxs-heart-circle:before{content:"\ed37"}.bxs-heart-square:before{content:"\ed38"}.bxs-help-circle:before{content:"\ed39"}.bxs-hide:before{content:"\ed3a"}.bxs-home:before{content:"\ed3b"}.bxs-home-circle:before{content:"\ed3c"}.bxs-home-heart:before{content:"\ed3d"}.bxs-home-smile:before{content:"\ed3e"}.bxs-hot:before{content:"\ed3f"}.bxs-hotel:before{content:"\ed40"}.bxs-hourglass:before{content:"\ed41"}.bxs-hourglass-bottom:before{content:"\ed42"}.bxs-hourglass-top:before{content:"\ed43"}.bxs-id-card:before{content:"\ed44"}.bxs-image:before{content:"\ed45"}.bxs-image-add:before{content:"\ed46"}.bxs-image-alt:before{content:"\ed47"}.bxs-inbox:before{content:"\ed48"}.bxs-info-circle:before{content:"\ed49"}.bxs-info-square:before{content:"\ed4a"}.bxs-institution:before{content:"\ed4b"}.bxs-joystick:before{content:"\ed4c"}.bxs-joystick-alt:before{content:"\ed4d"}.bxs-joystick-button:before{content:"\ed4e"}.bxs-key:before{content:"\ed4f"}.bxs-keyboard:before{content:"\ed50"}.bxs-label:before{content:"\ed51"}.bxs-landmark:before{content:"\ed52"}.bxs-landscape:before{content:"\ed53"}.bxs-laugh:before{content:"\ed54"}.bxs-layer:before{content:"\ed55"}.bxs-layer-minus:before{content:"\ed56"}.bxs-layer-plus:before{content:"\ed57"}.bxs-layout:before{content:"\ed58"}.bxs-left-arrow:before{content:"\ed59"}.bxs-left-arrow-alt:before{content:"\ed5a"}.bxs-left-arrow-circle:before{content:"\ed5b"}.bxs-left-arrow-square:before{content:"\ed5c"}.bxs-left-down-arrow-circle:before{content:"\ed5d"}.bxs-left-top-arrow-circle:before{content:"\ed5e"}.bxs-like:before{content:"\ed5f"}.bxs-location-plus:before{content:"\ed60"}.bxs-lock:before{content:"\ed61"}.bxs-lock-alt:before{content:"\ed62"}.bxs-lock-open:before{content:"\ed63"}.bxs-lock-open-alt:before{content:"\ed64"}.bxs-log-in:before{content:"\ed65"}.bxs-log-in-circle:before{content:"\ed66"}.bxs-log-out:before{content:"\ed67"}.bxs-log-out-circle:before{content:"\ed68"}.bxs-low-vision:before{content:"\ed69"}.bxs-magic-wand:before{content:"\ed6a"}.bxs-magnet:before{content:"\ed6b"}.bxs-map:before{content:"\ed6c"}.bxs-map-alt:before{content:"\ed6d"}.bxs-map-pin:before{content:"\ed6e"}.bxs-mask:before{content:"\ed6f"}.bxs-medal:before{content:"\ed70"}.bxs-megaphone:before{content:"\ed71"}.bxs-meh:before{content:"\ed72"}.bxs-meh-alt:before{content:"\ed73"}.bxs-meh-blank:before{content:"\ed74"}.bxs-memory-card:before{content:"\ed75"}.bxs-message:before{content:"\ed76"}.bxs-message-add:before{content:"\ed77"}.bxs-message-alt:before{content:"\ed78"}.bxs-message-alt-add:before{content:"\ed79"}.bxs-message-alt-check:before{content:"\ed7a"}.bxs-message-alt-detail:before{content:"\ed7b"}.bxs-message-alt-dots:before{content:"\ed7c"}.bxs-message-alt-edit:before{content:"\ed7d"}.bxs-message-alt-error:before{content:"\ed7e"}.bxs-message-alt-minus:before{content:"\ed7f"}.bxs-message-alt-x:before{content:"\ed80"}.bxs-message-check:before{content:"\ed81"}.bxs-message-detail:before{content:"\ed82"}.bxs-message-dots:before{content:"\ed83"}.bxs-message-edit:before{content:"\ed84"}.bxs-message-error:before{content:"\ed85"}.bxs-message-minus:before{content:"\ed86"}.bxs-message-rounded:before{content:"\ed87"}.bxs-message-rounded-add:before{content:"\ed88"}.bxs-message-rounded-check:before{content:"\ed89"}.bxs-message-rounded-detail:before{content:"\ed8a"}.bxs-message-rounded-dots:before{content:"\ed8b"}.bxs-message-rounded-edit:before{content:"\ed8c"}.bxs-message-rounded-error:before{content:"\ed8d"}.bxs-message-rounded-minus:before{content:"\ed8e"}.bxs-message-rounded-x:before{content:"\ed8f"}.bxs-message-square:before{content:"\ed90"}.bxs-message-square-add:before{content:"\ed91"}.bxs-message-square-check:before{content:"\ed92"}.bxs-message-square-detail:before{content:"\ed93"}.bxs-message-square-dots:before{content:"\ed94"}.bxs-message-square-edit:before{content:"\ed95"}.bxs-message-square-error:before{content:"\ed96"}.bxs-message-square-minus:before{content:"\ed97"}.bxs-message-square-x:before{content:"\ed98"}.bxs-message-x:before{content:"\ed99"}.bxs-meteor:before{content:"\ed9a"}.bxs-microchip:before{content:"\ed9b"}.bxs-microphone:before{content:"\ed9c"}.bxs-microphone-alt:before{content:"\ed9d"}.bxs-microphone-off:before{content:"\ed9e"}.bxs-minus-circle:before{content:"\ed9f"}.bxs-minus-square:before{content:"\eda0"}.bxs-mobile:before{content:"\eda1"}.bxs-mobile-vibration:before{content:"\eda2"}.bxs-moon:before{content:"\eda3"}.bxs-mouse:before{content:"\eda4"}.bxs-mouse-alt:before{content:"\eda5"}.bxs-movie:before{content:"\eda6"}.bxs-movie-play:before{content:"\eda7"}.bxs-music:before{content:"\eda8"}.bxs-navigation:before{content:"\eda9"}.bxs-network-chart:before{content:"\edaa"}.bxs-news:before{content:"\edab"}.bxs-no-entry:before{content:"\edac"}.bxs-note:before{content:"\edad"}.bxs-notepad:before{content:"\edae"}.bxs-notification:before{content:"\edaf"}.bxs-notification-off:before{content:"\edb0"}.bxs-offer:before{content:"\edb1"}.bxs-package:before{content:"\edb2"}.bxs-paint:before{content:"\edb3"}.bxs-paint-roll:before{content:"\edb4"}.bxs-palette:before{content:"\edb5"}.bxs-paper-plane:before{content:"\edb6"}.bxs-parking:before{content:"\edb7"}.bxs-paste:before{content:"\edb8"}.bxs-pen:before{content:"\edb9"}.bxs-pencil:before{content:"\edba"}.bxs-phone:before{content:"\edbb"}.bxs-phone-call:before{content:"\edbc"}.bxs-phone-incoming:before{content:"\edbd"}.bxs-phone-outgoing:before{content:"\edbe"}.bxs-photo-album:before{content:"\edbf"}.bxs-piano:before{content:"\edc0"}.bxs-pie-chart:before{content:"\edc1"}.bxs-pie-chart-alt:before{content:"\edc2"}.bxs-pie-chart-alt-2:before{content:"\edc3"}.bxs-pin:before{content:"\edc4"}.bxs-pizza:before{content:"\edc5"}.bxs-plane:before{content:"\edc6"}.bxs-plane-alt:before{content:"\edc7"}.bxs-plane-land:before{content:"\edc8"}.bxs-planet:before{content:"\edc9"}.bxs-plane-take-off:before{content:"\edca"}.bxs-playlist:before{content:"\edcb"}.bxs-plug:before{content:"\edcc"}.bxs-plus-circle:before{content:"\edcd"}.bxs-plus-square:before{content:"\edce"}.bxs-pointer:before{content:"\edcf"}.bxs-polygon:before{content:"\edd0"}.bxs-printer:before{content:"\edd1"}.bxs-purchase-tag:before{content:"\edd2"}.bxs-purchase-tag-alt:before{content:"\edd3"}.bxs-pyramid:before{content:"\edd4"}.bxs-quote-alt-left:before{content:"\edd5"}.bxs-quote-alt-right:before{content:"\edd6"}.bxs-quote-left:before{content:"\edd7"}.bxs-quote-right:before{content:"\edd8"}.bxs-quote-single-left:before{content:"\edd9"}.bxs-quote-single-right:before{content:"\edda"}.bxs-radiation:before{content:"\eddb"}.bxs-radio:before{content:"\eddc"}.bxs-receipt:before{content:"\eddd"}.bxs-rectangle:before{content:"\edde"}.bxs-rename:before{content:"\eddf"}.bxs-report:before{content:"\ede0"}.bxs-rewind-circle:before{content:"\ede1"}.bxs-right-arrow:before{content:"\ede2"}.bxs-right-arrow-alt:before{content:"\ede3"}.bxs-right-arrow-circle:before{content:"\ede4"}.bxs-right-arrow-square:before{content:"\ede5"}.bxs-right-down-arrow-circle:before{content:"\ede6"}.bxs-right-top-arrow-circle:before{content:"\ede7"}.bxs-rocket:before{content:"\ede8"}.bxs-ruler:before{content:"\ede9"}.bxs-sad:before{content:"\edea"}.bxs-save:before{content:"\edeb"}.bxs-school:before{content:"\edec"}.bxs-search:before{content:"\eded"}.bxs-search-alt-2:before{content:"\edee"}.bxs-select-multiple:before{content:"\edef"}.bxs-send:before{content:"\edf0"}.bxs-server:before{content:"\edf1"}.bxs-shapes:before{content:"\edf2"}.bxs-share:before{content:"\edf3"}.bxs-share-alt:before{content:"\edf4"}.bxs-shield:before{content:"\edf5"}.bxs-shield-alt-2:before{content:"\edf6"}.bxs-shield-x:before{content:"\edf7"}.bxs-ship:before{content:"\edf8"}.bxs-shocked:before{content:"\edf9"}.bxs-shopping-bag:before{content:"\edfa"}.bxs-shopping-bag-alt:before{content:"\edfb"}.bxs-shopping-bags:before{content:"\edfc"}.bxs-show:before{content:"\edfd"}.bxs-skip-next-circle:before{content:"\edfe"}.bxs-skip-previous-circle:before{content:"\edff"}.bxs-skull:before{content:"\ee00"}.bxs-sleepy:before{content:"\ee01"}.bxs-slideshow:before{content:"\ee02"}.bxs-smile:before{content:"\ee03"}.bxs-sort-alt:before{content:"\ee04"}.bxs-spa:before{content:"\ee05"}.bxs-spray-can:before{content:"\ee06"}.bxs-spreadsheet:before{content:"\ee07"}.bxs-square:before{content:"\ee08"}.bxs-square-rounded:before{content:"\ee09"}.bxs-star:before{content:"\ee0a"}.bxs-star-half:before{content:"\ee0b"}.bxs-sticker:before{content:"\ee0c"}.bxs-stopwatch:before{content:"\ee0d"}.bxs-store:before{content:"\ee0e"}.bxs-store-alt:before{content:"\ee0f"}.bxs-sun:before{content:"\ee10"}.bxs-tachometer:before{content:"\ee11"}.bxs-tag:before{content:"\ee12"}.bxs-tag-alt:before{content:"\ee13"}.bxs-tag-x:before{content:"\ee14"}.bxs-taxi:before{content:"\ee15"}.bxs-tennis-ball:before{content:"\ee16"}.bxs-terminal:before{content:"\ee17"}.bxs-thermometer:before{content:"\ee18"}.bxs-time:before{content:"\ee19"}.bxs-time-five:before{content:"\ee1a"}.bxs-timer:before{content:"\ee1b"}.bxs-tired:before{content:"\ee1c"}.bxs-toggle-left:before{content:"\ee1d"}.bxs-toggle-right:before{content:"\ee1e"}.bxs-tone:before{content:"\ee1f"}.bxs-torch:before{content:"\ee20"}.bxs-to-top:before{content:"\ee21"}.bxs-traffic:before{content:"\ee22"}.bxs-traffic-barrier:before{content:"\ee23"}.bxs-traffic-cone:before{content:"\ee24"}.bxs-train:before{content:"\ee25"}.bxs-trash:before{content:"\ee26"}.bxs-trash-alt:before{content:"\ee27"}.bxs-tree:before{content:"\ee28"}.bxs-trophy:before{content:"\ee29"}.bxs-truck:before{content:"\ee2a"}.bxs-t-shirt:before{content:"\ee2b"}.bxs-tv:before{content:"\ee2c"}.bxs-up-arrow:before{content:"\ee2d"}.bxs-up-arrow-alt:before{content:"\ee2e"}.bxs-up-arrow-circle:before{content:"\ee2f"}.bxs-up-arrow-square:before{content:"\ee30"}.bxs-upside-down:before{content:"\ee31"}.bxs-upvote:before{content:"\ee32"}.bxs-user:before{content:"\ee33"}.bxs-user-account:before{content:"\ee34"}.bxs-user-badge:before{content:"\ee35"}.bxs-user-check:before{content:"\ee36"}.bxs-user-circle:before{content:"\ee37"}.bxs-user-detail:before{content:"\ee38"}.bxs-user-minus:before{content:"\ee39"}.bxs-user-pin:before{content:"\ee3a"}.bxs-user-plus:before{content:"\ee3b"}.bxs-user-rectangle:before{content:"\ee3c"}.bxs-user-voice:before{content:"\ee3d"}.bxs-user-x:before{content:"\ee3e"}.bxs-vector:before{content:"\ee3f"}.bxs-vial:before{content:"\ee40"}.bxs-video:before{content:"\ee41"}.bxs-video-off:before{content:"\ee42"}.bxs-video-plus:before{content:"\ee43"}.bxs-video-recording:before{content:"\ee44"}.bxs-videos:before{content:"\ee45"}.bxs-virus:before{content:"\ee46"}.bxs-virus-block:before{content:"\ee47"}.bxs-volume:before{content:"\ee48"}.bxs-volume-full:before{content:"\ee49"}.bxs-volume-low:before{content:"\ee4a"}.bxs-volume-mute:before{content:"\ee4b"}.bxs-wallet:before{content:"\ee4c"}.bxs-wallet-alt:before{content:"\ee4d"}.bxs-washer:before{content:"\ee4e"}.bxs-watch:before{content:"\ee4f"}.bxs-watch-alt:before{content:"\ee50"}.bxs-webcam:before{content:"\ee51"}.bxs-widget:before{content:"\ee52"}.bxs-window-alt:before{content:"\ee53"}.bxs-wine:before{content:"\ee54"}.bxs-wink-smile:before{content:"\ee55"}.bxs-wink-tongue:before{content:"\ee56"}.bxs-wrench:before{content:"\ee57"}.bxs-x-circle:before{content:"\ee58"}.bxs-x-square:before{content:"\ee59"}.bxs-yin-yang:before{content:"\ee5a"}.bxs-zap:before{content:"\ee5b"}.bxs-zoom-in:before{content:"\ee5c"}.bxs-zoom-out:before{content:"\ee5d"}.bxl-500px:before{content:"\ee5e"}.bxl-adobe:before{content:"\ee5f"}.bxl-airbnb:before{content:"\ee60"}.bxl-algolia:before{content:"\ee61"}.bxl-amazon:before{content:"\ee62"}.bxl-android:before{content:"\ee63"}.bxl-angular:before{content:"\ee64"}.bxl-apple:before{content:"\ee65"}.bxl-audible:before{content:"\ee66"}.bxl-baidu:before{content:"\ee67"}.bxl-behance:before{content:"\ee68"}.bxl-bing:before{content:"\ee69"}.bxl-bitcoin:before{content:"\ee6a"}.bxl-blender:before{content:"\ee6b"}.bxl-blogger:before{content:"\ee6c"}.bxl-bootstrap:before{content:"\ee6d"}.bxl-chrome:before{content:"\ee6e"}.bxl-codepen:before{content:"\ee6f"}.bxl-c-plus-plus:before{content:"\ee70"}.bxl-creative-commons:before{content:"\ee71"}.bxl-css3:before{content:"\ee72"}.bxl-dailymotion:before{content:"\ee73"}.bxl-deviantart:before{content:"\ee74"}.bxl-dev-to:before{content:"\ee75"}.bxl-digg:before{content:"\ee76"}.bxl-digitalocean:before{content:"\ee77"}.bxl-discord:before{content:"\ee78"}.bxl-discourse:before{content:"\ee79"}.bxl-django:before{content:"\ee7a"}.bxl-dribbble:before{content:"\ee7b"}.bxl-dropbox:before{content:"\ee7c"}.bxl-drupal:before{content:"\ee7d"}.bxl-ebay:before{content:"\ee7e"}.bxl-edge:before{content:"\ee7f"}.bxl-etsy:before{content:"\ee80"}.bxl-facebook:before{content:"\ee81"}.bxl-facebook-circle:before{content:"\ee82"}.bxl-facebook-square:before{content:"\ee83"}.bxl-figma:before{content:"\ee84"}.bxl-firebase:before{content:"\ee85"}.bxl-firefox:before{content:"\ee86"}.bxl-flickr:before{content:"\ee87"}.bxl-flickr-square:before{content:"\ee88"}.bxl-foursquare:before{content:"\ee89"}.bxl-git:before{content:"\ee8a"}.bxl-github:before{content:"\ee8b"}.bxl-gitlab:before{content:"\ee8c"}.bxl-google:before{content:"\ee8d"}.bxl-google-cloud:before{content:"\ee8e"}.bxl-google-plus:before{content:"\ee8f"}.bxl-google-plus-circle:before{content:"\ee90"}.bxl-html5:before{content:"\ee91"}.bxl-imdb:before{content:"\ee92"}.bxl-instagram:before{content:"\ee93"}.bxl-instagram-alt:before{content:"\ee94"}.bxl-internet-explorer:before{content:"\ee95"}.bxl-invision:before{content:"\ee96"}.bxl-javascript:before{content:"\ee97"}.bxl-joomla:before{content:"\ee98"}.bxl-jquery:before{content:"\ee99"}.bxl-jsfiddle:before{content:"\ee9a"}.bxl-kickstarter:before{content:"\ee9b"}.bxl-kubernetes:before{content:"\ee9c"}.bxl-less:before{content:"\ee9d"}.bxl-linkedin:before{content:"\ee9e"}.bxl-linkedin-square:before{content:"\ee9f"}.bxl-magento:before{content:"\eea0"}.bxl-mailchimp:before{content:"\eea1"}.bxl-markdown:before{content:"\eea2"}.bxl-mastercard:before{content:"\eea3"}.bxl-medium:before{content:"\eea4"}.bxl-medium-old:before{content:"\eea5"}.bxl-medium-square:before{content:"\eea6"}.bxl-messenger:before{content:"\eea7"}.bxl-microsoft:before{content:"\eea8"}.bxl-microsoft-teams:before{content:"\eea9"}.bxl-nodejs:before{content:"\eeaa"}.bxl-ok-ru:before{content:"\eeab"}.bxl-opera:before{content:"\eeac"}.bxl-patreon:before{content:"\eead"}.bxl-paypal:before{content:"\eeae"}.bxl-periscope:before{content:"\eeaf"}.bxl-pinterest:before{content:"\eeb0"}.bxl-pinterest-alt:before{content:"\eeb1"}.bxl-play-store:before{content:"\eeb2"}.bxl-pocket:before{content:"\eeb3"}.bxl-product-hunt:before{content:"\eeb4"}.bxl-python:before{content:"\eeb5"}.bxl-quora:before{content:"\eeb6"}.bxl-react:before{content:"\eeb7"}.bxl-redbubble:before{content:"\eeb8"}.bxl-reddit:before{content:"\eeb9"}.bxl-redux:before{content:"\eeba"}.bxl-sass:before{content:"\eebb"}.bxl-shopify:before{content:"\eebc"}.bxl-skype:before{content:"\eebd"}.bxl-slack:before{content:"\eebe"}.bxl-slack-old:before{content:"\eebf"}.bxl-snapchat:before{content:"\eec0"}.bxl-soundcloud:before{content:"\eec1"}.bxl-spotify:before{content:"\eec2"}.bxl-spring-boot:before{content:"\eec3"}.bxl-squarespace:before{content:"\eec4"}.bxl-stack-overflow:before{content:"\eec5"}.bxl-stripe:before{content:"\eec6"}.bxl-telegram:before{content:"\eec7"}.bxl-trello:before{content:"\eec8"}.bxl-tumblr:before{content:"\eec9"}.bxl-tux:before{content:"\eeca"}.bxl-twitch:before{content:"\eecb"}.bxl-twitter:before{content:"\eecc"}.bxl-unsplash:before{content:"\eecd"}.bxl-vimeo:before{content:"\eece"}.bxl-visa:before{content:"\eecf"}.bxl-vk:before{content:"\eed0"}.bxl-vuejs:before{content:"\eed1"}.bxl-whatsapp:before{content:"\eed2"}.bxl-whatsapp-square:before{content:"\eed3"}.bxl-wikipedia:before{content:"\eed4"}.bxl-windows:before{content:"\eed5"}.bxl-wix:before{content:"\eed6"}.bxl-wordpress:before{content:"\eed7"}.bxl-yahoo:before{content:"\eed8"}.bxl-yelp:before{content:"\eed9"}.bxl-youtube:before{content:"\eeda"}.bxl-zoom:before{content:"\eedb"} \ No newline at end of file diff --git a/css/documentation.backup.css b/css/documentation.backup.css new file mode 100644 index 0000000..5547c86 --- /dev/null +++ b/css/documentation.backup.css @@ -0,0 +1,520 @@ +:root { + --dark-main-color : #df733d; + --light-main-color : #cc6633; +} + + +body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.5; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; + background-attachment: fixed; + background-repeat: no-repeat; + background-size: cover; + -webkit-background-size: cover; + -o-background-size: cover; + background-position: center 0; + background-image: url(--backgroundImage); +} + +.octicon { + display: inline-block; + vertical-align: text-top; + fill: currentColor; +} + +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +#wrapper { + justify-content: center; + display: flex; +} + +#write { + padding: 15px 30px; + width: 1000px; +} + +.ImgCaption { + padding-top: 0; + margin-top: 7px; + width: fit-content; +} + +.vscode-dark .ImgCaption { + border-bottom: 2px solid var(--dark-main-color); + color: white; +} + +.vscode-light .ImgCaption { + border-bottom: 2px solid var(--light-main-color); + color: black; +} + +a:active, +a:hover { + outline-width: 0; +} + +strong { + font-weight: inherit; +} + +strong { + font-weight: bolder; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.error-out { + display: flex; + justify-content: center; + align-items: center; +} + +.error { + color: rgb(227, 60, 60); + border-radius: 1em; + border: 1.5px solid rgb(227, 60, 60); + padding: 10px 20px; +} + +code, +kbd, +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +input { + font: inherit; + margin: 0; +} + +input { + overflow: visible; +} + +[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +* { + box-sizing: border-box; +} + +input { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #4078c0; + text-decoration: none; +} + +a:hover, +a:active { + text-decoration: underline; +} + +strong { + font-weight: 600; +} + +hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid; +} + +hr::before { + display: table; + content: ""; +} + +hr::after { + display: table; + clear: both; + content: ""; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td, +th { + padding: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0; +} + +h1 { + font-size: 32px; + font-weight: 600; +} + +h2 { + font-size: 24px; + font-weight: 600; +} + +h3 { + font-size: 20px; + font-weight: 600; +} + +h4 { + font-size: 16px; + font-weight: 600; +} + +h5 { + font-size: 14px; + font-weight: 600; +} + +h6 { + font-size: 12px; + font-weight: 600; +} + +p { + margin-top: 0; + margin-bottom: 10px; +} + +blockquote { + margin: 0; +} + +ul, +ol { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +ol ol, +ul ol { + list-style-type: lower-roman; +} + +ul ul ol, +ul ol ol, +ol ul ol, +ol ol ol { + list-style-type: lower-alpha; +} + +dd { + margin-left: 0; +} + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +pre { + margin-top: 0; + margin-bottom: 0; + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +.octicon { + vertical-align: text-bottom; +} + +input { + -webkit-font-feature-settings: "liga" 0; + font-feature-settings: "liga" 0; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +a:not([href]) { + color: inherit; + text-decoration: none; +} + +.anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.anchor:focus { + outline: none; +} + +p, +blockquote, +ul, +ol, +dl, +table, +pre { + margin-top: 0; + margin-bottom: 16px; +} + +hr { + height: 0.25em; + padding: 0; + margin: 24px 0; + border: 0; +} + +blockquote { + padding: 0 1em; +} + +blockquote>:first-child { + margin-top: 0; +} + +blockquote>:last-child { + margin-bottom: 0; +} + +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + vertical-align: middle; + border-radius: 3px; +} + +#write h1, +#write h2, +#write h3, +#write h4, +#write h5, +#write h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.vscode-dark h1 { + color: #eee; + border-bottom: 3px solid #df733d; + width: fit-content; + margin: 0 0 1.0em 0; + line-height: 1.3; +} + +.vscode-dark h2 { + color: #eee; +} + +.vscode-dark h2::before { + content: 'H2'; + border-radius: .3em; + font-size: .8em; + padding: 3px 7px; + margin-right: 15px; + color: #eee; + background-color: #df733d; +} + +.vscode-light h1 { + color: #000; + border-bottom: 3px solid #cc6633; + width: fit-content; + margin: 0 0 1.0em 0; + line-height: 1.3; +} + +.vscode-light h2 { + color: #000; +} + +.vscode-light h2::before { + content: 'H2'; + border-radius: .3em; + font-size: .8em; + padding: 3px 7px; + margin-right: 15px; + color: #eee; + background-color: #cc6633; +} + +h1 { + padding-bottom: 0.3em; + font-size: 2em; +} + +h2 { + padding-bottom: 0.3em; + font-size: 1.5em; +} + +h3 { + font-size: 1.25em; +} + +h4 { + font-size: 1em; +} + +h5 { + font-size: 0.875em; +} + +h6 { + font-size: 0.85em; +} + +ul, +ol { + padding-left: 2em; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-top: 0; + margin-bottom: 0; +} + +li>p { + margin-top: 16px; +} + +li+li { + margin-top: 0.25em; +} + +/* +table { + display: block; + width: 100%; + overflow: auto; +} + +table th { + font-weight: bold; +} + +table th, +table td { + padding: 6px 13px; + border: .7px solid; +} + +table tr { + border-top: .7px solid; +} */ + + +img { + max-width: 100%; + box-sizing: content-box; +} + +#write table +{ + width: 95%; + border-collapse: collapse; + text-align: center; + margin: 20px; + max-width: 750px; +} +#write table td, table th +{ + border: 1px solid transparent; + padding: 12px 10px; + border-radius: .5em; + word-wrap: break-word; +} + +#write table thead th +{ + background-color: var(--dark-main-color); + font-size: 20px; + font-weight: bolder; + width: 100px; + text-align: center; + vertical-align: middle; + padding: 10px; +} + +.vscode-dark table thead th { + color: white; +} + +.vscode-dark table td, table th { + color: rgb(234, 231, 231); +} + +.vscode-light table thead th { + color: white; +} + +.vscode-light table td, table th { + color: rgb(16, 16, 16); +} + +.vscode-dark table tr:nth-child(even) +{ + background: #20242b; +} + +.vscode-light table tr:nth-child(even) +{ + background: #e7e1e1; +} \ No newline at end of file diff --git a/css/documentation.css b/css/documentation.css new file mode 100644 index 0000000..c4cf9e5 --- /dev/null +++ b/css/documentation.css @@ -0,0 +1,624 @@ +:root { + --dark-main-color : #df733d; + --light-main-color : #cc6633; +} + + +body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.5; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; + background-attachment: fixed; + background-repeat: no-repeat; + background-size: cover; + -webkit-background-size: cover; + -o-background-size: cover; + background-position: center 0; +} + +.octicon { + display: inline-block; + vertical-align: text-top; + fill: currentColor; +} + +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +#wrapper { + justify-content: center; + display: flex; +} + +#write { + padding: 15px 30px; + width: 1000px; +} + +.ImgCaption { + padding-top: 0; + margin-top: 7px; + width: fit-content; +} + +.vscode-dark .ImgCaption { + /* border-bottom: 2px solid var(--dark-main-color); */ + color: white; +} + +.vscode-light .ImgCaption { + /* border-bottom: 2px solid var(--light-main-color); */ + color: black; +} + +a:active, +a:hover { + outline-width: 0; +} + +strong { + font-weight: inherit; +} + +strong { + font-weight: bolder; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.error-out { + display: flex; + justify-content: center; + align-items: center; +} + +.error { + color: rgb(227, 60, 60); + border-radius: 1em; + border: 1.5px solid rgb(227, 60, 60); + padding: 10px 20px; +} + +code, +kbd, +pre { + font-family: monospace, monospace; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +input { + font: inherit; + margin: 0; +} + +input { + overflow: visible; +} + +[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +* { + box-sizing: border-box; +} + +input { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #4078c0; + text-decoration: none; +} + +a:hover, +a:active { + text-decoration: underline; +} + +strong { + font-weight: 600; +} + +hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid; +} + +hr::before { + display: table; + content: ""; +} + +hr::after { + display: table; + clear: both; + content: ""; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td, +th { + padding: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0; +} + +h1 { + font-size: 32px; + font-weight: 600; +} + +h2 { + font-size: 24px; + font-weight: 600; +} + +h3 { + font-size: 20px; + font-weight: 600; +} + +h4 { + font-size: 16px; + font-weight: 600; +} + +h5 { + font-size: 14px; + font-weight: 600; +} + +h6 { + font-size: 12px; + font-weight: 600; +} + +p { + margin-top: 0; + margin-bottom: 10px; +} + +blockquote { + margin: 0; +} + +ul, +ol { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +ol ol, +ul ol { + list-style-type: lower-roman; +} + +ul ul ol, +ul ol ol, +ol ul ol, +ol ol ol { + list-style-type: lower-alpha; +} + +dd { + margin-left: 0; +} + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +pre { + margin-top: 0; + margin-bottom: 0; + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +.octicon { + vertical-align: text-bottom; +} + +input { + -webkit-font-feature-settings: "liga" 0; + font-feature-settings: "liga" 0; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +a:not([href]) { + color: inherit; + text-decoration: none; +} + +.anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.anchor:focus { + outline: none; +} + +p, +blockquote, +ul, +ol, +dl, +table, +pre { + margin-top: 0; + margin-bottom: 16px; +} + +hr { + height: 0.25em; + padding: 0; + margin: 24px 0; + border: 0; +} + +blockquote { + padding: 0 1em; +} + +blockquote>:first-child { + margin-top: 0; +} + +blockquote>:last-child { + margin-bottom: 0; +} + +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + vertical-align: middle; + border-radius: 3px; +} + +#write h1, +#write h2, +#write h3, +#write h4, +#write h5, +#write h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.vscode-dark h1 { + color: #eee; + /* border-bottom: 3px solid #df733d; */ + width: fit-content; + margin: 0 0 1.0em 0; + line-height: 1.3; +} + +.vscode-dark h2 { + color: #eee; +} + +/* .vscode-dark h2::before { + content: 'H2'; + border-radius: .3em; + font-size: .8em; + padding: 3px 7px; + margin-right: 15px; + color: #eee; + background-color: #df733d; +} */ + +.vscode-light h1 { + color: #000; + /* border-bottom: 3px solid #cc6633; */ + width: fit-content; + margin: 0 0 1.0em 0; + line-height: 1.3; +} + +.vscode-light h2 { + color: #000; +} + +/* .vscode-light h2::before { + content: 'H2'; + border-radius: .3em; + font-size: .8em; + padding: 3px 7px; + margin-right: 15px; + color: #eee; + background-color: #cc6633; +} */ + +h1 { + padding-bottom: 0.3em; + font-size: 2em; +} + +h2 { + padding-bottom: 0.3em; + font-size: 1.5em; +} + +h3 { + font-size: 1.25em; +} + +h4 { + font-size: 1em; +} + +h5 { + font-size: 0.875em; +} + +h6 { + font-size: 0.85em; +} + +ul, +ol { + padding-left: 2em; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-top: 0; + margin-bottom: 0; +} + +li>p { + margin-top: 16px; +} + +li+li { + margin-top: 0.25em; +} + +/* +table { + display: block; + width: 100%; + overflow: auto; +} + +table th { + font-weight: bold; +} + +table th, +table td { + padding: 6px 13px; + border: .7px solid; +} + +table tr { + border-top: .7px solid; +} */ + + +img { + max-width: 100%; + box-sizing: content-box; +} + +#write table { + width: 95%; + border-collapse: collapse; + text-align: center; + margin: 20px; + max-width: 750px; +} + +#write table td, table th { + border: 1px solid; + padding: 12px 10px; + /* border-radius: .5em; */ + word-wrap: break-word; +} + +#write table thead th { + /* background-color: var(--dark-main-color); */ + font-size: 20px; + font-weight: bolder; + width: 100px; + text-align: center; + vertical-align: middle; + padding: 10px; +} + +.vscode-dark table { + color: #F0F0F0; +} + +.vscode-light table { + color: #1F2329; +} + + +.vscode-dark #write table thead th { + background-color: rgb(76,55,114); +} + +.vscode-light #write table thead th { + background-color: rgb(236,226,254); +} + +.vscode-dark table tr:nth-child(even) { + background: #232323; +} + +.vscode-light table tr:nth-child(even) { + background: #F6F7F8; +} + + +/* TODO: Diagram CSS */ +.diagram-container { + width: 100%; + display: flex; + justify-content: center; +} + +.diagram-container .diagram-ports-wrapper { + display: flex; +} + +.diagram-container .diagram-params { + display: flex; + justify-content: space-between; + border-radius: 0.7em; + padding: 15px; + margin: 10px 60px; + width: 350px; + text-align: right; +} + +.diagram-container .diagram-ports { + border-radius: 0.7em; + padding: 20px 0px; + margin: 10px 0px 10px 0px; + width: 350px; +} + +.vscode-dark .diagram-params { + background-color: rgba(53,59,140); + border: solid 4.5px rgb(83,88,157); +} + +.vscode-light .diagram-params { + background-color: rgba(180,185,243); + border: solid 4.5px rgb(153,157,207); +} + +.vscode-dark .diagram-ports { + background-color: rgba(35,102,93); + border: solid 4.5px rgb(68,125,117); +} + +.vscode-light .diagram-ports { + background-color: rgb(169,239,230); + border: solid 4.5px rgb(144,203,196); +} + + +.diagram-container .digrame-port-item { + display: flex; + justify-content: space-between; + height: 40px; +} + +.diagram-container .i-port-name { + font-size: 18px; + padding: 3px 8px; +} + +.diagram-container .o-port-name { + font-size: 18px; + padding: 3px 8px; +} + +.diagram-container .io-port-name { + font-size: 18px; + padding: 3px 8px; + +} + +.diagram-container .left-direction { + padding-right: 0; + padding: 20px 0px; + margin: 10px 0 0 10px; + width: 105px; +} + +.diagram-container .right-direction { + padding-left: 0; + padding: 20px 0px; + margin: 10px 0 10px 0px; + width: 105px; +} + +.diagram-container .arrow-wrapper { + height: 40px; +} + +.diagram-container .port-width-left-caption { + position: absolute; + margin: -5px 10px; + font-size: 14px; +} + +.diagram-container .port-width-right-caption { + position: absolute; + margin: -5px 10px; + font-size: 14px; +} + +.vscode-dark .diagram-container { + color: white; +} + +.vscode-light .diagram-container { + color: black; +} \ No newline at end of file diff --git a/css/fsm_viewer.css b/css/fsm_viewer.css new file mode 100644 index 0000000..06dd128 --- /dev/null +++ b/css/fsm_viewer.css @@ -0,0 +1,207 @@ +body::-webkit-scrollbar { + width: 2em; +} + +body::-webkit-scrollbar-track { + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); +} + +body::-webkit-scrollbar-thumb { + background-color: darkgrey; + outline: 1px solid slategrey; +} + +:root { + --light-foreground-color: black; + --dark-foreground-color: whitesmoke; + --high-contrast-foreground-color: whitesmoke; +} + +h1, +h2, +h3, +table { + margin-left: 5%; + margin-right: 5%; +} + +td, +th, +h1, +h2, +h3 { + color: black; +} + +h1, +h2 { + font-weight: bold; +} + +tr:hover { + background-color: #ddd; +} + +td, +th { + border: 1px solid grey +} + +p { + color: black; +} + +p { + margin: 5%; +} + +th { + background-color: #ffd78c; +} + +tr:nth-child(even) { + background-color: #f2f2f2; +} + +html, +body { + height: 100%; + overflow: hidden; + overflow-y: auto; + color: black; +} + +body { + background: white; + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + cursor: default; +} + +.toolbar { + overflow: visible; + width: 100%; + top: 0; + position: absolute; + color: black; + display: flex; + font: 12px "Segoe UI", sans-serif; + padding: 0.25em; + white-space: nowrap; + z-index: 2; +} + +.left-panel, +.center-panel, +.right-panel { + align-items: center; + display: flex; + flex: 1; +} + +.center-panel { + justify-content: center; +} + +.right-panel { + justify-content: flex-end; +} + +.button { + background: dimgray; + border: none; + box-sizing: border-box; + color: whitesmoke; + cursor: default; + font: inherit; + margin: 0.25em; + outline: none !important; + padding: 0.5em; + text-align: center; + text-decoration: none !important; + transition: background ease-out 125ms, color ease-out 125ms; + user-select: none; + width: 10em; + border-radius: .7em; +} + +.button:hover { + background: darkgray; + box-shadow: inset rgba(255, 255, 255, 0.25) 0 0 1em; + color: black; + cursor: pointer; + border-radius: .7em; +} + +.fancy-checkbox { + font-size: 20px; + margin: 10px; + border-radius: .7em; +} + +.fancy-checkbox:hover { + cursor: pointer; +} + + +.fancy-checkbox>input { + display: none; + cursor: pointer; +} + +.separator { + width: 1em; +} + +#zoom { + color: white; + margin: 0.5em; +} + +#workspace { + cursor: crosshair; + flex: 1; + overflow: hidden; + position: relative; + user-select: none; +} + +#workspace:focus { + outline: none; +} + +#image { + box-shadow: rgba(0, 0, 0, 0.6) 0 0 3em; + max-height: none; + max-width: none; + position: absolute; +} + +#status { + align-items: center; + background: rgba(0, 0, 0, 0.85); + color: white; + display: flex; + font: 16px Monaco, Menlo, Consolas, monospace; + height: 100%; + justify-content: center; + margin: 0; + position: absolute; + width: 100%; + z-index: 1; +} + +#status:empty { + display: none; +} + +#message { + font-weight: bold; + font-size: 26px !important; +} + +#code { + color: #424242; +} \ No newline at end of file diff --git a/css/img/icon/cells.png b/css/img/icon/cells.png new file mode 100644 index 0000000..2075020 Binary files /dev/null and b/css/img/icon/cells.png differ diff --git a/css/img/icon/main.png b/css/img/icon/main.png new file mode 100644 index 0000000..e652e87 Binary files /dev/null and b/css/img/icon/main.png differ diff --git a/css/img/icon/port.png b/css/img/icon/port.png new file mode 100644 index 0000000..b4c20f8 Binary files /dev/null and b/css/img/icon/port.png differ diff --git a/css/img/line_conn.gif b/css/img/line_conn.gif new file mode 100644 index 0000000..d561d36 Binary files /dev/null and b/css/img/line_conn.gif differ diff --git a/css/img/loading.gif b/css/img/loading.gif new file mode 100644 index 0000000..e8c2892 Binary files /dev/null and b/css/img/loading.gif differ diff --git a/css/img/standard.png b/css/img/standard.png new file mode 100644 index 0000000..ffda01e Binary files /dev/null and b/css/img/standard.png differ diff --git a/css/netlist_style.css b/css/netlist_style.css new file mode 100644 index 0000000..dc2fbba --- /dev/null +++ b/css/netlist_style.css @@ -0,0 +1,277 @@ +/* Google Fonts Import Link */ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: 'Poppins', sans-serif; +} + +.home-section .home-content{ + height: 60px; + display: flex; + align-items: center; +} +.home-section .home-content .bx-menu, +.home-section .home-content .text{ + color: #11101d; + font-size: 35px; +} +.home-section .home-content .bx-menu{ + margin: 0 15px; + cursor: pointer; +} +.home-section .home-content .text{ + font-size: 26px; + font-weight: 600; +} + +.home-section .main { + height: 91%; + width: 100%; +} + +.main .container { + display: flex; + flex-direction: column; + box-sizing: border-box; + padding: 0px; + height: 100%; + width: 100%; + margin: 0px; +} + +.canvas { + padding: 0px; + height: 100%; + width: 100%; + margin: 0px; + + border-width: 3px; + border: inset; + box-shadow: inset 0 -1px 0 rgba( 255, 255, 250, 0.6), + inset 0 -2px 0 rgba( 0, 0, 0, 0.1); +} + +.component { + border-width: 3px; + border: inset; + box-shadow: inset 0 -1px 0 rgba( 255, 255, 250, 0.6), + inset 0 -2px 0 rgba( 0, 0, 0, 0.1); +} + +.sidebar{ + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 260px; + background: #11101d; + z-index: 100; + transition: all 0.5s ease; +} +.sidebar.close{ + width: 78px; +} +.sidebar .logo-details{ + height: 60px; + width: 100%; + display: flex; + align-items: center; +} +.sidebar .logo-details i{ + font-size: 30px; + color: #fff; + height: 50px; + min-width: 78px; + text-align: center; + line-height: 50px; +} +.sidebar .logo-details .logo_name{ + font-size: 22px; + color: #fff; + font-weight: 600; + transition: 0.3s ease; + transition-delay: 0.1s; +} +.sidebar.close .logo-details .logo_name{ + transition-delay: 0s; + opacity: 0; + pointer-events: none; +} +.sidebar .nav-links{ + height: 100%; + padding: 30px 0 150px 0; + overflow: auto; +} +.sidebar.close .nav-links{ + overflow: visible; +} +.sidebar .nav-links::-webkit-scrollbar{ + display: none; +} +.sidebar .nav-links li{ + position: relative; + list-style: none; + transition: all 0.4s ease; +} +.sidebar .nav-links li:hover{ + background: #1d1b31; +} +.sidebar .nav-links li .iocn-link{ + display: flex; + align-items: center; + justify-content: space-between; +} +.sidebar.close .nav-links li .iocn-link{ + display: block +} +.sidebar .nav-links li i{ + height: 50px; + min-width: 78px; + text-align: center; + line-height: 50px; + color: #fff; + font-size: 20px; + cursor: pointer; + transition: all 0.3s ease; +} +.sidebar .nav-links li.showMenu i.arrow{ + transform: rotate(-180deg); +} +.sidebar.close .nav-links i.arrow{ + display: none; +} +.sidebar .nav-links li a{ + display: flex; + align-items: center; + text-decoration: none; +} +.sidebar .nav-links li a .link_name{ + font-size: 18px; + font-weight: 400; + color: #fff; + transition: all 0.4s ease; +} +.sidebar.close .nav-links li a .link_name{ + opacity: 0; + pointer-events: none; +} +.sidebar .nav-links li .sub-menu{ + padding: 6px 6px 14px 80px; + margin-top: -10px; + background: #1d1b31; + display: none; +} +.sidebar .nav-links li.showMenu .sub-menu{ + display: block; +} +.sidebar .nav-links li .sub-menu a{ + color: #fff; + font-size: 15px; + padding: 5px 0; + white-space: nowrap; + opacity: 0.6; + transition: all 0.3s ease; +} +.sidebar .nav-links li .sub-menu a:hover{ + opacity: 1; +} +.sidebar.close .nav-links li .sub-menu{ + position: absolute; + left: 100%; + top: -10px; + margin-top: 0; + padding: 10px 20px; + border-radius: 0 6px 6px 0; + opacity: 0; + display: block; + pointer-events: none; + transition: 0s; +} +.sidebar.close .nav-links li:hover .sub-menu{ + top: 0; + opacity: 1; + pointer-events: auto; + transition: all 0.4s ease; +} +.sidebar .nav-links li .sub-menu .link_name{ + display: none; +} +.sidebar.close .nav-links li .sub-menu .link_name{ + font-size: 18px; + opacity: 1; + display: block; +} +.sidebar .nav-links li .sub-menu.blank{ + opacity: 1; + pointer-events: auto; + padding: 3px 20px 6px 16px; + opacity: 0; + pointer-events: none; +} +.sidebar .nav-links li:hover .sub-menu.blank{ + top: 50%; + transform: translateY(-50%); +} +.sidebar .profile-details{ + position: fixed; + bottom: 0; + width: 260px; + display: flex; + align-items: center; + justify-content: space-between; + background: #1d1b31; + padding: 6px 0; + transition: all 0.5s ease; +} +.sidebar.close .profile-details{ + background: none; +} +.sidebar.close .profile-details{ + width: 78px; +} +.sidebar .profile-details .profile-content{ + display: flex; + align-items: center; +} +.sidebar .profile-details img{ + height: 52px; + width: 52px; + object-fit: cover; + border-radius: 16px; + margin: 0 14px 0 12px; + background: #1d1b31; + transition: all 0.5s ease; +} +.sidebar.close .profile-details img{ + padding: 10px; +} +.sidebar .profile-details .profile_name, +.sidebar .profile-details .job{ + color: #fff; + font-size: 18px; + font-weight: 500; + white-space: nowrap; +} +.sidebar.close .profile-details i, +.sidebar.close .profile-details .profile_name, +.sidebar.close .profile-details .job{ + display: none; +} +.sidebar .profile-details .job{ + font-size: 12px; +} +.home-section{ + position: relative; + background: #E4E9F7; + height: 100vh; + left: 260px; + width: calc(100% - 260px); + transition: all 0.5s ease; +} +.sidebar.close ~ .home-section{ + left: 78px; + width: calc(100% - 78px); +} + diff --git a/css/netlist_tree_style.css b/css/netlist_tree_style.css new file mode 100644 index 0000000..c7692af --- /dev/null +++ b/css/netlist_tree_style.css @@ -0,0 +1,294 @@ +/*------------------------------------- +zTree Style + +version: 3.5.19 +author: Hunter.z +email: hunter.z@263.net +website: http://code.google.com/p/jquerytree/ + +-------------------------------------*/ + +.main .ztree * { + padding:0; + margin:0; + font-size:12px; + font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; +} + +.main .ztree { + margin:0; + padding:5px; + width: 100%; + height: 100%; + color:#333 +} +.ztree li{ + padding:0; + margin:0; + list-style:none; + line-height:14px; + text-align:left; + white-space:nowrap; + outline:0 +} +.ztree li ul{ + margin:0; + padding:0 0 0 18px +} +.ztree li ul.line{ + background:url(./img/line_conn.gif) 0 0 repeat-y; +} + +.ztree li a { + padding:1px 3px 0 0; + margin:0; + cursor:pointer; + height:17px; + color:#333; + background-color: transparent; + text-decoration:none; + vertical-align:top; + display: inline-block +} +.ztree li a:hover { + text-decoration:underline +} +.ztree li a.curSelectedNode { + padding-top:0px; + background-color:#FFE6B0; + color:black; + height:16px; + border:1px #FFB951 solid; + opacity:0.8; +} +.ztree li a.curSelectedNode_Edit { + padding-top:0px; + background-color:#FFE6B0; + color:black; + height:16px; + border:1px #FFB951 solid; + opacity:0.8; +} +.ztree li a.tmpTargetNode_inner { + padding-top:0px; + background-color:#316AC5; + color:white; + height:16px; + border:1px #316AC5 solid; + + opacity:0.8; + filter:alpha(opacity=80) +} + +.ztree li a input.rename { + height:14px; + width:80px; + padding:0; + margin:0; + + font-size:12px; + border:1px #7EC4CC solid; + *border:0px +} +.ztree li span { + line-height:16px; + margin-right:2px +} +.ztree li span.button { + line-height:0; + margin:0; + width:16px; + height:16px; + display: inline-block; + vertical-align:middle; + + border:0 none; + cursor: pointer; + outline:none; + + background-color:transparent; + background-repeat:no-repeat; + background-attachment: scroll; + + background-image:url("./img/standard.png"); + *background-image:url("./img/standard.gif") +} + +.ztree li span.button.chk { + width:13px; + height:13px; + margin:0 3px 0 0; + cursor: auto +} + +.ztree li span.button.chk.checkbox_false_full {background-position:0 0} +.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px} +.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px} +.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px} +.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px} +.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0} +.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px} +.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px} +.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px} +.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px} +.ztree li span.button.chk.radio_false_full {background-position:-28px 0} +.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px} +.ztree li span.button.chk.radio_false_part {background-position:-28px -28px} +.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px} +.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px} +.ztree li span.button.chk.radio_true_full {background-position:-42px 0} +.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px} +.ztree li span.button.chk.radio_true_part {background-position:-42px -28px} +.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px} +.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px} + +.ztree li span.button.switch { + width:18px; + height:18px +} +.ztree li span.button.root_open{background-position:-92px -54px} +.ztree li span.button.root_close{background-position:-74px -54px} +.ztree li span.button.roots_open{background-position:-92px 0} +.ztree li span.button.roots_close{background-position:-74px 0} +.ztree li span.button.center_open{background-position:-92px -18px} +.ztree li span.button.center_close{background-position:-74px -18px} +.ztree li span.button.bottom_open{background-position:-92px -36px} +.ztree li span.button.bottom_close{background-position:-74px -36px} +.ztree li span.button.noline_open{background-position:-92px -72px} +.ztree li span.button.noline_close{background-position:-74px -72px} +.ztree li span.button.root_docu{background:none;} +.ztree li span.button.roots_docu{background-position:-56px 0} +.ztree li span.button.center_docu{background-position:-56px -18px} +.ztree li span.button.bottom_docu{background-position:-56px -36px} +.ztree li span.button.noline_docu{background:none;} + +.ztree li span.button.ico_open{ + margin-right:2px; + background-position:-110px -16px; + vertical-align:top; + *vertical-align:middle +} +.ztree li span.button.ico_close{ + margin-right:2px; + background-position:-110px 0; + vertical-align:top; + *vertical-align:middle +} +.ztree li span.button.ico_docu{ + margin-right:2px; + background-position:-110px -32px; + vertical-align:top; + *vertical-align:middle +} +.ztree li span.button.edit { + margin-right:2px; + background-position:-110px -48px; + vertical-align:top; + *vertical-align:middle +} +.ztree li span.button.remove { + margin-right:2px; + background-position:-110px -64px; + vertical-align:top; + *vertical-align:middle +} + +.ztree li span.button.ico_loading{ + margin-right:2px; + background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; + vertical-align:top; + *vertical-align:middle +} + +ul.tmpTargetzTree { + background-color:#FFE6B0; + opacity:0.8; + filter:alpha(opacity=80) +} + +span.tmpzTreeMove_arrow { + width:16px; + height:16px; + display: inline-block; + padding:0; + margin:2px 0 0 1px; + border:0 none; + position:absolute; + + background-color:transparent; + background-repeat:no-repeat; + background-attachment: scroll; + + background-position:-110px -80px; + background-image:url("./img/standard.png"); + *background-image:url("./img/standard.gif") +} + +.ztree li span.button.cells_ico_docu{ + margin-right:2px; + background: url(./img/icon/cells.png) no-repeat scroll 0 0 transparent; + vertical-align:top; *vertical-align:middle +} + +.ztree li span.button.port_ico_docu{ + margin-right:2px; + background: url(./img/icon/port.png) no-repeat scroll 0 0 transparent; + vertical-align:top; *vertical-align:middle +} + +.ztree li span.button.main_ico_docu{ + margin-right:2px; + background: url(./img/icon/main.png) no-repeat scroll 0 0 transparent; + vertical-align:top; *vertical-align:middle +} + +ul.ztree.zTreeDragUL { + margin:0; + padding:0; + position:absolute; + width:auto; + height:auto; + overflow:hidden; + background-color:#cfcfcf; + border:1px #00B83F dotted; + opacity:0.8; + filter:alpha(opacity=80) +} +.zTreeMask { + z-index:10000; + background-color:#cfcfcf; + opacity:0.0; + filter:alpha(opacity=0); + position:absolute +} + +ul.ztree { + margin-top: 0px; + border: 1px solid #617775; + background: #f0f6e4; + width: 240px; + height: 650px; + position: relative; + float: left; + resize: horizontal; + overflow: scroll; +} + +ul.log { + border: 1px solid #617775; + background: #f0f6e4; + width:300px; + height:170px; + overflow: hidden; +} +ul.log.small { + height:45px; +} +ul.log li { + color: #666666; + list-style: none; + padding-left: 10px; +} +ul.log li.dark { + background-color: #E3E3E3; +} \ No newline at end of file diff --git a/design/lsp.drawio b/design/lsp.drawio new file mode 100644 index 0000000..d39d93f --- /dev/null +++ b/design/lsp.drawio @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/digital-vcd-render b/digital-vcd-render new file mode 160000 index 0000000..ce90f9d --- /dev/null +++ b/digital-vcd-render @@ -0,0 +1 @@ +Subproject commit ce90f9df4bb0ad26405c68f7e428b77c5c6023a9 diff --git a/fonts/boxicons.woff2 b/fonts/boxicons.woff2 new file mode 100644 index 0000000..d4079f6 Binary files /dev/null and b/fonts/boxicons.woff2 differ diff --git a/images/DIDE.png b/images/DIDE.png new file mode 100644 index 0000000..64a28a8 Binary files /dev/null and b/images/DIDE.png differ diff --git a/images/FPGAs.png b/images/FPGAs.png new file mode 100644 index 0000000..ec08a8c Binary files /dev/null and b/images/FPGAs.png differ diff --git a/images/icon.png b/images/icon.png new file mode 100644 index 0000000..cec5163 Binary files /dev/null and b/images/icon.png differ diff --git a/images/icon.svg b/images/icon.svg new file mode 100644 index 0000000..a203b5d --- /dev/null +++ b/images/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/iconfont.json b/images/icons/iconfont.json new file mode 100644 index 0000000..2369be1 --- /dev/null +++ b/images/icons/iconfont.json @@ -0,0 +1,128 @@ +{ + "id": "3826523", + "name": "draft", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "7569441", + "name": "天气-未知", + "font_class": "help-unknown", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "6989868", + "name": "module-fill", + "font_class": "module-fill", + "unicode": "e622", + "unicode_decimal": 58914 + }, + { + "icon_id": "6989870", + "name": "module", + "font_class": "module", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "1126", + "name": "文件夹", + "font_class": "wenjianjia", + "unicode": "e600", + "unicode_decimal": 58880 + }, + { + "icon_id": "1478582", + "name": "ic_input", + "font_class": "ic_input", + "unicode": "e908", + "unicode_decimal": 59656 + }, + { + "icon_id": "17397810", + "name": "output", + "font_class": "output", + "unicode": "e7b0", + "unicode_decimal": 59312 + }, + { + "icon_id": "18171148", + "name": "交换,双箭头,平行", + "font_class": "exchange-full", + "unicode": "ea19", + "unicode_decimal": 59929 + }, + { + "icon_id": "13553191", + "name": "markdown-line", + "font_class": "markdown-line", + "unicode": "ee68", + "unicode_decimal": 61032 + }, + { + "icon_id": "10168298", + "name": "html-1", + "font_class": "html-", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "16432310", + "name": "PDF", + "font_class": "PDF", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "15378918", + "name": "v", + "font_class": "v", + "unicode": "ecf7", + "unicode_decimal": 60663 + }, + { + "icon_id": "23306741", + "name": "chip", + "font_class": "chip1", + "unicode": "e7a8", + "unicode_decimal": 59304 + }, + { + "icon_id": "31357424", + "name": "模块", + "font_class": "mokuai", + "unicode": "e60b", + "unicode_decimal": 58891 + }, + { + "icon_id": "3851337", + "name": "参数", + "font_class": "canshu", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "11520228", + "name": "接口", + "font_class": "jiekou", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "24698418", + "name": "chip", + "font_class": "chip", + "unicode": "e749", + "unicode_decimal": 59209 + }, + { + "icon_id": "13304138", + "name": "verilog", + "font_class": "verilog", + "unicode": "e6b3", + "unicode_decimal": 59059 + } + ] +} diff --git a/images/icons/iconfont.woff2 b/images/icons/iconfont.woff2 new file mode 100644 index 0000000..e1a9f3c Binary files /dev/null and b/images/icons/iconfont.woff2 differ diff --git a/images/svg/DIDE.svg b/images/svg/DIDE.svg new file mode 100644 index 0000000..83ae052 --- /dev/null +++ b/images/svg/DIDE.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/images/svg/README.md b/images/svg/README.md new file mode 100644 index 0000000..7275ff5 --- /dev/null +++ b/images/svg/README.md @@ -0,0 +1,3 @@ +dark main color : #c5c5c5 + +light main color : #2c2c2c \ No newline at end of file diff --git a/images/svg/dark/File Error.backup.svg b/images/svg/dark/File Error.backup.svg new file mode 100644 index 0000000..c38e573 --- /dev/null +++ b/images/svg/dark/File Error.backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/File Error.svg b/images/svg/dark/File Error.svg new file mode 100644 index 0000000..a0bc319 --- /dev/null +++ b/images/svg/dark/File Error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/LOAD.svg b/images/svg/dark/LOAD.svg new file mode 100644 index 0000000..c9f5ad7 --- /dev/null +++ b/images/svg/dark/LOAD.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/Link.svg b/images/svg/dark/Link.svg new file mode 100644 index 0000000..4a72a1b --- /dev/null +++ b/images/svg/dark/Link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/SerialPort.svg b/images/svg/dark/SerialPort.svg new file mode 100644 index 0000000..e1e5952 --- /dev/null +++ b/images/svg/dark/SerialPort.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/add-cloud.svg b/images/svg/dark/add-cloud.svg new file mode 100644 index 0000000..e774ce3 --- /dev/null +++ b/images/svg/dark/add-cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/add-file.svg b/images/svg/dark/add-file.svg new file mode 100644 index 0000000..b4c9279 --- /dev/null +++ b/images/svg/dark/add-file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/add.svg b/images/svg/dark/add.svg new file mode 100644 index 0000000..07ff77c --- /dev/null +++ b/images/svg/dark/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/bd.svg b/images/svg/dark/bd.svg new file mode 100644 index 0000000..daada7e --- /dev/null +++ b/images/svg/dark/bd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/bin.svg b/images/svg/dark/bin.svg new file mode 100644 index 0000000..b2eaff7 --- /dev/null +++ b/images/svg/dark/bin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/bit.svg b/images/svg/dark/bit.svg new file mode 100644 index 0000000..18b0762 --- /dev/null +++ b/images/svg/dark/bit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/boot.svg b/images/svg/dark/boot.svg new file mode 100644 index 0000000..7ee6f7e --- /dev/null +++ b/images/svg/dark/boot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/branch.svg b/images/svg/dark/branch.svg new file mode 100644 index 0000000..ba79989 --- /dev/null +++ b/images/svg/dark/branch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/celllib.svg b/images/svg/dark/celllib.svg new file mode 100644 index 0000000..2dec457 --- /dev/null +++ b/images/svg/dark/celllib.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/cells.svg b/images/svg/dark/cells.svg new file mode 100644 index 0000000..2dec457 --- /dev/null +++ b/images/svg/dark/cells.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/clean.svg b/images/svg/dark/clean.svg new file mode 100644 index 0000000..ad915fe --- /dev/null +++ b/images/svg/dark/clean.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/cmd.svg b/images/svg/dark/cmd.svg new file mode 100644 index 0000000..f27659b --- /dev/null +++ b/images/svg/dark/cmd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/current-sim-top.svg b/images/svg/dark/current-sim-top.svg new file mode 100644 index 0000000..5116694 --- /dev/null +++ b/images/svg/dark/current-sim-top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/current-src-top.svg b/images/svg/dark/current-src-top.svg new file mode 100644 index 0000000..bae3ce3 --- /dev/null +++ b/images/svg/dark/current-src-top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/currentSimTop.svg b/images/svg/dark/currentSimTop.svg new file mode 100644 index 0000000..db12ae7 --- /dev/null +++ b/images/svg/dark/currentSimTop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/currentSrcTop.svg b/images/svg/dark/currentSrcTop.svg new file mode 100644 index 0000000..15e1819 --- /dev/null +++ b/images/svg/dark/currentSrcTop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/debug.svg b/images/svg/dark/debug.svg new file mode 100644 index 0000000..efeb04c --- /dev/null +++ b/images/svg/dark/debug.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/svg/dark/delete.svg b/images/svg/dark/delete.svg new file mode 100644 index 0000000..a01196a --- /dev/null +++ b/images/svg/dark/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/documentation.svg b/images/svg/dark/documentation.svg new file mode 100644 index 0000000..68b234c --- /dev/null +++ b/images/svg/dark/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/file.svg b/images/svg/dark/file.svg new file mode 100644 index 0000000..8f49267 --- /dev/null +++ b/images/svg/dark/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/fsm.svg b/images/svg/dark/fsm.svg new file mode 100644 index 0000000..95eab94 --- /dev/null +++ b/images/svg/dark/fsm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/hide.svg b/images/svg/dark/hide.svg new file mode 100644 index 0000000..a125c3d --- /dev/null +++ b/images/svg/dark/hide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/import.svg b/images/svg/dark/import.svg new file mode 100644 index 0000000..1abab9b --- /dev/null +++ b/images/svg/dark/import.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/left-arrow.svg b/images/svg/dark/left-arrow.svg new file mode 100644 index 0000000..e182f33 --- /dev/null +++ b/images/svg/dark/left-arrow.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/images/svg/dark/left-right-arrow.svg b/images/svg/dark/left-right-arrow.svg new file mode 100644 index 0000000..212f3e9 --- /dev/null +++ b/images/svg/dark/left-right-arrow.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/images/svg/dark/library.backup.svg b/images/svg/dark/library.backup.svg new file mode 100644 index 0000000..c47631b --- /dev/null +++ b/images/svg/dark/library.backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/library.svg b/images/svg/dark/library.svg new file mode 100644 index 0000000..e0f6605 --- /dev/null +++ b/images/svg/dark/library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/list-tree.svg b/images/svg/dark/list-tree.svg new file mode 100644 index 0000000..22c475a --- /dev/null +++ b/images/svg/dark/list-tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/netlist.svg b/images/svg/dark/netlist.svg new file mode 100644 index 0000000..6efdf23 --- /dev/null +++ b/images/svg/dark/netlist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/refresh.svg b/images/svg/dark/refresh.svg new file mode 100644 index 0000000..d79fdaa --- /dev/null +++ b/images/svg/dark/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/remote.svg b/images/svg/dark/remote.svg new file mode 100644 index 0000000..3d573e9 --- /dev/null +++ b/images/svg/dark/remote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/right-arrow.svg b/images/svg/dark/right-arrow.svg new file mode 100644 index 0000000..25df4be --- /dev/null +++ b/images/svg/dark/right-arrow.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/images/svg/dark/right-dot-arrow.svg b/images/svg/dark/right-dot-arrow.svg new file mode 100644 index 0000000..8f6c7d4 --- /dev/null +++ b/images/svg/dark/right-dot-arrow.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/images/svg/dark/run.svg b/images/svg/dark/run.svg new file mode 100644 index 0000000..8b0a58e --- /dev/null +++ b/images/svg/dark/run.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/svg/dark/show.svg b/images/svg/dark/show.svg new file mode 100644 index 0000000..5c3a469 --- /dev/null +++ b/images/svg/dark/show.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/sim.svg b/images/svg/dark/sim.svg new file mode 100644 index 0000000..30fc77e --- /dev/null +++ b/images/svg/dark/sim.svg @@ -0,0 +1 @@ +folder.test.close \ No newline at end of file diff --git a/images/svg/dark/src.svg b/images/svg/dark/src.svg new file mode 100644 index 0000000..e953f79 --- /dev/null +++ b/images/svg/dark/src.svg @@ -0,0 +1 @@ +folder.src.close diff --git a/images/svg/dark/systemverilog.backup.svg b/images/svg/dark/systemverilog.backup.svg new file mode 100644 index 0000000..73b7fcf --- /dev/null +++ b/images/svg/dark/systemverilog.backup.svg @@ -0,0 +1 @@ + diff --git a/images/svg/dark/systemverilog.svg b/images/svg/dark/systemverilog.svg new file mode 100644 index 0000000..d90710d --- /dev/null +++ b/images/svg/dark/systemverilog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/tcl.svg b/images/svg/dark/tcl.svg new file mode 100644 index 0000000..d18bd8f --- /dev/null +++ b/images/svg/dark/tcl.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/svg/dark/toolBox.svg b/images/svg/dark/toolBox.svg new file mode 100644 index 0000000..d90b9b5 --- /dev/null +++ b/images/svg/dark/toolBox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/top.svg b/images/svg/dark/top.svg new file mode 100644 index 0000000..737813e --- /dev/null +++ b/images/svg/dark/top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/translate.svg b/images/svg/dark/translate.svg new file mode 100644 index 0000000..8c9ea69 --- /dev/null +++ b/images/svg/dark/translate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/vcd.svg b/images/svg/dark/vcd.svg new file mode 100644 index 0000000..0658bbd --- /dev/null +++ b/images/svg/dark/vcd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/verilog.backup.svg b/images/svg/dark/verilog.backup.svg new file mode 100644 index 0000000..3b42849 --- /dev/null +++ b/images/svg/dark/verilog.backup.svg @@ -0,0 +1 @@ + diff --git a/images/svg/dark/verilog.svg b/images/svg/dark/verilog.svg new file mode 100644 index 0000000..7bfedb0 --- /dev/null +++ b/images/svg/dark/verilog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/vhdl.backup.svg b/images/svg/dark/vhdl.backup.svg new file mode 100644 index 0000000..6a92ee0 --- /dev/null +++ b/images/svg/dark/vhdl.backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/vhdl.svg b/images/svg/dark/vhdl.svg new file mode 100644 index 0000000..e30d61d --- /dev/null +++ b/images/svg/dark/vhdl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/vlang.svg b/images/svg/dark/vlang.svg new file mode 100644 index 0000000..450afcb --- /dev/null +++ b/images/svg/dark/vlang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/dark/vvp.svg b/images/svg/dark/vvp.svg new file mode 100644 index 0000000..6059c47 --- /dev/null +++ b/images/svg/dark/vvp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/File Error.backup.svg b/images/svg/light/File Error.backup.svg new file mode 100644 index 0000000..c38e573 --- /dev/null +++ b/images/svg/light/File Error.backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/File Error.svg b/images/svg/light/File Error.svg new file mode 100644 index 0000000..a0bc319 --- /dev/null +++ b/images/svg/light/File Error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/SerialPort.svg b/images/svg/light/SerialPort.svg new file mode 100644 index 0000000..e1e5952 --- /dev/null +++ b/images/svg/light/SerialPort.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/add-cloud.svg b/images/svg/light/add-cloud.svg new file mode 100644 index 0000000..2916e50 --- /dev/null +++ b/images/svg/light/add-cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/add-file.svg b/images/svg/light/add-file.svg new file mode 100644 index 0000000..aef8e1c --- /dev/null +++ b/images/svg/light/add-file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/add.svg b/images/svg/light/add.svg new file mode 100644 index 0000000..2cf3ea6 --- /dev/null +++ b/images/svg/light/add.svg @@ -0,0 +1,5 @@ + + Layer 1 + + + \ No newline at end of file diff --git a/images/svg/light/bd.svg b/images/svg/light/bd.svg new file mode 100644 index 0000000..daada7e --- /dev/null +++ b/images/svg/light/bd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/bin.svg b/images/svg/light/bin.svg new file mode 100644 index 0000000..b2eaff7 --- /dev/null +++ b/images/svg/light/bin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/bit.svg b/images/svg/light/bit.svg new file mode 100644 index 0000000..18b0762 --- /dev/null +++ b/images/svg/light/bit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/boot.svg b/images/svg/light/boot.svg new file mode 100644 index 0000000..c6e7377 --- /dev/null +++ b/images/svg/light/boot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/branch.svg b/images/svg/light/branch.svg new file mode 100644 index 0000000..20b3630 --- /dev/null +++ b/images/svg/light/branch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/celllib.svg b/images/svg/light/celllib.svg new file mode 100644 index 0000000..abe704e --- /dev/null +++ b/images/svg/light/celllib.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/cells.svg b/images/svg/light/cells.svg new file mode 100644 index 0000000..abe704e --- /dev/null +++ b/images/svg/light/cells.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/chip.svg b/images/svg/light/chip.svg new file mode 100644 index 0000000..5c1bc83 --- /dev/null +++ b/images/svg/light/chip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/clean.svg b/images/svg/light/clean.svg new file mode 100644 index 0000000..e23b4ce --- /dev/null +++ b/images/svg/light/clean.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/cmd.svg b/images/svg/light/cmd.svg new file mode 100644 index 0000000..508df5e --- /dev/null +++ b/images/svg/light/cmd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/current top.svg b/images/svg/light/current top.svg new file mode 100644 index 0000000..a57bbe7 --- /dev/null +++ b/images/svg/light/current top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/current-sim-top.svg b/images/svg/light/current-sim-top.svg new file mode 100644 index 0000000..5116694 --- /dev/null +++ b/images/svg/light/current-sim-top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/current-src-top.svg b/images/svg/light/current-src-top.svg new file mode 100644 index 0000000..bae3ce3 --- /dev/null +++ b/images/svg/light/current-src-top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/currentSimTop.svg b/images/svg/light/currentSimTop.svg new file mode 100644 index 0000000..db12ae7 --- /dev/null +++ b/images/svg/light/currentSimTop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/currentSrcTop.svg b/images/svg/light/currentSrcTop.svg new file mode 100644 index 0000000..15e1819 --- /dev/null +++ b/images/svg/light/currentSrcTop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/debug.svg b/images/svg/light/debug.svg new file mode 100644 index 0000000..5373465 --- /dev/null +++ b/images/svg/light/debug.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/svg/light/delete.svg b/images/svg/light/delete.svg new file mode 100644 index 0000000..3af728a --- /dev/null +++ b/images/svg/light/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/documentation.svg b/images/svg/light/documentation.svg new file mode 100644 index 0000000..e8ad48b --- /dev/null +++ b/images/svg/light/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/file.svg b/images/svg/light/file.svg new file mode 100644 index 0000000..c1011e2 --- /dev/null +++ b/images/svg/light/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/fsm.svg b/images/svg/light/fsm.svg new file mode 100644 index 0000000..dcea49c --- /dev/null +++ b/images/svg/light/fsm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/hide.svg b/images/svg/light/hide.svg new file mode 100644 index 0000000..abcba9d --- /dev/null +++ b/images/svg/light/hide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/import.svg b/images/svg/light/import.svg new file mode 100644 index 0000000..53a61c3 --- /dev/null +++ b/images/svg/light/import.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/left-arrow.svg b/images/svg/light/left-arrow.svg new file mode 100644 index 0000000..425f13f --- /dev/null +++ b/images/svg/light/left-arrow.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/images/svg/light/left-right-arrow.svg b/images/svg/light/left-right-arrow.svg new file mode 100644 index 0000000..e42fcdd --- /dev/null +++ b/images/svg/light/left-right-arrow.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/images/svg/light/library.backup.svg b/images/svg/light/library.backup.svg new file mode 100644 index 0000000..cc1e014 --- /dev/null +++ b/images/svg/light/library.backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/library.svg b/images/svg/light/library.svg new file mode 100644 index 0000000..f23be67 --- /dev/null +++ b/images/svg/light/library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/list-tree.svg b/images/svg/light/list-tree.svg new file mode 100644 index 0000000..698bd18 --- /dev/null +++ b/images/svg/light/list-tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/load.svg b/images/svg/light/load.svg new file mode 100644 index 0000000..563ead0 --- /dev/null +++ b/images/svg/light/load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/netlist.svg b/images/svg/light/netlist.svg new file mode 100644 index 0000000..2affde3 --- /dev/null +++ b/images/svg/light/netlist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/refresh.svg b/images/svg/light/refresh.svg new file mode 100644 index 0000000..e034574 --- /dev/null +++ b/images/svg/light/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/remote.svg b/images/svg/light/remote.svg new file mode 100644 index 0000000..ee446d2 --- /dev/null +++ b/images/svg/light/remote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/right-arrow.svg b/images/svg/light/right-arrow.svg new file mode 100644 index 0000000..7205d3e --- /dev/null +++ b/images/svg/light/right-arrow.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/images/svg/light/right-dot-arrow.svg b/images/svg/light/right-dot-arrow.svg new file mode 100644 index 0000000..35f3a68 --- /dev/null +++ b/images/svg/light/right-dot-arrow.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/images/svg/light/run.svg b/images/svg/light/run.svg new file mode 100644 index 0000000..6d670de --- /dev/null +++ b/images/svg/light/run.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/svg/light/show.svg b/images/svg/light/show.svg new file mode 100644 index 0000000..f94fac9 --- /dev/null +++ b/images/svg/light/show.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/sim.svg b/images/svg/light/sim.svg new file mode 100644 index 0000000..30fc77e --- /dev/null +++ b/images/svg/light/sim.svg @@ -0,0 +1 @@ +folder.test.close \ No newline at end of file diff --git a/images/svg/light/src.svg b/images/svg/light/src.svg new file mode 100644 index 0000000..e953f79 --- /dev/null +++ b/images/svg/light/src.svg @@ -0,0 +1 @@ +folder.src.close diff --git a/images/svg/light/systemverilog.svg b/images/svg/light/systemverilog.svg new file mode 100644 index 0000000..d90710d --- /dev/null +++ b/images/svg/light/systemverilog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/tcl.svg b/images/svg/light/tcl.svg new file mode 100644 index 0000000..d18bd8f --- /dev/null +++ b/images/svg/light/tcl.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/svg/light/toolBox.svg b/images/svg/light/toolBox.svg new file mode 100644 index 0000000..bba9a1c --- /dev/null +++ b/images/svg/light/toolBox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/top.svg b/images/svg/light/top.svg new file mode 100644 index 0000000..ce57593 --- /dev/null +++ b/images/svg/light/top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/translate.svg b/images/svg/light/translate.svg new file mode 100644 index 0000000..b7a218b --- /dev/null +++ b/images/svg/light/translate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/vcd.svg b/images/svg/light/vcd.svg new file mode 100644 index 0000000..0658bbd --- /dev/null +++ b/images/svg/light/vcd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/verilog.backup.svg b/images/svg/light/verilog.backup.svg new file mode 100644 index 0000000..3b42849 --- /dev/null +++ b/images/svg/light/verilog.backup.svg @@ -0,0 +1 @@ + diff --git a/images/svg/light/verilog.svg b/images/svg/light/verilog.svg new file mode 100644 index 0000000..7bfedb0 --- /dev/null +++ b/images/svg/light/verilog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/vhdl.backup.svg b/images/svg/light/vhdl.backup.svg new file mode 100644 index 0000000..696313e --- /dev/null +++ b/images/svg/light/vhdl.backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/vhdl.svg b/images/svg/light/vhdl.svg new file mode 100644 index 0000000..e30d61d --- /dev/null +++ b/images/svg/light/vhdl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/light/vvp.svg b/images/svg/light/vvp.svg new file mode 100644 index 0000000..6059c47 --- /dev/null +++ b/images/svg/light/vvp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/view.svg b/images/svg/view.svg new file mode 100644 index 0000000..52e2deb --- /dev/null +++ b/images/svg/view.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/system.drawio b/images/system.drawio new file mode 100644 index 0000000..03e24b4 --- /dev/null +++ b/images/system.drawio @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/toolchain-flow.svg b/images/toolchain-flow.svg new file mode 100644 index 0000000..1355658 --- /dev/null +++ b/images/toolchain-flow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..20da431 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7388 @@ +{ + "name": "fpga-support", + "version": "0.3.3", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "fpga-support", + "version": "0.3.3", + "dependencies": { + "chokidar": "^3.5.3", + "puppeteer-core": "^19.4.1", + "showdown": "^2.1.0", + "state-machine-cat": "^9.2.5", + "temp": "^0.9.4", + "vscode-languageclient": "^7.0.0", + "vscode-textmate": "^9.0.0", + "wavedrom": "^2.9.1" + }, + "devDependencies": { + "@types/glob": "^8.0.0", + "@types/mocha": "^10.0.0", + "@types/node": "16.x", + "@types/showdown": "^2.0.0", + "@types/vscode": "^1.72.0", + "@typescript-eslint/eslint-plugin": "^5.42.0", + "@typescript-eslint/parser": "^5.42.0", + "@vscode/test-electron": "^2.2.0", + "eslint": "^8.26.0", + "glob": "^8.0.3", + "mocha": "^10.1.0", + "typescript": "^4.8.4", + "webpack-cli": "^5.1.4" + }, + "engines": { + "vscode": "^1.72.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "peer": true + }, + "node_modules/@types/glob": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.11", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-16.18.11.tgz", + "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", + "devOptional": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/showdown": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@types/showdown/-/showdown-2.0.0.tgz", + "integrity": "sha512-70xBJoLv+oXjB5PhtA8vo7erjLDp9/qqI63SRHm4REKrwuPOLs8HhXwlZJBJaB4kC18cCZ1UUZ6Fb/PLFW4TCA==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.74.0", + "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.74.0.tgz", + "integrity": "sha512-LyeCIU3jb9d38w0MXFwta9r0Jx23ugujkAxdwLTNCyspdZTKUc43t7ppPbCiPoQ/Ivd/pnDFZrb4hWd45wrsgA==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz", + "integrity": "sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/type-utils": "5.48.2", + "@typescript-eslint/utils": "5.48.2", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.48.2.tgz", + "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz", + "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz", + "integrity": "sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.48.2", + "@typescript-eslint/utils": "5.48.2", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.48.2.tgz", + "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz", + "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.48.2.tgz", + "integrity": "sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz", + "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.2.2.tgz", + "integrity": "sha512-s5d2VtMySvff0UgqkJ0BMCr1es+qREE194EAodGIefq518W53ifvv69e80l9e2MrYJEqUUKwukE/w3H9o15YEw==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bit-field": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/bit-field/-/bit-field-1.7.0.tgz", + "integrity": "sha512-JydkgvuMioH3Oe3mnnHFVHGBzGZJIph98d1IpotpJ7svjGmkQf8uR9k0LAY/mPEphaq+nSIrgzMs/rK9WYdzzQ==", + "dependencies": { + "fs-extra": "^10.1.0", + "onml": "^2.1.0", + "tspan": "^0.4.0", + "yargs": "^17.6.2" + }, + "bin": { + "bitfield": "bin/bitfield.js" + } + }, + "node_modules/bit-field/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/bit-field/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/bit-field/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001565", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz", + "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/devtools-protocol": { + "version": "0.0.1082910", + "resolved": "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1082910.tgz", + "integrity": "sha512-RqoZ2GmqaNxyx+99L/RemY5CkwG9D0WEfOKxekwCRXOGrDCep62ngezEJUVMq6rISYQ+085fJnWDQqGHlxVNww==" + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.596", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.596.tgz", + "integrity": "sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg==", + "dev": true, + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "peer": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint": { + "version": "8.32.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "dependencies": { + "strnum": "^1.0.4" + }, + "bin": { + "xml2js": "cli.js" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.19.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmmirror.com/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/logidrom": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/logidrom/-/logidrom-0.3.1.tgz", + "integrity": "sha512-B1Rjay3Ye/JcythUjMt+KLiLIwOjnMJN1M5BRbDgNMsJhmn7yApbx6n1rw7cT3Fi/NA77HDM+y3y1nXvKQVB9Q==", + "dependencies": { + "estraverse": "^5.1.0", + "tspan": "^0.4.0" + } + }, + "node_modules/logidrom/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmmirror.com/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true, + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onml": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/onml/-/onml-2.1.0.tgz", + "integrity": "sha512-fvaSZRzprpwLFge/mcwE0CItfniNisVNamDdMK1FQUjh4ArQZ8ZWSkDaJbZc3XaANKZHq0xIa8NJpZ2HSe3oXA==", + "dependencies": { + "sax": "^1.2.1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "peer": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer-core": { + "version": "19.6.3", + "resolved": "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-19.6.3.tgz", + "integrity": "sha512-8MbhioSlkDaHkmolpQf9Z7ui7jplFfOFTnN8d5kPsCazRRTNIH6/bVxPskn0v5Gh9oqOBlknw0eHH0/OBQAxpQ==", + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1082910", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.11.0" + }, + "engines": { + "node": ">=14.1.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/state-machine-cat": { + "version": "9.2.5", + "resolved": "https://registry.npmmirror.com/state-machine-cat/-/state-machine-cat-9.2.5.tgz", + "integrity": "sha512-HyPgjsjDS18YTLsOjB3NaNcnbFo14qUjWZZGZCb3IQhGVAq35wi6leE80trD2br1O9vOalfOWSk3pD8m6U6VuQ==", + "dependencies": { + "ajv": "8.11.0", + "chalk": "5.0.1", + "commander": "9.2.0", + "fast-xml-parser": "3.21.1", + "get-stream": "6.0.1", + "handlebars": "4.7.7", + "he": "1.2.0", + "indent-string": "5.0.0", + "lodash.castarray": "4.4.0", + "lodash.clonedeep": "4.5.0", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "lodash.reject": "4.6.0", + "semver": "^7.3.7", + "viz.js": "1.8.2", + "wrap-ansi": "8.0.1" + }, + "bin": { + "sm_cat": "bin/smcat.mjs", + "sm-cat": "bin/smcat.mjs", + "smcat": "bin/smcat.mjs", + "state-machine-cat": "bin/smcat.mjs" + }, + "engines": { + "node": "^12.20||^14.13.1||>=16" + } + }, + "node_modules/state-machine-cat/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/state-machine-cat/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/state-machine-cat/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + } + }, + "node_modules/state-machine-cat/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + } + }, + "node_modules/state-machine-cat/node_modules/commander": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/state-machine-cat/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/state-machine-cat/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/state-machine-cat/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/state-machine-cat/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/state-machine-cat/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/state-machine-cat/node_modules/wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmmirror.com/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tspan": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/tspan/-/tspan-0.4.0.tgz", + "integrity": "sha512-0ELL9tpLpTqLliFyQySaxgCO43buCML+j3TI4E1LuSI8wkzITGEVhZCyMvv/A+3ek9KpgALhhgnZESRLTbN+iw==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/viz.js": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/viz.js/-/viz.js-1.8.2.tgz", + "integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==", + "deprecated": "no longer supported" + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "engines": { + "vscode": "^1.52.0" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "node_modules/vscode-textmate": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz", + "integrity": "sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==" + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wavedrom": { + "version": "2.9.1", + "resolved": "https://registry.npmmirror.com/wavedrom/-/wavedrom-2.9.1.tgz", + "integrity": "sha512-IPv1bKVwh4Zo8dMMQfnNy4KFqU/v0buoPDwLkTrtHE2nr0dV4pHqryhWpqNCSUm7xTWroER+nE5xRkng96xLUA==", + "dependencies": { + "bit-field": "^1.5.3", + "logidrom": "^0.3.1", + "onml": "^2.1.0", + "tspan": "^0.4.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, + "dependencies": { + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/eslint": { + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "peer": true + }, + "@types/glob": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "@types/node": { + "version": "16.18.11", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-16.18.11.tgz", + "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", + "devOptional": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@types/showdown": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@types/showdown/-/showdown-2.0.0.tgz", + "integrity": "sha512-70xBJoLv+oXjB5PhtA8vo7erjLDp9/qqI63SRHm4REKrwuPOLs8HhXwlZJBJaB4kC18cCZ1UUZ6Fb/PLFW4TCA==", + "dev": true + }, + "@types/vscode": { + "version": "1.74.0", + "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.74.0.tgz", + "integrity": "sha512-LyeCIU3jb9d38w0MXFwta9r0Jx23ugujkAxdwLTNCyspdZTKUc43t7ppPbCiPoQ/Ivd/pnDFZrb4hWd45wrsgA==", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz", + "integrity": "sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/type-utils": "5.48.2", + "@typescript-eslint/utils": "5.48.2", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.48.2.tgz", + "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz", + "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz", + "integrity": "sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.48.2", + "@typescript-eslint/utils": "5.48.2", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.48.2.tgz", + "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz", + "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.48.2.tgz", + "integrity": "sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.48.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz", + "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vscode/test-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.2.2.tgz", + "integrity": "sha512-s5d2VtMySvff0UgqkJ0BMCr1es+qREE194EAodGIefq518W53ifvv69e80l9e2MrYJEqUUKwukE/w3H9o15YEw==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "requires": {} + }, + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bit-field": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/bit-field/-/bit-field-1.7.0.tgz", + "integrity": "sha512-JydkgvuMioH3Oe3mnnHFVHGBzGZJIph98d1IpotpJ7svjGmkQf8uR9k0LAY/mPEphaq+nSIrgzMs/rK9WYdzzQ==", + "requires": { + "fs-extra": "^10.1.0", + "onml": "^2.1.0", + "tspan": "^0.4.0", + "yargs": "^17.6.2" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001565", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz", + "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==", + "dev": true, + "peer": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "devtools-protocol": { + "version": "0.0.1082910", + "resolved": "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1082910.tgz", + "integrity": "sha512-RqoZ2GmqaNxyx+99L/RemY5CkwG9D0WEfOKxekwCRXOGrDCep62ngezEJUVMq6rISYQ+085fJnWDQqGHlxVNww==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "electron-to-chromium": { + "version": "1.4.596", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.596.tgz", + "integrity": "sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg==", + "dev": true, + "peer": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "dev": true + }, + "es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "peer": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.32.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "requires": { + "strnum": "^1.0.4" + } + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "globals": { + "version": "13.19.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmmirror.com/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "logidrom": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/logidrom/-/logidrom-0.3.1.tgz", + "integrity": "sha512-B1Rjay3Ye/JcythUjMt+KLiLIwOjnMJN1M5BRbDgNMsJhmn7yApbx6n1rw7cT3Fi/NA77HDM+y3y1nXvKQVB9Q==", + "requires": { + "estraverse": "^5.1.0", + "tspan": "^0.4.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "peer": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "peer": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmmirror.com/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true, + "peer": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onml": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/onml/-/onml-2.1.0.tgz", + "integrity": "sha512-fvaSZRzprpwLFge/mcwE0CItfniNisVNamDdMK1FQUjh4ArQZ8ZWSkDaJbZc3XaANKZHq0xIa8NJpZ2HSe3oXA==", + "requires": { + "sax": "^1.2.1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "peer": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==" + }, + "puppeteer-core": { + "version": "19.6.3", + "resolved": "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-19.6.3.tgz", + "integrity": "sha512-8MbhioSlkDaHkmolpQf9Z7ui7jplFfOFTnN8d5kPsCazRRTNIH6/bVxPskn0v5Gh9oqOBlknw0eHH0/OBQAxpQ==", + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1082910", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.11.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "requires": { + "commander": "^9.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "state-machine-cat": { + "version": "9.2.5", + "resolved": "https://registry.npmmirror.com/state-machine-cat/-/state-machine-cat-9.2.5.tgz", + "integrity": "sha512-HyPgjsjDS18YTLsOjB3NaNcnbFo14qUjWZZGZCb3IQhGVAq35wi6leE80trD2br1O9vOalfOWSk3pD8m6U6VuQ==", + "requires": { + "ajv": "8.11.0", + "chalk": "5.0.1", + "commander": "9.2.0", + "fast-xml-parser": "3.21.1", + "get-stream": "6.0.1", + "handlebars": "4.7.7", + "he": "1.2.0", + "indent-string": "5.0.0", + "lodash.castarray": "4.4.0", + "lodash.clonedeep": "4.5.0", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "lodash.reject": "4.6.0", + "semver": "^7.3.7", + "viz.js": "1.8.2", + "wrap-ansi": "8.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==" + }, + "commander": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "temp": { + "version": "0.9.4", + "resolved": "https://registry.npmmirror.com/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "requires": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tspan": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/tspan/-/tspan-0.4.0.tgz", + "integrity": "sha512-0ELL9tpLpTqLliFyQySaxgCO43buCML+j3TI4E1LuSI8wkzITGEVhZCyMvv/A+3ek9KpgALhhgnZESRLTbN+iw==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "peer": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "viz.js": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/viz.js/-/viz.js-1.8.2.tgz", + "integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==" + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "requires": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "vscode-textmate": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz", + "integrity": "sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==" + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wavedrom": { + "version": "2.9.1", + "resolved": "https://registry.npmmirror.com/wavedrom/-/wavedrom-2.9.1.tgz", + "integrity": "sha512-IPv1bKVwh4Zo8dMMQfnNy4KFqU/v0buoPDwLkTrtHE2nr0dV4pHqryhWpqNCSUm7xTWroER+nE5xRkng96xLUA==", + "requires": { + "bit-field": "^1.5.3", + "logidrom": "^0.3.1", + "onml": "^2.1.0", + "tspan": "^0.4.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2eb854f --- /dev/null +++ b/package.json @@ -0,0 +1,1165 @@ +{ + "name": "fpga-support", + "displayName": "Digital IDE", + "description": "all in one vscode plugin for Verilog/VHDL development", + "publisher": "sterben", + "homepage": "https://digital-eda.github.io/DIDE-doc-Cn", + "version": "0.3.3", + "main": "./out/extension", + "icon": "images/icon.png", + "engines": { + "vscode": "^1.72.0" + }, + "keywords": [ + "FPGA Develop Support", + "FPGA", + "ASIC", + "IC", + "Digital", + "HDL", + "Systemverilog", + "Verilog", + "VHDL", + "Vivado", + "Xilinx" + ], + "repository": { + "type": "git", + "url": "https://github.com/Digital-EDA/Digital-IDE" + }, + "categories": [ + "Extension Packs", + "Programming Languages", + "Snippets" + ], + "activationEvents": [ + "workspaceContains:.vscode/property.json" + ], + "contributes": { + "configuration": { + "title": "Digital-IDE", + "properties": { + "digital-ide.welcome.show": { + "type": "boolean", + "default": true, + "description": "show the welcome text in Digital-IDE" + }, + "digital-ide.dont-show-again.propose.issue": { + "type": "boolean", + "default": false, + "description": "show the welcome text in Digital-IDE" + }, + "digital-ide.lib.custom.path": { + "type": "string", + "default": "", + "description": "path of the dictionary of \"custom\" in library" + }, + "digital-ide.prj.file.structure.notice": { + "type": "boolean", + "default": true, + "description": "notice when change file structure" + }, + "digital-ide.prj.vivado.install.path": { + "type": "string", + "default": "", + "description": "Set the xilinx install path. Ignore this setting if you add relative path to environment variable PATH \n e.g. : D:/APP/vivado_18_3/Vivado/2018.3/bin \n Default path is C:/Xilinx/Vivado/2018.3/bin" + }, + "digital-ide.prj.modelsim.install.path": { + "type": "string", + "default": "", + "description": "set the modelsim install path. Ignore this setting if you add relative path to environment variable PATH \n Default path is C:/modeltech64_10.4/win64" + }, + "digital-ide.prj.xilinx.IP.repo.path": { + "type": "string", + "default": "", + "description": "User-designed IP libraries from xilinx After configuring this property, the plugin will automatically add the path to the IP repo of vivado." + }, + "digital-ide.prj.xilinx.BD.repo.path": { + "type": "string", + "default": "", + "description": "User-defined placement path for xilinx block design files" + }, + "digital-ide.prj.xsdk.install.path": { + "type": "string", + "default": "" + }, + "digital-ide.function.doc.webview.backgroundImage": { + "type": "string", + "default": "", + "description": "url of the background image" + }, + "digital-ide.function.doc.pdf.scale": { + "type": "number", + "default": 1, + "description": "scale of the exported pdf" + }, + "digital-ide.function.doc.pdf.printBackground": { + "type": "boolean", + "default": true, + "description": "whether print background" + }, + "digital-ide.function.doc.pdf.landscape": { + "type": "boolean", + "default": false, + "description": "whether export pdf as a landscape style" + }, + "digital-ide.function.doc.pdf.format": { + "type": "string", + "default": "A4", + "description": "format of pdf size" + }, + "digital-ide.function.doc.pdf.displayHeaderFooter": { + "type": "boolean", + "default": false, + "description": "display header and footer in the exported pdf" + }, + "digital-ide.function.doc.pdf.browserPath": { + "type": "string", + "default": "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe", + "description": "the absolute path of edge or chrome, we need browser to render pdf" + }, + "digital-ide.function.doc.pdf.margin.top": { + "type": "number", + "default": 0.5, + "description": "top margin of exported pdf, unit cm" + }, + "digital-ide.function.doc.pdf.margin.right": { + "type": "number", + "default": 0.5, + "description": "top margin of exported pdf, unit cm" + }, + "digital-ide.function.doc.pdf.margin.bottom": { + "type": "number", + "default": 0.5, + "description": "top margin of exported pdf, unit cm" + }, + "digital-ide.function.doc.pdf.margin.left": { + "type": "number", + "default": 0.5, + "description": "top margin of exported pdf, unit cm" + }, + "digital-ide.function.doc.pdf.headerTemplate": { + "type": "string", + "default": "
", + "description": "html template of header, if displayHeaderFooter is set to false, this setting will be ignored" + }, + "digital-ide.function.doc.pdf.footerTemplate": { + "type": "string", + "default": "
", + "description": "html template of footer, if displayHeaderFooter is set to false, this setting will be ignored" + }, + "digital-ide.function.simulate.icarus.installPath": { + "type": "string", + "description": "Path of install path of iverilog components, if set to \"\", then iverilog and vvp in environment will be used for simulation. Otherwise, ones that in the install path will be used." + }, + "digital-ide.function.simulate.simulationHome": { + "type": "string", + "description": "Path of simulation folder, .vvp and other file during simulation will be generated here" + }, + "digital-ide.function.simulate.gtkwavePath": { + "type": "string", + "default": "gtkwave", + "description": "Absolute path of launch path of gtkwave software" + }, + "digital-ide.function.simulate.xilinxLibPath": { + "type": "string", + "description": "Path of Xilinx library for simulation" + }, + "digital-ide.function.simulate.runInTerminal": { + "type": "boolean", + "default": false, + "description": "run the simulation command in terminal instead of output" + }, + "digital-ide.function.lsp.formatter.vlog.default.style": { + "type": "string", + "enum": [ + "kr", + "ansi", + "gnu" + ], + "default": "kr", + "description": "Select the verilog and systemverilog formatter style." + }, + "digital-ide.function.lsp.formatter.vlog.default.args": { + "type": "string", + "default": "", + "description": "Add verilog formatter arguments here (like istyle)." + }, + "digital-ide.function.lsp.formatter.vhdl.default.keyword-case": { + "description": "Keyword case", + "type": "string", + "default": "LowerCase", + "enum": [ + "LowerCase", + "UpperCase" + ] + }, + "digital-ide.function.lsp.formatter.vhdl.default.align-comments": { + "description": "Align comments", + "type": "boolean", + "default": false + }, + "digital-ide.function.lsp.formatter.vhdl.default.type-name-case": { + "description": "Type name case", + "type": "string", + "default": "LowerCase", + "enum": [ + "LowerCase", + "UpperCase" + ] + }, + "digital-ide.function.lsp.formatter.vhdl.default.indentation": { + "description": "Indentation", + "type": "number", + "default": 4 + }, + "digital-ide.function.lsp.completion.vlog.autoAddInclude": { + "description": "`include \"xxx.v\" will be added to the top of the file automatically", + "type": "boolean", + "default": true + }, + "digital-ide.function.lsp.completion.vlog.completeWholeInstante": { + "description": "complete everything invoking a module needs including paramters and ports", + "type": "boolean", + "default": true + }, + "digital-ide.function.lsp.linter.vlog.diagnostor": { + "type": "string", + "enumDescriptions": [ + "use diagnostor in vivado", + "use diagnostor in modelsim", + "use our buildin diagnostor" + ], + "enum": [ + "vivado", + "modelsim", + "default" + ], + "default": "default", + "description": "choose diagnostor to do linter in editing verilog" + }, + "digital-ide.function.lsp.linter.svlog.diagnostor": { + "type": "string", + "enumDescriptions": [ + "use diagnostor in vivado", + "use diagnostor in modelsim", + "use our buildin diagnostor" + ], + "enum": [ + "vivado", + "modelsim", + "default" + ], + "default": "default", + "description": "choose diagnostor to do linter in editing verilog" + }, + "digital-ide.function.lsp.linter.vhdl.diagnostor": { + "type": "string", + "enumDescriptions": [ + "use diagnostor in vivado", + "use diagnostor in modelsim", + "use our buildin diagnostor" + ], + "enum": [ + "vivado", + "modelsim", + "default" + ], + "default": "default", + "description": "choose diagnostor to do linter in editing vhdl" + }, + "digital-ide.function.lsp.linter.systemverilog.diagnostor": { + "type": "string", + "enumDescriptions": [ + "use diagnostor in vivado", + "use diagnostor in modelsim", + "use our buildin diagnostor" + ], + "enum": [ + "vivado", + "modelsim", + "default" + ], + "default": "default", + "description": "choose diagnostor to do linter in editing systemverilog" + }, + "digital-ide.function.instantiation.addComment": { + "description": "add comment like // ports, // input, // output when doing instantiation, including completion for module invoking", + "type": "boolean", + "default": true + }, + "digital-ide.function.instantiation.autoNetOutputDeclaration": { + "description": "auto declare output type nets in the scope when instantiation happens.", + "type": "boolean", + "default": true + } + } + }, + "commands": [ + { + "command": "digital-ide.property-json.generate", + "title": "%digital-ide.property-json.generate.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.property-json.overwrite", + "title": "%digital-ide.property-json.overwrite.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.hdlDoc.exportFile", + "title": "%digital-ide.hdlDoc.exportFile.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.hdlDoc.exportProject", + "title": "%digital-ide.hdlDoc.exportProject.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.hdlDoc.showWebview", + "title": "%digital-ide.hdlDoc.showWebview.title%", + "category": "Digital-IDE", + "icon": { + "light": "images/svg/light/documentation.svg", + "dark": "images/svg/dark/documentation.svg" + } + }, + { + "command": "digital-ide.tool.instance", + "title": "%digital-ide.tool.instance.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.tool.testbench", + "title": "%digital-ide.tool.testbench.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.tool.icarus.simulateFile", + "title": "%digital-ide.tool.icarus.simulateFile.title%", + "category": "Digital-IDE", + "icon": { + "light": "images/svg/light/debug.svg", + "dark": "images/svg/dark/debug.svg" + } + }, + { + "command": "digital-ide.pickLibrary", + "title": "%digital-ide.pickLibrary.title%", + "icon": { + "light": "images/svg/light/library.svg", + "dark": "images/svg/dark/library.svg" + }, + "category": "Digital-IDE" + }, + { + "command": "digital-ide.treeView.arch.expand", + "category": "tool", + "icon": "$(expand-all)", + "title": "%digital-ide.treeView.arch.expand.title%" + }, + { + "command": "digital-ide.treeView.arch.collapse", + "category": "tool", + "icon": "$(collapse-all)", + "title": "%digital-ide.treeView.arch.collapse.title%" + }, + { + "command": "digital-ide.treeView.arch.refresh", + "category": "tool", + "icon": "$(refresh)", + "title": "%digital-ide.treeView.arch.refresh.title%" + }, + { + "command": "digital-ide.treeView.arch.openFile", + "category": "tool", + "title": "%digital-ide.treeView.arch.openFile.title%" + }, + { + "command": "digital-ide.tool.clean", + "category": "tool", + "title": "%digital-ide.tool.clean.title%" + }, + { + "command": "digital-ide.soft.launch", + "category": "tool", + "title": "%digital-ide.soft.launch.title%" + }, + { + "command": "digital-ide.soft.build", + "category": "tool", + "title": "%digital-ide.soft.build.title%" + }, + { + "command": "digital-ide.soft.download", + "category": "tool", + "title": "%digital-ide.soft.download.title%" + }, + { + "command": "digital-ide.hard.launch", + "category": "tool", + "title": "%digital-ide.hard.launch.title%" + }, + { + "command": "digital-ide.hard.simulate", + "category": "tool", + "title": "%digital-ide.hard.simulate.title%" + }, + { + "command": "digital-ide.hard.simulate.cli", + "category": "tool", + "title": "%digital-ide.hard.simulate.cli.title%" + }, + { + "command": "digital-ide.hard.simulate.gui", + "category": "tool", + "title": "%digital-ide.hard.simulate.gui.title%" + }, + { + "command": "digital-ide.hard.refresh", + "category": "tool", + "title": "%digital-ide.hard.refresh.title%" + }, + { + "command": "digital-ide.hard.build", + "category": "tool", + "title": "%digital-ide.hard.build.title%" + }, + { + "command": "digital-ide.hard.build.synth", + "category": "tool", + "title": "%digital-ide.hard.build.synth.title%" + }, + { + "command": "digital-ide.hard.build.impl", + "category": "tool", + "title": "%digital-ide.hard.build.impl.title%" + }, + { + "command": "digital-ide.hard.build.bitstream", + "category": "tool", + "title": "%digital-ide.hard.build.bitstream.title%" + }, + { + "command": "digital-ide.hard.program", + "category": "tool", + "title": "%digital-ide.hard.program.title%" + }, + { + "command": "digital-ide.hard.gui", + "category": "tool", + "title": "%digital-ide.hard.gui.title%" + }, + { + "command": "digital-ide.hard.exit", + "category": "tool", + "title": "%digital-ide.hard.exit.title%" + }, + { + "command": "digital-ide.pl.setSrcTop", + "category": "pl", + "title": "%digital-ide.pl.setSrcTop.title%" + }, + { + "command": "digital-ide.pl.setSimTop", + "category": "pl", + "title": "%digital-ide.pl.setSimTop.title%" + }, + { + "command": "digital-ide.pl.addDevice", + "category": "pl", + "title": "%digital-ide.pl.addDevice.title%" + }, + { + "command": "digital-ide.pl.delDevice", + "category": "pl", + "title": "%digital-ide.pl.delDevice.title%" + }, + { + "command": "digital-ide.pl.addFile", + "category": "pl", + "title": "%digital-ide.pl.addFile.title%" + }, + { + "command": "digital-ide.pl.delFile", + "category": "pl", + "title": "%digital-ide.pl.delFile.title%" + }, + { + "command": "digital-ide.netlist", + "icon": { + "light": "images/svg/light/netlist.svg", + "dark": "images/svg/dark/netlist.svg" + }, + "category": "Digital-IDE", + "title": "%digital-ide.netlist.title%" + }, + { + "command": "digital-ide.fsm", + "icon": { + "light": "images/svg/light/fsm.svg", + "dark": "images/svg/dark/fsm.svg" + }, + "category": "Digital-IDE", + "title": "%digital-ide.fsm.title%" + }, + { + "command": "digital-ide.lsp.tool.insertTextToUri", + "title": "%digital-ide.lsp.tool.insertTextToUri.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.lsp.tool.transformOldPropertyFile", + "title": "%digital-ide.lsp.tool.transformOldPropertyFile.title%", + "category": "Digital-IDE" + }, + { + "command": "digital-ide.lsp.vlog.linter.pick", + "category": "Digital-IDE", + "title": "%digital-ide.lsp.vlog.linter.pick.title%" + }, + { + "command": "digital-ide.lsp.svlog.linter.pick", + "category": "Digital-IDE", + "title": "%digital-ide.lsp.svlog.linter.pick.title%" + }, + { + "command": "digital-ide.lsp.vhdl.linter.pick", + "category": "Digital-IDE", + "title": "%digital-ide.lsp.vhdl.linter.pick.title%" + }, + { + "command": "digital-ide.lsp.systemverilog.linter.pick", + "category": "Digital-IDE", + "title": "%digital-ide.lsp.systemverilog.linter.pick.title%" + }, + { + "command": "digital-ide.vhdl2vlog", + "title": "%digital-ide.vhdl2vlog.title%", + "category": "Digital-IDE", + "icon": { + "light": "images/svg/light/translate.svg", + "dark": "images/svg/dark/translate.svg" + } + }, + { + "command": "digital-ide.fsm.show", + "icon": { + "light": "images/svg/light/fsm.svg", + "dark": "images/svg/dark/fsm.svg" + }, + "category": "Digital-IDE", + "title": "%digital-ide.fsm.show.title%" + }, + { + "command": "digital-ide.netlist.show", + "icon": { + "light": "images/svg/light/netlist.svg", + "dark": "images/svg/dark/netlist.svg" + }, + "category": "Digital-IDE", + "title": "%digital-ide.netlist.show.title%" + }, + { + "command": "digital-ide.waveviewer.show", + "icon": { + "light": "images/svg/light/vcd.svg", + "dark": "images/svg/dark/vcd.svg" + }, + "category": "Digital-IDE", + "title": "%digital-ide.waveviewer.show.title%" + } + ], + "menus": { + "view/title": [ + { + "command": "digital-ide.treeView.arch.collapse", + "group": "navigation", + "when": "view == digital-ide-treeView-arch" + }, + { + "command": "digital-ide.pickLibrary", + "group": "navigation", + "when": "view == digital-ide-treeView-arch" + }, + { + "command": "digital-ide.treeView.arch.refresh", + "group": "navigation", + "when": "view == digital-ide-treeView-arch" + } + ], + "view/item/context": [ + { + "command": "digital-ide.tool.icarus.simulateFile", + "group": "inline@1", + "when": "view == digital-ide-treeView-arch && viewItem == file" + }, + { + "command": "digital-ide.netlist.show", + "group": "inline@3", + "when": "view == digital-ide-treeView-arch && viewItem == file" + }, + { + "command": "digital-ide.pl.setSrcTop", + "group": "navigation@1", + "when": "view == digital-ide-treeView-arch && viewItem == file" + }, + { + "command": "digital-ide.pl.setSimTop", + "group": "navigation@2", + "when": "view == digital-ide-treeView-arch && viewItem == file" + }, + { + "command": "digital-ide.tool.icarus.simulateFile", + "group": "navigation@3", + "when": "view == digital-ide-treeView-arch && viewItem == file" + } + ], + "editor/title": [ + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.tool.icarus.simulateFile", + "group": "navigation@1" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.fsm.show", + "group": "navigation@2" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.netlist.show", + "group": "navigation@3" + }, + { + "when": "editorLangId == vcd", + "command": "digital-ide.waveviewer.show", + "group": "navigation@4" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.hdlDoc.showWebview", + "group": "navigation@5" + }, + { + "when": "resourceLangId == vhdl", + "command": "digital-ide.vhdl2vlog", + "group": "navigation@6" + } + ], + "editor/context": [ + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.pl.setSrcTop", + "group": "navigation@1" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.pl.setSimTop", + "group": "navigation@2" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.tool.instance", + "group": "navigation@3" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.tool.testbench", + "group": "navigation@4" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.tool.icarus.simulateFile", + "group": "navigation@5" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.netlist.show", + "group": "navigation@6" + }, + { + "when": "resourceLangId == vcd", + "command": "digital-ide.waveviewer.show", + "group": "navigation@7" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.fsm.show", + "group": "navigation@8" + }, + { + "when": "resourceLangId == vhdl", + "command": "digital-ide.vhdl2vlog", + "group": "navigation@9" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.hdlDoc.exportFile", + "group": "navigation@10" + } + ], + "explorer/context": [ + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.pl.setSrcTop", + "group": "navigation@5" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.pl.setSimTop", + "group": "navigation@6" + }, + { + "when": "editorLangId == verilog || editorLangId == systemverilog || editorLangId == vhdl", + "command": "digital-ide.tool.testbench", + "group": "navigation@7" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.tool.instance", + "group": "navigation@8" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.netlist.show", + "group": "navigation@9" + }, + { + "when": "resourceLangId == vcd", + "command": "digital-ide.waveviewer.show", + "group": "navigation@10" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.fsm.show", + "group": "navigation@11" + }, + { + "when": "resourceLangId == vhdl", + "command": "digital-ide.vhdl2vlog", + "group": "navigation@12" + }, + { + "when": "resourceLangId == verilog || resourceLangId == systemverilog || resourceLangId == vhdl", + "command": "digital-ide.hdlDoc.exportFile", + "group": "navigation@13" + } + ] + }, + "customEditors": [ + { + "viewType": "digital-ide.vcd.viewer", + "displayName": "Digital Viewer", + "selector": [ + { + "filenamePattern": "*.vcd" + } + ], + "priority": "default" + } + ], + "viewsContainers": { + "activitybar": [ + { + "id": "TreeView", + "title": "Digital-IDE: TreeView", + "icon": "images/svg/view.svg" + } + ] + }, + "views": { + "TreeView": [ + { + "id": "digital-ide-treeView-arch", + "name": "architecture" + }, + { + "id": "digital-ide-treeView-tool", + "name": "TOOL Options" + }, + { + "id": "digital-ide-treeView-hardware", + "name": "HARD Options" + } + ] + }, + "keybindings": [ + { + "command": "digital-ide.tool.instance", + "key": "alt+i", + "mac": "alt+i", + "when": "editorTextFocus" + }, + { + "command": "digital-ide.tool.testbench", + "key": "alt+t", + "mac": "alt+t", + "when": "editorTextFocus" + } + ], + "languages": [ + { + "id": "tcl", + "aliases": [ + "TCL", + "Xilinx Constraints File", + "Synopsis Constraints File" + ], + "extensions": [ + ".tcl", + ".sdc", + ".xdc", + ".fdc" + ], + "configuration": "./config/tcl.configuration.json", + "icon": { + "dark": "./images/svg/dark/tcl.svg", + "light": "./images/svg/light/tcl.svg" + } + }, + { + "id": "bd", + "extensions": [ + ".bd" + ], + "configuration": "./config/bd.configuration.json", + "icon": { + "dark": "./images/svg/dark/bd.svg", + "light": "./images/svg/light/bd.svg" + } + }, + { + "id": "vhdl", + "aliases": [ + "VHDL", + "vhdl" + ], + "extensions": [ + ".vhd", + ".vhdl", + ".vho", + ".vht" + ], + "configuration": "./config/vhdl.configuration.json", + "icon": { + "dark": "./images/svg/dark/vhdl.svg", + "light": "./images/svg/light/vhdl.svg" + } + }, + { + "id": "verilog", + "aliases": [ + "Verilog", + "verilog" + ], + "extensions": [ + ".v", + ".V", + ".vh", + ".vl" + ], + "configuration": "./config/verilog.configuration.json", + "icon": { + "dark": "./images/svg/dark/verilog.svg", + "light": "./images/svg/light/verilog.svg" + } + }, + { + "id": "systemverilog", + "aliases": [ + "System Verilog", + "systemverilog" + ], + "extensions": [ + ".sv", + ".SV" + ], + "configuration": "./config/systemverilog.configuration.json", + "icon": { + "dark": "./images/svg/dark/systemverilog.svg", + "light": "./images/svg/light/systemverilog.svg" + } + }, + { + "id": "arm", + "aliases": [ + "ARM", + "arm" + ], + "extensions": [ + ".s", + ".S", + ".asm", + ".sx" + ], + "configuration": "./config/arm.configuration.json" + }, + { + "id": "linkerscript", + "aliases": [ + "LinkerScript", + "linkerscript" + ], + "extensions": [ + ".ld", + ".dld" + ], + "configuration": "./config/link.configuration.json" + }, + { + "id": "vvp", + "aliases": [ + "VivadoVerificationPlan" + ], + "extensions": [ + ".vvp", + ".VVP", + ".v.out" + ], + "configuration": "./config/vvp.configuration.json", + "icon": { + "dark": "./images/svg/dark/vvp.svg", + "light": "./images/svg/light/vvp.svg" + } + }, + { + "id": "vcd", + "extensions": [ + ".vcd" + ], + "icon": { + "dark": "./images/svg/dark/vcd.svg", + "light": "./images/svg/light/vcd.svg" + } + }, + { + "id": "digital-ide-output", + "mimetypes": [ + "text/x-code-output" + ] + } + ], + "jsonValidation": [ + { + "fileMatch": "property.json", + "url": "./project/property-schema.json" + } + ], + "grammars": [ + { + "language": "linkerscript", + "scopeName": "source.ld", + "path": "./syntaxes/link.json" + }, + { + "language": "arm", + "scopeName": "source.arm", + "path": "./syntaxes/arm.json" + }, + { + "language": "tcl", + "scopeName": "source.tcl", + "path": "./syntaxes/tcl.json" + }, + { + "language": "vhdl", + "scopeName": "source.vhdl", + "path": "./syntaxes/vhdl.tmLanguage.json" + }, + { + "language": "verilog", + "scopeName": "source.verilog", + "path": "./syntaxes/verilog.tmLanguage.json" + }, + { + "language": "systemverilog", + "scopeName": "source.systemverilog", + "path": "./syntaxes/systemverilog.json" + }, + { + "language": "vvp", + "scopeName": "source.vvp", + "path": "./syntaxes/vvp.tmLanguage.json" + }, + { + "language": "digital-ide-output", + "scopeName": "digital-ide.output", + "path": "./syntaxes/digital-ide-output.json" + } + ], + "snippets": [ + { + "language": "tcl", + "path": "snippets/tcl.json" + }, + { + "language": "vhdl", + "path": "snippets/vhdl.json" + }, + { + "language": "verilog", + "path": "snippets/svlog.json" + }, + { + "language": "systemverilog", + "path": "snippets/svlog.json" + } + ], + "icons": { + "instance-verilog": { + "description": "icon of verilog in TOOL.instance", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e7a8" + } + }, + "instance-vhdl": { + "description": "icon of verilog in TOOL.instance", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e6b3" + } + }, + "instance-port": { + "description": "port of verilog in TOOL.instance", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e638" + } + }, + "instance-param": { + "description": "param of verilog in TOOL.instance", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e655" + } + }, + "instance-module": { + "description": "module of verilog in TOOL.instance", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e60b" + } + }, + "instance-input": { + "description": "input", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e908" + } + }, + "instance-output": { + "description": "output", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e7b0" + } + }, + "instance-inout": { + "description": "inout", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\ea19" + } + }, + "export-html": { + "description": "export html", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e633" + } + }, + "export-markdown": { + "description": "export markdown", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\ee68" + } + }, + "export-pdf": { + "description": "export pdf", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e684" + } + }, + "libpick-folder": { + "description": "libpick folder", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e600" + } + }, + "libpick-verilog": { + "description": "libpick verilog", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e7a8" + } + }, + "libpick-vhdl": { + "description": "libpick vhdl", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e6b3" + } + }, + "libpick-common": { + "description": "libpick common", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e622" + } + }, + "libpick-custom": { + "description": "libpick custom", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e623" + } + }, + "libpick-unknown": { + "description": "libpick unknown", + "default": { + "fontPath": "./images/icons/iconfont.woff2", + "fontCharacter": "\\e62a" + } + } + } + }, + "scripts": { + "vscode:prepublish": "webpack --mode production", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", + "pretest": "npm run compile && npm run lint", + "lint": "eslint src --ext ts", + "test": "node ./out/test/runTest.js" + }, + "devDependencies": { + "@types/glob": "^8.0.0", + "@types/mocha": "^10.0.0", + "@types/node": "16.x", + "@types/showdown": "^2.0.0", + "@types/vscode": "^1.72.0", + "@typescript-eslint/eslint-plugin": "^5.42.0", + "@typescript-eslint/parser": "^5.42.0", + "@vscode/test-electron": "^2.2.0", + "eslint": "^8.26.0", + "glob": "^8.0.3", + "mocha": "^10.1.0", + "typescript": "^4.8.4", + "webpack-cli": "^5.1.4" + }, + "dependencies": { + "chokidar": "^3.5.3", + "puppeteer-core": "^19.4.1", + "showdown": "^2.1.0", + "state-machine-cat": "^9.2.5", + "temp": "^0.9.4", + "vscode-textmate": "^9.0.0", + "wavedrom": "^2.9.1", + "vscode-languageclient": "^7.0.0" + } +} diff --git a/package.nls.json b/package.nls.json new file mode 100644 index 0000000..eb7d2c1 --- /dev/null +++ b/package.nls.json @@ -0,0 +1,49 @@ +{ + "digital-ide.property-json.generate.title": "Generate property.json", + "digital-ide.property-json.overwrite.title": "Overwrite property.json template", + "digital-ide.hdlDoc.exportFile.title": "Export the document of current file", + "digital-ide.hdlDoc.exportProject.title": "Export the document of current project", + "digital-ide.hdlDoc.showWebview.title": "Show the document of current file in a webview", + "digital-ide.tool.instance.title": "Generate instance template from selected module", + "digital-ide.tool.testbench.title": "Generate testbench template from current file", + "digital-ide.tool.icarus.simulateFile.title": "Do simulation for current file", + "digital-ide.treeView.arch.expand.title": "Expand all the items in tree view", + "digital-ide.treeView.arch.collapse.title": "Collapse all the items in tree view", + "digital-ide.treeView.arch.refresh.title": "Refresh the tree view", + "digital-ide.treeView.arch.openFile.title": "Open the corresponding file in tree view", + "digital-ide.tool.clean.title": "Clean the current project", + "digital-ide.soft.launch.title": "Launch SDK development assist function", + "digital-ide.soft.build.title": "Build the current SDK project", + "digital-ide.soft.download.title": "Download the boot file into the device", + "digital-ide.hard.launch.title": "Launch FPGA development assist function", + "digital-ide.hard.simulate.title": "Launch the manufacturer Simulation", + "digital-ide.hard.simulate.cli.title": "Launch the manufacturer Simulation in CLI", + "digital-ide.hard.simulate.gui.title": "Launch the manufacturer Simulation in GUI", + "digital-ide.hard.refresh.title": "Refresh the current project file", + "digital-ide.hard.build.title": "Build the current fpga project", + "digital-ide.hard.build.synth.title": "Synth the current project", + "digital-ide.hard.build.impl.title": "Impl the current project", + "digital-ide.hard.build.bitstream.title": "Generate the BIT File", + "digital-ide.hard.program.title": "Download the bit file into the device", + "digital-ide.hard.gui.title": "Open the GUI", + "digital-ide.hard.exit.title": "Exit the current project", + "digital-ide.pickLibrary.title": "Select lib from custom & common", + "digital-ide.pl.setSrcTop.title": "Set as top file of src", + "digital-ide.pl.setSimTop.title": "Set as top file of sim", + "digital-ide.pl.addDevice.title": "Add device", + "digital-ide.pl.delDevice.title": "Del device", + "digital-ide.pl.addFile.title": "Add file", + "digital-ide.pl.delFile.title": "Del file", + "digital-ide.netlist.title": "Netlist", + "digital-ide.fsm.title": "Finite state machine", + "digital-ide.lsp.tool.insertTextToUri.title": "Insert text to uri", + "digital-ide.lsp.tool.transformOldPropertyFile.title": "Transform configure file from previous version to new version", + "digital-ide.vhdl2vlog.title": "Translate vhdl code to verilog code", + "digital-ide.fsm.show.title": "Show FSM graph of current file", + "digital-ide.netlist.show.title": "Show netlist of current file", + "digital-ide.waveviewer.show.title": "Render the vcd in the dide viewer", + "digital-ide.lsp.vlog.linter.pick.title": "select a diagnostic for verilog", + "digital-ide.lsp.svlog.linter.pick.title": "select a diagnostic for systemverilog verilog", + "digital-ide.lsp.vhdl.linter.pick.title": "select a diagnostic for vhdl", + "digital-ide.lsp.systemverilog.linter.pick.title": "select a diagnostic for systemverilog" +} \ No newline at end of file diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json new file mode 100644 index 0000000..f978a1c --- /dev/null +++ b/package.nls.zh-cn.json @@ -0,0 +1,49 @@ +{ + "digital-ide.property-json.generate.title": "生成 property.json 配置文件", + "digital-ide.property-json.overwrite.title": "修改默认的 property.json 模板文件", + "digital-ide.hdlDoc.exportFile.title": "导出当前文件的文档", + "digital-ide.hdlDoc.exportProject.title": "导出当前项目的文档", + "digital-ide.hdlDoc.showWebview.title": "在 webview 中展示文档", + "digital-ide.tool.instance.title": "生成选中 module 的例化模板", + "digital-ide.tool.testbench.title": "从当前文件中选择 module 生成 testbench", + "digital-ide.tool.icarus.simulateFile.title": "对当前文件进行仿真", + "digital-ide.treeView.arch.expand.title": "扩大树视图中的所有项目", + "digital-ide.treeView.arch.collapse.title": "崩溃树视图中的所有项目", + "digital-ide.treeView.arch.refresh.title": "刷新树视图", + "digital-ide.treeView.arch.openFile.title": "在树视图打开相应的文件", + "digital-ide.tool.clean.title": "干净的当前项目", + "digital-ide.soft.launch.title": "启动SDK开发辅助功能", + "digital-ide.soft.build.title": "建立项目当前的SDK", + "digital-ide.soft.download.title": "下载文件到设备引导", + "digital-ide.hard.launch.title": "启动FPGA开发辅助功能", + "digital-ide.hard.simulate.title": "启动生产仿真", + "digital-ide.hard.simulate.cli.title": "在CLI推出制造商模拟", + "digital-ide.hard.simulate.gui.title": "在GUI推出制造商模拟", + "digital-ide.hard.refresh.title": "刷新当前的项目文件", + "digital-ide.hard.build.title": "fpga构建当前项目", + "digital-ide.hard.build.synth.title": "Synth当前项目", + "digital-ide.hard.build.impl.title": "Impl当前项目", + "digital-ide.hard.build.bitstream.title": "生成一些文件", + "digital-ide.hard.program.title": "下载文件到设备", + "digital-ide.hard.gui.title": "打开界面", + "digital-ide.hard.exit.title": "退出当前项目", + "digital-ide.pickLibrary.title": "从自定义选择自由和普遍", + "digital-ide.pl.setSrcTop.title": "设置为 src 的顶层文件", + "digital-ide.pl.setSimTop.title": "设置为 sim 的顶层文件", + "digital-ide.pl.addDevice.title": "添加 device", + "digital-ide.pl.delDevice.title": "删除 device", + "digital-ide.pl.addFile.title": "添加文件", + "digital-ide.pl.delFile.title": "d删除文件", + "digital-ide.netlist.title": "netlist", + "digital-ide.fsm.title": "有限状态机", + "digital-ide.lsp.tool.insertTextToUri.title": "插入文本uri", + "digital-ide.lsp.tool.transformOldPropertyFile.title": "转换配置文件从先前版本新版本", + "digital-ide.vhdl2vlog.title": "vhdl代码翻译为verilog代码", + "digital-ide.fsm.show.title": "显示当前文件的FSM图", + "digital-ide.netlist.show.title": "显示当前文件的netlist", + "digital-ide.waveviewer.show.title": "在 dide viewer 中渲染当前的 vcd", + "digital-ide.lsp.vlog.linter.pick.title": "选择 Verilog 的诊断", + "digital-ide.lsp.svlog.linter.pick.title": "选择 System Verilog 的诊断", + "digital-ide.lsp.vhdl.linter.pick.title": "选择 VHDL 的诊断", + "digital-ide.lsp.systemverilog.linter.pick.title": "选择 SystemVerilog 的诊断" +} \ No newline at end of file diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json new file mode 100644 index 0000000..f0f7a05 --- /dev/null +++ b/package.nls.zh-tw.json @@ -0,0 +1,49 @@ +{ + "digital-ide.property-json.generate.title": "生成 property.json 配置文件", + "digital-ide.property-json.overwrite.title": "修改默認的 property.json 模板文件", + "digital-ide.hdlDoc.exportFile.title": "導出當前文件的文檔", + "digital-ide.hdlDoc.exportProject.title": "導出當前項目的文檔", + "digital-ide.hdlDoc.showWebview.title": "在 webview 中展示文檔", + "digital-ide.tool.instance.title": "生成選中 module 的例化模板", + "digital-ide.tool.testbench.title": "從當前文件中選擇 module 生成 testbench", + "digital-ide.tool.icarus.simulateFile.title": "對當前文件進行仿真", + "digital-ide.treeView.arch.expand.title": "擴大樹視圖中的所有項目", + "digital-ide.treeView.arch.collapse.title": "崩潰樹視圖中的所有項目", + "digital-ide.treeView.arch.refresh.title": "刷新樹視圖", + "digital-ide.treeView.arch.openFile.title": "在樹視圖打開相應的文件", + "digital-ide.tool.clean.title": "乾淨的當前項目", + "digital-ide.soft.launch.title": "啟動SDK開發輔助功能", + "digital-ide.soft.build.title": "建立項目當前的SDK", + "digital-ide.soft.download.title": "下載文件到設備引導", + "digital-ide.hard.launch.title": "啟動FPGA開發輔助功能", + "digital-ide.hard.simulate.title": "啟動生產仿真", + "digital-ide.hard.simulate.cli.title": "在CLI推出製造商模擬", + "digital-ide.hard.simulate.gui.title": "在GUI推出製造商模擬", + "digital-ide.hard.refresh.title": "刷新當前的項目文件", + "digital-ide.hard.build.title": "fpga構建當前項目", + "digital-ide.hard.build.synth.title": "Synth當前項目", + "digital-ide.hard.build.impl.title": "Impl當前項目", + "digital-ide.hard.build.bitstream.title": "生成一些文件", + "digital-ide.hard.program.title": "下載文件到設備", + "digital-ide.hard.gui.title": "打開界面", + "digital-ide.hard.exit.title": "退出當前項目", + "digital-ide.pickLibrary.title": "從自定義選擇自由和普遍", + "digital-ide.pl.setSrcTop.title": "設置為src的top", + "digital-ide.pl.setSimTop.title": "設置為sim的top", + "digital-ide.pl.addDevice.title": "添加device", + "digital-ide.pl.delDevice.title": "刪除device", + "digital-ide.pl.addFile.title": "添加文件", + "digital-ide.pl.delFile.title": "d刪除文件", + "digital-ide.netlist.title": "netlist", + "digital-ide.fsm.title": "有限狀態機", + "digital-ide.lsp.tool.insertTextToUri.title": "插入文本uri", + "digital-ide.lsp.tool.transformOldPropertyFile.title": "轉換配置文件從先前版本新版本", + "digital-ide.vhdl2vlog.title": "vhdl代碼翻譯為verilog代碼", + "digital-ide.fsm.show.title": "顯示當前文件的FSM圖", + "digital-ide.netlist.show.title": "顯示當前文件的netlist", + "digital-ide.waveviewer.show.title": "Render the vcd in viewer", + "digital-ide.lsp.vlog.linter.pick.title": "選擇 Verilog 的診斷", + "digital-ide.lsp.svlog.linter.pick.title": "選擇 System Verilog 的診斷", + "digital-ide.lsp.vhdl.linter.pick.title": "選擇 VHDL 的診斷", + "digital-ide.lsp.systemverilog.linter.pick.title": "選擇 SystemVerilog 的診斷" +} \ No newline at end of file diff --git a/project/property-init.json b/project/property-init.json new file mode 100644 index 0000000..5bff5f5 --- /dev/null +++ b/project/property-init.json @@ -0,0 +1,11 @@ +{ + "toolChain": "xilinx", + "prjName": { + "PL": "template" + }, + "soc": { + "core": "none" + }, + "enableShowLog": false, + "device": "none" +} \ No newline at end of file diff --git a/project/property-schema.json b/project/property-schema.json new file mode 100644 index 0000000..9bb43b9 --- /dev/null +++ b/project/property-schema.json @@ -0,0 +1,224 @@ +{ + "title": "property", + "description": "A property file for project of DIDE", + "type": "object", + "properties": { + "toolChain": { + "type": "string", + "description": "The tool chain you need", + "enum": [ + "xilinx" + ] + }, + "prjName": { + "type": "object", + "default": { + "PL": "template" + }, + "properties": { + "PL": { + "type": "string", + "description": "project name of FPGA", + "default": "template" + }, + "PS": { + "type": "string", + "description": "project name of SOC", + "default": "test" + } + } + }, + "arch": { + "type": "object", + "properties": { + "prjPath": { + "type": "string" + }, + "hardware": { + "type": "object", + "properties": { + "src": { + "type": "string" + }, + "sim": { + "type": "string" + }, + "data": { + "type": "string" + } + } + }, + "software": { + "type": "object", + "properties": { + "src": { + "type": "string" + }, + "data": { + "type": "string" + } + } + } + } + }, + "library": { + "type": "object", + "properties": { + "state": { + "type": "string", + "enum": [ + "local", + "remote" + ] + }, + "hardware": { + "type": "object", + "properties": { + "common": { + "type": "array" + }, + "custom": { + "type": "array" + } + } + } + } + }, + "IP_REPO": { + "type": "array" + }, + "soc": { + "type": "object", + "default": { + "core": "none" + }, + "properties": { + "core": { + "type": "string", + "description": "Supported CPU for SOC", + "enum": [ + "none", + "cortexM3", + "microblaze", + "ps7_cortexa9_0", + "ps7_cortexa9_1", + "psu_cortexr5", + "psu_cortexa53" + ] + }, + "bd": { + "type": "string", + "description": "The bd_file for FPGA Designed", + "enum": [ + "zynq_default", + "m3_xIP_default", + "MicroBlaze_default", + "PCIe_Test" + ] + }, + "os": { + "type": "string", + "default": "standalone", + "description": "the os for SOC application", + "enum": [ + "linux", + "xilkernel", + "standalone", + "freertos10_xilinx" + ] + }, + "app": { + "type": "string", + "default": "Hello World", + "description": "the app for SOC application", + "enum": [ + "Hello World", + "Empty Application", + "Zynq FSBL", + "Zynq MP FSBL", + "SREC SPI Bootloader", + "SREC Bootloader", + "Zynq DRAM tests", + "Zynq MP DRAM tests", + "ZynqMP PMU Firmware", + "RSA Authentication App", + "Libmetal AMP Demo", + "lwIP Echo Server", + "lwIP TCP Perf Client", + "lwIP TCP Perf Server", + "lwIP UDP Perf Client", + "lwIP UDP Perf Server", + "Memory Tests", + "OpenAMP echo-test", + "OpenAMP matrix multiplication Demo", + "OpenAMP RPC Demo", + "Peripheral Tests", + "DDR self refresh", + "Dhrystone", + "Xilkernel POSIX Threads Demo", + "FreeRTOS Hello World", + "FreeRTOS lwIP Echo Server", + "FreeRTOS lwIP TCP Perf Client", + "FreeRTOS lwIP TCP Perf Server", + "FreeRTOS lwIP UDP Perf Client", + "FreeRTOS lwIP UDP Perf Server", + "Linux Empty Application", + "Linux Hello World" + ] + } + }, + "dependencies": { + "bd": [ + "core" + ], + "os": [ + "core" + ], + "app": [ + "core" + ] + } + }, + "enableShowLog": { + "type": "boolean", + "description": "Whether to display logs during compilation", + "default": false, + "enum": [ + true, + false + ] + }, + "device": { + "type": "string", + "description": "The device type", + "enum": [ + "none", + "xc7z020clg400-2", + "xc7a35tftg256-1", + "xc7a35tcsg324-1", + "xc7z035ffg676-2", + "xc7z020clg484-1" + ] + }, + "iverilogCompileOptions": { + "type": "object", + "description": "options to define iverilog arguments", + "properties": { + "standard": { + "type": "string", + "description": "value of argument -g, default is -g2012", + "default": "2012" + }, + "includes": { + "type": "array", + "description": "value of argument -I" + } + } + } + }, + "required": [ + "toolChain", + "soc", + "device" + ] +} \ No newline at end of file diff --git a/resources/dide-lsp/README.md b/resources/dide-lsp/README.md new file mode 100644 index 0000000..4807daa --- /dev/null +++ b/resources/dide-lsp/README.md @@ -0,0 +1,3 @@ +dide-lsp + - server + - digital-lsp \ No newline at end of file diff --git a/resources/dide-viewer/README.md b/resources/dide-viewer/README.md new file mode 100644 index 0000000..e5378f7 --- /dev/null +++ b/resources/dide-viewer/README.md @@ -0,0 +1,6 @@ +dide-viewer + - view + - index.html + - css + - js + - ... \ No newline at end of file diff --git a/resources/formatter/index.d.ts b/resources/formatter/index.d.ts new file mode 100644 index 0000000..d556410 --- /dev/null +++ b/resources/formatter/index.d.ts @@ -0,0 +1,8 @@ +import * as vscode from 'vscode'; + + +declare module formatterProvider { + export const hdlFormatterProvider: vscode.DocumentFormattingEditProvider; +} + +export = formatterProvider; \ No newline at end of file diff --git a/resources/formatter/index.js b/resources/formatter/index.js new file mode 100644 index 0000000..827f6ca --- /dev/null +++ b/resources/formatter/index.js @@ -0,0 +1,137 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +"use strict"; +const os = require('os'); +const fs = require('fs'); +const path = require('path'); +const vscode = require('vscode'); +const temp = require("temp"); + +const vlogFormatter = require("./vlogFormatter.js"); +const vhdlFormatter = require("./vhdlFormatter.js"); + +class Formatter { + constructor() { + this.vlogFormatter = new VlogFormatter(); + this.vhdlFormatter = new VhdlFormatter(); + } + + async provideDocumentFormattingEdits(document, options, token) { + const edits = []; + //Get document code + let code_document = document.getText(); + let selection_document = this.getDocumentRange(document); + //Get selected text + let editor = vscode.window.activeTextEditor; + let selection_selected_text = ''; + let code_selected_text = ''; + if (editor !== undefined) { + selection_selected_text = editor.selection; + code_selected_text = editor.document.getText(editor.selection); + } + //Code to format + let code_to_format = ''; + let selection_to_format = ''; + if (code_selected_text !== '') { + code_to_format = code_selected_text; + selection_to_format = selection_selected_text; + } else { + code_to_format = code_document; + selection_to_format = selection_document; + } + + let code_format = await this.format(document.languageId, code_to_format); + if (code_format === null) { + console.log("Error format code."); + return edits; + } else { + const replacement = vscode.TextEdit.replace(selection_to_format, code_format); + edits.push(replacement); + return edits; + } + } + + async format(language, code) { + let options = null; + let formatted_code = ''; + try { + if (language === "vhdl") { + options = this.get_vhdl_config(); + formatted_code = await this.vhdlFormatter.format_from_code(code, options); + } + else { + options = this.get_vlog_config(); + formatted_code = await this.vlogFormatter.format_from_code(code, options); + } + return formatted_code; + } catch (error) { + return code; + } + } + + get_vlog_config() { + let style = vscode.workspace.getConfiguration("digital-ide.function.lsp.formatter.vlog.default").get("style", 'kr'); + let args = vscode.workspace.getConfiguration("digital-ide.function.lsp.formatter.vlog.default").get("args", ''); + return `--style=${style} ${args}`; + } + + get_vhdl_config() { + let configuration = vscode.workspace.getConfiguration('function.lsp.formatter.vhdl.default'); + let settings = { + "RemoveComments": false, + "RemoveAsserts": false, + "CheckAlias": false, + "AlignComments": configuration.get('align-comments'), + "SignAlignSettings": { + "isRegional": true, + "isAll": true, + "mode": 'local', + "keyWords": [ + "FUNCTION", + "IMPURE FUNCTION", + "GENERIC", + "PORT", + "PROCEDURE" + ] + }, + "KeywordCase": configuration.get('keyword-case'), + "TypeNameCase": configuration.get('type-name-case'), + "Indentation": ' '.repeat(configuration.get('indentation')), + "NewLineSettings": { + "newLineAfter": [ + ";", + "then" + ], + "noNewLineAfter": [] + }, + "EndOfLine": "\n" + }; + return settings; + } + + getDocumentRange(document) { + const lastLineId = document.lineCount - 1; + return new vscode.Range(0, 0, lastLineId, document.lineAt(lastLineId).text.length); + } +} + +class VlogFormatter { + async format_from_code(code, options) { + let verilogFormatter = await vlogFormatter(); + verilogFormatter.FS.writeFile("/share/FILE_IN.v", code, { encoding: 'utf8' }); + verilogFormatter.ccall('run', '', ['string'], [`${options} finish`]); + let formatted_code = verilogFormatter.FS.readFile("/share/FILE_OUT.v", { encoding: 'utf8' }); + return formatted_code; + } +} + +class VhdlFormatter { + async format_from_code(code, options) { + let beautifuler = new vhdlFormatter.Beautifuler(); + let formatted_code = beautifuler.beauty(code, options); + return formatted_code; + } +} + + +const hdlFormatterProvider = new Formatter(); +module.exports = { hdlFormatterProvider }; \ No newline at end of file diff --git a/resources/formatter/vhdlFormatter.js b/resources/formatter/vhdlFormatter.js new file mode 100644 index 0000000..44486de --- /dev/null +++ b/resources/formatter/vhdlFormatter.js @@ -0,0 +1,910 @@ +"use strict"; + +class Beautifuler { + beauty(input, options) { + let new_line_after_symbols = new NewLineSettings(); + new_line_after_symbols.newLineAfter = ["then", ";"]; + new_line_after_symbols.noNewLineAfter = ["port", "generic"]; + let settings = this.getDefaultBeautifierSettings(new_line_after_symbols); + settings.SignAlignSettings = new signAlignSettings(true, true, "local", ["PORT", "GENERIC"]); + + const result = this.beautifyIntern(input, options); + if (result.err !== null) { + console.error(`-- [ERROR]: could not beautify`); + } + return result.data; + } + + beautifyIntern(input, settings) { + try { + const data = beautify(input, settings); + return { + data, + err: null, + }; + } + catch (err) { + return { + data: null, + err, + }; + } + } + + getDefaultBeautifierSettings(newLineSettings, signAlignSettings = null, indentation = " ") { + return new BeautifierSettings(false, false, false, signAlignSettings, "lowercase", "lowercase", indentation, newLineSettings, "\r\n"); + } +} +exports.Beautifuler = Beautifuler; + +// VHDLFormatter +const ILEscape = "@@"; +const ILCommentPrefix = ILEscape + "comments"; +const ILIndentedReturnPrefix = ILEscape; +const ILQuote = "⨵"; +const ILSingleQuote = "⦼"; +const ILBackslash = "⨸"; +const ILSemicolon = "⨴"; +var FormatMode; +(function (FormatMode) { + FormatMode[FormatMode["Default"] = 0] = "Default"; + FormatMode[FormatMode["EndsWithSemicolon"] = 1] = "EndsWithSemicolon"; + FormatMode[FormatMode["CaseWhen"] = 2] = "CaseWhen"; + FormatMode[FormatMode["IfElse"] = 3] = "IfElse"; + FormatMode[FormatMode["PortGeneric"] = 4] = "PortGeneric"; +})(FormatMode || (FormatMode = {})); +let Mode = FormatMode.Default; +exports.RemoveAsserts = exports.ApplyNoNewLineAfter = exports.beautify3 = exports.beautifySemicolonBlock = exports.beautifyPackageIsNewBlock = exports.beautifyComponentBlock = exports.beautifyCaseBlock = exports.AlignSign = exports.AlignSigns = exports.beautifyPortGenericBlock = exports.FormattedLineToString = exports.FormattedLine = exports.beautify = exports.BeautifierSettings = exports.signAlignSettings = exports.SetNewLinesAfterSymbols = exports.NewLineSettings = void 0; +class NewLineSettings { + constructor() { + this.newLineAfter = []; + this.noNewLineAfter = []; + } + newLineAfterPush(keyword) { + this.newLineAfter.push(keyword); + } + noNewLineAfterPush(keyword) { + this.noNewLineAfter.push(keyword); + } + push(keyword, addNewLine) { + let str = addNewLine.toLowerCase(); + if (str == "none") { + return; + } + else if (!str.startsWith("no")) { + this.newLineAfterPush(keyword); + } + else { + this.noNewLineAfterPush(keyword); + } + } +} +exports.NewLineSettings = NewLineSettings; +function ConstructNewLineSettings(dict) { + let settings = new NewLineSettings(); + for (let key in dict) { + settings.push(key, dict[key]); + } + return settings; +} +String.prototype.regexCount = function (pattern) { + if (pattern.flags.indexOf("g") < 0) { + pattern = new RegExp(pattern.source, pattern.flags + "g"); + } + return (this.match(pattern) || []).length; +}; +String.prototype.count = function (text) { + return this.split(text).length - 1; +}; +String.prototype.regexStartsWith = function (pattern) { + var searchResult = this.search(pattern); + return searchResult == 0; +}; +String.prototype.regexIndexOf = function (pattern, startIndex) { + startIndex = startIndex || 0; + var searchResult = this.substr(startIndex).search(pattern); + return (-1 === searchResult) ? -1 : searchResult + startIndex; +}; +String.prototype.regexLastIndexOf = function (pattern, startIndex) { + pattern = (pattern.global) ? pattern : + new RegExp(pattern.source, 'g' + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '')); + if (typeof (startIndex) === 'undefined') { + startIndex = this.length; + } + else if (startIndex < 0) { + startIndex = 0; + } + const stringToWorkWith = this.substring(0, startIndex + 1); + let lastIndexOf = -1; + let nextStop = 0; + let result; + while ((result = pattern.exec(stringToWorkWith)) != null) { + lastIndexOf = result.index; + pattern.lastIndex = ++nextStop; + } + return lastIndexOf; +}; +String.prototype.reverse = function () { + return this.split('').reverse().join(''); +}; +String.prototype.convertToRegexBlockWords = function () { + let result = new RegExp("(" + this + ")([^\\w]|$)"); + return result; +}; +Array.prototype.convertToRegexBlockWords = function () { + let wordsStr = this.join("|"); + let result = new RegExp("(" + wordsStr + ")([^\\w]|$)"); + return result; +}; +function EscapeComments(arr) { + var comments = []; + var count = 0; + for (var i = 0; i < arr.length; i++) { + var line = arr[i]; + var commentStartIndex = line.indexOf("--"); + if (commentStartIndex >= 0) { + comments.push(line.substr(commentStartIndex)); + arr[i] = line.substr(0, commentStartIndex) + ILCommentPrefix + count; + count++; + } + } + var isInComment = false; + var commentRegex = new RegExp("(?<=" + ILCommentPrefix + "[\\d]+)."); + for (var i = 0; i < arr.length; i++) { + var commentStartIndex = 0; + var hasComment = true; + var commentEndInlineIndex = 0; + while (hasComment) { + var line = arr[i]; + if (!isInComment) { + commentStartIndex = line.indexOf("/*"); + var commentEndIndex = line.indexOf("*/", commentStartIndex); + if (commentStartIndex >= 0) { + if (commentEndIndex >= 0) { + commentEndInlineIndex = commentEndIndex + 2; + isInComment = false; + comments.push(line.substring(commentStartIndex, commentEndInlineIndex)); + arr[i] = line.substr(0, commentStartIndex) + ILCommentPrefix + count + line.substr(commentEndInlineIndex); + count++; + hasComment = true; + if (commentStartIndex + 2 == line.length) { + hasComment = false; + } + } + else { + isInComment = true; + comments.push(line.substr(commentStartIndex)); + arr[i] = line.substr(0, commentStartIndex) + ILCommentPrefix + count; + count++; + hasComment = false; + } + } + else { + hasComment = false; + } + continue; + } + if (isInComment) { + var lastCommentEndIndex = line.regexLastIndexOf(commentRegex, line.length); + if (commentStartIndex == 0) { + var commentEndIndex = line.indexOf("*/", lastCommentEndIndex); + } + else { + var commentEndIndex = line.indexOf("*/", commentStartIndex); + } + if (commentEndIndex >= 0) { + isInComment = false; + comments.push(line.substr(0, commentEndIndex + 2)); + arr[i] = ILCommentPrefix + count + line.substr(commentEndIndex + 2); + count++; + hasComment = true; + } + else { + comments.push(line); + arr[i] = ILCommentPrefix + count; + count++; + hasComment = false; + } + } + } + } + return comments; +} +function ToLowerCases(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].toLowerCase(); + } +} +function ToUpperCases(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].toUpperCase(); + } +} +function ToCamelCases(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].charAt(0) + arr[i].slice(1).toLowerCase(); + } +} +function ReplaceKeyWords(text, keywords) { + for (var k = 0; k < keywords.length; k++) { + text = text.replace(new RegExp("([^a-zA-Z0-9_@]|^)" + keywords[k] + "([^a-zA-Z0-9_]|$)", 'gi'), "$1" + keywords[k] + "$2"); + } + return text; +} +function SetKeywordCase(input, keywordcase, keywords) { + let inputcase = keywordcase.toLowerCase(); + switch (inputcase) { + case "lowercase": + ToLowerCases(keywords); + break; + case "defaultcase": + ToCamelCases(keywords); + break; + case "uppercase": + ToUpperCases(keywords); + } + input = ReplaceKeyWords(input, keywords); + return input; +} +function SetNewLinesAfterSymbols(text, newLineSettings) { + if (newLineSettings == null) { + return text; + } + if (newLineSettings.newLineAfter != null) { + newLineSettings.newLineAfter.forEach(symbol => { + let upper = symbol.toUpperCase(); + var rexString = "(" + upper + ")[ ]?([^ \r\n@])"; + let regex = null; + if (upper.regexStartsWith(/\w/)) { + regex = new RegExp("\\b" + rexString, "g"); + } + else { + regex = new RegExp(rexString, "g"); + } + text = text.replace(regex, '$1\r\n$2'); + if (upper == "PORT") { + text = text.replace(/\bPORT\b\s+MAP/, "PORT MAP"); + } + }); + } + if (newLineSettings.noNewLineAfter != null) { + newLineSettings.noNewLineAfter.forEach(symbol => { + let rexString = "(" + symbol.toUpperCase() + ")[ \r\n]+([^@])"; + let regex = null; + if (symbol.regexStartsWith(/\w/)) { + regex = new RegExp("\\b" + rexString, "g"); + text = text.replace(regex, '$1 $2'); + } + else { + regex = new RegExp(rexString, "g"); + } + text = text.replace(regex, '$1 $2'); + }); + } + return text; +} +exports.SetNewLinesAfterSymbols = SetNewLinesAfterSymbols; +class signAlignSettings { + constructor(isRegional, isAll, mode, keyWords) { + this.isRegional = isRegional; + this.isAll = isAll; + this.mode = mode; + this.keyWords = keyWords; + } +} +exports.signAlignSettings = signAlignSettings; +class BeautifierSettings { + constructor(removeComments, removeReport, checkAlias, alignComments, signAlignSettings, keywordCase, typeNameCase, indentation, newLineSettings, endOfLine, addNewLine) { + this.RemoveComments = removeComments; + this.RemoveAsserts = removeReport; + this.CheckAlias = checkAlias; + this.AlignComments = alignComments; + this.SignAlignSettings = signAlignSettings; + this.KeywordCase = keywordCase; + this.TypeNameCase = typeNameCase; + this.Indentation = indentation; + this.NewLineSettings = newLineSettings; + this.EndOfLine = endOfLine; + this.AddNewLine = addNewLine; + } +} +exports.BeautifierSettings = BeautifierSettings; +let KeyWords = ["ABS", "ACCESS", "AFTER", "ALIAS", "ALL", "AND", "ARCHITECTURE", "ARRAY", "ASSERT", "ATTRIBUTE", "BEGIN", "BLOCK", "BODY", "BUFFER", "BUS", "CASE", "COMPONENT", "CONFIGURATION", "CONSTANT", "CONTEXT", "COVER", "DISCONNECT", "DOWNTO", "DEFAULT", "ELSE", "ELSIF", "END", "ENTITY", "EXIT", "FAIRNESS", "FILE", "FOR", "FORCE", "FUNCTION", "GENERATE", "GENERIC", "GROUP", "GUARDED", "IF", "IMPURE", "IN", "INERTIAL", "INOUT", "IS", "LABEL", "LIBRARY", "LINKAGE", "LITERAL", "LOOP", "MAP", "MOD", "NAND", "NEW", "NEXT", "NOR", "NOT", "NULL", "OF", "ON", "OPEN", "OR", "OTHERS", "OUT", "PACKAGE", "PORT", "POSTPONED", "PROCEDURE", "PROCESS", "PROPERTY", "PROTECTED", "PURE", "RANGE", "RECORD", "REGISTER", "REJECT", "RELEASE", "REM", "REPORT", "RESTRICT", "RESTRICT_GUARANTEE", "RETURN", "ROL", "ROR", "SELECT", "SEQUENCE", "SEVERITY", "SHARED", "SIGNAL", "SLA", "SLL", "SRA", "SRL", "STRONG", "SUBTYPE", "THEN", "TO", "TRANSPORT", "TYPE", "UNAFFECTED", "UNITS", "UNTIL", "USE", "VARIABLE", "VMODE", "VPROP", "VUNIT", "WAIT", "WHEN", "WHILE", "WITH", "XNOR", "XOR"]; +let TypeNames = ["BOOLEAN", "BIT", "CHARACTER", "INTEGER", "TIME", "NATURAL", "POSITIVE", "STD_LOGIC", "STD_LOGIC_VECTOR", "STD_ULOGIC", "STD_ULOGIC_VECTOR", "STRING"]; +function beautify(input, settings) { + input = input.replace(/\r\n/g, "\n"); + input = input.replace(/\n/g, "\r\n"); + var arr = input.split("\r\n"); + var comments = EscapeComments(arr); + var backslashes = escapeText(arr, "\\\\[^\\\\]+\\\\", ILBackslash); + let quotes = escapeText(arr, '"([^"]+)"', ILQuote); + let singleQuotes = escapeText(arr, "'[^']'", ILSingleQuote); + RemoveLeadingWhitespaces(arr); + input = arr.join("\r\n"); + if (settings.RemoveComments) { + input = input.replace(/\r\n[ \t]*@@comments[0-9]+[ \t]*\r\n/g, '\r\n'); + input = input.replace(/@@comments[0-9]+/g, ''); + comments = []; + } + input = SetKeywordCase(input, "uppercase", KeyWords); + input = SetKeywordCase(input, "uppercase", TypeNames); + input = RemoveExtraNewLines(input); + input = input.replace(/[\t ]+/g, ' '); + input = input.replace(/\([\t ]+/g, '\('); + input = input.replace(/[ ]+;/g, ';'); + input = input.replace(/:[ ]*(PROCESS|ENTITY)/gi, ':$1'); + arr = input.split("\r\n"); + if (settings.RemoveAsserts) { + RemoveAsserts(arr); //RemoveAsserts must be after EscapeQuotes + } + ReserveSemicolonInKeywords(arr); + input = arr.join("\r\n"); + input = input.replace(/\b(PORT|GENERIC)\b\s+MAP/g, '$1 MAP'); + input = input.replace(/\b(PORT|PROCESS|GENERIC)\b[\s]*\(/g, '$1 ('); + let newLineSettings = settings.NewLineSettings; + if (newLineSettings != null) { + input = SetNewLinesAfterSymbols(input, newLineSettings); + arr = input.split("\r\n"); + ApplyNoNewLineAfter(arr, newLineSettings.noNewLineAfter); + input = arr.join("\r\n"); + } + input = input.replace(/([a-zA-Z0-9\); ])\);(@@comments[0-9]+)?@@end/g, '$1\r\n);$2@@end'); + input = input.replace(/[ ]?([&=:\-\+|\*]|[<>]+)[ ]?/g, ' $1 '); + input = input.replace(/(\d+e) +([+\-]) +(\d+)/g, '$1$2$3'); // fix exponential notation format broken by previous step + input = input.replace(/[ ]?([,])[ ]?/g, '$1 '); + input = input.replace(/[ ]?(['"])(THEN)/g, '$1 $2'); + input = input.replace(/[ ]?(\?)?[ ]?(<|:|>|\/)?[ ]+(=)?[ ]?/g, ' $1$2$3 '); + input = input.replace(/(IF)[ ]?([\(\)])/g, '$1 $2'); + input = input.replace(/([\(\)])[ ]?(THEN)/gi, '$1 $2'); + input = input.replace(/(^|[\(\)])[ ]?(AND|OR|XOR|XNOR)[ ]*([\(])/g, '$1 $2 $3'); + input = input.replace(/ ([\-\*\/=+<>])[ ]*([\-\*\/=+<>]) /g, " $1$2 "); + //input = input.replace(/\r\n[ \t]+--\r\n/g, "\r\n"); + input = input.replace(/[ ]+/g, ' '); + input = input.replace(/[ \t]+\r\n/g, "\r\n"); + input = input.replace(/\r\n\r\n\r\n/g, '\r\n'); + input = input.replace(/[\r\n\s]+$/g, ''); + input = input.replace(/[ \t]+\)/g, ')'); + input = input.replace(/\s*\)\s+RETURN\s+([\w]+;)/g, '\r\n) RETURN $1'); //function(..)\r\nreturn type; -> function(..\r\n)return type; + input = input.replace(/\)\s*(@@\w+)\r\n\s*RETURN\s+([\w]+;)/g, ') $1\r\n' + ILIndentedReturnPrefix + 'RETURN $2'); //function(..)\r\nreturn type; -> function(..\r\n)return type; + let keywordAndSignRegex = new RegExp("(\\b" + KeyWords.join("\\b|\\b") + "\\b) +([\\-+]) +(\\w)", "g"); + input = input.replace(keywordAndSignRegex, "$1 $2$3"); // `WHEN - 2` -> `WHEN -2` + input = input.replace(/([,|]) +([+\-]) +(\w)/g, '$1 $2$3'); // `1, - 2)` -> `1, -2)` + input = input.replace(/(\() +([+\-]) +(\w)/g, '$1$2$3'); // `( - 2)` -> `(-2)` + arr = input.split("\r\n"); + let result = []; + beautify3(arr, result, settings, 0, 0); + var alignSettings = settings.SignAlignSettings; + if (alignSettings != null && alignSettings.isAll) { + AlignSigns(result, 0, result.length - 1, alignSettings.mode, settings.AlignComments); + } + arr = FormattedLineToString(result, settings.Indentation); + input = arr.join("\r\n"); + input = input.replace(/@@RETURN/g, "RETURN"); + input = SetKeywordCase(input, settings.KeywordCase, KeyWords); + input = SetKeywordCase(input, settings.TypeNameCase, TypeNames); + input = replaceEscapedWords(input, quotes, ILQuote); + input = replaceEscapedWords(input, singleQuotes, ILSingleQuote); + input = replaceEscapedComments(input, comments, ILCommentPrefix); + input = replaceEscapedWords(input, backslashes, ILBackslash); + input = input.replace(new RegExp(ILSemicolon, "g"), ";"); + input = input.replace(/@@[a-z]+/g, ""); + var escapedTexts = new RegExp("[" + ILBackslash + ILQuote + ILSingleQuote + "]", "g"); + input = input.replace(escapedTexts, ""); + input = input.replace(/\r\n/g, settings.EndOfLine); + if (settings.AddNewLine && !input.endsWith(settings.EndOfLine)) { + input += settings.EndOfLine; + } + return input; +} +exports.beautify = beautify; +function replaceEscapedWords(input, arr, prefix) { + for (var i = 0; i < arr.length; i++) { + var text = arr[i]; + var regex = new RegExp("(" + prefix + "){" + text.length + "}"); + input = input.replace(regex, text); + } + return input; +} +function replaceEscapedComments(input, arr, prefix) { + for (var i = 0; i < arr.length; i++) { + input = input.replace(prefix + i, arr[i]); + } + return input; +} +function RemoveLeadingWhitespaces(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].replace(/^\s+/, ""); + } +} +class FormattedLine { + constructor(line, indent) { + this.Line = line; + this.Indent = indent; + } +} +exports.FormattedLine = FormattedLine; +function FormattedLineToString(arr, indentation) { + let result = []; + if (arr == null) { + return result; + } + if (indentation == null) { + indentation = ""; + } + arr.forEach(i => { + if (i instanceof FormattedLine) { + if (i.Line.length > 0) { + result.push((Array(i.Indent + 1).join(indentation)) + i.Line); + } + else { + result.push(""); + } + } + else { + result = result.concat(FormattedLineToString(i, indentation)); + } + }); + return result; +} +exports.FormattedLineToString = FormattedLineToString; +function GetCloseparentheseEndIndex(inputs, startIndex) { + let openParentheseCount = 0; + let closeParentheseCount = 0; + for (let i = startIndex; i < inputs.length; i++) { + let input = inputs[i]; + openParentheseCount += input.count("("); + closeParentheseCount += input.count(")"); + if (openParentheseCount > 0 + && openParentheseCount <= closeParentheseCount) { + return i; + } + } + return startIndex; +} +function beautifyPortGenericBlock(inputs, result, settings, startIndex, parentEndIndex, indent, mode) { + let firstLine = inputs[startIndex]; + let regex = new RegExp("[\\w\\s:]*(" + mode + ")([\\s]|$)"); + if (!firstLine.regexStartsWith(regex)) { + return [startIndex, parentEndIndex]; + } + let firstLineHasParenthese = firstLine.indexOf("(") >= 0; + let hasParenthese = firstLineHasParenthese; + let blockBodyStartIndex = startIndex; + let secondLineHasParenthese = startIndex + 1 < inputs.length && inputs[startIndex + 1].startsWith("("); + if (secondLineHasParenthese) { + hasParenthese = true; + blockBodyStartIndex++; + } + let endIndex = hasParenthese ? GetCloseparentheseEndIndex(inputs, startIndex) : startIndex; + if (endIndex != startIndex && firstLineHasParenthese) { + inputs[startIndex] = inputs[startIndex].replace(/\b(PORT|GENERIC|PROCEDURE)\b([\w ]+)\(([\w\(\) ]+)/, '$1$2(\r\n$3'); + let newInputs = inputs[startIndex].split("\r\n"); + if (newInputs.length == 2) { + inputs[startIndex] = newInputs[0]; + inputs.splice(startIndex + 1, 0, newInputs[1]); + endIndex++; + parentEndIndex++; + } + } + else if (endIndex > startIndex + 1 && secondLineHasParenthese) { + inputs[startIndex + 1] = inputs[startIndex + 1].replace(/\(([\w\(\) ]+)/, '(\r\n$1'); + let newInputs = inputs[startIndex + 1].split("\r\n"); + if (newInputs.length == 2) { + inputs[startIndex + 1] = newInputs[0]; + inputs.splice(startIndex + 2, 0, newInputs[1]); + endIndex++; + parentEndIndex++; + } + } + if (firstLineHasParenthese && inputs[startIndex].indexOf("MAP") > 0) { + inputs[startIndex] = inputs[startIndex].replace(/([^\w])(MAP)\s+\(/g, '$1$2('); + } + result.push(new FormattedLine(inputs[startIndex], indent)); + if (secondLineHasParenthese) { + let secondLineIndent = indent; + if (endIndex == startIndex + 1) { + secondLineIndent++; + } + result.push(new FormattedLine(inputs[startIndex + 1], secondLineIndent)); + } + let blockBodyEndIndex = endIndex; + let i = beautify3(inputs, result, settings, blockBodyStartIndex + 1, indent + 1, endIndex); + if (inputs[i].startsWith(")")) { + result[i].Indent--; + blockBodyEndIndex--; + } + var alignSettings = settings.SignAlignSettings; + if (alignSettings != null) { + if (alignSettings.isRegional && !alignSettings.isAll + && alignSettings.keyWords != null + && alignSettings.keyWords.indexOf(mode) >= 0) { + blockBodyStartIndex++; + AlignSigns(result, blockBodyStartIndex, blockBodyEndIndex, alignSettings.mode, settings.AlignComments); + } + } + return [i, parentEndIndex]; +} +exports.beautifyPortGenericBlock = beautifyPortGenericBlock; +function AlignSigns(result, startIndex, endIndex, mode, alignComments) { + AlignSign_(result, startIndex, endIndex, ":", mode); + AlignSign_(result, startIndex, endIndex, ":=", mode); + AlignSign_(result, startIndex, endIndex, "<=", mode); + AlignSign_(result, startIndex, endIndex, "=>", mode); + if (alignComments) { + AlignSign_(result, startIndex, endIndex, "@@comments", mode); + } +} +exports.AlignSigns = AlignSigns; +function AlignSign_(result, startIndex, endIndex, symbol, mode) { + let maxSymbolIndex = -1; + let symbolIndices = {}; + let startLine = startIndex; + let labelAndKeywords = [ + "([\\w\\s]*:(\\s)*PROCESS)", + "([\\w\\s]*:(\\s)*POSTPONED PROCESS)", + "([\\w\\s]*:\\s*$)", + "([\\w\\s]*:.*\\s+GENERATE)" + ]; + let labelAndKeywordsStr = labelAndKeywords.join("|"); + let labelAndKeywordsRegex = new RegExp("(" + labelAndKeywordsStr + ")([^\\w]|$)"); + for (let i = startIndex; i <= endIndex; i++) { + let line = result[i].Line; + if (symbol == ":" && line.regexStartsWith(labelAndKeywordsRegex)) { + continue; + } + let regex = new RegExp("([\\s\\w\\\\]|^)" + symbol + "([\\s\\w\\\\]|$)"); + if (line.regexCount(regex) > 1) { + continue; + } + let colonIndex = line.regexIndexOf(regex); + if (colonIndex > 0) { + maxSymbolIndex = Math.max(maxSymbolIndex, colonIndex); + symbolIndices[i] = colonIndex; + } + else if ((mode != "local" && !line.startsWith(ILCommentPrefix) && line.length != 0) + || (mode == "local")) { + if (startLine < i - 1) // if cannot find the symbol, a block of symbols ends + { + AlignSign(result, startLine, i - 1, symbol, maxSymbolIndex, symbolIndices); + } + maxSymbolIndex = -1; + symbolIndices = {}; + startLine = i; + } + } + if (startLine < endIndex) // if cannot find the symbol, a block of symbols ends + { + AlignSign(result, startLine, endIndex, symbol, maxSymbolIndex, symbolIndices); + } +} +function AlignSign(result, startIndex, endIndex, symbol, maxSymbolIndex = -1, symbolIndices = {}) { + if (maxSymbolIndex < 0) { + return; + } + for (let lineIndex in symbolIndices) { + let symbolIndex = symbolIndices[lineIndex]; + if (symbolIndex == maxSymbolIndex) { + continue; + } + let line = result[lineIndex].Line; + result[lineIndex].Line = line.substring(0, symbolIndex) + + (Array(maxSymbolIndex - symbolIndex + 1).join(" ")) + + line.substring(symbolIndex); + } +} +exports.AlignSign = AlignSign; +function beautifyCaseBlock(inputs, result, settings, startIndex, indent) { + if (!inputs[startIndex].regexStartsWith(/(.+:\s*)?(CASE)([\s]|$)/)) { + return startIndex; + } + result.push(new FormattedLine(inputs[startIndex], indent)); + let i = beautify3(inputs, result, settings, startIndex + 1, indent + 2); + result[i].Indent = indent; + return i; +} +exports.beautifyCaseBlock = beautifyCaseBlock; +function getSemicolonBlockEndIndex(inputs, settings, startIndex, parentEndIndex) { + let endIndex = 0; + let openBracketsCount = 0; + let closeBracketsCount = 0; + for (let i = startIndex; i < inputs.length; i++) { + let input = inputs[i]; + let indexOfSemicolon = input.indexOf(";"); + let splitIndex = indexOfSemicolon < 0 ? input.length : indexOfSemicolon + 1; + let stringBeforeSemicolon = input.substring(0, splitIndex); + let stringAfterSemicolon = input.substring(splitIndex); + stringAfterSemicolon = stringAfterSemicolon.replace(new RegExp(ILCommentPrefix + "[0-9]+"), ""); + openBracketsCount += stringBeforeSemicolon.count("("); + closeBracketsCount += stringBeforeSemicolon.count(")"); + if (indexOfSemicolon < 0) { + continue; + } + if (openBracketsCount == closeBracketsCount) { + endIndex = i; + if (stringAfterSemicolon.trim().length > 0 && settings.NewLineSettings.newLineAfter.indexOf(";") >= 0) { + inputs[i] = stringBeforeSemicolon; + inputs.splice(i, 0, stringAfterSemicolon); + parentEndIndex++; + } + break; + } + } + return [endIndex, parentEndIndex]; +} +function beautifyComponentBlock(inputs, result, settings, startIndex, parentEndIndex, indent) { + let endIndex = startIndex; + for (let i = startIndex; i < inputs.length; i++) { + if (inputs[i].regexStartsWith(/END(\s|$)/)) { + endIndex = i; + break; + } + } + result.push(new FormattedLine(inputs[startIndex], indent)); + if (endIndex != startIndex) { + let actualEndIndex = beautify3(inputs, result, settings, startIndex + 1, indent + 1, endIndex); + let incremental = actualEndIndex - endIndex; + endIndex += incremental; + parentEndIndex += incremental; + } + return [endIndex, parentEndIndex]; +} +exports.beautifyComponentBlock = beautifyComponentBlock; +function beautifyPackageIsNewBlock(inputs, result, settings, startIndex, parentEndIndex, indent) { + let endIndex = startIndex; + for (let i = startIndex; i < inputs.length; i++) { + if (inputs[i].regexIndexOf(/;(\s|$)/) >= 0) { + endIndex = i; + break; + } + } + result.push(new FormattedLine(inputs[startIndex], indent)); + if (endIndex != startIndex) { + let actualEndIndex = beautify3(inputs, result, settings, startIndex + 1, indent + 1, endIndex); + let incremental = actualEndIndex - endIndex; + endIndex += incremental; + parentEndIndex += incremental; + } + return [endIndex, parentEndIndex]; +} +exports.beautifyPackageIsNewBlock = beautifyPackageIsNewBlock; +function beautifySemicolonBlock(inputs, result, settings, startIndex, parentEndIndex, indent) { + let endIndex = startIndex; + [endIndex, parentEndIndex] = getSemicolonBlockEndIndex(inputs, settings, startIndex, parentEndIndex); + result.push(new FormattedLine(inputs[startIndex], indent)); + if (endIndex != startIndex) { + let i = beautify3(inputs, result, settings, startIndex + 1, indent + 1, endIndex); + } + return [endIndex, parentEndIndex]; +} +exports.beautifySemicolonBlock = beautifySemicolonBlock; +function beautify3(inputs, result, settings, startIndex, indent, endIndex) { + let i; + let regexOneLineBlockKeyWords = new RegExp(/(PROCEDURE)[^\w](?!.+[^\w]IS([^\w]|$))/); //match PROCEDURE..; but not PROCEDURE .. IS; + let regexFunctionMultiLineBlockKeyWords = new RegExp(/(FUNCTION|IMPURE FUNCTION)[^\w](?=.+[^\w]IS([^\w]|$))/); //match FUNCTION .. IS; but not FUNCTION + let blockMidKeyWords = ["BEGIN"]; + let blockStartsKeyWords = [ + "IF", + "CASE", + "ARCHITECTURE", + "PROCEDURE", + "PACKAGE", + "(([\\w\\s]*:)?(\\s)*PROCESS)", + "(([\\w\\s]*:)?(\\s)*POSTPONED PROCESS)", + "(.*\\s*PROTECTED)", + "(COMPONENT)", + "(ENTITY(?!.+;))", + "FOR", + "WHILE", + "LOOP", + "(.*\\s*GENERATE)", + "(CONTEXT[\\w\\s\\\\]+IS)", + "(CONFIGURATION(?!.+;))", + "BLOCK", + "UNITS", + "\\w+\\s+\\w+\\s+IS\\s+RECORD" + ]; + let blockEndsKeyWords = ["END", ".*\\)\\s*RETURN\\s+[\\w]+;"]; + let indentedEndsKeyWords = [ILIndentedReturnPrefix + "RETURN\\s+\\w+;"]; + let blockEndsWithSemicolon = [ + "(WITH\\s+[\\w\\s\\\\]+SELECT)", + "([\\w\\\\]+[\\s]*<=)", + "([\\w\\\\]+[\\s]*:=)", + "FOR\\s+[\\w\\s,]+:\\s*\\w+\\s+USE", + "REPORT" + ]; + let newLineAfterKeyWordsStr = blockStartsKeyWords.join("|"); + let regexBlockMidKeyWords = blockMidKeyWords.convertToRegexBlockWords(); + let regexBlockStartsKeywords = new RegExp("([\\w]+\\s*:\\s*)?(" + newLineAfterKeyWordsStr + ")([^\\w]|$)"); + let regexBlockEndsKeyWords = blockEndsKeyWords.convertToRegexBlockWords(); + let regexBlockIndentedEndsKeyWords = indentedEndsKeyWords.convertToRegexBlockWords(); + let regexblockEndsWithSemicolon = blockEndsWithSemicolon.convertToRegexBlockWords(); + let regexMidKeyWhen = "WHEN".convertToRegexBlockWords(); + let regexMidKeyElse = "ELSE|ELSIF".convertToRegexBlockWords(); + if (endIndex == null) { + endIndex = inputs.length - 1; + } + for (i = startIndex; i <= endIndex; i++) { + if (indent < 0) { + indent = 0; + } + let input = inputs[i].trim(); + if (input.regexStartsWith(regexBlockIndentedEndsKeyWords)) { + result.push(new FormattedLine(input, indent)); + return i; + } + if (input.regexStartsWith(/COMPONENT\s/)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifyComponentBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/PACKAGE[\s\w]+IS\s+NEW/)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifyPackageIsNewBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/\w+\s*:\s*ENTITY/)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifySemicolonBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (Mode != FormatMode.EndsWithSemicolon && input.regexStartsWith(regexblockEndsWithSemicolon)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifySemicolonBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/(.+:\s*)?(CASE)([\s]|$)/)) { + let modeCache = Mode; + Mode = FormatMode.CaseWhen; + i = beautifyCaseBlock(inputs, result, settings, i, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/.*?\:\=\s*\($/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, ":="); + continue; + } + if (input.regexStartsWith(/[\w\s:]*\bPORT\b([\s]|$)/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "PORT"); + continue; + } + if (input.regexStartsWith(/TYPE\s+\w+\s+IS\s+\(/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "IS"); + continue; + } + if (input.regexStartsWith(/[\w\s:]*GENERIC([\s]|$)/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "GENERIC"); + continue; + } + if (input.regexStartsWith(/[\w\s:]*PROCEDURE[\s\w]+\($/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "PROCEDURE"); + if (inputs[i].regexStartsWith(/.*\)[\s]*IS/)) { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + continue; + } + if (input.regexStartsWith(/FUNCTION[^\w]/) + && input.regexIndexOf(/[^\w]RETURN[^\w]/) < 0) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "FUNCTION"); + if (!inputs[i].regexStartsWith(regexBlockEndsKeyWords)) { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + else { + result[i].Indent++; + } + continue; + } + if (input.regexStartsWith(/IMPURE FUNCTION[^\w]/) + && input.regexIndexOf(/[^\w]RETURN[^\w]/) < 0) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "IMPURE FUNCTION"); + if (!inputs[i].regexStartsWith(regexBlockEndsKeyWords)) { + if (inputs[i].regexStartsWith(regexBlockIndentedEndsKeyWords)) { + result[i].Indent++; + } + else { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + } + else { + result[i].Indent++; + } + continue; + } + result.push(new FormattedLine(input, indent)); + if (startIndex != 0 + && (input.regexStartsWith(regexBlockMidKeyWords) + || (Mode != FormatMode.EndsWithSemicolon && input.regexStartsWith(regexMidKeyElse)) + || (Mode == FormatMode.CaseWhen && input.regexStartsWith(regexMidKeyWhen)))) { + result[i].Indent--; + } + else if (startIndex != 0 + && (input.regexStartsWith(regexBlockEndsKeyWords))) { + result[i].Indent--; + return i; + } + if (input.regexStartsWith(regexOneLineBlockKeyWords)) { + continue; + } + if (input.regexStartsWith(regexFunctionMultiLineBlockKeyWords) + || input.regexStartsWith(regexBlockStartsKeywords)) { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + } + i--; + return i; +} +exports.beautify3 = beautify3; +function ReserveSemicolonInKeywords(arr) { + for (let i = 0; i < arr.length; i++) { + if (arr[i].match(/FUNCTION|PROCEDURE/) != null) { + arr[i] = arr[i].replace(/;/g, ILSemicolon); + } + } +} +function ApplyNoNewLineAfter(arr, noNewLineAfter) { + if (noNewLineAfter == null) { + return; + } + for (let i = 0; i < arr.length; i++) { + noNewLineAfter.forEach(n => { + let regex = new RegExp("(" + n.toUpperCase + ")[ a-z0-9]+[a-z0-9]+"); + if (arr[i].regexIndexOf(regex) >= 0) { + arr[i] += "@@singleline"; + } + }); + } +} +exports.ApplyNoNewLineAfter = ApplyNoNewLineAfter; +function RemoveAsserts(arr) { + let need_semi = false; + let inAssert = false; + let n = 0; + for (let i = 0; i < arr.length; i++) { + let has_semi = arr[i].indexOf(";") >= 0; + if (need_semi) { + arr[i] = ''; + } + n = arr[i].indexOf("ASSERT "); + if (n >= 0) { + inAssert = true; + arr[i] = ''; + } + if (!has_semi) { + if (inAssert) { + need_semi = true; + } + } + else { + need_semi = false; + } + } +} +exports.RemoveAsserts = RemoveAsserts; +function escapeText(arr, regex, escapedChar) { + let quotes = []; + let regexEpr = new RegExp(regex, "g"); + for (let i = 0; i < arr.length; i++) { + let matches = arr[i].match(regexEpr); + if (matches != null) { + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + arr[i] = arr[i].replace(match, escapedChar.repeat(match.length)); + quotes.push(match); + } + } + } + return quotes; +} +function RemoveExtraNewLines(input) { + input = input.replace(/(?:\r\n|\r|\n)/g, '\r\n'); + input = input.replace(/ \r\n/g, '\r\n'); + input = input.replace(/\r\n\r\n\r\n/g, '\r\n'); + return input; +} \ No newline at end of file diff --git a/resources/formatter/vlogFormatter.js b/resources/formatter/vlogFormatter.js new file mode 100644 index 0000000..45ca65e --- /dev/null +++ b/resources/formatter/vlogFormatter.js @@ -0,0 +1,35 @@ + +var Module = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(Module) { + Module = Module || {}; + +var Module=typeof Module!=="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){function runWithFS(){Module["FS_createPath"]("/","share",true,true);var fileData0="";Module["FS_createDataFile"]("/share","FILE_IN.v",decodeBase64(fileData0),true,true,false);var fileData1="";Module["FS_createDataFile"]("/share","FILE_OUT.v",decodeBase64(fileData1),true,true,false)}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[]})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;var WebAssembly={Memory:function(opts){this.buffer=new ArrayBuffer(opts["initial"]*65536)},Module:function(binary){},Instance:function(module,info){this.exports=( +// EMSCRIPTEN_START_ASM +function instantiate(ua){function c(d){d.set=function(a,b){this[a]=b};d.get=function(a){return this[a]};return d}var e;var f=new Uint8Array(123);for(var a=25;a>=0;--a){f[48+a]=52+a;f[65+a]=a;f[97+a]=26+a}f[43]=62;f[47]=63;function l(m,n,o){var g,h,a=0,i=n,j=o.length,k=n+(j*3>>2)-(o[j-2]=="=")-(o[j-1]=="=");for(;a>4;if(i>2;if(i>>0<=2){c=c<<2;A=H[c+8620>>2];z=H[c+8608>>2];while(1){c=H[b+4>>2];b:{if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break b}c=La(b)}if(Yc(c)){continue}break}l=1;c:{d:{switch(c-43|0){case 0:case 2:break d;default:break c}}l=(c|0)==45?-1:1;c=H[b+4>>2];if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break c}c=La(b)}e:{f:{while(1){if(F[f+1055|0]==(c|32)){g:{if(f>>>0>6){break g}c=H[b+4>>2];if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break g}c=La(b)}f=f+1|0;if((f|0)!=8){continue}break f}break}if((f|0)!=3){if((f|0)==8){break f}if(!d|f>>>0<4){break e}if((f|0)==8){break f}}c=H[b+104>>2];if(c){H[b+4>>2]=H[b+4>>2]-1}if(!d|f>>>0<4){break f}while(1){if(c){H[b+4>>2]=H[b+4>>2]-1}f=f-1|0;if(f>>>0>3){continue}break}}b=s;h=oa-16|0;oa=h;g=(C(O(O(l|0)*O(Z))),v(2));c=g&2147483647;h:{if(c-8388608>>>0<=2130706431){d=c;c=c>>>7|0;l=d<<25;d=c+1065353216|0;break h}l=g<<25;d=g>>>7|2147418112;if(c>>>0>=2139095040){break h}l=0;d=0;if(!c){break h}d=c;c=Q(c);xb(h,d,0,0,0,c+81|0);j=H[h>>2];k=H[h+4>>2];l=H[h+8>>2];d=H[h+12>>2]^65536|16265-c<<16}H[b>>2]=j;H[b+4>>2]=k;H[b+8>>2]=l;H[b+12>>2]=g&-2147483648|d;oa=h+16|0;j=H[s+8>>2];k=H[s+12>>2];h=H[s>>2];g=H[s+4>>2];break a}i:{j:{k:{if(f){break k}f=0;while(1){if(F[f+1807|0]!=(c|32)){break k}l:{if(f>>>0>1){break l}c=H[b+4>>2];if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break l}c=La(b)}f=f+1|0;if((f|0)!=3){continue}break}break j}m:{switch(f|0){case 0:n:{if((c|0)!=48){break n}f=H[b+4>>2];o:{if(f>>>0>2]){H[b+4>>2]=f+1;f=I[f|0];break o}f=La(b)}if((f&-33)==88){f=oa-432|0;oa=f;c=b;u=H[b+104>>2];b=H[b+4>>2];p:{if(u>>>0>b>>>0){H[c+4>>2]=b+1;b=I[b|0];break p}b=La(c)}q:{r:{while(1){if((b|0)!=48){s:{if((b|0)!=46){break q}b=H[c+4>>2];if(b>>>0>=K[c+104>>2]){break s}H[c+4>>2]=b+1;b=I[b|0];break r}}else{b=H[c+4>>2];if(b>>>0>2]){B=1;H[c+4>>2]=b+1;b=I[b|0]}else{B=1;b=La(c)}continue}break}b=La(c)}y=1;if((b|0)!=48){break q}while(1){b=j;j=b-1|0;k=k-(b>>>0<1)|0;b=H[c+4>>2];t:{if(b>>>0>2]){H[c+4>>2]=b+1;b=I[b|0];break t}b=La(c)}if((b|0)==48){continue}break}B=1}u=1073676288;u:{while(1){v:{n=b|32;w:{x:{w=b-48|0;if(w>>>0<10){break x}if((b|0)!=46?n-97>>>0>=6:0){break u}if((b|0)!=46){break x}if(y){break v}y=1;j=h;k=g;break w}b=(b|0)>57?n-87|0:w;y:{if((g|0)<0?1:(g|0)<=0?h>>>0<=7:0){i=b+(i<<4)|0;break y}if((g|0)<0?1:(g|0)<=0?h>>>0<=28:0){Qb(f+48|0,b);Ta(f+32|0,p,t,x,u,0,0,0,1073414144);p=H[f+32>>2];t=H[f+36>>2];x=H[f+40>>2];u=H[f+44>>2];Ta(f+16|0,p,t,x,u,H[f+48>>2],H[f+52>>2],H[f+56>>2],H[f+60>>2]);Lb(f,o,e,q,r,H[f+16>>2],H[f+20>>2],H[f+24>>2],H[f+28>>2]);q=H[f+8>>2];r=H[f+12>>2];o=H[f>>2];e=H[f+4>>2];break y}if(!b|m){break y}Ta(f+80|0,p,t,x,u,0,0,0,1073610752);Lb(f- -64|0,o,e,q,r,H[f+80>>2],H[f+84>>2],H[f+88>>2],H[f+92>>2]);q=H[f+72>>2];r=H[f+76>>2];m=1;o=H[f+64>>2];e=H[f+68>>2]}b=h+1|0;g=b>>>0<1?g+1|0:g;h=b;B=1}b=H[c+4>>2];if(b>>>0>2]){H[c+4>>2]=b+1;b=I[b|0]}else{b=La(c)}continue}break}b=46}z:{A:{B:{if(!B){if(!H[c+104>>2]){if(d){break A}break B}b=H[c+4>>2];H[c+4>>2]=b-1;if(!d){break B}H[c+4>>2]=b-2;if(!y){break A}H[c+4>>2]=b-3;break A}if((g|0)<0?1:(g|0)<=0?h>>>0<=7:0){x=h;u=g;while(1){i=i<<4;m=u;u=x+1|0;m=u>>>0<1?m+1|0:m;x=u;u=m;if((x|0)!=8|m){continue}break}}C:{D:{E:{if((b&-33)==80){x=jj(c,d);b=pa;u=b;if(x|(b|0)!=-2147483648){break C}if(d){if(H[c+104>>2]){break E}break D}o=0;e=0;kc(c,0,0);c=0;b=0;break z}if(!H[c+104>>2]){break D}}H[c+4>>2]=H[c+4>>2]-1}x=0;u=0}if(!i){wc(f+112|0,+(l|0)*0);o=H[f+112>>2];e=H[f+116>>2];c=H[f+124>>2];b=H[f+120>>2];break z}b=y?j:h;c=(y?k:g)<<2|b>>>30;b=x+(b<<2)|0;c=c+u|0;c=b>>>0>>0?c+1|0:c;h=b-32|0;g=c-(b>>>0<32)|0;b=g;if((b|0)>0?1:(b|0)>=0?h>>>0>0-A>>>0:0){H[6070]=68;Qb(f+160|0,l);Ta(f+144|0,H[f+160>>2],H[f+164>>2],H[f+168>>2],H[f+172>>2],-1,-1,-1,2147418111);Ta(f+128|0,H[f+144>>2],H[f+148>>2],H[f+152>>2],H[f+156>>2],-1,-1,-1,2147418111);o=H[f+128>>2];e=H[f+132>>2];c=H[f+140>>2];b=H[f+136>>2];break z}b=A-226|0;c=h>>>0>=b>>>0;b=b>>31;if((b|0)<(g|0)?1:(g|0)>=(b|0)?c:0){if((i|0)>-1){while(1){Lb(f+416|0,o,e,q,r,0,0,0,-1073807360);c=gg(o,e,q,r,1073610752);b=(c|0)<0;Lb(f+400|0,o,e,q,r,b?o:H[f+416>>2],b?e:H[f+420>>2],b?q:H[f+424>>2],b?r:H[f+428>>2]);b=h;h=b-1|0;g=g-(b>>>0<1)|0;q=H[f+408>>2];r=H[f+412>>2];o=H[f+400>>2];e=H[f+404>>2];i=i<<1|(c|0)>-1;if((i|0)>-1){continue}break}}b=h;c=A;d=(b-c|0)+32|0;c=g-((c>>31)+(b>>>0>>0)|0)|0;c=d>>>0<32?c+1|0:c;b=d;c=((c|0)<0?1:(c|0)<=0?b>>>0>>0:0)?(b|0)>0?b:0:z;F:{if((c|0)>=113){Qb(f+384|0,l);j=H[f+392>>2];k=H[f+396>>2];p=H[f+384>>2];t=H[f+388>>2];g=0;b=0;break F}wc(f+352|0,ef(144-c|0));Qb(f+336|0,l);p=H[f+336>>2];t=H[f+340>>2];j=H[f+344>>2];k=H[f+348>>2];nj(f+368|0,H[f+352>>2],H[f+356>>2],H[f+360>>2],H[f+364>>2],p,t,j,k);D=H[f+376>>2];E=H[f+380>>2];g=H[f+372>>2];b=H[f+368>>2]}c=!(i&1)&((gd(o,e,q,r,0,0,0,0)|0)!=0&(c|0)<32);Hd(f+320|0,c+i|0);Ta(f+304|0,p,t,j,k,H[f+320>>2],H[f+324>>2],H[f+328>>2],H[f+332>>2]);d=b;Lb(f+272|0,H[f+304>>2],H[f+308>>2],H[f+312>>2],H[f+316>>2],b,g,D,E);b=c;Ta(f+288|0,b?0:o,b?0:e,b?0:q,b?0:r,p,t,j,k);Lb(f+256|0,H[f+288>>2],H[f+292>>2],H[f+296>>2],H[f+300>>2],H[f+272>>2],H[f+276>>2],H[f+280>>2],H[f+284>>2]);fg(f+240|0,H[f+256>>2],H[f+260>>2],H[f+264>>2],H[f+268>>2],d,g,D,E);b=H[f+240>>2];c=H[f+244>>2];d=H[f+248>>2];g=H[f+252>>2];if(!gd(b,c,d,g,0,0,0,0)){H[6070]=68}mj(f+224|0,b,c,d,g,h);o=H[f+224>>2];e=H[f+228>>2];c=H[f+236>>2];b=H[f+232>>2];break z}H[6070]=68;Qb(f+208|0,l);Ta(f+192|0,H[f+208>>2],H[f+212>>2],H[f+216>>2],H[f+220>>2],0,0,0,65536);Ta(f+176|0,H[f+192>>2],H[f+196>>2],H[f+200>>2],H[f+204>>2],0,0,0,65536);o=H[f+176>>2];e=H[f+180>>2];c=H[f+188>>2];b=H[f+184>>2];break z}kc(c,0,0)}wc(f+96|0,+(l|0)*0);o=H[f+96>>2];e=H[f+100>>2];c=H[f+108>>2];b=H[f+104>>2]}H[s+16>>2]=o;H[s+20>>2]=e;H[s+24>>2]=b;H[s+28>>2]=c;oa=f+432|0;j=H[s+24>>2];k=H[s+28>>2];h=H[s+16>>2];g=H[s+20>>2];break a}if(!H[b+104>>2]){break n}H[b+4>>2]=H[b+4>>2]-1}i=b;o=l;l=0;f=0;e=oa-8976|0;oa=e;B=z+A|0;J=0-B|0;G:{H:{while(1){if((c|0)!=48){I:{if((c|0)!=46){break G}b=H[i+4>>2];if(b>>>0>=K[i+104>>2]){break I}H[i+4>>2]=b+1;c=I[b|0];break H}}else{b=H[i+4>>2];if(b>>>0>2]){l=1;H[i+4>>2]=b+1;c=I[b|0]}else{l=1;c=La(i)}continue}break}c=La(i)}n=1;if((c|0)!=48){break G}while(1){b=j;j=b-1|0;k=k-(b>>>0<1)|0;b=H[i+4>>2];J:{if(b>>>0>2]){H[i+4>>2]=b+1;c=I[b|0];break J}c=La(i)}if((c|0)==48){continue}break}l=1}H[e+784>>2]=0;K:{L:{b=(c|0)==46;m=c-48|0;M:{N:{O:{P:{if(m>>>0>9?b:1){while(1){Q:{if(b&1){if(!n){j=h;k=g;n=1;break Q}b=!l;break P}b=h+1|0;g=b>>>0<1?g+1|0:g;h=b;if((f|0)<=2044){y=(c|0)==48?y:h;b=(e+784|0)+(f<<2)|0;l=b;if(w){m=(N(H[b>>2],10)+c|0)-48|0}H[l>>2]=m;l=1;c=w+1|0;b=(c|0)==9;w=b?0:c;f=b+f|0;break Q}if((c|0)==48){break Q}H[e+8960>>2]=H[e+8960>>2]|1;y=18396}b=H[i+4>>2];R:{if(b>>>0>2]){H[i+4>>2]=b+1;c=I[b|0];break R}c=La(i)}b=(c|0)==46;m=c-48|0;if(b|m>>>0<10){continue}break}}j=n?j:h;k=n?k:g;if(!(!l|(c&-33)!=69)){p=jj(i,d);b=pa;t=b;S:{if(p|(b|0)!=-2147483648){break S}if(!d){break M}p=0;t=0;if(!H[i+104>>2]){break S}H[i+4>>2]=H[i+4>>2]-1}if(!l){break N}m=k+t|0;b=j+p|0;m=b>>>0

>>0?m+1|0:m;j=b;k=m;break L}b=!l;if((c|0)<0){break O}}if(!H[i+104>>2]){break O}H[i+4>>2]=H[i+4>>2]-1}if(!b){break L}}H[6070]=28}h=0;g=0;kc(i,0,0);c=0;b=0;break K}b=H[e+784>>2];if(!b){wc(e,+(o|0)*0);h=H[e>>2];g=H[e+4>>2];c=H[e+12>>2];b=H[e+8>>2];break K}if(!((h|0)!=(j|0)|(g|0)!=(k|0)|((g|0)>0?1:(g|0)>=0?h>>>0>9:0)|(b>>>z|0?(z|0)<=30:0))){Qb(e+48|0,o);Hd(e+32|0,b);Ta(e+16|0,H[e+48>>2],H[e+52>>2],H[e+56>>2],H[e+60>>2],H[e+32>>2],H[e+36>>2],H[e+40>>2],H[e+44>>2]);h=H[e+16>>2];g=H[e+20>>2];c=H[e+28>>2];b=H[e+24>>2];break K}if((k|0)>0?1:(k|0)>=0?j>>>0>(A|0)/-2>>>0:0){H[6070]=68;Qb(e+96|0,o);Ta(e+80|0,H[e+96>>2],H[e+100>>2],H[e+104>>2],H[e+108>>2],-1,-1,-1,2147418111);Ta(e- -64|0,H[e+80>>2],H[e+84>>2],H[e+88>>2],H[e+92>>2],-1,-1,-1,2147418111);h=H[e+64>>2];g=H[e+68>>2];c=H[e+76>>2];b=H[e+72>>2];break K}b=A-226|0;c=j>>>0>>0;b=b>>31;if((b|0)>(k|0)?1:(k|0)<=(b|0)?c:0){H[6070]=68;Qb(e+144|0,o);Ta(e+128|0,H[e+144>>2],H[e+148>>2],H[e+152>>2],H[e+156>>2],0,0,0,65536);Ta(e+112|0,H[e+128>>2],H[e+132>>2],H[e+136>>2],H[e+140>>2],0,0,0,65536);h=H[e+112>>2];g=H[e+116>>2];c=H[e+124>>2];b=H[e+120>>2];break K}if(w){if((w|0)<=8){b=(e+784|0)+(f<<2)|0;i=H[b>>2];while(1){i=N(i,10);w=w+1|0;if((w|0)!=9){continue}break}H[b>>2]=i}f=f+1|0}T:{n=j;if((y|0)>(j|0)|(y|0)>=9|(j|0)>17){break T}if((n|0)==9){Qb(e+192|0,o);Hd(e+176|0,H[e+784>>2]);Ta(e+160|0,H[e+192>>2],H[e+196>>2],H[e+200>>2],H[e+204>>2],H[e+176>>2],H[e+180>>2],H[e+184>>2],H[e+188>>2]);h=H[e+160>>2];g=H[e+164>>2];c=H[e+172>>2];b=H[e+168>>2];break K}if((n|0)<=8){Qb(e+272|0,o);Hd(e+256|0,H[e+784>>2]);Ta(e+240|0,H[e+272>>2],H[e+276>>2],H[e+280>>2],H[e+284>>2],H[e+256>>2],H[e+260>>2],H[e+264>>2],H[e+268>>2]);Qb(e+224|0,H[(0-n<<2)+8608>>2]);lj(e+208|0,H[e+240>>2],H[e+244>>2],H[e+248>>2],H[e+252>>2],H[e+224>>2],H[e+228>>2],H[e+232>>2],H[e+236>>2]);h=H[e+208>>2];g=H[e+212>>2];c=H[e+220>>2];b=H[e+216>>2];break K}b=(N(n,-3)+z|0)+27|0;c=H[e+784>>2];if(c>>>b|0?(b|0)<=30:0){break T}Qb(e+352|0,o);Hd(e+336|0,c);Ta(e+320|0,H[e+352>>2],H[e+356>>2],H[e+360>>2],H[e+364>>2],H[e+336>>2],H[e+340>>2],H[e+344>>2],H[e+348>>2]);Qb(e+304|0,H[(n<<2)+8536>>2]);Ta(e+288|0,H[e+320>>2],H[e+324>>2],H[e+328>>2],H[e+332>>2],H[e+304>>2],H[e+308>>2],H[e+312>>2],H[e+316>>2]);h=H[e+288>>2];g=H[e+292>>2];c=H[e+300>>2];b=H[e+296>>2];break K}while(1){c=f;f=f-1|0;if(!H[(e+784|0)+(f<<2)>>2]){continue}break}w=0;b=(n|0)%9|0;U:{if(!b){b=0;break U}d=(n|0)>-1?b:b+9|0;V:{if(!c){b=0;c=0;break V}g=H[(0-d<<2)+8608>>2];h=1e9/(g|0)|0;m=0;i=0;b=0;while(1){j=m;k=(e+784|0)+(i<<2)|0;m=H[k>>2];l=(m>>>0)/(g>>>0)|0;j=j+l|0;H[k>>2]=j;j=!j&(b|0)==(i|0);b=j?b+1&2047:b;n=j?n-9|0:n;m=N(h,m-N(g,l)|0);i=i+1|0;if((i|0)!=(c|0)){continue}break}if(!m){break V}H[(e+784|0)+(c<<2)>>2]=m;c=c+1|0}n=(n-d|0)+9|0}while(1){h=(e+784|0)+(b<<2)|0;W:{while(1){if((n|0)!=36|K[h>>2]>=10384593?(n|0)>=36:0){break W}l=c+2047|0;m=0;while(1){k=m;g=l&2047;l=(e+784|0)+(g<<2)|0;d=H[l>>2];m=d>>>3|0;j=d<<29;d=k+j|0;m=d>>>0>>0?m+1|0:m;j=d;k=m;if(!k&j>>>0<1000000001){m=0}else{m=Fq(j,k,1e9);j=j-Eq(m,pa,1e9,0)|0}H[l>>2]=j;c=(g|0)!=(c-1&2047)?c:(b|0)==(g|0)?c:j?c:g;l=g-1|0;if((b|0)!=(g|0)){continue}break}w=w-29|0;if(!m){continue}break}b=b-1&2047;if((c|0)==(b|0)){d=(e+784|0)+((c+2046&2047)<<2)|0;c=c-1&2047;H[d>>2]=H[d>>2]|H[(e+784|0)+(c<<2)>>2]}n=n+9|0;H[(e+784|0)+(b<<2)>>2]=m;continue}break}X:{Y:while(1){d=c+1&2047;j=(e+784|0)+((c-1&2047)<<2)|0;while(1){g=(n|0)>45?9:1;Z:{while(1){l=b;i=0;_:{while(1){$:{b=i+l&2047;if((b|0)==(c|0)){break $}b=H[(e+784|0)+(b<<2)>>2];h=H[(i<<2)+8560>>2];if(b>>>0>>0){break $}if(b>>>0>h>>>0){break _}i=i+1|0;if((i|0)!=4){continue}}break}if((n|0)!=36){break _}j=0;k=0;i=0;h=0;g=0;while(1){b=i+l&2047;if((b|0)==(c|0)){c=c+1&2047;H[(e+(c<<2)|0)+780>>2]=0}Ta(e+768|0,j,k,h,g,0,0,1342177280,1075633366);Hd(e+752|0,H[(e+784|0)+(b<<2)>>2]);Lb(e+736|0,H[e+768>>2],H[e+772>>2],H[e+776>>2],H[e+780>>2],H[e+752>>2],H[e+756>>2],H[e+760>>2],H[e+764>>2]);h=H[e+744>>2];g=H[e+748>>2];j=H[e+736>>2];k=H[e+740>>2];i=i+1|0;if((i|0)!=4){continue}break}Qb(e+720|0,o);Ta(e+704|0,j,k,h,g,H[e+720>>2],H[e+724>>2],H[e+728>>2],H[e+732>>2]);h=H[e+712>>2];g=H[e+716>>2];j=0;k=0;p=H[e+704>>2];t=H[e+708>>2];n=w+113|0;d=n-A|0;m=(d|0)<(z|0);b=m?(d|0)>0?d:0:z;if((b|0)<=112){break Z}break X}w=g+w|0;b=c;if((l|0)==(b|0)){continue}break}k=1e9>>>g|0;m=-1<>2];h=h+(i>>>g|0)|0;H[f>>2]=h;h=!h&(b|0)==(l|0);b=h?b+1&2047:b;n=h?n-9|0:n;i=N(k,i&m);l=l+1&2047;if((l|0)!=(c|0)){continue}break}if(!i){continue}if((b|0)!=(d|0)){H[(e+784|0)+(c<<2)>>2]=i;c=d;continue Y}H[j>>2]=H[j>>2]|1;b=d;continue}break}break}wc(e+656|0,ef(225-b|0));nj(e+688|0,H[e+656>>2],H[e+660>>2],H[e+664>>2],H[e+668>>2],p,t,h,g);x=H[e+696>>2];u=H[e+700>>2];D=H[e+688>>2];E=H[e+692>>2];wc(e+640|0,ef(113-b|0));Cg(e+672|0,p,t,h,g,H[e+640>>2],H[e+644>>2],H[e+648>>2],H[e+652>>2]);j=H[e+672>>2];k=H[e+676>>2];q=H[e+680>>2];r=H[e+684>>2];fg(e+624|0,p,t,h,g,j,k,q,r);Lb(e+608|0,D,E,x,u,H[e+624>>2],H[e+628>>2],H[e+632>>2],H[e+636>>2]);h=H[e+616>>2];g=H[e+620>>2];p=H[e+608>>2];t=H[e+612>>2]}f=l+4&2047;aa:{if((f|0)==(c|0)){break aa}f=H[(e+784|0)+(f<<2)>>2];ba:{if(f>>>0<=499999999){if(!((l+5&2047)==(c|0)?f:1)){break ba}wc(e+496|0,+(o|0)*.25);Lb(e+480|0,j,k,q,r,H[e+496>>2],H[e+500>>2],H[e+504>>2],H[e+508>>2]);q=H[e+488>>2];r=H[e+492>>2];j=H[e+480>>2];k=H[e+484>>2];break ba}if((f|0)!=5e8){wc(e+592|0,+(o|0)*.75);Lb(e+576|0,j,k,q,r,H[e+592>>2],H[e+596>>2],H[e+600>>2],H[e+604>>2]);q=H[e+584>>2];r=H[e+588>>2];j=H[e+576>>2];k=H[e+580>>2];break ba}G=+(o|0);if((l+5&2047)==(c|0)){wc(e+528|0,G*.5);Lb(e+512|0,j,k,q,r,H[e+528>>2],H[e+532>>2],H[e+536>>2],H[e+540>>2]);q=H[e+520>>2];r=H[e+524>>2];j=H[e+512>>2];k=H[e+516>>2];break ba}wc(e+560|0,G*.75);Lb(e+544|0,j,k,q,r,H[e+560>>2],H[e+564>>2],H[e+568>>2],H[e+572>>2]);q=H[e+552>>2];r=H[e+556>>2];j=H[e+544>>2];k=H[e+548>>2]}if((b|0)>111){break aa}Cg(e+464|0,j,k,q,r,0,0,0,1073676288);if(gd(H[e+464>>2],H[e+468>>2],H[e+472>>2],H[e+476>>2],0,0,0,0)){break aa}Lb(e+448|0,j,k,q,r,0,0,0,1073676288);q=H[e+456>>2];r=H[e+460>>2];j=H[e+448>>2];k=H[e+452>>2]}Lb(e+432|0,p,t,h,g,j,k,q,r);fg(e+416|0,H[e+432>>2],H[e+436>>2],H[e+440>>2],H[e+444>>2],D,E,x,u);h=H[e+424>>2];g=H[e+428>>2];p=H[e+416>>2];t=H[e+420>>2];ca:{if((-2-B|0)>=(n&2147483647)){break ca}H[e+408>>2]=h;H[e+412>>2]=g&2147483647;H[e+400>>2]=p;H[e+404>>2]=t;Ta(e+384|0,p,t,h,g,0,0,0,1073610752);u=H[e+400>>2];x=H[e+404>>2];f=H[e+408>>2];n=H[e+412>>2];c=gg(u,x,f,n,1081081856);l=(c|0)<0;i=l;h=i?h:H[e+392>>2];g=i?g:H[e+396>>2];p=i?p:H[e+384>>2];t=i?t:H[e+388>>2];w=((c|0)>-1)+w|0;if((w+110|0)<=(J|0)){if((((gg(u,x,f,n,1081081856)|0)<0?m:m&(b|0)!=(d|0))|0)!=1){break ca}if(!gd(j,k,q,r,0,0,0,0)){break ca}}H[6070]=68}mj(e+368|0,p,t,h,g,w);h=H[e+368>>2];g=H[e+372>>2];c=H[e+380>>2];b=H[e+376>>2]}H[s+32>>2]=h;H[s+36>>2]=g;H[s+40>>2]=b;H[s+44>>2]=c;oa=e+8976|0;j=H[s+40>>2];k=H[s+44>>2];h=H[s+32>>2];g=H[s+36>>2];break a;case 3:break j;default:break m}}if(H[b+104>>2]){H[b+4>>2]=H[b+4>>2]-1}break i}da:{c=H[b+4>>2];ea:{if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break ea}c=La(b)}if((c|0)==40){f=1;break da}k=2147450880;if(!H[b+104>>2]){break a}H[b+4>>2]=H[b+4>>2]-1;break a}while(1){c=H[b+4>>2];fa:{if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break fa}c=La(b)}if(c-97>>>0>=26?c-48>>>0<10|c-65>>>0<26|(c|0)==95:1){f=f+1|0;continue}break}k=2147450880;if((c|0)==41){break a}c=H[b+104>>2];if(c){H[b+4>>2]=H[b+4>>2]-1}if(d){if(!f){break a}while(1){f=f-1|0;if(c){H[b+4>>2]=H[b+4>>2]-1}if(f){continue}break}break a}}H[6070]=28;kc(b,0,0)}k=0}H[a>>2]=h;H[a+4>>2]=g;H[a+8>>2]=j;H[a+12>>2]=k;oa=s+48|0}function co(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c=oa-752|0;oa=c;f=c+496|0;e=f;H[e>>2]=7640;Ea(e+48|0);b=oa-16|0;oa=b;if(!I[21784]){F[21784]=1;H[b+12>>2]=21924;ya(21788,b+12|0);H[b+12>>2]=21936;ya(21788,b+12|0);H[b+12>>2]=21948;ya(21788,b+12|0);H[b+12>>2]=21972;ya(21788,b+12|0);H[b+12>>2]=22644;ya(21788,b+12|0);H[b+12>>2]=22656;ya(21788,b+12|0);H[b+12>>2]=22668;ya(21788,b+12|0);H[b+12>>2]=22680;ya(21788,b+12|0);H[b+12>>2]=21960;ya(21788,b+12|0);H[b+12>>2]=22692;ya(21788,b+12|0);H[b+12>>2]=22704;ya(21788,b+12|0);H[b+12>>2]=22716;ya(21788,b+12|0);H[b+12>>2]=21936;ya(21800,b+12|0);H[b+12>>2]=22644;ya(21800,b+12|0);H[b+12>>2]=22656;ya(21800,b+12|0);H[b+12>>2]=22668;ya(21800,b+12|0);H[b+12>>2]=22680;ya(21800,b+12|0);H[b+12>>2]=22692;ya(21800,b+12|0);H[b+12>>2]=22704;ya(21800,b+12|0);H[b+12>>2]=22716;ya(21800,b+12|0);H[b+12>>2]=22728;ya(21812,b+12|0);H[b+12>>2]=22740;ya(21812,b+12|0);H[b+12>>2]=22752;ya(21812,b+12|0);H[b+12>>2]=22764;ya(21812,b+12|0);H[b+12>>2]=22776;ya(21812,b+12|0);H[b+12>>2]=22788;ya(21812,b+12|0);H[b+12>>2]=22800;ya(21812,b+12|0);H[b+12>>2]=22812;ya(21812,b+12|0);H[b+12>>2]=22824;ya(21812,b+12|0);H[b+12>>2]=22836;ya(21812,b+12|0);H[b+12>>2]=22848;ya(21812,b+12|0);H[b+12>>2]=22860;ya(21812,b+12|0);H[b+12>>2]=22872;ya(21812,b+12|0);H[b+12>>2]=22884;ya(21812,b+12|0);H[b+12>>2]=22896;ya(21812,b+12|0);H[b+12>>2]=22908;ya(21812,b+12|0);H[b+12>>2]=22920;ya(21812,b+12|0);H[b+12>>2]=22932;ya(21812,b+12|0);H[b+12>>2]=22944;ya(21812,b+12|0);H[b+12>>2]=22956;ya(21812,b+12|0);H[b+12>>2]=22968;ya(21812,b+12|0);H[b+12>>2]=22980;ya(21812,b+12|0);H[b+12>>2]=22992;ya(21824,b+12|0);H[b+12>>2]=23004;ya(21824,b+12|0);H[b+12>>2]=23016;ya(21824,b+12|0);H[b+12>>2]=23028;ya(21824,b+12|0);H[b+12>>2]=23040;ya(21824,b+12|0);H[b+12>>2]=23052;ya(21824,b+12|0);H[b+12>>2]=23064;ya(21824,b+12|0);H[b+12>>2]=23076;ya(21824,b+12|0);H[b+12>>2]=23088;ya(21824,b+12|0);H[b+12>>2]=23100;ya(21824,b+12|0);H[b+12>>2]=23112;ya(21824,b+12|0);H[b+12>>2]=23124;ya(21824,b+12|0);H[b+12>>2]=23136;ya(21824,b+12|0);H[b+12>>2]=23148;ya(21824,b+12|0);H[b+12>>2]=23160;ya(21824,b+12|0);H[b+12>>2]=23172;ya(21824,b+12|0);H[b+12>>2]=23184;ya(21824,b+12|0);H[b+12>>2]=23196;ya(21824,b+12|0);H[b+12>>2]=23208;ya(21824,b+12|0);H[b+12>>2]=23220;ya(21824,b+12|0);H[b+12>>2]=22008;ya(21836,b+12|0);H[b+12>>2]=22020;ya(21836,b+12|0);H[b+12>>2]=22032;ya(21836,b+12|0);H[b+12>>2]=22044;ya(21836,b+12|0);H[b+12>>2]=22056;ya(21836,b+12|0);H[b+12>>2]=22068;ya(21836,b+12|0);H[b+12>>2]=22080;ya(21836,b+12|0);H[b+12>>2]=22092;ya(21836,b+12|0);H[b+12>>2]=22104;ya(21836,b+12|0);H[b+12>>2]=22116;ya(21836,b+12|0);H[b+12>>2]=22128;ya(21836,b+12|0);H[b+12>>2]=22140;ya(21836,b+12|0);H[b+12>>2]=22152;ya(21836,b+12|0)}oa=b+16|0;G[e+88>>1]=0;Vb(e+4|0,0,44);Nd(e,4);kk(e,40);xg(e,0);he(e,0);F[e+85|0]=0;jk(e,0);ik(e,0);H[f>>2]=7756;Ea(f+148|0);Ea(f+160|0);Ea(f+172|0);b=oa-16|0;oa=b;if(!I[21848]){F[21848]=1;H[b+12>>2]=21924;ya(21852,b+12|0);H[b+12>>2]=21936;ya(21852,b+12|0);H[b+12>>2]=21972;ya(21852,b+12|0);H[b+12>>2]=21948;ya(21852,b+12|0);H[b+12>>2]=22728;ya(21852,b+12|0);H[b+12>>2]=22752;ya(21852,b+12|0);H[b+12>>2]=22740;ya(21852,b+12|0);H[b+12>>2]=22644;ya(21852,b+12|0);H[b+12>>2]=22656;ya(21852,b+12|0);H[b+12>>2]=22992;ya(21852,b+12|0);H[b+12>>2]=23040;ya(21852,b+12|0);H[b+12>>2]=23076;ya(21852,b+12|0);H[b+12>>2]=23004;ya(21852,b+12|0);H[b+12>>2]=23016;ya(21852,b+12|0);H[b+12>>2]=22644;ya(21864,b+12|0);H[b+12>>2]=21936;ya(21864,b+12|0);H[b+12>>2]=22656;ya(21864,b+12|0);H[b+12>>2]=22992;ya(21864,b+12|0);H[b+12>>2]=23040;ya(21864,b+12|0);H[b+12>>2]=23076;ya(21864,b+12|0);H[b+12>>2]=23004;ya(21864,b+12|0);H[b+12>>2]=23016;ya(21864,b+12|0);H[b+12>>2]=22008;ya(21876,b+12|0);H[b+12>>2]=22020;ya(21876,b+12|0);H[b+12>>2]=22032;ya(21876,b+12|0);H[b+12>>2]=21936;ya(21876,b+12|0);H[b+12>>2]=22056;ya(21876,b+12|0);H[b+12>>2]=22068;ya(21876,b+12|0);H[b+12>>2]=22080;ya(21876,b+12|0);H[b+12>>2]=22092;ya(21876,b+12|0);H[b+12>>2]=22104;ya(21876,b+12|0);H[b+12>>2]=22116;ya(21876,b+12|0);H[b+12>>2]=22128;ya(21876,b+12|0);H[b+12>>2]=22140;ya(21876,b+12|0);H[b+12>>2]=22152;ya(21876,b+12|0);H[b+12>>2]=22272;ya(21888,b+12|0);H[b+12>>2]=22284;ya(21888,b+12|0);H[b+12>>2]=22296;ya(21888,b+12|0);H[b+12>>2]=22308;ya(21888,b+12|0);H[b+12>>2]=22320;ya(21888,b+12|0);H[b+12>>2]=22332;ya(21888,b+12|0);H[b+12>>2]=22248;ya(21888,b+12|0);H[b+12>>2]=22260;ya(21888,b+12|0);H[b+12>>2]=22344;ya(21888,b+12|0);H[b+12>>2]=22356;ya(21888,b+12|0);H[b+12>>2]=22368;ya(21888,b+12|0);H[b+12>>2]=22380;ya(21888,b+12|0);H[b+12>>2]=22392;ya(21888,b+12|0);H[b+12>>2]=22404;ya(21888,b+12|0);H[b+12>>2]=22500;ya(21888,b+12|0);H[b+12>>2]=22440;ya(21888,b+12|0);H[b+12>>2]=22452;ya(21888,b+12|0);H[b+12>>2]=22464;ya(21888,b+12|0);H[b+12>>2]=22476;ya(21888,b+12|0);H[b+12>>2]=22488;ya(21888,b+12|0);H[b+12>>2]=22596;ya(21888,b+12|0);H[b+12>>2]=22608;ya(21888,b+12|0);H[b+12>>2]=22224;ya(21888,b+12|0);H[b+12>>2]=22524;ya(21888,b+12|0);H[b+12>>2]=22512;ya(21888,b+12|0);H[b+12>>2]=22536;ya(21888,b+12|0);H[b+12>>2]=22548;ya(21888,b+12|0);H[b+12>>2]=22560;ya(21888,b+12|0);H[b+12>>2]=22572;ya(21888,b+12|0);H[b+12>>2]=22584;ya(21888,b+12|0);H[b+12>>2]=22620;ya(21888,b+12|0);H[b+12>>2]=22788;ya(21900,b+12|0);H[b+12>>2]=22800;ya(21900,b+12|0);H[b+12>>2]=22824;ya(21900,b+12|0);H[b+12>>2]=22860;ya(21900,b+12|0);H[b+12>>2]=23028;ya(21912,b+12|0);H[b+12>>2]=23052;ya(21912,b+12|0);H[b+12>>2]=23064;ya(21912,b+12|0);H[b+12>>2]=23100;ya(21912,b+12|0)}oa=b+16|0;H[f+144>>2]=0;H[f+136>>2]=0;H[f+140>>2]=0;H[f+204>>2]=0;F[f+227|0]=1;F[f+225|0]=1;G[f+234>>1]=0;F[f+209|0]=0;F[f+210|0]=0;F[f+211|0]=0;F[f+212|0]=0;F[f+229|0]=0;m=Sa(c+480|0);l=Sa(c+464|0);j=xa(c+448|0,7628);g=Ea(c+432|0);H[5266]=27752;Ga(21760,2023);a:{if((wa(a)|0)!=-1){n=1;while(1){b:{c:{d:{e:{if(I[Aa(a,h)|0]!=32){if((wa(a)|0)!=(h|0)){break e}}b=d;d=0;if(!b){break b}f:{if(wa(g)>>>0<14){break f}b=xa(c+192|0,2294);e=Ra(g,0,14,b);va(b);if(e){break f}n=0;break c}g:{if(wa(g)>>>0<10){break g}b=xa(c+192|0,2719);e=Ra(g,0,10,b);va(b);if(e){break g}Eb(c+192|0,g,10);Ua(j,c+192|0);va(c+192|0);break c}if(Ma(g,1991)){break d}if(Ma(g,1660)){break d}if(Ma(g,2657)){break d}if(I[Aa(g,0)|0]==45){og(l,g);break c}og(m,g);break c}q=F[Aa(a,h)|0];o=oa-16|0;oa=o;d=oa-16|0;oa=d;e=c+192|0;ng(e);oa=d+16|0;i=wa(g);r=Ca(g);k=oa-16|0;oa=k;b=e;h:{d=i+1|0;if(d>>>0<=4294967279){i:{if(d>>>0<=10){ub(b,i);d=b;break i}p=cd(d)+1|0;d=Na(p);_b(b,d);Zb(b,p);yb(b,i)}Yb(d,r,i);F[k+15|0]=0;nb(d+i|0,k+15|0);oa=k+16|0;break h}Xb();X()}Od(e,q);oa=o+16|0;Ua(g,c+192|0);va(c+192|0);d=1;break b}s=1}Ga(g,7628)}h=h+1|0;if(h>>>0>>0){continue}break}if(!n){break a}}j:{if(of(j)){break j}a=jd(2575);if(!a){break j}a=xa(c+192|0,a);Ua(j,a);va(a)}k:{if(of(j)){break k}a=jd(2648);if(!a){break k}a=xa(c+8|0,a);d=xa(c+416|0,2473);Ue(c+192|0,a,d);Ua(j,c+192|0);va(c+192|0);va(d);va(a)}l:{if(of(j)){break l}a=jd(2620);if(!a){break l}d=xa(c+416|0,jd(2638));a=xa(c+400|0,a);Ue(c+8|0,d,a);b=xa(c+384|0,2473);Ue(c+192|0,c+8|0,b);Ua(j,c+192|0);va(c+192|0);va(b);va(c+8|0);va(a);va(d)}if($b(j)){break a}d=Bj(c+192|0,Ca(j));m:{if(Ui(H[H[d>>2]-12>>2]+(c+192|0)|0)){i=Sa(c+8|0);k=i;b=oa-16|0;oa=b;e=Ea(b);a=d;if((te(a)|0)!=-1){while(1){Ga(e,7628);while(1){n:{Ej(a,b+15|0);o:{p:{q:{r:{h=I[b+15|0];switch(h-32|0){case 0:break n;case 3:break p;case 1:case 2:break q;default:break r}}if((h|0)==13|h-9>>>0<2){break n}}mc(e,1,h<<24>>24);break o}while(1){if((te(a)|0)==-1){break o}Ej(a,b+15|0);if(I[b+15|0]!=10){continue}break}}if((te(a)|0)!=-1){continue}}break}if(wa(e)){og(k,e)}if((te(a)|0)!=-1){continue}break}}va(e);oa=b+16|0;H[c+400>>2]=Ed(i);H[c+384>>2]=Xc(i);a=xa(c+416|0,3200);b=Ii(f,c+400|0,c+384|0,a);va(a);Zf(i);mg(d);if(b){break m}Cj();_(1);X()}mg(d)}ae(d)}H[c+8>>2]=Ed(l);H[c+416>>2]=Xc(l);a=xa(c+192|0,3170);d=Ii(f,c+8|0,c+416|0,a);va(a);s:{t:{u:{if(d){if(s){break u}i=Bj(c+192|0,1235);if(je(H[H[i>>2]-12>>2]+(c+192|0)|0)){break t}a=c+8|0;d=Xe(a+104|0);H[a>>2]=19952;H[d>>2]=19972;b=H[4996];H[a>>2]=b;H[a+H[b-12>>2]>>2]=H[4997];b=a+4|0;pd(a+H[H[a>>2]-12>>2]|0,b);H[a>>2]=19952;H[d>>2]=19972;if(!bh(ah(b),1217,16)){ac(a+H[H[a>>2]-12>>2]|0,4)}if(je(H[H[a>>2]-12>>2]+(c+8|0)|0)){break s}b=a;e=oa-16|0;oa=e;h=Na(12);H[h+8>>2]=0;H[h+4>>2]=i;H[h>>2]=7832;d=f;qa[H[H[d>>2]+8>>2]](d,h);if(qa[H[H[d>>2]+16>>2]](d)|0){while(1){qa[H[H[d>>2]+20>>2]](e,d);Tb(b,e);va(e);if(qa[H[H[d>>2]+16>>2]](d)|0){Ha(b)}if(qa[H[H[d>>2]+16>>2]](d)|0){continue}break}}oa=e+16|0;sd(a);if(!xf(a+4|0)){ac(b+H[H[b>>2]-12>>2]|0,4)}mg(i);_e(a);ae(i);va(g);va(j);Zf(l);Zf(m);qg(f);oa=c+752|0;return 0}Cj();_(1);X()}Dj();za(27584,4927);za(27584,5029);za(27584,7575);Ha(27584);za(27584,7501);za(27584,7075);za(27584,6110);Ha(27584);za(27584,5142);za(27584,6999);za(27584,6294);za(27584,6005);za(27584,6483);Ha(27584);za(27584,5219);za(27584,6988);za(27584,4457);za(27584,6218);Ha(27584);za(27584,3975);za(27584,6130);Ha(27584);za(27584,3287);za(27584,6181);Ha(27584);za(27584,5176);za(27584,6995);za(27584,7231);za(27584,7372);za(27584,5451);Ha(27584);za(27584,7312);za(27584,4506);za(27584,3494);za(27584,6433);Ha(27584);za(27584,7275);za(27584,4506);za(27584,3890);za(27584,5863);Ha(27584);za(27584,3633);za(27584,5536);Ha(27584);za(27584,3666);za(27584,6587);Ha(27584);za(27584,7190);za(27584,4345);za(27584,6070);Ha(27584);za(27584,7149);za(27584,7017);za(27584,6256);Ha(27584);za(27584,3775);za(27584,3991);za(27584,5751);Ha(27584);za(27584,3948);za(27584,3591);Ha(27584);za(27584,5198);za(27584,6996);za(27584,4427);za(27584,6712);Ha(27584);za(27584,4475);za(27584,6650);Ha(27584);za(27584,3550);za(27584,4126);za(27584,5713);Ha(27584);za(27584,3697);za(27584,4667);Ha(27584);za(27584,4043);za(27584,5348);Ha(27584);za(27584,4210);za(27584,5398);za(27584,4404);za(27584,5927);Ha(27584);za(27584,4321);za(27584,5772);Ha(27584);za(27584,3870);za(27584,5834);Ha(27584);za(27584,3734);za(27584,6526);Ha(27584);za(27584,4297);za(27584,7443);za(27584,6777);Ha(27584);za(27584,3754);za(27584,5653);Ha(27584);za(27584,5160);za(27584,7002);za(27584,7353);za(27584,6364);Ha(27584);Ha(za(27584,2267));Ha(za(27584,2840));Ha(za(27584,2907));Ha(27584);za(27584,3304);za(27584,4227);za(27584,5903);Ha(27584);za(27584,4185);za(27584,4068);Ha(27584);za(27584,4094);za(27584,5e3);Ha(27584);za(27584,4559);za(27584,4598);za(27584,3807);Ha(27584);za(27584,5317);za(27584,6994);za(27584,5248);za(27584,3439);za(27584,5505);za(27584,4858);za(27584,6894);za(27584,4789);za(27584,6825);za(27584,4723);za(27584,5600);za(27584,3346);za(27584,6954);Ha(27584);_(1);X()}cg(3137,1235);X()}cg(2360,1217);X()}function cb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=oa-16|0;oa=m;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(a>>>0<=244){f=H[7133];i=a>>>0<11?16:a+11&-8;c=i>>>3|0;b=f>>>c|0;if(b&3){d=c+((b^-1)&1)|0;b=d<<3;e=H[b+28580>>2];a=e+8|0;c=H[e+8>>2];b=b+28572|0;m:{if((c|0)==(b|0)){H[7133]=Gq(-2,d)&f;break m}H[c+12>>2]=b;H[b+8>>2]=c}b=d<<3;H[e+4>>2]=b|3;b=b+e|0;H[b+4>>2]=H[b+4>>2]|1;break a}k=H[7135];if(k>>>0>=i>>>0){break l}if(b){a=2<>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;c=(c|a)+(b>>>a|0)|0;a=c<<3;g=H[a+28580>>2];b=H[g+8>>2];a=a+28572|0;n:{if((b|0)==(a|0)){f=Gq(-2,c)&f;H[7133]=f;break n}H[b+12>>2]=a;H[a+8>>2]=b}a=g+8|0;H[g+4>>2]=i|3;d=g+i|0;b=c<<3;e=b-i|0;H[d+4>>2]=e|1;H[b+g>>2]=e;if(k){b=k>>>3|0;c=(b<<3)+28572|0;g=H[7138];b=1<>2]}H[c+8>>2]=g;H[b+12>>2]=g;H[g+12>>2]=c;H[g+8>>2]=b}H[7138]=d;H[7135]=e;break a}h=H[7134];if(!h){break l}b=(h&0-h)-1|0;a=b>>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;b=H[((c|a)+(b>>>a|0)<<2)+28836>>2];d=(H[b+4>>2]&-8)-i|0;c=b;while(1){p:{a=H[c+16>>2];if(!a){a=H[c+20>>2];if(!a){break p}}c=(H[a+4>>2]&-8)-i|0;e=c>>>0>>0;d=e?c:d;b=e?a:b;c=a;continue}break}j=b+i|0;if(j>>>0<=b>>>0){break k}l=H[b+24>>2];e=H[b+12>>2];if((e|0)!=(b|0)){a=H[b+8>>2];H[a+12>>2]=e;H[e+8>>2]=a;break b}c=b+20|0;a=H[c>>2];if(!a){a=H[b+16>>2];if(!a){break j}c=b+16|0}while(1){g=c;e=a;c=a+20|0;a=H[c>>2];if(a){continue}c=e+16|0;a=H[e+16>>2];if(a){continue}break}H[g>>2]=0;break b}i=-1;if(a>>>0>4294967231){break l}a=a+11|0;i=a&-8;j=H[7134];if(!j){break l}d=0-i|0;f=0;q:{if(i>>>0<256){break q}f=31;if(i>>>0>16777215){break q}a=a>>>8|0;g=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(c|g))|0;f=(a<<1|i>>>a+21&1)+28|0}c=H[(f<<2)+28836>>2];r:{s:{t:{if(!c){a=0;break t}a=0;b=i<<((f|0)==31?0:25-(f>>>1|0)|0);while(1){u:{g=(H[c+4>>2]&-8)-i|0;if(g>>>0>=d>>>0){break u}e=c;d=g;if(d){break u}d=0;a=c;break s}g=H[c+20>>2];c=H[((b>>>29&4)+c|0)+16>>2];a=g?(g|0)==(c|0)?a:g:a;b=b<<1;if(c){continue}break}}if(!(a|e)){e=0;a=2<>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;a=H[((c|a)+(b>>>a|0)<<2)+28836>>2]}if(!a){break r}}while(1){b=(H[a+4>>2]&-8)-i|0;c=b>>>0>>0;d=c?b:d;e=c?a:e;b=H[a+16>>2];if(b){a=b}else{a=H[a+20>>2]}if(a){continue}break}}if(!e|H[7135]-i>>>0<=d>>>0){break l}h=e+i|0;if(h>>>0<=e>>>0){break k}f=H[e+24>>2];b=H[e+12>>2];if((e|0)!=(b|0)){a=H[e+8>>2];H[a+12>>2]=b;H[b+8>>2]=a;break c}c=e+20|0;a=H[c>>2];if(!a){a=H[e+16>>2];if(!a){break i}c=e+16|0}while(1){g=c;b=a;c=a+20|0;a=H[c>>2];if(a){continue}c=b+16|0;a=H[b+16>>2];if(a){continue}break}H[g>>2]=0;break c}c=H[7135];if(c>>>0>=i>>>0){d=H[7138];b=c-i|0;v:{if(b>>>0>=16){H[7135]=b;a=d+i|0;H[7138]=a;H[a+4>>2]=b|1;H[c+d>>2]=b;H[d+4>>2]=i|3;break v}H[7138]=0;H[7135]=0;H[d+4>>2]=c|3;a=c+d|0;H[a+4>>2]=H[a+4>>2]|1}a=d+8|0;break a}h=H[7136];if(h>>>0>i>>>0){b=h-i|0;H[7136]=b;c=H[7139];a=c+i|0;H[7139]=a;H[a+4>>2]=b|1;H[c+4>>2]=i|3;a=c+8|0;break a}a=0;j=i+47|0;b=j;if(H[7251]){c=H[7253]}else{H[7254]=-1;H[7255]=-1;H[7252]=4096;H[7253]=4096;H[7251]=m+12&-16^1431655768;H[7256]=0;H[7244]=0;c=4096}g=b+c|0;e=0-c|0;c=g&e;if(c>>>0<=i>>>0){break a}d=H[7243];if(d){b=H[7241];f=b+c|0;if(d>>>0>>0|b>>>0>=f>>>0){break a}}if(I[28976]&4){break f}w:{x:{d=H[7139];if(d){a=28980;while(1){b=H[a>>2];if(d>>>0>2]>>>0?b>>>0<=d>>>0:0){break x}a=H[a+8>>2];if(a){continue}break}}b=_c(0);if((b|0)==-1){break g}f=c;d=H[7252];a=d-1|0;if(a&b){f=(c-b|0)+(a+b&0-d)|0}if(f>>>0<=i>>>0|f>>>0>2147483646){break g}d=H[7243];if(d){a=H[7241];e=a+f|0;if(d>>>0>>0|a>>>0>=e>>>0){break g}}a=_c(f);if((b|0)!=(a|0)){break w}break e}f=e&g-h;if(f>>>0>2147483646){break g}b=_c(f);if((b|0)==(H[a>>2]+H[a+4>>2]|0)){break h}a=b}if(!((a|0)==-1|i+48>>>0<=f>>>0)){b=H[7253];b=b+(j-f|0)&0-b;if(b>>>0>2147483646){b=a;break e}if((_c(b)|0)!=-1){f=b+f|0;b=a;break e}_c(0-f|0);break g}b=a;if((a|0)!=-1){break e}break g}X()}e=0;break b}b=0;break c}if((b|0)!=-1){break e}}H[7244]=H[7244]|4}if(c>>>0>2147483646){break d}b=_c(c);a=_c(0);if((b|0)==-1|(a|0)==-1|a>>>0<=b>>>0){break d}f=a-b|0;if(f>>>0<=i+40>>>0){break d}}a=H[7241]+f|0;H[7241]=a;if(a>>>0>K[7242]){H[7242]=a}y:{z:{A:{g=H[7139];if(g){a=28980;while(1){d=H[a>>2];c=H[a+4>>2];if((d+c|0)==(b|0)){break A}a=H[a+8>>2];if(a){continue}break}break z}a=H[7137];if(!(a>>>0<=b>>>0?a:0)){H[7137]=b}a=0;H[7246]=f;H[7245]=b;H[7141]=-1;H[7142]=H[7251];H[7248]=0;while(1){d=a<<3;c=d+28572|0;H[d+28580>>2]=c;H[d+28584>>2]=c;a=a+1|0;if((a|0)!=32){continue}break}d=f-40|0;a=b+8&7?-8-b&7:0;c=d-a|0;H[7136]=c;a=a+b|0;H[7139]=a;H[a+4>>2]=c|1;H[(b+d|0)+4>>2]=40;H[7140]=H[7255];break y}if(I[a+12|0]&8|d>>>0>g>>>0|b>>>0<=g>>>0){break z}H[a+4>>2]=c+f;a=g+8&7?-8-g&7:0;c=a+g|0;H[7139]=c;b=H[7136]+f|0;a=b-a|0;H[7136]=a;H[c+4>>2]=a|1;H[(b+g|0)+4>>2]=40;H[7140]=H[7255];break y}if(K[7137]>b>>>0){H[7137]=b}c=b+f|0;a=28980;B:{C:{D:{E:{F:{G:{while(1){if((c|0)!=H[a>>2]){a=H[a+8>>2];if(a){continue}break G}break}if(!(I[a+12|0]&8)){break F}}a=28980;while(1){c=H[a>>2];if(c>>>0<=g>>>0){e=c+H[a+4>>2]|0;if(e>>>0>g>>>0){break E}}a=H[a+8>>2];continue}}H[a>>2]=b;H[a+4>>2]=H[a+4>>2]+f;j=(b+8&7?-8-b&7:0)+b|0;H[j+4>>2]=i|3;f=c+(c+8&7?-8-c&7:0)|0;h=i+j|0;c=f-h|0;if((g|0)==(f|0)){H[7139]=h;a=H[7136]+c|0;H[7136]=a;H[h+4>>2]=a|1;break C}if(H[7138]==(f|0)){H[7138]=h;a=H[7135]+c|0;H[7135]=a;H[h+4>>2]=a|1;H[a+h>>2]=a;break C}a=H[f+4>>2];if((a&3)==1){g=a&-8;H:{if(a>>>0<=255){d=H[f+8>>2];a=a>>>3|0;b=H[f+12>>2];if((b|0)==(d|0)){H[7133]=H[7133]&Gq(-2,a);break H}H[d+12>>2]=b;H[b+8>>2]=d;break H}i=H[f+24>>2];b=H[f+12>>2];I:{if((f|0)!=(b|0)){a=H[f+8>>2];H[a+12>>2]=b;H[b+8>>2]=a;break I}J:{a=f+20|0;d=H[a>>2];if(d){break J}a=f+16|0;d=H[a>>2];if(d){break J}b=0;break I}while(1){e=a;b=d;a=b+20|0;d=H[a>>2];if(d){continue}a=b+16|0;d=H[b+16>>2];if(d){continue}break}H[e>>2]=0}if(!i){break H}d=H[f+28>>2];a=(d<<2)+28836|0;K:{if(H[a>>2]==(f|0)){H[a>>2]=b;if(b){break K}H[7134]=H[7134]&Gq(-2,d);break H}H[i+(H[i+16>>2]==(f|0)?16:20)>>2]=b;if(!b){break H}}H[b+24>>2]=i;a=H[f+16>>2];if(a){H[b+16>>2]=a;H[a+24>>2]=b}a=H[f+20>>2];if(!a){break H}H[b+20>>2]=a;H[a+24>>2]=b}f=g+f|0;c=c+g|0}H[f+4>>2]=H[f+4>>2]&-2;H[h+4>>2]=c|1;H[c+h>>2]=c;if(c>>>0<=255){a=c>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=h;H[a+12>>2]=h;H[h+12>>2]=b;H[h+8>>2]=a;break C}a=31;if(c>>>0<=16777215){a=c>>>8|0;e=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(d|e))|0;a=(a<<1|c>>>a+21&1)+28|0}H[h+28>>2]=a;H[h+16>>2]=0;H[h+20>>2]=0;e=(a<<2)+28836|0;d=H[7134];b=1<>2]=h;H[h+24>>2]=e;break M}a=c<<((a|0)==31?0:25-(a>>>1|0)|0);b=H[e>>2];while(1){d=b;if((H[b+4>>2]&-8)==(c|0)){break D}b=a>>>29|0;a=a<<1;e=d+(b&4)|0;b=H[e+16>>2];if(b){continue}break}H[e+16>>2]=h;H[h+24>>2]=d}H[h+12>>2]=h;H[h+8>>2]=h;break C}d=f-40|0;a=b+8&7?-8-b&7:0;c=d-a|0;H[7136]=c;a=a+b|0;H[7139]=a;H[a+4>>2]=c|1;H[(b+d|0)+4>>2]=40;H[7140]=H[7255];a=(e+(e-39&7?39-e&7:0)|0)-47|0;c=a>>>0>>0?g:a;H[c+4>>2]=27;a=H[7248];H[c+16>>2]=H[7247];H[c+20>>2]=a;a=H[7246];H[c+8>>2]=H[7245];H[c+12>>2]=a;H[7247]=c+8;H[7246]=f;H[7245]=b;H[7248]=0;a=c+24|0;while(1){H[a+4>>2]=7;b=a+8|0;a=a+4|0;if(b>>>0>>0){continue}break}if((c|0)==(g|0)){break y}H[c+4>>2]=H[c+4>>2]&-2;e=c-g|0;H[g+4>>2]=e|1;H[c>>2]=e;if(e>>>0<=255){a=e>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=g;H[a+12>>2]=g;H[g+12>>2]=b;H[g+8>>2]=a;break y}a=31;H[g+16>>2]=0;H[g+20>>2]=0;if(e>>>0<=16777215){a=e>>>8|0;d=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(c|d))|0;a=(a<<1|e>>>a+21&1)+28|0}H[g+28>>2]=a;d=(a<<2)+28836|0;c=H[7134];b=1<>2]=g;H[g+24>>2]=d;break O}a=e<<((a|0)==31?0:25-(a>>>1|0)|0);b=H[d>>2];while(1){c=b;if((e|0)==(H[b+4>>2]&-8)){break B}b=a>>>29|0;a=a<<1;d=c+(b&4)|0;b=H[d+16>>2];if(b){continue}break}H[d+16>>2]=g;H[g+24>>2]=c}H[g+12>>2]=g;H[g+8>>2]=g;break y}a=H[d+8>>2];H[a+12>>2]=h;H[d+8>>2]=h;H[h+24>>2]=0;H[h+12>>2]=d;H[h+8>>2]=a}a=j+8|0;break a}a=H[c+8>>2];H[a+12>>2]=g;H[c+8>>2]=g;H[g+24>>2]=0;H[g+12>>2]=c;H[g+8>>2]=a}a=H[7136];if(a>>>0<=i>>>0){break d}b=a-i|0;H[7136]=b;c=H[7139];a=c+i|0;H[7139]=a;H[a+4>>2]=b|1;H[c+4>>2]=i|3;a=c+8|0;break a}H[6070]=48;a=0;break a}P:{if(!f){break P}c=H[e+28>>2];a=(c<<2)+28836|0;Q:{if(H[a>>2]==(e|0)){H[a>>2]=b;if(b){break Q}j=Gq(-2,c)&j;H[7134]=j;break P}H[f+(H[f+16>>2]==(e|0)?16:20)>>2]=b;if(!b){break P}}H[b+24>>2]=f;a=H[e+16>>2];if(a){H[b+16>>2]=a;H[a+24>>2]=b}a=H[e+20>>2];if(!a){break P}H[b+20>>2]=a;H[a+24>>2]=b}R:{if(d>>>0<=15){a=d+i|0;H[e+4>>2]=a|3;a=a+e|0;H[a+4>>2]=H[a+4>>2]|1;break R}H[e+4>>2]=i|3;H[h+4>>2]=d|1;H[d+h>>2]=d;if(d>>>0<=255){a=d>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=h;H[a+12>>2]=h;H[h+12>>2]=b;H[h+8>>2]=a;break R}a=31;if(d>>>0<=16777215){a=d>>>8|0;g=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(c|g))|0;a=(a<<1|d>>>a+21&1)+28|0}H[h+28>>2]=a;H[h+16>>2]=0;H[h+20>>2]=0;c=(a<<2)+28836|0;T:{b=1<>2]=h;H[h+24>>2]=c;break U}a=d<<((a|0)==31?0:25-(a>>>1|0)|0);i=H[c>>2];while(1){b=i;if((H[b+4>>2]&-8)==(d|0)){break T}c=a>>>29|0;a=a<<1;c=b+(c&4)|0;i=H[c+16>>2];if(i){continue}break}H[c+16>>2]=h;H[h+24>>2]=b}H[h+12>>2]=h;H[h+8>>2]=h;break R}a=H[b+8>>2];H[a+12>>2]=h;H[b+8>>2]=h;H[h+24>>2]=0;H[h+12>>2]=b;H[h+8>>2]=a}a=e+8|0;break a}V:{if(!l){break V}c=H[b+28>>2];a=(c<<2)+28836|0;W:{if(H[a>>2]==(b|0)){H[a>>2]=e;if(e){break W}H[7134]=Gq(-2,c)&h;break V}H[(H[l+16>>2]==(b|0)?16:20)+l>>2]=e;if(!e){break V}}H[e+24>>2]=l;a=H[b+16>>2];if(a){H[e+16>>2]=a;H[a+24>>2]=e}a=H[b+20>>2];if(!a){break V}H[e+20>>2]=a;H[a+24>>2]=e}X:{if(d>>>0<=15){a=d+i|0;H[b+4>>2]=a|3;a=a+b|0;H[a+4>>2]=H[a+4>>2]|1;break X}H[b+4>>2]=i|3;H[j+4>>2]=d|1;H[d+j>>2]=d;if(k){a=k>>>3|0;c=(a<<3)+28572|0;e=H[7138];a=1<>2]}H[c+8>>2]=e;H[a+12>>2]=e;H[e+12>>2]=c;H[e+8>>2]=a}H[7138]=j;H[7135]=d}a=b+8|0}oa=m+16|0;return a|0}function gj(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;d=oa-144|0;oa=d;t=Vb(d,0,144);H[t+76>>2]=-1;H[t+44>>2]=a;H[t+32>>2]=147;H[t+84>>2]=a;u=c;c=0;j=oa-304|0;oa=j;e=t;d=b;a=I[b|0];a:{if(!a){break a}b:{c:{d:{e:{while(1){f:{g:{if(Yc(a&255)){while(1){a=d;d=d+1|0;if(Yc(I[a+1|0])){continue}break}kc(e,0,0);while(1){b=H[e+4>>2];h:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break h}b=La(e)}if(Yc(b)){continue}break}d=H[e+4>>2];if(H[e+104>>2]){d=d-1|0;H[e+4>>2]=d}b=d-H[e+8>>2]|0;f=b>>31;k=b;l=m+H[e+124>>2]|0;b=q+H[e+120>>2]|0;l=b>>>0>>0?l+1|0:l;d=b;b=k+b|0;f=f+l|0;q=b;m=b>>>0>>0?f+1|0:f;break g}i:{j:{k:{b=I[d|0];if((b|0)==37){a=I[d+1|0];if((a|0)==42){break k}if((a|0)!=37){break j}}kc(e,0,0);a=((b|0)==37)+d|0;b=H[e+4>>2];l:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break l}b=La(e)}if((b|0)!=I[a|0]){if(H[e+104>>2]){H[e+4>>2]=H[e+4>>2]-1}if((b|0)>-1){break a}s=0;if(v){break a}break c}b=q+1|0;m=b>>>0<1?m+1|0:m;q=b;break g}n=0;a=d+2|0;break i}if(!(!Rb(a)|I[d+2|0]!=36)){a=I[d+1|0]-48|0;b=oa-16|0;H[b+12>>2]=u;a=a>>>0>1?((a<<2)+u|0)-4|0:u;H[b+8>>2]=a+4;n=H[a>>2];a=d+3|0;break i}n=H[u>>2];u=u+4|0;a=d+1|0}s=0;d=0;if(Rb(I[a|0])){while(1){d=(I[a|0]+N(d,10)|0)-48|0;b=I[a+1|0];a=a+1|0;if(Rb(b)){continue}break}}h=I[a|0];if((h|0)==109){c=0;s=(n|0)!=0;h=I[a+1|0];p=0;a=a+1|0}b=a;a=b+1|0;i=3;m:{n:{switch(h-65|0){case 39:k=b+2|0;b=I[b+1|0]==104;a=b?k:a;i=b?-2:-1;break m;case 43:k=b+2|0;b=I[b+1|0]==108;a=b?k:a;i=b?3:1;break m;case 51:case 57:i=1;break m;case 11:i=2;break m;case 41:break m;case 0:case 2:case 4:case 5:case 6:case 18:case 23:case 26:case 32:case 34:case 35:case 36:case 37:case 38:case 40:case 45:case 46:case 47:case 50:case 52:case 55:break n;default:break d}}i=0;a=b}b=I[a|0];f=(b&47)==3;w=f?1:i;r=f?b|32:b;o:{if((r|0)==91){break o}p:{if((r|0)!=110){if((r|0)!=99){break p}d=(d|0)>1?d:1;break o}hj(n,w,q,m);break g}kc(e,0,0);while(1){b=H[e+4>>2];q:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break q}b=La(e)}if(Yc(b)){continue}break}b=H[e+4>>2];if(H[e+104>>2]){b=b-1|0;H[e+4>>2]=b}b=b-H[e+8>>2]|0;f=b;h=b>>31;m=m+H[e+124>>2]|0;b=q+H[e+120>>2]|0;m=b>>>0>>0?m+1|0:m;k=b;b=b+f|0;f=h+m|0;q=b;m=b>>>0>>0?f+1|0:f}k=d;g=d>>31;kc(e,d,g);b=H[e+104>>2];f=H[e+4>>2];r:{if(b>>>0>f>>>0){H[e+4>>2]=f+1;break r}if((La(e)|0)<0){break d}b=H[e+104>>2]}if(b){H[e+4>>2]=H[e+4>>2]-1}b=16;s:{t:{u:{v:{w:{x:{y:{switch(r-88|0){default:b=r-65|0;if(b>>>0>6|!(1<>2]-H[e+8>>2]|0;if(H[e+120>>2]==(0-b|0)&H[e+124>>2]==(0-((b>>31)+((b|0)!=0)|0)|0)){break b}if(!n){break s}b=H[j+8>>2];d=H[j+12>>2];f=H[j>>2];h=H[j+4>>2];switch(w|0){case 2:break u;case 1:break v;case 0:break w;default:break s};case 3:case 11:case 27:if((r&239)==99){Vb(j+32|0,-1,257);F[j+32|0]=0;if((r|0)!=115){break t}F[j+65|0]=0;F[j+46|0]=0;G[j+42>>1]=0;G[j+44>>1]=0;break t}f=I[a+1|0];h=(f|0)==94;Vb(j+32|0,h,257);F[j+32|0]=0;b=h?a+2|0:a+1|0;z:{A:{B:{a=I[(h?2:1)+a|0];if((a|0)!=45){if((a|0)==93){break B}i=(f|0)!=94;a=b;break z}i=(f|0)!=94;F[j+78|0]=i;break A}i=(f|0)!=94;F[j+126|0]=i}a=b+1|0}while(1){b=I[a|0];C:{if((b|0)!=45){if(!b){break d}if((b|0)!=93){break C}break t}b=45;f=I[a+1|0];if(!f|(f|0)==93){break C}h=a+1|0;a=I[a-1|0];D:{if(f>>>0<=a>>>0){b=f;break D}while(1){a=a+1|0;F[a+(j+32|0)|0]=i;b=I[h|0];if(b>>>0>a>>>0){continue}break}}a=h}F[(b+j|0)+33|0]=i;a=a+1|0;continue};case 23:b=8;break x;case 12:case 29:b=10;break x;case 1:case 2:case 4:case 5:case 6:case 7:case 8:case 10:case 16:case 18:case 19:case 20:case 21:case 22:case 25:case 26:case 28:case 30:case 31:break s;case 0:case 24:case 32:break x;case 17:break y}}b=0}g=e;k=0;f=0;h=0;i=0;y=0;x=oa-16|0;oa=x;E:{F:{G:{H:{I:{J:{if(b>>>0<=36){while(1){d=H[g+4>>2];K:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break K}d=La(g)}if(Yc(d)){continue}break}L:{M:{switch(d-43|0){case 0:case 2:break M;default:break L}}y=(d|0)==45?-1:0;d=H[g+4>>2];if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break L}d=La(g)}N:{if(!(b&-17|(d|0)!=48)){d=H[g+4>>2];O:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break O}d=La(g)}if((d&-33)==88){b=16;d=H[g+4>>2];P:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break P}d=La(g)}if(I[d+8641|0]<16){break I}if(!H[g+104>>2]){break F}H[g+4>>2]=H[g+4>>2]-1;break F}if(b){break N}b=8;break I}b=b?b:10;if(b>>>0>I[d+8641|0]){break N}if(H[g+104>>2]){H[g+4>>2]=H[g+4>>2]-1}kc(g,0,0);H[6070]=28;b=0;d=0;break E}if((b|0)!=10){break I}h=d-48|0;if(h>>>0<=9){b=0;while(1){b=N(b,10)+h|0;d=H[g+4>>2];Q:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break Q}d=La(g)}h=d-48|0;if(b>>>0<429496729?h>>>0<=9:0){continue}break}k=b}if(h>>>0>9){break J}i=Eq(k,0,10,0);l=pa;b=h;while(1){d=H[g+4>>2];R:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break R}d=La(g)}h=d-48|0;o=h>>>0>9;f=l;b=b+i|0;f=b>>>0>>0?f+1|0:f;k=b;if((f|0)==429496729&b>>>0>=2576980378|f>>>0>429496729|o){break J}i=Eq(k,f,10,0);l=pa;b=h;if((l|0)==-1&i>>>0<=(b^-1)>>>0|(l|0)!=-1){continue}break}b=10;break H}H[6070]=28;b=0;d=0;break E}b=10;if(h>>>0<=9){break H}break G}if(b-1&b){i=I[d+8641|0];if(i>>>0>>0){while(1){h=N(b,h)+i|0;d=H[g+4>>2];S:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break S}d=La(g)}i=I[d+8641|0];if(h>>>0<119304647?i>>>0>>0:0){continue}break}k=h}if(b>>>0<=i>>>0){break H}h=b;while(1){l=Eq(k,f,h,0);o=pa;i=i&255;if((o|0)==-1&(i^-1)>>>0>>0){break H}f=o;d=i+l|0;f=d>>>0>>0?f+1|0:f;k=d;l=b;d=H[g+4>>2];T:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break T}d=La(g)}i=I[d+8641|0];if(l>>>0<=i>>>0){break H}rb(x,h,0,0,0,k,f,0,0);if(!(H[x+8>>2]|H[x+12>>2])){continue}break}break H}l=F[(N(b,23)>>>5&7)+8897|0];h=I[d+8641|0];if(h>>>0>>0){while(1){i=i<>2];U:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break U}d=La(g)}h=I[d+8641|0];if(i>>>0<134217728?h>>>0>>0:0){continue}break}k=i}if(b>>>0<=h>>>0){break H}i=l;o=i&31;if((i&63)>>>0>=32){l=0;o=-1>>>o|0}else{l=-1>>>o|0;o=(1<>>o}if(!l&k>>>0>o>>>0){break H}while(1){z=h&255;d=i;h=d&31;if((d&63)>>>0>=32){f=k<>>32-h|f<>2];V:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break V}d=La(g)}h=I[d+8641|0];if(z>>>0<=h>>>0){break H}if((f|0)==(l|0)&k>>>0<=o>>>0|f>>>0>>0){continue}break}}if(I[d+8641|0]>=b>>>0){break G}while(1){f=H[g+4>>2];W:{if(f>>>0>2]){H[g+4>>2]=f+1;d=I[f|0];break W}d=La(g)}if(I[d+8641|0]>>0){continue}break}H[6070]=68;y=0;k=-1;f=-1}if(H[g+104>>2]){H[g+4>>2]=H[g+4>>2]-1}if((k|0)==-1&(f|0)==-1){if(!(y|1)){H[6070]=68;b=-2;d=-1;break E}}b=y;h=b^k;d=b;b=h-b|0;k=f;f=d>>31;d=(k^f)-((d>>>0>h>>>0)+f|0)|0;break E}kc(g,0,0);b=0;d=0}oa=x+16|0;f=H[e+4>>2]-H[e+8>>2]|0;if(H[e+120>>2]==(0-f|0)&H[e+124>>2]==(0-((f>>31)+((f|0)!=0)|0)|0)){break b}if(!(!n|(r|0)!=112)){H[n>>2]=b;break s}hj(n,w,b,d);break s}L[n>>2]=ij(f,h,b,d);break s}M[n>>3]=ig(f,h,b,d);break s}H[n>>2]=f;H[n+4>>2]=h;H[n+8>>2]=b;H[n+12>>2]=d;break s}f=(r|0)==99;i=f?d+1|0:31;h=(w|0)!=1;X:{if(!h){b=n;if(s){b=cb(i<<2);if(!b){break e}}H[j+296>>2]=0;H[j+300>>2]=0;d=0;c=s;while(1){p=b;Y:{while(1){b=H[e+4>>2];Z:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break Z}b=La(e)}if(!I[(b+j|0)+33|0]){break Y}F[j+27|0]=b;b=Ve(j+28|0,j+27|0,1,j+296|0);if((b|0)==-2){continue}if((b|0)==-1){break f}if(p){H[(d<<2)+p>>2]=H[j+28>>2];d=d+1|0}if(!(c&(d|0)==(i|0))){continue}break}i=i<<1|1;b=ke(p,i<<2);if(b){continue}break f}break}if(j+296|0?H[j+296>>2]:0){break f}c=0;break X}if(s){d=0;b=cb(i);if(!b){break e}while(1){c=b;while(1){b=H[e+4>>2];_:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break _}b=La(e)}if(!I[(b+j|0)+33|0]){p=0;break X}F[c+d|0]=b;d=d+1|0;if((i|0)!=(d|0)){continue}break}p=0;i=i<<1|1;b=ke(c,i);if(b){continue}break}break d}d=0;if(n){while(1){b=H[e+4>>2];$:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break $}b=La(e)}if(I[(b+j|0)+33|0]){F[d+n|0]=b;d=d+1|0;continue}else{p=0;c=n;break X}}}while(1){b=H[e+4>>2];aa:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break aa}b=La(e)}if(I[(b+j|0)+33|0]){continue}break}c=0;p=0}b=H[e+4>>2];if(H[e+104>>2]){b=b-1|0;H[e+4>>2]=b}i=b-H[e+8>>2]|0;b=i+H[e+120>>2]|0;l=H[e+124>>2]+(i>>31)|0;l=b>>>0>>0?l+1|0:l;if(!(l|b)|((b|0)!=(k|0)|(g|0)!=(l|0)?(r|0)==99:0)){break b}ba:{if(!s){break ba}if(!h){H[n>>2]=p;break ba}H[n>>2]=c}if(f){break s}if(p){H[(d<<2)+p>>2]=0}if(!c){c=0;break s}F[c+d|0]=0}b=H[e+4>>2]-H[e+8>>2]|0;f=b>>31;k=b;m=m+H[e+124>>2]|0;b=q+H[e+120>>2]|0;m=b>>>0>>0?m+1|0:m;d=b;b=k+b|0;m=f+m|0;m=b>>>0>>0?m+1|0:m;q=b;v=((n|0)!=0)+v|0}d=a+1|0;a=I[a+1|0];if(a){continue}break a}break}c=0;break d}c=0;p=0}if(v){break b}}v=-1}if(!s){break a}Ba(c);Ba(p)}oa=j+304|0;oa=t+144|0;return v}function Bq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;e=oa+-64|0;oa=e;h=Ea(e+48|0);j=Ea(e+32|0);f=Pa(H[b+24>>2]);H[b+60>>2]=0;u=I[b+69|0];a:{if(u){b:{if((wa(c)|0)<=0){break b}while(1){if(H[b+104>>2]<=(g|0)){break b}if(F[Aa(c,g)|0]>32){break b}g=g+1|0;if((wa(c)|0)>(g|0)){continue}break}}Eb(e+16|0,c,g);break a}H[b+104>>2]=0;c:{if((wa(c)|0)<1){break c}while(1){if(F[Aa(c,H[b+104>>2])|0]>32){break c}d=H[b+104>>2]+1|0;H[b+104>>2]=d;if((wa(c)|0)>(d|0)){continue}break}}cf(e+16|0,c)}Ua(h,e+16|0);va(e+16|0);d:{if(!wa(h)){if(I[b+128|0]){dk(a,b,H[b+120>>2],H[b+124>>2]);break d}Vd(a,h);break d}d=I[Aa(h,0)|0];e:{s=I[7820];f:{g:{if((d|0)==(s|0)){d=nd(h,0,21836);if(I[b+69|0]){break e}if(d){break f}break g}if(I[b+69|0]){break e}}if(!I[b+129|0]){break e}}if(I[Aa(h,0)|0]==(s|0)){d=xa(e,Ca(h)+1|0);cf(e+16|0,d);va(d);h:{i:{if(!I[b+86|0]){break i}d=xa(e,2337);if(Ra(e+16|0,0,6,d)){va(d);break i}g=I[Aa(h,wa(h)-1|0)|0];va(d);if((g|0)!=92){break i}if(!I[b+80|0]){F[b+80|0]=1;d=Na(136);hk(d,b);H[e>>2]=d;xc(H[b+12>>2],e);break h}F[b+79|0]=1;break h}d=xa(e,2037);g=Ra(e+16|0,0,2,d);va(d);if(!g){d=H[b+16>>2];H[e>>2]=Pa(H[b+8>>2]);ya(d,e);d=H[b+20>>2];H[e>>2]=Pa(H[b+12>>2]);ya(d,e);d=H[b+8>>2];g=Na(136);hk(g,b);H[e>>2]=g;ya(d,e);break h}d=xa(e,2217);g=Ra(e+16|0,0,4,d);va(d);if(!g){if(mb(H[b+8>>2])){break h}xc(H[b+12>>2],Qa(H[b+8>>2]));ob(H[b+8>>2]);break h}d=xa(e,2034);g=Ra(e+16|0,0,5,d);va(d);if(g){break h}j:{if(mb(H[b+16>>2])){break j}g=H[Qa(H[b+16>>2])>>2];ob(H[b+16>>2]);if((Pa(H[b+8>>2])|0)<=(g|0)){break j}while(1){d=H[Qa(H[b+8>>2])>>2];ob(H[b+8>>2]);if(d){qa[H[H[d>>2]+4>>2]](d)}if((Pa(H[b+8>>2])|0)>(g|0)){continue}break}}if(mb(H[b+20>>2])){break h}g=H[Qa(H[b+20>>2])>>2];ob(H[b+20>>2]);if((Pa(H[b+12>>2])|0)<=(g|0)){break h}while(1){d=H[Qa(H[b+12>>2])>>2];ob(H[b+12>>2]);if(d){qa[H[H[d>>2]+4>>2]](d)}if((Pa(H[b+12>>2])|0)>(g|0)){continue}break}}va(e+16|0)}k:{l:{if(!wa(h)){F[b+129|0]=0;break l}d=I[Aa(h,wa(h)-1|0)|0]==92;F[b+129|0]=d;if(d){break k}}if(I[b+79|0]|!I[b+80|0]){break k}c=Ea(a);F[b+80|0]=0;a=H[Qa(H[b+12>>2])>>2];ob(H[b+12>>2]);qa[H[H[a>>2]+24>>2]](e+16|0,a,h);Ua(c,e+16|0);va(e+16|0);qa[H[H[a>>2]+4>>2]](a);break d}if(I[b+79|0]|I[b+80|0]){break e}Td(a,c);break d}m:{if(I[b+79|0]){break m}c=H[b+12>>2];if(!c){break m}if(mb(c)){break m}c=a;a=H[Qa(H[b+12>>2])>>2];qa[H[H[a>>2]+24>>2]](c,a,h);break d}g=0;if(!mb(H[b+36>>2])){n=H[Qa(H[b+36>>2])>>2]}v=1;if((f|0)>=1){c=0;while(1){n:{o:{if(I[b+84|0]|!c){break o}if(H[lc(H[b+24>>2],c-1|0)>>2]==22164){break o}if(H[lc(H[b+24>>2],c)>>2]==22164){break n}}g=g+1|0}c=c+1|0;if((f|0)!=(c|0)){continue}break}}k=g-(F[b+87|0]&1)|0;m=wa(h);if((m|0)>=1){o=b+96|0;g=32;c=0;while(1){f=F[Aa(h,c)|0];mc(j,1,f);p:{q:{if(Db(f)){break q}d=i&1;i=0;if(d){break q}r:{s:{t:{u:{d=I[b+69|0];if(!((d|0)!=0|l)){d=xa(e+16|0,2543);q=Ra(h,c,2,d);va(d);if(!q){break u}d=I[b+69|0]}q=(d&255)!=0|l;if(q|(f|0)!=92){break t}g=92;i=1;break p}mc(j,1,92);break s}w=I[b+68|0];if((q^1)&(f|0)==34){if(!w){F[b+68|0]=1;g=34;F[b+112|0]=34;break p}g=34;if(I[b+112|0]!=34){break p}F[b+68|0]=0;break p}if(w){break q}v:{w:{x:{y:{z:{A:{B:{C:{if(!(q&1)){if(!Ra(h,c,2,22188)){break C}d=I[b+69|0]}if(!((d&255)!=0|l)){if(!Ra(h,c,2,22200)){break B}d=I[b+69|0]}if(d&255|l){if(!Ra(h,c,2,22212)){F[b+69|0]=0;mc(j,1,47);c=c+1|0;break q}if(I[b+69|0]){break q}}if(l){g=f;l=1;break p}d=91;D:{E:{switch((f&255)-123|0){case 2:d=93;break D;case 0:break D;default:break E}}l=nd(h,c,21824);i=nd(h,c,21812);if(l){Eb(e+16|0,l,1);Bd(j,e+16|0);va(e+16|0);c=(wa(l)+c|0)-1|0;d=125;if((l|0)!=22992){break D}H[b+72>>2]=H[b+72>>2]-1;break D}if(!i){d=f;break D}Eb(e+16|0,i,1);Bd(j,e+16|0);va(e+16|0);c=(wa(i)+c|0)-1|0;d=123;if(!((i|0)!=22752?(i|0)==22740|(i|0)==22728:1)){break D}H[b+72>>2]=H[b+72>>2]+1}f=I[b+114|0];F[b+114|0]=d;F[b+113|0]=f;if(!(md(d)|(d|0)==44|(d&255)==59)){F[b+116|0]=I[b+115|0];F[b+115|0]=d}f=b;if(I[b+78|0]){F[b+78|0]=0;i=H[Qa(H[b+24>>2])>>2]}else{i=0}H[f+60>>2]=i;F:{G:{H:{I:{J:{f=d&255;switch(f-40|0){case 1:break H;case 0:break I;default:break J}}switch(f-91|0){case 1:break F;case 2:break H;case 0:break I;default:break G}}H[b+96>>2]=H[b+96>>2]+1;f=H[b+40>>2];H[e+16>>2]=Pa(H[b+36>>2]);ya(f,e+16|0);if(H[b+60>>2]){ug(b,h,c,n,H[b+92>>2],1);break w}i=0;ug(b,h,c,n,0,1);break v}f=H[o>>2]-1|0;H[o>>2]=f;if(!f){F[b+87|0]=0;d=32}i=0;if(mb(H[b+40>>2])){break v}f=H[Qa(H[b+40>>2])>>2];ob(H[b+40>>2]);if((Pa(H[b+36>>2])|0)>(f|0)){while(1){ob(H[b+36>>2]);if((Pa(H[b+36>>2])|0)>(f|0)){continue}break}}if(mb(H[b+44>>2])){break v}f=H[Qa(H[b+44>>2])>>2];ob(H[b+44>>2]);n=v?f:c?n:f;break v}if((f|0)==123){break x}}K:{if((g&255)!=32){break K}g=nd(h,c,21788);H[e>>2]=g;if(!g){break K}F[b+78|0]=1;g=0;if(!mb(H[b+28>>2])){g=H[Qa(H[b+28>>2])>>2]}f=H[e>>2];if(!((f|0)!=21924|(p|0)!=21936)){ob(H[b+24>>2]);break y}if(!g|(f|0)!=21936){break y}f=tg(g,21924);if((f|0)==-1){break y}i=0;f=Pa(g)+(f^-1)|0;if((f|0)>0){break A}break z}i=1;L:{M:{N:{O:{P:{Q:{switch(f-58|0){case 0:if(H[o>>2]){break L}R:{switch(I[b+113|0]-123|0){case 0:case 2:break L;default:break R}}F[b+114|0]=59;if(H[b+72>>2]>=1){F[b+78|0]=1;f=H[b+24>>2];p=22728;H[e+16>>2]=22728;ya(f,e+16|0);break L}if(I[b+76|0]){F[b+76|0]=0;break L}k=I[b+85|0]?k-1|0:0;break L;default:if(H[o>>2]<1){break P}i=0;if((d|0)!=44){break P}break;case 5:break M;case 1:break Q}}S:{if(mb(H[b+40>>2])){break S}if((H[Qa(H[b+40>>2])>>2]+(H[b+96>>2]>0)|0)>=(Pa(H[b+36>>2])|0)){break S}while(1){ob(H[b+36>>2]);if((H[Qa(H[b+40>>2])>>2]+(H[b+96>>2]>0)|0)<(Pa(H[b+36>>2])|0)){continue}break}}if(!i){break P}if((d|0)!=125?H[o>>2]:0){break L}F[b+76|0]=0;if((d|0)==125){break O}break N}if((d|0)!=125){break L}F[b+76|0]=0}if(!mb(H[b+40>>2])){ob(H[b+40>>2])}if(!mb(H[b+32>>2])){H[b+96>>2]=H[Qa(H[b+32>>2])>>2];ob(H[b+32>>2])}t=t+1|0;d=32;x=1;if((tg(H[b+24>>2],22164)|0)==-1){break N}if(H[Qa(H[b+24>>2])>>2]!=22164){while(1){ob(H[b+24>>2]);if(H[Qa(H[b+24>>2])>>2]!=22164){continue}break}}ob(H[b+24>>2]);if(mb(H[b+28>>2])){break N}f=H[Qa(H[b+28>>2])>>2];ob(H[b+28>>2]);if(!f){break N}Ba(Va(f))}T:{if(mb(H[Qa(H[b+28>>2])>>2])){break T}if(mb(H[Qa(H[b+28>>2])>>2])){break T}while(1){ob(H[Qa(H[b+28>>2])>>2]);if(!mb(H[Qa(H[b+28>>2])>>2])){continue}break}}U:{if(mb(H[b+24>>2])){break U}while(1){if(H[Qa(H[b+24>>2])>>2]==22164){break U}xc(H[Qa(H[b+28>>2])>>2],Qa(H[b+24>>2]));ob(H[b+24>>2]);if(!mb(H[b+24>>2])){continue}break}}i=0;if((d|0)!=59){break v}F[b+77|0]=0;d=59;break r}F[b+76|0]=1}i=0;if(I[b+77|0]|c){break v}c=0;if(!(H[b+96>>2]|H[b+72>>2])){g=1;i=-1;if(md(F[Aa(h,0)|0])){V:{W:{while(1){c=c+1|0;if((m|0)==(c|0)){break W}if(md(F[Aa(h,c)|0])){continue}break}f=c;break V}f=m}g=(c|0)<(m|0)}else{f=0}g=f-(g^1)|0;X:{if((m|0)<=(g|0)){break X}while(1){if(!Db(F[Aa(h,g)|0])){i=0;break X}g=g+1|0;if((m|0)>(g|0)){continue}break}g=m}c=g+i|0;f=xa(e+16|0,Ca(h)+c|0);ug(b,f,0,n,c,0);va(f);F[b+77|0]=1;c=0}i=0;break r}l=1;mc(j,1,47);c=c+1|0;break q}F[b+69|0]=1;mc(j,1,42);break s}while(1){xc(H[b+24>>2],Qa(g));ob(g);i=i+1|0;if((f|0)!=(i|0)){continue}break}}k=(x?0:f)+k|0}xc(H[b+24>>2],e);if((tg(21800,H[e>>2])|0)==-1){F[b+87|0]=1}p=H[e>>2];Eb(e+16|0,p,1);Bd(j,e+16|0);va(e+16|0);c=(wa(H[e>>2])+c|0)-1|0;break w}xc(H[b+32>>2],o);d=H[b+40>>2];H[e+16>>2]=Pa(H[b+36>>2]);ya(d,e+16|0);i=0;F[b+77|0]=0;H[b+96>>2]=0;d=H[b+28>>2];f=Na(12);Sa(f);H[e+16>>2]=f;ya(d,e+16|0);d=H[b+24>>2];p=22164;H[e+16>>2]=22164;ya(d,e+16|0);r=r+1|0;d=123;break r}i=0}break r}c=c+1|0;d=f}g=d;l=0;break p}g=f}v=0;c=c+1|0;if((m|0)>(c|0)){continue}break}}d=nd(j,0,21812);f=nd(j,0,21824);Y:{if(u){break Y}Z:{if(I[b+84|0]){break Z}if(!wa(j)|!d|((r|0)==(t|0)?(r|0)>=1:0)){break Z}if(Pa(H[b+24>>2])>>>0>=2){c=H[b+24>>2];if(H[lc(c,Pa(c)-2|0)>>2]==22164){break Z}}k=k-1|0;break Y}if(!(!wa(j)|!f)){k=k-1|0;break Y}if(!wa(j)|(r|0)<1|(r|0)!=(t|0)){break Y}c=H[b+64>>2];k=k-((c|0)!=0&(c|0)!=22164)|0}c=(k|0)>0?k:0;_:{if(!I[b+83|0]){break _}if(!wa(j)){break _}c=((d|f)!=0)+c|0}if(I[b+79|0]){if(I[Aa(j,0)|0]==(s|0)){d=xa(e,Ca(j)+1|0);cf(e+16|0,d);va(d);d=xa(e,2337);f=Ra(e+16|0,0,6,d);va(d);if(!f){$:{if(!mb(H[b+36>>2])){if(H[Qa(H[b+36>>2])>>2]>0){break $}}c=c-1|0}H[b+132>>2]=c}va(e+16|0)}c=c-H[b+132>>2]|0}H[b+120>>2]=n;c=(c|0)>0?c:0;H[b+124>>2]=c;d=e;f=b;if(I[b+89|0]){g=H[b+100>>2];m=(n|0)/(g|0)|0;c=m+c|0;n=n-N(g,m)|0}dk(d,f,n,c);Ue(e+16|0,e,j);Ua(j,e+16|0);va(e+16|0);va(e);if(p){H[b+64>>2]=p}Vd(a,j)}va(j);va(h);oa=e- -64|0}function lj(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;k=oa-336|0;oa=k;m=h;n=i&65535;o=d;q=e&65535;t=(e^i)&-2147483648;z=i>>>16&32767;C=e>>>16&32767;a:{b:{if(z-1>>>0<32766?C-1>>>0<=32765:0){break b}u=e&2147483647;l=u;j=d;if(!(!j&(l|0)==2147418112?!(b|c):l>>>0<2147418112)){D=d;t=e|32768;break a}u=i&2147483647;e=u;d=h;if(!(!d&(e|0)==2147418112?!(f|g):e>>>0<2147418112)){D=h;t=i|32768;b=f;c=g;break a}if(!(b|j|(l^2147418112|c))){if(!(d|f|(e^2147418112|g))){b=0;c=0;t=2147450880;break a}t=t|2147418112;b=0;c=0;break a}if(!(d|f|(e^2147418112|g))){b=0;c=0;break a}if(!(b|j|(c|l))){b=!(d|f|(e|g));D=b?0:D;t=b?2147450880:t;b=0;c=0;break a}if(!(d|f|(e|g))){t=t|2147418112;b=0;c=0;break a}if((l|0)==65535|l>>>0<65535){i=b;d=!(o|q);h=d<<6;j=Q(d?b:o)+32|0;b=Q(d?c:q);b=h+((b|0)==32?j:b)|0;xb(k+320|0,i,c,o,q,b-15|0);p=16-b|0;o=H[k+328>>2];q=H[k+332>>2];c=H[k+324>>2];b=H[k+320>>2]}if(e>>>0>65535){break b}d=!(m|n);e=d<<6;h=Q(d?f:m)+32|0;d=Q(d?g:n);d=e+((d|0)==32?h:d)|0;xb(k+304|0,f,g,m,n,d-15|0);p=(d+p|0)-16|0;m=H[k+312>>2];n=H[k+316>>2];f=H[k+304>>2];g=H[k+308>>2]}e=n|65536;B=e;u=m;d=m;j=e<<15|d>>>17;d=d<<15|g>>>17;h=0-d|0;e=j;i=1963258675-(j+((d|0)!=0)|0)|0;rb(k+288|0,d,j,0,0,h,i,0,0);j=H[k+296>>2];rb(k+272|0,0-j|0,0-(H[k+300>>2]+((j|0)!=0)|0)|0,0,0,h,i,0,0);h=H[k+280>>2];i=h<<1|H[k+276>>2]>>>31;h=H[k+284>>2]<<1|h>>>31;rb(k+256|0,i,h,0,0,d,e,0,0);j=h;h=H[k+264>>2];rb(k+240|0,i,j,0,0,0-h|0,0-(H[k+268>>2]+((h|0)!=0)|0)|0,0,0);h=H[k+248>>2];l=H[k+252>>2]<<1|h>>>31;i=h<<1|H[k+244>>2]>>>31;h=l;rb(k+224|0,i,h,0,0,d,e,0,0);h=H[k+232>>2];rb(k+208|0,i,l,0,0,0-h|0,0-(H[k+236>>2]+((h|0)!=0)|0)|0,0,0);h=H[k+216>>2];i=h<<1|H[k+212>>2]>>>31;h=H[k+220>>2]<<1|h>>>31;rb(k+192|0,i,h,0,0,d,e,0,0);j=h;h=H[k+200>>2];rb(k+176|0,i,j,0,0,0-h|0,0-(H[k+204>>2]+((h|0)!=0)|0)|0,0,0);j=d;h=H[k+184>>2];l=H[k+188>>2]<<1|h>>>31;d=h<<1|H[k+180>>2]>>>31;i=d-1|0;l=l-(d>>>0<1)|0;rb(k+160|0,j,e,0,0,i,l,0,0);e=f;rb(k+144|0,e<<15,g<<15|e>>>17,0,0,i,l,0,0);h=H[k+172>>2];n=H[k+160>>2];e=H[k+152>>2];d=n+e|0;m=H[k+164>>2];j=m+H[k+156>>2]|0;j=d>>>0>>0?j+1|0:j;e=d;d=j;n=(m|0)==(j|0)&n>>>0>e>>>0|j>>>0>>0;m=n+H[k+168>>2]|0;j=h;j=m>>>0>>0?j+1|0:j;h=m;m=!d&e>>>0>1|(d|0)!=0;h=h+m|0;j=h>>>0>>0?j+1|0:j;rb(k+112|0,i,l,0,0,0-h|0,0-(((h|0)!=0)+j|0)|0,0,0);rb(k+128|0,1-e|0,0-((e>>>0>1)+d|0)|0,0,0,i,l,0,0);O=(C-z|0)+p|0;e=H[k+116>>2];x=e;d=H[k+112>>2];j=e<<1|d>>>31;m=d<<1;n=j;e=j;i=H[k+140>>2];E=i;h=H[k+136>>2];j=i<<1|h>>>31;i=h<<1|H[k+132>>2]>>>31;d=i+m|0;l=e+j|0;l=d>>>0>>0?l+1|0:l;i=d;d=l;e=i;j=d-(e>>>0<13927)|0;e=e-13927|0;l=j;F=j;h=0;p=h;j=q|65536;z=j;C=o;v=(j&2147483647)<<1|o>>>31;y=Eq(l,h,v,0);h=pa;r=y;s=h;h=c;J=(h&2147483647)<<1|b>>>31;G=J;w=0;l=(d|0)==(l|0)&e>>>0>>0|d>>>0>l>>>0;m=(d|0)==(n|0)&i>>>0>>0|d>>>0>>0;d=H[k+120>>2];j=H[k+124>>2]<<1|d>>>31;i=E>>>31|0;d=i+(d<<1|x>>>31)|0;j=d>>>0>>0?j+1|0:j;h=d;d=m+d|0;j=d>>>0>>0?j+1|0:j;i=d;d=l+d|0;h=d>>>0>>0?j+1|0:j;i=d-1|0;A=h-(d>>>0<1)|0;m=0;h=Eq(G,w,A,m);d=h+r|0;j=pa+s|0;j=d>>>0>>0?j+1|0:j;h=j;r=(s|0)==(j|0)&d>>>0>>0|j>>>0>>0;j=0;y=j;x=j;R=0;j=o;P=c>>>31|0;G=P|j<<1;L=0;q=Eq(i,x,G,L);l=q+d|0;j=pa+h|0;j=l>>>0>>0?j+1|0:j;n=l;q=j;j=(h|0)==(j|0)&d>>>0>l>>>0|h>>>0>j>>>0;d=j+r|0;h=0;h=d>>>0>>0?1:h;l=Eq(v,I,A,m);d=l+d|0;j=pa+h|0;h=d>>>0>>0?j+1|0:j;o=Eq(v,I,i,x);l=pa;s=d;x=Eq(A,m,G,L);d=x+o|0;j=pa+l|0;j=d>>>0>>0?j+1|0:j;r=d;d=j;j=(l|0)==(j|0)&o>>>0>r>>>0|j>>>0>>0;o=s+d|0;l=h+j|0;l=o>>>0>>0?l+1|0:l;s=o;o=0;d=o+n|0;j=q+r|0;j=d>>>0>>0?j+1|0:j;h=j;o=(q|0)==(j|0)&n>>>0>d>>>0|j>>>0>>0;q=s+o|0;j=l;M=q;l=o>>>0>q>>>0?j+1|0:j;s=d;n=h;o=b<<1;q=c<<1|b>>>31;N=o&-2;r=Eq(i,y,N,0);h=pa;x=e;e=Eq(e,0,G,L);d=e+r|0;j=pa+h|0;j=d>>>0>>0?j+1|0:j;r=(h|0)==(j|0)&d>>>0>>0|h>>>0>j>>>0;h=d;e=j;S=r;E=Eq(F,p,J,w);d=E+d|0;j=pa+j|0;j=d>>>0>>0?j+1|0:j;E=d;r=d;d=j;j=(j|0)==(e|0)&h>>>0>r>>>0|e>>>0>j>>>0;e=S+j|0;h=0;h=e>>>0>>0?1:h;r=e;e=s+e|0;j=h+n|0;j=e>>>0>>0?j+1|0:j;r=e;h=e;e=j;n=(j|0)==(n|0)&h>>>0>>0|j>>>0>>0;h=n+M|0;j=l;M=h;n=h>>>0>>0?j+1|0:j;I=Eq(v,I,x,T);v=pa;l=Eq(A,m,N,U);h=l+I|0;j=pa+v|0;j=h>>>0>>0?j+1|0:j;A=h;l=Eq(J,w,i,y);i=h+l|0;h=j;j=j+pa|0;j=i>>>0>>0?j+1|0:j;m=i;y=Eq(F,p,G,L);i=i+y|0;l=j+pa|0;l=i>>>0>>0?l+1|0:l;y=i;i=l;l=0;s=(i|0)==(j|0)&y>>>0>>0|i>>>0>>0;m=(h|0)==(j|0)&A>>>0>m>>>0|h>>>0>j>>>0;j=m+((h|0)==(v|0)&I>>>0>A>>>0|h>>>0>>0)|0;h=0;m=s+j|0;j=m;h=r+i|0;j=(j|l)+e|0;j=h>>>0>>0?j+1|0:j;s=h;m=j;h=(e|0)==(j|0)&h>>>0>>0|e>>>0>j>>>0;e=h+M|0;j=n;A=e;n=e>>>0>>0?j+1|0:j;r=s;v=E;F=Eq(F,p,N,U);p=pa;h=Eq(J,w,x,T);e=h+F|0;j=pa+p|0;j=e>>>0>>0?j+1|0:j;l=j;j=0;h=(l|0)==(p|0)&e>>>0>>0|l>>>0

>>0;e=l+v|0;j=(h|j)+d|0;j=e>>>0>>0?j+1|0:j;h=e;s=(d|0)==(j|0)&h>>>0>>0|d>>>0>j>>>0;l=j+y|0;p=0;i=p+h|0;d=i;l=d>>>0

>>0?l+1|0:l;e=(j|0)==(l|0)&d>>>0>>0|j>>>0>l>>>0;d=s+e|0;j=0;j=d>>>0>>0?1:j;e=d;d=d+r|0;j=j+m|0;j=d>>>0>>0?j+1|0:j;e=j;i=(m|0)==(j|0)&d>>>0>>0|j>>>0>>0;h=i+A|0;l=n;l=h>>>0>>0?l+1|0:l;i=l;c:{if((i|0)==131071|i>>>0<131071){j=C;l=z<<1|j>>>31;C=P|j<<1;z=l|R;rb(k+80|0,d,e,h,i,f,g,u,B);l=b<<17;b=0;c=H[k+88>>2];m=b-c|0;j=H[k+80>>2];n=H[k+84>>2];p=(j|0)!=0|(n|0)!=0;w=m-p|0;p=(l-(H[k+92>>2]+(b>>>0>>0)|0)|0)-(m>>>0

>>0)|0;m=0-j|0;n=0-(((j|0)!=0)+n|0)|0;b=O+16382|0;break c}d=(e&1)<<31|d>>>1;j=h<<31|e>>>1;e=j;h=(i&1)<<31|h>>>1;i=i>>>1|0;rb(k+96|0,d,j,h,i,f,g,u,B);o=0;m=H[k+104>>2];n=o-m|0;j=H[k+96>>2];q=H[k+100>>2];p=(j|0)!=0|(q|0)!=0;w=n-p|0;p=((b<<16)-(H[k+108>>2]+(m>>>0>o>>>0)|0)|0)-(n>>>0

>>0)|0;m=0-j|0;n=0-(((j|0)!=0)+q|0)|0;o=b;q=c;b=O+16383|0}if((b|0)>=32767){t=t|2147418112;b=0;c=0;break a}d:{if((b|0)>=1){c=w;j=p<<1|c>>>31;w=c<<1|n>>>31;p=j;o=h;q=i&65535|b<<16;b=m;j=n<<1|b>>>31;b=b<<1;break d}if((b|0)<=-113){b=0;c=0;break a}hd(k- -64|0,d,e,h,i,1-b|0);xb(k+48|0,o,q,C,z,b+112|0);d=H[k+64>>2];e=H[k+68>>2];o=H[k+72>>2];q=H[k+76>>2];rb(k+32|0,f,g,u,B,d,e,o,q);c=H[k+40>>2];i=c<<1;c=H[k+44>>2]<<1|c>>>31;m=H[k+36>>2];h=m;b=H[k+56>>2];m=h>>>31|i;i=b-m|0;l=H[k+60>>2]-((b>>>0>>0)+c|0)|0;c=H[k+32>>2];h=h<<1|c>>>31;c=c<<1;z=H[k+52>>2];j=z;b=H[k+48>>2];j=(h|0)==(j|0)&c>>>0>b>>>0|h>>>0>j>>>0;w=i-j|0;p=l-(i>>>0>>0)|0;i=b;b=i-c|0;j=z-((c>>>0>i>>>0)+h|0)|0}rb(k+16|0,f,g,u,B,3,0,0,0);rb(k,f,g,u,B,5,0,0,0);i=d;c=e;l=f;f=g;r=o;m=0;h=j+m|0;n=d&1;d=b+n|0;h=d>>>0>>0?h+1|0:h;o=d;g=h;l=(h|0)==(f|0)&d>>>0>l>>>0|f>>>0>>0;d=(h|0)==(m|0)&n>>>0>d>>>0|h>>>0>>0;b=d+w|0;j=p;j=b>>>0>>0?j+1|0:j;h=b;f=j;d=(h|0)==(u|0)&(j|0)==(B|0)?l:(B|0)==(j|0)&h>>>0>u>>>0|j>>>0>B>>>0;b=i+d|0;j=e;j=b>>>0>>0?j+1|0:j;d=b;b=j;e=(j|0)==(c|0)&d>>>0>>0|c>>>0>j>>>0;c=r+e|0;j=q;i=c;j=i>>>0>>0?j+1|0:j;c=j;e=d;l=i;d=H[k+20>>2];m=(d|0)==(g|0)&K[k+16>>2]>>0|d>>>0>>0;d=H[k+28>>2];i=H[k+24>>2];i=j>>>0<2147418112&((h|0)==(i|0)&(d|0)==(f|0)?m:(d|0)==(f|0)&i>>>0>>0|d>>>0>>0);d=e+i|0;j=b;j=d>>>0>>0?j+1|0:j;i=d;d=j;e=(j|0)==(b|0)&e>>>0>i>>>0|b>>>0>j>>>0;b=l+e|0;j=c;j=b>>>0>>0?j+1|0:j;e=j;l=b;b=H[k+4>>2];g=(b|0)==(g|0)&K[k>>2]>>0|b>>>0>>0;b=H[k+12>>2];c=H[k+8>>2];c=j>>>0<2147418112&((c|0)==(h|0)&(b|0)==(f|0)?g:(b|0)==(f|0)&c>>>0>>0|b>>>0>>0);b=c+i|0;j=d;j=b>>>0>>0?j+1|0:j;c=j;f=(d|0)==(j|0)&b>>>0>>0|d>>>0>j>>>0;d=l+f|0;j=e;D=d|D;t=t|(d>>>0>>0?j+1|0:j)}H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=D;H[a+12>>2]=t;oa=k+336|0}function rq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=oa-48|0;oa=e;m=I[b+208|0];a:{if(Mj(b)){if(!I[b+224|0]){j=b+184|0;h=b+160|0;n=I[7820];while(1){H[b+248>>2]=0;H[b+252>>2]=0;F[b+246|0]=0;b:{if(I[b+226|0]){F[b+226|0]=0;break b}if(!Lj(b)){Ld(b);qa[H[H[b>>2]+24>>2]](a,b,b+148|0);break a}if(!(!m|I[b+192|0]!=123)){F[b+195|0]=123}o=g;g=0}c:{if(I[b+213|0]){fe(b);if((H[b+200>>2]+1|0)!=(wa(h)|0)){break c}F[b+233|0]=1;F[b+213|0]=0;F[b+221|0]=1;F[b+192|0]=0;break c}d:{if(I[b+214|0]){if(!Kd(b,22212)){break d}F[b+232|0]=1;F[b+214|0]=0;Jd(b,22212,1);ee(b,1);break c}if(I[b+217|0]){if(I[b+218|0]){F[b+218|0]=0;break d}c=I[b+192|0];if((c|0)==92){F[b+218|0]=1;break d}if((c|0)!=I[b+196|0]){break d}F[b+217|0]=0;break d}if(Db(F[b+192|0])|I[b+215|0]){break d}if(Kd(b,22188)){F[b+213|0]=1;if(I[b+209|0]){Fc(b)}Jd(b,22188,1);ee(b,1);break c}if(Kd(b,22200)){F[b+214|0]=1;if(I[b+209|0]){Fc(b)}Jd(b,22200,1);ee(b,1);break c}c=I[b+192|0];if((c|0)==34){F[b+196|0]=34;F[b+217|0]=1;break d}e:{if((c|0)!=(n|0)){break e}if(!ld(b,21876)){break e}F[b+215|0]=1;break d}if(I[b+215|0]){break d}if(I[b+232|0]){F[b+232|0]=0;g=1}if(I[b+233|0]){F[b+233|0]=0;k=1}if(I[b+228|0]){F[b+226|0]=1;F[b+228|0]=0;Ld(b);break c}f:{if(!I[b+245|0]){break f}F[b+245|0]=0;if(!I[b+227|0]){break f}if(I[b+229|0]){F[b+221|0]=1;break f}c=ld(b,21852);if((c|0)==21924?H[b+184>>2]==21936:0){break f}F[b+221|0]=1;if(!I[b+210|0]){break f}c=ld(b,21900);H[b+248>>2]=c;if(c){break f}c=H[j>>2];if(!((c|0)!=21936?(c|0)==21972|(c|0)==21948|(c|0)==21924:1)){break f}F[b+192|0]=98;c=xa(e+32|0,3101);Kj(h,H[b+200>>2],c);F[b+247|0]=1;va(c)}g:{if(I[b+230|0]){F[b+230|0]=0;if(!H[Qa(H[b+144>>2])>>2]){break g}}if(I[b+231|0]){F[b+231|0]=0;if(!H[Qa(H[b+144>>2])>>2]){break g}}h:{i:{j:{k:{l:{m:{c=I[b+192|0];switch(c-123|0){case 2:break j;case 0:break l;default:break m}}if(H[b+204>>2]){n:{o:{p:{switch(c-98|0){case 3:case 8:d=ld(b,21912);H[b+252>>2]=d;f=125;if(d){break o}break n;default:if(c-115>>>0>=2){break n}break;case 1:case 2:case 5:case 6:case 7:break n;case 0:case 4:break p}}d=ld(b,21900);H[b+248>>2]=d;f=123;if(!d){break n}}F[b+192|0]=f;H[b+200>>2]=(H[b+200>>2]+wa(d)|0)-1}c=I[b+192|0]}q:{c=c&255;switch(c-40|0){case 1:break i;case 0:break k;default:break q}}switch(c-91|0){case 2:break i;case 0:break k;default:break h}}F[b+192|0]=91;F[b+246|0]=1}c=Qa(H[b+144>>2]);H[c>>2]=H[c>>2]+1;break h}F[b+192|0]=93;F[b+246|0]=1}c=Qa(H[b+144>>2]);H[c>>2]=H[c>>2]-1;if(!I[b+244|0]){break h}if(H[Qa(H[b+144>>2])>>2]){break h}G[b+244>>1]=256}r:{s:{switch(I[b+192|0]-123|0){case 0:c=H[b+144>>2];H[e+32>>2]=0;ya(c,e+32|0);xc(H[b+140>>2],j);H[b+184>>2]=0;break r;case 2:break s;default:break r}}if(!mb(H[b+144>>2])){ob(H[b+144>>2])}F[b+237|0]=0;if(!mb(H[b+140>>2])){H[b+184>>2]=H[Qa(H[b+140>>2])>>2];ob(H[b+140>>2]);break r}H[j>>2]=0}t:{c=H[b+204>>2];if(!c){break t}u:{switch(I[b+192|0]-123|0){case 0:if(!((c|0)!=1|k)){Fc(b);v:{if(g){break v}w:{x:{c=I[b+195|0];switch(c-123|0){case 0:case 2:break v;case 1:break w;default:break x}}if((c|0)==59){break v}}k=0;de(b,0);g=0;break c}de(b,1);k=0;break c}if(!(!I[b+225|0]|(c|0)!=2)){Ld(b)}de(b,1);break c;case 2:break u;default:break t}}y:{if(I[b+225|0]){Ld(b);de(b,1);break y}if(!g){F[b+221|0]=0}de(b,1);if(!I[b+225|0]){break y}F[b+228|0]=1}if(!I[b+234|0]){break c}F[b+237|0]=1;break c}z:{A:{B:{switch(I[b+195|0]-123|0){case 2:if(o&1){break z}if((af(b)|0)==32){break z}if(I[b+225|0]){break A}break z;case 0:break B;default:break z}}if(!I[b+225|0]){break z}}F[b+221|0]=1;c=I[b+195|0];F[b+195|0]=32;p=(c|0)==125;q=(c|0)==123}c=ld(b,21852);H[e+44>>2]=c;if(c){f=H[b+184>>2];H[b+184>>2]=c;H[e+32>>2]=ak(Ed(21864),Xc(21864),e+44|0);H[e+16>>2]=Xc(21864);F[b+219|0]=zb(e+32|0,e+16|0);Jd(b,H[b+184>>2],1);ee(b,wa(H[b+184>>2])-1|0);d=I[b+219|0];if(!(d|!I[b+209|0])){Fc(b);d=I[b+219|0]}F[b+244|0]=1;if(d&255){G[b+244>>1]=256}c=H[j>>2];if(!((c|0)!=21924|(f|0)!=21936)){F[b+221|0]=0}if(!I[b+234|0]){break c}c=(c|0)==21936|k|g;if(f|q?c:1){F[b+236|0]=(c^-1)&1}if(!I[b+235|0]|!p){break c}F[b+236|0]=1;break c}d=I[b+192|0];if(!((d|0)!=59?I[b+194|0]!=125:0)){C:{if(!I[b+225|0]|(!I[b+227|0]|(d&255)!=59)){break C}F[b+230|0]=1;if(!I[b+247|0]){break C}F[b+247|0]=0;c=xa(e+32|0,3164);Kj(h,H[b+200>>2]+1|0,c);va(c);d=I[b+192|0]}if((d&255)!=59){H[j>>2]=0}F[b+220|0]=0}c=d&255;D:{if((c|0)!=63){if((c|0)!=58){break D}E:{switch(I[b+194|0]-123|0){case 0:case 2:F[b+221|0]=0;fe(b);if(I[b+225|0]){F[b+228|0]=1}F[b+213|0]=1;break c;default:break E}}if(I[b+220|0]|!I[b+227|0]|I[b+195|0]==41){break D}F[b+231|0]=1;break D}d=h;f=H[b+200>>2];i=Aa(d,f);F:{G:{if((f|0)<0){break G}H:{I:{while(1){i=F[i|0];if(Db(i)){break G}J:{K:{L:{M:{c=i&255;if(c>>>0<=94){l=c-48|0;if(l>>>0<=15){break M}break L}N:{switch(c-120|0){case 1:break J;case 0:case 2:break K;default:break N}}switch(c-95|0){case 3:break I;case 0:break K;default:break J}}if(!(1<0;f=f-1|0;i=Aa(d,f);if(l){continue}break H}break}if((i|0)!=66){break G}}c=0;if((f|0)<=0){break H}c=I[Aa(d,f-1|0)|0]==39}break F}c=0}if(c){break D}F[b+220|0]=1}O:{if(!I[b+209|0]){break O}d=ld(b,21888);H[e+44>>2]=d;if(!d){break O}f=0;P:{if((d|0)==22320|(d|0)==22332|((d|0)==22308|(d|0)==22296)|((d|0)==22572|(d|0)==22536|((d|0)==22416|(d|0)==22428))){break P}if((d|0)==22452){if(Jj(b)){break P}d=H[e+44>>2]}if((d|0)==22440){if(Jj(b)){break P}d=H[e+44>>2]}Q:{R:{if((d|0)==22608){if(I[b+220|0]){break R}break Q}f=1;if((d|0)==22632|(d|0)==22620){break P}}Fc(b)}f=1}Jd(b,H[e+44>>2],1);ee(b,wa(H[e+44>>2])-1|0);c=b;d=H[e+44>>2];if(!((d|0)!=22428?(d|0)!=22416:0)){d=Qa(H[b+144>>2]);H[d>>2]=H[d>>2]-1;d=H[e+44>>2]}F[c+192|0]=I[Aa(d,wa(d)-1|0)|0];S:{if(!f){break S}if(H[e+44>>2]==22452){c=F[b+195|0];f=vj(c);d=!f;T:{if(f){break T}c=c-41|0;if((c&255)>>>0>=53){break T}d=c&31;d=((c&63)>>>0>=32?1048575>>>d|0:((1<>>d)&1}if(d){break S}}Fc(b)}H[b+188>>2]=H[e+44>>2];break c}if(!I[b+211|0]){break d}U:{V:{W:{X:{c=I[b+192|0];switch(c-40|0){case 1:break V;case 0:break W;default:break X}}switch(c-91|0){case 2:break V;case 0:break W;default:break d}}c=af(b);fe(b);d=I[b+192|0];if((c|0)==41?(d|0)==40:0){break c}if((d|0)!=91){break U}if((c|0)==93){break c}break U}c=af(b);d=I[b+193|0];f=I[b+192|0];if(!(((f|0)==41?(d|0)==40:0)|((f|0)==93?(d|0)==91:0))){Fc(b)}fe(b);Y:{Z:{d=c&255;switch(d-44|0){case 1:break Y;case 0:case 2:break c;default:break Z}}if((d|0)==59){break c}}if(I[b+192|0]!=93){break U}if((c|0)==91){break c}}Fc(b);break c}F[b+221|0]=1;F[b+226|0]=1;break c}fe(b)}if(!I[b+224|0]){continue}break}}g=Ea(e+32|0);c=b+148|0;cf(e+16|0,c);h=wa(e+16|0);va(e+16|0);_:{if(!(!I[b+238|0]|(h|0)<1|H[b+240>>2]<1)){F[b+224|0]=1;c=xa(e,7628);qa[H[H[b>>2]+24>>2]](e+16|0,b,c);Ua(g,e+16|0);va(e+16|0);va(c);break _}F[b+224|0]=0;qa[H[H[b>>2]+24>>2]](e+16|0,b,c);Ua(g,e+16|0);va(e+16|0)}H[b+240>>2]=h;F[b+238|0]=0;Vd(a,g);va(g);break a}ek(a,b)}oa=e+48|0}function go(a,b,c,d,e,f){a=a|0;b=+b;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,B=0,C=0;j=oa-560|0;oa=j;H[j+44>>2]=0;A(+b);g=v(1)|0;v(0)|0;a:{if((g|0)<-1?1:(g|0)<=-1){u=1;w=1192;b=-b;A(+b);g=v(1)|0;v(0)|0;break a}if(e&2048){u=1;w=1195;break a}u=e&1;w=u?1198:1193;C=!u}b:{if((g&2146435072)==2146435072){n=u+3|0;Jb(a,32,c,n,e&-65537);sb(a,w,u);d=f&32;sb(a,b!=b?d?1807:2603:d?2029:2634,3);break b}s=j+16|0;c:{d:{e:{b=rj(b,j+44|0);b=b+b;if(b!=0){g=H[j+44>>2];H[j+44>>2]=g-1;x=f|32;if((x|0)!=97){break e}break c}x=f|32;if((x|0)==97){break c}l=H[j+44>>2];m=(d|0)<0?6:d;break d}l=g-29|0;H[j+44>>2]=l;b=b*268435456;m=(d|0)<0?6:d}q=(l|0)<0?j+48|0:j+336|0;h=q;while(1){d=h;if(b<4294967296&b>=0){g=~~b>>>0}else{g=0}H[d>>2]=g;h=h+4|0;b=(b-+(g>>>0))*1e9;if(b!=0){continue}break}f:{if((l|0)<1){d=l;g=h;i=q;break f}i=q;d=l;while(1){r=(d|0)<29?d:29;g=h-4|0;g:{if(i>>>0>g>>>0){break g}d=r;o=0;while(1){p=g;n=0;z=o;o=H[g>>2];k=d&31;if((d&63)>>>0>=32){B=o<>>32-k;k=o<>>0>o>>>0?n+1|0:n;k=o;o=Fq(k,n,1e9);z=p;p=Eq(o,pa,1e9,0);H[z>>2]=k-p;g=g-4|0;if(i>>>0<=g>>>0){continue}break}d=o;if(!d){break g}i=i-4|0;H[i>>2]=d}while(1){g=h;if(i>>>0>>0){h=g-4|0;if(!H[h>>2]){continue}}break}d=H[j+44>>2]-r|0;H[j+44>>2]=d;h=g;if((d|0)>0){continue}break}}h=(m+25|0)/9|0;if((d|0)<=-1){r=h+1|0;y=(x|0)==102;while(1){o=(d|0)<-9?9:0-d|0;h:{if(g>>>0>i>>>0){p=1e9>>>o|0;k=-1<>2];H[h>>2]=z+(d>>>o|0);d=N(p,d&k);h=h+4|0;if(h>>>0>>0){continue}break}i=H[i>>2]?i:i+4|0;if(!d){break h}H[g>>2]=d;g=g+4|0;break h}i=H[i>>2]?i:i+4|0}d=H[j+44>>2]+o|0;H[j+44>>2]=d;h=y?q:i;g=(r|0)>2?h+(r<<2)|0:g;if((d|0)<0){continue}break}}h=0;i:{if(g>>>0<=i>>>0){break i}h=N(q-i>>2,9);d=10;k=H[i>>2];if(k>>>0<10){break i}while(1){h=h+1|0;d=N(d,10);if(k>>>0>=d>>>0){continue}break}}d=(m-((x|0)==102?0:h)|0)-((x|0)==103&(m|0)!=0)|0;if((d|0)<(N(g-q>>2,9)-9|0)){p=d+9216|0;k=(p|0)/9|0;n=((k<<2)+((l|0)<0?j+48|4:j+340|0)|0)-4096|0;d=10;p=p-N(k,9)|0;if((p|0)<=7){while(1){d=N(d,10);p=p+1|0;if((p|0)!=8){continue}break}}p=H[n>>2];k=(p>>>0)/(d>>>0)|0;r=p-N(d,k)|0;l=n+4|0;j:{if(!((l|0)==(g|0)?r:1)){break j}b=(g|0)==(l|0)?1:1.5;l=d>>>1|0;t=l>>>0>r>>>0?.5:(l|0)==(r|0)?b:1.5;b=k&1?9007199254740994:9007199254740992;if(!(I[w|0]!=45|C)){t=-t;b=-b}l=p-r|0;H[n>>2]=l;if(b+t==b){break j}d=d+l|0;H[n>>2]=d;if(d>>>0>=1e9){while(1){H[n>>2]=0;n=n-4|0;if(n>>>0>>0){i=i-4|0;H[i>>2]=0}d=H[n>>2]+1|0;H[n>>2]=d;if(d>>>0>999999999){continue}break}}h=N(q-i>>2,9);d=10;l=H[i>>2];if(l>>>0<10){break j}while(1){h=h+1|0;d=N(d,10);if(l>>>0>=d>>>0){continue}break}}d=n+4|0;g=d>>>0>>0?d:g}while(1){k=g;l=g>>>0<=i>>>0;if(!l){g=k-4|0;if(!H[g>>2]){continue}}break}k:{if((x|0)!=103){o=e&8;break k}g=m?m:1;d=(g|0)>(h|0)&(h|0)>-5;m=(d?h^-1:-1)+g|0;f=(d?-1:-2)+f|0;o=e&8;if(o){break k}g=-9;l:{if(l){break l}l=H[k-4>>2];if(!l){break l}p=10;g=0;if((l>>>0)%10|0){break l}while(1){d=g;g=g+1|0;p=N(p,10);if(!((l>>>0)%(p>>>0)|0)){continue}break}g=d^-1}d=N(k-q>>2,9);if((f&-33)==70){o=0;d=(d+g|0)-9|0;d=(d|0)>0?d:0;m=(d|0)>(m|0)?m:d;break k}o=0;d=((d+h|0)+g|0)-9|0;d=(d|0)>0?d:0;m=(d|0)>(m|0)?m:d}r=(m|o)!=0;d=a;l=c;p=f&-33;if((p|0)==70){f=(h|0)>0?h:0}else{g=h>>31;g=Id(g+h^g,0,s);if((s-g|0)<=1){while(1){g=g-1|0;F[g|0]=48;if((s-g|0)<2){continue}break}}y=g-2|0;F[y|0]=f;F[g-1|0]=(h|0)<0?45:43;f=s-y|0}n=(f+(r+(m+u|0)|0)|0)+1|0;Jb(d,32,l,n,e);sb(a,w,u);Jb(a,48,c,n,e^65536);m:{n:{o:{if((p|0)==70){d=j+16|8;h=j+16|9;f=i>>>0>q>>>0?q:i;i=f;while(1){g=Id(H[i>>2],0,h);p:{if((f|0)!=(i|0)){if(j+16>>>0>=g>>>0){break p}while(1){g=g-1|0;F[g|0]=48;if(j+16>>>0>>0){continue}break}break p}if((g|0)!=(h|0)){break p}F[j+24|0]=48;g=d}sb(a,g,h-g|0);i=i+4|0;if(q>>>0>=i>>>0){continue}break}g=0;if(!r){break n}sb(a,2981,1);if((m|0)<1|i>>>0>=k>>>0){break o}while(1){g=Id(H[i>>2],0,h);if(g>>>0>j+16>>>0){while(1){g=g-1|0;F[g|0]=48;if(j+16>>>0>>0){continue}break}}sb(a,g,(m|0)<9?m:9);g=m-9|0;i=i+4|0;if(k>>>0<=i>>>0){break n}d=(m|0)>9;m=g;if(d){continue}break}break n}q:{if((m|0)<0){break q}f=i>>>0>>0?k:i+4|0;l=j+16|9;d=j+16|8;h=i;while(1){g=Id(H[h>>2],0,l);if((l|0)==(g|0)){F[j+24|0]=48;g=d}r:{if((h|0)!=(i|0)){if(j+16>>>0>=g>>>0){break r}while(1){g=g-1|0;F[g|0]=48;if(j+16>>>0>>0){continue}break}break r}sb(a,g,1);g=g+1|0;if(o?0:(m|0)<=0){break r}sb(a,2981,1)}k=g;g=l-g|0;sb(a,k,(g|0)<(m|0)?g:m);m=m-g|0;h=h+4|0;if(f>>>0<=h>>>0){break q}if((m|0)>-1){continue}break}}Jb(a,48,m+18|0,18,0);sb(a,y,s-y|0);break m}g=m}Jb(a,48,g+9|0,9,0)}break b}m=f&32;q=m?w+9|0:w;s:{if(d>>>0>11){break s}g=12-d|0;if(!g){break s}t=8;while(1){t=t*16;g=g-1|0;if(g){continue}break}if(I[q|0]==45){b=-(t+(-b-t));break s}b=b+t-t}g=H[j+44>>2];h=g>>31;g=Id(h^g+h,0,s);if((s|0)==(g|0)){F[j+15|0]=48;g=j+15|0}l=u|2;h=H[j+44>>2];k=g-2|0;F[k|0]=f+15;F[g-1|0]=(h|0)<0?45:43;g=e&8;i=j+16|0;while(1){f=i;o=m;if(P(b)<2147483648){h=~~b}else{h=-2147483648}F[i|0]=o|I[h+8400|0];b=(b-+(h|0))*16;i=f+1|0;if(!(!(g?1:(d|0)>0|b!=0)|(i-(j+16|0)|0)!=1)){F[f+1|0]=46;i=f+2|0}if(b!=0){continue}break}f=!d|((i-j|0)-18|0)>=(d|0)?(s-(k+(j+16|0)|0)|0)+i|0:((d+s|0)-k|0)+2|0;n=f+l|0;Jb(a,32,c,n,e);sb(a,q,l);Jb(a,48,c,n,e^65536);d=i-(j+16|0)|0;sb(a,j+16|0,d);g=d;d=s-k|0;Jb(a,48,f-(g+d|0)|0,0,0);sb(a,k,d)}Jb(a,32,c,n,e^8192);oa=j+560|0;return((c|0)>(n|0)?c:n)|0}function hg(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=oa-80|0;oa=f;H[f+76>>2]=b;t=f+55|0;r=f+56|0;b=0;a:{b:while(1){c:{if((n|0)<0){break c}if((2147483647-n|0)<(b|0)){H[6070]=61;n=-1;break c}n=b+n|0}d:{e:{f:{j=H[f+76>>2];b=j;h=I[b|0];if(h){while(1){g:{h=h&255;h:{if(!h){h=b;break h}if((h|0)!=37){break g}h=b;while(1){if(I[b+1|0]!=37){break h}g=b+2|0;H[f+76>>2]=g;h=h+1|0;k=I[b+2|0];b=g;if((k|0)==37){continue}break}}b=h-j|0;if(a){sb(a,j,b)}if(b){continue b}o=-1;h=1;g=f;p=!Rb(F[H[f+76>>2]+1|0]);b=H[f+76>>2];if(!(p|I[b+2|0]!=36)){o=F[b+1|0]-48|0;s=1;h=3}b=h+b|0;H[g+76>>2]=b;q=0;i=F[b|0];g=i-32|0;i:{if(g>>>0>31){h=b;break i}h=b;g=1<>2]=h;q=g|q;i=F[b+1|0];g=i-32|0;if(g>>>0>=32){break i}b=h;g=1<>2];if(I[b+2|0]!=36){break l}H[((F[b+1|0]<<2)+e|0)-192>>2]=10;l=H[((F[b+1|0]<<3)+d|0)-384>>2];s=1;b=b+3|0;break k}if(s){break f}s=0;l=0;if(a){b=H[c>>2];H[c>>2]=b+4;l=H[b>>2]}b=H[f+76>>2]+1|0}H[g+76>>2]=b;if((l|0)>-1){break j}l=0-l|0;q=q|8192;break j}l=qj(f+76|0);if((l|0)<0){break f}b=H[f+76>>2]}k=-1;m:{if(I[b|0]!=46){break m}if(I[b+1|0]==42){n:{if(!Rb(F[b+2|0])){break n}b=H[f+76>>2];if(I[b+3|0]!=36){break n}H[((F[b+2|0]<<2)+e|0)-192>>2]=10;k=H[((F[b+2|0]<<3)+d|0)-384>>2];b=b+4|0;H[f+76>>2]=b;break m}if(s){break f}if(a){b=H[c>>2];H[c>>2]=b+4;k=H[b>>2]}else{k=0}b=H[f+76>>2]+2|0;H[f+76>>2]=b;break m}H[f+76>>2]=b+1;k=qj(f+76|0);b=H[f+76>>2]}h=0;while(1){p=h;m=-1;if(F[b|0]-65>>>0>57){break a}i=b+1|0;H[f+76>>2]=i;h=F[b|0];b=i;h=I[(h+N(p,58)|0)+7871|0];if(h-1>>>0<8){continue}break}o:{p:{if((h|0)!=19){if(!h){break a}if((o|0)>=0){H[(o<<2)+e>>2]=h;b=(o<<3)+d|0;h=H[b+4>>2];H[f+64>>2]=H[b>>2];H[f+68>>2]=h;break p}if(!a){break d}pj(f- -64|0,h,c);i=H[f+76>>2];break o}if((o|0)>-1){break a}}b=0;if(!a){continue b}}g=q&-65537;h=q&8192?g:q;m=0;o=1182;q=r;q:{r:{s:{t:{u:{v:{w:{x:{y:{z:{A:{B:{C:{D:{E:{F:{b=F[i-1|0];b=p?(b&15)==3?b&-33:b:b;switch(b-88|0){case 11:break q;case 9:case 13:case 14:case 15:break r;case 27:break w;case 12:case 17:break z;case 23:break A;case 0:case 32:break B;case 24:break C;case 22:break D;case 29:break E;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 10:case 16:case 18:case 19:case 20:case 21:case 25:case 26:case 28:case 30:case 31:break e;default:break F}}G:{switch(b-65|0){case 0:case 4:case 5:case 6:break r;case 2:break u;case 1:case 3:break e;default:break G}}if((b|0)==83){break v}break e}i=H[f+64>>2];g=H[f+68>>2];o=1182;break y}b=0;H:{switch(p&255){case 0:H[H[f+64>>2]>>2]=n;continue b;case 1:H[H[f+64>>2]>>2]=n;continue b;case 2:h=H[f+64>>2];H[h>>2]=n;H[h+4>>2]=n>>31;continue b;case 3:G[H[f+64>>2]>>1]=n;continue b;case 4:F[H[f+64>>2]]=n;continue b;case 6:H[H[f+64>>2]>>2]=n;continue b;case 7:break H;default:continue b}}h=H[f+64>>2];H[h>>2]=n;H[h+4>>2]=n>>31;continue b}k=k>>>0>8?k:8;h=h|8;b=120}j=r;u=b&32;p=H[f+68>>2];g=p;i=H[f+64>>2];if(g|i){while(1){j=j-1|0;F[j|0]=u|I[(i&15)+8400|0];v=!g&i>>>0>15|(g|0)!=0;p=g;g=g>>>4|0;i=(p&15)<<28|i>>>4;if(v){continue}break}}if(!(h&8)|!(H[f+64>>2]|H[f+68>>2])){break x}o=(b>>>4|0)+1182|0;m=2;break x}b=r;j=H[f+68>>2];g=j;i=H[f+64>>2];if(g|i){while(1){b=b-1|0;F[b|0]=i&7|48;p=!g&i>>>0>7|(g|0)!=0;j=g;g=g>>>3|0;i=(j&7)<<29|i>>>3;if(p){continue}break}}j=b;if(!(h&8)){break x}b=r-j|0;k=(b|0)<(k|0)?k:b+1|0;break x}b=H[f+68>>2];g=b;i=H[f+64>>2];if((b|0)<-1?1:(b|0)<=-1){g=0-(g+((i|0)!=0)|0)|0;i=0-i|0;H[f+64>>2]=i;H[f+68>>2]=g;m=1;o=1182;break y}if(h&2048){m=1;o=1183;break y}m=h&1;o=m?1184:1182}j=Id(i,g,r)}h=(k|0)>-1?h&-65537:h;b=H[f+68>>2];g=b;i=H[f+64>>2];if(!((i|0)!=0|(b|0)!=0|k)){k=0;j=r;break e}b=!(g|i)+(r-j|0)|0;k=(b|0)<(k|0)?k:b;break e}b=H[f+64>>2];j=b?b:3003;b=tj(j,k);q=b?b:k+j|0;h=g;k=b?b-j|0:k;break e}g=H[f+64>>2];if(k){break t}b=0;Jb(a,32,l,0,h);break s}H[f+12>>2]=0;H[f+8>>2]=H[f+64>>2];H[f+64>>2]=f+8;k=-1;g=f+8|0}b=0;I:{while(1){j=H[g>>2];if(!j){break I}j=sj(f+4|0,j);i=(j|0)<0;if(!(i|j>>>0>k-b>>>0)){g=g+4|0;b=b+j|0;if(k>>>0>b>>>0){continue}break I}break}m=-1;if(i){break a}}Jb(a,32,l,b,h);if(!b){b=0;break s}g=0;i=H[f+64>>2];while(1){j=H[i>>2];if(!j){break s}j=sj(f+4|0,j);g=j+g|0;if((g|0)>(b|0)){break s}sb(a,f+4|0,j);i=i+4|0;if(b>>>0>g>>>0){continue}break}}Jb(a,32,l,b,h^8192);b=(b|0)<(l|0)?l:b;continue b}b=qa[144](a,M[f+64>>3],l,k,h,b)|0;continue b}F[f+55|0]=H[f+64>>2];k=1;j=t;h=g;break e}g=b+1|0;H[f+76>>2]=g;h=I[b+1|0];b=g;continue}}m=n;if(a){break a}if(!s){break d}b=1;while(1){a=H[(b<<2)+e>>2];if(a){pj((b<<3)+d|0,a,c);m=1;b=b+1|0;if((b|0)!=10){continue}break a}break}m=1;if(b>>>0>=10){break a}while(1){if(H[(b<<2)+e>>2]){break f}b=b+1|0;if((b|0)!=10){continue}break}break a}m=-1;break a}i=q-j|0;k=(i|0)>(k|0)?i:k;g=k+m|0;b=(g|0)>(l|0)?g:l;Jb(a,32,b,g,h);sb(a,o,m);Jb(a,48,b,g,h^65536);Jb(a,48,k,i,0);sb(a,j,i);Jb(a,32,b,g,h^8192);continue}break}m=0}oa=f+80|0;return m}function Ta(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;l=oa-96|0;oa=l;p=c;u=(g&131071)<<15|f>>>17;j=i&65535;s=j;k=h;B=k<<15|g>>>17;n=(e^i)&-2147483648;o=e&65535;w=o;m=d;x=o;o=0;C=(j&131071)<<15|k>>>17;D=i>>>16&32767;L=e>>>16&32767;a:{b:{if(L-1>>>0<=32765){j=0;if(D-1>>>0<32766){break b}}q=e&2147483647;v=q;j=d;if(!(!j&(q|0)==2147418112?!(b|c):q>>>0<2147418112)){y=d;n=e|32768;break a}e=i&2147483647;q=e;d=h;if(!(!d&(e|0)==2147418112?!(f|g):e>>>0<2147418112)){y=h;n=i|32768;b=f;c=g;break a}if(!(b|j|(v^2147418112|c))){if(!(d|f|(g|q))){n=2147450880;b=0;c=0;break a}n=n|2147418112;b=0;c=0;break a}if(!(d|f|(q^2147418112|g))){d=b|j;e=c|v;b=0;c=0;if(!(d|e)){n=2147450880;break a}n=n|2147418112;break a}if(!(b|j|(c|v))){b=0;c=0;break a}if(!(d|f|(g|q))){b=0;c=0;break a}if((v|0)==65535|v>>>0<65535){h=b;i=c;d=!(m|w);e=d<<6;j=Q(d?b:m)+32|0;b=Q(d?c:w);b=e+((b|0)==32?j:b)|0;xb(l+80|0,h,i,m,w,b-15|0);m=H[l+88>>2];p=H[l+84>>2];x=H[l+92>>2];t=16-b|0;b=H[l+80>>2]}j=t;if(q>>>0>65535){break b}c=!(k|s);d=c<<6;e=Q(c?f:k)+32|0;c=Q(c?g:s);c=d+((c|0)==32?e:c)|0;i=c;xb(l- -64|0,f,g,k,s,c-15|0);e=H[l+76>>2];c=e;h=H[l+72>>2];d=h;d=d<<15;e=H[l+68>>2];B=e>>>17|d;d=0;f=H[l+64>>2];u=d|((e&131071)<<15|f>>>17);C=(c&131071)<<15|h>>>17;j=(t-i|0)+16|0}t=j;d=u;c=b;s=0;q=Eq(d,0,b,s);b=pa;E=b;e=f;z=e<<15&-32768;k=p;g=Eq(z,0,k,0);f=g+q|0;e=pa+b|0;e=f>>>0>>0?e+1|0:e;h=f;j=f;i=0;g=Eq(c,s,z,A);f=i+g|0;b=j;j=j+pa|0;j=f>>>0>>0?j+1|0:j;u=f;g=j;I=(b|0)==(j|0)&f>>>0>>0|b>>>0>j>>>0;M=Eq(d,r,k,F);J=pa;p=m;f=Eq(z,A,m,0);b=f+M|0;j=pa+J|0;N=b;m=Eq(B,0,c,s);i=b+m|0;b=b>>>0>>0?j+1|0:j;f=b+pa|0;v=i;f=i>>>0>>0?f+1|0:f;w=f;j=f;f=(e|0)==(E|0)&h>>>0>>0|e>>>0>>0;h=e+v|0;j=f+j|0;q=h;j=h>>>0>>0?j+1|0:j;m=j;e=h;h=j;P=Eq(d,r,p,O);E=pa;f=z;G=x|65536;z=o;i=Eq(f,A,G,o);f=i+P|0;j=pa+E|0;j=f>>>0>>0?j+1|0:j;R=f;A=Eq(B,S,k,F);i=f+A|0;o=j;f=j+pa|0;f=i>>>0>>0?f+1|0:f;K=i;C=C&2147483647|-2147483648;i=Eq(c,s,C,0);c=K+i|0;s=f;j=f+pa|0;A=c;c=c>>>0>>0?j+1|0:j;x=I;i=0;f=i+e|0;j=h+A|0;I=f;h=f;e=x+f|0;x=f>>>0>>0?j+1|0:j;f=x;f=e>>>0>>0?f+1|0:f;h=e;i=f;t=(t+(D+L|0)|0)-16383|0;f=Eq(p,O,B,S);e=pa;r=Eq(d,r,G,z);d=r+f|0;j=pa+e|0;j=d>>>0>>0?j+1|0:j;r=d;f=(e|0)==(j|0)&f>>>0>d>>>0|e>>>0>j>>>0;e=j;D=f;f=Eq(C,T,k,F);d=f+d|0;j=pa+j|0;j=d>>>0>>0?j+1|0:j;f=d;d=j;k=(j|0)==(e|0)&f>>>0>>0|e>>>0>j>>>0;j=D+k|0;e=0;e=j>>>0>>0?1:e;r=f;k=d;D=j;f=(b|0)==(w|0)&v>>>0>>0|b>>>0>w>>>0;b=f+((b|0)==(J|0)&M>>>0>N>>>0|b>>>0>>0)|0;j=0;j=b>>>0>>0?1:j;f=b;b=r+f|0;j=d+j|0;j=b>>>0>>0?j+1|0:j;F=b;d=j;j=(j|0)==(k|0)&b>>>0>>0|j>>>0>>0;b=D+j|0;f=e;f=b>>>0>>0?f+1|0:f;e=Eq(C,T,G,z);b=e+b|0;j=pa+f|0;r=b;e=b>>>0>>0?j+1|0:j;k=Eq(C,T,p,O);f=pa;p=Eq(B,S,G,z);b=p+k|0;j=pa+f|0;j=b>>>0

>>0?j+1|0:j;p=b;b=j;j=(f|0)==(j|0)&k>>>0>p>>>0|f>>>0>j>>>0;k=b+r|0;e=e+j|0;e=k>>>0>>0?e+1|0:e;r=k;k=0;b=k+F|0;j=d+p|0;j=b>>>0>>0?j+1|0:j;f=j;k=(d|0)==(j|0)&b>>>0>>0|d>>>0>j>>>0;d=r+k|0;j=e;B=d;d=d>>>0>>0?j+1|0:j;p=b;k=f;f=(o|0)==(s|0)&R>>>0>K>>>0|o>>>0>s>>>0;e=f+((o|0)==(E|0)&P>>>0>R>>>0|o>>>0>>0)|0;f=e;e=f+((c|0)==(s|0)&A>>>0>>0|c>>>0>>0)|0;f=e;b=c+b|0;e=f+k|0;e=b>>>0>>0?e+1|0:e;o=b;c=b;b=e;e=(e|0)==(k|0)&c>>>0

>>0|e>>>0>>0;c=e+B|0;j=d;j=c>>>0>>0?j+1|0:j;d=c;k=d;e=(m|0)==(x|0)&q>>>0>I>>>0|m>>>0>x>>>0;d=e+((m|0)==(w|0)&q>>>0>>0|m>>>0>>0)|0;f=0;f=d>>>0>>0?1:f;m=d;d=d+o|0;e=b+f|0;e=d>>>0>>0?e+1|0:e;c=(b|0)==(e|0)&d>>>0>>0|b>>>0>e>>>0;b=k+c|0;j=b>>>0>>0?j+1|0:j;c=j;c:{if(j&65536){t=t+1|0;break c}m=g>>>31|0;j=c<<1|b>>>31;b=b<<1|e>>>31;c=j;j=e<<1|d>>>31;d=d<<1|i>>>31;e=j;o=u;j=g<<1|o>>>31;u=o<<1;g=j;j=i<<1|h>>>31;h=h<<1|m;i=j}if((t|0)>=32767){n=n|2147418112;b=0;c=0;break a}d:{if((t|0)<=0){f=1-t|0;if(f>>>0>=128){b=0;c=0;break a}j=t+127|0;xb(l+48|0,u,g,h,i,j);xb(l+32|0,d,e,b,c,j);hd(l+16|0,u,g,h,i,f);hd(l,d,e,b,c,f);u=(H[l+48>>2]|H[l+56>>2])!=0|(H[l+52>>2]|H[l+60>>2])!=0|(H[l+32>>2]|H[l+16>>2]);g=H[l+36>>2]|H[l+20>>2];h=H[l+40>>2]|H[l+24>>2];i=H[l+44>>2]|H[l+28>>2];d=H[l>>2];e=H[l+4>>2];c=H[l+12>>2];b=H[l+8>>2];break d}c=c&65535|t<<16}y=b|y;n=c|n;if(!(!h&(i|0)==-2147483648?!(g|u):(i|0)>-1)){j=e;b=d+1|0;j=b>>>0<1?j+1|0:j;f=b;c=j;f=(e|0)==(j|0)&d>>>0>f>>>0|e>>>0>j>>>0;d=f+y|0;e=n;y=d;n=d>>>0>>0?e+1|0:e;break a}if(h|u|(i^-2147483648|g)){b=d;c=e;break a}c=d&1;b=c+d|0;j=e;j=b>>>0>>0?j+1|0:j;f=b;c=j;e=(e|0)==(j|0)&d>>>0>f>>>0|e>>>0>j>>>0;d=e+y|0;j=n;y=d;n=d>>>0>>0?j+1|0:j}H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=y;H[a+12>>2]=n;oa=l+96|0}function ne(a,b,c){var d=0,e=0,f=0,g=0;e=oa-112|0;oa=e;a:{b:{if(!Ma(b,1813)){if(!Ma(b,2282)){break b}}F[21068]=0;a=1;break a}c:{if(wa(b)>>>0<7){break c}d=xa(e+96|0,2663);f=Ra(b,0,7,d);va(d);if(f){break c}Eb(e+96|0,b,7);if(wa(e+96|0)){bf(21760,e+96|0)}va(e+96|0);a=1;break a}if(Ma(b,1926)){he(a,0);Nd(a,4);ce(a,2);a=1;break a}if(Ma(b,1252)){xg(a,1);Nd(a,2);ce(a,2);a=1;break a}if(Ma(b,1558)){he(a,0);Nd(a,4);ce(a,1);a=1;break a}d:{e:{f:{g:{h:{f=wa(b);if(f){d=xa(e+96|0,1358);if(!Ra(b,0,1,d)){va(d);break f}if(wa(b)>>>0<11){break h}break g}if(wa(b)>>>0>=11){break g}break e}va(d);break e}d=xa(e+80|0,2751);g=Ra(b,0,11,d);va(d);if(f){va(e+96|0)}if(g){break e}}i:{if(!wa(b)){Eb(e+80|0,b,11);break i}d=xa(e- -64|0,1358);Eb(e+80|0,b,Ra(b,0,1,d)?11:1);va(d)}if(!wa(e+80|0)){d=4;break d}d=be(Ca(e+80|0));if(d){break d}Ha(Tb(Tb(H[5266],c),b));va(e+80|0);a=0;break a}j:{k:{l:{m:{n:{f=wa(b);if(f){d=xa(e+80|0,2573);if(!Ra(b,0,1,d)){va(d);break l}if(wa(b)>>>0<17){break n}break m}if(wa(b)>>>0>=17){break m}break k}va(d);break k}d=xa(e- -64|0,2745);g=Ra(b,0,17,d);va(d);if(f){va(e+80|0)}if(g){break k}}o:{if(!wa(b)){Eb(e- -64|0,b,17);break o}d=xa(e+48|0,2573);Eb(e- -64|0,b,Ra(b,0,1,d)?17:1);va(d)}if(!wa(e- -64|0)){d=4;break j}d=be(Ca(e- -64|0));if(d){break j}Ha(Tb(Tb(H[5266],c),b));va(e- -64|0);a=0;break a}p:{if(wa(b)>>>0<10){break p}d=xa(e- -64|0,2510);f=Ra(b,0,10,d);va(d);if(f){break p}vg(a,4,0);a=1;break a}q:{r:{s:{t:{u:{f=wa(b);if(f){d=xa(e- -64|0,1521);if(!Ra(b,0,1,d)){va(d);break s}if(wa(b)>>>0<14){break u}break t}if(wa(b)>>>0>=14){break t}break r}va(d);break r}d=xa(e+48|0,2730);g=Ra(b,0,14,d);va(d);if(f){va(e- -64|0)}if(g){break r}}v:{if(!wa(b)){Eb(e+48|0,b,14);break v}d=xa(e+32|0,1521);Eb(e+48|0,b,Ra(b,0,1,d)?14:1);va(d)}if(!wa(e+48|0)){d=4;break q}d=be(Ca(e+48|0));if(d){break q}Ha(Tb(Tb(H[5266],c),b));va(e+48|0);a=0;break a}w:{if(wa(b)>>>0<13){break w}d=xa(e+48|0,1496);f=Ra(b,0,13,d);va(d);if(f){break w}Nd(a,4);a=1;break a}x:{y:{z:{A:{B:{f=wa(b);if(f){d=xa(e+48|0,2611);if(!Ra(b,0,1,d)){va(d);break z}if(wa(b)>>>0<23){break B}break A}if(wa(b)>>>0>=23){break A}break y}va(d);break y}d=xa(e+32|0,2671);g=Ra(b,0,23,d);va(d);if(f){va(e+48|0)}if(g){break y}}C:{if(!wa(b)){Eb(e+32|0,b,23);break C}d=xa(e+16|0,2611);Eb(e+32|0,b,Ra(b,0,1,d)?23:1);va(d)}if(!wa(e+32|0)){d=40;break x}d=be(Ca(e+32|0));if(d){break x}Ha(Tb(Tb(H[5266],c),b));va(e+32|0);a=0;break a}D:{E:{F:{G:{H:{f=wa(b);if(f){d=xa(e+32|0,1824);if(!Ra(b,0,1,d)){va(d);break F}if(wa(b)>>>0<23){break H}break G}if(wa(b)>>>0>=23){break G}break E}va(d);break E}d=xa(e+16|0,2695);g=Ra(b,0,23,d);va(d);if(f){va(e+32|0)}if(g){break E}}I:{if(!wa(b)){Eb(e+16|0,b,23);break I}d=xa(e,1824);Eb(e+16|0,b,Ra(b,0,1,d)?23:1);va(d)}if(!wa(e+16|0)){d=0;break D}d=be(Ca(e+16|0));if(d){break D}Ha(Tb(Tb(H[5266],c),b));va(e+16|0);a=0;break a}J:{if(!Ma(b,2655)){if(!Ma(b,1392)){break J}}he(a,1);a=1;break a}K:{if(!Ma(b,2632)){if(!Ma(b,1417)){break K}}xg(a,1);a=1;break a}L:{if(!Ma(b,2531)){if(!Ma(b,1911)){break L}}ce(a,2);a=1;break a}M:{if(!Ma(b,2535)){if(!Ma(b,1967)){break M}}ce(a,1);a=1;break a}N:{if(!Ma(b,2601)){if(!Ma(b,1431)){break N}}F[a+225|0]=0;a=1;break a}O:{if(!Ma(b,1683)){if(!Ma(b,1367)){break O}}F[a+227|0]=0;a=1;break a}if(Ma(b,1797)){Hj(a);a=1;break a}P:{if(!Ma(b,1886)){if(!Ma(b,1901)){break P}}Gj(a);a=1;break a}Q:{if(!Ma(b,2599)){if(!Ma(b,1866)){break Q}}Ij(a);Hj(a);Gj(a);a=1;break a}R:{if(!Ma(b,1681)){if(!Ma(b,1575)){break R}}Ij(a);a=1;break a}S:{if(!Ma(b,2651)){if(!Ma(b,1479)){break S}}jk(a,1);a=1;break a}if(Ma(b,1534)){ik(a,1);a=1;break a}if(Ma(b,1510)){F[a+212|0]=1;a=1;break a}if(Ma(b,1849)){Fj(a);F[a+235|0]=1;a=1;break a}if(Ma(b,1452)){Fj(a);a=1;break a}if(Ma(b,1465)){F[a+229|0]=1;a=1;break a}T:{if(!Ma(b,2571)){if(!Ma(b,1266)){break T}}H[5266]=27584;a=1;break a}U:{if(!Ma(b,1250)){if(!Ma(b,1774)){break U}}Ha(Tb(za(H[5266],3129),21772));a=1;break a}Ha(Tb(Tb(H[5266],c),b));a=0;break a}F[a+88|0]=1;H[a+92>>2]=d;va(e+16|0);a=1;break a}kk(a,d);va(e+32|0);a=1;break a}Nd(a,d);va(e+48|0);a=1;break a}vg(a,d,1);va(e- -64|0);a=1;break a}vg(a,d,0);va(e+80|0);a=1}oa=e+112|0;return a}function li(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=oa-560|0;oa=l;H[l+548>>2]=k;H[l+552>>2]=b;H[l+104>>2]=152;q=Ya(l+136|0,l+144|0,l+104|0);b=H[q>>2];H[l+132>>2]=b;H[l+128>>2]=b+400;t=Ea(l+104|0);p=Ea(l+88|0);n=Ea(l+72|0);o=Ea(l+56|0);r=Ea(l+40|0);b=t;k=p;s=n;u=o;m=oa-16|0;oa=m;v=l;a:{if(c){c=ii(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);Ua(u,m);va(m);fc(m,c);Ua(s,m);va(m);F[l+119|0]=ec(c);F[l+118|0]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);Ua(k,m);va(m);b=Mc(c);break a}c=hi(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);Ua(u,m);va(m);fc(m,c);Ua(s,m);va(m);F[l+119|0]=ec(c);F[l+118|0]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);Ua(k,m);va(m);b=Mc(c)}H[v+36>>2]=b;oa=m+16|0;H[j>>2]=H[i>>2];s=e&512;u=s>>>9|0;b=0;c=0;while(1){k=c;b:{c:{d:{e:{if((b|0)==4){break e}if(!Bb(a,l+552|0)){break e}e=0;f:{g:{h:{i:{j:{switch(F[(l+120|0)+b|0]){case 1:if((b|0)==3){break c}if(dc(h,8192,bb(a))){ki(l+24|0,a);Od(r,F[l+24|0]);break i}H[f>>2]=H[f>>2]|4;a=0;break d;case 3:break h;case 0:break j;case 4:break f;case 2:break g;default:break b}}if((b|0)==3){break c}}while(1){if(!Bb(a,l+552|0)){break c}if(!dc(h,8192,bb(a))){break c}ki(l+24|0,a);Od(r,F[l+24|0]);continue}}if((wa(n)|0)==(0-wa(o)|0)){break c}k:{if(wa(n)){if(wa(o)){break k}}d=wa(n);c=bb(a);if(d){if(I[Aa(n,0)|0]==(c&255)){ib(a);c=wa(n)>>>0>1?n:k;break b}F[g|0]=1;break c}if(I[Aa(o,0)|0]!=(c&255)){break c}ib(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}if((bb(a)&255)==I[Aa(n,0)|0]){ib(a);c=wa(n)>>>0>1?n:k;break b}if((bb(a)&255)==I[Aa(o,0)|0]){ib(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}H[f>>2]=H[f>>2]|4;a=0;break d}if(!(k|b>>>0<2)){c=0;if(!(u|(b|0)==2&I[l+123|0]!=0)){break b}}H[l+16>>2]=Ob(p);c=ge(l+24|0,l+16|0);l:{if(!b|I[(b+l|0)+119|0]>1){break l}while(1){m:{H[l+16>>2]=Vc(p);if(!zb(c,l+16|0)){break m}if(!dc(h,8192,F[H[c>>2]])){break m}Wd(c);continue}break}H[l+16>>2]=Ob(p);c=H[c>>2]-H[l+16>>2]|0;if(wa(r)>>>0>=c>>>0){H[l+16>>2]=Vc(r);d=gi(l+16|0,0-c|0);e=Vc(r);m=Ob(p);c=oa-32|0;oa=c;H[c+16>>2]=e;H[c+24>>2]=d;H[c+8>>2]=m;while(1){d=zb(c+24|0,c+16|0);if(!(!d|I[H[c+24>>2]]!=I[H[c+8>>2]])){Wd(c+24|0);Wd(c+8|0);continue}break}oa=c+32|0;if(d^1){break l}}H[l+8>>2]=Ob(p);ge(l+16|0,l+8|0);H[l+24>>2]=H[l+16>>2]}H[l+16>>2]=H[l+24>>2];while(1){n:{H[l+8>>2]=Vc(p);if(!zb(l+16|0,l+8|0)){break n}if(!Bb(a,l+552|0)){break n}if((bb(a)&255)!=I[H[l+16>>2]]){break n}ib(a);Wd(l+16|0);continue}break}if(!s){break c}H[l+8>>2]=Vc(p);if(!zb(l+16|0,l+8|0)){break c}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){o:{if(!Bb(a,l+552|0)){break o}c=bb(a);p:{if(dc(h,2048,c)){d=H[j>>2];if((d|0)==H[l+548>>2]){ji(i,j,l+548|0);d=H[j>>2]}H[j>>2]=d+1;F[d|0]=c;e=e+1|0;break p}if(!wa(t)|!e|I[l+118|0]!=(c&255)){break o}c=H[l+132>>2];if((c|0)==H[l+128>>2]){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e;e=0}ib(a);continue}break}c=H[l+132>>2];if(!(!e|(c|0)==H[q>>2])){if(H[l+128>>2]==(c|0)){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e}q:{if(H[l+36>>2]<1){break q}r:{if(!kb(a,l+552|0)){if((bb(a)&255)==I[l+119|0]){break r}}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){ib(a);if(H[l+36>>2]<1){break q}s:{if(!kb(a,l+552|0)){if(dc(h,2048,bb(a))){break s}}H[f>>2]=H[f>>2]|4;a=0;break d}if(H[j>>2]==H[l+548>>2]){ji(i,j,l+548|0)}c=bb(a);d=H[j>>2];H[j>>2]=d+1;F[d|0]=c;H[l+36>>2]=H[l+36>>2]-1;continue}}c=k;if(H[i>>2]!=H[j>>2]){break b}H[f>>2]=H[f>>2]|4;a=0;break d}t:{if(!k){break t}e=1;while(1){if(wa(k)>>>0<=e>>>0){break t}u:{if(!kb(a,l+552|0)){if((bb(a)&255)==I[Aa(k,e)|0]){break u}}H[f>>2]=H[f>>2]|4;a=0;break d}ib(a);e=e+1|0;continue}}a=1;if(H[q>>2]==H[l+132>>2]){break d}a=0;H[l+24>>2]=0;wb(t,H[q>>2],H[l+132>>2],l+24|0);if(H[l+24>>2]){H[f>>2]=H[f>>2]|4;break d}a=1}va(r);va(o);va(n);va(p);va(t);_a(q);oa=l+560|0;return a}c=k}b=b+1|0;continue}}function ei(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=oa-560|0;oa=l;H[l+548>>2]=k;H[l+552>>2]=b;H[l+96>>2]=152;q=Ya(l+136|0,l+144|0,l+96|0);b=H[q>>2];H[l+132>>2]=b;H[l+128>>2]=b+400;t=Ea(l+96|0);p=bc(l+80|0);n=bc(l- -64|0);o=bc(l+48|0);r=bc(l+32|0);b=t;k=p;s=n;u=o;m=oa-16|0;oa=m;v=l;a:{if(c){c=ci(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);qc(u,m);va(m);fc(m,c);qc(s,m);va(m);H[l+116>>2]=ec(c);H[l+112>>2]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);qc(k,m);va(m);b=Mc(c);break a}c=bi(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);qc(u,m);va(m);fc(m,c);qc(s,m);va(m);H[l+116>>2]=ec(c);H[l+112>>2]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);qc(k,m);va(m);b=Mc(c)}H[v+28>>2]=b;oa=m+16|0;H[j>>2]=H[i>>2];s=e&512;u=s>>>9|0;b=0;c=0;while(1){k=c;b:{c:{d:{e:{if((b|0)==4){break e}if(!Ab(a,l+552|0)){break e}e=0;f:{g:{h:{i:{j:{switch(F[(l+120|0)+b|0]){case 1:if((b|0)==3){break c}if(cc(h,8192,ab(a))){di(l+16|0,a);mf(r,H[l+16>>2]);break i}H[f>>2]=H[f>>2]|4;a=0;break d;case 3:break h;case 0:break j;case 4:break f;case 2:break g;default:break b}}if((b|0)==3){break c}}while(1){if(!Ab(a,l+552|0)){break c}if(!cc(h,8192,ab(a))){break c}di(l+16|0,a);mf(r,H[l+16>>2]);continue}}if((wa(n)|0)==(0-wa(o)|0)){break c}k:{if(wa(n)){if(wa(o)){break k}}d=wa(n);c=ab(a);if(d){if((c|0)==H[Ca(n)>>2]){hb(a);c=wa(n)>>>0>1?n:k;break b}F[g|0]=1;break c}if((c|0)!=H[Ca(o)>>2]){break c}hb(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}if((ab(a)|0)==H[Ca(n)>>2]){hb(a);c=wa(n)>>>0>1?n:k;break b}if((ab(a)|0)==H[Ca(o)>>2]){hb(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}H[f>>2]=H[f>>2]|4;a=0;break d}if(!(k|b>>>0<2)){c=0;if(!(u|(b|0)==2&I[l+123|0]!=0)){break b}}H[l+8>>2]=Ob(p);c=ge(l+16|0,l+8|0);l:{if(!b|I[(b+l|0)+119|0]>1){break l}while(1){m:{H[l+8>>2]=Sc(p);if(!zb(c,l+8|0)){break m}if(!cc(h,8192,H[H[c>>2]>>2])){break m}od(c);continue}break}H[l+8>>2]=Ob(p);c=$j(c,l+8|0);if(wa(r)>>>0>=c>>>0){H[l+8>>2]=Sc(r);d=ai(l+8|0,0-c|0);e=Sc(r);m=Ob(p);c=oa-32|0;oa=c;H[c+16>>2]=e;H[c+24>>2]=d;H[c+8>>2]=m;while(1){d=zb(c+24|0,c+16|0);if(!(!d|H[H[c+24>>2]>>2]!=H[H[c+8>>2]>>2])){od(c+24|0);od(c+8|0);continue}break}oa=c+32|0;if(d^1){break l}}H[l>>2]=Ob(p);ge(l+8|0,l);H[l+16>>2]=H[l+8>>2]}H[l+8>>2]=H[l+16>>2];while(1){n:{H[l>>2]=Sc(p);if(!zb(l+8|0,l)){break n}if(!Ab(a,l+552|0)){break n}if((ab(a)|0)!=H[H[l+8>>2]>>2]){break n}hb(a);od(l+8|0);continue}break}if(!s){break c}H[l>>2]=Sc(p);if(!zb(l+8|0,l)){break c}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){o:{if(!Ab(a,l+552|0)){break o}c=ab(a);p:{if(cc(h,2048,c)){d=H[j>>2];if((d|0)==H[l+548>>2]){xd(i,j,l+548|0);d=H[j>>2]}H[j>>2]=d+4;H[d>>2]=c;e=e+1|0;break p}if(!wa(t)|!e|(c|0)!=H[l+112>>2]){break o}c=H[l+132>>2];if((c|0)==H[l+128>>2]){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e;e=0}hb(a);continue}break}c=H[l+132>>2];if(!(!e|(c|0)==H[q>>2])){if(H[l+128>>2]==(c|0)){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e}q:{if(H[l+28>>2]<1){break q}r:{if(!jb(a,l+552|0)){if((ab(a)|0)==H[l+116>>2]){break r}}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){hb(a);if(H[l+28>>2]<1){break q}s:{if(!jb(a,l+552|0)){if(cc(h,2048,ab(a))){break s}}H[f>>2]=H[f>>2]|4;a=0;break d}if(H[j>>2]==H[l+548>>2]){xd(i,j,l+548|0)}c=ab(a);d=H[j>>2];H[j>>2]=d+4;H[d>>2]=c;H[l+28>>2]=H[l+28>>2]-1;continue}}c=k;if(H[i>>2]!=H[j>>2]){break b}H[f>>2]=H[f>>2]|4;a=0;break d}t:{if(!k){break t}e=1;while(1){if(wa(k)>>>0<=e>>>0){break t}u:{if(!jb(a,l+552|0)){if((ab(a)|0)==H[Qe(k,e)>>2]){break u}}H[f>>2]=H[f>>2]|4;a=0;break d}hb(a);e=e+1|0;continue}}a=1;if(H[q>>2]==H[l+132>>2]){break d}a=0;H[l+16>>2]=0;wb(t,H[q>>2],H[l+132>>2],l+16|0);if(H[l+16>>2]){H[f>>2]=H[f>>2]|4;break d}a=1}va(r);va(o);va(n);va(p);va(t);_a(q);oa=l+560|0;return a}c=k}b=b+1|0;continue}}function an(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;h=oa+-64|0;oa=h;H[h+56>>2]=b;H[e>>2]=0;Ia(h,d);i=Ib(h);Fa(h);a:{b:{c:{d:{switch(g-65|0){case 0:case 32:ti(a,f+24|0,h+56|0,c,e,i);break b;case 1:case 33:case 39:si(a,f+16|0,h+56|0,c,e,i);break b;case 34:g=a;a=qa[H[H[a+8>>2]+12>>2]](a+8|0)|0;H[h+56>>2]=Bc(g,b,c,d,e,f,Ca(a),Ca(a)+(wa(a)<<2)|0);break b;case 35:case 36:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];e:{if(!(c&4|(b|0)<1|(b|0)>31)){H[f+12>>2]=b;break e}H[a>>2]=c|4}break b;case 3:g=H[3331];H[h+24>>2]=H[3330];H[h+28>>2]=g;g=H[3329];H[h+16>>2]=H[3328];H[h+20>>2]=g;g=H[3327];H[h+8>>2]=H[3326];H[h+12>>2]=g;g=H[3325];H[h>>2]=H[3324];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+32|0);break b;case 5:g=H[3339];H[h+24>>2]=H[3338];H[h+28>>2]=g;g=H[3337];H[h+16>>2]=H[3336];H[h+20>>2]=g;g=H[3335];H[h+8>>2]=H[3334];H[h+12>>2]=g;g=H[3333];H[h>>2]=H[3332];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+32|0);break b;case 7:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];f:{if(!(c&4|(b|0)>23)){H[f+8>>2]=b;break f}H[a>>2]=c|4}break b;case 8:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];g:{if(!(c&4|(b|0)<1|(b|0)>12)){H[f+8>>2]=b;break g}H[a>>2]=c|4}break b;case 41:a=e;b=rc(h+56|0,c,a,i,3);c=H[a>>2];h:{if(!(c&4|(b|0)>365)){H[f+28>>2]=b;break h}H[a>>2]=c|4}break b;case 44:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];i:{if(!(c&4|(b|0)>12)){H[f+16>>2]=b-1;break i}H[a>>2]=c|4}break b;case 12:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];j:{if(!(c&4|(b|0)>59)){H[f+4>>2]=b;break j}H[a>>2]=c|4}break b;case 45:case 51:a=h+56|0;b=oa-16|0;oa=b;H[b+8>>2]=c;while(1){k:{if(!Ab(a,b+8|0)){break k}if(!cc(i,8192,ab(a))){break k}hb(a);continue}break};if(jb(a,b+8|0)){H[e>>2]=H[e>>2]|2}oa=b+16|0;break b;case 47:b=h+56|0;a=qa[H[H[a+8>>2]+8>>2]](a+8|0)|0;l:{if((wa(a)|0)==(0-wa(a+12|0)|0)){H[e>>2]=H[e>>2]|4;break l}a=Re(b,c,a,a+24|0,i,e,0)-a|0;b=H[f+8>>2];if(!(a|(b|0)!=12)){H[f+8>>2]=0;break l}if(!((a|0)!=12|(b|0)>11)){H[f+8>>2]=b+12}}break b;case 49:g=Wb(h,13360,44);H[g+56>>2]=Bc(a,b,c,d,e,f,g,g+44|0);break b;case 17:H[h+16>>2]=H[3356];g=H[3355];H[h+8>>2]=H[3354];H[h+12>>2]=g;g=H[3353];H[h>>2]=H[3352];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+20|0);break b;case 18:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];m:{if(!(c&4|(b|0)>60)){H[f>>2]=b;break m}H[a>>2]=c|4}break b;case 19:g=H[3367];H[h+24>>2]=H[3366];H[h+28>>2]=g;g=H[3365];H[h+16>>2]=H[3364];H[h+20>>2]=g;g=H[3363];H[h+8>>2]=H[3362];H[h+12>>2]=g;g=H[3361];H[h>>2]=H[3360];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+32|0);break b;case 54:a=e;b=rc(h+56|0,c,a,i,1);c=H[a>>2];n:{if(!(c&4|(b|0)>6)){H[f+24>>2]=b;break n}H[a>>2]=c|4}break b;case 55:a=qa[H[H[a>>2]+20>>2]](a,b,c,d,e,f)|0;break a;case 23:g=a;a=qa[H[H[a+8>>2]+24>>2]](a+8|0)|0;H[h+56>>2]=Bc(g,b,c,d,e,f,Ca(a),Ca(a)+(wa(a)<<2)|0);break b;case 56:ri(f+20|0,h+56|0,c,e,i);break b;case 24:a=rc(h+56|0,c,e,i,4);if(!(I[e|0]&4)){H[f+20>>2]=a-1900}break b;default:if((g|0)==37){break c}break;case 2:case 4:case 6:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 20:case 21:case 22:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 37:case 38:case 40:case 42:case 43:case 46:case 48:case 50:case 52:case 53:break d}}H[e>>2]=H[e>>2]|4;break b}a=oa-16|0;oa=a;H[a+8>>2]=c;b=6;c=h+56|0;o:{p:{if(jb(c,a+8|0)){break p}b=4;if((yd(i,ab(c))|0)!=37){break p}b=2;if(!jb(hb(c),a+8|0)){break o}}H[e>>2]=H[e>>2]|b}oa=a+16|0}a=H[h+56>>2]}oa=h- -64|0;return a|0}function Lb(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=oa-112|0;oa=k;l=h;o=i&2147483647;m=c-(b>>>0<1)|0;j=b-1|0;q=(j|0)==-1&(m|0)==-1;r=d;p=(c|0)==(m|0)&b>>>0>j>>>0|c>>>0>m>>>0;n=d+p|0;m=e&2147483647;j=m;j=n>>>0

>>0?j+1|0:j;p=n-1|0;a:{b:{j=j-(n>>>0<1)|0;if(!((p|0)==-1&(j|0)==2147418111?q:j>>>0>2147418111)){j=f;n=g-(j>>>0<1)|0;j=j-1|0;q=(j|0)!=-1|(n|0)!=-1;p=(g|0)==(n|0)&f>>>0>j>>>0|g>>>0>n>>>0;n=p+l|0;j=o;j=n>>>0

>>0?j+1|0:j;p=n;n=n-1|0;j=j-(p>>>0<1)|0;if((n|0)==-1&(j|0)==2147418111?q:(j|0)==2147418111&(n|0)!=-1|j>>>0<2147418111){break b}}if(!(!r&(m|0)==2147418112?!(b|c):m>>>0<2147418112)){h=d;i=e|32768;f=b;g=c;break a}if(!(!l&(o|0)==2147418112?!(f|g):o>>>0<2147418112)){i=i|32768;break a}if(!(b|r|(m^2147418112|c))){j=d;d=!(b^f|d^h|(c^g|e^i^-2147483648));h=d?0:j;i=d?2147450880:e;f=d?0:b;g=d?0:c;break a}if(!(f|l|(o^2147418112|g))){break a}if(!(b|r|(c|m))){if(f|l|(g|o)){break a}f=b&f;g=c&g;h=d&h;i=e&i;break a}if(f|l|(g|o)){break b}f=b;g=c;h=d;i=e;break a}q=(l|0)==(r|0)&(m|0)==(o|0)?(c|0)==(g|0)&b>>>0>>0|c>>>0>>0:(m|0)==(o|0)&l>>>0>r>>>0|m>>>0>>0;j=q;n=j?f:b;o=j?g:c;l=j?i:e;r=l;m=j?h:d;j=l&65535;i=q?e:i;e=i;h=q?d:h;p=i>>>16&32767;l=l>>>16&32767;if(!l){d=!(j|m);i=d<<6;l=Q(d?n:m)+32|0;d=Q(d?o:j);d=i+((d|0)==32?l:d)|0;xb(k+96|0,n,o,m,j,d-15|0);m=H[k+104>>2];n=H[k+96>>2];o=H[k+100>>2];l=16-d|0;j=H[k+108>>2]}f=q?b:f;g=q?c:g;i=e&65535;if(!p){b=!(h|i);c=b<<6;d=Q(b?f:h)+32|0;b=Q(b?g:i);b=c+((b|0)==32?d:b)|0;xb(k+80|0,f,g,h,i,b-15|0);p=16-b|0;h=H[k+88>>2];i=H[k+92>>2];g=H[k+84>>2];f=H[k+80>>2]}b=h;c=i<<3|b>>>29;h=b<<3|g>>>29;i=c|524288;b=m;d=j<<3|b>>>29;m=b<<3|o>>>29;s=d;q=e^r;b=f;j=g<<3|b>>>29;b=b<<3;c=j;d=l-p|0;e=b;c:{if(!d){break c}if(d>>>0>127){h=0;i=0;j=0;e=1;break c}xb(k- -64|0,b,c,h,i,128-d|0);hd(k+48|0,b,c,h,i,d);h=H[k+56>>2];i=H[k+60>>2];j=H[k+52>>2];e=H[k+48>>2]|((H[k+64>>2]|H[k+72>>2])!=0|(H[k+68>>2]|H[k+76>>2])!=0)}f=j;d=m;p=s|524288;b=n;j=o<<3|b>>>29;c=b<<3;d:{if((q|0)<-1?1:(q|0)<=-1){o=e;b=c-e|0;m=h;n=d-h|0;e=(f|0)==(j|0)&c>>>0>>0|f>>>0>j>>>0;h=n-e|0;c=j-((c>>>0>>0)+f|0)|0;i=(p-((d>>>0>>0)+i|0)|0)-(e>>>0>n>>>0)|0;if(!(b|h|(c|i))){f=0;g=0;h=0;i=0;break a}if(i>>>0>524287){break d}f=b;d=!(h|i);e=d<<6;g=Q(d?b:h)+32|0;b=Q(d?c:i);b=e+((b|0)==32?g:b)|0;b=b-12|0;xb(k+32|0,f,c,h,i,b);l=l-b|0;h=H[k+40>>2];i=H[k+44>>2];b=H[k+32>>2];c=H[k+36>>2];break d}b=c;g=b+e|0;c=f+j|0;c=b>>>0>g>>>0?c+1|0:c;b=g;g=(c|0)==(f|0)&e>>>0>b>>>0|c>>>0>>0;e=d;f=d+h|0;d=i+p|0;d=e>>>0>f>>>0?d+1|0:d;e=g+f|0;h=e;i=h>>>0>>0?d+1|0:d;if(!(i&1048576)){break d}b=b&1|((c&1)<<31|b>>>1);c=h<<31|c>>>1;l=l+1|0;h=(i&1)<<31|h>>>1;i=i>>>1|0}o=0;r=r&-2147483648;if((l|0)>=32767){h=o;i=r|2147418112;f=0;g=0;break a}e=0;e:{if((l|0)>0){e=l;break e}xb(k+16|0,b,c,h,i,l+127|0);hd(k,b,c,h,i,1-l|0);b=H[k>>2]|((H[k+16>>2]|H[k+24>>2])!=0|(H[k+20>>2]|H[k+28>>2])!=0);c=H[k+4>>2];h=H[k+8>>2];i=H[k+12>>2]}j=(c&7)<<29|b>>>3;l=b&7;b=j+(l>>>0>4)|0;d=h<<29|c>>>3;c=b>>>0>>0?d+1|0:d;f=b;g=c;b=(d|0)==(c|0)&b>>>0>>0|c>>>0>>0;d=o|((i&7)<<29|h>>>3);b=b+d|0;j=r|(i>>>3&65535|e<<16);h=b;i=b>>>0>>0?j+1|0:j;f:{if((l|0)==4){j=i;c=0;d=g+c|0;e=f&1;b=f+e|0;d=b>>>0>>0?d+1|0:d;f=b;g=d;c=(c|0)==(d|0)&b>>>0>>0|c>>>0>d>>>0;b=c+h|0;h=b;i=b>>>0>>0?j+1|0:j;break f}if(!l){break a}}}H[a>>2]=f;H[a+4>>2]=g;H[a+8>>2]=h;H[a+12>>2]=i;oa=k+112|0}function gn(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;h=oa-32|0;oa=h;H[h+24>>2]=b;H[e>>2]=0;Ia(h+8|0,d);i=Fb(h+8|0);Fa(h+8|0);a:{b:{c:{d:{switch(g-65|0){case 0:case 32:yi(a,f+24|0,h+24|0,c,e,i);break b;case 1:case 33:case 39:wi(a,f+16|0,h+24|0,c,e,i);break b;case 34:g=a;a=qa[H[H[a+8>>2]+12>>2]](a+8|0)|0;H[h+24>>2]=Cc(g,b,c,d,e,f,Ca(a),Ca(a)+wa(a)|0);break b;case 35:case 36:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];e:{if(!(c&4|(b|0)<1|(b|0)>31)){H[f+12>>2]=b;break e}H[a>>2]=c|4}break b;case 3:H[h+8>>2]=623865125;H[h+12>>2]=2032480100;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+16|0);break b;case 5:H[h+8>>2]=623728933;H[h+12>>2]=1680158061;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+16|0);break b;case 7:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];f:{if(!(c&4|(b|0)>23)){H[f+8>>2]=b;break f}H[a>>2]=c|4}break b;case 8:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];g:{if(!(c&4|(b|0)<1|(b|0)>12)){H[f+8>>2]=b;break g}H[a>>2]=c|4}break b;case 41:a=e;b=sc(h+24|0,c,a,i,3);c=H[a>>2];h:{if(!(c&4|(b|0)>365)){H[f+28>>2]=b;break h}H[a>>2]=c|4}break b;case 44:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];i:{if(!(c&4|(b|0)>12)){H[f+16>>2]=b-1;break i}H[a>>2]=c|4}break b;case 12:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];j:{if(!(c&4|(b|0)>59)){H[f+4>>2]=b;break j}H[a>>2]=c|4}break b;case 45:case 51:a=h+24|0;b=oa-16|0;oa=b;H[b+8>>2]=c;while(1){k:{if(!Bb(a,b+8|0)){break k}if(!dc(i,8192,bb(a))){break k}ib(a);continue}break};if(kb(a,b+8|0)){H[e>>2]=H[e>>2]|2}oa=b+16|0;break b;case 47:b=h+24|0;a=qa[H[H[a+8>>2]+8>>2]](a+8|0)|0;l:{if((wa(a)|0)==(0-wa(a+12|0)|0)){H[e>>2]=H[e>>2]|4;break l}a=Te(b,c,a,a+24|0,i,e,0)-a|0;b=H[f+8>>2];if(!(a|(b|0)!=12)){H[f+8>>2]=0;break l}if(!((a|0)!=12|(b|0)>11)){H[f+8>>2]=b+12}}break b;case 49:g=I[13284]|I[13285]<<8|(I[13286]<<16|I[13287]<<24);F[h+15|0]=g;F[h+16|0]=g>>>8;F[h+17|0]=g>>>16;F[h+18|0]=g>>>24;g=I[13281]|I[13282]<<8|(I[13283]<<16|I[13284]<<24);H[h+8>>2]=I[13277]|I[13278]<<8|(I[13279]<<16|I[13280]<<24);H[h+12>>2]=g;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+19|0);break b;case 17:F[h+12|0]=I[13292];H[h+8>>2]=I[13288]|I[13289]<<8|(I[13290]<<16|I[13291]<<24);H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+13|0);break b;case 18:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];m:{if(!(c&4|(b|0)>60)){H[f>>2]=b;break m}H[a>>2]=c|4}break b;case 19:H[h+8>>2]=624576549;H[h+12>>2]=1394948685;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+16|0);break b;case 54:a=e;b=sc(h+24|0,c,a,i,1);c=H[a>>2];n:{if(!(c&4|(b|0)>6)){H[f+24>>2]=b;break n}H[a>>2]=c|4}break b;case 55:a=qa[H[H[a>>2]+20>>2]](a,b,c,d,e,f)|0;break a;case 23:g=a;a=qa[H[H[a+8>>2]+24>>2]](a+8|0)|0;H[h+24>>2]=Cc(g,b,c,d,e,f,Ca(a),Ca(a)+wa(a)|0);break b;case 56:vi(f+20|0,h+24|0,c,e,i);break b;case 24:a=sc(h+24|0,c,e,i,4);if(!(I[e|0]&4)){H[f+20>>2]=a-1900}break b;default:if((g|0)==37){break c}break;case 2:case 4:case 6:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 20:case 21:case 22:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 37:case 38:case 40:case 42:case 43:case 46:case 48:case 50:case 52:case 53:break d}}H[e>>2]=H[e>>2]|4;break b}a=oa-16|0;oa=a;H[a+8>>2]=c;b=6;c=h+24|0;o:{p:{if(kb(c,a+8|0)){break p}b=4;if((zd(i,bb(c))|0)!=37){break p}b=2;if(!kb(ib(c),a+8|0)){break o}}H[e>>2]=H[e>>2]|b}oa=a+16|0}a=H[h+24>>2]}oa=h+32|0;return a|0}function lk(){var a=0,b=0,c=0;a=oa-16|0;oa=a;a:{if(ga(a+12|0,a+8|0)|0){break a}b=cb((H[a+12>>2]<<2)+4|0);H[6069]=b;if(!b){break a}b=cb(H[a+8>>2]);if(b){H[H[6069]+(H[a+12>>2]<<2)>>2]=0;if(!(fa(H[6069],b|0)|0)){break a}}H[6069]=0}oa=a+16|0;b:{if(F[28448]&1){break b}if(!fb(28448)){break b}b=H[1969];a=oa-16|0;oa=a;c=Hf(28092);H[7033]=28148;H[7031]=b;H[7023]=20172;F[28144]=0;H[7035]=-1;rd(a+8|0,c);qa[H[H[7023]+8>>2]](28092,a+8|0);Fa(a+8|0);oa=a+16|0;a=Xe(27416);H[6852]=18988;H[a>>2]=19008;H[6853]=0;pd(H[4744]+27408|0,28092);a=oa-16|0;oa=a;c=hh(28156);H[7049]=28212;H[7047]=b;H[7039]=20272;F[28208]=0;H[7051]=-1;rd(a+8|0,c);qa[H[H[7039]+8>>2]](28156,a+8|0);Fa(a+8|0);oa=a+16|0;a=Vg(27504);H[6874]=19036;H[a>>2]=19056;H[6875]=0;pd(H[4756]+27496|0,28156);a=H[5039];Xg(28220,a,28268);uf(27584,28220);Wg(28276,a,28324);tf(27668,28276);a=H[5040];Xg(28332,a,28380);uf(27752,28332);uf(27920,H[(H[H[6938]-12>>2]+27752|0)+24>>2]);Wg(28388,a,28436);tf(27836,28388);tf(28004,H[(H[H[6959]-12>>2]+27836|0)+24>>2]);oe(H[H[6852]-12>>2]+27408|0,27584);oe(H[H[6874]-12>>2]+27496|0,27668);Ug(H[H[6938]-12>>2]+27752|0);Ug(H[H[6959]-12>>2]+27836|0);oe(H[H[6938]-12>>2]+27752|0,27584);oe(H[H[6959]-12>>2]+27836|0,27668);eb(28448)}xa(21760,2023);xa(21772,2806);Sa(21788);Sa(21800);Sa(21812);Sa(21824);Sa(21836);Sa(21852);Sa(21864);Sa(21876);Sa(21888);Sa(21900);Sa(21912);xa(21924,2037);xa(21936,2217);xa(21948,1554);xa(21960,1983);xa(21972,2354);xa(21984,1941);xa(21996,1337);xa(22008,2324);xa(22020,2245);xa(22032,2336);xa(22044,2216);xa(22056,2309);xa(22068,2033);xa(22080,2057);xa(22092,2418);xa(22104,2155);xa(22116,1830);xa(22128,2396);xa(22140,2176);xa(22152,2050);xa(22164,1035);xa(22176,1027);xa(22188,2811);xa(22200,2997);xa(22212,2814);xa(22224,2778);xa(22236,2774);xa(22248,2771);xa(22260,2777);xa(22272,2766);xa(22284,2770);xa(22296,3063);xa(22308,1029);xa(22320,2537);xa(22332,1024);xa(22344,2763);xa(22356,2660);xa(22368,2774);xa(22380,2780);xa(22392,3066);xa(22404,1032);xa(22416,3022);xa(22428,2540);xa(22440,2995);xa(22452,2984);xa(22464,3001);xa(22476,2815);xa(22488,3069);xa(22500,3e3);xa(22512,2661);xa(22524,2781);xa(22536,3099);xa(22548,1033);xa(22560,3067);xa(22572,1025);xa(22584,2538);xa(22596,2658);xa(22608,2785);xa(22620,2986);xa(22632,2783);xa(22644,1880);xa(22656,1567);xa(22668,1360);xa(22680,1349);xa(22692,2040);xa(22704,2494);xa(22716,1948);xa(22728,2240);xa(22740,1176);xa(22752,1037);xa(22764,2207);xa(22776,1711);xa(22788,1896);xa(22800,2390);xa(22812,1891);xa(22824,1098);xa(22836,2145);xa(22848,2347);xa(22860,1791);xa(22872,2236);xa(22884,1411);xa(22896,2014);xa(22908,1640);xa(22920,2455);xa(22932,2410);xa(22944,1818);xa(22956,1046);xa(22968,2443);xa(22980,2439);xa(22992,2228);xa(23004,2204);xa(23016,1708);xa(23028,1786);xa(23040,1888);xa(23052,2387);xa(23064,1095);xa(23076,2142);xa(23088,2344);xa(23100,2465);xa(23112,1081);xa(23124,1840);xa(23136,1408);xa(23148,2011);xa(23160,1651);xa(23172,2452);xa(23184,2407);xa(23196,1815);xa(23208,1043);xa(23220,2427)}function Ba(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;a:{if(!a){break a}d=a-8|0;b=H[a-4>>2];a=b&-8;f=d+a|0;b:{if(b&1){break b}if(!(b&3)){break a}b=H[d>>2];d=d-b|0;if(d>>>0>>0<=255){e=H[d+8>>2];b=b>>>3|0;c=H[d+12>>2];if((c|0)==(e|0)){H[7133]=H[7133]&Gq(-2,b);break b}H[e+12>>2]=c;H[c+8>>2]=e;break b}h=H[d+24>>2];b=H[d+12>>2];c:{if((d|0)!=(b|0)){c=H[d+8>>2];H[c+12>>2]=b;H[b+8>>2]=c;break c}d:{e=d+20|0;c=H[e>>2];if(c){break d}e=d+16|0;c=H[e>>2];if(c){break d}b=0;break c}while(1){g=e;b=c;e=b+20|0;c=H[e>>2];if(c){continue}e=b+16|0;c=H[b+16>>2];if(c){continue}break}H[g>>2]=0}if(!h){break b}e=H[d+28>>2];c=(e<<2)+28836|0;e:{if(H[c>>2]==(d|0)){H[c>>2]=b;if(b){break e}H[7134]=H[7134]&Gq(-2,e);break b}H[h+(H[h+16>>2]==(d|0)?16:20)>>2]=b;if(!b){break b}}H[b+24>>2]=h;c=H[d+16>>2];if(c){H[b+16>>2]=c;H[c+24>>2]=b}c=H[d+20>>2];if(!c){break b}H[b+20>>2]=c;H[c+24>>2]=b;break b}b=H[f+4>>2];if((b&3)!=3){break b}H[7135]=a;H[f+4>>2]=b&-2;H[d+4>>2]=a|1;H[a+d>>2]=a;return}if(d>>>0>=f>>>0){break a}b=H[f+4>>2];if(!(b&1)){break a}f:{if(!(b&2)){if(H[7139]==(f|0)){H[7139]=d;a=H[7136]+a|0;H[7136]=a;H[d+4>>2]=a|1;if(H[7138]!=(d|0)){break a}H[7135]=0;H[7138]=0;return}if(H[7138]==(f|0)){H[7138]=d;a=H[7135]+a|0;H[7135]=a;H[d+4>>2]=a|1;H[a+d>>2]=a;return}a=(b&-8)+a|0;g:{if(b>>>0<=255){e=H[f+8>>2];b=b>>>3|0;c=H[f+12>>2];if((c|0)==(e|0)){H[7133]=H[7133]&Gq(-2,b);break g}H[e+12>>2]=c;H[c+8>>2]=e;break g}h=H[f+24>>2];b=H[f+12>>2];h:{if((f|0)!=(b|0)){c=H[f+8>>2];H[c+12>>2]=b;H[b+8>>2]=c;break h}i:{e=f+20|0;c=H[e>>2];if(c){break i}e=f+16|0;c=H[e>>2];if(c){break i}b=0;break h}while(1){g=e;b=c;e=b+20|0;c=H[e>>2];if(c){continue}e=b+16|0;c=H[b+16>>2];if(c){continue}break}H[g>>2]=0}if(!h){break g}e=H[f+28>>2];c=(e<<2)+28836|0;j:{if(H[c>>2]==(f|0)){H[c>>2]=b;if(b){break j}H[7134]=H[7134]&Gq(-2,e);break g}H[h+(H[h+16>>2]==(f|0)?16:20)>>2]=b;if(!b){break g}}H[b+24>>2]=h;c=H[f+16>>2];if(c){H[b+16>>2]=c;H[c+24>>2]=b}c=H[f+20>>2];if(!c){break g}H[b+20>>2]=c;H[c+24>>2]=b}H[d+4>>2]=a|1;H[a+d>>2]=a;if(H[7138]!=(d|0)){break f}H[7135]=a;return}H[f+4>>2]=b&-2;H[d+4>>2]=a|1;H[a+d>>2]=a}if(a>>>0<=255){a=a>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=d;H[a+12>>2]=d;H[d+12>>2]=b;H[d+8>>2]=a;return}e=31;H[d+16>>2]=0;H[d+20>>2]=0;if(a>>>0<=16777215){b=a>>>8|0;g=b+1048320>>>16&8;b=b<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(c|(e|g))|0;e=(b<<1|a>>>b+21&1)+28|0}H[d+28>>2]=e;g=(e<<2)+28836|0;l:{m:{c=H[7134];b=1<>2]=d;H[d+24>>2]=g;break n}e=a<<((e|0)==31?0:25-(e>>>1|0)|0);b=H[g>>2];while(1){c=b;if((H[b+4>>2]&-8)==(a|0)){break m}b=e>>>29|0;e=e<<1;g=c+(b&4)|0;b=H[g+16>>2];if(b){continue}break}H[g+16>>2]=d;H[d+24>>2]=c}H[d+12>>2]=d;H[d+8>>2]=d;break l}a=H[c+8>>2];H[a+12>>2]=d;H[c+8>>2]=d;H[d+24>>2]=0;H[d+12>>2]=c;H[d+8>>2]=a}a=H[7141]-1|0;H[7141]=a?a:-1}}function Dg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=a+b|0;c=H[a+4>>2];a:{b:{if(c&1){break b}if(!(c&3)){break a}c=H[a>>2];b=c+b|0;c:{a=a-c|0;if((a|0)!=H[7138]){if(c>>>0<=255){e=H[a+8>>2];c=c>>>3|0;d=H[a+12>>2];if((d|0)!=(e|0)){break c}H[7133]=H[7133]&Gq(-2,c);break b}h=H[a+24>>2];c=H[a+12>>2];d:{if((c|0)!=(a|0)){d=H[a+8>>2];H[d+12>>2]=c;H[c+8>>2]=d;break d}e:{e=a+20|0;d=H[e>>2];if(d){break e}e=a+16|0;d=H[e>>2];if(d){break e}c=0;break d}while(1){g=e;c=d;e=c+20|0;d=H[e>>2];if(d){continue}e=c+16|0;d=H[c+16>>2];if(d){continue}break}H[g>>2]=0}if(!h){break b}e=H[a+28>>2];d=(e<<2)+28836|0;f:{if(H[d>>2]==(a|0)){H[d>>2]=c;if(c){break f}H[7134]=H[7134]&Gq(-2,e);break b}H[h+(H[h+16>>2]==(a|0)?16:20)>>2]=c;if(!c){break b}}H[c+24>>2]=h;d=H[a+16>>2];if(d){H[c+16>>2]=d;H[d+24>>2]=c}d=H[a+20>>2];if(!d){break b}H[c+20>>2]=d;H[d+24>>2]=c;break b}c=H[f+4>>2];if((c&3)!=3){break b}H[7135]=b;H[f+4>>2]=c&-2;H[a+4>>2]=b|1;H[f>>2]=b;return}H[e+12>>2]=d;H[d+8>>2]=e}c=H[f+4>>2];g:{if(!(c&2)){if(H[7139]==(f|0)){H[7139]=a;b=H[7136]+b|0;H[7136]=b;H[a+4>>2]=b|1;if(H[7138]!=(a|0)){break a}H[7135]=0;H[7138]=0;return}if(H[7138]==(f|0)){H[7138]=a;b=H[7135]+b|0;H[7135]=b;H[a+4>>2]=b|1;H[a+b>>2]=b;return}b=(c&-8)+b|0;h:{if(c>>>0<=255){e=H[f+8>>2];c=c>>>3|0;d=H[f+12>>2];if((d|0)==(e|0)){H[7133]=H[7133]&Gq(-2,c);break h}H[e+12>>2]=d;H[d+8>>2]=e;break h}h=H[f+24>>2];c=H[f+12>>2];i:{if((f|0)!=(c|0)){d=H[f+8>>2];H[d+12>>2]=c;H[c+8>>2]=d;break i}j:{d=f+20|0;e=H[d>>2];if(e){break j}d=f+16|0;e=H[d>>2];if(e){break j}c=0;break i}while(1){g=d;c=e;d=c+20|0;e=H[d>>2];if(e){continue}d=c+16|0;e=H[c+16>>2];if(e){continue}break}H[g>>2]=0}if(!h){break h}e=H[f+28>>2];d=(e<<2)+28836|0;k:{if(H[d>>2]==(f|0)){H[d>>2]=c;if(c){break k}H[7134]=H[7134]&Gq(-2,e);break h}H[h+(H[h+16>>2]==(f|0)?16:20)>>2]=c;if(!c){break h}}H[c+24>>2]=h;d=H[f+16>>2];if(d){H[c+16>>2]=d;H[d+24>>2]=c}d=H[f+20>>2];if(!d){break h}H[c+20>>2]=d;H[d+24>>2]=c}H[a+4>>2]=b|1;H[a+b>>2]=b;if(H[7138]!=(a|0)){break g}H[7135]=b;return}H[f+4>>2]=c&-2;H[a+4>>2]=b|1;H[a+b>>2]=b}if(b>>>0<=255){b=b>>>3|0;c=(b<<3)+28572|0;d=H[7133];b=1<>2]}H[c+8>>2]=a;H[b+12>>2]=a;H[a+12>>2]=c;H[a+8>>2]=b;return}e=31;H[a+16>>2]=0;H[a+20>>2]=0;if(b>>>0<=16777215){c=b>>>8|0;g=c+1048320>>>16&8;c=c<>>16&4;c=c<>>16&2;c=(c<>>15|0)-(d|(e|g))|0;e=(c<<1|b>>>c+21&1)+28|0}H[a+28>>2]=e;g=(e<<2)+28836|0;m:{d=H[7134];c=1<>2]=a;H[a+24>>2]=g;break n}e=b<<((e|0)==31?0:25-(e>>>1|0)|0);c=H[g>>2];while(1){d=c;if((H[c+4>>2]&-8)==(b|0)){break m}c=e>>>29|0;e=e<<1;g=d+(c&4)|0;c=H[g+16>>2];if(c){continue}break}H[g+16>>2]=a;H[a+24>>2]=d}H[a+12>>2]=a;H[a+8>>2]=a;return}b=H[d+8>>2];H[b+12>>2]=a;H[d+8>>2]=a;H[a+24>>2]=0;H[a+12>>2]=d;H[a+8>>2]=b}}function pm(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;u=oa-16|0;oa=u;k=c;while(1){a:{if((d|0)==(k|0)){k=d;break a}if(!H[k>>2]){break a}k=k+4|0;continue}break}H[h>>2]=f;H[e>>2]=c;while(1){b:{c:{if(!((c|0)==(d|0)|(f|0)==(g|0))){p=H[b+4>>2];H[u+8>>2]=H[b>>2];H[u+12>>2]=p;x=1;v=oa-16|0;oa=v;H[v+12>>2]=H[a+8>>2];y=jc(v+8|0,v+12|0);r=k-c>>2;p=0;l=oa-272|0;oa=l;z=e;i=H[e>>2];H[l+12>>2]=i;t=f?f:l+16|0;A=f;d:{e:{f:{q=f?g-f|0:256;if(!i|!q){break f}m=r>>>0>=q>>>0;if(!(m|r>>>0>32)){break e}while(1){m=m?q:r;r=r-m|0;s=0;w=oa-16|0;oa=w;g:{h:{i:{j:{j=t;if(j){if(m>>>0>=4){break j}i=m;break i}m=0;j=H[l+12>>2];i=H[j>>2];if(!i){break g}while(1){o=1;if(i>>>0>=128){s=-1;o=id(w+12|0,i);if((o|0)==-1){break g}}i=H[j+4>>2];j=j+4|0;m=m+o|0;s=m;if(i){continue}break}break g}o=H[l+12>>2];i=m;while(1){n=H[o>>2];k:{if(n-1>>>0>=127){if(!n){F[j|0]=0;H[l+12>>2]=0;break h}s=-1;n=id(j,n);if((n|0)==-1){break g}i=i-n|0;j=j+n|0;break k}F[j|0]=n;i=i-1|0;o=H[l+12>>2];j=j+1|0}o=o+4|0;H[l+12>>2]=o;if(i>>>0>3){continue}break}}if(i){o=H[l+12>>2];while(1){n=H[o>>2];l:{if(n-1>>>0>=127){if(!n){F[j|0]=0;H[l+12>>2]=0;break h}s=-1;n=id(w+12|0,n);if((n|0)==-1){break g}if(i>>>0>>0){break h}id(j,H[o>>2]);i=i-n|0;j=j+n|0;break l}F[j|0]=n;i=i-1|0;o=H[l+12>>2];j=j+1|0}o=o+4|0;H[l+12>>2]=o;if(i){continue}break}}s=m;break g}s=m-i|0}oa=w+16|0;if((s|0)==-1){q=0;i=H[l+12>>2];p=-1;break f}j=(l+16|0)==(t|0);q=q-(j?0:s)|0;t=j?t:s+t|0;p=p+s|0;i=H[l+12>>2];if(!i|!q){break f}m=r>>>0>=q>>>0;if(m|r>>>0>=33){continue}break}break e}if(!i){break d}}if(!q|!r){break d}m=p;while(1){m:{j=id(t,H[i>>2]);n:{if(j+1>>>0<=1){p=-1;if(j){break d}H[l+12>>2]=0;break n}i=H[l+12>>2]+4|0;H[l+12>>2]=i;m=j+m|0;q=q-j|0;if(q){break m}}p=m;break d}t=j+t|0;p=m;r=r-1|0;if(r){continue}break}}if(A){H[z>>2]=H[l+12>>2]}oa=l+272|0;ic(y);oa=v+16|0;o:{p:{q:{r:{switch(p+1|0){case 0:H[h>>2]=f;while(1){s:{if(H[e>>2]==(c|0)){break s}b=Of(f,H[c>>2],H[a+8>>2]);if((b|0)==-1){break s}f=b+H[h>>2]|0;H[h>>2]=f;c=c+4|0;continue}break};H[e>>2]=c;break q;case 1:break c;default:break r}}f=p+H[h>>2]|0;H[h>>2]=f;if((f|0)==(g|0)){break o}if((d|0)==(k|0)){c=H[e>>2];k=d;continue}k=Of(u+4|0,0,H[a+8>>2]);if((k|0)!=-1){break p}}x=2;break c}c=u+4|0;if(g-H[h>>2]>>>0>>0){break c}while(1){if(k){f=I[c|0];p=H[h>>2];H[h>>2]=p+1;F[p|0]=f;k=k-1|0;c=c+1|0;continue}break}c=H[e>>2]+4|0;H[e>>2]=c;k=c;while(1){if((d|0)==(k|0)){k=d;break b}if(!H[k>>2]){break b}k=k+4|0;continue}}c=H[e>>2]}x=(c|0)!=(d|0)}oa=u+16|0;return x|0}f=H[h>>2];continue}}function Cg(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;j=oa-128|0;oa=j;a:{b:{c:{if(!gd(f,g,h,i,0,0,0,0)){break c}m=f;n=g;l=h;o=i&65535;k=i>>>16&32767;d:{e:{if((k|0)!=32767){p=4;if(k){break e}m=l|m|(n|o)?3:2;break d}p=!(l|m|(n|o))}m=p}if(!m){break c}r=e>>>16|0;o=r&32767;if((o|0)!=32767){break b}}Ta(j+16|0,b,c,d,e,f,g,h,i);e=H[j+16>>2];d=H[j+20>>2];c=H[j+24>>2];b=H[j+28>>2];lj(j,e,d,c,b,e,d,c,b);d=H[j+8>>2];e=H[j+12>>2];h=H[j>>2];i=H[j+4>>2];break a}l=o<<16;p=d;q=l|e&65535;m=q;n=h;q=i>>>16&32767;k=i&65535|q<<16;if((gd(b,c,p,m,f,g,h,k)|0)<=0){if(gd(b,c,p,m,f,g,n,k)){h=b;i=c;break a}Ta(j+112|0,b,c,d,e,0,0,0,0);d=H[j+120>>2];e=H[j+124>>2];h=H[j+112>>2];i=H[j+116>>2];break a}if(o){i=c;h=b}else{Ta(j+96|0,b,c,p,m,0,0,0,1081540608);h=H[j+108>>2];m=h;p=H[j+104>>2];o=(h>>>16|0)-120|0;i=H[j+100>>2];h=H[j+96>>2]}if(!q){Ta(j+80|0,f,g,n,k,0,0,0,1081540608);f=H[j+92>>2];k=f;n=H[j+88>>2];q=(k>>>16|0)-120|0;g=H[j+84>>2];f=H[j+80>>2]}s=k&65535|65536;m=m&65535|65536;if((o|0)>(q|0)){while(1){k=p;l=n;t=k-l|0;l=m-((k>>>0>>0)+s|0)|0;k=(g|0)==(i|0)&f>>>0>h>>>0|g>>>0>i>>>0;l=l-(k>>>0>t>>>0)|0;k=t-k|0;f:{if((l|0)>0?1:(l|0)>=0){m=h;h=h-f|0;i=i-((f>>>0>m>>>0)+g|0)|0;if(!(h|k|(i|l))){Ta(j+32|0,b,c,d,e,0,0,0,0);d=H[j+40>>2];e=H[j+44>>2];h=H[j+32>>2];i=H[j+36>>2];break a}l=l<<1|k>>>31;p=k<<1|i>>>31;break f}l=m<<1|p>>>31;p=p<<1|i>>>31}m=l;l=i<<1|h>>>31;h=h<<1;i=l;o=o-1|0;if((q|0)<(o|0)){continue}break}o=q}l=p;q=l-n|0;n=m-((l>>>0>>0)+s|0)|0;l=(g|0)==(i|0)&f>>>0>h>>>0|g>>>0>i>>>0;k=n-(l>>>0>q>>>0)|0;n=q-l|0;g:{if((k|0)<0){n=p;k=m;break g}p=h;h=h-f|0;i=i-((f>>>0>p>>>0)+g|0)|0;if(h|n|(i|k)){break g}Ta(j+48|0,b,c,d,e,0,0,0,0);d=H[j+56>>2];e=H[j+60>>2];h=H[j+48>>2];i=H[j+52>>2];break a}if((k|0)==65535|k>>>0<65535){while(1){b=i>>>31|0;o=o-1|0;m=i<<1|h>>>31;h=h<<1;i=m;c=b;b=n;k=k<<1|b>>>31;n=c|b<<1;if(k>>>0<65536){continue}break}}b=r&32768;if((o|0)<=0){Ta(j- -64|0,h,i,n,k&65535|(b|o+120)<<16,0,0,0,1065811968);d=H[j+72>>2];e=H[j+76>>2];h=H[j+64>>2];i=H[j+68>>2];break a}d=n;e=k&65535|(b|o)<<16}H[a>>2]=h;H[a+4>>2]=i;H[a+8>>2]=d;H[a+12>>2]=e;oa=j+128|0}function $i(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=H[b>>2];a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(!d){break l}g=H[d>>2];if(!g){break l}if(!a){d=c;break j}H[d>>2]=0;d=c;break k}m:{if(!H[H[5347]>>2]){if(!a){break m}if(!c){break a}g=c;while(1){d=F[e|0];if(d){H[a>>2]=d&57343;a=a+4|0;e=e+1|0;g=g-1|0;if(g){continue}break a}break}H[a>>2]=0;H[b>>2]=0;return c-g|0}d=c;if(!a){break i}break g}return yc(e)}f=1;break g}f=0;break h}f=1}while(1){if(!f){f=I[e|0]>>>3|0;if((f-16|f+(g>>26))>>>0>7){break f}h=e+1|0;f=h;n:{if(!(g&33554432)){break n}if((I[h|0]&192)!=128){e=e-1|0;break d}h=e+2|0;f=h;if(!(g&524288)){break n}if((I[h|0]&192)!=128){e=e-1|0;break d}f=e+3|0}e=f;d=d-1|0;f=1;continue}while(1){g=I[e|0];o:{if(e&3|g-1>>>0>126){break o}g=H[e>>2];if((g|g-16843009)&-2139062144){break o}while(1){d=d-4|0;g=H[e+4>>2];f=e+4|0;e=f;if(!((g-16843009|g)&-2139062144)){continue}break}e=f}f=g&255;if(f-1>>>0<=126){d=d-1|0;e=e+1|0;continue}break}f=f-194|0;if(f>>>0>50){break e}e=e+1|0;g=H[(f<<2)+8912>>2];f=0;continue}}while(1){if(!f){if(!d){break a}while(1){p:{f=I[e|0];h=f-1|0;q:{r:{if(h>>>0>126){g=f;break r}if(e&3|d>>>0<5){break q}s:{while(1){g=H[e>>2];if((g|g-16843009)&-2139062144){break s}H[a>>2]=g&255;H[a+4>>2]=I[e+1|0];H[a+8>>2]=I[e+2|0];H[a+12>>2]=I[e+3|0];a=a+16|0;e=e+4|0;d=d-4|0;if(d>>>0>4){continue}break}g=I[e|0]}f=g&255;h=f-1|0}if(h>>>0>126){break p}}H[a>>2]=f;a=a+4|0;e=e+1|0;d=d-1|0;if(d){continue}break a}break}f=f-194|0;if(f>>>0>50){break e}e=e+1|0;g=H[(f<<2)+8912>>2];f=1;continue}h=I[e|0];f=h>>>3|0;if((f-16|f+(g>>26))>>>0>7){break f}t:{u:{i=e+1|0;f=h-128|g<<6;h=i;v:{if((f|0)>-1){break v}h=I[i|0]-128|0;if(h>>>0>63){break u}i=e+2|0;f=h|f<<6;h=i;if((f|0)>-1){break v}h=I[i|0]-128|0;if(h>>>0>63){break u}f=h|f<<6;h=e+3|0}e=h;H[a>>2]=f;d=d-1|0;a=a+4|0;break t}H[6070]=25;e=e-1|0;break c}f=0;continue}}e=e-1|0;if(g){break d}g=I[e|0]}if(g&255){break d}if(a){H[a>>2]=0;H[b>>2]=0}return c-d|0}H[6070]=25;if(!a){break b}}H[b>>2]=e}return-1}H[b>>2]=e;return c}function Rf(a){var b=0;a:{if(F[24556]&1){break a}if(!fb(24556)){break a}b:{if(F[24544]&1){break b}if(!fb(24544)){break b}Xa(26160);H[6540]=13480;b=oa-16|0;oa=b;H[6544]=0;H[6545]=0;H[b+12>>2]=0;rf(26192);F[26336]=0;oa=b+16|0;if(Bh()>>>0<30){$d();X()}b=Ah(ed(26176),30);H[6544]=b;H[6545]=b;H[Ce(26176)>>2]=b+120;zh(0);Uh(30);xa(26352,2653);Pa(26176);Th(26176);Sh();Xa(25840);H[6460]=14804;Za(25840,Wa(24368));Xa(25848);H[6462]=14836;Za(25848,Wa(24376));Xa(25856);F[25868]=0;H[6466]=0;H[6464]=13500;H[6466]=H[2322];Za(25856,Wa(24572));Xa(25872);H[6468]=13984;Za(25872,Wa(24564));Xa(25880);H[6470]=14132;Za(25880,Wa(24580));Xa(25888);H[6472]=13552;H[6474]=Oa();Za(25888,Wa(24588));Xa(25904);H[6476]=14280;Za(25904,Wa(24596));Xa(25912);H[6478]=14396;Za(25912,Wa(24604));Xa(25920);G[12964]=11310;H[6480]=13600;Ea(25932);Za(25920,Wa(24612));Xa(25952);H[6490]=46;H[6491]=44;H[6488]=13640;Ea(25968);Za(25952,Wa(24620));Xa(25984);H[6496]=14868;Za(25984,Wa(24384));Xa(25992);H[6498]=15112;Za(25992,Wa(24392));Xa(26e3);H[6500]=15324;Za(26e3,Wa(24400));Xa(26008);H[6502]=15556;Za(26008,Wa(24408));Xa(26016);H[6504]=16540;Za(26016,Wa(24448));Xa(26024);H[6506]=16688;Za(26024,Wa(24456));Xa(26032);H[6508]=16804;Za(26032,Wa(24464));Xa(26040);H[6510]=16920;Za(26040,Wa(24472));Xa(26048);H[6512]=17036;Za(26048,Wa(24480));Xa(26056);H[6514]=17200;Za(26056,Wa(24488));Xa(26064);H[6516]=17364;Za(26064,Wa(24496));Xa(26072);H[6518]=17528;Za(26072,Wa(24504));Xa(26080);H[6522]=18784;H[6520]=15756;H[6522]=15804;Za(26080,Wa(24416));Xa(26096);H[6526]=18820;H[6524]=16020;H[6526]=16068;Za(26096,Wa(24424));Xa(26112);uh(26120);H[6528]=16256;Za(26112,Wa(24432));Xa(26128);uh(26136);H[6532]=16412;Za(26128,Wa(24440));Xa(26144);H[6536]=17692;Za(26144,Wa(24512));Xa(26152);H[6538]=17812;Za(26152,Wa(24520));H[6134]=26160;H[6135]=24536;eb(24544)}Sf(24548,H[6135]);H[6138]=24548;eb(24556)}b=a;a=H[H[6138]>>2];H[b>>2]=a;Tf(a)}function bh(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{if(H[a+64>>2]){break b}d=1211;c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{e=c&-3;switch(e-1|0){case 4:case 20:break i;case 19:break j;case 8:case 24:break k;case 23:break m;case 7:break n;case 0:case 16:break o;case 15:break c;case 1:case 2:case 3:case 5:case 6:case 9:case 10:case 13:case 14:case 17:case 18:case 21:case 22:case 25:case 26:break d;case 12:case 28:break e;case 27:break g;case 11:break h;default:break p}}q:{switch(e-48|0){case 4:break j;case 0:break c;case 1:case 2:case 3:break d;default:break q}}switch(e-56|0){case 0:break l;case 4:break f;default:break d}}d=2535;break c}d=1638;break c}d=2991;break c}d=2988;break c}d=2994;break c}d=2488;break c}d=2518;break c}d=2491;break c}d=2525;break c}d=2521;break c}d=2529;break c}d=0}if(!d){break b}e=b;b=0;i=oa-16|0;oa=i;h=d;r:{s:{if(!kd(2533,F[d|0])){H[6070]=28;break s}f=2;if(!kd(h,43)){f=I[d|0]!=114}f=kd(d,120)?f|128:f;f=kd(d,101)?f|524288:f;d=I[d|0];f=(d|0)==114?f:f|64;f=(d|0)==119?f|512:f;H[i>>2]=438;d=da(e|0,((d|0)==97?f|1024:f)|32768,i|0)|0;if(d>>>0>=4294963201){H[6070]=0-d;d=-1}if((d|0)<0){break r}f=d;g=oa-32|0;oa=g;t:{u:{v:{if(!kd(2533,F[h|0])){H[6070]=28;break v}e=cb(1176);if(e){break u}}b=0;break t}Vb(e,0,144);if(!kd(h,43)){H[e>>2]=I[h|0]==114?8:4}w:{if(I[h|0]!=97){b=H[e>>2];break w}b=ca(f|0,3,0)|0;if(!(b&1024)){H[g+16>>2]=b|1024;ca(f|0,4,g+16|0)|0}b=H[e>>2]|128;H[e>>2]=b}F[e+75|0]=255;H[e+48>>2]=1024;H[e+60>>2]=f;H[e+44>>2]=e+152;x:{if(b&8){break x}H[g>>2]=g+24;if(ma(f|0,21523,g|0)|0){break x}F[e+75|0]=10}H[e+40>>2]=141;H[e+36>>2]=394;H[e+32>>2]=140;H[e+12>>2]=139;if(!H[6072]){H[e+76>>2]=-1}H[e+56>>2]=H[6068];b=H[6068];if(b){H[b+52>>2]=e}H[6068]=e;b=e}oa=g+32|0;if(b){break r}aa(d|0)|0}b=0}oa=i+16|0;H[a+64>>2]=b;if(!b){break b}H[a+88>>2]=c;if(!(c&2)){break a}if(!Ae(b,0,0,2)){break a}If(H[a+64>>2]);H[a+64>>2]=0}return 0}return a}function ke(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!a){return cb(b)}if(b>>>0>=4294967232){H[6070]=48;return 0}g=b>>>0<11?16:b+11&-8;f=a-8|0;j=H[f+4>>2];e=j&-8;a:{if(!(j&3)){if(g>>>0<256){break a}if(e>>>0>=g+4>>>0){c=f;if(e-g>>>0<=H[7253]<<1>>>0){break a}}c=0;break a}h=e+f|0;b:{if(e>>>0>=g>>>0){d=e-g|0;if(d>>>0<16){break b}H[f+4>>2]=j&1|g|2;c=f+g|0;H[c+4>>2]=d|3;H[h+4>>2]=H[h+4>>2]|1;Dg(c,d);break b}if(H[7139]==(h|0)){e=e+H[7136]|0;if(e>>>0<=g>>>0){break a}H[f+4>>2]=j&1|g|2;d=f+g|0;c=e-g|0;H[d+4>>2]=c|1;H[7136]=c;H[7139]=d;break b}if(H[7138]==(h|0)){d=e+H[7135]|0;if(d>>>0>>0){break a}c=d-g|0;c:{if(c>>>0>=16){H[f+4>>2]=j&1|g|2;e=f+g|0;H[e+4>>2]=c|1;d=d+f|0;H[d>>2]=c;H[d+4>>2]=H[d+4>>2]&-2;break c}H[f+4>>2]=d|j&1|2;c=d+f|0;H[c+4>>2]=H[c+4>>2]|1;c=0;e=0}H[7138]=e;H[7135]=c;break b}d=H[h+4>>2];if(d&2){break a}k=e+(d&-8)|0;if(k>>>0>>0){break a}m=k-g|0;d:{if(d>>>0<=255){e=H[h+8>>2];c=d>>>3|0;d=H[h+12>>2];if((d|0)==(e|0)){H[7133]=H[7133]&Gq(-2,c);break d}H[e+12>>2]=d;H[d+8>>2]=e;break d}l=H[h+24>>2];i=H[h+12>>2];e:{if((i|0)!=(h|0)){c=H[h+8>>2];H[c+12>>2]=i;H[i+8>>2]=c;break e}f:{e=h+20|0;c=H[e>>2];if(c){break f}e=h+16|0;c=H[e>>2];if(c){break f}i=0;break e}while(1){d=e;i=c;e=c+20|0;c=H[e>>2];if(c){continue}e=i+16|0;c=H[i+16>>2];if(c){continue}break}H[d>>2]=0}if(!l){break d}d=H[h+28>>2];c=(d<<2)+28836|0;g:{if(H[c>>2]==(h|0)){H[c>>2]=i;if(i){break g}H[7134]=H[7134]&Gq(-2,d);break d}H[(H[l+16>>2]==(h|0)?16:20)+l>>2]=i;if(!i){break d}}H[i+24>>2]=l;c=H[h+16>>2];if(c){H[i+16>>2]=c;H[c+24>>2]=i}c=H[h+20>>2];if(!c){break d}H[i+20>>2]=c;H[c+24>>2]=i}if(m>>>0<=15){H[f+4>>2]=j&1|k|2;c=f+k|0;H[c+4>>2]=H[c+4>>2]|1;break b}H[f+4>>2]=j&1|g|2;d=f+g|0;H[d+4>>2]=m|3;c=f+k|0;H[c+4>>2]=H[c+4>>2]|1;Dg(d,m)}c=f}if(c){return c+8|0}f=cb(b);if(!f){return 0}c=H[a-4>>2];c=(c&3?-4:-8)+(c&-8)|0;Wb(f,a,b>>>0>c>>>0?c:b);Ba(a);return f}function om(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;r=oa-16|0;oa=r;j=c;while(1){a:{if((d|0)==(j|0)){j=d;break a}if(!I[j|0]){break a}j=j+1|0;continue}break}H[h>>2]=f;H[e>>2]=c;while(1){b:{c:{d:{if((c|0)==(d|0)|(f|0)==(g|0)){break d}i=H[b+4>>2];H[r+8>>2]=H[b>>2];H[r+12>>2]=i;s=oa-16|0;oa=s;H[s+12>>2]=H[a+8>>2];u=jc(s+8|0,s+12|0);n=j-c|0;t=b;m=oa-1040|0;oa=m;v=e;o=H[e>>2];H[m+12>>2]=o;p=f?f:m+16|0;l=0;w=f;e:{f:{g:{k=f?g-f>>2:256;if(!o|!k){break g}i=n>>>2|0;q=k>>>0<=i>>>0;if(i>>>0>>0?n>>>0<=131:0){break f}while(1){i=q?k:i;n=n-i|0;q=$i(p,m+12|0,i,t);if((q|0)==-1){k=0;o=H[m+12>>2];l=-1;break g}i=(m+16|0)==(p|0);k=k-(i?0:q)|0;p=i?p:(q<<2)+p|0;l=l+q|0;o=H[m+12>>2];if(!o|!k){break g}i=n>>>2|0;q=k>>>0<=i>>>0;if(n>>>0>131|i>>>0>=k>>>0){continue}break}break f}if(!o){break e}}if(!k|!n){break e}i=l;while(1){h:{l=Ve(p,o,n,t);i:{if(l+2>>>0<=2){j:{switch(l+1|0){case 1:H[m+12>>2]=0;break i;case 0:break e;default:break j}}H[t>>2]=0;break i}o=H[m+12>>2]+l|0;H[m+12>>2]=o;i=i+1|0;k=k-1|0;if(k){break h}}l=i;break e}p=p+4|0;n=n-l|0;l=i;if(n){continue}break}}if(w){H[v>>2]=H[m+12>>2]}oa=m+1040|0;ic(u);oa=s+16|0;k:{l:{m:{n:{if((l|0)==-1){while(1){o:{H[h>>2]=f;if(H[e>>2]==(c|0)){break o}g=1;p:{q:{r:{b=Ih(f,c,j-c|0,r+8|0,H[a+8>>2]);switch(b+2|0){case 2:break p;case 1:break r;case 0:break l;default:break q}}H[e>>2]=c;break n}g=b}c=c+g|0;f=H[h>>2]+4|0;continue}break}H[e>>2]=c;break d}f=H[h>>2]+(l<<2)|0;H[h>>2]=f;if((f|0)==(g|0)){break k}c=H[e>>2];if((d|0)==(j|0)){j=d;continue}if(!Ih(f,c,1,b,H[a+8>>2])){break m}}a=2;break c}H[h>>2]=H[h>>2]+4;c=H[e>>2]+1|0;H[e>>2]=c;j=c;while(1){if((d|0)==(j|0)){j=d;break b}if(!I[j|0]){break b}j=j+1|0;continue}}H[e>>2]=c;a=1;break c}c=H[e>>2]}a=(c|0)!=(d|0)}oa=r+16|0;return a|0}f=H[h>>2];continue}}function Lj(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=oa-16|0;oa=g;F[a+221|0]=0;a:{if(I[a+214|0]|!I[a+209|0]|(I[a+213|0]|I[a+217|0])){break a}if(I[a+216|0]|I[a+215|0]){break a}d=a+160|0;c=wa(d);b=H[a+200>>2];b:{while(1){b=b+1|0;e=0;if((c|0)<=(b|0)){break b}if(Db(F[Aa(d,b)|0])){continue}break}e=1;if(!Ra(d,b,2,22200)){break b}e=!Ra(d,b,2,22188)}if(e){break a}b=a+172|0;d=wa(b);if((d|0)<1){break a}f=Db(F[Aa(b,d-1|0)|0])}b=F[a+192|0];F[a+193|0]=b;c:{if(Db(b)){break c}F[a+194|0]=I[a+192|0];if(I[a+217|0]|(I[a+214|0]|I[a+213|0])){break c}if(Kd(a,22200)){break c}if(Kd(a,22188)){break c}F[a+195|0]=I[a+194|0]}d=a+160|0;e=wa(d);d:{e:{if((e|0)<=(H[a+200>>2]+1|0)){break e}if(!(i=1,j=!Db(af(a))|I[a+214|0],k=I[a+213|0],k?i:j)){break e}b=1;c=H[a+200>>2]+1|0;H[a+200>>2]=c;c=I[Aa(d,c)|0];F[a+192|0]=c;f:{if(!f){break f}if(!Db(c<<24>>24)){break f}while(1){c=H[a+200>>2]+1|0;if((c|0)>=(e|0)){break f}H[a+200>>2]=c;c=F[Aa(d,c)|0];F[a+192|0]=c;if(Db(c)){continue}break}}if(!I[a+212|0]|I[a+192|0]!=9){break d}F[a+192|0]=32;break d}if(zj(H[a+136>>2])){yj(g,H[a+136>>2]);Ua(d,g);va(g);if(!wa(d)){b=xa(g,3239);Ua(d,b);va(b)}g:{if(!I[a+208|0]){F[a+221|0]=1;break g}F[a+208|0]=0}if(I[a+213|0]){F[a+233|0]=1}F[a+213|0]=0;e=oa-16|0;oa=e;c=a+160|0;h=wa(c);H[a+200>>2]=0;b=a;h:{if(I[a+214|0]|I[a+215|0]){break h}i:{if(!Db(F[Aa(c,0)|0])){break i}while(1){f=H[b+200>>2]+1|0;if((f|0)>=(h|0)){break i}H[b+200>>2]=f;if(Db(F[Aa(c,f)|0])){continue}break}}F[b+216|0]=0;c=xa(e,2997);f=Kd(b,c);va(c);if(!f){break h}F[b+216|0]=1;H[b+200>>2]=0}oa=e+16|0;d=I[Aa(d,H[a+200>>2])|0];F[a+192|0]=d;if(I[a+194|0]!=92){F[a+215|0]=0}b=1;if(!I[a+212|0]|(d|0)!=9){break d}F[a+192|0]=32;break d}F[a+223|0]=1;b=0}oa=g+16|0;return b}function im(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;a:{b:{c:{while(1){c=H[a+12>>2];if(!(c>>>0>=d>>>0|f>>>0>=g>>>0)){b=2;i=I[c|0];if(i>>>0>1114111){break b}m=a;d:{if(i<<24>>24>=0){G[f>>1]=i;b=c+1|0;break d}if(i>>>0<194){break b}if(i>>>0<=223){if((d-c|0)<2){break c}j=I[c+1|0];if((j&192)!=128){break a}i=j&63|i<<6&1984;if(i>>>0>1114111){break a}G[f>>1]=i;b=c+2|0;break d}if(i>>>0<=239){if((d-c|0)<3){break c}k=I[c+2|0];j=I[c+1|0];e:{f:{if((i|0)!=237){if((i|0)!=224){break f}if((j&224)==160){break e}break a}if((j&224)==128){break e}break a}if((j&192)!=128){break a}}if((k&192)!=128){break a}i=k&63|((j&63)<<6|i<<12);if((i&65535)>>>0>1114111){break a}G[f>>1]=i;b=c+3|0;break d}if(i>>>0>244){break b}b=1;if((d-c|0)<4){break a}k=I[c+3|0];j=I[c+2|0];c=I[c+1|0];g:{h:{switch(i-240|0){case 0:if((c+112&255)>>>0>=48){break b}break g;case 4:if((c&240)!=128){break b}break g;default:break h}}if((c&192)!=128){break b}}if((j&192)!=128|(k&192)!=128){break b}if((g-f|0)<4){break a}b=2;k=k&63;l=j<<6;i=i&7;if((k|(l&4032|(c<<12&258048|i<<18)))>>>0>1114111){break a}b=c<<2;G[f>>1]=(j>>>4&3|(b&192|i<<8|b&60))+16320|55296;H[a+8>>2]=f+2;G[f+2>>1]=k|l&960|56320;b=H[a+12>>2]+4|0}H[m+12>>2]=b;f=H[a+8>>2]+2|0;H[a+8>>2]=f;continue}break}b=c>>>0>>0;break a}b=1;break a}b=2}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return b|0}function Yh(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=oa-16|0;oa=u;H[c>>2]=a;x=d&512;while(1){if((w|0)==4){if(wa(n)>>>0>1){H[u+8>>2]=Ob(n);H[c>>2]=Ge(ai(u+8|0,1),Sc(n),H[c>>2])}d=d&176;if((d|0)!=16){if((d|0)==32){a=H[c>>2]}H[b>>2]=a}oa=u+16|0}else{a:{b:{switch(F[i+w|0]){case 0:H[b>>2]=H[c>>2];break a;case 1:H[b>>2]=H[c>>2];q=Kb(g,32);p=H[c>>2];H[c>>2]=p+4;H[p>>2]=q;break a;case 3:if($b(n)){break a}q=H[Qe(n,0)>>2];p=H[c>>2];H[c>>2]=p+4;H[p>>2]=q;break a;case 2:if($b(m)|!x){break a}H[c>>2]=Ge(Ob(m),Sc(m),H[c>>2]);break a;case 4:break b;default:break a}}y=H[c>>2];e=h?e+4|0:e;r=e;while(1){c:{if(f>>>0<=r>>>0){break c}if(!cc(g,2048,H[r>>2])){break c}r=r+4|0;continue}break}p=o;if((p|0)>=1){while(1){if(!((p|0)<1|e>>>0>=r>>>0)){r=r-4|0;s=H[r>>2];q=H[c>>2];H[c>>2]=q+4;H[q>>2]=s;p=p-1|0;continue}break}if((p|0)<1){v=0}else{v=Kb(g,48)}q=H[c>>2];while(1){s=q+4|0;if((p|0)>=1){H[q>>2]=v;p=p-1|0;q=s;continue}break}H[c>>2]=s;H[q>>2]=j}d:{if((e|0)==(r|0)){q=Kb(g,48);p=H[c>>2];r=p+4|0;H[c>>2]=r;H[p>>2]=q;break d}if($b(l)){s=-1}else{s=F[Aa(l,0)|0]}p=0;t=0;while(1){if((e|0)!=(r|0)){e:{if((p|0)!=(s|0)){q=p;break e}q=H[c>>2];H[c>>2]=q+4;H[q>>2]=k;q=0;t=t+1|0;if(wa(l)>>>0<=t>>>0){s=p;break e}if(I[Aa(l,t)|0]==127){s=-1;break e}s=F[Aa(l,t)|0]}r=r-4|0;v=H[r>>2];p=H[c>>2];H[c>>2]=p+4;H[p>>2]=v;p=q+1|0;continue}break}r=H[c>>2]}Me(y,r)}w=w+1|0;continue}break}}function jm(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;c=H[a+12>>2];a:{b:{while(1){if(c>>>0>=d>>>0){f=0;break a}f=2;b=J[c>>1];if(b>>>0>1114111){break a}c:{d:{if(b>>>0<=127){f=1;c=H[a+8>>2];if((g-c|0)<1){break a}H[a+8>>2]=c+1;F[c|0]=b;break d}if(b>>>0<=2047){c=H[a+8>>2];if((g-c|0)<2){break b}H[a+8>>2]=c+1;F[c|0]=b>>>6|192;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break d}if(b>>>0<=55295){c=H[a+8>>2];if((g-c|0)<3){break b}H[a+8>>2]=c+1;F[c|0]=b>>>12|224;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break d}if(b>>>0<=56319){f=1;if((d-c|0)<4){break a}i=J[c+2>>1];if((i&64512)!=56320){break c}if((g-H[a+8>>2]|0)<4){break a}f=b&960;if((i&1023|(b<<10&64512|f<<10))+65536>>>0>1114111){break c}H[a+12>>2]=c+2;c=H[a+8>>2];H[a+8>>2]=c+1;j=c;c=(f>>>6|0)+1|0;F[j|0]=c>>>2|240;f=H[a+8>>2];H[a+8>>2]=f+1;F[f|0]=c<<4&48|b>>>2&15|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=i>>>6&15|b<<4&48|128;b=H[a+8>>2];H[a+8>>2]=b+1;F[b|0]=i&63|128;break d}if(b>>>0<57344){break a}c=H[a+8>>2];if((g-c|0)<3){break b}H[a+8>>2]=c+1;F[c|0]=b>>>12|224;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128}c=H[a+12>>2]+2|0;H[a+12>>2]=c;continue}break}f=2;break a}f=1}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return f|0}function jl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;d=oa-16|0;oa=d;a:{b:{if(!H[a+64>>2]){f=-1;break b}b=a;f=H[a+92>>2]&8;if(!f){Ac(b,0,0);c:{if(I[b+98|0]){g=H[b+32>>2];c=g+H[b+52>>2]|0;break c}g=H[b+56>>2];c=g+H[b+60>>2]|0}hc(b,g,c,c);H[b+92>>2]=8}b=!f;if(!H[a+12>>2]){c=d+16|0;hc(a,d+15|0,c,c)}if(!b){b=H[a+16>>2];c=H[a+8>>2];H[d+4>>2]=4;H[d+8>>2]=(b-c|0)/2;e=H[zc(d+8|0,d+4|0)>>2]}f=-1;d:{if(H[a+12>>2]==H[a+16>>2]){ie(H[a+8>>2],H[a+16>>2]-e|0,e);if(I[a+98|0]){b=oh(H[a+8>>2]+e|0,H[a+16>>2]-(H[a+8>>2]+e|0)|0,H[a+64>>2]);if(!b){break d}hc(a,H[a+8>>2],H[a+8>>2]+e|0,b+(H[a+8>>2]+e|0)|0);f=Sb(F[H[a+12>>2]]);break d}g=a;b=H[a+40>>2];c=H[a+36>>2];e:{if((b|0)==(c|0)){c=b;break e}ie(H[a+32>>2],c,b-c|0);b=H[a+36>>2];c=H[a+40>>2]}c=c-b|0;b=H[a+32>>2];c=c+b|0;H[g+36>>2]=c;b=b+((b|0)==(a+44|0)?8:H[a+52>>2])|0;H[a+40>>2]=b;H[d+8>>2]=H[a+60>>2]-e;H[d+4>>2]=b-c;b=H[zc(d+8|0,d+4|0)>>2];c=H[a+76>>2];H[a+80>>2]=H[a+72>>2];H[a+84>>2]=c;b=oh(H[a+36>>2],b,H[a+64>>2]);if(!b){break d}c=H[a+68>>2];if(!c){break a}b=b+H[a+36>>2]|0;H[a+40>>2]=b;f:{if((wf(c,a+72|0,H[a+32>>2],b,a+36|0,H[a+8>>2]+e|0,H[a+8>>2]+H[a+60>>2]|0,d+8|0)|0)==3){b=H[a+32>>2];hc(a,b,b,H[a+40>>2]);break f}if(H[d+8>>2]==(H[a+8>>2]+e|0)){break d}hc(a,H[a+8>>2],H[a+8>>2]+e|0,H[d+8>>2])}f=Sb(F[H[a+12>>2]]);break d}f=Sb(F[H[a+12>>2]])}if(H[a+8>>2]!=(d+15|0)){break b}hc(a,0,0,0)}oa=d+16|0;return f|0}db();X()}function _h(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=oa-16|0;oa=u;H[c>>2]=a;x=d&512;while(1){if((v|0)==4){if(wa(n)>>>0>1){H[u+8>>2]=Ob(n);H[c>>2]=Ge(gi(u+8|0,1),Vc(n),H[c>>2])}d=d&176;if((d|0)!=16){if((d|0)==32){a=H[c>>2]}H[b>>2]=a}oa=u+16|0;return}a:{b:{switch(F[i+v|0]){case 0:H[b>>2]=H[c>>2];break a;case 1:H[b>>2]=H[c>>2];q=pb(g,32);p=H[c>>2];H[c>>2]=p+1;F[p|0]=q;break a;case 3:if($b(n)){break a}q=I[Aa(n,0)|0];p=H[c>>2];H[c>>2]=p+1;F[p|0]=q;break a;case 2:if($b(m)|!x){break a}H[c>>2]=Ge(Ob(m),Vc(m),H[c>>2]);break a;case 4:break b;default:break a}}y=H[c>>2];e=h?e+1|0:e;r=e;while(1){c:{if(f>>>0<=r>>>0){break c}if(!dc(g,2048,F[r|0])){break c}r=r+1|0;continue}break}q=o;if((q|0)>=1){while(1){if(!((q|0)<1|e>>>0>=r>>>0)){r=r-1|0;p=I[r|0];s=H[c>>2];H[c>>2]=s+1;F[s|0]=p;q=q-1|0;continue}break}if((q|0)<1){p=0}else{p=pb(g,48)}while(1){s=H[c>>2];H[c>>2]=s+1;if((q|0)>=1){F[s|0]=p;q=q-1|0;continue}break}F[s|0]=j}d:{if((e|0)==(r|0)){q=pb(g,48);p=H[c>>2];H[c>>2]=p+1;F[p|0]=q;break d}if($b(l)){p=-1}else{p=F[Aa(l,0)|0]}q=0;t=0;while(1){if((e|0)==(r|0)){break d}e:{if((q|0)!=(p|0)){s=q;break e}p=H[c>>2];H[c>>2]=p+1;F[p|0]=k;s=0;t=t+1|0;if(wa(l)>>>0<=t>>>0){p=q;break e}if(I[Aa(l,t)|0]==127){p=-1;break e}p=F[Aa(l,t)|0]}r=r-1|0;q=I[r|0];w=H[c>>2];H[c>>2]=w+1;F[w|0]=q;q=s+1|0;continue}}fd(y,H[c>>2])}v=v+1|0;continue}}function hk(a,b){var c=0,d=0,e=0,f=0;e=oa-32|0;oa=e;H[a>>2]=7640;f=Ea(a+48|0);H[a+16>>2]=0;H[a+20>>2]=0;H[a+8>>2]=0;H[a+12>>2]=0;c=Na(12);d=Sa(c);H[a+24>>2]=c;Md(d,H[b+24>>2]);c=Na(12);Sa(c);H[a+28>>2]=c;c=Uf(e+24|0);H[c>>2]=Ed(H[b+28>>2]);H[e+16>>2]=Xc(H[b+28>>2]);if(zb(c,e+16|0)){while(1){d=Na(12);Sa(d);H[e+12>>2]=d;Md(H[e+12>>2],H[H[c>>2]>>2]);xc(H[a+28>>2],e+12|0);od(c);H[e+16>>2]=Xc(H[b+28>>2]);if(zb(c,e+16|0)){continue}break}}c=Na(12);d=Sa(c);H[a+32>>2]=c;Md(d,H[b+32>>2]);c=Na(12);d=Sa(c);H[a+36>>2]=c;Md(d,H[b+36>>2]);c=Na(12);d=Sa(c);H[a+40>>2]=c;Md(d,H[b+40>>2]);c=Na(12);d=Sa(c);H[a+44>>2]=c;Md(d,H[b+44>>2]);H[a+4>>2]=H[b+4>>2];bf(f,b+48|0);H[a+60>>2]=H[b+60>>2];H[a+64>>2]=H[b+64>>2];F[a+68|0]=I[b+68|0];F[a+69|0]=I[b+69|0];H[a+72>>2]=H[b+72>>2];F[a+76|0]=I[b+76|0];F[a+77|0]=I[b+77|0];F[a+78|0]=I[b+78|0];F[a+83|0]=I[b+83|0];F[a+84|0]=I[b+84|0];F[a+85|0]=I[b+85|0];F[a+86|0]=I[b+86|0];H[a+96>>2]=H[b+96>>2];H[a+100>>2]=H[b+100>>2];H[a+104>>2]=H[b+104>>2];H[a+108>>2]=H[b+108>>2];F[a+112|0]=I[b+112|0];F[a+113|0]=I[b+113|0];F[a+114|0]=I[b+114|0];F[a+115|0]=I[b+115|0];F[a+116|0]=I[b+116|0];F[a+87|0]=I[b+87|0];H[a+92>>2]=H[b+92>>2];H[a+120>>2]=H[b+120>>2];H[a+124>>2]=H[b+124>>2];F[a+128|0]=I[b+128|0];F[a+79|0]=I[b+79|0];F[a+80|0]=I[b+80|0];F[a+129|0]=I[b+129|0];H[a+132>>2]=H[b+132>>2];oa=e+32|0}function Za(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=oa-16|0;oa=i;Tf(a);c=oa-16|0;oa=c;H[c+12>>2]=a;g=i+8|0;Cb(g,c+12|0);oa=c+16|0;if(Pa(26176)>>>0<=b>>>0){a:{a=Pa(26176);c=b+1|0;if(a>>>0>>0){j=oa-32|0;oa=j;h=c-a|0;b:{if(h>>>0<=H[Ce(26176)>>2]-H[6545]>>2>>>0){Uh(h);break b}f=ed(26176);c=j+8|0;a=Pa(26176)+h|0;d=oa-16|0;oa=d;H[d+12>>2]=a;c:{e=Bh();if(a>>>0<=e>>>0){a=dd(26176);if(a>>>0>>1>>>0){H[d+8>>2]=a<<1;e=H[ad(d+8|0,d+12|0)>>2]}oa=d+16|0;a=e;break c}$d();X()}d=Pa(26176);e=oa-16|0;oa=e;H[e+12>>2]=0;yf(c+12|0,f);if(a){k=Ah(H[c+16>>2],a)}H[c>>2]=k;d=(d<<2)+k|0;H[c+8>>2]=d;H[c+4>>2]=d;H[Ic(c)>>2]=(a<<2)+k;oa=e+16|0;d=oa-16|0;oa=d;a=c;f=d;H[d>>2]=H[c+8>>2];e=H[c+8>>2];H[d+8>>2]=c+8;H[d+4>>2]=e+(h<<2);e=H[d>>2];while(1){if(H[f+4>>2]!=(e|0)){yh(H[a+16>>2],H[f>>2]);e=H[f>>2]+4|0;H[f>>2]=e;continue}break}H[H[f+8>>2]>>2]=H[f>>2];oa=d+16|0;Ph(26176);a=c+4|0;Vj(ed(26176),H[6544],H[6545],a);nc(26176,a);nc(26180,c+8|0);nc(Ce(26176),Ic(c));H[c>>2]=H[c+4>>2];zh(Pa(26176));a=c;e=c;d=H[c+4>>2];while(1){if((d|0)!=H[e+8>>2]){H[e+8>>2]=H[e+8>>2]-4;continue}break}if(H[c>>2]){wh(H[a+16>>2],H[a>>2],Tj(a))}}oa=j+32|0;break a}if(a>>>0>c>>>0){c=H[6544]+(c<<2)|0;Pa(26176);vh(26176,c);Sh()}}}if(H[lc(26176,b)>>2]){Ee(H[lc(26176,b)>>2])}a=Ud(g);H[lc(26176,b)>>2]=a;a=H[g>>2];H[g>>2]=0;if(a){Ee(a)}oa=i+16|0}function fm(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;a:{b:{while(1){i=H[a+12>>2];if(!(i>>>0>=d>>>0|f>>>0>=g>>>0)){c=F[i|0];b=c&255;c:{if((c|0)>=0){if(b>>>0<=1114111){l=1;break c}c=2;break a}c=2;if(b>>>0<194){break a}if(b>>>0<=223){if((d-i|0)<2){break b}j=I[i+1|0];if((j&192)!=128){break a}l=2;b=j&63|b<<6&1984;if(b>>>0<=1114111){break c}break a}if(b>>>0<=239){if((d-i|0)<3){break b}j=I[i+2|0];k=I[i+1|0];d:{e:{if((b|0)!=237){if((b|0)!=224){break e}if((k&224)==160){break d}break a}if((k&224)==128){break d}break a}if((k&192)!=128){break a}}if((j&192)!=128){break a}l=3;b=j&63|(b<<12&61440|(k&63)<<6);if(b>>>0<=1114111){break c}break a}if(b>>>0>244){break a}if((d-i|0)<4){break b}k=I[i+3|0];j=I[i+2|0];m=I[i+1|0];f:{g:{switch(b-240|0){case 0:if((m+112&255)>>>0<48){break f}break a;case 4:if((m&240)==128){break f}break a;default:break g}}if((m&192)!=128){break a}}if((j&192)!=128|(k&192)!=128){break a}l=4;b=k&63|(j<<6&4032|(b<<18&1835008|(m&63)<<12));if(b>>>0>1114111){break a}}H[f>>2]=b;H[a+12>>2]=i+l;f=H[a+8>>2]+4|0;H[a+8>>2]=f;continue}break}c=d>>>0>i>>>0;break a}c=1}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return c|0}function Zi(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k=oa-16|0;oa=k;a:{b:{c:{if((c|0)<=36){g=I[a|0];if(g){break c}f=a;break b}H[6070]=28;d=0;e=0;break a}f=a;d:{while(1){if(!Yc(g<<24>>24)){break d}g=I[f+1|0];h=f+1|0;f=h;if(g){continue}break}f=h;break b}e:{g=I[f|0];switch(g-43|0){case 0:case 2:break e;default:break b}}m=(g|0)==45?-1:0;f=f+1|0}f:{if(!(c&-17|I[f|0]!=48)){o=1;if((I[f+1|0]&223)==88){f=f+2|0;l=16;break f}f=f+1|0;l=c?c:8;break f}l=c?c:10}p=l;q=l>>31;c=0;while(1){g:{g=-48;h=F[f|0];h:{if((h-48&255)>>>0<10){break h}g=-87;if((h-97&255)>>>0<26){break h}g=-55;if((h-65&255)>>>0>25){break g}}h=g+h|0;if((h|0)>=(l|0)){break g}rb(k,p,q,0,0,j,i,0,0);g=1;i:{if(H[k+8>>2]|H[k+12>>2]){break i}r=Eq(j,i,p,q);n=pa;s=h>>31;t=s^-1;if((n|0)==(t|0)&(h^-1)>>>0>>0|n>>>0>t>>>0){break i}i=n+s|0;g=h+r|0;i=g>>>0>>0?i+1|0:i;j=g;o=1;g=c}f=f+1|0;c=g;continue}break}if(b){H[b>>2]=o?f:a}j:{k:{if(c){H[6070]=68;a=d&1;m=a?0:m;j=d;i=e;break k}if((e|0)==(i|0)&d>>>0>j>>>0|e>>>0>i>>>0){break j}a=d&1}if(!(a|m)){H[6070]=68;a=d;d=a-1|0;e=e-(a>>>0<1)|0;break a}if((e|0)==(i|0)&d>>>0>=j>>>0|e>>>0>i>>>0){break j}H[6070]=68;break a}a=m;b=a^j;d=b-a|0;c=a>>31;e=(c^i)-((a>>>0>b>>>0)+c|0)|0}oa=k+16|0;pa=e;return d}function Ai(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;j=oa-16|0;oa=j;k=Ib(g);n=Dd(g);Gb(j,n);H[f>>2]=d;a:{b:{h=a;g=I[h|0];switch(g-43|0){case 0:case 2:break b;default:break a}}g=Kb(k,g<<24>>24);h=H[f>>2];H[f>>2]=h+4;H[h>>2]=g;h=a+1|0}c:{g=h;if(!((c-g|0)<=1|I[g|0]!=48|(I[g+1|0]|32)!=120)){g=Kb(k,48);i=H[f>>2];H[f>>2]=i+4;H[i>>2]=g;g=Kb(k,F[h+1|0]);i=H[f>>2];H[f>>2]=i+4;H[i>>2]=g;h=h+2|0;g=h;while(1){if(c>>>0<=g>>>0){break c}if(!dj(F[g|0],Oa())){break c}g=g+1|0;continue}}while(1){if(c>>>0<=g>>>0){break c}i=F[g|0];Oa();if(!Rb(i)){break c}g=g+1|0;continue}}d:{if($b(j)){Ec(k,h,g,H[f>>2]);H[f>>2]=H[f>>2]+(g-h<<2);break d}fd(h,g);p=Hb(n);i=h;while(1){if(g>>>0<=i>>>0){Me((h-a<<2)+d|0,H[f>>2])}else{e:{if(F[Aa(j,l)|0]<1){break e}if(F[Aa(j,l)|0]!=(m|0)){break e}m=H[f>>2];H[f>>2]=m+4;H[m>>2]=p;l=(wa(j)-1>>>0>l>>>0)+l|0;m=0}q=Kb(k,F[i|0]);o=H[f>>2];H[f>>2]=o+4;H[o>>2]=q;i=i+1|0;m=m+1|0;continue}break}}f:{g:{while(1){if(c>>>0<=g>>>0){break g}h=I[g|0];if((h|0)!=46){h=Kb(k,h<<24>>24);i=H[f>>2];H[f>>2]=i+4;H[i>>2]=h;g=g+1|0;continue}break}h=ec(n);l=H[f>>2];i=l+4|0;H[f>>2]=i;H[l>>2]=h;g=g+1|0;break f}i=H[f>>2]}Ec(k,g,c,i);h=f;f=H[f>>2]+(c-g<<2)|0;H[h>>2]=f;H[e>>2]=(b|0)==(c|0)?f:(b-a<<2)+d|0;va(j);oa=j+16|0}function dl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;e=oa-16|0;oa=e;a:{b:{if(!H[a+64>>2]){break b}b=H[a+68>>2];if(!b){break a}c:{c=H[a+92>>2];d:{if(c&16){if(H[a+24>>2]!=H[a+20>>2]){b=-1;if((qa[H[H[a>>2]+52>>2]](a,-1)|0)==-1){break b}}c=a+72|0;while(1){b=H[a+32>>2];d=$g(H[a+68>>2],c,b,b+H[a+52>>2]|0,e+12|0);f=H[a+32>>2];b=H[e+12>>2]-f|0;if((Ub(f,1,b,H[a+64>>2])|0)!=(b|0)){break c}b=-1;e:{switch(d-1|0){case 1:break b;case 0:continue;default:break e}}break}if(!ze(H[a+64>>2])){break d}break b}if(!(c&8)){break d}c=H[a+84>>2];H[e>>2]=H[a+80>>2];H[e+4>>2]=c;f:{g:{h:{if(I[a+98|0]){c=H[a+16>>2]-H[a+12>>2]|0;b=c;c=b>>31;break h}d=$c(b);c=H[a+40>>2]-H[a+36>>2]|0;b=c;c=b>>31;if((d|0)>=1){f=N(d,H[a+16>>2]-H[a+12>>2]|0);d=b+f|0;c=c+(f>>31)|0;c=b>>>0>d>>>0?c+1|0:c;b=d;break h}if(H[a+12>>2]!=H[a+16>>2]){break g}}d=0;break f}d=H[a+68>>2];d=qa[H[H[d>>2]+32>>2]](d,e,H[a+32>>2],H[a+36>>2],H[a+12>>2]-H[a+8>>2]|0)|0;f=H[a+36>>2]-(d+H[a+32>>2]|0)|0;d=b+f|0;c=(f>>31)+c|0;c=b>>>0>d>>>0?c+1|0:c;b=d;d=1}if(Ae(H[a+64>>2],0-b|0,0-(c+((b|0)!=0)|0)|0,1)){break c}if(d){b=H[e+4>>2];H[a+72>>2]=H[e>>2];H[a+76>>2]=b}b=H[a+32>>2];H[a+40>>2]=b;H[a+36>>2]=b;hc(a,0,0,0);H[a+92>>2]=0}b=0;break b}b=-1}oa=e+16|0;return b|0}db();X()}function Di(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=oa-16|0;oa=k;j=Fb(g);n=Gd(g);Gb(k,n);H[f>>2]=d;a:{b:{h=a;g=I[h|0];switch(g-43|0){case 0:case 2:break b;default:break a}}g=pb(j,g<<24>>24);h=H[f>>2];H[f>>2]=h+1;F[h|0]=g;h=a+1|0}c:{g=h;if(!((c-g|0)<=1|I[g|0]!=48|(I[g+1|0]|32)!=120)){g=pb(j,48);i=H[f>>2];H[f>>2]=i+1;F[i|0]=g;g=pb(j,F[h+1|0]);i=H[f>>2];H[f>>2]=i+1;F[i|0]=g;h=h+2|0;g=h;while(1){if(c>>>0<=g>>>0){break c}if(!dj(F[g|0],Oa())){break c}g=g+1|0;continue}}while(1){if(c>>>0<=g>>>0){break c}i=F[g|0];Oa();if(!Rb(i)){break c}g=g+1|0;continue}}d:{if($b(k)){Wc(j,h,g,H[f>>2]);H[f>>2]=H[f>>2]+(g-h|0);break d}fd(h,g);p=Hb(n);i=h;while(1){if(g>>>0<=i>>>0){fd((h-a|0)+d|0,H[f>>2])}else{e:{if(F[Aa(k,m)|0]<1){break e}if(F[Aa(k,m)|0]!=(l|0)){break e}l=H[f>>2];H[f>>2]=l+1;F[l|0]=p;m=(wa(k)-1>>>0>m>>>0)+m|0;l=0}q=pb(j,F[i|0]);o=H[f>>2];H[f>>2]=o+1;F[o|0]=q;i=i+1|0;l=l+1|0;continue}break}}while(1){f:{h=j;if(c>>>0>g>>>0){i=I[g|0];if((i|0)!=46){break f}j=ec(n);i=H[f>>2];H[f>>2]=i+1;F[i|0]=j;g=g+1|0}Wc(h,g,c,H[f>>2]);h=f;f=H[f>>2]+(c-g|0)|0;H[h>>2]=f;H[e>>2]=(b|0)==(c|0)?f:(b-a|0)+d|0;va(k);oa=k+16|0;return}h=pb(j,i<<24>>24);i=H[f>>2];H[f>>2]=i+1;F[i|0]=h;g=g+1|0;continue}}function Wm(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a=oa-448|0;oa=a;H[a+432>>2]=c;H[a+440>>2]=b;H[a+20>>2]=152;k=Ya(a+24|0,a+32|0,a+20|0);Ia(a+16|0,e);h=Ib(a+16|0);F[a+15|0]=0;if(ei(a+440|0,c,d,a+16|0,H[e+4>>2],f,a+15|0,h,k,a+20|0,a+432|0)){c=oa-16|0;oa=c;b=g;a:{if(tb(g)){d=H[b>>2];H[c+12>>2]=0;Cb(d,c+12|0);yb(b,0);break a}H[c+8>>2]=0;Cb(b,c+8|0);ub(b,0)}oa=c+16|0;if(I[a+15|0]){mf(g,Kb(h,45))}b=Kb(h,48);e=H[k>>2];h=H[a+20>>2];c=h-4|0;while(1){if(!((b|0)!=H[e>>2]|c>>>0<=e>>>0)){e=e+4|0;continue}break}b=oa-16|0;oa=b;c=wa(g);d=Mf(g);i=rg(e,h);b:{if(!i){break b}if(qh(e,Ca(g),Ca(g)+(wa(g)<<2)|0)){c=oa-16|0;oa=c;Wi(b,e,h);oa=c+16|0;d=b;i=Ca(b);e=wa(b);h=oa-16|0;oa=h;c=g;j=Mf(c);g=wa(c);c:{if(e>>>0<=j-g>>>0){if(!e){break c}j=Ca(c);oc(j+(g<<2)|0,i,e);i=c;c=e+g|0;Lc(i,c);H[h+12>>2]=0;Cb(j+(c<<2)|0,h+12|0);break c}Jg(c,j,(e+g|0)-j|0,g,g,0,e,i)}oa=h+16|0;va(d);break b}if(i>>>0>d-c>>>0){Ig(g,d,(c+i|0)-d|0,c,c)}d=Ca(g)+(c<<2)|0;while(1){if((e|0)!=(h|0)){Cb(d,e);e=e+4|0;d=d+4|0;continue}break}H[b>>2]=0;Cb(d,b);Lc(g,c+i|0)}oa=b+16|0}if(jb(a+440|0,a+432|0)){H[f>>2]=H[f>>2]|2}b=H[a+440>>2];Fa(a+16|0);_a(k);oa=a+448|0;return b|0}function og(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(H[a+4>>2]!=H[gb(a)>>2]){c=oa-16|0;oa=c;H[c>>2]=a;e=H[a+4>>2];H[c+4>>2]=e;H[c+8>>2]=e+12;xh(gb(a),H[c+4>>2],b);H[c+4>>2]=H[c+4>>2]+12;Be(c);oa=c+16|0;return}i=oa-32|0;oa=i;j=gb(a);k=j;c=i+8|0;h=ye(a)+1|0;f=oa-16|0;oa=f;H[f+12>>2]=h;g=oa-16|0;oa=g;e=a;gb(a);H[g+12>>2]=357913941;H[g+8>>2]=2147483647;d=H[zc(g+12|0,g+8|0)>>2];oa=g+16|0;a:{if(d>>>0>=h>>>0){e=qd(e);if(e>>>0>>1>>>0){H[f+8>>2]=e<<1;d=H[ad(f+8|0,f+12|0)>>2]}oa=f+16|0;e=d;break a}$d();X()}g=ye(a);d=0;f=oa-16|0;oa=f;H[f+12>>2]=0;yf(c+12|0,j);if(e){d=e;if(d>>>0>357913941){Fe(2074);X()}d=Na(N(d,12))}H[c>>2]=d;g=N(g,12)+d|0;H[c+8>>2]=g;H[c+4>>2]=g;H[Ic(c)>>2]=N(e,12)+d;oa=f+16|0;xh(k,H[c+8>>2],b);H[c+8>>2]=H[c+8>>2]+12;ui(a);gb(a);b=c;g=c+4|0;e=g;d=H[a+4>>2];h=H[a>>2];if((d|0)!=(h|0)){f=H[e>>2];while(1){d=d-12|0;Vd(f-12|0,d);f=H[e>>2]-12|0;H[e>>2]=f;if((d|0)!=(h|0)){continue}break}}nc(a,g);nc(a+4|0,b+8|0);nc(gb(a),Ic(b));H[b>>2]=H[b+4>>2];ye(a);qd(a);qd(a);a=c;b=H[a+4>>2];if((b|0)!=H[a+8>>2]){while(1){e=H[a+16>>2];d=H[a+8>>2]-12|0;H[a+8>>2]=d;Hg(e,d);if((b|0)!=H[a+8>>2]){continue}break}}if(H[c>>2]){a=H[c>>2];Ic(c);Ba(a)}oa=i+32|0}function jj(a,b){var c=0,d=0,e=0,f=0,g=0;a:{b:{c:{c=H[a+4>>2];d:{if(c>>>0>2]){H[a+4>>2]=c+1;c=I[c|0];break d}c=La(a)}switch(c-43|0){case 0:case 2:break b;default:break c}}b=c-48|0;break a}f=(c|0)==45;g=!b;b=H[a+4>>2];e:{if(b>>>0>2]){H[a+4>>2]=b+1;c=I[b|0];break e}c=La(a)}b=c-48|0;if(!(g|b>>>0<10|!H[a+104>>2])){H[a+4>>2]=H[a+4>>2]-1}}f:{if(b>>>0<10){while(1){e=N(d,10)+c|0;b=H[a+4>>2];g:{if(b>>>0>2]){H[a+4>>2]=b+1;c=I[b|0];break g}c=La(a)}b=c-48|0;d=e-48|0;if((d|0)<214748364?b>>>0<=9:0){continue}break}e=d;d=d>>31;h:{if(b>>>0>=10){break h}while(1){e=Eq(e,d,10,0);c=e+c|0;b=pa;b=c>>>0>>0?b+1|0:b;e=c-48|0;d=b-(c>>>0<48)|0;b=H[a+4>>2];i:{if(b>>>0>2]){H[a+4>>2]=b+1;c=I[b|0];break i}c=La(a)}b=c-48|0;if(b>>>0>9){break h}if((d|0)<21474836?1:(d|0)<=21474836?e>>>0<2061584302:0){continue}break}}if(b>>>0<10){while(1){b=H[a+4>>2];j:{if(b>>>0>2]){H[a+4>>2]=b+1;b=I[b|0];break j}b=La(a)}if(b-48>>>0<10){continue}break}}if(H[a+104>>2]){H[a+4>>2]=H[a+4>>2]-1}a=e;e=f?0-a|0:a;d=f?0-(((a|0)!=0)+d|0)|0:d;break f}d=-2147483648;if(!H[a+104>>2]){break f}H[a+4>>2]=H[a+4>>2]-1;pa=-2147483648;return 0}pa=d;return e}function Ak(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(Mb(a,H[b+8>>2],e)){gf(b,c,d);return}a:{if(Mb(a,H[b>>2],e)){if(!(H[b+20>>2]!=(c|0)?H[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}H[b+32>>2]=1;return}H[b+32>>2]=d;if(H[b+44>>2]!=4){f=a+16|0;i=f+(H[a+12>>2]<<3)|0;j=b;b:{c:{while(1){d:{if(f>>>0>=i>>>0){break d}G[b+52>>1]=0;ff(f,b,c,c,1,e);if(I[b+54|0]){break d}e:{if(!I[b+53|0]){break e}if(I[b+52|0]){d=1;if(H[b+24>>2]==1){break c}h=1;g=1;if(I[a+8|0]&2){break e}break c}h=1;d=g;if(!(F[a+8|0]&1)){break c}}f=f+8|0;continue}break}d=g;a=4;if(!h){break b}}a=3}H[j+44>>2]=a;if(d&1){break a}}H[b+20>>2]=c;H[b+40>>2]=H[b+40>>2]+1;if(H[b+36>>2]!=1|H[b+24>>2]!=2){break a}F[b+54|0]=1;return}g=H[a+12>>2];f=a+16|0;le(f,b,c,d,e);if((g|0)<2){break a}g=f+(g<<3)|0;f=a+24|0;a=H[a+8>>2];if(H[b+36>>2]!=1?a&2:1){while(1){if(I[b+54|0]){break a}le(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}break a}if(!(a&1)){while(1){if(I[b+54|0]|H[b+36>>2]==1){break a}le(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break a}}while(1){if(I[b+54|0]|(H[b+24>>2]==1?H[b+36>>2]==1:0)){break a}le(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}}}function Tm(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;a=oa-1072|0;oa=a;H[a+16>>2]=f;H[a+20>>2]=g;H[a+24>>2]=h;H[a+28>>2]=i;H[a+956>>2]=a+960;j=oj(a+960|0,a+16|0);H[a+544>>2]=151;o=Ya(a+536|0,0,a+544|0);H[a+544>>2]=151;k=Ya(a+528|0,0,a+544|0);l=a+544|0;a:{if(j>>>0>=100){j=Oa();H[a>>2]=f;H[a+4>>2]=g;H[a+8>>2]=h;H[a+12>>2]=i;j=tc(a+956|0,j,2064,a);if((j|0)==-1){break a}lb(o,H[a+956>>2]);lb(k,cb(j<<2));if(De(k)){break a}l=H[k>>2]}Ia(a+520|0,d);p=Ib(a+520|0);f=H[a+956>>2];Ec(p,f,f+j|0,l);m=(j|0)>=1?I[H[a+956>>2]]==45:m;n=Ea(a+488|0);g=bc(a+472|0);h=bc(a+456|0);Zh(c,m,a+520|0,a+512|0,a+508|0,a+504|0,n,g,h,a+452|0);H[a+48>>2]=151;i=Ya(a+40|0,0,a+48|0);c=a+48|0;f=H[a+452>>2];b:{if((f|0)<(j|0)){f=((wa(h)+(j-f<<1|1)|0)+wa(g)|0)+H[a+452>>2]|0;break b}f=((wa(h)+wa(g)|0)+H[a+452>>2]|0)+2|0}if(f>>>0>=101){lb(i,cb(f<<2));c=H[i>>2];if(!c){break a}}Yh(c,a+36|0,a+32|0,H[d+4>>2],l,(j<<2)+l|0,p,m,a+512|0,H[a+508>>2],H[a+504>>2],n,g,h,H[a+452>>2]);b=Dc(b,c,H[a+36>>2],H[a+32>>2],d,e);_a(i);va(h);va(g);va(n);Fa(a+520|0);_a(k);_a(o);oa=a+1072|0;return b|0}db();X()}function Wb(a,b,c){var d=0,e=0,f=0;if(c>>>0>=512){ka(a|0,b|0,c|0)|0;return a}e=a+c|0;a:{if(!((a^b)&3)){b:{if(!(a&3)){c=a;break b}if((c|0)<1){c=a;break b}c=a;while(1){F[c|0]=I[b|0];b=b+1|0;c=c+1|0;if(!(c&3)){break b}if(c>>>0>>0){continue}break}}d=e&-4;c:{if(d>>>0<64){break c}f=d+-64|0;if(f>>>0>>0){break c}while(1){H[c>>2]=H[b>>2];H[c+4>>2]=H[b+4>>2];H[c+8>>2]=H[b+8>>2];H[c+12>>2]=H[b+12>>2];H[c+16>>2]=H[b+16>>2];H[c+20>>2]=H[b+20>>2];H[c+24>>2]=H[b+24>>2];H[c+28>>2]=H[b+28>>2];H[c+32>>2]=H[b+32>>2];H[c+36>>2]=H[b+36>>2];H[c+40>>2]=H[b+40>>2];H[c+44>>2]=H[b+44>>2];H[c+48>>2]=H[b+48>>2];H[c+52>>2]=H[b+52>>2];H[c+56>>2]=H[b+56>>2];H[c+60>>2]=H[b+60>>2];b=b- -64|0;c=c- -64|0;if(f>>>0>=c>>>0){continue}break}}if(c>>>0>=d>>>0){break a}while(1){H[c>>2]=H[b>>2];b=b+4|0;c=c+4|0;if(d>>>0>c>>>0){continue}break}break a}if(e>>>0<4){c=a;break a}d=e-4|0;if(d>>>0>>0){c=a;break a}c=a;while(1){F[c|0]=I[b|0];F[c+1|0]=I[b+1|0];F[c+2|0]=I[b+2|0];F[c+3|0]=I[b+3|0];b=b+4|0;c=c+4|0;if(d>>>0>=c>>>0){continue}break}}if(c>>>0>>0){while(1){F[c|0]=I[b|0];b=b+1|0;c=c+1|0;if((e|0)!=(c|0)){continue}break}}return a}function Vm(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;a=oa-464|0;oa=a;H[a+16>>2]=f;H[a+20>>2]=g;H[a+24>>2]=h;H[a+28>>2]=i;H[a+348>>2]=a+352;j=oj(a+352|0,a+16|0);H[a+240>>2]=151;o=Ya(a+232|0,0,a+240|0);H[a+240>>2]=151;k=Ya(a+224|0,0,a+240|0);l=a+240|0;a:{if(j>>>0>=100){j=Oa();H[a>>2]=f;H[a+4>>2]=g;H[a+8>>2]=h;H[a+12>>2]=i;j=tc(a+348|0,j,2064,a);if((j|0)==-1){break a}lb(o,H[a+348>>2]);lb(k,cb(j));if(De(k)){break a}l=H[k>>2]}Ia(a+216|0,d);p=Fb(a+216|0);f=H[a+348>>2];Wc(p,f,f+j|0,l);m=(j|0)>=1?I[H[a+348>>2]]==45:m;n=Ea(a+192|0);g=Ea(a+176|0);h=Ea(a+160|0);$h(c,m,a+216|0,a+208|0,a+207|0,a+206|0,n,g,h,a+156|0);H[a+48>>2]=151;i=Ya(a+40|0,0,a+48|0);c=a+48|0;f=H[a+156>>2];b:{if((f|0)<(j|0)){f=((wa(h)+(j-f<<1|1)|0)+wa(g)|0)+H[a+156>>2]|0;break b}f=((wa(h)+wa(g)|0)+H[a+156>>2]|0)+2|0}if(f>>>0>=101){lb(i,cb(f));c=H[i>>2];if(!c){break a}}_h(c,a+36|0,a+32|0,H[d+4>>2],l,j+l|0,p,m,a+208|0,F[a+207|0],F[a+206|0],n,g,h,H[a+156>>2]);b=pc(b,c,H[a+36>>2],H[a+32>>2],d,e);_a(i);va(h);va(g);va(n);Fa(a+216|0);_a(k);_a(o);oa=a+464|0;return b|0}db();X()}function Te(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;i=oa-128|0;oa=i;H[i+120>>2]=b;k=Vi(c,d);H[i+16>>2]=151;p=Ya(i+8|0,0,i+16|0);j=i+16|0;a:{if(k>>>0>=101){j=cb(k);if(!j){break a}lb(p,j)}h=j;b=c;while(1)if((b|0)==(d|0)){b:while(1){c:{if(!(t=Bb(a,i+120|0),u=0,v=k,v?t:u)){if(kb(a,i+120|0)){H[f>>2]=H[f>>2]|2}break c}m=bb(a);if(!g){m=Se(e,m)}n=q+1|0;r=0;h=j;b=c;while(1)if((b|0)==(d|0)){q=n;if(!r){continue b}ib(a);h=j;b=c;if(k+l>>>0<2){continue b}while(1){if((b|0)==(d|0)){continue b}d:{if(I[h|0]!=2){break d}if((wa(b)|0)==(n|0)){break d}F[h|0]=0;l=l-1|0}h=h+1|0;b=b+12|0;continue}}else{e:{if(I[h|0]!=1){break e}o=F[Aa(b,q)|0];s=m&255;if(!g){o=Se(e,o)}f:{if((o&255)==(s|0)){r=1;if((wa(b)|0)!=(n|0)){break e}F[h|0]=2;l=l+1|0;break f}F[h|0]=0}k=k-1|0}h=h+1|0;b=b+12|0;continue}}break}g:{h:{while(1){if((c|0)==(d|0)){break h}if(I[j|0]!=2){j=j+1|0;c=c+12|0;continue}break}d=c;break g}H[f>>2]=H[f>>2]|4}_a(p);oa=i+128|0;return d}else{i:{if(!$b(b)){F[h|0]=1;break i}F[h|0]=2;l=l+1|0;k=k-1|0}h=h+1|0;b=b+12|0;continue}}db();X()}function hl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;d=oa-16|0;oa=d;a:{b:{if(!H[a+64>>2]){break b}c=a;if(!(I[a+92|0]&16)){hc(c,0,0,0);e=H[c+52>>2];c:{if(e>>>0>=9){if(I[c+98|0]){f=H[c+32>>2];Ac(c,f,(e+f|0)-1|0);break c}e=H[c+56>>2];Ac(c,e,(e+H[c+60>>2]|0)-1|0);break c}Ac(c,0,0)}H[c+92>>2]=16}f=H[a+20>>2];h=H[a+28>>2];if(!qb(b,-1)){if(!H[a+24>>2]){Ac(a,d+15|0,d+16|0)}c=Zc(b);F[H[a+24>>2]]=c;ch(a,1)}if(H[a+24>>2]!=H[a+20>>2]){d:{if(I[a+98|0]){c=H[a+24>>2]-H[a+20>>2]|0;if((Ub(H[a+20>>2],1,c,H[a+64>>2])|0)!=(c|0)){break b}break d}H[d+8>>2]=H[a+32>>2];i=a+72|0;while(1){c=H[a+68>>2];if(c){e=c;c=H[a+32>>2];c=Qd(e,i,H[a+20>>2],H[a+24>>2],d+4|0,c,c+H[a+52>>2]|0,d+8|0);if(H[a+20>>2]==H[d+4>>2]){break b}if((c|0)==3){c=H[a+24>>2]-H[a+20>>2]|0;if((Ub(H[a+20>>2],1,c,H[a+64>>2])|0)!=(c|0)){break b}break d}if(c>>>0>1){break b}g=H[a+32>>2];e=H[d+8>>2]-g|0;if((Ub(g,1,e,H[a+64>>2])|0)!=(e|0)){break b}if((c|0)!=1){break d}Ac(a,H[d+4>>2],H[a+24>>2]);ch(a,H[a+28>>2]-H[a+20>>2]|0);continue}break}db();X()}Ac(a,f,h)}a=re(b);break a}a=-1}oa=d+16|0;return a|0}function wn(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;a=oa-256|0;oa=a;H[a+248>>2]=37;H[a+252>>2]=0;m=Oe(a+248|1,2618,H[c+4>>2]);H[a+204>>2]=a+208;i=Oa();a:{if(m){j=H[c+8>>2];H[a+72>>2]=g;H[a+76>>2]=h;k=a- -64|0;H[k>>2]=e;H[k+4>>2]=f;H[a+48>>2]=j;i=vb(a+208|0,30,i,a+248|0,a+48|0);break a}H[a+80>>2]=e;H[a+84>>2]=f;H[a+88>>2]=g;H[a+92>>2]=h;i=vb(a+208|0,30,i,a+248|0,a+80|0)}H[a+128>>2]=151;k=Ya(a+192|0,0,a+128|0);l=a+208|0;j=l;b:{if((i|0)>=30){i=Oa();c:{if(m){j=H[c+8>>2];H[a+24>>2]=g;H[a+28>>2]=h;H[a+16>>2]=e;H[a+20>>2]=f;H[a>>2]=j;i=tc(a+204|0,i,a+248|0,a);break c}H[a+32>>2]=e;H[a+36>>2]=f;H[a+40>>2]=g;H[a+44>>2]=h;i=tc(a+204|0,i,a+248|0,a+32|0)}if((i|0)==-1){break b}lb(k,H[a+204>>2]);j=H[a+204>>2]}f=i+j|0;g=Nb(j,f,c);H[a+128>>2]=151;e=Ya(a+120|0,0,a+128|0);d:{if(H[a+204>>2]==(a+208|0)){i=a+128|0;break d}i=cb(i<<1);if(!i){break b}lb(e,i);l=H[a+204>>2]}Ia(a+104|0,c);Di(l,g,f,i,a+116|0,a+112|0,a+104|0);Fa(a+104|0);b=pc(b,i,H[a+116>>2],H[a+112>>2],c,d);_a(e);_a(k);oa=a+256|0;return b|0}db();X()}function on(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;a=oa-432|0;oa=a;H[a+424>>2]=37;H[a+428>>2]=0;m=Oe(a+424|1,2618,H[c+4>>2]);H[a+380>>2]=a+384;i=Oa();a:{if(m){j=H[c+8>>2];H[a+72>>2]=g;H[a+76>>2]=h;k=a- -64|0;H[k>>2]=e;H[k+4>>2]=f;H[a+48>>2]=j;i=vb(a+384|0,30,i,a+424|0,a+48|0);break a}H[a+80>>2]=e;H[a+84>>2]=f;H[a+88>>2]=g;H[a+92>>2]=h;i=vb(a+384|0,30,i,a+424|0,a+80|0)}H[a+128>>2]=151;k=Ya(a+368|0,0,a+128|0);l=a+384|0;j=l;b:{if((i|0)>=30){i=Oa();c:{if(m){j=H[c+8>>2];H[a+24>>2]=g;H[a+28>>2]=h;H[a+16>>2]=e;H[a+20>>2]=f;H[a>>2]=j;i=tc(a+380|0,i,a+424|0,a);break c}H[a+32>>2]=e;H[a+36>>2]=f;H[a+40>>2]=g;H[a+44>>2]=h;i=tc(a+380|0,i,a+424|0,a+32|0)}if((i|0)==-1){break b}lb(k,H[a+380>>2]);j=H[a+380>>2]}f=i+j|0;g=Nb(j,f,c);H[a+128>>2]=151;e=Ya(a+120|0,0,a+128|0);d:{if(H[a+380>>2]==(a+384|0)){i=a+128|0;break d}i=cb(i<<3);if(!i){break b}lb(e,i);l=H[a+380>>2]}Ia(a+104|0,c);Ai(l,g,f,i,a+116|0,a+112|0,a+104|0);Fa(a+104|0);b=Dc(b,i,H[a+116>>2],H[a+112>>2],c,d);_a(e);_a(k);oa=a+432|0;return b|0}db();X()}function Xm(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;a=oa-624|0;oa=a;H[a+608>>2]=c;H[a+616>>2]=b;H[a+16>>2]=152;b=Ya(a+200|0,a+208|0,a+16|0);Ia(a+192|0,e);h=Ib(a+192|0);F[a+191|0]=0;a:{if(!ei(a+616|0,c,d,a+192|0,H[e+4>>2],f,a+191|0,h,b,a+196|0,a+608|0)){break a}c=I[2794]|I[2795]<<8|(I[2796]<<16|I[2797]<<24);F[a+183|0]=c;F[a+184|0]=c>>>8;F[a+185|0]=c>>>16;F[a+186|0]=c>>>24;c=I[2791]|I[2792]<<8|(I[2793]<<16|I[2794]<<24);H[a+176>>2]=I[2787]|I[2788]<<8|(I[2789]<<16|I[2790]<<24);H[a+180>>2]=c;Ec(h,a+176|0,a+186|0,a+128|0);H[a+16>>2]=151;d=Ya(a+8|0,0,a+16|0);c=a+16|0;b:{if((H[a+196>>2]-H[b>>2]|0)>=393){lb(d,cb((H[a+196>>2]-H[b>>2]>>2)+2|0));if(!H[d>>2]){break b}c=H[d>>2]}if(I[a+191|0]){F[c|0]=45;c=c+1|0}e=H[b>>2];while(1){if(K[a+196>>2]<=e>>>0){c:{F[c|0]=0;H[a>>2]=g;if((cj(a+16|0,a)|0)!=1){break c}_a(d);break a}}else{F[c|0]=I[(a+176|0)+(Wf(a+128|0,a+168|0,e)-(a+128|0)>>2)|0];c=c+1|0;e=e+4|0;continue}break}db();X()}db();X()}if(jb(a+616|0,a+608|0)){H[f>>2]=H[f>>2]|2}c=H[a+616>>2];Fa(a+192|0);_a(b);oa=a+624|0;return c|0}function Re(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;i=oa-128|0;oa=i;H[i+120>>2]=b;k=Vi(c,d);H[i+16>>2]=151;p=Ya(i+8|0,0,i+16|0);j=i+16|0;a:{if(k>>>0>=101){j=cb(k);if(!j){break a}lb(p,j)}h=j;b=c;while(1)if((b|0)==(d|0)){b:while(1){c:{if(!(s=Ab(a,i+120|0),t=0,u=k,u?s:t)){if(jb(a,i+120|0)){H[f>>2]=H[f>>2]|2}break c}m=ab(a);if(!g){m=pb(e,m)}n=q+1|0;r=0;h=j;b=c;while(1)if((b|0)==(d|0)){q=n;if(!r){continue b}hb(a);h=j;b=c;if(k+l>>>0<2){continue b}while(1){if((b|0)==(d|0)){continue b}d:{if(I[h|0]!=2){break d}if((wa(b)|0)==(n|0)){break d}F[h|0]=0;l=l-1|0}h=h+1|0;b=b+12|0;continue}}else{e:{if(I[h|0]!=1){break e}o=H[Qe(b,q)>>2];if(!g){o=pb(e,o)}f:{if((m|0)==(o|0)){r=1;if((wa(b)|0)!=(n|0)){break e}F[h|0]=2;l=l+1|0;break f}F[h|0]=0}k=k-1|0}h=h+1|0;b=b+12|0;continue}}break}g:{h:{while(1){if((c|0)==(d|0)){break h}if(I[j|0]!=2){j=j+1|0;c=c+12|0;continue}break}d=c;break g}H[f>>2]=H[f>>2]|4}_a(p);oa=i+128|0;return d}else{i:{if(!$b(b)){F[h|0]=1;break i}F[h|0]=2;l=l+1|0;k=k-1|0}h=h+1|0;b=b+12|0;continue}}db();X()}function Zm(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;a=oa-288|0;oa=a;H[a+272>>2]=c;H[a+280>>2]=b;H[a+16>>2]=152;b=Ya(a+152|0,a+160|0,a+16|0);Ia(a+144|0,e);h=Fb(a+144|0);F[a+143|0]=0;a:{if(!li(a+280|0,c,d,a+144|0,H[e+4>>2],f,a+143|0,h,b,a+148|0,a+260|0)){break a}c=I[2794]|I[2795]<<8|(I[2796]<<16|I[2797]<<24);F[a+135|0]=c;F[a+136|0]=c>>>8;F[a+137|0]=c>>>16;F[a+138|0]=c>>>24;c=I[2791]|I[2792]<<8|(I[2793]<<16|I[2794]<<24);H[a+128>>2]=I[2787]|I[2788]<<8|(I[2789]<<16|I[2790]<<24);H[a+132>>2]=c;Wc(h,a+128|0,a+138|0,a+118|0);H[a+16>>2]=151;d=Ya(a+8|0,0,a+16|0);c=a+16|0;b:{if((H[a+148>>2]-H[b>>2]|0)>=99){lb(d,cb((H[a+148>>2]-H[b>>2]|0)+2|0));if(!H[d>>2]){break b}c=H[d>>2]}if(I[a+143|0]){F[c|0]=45;c=c+1|0}e=H[b>>2];while(1){if(K[a+148>>2]<=e>>>0){c:{F[c|0]=0;H[a>>2]=g;if((cj(a+16|0,a)|0)!=1){break c}_a(d);break a}}else{F[c|0]=I[(($f(a+118|0,a+128|0,e)-a|0)+a|0)+10|0];c=c+1|0;e=e+1|0;continue}break}db();X()}db();X()}if(kb(a+280|0,a+272|0)){H[f>>2]=H[f>>2]|2}c=H[a+280>>2];Fa(a+144|0);_a(b);oa=a+288|0;return c|0}function ig(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;g=oa-32|0;oa=g;e=d&2147483647;h=e;f=e-1006698496|0;e=e-1140785152|0;i=c;a:{if((f|0)==(e|0)&c>>>0>c>>>0|e>>>0>f>>>0){e=d<<4|c>>>28;c=c<<4|b>>>28;b=b&268435455;h=b;if((b|0)==134217728&a>>>0>=1|b>>>0>134217728){e=e+1073741824|0;a=c+1|0;e=a>>>0<1?e+1|0:e;f=a;break a}f=c;e=e+1073741824|0;if(a|h^134217728){break a}b=c&1;a=b+f|0;e=a>>>0>>0?e+1|0:e;f=a;break a}if(!(!i&(h|0)==2147418112?!(a|b):h>>>0<2147418112)){f=c;c=d<<4|c>>>28;f=f<<4|b>>>28;e=c&524287|2146959360;break a}f=0;e=2146435072;if(h>>>0>1140785151){break a}e=0;h=h>>>16|0;if(h>>>0<15249){break a}e=d&65535|65536;xb(g+16|0,a,b,c,e,h-15233|0);hd(g,a,b,c,e,15361-h|0);e=H[g+4>>2];h=e;a=H[g+8>>2];c=H[g+12>>2]<<4|a>>>28;f=a<<4|e>>>28;e=c;a=h&268435455;c=a;b=H[g>>2]|((H[g+16>>2]|H[g+24>>2])!=0|(H[g+20>>2]|H[g+28>>2])!=0);if((a|0)==134217728&b>>>0>=1|a>>>0>134217728){a=f+1|0;e=a>>>0<1?e+1|0:e;f=a;break a}if(b|c^134217728){break a}a=f+(f&1)|0;e=a>>>0>>0?e+1|0:e;f=a}oa=g+32|0;x(0,f|0);x(1,d&-2147483648|e);return+z()}function em(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;a=c;while(1){a:{if(e>>>0<=i>>>0|a>>>0>=d>>>0){break a}g=F[a|0];b=g&255;b:{if((g|0)>=0){g=1;if(b>>>0<=1114111){break b}break a}if(b>>>0<194){break a}if(b>>>0<=223){if((d-a|0)<2){break a}f=I[a+1|0];if((f&192)!=128){break a}g=2;if((f&63|b<<6&1984)>>>0<=1114111){break b}break a}c:{d:{if(b>>>0<=239){if((d-a|0)<3){break a}h=I[a+2|0];f=I[a+1|0];if((b|0)==237){break d}if((b|0)==224){if((f&224)==160){break c}break a}if((f&192)!=128){break a}break c}if((d-a|0)<4|b>>>0>244){break a}h=I[a+3|0];j=I[a+2|0];f=I[a+1|0];e:{f:{switch(b-240|0){case 0:if((f+112&255)>>>0<48){break e}break a;case 4:if((f&240)==128){break e}break a;default:break f}}if((f&192)!=128){break a}}if((j&192)!=128|(h&192)!=128){break a}g=4;if((h&63|(j<<6&4032|(b<<18&1835008|(f&63)<<12)))>>>0>1114111){break a}break b}if((f&224)!=128){break a}}if((h&192)!=128){break a}g=3;if((h&63|(b<<12&61440|(f&63)<<6))>>>0>1114111){break a}}i=i+1|0;a=a+g|0;continue}break}return a-c|0}function hm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=c;while(1){a:{if(e>>>0<=g>>>0|a>>>0>=d>>>0){break a}b=I[a|0];if(b>>>0>1114111){break a}f=a+1|0;b:{if(b<<24>>24>=0){break b}if(b>>>0<194){break a}if(b>>>0<=223){if((d-a|0)<2){break a}f=I[a+1|0];if((f&192)!=128|(f&63|b<<6&1984)>>>0>1114111){break a}f=a+2|0;break b}c:{d:{if(b>>>0<=239){if((d-a|0)<3){break a}h=I[a+2|0];f=I[a+1|0];if((b|0)==237){break d}if((b|0)==224){if((f&224)==160){break c}break a}if((f&192)!=128){break a}break c}if((d-a|0)<4|b>>>0>244|e-g>>>0<2){break a}h=I[a+3|0];i=I[a+2|0];f=I[a+1|0];e:{f:{switch(b-240|0){case 0:if((f+112&255)>>>0<48){break e}break a;case 4:if((f&240)==128){break e}break a;default:break f}}if((f&192)!=128){break a}}if((i&192)!=128|(h&192)!=128|(h&63|(i<<6&4032|(b<<18&1835008|(f&63)<<12)))>>>0>1114111){break a}g=g+1|0;f=a+4|0;break b}if((f&224)!=128){break a}}if((h&192)!=128|(h&63|(b<<12&61440|(f&63)<<6))>>>0>1114111){break a}f=a+3|0}a=f;g=g+1|0;continue}break}return a-c|0}function Cq(a){a=a|0;var b=0,c=0,d=0;c=oa-16|0;oa=c;b=H[a+8>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+8>>2]=b;b=H[a+12>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+12>>2]=b;b=H[a+16>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+16>>2]=b;b=H[a+20>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+20>>2]=b;b=H[a+24>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+24>>2]=b;b=H[a+28>>2];if(b){Ba(Va(b))}b=Na(12);d=Sa(b);H[a+28>>2]=b;b=Na(12);Sa(b);H[c+12>>2]=b;ya(d,c+12|0);b=H[a+32>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+32>>2]=b;b=H[a+36>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+36>>2]=b;b=H[a+40>>2];if(b){Ba(Va(b))}b=Na(12);d=Sa(b);H[a+40>>2]=b;H[c+8>>2]=0;ya(d,c+8|0);b=H[a+44>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+104>>2]=0;H[a+96>>2]=0;F[a+87|0]=0;G[a+68>>1]=0;H[a+64>>2]=0;H[a+44>>2]=b;H[a+72>>2]=0;F[a+75|0]=0;F[a+76|0]=0;F[a+77|0]=0;F[a+78|0]=0;F[a+129|0]=0;H[a+120>>2]=0;H[a+124>>2]=0;F[a+113|0]=123;F[a+114|0]=123;F[a+115|0]=123;F[a+116|0]=123;H[a+132>>2]=0;F[a+79|0]=0;F[a+80|0]=0;oa=c+16|0}function gm(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;b=H[a+12>>2];a:{while(1){if(b>>>0>=d>>>0){c=0;break a}c=2;b=H[b>>2];if((b&-2048)==55296|b>>>0>1114111){break a}b:{c:{if(b>>>0<=127){c=1;f=H[a+8>>2];if((g-f|0)<1){break a}H[a+8>>2]=f+1;F[f|0]=b;break c}if(b>>>0<=2047){c=H[a+8>>2];if((g-c|0)<2){break b}H[a+8>>2]=c+1;F[c|0]=b>>>6|192;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break c}c=H[a+8>>2];f=g-c|0;if(b>>>0<=65535){if((f|0)<3){break b}H[a+8>>2]=c+1;F[c|0]=b>>>12|224;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break c}if((f|0)<4){break b}H[a+8>>2]=c+1;F[c|0]=b>>>18|240;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>12&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128}b=H[a+12>>2]+4|0;H[a+12>>2]=b;continue}break}c=1}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return c|0}function Xf(a,b,c,d,e,f,g,h,i,j,k,l){var m=0;m=oa-16|0;oa=m;H[m+12>>2]=a;a:{b:{if((a|0)==(f|0)){if(!I[b|0]){break b}a=0;F[b|0]=0;b=H[e>>2];H[e>>2]=b+1;F[b|0]=46;if(!wa(h)){break a}b=H[j>>2];if((b-i|0)>159){break a}c=H[k>>2];H[j>>2]=b+4;H[b>>2]=c;break a}c:{if((a|0)!=(g|0)){break c}if(!wa(h)){break c}if(!I[b|0]){break b}a=0;b=H[j>>2];if((b-i|0)>159){break a}a=H[k>>2];H[j>>2]=b+4;H[b>>2]=a;a=0;H[k>>2]=0;break a}a=-1;f=Wf(l,l+128|0,m+12|0)-l|0;if((f|0)>124){break a}g=I[(f>>2)+13232|0];d:{e:{switch(Gq(f-88|0,30)|0){case 2:case 3:b=H[e>>2];if((I[b-1|0]&95)!=(I[c|0]&127)?(b|0)!=(d|0):0){break a}H[e>>2]=b+1;F[b|0]=g;a=0;break a;case 0:case 1:F[c|0]=80;break d;default:break e}}a=F[c|0];if((a|0)!=(g&95)){break d}F[c|0]=a|128;if(!I[b|0]){break d}F[b|0]=0;if(!wa(h)){break d}a=H[j>>2];if((a-i|0)>159){break d}b=H[k>>2];H[j>>2]=a+4;H[a>>2]=b}a=H[e>>2];H[e>>2]=a+1;F[a|0]=g;a=0;if((f|0)>84){break a}H[k>>2]=H[k>>2]+1;break a}a=-1}oa=m+16|0;return a}function ag(a,b,c,d,e,f,g,h,i,j,k,l){var m=0;m=oa-16|0;oa=m;F[m+15|0]=a;a:{b:{if((a|0)==(f|0)){if(!I[b|0]){break b}a=0;F[b|0]=0;b=H[e>>2];H[e>>2]=b+1;F[b|0]=46;if(!wa(h)){break a}b=H[j>>2];if((b-i|0)>159){break a}c=H[k>>2];H[j>>2]=b+4;H[b>>2]=c;break a}c:{if((a|0)!=(g|0)){break c}if(!wa(h)){break c}if(!I[b|0]){break b}a=0;b=H[j>>2];if((b-i|0)>159){break a}a=H[k>>2];H[j>>2]=b+4;H[b>>2]=a;a=0;H[k>>2]=0;break a}a=-1;f=$f(l,l+32|0,m+15|0)-l|0;if((f|0)>31){break a}g=I[f+13232|0];d:{e:{switch(f-22|0){case 2:case 3:b=H[e>>2];if((I[b-1|0]&95)!=(I[c|0]&127)?(b|0)!=(d|0):0){break a}H[e>>2]=b+1;F[b|0]=g;a=0;break a;case 0:case 1:F[c|0]=80;break d;default:break e}}a=F[c|0];if((a|0)!=(g&95)){break d}F[c|0]=a|128;if(!I[b|0]){break d}F[b|0]=0;if(!wa(h)){break d}a=H[j>>2];if((a-i|0)>159){break d}b=H[k>>2];H[j>>2]=a+4;H[a>>2]=b}a=H[e>>2];H[e>>2]=a+1;F[a|0]=g;a=0;if((f|0)>21){break a}H[k>>2]=H[k>>2]+1;break a}a=-1}oa=m+16|0;return a}function ij(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;h=oa-32|0;oa=h;f=d&2147483647;g=f;e=f-1065418752|0;i=f-1082064896|0;f=c;a:{if((e|0)==(i|0)&f>>>0>>0|e>>>0>>0){g=(d&33554431)<<7|c>>>25;f=0;j=f;i=c&33554431;if(!(!f&(i|0)==16777216?!(a|b):!f&i>>>0<16777216)){e=g+1073741825|0;break a}e=g+1073741824|0;if(i^16777216|a|(b|j)){break a}e=(g&1)+e|0;break a}if(!(!f&(g|0)==2147418112?!(a|b):g>>>0<2147418112)){e=((d&33554431)<<7|c>>>25)&4194303|2143289344;break a}e=2139095040;if(g>>>0>1082064895){break a}e=0;f=g>>>16|0;if(f>>>0<16145){break a}g=c;e=d&65535|65536;xb(h+16|0,a,b,g,e,f-16129|0);hd(h,a,b,g,e,16257-f|0);b=H[h+8>>2];e=(H[h+12>>2]&33554431)<<7|b>>>25;g=H[h+4>>2];f=g;a=0;i=a;j=H[h>>2]|((H[h+16>>2]|H[h+24>>2])!=0|(H[h+20>>2]|H[h+28>>2])!=0);b=b&33554431;if(!(!a&(b|0)==16777216?!(f|j):!a&b>>>0<16777216)){e=e+1|0;break a}if(b^16777216|j|(f|i)){break a}e=(e&1)+e|0}oa=h+32|0;return x(2,d&-2147483648|e),B()}function We(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=oa-160|0;oa=e;Wb(e+8|0,8416,144);a:{b:{if(b-1>>>0>=2147483647){if(b){break b}b=1;a=e+159|0}H[e+52>>2]=a;H[e+28>>2]=a;f=-2-a|0;f=b>>>0>f>>>0?f:b;H[e+56>>2]=f;a=a+f|0;H[e+36>>2]=a;H[e+24>>2]=a;a=e+8|0;b=oa-208|0;oa=b;H[b+204>>2]=d;Vb(b+160|0,0,40);H[b+200>>2]=H[b+204>>2];c:{if((hg(0,c,b+200|0,b+80|0,b+160|0)|0)<0){a=-1;break c}h=H[a+76>>2]>=0;d=H[a>>2];if(F[a+74|0]<=0){H[a>>2]=d&-33}i=d&32;d:{if(H[a+48>>2]){c=hg(a,c,b+200|0,b+80|0,b+160|0);break d}H[a+48>>2]=80;H[a+16>>2]=b+80;H[a+28>>2]=b;H[a+20>>2]=b;d=H[a+44>>2];H[a+44>>2]=b;g=hg(a,c,b+200|0,b+80|0,b+160|0);c=g;if(!d){break d}qa[H[a+36>>2]](a,0,0)|0;H[a+48>>2]=0;H[a+44>>2]=d;H[a+28>>2]=0;H[a+16>>2]=0;c=H[a+20>>2];H[a+20>>2]=0;c=c?g:-1}d=a;a=H[a>>2];H[d>>2]=a|i;a=a&32?-1:c;if(!h){break c}}oa=b+208|0;if(!f){break a}b=H[e+28>>2];F[b-((b|0)==H[e+24>>2])|0]=0;break a}H[6070]=61;a=-1}oa=e+160|0;return a}function Sg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=oa-32|0;oa=c;a:{if(I[a+52|0]){d=H[a+48>>2];if(!b){break a}F[a+52|0]=0;H[a+48>>2]=-1;break a}H[c+24>>2]=1;e=H[vf(c+24|0,a+44|0)>>2];h=(e|0)>0?e:0;b:{while(1){if((d|0)!=(h|0)){f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[(c+24|0)+d|0]=f;d=d+1|0;continue}break}c:{if(I[a+53|0]){F[c+23|0]=I[c+24|0];break c}h=c+24|0;while(1){d:{d=H[a+40>>2];f=H[d>>2];i=H[d+4>>2];e:{g=d;d=(c+24|0)+e|0;switch(wf(H[a+36>>2],g,c+24|0,d,c+16|0,c+23|0,h,c+12|0)-1|0){case 0:break e;case 1:break b;case 2:break d;default:break c}}g=H[a+40>>2];H[g>>2]=f;H[g+4>>2]=i;if((e|0)==8){break b}f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[d|0]=f;e=e+1|0;continue}break}F[c+23|0]=I[c+24|0]}f:{if(!b){while(1){if((e|0)<1){break f}e=e-1|0;if((pe(Sb(F[e+(c+24|0)|0]),H[a+32>>2])|0)!=-1){continue}break b}}H[a+48>>2]=Sb(F[c+23|0])}d=Sb(F[c+23|0]);break a}d=-1}oa=c+32|0;return d}function Fq(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{e=b;if(b){d=c;if(!d){break j}break i}a=(a>>>0)/(c>>>0)|0;pa=0;break a}if(!a){break h}break g}if(!(d-1&d)){break f}h=(Q(d)+33|0)-Q(e)|0;i=0-h|0;break d}a=(e>>>0)/0|0;pa=0;break a}d=32-Q(e)|0;if(d>>>0<31){break e}break c}if((d|0)==1){break b}d=d?31-Q(d-1^d)|0:32;c=d&31;if((d&63)>>>0>=32){e=0;a=b>>>c|0}else{e=b>>>c|0;a=((1<>>c}pa=e;break a}h=d+1|0;i=63-d|0}d=b;e=h&63;f=e&31;if(e>>>0>=32){e=0;f=d>>>f|0}else{e=d>>>f|0;f=((1<>>f}i=i&63;d=i&31;if(i>>>0>=32){b=a<>>32-d|b<>>31;j=g;e=e<<1|f>>>31;g=i-(e+(d>>>0>>0)|0)>>31;k=c&g;f=j-k|0;e=e-(j>>>0>>0)|0;b=b<<1|a>>>31;a=l|a<<1;g=g&1;l=g;h=h-1|0;if(h){continue}break}}pa=b<<1|a>>>31;a=g|a<<1;break a}a=0;b=0}pa=b}return a}function Pg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=oa-32|0;oa=c;a:{if(I[a+52|0]){d=H[a+48>>2];if(!b){break a}F[a+52|0]=0;H[a+48>>2]=-1;break a}H[c+24>>2]=1;e=H[vf(c+24|0,a+44|0)>>2];h=(e|0)>0?e:0;b:{while(1){if((d|0)!=(h|0)){f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[(c+24|0)+d|0]=f;d=d+1|0;continue}break}c:{if(I[a+53|0]){H[c+20>>2]=F[c+24|0];break c}h=c+24|0;while(1){d:{d=H[a+40>>2];f=H[d>>2];i=H[d+4>>2];e:{g=d;d=(c+24|0)+e|0;switch(wf(H[a+36>>2],g,c+24|0,d,c+16|0,c+20|0,h,c+12|0)-1|0){case 0:break e;case 1:break b;case 2:break d;default:break c}}g=H[a+40>>2];H[g>>2]=f;H[g+4>>2]=i;if((e|0)==8){break b}f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[d|0]=f;e=e+1|0;continue}break}H[c+20>>2]=F[c+24|0]}f:{if(!b){while(1){if((e|0)<1){break f}e=e-1|0;if((pe(F[e+(c+24|0)|0],H[a+32>>2])|0)!=-1){continue}break b}}H[a+48>>2]=H[c+20>>2]}d=H[c+20>>2];break a}d=-1}oa=c+32|0;return d}function Fn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-384|0;oa=a;H[a+368>>2]=c;H[a+376>>2]=b;Yf(a+216|0,d,a+240|0,a+236|0,a+232|0);b=Ea(a+200|0);Da(b,Ja(b));c=Aa(b,0);H[a+196>>2]=c;H[a+28>>2]=a+32;H[a+24>>2]=0;F[a+23|0]=1;F[a+22|0]=69;while(1){a:{if(!Ab(a+376|0,a+368|0)){break a}if(H[a+196>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+196>>2]=d+c}if(Xf(ab(a+376|0),a+23|0,a+22|0,c,a+196|0,H[a+236>>2],H[a+232>>2],a+216|0,a+32|0,a+28|0,a+24|0,a+240|0)){break a}hb(a+376|0);continue}break}b:{if(!wa(a+216|0)|!I[a+23|0]){break b}d=H[a+28>>2];if((d-(a+32|0)|0)>159){break b}H[a+28>>2]=d+4;H[d>>2]=H[a+24>>2]}Li(a,c,H[a+196>>2],e);c=H[a+4>>2];H[f>>2]=H[a>>2];H[f+4>>2]=c;c=H[a+12>>2];H[f+8>>2]=H[a+8>>2];H[f+12>>2]=c;wb(a+216|0,a+32|0,H[a+28>>2],e);if(jb(a+376|0,a+368|0)){H[e>>2]=H[e>>2]|2}c=H[a+376>>2];va(b);va(a+216|0);oa=a+384|0;return c|0}function On(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-288|0;oa=a;H[a+272>>2]=c;H[a+280>>2]=b;bg(a+224|0,d,a+240|0,a+239|0,a+238|0);b=Ea(a+208|0);Da(b,Ja(b));c=Aa(b,0);H[a+204>>2]=c;H[a+28>>2]=a+32;H[a+24>>2]=0;F[a+23|0]=1;F[a+22|0]=69;while(1){a:{if(!Bb(a+280|0,a+272|0)){break a}if(H[a+204>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+204>>2]=d+c}if(ag(bb(a+280|0),a+23|0,a+22|0,c,a+204|0,F[a+239|0],F[a+238|0],a+224|0,a+32|0,a+28|0,a+24|0,a+240|0)){break a}ib(a+280|0);continue}break}b:{if(!wa(a+224|0)|!I[a+23|0]){break b}d=H[a+28>>2];if((d-(a+32|0)|0)>159){break b}H[a+28>>2]=d+4;H[d>>2]=H[a+24>>2]}Li(a,c,H[a+204>>2],e);c=H[a+4>>2];H[f>>2]=H[a>>2];H[f+4>>2]=c;c=H[a+12>>2];H[f+8>>2]=H[a+8>>2];H[f+12>>2]=c;wb(a+224|0,a+32|0,H[a+28>>2],e);if(kb(a+280|0,a+272|0)){H[e>>2]=H[e>>2]|2}c=H[a+280>>2];va(b);va(a+224|0);oa=a+288|0;return c|0}function yn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;a=oa-208|0;oa=a;H[a+200>>2]=37;H[a+204>>2]=0;h=Oe(a+200|1,7628,H[c+4>>2]);H[a+156>>2]=a+160;f=Oa();a:{if(h){g=H[c+8>>2];M[a+40>>3]=e;H[a+32>>2]=g;f=vb(a+160|0,30,f,a+200|0,a+32|0);break a}M[a+48>>3]=e;f=vb(a+160|0,30,f,a+200|0,a+48|0)}H[a+80>>2]=151;j=Ya(a+144|0,0,a+80|0);i=a+160|0;g=i;b:{if((f|0)>=30){f=Oa();c:{if(h){g=H[c+8>>2];M[a+8>>3]=e;H[a>>2]=g;f=tc(a+156|0,f,a+200|0,a);break c}M[a+16>>3]=e;f=tc(a+156|0,f,a+200|0,a+16|0)}if((f|0)==-1){break b}lb(j,H[a+156>>2]);g=H[a+156>>2]}h=f+g|0;k=Nb(g,h,c);H[a+80>>2]=151;g=Ya(a+72|0,0,a+80|0);d:{if(H[a+156>>2]==(a+160|0)){f=a+80|0;break d}f=cb(f<<1);if(!f){break b}lb(g,f);i=H[a+156>>2]}Ia(a+56|0,c);Di(i,k,h,f,a+68|0,a- -64|0,a+56|0);Fa(a+56|0);b=pc(b,f,H[a+68>>2],H[a+64>>2],c,d);_a(g);_a(j);oa=a+208|0;return b|0}db();X()}function pn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;a=oa-384|0;oa=a;H[a+376>>2]=37;H[a+380>>2]=0;h=Oe(a+376|1,7628,H[c+4>>2]);H[a+332>>2]=a+336;f=Oa();a:{if(h){g=H[c+8>>2];M[a+40>>3]=e;H[a+32>>2]=g;f=vb(a+336|0,30,f,a+376|0,a+32|0);break a}M[a+48>>3]=e;f=vb(a+336|0,30,f,a+376|0,a+48|0)}H[a+80>>2]=151;j=Ya(a+320|0,0,a+80|0);i=a+336|0;g=i;b:{if((f|0)>=30){f=Oa();c:{if(h){g=H[c+8>>2];M[a+8>>3]=e;H[a>>2]=g;f=tc(a+332|0,f,a+376|0,a);break c}M[a+16>>3]=e;f=tc(a+332|0,f,a+376|0,a+16|0)}if((f|0)==-1){break b}lb(j,H[a+332>>2]);g=H[a+332>>2]}h=f+g|0;k=Nb(g,h,c);H[a+80>>2]=151;g=Ya(a+72|0,0,a+80|0);d:{if(H[a+332>>2]==(a+336|0)){f=a+80|0;break d}f=cb(f<<3);if(!f){break b}lb(g,f);i=H[a+332>>2]}Ia(a+56|0,c);Ai(i,k,h,f,a+68|0,a- -64|0,a+56|0);Fa(a+56|0);b=Dc(b,f,H[a+68>>2],H[a+64>>2],c,d);_a(g);_a(j);oa=a+384|0;return b|0}db();X()}function Bc(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-32|0;oa=i;H[i+16>>2]=c;H[i+24>>2]=b;Ia(i+8|0,d);j=Ib(i+8|0);Fa(i+8|0);H[e>>2]=0;c=0;a:{while(1){if((g|0)==(h|0)|c){break a}b:{if(jb(i+24|0,i+16|0)){break b}c:{if((yd(j,H[g>>2])|0)==37){c=g+4|0;if((h|0)==(c|0)){break b}k=0;b=yd(j,H[c>>2]);d:{if(!((b|0)==69|(b&255)==48)){c=g;break d}if((g+8|0)==(h|0)){break b}k=b;b=yd(j,H[g+8>>2])}H[i+24>>2]=qa[H[H[a>>2]+36>>2]](a,H[i+24>>2],H[i+16>>2],d,e,f,b,k);g=c+8|0;break c}if(cc(j,8192,H[g>>2])){while(1){e:{g=g+4|0;if((h|0)==(g|0)){g=h;break e}if(cc(j,8192,H[g>>2])){continue}}break}while(1){if(!Ab(i+24|0,i+16|0)){break c}if(!cc(j,8192,ab(i+24|0))){break c}hb(i+24|0);continue}}if((pb(j,ab(i+24|0))|0)==(pb(j,H[g>>2])|0)){g=g+4|0;hb(i+24|0);break c}H[e>>2]=4}c=H[e>>2];continue}break}H[e>>2]=4}if(jb(i+24|0,i+16|0)){H[e>>2]=H[e>>2]|2}oa=i+32|0;return H[i+24>>2]}function Ym(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a=oa-160|0;oa=a;H[a+144>>2]=c;H[a+152>>2]=b;H[a+20>>2]=152;j=Ya(a+24|0,a+32|0,a+20|0);Ia(a+16|0,e);b=Fb(a+16|0);F[a+15|0]=0;if(li(a+152|0,c,d,a+16|0,H[e+4>>2],f,a+15|0,b,j,a+20|0,a+132|0)){wj(g);if(I[a+15|0]){Od(g,pb(b,45))}b=pb(b,48);e=H[j>>2];h=H[a+20>>2];c=h-1|0;b=b&255;while(1){if(!((b|0)!=I[e|0]|c>>>0<=e>>>0)){e=e+1|0;continue}break}c=oa-32|0;oa=c;b=wa(g);d=Ja(g);i=th(e,h);a:{if(!i){break a}if(qh(e,Ca(g),Ca(g)+wa(g)|0)){d=oa-16|0;oa=d;b=c+16|0;Xi(b,e,h);oa=d+16|0;Lg(g,Ca(b),wa(b));va(b);break a}if(d-b>>>0>>0){pf(g,d,(b+i|0)-d|0,b,b)}d=Ca(g)+b|0;while(1){if((e|0)!=(h|0)){nb(d,e);e=e+1|0;d=d+1|0;continue}break}F[c+15|0]=0;nb(d,c+15|0);Lc(g,b+i|0)}oa=c+32|0}if(kb(a+152|0,a+144|0)){H[f>>2]=H[f>>2]|2}b=H[a+152>>2];Fa(a+16|0);_a(j);oa=a+160|0;return b|0}function Cc(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-32|0;oa=i;H[i+16>>2]=c;H[i+24>>2]=b;Ia(i+8|0,d);j=Fb(i+8|0);Fa(i+8|0);H[e>>2]=0;c=0;a:{while(1){if((g|0)==(h|0)|c){break a}b:{if(kb(i+24|0,i+16|0)){break b}c:{if((zd(j,F[g|0])|0)==37){c=g+1|0;if((h|0)==(c|0)){break b}k=0;b=zd(j,F[c|0]);d:{if(!((b|0)==69|(b&255)==48)){c=g;break d}if((g+2|0)==(h|0)){break b}k=b;b=zd(j,F[g+2|0])}H[i+24>>2]=qa[H[H[a>>2]+36>>2]](a,H[i+24>>2],H[i+16>>2],d,e,f,b,k);g=c+2|0;break c}if(dc(j,8192,F[g|0])){while(1){e:{g=g+1|0;if((h|0)==(g|0)){g=h;break e}if(dc(j,8192,F[g|0])){continue}}break}while(1){if(!Bb(i+24|0,i+16|0)){break c}if(!dc(j,8192,bb(i+24|0))){break c}ib(i+24|0);continue}}if((Se(j,bb(i+24|0))|0)==(Se(j,F[g|0])|0)){g=g+1|0;ib(i+24|0);break c}H[e>>2]=4}c=H[e>>2];continue}break}H[e>>2]=4}if(kb(i+24|0,i+16|0)){H[e>>2]=H[e>>2]|2}oa=i+32|0;return H[i+24>>2]}function ug(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=oa-16|0;oa=g;m=wa(b)-c|0;h=1;l=wa(b)-c|0;a:{b:{if((l|0)<2){break b}n=c;while(1){j=h+n|0;k=Aa(b,j);c:{if(i){j=Ra(b,j,2,22212);i=(j|0)!=0;h=!j+h|0;break c}i=0;k=I[k|0];if(Db(k<<24>>24)){break c}if((k|0)!=47){break b}i=l;if(!Ra(b,j,2,22188)){break a}i=!Ra(b,j,2,22200);h=i+h|0}h=h+1|0;if((l|0)>(h|0)){continue}break}}i=h}d:{if((m|0)==(i|0)){H[g+12>>2]=d;if(!mb(H[a+36>>2])){d=H[Qa(H[a+36>>2])>>2];H[g+12>>2]=d}b=H[a+36>>2];H[g+8>>2]=H[a+100>>2]+d;ya(b,g+8|0);if(!f){break d}xc(H[a+44>>2],g+12|0);break d}if(f){b=H[a+44>>2];H[g+12>>2]=c+d;ya(b,g+12|0)}c=c+i|0;b=((c|0)<(e|0)?e:c)+d|0;H[g+12>>2]=b;if((c|0)>H[a+108>>2]){b=(H[a+100>>2]<<1)+d|0;H[g+12>>2]=b}e:{if(mb(H[a+36>>2])){break e}if(H[Qa(H[a+36>>2])>>2]<=(b|0)){break e}H[g+12>>2]=H[Qa(H[a+36>>2])>>2]}xc(H[a+36>>2],g+12|0)}oa=g+16|0}function Ek(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;e=oa+-64|0;oa=e;d=1;a:{if(Mb(a,b,0)){break a}d=0;if(!b){break a}d=oa+-64|0;oa=d;f=H[b>>2];g=H[f-4>>2];h=H[f-8>>2];H[d+20>>2]=0;H[d+16>>2]=20776;H[d+12>>2]=b;H[d+8>>2]=20824;f=0;Vb(d+24|0,0,39);b=b+h|0;b:{if(Mb(g,20824,0)){H[d+56>>2]=1;qa[H[H[g>>2]+20>>2]](g,d+8|0,b,b,1,0);f=H[d+32>>2]==1?b:0;break b}qa[H[H[g>>2]+24>>2]](g,d+8|0,b,1,0);c:{switch(H[d+44>>2]){case 0:f=H[d+48>>2]==1?H[d+36>>2]==1?H[d+40>>2]==1?H[d+28>>2]:0:0:0;break b;case 1:break c;default:break b}}if(H[d+32>>2]!=1){if(H[d+48>>2]|H[d+36>>2]!=1|H[d+40>>2]!=1){break b}}f=H[d+24>>2]}oa=d- -64|0;d=0;if(!f){break a}Vb(e+8|4,0,52);H[e+56>>2]=1;H[e+20>>2]=-1;H[e+16>>2]=a;H[e+8>>2]=f;qa[H[H[f>>2]+28>>2]](f,e+8|0,H[c>>2],1);a=H[e+32>>2];if((a|0)==1){H[c>>2]=H[e+24>>2]}d=(a|0)==1}oa=e- -64|0;return d|0}function Ne(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=oa-16|0;oa=k;l=Ib(g);g=Dd(g);Gb(k,g);a:{if($b(k)){Ec(l,a,c,d);g=(c-a<<2)+d|0;H[f>>2]=g;break a}H[f>>2]=d;b:{c:{i=a;h=I[i|0];switch(h-43|0){case 0:case 2:break c;default:break b}}i=Kb(l,h<<24>>24);h=H[f>>2];H[f>>2]=h+4;H[h>>2]=i;i=a+1|0}if(!(I[i|0]!=48|(c-i|0)<2|(I[i+1|0]|32)!=120)){h=Kb(l,48);j=H[f>>2];H[f>>2]=j+4;H[j>>2]=h;h=Kb(l,F[i+1|0]);j=H[f>>2];H[f>>2]=j+4;H[j>>2]=h;i=i+2|0}fd(i,c);j=0;n=Hb(g);h=0;g=i;while(1){if(c>>>0<=g>>>0){Me((i-a<<2)+d|0,H[f>>2]);g=H[f>>2]}else{d:{if(!I[Aa(k,h)|0]){break d}if(F[Aa(k,h)|0]!=(j|0)){break d}j=H[f>>2];H[f>>2]=j+4;H[j>>2]=n;h=(wa(k)-1>>>0>h>>>0)+h|0;j=0}o=Kb(l,F[g|0]);m=H[f>>2];H[f>>2]=m+4;H[m>>2]=o;g=g+1|0;j=j+1|0;continue}break}}H[e>>2]=(b|0)==(c|0)?g:(b-a<<2)+d|0;va(k);oa=k+16|0}function fj(a,b){var c=0,d=0,e=0;a:{if(I[b|0]){break a}b=jd(2613);if(I[b|0]?b:0){break a}b=jd(N(a,12)+9216|0);if(I[b|0]?b:0){break a}b=jd(2629);if(I[b|0]?b:0){break a}b=2798}b:{while(1){e=I[b+c|0];if(!(!e|(e|0)==47)){e=15;c=c+1|0;if((c|0)!=15){continue}break b}break}e=c}d=2798;c:{d:{c=I[b|0];e:{f:{if(!(I[b+e|0]|(c|0)==46)){d=b;if((c|0)!=67){break f}}if(!I[d+1|0]){break e}}if(!_d(d,2798)){break e}if(_d(d,2567)){break d}}if(!a){c=9140;if(I[d+1|0]==46){break c}}return 0}c=H[6090];if(c){while(1){if(!_d(d,c+8|0)){break c}c=H[c+24>>2];if(c){continue}break}}c=H[6090];if(c){while(1){if(!_d(d,c+8|0)){return c}c=H[c+24>>2];if(c){continue}break}}c=cb(28);g:{if(!c){c=0;break g}b=H[2286];H[c>>2]=H[2285];H[c+4>>2]=b;b=c+8|0;Wb(b,d,e);F[b+e|0]=0;H[c+24>>2]=H[6090];H[6090]=c}c=a|c?c:9140}return c}function Pe(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=oa-16|0;oa=k;l=Fb(g);g=Gd(g);Gb(k,g);a:{if($b(k)){Wc(l,a,c,d);g=(c-a|0)+d|0;H[f>>2]=g;break a}H[f>>2]=d;b:{c:{i=a;h=I[i|0];switch(h-43|0){case 0:case 2:break c;default:break b}}i=pb(l,h<<24>>24);h=H[f>>2];H[f>>2]=h+1;F[h|0]=i;i=a+1|0}if(!(I[i|0]!=48|(c-i|0)<2|(I[i+1|0]|32)!=120)){h=pb(l,48);j=H[f>>2];H[f>>2]=j+1;F[j|0]=h;h=pb(l,F[i+1|0]);j=H[f>>2];H[f>>2]=j+1;F[j|0]=h;i=i+2|0}fd(i,c);j=0;n=Hb(g);h=0;g=i;while(1){if(c>>>0<=g>>>0){fd((i-a|0)+d|0,H[f>>2]);g=H[f>>2]}else{d:{if(!I[Aa(k,h)|0]){break d}if(F[Aa(k,h)|0]!=(j|0)){break d}j=H[f>>2];H[f>>2]=j+1;F[j|0]=n;h=(wa(k)-1>>>0>h>>>0)+h|0;j=0}o=pb(l,F[g|0]);m=H[f>>2];H[f>>2]=m+1;F[m|0]=o;g=g+1|0;j=j+1|0;continue}break}}H[e>>2]=(b|0)==(c|0)?g:(b-a|0)+d|0;va(k);oa=k+16|0}function Hn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-368|0;oa=a;H[a+352>>2]=c;H[a+360>>2]=b;Yf(a+200|0,d,a+224|0,a+220|0,a+216|0);b=Ea(a+184|0);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Ab(a+360|0,a+352|0)){break a}if(H[a+180>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=d+c}if(Xf(ab(a+360|0),a+7|0,a+6|0,c,a+180|0,H[a+220>>2],H[a+216>>2],a+200|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}hb(a+360|0);continue}break}b:{if(!wa(a+200|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}L[f>>2]=Ni(c,H[a+180>>2],e);wb(a+200|0,a+16|0,H[a+12>>2],e);if(jb(a+360|0,a+352|0)){H[e>>2]=H[e>>2]|2}c=H[a+360>>2];va(b);va(a+200|0);oa=a+368|0;return c|0}function Gn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-368|0;oa=a;H[a+352>>2]=c;H[a+360>>2]=b;Yf(a+200|0,d,a+224|0,a+220|0,a+216|0);b=Ea(a+184|0);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Ab(a+360|0,a+352|0)){break a}if(H[a+180>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=d+c}if(Xf(ab(a+360|0),a+7|0,a+6|0,c,a+180|0,H[a+220>>2],H[a+216>>2],a+200|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}hb(a+360|0);continue}break}b:{if(!wa(a+200|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}M[f>>3]=Mi(c,H[a+180>>2],e);wb(a+200|0,a+16|0,H[a+12>>2],e);if(jb(a+360|0,a+352|0)){H[e>>2]=H[e>>2]|2}c=H[a+360>>2];va(b);va(a+200|0);oa=a+368|0;return c|0}function Qn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;bg(a+208|0,d,a+224|0,a+223|0,a+222|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(ag(bb(a+264|0),a+7|0,a+6|0,c,a+188|0,F[a+223|0],F[a+222|0],a+208|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}L[f>>2]=Ni(c,H[a+188>>2],e);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Pn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;bg(a+208|0,d,a+224|0,a+223|0,a+222|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(ag(bb(a+264|0),a+7|0,a+6|0,c,a+188|0,F[a+223|0],F[a+222|0],a+208|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}M[f>>3]=Mi(c,H[a+188>>2],e);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Li(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=oa-32|0;oa=f;a:{b:{c:{if((b|0)!=(c|0)){j=H[6070];H[6070]=0;g=oa-16|0;oa=g;Oa();h=oa-16|0;oa=h;e=oa-16|0;oa=e;dg(e,b,f+28|0,2);b=H[e+4>>2];H[h>>2]=H[e>>2];H[h+4>>2]=b;b=h;h=H[e+12>>2];H[b+8>>2]=H[e+8>>2];H[b+12>>2]=h;oa=e+16|0;e=H[b+4>>2];H[g>>2]=H[b>>2];H[g+4>>2]=e;e=g;g=H[b+12>>2];H[e+8>>2]=H[b+8>>2];H[e+12>>2]=g;oa=b+16|0;b=H[e+4>>2];H[f>>2]=H[e>>2];H[f+4>>2]=b;b=H[e+12>>2];H[f+8>>2]=H[e+8>>2];H[f+12>>2]=b;oa=e+16|0;e=H[f+8>>2];g=H[f+12>>2];h=H[f>>2];i=H[f+4>>2];b=H[6070];if(!b){break c}if(H[f+28>>2]!=(c|0)){break b}k=h;l=i;m=e;n=g;if((b|0)!=68){break a}break b}H[d>>2]=4;break a}H[6070]=j;if(H[f+28>>2]==(c|0)){break a}}H[d>>2]=4;h=k;i=l;e=m;g=n}H[a>>2]=h;H[a+4>>2]=i;H[a+8>>2]=e;H[a+12>>2]=g;oa=f+32|0}function Kn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Si(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function In(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Oi(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Ln(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Ti(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Jn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}G[f>>1]=Ri(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Hi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Pi(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Tn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Si(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Rn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Oi(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Sm(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a=oa-496|0;oa=a;Ia(a+488|0,d);l=Ib(a+488|0);if(wa(f)){m=H[Qe(f,0)>>2]==(Kb(l,45)|0)}j=Ea(a+456|0);g=bc(a+440|0);h=bc(a+424|0);Zh(c,m,a+488|0,a+480|0,a+476|0,a+472|0,j,g,h,a+420|0);H[a+16>>2]=151;k=Ya(a+8|0,0,a+16|0);c=a+16|0;a:{b:{if((wa(f)|0)>H[a+420>>2]){i=wa(f);n=H[a+420>>2];i=(((wa(h)+(i-n<<1)|0)+wa(g)|0)+H[a+420>>2]|0)+1|0;break b}i=((wa(h)+wa(g)|0)+H[a+420>>2]|0)+2|0}if(i>>>0<101){break a}lb(k,cb(i<<2));c=H[k>>2];if(c){break a}db();X()}Yh(c,a+4|0,a,H[d+4>>2],Ca(f),Ca(f)+(wa(f)<<2)|0,l,m,a+480|0,H[a+476>>2],H[a+472>>2],j,g,h,H[a+420>>2]);b=Dc(b,c,H[a+4>>2],H[a>>2],d,e);_a(k);va(h);va(g);va(j);Fa(a+488|0);oa=a+496|0;return b|0}function Un(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Ti(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Sn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}G[f>>1]=Ri(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Qi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Pi(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Um(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a=oa-192|0;oa=a;Ia(a+184|0,d);l=Fb(a+184|0);if(wa(f)){m=I[Aa(f,0)|0]==(pb(l,45)&255)}j=Ea(a+160|0);g=Ea(a+144|0);h=Ea(a+128|0);$h(c,m,a+184|0,a+176|0,a+175|0,a+174|0,j,g,h,a+124|0);H[a+16>>2]=151;k=Ya(a+8|0,0,a+16|0);c=a+16|0;a:{b:{if((wa(f)|0)>H[a+124>>2]){i=wa(f);n=H[a+124>>2];i=(((wa(h)+(i-n<<1)|0)+wa(g)|0)+H[a+124>>2]|0)+1|0;break b}i=((wa(h)+wa(g)|0)+H[a+124>>2]|0)+2|0}if(i>>>0<101){break a}lb(k,cb(i));c=H[k>>2];if(c){break a}db();X()}_h(c,a+4|0,a,H[d+4>>2],Ca(f),Ca(f)+wa(f)|0,l,m,a+176|0,F[a+175|0],F[a+174|0],j,g,h,H[a+124>>2]);b=pc(b,c,H[a+4>>2],H[a>>2],d,e);_a(k);va(h);va(g);va(j);Fa(a+184|0);oa=a+192|0;return b|0}function ie(a,b,c){var d=0,e=0;a:{if((a|0)==(b|0)){break a}e=a+c|0;if(b-e>>>0<=0-(c<<1)>>>0){Wb(a,b,c);return}d=(a^b)&3;b:{c:{if(a>>>0>>0){if(d){break b}if(!(a&3)){break c}while(1){if(!c){break a}F[a|0]=I[b|0];b=b+1|0;c=c-1|0;a=a+1|0;if(a&3){continue}break}break c}d:{if(d){break d}if(e&3){while(1){if(!c){break a}c=c-1|0;d=c+a|0;F[d|0]=I[b+c|0];if(d&3){continue}break}}if(c>>>0<=3){break d}while(1){c=c-4|0;H[c+a>>2]=H[b+c>>2];if(c>>>0>3){continue}break}}if(!c){break a}while(1){c=c-1|0;F[c+a|0]=I[b+c|0];if(c){continue}break}break a}if(c>>>0<=3){break b}while(1){H[a>>2]=H[b>>2];b=b+4|0;a=a+4|0;c=c-4|0;if(c>>>0>3){continue}break}}if(!c){break a}while(1){F[a|0]=I[b|0];a=a+1|0;b=b+1|0;c=c-1|0;if(c){continue}break}}}function tl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=oa-32|0;oa=d;e=H[a+28>>2];H[d+16>>2]=e;f=H[a+20>>2];H[d+28>>2]=c;H[d+24>>2]=b;b=f-e|0;H[d+20>>2]=b;e=b+c|0;j=2;b=d+16|0;a:{b:{c:{if(!Ye(ba(H[a+60>>2],d+16|0,2,d+12|0)|0)){while(1){f=H[d+12>>2];if((f|0)==(e|0)){break c}if((f|0)<=-1){break b}g=H[b+4>>2];h=g>>>0>>0;i=(h<<3)+b|0;g=f-(h?g:0)|0;H[i>>2]=g+H[i>>2];i=(h?12:4)+b|0;H[i>>2]=H[i>>2]-g;e=e-f|0;b=h?b+8|0:b;j=j-h|0;if(!Ye(ba(H[a+60>>2],b|0,j|0,d+12|0)|0)){continue}break}}if((e|0)!=-1){break b}}b=H[a+44>>2];H[a+28>>2]=b;H[a+20>>2]=b;H[a+16>>2]=b+H[a+48>>2];a=c;break a}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a>>2]=H[a>>2]|32;a=0;if((j|0)==2){break a}a=c-H[b+4>>2]|0}oa=d+32|0;return a|0}function Vb(a,b,c){var d=0,e=0,f=0;a:{if(!c){break a}f=a+c|0;F[f-1|0]=b;F[a|0]=b;if(c>>>0<3){break a}F[f-2|0]=b;F[a+1|0]=b;F[f-3|0]=b;F[a+2|0]=b;if(c>>>0<7){break a}F[f-4|0]=b;F[a+3|0]=b;if(c>>>0<9){break a}f=0-a&3;e=f+a|0;d=N(b&255,16843009);H[e>>2]=d;b=c-f&-4;c=b+e|0;H[c-4>>2]=d;if(b>>>0<9){break a}H[e+8>>2]=d;H[e+4>>2]=d;H[c-8>>2]=d;H[c-12>>2]=d;if(b>>>0<25){break a}H[e+24>>2]=d;H[e+20>>2]=d;H[e+16>>2]=d;H[e+12>>2]=d;H[c-16>>2]=d;H[c-20>>2]=d;H[c-24>>2]=d;H[c-28>>2]=d;c=b;b=e&4|24;c=c-b|0;if(c>>>0<32){break a}d=Eq(d,0,1,1);f=pa;b=b+e|0;while(1){H[b+24>>2]=d;e=f;H[b+28>>2]=e;H[b+16>>2]=d;H[b+20>>2]=e;H[b+8>>2]=d;H[b+12>>2]=e;H[b>>2]=d;H[b+4>>2]=e;b=b+32|0;c=c-32|0;if(c>>>0>31){continue}break}}return a}function Fd(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=oa-16|0;oa=k;F[k+15|0]=a;a:{b:{c:{if(H[d>>2]!=(c|0)){break c}l=43;m=a&255;if((m|0)!=I[j+24|0]){l=45;if(I[j+25|0]!=(m|0)){break c}}H[d>>2]=c+1;F[c|0]=l;break b}if(!(!wa(g)|(a|0)!=(f|0))){a=0;b=H[i>>2];if((b-h|0)>159){break a}a=H[e>>2];H[i>>2]=b+4;H[b>>2]=a;break b}a=-1;f=$f(j,j+26|0,k+15|0)-j|0;if((f|0)>23){break a}d:{e:{switch(b-8|0){case 0:case 2:if((b|0)>(f|0)){break d}break a;case 1:break d;default:break e}}if((b|0)!=16|(f|0)<22){break d}b=H[d>>2];if((b|0)==(c|0)|(b-c|0)>2|I[b-1|0]!=48){break a}a=0;H[e>>2]=0;H[d>>2]=b+1;F[b|0]=I[f+13232|0];break a}a=H[d>>2];H[d>>2]=a+1;F[a|0]=I[f+13232|0];H[e>>2]=H[e>>2]+1;a=0;break a}a=0;H[e>>2]=0}oa=k+16|0;return a}function Cd(a,b,c,d,e,f,g,h,i,j){var k=0,l=0;k=oa-16|0;oa=k;H[k+12>>2]=a;a:{b:{c:{if(H[d>>2]!=(c|0)){break c}l=43;if(H[j+96>>2]!=(a|0)){l=45;if(H[j+100>>2]!=(a|0)){break c}}H[d>>2]=c+1;F[c|0]=l;break b}if(!(!wa(g)|(a|0)!=(f|0))){a=0;b=H[i>>2];if((b-h|0)>159){break a}a=H[e>>2];H[i>>2]=b+4;H[b>>2]=a;break b}a=-1;g=Wf(j,j+104|0,k+12|0)-j|0;if((g|0)>92){break a}f=g>>2;d:{e:{switch(b-8|0){case 0:case 2:if((b|0)>(f|0)){break d}break a;case 1:break d;default:break e}}if((b|0)!=16|(g|0)<88){break d}b=H[d>>2];if((b|0)==(c|0)|(b-c|0)>2|I[b-1|0]!=48){break a}a=0;H[e>>2]=0;H[d>>2]=b+1;F[b|0]=I[f+13232|0];break a}a=H[d>>2];H[d>>2]=a+1;F[a|0]=I[f+13232|0];H[e>>2]=H[e>>2]+1;a=0;break a}a=0;H[e>>2]=0}oa=k+16|0;return a}function mj(a,b,c,d,e,f){var g=0;g=oa-80|0;oa=g;a:{if((f|0)>=16384){Ta(g+32|0,b,c,d,e,0,0,0,2147352576);d=H[g+40>>2];e=H[g+44>>2];b=H[g+32>>2];c=H[g+36>>2];if((f|0)<32767){f=f-16383|0;break a}Ta(g+16|0,b,c,d,e,0,0,0,2147352576);f=((f|0)<49149?f:49149)-32766|0;d=H[g+24>>2];e=H[g+28>>2];b=H[g+16>>2];c=H[g+20>>2];break a}if((f|0)>-16383){break a}Ta(g- -64|0,b,c,d,e,0,0,0,65536);d=H[g+72>>2];e=H[g+76>>2];b=H[g+64>>2];c=H[g+68>>2];if((f|0)>-32765){f=f+16382|0;break a}Ta(g+48|0,b,c,d,e,0,0,0,65536);f=((f|0)>-49146?f:-49146)+32764|0;d=H[g+56>>2];e=H[g+60>>2];b=H[g+48>>2];c=H[g+52>>2]}Ta(g,b,c,d,e,0,0,0,f+16383<<16);b=H[g+12>>2];H[a+8>>2]=H[g+8>>2];H[a+12>>2]=b;b=H[g+4>>2];H[a>>2]=H[g>>2];H[a+4>>2]=b;oa=g+80|0}function pj(a,b,c){a:{if(b>>>0>20){break a}b:{switch(b-9|0){case 0:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=H[b>>2];return;case 1:b=H[c>>2];H[c>>2]=b+4;b=H[b>>2];H[a>>2]=b;H[a+4>>2]=b>>31;return;case 2:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=H[b>>2];H[a+4>>2]=0;return;case 3:b=H[c>>2]+7&-8;H[c>>2]=b+8;c=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=c;return;case 4:b=H[c>>2];H[c>>2]=b+4;b=G[b>>1];H[a>>2]=b;H[a+4>>2]=b>>31;return;case 5:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=J[b>>1];H[a+4>>2]=0;return;case 6:b=H[c>>2];H[c>>2]=b+4;b=F[b|0];H[a>>2]=b;H[a+4>>2]=b>>31;return;case 7:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=I[b|0];H[a+4>>2]=0;return;case 8:b=H[c>>2]+7&-8;H[c>>2]=b+8;M[a>>3]=M[b>>3];return;case 9:break b;default:break a}}qa[145](a,c)}}function Oa(){var a=0,b=0,c=0,d=0,e=0;a:{if(F[24532]&1){break a}if(!fb(24532)){break a}c=oa-32|0;oa=c;b:{if(ej(0)){while(1){if(2147483647>>>a&1){H[a<<2>>2]=fj(a,2653)}a=a+1|0;if((a|0)!=6){continue}break}break b}while(1){e=(c+8|0)+(a<<2)|0;b=1<>2]}H[e>>2]=b;d=((b|0)!=0)+d|0;a=a+1|0;if((a|0)!=6){continue}break}b=9168;c:{d:{switch(d|0){case 1:break d;case 0:break b;default:break c}}if(H[c+8>>2]!=9140){break c}b=9192;break b}b=cb(24);if(!b){break b}a=H[c+12>>2];H[b>>2]=H[c+8>>2];H[b+4>>2]=a;a=H[c+28>>2];H[b+16>>2]=H[c+24>>2];H[b+20>>2]=a;a=H[c+20>>2];H[b+8>>2]=H[c+16>>2];H[b+12>>2]=a}oa=c+32|0;H[6132]=b;eb(24532)}return H[6132]}function Nn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=Ea(a+208|0);Ia(a+16|0,d);Wc(Fb(a+16|0),13232,13258,a+224|0);Fa(a+16|0);c=Ea(a+192|0);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=b;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(c)+b|0)){d=wa(c);Da(c,wa(c)<<1);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=d+b}if(Fd(bb(a+264|0),16,b,a+188|0,a+8|0,0,g,a+16|0,a+12|0,a+224|0)){break a}ib(a+264|0);continue}break}Da(c,H[a+188>>2]-b|0);b=Ca(c);d=Oa();H[a>>2]=f;if((Ki(b,d,a)|0)!=1){H[e>>2]=4}if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}b=H[a+264>>2];va(c);va(g);oa=a+272|0;return b|0}function En(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=Ea(a+208|0);Ia(a+16|0,d);Ec(Ib(a+16|0),13232,13258,a+224|0);Fa(a+16|0);c=Ea(a+192|0);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=b;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(c)+b|0)){d=wa(c);Da(c,wa(c)<<1);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=d+b}if(Cd(ab(a+344|0),16,b,a+188|0,a+8|0,0,g,a+16|0,a+12|0,a+224|0)){break a}hb(a+344|0);continue}break}Da(c,H[a+188>>2]-b|0);b=Ca(c);d=Oa();H[a>>2]=f;if((Ki(b,d,a)|0)!=1){H[e>>2]=4}if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}b=H[a+344>>2];va(c);va(g);oa=a+352|0;return b|0}function yj(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=oa-16|0;oa=g;c=Ea(a);d=c;a=H[b+4>>2];j=pg(a+H[H[a>>2]-12>>2]|0,10);h=oa-16|0;oa=h;if(I[Cf(h+8|0,a)|0]){wj(d);a:{b:{while(1){e=$e(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]);if(qb(e,-1)){break b}e=Zc(e);f=0;if(qb(e,j)){break a}Od(d,e);i=i+1|0;if((wa(d)|0)!=-17){continue}break}f=4;break a}f=i?2:6}d=f;ac(H[H[a>>2]-12>>2]+a|0,d)}oa=h+16|0;a=H[b+4>>2];c:{if(!je(H[H[a>>2]-12>>2]+a|0)){break c}a=H[b+4>>2];if((I[(H[H[a>>2]-12>>2]+a|0)+16|0]&2)>>>1|0){break c}a=Ea(g);Ga(a,3108);cg(Ca(a),3010);va(a)}if(I[Aa(c,wa(c)-1|0)|0]==13){d:{a=wa(c)-1|0;if(wa(c)>>>0>=a>>>0){xj(c,a);break d}me();X()}}H[b+8>>2]=H[b+8>>2]+1;oa=g+16|0}function fl(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;f=oa-32|0;oa=f;g=H[b+68>>2];if(g){g=$c(g);a:{b:{if(!(!H[b+64>>2]|(c|d?(g|0)<=0:0))){if(!(qa[H[H[b>>2]+24>>2]](b)|0)){break b}}Kc(a,-1,-1);break a}if(e>>>0>=3){Kc(a,-1,-1);break a}h=H[b+64>>2];d=Eq(g,g>>31,c,d);c=(g|0)>0;if(Ae(h,c?d:0,c?pa:0,e)){Kc(a,-1,-1);break a}e=f+16|0;c=H[b+64>>2];c:{if(H[c+76>>2]<=-1){c=nh(c);d=pa;break c}c=nh(c);d=pa}d=Kc(e,c,d);e=H[b+76>>2];c=f;b=H[b+72>>2];H[c>>2]=b;H[c+4>>2]=e;H[c+8>>2]=b;H[c+12>>2]=e;b=H[c+4>>2];H[d>>2]=H[c>>2];H[d+4>>2]=b;b=H[c+28>>2];H[a+8>>2]=H[c+24>>2];H[a+12>>2]=b;b=H[c+20>>2];H[a>>2]=H[c+16>>2];H[a+4>>2]=b}oa=f+32|0;return}db();X()}function Zh(a,b,c,d,e,f,g,h,i,j){var k=0;k=oa-16|0;oa=k;a:{if(a){a=ci(c);b:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break b}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}qc(i,k);va(k);H[e>>2]=ec(a);H[f>>2]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);qc(h,k);va(k);a=Mc(a);break a}a=bi(c);c:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break c}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}qc(i,k);va(k);H[e>>2]=ec(a);H[f>>2]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);qc(h,k);va(k);a=Mc(a)}H[j>>2]=a;oa=k+16|0}function sq(a,b){a=a|0;b=b|0;var c=0,d=0;c=oa-16|0;oa=c;gk(a,b);H[a+136>>2]=b;b=H[a+140>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+140>>2]=b;b=H[a+144>>2];if(b){Ba(Va(b))}b=Na(12);d=Sa(b);H[a+144>>2]=b;H[c>>2]=0;ya(d,c);H[a+184>>2]=0;b=xa(c,7628);Ua(a+160|0,b);va(b);Ga(a+172|0,7628);F[a+192|0]=32;H[a+200>>2]=0;F[a+196|0]=34;G[a+194>>1]=8224;F[a+208|0]=1;H[a+188>>2]=0;F[a+238|0]=0;G[a+236>>1]=0;F[a+228|0]=0;F[a+226|0]=0;F[a+223|0]=0;F[a+224|0]=0;F[a+221|0]=0;F[a+213|0]=0;F[a+214|0]=0;F[a+215|0]=0;F[a+216|0]=0;F[a+217|0]=0;F[a+218|0]=0;F[a+219|0]=1;F[a+220|0]=0;G[a+230>>1]=0;G[a+232>>1]=0;H[a+248>>2]=0;H[a+252>>2]=0;H[a+240>>2]=0;H[a+244>>2]=0;oa=c+16|0}function $h(a,b,c,d,e,f,g,h,i,j){var k=0;k=oa-16|0;oa=k;a:{if(a){a=ii(c);b:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break b}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}Ua(i,k);va(k);F[e|0]=ec(a);F[f|0]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);Ua(h,k);va(k);a=Mc(a);break a}a=hi(c);c:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break c}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}Ua(i,k);va(k);F[e|0]=ec(a);F[f|0]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);Ua(h,k);va(k);a=Mc(a)}H[j>>2]=a;oa=k+16|0}function La(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{c=H[a+112>>2];d=H[a+116>>2];b:{if(c|d){b=c>>>0<=K[a+120>>2];c=H[a+124>>2];if((d|0)<(c|0)?1:(d|0)<=(c|0)?b:0){break b}}g=kg(a);if((g|0)>-1){break a}}H[a+104>>2]=0;return-1}h=a;b=H[a+116>>2];i=b;d=H[a+8>>2];c=d;f=H[a+112>>2];c:{if(!(b|f)){break c}c=d;e=H[a+120>>2]^-1;f=e+f|0;b=(H[a+124>>2]^-1)+i|0;b=f>>>0>>0?b+1|0:b;i=H[a+4>>2];e=d-i|0;j=f>>>0>=e>>>0;e=e>>31;if((b|0)>(e|0)?1:(e|0)<=(b|0)?j:0){break c}c=f+i|0}H[h+104>>2]=c;h=H[a+4>>2];if(d){c=a;b=(d-h|0)+1|0;d=b+H[a+120>>2]|0;a=H[a+124>>2]+(b>>31)|0;H[c+120>>2]=d;H[c+124>>2]=d>>>0>>0?a+1|0:a}a=h-1|0;if(I[a|0]!=(g|0)){F[a|0]=g}return g}function gd(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0;j=1;i=d&2147483647;m=i;k=c;a:{if(!c&(i|0)==2147418112?a|b:(i|0)==2147418112&(c|0)!=0|i>>>0>2147418112){break a}l=h&2147483647;n=l;i=g;if(!g&(l|0)==2147418112?e|f:(l|0)==2147418112&(g|0)!=0|l>>>0>2147418112){break a}if(!(a|e|(i|k)|(b|f|(m|n)))){return 0}k=d&h;if((k|0)>0?1:(k|0)>=0){j=-1;if((c|0)==(g|0)&(d|0)==(h|0)?(b|0)==(f|0)&a>>>0>>0|b>>>0>>0:(d|0)<(h|0)?1:(d|0)<=(h|0)?c>>>0>>0:0){break a}return(a^e|c^g)!=0|(b^f|d^h)!=0}j=-1;if((c|0)==(g|0)&(d|0)==(h|0)?(b|0)==(f|0)&a>>>0>e>>>0|b>>>0>f>>>0:(d|0)>(h|0)?1:(d|0)>=(h|0)?c>>>0>g>>>0:0){break a}j=(a^e|c^g)!=0|(b^f|d^h)!=0}return j}function Ve(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;h=oa-16|0;oa=h;f=d?d:24348;d=H[f>>2];a:{b:{c:{if(!b){if(d){break c}break a}e=-2;if(!c){break a}i=a?a:h+12|0;d:{if(d){a=c;break d}a=I[b|0];d=a<<24>>24;if((d|0)>=0){H[i>>2]=a;e=(d|0)!=0;break a}a=F[b|0];if(!H[H[5347]>>2]){H[i>>2]=a&57343;e=1;break a}a=(a&255)-194|0;if(a>>>0>50){break c}d=H[(a<<2)+8912>>2];a=c-1|0;if(!a){break b}b=b+1|0}g=I[b|0];j=g>>>3|0;if((j-16|(d>>26)+j)>>>0>7){break c}while(1){a=a-1|0;d=g-128|d<<6;if((d|0)>=0){H[f>>2]=0;H[i>>2]=d;e=c-a|0;break a}if(!a){break b}b=b+1|0;g=I[b|0];if((g&192)==128){continue}break}}H[f>>2]=0;H[6070]=25;e=-1;break a}H[f>>2]=d}oa=h+16|0;return e}function Pl(a){a=a|0;a:{if(F[24656]&1){break a}if(!fb(24656)){break a}b:{if(F[25760]&1){break b}if(!fb(25760)){break b}a=25472;while(1){a=bc(a)+12|0;if((a|0)!=25760){continue}break}eb(25760)}Ka(25472,18232);Ka(25484,18264);Ka(25496,18300);Ka(25508,18324);Ka(25520,18348);Ka(25532,18364);Ka(25544,18384);Ka(25556,18404);Ka(25568,18432);Ka(25580,18472);Ka(25592,18504);Ka(25604,18540);Ka(25616,18576);Ka(25628,18592);Ka(25640,18608);Ka(25652,18624);Ka(25664,18348);Ka(25676,18640);Ka(25688,18656);Ka(25700,18672);Ka(25712,18688);Ka(25724,18704);Ka(25736,18720);Ka(25748,18736);H[6163]=25472;eb(24656)}return H[6163]}function Ii(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;f=oa+-64|0;oa=f;i=Uf(f+56|0);e=Ea(f+40|0);h=Ea(f+24|0);H[i>>2]=H[b>>2];g=1;if(zb(i,c)){while(1){bf(e,H[i>>2]);b=xa(f+8|0,2983);j=Ra(e,0,2,b);va(b);a:{if(!j){Eb(f+8|0,e,2);g=ne(a,f+8|0,d)&g;va(f+8|0);break a}b:{if(I[Aa(e,0)|0]==45){b=1;if(wa(e)>>>0<=1){break b}while(1){if(!(!uj(F[Aa(e,b)|0])|b>>>0<2)){j=ne(a,h,d);Ga(h,7628);g=g&j}mc(h,1,F[Aa(e,b)|0]);b=b+1|0;if(wa(e)>>>0>b>>>0){continue}break}break b}b=ne(a,e,d);Ga(h,7628);g=b&g;break a}b=ne(a,h,d);Ga(h,7628);g=b&g}H[i>>2]=H[i>>2]+12;if(zb(i,c)){continue}break}}va(h);va(e);oa=f- -64|0;return g}function gl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=oa-16|0;oa=e;H[e+12>>2]=c;hc(a,0,0,0);Ac(a,0,0);a:{if(!I[a+96|0]){break a}d=H[a+32>>2];if(!d){break a}Ba(d)}b:{if(!I[a+97|0]){break b}d=H[a+56>>2];if(!d){break b}Ba(d)}H[a+52>>2]=c;f=a;c:{d:{e:{if(c>>>0>=9){d=I[a+98|0];if(!(!d|!b)){F[a+96|0]=0;H[a+32>>2]=b;break d}c=Na(c);F[a+96|0]=1;H[a+32>>2]=c;break e}F[a+96|0]=0;H[a+52>>2]=8;H[a+32>>2]=a+44;d=I[a+98|0]}if(d){break d}H[e+8>>2]=8;d=H[vf(e+12|0,e+8|0)>>2];H[a+60>>2]=d;if(b){c=0;if(d>>>0>7){break c}}b=Na(d);c=1;break c}b=0;H[a+60>>2]=0;c=0}F[f+97|0]=c;H[a+56>>2]=b;oa=e+16|0;return a|0}function Rl(a){a=a|0;a:{if(F[24648]&1){break a}if(!fb(24648)){break a}b:{if(F[25456]&1){break b}if(!fb(25456)){break b}a=25168;while(1){a=Ea(a)+12|0;if((a|0)!=25456){continue}break}eb(25456)}Ga(25168,1073);Ga(25180,1064);Ga(25192,1961);Ga(25204,1874);Ga(25216,1163);Ga(25228,2262);Ga(25240,1090);Ga(25252,1330);Ga(25264,1601);Ga(25276,1584);Ga(25288,1592);Ga(25300,1611);Ga(25312,1811);Ga(25324,2506);Ga(25336,1636);Ga(25348,1523);Ga(25360,1163);Ga(25372,1689);Ga(25384,1826);Ga(25396,1994);Ga(25408,1667);Ga(25420,1345);Ga(25432,1213);Ga(25444,2484);H[6161]=25168;eb(24648)}return H[6161]}function xk(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(Mb(a,H[b+8>>2],f)){hf(b,c,d,e);return}h=I[b+53|0];g=H[a+12>>2];F[b+53|0]=0;i=I[b+52|0];F[b+52|0]=0;j=a+16|0;ff(j,b,c,d,e,f);k=I[b+53|0];h=h|k;l=I[b+52|0];i=i|l;a:{if((g|0)<2){break a}j=j+(g<<3)|0;g=a+24|0;while(1){if(I[b+54|0]){break a}b:{if(l){if(H[b+24>>2]==1){break a}if(I[a+8|0]&2){break b}break a}if(!k){break b}if(!(F[a+8|0]&1)){break a}}G[b+52>>1]=0;ff(g,b,c,d,e,f);k=I[b+53|0];h=k|h;l=I[b+52|0];i=l|i;g=g+8|0;if(j>>>0>g>>>0){continue}break}}F[b+53|0]=(h&255)!=0;F[b+52|0]=(i&255)!=0}function df(a,b,c){var d=0,e=0,f=0,g=0;g=b;d=H[c+16>>2];a:{if(!d){d=c;e=I[d+74|0];F[d+74|0]=e-1|e;e=H[d>>2];b:{if(e&8){H[d>>2]=e|32;d=-1;break b}H[d+4>>2]=0;H[d+8>>2]=0;e=H[d+44>>2];H[d+28>>2]=e;H[d+20>>2]=e;H[d+16>>2]=e+H[d+48>>2];d=0}if(d){break a}d=H[c+16>>2]}f=g;g=H[c+20>>2];if(f>>>0>d-g>>>0){return qa[H[c+36>>2]](c,a,b)|0}c:{if(F[c+75|0]<0){d=0;break c}f=b;while(1){d=f;if(!d){d=0;break c}f=d-1|0;if(I[f+a|0]!=10){continue}break}f=qa[H[c+36>>2]](c,a,d)|0;if(f>>>0>>0){break a}a=a+d|0;b=b-d|0;g=H[c+20>>2]}Wb(g,a,b);H[c+20>>2]=H[c+20>>2]+b;f=b+d|0}return f}function Uk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=oa-32|0;oa=c;d=qb(b,-1);e=I[a+52|0];f=a;a:{b:{if(d){d=b;if(e){break a}b=H[a+48>>2];a=qb(b,-1)^1;break b}if(e){F[c+19|0]=Zc(H[a+48>>2]);c:{d:{switch(Qd(H[a+36>>2],H[a+40>>2],c+19|0,c+20|0,c+12|0,c+24|0,c+32|0,c+20|0)-1|0){case 2:d=H[a+48>>2];H[c+20>>2]=c+25;F[c+24|0]=d;default:while(1){d=H[c+20>>2];e=1;if(d>>>0<=c+24>>>0){break c}d=d-1|0;H[c+20>>2]=d;if((pe(F[d|0],H[a+32>>2])|0)!=-1){continue}break};break;case 0:case 1:break d}}d=-1;e=0}if(!e){break a}}H[a+48>>2]=b;a=1}F[f+52|0]=a;d=b}oa=c+32|0;return d|0}function Qk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=oa-32|0;oa=c;d=qb(b,-1);e=I[a+52|0];f=a;a:{b:{if(d){d=b;if(e){break a}b=H[a+48>>2];a=qb(b,-1)^1;break b}if(e){H[c+16>>2]=H[a+48>>2];c:{d:{switch(Qd(H[a+36>>2],H[a+40>>2],c+16|0,c+20|0,c+12|0,c+24|0,c+32|0,c+20|0)-1|0){case 2:d=H[a+48>>2];H[c+20>>2]=c+25;F[c+24|0]=d;default:while(1){d=H[c+20>>2];e=1;if(d>>>0<=c+24>>>0){break c}d=d-1|0;H[c+20>>2]=d;if((pe(F[d|0],H[a+32>>2])|0)!=-1){continue}break};break;case 0:case 1:break d}}d=-1;e=0}if(!e){break a}}H[a+48>>2]=b;a=1}F[f+52|0]=a;d=b}oa=c+32|0;return d|0}function Nk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=oa-32|0;oa=c;a:{b:{c:{if(qb(b,-1)){break c}F[c+23|0]=Zc(b);if(I[a+44|0]){if((Ub(c+23|0,1,1,H[a+32>>2])|0)!=1){break b}break c}H[c+16>>2]=c+24;f=c+32|0;g=c+24|0;d=c+23|0;while(1){e=Qd(H[a+36>>2],H[a+40>>2],d,g,c+12|0,c+24|0,f,c+16|0);if(H[c+12>>2]==(d|0)){break b}if((e|0)==3){if((Ub(d,1,1,H[a+32>>2])|0)==1){break c}break b}if(e>>>0>1){break b}d=H[c+16>>2]-(c+24|0)|0;if((Ub(c+24|0,1,d,H[a+32>>2])|0)!=(d|0)){break b}d=H[c+12>>2];if((e|0)==1){continue}break}}a=re(b);break a}a=-1}oa=c+32|0;return a|0}function cl(a,b){a=a|0;b=b|0;var c=0;qa[H[H[a>>2]+24>>2]](a)|0;b=Rd(b);H[a+68>>2]=b;c=I[a+98|0];b=Jc(b);F[a+98|0]=b;if((b|0)!=(c|0)){hc(a,0,0,0);Ac(a,0,0);b=I[a+96|0];if(I[a+98|0]){a:{if(!b){break a}b=H[a+32>>2];if(!b){break a}Ba(b)}F[a+96|0]=I[a+97|0];H[a+52>>2]=H[a+60>>2];b=H[a+56>>2];H[a+56>>2]=0;H[a+60>>2]=0;H[a+32>>2]=b;F[a+97|0]=0;return}b:{if(b){break b}b=H[a+32>>2];if((b|0)==(a+44|0)){break b}F[a+97|0]=0;H[a+56>>2]=b;b=H[a+52>>2];H[a+60>>2]=b;b=Na(b);F[a+96|0]=1;H[a+32>>2]=b;return}b=H[a+52>>2];H[a+60>>2]=b;b=Na(b);F[a+97|0]=1;H[a+56>>2]=b}}function yg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=oa-32|0;oa=f;e=gb(a);i=e;d=Xj(a,Pa(a)+1|0);j=Pa(a);g=oa-16|0;oa=g;H[g+12>>2]=0;c=f+8|0;yf(c+12|0,e);if(d){h=Sj(d)}H[c>>2]=h;e=(j<<2)+h|0;H[c+8>>2]=e;H[c+4>>2]=e;H[Ic(c)>>2]=(d<<2)+h;oa=g+16|0;Yj(i,H[c+8>>2],b);H[c+8>>2]=H[c+8>>2]+4;Ag(a);b=c+4|0;Vj(gb(a),H[a>>2],H[a+4>>2],b);nc(a,b);nc(a+4|0,c+8|0);nc(gb(a),Ic(c));H[c>>2]=H[c+4>>2];Uj(a,Pa(a));a=c;b=a;d=H[a+4>>2];if((d|0)!=H[a+8>>2]){while(1){H[b+8>>2]=H[b+8>>2]-4;if((d|0)!=H[b+8>>2]){continue}break}}if(H[a>>2]){b=H[a>>2];Tj(a);Ba(b)}oa=f+32|0}function wc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=oa-16|0;oa=f;A(+b);h=v(1)|0;e=v(0)|0;g=h&2147483647;c=g;d=e;g=c+-1048576|0;a:{if((g|0)==2145386495|g>>>0<2145386495){i=d<<28;e=c>>>4|0;c=(c&15)<<28|d>>>4;d=e+1006632960|0;break a}if((c|0)==2146435072|c>>>0>2146435072){i=e<<28;c=h;e=c>>>4|0;c=(c&15)<<28|d>>>4;d=e|2147418112;break a}if(!(c|d)){c=0;d=0;break a}g=c;c=c>>>0<1?Q(e)+32|0:Q(c);xb(f,d,g,0,0,c+49|0);j=H[f>>2];i=H[f+4>>2];e=15372-c<<16;c=H[f+8>>2];d=e|H[f+12>>2]^65536}H[a>>2]=j;H[a+4>>2]=i;H[a+8>>2]=c;H[a+12>>2]=h&-2147483648|d;oa=f+16|0}function Kk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=oa-32|0;oa=c;a:{b:{c:{if(qb(b,-1)){break c}H[c+20>>2]=b;if(I[a+44|0]){if((Ub(c+20|0,4,1,H[a+32>>2])|0)!=1){break b}break c}H[c+16>>2]=c+24;f=c+32|0;g=c+24|0;d=c+20|0;while(1){e=Qd(H[a+36>>2],H[a+40>>2],d,g,c+12|0,c+24|0,f,c+16|0);if(H[c+12>>2]==(d|0)){break b}if((e|0)==3){if((Ub(d,1,1,H[a+32>>2])|0)==1){break c}break b}if(e>>>0>1){break b}d=H[c+16>>2]-(c+24|0)|0;if((Ub(c+24|0,1,d,H[a+32>>2])|0)!=(d|0)){break b}d=H[c+12>>2];if((e|0)==1){continue}break}}a=re(b);break a}a=-1}oa=c+32|0;return a|0}function _m(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;c=oa-416|0;oa=c;H[c+12>>2]=c+416;d=oa-144|0;oa=d;H[d+28>>2]=d+132;qi(a+8|0,d+32|0,d+28|0,e,f,g);H[d+16>>2]=0;H[d+20>>2]=0;H[d+12>>2]=d+32;f=c+16|0;g=Pj(f,H[c+12>>2]);e=oa-16|0;oa=e;H[e+12>>2]=H[a+8>>2];h=jc(e+8|0,e+12|0);a=$i(f,d+12|0,g,d+16|0);ic(h);oa=e+16|0;if((a|0)==-1){db();X()}H[c+12>>2]=f+(a<<2);oa=d+144|0;d=c+16|0;e=H[c+12>>2];a=oa-16|0;oa=a;H[a+8>>2]=b;while(1){if((d|0)!=(e|0)){Ci(a+8|0,H[d>>2]);d=d+4|0;continue}break}oa=a+16|0;oa=c+416|0;return H[a+8>>2]}function Md(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){c=oa-16|0;oa=c;d=H[b>>2];e=H[b+4>>2];f=rg(d,e);a:{if(f>>>0<=Gc(a)>>>0){H[c+12>>2]=e;if(Pa(a)>>>0>>0){H[c+12>>2]=d;b=Pa(a);H[c+12>>2]=H[c+12>>2]+(b<<2);Rj(d,H[c+12>>2],H[a>>2]);Qj(a,H[c+12>>2],e,f-Pa(a)|0);break a}bk(a,Rj(d,e,H[a>>2]));break a}b=a;if(H[b>>2]){Pa(b);_j(b);Nj(b);gb(b);g=H[b>>2];Gc(b);Ba(g);H[gb(b)>>2]=0;H[b>>2]=0;H[b+4>>2]=0}g=Xj(a,f);if(Wj(a)>>>0>>0){$d();X()}gb(b);h=Sj(g);H[b>>2]=h;H[b+4>>2]=h;H[gb(b)>>2]=(g<<2)+h;Uj(b,0);Qj(a,d,e,f)}oa=c+16|0}}function zk(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(Mb(a,H[b+8>>2],e)){gf(b,c,d);return}a:{if(Mb(a,H[b>>2],e)){if(!(H[b+20>>2]!=(c|0)?H[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}H[b+32>>2]=1;return}H[b+32>>2]=d;b:{if(H[b+44>>2]==4){break b}G[b+52>>1]=0;a=H[a+8>>2];qa[H[H[a>>2]+20>>2]](a,b,c,c,1,e);if(I[b+53|0]){H[b+44>>2]=3;if(!I[b+52|0]){break b}break a}H[b+44>>2]=4}H[b+20>>2]=c;H[b+40>>2]=H[b+40>>2]+1;if(H[b+36>>2]!=1|H[b+24>>2]!=2){break a}F[b+54|0]=1;return}a=H[a+8>>2];qa[H[H[a>>2]+24>>2]](a,b,c,d,e)}}function hd(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;a:{if(f&64){c=f+-64|0;b=c&31;if((c&63)>>>0>=32){c=0;b=e>>>b|0}else{c=e>>>b|0;b=((1<>>b}d=0;e=0;break a}if(!f){break a}h=e;i=d;j=64-f|0;g=j&31;if((j&63)>>>0>=32){h=i<>>32-g|h<>>0>=32){g=0;b=c>>>b|0}else{g=c>>>b|0;b=((1<>>b}b=j|b;c=g|h;g=d;d=f&31;if((f&63)>>>0>=32){h=0;d=e>>>d|0}else{h=e>>>d|0;d=((1<>>d}e=h}H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=d;H[a+12>>2]=e}function jd(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=yc(a);a:{if(!H[6069]|!I[a|0]){break a}if(kd(a,61)){break a}c=H[H[6069]>>2];if(!c){break a}b:{while(1){h=H[6069];d=a;i=0;f=g;b=0;c:{if(!f){break c}b=I[d|0];d:{if(!b){break d}while(1){e:{j=I[c|0];if(!j){break e}f=f-1|0;if(!f|(b|0)!=(j|0)){break e}c=c+1|0;b=I[d+1|0];d=d+1|0;if(b){continue}break d}break}i=b}b=(i&255)-I[c|0]|0}if(!b){d=H[(e<<2)+h>>2]+g|0;if(I[d|0]==61){break b}}e=e+1|0;c=H[(e<<2)+h>>2];if(c){continue}break}return 0}e=d+1|0}return e}function xb(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;a:{if(f&64){d=b;e=f+-64|0;b=e&31;if((e&63)>>>0>=32){e=d<>>32-b|c<>>0>=32){h=g<>>32-d|e<>>0>=32){f=0;d=d>>>e|0}else{f=d>>>e|0;d=((1<>>e}d=j|d;e=f|h;f=b;b=i&31;if((i&63)>>>0>=32){h=f<>>32-b|c<>2]=b;H[a+4>>2]=c;H[a+8>>2]=d;H[a+12>>2]=e}function Vn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-32|0;oa=g;H[g+24>>2]=b;a:{if(!(H[d+4>>2]&1)){H[g>>2]=-1;b=qa[H[H[a>>2]+16>>2]](a,b,c,d,e,g)|0;H[g+24>>2]=b;b:{switch(H[g>>2]){case 0:F[f|0]=0;break a;case 1:F[f|0]=1;break a;default:break b}}F[f|0]=1;H[e>>2]=4;break a}Ia(g,d);b=Fb(g);Fa(g);Ia(g,d);a=Gd(g);Fa(g);gc(g,a);fc(g|12,a);d=g+24|0;F[f|0]=(Te(g+24|0,c,g,d,b,e,1)|0)==(g|0);b=H[g+24>>2];while(1){d=va(d-12|0);if((g|0)!=(d|0)){continue}break}}oa=g+32|0;return b|0}function Mn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-32|0;oa=g;H[g+24>>2]=b;a:{if(!(H[d+4>>2]&1)){H[g>>2]=-1;b=qa[H[H[a>>2]+16>>2]](a,b,c,d,e,g)|0;H[g+24>>2]=b;b:{switch(H[g>>2]){case 0:F[f|0]=0;break a;case 1:F[f|0]=1;break a;default:break b}}F[f|0]=1;H[e>>2]=4;break a}Ia(g,d);b=Ib(g);Fa(g);Ia(g,d);a=Dd(g);Fa(g);gc(g,a);fc(g|12,a);d=g+24|0;F[f|0]=(Re(g+24|0,c,g,d,b,e,1)|0)==(g|0);b=H[g+24>>2];while(1){d=va(d-12|0);if((g|0)!=(d|0)){continue}break}}oa=g+32|0;return b|0}function bf(a,b){var c=0,d=0,e=0,f=0;if((a|0)!=(b|0)){if(!tb(a)){if(!tb(b)){H[a+8>>2]=H[b+8>>2];c=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=c;return}e=Ca(b);b=wa(b);c=oa-16|0;oa=c;a:{if(b>>>0<=10){ub(a,b);Yb(a,e,b);F[c+15|0]=0;nb(a+b|0,c+15|0);break a}f=a;a=I[a+11|0];Pd(f,10,b-10|0,a,0,a,b,e)}oa=c+16|0;return}e=Ca(b);b=wa(b);c=oa-16|0;oa=c;d=Rc(a);b:{if(d>>>0>b>>>0){d=H[a>>2];yb(a,b);Yb(d,e,b);F[c+15|0]=0;nb(b+d|0,c+15|0);break b}f=a;a=H[a+4>>2];Pd(f,d-1|0,(b-d|0)+1|0,a,0,a,b,e)}oa=c+16|0}}function nd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;h=Pa(c);a:{if((h|0)>=1){l=b-1|0;m=(b|0)<1;while(1){d=H[lc(c,g)>>2];b:{if(Ra(a,b,wa(d),d)){break b}e=wa(a);f=wa(d);i=0;j=F[Aa(d,0)|0];f=b+f|0;k=(f|0)>=(e|0);if(!k){i=F[Aa(a,f)|0]}c:{if(!m){e=I[Aa(a,l)|0];d:{if(!e){break d}if(!md(j)){break d}if(md(e<<24>>24)){break b}}if(!k){break c}break a}if((e|0)<=(f|0)){break a}}if(!md(j)){break a}if(!md(i<<24>>24)){break a}}g=g+1|0;if((h|0)!=(g|0)){continue}break}}d=0}return d}function Ti(a,b,c,d){var e=0,f=0,g=0;e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;a=Yi(a,e+12|0,d,Oa());d=pa;f=H[6070];d:{if(f){if(H[e+12>>2]!=(b|0)){break d}if((f|0)==68){break b}break c}H[6070]=g;if(H[e+12>>2]==(b|0)){break c}}}H[c>>2]=4;b=0;break a}if(((d|0)<-1?1:(d|0)<=-1?a>>>0<2147483648:0)|((d|0)>0?1:(d|0)>=0?a>>>0>2147483647:0)){break b}b=a;break a}H[c>>2]=4;b=2147483647;if((d|0)>0?1:(d|0)>=0?a>>>0>=1:0){break a}b=-2147483648}oa=e+16|0;return b}function kd(a,b){var c=0,d=0,e=0;e=b;d=e&255;a:{if(d){if(a&3){while(1){c=I[a|0];if(!c|(c|0)==(e&255)){break a}a=a+1|0;if(a&3){continue}break}}c=H[a>>2];b:{if((c^-1)&c-16843009&-2139062144){break b}d=N(d,16843009);while(1){c=c^d;if((c^-1)&c-16843009&-2139062144){break b}c=H[a+4>>2];a=a+4|0;if(!(c-16843009&(c^-1)&-2139062144)){continue}break}}while(1){c=a;d=I[a|0];if(d){a=c+1|0;if((d|0)!=(e&255)){continue}}break}a=c;break a}a=yc(a)+a|0}return I[a|0]==(b&255)?a:0}function Oi(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){d:{e:{f=I[a|0];if((f|0)!=45){break e}a=a+1|0;if((b|0)!=(a|0)){break e}break d}h=H[6070];H[6070]=0;a=eg(a,e+12|0,d,Oa());d=pa;g=H[6070];f:{if(g){if(H[e+12>>2]!=(b|0)){break f}if((g|0)==68){break c}break b}H[6070]=h;if(H[e+12>>2]==(b|0)){break b}}}}H[c>>2]=4;a=0;b=0;break a}H[c>>2]=4;a=-1;b=-1;break a}b=a;c=(f|0)==45;a=c?0-a|0:a;b=c?0-(d+((b|0)!=0)|0)|0:d}oa=e+16|0;pa=b;return a}function rb(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0;h=Eq(b,c,h,i);i=pa;j=h;h=Eq(d,e,f,g);e=j+h|0;d=pa+i|0;i=e;h=e>>>0>>0?d+1|0:d;j=g;e=0;g=e;k=i;l=c;d=0;i=Eq(j,e,c,d);e=k+i|0;c=pa+h|0;k=e;e=e>>>0>>0?c+1|0:c;h=f;c=0;i=b;f=Eq(h,c,i,0);b=pa;d=Eq(h,c,l,d);b=b+d|0;c=pa;c=b>>>0>>0?c+1|0:c;h=c;c=c+k|0;d=c>>>0>>0?e+1|0:e;h=c;c=d;d=Eq(i,m,j,g)+b|0;e=pa;e=b>>>0>d>>>0?e+1|0:e;b=h;h=e;e=b+e|0;H[a+8>>2]=e;H[a+12>>2]=e>>>0>>0?c+1|0:c;H[a>>2]=f;H[a+4>>2]=d}function nf(a,b,c,d,e){var f=0,g=0;f=oa-16|0;oa=f;H[f+8>>2]=e;H[f+12>>2]=c;c=wa(a);if(!((e|0)==-1|c>>>0>>0)){H[f>>2]=c-b;H[f+4>>2]=H[zc(f+12|0,f)>>2];a=Ca(a)+b|0;c=0;b=H[zc(f+4|0,f+8|0)>>2];e=0;a:{if(!b){break a}b:{if(!b){break b}while(1){e=I[d|0];g=I[a|0];if((e|0)==(g|0)){d=d+1|0;a=a+1|0;b=b-1|0;if(b){continue}break b}break}c=g-e|0}e=c}b=e;c:{if(b){break c}b=-1;a=H[f+4>>2];c=H[f+8>>2];if(a>>>0>>0){break c}b=a>>>0>c>>>0}oa=f+16|0;return b}me();X()}function Tl(a){a=a|0;a:{if(F[24640]&1){break a}if(!fb(24640)){break a}b:{if(F[25160]&1){break b}if(!fb(25160)){break b}a=24992;while(1){a=bc(a)+12|0;if((a|0)!=25160){continue}break}eb(25160)}Ka(24992,17892);Ka(25004,17920);Ka(25016,17948);Ka(25028,17980);Ka(25040,18020);Ka(25052,18056);Ka(25064,18084);Ka(25076,18120);Ka(25088,18136);Ka(25100,18152);Ka(25112,18168);Ka(25124,18184);Ka(25136,18200);Ka(25148,18216);H[6159]=24992;eb(24640)}return H[6159]}function Ri(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=I[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=H[6070];H[6070]=0;a=eg(a,e+12|0,d,Oa());d=pa;g=H[6070];g:{if(g){if(H[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}H[6070]=h;if(H[e+12>>2]==(b|0)){break d}}}}H[c>>2]=4;a=0;break a}if(!d&a>>>0<=65535){break b}}H[c>>2]=4;a=65535;break a}a=(f|0)==45?0-a|0:a}oa=e+16|0;return a&65535}function Jg(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-16|0;oa=i;if((b^-1)+1073741807>>>0>=c>>>0){j=Ca(a);a:{if(b>>>0<536870887){H[i+8>>2]=b<<1;H[i+12>>2]=b+c;c=ud(H[ad(i+12|0,i+8|0)>>2]);break a}c=1073741806}k=c+1|0;c=Sj(k);if(e){oc(c,j,e)}if(g){oc(c+(e<<2)|0,h,g)}d=d-(e+f|0)|0;if(d){h=e<<2;oc((h+c|0)+(g<<2)|0,(h+j|0)+(f<<2)|0,d)}if((b|0)!=1){Ba(j)}_b(a,c);Zb(a,k);b=a;a=d+(e+g|0)|0;yb(b,a);H[i+4>>2]=0;Cb(c+(a<<2)|0,i+4|0);oa=i+16|0;return}Xb();X()}function gg(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;h=-1;f=d&2147483647;i=f;g=c;a:{if(!c&(f|0)==2147418112?a|b:(f|0)==2147418112&(c|0)!=0|f>>>0>2147418112){break a}f=e&2147483647;j=f;if((f|0)==2147418112?0:f>>>0>2147418112){break a}if(!(a|g|(i|j|b))){return 0}g=d&e;if((g|0)>0?1:(g|0)>=0){if(!c&(d|0)==(e|0)?0:(d|0)<(e|0)){break a}return(a|c)!=0|(d^e|b)!=0}if(!c&(d|0)==(e|0)?a|b:(d|0)>(e|0)?1:(d|0)>=(e|0)?c:0){break a}h=(a|c)!=0|(d^e|b)!=0}return h}function id(a,b){a:{if(a){if(b>>>0<=127){break a}b:{if(!H[H[5347]>>2]){if((b&-128)==57216){break a}break b}if(b>>>0<=2047){F[a+1|0]=b&63|128;F[a|0]=b>>>6|192;return 2}if(!((b&-8192)!=57344?b>>>0>=55296:0)){F[a+2|0]=b&63|128;F[a|0]=b>>>12|224;F[a+1|0]=b>>>6&63|128;return 3}if(b-65536>>>0<=1048575){F[a+3|0]=b&63|128;F[a|0]=b>>>18|240;F[a+2|0]=b>>>6&63|128;F[a+1|0]=b>>>12&63|128;return 4}}H[6070]=25;a=-1}else{a=1}return a}F[a|0]=b;return 1}function Vl(a){a=a|0;a:{if(F[24632]&1){break a}if(!fb(24632)){break a}b:{if(F[24984]&1){break b}if(!fb(24984)){break b}a=24816;while(1){a=Ea(a)+12|0;if((a|0)!=24984){continue}break}eb(24984)}Ga(24816,1142);Ga(24828,1149);Ga(24840,1115);Ga(24852,1123);Ga(24864,1106);Ga(24876,1156);Ga(24888,1133);Ga(24900,1685);Ga(24912,1782);Ga(24924,2200);Ga(24936,2469);Ga(24948,1262);Ga(24960,1937);Ga(24972,1356);H[6157]=24816;eb(24632)}return H[6157]}function lo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=oa-32|0;oa=d;H[d+16>>2]=b;e=H[a+48>>2];H[d+20>>2]=c-((e|0)!=0);f=H[a+44>>2];H[d+28>>2]=e;H[d+24>>2]=f;e=-1;a:{b:{if(!Ye(ha(H[a+60>>2],d+16|0,2,d+12|0)|0)){e=H[d+12>>2];if((e|0)>0){break b}}H[a>>2]=H[a>>2]|e&48^16;break a}g=H[d+20>>2];if(g>>>0>=e>>>0){break a}f=H[a+44>>2];H[a+4>>2]=f;H[a+8>>2]=f+(e-g|0);if(H[a+48>>2]){H[a+4>>2]=f+1;F[(b+c|0)-1|0]=I[f|0]}e=c}oa=d+32|0;return e|0}function tn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,1,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;e=g>>>9&1;g=vb(f,e+13|0,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-((e<<3)+107&112)|0;oa=e;Ia(a+8|0,c);Ne(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Pi(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=I[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=H[6070];H[6070]=0;a=eg(a,e+12|0,d,Oa());d=pa;g=H[6070];g:{if(g){if(H[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}H[6070]=h;if(H[e+12>>2]==(b|0)){break d}}}}H[c>>2]=4;a=0;break a}if(!d){break b}}H[c>>2]=4;a=-1;break a}a=(f|0)==45?0-a|0:a}oa=e+16|0;return a}function nl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;while(1){a:{if((c|0)<=(f|0)){break a}d=H[a+16>>2];g=H[a+12>>2];b:{if(d>>>0>g>>>0){H[e+12>>2]=2147483647;H[e+8>>2]=d-g>>2;H[e+4>>2]=c-f;d=H[td(e+12|0,td(e+8|0,e+4|0))>>2];oc(b,H[a+12>>2],d);H[a+12>>2]=H[a+12>>2]+(d<<2);b=(d<<2)+b|0;break b}d=qa[H[H[a>>2]+40>>2]](a)|0;if((d|0)==-1){break a}H[b>>2]=d;d=1;b=b+4|0}f=d+f|0;continue}break}oa=e+16|0;return f|0}function nn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-208|0;oa=a;G[a+204>>1]=I[13275]|I[13276]<<8;H[a+200>>2]=I[13271]|I[13272]<<8|(I[13273]<<16|I[13274]<<24);f=Oa();H[a>>2]=e;h=vb(a+176|0,20,f,a+200|0,a);e=h+(a+176|0)|0;f=Nb(a+176|0,e,c);Ia(a+16|0,c);g=Ib(a+16|0);Fa(a+16|0);Ec(g,a+176|0,e,a+16|0);g=b;b=(a+16|0)+(h<<2)|0;b=Dc(g,a+16|0,(e|0)==(f|0)?b:((f-a<<2)+a|0)-688|0,b,c,d);oa=a+208|0;return b|0}function Cn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,1,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;g=vb(f,(g>>>9&1)+13|0,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-32|0;oa=e;Ia(a+8|0,c);Pe(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function rn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,0,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;g=vb(f,g>>>9&1|12,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-96|0;oa=e;Ia(a+8|0,c);Ne(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function An(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,0,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;g=vb(f,g>>>9&1|12,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-32|0;oa=e;Ia(a+8|0,c);Pe(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function vn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-96|0;oa=a;G[a+92>>1]=I[13275]|I[13276]<<8;H[a+88>>2]=I[13271]|I[13272]<<8|(I[13273]<<16|I[13274]<<24);f=Oa();H[a>>2]=e;h=vb(a- -64|0,20,f,a+88|0,a);e=h+(a- -64|0)|0;f=Nb(a- -64|0,e,c);Ia(a+16|0,c);g=Fb(a+16|0);Fa(a+16|0);Wc(g,a- -64|0,e,a+16|0);g=b;b=(a+16|0)+h|0;b=pc(g,a+16|0,(e|0)==(f|0)?b:((f-a|0)+a|0)-48|0,b,c,d);oa=a+96|0;return b|0}function un(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=oa-48|0;oa=f;H[f+40>>2]=b;a:{if(!(H[c+4>>2]&1)){c=qa[H[H[a>>2]+24>>2]](a,b,c,d,e)|0;break a}Ia(f+24|0,c);a=Dd(f+24|0);Fa(f+24|0);b:{if(e){gc(f+24|0,a);break b}fc(f+24|0,a)}H[f+16>>2]=Ob(f+24|0);while(1){H[f+8>>2]=Sc(f+24|0);if(zb(f+16|0,f+8|0)){Ci(f+40|0,H[H[f+16>>2]>>2]);od(f+16|0);continue}else{c=H[f+40>>2];va(f+24|0)}break}}oa=f+48|0;return c|0}function Dn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=oa-48|0;oa=f;H[f+40>>2]=b;a:{if(!(H[c+4>>2]&1)){c=qa[H[H[a>>2]+24>>2]](a,b,c,d,e)|0;break a}Ia(f+24|0,c);a=Gd(f+24|0);Fa(f+24|0);b:{if(e){gc(f+24|0,a);break b}fc(f+24|0,a)}H[f+16>>2]=Ob(f+24|0);while(1){H[f+8>>2]=Vc(f+24|0);if(zb(f+16|0,f+8|0)){Vf(f+40|0,F[H[f+16>>2]]);Wd(f+16|0);continue}else{c=H[f+40>>2];va(f+24|0)}break}}oa=f+48|0;return c|0}function pl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=oa-16|0;oa=e;while(1){a:{if((c|0)<=(f|0)){break a}d=H[a+28>>2];g=H[a+24>>2];if(d>>>0<=g>>>0){if(((i=a,j=Sb(F[b|0]),h=H[H[a>>2]+52>>2],qa[h](i|0,j|0)|0)|0)==-1){break a}f=f+1|0;b=b+1|0}else{H[e+12>>2]=d-g;H[e+8>>2]=c-f;d=H[td(e+12|0,e+8|0)>>2];Yb(H[a+24>>2],b,d);H[a+24>>2]=d+H[a+24>>2];f=f+d|0;b=b+d|0}continue}break}oa=e+16|0;return f|0}function tj(a,b){var c=0;c=(b|0)!=0;a:{b:{c:{if(!(a&3)|!b){break c}while(1){if(!I[a|0]){break b}b=b-1|0;c=(b|0)!=0;a=a+1|0;if(!(a&3)){break c}if(b){continue}break}}if(!c){break a}}d:{if(!I[a|0]|b>>>0<4){break d}while(1){c=H[a>>2];if((c^-1)&c-16843009&-2139062144){break d}a=a+4|0;b=b-4|0;if(b>>>0>3){continue}break}}if(!b){break a}while(1){if(!I[a|0]){return a}a=a+1|0;b=b-1|0;if(b){continue}break}}return 0}function dg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=oa-160|0;oa=e;Vb(e+16|0,0,144);H[e+92>>2]=-1;H[e+60>>2]=b;H[e+24>>2]=-1;H[e+20>>2]=b;kc(e+16|0,0,0);kj(e,e+16|0,d,1);d=H[e+8>>2];g=H[e+12>>2];h=H[e>>2];i=H[e+4>>2];if(c){j=c;f=b;b=H[e+20>>2]-H[e+24>>2]|0;k=b;c=b+H[e+136>>2]|0;b=H[e+140>>2]+(b>>31)|0;b=c>>>0>>0?b+1|0:b;H[j>>2]=!(b|c)?f:f+c|0}H[a>>2]=h;H[a+4>>2]=i;H[a+8>>2]=d;H[a+12>>2]=g;oa=e+160|0}function el(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;d=oa-16|0;oa=d;a:{b:{if(H[b+64>>2]){if(!(qa[H[H[b>>2]+24>>2]](b)|0)){break b}}Kc(a,-1,-1);break a}if(Ae(H[b+64>>2],H[c+8>>2],H[c+12>>2],0)){Kc(a,-1,-1);break a}f=H[c+4>>2];e=d;H[e+8>>2]=H[c>>2];H[e+12>>2]=f;f=H[e+12>>2];H[b+72>>2]=H[e+8>>2];H[b+76>>2]=f;b=H[c+12>>2];H[a+8>>2]=H[c+8>>2];H[a+12>>2]=b;b=H[c+4>>2];H[a>>2]=H[c>>2];H[a+4>>2]=b}oa=d+16|0}function Pd(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-16|0;oa=i;if((b^-1)-17>>>0>=c>>>0){j=Ca(a);a:{if(b>>>0<2147483623){H[i+8>>2]=b<<1;H[i+12>>2]=b+c;c=cd(H[ad(i+12|0,i+8|0)>>2]);break a}c=-18}k=c+1|0;c=Na(k);if(e){Yb(c,j,e)}if(g){Yb(c+e|0,h,g)}d=d-(e+f|0)|0;if(d){Yb((c+e|0)+g|0,(e+j|0)+f|0,d)}if((b|0)!=10){Ba(j)}_b(a,c);Zb(a,k);b=a;a=d+(e+g|0)|0;yb(b,a);F[i+7|0]=0;nb(a+c|0,i+7|0);oa=i+16|0;return}Xb();X()}function Ka(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=aj(b);e=oa-16|0;oa=e;f=a;a=Mf(a);a:{if(a>>>0>=d>>>0){g=Ca(f);c=g;a=d;if(a){b:{if(c-b>>2>>>0>>0){while(1){a=a-1|0;h=a<<2;H[h+c>>2]=H[b+h>>2];if(a){continue}break b}}if(!a){break b}while(1){H[c>>2]=H[b>>2];c=c+4|0;b=b+4|0;a=a-1|0;if(a){continue}break}}}H[e+12>>2]=0;Cb((d<<2)+g|0,e+12|0);Lc(f,d);break a}c=a;g=d-a|0;a=wa(f);Jg(f,c,g,a,0,a,d,b)}oa=e+16|0}function sn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,1,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;e=h>>>9&1;f=vb(g,e+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-((e<<3)+187&240)|0;oa=e;Ia(a+8|0,c);Ne(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function rl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;while(1){a:{if((c|0)<=(f|0)){break a}d=H[a+16>>2];g=H[a+12>>2];b:{if(d>>>0>g>>>0){H[e+12>>2]=2147483647;H[e+8>>2]=d-g;H[e+4>>2]=c-f;d=H[td(e+12|0,td(e+8|0,e+4|0))>>2];Yb(b,H[a+12>>2],d);Gf(a,d);break b}d=qa[H[H[a>>2]+40>>2]](a)|0;if((d|0)==-1){break a}F[b|0]=Zc(d);d=1}b=b+d|0;f=d+f|0;continue}break}oa=e+16|0;return f|0}function qn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,0,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;e=h>>>9&1;f=vb(g,e+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-((e<<3)+187&240)|0;oa=e;Ia(a+8|0,c);Ne(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Kf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=oa-32|0;oa=e;f=Bf(e+24|0,a);a:{if(!I[f|0]){break a}h=Oh(e+8|0,a);i=H[(H[H[a>>2]-12>>2]+a|0)+4>>2];g=H[H[a>>2]-12>>2]+a|0;d=g;b:{if(!qb(-1,H[d+76>>2])){d=H[d+76>>2];break b}j=d;d=pg(d,32);H[j+76>>2]=d}c=b+c|0;H[e+16>>2]=pc(H[h>>2],b,(i&176)==32?c:b,c,g,d<<24>>24);if(!De(e+16|0)){break a}ac(H[H[a>>2]-12>>2]+a|0,5)}ue(f);oa=e+32|0;return a}function ll(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=oa-16|0;oa=d;while(1){a:{if((c|0)<=(e|0)){break a}f=H[a+24>>2];g=H[a+28>>2];if(f>>>0>=g>>>0){if((qa[H[H[a>>2]+52>>2]](a,H[b>>2])|0)==-1){break a}e=e+1|0;b=b+4|0}else{H[d+12>>2]=g-f>>2;H[d+8>>2]=c-e;f=H[td(d+12|0,d+8|0)>>2];oc(H[a+24>>2],b,f);g=f<<2;H[a+24>>2]=g+H[a+24>>2];e=e+f|0;b=b+g|0}continue}break}oa=d+16|0;return e|0}function Ni(a,b,c){var d=0,e=0,f=O(0),g=0,h=O(0);e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;Oa();d=oa-16|0;oa=d;dg(d,a,e+12|0,0);f=ij(H[d>>2],H[d+4>>2],H[d+8>>2],H[d+12>>2]);oa=d+16|0;a=H[6070];if(!a){break c}if(H[e+12>>2]!=(b|0)){break b}h=f;if((a|0)!=68){break a}break b}H[c>>2]=4;break a}H[6070]=g;if(H[e+12>>2]==(b|0)){break a}}H[c>>2]=4;f=h}oa=e+16|0;return f}function Si(a,b,c,d){var e=0,f=0,g=0;e=oa-16|0;oa=e;a:{b:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;d=Yi(a,e+12|0,d,Oa());a=pa;f=H[6070];c:{if(f){if(H[e+12>>2]!=(b|0)){break c}if((f|0)==68){break b}break a}H[6070]=g;if(H[e+12>>2]==(b|0)){break a}}}H[c>>2]=4;d=0;a=0;break a}H[c>>2]=4;if((a|0)>0?1:(a|0)>=0?d>>>0>=1:0){d=-1;a=2147483647;break a}d=0;a=-2147483648}oa=e+16|0;pa=a;return d}function Wa(a){var b=0,c=0,d=0,e=0,f=0;b=oa-32|0;oa=b;H[b+12>>2]=0;H[b+8>>2]=153;c=H[b+12>>2];H[b>>2]=H[b+8>>2];H[b+4>>2]=c;d=H[b+4>>2];e=b+16|0;c=e;H[c+4>>2]=H[b>>2];H[c+8>>2]=d;H[c>>2]=a;c=oa-16|0;oa=c;d=a;if(H[d>>2]!=-1){f=c+8|0;Hc(f,e);Hc(c,f);e=c;while(1){if(H[d>>2]==1){continue}break}if(!H[d>>2]){H[d>>2]=1;qa[154](e);H[d>>2]=-1}}oa=c+16|0;oa=b+32|0;return H[a+4>>2]-1|0}function zn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,0,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;f=vb(g,(h>>>9&1)+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-48|0;oa=e;Ia(a+8|0,c);Pe(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Mi(a,b,c){var d=0,e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;Oa();d=oa-16|0;oa=d;dg(d,a,e+12|0,1);f=ig(H[d>>2],H[d+4>>2],H[d+8>>2],H[d+12>>2]);oa=d+16|0;a=H[6070];if(!a){break c}if(H[e+12>>2]!=(b|0)){break b}h=f;if((a|0)!=68){break a}break b}H[c>>2]=4;break a}H[6070]=g;if(H[e+12>>2]==(b|0)){break a}}H[c>>2]=4;f=h}oa=e+16|0;return f}function Bn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,1,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;f=vb(g,(h>>>9&1)+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-48|0;oa=e;Ia(a+8|0,c);Pe(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Kj(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:{d=Ca(c);c=wa(c);g=oa-16|0;oa=g;f=wa(a);if(f>>>0>=b>>>0){e=Ja(a);b:{if(c>>>0<=e-f>>>0){if(!c){break b}e=Ca(a);i=e+b|0;h=f-b|0;if(h){b=b+e|0;qf(b+c|0,b,h);d=b>>>0<=d>>>0?f+e>>>0>d>>>0?c+d|0:d:d}qf(i,d,c);b=a;a=c+f|0;Lc(b,a);F[g+15|0]=0;nb(a+e|0,g+15|0);break b}Pd(a,e,(c+f|0)-e|0,f,b,0,c,d)}oa=g+16|0;break a}me();X()}}function Oe(a,b,c){var d=0,e=0;if(c&2048){F[a|0]=43;a=a+1|0}if(c&1024){F[a|0]=35;a=a+1|0}d=c&260;if((d|0)!=260){F[a|0]=46;F[a+1|0]=42;a=a+2|0}c=c&16384;while(1){e=I[b|0];if(e){F[a|0]=e;a=a+1|0;b=b+1|0;continue}break}a:{b:{if((d|0)!=256){if((d|0)!=4){break b}b=c?70:102;break a}b=c?69:101;break a}b=c?65:97;if((d|0)==260){break a}b=c?71:103}F[a|0]=b;return(d|0)!=260}function sc(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;H[f+8>>2]=b;b=0;g=6;a:{b:{if(kb(a,f+8|0)){break b}g=4;h=bb(a);if(!dc(d,2048,h)){break b}b=zd(d,h);while(1){c:{ib(a);b=b-48|0;if(!Bb(a,f+8|0)|(e|0)<2){break c}g=bb(a);if(!dc(d,2048,g)){break a}e=e-1|0;b=zd(d,g)+N(b,10)|0;continue}break}g=2;if(!kb(a,f+8|0)){break a}}H[c>>2]=H[c>>2]|g}oa=f+16|0;return b}function rc(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;H[f+8>>2]=b;b=0;g=6;a:{b:{if(jb(a,f+8|0)){break b}g=4;h=ab(a);if(!cc(d,2048,h)){break b}b=yd(d,h);while(1){c:{hb(a);b=b-48|0;if(!Ab(a,f+8|0)|(e|0)<2){break c}g=ab(a);if(!cc(d,2048,g)){break a}e=e-1|0;b=yd(d,g)+N(b,10)|0;continue}break}g=2;if(!jb(a,f+8|0)){break a}}H[c>>2]=H[c>>2]|g}oa=f+16|0;return b}function lm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;while(1){a:{if((c|0)==(d|0)|e>>>0<=h>>>0){break a}g=1;f=oa-16|0;oa=f;H[f+12>>2]=H[a+8>>2];k=jc(f+8|0,f+12|0);i=Ve(0,c,d-c|0,b?b:24364);ic(k);oa=f+16|0;b:{switch(i+2|0){default:g=i;break;case 0:case 1:break a;case 2:break b}}h=h+1|0;j=g+j|0;c=c+g|0;continue}break}return j|0}function Dc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;i=oa-16|0;oa=i;a:{if(!a){break a}h=H[e+12>>2];g=c-b|0;if((g|0)>=1){g=g>>2;if((wd(a,b,g)|0)!=(g|0)){break a}}b=d-b>>2;b=(b|0)<(h|0)?h-b|0:0;if((b|0)>=1){f=Bi(i,b,f);h=wd(a,Ca(f),b);va(f);if((b|0)!=(h|0)){break a}}b=d-c|0;if((b|0)>=1){b=b>>2;if((wd(a,c,b)|0)!=(b|0)){break a}}Dh(e);j=a}oa=i+16|0;return j}function Af(a){var b=0,c=0,d=0;d=oa-16|0;oa=d;if(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]){c=a;b=d+8|0;H[b+4>>2]=a;F[b|0]=0;if(Sd(H[H[a>>2]-12>>2]+a|0)){if(H[(H[H[c>>2]-12>>2]+c|0)+72>>2]){Af(H[(H[H[c>>2]-12>>2]+c|0)+72>>2])}F[b|0]=1}a:{if(!I[b|0]){break a}if(($c(H[(H[H[a>>2]-12>>2]+a|0)+24>>2])|0)!=-1){break a}ac(H[H[a>>2]-12>>2]+a|0,1)}ue(b)}oa=d+16|0}function hf(a,b,c,d){F[a+53|0]=1;a:{if(H[a+4>>2]!=(c|0)){break a}F[a+52|0]=1;c=H[a+16>>2];b:{if(!c){H[a+36>>2]=1;H[a+24>>2]=d;H[a+16>>2]=b;if(H[a+48>>2]!=1){break a}if((d|0)==1){break b}break a}if((b|0)==(c|0)){c=H[a+24>>2];if((c|0)==2){H[a+24>>2]=d;c=d}if(H[a+48>>2]!=1){break a}if((c|0)==1){break b}break a}H[a+36>>2]=H[a+36>>2]+1}F[a+54|0]=1}}function xd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=oa-16|0;oa=e;f=H[Ad(a)>>2];d=H[c>>2]-H[a>>2]|0;a:{if(d>>>0<2147483647){d=d<<1;break a}d=-1}d=d?d:4;h=H[b>>2];i=H[a>>2];g=ke((f|0)==152?0:H[a>>2],d);if(g){if((f|0)!=152){Ud(a)}H[e+4>>2]=151;f=Ya(e+8|0,g,e+4|0);fi(a,f);_a(f);H[b>>2]=H[a>>2]+(h-i|0);H[c>>2]=H[a>>2]+(d&-4);oa=e+16|0;return}db();X()}function Bi(a,b,c){var d=0,e=0,f=0,g=0,h=0;h=oa-16|0;oa=h;f=oa-16|0;oa=f;d=a;a:{if(b>>>0<=1073741807){b:{if(b>>>0<=1){ub(d,b);g=d;break b}e=ud(b)+1|0;g=Sj(e);_b(d,g);Zb(d,e);yb(d,b)}e=g;d=b;if(d){if(d){while(1){H[e>>2]=c;e=e+4|0;d=d-1|0;if(d){continue}break}}}H[f+12>>2]=0;Cb((b<<2)+g|0,f+12|0);oa=f+16|0;break a}Xb();X()}oa=h+16|0;return a}function ph(a,b,c,d){var e=0,f=0;if((d|0)==1){f=b;e=H[a+8>>2]-H[a+4>>2]|0;b=b-e|0;c=c-((e>>31)+(f>>>0>>0)|0)|0}a:{if(K[a+20>>2]>K[a+28>>2]){qa[H[a+36>>2]](a,0,0)|0;if(!H[a+20>>2]){break a}}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;qa[H[a+40>>2]](a,b,c,d)|0;if((pa|0)<0){break a}H[a+4>>2]=0;H[a+8>>2]=0;H[a>>2]=H[a>>2]&-17;return 0}return-1}function ji(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=oa-16|0;oa=e;f=H[Ad(a)>>2];d=H[c>>2]-H[a>>2]|0;a:{if(d>>>0<2147483647){d=d<<1;break a}d=-1}d=d?d:1;h=H[b>>2];i=H[a>>2];g=ke((f|0)==152?0:H[a>>2],d);if(g){if((f|0)!=152){Ud(a)}H[e+4>>2]=151;f=Ya(e+8|0,g,e+4|0);fi(a,f);_a(f);H[b>>2]=H[a>>2]+(h-i|0);H[c>>2]=d+H[a>>2];oa=e+16|0;return}db();X()}function Qm(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;d=oa-16|0;oa=d;b=a;a:{if(!tb(f)){H[b+8>>2]=H[f+8>>2];a=H[f+4>>2];H[b>>2]=H[f>>2];H[b+4>>2]=a;break a}e=H[f>>2];b:{c:{c=H[f+4>>2];d:{if(c>>>0<=1){ub(a,c);break d}if(c>>>0>1073741807){break c}f=ud(c)+1|0;b=Sj(f);_b(a,b);Zb(a,f);yb(a,c)}oc(b,e,c+1|0);break b}Xb();X()}}oa=d+16|0}function cf(a,b){var c=0,d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;a:{b:{c:{c=wa(b)-1|0;if((c|0)<1){break c}while(1){if(!Db(F[Aa(b,d)|0])){break c}d=d+1|0;if((d|0)!=(c|0)){continue}break}d=c;break b}if((c|0)<(d|0)){break a}}while(1){if(!Db(F[Aa(b,c)|0])){break a}g=(c|0)>(d|0);f=c-1|0;c=f;if(g){continue}break}c=f}Kg(a,b,d,(c-d|0)+1|0);oa=e+16|0}function pc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;h=oa-16|0;oa=h;a:{if(!a){break a}g=H[e+12>>2];i=c-b|0;if((i|0)>=1){if((wd(a,b,i)|0)!=(i|0)){break a}}b=d-b|0;b=(b|0)<(g|0)?g-b|0:0;if((b|0)>=1){f=Nf(h,b,f);g=wd(a,Ca(f),b);va(f);if((b|0)!=(g|0)){break a}}b=d-c|0;if((b|0)>=1){if((wd(a,c,b)|0)!=(b|0)){break a}}Dh(e);j=a}oa=h+16|0;return j}function mf(a,b){var c=0,d=0,e=0;d=oa-16|0;oa=d;H[d+12>>2]=b;a:{b:{c:{d:{if(tb(a)){c=Rc(a)-1|0;e=H[a+4>>2];if((c|0)==(e|0)){break d}break b}e=1;c=1;b=I[a+11|0];if((b|0)!=1){break c}}Ig(a,c,1,c,c);b=e;if(tb(a)){break b}}c=a;ub(a,b+1|0);break a}c=H[a>>2];yb(a,e+1|0);b=e}a=(b<<2)+c|0;Cb(a,d+12|0);H[d+8>>2]=0;Cb(a+4|0,d+8|0);oa=d+16|0}function Od(a,b){var c=0,d=0,e=0;d=oa-16|0;oa=d;F[d+15|0]=b;a:{b:{c:{d:{if(tb(a)){c=Rc(a)-1|0;e=H[a+4>>2];if((c|0)==(e|0)){break d}break b}e=10;c=10;b=I[a+11|0];if((b|0)!=10){break c}}pf(a,c,1,c,c);b=e;if(tb(a)){break b}}c=a;ub(a,b+1|0);break a}c=H[a>>2];yb(a,e+1|0);b=e}a=b+c|0;nb(a,d+15|0);F[d+14|0]=0;nb(a+1|0,d+14|0);oa=d+16|0}function Ig(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;if(1073741807-b>>>0>=c>>>0){g=Ca(a);a:{if(b>>>0<536870887){H[f+8>>2]=b<<1;H[f+12>>2]=b+c;c=ud(H[ad(f+12|0,f+8|0)>>2]);break a}c=1073741806}h=c+1|0;c=Sj(h);if(e){oc(c,g,e)}d=d-e|0;if(d){e=e<<2;oc(e+c|0,e+g|0,d)}if((b|0)!=1){Ba(g)}_b(a,c);Zb(a,h);oa=f+16|0;return}Xb();X()}function yk(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(Mb(a,H[b+8>>2],e)){gf(b,c,d);return}a:{if(!Mb(a,H[b>>2],e)){break a}if(!(H[b+20>>2]!=(c|0)?H[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}H[b+32>>2]=1;return}H[b+20>>2]=c;H[b+32>>2]=d;H[b+40>>2]=H[b+40>>2]+1;if(!(H[b+36>>2]!=1|H[b+24>>2]!=2)){F[b+54|0]=1}H[b+44>>2]=4}}function oh(a,b,c){var d=0,e=0,f=0;f=b;d=I[c+74|0];F[c+74|0]=d-1|d;e=H[c+4>>2];d=H[c+8>>2]-e|0;if((d|0)<1){d=f}else{d=d>>>0>>0?d:f;Wb(a,e,d);H[c+4>>2]=d+H[c+4>>2];a=a+d|0;d=f-d|0}if(d){while(1){a:{if(!lg(c)){e=qa[H[c+32>>2]](c,a,d)|0;if(e+1>>>0>1){break a}}return f-d|0}a=a+e|0;d=d-e|0;if(d){continue}break}}return b}function Td(a,b){var c=0,d=0,e=0,f=0;d=oa-16|0;oa=d;c=a;a:{if(!tb(b)){H[c+8>>2]=H[b+8>>2];a=H[b+4>>2];H[c>>2]=H[b>>2];H[c+4>>2]=a;break a}f=H[b>>2];b:{c:{c=H[b+4>>2];d:{if(c>>>0<=10){b=a;ub(b,c);break d}if(c>>>0>4294967279){break c}e=cd(c)+1|0;b=Na(e);_b(a,b);Zb(a,e);yb(a,c)}Yb(b,f,c+1|0);break b}Xb();X()}}oa=d+16|0}function wb(a,b,c,d){var e=0,f=0;a:{if(!wa(a)|(c-b|0)<5){break a}Me(b,c);e=c-4|0;c=Ca(a);f=c+wa(a)|0;b:{while(1){c:{a=F[c|0];if(b>>>0>=e>>>0){break c}if(!(H[b>>2]!=F[c|0]?(a|0)<1|(a|0)>=127:1)){break b}c=(f-c|0)>1?c+1|0:c;b=b+4|0;continue}break}if((a|0)<1|(a|0)>=127|F[c|0]>>>0>H[e>>2]-1>>>0){break a}}H[d>>2]=4}}function Og(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=oa-16|0;oa=b;e=b+16|0;a:{while(1){f=$g(H[a+36>>2],H[a+40>>2],b+8|0,e,b+4|0);c=-1;d=H[b+4>>2]-(b+8|0)|0;if((d|0)!=(Ub(b+8|0,1,d,H[a+32>>2])|0)){break a}b:{switch(f-1|0){case 1:break a;case 0:continue;default:break b}}break}c=ze(H[a+32>>2])?-1:0}oa=b+16|0;return c|0}function pf(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;if(-17-b>>>0>=c>>>0){g=Ca(a);a:{if(b>>>0<2147483623){H[f+8>>2]=b<<1;H[f+12>>2]=b+c;c=cd(H[ad(f+12|0,f+8|0)>>2]);break a}c=-18}h=c+1|0;c=Na(h);if(e){Yb(c,g,e)}d=d-e|0;if(d){Yb(c+e|0,e+g|0,d)}if((b|0)!=10){Ba(g)}_b(a,c);Zb(a,h);oa=f+16|0;return}Xb();X()}function Qb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=oa-16|0;oa=d;g=a;h=a;a:{if(!b){b=0;break a}c=b>>31;e=c+b^c;c=Q(e);xb(d,e,0,0,0,c+81|0);e=0+H[d+8>>2]|0;c=(H[d+12>>2]^65536)+(16414-c<<16)|0;c=e>>>0>>0?c+1|0:c;f=b&-2147483648|c;c=H[d+4>>2];b=H[d>>2]}H[h>>2]=b;H[g+4>>2]=c;H[a+8>>2]=e;H[a+12>>2]=f;oa=d+16|0}function ue(a){var b=0;a:{b=H[a+4>>2];if(!H[(H[H[b>>2]-12>>2]+b|0)+24>>2]){break a}b=H[a+4>>2];if(!Sd(H[H[b>>2]-12>>2]+b|0)){break a}b=H[a+4>>2];if(!(H[(H[H[b>>2]-12>>2]+b|0)+4>>2]&8192)){break a}b=H[a+4>>2];if(($c(H[(H[H[b>>2]-12>>2]+b|0)+24>>2])|0)!=-1){break a}a=H[a+4>>2];ac(H[H[a>>2]-12>>2]+a|0,1)}}function nm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=oa-16|0;oa=f;H[e>>2]=c;a=Of(f+12|0,0,H[a+8>>2]);c=2;a:{if(a+1>>>0<2){break a}b=a-1|0;c=1;if(b>>>0>d-H[e>>2]>>>0){break a}c=f+12|0;while(1){if(b){a=I[c|0];d=H[e>>2];H[e>>2]=d+1;F[d|0]=a;b=b-1|0;c=c+1|0;continue}break}c=0}oa=f+16|0;return c|0}function ef(a){var b=0;b=1;a:{if((a|0)>=1024){b=8.98846567431158e307;if((a|0)<2047){a=a-1023|0;break a}b=Z;a=((a|0)<3069?a:3069)-2046|0;break a}if((a|0)>-1023){break a}b=2.2250738585072014e-308;if((a|0)>-2045){a=a+1022|0;break a}b=0;a=((a|0)>-3066?a:-3066)+2044|0}x(0,0);x(1,a+1023<<20);return b*+z()}function fn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=oa-32|0;oa=g;h=H[3367];H[g+24>>2]=H[3366];H[g+28>>2]=h;h=H[3365];H[g+16>>2]=H[3364];H[g+20>>2]=h;h=H[3363];H[g+8>>2]=H[3362];H[g+12>>2]=h;h=H[3361];H[g>>2]=H[3360];H[g+4>>2]=h;a=Bc(a,b,c,d,e,f,g,g+32|0);oa=g+32|0;return a|0}function be(a){var b=0,c=0,d=0,e=0,f=0;while(1){b=a;a=b+1|0;if(Yc(F[b|0])){continue}break}a:{b:{c:{c=F[b|0];switch(c-43|0){case 0:break b;case 2:break c;default:break a}}e=1}c=F[a|0];b=a;f=e}if(Rb(c)){while(1){d=(N(d,10)-F[b|0]|0)+48|0;a=F[b+1|0];b=b+1|0;if(Rb(a)){continue}break}}return f?d:0-d|0}function tc(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;H[e+12>>2]=b;H[e+8>>2]=d;g=jc(e,e+12|0);b=oa-16|0;oa=b;d=H[e+8>>2];H[b+12>>2]=d;H[b+8>>2]=d;f=-1;d=We(0,0,c,d);a:{if((d|0)<0){break a}h=a;d=d+1|0;a=cb(d);H[h>>2]=a;if(!a){break a}f=We(a,d,c,H[b+12>>2])}oa=b+16|0;ic(g);oa=e+16|0;return f}function nh(a){var b=0,c=0,d=0,e=0,f=0;b=H[a+40>>2];c=qa[b|0](a,0,0,I[a|0]&128?K[a+20>>2]>K[a+28>>2]?2:1:1)|0;b=pa;d=b;if((b|0)>0?1:(b|0)>=0){e=H[a+20>>2]-H[a+28>>2]|0;a=H[a+8>>2]-H[a+4>>2]|0;f=c-a|0;b=e+f|0;a=(d-((a>>31)+(c>>>0>>0)|0)|0)+(e>>31)|0;c=b;d=b>>>0>>0?a+1|0:a}pa=d;return c}function If(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;f=H[a+76>>2]>=0;d=H[a>>2]&1;if(!d){b=H[a+52>>2];if(b){H[b+56>>2]=H[a+56>>2]}c=H[a+56>>2];if(c){H[c+52>>2]=b}if(H[6068]==(a|0)){H[6068]=c}}b=ze(a);c=qa[H[a+12>>2]](a)|0;e=H[a+96>>2];if(e){Ba(e)}a:{if(!d){Ba(a);break a}if(!f){break a}}return b|c}function Hd(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=oa-16|0;oa=c;g=a;h=a;a:{if(!b){b=0;e=0;break a}d=b;b=Q(b);xb(c,d,0,0,0,b+81|0);d=0+H[c+8>>2]|0;b=(H[c+12>>2]^65536)+(16414-b<<16)|0;b=d>>>0>>0?b+1|0:b;f=d;d=b;b=H[c+4>>2];e=H[c>>2]}H[h>>2]=e;H[g+4>>2]=b;H[a+8>>2]=f;H[a+12>>2]=d;oa=c+16|0}function ah(a){var b=0,c=0,d=0;b=oa-16|0;oa=b;c=Hf(a);H[a+40>>2]=0;H[a+32>>2]=0;H[a+36>>2]=0;H[a>>2]=19176;Vb(a+52|0,0,47);rd(b+8|0,c);d=Nh(H[b+8>>2],Wa(24580));Fa(b+8|0);if(d){rd(b,c);H[a+68>>2]=Rd(b);Fa(b);F[a+98|0]=Jc(H[a+68>>2])}qa[H[H[a>>2]+12>>2]](a,0,4096)|0;oa=b+16|0;return a}function $m(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;c=oa-128|0;oa=c;H[c+12>>2]=c+116;qi(a+8|0,c+16|0,c+12|0,e,f,g);d=c+16|0;e=H[c+12>>2];a=oa-16|0;oa=a;H[a+8>>2]=b;while(1){if((d|0)!=(e|0)){Vf(a+8|0,F[d|0]);d=d+1|0;continue}break}oa=a+16|0;oa=c+128|0;return H[a+8>>2]}function yc(a){var b=0,c=0,d=0;b=a;a:{if(b&3){while(1){if(!I[b|0]){break a}b=b+1|0;if(b&3){continue}break}}while(1){c=b;b=b+4|0;d=H[c>>2];if(!((d^-1)&d-16843009&-2139062144)){continue}break}if(!(d&255)){return c-a|0}while(1){d=I[c+1|0];b=c+1|0;c=b;if(d){continue}break}}return b-a|0}function xf(a){var b=0,c=0,d=0,e=0,f=0,g=0;c=oa-16|0;oa=c;b=H[a+64>>2];if(b){H[c+4>>2]=395;b=Ya(c+8|0,b,c+4|0);e=qa[H[H[a>>2]+24>>2]](a)|0;f=If(Ud(b));H[a+64>>2]=0;qa[H[H[a>>2]+12>>2]](a,0,0)|0;g=b;d=H[b>>2];H[b>>2]=0;if(d){qa[H[Ad(g)>>2]](d)|0}a=e|f?0:a}else{a=0}oa=c+16|0;return a}function Xi(a,b,c){var d=0,e=0,f=0,g=0;f=oa-16|0;oa=f;e=th(b,c);if(e>>>0<=4294967279){a:{if(e>>>0<=10){ub(a,e);d=a;break a}g=cd(e)+1|0;d=Na(g);_b(a,d);Zb(a,g);yb(a,e)}while(1){if((b|0)!=(c|0)){nb(d,b);d=d+1|0;b=b+1|0;continue}break}F[f+15|0]=0;nb(d,f+15|0);oa=f+16|0;return}Xb();X()}function Wi(a,b,c){var d=0,e=0,f=0,g=0;f=oa-16|0;oa=f;e=rg(b,c);if(e>>>0<=1073741807){a:{if(e>>>0<=1){ub(a,e);d=a;break a}g=ud(e)+1|0;d=Sj(g);_b(a,d);Zb(a,g);yb(a,e)}while(1){if((b|0)!=(c|0)){Cb(d,b);d=d+4|0;b=b+4|0;continue}break}H[f+12>>2]=0;Cb(d,f+12|0);oa=f+16|0;return}Xb();X()}function pe(a,b){var c=0,d=0;c=-1;a:{if((a|0)==-1){break a}d=H[b+76>>2]>=0;b:{c:{c=H[b+4>>2];d:{if(!c){lg(b);c=H[b+4>>2];if(!c){break d}}if(H[b+44>>2]-8>>>0>>0){break c}}c=-1;if(d){break b}break a}c=c-1|0;H[b+4>>2]=c;F[c|0]=a;H[b>>2]=H[b>>2]&-17;c=a;if(!d){break a}}}return c}function Id(a,b,c){var d=0,e=0,f=0;a:{if(b>>>0<1){d=a;break a}while(1){d=Fq(a,b,10);e=pa;f=e;e=Eq(d,e,10,0);c=c-1|0;F[c|0]=a-e|48;e=b>>>0>9;a=d;b=f;if(e){continue}break}}if(d){while(1){c=c-1|0;a=(d>>>0)/10|0;F[c|0]=d-N(a,10)|48;b=d>>>0>9;d=a;if(b){continue}break}}return c}function $n(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=(e-d|0)+b|0;a:{while(1){if((d|0)!=(e|0)){a=-1;if((b|0)==(c|0)){break a}f=F[b|0];g=F[d|0];if((f|0)<(g|0)){break a}if((f|0)>(g|0)){return 1}else{d=d+1|0;b=b+1|0;continue}}break}a=(c|0)!=(h|0)}return a|0}function Jf(a){var b=0,c=0;a:{if(K[a+20>>2]<=K[a+28>>2]){break a}qa[H[a+36>>2]](a,0,0)|0;if(H[a+20>>2]){break a}return-1}b=H[a+4>>2];c=H[a+8>>2];if(b>>>0>>0){b=b-c|0;qa[H[a+40>>2]](a,b,b>>31,1)|0}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a+4>>2]=0;H[a+8>>2]=0;return 0}function vd(a,b){var c=0,d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;g=b;c=aj(b);d=oa-16|0;oa=d;a:{if(c>>>0<=1073741807){b:{if(c>>>0<=1){ub(a,c);b=a;break b}f=ud(c)+1|0;b=Sj(f);_b(a,b);Zb(a,f);yb(a,c)}oc(b,g,c);H[d+12>>2]=0;Cb((c<<2)+b|0,d+12|0);oa=d+16|0;break a}Xb();X()}oa=e+16|0}function Nf(a,b,c){var d=0,e=0,f=0,g=0,h=0;g=oa-16|0;oa=g;e=oa-16|0;oa=e;d=a;a:{if(b>>>0<=4294967279){b:{if(b>>>0<=10){ub(d,b);f=d;break b}h=cd(b)+1|0;f=Na(h);_b(d,f);Zb(d,h);yb(d,b)}Ng(f,b,c);F[e+15|0]=0;nb(b+f|0,e+15|0);oa=e+16|0;break a}Xb();X()}oa=g+16|0;return a}function Ok(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:{if(!I[a+44|0]){c=(c|0)>0?c:0;while(1){if((c|0)==(d|0)){break a}if(((f=a,g=Sb(F[b|0]),e=H[H[a>>2]+52>>2],qa[e](f|0,g|0)|0)|0)==-1){return d|0}else{b=b+1|0;d=d+1|0;continue}}}c=Ub(b,1,c,H[a+32>>2])}return c|0}function Ll(a){a=a|0;a:{if(F[24672]&1){break a}if(!fb(24672)){break a}b:{if(F[25832]&1){break b}if(!fb(25832)){break b}a=25808;while(1){a=bc(a)+12|0;if((a|0)!=25832){continue}break}eb(25832)}Ka(25808,18752);Ka(25820,18764);H[6167]=25808;eb(24672)}return H[6167]}function Nl(a){a=a|0;a:{if(F[24664]&1){break a}if(!fb(24664)){break a}b:{if(F[25800]&1){break b}if(!fb(25800)){break b}a=25776;while(1){a=Ea(a)+12|0;if((a|0)!=25800){continue}break}eb(25800)}Ga(25776,2610);Ga(25788,2607);H[6165]=25776;eb(24664)}return H[6165]}function Bk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(Mb(a,H[b+8>>2],0)){kf(b,c,d);return}e=H[a+12>>2];f=a+16|0;Eg(f,b,c,d);a:{if((e|0)<2){break a}e=(e<<3)+f|0;a=a+24|0;while(1){Eg(a,b,c,d);if(I[b+54|0]){break a}a=a+8|0;if(e>>>0>a>>>0){continue}break}}}function Yn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:{while(1){if((d|0)!=(e|0)){a=-1;if((b|0)==(c|0)){break a}f=H[b>>2];g=H[d>>2];if((f|0)<(g|0)){break a}if((f|0)>(g|0)){return 1}else{d=d+4|0;b=b+4|0;continue}}break}a=(b|0)!=(c|0)}return a|0}function rj(a,b){var c=0,d=0,e=0;A(+a);c=v(1)|0;d=v(0)|0;e=c;c=c>>>20&2047;if((c|0)!=2047){if(!c){c=b;if(a==0){b=0}else{a=rj(a*0x10000000000000000,b);b=H[b>>2]+-64|0}H[c>>2]=b;return a}H[b>>2]=c-1022;x(0,d|0);x(1,e&-2146435073|1071644672);a=+z()}return a}function lg(a){var b=0,c=0;b=I[a+74|0];F[a+74|0]=b-1|b;if(K[a+20>>2]>K[a+28>>2]){qa[H[a+36>>2]](a,0,0)|0}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;b=H[a>>2];if(b&4){H[a>>2]=b|32;return-1}c=H[a+44>>2]+H[a+48>>2]|0;H[a+8>>2]=c;H[a+4>>2]=c;return b<<27>>31}function Bj(a,b){var c=0,d=0;d=Xe(a+108|0);H[a>>2]=19796;H[d>>2]=19816;c=H[4957];H[a>>2]=c;H[H[c-12>>2]+a>>2]=H[4958];H[a+4>>2]=0;c=a+8|0;pd(H[H[a>>2]-12>>2]+a|0,c);H[a>>2]=19796;H[d>>2]=19816;if(!bh(ah(c),b,8)){ac(H[H[a>>2]-12>>2]+a|0,4)}return a}function Uc(a,b,c,d){var e=0;if(d&2048){F[a|0]=43;a=a+1|0}if(d&512){F[a|0]=35;a=a+1|0}while(1){e=I[b|0];if(e){F[a|0]=e;a=a+1|0;b=b+1|0;continue}break}e=d&74;b=111;a:{if((e|0)==64){break a}b=d&16384?88:120;if((e|0)==8){break a}b=c?100:117}F[a|0]=b}function jg(a){a=a|0;var b=0,c=0,d=0;H[a>>2]=7888;c=a;b=H[a+40>>2];while(1){if(b){b=b-1|0;d=b<<2;qa[H[H[c+32>>2]+d>>2]](0,c,H[d+H[c+36>>2]>>2]);continue}break}Fa(a+28|0);Ba(H[a+32>>2]);Ba(H[a+36>>2]);Ba(H[a+48>>2]);Ba(H[a+60>>2]);return a|0}function wg(a){a=a|0;var b=0;H[a>>2]=7640;b=H[a+24>>2];if(b){Ba(Va(b))}b=H[a+28>>2];if(b){Ba(Va(b))}b=H[a+32>>2];if(b){Ba(Va(b))}b=H[a+36>>2];if(b){Ba(Va(b))}b=H[a+40>>2];if(b){Ba(Va(b))}b=H[a+44>>2];if(b){Ba(Va(b))}va(a+48|0);return a|0}function il(a,b){a=a|0;b=b|0;var c=0;a:{if(!H[a+64>>2]|K[a+8>>2]>=K[a+12>>2]){break a}if(qb(b,-1)){Gf(a,-1);return re(b)|0}if(!(I[a+88|0]&16)){if(!qb(Zc(b),F[H[a+12>>2]-1|0])){break a}}Gf(a,-1);c=Zc(b);F[H[a+12>>2]]=c;return b|0}return-1}function Cf(a,b){var c=0,d=0,e=0;c=oa-32|0;oa=c;F[a|0]=0;e=Sd(H[H[b>>2]-12>>2]+b|0);d=H[H[b>>2]-12>>2]+b|0;a:{if(e){if(H[d+72>>2]){sd(H[(H[H[b>>2]-12>>2]+b|0)+72>>2])}F[a|0]=Sd(H[H[b>>2]-12>>2]+b|0);break a}ac(d,4)}oa=c+32|0;return a}function dk(a,b,c,d){var e=0,f=0;e=oa-16|0;oa=e;a=Ea(a);if((d|0)>0){b=b+48|0;while(1){ck(a,b);f=f+1|0;if((f|0)!=(d|0)){continue}break}}if((c|0)>0){while(1){b=xa(e,3239);ck(a,b);va(b);b=(c|0)>1;c=c-1|0;if(b){continue}break}}oa=e+16|0}function Nb(a,b,c){c=H[c+4>>2]&176;if((c|0)==32){return b}a:{if((c|0)!=16){break a}b:{c:{c=I[a|0];switch(c-43|0){case 0:case 2:break c;default:break b}}return a+1|0}if((c|0)!=48|(b-a|0)<2|(I[a+1|0]|32)!=120){break a}a=a+2|0}return a}function Vf(a,b){var c=0,d=0,e=0,f=0,g=0;a:{c=H[a>>2];if(!c){break a}d=H[c+24>>2];b:{if((d|0)==H[c+28>>2]){b=(f=c,g=Sb(b),e=H[H[c>>2]+52>>2],qa[e](f|0,g|0)|0);break b}H[c+24>>2]=d+1;F[d|0]=b;b=Sb(b)}if(!qb(b,-1)){break a}H[a>>2]=0}}function Lk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a:{if(!I[a+44|0]){c=(c|0)>0?c:0;while(1){if((c|0)==(d|0)){break a}if((qa[H[H[a>>2]+52>>2]](a,H[b>>2])|0)==-1){return d|0}else{b=b+4|0;d=d+1|0;continue}}}c=Ub(b,4,c,H[a+32>>2])}return c|0}function af(a){var b=0,c=0,d=0,e=0;b=32;a:{c=H[a+200>>2]+1|0;d=a+160|0;e=wa(d);if((c|0)>=(e|0)){break a}while(1){b=F[Aa(d,c)|0];if(Db(b)){c=c+1|0;if((e|0)!=(c|0)){continue}break a}break}return b}return I[a+212|0]?(b|0)==9?32:b:b}function fb(a){var b=0,c=0,d=0;c=oa-16|0;oa=c;a=Gg(c,a);d=oa-16|0;oa=d;if(!I[H[Hc(d+8|0,H[a+4>>2])>>2]]){a:{b:{a=H[a+8>>2];b=I[a|0];if((b|0)!=1){if(b&2){break b}F[a|0]=2;a=1}else{a=0}break a}X()}b=a}oa=d+16|0;oa=c+16|0;return b}function Aq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;f=pg(H[H[a>>2]-12>>2]+a|0,10);b=oa-16|0;oa=b;c=Bf(b+8|0,a);a:{if(!I[c|0]){break a}d=a;e=Oh(b,a);Vf(e,f);if(!De(e)){break a}ac(H[H[d>>2]-12>>2]+d|0,1)}ue(c);oa=b+16|0;sd(a);return a|0}function Lg(a,b,c){var d=0,e=0,f=0;f=oa-16|0;oa=f;d=Ja(a);e=wa(a);a:{if(d-e>>>0>=c>>>0){if(!c){break a}d=Ca(a);Yb(d+e|0,b,c);b=c+e|0;Lc(a,b);F[f+15|0]=0;nb(b+d|0,f+15|0);break a}Pd(a,d,(c+e|0)-d|0,e,e,0,c,b)}oa=f+16|0;return a}function tg(a,b){var c=0,d=0;c=oa-32|0;oa=c;H[c+28>>2]=b;b=Uf(c+24|0);H[c+8>>2]=ak(Ed(a),Xc(a),c+28|0);H[b>>2]=H[ge(c+16|0,c+8|0)>>2];H[c+16>>2]=Xc(a);d=-1;if(!Bg(b,c+16|0)){H[c+16>>2]=Ed(a);d=$j(b,c+16|0)}oa=c+32|0;return d}function Ej(a,b){var c=0,d=0,e=0;d=oa-16|0;oa=d;H[a+4>>2]=0;c=-1;if(I[Cf(d+8|0,a)|0]){e=6;c=$e(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]);if(!qb(c,-1)){H[a+4>>2]=1;e=0}ac(H[H[a>>2]-12>>2]+a|0,e)}oa=d+16|0;if((c|0)!=-1){F[b|0]=Zc(c)}}function Mg(a,b,c){var d=0,e=0,f=0;d=oa-16|0;oa=d;if(c>>>0<=4294967279){a:{if(c>>>0<=10){ub(a,c);e=a;break a}f=cd(c)+1|0;e=Na(f);_b(a,e);Zb(a,f);yb(a,c)}Yb(e,b,c);F[d+15|0]=0;nb(c+e|0,d+15|0);oa=d+16|0;return}Xb();X()}function fe(a){var b=0,c=0;b=I[a+192|0];a:{if(!I[a+246|0]){c=b;break a}c=123;b:{c:{switch(b-91|0){case 2:c=125;break b;case 0:break b;default:break c}}c=b}F[a+246|0]=0}b=c<<24>>24;if(I[a+221|0]){Ld(a)}mc(a+172|0,1,b)}function Eq(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=c>>>16|0;f=a>>>16|0;j=N(e,f);g=c&65535;h=a&65535;i=N(g,h);f=(i>>>16|0)+N(f,g)|0;e=(f&65535)+N(e,h)|0;pa=(N(b,c)+j|0)+N(a,d)+(f>>>16)+(e>>>16)|0;return i&65535|e<<16}function Rh(a){a=a|0;var b=0,c=0;H[a>>2]=13480;b=a+16|0;while(1){if(Pa(b)>>>0>c>>>0){if(H[lc(b,c)>>2]){Ee(H[lc(b,c)>>2])}c=c+1|0;continue}break}va(a+192|0);Ph(b);if(H[b>>2]){Th(b);wh(ed(b),H[b>>2],dd(b))}return a|0}function sd(a){var b=0,c=0;b=oa-16|0;oa=b;if(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]){c=Bf(b+8|0,a);a:{if(!I[c|0]){break a}if(($c(H[(H[H[a>>2]-12>>2]+a|0)+24>>2])|0)!=-1){break a}ac(H[H[a>>2]-12>>2]+a|0,1)}ue(c)}oa=b+16|0}function kf(a,b,c){var d=0;d=H[a+16>>2];if(!d){H[a+36>>2]=1;H[a+24>>2]=c;H[a+16>>2]=b;return}a:{if((b|0)==(d|0)){if(H[a+24>>2]!=2){break a}H[a+24>>2]=c;return}F[a+54|0]=1;H[a+24>>2]=2;H[a+36>>2]=H[a+36>>2]+1}}function ak(a,b,c){var d=0;d=oa-16|0;oa=d;H[d>>2]=b;H[d+8>>2]=a;a:{if(!zb(d+8|0,d)){break a}while(1){if(H[H[d+8>>2]>>2]==H[c>>2]){break a}od(d+8|0);if(zb(d+8|0,d)){continue}break}}oa=d+16|0;return H[d+8>>2]}function ze(a){var b=0;if(a){if(H[a+76>>2]<=-1){return Jf(a)}return Jf(a)}if(H[5398]){b=ze(H[5398])}a=H[6068];if(a){while(1){if(K[a+20>>2]>K[a+28>>2]){b=Jf(a)|b}a=H[a+56>>2];if(a){continue}break}}return b}function kc(a,b,c){var d=0,e=0,f=0,g=0;H[a+112>>2]=b;H[a+116>>2]=c;d=H[a+8>>2];g=H[a+4>>2];e=d-g|0;f=e>>31;H[a+120>>2]=e;H[a+124>>2]=f;H[a+104>>2]=b|c?((c|0)<(f|0)?1:(c|0)<=(f|0)?b>>>0>>0:0)?b+g|0:d:d}function Jb(a,b,c,d,e){var f=0;f=oa-256|0;oa=f;if(!(e&73728|(c|0)<=(d|0))){c=c-d|0;d=c>>>0<256;Vb(f,b&255,d?c:256);if(!d){while(1){sb(a,f,256);c=c-256|0;if(c>>>0>255){continue}break}}sb(a,f,c)}oa=f+256|0}function Ga(a,b){var c=0,d=0,e=0,f=0;c=yc(b);e=oa-16|0;oa=e;d=Ja(a);a:{if(d>>>0>=c>>>0){d=Ca(a);qf(d,b,c);F[e+15|0]=0;nb(c+d|0,e+15|0);Lc(a,c);break a}f=a;a=wa(a);Pd(f,d,c-d|0,a,0,a,c,b)}oa=e+16|0}function Zf(a){var b=0,c=0,d=0;ui(a);if(H[a>>2]){c=a;b=H[a+4>>2];d=H[a>>2];if((b|0)!=(d|0)){while(1){b=b-12|0;Hg(gb(c),b);if((b|0)!=(d|0)){continue}break}}H[c+4>>2]=d;gb(a);c=H[a>>2];qd(a);Ba(c)}}function Ze(a){var b=0;if(H[a+76>>2]<0){b=H[a+4>>2];if(b>>>0>2]){H[a+4>>2]=b+1;return I[b|0]}return kg(a)}b=H[a+4>>2];a:{if(b>>>0>2]){H[a+4>>2]=b+1;a=I[b|0];break a}a=kg(a)}return a}function mc(a,b,c){var d=0,e=0,f=0,g=0;f=oa-16|0;oa=f;if(b){e=Ja(a);d=wa(a);g=d+b|0;if(e-d>>>0>>0){pf(a,e,g-e|0,d,d)}e=d;d=Ca(a);Ng(e+d|0,b,c);Lc(a,g);F[f+15|0]=0;nb(d+g|0,f+15|0)}oa=f+16|0}function Ci(a,b){var c=0,d=0;a:{c=H[a>>2];if(!c){break a}d=H[c+24>>2];b:{if((d|0)==H[c+28>>2]){b=qa[H[H[c>>2]+52>>2]](c,b)|0;break b}H[c+24>>2]=d+4;H[d>>2]=b}if(!qb(b,-1)){break a}H[a>>2]=0}}function hj(a,b,c,d){a:{if(!a){break a}b:{switch(b+2|0){case 0:F[a|0]=c;return;case 1:G[a>>1]=c;return;case 2:case 3:H[a>>2]=c;return;case 5:break b;default:break a}}H[a>>2]=c;H[a+4>>2]=d}}function qi(a,b,c,d,e,f){var g=0;g=oa-16|0;oa=g;F[g+15|0]=0;F[g+14|0]=f;F[g+13|0]=e;F[g+12|0]=37;if(f){pi(g+13|0,g+14|0)}H[c>>2]=(ea(b|0,oi(b,H[c>>2])|0,g+12|0,d|0,H[a>>2])|0)+b;oa=g+16|0}function Fe(a){var b=0,c=0,d=0;b=na(8)|0;H[b>>2]=20580;H[b>>2]=20624;c=yc(a);d=Na(c+13|0);H[d+8>>2]=0;H[d+4>>2]=c;H[d>>2]=c;H[b+4>>2]=Wb(d+12|0,a,c+1|0);H[b>>2]=20672;ia(b|0,20704,4);X()}function qe(a){a=a|0;var b=0;H[a>>2]=19176;xf(a);a:{if(!I[a+96|0]){break a}b=H[a+32>>2];if(!b){break a}Ba(b)}b:{if(!I[a+97|0]){break b}b=H[a+56>>2];if(!b){break b}Ba(b)}xe(a);return a|0}function _d(a,b){var c=0,d=0;c=I[a|0];d=I[b|0];a:{if(!c|(d|0)!=(c|0)){break a}while(1){d=I[b+1|0];c=I[a+1|0];if(!c){break a}b=b+1|0;a=a+1|0;if((c|0)==(d|0)){continue}break}}return c-d|0}function Uh(a){var b=0,c=0,d=0;c=oa-16|0;oa=c;b=sg(c,26176,a);a=H[b+4>>2];d=H[b+8>>2];while(1){if((a|0)==(d|0)){Be(b);oa=c+16|0}else{yh(ed(26176),a);a=a+4|0;H[b+4>>2]=a;continue}break}}function md(a){var b=0;a:{b=vj(a);if(b){break a}a=a-36|0;if((a&255)>>>0>=61){break a}b=a&31;return((a&63)>>>0>=32?402653184>>>b|0:((1<>>b)&1}return(b|0)!=0}function fg(a,b,c,d,e,f,g,h,i){var j=0;j=oa-16|0;oa=j;Lb(j,b,c,d,e,f,g,h,i^-2147483648);b=H[j+4>>2];H[a>>2]=H[j>>2];H[a+4>>2]=b;b=H[j+12>>2];H[a+8>>2]=H[j+8>>2];H[a+12>>2]=b;oa=j+16|0}function bo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=H[a+84>>2];d=c+256|0;f=tj(e,d);d=f?f-e|0:d;c=c>>>0>d>>>0?d:c;Wb(b,e,c);b=e+d|0;H[a+84>>2]=b;H[a+8>>2]=b;H[a+4>>2]=c+e;return c|0}function te(a){var b=0,c=0,d=0;b=oa-16|0;oa=b;H[a+4>>2]=0;c=-1;if(I[Cf(b+8|0,a)|0]){c=_f(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]);d=qb(c,-1);ac(H[H[a>>2]-12>>2]+a|0,d?2:0)}oa=b+16|0;return c}function mm(a){a=a|0;var b=0,c=0,d=0;b=oa-16|0;oa=b;H[b+12>>2]=H[a+8>>2];d=jc(b+8|0,b+12|0);c=oa-16|0;oa=c;oa=c+16|0;ic(d);oa=b+16|0;a=H[a+8>>2];if(!a){return 1}return(Hh(a)|0)==1|0}function Xj(a,b){var c=0,d=0;c=oa-16|0;oa=c;H[c+12>>2]=b;d=b;b=Wj(a);if(d>>>0<=b>>>0){a=Gc(a);if(a>>>0>>1>>>0){H[c+8>>2]=a<<1;b=H[ad(c+8|0,c+12|0)>>2]}oa=c+16|0;return b}$d();X()}function qc(a,b){var c=0,d=0;c=oa-16|0;oa=c;if(tb(a)){d=H[a>>2];Rc(a);Ba(d)}H[a+8>>2]=H[b+8>>2];d=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=d;ub(b,0);H[c+12>>2]=0;Cb(b,c+12|0);oa=c+16|0}function Ua(a,b){var c=0,d=0;c=oa-16|0;oa=c;if(tb(a)){d=H[a>>2];Rc(a);Ba(d)}H[a+8>>2]=H[b+8>>2];d=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=d;ub(b,0);F[c+15|0]=0;nb(b,c+15|0);oa=c+16|0}function Jj(a){var b=0,c=0,d=0;a=a+172|0;b=wa(a);a:{if((b|0)<2){break a}c=F[Aa(a,b-2|0)|0];if((I[Aa(a,b-1|0)|0]|32)!=101){break a}d=1;if((c|0)==46){break a}d=c-48>>>0<10}return d}function mn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=624576549;H[g+12>>2]=1394948685;a=Cc(a,b,c,d,e,f,g+8|0,g+16|0);oa=g+16|0;return a|0}function _c(a){var b=0,c=0;b=H[5436];c=a+3&-4;a=b+c|0;a:{if(a>>>0<=b>>>0?c:0){break a}if(a>>>0>ra()<<16>>>0){if(!(la(a|0)|0)){break a}}H[5436]=a;return b}H[6070]=48;return-1}function Gm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=H[b>>2];if(a>>>0<=127){a=H[H[2516]+(H[b>>2]<<2)>>2]}H[d>>2]=a;b=b+4|0;continue}break}return c|0}function Em(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=H[b>>2];if(a>>>0<=127){a=H[H[2904]+(H[b>>2]<<2)>>2]}H[d>>2]=a;b=b+4|0;continue}break}return c|0}function Im(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a:{while(1){if((c|0)==(d|0)){break a}if(!(!(J[H[2322]+(H[c>>2]<<1)>>1]&b)|K[c>>2]>127)){c=c+4|0;continue}break}d=c}return d|0}function kn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Fb(g);Fa(g);yi(a,f+24|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function jn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Fb(g);Fa(g);wi(a,f+16|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function dn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Ib(g);Fa(g);ti(a,f+24|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function cn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Ib(g);Fa(g);si(a,f+16|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function Jm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){a:{if((c|0)!=(d|0)){if(!(J[H[2322]+(H[c>>2]<<1)>>1]&b)|K[c>>2]>127){break a}}else{c=d}return c|0}c=c+4|0;continue}}function ym(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=F[b|0];if((a|0)>=0){a=H[H[2516]+(F[b|0]<<2)>>2]}F[d|0]=a;b=b+1|0;continue}break}return c|0}function wm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=F[b|0];if((a|0)>=0){a=H[H[2904]+(F[b|0]<<2)>>2]}F[d|0]=a;b=b+1|0;continue}break}return c|0}function Ld(a){var b=0,c=0;F[a+221|0]=0;F[a+224|0]=1;F[a+238|0]=I[a+236|0];b=a+172|0;bf(a+148|0,b);c=a;if(I[a+237|0]){F[a+237|0]=0;a=1}else{a=0}F[c+236|0]=a;Ga(b,7628)}function Xg(a,b,c){var d=0,e=0;d=oa-16|0;oa=d;e=Hf(a);H[a+32>>2]=b;H[a>>2]=20372;rd(d+8|0,e);b=Rd(d+8|0);Fa(d+8|0);H[a+40>>2]=c;H[a+36>>2]=b;F[a+44|0]=Jc(b);oa=d+16|0}function Wg(a,b,c){var d=0,e=0;d=oa-16|0;oa=d;e=hh(a);H[a+32>>2]=b;H[a>>2]=20476;rd(d+8|0,e);b=sf(d+8|0);Fa(d+8|0);H[a+40>>2]=c;H[a+36>>2]=b;F[a+44|0]=Jc(b);oa=d+16|0}function Eg(a,b,c,d){var e=0,f=0,g=0;f=H[a+4>>2];e=0;a:{if(!c){break a}g=f>>8;e=g;if(!(f&1)){break a}e=jf(H[c>>2],g)}a=H[a>>2];qa[H[H[a>>2]+28>>2]](a,b,c+e|0,f&2?d:2)}function ko(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=oa-16|0;oa=e;a=Ye(ja(H[a+60>>2],b|0,c|0,d&255,e+8|0)|0);oa=e+16|0;pa=a?-1:H[e+12>>2];return(a?-1:H[e+8>>2])|0}function Km(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){G[d>>1]=K[b>>2]<=127?J[H[2322]+(H[b>>2]<<1)>>1]:0;d=d+2|0;b=b+4|0;continue}break}return c|0}function hn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-16|0;oa=a;H[a+8>>2]=b;Ia(a,d);b=Fb(a);Fa(a);vi(f+20|0,a+8|0,c,e,b);oa=a+16|0;return H[a+8>>2]}function bn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-16|0;oa=a;H[a+8>>2]=b;Ia(a,d);b=Ib(a);Fa(a);ri(f+20|0,a+8|0,c,e,b);oa=a+16|0;return H[a+8>>2]}function xj(a,b){var c=0,d=0;c=oa-16|0;oa=c;a:{if(tb(a)){d=H[a>>2];F[c+15|0]=0;nb(b+d|0,c+15|0);yb(a,b);break a}F[c+14|0]=0;nb(a+b|0,c+14|0);ub(a,b)}oa=c+16|0}function Wn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=0;while(1){if((b|0)!=(c|0)){a=H[b>>2]+(a<<4)|0;d=a&-268435456;a=(d|d>>>24)^a;b=b+4|0;continue}break}return a|0}function en(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=a;a=qa[H[H[a+8>>2]+20>>2]](a+8|0)|0;return Bc(g,b,c,d,e,f,Ca(a),Ca(a)+(wa(a)<<2)|0)|0}function Zn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=0;while(1){if((b|0)!=(c|0)){a=F[b|0]+(a<<4)|0;d=a&-268435456;a=(d|d>>>24)^a;b=b+1|0;continue}break}return a|0}function Kg(a,b,c,d){var e=0;e=oa-16|0;oa=e;H[e+12>>2]=d;d=wa(b);if(d>>>0>>0){me();X()}b=Ca(b);H[e+4>>2]=d-c;Mg(a,b+c|0,H[zc(e+12|0,e+4|0)>>2]);oa=e+16|0}function Bf(a,b){H[a+4>>2]=b;F[a|0]=0;if(Sd(H[H[b>>2]-12>>2]+b|0)){if(H[(H[H[b>>2]-12>>2]+b|0)+72>>2]){sd(H[(H[H[b>>2]-12>>2]+b|0)+72>>2])}F[a|0]=1}return a}function Yf(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;Ia(f+8|0,b);Ec(Ib(f+8|0),13232,13264,c);b=Dd(f+8|0);H[d>>2]=ec(b);H[e>>2]=Hb(b);Gb(a,b);Fa(f+8|0);oa=f+16|0}function Ub(a,b,c,d){var e=0,f=0;e=N(b,c);f=e;a:{if(H[d+76>>2]<=-1){a=df(a,e,d);break a}a=df(a,e,d)}if((f|0)==(a|0)){return b?c:0}return(a>>>0)/(b>>>0)|0}function qj(a){var b=0,c=0,d=0;if(Rb(F[H[a>>2]])){while(1){b=H[a>>2];d=F[b|0];H[a>>2]=b+1;c=(N(c,10)+d|0)-48|0;if(Rb(F[b+1|0])){continue}break}}return c}function ln(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=a;a=qa[H[H[a+8>>2]+20>>2]](a+8|0)|0;return Cc(g,b,c,d,e,f,Ca(a),Ca(a)+wa(a)|0)|0}function bg(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;Ia(f+8|0,b);Wc(Fb(f+8|0),13232,13264,c);b=Gd(f+8|0);F[d|0]=ec(b);F[e|0]=Hb(b);Gb(a,b);Fa(f+8|0);oa=f+16|0}function Bm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;while(1){if((b|0)!=(c|0)){a=H[b>>2];F[e|0]=a>>>0<128?a:d;e=e+1|0;b=b+4|0;continue}break}return c|0}function pd(a,b){H[a+20>>2]=0;H[a+24>>2]=b;H[a+12>>2]=0;H[a+4>>2]=4098;H[a+8>>2]=6;H[a+16>>2]=!b;Vb(a+32|0,0,40);Rf(a+28|0);H[a+72>>2]=0;H[a+76>>2]=-1}function tm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;while(1){if((b|0)!=(c|0)){a=F[b|0];F[e|0]=(a|0)>-1?a:d;e=e+1|0;b=b+1|0;continue}break}return c|0}function wj(a){var b=0,c=0;b=oa-16|0;oa=b;a:{if(tb(a)){c=H[a>>2];F[b+15|0]=0;nb(c,b+15|0);yb(a,0);break a}F[b+14|0]=0;nb(a,b+14|0);ub(a,0)}oa=b+16|0}function wk(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(Mb(a,H[b+8>>2],f)){hf(b,c,d,e);return}a=H[a+8>>2];qa[H[H[a>>2]+20>>2]](a,b,c,d,e,f)}function kg(a){var b=0,c=0;b=oa-16|0;oa=b;c=-1;a:{if(lg(a)){break a}if((qa[H[a+32>>2]](a,b+15|0,1)|0)!=1){break a}c=I[b+15|0]}oa=b+16|0;return c}function de(a,b){var c=0,d=0;a:{c=H[a+248>>2];if(c){d=a+248|0}else{if(!H[a+252>>2]){break a}Fc(a);c=H[a+252>>2];d=a+252|0}Jd(a,c,b);H[d>>2]=0}}function eo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=H[a+20>>2];d=H[a+16>>2]-e|0;d=c>>>0>>0?c:d;Wb(e,b,d);H[a+20>>2]=d+H[a+20>>2];return c|0}function rm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=oa-16|0;oa=a;H[a+12>>2]=e;H[a+8>>2]=d-c;b=zc(a+12|0,a+8|0);oa=a+16|0;return H[b>>2]}function Qj(a,b,c,d){var e=0;e=oa-16|0;oa=e;d=sg(e,a,d);gb(a);a=c-b|0;if((a|0)>=1){Wb(H[d+4>>2],b,a);H[d+4>>2]=a+H[d+4>>2]}Be(d);oa=e+16|0}function Bh(){var a=0,b=0;a=oa-16|0;oa=a;ed(26176);H[a+12>>2]=1073741823;H[a+8>>2]=2147483647;b=zc(a+12|0,a+8|0);oa=a+16|0;return H[b>>2]}function Mm(a){a=a|0;var b=0,c=0,d=0;b=H[H[a>>2]>>2];c=H[b+8>>2];a=H[b+4>>2];b=H[b>>2]+(c>>1)|0;d=b;if(c&1){a=H[a+H[b>>2]>>2]}qa[a|0](d)}function ff(a,b,c,d,e,f){var g=0,h=0;g=H[a+4>>2];h=g>>8;if(g&1){h=jf(H[d>>2],h)}a=H[a>>2];qa[H[H[a>>2]+20>>2]](a,b,c,d+h|0,g&2?e:2,f)}function vb(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;H[f+12>>2]=c;H[f+8>>2]=e;c=jc(f,f+12|0);a=We(a,b,d,H[f+8>>2]);ic(c);oa=f+16|0;return a}function eb(a){var b=0,c=0;b=oa-16|0;oa=b;a=Gg(b,a);c=oa-16|0;oa=c;F[H[Hc(c+8|0,H[a+4>>2])>>2]]=1;F[H[a+8>>2]]=1;oa=c+16|0;oa=b+16|0}function bc(a){var b=0,c=0,d=0;c=oa-16|0;oa=c;d=a;while(1){if((b|0)!=3){H[(b<<2)+d>>2]=0;b=b+1|0;continue}break}oa=c+16|0;return a}function Wj(a){var b=0;b=oa-16|0;oa=b;gb(a);H[b+12>>2]=1073741823;H[b+8>>2]=2147483647;a=H[zc(b+12|0,b+8|0)>>2];oa=b+16|0;return a}function Nd(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Nf(c,b,32);Ua(a+48|0,d);va(d);H[a+100>>2]=b;if(!I[a+88|0]){H[a+92>>2]=b<<1}oa=c+16|0}function le(a,b,c,d,e){var f=0,g=0;f=H[a+4>>2];g=f>>8;if(f&1){g=jf(H[c>>2],g)}a=H[a>>2];qa[H[H[a>>2]+24>>2]](a,b,c+g|0,f&2?d:2,e)}function Ki(a,b,c){var d=0;d=oa-16|0;oa=d;H[d+12>>2]=b;H[d+8>>2]=c;b=jc(d,d+12|0);a=gj(a,1680,H[d+8>>2]);ic(b);oa=d+16|0;return a}function wi(a,b,c,d,e,f){a=qa[H[H[a+8>>2]+4>>2]](a+8|0)|0;a=Te(c,d,a,a+288|0,f,e,0)-a|0;if((a|0)<=287){H[b>>2]=((a|0)/12|0)%12}}function si(a,b,c,d,e,f){a=qa[H[H[a+8>>2]+4>>2]](a+8|0)|0;a=Re(c,d,a,a+288|0,f,e,0)-a|0;if((a|0)<=287){H[b>>2]=((a|0)/12|0)%12}}function Dm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){H[d>>2]=F[b|0];d=d+4|0;b=b+1|0;continue}break}return c|0}function vm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){F[d|0]=I[b|0];d=d+1|0;b=b+1|0;continue}break}return c|0}function ql(a){a=a|0;var b=0;if((qa[H[H[a>>2]+36>>2]](a)|0)==-1){return-1}b=a;a=H[a+12>>2];H[b+12>>2]=a+1;return Sb(F[a|0])|0}function Ck(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Mb(a,H[b+8>>2],0)){kf(b,c,d);return}a=H[a+8>>2];qa[H[H[a>>2]+28>>2]](a,b,c,d)}function yi(a,b,c,d,e,f){a=qa[H[H[a+8>>2]>>2]](a+8|0)|0;a=Te(c,d,a,a+168|0,f,e,0)-a|0;if((a|0)<=167){H[b>>2]=((a|0)/12|0)%7}}function ti(a,b,c,d,e,f){a=qa[H[H[a+8>>2]>>2]](a+8|0)|0;a=Re(c,d,a,a+168|0,f,e,0)-a|0;if((a|0)<=167){H[b>>2]=((a|0)/12|0)%7}}function qg(a){a=a|0;var b=0;H[a>>2]=7756;b=H[a+140>>2];if(b){Ba(Va(b))}va(a+172|0);va(a+160|0);va(a+148|0);wg(a);return a|0}function hh(a){H[a>>2]=18920;Rf(a+4|0);H[a+24>>2]=0;H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a+8>>2]=0;H[a+12>>2]=0;return a}function Hf(a){H[a>>2]=18856;Rf(a+4|0);H[a+24>>2]=0;H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a+8>>2]=0;H[a+12>>2]=0;return a}function $e(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+40>>2]](a)|0}H[a+12>>2]=b+1;return Sb(F[b|0])}function Na(a){var b=0;a=a?a:1;a:{while(1){b=cb(a);if(b){break a}b=H[7132];if(b){qa[b|0]();continue}break}$();X()}return b}function fo(a,b){a=a|0;b=b|0;var c=0;c=b;b=H[b>>2]+15&-16;H[c>>2]=b+16;M[a>>3]=ig(H[b>>2],H[b+4>>2],H[b+8>>2],H[b+12>>2])}function Zj(a,b){var c=0;c=H[a+4>>2];if((c|0)!=(b|0)){while(1){gb(a);c=c-4|0;if((c|0)!=(b|0)){continue}break}}H[a+4>>2]=b}function Wf(a,b,c){c=H[c>>2];while(1){a:{if((a|0)!=(b|0)){if((c|0)!=H[a>>2]){break a}}else{a=b}return a}a=a+4|0;continue}}function ml(a){a=a|0;var b=0;if((qa[H[H[a>>2]+36>>2]](a)|0)==-1){return-1}b=a;a=H[a+12>>2];H[b+12>>2]=a+4;return H[a>>2]}function Ei(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+40>>2]](a)|0}H[a+12>>2]=b+4;return H[b>>2]}function Xk(a,b){a=a|0;b=b|0;b=Rd(b);H[a+36>>2]=b;H[a+44>>2]=$c(b);F[a+53|0]=Jc(H[a+36>>2]);if(H[a+44>>2]>=9){db();X()}}function Tk(a,b){a=a|0;b=b|0;b=sf(b);H[a+36>>2]=b;H[a+44>>2]=$c(b);F[a+53|0]=Jc(H[a+36>>2]);if(H[a+44>>2]>=9){db();X()}}function $f(a,b,c){c=I[c|0];while(1){a:{if((a|0)!=(b|0)){if((c|0)!=I[a|0]){break a}}else{a=b}return a}a=a+1|0;continue}}function Hh(a){var b=0,c=0;b=oa-16|0;oa=b;H[b+12>>2]=a;a=jc(b+8|0,b+12|0);c=H[H[5347]>>2];ic(a);oa=b+16|0;return c?4:1}function Ah(a,b){var c=0;c=oa-16|0;oa=c;a:{if(!(I[a+128|0]|b>>>0>30)){F[a+128|0]=1;break a}a=Sj(b)}oa=c+16|0;return a}function Ih(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;H[f+12>>2]=e;e=jc(f+8|0,f+12|0);a=Ve(a,b,c,d);ic(e);oa=f+16|0;return a}function zg(a,b){var c=0,d=0;d=oa-16|0;oa=d;c=sg(d,a,1);Yj(gb(a),H[c+4>>2],b);H[c+4>>2]=H[c+4>>2]+4;Be(c);oa=d+16|0}function nj(a,b,c,d,e,f,g,h,i){H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=d;H[a+12>>2]=e&65535|(i>>>16&32768|e>>>16&32767)<<16}function fd(a,b){a:{if((a|0)==(b|0)){break a}while(1){b=b-1|0;if(b>>>0<=a>>>0){break a}pi(a,b);a=a+1|0;continue}}}function Me(a,b){a:{if((a|0)==(b|0)){break a}while(1){b=b-4|0;if(b>>>0<=a>>>0){break a}nc(a,b);a=a+4|0;continue}}}function uc(a){a:{a=H[a+4>>2]&74;if(a){if((a|0)==64){return 8}if((a|0)!=8){break a}return 16}return 0}return 10}function ek(a,b){a=a|0;b=b|0;var c=0;c=oa-16|0;oa=c;yj(c,H[b+4>>2]);qa[H[H[b>>2]+24>>2]](a,b,c);va(c);oa=c+16|0}function ai(a,b){var c=0;c=oa-16|0;oa=c;H[c+8>>2]=H[a>>2];H[c+8>>2]=H[c+8>>2]+(b<<2);oa=c+16|0;return H[c+8>>2]}function Mb(a,b,c){if(!c){return H[a+4>>2]==H[b+4>>2]}if((a|0)==(b|0)){return 1}return!_d(H[a+4>>2],H[b+4>>2])}function zl(a){a=a|0;a:{if(F[24768]&1){break a}if(!fb(24768)){break a}vd(24756,13788);eb(24768)}return 24756}function vl(a){a=a|0;a:{if(F[24800]&1){break a}if(!fb(24800)){break a}vd(24788,13872);eb(24800)}return 24788}function vi(a,b,c,d,e){b=sc(b,c,d,e,4);if(!(I[d|0]&4)){H[a>>2]=((b|0)<69?b+2e3|0:(b|0)<100?b+1900|0:b)-1900}}function ri(a,b,c,d,e){b=rc(b,c,d,e,4);if(!(I[d|0]&4)){H[a>>2]=((b|0)<69?b+2e3|0:(b|0)<100?b+1900|0:b)-1900}}function ae(a){a=a|0;var b=0;b=H[4956];H[a>>2]=b;H[H[b-12>>2]+a>>2]=H[4959];qe(a+8|0);bd(a+108|0);return a|0}function _f(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+36>>2]](a)|0}return Sb(F[b|0])}function _e(a){a=a|0;var b=0;b=H[4995];H[a>>2]=b;H[H[b-12>>2]+a>>2]=H[4998];qe(a+4|0);bd(a+104|0);return a|0}function Yd(a,b){var c=0;c=oa-16|0;oa=c;Ia(c+8|0,a);Ec(Ib(c+8|0),13232,13258,b);Fa(c+8|0);oa=c+16|0;return b}function Of(a,b,c){var d=0;d=oa-16|0;oa=d;H[d+12>>2]=c;c=jc(d+8|0,d+12|0);a=id(a,b);ic(c);oa=d+16|0;return a}function Hl(a){a=a|0;a:{if(F[24704]&1){break a}if(!fb(24704)){break a}vd(24692,13716);eb(24704)}return 24692}function Dl(a){a=a|0;a:{if(F[24736]&1){break a}if(!fb(24736)){break a}vd(24724,13752);eb(24736)}return 24724}function xl(a){a=a|0;a:{if(F[24784]&1){break a}if(!fb(24784)){break a}xa(24772,1671);eb(24784)}return 24772}function Xd(a,b,c){var d=0;d=oa-16|0;oa=d;Ia(d+8|0,b);b=Dd(d+8|0);H[c>>2]=Hb(b);Gb(a,b);Fa(d+8|0);oa=d+16|0}function Jl(a){a=a|0;a:{if(F[24688]&1){break a}if(!fb(24688)){break a}xa(24676,1167);eb(24688)}return 24676}function Fl(a){a=a|0;a:{if(F[24720]&1){break a}if(!fb(24720)){break a}xa(24708,2590);eb(24720)}return 24708}function Bl(a){a=a|0;a:{if(F[24752]&1){break a}if(!fb(24752)){break a}xa(24740,2546);eb(24752)}return 24740}function gi(a,b){var c=0;c=oa-16|0;oa=c;H[c+8>>2]=H[a>>2];H[c+8>>2]=H[c+8>>2]+b;oa=c+16|0;return H[c+8>>2]}function Zd(a,b,c){var d=0;d=oa-16|0;oa=d;Ia(d+8|0,b);b=Gd(d+8|0);F[c|0]=Hb(b);Gb(a,b);Fa(d+8|0);oa=d+16|0}function Jh(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;H[e>>2]=c;H[h>>2]=f;return 3}function Fi(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+36>>2]](a)|0}return H[b>>2]}function vh(a,b){var c=0;c=H[a+4>>2];while(1){if((b|0)!=(c|0)){ed(a);c=c-4|0;continue}break}H[a+4>>2]=b}function oc(a,b,c){if(c){if(c){while(1){H[a>>2]=H[b>>2];a=a+4|0;b=b+4|0;c=c-1|0;if(c){continue}break}}}}function nc(a,b){var c=0;c=oa-16|0;oa=c;H[c+12>>2]=H[a>>2];H[a>>2]=H[b>>2];H[b>>2]=H[c+12>>2];oa=c+16|0}function Sa(a){var b=0;b=oa-16|0;oa=b;H[a>>2]=0;H[a+4>>2]=0;H[b+12>>2]=0;rf(a+8|0);oa=b+16|0;return a}function pg(a,b){var c=0;c=oa-16|0;oa=c;Ia(c+8|0,a);a=pb(Fb(c+8|0),b);Fa(c+8|0);oa=c+16|0;return a}function lf(a){a=a|0;var b=0;H[a>>2]=20624;b=H[a+4>>2]-12|0;if((Qh(b+8|0)|0)<=-1){Ba(b)}return a|0}function Ya(a,b,c){var d=0;d=oa-16|0;oa=d;H[d+12>>2]=b;Cb(a,d+12|0);Cb(a+4|0,c);oa=d+16|0;return a}function pi(a,b){var c=0;c=oa-16|0;oa=c;F[c+15|0]=I[a|0];F[a|0]=I[b|0];F[b|0]=I[c+15|0];oa=c+16|0}function vk(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(Mb(a,H[b+8>>2],f)){hf(b,c,d,e)}}function Fc(a){var b=0;a:{a=a+172|0;b=wa(a);if(b){if(Db(F[Aa(a,b-1|0)|0])){break a}}mc(a,1,32)}}function ee(a,b){var c=0;if((b|0)>=1){while(1){Lj(a);c=(b|0)>1;b=b-1|0;if(c){continue}break}}}function Sc(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,Ca(a)+(wa(a)<<2)|0)>>2];oa=b+16|0;return a}function Dj(){Ha(27584);za(27584,5340);za(27584,5100);za(27584,3413);za(27584,3241);Ha(27584)}function Aj(a){a=a|0;var b=0;H[a>>2]=7832;b=H[a+4>>2];if(b){qa[H[H[b>>2]+4>>2]](b)}return a|0}function vg(a,b,c){Ga(a+48|0,7627);F[a+89|0]=c;H[a+100>>2]=b;if(!I[a+88|0]){H[a+92>>2]=b<<1}}function aj(a){var b=0,c=0;c=a;while(1){b=c;c=b+4|0;if(H[b>>2]){continue}break}return b-a>>2}function Pk(a,b){a=a|0;b=b|0;qa[H[H[a>>2]+24>>2]](a)|0;b=Rd(b);H[a+36>>2]=b;F[a+44|0]=Jc(b)} +function Kh(a){a=a|0;var b=0;H[a>>2]=13500;b=H[a+8>>2];if(!(!b|!I[a+12|0])){Ba(b)}return a|0}function Va(a){var b=0,c=0;Ag(a);b=a;if(H[b>>2]){_j(b);gb(b);c=H[b>>2];Gc(b);Ba(c)}return a}function Mk(a,b){a=a|0;b=b|0;qa[H[H[a>>2]+24>>2]](a)|0;b=sf(b);H[a+36>>2]=b;F[a+44|0]=Jc(b)}function wh(a,b,c){c=oa-16|0;oa=c;a:{if((a|0)==(b|0)){F[a+128|0]=0;break a}Ba(b)}oa=c+16|0}function sh(a){var b=0;b=H[a>>2];if(b){if(!qb(_f(b),-1)){return!H[a>>2]}H[a>>2]=0}return 1}function rh(a){var b=0;b=H[a>>2];if(b){if(!qb(Fi(b),-1)){return!H[a>>2]}H[a>>2]=0}return 1}function oj(a,b){var c=0;c=oa-16|0;oa=c;H[c+12>>2]=b;a=We(a,100,2064,b);oa=c+16|0;return a}function cd(a){var b=0;if(a>>>0>=11){b=a+16&-16;a=b-1|0;a=(a|0)==11?b:a}else{a=10}return a}function Vd(a,b){var c=0;c=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=c;H[a+8>>2]=H[b+8>>2];ng(b)}function _i(a){var b=0;b=H[5347];if(a){H[5347]=(a|0)==-1?24324:a}return(b|0)==24324?-1:b}function Vc(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,Ca(a)+wa(a)|0)>>2];oa=b+16|0;return a}function Ma(a,b){var c=0;c=yc(b);if((c|0)==(wa(a)|0)){a=nf(a,0,-1,b,c)}else{a=1}return!a}function Gq(a,b){var c=0,d=0;c=b&31;d=(-1>>>c&a)<>>a} +function zm(a,b){a=a|0;b=b|0;if((b|0)>=0){b=H[H[2516]+((b&255)<<2)>>2]}return b<<24>>24}function xm(a,b){a=a|0;b=b|0;if((b|0)>=0){b=H[H[2904]+((b&255)<<2)>>2]}return b<<24>>24}function Mh(a,b){var c=0;c=oa-16|0;oa=c;F[c+15|0]=b;a=Kf(a,c+15|0,1);oa=c+16|0;return a}function Lm(a,b,c){a=a|0;b=b|0;c=c|0;return(c>>>0<=127?(J[H[2322]+(c<<1)>>1]&b)!=0:0)|0}function cj(a,b){var c=0;c=oa-16|0;oa=c;H[c+12>>2]=b;a=gj(a,2070,b);oa=c+16|0;return a}function ud(a){var b=0;if(a>>>0>=2){b=a+4&-4;a=b-1|0;a=(a|0)==2?b:a}else{a=1}return a}function ac(a,b){b=!H[a+24>>2]|(H[a+16>>2]|b);H[a+16>>2]=b;if(b&H[a+20>>2]){db();X()}}function Vh(a){a=a|0;H[a>>2]=13552;if(H[a+8>>2]!=(Oa()|0)){bj(H[a+8>>2])}return a|0}function Ul(a){a=a|0;a=24984;while(1){a=va(a-12|0);if((a|0)!=24816){continue}break}}function Sl(a){a=a|0;a=25160;while(1){a=va(a-12|0);if((a|0)!=24992){continue}break}}function Ql(a){a=a|0;a=25456;while(1){a=va(a-12|0);if((a|0)!=25168){continue}break}}function Ol(a){a=a|0;a=25760;while(1){a=va(a-12|0);if((a|0)!=25472){continue}break}}function Ml(a){a=a|0;a=25800;while(1){a=va(a-12|0);if((a|0)!=25776){continue}break}}function Kl(a){a=a|0;a=25832;while(1){a=va(a-12|0);if((a|0)!=25808){continue}break}}function vc(a,b){a=H[a>>2];b=Wa(b);if(!Nh(a,b)){db();X()}return H[lc(a+16|0,b)>>2]}function uf(a,b){var c=0;c=Xe(a+4|0);H[a>>2]=19084;H[c>>2]=19104;pd(H[4768]+a|0,b)}function tf(a,b){var c=0;c=Vg(a+4|0);H[a>>2]=19132;H[c>>2]=19152;pd(H[4780]+a|0,b)}function Nh(a,b){a=a+16|0;if(Pa(a)>>>0>b>>>0){a=H[lc(a,b)>>2]!=0}else{a=0}return a}function Da(a,b){var c=0;a:{c=wa(a);if(c>>>0>>0){mc(a,b-c|0,0);break a}xj(a,b)}}function sg(a,b,c){H[a>>2]=b;b=H[b+4>>2];H[a+4>>2]=b;H[a+8>>2]=b+(c<<2);return a}function Ob(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,Ca(a))>>2];oa=b+16|0;return a}function _n(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=oa-16|0;oa=b;Xi(a,c,d);oa=b+16|0}function Xn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=oa-16|0;oa=b;Wi(a,c,d);oa=b+16|0}function Hm(a,b){a=a|0;b=b|0;if(b>>>0<=127){b=H[H[2516]+(b<<2)>>2]}return b|0}function Fm(a,b){a=a|0;b=b|0;if(b>>>0<=127){b=H[H[2904]+(b<<2)>>2]}return b|0}function Dk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Mb(a,H[b+8>>2],0)){kf(b,c,d)}}function Ae(a,b,c,d){if(H[a+76>>2]<=-1){return ph(a,b,c,d)}return ph(a,b,c,d)}function zc(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Qg(b,a);oa=c+16|0;return d?b:a}function xi(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,a)>>2];oa=b+16|0;return a}function vf(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Yg(a,b);oa=c+16|0;return d?b:a}function td(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Yg(b,a);oa=c+16|0;return d?b:a}function ad(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Qg(a,b);oa=c+16|0;return d?b:a}function Xh(a){var b=0;b=oa-16|0;oa=b;H[b+8>>2]=a;oa=b+16|0;return H[b+8>>2]}function Vj(a,b,c,d){a=c-b|0;c=H[d>>2]-a|0;H[d>>2]=c;if((a|0)>=1){Wb(c,b,a)}}function wf(a,b,c,d,e,f,g,h){return qa[H[H[a>>2]+16>>2]](a,b,c,d,e,f,g,h)|0}function Qd(a,b,c,d,e,f,g,h){return qa[H[H[a>>2]+12>>2]](a,b,c,d,e,f,g,h)|0}function Kc(a,b,c){H[a+8>>2]=b;H[a+12>>2]=c;H[a>>2]=0;H[a+4>>2]=0;return a}function Gg(a,b){H[a+12>>2]=0;H[a+4>>2]=b;H[a>>2]=b;H[a+8>>2]=b+1;return a}function ki(a,b){var c=0;c=$e(H[b>>2])<<24;H[a+4>>2]=H[b>>2];F[a|0]=c>>24}function xa(a,b){var c=0;c=oa-16|0;oa=c;Mg(a,b,yc(b));oa=c+16|0;return a}function kh(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Kc(a,-1,-1)}function dc(a,b,c){return(c|0)>=0?(J[H[a+8>>2]+((c&255)<<1)>>1]&b)!=0:0}function Qf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;H[e>>2]=c;return 3}function lb(a,b){var c=0;c=H[a>>2];H[a>>2]=b;if(c){qa[H[Ad(a)>>2]](c)}}function gf(a,b,c){if(!(H[a+28>>2]==1|H[a+4>>2]!=(b|0))){H[a+28>>2]=c}}function Pc(a,b){a=a|0;b=b|0;F[a|0]=2;F[a+1|0]=3;F[a+2|0]=0;F[a+3|0]=4}function Lf(a){a=a|0;if(H[a+8>>2]!=(Oa()|0)){bj(H[a+8>>2])}return a|0}function Rm(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Td(a,f)}function xc(a,b){if(H[a+4>>2]!=H[gb(a)>>2]){zg(a,b);return}yg(a,b)}function qq(a){a=a|0;if(!Mj(a)){return fk(a)|0}return!I[a+223|0]|0}function di(a,b){var c=0;c=Ei(H[b>>2]);H[a+4>>2]=H[b>>2];H[a>>2]=c}function Cm(a,b,c){a=a|0;b=b|0;c=c|0;return(b>>>0<128?b:c)<<24>>24}function ya(a,b){if(K[a+4>>2]>2]){zg(a,b);return}yg(a,b)}function Oh(a,b){H[a>>2]=H[(H[H[b>>2]-12>>2]+b|0)+24>>2];return a}function gk(a,b){a=a|0;b=b|0;H[a+4>>2]=b;qa[H[H[a>>2]+12>>2]](a)}function Sj(a){if(a>>>0>1073741823){Fe(2074);X()}return Na(a<<2)}function Om(a){a=a|0;var b=0;b=H[6140]+1|0;H[6140]=b;H[a+4>>2]=b}function va(a){var b=0;if(tb(a)){b=H[a>>2];Rc(a);Ba(b)}return a}function km(a){a=a|0;a=H[a+8>>2];if(!a){return 1}return Hh(a)|0}function $g(a,b,c,d,e){return qa[H[H[a>>2]+20>>2]](a,b,c,d,e)|0}function Ea(a){var b=0;b=oa-16|0;oa=b;ng(a);oa=b+16|0;return a}function Yk(a){a=a|0;sd(27584);Af(27668);sd(27920);Af(28004)}function Mj(a){return H[a+204>>2]|I[a+209|0]?1:I[a+212|0]!=0}function Jd(a,b,c){if(!(!c|!I[a+221|0])){Ld(a)}Bd(a+172|0,b)}function Ee(a){if((Qh(a+4|0)|0)==-1){qa[H[H[a>>2]+8>>2]](a)}}function um(a,b,c){a=a|0;b=b|0;c=c|0;return((b|0)>-1?b:c)|0}function cg(a,b){Mh(za(Mh(za(H[5266],a),32),b),10);_(1);X()}function Qh(a){var b=0;b=a;a=H[a>>2]-1|0;H[b>>2]=a;return a}function zj(a){a=H[a+4>>2];return Ui(H[H[a>>2]-12>>2]+a|0)}function wa(a){if(tb(a)){return H[a+4>>2]}return I[a+11|0]}function hc(a,b,c,d){H[a+16>>2]=d;H[a+12>>2]=c;H[a+8>>2]=b}function Zk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;pa=0;return 0}function vj(a){if(uj(a)){a=1}else{a=(Rb(a)|0)!=0}return a}function mg(a){if(!xf(a+8|0)){ac(H[H[a>>2]-12>>2]+a|0,4)}}function Ac(a,b,c){H[a+28>>2]=c;H[a+20>>2]=b;H[a+24>>2]=b}function rk(a,b){a=a|0;b=b|0;Ha(za(27584,7428));return 0}function jh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Kc(a,-1,-1)}function fi(a,b){lb(a,Ud(b));b=H[Ad(b)>>2];H[Ad(a)>>2]=b}function Fh(a){a=a|0;H[a>>2]=13600;va(a+12|0);return a|0}function Eh(a){a=a|0;H[a>>2]=13640;va(a+16|0);return a|0}function xe(a){a=a|0;H[a>>2]=18856;Fa(a+4|0);return a|0}function wd(a,b,c){return qa[H[H[a>>2]+48>>2]](a,b,c)|0}function cc(a,b,c){return qa[H[H[a>>2]+12>>2]](a,b,c)|0}function Yi(a,b,c,d){a=Zi(a,b,c,0,-2147483648);return a}function Oj(a,b,c){b=b-a|0;if(b){ie(c,a,b)}return b+c|0}function Kd(a,b){return!Ra(a+160|0,H[a+200>>2],wa(b),b)}function Ja(a){if(tb(a)){a=Rc(a)-1|0}else{a=10}return a}function Ff(a){a=a|0;H[a>>2]=18920;Fa(a+4|0);return a|0}function gh(a){a=a|0;return ve(H[H[a>>2]-12>>2]+a|0)|0}function eh(a){a=a|0;return se(H[H[a>>2]-12>>2]+a|0)|0}function bl(a){a=a|0;return ae(H[H[a>>2]-12>>2]+a|0)|0}function Xa(a){H[a+4>>2]=0;H[a>>2]=13176;H[a>>2]=13928}function Sf(a,b){var c=0;c=a;a=H[b>>2];H[c>>2]=a;Tf(a)}function Mf(a){if(tb(a)){a=Rc(a)-1|0}else{a=1}return a}function $k(a){a=a|0;return _e(H[H[a>>2]-12>>2]+a|0)|0}function zd(a,b){return qa[H[H[a>>2]+36>>2]](a,b,0)|0}function yd(a,b){return qa[H[H[a>>2]+52>>2]](a,b,0)|0}function ej(a){return(a|0)!=0&(a|0)!=9168&(a|0)!=9192}function Wc(a,b,c,d){qa[H[H[a>>2]+32>>2]](a,b,c,d)|0}function Ec(a,b,c,d){qa[H[H[a>>2]+48>>2]](a,b,c,d)|0}function Cj(){Dj();za(27584,3025);Ha(za(27584,2981))}function pb(a,b){return qa[H[H[a>>2]+28>>2]](a,b)|0}function dj(a,b){return(Rb(a)|0)!=0|(a|32)-97>>>0<6}function Ud(a){var b=0;b=H[a>>2];H[a>>2]=0;return b}function Se(a,b){return qa[H[H[a>>2]+12>>2]](a,b)|0}function Kb(a,b){return qa[H[H[a>>2]+44>>2]](a,b)|0}function qh(a,b,c){return a>>>0>>0&a>>>0>=b>>>0}function qd(a){return(H[gb(a)>>2]-H[a>>2]|0)/12|0}function ld(a,b){return nd(a+160|0,H[a+200>>2],b)}function Ye(a){if(!a){return 0}H[6070]=a;return-1}function Ra(a,b,c,d){return nf(a,b,c,Ca(d),wa(d))}function Lc(a,b){if(tb(a)){yb(a,b);return}ub(a,b)}function ng(a){H[a>>2]=0;H[a+4>>2]=0;H[a+8>>2]=0}function Ca(a){if(tb(a)){return H[a>>2]}return a}function ye(a){return(H[a+4>>2]-H[a>>2]|0)/12|0}function sk(a){a=a|0;a=oa-a&-16;oa=a;return a|0}function sj(a,b){if(!a){return 0}return id(a,b)}function lh(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function eg(a,b,c,d){a=Zi(a,b,c,-1,-1);return a}function ec(a){return qa[H[H[a>>2]+12>>2]](a)|0}function Mc(a){return qa[H[H[a>>2]+36>>2]](a)|0}function Jc(a){return qa[H[H[a>>2]+28>>2]](a)|0}function Hb(a){return qa[H[H[a>>2]+16>>2]](a)|0}function $c(a){return qa[H[H[a>>2]+24>>2]](a)|0}function sb(a,b,c){if(!(I[a|0]&32)){df(b,c,a)}}function of(a){return nf(a,0,-1,7628,yc(7628))}function jc(a,b){H[a>>2]=_i(H[b>>2]);return a}function fh(a){a=a|0;Df(H[H[a>>2]-12>>2]+a|0)}function dh(a){a=a|0;zf(H[H[a>>2]-12>>2]+a|0)}function al(a){a=a|0;_g(H[H[a>>2]-12>>2]+a|0)}function _k(a){a=a|0;Zg(H[H[a>>2]-12>>2]+a|0)}function Wh(a,b,c){a=a|0;b=b|0;c=c|0;return-1}function jo(a){a=a|0;return aa(H[a+60>>2])|0}function dd(a){return H[Ce(a)>>2]-H[a>>2]>>2}function Tj(a){return H[Ic(a)>>2]-H[a>>2]>>2}function Gc(a){return H[gb(a)>>2]-H[a>>2]>>2}function fk(a){a=a|0;return zj(H[a+4>>2])|0}function Xe(a){Fg(a);H[a>>2]=19240;return a}function Vg(a){Fg(a);H[a>>2]=19312;return a}function Nm(a){a=a|0;qa[H[H[a>>2]+4>>2]](a)}function Ge(a,b,c){return Oj(Xh(a),Xh(b),c)}function xg(a,b){if(b){he(a,0)}F[a+84|0]=b}function gc(a,b){qa[H[H[b>>2]+24>>2]](a,b)}function fc(a,b){qa[H[H[b>>2]+28>>2]](a,b)}function Rc(a){return H[a+8>>2]&2147483647}function Pa(a){return H[a+4>>2]-H[a>>2]>>2}function Oc(a,b){qa[H[H[b>>2]+44>>2]](a,b)}function Nc(a,b){qa[H[H[b>>2]+32>>2]](a,b)}function He(a,b){qa[H[H[b>>2]+40>>2]](a,b)}function Gb(a,b){qa[H[H[b>>2]+20>>2]](a,b)}function $j(a,b){return H[a>>2]-H[b>>2]>>2}function ve(a){a=a|0;bd(a+8|0);return a|0}function se(a){a=a|0;bd(a+4|0);return a|0}function ge(a,b){H[a>>2]=H[b>>2];return a}function bb(a){return _f(H[a>>2])<<24>>24}function _l(a,b){a=a|0;b=b|0;Td(a,b+16|0)}function Tb(a,b){return Kf(a,Ca(b),wa(b))}function Bd(a,b){return Lg(a,Ca(b),wa(b))}function $l(a,b){a=a|0;b=b|0;Td(a,b+12|0)}function mb(a){return H[a>>2]==H[a+4>>2]}function lc(a,b){return H[a>>2]+(b<<2)|0}function ch(a,b){H[a+24>>2]=H[a+24>>2]+b}function Zb(a,b){H[a+8>>2]=b|-2147483648}function Yl(a,b){a=a|0;b=b|0;vd(a,13672)}function Yc(a){return(a|0)==32|a-9>>>0<5}function Wl(a,b){a=a|0;b=b|0;vd(a,13692)}function Gf(a,b){H[a+12>>2]=H[a+12>>2]+b}function Bg(a,b){return H[a>>2]==H[b>>2]}function Be(a){H[H[a>>2]+4>>2]=H[a+4>>2]}function ni(a,b){a=a|0;b=b|0;Nf(a,1,45)}function mi(a,b){a=a|0;b=b|0;Bi(a,1,45)}function Zl(a,b){a=a|0;b=b|0;xa(a,2195)}function Yg(a,b){return H[a>>2]>2]}function Xl(a,b){a=a|0;b=b|0;xa(a,2222)}function Ug(a){H[a+4>>2]=H[a+4>>2]|8192}function Qg(a,b){return K[a>>2]>2]}function Ng(a,b,c){if(b){Vb(a,Sb(c),b)}}function Lh(a,b){a=a|0;b=b|0;return b|0}function Db(a){return(a|0)==32|(a|0)==9}function sm(a){a=a|0;return H[a+12>>2]}function Qe(a,b){return Ca(a)+(b<<2)|0}function Ke(a){a=a|0;return 2147483647}function za(a,b){return Kf(a,b,yc(b))}function xn(a){a=a|0;return H[a+8>>2]}function we(a,b){a=a|0;b=b|0;return-1}function uj(a){return(a|32)-97>>>0<26}function tb(a){return I[a+11|0]>>>7|0}function je(a){return(I[a+16|0]&5)!=0}function ic(a){a=H[a>>2];if(a){_i(a)}}function bd(a){a=a|0;jg(a);return a|0}function Wk(a){a=a|0;return Sg(a,0)|0}function Vk(a){a=a|0;return Sg(a,1)|0}function Sk(a){a=a|0;return Pg(a,0)|0}function Rk(a){a=a|0;return Pg(a,1)|0}function Jk(a){a=a|0;return H[a+4>>2]}function Ji(a,b){return sh(a)^sh(b)^1}function Gi(a,b){return rh(a)^rh(b)^1}function bm(a){a=a|0;return F[a+8|0]}function bk(a,b){Pa(a);Zj(a,b);Nj(a)}function am(a){a=a|0;return F[a+9|0]}function Tf(a){H[a+4>>2]=H[a+4>>2]+1}function qf(a,b,c){if(c){ie(a,b,c)}}function qb(a,b){return(a|0)==(b|0)}function ib(a){$e(H[a>>2]);return a}function hb(a){Ei(H[a>>2]);return a}function Yb(a,b,c){if(c){Wb(a,b,c)}}function Xc(a){return xi(H[a+4>>2])}function Vi(a,b){return(b-a|0)/12|0}function Rj(a,b,c){return Oj(a,b,c)}function Qa(a){return H[a+4>>2]-4|0}function Hc(a,b){H[a>>2]=b;return a}function zh(a){dd(26176);dd(26176)}function yf(a,b){rf(a);H[a+4>>2]=b}function re(a){return qb(a,-1)?0:a}function ob(a){bk(a,H[a+4>>2]-4|0)}function Yj(a,b,c){H[b>>2]=H[c>>2]}function Qc(a,b){a=a|0;b=b|0;Ea(a)}function Je(a,b){a=a|0;b=b|0;bc(a)}function zb(a,b){return Bg(a,b)^1}function sf(a){return vc(a,24588)}function jf(a,b){return H[a+b>>2]}function ii(a){return vc(a,24456)}function hi(a){return vc(a,24448)}function ci(a){return vc(a,24472)}function bi(a){return vc(a,24464)}function ab(a){return Fi(H[a>>2])}function Uf(a){H[a>>2]=0;return a}function Sh(){dd(26176);Pa(26176)}function Rd(a){return vc(a,24580)}function Rb(a){return a-48>>>0<10}function Ib(a){return vc(a,24564)}function Gd(a){return vc(a,24612)}function Fb(a){return vc(a,24572)}function Ed(a){return xi(H[a>>2])}function Dd(a){return vc(a,24620)}function Bb(a,b){return Ji(a,b)^1}function Ab(a,b){return Gi(a,b)^1}function Aa(a,b){return Ca(a)+b|0}function ui(a){qd(a);ye(a);qd(a)}function od(a){H[a>>2]=H[a>>2]+4}function Wd(a){H[a>>2]=H[a>>2]+1}function Ue(a,b,c){Vd(a,Bd(b,c))}function Tg(a){a=a|0;xe(a);Ba(a)}function Sd(a){return!H[a+16>>2]}function Rg(a){a=a|0;Ff(a);Ba(a)}function Ph(a){dd(a);Pa(a);dd(a)}function Hk(a){a=a|0;return 1693}function Fk(a){a=a|0;lf(a);Ba(a)}function Cb(a,b){H[a>>2]=H[b>>2]}function Ag(a){Gc(a);Pa(a);Gc(a)}function th(a,b){return oi(a,b)}function rg(a,b){return Pj(a,b)}function kb(a,b){return Ji(a,b)}function jb(a,b){return Gi(a,b)}function bj(a){if(ej(a)){Ba(a)}}function Zc(a){return a<<24>>24}function Tc(a){a=a|0;return a|0}function Le(a){a=a|0;return 127}function Eb(a,b,c){Kg(a,b,c,-1)}function zq(a){a=a|0;Va(21852)}function zp(a){a=a|0;va(22440)}function zo(a){a=a|0;va(23088)}function zf(a){a=a|0;Ba(se(a))}function yq(a){a=a|0;Va(21864)}function yp(a){a=a|0;va(22452)}function yo(a){a=a|0;va(23100)}function yl(a){a=a|0;va(24756)}function xq(a){a=a|0;Va(21876)}function xp(a){a=a|0;va(22464)}function xo(a){a=a|0;va(23112)}function wq(a){a=a|0;Va(21888)}function wp(a){a=a|0;va(22476)}function wo(a){a=a|0;va(23124)}function wl(a){a=a|0;va(24772)}function vq(a){a=a|0;Va(21900)}function vp(a){a=a|0;va(22488)}function vo(a){a=a|0;va(23136)}function uq(a){a=a|0;Va(21912)}function up(a){a=a|0;va(22500)}function uo(a){a=a|0;va(23148)}function ul(a){a=a|0;va(24788)}function tq(a){a=a|0;Ba(qg(a))}function tp(a){a=a|0;va(22512)}function to(a){a=a|0;va(23160)}function sp(a){a=a|0;va(22524)}function so(a){a=a|0;va(23172)}function sl(a){a=a|0;Ba(xe(a))}function rp(a){a=a|0;va(22536)}function ro(a){a=a|0;va(23184)}function qp(a){a=a|0;va(22548)}function qo(a){a=a|0;va(23196)}function qm(a){a=a|0;Ba(Vh(a))}function qk(a){a=a|0;Va(21788)}function pq(a){a=a|0;va(21924)}function pp(a){a=a|0;va(22560)}function po(a){a=a|0;va(23208)}function pk(a){a=a|0;Va(21800)}function oq(a){a=a|0;va(21936)}function op(a){a=a|0;va(22572)}function oo(a){a=a|0;va(23220)}function ol(a){a=a|0;Ba(Ff(a))}function ok(a){a=a|0;Va(21812)}function nq(a){a=a|0;va(21948)}function np(a){a=a|0;va(22584)}function no(a){a=a|0;Ba(Aj(a))}function nk(a){a=a|0;Va(21824)}function nb(a,b){F[a|0]=I[b|0]}function mq(a){a=a|0;va(21960)}function mp(a){a=a|0;va(22596)}function mo(a){a=a|0;va(21772)}function mk(a){a=a|0;Va(21836)}function mh(a){a=a|0;Ba(bd(a))}function lq(a){a=a|0;va(21972)}function lp(a){a=a|0;va(22608)}function kq(a){a=a|0;va(21984)}function kp(a){a=a|0;va(22620)}function kl(a){a=a|0;Ba(qe(a))}function kk(a,b){H[a+108>>2]=b}function jq(a){a=a|0;va(21996)}function jp(a){a=a|0;va(22632)}function iq(a){a=a|0;va(22008)}function ip(a){a=a|0;va(22644)}function hq(a){a=a|0;va(22020)}function hp(a){a=a|0;va(22656)}function ho(a){a=a|0;Ba(jg(a))}function gq(a){a=a|0;va(22032)}function gp(a){a=a|0;va(22668)}function fq(a){a=a|0;va(22044)}function fp(a){a=a|0;va(22680)}function eq(a){a=a|0;va(22056)}function ep(a){a=a|0;va(22692)}function dq(a){a=a|0;va(22068)}function dp(a){a=a|0;va(22704)}function dm(a){a=a|0;Ba(Fh(a))}function cq(a){a=a|0;va(22080)}function cp(a){a=a|0;va(22716)}function cm(a){a=a|0;Ba(Eh(a))}function ce(a,b){H[a+204>>2]=b}function bq(a){a=a|0;va(22092)}function bp(a){a=a|0;va(22728)}function aq(a){a=a|0;va(22104)}function ap(a){a=a|0;va(22740)}function _p(a){a=a|0;va(22128)}function _o(a){a=a|0;va(22764)}function _g(a){a=a|0;Ba(ae(a))}function Zp(a){a=a|0;va(21760)}function Zo(a){a=a|0;va(22776)}function Zg(a){a=a|0;Ba(_e(a))}function Yp(a){a=a|0;va(22140)}function Yo(a){a=a|0;va(22788)}function Xp(a){a=a|0;va(22152)}function Xo(a){a=a|0;va(22800)}function Wp(a){a=a|0;va(22164)}function Wo(a){a=a|0;va(22812)}function Vp(a){a=a|0;va(22176)}function Vo(a){a=a|0;va(22824)}function Up(a){a=a|0;va(22188)}function Uo(a){a=a|0;va(22836)}function Tp(a){a=a|0;va(22200)}function To(a){a=a|0;va(22848)}function Sp(a){a=a|0;va(22212)}function So(a){a=a|0;va(22860)}function Rp(a){a=a|0;va(22224)}function Ro(a){a=a|0;va(22872)}function Qp(a){a=a|0;va(22236)}function Qo(a){a=a|0;va(22884)}function Pp(a){a=a|0;va(22248)}function Po(a){a=a|0;va(22896)}function Pm(a){a=a|0;Ba(Rh(a))}function Pj(a,b){return b-a>>2}function Op(a){a=a|0;va(22260)}function Oo(a){a=a|0;va(22908)}function Np(a){a=a|0;va(22272)}function No(a){a=a|0;va(22920)}function Mp(a){a=a|0;va(22284)}function Mo(a){a=a|0;va(22932)}function Lp(a){a=a|0;va(22296)}function Lo(a){a=a|0;va(22944)}function Kp(a){a=a|0;va(22308)}function Ko(a){a=a|0;va(22956)}function Jp(a){a=a|0;va(22320)}function Jo(a){a=a|0;va(22968)}function Ip(a){a=a|0;va(22332)}function Io(a){a=a|0;va(22980)}function Il(a){a=a|0;va(24676)}function Hp(a){a=a|0;va(22344)}function Ho(a){a=a|0;va(22992)}function Gp(a){a=a|0;va(22356)}function Go(a){a=a|0;va(23004)}function Gl(a){a=a|0;va(24692)}function Gk(a){a=a|0;Ba(lf(a))}function Fp(a){a=a|0;va(22368)}function Fo(a){a=a|0;va(23016)}function Ep(a){a=a|0;va(22380)}function Eo(a){a=a|0;va(23028)}function El(a){a=a|0;va(24708)}function Dq(a){a=a|0;Ba(wg(a))}function Dp(a){a=a|0;va(22392)}function Do(a){a=a|0;va(23040)}function Df(a){a=a|0;Ba(ve(a))}function Cp(a){a=a|0;va(22404)}function Co(a){a=a|0;va(23052)}function Cl(a){a=a|0;va(24724)}function Ch(a){a=a|0;Ba(Lf(a))}function Bp(a){a=a|0;va(22416)}function Bo(a){a=a|0;va(23064)}function Ap(a){a=a|0;va(22428)}function Ao(a){a=a|0;va(23076)}function Am(a){a=a|0;Ba(Kh(a))}function Al(a){a=a|0;va(24740)}function $p(a){a=a|0;va(22116)}function $o(a){a=a|0;va(22752)}function zi(a){a=a|0;return 2}function oi(a,b){return b-a|0}function oe(a,b){H[a+72>>2]=b}function jk(a,b){F[a+128|0]=b}function ih(a){a=a|0;return-1}function Ui(a){return je(a)^1}function Pf(a){a=a|0;return 1}function Pb(a){a=a|0;return 0}function Ia(a,b){Sf(a,b+28|0)}function Gh(a){a=a|0;return 4}function De(a){return!H[a>>2]}function yb(a,b){H[a+4>>2]=b}function ub(a,b){F[a+11|0]=b}function rd(a,b){Sf(a,b+4|0)}function ik(a,b){F[a+86|0]=b}function he(a,b){F[a+83|0]=b}function ed(a){return a+32|0}function _j(a){Zj(a,H[a>>2])}function Uj(a,b){Gc(a);Gc(a)}function Th(a){vh(a,H[a>>2])}function Ie(a,b){a=a|0;b=b|0}function Ic(a){return a+12|0}function Ce(a){return a+16|0}function uh(a){H[a>>2]=Oa()}function gb(a){return a+8|0}function Sb(a){return a&255}function Ij(a){F[a+209|0]=1}function Hj(a){F[a+211|0]=1}function Gj(a){F[a+210|0]=1}function Fj(a){F[a+234|0]=1}function Fg(a){H[a>>2]=7888}function Dh(a){H[a+12>>2]=0}function Ad(a){return a+4|0}function $b(a){return!wa(a)}function yh(a,b){H[b>>2]=0}function xh(a,b,c){Td(b,c)}function io(){return 24280}function _b(a,b){H[a>>2]=b}function Xb(){Fe(1998);X()}function Nj(a){Gc(a);Pa(a)}function Fa(a){Ee(H[a>>2])}function $d(){Fe(1527);X()}function $a(a){a=a|0;Ba(a)}function uk(){return oa|0}function tk(a){a=a|0;oa=a}function Ha(a){qa[3](a)|0}function rf(a){H[a>>2]=0}function ck(a,b){Bd(a,b)}function ao(a){a=a|0;X()}function me(){db();X()}function _a(a){lb(a,0)}function Hg(a,b){va(b)}function db(){$();X()}function Ef(a){a=a|0}function Ik(){X()} +// EMSCRIPTEN_END_FUNCS +e=I;p(ta);var qa=c([null,Zp,mo,Aq,lf,qk,pk,ok,nk,mk,wg,Dq,gk,Cq,fk,ek,Bq,zq,yq,xq,wq,vq,uq,qg,tq,sq,qq,rq,pq,oq,nq,mq,lq,kq,jq,iq,hq,gq,fq,eq,dq,cq,bq,aq,$p,_p,Yp,Xp,Wp,Vp,Up,Tp,Sp,Rp,Qp,Pp,Op,Np,Mp,Lp,Kp,Jp,Ip,Hp,Gp,Fp,Ep,Dp,Cp,Bp,Ap,zp,yp,xp,wp,vp,up,tp,sp,rp,qp,pp,op,np,mp,lp,kp,jp,ip,hp,gp,fp,ep,dp,cp,bp,ap,$o,_o,Zo,Yo,Xo,Wo,Vo,Uo,To,So,Ro,Qo,Po,Oo,No,Mo,Lo,Ko,Jo,Io,Ho,Go,Fo,Eo,Do,Co,Bo,Ao,zo,yo,xo,wo,vo,uo,to,so,ro,qo,po,oo,Aj,no,jo,lo,ko,jg,ho,go,fo,eo,bo,Tc,ao,Ik,Ba,Ef,Om,Mm,Ul,Sl,Ql,Ol,Ml,Kl,Il,Gl,El,Cl,Al,yl,wl,ul,Rh,Pm,Nm,Kh,Am,zm,ym,xm,wm,Lh,vm,um,tm,Vh,qm,pm,om,nm,mm,Pb,lm,km,Fh,dm,bm,am,$l,Zl,Xl,Eh,cm,xn,sm,_l,Yl,Wl,Tc,$a,$a,Lm,Km,Jm,Im,Hm,Gm,Fm,Em,Lh,Dm,Cm,Bm,$a,Jh,Jh,Qf,Pf,Pf,rm,Pf,$a,jm,im,Qf,Pb,Pb,hm,Gh,$a,gm,fm,Qf,Pb,Pb,em,Gh,Tc,$a,$n,_n,Zn,Tc,$a,Yn,Xn,Wn,$a,Vn,Un,Tn,Sn,Qi,Qi,Rn,Qn,Pn,On,Nn,$a,Mn,Ln,Kn,Jn,Hi,Hi,In,Hn,Gn,Fn,En,$a,Dn,Cn,Bn,An,zn,yn,wn,vn,$a,un,tn,sn,rn,qn,pn,on,nn,Tc,$a,zi,mn,ln,kn,jn,hn,gn,Vl,Rl,Nl,Bl,xl,Jl,Fl,Tc,$a,zi,fn,en,dn,cn,bn,an,Tl,Pl,Ll,zl,vl,Hl,Dl,Lf,Ch,$m,Lf,Ch,_m,$a,Le,Le,Qc,Qc,Qc,ni,Pb,Pc,Pc,$a,Le,Le,Qc,Qc,Qc,ni,Pb,Pc,Pc,$a,Ke,Ke,Qc,Je,Je,mi,Pb,Pc,Pc,$a,Ke,Ke,Qc,Je,Je,mi,Pb,Pc,Pc,$a,Zm,Ym,$a,Xm,Wm,$a,Vm,Um,$a,Tm,Sm,$a,Wh,Rm,Ie,$a,Wh,Qm,Ie,tl,If,xe,sl,Ie,lh,kh,jh,Pb,Pb,rl,ih,ql,we,pl,we,Ff,ol,Ie,lh,kh,jh,Pb,Pb,nl,ih,ml,we,ll,we,ve,Df,gh,fh,ve,Df,gh,fh,se,zf,eh,dh,se,zf,eh,dh,qe,kl,cl,gl,fl,el,dl,jl,il,hl,bd,mh,bd,mh,ae,_g,bl,al,_e,Zg,$k,_k,Pb,Zk,Yk,Tg,Xk,Wk,Vk,Uk,Rg,Tk,Sk,Rk,Qk,Tg,Pk,Og,Ok,Nk,Rg,Mk,Og,Lk,Kk,Tc,$a,Hk,Gk,Jk,Fk,Tc,$a,Ef,Ef,Ek,vk,yk,Dk,$a,wk,zk,Ck,$a,xk,Ak,Bk]);function ra(){return E.byteLength/65536|0}return{"r":lk,"s":co,"t":rk,"u":qa,"v":io,"w":cb,"x":uk,"y":tk,"z":sk}}return sa(ua)} +// EMSCRIPTEN_END_ASM + + + + +)(asmLibraryArg)},instantiate:function(binary,info){return{then:function(ok){var module=new WebAssembly.Module(binary);ok({"instance":new WebAssembly.Instance(module)})}}},RuntimeError:Error};wasmBinary=[];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":INITIAL_MEMORY/65536})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="vlogFormatter.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["u"];addOnInit(Module["asm"]["r"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){try{var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _environ_sizes_get(penviron_count,penviron_buf_size){try{var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); + + + return Module.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = Module; +else if (typeof define === 'function' && define['amd']) + define([], function() { return Module; }); +else if (typeof exports === 'object') + exports["Module"] = Module; diff --git a/resources/fsm/index.d.ts b/resources/fsm/index.d.ts new file mode 100644 index 0000000..fa77cc5 --- /dev/null +++ b/resources/fsm/index.d.ts @@ -0,0 +1,10 @@ +import type * as vscode from 'vscode'; + +declare module FSM { + export class FsmViewer { + constructor(context: vscode.ExtensionContext); + public open(uri: vscode.Uri); + } +} + +export = FSM; \ No newline at end of file diff --git a/resources/fsm/index.js b/resources/fsm/index.js new file mode 100644 index 0000000..46c1f11 --- /dev/null +++ b/resources/fsm/index.js @@ -0,0 +1,217 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +const fs = require("fs"); +const fspath = require("path"); +const vscode = require("vscode"); +const parse = require("./utils/fsm_parser"); + +function getLanguageId(path) { + let vhdlExtensions = [".vhd",".vhdl",".vho",".vht"]; + let vlogExtensions = [".v",".V",".vh",".vl"]; + let svlogExtensions = [".sv",".SV"]; + let value = fspath.extname(path); + if (vlogExtensions.includes(value)) { + return 'verilog'; + } + else if (svlogExtensions.includes(value)) { + return 'systemverilog'; + } + else if (vhdlExtensions.includes(value)) { + return 'vhdl'; + } + return null; +} + +class FsmViewer { + /** + * + * @param {vscode.ExtensionContext} context + */ + constructor(context) { + this.panel = undefined; + this.sources = []; + this.context = context; + this.rootPath = context.extensionPath.replace(/\\/g, '/'); + } + + /** + * CN: 打开FSM图表的 webview 网页 + * @param {*} uri 指定所需转换为图表的文件uri信息 + */ + open(uri) { + this.current_uri = uri; + const docPath = uri.fsPath.replace(/\\/g, '/'); + if (this.panel === undefined) { + this.create(); + } + this.send(docPath); + } + + async create() { + // Create panel + this.panel = vscode.window.createWebviewPanel( + 'state_machine_viewer', + 'State machine viewer', + vscode.ViewColumn.Two, + { + enableScripts: true + } + ); + this.panel.onDidDispose(() => { + // When the panel is closed, cancel any future updates to the webview content + this.panel = undefined; + }, null, this.context.subscriptions); + // Handle messages from the webview + this.panel.webview.onDidReceiveMessage((message) => { + switch (message.command) { + case 'export': + this.export_as(message.text); + return; + case 'go_to_state': + this.go_to_state(message.stm_index, message.state); + return; + case 'go_to_condition': + this.go_to_condition(message.stm_index, message.transition, message.condition); + return; + } + }, undefined, this.context.subscriptions); + let previewHtml = this.getWebviewContent(this.context); + this.panel.webview.html = previewHtml; + } + + async send(path) { + let languageId = getLanguageId(path); + let content = fs.readFileSync(path, "utf-8"); + let state_machines = await parse(languageId, content); + this.state_machines = state_machines; + this.panel.webview.postMessage({ + command: "update", + svg: state_machines.svg, + stms: state_machines.stm + }); + } + + go_to_state(stm_index, state) { + if (this.state_machines === undefined) { + return; + } + let states = this.state_machines.stm[stm_index].states; + let state_stm; + for (let i = 0; i < states.length; ++i) { + if (states[i].name.replace(/\"/g, '').replace(/\'/g, '') === state) { + state_stm = states[i]; + } + } + if (state_stm !== undefined) { + let start_position = state_stm.start_position; + let end_position = state_stm.end_position; + let pos_1 = new vscode.Position(start_position[0], start_position[1]); + let pos_2 = new vscode.Position(end_position[0], end_position[1]); + vscode.workspace.openTextDocument(this.current_uri).then(doc => { + vscode.window.showTextDocument(doc, vscode.ViewColumn.One).then(editor => { + // Line added - by having a selection at the same position twice, the cursor jumps there + editor.selections = [new vscode.Selection(pos_1, pos_2)]; + // And the visible range jumps there too + var range = new vscode.Range(pos_1, pos_2); + editor.revealRange(range); + }); + }); + } + } + + go_to_condition(stm_index, transition, condition) { + let normalized_condition = this.normalize_string(condition); + let state_origen = transition[0]; + let state_destination = transition[1]; + if (this.state_machines === undefined) { + return; + } + let states = this.state_machines.stm[stm_index].states; + let transition_match; + //Search state + for (let i = 0; i < states.length; ++i) { + if (states[i].name.replace(/\"/g, '').replace(/\'/g, '') === state_origen) { + let transitions = states[i].transitions; + //Search condition + for (let j = 0; j < transitions.length; ++j) { + let normalized_condition_state = this.normalize_string(transitions[j].condition); + if (transitions[j].destination.replace(/\"/g, '').replace(/\'/g, '') === state_destination + && normalized_condition_state === normalized_condition) { + transition_match = transitions[j]; + } + } + } + } + if (transition_match !== undefined) { + if (transition_match.start_position === undefined || transition_match.end_position === undefined) { + return; + } + let start_position = transition_match.start_position; + let end_position = transition_match.end_position; + let pos_1 = new vscode.Position(start_position[0], start_position[1]); + let pos_2 = new vscode.Position(end_position[0], end_position[1]); + vscode.workspace.openTextDocument(this.current_uri).then(doc => { + vscode.window.showTextDocument(doc, vscode.ViewColumn.One).then(editor => { + // Line added - by having a selection at the same position twice, the cursor jumps there + editor.selections = [new vscode.Selection(pos_1, pos_2)]; + // And the visible range jumps there too + var range = new vscode.Range(pos_1, pos_2); + editor.revealRange(range); + }); + }); + } + } + + export_as(type) { + if (type === "svg") { + let filter = { 'svg': ['svg'] }; + vscode.window.showSaveDialog({ filters: filter }).then(fileInfos => { + if ((fileInfos === null || fileInfos === void 0 ? void 0 : fileInfos.path) !== undefined) { + let path_full = this.normalize_path(fileInfos === null || fileInfos === void 0 ? void 0 : fileInfos.path); + let dir_name = fspath.dirname(path_full); + let file_name = fspath.basename(path_full).split('.')[0]; + for (let i = 0; i < this.state_machines.svg.length; ++i) { + let custom_path = `${dir_name}${fspath.sep}${file_name}_${i}.svg`; + fs.writeFileSync(custom_path, this.state_machines.svg[i].svg); + } + vscode.window.showInformationMessage('Documentation has been saved.'); + } + }); + } + else { + console.log("Error export documentation."); + } + } + + normalize_path(path) { + if (path[0] === '/' && require('os').platform() === 'win32') { + return path.substring(1); + } + else { + return path; + } + } + + normalize_string(str) { + let n_string = str.replace(/[^ -~]+/g, ''); + n_string = n_string.replace(/ /g, ''); + n_string = n_string.replace(/\n/g, ''); + return n_string; + } + + getWebviewContent() { + const resource_path = fspath.join(this.rootPath, 'resources', 'fsm', 'view', 'fsm_viewer.html'); + const dir_path = fspath.dirname(resource_path); + + let html = fs.readFileSync(resource_path, 'utf-8'); + html = html.replace(/( { + const absLocalPath = fspath.resolve(dir_path, $2); + const webviewUri = this.panel.webview.asWebviewUri(vscode.Uri.file(absLocalPath)); + const replaceHref = $1 + webviewUri.toString() + '"'; + return replaceHref; + }); + return html; + } +} +module.exports = { + FsmViewer +}; diff --git a/resources/fsm/resources/tree-sitter/tree-sitter-verilog.wasm b/resources/fsm/resources/tree-sitter/tree-sitter-verilog.wasm new file mode 100644 index 0000000..53297f5 Binary files /dev/null and b/resources/fsm/resources/tree-sitter/tree-sitter-verilog.wasm differ diff --git a/resources/fsm/resources/tree-sitter/tree-sitter-vhdl.wasm b/resources/fsm/resources/tree-sitter/tree-sitter-vhdl.wasm new file mode 100644 index 0000000..73d6df9 Binary files /dev/null and b/resources/fsm/resources/tree-sitter/tree-sitter-vhdl.wasm differ diff --git a/resources/fsm/resources/tree-sitter/tree-sitter.wasm b/resources/fsm/resources/tree-sitter/tree-sitter.wasm new file mode 100644 index 0000000..747cd10 Binary files /dev/null and b/resources/fsm/resources/tree-sitter/tree-sitter.wasm differ diff --git a/resources/fsm/utils/fsm_parser.js b/resources/fsm/utils/fsm_parser.js new file mode 100644 index 0000000..8c428a9 --- /dev/null +++ b/resources/fsm/utils/fsm_parser.js @@ -0,0 +1,1958 @@ +const path = require('path'); + +async function get_svg_sm(language, code, comment_symbol) { + if (language === "vhdl") { + let parser = new Paser_fsm_vhdl(comment_symbol); + await parser.init(); + let stm = await parser.get_svg_sm(code); + return stm; + } + else if (language === "verilog" || language === "systemverilog") { + let parser = new Paser_fsm_verilog(comment_symbol); + await parser.init(); + let stm = await parser.get_svg_sm(code); + return stm; + } +} +module.exports = get_svg_sm; + +class Ts_base_parser { + constructor() { + this.command_end_regex = /@end/gm; + } + + search_multiple_in_tree(element, matching_title) { + var arr_match = []; + function recursive_searchTree(element, matching_title) { + let type = element.type; + if (type === matching_title) { + arr_match.push(element); + } else if (element !== null) { + var i; + var result = null; + for (i = 0; result === null && i < element.childCount; i++) { + result = recursive_searchTree(element.child(i), matching_title); + } + return result; + } + return null; + } + recursive_searchTree(element, matching_title); + return arr_match; + } + + search_in_tree(element, matching_title) { + var match = undefined; + function recursive_searchTree(element, matching_title) { + let type = element.type; + if (type === matching_title) { + match = element; + } else if (element !== null) { + var i; + var result = null; + for (i = 0; result === null && i < element.childCount; i++) { + result = recursive_searchTree(element.child(i), matching_title); + if (result !== null) { + break; + } + } + return result; + } + return null; + } + recursive_searchTree(element, matching_title); + return match; + } + + get_item_multiple_from_childs(p, type) { + if (p === undefined) { + return []; + } + let items = []; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === type) { + let item = cursor.currentNode(); + items.push(item); + } + } + while (cursor.gotoNextSibling() === true); + return items; + } + + get_item_from_childs(p, type) { + if (p === undefined) { + return undefined; + } + let item = undefined; + let cursor = p.walk(); + let break_p = false; + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === type) { + item = cursor.currentNode(); + break_p = true; + } + } + while (cursor.gotoNextSibling() === true && break_p === false); + return item; + } + + get_item_from_childs_last(p, type) { + if (p === undefined) { + return undefined; + } + let item = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === type) { + item = cursor.currentNode(); + } + } + while (cursor.gotoNextSibling() === true); + return item; + } + + parse_doxy(dic, file_type) { + if (dic.info === undefined) { + dic.info = {}; + } + // remove any spaces between linefeed and trim the string + let desc_root = dic[file_type]; + // always remove carriage return + desc_root.description = desc_root.description.replace(/\r/gm, ""); + // look for single line commands + const single_line_regex = /^\s*[@\\](file|date|title|custom_section_begin|custom_section_end)\s.+$/gm; + // get all matches for single line attributes + let matches_array = Array.from(desc_root.description.matchAll(single_line_regex)); + // add a new property for the newly found matches + if (matches_array.length > 0) { + dic.info = {}; + // append found matches + for (let index = 0; index < matches_array.length; index++) { + dic.info[matches_array[index][1]] = matches_array[index][0].replace(/^\s*[@\\](file|date|title|custom_section_begin|custom_section_end)/, "").trim(); + } + // clean up the description field + desc_root.description = desc_root.description.replace(single_line_regex, ""); + } + desc_root.description = desc_root.description.replace(/@copyright/gm, "\n@copyright"); + desc_root.description = desc_root.description.replace(/@author/gm, "\n@author"); + desc_root.description = desc_root.description.replace(/@version/gm, "\n@version"); + desc_root.description = desc_root.description.replace(/@project/gm, "\n@project"); + desc_root.description = desc_root.description.replace(/@brief/gm, "\n@brief"); + desc_root.description = desc_root.description.replace(/@details/gm, "\n@details"); + + Doxygen_parser.parse_copyright(dic, desc_root); + Doxygen_parser.parse_author(dic, desc_root); + Doxygen_parser.parse_version(dic, desc_root); + Doxygen_parser.parse_project(dic, desc_root); + Doxygen_parser.parse_brief(dic, desc_root); + Doxygen_parser.parse_details(dic, desc_root); + return dic; + } + + normalize_description(description) { + return description; + let desc_inst = description.replace(/\n\s*\n/g, '
'); + desc_inst = desc_inst.replace(/\n/g, ''); + return desc_inst; + } + + get_comment(comment) { + if (comment === undefined) { + return ''; + } + let txt_comment = comment.slice(2); + if (this.comment_symbol === '') { + return txt_comment; + } + else if (txt_comment[0] === this.comment_symbol) { + return txt_comment.slice(1); + } + return ''; + } + + get_comment_with_break(comment) { + if (comment === undefined) { + return ''; + } + let txt_comment = comment.slice(2); + if (this.comment_symbol === '') { + return txt_comment + '\n'; + } + else if (txt_comment[0] === this.comment_symbol) { + return txt_comment.slice(1) + '\n'; + } + return ''; + } + + set_symbol(symbol) { + if (symbol === undefined) { + this.comment_symbol = ''; + } + else { + this.comment_symbol = symbol; + } + } + + parse_mermaid(dic, file_type) { + // the command regex + const mermaid_regex = /^\s*[@\\]mermaid\s*.*[@\\]end/gms; + // a variable to hold if a mermaid is found and currently opened + let mermaid_open = false; + // easy access to the entity description + let desc_root = dic[file_type]; + // hold the mermaid data + let mermaid = ""; + // always remove carriage return + desc_root.description = desc_root.description.replace(/\r/gm, ""); + let match = desc_root.description.match(mermaid_regex) + if (match !== undefined && match !== null && match.length > 0) { + desc_root.description = desc_root.description.replace(match[0], ""); + mermaid = match[0].replace(/[@\\]mermaid/gm, "") + mermaid = mermaid.replace(/[@\\]end/gm, "") + desc_root.description = desc_root.description.replace("\n\n", "") + dic[file_type]['description'] = desc_root.description + dic[file_type]['mermaid'] = mermaid; + } + return dic; + } + + parse_ports_group(dic) { + + const group_regex = /^\s*[@\\]portgroup\s.*$/gm; + let ports = dic.ports; + // hold the current group name + let group_name = ""; + // flag to check if a group is open + let group_open = false; + // loop along all ports + for (let i = 0; i < ports.length; i++) { + let group = ports[i].description.match(group_regex); + // look for a new group name + if (group !== null && group.length > 0) { + group_open = true; + ports[i].description = ports[i].description.replace(/^\s*[@\\]portgroup\s/gm, ""); + group_name = ports[i].description.match(/^\s*\w+/)[0]; + ports[i].description = ports[i].description.replace(group_name, ""); + } + + ports[i].group = group_name; + } + dic.ports = ports; + return dic; + } + parse_virtual_bus(dic) { + const virtual_bus_regex_followed = /^\s*[@\\]virtualbus\s.*\n\n/gms; + const virtual_bus_regex_not_followed = /^\s*[@\\]virtualbus\s.*/ + const virtual_bus_dir_regex = /^\s*[@\\]dir\s/gm; + const virtual_bus_keep_regex = /^\s*[@\\]keepports\s/gm + // the base struct is used to reset the virtual_bus_struct when needed + const virtual_bus_base_struct = { + "name": "", + "description": "", + "direction": "in", + "keep_ports": false, + "ports": [] + } + let ports = dic.ports; + // hold the indexes that gets removed from the ports list + let ports_to_remove = []; + // holds the current virtual bus and gets filled when a new one is encountered + let virtual_bus_struct = clone(virtual_bus_base_struct); + // holds all the found virtual buses found so for + let virtual_bus_array = []; + // indicates if a virtual bus is found in a port or not + let virtual_bus_open = false; + // loop along all ports + for (let i = 0; i < ports.length; i++) { + // strip description from \r if present to deal with \n exclusively + ports[i].description = ports[i].description.replace(/\r/gm, ""); + + let virtual_bus = ports[i].description.match(virtual_bus_regex_followed); + + if (virtual_bus === null) { + virtual_bus = ports[i].description.match(virtual_bus_regex_not_followed); + } + + if (virtual_bus !== null) { + if (virtual_bus_open) { + // new virtual bus is found and another one was still open, add the old one to the array and clean it + virtual_bus_array.push(clone(virtual_bus_struct)); + virtual_bus_struct = clone(virtual_bus_base_struct); + } + let virtual_bus_description = virtual_bus[0]; + // clean the port description from the found virtual bus command + dic.ports[i].description = ports[i].description.replace(virtual_bus_regex_not_followed, ""); + dic.ports[i].description = ports[i].description.replace(/\n\n/, ""); + dic.ports[i].description = ports[i].description.replace(this.command_end_regex, ""); + // strip virtual bus description from the command part + virtual_bus_description = virtual_bus_description.replace(/^\s*[@\\]virtualbus\s/, ""); + // construct the name and description of virtual bus + let virtual_bus_name = virtual_bus_description.match(/^\s*\w+/); + if (virtual_bus_name !== null) { + virtual_bus_name = virtual_bus_description.match(/^\s*\w+/)[0]; + } + else { + virtual_bus_name = ""; + } + virtual_bus_description = virtual_bus_description.replace(virtual_bus_name, ""); + let virtual_bus_dir = virtual_bus_description.match(virtual_bus_dir_regex); + // look for optional direction + if (virtual_bus_dir !== null && virtual_bus_dir.length > 0) { + virtual_bus_description = virtual_bus_description.replace(virtual_bus_dir[0], ""); + virtual_bus_description = virtual_bus_description.replace(/\n\n/, ""); + virtual_bus_dir = virtual_bus_description.match(/^\s*(out|in)/gm); + if (virtual_bus_dir !== null) { + virtual_bus_description = virtual_bus_description.replace(virtual_bus_dir[0], ""); + virtual_bus_struct.direction = virtual_bus_dir[0].trim(); + } else { + virtual_bus_struct.direction = "in"; + } + } + // look for optional flag to keep in signals in table + let keep_ports = virtual_bus_description.match(virtual_bus_keep_regex); + // look for optional direction + if (keep_ports !== null && keep_ports.length > 0) { + virtual_bus_description = virtual_bus_description.replace(keep_ports[0], ""); + virtual_bus_struct.keep_ports = true; + } + // update the virtual bus struct with the newly found fields + virtual_bus_struct.name = virtual_bus_name; + virtual_bus_struct.description = virtual_bus_description; + // keep the virtual bus opened to add incoming ports + virtual_bus_open = true; + } + + if (virtual_bus_open) { + // copy the port to the newly created virtualbus + virtual_bus_struct.ports.push(clone(ports[i])); + // append current index to be removed + ports_to_remove.push(clone(i)) + } + // remove any added \n to description + dic.ports[i].description = ports[i].description.replace(/\n/, ""); + + if (ports[i].description.match(this.command_end_regex) !== null) { + if (virtual_bus_open) { + virtual_bus_open = false; + for (let i = 0; i < virtual_bus_struct.ports.length; i++) { + virtual_bus_struct.ports[i].description = virtual_bus_struct.ports[i].description.replace(this.command_end_regex, ""); + } + virtual_bus_array.push(clone(virtual_bus_struct)); + virtual_bus_struct = clone(virtual_bus_base_struct); + } + } + } + if (virtual_bus_array.length > 0) { + // append the vbus to the json + dic.virtual_buses = virtual_bus_array; + // remove ports from the list + for (let index = 0; index < ports_to_remove.length; index++) { + const element = ports_to_remove[index]; + dic.ports.splice(element - index, 1) + } + for (let index = 0; index < virtual_bus_array.length; index++) { + const element = virtual_bus_array[index]; + dic.ports.push({ + "name": element.name, + "type": "virtual_bus", + "line": -1, + "direction": element.direction, + "default_value": "", + "description": element.description, + "group": "" + }); + } + } + return dic; + } + +} + +class Parser_fsm_base extends Ts_base_parser { + constructor() { + super(); + } + + check_empty_states_transitions(states) { + let check = true; + for (let i = 0; i < states.length; ++i) { + if (states[i].transitions.length !== 0) { + check = false; + } + } + return check; + } + + check_stm(stm) { + let check = false; + let states = stm.states; + for (let i = 0; i < states.length; ++i) { + let transitions = states[i].transitions; + if (transitions.length > 0) { + return true; + } + } + return check; + } + + json_to_svg(stm_json) { + let stmcat = this.get_smcat(stm_json); + const smcat = require("./state-machine-cat"); + let svg; + try { + console.error = function () { }; + svg = smcat.render(stmcat, { outputType: "svg" }); + } + // eslint-disable-next-line no-empty + catch (e) { } + return svg; + } + + get_smcat(stm_json) { + let sm_states = ''; + let sm_transitions = ''; + + let states = stm_json.states; + let state_names = []; + for (let i = 0; i < states.length; ++i) { + if (states[i].transitions.length === 0) { + state_names.push(states[i].name); + } + } + let emptys = []; + for (let i = 0; i < state_names.length; ++i) { + let empty = true; + for (let j = 0; j < states.length; ++j) { + for (let m = 0; m < states[j].transitions.length; ++m) { + if (states[j].transitions[m].destination === state_names[i]) { + empty = false; + } + } + } + if (empty === true) { + emptys.push(state_names[i]); + } + } + + let gosth = []; + state_names = []; + for (let i = 0; i < states.length; ++i) { + state_names.push(states[i].name); + } + for (let j = 0; j < states.length; ++j) { + for (let m = 0; m < states[j].transitions.length; ++m) { + if (state_names.includes(states[j].transitions[m].destination) === false) { + let element = { 'name': states[j].transitions[m].destination, 'transitions': [] }; + stm_json.states.push(element); + gosth.push(states[j].transitions[m].destination); + } + } + } + let num_states = stm_json.states.length; + stm_json.states.forEach(function (i_state, i) { + let transitions = i_state.transitions; + let state_name = i_state.name; + if (emptys.includes(state_name) === true || gosth.includes(state_name) === true) { + sm_states += `${state_name} [color="red"]`; + } + else { + sm_states += `${state_name}`; + } + if (i !== num_states - 1) { + sm_states += ','; + } + else { + sm_states += ';\n'; + } + if (gosth.includes(state_name) !== true) { + transitions.forEach(function (i_transition, j) { + if (gosth.includes(i_transition.destination) === true) { + sm_transitions += + `${state_name} => ${i_transition.destination} [color="red"] : ${i_transition.condition};\n`; + } + else { + sm_transitions += `${state_name} => ${i_transition.destination} : ${i_transition.condition};\n`; + } + }); + } + }); + let str_stm = stm_json.state_variable_name + "{\n" + sm_states + sm_transitions + "\n};"; + return str_stm; + } + + only_unique(value, index, self) { + return self.indexOf(value) === index; + } + + get_comment(comment) { + if (comment === undefined) { + return ''; + } + let txt_comment = comment.slice(2); + if (this.comment_symbol === '') { + return txt_comment + '\n'; + } + else if (txt_comment[0] === this.comment_symbol) { + return txt_comment.slice(1).trim() + '\n'; + } + return ''; + } + + set_symbol(symbol) { + if (symbol === undefined) { + this.comment_symbol = ''; + } + else { + this.comment_symbol = symbol; + } + } + +} + +class Paser_fsm_verilog extends Parser_fsm_base { + constructor(comment_symbol, parser) { + super(); + this.set_symbol(comment_symbol); + if (parser !== undefined) { + this.parser = parser; + this.loaded_wasm = true; + } + } + + set_comment_symbol(comment_symbol) { + this.set_symbol(comment_symbol); + } + + async init() { + if (this.loaded_wasm !== true) { + try { + const Parser = require('./tree-sitter'); + await Parser.init(); + this.parser = new Parser(); + let Lang = await Parser.Language.load(path.join( + path.dirname(__dirname), + path.sep + "resources" + + path.sep + "tree-sitter" + + path.sep + "tree-sitter-verilog.wasm")); + this.parser.setLanguage(Lang); + this.loaded_wasm = true; + } + catch (e) { } + } + } + + async get_svg_sm(code, comment_symbol) { + this.set_symbol(comment_symbol); + let process; + try { + const tree = this.parser.parse(code); + process = this.get_process(tree); + } + catch (e) { + return { 'svg': [], 'stm': [] }; + } + let stm = []; + let svg = []; + for (let i = 0; i < process.length; ++i) { + let states; + try { + states = this.get_process_info(process[i]); + } + catch (e) { + states = undefined; + } + if (states !== undefined) { + for (let j = 0; j < states.length; ++j) { + if (this.check_stm(states[j]) === true) { + stm.push(states[j]); + let svg_tmp = this.json_to_svg(states[j]); + let stm_tmp = { + 'svg': svg_tmp, + 'description': states[j].description + }; + svg.push(stm_tmp); + } + } + } + } + return { 'svg': svg, 'stm': stm }; + } + + get_process(tree) { + let process_array = []; + let arch_body = this.get_architecture_body(tree); + let cursor = arch_body.walk(); + let comments = ''; + // Process + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'module_or_generate_item') { + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'always_construct') { + let process = { + 'code': this.get_deep_process(cursor.currentNode()), + 'comments': comments.trim() + }; + process_array.push(process); + comments = ''; + } + else { + comments = ''; + } + } + while (cursor.gotoNextSibling() !== false); + cursor.gotoParent(); + } + else if (cursor.nodeType === 'comment') { + comments += this.get_comment(cursor.nodeText); + } + else { + comments = ''; + } + } + while (cursor.gotoNextSibling() !== false); + return process_array; + } + + get_deep_process(p) { + let statement = this.get_item_from_childs(p, 'statement'); + let statement_item = this.get_item_from_childs(statement, 'statement_item'); + let procedural_timing_control_statement = + this.get_item_from_childs(statement_item, 'procedural_timing_control_statement'); + if (procedural_timing_control_statement === undefined) { + let seq_block = this.get_item_from_childs(statement_item, 'seq_block'); + return seq_block; + } + let statement_or_null = this.get_item_from_childs(procedural_timing_control_statement, 'statement_or_null'); + let statement_2 = this.get_item_from_childs(statement_or_null, 'statement'); + let statement_item_2 = this.get_item_from_childs(statement_2, 'statement_item'); + let seq_block = this.get_item_from_childs(statement_item_2, 'seq_block'); + if (seq_block === undefined) { + let cond_statement = this.get_item_from_childs(statement_item_2, 'conditional_statement'); + return cond_statement; + } + + return seq_block; + } + + get_architecture_body(p) { + let break_p = false; + let arch_body = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'module_declaration') { + arch_body = cursor.currentNode(); + break_p = true; + } + } + while (cursor.gotoNextSibling() === true && break_p === false); + return arch_body; + } + + get_process_info(proc) { + let stms = []; + + let p = proc.code; + let name = this.get_process_label(p); + let case_statements = this.get_case_process(p); + for (let i = 0; i < case_statements.length; ++i) { + let description = proc.comments; + let p_info = { + 'description': description.replace('fsm_extract', ''), + 'name': '', + 'state_variable_name': '', + 'states': [] + }; + p_info.name = name; + if (case_statements !== undefined && case_statements.length !== 0) { + p_info.state_variable_name = this.get_state_variable_name(case_statements[i]); + p_info.states = this.get_states(case_statements[i], p_info.state_variable_name); + let check = this.check_empty_states_transitions(p_info.states); + if (check === true) { + let result = this.force_case_stm(case_statements[i]); + p_info.state_variable_name = result.variable_name; + p_info.states = result.states; + } + stms.push(p_info); + } + } + return stms; + } + + ////////////////////////////////////////////////////////////////////////////// + // Force + ////////////////////////////////////////////////////////////////////////////// + force_case_stm(p) { + let state_names = this.get_state_names_from_case(p); + let state_name_candidate = this.search_state_variable_candidates(p, state_names); + let states = this.get_states(p, state_name_candidate); + return { 'variable_name': state_name_candidate, 'states': states }; + } + + get_state_names_from_case(p) { + let state_names = []; + let state_names_case = this.search_multiple_in_tree(p, 'case_item_expression'); + for (let i = 0; i < state_names_case.length; ++i) { + state_names.push(state_names_case[i].text); + } + return state_names; + } + + search_state_variable_candidates(p, state_names) { + let candidates = []; + let signals = this.search_multiple_in_tree(p, 'blocking_assignment'); + for (let i = 0; i < signals.length; ++i) { + let rigth = this.get_rigth_simple_waveform_assignment(signals[i]); + if (rigth !== undefined) { + let left = this.get_left_simple_waveform_assignment(signals[i]); + if (state_names.includes(rigth) === true) { + candidates.push(left); + } + } + } + + let variables = this.search_multiple_in_tree(p, 'nonblocking_assignment'); + for (let i = 0; i < variables.length; ++i) { + let rigth = this.get_rigth_simple_variable_assignment(variables[i]); + if (rigth !== undefined) { + let left = this.get_rigth_simple_variable_assignment(variables[i]); + if (state_names.includes(rigth) === true) { + candidates.push(left); + } + } + } + let unique = this.mode(candidates); + return unique; + } + + mode(array) { + if (array.length == 0) + return null; + var mode_map = {}; + var max_el = array[0], max_count = 1; + for (var i = 0; i < array.length; i++) { + var el = array[i]; + if (mode_map[el] == null) + mode_map[el] = 1; + else + mode_map[el]++; + if (mode_map[el] > max_count) { + max_el = el; + max_count = mode_map[el]; + } + } + return max_el; + } + ////////////////////////////////////////////////////////////////////////////// + + get_states(p, state_variable_name) { + let case_items = this.get_item_multiple_from_childs(p, 'case_item'); + let case_state = []; + for (let i = 0; i < case_items.length; ++i) { + let state = { + 'name': '', + 'transitions': [], + 'start_position': [], + 'end_position': [] + }; + let result = this.get_item_from_childs(case_items[i], 'case_item_expression'); + if (result !== undefined && result.text !== 'default') { + state.name = result.text; + state.start_position = [result.startPosition.row, result.startPosition.column]; + state.end_position = [result.endPosition.row, result.endPosition.column]; + state.transitions = this.get_transitions(case_items[i], state_variable_name); + + case_state.push(state); + } + } + return case_state; + } + + get_transitions(p, state_variable_name, metacondition) { + let assign_transitions = []; + let if_transitions = []; + let last_transitions = []; + let transitions = []; + let skip = false; + let last = 0; + + let statement_or_null; + if (p.type !== 'statement_or_null') { + statement_or_null = this.get_item_from_childs(p, 'statement_or_null'); + } + else { + statement_or_null = p.walk().currentNode(); + } + let statement = this.get_item_from_childs(statement_or_null, 'statement'); + let statement_item = this.get_item_from_childs(statement, 'statement_item'); + let seq_block = this.get_item_from_childs(statement_item, 'seq_block'); + let itera_item = []; + if (seq_block === undefined) { + itera_item = [statement_item]; + skip = true; + } + else { + itera_item = this.get_item_multiple_from_childs(seq_block, 'statement_or_null'); + } + for (let i = 0; i < itera_item.length; ++i) { + let statement_item_2 = itera_item[i]; + if (skip === false) { + let statement_2 = this.get_item_from_childs(itera_item[i], 'statement'); + statement_item_2 = this.get_item_from_childs(statement_2, 'statement_item'); + } + //Search if + let type; + let block; + let if_statement = this.get_item_from_childs(statement_item_2, 'conditional_statement'); + if (if_statement === undefined) { + //Search assignment + let assign_statement = this.get_item_from_childs(statement_item_2, 'blocking_assignment'); + if (assign_statement !== undefined) { + type = 'simple_waveform_assignment'; + block = assign_statement; + } + else { + let nonassign_statement = this.get_item_from_childs(statement_item_2, 'nonblocking_assignment'); + if (nonassign_statement !== undefined) { + type = 'simple_waveform_assignment'; + block = nonassign_statement; + } + } + } + else { + type = 'if_statement'; + block = if_statement; + } + + if (type === 'if_statement') { + let tmp_transitions = this.get_if_transitions(block, state_variable_name, metacondition); + if_transitions = if_transitions.concat(tmp_transitions); + last = 0; + } + else if (type === 'simple_waveform_assignment') { + let tmp_transitions = this.get_assignament_transitions(block, state_variable_name, metacondition); + if (tmp_transitions.length !== 0 && tmp_transitions !== undefined) { + assign_transitions = tmp_transitions; + last_transitions = tmp_transitions; + last = 1; + } + } + } + + if (last === 1) { + transitions = last_transitions; + } + else { + transitions = if_transitions.concat(assign_transitions); + } + return transitions; + } + + get_if_transitions(p, state_variable_name, metacondition) { + let transitions = []; + let ifs = this.get_if_elsif_else(p); + //Set else condition + let conditions = []; + let else_condition = ''; + for (let i = 0; i < ifs.length; ++i) { + let condition = ifs[i].condition; + if (condition !== '' && conditions.includes(condition) === false) { + else_condition += `not (${condition})\n`; + } + else { + let tmp_condition = else_condition.slice(0, -1); + //Remove duplicate conditions + let current_conditions = tmp_condition.split('\n'); + let unique = current_conditions.filter(this.only_unique); + let condition_tmp = ''; + for (let i = 0; i < unique.length - 1; ++i) { + condition_tmp += unique[i] + '\n'; + } + condition_tmp += unique[unique.length - 1] + '\n'; + condition = condition_tmp; + ifs[i].condition = condition; + } + conditions.push(condition); + } + + for (let i = 0; i < ifs.length; ++i) { + let transition = this.get_transition(ifs[i], state_variable_name, metacondition); + if (transition !== undefined) { + transitions = transitions.concat(transition); + } + } + return transitions; + } + + get_if_elsif_else(p) { + let ifs = []; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'else') { + let break_p = false; + while (break_p === false && cursor.gotoNextSibling() !== false) { + if (cursor.nodeType === 'statement_or_null') { + let item = this.get_item_from_childs(cursor.currentNode(), 'statement'); + let statement_item = this.get_item_from_childs(item, 'statement_item'); + + let block_item = this.get_item_from_childs(statement_item, 'seq_block'); + if (block_item !== undefined) { + item = this.get_item_from_childs(block_item, 'statement_or_null'); + item = this.get_item_from_childs(item, 'statement'); + statement_item = this.get_item_from_childs(item, 'statement_item'); + } + item = this.get_item_from_childs(statement_item, 'conditional_statement'); + if (item !== undefined) { + let tmp_ifs = this.get_if_elsif_else(item); + ifs = ifs.concat(tmp_ifs); + } + else { + let if_item_else = { + 'condition': '', + 'code': '', + 'start_position': '', + 'end_position': '' + }; + + let blocking_assignment = this.get_item_from_childs(statement_item, 'blocking_assignment'); + if (blocking_assignment !== undefined) { + if (block_item !== undefined) { + if_item_else.code = block_item; + // if_item_else.start_position = start_position; + // if_item_else.end_position = end_position; + } + else { + if_item_else.code = statement_item; + // if_item_else.start_position = start_position; + // if_item_else.end_position = end_position; + } + ifs.push(if_item_else); + } + else { + let nonblocking_assignment = this.get_item_from_childs(statement_item, 'nonblocking_assignment'); + if (nonblocking_assignment !== undefined) { + if (block_item !== undefined) { + if_item_else.code = block_item; + // if_item_else.start_position = start_position; + // if_item_else.end_position = end_position; + } + else { + if_item_else.code = statement_item; + // if_item_else.start_position = start_position; + // if_item_else.end_position = end_position; + } + ifs.push(if_item_else); + } + } + } + } + } + } + else if (cursor.nodeType === 'if') { + let break_p = false; + let if_item = { + 'condition': '', + 'code': '' + }; + while (break_p === false && cursor.gotoNextSibling() !== false) { + if (cursor.nodeType === 'cond_predicate') { + let item = this.get_item_from_childs(cursor.currentNode(), 'expression_or_cond_pattern'); + if (item !== undefined) { + if_item.condition = item.text; + if_item.start_position = item.startPosition; + if_item.end_position = item.endPosition; + } + } + else if (cursor.nodeType === 'statement_or_null') { + let item = this.get_item_from_childs(cursor.currentNode(), 'statement'); + item = this.get_item_from_childs(item, 'statement_item'); + if (this.get_item_from_childs(item, 'seq_block') !== undefined) { + item = this.get_item_from_childs(item, 'seq_block'); + if_item.start_position = item.startPosition; + if_item.end_position = item.endPosition; + // item = this.get_item_from_childs(item, 'statement_or_null'); + // item = this.get_item_from_childs(item, 'statement'); + // item = this.get_item_from_childs(item, 'statement_item'); + } + if_item.code = item; + break_p = true; + ifs.push(if_item); + } + } + } + } + while (cursor.gotoNextSibling() !== false); + return ifs; + } + + get_assignament_transitions(p, state_variable_name, metacondition) { + let transitions = []; + + let tmp_destination = this.check_get_simple_waveform_assignment(p, state_variable_name); + if (tmp_destination !== undefined) { + let s_position = p.startPosition; + let e_position = p.endPosition; + let start_position = [s_position.row, e_position.column - 1]; + let end_position = [e_position.row, e_position.column]; + + let condition = ''; + if (metacondition !== '' && metacondition !== undefined) { + condition = metacondition; + } + + let destination = tmp_destination; + let transition = { + 'condition': condition, + 'destination': destination, + 'start_position': start_position, + 'end_position': end_position + }; + transitions.push(transition); + } + return transitions; + } + + get_transition(p, state_variable_name, metacondition) { + let condition = p.condition; + let tmp_start_position = p.start_position; + let tmp_end_position = p.end_position; + + let start_position = [tmp_start_position.row, tmp_start_position.column]; + let end_position = [tmp_end_position.row, tmp_end_position.column]; + let transitions = this.get_transitions_in_if(p.code, state_variable_name, + condition, start_position, end_position, metacondition); + return transitions; + } + + get_start_position_array(p) { + let tmp_position = p.code.startPosition; + return tmp_position; + } + + get_end_position_array(p) { + let tmp_position = p.code.endPosition; + return tmp_position; + } + + get_transitions_in_if(p, state_variable_name, condition, start_position, end_position, metacondition) { + let last = 0; + let last_transitions = []; + //if transitions + let if_transitions = []; + //assign transitions + let assign_transitions = []; + let transitions = []; + let destination = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'blocking_assignment' || cursor.nodeType === 'nonblocking_assignment') { + let tmp_destination = this.check_get_simple_waveform_assignment(cursor.currentNode(), state_variable_name); + if (tmp_destination !== undefined) { + destination = tmp_destination; + if (condition !== undefined && destination !== undefined) { + let transition = { + 'condition': '', + 'destination': '', + 'start_position': start_position, + 'end_position': end_position + }; + if (metacondition !== undefined && metacondition !== '') { + condition += `\n${metacondition}`; + let current_conditions = condition.split('\n'); + let unique = current_conditions.filter(this.only_unique); + let condition_tmp = ''; + for (let i = 0; i < unique.length - 1; ++i) { + condition_tmp += unique[i] + '\n'; + } + condition_tmp += unique[unique.length - 1] + '\n'; + condition = condition_tmp; + } + + transition.condition = condition; + transition.destination = destination; + last = 1; + assign_transitions = [transition]; + last_transitions = [transition]; + } + } + } + else if (cursor.nodeType === 'simple_variable_assignment') { + let tmp_destination = this.check_get_simple_variable_assignment(cursor.currentNode(), state_variable_name); + if (tmp_destination !== undefined) { + destination = tmp_destination; + if (condition !== undefined && destination !== undefined) { + let transition = { + 'condition': '', + 'destination': '', + 'start_position': start_position, + 'end_position': end_position + }; + if (metacondition !== undefined && metacondition !== '') { + condition += `\n${metacondition}`; + let current_conditions = condition.split('\n'); + let unique = current_conditions.filter(this.only_unique); + let condition_tmp = ''; + for (let i = 0; i < unique.length - 1; ++i) { + condition_tmp += unique[i] + '\n'; + } + condition_tmp += unique[unique.length - 1] + '\n'; + condition = condition_tmp; + } + + transition.condition = condition; + transition.destination = destination; + last = 1; + assign_transitions = [transition]; + last_transitions = [transition]; + } + } + } + else if (cursor.nodeType === 'conditional_statement') { + last = 0; + let if_transitions_tmp = this.get_if_transitions(cursor.currentNode(), state_variable_name, condition); + if_transitions = if_transitions.concat(if_transitions_tmp); + } + else if (cursor.nodeType === 'statement_or_null') { + last = 0; + + //check assignement + let item = this.get_item_from_childs(cursor.currentNode(), 'statement'); + item = this.get_item_from_childs(item, 'statement_item'); + let item_0 = this.get_item_from_childs(item, 'blocking_assignment'); + let item_1 = this.get_item_from_childs(item, 'nonblocking_assignment'); + let if_item = true; + if (item_0 !== undefined || item_1 !== undefined) { + if_item = false; + } + if (metacondition !== undefined && metacondition !== '') { + condition += `\n${metacondition}`; + let current_conditions = condition.split('\n'); + let unique = current_conditions.filter(this.only_unique); + let condition_tmp = ''; + for (let i = 0; i < unique.length - 1; ++i) { + condition_tmp += unique[i] + '\n'; + } + condition_tmp += unique[unique.length - 1] + '\n'; + condition = condition_tmp; + } + + let if_transitions_tmp = []; + //check block if + let item_block_if = this.get_item_from_childs(item, 'conditional_statement'); + if (item_block_if === undefined) { + if_transitions_tmp = this.get_transitions(cursor.currentNode(), state_variable_name, condition); + } + else { + if_transitions_tmp = this.get_if_transitions(item_block_if, state_variable_name, condition); + } + + if (if_item === false) { + if (if_transitions_tmp.length !== 0) { + assign_transitions = if_transitions_tmp; + last_transitions = if_transitions_tmp; + } + } + else { + if_transitions = if_transitions.concat(if_transitions_tmp); + } + + } + } + while (cursor.gotoNextSibling() !== false); + + + if (last !== 0) { + transitions = last_transitions; + } + else { + transitions = if_transitions.concat(assign_transitions); + } + return transitions; + } + + check_get_simple_waveform_assignment(p, state_variable_name) { + let destination = undefined; + let left = this.get_left_simple_waveform_assignment(p); + if (left === state_variable_name) { + destination = this.get_rigth_simple_waveform_assignment(p); + } + return destination; + } + + check_get_simple_variable_assignment(p, state_variable_name) { + let destination = undefined; + let left = this.get_left_simple_waveform_assignment(p); + if (left === state_variable_name) { + destination = this.get_rigth_simple_variable_assignment(p); + } + return destination; + } + + get_left_simple_waveform_assignment(p) { + let left = ''; + let item = this.get_item_from_childs(p, 'operator_assignment'); + item = this.get_item_from_childs(item, 'variable_lvalue'); + if (item !== undefined) { + left = item.text; + } + if (left === '') { + item = this.get_item_from_childs(p, 'variable_lvalue'); + if (item !== undefined) { + left = item.text; + } + } + return left; + } + + get_rigth_simple_waveform_assignment(p) { + let rigth = undefined; + let item = this.get_item_from_childs(p, 'operator_assignment'); + item = this.get_item_from_childs(item, 'expression'); + if (item !== undefined) { + rigth = item.text; + } + if (rigth === undefined) { + item = this.get_item_from_childs(p, 'expression'); + if (item !== undefined) { + rigth = item.text; + } + } + return rigth; + } + + get_rigth_simple_variable_assignment(p) { + let rigth = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'simple_name') { + rigth = cursor.nodeText; + } + } + while (cursor.gotoNextSibling() !== false); + return rigth; + } + + get_state_variable_name(p) { + let state_variable_name = undefined; + let case_expression = this.get_item_from_childs(p, 'case_expression'); + if (case_expression !== undefined) { + state_variable_name = case_expression.text; + } + return state_variable_name; + } + + get_case_process(p) { + let case_statement = this.search_multiple_in_tree(p, 'case_statement'); + return case_statement; + } + + get_process_label(p) { + let label_txt = ''; + let label = this.get_item_from_childs(p, "block_identifier"); + if (label === undefined) { + label_txt = '' + } + else { + label_txt = label.text; + } + return label_txt; + } +} + +class Paser_fsm_vhdl extends Parser_fsm_base { + constructor(comment_symbol, parser) { + super(); + this.set_symbol(comment_symbol); + if (parser !== undefined) { + this.parser = parser; + this.loaded_wasm = true; + } + } + + async init() { + if (this.loaded_wasm !== true) { + try { + const Parser = require('./tree-sitter'); + await Parser.init(); + this.parser = new Parser(); + let Lang = await + Parser.Language.load(path.join( + path.dirname(__dirname), + path.sep + "resources" + + path.sep + "tree-sitter" + + path.sep + "tree-sitter-vhdl.wasm")); + this.parser.setLanguage(Lang); + this.loaded_wasm = true; + } catch (e) { } + } + } + + set_comment_symbol(comment_symbol) { + this.set_symbol(comment_symbol); + } + + async get_svg_sm(code, comment_symbol) { + this.set_comment_symbol(comment_symbol); + + let process; + let tree; + try { + tree = this.parser.parse(code); + process = this.get_process(tree); + } catch (e) { + return { 'svg': [], 'stm': [] }; + } + let stm = []; + let svg = []; + for (let i = 0; i < process.length; ++i) { + let states; + try { + states = this.get_process_info(process[i]); + } catch (e) { + states = undefined; + } + if (states !== undefined) { + for (let j = 0; j < states.length; ++j) { + if (this.check_stm(states[j]) === true) { + stm.push(states[j]); + let svg_tmp = this.json_to_svg(states[j]); + let stm_tmp = { + 'svg': svg_tmp, + 'description': states[j].description + }; + svg.push(stm_tmp); + } + } + } + } + return { 'svg': svg, 'stm': stm }; + } + + get_process(tree) { + let process_array = []; + let arch_body = this.get_architecture_body(tree); + let cursor = arch_body.walk(); + let comments = ''; + // Process + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'process_statement') { + let process = { + 'code': cursor.currentNode(), + 'comments': comments + }; + process_array.push(process); + comments = ''; + } else if (cursor.nodeType === 'comment') { + comments += this.get_comment(cursor.nodeText); + } else { + comments = ''; + } + } + while (cursor.gotoNextSibling() !== false); + return process_array; + } + + get_architecture_body(p) { + let cursor = p.walk(); + let item = this.get_item_multiple_from_childs(cursor.currentNode(), 'design_unit'); + if (item.length === 2) { + item = this.get_item_from_childs(item[1], 'architecture_body'); + item = this.get_item_from_childs(item, 'concurrent_statement_part'); + return item; + } else { + return undefined; + } + } + + get_process_info(proc) { + let stms = []; + + let p = proc.code; + let name = this.get_process_label(p); + let case_statements = this.get_case_process(p); + for (let i = 0; i < case_statements.length; ++i) { + let description = proc.comments; + let p_info = { + 'description': description.replace('fsm_extract', ''), + 'name': '', + 'state_variable_name': '', + 'states': [] + }; + p_info.name = name; + if (case_statements !== undefined && case_statements.length !== 0) { + p_info.state_variable_name = this.get_state_variable_name(case_statements[i]); + p_info.states = this.get_states(case_statements[i], p_info.state_variable_name); + let check = this.check_empty_states_transitions(p_info.states); + if (check === true) { + let result = this.force_case_stm(case_statements[i]); + p_info.state_variable_name = result.variable_name; + p_info.states = result.states; + } + stms.push(p_info); + } + } + return stms; + } + + force_case_stm(p) { + let state_names = this.get_state_names_from_case(p).map(v => v.toLowerCase()); + let state_name_candidate = this.search_state_variable_candidates(p, state_names); + let states = this.get_states(p, state_name_candidate); + return { 'variable_name': state_name_candidate, 'states': states }; + } + + search_state_variable_candidates(p, state_names) { + let candidates = []; + let signals = this.search_multiple_in_tree(p, 'simple_waveform_assignment'); + for (let i = 0; i < signals.length; ++i) { + let rigth = this.get_item_from_childs(signals[i], 'waveforms'); + if (rigth !== undefined) { + let rigth_text = rigth.text.toLowerCase(); + let left = this.get_left_simple_waveform_assignment(signals[i]); + if (state_names.includes(rigth_text) === true) { + candidates.push(left); + } + } + } + + let variables = this.search_multiple_in_tree(p, 'simple_variable_assignment'); + for (let i = 0; i < variables.length; ++i) { + let rigth = this.get_item_from_childs(variables[i], 'waveforms'); + if (rigth === undefined) { + rigth = this.get_item_from_childs_last(variables[i], 'simple_name'); + } + if (rigth !== undefined) { + let rigth_text = rigth.text.toLowerCase(); + let left = this.get_left_simple_waveform_assignment(variables[i]); + if (state_names.includes(rigth_text) === true) { + candidates.push(left); + } + } + } + let unique = this.mode(candidates); + return unique; + } + + mode(array) { + if (array.length === 0) { + return null; + } + var mode_map = {}; + var max_el = array[0], + max_count = 1; + for (var i = 0; i < array.length; i++) { + var el = array[i]; + if (mode_map[el] == null) { + mode_map[el] = 1; + } else { + mode_map[el]++; + } + if (mode_map[el] > max_count) { + max_el = el; + max_count = mode_map[el]; + } + } + return max_el; + } + + get_state_names_from_case(p) { + let state_names = []; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'case_statement_alternative') { + let result = this.get_state_name(cursor.currentNode()); + let name = result.state_name; + state_names.push(name); + } + } + while (cursor.gotoNextSibling() !== false); + return state_names; + } + + + + get_states(p, state_variable_name) { + let case_state = []; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'case_statement_alternative') { + let state = { + 'name': '', + 'transitions': [], + 'start_position': [], + 'end_position': [] + }; + let result = this.get_state_name(cursor.currentNode()); + let name = result.state_name; + if (name !== undefined && name.toLocaleLowerCase() !== 'others') { + state.name = result.state_name; + state.start_position = result.start_position; + state.end_position = result.end_position; + state.transitions = this.get_transitions(cursor.currentNode(), state_variable_name); + + case_state.push(state); + } + } + } + while (cursor.gotoNextSibling() !== false); + return case_state; + } + + get_transitions(p, state_variable_name) { + let transitions = []; + let cursor = p.walk(); + let last = 0; + let last_transitions = []; + //if transitions + let if_transitions = []; + //assign transitions + let assign_transitions = []; + + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'sequence_of_statements') { + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'if_statement') { + let tmp_transitions = this.get_if_transitions(cursor.currentNode(), state_variable_name); + if_transitions = if_transitions.concat(tmp_transitions); + last = 0; + } else if (cursor.nodeType === 'simple_waveform_assignment') { + let tmp_transitions = this.get_assignament_transitions( + cursor.currentNode(), state_variable_name); + if (tmp_transitions.length !== 0 && tmp_transitions !== undefined) { + assign_transitions = tmp_transitions; + last_transitions = tmp_transitions; + last = 1; + } + } else if (cursor.nodeType === 'simple_variable_assignment') { + let tmp_transitions = this.get_assignament_variable_transitions( + cursor.currentNode(), state_variable_name); + if (tmp_transitions.length !== 0 && tmp_transitions !== undefined) { + assign_transitions = tmp_transitions; + last_transitions = tmp_transitions; + last = 1; + } + } else if (cursor.nodeType === 'case_statement') { + let tmp_transitions = this.get_case_transitions(cursor.currentNode(), state_variable_name); + if_transitions = if_transitions.concat(tmp_transitions); + last = 0; + } + } + while (cursor.gotoNextSibling() !== false); + } + } + while (cursor.gotoNextSibling() !== false); + if (last === 1) { + transitions = last_transitions; + } else { + transitions = if_transitions.concat(assign_transitions); + } + return transitions; + } + + get_if_transitions(p, state_variable_name, metacondition) { + let transitions = []; + let cursor = p.walk(); + let else_conditions = ''; + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'elsif' || cursor.nodeType === 'if') { + let if_condition = this.get_condition(cursor.currentNode()); + if (if_condition !== undefined) { + else_conditions += `not (${if_condition.condition})\n`; + } + let transition = this.get_transition(cursor.currentNode(), state_variable_name, metacondition); + if (transition !== undefined) { + transitions = transitions.concat(transition); + } + } else if (cursor.nodeType === 'else') { + if (metacondition !== undefined) { + else_conditions = metacondition + '\n' + else_conditions; + } + let transition = this.get_transition(cursor.currentNode(), state_variable_name, else_conditions); + if (transition !== undefined) { + transitions = transitions.concat(transition); + } + } + } + while (cursor.gotoNextSibling() !== false); + return transitions; + } + + get_case_transitions(p, state_variable_name, metacondition) { + let transitions = []; + let cursor = p.walk(); + let else_conditions = ''; + let case_switch = this.get_item_from_childs(cursor.currentNode(), 'simple_name').text; + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'case_statement_alternative') { + let choice = this.get_item_from_childs(cursor.currentNode(), 'choices'); + let choice_txt = choice.text; + let if_condition = `${case_switch} = ${choice_txt}`; + if (choice_txt.toLocaleLowerCase() === 'others') { + if_condition = else_conditions; + } else if (if_condition !== undefined) { + else_conditions += `not (${if_condition})\n`; + } + let transition = this.get_transition(cursor.currentNode(), + state_variable_name, metacondition, if_condition); + if (transition !== undefined) { + transitions = transitions.concat(transition); + } + } + } + while (cursor.gotoNextSibling() !== false); + return transitions; + } + + get_assignament_transitions(p, state_variable_name) { + let transitions = []; + + let tmp_destination = this.check_get_simple_waveform_assignment(p, state_variable_name); + if (tmp_destination !== undefined) { + let s_position = p.startPosition; + let e_position = p.endPosition; + let start_position = [s_position.row, e_position.column - 1]; + let end_position = [e_position.row, e_position.column]; + + let destination = tmp_destination; + let transition = { + 'condition': '', + 'destination': destination, + 'start_position': start_position, + 'end_position': end_position + }; + transitions.push(transition); + } + return transitions; + } + + get_assignament_variable_transitions(p, state_variable_name) { + let transitions = []; + + let tmp_destination = this.check_get_simple_variable_assignment(p, state_variable_name); + if (tmp_destination !== undefined) { + let s_position = p.startPosition; + let e_position = p.endPosition; + let start_position = [s_position.row, e_position.column - 1]; + let end_position = [e_position.row, e_position.column]; + + let destination = tmp_destination; + let transition = { + 'condition': '', + 'destination': destination, + 'start_position': start_position, + 'end_position': end_position + }; + transitions.push(transition); + } + return transitions; + } + + get_transition(p, state_variable_name, metacondition, choice) { + let result = this.get_condition(p, choice); + let condition = result.condition; + let start_position = result.start_position; + let end_position = result.end_position; + let transitions = this.get_transitions_in_if(p, state_variable_name, + condition, start_position, end_position, metacondition); + return transitions; + } + + get_transitions_in_if(p, state_variable_name, condition, start_position, end_position, metacondition) { + let last = 0; + let last_transitions = []; + //if transitions + let if_transitions = []; + //assign transitions + let assign_transitions = []; + let transitions = []; + let destination = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'sequence_of_statements') { + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'simple_waveform_assignment') { + let tmp_destination = this.check_get_simple_waveform_assignment( + cursor.currentNode(), state_variable_name); + if (tmp_destination !== undefined) { + destination = tmp_destination; + if (condition !== undefined && destination !== undefined) { + let transition = { + 'condition': '', + 'destination': '', + 'start_position': start_position, + 'end_position': end_position + }; + if (metacondition !== undefined && metacondition !== '') { + condition += `\n${metacondition}`; + let current_conditions = condition.split('\n'); + let unique = current_conditions.filter(this.only_unique); + let condition_tmp = ''; + for (let i = 0; i < unique.length - 1; ++i) { + condition_tmp += unique[i] + '\n'; + } + condition_tmp += unique[unique.length - 1] + '\n'; + condition = condition_tmp; + } + transition.condition = condition; + transition.destination = destination; + last = 1; + assign_transitions = [transition]; + last_transitions = [transition]; + } + } + } else if (cursor.nodeType === 'simple_variable_assignment') { + let tmp_destination = this.check_get_simple_variable_assignment( + cursor.currentNode(), state_variable_name); + if (tmp_destination !== undefined) { + destination = tmp_destination; + if (condition !== undefined && destination !== undefined) { + let transition = { + 'condition': '', + 'destination': '', + 'start_position': start_position, + 'end_position': end_position + }; + if (metacondition !== undefined && metacondition !== '') { + condition += `\n${metacondition}`; + let current_conditions = condition.split('\n'); + let unique = current_conditions.filter(this.only_unique); + let condition_tmp = ''; + for (let i = 0; i < unique.length - 1; ++i) { + condition_tmp += unique[i] + '\n'; + } + condition_tmp += unique[unique.length - 1] + '\n'; + condition = condition_tmp; + } + transition.condition = condition; + transition.destination = destination; + last = 1; + assign_transitions = [transition]; + last_transitions = [transition]; + } + } + } else if (cursor.nodeType === 'if_statement') { + if (metacondition !== undefined && metacondition !== '') { + condition += condition + '\n' + metacondition; + } + last = 0; + if_transitions = this.get_if_transitions(cursor.currentNode(), state_variable_name, condition); + } else if (cursor.nodeType === 'case_statement') { + if (metacondition !== undefined && metacondition !== '') { + condition += condition + '\n' + metacondition; + } + last = 0; + if_transitions = this.get_case_transitions(cursor.currentNode(), + state_variable_name, condition); + } + } + while (cursor.gotoNextSibling() !== false); + } + } + while (cursor.gotoNextSibling() !== false); + if (last !== 0) { + transitions = last_transitions; + } else { + transitions = if_transitions.concat(assign_transitions); + } + return transitions; + } + + check_get_simple_waveform_assignment(p, state_variable_name) { + let destination = undefined; + if (state_variable_name === undefined) { + return destination; + } + if (this.get_left_simple_waveform_assignment(p).toLowerCase() === state_variable_name.toLowerCase()) { + destination = this.get_rigth_simple_waveform_assignment(p); + } + return destination; + } + + check_get_simple_variable_assignment(p, state_variable_name) { + let destination = undefined; + if (state_variable_name === undefined) { + return destination; + } + if (this.get_left_simple_waveform_assignment(p).toLowerCase() === state_variable_name.toLowerCase()) { + destination = this.get_rigth_simple_variable_assignment(p); + } + return destination; + } + + get_left_simple_waveform_assignment(p) { + let left = 'undefined'; + let cursor = p.walk(); + let break_p = false; + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'simple_name') { + left = cursor.nodeText; + break_p = true; + } else if (cursor.nodeType === 'selected_name') { + left = cursor.nodeText.split('.'); + left = left[left.length - 1]; + break_p = true; + } + } + while (cursor.gotoNextSibling() !== false && break_p === false); + return left; + } + + get_rigth_simple_waveform_assignment(p) { + let rigth = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'waveforms') { + rigth = cursor.nodeText.split(/(\s)/)[0].trim(); + } + } + while (cursor.gotoNextSibling() !== false); + return rigth; + } + + get_rigth_simple_variable_assignment(p) { + let rigth = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'simple_name') { + rigth = cursor.nodeText.split(/(\s)/)[0].trim(); + } + } + while (cursor.gotoNextSibling() !== false); + return rigth; + } + + get_condition(p, choice) { + let condition = ''; + let cursor = p.walk(); + let start_position = []; + let end_position = []; + let s_position = cursor.startPosition; + let e_position = cursor.endPosition; + start_position = [s_position.row, s_position.column]; + end_position = [e_position.row, e_position.column]; + + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'relation' || cursor.nodeType === 'logical_expression' || + cursor.nodeType === 'parenthesized_expression') { + if (cursor.nodeType === 'parenthesized_expression') { + condition = this.get_relation_of_parenthesized_expression(cursor.currentNode()); + } else { + condition = cursor.nodeText; + } + s_position = cursor.startPosition; + e_position = cursor.endPosition; + start_position = [s_position.row, s_position.column]; + end_position = [e_position.row, e_position.column]; + } else if (cursor.nodeType === 'choices') { + condition = choice; + s_position = cursor.startPosition; + e_position = cursor.endPosition; + start_position = [s_position.row, s_position.column]; + end_position = [e_position.row, e_position.column]; + } + if (cursor.nodeType === 'else') { + s_position = cursor.startPosition; + e_position = cursor.endPosition; + start_position = [s_position.row, s_position.column]; + end_position = [e_position.row, e_position.column]; + } + } + while (cursor.gotoNextSibling() !== false); + return { + 'condition': condition, + 'start_position': start_position, + 'end_position': end_position + }; + } + + get_relation_of_parenthesized_expression(p) { + let relation = undefined; + let cursor = p.walk(); + let break_p = false; + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'relation' || cursor.nodeType === 'logical_expression') { + relation = cursor.nodeText; + break_p = true; + } + } + while (cursor.gotoNextSibling() !== false && break_p === false); + return relation; + } + + get_state_name(p) { + let state_name = undefined; + let start_position = []; + let end_position = []; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'choices') { + let s_position = cursor.startPosition; + let e_position = cursor.endPosition; + start_position = [s_position.row, s_position.column]; + end_position = [e_position.row, e_position.column]; + state_name = cursor.nodeText; + } + } + while (cursor.gotoNextSibling() !== false); + return { 'state_name': state_name, 'start_position': start_position, 'end_position': end_position }; + } + + + get_state_variable_name(p) { + let state_variable_name = undefined; + let cursor = p.walk(); + cursor.gotoFirstChild(); + do { + if (cursor.nodeType === 'simple_name') { + state_variable_name = cursor.nodeText; + } else if (cursor.nodeType === 'parenthesized_expression') { + state_variable_name = cursor.nodeText.replace('(', '').replace(')', ''); + } + } + while (cursor.gotoNextSibling() !== false); + return state_variable_name; + } + + get_case_process(p) { + let case_statement = this.search_multiple_in_tree(p, 'case_statement'); + return case_statement; + } + + + get_process_label(p) { + let label = ''; + let cursor = p.walk(); + //Process label + cursor.gotoFirstChild(); + if (cursor.nodeType === 'label') { + cursor.gotoFirstChild(); + label = cursor.nodeText; + } + return label; + } +} + diff --git a/resources/fsm/utils/state-machine-cat.js b/resources/fsm/utils/state-machine-cat.js new file mode 100644 index 0000000..69efd4b --- /dev/null +++ b/resources/fsm/utils/state-machine-cat.js @@ -0,0 +1,2 @@ +/*! For license information please see state-machine-cat.js.LICENSE.txt */ +module.exports=(()=>{var e={6447:(e,A,r)=>{"use strict";var i=r(2424),a=r(2877),t=r(7260),n=r(5929),f=r(9741),l=r(8495),s=r(9702),c=r(7473),o=r(7126);e.exports=d,d.prototype.validate=function(e,A){var r;if("string"==typeof e){if(!(r=this.getSchema(e)))throw new Error('no schema with key or ref "'+e+'"')}else{var i=this._addSchema(e);r=i.validate||this._compile(i)}var a=r(A);return!0!==r.$async&&(this.errors=r.errors),a},d.prototype.compile=function(e,A){var r=this._addSchema(e,void 0,A);return r.validate||this._compile(r)},d.prototype.addSchema=function(e,A,r,i){if(Array.isArray(e)){for(var t=0;t{"use strict";var A=e.exports=function(){this._cache={}};A.prototype.put=function(e,A){this._cache[e]=A},A.prototype.get=function(e){return this._cache[e]},A.prototype.del=function(e){delete this._cache[e]},A.prototype.clear=function(){this._cache={}}},6583:(e,A,r)=>{"use strict";var i=r(9622).MissingRef;e.exports=function e(A,r,a){var t=this;if("function"!=typeof this._opts.loadSchema)throw new Error("options.loadSchema should be a function");"function"==typeof r&&(a=r,r=void 0);var n=f(A).then((function(){var e=t._addSchema(A,void 0,r);return e.validate||l(e)}));return a&&n.then((function(e){a(null,e)}),a),n;function f(A){var r=A.$schema;return r&&!t.getSchema(r)?e.call(t,{$ref:r},!0):Promise.resolve()}function l(e){try{return t._compile(e)}catch(A){if(A instanceof i)return function(A){var i=A.missingSchema;if(s(i))throw new Error("Schema "+i+" is loaded but "+A.missingRef+" cannot be resolved");var a=t._loadingSchemas[i];return a||(a=t._loadingSchemas[i]=t._opts.loadSchema(i)).then(n,n),a.then((function(e){if(!s(i))return f(e).then((function(){s(i)||t.addSchema(e,i,void 0,r)}))})).then((function(){return l(e)}));function n(){delete t._loadingSchemas[i]}function s(e){return t._refs[e]||t._schemas[e]}}(A);throw A}}}},9622:(e,A,r)=>{"use strict";var i=r(2877);function a(e,A,r){this.message=r||a.message(e,A),this.missingRef=i.url(e,A),this.missingSchema=i.normalizeId(i.fullPath(this.missingRef))}function t(e){return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}e.exports={Validation:t((function(e){this.message="validation failed",this.errors=e,this.ajv=this.validation=!0})),MissingRef:t(a)},a.message=function(e,A){return"can't resolve reference "+A+" from id "+e}},8495:(e,A,r)=>{"use strict";var i=r(7126),a=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,t=[0,31,28,31,30,31,30,31,31,30,31,30,31],n=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i,f=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,l=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,s=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,c=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,o=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,u=/^(?:\/(?:[^~/]|~0|~1)*)*$/,b=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,h=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function w(e){return e="full"==e?"full":"fast",i.copy(w[e])}function k(e){var A=e.match(a);if(!A)return!1;var r=+A[1],i=+A[2],n=+A[3];return i>=1&&i<=12&&n>=1&&n<=(2==i&&function(e){return e%4==0&&(e%100!=0||e%400==0)}(r)?29:t[i])}function d(e,A){var r=e.match(n);if(!r)return!1;var i=r[1],a=r[2],t=r[3],f=r[5];return(i<=23&&a<=59&&t<=59||23==i&&59==a&&60==t)&&(!A||f)}e.exports=w,w.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":s,url:c,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:f,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:p,uuid:o,"json-pointer":u,"json-pointer-uri-fragment":b,"relative-json-pointer":h},w.full={date:k,time:d,"date-time":function(e){var A=e.split(v);return 2==A.length&&k(A[0])&&d(A[1],!0)},uri:function(e){return g.test(e)&&l.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":s,url:c,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:f,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:p,uuid:o,"json-pointer":u,"json-pointer-uri-fragment":b,"relative-json-pointer":h};var v=/t|\s/i,g=/\/|:/,m=/[^\\]\\Z/;function p(e){if(m.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},2424:(e,A,r)=>{"use strict";var i=r(2877),a=r(7126),t=r(9622),n=r(9741),f=r(7768),l=a.ucs2length,s=r(1183),c=t.Validation;function o(e,A,r){var i=b.call(this,e,A,r);return i>=0?{index:i,compiling:!0}:(i=this._compilations.length,this._compilations[i]={schema:e,root:A,baseId:r},{index:i,compiling:!1})}function u(e,A,r){var i=b.call(this,e,A,r);i>=0&&this._compilations.splice(i,1)}function b(e,A,r){for(var i=0;i{"use strict";var i=r(5980),a=r(1183),t=r(7126),n=r(5929),f=r(9453);function l(e,A,r){var i=this._refs[r];if("string"==typeof i){if(!this._refs[i])return l.call(this,e,A,i);i=this._refs[i]}if((i=i||this._schemas[r])instanceof n)return h(i.schema,this._opts.inlineRefs)?i.schema:i.validate||this._compile(i);var a,t,f,c=s.call(this,A,r);return c&&(a=c.schema,A=c.root,f=c.baseId),a instanceof n?t=a.validate||e.call(this,a.schema,A,void 0,f):void 0!==a&&(t=h(a,this._opts.inlineRefs)?a:e.call(this,a,A,void 0,f)),t}function s(e,A){var r=i.parse(A),a=v(r),t=d(this._getId(e.schema));if(0===Object.keys(e.schema).length||a!==t){var f=m(a),l=this._refs[f];if("string"==typeof l)return c.call(this,e,l,r);if(l instanceof n)l.validate||this._compile(l),e=l;else{if(!((l=this._schemas[f])instanceof n))return;if(l.validate||this._compile(l),f==m(A))return{schema:l,root:e,baseId:t};e=l}if(!e.schema)return;t=d(this._getId(e.schema))}return u.call(this,r,t,e.schema,e)}function c(e,A,r){var i=s.call(this,e,A);if(i){var a=i.schema,t=i.baseId;e=i.root;var n=this._getId(a);return n&&(t=p(t,n)),u.call(this,r,t,a,e)}}e.exports=l,l.normalizeId=m,l.fullPath=d,l.url=p,l.ids=function(e){var A=m(this._getId(e)),r={"":A},n={"":d(A,!1)},l={},s=this;return f(e,{allKeys:!0},(function(e,A,f,c,o,u,b){if(""!==A){var h=s._getId(e),w=r[c],k=n[c]+"/"+o;if(void 0!==b&&(k+="/"+("number"==typeof b?b:t.escapeFragment(b))),"string"==typeof h){h=w=m(w?i.resolve(w,h):h);var d=s._refs[h];if("string"==typeof d&&(d=s._refs[d]),d&&d.schema){if(!a(e,d.schema))throw new Error('id "'+h+'" resolves to more than one schema')}else if(h!=m(k))if("#"==h[0]){if(l[h]&&!a(e,l[h]))throw new Error('id "'+h+'" resolves to more than one schema');l[h]=e}else s._refs[h]=k}r[A]=w,n[A]=k}})),l},l.inlineRef=h,l.schema=s;var o=t.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function u(e,A,r,i){if(e.fragment=e.fragment||"","/"==e.fragment.slice(0,1)){for(var a=e.fragment.split("/"),n=1;n{"use strict";var i=r(557),a=r(7126).toHash;e.exports=function(){var e=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],A=["type","$comment"];return e.all=a(A),e.types=a(["number","integer","string","array","object","boolean","null"]),e.forEach((function(r){r.rules=r.rules.map((function(r){var a;if("object"==typeof r){var t=Object.keys(r)[0];a=r[t],r=t,a.forEach((function(r){A.push(r),e.all[r]=!0}))}return A.push(r),e.all[r]={keyword:r,code:i[r],implements:a}})),e.all.$comment={keyword:"$comment",code:i.$comment},r.type&&(e.types[r.type]=r)})),e.keywords=a(A.concat(["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"])),e.custom={},e}},5929:(e,A,r)=>{"use strict";var i=r(7126);e.exports=function(e){i.copy(e,this)}},8463:e=>{"use strict";e.exports=function(e){for(var A,r=0,i=e.length,a=0;a=55296&&A<=56319&&a{"use strict";function i(e,A,r,i){var a=i?" !== ":" === ",t=i?" || ":" && ",n=i?"!":"",f=i?"":"!";switch(e){case"null":return A+a+"null";case"array":return n+"Array.isArray("+A+")";case"object":return"("+n+A+t+"typeof "+A+a+'"object"'+t+f+"Array.isArray("+A+"))";case"integer":return"(typeof "+A+a+'"number"'+t+f+"("+A+" % 1)"+t+A+a+A+(r?t+n+"isFinite("+A+")":"")+")";case"number":return"(typeof "+A+a+'"'+e+'"'+(r?t+n+"isFinite("+A+")":"")+")";default:return"typeof "+A+a+'"'+e+'"'}}e.exports={copy:function(e,A){for(var r in A=A||{},e)A[r]=e[r];return A},checkDataType:i,checkDataTypes:function(e,A,r){switch(e.length){case 1:return i(e[0],A,r,!0);default:var a="",n=t(e);for(var f in n.array&&n.object&&(a=n.null?"(":"(!"+A+" || ",a+="typeof "+A+' !== "object")',delete n.null,delete n.array,delete n.object),n.number&&delete n.integer,n)a+=(a?" && ":"")+i(f,A,r,!0);return a}},coerceToTypes:function(e,A){if(Array.isArray(A)){for(var r=[],i=0;i=A)throw new Error("Cannot access property/index "+i+" levels up, current level is "+A);return r[A-i]}if(i>A)throw new Error("Cannot access data "+i+" levels up, current level is "+A);if(t="data"+(A-i||""),!a)return t}for(var f=t,s=a.split("/"),c=0;c{"use strict";var A=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"];e.exports=function(e,r){for(var i=0;i{"use strict";var i=r(9302);e.exports={$id:"https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js",definitions:{simpleTypes:i.definitions.simpleTypes},type:"object",dependencies:{schema:["validate"],$data:["validate"],statements:["inline"],valid:{not:{required:["macro"]}}},properties:{type:i.properties.type,schema:{type:"boolean"},statements:{type:"boolean"},dependencies:{type:"array",items:{type:"string"}},metaSchema:{type:"object"},modifying:{type:"boolean"},valid:{type:"boolean"},$data:{type:"boolean"},async:{type:"boolean"},errors:{anyOf:[{type:"boolean"},{const:"full"}]}}}},4485:e=>{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u=e.opts.$data&&f&&f.$data;u?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f;var b="maximum"==A,h=b?"exclusiveMaximum":"exclusiveMinimum",w=e.schema[h],k=e.opts.$data&&w&&w.$data,d=b?"<":">",v=b?">":"<",g=void 0;if(!u&&"number"!=typeof f&&void 0!==f)throw new Error(A+" must be number");if(!k&&void 0!==w&&"number"!=typeof w&&"boolean"!=typeof w)throw new Error(h+" must be number or boolean");if(k){var m,p=e.util.getData(w.$data,n,e.dataPathArr),E="exclusive"+t,B="exclType"+t,y="exclIsNumber"+t,C="' + "+(Z="op"+t)+" + '";a+=" var schemaExcl"+t+" = "+p+"; ",a+=" var "+E+"; var "+B+" = typeof "+(p="schemaExcl"+t)+"; if ("+B+" != 'boolean' && "+B+" != 'undefined' && "+B+" != 'number') { ",g=h,(m=m||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(g||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: '"+h+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+l+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var I=a;a=m.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+I+"]); ":a+=" validate.errors = ["+I+"]; return false; ":a+=" var err = "+I+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'number') || "),a+=" "+B+" == 'number' ? ( ("+E+" = "+i+" === undefined || "+p+" "+d+"= "+i+") ? "+o+" "+v+"= "+p+" : "+o+" "+v+" "+i+" ) : ( ("+E+" = "+p+" === true) ? "+o+" "+v+"= "+i+" : "+o+" "+v+" "+i+" ) || "+o+" !== "+o+") { var op"+t+" = "+E+" ? '"+d+"' : '"+d+"='; ",void 0===f&&(g=h,s=e.errSchemaPath+"/"+h,i=p,u=k)}else if(C=d,(y="number"==typeof w)&&u){var Z="'"+C+"'";a+=" if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'number') || "),a+=" ( "+i+" === undefined || "+w+" "+d+"= "+i+" ? "+o+" "+v+"= "+w+" : "+o+" "+v+" "+i+" ) || "+o+" !== "+o+") { "}else y&&void 0===f?(E=!0,g=h,s=e.errSchemaPath+"/"+h,i=w,v+="="):(y&&(i=Math[b?"min":"max"](w,f)),w===(!y||i)?(E=!0,g=h,s=e.errSchemaPath+"/"+h,v+="="):(E=!1,C+="=")),Z="'"+C+"'",a+=" if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'number') || "),a+=" "+o+" "+v+" "+i+" || "+o+" !== "+o+") { ";return g=g||A,(m=m||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(g||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { comparison: "+Z+", limit: "+i+", exclusive: "+E+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be "+C+" ",a+=u?"' + "+i:i+"'"),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+l:""+f,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ",I=a,a=m.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+I+"]); ":a+=" validate.errors = ["+I+"]; return false; ":a+=" var err = "+I+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { "),a}},184:e=>{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u=e.opts.$data&&f&&f.$data;if(u?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f,!u&&"number"!=typeof f)throw new Error(A+" must be number");a+="if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'number') || "),a+=" "+o+".length "+("maxItems"==A?">":"<")+" "+i+") { ";var b=A,h=h||[];h.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(b||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { limit: "+i+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxItems"==A?"more":"fewer",a+=" than ",a+=u?"' + "+i+" + '":""+f,a+=" items' "),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+l:""+f,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var w=a;return a=h.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+w+"]); ":a+=" validate.errors = ["+w+"]; return false; ":a+=" var err = "+w+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},4993:e=>{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u=e.opts.$data&&f&&f.$data;if(u?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f,!u&&"number"!=typeof f)throw new Error(A+" must be number");var b="maxLength"==A?">":"<";a+="if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'number') || "),!1===e.opts.unicode?a+=" "+o+".length ":a+=" ucs2length("+o+") ",a+=" "+b+" "+i+") { ";var h=A,w=w||[];w.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(h||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { limit: "+i+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be ",a+="maxLength"==A?"longer":"shorter",a+=" than ",a+=u?"' + "+i+" + '":""+f,a+=" characters' "),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+l:""+f,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var k=a;return a=w.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+k+"]); ":a+=" validate.errors = ["+k+"]; return false; ":a+=" var err = "+k+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},6564:e=>{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u=e.opts.$data&&f&&f.$data;if(u?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f,!u&&"number"!=typeof f)throw new Error(A+" must be number");a+="if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'number') || "),a+=" Object.keys("+o+").length "+("maxProperties"==A?">":"<")+" "+i+") { ";var b=A,h=h||[];h.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(b||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { limit: "+i+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxProperties"==A?"more":"fewer",a+=" than ",a+=u?"' + "+i+" + '":""+f,a+=" properties' "),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+l:""+f,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var w=a;return a=h.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+w+"]); ":a+=" validate.errors = ["+w+"]; return false; ":a+=" var err = "+w+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},5109:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.schema[A],t=e.schemaPath+e.util.getProperty(A),n=e.errSchemaPath+"/"+A,f=!e.opts.allErrors,l=e.util.copy(e),s="";l.level++;var c="valid"+l.level,o=l.baseId,u=!0,b=a;if(b)for(var h,w=-1,k=b.length-1;w0||!1===h:e.util.schemaHasRules(h,e.RULES.all))&&(u=!1,l.schema=h,l.schemaPath=t+"["+w+"]",l.errSchemaPath=n+"/"+w,i+=" "+e.validate(l)+" ",l.baseId=o,f&&(i+=" if ("+c+") { ",s+="}"));return f&&(i+=u?" if (true) { ":" "+s.slice(0,-1)+" "),i}},7227:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u="errs__"+a,b=e.util.copy(e),h="";b.level++;var w="valid"+b.level;if(n.every((function(A){return e.opts.strictKeywords?"object"==typeof A&&Object.keys(A).length>0||!1===A:e.util.schemaHasRules(A,e.RULES.all)}))){var k=b.baseId;i+=" var "+u+" = errors; var "+o+" = false; ";var d=e.compositeRule;e.compositeRule=b.compositeRule=!0;var v=n;if(v)for(var g,m=-1,p=v.length-1;m{"use strict";e.exports=function(e,A,r){var i=" ",a=e.schema[A],t=e.errSchemaPath+"/"+A,n=(e.opts.allErrors,e.util.toQuotedString(a));return!0===e.opts.$comment?i+=" console.log("+n+");":"function"==typeof e.opts.$comment&&(i+=" self._opts.$comment("+n+", "+e.util.toQuotedString(t)+", validate.root.schema);"),i}},2532:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u=e.opts.$data&&n&&n.$data;u&&(i+=" var schema"+a+" = "+e.util.getData(n.$data,t,e.dataPathArr)+"; "),u||(i+=" var schema"+a+" = validate.schema"+f+";"),i+="var "+o+" = equal("+c+", schema"+a+"); if (!"+o+") { ";var b=b||[];b.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'const' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { allowedValue: schema"+a+" } ",!1!==e.opts.messages&&(i+=" , message: 'should be equal to constant' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var h=i;return i=b.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+h+"]); ":i+=" validate.errors = ["+h+"]; return false; ":i+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" }",s&&(i+=" else { "),i}},1097:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u="errs__"+a,b=e.util.copy(e);b.level++;var h="valid"+b.level,w="i"+a,k=b.dataLevel=e.dataLevel+1,d="data"+k,v=e.baseId,g=e.opts.strictKeywords?"object"==typeof n&&Object.keys(n).length>0||!1===n:e.util.schemaHasRules(n,e.RULES.all);if(i+="var "+u+" = errors;var "+o+";",g){var m=e.compositeRule;e.compositeRule=b.compositeRule=!0,b.schema=n,b.schemaPath=f,b.errSchemaPath=l,i+=" var "+h+" = false; for (var "+w+" = 0; "+w+" < "+c+".length; "+w+"++) { ",b.errorPath=e.util.getPathExpr(e.errorPath,w,e.opts.jsonPointers,!0);var p=c+"["+w+"]";b.dataPathArr[k]=w;var E=e.validate(b);b.baseId=v,e.util.varOccurences(E,d)<2?i+=" "+e.util.varReplace(E,d,p)+" ":i+=" var "+d+" = "+p+"; "+E+" ",i+=" if ("+h+") break; } ",e.compositeRule=b.compositeRule=m,i+=" if (!"+h+") {"}else i+=" if ("+c+".length == 0) {";var B=B||[];B.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(i+=" , message: 'should contain a valid item' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var y=i;return i=B.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+y+"]); ":i+=" validate.errors = ["+y+"]; return false; ":i+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { ",g&&(i+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } "),e.opts.allErrors&&(i+=" } "),i}},9679:e=>{"use strict";e.exports=function(e,A,r){var i,a,t=" ",n=e.level,f=e.dataLevel,l=e.schema[A],s=e.schemaPath+e.util.getProperty(A),c=e.errSchemaPath+"/"+A,o=!e.opts.allErrors,u="data"+(f||""),b="valid"+n,h="errs__"+n,w=e.opts.$data&&l&&l.$data;w?(t+=" var schema"+n+" = "+e.util.getData(l.$data,f,e.dataPathArr)+"; ",a="schema"+n):a=l;var k,d,v,g,m,p=this,E="definition"+n,B=p.definition,y="";if(w&&B.$data){m="keywordValidate"+n;var C=B.validateSchema;t+=" var "+E+" = RULES.custom['"+A+"'].definition; var "+m+" = "+E+".validate;"}else{if(!(g=e.useCustomRule(p,l,e.schema,e)))return;a="validate.schema"+s,m=g.code,k=B.compile,d=B.inline,v=B.macro}var I=m+".errors",Z="i"+n,G="ruleErr"+n,L=B.async;if(L&&!e.async)throw new Error("async keyword in sync schema");if(d||v||(t+=I+" = null;"),t+="var "+h+" = errors;var "+b+";",w&&B.$data&&(y+="}",t+=" if ("+a+" === undefined) { "+b+" = true; } else { ",C&&(y+="}",t+=" "+b+" = "+E+".validateSchema("+a+"); if ("+b+") { ")),d)B.statements?t+=" "+g.validate+" ":t+=" "+b+" = "+g.validate+"; ";else if(v){var Q=e.util.copy(e);y="",Q.level++;var D="valid"+Q.level;Q.schema=g.validate,Q.schemaPath="";var z=e.compositeRule;e.compositeRule=Q.compositeRule=!0;var W=e.validate(Q).replace(/validate\.schema/g,m);e.compositeRule=Q.compositeRule=z,t+=" "+W}else{(V=V||[]).push(t),t="",t+=" "+m+".call( ",e.opts.passContext?t+="this":t+="self",k||!1===B.schema?t+=" , "+u+" ":t+=" , "+a+" , "+u+" , validate.schema"+e.schemaPath+" ",t+=" , (dataPath || '')",'""'!=e.errorPath&&(t+=" + "+e.errorPath);var Y=f?"data"+(f-1||""):"parentData",F=f?e.dataPathArr[f]:"parentDataProperty",M=t+=" , "+Y+" , "+F+" , rootData ) ";t=V.pop(),!1===B.errors?(t+=" "+b+" = ",L&&(t+="await "),t+=M+"; "):t+=L?" var "+(I="customErrors"+n)+" = null; try { "+b+" = await "+M+"; } catch (e) { "+b+" = false; if (e instanceof ValidationError) "+I+" = e.errors; else throw e; } ":" "+I+" = null; "+b+" = "+M+"; "}if(B.modifying&&(t+=" if ("+Y+") "+u+" = "+Y+"["+F+"];"),t+=""+y,B.valid)o&&(t+=" if (true) { ");else{var V;t+=" if ( ",void 0===B.valid?(t+=" !",t+=v?""+D:""+b):t+=" "+!B.valid+" ",t+=") { ",i=p.keyword,(V=V||[]).push(t),t="",(V=V||[]).push(t),t="",!1!==e.createErrors?(t+=" { keyword: '"+(i||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { keyword: '"+p.keyword+"' } ",!1!==e.opts.messages&&(t+=" , message: 'should pass \""+p.keyword+"\" keyword validation' "),e.opts.verbose&&(t+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),t+=" } "):t+=" {} ";var N=t;t=V.pop(),!e.compositeRule&&o?e.async?t+=" throw new ValidationError(["+N+"]); ":t+=" validate.errors = ["+N+"]; return false; ":t+=" var err = "+N+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";var R=t;t=V.pop(),d?B.errors?"full"!=B.errors&&(t+=" for (var "+Z+"="+h+"; "+Z+"{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="errs__"+a,u=e.util.copy(e),b="";u.level++;var h="valid"+u.level,w={},k={},d=e.opts.ownProperties;for(p in n)if("__proto__"!=p){var v=n[p],g=Array.isArray(v)?k:w;g[p]=v}i+="var "+o+" = errors;";var m=e.errorPath;for(var p in i+="var missing"+a+";",k)if((g=k[p]).length){if(i+=" if ( "+c+e.util.getProperty(p)+" !== undefined ",d&&(i+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(p)+"') "),s){i+=" && ( ";var E=g;if(E)for(var B=-1,y=E.length-1;B0||!1===v:e.util.schemaHasRules(v,e.RULES.all))&&(i+=" "+h+" = true; if ( "+c+e.util.getProperty(p)+" !== undefined ",d&&(i+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(p)+"') "),i+=") { ",u.schema=v,u.schemaPath=f+e.util.getProperty(p),u.errSchemaPath=l+"/"+e.util.escapeFragment(p),i+=" "+e.validate(u)+" ",u.baseId=F,i+=" } ",s&&(i+=" if ("+h+") { ",b+="}"));return s&&(i+=" "+b+" if ("+o+" == errors) {"),i}},6107:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u=e.opts.$data&&n&&n.$data;u&&(i+=" var schema"+a+" = "+e.util.getData(n.$data,t,e.dataPathArr)+"; ");var b="i"+a,h="schema"+a;u||(i+=" var "+h+" = validate.schema"+f+";"),i+="var "+o+";",u&&(i+=" if (schema"+a+" === undefined) "+o+" = true; else if (!Array.isArray(schema"+a+")) "+o+" = false; else {"),i+=o+" = false;for (var "+b+"=0; "+b+"<"+h+".length; "+b+"++) if (equal("+c+", "+h+"["+b+"])) { "+o+" = true; break; }",u&&(i+=" } "),i+=" if (!"+o+") { ";var w=w||[];w.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { allowedValues: schema"+a+" } ",!1!==e.opts.messages&&(i+=" , message: 'should be equal to one of the allowed values' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var k=i;return i=w.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+k+"]); ":i+=" validate.errors = ["+k+"]; return false; ":i+=" var err = "+k+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" }",s&&(i+=" else { "),i}},6043:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||"");if(!1===e.opts.format)return s&&(i+=" if (true) { "),i;var o,u=e.opts.$data&&n&&n.$data;u?(i+=" var schema"+a+" = "+e.util.getData(n.$data,t,e.dataPathArr)+"; ",o="schema"+a):o=n;var b=e.opts.unknownFormats,h=Array.isArray(b);if(u)i+=" var "+(w="format"+a)+" = formats["+o+"]; var "+(k="isObject"+a)+" = typeof "+w+" == 'object' && !("+w+" instanceof RegExp) && "+w+".validate; var "+(d="formatType"+a)+" = "+k+" && "+w+".type || 'string'; if ("+k+") { ",e.async&&(i+=" var async"+a+" = "+w+".async; "),i+=" "+w+" = "+w+".validate; } if ( ",u&&(i+=" ("+o+" !== undefined && typeof "+o+" != 'string') || "),i+=" (","ignore"!=b&&(i+=" ("+o+" && !"+w+" ",h&&(i+=" && self._opts.unknownFormats.indexOf("+o+") == -1 "),i+=") || "),i+=" ("+w+" && "+d+" == '"+r+"' && !(typeof "+w+" == 'function' ? ",e.async?i+=" (async"+a+" ? await "+w+"("+c+") : "+w+"("+c+")) ":i+=" "+w+"("+c+") ",i+=" : "+w+".test("+c+"))))) {";else{var w;if(!(w=e.formats[n])){if("ignore"==b)return e.logger.warn('unknown format "'+n+'" ignored in schema at path "'+e.errSchemaPath+'"'),s&&(i+=" if (true) { "),i;if(h&&b.indexOf(n)>=0)return s&&(i+=" if (true) { "),i;throw new Error('unknown format "'+n+'" is used in schema at path "'+e.errSchemaPath+'"')}var k,d=(k="object"==typeof w&&!(w instanceof RegExp)&&w.validate)&&w.type||"string";if(k){var v=!0===w.async;w=w.validate}if(d!=r)return s&&(i+=" if (true) { "),i;if(v){if(!e.async)throw new Error("async format in sync schema");i+=" if (!(await "+(g="formats"+e.util.getProperty(n)+".validate")+"("+c+"))) { "}else{i+=" if (! ";var g="formats"+e.util.getProperty(n);k&&(g+=".validate"),i+="function"==typeof w?" "+g+"("+c+") ":" "+g+".test("+c+") ",i+=") { "}}var m=m||[];m.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'format' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { format: ",i+=u?""+o:""+e.util.toQuotedString(n),i+=" } ",!1!==e.opts.messages&&(i+=" , message: 'should match format \"",i+=u?"' + "+o+" + '":""+e.util.escapeQuotes(n),i+="\"' "),e.opts.verbose&&(i+=" , schema: ",i+=u?"validate.schema"+f:""+e.util.toQuotedString(n),i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var p=i;return i=m.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+p+"]); ":i+=" validate.errors = ["+p+"]; return false; ":i+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",s&&(i+=" else { "),i}},1108:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u="errs__"+a,b=e.util.copy(e);b.level++;var h="valid"+b.level,w=e.schema.then,k=e.schema.else,d=void 0!==w&&(e.opts.strictKeywords?"object"==typeof w&&Object.keys(w).length>0||!1===w:e.util.schemaHasRules(w,e.RULES.all)),v=void 0!==k&&(e.opts.strictKeywords?"object"==typeof k&&Object.keys(k).length>0||!1===k:e.util.schemaHasRules(k,e.RULES.all)),g=b.baseId;if(d||v){var m;b.createErrors=!1,b.schema=n,b.schemaPath=f,b.errSchemaPath=l,i+=" var "+u+" = errors; var "+o+" = true; ";var p=e.compositeRule;e.compositeRule=b.compositeRule=!0,i+=" "+e.validate(b)+" ",b.baseId=g,b.createErrors=!0,i+=" errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",e.compositeRule=b.compositeRule=p,d?(i+=" if ("+h+") { ",b.schema=e.schema.then,b.schemaPath=e.schemaPath+".then",b.errSchemaPath=e.errSchemaPath+"/then",i+=" "+e.validate(b)+" ",b.baseId=g,i+=" "+o+" = "+h+"; ",d&&v?i+=" var "+(m="ifClause"+a)+" = 'then'; ":m="'then'",i+=" } ",v&&(i+=" else { ")):i+=" if (!"+h+") { ",v&&(b.schema=e.schema.else,b.schemaPath=e.schemaPath+".else",b.errSchemaPath=e.errSchemaPath+"/else",i+=" "+e.validate(b)+" ",b.baseId=g,i+=" "+o+" = "+h+"; ",d&&v?i+=" var "+(m="ifClause"+a)+" = 'else'; ":m="'else'",i+=" } "),i+=" if (!"+o+") { var err = ",!1!==e.createErrors?(i+=" { keyword: 'if' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { failingKeyword: "+m+" } ",!1!==e.opts.messages&&(i+=" , message: 'should match \"' + "+m+" + '\" schema' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&s&&(e.async?i+=" throw new ValidationError(vErrors); ":i+=" validate.errors = vErrors; return false; "),i+=" } ",s&&(i+=" else { ")}else s&&(i+=" if (true) { ");return i}},557:(e,A,r)=>{"use strict";e.exports={$ref:r(1357),allOf:r(5109),anyOf:r(7227),$comment:r(6697),const:r(2532),contains:r(1097),dependencies:r(5160),enum:r(6107),format:r(6043),if:r(1108),items:r(3180),maximum:r(4485),minimum:r(4485),maxItems:r(184),minItems:r(184),maxLength:r(4993),minLength:r(4993),maxProperties:r(6564),minProperties:r(6564),multipleOf:r(6427),not:r(6048),oneOf:r(2331),pattern:r(6283),properties:r(2363),propertyNames:r(316),required:r(8687),uniqueItems:r(328),validate:r(7768)}},3180:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u="errs__"+a,b=e.util.copy(e),h="";b.level++;var w="valid"+b.level,k="i"+a,d=b.dataLevel=e.dataLevel+1,v="data"+d,g=e.baseId;if(i+="var "+u+" = errors;var "+o+";",Array.isArray(n)){var m=e.schema.additionalItems;if(!1===m){i+=" "+o+" = "+c+".length <= "+n.length+"; ";var p=l;l=e.errSchemaPath+"/additionalItems",i+=" if (!"+o+") { ";var E=E||[];E.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { limit: "+n.length+" } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have more than "+n.length+" items' "),e.opts.verbose&&(i+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var B=i;i=E.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+B+"]); ":i+=" validate.errors = ["+B+"]; return false; ":i+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",l=p,s&&(h+="}",i+=" else { ")}var y=n;if(y)for(var C,I=-1,Z=y.length-1;I0||!1===C:e.util.schemaHasRules(C,e.RULES.all)){i+=" "+w+" = true; if ("+c+".length > "+I+") { ";var G=c+"["+I+"]";b.schema=C,b.schemaPath=f+"["+I+"]",b.errSchemaPath=l+"/"+I,b.errorPath=e.util.getPathExpr(e.errorPath,I,e.opts.jsonPointers,!0),b.dataPathArr[d]=I;var L=e.validate(b);b.baseId=g,e.util.varOccurences(L,v)<2?i+=" "+e.util.varReplace(L,v,G)+" ":i+=" var "+v+" = "+G+"; "+L+" ",i+=" } ",s&&(i+=" if ("+w+") { ",h+="}")}"object"==typeof m&&(e.opts.strictKeywords?"object"==typeof m&&Object.keys(m).length>0||!1===m:e.util.schemaHasRules(m,e.RULES.all))&&(b.schema=m,b.schemaPath=e.schemaPath+".additionalItems",b.errSchemaPath=e.errSchemaPath+"/additionalItems",i+=" "+w+" = true; if ("+c+".length > "+n.length+") { for (var "+k+" = "+n.length+"; "+k+" < "+c+".length; "+k+"++) { ",b.errorPath=e.util.getPathExpr(e.errorPath,k,e.opts.jsonPointers,!0),G=c+"["+k+"]",b.dataPathArr[d]=k,L=e.validate(b),b.baseId=g,e.util.varOccurences(L,v)<2?i+=" "+e.util.varReplace(L,v,G)+" ":i+=" var "+v+" = "+G+"; "+L+" ",s&&(i+=" if (!"+w+") break; "),i+=" } } ",s&&(i+=" if ("+w+") { ",h+="}"))}else(e.opts.strictKeywords?"object"==typeof n&&Object.keys(n).length>0||!1===n:e.util.schemaHasRules(n,e.RULES.all))&&(b.schema=n,b.schemaPath=f,b.errSchemaPath=l,i+=" for (var "+k+" = 0; "+k+" < "+c+".length; "+k+"++) { ",b.errorPath=e.util.getPathExpr(e.errorPath,k,e.opts.jsonPointers,!0),G=c+"["+k+"]",b.dataPathArr[d]=k,L=e.validate(b),b.baseId=g,e.util.varOccurences(L,v)<2?i+=" "+e.util.varReplace(L,v,G)+" ":i+=" var "+v+" = "+G+"; "+L+" ",s&&(i+=" if (!"+w+") break; "),i+=" }");return s&&(i+=" "+h+" if ("+u+" == errors) {"),i}},6427:e=>{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u=e.opts.$data&&f&&f.$data;if(u?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f,!u&&"number"!=typeof f)throw new Error(A+" must be number");a+="var division"+t+";if (",u&&(a+=" "+i+" !== undefined && ( typeof "+i+" != 'number' || "),a+=" (division"+t+" = "+o+" / "+i+", ",e.opts.multipleOfPrecision?a+=" Math.abs(Math.round(division"+t+") - division"+t+") > 1e-"+e.opts.multipleOfPrecision+" ":a+=" division"+t+" !== parseInt(division"+t+") ",a+=" ) ",u&&(a+=" ) "),a+=" ) { ";var b=b||[];b.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { multipleOf: "+i+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be multiple of ",a+=u?"' + "+i:i+"'"),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+l:""+f,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var h=a;return a=b.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+h+"]); ":a+=" validate.errors = ["+h+"]; return false; ":a+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},6048:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="errs__"+a,u=e.util.copy(e);u.level++;var b="valid"+u.level;if(e.opts.strictKeywords?"object"==typeof n&&Object.keys(n).length>0||!1===n:e.util.schemaHasRules(n,e.RULES.all)){u.schema=n,u.schemaPath=f,u.errSchemaPath=l,i+=" var "+o+" = errors; ";var h,w=e.compositeRule;e.compositeRule=u.compositeRule=!0,u.createErrors=!1,u.opts.allErrors&&(h=u.opts.allErrors,u.opts.allErrors=!1),i+=" "+e.validate(u)+" ",u.createErrors=!0,h&&(u.opts.allErrors=h),e.compositeRule=u.compositeRule=w,i+=" if ("+b+") { ";var k=k||[];k.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(i+=" , message: 'should NOT be valid' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var d=i;i=k.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+d+"]); ":i+=" validate.errors = ["+d+"]; return false; ":i+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { errors = "+o+"; if (vErrors !== null) { if ("+o+") vErrors.length = "+o+"; else vErrors = null; } ",e.opts.allErrors&&(i+=" } ")}else i+=" var err = ",!1!==e.createErrors?(i+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(i+=" , message: 'should NOT be valid' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s&&(i+=" if (false) { ");return i}},2331:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u="errs__"+a,b=e.util.copy(e),h="";b.level++;var w="valid"+b.level,k=b.baseId,d="prevValid"+a,v="passingSchemas"+a;i+="var "+u+" = errors , "+d+" = false , "+o+" = false , "+v+" = null; ";var g=e.compositeRule;e.compositeRule=b.compositeRule=!0;var m=n;if(m)for(var p,E=-1,B=m.length-1;E0||!1===p:e.util.schemaHasRules(p,e.RULES.all))?(b.schema=p,b.schemaPath=f+"["+E+"]",b.errSchemaPath=l+"/"+E,i+=" "+e.validate(b)+" ",b.baseId=k):i+=" var "+w+" = true; ",E&&(i+=" if ("+w+" && "+d+") { "+o+" = false; "+v+" = ["+v+", "+E+"]; } else { ",h+="}"),i+=" if ("+w+") { "+o+" = "+d+" = true; "+v+" = "+E+"; }";return e.compositeRule=b.compositeRule=g,i+=h+"if (!"+o+") { var err = ",!1!==e.createErrors?(i+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { passingSchemas: "+v+" } ",!1!==e.opts.messages&&(i+=" , message: 'should match exactly one schema in oneOf' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&s&&(e.async?i+=" throw new ValidationError(vErrors); ":i+=" validate.errors = vErrors; return false; "),i+="} else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; }",e.opts.allErrors&&(i+=" } "),i}},6283:e=>{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u=e.opts.$data&&f&&f.$data;u?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f,a+="if ( ",u&&(a+=" ("+i+" !== undefined && typeof "+i+" != 'string') || "),a+=" !"+(u?"(new RegExp("+i+"))":e.usePattern(f))+".test("+o+") ) { ";var b=b||[];b.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { pattern: ",a+=u?""+i:""+e.util.toQuotedString(f),a+=" } ",!1!==e.opts.messages&&(a+=" , message: 'should match pattern \"",a+=u?"' + "+i+" + '":""+e.util.escapeQuotes(f),a+="\"' "),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+l:""+e.util.toQuotedString(f),a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var h=a;return a=b.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+h+"]); ":a+=" validate.errors = ["+h+"]; return false; ":a+=" var err = "+h+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},2363:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="errs__"+a,u=e.util.copy(e),b="";u.level++;var h="valid"+u.level,w="key"+a,k="idx"+a,d=u.dataLevel=e.dataLevel+1,v="data"+d,g="dataProperties"+a,m=Object.keys(n||{}).filter(W),p=e.schema.patternProperties||{},E=Object.keys(p).filter(W),B=e.schema.additionalProperties,y=m.length||E.length,C=!1===B,I="object"==typeof B&&Object.keys(B).length,Z=e.opts.removeAdditional,G=C||I||Z,L=e.opts.ownProperties,Q=e.baseId,D=e.schema.required;if(D&&(!e.opts.$data||!D.$data)&&D.length8)i+=" || validate.schema"+f+".hasOwnProperty("+w+") ";else{var Y=m;if(Y)for(var F=-1,M=Y.length-1;F0||!1===K:e.util.schemaHasRules(K,e.RULES.all)){var $=e.util.getProperty(O),ee=(S=c+$,U&&void 0!==K.default);if(u.schema=K,u.schemaPath=f+$,u.errSchemaPath=l+"/"+e.util.escapeFragment(O),u.errorPath=e.util.getPath(e.errorPath,O,e.opts.jsonPointers),u.dataPathArr[d]=e.util.toQuotedString(O),j=e.validate(u),u.baseId=Q,e.util.varOccurences(j,v)<2){j=e.util.varReplace(j,v,S);var Ae=S}else Ae=v,i+=" var "+v+" = "+S+"; ";if(ee)i+=" "+j+" ";else{if(z&&z[O]){i+=" if ( "+Ae+" === undefined ",L&&(i+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(O)+"') "),i+=") { "+h+" = false; ",x=e.errorPath,H=l;var re,ie=e.util.escapeQuotes(O);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(x,O,e.opts.jsonPointers)),l=e.errSchemaPath+"/required",(re=re||[]).push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { missingProperty: '"+ie+"' } ",!1!==e.opts.messages&&(i+=" , message: '",e.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+ie+"\\'",i+="' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ",P=i,i=re.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+P+"]); ":i+=" validate.errors = ["+P+"]; return false; ":i+=" var err = "+P+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l=H,e.errorPath=x,i+=" } else { "}else s?(i+=" if ( "+Ae+" === undefined ",L&&(i+=" || ! Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(O)+"') "),i+=") { "+h+" = true; } else { "):(i+=" if ("+Ae+" !== undefined ",L&&(i+=" && Object.prototype.hasOwnProperty.call("+c+", '"+e.util.escapeQuotes(O)+"') "),i+=" ) { ");i+=" "+j+" } "}}s&&(i+=" if ("+h+") { ",b+="}")}}if(E.length){var ae=E;if(ae)for(var te,ne=-1,fe=ae.length-1;ne0||!1===K:e.util.schemaHasRules(K,e.RULES.all))&&(u.schema=K,u.schemaPath=e.schemaPath+".patternProperties"+e.util.getProperty(te),u.errSchemaPath=e.errSchemaPath+"/patternProperties/"+e.util.escapeFragment(te),i+=L?" "+g+" = "+g+" || Object.keys("+c+"); for (var "+k+"=0; "+k+"<"+g+".length; "+k+"++) { var "+w+" = "+g+"["+k+"]; ":" for (var "+w+" in "+c+") { ",i+=" if ("+e.usePattern(te)+".test("+w+")) { ",u.errorPath=e.util.getPathExpr(e.errorPath,w,e.opts.jsonPointers),S=c+"["+w+"]",u.dataPathArr[d]=w,j=e.validate(u),u.baseId=Q,e.util.varOccurences(j,v)<2?i+=" "+e.util.varReplace(j,v,S)+" ":i+=" var "+v+" = "+S+"; "+j+" ",s&&(i+=" if (!"+h+") break; "),i+=" } ",s&&(i+=" else "+h+" = true; "),i+=" } ",s&&(i+=" if ("+h+") { ",b+="}"))}return s&&(i+=" "+b+" if ("+o+" == errors) {"),i}},316:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="errs__"+a,u=e.util.copy(e);u.level++;var b="valid"+u.level;if(i+="var "+o+" = errors;",e.opts.strictKeywords?"object"==typeof n&&Object.keys(n).length>0||!1===n:e.util.schemaHasRules(n,e.RULES.all)){u.schema=n,u.schemaPath=f,u.errSchemaPath=l;var h="key"+a,w="idx"+a,k="i"+a,d="' + "+h+" + '",v="data"+(u.dataLevel=e.dataLevel+1),g="dataProperties"+a,m=e.opts.ownProperties,p=e.baseId;m&&(i+=" var "+g+" = undefined; "),i+=m?" "+g+" = "+g+" || Object.keys("+c+"); for (var "+w+"=0; "+w+"<"+g+".length; "+w+"++) { var "+h+" = "+g+"["+w+"]; ":" for (var "+h+" in "+c+") { ",i+=" var startErrs"+a+" = errors; ";var E=h,B=e.compositeRule;e.compositeRule=u.compositeRule=!0;var y=e.validate(u);u.baseId=p,e.util.varOccurences(y,v)<2?i+=" "+e.util.varReplace(y,v,E)+" ":i+=" var "+v+" = "+E+"; "+y+" ",e.compositeRule=u.compositeRule=B,i+=" if (!"+b+") { for (var "+k+"=startErrs"+a+"; "+k+"{"use strict";e.exports=function(e,A,r){var i,a,t=" ",n=e.level,f=e.dataLevel,l=e.schema[A],s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(f||""),u="valid"+n;if("#"==l||"#/"==l)e.isRoot?(i=e.async,a="validate"):(i=!0===e.root.schema.$async,a="root.refVal[0]");else{var b=e.resolveRef(e.baseId,l,e.isRoot);if(void 0===b){var h=e.MissingRefError.message(e.baseId,l);if("fail"==e.opts.missingRefs){e.logger.error(h),(v=v||[]).push(t),t="",!1!==e.createErrors?(t+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { ref: '"+e.util.escapeQuotes(l)+"' } ",!1!==e.opts.messages&&(t+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(l)+"' "),e.opts.verbose&&(t+=" , schema: "+e.util.toQuotedString(l)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),t+=" } "):t+=" {} ";var w=t;t=v.pop(),!e.compositeRule&&c?e.async?t+=" throw new ValidationError(["+w+"]); ":t+=" validate.errors = ["+w+"]; return false; ":t+=" var err = "+w+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(t+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs)throw new e.MissingRefError(e.baseId,l,h);e.logger.warn(h),c&&(t+=" if (true) { ")}}else if(b.inline){var k=e.util.copy(e);k.level++;var d="valid"+k.level;k.schema=b.schema,k.schemaPath="",k.errSchemaPath=l,t+=" "+e.validate(k).replace(/validate\.schema/g,b.code)+" ",c&&(t+=" if ("+d+") { ")}else i=!0===b.$async||e.async&&!1!==b.$async,a=b.code}if(a){var v;(v=v||[]).push(t),t="",e.opts.passContext?t+=" "+a+".call(this, ":t+=" "+a+"( ",t+=" "+o+", (dataPath || '')",'""'!=e.errorPath&&(t+=" + "+e.errorPath);var g=t+=" , "+(f?"data"+(f-1||""):"parentData")+" , "+(f?e.dataPathArr[f]:"parentDataProperty")+", rootData) ";if(t=v.pop(),i){if(!e.async)throw new Error("async schema referenced by sync schema");c&&(t+=" var "+u+"; "),t+=" try { await "+g+"; ",c&&(t+=" "+u+" = true; "),t+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",c&&(t+=" "+u+" = false; "),t+=" } ",c&&(t+=" if ("+u+") { ")}else t+=" if (!"+g+") { if (vErrors === null) vErrors = "+a+".errors; else vErrors = vErrors.concat("+a+".errors); errors = vErrors.length; } ",c&&(t+=" else { ")}return t}},8687:e=>{"use strict";e.exports=function(e,A,r){var i=" ",a=e.level,t=e.dataLevel,n=e.schema[A],f=e.schemaPath+e.util.getProperty(A),l=e.errSchemaPath+"/"+A,s=!e.opts.allErrors,c="data"+(t||""),o="valid"+a,u=e.opts.$data&&n&&n.$data;u&&(i+=" var schema"+a+" = "+e.util.getData(n.$data,t,e.dataPathArr)+"; ");var b="schema"+a;if(!u)if(n.length0||!1===g:e.util.schemaHasRules(g,e.RULES.all))||(h[h.length]=k)}}else h=n;if(u||h.length){var m=e.errorPath,p=u||h.length>=e.opts.loopRequired,E=e.opts.ownProperties;if(s)if(i+=" var missing"+a+"; ",p){u||(i+=" var "+b+" = validate.schema"+f+"; ");var B="' + "+(L="schema"+a+"["+(Z="i"+a)+"]")+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(m,L,e.opts.jsonPointers)),i+=" var "+o+" = true; ",u&&(i+=" if (schema"+a+" === undefined) "+o+" = true; else if (!Array.isArray(schema"+a+")) "+o+" = false; else {"),i+=" for (var "+Z+" = 0; "+Z+" < "+b+".length; "+Z+"++) { "+o+" = "+c+"["+b+"["+Z+"]] !== undefined ",E&&(i+=" && Object.prototype.hasOwnProperty.call("+c+", "+b+"["+Z+"]) "),i+="; if (!"+o+") break; } ",u&&(i+=" } "),i+=" if (!"+o+") { ",(C=C||[]).push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { missingProperty: '"+B+"' } ",!1!==e.opts.messages&&(i+=" , message: '",e.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+B+"\\'",i+="' "),e.opts.verbose&&(i+=" , schema: validate.schema"+f+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),i+=" } "):i+=" {} ";var y=i;i=C.pop(),!e.compositeRule&&s?e.async?i+=" throw new ValidationError(["+y+"]); ":i+=" validate.errors = ["+y+"]; return false; ":i+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { "}else{i+=" if ( ";var C,I=h;if(I)for(var Z=-1,G=I.length-1;Z{"use strict";e.exports=function(e,A,r){var i,a=" ",t=e.level,n=e.dataLevel,f=e.schema[A],l=e.schemaPath+e.util.getProperty(A),s=e.errSchemaPath+"/"+A,c=!e.opts.allErrors,o="data"+(n||""),u="valid"+t,b=e.opts.$data&&f&&f.$data;if(b?(a+=" var schema"+t+" = "+e.util.getData(f.$data,n,e.dataPathArr)+"; ",i="schema"+t):i=f,(f||b)&&!1!==e.opts.uniqueItems){b&&(a+=" var "+u+"; if ("+i+" === false || "+i+" === undefined) "+u+" = true; else if (typeof "+i+" != 'boolean') "+u+" = false; else { "),a+=" var i = "+o+".length , "+u+" = true , j; if (i > 1) { ";var h=e.schema.items&&e.schema.items.type,w=Array.isArray(h);if(!h||"object"==h||"array"==h||w&&(h.indexOf("object")>=0||h.indexOf("array")>=0))a+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+o+"[i], "+o+"[j])) { "+u+" = false; break outer; } } } ";else{a+=" var itemIndices = {}, item; for (;i--;) { var item = "+o+"[i]; ";var k="checkDataType"+(w?"s":"");a+=" if ("+e.util[k](h,"item",e.opts.strictNumbers,!0)+") continue; ",w&&(a+=" if (typeof item == 'string') item = '\"' + item; "),a+=" if (typeof itemIndices[item] == 'number') { "+u+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}a+=" } ",b&&(a+=" } "),a+=" if (!"+u+") { ";var d=d||[];d.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(s)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema: ",a+=b?"validate.schema"+l:""+f,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+o+" "),a+=" } "):a+=" {} ";var v=a;a=d.pop(),!e.compositeRule&&c?e.async?a+=" throw new ValidationError(["+v+"]); ":a+=" validate.errors = ["+v+"]; return false; ":a+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { ")}else c&&(a+=" if (true) { ");return a}},7768:e=>{"use strict";e.exports=function(e,A,r){var i="",a=!0===e.schema.$async,t=e.util.schemaHasRulesExcept(e.schema,e.RULES.all,"$ref"),n=e.self._getId(e.schema);if(e.opts.strictKeywords){var f=e.util.schemaUnknownRules(e.schema,e.RULES.keywords);if(f){var l="unknown keyword: "+f;if("log"!==e.opts.strictKeywords)throw new Error(l);e.logger.warn(l)}}if(e.isTop&&(i+=" var validate = ",a&&(e.async=!0,i+="async "),i+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",n&&(e.opts.sourceCode||e.opts.processCode)&&(i+=" /*# sourceURL="+n+" */ ")),"boolean"==typeof e.schema||!t&&!e.schema.$ref){A="false schema";var s=e.level,c=e.dataLevel,o=e.schema[A],u=e.schemaPath+e.util.getProperty(A),b=e.errSchemaPath+"/"+A,h=!e.opts.allErrors,w="data"+(c||""),k="valid"+s;if(!1===e.schema){e.isTop?h=!0:i+=" var "+k+" = false; ",(S=S||[]).push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(b)+" , params: {} ",!1!==e.opts.messages&&(i+=" , message: 'boolean schema is false' "),e.opts.verbose&&(i+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+w+" "),i+=" } "):i+=" {} ";var d=i;i=S.pop(),!e.compositeRule&&h?e.async?i+=" throw new ValidationError(["+d+"]); ":i+=" validate.errors = ["+d+"]; return false; ":i+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else e.isTop?i+=a?" return data; ":" validate.errors = null; return true; ":i+=" var "+k+" = true; ";return e.isTop&&(i+=" }; return validate; "),i}if(e.isTop){var v=e.isTop;if(s=e.level=0,c=e.dataLevel=0,w="data",e.rootId=e.resolve.fullPath(e.self._getId(e.root.schema)),e.baseId=e.baseId||e.rootId,delete e.isTop,e.dataPathArr=[""],void 0!==e.schema.default&&e.opts.useDefaults&&e.opts.strictDefaults){var g="default is ignored in the schema root";if("log"!==e.opts.strictDefaults)throw new Error(g);e.logger.warn(g)}i+=" var vErrors = null; ",i+=" var errors = 0; ",i+=" if (rootData === undefined) rootData = data; "}else{if(s=e.level,w="data"+((c=e.dataLevel)||""),n&&(e.baseId=e.resolve.url(e.baseId,n)),a&&!e.async)throw new Error("async schema in sync schema");i+=" var errs_"+s+" = errors;"}k="valid"+s,h=!e.opts.allErrors;var m="",p="",E=e.schema.type,B=Array.isArray(E);if(E&&e.opts.nullable&&!0===e.schema.nullable&&(B?-1==E.indexOf("null")&&(E=E.concat("null")):"null"!=E&&(E=[E,"null"],B=!0)),B&&1==E.length&&(E=E[0],B=!1),e.schema.$ref&&t){if("fail"==e.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+e.errSchemaPath+'" (see option extendRefs)');!0!==e.opts.extendRefs&&(t=!1,e.logger.warn('$ref: keywords ignored in schema at path "'+e.errSchemaPath+'"'))}if(e.schema.$comment&&e.opts.$comment&&(i+=" "+e.RULES.all.$comment.code(e,"$comment")),E){if(e.opts.coerceTypes)var y=e.util.coerceToTypes(e.opts.coerceTypes,E);var C=e.RULES.types[E];if(y||B||!0===C||C&&!q(C)){u=e.schemaPath+".type",b=e.errSchemaPath+"/type",u=e.schemaPath+".type",b=e.errSchemaPath+"/type";var I=B?"checkDataTypes":"checkDataType";if(i+=" if ("+e.util[I](E,w,e.opts.strictNumbers,!0)+") { ",y){var Z="dataType"+s,G="coerced"+s;i+=" var "+Z+" = typeof "+w+"; var "+G+" = undefined; ","array"==e.opts.coerceTypes&&(i+=" if ("+Z+" == 'object' && Array.isArray("+w+") && "+w+".length == 1) { "+w+" = "+w+"[0]; "+Z+" = typeof "+w+"; if ("+e.util.checkDataType(e.schema.type,w,e.opts.strictNumbers)+") "+G+" = "+w+"; } "),i+=" if ("+G+" !== undefined) ; ";var L=y;if(L)for(var Q,D=-1,z=L.length-1;D{"use strict";var i=/^[a-z_$][a-z0-9_$-]*$/i,a=r(9679),t=r(6296);e.exports={add:function(e,A){var r=this.RULES;if(r.keywords[e])throw new Error("Keyword "+e+" is already defined");if(!i.test(e))throw new Error("Keyword "+e+" is not a valid identifier");if(A){this.validateKeyword(A,!0);var t=A.type;if(Array.isArray(t))for(var n=0;n{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON Schema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},9302:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')},1183:e=>{"use strict";e.exports=function e(A,r){if(A===r)return!0;if(A&&r&&"object"==typeof A&&"object"==typeof r){if(A.constructor!==r.constructor)return!1;var i,a,t;if(Array.isArray(A)){if((i=A.length)!=r.length)return!1;for(a=i;0!=a--;)if(!e(A[a],r[a]))return!1;return!0}if(A.constructor===RegExp)return A.source===r.source&&A.flags===r.flags;if(A.valueOf!==Object.prototype.valueOf)return A.valueOf()===r.valueOf();if(A.toString!==Object.prototype.toString)return A.toString()===r.toString();if((i=(t=Object.keys(A)).length)!==Object.keys(r).length)return!1;for(a=i;0!=a--;)if(!Object.prototype.hasOwnProperty.call(r,t[a]))return!1;for(a=i;0!=a--;){var n=t[a];if(!e(A[n],r[n]))return!1}return!0}return A!=A&&r!=r}},9741:e=>{"use strict";e.exports=function(e,A){A||(A={}),"function"==typeof A&&(A={cmp:A});var r,i="boolean"==typeof A.cycles&&A.cycles,a=A.cmp&&(r=A.cmp,function(e){return function(A,i){var a={key:A,value:e[A]},t={key:i,value:e[i]};return r(a,t)}}),t=[];return function e(A){if(A&&A.toJSON&&"function"==typeof A.toJSON&&(A=A.toJSON()),void 0!==A){if("number"==typeof A)return isFinite(A)?""+A:"null";if("object"!=typeof A)return JSON.stringify(A);var r,n;if(Array.isArray(A)){for(n="[",r=0;r{"use strict";const i=r(5576).buildOptions,a={attributeNamePrefix:"@_",attrNodeName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataTagName:!1,cdataPositionChar:"\\c",format:!1,indentBy:" ",supressEmptyNode:!1,tagValueProcessor:function(e){return e},attrValueProcessor:function(e){return e}},t=["attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor"];function n(e){this.options=i(e,a,t),this.options.ignoreAttributes||this.options.attrNodeName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=h),this.options.cdataTagName?this.isCDATA=w:this.isCDATA=function(){return!1},this.replaceCDATAstr=f,this.replaceCDATAarr=l,this.options.format?(this.indentate=b,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""),this.options.supressEmptyNode?(this.buildTextNode=u,this.buildObjNode=c):(this.buildTextNode=o,this.buildObjNode=s),this.buildTextValNode=o,this.buildObjectNode=s}function f(e,A){return e=this.options.tagValueProcessor(""+e),""===this.options.cdataPositionChar||""===e?e+"");return e+this.newLine}function s(e,A,r,i){return r&&!e.includes("<")?this.indentate(i)+"<"+A+r+">"+e+""+this.options.tagValueProcessor(e)+"{"use strict";const i=function(e){return String.fromCharCode(e)},a={nilChar:i(176),missingChar:i(201),nilPremitive:i(175),missingPremitive:i(200),emptyChar:i(178),emptyValue:i(177),boundryChar:i(179),objStart:i(198),arrStart:i(204),arrayEnd:i(185)},t=[a.nilChar,a.nilPremitive,a.missingChar,a.missingPremitive,a.boundryChar,a.emptyChar,a.emptyValue,a.arrayEnd,a.objStart,a.arrStart],n=function(e,A,r){if("string"==typeof A)return e&&e[0]&&void 0!==e[0].val?f(e[0].val,A):f(e,A);{const t=void 0===(i=e)?a.missingChar:null===i?a.nilChar:!(i.child&&0===Object.keys(i.child).length&&(!i.attrsMap||0===Object.keys(i.attrsMap).length))||a.emptyChar;if(!0===t){let i="";if(Array.isArray(A)){i+=a.arrStart;const t=A[0],s=e.length;if("string"==typeof t)for(let A=0;A{"use strict";const i=r(5576),a=function(e,A){const r={};if(!(e.child&&!i.isEmptyObject(e.child)||e.attrsMap&&!i.isEmptyObject(e.attrsMap)))return i.isExist(e.val)?e.val:"";i.isExist(e.val)&&("string"!=typeof e.val||""!==e.val&&e.val!==A.cdataPositionChar)&&("strict"===A.arrayMode?r[A.textNodeName]=[e.val]:r[A.textNodeName]=e.val),i.merge(r,e.attrsMap,A.arrayMode);const t=Object.keys(e.child);for(let i=0;i1)for(var f in r[n]=[],e.child[n])r[n].push(a(e.child[n][f],A));else if(!0===A.arrayMode){const i=a(e.child[n][0],A);r[n]="object"==typeof i?[i]:i}else"strict"===A.arrayMode?r[n]=[a(e.child[n][0],A)]:r[n]=a(e.child[n][0],A)}return r};A.convertToJson=a},5269:(e,A,r)=>{"use strict";const i=r(5576),a=r(5576).buildOptions,t=r(268),n=function(e,A,r){let a="{";const t=Object.keys(e.child);for(let r=0;r1){for(var l in a+='"'+f+'" : [ ',e.child[f])a+=n(e.child[f][l],A)+" , ";a=a.substr(0,a.length-1)+" ] "}else a+='"'+f+'" : '+n(e.child[f][0],A)+" ,"}return i.merge(a,e.attrsMap),i.isEmptyObject(a)?i.isExist(e.val)?e.val:"":(i.isExist(e.val)&&("string"!=typeof e.val||""!==e.val&&e.val!==A.cdataPositionChar)&&(a+='"'+A.textNodeName+'" : '+(!0!==(s=e.val)&&!1!==s&&isNaN(s)?'"'+s+'"':s)),","===a[a.length-1]&&(a=a.substr(0,a.length-2)),a+"}");var s};A.convertToJsonString=function(e,A){return(A=a(A,t.defaultOptions,t.props)).indentBy=A.indentBy||"",n(e,A,0)}},1951:(e,A,r)=>{"use strict";const i=r(743),a=r(268),t=r(268),n=r(5576).buildOptions,f=r(3309);A.parse=function(e,A,r){if(r){!0===r&&(r={});const A=f.validate(e,r);if(!0!==A)throw Error(A.err.msg)}A=n(A,t.defaultOptions,t.props);const l=a.getTraversalObj(e,A);return i.convertToJson(l,A)},A.convertTonimn=r(2459).convert2nimn,A.getTraversalObj=a.getTraversalObj,A.convertToJson=i.convertToJson,A.convertToJsonString=r(5269).convertToJsonString,A.validate=f.validate,A.j2xParser=r(6265),A.parseToNimn=function(e,r,i){return A.convertTonimn(A.getTraversalObj(e,i),r,i)}},5576:(e,A)=>{"use strict";const r="[:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",i=new RegExp("^"+r+"$");A.isExist=function(e){return void 0!==e},A.isEmptyObject=function(e){return 0===Object.keys(e).length},A.merge=function(e,A,r){if(A){const i=Object.keys(A),a=i.length;for(let t=0;t{"use strict";const i=r(5576),a={allowBooleanAttributes:!1},t=["allowBooleanAttributes"];function n(e,A){for(var r=A;A5&&"xml"===i)return u("InvalidXml","XML declaration allowed only at the start of the document.",h(e,A));if("?"==e[A]&&">"==e[A+1]){A++;break}}return A}function f(e,A){if(e.length>A+5&&"-"===e[A+1]&&"-"===e[A+2]){for(A+=3;A"===e[A+2]){A+=2;break}}else if(e.length>A+8&&"D"===e[A+1]&&"O"===e[A+2]&&"C"===e[A+3]&&"T"===e[A+4]&&"Y"===e[A+5]&&"P"===e[A+6]&&"E"===e[A+7]){let r=1;for(A+=8;A"===e[A]&&(r--,0===r))break}else if(e.length>A+9&&"["===e[A+1]&&"C"===e[A+2]&&"D"===e[A+3]&&"A"===e[A+4]&&"T"===e[A+5]&&"A"===e[A+6]&&"["===e[A+7])for(A+=8;A"===e[A+2]){A+=2;break}return A}function l(e,A){let r="",i="",a=!1;for(;A"===e[A]&&""===i){a=!0;break}r+=e[A]}return""===i&&{value:r,index:A,tagClosed:a}}A.validate=function(e,A){A=i.buildOptions(A,a,t);const r=[];let s=!1,b=!1;"\ufeff"===e[0]&&(e=e.substr(1));for(let a=0;a"!==e[a]&&" "!==e[a]&&"\t"!==e[a]&&"\n"!==e[a]&&"\r"!==e[a];a++)n+=e[a];if(n=n.trim(),"/"===n[n.length-1]&&(n=n.substring(0,n.length-1),a--),w=n,!i.isName(w)){let A;return A=0===n.trim().length?"There is an unnecessary space between tag name and backward slash '0)return u("InvalidTag","Closing tag '"+n+"' can't have attributes or invalid starting.",h(e,a));{const A=r.pop();if(n!==A)return u("InvalidTag","Closing tag '"+A+"' is expected inplace of '"+n+"'.",h(e,a));0==r.length&&(b=!0)}}else{const i=c(d,A);if(!0!==i)return u(i.err.code,i.err.msg,h(e,a-d.length+i.err.line));if(!0===b)return u("InvalidXml","Multiple possible root nodes found.",h(e,a));r.push(n),s=!0}for(a++;a0)||u("InvalidXml","Invalid '"+JSON.stringify(r,null,4).replace(/\r?\n/g,"")+"' found.",1):u("InvalidXml","Start tag expected.",1)};const s=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function c(e,A){const r=i.getAllMatches(e,s),a={};for(let i=0;i{"use strict";e.exports=function(e,A,r){this.tagname=e,this.parent=A,this.child={},this.attrsMap={},this.val=r,this.addChild=function(e){Array.isArray(this.child[e.tagname])?this.child[e.tagname].push(e):this.child[e.tagname]=[e]}}},268:(e,A,r)=>{"use strict";const i=r(5576),a=r(5576).buildOptions,t=r(1457);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,i.nameRegexp),!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const n={attributeNamePrefix:"@_",attrNodeName:!1,textNodeName:"#text",ignoreAttributes:!0,ignoreNameSpace:!1,allowBooleanAttributes:!1,parseNodeValue:!0,parseAttributeValue:!1,arrayMode:!1,trimValues:!0,cdataTagName:!1,cdataPositionChar:"\\c",tagValueProcessor:function(e,A){return e},attrValueProcessor:function(e,A){return e},stopNodes:[]};A.defaultOptions=n;const f=["attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","arrayMode","trimValues","cdataTagName","cdataPositionChar","tagValueProcessor","attrValueProcessor","parseTrueNumberOnly","stopNodes"];function l(e,A,r){return A&&(r.trimValues&&(A=A.trim()),A=c(A=r.tagValueProcessor(A,e),r.parseNodeValue,r.parseTrueNumberOnly)),A}function s(e,A){if(A.ignoreNameSpace){const A=e.split(":"),r="/"===e.charAt(0)?"/":"";if("xmlns"===A[0])return"";2===A.length&&(e=r+A[1])}return e}function c(e,A,r){if(A&&"string"==typeof e){let A;return""===e.trim()||isNaN(e)?A="true"===e||"false"!==e&&e:(-1!==e.indexOf("0x")?A=Number.parseInt(e,16):-1!==e.indexOf(".")?(A=Number.parseFloat(e),e=e.replace(/\.?0+$/,"")):A=Number.parseInt(e,10),r&&(A=String(A)===e?A:e)),A}return i.isExist(e)?e:""}A.props=f;const o=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])(.*?)\\3)?","g");function u(e,A){if(!A.ignoreAttributes&&"string"==typeof e){e=e.replace(/\r?\n/g," ");const r=i.getAllMatches(e,o),a=r.length,t={};for(let e=0;e"===A)return{data:i,index:a};"\t"===A&&(A=" ")}i+=A}}function h(e,A,r,i){const a=e.indexOf(A,r);if(-1===a)throw new Error(i);return a+A.length-1}A.getTraversalObj=function(e,A){e=e.replace(/(\r\n)|\n/," "),A=a(A,n,f);const r=new t("!xml");let s=r,c="";for(let r=0;r",r,"Closing Tag is not closed.");let t=e.substring(r+2,a).trim();if(A.ignoreNameSpace){const e=t.indexOf(":");-1!==e&&(t=t.substr(e+1))}s&&(s.val?s.val=i.getValue(s.val)+""+l(t,c,A):s.val=l(t,c,A)),A.stopNodes.length&&A.stopNodes.includes(s.tagname)&&(s.child=[],null==s.attrsMap&&(s.attrsMap={}),s.val=e.substr(s.startIndex+1,r-s.startIndex-1)),s=s.parent,c="",r=a}else if("?"===e[r+1])r=h(e,"?>",r,"Pi Tag is not closed.");else if("!--"===e.substr(r+1,3))r=h(e,"--\x3e",r,"Comment is not closed.");else if("!D"===e.substr(r+1,2)){const A=h(e,">",r,"DOCTYPE is not closed.");r=e.substring(r,A).indexOf("[")>=0?e.indexOf("]>",r)+1:A}else if("!["===e.substr(r+1,2)){const a=h(e,"]]>",r,"CDATA is not closed.")-2,n=e.substring(r+9,a);if(c&&(s.val=i.getValue(s.val)+""+l(s.tagname,c,A),c=""),A.cdataTagName){const e=new t(A.cdataTagName,s,n);s.addChild(e),s.val=i.getValue(s.val)+A.cdataPositionChar,n&&(e.val=n)}else s.val=(s.val||"")+(n||"");r=a+2}else{const a=b(e,r+1);let n=a.data;const f=a.index,o=n.indexOf(" ");let h=n;if(-1!==o&&(h=n.substr(0,o).trimRight(),n=n.substr(o+1)),A.ignoreNameSpace){const e=h.indexOf(":");-1!==e&&(h=h.substr(e+1))}if(s&&c&&"!xml"!==s.tagname&&(s.val=i.getValue(s.val)+""+l(s.tagname,c,A)),n.length>0&&n.lastIndexOf("/")===n.length-1){"/"===h[h.length-1]?(h=h.substr(0,h.length-1),n=h):n=n.substr(0,n.length-1);const e=new t(h,s,"");h!==n&&(e.attrsMap=u(n,A)),s.addChild(e)}else{const e=new t(h,s);A.stopNodes.length&&A.stopNodes.includes(e.tagname)&&(e.startIndex=f),h!==n&&(e.attrsMap=u(n,A)),s.addChild(e),s=e}c="",r=f}else c+=e[r];return r}},5631:function(e){var A;A=function(){return function(e){var A={};function r(i){if(A[i])return A[i].exports;var a=A[i]={exports:{},id:i,loaded:!1};return e[i].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}return r.m=e,r.c=A,r.p="",r(0)}([function(e,A,r){"use strict";var i=r(1).default,a=r(2).default;A.__esModule=!0;var t=i(r(3)),n=a(r(36)),f=a(r(5)),l=i(r(4)),s=i(r(37)),c=a(r(43));function o(){var e=new t.HandlebarsEnvironment;return l.extend(e,t),e.SafeString=n.default,e.Exception=f.default,e.Utils=l,e.escapeExpression=l.escapeExpression,e.VM=s,e.template=function(A){return s.template(A,e)},e}var u=o();u.create=o,c.default(u),u.default=u,A.default=u,e.exports=A.default},function(e,A){"use strict";A.default=function(e){if(e&&e.__esModule)return e;var A={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(A[r]=e[r]);return A.default=e,A},A.__esModule=!0},function(e,A){"use strict";A.default=function(e){return e&&e.__esModule?e:{default:e}},A.__esModule=!0},function(e,A,r){"use strict";var i=r(2).default;A.__esModule=!0,A.HandlebarsEnvironment=o;var a=r(4),t=i(r(5)),n=r(9),f=r(29),l=i(r(31)),s=r(32);A.VERSION="4.7.6",A.COMPILER_REVISION=8,A.LAST_COMPATIBLE_COMPILER_REVISION=7,A.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};var c="[object Object]";function o(e,A,r){this.helpers=e||{},this.partials=A||{},this.decorators=r||{},n.registerDefaultHelpers(this),f.registerDefaultDecorators(this)}o.prototype={constructor:o,logger:l.default,log:l.default.log,registerHelper:function(e,A){if(a.toString.call(e)===c){if(A)throw new t.default("Arg not supported with multiple helpers");a.extend(this.helpers,e)}else this.helpers[e]=A},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,A){if(a.toString.call(e)===c)a.extend(this.partials,e);else{if(void 0===A)throw new t.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=A}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,A){if(a.toString.call(e)===c){if(A)throw new t.default("Arg not supported with multiple decorators");a.extend(this.decorators,e)}else this.decorators[e]=A},unregisterDecorator:function(e){delete this.decorators[e]},resetLoggedPropertyAccesses:function(){s.resetLoggedProperties()}};var u=l.default.log;A.log=u,A.createFrame=a.createFrame,A.logger=l.default},function(e,A){"use strict";A.__esModule=!0,A.extend=n,A.indexOf=function(e,A){for(var r=0,i=e.length;r":">",'"':""","'":"'","`":"`","=":"="},i=/[&<>"'`=]/g,a=/[&<>"'`=]/;function t(e){return r[e]}function n(e){for(var A=1;A0?(r.ids&&(r.ids=[r.name]),e.helpers.each(A,r)):a(this);if(r.data&&r.ids){var n=i.createFrame(r.data);n.contextPath=i.appendContextPath(r.data.contextPath,r.name),r={data:n}}return t(A,r)}))},e.exports=A.default},function(e,A,r){(function(i){"use strict";var a=r(12).default,t=r(2).default;A.__esModule=!0;var n=r(4),f=t(r(5));A.default=function(e){e.registerHelper("each",(function(e,A){if(!A)throw new f.default("Must pass iterator to #each");var r,t=A.fn,l=A.inverse,s=0,c="",o=void 0,u=void 0;function b(A,r,i){o&&(o.key=A,o.index=r,o.first=0===r,o.last=!!i,u&&(o.contextPath=u+A)),c+=t(e[A],{data:o,blockParams:n.blockParams([e[A],A],[u+A,null])})}if(A.data&&A.ids&&(u=n.appendContextPath(A.data.contextPath,A.ids[0])+"."),n.isFunction(e)&&(e=e.call(this)),A.data&&(o=n.createFrame(A.data)),e&&"object"==typeof e)if(n.isArray(e))for(var h=e.length;s=0?A:parseInt(e,10)}return e},log:function(e){if(e=a.lookupLevel(e),"undefined"!=typeof console&&a.lookupLevel(a.level)<=e){var A=a.methodMap[e];console[A]||(A="log");for(var r=arguments.length,i=Array(r>1?r-1:0),t=1;t=s.LAST_COMPATIBLE_COMPILER_REVISION&&A<=s.COMPILER_REVISION)){if(A\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,c={"­":"shy","‌":"zwnj","‍":"zwj","‎":"lrm","⁣":"ic","⁢":"it","⁡":"af","‏":"rlm","​":"ZeroWidthSpace","⁠":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp","  ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprime","‵":"bprime","⁁":"caret","`":"grave","´":"acute","˜":"tilde","^":"Hat","¯":"macr","˘":"breve","˙":"dot","¨":"die","˚":"ring","˝":"dblac","¸":"cedil","˛":"ogon",ˆ:"circ",ˇ:"caron","°":"deg","©":"copy","®":"reg","℗":"copysr",℘:"wp","℞":"rx","℧":"mho","℩":"iiota","←":"larr","↚":"nlarr","→":"rarr","↛":"nrarr","↑":"uarr","↓":"darr","↔":"harr","↮":"nharr","↕":"varr","↖":"nwarr","↗":"nearr","↘":"searr","↙":"swarr","↝":"rarrw","↝̸":"nrarrw","↞":"Larr","↟":"Uarr","↠":"Rarr","↡":"Darr","↢":"larrtl","↣":"rarrtl","↤":"mapstoleft","↥":"mapstoup","↦":"map","↧":"mapstodown","↩":"larrhk","↪":"rarrhk","↫":"larrlp","↬":"rarrlp","↭":"harrw","↰":"lsh","↱":"rsh","↲":"ldsh","↳":"rdsh","↵":"crarr","↶":"cularr","↷":"curarr","↺":"olarr","↻":"orarr","↼":"lharu","↽":"lhard","↾":"uharr","↿":"uharl","⇀":"rharu","⇁":"rhard","⇂":"dharr","⇃":"dharl","⇄":"rlarr","⇅":"udarr","⇆":"lrarr","⇇":"llarr","⇈":"uuarr","⇉":"rrarr","⇊":"ddarr","⇋":"lrhar","⇌":"rlhar","⇐":"lArr","⇍":"nlArr","⇑":"uArr","⇒":"rArr","⇏":"nrArr","⇓":"dArr","⇔":"iff","⇎":"nhArr","⇕":"vArr","⇖":"nwArr","⇗":"neArr","⇘":"seArr","⇙":"swArr","⇚":"lAarr","⇛":"rAarr","⇝":"zigrarr","⇤":"larrb","⇥":"rarrb","⇵":"duarr","⇽":"loarr","⇾":"roarr","⇿":"hoarr","∀":"forall","∁":"comp","∂":"part","∂̸":"npart","∃":"exist","∄":"nexist","∅":"empty","∇":"Del","∈":"in","∉":"notin","∋":"ni","∌":"notni","϶":"bepsi","∏":"prod","∐":"coprod","∑":"sum","+":"plus","±":"pm","÷":"div","×":"times","<":"lt","≮":"nlt","<⃒":"nvlt","=":"equals","≠":"ne","=⃥":"bne","⩵":"Equal",">":"gt","≯":"ngt",">⃒":"nvgt","¬":"not","|":"vert","¦":"brvbar","−":"minus","∓":"mp","∔":"plusdo","⁄":"frasl","∖":"setmn","∗":"lowast","∘":"compfn","√":"Sqrt","∝":"prop","∞":"infin","∟":"angrt","∠":"ang","∠⃒":"nang","∡":"angmsd","∢":"angsph","∣":"mid","∤":"nmid","∥":"par","∦":"npar","∧":"and","∨":"or","∩":"cap","∩︀":"caps","∪":"cup","∪︀":"cups","∫":"int","∬":"Int","∭":"tint","⨌":"qint","∮":"oint","∯":"Conint","∰":"Cconint","∱":"cwint","∲":"cwconint","∳":"awconint","∴":"there4","∵":"becaus","∶":"ratio","∷":"Colon","∸":"minusd","∺":"mDDot","∻":"homtht","∼":"sim","≁":"nsim","∼⃒":"nvsim","∽":"bsim","∽̱":"race","∾":"ac","∾̳":"acE","∿":"acd","≀":"wr","≂":"esim","≂̸":"nesim","≃":"sime","≄":"nsime","≅":"cong","≇":"ncong","≆":"simne","≈":"ap","≉":"nap","≊":"ape","≋":"apid","≋̸":"napid","≌":"bcong","≍":"CupCap","≭":"NotCupCap","≍⃒":"nvap","≎":"bump","≎̸":"nbump","≏":"bumpe","≏̸":"nbumpe","≐":"doteq","≐̸":"nedot","≑":"eDot","≒":"efDot","≓":"erDot","≔":"colone","≕":"ecolon","≖":"ecir","≗":"cire","≙":"wedgeq","≚":"veeeq","≜":"trie","≟":"equest","≡":"equiv","≢":"nequiv","≡⃥":"bnequiv","≤":"le","≰":"nle","≤⃒":"nvle","≥":"ge","≱":"nge","≥⃒":"nvge","≦":"lE","≦̸":"nlE","≧":"gE","≧̸":"ngE","≨︀":"lvnE","≨":"lnE","≩":"gnE","≩︀":"gvnE","≪":"ll","≪̸":"nLtv","≪⃒":"nLt","≫":"gg","≫̸":"nGtv","≫⃒":"nGt","≬":"twixt","≲":"lsim","≴":"nlsim","≳":"gsim","≵":"ngsim","≶":"lg","≸":"ntlg","≷":"gl","≹":"ntgl","≺":"pr","⊀":"npr","≻":"sc","⊁":"nsc","≼":"prcue","⋠":"nprcue","≽":"sccue","⋡":"nsccue","≾":"prsim","≿":"scsim","≿̸":"NotSucceedsTilde","⊂":"sub","⊄":"nsub","⊂⃒":"vnsub","⊃":"sup","⊅":"nsup","⊃⃒":"vnsup","⊆":"sube","⊈":"nsube","⊇":"supe","⊉":"nsupe","⊊︀":"vsubne","⊊":"subne","⊋︀":"vsupne","⊋":"supne","⊍":"cupdot","⊎":"uplus","⊏":"sqsub","⊏̸":"NotSquareSubset","⊐":"sqsup","⊐̸":"NotSquareSuperset","⊑":"sqsube","⋢":"nsqsube","⊒":"sqsupe","⋣":"nsqsupe","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"osol","⊙":"odot","⊚":"ocir","⊛":"oast","⊝":"odash","⊞":"plusb","⊟":"minusb","⊠":"timesb","⊡":"sdotb","⊢":"vdash","⊬":"nvdash","⊣":"dashv","⊤":"top","⊥":"bot","⊧":"models","⊨":"vDash","⊭":"nvDash","⊩":"Vdash","⊮":"nVdash","⊪":"Vvdash","⊫":"VDash","⊯":"nVDash","⊰":"prurel","⊲":"vltri","⋪":"nltri","⊳":"vrtri","⋫":"nrtri","⊴":"ltrie","⋬":"nltrie","⊴⃒":"nvltrie","⊵":"rtrie","⋭":"nrtrie","⊵⃒":"nvrtrie","⊶":"origof","⊷":"imof","⊸":"mumap","⊹":"hercon","⊺":"intcal","⊻":"veebar","⊽":"barvee","⊾":"angrtvb","⊿":"lrtri","⋀":"Wedge","⋁":"Vee","⋂":"xcap","⋃":"xcup","⋄":"diam","⋅":"sdot","⋆":"Star","⋇":"divonx","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋋":"lthree","⋌":"rthree","⋍":"bsime","⋎":"cuvee","⋏":"cuwed","⋐":"Sub","⋑":"Sup","⋒":"Cap","⋓":"Cup","⋔":"fork","⋕":"epar","⋖":"ltdot","⋗":"gtdot","⋘":"Ll","⋘̸":"nLl","⋙":"Gg","⋙̸":"nGg","⋚︀":"lesg","⋚":"leg","⋛":"gel","⋛︀":"gesl","⋞":"cuepr","⋟":"cuesc","⋦":"lnsim","⋧":"gnsim","⋨":"prnsim","⋩":"scnsim","⋮":"vellip","⋯":"ctdot","⋰":"utdot","⋱":"dtdot","⋲":"disin","⋳":"isinsv","⋴":"isins","⋵":"isindot","⋵̸":"notindot","⋶":"notinvc","⋷":"notinvb","⋹":"isinE","⋹̸":"notinE","⋺":"nisd","⋻":"xnis","⋼":"nis","⋽":"notnivc","⋾":"notnivb","⌅":"barwed","⌆":"Barwed","⌌":"drcrop","⌍":"dlcrop","⌎":"urcrop","⌏":"ulcrop","⌐":"bnot","⌒":"profline","⌓":"profsurf","⌕":"telrec","⌖":"target","⌜":"ulcorn","⌝":"urcorn","⌞":"dlcorn","⌟":"drcorn","⌢":"frown","⌣":"smile","⌭":"cylcty","⌮":"profalar","⌶":"topbot","⌽":"ovbar","⌿":"solbar","⍼":"angzarr","⎰":"lmoust","⎱":"rmoust","⎴":"tbrk","⎵":"bbrk","⎶":"bbrktbrk","⏜":"OverParenthesis","⏝":"UnderParenthesis","⏞":"OverBrace","⏟":"UnderBrace","⏢":"trpezium","⏧":"elinters","␣":"blank","─":"boxh","│":"boxv","┌":"boxdr","┐":"boxdl","└":"boxur","┘":"boxul","├":"boxvr","┤":"boxvl","┬":"boxhd","┴":"boxhu","┼":"boxvh","═":"boxH","║":"boxV","╒":"boxdR","╓":"boxDr","╔":"boxDR","╕":"boxdL","╖":"boxDl","╗":"boxDL","╘":"boxuR","╙":"boxUr","╚":"boxUR","╛":"boxuL","╜":"boxUl","╝":"boxUL","╞":"boxvR","╟":"boxVr","╠":"boxVR","╡":"boxvL","╢":"boxVl","╣":"boxVL","╤":"boxHd","╥":"boxhD","╦":"boxHD","╧":"boxHu","╨":"boxhU","╩":"boxHU","╪":"boxvH","╫":"boxVh","╬":"boxVH","▀":"uhblk","▄":"lhblk","█":"block","░":"blk14","▒":"blk12","▓":"blk34","□":"squ","▪":"squf","▫":"EmptyVerySmallSquare","▭":"rect","▮":"marker","▱":"fltns","△":"xutri","▴":"utrif","▵":"utri","▸":"rtrif","▹":"rtri","▽":"xdtri","▾":"dtrif","▿":"dtri","◂":"ltrif","◃":"ltri","◊":"loz","○":"cir","◬":"tridot","◯":"xcirc","◸":"ultri","◹":"urtri","◺":"lltri","◻":"EmptySmallSquare","◼":"FilledSmallSquare","★":"starf","☆":"star","☎":"phone","♀":"female","♂":"male","♠":"spades","♣":"clubs","♥":"hearts","♦":"diams","♪":"sung","✓":"check","✗":"cross","✠":"malt","✶":"sext","❘":"VerticalSeparator","⟈":"bsolhsub","⟉":"suphsol","⟵":"xlarr","⟶":"xrarr","⟷":"xharr","⟸":"xlArr","⟹":"xrArr","⟺":"xhArr","⟼":"xmap","⟿":"dzigrarr","⤂":"nvlArr","⤃":"nvrArr","⤄":"nvHarr","⤅":"Map","⤌":"lbarr","⤍":"rbarr","⤎":"lBarr","⤏":"rBarr","⤐":"RBarr","⤑":"DDotrahd","⤒":"UpArrowBar","⤓":"DownArrowBar","⤖":"Rarrtl","⤙":"latail","⤚":"ratail","⤛":"lAtail","⤜":"rAtail","⤝":"larrfs","⤞":"rarrfs","⤟":"larrbfs","⤠":"rarrbfs","⤣":"nwarhk","⤤":"nearhk","⤥":"searhk","⤦":"swarhk","⤧":"nwnear","⤨":"toea","⤩":"tosa","⤪":"swnwar","⤳":"rarrc","⤳̸":"nrarrc","⤵":"cudarrr","⤶":"ldca","⤷":"rdca","⤸":"cudarrl","⤹":"larrpl","⤼":"curarrm","⤽":"cularrp","⥅":"rarrpl","⥈":"harrcir","⥉":"Uarrocir","⥊":"lurdshar","⥋":"ldrushar","⥎":"LeftRightVector","⥏":"RightUpDownVector","⥐":"DownLeftRightVector","⥑":"LeftUpDownVector","⥒":"LeftVectorBar","⥓":"RightVectorBar","⥔":"RightUpVectorBar","⥕":"RightDownVectorBar","⥖":"DownLeftVectorBar","⥗":"DownRightVectorBar","⥘":"LeftUpVectorBar","⥙":"LeftDownVectorBar","⥚":"LeftTeeVector","⥛":"RightTeeVector","⥜":"RightUpTeeVector","⥝":"RightDownTeeVector","⥞":"DownLeftTeeVector","⥟":"DownRightTeeVector","⥠":"LeftUpTeeVector","⥡":"LeftDownTeeVector","⥢":"lHar","⥣":"uHar","⥤":"rHar","⥥":"dHar","⥦":"luruhar","⥧":"ldrdhar","⥨":"ruluhar","⥩":"rdldhar","⥪":"lharul","⥫":"llhard","⥬":"rharul","⥭":"lrhard","⥮":"udhar","⥯":"duhar","⥰":"RoundImplies","⥱":"erarr","⥲":"simrarr","⥳":"larrsim","⥴":"rarrsim","⥵":"rarrap","⥶":"ltlarr","⥸":"gtrarr","⥹":"subrarr","⥻":"suplarr","⥼":"lfisht","⥽":"rfisht","⥾":"ufisht","⥿":"dfisht","⦚":"vzigzag","⦜":"vangrt","⦝":"angrtvbd","⦤":"ange","⦥":"range","⦦":"dwangle","⦧":"uwangle","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","⦰":"bemptyv","⦱":"demptyv","⦲":"cemptyv","⦳":"raemptyv","⦴":"laemptyv","⦵":"ohbar","⦶":"omid","⦷":"opar","⦹":"operp","⦻":"olcross","⦼":"odsold","⦾":"olcir","⦿":"ofcir","⧀":"olt","⧁":"ogt","⧂":"cirscir","⧃":"cirE","⧄":"solb","⧅":"bsolb","⧉":"boxbox","⧍":"trisb","⧎":"rtriltri","⧏":"LeftTriangleBar","⧏̸":"NotLeftTriangleBar","⧐":"RightTriangleBar","⧐̸":"NotRightTriangleBar","⧜":"iinfin","⧝":"infintie","⧞":"nvinfin","⧣":"eparsl","⧤":"smeparsl","⧥":"eqvparsl","⧫":"lozf","⧴":"RuleDelayed","⧶":"dsol","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨄":"xuplus","⨆":"xsqcup","⨍":"fpartint","⨐":"cirfnint","⨑":"awint","⨒":"rppolint","⨓":"scpolint","⨔":"npolint","⨕":"pointint","⨖":"quatint","⨗":"intlarhk","⨢":"pluscir","⨣":"plusacir","⨤":"simplus","⨥":"plusdu","⨦":"plussim","⨧":"plustwo","⨩":"mcomma","⨪":"minusdu","⨭":"loplus","⨮":"roplus","⨯":"Cross","⨰":"timesd","⨱":"timesbar","⨳":"smashp","⨴":"lotimes","⨵":"rotimes","⨶":"otimesas","⨷":"Otimes","⨸":"odiv","⨹":"triplus","⨺":"triminus","⨻":"tritime","⨼":"iprod","⨿":"amalg","⩀":"capdot","⩂":"ncup","⩃":"ncap","⩄":"capand","⩅":"cupor","⩆":"cupcap","⩇":"capcup","⩈":"cupbrcap","⩉":"capbrcup","⩊":"cupcup","⩋":"capcap","⩌":"ccups","⩍":"ccaps","⩐":"ccupssm","⩓":"And","⩔":"Or","⩕":"andand","⩖":"oror","⩗":"orslope","⩘":"andslope","⩚":"andv","⩛":"orv","⩜":"andd","⩝":"ord","⩟":"wedbar","⩦":"sdote","⩪":"simdot","⩭":"congdot","⩭̸":"ncongdot","⩮":"easter","⩯":"apacir","⩰":"apE","⩰̸":"napE","⩱":"eplus","⩲":"pluse","⩳":"Esim","⩷":"eDDot","⩸":"equivDD","⩹":"ltcir","⩺":"gtcir","⩻":"ltquest","⩼":"gtquest","⩽":"les","⩽̸":"nles","⩾":"ges","⩾̸":"nges","⩿":"lesdot","⪀":"gesdot","⪁":"lesdoto","⪂":"gesdoto","⪃":"lesdotor","⪄":"gesdotol","⪅":"lap","⪆":"gap","⪇":"lne","⪈":"gne","⪉":"lnap","⪊":"gnap","⪋":"lEg","⪌":"gEl","⪍":"lsime","⪎":"gsime","⪏":"lsimg","⪐":"gsiml","⪑":"lgE","⪒":"glE","⪓":"lesges","⪔":"gesles","⪕":"els","⪖":"egs","⪗":"elsdot","⪘":"egsdot","⪙":"el","⪚":"eg","⪝":"siml","⪞":"simg","⪟":"simlE","⪠":"simgE","⪡":"LessLess","⪡̸":"NotNestedLessLess","⪢":"GreaterGreater","⪢̸":"NotNestedGreaterGreater","⪤":"glj","⪥":"gla","⪦":"ltcc","⪧":"gtcc","⪨":"lescc","⪩":"gescc","⪪":"smt","⪫":"lat","⪬":"smte","⪬︀":"smtes","⪭":"late","⪭︀":"lates","⪮":"bumpE","⪯":"pre","⪯̸":"npre","⪰":"sce","⪰̸":"nsce","⪳":"prE","⪴":"scE","⪵":"prnE","⪶":"scnE","⪷":"prap","⪸":"scap","⪹":"prnap","⪺":"scnap","⪻":"Pr","⪼":"Sc","⪽":"subdot","⪾":"supdot","⪿":"subplus","⫀":"supplus","⫁":"submult","⫂":"supmult","⫃":"subedot","⫄":"supedot","⫅":"subE","⫅̸":"nsubE","⫆":"supE","⫆̸":"nsupE","⫇":"subsim","⫈":"supsim","⫋︀":"vsubnE","⫋":"subnE","⫌︀":"vsupnE","⫌":"supnE","⫏":"csub","⫐":"csup","⫑":"csube","⫒":"csupe","⫓":"subsup","⫔":"supsub","⫕":"subsub","⫖":"supsup","⫗":"suphsub","⫘":"supdsub","⫙":"forkv","⫚":"topfork","⫛":"mlcp","⫤":"Dashv","⫦":"Vdashl","⫧":"Barv","⫨":"vBar","⫩":"vBarv","⫫":"Vbar","⫬":"Not","⫭":"bNot","⫮":"rnmid","⫯":"cirmid","⫰":"midcir","⫱":"topcir","⫲":"nhpar","⫳":"parsim","⫽":"parsl","⫽⃥":"nparsl","♭":"flat","♮":"natur","♯":"sharp","¤":"curren","¢":"cent",$:"dollar","£":"pound","¥":"yen","€":"euro","¹":"sup1","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","²":"sup2","⅔":"frac23","⅖":"frac25","³":"sup3","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78",𝒶:"ascr",𝕒:"aopf",𝔞:"afr",𝔸:"Aopf",𝔄:"Afr",𝒜:"Ascr",ª:"ordf",á:"aacute",Á:"Aacute",à:"agrave",À:"Agrave",ă:"abreve",Ă:"Abreve",â:"acirc",Â:"Acirc",å:"aring",Å:"angst",ä:"auml",Ä:"Auml",ã:"atilde",Ã:"Atilde",ą:"aogon",Ą:"Aogon",ā:"amacr",Ā:"Amacr",æ:"aelig",Æ:"AElig",𝒷:"bscr",𝕓:"bopf",𝔟:"bfr",𝔹:"Bopf",ℬ:"Bscr",𝔅:"Bfr",𝔠:"cfr",𝒸:"cscr",𝕔:"copf",ℭ:"Cfr",𝒞:"Cscr",ℂ:"Copf",ć:"cacute",Ć:"Cacute",ĉ:"ccirc",Ĉ:"Ccirc",č:"ccaron",Č:"Ccaron",ċ:"cdot",Ċ:"Cdot",ç:"ccedil",Ç:"Ccedil","℅":"incare",𝔡:"dfr",ⅆ:"dd",𝕕:"dopf",𝒹:"dscr",𝒟:"Dscr",𝔇:"Dfr",ⅅ:"DD",𝔻:"Dopf",ď:"dcaron",Ď:"Dcaron",đ:"dstrok",Đ:"Dstrok",ð:"eth",Ð:"ETH",ⅇ:"ee",ℯ:"escr",𝔢:"efr",𝕖:"eopf",ℰ:"Escr",𝔈:"Efr",𝔼:"Eopf",é:"eacute",É:"Eacute",è:"egrave",È:"Egrave",ê:"ecirc",Ê:"Ecirc",ě:"ecaron",Ě:"Ecaron",ë:"euml",Ë:"Euml",ė:"edot",Ė:"Edot",ę:"eogon",Ę:"Eogon",ē:"emacr",Ē:"Emacr",𝔣:"ffr",𝕗:"fopf",𝒻:"fscr",𝔉:"Ffr",𝔽:"Fopf",ℱ:"Fscr",ff:"fflig",ffi:"ffilig",ffl:"ffllig",fi:"filig",fj:"fjlig",fl:"fllig",ƒ:"fnof",ℊ:"gscr",𝕘:"gopf",𝔤:"gfr",𝒢:"Gscr",𝔾:"Gopf",𝔊:"Gfr",ǵ:"gacute",ğ:"gbreve",Ğ:"Gbreve",ĝ:"gcirc",Ĝ:"Gcirc",ġ:"gdot",Ġ:"Gdot",Ģ:"Gcedil",𝔥:"hfr",ℎ:"planckh",𝒽:"hscr",𝕙:"hopf",ℋ:"Hscr",ℌ:"Hfr",ℍ:"Hopf",ĥ:"hcirc",Ĥ:"Hcirc",ℏ:"hbar",ħ:"hstrok",Ħ:"Hstrok",𝕚:"iopf",𝔦:"ifr",𝒾:"iscr",ⅈ:"ii",𝕀:"Iopf",ℐ:"Iscr",ℑ:"Im",í:"iacute",Í:"Iacute",ì:"igrave",Ì:"Igrave",î:"icirc",Î:"Icirc",ï:"iuml",Ï:"Iuml",ĩ:"itilde",Ĩ:"Itilde",İ:"Idot",į:"iogon",Į:"Iogon",ī:"imacr",Ī:"Imacr",ij:"ijlig",IJ:"IJlig",ı:"imath",𝒿:"jscr",𝕛:"jopf",𝔧:"jfr",𝒥:"Jscr",𝔍:"Jfr",𝕁:"Jopf",ĵ:"jcirc",Ĵ:"Jcirc",ȷ:"jmath",𝕜:"kopf",𝓀:"kscr",𝔨:"kfr",𝒦:"Kscr",𝕂:"Kopf",𝔎:"Kfr",ķ:"kcedil",Ķ:"Kcedil",𝔩:"lfr",𝓁:"lscr",ℓ:"ell",𝕝:"lopf",ℒ:"Lscr",𝔏:"Lfr",𝕃:"Lopf",ĺ:"lacute",Ĺ:"Lacute",ľ:"lcaron",Ľ:"Lcaron",ļ:"lcedil",Ļ:"Lcedil",ł:"lstrok",Ł:"Lstrok",ŀ:"lmidot",Ŀ:"Lmidot",𝔪:"mfr",𝕞:"mopf",𝓂:"mscr",𝔐:"Mfr",𝕄:"Mopf",ℳ:"Mscr",𝔫:"nfr",𝕟:"nopf",𝓃:"nscr",ℕ:"Nopf",𝒩:"Nscr",𝔑:"Nfr",ń:"nacute",Ń:"Nacute",ň:"ncaron",Ň:"Ncaron",ñ:"ntilde",Ñ:"Ntilde",ņ:"ncedil",Ņ:"Ncedil","№":"numero",ŋ:"eng",Ŋ:"ENG",𝕠:"oopf",𝔬:"ofr",ℴ:"oscr",𝒪:"Oscr",𝔒:"Ofr",𝕆:"Oopf",º:"ordm",ó:"oacute",Ó:"Oacute",ò:"ograve",Ò:"Ograve",ô:"ocirc",Ô:"Ocirc",ö:"ouml",Ö:"Ouml",ő:"odblac",Ő:"Odblac",õ:"otilde",Õ:"Otilde",ø:"oslash",Ø:"Oslash",ō:"omacr",Ō:"Omacr",œ:"oelig",Œ:"OElig",𝔭:"pfr",𝓅:"pscr",𝕡:"popf",ℙ:"Popf",𝔓:"Pfr",𝒫:"Pscr",𝕢:"qopf",𝔮:"qfr",𝓆:"qscr",𝒬:"Qscr",𝔔:"Qfr",ℚ:"Qopf",ĸ:"kgreen",𝔯:"rfr",𝕣:"ropf",𝓇:"rscr",ℛ:"Rscr",ℜ:"Re",ℝ:"Ropf",ŕ:"racute",Ŕ:"Racute",ř:"rcaron",Ř:"Rcaron",ŗ:"rcedil",Ŗ:"Rcedil",𝕤:"sopf",𝓈:"sscr",𝔰:"sfr",𝕊:"Sopf",𝔖:"Sfr",𝒮:"Sscr","Ⓢ":"oS",ś:"sacute",Ś:"Sacute",ŝ:"scirc",Ŝ:"Scirc",š:"scaron",Š:"Scaron",ş:"scedil",Ş:"Scedil",ß:"szlig",𝔱:"tfr",𝓉:"tscr",𝕥:"topf",𝒯:"Tscr",𝔗:"Tfr",𝕋:"Topf",ť:"tcaron",Ť:"Tcaron",ţ:"tcedil",Ţ:"Tcedil","™":"trade",ŧ:"tstrok",Ŧ:"Tstrok",𝓊:"uscr",𝕦:"uopf",𝔲:"ufr",𝕌:"Uopf",𝔘:"Ufr",𝒰:"Uscr",ú:"uacute",Ú:"Uacute",ù:"ugrave",Ù:"Ugrave",ŭ:"ubreve",Ŭ:"Ubreve",û:"ucirc",Û:"Ucirc",ů:"uring",Ů:"Uring",ü:"uuml",Ü:"Uuml",ű:"udblac",Ű:"Udblac",ũ:"utilde",Ũ:"Utilde",ų:"uogon",Ų:"Uogon",ū:"umacr",Ū:"Umacr",𝔳:"vfr",𝕧:"vopf",𝓋:"vscr",𝔙:"Vfr",𝕍:"Vopf",𝒱:"Vscr",𝕨:"wopf",𝓌:"wscr",𝔴:"wfr",𝒲:"Wscr",𝕎:"Wopf",𝔚:"Wfr",ŵ:"wcirc",Ŵ:"Wcirc",𝔵:"xfr",𝓍:"xscr",𝕩:"xopf",𝕏:"Xopf",𝔛:"Xfr",𝒳:"Xscr",𝔶:"yfr",𝓎:"yscr",𝕪:"yopf",𝒴:"Yscr",𝔜:"Yfr",𝕐:"Yopf",ý:"yacute",Ý:"Yacute",ŷ:"ycirc",Ŷ:"Ycirc",ÿ:"yuml",Ÿ:"Yuml",𝓏:"zscr",𝔷:"zfr",𝕫:"zopf",ℨ:"Zfr",ℤ:"Zopf",𝒵:"Zscr",ź:"zacute",Ź:"Zacute",ž:"zcaron",Ž:"Zcaron",ż:"zdot",Ż:"Zdot",Ƶ:"imped",þ:"thorn",Þ:"THORN",ʼn:"napos",α:"alpha",Α:"Alpha",β:"beta",Β:"Beta",γ:"gamma",Γ:"Gamma",δ:"delta",Δ:"Delta",ε:"epsi",ϵ:"epsiv",Ε:"Epsilon",ϝ:"gammad",Ϝ:"Gammad",ζ:"zeta",Ζ:"Zeta",η:"eta",Η:"Eta",θ:"theta",ϑ:"thetav",Θ:"Theta",ι:"iota",Ι:"Iota",κ:"kappa",ϰ:"kappav",Κ:"Kappa",λ:"lambda",Λ:"Lambda",μ:"mu",µ:"micro",Μ:"Mu",ν:"nu",Ν:"Nu",ξ:"xi",Ξ:"Xi",ο:"omicron",Ο:"Omicron",π:"pi",ϖ:"piv",Π:"Pi",ρ:"rho",ϱ:"rhov",Ρ:"Rho",σ:"sigma",Σ:"Sigma",ς:"sigmaf",τ:"tau",Τ:"Tau",υ:"upsi",Υ:"Upsilon",ϒ:"Upsi",φ:"phi",ϕ:"phiv",Φ:"Phi",χ:"chi",Χ:"Chi",ψ:"psi",Ψ:"Psi",ω:"omega",Ω:"ohm",а:"acy",А:"Acy",б:"bcy",Б:"Bcy",в:"vcy",В:"Vcy",г:"gcy",Г:"Gcy",ѓ:"gjcy",Ѓ:"GJcy",д:"dcy",Д:"Dcy",ђ:"djcy",Ђ:"DJcy",е:"iecy",Е:"IEcy",ё:"iocy",Ё:"IOcy",є:"jukcy",Є:"Jukcy",ж:"zhcy",Ж:"ZHcy",з:"zcy",З:"Zcy",ѕ:"dscy",Ѕ:"DScy",и:"icy",И:"Icy",і:"iukcy",І:"Iukcy",ї:"yicy",Ї:"YIcy",й:"jcy",Й:"Jcy",ј:"jsercy",Ј:"Jsercy",к:"kcy",К:"Kcy",ќ:"kjcy",Ќ:"KJcy",л:"lcy",Л:"Lcy",љ:"ljcy",Љ:"LJcy",м:"mcy",М:"Mcy",н:"ncy",Н:"Ncy",њ:"njcy",Њ:"NJcy",о:"ocy",О:"Ocy",п:"pcy",П:"Pcy",р:"rcy",Р:"Rcy",с:"scy",С:"Scy",т:"tcy",Т:"Tcy",ћ:"tshcy",Ћ:"TSHcy",у:"ucy",У:"Ucy",ў:"ubrcy",Ў:"Ubrcy",ф:"fcy",Ф:"Fcy",х:"khcy",Х:"KHcy",ц:"tscy",Ц:"TScy",ч:"chcy",Ч:"CHcy",џ:"dzcy",Џ:"DZcy",ш:"shcy",Ш:"SHcy",щ:"shchcy",Щ:"SHCHcy",ъ:"hardcy",Ъ:"HARDcy",ы:"ycy",Ы:"Ycy",ь:"softcy",Ь:"SOFTcy",э:"ecy",Э:"Ecy",ю:"yucy",Ю:"YUcy",я:"yacy",Я:"YAcy",ℵ:"aleph",ℶ:"beth",ℷ:"gimel",ℸ:"daleth"},o=/["&'<>`]/g,u={'"':""","&":"&","'":"'","<":"<",">":">","`":"`"},b=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,h=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,w=/&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g,k={aacute:"á",Aacute:"Á",abreve:"ă",Abreve:"Ă",ac:"∾",acd:"∿",acE:"∾̳",acirc:"â",Acirc:"Â",acute:"´",acy:"а",Acy:"А",aelig:"æ",AElig:"Æ",af:"⁡",afr:"𝔞",Afr:"𝔄",agrave:"à",Agrave:"À",alefsym:"ℵ",aleph:"ℵ",alpha:"α",Alpha:"Α",amacr:"ā",Amacr:"Ā",amalg:"⨿",amp:"&",AMP:"&",and:"∧",And:"⩓",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",Aogon:"Ą",aopf:"𝕒",Aopf:"𝔸",ap:"≈",apacir:"⩯",ape:"≊",apE:"⩰",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",aring:"å",Aring:"Å",ascr:"𝒶",Ascr:"𝒜",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",Bcy:"Б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",beta:"β",Beta:"Β",beth:"ℶ",between:"≬",bfr:"𝔟",Bfr:"𝔅",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bNot:"⫭",bopf:"𝕓",Bopf:"𝔹",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxhD:"╥",boxHd:"╤",boxHD:"╦",boxhu:"┴",boxhU:"╨",boxHu:"╧",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpe:"≏",bumpE:"⪮",bumpeq:"≏",Bumpeq:"≎",cacute:"ć",Cacute:"Ć",cap:"∩",Cap:"⋒",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",ccaron:"č",Ccaron:"Č",ccedil:"ç",Ccedil:"Ç",ccirc:"ĉ",Ccirc:"Ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",Cdot:"Ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",chcy:"ч",CHcy:"Ч",check:"✓",checkmark:"✓",chi:"χ",Chi:"Χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cire:"≗",cirE:"⧃",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",colone:"≔",Colone:"⩴",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",cscr:"𝒸",Cscr:"𝒞",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",Cup:"⋓",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",dArr:"⇓",Darr:"↡",dash:"‐",dashv:"⊣",Dashv:"⫤",dbkarow:"⤏",dblac:"˝",dcaron:"ď",Dcaron:"Ď",dcy:"д",Dcy:"Д",dd:"ⅆ",DD:"ⅅ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",delta:"δ",Delta:"Δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",Dfr:"𝔇",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",DJcy:"Ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",Dopf:"𝔻",dot:"˙",Dot:"¨",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",downarrow:"↓",Downarrow:"⇓",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",Dscr:"𝒟",dscy:"ѕ",DScy:"Ѕ",dsol:"⧶",dstrok:"đ",Dstrok:"Đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",DZcy:"Џ",dzigrarr:"⟿",eacute:"é",Eacute:"É",easter:"⩮",ecaron:"ě",Ecaron:"Ě",ecir:"≖",ecirc:"ê",Ecirc:"Ê",ecolon:"≕",ecy:"э",Ecy:"Э",eDDot:"⩷",edot:"ė",eDot:"≑",Edot:"Ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",Efr:"𝔈",eg:"⪚",egrave:"è",Egrave:"È",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",Emacr:"Ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",eng:"ŋ",ENG:"Ŋ",ensp:" ",eogon:"ę",Eogon:"Ę",eopf:"𝕖",Eopf:"𝔼",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",Epsilon:"Ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",esim:"≂",Esim:"⩳",eta:"η",Eta:"Η",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",fcy:"ф",Fcy:"Ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",Ffr:"𝔉",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",Fopf:"𝔽",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",gamma:"γ",Gamma:"Γ",gammad:"ϝ",Gammad:"Ϝ",gap:"⪆",gbreve:"ğ",Gbreve:"Ğ",Gcedil:"Ģ",gcirc:"ĝ",Gcirc:"Ĝ",gcy:"г",Gcy:"Г",gdot:"ġ",Gdot:"Ġ",ge:"≥",gE:"≧",gel:"⋛",gEl:"⪌",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",Gfr:"𝔊",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",GJcy:"Ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",Gopf:"𝔾",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",gscr:"ℊ",Gscr:"𝒢",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",Gt:"≫",GT:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",HARDcy:"Ъ",harr:"↔",hArr:"⇔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",hcirc:"ĥ",Hcirc:"Ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",hstrok:"ħ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",iacute:"í",Iacute:"Í",ic:"⁣",icirc:"î",Icirc:"Î",icy:"и",Icy:"И",Idot:"İ",iecy:"е",IEcy:"Е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",igrave:"ì",Igrave:"Ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",IJlig:"IJ",Im:"ℑ",imacr:"ī",Imacr:"Ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",Int:"∬",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",iocy:"ё",IOcy:"Ё",iogon:"į",Iogon:"Į",iopf:"𝕚",Iopf:"𝕀",iota:"ι",Iota:"Ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",Itilde:"Ĩ",iukcy:"і",Iukcy:"І",iuml:"ï",Iuml:"Ï",jcirc:"ĵ",Jcirc:"Ĵ",jcy:"й",Jcy:"Й",jfr:"𝔧",Jfr:"𝔍",jmath:"ȷ",jopf:"𝕛",Jopf:"𝕁",jscr:"𝒿",Jscr:"𝒥",jsercy:"ј",Jsercy:"Ј",jukcy:"є",Jukcy:"Є",kappa:"κ",Kappa:"Κ",kappav:"ϰ",kcedil:"ķ",Kcedil:"Ķ",kcy:"к",Kcy:"К",kfr:"𝔨",Kfr:"𝔎",kgreen:"ĸ",khcy:"х",KHcy:"Х",kjcy:"ќ",KJcy:"Ќ",kopf:"𝕜",Kopf:"𝕂",kscr:"𝓀",Kscr:"𝒦",lAarr:"⇚",lacute:"ĺ",Lacute:"Ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",Lambda:"Λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larr:"←",lArr:"⇐",Larr:"↞",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",lAtail:"⤛",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",Lcaron:"Ľ",lcedil:"ļ",Lcedil:"Ļ",lceil:"⌈",lcub:"{",lcy:"л",Lcy:"Л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",leftarrow:"←",Leftarrow:"⇐",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",Leftrightarrow:"⇔",LeftRightArrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",leg:"⋚",lEg:"⪋",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",Lfr:"𝔏",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",LJcy:"Љ",ll:"≪",Ll:"⋘",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",lmidot:"ŀ",Lmidot:"Ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",Longleftarrow:"⟸",LongLeftArrow:"⟵",longleftrightarrow:"⟷",Longleftrightarrow:"⟺",LongLeftRightArrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",Longrightarrow:"⟹",LongRightArrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",Lopf:"𝕃",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",Lstrok:"Ł",lt:"<",Lt:"≪",LT:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",Map:"⤅",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",Mcy:"М",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",mfr:"𝔪",Mfr:"𝔐",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",Mopf:"𝕄",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",mu:"μ",Mu:"Μ",multimap:"⊸",mumap:"⊸",nabla:"∇",nacute:"ń",Nacute:"Ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",Ncaron:"Ň",ncedil:"ņ",Ncedil:"Ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",Ncy:"Н",ndash:"–",ne:"≠",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",nfr:"𝔫",Nfr:"𝔑",nge:"≱",ngE:"≧̸",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",ngt:"≯",nGt:"≫⃒",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",NJcy:"Њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nle:"≰",nlE:"≦̸",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nlt:"≮",nLt:"≪⃒",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",not:"¬",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrarr:"↛",nrArr:"⇏",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",Nscr:"𝒩",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsube:"⊈",nsubE:"⫅̸",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupe:"⊉",nsupE:"⫆̸",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",Ntilde:"Ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",Nu:"Ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",oacute:"ó",Oacute:"Ó",oast:"⊛",ocir:"⊚",ocirc:"ô",Ocirc:"Ô",ocy:"о",Ocy:"О",odash:"⊝",odblac:"ő",Odblac:"Ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",OElig:"Œ",ofcir:"⦿",ofr:"𝔬",Ofr:"𝔒",ogon:"˛",ograve:"ò",Ograve:"Ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",Omacr:"Ō",omega:"ω",Omega:"Ω",omicron:"ο",Omicron:"Ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",Oopf:"𝕆",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",or:"∨",Or:"⩔",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",oscr:"ℴ",Oscr:"𝒪",oslash:"ø",Oslash:"Ø",osol:"⊘",otilde:"õ",Otilde:"Õ",otimes:"⊗",Otimes:"⨷",otimesas:"⨶",ouml:"ö",Ouml:"Ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",pcy:"п",Pcy:"П",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",Pfr:"𝔓",phi:"φ",Phi:"Φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",Pi:"Π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",pr:"≺",Pr:"⪻",prap:"⪷",prcue:"≼",pre:"⪯",prE:"⪳",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",Pscr:"𝒫",psi:"ψ",Psi:"Ψ",puncsp:" ",qfr:"𝔮",Qfr:"𝔔",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",qscr:"𝓆",Qscr:"𝒬",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",racute:"ŕ",Racute:"Ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rArr:"⇒",Rarr:"↠",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",Rarrtl:"⤖",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",Rcaron:"Ř",rcedil:"ŗ",Rcedil:"Ŗ",rceil:"⌉",rcub:"}",rcy:"р",Rcy:"Р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",Rho:"Ρ",rhov:"ϱ",RightAngleBracket:"⟩",rightarrow:"→",Rightarrow:"⇒",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",sacute:"ś",Sacute:"Ś",sbquo:"‚",sc:"≻",Sc:"⪼",scap:"⪸",scaron:"š",Scaron:"Š",sccue:"≽",sce:"⪰",scE:"⪴",scedil:"ş",Scedil:"Ş",scirc:"ŝ",Scirc:"Ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",Scy:"С",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",Sfr:"𝔖",sfrown:"⌢",sharp:"♯",shchcy:"щ",SHCHcy:"Щ",shcy:"ш",SHcy:"Ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",sigma:"σ",Sigma:"Σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",SOFTcy:"Ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",Sopf:"𝕊",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",Sscr:"𝒮",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",Star:"⋆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",sube:"⊆",subE:"⫅",subedot:"⫃",submult:"⫁",subne:"⊊",subnE:"⫋",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup:"⊃",Sup:"⋑",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supe:"⊇",supE:"⫆",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supne:"⊋",supnE:"⫌",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",tau:"τ",Tau:"Τ",tbrk:"⎴",tcaron:"ť",Tcaron:"Ť",tcedil:"ţ",Tcedil:"Ţ",tcy:"т",Tcy:"Т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",Tfr:"𝔗",there4:"∴",therefore:"∴",Therefore:"∴",theta:"θ",Theta:"Θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",thorn:"þ",THORN:"Þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",Topf:"𝕋",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",Tscr:"𝒯",tscy:"ц",TScy:"Ц",tshcy:"ћ",TSHcy:"Ћ",tstrok:"ŧ",Tstrok:"Ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uacute:"ú",Uacute:"Ú",uarr:"↑",uArr:"⇑",Uarr:"↟",Uarrocir:"⥉",ubrcy:"ў",Ubrcy:"Ў",ubreve:"ŭ",Ubreve:"Ŭ",ucirc:"û",Ucirc:"Û",ucy:"у",Ucy:"У",udarr:"⇅",udblac:"ű",Udblac:"Ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",Ufr:"𝔘",ugrave:"ù",Ugrave:"Ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",Umacr:"Ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",uogon:"ų",Uogon:"Ų",uopf:"𝕦",Uopf:"𝕌",uparrow:"↑",Uparrow:"⇑",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",updownarrow:"↕",Updownarrow:"⇕",UpDownArrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",upsilon:"υ",Upsilon:"Υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",Uring:"Ů",urtri:"◹",uscr:"𝓊",Uscr:"𝒰",utdot:"⋰",utilde:"ũ",Utilde:"Ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",Uuml:"Ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",vcy:"в",Vcy:"В",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",vee:"∨",Vee:"⋁",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",vfr:"𝔳",Vfr:"𝔙",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",Vopf:"𝕍",vprop:"∝",vrtri:"⊳",vscr:"𝓋",Vscr:"𝒱",vsubne:"⊊︀",vsubnE:"⫋︀",vsupne:"⊋︀",vsupnE:"⫌︀",Vvdash:"⊪",vzigzag:"⦚",wcirc:"ŵ",Wcirc:"Ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",wfr:"𝔴",Wfr:"𝔚",wopf:"𝕨",Wopf:"𝕎",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",Wscr:"𝒲",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",Xfr:"𝔛",xharr:"⟷",xhArr:"⟺",xi:"ξ",Xi:"Ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",Xopf:"𝕏",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",xscr:"𝓍",Xscr:"𝒳",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",Yacute:"Ý",yacy:"я",YAcy:"Я",ycirc:"ŷ",Ycirc:"Ŷ",ycy:"ы",Ycy:"Ы",yen:"¥",yfr:"𝔶",Yfr:"𝔜",yicy:"ї",YIcy:"Ї",yopf:"𝕪",Yopf:"𝕐",yscr:"𝓎",Yscr:"𝒴",yucy:"ю",YUcy:"Ю",yuml:"ÿ",Yuml:"Ÿ",zacute:"ź",Zacute:"Ź",zcaron:"ž",Zcaron:"Ž",zcy:"з",Zcy:"З",zdot:"ż",Zdot:"Ż",zeetrf:"ℨ",ZeroWidthSpace:"​",zeta:"ζ",Zeta:"Ζ",zfr:"𝔷",Zfr:"ℨ",zhcy:"ж",ZHcy:"Ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",zscr:"𝓏",Zscr:"𝒵",zwj:"‍",zwnj:"‌"},d={aacute:"á",Aacute:"Á",acirc:"â",Acirc:"Â",acute:"´",aelig:"æ",AElig:"Æ",agrave:"à",Agrave:"À",amp:"&",AMP:"&",aring:"å",Aring:"Å",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",brvbar:"¦",ccedil:"ç",Ccedil:"Ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",eacute:"é",Eacute:"É",ecirc:"ê",Ecirc:"Ê",egrave:"è",Egrave:"È",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",iacute:"í",Iacute:"Í",icirc:"î",Icirc:"Î",iexcl:"¡",igrave:"ì",Igrave:"Ì",iquest:"¿",iuml:"ï",Iuml:"Ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",ntilde:"ñ",Ntilde:"Ñ",oacute:"ó",Oacute:"Ó",ocirc:"ô",Ocirc:"Ô",ograve:"ò",Ograve:"Ò",ordf:"ª",ordm:"º",oslash:"ø",Oslash:"Ø",otilde:"õ",Otilde:"Õ",ouml:"ö",Ouml:"Ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",thorn:"þ",THORN:"Þ",times:"×",uacute:"ú",Uacute:"Ú",ucirc:"û",Ucirc:"Û",ugrave:"ù",Ugrave:"Ù",uml:"¨",uuml:"ü",Uuml:"Ü",yacute:"ý",Yacute:"Ý",yen:"¥",yuml:"ÿ"},v={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},g=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],m=String.fromCharCode,p={}.hasOwnProperty,E=function(e,A){return p.call(e,A)},B=function(e,A){if(!e)return A;var r,i={};for(r in A)i[r]=E(e,r)?e[r]:A[r];return i},y=function(e,A){var r="";return e>=55296&&e<=57343||e>1114111?(A&&Z("character reference outside the permissible Unicode range"),"�"):E(v,e)?(A&&Z("disallowed character reference"),v[e]):(A&&function(e,A){for(var r=-1,i=e.length;++r65535&&(r+=m((e-=65536)>>>10&1023|55296),e=56320|1023&e),r+=m(e))},C=function(e){return"&#x"+e.toString(16).toUpperCase()+";"},I=function(e){return"&#"+e+";"},Z=function(e){throw Error("Parse error: "+e)},G=function(e,A){(A=B(A,G.options)).strict&&h.test(e)&&Z("forbidden code point");var r=A.encodeEverything,i=A.useNamedReferences,a=A.allowUnsafeSymbols,t=A.decimal?I:C,u=function(e){return t(e.charCodeAt(0))};return r?(e=e.replace(f,(function(e){return i&&E(c,e)?"&"+c[e]+";":u(e)})),i&&(e=e.replace(/>\u20D2/g,">⃒").replace(/<\u20D2/g,"<⃒").replace(/fj/g,"fj")),i&&(e=e.replace(s,(function(e){return"&"+c[e]+";"})))):i?(a||(e=e.replace(o,(function(e){return"&"+c[e]+";"}))),e=(e=e.replace(/>\u20D2/g,">⃒").replace(/<\u20D2/g,"<⃒")).replace(s,(function(e){return"&"+c[e]+";"}))):a||(e=e.replace(o,u)),e.replace(n,(function(e){var A=e.charCodeAt(0),r=e.charCodeAt(1);return t(1024*(A-55296)+r-56320+65536)})).replace(l,u)};G.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1,decimal:!1};var L=function(e,A){var r=(A=B(A,L.options)).strict;return r&&b.test(e)&&Z("malformed character reference"),e.replace(w,(function(e,i,a,t,n,f,l,s,c){var o,u,b,h,w,v;return i?k[w=i]:a?(w=a,(v=t)&&A.isAttributeValue?(r&&"="==v&&Z("`&` did not start a character reference"),e):(r&&Z("named character reference was not terminated by a semicolon"),d[w]+(v||""))):n?(b=n,u=f,r&&!u&&Z("character reference was not terminated by a semicolon"),o=parseInt(b,10),y(o,r)):l?(h=l,u=s,r&&!u&&Z("character reference was not terminated by a semicolon"),o=parseInt(h,16),y(o,r)):(r&&Z("named character reference was not terminated by a semicolon"),e)}))};L.options={isAttributeValue:!1,strict:!1};var Q={version:"1.2.0",encode:G,decode:L,escape:function(e){return e.replace(o,(function(e){return u[e]}))},unescape:L};void 0===(i=function(){return Q}.call(A,r,A,e))||(e.exports=i)}()},9453:e=>{"use strict";var A=e.exports=function(e,A,i){"function"==typeof A&&(i=A,A={}),r(A,"function"==typeof(i=A.cb||i)?i:i.pre||function(){},i.post||function(){},e,"",e)};function r(e,i,a,t,n,f,l,s,c,o){if(t&&"object"==typeof t&&!Array.isArray(t)){for(var u in i(t,n,f,l,s,c,o),t){var b=t[u];if(Array.isArray(b)){if(u in A.arrayKeywords)for(var h=0;h{var A=Array.isArray;e.exports=function(){if(!arguments.length)return[];var e=arguments[0];return A(e)?e:[e]}},467:(e,A,r)=>{e=r.nmd(e);var i="__lodash_hash_undefined__",a=9007199254740991,t="[object Arguments]",n="[object Boolean]",f="[object Date]",l="[object Function]",s="[object GeneratorFunction]",c="[object Map]",o="[object Number]",u="[object Object]",b="[object Promise]",h="[object RegExp]",w="[object Set]",k="[object String]",d="[object Symbol]",v="[object WeakMap]",g="[object ArrayBuffer]",m="[object DataView]",p="[object Float32Array]",E="[object Float64Array]",B="[object Int8Array]",y="[object Int16Array]",C="[object Int32Array]",I="[object Uint8Array]",Z="[object Uint8ClampedArray]",G="[object Uint16Array]",L="[object Uint32Array]",Q=/\w*$/,D=/^\[object .+?Constructor\]$/,z=/^(?:0|[1-9]\d*)$/,W={};W[t]=W["[object Array]"]=W[g]=W[m]=W[n]=W[f]=W[p]=W[E]=W[B]=W[y]=W[C]=W[c]=W[o]=W[u]=W[h]=W[w]=W[k]=W[d]=W[I]=W[Z]=W[G]=W[L]=!0,W["[object Error]"]=W[l]=W[v]=!1;var Y="object"==typeof global&&global&&global.Object===Object&&global,F="object"==typeof self&&self&&self.Object===Object&&self,M=Y||F||Function("return this")(),V=A&&!A.nodeType&&A,N=V&&e&&!e.nodeType&&e,R=N&&N.exports===V;function x(e,A){return e.set(A[0],A[1]),e}function J(e,A){return e.add(A),e}function H(e,A,r,i){var a=-1,t=e?e.length:0;for(i&&t&&(r=e[++a]);++a-1},Ze.prototype.set=function(e,A){var r=this.__data__,i=De(r,e);return i<0?r.push([e,A]):r[i][1]=A,this},Ge.prototype.clear=function(){this.__data__={hash:new Ie,map:new(he||Ze),string:new Ie}},Ge.prototype.delete=function(e){return Fe(this,e).delete(e)},Ge.prototype.get=function(e){return Fe(this,e).get(e)},Ge.prototype.has=function(e){return Fe(this,e).has(e)},Ge.prototype.set=function(e,A){return Fe(this,e).set(e,A),this},Le.prototype.clear=function(){this.__data__=new Ze},Le.prototype.delete=function(e){return this.__data__.delete(e)},Le.prototype.get=function(e){return this.__data__.get(e)},Le.prototype.has=function(e){return this.__data__.has(e)},Le.prototype.set=function(e,A){var r=this.__data__;if(r instanceof Ze){var i=r.__data__;if(!he||i.length<199)return i.push([e,A]),this;r=this.__data__=new Ge(i)}return r.set(e,A),this};var Ve=ce?S(ce,Object):function(){return[]},Ne=function(e){return Ae.call(e)};function Re(e,A){return!!(A=null==A?a:A)&&("number"==typeof e||z.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=a}(e.length)&&!je(e)}var Se=oe||function(){return!1};function je(e){var A=Ue(e)?Ae.call(e):"";return A==l||A==s}function Ue(e){var A=typeof e;return!!e&&("object"==A||"function"==A)}function Te(e){return Xe(e)?function(e,A){var r=Pe(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&Xe(e)}(e)&&ee.call(e,"callee")&&(!le.call(e,"callee")||Ae.call(e)==t)}(e)?function(e,A){for(var r=-1,i=Array(e);++r{var A,r="__lodash_hash_undefined__",i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/,t=/^\./,n=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,f=/\\(\\)?/g,l=/^\[object .+?Constructor\]$/,s="object"==typeof global&&global&&global.Object===Object&&global,c="object"==typeof self&&self&&self.Object===Object&&self,o=s||c||Function("return this")(),u=Array.prototype,b=Function.prototype,h=Object.prototype,w=o["__core-js_shared__"],k=(A=/[^.]+$/.exec(w&&w.keys&&w.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"",d=b.toString,v=h.hasOwnProperty,g=h.toString,m=RegExp("^"+d.call(v).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),p=o.Symbol,E=u.splice,B=z(o,"Map"),y=z(Object,"create"),C=p?p.prototype:void 0,I=C?C.toString:void 0;function Z(e){var A=-1,r=e?e.length:0;for(this.clear();++A-1},G.prototype.set=function(e,A){var r=this.__data__,i=Q(r,e);return i<0?r.push([e,A]):r[i][1]=A,this},L.prototype.clear=function(){this.__data__={hash:new Z,map:new(B||G),string:new Z}},L.prototype.delete=function(e){return D(this,e).delete(e)},L.prototype.get=function(e){return D(this,e).get(e)},L.prototype.has=function(e){return D(this,e).has(e)},L.prototype.set=function(e,A){return D(this,e).set(e,A),this};var W=F((function(e){var A;e=null==(A=e)?"":function(e){if("string"==typeof e)return e;if(N(e))return I?I.call(e):"";var A=e+"";return"0"==A&&1/e==-1/0?"-0":A}(A);var r=[];return t.test(e)&&r.push(""),e.replace(n,(function(e,A,i,a){r.push(i?a.replace(f,"$1"):A||e)})),r}));function Y(e){if("string"==typeof e||N(e))return e;var A=e+"";return"0"==A&&1/e==-1/0?"-0":A}function F(e,A){if("function"!=typeof e||A&&"function"!=typeof A)throw new TypeError("Expected a function");var r=function(){var i=arguments,a=A?A.apply(this,i):i[0],t=r.cache;if(t.has(a))return t.get(a);var n=e.apply(this,i);return r.cache=t.set(a,n),n};return r.cache=new(F.Cache||L),r}F.Cache=L;var M=Array.isArray;function V(e){var A=typeof e;return!!e&&("object"==A||"function"==A)}function N(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==g.call(e)}e.exports=function(e,A,r){var t=null==e?void 0:function(e,A){for(var r,t=0,n=(A=function(e,A){if(M(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!N(e))||a.test(e)||!i.test(e)||null!=A&&e in Object(A)}(A,e)?[A]:M(r=A)?r:W(r)).length;null!=e&&t{e=r.nmd(e);var i="Expected a function",a="__lodash_hash_undefined__",t=9007199254740991,n="[object Arguments]",f="[object Array]",l="[object Boolean]",s="[object Date]",c="[object Error]",o="[object Function]",u="[object Map]",b="[object Number]",h="[object Object]",w="[object Promise]",k="[object RegExp]",d="[object Set]",v="[object String]",g="[object Symbol]",m="[object WeakMap]",p="[object ArrayBuffer]",E="[object DataView]",B=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,y=/^\w*$/,C=/^\./,I=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Z=/\\(\\)?/g,G=/^\[object .+?Constructor\]$/,L=/^(?:0|[1-9]\d*)$/,Q={};Q["[object Float32Array]"]=Q["[object Float64Array]"]=Q["[object Int8Array]"]=Q["[object Int16Array]"]=Q["[object Int32Array]"]=Q["[object Uint8Array]"]=Q["[object Uint8ClampedArray]"]=Q["[object Uint16Array]"]=Q["[object Uint32Array]"]=!0,Q[n]=Q[f]=Q[p]=Q[l]=Q[E]=Q[s]=Q[c]=Q[o]=Q[u]=Q[b]=Q[h]=Q[k]=Q[d]=Q[v]=Q[m]=!1;var D="object"==typeof global&&global&&global.Object===Object&&global,z="object"==typeof self&&self&&self.Object===Object&&self,W=D||z||Function("return this")(),Y=A&&!A.nodeType&&A,F=Y&&e&&!e.nodeType&&e,M=F&&F.exports===Y&&D.process,V=function(){try{return M&&M.binding("util")}catch(e){}}(),N=V&&V.isTypedArray;function R(e,A){for(var r=-1,i=e?e.length:0,a=0,t=[];++r-1},Ee.prototype.set=function(e,A){var r=this.__data__,i=Ie(r,e);return i<0?r.push([e,A]):r[i][1]=A,this},Be.prototype.clear=function(){this.__data__={hash:new pe,map:new(le||Ee),string:new pe}},Be.prototype.delete=function(e){return Me(this,e).delete(e)},Be.prototype.get=function(e){return Me(this,e).get(e)},Be.prototype.has=function(e){return Me(this,e).has(e)},Be.prototype.set=function(e,A){return Me(this,e).set(e,A),this},ye.prototype.add=ye.prototype.push=function(e){return this.__data__.set(e,a),this},ye.prototype.has=function(e){return this.__data__.has(e)},Ce.prototype.clear=function(){this.__data__=new Ee},Ce.prototype.delete=function(e){return this.__data__.delete(e)},Ce.prototype.get=function(e){return this.__data__.get(e)},Ce.prototype.has=function(e){return this.__data__.has(e)},Ce.prototype.set=function(e,A){var r=this.__data__;if(r instanceof Ee){var i=r.__data__;if(!le||i.length<199)return i.push([e,A]),this;r=this.__data__=new Be(i)}return r.set(e,A),this};var Ze,Ge=(Ze=function(e,A){return e&&Qe(e,A,iA)},function(e,A){if(null==e)return e;if(!_e(e))return Ze(e,A);for(var r=e.length,i=-1,a=Object(e);++if))return!1;var s=t.get(e);if(s&&t.get(A))return s==A;var c=-1,o=!0,u=1&a?new ye:void 0;for(t.set(e,A),t.set(A,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=t}function $e(e){var A=typeof e;return!!e&&("object"==A||"function"==A)}function eA(e){return!!e&&"object"==typeof e}function AA(e){return"symbol"==typeof e||eA(e)&&ee.call(e)==g}var rA=N?function(e){return function(A){return e(A)}}(N):function(e){return eA(e)&&Ke(e.length)&&!!Q[ee.call(e)]};function iA(e){return _e(e)?function(e,A){var r=Oe(e)||Te(e)?function(e,A){for(var r=-1,i=Array(e);++r{"use strict";e.exports=JSON.parse('{"_from":"state-machine-cat@7.0.13","_id":"state-machine-cat@7.0.13","_inBundle":false,"_integrity":"sha512-01va3bekhwSYuIF7DuEanlHJxG4rgahVVcvguSx3FzXuWRfx6AwpxPOs9v2V0RJuzTIojoazAs4KaT/OTKAkjg==","_location":"/jsteros/state-machine-cat","_phantomChildren":{"ansi-styles":"4.3.0","string-width":"4.2.0","strip-ansi":"6.0.0"},"_requested":{"type":"version","registry":true,"raw":"state-machine-cat@7.0.13","name":"state-machine-cat","escapedName":"state-machine-cat","rawSpec":"7.0.13","saveSpec":null,"fetchSpec":"7.0.13"},"_requiredBy":["/jsteros"],"_resolved":"https://registry.npmjs.org/state-machine-cat/-/state-machine-cat-7.0.13.tgz","_shasum":"59ab6c8d0e0c1fd4bc8169383c495f45365a8255","_spec":"state-machine-cat@7.0.13","_where":"/home/carlos/repo/colibri","author":{"name":"Sander Verweij"},"bin":{"smcat":"bin/smcat","sm-cat":"bin/smcat","sm_cat":"bin/smcat","state-machine-cat":"bin/smcat"},"browserslist":["last 1 Chrome version","last 1 Firefox version","last 1 Safari version"],"bugs":{"url":"https://github.com/sverweij/state-machine-cat/issues"},"bundleDependencies":false,"dependencies":{"ajv":"6.12.6","chalk":"4.1.0","commander":"6.1.0","fast-xml-parser":"3.17.4","get-stream":"6.0.0","handlebars":"4.7.6","he":"1.2.0","indent-string":"4.0.0","lodash.castarray":"4.4.0","lodash.clonedeep":"4.5.0","lodash.get":"4.4.2","lodash.reject":"4.6.0","semver":"7.3.2","viz.js":"1.8.2","wrap-ansi":"7.0.0"},"deprecated":false,"description":"write beautiful state charts","devDependencies":{"chai":"4.2.0","chai-as-promised":"7.1.1","chai-json-schema":"1.5.1","chai-xml":"0.4.0","dependency-cruiser":"9.15.1","eslint":"7.12.0","eslint-config-moving-meadow":"2.0.7","eslint-config-prettier":"6.14.0","eslint-plugin-budapestian":"2.3.0","eslint-plugin-import":"2.22.1","eslint-plugin-mocha":"8.0.0","eslint-plugin-node":"11.1.0","eslint-plugin-security":"1.4.0","eslint-plugin-unicorn":"23.0.0","husky":"4.3.0","lint-staged":"10.4.2","mocha":"8.2.0","npm-run-all":"4.1.5","nyc":"15.1.0","pegjs":"0.10.0","prettier":"2.1.2","query-string":"6.13.6","tslint":"6.1.3","tslint-config-prettier":"1.18.0","typescript":"4.0.3","upem":"5.0.0","webpack":"5.2.0","webpack-cli":"4.1.0","xml-name-validator":"3.0.0"},"engines":{"node":">=10"},"eslintIgnore":["coverage","docs","node_modules","public","src/**/*-parser.js","src/**/*.template.js","webpack.config.js"],"files":["bin/","src/**/*.js","src/**/*.json","types/","package.json","README.md","LICENSE"],"homepage":"https://state-machine-cat.js.org","husky":{"hooks":{"pre-commit":"lint-staged"}},"keywords":["state","state chart","state diagram","state machine","finite state machine","fsm","uml","scxml"],"license":"MIT","lint-staged":{"{src,test}/**/*.js":["eslint --cache --cache-location .cache --fix","prettier --loglevel warn --write","depcruise --output-type err-long --config config/dependency-cruiser.js","git add"]},"main":"src/index.js","name":"state-machine-cat","nyc":{"statements":100,"branches":99.1,"functions":100,"lines":100,"exclude":["config/**/*","coverage/**/*","docs/**/*","public/**/*","test/**/*","tmp*","tools/**/*","src/**/*-parser.js","src/**/*.template.js","webpack.*.js"],"reporter":["text-summary","html","lcov"],"all":true},"repository":{"type":"git","url":"git+https://github.com/sverweij/state-machine-cat.git"},"scripts":{"build":"make clean dist pages","build:cli":"make cli-build","build:dev":"make dev-build","check":"run-p --aggregate-output depcruise lint test:cover","depcruise":"depcruise --output-type err-long --config config/dependency-cruiser.js src test bin/smcat","depcruise:graph":"run-s depcruise:graph:*","depcruise:graph:archi-html":"depcruise --output-type archi --config config/dependency-cruiser-graph.js src bin/smcat | dot -Tsvg | depcruise-wrap-stream-in-html > docs/dependency-cruiser-archi-graph.html","depcruise:graph:archi-svg":"depcruise --output-type archi --config config/dependency-cruiser-graph.js src bin/smcat | dot -Tsvg > docs/dependency-cruiser-archi-graph.svg","depcruise:graph:deps-html":"depcruise --output-type dot --config config/dependency-cruiser-graph.js src bin/smcat | dot -Tsvg | depcruise-wrap-stream-in-html > docs/dependency-cruiser-graph.html","depcruise:graph:deps-svg":"depcruise --output-type dot --config config/dependency-cruiser-graph.js src bin/smcat | dot -Tsvg > docs/dependency-cruiser-graph.svg","depcruise:graph:dir-html":"depcruise --output-type ddot --config config/dependency-cruiser-graph.js src bin/smcat | dot -Tsvg | depcruise-wrap-stream-in-html > docs/dependency-cruiser-dir-graph.html","depcruise:graph:dir-svg":"depcruise --output-type ddot --config config/dependency-cruiser-graph.js src bin/smcat | dot -Tsvg > docs/dependency-cruiser-dir-graph.svg","depcruise:html-report":"depcruise --output-type err-html --config config/dependency-cruiser.js src test bin/smcat --output-to dependency-violation-report.html","depcruise:view":"depcruise --output-type dot --config config/dependency-cruiser-graph.js --prefix vscode://file/$(pwd)/ src bin/smcat | dot -Tsvg | depcruise-wrap-stream-in-html | browser","depcruise:view-report":"depcruise --output-type err-html --config config/dependency-cruiser.js --prefix vscode://file/$(pwd)/ src test bin/smcat | browser","lint":"run-p --aggregate-output lint:eslint lint:prettier lint:types","lint:eslint":"eslint --cache --cache-location .cache src test config","lint:fix":"run-s lint:fix:eslint lint:fix:prettier lint:fix:types","lint:fix:eslint":"eslint --cache --cache-location .cache --fix src test config","lint:fix:prettier":"prettier --loglevel warn --write {src,test,config}/\\\\*\\\\*/\\\\*.{js,json} types/*.ts *.{json,yml,md} docs/{smcat-online-interpreter.js,*.md}","lint:fix:types":"tslint --fix types/*.d.ts","lint:prettier":"prettier --check {src,test,config}/\\\\*\\\\*/\\\\*.{js,json} types/*.ts *.{json,yml,md} docs/{smcat-online-interpreter.js,*.md}","lint:types":"run-s lint:types:*","lint:types:tsc":"tsc --noEmit --strict --types --noUnusedLocals --noUnusedParameters types/*.d.ts","lint:types:tslint":"tslint types/*.d.ts","scm:push":"run-p --aggregate-output scm:push:*","scm:push:bitbucket-mirror":"run-p --aggregate-output scm:push:bitbucket-mirror:*","scm:push:bitbucket-mirror:commits":"git push bitbucket-mirror","scm:push:bitbucket-mirror:tags":"git push --tags bitbucket-mirror","scm:push:github":"run-p --aggregate-output scm:push:github:*","scm:push:github:commits":"git push","scm:push:github:tags":"git push --tags","scm:push:gitlab-mirror":"run-p --aggregate-output scm:push:gitlab-mirror:*","scm:push:gitlab-mirror:commits":"git push gitlab-mirror","scm:push:gitlab-mirror:tags":"git push --tags gitlab-mirror","scm:stage":"git add .","test":"mocha --reporter spec --timeout 4000 --recursive test","test:cover":"nyc --check-coverage npm test","test:integration":"mocha --reporter spec --timeout 4000 --recursive test --invert --fgrep integration","test:unit":"mocha --reporter spec --timeout 4000 --recursive test --invert --fgrep integration","update-dependencies":"run-s upem:update upem:install lint:fix check","upem:install":"npm install","upem:update":"npm outdated --json | upem","version":"run-s build depcruise:graph scm:stage"},"types":"types/state-machine-cat.d.ts","upem":{"donotup":[{"package":"viz.js","because":"viz.js >=2 ditched its async interface, which we use. Will need some code reshuffling which is not worth it a.t.m."}]},"version":"7.0.13"}')},8138:(e,A,r)=>{const i=r(306),a=r(7766),t=r(5435),n=r(1514),f=r(6558);function l(e,A){const r=t.getAST(e,A),i=a.getOptionValue(A,"desugar");return f(a.getOptionValue(A,"outputType"))(i?n(r):r,A)}e.exports={render(e,A,r){if(!Boolean(r))return l(e,A);try{r(null,l(e,A))}catch(e){r(e)}},version:i.version,getAllowedValues:a.getAllowedValues}},7766:(e,A,r)=>{const i=r(3278),a=Object.freeze({inputType:{default:"smcat",values:[{name:"smcat"},{name:"json"},{name:"scxml"}]},outputType:{default:"svg",values:[{name:"svg"},{name:"dot"},{name:"smcat"},{name:"json"},{name:"ast"},{name:"scxml"},{name:"scjson"}]},engine:{default:"dot",values:[{name:"dot"},{name:"circo"},{name:"fdp"},{name:"neato"},{name:"osage"},{name:"twopi"}]},direction:{default:"top-down",values:[{name:"top-down"},{name:"bottom-top"},{name:"left-right"},{name:"right-left"}]},desugar:{default:!1,values:[{name:!0},{name:!1}]}});e.exports={getAllowedValues:function(){return a},getOptionValue:function(e,A){return i(e,A,i(a,`${A}.default`))}}},5435:(e,A,r)=>{const i=r(6447),a=r(7766),t=r(855),n=r(1878),f=r(8751),l=new i;e.exports={getAST:function(e,A){let r=e;return"smcat"===a.getOptionValue(A,"inputType")?r=t.parse(e):"scxml"===a.getOptionValue(A,"inputType")?r=n.parse(e):"string"==typeof e&&(r=JSON.parse(e)),function(e,A){if(!l.validate(e,A))throw new Error(`The provided JSON is not a valid state-machine-cat AST: ${l.errorsText()}.\n`)}(f,r),r}}},8038:(e,A,r)=>{const i=r(2375),a=new RegExp("^(entry|activity|exit)\\s*/\\s*([^\\n$]*)(\\n|$)");function t(e,A){return e.some((e=>e===A))}const n=[{re:/initial/,stateType:"initial"},{re:/final/,stateType:"final"},{re:/parallel/,stateType:"parallel"},{re:/(deep.*history)|(history.*deep)/,stateType:"deephistory"},{re:/history/,stateType:"history"},{re:/^\^.*/,stateType:"choice"},{re:/^].*/,stateType:"forkjoin"}];function f(e){return(n.find(function(e){return A=>A.re.test(e)}(e))||{stateType:"regular"}).stateType}function l(e){return{name:e,type:f(e)}}function s(e){return Boolean(e.statemachine)}function c(e){const A=e.states||[];return A.filter(s).reduce(((e,A)=>e.concat(c(A.statemachine))),A.map((e=>e.name)))}function o(e,A,r,i=(e=>e)){i(r)&&(e[A]=r)}function u(e){const A=e.match(a);return A?{type:A[1],body:A[2]}:{type:"activity",body:e}}e.exports={initState:l,extractUndeclaredStates:function e(A,r){r=r||c(A),A.states=A.states||[];const i=A.transitions||[];return A.states.filter(s).forEach((A=>{A.statemachine.states=e(A.statemachine,r)})),i.forEach((e=>{t(r,e.from)||(r.push(e.from),A.states.push(l(e.from))),t(r,e.to)||(r.push(e.to),A.states.push(l(e.to)))})),A.states},classifyForkJoins:function e(A,r=new i(A)){return A.states=A.states.map((A=>{if("forkjoin"===A.type&&!A.typeExplicitlySet){const e=r.findTransitionsByTo(A.name).length,i=r.findTransitionsByFrom(A.name).length;A.type=function(e,A){let r="junction";return e<=1&&A>1&&(r="fork"),e>1&&A<=1&&(r="join"),r}(e,i)}return A.statemachine&&(A.statemachine=e(A.statemachine,r)),A})),A},getStateType:f,stateEqual:function(e,A){return e.name===A.name},uniq:function(e,A){return e.reduce(((e,r)=>{const i=e.findIndex((e=>A(e,r)));return i>-1?(e[i]=r,e):e.concat(r)}),[])},parseTransitionExpression:function(e){const A={},r=e.match(/([^[/]+)?(\[[^\]]+\])?[^/]*(\/.+)?/);return r[1]&&(A.event=r[1].trim()),r[2]&&(A.cond=r[2].slice(1,-1).trim()),r[3]&&(A.action=r[3].slice(1,r[3].length).trim()),A},extractActions:function(e){return e.split(/\n\s*/g).map((e=>e.trim())).map(u)},setIf:o,setIfNotEmpty:function(e,A,r){o(e,A,r,(e=>e&&e.length>0))}}},1878:(e,A,r)=>{const i=r(1951),a=r(6970),t=r(4616),n=r(3278),f=r(4851).formatLabel,l=r(8038),s=r(1696);function c(e,A){return t(e[A]).map((e=>({type:"onexit"===A?"exit":"entry",body:a.decode(e).trim()})))}function o(e,A){return"history"===e&&"deep"===A.type?"deephistory":e}function u(e){return A=>{const r={name:A.id,type:o(e,A)};return l.getStateType(A.id)!==r.type&&(r.typeExplicitlySet=!0),(A.onentry||A.onexit)&&(r.actions=function(e){let A=[];return e.onentry&&(A=A.concat(c(e,"onentry"))),e.onexit&&(A=A.concat(c(e,"onexit"))),A}(A)),Object.keys(A).some((e=>["initial","state","history","parallel","final"].includes(e)))&&(r.statemachine=h(A)),r}}function b(e){return e.filter((e=>Object.prototype.hasOwnProperty.call(e,"transition"))).reduce(((e,A)=>{return e.concat(t(A.transition).reduce((r=A,(e,A)=>{const i=(A.target||r.id).split(/\s+/),t=function(e){const A={};"string"==typeof e?A.action=a.decode(e).trim():Object.assign(A,function(e){const A={};return e.event&&(A.event=e.event.split(/\s+/).join("\n")),e.cond&&(A.cond=e.cond),e["#text"]&&(A.action=a.decode(e["#text"]).trim()),e.type&&(A.type=e.type),A}(e));const r=f(A.event,A.cond,A.action);return r&&(A.label=r),A}(A);return e.concat(i.map((e=>({from:r.id,to:e,...t}))))}),[]));var r}),[])}function h(e){const A=s(e),r={};r.states=A.initial.map(u("initial")).concat(A.state.map(u("regular"))).concat(A.parallel.map(u("parallel"))).concat(A.history.map(u("history"))).concat(A.final.map(u("final")));const i=b(A.initial).concat(b(A.state)).concat(b(A.parallel));return i.length>0&&(r.transitions=i),r}e.exports={parse:function(e){const A=e.trim();if(!0===i.validate(A)){const e=i.parse(A,{attributeNamePrefix:"",ignoreAttributes:!1,tagValueProcessor:e=>a.decode(e),stopNodes:["onentry","onexit","transition"]});return h(n(e,"scxml",{}))}throw new Error("That doesn't look like valid xml ...\n")}}},1696:(e,A,r)=>{const i=r(3278),a=r(4616);function t(e){const A=[];let r={};return e.initial&&(r=e.initial.transition||e.initial.id?function(e){const A={id:e.id?`${e.id}.initial`:"initial"};return e.initial.transition&&Object.assign(A,{transition:[e.initial.transition]}),A}(e):function(e){return{id:"initial",transition:[{target:e.initial}]}}(e),A.push(r)),A}e.exports=function(e){return{...e,initial:t(e),state:a(i(e,"state",[])),parallel:a(i(e,"parallel",[])),history:a(i(e,"history",[])),final:a(i(e,"final",[]))}}},8751:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","title":"state-machine-cat abstract syntax tree schema","$ref":"#/definitions/StateMachineType","$id":"org.js.state-machine-cat/v5.4.0","definitions":{"StateType":{"type":"string","enum":["regular","initial","terminate","final","parallel","history","deephistory","choice","forkjoin","fork","join","junction"]},"TransitionType":{"type":"string","enum":["internal","external"]},"NoteType":{"type":"array","items":{"type":"string"}},"ActionTypeType":{"type":"string","enum":["entry","activity","exit"]},"ActionType":{"type":"object","required":["type","body"],"additionalProperties":false,"properties":{"type":{"$ref":"#/definitions/ActionTypeType"},"body":{"type":"string"}}},"StateMachineType":{"type":"object","additionalProperties":false,"required":["states"],"properties":{"states":{"type":"array","items":{"type":"object","required":["name","type"],"additionalProperties":false,"properties":{"name":{"description":"The name and identifier of the state. Unique within the root state machine.","type":"string"},"type":{"description":"What kind of state (or pseudo state) this state is. E.g. \'regular\' for normal states or \'initial\', \'final\', \'choice\' etc for pseudo states. Most UML (pseudo-) states are supported.","$ref":"#/definitions/StateType"},"label":{"description":"The display label of the state. If it\'s not present, most renderers will use the states\' name in stead.","type":"string"},"color":{"description":"Color to use for rendering the state. Accepts all css color names (\\"blue\\") and hex notation - with (\\"#0000FF77\\") or without (\\"#0000FF\\") transparency.","type":"string"},"active":{"description":"If true the state is considered to be active and rendered as such.","type":"boolean"},"typeExplicitlySet":{"description":"The default parser derives the `type` from the `name` with inband signaling. The user can override that behavior by explicitly setting the `type`. This attribute is there to express that (and make sure that on next parses & processing it doesn\'t get accidentily re-derived from the name again).","type":"boolean"},"isComposite":{"description":"convenience, derived attribute - set to true if there\'s a state machine inside the state; false in all other cases. For internal use - @deprecated","type":"boolean"},"actions":{"type":"array","description":"A series of actions and their types. The type describe when the action takes place (on entry, exit, or otherwise (\'activity\'))","items":{"$ref":"#/definitions/ActionType"}},"note":{"description":"Comments related to this state. Some renderers will use the note attribute to render a note (i.e. as a post-it) attached to the state.","$ref":"#/definitions/NoteType"},"statemachine":{"description":"state machine nested within the state.","$ref":"#/definitions/StateMachineType"}}}},"transitions":{"type":"array","items":{"type":"object","required":["from","to"],"additionalProperties":false,"properties":{"from":{"description":"The name of the state this transition transitions from","type":"string"},"to":{"description":"The name of the state this transition transitions to","type":"string"},"label":{"description":"A display label to represent this transition. Parsers can parse this label into events conditions and actions.","type":"string"},"event":{"description":"Event triggering the transition","type":"string"},"cond":{"description":"Condition for the transition to occur.","type":"string"},"action":{"description":"Action to execute when the transition occurs.","type":"string"},"note":{"description":"Comments related to this transition","$ref":"#/definitions/NoteType"},"color":{"description":"Color to use for rendering the transition. Accepts all css color names (\\"blue\\") and hex notation - with (\\"#0000FF77\\") or without (\\"#0000FF\\") transparency.","type":"string"},"type":{"description":"Whether the transition is external (default) or internal. See https://www.w3.org/TR/scxml/#transition for details.","$ref":"#/definitions/TransitionType"}}}}}}}}')},855:(e,A,r)=>{"use strict";function i(e,A,r,a){this.message=e,this.expected=A,this.found=r,this.location=a,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,i)}!function(e,A){function r(){this.constructor=e}r.prototype=A.prototype,e.prototype=new r}(i,Error),i.buildMessage=function(e,A){var r={literal:function(e){return'"'+a(e.text)+'"'},class:function(e){var A,r="";for(A=0;A0){for(A=1,i=1;A",!1),ve=tA("=>>",!1),ge=tA("=>",!1),me=tA(">>",!1),pe=tA(":>",!1),Ee=tA("--",!1),Be=tA("==",!1),ye=fA("right to left arrow"),Ce=tA("<-",!1),Ie=tA("<<=",!1),Ze=tA("<=",!1),Ge=tA("<<",!1),Le=tA("<:",!1),Qe=tA("#",!1),De=fA("double quoted string"),ze='"',We=tA('"',!1),Ye='\\"',Fe=tA('\\"',!1),Me={type:"any"},Ve=function(e){return e.join("").trim()},Ne=fA("identifier"),Re=/^[^;, "\t\n\r=\-><:{[]/,xe=nA([";",","," ",'"',"\t","\n","\r","=","-",">","<",":","{","["],!0,!1),Je=fA("whitespace"),He=/^[ \t]/,Pe=nA([" ","\t"],!1,!1),Xe=fA("line end"),Se=/^[\r\n]/,je=nA(["\r","\n"],!1,!1),Ue=tA("/*",!1),Te="*/",Oe=tA("*/",!1),_e=tA("//",!1),qe=/^[^\r\n]/,Ke=nA(["\r","\n"],!0,!1),$e=fA("comment"),eA=0,AA=[{line:1,column:1}],rA=0,iA=[],aA=0;if("startRule"in A){if(!(A.startRule in n))throw new Error("Can't start parsing from rule \""+A.startRule+'".');f=n[A.startRule]}function tA(e,A){return{type:"literal",text:e,ignoreCase:A}}function nA(e,A,r){return{type:"class",parts:e,inverted:A,ignoreCase:r}}function fA(e){return{type:"other",description:e}}function lA(A){var r,i=AA[A];if(i)return i;for(r=A-1;!AA[r];)r--;for(i={line:(i=AA[r]).line,column:i.column};rrA&&(rA=eA,iA=[]),iA.push(e))}function oA(){var e,A,r;return e=eA,CA()!==t&&(A=uA())!==t&&CA()!==t?((r=A).states=IA.extractUndeclaredStates(r),e=IA.classifyForkJoins(r)):(eA=e,e=t),e}function uA(){var A,r,i,a;if(aA++,A=eA,(r=function(){var A,r,i,a,n,f;for(eA,A=eA,r=[],i=eA,(a=bA())!==t?(44===e.charCodeAt(eA)?(n=s,eA++):(n=t,0===aA&&cA(c)),n!==t?i=a=a:(eA=i,i=t)):(eA=i,i=t);i!==t;)r.push(i),i=eA,(a=bA())!==t?(44===e.charCodeAt(eA)?(n=s,eA++):(n=t,0===aA&&cA(c)),n!==t?i=a=a:(eA=i,i=t)):(eA=i,i=t);return r!==t?(i=eA,(a=bA())!==t?(59===e.charCodeAt(eA)?(n=o,eA++):(n=t,0===aA&&cA(u)),n!==t?i=a=a:(eA=i,i=t)):(eA=i,i=t),i!==t?A=r=[r,i]:(eA=A,A=t)):(eA=A,A=t),A!==t&&(f=A,A=IA.uniq(f[0].concat(f[1]),IA.stateEqual)),A}())===t&&(r=null),r!==t){for(i=[],a=wA();a!==t;)i.push(a),a=wA();i!==t?A=r=function(e,A){let r={};return IA.setIf(r,"states",e),IA.setIfNotEmpty(r,"transitions",A),r}(r,i):(eA=A,A=t)}else eA=A,A=t;return aA--,A===t&&(r=t,0===aA&&cA(l)),A}function bA(){var A,r,i,a,n,f,l,p,E,B,y,C;for(aA++,A=eA,r=[],i=dA();i!==t;)r.push(i),i=dA();return r!==t&&(i=CA())!==t&&(a=gA())!==t&&CA()!==t?(n=eA,91===e.charCodeAt(eA)?(f="[",eA++):(f=t,0===aA&&cA(h)),f!==t&&(l=function(){var e,A;for(aA++,e=[],A=hA();A!==t;)e.push(A),A=hA();return aA--,e===t&&(A=t,0===aA&&cA(m)),e}())!==t?(93===e.charCodeAt(eA)?(p="]",eA++):(p=t,0===aA&&cA(w)),p!==t?n=f=l:(eA=n,n=t)):(eA=n,n=t),n===t&&(n=null),n!==t&&(f=CA())!==t?(l=eA,58===e.charCodeAt(eA)?(p=":",eA++):(p=t,0===aA&&cA(k)),p!==t&&(E=CA())!==t&&(B=function(){var A;return(A=vA())===t&&(A=function(){var A;return eA,(A=function(){var A,r,i,a;for(A=[],r=eA,i=eA,aA++,44===e.charCodeAt(eA)?(a=s,eA++):(a=t,0===aA&&cA(c)),a===t&&(59===e.charCodeAt(eA)?(a=o,eA++):(a=t,0===aA&&cA(u)),a===t&&(123===e.charCodeAt(eA)?(a=d,eA++):(a=t,0===aA&&cA(v)))),aA--,a===t?i=void 0:(eA=i,i=t),i!==t?(e.length>eA?(a=e.charAt(eA),eA++):(a=t,0===aA&&cA(Me)),a!==t?r=i=a:(eA=r,r=t)):(eA=r,r=t);r!==t;)A.push(r),r=eA,i=eA,aA++,44===e.charCodeAt(eA)?(a=s,eA++):(a=t,0===aA&&cA(c)),a===t&&(59===e.charCodeAt(eA)?(a=o,eA++):(a=t,0===aA&&cA(u)),a===t&&(123===e.charCodeAt(eA)?(a=d,eA++):(a=t,0===aA&&cA(v)))),aA--,a===t?i=void 0:(eA=i,i=t),i!==t?(e.length>eA?(a=e.charAt(eA),eA++):(a=t,0===aA&&cA(Me)),a!==t?r=i=a:(eA=r,r=t)):(eA=r,r=t);return A}())!==t&&(A=Ve(A)),A}()),A}())!==t&&CA()!==t?l=p=B:(eA=l,l=t),l===t&&(l=null),l!==t&&(p=CA())!==t?(E=eA,123===e.charCodeAt(eA)?(B=d,eA++):(B=t,0===aA&&cA(v)),B!==t&&CA()!==t&&(y=uA())!==t&&CA()!==t?(125===e.charCodeAt(eA)?(C="}",eA++):(C=t,0===aA&&cA(g)),C!==t?E=B=y:(eA=E,E=t)):(eA=E,E=t),E===t&&(E=null),E!==t&&(B=CA())!==t?A=r=function(e,A,r,i,a){let t=IA.initState(A);return(r||[]).forEach((e=>IA.setIf(t,e.name,e.value))),IA.setIf(t,"typeExplicitlySet",(r||[]).some((e=>e.typeExplicitlySet))),IA.setIf(t,"statemachine",a),IA.setIfNotEmpty(t,"note",e),Boolean(i)&&IA.setIfNotEmpty(t,"actions",IA.extractActions(i)),t}(r,a,n,l,E):(eA=A,A=t)):(eA=A,A=t)):(eA=A,A=t)):(eA=A,A=t),aA--,A===t&&(r=t,0===aA&&cA(b)),A}function hA(){var A,r,i,a;return aA++,A=eA,CA()!==t&&(r=function(){var A,r;return aA++,A=eA,"label"===e.substr(eA,5).toLowerCase()?(r=e.substr(eA,5),eA+=5):(r=t,0===aA&&cA(I)),r===t&&(e.substr(eA,5).toLowerCase()===Z?(r=e.substr(eA,5),eA+=5):(r=t,0===aA&&cA(G))),r!==t&&(r=L(r)),aA--,(A=r)===t&&(r=t,0===aA&&cA(C)),A}())!==t&&CA()!==t?(61===e.charCodeAt(eA)?(i=E,eA++):(i=t,0===aA&&cA(B)),i!==t&&CA()!==t&&(a=vA())!==t&&CA()!==t?A=y(r,a):(eA=A,A=t)):(eA=A,A=t),A===t&&(A=eA,CA()!==t&&(r=function(){var A,r;return aA++,A=eA,"active"===e.substr(eA,6).toLowerCase()?(r=e.substr(eA,6),eA+=6):(r=t,0===aA&&cA(D)),r!==t&&(r=L(r)),aA--,(A=r)===t&&(r=t,0===aA&&cA(Q)),A}())!==t&&CA()!==t?A={name:r,value:!0}:(eA=A,A=t),A===t&&(A=eA,CA()!==t&&(r=function(){var A,r;return aA++,A=eA,e.substr(eA,4).toLowerCase()===W?(r=e.substr(eA,4),eA+=4):(r=t,0===aA&&cA(Y)),r!==t&&(r=L(r)),aA--,(A=r)===t&&(r=t,0===aA&&cA(z)),A}())!==t&&CA()!==t?(61===e.charCodeAt(eA)?(i=E,eA++):(i=t,0===aA&&cA(B)),i!==t&&CA()!==t&&(a=function(){var A;return aA++,e.substr(eA,7)===M?(A=M,eA+=7):(A=t,0===aA&&cA(V)),A===t&&(e.substr(eA,7)===N?(A=N,eA+=7):(A=t,0===aA&&cA(R)),A===t&&(e.substr(eA,9)===x?(A=x,eA+=9):(A=t,0===aA&&cA(J)),A===t&&(e.substr(eA,5)===H?(A=H,eA+=5):(A=t,0===aA&&cA(P)),A===t&&(e.substr(eA,8)===X?(A=X,eA+=8):(A=t,0===aA&&cA(S)),A===t&&(e.substr(eA,7)===j?(A=j,eA+=7):(A=t,0===aA&&cA(U)),A===t&&(e.substr(eA,11)===T?(A=T,eA+=11):(A=t,0===aA&&cA(O)),A===t&&(e.substr(eA,6)===_?(A=_,eA+=6):(A=t,0===aA&&cA(q)),A===t&&(e.substr(eA,8)===K?(A=K,eA+=8):(A=t,0===aA&&cA($)),A===t&&(e.substr(eA,4)===ee?(A=ee,eA+=4):(A=t,0===aA&&cA(Ae)),A===t&&(e.substr(eA,4)===re?(A=re,eA+=4):(A=t,0===aA&&cA(ie)),A===t&&(e.substr(eA,8)===ae?(A=ae,eA+=8):(A=t,0===aA&&cA(te))))))))))))),aA--,A===t&&0===aA&&cA(F),A}())!==t&&CA()!==t?A={name:r,value:a,typeExplicitlySet:!0}:(eA=A,A=t)):(eA=A,A=t))),aA--,A===t&&0===aA&&cA(p),A}function wA(){var A,r,i,a,n,f,l,s,c,b,g,m;for(aA++,A=eA,r=[],i=dA();i!==t;)r.push(i),i=dA();return r!==t&&(i=function(){var A,r,i;return A=eA,CA()!==t&&(r=gA())!==t&&CA()!==t&&function(){var A;return aA++,"->"===e.substr(eA,2)?(A="->",eA+=2):(A=t,0===aA&&cA(de)),A===t&&("=>>"===e.substr(eA,3)?(A="=>>",eA+=3):(A=t,0===aA&&cA(ve)),A===t&&("=>"===e.substr(eA,2)?(A="=>",eA+=2):(A=t,0===aA&&cA(ge)),A===t&&(">>"===e.substr(eA,2)?(A=">>",eA+=2):(A=t,0===aA&&cA(me)),A===t&&(":>"===e.substr(eA,2)?(A=":>",eA+=2):(A=t,0===aA&&cA(pe)),A===t&&("--"===e.substr(eA,2)?(A="--",eA+=2):(A=t,0===aA&&cA(Ee)),A===t&&("=="===e.substr(eA,2)?(A="==",eA+=2):(A=t,0===aA&&cA(Be)))))))),aA--,A===t&&0===aA&&cA(ke),A}()!==t&&CA()!==t&&(i=gA())!==t&&CA()!==t?A={from:r,to:i}:(eA=A,A=t),A===t&&(A=eA,CA()!==t&&(r=gA())!==t&&CA()!==t&&function(){var A;return aA++,"<-"===e.substr(eA,2)?(A="<-",eA+=2):(A=t,0===aA&&cA(Ce)),A===t&&("<<="===e.substr(eA,3)?(A="<<=",eA+=3):(A=t,0===aA&&cA(Ie)),A===t&&("<="===e.substr(eA,2)?(A="<=",eA+=2):(A=t,0===aA&&cA(Ze)),A===t&&("<<"===e.substr(eA,2)?(A="<<",eA+=2):(A=t,0===aA&&cA(Ge)),A===t&&("<:"===e.substr(eA,2)?(A="<:",eA+=2):(A=t,0===aA&&cA(Le)))))),aA--,A===t&&0===aA&&cA(ye),A}()!==t&&CA()!==t&&(i=gA())!==t&&CA()!==t?A={from:i,to:r}:(eA=A,A=t)),A}())!==t?(a=eA,91===e.charCodeAt(eA)?(n="[",eA++):(n=t,0===aA&&cA(h)),n!==t&&(f=function(){var e,A;for(aA++,e=[],A=kA();A!==t;)e.push(A),A=kA();return aA--,e===t&&(A=t,0===aA&&cA(fe)),e}())!==t?(93===e.charCodeAt(eA)?(l="]",eA++):(l=t,0===aA&&cA(w)),l!==t&&(s=CA())!==t?a=n=f:(eA=a,a=t)):(eA=a,a=t),a===t&&(a=null),a!==t?(n=eA,58===e.charCodeAt(eA)?(f=":",eA++):(f=t,0===aA&&cA(k)),f!==t&&(l=CA())!==t&&(s=function(){var A;return(A=vA())===t&&(A=function(){var A;return eA,(A=function(){var A,r,i,a;for(A=[],r=eA,i=eA,aA++,59===e.charCodeAt(eA)?(a=o,eA++):(a=t,0===aA&&cA(u)),a===t&&(123===e.charCodeAt(eA)?(a=d,eA++):(a=t,0===aA&&cA(v))),aA--,a===t?i=void 0:(eA=i,i=t),i!==t?(e.length>eA?(a=e.charAt(eA),eA++):(a=t,0===aA&&cA(Me)),a!==t?r=i=a:(eA=r,r=t)):(eA=r,r=t);r!==t;)A.push(r),r=eA,i=eA,aA++,59===e.charCodeAt(eA)?(a=o,eA++):(a=t,0===aA&&cA(u)),a===t&&(123===e.charCodeAt(eA)?(a=d,eA++):(a=t,0===aA&&cA(v))),aA--,a===t?i=void 0:(eA=i,i=t),i!==t?(e.length>eA?(a=e.charAt(eA),eA++):(a=t,0===aA&&cA(Me)),a!==t?r=i=a:(eA=r,r=t)):(eA=r,r=t);return A}())!==t&&(A=Ve(A)),A}()),A}())!==t&&CA()!==t?n=f=s:(eA=n,n=t),n===t&&(n=null),n!==t?(59===e.charCodeAt(eA)?(f=o,eA++):(f=t,0===aA&&cA(u)),f!==t?(c=r,b=i,g=a,(m=n)&&(b.label=m,b=Object.assign(b,IA.parseTransitionExpression(m))),(g||[]).forEach((e=>IA.setIf(b,e.name,e.value))),IA.setIfNotEmpty(b,"note",c),A=r=b):(eA=A,A=t)):(eA=A,A=t)):(eA=A,A=t)):(eA=A,A=t),aA--,A===t&&(r=t,0===aA&&cA(ne)),A}function kA(){var A,r,i,a;return aA++,A=eA,CA()!==t&&(r=function(){var A,r;return aA++,A=eA,e.substr(eA,5).toLowerCase()===Z?(r=e.substr(eA,5),eA+=5):(r=t,0===aA&&cA(G)),r!==t&&(r=L(r)),aA--,(A=r)===t&&(r=t,0===aA&&cA(se)),A}())!==t&&CA()!==t?(61===e.charCodeAt(eA)?(i=E,eA++):(i=t,0===aA&&cA(B)),i!==t&&CA()!==t&&(a=vA())!==t&&CA()!==t?A=y(r,a):(eA=A,A=t)):(eA=A,A=t),A===t&&(A=eA,CA()!==t&&(r=function(){var A,r;return aA++,A=eA,e.substr(eA,4).toLowerCase()===W?(r=e.substr(eA,4),eA+=4):(r=t,0===aA&&cA(Y)),r!==t&&(r=L(r)),aA--,(A=r)===t&&(r=t,0===aA&&cA(ce)),A}())!==t&&CA()!==t?(61===e.charCodeAt(eA)?(i=E,eA++):(i=t,0===aA&&cA(B)),i!==t&&CA()!==t&&(a=function(){var A;return aA++,e.substr(eA,8)===ue?(A=ue,eA+=8):(A=t,0===aA&&cA(be)),A===t&&(e.substr(eA,8)===he?(A=he,eA+=8):(A=t,0===aA&&cA(we))),aA--,A===t&&0===aA&&cA(oe),A}())!==t&&CA()!==t?A=y(r,a):(eA=A,A=t)):(eA=A,A=t)),aA--,A===t&&0===aA&&cA(le),A}function dA(){var A,r,i,a;if(A=eA,CA()!==t)if(35===e.charCodeAt(eA)?(r="#",eA++):(r=t,0===aA&&cA(Qe)),r!==t){for(i=[],a=BA();a!==t;)i.push(a),a=BA();i!==t?A=i.join("").trim():(eA=A,A=t)}else eA=A,A=t;else eA=A,A=t;return A}function vA(){var A,r,i,a;return aA++,A=eA,34===e.charCodeAt(eA)?(r=ze,eA++):(r=t,0===aA&&cA(We)),r!==t&&(i=function(){var A,r,i,a;for(A=[],r=eA,i=eA,aA++,34===e.charCodeAt(eA)?(a=ze,eA++):(a=t,0===aA&&cA(We)),aA--,a===t?i=void 0:(eA=i,i=t),i!==t?(e.substr(eA,2)===Ye?(a=Ye,eA+=2):(a=t,0===aA&&cA(Fe)),a===t&&(e.length>eA?(a=e.charAt(eA),eA++):(a=t,0===aA&&cA(Me))),a!==t?r=i=a:(eA=r,r=t)):(eA=r,r=t);r!==t;)A.push(r),r=eA,i=eA,aA++,34===e.charCodeAt(eA)?(a=ze,eA++):(a=t,0===aA&&cA(We)),aA--,a===t?i=void 0:(eA=i,i=t),i!==t?(e.substr(eA,2)===Ye?(a=Ye,eA+=2):(a=t,0===aA&&cA(Fe)),a===t&&(e.length>eA?(a=e.charAt(eA),eA++):(a=t,0===aA&&cA(Me))),a!==t?r=i=a:(eA=r,r=t)):(eA=r,r=t);return A}())!==t?(34===e.charCodeAt(eA)?(a=ze,eA++):(a=t,0===aA&&cA(We)),a!==t?A=r=i.join("").replace(/\\\"/g,'"'):(eA=A,A=t)):(eA=A,A=t),aA--,A===t&&(r=t,0===aA&&cA(De)),A}function gA(){var A,r,i;if(aA++,A=eA,r=[],Re.test(e.charAt(eA))?(i=e.charAt(eA),eA++):(i=t,0===aA&&cA(xe)),i!==t)for(;i!==t;)r.push(i),Re.test(e.charAt(eA))?(i=e.charAt(eA),eA++):(i=t,0===aA&&cA(xe));else r=t;return r!==t&&(r=r.join("")),(A=r)===t&&(A=vA()),aA--,A===t&&(r=t,0===aA&&cA(Ne)),A}function mA(){var A,r;return aA++,A=eA,He.test(e.charAt(eA))?(r=e.charAt(eA),eA++):(r=t,0===aA&&cA(Pe)),r!==t&&(r=r),aA--,(A=r)===t&&(r=t,0===aA&&cA(Je)),A}function pA(){var A,r;return aA++,A=eA,Se.test(e.charAt(eA))?(r=e.charAt(eA),eA++):(r=t,0===aA&&cA(je)),r!==t&&(r=r),aA--,(A=r)===t&&(r=t,0===aA&&cA(Xe)),A}function EA(){var A,r,i;return A=eA,r=eA,aA++,e.substr(eA,2)===Te?(i=Te,eA+=2):(i=t,0===aA&&cA(Oe)),aA--,i===t?r=void 0:(eA=r,r=t),r!==t?(e.length>eA?(i=e.charAt(eA),eA++):(i=t,0===aA&&cA(Me)),i!==t?A=r=i:(eA=A,A=t)):(eA=A,A=t),A}function BA(){var A;return qe.test(e.charAt(eA))?(A=e.charAt(eA),eA++):(A=t,0===aA&&cA(Ke)),A}function yA(){var A;return aA++,(A=function(){var A,r,i,a;if(A=eA,(r=function(){var A;return"//"===e.substr(eA,2)?(A="//",eA+=2):(A=t,0===aA&&cA(_e)),A}())!==t){for(i=[],a=BA();a!==t;)i.push(a),a=BA();i!==t?A=r+=i.join(""):(eA=A,A=t)}else eA=A,A=t;return A}())===t&&(A=function(){var A,r,i,a,n;if(A=eA,(r=function(){var A;return"/*"===e.substr(eA,2)?(A="/*",eA+=2):(A=t,0===aA&&cA(Ue)),A}())!==t){for(i=[],a=EA();a!==t;)i.push(a),a=EA();i!==t&&(a=function(){var A;return e.substr(eA,2)===Te?(A=Te,eA+=2):(A=t,0===aA&&cA(Oe)),A}())!==t?(n=a,A=r=r+i.join("")+n):(eA=A,A=t)}else eA=A,A=t;return A}()),aA--,A===t&&0===aA&&cA($e),A}function CA(){var e,A;for(e=[],(A=mA())===t&&(A=pA())===t&&(A=yA());A!==t;)e.push(A),(A=mA())===t&&(A=pA())===t&&(A=yA());return e}const IA=r(8038);if((a=f())!==t&&eA===e.length)return a;throw a!==t&&eA{const A=[{name:"fontname",value:'"Helvetica"'},{name:"fontsize",value:"12"},{name:"penwidth",value:"2.0"}],r={dot:[{name:"splines",value:"true"},{name:"ordering",value:"out"},{name:"compound",value:"true"},{name:"overlap",value:"scale"},{name:"nodesep",value:"0.3"},{name:"ranksep",value:"0.1"}],fdp:[{name:"K",value:"0.9"}],osage:[{name:"pack",value:"42"}],neato:[{name:"epsilon",value:"0.9"}]},i={"bottom-top":[{name:"rankdir",value:"BT"}],"left-right":[{name:"rankdir",value:"LR"}],"right-left":[{name:"rankdir",value:"RL"}]},a=[{name:"shape",value:"plaintext"},{name:"style",value:"filled"},{name:"fillcolor",value:"transparent"},{name:"fontname",value:"Helvetica"},{name:"fontsize",value:12},{name:"penwidth",value:"2.0"}],t=[{name:"fontname",value:"Helvetica"},{name:"fontsize",value:10}];function n(e){return`${e.name}=${e.value}`}e.exports={buildGraphAttributes:(e,a,t)=>A.concat(r[e]||[]).concat(i[a]||[]).concat(t||[]).map(n).join(" "),buildNodeAttributes:e=>a.concat(e||[]).map(n).join(" "),buildEdgeAttributes:e=>t.concat(e||[]).map(n).join(" ")}},8578:e=>{e.exports=class{constructor(){this.reset()}reset(){this.COUNTER=0}next(){return++this.COUNTER}nextAsString(){return this.next().toString(10)}}},9604:(e,A,r)=>{var i=r(5631),a=i.template;(i.templates=i.templates||{})["dot.states.template.hbs"]=a({1:function(e,A,r,i,a){var t,n,f,l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},s="";return n=null!=(n=l(r,"nestedExternalSelfTransitions")||(null!=A?l(A,"nestedExternalSelfTransitions"):A))?n:e.hooks.helperMissing,f={name:"nestedExternalSelfTransitions",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a,loc:{start:{line:2,column:2},end:{line:4,column:36}}},t="function"==typeof n?n.call(null!=A?A:e.nullContext||{},f):n,l(r,"nestedExternalSelfTransitions")||(t=e.hooks.blockHelperMissing.call(A,t,f)),null!=t&&(s+=t),s},2:function(e,A,r,i,a){var t;return' "self_'+(null!=(t=e.lambda(A,A))?t:"")+'" [shape=point style=invis width=0 height=0 fixedsize=true]\n'},4:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(t="function"==typeof(n=null!=(n=l(r,"name")||(null!=A?l(A,"name"):A))?n:e.hooks.helperMissing)?n.call(f,{name:"name",hash:{},data:a,loc:{start:{line:7,column:3},end:{line:7,column:13}}}):n)?t:"")+'" [shape=circle style=filled '+(null!=(t=l(r,"if").call(f,null!=A?l(A,"color"):A,{name:"if",hash:{},fn:e.program(5,a,0),inverse:e.program(7,a,0),data:a,loc:{start:{line:7,column:42},end:{line:7,column:130}}}))?t:"")+(null!=(t=l(r,"if").call(f,null!=A?l(A,"active"):A,{name:"if",hash:{},fn:e.program(9,a,0),inverse:e.noop,data:a,loc:{start:{line:7,column:130},end:{line:7,column:164}}}))?t:"")+'fixedsize=true height=0.15 label=""]\n'},5:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.hooks.helperMissing,s="function",c=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'color="'+(null!=(t=typeof(n=null!=(n=c(r,"color")||(null!=A?c(A,"color"):A))?n:l)===s?n.call(f,{name:"color",hash:{},data:a,loc:{start:{line:7,column:62},end:{line:7,column:73}}}):n)?t:"")+'" fillcolor="'+(null!=(t=typeof(n=null!=(n=c(r,"color")||(null!=A?c(A,"color"):A))?n:l)===s?n.call(f,{name:"color",hash:{},data:a,loc:{start:{line:7,column:86},end:{line:7,column:97}}}):n)?t:"")+'" '},7:function(e,A,r,i,a){return"fillcolor=black "},9:function(e,A,r,i,a){return"penwidth=3.0 "},11:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},u=' "'+(null!=(t=typeof(n=null!=(n=o(r,"name")||(null!=A?o(A,"name"):A))?n:s)===c?n.call(l,{name:"name",hash:{},data:a,loc:{start:{line:10,column:3},end:{line:10,column:13}}}):n)?t:"")+'" [margin=0 '+(null!=(t=o(r,"if").call(l,null!=A?o(A,"color"):A,{name:"if",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a,loc:{start:{line:10,column:25},end:{line:10,column:65}}}))?t:"")+(null!=(t=o(r,"if").call(l,null!=A?o(A,"active"):A,{name:"if",hash:{},fn:e.program(14,a,0),inverse:e.noop,data:a,loc:{start:{line:10,column:65},end:{line:10,column:114}}}))?t:"")+'label= < \n \n \n";return n=null!=(n=o(r,"actions")||(null!=A?o(A,"actions"):A))?n:s,f={name:"actions",hash:{},fn:e.program(24,a,0),inverse:e.noop,data:a,loc:{start:{line:13,column:6},end:{line:16,column:18}}},t=typeof n===c?n.call(l,f):n,o(r,"actions")||(t=e.hooks.blockHelperMissing.call(A,t,f)),null!=t&&(u+=t),u+"
"+(null!=(t=o(r,"if").call(l,null!=A?o(A,"active"):A,{name:"if",hash:{},fn:e.program(20,a,0),inverse:e.program(22,a,0),data:a,loc:{start:{line:12,column:87},end:{line:12,column:141}}}))?t:"")+"
\n >]\n"},12:function(e,A,r,i,a){var t,n,f=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'color="'+(null!=(t="function"==typeof(n=null!=(n=f(r,"color")||(null!=A?f(A,"color"):A))?n:e.hooks.helperMissing)?n.call(null!=A?A:e.nullContext||{},{name:"color",hash:{},data:a,loc:{start:{line:10,column:45},end:{line:10,column:56}}}):n)?t:"")+'" '},14:function(e,A,r,i,a){return"peripheries=1 style=rounded "},16:function(e,A,r,i,a){return' cellpadding="2"'},18:function(e,A,r,i,a){return' cellpadding="7"'},20:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return""+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"label")||(null!=A?n(A,"label"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"label",hash:{},data:a,loc:{start:{line:12,column:104},end:{line:12,column:113}}}):t)+""},22:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return e.escapeExpression("function"==typeof(t=null!=(t=n(r,"label")||(null!=A?n(A,"label"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"label",hash:{},data:a,loc:{start:{line:12,column:125},end:{line:12,column:134}}}):t)},24:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return" "+(null!=(t=n(r,"if").call(null!=A?A:e.nullContext||{},a&&n(a,"first"),{name:"if",hash:{},fn:e.program(25,a,0),inverse:e.noop,data:a,loc:{start:{line:14,column:8},end:{line:14,column:34}}}))?t:"")+'\n '+e.escapeExpression(e.lambda(A,A))+"\n"},25:function(e,A,r,i,a){return"


"},27:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(t="function"==typeof(n=null!=(n=l(r,"name")||(null!=A?l(A,"name"):A))?n:e.hooks.helperMissing)?n.call(f,{name:"name",hash:{},data:a,loc:{start:{line:21,column:3},end:{line:21,column:13}}}):n)?t:"")+'" [shape=circle '+(null!=(t=l(r,"if").call(f,null!=A?l(A,"color"):A,{name:"if",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a,loc:{start:{line:21,column:29},end:{line:21,column:69}}}))?t:"")+(null!=(t=l(r,"if").call(f,null!=A?l(A,"active"):A,{name:"if",hash:{},fn:e.program(9,a,0),inverse:e.noop,data:a,loc:{start:{line:21,column:69},end:{line:21,column:103}}}))?t:"")+'label="H"]\n'},29:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(t="function"==typeof(n=null!=(n=l(r,"name")||(null!=A?l(A,"name"):A))?n:e.hooks.helperMissing)?n.call(f,{name:"name",hash:{},data:a,loc:{start:{line:24,column:3},end:{line:24,column:13}}}):n)?t:"")+'" [shape=circle '+(null!=(t=l(r,"if").call(f,null!=A?l(A,"color"):A,{name:"if",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a,loc:{start:{line:24,column:29},end:{line:24,column:69}}}))?t:"")+(null!=(t=l(r,"if").call(f,null!=A?l(A,"active"):A,{name:"if",hash:{},fn:e.program(9,a,0),inverse:e.noop,data:a,loc:{start:{line:24,column:69},end:{line:24,column:103}}}))?t:"")+'label="H*"]\n'},31:function(e,A,r,i,a,t,n){var f,l,s,c=null!=A?A:e.nullContext||{},o=e.hooks.helperMissing,u="function",b=e.hooks.blockHelperMissing,h=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},w=' "'+(null!=(f=typeof(l=null!=(l=h(r,"name")||(null!=A?h(A,"name"):A))?l:o)===u?l.call(c,{name:"name",hash:{},data:a,loc:{start:{line:27,column:3},end:{line:27,column:13}}}):l)?f:"")+'" [shape=diamond fixedsize=true width=0.35 height=0.35 fontsize=10 '+(null!=(f=h(r,"if").call(c,null!=A?h(A,"color"):A,{name:"if",hash:{},fn:e.program(12,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:27,column:80},end:{line:27,column:120}}}))?f:"")+(null!=(f=h(r,"if").call(c,null!=A?h(A,"active"):A,{name:"if",hash:{},fn:e.program(9,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:27,column:120},end:{line:27,column:154}}}))?f:"")+'label=" "]\n "'+(null!=(f=typeof(l=null!=(l=h(r,"name")||(null!=A?h(A,"name"):A))?l:o)===u?l.call(c,{name:"name",hash:{},data:a,loc:{start:{line:28,column:3},end:{line:28,column:13}}}):l)?f:"")+'" -> "'+(null!=(f=typeof(l=null!=(l=h(r,"name")||(null!=A?h(A,"name"):A))?l:o)===u?l.call(c,{name:"name",hash:{},data:a,loc:{start:{line:28,column:19},end:{line:28,column:29}}}):l)?f:"")+'" [label=<';return l=null!=(l=h(r,"actions")||(null!=A?h(A,"actions"):A))?l:o,s={name:"actions",hash:{},fn:e.program(32,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:28,column:39},end:{line:28,column:144}}},f=typeof l===u?l.call(c,s):l,h(r,"actions")||(f=b.call(A,f,s)),null!=f&&(w+=f),w+="> color=transparent",l=null!=(l=h(r,"color")||(null!=A?h(A,"color"):A))?l:o,s={name:"color",hash:{},fn:e.program(41,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:28,column:163},end:{line:28,column:203}}},f=typeof l===u?l.call(c,s):l,h(r,"color")||(f=b.call(A,f,s)),null!=f&&(w+=f),w+"];\n"},32:function(e,A,r,i,a,t,n){var f,l=null!=A?A:e.nullContext||{},s=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return(null!=(f=s(r,"if").call(l,a&&s(a,"first"),{name:"if",hash:{},fn:e.program(33,a,0,t,n),inverse:e.program(35,a,0,t,n),data:a,loc:{start:{line:28,column:51},end:{line:28,column:82}}}))?f:"")+(null!=(f=s(r,"if").call(l,null!=n[1]?s(n[1],"active"):n[1],{name:"if",hash:{},fn:e.program(37,a,0,t,n),inverse:e.program(39,a,0,t,n),data:a,loc:{start:{line:28,column:82},end:{line:28,column:131}}}))?f:"")},33:function(e,A,r,i,a){return""},35:function(e,A,r,i,a){return"\\n"},37:function(e,A,r,i,a){return""+e.escapeExpression(e.lambda(A,A))+""},39:function(e,A,r,i,a){return e.escapeExpression(e.lambda(A,A))},41:function(e,A,r,i,a){var t;return' fontcolor="'+(null!=(t=e.lambda(A,A))?t:"")+'"'},43:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.hooks.helperMissing,s="function",c=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(t=typeof(n=null!=(n=c(r,"name")||(null!=A?c(A,"name"):A))?n:l)===s?n.call(f,{name:"name",hash:{},data:a,loc:{start:{line:31,column:3},end:{line:31,column:13}}}):n)?t:"")+'" [shape=rect '+(null!=(t=c(r,"if").call(f,null!=A?c(A,"color"):A,{name:"if",hash:{},fn:e.program(5,a,0),inverse:e.program(7,a,0),data:a,loc:{start:{line:31,column:27},end:{line:31,column:115}}}))?t:"")+(null!=(t=c(r,"if").call(f,null!=A?c(A,"active"):A,{name:"if",hash:{},fn:e.program(9,a,0),inverse:e.noop,data:a,loc:{start:{line:31,column:115},end:{line:31,column:149}}}))?t:"")+'label=" " fixedsize=true style=filled '+(null!=(t=typeof(n=null!=(n=c(r,"sizingExtras")||(null!=A?c(A,"sizingExtras"):A))?n:l)===s?n.call(f,{name:"sizingExtras",hash:{},data:a,loc:{start:{line:31,column:187},end:{line:31,column:205}}}):n)?t:"")+"]\n"},45:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.hooks.helperMissing,s="function",c=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(t=typeof(n=null!=(n=c(r,"name")||(null!=A?c(A,"name"):A))?n:l)===s?n.call(f,{name:"name",hash:{},data:a,loc:{start:{line:37,column:3},end:{line:37,column:13}}}):n)?t:"")+'" [label= < \n \n \n \n
X
"+e.escapeExpression(typeof(n=null!=(n=c(r,"label")||(null!=A?c(A,"label"):A))?n:l)===s?n.call(f,{name:"label",hash:{},data:a,loc:{start:{line:40,column:78},end:{line:40,column:87}}}):n)+"
\n >]\n"},46:function(e,A,r,i,a){var t,n,f=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'color="'+(null!=(t="function"==typeof(n=null!=(n=f(r,"color")||(null!=A?f(A,"color"):A))?n:e.hooks.helperMissing)?n.call(null!=A?A:e.nullContext||{},{name:"color",hash:{},data:a,loc:{start:{line:40,column:58},end:{line:40,column:69}}}):n)?t:"")+'"'},48:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(t="function"==typeof(n=null!=(n=l(r,"name")||(null!=A?l(A,"name"):A))?n:e.hooks.helperMissing)?n.call(f,{name:"name",hash:{},data:a,loc:{start:{line:45,column:3},end:{line:45,column:13}}}):n)?t:"")+'" [shape=circle style=filled '+(null!=(t=l(r,"if").call(f,null!=A?l(A,"color"):A,{name:"if",hash:{},fn:e.program(5,a,0),inverse:e.program(7,a,0),data:a,loc:{start:{line:45,column:42},end:{line:45,column:130}}}))?t:"")+"fixedsize=true height=0.15 peripheries=2 "+(null!=(t=l(r,"if").call(f,null!=A?l(A,"active"):A,{name:"if",hash:{},fn:e.program(9,a,0),inverse:e.noop,data:a,loc:{start:{line:45,column:171},end:{line:45,column:205}}}))?t:"")+'label=""]\n'},50:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},u=' subgraph "cluster_'+(null!=(t=typeof(n=null!=(n=o(r,"name")||(null!=A?o(A,"name"):A))?n:s)===c?n.call(l,{name:"name",hash:{},data:a,loc:{start:{line:48,column:20},end:{line:48,column:30}}}):n)?t:"")+'" {\n '+(null!=(t=o(r,"if").call(l,null!=A?o(A,"color"):A,{name:"if",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a,loc:{start:{line:49,column:4},end:{line:49,column:44}}}))?t:"")+'label= <\n \n \n";return n=null!=(n=o(r,"actions")||(null!=A?o(A,"actions"):A))?n:s,f={name:"actions",hash:{},fn:e.program(51,a,0),inverse:e.noop,data:a,loc:{start:{line:52,column:6},end:{line:55,column:18}}},t=typeof n===c?n.call(l,f):n,o(r,"actions")||(t=e.hooks.blockHelperMissing.call(A,t,f)),null!=t&&(u+=t),u+"
'+(null!=(t=o(r,"if").call(l,null!=A?o(A,"active"):A,{name:"if",hash:{},fn:e.program(20,a,0),inverse:e.program(22,a,0),data:a,loc:{start:{line:51,column:14},end:{line:51,column:68}}}))?t:"")+"
\n > "+(null!=(t=o(r,"if").call(l,null!=A?o(A,"parentIsParallel"):A,{name:"if",hash:{},fn:e.program(53,a,0),inverse:e.program(55,a,0),data:a,loc:{start:{line:57,column:6},end:{line:57,column:137}}}))?t:"")+'\n "'+(null!=(t=typeof(n=null!=(n=o(r,"name")||(null!=A?o(A,"name"):A))?n:s)===c?n.call(l,{name:"name",hash:{},data:a,loc:{start:{line:58,column:5},end:{line:58,column:15}}}):n)?t:"")+'" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]\n '+(null!=(t=(o(r,"stateSection")||A&&o(A,"stateSection")||s).call(l,null!=A?o(A,"statemachine"):A,{name:"stateSection",hash:{},fn:e.program(33,a,0),inverse:e.noop,data:a,loc:{start:{line:59,column:4},end:{line:59,column:51}}}))?t:"")+"\n }\n"},51:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return" "+(null!=(t=n(r,"if").call(null!=A?A:e.nullContext||{},a&&n(a,"first"),{name:"if",hash:{},fn:e.program(25,a,0),inverse:e.noop,data:a,loc:{start:{line:53,column:8},end:{line:53,column:34}}}))?t:"")+'\n '+e.escapeExpression(e.lambda(A,A))+"\n"},53:function(e,A,r,i,a){return'style="dashed" penwidth=1'},55:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return"style=rounded "+(null!=(t=n(r,"if").call(null!=A?A:e.nullContext||{},null!=A?n(A,"active"):A,{name:"if",hash:{},fn:e.program(56,a,0),inverse:e.program(58,a,0),data:a,loc:{start:{line:57,column:77},end:{line:57,column:130}}}))?t:"")},56:function(e,A,r,i,a){return"penwidth=3.0"},58:function(e,A,r,i,a){return"penwidth=2.0"},60:function(e,A,r,i,a,t,n){var f,l,s,c=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},o="";return l=null!=(l=c(r,"noteName")||(null!=A?c(A,"noteName"):A))?l:e.hooks.helperMissing,s={name:"noteName",hash:{},fn:e.program(61,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:63,column:4},end:{line:66,column:17}}},f="function"==typeof l?l.call(null!=A?A:e.nullContext||{},s):l,c(r,"noteName")||(f=e.hooks.blockHelperMissing.call(A,f,s)),null!=f&&(o+=f),o},61:function(e,A,r,i,a,t,n){var f,l=e.lambda,s=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "'+(null!=(f=l(A,A))?f:"")+'" [color=black fontcolor=black label="'+(null!=(f=l(null!=n[1]?s(n[1],"noteFlattened"):n[1],A))?f:"")+'" shape=note fontsize=10 fillcolor="#ffffcc" penwidth=1.0]\n "'+(null!=(f=l(null!=n[1]?s(n[1],"name"):n[1],A))?f:"")+'" -> "'+(null!=(f=l(A,A))?f:"")+'" [style=dashed arrowtail=none arrowhead=none]\n'},compiler:[8,">= 4.3.0"],main:function(e,A,r,i,a,t,n){var f,l,s,c=null!=A?A:e.nullContext||{},o=e.hooks.helperMissing,u="function",b=e.hooks.blockHelperMissing,h=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},w="";return l=null!=(l=h(r,"compositeStates")||(null!=A?h(A,"compositeStates"):A))?l:o,s={name:"compositeStates",hash:{},fn:e.program(1,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:1,column:0},end:{line:5,column:20}}},f=typeof l===u?l.call(c,s):l,h(r,"compositeStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"initialStates")||(null!=A?h(A,"initialStates"):A))?l:o,s={name:"initialStates",hash:{},fn:e.program(4,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:6,column:0},end:{line:8,column:18}}},f=typeof l===u?l.call(c,s):l,h(r,"initialStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"regularStates")||(null!=A?h(A,"regularStates"):A))?l:o,s={name:"regularStates",hash:{},fn:e.program(11,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:9,column:0},end:{line:19,column:18}}},f=typeof l===u?l.call(c,s):l,h(r,"regularStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"historyStates")||(null!=A?h(A,"historyStates"):A))?l:o,s={name:"historyStates",hash:{},fn:e.program(27,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:20,column:0},end:{line:22,column:18}}},f=typeof l===u?l.call(c,s):l,h(r,"historyStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"deepHistoryStates")||(null!=A?h(A,"deepHistoryStates"):A))?l:o,s={name:"deepHistoryStates",hash:{},fn:e.program(29,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:23,column:0},end:{line:25,column:22}}},f=typeof l===u?l.call(c,s):l,h(r,"deepHistoryStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"choiceStates")||(null!=A?h(A,"choiceStates"):A))?l:o,s={name:"choiceStates",hash:{},fn:e.program(31,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:26,column:0},end:{line:29,column:17}}},f=typeof l===u?l.call(c,s):l,h(r,"choiceStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"forkjoinStates")||(null!=A?h(A,"forkjoinStates"):A))?l:o,s={name:"forkjoinStates",hash:{},fn:e.program(43,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:30,column:0},end:{line:32,column:19}}},f=typeof l===u?l.call(c,s):l,h(r,"forkjoinStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"junctionStates")||(null!=A?h(A,"junctionStates"):A))?l:o,s={name:"junctionStates",hash:{},fn:e.program(4,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:33,column:0},end:{line:35,column:19}}},f=typeof l===u?l.call(c,s):l,h(r,"junctionStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"terminateStates")||(null!=A?h(A,"terminateStates"):A))?l:o,s={name:"terminateStates",hash:{},fn:e.program(45,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:36,column:0},end:{line:43,column:20}}},f=typeof l===u?l.call(c,s):l,h(r,"terminateStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"finalStates")||(null!=A?h(A,"finalStates"):A))?l:o,s={name:"finalStates",hash:{},fn:e.program(48,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:44,column:0},end:{line:46,column:16}}},f=typeof l===u?l.call(c,s):l,h(r,"finalStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"compositeStates")||(null!=A?h(A,"compositeStates"):A))?l:o,s={name:"compositeStates",hash:{},fn:e.program(50,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:47,column:0},end:{line:61,column:20}}},f=typeof l===u?l.call(c,s):l,h(r,"compositeStates")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"states")||(null!=A?h(A,"states"):A))?l:o,s={name:"states",hash:{},fn:e.program(60,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:62,column:0},end:{line:67,column:11}}},f=typeof l===u?l.call(c,s):l,h(r,"states")||(f=b.call(A,f,s)),null!=f&&(w+=f),w},useData:!0,useDepths:!0})},6070:(e,A,r)=>{var i=r(5631),a=i.template;(i.templates=i.templates||{})["dot.template.hbs"]=a({1:function(e,A,r,i,a,t,n){var f,l,s,c=null!=A?A:e.nullContext||{},o=e.hooks.helperMissing,u="function",b=e.hooks.blockHelperMissing,h=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},w="";return l=null!=(l=h(r,"noteName")||(null!=A?h(A,"noteName"):A))?l:o,s={name:"noteName",hash:{},fn:e.noop,inverse:e.program(2,a,0,t,n),data:a,loc:{start:{line:9,column:2},end:{line:24,column:15}}},f=typeof l===u?l.call(c,s):l,h(r,"noteName")||(f=b.call(A,f,s)),null!=f&&(w+=f),l=null!=(l=h(r,"noteName")||(null!=A?h(A,"noteName"):A))?l:o,s={name:"noteName",hash:{},fn:e.program(17,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:25,column:2},end:{line:35,column:15}}},f=typeof l===u?l.call(c,s):l,h(r,"noteName")||(f=b.call(A,f,s)),null!=f&&(w+=f),w},2:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b="";return n=null!=(n=u(r,"isCompositeSelf")||(null!=A?u(A,"isCompositeSelf"):A))?n:s,f={name:"isCompositeSelf",hash:{},fn:e.noop,inverse:e.program(3,a,0),data:a,loc:{start:{line:10,column:4},end:{line:15,column:24}}},t=typeof n===c?n.call(l,f):n,u(r,"isCompositeSelf")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"isCompositeSelf")||(null!=A?u(A,"isCompositeSelf"):A))?n:s,f={name:"isCompositeSelf",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a,loc:{start:{line:16,column:4},end:{line:23,column:24}}},t=typeof n===c?n.call(l,f):n,u(r,"isCompositeSelf")||(t=o.call(A,t,f)),null!=t&&(b+=t),b},3:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b=' "'+(null!=(t=typeof(n=null!=(n=u(r,"from")||(null!=A?u(A,"from"):A))?n:s)===c?n.call(l,{name:"from",hash:{},data:a,loc:{start:{line:11,column:5},end:{line:11,column:15}}}):n)?t:"")+'" -> "'+(null!=(t=typeof(n=null!=(n=u(r,"to")||(null!=A?u(A,"to"):A))?n:s)===c?n.call(l,{name:"to",hash:{},data:a,loc:{start:{line:11,column:21},end:{line:11,column:29}}}):n)?t:"")+'" [label="';return n=null!=(n=u(r,"label")||(null!=A?u(A,"label"):A))?n:s,f={name:"label",hash:{},fn:e.noop,inverse:e.program(4,a,0),data:a,loc:{start:{line:11,column:39},end:{line:11,column:60}}},t=typeof n===c?n.call(l,f):n,u(r,"label")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=(null!=(t=typeof(n=null!=(n=u(r,"label")||(null!=A?u(A,"label"):A))?n:s)===c?n.call(l,{name:"label",hash:{},data:a,loc:{start:{line:11,column:60},end:{line:11,column:71}}}):n)?t:"")+'"',n=null!=(n=u(r,"fromComposite")||(null!=A?u(A,"fromComposite"):A))?n:s,f={name:"fromComposite",hash:{},fn:e.program(6,a,0),inverse:e.noop,data:a,loc:{start:{line:12,column:28},end:{line:12,column:92}}},t=typeof n===c?n.call(l,f):n,u(r,"fromComposite")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"toComposite")||(null!=A?u(A,"toComposite"):A))?n:s,f={name:"toComposite",hash:{},fn:e.program(8,a,0),inverse:e.noop,data:a,loc:{start:{line:13,column:28},end:{line:13,column:86}}},t=typeof n===c?n.call(l,f):n,u(r,"toComposite")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"color")||(null!=A?u(A,"color"):A))?n:s,f={name:"color",hash:{},fn:e.program(10,a,0),inverse:e.noop,data:a,loc:{start:{line:14,column:28},end:{line:14,column:85}}},t=typeof n===c?n.call(l,f):n,u(r,"color")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+"]\n"},4:function(e,A,r,i,a){return" "},6:function(e,A,r,i,a){var t,n,f=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' ltail="cluster_'+(null!=(t="function"==typeof(n=null!=(n=f(r,"from")||(null!=A?f(A,"from"):A))?n:e.hooks.helperMissing)?n.call(null!=A?A:e.nullContext||{},{name:"from",hash:{},data:a,loc:{start:{line:12,column:63},end:{line:12,column:73}}}):n)?t:"")+'"'},8:function(e,A,r,i,a){var t,n,f=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' lhead="cluster_'+(null!=(t="function"==typeof(n=null!=(n=f(r,"to")||(null!=A?f(A,"to"):A))?n:e.hooks.helperMissing)?n.call(null!=A?A:e.nullContext||{},{name:"to",hash:{},data:a,loc:{start:{line:13,column:61},end:{line:13,column:69}}}):n)?t:"")+'"'},10:function(e,A,r,i,a){var t,n=e.lambda;return' color="'+(null!=(t=n(A,A))?t:"")+'" fontcolor="'+(null!=(t=n(A,A))?t:"")+'"'},12:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b=' "'+(null!=(t=typeof(n=null!=(n=u(r,"from")||(null!=A?u(A,"from"):A))?n:s)===c?n.call(l,{name:"from",hash:{},data:a,loc:{start:{line:17,column:7},end:{line:17,column:17}}}):n)?t:"")+'" -> "self_'+(null!=(t=typeof(n=null!=(n=u(r,"name")||(null!=A?u(A,"name"):A))?n:s)===c?n.call(l,{name:"name",hash:{},data:a,loc:{start:{line:17,column:28},end:{line:17,column:38}}}):n)?t:"")+'" [label="';return n=null!=(n=u(r,"label")||(null!=A?u(A,"label"):A))?n:s,f={name:"label",hash:{},fn:e.noop,inverse:e.program(4,a,0),data:a,loc:{start:{line:17,column:48},end:{line:17,column:69}}},t=typeof n===c?n.call(l,f):n,u(r,"label")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=(null!=(t=typeof(n=null!=(n=u(r,"label")||(null!=A?u(A,"label"):A))?n:s)===c?n.call(l,{name:"label",hash:{},data:a,loc:{start:{line:17,column:69},end:{line:17,column:80}}}):n)?t:"")+'" arrowhead=none',n=null!=(n=u(r,"tailportflags")||(null!=A?u(A,"tailportflags"):A))?n:s,f={name:"tailportflags",hash:{},fn:e.program(13,a,0),inverse:e.noop,data:a,loc:{start:{line:18,column:28},end:{line:18,column:73}}},t=typeof n===c?n.call(l,f):n,u(r,"tailportflags")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=' ltail="cluster_'+(null!=(t=typeof(n=null!=(n=u(r,"from")||(null!=A?u(A,"from"):A))?n:s)===c?n.call(l,{name:"from",hash:{},data:a,loc:{start:{line:18,column:89},end:{line:18,column:99}}}):n)?t:"")+'"',n=null!=(n=u(r,"color")||(null!=A?u(A,"color"):A))?n:s,f={name:"color",hash:{},fn:e.program(10,a,0),inverse:e.noop,data:a,loc:{start:{line:19,column:28},end:{line:19,column:85}}},t=typeof n===c?n.call(l,f):n,u(r,"color")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=']\n "self_'+(null!=(t=typeof(n=null!=(n=u(r,"name")||(null!=A?u(A,"name"):A))?n:s)===c?n.call(l,{name:"name",hash:{},data:a,loc:{start:{line:20,column:12},end:{line:20,column:22}}}):n)?t:"")+'" -> "'+(null!=(t=typeof(n=null!=(n=u(r,"from")||(null!=A?u(A,"from"):A))?n:s)===c?n.call(l,{name:"from",hash:{},data:a,loc:{start:{line:20,column:28},end:{line:20,column:38}}}):n)?t:"")+'" [lhead="cluster_'+(null!=(t=typeof(n=null!=(n=u(r,"from")||(null!=A?u(A,"from"):A))?n:s)===c?n.call(l,{name:"from",hash:{},data:a,loc:{start:{line:20,column:56},end:{line:20,column:66}}}):n)?t:"")+'"',n=null!=(n=u(r,"headportflags")||(null!=A?u(A,"headportflags"):A))?n:s,f={name:"headportflags",hash:{},fn:e.program(13,a,0),inverse:e.noop,data:a,loc:{start:{line:21,column:28},end:{line:21,column:73}}},t=typeof n===c?n.call(l,f):n,u(r,"headportflags")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"color")||(null!=A?u(A,"color"):A))?n:s,f={name:"color",hash:{},fn:e.program(15,a,0),inverse:e.noop,data:a,loc:{start:{line:22,column:28},end:{line:22,column:65}}},t=typeof n===c?n.call(l,f):n,u(r,"color")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+"]\n"},13:function(e,A,r,i,a){var t;return" "+(null!=(t=e.lambda(A,A))?t:"")},15:function(e,A,r,i,a){var t;return' color="'+(null!=(t=e.lambda(A,A))?t:"")+'"'},17:function(e,A,r,i,a,t,n){var f,l=e.lambda,s=e.hooks.blockHelperMissing,c=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' "i_'+(null!=(f=l(A,A))?f:"")+'" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true]\n "'+(null!=(f=l(null!=n[1]?c(n[1],"from"):n[1],A))?f:"")+'" -> "i_'+(null!=(f=l(A,A))?f:"")+'" [arrowhead=none'+(null!=(f=s.call(A,l(null!=n[1]?c(n[1],"fromComposite"):n[1],A),{name:"../fromComposite",hash:{},fn:e.program(18,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:28,column:32},end:{line:28,column:105}}}))?f:"")+(null!=(f=s.call(A,l(null!=n[1]?c(n[1],"color"):n[1],A),{name:"../color",hash:{},fn:e.program(15,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:29,column:32},end:{line:29,column:75}}}))?f:"")+']\n "i_'+(null!=(f=l(A,A))?f:"")+'" -> "'+(null!=(f=l(null!=n[1]?c(n[1],"to"):n[1],A))?f:"")+'" [label="'+(null!=(f=s.call(A,l(null!=n[1]?c(n[1],"label"):n[1],A),{name:"../label",hash:{},fn:e.noop,inverse:e.program(4,a,0,t,n),data:a,loc:{start:{line:30,column:43},end:{line:30,column:70}}}))?f:"")+(null!=(f=l(null!=n[1]?c(n[1],"label"):n[1],A))?f:"")+'"'+(null!=(f=s.call(A,l(null!=n[1]?c(n[1],"toComposite"):n[1],A),{name:"../toComposite",hash:{},fn:e.program(20,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:31,column:32},end:{line:31,column:99}}}))?f:"")+(null!=(f=s.call(A,l(null!=n[1]?c(n[1],"color"):n[1],A),{name:"../color",hash:{},fn:e.program(10,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:32,column:32},end:{line:32,column:95}}}))?f:"")+']\n "i_'+(null!=(f=l(A,A))?f:"")+'" -> "'+(null!=(f=l(A,A))?f:"")+'" [style=dashed arrowtail=none arrowhead=none weight=0]\n "'+(null!=(f=l(A,A))?f:"")+'" [label="'+(null!=(f=l(null!=n[1]?c(n[1],"noteFlattened"):n[1],A))?f:"")+'" shape=note fontsize=10 color=black fontcolor=black fillcolor="#ffffcc" penwidth=1.0]\n'},18:function(e,A,r,i,a,t,n){var f,l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' ltail="cluster_'+(null!=(f=e.lambda(null!=n[1]?l(n[1],"from"):n[1],A))?f:"")+'"'},20:function(e,A,r,i,a,t,n){var f,l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' lhead="cluster_'+(null!=(f=e.lambda(null!=n[1]?l(n[1],"to"):n[1],A))?f:"")+'"'},compiler:[8,">= 4.3.0"],main:function(e,A,r,i,a,t,n){var f,l,s,c=null!=A?A:e.nullContext||{},o=e.hooks.helperMissing,u="function",b=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},h='digraph "state transitions" {\n '+(null!=(f=typeof(l=null!=(l=b(r,"graphAttributes")||(null!=A?b(A,"graphAttributes"):A))?l:o)===u?l.call(c,{name:"graphAttributes",hash:{},data:a,loc:{start:{line:2,column:2},end:{line:2,column:23}}}):l)?f:"")+"\n node ["+(null!=(f=typeof(l=null!=(l=b(r,"nodeAttributes")||(null!=A?b(A,"nodeAttributes"):A))?l:o)===u?l.call(c,{name:"nodeAttributes",hash:{},data:a,loc:{start:{line:3,column:8},end:{line:3,column:28}}}):l)?f:"")+"]\n edge ["+(null!=(f=typeof(l=null!=(l=b(r,"edgeAttributes")||(null!=A?b(A,"edgeAttributes"):A))?l:o)===u?l.call(c,{name:"edgeAttributes",hash:{},data:a,loc:{start:{line:4,column:8},end:{line:4,column:28}}}):l)?f:"")+"]\n\n"+(null!=(f=e.invokePartial(b(i,"dot.states.template.hbs"),A,{name:"dot.states.template.hbs",data:a,indent:" ",helpers:r,partials:i,decorators:e.decorators}))?f:"")+"\n";return l=null!=(l=b(r,"transitions")||(null!=A?b(A,"transitions"):A))?l:o,s={name:"transitions",hash:{},fn:e.program(1,a,0,t,n),inverse:e.noop,data:a,loc:{start:{line:8,column:2},end:{line:36,column:18}}},f=typeof l===u?l.call(c,s):l,b(r,"transitions")||(f=e.hooks.blockHelperMissing.call(A,f,s)),null!=f&&(h+=f),h+"}\n"},usePartial:!0,useData:!0,useDepths:!0})},3047:(e,A,r)=>{const i=r(5631),a=r(467),t=r(7766),n=r(2375),f=r(2502),l=r(4377),s=r(8600),c=r(8578),o=r(6408);let u={};function b(e,A,r,i){return e.filter((e=>e.statemachine)).forEach((e=>{e.statemachine.states=b(e.statemachine.states,A,r,i)})),e.map(l.setLabel).map(l.nameNote).map(l.escapeStateStrings).map(l.flattenNote).map(l.flattenActions).map(l.flagParallelChildren).map(l.tipForkJoinStates(A)).map(l.recolor(r)).map(function(e){return A=>(Object.prototype.hasOwnProperty.call(A,"statemachine")&&(A.nestedExternalSelfTransitions=e.findExternalSelfTransitions(A.name).map((e=>e.name))),A)}(i))}function h(e){return e.initialStates=e.states.filter(l.isType("initial")),e.regularStates=e.states.filter((e=>l.isType("regular")(e)&&!e.statemachine)),e.historyStates=e.states.filter(l.isType("history")),e.deepHistoryStates=e.states.filter(l.isType("deephistory")),e.choiceStates=e.states.filter(l.isType("choice")),e.forkjoinStates=e.states.filter(l.isOneOfTypes(["fork","join","forkjoin"])),e.junctionStates=e.states.filter(l.isType("junction")),e.terminateStates=e.states.filter(l.isType("terminate")),e.finalStates=e.states.filter(l.isType("final")),e.compositeStates=e.states.filter((e=>e.statemachine)),e}function w(e){return e.name=`tr_${e.from}_${e.to}_${u.nextAsString()}`,Boolean(e.note)&&(e.noteName=`note_${e.name}`),e}r(6070),r(9604),i.registerPartial("dot.states.template.hbs",i.templates["dot.states.template.hbs"]),i.registerHelper("stateSection",(e=>i.templates["dot.states.template.hbs"](h(e)))),e.exports=(e,A)=>{A=A||{},u=new c;let r=a(e);const k=new n(r);return r.transitions=(d=k,v=A.direction,d.flattenedTransitions.map(w).map(s.escapeTransitionStrings).map(l.flattenNote).map(function(e){return A=>(e.findStateByName(A.from).statemachine&&(A.fromComposite=!0),e.findStateByName(A.to).statemachine&&(A.toComposite=!0),A)}(d)).map(function(e){return A=>{let r={};return o.isCompositeSelf(e,A)&&(r=e.findStateByName(A.from).hasParent?{hasParent:!0,isCompositeSelf:!0}:{isCompositeSelf:!0}),{...A,...r}}}(d)).map(s.addPorts(v))),r.states=b(r.states,A.direction,A.dotNodeAttrs,k),r=h(r),r.graphAttributes=f.buildGraphAttributes(t.getOptionValue(A,"engine"),t.getOptionValue(A,"direction"),A.dotGraphAttrs),r.nodeAttributes=f.buildNodeAttributes(A.dotNodeAttrs),r.edgeAttributes=f.buildEdgeAttributes(A.dotEdgeAttrs),i.templates["dot.template.hbs"](r);var d,v}},4377:(e,A,r)=>{const i=r(3278),a=r(6408);function t(e){return A=>A.type===e}function n(e){return A=>e.includes(A.type)}e.exports={isType:t,isOneOfTypes:n,setLabel:function(e){return e.label=e.label||e.name,e},nameNote:function(e){return Object.prototype.hasOwnProperty.call(e,"note")&&(e.noteName=`note_${e.name}`),e},flattenActions:function(e){const A={...e};return e.actions&&(A.actions=e.actions.map((e=>{return`${A=e.type,"activity"===A?"":`${A}/ `}${e.body}`;var A}))),A},flattenNote:function(e){return Object.prototype.hasOwnProperty.call(e,"note")&&(e.noteFlattened=e.note.join("")),e},recolor:function(e){return A=>{const r=i((e||[]).find((e=>"color"===e.name)),"value");return r&&!A.color&&n(["initial","fork","join","junction","forkjoin","final"])(A)&&(A.color=r),A}},escapeStateStrings:function(e){return e.note&&(e.note=e.note.map(a.escapeString)),e},tipForkJoinStates:function(e){return A=>n(["fork","join","forkjoin"])(A)?{sizingExtras:a.isVertical(e)?"height=0.1":"width=0.1",...A}:A},flagParallelChildren:function(e){return"parallel"===e.type&&e.statemachine&&e.statemachine.states&&(e.statemachine.states=e.statemachine.states.map((e=>t("regular")(e)?{...e,parentIsParallel:!0}:e))),e}}},8600:(e,A,r)=>{const i=r(6408);e.exports={escapeTransitionStrings:function(e){return e.note&&(e.note=e.note.map(i.escapeString)),e.label&&(e.label=i.escapeLabelString(e.label)),e},addPorts:function(e){return A=>{let r={};return A.isCompositeSelf&&(r=i.isVertical(e)?{tailportflags:'tailport="e" headport="e"',headportflags:'tailport="w"'}:A.hasParent?{tailportflags:'tailport="n" headport="n"',headportflags:'tailport="s"'}:{tailportflags:'tailport="s" headport="s"',headportflags:'tailport="n"'}),{...A,...r}}}}},6408:e=>{e.exports={escapeString:function(e){return e.replace(/\\/g,"\\\\").replace(/\n\s*/g,"\\l").replace(/"/g,'\\"').concat("\\l")},escapeLabelString:function(e){return e.replace(/\\/g,"\\\\").replace(/\n\s*/g," \\l").replace(/"/g,'\\"').concat(" \\l")},isVertical:function(e){const A=e||"top-down";return"top-down"===A||"bottom-top"===A},isCompositeSelf:function(e,A){return A.from===A.to&&e.findStateByName(A.from).statemachine&&!("internal"===A.type)}}},6558:(e,A,r)=>{const i=r(9184),a=r(3047),t=r(5309),n=r(3469),f=r(825);e.exports=function(e){const A={smcat:i,dot:a,svg:t,scjson:n,scxml:f};return Object.prototype.hasOwnProperty.call(A,e)?A[e]:e=>e}},3469:(e,A,r)=>{const i=r(2375),a=r(9376),t=r(8375),n={regular:"state",initial:"initial",final:"final",terminate:"final",parallel:"parallel",history:"history",deephistory:"history"};function f(e){const A={target:a(e.to)};return Boolean(e.event)&&(A.event=t(e.event)),Boolean(e.cond)&&(A.cond=e.cond),Boolean(e.action)&&(A.action=e.action),Boolean(e.type)&&(A.type=e.type),A}function l(e,A,r,i){const a=(t=i,r.filter((e=>e.type===t)).map((e=>e.body)));var t;a.length>0&&(e[A]=(e[A]||[]).concat(a))}function s(e){return e=e||[],A=>{const r={kind:(i=A.type,n[i]||"state"),id:a(A.name)};var i;return"deephistory"===A.type&&(r.type="deep"),function(e,A){Boolean(A.actions)&&(l(e,"onentries",A.actions,"entry"),l(e,"onentries",A.actions,"activity"),l(e,"onexits",A.actions,"exit"))}(r,A),function(e,A,r){const i=r.filter((e=>e.from===A.name)).map(f);i.length>0&&(e.transitions=i)}(r,A,e),function(e,A,r){if(Boolean(A.statemachine)){const i=c(A.statemachine,0,r);e.states=(e.states||[]).concat(i.states),i.initial&&(e.initial=i.initial)}}(r,A,e),r}}function c(e,A,r){const t=function(e){let A=null;const r=e.states.filter((e=>"initial"===e.type));return r.length>0&&(A=r[0].name),A}(e),n=function(e,A){let r=A;if(A&&e.transitions){const i=e.transitions.filter((e=>e.from===A));i.length>0&&!i[0].action&&(r=i[0].to)}return r}(e,t),f={states:e.states.filter((e=>!n||n===t||"initial"!==e.type)).map(s(r||new i(e).flattenedTransitions))};return n&&(f.initial=a(n)),f}e.exports=c},8375:e=>{const A=/[\u00B7|\u0300-\u036F|\u203F-\u2040|\u0000-\u0029|\u002B-\u002C|\u002F|\u003B-\u0040|\u005B-\u0060|\u007B-\u00BF|\u00D7|\u00F7|\u0300-\u036F|\u037E|\u2000-\u200B|\u200E-\u206F|\u2190-\u2BFF|\u2FF0-\u3000|\uD800-\uF8FF|\uFDD0-\uFDEF|\uFFFE-\uFFFF]/g,r=/[.]/g;function i(e){return e.replace(A,"_")}function a(e){return function(e){let A=i(e);return A.match(r)&&(A=`_${e}`),A}((e=e.replace(/\s+/g," ").trim())[0]).concat(i(e.slice(1)))}e.exports=e=>0===(e=e||"").length?"empty":e.split(/[\n\r]+/).filter((e=>e.length>0)).map(a).join(" ")},9376:e=>{const A=/[\u0000-\u002C|\u002F|\u003B-\u0040|\u005B-\u0060|\u007B-\u00BF|\u00D7|\u00F7|\u0300-\u036F|\u037E|\u2000-\u200B|\u200E-\u206F|\u2190-\u2BFF|\u2FF0-\u3000|\uD800-\uF8FF|\uFDD0-\uFDEF|\uFFFE-\uFFFF]/g,r=/[-|.|0-9|\u00B7|\u0300-\u036F|\u203F-\u2040]/g;function i(e){return e.replace(A,"_")}e.exports=e=>0===(e=e||"").length?"__empty":function(e){let A=i(e);return A.match(r)&&(A=`_${e}`),A}(e[0]).concat(i(e.slice(1)))},825:(e,A,r)=>{const i=r(5631),a=r(3469);r(2270),r(9145),i.registerPartial("scxml.states.template.hbs",i.templates["scxml.states.template.hbs"]),e.exports=e=>i.templates["scxml.template.hbs"](a(e))},9145:(e,A,r)=>{var i=r(5631),a=i.template;(i.templates=i.templates||{})["scxml.states.template.hbs"]=a({1:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.hooks.helperMissing,s="function",c=e.escapeExpression,o=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return" <"+c(typeof(n=null!=(n=o(r,"kind")||(null!=A?o(A,"kind"):A))?n:l)===s?n.call(f,{name:"kind",hash:{},data:a,loc:{start:{line:2,column:5},end:{line:2,column:13}}}):n)+' id="'+c(typeof(n=null!=(n=o(r,"id")||(null!=A?o(A,"id"):A))?n:l)===s?n.call(f,{name:"id",hash:{},data:a,loc:{start:{line:2,column:18},end:{line:2,column:24}}}):n)+'"'+(null!=(t=o(r,"if").call(f,null!=A?o(A,"initial"):A,{name:"if",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a,loc:{start:{line:2,column:25},end:{line:2,column:69}}}))?t:"")+(null!=(t=o(r,"if").call(f,null!=A?o(A,"type"):A,{name:"if",hash:{},fn:e.program(4,a,0),inverse:e.noop,data:a,loc:{start:{line:2,column:69},end:{line:2,column:104}}}))?t:"")+">\n"+(null!=(t=e.invokePartial(o(i,"scxml.states.template.hbs"),A,{name:"scxml.states.template.hbs",data:a,indent:" ",helpers:r,partials:i,decorators:e.decorators}))?t:"")+(null!=(t=o(r,"each").call(f,null!=A?o(A,"onentries"):A,{name:"each",hash:{},fn:e.program(6,a,0),inverse:e.noop,data:a,loc:{start:{line:4,column:4},end:{line:6,column:13}}}))?t:"")+(null!=(t=o(r,"each").call(f,null!=A?o(A,"onexits"):A,{name:"each",hash:{},fn:e.program(8,a,0),inverse:e.noop,data:a,loc:{start:{line:7,column:4},end:{line:9,column:13}}}))?t:"")+(null!=(t=o(r,"each").call(f,null!=A?o(A,"transitions"):A,{name:"each",hash:{},fn:e.program(10,a,0),inverse:e.noop,data:a,loc:{start:{line:10,column:4},end:{line:18,column:13}}}))?t:"")+" \n"},2:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' initial="'+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"initial")||(null!=A?n(A,"initial"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"initial",hash:{},data:a,loc:{start:{line:2,column:50},end:{line:2,column:61}}}):t)+'"'},4:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return' type="'+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"type")||(null!=A?n(A,"type"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"type",hash:{},data:a,loc:{start:{line:2,column:88},end:{line:2,column:96}}}):t)+'"'},6:function(e,A,r,i,a){return" "+e.escapeExpression(e.lambda(A,A))+"\n"},8:function(e,A,r,i,a){return" "+e.escapeExpression(e.lambda(A,A))+"\n"},10:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return null!=(t=n(r,"if").call(null!=A?A:e.nullContext||{},null!=A?n(A,"action"):A,{name:"if",hash:{},fn:e.program(11,a,0),inverse:e.program(18,a,0),data:a,loc:{start:{line:11,column:8},end:{line:17,column:15}}}))?t:""},11:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.hooks.helperMissing,s="function",c=e.escapeExpression,o=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return" \n '+c(typeof(n=null!=(n=o(r,"action")||(null!=A?o(A,"action"):A))?n:l)===s?n.call(f,{name:"action",hash:{},data:a,loc:{start:{line:13,column:12},end:{line:13,column:22}}}):n)+"\n \n"},12:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'event="'+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"event")||(null!=A?n(A,"event"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"event",hash:{},data:a,loc:{start:{line:12,column:40},end:{line:12,column:49}}}):t)+'" '},14:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'cond="'+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"cond")||(null!=A?n(A,"cond"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"cond",hash:{},data:a,loc:{start:{line:12,column:76},end:{line:12,column:84}}}):t)+'" '},16:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'type="'+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"type")||(null!=A?n(A,"type"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"type",hash:{},data:a,loc:{start:{line:12,column:111},end:{line:12,column:119}}}):t)+'" '},18:function(e,A,r,i,a){var t,n,f=null!=A?A:e.nullContext||{},l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return" \n'},compiler:[8,">= 4.3.0"],main:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return null!=(t=n(r,"each").call(null!=A?A:e.nullContext||{},null!=A?n(A,"states"):A,{name:"each",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a,loc:{start:{line:1,column:0},end:{line:20,column:9}}}))?t:""},usePartial:!0,useData:!0})},2270:(e,A,r)=>{var i=r(5631),a=i.template;(i.templates=i.templates||{})["scxml.template.hbs"]=a({1:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'initial="'+e.escapeExpression("function"==typeof(t=null!=(t=n(r,"initial")||(null!=A?n(A,"initial"):A))?t:e.hooks.helperMissing)?t.call(null!=A?A:e.nullContext||{},{name:"initial",hash:{},data:a,loc:{start:{line:2,column:71},end:{line:2,column:82}}}):t)+'" '},compiler:[8,">= 4.3.0"],main:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return'\n\n'+(null!=(t=e.invokePartial(n(i,"scxml.states.template.hbs"),A,{name:"scxml.states.template.hbs",data:a,helpers:r,partials:i,decorators:e.decorators}))?t:"")+"\n"},usePartial:!0,useData:!0})},9184:(e,A,r)=>{const i=r(5631),a=r(467);r(3939);const t=/;|,|{| |\[/,n=/;|,|{/,f=/;|{/;function l(e,A){return e.test(A)?`"${A}"`:A}function s(e){const A={...e};return A.actions=(e.actions||[]).map((e=>{return`${A=e.type,"activity"===A?"":`${A}/ `}${e.body}`;var A})).join("\n "),A}function c(e){return(Object.prototype.hasOwnProperty.call(e,"label")||Object.prototype.hasOwnProperty.call(e,"type")&&Object.prototype.hasOwnProperty.call(e,"typeExplicitlySet")||Object.prototype.hasOwnProperty.call(e,"color")||Object.prototype.hasOwnProperty.call(e,"active"))&&(e.hasExtendedAttributes=!0),e}function o(e,A){return e.map(c).filter((e=>e.statemachine)).forEach((e=>{e.statemachine.states=o(e.statemachine.states,A)})),e.map(s)}function u(e){return(Object.prototype.hasOwnProperty.call(e,"type")||Object.prototype.hasOwnProperty.call(e,"color"))&&(e.hasExtendedAttributes=!0),e}i.registerPartial("smcat.template.hbs",i.templates["smcat.template.hbs"]),i.registerHelper("quotifyState",(e=>l(t,e))),i.registerHelper("quotifyLabel",(e=>l(f,e))),i.registerHelper("quotifyActions",(e=>l(n,e))),e.exports=e=>{return i.templates["smcat.template.hbs"]({...e,states:o(a(e.states)),transitions:(A=a(e.transitions||[]),A.map(u))});var A}},3939:(e,A,r)=>{var i=r(5631),a=i.template;(i.templates=i.templates||{})["smcat.template.hbs"]=a({1:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b="";return n=null!=(n=u(r,"note")||(null!=A?u(A,"note"):A))?n:s,f={name:"note",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a,loc:{start:{line:2,column:0},end:{line:4,column:9}}},t=typeof n===c?n.call(l,f):n,u(r,"note")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=null!=(t=(u(r,"quotifyState")||A&&u(A,"quotifyState")||s).call(l,null!=A?u(A,"name"):A,{name:"quotifyState",hash:{},fn:e.program(4,a,0),inverse:e.noop,data:a,loc:{start:{line:5,column:0},end:{line:5,column:40}}}))?t:"",n=null!=(n=u(r,"hasExtendedAttributes")||(null!=A?u(A,"hasExtendedAttributes"):A))?n:s,f={name:"hasExtendedAttributes",hash:{},fn:e.program(6,a,0),inverse:e.noop,data:a,loc:{start:{line:6,column:4},end:{line:6,column:234}}},t=typeof n===c?n.call(l,f):n,u(r,"hasExtendedAttributes")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=null!=(t=u(r,"if").call(l,null!=A?u(A,"actions"):A,{name:"if",hash:{},fn:e.program(16,a,0),inverse:e.noop,data:a,loc:{start:{line:7,column:4},end:{line:7,column:28}}}))?t:"",n=null!=(n=u(r,"actions")||(null!=A?u(A,"actions"):A))?n:s,f={name:"actions",hash:{},fn:e.program(18,a,0),inverse:e.noop,data:a,loc:{start:{line:7,column:28},end:{line:7,column:93}}},t=typeof n===c?n.call(l,f):n,u(r,"actions")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"statemachine")||(null!=A?u(A,"statemachine"):A))?n:s,f={name:"statemachine",hash:{},fn:e.program(20,a,0),inverse:e.noop,data:a,loc:{start:{line:8,column:4},end:{line:10,column:19}}},t=typeof n===c?n.call(l,f):n,u(r,"statemachine")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+(null!=(t=u(r,"if").call(l,a&&u(a,"last"),{name:"if",hash:{},fn:e.program(22,a,0),inverse:e.program(24,a,0),data:a,loc:{start:{line:11,column:0},end:{line:11,column:30}}}))?t:"")+"\n"},2:function(e,A,r,i,a){var t;return"# "+(null!=(t=e.lambda(A,A))?t:"")+"\n"},4:function(e,A,r,i,a){return""},6:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b=" [";return n=null!=(n=u(r,"typeExplicitlySet")||(null!=A?u(A,"typeExplicitlySet"):A))?n:s,f={name:"typeExplicitlySet",hash:{},fn:e.program(7,a,0),inverse:e.noop,data:a,loc:{start:{line:6,column:32},end:{line:6,column:107}}},t=typeof n===c?n.call(l,f):n,u(r,"typeExplicitlySet")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"label")||(null!=A?u(A,"label"):A))?n:s,f={name:"label",hash:{},fn:e.program(10,a,0),inverse:e.noop,data:a,loc:{start:{line:6,column:107},end:{line:6,column:142}}},t=typeof n===c?n.call(l,f):n,u(r,"label")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"color")||(null!=A?u(A,"color"):A))?n:s,f={name:"color",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a,loc:{start:{line:6,column:142},end:{line:6,column:178}}},t=typeof n===c?n.call(l,f):n,u(r,"color")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+(null!=(t=u(r,"if").call(l,null!=A?u(A,"active"):A,{name:"if",hash:{},fn:e.program(14,a,0),inverse:e.noop,data:a,loc:{start:{line:6,column:178},end:{line:6,column:206}}}))?t:"")+"]"},7:function(e,A,r,i,a){var t,n,f,l=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return n=null!=(n=l(r,"type")||(null!=A?l(A,"type"):A))?n:e.hooks.helperMissing,f={name:"type",hash:{},fn:e.program(8,a,0),inverse:e.noop,data:a,loc:{start:{line:6,column:54},end:{line:6,column:85}}},t="function"==typeof n?n.call(null!=A?A:e.nullContext||{},f):n,l(r,"type")||(t=e.hooks.blockHelperMissing.call(A,t,f)),null!=t?t:""},8:function(e,A,r,i,a){var t;return"type="+(null!=(t=e.lambda(A,A))?t:"")+" "},10:function(e,A,r,i,a){var t;return'label="'+(null!=(t=e.lambda(A,A))?t:"")+'"'},12:function(e,A,r,i,a){var t;return' color="'+(null!=(t=e.lambda(A,A))?t:"")+'"'},14:function(e,A,r,i,a){return" active"},16:function(e,A,r,i,a){return": "},18:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return null!=(t=(n(r,"quotifyActions")||A&&n(A,"quotifyActions")||e.hooks.helperMissing).call(null!=A?A:e.nullContext||{},A,{name:"quotifyActions",hash:{},fn:e.program(4,a,0),inverse:e.noop,data:a,loc:{start:{line:7,column:40},end:{line:7,column:80}}}))?t:""},20:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return" {\n"+(null!=(t=e.invokePartial(n(i,"smcat.template.hbs"),A,{name:"smcat.template.hbs",data:a,indent:" ",helpers:r,partials:i,decorators:e.decorators}))?t:"")+"}"},22:function(e,A,r,i,a){return";"},24:function(e,A,r,i,a){return","},26:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b="";return n=null!=(n=u(r,"note")||(null!=A?u(A,"note"):A))?n:s,f={name:"note",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a,loc:{start:{line:15,column:0},end:{line:17,column:9}}},t=typeof n===c?n.call(l,f):n,u(r,"note")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+=(null!=(t=(u(r,"quotifyState")||A&&u(A,"quotifyState")||s).call(l,null!=A?u(A,"from"):A,{name:"quotifyState",hash:{},fn:e.program(4,a,0),inverse:e.noop,data:a,loc:{start:{line:18,column:0},end:{line:18,column:39}}}))?t:"")+" => "+(null!=(t=(u(r,"quotifyState")||A&&u(A,"quotifyState")||s).call(l,null!=A?u(A,"to"):A,{name:"quotifyState",hash:{},fn:e.program(4,a,0),inverse:e.noop,data:a,loc:{start:{line:18,column:43},end:{line:18,column:81}}}))?t:""),n=null!=(n=u(r,"hasExtendedAttributes")||(null!=A?u(A,"hasExtendedAttributes"):A))?n:s,f={name:"hasExtendedAttributes",hash:{},fn:e.program(27,a,0),inverse:e.noop,data:a,loc:{start:{line:19,column:4},end:{line:19,column:130}}},t=typeof n===c?n.call(l,f):n,u(r,"hasExtendedAttributes")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"label")||(null!=A?u(A,"label"):A))?n:s,f={name:"label",hash:{},fn:e.program(32,a,0),inverse:e.noop,data:a,loc:{start:{line:20,column:4},end:{line:20,column:62}}},t=typeof n===c?n.call(l,f):n,u(r,"label")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+";\n"},27:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.hooks.helperMissing,c="function",o=e.hooks.blockHelperMissing,u=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},b=" [";return n=null!=(n=u(r,"color")||(null!=A?u(A,"color"):A))?n:s,f={name:"color",hash:{},fn:e.program(28,a,0),inverse:e.noop,data:a,loc:{start:{line:19,column:32},end:{line:19,column:68}}},t=typeof n===c?n.call(l,f):n,u(r,"color")||(t=o.call(A,t,f)),null!=t&&(b+=t),n=null!=(n=u(r,"type")||(null!=A?u(A,"type"):A))?n:s,f={name:"type",hash:{},fn:e.program(30,a,0),inverse:e.noop,data:a,loc:{start:{line:19,column:69},end:{line:19,column:102}}},t=typeof n===c?n.call(l,f):n,u(r,"type")||(t=o.call(A,t,f)),null!=t&&(b+=t),b+"]"},28:function(e,A,r,i,a){var t;return'color="'+(null!=(t=e.lambda(A,A))?t:"")+'"'},30:function(e,A,r,i,a){var t;return" type="+(null!=(t=e.lambda(A,A))?t:"")},32:function(e,A,r,i,a){var t,n=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]};return": "+(null!=(t=(n(r,"quotifyLabel")||A&&n(A,"quotifyLabel")||e.hooks.helperMissing).call(null!=A?A:e.nullContext||{},A,{name:"quotifyLabel",hash:{},fn:e.program(4,a,0),inverse:e.noop,data:a,loc:{start:{line:20,column:16},end:{line:20,column:52}}}))?t:"")},compiler:[8,">= 4.3.0"],main:function(e,A,r,i,a){var t,n,f,l=null!=A?A:e.nullContext||{},s=e.lookupProperty||function(e,A){if(Object.prototype.hasOwnProperty.call(e,A))return e[A]},c=(null!=(t=s(r,"each").call(l,null!=A?s(A,"states"):A,{name:"each",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a,loc:{start:{line:1,column:0},end:{line:12,column:9}}}))?t:"")+"\n";return n=null!=(n=s(r,"transitions")||(null!=A?s(A,"transitions"):A))?n:e.hooks.helperMissing,f={name:"transitions",hash:{},fn:e.program(26,a,0),inverse:e.noop,data:a,loc:{start:{line:14,column:0},end:{line:21,column:16}}},t="function"==typeof n?n.call(l,f):n,s(r,"transitions")||(t=e.hooks.blockHelperMissing.call(A,t,f)),null!=t&&(c+=t),c},usePartial:!0,useData:!0})},5309:(e,A,r)=>{const i=r(6780),a=r(7766),t=r(3047),n="function"==typeof i?i:Viz;e.exports=(e,A)=>n(t(e,A),{engine:a.getOptionValue(A,"engine")})},2375:e=>{function A(e,r=!1){let i=[];return e.filter((e=>Boolean(e.statemachine))).forEach((e=>{Object.prototype.hasOwnProperty.call(e.statemachine,"states")&&(i=i.concat(A(e.statemachine.states,!0)))})),i.concat(e.map((e=>({name:e.name,type:e.type,statemachine:Boolean(e.statemachine),hasParent:r}))))}function r(e){let A=[];return Object.prototype.hasOwnProperty.call(e,"transitions")&&(A=e.transitions),Object.prototype.hasOwnProperty.call(e,"states")&&e.states.filter((e=>Boolean(e.statemachine))).forEach((e=>{A=A.concat(r(e.statemachine))})),A}e.exports=class{constructor(e){this._flattenedStates=A(e.states||[]),this._flattenedTransitions=r(e)}get flattenedTransitions(){return this._flattenedTransitions}findStateByName(e){return this._flattenedStates.find((A=>A.name===e))}findStatesByTypes(e){return this._flattenedStates.filter((A=>e.some((e=>A.type===e))))}findExternalSelfTransitions(e){return this._flattenedTransitions.filter((A=>A.from===e&&A.to===e&&"internal"!==A.type))}findTransitionsByFrom(e){return this._flattenedTransitions.filter((A=>A.from===e))}findTransitionsByTo(e){return this._flattenedTransitions.filter((A=>A.to===e))}}},1514:(e,A,r)=>{const i=r(467),a=r(3020),t=r(2375),n=r(4851);function f(e,A,r){const a=i(e);return a.transitions&&A.length>0&&(a.transitions=function(e,A,r){return e.reduce(((e,i)=>(A.forEach(((A,a)=>{e=A===i.to&&r[A]?e.concat(r[A].map((e=>function(e,A){const r={...e,...A,from:e.from,to:A.to};var i,a;return A.action&&(r.action=(i=e.action,a=A.action,i?`${i}\n${a}`:a)),(r.event||r.cond||r.action)&&(r.label=n.formatLabel(r.event,r.cond,r.action)),r}(i,e)))):0===a?e.concat(i):e})),e)),[])}(a.transitions,A,r)),a.states=a.states.map((e=>e.statemachine?{...e,statemachine:f(e.statemachine,A,r)}:e)),a}function l(e,A){const r=i(e);return r.transitions&&(r.transitions=a(r.transitions,(e=>A.some((A=>A===e.from||A===e.to))))),r.states=a(r.states,(e=>A.some((A=>A===e.name)))).map((e=>e.statemachine?{...e,statemachine:l(e.statemachine,A)}:e)),r}e.exports=(e,A=["fork","junction","choice"])=>{const r=new t(e),i=r.findStatesByTypes(A).map((e=>e.name)),a=i.reduce(((e,A)=>(e[A]=r.findTransitionsByFrom(A),e)),{});return l(f(e,i,a),i)}},4851:e=>{e.exports={formatLabel:function(e,A,r){let i="";return e&&(i+=e),A&&(i+=` [${A}]`),r&&(i+=`/ ${r}`),i.trim()}}},5980:function(e,A){!function(e){"use strict";function A(){for(var e=arguments.length,A=Array(e),r=0;r1){A[0]=A[0].slice(0,-1);for(var i=A.length-1,a=1;a= 0x80 (not a basic code point)","invalid-input":"Invalid input"},w=Math.floor,k=String.fromCharCode;function d(e){throw new RangeError(h[e])}function v(e,A){var r=e.split("@"),i="";return r.length>1&&(i=r[0]+"@",e=r[1]),i+function(e,A){for(var r=[],i=e.length;i--;)r[i]=A(e[i]);return r}((e=e.replace(b,".")).split("."),A).join(".")}function g(e){for(var A=[],r=0,i=e.length;r=55296&&a<=56319&&r>1,e+=w(e/A);e>455;i+=c)e=w(e/35);return w(i+36*e/(e+38))},E=function(e){var A,r=[],i=e.length,a=0,t=128,n=72,f=e.lastIndexOf("-");f<0&&(f=0);for(var l=0;l=128&&d("not-basic"),r.push(e.charCodeAt(l));for(var o=f>0?f+1:0;o=i&&d("invalid-input");var k=(A=e.charCodeAt(o++))-48<10?A-22:A-65<26?A-65:A-97<26?A-97:c;(k>=c||k>w((s-a)/b))&&d("overflow"),a+=k*b;var v=h<=n?1:h>=n+26?26:h-n;if(kw(s/g)&&d("overflow"),b*=g}var m=r.length+1;n=p(a-u,m,0==u),w(a/m)>s-t&&d("overflow"),t+=w(a/m),a%=m,r.splice(a++,0,t)}return String.fromCodePoint.apply(String,r)},B=function(e){var A=[],r=(e=g(e)).length,i=128,a=0,t=72,n=!0,f=!1,l=void 0;try{for(var o,u=e[Symbol.iterator]();!(n=(o=u.next()).done);n=!0){var b=o.value;b<128&&A.push(k(b))}}catch(e){f=!0,l=e}finally{try{!n&&u.return&&u.return()}finally{if(f)throw l}}var h=A.length,v=h;for(h&&A.push("-");v=i&&Gw((s-a)/L)&&d("overflow"),a+=(E-i)*L,i=E;var Q=!0,D=!1,z=void 0;try{for(var W,Y=e[Symbol.iterator]();!(Q=(W=Y.next()).done);Q=!0){var F=W.value;if(Fs&&d("overflow"),F==i){for(var M=a,V=c;;V+=c){var N=V<=t?1:V>=t+26?26:V-t;if(M>6|192).toString(16).toUpperCase()+"%"+(63&A|128).toString(16).toUpperCase():"%"+(A>>12|224).toString(16).toUpperCase()+"%"+(A>>6&63|128).toString(16).toUpperCase()+"%"+(63&A|128).toString(16).toUpperCase()}function G(e){for(var A="",r=0,i=e.length;r=194&&a<224){if(i-r>=6){var t=parseInt(e.substr(r+4,2),16);A+=String.fromCharCode((31&a)<<6|63&t)}else A+=e.substr(r,6);r+=6}else if(a>=224){if(i-r>=9){var n=parseInt(e.substr(r+4,2),16),f=parseInt(e.substr(r+7,2),16);A+=String.fromCharCode((15&a)<<12|(63&n)<<6|63&f)}else A+=e.substr(r,9);r+=9}else A+=e.substr(r,3),r+=3}return A}function L(e,A){function r(e){var r=G(e);return r.match(A.UNRESERVED)?r:e}return e.scheme&&(e.scheme=String(e.scheme).replace(A.PCT_ENCODED,r).toLowerCase().replace(A.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(A.PCT_ENCODED,r).replace(A.NOT_USERINFO,Z).replace(A.PCT_ENCODED,a)),void 0!==e.host&&(e.host=String(e.host).replace(A.PCT_ENCODED,r).toLowerCase().replace(A.NOT_HOST,Z).replace(A.PCT_ENCODED,a)),void 0!==e.path&&(e.path=String(e.path).replace(A.PCT_ENCODED,r).replace(e.scheme?A.NOT_PATH:A.NOT_PATH_NOSCHEME,Z).replace(A.PCT_ENCODED,a)),void 0!==e.query&&(e.query=String(e.query).replace(A.PCT_ENCODED,r).replace(A.NOT_QUERY,Z).replace(A.PCT_ENCODED,a)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(A.PCT_ENCODED,r).replace(A.NOT_FRAGMENT,Z).replace(A.PCT_ENCODED,a)),e}function Q(e){return e.replace(/^0*(.*)/,"$1")||"0"}function D(e,A){var r=e.match(A.IPV4ADDRESS)||[],i=l(r,2)[1];return i?i.split(".").map(Q).join("."):e}function z(e,A){var r=e.match(A.IPV6ADDRESS)||[],i=l(r,3),a=i[1],t=i[2];if(a){for(var n=a.toLowerCase().split("::").reverse(),f=l(n,2),s=f[0],c=f[1],o=c?c.split(":").map(Q):[],u=s.split(":").map(Q),b=A.IPV4ADDRESS.test(u[u.length-1]),h=b?7:8,w=u.length-h,k=Array(h),d=0;d1){var m=k.slice(0,v.index),p=k.slice(v.index+v.length);g=m.join(":")+"::"+p.join(":")}else g=k.join(":");return t&&(g+="%"+t),g}return e}var W=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Y=void 0==="".match(/(){0}/)[1];function F(e){var A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={},i=!1!==A.iri?f:n;"suffix"===A.reference&&(e=(A.scheme?A.scheme+":":"")+"//"+e);var a=e.match(W);if(a){Y?(r.scheme=a[1],r.userinfo=a[3],r.host=a[4],r.port=parseInt(a[5],10),r.path=a[6]||"",r.query=a[7],r.fragment=a[8],isNaN(r.port)&&(r.port=a[5])):(r.scheme=a[1]||void 0,r.userinfo=-1!==e.indexOf("@")?a[3]:void 0,r.host=-1!==e.indexOf("//")?a[4]:void 0,r.port=parseInt(a[5],10),r.path=a[6]||"",r.query=-1!==e.indexOf("?")?a[7]:void 0,r.fragment=-1!==e.indexOf("#")?a[8]:void 0,isNaN(r.port)&&(r.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?a[4]:void 0)),r.host&&(r.host=z(D(r.host,i),i)),void 0!==r.scheme||void 0!==r.userinfo||void 0!==r.host||void 0!==r.port||r.path||void 0!==r.query?void 0===r.scheme?r.reference="relative":void 0===r.fragment?r.reference="absolute":r.reference="uri":r.reference="same-document",A.reference&&"suffix"!==A.reference&&A.reference!==r.reference&&(r.error=r.error||"URI is not a "+A.reference+" reference.");var t=I[(A.scheme||r.scheme||"").toLowerCase()];if(A.unicodeSupport||t&&t.unicodeSupport)L(r,i);else{if(r.host&&(A.domainHost||t&&t.domainHost))try{r.host=y(r.host.replace(i.PCT_ENCODED,G).toLowerCase())}catch(e){r.error=r.error||"Host's domain name can not be converted to ASCII via punycode: "+e}L(r,n)}t&&t.parse&&t.parse(r,A)}else r.error=r.error||"URI can not be parsed.";return r}function M(e,A){var r=!1!==A.iri?f:n,i=[];return void 0!==e.userinfo&&(i.push(e.userinfo),i.push("@")),void 0!==e.host&&i.push(z(D(String(e.host),r),r).replace(r.IPV6ADDRESS,(function(e,A,r){return"["+A+(r?"%25"+r:"")+"]"}))),"number"!=typeof e.port&&"string"!=typeof e.port||(i.push(":"),i.push(String(e.port))),i.length?i.join(""):void 0}var V=/^\.\.?\//,N=/^\/\.(\/|$)/,R=/^\/\.\.(\/|$)/,x=/^\/?(?:.|\n)*?(?=\/|$)/;function J(e){for(var A=[];e.length;)if(e.match(V))e=e.replace(V,"");else if(e.match(N))e=e.replace(N,"/");else if(e.match(R))e=e.replace(R,"/"),A.pop();else if("."===e||".."===e)e="";else{var r=e.match(x);if(!r)throw new Error("Unexpected dot segment condition");var i=r[0];e=e.slice(i.length),A.push(i)}return A.join("")}function H(e){var A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=A.iri?f:n,i=[],a=I[(A.scheme||e.scheme||"").toLowerCase()];if(a&&a.serialize&&a.serialize(e,A),e.host)if(r.IPV6ADDRESS.test(e.host));else if(A.domainHost||a&&a.domainHost)try{e.host=A.iri?C(e.host):y(e.host.replace(r.PCT_ENCODED,G).toLowerCase())}catch(r){e.error=e.error||"Host's domain name can not be converted to "+(A.iri?"Unicode":"ASCII")+" via punycode: "+r}L(e,r),"suffix"!==A.reference&&e.scheme&&(i.push(e.scheme),i.push(":"));var t=M(e,A);if(void 0!==t&&("suffix"!==A.reference&&i.push("//"),i.push(t),e.path&&"/"!==e.path.charAt(0)&&i.push("/")),void 0!==e.path){var l=e.path;A.absolutePath||a&&a.absolutePath||(l=J(l)),void 0===t&&(l=l.replace(/^\/\//,"/%2F")),i.push(l)}return void 0!==e.query&&(i.push("?"),i.push(e.query)),void 0!==e.fragment&&(i.push("#"),i.push(e.fragment)),i.join("")}function P(e,A){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i={};return arguments[3]||(e=F(H(e,r),r),A=F(H(A,r),r)),!(r=r||{}).tolerant&&A.scheme?(i.scheme=A.scheme,i.userinfo=A.userinfo,i.host=A.host,i.port=A.port,i.path=J(A.path||""),i.query=A.query):(void 0!==A.userinfo||void 0!==A.host||void 0!==A.port?(i.userinfo=A.userinfo,i.host=A.host,i.port=A.port,i.path=J(A.path||""),i.query=A.query):(A.path?("/"===A.path.charAt(0)?i.path=J(A.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?i.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+A.path:i.path=A.path:i.path="/"+A.path,i.path=J(i.path)),i.query=A.query):(i.path=e.path,void 0!==A.query?i.query=A.query:i.query=e.query),i.userinfo=e.userinfo,i.host=e.host,i.port=e.port),i.scheme=e.scheme),i.fragment=A.fragment,i}function X(e,A){return e&&e.toString().replace(A&&A.iri?f.PCT_ENCODED:n.PCT_ENCODED,G)}var S={scheme:"http",domainHost:!0,parse:function(e,A){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,A){var r="https"===String(e.scheme).toLowerCase();return e.port!==(r?443:80)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},j={scheme:"https",domainHost:S.domainHost,parse:S.parse,serialize:S.serialize};function U(e){return"boolean"==typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}var T={scheme:"ws",domainHost:!0,parse:function(e,A){var r=e;return r.secure=U(r),r.resourceName=(r.path||"/")+(r.query?"?"+r.query:""),r.path=void 0,r.query=void 0,r},serialize:function(e,A){if(e.port!==(U(e)?443:80)&&""!==e.port||(e.port=void 0),"boolean"==typeof e.secure&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){var r=e.resourceName.split("?"),i=l(r,2),a=i[0],t=i[1];e.path=a&&"/"!==a?a:void 0,e.query=t,e.resourceName=void 0}return e.fragment=void 0,e}},O={scheme:"wss",domainHost:T.domainHost,parse:T.parse,serialize:T.serialize},_={},q="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",K="[0-9A-Fa-f]",$=r(r("%[EFef][0-9A-Fa-f]%"+K+K+"%"+K+K)+"|"+r("%[89A-Fa-f][0-9A-Fa-f]%"+K+K)+"|"+r("%"+K+K)),ee=A("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),Ae=new RegExp(q,"g"),re=new RegExp($,"g"),ie=new RegExp(A("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',ee),"g"),ae=new RegExp(A("[^]",q,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),te=ae;function ne(e){var A=G(e);return A.match(Ae)?A:e}var fe={scheme:"mailto",parse:function(e,A){var r=e,i=r.to=r.path?r.path.split(","):[];if(r.path=void 0,r.query){for(var a=!1,t={},n=r.query.split("&"),f=0,l=n.length;f\n\n'});return"png-image-element"==t?i.svgXmlToPngImageElement(a(e,"svg",n,l,s),f):a(e,t,n,l,s)}function a(A,i,a,t,n){var f,l=function(A){A=void 0!==(A=A||{})?A:{};var i,a={};for(i in A)A.hasOwnProperty(i)&&(a[i]=A[i]);A.arguments=[],A.thisProgram="./this.program",A.quit=function(e,A){throw A},A.preRun=[],A.postRun=[];var t,n,f=!1,l=!1,s=!1,c=!1;if(A.ENVIRONMENT)if("WEB"===A.ENVIRONMENT)f=!0;else if("WORKER"===A.ENVIRONMENT)l=!0;else if("NODE"===A.ENVIRONMENT)s=!0;else{if("SHELL"!==A.ENVIRONMENT)throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.");c=!0}else f="object"==typeof window,l="function"==typeof importScripts,s="object"==typeof process&&!f&&!l,c=!f&&!s&&!l;for(i in s?(A.read=function(e,A){var i;return(i=UA(e))||(t||(t=r(5747)),n||(n=r(5622)),e=n.normalize(e),i=t.readFileSync(e)),A?i:i.toString()},A.readBinary=function(e){var r=A.read(e,!0);return r.buffer||(r=new Uint8Array(r)),v(r.buffer),r},process.argv.length>1&&(A.thisProgram=process.argv[1].replace(/\\/g,"/")),A.arguments=process.argv.slice(2),e.exports=A,process.on("uncaughtException",(function(e){if(!(e instanceof Lr))throw e})),process.on("unhandledRejection",(function(e,A){process.exit(1)})),A.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(A.read=function(e){var A=UA(e);return A?XA(A):read(e)}),A.readBinary=function(e){var A;return(A=UA(e))?A:"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(v("object"==typeof(A=read(e,"binary"))),A)},"undefined"!=typeof scriptArgs?A.arguments=scriptArgs:void 0!==arguments&&(A.arguments=arguments),"function"==typeof quit&&(A.quit=function(e,A){quit(e)})):(f||l)&&(A.read=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.send(null),A.responseText}catch(A){var r=UA(e);if(r)return XA(r);throw A}},l&&(A.readBinary=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.responseType="arraybuffer",A.send(null),new Uint8Array(A.response)}catch(A){var r=UA(e);if(r)return r;throw A}}),A.readAsync=function(e,A,r){var i=new XMLHttpRequest;i.open("GET",e,!0),i.responseType="arraybuffer",i.onload=function(){if(200==i.status||0==i.status&&i.response)A(i.response);else{var a=UA(e);a?A(a.buffer):r()}},i.onerror=r,i.send(null)},void 0!==arguments&&(A.arguments=arguments),A.setWindowTitle=function(e){document.title=e}),A.print="undefined"!=typeof console?console.log:"undefined"!=typeof print?print:null,A.printErr="undefined"!=typeof printErr?printErr:"undefined"!=typeof console&&console.warn||A.print,A.print=A.print,A.printErr=A.printErr,a)a.hasOwnProperty(i)&&(A[i]=a[i]);a=void 0;var o=16;function u(e){v(!j);var A=S;return S=S+e+15&-16,A}function b(e){v(q);var A=H[q>>2],r=A+e+15&-16;return H[q>>2]=r,r>=ie&&!Ae()?(H[q>>2]=A,0):A}function h(e,A){return A||(A=o),Math.ceil(e/A)*A}function w(e){switch(e){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===e[e.length-1])return 4;if("i"===e[0]){var A=parseInt(e.substr(1));return v(A%8==0),A/8}return 0}}new Array(0);var k=8,d=0;function v(e,A){e||zr("Assertion failed: "+A)}function g(e){var r=A["_"+e];return v(r,"Cannot call unknown function "+e+", make sure it is exported"),r}var m={stackSave:function(){Br()},stackRestore:function(){Er()},arrayToC:function(e){var A=pr(e.length);return ge(e,A),A},stringToC:function(e){var A=0;if(null!=e&&0!==e){var r=1+(e.length<<2);z(e,A=pr(r),r)}return A}},p={string:m.stringToC,array:m.arrayToC};function E(e,A,r,i,a){var t=g(e),n=[],f=0;if(i)for(var l=0;l>0]=A;break;case"i16":J[e>>1]=A;break;case"i32":H[e>>2]=A;break;case"i64":tempI64=[A>>>0,(tempDouble=A,+pe(tempDouble)>=1?tempDouble>0?(0|Ie(+ye(tempDouble/4294967296),4294967295))>>>0:~~+Be((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],H[e>>2]=tempI64[0],H[e+4>>2]=tempI64[1];break;case"float":P[e>>2]=A;break;case"double":X[e>>3]=A;break;default:zr("invalid type for setValue: "+r)}}var y=2,C=4;function I(e,A,r,i){var a,t;"number"==typeof e?(a=!0,t=e):(a=!1,t=e.length);var n,f="string"==typeof A?A:null;if(n=r==C?i:["function"==typeof vr?vr:u,pr,u,b][void 0===r?y:r](Math.max(t,f?1:A.length)),a){var l;for(i=n,v(0==(3&n)),l=n+(-4&t);i>2]=0;for(l=n+t;i>0]=0;return n}if("i8"===f)return e.subarray||e.slice?x.set(e,n):x.set(new Uint8Array(e),n),n;for(var s,c,o,h=0;h>0],(0!=r||A)&&(a++,!A||a!=A););A||(A=a);var t="";if(i<128){for(var n,f=1024;A>0;)n=String.fromCharCode.apply(String,x.subarray(e,e+Math.min(A,f))),t=t?t+n:n,e+=f,A-=f;return t}return Q(e)}var G="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function L(e,A){for(var r=A;e[r];)++r;if(r-A>16&&e.subarray&&G)return G.decode(e.subarray(A,r));for(var i,a,t,n,f,l="";;){if(!(i=e[A++]))return l;if(128&i)if(a=63&e[A++],192!=(224&i))if(t=63&e[A++],224==(240&i)?i=(15&i)<<12|a<<6|t:(n=63&e[A++],240==(248&i)?i=(7&i)<<18|a<<12|t<<6|n:(f=63&e[A++],i=248==(252&i)?(3&i)<<24|a<<18|t<<12|n<<6|f:(1&i)<<30|a<<24|t<<18|n<<12|f<<6|63&e[A++])),i<65536)l+=String.fromCharCode(i);else{var s=i-65536;l+=String.fromCharCode(55296|s>>10,56320|1023&s)}else l+=String.fromCharCode((31&i)<<6|a);else l+=String.fromCharCode(i)}}function Q(e){return L(x,e)}function D(e,A,r,i){if(!(i>0))return 0;for(var a=r,t=r+i-1,n=0;n=55296&&f<=57343&&(f=65536+((1023&f)<<10)|1023&e.charCodeAt(++n)),f<=127){if(r>=t)break;A[r++]=f}else if(f<=2047){if(r+1>=t)break;A[r++]=192|f>>6,A[r++]=128|63&f}else if(f<=65535){if(r+2>=t)break;A[r++]=224|f>>12,A[r++]=128|f>>6&63,A[r++]=128|63&f}else if(f<=2097151){if(r+3>=t)break;A[r++]=240|f>>18,A[r++]=128|f>>12&63,A[r++]=128|f>>6&63,A[r++]=128|63&f}else if(f<=67108863){if(r+4>=t)break;A[r++]=248|f>>24,A[r++]=128|f>>18&63,A[r++]=128|f>>12&63,A[r++]=128|f>>6&63,A[r++]=128|63&f}else{if(r+5>=t)break;A[r++]=252|f>>30,A[r++]=128|f>>24&63,A[r++]=128|f>>18&63,A[r++]=128|f>>12&63,A[r++]=128|f>>6&63,A[r++]=128|63&f}}return A[r]=0,r-a}function z(e,A,r){return D(e,x,A,r)}function W(e){for(var A=0,r=0;r=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++r)),i<=127?++A:A+=i<=2047?2:i<=65535?3:i<=2097151?4:i<=67108863?5:6}return A}function Y(e){var A=W(e)+1,r=vr(A);return r&&D(e,R,r,A),r}function F(e){return e.replace(/__Z[\w\d_]+/g,(function(e){return e==e?e:e+" ["+e+"]"}))}function M(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(A){e=A}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}function V(){var e=M();return A.extraStackTrace&&(e+="\n"+A.extraStackTrace()),F(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var N,R,x,J,H,P,X,S,j,U,T,O,_,q,K=16384;function $(){A.HEAP8=R=new Int8Array(N),A.HEAP16=J=new Int16Array(N),A.HEAP32=H=new Int32Array(N),A.HEAPU8=x=new Uint8Array(N),A.HEAPU16=new Uint16Array(N),A.HEAPU32=new Uint32Array(N),A.HEAPF32=P=new Float32Array(N),A.HEAPF64=X=new Float64Array(N)}function ee(){zr("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+ie+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function Ae(){ee()}S=U=T=O=_=q=0,j=!1;var re=A.TOTAL_STACK||5242880,ie=A.TOTAL_MEMORY||16777216;function ae(){return ie}if(ie0;){var r=e.shift();if("function"!=typeof r){var i=r.func;"number"==typeof i?void 0===r.arg?A.dynCall_v(i):A.dynCall_vi(i,r.arg):i(void 0===r.arg?null:r.arg)}else r()}}var ne=[],fe=[],le=[],se=[],ce=[],oe=!1;function ue(){if(A.preRun)for("function"==typeof A.preRun&&(A.preRun=[A.preRun]);A.preRun.length;)de(A.preRun.shift());te(ne)}function be(){oe||(oe=!0,te(fe))}function he(){te(le)}function we(){te(se)}function ke(){if(A.postRun)for("function"==typeof A.postRun&&(A.postRun=[A.postRun]);A.postRun.length;)ve(A.postRun.shift());te(ce)}function de(e){ne.unshift(e)}function ve(e){ce.unshift(e)}function ge(e,A){R.set(e,A)}function me(e,A,r){for(var i=0;i>0]=e.charCodeAt(i);r||(R[A>>0]=0)}Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,A){var r=65535&e,i=65535&A;return r*i+((e>>>16)*i+r*(A>>>16)<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var A=0;A<32;A++)if(e&1<<31-A)return A;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),Math.trunc=Math.trunc;var pe=Math.abs,Ee=(Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt),Be=Math.ceil,ye=Math.floor,Ce=Math.pow,Ie=(Math.imul,Math.fround,Math.round,Math.min),Ze=(Math.max,Math.clz32,Math.trunc,0),Ge=null,Le=null;function Qe(e){Ze++,A.monitorRunDependencies&&A.monitorRunDependencies(Ze)}function De(e){if(Ze--,A.monitorRunDependencies&&A.monitorRunDependencies(Ze),0==Ze&&(null!==Ge&&(clearInterval(Ge),Ge=null),Le)){var r=Le;Le=null,r()}}A.preloadedImages={},A.preloadedAudios={};var ze=null,We="data:application/octet-stream;base64,";function Ye(e){return String.prototype.startsWith?e.startsWith(We):0===e.indexOf(We)}var Fe=[function(e,A){var r=Z(e),i=Z(A);eA.createPath("/",Te.dirname(r)),eA.writeFile(Te.join("/",r),i)}];function Me(e,A,r){return Fe[e](A,r)}S=k+197232,fe.push(),ze="data:application/octet-stream;base64,AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkACEAAAAAAAAAAAAAAAABBAoC8AAAgAAAABAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICWQAAAAAAAgJZABJDDAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUkAAAAAAAABSQAAgAwIAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAABCQAAAAAAAAEJAAAAAAAAgg0AAAAAAAMCIQAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAAEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQACwwQAAAAAAAAAAAAAAEEBANgAAkwAAAAEAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAEAACAAAAAAAAAAAAABBAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAALDBAAAAAAAAAAAAAAAAABw6AAAQAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQEAgPgMAAAAAAAAAAAAAEEAkOwAAegAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJA////////73/////////vf////////+//////////7/8AAAAAAAD4PzMzMzMzM9M/PAAAAAAAAACamZmZmZmpPwEAAAAAAAAAAQAAAAAAAAAAAAAAAADwPwEAAAAAAAAAAgAAAAAAAAAAAAAAAADwPwIAAAAAAAAAAwAAAAAAAAAAAAAAAADgPwMAAAAAAAAABAAAAAAAAAAAAAAAAADwPwQAAAAAAAAABQAAAAAAAAAzMzMzMzPzPwUAAAAAAAAABgAAAAAAAACamZmZmZnpPwYAAAAAAAAABwAAAAAAAAAAAAAAAADwPwcAAAAAAAAACAAAAAAAAAAAAAAAAADgPwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAMzMzMzMz078AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzPjPwAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAEAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABr4VQAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAgGZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgGZAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAgGZAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAAAAQAAAAAAAAAAAAAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP1ioNc07TtU/JXUCmggb2j8AAAAAAADgPwAAAAAAAOA/LNSa5h2n6j9q3nGKjuToP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAOA/XdxGA3gL4j8AAAAAAADQP1ioNc07TtU/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T/TvOMUHcnRP13cRgN4C+I/XdxGA3gL4j9d3EYDeAviPw1xrIvbaNw/ZF3cRgN47T/Sb18HzhnnPxB6Nqs+V+U/EHo2qz5X5T/Sb18HzhnnP3gLJCh+jOM/tRX7y+7J4T/Sb18HzhnnP9JvXwfOGec/WKg1zTtO1T+IhVrTvOPYP9JvXwfOGec/eAskKH6M4z/EQq1p3nHsP9JvXwfOGec/0m9fB84Z5z+1FfvL7snhP9JvXwfOGec/EHo2qz5X5T+1FfvL7snhP3gLJCh+jOM/0m9fB84Z5z/Sb18HzhnnP4Y41sVtNO4/0m9fB84Z5z/Sb18HzhnnP3gLJCh+jOM/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/pgpGJXUC3j8AAAAAAADgP1ioNc07TtU/DXGsi9to3D8AAAAAAADgPw1xrIvbaNw/AAAAAAAA4D8NcayL22jcP1ioNc07TtU/AAAAAAAA4D8AAAAAAADgP9O84xQdydE/07zjFB3J0T8AAAAAAADgP9O84xQdydE/at5xio7k6D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgP1ioNc07TtU/iIVa07zj2D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA4D8NcayL22jcP/RsVn2utt4/ETY8vVKWyT/0bFZ9rrbePzsBTYQNT+E/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D9YqDXNO07VPwAAAAAAAOA/AAAAAAAA4D8+6Nms+lzFPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/gnNGlPYGxz8NcayL22jcPwAAAAAAAOA/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADQPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8H8BZIUPzcP6K0N/jCZNY/WKg1zTtO1T8NcayL22jcPw1xrIvbaNw/AAAAAAAA4D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA0D8NcayL22jcPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA8D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP8RCrWnecew/AAAAAAAA0D9/2T15WKjRPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/eAskKH6M4z/Sb18HzhnnP8RCrWnecew/E/JBz2bV0z8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/EHo2qz5X5T8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP/RsVn2uttY/tRX7y+7J4T+1FfvL7snhP8RCrWnecew/EHo2qz5X5T/129eBc0bMP1ioNc07TtU/WKg1zTtO1T+IhVrTvOPYPwFNhA1Pr+I/07zjFB3J0T9YqDXNO07VP9O84xQdydE/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/07zjFB3J0T8BTYQNT6/iPwFNhA1Pr+I/AU2EDU+v4j+1FfvL7snhP8xdS8gHPfA/EHo2qz5X5T8QejarPlflP9JvXwfOGec/0m9fB84Z5z8QejarPlflP3gLJCh+jOM/at5xio7k6D/Sb18HzhnnP9O84xQdydE/AAAAAAAA4D8QejarPlflP7UV+8vuyeE/LNSa5h2n6j/Sb18HzhnnP2recYqO5Og/EHo2qz5X5T9q3nGKjuToP9JvXwfOGec/EHo2qz5X5T94CyQofozjP9JvXwfOGec/EHo2qz5X5T+GONbFbTTuPxB6Nqs+V+U/EHo2qz5X5T94CyQofozjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP6YKRiV1At4/tRX7y+7J4T9Iv30dOGfMP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADgP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T9Iv30dOGfMP0i/fR04Z8w/AAAAAAAA4D9Iv30dOGfMPyzUmuYdp+o/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T9YqDXNO07VPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8Cmggbnl7VP+C+DpwzotA/ApoIG55e1T8BTYQNT6/iP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/WKg1zTtO1T+1FfvL7snhP7UV+8vuyeE/PujZrPpcxT+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhPx04Z0Rpb8g/WKg1zTtO1T+1FfvL7snhP1ioNc07TtU/WKg1zTtO1T8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP9O84xQdydE/5x2n6Egu4T+itDf4wmTWP0i/fR04Z8w/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/AAAAAAAA8D8AAAAAAADwP9O84xQdydE/eAskKH6M4z/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAPA/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T8AAAAAAADwP9O84xQdydE/6pWyDHGs1z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP7UV+8vuyeE/at5xio7k6D8AAAAAAADwP5jdk4eFWtc/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP8RCrWnecew/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/SL99HThnzD94CyQofozjP4Y41sVtNO4/eAskKH6M4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP1GgT+RJ0g5AtMh2vp86NcA6It+l1CXVv/OCPkeaLoo/n+V5cHfW+b9+/RAbLJzmP5bs2AjE68w/zc6idyrg0D+w479AECDtv62h1F5E29g/O6F85lGWdj/TbnD5eoR7P4HMzqJ3KuS/0a3X9KCgyD9q3zcZsD+EP77KkBle/4Q/HJYGflTDxL+lSSno9uIjQKnZA63AkME/CMSQQZNpiT/6RJ4kXTPQvwHwmTYtwl4/DZx9L8+Ulz+JtfgUAOOJP+WpWEY0y7G/jwDJz6Fnpr9ctcb7zLSIP02kj1Q6s5A/5scEoWHWoL/HaWccE/eCvyp/a+UtcFy/5FdiVAiadT/R8YdVcgS3P5XUCWgiPDPAZCMQr+t3EMCnIarwZ3jHP9r/AGvVrsE/TihEwCFU97+qSIWxhSD1P51oVyHlJ/Y/TS7GwDqOzT9Zayi1F9HcvwM/qmG/J8w/pkdTPZl/2j+2gTtQpzyuP1FM3gAz37m/9XaV/9oLpj/UpTW8D/aUPx+tILws3JA/KCzxgLLJI0AjWuFMAoq3P0ijZVGWKX8/u7SG98Gekz8XqHtTR32gvyErruBtlIs/M3PchNYetb+geISJ9fyPP2k1JO6x9JG/uM0zel6/aj+SPq2iPzTNv36w58ZPPpi/ByObUC3HpD8+GMJ7WLmRvy18fa1LjcY/AAAAQPsh+T8AAAAALUR0PgAAAICYRvg8AAAAYFHMeDsAAACAgxvwOQAAAEAgJXo4AAAAgCKC4zYAAAAAHfNpNQAAAAAAAPC/vAQBAOgqAAADAAAAEC0AAAMAAADoLwAAAwAAALAwAAADAAAAADIAAAMAAAB4NQAAAwAAALQ4AAADAAAAxC4AAAMAAAB8OQAAAwAAAIQ6AAADAAAAED8AAAMAAAA0PQAAAAAAANQsAAAAAAAAwC8AAAAAAAAQMAAAAAAAANgxAAAAAAAAKDIAAAAAAACMOAAAAAAAAGAuAAAAAAAAVDkAAAAAAABcOgAAAAAAAOg+AAAAAAAADD0AAAQAAAA4PwAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAI2QIAGNkCACjZAgA42QIASNkCAFjZAgBo2QIAeNkCABjZAgAY2QIAWNkCAFjZAgAfAAAAPwAAAH8AAAAAAAAAooUBAAEAAACoKwAAaAAAAAQAAADVCAEAAQAAACAsAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAUBAAEAAAAAAAAA4AAAAAAAAAB4BQEAAQAAAAAAAADgAAAAAQAAAH8FAQABAAAAAAAAAKgAAAACAAAAiQUBAAEAAAAAAAAA4AAAAAMAAACTBQEAAQAAAAAAAADgAAAABAAAAKEFAQABAAAAAAAAAOAAAAAFAAAAqwUBAAEAAAAAAAAA4AAAAAYAAAC4BQEAAQAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ggBAAEAAADELQAAGAEAAAEAAADfCAEAAQAAAMQtAAAYAQAAAgAAAOUIAQABAAAAxC0AABgBAAADAAAA7ggBAAEAAADELQAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgIAQABAAAAAAAAAHABAAABAAAAAgkBAAEAAAAAAAAAcAEAAAIAAAANCQEAAQAAAAAAAAA4AQAAAwAAABsJAQABAAAAAAAAADgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAwAAAANAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAYAAAACAAAAAgAAAAcAAAACAAAAAAAAAGIYAgBnAQIA+AICADgJAgAvEAIAbhQCAO4XAgD/FwIAAAAAAGIJAQABAAAAKC8AAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmCQEAAQAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAbgkBAAEAAAA4MAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAKYKAQABAAAAAAAAACACAAACAAAAsAoBAAEAAAAAAAAAWAIAAAAAAAC5CgEAAQAAAAAAAABYAgAAAwAAAMIKAQABAAAAAAAAAFgCAAAAAAAAzAoBAAEAAAAAAAAAIAIAAAMAAADYCgEAAQAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAFgAAABcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAAAAJAAAAAwAAAAMAAAAKAAAABAAAAAAAAABiGAIAZwECADgJAgD4AgIAbhQCAC8QAgD/FwIA7hcCAAAAAAAAAAAAlQwBAP////88MQAAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgMAQD/////AAAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACojQEAAQAAAFAyAADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGQAAABoAAAAAAAAABAAAAAAAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAIQAAACIAAAACAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAMAAAABQAAAAQAAAANAAAABQAAAAMAAACVEAEAoxABALkQAQDz+QIAxxABANYQAQDbEAEA+RABAPP5AgALEQEAOxEBAPP5AgBZEQEAgREBAI8RAQC+EQEA8hEBAAMSAQAoEgEASxIBAFESAQBtEgEAihIBAKUSAQDGEgEA4BIBAAITAQAhEwEARxMBAF8TAQB/EwEAnBMBAMATAQDMEwEA8/kCANcTAQD9EwEAIRQBAEcUAQDz+QIAfRQBAJUUAQCiFAEA0RQBAMwTAQDz+QIA3hQBAOcUAQAIFQEAQxUBAI4VAQDiFQEABBYBABkWAQAwFgEARhYBAF4WAQDz+QIAdBYBAI8WAQCzFgEA1xYBAPwWAQDz+QIAHRcBADcXAQBJFwEAVhcBAGMXAQB3FwEAhhcBAI4XAQCjFwEAsRcBAO8XAQD6FwEAzBMBAPP5AgAAGAEADBgBABsYAQBLEgEA8/kCAC4YAQBXGAEAdRgBAIUYAQCWGAEAnRgBAKwYAQC8GAEAABkBAAcZAQBLEgEA8/kCABEZAQA9GQEASBkBAFEZAQBaGQEAaxkBAHwZAQCQGQEAzBMBAPP5AgCcGQEArBkBALoZAQDIGQEA1RkBAOIZAQD4GQEAARoBABAaAQAdGgEALhoBAMwTAQDz+QIAORoBAFgaAQDz+QIAahoBAHkaAQCpGgEAsxoBAMAaAQDNGgEA2hoBAOcaAQDqGgEA8/kCAO4aAQDz+QIAERsBAEIbAQBxGwEAiBsBAKMbAQC+GwEAzBMBAPP5AgDaGwEA8/kCAAIcAQAOHAEAIRwBADQcAQBJHAEAXhwBAGIcAQBLEgEA8/kCAG4cAQDz+QIAfhwBAIwcAQCYHAEApRwBAMUcAQDbHAEA8/kCAO8cAQA4HQEAfh0BAK4dAQDhHQEA6B0BAA8eAQA2HgEA8/kCADseAQAAAAAAAAAAAPBHAQABAAAAAAAAAAgDAAABAAAArx4BAAEAAAAAAAAACAMAAAIAAADpRwEAAQAAAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAACQAAAAlAAAABgAAACYAAAAnAAAAKAAAACkAAAAqAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAEAAAALwAAAAAAAAAAAAAADgAAAAAAAAAPAAAABwAAAAUAAAAQAAAABgAAAAAAAAB/AAIAiQACAHkxAQDOAAIACQECACsBAgAxAQIAYhgCAFgBAgBnAQIAhAECAI8BAgCxAQIA5wECAB0CAgBYAgIAjgICALACAgC/AgIA8AICAPgCAgA/JQEASCUBABUDAgBRJQEAXwMCAFolAQBpAwIAYyUBAHMDAgDCAwIA/QMCAG8lAQA4BAIAQwQCAIgEAgCWBAIA4AQCAO4EAgD8BAIABwUCADgFAgB4BQIAgAUCAIgFAgDDBQIA+QUCAAUGAgB+MQEAEQYCABsGAgAmBgIAQwYCAHkGAgA4CQIAWgkCAGYJAgAlDAIAVgwCAIIMAgC4DAIAxQwCAOcMAgAJDQIAEg0CAFwNAgBmDQIAqw0CAOENAgDsDQIAcQ4CAIYOAgB3JQEAkA4CAJoOAgDQDgIAEA8CAB4PAgByDwIAgQ8CAJAPAgDfDwIAhjEBAB8QAgApEAIALxACAFsQAgCCEAIAkxACAJ4QAgDjEAIAKBECADcRAgBHEQIAWRECAGkRAgB5EQIAhhECAJARAgDGEQIAzxECAA8SAgAiEgIAizEBACoSAgBgEgIAhxICAL0SAgDkEgIA8hICACgTAgByEwIAvBMCAMcTAgD9EwIAAhQCAB8UAgA8FAIARxQCAG4UAgCGFAIAvBQCAPIUAgD+FAIAJRUCADAVAgBhFQIAkhUCAHg8AQC5FQIA5RUCABsWAgBRFgIAWxYCAHgWAgC4FgIA7hYCAJExAQAGFwIAMhcCAFkXAgCPFwIAzBcCAO4XAgD0FwIA/xcCACYYAgAAAAAAq40BAAEAAADINQAAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMdIAQABAAAAAAAAAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAIAAAABgAAABMAAAAHAAAAAAAAAAAAAACtJgEAAQAAANw4AADQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsCYBAAEAAAAAAAAA8AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAA1AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADcAAAAAAAAAAAAAABQAAAAAAAAAFQAAAAkAAAAHAAAAFgAAAAgAAAAAAAAAeTEBAGIYAgBnAQIAfjEBAHkGAgA4CQIAhjEBAFsQAgAPEgIAizEBAEcUAgBuFAIAeDwBAJExAQDuFwIA/xcCAAAAAACWMQEAAQAAAKQ5AAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmjEBAAEAAAAAAAAASAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAA5AAAAOgAAAAoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQQAAAEIAAABDAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAGAAAAAsAAAAIAAAAGQAAAAkAAAAAAAAAzgACAA47AQBiGAIAZwECAIQBAgAZOwEAHzsBACo7AQAxOwEAjwECAOcBAgA5OwEAPzsBAEo7AQCOAgIAsAICAPgCAgBROwEAXwMCAHMDAgD9AwIAWzsBAIgEAgCWBAIA4AQCAGY7AQDuBAIAbjsBAHc7AQCFOwEAjzsBAMMFAgCYOwEABQYCACYGAgBDBgIAnjsBAIoGAgC1BgIA3gYCAAEHAgAqBwIATQcCAHYHAgCZBwIAwgcCAOUHAgAOCAIAMQgCAFoIAgB9CAIApggCAMkIAgDyCAIAFQkCADgJAgClOwEAWgkCALE7AQCCDAIA5wwCAKsNAgC+OwEAkA8CAMs7AQAfEAIALxACANU7AQBbEAIAghACAJMQAgDkOwEA9jsBAJ4QAgAoEQIANxECAEcRAgBZEQIAaRECAAY8AQARPAEAHDwBAHkRAgAPEgIAFBICACE8AQAqPAEAMzwBAEM8AQBKPAEAYBICAIcSAgC9EgIA8hICAAIUAgAfFAIAUjwBAG4UAgBZPAEA/hQCAGI8AQAwFQIAajwBAJIVAgB4PAEAuRUCAOUVAgB/PAEAeBYCALgWAgCJPAEA7hYCAAYXAgBZFwIAkzwBAKE8AQCPFwIAlhcCAMwXAgDuFwIA/xcCACYYAgAAAAAAszwBAAEAAACsOgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALc8AQABAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEUAAAAAAAAAAAAAAEYAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABsAAAAMAAAACQAAABwAAAAKAAAAAAAAAEFCAACwoQEAQUkAAIqhAQBBUgAAXaEBAEFYAADFoQEAQiAAAAGkAQBCSQAAEqQBAENCAABKogEAQ08AADiiAQBDWAAAV6IBAEggAAB7ogEASEIAAIWiAQBISQAAEaMBAEhYAACUogEASGIAAMWiAQBIaQAA+KIBAEhyAACqogEASHgAANuiAQBJIAAAI6QBAEtCAADcoQEAS0kAACSiAQBLUgAAEKIBAEtYAAD9oQEATkIAACOjAQBOSQAAaqMBAE5SAACCowEATlgAAE6jAQBQQQAA46MBAFBCAACfowEAUEkAANOjAQBQWAAAv6MBAFIgAADapQEAUyAAAPKjAQBaRAAAYKQBAAAAAAAAAAAAAQAAAAAAAABdRwEA/////1w9AADYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUcBAP////8AAAAA+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAGlHAQABAAAAIEMAAAAAAAAQAAAAcUcBAAEAAAAgQwAAAAAAABEAAAB5RwEAAQAAACBDAAAAAAAAEQAAAIJHAQABAAAAIEMAAAAAAAARAAAAikcBAAEAAAAgQwAAAAAAABMAAACSRwEAAQAAACRDAAAAAAAAFAAAAJpHAQABAAAAJEMAAAAAAAAVAAAAokcBAAEAAAAkQwAAAAAAABUAAACrRwEAAQAAACRDAAAAAAAAFQAAALNHAQABAAAAJEMAAAAAAAAWAAAAu0cBAAEAAAAoQwAAAAAAABcAAADERwEAAQAAAChDAAAAAAAAGAAAAM1HAQABAAAAKEMAAAAAAAAYAAAA10cBAAEAAAAoQwAAAAAAABgAAADgRwEAAQAAAChDAAAAAAAAGQAAAOlHAQABAAAALEMAAAAAAAAZAAAA8EcBAAEAAAAsQwAAAAAAABoAAAD2RwEAAQAAADBDAAAAAAAACgAAAP9HAQABAAAANEMAAAAAAAALAAAAB0gBAAEAAAA0QwAAAAAAAAwAAAAPSAEAAQAAADRDAAAAAAAADAAAABhIAQABAAAANEMAAAAAAAAMAAAAIEgBAAEAAAA0QwAAAAAAAA4AAAAoSAEAAQAAADRDAAAAAAAADgAAAC9IAQABAAAANEMAAAAAAAANAAAAN0gBAAEAAAA0QwAAAAAAAAUAAAA/SAEAAQAAADRDAAAAAAAABgAAAEdIAQABAAAANEMAAAAAAAAHAAAAT0gBAAEAAAA0QwAAAAAAAAcAAABYSAEAAQAAADRDAAAAAAAABwAAAGBIAQABAAAANEMAAAAAAAAJAAAAaEgBAAEAAAA0QwAAAAAAAAkAAABvSAEAAQAAADRDAAAAAAAACAAAAHdIAQABAAAANEMAAAAAAAAAAAAAf0gBAAEAAAA4QwAAAAAAAAEAAACISAEAAQAAADhDAAAAAAAAAgAAAJFIAQABAAAAOEMAAAAAAAACAAAAm0gBAAEAAAA4QwAAAAAAAAIAAACkSAEAAQAAADhDAAAAAAAABAAAAK1IAQABAAAAOEMAAAAAAAAEAAAAtUgBAAEAAAA4QwAAAAAAAAMAAAC+SAEAAQAAADhDAAAAAAAAEgAAAMdIAQABAAAAIEMAAAAAAAAbAAAAz0gBAAEAAAA8QwAAAAAAABwAAADXSAEAAQAAADxDAAAAAAAAHQAAAN9IAQABAAAAPEMAAAAAAAAdAAAA6EgBAAEAAAA8QwAAAAAAAB0AAADwSAEAAQAAADxDAAAAAAAAHgAAAPhIAQABAAAAQEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAGNMAQBMQwAAAQAAAGhDAAAAAAAAAAAAAEgAAABJAAAAAQAAAAAAAACihQEAAAAAAFxDAABkQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAQAAAAYAQAAMAEAALAAAACIVAEAjVQBAJFUAQCYVAEAnFQBAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAdAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAACRWQEAKEQAAAEAAACARAAAAAAAAAAAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAEsAAABVAAAASwAAAFYAAABXAAAAWAAAAFkAAAAAAAAAnlkBAAAAAAA4RAAAKNsCAAEAAACkWQEAAAAAAEBEAAAo2wIAAgAAAKhZAQAAAAAASEQAACjbAgADAAAArVkBAAAAAABQRAAAKNsCAAQAAACzWQEAAAAAAFhEAAAo2wIABQAAALlZAQAAAAAAcEQAACjbAgAGAAAAw1kBAAAAAAB4RAAAKNsCAAcAAADJWQEAAAAAAGBEAAAo2wIABwAAAM1ZAQAAAAAAYEQAACjbAgAHAAAA0lkBAAAAAABoRAAAKNsCAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAAAAAAAAAAQAAACAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAAAAAAAPGcBAFRnAQBzZwEAkGcBAK9nAQC2ZwEAv2cBADxnAQBBZwEASGcBAE1nAQDeZgEA8GYBAP5mAQAMZwEAGmcBACFnAQAwZwEAPGcBAAAAAADz+QIAAAAAAB0SAgABAAAA+GkBAAcAAAC8aQEAAwAAAMYlAgAFAAAAAGoBAA8AAACQjQEACAAAAJCNAQAQAAAACGoBAAQAAAAIagEAEQAAAA1qAQAFAAAADWoBAAIAAAATagEABgAAABpqAQAEAAAAJmoBAAcAAAAuagEABwAAAD5qAQAFAAAARGoBAAgAAABbagEACAAAAERqAQAJAAAAZGoBAAcAAABsagEACgAAAIZqAQAHAAAAjmoBAAsAAACoagEABgAAAK9qAQAMAAAAzWoBAAkAAACvagEADQAAANdqAQAIAAAA4GoBAA4AAAABawEACAAAAAprAQASAAAAK2sBAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAIAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAMAAAAhAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAiAAAABQAAAAAAAAAAAAAAAAAAAAUAAABAAAAAiEcAAJhHAAAGAAAABAAAAKRHAAAGAAAACAAAAAYAAAAEAAAArEcAAAAEAAAIAAAA/////wAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAGAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAGAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAJAAAAAAAAAAcAAAAAAAAACQAAAAsAAAAIAAAACgAAADBJAAC0SAAAGEkAAAEAAAABAAAACgAAABYAAAALAAAAWgAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA0AAAAAAAAABwAAAAAAAAAHAAAAAgAAAAUAAAAIAAAAAAAAAAAAAAAGAAAAAwAAAA4AAAALAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAADwAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAEAAAAAAAAAAHAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAmAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD/////AAAAAAAAAAAnAAAAAAAAAAAAAAAHAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAwAAAAEAAAABAAAAAgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAABAAAABAAAAAUAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAGAAAAAQAAAAEAAAAHAAAACAAAAAkAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAAQAAAAEAAAALAAAAAQAAAAwAAAABAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABMAAAATAAAAEwAAABMAAAAXAAAAGAAAABkAAAATAAAAGgAAABsAAAAcAAAAHQAAABMAAAATAAAAEwAAABMAAAATAAAAAQAAAB4AAAABAAAAAQAAABMAAAABAAAAHwAAACAAAAAhAAAAIgAAACMAAAATAAAAJAAAACUAAAAmAAAAEwAAABMAAAATAAAAEwAAACcAAAAoAAAAKQAAABMAAAAqAAAAKwAAACwAAAAtAAAAEwAAABMAAAATAAAAEwAAABMAAAABAAAAAQAAAAEAAAABAAAAAQAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAALgAAABMAAAATAAAAEwAAAC8AAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAADAAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAAAAAAAEAAAABAAAAAgAAAAMAAAABAAAABAAAAAEAAAAFAAAAAQAAAAYAAAAHAAAABwAAAAEAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAIAAAAB5swEAWrMBACB8AQCGswEAfrMBAIyzAQAAAAAAJoABAC+AAQA2gAEARIABAHqyAQCiswEAS4ABAFKAAQABAAAACAAAAP////8AAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAA8IEBAAgAAAADAAAA+YEBAP2BAQALAAAABgAAAKiNAQAJggEAAgAAAAEAAAAMggEAEIIBAAQAAAACAAAAFYIBABmCAQAEAAAABAAAAB6CAQAjggEABQAAAAUAAAApggEALYIBAAQAAAAHAAAAMoIBADaCAQAFAAAACQAAADyCAQBAggEABAAAAAoAAABFggEASoIBAAQAAAAMAAAAT4IBAOKGAQAAAAAAAQAAAOqGAQABAAAAAAAAAHWyAQABAAAAAQAAAB0SAgAAAAAAAAAAAAAAAAAAAAAAAAAAAMuFAQAxAAAAAAAAAAAAAACjrQEAEAAAAEUeAgCAAAAAxIUBAEAAAAAOoAEAEAAAAMaFAQBAAAAAAAAAAAAAAACShQEAAQAAAJmFAQACAAAAnoUBAAMAAADMpgEABAAAADCdAQAFAAAAooUBAAYAAAAdEgIACAAAAKaFAQAhAAAAqoUBACIAAACuhQEAIgAAALKFAQABAAAAt4UBAAcAAAC9hQEAJwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA/////wAAAAApAAAAAAAAAAAAAAAAAAAAAAAAAP2KAQAEiwEAAAAAAKWNAQCojQEAq40BAAAAAAAAAAAAAQAAAAIAAAD/////aI0BAG6NAQAdEgIAAAAAAGQAAABlAAAAZgAAAGQAAAAIAAAACAAAAAAAAAAAAAAAKgAAABEAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAJAAAAKwAAABEAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAADMpgEAYFUAAIAGAAAAAAAA+ZwBAGBVAACwBgAAAAAAANKlAQBgVQAA4AYAAAAAAAABnQEAYFUAAOAGAAAAAAAABp0BAGBVAAAQBwAAAAAAAA2dAQB4VQAAEAcAAAAAAAATnQEAYFUAAEAHAAAAAAAAF50BAGBVAABwBwAAAAAAAB0SAgBgVQAAoAcAAAAAAAAgnQEAYFUAAKAHAAAAAAAAKp0BAGBVAABQBgAAAAAAADCdAQBgVQAA0AcAAAAAAAA4nQEAYFUAAAAIAAAAAAAAQp0BAGBVAAAwCAAAAAAAAFCdAQBgVQAAYAgAAAAAAABWnQEAYFUAAJAIAAAAAAAAX50BAGBVAADACAAAAAAAAGedAQBgVQAA8AgAAAAAAABwnQEAYFUAACAJAAAAAAAAeJ0BAGBVAABQCQAAAAAAAH2dAQBgVQAAgAkAAAAAAACBnQEAYFUAALAJAAAAAAAAiJ0BAGBVAADgCQAAAAAAAI6dAQBgVQAAEAoAAAAAAACYnQEAkFUAAEAKAAAAAAAAoZ0BAGBVAACABgAAAAAAAKadAQBgVQAAgAYAAAAAAACwnQEAYFUAAHAKAAAAAAAAt50BAGBVAACgCgAAAAAAAMSdAQBgVQAA0AoAAAAAAADSnQEAYFUAAAALAAAAAAAA4J0BAGBVAAAwCwAAAAAAAOydAQBgVQAAYAsAAAAAAAD5nQEAYFUAAJALAAAAAAAAAp4BAGBVAADACwAAAAAAAAyeAQBgVQAA8AsAAAAAAAAVngEAYFUAACAMAAAAAAAAHZ4BAGBVAABQDAAAAAAAACWeAQBgVQAAgAwAAAAAAAAungEAYFUAALAMAAAAAAAAMp4BAGBVAADgDAAAAAAAAD2eAQBgVQAAEA0AAAAAAABBngEAYFUAAEANAAAAAAAAS54BAGBVAABwDQAAAAAAAFSeAQBgVQAAoA0AAAAAAABcngEAYFUAANANAAAAAAAAaZ4BAGBVAAAADgAAAAAAAHWeAQBgVQAAMA4AAAAAAACAngEAYFUAAGAOAAAAAAAAkJ4BAGBVAACQDgAAAAAAAJ6eAQBgVQAAwA4AAAAAAACtngEAYFUAAPAOAAAAAAAAt54BAGBVAAAgDwAAAAAAAMCeAQBgVQAAUA8AAAAAAADKngEAYFUAAIAPAAAAAAAA1J4BAGBVAACwDwAAAAAAANueAQBgVQAA4A8AAAAAAADingEAYFUAABAQAAAAAAAA7J4BAKhVAAAAAAAAAAAAAPOeAQCoVQAAAAAAAAAAAADVnAEAwFUAAAAAAAAAAAAA+54BANhVAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAAXAAAABcAAAAEAAAAAgAAAAwAAABdAAAAXAAAABcAAAAFAAAAAAAAAA0AAABbAAAAXAAAABcAAAAEAAAAAgAAAAwAAABeAAAAXwAAABgAAAAGAAAAAwAAAA4AAABgAAAAYQAAABcAAAAHAAAAAAAAAA8AAABbAAAAXAAAABcAAAAIAAAAAgAAAAwAAAAQAAAAEQAAABIAAAATAAAA/Z8BAASgAQAAAAAADKABAA6gAQB/HgIAEKABAAwAAAAEAAAABgAAAAIAAAADAAAAAQAAAAkAAAAIAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAF2hAQBtoQEAeqEBAAAAAAAAAAAABAAAAH+hAQAAAAAAAAAAAIqhAQBtoQEAeqEBAAAAAAChoQEABQAAAH+hAQAAAAAAqaEBALChAQBtoQEAwKEBAAAAAAAAAAAABgAAAH+hAQDrsQEAAAAAAMWhAQBtoQEAwKEBAAAAAAChoQEABwAAAH+hAQDrsQEAqaEBANyhAQDpoQEAwKEBAAAAAAAAAAAACgAAAPehAQDrsQEAAAAAAP2hAQDpoQEAwKEBAAAAAACpoQEACwAAAPehAQDrsQEAqaEBABCiAQDpoQEAHqIBAAAAAAAAAAAACAAAAPehAQAAAAAAAAAAACSiAQDpoQEAHqIBAAAAAACpoQEACQAAAPehAQAAAAAAqaEBADiiAQA4ogEAAAAAAAAAAAAAAAAADAAAAECiAQAAAAAAAAAAAEqiAQA4ogEA67EBAAAAAAAAAAAADgAAAECiAQDrsQEAAAAAAFeiAQA4ogEA67EBAAAAAAChoQEADwAAAECiAQDrsQEAqaEBAGuiAQA4ogEAAAAAAAAAAAChoQEADQAAAECiAQAAAAAAqaEBAHuiAQB7ogEAAAAAAAAAAAAAAAAAEAAAAH+hAQAAAAAAAAAAAIWiAQB7ogEA67EBAAAAAAAAAAAAEgAAAH+hAQDrsQEAAAAAAJSiAQB7ogEA67EBAAAAAAChoQEAEwAAAH+hAQDrsQEAqaEBAKqiAQB7ogEAAAAAALuiAQAAAAAAFAAAAH+hAQAAAAAAAAAAAMWiAQB7ogEA67EBALuiAQAAAAAAFgAAAH+hAQDrsQEAAAAAANuiAQB7ogEA67EBALuiAQChoQEAFwAAAH+hAQDrsQEAqaEBAPiiAQB7ogEAAAAAALuiAQChoQEAFQAAAH+hAQAAAAAAqaEBABGjAQB7ogEAAAAAAAAAAAChoQEAEQAAAH+hAQAAAAAAqaEBACOjAQA5owEA67EBAAAAAAAAAAAAGgAAAPehAQDrsQEAAAAAAE6jAQA5owEA67EBAAAAAACpoQEAGwAAAPehAQDrsQEAqaEBAGqjAQA5owEAAAAAAAAAAACpoQEAGQAAAPehAQAAAAAAqaEBAIKjAQA5owEAmaMBAAAAAAAAAAAAGAAAAPehAQAAAAAAAAAAAJ+jAQCtowEA67EBAAAAAAAAAAAAHgAAAPehAQDrsQEAAAAAAL+jAQCtowEA67EBAAAAAACpoQEAHwAAAPehAQDrsQEAqaEBANOjAQCtowEAAAAAAAAAAACpoQEAHQAAAPehAQAAAAAAqaEBAOOjAQCtowEAmaMBAAAAAAAAAAAAHAAAAPehAQAAAAAAAAAAAPKjAQDyowEAAAAAAAAAAAAAAAAAIAAAAPmjAQAAAAAAAAAAAAGkAQAMpAEA67EBAAAAAAAAAAAAAgAAAPehAQDrsQEAAAAAABKkAQAMpAEA67EBAAAAAACpoQEAAwAAAPehAQDrsQEAqaEBACOkAQAMpAEAAAAAAAAAAACpoQEAAQAAAPehAQAAAAAAqaEBANqlAQAMpAEAAAAAAAAAAAAAAAAAAAAAAPehAQAAAAAAAAAAADCkAQBKpAEAWaQBAAAAAACpoQEAIQAAAPehAQAAAAAAqaEBAGCkAQBtpAEAAAAAAAAAAAAAAAAAIgAAAPmjAQAAAAAAAAAAAAgAAAAEAAAAAAAAAAoAAAAtAAAAEgAAAAAAAAAAAAAAAAAAAAgAAAD/////AAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAmnAQDGAAAAD6cBAMEAAAAWpwEAwgAAABynAQDAAAAAI6cBAJEDAAAppwEAxQAAAC+nAQDDAAAANqcBAMQAAAA7pwEAkgMAAECnAQDHAAAAR6cBAKcDAABLpwEAISAAAFKnAQCUAwAAWKcBANAAAABcpwEAyQAAAGOnAQDKAAAAaacBAMgAAABwpwEAlQMAAHinAQCXAwAAfKcBAMsAAACBpwEAkwMAAIenAQDNAAAAjqcBAM4AAACUpwEAzAAAAJunAQCZAwAAoKcBAM8AAAClpwEAmgMAAKunAQCbAwAAsqcBAJwDAAC1pwEA0QAAALynAQCdAwAAv6cBAFIBAADFpwEA0wAAAMynAQDUAAAA0qcBANIAAADZpwEAqQMAAN+nAQCfAwAA56cBANgAAADupwEA1QAAAPWnAQDWAAAA+qcBAKYDAAD+pwEAoAMAAAGoAQAzIAAAB6gBAKgDAAALqAEAoQMAAA+oAQBgAQAAFqgBAKMDAAAcqAEA3gAAACKoAQCkAwAAJqgBAJgDAAAsqAEA2gAAADOoAQDbAAAAOagBANkAAABAqAEApQMAAEioAQDcAAAATagBAJ4DAABQqAEA3QAAAFeoAQB4AQAAXKgBAJYDAABhqAEA4QAAAGioAQDiAAAAbqgBALQAAAB0qAEA5gAAAHqoAQDgAAAAgagBADUhAACJqAEAsQMAAI+oAQAmAAAAk6gBACciAACXqAEAICIAAJuoAQDlAAAAoagBAEgiAACnqAEA4wAAAK6oAQDkAAAAs6gBAB4gAAC5qAEAsgMAAL6oAQCmAAAAxagBACIgAADKqAEAKSIAAM6oAQDnAAAA1agBALgAAADbqAEAogAAAOCoAQDHAwAA5KgBAMYCAADpqAEAYyYAAO+oAQBFIgAA9KgBAKkAAAD5qAEAtSEAAP+oAQAqIgAAA6kBAKQAAAAKqQEA0yEAAA+pAQAgIAAAFqkBAJMhAAAbqQEAsAAAAB+pAQC0AwAAJakBAGYmAAArqQEA9wAAADKpAQDpAAAAOakBAOoAAAA/qQEA6AAAAEapAQAFIgAATKkBAAMgAABRqQEAAiAAAFapAQC1AwAAXqkBAGEiAABkqQEAtwMAAGipAQDwAAAAbKkBAOsAAABxqQEArCAAAHapAQADIgAAfKkBAJIBAACBqQEAACIAAIipAQC9AAAAj6kBALwAAACWqQEAvgAAAJ2pAQBEIAAAo6kBALMDAACpqQEAZSIAAKypAQA+AAAAr6kBANQhAAC0qQEAlCEAALmpAQBlJgAAwKkBACYgAADHqQEA7QAAAM6pAQDuAAAA1KkBAKEAAADaqQEA7AAAAOGpAQARIQAA56kBAB4iAADtqQEAKyIAAPGpAQC5AwAA9qkBAL8AAAD9qQEACCIAAAKqAQDvAAAAB6oBALoDAAANqgEA0CEAABKqAQC7AwAAGaoBACkjAAAeqgEAqwAAACSqAQCQIQAAKaoBAAgjAAAvqgEAHCAAADWqAQBkIgAAOKoBAAojAAA/qgEAFyIAAEaqAQDKJQAASqoBAA4gAABOqgEAOSAAAFWqAQAYIAAAW6oBADwAAABeqgEArwAAAGOqAQAUIAAAaaoBALUAAABvqgEAtwAAAEazAQASIgAAdqoBALwDAAB5qgEAByIAAH+qAQCgAAAAhKoBABMgAACKqgEAYCIAAI2qAQALIgAAkKoBAKwAAACUqgEACSIAAJqqAQCEIgAAn6oBAPEAAACmqgEAvQMAAKmqAQDzAAAAsKoBAPQAAAC2qgEAUwEAALyqAQDyAAAAw6oBAD4gAADJqgEAyQMAAM+qAQC/AwAA16oBAJUiAADdqgEAKCIAAOCqAQCqAAAA5aoBALoAAADqqgEA+AAAAPGqAQD1AAAA+KoBAJciAAD/qgEA9gAAAASrAQC2AAAACasBAAIiAAAOqwEAMCAAABWrAQClIgAAGqsBAMYDAAAeqwEAwAMAACGrAQDWAwAAJasBALEAAAAsqwEAowAAADKrAQAyIAAAOKsBAA8iAAA9qwEAHSIAAEKrAQDIAwAARqsBACIAAABLqwEA0iEAAFCrAQAaIgAAVqsBACojAABbqwEAuwAAAGGrAQCSIQAAZqsBAAkjAABsqwEAHSAAAHKrAQAcIQAAd6sBAK4AAAB7qwEACyMAAIKrAQDBAwAAhqsBAA8gAACKqwEAOiAAAJGrAQAZIAAAl6sBABogAACdqwEAYQEAAKSrAQDFIgAAqasBAKcAAACuqwEArQAAALKrAQDDAwAAuKsBAMIDAAC/qwEAPCIAAMOrAQBgJgAAyqsBAIIiAADOqwEAhiIAANOrAQARIgAA16sBAIMiAADbqwEAuQAAAOCrAQCyAAAA5asBALMAAADqqwEAhyIAAO+rAQDfAAAA9asBAMQDAAD5qwEANCIAAACsAQC4AwAABqwBANEDAAAPrAEACSAAABasAQD+AAAAHKwBANwCAAAirAEA1wAAACisAQAiIQAALqwBANEhAAAzrAEA+gAAADqsAQCRIQAAP6wBAPsAAABFrAEA+QAAAEysAQCoAAAAUKwBANIDAABWrAEAxQMAAF6sAQD8AAAAY6wBABghAABqrAEAvgMAAG2sAQD9AAAAdKwBAKUAAAB4rAEA/wAAAH2sAQC2AwAAgqwBAA0gAACGrAEADCAAAAcAAAAIAAAAAQEAAAgAAAAIAAAAAAAAAAAAAAAvAAAAEwAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAAAAAAwAAAAFAAAAAAAAAAAAAAAAAAAAAazAQAJAAAACLMBAAoAAAANswEACgAAABWzAQALAAAAG7MBAAsAAAAkswEADAAAACezAQAMAAAALbMBAA0AAAAyswEADQAAADqzAQAOAAAAP7MBAA4AAABGswEADwAAAEyzAQAPAAAAWLMBABAAAABiAAAAMQAAADIAAAAUAAAAMwAAAGMAAAA0AAAAFQAAADUAAAAIAAAABAAAAP////8AAAAAAAAAABUAAAAAAAAAAAAAAAAAAACjtAEAVV3Jf8l//wCutAEAuy3Uvq7U/wC5tAEAFHf9/cCG/wDEtAEAVV3Jf8l//wDPtAEAuy3Uvq7U/wDatAEAFHf9/cCG/wDltAEAKmb///+Z/wDwtAEAVV3Jf8l//wD7tAEAuy3Uvq7U/wAGtQEAFHf9/cCG/wARtQEAKmb///+Z/wActQEAl62wOGyw/wAntQEAVV3Jf8l//wAytQEAuy3Uvq7U/wA9tQEAFHf9/cCG/wBItQEAKmb///+Z/wBTtQEAl62wOGyw/wBetQEA6Pzw8AJ//wBptQEAVV3Jf8l//wB0tQEAuy3Uvq7U/wB/tQEAFHf9/cCG/wCKtQEAKmb///+Z/wCVtQEAl62wOGyw/wCgtQEA6Pzw8AJ//wCrtQEAEeC/v1sX/wC2tQEAVV3Jf8l//wDBtQEAuy3Uvq7U/wDMtQEAFHf9/cCG/wDXtQEAKmb///+Z/wDitQEAl62wOGyw/wDttQEA6Pzw8AJ//wD4tQEAEeC/v1sX/wADtgEAAABmZmZm/wAOtgEAkxn33uv3/wAYtgEAjkvhnsrh/wAitgEAkby9MYK9/wAstgEAnxD/7/P//wA2tgEAjy7nvdfn/wBAtgEAj3/Wa67W/wBKtgEAk9C1IXG1/wBUtgEAnxD/7/P//wBetgEAjy7nvdfn/wBotgEAj3/Wa67W/wBytgEAkby9MYK9/wB8tgEAlfGcCFGc/wCGtgEAnxD/7/P//wCQtgEAlCvvxtvv/wCatgEAjkvhnsrh/wCktgEAj3/Wa67W/wCutgEAkby9MYK9/wC4tgEAlfGcCFGc/wDCtgEAnxD/7/P//wDMtgEAlCvvxtvv/wDWtgEAjkvhnsrh/wDgtgEAj3/Wa67W/wDqtgEAkKnGQpLG/wD0tgEAk9C1IXG1/wD+tgEAl/GUCEWU/wAItwEAlAj/9/v//wAStwEAkxn33uv3/wActwEAlCvvxtvv/wAmtwEAjkvhnsrh/wAwtwEAj3/Wa67W/wA6twEAkKnGQpLG/wBEtwEAk9C1IXG1/wBOtwEAl/GUCEWU/wBYtwEAlAj/9/v//wBitwEAkxn33uv3/wBstwEAlCvvxtvv/wB2twEAjkvhnsrh/wCAtwEAj3/Wa67W/wCKtwEAkKnGQpLG/wCUtwEAk9C1IXG1/wCetwEAlfGcCFGc/wCotwEAmOtrCDBr/wCytwEAF+9UVDAF/wC8twEAd/88ADww/wDHtwEAF+yMjFEK/wDRtwEAGMK/v4Et/wDbtwEAHXDf38J9/wDltwEAHjT29ujD/wDvtwEAeSbqx+rl/wD5twEAeF/NgM3B/wADuAEAfKWXNZeP/wANuAEAfPxmAWZe/wAXuAEAF+9UVDAF/wAhuAEAfPxmAWZe/wAsuAEAd/88ADww/wA3uAEAF+yMjFEK/wBBuAEAGMK/v4Et/wBLuAEAHXDf38J9/wBVuAEAHjT29ujD/wBfuAEAAAD19fX1/wBpuAEAeSbqx+rl/wBzuAEAeF/NgM3B/wB9uAEAfKWXNZeP/wCHuAEAHIfY2LNl/wCQuAEAAAD19fX1/wCZuAEAe3+0WrSs/wCiuAEAFdempmEa/wCruAEAHXDf38J9/wC0uAEAeF/NgM3B/wC9uAEAef2FAYVx/wDGuAEAFdempmEa/wDPuAEAHXDf38J9/wDYuAEAAAD19fX1/wDhuAEAeF/NgM3B/wDquAEAef2FAYVx/wDzuAEAF+yMjFEK/wD8uAEAHIfY2LNl/wAFuQEAHjT29ujD/wAOuQEAeSbqx+rl/wAXuQEAe3+0WrSs/wAguQEAfPxmAWZe/wApuQEAF+yMjFEK/wAyuQEAHIfY2LNl/wA7uQEAHjT29ujD/wBEuQEAAAD19fX1/wBNuQEAeSbqx+rl/wBWuQEAe3+0WrSs/wBfuQEAfPxmAWZe/wBouQEAF+yMjFEK/wBxuQEAGMK/v4Et/wB6uQEAHXDf38J9/wCDuQEAHjT29ujD/wCMuQEAeSbqx+rl/wCVuQEAeF/NgM3B/wCeuQEAfKWXNZeP/wCnuQEAfPxmAWZe/wCwuQEAF+yMjFEK/wC5uQEAGMK/v4Et/wDCuQEAHXDf38J9/wDLuQEAHjT29ujD/wDUuQEAAAD19fX1/wDduQEAeSbqx+rl/wDmuQEAeF/NgM3B/wDvuQEAfKWXNZeP/wD4uQEAfPxmAWZe/wABugEAhxT55fX5/wAKugEAdUrYmdjJ/wATugEAZ7miLKJf/wAcugEAiA777fj7/wAlugEAfzbisuLi/wAuugEAcXjCZsKk/wA3ugEAYr6LI4tF/wBAugEAiA777fj7/wBJugEAfzbisuLi/wBSugEAcXjCZsKk/wBbugEAZ7miLKJf/wBkugEAZv9tAG0s/wBtugEAiA777fj7/wB2ugEAdyLszOzm/wB/ugEAdUrYmdjJ/wCIugEAcXjCZsKk/wCRugEAZ7miLKJf/wCaugEAZv9tAG0s/wCjugEAiA777fj7/wCsugEAdyLszOzm/wC1ugEAdUrYmdjJ/wC+ugEAcXjCZsKk/wDHugEAaZ+uQa52/wDQugEAYr6LI4tF/wDZugEAZv9YAFgk/wDiugEAhgb99/z9/wDrugEAhxT55fX5/wD0ugEAdyLszOzm/wD9ugEAdUrYmdjJ/wAGuwEAcXjCZsKk/wAPuwEAaZ+uQa52/wAYuwEAYr6LI4tF/wAhuwEAZv9YAFgk/wAquwEAhgb99/z9/wAzuwEAhxT55fX5/wA8uwEAdyLszOzm/wBFuwEAdUrYmdjJ/wBOuwEAcXjCZsKk/wBXuwEAaZ+uQa52/wBguwEAYr6LI4tF/wBpuwEAZv9tAG0s/wByuwEAZf9EAEQb/wB7uwEAkBT04Oz0/wCEuwEAlEbanrza/wCNuwEAxHuniFan/wCWuwEAiA777fj7/wCfuwEAkjXjs83j/wCouwEAokrGjJbG/wCxuwEAypWdiEGd/wC6uwEAiA777fj7/wDDuwEAkjXjs83j/wDMuwEAokrGjJbG/wDVuwEAxHuniFan/wDeuwEA1uGBgQ98/wDnuwEAiA777fj7/wDwuwEAlCvmv9Pm/wD5uwEAlEbanrza/wACvAEAokrGjJbG/wALvAEAxHuniFan/wAUvAEA1uGBgQ98/wAdvAEAiA777fj7/wAmvAEAlCvmv9Pm/wAvvAEAlEbanrza/wA4vAEAokrGjJbG/wBBvAEAvmSxjGux/wBKvAEAypWdiEGd/wBTvAEA1fxubgFr/wBcvAEAhgb99/z9/wBlvAEAkBT04Oz0/wBuvAEAlCvmv9Pm/wB3vAEAlEbanrza/wCAvAEAokrGjJbG/wCJvAEAvmSxjGux/wCSvAEAypWdiEGd/wCbvAEA1fxubgFr/wCkvAEAhgb99/z9/wCtvAEAkBT04Oz0/wC2vAEAlCvmv9Pm/wC/vAEAlEbanrza/wDIvAEAokrGjJbG/wDRvAEAvmSxjGux/wDavAEAypWdiEGd/wDjvAEA1uGBgQ98/wDsvAEA1f9NTQBL/wD1vAEActOeG553/wD/vAEAEvzZ2V8C/wAJvQEArV+zdXCz/wATvQEActOeG553/wAdvQEAEvzZ2V8C/wAnvQEArV+zdXCz/wAxvQEA6dHn5ymK/wA7vQEActOeG553/wBFvQEAEvzZ2V8C/wBPvQEArV+zdXCz/wBZvQEA6dHn5ymK/wBjvQEAPtCmZqYe/wBtvQEActOeG553/wB3vQEAEvzZ2V8C/wCBvQEArV+zdXCz/wCLvQEA6dHn5ymK/wCVvQEAPtCmZqYe/wCfvQEAH/zm5qsC/wCpvQEActOeG553/wCzvQEAEvzZ2V8C/wC9vQEArV+zdXCz/wDHvQEA6dHn5ymK/wDRvQEAPtCmZqYe/wDbvQEAH/zm5qsC/wDlvQEAG9KmpnYd/wDvvQEActOeG553/wD5vQEAEvzZ2V8C/wADvgEArV+zdXCz/wANvgEA6dHn5ymK/wAXvgEAPtCmZqYe/wAhvgEAH/zm5qsC/wArvgEAG9KmpnYd/wA1vgEAAABmZmZm/wA/vgEATBnz4PPb/wBIvgEAXz3dqN21/wBRvgEAjKrKQ6LK/wBavgEAQRH58Pno/wBjvgEAVy7kuuS8/wBsvgEAe2XMe8zE/wB1vgEAjcW+K4y+/wB+vgEAQRH58Pno/wCHvgEAVy7kuuS8/wCQvgEAe2XMe8zE/wCZvgEAjKrKQ6LK/wCivgEAkfOsCGis/wCrvgEAQRH58Pno/wC0vgEATSnrzOvF/wC9vgEAXz3dqN21/wDGvgEAe2XMe8zE/wDPvgEAjKrKQ6LK/wDYvgEAkfOsCGis/wDhvgEAQRH58Pno/wDqvgEATSnrzOvF/wDzvgEAXz3dqN21/wD8vgEAe2XMe8zE/wAFvwEAiaDTTrPT/wAOvwEAjcW+K4y+/wAXvwEAk/KeCFie/wAgvwEAPAz89/zw/wApvwEATBnz4PPb/wAyvwEATSnrzOvF/wA7vwEAXz3dqN21/wBEvwEAe2XMe8zE/wBNvwEAiaDTTrPT/wBWvwEAjcW+K4y+/wBfvwEAk/KeCFie/wBovwEAPAz89/zw/wBxvwEATBnz4PPb/wB6vwEATSnrzOvF/wCDvwEAXz3dqN21/wCMvwEAe2XMe8zE/wCVvwEAiaDTTrPT/wCevwEAjcW+K4y+/wCnvwEAkfOsCGis/wCwvwEAlu+BCECB/wC5vwEAShX15fXg/wDEvwEAUEjZodmb/wDPvwEAYrKjMaNU/wDavwEASQ/47fjp/wDlvwEATjbkuuSz/wDwvwEAVmjEdMR2/wD7vwEAYr6LI4tF/wAGwAEASQ/47fjp/wARwAEATjbkuuSz/wAcwAEAVmjEdMR2/wAnwAEAYrKjMaNU/wAywAEAZv9tAG0s/wA9wAEASQ/47fjp/wBIwAEATSzpx+nA/wBTwAEAUEjZodmb/wBewAEAVmjEdMR2/wBpwAEAYrKjMaNU/wB0wAEAZv9tAG0s/wB/wAEASQ/47fjp/wCKwAEATSzpx+nA/wCVwAEAUEjZodmb/wCgwAEAVmjEdMR2/wCrwAEAYJ6rQatd/wC2wAEAYr6LI4tF/wDBwAEAbP9aAFoy/wDMwAEASAf89/z1/wDXwAEAShX15fXg/wDiwAEATSzpx+nA/wDtwAEAUEjZodmb/wD4wAEAVmjEdMR2/wADwQEAYJ6rQatd/wAOwQEAYr6LI4tF/wAZwQEAbP9aAFoy/wAkwQEASAf89/z1/wAvwQEAShX15fXg/wA6wQEATSzpx+nA/wBFwQEAUEjZodmb/wBQwQEAVmjEdMR2/wBbwQEAYJ6rQatd/wBmwQEAYr6LI4tF/wBxwQEAZv9tAG0s/wB8wQEAZf9EAEQb/wCHwQEAAADw8PDw/wCRwQEAAAC9vb29/wCbwQEAAABjY2Nj/wClwQEAAAD39/f3/wCvwQEAAADMzMzM/wC5wQEAAACWlpaW/wDDwQEAAABSUlJS/wDNwQEAAAD39/f3/wDXwQEAAADMzMzM/wDhwQEAAACWlpaW/wDrwQEAAABjY2Nj/wD1wQEAAAAlJSUl/wD/wQEAAAD39/f3/wAJwgEAAADZ2dnZ/wATwgEAAAC9vb29/wAdwgEAAACWlpaW/wAnwgEAAABjY2Nj/wAxwgEAAAAlJSUl/wA7wgEAAAD39/f3/wBFwgEAAADZ2dnZ/wBPwgEAAAC9vb29/wBZwgEAAACWlpaW/wBjwgEAAABzc3Nz/wBtwgEAAABSUlJS/wB3wgEAAAAlJSUl/wCBwgEAAAD//////wCLwgEAAADw8PDw/wCVwgEAAADZ2dnZ/wCfwgEAAAC9vb29/wCpwgEAAACWlpaW/wCzwgEAAABzc3Nz/wC9wgEAAABSUlJS/wDHwgEAAAAlJSUl/wDRwgEAAAD//////wDbwgEAAADw8PDw/wDlwgEAAADZ2dnZ/wDvwgEAAAC9vb29/wD5wgEAAACWlpaW/wADwwEAAABzc3Nz/wANwwEAAABSUlJS/wAXwwEAAAAlJSUl/wAhwwEAAAAAAAAA/wArwwEAFTD+/ubO/wA3wwEAE5P9/a5r/wBDwwEADvDm5lUN/wBPwwEAEyD+/u3e/wBbwwEAFHj9/b6F/wBnwwEAEcL9/Y08/wBzwwEADf3Z2UcB/wB/wwEAEyD+/u3e/wCLwwEAFHj9/b6F/wCXwwEAEcL9/Y08/wCjwwEADvDm5lUN/wCvwwEADfqmpjYD/wC7wwEAEyD+/u3e/wDHwwEAFVv9/dCi/wDTwwEAE5P9/a5r/wDfwwEAEcL9/Y08/wDrwwEADvDm5lUN/wD3wwEADfqmpjYD/wADxAEAEyD+/u3e/wAPxAEAFVv9/dCi/wAbxAEAE5P9/a5r/wAnxAEAEcL9/Y08/wAzxAEAEOrx8WkT/wA/xAEADf3Z2UgB/wBLxAEADPeMjC0E/wBXxAEAFRT///Xr/wBjxAEAFTD+/ubO/wBvxAEAFVv9/dCi/wB7xAEAE5P9/a5r/wCHxAEAEcL9/Y08/wCTxAEAEOrx8WkT/wCfxAEADf3Z2UgB/wCrxAEADPeMjC0E/wC3xAEAFRT///Xr/wDDxAEAFTD+/ubO/wDPxAEAFVv9/dCi/wDbxAEAE5P9/a5r/wDnxAEAEcL9/Y08/wDzxAEAEOrx8WkT/wD/xAEADf3Z2UgB/wALxQEADfqmpjYD/wAXxQEADPZ/fycE/wAjxQEAGTb+/ujI/wAsxQEAE3n9/buE/wA1xQEABcXj40oz/wA+xQEAGiX+/vDZ/wBHxQEAGHP9/cyK/wBQxQEADaT8/I1Z/wBZxQEAA9rX1zAf/wBixQEAGiX+/vDZ/wBrxQEAGHP9/cyK/wB0xQEADaT8/I1Z/wB9xQEABcXj40oz/wCGxQEAAP+zswAA/wCPxQEAGiX+/vDZ/wCYxQEAGF/9/dSe/wChxQEAE3n9/buE/wCqxQEADaT8/I1Z/wCzxQEABcXj40oz/wC8xQEAAP+zswAA/wDFxQEAGiX+/vDZ/wDOxQEAGF/9/dSe/wDXxQEAE3n9/buE/wDgxQEADaT8/I1Z/wDpxQEAB7Lv72VI/wDyxQEAA9rX1zAf/wD7xQEAAP+ZmQAA/wAExgEAGBL///fs/wANxgEAGTb+/ujI/wAWxgEAGF/9/dSe/wAfxgEAE3n9/buE/wAoxgEADaT8/I1Z/wAxxgEAB7Lv72VI/wA6xgEAA9rX1zAf/wBDxgEAAP+ZmQAA/wBMxgEAGBL///fs/wBVxgEAGTb+/ujI/wBexgEAGF/9/dSe/wBnxgEAE3n9/buE/wBwxgEADaT8/I1Z/wB5xgEAB7Lv72VI/wCCxgEAA9rX1zAf/wCLxgEAAP+zswAA/wCUxgEAAP9/fwAA/wCdxgEAjkTjps7j/wCpxgEAvpmaaj2a/wC2xgEAkNO0H3i0/wDCxgEAQWHfst+K/wDOxgEAUrigM6As/wDaxgEAAGP7+5qZ/wDmxgEA/uHj4xoc/wDyxgEAF4/9/b9v/wD+xgEAFf///38A/wAKxwEAxirWyrLW/wAWxwEAjkTjps7j/wAixwEAvpmaaj2a/wAvxwEAKmb///+Z/wA8xwEAkNO0H3i0/wBIxwEAQWHfst+K/wBUxwEAUrigM6As/wBgxwEAAGP7+5qZ/wBsxwEA/uHj4xoc/wB4xwEAF4/9/b9v/wCExwEAFf///38A/wCQxwEAxirWyrLW/wCcxwEAjkTjps7j/wCoxwEAvpmaaj2a/wC1xwEAKmb///+Z/wDCxwEAD8WxsVko/wDPxwEAkNO0H3i0/wDbxwEAQWHfst+K/wDnxwEAUrigM6As/wDzxwEAAGP7+5qZ/wD/xwEA/uHj4xoc/wALyAEAF4/9/b9v/wAXyAEAFf///38A/wAjyAEAxirWyrLW/wAvyAEAjkTjps7j/wA6yAEAkNO0H3i0/wBFyAEAQWHfst+K/wBQyAEAjkTjps7j/wBbyAEAkNO0H3i0/wBmyAEAQWHfst+K/wBxyAEAUrigM6As/wB8yAEAjkTjps7j/wCHyAEAkNO0H3i0/wCSyAEAQWHfst+K/wCdyAEAUrigM6As/wCoyAEAAGP7+5qZ/wCzyAEAjkTjps7j/wC+yAEAkNO0H3i0/wDJyAEAQWHfst+K/wDUyAEAUrigM6As/wDfyAEAAGP7+5qZ/wDqyAEA/uHj4xoc/wD1yAEAjkTjps7j/wAAyQEAkNO0H3i0/wALyQEAQWHfst+K/wAWyQEAUrigM6As/wAhyQEAAGP7+5qZ/wAsyQEA/uHj4xoc/wA3yQEAF4/9/b9v/wBCyQEAjkTjps7j/wBNyQEAkNO0H3i0/wBYyQEAQWHfst+K/wBjyQEAUrigM6As/wBuyQEAAGP7+5qZ/wB5yQEA/uHj4xoc/wCEyQEAF4/9/b9v/wCPyQEAFf///38A/wCayQEAjkTjps7j/wClyQEAkNO0H3i0/wCwyQEAQWHfst+K/wC7yQEAUrigM6As/wDGyQEAAGP7+5qZ/wDRyQEA/uHj4xoc/wDcyQEAF4/9/b9v/wDnyQEAFf///38A/wDyyQEAxirWyrLW/wD9yQEAA077+7Su/wAJygEAkjXjs83j/wAVygEATSnrzOvF/wAhygEAA077+7Su/wAtygEAkjXjs83j/wA5ygEATSnrzOvF/wBFygEAyhvk3svk/wBRygEAA077+7Su/wBdygEAkjXjs83j/wBpygEATSnrzOvF/wB1ygEAyhvk3svk/wCBygEAGFj+/tmm/wCNygEAA077+7Su/wCZygEAkjXjs83j/wClygEATSnrzOvF/wCxygEAyhvk3svk/wC9ygEAGFj+/tmm/wDJygEAKjL////M/wDVygEAA077+7Su/wDhygEAkjXjs83j/wDtygEATSnrzOvF/wD5ygEAyhvk3svk/wAFywEAGFj+/tmm/wARywEAKjL////M/wAdywEAHCzl5di9/wApywEAA077+7Su/wA1ywEAkjXjs83j/wBBywEATSnrzOvF/wBNywEAyhvk3svk/wBZywEAGFj+/tmm/wBlywEAKjL////M/wBxywEAHCzl5di9/wB9ywEA6SP9/drs/wCJywEAA077+7Su/wCVywEAkjXjs83j/wChywEATSnrzOvF/wCtywEAyhvk3svk/wC5ywEAGFj+/tmm/wDFywEAKjL////M/wDRywEAHCzl5di9/wDdywEA6SP9/drs/wDpywEAAADy8vLy/wD1ywEAbDXis+LN/wABzAEAEVH9/c2s/wANzAEAmx/oy9Xo/wAZzAEAbDXis+LN/wAlzAEAEVH9/c2s/wAxzAEAmx/oy9Xo/wA9zAEA5Cv09Mrk/wBJzAEAbDXis+LN/wBVzAEAEVH9/c2s/wBhzAEAmx/oy9Xo/wBtzAEA5Cv09Mrk/wB5zAEAOC315vXJ/wCFzAEAbDXis+LN/wCRzAEAEVH9/c2s/wCdzAEAmx/oy9Xo/wCpzAEA5Cv09Mrk/wC1zAEAOC315vXJ/wDBzAEAI1H///Ku/wDNzAEAbDXis+LN/wDZzAEAEVH9/c2s/wDlzAEAmx/oy9Xo/wDxzAEA5Cv09Mrk/wD9zAEAOC315vXJ/wAJzQEAI1H///Ku/wAVzQEAGSfx8eLM/wAhzQEAbDXis+LN/wAtzQEAEVH9/c2s/wA5zQEAmx/oy9Xo/wBFzQEA5Cv09Mrk/wBRzQEAOC315vXJ/wBdzQEAI1H///Ku/wBpzQEAGSfx8eLM/wB1zQEAAADMzMzM/wCBzQEA5v2OjgFS/wCLzQEATb9kJ2QZ/wCWzQEA5tzFxRt9/wCgzQEA6Hbe3neu/wCqzQEA5T7x8bba/wC0zQEA6R39/eDv/wC+zQEAOyb15vXQ/wDIzQEAPWfhuOGG/wDSzQEAP6a8f7xB/wDczQEARMWSTZIh/wDmzQEA5v2OjgFS/wDwzQEARMWSTZIh/wD7zQEATb9kJ2QZ/wAGzgEA5tzFxRt9/wAQzgEA6Hbe3neu/wAazgEA5T7x8bba/wAkzgEA6R39/eDv/wAuzgEAAAD39/f3/wA4zgEAOyb15vXQ/wBCzgEAPWfhuOGG/wBMzgEAP6a8f7xB/wBWzgEA50zp6aPJ/wBfzgEAAAD39/f3/wBozgEAP4HXoddq/wBxzgEA5NzQ0ByL/wB6zgEA5T7x8bba/wCDzgEAPWfhuOGG/wCMzgEASMasTawm/wCVzgEA5NzQ0ByL/wCezgEA5T7x8bba/wCnzgEAAAD39/f3/wCwzgEAPWfhuOGG/wC5zgEASMasTawm/wDCzgEA5tzFxRt9/wDLzgEA50zp6aPJ/wDUzgEA6R39/eDv/wDdzgEAOyb15vXQ/wDmzgEAP4HXoddq/wDvzgEARMWSTZIh/wD4zgEA5tzFxRt9/wABzwEA50zp6aPJ/wAKzwEA6R39/eDv/wATzwEAAAD39/f3/wAczwEAOyb15vXQ/wAlzwEAP4HXoddq/wAuzwEARMWSTZIh/wA3zwEA5tzFxRt9/wBAzwEA6Hbe3neu/wBJzwEA5T7x8bba/wBSzwEA6R39/eDv/wBbzwEAOyb15vXQ/wBkzwEAPWfhuOGG/wBtzwEAP6a8f7xB/wB2zwEARMWSTZIh/wB/zwEA5tzFxRt9/wCIzwEA6Hbe3neu/wCRzwEA5T7x8bba/wCazwEA6R39/eDv/wCjzwEAAAD39/f3/wCszwEAOyb15vXQ/wC1zwEAPWfhuOGG/wC+zwEAP6a8f7xB/wDHzwEARMWSTZIh/wDQzwEAzv9LQABL/wDazwEAZf9EAEQb/wDlzwEAzq2DdiqD/wDvzwEAx1ermXCr/wD5zwEAxzPPwqXP/wAD0AEA0hXo59To/wAN0AEATB7w2fDT/wAX0AEAUETbptug/wAh0AEAWHuuWq5h/wAr0AEAYcV4G3g3/wA10AEAzv9LQABL/wA/0AEAYcV4G3g3/wBK0AEAZf9EAEQb/wBV0AEAzq2DdiqD/wBf0AEAx1ermXCr/wBp0AEAxzPPwqXP/wBz0AEA0hXo59To/wB90AEAAAD39/f3/wCH0AEATB7w2fDT/wCR0AEAUETbptug/wCb0AEAWHuuWq5h/wCl0AEAxEbDr43D/wCu0AEAAAD39/f3/wC30AEAUlq/f797/wDA0AEAyaiUezKU/wDJ0AEAxzPPwqXP/wDS0AEAUETbptug/wDb0AEAZv+IAIg3/wDk0AEAyaiUezKU/wDt0AEAxzPPwqXP/wD20AEAAAD39/f3/wD/0AEAUETbptug/wAI0QEAZv+IAIg3/wAR0QEAzq2DdiqD/wAa0QEAxEbDr43D/wAj0QEA0hXo59To/wAs0QEATB7w2fDT/wA10QEAUlq/f797/wA+0QEAYcV4G3g3/wBH0QEAzq2DdiqD/wBQ0QEAxEbDr43D/wBZ0QEA0hXo59To/wBi0QEAAAD39/f3/wBr0QEATB7w2fDT/wB00QEAUlq/f797/wB90QEAYcV4G3g3/wCG0QEAzq2DdiqD/wCP0QEAx1ermXCr/wCY0QEAxzPPwqXP/wCh0QEA0hXo59To/wCq0QEATB7w2fDT/wCz0QEAUETbptug/wC80QEAWHuuWq5h/wDF0QEAYcV4G3g3/wDO0QEAzq2DdiqD/wDX0QEAx1ermXCr/wDg0QEAxzPPwqXP/wDp0QEA0hXo59To/wDy0QEAAAD39/f3/wD70QEATB7w2fDT/wAE0gEAUETbptug/wAN0gEAWHuuWq5h/wAW0gEAYcV4G3g3/wAf0gEAvQvy7Ofy/wAo0gEAlz3bpr3b/wAx0gEAjcW+K4y+/wA60gEAuQj28e72/wBD0gEAmyjhvcnh/wBM0gEAkXDPdKnP/wBV0gEAj/ewBXCw/wBe0gEAuQj28e72/wBn0gEAmyjhvcnh/wBw0gEAkXDPdKnP/wB50gEAjcW+K4y+/wCC0gEAj/eNBFqN/wCL0gEAuQj28e72/wCU0gEAqBjm0NHm/wCd0gEAlz3bpr3b/wCm0gEAkXDPdKnP/wCv0gEAjcW+K4y+/wC40gEAj/eNBFqN/wDB0gEAuQj28e72/wDK0gEAqBjm0NHm/wDT0gEAlz3bpr3b/wDc0gEAkXDPdKnP/wDl0gEAjrfANpDA/wDu0gEAj/ewBXCw/wD30gEAj/h7A057/wAA0wEA6Qj///f7/wAJ0wEAvQvy7Ofy/wAS0wEAqBjm0NHm/wAb0wEAlz3bpr3b/wAk0wEAkXDPdKnP/wAt0wEAjrfANpDA/wA20wEAj/ewBXCw/wA/0wEAj/h7A057/wBI0wEA6Qj///f7/wBR0wEAvQvy7Ofy/wBa0wEAqBjm0NHm/wBj0wEAlz3bpr3b/wBs0wEAkXDPdKnP/wB10wEAjrfANpDA/wB+0wEAj/ewBXCw/wCH0wEAj/eNBFqN/wCQ0wEAj/lYAjhY/wCZ0wEAyA7w7OLw/wCk0wEAlz3bpr3b/wCv0wEAgtCZHJCZ/wC60wEAzwj39u/3/wDF0wEAmyjhvcnh/wDQ0wEAj4DPZ6nP/wDb0wEAgvuKAoGK/wDm0wEAzwj39u/3/wDx0wEAmyjhvcnh/wD80wEAj4DPZ6nP/wAH1AEAgtCZHJCZ/wAS1AEAd/xsAWxZ/wAd1AEAzwj39u/3/wAo1AEAqBjm0NHm/wAz1AEAlz3bpr3b/wA+1AEAj4DPZ6nP/wBJ1AEAgtCZHJCZ/wBU1AEAd/xsAWxZ/wBf1AEAzwj39u/3/wBq1AEAqBjm0NHm/wB11AEAlz3bpr3b/wCA1AEAj4DPZ6nP/wCL1AEAjrfANpDA/wCW1AEAgvuKAoGK/wCh1AEAdvxkAWRQ/wCs1AEA6Qj///f7/wC31AEAyA7w7OLw/wDC1AEAqBjm0NHm/wDN1AEAlz3bpr3b/wDY1AEAj4DPZ6nP/wDj1AEAjrfANpDA/wDu1AEAgvuKAoGK/wD51AEAdvxkAWRQ/wAE1QEA6Qj///f7/wAP1QEAyA7w7OLw/wAa1QEAqBjm0NHm/wAl1QEAlz3bpr3b/wAw1QEAj4DPZ6nP/wA71QEAjrfANpDA/wBG1QEAgvuKAoGK/wBR1QEAd/xsAWxZ/wBc1QEAdftGAUY2/wBn1QEAEu5/fzsI/wBx1QEAw/9LLQBL/wB81QEAFPazs1gG/wCG1QEAFujg4IIU/wCQ1QEAF5v9/bhj/wCa1QEAGEj+/uC2/wCk1QEApRTr2Nrr/wCu1QEAsS/SsqvS/wC41QEAs1SsgHOs/wDC1QEAvbWIVCeI/wDM1QEAEu5/fzsI/wDW1QEAvbWIVCeI/wDh1QEAw/9LLQBL/wDs1QEAFPazs1gG/wD21QEAFujg4IIU/wAA1gEAF5v9/bhj/wAK1gEAGEj+/uC2/wAU1gEAAAD39/f3/wAe1gEApRTr2Nrr/wAo1gEAsS/SsqvS/wAy1gEAs1SsgHOs/wA81gEAF7vx8aNA/wBF1gEAAAD39/f3/wBO1gEAskXDmY7D/wBX1gEAEf3m5mEB/wBg1gEAF5v9/bhj/wBp1gEAsS/SsqvS/wBy1gEAuZuZXjyZ/wB71gEAEf3m5mEB/wCE1gEAF5v9/bhj/wCN1gEAAAD39/f3/wCW1gEAsS/SsqvS/wCf1gEAuZuZXjyZ/wCo1gEAFPazs1gG/wCx1gEAF7vx8aNA/wC61gEAGEj+/uC2/wDD1gEApRTr2Nrr/wDM1gEAskXDmY7D/wDV1gEAvbWIVCeI/wDe1gEAFPazs1gG/wDn1gEAF7vx8aNA/wDw1gEAGEj+/uC2/wD51gEAAAD39/f3/wAC1wEApRTr2Nrr/wAL1wEAskXDmY7D/wAU1wEAvbWIVCeI/wAd1wEAFPazs1gG/wAm1wEAFujg4IIU/wAv1wEAF5v9/bhj/wA41wEAGEj+/uC2/wBB1wEApRTr2Nrr/wBK1wEAsS/SsqvS/wBT1wEAs1SsgHOs/wBc1wEAvbWIVCeI/wBl1wEAFPazs1gG/wBu1wEAFujg4IIU/wB31wEAF5v9/bhj/wCA1wEAGEj+/uC2/wCJ1wEAAAD39/f3/wCS1wEApRTr2Nrr/wCb1wEAsS/SsqvS/wCk1wEAs1SsgHOs/wCt1wEAvbWIVCeI/wC21wEAvA7v5+Hv/wC/1wEA1kPJyZTH/wDI1wEA6t7d3Rx3/wDR1wEAuQj28e72/wDa1wEA0ynY17XY/wDj1wEA5Ivf32Ww/wDs1wEA7+jOzhJW/wD11wEAuQj28e72/wD+1wEA0ynY17XY/wAH2AEA5Ivf32Ww/wAQ2AEA6t7d3Rx3/wAZ2AEA7P+YmABD/wAi2AEAuQj28e72/wAr2AEAzCba1Lna/wA02AEA1kPJyZTH/wA92AEA5Ivf32Ww/wBG2AEA6t7d3Rx3/wBP2AEA7P+YmABD/wBY2AEAuQj28e72/wBh2AEAzCba1Lna/wBq2AEA1kPJyZTH/wBz2AEA5Ivf32Ww/wB82AEA6dHn5ymK/wCF2AEA7+jOzhJW/wCO2AEA7P+RkQA//wCX2AEAwwX59/T5/wCg2AEAvA7v5+Hv/wCp2AEAzCba1Lna/wCy2AEA1kPJyZTH/wC72AEA5Ivf32Ww/wDE2AEA6dHn5ymK/wDN2AEA7+jOzhJW/wDW2AEA7P+RkQA//wDf2AEAwwX59/T5/wDo2AEAvA7v5+Hv/wDx2AEAzCba1Lna/wD62AEA1kPJyZTH/wAD2QEA5Ivf32Ww/wAM2QEA6dHn5ymK/wAV2QEA7+jOzhJW/wAe2QEA7P+YmABD/wAn2QEA8v9nZwAf/wAw2QEAtAj17+31/wA82QEAqCXcvL3c/wBI2QEAsGSxdWux/wBU2QEAtgf38vD3/wBg2QEArRziy8ni/wBs2QEArTrInprI/wB42QEAtoCjalGj/wCE2QEAtgf38vD3/wCQ2QEArRziy8ni/wCc2QEArTrInprI/wCo2QEAsGSxdWux/wC02QEAvLmPVCeP/wDA2QEAtgf38vD3/wDM2QEAqhLr2trr/wDY2QEAqCXcvL3c/wDk2QEArTrInprI/wDw2QEAsGSxdWux/wD82QEAvLmPVCeP/wAI2gEAtgf38vD3/wAU2gEAqhLr2trr/wAg2gEAqCXcvL3c/wAs2gEArTrInprI/wA42gEArFO6gH26/wBE2gEAtoCjalGj/wBQ2gEAvtiGShSG/wBc2gEAvwL9/Pv9/wBo2gEAtAj17+31/wB02gEAqhLr2trr/wCA2gEAqCXcvL3c/wCM2gEArTrInprI/wCY2gEArFO6gH26/wCk2gEAtoCjalGj/wCw2gEAvtiGShSG/wC82gEAvwL9/Pv9/wDI2gEAtAj17+31/wDU2gEAqhLr2trr/wDg2gEAqCXcvL3c/wDs2gEArTrInprI/wD42gEArFO6gH26/wAE2wEAtoCjalGj/wAQ2wEAvLmPVCeP/wAc2wEAv/99PwB9/wAo2wEA8v9nZwAf/wAy2wEAlvFhBTBh/wA92wEA+dyyshgr/wBH2wEABaPW1mBN/wBR2wEADXf09KWC/wBb2wEADzb9/dvH/wBl2wEAjiDw0eXw/wBv2wEAjVfeksXe/wB52wEAj6fDQ5PD/wCD2wEAlM6sIWas/wCN2wEA8v9nZwAf/wCX2wEAlM6sIWas/wCi2wEAlvFhBTBh/wCt2wEA+dyyshgr/wC32wEABaPW1mBN/wDB2wEADXf09KWC/wDL2wEADzb9/dvH/wDV2wEAAAD39/f3/wDf2wEAjiDw0eXw/wDp2wEAjVfeksXe/wDz2wEAj6fDQ5PD/wD92wEADJbv74pi/wAG3AEAAAD39/f3/wAP3AEAj4DPZ6nP/wAY3AEA+P/KygAg/wAh3AEADXf09KWC/wAq3AEAjVfeksXe/wAz3AEAj/ewBXGw/wA83AEA+P/KygAg/wBF3AEADXf09KWC/wBO3AEAAAD39/f3/wBX3AEAjVfeksXe/wBg3AEAj/ewBXGw/wBp3AEA+dyyshgr/wBy3AEADJbv74pi/wB73AEADzb9/dvH/wCE3AEAjiDw0eXw/wCN3AEAj4DPZ6nP/wCW3AEAlM6sIWas/wCf3AEA+dyyshgr/wCo3AEADJbv74pi/wCx3AEADzb9/dvH/wC63AEAAAD39/f3/wDD3AEAjiDw0eXw/wDM3AEAj4DPZ6nP/wDV3AEAlM6sIWas/wDe3AEA+dyyshgr/wDn3AEABaPW1mBN/wDw3AEADXf09KWC/wD53AEADzb9/dvH/wAC3QEAjiDw0eXw/wAL3QEAjVfeksXe/wAU3QEAj6fDQ5PD/wAd3QEAlM6sIWas/wAm3QEA+dyyshgr/wAv3QEABaPW1mBN/wA43QEADXf09KWC/wBB3QEADzb9/dvH/wBK3QEAAAD39/f3/wBT3QEAjiDw0eXw/wBc3QEAjVfeksXe/wBl3QEAj6fDQ5PD/wBu3QEAlM6sIWas/wB33QEA8v9nZwAf/wCB3QEAAAAaGhoa/wCM3QEA+dyyshgr/wCW3QEABaPW1mBN/wCg3QEADXf09KWC/wCq3QEADzb9/dvH/wC03QEAAADg4ODg/wC+3QEAAAC6urq6/wDI3QEAAACHh4eH/wDS3QEAAABNTU1N/wDc3QEA8v9nZwAf/wDm3QEAAABNTU1N/wDx3QEAAAAaGhoa/wD83QEA+dyyshgr/wAG3gEABaPW1mBN/wAQ3gEADXf09KWC/wAa3gEADzb9/dvH/wAk3gEAAAD//////wAu3gEAAADg4ODg/wA43gEAAAC6urq6/wBC3gEAAACHh4eH/wBM3gEADJbv74pi/wBV3gEAAAD//////wBe3gEAAACZmZmZ/wBn3gEA+P/KygAg/wBw3gEADXf09KWC/wB53gEAAAC6urq6/wCC3gEAAABAQEBA/wCL3gEA+P/KygAg/wCU3gEADXf09KWC/wCd3gEAAAD//////wCm3gEAAAC6urq6/wCv3gEAAABAQEBA/wC43gEA+dyyshgr/wDB3gEADJbv74pi/wDK3gEADzb9/dvH/wDT3gEAAADg4ODg/wDc3gEAAACZmZmZ/wDl3gEAAABNTU1N/wDu3gEA+dyyshgr/wD33gEADJbv74pi/wAA3wEADzb9/dvH/wAJ3wEAAAD//////wAS3wEAAADg4ODg/wAb3wEAAACZmZmZ/wAk3wEAAABNTU1N/wAt3wEA+dyyshgr/wA23wEABaPW1mBN/wA/3wEADXf09KWC/wBI3wEADzb9/dvH/wBR3wEAAADg4ODg/wBa3wEAAAC6urq6/wBj3wEAAACHh4eH/wBs3wEAAABNTU1N/wB13wEA+dyyshgr/wB+3wEABaPW1mBN/wCH3wEADXf09KWC/wCQ3wEADzb9/dvH/wCZ3wEAAAD//////wCi3wEAAADg4ODg/wCr3wEAAAC6urq6/wC03wEAAACHh4eH/wC93wEAAABNTU1N/wDG3wEAAyD9/eDd/wDP3wEA9Fz6+p+1/wDY3wEA49zFxRuK/wDh3wEADRz+/uvi/wDq3wEA/Ej7+7S5/wDz3wEA7pP392ih/wD83wEA4P2urgF+/wAF4AEADRz+/uvi/wAO4AEA/Ej7+7S5/wAX4AEA7pP392ih/wAg4AEA49zFxRuK/wAp4AEA1fx6egF3/wAy4AEADRz+/uvi/wA74AEAAzz8/MXA/wBE4AEA9Fz6+p+1/wBN4AEA7pP392ih/wBW4AEA49zFxRuK/wBf4AEA1fx6egF3/wBo4AEADRz+/uvi/wBx4AEAAzz8/MXA/wB64AEA9Fz6+p+1/wCD4AEA7pP392ih/wCM4AEA5sPd3TSX/wCV4AEA4P2urgF+/wCe4AEA1fx6egF3/wCn4AEADgz///fz/wCw4AEAAyD9/eDd/wC54AEAAzz8/MXA/wDC4AEA9Fz6+p+1/wDL4AEA7pP392ih/wDU4AEA5sPd3TSX/wDd4AEA4P2urgF+/wDm4AEA1fx6egF3/wDv4AEADgz///fz/wD44AEAAyD9/eDd/wAB4QEAAzz8/MXA/wAK4QEA9Fz6+p+1/wAT4QEA7pP392ih/wAc4QEA5sPd3TSX/wAl4QEA4P2urgF+/wAu4QEA1fx6egF3/wA34QEAx/9qSQBq/wBA4QEA9f+lpQAm/wBM4QEAp6uVMTaV/wBZ4QEAAtDX1zAn/wBl4QEACrj09G1D/wBx4QEAFJ39/a5h/wB94QEAHm7+/uCQ/wCJ4QEAiBj44PP4/wCV4QEAikPpq9np/wCh4QEAj3HRdK3R/wCt4QEAl520RXW0/wC54QEA9f+lpQAm/wDF4QEAl520RXW0/wDS4QEAp6uVMTaV/wDf4QEAAtDX1zAn/wDr4QEACrj09G1D/wD34QEAFJ39/a5h/wAD4gEAHm7+/uCQ/wAP4gEAKkD///+//wAb4gEAiBj44PP4/wAn4gEAikPpq9np/wAz4gEAj3HRdK3R/wA/4gEADaT8/I1Z/wBK4gEAKkD///+//wBV4gEAj1bbkb/b/wBg4gEA/uHX1xkc/wBr4gEAFJ39/a5h/wB24gEAikPpq9np/wCB4gEAkcG2LHu2/wCM4gEA/uHX1xkc/wCX4gEAFJ39/a5h/wCi4gEAKkD///+//wCt4gEAikPpq9np/wC44gEAkcG2LHu2/wDD4gEAAtDX1zAn/wDO4gEADaT8/I1Z/wDZ4gEAHm7+/uCQ/wDk4gEAiBj44PP4/wDv4gEAj1bbkb/b/wD64gEAl520RXW0/wAF4wEAAtDX1zAn/wAQ4wEADaT8/I1Z/wAb4wEAHm7+/uCQ/wAm4wEAKkD///+//wAx4wEAiBj44PP4/wA84wEAj1bbkb/b/wBH4wEAl520RXW0/wBS4wEAAtDX1zAn/wBd4wEACrj09G1D/wBo4wEAFJ39/a5h/wBz4wEAHm7+/uCQ/wB+4wEAiBj44PP4/wCJ4wEAikPpq9np/wCU4wEAj3HRdK3R/wCf4wEAl520RXW0/wCq4wEAAtDX1zAn/wC14wEACrj09G1D/wDA4wEAFJ39/a5h/wDL4wEAHm7+/uCQ/wDW4wEAKkD///+//wDh4wEAiBj44PP4/wDs4wEAikPpq9np/wD34wEAj3HRdK3R/wAC5AEAl520RXW0/wAN5AEA9f+lpQAm/wAZ5AEAa/9oAGg3/wAm5AEAAtDX1zAn/wAy5AEACrj09G1D/wA+5AEAFJ39/a5h/wBK5AEAH3P+/uCL/wBW5AEAM2rv2e+L/wBi5AEAPoLZptlq/wBu5AEAU3m9Zr1j/wB65AEAZ9OYGphQ/wCG5AEA9f+lpQAm/wCS5AEAZ9OYGphQ/wCf5AEAa/9oAGg3/wCs5AEAAtDX1zAn/wC45AEACrj09G1D/wDE5AEAFJ39/a5h/wDQ5AEAH3P+/uCL/wDc5AEAKkD///+//wDo5AEAM2rv2e+L/wD05AEAPoLZptlq/wAA5QEAU3m9Zr1j/wAM5QEADaT8/I1Z/wAX5QEAKkD///+//wAi5QEAQojPkc9g/wAt5QEA/uHX1xkc/wA45QEAFJ39/a5h/wBD5QEAPoLZptlq/wBO5QEAYtKWGpZB/wBZ5QEA/uHX1xkc/wBk5QEAFJ39/a5h/wBv5QEAKkD///+//wB65QEAPoLZptlq/wCF5QEAYtKWGpZB/wCQ5QEAAtDX1zAn/wCb5QEADaT8/I1Z/wCm5QEAH3P+/uCL/wCx5QEAM2rv2e+L/wC85QEAQojPkc9g/wDH5QEAZ9OYGphQ/wDS5QEAAtDX1zAn/wDd5QEADaT8/I1Z/wDo5QEAH3P+/uCL/wDz5QEAKkD///+//wD+5QEAM2rv2e+L/wAJ5gEAQojPkc9g/wAU5gEAZ9OYGphQ/wAf5gEAAtDX1zAn/wAq5gEACrj09G1D/wA15gEAFJ39/a5h/wBA5gEAH3P+/uCL/wBL5gEAM2rv2e+L/wBW5gEAPoLZptlq/wBh5gEAU3m9Zr1j/wBs5gEAZ9OYGphQ/wB35gEAAtDX1zAn/wCC5gEACrj09G1D/wCN5gEAFJ39/a5h/wCY5gEAH3P+/uCL/wCj5gEAKkD///+//wCu5gEAM2rv2e+L/wC55gEAPoLZptlq/wDE5gEAU3m9Zr1j/wDP5gEAZ9OYGphQ/wDa5gEADSz+/uDS/wDj5gEACYv8/JJy/wDs5gEAAdPe3i0m/wD15gEADSX+/uXZ/wD+5gEAC2z8/K6R/wAH5wEAB7P7+2pK/wAQ5wEA/eDLyxgd/wAZ5wEADSX+/uXZ/wAi5wEAC2z8/K6R/wAr5wEAB7P7+2pK/wA05wEAAdPe3i0m/wA95wEA/eelpQ8V/wBG5wEADSX+/uXZ/wBP5wEADFz8/Luh/wBY5wEACYv8/JJy/wBh5wEAB7P7+2pK/wBq5wEAAdPe3i0m/wBz5wEA/eelpQ8V/wB85wEADSX+/uXZ/wCF5wEADFz8/Luh/wCO5wEACYv8/JJy/wCX5wEAB7P7+2pK/wCg5wEAA9Dv7zss/wCp5wEA/eDLyxgd/wCy5wEA+/+ZmQAN/wC75wEADg////Xw/wDE5wEADSz+/uDS/wDN5wEADFz8/Luh/wDW5wEACYv8/JJy/wDf5wEAB7P7+2pK/wDo5wEAA9Dv7zss/wDx5wEA/eDLyxgd/wD65wEA+/+ZmQAN/wAD6AEADg////Xw/wAM6AEADSz+/uDS/wAV6AEADFz8/Luh/wAe6AEACYv8/JJy/wAn6AEAB7P7+2pK/wAw6AEAA9Dv7zss/wA56AEA/eDLyxgd/wBC6AEA/eelpQ8V/wBL6AEA+f9nZwAN/wBU6AEA/uHk5Boc/wBd6AEAkrK4N364/wBm6AEAU5OvTa9K/wBv6AEA/uHk5Boc/wB46AEAkrK4N364/wCB6AEAU5OvTa9K/wCK6AEAz4SjmE6j/wCT6AEA/uHk5Boc/wCc6AEAkrK4N364/wCl6AEAU5OvTa9K/wCu6AEAz4SjmE6j/wC36AEAFf///38A/wDA6AEA/uHk5Boc/wDJ6AEAkrK4N364/wDS6AEAU5OvTa9K/wDb6AEAz4SjmE6j/wDk6AEAFf///38A/wDt6AEAKsz///8z/wD26AEA/uHk5Boc/wD/6AEAkrK4N364/wAI6QEAU5OvTa9K/wAR6QEAz4SjmE6j/wAa6QEAFf///38A/wAj6QEAKsz///8z/wAs6QEAD8GmplYo/wA16QEA/uHk5Boc/wA+6QEAkrK4N364/wBH6QEAU5OvTa9K/wBQ6QEAz4SjmE6j/wBZ6QEAFf///38A/wBi6QEAKsz///8z/wBr6QEAD8GmplYo/wB06QEA6Hn394G//wB96QEA/uHk5Boc/wCG6QEAkrK4N364/wCP6QEAU5OvTa9K/wCY6QEAz4SjmE6j/wCh6QEAFf///38A/wCq6QEAKsz///8z/wCz6QEAD8GmplYo/wC86QEA6Hn394G//wDF6QEAAACZmZmZ/wDO6QEAcnjCZsKl/wDX6QEAC5v8/I1i/wDg6QEAnE3LjaDL/wDp6QEAcnjCZsKl/wDy6QEAC5v8/I1i/wD76QEAnE3LjaDL/wAE6gEA5Gbn54rD/wAN6gEAcnjCZsKl/wAW6gEAC5v8/I1i/wAf6gEAnE3LjaDL/wAo6gEA5Gbn54rD/wAx6gEAOpvYpthU/wA66gEAcnjCZsKl/wBD6gEAC5v8/I1i/wBM6gEAnE3LjaDL/wBV6gEA5Gbn54rD/wBe6gEAOpvYpthU/wBn6gEAItD//9kv/wBw6gEAcnjCZsKl/wB56gEAC5v8/I1i/wCC6gEAnE3LjaDL/wCL6gEA5Gbn54rD/wCU6gEAOpvYpthU/wCd6gEAItD//9kv/wCm6gEAGVrl5cSU/wCv6gEAcnjCZsKl/wC46gEAC5v8/I1i/wDB6gEAnE3LjaDL/wDK6gEA5Gbn54rD/wDT6gEAOpvYpthU/wDc6gEAItD//9kv/wDl6gEAGVrl5cSU/wDu6gEAAACzs7Oz/wD36gEAeFTTjdPH/wAB6wEA01K9vIC9/wAM6wEAKkz///+z/wAW6wEAryXavrra/wAg6wEABIv7+4By/wAq6wEAkGTTgLHT/wA06wEAFpz9/bRi/wA+6wEAOobes95p/wBI6wEA6S/8/M3l/wBS6wEAAADZ2dnZ/wBc6wEAeFTTjdPH/wBm6wEA01K9vIC9/wBx6wEATSnrzOvF/wB86wEAKkz///+z/wCG6wEAryXavrra/wCQ6wEABIv7+4By/wCa6wEAkGTTgLHT/wCk6wEAFpz9/bRi/wCu6wEAOobes95p/wC46wEA6S/8/M3l/wDC6wEAAADZ2dnZ/wDM6wEAeFTTjdPH/wDW6wEA01K9vIC9/wDh6wEATSnrzOvF/wDs6wEAJZD//+1v/wD36wEAKkz///+z/wAB7AEAryXavrra/wAL7AEABIv7+4By/wAV7AEAkGTTgLHT/wAf7AEAFpz9/bRi/wAp7AEAOobes95p/wAz7AEA6S/8/M3l/wA97AEAAADZ2dnZ/wBH7AEAeFTTjdPH/wBQ7AEAKkz///+z/wBZ7AEAryXavrra/wBi7AEAeFTTjdPH/wBr7AEAKkz///+z/wB07AEAryXavrra/wB97AEABIv7+4By/wCG7AEAeFTTjdPH/wCP7AEAKkz///+z/wCY7AEAryXavrra/wCh7AEABIv7+4By/wCq7AEAkGTTgLHT/wCz7AEAeFTTjdPH/wC87AEAKkz///+z/wDF7AEAryXavrra/wDO7AEABIv7+4By/wDX7AEAkGTTgLHT/wDg7AEAFpz9/bRi/wDp7AEAeFTTjdPH/wDy7AEAKkz///+z/wD77AEAryXavrra/wAE7QEABIv7+4By/wAN7QEAkGTTgLHT/wAW7QEAFpz9/bRi/wAf7QEAOobes95p/wAo7QEAeFTTjdPH/wAx7QEAKkz///+z/wA67QEAryXavrra/wBD7QEABIv7+4By/wBM7QEAkGTTgLHT/wBV7QEAFpz9/bRi/wBe7QEAOobes95p/wBn7QEA6S/8/M3l/wBw7QEAeFTTjdPH/wB57QEAKkz///+z/wCC7QEAryXavrra/wCL7QEABIv7+4By/wCU7QEAkGTTgLHT/wCd7QEAFpz9/bRi/wCm7QEAOobes95p/wCv7QEA6S/8/M3l/wC47QEAAADZ2dnZ/wDB7QEA7f2engFC/wDP7QEAsYKiXk+i/wDe7QEA+rTV1T5P/wDs7QEACrj09G1D/wD67QEAFJ39/a5h/wAI7gEAH3P+/uCL/wAW7gEAMWD15vWY/wAk7gEAT0Hdq92k/wAy7gEAcnjCZsKl/wBA7gEAj7u9Moi9/wBO7gEA7f2engFC/wBc7gEAj7u9Moi9/wBr7gEAsYKiXk+i/wB67gEA+rTV1T5P/wCI7gEACrj09G1D/wCW7gEAFJ39/a5h/wCk7gEAH3P+/uCL/wCy7gEAKkD///+//wDA7gEAMWD15vWY/wDO7gEAT0Hdq92k/wDc7gEAcnjCZsKl/wDq7gEADaT8/I1Z/wD37gEAKkD///+//wAE7wEAUU3VmdWU/wAR7wEA/uHX1xkc/wAe7wEAFJ39/a5h/wAr7wEAT0Hdq92k/wA47wEAj8S6K4O6/wBF7wEA/uHX1xkc/wBS7wEAFJ39/a5h/wBf7wEAKkD///+//wBs7wEAT0Hdq92k/wB57wEAj8S6K4O6/wCG7wEA+rTV1T5P/wCT7wEADaT8/I1Z/wCg7wEAH3P+/uCL/wCt7wEAMWD15vWY/wC67wEAUU3VmdWU/wDH7wEAj7u9Moi9/wDU7wEA+rTV1T5P/wDh7wEADaT8/I1Z/wDu7wEAH3P+/uCL/wD77wEAKkD///+//wAI8AEAMWD15vWY/wAV8AEAUU3VmdWU/wAi8AEAj7u9Moi9/wAv8AEA+rTV1T5P/wA88AEACrj09G1D/wBJ8AEAFJ39/a5h/wBW8AEAH3P+/uCL/wBj8AEAMWD15vWY/wBw8AEAT0Hdq92k/wB98AEAcnjCZsKl/wCK8AEAj7u9Moi9/wCX8AEA+rTV1T5P/wCk8AEACrj09G1D/wCx8AEAFJ39/a5h/wC+8AEAH3P+/uCL/wDL8AEAKkD///+//wDY8AEAMWD15vWY/wDl8AEAT0Hdq92k/wDy8AEAcnjCZsKl/wD/8AEAj7u9Moi9/wAM8QEAkw//8Pj//wAb8QEAGCP6+uvX/wAt8QEAf///AP///wA38QEAcYD/f//U/wBH8QEAfw//8P///wBS8QEAKhr19fXc/wBd8QEAFzr//+TE/wBp8QEAAAAAAAAA/wB08QEAGTH//+vN/wCI8QEAqv//AAD//wCS8QEAwM7iiivi/wCi8QEAAL6lpSoq/wCt8QEAF2Pe3riH/wC88QEAgGegX56g/wDL8QEAP///f/8A/wDb8QEAEdrS0mke/wDq8QEAC6///39Q/wD18QEAmpPtZJXt/wAJ8gEAISL///jc/wAX8gEA9ufc3BQ8/wAk8gEAf///AP///wAu8gEAqv+LAACL/wA88gEAf/+LAIuL/wBK8gEAHu+4uIYL/wBd8gEAAACpqamp/wBr8gEAVf9kAGQA/wB68gEAAACpqamp/wCI8gEAJ269vbdr/wCX8gEA1P+LiwCL/wCo8gEAOo5rVWsv/wC88gEAF////4wA/wDM8gEAxsDMmTLM/wDc8gEAAP+LiwAA/wDp8gEACnnp6ZZ6/wD58gEAVT28j7yP/wAL8wEAr4+LSD2L/wAe8wEAf2dPL09P/wAx8wEAf2dPL09P/wBE8wEAgP/RAM7R/wBX8wEAx//TlADT/wBn8wEA6Ov//xST/wB18wEAiv//AL///wCG8wEAAABpaWlp/wCT8wEAAABpaWlp/wCg8wEAlOH/HpD//wCw8wEAAM6ysiIi/wC/8wEAHA////rw/wDQ8wEAVcCLIosi/wDh8wEA1P///wD//wDu8wEAAADc3Nzc/wD98wEAqgf/+Pj//wAN9AEAI////9cA/wAX9AEAHtna2qUg/wAm9AEAAACAgICA/wAw9AEAVf+AAIAA/wA79AEAO9D/rf8v/wBM9AEAAACAgICA/wBW9AEAVQ//8P/w/wBk9AEA6Zb//2m0/wBx9AEAAIzNzVxc/wCA9AEAwv+CSwCC/wCM9AEAKg/////w/wCX9AEAJmrw8OaM/wCi9AEAqhT65ub6/wCw9AEA8A////D1/wDD9AEAQP/8fPwA/wDS9AEAJjH///rN/wDk9AEAiT/mrdjm/wDz9AEAAHfw8ICA/wAD9QEAfx//4P///wAS9QEAKij6+vrS/wAs9QEAAADT09PT/wA79QEAVWTukO6Q/wBL9QEAAADT09PT/wBa9QEA+En//7bB/wBp9QEADIT//6B6/wB69QEAfdGyILKq/wCN9QEAj3X6h876/wCf9QEAlDiZd4iZ/wCz9QEAlDiZd4iZ/wDH9QEAlzTesMTe/wDb9QEAKh/////g/wDs9QEAVf//AP8A/wD29QEAVcDNMs0y/wAF9gEAFRT6+vDm/wAQ9gEA1P///wD//wAd9gEAAP+AgAAA/wAp9gEAcYDNZs2q/wA/9gEAqv/NAADN/wBP9gEAzJjTulXT/wBh9gEAt3zbk3Db/wBz9gEAZ6mzPLNx/wCH9gEAsI/ue2ju/wCc9gEAb//6APqa/wCz9gEAfafRSNHM/wDI9gEA5OTHxxWF/wDd9gEAqsZwGRlw/wDv9gEAagn/9f/6/wD+9gEABB7//+Th/wAN9wEAGkn//+S1/wAb9wEAGVH//96t/wAs9wEAqv+AAACA/wA29wEAGxf9/fXm/wBD9wEAKv+AgIAA/wBO9wEAOMCOa44j/wBd9wEAG////6UA/wBp9wEAC////0UA/wB49wEA1nva2nDW/wCE9wEAJkju7uiq/wCX9wEAVWT7mPuY/wCm9wEAf0Pur+7u/wC59wEA8Xzb23CT/wDM9wEAGin//+/V/wDc9wEAFEb//9q5/wDr9wEAFLDNzYU//wD19wEA9z///8DL/wD/9wEA1Ebd3aDd/wAJ+AEAhDvmsODm/wAZ+AEA1P+AgACA/wAl+AEAAP///wAA/wAu+AEAAD28vI+P/wA9+AEAn7XhQWnh/wBM+AEAEdyLi0UT/wBd+AEABIr6+oBy/wBp+AEAE5r09KRg/wB5+AEAZ6qLLotX/wCH+AEAERD///Xu/wCV+AEADbegoFIt/wCh+AEAAADAwMDA/wCt+AEAi2zrh87r/wC6+AEAr4/NalrN/wDJ+AEAlDiQcICQ/wDY+AEAlDiQcICQ/wDn+AEAAAX///r6/wDx+AEAav//AP9//wAC+QEAkpu0RoK0/wAR+QEAGFTS0rSM/wAa+QEAf/+AAICA/wAk+QEA1B3Y2L/Y/wAx+QEABrj//2NH/wA9+QEAe7bgQODQ/wBM+QEA1HPu7oLu/wBY+QEAG0T19d6z/wBj+QEAAAD//////wBu+QEAAAD19fX1/wB++QEAKv////8A/wCK+QEAOMDNms0y/wCb+QEALUP89/y5/wCk+QEARFvdrd2O/wCt+QEAYrKjMaNU/wC2+QEAKjL////M/wC/+QEAPlXmwuaZ/wDI+QEAVWTGeMZ5/wDR+QEAY7uEI4RD/wDa+QEAKjL////M/wDj+QEAPlXmwuaZ/wDs+QEAVWTGeMZ5/wD1+QEAYrKjMaNU/wD++QEAa/9oAGg3/wAH+gEAKjL////M/wAQ+gEAN1Hw2fCj/wAZ+gEARFvdrd2O/wAi+gEAVWTGeMZ5/wAr+gEAYrKjMaNU/wA0+gEAa/9oAGg3/wA9+gEAKjL////M/wBG+gEAN1Hw2fCj/wBP+gEARFvdrd2O/wBY+gEAVWTGeMZ5/wBh+gEAYJ6rQatd/wBq+gEAY7uEI4RD/wBz+gEAbP9aAFoy/wB8+gEAKhn////l/wCF+gEALUP89/y5/wCO+gEAN1Hw2fCj/wCX+gEARFvdrd2O/wCg+gEAVWTGeMZ5/wCp+gEAYJ6rQatd/wCy+gEAY7uEI4RD/wC7+gEAbP9aAFoy/wDE+gEAKhn////l/wDN+gEALUP89/y5/wDW+gEAN1Hw2fCj/wDf+gEARFvdrd2O/wDo+gEAVWTGeMZ5/wDx+gEAYJ6rQatd/wD6+gEAY7uEI4RD/wAD+wEAa/9oAGg3/wAM+wEAbv9FAEUp/wAV+wEAMUn47fix/wAg+wEAdWHNf827/wAr+wEAkMK4LH+4/wA2+wEAKjL////M/wBB+wEAY0Laodq0/wBM+wEAhKrEQbbE/wBX+wEAlsuoIl6o/wBi+wEAKjL////M/wBt+wEAY0Laodq0/wB4+wEAhKrEQbbE/wCD+wEAkMK4LH+4/wCO+wEApL+UJTSU/wCZ+wEAKjL////M/wCk+wEARTrpx+m0/wCv+wEAdWHNf827/wC6+wEAhKrEQbbE/wDF+wEAkMK4LH+4/wDQ+wEApL+UJTSU/wDb+wEAKjL////M/wDm+wEARTrpx+m0/wDx+wEAdWHNf827/wD8+wEAhKrEQbbE/wAH/AEAi9jAHZHA/wAS/AEAlsuoIl6o/wAd/AEAnueEDCyE/wAo/AEAKib////Z/wAz/AEAMUn47fix/wA+/AEARTrpx+m0/wBJ/AEAdWHNf827/wBU/AEAhKrEQbbE/wBf/AEAi9jAHZHA/wBq/AEAlsuoIl6o/wB1/AEAnueEDCyE/wCA/AEAKib////Z/wCL/AEAMUn47fix/wCW/AEARTrpx+m0/wCh/AEAdWHNf827/wCs/AEAhKrEQbbE/wC3/AEAi9jAHZHA/wDC/AEAlsuoIl6o/wDN/AEApL+UJTSU/wDY/AEAnudYCB1Y/wDj/AEAJUL///e8/wDu/AEAHK/+/sRP/wD5/AEAEO7Z2V8O/wAE/QEAKir////U/wAP/QEAHHD+/tmO/wAa/QEAFtX+/pkp/wAl/QEAD/zMzEwC/wAw/QEAKir////U/wA7/QEAHHD+/tmO/wBG/QEAFtX+/pkp/wBR/QEAEO7Z2V8O/wBc/QEADfiZmTQE/wBn/QEAKir////U/wBy/QEAH23+/uOR/wB9/QEAHK/+/sRP/wCI/QEAFtX+/pkp/wCT/QEAEO7Z2V8O/wCe/QEADfiZmTQE/wCp/QEAKir////U/wC0/QEAH23+/uOR/wC//QEAHK/+/sRP/wDK/QEAFtX+/pkp/wDV/QEAEuns7HAU/wDg/QEAD/zMzEwC/wDr/QEADPeMjC0E/wD2/QEAKhn////l/wAB/gEAJUL///e8/wAM/gEAH23+/uOR/wAX/gEAHK/+/sRP/wAi/gEAFtX+/pkp/wAt/gEAEuns7HAU/wA4/gEAD/zMzEwC/wBD/gEADPeMjC0E/wBO/gEAKhn////l/wBZ/gEAJUL///e8/wBk/gEAH23+/uOR/wBv/gEAHK/+/sRP/wB6/gEAFtX+/pkp/wCF/gEAEuns7HAU/wCQ/gEAD/zMzEwC/wCb/gEADfiZmTQE/wCm/gEADfBmZiUG/wCx/gEAIl///+2g/wC8/gEAGLL+/rJM/wDH/gEABd3w8Dsg/wDS/gEAKk3///+y/wDd/gEAHaL+/sxc/wDo/gEAEcL9/Y08/wDz/gEA/uHj4xoc/wD+/gEAKk3///+y/wAJ/wEAHaL+/sxc/wAU/wEAEcL9/Y08/wAf/wEABd3w8Dsg/wAq/wEA9v+9vQAm/wA1/wEAKk3///+y/wBA/wEAHoj+/tl2/wBL/wEAGLL+/rJM/wBW/wEAEcL9/Y08/wBh/wEABd3w8Dsg/wBs/wEA9v+9vQAm/wB3/wEAKk3///+y/wCC/wEAHoj+/tl2/wCN/wEAGLL+/rJM/wCY/wEAEcL9/Y08/wCj/wEAB9T8/E4q/wCu/wEA/uHj4xoc/wC5/wEA9f+xsQAm/wDE/wEAKjL////M/wDP/wEAIl///+2g/wDa/wEAHoj+/tl2/wDl/wEAGLL+/rJM/wDw/wEAEcL9/Y08/wD7/wEAB9T8/E4q/wAGAAIA/uHj4xoc/wARAAIA9f+xsQAm/wAcAAIAKjL////M/wAnAAIAIl///+2g/wAyAAIAHoj+/tl2/wA9AAIAGLL+/rJM/wBIAAIAEcL9/Y08/wBTAAIAB9T8/E4q/wBeAAIA/uHj4xoc/wBpAAIA9v+9vQAm/wB0AAIA8v+AgAAm/wB/AAIAkw//8Pj//wCJAAIAGCP6+uvX/wCWAAIAFyT//+/b/wCkAAIAFyTu7t/M/wCyAAIAFyTNzcCw/wDAAAIAGCKLi4N4/wDOAAIAcYD/f//U/wDZAAIAcYD/f//U/wDlAAIAcYDudu7G/wDxAAIAcYDNZs2q/wD9AAIAcYCLRYt0/wAJAQIAfw//8P///wAPAQIAfw//8P///wAWAQIAfw/u4O7u/wAdAQIAfw7Nwc3N/wAkAQIAfw6Lg4uL/wArAQIAKhr19fXc/wAxAQIAFzr//+TE/wA4AQIAFzr//+TE/wBAAQIAFzru7tW3/wBIAQIAFjrNzbee/wBQAQIAFzqLi31r/wBiGAIAAAAAAAAA/wBYAQIAGTH//+vN/wBnAQIAqv//AAD//wBsAQIAqv//AAD//wByAQIAqv/uAADu/wB4AQIAqv/NAADN/wB+AQIAqv+LAACL/wCEAQIAwM7iiivi/wCPAQIAAL6lpSoq/wCVAQIAAL///0BA/wCcAQIAAL/u7js7/wCjAQIAAL/NzTMz/wCqAQIAAL6LiyMj/wCxAQIAF2Pe3riH/wC7AQIAF2T//9Ob/wDGAQIAF2Pu7sWR/wDRAQIAF2PNzap9/wDcAQIAF2OLi3NV/wDnAQIAgGegX56g/wDxAQIAg2f/mPX//wD8AQIAg2bujuXu/wAHAgIAg2fNesXN/wASAgIAg2aLU4aL/wAdAgIAP///f/8A/wAoAgIAP///f/8A/wA0AgIAP//udu4A/wBAAgIAP//NZs0A/wBMAgIAP/+LRYsA/wBYAgIAEdrS0mke/wBiAgIAEdv//38k/wBtAgIAEdvu7nYh/wB4AgIAEdrNzWYd/wCDAgIAEdyLi0UT/wCOAgIAC6///39Q/wCUAgIAB6n//3JW/wCbAgIABqnu7mpQ/wCiAgIABqnNzVtF/wCpAgIABqiLiz4v/wCwAgIAmpPtZJXt/wC/AgIAISL///jc/wDIAgIAISL///jc/wDSAgIAIiPu7ujN/wDcAgIAIiLNzcix/wDmAgIAIyKLi4h4/wDwAgIA9ufc3BQ8/wD4AgIAf///AP///wD9AgIAf///AP///wADAwIAf//uAO7u/wAJAwIAf//NAM3N/wAPAwIAf/+LAIuL/wAVAwIAHu+4uIYL/wAjAwIAHvD//7kP/wAyAwIAHvDu7q0O/wBBAwIAHvDNzZUM/wBQAwIAHvCLi2UI/wBfAwIAVf9kAGQA/wBpAwIAJ269vbdr/wBzAwIAOo5rVWsv/wCCAwIAOo//yv9w/wCSAwIAOo/uvO5o/wCiAwIAOo/Nos1a/wCyAwIAOo+Lbos9/wDCAwIAF////4wA/wDNAwIAFf///38A/wDZAwIAFf/u7nYA/wDlAwIAFf/NzWYA/wDxAwIAFf+Li0UA/wD9AwIAxsDMmTLM/wAIBAIAxsH/vz7//wAUBAIAxsDusjru/wAgBAIAxsDNmjLN/wAsBAIAxsCLaCKL/wA4BAIACnnp6ZZ6/wBDBAIAVT28j7yP/wBQBAIAVT7/wf/B/wBeBAIAVT7utO60/wBsBAIAVT7Nm82b/wB6BAIAVT6LaYtp/wCIBAIAr4+LSD2L/wCWBAIAf2dPL09P/wCkBAIAf2j/l////wCzBAIAf2fuje7u/wDCBAIAf2jNec3N/wDRBAIAf2iLUouL/wDgBAIAf2dPL09P/wDuBAIAgP/RAM7R/wD8BAIAx//TlADT/wAHBQIA6Ov//xST/wAQBQIA6Ov//xST/wAaBQIA6Ovu7hKJ/wAkBQIA6OvNzRB2/wAuBQIA5+yLiwpQ/wA4BQIAiv//AL///wBEBQIAiv//AL///wBRBQIAiv/uALLu/wBeBQIAiv/NAJrN/wBrBQIAiv+LAGiL/wB4BQIAAABpaWlp/wCABQIAAABpaWlp/wCIBQIAlOH/HpD//wCTBQIAlOH/HpD//wCfBQIAlOHuHIbu/wCrBQIAlOHNGHTN/wC3BQIAlOGLEE6L/wDDBQIAAM6ysiIi/wDNBQIAAM///zAw/wDYBQIAAM/u7iws/wDjBQIAAM/NzSYm/wDuBQIAAM+Lixoa/wD5BQIAHA////rw/wAFBgIAVcCLIosi/wARBgIAAADc3Nzc/wAbBgIAqgf/+Pj//wAmBgIAI////9cA/wArBgIAI////9cA/wAxBgIAI//u7skA/wA3BgIAI//Nza0A/wA9BgIAI/+Li3UA/wBDBgIAHtna2qUg/wBNBgIAHtr//8El/wBYBgIAHtru7rQi/wBjBgIAHtrNzZsd/wBuBgIAHtqLi2kU/wB5BgIAAADAwMDA/wB+BgIAAAAAAAAA/wCEBgIAAAADAwMD/wCKBgIAAAAaGhoa/wCRBgIAAAD//////wCZBgIAAAAcHBwc/wCgBgIAAAAfHx8f/wCnBgIAAAAhISEh/wCuBgIAAAAkJCQk/wC1BgIAAAAmJiYm/wC8BgIAAAApKSkp/wDDBgIAAAArKysr/wDKBgIAAAAuLi4u/wDRBgIAAAAwMDAw/wDYBgIAAAAFBQUF/wDeBgIAAAAzMzMz/wDlBgIAAAA2NjY2/wDsBgIAAAA4ODg4/wDzBgIAAAA7Ozs7/wD6BgIAAAA9PT09/wABBwIAAABAQEBA/wAIBwIAAABCQkJC/wAPBwIAAABFRUVF/wAWBwIAAABHR0dH/wAdBwIAAABKSkpK/wAkBwIAAAAICAgI/wAqBwIAAABNTU1N/wAxBwIAAABPT09P/wA4BwIAAABSUlJS/wA/BwIAAABUVFRU/wBGBwIAAABXV1dX/wBNBwIAAABZWVlZ/wBUBwIAAABcXFxc/wBbBwIAAABeXl5e/wBiBwIAAABhYWFh/wBpBwIAAABjY2Nj/wBwBwIAAAAKCgoK/wB2BwIAAABmZmZm/wB9BwIAAABpaWlp/wCEBwIAAABra2tr/wCLBwIAAABubm5u/wCSBwIAAABwcHBw/wCZBwIAAABzc3Nz/wCgBwIAAAB1dXV1/wCnBwIAAAB4eHh4/wCuBwIAAAB6enp6/wC1BwIAAAB9fX19/wC8BwIAAAANDQ0N/wDCBwIAAAB/f39//wDJBwIAAACCgoKC/wDQBwIAAACFhYWF/wDXBwIAAACHh4eH/wDeBwIAAACKioqK/wDlBwIAAACMjIyM/wDsBwIAAACPj4+P/wDzBwIAAACRkZGR/wD6BwIAAACUlJSU/wABCAIAAACWlpaW/wAICAIAAAAPDw8P/wAOCAIAAACZmZmZ/wAVCAIAAACcnJyc/wAcCAIAAACenp6e/wAjCAIAAAChoaGh/wAqCAIAAACjo6Oj/wAxCAIAAACmpqam/wA4CAIAAACoqKio/wA/CAIAAACrq6ur/wBGCAIAAACtra2t/wBNCAIAAACwsLCw/wBUCAIAAAASEhIS/wBaCAIAAACzs7Oz/wBhCAIAAAC1tbW1/wBoCAIAAAC4uLi4/wBvCAIAAAC6urq6/wB2CAIAAAC9vb29/wB9CAIAAAC/v7+//wCECAIAAADCwsLC/wCLCAIAAADExMTE/wCSCAIAAADHx8fH/wCZCAIAAADJycnJ/wCgCAIAAAAUFBQU/wCmCAIAAADMzMzM/wCtCAIAAADPz8/P/wC0CAIAAADR0dHR/wC7CAIAAADU1NTU/wDCCAIAAADW1tbW/wDJCAIAAADZ2dnZ/wDQCAIAAADb29vb/wDXCAIAAADe3t7e/wDeCAIAAADg4ODg/wDlCAIAAADj4+Pj/wDsCAIAAAAXFxcX/wDyCAIAAADl5eXl/wD5CAIAAADo6Ojo/wAACQIAAADr6+vr/wAHCQIAAADt7e3t/wAOCQIAAADw8PDw/wAVCQIAAADy8vLy/wAcCQIAAAD19fX1/wAjCQIAAAD39/f3/wAqCQIAAAD6+vr6/wAxCQIAAAD8/Pz8/wA4CQIAVf//AP8A/wA+CQIAVf//AP8A/wBFCQIAVf/uAO4A/wBMCQIAVf/NAM0A/wBTCQIAVf+LAIsA/wBaCQIAO9D/rf8v/wBmCQIAAADAwMDA/wBrCQIAAAAAAAAA/wBxCQIAAAADAwMD/wB3CQIAAAAaGhoa/wB+CQIAAAD//////wCGCQIAAAAcHBwc/wCNCQIAAAAfHx8f/wCUCQIAAAAhISEh/wCbCQIAAAAkJCQk/wCiCQIAAAAmJiYm/wCpCQIAAAApKSkp/wCwCQIAAAArKysr/wC3CQIAAAAuLi4u/wC+CQIAAAAwMDAw/wDFCQIAAAAFBQUF/wDLCQIAAAAzMzMz/wDSCQIAAAA2NjY2/wDZCQIAAAA4ODg4/wDgCQIAAAA7Ozs7/wDnCQIAAAA9PT09/wDuCQIAAABAQEBA/wD1CQIAAABCQkJC/wD8CQIAAABFRUVF/wADCgIAAABHR0dH/wAKCgIAAABKSkpK/wARCgIAAAAICAgI/wAXCgIAAABNTU1N/wAeCgIAAABPT09P/wAlCgIAAABSUlJS/wAsCgIAAABUVFRU/wAzCgIAAABXV1dX/wA6CgIAAABZWVlZ/wBBCgIAAABcXFxc/wBICgIAAABeXl5e/wBPCgIAAABhYWFh/wBWCgIAAABjY2Nj/wBdCgIAAAAKCgoK/wBjCgIAAABmZmZm/wBqCgIAAABpaWlp/wBxCgIAAABra2tr/wB4CgIAAABubm5u/wB/CgIAAABwcHBw/wCGCgIAAABzc3Nz/wCNCgIAAAB1dXV1/wCUCgIAAAB4eHh4/wCbCgIAAAB6enp6/wCiCgIAAAB9fX19/wCpCgIAAAANDQ0N/wCvCgIAAAB/f39//wC2CgIAAACCgoKC/wC9CgIAAACFhYWF/wDECgIAAACHh4eH/wDLCgIAAACKioqK/wDSCgIAAACMjIyM/wDZCgIAAACPj4+P/wDgCgIAAACRkZGR/wDnCgIAAACUlJSU/wDuCgIAAACWlpaW/wD1CgIAAAAPDw8P/wD7CgIAAACZmZmZ/wACCwIAAACcnJyc/wAJCwIAAACenp6e/wAQCwIAAAChoaGh/wAXCwIAAACjo6Oj/wAeCwIAAACmpqam/wAlCwIAAACoqKio/wAsCwIAAACrq6ur/wAzCwIAAACtra2t/wA6CwIAAACwsLCw/wBBCwIAAAASEhIS/wBHCwIAAACzs7Oz/wBOCwIAAAC1tbW1/wBVCwIAAAC4uLi4/wBcCwIAAAC6urq6/wBjCwIAAAC9vb29/wBqCwIAAAC/v7+//wBxCwIAAADCwsLC/wB4CwIAAADExMTE/wB/CwIAAADHx8fH/wCGCwIAAADJycnJ/wCNCwIAAAAUFBQU/wCTCwIAAADMzMzM/wCaCwIAAADPz8/P/wChCwIAAADR0dHR/wCoCwIAAADU1NTU/wCvCwIAAADW1tbW/wC2CwIAAADZ2dnZ/wC9CwIAAADb29vb/wDECwIAAADe3t7e/wDLCwIAAADg4ODg/wDSCwIAAADj4+Pj/wDZCwIAAAAXFxcX/wDfCwIAAADl5eXl/wDmCwIAAADo6Ojo/wDtCwIAAADr6+vr/wD0CwIAAADt7e3t/wD7CwIAAADw8PDw/wACDAIAAADy8vLy/wAJDAIAAAD19fX1/wAQDAIAAAD39/f3/wAXDAIAAAD6+vr6/wAeDAIAAAD8/Pz8/wAlDAIAVQ//8P/w/wAuDAIAVQ//8P/w/wA4DAIAVQ/u4O7g/wBCDAIAVQ7Nwc3B/wBMDAIAVQ6Lg4uD/wBWDAIA6Zb//2m0/wBeDAIA6pH//260/wBnDAIA643u7mqn/wBwDAIA7IfNzWCQ/wB5DAIA6pSLizpi/wCCDAIAAIzNzVxc/wCMDAIAAJT//2pq/wCXDAIAAJTu7mNj/wCiDAIAAJXNzVVV/wCtDAIAAJSLizo6/wC4DAIAwv+CSwCC/wC/DAIAKgD////+AADFDAIAKg/////w/wDLDAIAKg/////w/wDSDAIAKg/u7u7g/wDZDAIAKg7Nzc3B/wDgDAIAKg6Li4uD/wDnDAIAJmrw8OaM/wDtDAIAJ3D///aP/wD0DAIAJ3Du7uaF/wD7DAIAJ2/NzcZz/wACDQIAJ2+Li4ZO/wAJDQIAqhT65ub6/wASDQIA8A////D1/wAgDQIA8A////D1/wAvDQIA7w/u7uDl/wA+DQIA8A7NzcHF/wBNDQIA7w6Li4OG/wBcDQIAQP/8fPwA/wBmDQIAJjH///rN/wBzDQIAJjH///rN/wCBDQIAJTLu7um//wCPDQIAJjHNzcml/wCdDQIAJzGLi4lw/wCrDQIAiT/mrdjm/wC1DQIAikD/v+///wDADQIAikDust/u/wDLDQIAij/NmsDN/wDWDQIAiUCLaIOL/wDhDQIAAHfw8ICA/wDsDQIAfx//4P///wD2DQIAfx//4P///wABDgIAfx/u0e7u/wAMDgIAfx/NtM3N/wAXDgIAfx+LeouL/wAiDgIAI3Pu7t2C/wAxDgIAI3T//+yL/wBBDgIAI3Pu7tyC/wBRDgIAI3PNzb5w/wBhDgIAI3OLi4FM/wBxDgIAKij6+vrS/wCGDgIAAADT09PT/wCQDgIAAADT09PT/wCaDgIA+En//7bB/wCkDgIA+VH//665/wCvDgIA+FHu7qKt/wC6DgIA+VDNzYyV/wDFDgIA+VCLi19l/wDQDgIADIT//6B6/wDcDgIADIT//6B6/wDpDgIAC4Tu7pVy/wD2DgIADIXNzYFi/wADDwIADIWLi1dC/wAQDwIAfdGyILKq/wAeDwIAj3X6h876/wArDwIAj0//sOL//wA5DwIAj0/upNPu/wBHDwIAjk/NjbbN/wBVDwIAj06LYHuL/wBjDwIAr4//hHD//wByDwIAlDiZd4iZ/wCBDwIAlDiZd4iZ/wCQDwIAlzTesMTe/wCfDwIAlzX/yuH//wCvDwIAlzXuvNLu/wC/DwIAlzXNorXN/wDPDwIAljWLbnuL/wDfDwIAKh/////g/wDrDwIAKh/////g/wD4DwIAKh/u7u7R/wAFEAIAKh/Nzc20/wASEAIAKh+Li4t6/wAfEAIAVcDNMs0y/wApEAIAFRT6+vDm/wAvEAIA1P///wD//wA3EAIA1P///wD//wBAEAIA1P/u7gDu/wBJEAIA1P/NzQDN/wBSEAIA1P+LiwCL/wBbEAIA77mwsDBg/wBiEAIA5Mv//zSz/wBqEAIA5Mvu7jCn/wByEAIA5MzNzSmQ/wB6EAIA5MuLixxi/wCCEAIAcYDNZs2q/wCTEAIAqv/NAADN/wCeEAIAzJjTulXT/wCrEAIAy5n/4Gb//wC5EAIAy5nu0V/u/wDHEAIAy5nNtFLN/wDVEAIAy5qLejeL/wDjEAIAt3zbk3Db/wDwEAIAt33/q4L//wD+EAIAt33un3nu/wAMEQIAt33NiWjN/wAaEQIAt3yLXUeL/wAoEQIAZ6mzPLNx/wA3EQIAsI/ue2ju/wBHEQIAb//6APqa/wBZEQIAfafRSNHM/wBpEQIA5OTHxxWF/wB5EQIAqsZwGRlw/wCGEQIAagn/9f/6/wCQEQIABB7//+Th/wCaEQIABB7//+Th/wClEQIABB7u7tXS/wCwEQIAAx3Nzbe1/wC7EQIABR2Li317/wDGEQIAGkn//+S1/wDPEQIAGVH//96t/wDbEQIAGVH//96t/wDoEQIAGVLu7s+h/wD1EQIAGVLNzbOL/wACEgIAGVKLi3le/wAPEgIAqv+AAACA/wAUEgIAqv+AAACA/wAdEgIAKgD////+AAAiEgIAGxf9/fXm/wAqEgIAOMCOa44j/wA0EgIAOMH/wP8+/wA/EgIAOMDus+46/wBKEgIAOMDNms0y/wBVEgIAOMCLaYsi/wBgEgIAG////6UA/wBnEgIAG////6UA/wBvEgIAG//u7poA/wB3EgIAG//NzYUA/wB/EgIAG/+Li1oA/wCHEgIAC////0UA/wCREgIAC////0UA/wCcEgIAC//u7kAA/wCnEgIAC//NzTcA/wCyEgIAC/+LiyUA/wC9EgIA1nva2nDW/wDEEgIA1nz//4P6/wDMEgIA1nzu7nrp/wDUEgIA1nzNzWnJ/wDcEgIA1XyLi0eJ/wDkEgIAJkju7uiq/wDyEgIAVWT7mPuY/wD8EgIAVWX/mv+a/wAHEwIAVWTukO6Q/wASEwIAVWTNfM18/wAdEwIAVWSLVItU/wAoEwIAf0Pur+7u/wA2EwIAf0T/u////wBFEwIAf0Turu7u/wBUEwIAf0TNls3N/wBjEwIAf0OLZouL/wByEwIA8Xzb23CT/wCAEwIA8X3//4Kr/wCPEwIA8X3u7nmf/wCeEwIA8X3NzWiJ/wCtEwIA8XyLi0dd/wC8EwIAGin//+/V/wDHEwIAFEb//9q5/wDREwIAFEb//9q5/wDcEwIAE0Xu7sut/wDnEwIAE0XNza+V/wDyEwIAFEWLi3dl/wD9EwIAFLDNzYU//wACFAIA9z///8DL/wAHFAIA9Un//7XF/wANFAIA9Unu7qm4/wATFAIA9UrNzZGe/wAZFAIA9UmLi2Ns/wAfFAIA1Ebd3aDd/wAkFAIA1ET//7v//wAqFAIA1ETu7q7u/wAwFAIA1ETNzZbN/wA2FAIA1EOLi2aL/wA8FAIAhDvmsODm/wBHFAIAxN3woCDw/wBOFAIAv8//mzD//wBWFAIAwM/ukSzu/wBeFAIAwM/NfSbN/wBmFAIAwM+LVRqL/wBuFAIAAP///wAA/wByFAIAAP///wAA/wB3FAIAAP/u7gAA/wB8FAIAAP/NzQAA/wCBFAIAAP+LiwAA/wCGFAIAAD28vI+P/wCQFAIAAD7//8HB/wCbFAIAAD7u7rS0/wCmFAIAAD7NzZub/wCxFAIAAD6Li2lp/wC8FAIAn7XhQWnh/wDGFAIAn7f/SHb//wDRFAIAn7fuQ27u/wDcFAIAn7bNOl/N/wDnFAIAn7eLJ0CL/wDyFAIAEdyLi0UT/wD+FAIABIr6+oBy/wAFFQIACZb//4xp/wANFQIACZbu7oJi/wAVFQIACZbNzXBU/wAdFQIACZaLi0w5/wAlFQIAE5r09KRg/wAwFQIAZ6qLLotX/wA5FQIAZ6v/VP+f/wBDFQIAZ6vuTu6U/wBNFQIAZ6vNQ82A/wBXFQIAZ6qLLotX/wBhFQIAERD///Xu/wBqFQIAERD///Xu/wB0FQIAEhHu7uXe/wB+FQIAEhHNzcW//wCIFQIAEhCLi4aC/wCSFQIADbegoFIt/wCZFQIADbj//4JH/wChFQIADbju7nlC/wCpFQIADbjNzWg5/wCxFQIADbmLi0cm/wC5FQIAi2zrh87r/wDBFQIAkHj/h87//wDKFQIAkHjufsDu/wDTFQIAkHjNbKbN/wDcFQIAkXeLSnCL/wDlFQIAr4/NalrN/wDvFQIAr5D/g2///wD6FQIAr5Duemfu/wAFFgIAr5DNaVnN/wAQFgIAr5CLRzyL/wAbFgIAlDiQcICQ/wAlFgIAlTj/xuL//wAwFgIAlTjuudPu/wA7FgIAlDnNn7bN/wBGFgIAlTiLbHuL/wBRFgIAlDiQcICQ/wBbFgIAAAX///r6/wBgFgIAAAX///r6/wBmFgIAAAXu7unp/wBsFgIAAATNzcnJ/wByFgIAAAOLi4mJ/wB4FgIAav//AP9//wCEFgIAav//AP9//wCRFgIAav/uAO52/wCeFgIAav/NAM1m/wCrFgIAav+LAItF/wC4FgIAkpu0RoK0/wDCFgIAkpz/Y7j//wDNFgIAkpzuXKzu/wDYFgIAkpzNT5TN/wDjFgIAk5uLNmSL/wDuFgIAGFTS0rSM/wDyFgIAFLD//6VP/wD3FgIAFLDu7ppJ/wD8FgIAFLDNzYU//wABFwIAFLCLi1or/wAGFwIA1B3Y2L/Y/wAOFwIA1B7//+H//wAXFwIA1B7u7tLu/wAgFwIA1B3NzbXN/wApFwIA1B2Li3uL/wAyFwIABrj//2NH/wA5FwIABrj//2NH/wBBFwIABrju7lxC/wBJFwIABrjNzU85/wBRFwIABrmLizYm/wCjGAIAKgD////+AABZFwIAe7bgQODQ/wBjFwIAgf//APX//wBuFwIAgf/uAOXu/wB5FwIAgf/NAMXN/wCEFwIAgf+LAIaL/wCPFwIA1HPu7oLu/wCWFwIA49fQ0CCQ/wCgFwIA68H//z6W/wCrFwIA68Du7jqM/wC2FwIA68DNzTJ4/wDBFwIA68CLiyJS/wDMFwIAG0T19d6z/wDSFwIAG0X//+e6/wDZFwIAG0Tu7tiu/wDgFwIAG0TNzbqW/wDnFwIAG0OLi35m/wDuFwIAAAD//////wD0FwIAAAD19fX1/wD/FwIAKv////8A/wAGGAIAKv////8A/wAOGAIAKv/u7u4A/wAWGAIAKv/Nzc0A/wAeGAIAKv+Li4sA/wAmGAIAOMDNms0y/wCaHAIAfywCALYYAgC4GAIAuhgCALwYAgC+GAIAwBgCAMIYAgDEGAIAxhgCAMkYAgDMGAIAzxgCANIYAgDVGAIA2BgCANsYAgDeGAIA4RgCAOQYAgAAAAAABAAAAAQAAAALAAAANgAAABYAAAAAAAAAAAAAAAAAAAAIAAAAEAAAABgAAAAAAAAAAAAAABcAAAAAAAAAAAAAAAAAAAAIAAAAEAAAABgAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAADGJQIACQAAAMwlAgAKAAAA1SUCAAsAAAAXJgIADAAAAB0mAgANAAAAIiYCAA4AAADVJQIADwAAAKomAgAQAAAAsSYCABEAAAC5JgIAEgAAAMAmAgATAAAAzCYCABQAAAAXJgIAFQAAANgmAgAWAAAA4CYCABcAAADqJgIAGAAAAPgmAgAZAAAA/yYCABoAAAAEJwIAGwAAAAcnAgAcAAAADCcCAB0AAAAUJwIAHgAAABonAgAfAAAAICcCACAAAAAnJwIAIQAAAC0nAgAhAAAANScCACIAAAA8JwIAIwAAANUlAgAkAAAAsSYCABEAAAC5JgIAEgAAADMpAgAlAAAAwCYCABMAAADMJgIAFAAAABcmAgAVAAAAPikCACYAAADgJgIAFwAAAOomAgAYAAAA+CYCABkAAAD/JgIAGgAAAAQnAgAbAAAABycCABwAAABGKQIAJwAAABQnAgAeAAAAGicCAB8AAAAgJwIAIAAAACcnAgAhAAAALScCACEAAAA1JwIAIgAAADwnAgAjAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAAAAAABP7//4f+//8HAAAAAAAAAAD//3////9///////////N//v3//////3///////////w/g/////zH8////AAAAAAAAAP//////////////AQD4AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AAAAAAAAAAAD///8HBwAAAAAA/v//B/4HAAAAAP7//////////3z/fy8AYAAAAOD///////8jAAAA/wMAAADgn/n///3FAwAAALADAAMA4If5///9bQMAAABeAAAcAOCv+////e0jAAAAAAEAAADgn/n///3NIwAAALADAAAA4Mc91hjHvwMAAAAAAAAAAODf/f///e8DAAAAAAMAAADg3/3///3vAwAAAEADAAAA4N/9///9/wMAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAD+/////38NAD8AAAAAAAAAliXw/q5sDSAfAAAAAAAAAAAAAAAAAAAA//7///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////PwD/////fwDt2gcAAAAAUAFQMYKrYiwAAAAAQADJgPUHAAAAAAgBAv////////////////////////8P//////////////8D//8/P/////8/P/+q////P////////99f3B/PD/8f3B8AAAAAQEwAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAIAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////z8AAAAAAAAAAAAAAP//////////////////////////DwAAAAAAAAAAAAAAAAAAAABg/wf+//+H/v//BwAAAAAAAIAA//9/////f/////8AAAAAAAAA//////////////8BAPgDAAMAAAAAAP//////////PwAAAAMAAADA1///+/////9/f1T9/w8A/t////////////7f/////3sA////////nxn////PPwMAAAAAAAD+////fwL+////fwD+//v//7sWAP///wcHAAAAAAD+//8H//8HAP8D////////////fP9/7///Pf8D7v////////P/Px7/z/8AAO6f+f///cXTnzmAsM//AwDkh/n///1t04c5AF7A/x8A7q/7///97fO/OwAAwf8AAO6f+f///c3zjznAsMP/AADsxz3WGMe/w8c9gACA/wAA7t/9///978PfPWAAw/8AAOzf/f///e/D3z1gQMP/AADs3/3///3/w889gADD/wAAAAAAAAAAAAAAAAAAAAAAAP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93GQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAGAAAABwAAAAEAAAABAAAAAAAAAAAAAAAAFQoAABUAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAAAAAAAAAAAABASsAAAAsAAAALQAAAC4AAAAvAAAALQAAADAAAAAxAAAAMgAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAAAA3QAAYOYAANjkAADM5wAAzOcAADjpAADY5AAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAIAAAABQAAAAEAAAABAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAAzAAAANAAAACkAAAA1AAAADQAAABoAAAAqAAAACQAAAAoAAAACAAAAAAAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcFhwcHBwcHBwcHBwWHBocHBYcHBwcHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAANgAAADcAAAAyAAAAOAAAAA4AAAAbAAAAMwAAAAsAAAAMAAAAAgAAAAABAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz40BALIzAgBTjgEAuzMCAMIzAgDLMwIAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAGAAAABwAAAAEAAAABAAAAAAAAAAAAAAAAFQoAABUAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAAAAAAAAAAAABASsAAAAsAAAALQAAAC4AAAAvAAAALQAAADAAAAAxAAAAMgAAAETsAACw7QAAHO8AAIjwAACI8AAA9PEAABzvAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAKAAAACkAAAAgAAAAKgAAAAwAAAAZAAAAIQAAAAQAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAIAAAABQAAAAEAAAABAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAMwAAADQAAAApAAAANQAAAA0AAAAaAAAAKgAAAAkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADYAAAA3AAAAMgAAADgAAAAOAAAAGwAAADMAAAALAAAADAAAAAIAAAAAAQAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF00AgBjNAIAZjQCAGw0AgAGNAIAczQCAHw0AgCENAIAnPMAABQAAABDLlVURi04AAAAAAAAAAAAAAAAAN4SBJUAAAAA////////////////AgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTgPQAAAkAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAQAAAA/PkCAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9QAABQAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABAAAAAE/gIAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD1AACE9QAABQAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABAAAAAMAgMAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmOgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAIAAAAAkAAAAKAAAADQAAAAsAAAAMAAAAhQAAAAAgAAABIAAAAiAAAAMgAAAEIAAABSAAAAYgAAAIIAAACSAAAAogAAAoIAAAKSAAAF8gAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BV9wiQD/CS8PdAAAAP1XAgBuAAAA/1cCAHIAAAABWAIAZgAAAANYAgBhAAAABVgCAGUAAAAHWAIAdwAAAAlYAgBXAAAAFlgCAHMAAAAkWAIAUwAAADBYAgBkAAAAPVgCAEQAAABJWAIAAAAAAAAAAAAAAAAAAAAEAAQAGwAbACAAIAAjACEACgACABYACQAhACEAIQAVABwAAQAUABQAFAAUABQAFAAUAAgABAAFABsAAgAXABsAIAAfAB4AHQAJABMAAAAVABIAFQADAAcAFQAVABQAFAAUABQAFAAUABQAFAAIAAQABQAFAAYAGwAaABgAGQAgAAcAFQAUABQAFAAUABQAFAALABQADQAUAAwAFAAUABQADgAUABQAFAAQABQADwAUABEAAAAAAAAArgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAAAADbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMABAAHAAMABAAFAAUABgAGAAgABwAHABEAFgASABEAEgAIAAgADwAPABcADwAYAA8AGQAaABoAHgAWADQAHgAFADIABgAiACIAMwAXABgANQAZABoAGgAqADYAKgA0ADcAMgBFADsAPAAzADsAPABGADUARwBIAEwANgAiAEkASgA3AEUATgBQAGIAUQBSAFQARgBHAFUASABMAFYASQBKAFgAWgBOAEQAUABRAFIAVAA4AC8ALABVACkAVgAbABAAWABaAF0AXQBdAF0AXQBdAF0AXgBeAF4AXgBeAF4AXgBfAF8AXwBfAF8AXwBfAGAACQBgAGAAYABgAGAAYQBhAGMAAgBjAGMAYwBjAGMAZAAAAGQAAABkAGQAZABlAAAAZQBlAGUAZQBlAGYAZgAAAGYAZgBmAGYAZwAAAGcAZwBnAGcAaAAAAGgAaABoAGgAaABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAAXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBmAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAACgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgA+AFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwACACu/9EACgCu/67/CwCu/67/rv+u/67/rv+u/67/BQDRAK7/0QDRANEA0QDRANEA0QDRAK7/+/+u/w4A7P+u/67/rv+u/9EA0QDRANEA0QANACUADABCABAAUAATAG0AewAUAJgADwCmAMMArv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/FwCu/3cArv8HAC4Arv8mAK7/FwARACMArv8NAK7/rv+u/67/OgCu/67/NQCu/67/rv8oAK7/BwCu/zsARQCu/0gArv+u/67/rv+u/67/rv/8/+gA9v///xoAAAAnAAEAMgCu/67/AgAkAAMALwCu/67/rv+u/67//v+UAK7/CQAbAK7/vP+u/67/r/+u/67/rv+u/67/rv+u/wAAAAAAAG3m7N4FAAsASQAxAVMAfwEwAWkAeAH/AIEBUwKCAYMBhAGFAYYBVAKHAYgBiQFWAooBVwKLAYwBjgHdAY8BWQKQAVsCkQGSAZMBYAKUAWMClgFpApcBaAKYAZkBnAFvAp0BcgKfAXUCpgGAAqcBqAGpAYMCrAGtAa4BiAKvAbABsQGKArIBiwK3AZICuAG5AbwBvQHEAcYBxAHFAcUBxgHHAckBxwHIAcgByQHKAcwBygHLAcsBzAHxAfMB8QHyAfIB8wH0AfUB9gGVAfcBvwEgAp4BhgOsA4gDrQOJA64DigOvA4wDzAOOA80DjwPOA5kDRQOZA74fowPCA/cD+AP6A/sDYB6bHp4e3wBZH1EfWx9TH10fVR9fH1cfvB+zH8wfwx/sH+Uf/B/zHzoCZSw7AjwCPQKaAT4CZixBAkICQwKAAUQCiQJFAowC9AO4A/kD8gP9A3sD/gN8A/8DfQPABM8EJiHJAyohawArIeUAMiFOIYMhhCFgLGEsYixrAmMsfR1kLH0CbSxRAm4scQJvLFACcCxSAnIscyx1LHYsfiw/An8sQALyLPMsfad5HYunjKeNp2UCqqdmAscQJy3NEC0tdgN3A5wDtQCSA9ADmAPRA6YD1QOgA9YDmgPwA6ED8QOVA/UDzwPXAwAAAABBACAawAAgHwABAS8yAQEFOQEBD0oBAS15AQEFcAMBA5EDIBGjAyAJAARQEBAEICBgBAEhigQBNcEEAQ3QBAE/FAUBEzEFMCagAQEFswEBA80BAQ/eAQER+AEBJyICARHYAwEXAB4BlaAeAV8IH/gIGB/4Bigf+Ag4H/gISB/4Bmgf+AiIH/gImB/4CKgf+Ai4H/gCuh+2AsgfqgTYH/gC2h+cAugf+ALqH5AC+B+AAvofggJGAgEJEAUBA2AhEBAALDAvZywBBYAsAWPrLAEDQKYBLYCmARcipwENMqcBPXmnAQN+pwEJkKcBA6CnAQkh/yAaAAAAAHsgdmFyIHBhdGggPSBQb2ludGVyX3N0cmluZ2lmeSgkMCk7IHZhciBkYXRhID0gUG9pbnRlcl9zdHJpbmdpZnkoJDEpOyBGUy5jcmVhdGVQYXRoKCIvIiwgUEFUSC5kaXJuYW1lKHBhdGgpKTsgRlMud3JpdGVGaWxlKFBBVEguam9pbigiLyIsIHBhdGgpLCBkYXRhKTsgfQBjb3JlAHhkb3R2ZXJzaW9uADEuNwAxLjQAMS4yAF9sZHJhd18AX2hkcmF3XwBfdGRyYXdfAF9obGRyYXdfAF90bGRyYXdfAHhkb3QgdmVyc2lvbiAiJXMiIHRvbyBsb25nACAlZCAAJS4wMmYAJXMlZCAtACMlMDJ4JTAyeCUwMnglMDJ4AHNldGxpbmV3aWR0aCgAJS4zZgBTIABDIAAyIABFIABlIABGIAB0ICV1IABUIABkb3Q6ZG90AGd2OmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHBsYWluLWV4dDpkb3QAeGRvdDp4ZG90AHhkb3QxLjI6eGRvdAB4ZG90MS40Onhkb3QASSAAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiZWRnZXMiOiBbCgAiX2d2aWQiOiAlZCwKACJ0YWlsIjogJWQsCgAiaGVhZCI6ICVkACJvYmplY3RzIjogWwoAIm5vZGVzIjogWwoAIm5hbWUiOiAiJXMiAFwiAFwvAFxiAFxmAFxuAFxyAFx0ACJzdWJncmFwaHMiOiBbCgAiJXMiOiAAIiVzIgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBbCgAib3AiOiAiJWMiLAoAInJlY3QiOiBbJS4wM2YsJS4wM2YsJS4wM2YsJS4wM2ZdCgAib3AiOiAiTCIsCgAib3AiOiAiVCIsCgAicHQiOiBbJS4wM2YsJS4wM2ZdLAoAImFsaWduIjogIiVjIiwKACJ3aWR0aCI6ICUuMDNmLAoAInRleHQiOiAiJXMiCgAiZ3JhZCI6ICJub25lIiwKACJjb2xvciI6ICIlcyIKACJncmFkIjogImxpbmVhciIsCgAiZ3JhZCI6ICJyYWRpYWwiLAoAIm9wIjogIkYiLAoAInNpemUiOiAlLjAzZiwKACJmYWNlIjogIiVzIgoAIm9wIjogIlMiLAoAInN0eWxlIjogIiVzIgoAIm9wIjogInQiLAoAImZvbnRjaGFyIjogJWQKACJwMCI6IFslLjAzZiwlLjAzZiwlLjAzZl0sCgAicDEiOiBbJS4wM2YsJS4wM2YsJS4wM2ZdLAoAInN0b3BzIjogWwB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogIiVzIn0AXQoAInAwIjogWyUuMDNmLCUuMDNmXSwKACJwMSI6IFslLjAzZiwlLjAzZl0sCgAicG9pbnRzIjogWwBbJS4wM2YsJS4wM2ZdAGRyYXdfAGxkcmF3XwBoZHJhd18AdGRyYXdfAGhsZHJhd18AdGxkcmF3XwAiZGlyZWN0ZWQiOiAlcywKACJzdHJpY3QiOiAlcwBEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHhkb3QAanNvbgBqc29uMABkb3RfanNvbgB4ZG90X2pzb24AanNvbjpqc29uAGpzb24wOmpzb24AZG90X2pzb246anNvbgB4ZG90X2pzb246anNvbgBuID49IDQAZ3ZyZW5kZXJfY29yZV9maWcuYwBmaWdfYmV6aWVyAGZpZ19yZXNvbHZlX2NvbG9yAGZpZwBmaWc6ZmlnAG1hcAByZWN0ICVzICVkLCVkICVkLCVkCgBjaXJjbGUgJXMgJWQsJWQsJWQKAHBvbHkgJXMAICVkLCVkAGd2cmVuZGVyX2NvcmVfbWFwLmMAbWFwX291dHB1dF9zaGFwZQByZWN0YW5nbGUgKCVkLCVkKSAoJWQsJWQpICVzICVzCgA8YXJlYSBzaGFwZT0iY2lyY2xlIgA8YXJlYSBzaGFwZT0icmVjdCIAPGFyZWEgc2hhcGU9InBvbHkiACBocmVmPSIAIHRpdGxlPSIAIGFsdD0iIgAgY29vcmRzPSIAJWQsJWQsJWQAJWQsJWQsJWQsJWQAJWQsJWQALCVkLCVkACI+CgA8L21hcD4KAGJhc2UgcmVmZXJlcgoAZGVmYXVsdCAAPG1hcCBpZD0iACIgbmFtZT0iAGlzbWFwOm1hcABjbWFwOm1hcABpbWFwOm1hcABjbWFweDptYXAAaW1hcF9ucDptYXAAY21hcHhfbnA6bWFwACMgJXMKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAJWQgJWQgIyUwMnglMDJ4JTAyeAoAZ3ZyZW5kZXJfY29yZV9tcC5jAG1wX3Jlc29sdmVfY29sb3IAJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlLjRmICVkICUuMWYgJS4xZiAlZCAlZCAlc1wwMDEKACMgZW5kIG9mIEZJRyBmaWxlCgAjRklHIDMuMgoAIyBHZW5lcmF0ZWQgYnkgJXMgdmVyc2lvbiAlcyAoJXMpCgAjIFRpdGxlOiAlcwoAIyBQYWdlczogJWQKAFBvcnRyYWl0CgBDZW50ZXIKAEluY2hlcwoATGV0dGVyCgAxMDAuMDAKAFNpbmdsZQoALTIKADEyMDAAIDIKAG1wAG1wOm1wACBdICAlZCB0cnVlICVzCgAgXSAgJWQgZmFsc2UgJXMKACBzZXRsaW5ld2lkdGgKACVzIABzZXRoc2IAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAJSAAbmV3cGF0aCAAIG1vdmV0bwoAIGxpbmV0bwoAc3Ryb2tlCgAgY3VydmV0bwoAY2xvc2VwYXRoIGZpbGwKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggZmlsbAoAIGVsbGlwc2VfcGF0aCBzdHJva2UKACAvJXMgc2V0X2ZvbnQKACBtb3ZldG8gACAlcyBhbGlnbmVkdGV4dAoAWyAvUmVjdCBbIAAgXQoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgBnc2F2ZQoAJSUgJXMKADAgMCAwIGVkZ2Vjb2xvcgoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAJSVQYWdlVHJhaWxlcgoAJSUlJUVuZFBhZ2U6ICVkCgAlJSUlUGFnZTogJWQgJWQKACUlJSVQYWdlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgBMYW5kc2NhcGUAUG9ydHJhaXQAJSUlJVBhZ2VPcmllbnRhdGlvbjogJXMKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKACVkICVkICVkIGJlZ2lucGFnZQoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKACVnICVnIHNldF9zY2FsZSAlZCByb3RhdGUgJWcgJWcgdHJhbnNsYXRlCgBjYW52YXMgc2l6ZSAoJWQsJWQpIGV4Y2VlZHMgUERGIGxpbWl0ICglZCkKCShzdWdnZXN0IHNldHRpbmcgYSBib3VuZGluZyBib3ggc2l6ZSwgc2VlIGRvdCgxKSkKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAJWQgJWQgc2V0bGF5ZXIKACUlJSVUaXRsZTogJXMKACUlUGFnZXM6IChhdGVuZCkKACUlUGFnZXM6IDEKACUlQm91bmRpbmdCb3g6IChhdGVuZCkKACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKACUlRW5kQ29tbWVudHMKc2F2ZQoAc2V0dXBMYXRpbjEKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgAlJUJlZ2luUHJvbG9nAC9Eb3REaWN0IDIwMCBkaWN0IGRlZgBEb3REaWN0IGJlZ2luAC9zZXR1cExhdGluMSB7AG1hcmsAL0VuY29kaW5nVmVjdG9yIDI1NiBhcnJheSBkZWYAIEVuY29kaW5nVmVjdG9yIDAASVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwARW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQAJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nAC9zdGFybmV0SVNPIHsAICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgAgICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UAICAgICAgICB9IGZvcmFsbAAgICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYAICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAB9IGRlZgAvVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmAC9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvQ291cmllciBzdGFybmV0SVNPIGRlZgAvQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmAC9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAY2xlYXJ0b21hcmsAfSBiaW5kIGRlZgAlJUJlZ2luUmVzb3VyY2U6IHByb2NzZXQgZ3JhcGh2aXogMCAwAC9jb29yZC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmAC9kZWZhdWx0LWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYAL2Nvb3JkZm9udCBjb29yZC1mb250LWZhbWlseSBmaW5kZm9udCA4IHNjYWxlZm9udCBkZWYAL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYAL3NldF9zY2FsZSB7ACAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYAICAgICAgIHNjYWxlACUgc3R5bGVzAC9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYAL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmAC9maWxsZWQgeyB9IGJpbmQgZGVmAC91bmZpbGxlZCB7IH0gYmluZCBkZWYAL3JvdW5kZWQgeyB9IGJpbmQgZGVmAC9kaWFnb25hbHMgeyB9IGJpbmQgZGVmAC90YXBlcmVkIHsgfSBiaW5kIGRlZgAlIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAAvbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYAL2JlZ2lucGFnZSB7CSUgaSBqIG5wYWdlcwAJL25wYWdlcyBleGNoIGRlZgAJL2ogZXhjaCBkZWYACS9pIGV4Y2ggZGVmAAkvc3RyIDEwIHN0cmluZyBkZWYACW5wYWdlcyAxIGd0IHsACQlnc2F2ZQAJCQljb29yZGZvbnQgc2V0Zm9udAAJCQkwIDAgbW92ZXRvAAkJCShcKCkgc2hvdyBpIHN0ciBjdnMgc2hvdyAoLCkgc2hvdyBqIHN0ciBjdnMgc2hvdyAoXCkpIHNob3cACQlncmVzdG9yZQAJfSBpZgAvc2V0X2ZvbnQgewAJZmluZGZvbnQgZXhjaAAJc2NhbGVmb250IHNldGZvbnQAJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAAvYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAAJL3RleHQgZXhjaCBkZWYACS93aWR0aCBleGNoIGRlZgAJZ3NhdmUACQl3aWR0aCAwIGd0IHsACQkJW10gMCBzZXRkYXNoAAkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cACQl9IGlmAAlncmVzdG9yZQAvYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplAAkJNCAyIHJvbGwACQltb3ZldG8ACQkyIGNvcHkACQlleGNoIDAgcmxpbmV0bwAJCTAgZXhjaCBybGluZXRvAAkJcG9wIG5lZyAwIHJsaW5ldG8ACQljbG9zZXBhdGgAL2VsbGlwc2VfcGF0aCB7AAkvcnkgZXhjaCBkZWYACS9yeCBleGNoIGRlZgAJL3kgZXhjaCBkZWYACS94IGV4Y2ggZGVmAAltYXRyaXggY3VycmVudG1hdHJpeAAJbmV3cGF0aAAJeCB5IHRyYW5zbGF0ZQAJcnggcnkgc2NhbGUACTAgMCAxIDAgMzYwIGFyYwAJc2V0bWF0cml4AC9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgAvc2hvd3BhZ2UgeyB9IGRlZgAvbGF5ZXJjb2xvcnNlcQAJWwklIGxheWVyIGNvbG9yIHNlcXVlbmNlIC0gZGFya2VzdCB0byBsaWdodGVzdAAJCVswIDAgMF0ACQlbLjIgLjggLjhdAAkJWy40IC44IC44XQAJCVsuNiAuOCAuOF0ACQlbLjggLjggLjhdAAldAGRlZgAvbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmAC9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgAJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0AAlhbG9hZCBwb3Agc2V0aHNiY29sb3IACS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYACS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYACS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmAC9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgAvb25sYXllcnMgewAJL215dXBwZXIgZXhjaCBkZWYACS9teWxvd2VyIGV4Y2ggZGVmAAljdXJsYXllciBteWxvd2VyIGx0AAljdXJsYXllciBteXVwcGVyIGd0AAlvcgAJe2ludmlzfSBpZgAvY3VybGF5ZXIgMCBkZWYAJSVFbmRSZXNvdXJjZQAlJUVuZFByb2xvZwAlJUJlZ2luU2V0dXAAMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAAlIC9hcnJvd2xlbmd0aCAxMCBkZWYAJSAvYXJyb3d3aWR0aCA1IGRlZgAlIG1ha2Ugc3VyZSBwZGZtYXJrIGlzIGhhcm1sZXNzIGZvciBQUy1pbnRlcnByZXRlcnMgb3RoZXIgdGhhbiBEaXN0aWxsZXIAL3BkZm1hcmsgd2hlcmUge3BvcH0ge3VzZXJkaWN0IC9wZGZtYXJrIC9jbGVhcnRvbWFyayBsb2FkIHB1dH0gaWZlbHNlACUgbWFrZSAnPDwnIGFuZCAnPj4nIHNhZmUgb24gUFMgTGV2ZWwgMSBkZXZpY2VzAC9sYW5ndWFnZWxldmVsIHdoZXJlIHtwb3AgbGFuZ3VhZ2VsZXZlbH17MX0gaWZlbHNlADIgbHQgewAgICAgdXNlcmRpY3QgKDw8KSBjdm4gKFspIGN2biBsb2FkIHB1dAAgICAgdXNlcmRpY3QgKD4+KSBjdm4gKFspIGN2biBsb2FkIHB1dAB9IGlmACUlRW5kU2V0dXAAJSVUcmFpbGVyCgAlJSUlUGFnZXM6ICVkCgBlbmQKcmVzdG9yZQoAJSVFT0YKACUhUFMtQWRvYmUtMy4wACBFUFNGLTMuMAoAJSUlJUNyZWF0b3I6ICVzIHZlcnNpb24gJXMgKCVzKQoAcHMyOnBzADwhLS0gADxwb2x5bGluZQAgcG9pbnRzPSIAIi8+CgAgZmlsbD0iAHVybCgjbF8lZCkAdXJsKCNyXyVkKQAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2U9IgAiIHN0cm9rZS13aWR0aD0iACIgc3Ryb2tlLWRhc2hhcnJheT0iJXMANSwyADEsNQAiIHN0cm9rZS1vcGFjaXR5PSIlZgBndnJlbmRlcl9jb3JlX3N2Zy5jAHN2Z19wcmludF9jb2xvcgA8cGF0aAAgaWQ9IgBfcCIgACBkPSIAJWMAPGRlZnM+CjxyYWRpYWxHcmFkaWVudCBpZD0icl8lZCIgY3g9IjUwJSUiIGN5PSI1MCUlIiByPSI3NSUlIiBmeD0iJWQlJSIgZnk9IiVkJSUiPgoAPHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjoAO3N0b3Atb3BhY2l0eToAMS4AOyIvPgoAPHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+CgA8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJsXyVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgAHgxPSIAIiB5MT0iACIgeDI9IgAiIHkyPSIAIiA+CgA8c3RvcCBvZmZzZXQ9IiUuMDNmIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+CgA8cG9seWdvbgA8ZWxsaXBzZQAgY3g9IgAiIGN5PSIAIiByeD0iACIgcnk9IgA8dGV4dAAgdGV4dC1hbmNob3I9InN0YXJ0IgAgdGV4dC1hbmNob3I9ImVuZCIAIHRleHQtYW5jaG9yPSJtaWRkbGUiACB4PSIAIiB5PSIAIGZvbnQtZmFtaWx5PSIlcwAsJXMAIGZvbnQtd2VpZ2h0PSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAIGZvbnQtZmFtaWx5PSIlcyIAIGZvbnQtd2VpZ2h0PSJib2xkIgAgZm9udC1zdHlsZT0iaXRhbGljIgAgdGV4dC1kZWNvcmF0aW9uPSIAJXNvdmVybGluZQAlc2xpbmUtdGhyb3VnaAAgYmFzZWxpbmUtc2hpZnQ9InN1cGVyIgAgYmFzZWxpbmUtc2hpZnQ9InN1YiIAIGZvbnQtc2l6ZT0iJS4yZiIAIGZpbGw9IiVzIgAgZmlsbD0iIyUwMnglMDJ4JTAyeCIAc3ZnX3RleHRzcGFuAD4APHRleHRQYXRoIHhsaW5rOmhyZWY9IiMlc19wIiBzdGFydE9mZnNldD0iNTAlJSI+ADx0c3BhbiB4PSIwIiBkeT0iACI+ADwvdHNwYW4+PC90ZXh0UGF0aD4APC90ZXh0PgoAPC9nPgoAPGcAIGlkPSJhXwAgeGxpbms6aHJlZj0iACB4bGluazp0aXRsZT0iACB0YXJnZXQ9IgA8dGl0bGU+ADwvdGl0bGU+CgA8ZyBpZD0iAF8lcwAiIGNsYXNzPSIlcwBjbGFzcwAgdHJhbnNmb3JtPSJzY2FsZSgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAKSI+CgA8L3N2Zz4KADwhLS0AIFBhZ2VzOiAlZCAtLT4KADxzdmcgd2lkdGg9IiVkcHQiIGhlaWdodD0iJWRwdCIKACB2aWV3Qm94PSIlLjJmICUuMmYgJS4yZiAlLjJmIgAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgoAc3R5bGVzaGVldAA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIHR5cGU9InRleHQvY3NzIj8+CgA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iCgAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CgA8IS0tIEdlbmVyYXRlZCBieSAAZGFya2JsdWUAZGFya2N5YW4AZGFya2dyYXkAZGFya2dyZXkAZGFya21hZ2VudGEAZGFya3JlZABsaWdodGdyZWVuACMgACBjcmVhdGUgbGluZSAAIC1maWxsIAAgLWRhc2ggNQAgLWRhc2ggMgBndnJlbmRlcl9jb3JlX3RrLmMAdGtnZW5fcHJpbnRfdGFncwBncmFwaCBsYWJlbAAgLXRhZ3MgeyVkJXMlcH0AdGtnZW5fcHJpbnRfY29sb3IAJGMAIC13aWR0aCAAIC1zbW9vdGggYmV6aWVyIAAgY3JlYXRlIHBvbHlnb24gACAtb3V0bGluZSAAIGNyZWF0ZSBvdmFsIAAgY3JlYXRlIHRleHQgACAtdGV4dCB7AH0AIC1mb250IHsAICVkfQAgLWFuY2hvciB3ACAtYW5jaG9yIGUAIwAgVGl0bGU6IAAgUGFnZXM6ICVkCgAjIEdlbmVyYXRlZCBieSAAKQoAdGsAdGs6dGsAICAgICAgPCEtLSAAIC0tPgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gIFF1aXRpbmcuCgAgPHY6c2hhcGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIgZmlsbGVkPSJmYWxzZSI+ADx2OnBhdGggdj0iACBtIAAlLjBmLCUuMGYgACBsIAAgZSAAIi8+ADwvdjpzaGFwZT4KADx2OnN0cm9rZSBjb2xvcj0iACIgd2VpZ2h0PSIlLjBmcHQAIiBkYXNoc3R5bGU9ImRhc2gAIiBkYXNoc3R5bGU9ImRvdAAiIC8+ACMlMDJ4JTAyeCUwMngAZ3ZyZW5kZXJfY29yZV92bWwuYwB2bWxfcHJpbnRfY29sb3IAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIAID4APHY6cGF0aCAgdj0iAC8+PC92OnNoYXBlPgoAbSAAJXMlLjBmLCUuMGYgAGMgACBmaWxsZWQ9InRydWUiIGZpbGxjb2xvcj0iACIgACBmaWxsZWQ9ImZhbHNlIiAAJS4wZiAlLjBmIABsIAB4IGUgIi8+ACAgPHY6b3ZhbCBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7ACBsZWZ0OiAlLjJmOyB0b3A6ICUuMmY7ACB3aWR0aDogJS4yZjsgaGVpZ2h0OiAlLjJmIgA8L3Y6b3ZhbD4KADx2OnJlY3Qgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHN0cm9rZWQ9ImZhbHNlIiBmaWxsZWQ9ImZhbHNlIj4KADx2OnRleHRib3ggaW5zZXQ9IjAsMCwwLDAiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdi10ZXh0LXdyYXBwaW5nOidmYWxzZSc7cGFkZGluZzonMCc7AGZvbnQtZmFtaWx5OiAnJXMnOwBmb250LXdlaWdodDogJXM7AGZvbnQtc3RyZXRjaDogJXM7AGZvbnQtc3R5bGU6ICVzOwAgZm9udC1zaXplOiAlLjJmcHQ7AGNvbG9yOiVzOwBjb2xvcjojJTAyeCUwMnglMDJ4OwB2bWxfdGV4dHNwYW4AIj48Y2VudGVyPgA8L2NlbnRlcj48L3Y6dGV4dGJveD4KADwvdjpyZWN0PgoAPC9hPgoAPGEAIGhyZWY9IiVzIgAgdGl0bGU9IiVzIgAgdGFyZ2V0PSIlcyIAPgoAPC92Omdyb3VwPgoAPC9ESVY+CgA8RElWIGlkPSdfVk1MMl8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbiI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgaHRtbCBjb250ZW50IGhlcmUgLS0+CgA8RElWIGlkPSdfbm90Vk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgoAPCEtLSB0aGlzIHNob3VsZCBvbmx5IGRpc3BsYXkgb24gTk9OLUlFIGJyb3dzZXJzIC0tPgoAPEgyPlNvcnJ5LCB0aGlzIGRpYWdyYW0gd2lsbCBvbmx5IGRpc3BsYXkgY29ycmVjdGx5IG9uIEludGVybmV0IEV4cGxvcmVyIDUgKGFuZCB1cCkgYnJvd3NlcnMuPC9IMj4KADxESVYgaWQ9J19ub3RWTUwyXycgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgTk9OLUlFIGh0bWwgY29udGVudCBoZXJlIC0tPgoAPC9CT0RZPgo8L0hUTUw+CgA8SEVBRD4APE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoAPFRJVExFPgA8L1RJVExFPgA8IS0tIFBhZ2VzOiAlZCAtLT4KACAgIDxTQ1JJUFQgTEFOR1VBR0U9J0phdmFzY3JpcHQnPgoAICAgZnVuY3Rpb24gYnJvd3NlcmNoZWNrKCkKACAgIHsKACAgICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50CgAgICAgICB2YXIgbXNpZSA9IHVhLmluZGV4T2YgKCAnTVNJRSAnICkKACAgICAgIHZhciBpZXZlcnM7CgAgICAgICB2YXIgaXRlbTsKACAgICAgIHZhciBWTUx5ZXM9bmV3IEFycmF5KCdfVk1MMV8nLCdfVk1MMl8nKTsKACAgICAgIHZhciBWTUxubz1uZXcgQXJyYXkoJ19ub3RWTUwxXycsJ19ub3RWTUwyXycpOwoAICAgICAgaWYgKCBtc2llID4gMCApeyAgICAgIC8vIElmIEludGVybmV0IEV4cGxvcmVyLCByZXR1cm4gdmVyc2lvbiBudW1iZXIKACAgICAgICAgIGlldmVycz0gcGFyc2VJbnQgKHVhLnN1YnN0cmluZyAobXNpZSs1LCB1YS5pbmRleE9mICgnLicsIG1zaWUgKSkpCgAgICAgICB9CgAgICAgICBpZiAoaWV2ZXJzPj01KXsKACAgICAgICBmb3IgKHggaW4gVk1MeWVzKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUx5ZXNbeF0pOwoAICAgICAgICAgaWYgKGl0ZW0pIHsKACAgICAgICAgICAgaXRlbS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsKACAgICAgICAgIH0KACAgICAgICB9CgAgICAgICAgZm9yICh4IGluIFZNTG5vKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUxub1t4XSk7CgAgICAgICAgICAgIGl0ZW0uc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzsKACAgICAgfWVsc2V7CgAgICAgIH0KACAgIH0KACAgIDwvU0NSSVBUPgoAPC9IRUFEPgA8Qk9EWSBvbmxvYWQ9J2Jyb3dzZXJjaGVjaygpOyc+CgA8RElWIGlkPSdfVk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgZGlzcGxheTppbmxpbmU7IHZpc2liaWxpdHk6aGlkZGVuACB3aWR0aDogJWRwdDsgaGVpZ2h0OiAlZHB0Ij4KADxTVFlMRT4KAHZcOiogeyBiZWhhdmlvcjogdXJsKCNkZWZhdWx0I1ZNTCk7ZGlzcGxheTppbmxpbmUtYmxvY2t9CgA8L1NUWUxFPgoAPHhtbDpuYW1lc3BhY2UgbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiBwcmVmaXg9InYiIC8+CgAgPHY6Z3JvdXAgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyAAIHdpZHRoOiAlZHB0OyBoZWlnaHQ6ICVkcHQiACBjb29yZG9yaWdpbj0iMCwwIiBjb29yZHNpemU9IiVkLCVkIiA+ADxIVE1MPgoACjwhLS0gR2VuZXJhdGVkIGJ5IAAgdmVyc2lvbiAAICgAKQotLT4KAGFxdWEAZnVjaHNpYQBsaW1lAG9saXZlAHRlYWwAdm1sAHZtbDp2bWwALy8qKiogY29tbWVudDogJXMKAC8vKioqIHBvbHlsaW5lCgBzY2FsZSAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KAHJvdGF0ZSAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgoAdHJhbnNsYXRlPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICVkLAoAbGluZWFyX3NwbGluZQA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACVzICAgICVzACAgICB0b2xlcmFuY2UgMC4wMQogICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgAlcyVzACVzIHRyYW5zbWl0ICUuM2YAUmVkAEdyZWVuAEJsdWUAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgBndnJlbmRlcl9jb3JlX3Bvdi5jAHBvdl9jb2xvcl9hc19zdHIAcGlnbWVudCB7IGNvbG9yICVzIH0KAHBvdiByZW5kZXJlcjplbCAtICVzCgAvLyoqKiBiZXppZXIKAGJfc3BsaW5lACAgICAgICAgdG9sZXJhbmNlIDAuMDEKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogcG9seWdvbgoAICAgIHRvbGVyYW5jZSAwLjEKICAgICVzICAgICVzICAgICVzICAgICVzfQoAcG9seWdvbiB7ICVkLAoAPCU5LjNmLCAlOS4zZiwgJTkuM2Y+ACVzCiAgICAlcwAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogZWxsaXBzZQoAdG9ydXMgeyAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAHNwaGVyZSB7PCU5LjNmLCAlOS4zZiwgJTkuM2Y+LCAxLjAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogdGV4dHNwYW46ICVzLCBmb250c2l6ZSA9ICUuM2YsIGZvbnRuYW1lID0gJXMKAHNjYWxlICUuM2YKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlcyAgICAlc30KACAgICBub19zaGFkb3cKAC8vKioqIGVuZF9lZGdlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfbm9kZQoALy8qKiogYmVnaW5fbm9kZTogJXMKAC8vKioqIGVuZF9jbHVzdGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfcGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX2xheWVyCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgAvLyoqKiBlbmRfZ3JhcGgKAC8vKioqIGJlZ2luX2dyYXBoICVzCgBjYW1lcmEgeyBsb2NhdGlvbiA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICBsb29rX2F0ICA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAvL3NreQpwbGFuZSB7IDwwLCAxLCAwPiwgMSBob2xsb3cKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnQgeyBib3pvIHR1cmJ1bGVuY2UgMC45NQogICAgICAgICAgICBjb2xvcl9tYXAgewogICAgICAgICAgICAgICAgWzAuMDAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjUwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwwLjI1LCAwLjI1LCAwLjI1Pl0KICAgICAgICAgICAgICAgIFsxLjAwIHJnYiA8MC41MCwgMC41MCwgMC41MD5dCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2NhbGUgPDEuMDAsIDEuMDAsIDEuNTA+ICogMi41MAogICAgICAgICAgICB0cmFuc2xhdGUgPDAuMDAsIDAuMDAsIDAuMDA+CiAgICAgICAgfQogICAgICAgIGZpbmlzaCB7IGFtYmllbnQgMSBkaWZmdXNlIDAgfQogICAgfQogICAgc2NhbGUgMTAwMDAKfQovL21pc3QKZm9nIHsgZm9nX3R5cGUgMgogICAgZGlzdGFuY2UgNTAKICAgIGNvbG9yIHJnYiA8MS4wMCwgMS4wMCwgMS4wMD4gKiAwLjc1CiAgICBmb2dfb2Zmc2V0IDAuMTAKICAgIGZvZ19hbHQgMS41MAogICAgdHVyYnVsZW5jZSAxLjc1Cn0KLy9nbmQKcGxhbmUgeyA8MC4wMCwgMS4wMCwgMC4wMD4sIDAKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnR7IGNvbG9yIHJnYiA8MC4yNSwgMC40NSwgMC4wMD4gfQogICAgICAgIG5vcm1hbCB7IGJ1bXBzIDAuNzUgc2NhbGUgMC4wMSB9CiAgICAgICAgZmluaXNoIHsgcGhvbmcgMC4xMCB9CiAgICB9Cn0KAGxpZ2h0X3NvdXJjZSB7IDwxNTAwLDMwMDAsLTI1MDA+IGNvbG9yIFdoaXRlIH0KACN2ZXJzaW9uIDMuNjsKAGdsb2JhbF9zZXR0aW5ncyB7IGFzc3VtZWRfZ2FtbWEgMS4wIH0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgAjZGVjbGFyZSAlcyA9ICVzOwoAQmxhY2sAV2hpdGUAYmFrZXJzY2hvYwBicmFzcwBicmlnaHRnb2xkAGJyb256ZQBicm9uemUyAGNsZWFyAGNvb2xjb3BwZXIAY29wcGVyAGRhcmticm93bgBkYXJrcHVycGxlAGRhcmt0YW4AZGFya3dvb2QAZGtncmVlbmNvcHBlcgBkdXN0eXJvc2UAZmVsZHNwYXIAZmxlc2gAZ3JheTA1AGdyZWVuY29wcGVyAGh1bnRlcnNncmVlbgBsaWdodF9wdXJwbGUAbGlnaHR3b29kAG1hbmRhcmlub3JhbmdlAG1lZGl1bWZvcmVzdGdyZWVuAG1lZGl1bWdvbGRlbnJvZABtZWRpdW13b29kAG1lZF9wdXJwbGUAbWljYQBuZW9uYmx1ZQBuZW9ucGluawBuZXdtaWRuaWdodGJsdWUAbmV3dGFuAG9sZGdvbGQAcXVhcnR6AHJpY2hibHVlAHNjYXJsZXQAc2VtaVN3ZWV0Q2hvYwBzaWx2ZXIAc3BpY3lwaW5rAHN1bW1lcnNreQB2ZXJ5ZGFya2Jyb3duAHZlcnlfbGlnaHRfcHVycGxlAHBvdgBwb3Y6cG92ACVzICVzCgAuXCIgACAlZCAlZAAgJXMKACAlZABmaWxsIABlbGxpcHNlIGF0dHJzJWQgJXN3aWQgJS41ZiBodCAlLjVmIGF0ICglLjVmLCUuNWYpOwoALmZ0ICVzCgAucHMgJWQqXG4oU0Z1LyUuMGZ1CgAiJXMiIGF0ICglLjVmLCUuNWYpOwoAJTAzbwAlcyVzIGlzIG5vdCBhIHRyb2ZmIGZvbnQKAGRvdCBwaWMgcGx1Z2luOiAAUgBdCi5QRQoALlBTICUuNWYgJS41ZgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAC5uciBTRiAlLjBmCnNjYWxldGhpY2tuZXNzID0gJS4wZgoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKACVzIG5vbi1mYXRhbCBydW4tdGltZSBwaWMgdmVyc2lvbiBkZXRlcm1pbmF0aW9uLCB2ZXJzaW9uIDIKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgAlcyBkYXNod2lkIGlzIDAuMSBpbiAxMHRoIEVkaXRpb24sIDAuMDUgaW4gRFdCIDIgYW5kIGluIGdwaWMKACVzIGZpbGx2YWwgaXMgMC4zIGluIDEwdGggRWRpdGlvbiAoZmlsbCAwIG1lYW5zIGJsYWNrKSwgMC41IGluIGdwaWMgKGZpbGwgMCBtZWFucyB3aGl0ZSksIHVuZGVmaW5lZCBpbiBEV0IgMgoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKACVzIHJlc2V0IHdvcmtzIGluIGdwaWMgYW5kIDEwdGggZWRpdGlvbiwgYnV0IGlzbid0IGRlZmluZWQgaW4gRFdCIDIKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGlmIGJveHJhZCA+IDEuMCAmJiBkYXNod2lkIDwgMC4wNzUgdGhlbiBYCglmaWxsdmFsID0gMTsKCWRlZmluZSBmaWxsIFkgWTsKCWRlZmluZSBzb2xpZCBZIFk7CglkZWZpbmUgcmVzZXQgWSBzY2FsZT0xLjAgWTsKWAoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAaWYgZmlsbHZhbCA+IDAuNCB0aGVuIFgKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IDEgLSBZOwoJZGVmaW5lIGJvbGQgWSB0aGlja25lc3MgMiBZOwoACSVzIGlmIHlvdSB1c2UgZ3BpYyBhbmQgaXQgYmFyZnMgb24gZW5jb3VudGVyaW5nICJzb2xpZCIsCgAJJXMJaW5zdGFsbCBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ3BpYyBvciBzd2l0Y2ggdG8gRFdCIG9yIDEwdGggRWRpdGlvbiBwaWM7CgAJJXMJc29ycnksIHRoZSBncm9mZiBmb2xrcyBjaGFuZ2VkIGdwaWM7IHNlbmQgYW55IGNvbXBsYWludCB0byB0aGVtOwoAWCBlbHNlIFoKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IFk7CglkZWZpbmUgYm9sZCBZIFk7CglkZWZpbmUgZmlsbGVkIFkgZmlsbCBZOwpaCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAYXJyb3doZWFkID0gNyAlcyBub3QgdXNlZCBieSBncmFwaHZpegoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGJveHJhZCB2YXJpYWJsZSB0byBkcmF3IGJveGVzIHdpdGggcm91bmRlZCBjb3JuZXJzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAYm94cmFkID0gMCAlcyBubyByb3VuZGVkIGNvcm5lcnMgaW4gZ3JhcGh2aXoKACVzIEdOVSBwaWMgc3VwcG9ydHMgYSBsaW5ldGhpY2sgdmFyaWFibGUgdG8gc2V0IGxpbmUgdGhpY2tuZXNzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAlcyAuUFMgdy9vIGFyZ3MgY2F1c2VzIEdOVSBwaWMgdG8gc2NhbGUgZHJhd2luZyB0byBmaXQgOC41eDExIHBhcGVyOyBEV0IgZG9lcyBub3QKACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGhhdmUgbm8gbWVhbmluZyBpbiBEV0IgMi4wLCBzZXQgcGFnZSBib3VuZGFyaWVzIGluIGdwaWMgYW5kIGluIDEwdGggRWRpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgYXJlIHByZWRlZmluZWQgdG8gMTEuMCBhbmQgOC41IGluIGdwaWMKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBEb3Q6IFsKAGRlZmluZSBhdHRyczAgJSUgJSU7IGRlZmluZSB1bmZpbGxlZCAlJSAlJTsgZGVmaW5lIHJvdW5kZWQgJSUgJSU7IGRlZmluZSBkaWFnb25hbHMgJSUgJSUKACVzJXMgdW5zdXBwb3J0ZWQKACVzIHJlc3RvcmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoucHMgXG4oLlMKLmZ0IFxuKERGCgAlcyBDcmVhdG9yOiAlcyB2ZXJzaW9uICVzICglcykKACVzIFRpdGxlOiAlcwoAJXMgc2F2ZSBwb2ludCBzaXplIGFuZCBmb250Ci5uciAuUyBcbigucwoubnIgREYgXG4oLmYKAHBpYwBwaWM6cGljAHBuZzpzdmcAZ2lmOnN2ZwBqcGVnOnN2ZwBqcGU6c3ZnAGpwZzpzdmcAcG5nOmZpZwBnaWY6ZmlnAGpwZWc6ZmlnAGpwZTpmaWcAanBnOmZpZwBwbmc6dnJtbABnaWY6dnJtbABqcGVnOnZybWwAanBlOnZybWwAanBnOnZybWwAZXBzOnBzAHBzOnBzAChsaWIpOnBzAHBuZzptYXAAZ2lmOm1hcABqcGVnOm1hcABqcGU6bWFwAGpwZzptYXAAcHM6bWFwAGVwczptYXAAc3ZnOm1hcABwbmc6ZG90AGdpZjpkb3QAanBlZzpkb3QAanBlOmRvdABqcGc6ZG90AHBzOmRvdABlcHM6ZG90AHN2Zzpkb3QAcG5nOnhkb3QAZ2lmOnhkb3QAanBlZzp4ZG90AGpwZTp4ZG90AGpwZzp4ZG90AHBzOnhkb3QAZXBzOnhkb3QAc3ZnOnhkb3QAc3ZnOnN2ZwBwbmc6dm1sAGdpZjp2bWwAanBlZzp2bWwAanBlOnZtbABqcGc6dm1sAGdpZjp0awBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgA8djppbWFnZSBzcmM9IiVzIiBzdHlsZT0iIHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDolLjJmOyBoZWlnaHQ6JS4yZjsgbGVmdDolLjJmIDsgdG9wOiUuMmYiACAvPgoAZ3Zsb2FkaW1hZ2VfY29yZS5jAGNvcmVfbG9hZGltYWdlX3BzbGliAFsgACVnICVnIABdICAlZCB0cnVlICVzCgBdICAlZCBmYWxzZSAlcwoAY29yZV9sb2FkaW1hZ2VfcHMAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAHVzZXJfc2hhcGVfJWQKAGdyZXN0b3JlCgBjb3JlX2xvYWRpbWFnZV92cm1sAFNoYXBlIHsKACAgYXBwZWFyYW5jZSBBcHBlYXJhbmNlIHsKACAgICBtYXRlcmlhbCBNYXRlcmlhbCB7CgAgICAgICBhbWJpZW50SW50ZW5zaXR5IDAuMzMKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAgICAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICB9CgBjb3JlX2xvYWRpbWFnZV9maWcAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKACAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAY29yZV9sb2FkaW1hZ2Vfc3ZnADxpbWFnZSB4bGluazpocmVmPSIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgeD0iJWciIHk9IiVnIgAvPgoAZG90X2xheW91dABwaGFzZQBkb3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBmb3IgZGlzY29ubmVjdGVkIGdyYXBocyBvciBncmFwaHMgd2l0aCBjbHVzdGVycwoAY29tcG91bmQAdiA9PSBuAGRvdGluaXQuYwByZW1vdmVfZnJvbV9yYW5rAG9yZGVyAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoARURfbGFiZWwoZmUpAGRvdHNwbGluZXMuYwBfZG90X3NwbGluZXMAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKACAgRWRnZSAlcyAlcyAlcwoAeHh4ADEwMDAwAHslc30AYXV4ZwBsYWJlbF9mbG9hdABmaXhlZAAobCA9IEVEX2xhYmVsKGZlKSkAc2V0RWRnZUxhYmVsUG9zAGUgIT0gTlVMTABmYXN0Z3IuYwBkZWxldGVfZmFzdF9lZGdlAG4gIT0gTkRfbmV4dChuKQBmYXN0X25vZGUAdSAhPSB2AGZhc3Rfbm9kZWFwcABORF9uZXh0KHYpID09IE5VTEwAZmluZF9mYXN0X25vZGUoZywgbikAZGVsZXRlX2Zhc3Rfbm9kZQBkZWxldGVfZmxhdF9lZGdlAG1lcmdlX29uZXdheSBnbGl0Y2gKAG1lcmdlX29uZXdheQBzYWZlX2RlbGV0ZV9mYXN0X2VkZ2UAbGcAY29tcABjbnQgPT0gc3oAbWluY3Jvc3MuYwBmaXhMYWJlbE9yZGVyAHJlbWluY3Jvc3MAbWluY3Jvc3MgJXM6ICVkIGNyb3NzaW5ncywgJS4yZiBzZWNzLgoAdgBuZWlnaGJvcgAocnYgPT0gMCkgfHwgKE5EX29yZGVyKHJ2KS1ORF9vcmRlcih2KSkqZGlyID4gMABjb25zdHJhaW5pbmdfZmxhdF9lZGdlKGcsdixlKSA9PSBGQUxTRQBmbGF0X3Jlb3JkZXIATkRfcmFuayh2KSA9PSByAHBvc3RvcmRlcgBmbGF0aW5kZXgoYWdoZWFkKGUpKSA8IE0tPm5yb3dzAGZsYXRfc2VhcmNoAGZsYXRpbmRleChhZ3RhaWwoZSkpIDwgTS0+bmNvbHMAb3V0AG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQuCgBvcmRlcmluZyAnJXMnIG5vdCByZWNvZ25pemVkIGZvciBub2RlICclcycuCgBtZXJnZTI6IGdyYXBoICVzLCByYW5rICVkIGhhcyBvbmx5ICVkIDwgJWQgbm9kZXMKAG1pbmNyb3NzOiBwYXNzICVkIGl0ZXIgJWQgdHJ5aW5nICVkIGN1cl9jcm9zcyAlZCBiZXN0X2Nyb3NzICVkCgBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAGJhbGFuY2UAdHJhbnNwb3NlX3N0ZXAAc3VycHJpc2UKAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogJXMgJXMgcmFuayAlZCBpID0gJWQgYW4gPSAwCgBHRF9yYW5rKGcpW3JdLm4gPD0gR0RfcmFuayhnKVtyXS5hbgBpbnN0YWxsX2luX3JhbmsAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiBORF9vcmRlciglcykgWyVkXSA+IEdEX3JhbmsoUm9vdClbJWRdLmFuIFslZF0KAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogcmFuayAlZCBub3QgaW4gcmFuayByYW5nZSBbJWQsJWRdCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IEdEX3JhbmsoZylbJWRdLnYgKyBORF9vcmRlciglcykgWyVkXSA+IEdEX3JhbmsoZylbJWRdLmF2ICsgR0RfcmFuayhSb290KVslZF0uYW4gWyVkXQoAX25ld19yYW5rAG1jbGltaXQAcmFuayhnLCAyLCBuc2l0ZXIyKGcpKSA9PSAwAHBvc2l0aW9uLmMAZG90X3Bvc2l0aW9uAEFSPSUwLjRsZgkgQXJlYT0gJTAuNGxmCQBEdW1teT0lZAoAR29pbmcgdG8gYXBwbHkgYW5vdGhlciBleHBhbnNpb24uCgBuZXh0I2l0ZXI9JWQKAGhwAGNvbm5lY3RHcmFwaABFZGdlIGxlbmd0aCAlZiBsYXJnZXIgdGhhbiBtYXhpbXVtICV1IGFsbG93ZWQuCkNoZWNrIGZvciBvdmVyd2lkZSBub2RlKHMpLgoAbnNsaW1pdABjb250YWluX25vZGVzIGNsdXN0ICVzIHJhbmsgJWQgbWlzc2luZyBub2RlCgBuc2xpbWl0MQBuZXdyYW5rAE1heHJhbmsgPSAlZCwgbWlucmFuayA9ICVkCgBsZWFkZXIgIT0gTlVMTAByYW5rLmMAY2x1c3Rlcl9sZWFkZXIAKE5EX1VGX3NpemUobikgPD0gMSkgfHwgKG4gPT0gbGVhZGVyKQBhZ2hlYWQoZSkgPT0gVUZfZmluZChhZ2hlYWQoZSkpAG1pbm1heF9lZGdlcwBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAHJhbmsAc2FtZQBtaW4Ac291cmNlAG1heABzaW5rAGxldmVsIGFzc2lnbm1lbnQgY29uc3RyYWludHMAbGV2ZWwgZ3JhcGggcmVjAH9yb290AH90b3AAf2JvdABjb21wYWN0AF93ZWFrXyVkAHJhbmtpbmc6IGZhaWx1cmUgdG8gY3JlYXRlIHN0cm9uZyBjb25zdHJhaW50IGVkZ2UgYmV0d2VlbiBub2RlcyAlcyBhbmQgJXMKACVzIGhhcyB1bnJlY29nbml6ZWQgcmFuaz0lcwBsZXZlbCBlZGdlIHJlYwBsZXZlbCBub2RlIHJlYwBzYW1laGVhZABzYW1ldGFpbAB0b28gbWFueSAoPiAlZCkgc2FtZXtoZWFkLHRhaWx9IGdyb3VwcyBmb3Igbm9kZSAlcwoAY29tYmlBUiA9ICVsZgoAJWxmLCVkAHRoZSBhc3BlY3QgYXR0cmlidXRlIGhhcyBiZWVuIGRpc2FibGVkIGR1ZSB0byBpbXBsZW1lbnRhdGlvbiBmbGF3cyAtIGF0dHJpYnV0ZSBpZ25vcmVkLgoARURfdG9fdmlydChlKSA9PSBOVUxMAGNsYXNzMi5jAG1lcmdlX2NoYWluAEVEX3RvX3ZpcnQob3JpZykgPT0gTlVMTABtYWtlX2NoYWluAEVEX3RvX3ZpcnQob3JpZykgIT0gTlVMTABORF9yYW5rKGZyb20pIDwgTkRfcmFuayh0bykAY2x1c3Rlci5jAG1hcF9wYXRoACVzIHdhcyBhbHJlYWR5IGluIGEgcmFua3NldCwgZGVsZXRlZCBmcm9tIGNsdXN0ZXIgJXMKAGxoZWFkAGx0YWlsACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAJXMgLT4gJXM6IGhlYWQgbm90IGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiB0YWlsIGlzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAGJlei0+c2ZsYWcAY29tcG91bmQuYwBtYWtlQ29tcG91bmRFZGdlAGJlei0+ZWZsYWcAJXMgLT4gJXM6IHRhaWwgbm90IGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiBoZWFkIGlzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAHNlZ21lbnQgWyVzLCVzXSBkb2VzIG5vdCBpbnRlcnNlY3QgYm94IGxsPSVzLHVyPSVzCgBib3hJbnRlcnNlY3RmACglLjVnLCUuNWcpAGNsdXN0ZXIgbmFtZWQgJXMgbm90IGZvdW5kCgBjb25jZW50cmF0ZT10cnVlIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCgByZWJ1aWx0ZF92bGlzdHM6IHJhbmsgbGVhZCAlcyBub3QgaW4gb3JkZXIgJWQgb2YgcmFuayAlZAoAZGVnZW5lcmF0ZSBjb25jZW50cmF0ZWQgcmFuayAlcywlZAoATkRfaW4ocmlnaHQpLnNpemUgKyBORF9vdXQocmlnaHQpLnNpemUgPT0gMABjb25jLmMAbWVyZ2V2aXJ0dWFsAGRvdDogT3V0IG9mIG1lbW9yeQoATkRfb3V0KHYpLnNpemUgPT0gMgBmbGF0LmMAc2V0Ym91bmRzAEdEX21pbnJhbmsoZykgPT0gMABhYm9taW5hdGlvbgBuZWF0b19sYXlvdXQAbmVhdG8AZmRwAHNmZHAAdHdvcGkAY2lyY28AcGF0Y2h3b3JrAG9zYWdlAG5vcABub3AxAG5vcDIAJWxmLCVsZiwlbGYlYwBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGRvdWJsZXMKAG5vdHJhbnNsYXRlAG5vZGUgJXMgaW4gZ3JhcGggJXMgaGFzIG5vIHBvc2l0aW9uCgBzLCVsZiwlbGYlbgAgZSwlbGYsJWxmJW4AcG9zIGF0dHJpYnV0ZSBmb3IgZWRnZSAoJXMsJXMpIGRvZXNuJ3QgaGF2ZSAzbisxIHBvaW50cwoAJWxmLCVsZiVuAHN5bnRheCBlcnJvciBpbiBwb3MgYXR0cmlidXRlIGZvciBlZGdlICglcywlcykKACVsZiwlbGYsJWxmLCVsZgBzdGFydABzZWxmAHJhbmRvbQBub2RlIHBvc2l0aW9ucyBhcmUgaWdub3JlZCB1bmxlc3Mgc3RhcnQ9cmFuZG9tCgBhcyByZXF1aXJlZCBieSB0aGUgLW4gZmxhZwoAX25lYXRvX2NjAGdyYXBoICVzIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBBbHRlcm5hdGl2ZWx5LCBjb25zaWRlciBydW5uaW5nIG5lYXRvIHVzaW5nIC1HcGFjaz10cnVlIG9yIGRlY29tcG9zaW5nCgB0aGUgZ3JhcGggaW50byBjb25uZWN0ZWQgY29tcG9uZW50cy4KAFNvbHZpbmcgbW9kZWwgJWQgaXRlcmF0aW9ucyAlZCB0b2wgJWYKAE5EX2lkKG5wKSA9PSBpAG5lYXRvaW5pdC5jAG1ha2VHcmFwaERhdGEAZiA8IGdyYXBoW2pdLm5lZGdlcwBkZnNDeWNsZQBtb2RlbCAlZCBzbWFydF9pbml0ICVkIHN0cmVzc3d0ICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgBjb252ZXJ0IGdyYXBoOiAAbWFqb3JpemF0aW9uCgAlZCBub2RlcyAlLjJmIHNlYwoAbGV2ZWxzZ2FwAGxheW91dCBhYm9ydGVkCgBzdHJlc3N3dAAlcyBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSAxIG9yIDIgLSBpZ25vcmluZwoAbW9kZWwAY2lyY3VpdABzdWJzZXQAc2hvcnRwYXRoAG1kcwBlZGdlcyBpbiBncmFwaCAlcyBoYXZlIG5vIGxlbiBhdHRyaWJ1dGUuIEhlbmNlLCB0aGUgbWRzIG1vZGVsCgBpcyBpbmFwcHJvcHJpYXRlLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBVbmtub3duIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGVsIiBpbiBncmFwaCAlcyAtIGlnbm9yZWQKAG1vZGUAS0sAbWFqb3IAaGllcgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAbWFrZVNwbGluZTogZmFpbGVkIHRvIG1ha2Ugc3BsaW5lIGVkZ2UgKCVzLCVzKQoAc3BsaW5lICVzICVzCgBiID09IG4AbmVhdG9zcGxpbmVzLmMAbWFrZV9iYXJyaWVycwB0aGUgYm91bmRpbmcgYm94ZXMgb2Ygc29tZSBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBzb21lIG5vZGVzIHdpdGggbWFyZ2luICglLjAyZiwlLjAyZikgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAcG9seWxpbmVzAGxpbmUgc2VnbWVudHMAb3J0aG9nb25hbCBsaW5lcwBDcmVhdGluZyBlZGdlcyB1c2luZyAlcwoAcG9seWxpbmUgJXMgJXMKAG1kc01vZGVsOiBkZWx0YSA9ICVmCgBTZXR0aW5nIHVwIHN0cmVzcyBmdW5jdGlvbgBTb2x2aW5nIG1vZGVsOiAACmZpbmFsIGUgPSAlZiAlZCBpdGVyYXRpb25zICUuMmYgc2VjCgBEYW1waW5nAGRlZmF1bHRkaXN0ACBpbiAlcyAtIHNldHRpbmcgdG8gJS4wMmYKAGJhZCBlZGdlIGxlbiAiJXMiAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMKAHN0YXJ0PSVzIG5vdCBzdXBwb3J0ZWQgd2l0aCBtb2RlPXNlbGYgLSBpZ25vcmVkCgBTZXR0aW5nIHVwIHNwcmluZyBtb2RlbDogACUuMmYgc2VjCgAKZmluYWwgZSA9ICVmACEAICVkJXMgaXRlcmF0aW9ucyAlLjJmIHNlYwoATWF4LiBpdGVyYXRpb25zICglZCkgcmVhY2hlZCBvbiBncmFwaCAlcwoAJXMgJS4zZgoAJS4zZiAATkRfaGVhcGluZGV4KHYpIDwgMABzdHVmZi5jAG5lYXRvX2VucXVldWUAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHM6IABzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AVXNpbmcgZGVmYXVsdCBjYWxjdWxhdGlvbiBmb3Igcm9vdCBub2RlCgByZXBvc2l0aW9uICVzCgAlcyA6ICVmICVmCgAlcyA6ICVmICVmICVmICVmCgAgIABHcmFwaCAlcyBoYXMgYXJyYXkgcGFja2luZyB3aXRoIHVzZXIgdmFsdWVzIGJ1dCBubyAic29ydHYiIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQuAHBpbgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAY29vcmRzAGxheW91dCAlcwoAZW5kICVzCgBpZHggPT0gc3oAbGF5b3V0LmMAZXhwYW5kQ2x1c3RlcgBpID09IGRlZwBnZXRFZGdlTGlzdABfZGdfJWQAZGVyaXZlIGdyYXBoICVzIG9mICVzCgBub2RlICIlcyIgaXMgY29udGFpbmVkIGluIHR3byBub24tY29tcGFyYWJsZSBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBfcG9ydF8lc18lc18lc18lbGQAX3BvcnRfJXNfKCVkKV8oJWQpXyVsZAAlbGYsJWxmLCVsZiwlbGYlYwBncmFwaCAlcywgY29vcmQgJXMsIGV4cGVjdGVkIGZvdXIgZG91YmxlcwoAc3BsaW5lcyBhbmQgY2x1c3RlciBlZGdlcyBub3Qgc3VwcG9ydGVkIC0gdXNpbmcgbGluZSBzZWdtZW50cwoAbWF4aXRlcgBUMABmZHAgZG9lcyBub3Qgc3VwcG9ydCBzdGFydD1zZWxmIC0gaWdub3JpbmcKAHhMYXlvdXQgADk6cHJpc20AdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgBkZXJpdmVkAGluZm8Ac2ZkcCBvbmx5IHN1cHBvcnRzIHN0YXJ0PXJhbmRvbQoASwByZXB1bHNpdmVmb3JjZQBsZXZlbHMAc21vb3RoaW5nAHF1YWR0cmVlAGJlYXV0aWZ5AG92ZXJsYXBfc2hyaW5rAHJvdGF0aW9uAGxhYmVsX3NjaGVtZQBsYWJlbF9zY2hlbWUgPSAlZCA+IDQgOiBpZ25vcmluZwoAZmFzdABhdmdfZGlzdABncmFwaF9kaXN0AHBvd2VyX2Rpc3QAc3ByaW5nAGRpbWVuAGRpbQBzcHJpbmdfZWxlY3RyaWNhbF9jb250cm9sOgoAICByZXB1bHNpdmUgYW5kIGF0dHJhY3RpdmUgZXhwb25lbnRzOiAlLjAzZiAlLjAzZgoAICByYW5kb20gc3RhcnQgJWQgc2VlZCAlZAoAICBLIDogJS4wM2YgQyA6ICUuMDNmCgAgIG1heCBsZXZlbHMgJWQgY29hcnNlbl9zY2hlbWUgJWQgY29hcnNlbl9ub2RlICVkCgAgIHF1YWR0cmVlIHNpemUgJWQgbWF4X2xldmVsICVkCgAgIEJhcm5lcy1IdXR0IGNvbnN0YW50ICUuMDNmIHRvbGVyYW5jZSAgJS4wM2YgbWF4aXRlciAlZAoAICBjb29saW5nICUuMDNmIHN0ZXAgc2l6ZSAgJS4wM2YgYWRhcHRpdmUgJWQKACAgYmVhdXRpZnlfbGVhdmVzICVkIG5vZGUgd2VpZ2h0cyAlZCByb3RhdGlvbiAlLjAzZgoAICBzbW9vdGhpbmcgJXMgb3ZlcmxhcCAlZCBpbml0aWFsX3NjYWxpbmcgJS4wM2YgZG9fc2hyaW5raW5nICVkCgAgIG9jdHJlZSBzY2hlbWUgJXMgbWV0aG9kICVzCgAgIGVkZ2VfbGFiZWxpbmdfc2NoZW1lICVkCgBTUFJJTkdfRUxFQ1RSSUNBTABTUFJJTkdfTUFYRU5UAFNUUkVTU19NQVhFTlQAU1RSRVNTX0FQUFJPWABTVFJFU1MAVU5JRk9STV9TVFJFU1MARlVMTF9TVFJFU1MATk9ORQBOT1JNQUwARkFTVABIWUJSSUQAU1RSRVNTX01BSk9SSVpBVElPTl9HUkFQSF9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fQVZHX0RJU1QAU1RSRVNTX01BSk9SSVpBVElPTl9QT1dFUl9ESVNUAFNQUklORwBUUklBTkdMRQBSTkcADSAgICAgICAgICAgICAgICBpdGVyID0gJWQsIHN0ZXAgPSAlZiBGbm9ybSA9ICVmIG56ID0gJWQgIEsgPSAlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nX3Nsb3cAZG1lYW4gPSAlZiwgcmhvID0gJWYKAHNlbmQgcmFuZG9tIGNvb3JkaW5hdGVzCgBzY2FsaW5nIGZhY3RvciA9ICVmCgBRVUFEX1RSRUVfSFlCUklELCBzaXplIGxhcmdlciB0aGFuICVkLCBzd2l0Y2ggdG8gZmFzdCBxdWFkdHJlZQBjdHJsLT5vdmVybGFwPSVkCgAlZCAlZAoAdW5pZm9ybV9zdHJlc3MuYwBVbmlmb3JtU3RyZXNzU21vb3RoZXJfbmV3AFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQiwgRkFMU0UpAHVuaWZvcm1fc3RyZXNzAHxlZGdlbGFiZWx8AGxlbgBub3JtYWxpemUAb3ZlcmxhcABPdmVybGFwIHZhbHVlICIlcyIgdW5zdXBwb3J0ZWQgLSBpZ25vcmVkCgBVbnJlY29nbml6ZWQgb3ZlcmxhcCB2YWx1ZSAiJXMiIC0gdXNpbmcgZmFsc2UKAFZvcm9ub2kAb3ZlcmxhcDogJXMgdmFsdWUgJWQgc2NhbGluZyAlLjA0ZgoAb3ZlcmxhcF9zY2FsaW5nAHZvcm9ub2kAc2NhbGluZwB2cHNjAGlwc2VwAG9zY2FsZQBvbGQgc2NhbGluZwBzY2FsZXh5AHggYW5kIHkgc2NhbGluZwBvcnRobwBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAG9ydGhvX3l4AG9ydGhveHkAeHkgb3J0aG9nb25hbCBjb25zdHJhaW50cwBvcnRob3l4AHl4IG9ydGhvZ29uYWwgY29uc3RyYWludHMAcG9ydGhvAHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHBvcnRob195eABwb3J0aG94eQB4eSBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwBwb3J0aG95eAB5eCBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwBwcmlzbQBBZGp1c3RpbmcgJXMgdXNpbmcgJXMKAFVuaGFuZGxlZCBhZGp1c3Qgb3B0aW9uICVzCgBOdW1iZXIgb2YgaXRlcmF0aW9ucyA9ICVkCgBOdW1iZXIgb2YgaW5jcmVhc2VzID0gJWQKAG92ZXJsYXAgWyVkXSA6ICVkCgB2b3JvX21hcmdpbgBzZXAAZXNlcABOb2RlIHNlcGFyYXRpb246IGFkZD0lZCAoJWYsJWYpCgAlZiwlZgBzY2FsZSA9ICglLjAzZiwlLjAzZikKAEVkZ2Ugc2VwYXJhdGlvbjogYWRkPSVkICglZiwlZikKAENhbGN1bGF0aW5nIGNpcmN1aXQgbW9kZWwAY29uanVnYXRlX2dyYWRpZW50OiB1bmV4cGVjdGVkIGxlbmd0aCAwIHZlY3RvcgoAQ2FsY3VsYXRpbmcgc3Vic2V0IG1vZGVsAGdyYXBoIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBpcyB1bmRlZmluZWQuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAENhbGN1bGF0aW5nIE1EUyBtb2RlbABDYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRocwA6ICUuMmYgc2VjCgBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zADogJS4yZiBzZWMAY2cAZGVsdGEgPD0gMHhGRkZGAGNvbnN0cmFpbnQuYwBta05Db25zdHJhaW50RwB2ZwBjb21wcmVzcyAlZyAKAHNjYWxlIGJ5ICVnLCVnIAoAYmVzdGNvc3QgPCBIVUdFX1ZBTABjb21wdXRlU2NhbGVYWQBHcmFwaHZpeiBidWlsdCB3aXRob3V0IGFueSB0cmlhbmd1bGF0aW9uIGxpYnJhcnkKAGRlbGF1bmF5X3RyaWFuZ3VsYXRpb246ICVzCgBkZWxhdW5heV90cmk6ICVzCgB0cnlpbmcgdG8gZGVsZXRlIGEgbm9uLWxpbmUKAAppbnRlcnNlY3Rpb24gYXQgJS4zZiAlLjNmCgBzZWcjJWQgOiAoJS4zZiwgJS4zZikgKCUuM2YsICUuM2YpCgByZW1vdmVfb3ZlcmxhcDogR3JhcGh2aXogbm90IGJ1aWx0IHdpdGggdHJpYW5ndWxhdGlvbiBsaWJyYXJ5CgBtYWtlQWRkUG9seTogdW5rbm93biBzaGFwZSB0eXBlICVzCgBtYWtlUG9seTogdW5rbm93biBzaGFwZSB0eXBlICVzCgB4IT1OVUxMAHNtYXJ0X2luaV94LmMASU1EU19naXZlbl9kaW0AaWxsLWNvbmRpdGlvbmVkAHJvb3QgPSAlcyBtYXggc3RlcHMgdG8gcm9vdCA9ICVkCgB0d29waTogdXNlIG9mIHdlaWdodD0wIGNyZWF0ZXMgZGlzY29ubmVjdGVkIGNvbXBvbmVudC4KAFJhbmsgc2VwYXJhdGlvbiA9IAAlLjAzbGYgAGFyZWEAaW5zZXQAJXMgY29vcmQgJS41ZyAlLjVnIGh0ICVmIHdpZHRoICVmCgAlLjAzZgByZWMgJWYgJWYgJWYgJWYKACVmIC0gJWYgJWYgJWYgJWYgPSAlZiAoJWYgJWYgJWYgJWYpCgB0cnlpbmcgdG8gYWRkIHRvIHJlY3QgeyVmICsvLSAlZiwgJWYgKy8tICVmfQoAdG90YWwgYWRkZWQgc28gZmFyID0gJWQKAGFkZGluZyAlZCBpdGVtcywgdG90YWwgYXJlYSA9ICVmLCB3ID0gJWYsIGFyZWEvdz0lZgoAY29tcG91bmRFZGdlczogY291bGQgbm90IGNvbnN0cnVjdCBvYnN0YWNsZXMgLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAY29tcG91bmRFZGdlczogbm9kZXMgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAcGFjayB2YWx1ZSAlZCBpcyBzbWFsbGVyIHRoYW4gZXNlcCAoJS4wM2YsJS4wM2YpCgBzZXAgdmFsdWUgKCUuMDNmLCUuMDNmKSBpcyBzbWFsbGVyIHRoYW4gZXNlcCAoJS4wM2YsJS4wM2YpCgBjYyVzXyVkAGNjJXMrJWQAY19jbnQgPT0gMABjb21wLmMAZmluZENDb21wAGdyaWQoJWQsJWQpOiAlcwoAd2d0ID4gMABRdWFkVHJlZS5jAFF1YWRUcmVlX3JlcHVsc2l2ZV9mb3JjZV9hY2N1bXVsYXRlAHF0Mi0+biA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAFF1YWRUcmVlX3JlcHVsc2l2ZV9mb3JjZV9pbnRlcmFjdABkaXN0ID4gMAAhKHEtPmwpAFF1YWRUcmVlX2FkZF9pbnRlcm5hbABpaSA8IDE8PGRpbSAmJiBpaSA+PSAwAHEtPnF0c1tpaV0AcS0+biA9PSAxACEocS0+cXRzKQBxLT5sAHdpZHRoID4gMABRdWFkVHJlZV9uZXcAQS0+Zm9ybWF0ID09IEZPUk1BVF9DU1IAU3BhcnNlTWF0cml4LmMAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBBICYmIEIAU3BhcnNlTWF0cml4X2FkZABBLT5mb3JtYXQgPT0gQi0+Zm9ybWF0ICYmIEEtPmZvcm1hdCA9PSBGT1JNQVRfQ1NSAEEtPnR5cGUgPT0gQi0+dHlwZQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljAEEtPmZvcm1hdCA9PSBGT1JNQVRfQ09PUkQAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9mb3JtYXQAbSA+IDAgJiYgbiA+IDAgJiYgbnogPj0gMABTcGFyc2VNYXRyaXhfZnJvbV9jb29yZGluYXRlX2FycmF5c19pbnRlcm5hbABBAGphW21hc2tbamFbal1dXSA9PSBqYVtqXQBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAGlkIDwgbiooeW1heC15bWluKzEpAGphW21hc2tbaWRdXSA9PSBqYVtqXQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UyAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTABTcGFyc2VNYXRyaXhfbXVsdGlwbHlfdmVjdG9yAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTCB8fCBBLT50eXBlID09IE1BVFJJWF9UWVBFX0lOVEVHRVIAU3BhcnNlTWF0cml4X211bHRpcGx5X2RlbnNlMQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAamNbbWFza1tqYltrXV1dID09IGpiW2tdAFNwYXJzZU1hdHJpeF9tdWx0aXBseTMAamRbbWFza1tqY1trXV1dID09IGpjW2tdAFNwYXJzZU1hdHJpeF9jb29yZGluYXRlX2Zvcm1fYWRkX2VudHJpZXMAU3BhcnNlTWF0cml4X2RpdmlkZV9yb3dfYnlfZGVncmVlAG4gPiAxAGdlbmVyYWwuYwBpcmFuZABvbmVibG9jawBtaW5kaXN0AGFydGljdWxhdGlvbl9wb3MAcm9vdABQcmlvcml0eVF1ZXVlLmMAUHJpb3JpdHlRdWV1ZV9wdXNoAGdhaW4gPD0gcS0+bmdhaW4AU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYyhBLCBGQUxTRSkAcG9zdF9wcm9jZXNzLmMAaWRlYWxfZGlzdGFuY2VfbWF0cml4AGxlbiA+IDAAU3RyZXNzTWFqb3JpemF0aW9uU21vb3RoZXIyX25ldwBueiA+IDAAaWRlYWxfZGlzdF9zY2hlbWUgdmFsdWUgd3JvbmcAU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYyhBLCBGQUxTRSkgJiYgQS0+dHlwZSA9PSBNQVRSSVhfVFlQRV9SRUFMAFNwYXJzZVN0cmVzc01ham9yaXphdGlvblNtb290aGVyX25ldwBpZGlhZyA+PSAwAFN0cmVzc01ham9yaXphdGlvblNtb290aGVyX3Ntb290aAAoIWpjbikgJiYgKCF2YWwpAGdldF9lZGdlX2xhYmVsX21hdHJpeABUcmlhbmdsZVNtb290aGVyX25ldwBqZGlhZyA+PSAwAFNwcmluZ1Ntb290aGVyX25ldwAhZmxhZwBTcHJpbmdTbW9vdGhlcl9zbW9vdGgAbmVpZ2hiPSVkCgByb290ID0gJXMKAF9ibG9ja18lZABzLT5zeiA+IDAAYmxvY2t0cmVlLmMAcG9wAGFjdHVhbABub2RlbGlzdC5jAGluc2VydE5vZGVsaXN0AF9zcGFuXyVkAF9jbG9uZV8lZABpcABkZWdsaXN0LmMAcmVtb3ZlRGVnbGlzdABFcnJvcgBXYXJuaW5nACVzOiAAdXNlcm91dDogY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeQoAX0FHX3N0cmRhdGEAX0FHX2RhdGFkaWN0AGFnZGljdG9mOiB1bmtub3duIGtpbmQgJWQKACVjJWxkAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAYWdkZWxldGUgb24gd3JvbmcgZ3JhcGgAX0FHX3BlbmRpbmcAYWdyZWNvcmRfY2FsbGJhY2sgb2YgYSBiYWQgb2JqZWN0AHBlbmQgZGljdG9mIGEgYmFkIG9iamVjdABtb3ZlIHRvIGZyb250IGxvY2sgaW5jb25zaXN0ZW5jeQBcXABmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZAAlcwoAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZABmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBhYWdfZ2V0X25leHRfYnVmZmVyKCkAaW5wdXQAc3ludGF4IGFtYmlndWl0eSAtIGJhZGx5IGRlbGltaXRlZCBudW1iZXIgJwAnIGluIGxpbmUgJWQgb2YgACBzcGxpdHMgaW50byB0d28gdG9rZW5zCgAlcwBsaW5lACVkICUxWyJdJW4Ab3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ19jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ2Vuc3VyZV9idWZmZXJfc3RhY2soKQA6IAAgaW4gbGluZSAlZAAgbmVhciAnACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAClN0cmluZyBzdGFydGluZzoiACBzY2FubmluZyBhIEhUTUwgc3RyaW5nIChtaXNzaW5nICc+Jz8gYmFkIG5lc3Rpbmc/IGxvbmdlciB0aGFuICVkPykAClN0cmluZyBzdGFydGluZzo8ACBzY2FubmluZyBhIC8qLi4uKi8gY29tbWVudCAobWlzc2luZyAnKi8/IGxvbmdlciB0aGFuICVkPykAZmxleCBzY2FubmVyIHB1c2gtYmFjayBvdmVyZmxvdwAiIgBzdHJpY3QAbGluZWxlbmd0aAA7CgAgW2tleT0AXQAgWwAsCgA9AF8lbGRfU1VTUEVDVABkaQBzdHJpY3QgAHsKAF07CgAS7u4UCQPu/u7u7gHu7u4B7u4K/u4TGRXuEwHu7u7uCxHu7u7u7u7u7u4B7u4WCQEBHQ8X7u4aFxvu7hzu7u7uARn77u7uAe4Q7u4e7u7u7gACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXEQICAgICAgICAgICAgISEAITAgIWAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNCwMEBQ8HAwwNBgwNDgwNGhUWAAEAAwcOBg8IDA0SEyoQEQkQLzARMhcTDRQSLhIUQRMyEyxAKkIZLEJGIgwNDiMPCRARChARyRARLUVG/AEG9g8H9iQCEBEvMDZNTigmOzwqNjE5PT8vOkDYRDA+JTdDNUsrOElMAAMJAAAAAQ4CCwwIIyQlNjs9AA0QEhsWHBInMiIXMx48Bgc1BQ8RFBgpABMpAAAAAAA3FSgdHgAhJjQfMD4ZLAAbACAaKgArOi4vADE4OS0AAgIBAAMDAQABAAEBAQACAQEAAgIDAQEAAAUAAQMBAwUDAQEBAQIAAQAEAgACAQEDAgEAAwIBAAEBAAEBAQMAGBkZGRobHBwdHR4eHx8gICEhIiIjJCQmJyUlKCgpKSkqKisrKywsLS0uLy8wMTEyMzQ2NTc3Nzg4ODk5Ojru7v/u7u7u7u4fIO4A7+7u7gzu7u4IDe7u7vju7u7u7u717v8DCAQhBQsSEycUFRYpMkEXGBkaLDM0QkdIG0ocHS4eTx8ga2V5AGF0dHJpYnV0ZSBtYWNyb3Mgbm90IGltcGxlbWVudGVkACVzOiVzAENvdWxkIG5vdCBvcGVuICIlcyIgZm9yIHdyaXRpbmcgOiAlcwoATm8gbGlieiBzdXBwb3J0LgoALiVkAG5vbmFtZS5ndgBndndyaXRlX25vX3ogcHJvYmxlbSAlZAoAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQoATm8gbGlieiBzdXBwb3J0CgBndnByaW50ZjogJXMKAC05OTk5OTk5OTk5OTk5OTkuOTkAZ3JhcGh2aXoAMi40MC4xADIwMTYxMjI1LjAzMDQAcmVuZGVyAGRldmljZQBsb2FkaW1hZ2UAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKAFVzaW5nICVzOiAlczolcwoAZ3Z1c2Vyc2hhcGUuYwBndnVzZXJzaGFwZV9maW5kAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgAlcyB3aGlsZSBvcGVuaW5nICVzCgB1cy0+ZgBndnVzZXJzaGFwZV9vcGVuACIlcyIgd2FzIG5vdCBmb3VuZCBhcyBhIGZpbGUgb3IgYXMgYSBzaGFwZSBsaWJyYXJ5IG1lbWJlcgoAL01lZGlhQm94AChbYS16XVthLXpBLVpdKik9IihbXiJdKikiAGNhbm5vdCBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAlcwAlbGYlMnMAcHQAdmlld0JveAAlbGYgJWxmICVsZiAlbGYAaW4AcHgAcGMAIgBjbQBtbQAlJUJvdW5kaW5nQm94OgAB0NHS09TV1tfY2QA8c3ZnAFdFQlAAd2VicAAobGliKQCJUE5HDQoaCgBwbmcAJSFQUy1BZG9iZS0AQk0AYm1wAEdJRjgAZ2lmAP/Y/+AAanBlZwAlUERGLQBwZGYAxdDTxgBlcHMAPD94bWwAeG1sAFJJRkYAcmlmZgAAAAEAAGljbwAlZCAlZCAlZCAlZABMYXlvdXQgd2FzIG5vdCBkb25lCgBmYWlsdXJlIG1hbGxvYydpbmcgZm9yIHJlc3VsdCBzdHJpbmcAZ2M6IE91dCBvZiBtZW1vcnkKAF9jY18Ab3JpZwBvcABjY29tcHMuYwBtYXBDbHVzdABjY2dyYXBoaW5mbwBjY2dub2RlaW5mbwAoJTRsZCkgJTdsZCBub2RlcyAlN2xkIGVkZ2VzCgAgICAgICAgJTdkIG5vZGVzICU3ZCBlZGdlcyAlN2xkIGNvbXBvbmVudHMgJXMKAGRnAEVycm9yOiBub2RlICIlcyIgYmVsb25ncyB0byB0d28gbm9uLW5lc3RlZCBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBzb3J0dgByb3cgbWFqb3IAY29sdW1uIG1ham9yAGFycmF5IHBhY2tpbmc6ICVzICVkIHJvd3MgJWQgY29sdW1ucwoAYmJbJXNdICUuNWcgJS41ZyAlLjVnICUuNWcKAHN0ZXAgc2l6ZSA9ICVkCgBwb3NbJWRdICVkICVkCgBjYyAoJWQgY2VsbHMpIGF0ICglZCwlZCkgKCVkLCVkKQoAY2MgKCVkIGNlbGxzKSBhdCAoJWQsJWQpCgAlcyBuby4gY2VsbHMgJWQgVyAlZCBIICVkCgAgICVkICVkIGNlbGwKAGxpYnBhY2s6IGRpc2MgPSAlZiAoIDwgMCkKAFBhY2tpbmc6IGNvbXB1dGUgZ3JpZCBzaXplCgBhICVmIGIgJWYgYyAlZiBkICVmIHIgJWYKAHJvb3QgJWQgKCVmKSAlZCAoJWYpCgAgcjEgJWYgcjIgJWYKAHBpbmZvAHBhY2suYwBnZXRQYWNrSW5mbwAgIG1hcmdpbiAlZAoAcGFja21vZGUAcGFyc2VQYWNrTW9kZUluZm8AYXJyYXkAYXNwZWN0ACVmAHBhY2sgaW5mbzoKACAgbW9kZSAgICVzCgAgIGFzcGVjdCAlZgoAICBzaXplICAgJWQKACAgZmxhZ3MgICVkCgB1bmRlZmluZWQAcGFjawBBcnJvdyB0eXBlICIlcyIgdW5rbm93biAtIGlnbm9yaW5nCgBub3JtYWwAY3JvdwB0ZWUAZG90AGludgB2ZWUAcGVuAG1wdHkAY3VydmUAaWN1cnZlAGwAaGFsZgBpbnZlbXB0eQBfYmFja2dyb3VuZABfZHJhd18AQ291bGQgbm90IHBhcnNlICJfYmFja2dyb3VuZCIgYXR0cmlidXRlIGluIGdyYXBoICVzCgAgICIlcyIKAG5vIG1lbW9yeSBmcm9tIHptYWxsb2MoKQoAb2JqAGVtaXQuYwBwb3Bfb2JqX3N0YXRlAGNsdXN0ACVsZABwYWdlJWQsJWRfAFRvdGFsIHNpemUgPiAxIGluICIlcyIgY29sb3Igc3BlYyAASWxsZWdhbCBsZW5ndGggdmFsdWUgaW4gIiVzIiBjb2xvciBhdHRyaWJ1dGUgAGxucmNvbG9yc2NoZW1lAGVtaXRfZWRnZV9sYWJlbAAlcy0lcwBmb3J3YXJkAGJhY2sAIC0+IAAgLS0gAGluIGVkZ2UgJXMlcyVzCgBsYWJlbGFsaWduZWQAZWRnZWhyZWYAZWRnZVVSTABsYWJlbGhyZWYAbGFiZWxVUkwAdGFpbGhyZWYAdGFpbFVSTABoZWFkaHJlZgBoZWFkVVJMAGVkZ2V0YXJnZXQAbGFiZWx0YXJnZXQAdGFpbHRhcmdldABoZWFkdGFyZ2V0AGVkZ2V0b29sdGlwAGxhYmVsdG9vbHRpcAB0YWlsdG9vbHRpcABoZWFkdG9vbHRpcAABbmVzdGluZyBub3QgYWxsb3dlZCBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKScgaW4gc3R5bGU6ICVzCgB0cnVuY2F0aW5nIHN0eWxlICclcycKAHVubWF0Y2hlZCAnKCcgaW4gc3R5bGU6ICVzCgBhbGwAaW4gY2x1c3RlciAlcwoATW9yZSB0aGFuIDIgY29sb3JzIHNwZWNpZmllZCBmb3IgYSBncmFkaWVudCAtIGlnbm9yaW5nIHJlbWFpbmluZwoAZ3JhZGllbnQgcGVuIGNvbG9ycyBub3QgeWV0IHN1cHBvcnRlZC4KAEltYWdlcyB1bnN1cHBvcnRlZCBpbiAiYmFja2dyb3VuZCIgYXR0cmlidXRlCgBsYXllcnMgbm90IHN1cHBvcnRlZCBpbiAlcyBvdXRwdXQKAExheW91dCB3YXMgbm90IGRvbmUuICBNaXNzaW5nIGxheW91dCBwbHVnaW5zPyAKAGd2UmVuZGVySm9icyAlczogJS4yZiBzZWNzLgoAbGF5b3V0IHdhcyBub3QgZG9uZQoAcmVuZGVyZXIgZm9yICVzIGlzIHVuYXZhaWxhYmxlCgBwYWdlZGlyPSVzIGlnbm9yZWQKAHZpZXdwb3J0ACVsZiwlbGYsJWxmLCclW14nXScAJWxmLCVsZiwlbGYsJVteLF0lcwAlbGYsJWxmLCVsZiwlbGYsJWxmAG91dHB1dG9yZGVyAG9kZXNmaXJzdABkZ2VzZmlyc3QAbGF5ZXJzAGxheWVyc2VsZWN0AFRoZSBsYXllcnNlbGVjdCBhdHRyaWJ1dGUgIiVzIiBkb2VzIG5vdCBtYXRjaCBhbnkgbGF5ZXIgc3BlY2lmZWQgYnkgdGhlIGxheWVycyBhdHRyaWJ1dGUgLSBpZ25vcmVkLgoAbGF5ZXJzZXAAOgkgAGxheWVybGlzdHNlcAAsAFRoZSBjaGFyYWN0ZXIgJyVjJyBhcHBlYXJzIGluIGJvdGggdGhlIGxheWVyc2VwIGFuZCBsYXllcmxpc3RzZXAgYXR0cmlidXRlcyAtIGxheWVybGlzdHNlcCBpZ25vcmVkLgoAcGFkAEJMAHBhZ2VkaXIAc29saWQAAHNldGxpbmV3aWR0aAAxAABzcGwtPnNpemUgPiAwAGluaXRfc3BsaW5lc19iYgBiei5zaXplID4gMABiZXppZXJfYmIAYnouc2l6ZSAlIDMgPT0gMQAlbGYAZm9udHBhdGgARE9URk9OVFBBVEgAR0RGT05UUEFUSABpbWFnZXBhdGgAcXVhbnR1bQByYW5rZGlyAExSAEJUAFJMAG5vZGVzZXAAcmFua3NlcABlcXVhbGx5AHNob3dib3hlcwBmb250bmFtZXMAc2l6ZQBwYWdlAGNlbnRlcgByb3RhdGUAb3JpZW50YXRpb24AbGFuZHNjYXBlAGNsdXN0ZXJyYW5rAGNvbmNlbnRyYXRlAGRwaQByZXNvbHV0aW9uAG9yZGVyaW5nAGZpbGxjb2xvcgBmb250c2l6ZQBmb250bmFtZQBmb250Y29sb3IAeGxhYmVsAHBlbndpZHRoAHBlcmlwaGVyaWVzAHNrZXcAZGlzdG9ydGlvbgBub2p1c3RpZnkAbGF5ZXIAZ3JvdXAAY29tbWVudAB2ZXJ0aWNlcwB6AHdlaWdodABsYWJlbGZsb2F0AGRpcgBhcnJvd2hlYWQAYXJyb3d0YWlsAGhlYWRsYWJlbAB0YWlsbGFiZWwAbGFiZWxmb250c2l6ZQBsYWJlbGZvbnRuYW1lAGxhYmVsZm9udGNvbG9yAGxhYmVsZGlzdGFuY2UAbGFiZWxhbmdsZQBtaW5sZW4AZGVjb3JhdGUAYXJyb3dzaXplAGNvbnN0cmFpbnQAdGFpbGNsaXAAaGVhZGNsaXAAbGFiZWxqdXN0AGxvY2FsAGdsb2JhbAAlbGYsJWxmJWMAJWxmJWMAcmF0aW8AYXV0bwBjb21wcmVzcwBleHBhbmQAZmlsbABnZABwcwBzdmcAY2hhcnNldAB1dGYtOABsYXRpbi0xAGxhdGluMQBsMQBJU08tODg1OS0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy1JUi0xMDAAYmlnLTUAYmlnNQB1dGY4AFVuc3VwcG9ydGVkIGNoYXJzZXQgIiVzIiAtIGFzc3VtaW5nIHV0Zi04CgBVbnN1cHBvcnRlZCBjaGFyc2V0IHZhbHVlICVkCgBVVEYtOABCSUctNQBpbiBsYWJlbCBvZiBncmFwaCAlcwoAaW4gbGFiZWwgb2Ygbm9kZSAlcwoAaW4gbGFiZWwgb2YgZWRnZSAlcyAlcyAlcwoAa2luZCA9PSBMVF9OT05FAGxhYmVscy5jAG1ha2VfbGFiZWwAXEwAXEcAXEUAXEgAXFQAJiMxMzsAJiMxMDsAJnF1b3Q7ACYjMTYwOwAmYW1wOwAmZ3Q7ACYjMzk7ACYjNDU7ACZsdDsAJXMgJWQgbm9kZXMgJWQgZWRnZXMgbWF4aXRlcj0lZCBiYWxhbmNlPSVkCgBuZXR3b3JrIHNpbXBsZXg6IAAlZCAAJXMlZCBub2RlcyAlZCBlZGdlcyAlZCBpdGVyICUuMmYgc2VjCgB1cGRhdGU6IG1pc21hdGNoZWQgbGNhIGluIHRyZWV1cGRhdGVzCgBUcmVlX2VkZ2Uuc2l6ZSA9PSBOX25vZGVzIC0gMQBucy5jAGZlYXNpYmxlX3RyZWUAIVRSRUVfRURHRShlKQBtZXJnZV90cmVlcwAocjAtPmhlYXBfaW5kZXggPiAtMSkgfHwgKHIxLT5oZWFwX2luZGV4ID4gLTEpAFNUc2V0VW5pb24Aci0+aGVhcF9pbmRleCA+PSAwAGFkZF90cmVlX2VkZ2U6IG1pc3NpbmcgdHJlZSBlZGdlCgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBvdXRlZGdlIGxpc3QKAGFkZF90cmVlX2VkZ2U6IGVtcHR5IGluZWRnZSBsaXN0CgB0cm91YmxlIGluIGluaXRfcmFuawoACSVzICVkCgBzZWFyY2hzaXplAGdyYXBoIAAgAG5vZGUgAHN0b3AKACUuNWcAcG9zAHJlY3RzAHhscABscABoZWFkX2xwAHRhaWxfbHAAbHdpZHRoAGxoZWlnaHQAYmIAJS41ZywlLjVnLCUuNWcALCUuNWcAJS41ZywlLjVnAHNhbXBsZXBvaW50cwAlLjVnICUuNWcAcywlLjVnLCUuNWcgAGUsJS41ZywlLjVnIAAlLjVnLCUuNWcsJS41ZywlLjVnACUuMmYAJS41ZywlLjVnLCUuNWcsJS41ZyAAL3BhdGhib3ggewogICAgL1ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgAvcGF0aGJveCB7CiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL1ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCiB9IGRlZgovZGJnc3RhcnQgeyBnc2F2ZSAlLjVnICUuNWcgdHJhbnNsYXRlIH0gZGVmCi9hcnJvd2xlbmd0aCAxMCBkZWYKL2Fycm93d2lkdGggYXJyb3dsZW5ndGggMiBkaXYgZGVmCi9hcnJvd2hlYWQgewogICAgZ3NhdmUKICAgIHJvdGF0ZQogICAgY3VycmVudHBvaW50CiAgICBuZXdwYXRoCiAgICBtb3ZldG8KICAgIGFycm93bGVuZ3RoIGFycm93d2lkdGggMiBkaXYgcmxpbmV0bwogICAgMCBhcnJvd3dpZHRoIG5lZyBybGluZXRvCiAgICBjbG9zZXBhdGggZmlsbAogICAgZ3Jlc3RvcmUKfSBiaW5kIGRlZgovbWFrZWFycm93IHsKICAgIGN1cnJlbnRwb2ludCBleGNoIHBvcCBzdWIgZXhjaCBjdXJyZW50cG9pbnQgcG9wIHN1YiBhdGFuCiAgICBhcnJvd2hlYWQKfSBiaW5kIGRlZgovcG9pbnQgeyAgICBuZXdwYXRoICAgIDIgMCAzNjAgYXJjIGZpbGx9IGRlZi9tYWtldmVjIHsKICAgIC9ZIGV4Y2ggZGVmCiAgICAvWCBleGNoIGRlZgogICAgL3kgZXhjaCBkZWYKICAgIC94IGV4Y2ggZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggWSBsaW5ldG8gc3Ryb2tlCiAgICBYIFkgbW92ZXRvCiAgICB4IHkgbWFrZWFycm93Cn0gZGVmCgBsb3N0ICVzICVzIGVkZ2UKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggbGFiZWwgJXMAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB0YWlsIGxhYmVsICVzAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggaGVhZCBsYWJlbCAlcwBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIHhsYWJlbCAlcwBmb3JjZWxhYmVscwAlZCBvdXQgb2YgJWQgbGFiZWxzIHBvc2l0aW9uZWQuCgAlZCBvdXQgb2YgJWQgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAlZCBvYmpzICVkIHhsYWJlbHMgZm9yY2U9JWQgYmI9KCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpCgBvYmplY3RzCgAgWyVkXSAoJS4wMmYsJS4wMmYpICglLjAyZiwlLjAyZikgJXAgIiVzIgoAeGxhYmVscwoAIFslZF0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAc2hhcGVmaWxlIG5vdCBzZXQgb3Igbm90IGZvdW5kIGZvciBlcHNmIG5vZGUgJXMKAGNvdWxkbid0IG9wZW4gZXBzZiBmaWxlICVzCgAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkAHJlYWQAQm91bmRpbmdCb3ggbm90IGZvdW5kIGluIGVwc2YgZmlsZSAlcwoAY2FuJ3QgZmluZCBsaWJyYXJ5IGZpbGUgJXMKAGNhbid0IG9wZW4gbGlicmFyeSBmaWxlICVzCgBFT0YAQkVHSU4ARU5EAFRSQUlMRVIAL3VzZXJfc2hhcGVfJWQgewoAJSVCZWdpbkRvY3VtZW50OgoAJSVFbmREb2N1bWVudAoAfSBiaW5kIGRlZgoAVVRGLTggaW5wdXQgdXNlcyBub24tTGF0aW4xIGNoYXJhY3RlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBQb3N0U2NyaXB0IGRyaXZlcgoAY2Fubm90IHJlLWFsbG9jYXRlIHBzCgByb3V0ZXNwbGluZXNpbml0OiBjYW5ub3QgYWxsb2NhdGUgcHMKAHJvdXRlc3BsaW5lczogJWQgZWRnZXMsICVkIGJveGVzICUuMmYgc2VjCgBpbiByb3V0ZXNwbGluZXMsIGNhbm5vdCBmaW5kIE5PUk1BTCBlZGdlCgBpbiByb3V0ZXNwbGluZXMsIGlsbGVnYWwgdmFsdWVzIG9mIHByZXYgJWQgYW5kIG5leHQgJWQsIGxpbmUgJWQKAGluIHJvdXRlc3BsaW5lcywgZWRnZSBpcyBhIGxvb3AgYXQgJXMKAGluIHJvdXRlc3BsaW5lcywgUHNob3J0ZXN0cGF0aCBmYWlsZWQKAGluIHJvdXRlc3BsaW5lcywgUHJvdXRlc3BsaW5lIGZhaWxlZAoAVW5hYmxlIHRvIHJlY2xhaW0gYm94IHNwYWNlIGluIHNwbGluZSByb3V0aW5nIGZvciBlZGdlICIlcyIgLT4gIiVzIi4gU29tZXRoaW5nIGlzIHByb2JhYmx5IHNlcmlvdXNseSB3cm9uZy4KAGluIGNoZWNrcGF0aCwgYm94IDAgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGluIGNoZWNrcGF0aCwgYm94ICVkIGhhcyBMTCBjb29yZCA+IFVSIGNvb3JkCgBpbiBjaGVja3BhdGgsIGJveGVzICVkIGFuZCAlZCBkb24ndCB0b3VjaAoAaW4gY2hlY2twYXRoLCBzdGFydCBwb3J0IG5vdCBpbiBmaXJzdCBib3gKAGluIGNoZWNrcGF0aCwgZW5kIHBvcnQgbm90IGluIGxhc3QgYm94CgAlZCBib3hlczoKACVkICglLjVnLCAlLjVnKSwgKCUuNWcsICUuNWcpCgBjb25zdHJhaW5lZABub3QgY29uc3RyYWluZWQAc3RhcnQgcG9ydDogKCUuNWcsICUuNWcpLCB0YW5nZW50IGFuZ2xlOiAlLjVnLCAlcwoAZW5kIHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAHNpZGVzID09IDQAc2hhcGVzLmMAcm91bmRfY29ybmVycwBiYWQgbGFiZWwgZm9ybWF0ICVzCgBcTgBtYXJnaW4AJWxmLCVsZgByZWd1bGFyAGN1c3RvbQBzaGFwZWZpbGUAPG5pbD4ATm8gb3IgaW1wcm9wZXIgc2hhcGVmaWxlPSIlcyIgZm9yIG5vZGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2U9IiVzIiBmb3Igbm9kZSAiJXMiCgBsYWJlbGxvYwBub2RlICclcycsIGdyYXBoICclcycgc2l6ZSB0b28gc21hbGwgZm9yIGxhYmVsCgBlcHNmAHVzaW5nICVzIGZvciB1bmtub3duIHNoYXBlICVzCgBwb2x5Z29uAG92YWwAY2lyY2xlAHBvaW50AGVnZwB0cmlhbmdsZQBwbGFpbnRleHQAcGxhaW4AZGlhbW9uZAB0cmFwZXppdW0AcGFyYWxsZWxvZ3JhbQBob3VzZQBwZW50YWdvbgBoZXhhZ29uAHNlcHRhZ29uAG9jdGFnb24Abm90ZQB0YWIAZm9sZGVyAGJveDNkAGNvbXBvbmVudABjeWxpbmRlcgByZWN0AHJlY3RhbmdsZQBzcXVhcmUAZG91YmxlY2lyY2xlAGRvdWJsZW9jdGFnb24AdHJpcGxlb2N0YWdvbgBpbnZ0cmlhbmdsZQBpbnZ0cmFwZXppdW0AaW52aG91c2UAdW5kZXJsaW5lAE1kaWFtb25kAE1zcXVhcmUATWNpcmNsZQBwcm9tb3RlcgBjZHMAdGVybWluYXRvcgB1dHIAaW5zdWxhdG9yAHJpYm9zaXRlAHJuYXN0YWIAcHJvdGVhc2VzaXRlAHByb3RlaW5zdGFiAHByaW1lcnNpdGUAcmVzdHJpY3Rpb25zaXRlAGZpdmVwb3ZlcmhhbmcAdGhyZWVwb3ZlcmhhbmcAbm92ZXJoYW5nAGFzc2VtYmx5AHNpZ25hdHVyZQBycHJvbW90ZXIAbGFycm93AHJhcnJvdwBscHJvbW90ZXIAcmVjb3JkAE1yZWNvcmQAc3RhcgAjODA4MDgwACNmY2ZjZmMAIzMwMzAzMAAjZThlOGU4ACNlMGUwZTAAI2YwZjBmMAAjMTAxMDEwACNmOGY4ZjgAaW4gbm9kZSAlcwoAcm91bmRlZABkaWFnb25hbHMAcmFkaWFsAHN0cmlwZWQAd2VkZ2VkAF8Abm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlLjVnICUuNWcgdHJhbnNsYXRlIG5ld3BhdGggdXNlcl9zaGFwZV8lZAoAaW52aXMAAGZpbGxlZAAAcwBlAHcAc3BsaW5lcy5jAGJlZ2lucGF0aABQLT5lbmQudGhldGEgPCAyICogTV9QSQBlbmRwYXRoAG1ha2VTZWxmRWRnZQBnZXRzcGxpbmVwb2ludHM6IG5vIHNwbGluZSBwb2ludHMgYXZhaWxhYmxlIGZvciBlZGdlICglcywlcykKAHBvbHlsaW5lTWlkcG9pbnQAc3Bhbi0+Zm9udAB0ZXh0c3Bhbi5jAHRleHRzcGFuX3NpemUAZm9udC0+bmFtZQBmb250bmFtZTogIiVzIiByZXNvbHZlZCB0bzogJXMKAGZvbnRuYW1lOiB1bmFibGUgdG8gcmVzb2x2ZSAiJXMiCgBjb3VyAGFyaWFsAGhlbHZldGljYQBbaW50ZXJuYWwgdGltZXNdAFtpbnRlcm5hbCBjb3VyaWVyXQBbaW50ZXJuYWwgYXJpYWxdAEF2YW50R2FyZGUtQm9vawBVUlcgR290aGljIEwAYm9vawBzYW5zLVNlcmlmAEF2YW50R2FyZGUtQm9va09ibGlxdWUAb2JsaXF1ZQBpdGFsaWMAQXZhbnRHYXJkZS1EZW1pAGRlbWkAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBCb29rbWFuLURlbWkAVVJXIEJvb2ttYW4gTABzZXJpZgBCb29rbWFuLURlbWlJdGFsaWMAQm9va21hbi1MaWdodABsaWdodABCb29rbWFuLUxpZ2h0SXRhbGljAENvdXJpZXIAbW9ub3NwYWNlAENvdXJpZXItQm9sZABDb3VyaWVyLUJvbGRPYmxpcXVlAENvdXJpZXItT2JsaXF1ZQBIZWx2ZXRpY2EASGVsdmV0aWNhLUJvbGQASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3cAY29uZGVuc2VkAEhlbHZldGljYS1OYXJyb3ctQm9sZABIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBIZWx2ZXRpY2EtT2JsaXF1ZQBOZXdDZW50dXJ5U2NobGJrLUJvbGQAQ2VudHVyeSBTY2hvb2xib29rIEwATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAE5ld0NlbnR1cnlTY2hsYmstSXRhbGljAE5ld0NlbnR1cnlTY2hsYmstUm9tYW4Acm9tYW4AUGFsYXRpbm8tQm9sZABQYWxhdGlubyBMaW5vdHlwZQBQYWxhdGluby1Cb2xkSXRhbGljAFBhbGF0aW5vLUl0YWxpYwBQYWxhdGluby1Sb21hbgBTeW1ib2wAZmFudGFzeQBUaW1lcy1Cb2xkAFRpbWVzAFRpbWVzLUJvbGRJdGFsaWMAVGltZXMtSXRhbGljAFphcGZDaGFuY2VyeS1NZWRpdW1JdGFsaWMAVVJXIENoYW5jZXJ5IEwAbWVkaXVtAFphcGZEaW5nYmF0cwBEaW5nYmF0cwBpbnB1dHNjYWxlAG5vAHRydWUAeWVzAHV0aWxzLmMAdSA9PSBVRl9maW5kKHUpAFVGX3NldG5hbWUAAWZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCmFuZCB0aGUgR1ZfRklMRV9QQVRIIHZhcmlhYmxlIGlzIHVuc2V0IG9yIGVtcHR5LgoAUGF0aCBwcm92aWRlZCB0byBmaWxlOiAiJXMiIGhhcyBiZWVuIGlnbm9yZWQgYmVjYXVzZSBmaWxlcyBhcmUgb25seSBwZXJtaXR0ZWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIGRpcmVjdG9yaWVzIGluICIlcyIgd2hlbiBydW5uaW5nIGluIGFuIGh0dHAgc2VydmVyLgoAJXMlcyVzAC8AOgBlbGxpcHNlAFRpbWVzLVJvbWFuAGNsdXN0ZXIAX19jbHVzdGVybm9kZXMAY2x1c3RlciBjeWNsZSAlcyAtLSAlcyBub3Qgc3VwcG9ydGVkCgB0YWlsIGNsdXN0ZXIgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAaGVhZCBjbHVzdGVyICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAHRhaWwgbm9kZSAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBoZWFkIG5vZGUgJXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAX18AbGFiZWwAc2hhcGUAYm94AFR3byBjbHVzdGVycyBuYW1lZCAlcyAtIHRoZSBzZWNvbmQgd2lsbCBiZSBpZ25vcmVkCgBtYXBOAEFFbGlnAEFhY3V0ZQBBY2lyYwBBZ3JhdmUAQWxwaGEAQXJpbmcAQXRpbGRlAEF1bWwAQmV0YQBDY2VkaWwAQ2hpAERhZ2dlcgBEZWx0YQBFVEgARWFjdXRlAEVjaXJjAEVncmF2ZQBFcHNpbG9uAEV0YQBFdW1sAEdhbW1hAElhY3V0ZQBJY2lyYwBJZ3JhdmUASW90YQBJdW1sAEthcHBhAExhbWJkYQBNdQBOdGlsZGUATnUAT0VsaWcAT2FjdXRlAE9jaXJjAE9ncmF2ZQBPbWVnYQBPbWljcm9uAE9zbGFzaABPdGlsZGUAT3VtbABQaGkAUGkAUHJpbWUAUHNpAFJobwBTY2Fyb24AU2lnbWEAVEhPUk4AVGF1AFRoZXRhAFVhY3V0ZQBVY2lyYwBVZ3JhdmUAVXBzaWxvbgBVdW1sAFhpAFlhY3V0ZQBZdW1sAFpldGEAYWFjdXRlAGFjaXJjAGFjdXRlAGFlbGlnAGFncmF2ZQBhbGVmc3ltAGFscGhhAGFtcABhbmQAYW5nAGFyaW5nAGFzeW1wAGF0aWxkZQBhdW1sAGJkcXVvAGJldGEAYnJ2YmFyAGJ1bGwAY2FwAGNjZWRpbABjZWRpbABjZW50AGNoaQBjaXJjAGNsdWJzAGNvbmcAY29weQBjcmFycgBjdXAAY3VycmVuAGRBcnIAZGFnZ2VyAGRhcnIAZGVnAGRlbHRhAGRpYW1zAGRpdmlkZQBlYWN1dGUAZWNpcmMAZWdyYXZlAGVtcHR5AGVtc3AAZW5zcABlcHNpbG9uAGVxdWl2AGV0YQBldGgAZXVtbABldXJvAGV4aXN0AGZub2YAZm9yYWxsAGZyYWMxMgBmcmFjMTQAZnJhYzM0AGZyYXNsAGdhbW1hAGdlAGd0AGhBcnIAaGFycgBoZWFydHMAaGVsbGlwAGlhY3V0ZQBpY2lyYwBpZXhjbABpZ3JhdmUAaW1hZ2UAaW5maW4AaW50AGlvdGEAaXF1ZXN0AGlzaW4AaXVtbABrYXBwYQBsQXJyAGxhbWJkYQBsYW5nAGxhcXVvAGxhcnIAbGNlaWwAbGRxdW8AbGUAbGZsb29yAGxvd2FzdABsb3oAbHJtAGxzYXF1bwBsc3F1bwBsdABtYWNyAG1kYXNoAG1pY3JvAG1pZGRvdABtdQBuYWJsYQBuYnNwAG5kYXNoAG5lAG5pAG5vdABub3RpbgBuc3ViAG50aWxkZQBudQBvYWN1dGUAb2NpcmMAb2VsaWcAb2dyYXZlAG9saW5lAG9tZWdhAG9taWNyb24Ab3BsdXMAb3IAb3JkZgBvcmRtAG9zbGFzaABvdGlsZGUAb3RpbWVzAG91bWwAcGFyYQBwYXJ0AHBlcm1pbABwZXJwAHBoaQBwaQBwaXYAcGx1c21uAHBvdW5kAHByaW1lAHByb2QAcHJvcABwc2kAcXVvdAByQXJyAHJhZGljAHJhbmcAcmFxdW8AcmFycgByY2VpbAByZHF1bwByZWFsAHJlZwByZmxvb3IAcmhvAHJsbQByc2FxdW8AcnNxdW8Ac2JxdW8Ac2Nhcm9uAHNkb3QAc2VjdABzaHkAc2lnbWEAc2lnbWFmAHNpbQBzcGFkZXMAc3ViAHN1YmUAc3VtAHN1cABzdXAxAHN1cDIAc3VwMwBzdXBlAHN6bGlnAHRhdQB0aGVyZTQAdGhldGEAdGhldGFzeW0AdGhpbnNwAHRob3JuAHRpbGRlAHRpbWVzAHRyYWRlAHVBcnIAdWFjdXRlAHVhcnIAdWNpcmMAdWdyYXZlAHVtbAB1cHNpaAB1cHNpbG9uAHV1bWwAd2VpZXJwAHhpAHlhY3V0ZQB5ZW4AeXVtbAB6ZXRhAHp3agB6d25qAFVURjggY29kZXMgPiA0IGJ5dGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAoZ3JhcGggJXMpIC0gdHJlYXRlZCBhcyBMYXRpbi0xLiBQZXJoYXBzICItR2NoYXJzZXQ9bGF0aW4xIiBpcyBuZWVkZWQ/CgBJbnZhbGlkICVkLWJ5dGUgVVRGOCBmb3VuZCBpbiBpbnB1dCBvZiBncmFwaCAlcyAtIHRyZWF0ZWQgYXMgTGF0aW4tMS4gUGVyaGFwcyAiLUdjaGFyc2V0PWxhdGluMSIgaXMgbmVlZGVkPwoAYnouc2l6ZQBvdmVybGFwX2JlemllcgB1cnZlZABvbXBvdW5kAGFsc2UAaW5lAG9uZQBvAHJ0aG8Ab2x5bGluZQBwbGluZQBydWUAZXMAVW5rbm93biAic3BsaW5lcyIgdmFsdWU6ICIlcyIgLSBpZ25vcmVkCgBzcGxpbmVzAG9kYgBPcnRob2dvbmFsIGVkZ2VzIGRvIG5vdCBjdXJyZW50bHkgaGFuZGxlIGVkZ2UgbGFiZWxzLiBUcnkgdXNpbmcgeGxhYmVscy4KAG9ydGhvICVzICVzCgBjaGFuaQBvcnRoby5jAGNoYW5TZWFyY2gAY3AAJSUhUFMtQWRvYmUtMi4wCiUlJSVCb3VuZGluZ0JveDogKGF0ZW5kKQovcG9pbnQgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICBuZXdwYXRoCiAgWCBZIDMgMCAzNjAgYXJjIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCi9ub2RlIHsKIC91IGV4Y2ggZGVmCiAvciBleGNoIGRlZgogL2QgZXhjaCBkZWYKIC9sIGV4Y2ggZGVmCiBuZXdwYXRoIGwgZCBtb3ZldG8KIHIgZCBsaW5ldG8gciB1IGxpbmV0byBsIHUgbGluZXRvCiBjbG9zZXBhdGggZmlsbAp9IGRlZgoKACVkICVkIHRyYW5zbGF0ZQoAMC44IDAuOCAwLjggc2V0cmdiY29sb3IKAHNob3dwYWdlCiUlJSVUcmFpbGVyCiUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKAG5ld3BhdGggJWQgJWQgbW92ZXRvCgAlZCAlZCBsaW5ldG8KACVkICVkIGxpbmV0byBzdHJva2UKAGNoYW5uZWwgJWQgKCVmLCVmKQoAIC0+CgAgICAgIAAoKCVmLCVmKSwoJWYsJWYpKSAlcyAlcwBCX1JJR0hUAEJfRE9XTgBCX0xFRlQAQl9VUABCX05PREUAc2VnAG5leHRfc2VnAGRlY2lkZV9wb2ludABpbmNvbXBhcmFibGUgc2VnbWVudHMgISEgLS0gQWJvcnRpbmcKAHMxLT5jb21tX2Nvb3JkPT1zMi0+Y29tbV9jb29yZABpc19wYXJhbGxlbABncmFwaCBHIHsKACBub2RlW3NoYXBlPXBvaW50XQoAICAlZCBbcG9zPSIlZCwlZCJdCgAgICVkIC0tICVkW2xlbj0iJWYiXQoAfQoAY29sb3IgJXMAJXMgaXMgbm90IGEga25vd24gY29sb3IuCgBlcnJvciBpbiBjb2x4bGF0ZSgpCgBzb2xpZABpbnZpc2libGUAYm9sZABzZXRsaW5ld2lkdGgAZmlsbGVkAHVuZmlsbGVkAHRhcGVyZWQAZ3ZyZW5kZXJfc2V0X3N0eWxlOiB1bnN1cHBvcnRlZCBzdHlsZSAlcyAtIGlnbm9yaW5nCgBndnJlbmRlci5jAGd2cmVuZGVyX3VzZXJzaGFwZQBuYW1lAG5hbWVbMF0AYm90aABsYXlvdXQATGF5b3V0IHR5cGU6ICIlcyIgbm90IHJlY29nbml6ZWQuIFVzZSBvbmUgb2Y6JXMKAGpvYgBndmxvYWRpbWFnZS5jAGd2bG9hZGltYWdlAHVzAHVzLT5uYW1lAHVzLT5uYW1lWzBdAE5vIGxvYWRpbWFnZSBwbHVnaW4gZm9yICIlcyIKAFEATGVmdABLUF9MZWZ0AFJpZ2h0AEtQX1JpZ2h0AFVwAEtQX1VwAERvd24AS1BfRG93bgBwbHVzAEtQX0FkZABtaW51cwBLUF9TdWJ0cmFjdABGAGVkZ2UAdGFpbHBvcnQAaGVhZHBvcnQAa2V5AFVSTABub2RlAGRpZ3JhcGgAZ3JhcGgAc3ViZ3JhcGgAX0xUWF9saWJyYXJ5AHRleHRsYXlvdXQAb2JqcC0+bGJsAHhsYWJlbHMuYwB4bGFkanVzdAB4bGludGVyc2VjdGlvbnMAbHAgIT0gY2xwAGdldGludHJzeGkAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGxibGVuY2xvc2luZwB2cAB4bGhkeHVubG9hZABzaXplPT1mcmVlZAByZWN0LmJvdW5kYXJ5WzJdIDwgSU5UX01BWABvYmpwbHBta3MAcmVjdC5ib3VuZGFyeVszXSA8IElOVF9NQVgAb3V0IG9mIG1lbW9yeQoAIyUyeCUyeCUyeCUyeAAlbGYlbGYlbGYAL2FjY2VudDMvMQAvYWNjZW50My8yAC9hY2NlbnQzLzMAL2FjY2VudDQvMQAvYWNjZW50NC8yAC9hY2NlbnQ0LzMAL2FjY2VudDQvNAAvYWNjZW50NS8xAC9hY2NlbnQ1LzIAL2FjY2VudDUvMwAvYWNjZW50NS80AC9hY2NlbnQ1LzUAL2FjY2VudDYvMQAvYWNjZW50Ni8yAC9hY2NlbnQ2LzMAL2FjY2VudDYvNAAvYWNjZW50Ni81AC9hY2NlbnQ2LzYAL2FjY2VudDcvMQAvYWNjZW50Ny8yAC9hY2NlbnQ3LzMAL2FjY2VudDcvNAAvYWNjZW50Ny81AC9hY2NlbnQ3LzYAL2FjY2VudDcvNwAvYWNjZW50OC8xAC9hY2NlbnQ4LzIAL2FjY2VudDgvMwAvYWNjZW50OC80AC9hY2NlbnQ4LzUAL2FjY2VudDgvNgAvYWNjZW50OC83AC9hY2NlbnQ4LzgAL2JsdWVzMy8xAC9ibHVlczMvMgAvYmx1ZXMzLzMAL2JsdWVzNC8xAC9ibHVlczQvMgAvYmx1ZXM0LzMAL2JsdWVzNC80AC9ibHVlczUvMQAvYmx1ZXM1LzIAL2JsdWVzNS8zAC9ibHVlczUvNAAvYmx1ZXM1LzUAL2JsdWVzNi8xAC9ibHVlczYvMgAvYmx1ZXM2LzMAL2JsdWVzNi80AC9ibHVlczYvNQAvYmx1ZXM2LzYAL2JsdWVzNy8xAC9ibHVlczcvMgAvYmx1ZXM3LzMAL2JsdWVzNy80AC9ibHVlczcvNQAvYmx1ZXM3LzYAL2JsdWVzNy83AC9ibHVlczgvMQAvYmx1ZXM4LzIAL2JsdWVzOC8zAC9ibHVlczgvNAAvYmx1ZXM4LzUAL2JsdWVzOC82AC9ibHVlczgvNwAvYmx1ZXM4LzgAL2JsdWVzOS8xAC9ibHVlczkvMgAvYmx1ZXM5LzMAL2JsdWVzOS80AC9ibHVlczkvNQAvYmx1ZXM5LzYAL2JsdWVzOS83AC9ibHVlczkvOAAvYmx1ZXM5LzkAL2JyYmcxMC8xAC9icmJnMTAvMTAAL2JyYmcxMC8yAC9icmJnMTAvMwAvYnJiZzEwLzQAL2JyYmcxMC81AC9icmJnMTAvNgAvYnJiZzEwLzcAL2JyYmcxMC84AC9icmJnMTAvOQAvYnJiZzExLzEAL2JyYmcxMS8xMAAvYnJiZzExLzExAC9icmJnMTEvMgAvYnJiZzExLzMAL2JyYmcxMS80AC9icmJnMTEvNQAvYnJiZzExLzYAL2JyYmcxMS83AC9icmJnMTEvOAAvYnJiZzExLzkAL2JyYmczLzEAL2JyYmczLzIAL2JyYmczLzMAL2JyYmc0LzEAL2JyYmc0LzIAL2JyYmc0LzMAL2JyYmc0LzQAL2JyYmc1LzEAL2JyYmc1LzIAL2JyYmc1LzMAL2JyYmc1LzQAL2JyYmc1LzUAL2JyYmc2LzEAL2JyYmc2LzIAL2JyYmc2LzMAL2JyYmc2LzQAL2JyYmc2LzUAL2JyYmc2LzYAL2JyYmc3LzEAL2JyYmc3LzIAL2JyYmc3LzMAL2JyYmc3LzQAL2JyYmc3LzUAL2JyYmc3LzYAL2JyYmc3LzcAL2JyYmc4LzEAL2JyYmc4LzIAL2JyYmc4LzMAL2JyYmc4LzQAL2JyYmc4LzUAL2JyYmc4LzYAL2JyYmc4LzcAL2JyYmc4LzgAL2JyYmc5LzEAL2JyYmc5LzIAL2JyYmc5LzMAL2JyYmc5LzQAL2JyYmc5LzUAL2JyYmc5LzYAL2JyYmc5LzcAL2JyYmc5LzgAL2JyYmc5LzkAL2J1Z24zLzEAL2J1Z24zLzIAL2J1Z24zLzMAL2J1Z240LzEAL2J1Z240LzIAL2J1Z240LzMAL2J1Z240LzQAL2J1Z241LzEAL2J1Z241LzIAL2J1Z241LzMAL2J1Z241LzQAL2J1Z241LzUAL2J1Z242LzEAL2J1Z242LzIAL2J1Z242LzMAL2J1Z242LzQAL2J1Z242LzUAL2J1Z242LzYAL2J1Z243LzEAL2J1Z243LzIAL2J1Z243LzMAL2J1Z243LzQAL2J1Z243LzUAL2J1Z243LzYAL2J1Z243LzcAL2J1Z244LzEAL2J1Z244LzIAL2J1Z244LzMAL2J1Z244LzQAL2J1Z244LzUAL2J1Z244LzYAL2J1Z244LzcAL2J1Z244LzgAL2J1Z245LzEAL2J1Z245LzIAL2J1Z245LzMAL2J1Z245LzQAL2J1Z245LzUAL2J1Z245LzYAL2J1Z245LzcAL2J1Z245LzgAL2J1Z245LzkAL2J1cHUzLzEAL2J1cHUzLzIAL2J1cHUzLzMAL2J1cHU0LzEAL2J1cHU0LzIAL2J1cHU0LzMAL2J1cHU0LzQAL2J1cHU1LzEAL2J1cHU1LzIAL2J1cHU1LzMAL2J1cHU1LzQAL2J1cHU1LzUAL2J1cHU2LzEAL2J1cHU2LzIAL2J1cHU2LzMAL2J1cHU2LzQAL2J1cHU2LzUAL2J1cHU2LzYAL2J1cHU3LzEAL2J1cHU3LzIAL2J1cHU3LzMAL2J1cHU3LzQAL2J1cHU3LzUAL2J1cHU3LzYAL2J1cHU3LzcAL2J1cHU4LzEAL2J1cHU4LzIAL2J1cHU4LzMAL2J1cHU4LzQAL2J1cHU4LzUAL2J1cHU4LzYAL2J1cHU4LzcAL2J1cHU4LzgAL2J1cHU5LzEAL2J1cHU5LzIAL2J1cHU5LzMAL2J1cHU5LzQAL2J1cHU5LzUAL2J1cHU5LzYAL2J1cHU5LzcAL2J1cHU5LzgAL2J1cHU5LzkAL2RhcmsyMy8xAC9kYXJrMjMvMgAvZGFyazIzLzMAL2RhcmsyNC8xAC9kYXJrMjQvMgAvZGFyazI0LzMAL2RhcmsyNC80AC9kYXJrMjUvMQAvZGFyazI1LzIAL2RhcmsyNS8zAC9kYXJrMjUvNAAvZGFyazI1LzUAL2RhcmsyNi8xAC9kYXJrMjYvMgAvZGFyazI2LzMAL2RhcmsyNi80AC9kYXJrMjYvNQAvZGFyazI2LzYAL2RhcmsyNy8xAC9kYXJrMjcvMgAvZGFyazI3LzMAL2RhcmsyNy80AC9kYXJrMjcvNQAvZGFyazI3LzYAL2RhcmsyNy83AC9kYXJrMjgvMQAvZGFyazI4LzIAL2RhcmsyOC8zAC9kYXJrMjgvNAAvZGFyazI4LzUAL2RhcmsyOC82AC9kYXJrMjgvNwAvZGFyazI4LzgAL2duYnUzLzEAL2duYnUzLzIAL2duYnUzLzMAL2duYnU0LzEAL2duYnU0LzIAL2duYnU0LzMAL2duYnU0LzQAL2duYnU1LzEAL2duYnU1LzIAL2duYnU1LzMAL2duYnU1LzQAL2duYnU1LzUAL2duYnU2LzEAL2duYnU2LzIAL2duYnU2LzMAL2duYnU2LzQAL2duYnU2LzUAL2duYnU2LzYAL2duYnU3LzEAL2duYnU3LzIAL2duYnU3LzMAL2duYnU3LzQAL2duYnU3LzUAL2duYnU3LzYAL2duYnU3LzcAL2duYnU4LzEAL2duYnU4LzIAL2duYnU4LzMAL2duYnU4LzQAL2duYnU4LzUAL2duYnU4LzYAL2duYnU4LzcAL2duYnU4LzgAL2duYnU5LzEAL2duYnU5LzIAL2duYnU5LzMAL2duYnU5LzQAL2duYnU5LzUAL2duYnU5LzYAL2duYnU5LzcAL2duYnU5LzgAL2duYnU5LzkAL2dyZWVuczMvMQAvZ3JlZW5zMy8yAC9ncmVlbnMzLzMAL2dyZWVuczQvMQAvZ3JlZW5zNC8yAC9ncmVlbnM0LzMAL2dyZWVuczQvNAAvZ3JlZW5zNS8xAC9ncmVlbnM1LzIAL2dyZWVuczUvMwAvZ3JlZW5zNS80AC9ncmVlbnM1LzUAL2dyZWVuczYvMQAvZ3JlZW5zNi8yAC9ncmVlbnM2LzMAL2dyZWVuczYvNAAvZ3JlZW5zNi81AC9ncmVlbnM2LzYAL2dyZWVuczcvMQAvZ3JlZW5zNy8yAC9ncmVlbnM3LzMAL2dyZWVuczcvNAAvZ3JlZW5zNy81AC9ncmVlbnM3LzYAL2dyZWVuczcvNwAvZ3JlZW5zOC8xAC9ncmVlbnM4LzIAL2dyZWVuczgvMwAvZ3JlZW5zOC80AC9ncmVlbnM4LzUAL2dyZWVuczgvNgAvZ3JlZW5zOC83AC9ncmVlbnM4LzgAL2dyZWVuczkvMQAvZ3JlZW5zOS8yAC9ncmVlbnM5LzMAL2dyZWVuczkvNAAvZ3JlZW5zOS81AC9ncmVlbnM5LzYAL2dyZWVuczkvNwAvZ3JlZW5zOS84AC9ncmVlbnM5LzkAL2dyZXlzMy8xAC9ncmV5czMvMgAvZ3JleXMzLzMAL2dyZXlzNC8xAC9ncmV5czQvMgAvZ3JleXM0LzMAL2dyZXlzNC80AC9ncmV5czUvMQAvZ3JleXM1LzIAL2dyZXlzNS8zAC9ncmV5czUvNAAvZ3JleXM1LzUAL2dyZXlzNi8xAC9ncmV5czYvMgAvZ3JleXM2LzMAL2dyZXlzNi80AC9ncmV5czYvNQAvZ3JleXM2LzYAL2dyZXlzNy8xAC9ncmV5czcvMgAvZ3JleXM3LzMAL2dyZXlzNy80AC9ncmV5czcvNQAvZ3JleXM3LzYAL2dyZXlzNy83AC9ncmV5czgvMQAvZ3JleXM4LzIAL2dyZXlzOC8zAC9ncmV5czgvNAAvZ3JleXM4LzUAL2dyZXlzOC82AC9ncmV5czgvNwAvZ3JleXM4LzgAL2dyZXlzOS8xAC9ncmV5czkvMgAvZ3JleXM5LzMAL2dyZXlzOS80AC9ncmV5czkvNQAvZ3JleXM5LzYAL2dyZXlzOS83AC9ncmV5czkvOAAvZ3JleXM5LzkAL29yYW5nZXMzLzEAL29yYW5nZXMzLzIAL29yYW5nZXMzLzMAL29yYW5nZXM0LzEAL29yYW5nZXM0LzIAL29yYW5nZXM0LzMAL29yYW5nZXM0LzQAL29yYW5nZXM1LzEAL29yYW5nZXM1LzIAL29yYW5nZXM1LzMAL29yYW5nZXM1LzQAL29yYW5nZXM1LzUAL29yYW5nZXM2LzEAL29yYW5nZXM2LzIAL29yYW5nZXM2LzMAL29yYW5nZXM2LzQAL29yYW5nZXM2LzUAL29yYW5nZXM2LzYAL29yYW5nZXM3LzEAL29yYW5nZXM3LzIAL29yYW5nZXM3LzMAL29yYW5nZXM3LzQAL29yYW5nZXM3LzUAL29yYW5nZXM3LzYAL29yYW5nZXM3LzcAL29yYW5nZXM4LzEAL29yYW5nZXM4LzIAL29yYW5nZXM4LzMAL29yYW5nZXM4LzQAL29yYW5nZXM4LzUAL29yYW5nZXM4LzYAL29yYW5nZXM4LzcAL29yYW5nZXM4LzgAL29yYW5nZXM5LzEAL29yYW5nZXM5LzIAL29yYW5nZXM5LzMAL29yYW5nZXM5LzQAL29yYW5nZXM5LzUAL29yYW5nZXM5LzYAL29yYW5nZXM5LzcAL29yYW5nZXM5LzgAL29yYW5nZXM5LzkAL29ycmQzLzEAL29ycmQzLzIAL29ycmQzLzMAL29ycmQ0LzEAL29ycmQ0LzIAL29ycmQ0LzMAL29ycmQ0LzQAL29ycmQ1LzEAL29ycmQ1LzIAL29ycmQ1LzMAL29ycmQ1LzQAL29ycmQ1LzUAL29ycmQ2LzEAL29ycmQ2LzIAL29ycmQ2LzMAL29ycmQ2LzQAL29ycmQ2LzUAL29ycmQ2LzYAL29ycmQ3LzEAL29ycmQ3LzIAL29ycmQ3LzMAL29ycmQ3LzQAL29ycmQ3LzUAL29ycmQ3LzYAL29ycmQ3LzcAL29ycmQ4LzEAL29ycmQ4LzIAL29ycmQ4LzMAL29ycmQ4LzQAL29ycmQ4LzUAL29ycmQ4LzYAL29ycmQ4LzcAL29ycmQ4LzgAL29ycmQ5LzEAL29ycmQ5LzIAL29ycmQ5LzMAL29ycmQ5LzQAL29ycmQ5LzUAL29ycmQ5LzYAL29ycmQ5LzcAL29ycmQ5LzgAL29ycmQ5LzkAL3BhaXJlZDEwLzEAL3BhaXJlZDEwLzEwAC9wYWlyZWQxMC8yAC9wYWlyZWQxMC8zAC9wYWlyZWQxMC80AC9wYWlyZWQxMC81AC9wYWlyZWQxMC82AC9wYWlyZWQxMC83AC9wYWlyZWQxMC84AC9wYWlyZWQxMC85AC9wYWlyZWQxMS8xAC9wYWlyZWQxMS8xMAAvcGFpcmVkMTEvMTEAL3BhaXJlZDExLzIAL3BhaXJlZDExLzMAL3BhaXJlZDExLzQAL3BhaXJlZDExLzUAL3BhaXJlZDExLzYAL3BhaXJlZDExLzcAL3BhaXJlZDExLzgAL3BhaXJlZDExLzkAL3BhaXJlZDEyLzEAL3BhaXJlZDEyLzEwAC9wYWlyZWQxMi8xMQAvcGFpcmVkMTIvMTIAL3BhaXJlZDEyLzIAL3BhaXJlZDEyLzMAL3BhaXJlZDEyLzQAL3BhaXJlZDEyLzUAL3BhaXJlZDEyLzYAL3BhaXJlZDEyLzcAL3BhaXJlZDEyLzgAL3BhaXJlZDEyLzkAL3BhaXJlZDMvMQAvcGFpcmVkMy8yAC9wYWlyZWQzLzMAL3BhaXJlZDQvMQAvcGFpcmVkNC8yAC9wYWlyZWQ0LzMAL3BhaXJlZDQvNAAvcGFpcmVkNS8xAC9wYWlyZWQ1LzIAL3BhaXJlZDUvMwAvcGFpcmVkNS80AC9wYWlyZWQ1LzUAL3BhaXJlZDYvMQAvcGFpcmVkNi8yAC9wYWlyZWQ2LzMAL3BhaXJlZDYvNAAvcGFpcmVkNi81AC9wYWlyZWQ2LzYAL3BhaXJlZDcvMQAvcGFpcmVkNy8yAC9wYWlyZWQ3LzMAL3BhaXJlZDcvNAAvcGFpcmVkNy81AC9wYWlyZWQ3LzYAL3BhaXJlZDcvNwAvcGFpcmVkOC8xAC9wYWlyZWQ4LzIAL3BhaXJlZDgvMwAvcGFpcmVkOC80AC9wYWlyZWQ4LzUAL3BhaXJlZDgvNgAvcGFpcmVkOC83AC9wYWlyZWQ4LzgAL3BhaXJlZDkvMQAvcGFpcmVkOS8yAC9wYWlyZWQ5LzMAL3BhaXJlZDkvNAAvcGFpcmVkOS81AC9wYWlyZWQ5LzYAL3BhaXJlZDkvNwAvcGFpcmVkOS84AC9wYWlyZWQ5LzkAL3Bhc3RlbDEzLzEAL3Bhc3RlbDEzLzIAL3Bhc3RlbDEzLzMAL3Bhc3RlbDE0LzEAL3Bhc3RlbDE0LzIAL3Bhc3RlbDE0LzMAL3Bhc3RlbDE0LzQAL3Bhc3RlbDE1LzEAL3Bhc3RlbDE1LzIAL3Bhc3RlbDE1LzMAL3Bhc3RlbDE1LzQAL3Bhc3RlbDE1LzUAL3Bhc3RlbDE2LzEAL3Bhc3RlbDE2LzIAL3Bhc3RlbDE2LzMAL3Bhc3RlbDE2LzQAL3Bhc3RlbDE2LzUAL3Bhc3RlbDE2LzYAL3Bhc3RlbDE3LzEAL3Bhc3RlbDE3LzIAL3Bhc3RlbDE3LzMAL3Bhc3RlbDE3LzQAL3Bhc3RlbDE3LzUAL3Bhc3RlbDE3LzYAL3Bhc3RlbDE3LzcAL3Bhc3RlbDE4LzEAL3Bhc3RlbDE4LzIAL3Bhc3RlbDE4LzMAL3Bhc3RlbDE4LzQAL3Bhc3RlbDE4LzUAL3Bhc3RlbDE4LzYAL3Bhc3RlbDE4LzcAL3Bhc3RlbDE4LzgAL3Bhc3RlbDE5LzEAL3Bhc3RlbDE5LzIAL3Bhc3RlbDE5LzMAL3Bhc3RlbDE5LzQAL3Bhc3RlbDE5LzUAL3Bhc3RlbDE5LzYAL3Bhc3RlbDE5LzcAL3Bhc3RlbDE5LzgAL3Bhc3RlbDE5LzkAL3Bhc3RlbDIzLzEAL3Bhc3RlbDIzLzIAL3Bhc3RlbDIzLzMAL3Bhc3RlbDI0LzEAL3Bhc3RlbDI0LzIAL3Bhc3RlbDI0LzMAL3Bhc3RlbDI0LzQAL3Bhc3RlbDI1LzEAL3Bhc3RlbDI1LzIAL3Bhc3RlbDI1LzMAL3Bhc3RlbDI1LzQAL3Bhc3RlbDI1LzUAL3Bhc3RlbDI2LzEAL3Bhc3RlbDI2LzIAL3Bhc3RlbDI2LzMAL3Bhc3RlbDI2LzQAL3Bhc3RlbDI2LzUAL3Bhc3RlbDI2LzYAL3Bhc3RlbDI3LzEAL3Bhc3RlbDI3LzIAL3Bhc3RlbDI3LzMAL3Bhc3RlbDI3LzQAL3Bhc3RlbDI3LzUAL3Bhc3RlbDI3LzYAL3Bhc3RlbDI3LzcAL3Bhc3RlbDI4LzEAL3Bhc3RlbDI4LzIAL3Bhc3RlbDI4LzMAL3Bhc3RlbDI4LzQAL3Bhc3RlbDI4LzUAL3Bhc3RlbDI4LzYAL3Bhc3RlbDI4LzcAL3Bhc3RlbDI4LzgAL3BpeWcxMC8xAC9waXlnMTAvMTAAL3BpeWcxMC8yAC9waXlnMTAvMwAvcGl5ZzEwLzQAL3BpeWcxMC81AC9waXlnMTAvNgAvcGl5ZzEwLzcAL3BpeWcxMC84AC9waXlnMTAvOQAvcGl5ZzExLzEAL3BpeWcxMS8xMAAvcGl5ZzExLzExAC9waXlnMTEvMgAvcGl5ZzExLzMAL3BpeWcxMS80AC9waXlnMTEvNQAvcGl5ZzExLzYAL3BpeWcxMS83AC9waXlnMTEvOAAvcGl5ZzExLzkAL3BpeWczLzEAL3BpeWczLzIAL3BpeWczLzMAL3BpeWc0LzEAL3BpeWc0LzIAL3BpeWc0LzMAL3BpeWc0LzQAL3BpeWc1LzEAL3BpeWc1LzIAL3BpeWc1LzMAL3BpeWc1LzQAL3BpeWc1LzUAL3BpeWc2LzEAL3BpeWc2LzIAL3BpeWc2LzMAL3BpeWc2LzQAL3BpeWc2LzUAL3BpeWc2LzYAL3BpeWc3LzEAL3BpeWc3LzIAL3BpeWc3LzMAL3BpeWc3LzQAL3BpeWc3LzUAL3BpeWc3LzYAL3BpeWc3LzcAL3BpeWc4LzEAL3BpeWc4LzIAL3BpeWc4LzMAL3BpeWc4LzQAL3BpeWc4LzUAL3BpeWc4LzYAL3BpeWc4LzcAL3BpeWc4LzgAL3BpeWc5LzEAL3BpeWc5LzIAL3BpeWc5LzMAL3BpeWc5LzQAL3BpeWc5LzUAL3BpeWc5LzYAL3BpeWc5LzcAL3BpeWc5LzgAL3BpeWc5LzkAL3ByZ24xMC8xAC9wcmduMTAvMTAAL3ByZ24xMC8yAC9wcmduMTAvMwAvcHJnbjEwLzQAL3ByZ24xMC81AC9wcmduMTAvNgAvcHJnbjEwLzcAL3ByZ24xMC84AC9wcmduMTAvOQAvcHJnbjExLzEAL3ByZ24xMS8xMAAvcHJnbjExLzExAC9wcmduMTEvMgAvcHJnbjExLzMAL3ByZ24xMS80AC9wcmduMTEvNQAvcHJnbjExLzYAL3ByZ24xMS83AC9wcmduMTEvOAAvcHJnbjExLzkAL3ByZ24zLzEAL3ByZ24zLzIAL3ByZ24zLzMAL3ByZ240LzEAL3ByZ240LzIAL3ByZ240LzMAL3ByZ240LzQAL3ByZ241LzEAL3ByZ241LzIAL3ByZ241LzMAL3ByZ241LzQAL3ByZ241LzUAL3ByZ242LzEAL3ByZ242LzIAL3ByZ242LzMAL3ByZ242LzQAL3ByZ242LzUAL3ByZ242LzYAL3ByZ243LzEAL3ByZ243LzIAL3ByZ243LzMAL3ByZ243LzQAL3ByZ243LzUAL3ByZ243LzYAL3ByZ243LzcAL3ByZ244LzEAL3ByZ244LzIAL3ByZ244LzMAL3ByZ244LzQAL3ByZ244LzUAL3ByZ244LzYAL3ByZ244LzcAL3ByZ244LzgAL3ByZ245LzEAL3ByZ245LzIAL3ByZ245LzMAL3ByZ245LzQAL3ByZ245LzUAL3ByZ245LzYAL3ByZ245LzcAL3ByZ245LzgAL3ByZ245LzkAL3B1YnUzLzEAL3B1YnUzLzIAL3B1YnUzLzMAL3B1YnU0LzEAL3B1YnU0LzIAL3B1YnU0LzMAL3B1YnU0LzQAL3B1YnU1LzEAL3B1YnU1LzIAL3B1YnU1LzMAL3B1YnU1LzQAL3B1YnU1LzUAL3B1YnU2LzEAL3B1YnU2LzIAL3B1YnU2LzMAL3B1YnU2LzQAL3B1YnU2LzUAL3B1YnU2LzYAL3B1YnU3LzEAL3B1YnU3LzIAL3B1YnU3LzMAL3B1YnU3LzQAL3B1YnU3LzUAL3B1YnU3LzYAL3B1YnU3LzcAL3B1YnU4LzEAL3B1YnU4LzIAL3B1YnU4LzMAL3B1YnU4LzQAL3B1YnU4LzUAL3B1YnU4LzYAL3B1YnU4LzcAL3B1YnU4LzgAL3B1YnU5LzEAL3B1YnU5LzIAL3B1YnU5LzMAL3B1YnU5LzQAL3B1YnU5LzUAL3B1YnU5LzYAL3B1YnU5LzcAL3B1YnU5LzgAL3B1YnU5LzkAL3B1YnVnbjMvMQAvcHVidWduMy8yAC9wdWJ1Z24zLzMAL3B1YnVnbjQvMQAvcHVidWduNC8yAC9wdWJ1Z240LzMAL3B1YnVnbjQvNAAvcHVidWduNS8xAC9wdWJ1Z241LzIAL3B1YnVnbjUvMwAvcHVidWduNS80AC9wdWJ1Z241LzUAL3B1YnVnbjYvMQAvcHVidWduNi8yAC9wdWJ1Z242LzMAL3B1YnVnbjYvNAAvcHVidWduNi81AC9wdWJ1Z242LzYAL3B1YnVnbjcvMQAvcHVidWduNy8yAC9wdWJ1Z243LzMAL3B1YnVnbjcvNAAvcHVidWduNy81AC9wdWJ1Z243LzYAL3B1YnVnbjcvNwAvcHVidWduOC8xAC9wdWJ1Z244LzIAL3B1YnVnbjgvMwAvcHVidWduOC80AC9wdWJ1Z244LzUAL3B1YnVnbjgvNgAvcHVidWduOC83AC9wdWJ1Z244LzgAL3B1YnVnbjkvMQAvcHVidWduOS8yAC9wdWJ1Z245LzMAL3B1YnVnbjkvNAAvcHVidWduOS81AC9wdWJ1Z245LzYAL3B1YnVnbjkvNwAvcHVidWduOS84AC9wdWJ1Z245LzkAL3B1b3IxMC8xAC9wdW9yMTAvMTAAL3B1b3IxMC8yAC9wdW9yMTAvMwAvcHVvcjEwLzQAL3B1b3IxMC81AC9wdW9yMTAvNgAvcHVvcjEwLzcAL3B1b3IxMC84AC9wdW9yMTAvOQAvcHVvcjExLzEAL3B1b3IxMS8xMAAvcHVvcjExLzExAC9wdW9yMTEvMgAvcHVvcjExLzMAL3B1b3IxMS80AC9wdW9yMTEvNQAvcHVvcjExLzYAL3B1b3IxMS83AC9wdW9yMTEvOAAvcHVvcjExLzkAL3B1b3IzLzEAL3B1b3IzLzIAL3B1b3IzLzMAL3B1b3I0LzEAL3B1b3I0LzIAL3B1b3I0LzMAL3B1b3I0LzQAL3B1b3I1LzEAL3B1b3I1LzIAL3B1b3I1LzMAL3B1b3I1LzQAL3B1b3I1LzUAL3B1b3I2LzEAL3B1b3I2LzIAL3B1b3I2LzMAL3B1b3I2LzQAL3B1b3I2LzUAL3B1b3I2LzYAL3B1b3I3LzEAL3B1b3I3LzIAL3B1b3I3LzMAL3B1b3I3LzQAL3B1b3I3LzUAL3B1b3I3LzYAL3B1b3I3LzcAL3B1b3I4LzEAL3B1b3I4LzIAL3B1b3I4LzMAL3B1b3I4LzQAL3B1b3I4LzUAL3B1b3I4LzYAL3B1b3I4LzcAL3B1b3I4LzgAL3B1b3I5LzEAL3B1b3I5LzIAL3B1b3I5LzMAL3B1b3I5LzQAL3B1b3I5LzUAL3B1b3I5LzYAL3B1b3I5LzcAL3B1b3I5LzgAL3B1b3I5LzkAL3B1cmQzLzEAL3B1cmQzLzIAL3B1cmQzLzMAL3B1cmQ0LzEAL3B1cmQ0LzIAL3B1cmQ0LzMAL3B1cmQ0LzQAL3B1cmQ1LzEAL3B1cmQ1LzIAL3B1cmQ1LzMAL3B1cmQ1LzQAL3B1cmQ1LzUAL3B1cmQ2LzEAL3B1cmQ2LzIAL3B1cmQ2LzMAL3B1cmQ2LzQAL3B1cmQ2LzUAL3B1cmQ2LzYAL3B1cmQ3LzEAL3B1cmQ3LzIAL3B1cmQ3LzMAL3B1cmQ3LzQAL3B1cmQ3LzUAL3B1cmQ3LzYAL3B1cmQ3LzcAL3B1cmQ4LzEAL3B1cmQ4LzIAL3B1cmQ4LzMAL3B1cmQ4LzQAL3B1cmQ4LzUAL3B1cmQ4LzYAL3B1cmQ4LzcAL3B1cmQ4LzgAL3B1cmQ5LzEAL3B1cmQ5LzIAL3B1cmQ5LzMAL3B1cmQ5LzQAL3B1cmQ5LzUAL3B1cmQ5LzYAL3B1cmQ5LzcAL3B1cmQ5LzgAL3B1cmQ5LzkAL3B1cnBsZXMzLzEAL3B1cnBsZXMzLzIAL3B1cnBsZXMzLzMAL3B1cnBsZXM0LzEAL3B1cnBsZXM0LzIAL3B1cnBsZXM0LzMAL3B1cnBsZXM0LzQAL3B1cnBsZXM1LzEAL3B1cnBsZXM1LzIAL3B1cnBsZXM1LzMAL3B1cnBsZXM1LzQAL3B1cnBsZXM1LzUAL3B1cnBsZXM2LzEAL3B1cnBsZXM2LzIAL3B1cnBsZXM2LzMAL3B1cnBsZXM2LzQAL3B1cnBsZXM2LzUAL3B1cnBsZXM2LzYAL3B1cnBsZXM3LzEAL3B1cnBsZXM3LzIAL3B1cnBsZXM3LzMAL3B1cnBsZXM3LzQAL3B1cnBsZXM3LzUAL3B1cnBsZXM3LzYAL3B1cnBsZXM3LzcAL3B1cnBsZXM4LzEAL3B1cnBsZXM4LzIAL3B1cnBsZXM4LzMAL3B1cnBsZXM4LzQAL3B1cnBsZXM4LzUAL3B1cnBsZXM4LzYAL3B1cnBsZXM4LzcAL3B1cnBsZXM4LzgAL3B1cnBsZXM5LzEAL3B1cnBsZXM5LzIAL3B1cnBsZXM5LzMAL3B1cnBsZXM5LzQAL3B1cnBsZXM5LzUAL3B1cnBsZXM5LzYAL3B1cnBsZXM5LzcAL3B1cnBsZXM5LzgAL3B1cnBsZXM5LzkAL3JkYnUxMC8xAC9yZGJ1MTAvMTAAL3JkYnUxMC8yAC9yZGJ1MTAvMwAvcmRidTEwLzQAL3JkYnUxMC81AC9yZGJ1MTAvNgAvcmRidTEwLzcAL3JkYnUxMC84AC9yZGJ1MTAvOQAvcmRidTExLzEAL3JkYnUxMS8xMAAvcmRidTExLzExAC9yZGJ1MTEvMgAvcmRidTExLzMAL3JkYnUxMS80AC9yZGJ1MTEvNQAvcmRidTExLzYAL3JkYnUxMS83AC9yZGJ1MTEvOAAvcmRidTExLzkAL3JkYnUzLzEAL3JkYnUzLzIAL3JkYnUzLzMAL3JkYnU0LzEAL3JkYnU0LzIAL3JkYnU0LzMAL3JkYnU0LzQAL3JkYnU1LzEAL3JkYnU1LzIAL3JkYnU1LzMAL3JkYnU1LzQAL3JkYnU1LzUAL3JkYnU2LzEAL3JkYnU2LzIAL3JkYnU2LzMAL3JkYnU2LzQAL3JkYnU2LzUAL3JkYnU2LzYAL3JkYnU3LzEAL3JkYnU3LzIAL3JkYnU3LzMAL3JkYnU3LzQAL3JkYnU3LzUAL3JkYnU3LzYAL3JkYnU3LzcAL3JkYnU4LzEAL3JkYnU4LzIAL3JkYnU4LzMAL3JkYnU4LzQAL3JkYnU4LzUAL3JkYnU4LzYAL3JkYnU4LzcAL3JkYnU4LzgAL3JkYnU5LzEAL3JkYnU5LzIAL3JkYnU5LzMAL3JkYnU5LzQAL3JkYnU5LzUAL3JkYnU5LzYAL3JkYnU5LzcAL3JkYnU5LzgAL3JkYnU5LzkAL3JkZ3kxMC8xAC9yZGd5MTAvMTAAL3JkZ3kxMC8yAC9yZGd5MTAvMwAvcmRneTEwLzQAL3JkZ3kxMC81AC9yZGd5MTAvNgAvcmRneTEwLzcAL3JkZ3kxMC84AC9yZGd5MTAvOQAvcmRneTExLzEAL3JkZ3kxMS8xMAAvcmRneTExLzExAC9yZGd5MTEvMgAvcmRneTExLzMAL3JkZ3kxMS80AC9yZGd5MTEvNQAvcmRneTExLzYAL3JkZ3kxMS83AC9yZGd5MTEvOAAvcmRneTExLzkAL3JkZ3kzLzEAL3JkZ3kzLzIAL3JkZ3kzLzMAL3JkZ3k0LzEAL3JkZ3k0LzIAL3JkZ3k0LzMAL3JkZ3k0LzQAL3JkZ3k1LzEAL3JkZ3k1LzIAL3JkZ3k1LzMAL3JkZ3k1LzQAL3JkZ3k1LzUAL3JkZ3k2LzEAL3JkZ3k2LzIAL3JkZ3k2LzMAL3JkZ3k2LzQAL3JkZ3k2LzUAL3JkZ3k2LzYAL3JkZ3k3LzEAL3JkZ3k3LzIAL3JkZ3k3LzMAL3JkZ3k3LzQAL3JkZ3k3LzUAL3JkZ3k3LzYAL3JkZ3k3LzcAL3JkZ3k4LzEAL3JkZ3k4LzIAL3JkZ3k4LzMAL3JkZ3k4LzQAL3JkZ3k4LzUAL3JkZ3k4LzYAL3JkZ3k4LzcAL3JkZ3k4LzgAL3JkZ3k5LzEAL3JkZ3k5LzIAL3JkZ3k5LzMAL3JkZ3k5LzQAL3JkZ3k5LzUAL3JkZ3k5LzYAL3JkZ3k5LzcAL3JkZ3k5LzgAL3JkZ3k5LzkAL3JkcHUzLzEAL3JkcHUzLzIAL3JkcHUzLzMAL3JkcHU0LzEAL3JkcHU0LzIAL3JkcHU0LzMAL3JkcHU0LzQAL3JkcHU1LzEAL3JkcHU1LzIAL3JkcHU1LzMAL3JkcHU1LzQAL3JkcHU1LzUAL3JkcHU2LzEAL3JkcHU2LzIAL3JkcHU2LzMAL3JkcHU2LzQAL3JkcHU2LzUAL3JkcHU2LzYAL3JkcHU3LzEAL3JkcHU3LzIAL3JkcHU3LzMAL3JkcHU3LzQAL3JkcHU3LzUAL3JkcHU3LzYAL3JkcHU3LzcAL3JkcHU4LzEAL3JkcHU4LzIAL3JkcHU4LzMAL3JkcHU4LzQAL3JkcHU4LzUAL3JkcHU4LzYAL3JkcHU4LzcAL3JkcHU4LzgAL3JkcHU5LzEAL3JkcHU5LzIAL3JkcHU5LzMAL3JkcHU5LzQAL3JkcHU5LzUAL3JkcHU5LzYAL3JkcHU5LzcAL3JkcHU5LzgAL3JkcHU5LzkAL3JkeWxidTEwLzEAL3JkeWxidTEwLzEwAC9yZHlsYnUxMC8yAC9yZHlsYnUxMC8zAC9yZHlsYnUxMC80AC9yZHlsYnUxMC81AC9yZHlsYnUxMC82AC9yZHlsYnUxMC83AC9yZHlsYnUxMC84AC9yZHlsYnUxMC85AC9yZHlsYnUxMS8xAC9yZHlsYnUxMS8xMAAvcmR5bGJ1MTEvMTEAL3JkeWxidTExLzIAL3JkeWxidTExLzMAL3JkeWxidTExLzQAL3JkeWxidTExLzUAL3JkeWxidTExLzYAL3JkeWxidTExLzcAL3JkeWxidTExLzgAL3JkeWxidTExLzkAL3JkeWxidTMvMQAvcmR5bGJ1My8yAC9yZHlsYnUzLzMAL3JkeWxidTQvMQAvcmR5bGJ1NC8yAC9yZHlsYnU0LzMAL3JkeWxidTQvNAAvcmR5bGJ1NS8xAC9yZHlsYnU1LzIAL3JkeWxidTUvMwAvcmR5bGJ1NS80AC9yZHlsYnU1LzUAL3JkeWxidTYvMQAvcmR5bGJ1Ni8yAC9yZHlsYnU2LzMAL3JkeWxidTYvNAAvcmR5bGJ1Ni81AC9yZHlsYnU2LzYAL3JkeWxidTcvMQAvcmR5bGJ1Ny8yAC9yZHlsYnU3LzMAL3JkeWxidTcvNAAvcmR5bGJ1Ny81AC9yZHlsYnU3LzYAL3JkeWxidTcvNwAvcmR5bGJ1OC8xAC9yZHlsYnU4LzIAL3JkeWxidTgvMwAvcmR5bGJ1OC80AC9yZHlsYnU4LzUAL3JkeWxidTgvNgAvcmR5bGJ1OC83AC9yZHlsYnU4LzgAL3JkeWxidTkvMQAvcmR5bGJ1OS8yAC9yZHlsYnU5LzMAL3JkeWxidTkvNAAvcmR5bGJ1OS81AC9yZHlsYnU5LzYAL3JkeWxidTkvNwAvcmR5bGJ1OS84AC9yZHlsYnU5LzkAL3JkeWxnbjEwLzEAL3JkeWxnbjEwLzEwAC9yZHlsZ24xMC8yAC9yZHlsZ24xMC8zAC9yZHlsZ24xMC80AC9yZHlsZ24xMC81AC9yZHlsZ24xMC82AC9yZHlsZ24xMC83AC9yZHlsZ24xMC84AC9yZHlsZ24xMC85AC9yZHlsZ24xMS8xAC9yZHlsZ24xMS8xMAAvcmR5bGduMTEvMTEAL3JkeWxnbjExLzIAL3JkeWxnbjExLzMAL3JkeWxnbjExLzQAL3JkeWxnbjExLzUAL3JkeWxnbjExLzYAL3JkeWxnbjExLzcAL3JkeWxnbjExLzgAL3JkeWxnbjExLzkAL3JkeWxnbjMvMQAvcmR5bGduMy8yAC9yZHlsZ24zLzMAL3JkeWxnbjQvMQAvcmR5bGduNC8yAC9yZHlsZ240LzMAL3JkeWxnbjQvNAAvcmR5bGduNS8xAC9yZHlsZ241LzIAL3JkeWxnbjUvMwAvcmR5bGduNS80AC9yZHlsZ241LzUAL3JkeWxnbjYvMQAvcmR5bGduNi8yAC9yZHlsZ242LzMAL3JkeWxnbjYvNAAvcmR5bGduNi81AC9yZHlsZ242LzYAL3JkeWxnbjcvMQAvcmR5bGduNy8yAC9yZHlsZ243LzMAL3JkeWxnbjcvNAAvcmR5bGduNy81AC9yZHlsZ243LzYAL3JkeWxnbjcvNwAvcmR5bGduOC8xAC9yZHlsZ244LzIAL3JkeWxnbjgvMwAvcmR5bGduOC80AC9yZHlsZ244LzUAL3JkeWxnbjgvNgAvcmR5bGduOC83AC9yZHlsZ244LzgAL3JkeWxnbjkvMQAvcmR5bGduOS8yAC9yZHlsZ245LzMAL3JkeWxnbjkvNAAvcmR5bGduOS81AC9yZHlsZ245LzYAL3JkeWxnbjkvNwAvcmR5bGduOS84AC9yZHlsZ245LzkAL3JlZHMzLzEAL3JlZHMzLzIAL3JlZHMzLzMAL3JlZHM0LzEAL3JlZHM0LzIAL3JlZHM0LzMAL3JlZHM0LzQAL3JlZHM1LzEAL3JlZHM1LzIAL3JlZHM1LzMAL3JlZHM1LzQAL3JlZHM1LzUAL3JlZHM2LzEAL3JlZHM2LzIAL3JlZHM2LzMAL3JlZHM2LzQAL3JlZHM2LzUAL3JlZHM2LzYAL3JlZHM3LzEAL3JlZHM3LzIAL3JlZHM3LzMAL3JlZHM3LzQAL3JlZHM3LzUAL3JlZHM3LzYAL3JlZHM3LzcAL3JlZHM4LzEAL3JlZHM4LzIAL3JlZHM4LzMAL3JlZHM4LzQAL3JlZHM4LzUAL3JlZHM4LzYAL3JlZHM4LzcAL3JlZHM4LzgAL3JlZHM5LzEAL3JlZHM5LzIAL3JlZHM5LzMAL3JlZHM5LzQAL3JlZHM5LzUAL3JlZHM5LzYAL3JlZHM5LzcAL3JlZHM5LzgAL3JlZHM5LzkAL3NldDEzLzEAL3NldDEzLzIAL3NldDEzLzMAL3NldDE0LzEAL3NldDE0LzIAL3NldDE0LzMAL3NldDE0LzQAL3NldDE1LzEAL3NldDE1LzIAL3NldDE1LzMAL3NldDE1LzQAL3NldDE1LzUAL3NldDE2LzEAL3NldDE2LzIAL3NldDE2LzMAL3NldDE2LzQAL3NldDE2LzUAL3NldDE2LzYAL3NldDE3LzEAL3NldDE3LzIAL3NldDE3LzMAL3NldDE3LzQAL3NldDE3LzUAL3NldDE3LzYAL3NldDE3LzcAL3NldDE4LzEAL3NldDE4LzIAL3NldDE4LzMAL3NldDE4LzQAL3NldDE4LzUAL3NldDE4LzYAL3NldDE4LzcAL3NldDE4LzgAL3NldDE5LzEAL3NldDE5LzIAL3NldDE5LzMAL3NldDE5LzQAL3NldDE5LzUAL3NldDE5LzYAL3NldDE5LzcAL3NldDE5LzgAL3NldDE5LzkAL3NldDIzLzEAL3NldDIzLzIAL3NldDIzLzMAL3NldDI0LzEAL3NldDI0LzIAL3NldDI0LzMAL3NldDI0LzQAL3NldDI1LzEAL3NldDI1LzIAL3NldDI1LzMAL3NldDI1LzQAL3NldDI1LzUAL3NldDI2LzEAL3NldDI2LzIAL3NldDI2LzMAL3NldDI2LzQAL3NldDI2LzUAL3NldDI2LzYAL3NldDI3LzEAL3NldDI3LzIAL3NldDI3LzMAL3NldDI3LzQAL3NldDI3LzUAL3NldDI3LzYAL3NldDI3LzcAL3NldDI4LzEAL3NldDI4LzIAL3NldDI4LzMAL3NldDI4LzQAL3NldDI4LzUAL3NldDI4LzYAL3NldDI4LzcAL3NldDI4LzgAL3NldDMxMC8xAC9zZXQzMTAvMTAAL3NldDMxMC8yAC9zZXQzMTAvMwAvc2V0MzEwLzQAL3NldDMxMC81AC9zZXQzMTAvNgAvc2V0MzEwLzcAL3NldDMxMC84AC9zZXQzMTAvOQAvc2V0MzExLzEAL3NldDMxMS8xMAAvc2V0MzExLzExAC9zZXQzMTEvMgAvc2V0MzExLzMAL3NldDMxMS80AC9zZXQzMTEvNQAvc2V0MzExLzYAL3NldDMxMS83AC9zZXQzMTEvOAAvc2V0MzExLzkAL3NldDMxMi8xAC9zZXQzMTIvMTAAL3NldDMxMi8xMQAvc2V0MzEyLzEyAC9zZXQzMTIvMgAvc2V0MzEyLzMAL3NldDMxMi80AC9zZXQzMTIvNQAvc2V0MzEyLzYAL3NldDMxMi83AC9zZXQzMTIvOAAvc2V0MzEyLzkAL3NldDMzLzEAL3NldDMzLzIAL3NldDMzLzMAL3NldDM0LzEAL3NldDM0LzIAL3NldDM0LzMAL3NldDM0LzQAL3NldDM1LzEAL3NldDM1LzIAL3NldDM1LzMAL3NldDM1LzQAL3NldDM1LzUAL3NldDM2LzEAL3NldDM2LzIAL3NldDM2LzMAL3NldDM2LzQAL3NldDM2LzUAL3NldDM2LzYAL3NldDM3LzEAL3NldDM3LzIAL3NldDM3LzMAL3NldDM3LzQAL3NldDM3LzUAL3NldDM3LzYAL3NldDM3LzcAL3NldDM4LzEAL3NldDM4LzIAL3NldDM4LzMAL3NldDM4LzQAL3NldDM4LzUAL3NldDM4LzYAL3NldDM4LzcAL3NldDM4LzgAL3NldDM5LzEAL3NldDM5LzIAL3NldDM5LzMAL3NldDM5LzQAL3NldDM5LzUAL3NldDM5LzYAL3NldDM5LzcAL3NldDM5LzgAL3NldDM5LzkAL3NwZWN0cmFsMTAvMQAvc3BlY3RyYWwxMC8xMAAvc3BlY3RyYWwxMC8yAC9zcGVjdHJhbDEwLzMAL3NwZWN0cmFsMTAvNAAvc3BlY3RyYWwxMC81AC9zcGVjdHJhbDEwLzYAL3NwZWN0cmFsMTAvNwAvc3BlY3RyYWwxMC84AC9zcGVjdHJhbDEwLzkAL3NwZWN0cmFsMTEvMQAvc3BlY3RyYWwxMS8xMAAvc3BlY3RyYWwxMS8xMQAvc3BlY3RyYWwxMS8yAC9zcGVjdHJhbDExLzMAL3NwZWN0cmFsMTEvNAAvc3BlY3RyYWwxMS81AC9zcGVjdHJhbDExLzYAL3NwZWN0cmFsMTEvNwAvc3BlY3RyYWwxMS84AC9zcGVjdHJhbDExLzkAL3NwZWN0cmFsMy8xAC9zcGVjdHJhbDMvMgAvc3BlY3RyYWwzLzMAL3NwZWN0cmFsNC8xAC9zcGVjdHJhbDQvMgAvc3BlY3RyYWw0LzMAL3NwZWN0cmFsNC80AC9zcGVjdHJhbDUvMQAvc3BlY3RyYWw1LzIAL3NwZWN0cmFsNS8zAC9zcGVjdHJhbDUvNAAvc3BlY3RyYWw1LzUAL3NwZWN0cmFsNi8xAC9zcGVjdHJhbDYvMgAvc3BlY3RyYWw2LzMAL3NwZWN0cmFsNi80AC9zcGVjdHJhbDYvNQAvc3BlY3RyYWw2LzYAL3NwZWN0cmFsNy8xAC9zcGVjdHJhbDcvMgAvc3BlY3RyYWw3LzMAL3NwZWN0cmFsNy80AC9zcGVjdHJhbDcvNQAvc3BlY3RyYWw3LzYAL3NwZWN0cmFsNy83AC9zcGVjdHJhbDgvMQAvc3BlY3RyYWw4LzIAL3NwZWN0cmFsOC8zAC9zcGVjdHJhbDgvNAAvc3BlY3RyYWw4LzUAL3NwZWN0cmFsOC82AC9zcGVjdHJhbDgvNwAvc3BlY3RyYWw4LzgAL3NwZWN0cmFsOS8xAC9zcGVjdHJhbDkvMgAvc3BlY3RyYWw5LzMAL3NwZWN0cmFsOS80AC9zcGVjdHJhbDkvNQAvc3BlY3RyYWw5LzYAL3NwZWN0cmFsOS83AC9zcGVjdHJhbDkvOAAvc3BlY3RyYWw5LzkAL3N2Zy9hbGljZWJsdWUAL3N2Zy9hbnRpcXVld2hpdGUAL3N2Zy9hcXVhAC9zdmcvYXF1YW1hcmluZQAvc3ZnL2F6dXJlAC9zdmcvYmVpZ2UAL3N2Zy9iaXNxdWUAL3N2Zy9ibGFjawAvc3ZnL2JsYW5jaGVkYWxtb25kAC9zdmcvYmx1ZQAvc3ZnL2JsdWV2aW9sZXQAL3N2Zy9icm93bgAvc3ZnL2J1cmx5d29vZAAvc3ZnL2NhZGV0Ymx1ZQAvc3ZnL2NoYXJ0cmV1c2UAL3N2Zy9jaG9jb2xhdGUAL3N2Zy9jb3JhbAAvc3ZnL2Nvcm5mbG93ZXJibHVlAC9zdmcvY29ybnNpbGsAL3N2Zy9jcmltc29uAC9zdmcvY3lhbgAvc3ZnL2RhcmtibHVlAC9zdmcvZGFya2N5YW4AL3N2Zy9kYXJrZ29sZGVucm9kAC9zdmcvZGFya2dyYXkAL3N2Zy9kYXJrZ3JlZW4AL3N2Zy9kYXJrZ3JleQAvc3ZnL2RhcmtraGFraQAvc3ZnL2RhcmttYWdlbnRhAC9zdmcvZGFya29saXZlZ3JlZW4AL3N2Zy9kYXJrb3JhbmdlAC9zdmcvZGFya29yY2hpZAAvc3ZnL2RhcmtyZWQAL3N2Zy9kYXJrc2FsbW9uAC9zdmcvZGFya3NlYWdyZWVuAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvZGFya3R1cnF1b2lzZQAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9kZWVwcGluawAvc3ZnL2RlZXBza3libHVlAC9zdmcvZGltZ3JheQAvc3ZnL2RpbWdyZXkAL3N2Zy9kb2RnZXJibHVlAC9zdmcvZmlyZWJyaWNrAC9zdmcvZmxvcmFsd2hpdGUAL3N2Zy9mb3Jlc3RncmVlbgAvc3ZnL2Z1Y2hzaWEAL3N2Zy9nYWluc2Jvcm8AL3N2Zy9naG9zdHdoaXRlAC9zdmcvZ29sZAAvc3ZnL2dvbGRlbnJvZAAvc3ZnL2dyYXkAL3N2Zy9ncmVlbgAvc3ZnL2dyZWVueWVsbG93AC9zdmcvZ3JleQAvc3ZnL2hvbmV5ZGV3AC9zdmcvaG90cGluawAvc3ZnL2luZGlhbnJlZAAvc3ZnL2luZGlnbwAvc3ZnL2l2b3J5AC9zdmcva2hha2kAL3N2Zy9sYXZlbmRlcgAvc3ZnL2xhdmVuZGVyYmx1c2gAL3N2Zy9sYXduZ3JlZW4AL3N2Zy9sZW1vbmNoaWZmb24AL3N2Zy9saWdodGJsdWUAL3N2Zy9saWdodGNvcmFsAC9zdmcvbGlnaHRjeWFuAC9zdmcvbGlnaHRnb2xkZW5yb2R5ZWxsb3cAL3N2Zy9saWdodGdyYXkAL3N2Zy9saWdodGdyZWVuAC9zdmcvbGlnaHRncmV5AC9zdmcvbGlnaHRwaW5rAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9saWdodHNlYWdyZWVuAC9zdmcvbGlnaHRza3libHVlAC9zdmcvbGlnaHRzbGF0ZWdyYXkAL3N2Zy9saWdodHNsYXRlZ3JleQAvc3ZnL2xpZ2h0c3RlZWxibHVlAC9zdmcvbGlnaHR5ZWxsb3cAL3N2Zy9saW1lAC9zdmcvbGltZWdyZWVuAC9zdmcvbGluZW4AL3N2Zy9tYWdlbnRhAC9zdmcvbWFyb29uAC9zdmcvbWVkaXVtYXF1YW1hcmluZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9tZWRpdW1vcmNoaWQAL3N2Zy9tZWRpdW1wdXJwbGUAL3N2Zy9tZWRpdW1zZWFncmVlbgAvc3ZnL21lZGl1bXNsYXRlYmx1ZQAvc3ZnL21lZGl1bXNwcmluZ2dyZWVuAC9zdmcvbWVkaXVtdHVycXVvaXNlAC9zdmcvbWVkaXVtdmlvbGV0cmVkAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbWludGNyZWFtAC9zdmcvbWlzdHlyb3NlAC9zdmcvbW9jY2FzaW4AL3N2Zy9uYXZham93aGl0ZQAvc3ZnL25hdnkAL3N2Zy9vbGRsYWNlAC9zdmcvb2xpdmUAL3N2Zy9vbGl2ZWRyYWIAL3N2Zy9vcmFuZ2UAL3N2Zy9vcmFuZ2VyZWQAL3N2Zy9vcmNoaWQAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvcGFsZWdyZWVuAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3BhbGV2aW9sZXRyZWQAL3N2Zy9wYXBheWF3aGlwAC9zdmcvcGVhY2hwdWZmAC9zdmcvcGVydQAvc3ZnL3BpbmsAL3N2Zy9wbHVtAC9zdmcvcG93ZGVyYmx1ZQAvc3ZnL3B1cnBsZQAvc3ZnL3JlZAAvc3ZnL3Jvc3licm93bgAvc3ZnL3JveWFsYmx1ZQAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvc2FsbW9uAC9zdmcvc2FuZHlicm93bgAvc3ZnL3NlYWdyZWVuAC9zdmcvc2Vhc2hlbGwAL3N2Zy9zaWVubmEAL3N2Zy9zaWx2ZXIAL3N2Zy9za3libHVlAC9zdmcvc2xhdGVibHVlAC9zdmcvc2xhdGVncmF5AC9zdmcvc2xhdGVncmV5AC9zdmcvc25vdwAvc3ZnL3NwcmluZ2dyZWVuAC9zdmcvc3RlZWxibHVlAC9zdmcvdGFuAC9zdmcvdGVhbAAvc3ZnL3RoaXN0bGUAL3N2Zy90b21hdG8AL3N2Zy90dXJxdW9pc2UAL3N2Zy92aW9sZXQAL3N2Zy93aGVhdAAvc3ZnL3doaXRlAC9zdmcvd2hpdGVzbW9rZQAvc3ZnL3llbGxvdwAvc3ZnL3llbGxvd2dyZWVuAC95bGduMy8xAC95bGduMy8yAC95bGduMy8zAC95bGduNC8xAC95bGduNC8yAC95bGduNC8zAC95bGduNC80AC95bGduNS8xAC95bGduNS8yAC95bGduNS8zAC95bGduNS80AC95bGduNS81AC95bGduNi8xAC95bGduNi8yAC95bGduNi8zAC95bGduNi80AC95bGduNi81AC95bGduNi82AC95bGduNy8xAC95bGduNy8yAC95bGduNy8zAC95bGduNy80AC95bGduNy81AC95bGduNy82AC95bGduNy83AC95bGduOC8xAC95bGduOC8yAC95bGduOC8zAC95bGduOC80AC95bGduOC81AC95bGduOC82AC95bGduOC83AC95bGduOC84AC95bGduOS8xAC95bGduOS8yAC95bGduOS8zAC95bGduOS80AC95bGduOS81AC95bGduOS82AC95bGduOS83AC95bGduOS84AC95bGduOS85AC95bGduYnUzLzEAL3lsZ25idTMvMgAveWxnbmJ1My8zAC95bGduYnU0LzEAL3lsZ25idTQvMgAveWxnbmJ1NC8zAC95bGduYnU0LzQAL3lsZ25idTUvMQAveWxnbmJ1NS8yAC95bGduYnU1LzMAL3lsZ25idTUvNAAveWxnbmJ1NS81AC95bGduYnU2LzEAL3lsZ25idTYvMgAveWxnbmJ1Ni8zAC95bGduYnU2LzQAL3lsZ25idTYvNQAveWxnbmJ1Ni82AC95bGduYnU3LzEAL3lsZ25idTcvMgAveWxnbmJ1Ny8zAC95bGduYnU3LzQAL3lsZ25idTcvNQAveWxnbmJ1Ny82AC95bGduYnU3LzcAL3lsZ25idTgvMQAveWxnbmJ1OC8yAC95bGduYnU4LzMAL3lsZ25idTgvNAAveWxnbmJ1OC81AC95bGduYnU4LzYAL3lsZ25idTgvNwAveWxnbmJ1OC84AC95bGduYnU5LzEAL3lsZ25idTkvMgAveWxnbmJ1OS8zAC95bGduYnU5LzQAL3lsZ25idTkvNQAveWxnbmJ1OS82AC95bGduYnU5LzcAL3lsZ25idTkvOAAveWxnbmJ1OS85AC95bG9yYnIzLzEAL3lsb3JicjMvMgAveWxvcmJyMy8zAC95bG9yYnI0LzEAL3lsb3JicjQvMgAveWxvcmJyNC8zAC95bG9yYnI0LzQAL3lsb3JicjUvMQAveWxvcmJyNS8yAC95bG9yYnI1LzMAL3lsb3JicjUvNAAveWxvcmJyNS81AC95bG9yYnI2LzEAL3lsb3JicjYvMgAveWxvcmJyNi8zAC95bG9yYnI2LzQAL3lsb3JicjYvNQAveWxvcmJyNi82AC95bG9yYnI3LzEAL3lsb3JicjcvMgAveWxvcmJyNy8zAC95bG9yYnI3LzQAL3lsb3JicjcvNQAveWxvcmJyNy82AC95bG9yYnI3LzcAL3lsb3JicjgvMQAveWxvcmJyOC8yAC95bG9yYnI4LzMAL3lsb3JicjgvNAAveWxvcmJyOC81AC95bG9yYnI4LzYAL3lsb3JicjgvNwAveWxvcmJyOC84AC95bG9yYnI5LzEAL3lsb3JicjkvMgAveWxvcmJyOS8zAC95bG9yYnI5LzQAL3lsb3JicjkvNQAveWxvcmJyOS82AC95bG9yYnI5LzcAL3lsb3JicjkvOAAveWxvcmJyOS85AC95bG9ycmQzLzEAL3lsb3JyZDMvMgAveWxvcnJkMy8zAC95bG9ycmQ0LzEAL3lsb3JyZDQvMgAveWxvcnJkNC8zAC95bG9ycmQ0LzQAL3lsb3JyZDUvMQAveWxvcnJkNS8yAC95bG9ycmQ1LzMAL3lsb3JyZDUvNAAveWxvcnJkNS81AC95bG9ycmQ2LzEAL3lsb3JyZDYvMgAveWxvcnJkNi8zAC95bG9ycmQ2LzQAL3lsb3JyZDYvNQAveWxvcnJkNi82AC95bG9ycmQ3LzEAL3lsb3JyZDcvMgAveWxvcnJkNy8zAC95bG9ycmQ3LzQAL3lsb3JyZDcvNQAveWxvcnJkNy82AC95bG9ycmQ3LzcAL3lsb3JyZDgvMQAveWxvcnJkOC8yAC95bG9ycmQ4LzMAL3lsb3JyZDgvNAAveWxvcnJkOC81AC95bG9ycmQ4LzYAL3lsb3JyZDgvNwAveWxvcnJkOC84AC95bG9ycmQ5LzEAL3lsb3JyZDkvMgAveWxvcnJkOS8zAC95bG9ycmQ5LzQAL3lsb3JyZDkvNQAveWxvcnJkOS82AC95bG9ycmQ5LzcAL3lsb3JyZDkvOAAveWxvcnJkOS85AGFsaWNlYmx1ZQBhbnRpcXVld2hpdGUAYW50aXF1ZXdoaXRlMQBhbnRpcXVld2hpdGUyAGFudGlxdWV3aGl0ZTMAYW50aXF1ZXdoaXRlNABhcXVhbWFyaW5lAGFxdWFtYXJpbmUxAGFxdWFtYXJpbmUyAGFxdWFtYXJpbmUzAGFxdWFtYXJpbmU0AGF6dXJlAGF6dXJlMQBhenVyZTIAYXp1cmUzAGF6dXJlNABiZWlnZQBiaXNxdWUAYmlzcXVlMQBiaXNxdWUyAGJpc3F1ZTMAYmlzcXVlNABibGFuY2hlZGFsbW9uZABibHVlAGJsdWUxAGJsdWUyAGJsdWUzAGJsdWU0AGJsdWV2aW9sZXQAYnJvd24AYnJvd24xAGJyb3duMgBicm93bjMAYnJvd240AGJ1cmx5d29vZABidXJseXdvb2QxAGJ1cmx5d29vZDIAYnVybHl3b29kMwBidXJseXdvb2Q0AGNhZGV0Ymx1ZQBjYWRldGJsdWUxAGNhZGV0Ymx1ZTIAY2FkZXRibHVlMwBjYWRldGJsdWU0AGNoYXJ0cmV1c2UAY2hhcnRyZXVzZTEAY2hhcnRyZXVzZTIAY2hhcnRyZXVzZTMAY2hhcnRyZXVzZTQAY2hvY29sYXRlAGNob2NvbGF0ZTEAY2hvY29sYXRlMgBjaG9jb2xhdGUzAGNob2NvbGF0ZTQAY29yYWwAY29yYWwxAGNvcmFsMgBjb3JhbDMAY29yYWw0AGNvcm5mbG93ZXJibHVlAGNvcm5zaWxrAGNvcm5zaWxrMQBjb3Juc2lsazIAY29ybnNpbGszAGNvcm5zaWxrNABjcmltc29uAGN5YW4AY3lhbjEAY3lhbjIAY3lhbjMAY3lhbjQAZGFya2dvbGRlbnJvZABkYXJrZ29sZGVucm9kMQBkYXJrZ29sZGVucm9kMgBkYXJrZ29sZGVucm9kMwBkYXJrZ29sZGVucm9kNABkYXJrZ3JlZW4AZGFya2toYWtpAGRhcmtvbGl2ZWdyZWVuAGRhcmtvbGl2ZWdyZWVuMQBkYXJrb2xpdmVncmVlbjIAZGFya29saXZlZ3JlZW4zAGRhcmtvbGl2ZWdyZWVuNABkYXJrb3JhbmdlAGRhcmtvcmFuZ2UxAGRhcmtvcmFuZ2UyAGRhcmtvcmFuZ2UzAGRhcmtvcmFuZ2U0AGRhcmtvcmNoaWQAZGFya29yY2hpZDEAZGFya29yY2hpZDIAZGFya29yY2hpZDMAZGFya29yY2hpZDQAZGFya3NhbG1vbgBkYXJrc2VhZ3JlZW4AZGFya3NlYWdyZWVuMQBkYXJrc2VhZ3JlZW4yAGRhcmtzZWFncmVlbjMAZGFya3NlYWdyZWVuNABkYXJrc2xhdGVibHVlAGRhcmtzbGF0ZWdyYXkAZGFya3NsYXRlZ3JheTEAZGFya3NsYXRlZ3JheTIAZGFya3NsYXRlZ3JheTMAZGFya3NsYXRlZ3JheTQAZGFya3NsYXRlZ3JleQBkYXJrdHVycXVvaXNlAGRhcmt2aW9sZXQAZGVlcHBpbmsAZGVlcHBpbmsxAGRlZXBwaW5rMgBkZWVwcGluazMAZGVlcHBpbms0AGRlZXBza3libHVlAGRlZXBza3libHVlMQBkZWVwc2t5Ymx1ZTIAZGVlcHNreWJsdWUzAGRlZXBza3libHVlNABkaW1ncmF5AGRpbWdyZXkAZG9kZ2VyYmx1ZQBkb2RnZXJibHVlMQBkb2RnZXJibHVlMgBkb2RnZXJibHVlMwBkb2RnZXJibHVlNABmaXJlYnJpY2sAZmlyZWJyaWNrMQBmaXJlYnJpY2syAGZpcmVicmljazMAZmlyZWJyaWNrNABmbG9yYWx3aGl0ZQBmb3Jlc3RncmVlbgBnYWluc2Jvcm8AZ2hvc3R3aGl0ZQBnb2xkAGdvbGQxAGdvbGQyAGdvbGQzAGdvbGQ0AGdvbGRlbnJvZABnb2xkZW5yb2QxAGdvbGRlbnJvZDIAZ29sZGVucm9kMwBnb2xkZW5yb2Q0AGdyYXkAZ3JheTAAZ3JheTEAZ3JheTEwAGdyYXkxMDAAZ3JheTExAGdyYXkxMgBncmF5MTMAZ3JheTE0AGdyYXkxNQBncmF5MTYAZ3JheTE3AGdyYXkxOABncmF5MTkAZ3JheTIAZ3JheTIwAGdyYXkyMQBncmF5MjIAZ3JheTIzAGdyYXkyNABncmF5MjUAZ3JheTI2AGdyYXkyNwBncmF5MjgAZ3JheTI5AGdyYXkzAGdyYXkzMABncmF5MzEAZ3JheTMyAGdyYXkzMwBncmF5MzQAZ3JheTM1AGdyYXkzNgBncmF5MzcAZ3JheTM4AGdyYXkzOQBncmF5NABncmF5NDAAZ3JheTQxAGdyYXk0MgBncmF5NDMAZ3JheTQ0AGdyYXk0NQBncmF5NDYAZ3JheTQ3AGdyYXk0OABncmF5NDkAZ3JheTUAZ3JheTUwAGdyYXk1MQBncmF5NTIAZ3JheTUzAGdyYXk1NABncmF5NTUAZ3JheTU2AGdyYXk1NwBncmF5NTgAZ3JheTU5AGdyYXk2AGdyYXk2MABncmF5NjEAZ3JheTYyAGdyYXk2MwBncmF5NjQAZ3JheTY1AGdyYXk2NgBncmF5NjcAZ3JheTY4AGdyYXk2OQBncmF5NwBncmF5NzAAZ3JheTcxAGdyYXk3MgBncmF5NzMAZ3JheTc0AGdyYXk3NQBncmF5NzYAZ3JheTc3AGdyYXk3OABncmF5NzkAZ3JheTgAZ3JheTgwAGdyYXk4MQBncmF5ODIAZ3JheTgzAGdyYXk4NABncmF5ODUAZ3JheTg2AGdyYXk4NwBncmF5ODgAZ3JheTg5AGdyYXk5AGdyYXk5MABncmF5OTEAZ3JheTkyAGdyYXk5MwBncmF5OTQAZ3JheTk1AGdyYXk5NgBncmF5OTcAZ3JheTk4AGdyYXk5OQBncmVlbgBncmVlbjEAZ3JlZW4yAGdyZWVuMwBncmVlbjQAZ3JlZW55ZWxsb3cAZ3JleQBncmV5MABncmV5MQBncmV5MTAAZ3JleTEwMABncmV5MTEAZ3JleTEyAGdyZXkxMwBncmV5MTQAZ3JleTE1AGdyZXkxNgBncmV5MTcAZ3JleTE4AGdyZXkxOQBncmV5MgBncmV5MjAAZ3JleTIxAGdyZXkyMgBncmV5MjMAZ3JleTI0AGdyZXkyNQBncmV5MjYAZ3JleTI3AGdyZXkyOABncmV5MjkAZ3JleTMAZ3JleTMwAGdyZXkzMQBncmV5MzIAZ3JleTMzAGdyZXkzNABncmV5MzUAZ3JleTM2AGdyZXkzNwBncmV5MzgAZ3JleTM5AGdyZXk0AGdyZXk0MABncmV5NDEAZ3JleTQyAGdyZXk0MwBncmV5NDQAZ3JleTQ1AGdyZXk0NgBncmV5NDcAZ3JleTQ4AGdyZXk0OQBncmV5NQBncmV5NTAAZ3JleTUxAGdyZXk1MgBncmV5NTMAZ3JleTU0AGdyZXk1NQBncmV5NTYAZ3JleTU3AGdyZXk1OABncmV5NTkAZ3JleTYAZ3JleTYwAGdyZXk2MQBncmV5NjIAZ3JleTYzAGdyZXk2NABncmV5NjUAZ3JleTY2AGdyZXk2NwBncmV5NjgAZ3JleTY5AGdyZXk3AGdyZXk3MABncmV5NzEAZ3JleTcyAGdyZXk3MwBncmV5NzQAZ3JleTc1AGdyZXk3NgBncmV5NzcAZ3JleTc4AGdyZXk3OQBncmV5OABncmV5ODAAZ3JleTgxAGdyZXk4MgBncmV5ODMAZ3JleTg0AGdyZXk4NQBncmV5ODYAZ3JleTg3AGdyZXk4OABncmV5ODkAZ3JleTkAZ3JleTkwAGdyZXk5MQBncmV5OTIAZ3JleTkzAGdyZXk5NABncmV5OTUAZ3JleTk2AGdyZXk5NwBncmV5OTgAZ3JleTk5AGhvbmV5ZGV3AGhvbmV5ZGV3MQBob25leWRldzIAaG9uZXlkZXczAGhvbmV5ZGV3NABob3RwaW5rAGhvdHBpbmsxAGhvdHBpbmsyAGhvdHBpbmszAGhvdHBpbms0AGluZGlhbnJlZABpbmRpYW5yZWQxAGluZGlhbnJlZDIAaW5kaWFucmVkMwBpbmRpYW5yZWQ0AGluZGlnbwBpbnZpcwBpdm9yeQBpdm9yeTEAaXZvcnkyAGl2b3J5MwBpdm9yeTQAa2hha2kAa2hha2kxAGtoYWtpMgBraGFraTMAa2hha2k0AGxhdmVuZGVyAGxhdmVuZGVyYmx1c2gAbGF2ZW5kZXJibHVzaDEAbGF2ZW5kZXJibHVzaDIAbGF2ZW5kZXJibHVzaDMAbGF2ZW5kZXJibHVzaDQAbGF3bmdyZWVuAGxlbW9uY2hpZmZvbgBsZW1vbmNoaWZmb24xAGxlbW9uY2hpZmZvbjIAbGVtb25jaGlmZm9uMwBsZW1vbmNoaWZmb240AGxpZ2h0Ymx1ZQBsaWdodGJsdWUxAGxpZ2h0Ymx1ZTIAbGlnaHRibHVlMwBsaWdodGJsdWU0AGxpZ2h0Y29yYWwAbGlnaHRjeWFuAGxpZ2h0Y3lhbjEAbGlnaHRjeWFuMgBsaWdodGN5YW4zAGxpZ2h0Y3lhbjQAbGlnaHRnb2xkZW5yb2QAbGlnaHRnb2xkZW5yb2QxAGxpZ2h0Z29sZGVucm9kMgBsaWdodGdvbGRlbnJvZDMAbGlnaHRnb2xkZW5yb2Q0AGxpZ2h0Z29sZGVucm9keWVsbG93AGxpZ2h0Z3JheQBsaWdodGdyZXkAbGlnaHRwaW5rAGxpZ2h0cGluazEAbGlnaHRwaW5rMgBsaWdodHBpbmszAGxpZ2h0cGluazQAbGlnaHRzYWxtb24AbGlnaHRzYWxtb24xAGxpZ2h0c2FsbW9uMgBsaWdodHNhbG1vbjMAbGlnaHRzYWxtb240AGxpZ2h0c2VhZ3JlZW4AbGlnaHRza3libHVlAGxpZ2h0c2t5Ymx1ZTEAbGlnaHRza3libHVlMgBsaWdodHNreWJsdWUzAGxpZ2h0c2t5Ymx1ZTQAbGlnaHRzbGF0ZWJsdWUAbGlnaHRzbGF0ZWdyYXkAbGlnaHRzbGF0ZWdyZXkAbGlnaHRzdGVlbGJsdWUAbGlnaHRzdGVlbGJsdWUxAGxpZ2h0c3RlZWxibHVlMgBsaWdodHN0ZWVsYmx1ZTMAbGlnaHRzdGVlbGJsdWU0AGxpZ2h0eWVsbG93AGxpZ2h0eWVsbG93MQBsaWdodHllbGxvdzIAbGlnaHR5ZWxsb3czAGxpZ2h0eWVsbG93NABsaW1lZ3JlZW4AbGluZW4AbWFnZW50YQBtYWdlbnRhMQBtYWdlbnRhMgBtYWdlbnRhMwBtYWdlbnRhNABtYXJvb24AbWFyb29uMQBtYXJvb24yAG1hcm9vbjMAbWFyb29uNABtZWRpdW1hcXVhbWFyaW5lAG1lZGl1bWJsdWUAbWVkaXVtb3JjaGlkAG1lZGl1bW9yY2hpZDEAbWVkaXVtb3JjaGlkMgBtZWRpdW1vcmNoaWQzAG1lZGl1bW9yY2hpZDQAbWVkaXVtcHVycGxlAG1lZGl1bXB1cnBsZTEAbWVkaXVtcHVycGxlMgBtZWRpdW1wdXJwbGUzAG1lZGl1bXB1cnBsZTQAbWVkaXVtc2VhZ3JlZW4AbWVkaXVtc2xhdGVibHVlAG1lZGl1bXNwcmluZ2dyZWVuAG1lZGl1bXR1cnF1b2lzZQBtZWRpdW12aW9sZXRyZWQAbWlkbmlnaHRibHVlAG1pbnRjcmVhbQBtaXN0eXJvc2UAbWlzdHlyb3NlMQBtaXN0eXJvc2UyAG1pc3R5cm9zZTMAbWlzdHlyb3NlNABtb2NjYXNpbgBuYXZham93aGl0ZQBuYXZham93aGl0ZTEAbmF2YWpvd2hpdGUyAG5hdmFqb3doaXRlMwBuYXZham93aGl0ZTQAbmF2eQBuYXZ5Ymx1ZQBub25lAG9sZGxhY2UAb2xpdmVkcmFiAG9saXZlZHJhYjEAb2xpdmVkcmFiMgBvbGl2ZWRyYWIzAG9saXZlZHJhYjQAb3JhbmdlAG9yYW5nZTEAb3JhbmdlMgBvcmFuZ2UzAG9yYW5nZTQAb3JhbmdlcmVkAG9yYW5nZXJlZDEAb3JhbmdlcmVkMgBvcmFuZ2VyZWQzAG9yYW5nZXJlZDQAb3JjaGlkAG9yY2hpZDEAb3JjaGlkMgBvcmNoaWQzAG9yY2hpZDQAcGFsZWdvbGRlbnJvZABwYWxlZ3JlZW4AcGFsZWdyZWVuMQBwYWxlZ3JlZW4yAHBhbGVncmVlbjMAcGFsZWdyZWVuNABwYWxldHVycXVvaXNlAHBhbGV0dXJxdW9pc2UxAHBhbGV0dXJxdW9pc2UyAHBhbGV0dXJxdW9pc2UzAHBhbGV0dXJxdW9pc2U0AHBhbGV2aW9sZXRyZWQAcGFsZXZpb2xldHJlZDEAcGFsZXZpb2xldHJlZDIAcGFsZXZpb2xldHJlZDMAcGFsZXZpb2xldHJlZDQAcGFwYXlhd2hpcABwZWFjaHB1ZmYAcGVhY2hwdWZmMQBwZWFjaHB1ZmYyAHBlYWNocHVmZjMAcGVhY2hwdWZmNABwZXJ1AHBpbmsAcGluazEAcGluazIAcGluazMAcGluazQAcGx1bQBwbHVtMQBwbHVtMgBwbHVtMwBwbHVtNABwb3dkZXJibHVlAHB1cnBsZQBwdXJwbGUxAHB1cnBsZTIAcHVycGxlMwBwdXJwbGU0AHJlZAByZWQxAHJlZDIAcmVkMwByZWQ0AHJvc3licm93bgByb3N5YnJvd24xAHJvc3licm93bjIAcm9zeWJyb3duMwByb3N5YnJvd240AHJveWFsYmx1ZQByb3lhbGJsdWUxAHJveWFsYmx1ZTIAcm95YWxibHVlMwByb3lhbGJsdWU0AHNhZGRsZWJyb3duAHNhbG1vbgBzYWxtb24xAHNhbG1vbjIAc2FsbW9uMwBzYWxtb240AHNhbmR5YnJvd24Ac2VhZ3JlZW4Ac2VhZ3JlZW4xAHNlYWdyZWVuMgBzZWFncmVlbjMAc2VhZ3JlZW40AHNlYXNoZWxsAHNlYXNoZWxsMQBzZWFzaGVsbDIAc2Vhc2hlbGwzAHNlYXNoZWxsNABzaWVubmEAc2llbm5hMQBzaWVubmEyAHNpZW5uYTMAc2llbm5hNABza3libHVlAHNreWJsdWUxAHNreWJsdWUyAHNreWJsdWUzAHNreWJsdWU0AHNsYXRlYmx1ZQBzbGF0ZWJsdWUxAHNsYXRlYmx1ZTIAc2xhdGVibHVlMwBzbGF0ZWJsdWU0AHNsYXRlZ3JheQBzbGF0ZWdyYXkxAHNsYXRlZ3JheTIAc2xhdGVncmF5MwBzbGF0ZWdyYXk0AHNsYXRlZ3JleQBzbm93AHNub3cxAHNub3cyAHNub3czAHNub3c0AHNwcmluZ2dyZWVuAHNwcmluZ2dyZWVuMQBzcHJpbmdncmVlbjIAc3ByaW5nZ3JlZW4zAHNwcmluZ2dyZWVuNABzdGVlbGJsdWUAc3RlZWxibHVlMQBzdGVlbGJsdWUyAHN0ZWVsYmx1ZTMAc3RlZWxibHVlNAB0YW4AdGFuMQB0YW4yAHRhbjMAdGFuNAB0aGlzdGxlAHRoaXN0bGUxAHRoaXN0bGUyAHRoaXN0bGUzAHRoaXN0bGU0AHRvbWF0bwB0b21hdG8xAHRvbWF0bzIAdG9tYXRvMwB0b21hdG80AHR1cnF1b2lzZQB0dXJxdW9pc2UxAHR1cnF1b2lzZTIAdHVycXVvaXNlMwB0dXJxdW9pc2U0AHZpb2xldAB2aW9sZXRyZWQAdmlvbGV0cmVkMQB2aW9sZXRyZWQyAHZpb2xldHJlZDMAdmlvbGV0cmVkNAB3aGVhdAB3aGVhdDEAd2hlYXQyAHdoZWF0MwB3aGVhdDQAd2hpdGUAd2hpdGVzbW9rZQB5ZWxsb3cAeWVsbG93MQB5ZWxsb3cyAHllbGxvdzMAeWVsbG93NAB5ZWxsb3dncmVlbgBsYWNrAGhpdGUAaWdodGdyZXkAWDExLwAvJXMvJXMAaW1hZ2VzY2FsZQBmYWxzZQBibGFjawBkb3R0ZWQAZGFzaGVkAGNwLT5zcmMAaHRtbHRhYmxlLmMAZW1pdF9odG1sX2ltZwBjcC0+c3JjWzBdAHRyYW5zcGFyZW50AF8lZAAlZAAyADMANAA1ADYANwA4ADkAMTAAMTEAMTIAMTMAMTQAMTUAMTYAMTcAMTgAMTkAMjAAQWdub2RlaW5mb190AEFnZWRnZWluZm9fdAByb3dnAGNvbGcAQWdyYXBoaW5mb190AGRlbHggPj0gMABwb3NfaHRtbF90YmwAZGVseSA+PSAwAHRhYmxlIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCB0YWJsZSBzaXplIHdpdGggdW5zcGVjaWZpZWQgd2lkdGggb3IgaGVpZ2h0CgBjZWxsIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCBjZWxsIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAE5vIG9yIGltcHJvcGVyIGltYWdlIGZpbGU9IiVzIgoAcGVuY29sb3IALT4AZlBRLmMAUFFjaGVjawBIZWFwIG92ZXJmbG93CgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAc2hvd3BhZ2UKAGZhaWxlZCBhdCBub2RlICVkWzBdCgBucC0+Y2VsbHNbMF0AbWF6ZS5jAGNoa1NncmFwaABmYWlsZWQgYXQgbm9kZSAlZFsxXQoAbnAtPmNlbGxzWzFdAGRpdGVtcwBmaW5kU1ZlcnQAJSUlJVBhZ2U6IDEgMQolJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJWYgJWYgdHJhbnNsYXRlCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAJWYgJWYgJWYgJWYgbm9kZQoAMCAwIDAgc2V0cmdiY29sb3IKACVmICVmICVmICVmIGNlbGwKADEgMCAwIHNldHJnYmNvbG9yCgB1bmV4cGVjdGVkIGNhc2UgaW4gbG9jYXRlX2VuZHBvaW50CgAwAHRyYXBlem9pZC5jAGxvY2F0ZV9lbmRwb2ludABhZGRfc2VnbWVudDogZXJyb3IKAG5ld25vZGU6IFF1ZXJ5LXRhYmxlIG92ZXJmbG93CgBuZXdub2RlAG5ld3RyYXA6IFRyYXBlem9pZC10YWJsZSBvdmVyZmxvdyAlZAoAbmV3dHJhcABpbmRleC5jAFJUcmVlU2VhcmNoAG4tPmxldmVsID49IDAAUlRyZWVJbnNlcnQAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbAByLT5ib3VuZGFyeVtpXSA8PSByLT5ib3VuZGFyeVtOVU1ESU1TICsgaV0AciAmJiBuICYmIG5ldwBSVHJlZUluc2VydDIAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSBuLT5sZXZlbABGQUxTRQBub2RlLmMATm9kZUNvdmVyAHIgJiYgbgBQaWNrQnJhbmNoAEFkZEJyYW5jaABpIDwgTk9ERUNBUkQAbmV3AG4gJiYgaSA+PSAwICYmIGkgPCBOT0RFQ0FSRABEaXNjb25CcmFuY2gAcgByZWN0YW5nbGUuYwBSZWN0QXJlYQByICYmIHJyAENvbWJpbmVSZWN0AHIgJiYgcwBPdmVybGFwAG4Ac3BsaXQucS5jAFNwbGl0Tm9kZQBiAG4tPmNvdW50ICsgKCpubiktPmNvdW50ID09IE5PREVDQVJEICsgMQBMb2FkTm9kZXMAcQBwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMCB8fCBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdICsgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID09IE5PREVDQVJEICsgMQBNZXRob2RaZXJvAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSBydHAtPk1pbkZpbGwgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IHJ0cC0+TWluRmlsbAAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAENsYXNzaWZ5AEdldEJyYW5jaGVzAG4tPmJyYW5jaFtpXS5jaGlsZAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AAAAAAAAAAAAKSstMDIABC8AJCMAEhQWGhweIBgABQcvLy8ALy8AAAkIKAAAASICBgAAAAAACAAAAAAAAAAAAAAAAAAlAyYTCikVCyoXDi0ZERsMKx0NLB8PIRAAMwAwAC9DADEALwA1LidCMkEAOjgAPDRFADYAQAAAPwBENzs5PQACAwMBAQIBAQEDAwMDAwMDAwEBAQEBAQEBAQEBAQEBAQECAQECAAYBAwMDAwMBAAECAwAEAQIDAAQABAAEAAMCAQIBAgFTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgAAKSoqKissLC0tLS0tLS0tLS0uLzAxMjM0NTY3ODk6Ozw9Pj4/P0FAQkJCQkJCQ0NERERGRUdHR0lISkhLSExITU1OTk9P/wMPEBEjOiQ9JUAVQyZFJ0gYSxlNGigcTh0eUFFSWVpsa25jZFdpbWVtb3J5IGV4aGF1c3RlZAAlcyBpbiBsaW5lICVkIAoALi4uICVzIC4uLgoAVEFCTEUAVFIAVEgAVEQASFRNTABGT05UAEIAVQBPAEkAU1VQAFNVQgBTAEJSAEhSAFZSAElNRwBVbmtub3duIEhUTUwgZWxlbWVudCA8JXM+IG9uIGxpbmUgJWQgCgA8SU1HPgBJbGxlZ2FsIGF0dHJpYnV0ZSAlcyBpbiAlcyAtIGlnbm9yZWQKAHNjYWxlAHNyYwA8QlI+AGFsaWduAElHSFQARUZUAEVOVEVSAElsbGVnYWwgdmFsdWUgJXMgZm9yIEFMSUdOIC0gaWdub3JlZAoAPEZPTlQ+AGNvbG9yAGZhY2UAcG9pbnQtc2l6ZQBQT0lOVC1TSVpFAEltcHJvcGVyICVzIHZhbHVlICVzIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA+ICVkIC0gdG9vIGxhcmdlIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA8ICVkIC0gdG9vIHNtYWxsIC0gaWdub3JlZAA8VEQ+AGJhbGlnbgBiZ2NvbG9yAGJvcmRlcgBjZWxscGFkZGluZwBjZWxsc3BhY2luZwBjb2xzcGFuAGZpeGVkc2l6ZQBncmFkaWVudGFuZ2xlAGhlaWdodABocmVmAGlkAHBvcnQAcm93c3BhbgBzaWRlcwBzdHlsZQB0YXJnZXQAdGl0bGUAdG9vbHRpcAB2YWxpZ24Ad2lkdGgAV0lEVEgAT1RUT00AT1AASURETEUASWxsZWdhbCB2YWx1ZSAlcyBmb3IgVkFMSUdOIC0gaWdub3JlZAoAICwAT1VOREVEAEFESUFMAElsbGVnYWwgdmFsdWUgJXMgZm9yIFNUWUxFIC0gaWdub3JlZAoAU09MSUQASU5WSVNJQkxFAElOVklTAERPVFRFRABEQVNIRUQAVW5yZWNvZ25pemVkIGNoYXJhY3RlciAnJWMnICglZCkgaW4gc2lkZXMgYXR0cmlidXRlCgBST1dTUEFOAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBIRUlHSFQAR1JBRElFTlRBTkdMRQBSVUUAQUxTRQBJbGxlZ2FsIHZhbHVlICVzIGZvciBGSVhFRFNJWkUgLSBpZ25vcmVkCgBDT0xTUEFOAENPTFNQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDRUxMU1BBQ0lORwBDRUxMUEFERElORwBCT1JERVIASWxsZWdhbCB2YWx1ZSAlcyBmb3IgQkFMSUdOIGluIFREIC0gaWdub3JlZAoARVhUAElsbGVnYWwgdmFsdWUgJXMgZm9yIEFMSUdOIGluIFREIC0gaWdub3JlZAoAPFRBQkxFPgBjZWxsYm9yZGVyAGNvbHVtbnMAcm93cwBVbmtub3duIHZhbHVlICVzIGZvciBST1dTIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgQ09MVU1OUyAtIGlnbm9yZWQKAENFTExTQk9SREVSADxIVE1MPgA8L0hUTUw+AC0tAExhYmVsIGNsb3NlZCBiZWZvcmUgZW5kIG9mIEhUTUwgZWxlbWVudAoAVW5jbG9zZWQgY29tbWVudAoAaiA9PSAwAGN2dC5jAFBvYnNwYXRoAHJvdXRlLmMAbGlicGF0aC8lczolZDogJXMKAHNob3J0ZXN0LmMAc291cmNlIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAZGVzdGluYXRpb24gcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBjYW5ub3QgZmluZCB0cmlhbmdsZSBwYXRoAGNhbm5vdCBtYWxsb2Mgb3BzAGNhbm5vdCByZWFsbG9jIG9wcwB0cmlhbmd1bGF0aW9uIGZhaWxlZABjYW5ub3QgbWFsbG9jIHRyaXMAY2Fubm90IHJlYWxsb2MgdHJpcwBjYW5ub3QgbWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgZHEucG5scwBjYW5ub3QgbWFsbG9jIHBubHMAY2Fubm90IG1hbGxvYyBwbmxwcwBjYW5ub3QgcmVhbGxvYyBwbmxzAGNhbm5vdCByZWFsbG9jIHBubHBzAENEQVRBAElEAElEUkVGAElEUkVGUwBFTlRJVFkARU5USVRJRVMATk1UT0tFTgBOTVRPS0VOUwBOT1RBVElPTigAKAB8AGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZQBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLwB4bWw9aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlAC9kZXYvdXJhbmRvbQBmYWxsYmFjayg0KQBnZXR0aW1lb2ZkYXlfcmVzID09IDAAeG1scGFyc2UuYwBnYXRoZXJfdGltZV9lbnRyb3B5AEVYUEFUX0VOVFJPUFlfREVCVUcAMQBFbnRyb3B5OiAlcyAtLT4gMHglMCpseCAoJWx1IGJ5dGVzKQoAaW52YWxpZCBhcmd1bWVudABwcmVmaXggbXVzdCBub3QgYmUgYm91bmQgdG8gb25lIG9mIHRoZSByZXNlcnZlZCBuYW1lc3BhY2UgbmFtZXMAcmVzZXJ2ZWQgcHJlZml4ICh4bWxucykgbXVzdCBub3QgYmUgZGVjbGFyZWQgb3IgdW5kZWNsYXJlZAByZXNlcnZlZCBwcmVmaXggKHhtbCkgbXVzdCBub3QgYmUgdW5kZWNsYXJlZCBvciBib3VuZCB0byBhbm90aGVyIG5hbWVzcGFjZSBuYW1lAGNhbm5vdCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkAcGFyc2luZyBmaW5pc2hlZABwYXJzaW5nIGFib3J0ZWQAcGFyc2VyIG5vdCBzdXNwZW5kZWQAcGFyc2VyIHN1c3BlbmRlZABpbGxlZ2FsIGNoYXJhY3RlcihzKSBpbiBwdWJsaWMgaWQAdGV4dCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZABpbmNvbXBsZXRlIG1hcmt1cCBpbiBwYXJhbWV0ZXIgZW50aXR5AG11c3Qgbm90IHVuZGVjbGFyZSBwcmVmaXgAdW5ib3VuZCBwcmVmaXgAY2Fubm90IGNoYW5nZSBzZXR0aW5nIG9uY2UgcGFyc2luZyBoYXMgYmVndW4AcmVxdWVzdGVkIGZlYXR1cmUgcmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGluIEV4cGF0AGVudGl0eSBkZWNsYXJlZCBpbiBwYXJhbWV0ZXIgZW50aXR5AHVuZXhwZWN0ZWQgcGFyc2VyIHN0YXRlIC0gcGxlYXNlIHNlbmQgYSBidWcgcmVwb3J0AGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lAGVycm9yIGluIHByb2Nlc3NpbmcgZXh0ZXJuYWwgZW50aXR5IHJlZmVyZW5jZQB1bmNsb3NlZCBDREFUQSBzZWN0aW9uAGVuY29kaW5nIHNwZWNpZmllZCBpbiBYTUwgZGVjbGFyYXRpb24gaXMgaW5jb3JyZWN0AHVua25vd24gZW5jb2RpbmcAWE1MIG9yIHRleHQgZGVjbGFyYXRpb24gbm90IGF0IHN0YXJ0IG9mIGVudGl0eQByZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJpYnV0ZQByZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eQByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAGFzeW5jaHJvbm91cyBlbnRpdHkAcmVjdXJzaXZlIGVudGl0eSByZWZlcmVuY2UAdW5kZWZpbmVkIGVudGl0eQBpbGxlZ2FsIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlAGp1bmsgYWZ0ZXIgZG9jdW1lbnQgZWxlbWVudABkdXBsaWNhdGUgYXR0cmlidXRlAG1pc21hdGNoZWQgdGFnAHBhcnRpYWwgY2hhcmFjdGVyAHVuY2xvc2VkIHRva2VuAG5vdCB3ZWxsLWZvcm1lZCAoaW52YWxpZCB0b2tlbikAbm8gZWxlbWVudCBmb3VuZABzeW50YXggZXJyb3IAb3V0IG9mIG1lbW9yeQACAwQFBgcIAAAJCgsMDQ4PEBEAAAAAAAAAAAAAAAASEwAUAAAAAAAAAAAAAAAAAAAVFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEXAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQMaGxwdHgAAHyAhIiMkJRARAAAAAAAAAAAAAAAAEhMmFAAAAAAAAAAAAAAAAAAAJxYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBFwAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENEQVRBW1VTLUFTQ0lJAFVURi0xNgBVVEYtMTZCRQBVVEYtMTZMRQB2ZXJzaW9uAGVuY29kaW5nAHN0YW5kYWxvbmUARE9DVFlQRQBTWVNURU0AUFVCTElDAEVOVElUWQBBVFRMSVNUAEVMRU1FTlQATk9UQVRJT04ASU5DTFVERQBJR05PUkUARU1QVFkAQU5ZAFBDREFUQQBJTVBMSUVEAFJFUVVJUkVEAEZJWEVEAENEQVRBAElEAElEUkVGAElEUkVGUwBFTlRJVElFUwBOTVRPS0VOAE5NVE9LRU5TAE5EQVRBAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAEhATFBUWFxgZGhscHR4fICEQECIjECQlJicoKSorECwtLhEvMBERMRERETIzNDU2Nzg5ERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA6EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA7EDw9Pj9AQRAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBCEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBDEBBEEEVGRxBIEEkQEBAQSktMTRAQThBPUBAQEBBREBAQEBAQEBAQEBAQEFIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFMQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBUVVZXEBBYWRAQEBAQEBAQEBAQEBAQEBAQEBAQEBBaEFtcXV5fYGFiEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////AAAAAP7/APwBAAD4AQAAeAAAAAD/+9/7AACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8APz/4K//////////////3///////IECwAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAPwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAIb+////AEBJAAAAAAAYAN//AMgAAAAAAAAAAQA8AAAAAAAAAAAAAAAAEOABHgBg/78AAAAAAAD/BwAAAAAAAAAAAAAAAAAAAAAAAAD4zwMAAAADACD/fwAAAE4AAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAQACAeADAAAQAAAAAAAAAAEAAgAAAAAPwPAAAAAAAAABAAIAAAAAAAAAAAAAAAAAAQACAAAAAAAwAAAAAAAAAAEAAgAAAAAP0AAAAAAAAAAAAAIAAAAAD/BwAAAAAAAAAAACAAAAAAAP8AAAAAAAAAEAAgAAAAAAAAAAAAAAAAAAAAIAAAAAA/AgAAAAAAAAAAAAQAAAAAEAAAAAAAAIAAgMDfAAwAAAAAAAAAAAAAAAAAHwAAAAAAAP7///8A/P//AAAAAAAAAAD8AAAAAAAAwP/f/wcAAAAAAAAAAAAAgAYA/AAAGD4AAIC/AMwAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAGD///8fAAD/AwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEAABgAAAAAAAAAAAA4AAAAABAAAABwAAAAAAAAAAAAAAAAAAAAMAAA/n8vAAD/A/9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4xAAAAAAAAAAAAAAAAAAAAAAAAxP////8AAADAAAAAAAAAAAABAOCfAAAAAH8/AAAAAAAAAAAAAAAAAAAAABAAEAAA/P///x8AAAAAAAwAAAAAAABAAAzwAAAAAAAAwPgAAAAAAAAAwAAAAAAAAAAA/wD///8hEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////fwAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAPgAOAA4ABggPj////8//////9/H/zxf/9/AAD///8DAAD/////AQB7A9DBr0IADB+8//8AAAAAAAL//////////////////////////////////////////////////////////w8A/////38AAAD/BwAA/////////////z8AAAAAAAD8///+/////////////////////////////////////////////////////x//AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCHA/4AAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAP//////f/8PAAAAAAAAAAD////7/////////////w8A//////////////////////////////////8/AAAA/w8e////AfzB4AAAAAAAAAAAAAAAHgEAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAP////8PAAAA////f////////////////////////////////////38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAP///////38AAAAAAADAAOAAAAAAAAAAAAAAAIAPcAAAAAAAAAAAAAAAAAAA/wD//38AAwAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAEQIAAAAD/8DAAAAAAAA8AAAAAAAAAAAABDAAAD//wMHAAAAAAD4AAAAAAiAAAAAAAAAAAAAAAgA/z8AwAAAAAAAAAAAAAAAAAAAAPAAAIALAAAAAAAAAIACAADAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAD8/wMAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD///8DfwD/////9/9/DwAAAAAAAAAAAAAAAAAAAAAAgP7/APwBAAD4AQAA+D8AAAAAAAAAAAAAAAAAAAB/fwAwh///////j/8AAAAAAADg//8H/w8AAAAAAAD//////z8AAAAADwAAAAAAAAAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAAAAAAAAAACA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAADAjwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh/8A/wEAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA//P8/AAAAAwAAAAAAAP4DAAAAAAAAAAAAAAAAABgADwAAAAAAAAAAAAAAAAAAAOEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAcAAAAAAAAAAAAAAAAA////////////////////////////////////////PwD/////f/7///////////////////////////8/AAAAAP//////////PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////38A//8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAIAAAACAAAIAAAACAAAIAAAACAAAAAAgAAAAIAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwD//////w////////////////8PAP9//n/+//7/AAAAAP8H////f/////////8P//////8HAAAAAAAAAADA////BwD//////wf/AQMAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AQC///////////8f//8PAP/////fBwAA//8BAP////////9//f////////////////////////////8e/////////z8PAP///wAAAAAAAAAAAAAAAAAAAAAAAPj//////////+H/AAAAAAAA//////////8/AAAAAAAAAP//////////////////DwAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQASERMUFRYXGBkaGxwdHh8gIREiIyQRJSYnKCkqKywRLS4vEBAwEBAQEBAQEDEyMxA0NRAQERERERERERERERERERERERERERERERERETYRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE3ERERETgROTo7PD0+ERERERERERERERERERERERERERERERERERERERERERERERERERERERERET8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARQEERQkNERUZHSEkQEBBKS0xNThAQEE9QEBAQEFEQEBAQEBAQEBARERFSUxAQEBAQEBAQEBAQEREREVQQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAREVUQEBAQVhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBXEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBYWVpbEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFwQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAAAAAAAP7//wf+//8HAAAAAAAEIAT//3////9//////////////////////////////////8P/AwAfUAAAAAAAAAAAAAAgAAAAAADfPEDX///7////////////v///////////////////////A/z/////////////////////////AP7///9/Av7/////AAAAAAD/v7YA////BwcAAAD/B//////////+/8P////////////////vH/7h/58AAP///////wDg////////////////AwD//////wcwBP////z/HwAA////AQAAAAAAAAAA/R8AAAAAAADwA/9//////////+//3+H/z//+/u6f+f///cXjn1mAsM//AwDuh/n///1tw4cZAl7A/z8A7r/7///97eO/GwEAz/8AAO6f+f///e3jnxnAsM//AgDsxz3WGMf/w8cdgQDA/wAA7t/9///97+PfHWADz/8AAOzf/f///e/j3x1gQM//BgDs3/3/////599dgADP/wD87P9//P//+y9/gF//AAAMAP7/////f/8HPyD/AwAAAACWJfD+ruz/O18g//MAAAAAAQAAAP8DAAD//v///x/+/wP///7///8fAAAAAAAAAAD///////9/+f8D///nwf//f0D/M/////+/IP//////9////////////z1/Pf//////Pf////89fz3/f/////////89//////////+HAAAAAP//AAD/////////////HwD+//////////////////////////////////////////////////////////+f///+//8H////////////xwEA/98PAP//DwD//w8A/98NAP///////8///wGAEP8DAAAAAP8D//////////////8A//////8H//////////8/AP///x//D/8BwP////8/HwD//////w////8D/wMAAAAA////D/////////9//v8fAP8D/wOAAAAAAAAAAAAAAAD////////v/+8P/wMAAAAA///////z////////v/8DAP///////z8A/+P//////z8AAAAAAAAAAAAAAAAA3m8A////////////////////////////////AAAAAAAAAAD//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAAAAAAAAAAAAAAAAAoAAAP8fAAAAAAAAAAAAAAAAhPwvPlC9//PgQwAA//////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwP///////wMAAP//////f///////f/////////////////////8feAwA/////78g/////////4AAAP//fwB/f39/f39/f/////8AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAD+Az4f/v///////////3/g/v/////////////34P////8//v////////////9/AAD///8HAAAAAAAA////////////////////////////////PwAAAAAAAAAAAP////////////////////////////////8fAAAAAAAA//////////////////////8fAAAAAAAAAAD//////z//H////w8AAP//////f/CP////gP////////////8AAAAAgP/8////////////////eQ8A/wcAAAAAAAAAAAD/u/f///8AAAD///////8PAP//////////DwD/AwAA/Aj//////wf/////BwD///8f////////9/8AgP8DAAAAAP///////38A/z//A///fwT/////////fwUAADj//zwAfn5+AH9/AAAAAAAAAAAAAAAAAAAAAAAA//////8H/wP//////////////////////////w8A//9/+P//////D/////////////////8//////////////////wMAAAAAfwD44P/9f1/b/////////////////wMAAAD4////////////////PwAA///////////8////////AAAAAAD/DwAAAAAAAAAAAAAAAAAA3/////////////////////8fAAD/A/7//wf+//8HwP////////////9//Pz8HAAAAAD/7///f///t/8//z8AAAAA////////////////////BwAAAAAAAAAA////////HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///x////////8BAAAAAAD///9/AAD///8HAAAAAAAA////P/////8P/z4AAAAAAP////////////////////////8//wMAAAAAAAAAAAAAP/3/////v5H//z8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//z8A////AwAAAAAAAAAA/////////8AAAAAAAAAAAG/w7/7//w8AAAAAAP///x8AAAAAAAAAAAAAAAAAAAAA////////PwD//z8A//8HAAAAAAAAAAAAAAAAAAAAAAD///////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////PwAAAMD/AAD8////////AQAA////Af8D////////x/8AAAAAAAAAAP//////////HgD/AwAAAAAAAAAAAAAAAAAAAAAAAAAA////////PwD/AwAAAAAAAP////////////////9/AAAAAAAAAAAAAAAAAAAAAAAA////////////////BwAAAAAAAAAAAAAAAAAAAAAAAAD//////38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8fAP//////fwAA+P8AAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////f///////////fZN7/6+//////////v+ff3////3tf/P3//////////////////////////////////////////////////////z/////9///3////9///3////9///3////9//////f////3///fP////////7////5b+9wqE6paqlvf3Xv/7/w/u+/8PAAAAAAAAAABMQ19BTEwATENfQ1RZUEUAAAAATENfTlVNRVJJQwAATENfVElNRQAAAAAATENfQ09MTEFURQAATENfTU9ORVRBUlkATENfTUVTU0FHRVMATEFORwBDLlVURi04AFBPU0lYAE1VU0xfTE9DUEFUSAARAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA0AAAAEDQAAAAAJDgAAAAAADgAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABISEgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAACgAAAAAJCwAAAAAACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAC0rICAgMFgweAAobnVsbCkALTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYATkFOADAxMjM0NTY3ODlBQkNERUYuAGFsbnVtAGFscGhhAGJsYW5rAGNudHJsAGRpZ2l0AGdyYXBoAGxvd2VyAHByaW50AHB1bmN0AHNwYWNlAHVwcGVyAHhkaWdpdABDLlVURi04AAAAAAAAAAAAQwAvcHJvYy9zZWxmL2ZkLwByd2EAaW5maW5pdHkAbmFuAAkACgANAAwABwAbAFtbOmFsbnVtOl1fXQBbXls6YWxudW06XV9dAFtbOnNwYWNlOl1dAFteWzpzcGFjZTpdXQBbWzpkaWdpdDpdXQBbXls6ZGlnaXQ6XV0AL3RtcC90bXBmaWxlX1hYWFhYWAB3Kw==";var Ve=S;function Ne(e,A,r,i){zr("Assertion failed: "+Z(e)+", at: "+[A?Z(A):"unknown filename",r,i?Z(i):"unknown function"])}function Re(){zr()}function xe(){return s||"undefined"!=typeof dateNow||(f||l)&&self.performance&&self.performance.now}S+=16;var Je={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function He(e){return A.___errno_location&&(H[A.___errno_location()>>2]=e),e}function Pe(e,A){var r;if(0===e)r=Date.now();else{if(1!==e||!xe())return He(Je.EINVAL),-1;r=Re()}return H[A>>2]=r/1e3|0,H[A+4>>2]=r%1e3*1e3*1e3|0,0}function Xe(){return Pe.apply(null,arguments)}function Se(){}function je(e,A){return He(Je.EPERM),-1}var Ue={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"},Te={splitPath:function(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:function(e,A){for(var r=0,i=e.length-1;i>=0;i--){var a=e[i];"."===a?e.splice(i,1):".."===a?(e.splice(i,1),r++):r&&(e.splice(i,1),r--)}if(A)for(;r;r--)e.unshift("..");return e},normalize:function(e){var A="/"===e.charAt(0),r="/"===e.substr(-1);return(e=Te.normalizeArray(e.split("/").filter((function(e){return!!e})),!A).join("/"))||A||(e="."),e&&r&&(e+="/"),(A?"/":"")+e},dirname:function(e){var A=Te.splitPath(e),r=A[0],i=A[1];return r||i?(i&&(i=i.substr(0,i.length-1)),r+i):"."},basename:function(e){if("/"===e)return"/";var A=e.lastIndexOf("/");return-1===A?e:e.substr(A+1)},extname:function(e){return Te.splitPath(e)[3]},join:function(){var e=Array.prototype.slice.call(arguments,0);return Te.normalize(e.join("/"))},join2:function(e,A){return Te.normalize(e+"/"+A)},resolve:function(){for(var e="",A=!1,r=arguments.length-1;r>=-1&&!A;r--){var i=r>=0?arguments[r]:eA.cwd();if("string"!=typeof i)throw new TypeError("Arguments to path.resolve must be strings");if(!i)return"";e=i+"/"+e,A="/"===i.charAt(0)}return(A?"/":"")+(e=Te.normalizeArray(e.split("/").filter((function(e){return!!e})),!A).join("/"))||"."},relative:function(e,A){function r(e){for(var A=0;A=0&&""===e[r];r--);return A>r?[]:e.slice(A,r-A+1)}e=Te.resolve(e).substr(1),A=Te.resolve(A).substr(1);for(var i=r(e.split("/")),a=r(A.split("/")),t=Math.min(i.length,a.length),n=t,f=0;f0?r.slice(0,i).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(A=window.prompt("Input: "))&&(A+="\n"):"function"==typeof readline&&null!==(A=readline())&&(A+="\n");if(!A)return null;e.input=PA(A,!0)}return e.input.shift()},put_char:function(e,r){null===r||10===r?(A.print(L(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},flush:function(e){e.output&&e.output.length>0&&(A.print(L(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,r){null===r||10===r?(A.printErr(L(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},flush:function(e){e.output&&e.output.length>0&&(A.printErr(L(e.output,0)),e.output=[])}}},_e={ops_table:null,mount:function(e){return _e.createNode(null,"/",16895,0)},createNode:function(e,A,r,i){if(eA.isBlkdev(r)||eA.isFIFO(r))throw new eA.ErrnoError(Je.EPERM);_e.ops_table||(_e.ops_table={dir:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr,lookup:_e.node_ops.lookup,mknod:_e.node_ops.mknod,rename:_e.node_ops.rename,unlink:_e.node_ops.unlink,rmdir:_e.node_ops.rmdir,readdir:_e.node_ops.readdir,symlink:_e.node_ops.symlink},stream:{llseek:_e.stream_ops.llseek}},file:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr},stream:{llseek:_e.stream_ops.llseek,read:_e.stream_ops.read,write:_e.stream_ops.write,allocate:_e.stream_ops.allocate,mmap:_e.stream_ops.mmap,msync:_e.stream_ops.msync}},link:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr,readlink:_e.node_ops.readlink},stream:{}},chrdev:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr},stream:eA.chrdev_stream_ops}});var a=eA.createNode(e,A,r,i);return eA.isDir(a.mode)?(a.node_ops=_e.ops_table.dir.node,a.stream_ops=_e.ops_table.dir.stream,a.contents={}):eA.isFile(a.mode)?(a.node_ops=_e.ops_table.file.node,a.stream_ops=_e.ops_table.file.stream,a.usedBytes=0,a.contents=null):eA.isLink(a.mode)?(a.node_ops=_e.ops_table.link.node,a.stream_ops=_e.ops_table.link.stream):eA.isChrdev(a.mode)&&(a.node_ops=_e.ops_table.chrdev.node,a.stream_ops=_e.ops_table.chrdev.stream),a.timestamp=Date.now(),e&&(e.contents[A]=a),a},getFileDataAsRegularArray:function(e){if(e.contents&&e.contents.subarray){for(var A=[],r=0;re.contents.length&&(e.contents=_e.getFileDataAsRegularArray(e),e.usedBytes=e.contents.length),!e.contents||e.contents.subarray){var r=e.contents?e.contents.length:0;if(r>=A)return;A=Math.max(A,r*(r<1048576?2:1.125)|0),0!=r&&(A=Math.max(A,256));var i=e.contents;return e.contents=new Uint8Array(A),void(e.usedBytes>0&&e.contents.set(i.subarray(0,e.usedBytes),0))}for(!e.contents&&A>0&&(e.contents=[]);e.contents.lengthA)e.contents.length=A;else for(;e.contents.length=e.node.usedBytes)return 0;var n=Math.min(e.node.usedBytes-a,i);if(v(n>=0),n>8&&t.subarray)A.set(t.subarray(a,a+n),r);else for(var f=0;f0||a+in.timestamp)&&(a.push(r),i++)}));var t=[];if(Object.keys(A.entries).forEach((function(r){A.entries[r],e.entries[r]||(t.push(r),i++)})),!i)return r(null);var n=0,f=("remote"===e.type?e.db:A.db).transaction([qe.DB_STORE_NAME],"readwrite"),l=f.objectStore(qe.DB_STORE_NAME);function s(e){return e?s.errored?void 0:(s.errored=!0,r(e)):++n>=i?r(null):void 0}f.onerror=function(e){s(this.error),e.preventDefault()},a.sort().forEach((function(e){"local"===A.type?qe.loadRemoteEntry(l,e,(function(A,r){if(A)return s(A);qe.storeLocalEntry(e,r,s)})):qe.loadLocalEntry(e,(function(A,r){if(A)return s(A);qe.storeRemoteEntry(l,e,r,s)}))})),t.sort().reverse().forEach((function(e){"local"===A.type?qe.removeLocalEntry(e,s):qe.removeRemoteEntry(l,e,s)}))}},Ke={isWindows:!1,staticInit:function(){Ke.isWindows=!!process.platform.match(/^win/);var e=process.binding("constants");e.fs&&(e=e.fs),Ke.flagsForNodeMap={1024:e.O_APPEND,64:e.O_CREAT,128:e.O_EXCL,0:e.O_RDONLY,2:e.O_RDWR,4096:e.O_SYNC,512:e.O_TRUNC,1:e.O_WRONLY}},bufferFrom:function(e){return Buffer.alloc?Buffer.from(e):new Buffer.from(e)},mount:function(e){return v(s),Ke.createNode(null,"/",Ke.getMode(e.opts.root),0)},createNode:function(e,A,r,i){if(!eA.isDir(r)&&!eA.isFile(r)&&!eA.isLink(r))throw new eA.ErrnoError(Je.EINVAL);var a=eA.createNode(e,A,r);return a.node_ops=Ke.node_ops,a.stream_ops=Ke.stream_ops,a},getMode:function(e){var A;try{A=xA.lstatSync(e),Ke.isWindows&&(A.mode=A.mode|(292&A.mode)>>2)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}return A.mode},realPath:function(e){for(var A=[];e.parent!==e;)A.push(e.name),e=e.parent;return A.push(e.mount.opts.root),A.reverse(),Te.join.apply(null,A)},flagsForNode:function(e){e&=-2097153,e&=-2049,e&=-32769,e&=-524289;var A=0;for(var r in Ke.flagsForNodeMap)e&r&&(A|=Ke.flagsForNodeMap[r],e^=r);if(e)throw new eA.ErrnoError(Je.EINVAL);return A},node_ops:{getattr:function(e){var A,r=Ke.realPath(e);try{A=xA.lstatSync(r)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}return Ke.isWindows&&!A.blksize&&(A.blksize=4096),Ke.isWindows&&!A.blocks&&(A.blocks=(A.size+A.blksize-1)/A.blksize|0),{dev:A.dev,ino:A.ino,mode:A.mode,nlink:A.nlink,uid:A.uid,gid:A.gid,rdev:A.rdev,size:A.size,atime:A.atime,mtime:A.mtime,ctime:A.ctime,blksize:A.blksize,blocks:A.blocks}},setattr:function(e,A){var r=Ke.realPath(e);try{if(void 0!==A.mode&&(xA.chmodSync(r,A.mode),e.mode=A.mode),void 0!==A.timestamp){var i=new Date(A.timestamp);xA.utimesSync(r,i,i)}void 0!==A.size&&xA.truncateSync(r,A.size)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},lookup:function(e,A){var r=Te.join2(Ke.realPath(e),A),i=Ke.getMode(r);return Ke.createNode(e,A,i)},mknod:function(e,A,r,i){var a=Ke.createNode(e,A,r,i),t=Ke.realPath(a);try{eA.isDir(a.mode)?xA.mkdirSync(t,a.mode):xA.writeFileSync(t,"",{mode:a.mode})}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}return a},rename:function(e,A,r){var i=Ke.realPath(e),a=Te.join2(Ke.realPath(A),r);try{xA.renameSync(i,a)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},unlink:function(e,A){var r=Te.join2(Ke.realPath(e),A);try{xA.unlinkSync(r)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},rmdir:function(e,A){var r=Te.join2(Ke.realPath(e),A);try{xA.rmdirSync(r)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},readdir:function(e){var A=Ke.realPath(e);try{return xA.readdirSync(A)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},symlink:function(e,A,r){var i=Te.join2(Ke.realPath(e),A);try{xA.symlinkSync(r,i)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},readlink:function(e){var A=Ke.realPath(e);try{return A=xA.readlinkSync(A),A=JA.relative(JA.resolve(e.mount.opts.root),A)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}}},stream_ops:{open:function(e){var A=Ke.realPath(e.node);try{eA.isFile(e.node.mode)&&(e.nfd=xA.openSync(A,Ke.flagsForNode(e.flags)))}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},close:function(e){try{eA.isFile(e.node.mode)&&e.nfd&&xA.closeSync(e.nfd)}catch(e){if(!e.code)throw e;throw new eA.ErrnoError(Je[e.code])}},read:function(e,A,r,i,a){if(0===i)return 0;try{return xA.readSync(e.nfd,Ke.bufferFrom(A.buffer),r,i,a)}catch(e){throw new eA.ErrnoError(Je[e.code])}},write:function(e,A,r,i,a){try{return xA.writeSync(e.nfd,Ke.bufferFrom(A.buffer),r,i,a)}catch(e){throw new eA.ErrnoError(Je[e.code])}},llseek:function(e,A,r){var i=A;if(1===r)i+=e.position;else if(2===r&&eA.isFile(e.node.mode))try{i+=xA.fstatSync(e.nfd).size}catch(e){throw new eA.ErrnoError(Je[e.code])}if(i<0)throw new eA.ErrnoError(Je.EINVAL);return i}}},$e={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(e){v(l),$e.reader||($e.reader=new FileReaderSync);var A=$e.createNode(null,"/",$e.DIR_MODE,0),r={};function i(e){for(var i=e.split("/"),a=A,t=0;t=e.node.size)return 0;var t=e.node.contents.slice(a,a+i),n=$e.reader.readAsArrayBuffer(t);return A.set(new Uint8Array(n),r),t.size},write:function(e,A,r,i,a){throw new eA.ErrnoError(Je.EIO)},llseek:function(e,A,r){var i=A;if(1===r?i+=e.position:2===r&&eA.isFile(e.node.mode)&&(i+=e.node.size),i<0)throw new eA.ErrnoError(Je.EINVAL);return i}}};S+=16,S+=16,S+=16;var eA={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof eA.ErrnoError))throw e+" : "+V();return He(e.errno)},lookupPath:function(e,A){if(A=A||{},!(e=Te.resolve(eA.cwd(),e)))return{path:"",node:null};var r={follow_mount:!0,recurse_count:0};for(var i in r)void 0===A[i]&&(A[i]=r[i]);if(A.recurse_count>8)throw new eA.ErrnoError(Je.ELOOP);for(var a=Te.normalizeArray(e.split("/").filter((function(e){return!!e})),!1),t=eA.root,n="/",f=0;f40)throw new eA.ErrnoError(Je.ELOOP)}}return{path:n,node:t}},getPath:function(e){for(var A;;){if(eA.isRoot(e)){var r=e.mount.mountpoint;return A?"/"!==r[r.length-1]?r+"/"+A:r+A:r}A=A?e.name+"/"+A:e.name,e=e.parent}},hashName:function(e,A){for(var r=0,i=0;i>>0)%eA.nameTable.length},hashAddNode:function(e){var A=eA.hashName(e.parent.id,e.name);e.name_next=eA.nameTable[A],eA.nameTable[A]=e},hashRemoveNode:function(e){var A=eA.hashName(e.parent.id,e.name);if(eA.nameTable[A]===e)eA.nameTable[A]=e.name_next;else for(var r=eA.nameTable[A];r;){if(r.name_next===e){r.name_next=e.name_next;break}r=r.name_next}},lookupNode:function(e,A){var r=eA.mayLookup(e);if(r)throw new eA.ErrnoError(r,e);for(var i=eA.hashName(e.id,A),a=eA.nameTable[i];a;a=a.name_next){var t=a.name;if(a.parent.id===e.id&&t===A)return a}return eA.lookup(e,A)},createNode:function(e,A,r,i){eA.FSNode||(eA.FSNode=function(e,A,r,i){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=eA.nextInode++,this.name=A,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=i},eA.FSNode.prototype={},Object.defineProperties(eA.FSNode.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(e){e?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(e){e?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return eA.isDir(this.mode)}},isDevice:{get:function(){return eA.isChrdev(this.mode)}}}));var a=new eA.FSNode(e,A,r,i);return eA.hashAddNode(a),a},destroyNode:function(e){eA.hashRemoveNode(e)},isRoot:function(e){return e===e.parent},isMountpoint:function(e){return!!e.mounted},isFile:function(e){return 32768==(61440&e)},isDir:function(e){return 16384==(61440&e)},isLink:function(e){return 40960==(61440&e)},isChrdev:function(e){return 8192==(61440&e)},isBlkdev:function(e){return 24576==(61440&e)},isFIFO:function(e){return 4096==(61440&e)},isSocket:function(e){return 49152==(49152&e)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(e){var A=eA.flagModes[e];if(void 0===A)throw new Error("Unknown file open mode: "+e);return A},flagsToPermissionString:function(e){var A=["r","w","rw"][3&e];return 512&e&&(A+="w"),A},nodePermissions:function(e,A){return eA.ignorePermissions||(-1===A.indexOf("r")||292&e.mode)&&(-1===A.indexOf("w")||146&e.mode)&&(-1===A.indexOf("x")||73&e.mode)?0:Je.EACCES},mayLookup:function(e){return eA.nodePermissions(e,"x")||(e.node_ops.lookup?0:Je.EACCES)},mayCreate:function(e,A){try{return eA.lookupNode(e,A),Je.EEXIST}catch(e){}return eA.nodePermissions(e,"wx")},mayDelete:function(e,A,r){var i;try{i=eA.lookupNode(e,A)}catch(e){return e.errno}var a=eA.nodePermissions(e,"wx");if(a)return a;if(r){if(!eA.isDir(i.mode))return Je.ENOTDIR;if(eA.isRoot(i)||eA.getPath(i)===eA.cwd())return Je.EBUSY}else if(eA.isDir(i.mode))return Je.EISDIR;return 0},mayOpen:function(e,A){return e?eA.isLink(e.mode)?Je.ELOOP:eA.isDir(e.mode)&&("r"!==eA.flagsToPermissionString(A)||512&A)?Je.EISDIR:eA.nodePermissions(e,eA.flagsToPermissionString(A)):Je.ENOENT},MAX_OPEN_FDS:4096,nextfd:function(e,A){e=e||0,A=A||eA.MAX_OPEN_FDS;for(var r=e;r<=A;r++)if(!eA.streams[r])return r;throw new eA.ErrnoError(Je.EMFILE)},getStream:function(e){return eA.streams[e]},createStream:function(e,A,r){eA.FSStream||(eA.FSStream=function(){},eA.FSStream.prototype={},Object.defineProperties(eA.FSStream.prototype,{object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var i=new eA.FSStream;for(var a in e)i[a]=e[a];e=i;var t=eA.nextfd(A,r);return e.fd=t,eA.streams[t]=e,e},closeStream:function(e){eA.streams[e]=null},chrdev_stream_ops:{open:function(e){var A=eA.getDevice(e.node.rdev);e.stream_ops=A.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:function(){throw new eA.ErrnoError(Je.ESPIPE)}},major:function(e){return e>>8},minor:function(e){return 255&e},makedev:function(e,A){return e<<8|A},registerDevice:function(e,A){eA.devices[e]={stream_ops:A}},getDevice:function(e){return eA.devices[e]},getMounts:function(e){for(var A=[],r=[e];r.length;){var i=r.pop();A.push(i),r.push.apply(r,i.mounts)}return A},syncfs:function(e,A){"function"==typeof e&&(A=e,e=!1),eA.syncFSRequests++,eA.syncFSRequests>1&&console.log("warning: "+eA.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=eA.getMounts(eA.root.mount),i=0;function a(e){return v(eA.syncFSRequests>0),eA.syncFSRequests--,A(e)}function t(e){if(e)return t.errored?void 0:(t.errored=!0,a(e));++i>=r.length&&a(null)}r.forEach((function(A){if(!A.type.syncfs)return t(null);A.type.syncfs(A,e,t)}))},mount:function(e,A,r){var i,a="/"===r,t=!r;if(a&&eA.root)throw new eA.ErrnoError(Je.EBUSY);if(!a&&!t){var n=eA.lookupPath(r,{follow_mount:!1});if(r=n.path,i=n.node,eA.isMountpoint(i))throw new eA.ErrnoError(Je.EBUSY);if(!eA.isDir(i.mode))throw new eA.ErrnoError(Je.ENOTDIR)}var f={type:e,opts:A,mountpoint:r,mounts:[]},l=e.mount(f);return l.mount=f,f.root=l,a?eA.root=l:i&&(i.mounted=f,i.mount&&i.mount.mounts.push(f)),l},unmount:function(e){var A=eA.lookupPath(e,{follow_mount:!1});if(!eA.isMountpoint(A.node))throw new eA.ErrnoError(Je.EINVAL);var r=A.node,i=r.mounted,a=eA.getMounts(i);Object.keys(eA.nameTable).forEach((function(e){for(var A=eA.nameTable[e];A;){var r=A.name_next;-1!==a.indexOf(A.mount)&&eA.destroyNode(A),A=r}})),r.mounted=null;var t=r.mount.mounts.indexOf(i);v(-1!==t),r.mount.mounts.splice(t,1)},lookup:function(e,A){return e.node_ops.lookup(e,A)},mknod:function(e,A,r){var i=eA.lookupPath(e,{parent:!0}).node,a=Te.basename(e);if(!a||"."===a||".."===a)throw new eA.ErrnoError(Je.EINVAL);var t=eA.mayCreate(i,a);if(t)throw new eA.ErrnoError(t);if(!i.node_ops.mknod)throw new eA.ErrnoError(Je.EPERM);return i.node_ops.mknod(i,a,A,r)},create:function(e,A){return A=void 0!==A?A:438,A&=4095,A|=32768,eA.mknod(e,A,0)},mkdir:function(e,A){return A=void 0!==A?A:511,A&=1023,A|=16384,eA.mknod(e,A,0)},mkdirTree:function(e,A){for(var r=e.split("/"),i="",a=0;athis.length-1||e<0)){var A=e%this.chunkSize,r=e/this.chunkSize|0;return this.getter(r)[A]}},t.prototype.setDataGetter=function(e){this.getter=e},t.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",r,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+r+". Status: "+e.status);var A,i=Number(e.getResponseHeader("Content-length")),a=(A=e.getResponseHeader("Accept-Ranges"))&&"bytes"===A,t=(A=e.getResponseHeader("Content-Encoding"))&&"gzip"===A,n=1048576;a||(n=i);var f=this;f.setDataGetter((function(e){var A=e*n,a=(e+1)*n-1;if(a=Math.min(a,i-1),void 0===f.chunks[e]&&(f.chunks[e]=function(e,A){if(e>A)throw new Error("invalid range ("+e+", "+A+") or no bytes requested!");if(A>i-1)throw new Error("only "+i+" bytes available! programmer error!");var a=new XMLHttpRequest;if(a.open("GET",r,!1),i!==n&&a.setRequestHeader("Range","bytes="+e+"-"+A),"undefined"!=typeof Uint8Array&&(a.responseType="arraybuffer"),a.overrideMimeType&&a.overrideMimeType("text/plain; charset=x-user-defined"),a.send(null),!(a.status>=200&&a.status<300||304===a.status))throw new Error("Couldn't load "+r+". Status: "+a.status);return void 0!==a.response?new Uint8Array(a.response||[]):PA(a.responseText||"",!0)}(A,a)),void 0===f.chunks[e])throw new Error("doXHR failed!");return f.chunks[e]})),!t&&i||(n=i=1,i=this.getter(0).length,n=i,console.log("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=i,this._chunkSize=n,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!l)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var n=new t;Object.defineProperties(n,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var f={isDevice:!1,contents:n}}else f={isDevice:!1,url:r};var s=eA.createFile(e,A,f,i,a);f.contents?s.contents=f.contents:f.url&&(s.contents=null,s.url=f.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var c={};return Object.keys(s.stream_ops).forEach((function(e){var A=s.stream_ops[e];c[e]=function(){if(!eA.forceLoadFile(s))throw new eA.ErrnoError(Je.EIO);return A.apply(null,arguments)}})),c.read=function(e,A,r,i,a){if(!eA.forceLoadFile(s))throw new eA.ErrnoError(Je.EIO);var t=e.node.contents;if(a>=t.length)return 0;var n=Math.min(t.length-a,i);if(v(n>=0),t.slice)for(var f=0;f>2]=i.dev,H[r+4>>2]=0,H[r+8>>2]=i.ino,H[r+12>>2]=i.mode,H[r+16>>2]=i.nlink,H[r+20>>2]=i.uid,H[r+24>>2]=i.gid,H[r+28>>2]=i.rdev,H[r+32>>2]=0,H[r+36>>2]=i.size,H[r+40>>2]=4096,H[r+44>>2]=i.blocks,H[r+48>>2]=i.atime.getTime()/1e3|0,H[r+52>>2]=0,H[r+56>>2]=i.mtime.getTime()/1e3|0,H[r+60>>2]=0,H[r+64>>2]=i.ctime.getTime()/1e3|0,H[r+68>>2]=0,H[r+72>>2]=i.ino,0},doMsync:function(e,A,r,i){var a=new Uint8Array(x.subarray(e,e+r));eA.msync(A,a,0,r,i)},doMkdir:function(e,A){return"/"===(e=Te.normalize(e))[e.length-1]&&(e=e.substr(0,e.length-1)),eA.mkdir(e,A,0),0},doMknod:function(e,A,r){switch(61440&A){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-Je.EINVAL}return eA.mknod(e,A,r),0},doReadlink:function(e,A,r){if(r<=0)return-Je.EINVAL;var i=eA.readlink(e),a=Math.min(r,W(i)),t=R[A+a];return z(i,A,r+1),R[A+a]=t,a},doAccess:function(e,A){if(-8&A)return-Je.EINVAL;var r;r=eA.lookupPath(e,{follow:!0}).node;var i="";return 4&A&&(i+="r"),2&A&&(i+="w"),1&A&&(i+="x"),i&&eA.nodePermissions(r,i)?-Je.EACCES:0},doDup:function(e,A,r){var i=eA.getStream(r);return i&&eA.close(i),eA.open(e,A,0,r,r).fd},doReadv:function(e,A,r,i){for(var a=0,t=0;t>2],f=H[A+(8*t+4)>>2],l=eA.read(e,R,n,f,i);if(l<0)return-1;if(a+=l,l>2],f=H[A+(8*t+4)>>2],l=eA.write(e,R,n,f,i);if(l<0)return-1;a+=l}return a},varargs:0,get:function(e){return AA.varargs+=4,H[AA.varargs-4>>2]},getStr:function(){return Z(AA.get())},getStreamFromFD:function(){var e=eA.getStream(AA.get());if(!e)throw new eA.ErrnoError(Je.EBADF);return e},getSocketFromFD:function(){var e=SOCKFS.getSocket(AA.get());if(!e)throw new eA.ErrnoError(Je.EBADF);return e},getSocketAddress:function(e){var A=AA.get(),r=AA.get();if(e&&0===A)return null;var i=__read_sockaddr(A,r);if(i.errno)throw new eA.ErrnoError(i.errno);return i.addr=DNS.lookup_addr(i.addr)||i.addr,i},get64:function(){var e=AA.get(),A=AA.get();return v(e>=0?0===A:-1===A),e},getZero:function(){v(0===AA.get())}};function rA(e,A){AA.varargs=A;try{var r=AA.getStr();return eA.unlink(r),0}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function iA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD(),i=(AA.get(),AA.get()),a=AA.get(),t=AA.get(),n=i;return eA.llseek(r,n,t),H[a>>2]=r.position,r.getdents&&0===n&&0===t&&(r.getdents=null),0}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function aA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD(),i=AA.get(),a=AA.get();return AA.doReadv(r,i,a)}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function tA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD(),i=AA.get(),a=AA.get();return AA.doWritev(r,i,a)}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function nA(e,A){AA.varargs=A;try{var r,i=AA.get(),a=AA.get(),t=AA.get(),n=AA.get(),f=AA.get(),l=AA.get();l<<=12;var s=!1;if(-1===f){if(!(r=gr(K,a)))return-Je.ENOMEM;mr(r,0,a),s=!0}else{var c=eA.getStream(f);if(!c)return-Je.EBADF;var o=eA.mmap(c,x,i,a,l,t,n);r=o.ptr,s=o.allocated}return AA.mappings[r]={malloc:r,len:a,allocated:s,fd:f,flags:n},r}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function fA(e,A){AA.varargs=A;try{var r=AA.getStr(),i=AA.get();return AA.doStat(eA.stat,r,i)}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function lA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD(),i=AA.get();return AA.doStat(eA.stat,r.path,i)}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}var sA={ppid:1,pid:42,sid:42,pgid:42};function cA(e,A){AA.varargs=A;try{return sA.pid}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function oA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD();switch(AA.get()){case 0:return(i=AA.get())<0?-Je.EINVAL:eA.open(r.path,r.flags,0,i).fd;case 1:case 2:return 0;case 3:return r.flags;case 4:var i=AA.get();return r.flags|=i,0;case 12:case 12:return i=AA.get(),J[i+0>>1]=2,0;case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-Je.EINVAL;case 9:return He(Je.EINVAL),-1;default:return-Je.EINVAL}}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function uA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD(),i=AA.get(),a=AA.get();return eA.read(r,R,i,a)}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function bA(e,A){AA.varargs=A;try{var r=AA.getStr(),i=AA.get();return AA.doAccess(r,i)}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function hA(e,A){AA.varargs=A;try{var r=AA.getStr(),i=AA.get(),a=AA.get();return eA.open(r,i,a).fd}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function wA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD(),i=AA.get();switch(i){case 21509:case 21505:return r.tty?0:-Je.ENOTTY;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return r.tty?0:-Je.ENOTTY;case 21519:if(!r.tty)return-Je.ENOTTY;var a=AA.get();return H[a>>2]=0,0;case 21520:return r.tty?-Je.EINVAL:-Je.ENOTTY;case 21531:return a=AA.get(),eA.ioctl(r,i,a);case 21523:return r.tty?0:-Je.ENOTTY;default:zr("bad ioctl syscall "+i)}}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function kA(e,A){AA.varargs=A;try{var r=AA.getStreamFromFD();return eA.close(r),0}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}function dA(e,A){AA.varargs=A;try{var r=AA.get(),i=AA.get(),a=AA.mappings[r];if(!a)return 0;if(i===a.len){var t=eA.getStream(a.fd);AA.doMsync(r,t,i,a.flags),eA.munmap(t),AA.mappings[r]=null,a.allocated&&dr(a.malloc)}return 0}catch(e){return void 0!==eA&&e instanceof eA.ErrnoError||zr(e),-e.errno}}var vA=I([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",y);function gA(){}function mA(e){A.exit(e)}function pA(e){mA(e)}var EA=S;function BA(e){var r,i;BA.called?(i=H[EA>>2],r=H[i>>2]):(BA.called=!0,yA.USER=yA.LOGNAME="web_user",yA.PATH="/",yA.PWD="/",yA.HOME="/home/web_user",yA.LANG="C.UTF-8",yA._=A.thisProgram,r=u(1024),i=u(256),H[i>>2]=r,H[EA>>2]=i);var a=[],t=0;for(var n in e)if("string"==typeof e[n]){var f=n+"="+e[n];a.push(f),t+=f.length}if(t>1024)throw new Error("Environment size exceeded TOTAL_ENV_SIZE!");for(var l=0;l>2]=r,r+=f.length+1;H[i+4*a.length>>2]=0}S+=16;var yA={};function CA(e){return 0===e?0:(e=Z(e),yA.hasOwnProperty(e)?(CA.ret&&dr(CA.ret),CA.ret=Y(yA[e]),CA.ret):0)}function IA(e){var A=Date.now();return H[e>>2]=A/1e3|0,H[e+4>>2]=A%1e3*1e3|0,0}var ZA=Be,GA=pe,LA=pe,QA=ye,DA=Ce,zA=Ee,WA=Ee;function YA(){zr("trap!")}function FA(e,r){throw A.setThrew(e,r||1),"longjmp"}function MA(e,A,r){return x.set(x.subarray(A,A+r),e),e}function VA(e,A,r){if(0===e)return He(Je.EINVAL),-1;var i=Z(e),a=Z(A);return""===i||-1!==i.indexOf("=")?(He(Je.EINVAL),-1):(yA.hasOwnProperty(i)&&!r||(yA[i]=a,BA(yA)),0)}function NA(e){var A=Date.now()/1e3|0;return e&&(H[e>>2]=A),A}function RA(e){return 0!==e&&mr(e,0,16),0}if(Re=s?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:"undefined"!=typeof dateNow?dateNow:"object"==typeof self&&self.performance&&"function"==typeof self.performance.now?function(){return self.performance.now()}:"object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:Date.now,eA.staticInit(),fe.unshift((function(){A.noFSInit||eA.init.initialized||eA.init()})),le.push((function(){eA.ignorePermissions=!1})),se.push((function(){eA.quit()})),fe.unshift((function(){Oe.init()})),se.push((function(){Oe.shutdown()})),s){var xA=r(5747),JA=r(5622);Ke.staticInit()}BA(yA),q=u(4),U=T=h(S),_=h(O=U+re),H[q>>2]=_,j=!0;var HA=!1;function PA(e,A,r){var i=r>0?r:W(e)+1,a=new Array(i),t=D(e,a,0,a.length);return A&&(a.length=t),a}function XA(e){for(var A=[],r=0;r255&&(HA&&v(!1,"Character code "+i+" ("+String.fromCharCode(i)+") at offset "+r+" not in 0x00-0xFF."),i&=255),A.push(String.fromCharCode(i))}return A.join("")}var SA="function"==typeof atob?atob:function(e){var A,r,i,a,t,n,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l="",s=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{A=f.indexOf(e.charAt(s++))<<2|(a=f.indexOf(e.charAt(s++)))>>4,r=(15&a)<<4|(t=f.indexOf(e.charAt(s++)))>>2,i=(3&t)<<6|(n=f.indexOf(e.charAt(s++))),l+=String.fromCharCode(A),64!==t&&(l+=String.fromCharCode(r)),64!==n&&(l+=String.fromCharCode(i))}while(s>2]=0;k=y;d=0;r=re(29,e|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;e:do{if((n|0)!=1){d=0;p=re(23,r<<3|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){r=L6(t[a>>2]|0,E|0,B|0)|0;if(!r)aA(a|0,v|0);G=v}else r=-1;if((r|0)!=1){if(!(i[194954]|0))g=0;else{d=0;r=Ae(3)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){u=0;c=0;o=0;s=0;l=0;A=p;f=p;r=G;n=0;m=74;break}g=r}d=0;r=ie(97,e|0,110064)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)!=1){t[47323]=0;A:do{if(r|0?(l=i[r>>0]|0,l<<24>>24):0){f=r;a=l;n=0;while(1){l=f+1|0;if(!(a<<24>>24))break A;switch(a<<24>>24|0){case 99:{r=8;m=16;break}case 105:{r=18;m=16;break}case 109:{r=1;m=16;break}case 114:{r=4;m=16;break}case 115:{r=2;m=16;break}default:r=n}if((m|0)==16){m=0;r=n|r;t[47323]=r}f=l;a=i[l>>0]|0;n=r}}}while(0);if(A|0){d=0;te(20,0,110068,s|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){u=0;c=g;o=0;s=0;l=0;A=p;f=p;r=G;n=0;m=74;break}}d=0;w=ie(98,e|0,0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){o=t[w+16>>2]|0;if(t[47323]&2|0){d=0;ue(26,t[15712]|0,o|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){u=0;c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break}}d=0;n=re(25,e|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){u=0;while(1){if(!n)break;d=0;r=ie(99,e|0,n|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){f=L6(t[a>>2]|0,E|0,B|0)|0;if(!f)aA(a|0,v|0);G=v}else f=-1;if((f|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}l=u;while(1){if(!r)break;if(!((t[47134]|0)==2?(t[(t[r+16>>2]|0)+8>>2]|0)!=0:0))m=32;A:do{if((m|0)==32){m=0;do{if(i[194954]|0){c=t[r>>2]&3;s=(t[t[((c|0)==3?r:r+48|0)+40>>2]>>2]|0)>>>4;c=(t[t[((c|0)==2?r:r+-48|0)+40>>2]>>2]|0)>>>4;if(s>>>0>c>>>0){d=0;a=te(34,g|0,c|0,s|0)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){A=L6(t[f>>2]|0,E|0,B|0)|0;if(!A)aA(f|0,v|0);G=v}else A=-1;if((A|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}if(a|0)break A;d=0;be(64,g|0,c|0,s|0);a=d;d=0;if((a|0)!=0&(v|0)!=0){f=L6(t[a>>2]|0,E|0,B|0)|0;if(!f)aA(a|0,v|0);G=v}else f=-1;if((f|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}break}else{d=0;a=te(34,g|0,s|0,c|0)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){A=L6(t[f>>2]|0,E|0,B|0)|0;if(!A)aA(f|0,v|0);G=v}else A=-1;if((A|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}if(a|0)break A;d=0;be(64,g|0,s|0,c|0);a=d;d=0;if((a|0)!=0&(v|0)!=0){f=L6(t[a>>2]|0,E|0,B|0)|0;if(!f)aA(a|0,v|0);G=v}else f=-1;if((f|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}break}}}while(0);t[p+(l<<3)+4>>2]=r;d=0;A=re(30,r|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){f=L6(t[a>>2]|0,E|0,B|0)|0;if(!f)aA(a|0,v|0);G=v}else f=-1;if((f|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}t[p+(l<<3)>>2]=A;l=l+1|0}}while(0);d=0;r=ie(100,e|0,r|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){f=L6(t[a>>2]|0,E|0,B|0)|0;if(!f)aA(a|0,v|0);G=v}else f=-1;if((f|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}}d=0;n=ie(86,e|0,n|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74;break e}u=l}d=0;s=re(31,u<<3|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){d=0;we(28,p|0,u|0,8,101);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){n=t[o>>2]|0;d=0;oe(110,n+2|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){l=t[o+16>>2]|0;A=l+(n*40|0)|0;l=l+((n+1|0)*40|0)|0;b=t[15712]|0;f=0;while(1){if((f|0)>=(u|0))break;if((f|0)>0?t[47323]&16|0:0){d=0;ue(26,b|0,o|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}}r=t[p+(f<<3)+4>>2]|0;c=t[r>>2]&3;n=t[(t[(t[((c|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;r=t[(t[(t[((c|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if((n|0)==(r|0)){d=0;we(29,o|0,n|0,l|0,A|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}}else{d=0;be(65,o|0,r|0,l|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}d=0;be(65,o|0,n|0,A|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}}d=0;r=te(35,o|0,l|0,A|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}if(r|0){c=g;o=s;l=w;A=p;f=p;break e}r=s+(f<<3)|0;d=0;we(30,k|0,o|0,A|0,l|0);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}n=k;c=t[n+4>>2]|0;t[r>>2]=t[n>>2];t[r+4>>2]=c;d=0;oe(111,o|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74;break e}f=f+1|0}d=0;ce(8);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){d=0;r=re(32,w|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)!=1){t[w+20>>2]=r;d=0;r=re(33,w|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)!=1){t[w+24>>2]=r;d=0;be(66,u|0,s|0,w|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){E=G6(189296,1,E|0,B|0)|0;B=G;d=0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)!=1){c=g;o=s;l=w;A=p;f=p;r=0;n=b;m=74}else{c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74}}else{c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74}}else{c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74}}else{c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74}}else{c=g;o=s;l=w;A=p;f=p;r=G;n=b;m=74}}else{c=g;o=s;l=w;A=p;f=p;r=G;n=0;m=74}}else{c=g;o=s;l=w;A=p;f=p;r=G;n=0;m=74}}else{c=g;o=0;l=w;A=p;f=p;r=G;n=0;m=74}}else{u=0;c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74}}else{u=0;c=g;o=0;s=0;l=w;A=p;f=p;r=G;n=0;m=74}}else{u=0;c=g;o=0;s=0;l=0;A=p;f=p;r=G;n=0;m=74}}else{u=0;c=0;o=0;s=0;l=0;A=0;f=p;r=G;n=0;m=74}}else{u=0;c=0;o=0;s=0;l=0;A=0;f=0;r=G;n=0;m=74}}while(0);e:while(1){if((m|0)==74){m=0;if(r|0){b=n;continue}d=0;oe(112,l|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){C=n;a=f;b=A;w=l;k=s;g=o;p=c;m=u;r=G;n=C;f=a;A=b;l=w;s=k;o=g;c=p;u=m;m=74;continue}if(t[47323]&4|0){d=0;ke(8,n|0,l|0,u|0,o|0,A|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){a=n;b=f;w=A;k=l;g=s;p=o;C=c;m=u;r=G;n=a;f=b;A=w;l=k;s=g;o=p;c=C;u=m;m=74;continue}}d=0;de(10,e|0,l|0,u|0,o|0,A|0,0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){a=n;b=f;w=A;k=l;g=s;p=o;C=c;m=u;r=G;n=a;f=b;A=w;l=k;s=g;o=p;c=C;u=m;m=74;continue}b=n}if(!(i[194954]|0))r=0;else{d=0;oe(113,c|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){r=G;n=b;m=74;continue}r=0}while(1){if((r|0)>=(u|0))break;d=0;oe(105,t[o+(r<<3)+4>>2]|0);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,E|0,B|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){r=G;n=b;m=74;continue e}r=r+1|0}d=0;oe(105,s|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){r=G;n=b;m=74;continue}d=0;oe(114,l|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){r=G;n=b;m=74;continue}d=0;oe(105,f|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,E|0,B|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){r=G;n=b;m=74}else break}G2(E|0);h=y;return}function cA(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;k=h;h=h+64|0;w=k+32|0;b=k+16|0;l=k;s=k+48|0;Z3(110935,e)|0;Z3(110946,e)|0;o=A+16|0;u=l+8|0;f=s+4|0;n=0;while(1){if((n|0)>=(t[A>>2]|0))break;r=t[o>>2]|0;i=t[r+(n*40|0)+20>>2]|0;a=t[r+(n*40|0)+24>>2]|0;if((i|0)==(a|0)){ir(l,i);r=~~+c[l>>3];i=~~+c[u>>3]}else{tr(s,(t[i>>2]&1|0)==0?i:a,r+(n*40|0)|0);r=t[s>>2]|0;i=t[f>>2]|0}t[b>>2]=n;t[b+4>>2]=r;t[b+8>>2]=i;a3(e,110966,b)|0;n=n+1|0}a=A+4|0;i=A+20|0;r=0;while(1){if((r|0)>=(t[a>>2]|0))break;b=t[i>>2]|0;A=t[b+(r*24|0)+16>>2]|0;d=+c[b+(r*24|0)>>3];t[w>>2]=t[b+(r*24|0)+12>>2];t[w+4>>2]=A;c[w+8>>3]=d;a3(e,110986,w)|0;r=r+1|0}Z3(111008,e)|0;h=k;return}function oA(e){e=e|0;var A=0.0,r=0.0,i=0,a=0;a=t[e>>2]&3;i=t[(t[((a|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0;e=t[(t[((a|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;A=+c[i+16>>3]-+c[e+16>>3];r=+c[i+24>>3]-+c[e+24>>3];return~~(r*r+A*A)|0}function uA(e,A){e=e|0;A=A|0;return(t[e>>2]|0)-(t[A>>2]|0)|0}function bA(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+32|0;s=u;ir(u+16|0,A);c=A+32|0;o=A+36|0;n=0;while(1){if((n|0)>=(t[c>>2]|0))break;f=t[(t[o>>2]|0)+(n<<2)>>2]|0;do{if(!(i[f+36>>0]|0)){l=t[f+20>>2]|0;if((l|0)==(A|0)){Ar(s,f,t[f+24>>2]|0);Er(e,a,f,0.0)|0;break}else{Ar(s,f,l);Er(e,r,f,0.0)|0;break}}}while(0);n=n+1|0}t[e>>2]=(t[e>>2]|0)+2;h=u;return}function hA(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+32|0;f=c;ir(c+16|0,A);l=A+32|0;s=A+36|0;a=0;while(1){if((a|0)>=(t[l>>2]|0))break;n=t[(t[s>>2]|0)+(a<<2)>>2]|0;i=t[n+20>>2]|0;if((i|0)==(A|0))i=t[n+24>>2]|0;Ar(f,n,i);Er(e,r,n,0.0)|0;a=a+1|0}t[e>>2]=(t[e>>2]|0)+1;t[r+24>>2]=A;t[r+20>>2]=A;h=c;return}function wA(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0.0,o=0.0,u=0,b=0.0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0,E=0.0,B=0.0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0;W=h;h=h+128|0;G=W+64|0;u=W+48|0;L=W+32|0;Q=W+16|0;D=W;n=0;f=r;while(1){if(!f)break;n=n+1|0;f=t[f+8>>2]|0}Z=KF((n*56|0)+-112|0)|0;t[G+52>>2]=0;t[G+48>>2]=0;I=r+8|0;r=t[I>>2]|0;f=t[r+8>>2]|0;n=t[r+20>>2]|0;if(t[n>>2]&1)n=t[r+24>>2]|0;Ar(u,r,n);l=r;k=r;w=0.0;b=+c[u>>3];C=0;o=0.0;B=+c[u+8>>3];while(1){y=f+8|0;if(!(t[y>>2]|0))break;p=rr(l,f)|0;Tt(A,p,t[k+12>>2]|0);g=k+36|0;m=f+36|0;if((i[g>>0]|0)==(i[m>>0]|0))if((t[y>>2]|0)==(a|0)){Ar(Q,f,p);r=Q;z=12}else{l=k;r=C;s=B}else{ir(L,p);r=L;z=12}if((z|0)==12){z=0;E=+c[r>>3];s=+c[r+8>>3];r=i[g>>0]|0;v=r<<24>>24==0;d=(k|0)==(t[I>>2]|0);if(v){if(!(i[m>>0]|0))r=0;else r=(t[f+20>>2]|0)==(p|0)?4:2;u=p+48|0;k=n+48|0;l=n+40|0;n=d?0:w>b?4:2}else{if(r<<24>>24==(i[m>>0]|0))r=0;else r=(t[f+20>>2]|0)==(p|0)?1:3;u=p+40|0;k=n+40|0;l=n+48|0;n=d?0:o>B?1:3}ar(G,v&1,+c[l>>3],+c[k>>3],+c[u>>3],n,r);k=C+1|0;n=Z+(C*56|0)|0;r=G;l=n+56|0;do{t[n>>2]=t[r>>2];n=n+4|0;r=r+4|0}while((n|0)<(l|0));if((i[g>>0]|0)!=(i[m>>0]|0)?(t[y>>2]|0)==(a|0):0){Ar(D,f,p);u=(i[m>>0]|0)==0;r=p+40|0;n=p+48|0;w=+c[(u?n:r)>>3];ar(G,u&1,+c[(u?r:n)>>3],w,w,u?b>E?4:2:B>s?1:3,0);u=C+2|0;n=Z+(k*56|0)|0;r=G;l=n+56|0;do{t[n>>2]=t[r>>2];n=n+4|0;r=r+4|0}while((n|0)<(l|0));n=p;l=f;w=b;b=E;r=u;o=B}else{n=p;l=f;w=b;b=E;r=k;o=B}}p=f;f=t[y>>2]|0;k=l;C=r;B=s;l=p}f=Q2(Z,C*56|0)|0;r=C+-1|0;n=0;while(1){if((n|0)>=(C|0))break;if((n|0)>0)t[f+(n*56|0)+48>>2]=f+((n+-1|0)*56|0);if((n|0)<(r|0)){z=n+1|0;t[f+(n*56|0)+52>>2]=f+(z*56|0);n=z;continue}else{n=n+1|0;continue}}t[e>>2]=C;t[e+4>>2]=f;h=W;return}function kA(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;l=Uh(25692,t[4581]|0)|0;s=e+8|0;f=0;while(1){if((f|0)>=(t[e>>2]|0))break;A=(t[s>>2]|0)+(f*72|0)|0;if(!(t[A>>2]&4)){while(1){r=t[(t[A+36>>2]|0)+8>>2]|0;if(!r)break;r=t[r+20>>2]|0;if(!r)break;if(!(t[r>>2]&1))A=r;else break}n=KF(40)|0;t[n+36>>2]=A;c[n+8>>3]=+c[A+40>>3];a=A;r=t[A>>2]|0;while(1){t[a>>2]=r|4;r=t[t[a+36>>2]>>2]|0;if(!r)break;i=t[r+24>>2]|0;if(!i)break;r=t[i>>2]|0;if(r&1|0)break;else a=i}c[n+16>>3]=+c[a+56>>3];_A(l,n,+c[A+48>>3])}f=f+1|0}return l|0}function dA(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;l=Uh(25692,t[4581]|0)|0;s=e+8|0;f=0;while(1){if((f|0)>=(t[e>>2]|0))break;A=(t[s>>2]|0)+(f*72|0)|0;if(!(t[A>>2]&2)){while(1){r=t[(t[A+36>>2]|0)+12>>2]|0;if(!r)break;r=t[r+20>>2]|0;if(!r)break;if(!(t[r>>2]&1))A=r;else break}n=KF(40)|0;t[n+36>>2]=A;c[n+8>>3]=+c[A+48>>3];a=A;r=t[A>>2]|0;while(1){t[a>>2]=r|2;r=t[(t[a+36>>2]|0)+4>>2]|0;if(!r)break;i=t[r+24>>2]|0;if(!i)break;r=t[i>>2]|0;if(r&1|0)break;else a=i}c[n+16>>3]=+c[a+64>>3];_A(l,n,+c[A+40>>3])}f=f+1|0}return l|0}function vA(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0;s=r+20|0;l=r+24|0;r=0;while(1){if((r|0)>=(e|0))break;n=t[A+(r<<3)>>2]|0;f=t[A+(r<<3)+4>>2]|0;a=0;while(1){if((a|0)>=(n|0))break;c=f+(a*56|0)|0;OA(ZA(t[((i[c>>0]|0)==0?s:l)>>2]|0,c)|0,c);a=a+1|0}r=r+1|0}return}function gA(e){e=e|0;var A=0,r=0;r=e+20|0;LA(t[r>>2]|0);A=e+24|0;LA(t[A>>2]|0);QA(t[r>>2]|0);QA(t[A>>2]|0);DA(t[r>>2]|0,e);DA(t[A>>2]|0,e);zA(t[r>>2]|0);zA(t[A>>2]|0);return}function mA(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0.0,G=0.0,L=0,Q=0.0;C=h;h=h+224|0;u=C+176|0;o=C+208|0;B=C+160|0;y=C+128|0;s=C+96|0;g=C+64|0;m=C;b=C+32|0;p=m+8|0;c[p>>3]=1797693134862315708145274.0e284;c[m>>3]=1797693134862315708145274.0e284;E=m+24|0;c[E>>3]=-1797693134862315708145274.0e284;w=m+16|0;c[w>>3]=-1797693134862315708145274.0e284;Z3(110183,e)|0;t[u>>2]=10;t[u+4>>2]=10;a3(e,110589,u)|0;Z3(138265,e)|0;f=A+4|0;l=A+12|0;k=g+8|0;d=g+16|0;v=g+24|0;n=0;while(1){if((n|0)>=(t[f>>2]|0))break;L=(t[l>>2]|0)+(n*72|0)+40|0;t[g>>2]=t[L>>2];t[g+4>>2]=t[L+4>>2];t[g+8>>2]=t[L+8>>2];t[g+12>>2]=t[L+12>>2];t[g+16>>2]=t[L+16>>2];t[g+20>>2]=t[L+20>>2];t[g+24>>2]=t[L+24>>2];t[g+28>>2]=t[L+28>>2];G=+c[k>>3];Z=+c[d>>3];I=+c[v>>3];c[s>>3]=+c[g>>3];c[s+8>>3]=G;c[s+16>>3]=Z;c[s+24>>3]=I;a3(e,138284,s)|0;n=n+1|0}n=0;while(1){if((n|0)>=(r|0))break;L=t[a+(n<<3)+4>>2]|0;s=i+(n<<3)|0;t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[u>>2]=t[m>>2];t[u+4>>2]=t[m+4>>2];t[u+8>>2]=t[m+8>>2];t[u+12>>2]=t[m+12>>2];t[u+16>>2]=t[m+16>>2];t[u+20>>2]=t[m+20>>2];t[u+24>>2]=t[m+24>>2];t[u+28>>2]=t[m+28>>2];GA(b,e,L,o,A,u);t[m>>2]=t[b>>2];t[m+4>>2]=t[b+4>>2];t[m+8>>2]=t[b+8>>2];t[m+12>>2]=t[b+12>>2];t[m+16>>2]=t[b+16>>2];t[m+20>>2]=t[b+20>>2];t[m+24>>2]=t[b+24>>2];t[m+28>>2]=t[b+28>>2];n=n+1|0}Z3(110606,e)|0;f=A+8|0;n=0;while(1){if((n|0)>=(t[A>>2]|0))break;L=(t[f>>2]|0)+(n*72|0)+40|0;t[g>>2]=t[L>>2];t[g+4>>2]=t[L+4>>2];t[g+8>>2]=t[L+8>>2];t[g+12>>2]=t[L+12>>2];t[g+16>>2]=t[L+16>>2];t[g+20>>2]=t[L+20>>2];t[g+24>>2]=t[L+24>>2];t[g+28>>2]=t[L+28>>2];Q=+c[g>>3];I=+c[k>>3];Z=+c[d>>3];G=+c[v>>3];c[y>>3]=Q;c[y+8>>3]=I;c[y+16>>3]=Z;c[y+24>>3]=G;a3(e,138321,y)|0;c[m>>3]=+c[(+c[m>>3]>3];c[p>>3]=+c[(+c[p>>3]>3];c[w>>3]=+c[(+c[w>>3]>Z?m:g)+16>>3];c[E>>3]=+c[(+c[E>>3]>G?m:g)+24>>3];n=n+1|0}p=~~(+c[p>>3]+10.0);y=~~(+c[w>>3]+10.0);L=~~(+c[E>>3]+10.0);t[B>>2]=~~(+c[m>>3]+10.0);t[B+4>>2]=p;t[B+8>>2]=y;t[B+12>>2]=L;a3(e,110631,B)|0;h=C;return}function pA(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0;R=h;h=h+112|0;D=R+88|0;Q=R+72|0;N=R+32|0;Y=R+16|0;F=R;M=R+56|0;V=R+40|0;z=t[15712]|0;E=(f|0)==0;B=F+8|0;y=Y+8|0;p=0;o=0;u=0;b=0;w=0;f=0;while(1){if((p|0)>=(r|0))break;C=t[n+(p<<3)+4>>2]|0;I=C+48|0;m=(t[(t[((t[C>>2]&3|0)==3?C:I)+40>>2]|0)+16>>2]|0)+16|0;Z=C+16|0;G=(t[Z>>2]|0)+16|0;t[Q>>2]=t[m>>2];t[Q+4>>2]=t[m+4>>2];t[Q+8>>2]=t[m+8>>2];t[Q+12>>2]=t[m+12>>2];t[D>>2]=t[G>>2];t[D+4>>2]=t[G+4>>2];t[D+8>>2]=t[G+8>>2];t[D+12>>2]=t[G+12>>2];EA(M,Q,D);t[Y>>2]=t[M>>2];t[Y+4>>2]=t[M+4>>2];t[Y+8>>2]=t[M+8>>2];t[Y+12>>2]=t[M+12>>2];G=C+-48|0;m=(t[(t[((t[C>>2]&3|0)==2?C:G)+40>>2]|0)+16>>2]|0)+16|0;g=(t[Z>>2]|0)+56|0;t[Q>>2]=t[m>>2];t[Q+4>>2]=t[m+4>>2];t[Q+8>>2]=t[m+8>>2];t[Q+12>>2]=t[m+12>>2];t[D>>2]=t[g>>2];t[D+4>>2]=t[g+4>>2];t[D+8>>2]=t[g+8>>2];t[D+12>>2]=t[g+12>>2];EA(V,Q,D);t[F>>2]=t[V>>2];t[F+4>>2]=t[V+4>>2];t[F+8>>2]=t[V+8>>2];t[F+12>>2]=t[V+12>>2];g=t[a+(p<<3)>>2]|0;m=t[a+(p<<3)+4>>2]|0;v=g*3|0;L=v+1|0;if((v|0)>=(u|0)){if(o|0)G2(f);w=$F(L<<4)|0;o=w;u=L;b=w;f=w}if(!(i[m>>0]|0)){s=+(yA(m,A)|0);l=+c[Y>>3]}else{l=+BA(m,A);s=+c[y>>3]}d=o+16|0;c[o+16>>3]=l;c[o+24>>3]=s;t[w>>2]=t[d>>2];t[w+4>>2]=t[d+4>>2];t[w+8>>2]=t[d+8>>2];t[w+12>>2]=t[d+12>>2];d=1;k=m;v=2;while(1){if((d|0)>=(g|0))break;k=m+(d*56|0)|0;if(!(i[k>>0]|0))s=+(yA(k,A)|0);else l=+BA(k,A);x=o+(v+2<<4)|0;H=o+(v+1<<4)|0;J=o+(v<<4)|0;c[J>>3]=l;c[o+(v<<4)+8>>3]=s;t[H>>2]=t[J>>2];t[H+4>>2]=t[J+4>>2];t[H+8>>2]=t[J+8>>2];t[H+12>>2]=t[J+12>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];d=d+1|0;v=v+3|0}if(!(i[k>>0]|0)){s=+(yA(k,A)|0);l=+c[F>>3]}else{l=+BA(k,A);s=+c[B>>3]}H=o+(v<<4)|0;x=v+1|0;J=o+(x<<4)|0;c[J>>3]=l;c[o+(x<<4)+8>>3]=s;t[H>>2]=t[J>>2];t[H+4>>2]=t[J+4>>2];t[H+8>>2]=t[J+8>>2];t[H+12>>2]=t[J+12>>2];if(0>1){J=Mk(t[((t[C>>2]&3|0)==3?C:I)+40>>2]|0)|0;H=Mk(t[((t[C>>2]&3|0)==2?C:G)+40>>2]|0)|0;t[N>>2]=J;t[N+4>>2]=H;a3(z,110142,N)|0}mR(C,t[((t[C>>2]&3|0)==2?C:G)+40>>2]|0,o,L,25680);if((!E?(W=t[(t[Z>>2]|0)+96>>2]|0,W|0):0)?(i[W+81>>0]|0)==0:0){t[Q>>2]=t[Y>>2];t[Q+4>>2]=t[Y+4>>2];t[Q+8>>2]=t[Y+8>>2];t[Q+12>>2]=t[Y+12>>2];t[D>>2]=t[F>>2];t[D+4>>2]=t[F+4>>2];t[D+8>>2]=t[F+8>>2];t[D+12>>2]=t[F+12>>2];JR(e,C,Q,D)}p=p+1|0}G2(b);h=R;return}function EA(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;c[A>>3]=+c[A>>3]+ +c[r>>3];i=A+8|0;c[i>>3]=+c[i>>3]+ +c[r+8>>3];t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];return}function BA(e,A){e=e|0;A=A|0;var r=0.0,i=0;A=ZA(t[A+24>>2]|0,e)|0;i=t[A+36>>2]|0;r=+c[i+40>>3];return+((+c[i+56>>3]-r)*(+(t[e+44>>2]|0)/+((t[A+24>>2]|0)+1|0))+r)}function yA(e,A){e=e|0;A=A|0;var r=0.0,i=0;i=ZA(t[A+20>>2]|0,e)|0;A=t[i+36>>2]|0;r=+c[A+48>>3];return~~((1.0-+(t[e+44>>2]|0)/+((t[i+24>>2]|0)+1|0))*(+c[A+64>>3]-r)+r)|0}function CA(e){e=e|0;return 0}function IA(e){e=e|0;return 0}function ZA(e,A){e=e|0;A=A|0;e=L5[t[e>>2]&63](e,A+8|0,512)|0;if(!e)ge(110155,110161,423,110169);e=t[e+16>>2]|0;e=L5[t[e>>2]&63](e,A+16|0,512)|0;if(!e)ge(110180,110161,425,110169);else return e|0;return 0}function GA(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0.0,o=0,u=0,b=0,w=0.0,k=0.0,d=0.0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0.0,G=0.0,L=0.0;C=h;h=h+32|0;y=C+16|0;m=C+8|0;o=C;l=t[(t[(t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;g=t[a+4>>2]|0;if(!(i[g>>0]|0)){s=+c[l+56>>3];v=+c[l+40>>3];l=yA(g,n)|0;s=(v+s)*.5}else{s=+c[l+64>>3];v=+c[l+48>>3];l=~~((v+s)*.5);s=+BA(g,n)}I=~~s;w=+c[f>>3];d=+(I|0);w=w>3]=w;p=f+8|0;k=+c[p>>3];v=+(l|0);k=k>3]=k;E=f+16|0;s=+c[E>>3];d=s>d?s:d;c[E>>3]=d;B=f+24|0;s=+c[B>>3];v=s>v?s:v;c[B>>3]=v;t[o>>2]=I;t[o+4>>2]=l;a3(A,110682,o)|0;b=t[a>>2]|0;o=g;u=1;a=I;while(1){if((u|0)>=(b|0))break;o=g+(u*56|0)|0;if(!(i[o>>0]|0))l=yA(o,n)|0;else a=~~+BA(o,n);Z=+(a|0);L=w>3]=L;s=+(l|0);G=k>3]=G;Z=d>Z?d:Z;c[E>>3]=Z;s=v>s?v:s;c[B>>3]=s;t[m>>2]=a;t[m+4>>2]=l;a3(A,110704,m)|0;u=u+1|0;w=L;k=G;d=Z;v=s}l=t[(t[(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if(!(i[o>>0]|0)){s=+c[l+56>>3];L=+c[l+40>>3];l=yA(o,n)|0;s=(L+s)*.5}else{s=+c[l+64>>3];L=+c[l+48>>3];l=~~((L+s)*.5);s=+BA(o,n)}I=~~s;G=+(I|0);c[f>>3]=w>3]=k>3]=d>G?d:G;c[B>>3]=v>L?v:L;t[y>>2]=I;t[y+4>>2]=l;a3(A,110718,y)|0;t[e>>2]=t[f>>2];t[e+4>>2]=t[f+4>>2];t[e+8>>2]=t[f+8>>2];t[e+12>>2]=t[f+12>>2];t[e+16>>2]=t[f+16>>2];t[e+20>>2]=t[f+20>>2];t[e+24>>2]=t[f+24>>2];t[e+28>>2]=t[f+28>>2];h=C;return}function LA(e){e=e|0;var A=0;e=Sh(e)|0;while(1){if(!e)break;A=Sh(t[e+16>>2]|0)|0;while(1){if(!A)break;t[A+32>>2]=nr(t[A+24>>2]|0)|0;A=t[A>>2]|0}e=t[e>>2]|0}return}function QA(e){e=e|0;var A=0;e=Sh(e)|0;while(1){if(!e)break;A=Sh(t[e+16>>2]|0)|0;while(1){if(!A)break;if(t[A+24>>2]|0)TA(A);A=t[A>>2]|0}e=t[e>>2]|0}return}function DA(e,A){e=e|0;A=A|0;var r=0;r=Sh(e)|0;while(1){if(!r)break;e=Sh(t[r+16>>2]|0)|0;while(1){if(!e)break;MA(e,A);e=t[e>>2]|0}r=t[r>>2]|0}return}function zA(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;i=Sh(e)|0;while(1){if(!i)break;f=i+8|0;a=Sh(t[i+16>>2]|0)|0;while(1){if(!a)break;e=a+24|0;e:do{if(t[e>>2]|0){if(t[47323]&8|0)WA(a,~~+c[f>>3]);n=a+32|0;or(t[n>>2]|0);A=t[e>>2]|0;r=a+28|0;e=0;while(1){if((e|0)>=(A|0))break e;t[(t[(t[r>>2]|0)+(e<<2)>>2]|0)+44>>2]=(t[(t[(t[n>>2]|0)+4>>2]|0)+(e*12|0)+4>>2]|0)+1;e=e+1|0}}}while(0);a=t[a>>2]|0}i=t[i>>2]|0}return}function WA(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0.0,o=0.0;l=h;h=h+32|0;r=l;n=e+24|0;e:do{if((t[n>>2]|0)>=2){f=t[15712]|0;o=+c[e+8>>3];s=+c[e+16>>3];t[r>>2]=A;c[r+8>>3]=o;c[r+16>>3]=s;a3(f,110739,r)|0;a=e+32|0;e=e+28|0;A=0;while(1){if((A|0)>=(t[n>>2]|0))break e;i=t[(t[(t[a>>2]|0)+4>>2]|0)+(A*12|0)+8>>2]|0;A:do{if(Oh(i)|0){YA(f,t[(t[e>>2]|0)+(A<<2)>>2]|0);Z3(110759,f)|0;r=L5[t[i>>2]&63](i,0,128)|0;while(1){if(!r)break A;Z3(110764,f)|0;YA(f,t[(t[e>>2]|0)+(t[r>>2]<<2)>>2]|0);Z3(153599,f)|0;r=L5[t[i>>2]&63](i,r,8)|0}}}while(0);A=A+1|0}}}while(0);h=l;return}function YA(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0.0,s=0.0,o=0.0;n=h;h=h+80|0;a=n+40|0;r=n;if(!(i[A>>0]|0)){o=+c[A+16>>3];l=+c[A+8>>3];s=+c[A+24>>3];f=FA(t[A+32>>2]|0)|0;r=FA(t[A+36>>2]|0)|0;c[a>>3]=o;c[a+8>>3]=l;c[a+16>>3]=s;c[a+24>>3]=l;t[a+32>>2]=f;t[a+36>>2]=r;a3(e,110770,a)|0}else{s=+c[A+8>>3];l=+c[A+16>>3];o=+c[A+24>>3];a=FA(t[A+32>>2]|0)|0;f=FA(t[A+36>>2]|0)|0;c[r>>3]=s;c[r+8>>3]=l;c[r+16>>3]=s;c[r+24>>3]=o;t[r+32>>2]=a;t[r+36>>2]=f;a3(e,110770,r)|0}h=n;return}function FA(e){e=e|0;switch(e|0){case 0:{e=110821;break}case 1:{e=110816;break}case 2:{e=110809;break}case 3:{e=110802;break}case 4:{e=110794;break}default:e=0}return e|0}function MA(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;E=h;h=h+16|0;d=E+8|0;g=E;m=t[e+32>>2]|0;p=t[e+28>>2]|0;w=e+24|0;o=d+4|0;u=g+4|0;l=0;e=t[w>>2]|0;e:while(1){k=l+1|0;if((k|0)>=(e|0))break;b=p+(l<<2)|0;s=k;while(1){if((s|0)>=(e|0)){l=k;continue e}A:do{if(((cr(m,l,s)|0)==0?(cr(m,s,l)|0)==0:0)?(v=p+(s<<2)|0,VA(t[b>>2]|0,t[v>>2]|0)|0):0){a=t[b>>2]|0;e=t[a+48>>2]|0;f=t[v>>2]|0;r=t[f+48>>2]|0;i=(r|0)==0;if(e)if(i)e=1;else e=+c[e+8>>3]!=+c[r+8>>3];else e=i^1;n=e&1;NA(d,a,f,0,n);e=t[d>>2]|0;f=t[o>>2]|0;a=n^1;NA(g,t[b>>2]|0,t[v>>2]|0,1,a);r=t[g>>2]|0;i=t[u>>2]|0;switch(f|0){case-1:{RA(t[v>>2]|0,t[b>>2]|0,n,0,e,A);RA(t[v>>2]|0,t[b>>2]|0,a,1,r,A);if((i|0)!=1)break A;xA(t[b>>2]|0,t[v>>2]|0,a,A);break A}case 0:switch(i|0){case-1:{RA(t[v>>2]|0,t[b>>2]|0,n,0,e,A);RA(t[v>>2]|0,t[b>>2]|0,a,1,r,A);break A}case 0:{RA(t[b>>2]|0,t[v>>2]|0,0,n,e,A);RA(t[b>>2]|0,t[v>>2]|0,1,a,r,A);break A}case 1:{RA(t[b>>2]|0,t[v>>2]|0,0,n,e,A);RA(t[b>>2]|0,t[v>>2]|0,1,a,r,A);break A}default:break A}case 1:{RA(t[b>>2]|0,t[v>>2]|0,0,n,e,A);RA(t[b>>2]|0,t[v>>2]|0,1,a,r,A);if((i|0)!=-1)break A;xA(t[b>>2]|0,t[v>>2]|0,a,A);break A}default:break A}}}while(0);s=s+1|0;e=t[w>>2]|0}}h=E;return}function VA(e,A){e=e|0;A=A|0;if(!(+c[e+8>>3]==+c[A+8>>3]))ge(110892,110161,843,110923);if((+c[e+16>>3]==+c[A+16>>3]?+c[e+24>>3]==+c[A+24>>3]:0)?(t[e+32>>2]|0)==(t[A+32>>2]|0):0)e=(t[e+36>>2]|0)==(t[A+36>>2]|0)&1;else e=0;return e|0}function NA(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;n=0;while(1){A=JA(A,i)|0;if(!A){f=0;break}r=JA(r,a)|0;if(!r){l=6;break}if(!(VA(A,r)|0)){l=7;break}n=n+1|0}if((l|0)==6)ge(138394,110161,871,110841);else if((l|0)==7)f=PA(A,HA(A,r)|0,n+1|0,1-i|0)|0;t[e>>2]=n;t[e+4>>2]=f;return}function RA(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0,u=0,b=0,h=0,w=0;h=f+20|0;b=f+24|0;f=ZA(t[((i[e>>0]|0)==0?h:b)>>2]|0,e)|0;lr(t[f+32>>2]|0,t[e+40>>2]|0,t[A+40>>2]|0);s=1;while(1){if((s|0)>(n|0))break;o=JA(e,r)|0;u=JA(A,a)|0;do{if(!(i[e>>0]|0)){l=ZA(t[b>>2]|0,o)|0;if(+c[o+8>>3]==+c[e+16>>3]){w=(t[e+32>>2]|0)==1;f=(cr(t[f+32>>2]|0,t[e+40>>2]|0,t[A+40>>2]|0)|0)!=0;e=t[l+32>>2]|0;if(w)if(f){lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}else{lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}else if(f){lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}else{lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}}else{w=(t[e+36>>2]|0)==1;f=(cr(t[f+32>>2]|0,t[e+40>>2]|0,t[A+40>>2]|0)|0)!=0;e=t[l+32>>2]|0;if(w)if(f){lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}else{lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}else if(f){lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}else{lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}}}else{l=ZA(t[h>>2]|0,o)|0;if(+c[o+8>>3]==+c[e+16>>3]){w=(t[e+32>>2]|0)==2;f=(cr(t[f+32>>2]|0,t[e+40>>2]|0,t[A+40>>2]|0)|0)!=0;e=t[l+32>>2]|0;if(w)if(f){lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}else{lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}else if(f){lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}else{lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}}else{w=(t[e+36>>2]|0)==2;f=(cr(t[f+32>>2]|0,t[e+40>>2]|0,t[A+40>>2]|0)|0)!=0;e=t[l+32>>2]|0;if(w)if(f){lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}else{lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}else if(f){lr(e,t[o+40>>2]|0,t[u+40>>2]|0);f=l;break}else{lr(e,t[u+40>>2]|0,t[o+40>>2]|0);f=l;break}}}}while(0);e=o;A=u;s=s+1|0}return}function xA(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0;while(1){if(!(VA(e,A)|0))break;n=JA(e,1)|0;A=JA(A,r)|0;e=n}n=t[(ZA(t[((i[e>>0]|0)==0?a+20|0:a+24|0)>>2]|0,e)|0)+32>>2]|0;sr(n,t[e+40>>2]|0,t[A+40>>2]|0);return}function JA(e,A){e=e|0;A=A|0;if(!e)ge(110828,110161,798,110832);else return t[((A|0)==0?e+48|0:e+52|0)>>2]|0;return 0}function HA(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;t=h;h=h+16|0;a=t;r=i[e>>0]|0;if(r<<24>>24==(i[A>>0]|0)?!(+c[e+8>>3]!=+c[A+8>>3]):0){if(!(r<<24>>24))e=XA(e,A,3,1)|0;else e=XA(e,A,4,2)|0;h=t;return e|0}nw(1,110854,a)|0;aA(189296,1);return 0}function PA(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0;l=1;while(1){if((l|0)>(r|0))break;f=JA(e,a)|0;n=+c[f+8>>3]==+c[e+16>>3];do{if(!(i[e>>0]|0))if(n){n=(t[e+32>>2]|0)==1;break}else{n=(t[e+36>>2]|0)==3;break}else if(n){n=(t[e+32>>2]|0)==4;break}else{n=(t[e+36>>2]|0)==2;break}}while(0);e=f;l=l+1|0;A=n?0-A|0:A}return A|0}function XA(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0,h=0;l=+c[e+24>>3];s=+c[A+16>>3];do{if(!(l>3],f=+c[A+24>>3],!(n>f)):0){if(s>2]|0;return((r|0)==(t[A+32>>2]|0)?0:(r|0)==(i|0)?1:-1)|0}else{r=t[e+32>>2]|0;A=(r|0)==(t[A+36>>2]|0)?0:(r|0)==(i|0)?1:-1;break}if(!(l==f))if(l>2]|0)==(r|0);r=UA(t[A+32>>2]|0,t[e+32>>2]|0,r,i)|0;return(h?r:0-r|0)|0}else{h=(t[A+36>>2]|0)==(i|0);A=UA(t[e+32>>2]|0,t[A+32>>2]|0,r,i)|0;A=h?A:0-A|0;break}h=t[e+32>>2]|0;b=t[A+32>>2]|0;if((h|0)==(b|0)){A=t[A+36>>2]|0;if((t[e+36>>2]|0)==(A|0)){A=0;break}}else A=t[A+36>>2]|0;u=(b|0)==(r|0);if((b|0)==(A|0)){if(u){A=1;break}if((b|0)==(i|0)){A=-1;break}if((h|0)!=(r|0)?(t[e+36>>2]|0)!=(r|0):0){A=1;break}if((h|0)!=(i|0)?(t[e+36>>2]|0)!=(i|0):0){A=-1;break}A=0;break}a=(A|0)==(i|0);if(u&a){A=(t[e+36>>2]|0)==(i|0);if((h|0)==(r|0)){if(!A){A=-1;break}}else if(A){A=1;break}A=0;break}o=(A|0)==(r|0);if((b|0)==(i|0)&o){A=(h|0)==(i|0);if((t[e+36>>2]|0)==(r|0)){if(!A){A=-1;break}}else if(A){A=1;break}A=0;break}if(!b){if(o){A=jA(h,t[e+36>>2]|0,r)|0;break}if(a){A=0-(jA(h,t[e+36>>2]|0,i)|0)|0;break}}a=t[e+36>>2]|0;if(u&(A|0)==0){A=jA(a,h,r)|0;break}else{A=0-(jA(a,h,i)|0)|0;break}}else A=0}while(0);return A|0}function SA(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0.0,l=0.0;f=+c[e+24>>3];l=+c[A+24>>3];do{if(f>2]|0;if((e|0)==(r|0)?(t[A+32>>2]|0)==(i|0):0){e=-1;break}if((e|0)==(i|0)?(t[A+32>>2]|0)==(r|0):0){e=1;break}e=0}else{a=t[A+32>>2]|0;n=(a|0)==(i|0);if(f==l)if(n){e=UA(t[e+36>>2]|0,t[A+36>>2]|0,r,i)|0;break}else{e=0-(UA(t[A+36>>2]|0,t[e+36>>2]|0,r,i)|0)|0;break}if(n?(t[A+36>>2]|0)==(i|0):0){e=-1;break}if((a|0)==(r|0)?(t[A+36>>2]|0)==(r|0):0){e=1;break}e=0}}while(0);return e|0}function jA(e,A,r){e=e|0;A=A|0;r=r|0;return((e|0)==(r|0)?((A|0)==(r|0))<<31>>31:1)|0}function UA(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;if((e|0)==(i|0)){A=(e|0)==0;if(A)return 0;else A=A&1}return((e|0)!=0|(A|0)!=(r|0))<<31>>31|0}function TA(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;n=t[e+28>>2]|0;f=t[e+24>>2]|0;r=t[e+32>>2]|0;e=0;e:while(1){i=e+1|0;if((i|0)>=(f|0))break;a=n+(e<<2)|0;A=i;while(1){if((A|0)==(f|0)){e=i;continue e}switch(HA(t[a>>2]|0,t[n+(A<<2)>>2]|0)|0){case 1:{lr(r,e,A);break}case-1:{lr(r,A,e);break}default:{}}A=A+1|0}}return}function OA(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=e+24|0;i=t[a>>2]|0;r=i+1|0;t[a>>2]=r;t[A+40>>2]=i;i=e+28|0;e=t[i>>2]|0;if(!e)e=$F(r<<2)|0;else e=AM(e,r<<2)|0;t[i>>2]=e;t[e+((t[a>>2]|0)+-1<<2)>>2]=A;return}function _A(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,n=0;n=h;h=h+16|0;a=n;c[a>>3]=r;i=L5[t[e>>2]&63](e,a,512)|0;if(!i){i=KF(24)|0;c[i+8>>3]=+c[a>>3];t[i+16>>2]=Uh(25728,t[4581]|0)|0;L5[t[e>>2]&63](e,i,1)|0}a=t[i+16>>2]|0;L5[t[a>>2]&63](a,A,1)|0;h=n;return}function qA(e,A,r){e=e|0;A=A|0;r=r|0;fr(t[A+32>>2]|0);G2(t[A+28>>2]|0);G2(A);return}function KA(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0.0;a=+c[A>>3];t=+c[r>>3];if(!(a>t))if(a>3]>=+c[r+8>>3])<<31>>31;else e=0;else e=!(+c[A+8>>3]<=+c[r+8>>3])&1;return e|0}function $A(e,A,r){e=e|0;A=A|0;r=r|0;Ph(t[A+16>>2]|0)|0;G2(A);return}function er(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0.0;t=+c[A>>3];a=+c[r>>3];return(t>a?1:(t>31)|0}function Ar(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,n=0.0,f=0,l=0;f=(i[A+36>>0]|0)!=0;l=r+40|0;do{if((t[A+24>>2]|0)==(r|0)){a=+c[l>>3];if(f){n=(+c[r+64>>3]+ +c[r+48>>3])*.5;break}else{n=+c[r+48>>3];a=(+c[r+56>>3]+a)*.5;break}}else if(f){n=(+c[r+64>>3]+ +c[r+48>>3])*.5;a=+c[r+56>>3];break}else{n=+c[r+64>>3];a=(+c[r+56>>3]+ +c[l>>3])*.5;break}}while(0);c[e>>3]=a;c[e+8>>3]=n;return}function rr(e,A){e=e|0;A=A|0;var r=0;r=t[e+20>>2]|0;if((r|0)!=(t[A+20>>2]|0)?(r|0)!=(t[A+24>>2]|0):0)r=t[e+24>>2]|0;return r|0}function ir(e,A){e=e|0;A=A|0;var r=0.0;r=(+c[A+64>>3]+ +c[A+48>>3])*.5;c[e>>3]=(+c[A+56>>3]+ +c[A+40>>3])*.5;c[e+8>>3]=r;return}function ar(e,A,r,a,n,f,l){e=e|0;A=A|0;r=+r;a=+a;n=+n;f=f|0;l=l|0;var s=0,o=0;i[e>>0]=A;c[e+8>>3]=r;if(a>3]=a;c[e+16>>3]=r;t[e+36>>2]=A;t[e+32>>2]=o;i[e+1>>0]=s;return}function tr(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=t[A+36>>2]|0;do{if((t[i+4>>2]|0)!=(r|0)){if((t[i+12>>2]|0)==(r|0)){i=~~((+c[A+56>>3]+ +c[A+40>>3])*.5);r=~~+c[A+48>>3];break}if((t[i+8>>2]|0)==(r|0)){i=~~+c[A+40>>3];r=~~((+c[A+64>>3]+ +c[A+48>>3])*.5);break}if((t[i>>2]|0)==(r|0)){i=~~+c[A+56>>3];r=~~((+c[A+64>>3]+ +c[A+48>>3])*.5)}else{i=0;r=0}}else{i=~~((+c[A+56>>3]+ +c[A+40>>3])*.5);r=~~+c[A+64>>3]}}while(0);t[e>>2]=i;t[e+4>>2]=r;return}function nr(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;r=KF(8)|0;t[r>>2]=e;i=r+4|0;t[i>>2]=KF(e*12|0)|0;A=0;while(1){if((A|0)>=(e|0))break;n=Wt()|0;a=t[i>>2]|0;t[a+(A*12|0)+8>>2]=n;t[a+(A*12|0)>>2]=0;A=A+1|0}return r|0}function fr(e){e=e|0;var A=0,r=0,i=0;r=e+4|0;A=0;while(1){i=t[r>>2]|0;if((A|0)>=(t[e>>2]|0))break;Ph(t[i+(A*12|0)+8>>2]|0)|0;A=A+1|0}G2(i);G2(e);return}function lr(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=r;r=t[(t[e+4>>2]|0)+(A*12|0)+8>>2]|0;L5[t[r>>2]&63](r,a,1)|0;h=i;return}function sr(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=h;h=h+16|0;a=i;t[a>>2]=r;e=e+4|0;n=t[(t[e>>2]|0)+(A*12|0)+8>>2]|0;L5[t[n>>2]&63](n,a,2)|0;t[a>>2]=A;r=t[(t[e>>2]|0)+(r*12|0)+8>>2]|0;L5[t[r>>2]&63](r,a,2)|0;h=i;return}function cr(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=r;r=t[(t[e+4>>2]|0)+(A*12|0)+8>>2]|0;r=(L5[t[r>>2]&63](r,a,512)|0)!=0&1;h=i;return r|0}function or(e){e=e|0;var A=0,r=0,i=0,a=0;A=t[e>>2]|0;switch(A|0){case 0:break;case 1:{t[(t[e+4>>2]|0)+4>>2]=0;break}default:{i=ur(A)|0;a=e+4|0;r=0;A=0;while(1){if((r|0)>=(t[e>>2]|0)){A=0;break}if(!(t[(t[a>>2]|0)+(r*12|0)>>2]|0))A=br(e,r,A,i)|0;r=r+1|0}while(1){r=hr(i)|0;if((r|0)<=-1)break;t[(t[a>>2]|0)+(r*12|0)+4>>2]=A;A=A+1|0}wr(i)}}return}function ur(e){e=e|0;var A=0;A=KF(8)|0;t[A+4>>2]=KF(e<<2)|0;t[A>>2]=-1;return A|0}function br(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;l=e+4|0;n=t[l>>2]|0;s=n+(A*12|0)|0;t[s>>2]=1;n=t[n+(A*12|0)+8>>2]|0;f=n+4|0;r=r+1|0;n=Sh(n)|0;while(1){if(!n)break;a=t[(t[f>>2]|0)+8>>2]|0;if((a|0)<0)a=t[n+8>>2]|0;else a=n+(0-a)|0;a=t[a>>2]|0;if(!(t[(t[l>>2]|0)+(a*12|0)>>2]|0))r=br(e,a,r,i)|0;n=t[n>>2]|0}t[s>>2]=2;kr(i,A);return r+1|0}function hr(e){e=e|0;var A=0,r=0;A=t[e>>2]|0;if((A|0)==-1)e=-1;else{r=t[(t[e+4>>2]|0)+(A<<2)>>2]|0;t[e>>2]=A+-1;e=r}return e|0}function wr(e){e=e|0;G2(t[e+4>>2]|0);G2(e);return}function kr(e,A){e=e|0;A=A|0;var r=0;r=(t[e>>2]|0)+1|0;t[e>>2]=r;t[(t[e+4>>2]|0)+(r<<2)>>2]=A;return}function dr(e){e=e|0;var A=0,r=0,i=0;r=t[e>>2]|0;t[e+8>>2]=r;t[e+12>>2]=t[e+4>>2];A=e+16|0;e=0;while(1){if((e|0)>=(r|0))break;i=t[A>>2]|0;a[i+(e*40|0)+18>>1]=a[i+(e*40|0)+16>>1]|0;e=e+1|0}return}function vr(e){e=e|0;var A=0,r=0,i=0;A=t[e+8>>2]|0;t[e>>2]=A;t[e+4>>2]=t[e+12>>2];r=e+16|0;e=0;while(1){if((e|0)>=(A|0))break;i=t[r>>2]|0;a[i+(e*40|0)+16>>1]=a[i+(e*40|0)+18>>1]|0;e=e+1|0}A=A+2|0;while(1){if((e|0)>=(A|0))break;a[(t[r>>2]|0)+(e*40|0)+16>>1]=0;e=e+1|0}return}function gr(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=KF(((t[e>>2]|0)*6|0)+(A<<1)<<2)|0;t[e+20>>2]=KF((((t[e>>2]|0)*3|0)+A|0)*24|0)|0;i=t[e>>2]|0;a=e+16|0;e=0;while(1){if((e|0)>=(i|0))break;t[(t[a>>2]|0)+(e*40|0)+28>>2]=r;r=r+24|0;e=e+1|0}i=i+2|0;while(1){if((e|0)>=(i|0))break;t[(t[a>>2]|0)+(e*40|0)+28>>2]=r;r=r+(A<<2)|0;e=e+1|0}return}function mr(e){e=e|0;var A=0;A=KF(24)|0;t[A>>2]=0;t[A+16>>2]=KF(e*40|0)|0;return A|0}function pr(e){e=e|0;var A=0,r=0;r=t[e+16>>2]|0;A=t[e>>2]|0;t[r+(A*40|0)+32>>2]=A;t[e>>2]=A+1;return r+(A*40|0)|0}function Er(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0,n=0;n=e+4|0;a=t[n>>2]|0;t[n>>2]=a+1;n=t[e+20>>2]|0;e=n+(a*24|0)|0;t[n+(a*24|0)+12>>2]=t[A+32>>2];t[n+(a*24|0)+16>>2]=t[r+32>>2];c[e>>3]=i;t[n+(a*24|0)+8>>2]=0;Br(A,a);Br(r,a);return e|0}function Br(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+16|0;i=a[r>>1]|0;t[(t[e+28>>2]|0)+(i<<16>>16<<2)>>2]=A;a[r>>1]=i+1<<16>>16;return}function yr(e){e=e|0;var A=0;A=e+16|0;G2(t[(t[A>>2]|0)+28>>2]|0);G2(t[A>>2]|0);G2(t[e+20>>2]|0);G2(e);return}function Cr(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;n=t[e>>2]|0;f=e+16|0;i=0;while(1){if((i|0)>=(n|0))break;t[(t[f>>2]|0)+(i*40|0)>>2]=-2147483648;i=i+1|0}Jt();e:do{if(!(Xt(A)|0)){t[A+8>>2]=0;t[A>>2]=0;A=e+20|0;A:while(1){n=jt()|0;if(!n){i=0;break e}t[n>>2]=0-(t[n>>2]|0);if((n|0)==(r|0)){i=0;break e}f=n+16|0;l=n+28|0;i=0;while(1){if((i|0)>=(a[f>>1]|0))continue A;s=(t[A>>2]|0)+((t[(t[l>>2]|0)+(i<<2)>>2]|0)*24|0)|0;o=Ir(e,s,n)|0;u=t[o>>2]|0;do{if((u|0)<0){b=~~-(+c[s>>3]+ +(t[n>>2]|0));if((u|0)==-2147483648){t[o>>2]=b;if(Xt(o)|0){i=1;break e}t[o+8>>2]=n;t[o+12>>2]=s;break}else{if((u|0)>=(b|0))break;Ut(o,b);t[o+8>>2]=n;t[o+12>>2]=s;break}}}while(0);i=i+1|0}}}else i=1}while(0);return i|0}function Ir(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=t[A+12>>2]|0;if((i|0)==(t[r+32>>2]|0))i=t[A+16>>2]|0;return(t[e+16>>2]|0)+(i*40|0)|0}function Zr(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;n=t[e>>2]|0;Vm(n,3,A)|0;A=t[n+92>>2]|0;do{if(A){r=t[A+16>>2]|0;f=t[r+12>>2]|0;t[e+76>>2]=f;i=t[r+16>>2]|0;t[e+84>>2]=i;a=e+80|0;t[a>>2]=t[r>>2];t[e+88>>2]=t[A+4>>2];r=e+152|0;i=t[r>>2]|t[i>>2];t[r>>2]=i;A=t[n+80>>2]|0;if(!A){t[e+60>>2]=0;A=999;break}else{n=t[A+16>>2]|0;t[e+60>>2]=t[n+12>>2];l=t[n+16>>2]|0;t[e+68>>2]=l;t[e+72>>2]=t[A+4>>2];t[r>>2]=i|t[l>>2];t[e+64>>2]=t[((f|0)==0?a:n)>>2];A=300;break}}else A=999}while(0);return A|0}function Gr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(!(cm(e)|0))if((A|0)!=0?(r=t[A>>2]|0,(r|0)!=0):0){F5[r&127](e);e=0}else e=0;else e=1;return e|0}function Lr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+4>>2]|0,r|0):0)F5[r&127](e);t[(t[e>>2]|0)+24>>2]=0;vm(e);return}function Qr(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0.0,f=0.0;i=+c[A+504>>3];a=+c[A+512>>3];f=+c[A+352>>3];if(!(t[A+360>>2]|0)){n=+c[r>>3]+i;r=r+8|0;i=a}else n=-(a+ +c[r+8>>3]);a=+c[A+528>>3]*f*(+c[r>>3]+i);c[e>>3]=+c[A+520>>3]*f*n;c[e+8>>3]=a;return}function Dr(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0.0,l=0.0,s=0.0;a=+c[e+504>>3];n=+c[e+512>>3];f=+c[e+352>>3];l=+c[e+520>>3]*f;f=+c[e+528>>3]*f;e:do{if(!(t[e+360>>2]|0)){e=0;while(1){if((e|0)>=(i|0))break e;c[r+(e<<4)>>3]=(+c[A+(e<<4)>>3]+a)*l;c[r+(e<<4)+8>>3]=(+c[A+(e<<4)+8>>3]+n)*f;e=e+1|0}}else{e=0;while(1){if((e|0)>=(i|0))break e;s=-(l*(+c[A+(e<<4)+8>>3]+n));c[r+(e<<4)+8>>3]=(+c[A+(e<<4)>>3]+a)*f;c[r+(e<<4)>>3]=s;e=e+1|0}}}while(0);return r|0}function zr(e,A){e=e|0;A=A|0;var r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+8>>2]|0,r|0):0)F5[r&127](e);return}function Wr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+12>>2]|0,r|0):0)F5[r&127](e);dm(e);return}function Yr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+24>>2]|0,r|0):0)F5[r&127](e);return}function Fr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+28>>2]|0,r|0):0)F5[r&127](e);return}function Mr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+16>>2]|0,r|0):0){A=t[e+160>>2]|0;R5[r&31](e,t[(t[(t[e>>2]|0)+308>>2]|0)+(A<<2)>>2]|0,A,t[e+156>>2]|0)}return}function Vr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+20>>2]|0,r|0):0)F5[r&127](e);return}function Nr(e,A){e=e|0;A=A|0;var r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+32>>2]|0,r|0):0)F5[r&127](e);return}function Rr(e,A){e=e|0;A=A|0;var r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+36>>2]|0,r|0):0)F5[r&127](e);return}function xr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+40>>2]|0,r|0):0)F5[r&127](e);return}function Jr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+44>>2]|0,r|0):0)F5[r&127](e);return}function Hr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+48>>2]|0,r|0):0)F5[r&127](e);return}function Pr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+52>>2]|0,r|0):0)F5[r&127](e);return}function Xr(e,A){e=e|0;A=A|0;var r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+56>>2]|0,r|0):0)F5[r&127](e);return}function Sr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+60>>2]|0,r|0):0)F5[r&127](e);return}function jr(e,A){e=e|0;A=A|0;var r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+64>>2]|0,r|0):0)F5[r&127](e);return}function Ur(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+68>>2]|0,r|0):0)F5[r&127](e);return}function Tr(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;n=t[e+60>>2]|0;if(n|0?(f=t[n+72>>2]|0,f|0):0)x5[f&15](e,A,r,i,a);return}function Or(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+76>>2]|0,r|0):0)F5[r&127](e);return}function _r(e,A){e=e|0;A=A|0;var r=0,i=0;r=t[e+60>>2]|0;if(r|0?(i=t[r+80>>2]|0,i|0):0)M5[i&63](e,A);return}function qr(e){e=e|0;var A=0,r=0;A=t[e+60>>2]|0;if(A|0?(r=t[A+84>>2]|0,r|0):0)F5[r&127](e);return}function Kr(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0;c=h;h=h+48|0;a=c+32|0;f=c;l=c+16|0;s=t[e+60>>2]|0;o=t[r>>2]|0;do{if(o|0?i[o>>0]|0:0){o=t[e+16>>2]|0;if(o|0?(t[o+144>>2]|0)==0:0)break;if(!(t[e+152>>2]&8192)){t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];Qr(l,e,a);t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];t[f+8>>2]=t[l+8>>2];t[f+12>>2]=t[l+12>>2]}else{t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2]}if(s|0?(n=t[s+88>>2]|0,n|0):0){t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[a+8>>2]=t[f+8>>2];t[a+12>>2]=t[f+12>>2];V5[n&127](e,a,r)}}}while(0);h=c;return}function $r(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;a=t[e+60>>2]|0;n=(t[e+16>>2]|0)+16|0;l=C1(A,58)|0;f=(l|0)!=0;if(f)i[l>>0]=0;if(a|0?(ei(t[e+68>>2]|0,A,n),r=t[a+92>>2]|0,r|0):0)M5[r&63](e,n);if(f)i[l>>0]=58;return}function ei(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+32|0;n=c+16|0;s=c+8|0;l=c;t[r>>2]=A;t[r+32>>2]=5;i=da(A)|0;a=t[e+16>>2]|0;if(!((a|0)!=0?(r8(i,a,t[e+20>>2]|0,4,102)|0)!=0:0))f=3;e:do{if((f|0)==3){switch(va(A,r,t[e+24>>2]|0)|0){case 0:break e;case 1:break;default:{nw(1,111046,n)|0;break e}}e=$F((U2(A)|0)+16|0)|0;t[l>>2]=A;T4(e,111011,l)|0;if(aF(e)|0){t[s>>2]=A;nw(0,111020,s)|0}G2(e)}}while(0);h=c;return}function Ai(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;a=t[e+60>>2]|0;n=(t[e+16>>2]|0)+56|0;l=C1(A,58)|0;f=(l|0)!=0;if(f)i[l>>0]=0;if(a|0?(ei(t[e+68>>2]|0,A,n),r=t[a+92>>2]|0,r|0):0)M5[r&63](e,n);if(f)i[l>>0]=58;return}function ri(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0,n=0,f=0,l=0;n=t[e+60>>2]|0;f=e+16|0;l=(t[f>>2]|0)+96|0;if(n|0?(ei(t[e+68>>2]|0,A,l),a=t[n+92>>2]|0,a|0):0)M5[a&63](e,l);l=t[f>>2]|0;t[l+136>>2]=r;s[l+140>>2]=i;return}function ii(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+16|0;s=o;l=t[e+60>>2]|0;e=t[e+16>>2]|0;t[e+160>>2]=A;e:do{if((A|0)!=0&(l|0)!=0){l=e+144|0;f=e+152|0;n=e+148|0;e=A;A:while(1){a=e+4|0;e=t[e>>2]|0;if(!e)break e;r:do{switch(i[e>>0]|0){case 115:{if(!(e1(e,111067)|0)){t[l>>2]=3;e=a;continue A}if(!(e1(e,111088)|0)){r=115;while(1){A=e+1|0;if(!(r<<24>>24))break;e=A;r=i[A>>0]|0}c[f>>3]=+$3(A);e=a;continue A}break}case 100:{if(!(e1(e,137327)|0)){t[l>>2]=1;e=a;continue A}if(!(e1(e,137320)|0)){t[l>>2]=2;e=a;continue A}break}case 105:{if(e1(e,134335)|0?e1(e,111073)|0:0)break r;t[l>>2]=0;e=a;continue A}case 98:{if(!(e1(e,111083)|0)){c[f>>3]=2.0;e=a;continue A}break}case 102:{if(!(e1(e,111101)|0)){t[n>>2]=1;e=a;continue A}break}case 117:{if(!(e1(e,111108)|0)){t[n>>2]=0;e=a;continue A}break}case 116:{if(!(e1(e,111117)|0)){e=a;continue A}break}default:{}}}while(0);t[s>>2]=e;nw(0,111125,s)|0;e=a}}}while(0);h=o;return}function ai(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+32|0;n=l;r=t[e+60>>2]|0;if((r|0?(f=r+96|0,a=t[f>>2]|0,a|0):0)?t[(t[e+16>>2]|0)+144>>2]|0:0){r=A+16|0;c[n>>3]=(+c[r>>3]+ +c[A>>3])*.5;c[n+8>>3]=(+c[A+24>>3]+ +c[A+8>>3])*.5;A=n+16|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];if(!(t[e+152>>2]&8192)){Dr(e,n,n,2)|0;a=t[f>>2]|0}V5[a&127](e,n,i)}h=l;return}function ti(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+48|0;o=b;a=t[e+60>>2]|0;if((a|0?(u=a+100|0,t[u>>2]|0):0)?(c=e+16|0,s=t[c>>2]|0,t[s+144>>2]|0):0){if(!(i&4)){a=i;n=0}else{a=i&-5;i=s+16|0;n=o;f=i;l=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(l|0));n=i;f=s+56|0;l=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(l|0));n=1}if(!(t[e+152>>2]&8192)){i=r+10|0;if((t[47363]|0)<(r|0)){t[47363]=i;i=AM(t[47364]|0,i<<4)|0;t[47364]=i}else i=t[47364]|0;Dr(e,A,i,r)|0;R5[t[u>>2]&31](e,i,r,a)}else R5[t[u>>2]&31](e,A,r,a);if(n|0){n=(t[c>>2]|0)+16|0;f=o;l=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(l|0))}}h=b;return}function ni(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=h;h=h+64|0;a=i;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];n=a+32|0;A=A+16|0;t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];c[a+16>>3]=+c[a>>3];c[a+24>>3]=+c[a+40>>3];c[a+48>>3]=+c[n>>3];c[a+56>>3]=+c[a+8>>3];ti(e,a,4,r);h=i;return}function fi(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0;l=t[e+60>>2]|0;do{if((l|0?(s=l+104|0,f=t[s>>2]|0,f|0):0)?t[(t[e+16>>2]|0)+144>>2]|0:0){if(t[e+152>>2]&8192|0){J5[f&15](e,A,r,i,a,n&255);break}f=r+10|0;if((t[47363]|0)<(r|0)){t[47363]=f;f=AM(t[47364]|0,f<<4)|0;t[47364]=f}else f=t[47364]|0;Dr(e,A,f,r)|0;J5[t[s>>2]&15](e,f,r,i,a,n&255)}}while(0);return}function li(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=t[e+60>>2]|0;do{if((i|0?(n=i+108|0,a=t[n>>2]|0,a|0):0)?t[(t[e+16>>2]|0)+144>>2]|0:0){if(t[e+152>>2]&8192|0){V5[a&127](e,A,r);break}i=r+10|0;if((t[47363]|0)<(r|0)){t[47363]=i;i=AM(t[47364]|0,i<<4)|0;t[47364]=i}else i=t[47364]|0;Dr(e,A,i,r)|0;V5[t[n>>2]&127](e,i,r)}}while(0);return}function si(e,A){e=e|0;A=A|0;var r=0,a=0;r=t[e+60>>2]|0;if((A|0?!((r|0)==0|(i[A>>0]|0)==0):0)?(a=t[r+112>>2]|0,a|0):0)M5[a&63](e,A);return}function ci(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0.0,s=0.0,o=0,u=0,b=0.0,w=0.0,k=0.0,d=0.0,v=0,g=0.0,m=0.0,p=0.0,E=0.0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0;D=h;h=h+112|0;Z=D+64|0;Q=D;u=D+96|0;B=D+48|0;y=D+32|0;G=t[e+60>>2]|0;if(!e)ge(111282,111178,691,111189);if(!A)ge(111208,111178,692,111189);if(!(i[A>>0]|0))ge(111213,111178,693,111189);L=Rm(A)|0;if(!L){if((G|0)!=0&(CN(A)|0)!=0?(o=t[G+116>>2]|0,o|0):0)x5[o&15](e,A,r,a,n&255)}else{v=e+432|0;t[Z>>2]=t[v>>2];t[Z+4>>2]=t[v+4>>2];t[Z+8>>2]=t[v+8>>2];t[Z+12>>2]=t[v+12>>2];Hm(u,L,Z);v=t[u>>2]|0;o=t[u+4>>2]|0;if(!((v|0)<1&(o|0)<1)){u=Q+16|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];t[Q>>2]=t[r>>2];t[Q+4>>2]=t[r+4>>2];t[Q+8>>2]=t[r+8>>2];t[Q+12>>2]=t[r+12>>2];C=Q+8|0;I=Q+24|0;A=1;while(1){if((A|0)>=(a|0))break;z=r+(A<<4)|0;p=+c[z>>3];c[Q>>3]=+c[(+c[Q>>3]>3];E=+c[r+(A<<4)+8>>3];c[C>>3]=+c[(+c[C>>3]>3];c[u>>3]=+c[(+c[u>>3]>p?u:z)>>3];c[I>>3]=+c[(+c[I>>3]>E?u:z)+8>>3];A=A+1|0}s=+c[u>>3];l=+c[Q>>3];g=s-l;m=+c[I>>3];p=+c[C>>3];E=m-p;b=+(o|0);w=+(v|0);k=g/w;d=E/b;e:do{switch(oi(f)|0){case 1:if(k>3]=l;s=s-g;c[u>>3]=s}if(b>3]=p+E;c[I>>3]=m-E}if(!(t[e+152>>2]&8192)){t[Z>>2]=t[Q>>2];t[Z+4>>2]=t[Q+4>>2];t[Z+8>>2]=t[Q+8>>2];t[Z+12>>2]=t[Q+12>>2];Qr(B,e,Z);t[Q>>2]=t[B>>2];t[Q+4>>2]=t[B+4>>2];t[Q+8>>2]=t[B+8>>2];t[Q+12>>2]=t[B+12>>2];t[Z>>2]=t[u>>2];t[Z+4>>2]=t[u+4>>2];t[Z+8>>2]=t[u+8>>2];t[Z+12>>2]=t[u+12>>2];Qr(y,e,Z);t[u>>2]=t[y>>2];t[u+4>>2]=t[y+4>>2];t[u+8>>2]=t[y+8>>2];t[u+12>>2]=t[y+12>>2];s=+c[u>>3];l=+c[Q>>3]}if(l>s){c[Q>>3]=s;c[u>>3]=l}l=+c[C>>3];s=+c[I>>3];if(l>s){c[C>>3]=s;c[I>>3]=l}if(G|0){z=t[e+72>>2]|0;t[Z>>2]=t[Q>>2];t[Z+4>>2]=t[Q+4>>2];t[Z+8>>2]=t[Q+8>>2];t[Z+12>>2]=t[Q+12>>2];t[Z+16>>2]=t[Q+16>>2];t[Z+20>>2]=t[Q+20>>2];t[Z+24>>2]=t[Q+24>>2];t[Z+28>>2]=t[Q+28>>2];wi(e,L,Z,n,z)}}}h=D;return}function oi(e){e=e|0;if(i[e>>0]|0)if(N1(e,141116)|0)if(N1(e,141048)|0)if(!(N1(e,111221)|0))e=4;else e=(mx(e)|0)<<24>>24!=0&1;else e=3;else e=2;else e=0;return e|0}function ui(e,A){e=e|0;A=+A;if(t[e+60>>2]|0)c[(t[e+16>>2]|0)+152>>3]=A;return}function bi(e,A){e=e|0;A=A|0;A=Vm(e,1,A)|0;if(!A)A=999;else{A=t[A+16>>2]|0;t[e+184>>2]=t[A+4>>2];t[e+172>>2]=t[A+12>>2];t[e+176>>2]=t[A>>2];t[e+180>>2]=t[A+16>>2];A=300}return A|0}function hi(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;a=l;Sd(A,137483,280,1)|0;n=A+16|0;t[(t[n>>2]|0)+144>>2]=e;if((yd(A)|0)!=(A|0))t[(t[(yd(A)|0)+16>>2]|0)+144>>2]=e;i=Hw(A,111226)|0;r=e+172|0;if((i|0)!=0?(t[r>>2]=0,(bi(e,i)|0)==999):0){r=Nm(e,1,i)|0;t[a>>2]=i;t[a+4>>2]=r;nw(1,111233,a)|0;r=-1}else{i=t[r>>2]|0;if(!i)r=-1;else{nF(1);WF(A,t[t[e+180>>2]>>2]&1);r=t[(t[n>>2]|0)+8>>2]|0;t[(t[(yd(A)|0)+16>>2]|0)+8>>2]=r;wR();r=t[i>>2]|0;if(r|0?(F5[r&127](A),f=t[i+4>>2]|0,f|0):0)t[(t[n>>2]|0)+148>>2]=f;nF(0);r=0}}h=l;return r|0}function wi(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+176|0;c=u+8|0;s=u;f=u+40|0;if(!e)ge(111282,111286,52,111300);if(!A)ge(111312,111286,53,111300);l=t[A+8>>2]|0;if(!l)ge(111315,111286,54,111300);if(!(i[l>>0]|0))ge(111324,111286,55,111300);$1(f,t[A+28>>2]|0)|0;l=f+(U2(f)|0)|0;i[l>>0]=58;i[l+1>>0]=0;b3(f,n)|0;if((ki(e,f)|0)==999){t[s>>2]=f;nw(0,111336,s)|0}n=t[e+92>>2]|0;if(n|0?(o=t[n>>2]|0,o|0):0){t[c>>2]=t[r>>2];t[c+4>>2]=t[r+4>>2];t[c+8>>2]=t[r+8>>2];t[c+12>>2]=t[r+12>>2];t[c+16>>2]=t[r+16>>2];t[c+20>>2]=t[r+20>>2];t[c+24>>2]=t[r+24>>2];t[c+28>>2]=t[r+28>>2];R5[o&31](e,A,c,a)}h=u;return}function ki(e,A){e=e|0;A=A|0;A=Vm(t[e>>2]|0,4,A)|0;if(!A)A=999;else{A=t[A+16>>2]|0;t[e+92>>2]=t[A+12>>2];t[e+96>>2]=t[A>>2];A=300}return A|0}function di(e){e=e|0;return 1}function vi(e){e=e|0;var A=0;i[e+536>>0]=0;A=e+336|0;c[A>>3]=+c[A>>3]+10.0/+c[e+352>>3];i[e+537>>0]=1;return 0}function gi(e){e=e|0;var A=0;i[e+536>>0]=0;A=e+336|0;c[A>>3]=+c[A>>3]-10.0/+c[e+352>>3];i[e+537>>0]=1;return 0}function mi(e){e=e|0;var A=0;i[e+536>>0]=0;A=e+344|0;c[A>>3]=+c[A>>3]-10.0/+c[e+352>>3];i[e+537>>0]=1;return 0}function pi(e){e=e|0;var A=0;i[e+536>>0]=0;A=e+344|0;c[A>>3]=+c[A>>3]+10.0/+c[e+352>>3];i[e+537>>0]=1;return 0}function Ei(e){e=e|0;var A=0;i[e+536>>0]=0;A=e+352|0;c[A>>3]=+c[A>>3]*1.1;i[e+537>>0]=1;return 0}function Bi(e){e=e|0;var A=0;i[e+536>>0]=0;A=e+352|0;c[A>>3]=+c[A>>3]*.9090909090909091;i[e+537>>0]=1;return 0}function yi(e){e=e|0;var A=0,r=0,a=0,n=0.0,f=0.0;r=e+536|0;A=(i[r>>0]|0)==0;i[r>>0]=A&1;if(A){A=t[e+448>>2]|0;r=t[e+452>>2]|0;f=+(A>>>0);n=+(r>>>0);a=f/+(A|0)>3]=(a?f:n)/+((a?A:r)|0);r=e+336|0;t[r>>2]=0;t[r+4>>2]=0;t[r+8>>2]=0;t[r+12>>2]=0;i[e+537>>0]=1}return 0}function Ci(e){e=e|0;var A=0,r=0;A=t[(t[e>>2]|0)+168>>2]|0;r=e+580|0;if(!(t[r>>2]|0)){t[r>>2]=A;r=(t[A+16>>2]|0)+112|0;i[r>>0]=i[r>>0]|2;Ji(e,A)}vB(e,A);i[e+540>>0]=1;return}function Ii(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0.0,l=0,s=0;s=h;h=h+16|0;a=s;switch(A|0){case 1:{t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];Yi(e,a);xi(e);i[e+538>>0]=1;i[e+541>>0]=1;l=13;break}case 2:{i[e+538>>0]=1;i[e+541>>0]=2;l=13;break}case 3:{t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];Yi(e,a);i[e+538>>0]=1;i[e+541>>0]=3;l=13;break}case 4:{i[e+536>>0]=0;if(!(t[e+360>>2]|0)){a=e+352|0;f=+c[a>>3];A=e+336|0;c[A>>3]=(+c[r>>3]-+((t[e+448>>2]|0)>>>0)*.5)*.10000000000000009/(+c[e+520>>3]*f)+ +c[A>>3];n=+c[r+8>>3]-+((t[e+452>>2]|0)>>>0)*.5;A=e+528|0}else{a=e+352|0;f=+c[a>>3];A=e+336|0;c[A>>3]=+c[A>>3]-(+c[r+8>>3]-+((t[e+452>>2]|0)>>>0)*.5)*.10000000000000009/(+c[e+528>>3]*f);n=+c[r>>3]-+((t[e+448>>2]|0)>>>0)*.5;A=e+520|0}l=e+344|0;c[l>>3]=n*.10000000000000009/(+c[A>>3]*f)+ +c[l>>3];c[a>>3]=f*1.1;l=13;break}case 5:{i[e+536>>0]=0;l=e+352|0;f=+c[l>>3]*.9090909090909091;c[l>>3]=f;if(!(t[e+360>>2]|0)){a=e+336|0;c[a>>3]=+c[a>>3]-(+c[r>>3]-+((t[e+448>>2]|0)>>>0)*.5)*.10000000000000009/(+c[e+520>>3]*f);n=+c[r+8>>3]-+((t[e+452>>2]|0)>>>0)*.5;a=e+528|0}else{a=e+336|0;c[a>>3]=(+c[r+8>>3]-+((t[e+452>>2]|0)>>>0)*.5)*.10000000000000009/(+c[e+528>>3]*f)+ +c[a>>3];n=+c[r>>3]-+((t[e+448>>2]|0)>>>0)*.5;a=e+520|0}l=e+344|0;c[l>>3]=+c[l>>3]-n*.10000000000000009/(+c[a>>3]*f);l=13;break}default:{}}if((l|0)==13)i[e+537>>0]=1;e=e+560|0;t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];h=s;return}function Zi(e,A,r){e=e|0;A=A|0;r=r|0;i[e+538>>0]=0;i[e+541>>0]=0;return}function Gi(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0,l=0.0,s=0;s=h;h=h+16|0;r=s;f=e+560|0;l=(+c[A>>3]-+c[f>>3])/+c[e+520>>3];n=(+c[A+8>>3]-+c[e+568>>3])/+c[e+528>>3];if(!(+Q(+l)<.0001&+Q(+n)<.0001)){switch(i[e+541>>0]|0){case 0:{t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];Yi(e,r);break}case 2:{a=+c[e+352>>3];if(!(t[e+360>>2]|0)){r=e+336|0;c[r>>3]=+c[r>>3]-l/a;r=e+344|0;c[r>>3]=+c[r>>3]-n/a}else{r=e+336|0;c[r>>3]=+c[r>>3]-n/a;r=e+344|0;c[r>>3]=+c[r>>3]+l/a}i[e+537>>0]=1;break}default:{}}t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2]}h=s;return}function Li(e,A,r){e=e|0;A=A|0;r=r|0;return}function Qi(e){e=e|0;return}function Di(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;s=t[e>>2]|0;if(A){A=F3(A,138821)|0;if(A|0){l=sm(A,0)|0;k3(A)|0;a=5}}else{l=sm(t[15647]|0,0)|0;a=5}if((a|0)==5?l|0:0){n=s+168|0;A=t[n>>2]|0;if(A|0){a=t[s+172>>2]|0;if((a|0)!=0?(f=t[a+4>>2]|0,(f|0)!=0):0){F5[f&127](A);A=t[n>>2]|0}NF(A);vk(t[n>>2]|0)|0}_d(l,0,137483,280,1);_d(l,1,137447,304,1);_d(l,2,137460,176,1);t[n>>2]=l;t[(t[l+16>>2]|0)+144>>2]=s;if((bp(s,l,r)|0)!=-1){t[e+580>>2]=0;t[e+576>>2]=0;i[e+537>>0]=1}}return}function zi(e,A){e=e|0;A=A|0;e=t[e>>2]|0;bp(e,t[e+168>>2]|0,A)|0;return}function Wi(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;n=t[e>>2]|0;a=n+160|0;i=t[a>>2]|0;if((i|0)!=0?(t[n+164>>2]|0)==0:0){l=n+192|0;f=t[l>>2]|0;t[a>>2]=0;t[l>>2]=0;a=f}else{a=0;i=0}wp(n,t[n+168>>2]|0,A,r)|0;if(i|0){l=t[e>>2]|0;t[l+160>>2]=i;t[l+192>>2]=a}return}function Yi(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0.0,l=0.0,s=0.0,o=0;a=h;h=h+80|0;r=a+48|0;n=a;o=a+32|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];Fi(o,e,r);s=+c[o>>3];l=+c[o+8>>3];f=1.0/+c[e+352>>3];c[n+16>>3]=f+s;c[n+24>>3]=f+l;c[n>>3]=s-f;c[n+8>>3]=l-f;A=t[(t[e>>2]|0)+168>>2]|0;t[r>>2]=t[n>>2];t[r+4>>2]=t[n+4>>2];t[r+8>>2]=t[n+8>>2];t[r+12>>2]=t[n+12>>2];t[r+16>>2]=t[n+16>>2];t[r+20>>2]=t[n+20>>2];t[r+24>>2]=t[n+24>>2];t[r+28>>2]=t[n+28>>2];A=Mi(A,r)|0;r=e+576|0;if((A|0)!=(t[r>>2]|0)){Vi(e);t[r>>2]=A;Ni(e);i[e+537>>0]=1}h=a;return}function Fi(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0.0,f=0;if(!(t[A+360>>2]|0)){i=+c[A+352>>3];a=+c[r+8>>3];n=i;f=A+528|0;i=+c[r>>3]/(+c[A+520>>3]*i)-+c[A+504>>3]}else{i=+c[A+352>>3];a=-+c[r>>3];n=i;f=A+520|0;i=+c[r+8>>3]/(+c[A+528>>3]*i)-+c[A+504>>3]}n=a/(+c[f>>3]*n)-+c[A+512>>3];c[e>>3]=i;c[e+8>>3]=n;return}function Mi(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+32|0;a=n;i=sd(e)|0;e:while(1){if(!i){i=9;break}r=Ow(e,i)|0;while(1){if(!r)break;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];t[a+16>>2]=t[A+16>>2];t[a+20>>2]=t[A+20>>2];t[a+24>>2]=t[A+24>>2];t[a+28>>2]=t[A+28>>2];if((IJ(r,a)|0)<<24>>24){i=6;break e}r=qw(e,r)|0}i=cd(e,i)|0}do{if((i|0)!=6)if((i|0)==9){r=od(e)|0;while(1){if(!r)break;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];t[a+16>>2]=t[A+16>>2];t[a+20>>2]=t[A+20>>2];t[a+24>>2]=t[A+24>>2];t[a+28>>2]=t[A+28>>2];if((BJ(r,a)|0)<<24>>24){i=12;break}r=ud(e,r)|0}if((i|0)==12)break;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];t[a+16>>2]=t[A+16>>2];t[a+20>>2]=t[A+20>>2];t[a+24>>2]=t[A+24>>2];t[a+28>>2]=t[A+28>>2];r=Ri(e,a)|0;if(!r){r=e;break}else break}}while(0);h=n;return r|0}function Vi(e){e=e|0;var A=0;A=t[e+576>>2]|0;e:do{if(A|0)switch(Yd(A)|0){case 0:{A=(t[A+16>>2]|0)+112|0;i[A>>0]=i[A>>0]&-2;break e}case 1:{A=(t[A+16>>2]|0)+117|0;i[A>>0]=i[A>>0]&-2;break e}case 2:{A=(t[A+16>>2]|0)+115|0;i[A>>0]=i[A>>0]&-2;break e}default:break e}}while(0);t[e+584>>2]=0;return}function Ni(e){e=e|0;var A=0,r=0;r=e+584|0;A=t[r>>2]|0;if(A|0){G2(A);t[r>>2]=0}A=t[e+576>>2]|0;e:do{if(A|0)switch(Yd(A)|0){case 0:{e=(t[A+16>>2]|0)+112|0;i[e>>0]=i[e>>0]|1;e=zw(A,0,141101,0)|0;if(!e)break e;t[r>>2]=UF(Pw(A,e)|0,A)|0;break e}case 1:{e=(t[A+16>>2]|0)+117|0;i[e>>0]=i[e>>0]|1;e=zw(Bd(A)|0,1,141101,0)|0;if(!e)break e;t[r>>2]=UF(Pw(A,e)|0,A)|0;break e}case 2:{e=(t[A+16>>2]|0)+115|0;i[e>>0]=i[e>>0]|1;e=zw(Bd(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0,2,141101,0)|0;if(!e)break e;t[r>>2]=UF(Pw(A,e)|0,A)|0;break e}default:break e}}while(0);return}function Ri(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0;o=h;h=h+32|0;i=o;n=t[e+16>>2]|0;f=t[n+180>>2]|0;l=n+184|0;r=1;while(1){if((r|0)>(f|0)){s=4;break}a=t[(t[l>>2]|0)+(r<<2)>>2]|0;t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];t[i+16>>2]=t[A+16>>2];t[i+20>>2]=t[A+20>>2];t[i+24>>2]=t[A+24>>2];t[i+28>>2]=t[A+28>>2];a=Ri(a,i)|0;if(!a)r=r+1|0;else{e=a;break}}do{if((s|0)==4){b=+c[n+24>>3];u=+c[n+40>>3];if(((+c[A+16>>3]>=+c[n+16>>3]?+c[n+32>>3]>=+c[A>>3]:0)?+c[A+24>>3]>=b:0)?u>=+c[A+8>>3]:0)break;e=0}}while(0);h=o;return e|0}function xi(e){e=e|0;var A=0,r=0,a=0;a=e+580|0;A=t[a>>2]|0;e:do{if(A|0)switch(Yd(A)|0){case 0:{r=(t[A+16>>2]|0)+112|0;i[r>>0]=i[r>>0]&-7|4;break e}case 1:{r=(t[A+16>>2]|0)+117|0;i[r>>0]=i[r>>0]&-7|4;break e}case 2:{r=(t[A+16>>2]|0)+115|0;i[r>>0]=i[r>>0]&-7|4;break e}default:break e}}while(0);A=e+588|0;r=t[A>>2]|0;if(r|0){G2(r);t[A>>2]=0}A=t[e+576>>2]|0;t[a>>2]=A;e:do{if(A|0)switch(Yd(A)|0){case 0:{a=(t[A+16>>2]|0)+112|0;i[a>>0]=i[a>>0]|2;Ji(e,A);break e}case 1:{a=(t[A+16>>2]|0)+117|0;i[a>>0]=i[a>>0]|2;Hi(e,A);break e}case 2:{a=(t[A+16>>2]|0)+115|0;i[a>>0]=i[a>>0]|2;Pi(e,A);break e}default:break e}}while(0);return}function Ji(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=e+592|0;do{if((yd(A)|0)==(A|0))if(!(Bk(A)|0)){zm(r,0,111494);break}else{zm(r,0,111486);break}else zm(r,0,111500)}while(0);zm(r,1,Mk(A)|0);t[e+596>>2]=2;a=e+604|0;r=0;i=2;while(1){r=Vw(A,0,r)|0;if(!r)break;zm(a,i,t[r+8>>2]|0);zm(a,i+1|0,Pw(A,r)|0);zm(a,i+2|0,0);i=i+3|0}t[e+608>>2]=i;r=zw(A,0,141055,0)|0;if(!r){r=zw(A,0,111477,0)|0;if(r|0)n=11}else n=11;if((n|0)==11)t[e+588>>2]=UF(Pw(A,r)|0,A)|0;return}function Hi(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;a=e+592|0;zm(a,0,111481);zm(a,1,Mk(A)|0);t[e+596>>2]=2;a=e+604|0;n=yd(Bd(A)|0)|0;i=2;r=0;while(1){r=Vw(n,1,r)|0;if(!r)break;zm(a,i,t[r+8>>2]|0);zm(a,i|1,Pw(A,r)|0);i=i+2|0}t[e+608>>2]=i;r=zw(Bd(A)|0,1,141055,0)|0;if(!r){r=zw(Bd(A)|0,1,111477,0)|0;if(r|0)f=6}else f=6;if((f|0)==6)t[e+588>>2]=UF(Pw(A,r)|0,A)|0;return}function Pi(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;f=e+592|0;zm(f,0,111450);c=A+48|0;zm(f,1,Mk(t[((t[A>>2]&3|0)==3?A:c)+40>>2]|0)|0);c=(Bk(Bd(t[((t[A>>2]&3|0)==3?A:c)+40>>2]|0)|0)|0)!=0;zm(f,3,c?137738:141747);c=A+-48|0;zm(f,4,Mk(t[((t[A>>2]&3|0)==2?A:c)+40>>2]|0)|0);t[e+596>>2]=7;l=e+604|0;s=yd(Bd(t[((t[A>>2]&3|0)==2?A:c)+40>>2]|0)|0)|0;n=7;r=0;e:while(1){while(1){r=Vw(s,2,r)|0;if(!r)break e;i=r+8|0;a=t[i>>2]|0;if(!(e1(a,111455)|0)){o=5;break}if(!(e1(a,111464)|0)){o=7;break}if(e1(a,111473)|0)break;zm(f,6,Pw(A,r)|0)}if((o|0)==5){o=0;zm(f,2,Pw(A,r)|0)}else if((o|0)==7){o=0;zm(f,5,Pw(A,r)|0)}zm(l,n,t[i>>2]|0);zm(l,n+1|0,Pw(A,r)|0);n=n+2|0}t[e+608>>2]=n;r=zw(Bd(t[((t[A>>2]&3|0)==2?A:c)+40>>2]|0)|0,2,141055,0)|0;if(!r){r=zw(Bd(t[((t[A>>2]&3|0)==2?A:c)+40>>2]|0)|0,2,111477,0)|0;if(r|0)o=13}else o=13;if((o|0)==13)t[e+588>>2]=UF(Pw(A,r)|0,A)|0;return}function Xi(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=Si(e,A,t[r>>2]|0)|0;r=t[r+4>>2]|0;while(1){a=t[r+4>>2]|0;if(!a)break;A=0;while(1){i=t[a+(A*20|0)+4>>2]|0;if(!i)break;Fm(e,t[r>>2]|0,i,t[a+(A*20|0)+8>>2]|0,n,a+(A*20|0)|0)|0;A=A+1|0}r=r+8|0}return}function Si(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=$F(12)|0;if(!A)A=0;else A=o3(A)|0;t[i+4>>2]=A;t[i+8>>2]=o3(r)|0;r=e+100|0;t[i>>2]=t[r>>2];t[r>>2]=i;return i|0}function ji(e,A){e=e|0;A=A|0;Ui(e);i[e+44>>0]=0;Ti(e)|0;ax(e)|0;return}function Ui(e){e=e|0;var A=0,r=0;A=t[e+32>>2]|0;e:do{if(A|0)while(1){r=t[A>>2]|0;if(!r)break e;if((i[r>>0]|0)==103?R4(r,111509)|0:0)Xi(e,0,t[A+4>>2]|0);A=A+8|0}}while(0);return}function Ti(e){e=e|0;var A=0;A=Vm(e,2,111522)|0;if(!A)e=999;else{t[e+148>>2]=t[(t[A+16>>2]|0)+12>>2];e=300}return e|0}function Oi(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;e=t[e+148>>2]|0;if((e|0)!=0?(i=t[e>>2]|0,(i|0)!=0):0)e=Z5[i&127](A,r)|0;else e=0;return e|0}function _i(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return(t[A>>2]|0)-(t[r>>2]|0)|0}function qi(e){e=e|0;var A=0.0,r=0.0;e=t[e+16>>2]|0;r=+c[e+16>>3];A=+c[e+24>>3];return(Ki(~~(r>A?r:A)>>>0)|0)+1|0}function Ki(e){e=e|0;var A=0,r=0;if(!e)e=-1;else{r=e>>>0>65535;e=r?e>>>16:e;r=r?16:0;A=e>>>0>255;e=A?e>>>8:e;r=A?r|8:r;A=e>>>0>15;e=A?e>>>4:e;r=A?r|4:r;A=e>>>0>3;e=(A?r|2:r)+((A?e>>>2:e)>>>0>1&1)|0}return e|0}function $i(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0;d=h;h=h+32|0;k=d;w=ea(e,A,r,a,n)|0;r=Aa(w)|0;if((r|0)>=0){u=k+16|0;b=k+24|0;o=k+8|0;s=n+32|0;r=0;n=0;while(1){if((n|0)>=(A|0))break;a=e+(n*40|0)+32|0;do{if(t[a>>2]|0){ra(k,w,e+(n*40|0)|0);f=+c[u>>3];l=+c[b>>3];if(!(t[k>>2]|0)){i[(t[a>>2]|0)+36>>0]=1;break}if(+c[o>>3]==0.0){a=t[a>>2]|0;c[a+16>>3]=f;c[a+24>>3]=l;i[a+36>>0]=1;break}if((i[s>>0]|0)==1){a=t[a>>2]|0;c[a+16>>3]=f;c[a+24>>3]=l;i[a+36>>0]=1}else r=1}}while(0);n=n+1|0}ia(w)}h=d;return r|0}function ea(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;n=KF(28)|0;s=Uh(25912,t[4584]|0)|0;f=n+20|0;t[f>>2]=s;do{if(s){s=Nn()|0;t[n+24>>2]=s;if(!s){G3(111740,14,1,t[15712]|0)|0;l=6;break}else{t[n>>2]=e;t[n+4>>2]=A;t[n+8>>2]=r;t[n+12>>2]=i;t[n+16>>2]=a;break}}else{G3(111740,14,1,t[15712]|0)|0;l=6}}while(0);if((l|0)==6){e=t[f>>2]|0;if(e|0)Ph(e)|0;e=t[n+24>>2]|0;if(e|0)xn(e)|0;G2(n);n=0}return n|0}function Aa(e){e=e|0;var A=0;A=ua(e)|0;if((A|0)>=0){ba(e);ha(e);A=Ph(t[e+20>>2]|0)|0}return A|0}function ra(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0.0,l=0,s=0.0,o=0,u=0,b=0,w=0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0.0,V=0,N=0;N=h;h=h+464|0;F=N+416|0;V=N+400|0;z=N+384|0;o=N+352|0;u=N+320|0;b=N+288|0;w=N+256|0;d=N+224|0;v=N+192|0;g=N+160|0;m=N+128|0;p=N+96|0;B=N+64|0;y=N+32|0;W=N;C=t[r+32>>2]|0;i=+c[C>>3];G=r+16|0;I=(i*2.0+ +c[G>>3])*.125;L=C+8|0;Y=r+24|0;f=+c[Y>>3];M=(+c[L>>3]*2.0+f)*.5;if(!C)ge(111533,111543,445,111553);a=F;n=a+36|0;do{t[a>>2]=0;a=a+4|0}while((a|0)<(n|0));Z=C+16|0;c[Z>>3]=+c[r>>3]-i;Q=r+8|0;D=C+24|0;c[D>>3]=f+ +c[Q>>3];aa(o,A,r,F);l=t[o>>2]|0;a=t[o+4>>2]|0;i=+c[o+8>>3];o=o+16|0;t[V>>2]=t[o>>2];t[V+4>>2]=t[o+4>>2];t[V+8>>2]=t[o+8>>2];t[V+12>>2]=t[o+12>>2];e:do{if(!l){t[e>>2]=0;t[e+4>>2]=a;c[e+8>>3]=i;e=e+16|0;t[e>>2]=t[V>>2];t[e+4>>2]=t[V+4>>2];t[e+8>>2]=t[V+8>>2];t[e+12>>2]=t[V+12>>2]}else{c[D>>3]=+c[Q>>3];aa(u,A,r,F);n=t[u>>2]|0;o=t[u+4>>2]|0;f=+c[u+8>>3];u=u+16|0;t[z>>2]=t[u>>2];t[z+4>>2]=t[u+4>>2];t[z+8>>2]=t[u+8>>2];t[z+12>>2]=t[u+12>>2];if(!n){t[e>>2]=0;t[e+4>>2]=o;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];a=o;i=f}else n=l;c[D>>3]=+c[Q>>3]-+c[L>>3];aa(b,A,r,F);o=t[b>>2]|0;l=t[b+4>>2]|0;f=+c[b+8>>3];b=b+16|0;t[z>>2]=t[b>>2];t[z+4>>2]=t[b+4>>2];t[z+8>>2]=t[b+8>>2];t[z+12>>2]=t[b+12>>2];if(!o){t[e>>2]=0;t[e+4>>2]=l;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];a=l;i=f}else o=n;c[Z>>3]=+c[r>>3];c[D>>3]=+c[Y>>3]+ +c[Q>>3];aa(w,A,r,F);n=t[w>>2]|0;l=t[w+4>>2]|0;f=+c[w+8>>3];w=w+16|0;t[z>>2]=t[w>>2];t[z+4>>2]=t[w+4>>2];t[z+8>>2]=t[w+8>>2];t[z+12>>2]=t[w+12>>2];if(!n){t[e>>2]=0;t[e+4>>2]=l;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];o=n;a=l;i=f}c[D>>3]=+c[Q>>3]-+c[L>>3];aa(d,A,r,F);n=t[d>>2]|0;l=t[d+4>>2]|0;f=+c[d+8>>3];d=d+16|0;t[z>>2]=t[d>>2];t[z+4>>2]=t[d+4>>2];t[z+8>>2]=t[d+8>>2];t[z+12>>2]=t[d+12>>2];if(!n){t[e>>2]=0;t[e+4>>2]=l;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];o=n;a=l;i=f}c[Z>>3]=+c[G>>3]+ +c[r>>3];c[D>>3]=+c[Y>>3]+ +c[Q>>3];aa(v,A,r,F);n=t[v>>2]|0;l=t[v+4>>2]|0;f=+c[v+8>>3];v=v+16|0;t[z>>2]=t[v>>2];t[z+4>>2]=t[v+4>>2];t[z+8>>2]=t[v+8>>2];t[z+12>>2]=t[v+12>>2];if(!n){t[e>>2]=0;t[e+4>>2]=l;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];o=n;a=l;i=f}c[D>>3]=+c[Q>>3];aa(g,A,r,F);n=t[g>>2]|0;l=t[g+4>>2]|0;f=+c[g+8>>3];g=g+16|0;t[z>>2]=t[g>>2];t[z+4>>2]=t[g+4>>2];t[z+8>>2]=t[g+8>>2];t[z+12>>2]=t[g+12>>2];if(!n){t[e>>2]=0;t[e+4>>2]=l;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];o=n;a=l;i=f}c[D>>3]=+c[Q>>3]-+c[L>>3];aa(m,A,r,F);n=t[m>>2]|0;l=t[m+4>>2]|0;f=+c[m+8>>3];m=m+16|0;t[z>>2]=t[m>>2];t[z+4>>2]=t[m+4>>2];t[z+8>>2]=t[m+8>>2];t[z+12>>2]=t[m+12>>2];if(!n){t[e>>2]=0;t[e+4>>2]=l;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break}if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];a=l;i=f}else n=o;l=(t[F+28>>2]|0)==0;do{if(!(t[F+24>>2]|0))if(l){if(t[F+32>>2]|0){E=38;break}if(!((t[F+12>>2]|0)==0&(t[F>>2]|0)==0))E=38}else E=46;else if(l)E=38;else E=46}while(0);A:do{if((E|0)==38)if(!(t[F+32>>2]|0)){c[Z>>3]=+c[r>>3]-+c[C>>3];w=p+4|0;d=p+8|0;v=p+16|0;o=D;l=Q;f=+c[Y>>3];r:while(1){while(1){c[o>>3]=+c[l>>3]+f;if(!(+c[Z>>3]<=+c[G>>3]+ +c[r>>3])){E=46;break A}aa(p,A,r,F);u=t[p>>2]|0;b=t[w>>2]|0;s=+c[d>>3];t[z>>2]=t[v>>2];t[z+4>>2]=t[v+4>>2];t[z+8>>2]=t[v+8>>2];t[z+12>>2]=t[v+12>>2];if(!u)break r;if(s>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];o=Z;l=Z;f=I;n=u;a=b;i=s}t[e>>2]=0;t[e+4>>2]=b;c[e+8>>3]=s;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break e}else E=46}while(0);A:do{if((E|0)==46)if((t[F+12>>2]|0)==0&(t[F>>2]|0)==0){c[Z>>3]=+c[r>>3]-+c[C>>3];s=+c[Q>>3];u=B+4|0;b=B+8|0;w=B+16|0;f=s;s=+c[Y>>3]+s;while(1){c[D>>3]=s;if(!(s>=f-+c[L>>3]))break A;aa(B,A,r,F);l=t[B>>2]|0;o=t[u>>2]|0;f=+c[b>>3];t[z>>2]=t[w>>2];t[z+4>>2]=t[w+4>>2];t[z+8>>2]=t[w+8>>2];t[z+12>>2]=t[w+12>>2];if(!l)break;if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];n=l;a=o;i=f}f=+c[Q>>3];s=+c[D>>3]-M}t[e>>2]=0;t[e+4>>2]=o;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break e}}while(0);f=+c[r>>3];s=+c[G>>3]+f;c[Z>>3]=s;k=+c[L>>3];c[D>>3]=+c[Q>>3]-k;l=t[F+4>>2]|0;do{if(!(t[F+8>>2]|0)){o=t[F>>2]|0;if(!((l|0)==0&(o|0)==0)){E=59;break}if(t[F+20>>2]|0){l=0;o=0;E=59;break}if(t[F+32>>2]|0){l=0;o=0;E=59}}else{o=t[F>>2]|0;E=59}}while(0);A:do{if((E|0)==59){r:do{if((l|0)==0&(o|0)==0){c[Z>>3]=s;w=y+4|0;d=y+8|0;v=y+16|0;o=D;l=Q;f=k;i:while(1){while(1){c[o>>3]=+c[l>>3]-f;f=+c[r>>3];if(!(+c[Z>>3]>=f-+c[C>>3]))break r;aa(y,A,r,F);u=t[y>>2]|0;b=t[w>>2]|0;s=+c[d>>3];t[z>>2]=t[v>>2];t[z+4>>2]=t[v+4>>2];t[z+8>>2]=t[v+8>>2];t[z+12>>2]=t[v+12>>2];if(!u)break i;if(s>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];o=Z;l=Z;f=I;n=u;a=b;i=s}t[e>>2]=0;t[e+4>>2]=b;c[e+8>>3]=s;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break e}}while(0);if(t[F+20>>2]|0)break;if(t[F+32>>2]|0)break;c[Z>>3]=+c[G>>3]+f;f=+c[Q>>3];u=W+4|0;b=W+8|0;w=W+16|0;s=f;f=f-+c[L>>3];while(1){c[D>>3]=f;if(!(f<=+c[Y>>3]+s))break A;aa(W,A,r,F);l=t[W>>2]|0;o=t[u>>2]|0;f=+c[b>>3];t[z>>2]=t[w>>2];t[z+4>>2]=t[w+4>>2];t[z+8>>2]=t[w+8>>2];t[z+12>>2]=t[w+12>>2];if(!l)break;if(f>2]=t[z>>2];t[V+4>>2]=t[z+4>>2];t[V+8>>2]=t[z+8>>2];t[V+12>>2]=t[z+12>>2];n=l;a=o;i=f}s=+c[Q>>3];f=+c[D>>3]+M}t[e>>2]=0;t[e+4>>2]=o;c[e+8>>3]=f;e=e+16|0;t[e>>2]=t[z>>2];t[e+4>>2]=t[z+4>>2];t[e+8>>2]=t[z+8>>2];t[e+12>>2]=t[z+12>>2];break e}}while(0);t[e>>2]=n;t[e+4>>2]=a;c[e+8>>3]=i;e=e+16|0;t[e>>2]=t[V>>2];t[e+4>>2]=t[V+4>>2];t[e+8>>2]=t[V+8>>2];t[e+12>>2]=t[V+12>>2]}}while(0);h=N;return}function ia(e){e=e|0;xn(t[e+24>>2]|0)|0;G2(e);return}function aa(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0.0,l=0,s=0,o=0,u=0.0,b=0,w=0,k=0,d=0.0,v=0,g=0;g=h;h=h+48|0;k=g+32|0;v=g+16|0;w=g;n=t[r+32>>2]|0;if(!n)ge(111533,111543,382,111562);b=n+16|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2];b=A+4|0;o=0;n=0;while(1){if((o|0)>=(t[b>>2]|0))break;l=t[A>>2]|0;s=l+(o*40|0)|0;do{if((s|0)!=(r|0)){if(+c[l+(o*40|0)+16>>3]>0.0?+c[l+(o*40|0)+24>>3]>0.0:0)break;n=n+((ta(r,s)|0)!=0&1)|0}}while(0);o=o+1|0}na(r,k);o=t[A+24>>2]|0;o=Hn(o,t[o>>2]|0,k)|0;if(!o){t[e>>2]=n;c[e+8>>3]=0.0;v=e+16|0;t[v>>2]=t[w>>2];t[v+4>>2]=t[w+4>>2];t[v+8>>2]=t[w+8>>2];t[v+12>>2]=t[w+12>>2]}else{s=o;f=0.0;while(1){if(!s)break;l=t[(t[s+4>>2]|0)+16>>2]|0;if((l|0)!=(r|0)){fa(l,v);u=+la(k,v);if(u>0.0){n=n+1|0;f=+sa(r,l,k,u,a)+f}A=t[l+32>>2]|0;if(((A|0)!=0?(i[A+36>>0]|0)!=0:0)?(na(l,v),d=+la(k,v),d>0.0):0){n=n+1|0;f=+ca(r,l,k,d,a)+f}}s=t[s>>2]|0}Vn(o);t[e>>2]=n;c[e+8>>3]=f;v=e+16|0;t[v>>2]=t[w>>2];t[v+4>>2]=t[w+4>>2];t[v+8>>2]=t[w+8>>2];t[v+12>>2]=t[w+12>>2]}h=g;return}function ta(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0,n=0.0;e=t[e+32>>2]|0;if(+c[A+16>>3]==0.0?+c[A+24>>3]==0.0:0){if((((e|0)!=0?(r=+c[A>>3],i=+c[e+16>>3],r>i):0)?r<+c[e>>3]+i:0)?(a=+c[A+8>>3],n=+c[e+24>>3],a>n):0)e=a<+c[e+8>>3]+n&1;else e=0;return e|0}ge(111599,111543,219,111636);return 0}function na(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;e=t[e+32>>2]|0;i=+c[e+16>>3];t[A>>2]=~~i;r=+c[e+24>>3];t[A+4>>2]=~~r;t[A+8>>2]=~~(+c[e>>3]+i);t[A+12>>2]=~~(+c[e+8>>3]+r);return}function fa(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+c[e>>3];t[A>>2]=~~i;r=+c[e+8>>3];t[A+4>>2]=~~r;t[A+8>>2]=~~(+c[e+16>>3]+i);t[A+12>>2]=~~(+c[e+24>>3]+r);return}function la(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;l=t[e+8>>2]|0;s=t[A>>2]|0;if((((l|0)>=(s|0)?(c=t[e>>2]|0,o=t[A+8>>2]|0,(c|0)<=(o|0)):0)?(i=t[e+12>>2]|0,a=t[A+4>>2]|0,(i|0)>=(a|0)):0)?(n=t[e+4>>2]|0,f=t[A+12>>2]|0,(n|0)<=(f|0)):0)r=(+(t[((i|0)<(f|0)?e:A)+12>>2]|0)-+(t[((n|0)>(a|0)?e:A)+4>>2]|0))*(+(t[((l|0)<(o|0)?e:A)+8>>2]|0)-+(t[((c|0)>(s|0)?e:A)>>2]|0));else r=0.0;return+r}function sa(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;var n=0.0,f=0.0,l=0,s=0;s=h;h=h+16|0;l=s;e=oa(e,A)|0;a=a+(((e|0)<0?5:e)<<2)|0;e=t[a>>2]|0;if(!e){t[a>>2]=A;n=i}else{fa(e,l);n=+la(r,l);n=n>i?n:0.0;e=t[a>>2]|0;if((t[e+32>>2]|0)!=0?(na(e,l),f=+la(r,l),f>i):0)n=f>n?f:n;if(!(n>0.0)){t[a>>2]=A;n=i}}h=s;return+n}function ca(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;var n=0.0,f=0.0,l=0,s=0;s=h;h=h+16|0;l=s;e=oa(e,A)|0;a=a+(((e|0)<0?5:e)<<2)|0;e=t[a>>2]|0;if(!e){t[a>>2]=A;n=i}else{fa(e,l);n=+la(r,l);n=n>i?n:0.0;e=t[a>>2]|0;if((t[e+32>>2]|0)!=0?(na(e,l),f=+la(r,l),f>i):0)n=f>n?f:n;if(!(n>0.0)){t[a>>2]=A;n=i}}h=s;return+n}function oa(e,A){e=e|0;A=A|0;var r=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0;r=t[e+32>>2]|0;a=t[A+32>>2]|0;if((r|0)==(a|0))ge(111578,111543,276,111588);do{if((i[r+36>>0]|0)!=0?(i[a+36>>0]|0)!=0:0){l=+c[e>>3];if(l==0.0?+c[e+8>>3]==0.0:0){r=-1;break}s=+c[A>>3];f=+c[A+8>>3];if(!(s==0.0&f==0.0)){n=+c[e+8>>3];if(fl?2:1;break}r=sn){if(r){r=6;break}r=s>l?8:7;break}if(!r)if(s>l)r=5;else r=-1;else r=3}else r=-1}else r=-1}while(0);return r|0}function ua(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;c=h;h=h+32|0;r=c+24|0;i=c+16|0;a=c;n=qi(e)|0;f=e+4|0;l=i+4|0;s=e+20|0;A=0;while(1){if((A|0)>=(t[f>>2]|0)){A=0;break}o=KF(32)|0;b=(t[e>>2]|0)+(A*40|0)|0;u=o+12|0;t[o+28>>2]=b;wa(a,b);t[u>>2]=t[a>>2];t[u+4>>2]=t[a+4>>2];t[u+8>>2]=t[a+8>>2];t[u+12>>2]=t[a+12>>2];u=t[u>>2]|0;t[i>>2]=(((t[o+20>>2]|0)-u|0)/2|0)+u;u=t[o+16>>2]|0;t[l>>2]=(((t[o+24>>2]|0)-u|0)/2|0)+u;t[r>>2]=t[i>>2];t[r+4>>2]=t[i+4>>2];t[o+8>>2]=ka(r,n)|0;u=t[s>>2]|0;if(!(L5[t[u>>2]&63](u,o,1)|0)){A=-1;break}else A=A+1|0}h=c;return A|0}function ba(e){e=e|0;var A=0,r=0,i=0;r=e+20|0;i=t[r>>2]|0;A=e+24|0;e=L5[t[i>>2]&63](i,0,128)|0;while(1){if(!e)break;i=t[A>>2]|0;Pn(i,e+12|0,t[e+28>>2]|0,i,0)|0;i=t[r>>2]|0;e=L5[t[i>>2]&63](i,e,8)|0}return}function ha(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;i=e+20|0;a=Oh(t[i>>2]|0)|0;r=0;while(1){if(!(Oh(t[i>>2]|0)|0))break;n=t[i>>2]|0;e=t[(t[n+8>>2]|0)+4>>2]|0;if(!e){f=8;break}A=t[(t[n+4>>2]|0)+8>>2]|0;if((A|0)<0)e=t[e+8>>2]|0;else e=e+(0-A)|0;if(!e){f=8;break}L5[t[n>>2]&63](n,e,4096)|0;G2(e);r=r+1|0}if((f|0)==8)ge(111649,111543,616,111652);if((a|0)==(r|0))return;else ge(111664,111543,623,111652)}function wa(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0.0,f=0,l=0,s=0,o=0.0;r=t[A+32>>2]|0;if(!r){i=0.0;a=0.0}else{i=+c[r>>3];a=+c[r+8>>3]}o=+c[A>>3];s=~~+L(+(o-i));n=+c[A+8>>3];l=~~+L(+(n-a));f=~~+H(+(o+i+ +c[A+16>>3]));if((f|0)==2147483647)ge(111676,111543,264,111703);r=~~+H(+(n+a+ +c[A+24>>3]));if((r|0)==2147483647)ge(111713,111543,266,111703);else{t[e>>2]=s;t[e+4>>2]=l;t[e+8>>2]=f;t[e+12>>2]=r;return}}function ka(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;a=0;i=t[e>>2]|0;r=t[e+4>>2]|0;while(1){e=A+-1|0;if((A|0)<=0)break;l=i>>>e&1;A=r>>>e&1;n=A+-1|0;f=n&(i^r);n=n&0-l;a=l<<1|a<<2|l^A;A=e;i=f^i^n;r=f^r^n}return a|0}function da(e){e=e|0;var A=0,r=0,a=0,n=0;A=U2(e)|0;if(A>>>0>=(t[47365]|0)>>>0){A=A+11|0;t[47365]=A;A=AM(t[47366]|0,A)|0;t[47366]=A;if(!A)A=0;else r=4}else{A=t[47366]|0;r=4}if((r|0)==4){n=A;while(1){r=i[e>>0]|0;if(!(r<<24>>24))break;a=r&255;if(x1(a)|0)r=(R1(a)|0)&255;i[n>>0]=r;n=n+1|0;e=e+1|0}i[n>>0]=0}return A|0}function va(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,f=0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0.0;D=h;h=h+144|0;v=D+96|0;w=D+80|0;p=D+124|0;g=D+72|0;E=D+64|0;B=D+56|0;G=D+48|0;L=D+40|0;Q=D+32|0;y=D+24|0;C=D+16|0;I=D+8|0;Z=D;f=D+120|0;o=D+116|0;u=D+112|0;b=D+108|0;t[A+32>>2]=r;d=e;while(1)if((i[d>>0]|0)==32)d=d+1|0;else break;t[b>>2]=255;e=i[d>>0]|0;e:do{if(e<<24>>24==35){t[w>>2]=f;t[w+4>>2]=o;t[w+8>>2]=u;t[w+12>>2]=b;if((V3(d,111755,w)|0)<=2){e=i[d>>0]|0;k=12;break}switch(r|0){case 0:{z=+((t[f>>2]|0)>>>0)*.00392156862745098;c[G>>3]=z;a=+((t[o>>2]|0)>>>0)*.00392156862745098;c[L>>3]=a;l=+((t[u>>2]|0)>>>0)*.00392156862745098;c[Q>>3]=l;s=+((t[b>>2]|0)>>>0)*.00392156862745098;ga(z,a,l,g,E,B);c[A>>3]=+c[g>>3];c[A+8>>3]=+c[E>>3];c[A+16>>3]=+c[B>>3];c[A+24>>3]=s;e=0;break e}case 1:{i[A>>0]=t[f>>2];i[A+1>>0]=t[o>>2];i[A+2>>0]=t[u>>2];i[A+3>>0]=t[b>>2];e=0;break e}case 3:{l=+((t[f>>2]|0)>>>0)*.00392156862745098;c[G>>3]=l;s=+((t[o>>2]|0)>>>0)*.00392156862745098;c[L>>3]=s;z=+((t[u>>2]|0)>>>0)*.00392156862745098;c[Q>>3]=z;ma(l,s,z,y,C,I,Z);i[A>>0]=~~+c[y>>3]*255;i[A+1>>0]=~~+c[C>>3]*255;i[A+2>>0]=~~+c[I>>3]*255;i[A+3>>0]=~~+c[Z>>3]*255;e=0;break e}case 2:{t[A>>2]=(((t[f>>2]|0)*65535|0)>>>0)/255|0;t[A+4>>2]=(((t[o>>2]|0)*65535|0)>>>0)/255|0;t[A+8>>2]=(((t[u>>2]|0)*65535|0)>>>0)/255|0;t[A+12>>2]=(((t[b>>2]|0)*65535|0)>>>0)/255|0;e=0;break e}case 4:{c[A>>3]=+((t[f>>2]|0)>>>0)*.00392156862745098;c[A+8>>3]=+((t[o>>2]|0)>>>0)*.00392156862745098;c[A+16>>3]=+((t[u>>2]|0)>>>0)*.00392156862745098;c[A+24>>3]=+((t[b>>2]|0)>>>0)*.00392156862745098;e=0;break e}default:{e=0;break e}}}else k=12}while(0);e:do{if((k|0)==12){if(!(e<<24>>24!=46?((e&255)+-48|0)>>>0>=10:0)){e=U2(d)|0;if(e>>>0>=(t[47367]|0)>>>0){e=e+11|0;t[47367]=e;e=AM(t[47368]|0,e)|0;t[47368]=e;if(!e){e=-1;break}}else e=t[47368]|0;o=e;f=d;A:while(1){u=f+1|0;f=i[f>>0]|0;switch(f<<24>>24){case 0:break A;case 44:{f=32;break}default:{}}i[o>>0]=f;o=o+1|0;f=u}i[o>>0]=0;t[v>>2]=g;t[v+4>>2]=E;t[v+8>>2]=B;if((V3(e,111769,v)|0)==3){s=+c[g>>3];s=s<1.0?s:1.0;s=s>0.0?s:0.0;c[g>>3]=s;l=+c[E>>3];l=l<1.0?l:1.0;l=l>0.0?l:0.0;c[E>>3]=l;a=+c[B>>3];a=a<1.0?a:1.0;a=a>0.0?a:0.0;c[B>>3]=a;switch(r|0){case 0:{c[A>>3]=s;c[A+8>>3]=l;c[A+16>>3]=a;c[A+24>>3]=1.0;e=0;break e}case 1:{pa(s,l,a,G,L,Q);i[A>>0]=~~(+c[G>>3]*255.0);i[A+1>>0]=~~(+c[L>>3]*255.0);i[A+2>>0]=~~(+c[Q>>3]*255.0);i[A+3>>0]=-1;e=0;break e}case 3:{pa(s,l,a,G,L,Q);ma(+c[G>>3],+c[L>>3],+c[Q>>3],y,C,I,Z);i[A>>0]=~~+c[y>>3]*255;i[A+1>>0]=~~+c[C>>3]*255;i[A+2>>0]=~~+c[I>>3]*255;i[A+3>>0]=~~+c[Z>>3]*255;e=0;break e}case 2:{pa(s,l,a,G,L,Q);t[A>>2]=~~(+c[G>>3]*65535.0);t[A+4>>2]=~~(+c[L>>3]*65535.0);t[A+8>>2]=~~(+c[Q>>3]*65535.0);t[A+12>>2]=65535;e=0;break e}case 4:{pa(s,l,a,G,L,Q);c[A>>3]=+c[G>>3];c[A+8>>3]=+c[L>>3];c[A+16>>3]=+c[Q>>3];c[A+24>>3]=1.0;e=0;break e}default:{e=0;break e}}}}f=Ea(d)|0;t[p>>2]=f;if(!f)e=-1;else{e=t[47369]|0;if(!(((e|0)!=0?(m=t[e>>2]|0,(i[m>>0]|0)==(i[f>>0]|0)):0)?(e1(m,f)|0)==0:0)){e=r8(p,25948,2491,12,103)|0;t[47369]=e;if(!e)switch(r|0){case 0:{t[A>>2]=0;t[A+4>>2]=0;t[A+8>>2]=0;t[A+12>>2]=0;t[A+16>>2]=0;t[A+20>>2]=0;c[A+24>>3]=1.0;e=1;break e}case 1:{i[A+2>>0]=0;i[A+1>>0]=0;i[A>>0]=0;i[A+3>>0]=-1;e=1;break e}case 3:{t[A>>2]=0;e=1;break e}case 2:{t[A+8>>2]=0;t[A+4>>2]=0;t[A>>2]=0;t[A+12>>2]=65535;e=1;break e}case 4:{t[A>>2]=0;t[A+4>>2]=0;t[A+8>>2]=0;t[A+12>>2]=0;t[A+16>>2]=0;t[A+20>>2]=0;c[A+24>>3]=1.0;e=1;break e}default:{e=1;break e}}}switch(r|0){case 0:{c[A>>3]=+(n[e+4>>0]|0)*.00392156862745098;c[A+8>>3]=+(n[e+5>>0]|0)*.00392156862745098;c[A+16>>3]=+(n[e+6>>0]|0)*.00392156862745098;c[A+24>>3]=+(n[e+10>>0]|0)*.00392156862745098;e=0;break e}case 1:{i[A>>0]=i[e+7>>0]|0;i[A+1>>0]=i[e+8>>0]|0;i[A+2>>0]=i[e+9>>0]|0;i[A+3>>0]=i[e+10>>0]|0;e=0;break e}case 3:{l=+(n[e+7>>0]|0)*.00392156862745098;c[G>>3]=l;s=+(n[e+8>>0]|0)*.00392156862745098;c[L>>3]=s;z=+(n[e+9>>0]|0)*.00392156862745098;c[Q>>3]=z;ma(l,s,z,y,C,I,Z);i[A>>0]=~~+c[y>>3]*255;i[A+1>>0]=~~+c[C>>3]*255;i[A+2>>0]=~~+c[I>>3]*255;i[A+3>>0]=~~+c[Z>>3]*255;e=0;break e}case 2:{t[A>>2]=(n[e+7>>0]|0)*257;t[A+4>>2]=(n[e+8>>0]|0)*257;t[A+8>>2]=(n[e+9>>0]|0)*257;t[A+12>>2]=(n[e+10>>0]|0)*257;e=0;break e}case 4:{c[A>>3]=+(n[e+7>>0]|0)*.00392156862745098;c[A+8>>3]=+(n[e+8>>0]|0)*.00392156862745098;c[A+16>>3]=+(n[e+9>>0]|0)*.00392156862745098;c[A+24>>3]=+(n[e+10>>0]|0)*.00392156862745098;e=0;break e}default:{e=0;break e}}}}}while(0);h=D;return e|0}function ga(e,A,r,i,a,t){e=+e;A=+A;r=+r;i=i|0;a=a|0;t=t|0;var n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0;f=Ar?A:r;u=ue?e:f);n=f/u;if(u>0.0)if(n>0.0){l=(u-e)/f;s=(u-A)/f;o=(u-r)/f;do{if(!(u==e)){if(u==A){e=l+2.0-o;break}if(u==r)e=s+4.0-l;else e=0.0}else e=(A-r)/f}while(0);e=e*60.0;if(e<0.0)e=e+360.0}else e=0.0;else{n=0.0;e=0.0}c[i>>3]=e*.002777777777777778;c[t>>3]=u;c[a>>3]=n;return}function ma(e,A,r,i,a,t,n){e=+e;A=+A;r=+r;i=i|0;a=a|0;t=t|0;n=n|0;c[i>>3]=1.0-e;c[a>>3]=1.0-A;c[t>>3]=1.0-r;A=+c[i>>3];r=+c[a>>3];r=A>3]=r;A=+c[t>>3];r=A>3]=r;c[i>>3]=+c[i>>3]-r;c[a>>3]=+c[a>>3]-+c[n>>3];c[t>>3]=+c[t>>3]-+c[n>>3];return}function pa(e,A,r,i,a,t){e=+e;A=+A;r=+r;i=i|0;a=a|0;t=t|0;var n=0.0,f=0.0,l=0.0,s=0,o=0;e:do{if(!(A<=0.0)){f=!(e>=1.0)?e*6.0:0.0;o=~~f;f=f-+(o|0);e=(1.0-A)*r;l=(1.0-f*A)*r;A=(1.0-(1.0-f)*A)*r;switch(o|0){case 0:{n=e;f=A;e=r;s=8;break e}case 1:{n=e;f=r;e=l;s=8;break e}case 2:{n=A;f=r;s=8;break e}case 3:{n=r;f=l;s=8;break e}case 4:{n=r;f=e;e=A;s=8;break e}case 5:{n=l;f=e;e=r;s=8;break e}default:break e}}else{n=r;f=r;e=r;s=8}}while(0);if((s|0)==8){c[i>>3]=e;c[a>>3]=f;c[t>>3]=n}return}function Ea(e){e=e|0;var A=0,r=0;A=i[e>>0]|0;if(((A<<24>>24!=98?(r=e+1|0,!(A<<24>>24==119|(y1(r,137266,4)|0)==0)):0)?!(A<<24>>24==108|(y1(r,137271,4)|0)==0):0)?(y1(r,137276,8)|0)!=0:0){do{if(A<<24>>24==47){A=C1(r,47)|0;if(!A)e=r;else{if((i[r>>0]|0)!=47){r=(S1(137285,r,4)|0)==0;e=r?A+1|0:e;break}A=t[47370]|0;if((A|0?i[A>>0]|0:0)?S1(137285,A,3)|0:0){e=ya(A,e+2|0)|0;break}e=e+2|0}}else{A=t[47370]|0;if(((A|0)!=0?(i[A>>0]|0)!=0:0)?(S1(137285,A,3)|0)!=0:0)e=ya(A,e)|0}}while(0);e=da(e)|0}return e|0}function Ba(e,A){e=e|0;A=A|0;return N1(t[e>>2]|0,t[A>>2]|0)|0}function ya(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;a=h;h=h+16|0;i=a;n=U2(e)|0;n=(U2(A)|0)+n|0;r=n+13|0;if((n+3|0)>>>0<(t[47371]|0)>>>0)r=t[47372]|0;else{t[47371]=r;r=AM(t[47372]|0,r)|0;t[47372]=r}t[i>>2]=e;t[i+4>>2]=A;T4(r,137290,i)|0;h=a;return t[47372]|0}function Ca(e){e=e|0;t[47370]=e;return}function Ia(e,A,r,i,a){e=e|0;A=+A;r=+r;i=+i;a=+a;var t=0,n=0;t=h;h=h+208|0;n=t;Za(n,+c[e>>3],+c[e+8>>3],A,r,i,a);e=Ga(n)|0;h=t;return e|0}function Za(e,A,r,i,a,t,n){e=e|0;A=+A;r=+r;i=+i;a=+a;t=+t;n=+n;var f=0,l=0;c[e>>3]=A;c[e+8>>3]=r;l=e+16|0;c[l>>3]=i;f=e+24|0;c[f>>3]=a;c[e+32>>3]=0.0;r=+R(+(+Y(+t)/a),+(+W(+t)/i));c[e+56>>3]=r;a=+R(+(+Y(+n)/a),+(+W(+n)/i));c[e+40>>3]=1.0;c[e+48>>3]=0.0;a=a-+L(+((a-r)*.15915494309189535))*6.283185307179586;c[e+64>>3]=n-t>3.141592653589793&a-r<3.141592653589793?a+6.283185307179586:a;Ya(e);Fa(e);Ma(e);n=+c[l>>3];n=(n-+c[f>>3])/n;c[e+168>>3]=n;c[e+176>>3]=(2.0-n)*n;n=1.0-n;c[e+184>>3]=n;c[e+192>>3]=n*n;return}function Ga(e){e=e|0;var A=0,r=0.0,i=0,a=0.0,t=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0.0,h=0.0,w=0,k=0,d=0.0,v=0.0,g=0.0,m=0.0,p=0.0,E=0.0,B=0.0,y=0.0,C=0.0;k=KF(8)|0;t=+c[e+56>>3];a=+c[e+64>>3]-t;w=1;A=0;while(1){h=a/+(w|0);if(!(A<<24>>24==0&(w|0)<1024))break;e:do{if(!(h<=1.5707963267948966))A=0;else{r=t;i=0;A=1;while(1){if(!(A<<24>>24!=0&(i|0)<(w|0)))break e;b=r+h;A=+La(e,r,b)<=1.0e-05&1;r=b;i=i+1|0}}}while(0);w=w<<1}f=+W(+t);m=+Y(+t);i=e+16|0;v=+c[i>>3];p=v*f;l=e+24|0;r=+c[l>>3];n=r*m;f=r*f;r=+c[e>>3];s=e+40|0;g=+c[s>>3];o=e+48|0;d=+c[o>>3];a=g*p+r-d*n;u=e+8|0;b=+c[u>>3];n=d*p+g*n+b;v=-(m*v);Qa(k,r,b);Da(k,a,n);b=+F(+(h*.5));b=+Y(+h)*.3333333333333333*(+D(+(b*b*3.0+4.0))+-1.0);r=t;t=n;n=d*v+g*f;f=g*v-d*f;A=0;while(1){if((A|0)>=(w|0))break;d=r+h;m=+W(+d);p=+Y(+d);B=+c[i>>3];C=B*m;E=+c[l>>3];g=E*p;m=E*m;E=+c[s>>3];y=+c[o>>3];v=E*C+ +c[e>>3]-y*g;g=y*C+E*g+ +c[u>>3];B=-(p*B);p=E*B-y*m;m=y*B+E*m;za(k,a+f*b,t+n*b,v-p*b,g-m*b,v,g);r=d;a=v;t=g;n=m;f=p;A=A+1|0}Wa(k);return k|0}function La(e,A,r){e=e|0;A=+A;r=+r;var i=0.0,a=0.0,t=0.0,n=0.0,f=0.0;i=r+A;f=+c[e+16>>3];a=+c[e+24>>3]/f;n=+W(+i);t=+W(+(i*2.0));i=+W(+(i*3.0));e=a<.25?10392:10648;return+(((a*.001+4.98)*a+.207)/(a+.0067)*f*+x(+(((+c[e+32>>3]*a+ +c[e+40>>3])*a+ +c[e+48>>3])/(+c[e+56>>3]+a)*n+((+c[e>>3]*a+ +c[e+8>>3])*a+ +c[e+16>>3])/(+c[e+24>>3]+a)+((+c[e+64>>3]*a+ +c[e+72>>3])*a+ +c[e+80>>3])/(+c[e+88>>3]+a)*t+((+c[e+96>>3]*a+ +c[e+104>>3])*a+ +c[e+112>>3])/(+c[e+120>>3]+a)*i+(((+c[e+160>>3]*a+ +c[e+168>>3])*a+ +c[e+176>>3])/(+c[e+184>>3]+a)*n+((+c[e+128>>3]*a+ +c[e+136>>3])*a+ +c[e+144>>3])/(+c[e+152>>3]+a)+((+c[e+192>>3]*a+ +c[e+200>>3])*a+ +c[e+208>>3])/(+c[e+216>>3]+a)*t+((+c[e+224>>3]*a+ +c[e+232>>3])*a+ +c[e+240>>3])/(+c[e+248>>3]+a)*i)*(r-A))))}function Qa(e,A,r){e=e|0;A=+A;r=+r;var i=0;t[47373]=100;i=KF(1600)|0;t[e>>2]=i;c[i>>3]=A;c[i+8>>3]=r;t[e+4>>2]=1;return}function Da(e,A,r){e=e|0;A=+A;r=+r;var i=0,a=0;a=t[e>>2]|0;i=(t[e+4>>2]|0)+-1|0;za(e,+c[a+(i<<4)>>3],+c[a+(i<<4)+8>>3],A,r,A,r);return}function za(e,A,r,i,a,n,f){e=e|0;A=+A;r=+r;i=+i;a=+a;n=+n;f=+f;var l=0,s=0,o=0,u=0;o=e+4|0;l=t[o>>2]|0;s=t[47373]|0;if((l+3|0)<(s|0))e=t[e>>2]|0;else{t[47373]=s<<1;l=Q2(t[e>>2]|0,s<<5)|0;t[e>>2]=l;e=l;l=t[o>>2]|0}c[e+(l<<4)>>3]=A;u=l+1|0;c[e+(l<<4)+8>>3]=r;c[e+(u<<4)>>3]=i;s=l+2|0;c[e+(u<<4)+8>>3]=a;c[e+(s<<4)>>3]=n;t[o>>2]=l+3;c[e+(s<<4)+8>>3]=f;return}function Wa(e){e=e|0;var A=0;A=t[e>>2]|0;Da(e,+c[A>>3],+c[A+8>>3]);t[e>>2]=Q2(t[e>>2]|0,t[e+4>>2]<<4)|0;t[47373]=0;return}function Ya(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0.0;i=+c[e+16>>3];A=+c[e+24>>3];A=+D(+(i*i-A*A));i=A*+c[e+40>>3];A=A*+c[e+48>>3];a=+c[e>>3];c[e+104>>3]=a-i;r=+c[e+8>>3];c[e+112>>3]=r-A;c[e+120>>3]=a+i;c[e+128>>3]=r+A;return}function Fa(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0.0,t=0.0,n=0.0,f=0.0,l=0.0;i=+c[e+16>>3];f=+c[e+56>>3];l=+W(+f)*i;A=+c[e+24>>3];f=+Y(+f)*A;n=+c[e+64>>3];i=+W(+n)*i;A=+Y(+n)*A;n=+c[e>>3];r=+c[e+40>>3];a=+c[e+48>>3];c[e+72>>3]=r*l+n-a*f;t=+c[e+8>>3];c[e+80>>3]=a*l+t+r*f;c[e+88>>3]=n+r*i-a*A;c[e+96>>3]=t+a*i+r*A;return}function Ma(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0.0,t=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0;s=+c[e+24>>3];o=+c[e+16>>3];a=s/o;u=+c[e+48>>3];b=+Q(+u)<.1;l=+c[e+40>>3];do{if(b){A=u/l;r=+N(+(A*a));i=-r;if(l<0.0){A=+N(+(A/a));a=i;i=3.141592653589793-r;r=4.71238898038469-A;A=1.5707963267948966-A;break}else{A=+N(+(A/a));a=-3.141592653589793-r;r=1.5707963267948966-A;A=-1.5707963267948966-A;break}}else{A=l/u;r=+N(+(A/a));i=r+1.5707963267948966;if(u<0.0){A=+N(+(A*a));a=r+-1.5707963267948966;r=A+3.141592653589793;break}else{A=+N(+(A*a));a=i;i=r+4.71238898038469;r=A;A=A+-3.141592653589793;break}}}while(0);n=+c[e+56>>3];a=a-+L(+((a-n)*.15915494309189535))*6.283185307179586;A=A-+L(+((A-n)*.15915494309189535))*6.283185307179586;t=i-+L(+((i-n)*.15915494309189535))*6.283185307179586;n=r-+L(+((r-n)*.15915494309189535))*6.283185307179586;f=+c[e+64>>3];if(!(a<=f)){a=+c[e+72>>3];r=+c[e+88>>3];r=a>3]-s*+Y(+a)*u;c[e+136>>3]=r;if(!(A<=f)){a=+c[e+80>>3];i=+c[e+96>>3];i=a>3]+ +Y(+A)*s*l;c[e+144>>3]=i;if(!(t<=f)){t=+c[e+72>>3];A=+c[e+88>>3];A=t>A?t:A}else A=+W(+t)*o*l+ +c[e>>3]-s*+Y(+t)*u;c[e+152>>3]=A-r;if(!(n<=f)){u=+c[e+80>>3];A=+c[e+96>>3];A=u>A?u:A}else A=+W(+n)*o*u+ +c[e+8>>3]+ +Y(+n)*s*l;c[e+160>>3]=A-i;return}function Va(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0,l=0,s=0.0,o=0,u=0;u=h;h=h+80|0;o=u;Na(e);s=+c[r+56>>3];n=+c[r+64>>3];switch(i[r+80>>0]|0){case 116:{n=(+c[r+48>>3]-+Ra(A))*.5+n;a=4;break}case 98:{n=n-(+c[r+48>>3]-+Ra(A))*.5;a=4;break}default:{}}if((a|0)==4)n=n+-1.0;c[o>>3]=s;c[o+8>>3]=n;t[o+20>>2]=t[r+8>>2];t[o+16>>2]=t[r+4>>2];c[o+32>>3]=+c[r+16>>3];l=e+16|0;a=Hw(t[(t[l>>2]|0)+8>>2]|0,137297)|0;r=o+56|0;t[r>>2]=a;f=o+60|0;t[f>>2]=t[(t[l>>2]|0)+212>>2];l=o+64|0;i[l>>0]=0;if(!((a|0)!=0?(i[a>>0]|0)!=0:0))t[r>>2]=137308;if((i[A+4>>0]|0)==1){r=t[A>>2]|0;ii(e,t[(t[e>>2]|0)+336>>2]|0);a=t[r+24>>2]|0;if(!a)$r(e,137314);else $r(e,a);Ja(e,r,o);if(i[l>>0]|0)G2(t[f>>2]|0)}else xa(e,t[A>>2]|0,o);Ha(e);h=u;return}function Na(e){e=e|0;var A=0,r=0,i=0;A=eB(e)|0;r=t[A>>2]|0;e=t[r+4>>2]|0;t[A+4>>2]=e;t[A+12>>2]=t[r+12>>2];switch(e|0){case 2:{e=r+8|0;i=6;break}case 0:{e=r+8|0;i=6;break}case 1:{e=r+8|0;i=6;break}case 3:{e=r+8|0;i=6;break}default:{}}if((i|0)==6)t[A+8>>2]=t[e>>2];t[A+208>>2]=t[r+208>>2];t[A+228>>2]=t[r+228>>2];t[A+244>>2]=t[r+244>>2];i=A+260|0;a[i>>1]=a[i>>1]&-2|a[r+260>>1]&1;return}function Ra(e){e=e|0;var A=0.0,r=0,a=0;switch(i[e+4>>0]|0){case 1:{r=t[e>>2]|0;e=r+72|0;r=r+56|0;a=5;break}case 3:{r=t[e>>2]|0;e=r+24|0;r=r+8|0;a=5;break}case 2:{r=t[e>>2]|0;e=r+32|0;r=r+16|0;a=5;break}default:A=0.0}if((a|0)==5)A=+c[e>>3]-+c[r>>3];return+A}function xa(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0.0,w=0.0,k=0,d=0,v=0;u=h;h=h+96|0;l=u+64|0;f=u+32|0;n=u+16|0;s=u;o=a[A+4>>1]|0;if(o<<16>>16>=1){d=A+8|0;w=+c[A+24>>3];b=+c[d>>3];c[s>>3]=(b+w)*.5+ +c[r>>3];c[s+8>>3]=(+c[A+16>>3]+ +c[A+32>>3])*.5+ +c[r+8>>3];k=t[A>>2]|0;v=r+16|0;r=i[A+6>>0]|0;t[n>>2]=t[s>>2];t[n+4>>2]=t[s+4>>2];t[n+8>>2]=t[s+8>>2];t[n+12>>2]=t[s+12>>2];t[f>>2]=t[v>>2];t[f+4>>2]=t[v+4>>2];t[f+8>>2]=t[v+8>>2];t[f+12>>2]=t[v+12>>2];t[f+16>>2]=t[v+16>>2];t[f+20>>2]=t[v+20>>2];t[f+24>>2]=t[v+24>>2];t[f+28>>2]=t[v+28>>2];t[l>>2]=t[d>>2];t[l+4>>2]=t[d+4>>2];t[l+8>>2]=t[d+8>>2];t[l+12>>2]=t[d+12>>2];t[l+16>>2]=t[d+16>>2];t[l+20>>2]=t[d+20>>2];t[l+24>>2]=t[d+24>>2];t[l+28>>2]=t[d+28>>2];et(e,o<<16>>16,k,n,(w-b)*.5,f,l,r)}h=u;return}function Ja(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0,s=0,o=0.0,u=0.0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;y=h;h=h+176|0;g=y+96|0;p=y+64|0;E=y+136|0;w=y;k=y+128|0;d=A+48|0;t[p>>2]=t[d>>2];t[p+4>>2]=t[d+4>>2];t[p+8>>2]=t[d+8>>2];t[p+12>>2]=t[d+12>>2];t[p+16>>2]=t[d+16>>2];t[p+20>>2]=t[d+20>>2];t[p+24>>2]=t[d+24>>2];t[p+28>>2]=t[d+28>>2];o=+c[r>>3];u=+c[r+8>>3];d=A+84|0;f=t[d>>2]|0;if(!(t[A>>2]|0))B=(t[A+8>>2]|0)!=0;else B=1;m=A+108|0;l=t[m>>2]|0;if(l|0)Pa(r,l,186544);c[p>>3]=+c[p>>3]+o;v=p+16|0;c[v>>3]=+c[v>>3]+o;v=p+8|0;c[v>>3]=+c[v>>3]+u;v=p+24|0;c[v>>3]=+c[v>>3]+u;if(B?(t[e+152>>2]&4|0)==0:0){t[g>>2]=t[p>>2];t[g+4>>2]=t[p+4>>2];t[g+8>>2]=t[p+8>>2];t[g+12>>2]=t[p+12>>2];t[g+16>>2]=t[p+16>>2];t[g+20>>2]=t[p+20>>2];t[g+24>>2]=t[p+24>>2];t[g+28>>2]=t[p+28>>2];v=Xa(e,r,A,g,E)|0}else v=0;b=A+42|0;l=a[b>>1]|0;if(!(l&32)){s=t[A+20>>2]|0;if(s){l=Sa(e,s,t[A+28>>2]|0,l&65535,k)|0;if(!(a[b>>1]&4)){t[g>>2]=t[p>>2];t[g+4>>2]=t[p+4>>2];t[g+8>>2]=t[p+8>>2];t[g+12>>2]=t[p+12>>2];t[g+16>>2]=t[p+16>>2];t[g+20>>2]=t[p+20>>2];t[g+24>>2]=t[p+24>>2];t[g+28>>2]=t[p+28>>2];ni(e,g,l)}else{b=n[A+33>>0]|0;t[g>>2]=t[p>>2];t[g+4>>2]=t[p+4>>2];t[g+8>>2]=t[p+8>>2];t[g+12>>2]=t[p+12>>2];t[g+16>>2]=t[p+16>>2];t[g+20>>2]=t[p+20>>2];t[g+24>>2]=t[p+24>>2];t[g+28>>2]=t[p+28>>2];lN(e,ja(w,g,b)|0,4,4,l)}G2(t[k>>2]|0)}while(1){l=t[f>>2]|0;if(!l)break;Ua(e,l,r);f=f+4|0}f=t[d>>2]|0;ui(e,1.0);l=A+24|0;while(1){s=f+4|0;f=t[f>>2]|0;if(!f)break;if(!(i[f+100>>0]|0)){f=s;continue}Ta(e,f,r,t[l>>2]|0,t[s>>2]|0);f=s}if(i[A+33>>0]|0){t[g>>2]=t[p>>2];t[g+4>>2]=t[p+4>>2];t[g+8>>2]=t[p+8>>2];t[g+12>>2]=t[p+12>>2];t[g+16>>2]=t[p+16>>2];t[g+20>>2]=t[p+20>>2];t[g+24>>2]=t[p+24>>2];t[g+28>>2]=t[p+28>>2];Oa(e,A,g)}}if(v|0)_a(e,E);if((B?t[e+152>>2]&4|0:0)?(t[g>>2]=t[p>>2],t[g+4>>2]=t[p+4>>2],t[g+8>>2]=t[p+8>>2],t[g+12>>2]=t[p+12>>2],t[g+16>>2]=t[p+16>>2],t[g+20>>2]=t[p+20>>2],t[g+24>>2]=t[p+24>>2],t[g+28>>2]=t[p+28>>2],Xa(e,r,A,g,E)|0):0)_a(e,E);if(t[m>>2]|0)qa(r,186544);h=y;return}function Ha(e){e=e|0;var A=0;A=t[e+16>>2]|0;t[A+208>>2]=0;t[A+228>>2]=0;t[A+244>>2]=0;t[A+212>>2]=0;AB(e);return}function Pa(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0;f=e+16|0;a=t[f>>2]|0;if(a|0){if(!(t[A>>2]|0)){a=0;n=r}else{t[r>>2]=a;a=t[A>>2]|0;n=f}t[n>>2]=a}a=t[e+20>>2]|0;if(a|0){n=A+4|0;if(!(t[n>>2]|0)){a=0;n=r}else{t[r+4>>2]=a;a=t[n>>2]|0;n=f}t[n+4>>2]=a}i=+c[e+32>>3];if(i>=0.0){a=A+16|0;if(!(+c[a>>3]>=0.0))i=-1.0;else{c[r+16>>3]=i;i=+c[a>>3];r=f}c[r+16>>3]=i}return}function Xa(e,A,r,n,f){e=e|0;A=A|0;r=r|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+224|0;u=m+8|0;c=m;g=m+40|0;s=m+184|0;l=m+56|0;o=t[e+16>>2]|0;b=o+208|0;t[f>>2]=t[b>>2];w=o+228|0;t[f+4>>2]=t[w>>2];k=o+244|0;t[f+8>>2]=t[k>>2];d=o+212|0;t[f+12>>2]=t[d>>2];v=o+260|0;i[f+16>>0]=(a[v>>1]<<15&65535)<<16>>16>>15;f=t[r+16>>2]|0;if((f|0)!=0?(i[f>>0]|0)!=0:0)l=0;else{cw(g,128,l);l=A+60|0;f=t[l>>2]|0;if(!f){f=o3(iB(e,t[o+8>>2]|0,g)|0)|0;t[l>>2]=f;i[A+64>>0]=1}bw(g,f)|0;l=t[47374]|0;t[47374]=l+1;t[c>>2]=l;T4(s,137391,c)|0;bw(g,s)|0;l=g+4|0;f=t[l>>2]|0;if(f>>>0>=(t[g+8>>2]|0)>>>0){ow(g,1)|0;f=t[l>>2]|0}i[f>>0]=0;f=t[g>>2]|0;t[l>>2]=f;l=1}f=rB(e,0,t[r>>2]|0,t[r+12>>2]|0,t[r+8>>2]|0,f,t[o+8>>2]|0)|0;if(l)hw(g);do{if(f|0){if((t[b>>2]|0)==0?(a[v>>1]&1)==0:0)break;t[u>>2]=t[n>>2];t[u+4>>2]=t[n+4>>2];t[u+8>>2]=t[n+8>>2];t[u+12>>2]=t[n+12>>2];t[u+16>>2]=t[n+16>>2];t[u+20>>2]=t[n+20>>2];t[u+24>>2]=t[n+24>>2];t[u+28>>2]=t[n+28>>2];cB(e,u);Tr(e,t[b>>2]|0,t[w>>2]|0,t[k>>2]|0,t[d>>2]|0)}}while(0);h=m;return f|0}function Sa(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0,l=0;l=h;h=h+16|0;f=l;if(!((KY(A,a,f)|0)<<24>>24)){Ai(e,A);A=1}else{Ai(e,t[a>>2]|0);A=t[a+4>>2]|0;n=+s[f>>2];if(!A)ri(e,137314,r,n);else ri(e,A,r,n);A=i>>>1&1|2}$r(e,137379);h=l;return A|0}function ja(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0,f=0.0,l=0.0;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];i=e+32|0;A=A+16|0;t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];if((r|0)>1){l=+(r|0)*.5;f=+c[e>>3]+l;c[e>>3]=f;r=e+8|0;n=+c[r>>3]+l;c[r>>3]=n;a=+c[i>>3]-l;c[i>>3]=a;i=e+40|0;l=+c[i>>3]-l;c[i>>3]=l}else{a=+c[i>>3];n=+c[e+8>>3];f=+c[e>>3];l=+c[e+40>>3]}c[e+16>>3]=a;c[e+24>>3]=n;c[e+48>>3]=f;c[e+56>>3]=l;return e|0}function Ua(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+176|0;d=p+96|0;v=p+136|0;g=p+64|0;w=p;k=p+128|0;m=A+48|0;t[g>>2]=t[m>>2];t[g+4>>2]=t[m+4>>2];t[g+8>>2]=t[m+8>>2];t[g+12>>2]=t[m+12>>2];t[g+16>>2]=t[m+16>>2];t[g+20>>2]=t[m+20>>2];t[g+24>>2]=t[m+24>>2];t[g+28>>2]=t[m+28>>2];l=+c[r>>3];s=+c[r+8>>3];if(!(t[A>>2]|0))m=(t[A+8>>2]|0)!=0;else m=1;c[g>>3]=+c[g>>3]+l;b=g+16|0;c[b>>3]=+c[b>>3]+l;b=g+8|0;c[b>>3]=+c[b>>3]+s;b=g+24|0;c[b>>3]=+c[b>>3]+s;if(m?(t[e+152>>2]&4|0)==0:0){t[d>>2]=t[g>>2];t[d+4>>2]=t[g+4>>2];t[d+8>>2]=t[g+8>>2];t[d+12>>2]=t[g+12>>2];t[d+16>>2]=t[g+16>>2];t[d+20>>2]=t[g+20>>2];t[d+24>>2]=t[g+24>>2];t[d+28>>2]=t[g+28>>2];b=Xa(e,r,A,d,v)|0}else b=0;u=A+42|0;f=a[u>>1]|0;e:do{if(!(f&32)){o=t[A+20>>2]|0;if(o|0){f=Sa(e,o,t[A+28>>2]|0,f&65535,k)|0;if(!(a[u>>1]&4)){t[d>>2]=t[g>>2];t[d+4>>2]=t[g+4>>2];t[d+8>>2]=t[g+8>>2];t[d+12>>2]=t[g+12>>2];t[d+16>>2]=t[g+16>>2];t[d+20>>2]=t[g+20>>2];t[d+24>>2]=t[g+24>>2];t[d+28>>2]=t[g+28>>2];ni(e,d,f)}else{u=n[A+33>>0]|0;t[d>>2]=t[g>>2];t[d+4>>2]=t[g+4>>2];t[d+8>>2]=t[g+8>>2];t[d+12>>2]=t[g+12>>2];t[d+16>>2]=t[g+16>>2];t[d+20>>2]=t[g+20>>2];t[d+24>>2]=t[g+24>>2];t[d+28>>2]=t[g+28>>2];lN(e,ja(w,d,u)|0,4,4,f)}G2(t[k>>2]|0)}if(i[A+33>>0]|0){t[d>>2]=t[g>>2];t[d+4>>2]=t[g+4>>2];t[d+8>>2]=t[g+8>>2];t[d+12>>2]=t[g+12>>2];t[d+16>>2]=t[g+16>>2];t[d+20>>2]=t[g+20>>2];t[d+24>>2]=t[g+24>>2];t[d+28>>2]=t[g+28>>2];Oa(e,A,d)}f=A+88|0;switch(i[A+92>>0]|0){case 1:{Ja(e,t[f>>2]|0,r);break e}case 3:{$a(e,t[f>>2]|0,r);break e}default:{xa(e,t[f>>2]|0,r);break e}}}}while(0);if(b|0)_a(e,v);if((m?t[e+152>>2]&4|0:0)?(t[d>>2]=t[g>>2],t[d+4>>2]=t[g+4>>2],t[d+8>>2]=t[g+8>>2],t[d+12>>2]=t[g+12>>2],t[d+16>>2]=t[g+16>>2],t[d+20>>2]=t[g+20>>2],t[d+24>>2]=t[g+24>>2],t[d+28>>2]=t[g+28>>2],Xa(e,r,A,d,v)|0):0)_a(e,v);h=p;return}function Ta(e,A,r,l,s){e=e|0;A=A|0;r=r|0;l=l|0;s=s|0;var o=0.0,u=0,b=0.0,w=0.0,k=0,d=0.0,v=0.0,g=0.0,m=0.0,p=0,E=0,B=0.0,y=0,C=0,I=0,Z=0,G=0;I=h;h=h+32|0;y=I+16|0;C=I;d=+c[r>>3];B=+c[r+8>>3];k=(l|0)==0?137314:l;Ai(e,k);$r(e,k);g=+c[A+48>>3];b=+c[A+56>>3];m=+c[A+64>>3];w=+c[A+72>>3];v=g+d;d=m+d;B=b+B;k=A+100|0;r=i[k>>0]|0;if((r&1)!=0?(u=t[A+96>>2]|0,((f[A+80>>1]|0)+(f[A+84>>1]|0)|0)<(t[u+104>>2]|0)):0){r=a[A+86>>1]|0;do{if(r<<16>>16)if(((f[A+82>>1]|0)+(r&65535)|0)==(t[u+100>>2]|0)){Z=i[u+32>>0]|0;G=(Z<<24>>24)/2|0;l=(G<<24>>24)+(n[u+33>>0]|0)|0;r=l;l=l&255;o=B-+(G<<24>>24);u=Z;break}else{u=i[u+32>>0]|0;r=0;l=((u<<24>>24)/2|0)<<24>>24;o=B;break}else{G=i[u+32>>0]|0;l=((G<<24>>24)/2|0)<<24>>24;r=l+(n[u+33>>0]|0)|0;o=B;u=G}}while(0);c[C+8>>3]=o-+(l|0);c[C>>3]=d+ +(((u<<24>>24)/2|0)<<24>>24);t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];Ka(e,y,0.0,w-b+ +(r&255|0)+ +(u<<24>>24));r=i[k>>0]|0}if(r&2?(p=a[A+86>>1]|0,E=t[A+96>>2]|0,((f[A+82>>1]|0)+(p&65535)|0)<(t[E+100>>2]|0)):0){r=a[A+84>>1]|0;do{if(!(r<<16>>16)){r=i[E+32>>0]|0;G=(r<<24>>24)/2|0;u=(G<<24>>24)+(n[E+33>>0]|0)|0;l=u&255;u=u&255;o=+(G<<24>>24);c[C>>3]=v-o-+(u|0);if((t[E+104>>2]|0)==(f[A+80>>1]|0)){l=u<<1&255;break}if((s|0)!=0?(a[s+86>>1]|0)!=p<<16>>16:0)l=~~(+(l&255)-m+ +c[E+64>>3]-o)&255}else{if(((f[A+80>>1]|0)+(r&65535)|0)==(t[E+104>>2]|0)){r=i[E+32>>0]|0;G=(r<<24>>24)/2|0;l=(G&255)+(n[E+33>>0]|0)&255;c[C>>3]=v-+(G<<24>>24);break}r=i[E+32>>0]|0;o=+(((r<<24>>24)/2|0)<<24>>24);c[C>>3]=v-o;if((s|0)!=0?(a[s+86>>1]|0)!=p<<16>>16:0)l=~~(+c[E+64>>3]-m-o)&255;else l=0}}while(0);c[C+8>>3]=B-+(((r<<24>>24)/2|0)<<24>>24);t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];Ka(e,y,m-g+ +(l&255)+ +(r<<24>>24),0.0)}h=I;return}function Oa(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0;w=h;h=h+160|0;b=w+112|0;u=w;l=w+144|0;o=t[A+24>>2]|0;$r(e,(o|0)==0?137314:o);o=A+42|0;f=a[o>>1]|0;if(!(f&384))ii(e,t[(t[e>>2]|0)+336>>2]|0);else{t[l+4>>2]=0;t[l>>2]=0;f=f&65535;if(!(f&256)){if(f&128|0){f=137320;s=4}}else{f=137327;s=4}if((s|0)==4)t[l>>2]=f;ii(e,l)}s=A+33|0;ui(e,+(n[s>>0]|0));e:do{if(!(a[o>>1]&4)){f=a[A+36>>1]&15360;if(!(f<<16>>16)){f=i[s>>0]|0;if((f&255)>1){k=+(f&255)*.5;c[r>>3]=+c[r>>3]+k;u=r+8|0;c[u>>3]=+c[u>>3]+k;u=r+16|0;c[u>>3]=+c[u>>3]-k;u=r+24|0;c[u>>3]=+c[u>>3]-k}t[b>>2]=t[r>>2];t[b+4>>2]=t[r+4>>2];t[b+8>>2]=t[r+8>>2];t[b+12>>2]=t[r+12>>2];t[b+16>>2]=t[r+16>>2];t[b+20>>2]=t[r+20>>2];t[b+24>>2]=t[r+24>>2];t[b+28>>2]=t[r+28>>2];ni(e,b,0);break}l=u+16|0;o=n[s>>0]|0;t[b>>2]=t[r>>2];t[b+4>>2]=t[r+4>>2];t[b+8>>2]=t[r+8>>2];t[b+12>>2]=t[r+12>>2];t[b+16>>2]=t[r+16>>2];t[b+20>>2]=t[r+20>>2];t[b+24>>2]=t[r+24>>2];t[b+28>>2]=t[r+28>>2];ja(l,b,o)|0;do{switch(((f&65535)+-1024|0)>>>10&4194303|0){case 7:{li(e,l,2);break e}case 3:{li(e,u+32|0,2);break e}case 1:{li(e,u+48|0,2);break e}case 0:{r=u+64|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];li(e,u,2);break e}case 11:{li(e,l,3);break e}case 5:{li(e,u+32|0,3);break e}case 2:{r=u+80|0;t[r>>2]=t[l>>2];t[r+4>>2]=t[l+4>>2];t[r+8>>2]=t[l+8>>2];t[r+12>>2]=t[l+12>>2];li(e,u+48|0,3);break e}case 8:{r=u+64|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];li(e,u,3);break e}case 13:{li(e,l,4);break e}case 6:{r=u+80|0;t[r>>2]=t[l>>2];t[r+4>>2]=t[l+4>>2];t[r+8>>2]=t[l+8>>2];t[r+12>>2]=t[l+12>>2];li(e,u+32|0,4);break e}case 10:{r=u+80|0;t[r>>2]=t[l>>2];t[r+4>>2]=t[l+4>>2];t[r+8>>2]=t[l+8>>2];t[r+12>>2]=t[l+12>>2];r=u+96|0;b=u+32|0;t[r>>2]=t[b>>2];t[r+4>>2]=t[b+4>>2];t[r+8>>2]=t[b+8>>2];t[r+12>>2]=t[b+12>>2];li(e,u+48|0,4);break e}case 12:{r=u+64|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];li(e,u,4);break e}case 9:{li(e,l,2);li(e,u+48|0,2);break e}case 4:{r=u+64|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];li(e,u,2);li(e,u+32|0,2);break e}default:break e}}while(0)}else{o=n[s>>0]|0;t[b>>2]=t[r>>2];t[b+4>>2]=t[r+4>>2];t[b+8>>2]=t[r+8>>2];t[b+12>>2]=t[r+12>>2];t[b+16>>2]=t[r+16>>2];t[b+20>>2]=t[r+20>>2];t[b+24>>2]=t[r+24>>2];t[b+28>>2]=t[r+28>>2];lN(e,ja(u,b,o)|0,4,4,0)}}while(0);h=w;return}function _a(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;f=t[e+16>>2]|0;r=f+208|0;if((t[r>>2]|0)==0?(a[f+260>>1]&1)==0:0)e=0;else{Or(e);e=t[r>>2]|0}if((e|0)!=(t[A>>2]|0)){G2(e);t[r>>2]=t[A>>2]}e=f+228|0;r=t[e>>2]|0;n=A+4|0;if((r|0)!=(t[n>>2]|0)){G2(r);t[e>>2]=t[n>>2]}e=f+244|0;r=t[e>>2]|0;n=A+8|0;if((r|0)!=(t[n>>2]|0)){G2(r);t[e>>2]=t[n>>2]}e=f+212|0;r=t[e>>2]|0;n=A+12|0;if((r|0)!=(t[n>>2]|0)){G2(r);t[e>>2]=t[n>>2]}f=f+260|0;a[f>>1]=a[f>>1]&-2|i[A+16>>0]&1;return}function qa(e,A){e=e|0;A=A|0;var r=0.0,i=0;i=t[A>>2]|0;if(i|0)t[e+16>>2]=i;i=t[A+4>>2]|0;if(i|0)t[e+20>>2]=i;r=+c[A+16>>3];if(r>=0.0)c[e+32>>3]=r;return}function Ka(e,A,r,i){e=e|0;A=A|0;r=+r;i=+i;var a=0,n=0,f=0;a=h;h=h+64|0;n=a+32|0;f=a;t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];c[f+16>>3]=+c[A>>3]+r;c[f+24>>3]=+c[A+8>>3]+i;t[n>>2]=t[f>>2];t[n+4>>2]=t[f+4>>2];t[n+8>>2]=t[f+8>>2];t[n+12>>2]=t[f+12>>2];t[n+16>>2]=t[f+16>>2];t[n+20>>2]=t[f+20>>2];t[n+24>>2]=t[f+24>>2];t[n+28>>2]=t[f+28>>2];ni(e,n,1);h=a;return}function $a(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0.0,s=0.0,o=0.0,u=0.0;f=h;h=h+64|0;n=f;s=+c[r>>3];u=s+ +c[A>>3];o=+c[r+8>>3];l=o+ +c[A+8>>3];s=s+ +c[A+16>>3];o=o+ +c[A+24>>3];c[n>>3]=s;c[n+8>>3]=o;c[n+32>>3]=u;c[n+40>>3]=l;c[n+16>>3]=u;c[n+24>>3]=o;c[n+48>>3]=s;c[n+56>>3]=l;a=t[A+36>>2]|0;if(!a)a=t[r+56>>2]|0;r=t[A+32>>2]|0;if(!r)ge(137334,137342,623,137354);if(!(i[r>>0]|0))ge(137368,137342,624,137354);else{ci(e,r,n,4,1,a);h=f;return}}function et(e,A,r,n,f,l,s,o){e=e|0;A=A|0;r=r|0;n=n|0;f=+f;l=l|0;s=s|0;o=o|0;var u=0.0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0.0,F=0,M=0,V=0,N=0.0,R=0.0,x=0,J=0,H=0,P=0;P=h;h=h+128|0;M=P+104|0;x=P+48|0;J=P+16|0;V=P;F=V;t[F>>2]=0;t[F+4>>2]=0;N=+c[n>>3];R=N-f;Y=N+f;F=V+8|0;c[F>>3]=(+c[s+24>>3]-+c[s+8>>3])*.5+ +c[n+8>>3];_r(e,1);L=J+16|0;Q=J+4|0;D=J+24|0;z=x+4|0;W=x+16|0;v=(o|0)==0;g=x+24|0;m=x+8|0;p=x+32|0;E=x+40|0;B=x+48|0;y=l+16|0;C=l+4|0;I=J+8|0;k=0;while(1){if((k|0)>=(A|0))break;switch(i[r+(k*24|0)+6>>0]|0){case 108:{f=R;break}case 114:{f=Y-+c[r+(k*24|0)+8>>3];break}default:f=N-+c[r+(k*24|0)+8>>3]*.5}c[n>>3]=f;Z=r+(k*24|0)+16|0;c[F>>3]=+c[F>>3]-+c[Z>>3];G=r+(k*24|0)+4|0;w=t[r+(k*24|0)>>2]|0;d=0;while(1){if((d|0)>=(a[G>>1]|0))break;b=w+4|0;o=t[b>>2]|0;if(o){c[L>>3]=+c[(+c[o+16>>3]>0.0?o:l)+16>>3];t[J>>2]=t[((t[o>>2]|0)==0?l:o)>>2];s=t[((t[o+4>>2]|0)==0?l:o)+4>>2]|0;t[Q>>2]=s;o=t[o+24>>2]&127;if(!o)H=12;else o=t[D>>2]&-128|o}else{c[L>>3]=+c[y>>3];t[J>>2]=t[l>>2];s=t[C>>2]|0;t[Q>>2]=s;H=12}if((H|0)==12){H=0;o=t[D>>2]&-128}t[D>>2]=o;$r(e,s);t[x>>2]=t[w>>2];t[z>>2]=J;c[W>>3]=+c[w+16>>3];if(v)u=1.0;else u=+c[w+24>>3];c[g>>3]=u;t[I>>2]=t[(t[b>>2]|0)+8>>2];t[m>>2]=t[w+8>>2];b=w+32|0;c[p>>3]=+c[b>>3];c[E>>3]=+c[Z>>3];i[B>>0]=108;c[V>>3]=f;t[M>>2]=t[V>>2];t[M+4>>2]=t[V+4>>2];t[M+8>>2]=t[V+8>>2];t[M+12>>2]=t[V+12>>2];Kr(e,M,x);u=+c[b>>3]+f;c[n>>3]=u;w=w+56|0;d=d+1|0;f=u}k=k+1|0}qr(e);h=P;return}function At(e){e=e|0;G2(t[e>>2]|0);G2(t[e+4>>2]|0);G2(t[e+8>>2]|0);G2(t[e+16>>2]|0);G2(t[e+12>>2]|0);G2(t[e+20>>2]|0);G2(t[e+24>>2]|0);return}function rt(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0;if(e|0){s=e+4|0;r=0;n=t[e>>2]|0;while(1){if((r|0)>=(a[s>>1]|0))break;c=n+4|0;A=0;i=t[n>>2]|0;while(1){if((A|0)>=(a[c>>1]|0))break;G2(t[i>>2]|0);f=t[i+8>>2]|0;if(f|0?(l=t[i+12>>2]|0,l|0):0)F5[l&127](f);A=A+1|0;i=i+56|0}r=r+1|0;n=n+24|0}A=t[e>>2]|0;if(A|0)G2(A);G2(e)}return}function it(e){e=e|0;G2(t[e+32>>2]|0);G2(e);return}function at(e,A){e=e|0;A=A|0;switch(i[e+4>>0]|0){case 1:{tt(t[e>>2]|0);break}case 3:{it(t[e>>2]|0);break}default:rt(t[e>>2]|0)}if(A|0)G2(e);return}function tt(e){e=e|0;var A=0,r=0,i=0;i=e+84|0;if((t[e+100>>2]|0)==-1)Ph(t[i>>2]|0)|0;else{A=t[i>>2]|0;G2(t[e+92>>2]|0);G2(t[e+96>>2]|0);while(1){r=t[A>>2]|0;if(!r)break;nt(r);A=A+4|0}G2(t[i>>2]|0)}At(e);G2(e);return}function nt(e){e=e|0;at(e+88|0,0);At(e);G2(e);return}function ft(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;e=t[(t[(t[e+16>>2]|0)+104>>2]|0)+72>>2]|0;if((i[e+4>>0]|0)!=2?(a=lt(t[e>>2]|0,A)|0,(a|0)!=0):0){t[r>>2]=n[a+35>>0];e=a+48|0}else e=0;return e|0}function lt(e,A){e=e|0;A=A|0;var r=0,i=0;r=t[e+4>>2]|0;if(!((r|0)!=0?(N1(r,A)|0)==0:0))i=3;e:do{if((i|0)==3){r=t[e+84>>2]|0;while(1){e=t[r>>2]|0;if(!e){e=0;break e}e=st(e,A)|0;if(!e)r=r+4|0;else break}}}while(0);return e|0}function st(e,A){e=e|0;A=A|0;var r=0;r=t[e+4>>2]|0;if(!((r|0)!=0?(N1(r,A)|0)==0:0))if((i[e+92>>0]|0)==1)e=lt(t[e+88>>2]|0,A)|0;else e=0;return e|0}function ct(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;return 0}function ot(e){e=e|0;var A=0.0,r=0,n=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;w=e+92|0;t[w>>2]=KF((t[e+100>>2]<<2)+4|0)|0;b=KF((t[e+104>>2]<<2)+4|0)|0;t[e+96>>2]=b;h=e+32|0;u=t[e+84>>2]|0;while(1){o=t[u>>2]|0;if(!o)break;e=a[o+82>>1]|0;A=+c[o+72>>3];if(e<<16>>16==1)n=~~A;else{n=~~((A-+(P((i[h>>0]|0)+-1|0,(e&65535)+-1|0)|0))/+(e&65535));n=(n|0)>1?n:1}l=a[o+80>>1]|0;A=+c[o+64>>3];if(l<<16>>16==1)s=~~A;else{s=~~((A-+(P((i[h>>0]|0)+-1|0,(l&65535)+-1|0)|0))/+(l&65535));s=(s|0)>1?s:1}k=f[o+86>>1]|0;r=(e&65535)+k|0;e=k;while(1){if((e|0)>=(r|0))break;k=(t[w>>2]|0)+(e<<2)|0;d=t[k>>2]|0;t[k>>2]=(d|0)>(n|0)?d:n;e=e+1|0}e=f[o+84>>1]|0;r=(l&65535)+e|0;while(1){if((e|0)>=(r|0))break;d=b+(e<<2)|0;k=t[d>>2]|0;t[d>>2]=(k|0)>(s|0)?k:s;e=e+1|0}u=u+4|0}return}function ut(e){e=e|0;var A=0,r=0;r=h;h=h+16|0;A=r;if(e>>>0<21)e=t[55840+(e<<2)>>2]|0;else{t[A>>2]=e;T4(194959,137395,A)|0;e=194959}h=r;return e|0}function bt(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,l=0,s=0,o=0,u=0,b=0,h=0;s=e+104|0;o=e+100|0;l=r+16|0;i=0;a=0;while(1){if((i|0)>(t[s>>2]|0))break;n=gd(r,ut(i)|0,1)|0;Sd(n,137447,304,1)|0;u=n+16|0;t[(t[u>>2]|0)+176>>2]=0;h=KF((t[o>>2]<<2)+4|0)|0;b=t[u>>2]|0;t[b+172>>2]=h;t[b+184>>2]=0;b=KF((t[o>>2]<<2)+4|0)|0;t[(t[u>>2]|0)+180>>2]=b;if(!a)t[(t[l>>2]|0)+192>>2]=n;else t[(t[a+16>>2]|0)+164>>2]=n;i=i+1|0;a=n}l=A+16|0;i=0;a=0;while(1){if((i|0)>(t[o>>2]|0))break;n=gd(A,ut(i)|0,1)|0;Sd(n,137447,304,1)|0;h=n+16|0;t[(t[h>>2]|0)+176>>2]=0;u=KF((t[s>>2]<<2)+4|0)|0;b=t[h>>2]|0;t[b+172>>2]=u;t[b+184>>2]=0;b=KF((t[s>>2]<<2)+4|0)|0;t[(t[h>>2]|0)+180>>2]=b;if(!a)t[(t[l>>2]|0)+192>>2]=n;else t[(t[a+16>>2]|0)+164>>2]=n;i=i+1|0;a=n}i=t[e+84>>2]|0;while(1){a=t[i>>2]|0;if(!a)break;h=a+84|0;b=gd(r,ut(f[h>>1]|0)|0,0)|0;h=gd(r,ut((f[a+80>>1]|0)+(f[h>>1]|0)|0)|0,0)|0;ht(r,b,h,~~+c[a+64>>3]);h=a+86|0;b=gd(A,ut(f[h>>1]|0)|0,0)|0;h=gd(A,ut((f[a+82>>1]|0)+(f[h>>1]|0)|0)|0,0)|0;ht(A,b,h,~~+c[a+72>>3]);i=i+4|0}wt(r);wt(A);return}function ht(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var n=0,l=0;n=lk(e,A,r,0,0)|0;if(!n){l=lk(e,A,r,0,1)|0;Sd(l,137460,176,1)|0;a[(t[l+16>>2]|0)+170>>1]=i;A=A+16|0;e=t[A>>2]|0;n=t[e+180>>2]|0;if(!n)e=$F((t[e+184>>2]<<2)+8|0)|0;else e=AM(n,(t[e+184>>2]<<2)+8|0)|0;i=t[A>>2]|0;t[i+180>>2]=e;i=i+184|0;n=t[i>>2]|0;t[i>>2]=n+1;t[e+(n<<2)>>2]=l;A=t[A>>2]|0;t[(t[A+180>>2]|0)+(t[A+184>>2]<<2)>>2]=0;A=r+16|0;e=t[A>>2]|0;n=t[e+172>>2]|0;if(!n)e=$F((t[e+176>>2]<<2)+8|0)|0;else e=AM(n,(t[e+176>>2]<<2)+8|0)|0;i=t[A>>2]|0;t[i+172>>2]=e;i=i+176|0;r=t[i>>2]|0;t[i>>2]=r+1;t[e+(r<<2)>>2]=l;l=t[A>>2]|0;t[(t[l+172>>2]|0)+(t[l+176>>2]<<2)>>2]=0}else{l=(t[n+16>>2]|0)+170|0;r=f[l>>1]|0;a[l>>1]=(r|0)>(i|0)?r:i}return}function wt(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0;A=t[(t[e+16>>2]|0)+192>>2]|0;while(1){i=A+16|0;f=t[(t[i>>2]|0)+164>>2]|0;if(!f)break;if(lk(e,A,f,0,0)|0){A=f;continue}n=lk(e,A,f,0,1)|0;Sd(n,137460,176,1)|0;a[(t[n+16>>2]|0)+170>>1]=0;A=t[i>>2]|0;r=t[A+180>>2]|0;if(!r)A=$F((t[A+184>>2]<<2)+8|0)|0;else A=AM(r,(t[A+184>>2]<<2)+8|0)|0;l=t[i>>2]|0;t[l+180>>2]=A;l=l+184|0;r=t[l>>2]|0;t[l>>2]=r+1;t[A+(r<<2)>>2]=n;i=t[i>>2]|0;t[(t[i+180>>2]|0)+(t[i+184>>2]<<2)>>2]=0;i=f+16|0;A=t[i>>2]|0;r=t[A+172>>2]|0;if(!r)A=$F((t[A+176>>2]<<2)+8|0)|0;else A=AM(r,(t[A+176>>2]<<2)+8|0)|0;r=t[i>>2]|0;t[r+172>>2]=A;r=r+176|0;l=t[r>>2]|0;t[r>>2]=l+1;t[A+(l<<2)>>2]=n;A=t[i>>2]|0;t[(t[A+172>>2]|0)+(t[A+176>>2]<<2)>>2]=0;A=f}return}function kt(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;n=e+92|0;i=0;a=0;A=t[(t[(t[A+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){A=t[A+164>>2]|0;if(!A)break;A=t[A+16>>2]|0;f=A+232|0;t[(t[n>>2]|0)+(a<<2)>>2]=(t[f>>2]|0)-i;i=t[f>>2]|0;a=a+1|0}e=e+96|0;i=0;a=0;A=t[(t[(t[r+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){A=t[A+164>>2]|0;if(!A)break;A=t[A+16>>2]|0;f=A+232|0;t[(t[e>>2]|0)+(a<<2)>>2]=(t[f>>2]|0)-i;i=t[f>>2]|0;a=a+1|0}return}function dt(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f+4|0;A=f;t[A>>2]=t[4647];r=t[e+100>>2]|0;if((r|0)!=1?(a=e+104|0,(t[a>>2]|0)!=1):0){t[e+92>>2]=KF((r<<2)+4|0)|0;t[e+96>>2]=KF((t[a>>2]<<2)+4|0)|0;i[n>>0]=i[A>>0]|0;i[n+1>>0]=i[A+1>>0]|0;i[n+2>>0]=i[A+2>>0]|0;i[n+3>>0]=i[A+3>>0]|0;a=hk(137473,n,0)|0;i[n>>0]=i[A>>0]|0;i[n+1>>0]=i[A+1>>0]|0;i[n+2>>0]=i[A+2>>0]|0;i[n+3>>0]=i[A+3>>0]|0;n=hk(137478,n,0)|0;Sd(a,137483,280,1)|0;Sd(n,137483,280,1)|0;bt(e,a,n);VM(a,2,2147483647)|0;VM(n,2,2147483647)|0;kt(e,a,n);vt(a,n)}else ot(e);h=f;return}function vt(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=(t[A+16>>2]|0)+192|0;while(1){r=t[r>>2]|0;if(!r)break;a=r+16|0;r=t[a>>2]|0;i=t[r+172>>2]|0;if(i){G2(i);r=t[a>>2]|0}i=t[r+180>>2]|0;if(i){G2(i);r=t[a>>2]|0}r=r+164|0}vk(e)|0;vk(A)|0;return}function gt(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0.0;w=h;h=h+272|0;u=w+104|0;b=w+136|0;l=w+72|0;s=w;n=w+144|0;t[s+48>>2]=e;switch(Yd(e)|0){case 0:{r=t[e+60>>2]|0;break}case 1:{r=Bd(e)|0;break}case 2:{r=Bd(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0;break}default:{}}f=s+52|0;t[f>>2]=r;o=t[r+60>>2]|0;c[s+32>>3]=+c[A+16>>3];t[s+16>>2]=t[A+4>>2];t[s+20>>2]=t[A+8>>2];t[s+40>>2]=0;a=Df(t[A>>2]|0,b,s)|0;if(!a){cw(u,128,n);i[A+82>>0]=0;r=o3(mt(e,u)|0)|0;t[A>>2]=r;if((t[A+12>>2]|0)==1)r=pJ(r)|0;else r=vJ(r,t[f>>2]|0)|0;G2(t[A>>2]|0);t[A>>2]=r;xF(t[(t[o+16>>2]|0)+144>>2]|0,A);hw(u);r=t[b>>2]|0}else{r=a+4|0;if((i[r>>0]|0)==1){if((t[(t[a>>2]|0)+24>>2]|0)==0?pt(e)|0:0){f=o3(pt(e)|0)|0;t[(t[a>>2]|0)+24>>2]=f}o=Et(o,t[a>>2]|0,0,s)|0;t[b>>2]=t[b>>2]|o;o=t[a>>2]|0;d=+c[o+64>>3]*.5;k=+c[o+72>>3]*.5;Bt(l,-d,-k,d,k);o=t[a>>2]|0;t[u>>2]=t[l>>2];t[u+4>>2]=t[l+4>>2];t[u+8>>2]=t[l+8>>2];t[u+12>>2]=t[l+12>>2];t[u+16>>2]=t[l+16>>2];t[u+20>>2]=t[l+20>>2];t[u+24>>2]=t[l+24>>2];t[u+28>>2]=t[l+28>>2];yt(o,u,15)}else{Ct(t[(t[o+16>>2]|0)+144>>2]|0,t[a>>2]|0,s);u=t[a>>2]|0;k=+c[u+24>>3]*.5;d=+c[u+32>>3]*.5;Bt(l,-k,-d,k,d);u=(t[a>>2]|0)+8|0;t[u>>2]=t[l>>2];t[u+4>>2]=t[l+4>>2];t[u+8>>2]=t[l+8>>2];t[u+12>>2]=t[l+12>>2];t[u+16>>2]=t[l+16>>2];t[u+20>>2]=t[l+20>>2];t[u+24>>2]=t[l+24>>2];t[u+28>>2]=t[l+28>>2]}c[A+24>>3]=+c[l+16>>3]-+c[l>>3];c[A+32>>3]=+c[l+24>>3]-+c[l+8>>3];t[A+72>>2]=a;if((i[r>>0]|0)==1){G2(t[A>>2]|0);t[A>>2]=o3(141611)|0}r=t[b>>2]|0}h=w;return r|0}function mt(e,A){e=e|0;A=A|0;var r=0;e:do{switch(Yd(e)|0){case 0:{bw(A,Mk(e)|0)|0;break}case 1:{bw(A,Mk(e)|0)|0;break}case 2:{bw(A,Mk(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)|0;r=e+-48|0;bw(A,Mk(t[((t[e>>2]&3|0)==2?e:r)+40>>2]|0)|0)|0;if(!(Bk(Bd(t[((t[e>>2]&3|0)==2?e:r)+40>>2]|0)|0)|0)){bw(A,141747)|0;break e}else{bw(A,137738)|0;break e}}default:{}}}while(0);r=A+4|0;e=t[r>>2]|0;if(e>>>0>=(t[A+8>>2]|0)>>>0){ow(A,1)|0;e=t[r>>2]|0}i[e>>0]=0;A=t[A>>2]|0;t[r>>2]=A;return A|0}function pt(e){e=e|0;var A=0,r=0;A=Hw(e,137729)|0;if(!((A|0)!=0?(i[A>>0]|0)!=0:0))r=3;do{if((r|0)==3){A=Hw(e,140823)|0;if(A|0?i[A>>0]|0:0)break;A=0}}while(0);return A|0}function Et(e,A,r,l){e=e|0;A=A|0;r=r|0;l=l|0;var s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;E=h;h=h+16|0;m=E+8|0;g=E;p=A+108|0;s=t[p>>2]|0;if(s|0)Pa(l,s,186576);t[A+80>>2]=r;s=Lt(e,A,l)|0;d=A+36|0;e=a[d>>1]|0;if(!(e&128))i[A+32>>0]=2;r=A+33|0;if(!(e&32))i[r>>0]=1;dt(A);u=t[A+104>>2]|0;w=i[A+32>>0]|0;e=P(u+1|0,w)|0;b=n[r>>0]<<1;k=t[A+100>>2]|0;w=P(k+1|0,w)|0;o=A+96|0;e=b+e|0;r=0;while(1){if((r|0)>=(u|0))break;e=(t[(t[o>>2]|0)+(r<<2)>>2]|0)+e|0;r=r+1|0}u=A+92|0;r=w+b|0;o=0;while(1){if((o|0)>=(k|0))break;r=(t[(t[u>>2]|0)+(o<<2)>>2]|0)+r|0;o=o+1|0}u=A+38|0;do{if(a[d>>1]&1){d=a[u>>1]|0;o=d&65535;if(d<<16>>16?(v=a[A+40>>1]|0,v<<16>>16):0){if(!((e|0)>(o|0)|(r|0)>(v&65535|0))){r=0;e=0;break}nw(0,137529,g)|0;s=1;r=0;e=0;break}nw(0,137563,m)|0;s=1}}while(0);m=f[u>>1]|0;c[A+64>>3]=+(((e|0)>(m|0)?e:m)|0);m=f[A+40>>1]|0;c[A+72>>3]=+(((r|0)>(m|0)?r:m)|0);if(t[p>>2]|0)qa(l,186576);h=E;return s|0}function Bt(e,A,r,i,a){e=e|0;A=+A;r=+r;i=+i;a=+a;c[e>>3]=A;c[e+8>>3]=r;c[e+16>>3]=i;c[e+24>>3]=a;return}function yt(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0,s=0,o=0.0,u=0.0,b=0,w=0,k=0.0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0.0,M=0;Y=h;h=h+64|0;z=Y+32|0;W=Y;Q=t[e+84>>2]|0;s=t[e+80>>2]|0;if((s|0?(f=t[s+24>>2]|0,f|0):0)?(l=e+24|0,(t[l>>2]|0)==0):0)t[l>>2]=o3(f)|0;D=e+48|0;f=A+16|0;u=+c[f>>3];o=+c[A>>3];s=~~(u-o-+(~~+c[e+64>>3]|0));if((s|0)<=-1)ge(137496,137342,1761,137506);b=A+24|0;y=+c[b>>3];w=A+8|0;k=+c[w>>3];d=+(~~+c[e+72>>3]|0);v=~~(y-k-d);if((v|0)<=-1)ge(137519,137342,1764,137506);g=a[e+36>>1]|0;l=g&65535;e:do{if(l&1){A:do{if((s|0)>0)switch(l&6){case 4:{c[f>>3]=o+d;break A}case 2:{F=+(s|0);c[f>>3]=u+F;o=o+F;c[A>>3]=o;break A}default:{F=+(s>>>1|0);o=o+F;c[A>>3]=o;c[f>>3]=u-F;break A}}}while(0);if((v|0)>0)switch(g&24){case 16:{y=k+d;c[b>>3]=y;v=0;f=0;break e}case 8:{F=+(v|0);y=y+F;c[b>>3]=y;c[w>>3]=k+F;v=0;f=0;break e}default:{F=+(v>>>1|0);c[w>>3]=k+F;y=y-F;c[b>>3]=y;v=0;f=0;break e}}else{v=0;f=0}}else f=s}while(0);u=+(n[e+33>>0]|0);G=e+32|0;m=i[G>>0]|0;k=+(m<<24>>24);L=e+104|0;s=t[L>>2]|0;g=(f|0)/(s|0)|0;b=f-(P(g,s)|0)|0;b=~~(((b|0)>-1?.5:-.5)+ +(b|0));Z=e+96|0;w=m<<24>>24;f=~~(o+u+k);l=0;while(1){if((l|0)>(s|0))break;I=(t[Z>>2]|0)+(l<<2)|0;s=t[I>>2]|0;t[I>>2]=f;f=f+g+((l|0)<(b|0)&1)+s+w|0;l=l+1|0;s=t[L>>2]|0}I=e+100|0;s=t[I>>2]|0;g=(v|0)/(s|0)|0;w=v-(P(g,s)|0)|0;w=~~(((w|0)>-1?.5:-.5)+ +(w|0));C=e+92|0;b=m<<24>>24;f=~~(y-u-k);l=0;while(1){if((l|0)>(s|0))break;B=(t[C>>2]|0)+(l<<2)|0;s=t[B>>2]|0;t[B>>2]=f;f=f-g+(((l|0)<(w|0))<<31>>31)-s-b|0;l=l+1|0;s=t[I>>2]|0}m=(r|0)==0;p=W+16|0;E=W+24|0;B=W+8|0;f=Q;while(1){b=t[f>>2]|0;if(!b)break;s=a[b+84>>1]|0;if(m){l=0;w=a[b+80>>1]|0;v=a[b+86>>1]|0;g=a[b+82>>1]|0}else{l=s<<16>>16==0?8:0;v=a[b+86>>1]|0;l=v<<16>>16==0?l|4:l;w=a[b+80>>1]|0;g=a[b+82>>1]|0;l=(((w&65535)+(s&65535)|0)==(t[L>>2]|0)?l|2:l)|((g&65535)+(v&65535)|0)==(t[I>>2]|0)}M=t[Z>>2]|0;s=s&65535;c[W>>3]=+(t[M+(s<<2)>>2]|0);Q=i[G>>0]|0;c[p>>3]=+((t[M+((w&65535)+s<<2)>>2]|0)-Q|0);w=t[C>>2]|0;c[E>>3]=+(t[w+((v&65535)<<2)>>2]|0);c[B>>3]=+((t[w+((g&65535)+(v&65535)<<2)>>2]|0)+Q|0);t[z>>2]=t[W>>2];t[z+4>>2]=t[W+4>>2];t[z+8>>2]=t[W+8>>2];t[z+12>>2]=t[W+12>>2];t[z+16>>2]=t[W+16>>2];t[z+20>>2]=t[W+20>>2];t[z+24>>2]=t[W+24>>2];t[z+28>>2]=t[W+28>>2];It(b,z,l&r);f=f+4|0}i[e+35>>0]=r;t[D>>2]=t[A>>2];t[D+4>>2]=t[A+4>>2];t[D+8>>2]=t[A+8>>2];t[D+12>>2]=t[A+12>>2];t[D+16>>2]=t[A+16>>2];t[D+20>>2]=t[A+20>>2];t[D+24>>2]=t[A+24>>2];t[D+28>>2]=t[A+28>>2];h=Y;return}function Ct(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0.0,s=0.0,o=0,u=0,b=0.0,w=0.0,k=0.0,d=0,v=0.0,g=0.0,m=0.0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0.0,H=0.0,P=0.0;x=h;h=h+112|0;W=x+48|0;Y=x+16|0;F=x;t[Y>>2]=0;t[Y+4>>2]=0;t[Y+8>>2]=0;t[Y+12>>2]=0;t[Y+16>>2]=0;t[Y+20>>2]=0;t[Y+24>>2]=0;t[Y+28>>2]=0;M=A+4|0;V=r+16|0;N=r+32|0;R=Y+16|0;d=a[M>>1]|0;u=d<<16>>16;n=0;l=-1.0;o=0;while(1){if((o|0)>=(u|0)){n=1;break}f=t[A>>2]|0;if((a[f+(o*24|0)+4>>1]|0)>1){n=0;break}f=t[(t[f+(o*24|0)>>2]|0)+4>>2]|0;if(!f){s=+c[N>>3];c[R>>3]=s;f=V}else{if(t[f+24>>2]&127|0){n=0;break}s=+c[(+c[f+16>>3]>0.0?f:V)+16>>3];c[R>>3]=s;f=(t[f>>2]|0)==0?V:f}f=t[f>>2]|0;t[Y>>2]=f;if(!(l==-1.0)){if(s!=l){n=0;break}}else l=s;if(n){if(e1(f,n)|0){n=0;break}}else n=f;o=o+1|0}i[A+6>>0]=n;Q=r+48|0;D=r+20|0;z=Y+4|0;E=r+40|0;B=Y+24|0;y=e+144|0;C=W+4|0;p=F+8|0;I=W+16|0;Z=W+24|0;G=W+8|0;L=W+12|0;r=(n|0)==0;l=0.0;v=0.0;g=0.0;m=0.0;u=0;n=d;while(1){if((u|0)>=(n<<16>>16|0))break;s=0.0;k=0.0;o=0;w=0.0;l=0.0;f=t[A>>2]|0;while(1){if((o|0)>=(a[f+(u*24|0)+4>>1]|0))break;t[W>>2]=UF(t[(t[f+(u*24|0)>>2]|0)+(o*56|0)>>2]|0,t[Q>>2]|0)|0;f=(t[A>>2]|0)+(u*24|0)|0;n=t[(t[f>>2]|0)+(o*56|0)+4>>2]|0;if(!n){c[R>>3]=+c[N>>3];t[Y>>2]=t[V>>2];t[z>>2]=t[D>>2];t[B>>2]=t[B>>2]&-128|t[E>>2]&127}else{n=t[n+24>>2]&127;if(!n)n=t[E>>2]&127;t[B>>2]=t[B>>2]&-128|n;d=t[(t[f>>2]|0)+(o*56|0)+4>>2]|0;c[R>>3]=+c[(+c[d+16>>3]>0.0?d:V)+16>>3];t[Y>>2]=t[((t[d>>2]|0)==0?V:d)>>2];t[z>>2]=t[((t[d+4>>2]|0)==0?V:d)+4>>2]}f=t[y>>2]|0;t[C>>2]=L5[t[f>>2]&63](f,Y,1)|0;ex(F,e,W);H=+c[F>>3];b=+c[p>>3];G2(t[(t[(t[A>>2]|0)+(u*24|0)>>2]|0)+(o*56|0)>>2]|0);f=t[A>>2]|0;d=t[f+(u*24|0)>>2]|0;t[d+(o*56|0)>>2]=t[W>>2];c[d+(o*56|0)+32>>3]=H;c[d+(o*56|0)+16>>3]=+c[I>>3];c[d+(o*56|0)+24>>3]=+c[Z>>3];t[d+(o*56|0)+4>>2]=t[C>>2];t[d+(o*56|0)+8>>2]=t[G>>2];t[d+(o*56|0)+12>>2]=t[L>>2];J=+c[R>>3];P=+c[Z>>3];s=P>s?P:s;k=H+k;o=o+1|0;w=J>w?J:w;l=b>l?b:l}c[f+(u*24|0)+8>>3]=k;n=(u|0)==0;do{if(r)if(n){b=w;s=w-s;n=f;break}else{b=w;s=g-m+w-s;n=f+(u*24|0)|0;break}else{b=l;s=n?w:l;n=f+(u*24|0)|0}}while(0);c[n+16>>3]=s;v=k>v?k:v;g=b+g;m=+c[f+(u*24|0)+16>>3]+m;u=u+1|0;n=a[M>>1]|0}c[A+24>>3]=v;c[A+32>>3]=n<<16>>16==1?l:g;h=x;return}function It(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0,s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0.0,I=0.0;y=h;h=h+64|0;p=y+32|0;B=y;l=e+24|0;if((t[l>>2]|0)==0?(f=t[(t[e+96>>2]|0)+24>>2]|0,f|0):0)t[l>>2]=o3(f)|0;g=e+36|0;E=a[g>>1]|0;f=E&65535;e:do{if(f&1){s=+c[e+64>>3];k=+c[e+72>>3];l=A+16|0;o=+c[l>>3];b=+c[A>>3];u=o-b-s;A:do{if(u>0.0)switch(f&6){case 4:{o=b+s;c[l>>3]=o;s=b;break A}case 2:{o=u+o;c[l>>3]=o;s=b+u;c[A>>3]=s;break A}default:{w=u*.5;s=w+b;c[A>>3]=s;o=o-w;c[l>>3]=o;break A}}else s=b}while(0);f=A+24|0;w=+c[f>>3];l=A+8|0;u=+c[l>>3];b=w-u-k;if(b>0.0)switch(E&24){case 16:{b=u+k;c[f>>3]=b;break e}case 8:{k=b+w;c[f>>3]=k;u=u+b;c[l>>3]=u;b=k;break e}default:{b=b*.5;u=b+u;c[l>>3]=u;b=w-b;c[f>>3]=b;break e}}else b=w}else{s=+c[A>>3];u=+c[A+8>>3];o=+c[A+16>>3];b=+c[A+24>>3]}}while(0);v=e+48|0;t[v>>2]=t[A>>2];t[v+4>>2]=t[A+4>>2];t[v+8>>2]=t[A+8>>2];t[v+12>>2]=t[A+12>>2];t[v+16>>2]=t[A+16>>2];t[v+20>>2]=t[A+20>>2];t[v+24>>2]=t[A+24>>2];t[v+28>>2]=t[A+28>>2];i[e+35>>0]=r;I=+(n[e+33>>0]|0);C=+(n[e+34>>0]|0);w=s+I+C;c[B>>3]=w;k=u+I+C;v=B+8|0;c[v>>3]=k;u=o-I-C;A=B+16|0;c[A>>3]=u;b=b-I-C;d=B+24|0;c[d>>3]=b;l=e+88|0;switch(i[e+92>>0]|0){case 1:{E=t[l>>2]|0;t[p>>2]=t[B>>2];t[p+4>>2]=t[B+4>>2];t[p+8>>2]=t[B+8>>2];t[p+12>>2]=t[B+12>>2];t[p+16>>2]=t[B+16>>2];t[p+20>>2]=t[B+20>>2];t[p+24>>2]=t[B+24>>2];t[p+28>>2]=t[B+28>>2];yt(E,p,r);break}case 3:{f=t[l>>2]|0;s=+c[f+24>>3];o=u-w-+c[f+16>>3];e:do{if(o>0.0)switch(E&6){case 4:{c[A>>3]=u-o;break e}case 2:{c[B>>3]=o+w;break e}default:break e}}while(0);s=b-k-s;e:do{if(s>0.0)switch(E&24){case 16:{c[d>>3]=b-s;break e}case 8:{c[v>>3]=s+k;break e}default:break e}}while(0);t[p>>2]=t[B>>2];t[p+4>>2]=t[B+4>>2];t[p+8>>2]=t[B+8>>2];t[p+12>>2]=t[B+12>>2];t[p+16>>2]=t[B+16>>2];t[p+20>>2]=t[B+20>>2];t[p+24>>2]=t[B+24>>2];t[p+28>>2]=t[B+28>>2];Zt(f,p);break}default:{f=t[l>>2]|0;s=+c[f+32>>3];o=u-w-+c[f+24>>3];e:do{if(o>0.0?(m=E&6,m<<16>>16!=6):0)switch(m&7){case 4:{c[A>>3]=u-o;break e}case 2:{c[B>>3]=o+w;break e}default:{I=o*.5;c[B>>3]=I+w;c[A>>3]=u-I;break e}}}while(0);s=b-k-s;e:do{if(s>0.0)switch(E&24){case 16:{c[d>>3]=b-s;break e}case 8:{c[v>>3]=s+k;break e}default:{I=s*.5;c[v>>3]=I+k;c[d>>3]=b-I;break e}}}while(0);E=f+8|0;t[E>>2]=t[B>>2];t[E+4>>2]=t[B+4>>2];t[E+8>>2]=t[B+8>>2];t[E+12>>2]=t[B+12>>2];t[E+16>>2]=t[B+16>>2];t[E+20>>2]=t[B+20>>2];t[E+24>>2]=t[B+24>>2];t[E+28>>2]=t[B+28>>2];B=a[g>>1]&768;Gt(t[l>>2]|0,(B&1023)==512?108:(B&1023)==256?114:110)}}h=y;return}function Zt(e,A){e=e|0;A=A|0;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];t[e+16>>2]=t[A+16>>2];t[e+20>>2]=t[A+20>>2];t[e+24>>2]=t[A+24>>2];t[e+28>>2]=t[A+28>>2];return}function Gt(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;n=a[e+4>>1]|0;r=0;while(1){if((r|0)>=(n|0))break;f=(t[e>>2]|0)+(r*24|0)+6|0;if(!(i[f>>0]|0))i[f>>0]=A;r=r+1|0}return}function Lt(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;o=A+84|0;g=t[o>>2]|0;m=$M()|0;p=Wt()|0;l=0;n=0;c=Sh(g)|0;while(1){if(!c)break;s=Sh(t[c+8>>2]|0)|0;while(1){if(!s)break;s=t[s>>2]|0;l=l+1|0}n=n+1|0;if(i[c+12>>0]|0)Vt(p,n);c=t[c>>2]|0}n=KF((l<<2)+4|0)|0;t[o>>2]=n;l=0;s=0;c=0;k=0;d=Sh(g)|0;while(1){if(!d)break;v=k&65535;w=0;h=Sh(t[d+8>>2]|0)|0;while(1){if(!h)break;b=t[h+8>>2]|0;t[n>>2]=b;c=Qt(e,b,A,r)|0|c;o=Dt(m,k,w,b)|0;a[b+86>>1]=v;a[b+84>>1]=o;o=o+(f[b+80>>1]|0)|0;u=k+(f[b+82>>1]|0)|0;if(Nt(p,u)|0){w=b+100|0;i[w>>0]=i[w>>0]|2}w=o;n=n+4|0;h=t[h>>2]|0;l=(o|0)>(l|0)?o:l;s=(u|0)>(s|0)?u:s}k=k+1|0;d=t[d>>2]|0}t[A+100>>2]=s;t[A+104>>2]=l;Ph(g)|0;Ph(p)|0;rV(m);return c|0}function Qt(e,A,r,l){e=e|0;A=A|0;r=r|0;l=l|0;var s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0.0;m=h;h=h+16|0;g=m+8|0;v=m;t[A+96>>2]=r;k=A+36|0;b=a[k>>1]|0;if(!(b&64)){if(!(a[r+36>>1]&64))u=2;else u=i[r+34>>0]|0;i[A+34>>0]=u}if(!(b&32)){u=i[r+88>>0]|0;if(u<<24>>24<=-1)if(!(a[r+36>>1]&32))u=1;else u=i[r+33>>0]|0;i[A+33>>0]=u}u=A+88|0;w=A+92|0;switch(i[w>>0]|0){case 1:{b=Et(e,t[u>>2]|0,A,l)|0;r=t[u>>2]|0;u=b;b=r+64|0;r=r+72|0;break}case 3:{b=zt(t[u>>2]|0,l)|0;r=t[u>>2]|0;u=b;b=r+16|0;r=r+24|0;break}default:{Ct(t[(t[e+16>>2]|0)+144>>2]|0,t[u>>2]|0,l);r=t[u>>2]|0;u=0;b=r+24|0;r=r+32|0}}s=+((n[A+33>>0]|0)+(n[A+34>>0]|0)<<1|0);o=+c[b>>3]+s;s=+c[r>>3]+s;r=A+38|0;do{if(a[k>>1]&1){b=a[r>>1]|0;if(b<<16>>16?(d=a[A+40>>1]|0,d<<16>>16):0){if(!(o>+(b&65535)|s>+(d&65535))){o=0.0;s=0.0;break}if((i[w>>0]|0)==3){o=0.0;s=0.0;break}nw(0,137614,v)|0;u=1;o=0.0;s=0.0;break}nw(0,137647,g)|0;u=1}}while(0);p=+(f[r>>1]|0);c[A+64>>3]=o>p?o:p;o=+(f[A+40>>1]|0);c[A+72>>3]=s>o?s:o;h=m;return u|0}function Dt(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0,n=0,l=0,s=0;s=i+80|0;l=(f[s>>1]|0)+-1|0;n=0;e:while(1){a=r;while(1){if(n)break e;t=l+a|0;while(1){if((t|0)<(a|0)){r=a;n=1;continue e}if(fV(e,t,A)|0)break;t=t+-1|0}a=t+1|0}}n=i+82|0;a=r;while(1){if((a|0)<(r+(f[s>>1]|0)|0))t=A;else break;while(1){if((t|0)>=((f[n>>1]|0)+A|0))break;tV(e,a,t);t=t+1|0}a=a+1|0}return r|0}function zt(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+16|0;l=o;f=o+8|0;A=A+52|0;n=e+32|0;Pm(f,t[A>>2]|0,t[n>>2]|0);s=t[f>>2]|0;f=t[f+4>>2]|0;if((f&s|0)==-1){t[l>>2]=t[n>>2];nw(1,137697,l)|0;A=1;a=0.0;r=0.0}else{i[(t[(t[A>>2]|0)+16>>2]|0)+114>>0]=1;A=0;a=+(f|0);r=+(s|0)}t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;t[e+12>>2]=0;c[e+16>>3]=r;c[e+24>>3]=a;h=o;return A|0}function Wt(){return Uh(55924,t[4581]|0)|0}function Yt(e,A,r){e=e|0;A=A|0;r=r|0;r=KF(12)|0;t[r>>2]=t[A>>2];return r|0}function Ft(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function Mt(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;A=t[A>>2]|0;i=t[r>>2]|0;return((A|0)>(i|0)?1:((A|0)<(i|0))<<31>>31)|0}function Vt(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=A;L5[t[e>>2]&63](e,i,1)|0;h=r;return}function Nt(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=A;A=(L5[t[e>>2]&63](e,i,512)|0)!=0&1;h=r;return A|0}function Rt(e){e=e|0;var A=0;if(!(t[47375]|0)){A=KF((e<<2)+4|0)|0;t[47375]=A;t[A>>2]=189504;t[47386]=e}t[47387]=0;return}function xt(){G2(t[47375]|0);t[47375]=0;t[47387]=0;return}function Jt(){t[47387]=0;return}function Ht(){var e=0,A=0,r=0;A=t[47387]|0;r=t[47375]|0;e=1;while(1){if((e|0)>(A|0)){e=5;break}if((t[(t[r+(e<<2)>>2]|0)+4>>2]|0)==(e|0))e=e+1|0;else{e=4;break}}if((e|0)==4)ge(138394,137741,59,137747);else if((e|0)==5)return}function Pt(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;a=t[47375]|0;n=t[a+(e<<2)>>2]|0;f=t[n>>2]|0;while(1){A=(e|0)/2|0;r=t[a+(A<<2)>>2]|0;i=a+(e<<2)|0;if((t[r>>2]|0)>=(f|0))break;t[i>>2]=r;t[r+4>>2]=e;e=A}t[i>>2]=n;t[n+4>>2]=e;return}function Xt(e){e=e|0;var A=0,r=0;r=h;h=h+16|0;A=t[47387]|0;if((A|0)==(t[47386]|0)){nw(1,137755,r)|0;e=1}else{A=A+1|0;t[47387]=A;t[(t[47375]|0)+(A<<2)>>2]=e;Pt(A);Ht();e=0}h=r;return e|0}function St(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;i=t[47375]|0;a=t[i+(e<<2)>>2]|0;n=t[a>>2]|0;f=t[47387]|0;l=(f|0)/2|0;while(1){if((e|0)>(l|0))break;r=e<<1;A=t[i+(r<<2)>>2]|0;if((r|0)<(f|0)){o=r|1;s=t[i+(o<<2)>>2]|0;c=(t[A>>2]|0)<(t[s>>2]|0);r=c?o:r;A=c?s:A}if((n|0)>=(t[A>>2]|0))break;t[i+(e<<2)>>2]=A;t[A+4>>2]=e;e=r}t[i+(e<<2)>>2]=a;t[a+4>>2]=e;return}function jt(){var e=0,A=0,r=0,i=0;A=t[47387]|0;if(!A)e=0;else{i=t[47375]|0;r=i+4|0;e=t[r>>2]|0;t[r>>2]=t[i+(A<<2)>>2];A=A+-1|0;t[47387]=A;if(A|0)St(1);Ht()}return e|0}function Ut(e,A){e=e|0;A=A|0;t[e>>2]=A;Pt(t[e+4>>2]|0);Ht();return}function Tt(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0;u=e+16|0;l=t[u>>2]|0;l=(i[l+((t[r+12>>2]|0)*40|0)+36>>0]|0)!=(i[l+((t[r+16>>2]|0)*40|0)+36>>0]|0);s=~~((+c[A+64>>3]+-3.0-+c[A+48>>3])*.5);o=~~((+c[A+56>>3]+-3.0-+c[A+40>>3])*.5);n=(s|0)<(o|0)?s:o;b=A+4|0;a=0;while(1){e=t[b>>2]|0;if((a|0)>=(e|0)){n=a;break}f=t[A+8+(a<<2)>>2]|0;h=t[u>>2]|0;if((i[h+((t[f+12>>2]|0)*40|0)+36>>0]|0)==(i[h+((t[f+16>>2]|0)*40|0)+36>>0]|0)){n=a;break}Ot(f,n);a=a+1|0}while(1){if((n|0)>=(e|0))break;a=t[A+8+(n<<2)>>2]|0;if(l|(a|0)==(r|0)){Ot(a,i[(t[u>>2]|0)+((t[a+12>>2]|0)*40|0)+36>>0]|0?s:o);e=t[b>>2]|0}n=n+1|0}return}function Ot(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+8|0;i=t[r>>2]|0;t[r>>2]=i+1;if((i|0)>=(A|0)){t[r>>2]=0;c[e>>3]=+c[e>>3]+16384.0}return}function _t(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0.0,I=0.0,Z=0.0,G=0,L=0,Q=0.0;B=h;h=h+112|0;m=B+64|0;g=B+96|0;o=B+32|0;p=B;E=KF(28)|0;A=gk(e)|0;v=E+4|0;t[v>>2]=A;A=KF(A*72|0)|0;d=E+12|0;t[d>>2]=A;i=p+8|0;c[i>>3]=1797693134862315708145274.0e284;c[p>>3]=1797693134862315708145274.0e284;a=p+24|0;c[a>>3]=-1797693134862315708145274.0e284;n=p+16|0;c[n>>3]=-1797693134862315708145274.0e284;f=o+16|0;l=o+8|0;s=o+24|0;r=sd(e)|0;u=1797693134862315708145274.0e284;b=1797693134862315708145274.0e284;w=-1797693134862315708145274.0e284;k=-1797693134862315708145274.0e284;while(1){if(!r)break;G=r+16|0;L=t[G>>2]|0;C=(+c[L+96>>3]+ +c[L+88>>3])*.5;C=C<1.0?1.0:C;y=+c[L+80>>3]*.5;y=y<1.0?1.0:y;Q=+c[L+16>>3];Z=Q-C;c[o>>3]=Z;C=Q+C;c[f>>3]=C;Q=+c[L+24>>3];I=Q-y;c[l>>3]=I;y=Q+y;c[s>>3]=y;Z=+c[(u>3];c[p>>3]=Z;I=+c[(b>3];c[i>>3]=I;C=+c[(w>C?p:o)+16>>3];c[n>>3]=C;y=+c[(k>y?p:o)+24>>3];c[a>>3]=y;L=A+40|0;t[L>>2]=t[o>>2];t[L+4>>2]=t[o+4>>2];t[L+8>>2]=t[o+8>>2];t[L+12>>2]=t[o+12>>2];t[L+16>>2]=t[o+16>>2];t[L+20>>2]=t[o+20>>2];t[L+24>>2]=t[o+24>>2];t[L+28>>2]=t[o+28>>2];t[A>>2]=t[A>>2]|1;t[(t[G>>2]|0)+112>>2]=A;A=A+72|0;r=cd(e,r)|0;u=Z;b=I;w=C;k=y}c[p>>3]=u+-36.0;c[i>>3]=b+-36.0;c[n>>3]=w+36.0;c[a>>3]=k+36.0;L=t[d>>2]|0;a=t[v>>2]|0;t[m>>2]=t[p>>2];t[m+4>>2]=t[p+4>>2];t[m+8>>2]=t[p+8>>2];t[m+12>>2]=t[p+12>>2];t[m+16>>2]=t[p+16>>2];t[m+20>>2]=t[p+20>>2];t[m+24>>2]=t[p+24>>2];t[m+28>>2]=t[p+28>>2];a=fn(L,a,g,m)|0;if(t[47323]&1|0){d=t[d>>2]|0;G=t[v>>2]|0;L=t[g>>2]|0;t[m>>2]=t[p>>2];t[m+4>>2]=t[p+4>>2];t[m+8>>2]=t[p+8>>2];t[m+12>>2]=t[p+12>>2];t[m+16>>2]=t[p+16>>2];t[m+20>>2]=t[p+20>>2];t[m+24>>2]=t[p+24>>2];t[m+28>>2]=t[p+28>>2];qt(d,G,m,a,L)}i=E+8|0;t[i>>2]=KF((t[g>>2]|0)*72|0)|0;t[E>>2]=t[g>>2];r=t[g>>2]|0;A=0;while(1){if((A|0)>=(r|0))break;L=(t[i>>2]|0)+(A*72|0)+40|0;G=a+(A<<5)|0;t[L>>2]=t[G>>2];t[L+4>>2]=t[G+4>>2];t[L+8>>2]=t[G+8>>2];t[L+12>>2]=t[G+12>>2];t[L+16>>2]=t[G+16>>2];t[L+20>>2]=t[G+20>>2];t[L+24>>2]=t[G+24>>2];t[L+28>>2]=t[G+28>>2];A=A+1|0}G2(a);t[m>>2]=t[p>>2];t[m+4>>2]=t[p+4>>2];t[m+8>>2]=t[p+8>>2];t[m+12>>2]=t[p+12>>2];t[m+16>>2]=t[p+16>>2];t[m+20>>2]=t[p+20>>2];t[m+24>>2]=t[p+24>>2];t[m+28>>2]=t[p+28>>2];t[E+16>>2]=Kt(E,m)|0;h=B;return E|0}function qt(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0,l=0,s=0.0,o=0.0,u=0.0,b=0,w=0,k=0,d=0,v=0,g=0.0,m=0.0,p=0.0;k=h;h=h+128|0;w=k+96|0;b=k+64|0;l=k+32|0;d=k+16|0;v=k;o=+c[r+16>>3];u=+c[r>>3];s=+c[r+24>>3];n=+c[r+8>>3];f=t[15712]|0;Z3(137770,f)|0;t[v>>2]=10;t[v+4>>2]=10;t[v+8>>2]=~~(o+10.0-u);t[v+12>>2]=~~(s+10.0-n);a3(f,138200,v)|0;c[d>>3]=10.0-u;c[d+8>>3]=10.0-n;a3(f,138248,d)|0;Z3(138265,f)|0;r=0;while(1){if((r|0)>=(A|0))break;p=+c[e+(r*72|0)+48>>3];m=+c[e+(r*72|0)+56>>3];g=+c[e+(r*72|0)+64>>3];c[l>>3]=+c[e+(r*72|0)+40>>3];c[l+8>>3]=p;c[l+16>>3]=m;c[l+24>>3]=g;a3(f,138284,l)|0;r=r+1|0}Z3(138302,f)|0;r=0;while(1){if((r|0)>=(a|0))break;g=+c[i+(r<<5)+8>>3];m=+c[i+(r<<5)+16>>3];p=+c[i+(r<<5)+24>>3];c[b>>3]=+c[i+(r<<5)>>3];c[b+8>>3]=g;c[b+16>>3]=m;c[b+24>>3]=p;a3(f,138321,b)|0;r=r+1|0}Z3(138339,f)|0;c[w>>3]=u;c[w+8>>3]=n;c[w+16>>3]=o;c[w+24>>3]=s;a3(f,138321,w)|0;Z3(138086,f)|0;h=k;return}function Kt(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0;I=h;h=h+32|0;g=I+16|0;s=I;E=t[e>>2]|0;y=mr(E<<2|2)|0;C=Uh(55960,t[4581]|0)|0;p=Uh(55996,t[4581]|0)|0;E=KF(E<<7)|0;a=KF(t[e>>2]<<4)|0;B=e+8|0;n=A+16|0;f=s+8|0;l=A+24|0;o=A+8|0;r=0;while(1){if((r|0)>=(t[e>>2]|0))break;u=t[B>>2]|0;b=u+(r*72|0)|0;t[u+(r*72|0)+32>>2]=4;w=u+(r*72|0)+36|0;t[w>>2]=a+(r<<2<<2);k=u+(r*72|0)+40|0;i=+c[u+(r*72|0)+56>>3];if(i<+c[n>>3]){c[s>>3]=i;c[f>>3]=+c[u+(r*72|0)+48>>3];t[g>>2]=t[s>>2];t[g+4>>2]=t[s+4>>2];t[g+8>>2]=t[s+8>>2];t[g+12>>2]=t[s+12>>2];v=$t(y,C,g,E,1)|0;t[v+20>>2]=b;t[t[w>>2]>>2]=v}i=+c[u+(r*72|0)+64>>3];if(i<+c[l>>3]){c[s>>3]=+c[k>>3];c[f>>3]=i;t[g>>2]=t[s>>2];t[g+4>>2]=t[s+4>>2];t[g+8>>2]=t[s+8>>2];t[g+12>>2]=t[s+12>>2];v=$t(y,p,g,E,0)|0;t[v+20>>2]=b;t[(t[w>>2]|0)+4>>2]=v}if(+c[k>>3]>+c[A>>3]){t[g>>2]=t[k>>2];t[g+4>>2]=t[k+4>>2];t[g+8>>2]=t[k+8>>2];t[g+12>>2]=t[k+12>>2];v=$t(y,C,g,E,1)|0;t[v+24>>2]=b;t[(t[w>>2]|0)+8>>2]=v}if(+c[u+(r*72|0)+48>>3]>+c[o>>3]){t[g>>2]=t[k>>2];t[g+4>>2]=t[k+4>>2];t[g+8>>2]=t[k+8>>2];t[g+12>>2]=t[k+12>>2];v=$t(y,p,g,E,0)|0;t[v+24>>2]=b;t[(t[w>>2]|0)+12>>2]=v}r=r+1|0}b=KF(t[y>>2]<<2)|0;d=e+4|0;v=e+12|0;w=g+8|0;o=0;k=0;u=0;while(1){r=t[d>>2]|0;if((u|0)>=(r|0)){A=0;break}n=t[v>>2]|0;f=n+(u*72|0)|0;l=n+(u*72|0)+36|0;t[l>>2]=b+(o<<2);A=n+(u*72|0)+40|0;t[g>>2]=t[A>>2];t[g+4>>2]=t[A+4>>2];t[g+8>>2]=t[A+8>>2];t[g+12>>2]=t[A+12>>2];A=n+(u*72|0)+56|0;s=n+(u*72|0)+32|0;r=L5[t[p>>2]&63](p,g,512)|0;while(1){if(!r)break;if(!(+c[r+8>>3]<+c[A>>3]))break;G=t[r>>2]|0;Z=t[l>>2]|0;a=t[s>>2]|0;t[s>>2]=a+1;t[Z+(a<<2)>>2]=G;t[(t[r>>2]|0)+24>>2]=f;r=L5[t[p>>2]&63](p,r,8)|0}a=n+(u*72|0)+64|0;r=L5[t[C>>2]&63](C,g,512)|0;while(1){if(!r){m=20;break}i=+c[a>>3];if(!(+c[r+16>>3]>2]|0;Z=t[l>>2]|0;G=t[s>>2]|0;t[s>>2]=G+1;t[Z+(G<<2)>>2]=A;t[(t[r>>2]|0)+24>>2]=f;r=L5[t[C>>2]&63](C,r,8)|0}if((m|0)==20){m=0;i=+c[a>>3]}c[w>>3]=i;A=n+(u*72|0)+56|0;r=L5[t[p>>2]&63](p,g,512)|0;while(1){if(!r){m=25;break}i=+c[A>>3];if(!(+c[r+8>>3]>2]|0;Z=t[l>>2]|0;G=t[s>>2]|0;t[s>>2]=G+1;t[Z+(G<<2)>>2]=L;t[(t[r>>2]|0)+20>>2]=f;r=L5[t[p>>2]&63](p,r,8)|0}if((m|0)==25){m=0;i=+c[A>>3]}c[g>>3]=i;c[w>>3]=+c[n+(u*72|0)+48>>3];r=L5[t[C>>2]&63](C,g,512)|0;while(1){if(!r)break;if(!(+c[r+16>>3]<+c[a>>3]))break;Z=t[r>>2]|0;G=t[l>>2]|0;L=t[s>>2]|0;t[s>>2]=L+1;t[G+(L<<2)>>2]=Z;t[(t[r>>2]|0)+20>>2]=f;r=L5[t[C>>2]&63](C,r,8)|0}L=t[s>>2]|0;o=L+o|0;k=(L|0)>(k|0)?L:k;u=u+1|0}while(1){if((A|0)>=(r|0))break;en((t[v>>2]|0)+(A*72|0)|0);A=A+1|0;r=t[d>>2]|0}r=t[y>>2]|0;L=t[y+16>>2]|0;t[L+(r*40|0)+32>>2]=r;r=r+1|0;t[L+(r*40|0)+32>>2]=r;gr(y,k);r=0;while(1){if((r|0)>=(t[e>>2]|0))break;An((t[B>>2]|0)+(r*72|0)|0,y);r=r+1|0}Ph(C)|0;Ph(p)|0;G2(E);rn(y);dr(y);h=I;return y|0}function $t(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0;f=L5[t[A>>2]&63](A,r,512)|0;do{if(!f){e=pr(e)|0;if(!a)ge(138183,138131,291,138190);else{f=t[e+32>>2]|0;l=a+(f<<5)|0;a=a+(f<<5)+8|0;t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];t[l>>2]=e;i[e+36>>0]=n;L5[t[A>>2]&63](A,l,1)|0;break}}else l=f}while(0);return t[l>>2]|0}function en(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;e:do{if((+c[e+64>>3]+-3.0-+c[e+48>>3])*.5<2.0){f=t[e+32>>2]|0;l=e+36|0;n=0;while(1){if((n|0)>=(f|0))break e;A=t[(t[l>>2]|0)+(n<<2)>>2]|0;A:do{if(i[A+36>>0]|0){a=t[A+20>>2]|0;if((a|0)==(e|0)){r=t[A+24>>2]|0;A=r;r=t[r>>2]|0;do{t[A>>2]=r|8;A=t[t[A+36>>2]>>2]|0;if(!A)break A;A=t[A+24>>2]|0;r=t[A>>2]|0}while(!(r&1|0))}else{r=a;A=t[a>>2]|0;do{t[r>>2]=A|8;A=t[(t[r+36>>2]|0)+8>>2]|0;if(!A)break A;r=t[A+20>>2]|0;A=t[r>>2]|0}while(!(A&1|0))}}}while(0);n=n+1|0}}}while(0);e:do{if((+c[e+56>>3]+-3.0-+c[e+40>>3])*.5<2.0){f=t[e+32>>2]|0;l=e+36|0;n=0;while(1){if((n|0)>=(f|0))break e;A=t[(t[l>>2]|0)+(n<<2)>>2]|0;A:do{if(!(i[A+36>>0]|0)){a=t[A+20>>2]|0;if((a|0)==(e|0)){r=t[A+24>>2]|0;A=r;r=t[r>>2]|0;do{t[A>>2]=r|16;A=t[(t[A+36>>2]|0)+4>>2]|0;if(!A)break A;A=t[A+24>>2]|0;r=t[A>>2]|0}while(!(r&1|0))}else{r=a;A=t[a>>2]|0;do{t[r>>2]=A|16;A=t[(t[r+36>>2]|0)+12>>2]|0;if(!A)break A;r=t[A+20>>2]|0;A=t[r>>2]|0}while(!(A&1|0))}}}while(0);n=n+1|0}}}while(0);return}function An(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,h=0,w=0.0,k=0;n=+c[e+56>>3]-+c[e+40>>3];f=+c[e+64>>3]-+c[e+48>>3];a=(f+n)*.5+500.0;if((f+-3.0)*.5<2.0){o=(t[e>>2]&8|0)==0;a=o?16384.0:a;w=o?16384.0:n}else w=n;if((n+-3.0)*.5<2.0){o=(t[e>>2]&16|0)==0;f=o?16384.0:f;a=o?16384.0:a}o=e+36|0;r=t[o>>2]|0;i=t[r+8>>2]|0;if((i|0)!=0?(l=t[r+4>>2]|0,(l|0)!=0):0){l=Er(A,i,l,a)|0;i=e+4|0;r=t[i>>2]|0;t[i>>2]=r+1;t[e+8+(r<<2)>>2]=l;r=t[o>>2]|0}i=t[r+4>>2]|0;if((i|0)!=0?(s=t[r>>2]|0,(s|0)!=0):0){s=Er(A,i,s,a)|0;l=e+4|0;r=t[l>>2]|0;t[l>>2]=r+1;t[e+8+(r<<2)>>2]=s;r=t[o>>2]|0}i=t[r+8>>2]|0;if((i|0)!=0?(u=t[r+12>>2]|0,(u|0)!=0):0){u=Er(A,i,u,a)|0;s=e+4|0;r=t[s>>2]|0;t[s>>2]=r+1;t[e+8+(r<<2)>>2]=u;r=t[o>>2]|0}i=t[r+12>>2]|0;if((i|0)!=0?(b=t[r>>2]|0,(b|0)!=0):0){b=Er(A,i,b,a)|0;u=e+4|0;r=t[u>>2]|0;t[u>>2]=r+1;t[e+8+(r<<2)>>2]=b;r=t[o>>2]|0}i=t[r+4>>2]|0;if((i|0)!=0?(h=t[r+12>>2]|0,(h|0)!=0):0){h=Er(A,i,h,f)|0;b=e+4|0;r=t[b>>2]|0;t[b>>2]=r+1;t[e+8+(r<<2)>>2]=h;r=t[o>>2]|0}i=t[r+8>>2]|0;if(i|0?(k=t[r>>2]|0,k|0):0){A=Er(A,i,k,w)|0;h=e+4|0;k=t[h>>2]|0;t[h>>2]=k+1;t[e+8+(k<<2)>>2]=A}return}function rn(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;l=s+8|0;f=s;a=e+16|0;n=t[15712]|0;i=0;while(1){if((i|0)>=(t[e>>2]|0)){A=10;break}A=t[a>>2]|0;r=A+(i*40|0)+20|0;if((t[r>>2]|0)==0?(t[f>>2]=i,a3(n,138096,f)|0,(t[r>>2]|0)==0):0){A=5;break}A=A+(i*40|0)+24|0;if((t[A>>2]|0)==0?(t[l>>2]=i,a3(n,138148,l)|0,(t[A>>2]|0)==0):0){A=8;break}i=i+1|0}if((A|0)==5)ge(138118,138131,311,138138);else if((A|0)==8)ge(138170,138131,313,138138);else if((A|0)==10){h=s;return}}function an(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0.0;a=+c[A+8>>3];t=+c[r+8>>3];if(!(a>t))if(!(a>3];a=+c[r>>3];if(t>a)e=1;else e=(t>31}else e=-1;else e=1;return e|0}function tn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0.0;a=+c[A>>3];t=+c[r>>3];if(!(a>t))if(!(a>3];a=+c[r+8>>3];if(t>a)e=1;else e=(t>31}else e=-1;else e=1;return e|0}function nn(e){e=e|0;var A=0,r=0;r=e+8|0;G2(t[(t[r>>2]|0)+36>>2]|0);A=e+12|0;G2(t[(t[A>>2]|0)+36>>2]|0);G2(t[r>>2]|0);G2(t[A>>2]|0);yr(t[e+16>>2]|0);Ph(t[e+20>>2]|0)|0;Ph(t[e+24>>2]|0)|0;G2(e);return}function fn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+32|0;f=w;l=A<<2;a=l+4|0;l=l+5|0;b=$F(l*56|0)|0;l=KF(l<<2)|0;n=a*5|1;s=$F(n*72|0)|0;o=n<<5;c=KF(o)|0;o=KF(o)|0;t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];t[f+8>>2]=t[i+8>>2];t[f+12>>2]=t[i+12>>2];t[f+16>>2]=t[i+16>>2];t[f+20>>2]=t[i+20>>2];t[f+24>>2]=t[i+24>>2];t[f+28>>2]=t[i+28>>2];ln(e,A,f,b,0);f8(173);sn(a,l);gn(a,b,l,n,s)|0;u=cn(a,b,s,0,c)|0;t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];t[f+8>>2]=t[i+8>>2];t[f+12>>2]=t[i+12>>2];t[f+16>>2]=t[i+16>>2];t[f+20>>2]=t[i+20>>2];t[f+24>>2]=t[i+24>>2];t[f+28>>2]=t[i+28>>2];ln(e,A,f,b,1);sn(a,l);gn(a,b,l,n,s)|0;a=cn(a,b,s,1,o)|0;n=KF(P(u<<5,a)|0)|0;A=0;e=0;while(1){if((A|0)>=(a|0))break;f=o+(A<<5)|0;i=0;while(1){if((i|0)>=(u|0))break;k=e+((on(n+(e<<5)|0,f,c+(i<<5)|0)|0)!=0&1)|0;i=i+1|0;e=k}A=A+1|0}k=AM(n,e<<5)|0;G2(b);G2(l);G2(s);G2(c);G2(o);t[r>>2]=e;h=w;return k|0}function ln(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0;s=h;h=h+96|0;f=s+64|0;l=s;t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];t[f+16>>2]=t[r+16>>2];t[f+20>>2]=t[r+20>>2];t[f+24>>2]=t[r+24>>2];t[f+28>>2]=t[r+28>>2];dn(f,a,1,l);r=vn(i,1,l)|0;n=0;while(1){if((n|0)>=(A|0))break;c=e+(n*72|0)+40|0;t[f>>2]=t[c>>2];t[f+4>>2]=t[c+4>>2];t[f+8>>2]=t[c+8>>2];t[f+12>>2]=t[c+12>>2];t[f+16>>2]=t[c+16>>2];t[f+20>>2]=t[c+20>>2];t[f+24>>2]=t[c+24>>2];t[f+28>>2]=t[c+28>>2];dn(f,a,0,l);r=vn(i,r,l)|0;n=n+1|0}h=s;return}function sn(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;r=0;while(1){if((r|0)>(e|0))break;t[A+(r<<2)>>2]=r;r=r+1|0}n=e+1|0;r=1;while(1){if((r|0)>(e|0))break;f=~~(+s8()*+(n-r|0)+ +(r|0));i=A+(r<<2)|0;a=A+(f<<2)|0;if((r|0)!=(f|0)){f=t[i>>2]|0;t[i>>2]=t[a>>2];t[a>>2]=f}r=r+1|0}return}function cn(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;n=e*5|0;s=n+1|0;o=KF(s<<2)|0;t[47388]=KF(s<<4)|0;t[47389]=KF((e*56|0)+56|0)|0;s=KF(e<<2)|0;t[47390]=s;c=0;while(1){if((c|0)>(n|0))break;if(un(r+(c*72|0)|0,A)|0)break;c=c+1|0}f=t[47388]|0;l=t[47389]|0;n=1;while(1){if((n|0)>(e|0))break;t[f+(n<<4)+8>>2]=t[A+(n*56|0)+48>>2];u=A+(n*56|0)+44|0;t[f+(n<<4)+4>>2]=t[u>>2];t[f+(n<<4)>>2]=n;b=l+(n*56|0)|0;h=A+(n*56|0)|0;t[b>>2]=t[h>>2];t[b+4>>2]=t[h+4>>2];t[b+8>>2]=t[h+8>>2];t[b+12>>2]=t[h+12>>2];t[l+(n*56|0)+16>>2]=t[u>>2];t[l+(n*56|0)+32>>2]=n;t[l+(n*56|0)+48>>2]=1;n=n+1|0}t[47391]=e;t[47392]=0;t[s>>2]=1;n=t[r+(c*72|0)+40>>2]|0;if((n|0)<=0){n=t[r+(c*72|0)+48>>2]|0;if((n|0)>0)n=bn(o,a,0,A,r,0,c,n,i,2)|0;else n=0}else n=bn(o,a,0,A,r,0,c,n,i,1)|0;G2(o);G2(t[47388]|0);G2(t[47389]|0);G2(t[47390]|0);return n|0}function on(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0,n=0.0;n=+c[(+c[A>>3]>+c[r>>3]?A:r)>>3];t=+c[(+c[A+16>>3]<+c[r+16>>3]?A:r)+16>>3];c[e+16>>3]=t;c[e>>3]=n;a=+c[(+c[A+8>>3]>+c[r+8>>3]?A:r)+8>>3];i=+c[(+c[A+24>>3]<+c[r+24>>3]?A:r)+24>>3];c[e+24>>3]=i;c[e+8>>3]=a;return!(n>=t)&!(a>=i)&1|0}function un(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0;a=t[e+4>>2]|0;do{if((t[e+68>>2]|0)!=2?!((a|0)<1|(t[e>>2]|0)<1):0){if(!((t[e+40>>2]|0)<1?(t[e+44>>2]|0)<1:0)){if((t[e+48>>2]|0)>=1){e=0;break}if((t[e+52>>2]|0)>=1){e=0;break}}r=+c[A+(a*56|0)+24>>3];i=+c[A+(a*56|0)+8>>3];if(!(r>i+1.0e-07))if(r>3]>+c[A+(a*56|0)>>3]&1;else e=1}else e=0}while(0);return e|0}function bn(e,A,r,i,a,n,f,l,s,o){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;o=o|0;var u=0,b=0,h=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,D=0,z=0,W=0,Y=0.0,F=0,M=0.0,V=0,N=0,R=0,x=0,J=0;G=(s|0)==0;Z=f;e:while(1){y=a+(Z*72|0)|0;if((Z|0)<1)break;f=e+(Z<<2)|0;if(t[f>>2]|0)break;t[f>>2]=1;p=a+(Z*72|0)+8|0;g=a+(Z*72|0)+16|0;w=+c[g>>3];E=a+(Z*72|0)+24|0;B=a+(Z*72|0)+32|0;h=+c[B>>3];if((w>h?(I=t[y>>2]|0,Y=+c[i+(I*56|0)>>3],Y==+c[i+(I*56|0)+16>>3]):0)?(I=t[a+(Z*72|0)+4>>2]|0,M=+c[i+(I*56|0)>>3],M==+c[i+(I*56|0)+16>>3]):0){f=A+(r<<5)|0;if(G){c[f>>3]=Y;k=w;w=M}else{c[f>>3]=h;k=-Y;h=-M}c[A+(r<<5)+8>>3]=h;c[A+(r<<5)+16>>3]=w;c[A+(r<<5)+24>>3]=k;r=r+1|0}f=a+(Z*72|0)+40|0;C=t[f>>2]|0;do{if((C|0)<1?(V=a+(Z*72|0)+44|0,(t[V>>2]|0)<1):0){f=a+(Z*72|0)+48|0;b=a+(Z*72|0)+52|0;if((t[f>>2]|0)>0?(N=t[b>>2]|0,(N|0)>0):0){u=t[a+(N*72|0)>>2]|0;o=t[y>>2]|0;if((N|0)==(l|0)){o=hn(n,o,u)|0;r=bn(e,A,r,i,a,n,t[b>>2]|0,Z,s,1)|0;n=o;o=1;break}else{o=hn(n,u,o)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,1)|0;n=o;f=b;o=1;break}}r=bn(e,A,r,i,a,n,C,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[V>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,1)|0;f=b;o=1}else J=19}while(0);do{if((J|0)==19){J=0;I=a+(Z*72|0)+48|0;d=t[I>>2]|0;if((d|0)<1?(R=a+(Z*72|0)+52|0,(t[R>>2]|0)<1):0){b=a+(Z*72|0)+44|0;if((C|0)>0?(x=t[b>>2]|0,(x|0)>0):0){u=t[a+(Z*72|0)+4>>2]|0;o=t[a+(C*72|0)+4>>2]|0;if((x|0)==(l|0)){o=hn(n,o,u)|0;r=bn(e,A,r,i,a,n,t[b>>2]|0,Z,s,2)|0;n=o;o=2;break}else{o=hn(n,u,o)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;n=o;f=b;o=2;break}}r=bn(e,A,r,i,a,n,C,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[b>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;f=R;o=1;break}m=a+(Z*72|0)+44|0;v=t[m>>2]|0;u=(v|0)>0;if((C|0)>0){if(u){if((d|0)>0?(L=a+(Z*72|0)+52|0,D=t[L>>2]|0,(D|0)>0):0){b=t[a+(D*72|0)>>2]|0;u=t[a+(C*72|0)+4>>2]|0;if(!((o|0)==2&(D|0)==(l|0))?!((o|0)==1&(v|0)==(l|0)):0){o=hn(n,b,u)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[m>>2]|0,Z,s,2)|0;n=o;f=L;o=1;break}o=hn(n,u,b)|0;r=bn(e,A,r,i,a,n,t[m>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[L>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[f>>2]|0,Z,s,2)|0;n=o;f=I;o=1;break}u=t[y>>2]|0;if(+Q(+(+c[B>>3]-+c[i+(u*56|0)+24>>3]))<=1.0e-07?+Q(+(+c[E>>3]-+c[i+(u*56|0)+16>>3]))<=1.0e-07:0){b=t[a+(C*72|0)+4>>2]|0;u=t[i+(u*56|0)+44>>2]|0;if((o|0)==1&(C|0)==(l|0)){o=hn(n,u,b)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,o,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[m>>2]|0,Z,s,2)|0;n=o;f=a+(Z*72|0)+52|0;o=1;break}else{o=hn(n,b,u)|0;r=bn(e,A,r,i,a,n,t[m>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;n=o;o=2;break}}b=t[a+(Z*72|0)+4>>2]|0;u=t[a+(C*72|0)+4>>2]|0;if((o|0)==1&(v|0)==(l|0)){o=hn(n,u,b)|0;r=bn(e,A,r,i,a,n,t[m>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,o,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[I>>2]|0,Z,s,1)|0;n=o;o=2;break}else{o=hn(n,b,u)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;n=o;f=m;o=2;break}}}else if(!u)break e;if((d|0)>0?(z=a+(Z*72|0)+52|0,W=t[z>>2]|0,(W|0)>0):0){b=t[y>>2]|0;if(+Q(+(+c[g>>3]-+c[i+(b*56|0)+8>>3]))<=1.0e-07?+Q(+(+c[p>>3]-+c[i+(b*56|0)>>3]))<=1.0e-07:0){u=t[a+(W*72|0)>>2]|0;if((o|0)==2&(d|0)==(l|0)){o=hn(n,u,b)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,o,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;n=o;f=z;o=1;break}else{o=hn(n,b,u)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[z>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;n=o;f=I;o=1;break}}u=t[a+(W*72|0)>>2]|0;b=t[i+((t[a+(Z*72|0)+4>>2]|0)*56|0)+44>>2]|0;if((o|0)==2&(W|0)==(l|0)){o=hn(n,b,u)|0;r=bn(e,A,r,i,a,n,t[z>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,o,t[f>>2]|0,Z,s,2)|0;n=o;f=I;o=1;break}else{o=hn(n,u,b)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;n=o;f=z;o=1;break}}h=+c[g>>3];b=t[y>>2]|0;if(((+Q(+(h-+c[i+(b*56|0)+8>>3]))<=1.0e-07?+Q(+(+c[p>>3]-+c[i+(b*56|0)>>3]))<=1.0e-07:0)?(F=t[a+(Z*72|0)+4>>2]|0,+Q(+(+c[B>>3]-+c[i+(F*56|0)+8>>3]))<=1.0e-07):0)?+Q(+(+c[E>>3]-+c[i+(F*56|0)>>3]))<=1.0e-07:0)if((o|0)==1){o=hn(n,b,F)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,o,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;n=o;f=I;o=1;break}else{o=hn(n,F,b)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[f>>2]|0,Z,s,2)|0;n=o;f=a+(Z*72|0)+44|0;o=2;break}l=t[a+(Z*72|0)+4>>2]|0;if(((+Q(+(h-+c[i+(l*56|0)+24>>3]))<=1.0e-07?+Q(+(+c[p>>3]-+c[i+(l*56|0)+16>>3]))<=1.0e-07:0)?+Q(+(+c[B>>3]-+c[i+(b*56|0)+24>>3]))<=1.0e-07:0)?+Q(+(+c[E>>3]-+c[i+(b*56|0)+16>>3]))<=1.0e-07:0){u=t[i+(l*56|0)+44>>2]|0;l=t[i+(b*56|0)+44>>2]|0;if((o|0)==1){o=hn(n,l,u)|0;r=bn(e,A,r,i,a,n,t[f>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;r=bn(e,A,r,i,a,o,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;n=o;f=I;o=1;break}else{o=hn(n,u,l)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+52>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,o,t[f>>2]|0,Z,s,2)|0;n=o;f=a+(Z*72|0)+44|0;o=2;break}}r=bn(e,A,r,i,a,n,C,Z,s,2)|0;r=bn(e,A,r,i,a,n,t[I>>2]|0,Z,s,1)|0;r=bn(e,A,r,i,a,n,t[a+(Z*72|0)+44>>2]|0,Z,s,2)|0;f=a+(Z*72|0)+52|0;o=1}}while(0);l=Z;Z=t[f>>2]|0}return r|0}function hn(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;a=h;h=h+16|0;d=a+4|0;l=a;i=(t[47392]|0)+1|0;t[47392]=i;o=t[47389]|0;wn(A,r,d,l);d=t[d>>2]|0;f=t[o+(A*56|0)+32+(d<<2)>>2]|0;l=t[o+(r*56|0)+32+(t[l>>2]<<2)>>2]|0;u=t[47391]|0;n=u+1|0;u=u+2|0;t[47391]=u;k=t[47388]|0;t[k+(n<<4)>>2]=A;t[k+(u<<4)>>2]=r;b=k+(f<<4)+4|0;w=k+(n<<4)+4|0;t[w>>2]=t[b>>2];t[k+(t[b>>2]<<4)+8>>2]=n;t[k+(n<<4)+8>>2]=u;t[k+(u<<4)+4>>2]=n;s=k+(l<<4)+8|0;t[k+(u<<4)+8>>2]=t[s>>2];t[k+(t[s>>2]<<4)+4>>2]=u;t[b>>2]=l;t[s>>2]=f;s=o+(A*56|0)+48|0;b=t[s>>2]|0;l=o+(r*56|0)+48|0;c=t[l>>2]|0;t[o+(A*56|0)+16+(d<<2)>>2]=r;t[o+(A*56|0)+32+(b<<2)>>2]=n;t[o+(A*56|0)+16+(b<<2)>>2]=t[k+(t[w>>2]<<4)>>2];t[o+(r*56|0)+32+(c<<2)>>2]=u;t[o+(r*56|0)+16+(c<<2)>>2]=A;t[s>>2]=(t[s>>2]|0)+1;t[l>>2]=(t[l>>2]|0)+1;r=t[47390]|0;t[r+(e<<2)>>2]=f;t[r+(i<<2)>>2]=n;h=a;return i|0}function wn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0,l=0,s=0.0,c=0.0,o=0,u=0,b=0;o=t[47389]|0;u=o+(e*56|0)|0;b=o+(A*56|0)|0;a=0;n=-4.0;l=0;while(1){if((l|0)==4)break;f=t[o+(e*56|0)+16+(l<<2)>>2]|0;if((f|0)>=1?(s=+kn(u,o+(f*56|0)|0,b),s>n):0){a=l;n=s}l=l+1|0}t[r>>2]=a;a=0;l=0;n=-4.0;while(1){if((l|0)==4)break;f=t[o+(A*56|0)+16+(l<<2)>>2]|0;if((f|0)>=1?(c=+kn(b,o+(f*56|0)|0,u),c>n):0){a=l;n=c}l=l+1|0}t[i>>2]=a;return}function kn(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0,n=0.0,f=0.0;n=+c[e>>3];f=+c[A>>3]-n;i=+c[e+8>>3];t=+c[A+8>>3]-i;n=+c[r>>3]-n;i=+c[r+8>>3]-i;a=i*t+n*f;if(!(i*f-n*t>=0.0))i=-a/(+D(+(i*i+n*n))*+D(+(t*t+f*f)))+-2.0;else i=a/(+D(+(i*i+n*n))*+D(+(t*t+f*f)));return+i}function dn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0.0;t[i>>2]=t[e>>2];t[i+4>>2]=t[e+4>>2];t[i+8>>2]=t[e+8>>2];t[i+12>>2]=t[e+12>>2];f=i+32|0;l=e+16|0;t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];t[f+8>>2]=t[l+8>>2];t[f+12>>2]=t[l+12>>2];if(!r){a=e+8|0;n=l;f=e+24|0;r=e}else{a=e+24|0;n=e;f=e+8|0;r=l}s=+c[n>>3];o=+c[f>>3];c[i+16>>3]=+c[r>>3];c[i+24>>3]=o;c[i+48>>3]=s;c[i+56>>3]=+c[a>>3];e:do{if(A|0){r=0;while(1){if((r|0)==4)break e;l=i+(r<<4)+8|0;o=+c[l>>3];A=i+(r<<4)|0;c[l>>3]=+c[A>>3];c[A>>3]=-o;r=r+1|0}}}while(0);return}function vn(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;f=A+3|0;l=A+1|0;s=A+2|0;c=e+(A*56|0)+44|0;o=e+(f*56|0)+44|0;i=0;a=A;while(1){if((a|0)>(f|0))break;do{if((a|0)!=(A|0))if((a|0)==(f|0)){t[o>>2]=A;n=s;break}else{t[e+(a*56|0)+44>>2]=a+1;n=a+-1|0;break}else{t[c>>2]=l;n=f}}while(0);t[e+(a*56|0)+48>>2]=n;t[e+(a*56|0)+32>>2]=0;b=e+(a*56|0)|0;u=r+(i<<4)|0;t[b>>2]=t[u>>2];t[b+4>>2]=t[u+4>>2];t[b+8>>2]=t[u+8>>2];t[b+12>>2]=t[u+12>>2];D6(e+(n*56|0)+16|0,u|0,16)|0;i=i+1|0;a=a+1|0}return A+4|0}function gn(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0;t[47393]=i<<1;t[47394]=i;c=KF(i*80|0)|0;t[47395]=1;t[47396]=1;z6(a|0,0,i*72|0)|0;n=mn(t[r+4>>2]|0,A,a,c)|0;i=1;while(1){if((i|0)>(e|0))break;t[A+(i*56|0)+40>>2]=n;t[A+(i*56|0)+36>>2]=n;i=i+1|0}s=pn(e)|0;n=2;l=1;while(1){if((l|0)>(s|0))break;i=En(e,l+-1|0)|0;f=En(e,l)|0;while(1){if((i|0)>=(f|0)){i=1;break}Bn(t[r+(n<<2)>>2]|0,A,a,c);i=i+1|0;n=n+1|0}while(1){if((i|0)>(e|0))break;yn(i,A,a,c);i=i+1|0}l=l+1|0}i=En(e,s)|0;while(1){if((i|0)>=(e|0))break;Bn(t[r+(n<<2)>>2]|0,A,a,c);n=n+1|0;i=i+1|0}G2(c);return t[47395]|0}function mn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0;a=Ln()|0;t[i+(a*40|0)>>2]=2;v=i+(a*40|0)+8|0;s=A+(e*56|0)|0;o=A+(e*56|0)+16|0;Wn(v,s,o);b=Ln()|0;t[i+(a*40|0)+36>>2]=b;t[i+(b*40|0)>>2]=3;t[i+(b*40|0)+28>>2]=a;l=Ln()|0;t[i+(a*40|0)+32>>2]=l;t[i+(l*40|0)>>2]=2;d=i+(l*40|0)+8|0;Yn(d,s,o);t[i+(l*40|0)+28>>2]=a;o=Ln()|0;t[i+(l*40|0)+32>>2]=o;t[i+(o*40|0)>>2]=3;t[i+(o*40|0)+28>>2]=l;s=Ln()|0;t[i+(l*40|0)+36>>2]=s;t[i+(s*40|0)>>2]=1;t[i+(s*40|0)+4>>2]=e;t[i+(s*40|0)+28>>2]=l;l=Ln()|0;t[i+(s*40|0)+32>>2]=l;t[i+(l*40|0)>>2]=3;t[i+(l*40|0)+28>>2]=s;n=Ln()|0;t[i+(s*40|0)+36>>2]=n;t[i+(n*40|0)>>2]=3;t[i+(n*40|0)+28>>2]=s;s=Gn(r)|0;f=Gn(r)|0;u=Gn(r)|0;h=Gn(r)|0;w=r+(s*72|0)+8|0;k=r+(f*72|0)+8|0;g=r+(h*72|0)+24|0;t[g>>2]=t[v>>2];t[g+4>>2]=t[v+4>>2];t[g+8>>2]=t[v+8>>2];t[g+12>>2]=t[v+12>>2];D6(k|0,v|0,16)|0;t[w>>2]=t[k>>2];t[w+4>>2]=t[k+4>>2];t[w+8>>2]=t[k+8>>2];t[w+12>>2]=t[k+12>>2];w=r+(s*72|0)+24|0;k=r+(f*72|0)+24|0;v=r+(u*72|0)+8|0;t[v>>2]=t[d>>2];t[v+4>>2]=t[d+4>>2];t[v+8>>2]=t[d+8>>2];t[v+12>>2]=t[d+12>>2];D6(k|0,d|0,16)|0;t[w>>2]=t[k>>2];t[w+4>>2]=t[k+4>>2];t[w+8>>2]=t[k+8>>2];t[w+12>>2]=t[k+12>>2];c[r+(h*72|0)+16>>3]=1073741824.0;c[r+(h*72|0)+8>>3]=1073741824.0;c[r+(u*72|0)+32>>3]=-1073741824.0;c[r+(u*72|0)+24>>3]=-1073741824.0;t[r+(f*72|0)>>2]=e;t[r+(s*72|0)+4>>2]=e;t[r+(f*72|0)+40>>2]=h;t[r+(s*72|0)+40>>2]=h;t[r+(f*72|0)+48>>2]=u;t[r+(s*72|0)+48>>2]=u;t[r+(u*72|0)+40>>2]=s;t[r+(h*72|0)+48>>2]=s;t[r+(u*72|0)+44>>2]=f;t[r+(h*72|0)+52>>2]=f;t[r+(s*72|0)+56>>2]=l;t[r+(f*72|0)+56>>2]=n;t[r+(u*72|0)+56>>2]=o;t[r+(h*72|0)+56>>2]=b;t[r+(f*72|0)+68>>2]=1;t[r+(s*72|0)+68>>2]=1;t[r+(h*72|0)+68>>2]=1;t[r+(u*72|0)+68>>2]=1;t[i+(b*40|0)+24>>2]=h;t[i+(o*40|0)+24>>2]=u;t[i+(l*40|0)+24>>2]=s;t[i+(n*40|0)+24>>2]=f;t[A+(e*56|0)+32>>2]=1;return a|0}function pn(e){e=e|0;var A=0.0;A=+(e|0);e=0;while(1){if(!(A>=1.0))break;A=+t1(A);e=e+1|0}return e+-1|0}function En(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+(e|0);r=i;e=0;while(1){if((e|0)>=(A|0))break;r=+t1(r);e=e+1|0}return~~+H(+(i/r))|0}function Bn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0,O=0;T=h;h=h+96|0;X=T+32|0;a=T+16|0;S=T;v=X;s=A+(e*56|0)|0;d=v+56|0;do{t[v>>2]=t[s>>2];v=v+4|0;s=s+4|0}while((v|0)<(d|0));j=X+16|0;U=X+24|0;f=+c[U>>3];W=X+8|0;l=+c[W>>3];do{if(!(f>l+1.0e-07)){if(!(f>3]>+c[X>>3]:0){z=4;break}z=(Zn(e,A,1)|0)==0;a=t[X+36>>2]|0;if(z){u=0;z=7}else{a=Cn(X,j,a,A,i)|0;z=20}}else z=4}while(0);if((z|0)==4){t[a>>2]=t[X>>2];t[a+4>>2]=t[X+4>>2];t[a+8>>2]=t[X+8>>2];t[a+12>>2]=t[X+12>>2];t[X>>2]=t[j>>2];t[X+4>>2]=t[j+4>>2];t[X+8>>2]=t[j+8>>2];t[X+12>>2]=t[j+12>>2];t[j>>2]=t[a>>2];t[j+4>>2]=t[a+4>>2];t[j+8>>2]=t[a+8>>2];t[j+12>>2]=t[a+12>>2];L=X+36|0;D=t[L>>2]|0;z=X+40|0;a=t[z>>2]|0;t[L>>2]=a;t[z>>2]=D;if(!(Zn(e,A,2)|0)){u=1;z=7}else{a=Cn(X,j,a,A,i)|0;z=19}}if((z|0)==7){o=Cn(X,j,a,A,i)|0;a=Gn(r)|0;t[r+(a*72|0)+68>>2]=1;v=r+(a*72|0)|0;s=r+(o*72|0)|0;d=v+72|0;do{t[v>>2]=t[s>>2];v=v+4|0;s=s+4|0}while((v|0)<(d|0));k=+c[W>>3];c[r+(a*72|0)+16>>3]=k;c[r+(o*72|0)+32>>3]=k;k=+c[X>>3];c[r+(a*72|0)+8>>3]=k;c[r+(o*72|0)+24>>3]=k;t[r+(o*72|0)+48>>2]=a;t[r+(o*72|0)+52>>2]=0;t[r+(a*72|0)+40>>2]=o;t[r+(a*72|0)+44>>2]=0;n=t[r+(a*72|0)+48>>2]|0;if((n|0)>0){s=r+(n*72|0)+40|0;if((t[s>>2]|0)==(o|0))t[s>>2]=a;n=r+(n*72|0)+44|0;if((t[n>>2]|0)==(o|0))t[n>>2]=a}n=t[r+(a*72|0)+52>>2]|0;if((n|0)>0){s=r+(n*72|0)+40|0;if((t[s>>2]|0)==(o|0))t[s>>2]=a;n=r+(n*72|0)+44|0;if((t[n>>2]|0)==(o|0))t[n>>2]=a}L=Ln()|0;z=Ln()|0;D=r+(o*72|0)+56|0;G=t[D>>2]|0;t[i+(G*40|0)>>2]=2;Z=i+(G*40|0)+8|0;t[Z>>2]=t[X>>2];t[Z+4>>2]=t[X+4>>2];t[Z+8>>2]=t[X+8>>2];t[Z+12>>2]=t[X+12>>2];t[i+(G*40|0)+4>>2]=e;t[i+(G*40|0)+32>>2]=z;t[i+(G*40|0)+36>>2]=L;t[i+(L*40|0)>>2]=3;t[i+(L*40|0)+24>>2]=o;t[i+(L*40|0)+28>>2]=G;t[i+(z*40|0)>>2]=3;t[i+(z*40|0)+24>>2]=a;t[i+(z*40|0)+28>>2]=G;t[D>>2]=L;t[r+(a*72|0)+56>>2]=z;if(u)z=19;else z=20}if((z|0)==19)if(!(Zn(e,A,1)|0)){n=1;z=21}else{n=1;z=32}else if((z|0)==20)if(!(Zn(e,A,2)|0)){n=0;z=21}else{n=0;z=32}if((z|0)==21){b=Cn(j,X,t[X+40>>2]|0,A,i)|0;u=Gn(r)|0;t[r+(u*72|0)+68>>2]=1;v=r+(u*72|0)|0;s=r+(b*72|0)|0;d=v+72|0;do{t[v>>2]=t[s>>2];v=v+4|0;s=s+4|0}while((v|0)<(d|0));k=+c[U>>3];c[r+(u*72|0)+16>>3]=k;c[r+(b*72|0)+32>>3]=k;k=+c[j>>3];c[r+(u*72|0)+8>>3]=k;c[r+(b*72|0)+24>>3]=k;t[r+(b*72|0)+48>>2]=u;t[r+(b*72|0)+52>>2]=0;t[r+(u*72|0)+40>>2]=b;t[r+(u*72|0)+44>>2]=0;s=t[r+(u*72|0)+48>>2]|0;if((s|0)>0){o=r+(s*72|0)+40|0;if((t[o>>2]|0)==(b|0))t[o>>2]=u;s=r+(s*72|0)+44|0;if((t[s>>2]|0)==(b|0))t[s>>2]=u}s=t[r+(u*72|0)+52>>2]|0;if((s|0)>0){o=r+(s*72|0)+40|0;if((t[o>>2]|0)==(b|0))t[o>>2]=u;s=r+(s*72|0)+44|0;if((t[s>>2]|0)==(b|0))t[s>>2]=u}G=Ln()|0;D=Ln()|0;L=r+(b*72|0)+56|0;Z=t[L>>2]|0;t[i+(Z*40|0)>>2]=2;I=i+(Z*40|0)+8|0;t[I>>2]=t[j>>2];t[I+4>>2]=t[j+4>>2];t[I+8>>2]=t[j+8>>2];t[I+12>>2]=t[j+12>>2];t[i+(Z*40|0)+4>>2]=e;t[i+(Z*40|0)+32>>2]=D;t[i+(Z*40|0)+36>>2]=G;t[i+(G*40|0)>>2]=3;t[i+(G*40|0)+24>>2]=b;t[i+(G*40|0)+28>>2]=Z;t[i+(D*40|0)>>2]=3;t[i+(D*40|0)+24>>2]=u;t[i+(D*40|0)+28>>2]=Z;t[L>>2]=G;t[r+(u*72|0)+56>>2]=D;D=a;a=0}else if((z|0)==32){D=a;b=Cn(j,X,t[X+40>>2]|0,A,i)|0;a=1}e:do{if((D|0)>0){G=r+(b*72|0)+24|0;L=r+(b*72|0)+32|0;Z=(a|0)!=0;y=n?A+(e*56|0)+48|0:A+(e*56|0)+44|0;C=S+8|0;n=0;a=0;B=D;A:while(1){s=r+(B*72|0)|0;p=r+(B*72|0)+24|0;if(!(Qn(p,G)|0))break e;o=r+(B*72|0)+56|0;m=t[o>>2]|0;u=Ln()|0;w=Ln()|0;t[i+(m*40|0)>>2]=1;t[i+(m*40|0)+4>>2]=e;t[i+(m*40|0)+32>>2]=u;t[i+(m*40|0)+36>>2]=w;t[i+(u*40|0)>>2]=3;t[i+(u*40|0)+24>>2]=B;t[i+(u*40|0)+28>>2]=m;t[i+(w*40|0)>>2]=3;E=Gn(r)|0;t[i+(w*40|0)+24>>2]=E;I=r+(E*72|0)|0;t[r+(E*72|0)+68>>2]=1;t[i+(w*40|0)+28>>2]=m;n=(B|0)==(D|0)?E:n;m=r+(B*72|0)+32|0;if(+Q(+(+c[m>>3]-+c[L>>3]))<=1.0e-07?+Q(+(+c[p>>3]-+c[G>>3]))<=1.0e-07:0)a=E;v=I;d=v+72|0;do{t[v>>2]=t[s>>2];v=v+4|0;s=s+4|0}while((v|0)<(d|0));t[o>>2]=u;t[r+(E*72|0)+56>>2]=w;g=r+(B*72|0)+48|0;o=r+(B*72|0)+52|0;s=(t[o>>2]|0)<1;do{if((t[g>>2]|0)<1){if(s)break A;v=r+(B*72|0)+40|0;s=t[v>>2]|0;do{if((s|0)>0?(N=r+(B*72|0)+44|0,R=t[N>>2]|0,(R|0)>0):0){d=r+(B*72|0)+60|0;s=t[d>>2]|0;if((s|0)<=0){t[r+(E*72|0)+40>>2]=R;t[r+(E*72|0)+44>>2]=-1;t[N>>2]=-1;t[r+(R*72|0)+48>>2]=E;break}if((t[r+(B*72|0)+64>>2]|0)==1){t[r+(E*72|0)+40>>2]=R;t[N>>2]=-1;t[r+(E*72|0)+44>>2]=s;t[r+((t[v>>2]|0)*72|0)+48>>2]=B;w=E;u=R}else{t[r+(E*72|0)+44>>2]=-1;g=r+(E*72|0)+40|0;t[g>>2]=t[N>>2];u=t[v>>2]|0;t[N>>2]=u;t[v>>2]=s;t[r+(s*72|0)+48>>2]=B;w=B;s=t[g>>2]|0}t[r+(u*72|0)+48>>2]=w;t[r+(s*72|0)+48>>2]=E;t[r+(E*72|0)+60>>2]=0;t[d>>2]=0}else z=77}while(0);do{if((z|0)==77){z=0;u=r+(s*72|0)+48|0;w=t[u>>2]|0;s=r+(s*72|0)+52|0;if((w|0)>0?(t[s>>2]|0)>0:0){s=t[r+(w*72|0)+4>>2]|0;if((s|0)>0?(In(s,A,j)|0)==0:0){t[r+(E*72|0)+44>>2]=-1;t[r+(B*72|0)+44>>2]=-1;t[v>>2]=-1;t[r+((t[r+(E*72|0)+40>>2]|0)*72|0)+52>>2]=E;break}t[r+(B*72|0)+44>>2]=-1;t[r+(E*72|0)+44>>2]=-1;t[r+(E*72|0)+40>>2]=-1;t[r+((t[v>>2]|0)*72|0)+48>>2]=B;break}t[u>>2]=B;t[s>>2]=E}}while(0);if(+Q(+(+c[m>>3]-+c[L>>3]))<=1.0e-07?Z&+Q(+(+c[p>>3]-+c[G>>3]))<=1.0e-07:0){s=t[y>>2]|0;if((s|0)>0?(In(s,A,X)|0)!=0:0){t[r+((t[o>>2]|0)*72|0)+40>>2]=B;u=r+(E*72|0)+52|0;s=E}else{t[r+((t[r+(E*72|0)+52>>2]|0)*72|0)+44>>2]=E;u=o;s=B}t[u>>2]=-1;t[r+(s*72|0)+48>>2]=-1;s=t[o>>2]|0;break}s=t[o>>2]|0;o=r+(s*72|0)+40|0;u=t[o>>2]|0;w=r+(s*72|0)+44|0;if((u|0)>0?(x=t[w>>2]|0,J=(u|0)==(B|0),(x|0)>0):0){t[r+(s*72|0)+60>>2]=J?x:u;t[r+(s*72|0)+64>>2]=J?1:2}t[o>>2]=B;t[w>>2]=E}else{if(!s){f=+c[m>>3];l=+c[W>>3];k=f-l;if(!(+Q(+k)<=1.0e-07)){c[C>>3]=f;f=+c[X>>3];c[S>>3]=(+c[j>>3]-f)*(k/(+c[U>>3]-l))+f;v=(Dn(S,p)|0)!=0}else v=+c[p>>3]>+c[X>>3];d=r+(B*72|0)+40|0;s=t[d>>2]|0;do{if((s|0)>0?(H=r+(B*72|0)+44|0,P=t[H>>2]|0,(P|0)>0):0){w=r+(B*72|0)+60|0;s=t[w>>2]|0;if((s|0)<=0){t[r+(E*72|0)+40>>2]=P;t[r+(E*72|0)+44>>2]=-1;t[H>>2]=-1;t[r+(P*72|0)+48>>2]=E;break}if((t[r+(B*72|0)+64>>2]|0)==1){t[r+(E*72|0)+40>>2]=P;t[H>>2]=-1;t[r+(E*72|0)+44>>2]=s;t[r+((t[d>>2]|0)*72|0)+48>>2]=B;u=E;o=P}else{t[r+(E*72|0)+44>>2]=-1;O=r+(E*72|0)+40|0;t[O>>2]=t[H>>2];o=t[d>>2]|0;t[H>>2]=o;t[d>>2]=s;t[r+(s*72|0)+48>>2]=B;u=B;s=t[O>>2]|0}t[r+(o*72|0)+48>>2]=u;t[r+(s*72|0)+48>>2]=E;t[r+(E*72|0)+60>>2]=0;t[w>>2]=0}else z=106}while(0);do{if((z|0)==106){z=0;o=r+(s*72|0)+48|0;u=t[o>>2]|0;s=r+(s*72|0)+52|0;if((u|0)>0?(t[s>>2]|0)>0:0){s=t[r+(u*72|0)+4>>2]|0;if((s|0)>0?(In(s,A,j)|0)==0:0){t[r+(E*72|0)+44>>2]=-1;t[r+(B*72|0)+44>>2]=-1;t[d>>2]=-1;t[r+((t[r+(E*72|0)+40>>2]|0)*72|0)+52>>2]=E;break}t[r+(B*72|0)+44>>2]=-1;t[r+(E*72|0)+44>>2]=-1;t[r+(E*72|0)+40>>2]=-1;t[r+((t[d>>2]|0)*72|0)+48>>2]=B;break}t[o>>2]=B;t[s>>2]=E}}while(0);if(+Q(+(+c[m>>3]-+c[L>>3]))<=1.0e-07?Z&+Q(+(+c[p>>3]-+c[G>>3]))<=1.0e-07:0){s=t[g>>2]|0;t[r+(s*72|0)+40>>2]=B;t[r+(s*72|0)+44>>2]=-1;s=r+(B*72|0)+52|0;O=t[s>>2]|0;t[r+(O*72|0)+40>>2]=E;t[r+(O*72|0)+44>>2]=-1;t[r+(E*72|0)+48>>2]=O;t[r+(E*72|0)+52>>2]=-1;t[s>>2]=-1;s=-1}else z=116;do{if((z|0)==116){z=0;s=t[g>>2]|0;t[r+(s*72|0)+40>>2]=B;o=r+(s*72|0)+44|0;if(v){t[o>>2]=E;O=r+(B*72|0)+52|0;p=t[O>>2]|0;t[r+(p*72|0)+40>>2]=E;t[r+(p*72|0)+44>>2]=-1;t[O>>2]=-1;break}else{t[o>>2]=-1;s=r+(B*72|0)+52|0;O=t[s>>2]|0;t[r+(O*72|0)+40>>2]=B;t[r+(O*72|0)+44>>2]=E;t[r+(E*72|0)+48>>2]=O;t[r+(E*72|0)+52>>2]=-1;s=t[s>>2]|0;break}}}while(0);break}v=r+(B*72|0)+40|0;s=t[v>>2]|0;do{if((s|0)>0?(Y=r+(B*72|0)+44|0,F=t[Y>>2]|0,(F|0)>0):0){d=r+(B*72|0)+60|0;s=t[d>>2]|0;if((s|0)<=0){t[r+(E*72|0)+40>>2]=F;t[r+(E*72|0)+44>>2]=-1;t[Y>>2]=-1;t[r+(F*72|0)+48>>2]=E;break}if((t[r+(B*72|0)+64>>2]|0)==1){t[r+(E*72|0)+40>>2]=F;t[Y>>2]=-1;t[r+(E*72|0)+44>>2]=s;t[r+((t[v>>2]|0)*72|0)+48>>2]=B;w=E;u=F}else{t[r+(E*72|0)+44>>2]=-1;O=r+(E*72|0)+40|0;t[O>>2]=t[Y>>2];u=t[v>>2]|0;t[Y>>2]=u;t[v>>2]=s;t[r+(s*72|0)+48>>2]=B;w=B;s=t[O>>2]|0}t[r+(u*72|0)+48>>2]=w;t[r+(s*72|0)+48>>2]=E;t[r+(E*72|0)+60>>2]=0;t[d>>2]=0}else z=51}while(0);do{if((z|0)==51){z=0;u=r+(s*72|0)+48|0;w=t[u>>2]|0;s=r+(s*72|0)+52|0;if((w|0)>0?(t[s>>2]|0)>0:0){s=t[r+(w*72|0)+4>>2]|0;if((s|0)>0?(In(s,A,j)|0)==0:0){t[r+(E*72|0)+44>>2]=-1;t[r+(B*72|0)+44>>2]=-1;t[v>>2]=-1;t[r+((t[r+(E*72|0)+40>>2]|0)*72|0)+52>>2]=E;break}t[r+(B*72|0)+44>>2]=-1;t[r+(E*72|0)+44>>2]=-1;t[r+(E*72|0)+40>>2]=-1;t[r+((t[v>>2]|0)*72|0)+48>>2]=B;break}t[u>>2]=B;t[s>>2]=E}}while(0);if(+Q(+(+c[m>>3]-+c[L>>3]))<=1.0e-07?Z&+Q(+(+c[p>>3]-+c[G>>3]))<=1.0e-07:0){s=t[y>>2]|0;if((s|0)>0?(In(s,A,X)|0)!=0:0){t[r+((t[g>>2]|0)*72|0)+40>>2]=B;o=r+(E*72|0)+52|0;s=E}else{t[r+((t[r+(E*72|0)+48>>2]|0)*72|0)+44>>2]=E;s=B}t[o>>2]=-1;t[r+(s*72|0)+48>>2]=-1;s=t[g>>2]|0;break}s=t[g>>2]|0;o=r+(s*72|0)+40|0;u=t[o>>2]|0;w=r+(s*72|0)+44|0;if((u|0)>0?(M=t[w>>2]|0,V=(u|0)==(B|0),(M|0)>0):0){t[r+(s*72|0)+60>>2]=V?M:u;t[r+(s*72|0)+64>>2]=V?1:2}t[o>>2]=B;t[w>>2]=E}}while(0);t[I>>2]=e;t[r+(B*72|0)+4>>2]=e;if((s|0)>0)B=s;else break e}G3(138424,19,1,t[15712]|0)|0}else{n=0;a=0}}while(0);zn(e,D,b,1,r,i);zn(e,n,a,2,r,i);t[A+(e*56|0)+32>>2]=1;h=T;return}function yn(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;if(!(t[A+(e*56|0)+32>>2]|0)){a=A+(e*56|0)|0;n=A+(e*56|0)+16|0;f=A+(e*56|0)+36|0;t[f>>2]=t[r+((Cn(a,n,t[f>>2]|0,A,i)|0)*72|0)+56>>2];e=A+(e*56|0)+40|0;t[e>>2]=t[r+((Cn(n,a,t[e>>2]|0,A,i)|0)*72|0)+56>>2]}return}function Cn(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,h=0,w=0.0,k=0,d=0;h=e+8|0;k=A+8|0;e:while(1){A:do{switch(t[a+(r*40|0)>>2]|0){case 3:{d=3;break e}case 2:{n=+c[h>>3];f=a+(r*40|0)+8|0;l=+c[a+(r*40|0)+16>>3];s=l+1.0e-07;do{if(!(n>s)){o=l+-1.0e-07;if(!(n>3]>+c[f>>3]:0)break;if(+Q(+(n-l))<=1.0e-07?(u=+c[f>>3],+Q(+(+c[e>>3]-u))<=1.0e-07):0){n=+c[k>>3];do{if(!(n>s)){if(!(n>3]>u:0)break;r=a+(r*40|0)+32|0;break A}}while(0);r=a+(r*40|0)+36|0;break A}r=a+(r*40|0)+32|0;break A}}while(0);r=a+(r*40|0)+36|0;break}case 1:{n=+c[h>>3];f=t[a+(r*40|0)+4>>2]|0;if(+Q(+(n-+c[i+(f*56|0)+8>>3]))<=1.0e-07?(b=+c[e>>3],+Q(+(b-+c[i+(f*56|0)>>3]))<=1.0e-07):0)l=b;else d=19;do{if((d|0)==19){d=0;if(+Q(+(n-+c[i+(f*56|0)+24>>3]))<=1.0e-07?(w=+c[e>>3],+Q(+(w-+c[i+(f*56|0)+16>>3]))<=1.0e-07):0){l=w;break}if(!(In(f,i,e)|0)){r=a+(r*40|0)+36|0;break A}else{r=a+(r*40|0)+32|0;break A}}}while(0);if(!(+Q(+(n-+c[k>>3]))<=1.0e-07))if(!(In(f,i,A)|0)){r=a+(r*40|0)+36|0;break A}else{r=a+(r*40|0)+32|0;break A}else if(+c[A>>3]>2]|0}if((d|0)==3)return t[a+(r*40|0)+24>>2]|0;else if((d|0)==31){G3(138358,35,1,t[15712]|0)|0;ge(138394,138396,349,138408)}return 0}function In(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0,n=0.0,f=0,l=0,s=0.0;t=A+(e*56|0)+16|0;n=+c[A+(e*56|0)+24>>3];f=A+(e*56|0)|0;a=+c[A+(e*56|0)+8>>3];do{if(!(n>a+1.0e-07)){if(!(n>3]>+c[f>>3]:0){l=4;break}i=+c[r+8>>3];if(+Q(+(n-i))<=1.0e-07){i=+c[r>>3]<+c[t>>3]?1.0:-1.0;break}if(!(+Q(+(a-i))<=1.0e-07)){s=+c[t>>3];i=(+c[f>>3]-s)*(i-n)-(+c[r>>3]-s)*(a-n);break}else{i=+c[r>>3]<+c[f>>3]?1.0:-1.0;break}}else l=4}while(0);do{if((l|0)==4){i=+c[r+8>>3];if(+Q(+(n-i))<=1.0e-07){i=+c[r>>3]<+c[t>>3]?1.0:-1.0;break}if(!(+Q(+(a-i))<=1.0e-07)){s=+c[f>>3];i=(+c[t>>3]-s)*(i-a)-(+c[r>>3]-s)*(n-a);break}else{i=+c[r>>3]<+c[f>>3]?1.0:-1.0;break}}}while(0);return i>0.0|0}function Zn(e,A,r){e=e|0;A=A|0;r=r|0;return t[A+((t[((r|0)==1?A+(e*56|0)+48|0:A+(e*56|0)+44|0)>>2]|0)*56|0)+32>>2]|0}function Gn(e){e=e|0;var A=0,r=0,i=0;i=h;h=h+16|0;r=i;A=t[47395]|0;if((A|0)<(t[47394]|0)){t[e+(A*72|0)>>2]=-1;t[e+(A*72|0)+4>>2]=-1;t[e+(A*72|0)+68>>2]=1;t[47395]=A+1;h=i;return A|0}else{i=t[15712]|0;t[r>>2]=A;a3(i,138483,r)|0;ge(138394,138396,88,138521)}return 0}function Ln(){var e=0;e=t[47396]|0;if((e|0)<(t[47393]|0)){t[47396]=e+1;return e|0}else{G3(138444,30,1,t[15712]|0)|0;ge(138394,138396,72,138475)}return 0}function Qn(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e+8>>3];i=+c[A+8>>3];if(!(r>i+1.0e-07))if(r>3]>=+c[A>>3]&1;else e=1;return e|0}function Dn(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e+8>>3];i=+c[A+8>>3];if(!(ri+1.0e-07)e=0;else e=+c[e>>3]<+c[A>>3]&1;else e=1;return e|0}function zn(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;k=a+(r*72|0)+24|0;w=(i|0)==1;e:while(1){h=a+(A*72|0)+24|0;s=a+(A*72|0)+48|0;c=a+(A*72|0)+52|0;o=a+(A*72|0)|0;u=a+(A*72|0)+4|0;b=a+(A*72|0)+56|0;if((A|0)<=0)break;while(1){if(!(Qn(h,k)|0))break e;r=t[s>>2]|0;i=(r|0)>0;do{if(w){if(i?(t[a+(r*72|0)+4>>2]|0)==(e|0):0)break;r=t[c>>2]|0;if((r|0)<=0){A=r;continue e}if((t[a+(r*72|0)+4>>2]|0)!=(e|0)){A=r;continue e}}else{if(i?(t[a+(r*72|0)>>2]|0)==(e|0):0)break;r=t[c>>2]|0;if((r|0)<=0){A=r;continue e}if((t[a+(r*72|0)>>2]|0)!=(e|0)){A=r;continue e}}}while(0);if((t[o>>2]|0)!=(t[a+(r*72|0)>>2]|0)){A=r;continue e}if((t[u>>2]|0)!=(t[a+(r*72|0)+4>>2]|0)){A=r;continue e}d=t[a+(r*72|0)+56>>2]|0;i=t[n+(d*40|0)+28>>2]|0;f=n+(i*40|0)+32|0;l=t[b>>2]|0;if((t[f>>2]|0)==(d|0))t[f>>2]=l;else t[n+(i*40|0)+36>>2]=l;i=t[a+(r*72|0)+48>>2]|0;t[s>>2]=i;do{if((i|0)>0){f=a+(i*72|0)+40|0;if((t[f>>2]|0)==(r|0)){t[f>>2]=A;break}i=a+(i*72|0)+44|0;if((t[i>>2]|0)==(r|0))t[i>>2]=A}}while(0);i=t[a+(r*72|0)+52>>2]|0;t[c>>2]=i;do{if((i|0)>0){f=a+(i*72|0)+40|0;if((t[f>>2]|0)==(r|0)){t[f>>2]=A;break}i=a+(i*72|0)+44|0;if((t[i>>2]|0)==(r|0))t[i>>2]=A}}while(0);d=a+(r*72|0)+24|0;t[h>>2]=t[d>>2];t[h+4>>2]=t[d+4>>2];t[h+8>>2]=t[d+8>>2];t[h+12>>2]=t[d+12>>2];t[a+(r*72|0)+68>>2]=2}}return}function Wn(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+c[A+8>>3];a=+c[r+8>>3];do{if(!(i>a+1.0e-07)){if(!(+Q(+(i-a))<=1.0e-07)){t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];break}if(+c[A>>3]>+c[r>>3]+1.0e-07){t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];break}else{t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];break}}else{t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2]}}while(0);return}function Yn(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+c[A+8>>3];a=+c[r+8>>3];do{if(!(i>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];break}if(+c[A>>3]<+c[r>>3]){t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];break}else{t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];break}}else{t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2]}}while(0);return}function Fn(e){e=e|0;var A=0;A=KF(8)|0;if(A|0){t[A+4>>2]=e;t[A>>2]=0}return A|0}function Mn(e,A){e=e|0;A=A|0;if(A){A=Fn(A)|0;t[A>>2]=e;e=A}return e|0}function Vn(e){e=e|0;var A=0;do{A=e;e=t[e>>2]|0;G2(A)}while((e|0)!=0);return}function Nn(){var e=0;e=KF(1992)|0;if(e|0)t[e>>2]=Rn(e)|0;return e|0}function Rn(e){e=e|0;var A=0;A=Sn(e)|0;t[A+4>>2]=0;e=e+1972|0;t[e>>2]=(t[e>>2]|0)+1;return A|0}function xn(e){e=e|0;Jn(e,t[e>>2]|0);G2(t[e>>2]|0);G2(e);return 0}function Jn(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;n=e+1980|0;f=e+1912|0;l=e+1936|0;e:do{if((t[A+4>>2]|0)>0){r=0;while(1){if((r|0)==64)break e;i=A+8+(r*20|0)+16|0;a=t[i>>2]|0;if(a|0?(Jn(e,a),G2(t[i>>2]|0),qn(A,r),t[n>>2]=(t[n>>2]|0)+-1,t[f>>2]|0):0)t[l>>2]=(t[l>>2]|0)+1;r=r+1|0}}else{r=0;while(1){if((r|0)==64)break e;if(t[A+8+(r*20|0)+16>>2]|0?(qn(A,r),t[n>>2]=(t[n>>2]|0)+-1,t[f>>2]|0):0)t[l>>2]=(t[l>>2]|0)+1;r=r+1|0}}}while(0);return}function Hn(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;if(!A)ge(138879,138529,194,138537);i=t[A+4>>2]|0;if((i|0)<=-1)ge(138549,138529,195,138537);if(!r)ge(138821,138529,196,138537);l=e+1952|0;t[l>>2]=(t[l>>2]|0)+1;e:do{if((i|0)>0){l=0;i=0;while(1){if((l|0)==64)break e;a=A+8+(l*20|0)+16|0;if((t[a>>2]|0)!=0?(rf(r,A+8+(l*20|0)|0)|0)!=0:0){n=Hn(e,t[a>>2]|0,r)|0;if(!i)i=n;else{a=i;while(1){f=t[a>>2]|0;if(!f)break;else a=f}t[a>>2]=n}}l=l+1|0}}else{n=0;i=0;while(1){if((n|0)==64)break e;a=A+8+(n*20|0)|0;if((t[A+8+(n*20|0)+16>>2]|0)!=0?(rf(r,a)|0)!=0:0)i=Mn(i,a)|0;n=n+1|0}}}while(0);return i|0}function Pn(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+64|0;c=w+52|0;o=w+32|0;u=w+16|0;b=w;t[c>>2]=0;if(!((A|0)!=0&(i|0)!=0))ge(138735,138529,247,138563);if((a|0)>-1?(s=t[i>>2]|0,(t[s+4>>2]|0)>=(a|0)):0){n=0;while(1){if((n|0)>=2)break;if((t[A+(n<<2)>>2]|0)>(t[A+(n+2<<2)>>2]|0)){f=8;break}else n=n+1|0}if((f|0)==8)ge(138610,138529,250,138563);l=e+1912|0;n=e+1908|0;f=t[n>>2]|0;if(t[l>>2]|0){k=f|0?e+1924|0:e+1916|0;t[k>>2]=(t[k>>2]|0)+1}if(!f){k=e+1964|0;t[k>>2]=(t[k>>2]|0)+1}if(!(Xn(e,A,r,s,c,a)|0))n=0;else{if(t[l>>2]|0){k=t[n>>2]|0?e+1948|0:e+1944|0;t[k>>2]=(t[k>>2]|0)+1}n=Sn(e)|0;k=e+1976|0;t[k>>2]=(t[k>>2]|0)+1;k=t[i>>2]|0;t[n+4>>2]=(t[k+4>>2]|0)+1;Tn(u,k);t[o>>2]=t[u>>2];t[o+4>>2]=t[u+4>>2];t[o+8>>2]=t[u+8>>2];t[o+12>>2]=t[u+12>>2];k=o+16|0;t[k>>2]=t[i>>2];_n(e,o,n,0)|0;Tn(b,t[c>>2]|0);t[o>>2]=t[b>>2];t[o+4>>2]=t[b+4>>2];t[o+8>>2]=t[b+8>>2];t[o+12>>2]=t[b+12>>2];t[k>>2]=t[c>>2];_n(e,o,n,0)|0;t[i>>2]=n;n=e+1980|0;t[n>>2]=(t[n>>2]|0)+2;n=1}h=w;return n|0}ge(138575,138529,248,138563);return 0}function Xn(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+80|0;o=k+52|0;u=k+48|0;b=k+32|0;w=k+16|0;c=k;t[u>>2]=0;if(!((A|0)!=0&(i|0)!=0&(a|0)!=0))ge(138653,138529,311,138667);if((n|0)>-1?(l=i+4|0,f=t[l>>2]|0,(f|0)>=(n|0)):0){if(t[e+1912>>2]|0){f=t[e+1908>>2]|0?e+1948|0:e+1944|0;t[f>>2]=(t[f>>2]|0)+1;f=t[l>>2]|0}do{if((f|0)>(n|0)){l=On(A,i)|0;f=i+8+(l*20|0)+16|0;l=i+8+(l*20|0)|0;if(!(Xn(e,A,r,t[f>>2]|0,u,n)|0)){Af(b,A,l);t[l>>2]=t[b>>2];t[l+4>>2]=t[b+4>>2];t[l+8>>2]=t[b+8>>2];t[l+12>>2]=t[b+12>>2];s=0;break}else{Tn(w,t[f>>2]|0);t[l>>2]=t[w>>2];t[l+4>>2]=t[w+4>>2];t[l+8>>2]=t[w+8>>2];t[l+12>>2]=t[w+12>>2];s=t[u>>2]|0;t[o+16>>2]=s;Tn(c,s);t[o>>2]=t[c>>2];t[o+4>>2]=t[c+4>>2];t[o+8>>2]=t[c+8>>2];t[o+12>>2]=t[c+12>>2];s=e+1980|0;t[s>>2]=(t[s>>2]|0)+1;s=_n(e,o,i,a)|0;break}}else if((f|0)==(n|0)){t[o>>2]=t[A>>2];t[o+4>>2]=t[A+4>>2];t[o+8>>2]=t[A+8>>2];t[o+12>>2]=t[A+12>>2];t[o+16>>2]=r;s=e+1980|0;t[s>>2]=(t[s>>2]|0)+1;s=_n(e,o,i,a)|0;break}else ge(138712,138529,341,138667)}while(0);h=k;return s|0}ge(138680,138529,312,138667);return 0}function Sn(e){e=e|0;e=e+1968|0;t[e>>2]=(t[e>>2]|0)+1;e=Z2(1288)|0;jn(e);return e|0}function jn(e){e=e|0;var A=0;t[e>>2]=0;t[e+4>>2]=-1;A=0;while(1){if((A|0)==64)break;Un(e+8+(A*20|0)|0);A=A+1|0}return}function Un(e){e=e|0;Kn(e);t[e+16>>2]=0;return}function Tn(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+32|0;n=l+16|0;f=l;if(!A)ge(138879,138718,99,138725);Kn(n);r=1;a=0;while(1){if((a|0)==64)break;do{if(t[A+8+(a*20|0)+16>>2]|0){i=A+8+(a*20|0)|0;if(!r){Af(f,n,i);t[n>>2]=t[f>>2];t[n+4>>2]=t[f+4>>2];t[n+8>>2]=t[f+8>>2];t[n+12>>2]=t[f+12>>2];r=0;break}else{t[n>>2]=t[i>>2];t[n+4>>2]=t[i+4>>2];t[n+8>>2]=t[i+8>>2];t[n+12>>2]=t[i+12>>2];r=0;break}}}while(0);a=a+1|0}t[e>>2]=t[n>>2];t[e+4>>2]=t[n+4>>2];t[e+8>>2]=t[n+8>>2];t[e+12>>2]=t[n+12>>2];h=l;return}function On(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;c=h;h=h+32|0;l=c+16|0;s=c;if(!((e|0)!=0&(A|0)!=0))ge(138735,138718,125,138742);r=0;i=0;a=0;n=1;f=0;while(1){if((f|0)==64)break;if(t[A+8+(f*20|0)+16>>2]|0){u=A+8+(f*20|0)|0;w=ef(u)|0;Af(s,e,u);t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];u=(ef(l)|0)-w|0;o=(n|0)!=0|(u|0)<(a|0);b=o|(w|0)<(i|0)&(u|0)==(a|0);r=b?f:r;i=b?w:i;a=b?u:a;n=o?0:n}f=f+1|0}h=c;return r|0}function _n(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;if(!A)ge(138901,138718,167,138753);if(!r)ge(138879,138718,168,138753);do{if((t[r>>2]|0)<64){e=0;while(1){if((e|0)>=64){i=10;break}if(!(t[r+8+(e*20|0)+16>>2]|0)){i=8;break}e=e+1|0}if((i|0)==8){a=r+8+(e*20|0)|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];t[a+16>>2]=t[A+16>>2];a=0;n=r;break}else if((i|0)==10)ge(138763,138718,178,138753)}else{if(t[e+1912>>2]|0){f=t[e+1908>>2]|0?e+1948|0:e+1944|0;t[f>>2]=(t[f>>2]|0)+1}if(!i)ge(138776,138718,187,138753);else{af(e,r,A,i);a=1;n=(t[r+4>>2]|0)==0?e+1972|0:e+1976|0;break}}}while(0);t[n>>2]=(t[n>>2]|0)+1;return a|0}function qn(e,A){e=e|0;A=A|0;if(!((e|0)!=0&A>>>0<64))ge(138780,138718,201,138808);if(!(t[e+8+(A*20|0)+16>>2]|0))ge(139302,138718,202,138808);else{Un(e+8+(A*20|0)|0);t[e>>2]=(t[e>>2]|0)+-1;return}}function Kn(e){e=e|0;var A=0;A=0;while(1){if((A|0)==4)break;t[e+(A<<2)>>2]=0;A=A+1|0}return}function $n(e){e=e|0;var A=0,r=0,i=0;i=h;h=h+16|0;r=i;t[r>>2]=1;t[r+8>>2]=-1;A=1;while(1){if((A|0)==2)break;t[r+(A+2<<2)>>2]=0;t[r+(A<<2)>>2]=0;A=A+1|0}t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];h=i;return}function ef(e){e=e|0;var A=0,r=0,i=0;if(!e)ge(138821,138823,128,138835);e:do{if((t[e>>2]|0)>(t[e+8>>2]|0))A=0;else{A=1;r=0;while(1){if((r|0)==2)break e;i=P(t[e+(r+2<<2)>>2]|0,A)|0;A=i-(t[e+(r<<2)>>2]|0)|0;r=r+1|0}}}while(0);return A|0}function Af(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0;n=h;h=h+16|0;a=n;if(!((A|0)!=0&(r|0)!=0))ge(138844,138823,195,138852);do{if((t[A>>2]|0)>(t[A+8>>2]|0)){t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2]}else{if((t[r>>2]|0)>(t[r+8>>2]|0)){t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];break}else i=0;while(1){if((i|0)==2)break;s=t[A+(i<<2)>>2]|0;f=t[r+(i<<2)>>2]|0;t[a+(i<<2)>>2]=(s|0)<(f|0)?s:f;f=i+2|0;s=t[A+(f<<2)>>2]|0;l=t[r+(f<<2)>>2]|0;t[a+(f<<2)>>2]=(s|0)>(l|0)?s:l;i=i+1|0}t[e>>2]=t[a>>2];t[e+4>>2]=t[a+4>>2];t[e+8>>2]=t[a+8>>2];t[e+12>>2]=t[a+12>>2]}}while(0);h=n;return}function rf(e,A){e=e|0;A=A|0;var r=0,i=0;if((e|0)!=0&(A|0)!=0)r=0;else ge(138864,138823,216,138871);while(1){if((r|0)>=2){r=1;break}i=r+2|0;if((t[e+(r<<2)>>2]|0)>(t[A+(i<<2)>>2]|0)){r=0;break}if((t[A+(r<<2)>>2]|0)>(t[e+(i<<2)>>2]|0)){r=0;break}else r=r+1|0}return r|0}function af(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;if(!A)ge(138879,138881,40,138891);if(!r)ge(138901,138881,41,138891);l=e+1912|0;if(t[l>>2]|0){f=t[e+1908>>2]|0?e+1932|0:e+1928|0;t[f>>2]=(t[f>>2]|0)+1}n=A+4|0;f=t[n>>2]|0;tf(e,A,r);r=e+1324|0;nf(e);a=ef(e+1852|0)|0;a=(ef(e+1868|0)|0)+a|0;if(t[l>>2]|0?(a|0)!=0&(t[e+1908>>2]|0)==0:0){l=e+1960|0;s[l>>2]=+((t[e+1320>>2]|0)>>>0)/+(a|0)+ +s[l>>2]}l=Sn(e)|0;t[i>>2]=l;t[n>>2]=f;t[l+4>>2]=f;ff(e,A,l,r);if(((t[t[i>>2]>>2]|0)+(t[A>>2]|0)|0)==65)return;else ge(138903,138881,86,138891)}function tf(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0;f=h;h=h+16|0;n=f;if(!A)ge(138879,138881,106,139290);if(!r)ge(138901,138881,107,139290);else i=0;while(1){if((i|0)>=64)break;if(!(t[A+8+(i*20|0)+16>>2]|0)){a=7;break}s=A+8+(i*20|0)|0;l=e+4+(i*20|0)|0;t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];t[l+16>>2]=t[s+16>>2];i=i+1|0}if((a|0)==7)ge(139302,138881,111,139290);i=e+4|0;s=e+1284|0;t[s>>2]=t[r>>2];t[s+4>>2]=t[r+4>>2];t[s+8>>2]=t[r+8>>2];t[s+12>>2]=t[r+12>>2];t[s+16>>2]=t[r+16>>2];r=e+1304|0;t[r>>2]=t[i>>2];t[r+4>>2]=t[i+4>>2];t[r+8>>2]=t[i+8>>2];t[r+12>>2]=t[i+12>>2];i=1;while(1){if((i|0)==65)break;Af(n,r,e+4+(i*20|0)|0);t[r>>2]=t[n>>2];t[r+4>>2]=t[n+4>>2];t[r+8>>2]=t[n+8>>2];t[r+12>>2]=t[n+12>>2];i=i+1|0}t[e+1320>>2]=ef(r)|0;jn(A);h=f;return}function nf(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;m=h;h=h+48|0;l=m+32|0;c=m+16|0;o=m;lf(e);sf(e);k=e+1844|0;v=e+1848|0;g=e+1892|0;u=e+1852|0;b=e+1884|0;w=e+1868|0;s=e+1888|0;a=0;i=0;while(1){r=t[k>>2]|0;A=t[v>>2]|0;if((A+r|0)>=65)break;f=65-(t[g>>2]|0)|0;if((r|0)<(f|0)&(A|0)<(f|0)){n=-1;f=0}else{d=12;break}while(1){if((f|0)==65)break;if(!(t[e+1584+(f<<2)>>2]|0)){p=e+4+(f*20|0)|0;Af(c,p,u);t[l>>2]=t[c>>2];t[l+4>>2]=t[c+4>>2];t[l+8>>2]=t[c+8>>2];t[l+12>>2]=t[c+12>>2];A=ef(l)|0;r=t[b>>2]|0;Af(o,p,w);t[l>>2]=t[o>>2];t[l+4>>2]=t[o+4>>2];t[l+8>>2]=t[o+8>>2];t[l+12>>2]=t[o+12>>2];p=ef(l)|0;A=p-(t[s>>2]|0)+(r-A)|0;r=(A|0)>-1;A=r?A:0-A|0;r=(r^1)&1;if((A|0)<=(n|0))if((A|0)==(n|0)){p=(t[e+1844+(r<<2)>>2]|0)<(t[e+1844+(a<<2)>>2]|0);A=n;r=p?r:a;i=p?f:i}else{A=n;r=a}else i=f}else{A=n;r=a}n=A;f=f+1|0;a=r}cf(e,i,a)}if((d|0)==12){A=(r|0)>=(65-(t[g>>2]|0)|0)&1;r=0;while(1){if((r|0)==65)break;if(!(t[e+1584+(r<<2)>>2]|0))cf(e,r,A);r=r+1|0}r=t[k>>2]|0;A=t[v>>2]|0}if((A+r|0)!=65)ge(139046,138881,210,139132);p=t[g>>2]|0;if((r|0)<(p|0)|(A|0)<(p|0))ge(139143,138881,212,139132);else{h=m;return}}function ff(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;if(!A)ge(138879,138881,297,138943);if(!r)ge(138953,138881,298,138943);if(!i)ge(138955,138881,299,138943);else a=0;while(1){if((a|0)>=65){i=14;break}i=t[e+1324+(a<<2)>>2]|0;if(i>>>0>=2){i=9;break}switch(i|0){case 0:{_n(e,e+4+(a*20|0)|0,A,0)|0;break}case 1:{_n(e,e+4+(a*20|0)|0,r,0)|0;break}default:{}}a=a+1|0}if((i|0)==9)ge(138957,138881,303,138943);else if((i|0)==14)return}function lf(e){e=e|0;var A=0,r=0,i=0,a=0;r=h;h=h+16|0;i=r;t[e+1848>>2]=0;t[e+1844>>2]=0;A=e+1852|0;a=e+1868|0;$n(i);t[a>>2]=t[i>>2];t[a+4>>2]=t[i+4>>2];t[a+8>>2]=t[i+8>>2];t[a+12>>2]=t[i+12>>2];t[A>>2]=t[i>>2];t[A+4>>2]=t[i+4>>2];t[A+8>>2]=t[i+8>>2];t[A+12>>2]=t[i+12>>2];t[e+1888>>2]=0;t[e+1884>>2]=0;A=0;while(1){if((A|0)==65)break;t[e+1584+(A<<2)>>2]=0;t[e+1324+(A<<2)>>2]=-1;A=A+1|0}h=r;return}function sf(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;b=h;h=h+304|0;c=b+32|0;o=b+16|0;u=b;A=0;while(1){if((A|0)==65)break;t[c+(A<<2)>>2]=ef(e+4+(A*20|0)|0)|0;A=A+1|0}A=0;r=0;i=0;n=0;e:while(1){if((n|0)==64)break;l=n+1|0;s=e+4+(n*20|0)|0;f=c+(n<<2)|0;a=l;while(1){if((a|0)==65){n=l;continue e}Af(u,s,e+4+(a*20|0)|0);t[o>>2]=t[u>>2];t[o+4>>2]=t[u+4>>2];t[o+8>>2]=t[u+8>>2];t[o+12>>2]=t[u+12>>2];w=ef(o)|0;w=w-(t[f>>2]|0)-(t[c+(a<<2)>>2]|0)|0;k=w>>>0>i>>>0;d=k?a:A;a=a+1|0;A=d;r=k?n:r;i=k?w:i}}cf(e,r,0);cf(e,A,1);h=b;return}function cf(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;i=e+1584+(A<<2)|0;if(t[i>>2]|0)ge(139246,138881,257,139281);t[e+1324+(A<<2)>>2]=r;t[i>>2]=1;n=e+1844+(r<<2)|0;a=e+1852+(r<<4)|0;i=e+4+(A*20|0)|0;if(!(t[n>>2]|0)){t[a>>2]=t[i>>2];t[a+4>>2]=t[i+4>>2];t[a+8>>2]=t[i+8>>2];t[a+12>>2]=t[i+12>>2]}else{Af(f,i,a);t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[a+8>>2]=t[f+8>>2];t[a+12>>2]=t[f+12>>2]}t[e+1884+(r<<2)>>2]=ef(a)|0;t[n>>2]=(t[n>>2]|0)+1;h=l;return}function of(){var e=0,A=0,r=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+1200|0;d=g+800|0;r=g;t[47397]=0;t[47398]=-2;A=d;l=200;u=r;w=0;k=0;b=d;e:while(1){a[b>>1]=w;if((A+(l<<1)+-2|0)>>>0>b>>>0)c=l;else{o=b-A>>1;e=o+1|0;if(l>>>0>9999){v=95;break}c=l<<1;c=c>>>0<1e4?c:1e4;f=Z2(c*6|3)|0;if(f){Q6(f|0,A|0,e<<1|0)|0;l=f+(c>>>1<<2)|0;Q6(l|0,u|0,e<<2|0)|0;if((A|0)==(d|0)){e=0;A=f}else{G2(A);e=0;A=f}}else{e=4;l=u}s=(e|0)==0;f=A+(o<<1)|0;switch((s?(A+(c<<1)+-2|0)>>>0>f>>>0?0:9:e)&15){case 9:{e=1;v=96;break e}case 4:{v=95;break e}case 0:{r=s?l+(o<<2)|0:r;u=l;b=s?f:b;break}default:{e=0;break e}}}if((w|0)==31){e=0;v=96;break}e=a[65534+(w<<1)>>1]|0;s=e<<16>>16;do{if(e<<16>>16!=-82){f=t[47398]|0;if((f|0)==-2){f=Il()|0;t[47398]=f}if((f|0)>=1)if(f>>>0<296)l=n[139321+f>>0]|0;else l=2;else{t[47398]=0;l=0}f=l+s|0;if(f>>>0<=271?(l|0)==(i[139617+f>>0]|0):0){w=i[139889+f>>0]|0;e=w<<24>>24;if(w<<24>>24<1){f=0-e|0;v=23;break}else{t[47398]=-2;r=r+4|0;t[r>>2]=t[47399];s=(k|0)==0?0:k+-1|0;f=b;break}}else v=22}else v=22}while(0);if((v|0)==22){v=0;w=i[140161+w>>0]|0;f=w&255;if(!(w<<24>>24)){f=t[47398]|0;A:do{switch(k|0){case 0:{t[47397]=(t[47397]|0)+1;zf(143761);f=b;break}case 3:if((f|0)<1)if(!f){e=1;v=96;break e}else{f=b;break A}else{t[47398]=-2;f=b;break A}default:f=b}}while(0);while(1){if(e<<16>>16==8)break;if((f|0)==(A|0)){e=1;v=96;break e}e=f+-2|0;r=r+-4|0;f=e;e=a[65534+(a[e>>1]<<1)>>1]|0}r=r+4|0;t[r>>2]=t[47399];e=1;s=3}else v=23}do{if((v|0)==23){v=0;s=n[140277+f>>0]|0;e=t[r+(1-s<<2)>>2]|0;do{switch(f|0){case 4:{v=26;break e}case 2:{t[47400]=uf(t[r+-4>>2]|0,2)|0;break}case 3:{t[47400]=uf(t[r+-4>>2]|0,1)|0;break}case 5:{e=hf()|0;break}case 8:{wf(t[47401]|0);break}case 9:{kf(t[r>>2]|0);break}case 18:{df(t[r>>2]|0);break}case 19:{vf();break}case 20:{df(t[r>>2]|0);break}case 21:{vf();break}case 22:{df(t[r>>2]|0);break}case 23:{vf();break}case 24:{df(t[r>>2]|0);break}case 25:{vf();break}case 26:{df(t[r>>2]|0);break}case 27:{vf();break}case 28:{df(t[r>>2]|0);break}case 29:{vf();break}case 30:{df(t[r>>2]|0);break}case 31:{vf();break}case 32:{df(t[r>>2]|0);break}case 33:{vf();break}case 34:{e=t[r+-4>>2]|0;break}case 35:{e=t[r>>2]|0;break}case 38:{e=t[47401]|0;l=t[e+4>>2]|0;if(l>>>0>=(t[e+8>>2]|0)>>>0){ow(e,1)|0;l=t[47401]|0;e=l;l=t[l+4>>2]|0}i[l>>0]=0;w=t[e>>2]|0;t[e+4>>2]=w;if(gf(w)|0){v=51;break e}t[(t[r>>2]|0)+80>>2]=t[47402];e=Uh(56032,t[4580]|0)|0;t[(t[r>>2]|0)+84>>2]=e;t[47402]=t[r>>2];t[(t[r>>2]|0)+108>>2]=t[t[47403]>>2];e=t[r>>2]|0;break}case 39:{e=t[47401]|0;l=t[e+4>>2]|0;if(l>>>0>=(t[e+8>>2]|0)>>>0){ow(e,1)|0;l=t[47401]|0;e=l;l=t[l+4>>2]|0}i[l>>0]=0;w=t[e>>2]|0;t[e+4>>2]=w;if(gf(w)|0){v=56;break e}e=t[47402]|0;t[47402]=t[e+80>>2];break}case 40:{e=t[r>>2]|0;break}case 41:{e=t[r+-4>>2]|0;break}case 42:{e=t[r+-4>>2]|0;break}case 43:{e=t[r+-4>>2]|0;break}case 44:{e=t[r+-4>>2]|0;break}case 45:{e=t[r+-4>>2]|0;break}case 48:{e=t[r>>2]|0;break}case 49:{e=t[r>>2]|0;break}case 50:{i[(t[r+-8>>2]|0)+12>>0]=1;e=t[r>>2]|0;break}case 51:{mf();break}case 52:{e=pf()|0;break}case 53:{e=t[r>>2]|0;break}case 54:{e=t[r>>2]|0;break}case 55:{e=(t[r+-8>>2]|0)+100|0;i[e>>0]=i[e>>0]|1;e=t[r>>2]|0;break}case 56:{Ef(t[r+-4>>2]|0,t[r>>2]|0,1);break}case 57:{e=t[r+-12>>2]|0;break}case 58:{Ef(t[r+-4>>2]|0,t[r>>2]|0,2);break}case 59:{e=t[r+-12>>2]|0;break}case 60:{Ef(t[r+-4>>2]|0,t[r>>2]|0,3);break}case 61:{e=t[r+-12>>2]|0;break}case 62:{Ef(t[r>>2]|0,hf()|0,2);break}case 63:{e=t[r+-8>>2]|0;break}case 64:{e=t[r+-4>>2]|0;break}case 65:{e=t[r>>2]|0;break}default:{}}}while(0);l=0-s|0;w=r+(l<<2)|0;l=b+(l<<1)|0;r=w+4|0;t[w+4>>2]=e;e=(n[140449+f>>0]|0)+-41|0;w=a[l>>1]|0;f=w+(a[65766+(e<<1)>>1]|0)|0;if(f>>>0<272?(i[139617+f>>0]|0)==(w|0):0){e=i[139889+f>>0]|0;s=k;f=l;break}e=i[140519+e>>0]|0;s=k;f=l}}while(0);l=c;w=e;k=s;b=f+2|0}if((v|0)==26){bf();e=1;v=96}else if((v|0)==51){zf(140347);bf();e=1;v=96}else if((v|0)==56){zf(140398);bf();e=1;v=96}else if((v|0)==95){zf(140558);e=2;v=96}if((v|0)==96)if((A|0)!=(d|0))G2(A);h=g;return e|0}function uf(e,A){e=e|0;A=A|0;var r=0;r=KF(8)|0;i[r+4>>0]=A;t[r>>2]=e;return r|0}function bf(){var e=0,A=0;e=t[47402]|0;A=t[47400]|0;if(A|0){at(A,1);t[47400]=0}t[14021]=67;while(1){if(!e)break;A=t[e+80>>2]|0;If(e);e=A}t[14021]=56;t[14030]=68;A=t[47405]|0;L5[t[A>>2]&63](A,0,64)|0;t[14030]=56;t[14039]=69;A=t[47406]|0;L5[t[A>>2]&63](A,0,64)|0;t[14039]=56;Lf();return}function hf(){var e=0,A=0,r=0,i=0,n=0,f=0;r=t[47406]|0;i=KF(40)|0;if(Oh(t[47405]|0)|0)kf(0);e=Oh(r)|0;a[i+4>>1]=e;e:do{if(!e)e=r;else{t[i>>2]=KF(e*24|0)|0;e=0;A=L5[t[r>>2]&63](r,0,128)|0;while(1){if(!A){e=r;break e}n=(t[i>>2]|0)+(e*24|0)|0;f=A+8|0;t[n>>2]=t[f>>2];t[n+4>>2]=t[f+4>>2];t[n+8>>2]=t[f+8>>2];t[n+12>>2]=t[f+12>>2];t[n+16>>2]=t[f+16>>2];t[n+20>>2]=t[f+20>>2];e=e+1|0;A=L5[t[r>>2]&63](r,A,8)|0}}}while(0);L5[t[e>>2]&63](r,0,64)|0;return i|0}function wf(e){e=e|0;var A=0,r=0,a=0;r=KF(64)|0;a=e+4|0;A=t[a>>2]|0;if(A>>>0>=(t[e+8>>2]|0)>>>0){ow(e,1)|0;A=t[a>>2]|0}i[A>>0]=0;e=t[e>>2]|0;t[a>>2]=e;t[r+8>>2]=o3(e)|0;t[r+12>>2]=t[t[47403]>>2];a=t[47405]|0;L5[t[a>>2]&63](a,r,1)|0;return}function kf(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0;l=KF(32)|0;s=t[47405]|0;A=Oh(s)|0;c=l+8|0;i[l+14>>0]=e;e:do{if(!A){t[c>>2]=KF(56)|0;a[l+12>>1]=1;f=o3(195059)|0;c=t[c>>2]|0;t[c>>2]=f;t[c+4>>2]=t[t[47403]>>2]}else{a[l+12>>1]=A;t[c>>2]=KF(A*56|0)|0;e=0;A=Sh(s)|0;while(1){if(!A)break e;r=(t[c>>2]|0)+(e*56|0)|0;n=A+8|0;f=r+56|0;do{t[r>>2]=t[n>>2];r=r+4|0;n=n+4|0}while((r|0)<(f|0));e=e+1|0;A=t[A>>2]|0}}}while(0);L5[t[s>>2]&63](s,0,64)|0;c=t[47406]|0;L5[t[c>>2]&63](c,l,1)|0;return}function df(e){e=e|0;var A=0,r=0.0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+32|0;n=l;f=KF(8)|0;a=t[t[47403]>>2]|0;t[n>>2]=t[e>>2];t[n+4>>2]=t[e+4>>2];t[n+8>>2]=t[e+8>>2];t[n+12>>2]=t[e+12>>2];t[n+16>>2]=t[e+16>>2];t[n+20>>2]=t[e+20>>2];t[n+24>>2]=t[e+24>>2];t[n+28>>2]=t[e+28>>2];if(a|0){e=n+4|0;if((t[e>>2]|0)==0?(A=t[a+4>>2]|0,A|0):0)t[e>>2]=A;e=n+16|0;if(+c[e>>3]<0.0?(r=+c[a+16>>3],r>=0.0):0)c[e>>3]=r;if((t[n>>2]|0)==0?(i=t[a>>2]|0,i|0):0)t[n>>2]=i;e=t[a+24>>2]&127;if(e|0){a=n+24|0;i=t[a>>2]|0;t[a>>2]=i&127|e|i&-128}}a=t[(t[47404]|0)+144>>2]|0;t[f>>2]=L5[t[a>>2]&63](a,n,1)|0;t[f+4>>2]=t[47403];t[47403]=f;h=l;return}function vf(){var e=0,A=0;A=t[47403]|0;e=t[A+4>>2]|0;G2(A);t[47403]=e;return}function gf(e){e=e|0;var A=0;while(1){A=i[e>>0]|0;if(!(A<<24>>24)){e=0;break}if(A<<24>>24==32)e=e+1|0;else{e=1;break}}return e|0}function mf(){var e=0,A=0,r=0;r=Uh(56068,t[4580]|0)|0;e=t[47402]|0;A=KF(16)|0;t[A+8>>2]=r;if(i[e+112>>0]&2)i[A+12>>0]=1;r=t[e+84>>2]|0;L5[t[r>>2]&63](r,A,1)|0;return}function pf(){var e=0;e=t[(t[47402]|0)+84>>2]|0;return L5[t[e>>2]&63](e,0,256)|0}function Ef(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;n=KF(16)|0;a=t[47402]|0;f=t[a+84>>2]|0;f=t[(L5[t[f>>2]&63](f,0,256)|0)+8>>2]|0;t[n+8>>2]=e;L5[t[f>>2]&63](f,n,1)|0;i[e+92>>0]=r;if(i[a+112>>0]&1)i[e+100>>0]=1;t[e+88>>2]=A;return}function Bf(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function yf(e,A,r){e=e|0;A=A|0;r=r|0;Ph(t[A+8>>2]|0)|0;G2(A);return}function Cf(e,A,r){e=e|0;A=A|0;r=r|0;Qf(t[A+8>>2]|0);G2(A);return}function If(e){e=e|0;Ph(t[e+84>>2]|0)|0;At(e);G2(e);return}function Zf(e,A,r){e=e|0;A=A|0;r=r|0;G2(t[A+8>>2]|0);G2(A);return}function Gf(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,f=0;n=A+12|0;e=a[n>>1]|0;if(e<<16>>16){f=A+8|0;r=0;i=t[f>>2]|0;while(1){if((r|0)>=(e<<16>>16|0))break;G2(t[i>>2]|0);r=r+1|0;i=i+56|0;e=a[n>>1]|0}G2(t[f>>2]|0)}G2(A);return}function Lf(){var e=0,A=0;e=t[47403]|0;while(1){A=t[e+4>>2]|0;if(!A)break;G2(e);e=A}return}function Qf(e){e=e|0;var A=0;A=e+88|0;switch(i[e+92>>0]|0){case 1:{If(t[A>>2]|0);break}case 2:{rt(t[A>>2]|0);break}default:{}}At(e);G2(e);return}function Df(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;a=h;h=h+160|0;i=a+8|0;n=a;t[n>>2]=0;t[n+4>>2]=0;t[47403]=n;t[47402]=0;t[47400]=0;t[47404]=t[(t[(t[r+52>>2]|0)+16>>2]|0)+144>>2];t[47405]=Uh(56104,t[4580]|0)|0;t[47406]=Uh(56140,t[4580]|0)|0;cw(i,128,a+24|0);t[47401]=i;if(!(Ff(e,i,r)|0)){of()|0;t[A>>2]=Cl()|0;e=t[47400]|0}else{t[A>>2]=2;e=0}Ph(t[47405]|0)|0;Ph(t[47406]|0)|0;t[47405]=0;t[47406]=0;t[47403]=0;hw(i);h=a;return e|0}function zf(e){e=e|0;var A=0,r=0,a=0;r=h;h=h+16|0;A=r;if(!(i[189661]|0)){i[189661]=1;a=Wf()|0;t[A>>2]=e;t[A+4>>2]=a;nw(1,140575,A)|0;Yf()}h=r;return}function Wf(){return ho(t[47407]|0)|0}function Yf(){var e=0,A=0,r=0,a=0;a=h;h=h+16|0;r=a;e=t[47410]|0;t[e+4>>2]=t[e>>2];A=t[47419]|0;if((A|0)>0){uw(e,t[47417]|0,A)|0;e=t[47410]|0}uw(e,t[47416]|0,t[47418]|0)|0;A=t[47410]|0;e=t[A+4>>2]|0;if(e>>>0>=(t[A+8>>2]|0)>>>0){ow(A,1)|0;e=t[47410]|0;A=e;e=t[e+4>>2]|0}t[A+4>>2]=e+1;i[e>>0]=0;e=t[47410]|0;A=t[e>>2]|0;t[e+4>>2]=A;t[r>>2]=A;nw(3,140591,r)|0;h=a;return}function Ff(e,A,r){e=e|0;A=A|0;r=r|0;t[47410]=A;cw(189644,128,0);t[47408]=e;i[189663]=0;i[189660]=0;i[189661]=0;t[47418]=0;t[47419]=0;i[189662]=1;r=r+52|0;A=xs(RF(n[(t[(t[r>>2]|0)+16>>2]|0)+115>>0]|0)|0)|0;t[47407]=A;Ao(A,t[(t[(t[r>>2]|0)+16>>2]|0)+144>>2]|0);ro(t[47407]|0,70,27);io(t[47407]|0,71);return 0}function Mf(e,A,r){e=e|0;A=A|0;r=r|0;do{if(!(N1(A,140603)|0)){t[47399]=xf(r)|0;i[189662]=0;t[47409]=286}else{if(N1(A,140609)|0?N1(A,140612)|0:0){if(!(N1(A,140615)|0)){i[189662]=1;t[47399]=Jf(r)|0;t[47409]=287;break}if(!(N1(A,140623)|0)){t[47399]=Hf(e,r,0)|0;t[47409]=288;break}if(!(N1(A,140628)|0)){t[47399]=Hf(e,0,1)|0;t[47409]=290;break}if(!(N1(A,140644)|0)){t[47399]=Hf(e,0,32)|0;t[47409]=295;break}if(!(N1(A,140630)|0)){t[47399]=Hf(e,0,4)|0;t[47409]=291;break}if(!(N1(A,140632)|0)){t[47399]=Hf(e,0,64)|0;t[47409]=292;break}if(!(N1(A,140634)|0)){t[47399]=Hf(e,0,2)|0;t[47409]=289;break}if(!(N1(A,140636)|0)){t[47399]=Hf(e,0,8)|0;t[47409]=293;break}if(!(N1(A,140640)|0)){t[47399]=Hf(e,0,16)|0;t[47409]=294;break}if(!(N1(A,140646)|0)){Pf(r);t[47409]=283;break}if(!(N1(A,140649)|0)){t[47409]=277;break}if(!(N1(A,140652)|0)){t[47409]=280;break}if(!(N1(A,140655)|0)){t[47399]=Xf(r)|0;t[47409]=285;break}if(!(N1(A,140618)|0)){t[47409]=262;break}else{Rf(A);break}}i[189662]=0;t[47409]=260}}while(0);return}function Vf(e,A){e=e|0;A=A|0;do{if(!(N1(A,140603)|0)){t[47409]=264;i[189662]=1}else{if(N1(A,140609)|0?N1(A,140612)|0:0){if(!(N1(A,140615)|0)){t[47409]=265;i[189662]=0;break}if(!(N1(A,140618)|0)){t[47409]=263;break}if(!(N1(A,140623)|0)){t[47409]=266;break}if(!(N1(A,140628)|0)){t[47409]=270;break}if(!(N1(A,140630)|0)){t[47409]=271;break}if(!(N1(A,140632)|0)){t[47409]=272;break}if(!(N1(A,140634)|0)){t[47409]=269;break}if(!(N1(A,140636)|0)){t[47409]=273;break}if(!(N1(A,140640)|0)){t[47409]=274;break}if(!(N1(A,140644)|0)){t[47409]=275;break}if(!(N1(A,140646)|0)){t[47409]=(t[47409]|0)==283?282:258;break}if(!(N1(A,140649)|0)){t[47409]=(t[47409]|0)==277?276:278;break}if(!(N1(A,140652)|0)){t[47409]=(t[47409]|0)==280?279:281;break}if(!(N1(A,140655)|0)){t[47409]=(t[47409]|0)==285?284:259;break}else{Rf(A);break}}t[47409]=261}}while(0);return}function Nf(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;if(i[189662]|0){e=0;while(1){if(!r)break;f=A+1|0;n=i[A>>0]|0;if((n&255)>31){A=t[47410]|0;a=t[A+4>>2]|0;if(a>>>0>=(t[A+8>>2]|0)>>>0){ow(A,1)|0;a=t[47410]|0;A=a;a=t[a+4>>2]|0}t[A+4>>2]=a+1;i[a>>0]=n;e=e+1|0}A=f;r=r+-1|0}if(e|0)t[47409]=267}return}function Rf(e){e=e|0;var A=0,r=0,a=0;A=h;h=h+16|0;r=A;t[47409]=268;i[189661]=1;a=Wf()|0;t[r>>2]=e;t[r+4>>2]=a;nw(1,140659,r)|0;h=A;return}function xf(e){e=e|0;var A=0;A=KF(120)|0;t[A+100>>2]=-1;i[A+88>>0]=-1;Sf(A,56400,22,e,141611);return A|0}function Jf(e){e=e|0;var A=0;A=KF(104)|0;a[A+80>>1]=1;a[A+82>>1]=1;Sf(A,56224,22,e,140965);return A|0}function Hf(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=h;h=h+32|0;i=a;t[i>>2]=0;t[i+4>>2]=0;t[i+8>>2]=0;t[i+12>>2]=0;t[i+16>>2]=0;t[i+20>>2]=0;t[i+24>>2]=0;t[i+28>>2]=0;c[i+16>>3]=-1.0;t[i+24>>2]=r&127;if(A|0)Sf(i,56200,3,A,140816);r=t[e+144>>2]|0;i=L5[t[r>>2]&63](r,i,1)|0;h=a;return i|0}function Pf(e){e=e|0;t[47399]=0;Sf(189596,56192,1,e,140752);return}function Xf(e){e=e|0;var A=0;A=KF(40)|0;Sf(A,56176,2,e,140698);return A|0}function Sf(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b;o=b+8|0;while(1){c=t[a>>2]|0;if(!c)break;l=t[a+4>>2]|0;t[o>>2]=c;s=r8(o,A,r,8,104)|0;if(!s){t[u>>2]=c;t[u+4>>2]=f;nw(0,140704,u)|0;l=1}else{l=Z5[t[s+4>>2]&127](e,l)|0;l=(l|(n[189660]|0))&255}i[189660]=l;a=a+8|0}h=b;return}function jf(e,A){e=e|0;A=A|0;return N1(t[e>>2]|0,t[A>>2]|0)|0}function Uf(e,A){e=e|0;A=A|0;t[e+36>>2]=o3(A)|0;return 0}function Tf(e,A){e=e|0;A=A|0;t[e+32>>2]=o3(A)|0;return 0}function Of(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l;a=(z4(i[A>>0]|0)|0)<<24>>24;switch(a|0){case 82:{r=A+1|0;if(!(N1(r,140763)|0)){t[e>>2]=114;r=0}else f=5;break}case 76:{f=6;break}default:{r=A+1|0;f=5}}do{if((f|0)==5)if(!(N1(r,140768)|0))f=6;else{if((a|0)!=67?(N1(r,140772)|0)==0:0){t[n>>2]=A;nw(0,140778,n)|0;r=1;break}t[e>>2]=110;r=0}}while(0);if((f|0)==6){t[e>>2]=108;r=0}h=l;return r|0}function _f(e,A){e=e|0;A=A|0;t[e+4>>2]=A;return 0}function qf(e,A){e=e|0;A=A|0;t[e>>2]=A;return 0}function Kf(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!($f(A,140845,0,255,r)|0)){c[e+16>>3]=+(t[r>>2]|0);e=0}else e=1;h=i;return e|0}function $f(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;c=h;h=h+48|0;s=c+24|0;l=c+8|0;f=c;o=c+36|0;n=n3(e,o,10)|0;do{if((t[o>>2]|0)!=(e|0)){if((n|0)>(i|0)){t[l>>2]=A;t[l+4>>2]=e;t[l+8>>2]=i;nw(0,140887,l)|0;e=1;break}if((n|0)<(r|0)){t[s>>2]=A;t[s+4>>2]=e;t[s+8>>2]=r;nw(0,140926,s)|0;e=1;break}else{t[a>>2]=n;e=0;break}}else{t[f>>2]=A;t[f+4>>2]=e;nw(0,140856,f)|0;e=1}}while(0);h=c;return e|0}function el(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;f=h;h=h+16|0;r=f;switch((z4(i[A>>0]|0)|0)<<24>>24|0){case 76:{if(!(N1(A+1|0,140768)|0)){e=e+36|0;a[e>>1]=a[e>>1]|4;e=0}else n=9;break}case 82:{if(!(N1(A+1|0,140763)|0)){e=e+36|0;a[e>>1]=a[e>>1]|2;e=0}else n=9;break}case 84:{if(!(N1(A+1|0,141563)|0)){e=e+36|0;a[e>>1]=a[e>>1]|6;e=0}else n=9;break}case 67:{if(!(N1(A+1|0,140772)|0))e=0;else n=9;break}default:n=9}if((n|0)==9){t[r>>2]=A;nw(0,141567,r)|0;e=1}h=f;return e|0}function Al(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;f=h;h=h+16|0;r=f;switch((z4(i[A>>0]|0)|0)<<24>>24|0){case 76:{if(!(N1(A+1|0,140768)|0)){e=e+36|0;a[e>>1]=a[e>>1]|512;e=0}else n=7;break}case 82:{if(!(N1(A+1|0,140763)|0)){e=e+36|0;a[e>>1]=a[e>>1]|256;e=0}else n=7;break}case 67:{if(!(N1(A+1|0,140772)|0))e=0;else n=7;break}default:n=7}if((n|0)==7){t[r>>2]=A;nw(0,141518,r)|0;e=1}h=f;return e|0}function rl(e,A){e=e|0;A=A|0;t[e+20>>2]=o3(A)|0;return 0}function il(e,A){e=e|0;A=A|0;var r=0,n=0;n=h;h=h+16|0;r=n;if(!($f(A,141511,0,255,r)|0)){i[e+33>>0]=t[r>>2];e=e+36|0;a[e>>1]=a[e>>1]|32;e=0}else e=1;h=n;return e|0}function al(e,A){e=e|0;A=A|0;var r=0,n=0;n=h;h=h+16|0;r=n;if(!($f(A,141499,0,255,r)|0)){i[e+34>>0]=t[r>>2];e=e+36|0;a[e>>1]=a[e>>1]|64;e=0}else e=1;h=n;return e|0}function tl(e,A){e=e|0;A=A|0;var r=0,n=0;n=h;h=h+16|0;r=n;if(!($f(A,141487,-128,127,r)|0)){i[e+32>>0]=t[r>>2];e=e+36|0;a[e>>1]=a[e>>1]|128;e=0}else e=1;h=n;return e|0}function nl(e,A){e=e|0;A=A|0;t[e+24>>2]=o3(A)|0;return 0}function fl(e,A){e=e|0;A=A|0;var r=0,i=0,n=0;n=h;h=h+16|0;i=n;r=n+4|0;do{if(!($f(A,141442,0,65535,r)|0)){A=t[r>>2]|0;if(!A){nw(0,141450,i)|0;A=1;break}else{a[e+80>>1]=A;A=0;break}}else A=1}while(0);h=n;return A|0}function ll(e,A){e=e|0;A=A|0;var r=0,i=0,f=0;f=h;h=h+16|0;r=f;switch((z4(n[A>>0]|0)|0)<<24>>24|0){case 84:{if(!(N1(A+1|0,141391)|0)){e=e+36|0;a[e>>1]=a[e>>1]|1;e=0}else i=5;break}case 70:{if(!(N1(A+1|0,141395)|0))e=0;else i=5;break}default:i=5}if((i|0)==5){t[r>>2]=A;nw(0,141400,r)|0;e=1}h=f;return e|0}function sl(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!($f(A,141377,0,360,r)|0)){t[e+28>>2]=t[r>>2]&65535;e=0}else e=1;h=i;return e|0}function cl(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!($f(A,141370,0,65535,r)|0)){a[e+40>>1]=t[r>>2];e=0}else e=1;h=i;return e|0}function ol(e,A){e=e|0;A=A|0;t[e>>2]=o3(A)|0;return 0}function ul(e,A){e=e|0;A=A|0;t[e+16>>2]=o3(A)|0;return 0}function bl(e,A){e=e|0;A=A|0;t[e+4>>2]=o3(A)|0;return 0}function hl(e,A){e=e|0;A=A|0;var r=0,i=0,n=0;n=h;h=h+16|0;i=n;r=n+4|0;do{if(!($f(A,141325,0,65535,r)|0)){A=t[r>>2]|0;if(!A){nw(0,141333,i)|0;A=1;break}else{a[e+82>>1]=A;A=0;break}}else A=1}while(0);h=n;return A|0}function wl(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;l=c;f=0;e:while(1){A:while(1){n=A+1|0;A=i[A>>0]|0;if(!(A<<24>>24))break e;A=A<<24>>24;r=(R1(A)|0)+-98|0;switch(r>>>1|r<<31|0){case 5:{s=5;break A}case 9:{r=2048;break A}case 8:{s=6;break A}case 0:{s=7;break A}default:{}}t[l>>2]=A;t[l+4>>2]=A;nw(0,141272,l)|0;A=n}if((s|0)==5){s=0;r=1024}else if((s|0)==6){s=0;r=4096}else if((s|0)==7){s=0;r=8192}A=n;f=f|r}if(f<<16>>16!=15360){s=e+36|0;a[s>>1]=a[s>>1]|f}h=c;return 0}function kl(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;s=c+8|0;l=c;f=o3(A)|0;n=e+42|0;r=0;A=f;while(1){e=l3(A,141182)|0;if(!e)break;if(((z4(i[e>>0]|0)|0)&255|0)==82){A=e+1|0;if(!(N1(A,141185)|0)){a[n>>1]=a[n>>1]|4;e=r;A=0;r=e;continue}if(!(N1(A,141192)|0)){a[n>>1]=a[n>>1]|2;e=r;A=0;r=e;continue}else{t[l>>2]=e;nw(0,141198,l)|0;r=1;A=0;continue}}if(!(N1(e,141236)|0)){a[n>>1]=a[n>>1]&-385;e=r;A=0;r=e;continue}if(N1(e,141242)|0?N1(e,141252)|0:0){if(!(N1(e,141258)|0)){a[n>>1]=a[n>>1]|128;e=r;A=0;r=e;continue}if(!(N1(e,141265)|0)){a[n>>1]=a[n>>1]|256;e=r;A=0;r=e;continue}else{t[s>>2]=e;nw(0,141198,s)|0;r=1;A=0;continue}}a[n>>1]=a[n>>1]|32;e=r;A=0;r=e}G2(f);h=c;return r|0}function dl(e,A){e=e|0;A=A|0;t[e+8>>2]=o3(A)|0;return 0}function vl(e,A){e=e|0;A=A|0;t[e+12>>2]=o3(A)|0;return 0}function gl(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;f=h;h=h+16|0;r=f;switch((z4(i[A>>0]|0)|0)<<24>>24|0){case 66:{if(!(N1(A+1|0,141128)|0)){e=e+36|0;a[e>>1]=a[e>>1]|16;e=0}else n=7;break}case 84:{if(!(N1(A+1|0,141134)|0)){e=e+36|0;a[e>>1]=a[e>>1]|8;e=0}else n=7;break}case 77:{if(!(N1(A+1|0,141137)|0))e=0;else n=7;break}default:n=7}if((n|0)==7){t[r>>2]=A;nw(0,141143,r)|0;e=1}h=f;return e|0}function ml(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!($f(A,141122,0,65535,r)|0)){a[e+38>>1]=t[r>>2];e=0}else e=1;h=i;return e|0}function pl(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;f=h;h=h+16|0;r=f;switch((z4(i[A>>0]|0)|0)<<24>>24|0){case 76:{if(!(N1(A+1|0,140768)|0)){e=e+36|0;a[e>>1]=a[e>>1]|4;e=0}else n=7;break}case 82:{if(!(N1(A+1|0,140763)|0)){e=e+36|0;a[e>>1]=a[e>>1]|2;e=0}else n=7;break}case 67:{if(!(N1(A+1|0,140772)|0))e=0;else n=7;break}default:n=7}if((n|0)==7){t[r>>2]=A;nw(0,140778,r)|0;e=1}h=f;return e|0}function El(e,A){e=e|0;A=A|0;var r=0,a=0;a=h;h=h+16|0;r=a;if(!($f(A,141720,0,127,r)|0)){i[e+88>>0]=t[r>>2];e=0}else e=1;h=a;return e|0}function Bl(e,A){e=e|0;A=A|0;var r=0,a=0;a=h;h=h+16|0;r=a;if((i[A>>0]|0)==42){e=e+112|0;i[e>>0]=i[e>>0]|1;e=0}else{t[r>>2]=A;nw(0,141680,r)|0;e=1}h=a;return e|0}function yl(e,A){e=e|0;A=A|0;var r=0,a=0;a=h;h=h+16|0;r=a;if((i[A>>0]|0)==42){e=e+112|0;i[e>>0]=i[e>>0]|2;e=0}else{t[r>>2]=A;nw(0,141643,r)|0;e=1}h=a;return e|0}function Cl(){var e=0;e=(i[189661]|i[189660])<<24>>24;js(t[47407]|0);hw(189644);return e|0}function Il(){var e=0,A=0,r=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;l=s;t[47409]=0;A=0;e:do{A:do{switch(i[189663]|0){case 2:{e=-1;break e}case 0:{i[189663]=1;f=6;e=141732;A=0;break}default:{e=t[47408]|0;if(!(i[e>>0]|0)){i[189663]=2;f=7;e=141739;break A}else{A=Zl(e)|0;f=A-e|0;break A}}}}while(0);t[47417]=t[47416];t[47419]=t[47418];t[47416]=e;t[47418]=f;r=t[47412]|0;a=r-(t[47411]|0)|0;n=t[47407]|0;if(!a)e=ao(n,e,f,(f|0)==0&1)|0;else{if(r>>>0<(t[47413]|0)>>>0)e=r;else{ow(189644,1)|0;e=t[47412]|0}i[e>>0]=0;e=t[47411]|0;t[47412]=e;e=ao(n,e,a,0)|0}if(!((e|0)!=0|(i[189661]|0)!=0)){n=wo(bo(t[47407]|0)|0)|0;f=Wf()|0;t[l>>2]=n;t[l+4>>2]=f;nw(1,140575,l)|0;Yf();i[189661]=1;t[47409]=268}if(A|0)t[47408]=A;e=t[47409]|0}while((e|0)==0);h=s;return e|0}function Zl(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=h;h=h+16|0;a=f;A=e+1|0;r=i[e>>0]|0;e:do{if(r<<24>>24==60){r=i[A>>0]|0;if(r<<24>>24==33)if(!(y1(e+2|0,141747,2)|0)){r=Gl(e+4|0)|0;A=r;r=i[r>>0]|0;n=8}else{r=A;n=5}else n=6;A:while(1)if((n|0)==5){A=r;r=i[r>>0]|0;n=6;continue}else if((n|0)==6){switch(r<<24>>24){case 62:case 0:{n=8;continue A}default:{}}r=A+1|0;n=5;continue}else if((n|0)==8)if(r<<24>>24==62){n=10;break}else{n=9;break}if((n|0)==9){nw(0,141750,a)|0;i[189660]=1;break}else if((n|0)==10){A=A+1|0;break}}else{A=e;e=r;while(1){switch(e<<24>>24){case 60:case 0:break e;case 38:{r=A+1|0;if((i[r>>0]|0)==35)n=15;else r=kJ(r,189644)|0;break}default:n=15}if((n|0)==15){n=0;r=t[47412]|0;if(r>>>0>=(t[47413]|0)>>>0){ow(189644,1)|0;r=t[47412]|0}t[47412]=r+1;i[r>>0]=e;r=A+1|0}A=r;e=i[r>>0]|0}}}while(0);h=f;return A|0}function Gl(e){e=e|0;var A=0,r=0,a=0,t=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;l=s;t=1;A=e;e:while(1){a=(t|0)==0;r=A;A:while(1){if(a)break e;n=r+1|0;switch(i[r>>0]|0){case 0:{A=n;break e}case 60:{f=5;break A}case 62:{A=-1;break A}default:r=n}}if((f|0)==5){f=0;A=1}t=t+A|0;A=n}r=A+-1|0;do{if(i[r>>0]|0){A=A+-3|0;if(A>>>0>=e>>>0?(y1(A,141747,2)|0)==0:0)break;nw(0,141791,l)|0;i[189660]=1}}while(0);h=s;return r|0}function Ll(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0;r=Z2(28)|0;if(!r)r=0;else{i=0;a=0;while(1){if((i|0)>=(A|0))break;d=(t[(t[e+(i<<2)>>2]|0)+4>>2]|0)+a|0;i=i+1|0;a=d}h=r+8|0;t[h>>2]=Ql(a<<4)|0;w=r+12|0;t[w>>2]=Ql((A<<2)+4|0)|0;i=a<<2;k=r+16|0;t[k>>2]=Ql(i)|0;i=Ql(i)|0;d=r+20|0;t[d>>2]=i;t[r+4>>2]=a;t[r>>2]=A;a=0;f=0;while(1){t[(t[w>>2]|0)+(f<<2)>>2]=a;if((f|0)>=(A|0))break;s=e+(f<<2)|0;b=t[s>>2]|0;c=t[b+4>>2]|0;o=a+-1|0;n=0;l=a;u=c;while(1){if((n|0)>=(u|0))break;u=(t[h>>2]|0)+(l<<4)|0;i=(t[b>>2]|0)+(n<<4)|0;t[u>>2]=t[i>>2];t[u+4>>2]=t[i+4>>2];t[u+8>>2]=t[i+8>>2];t[u+12>>2]=t[i+12>>2];u=l+1|0;t[(t[k>>2]|0)+(l<<2)>>2]=u;i=t[d>>2]|0;t[i+(l<<2)>>2]=l+-1;v=t[s>>2]|0;n=n+1|0;l=u;u=t[v+4>>2]|0;b=v}v=o+c|0;t[(t[k>>2]|0)+(v<<2)>>2]=a;t[i+(a<<2)>>2]=v;a=l;f=f+1|0}Qs(r)}return r|0}function Ql(e){e=e|0;if(!e)e=0;else e=Z2(e)|0;return e|0}function Dl(e){e=e|0;var A=0,r=0;G2(t[e+8>>2]|0);G2(t[e+12>>2]|0);G2(t[e+16>>2]|0);G2(t[e+20>>2]|0);r=e+24|0;A=t[r>>2]|0;if(A|0){G2(t[A>>2]|0);G2(t[r>>2]|0)}G2(e);return}function zl(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+32|0;o=w+16|0;s=w;t[o>>2]=t[A>>2];t[o+4>>2]=t[A+4>>2];t[o+8>>2]=t[A+8>>2];t[o+12>>2]=t[A+12>>2];u=Vs(e,r,o)|0;t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];b=Vs(e,a,o)|0;t[s>>2]=t[A>>2];t[s+4>>2]=t[A+4>>2];t[s+8>>2]=t[A+8>>2];t[s+12>>2]=t[A+12>>2];t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];o=ms(s,r,u,o,a,b,e)|0;r=t[e+4>>2]|0;s=r+1|0;a=1;f=r;while(1){f=t[o+(f<<2)>>2]|0;c=a+1|0;if((f|0)==(s|0))break;else a=c}l=Z2(c<<4)|0;f=l+(a<<4)|0;t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];t[f+8>>2]=t[i+8>>2];t[f+12>>2]=t[i+12>>2];e=e+8|0;while(1){r=t[o+(r<<2)>>2]|0;a=a+-1|0;f=l+(a<<4)|0;if((r|0)==(s|0))break;i=(t[e>>2]|0)+(r<<4)|0;t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];t[f+8>>2]=t[i+8>>2];t[f+12>>2]=t[i+12>>2]}t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];if(a|0)ge(141809,141816,148,141822);if(u|0)G2(u);if(b|0)G2(b);t[n+4>>2]=c;t[n>>2]=l;G2(o);h=w;return 1}function Wl(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;s=h;h=h+48|0;f=s+32|0;n=s+16|0;a=s;l=t[e>>2]|0;r=t[e+4>>2]|0;i=r+-1|0;e=0;while(1){if((e|0)>=(r|0)){e=1;break}o=l+(((i+e|0)%(r|0)|0)<<4)|0;c=l+(e<<4)|0;t[a>>2]=t[o>>2];t[a+4>>2]=t[o+4>>2];t[a+8>>2]=t[o+8>>2];t[a+12>>2]=t[o+12>>2];t[n>>2]=t[c>>2];t[n+4>>2]=t[c+4>>2];t[n+8>>2]=t[c+8>>2];t[n+12>>2]=t[c+12>>2];t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];if((Is(a,n,f)|0)==1){e=0;break}else e=e+1|0}h=s;return e|0}function Yl(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,g=0,m=0;m=h;h=h+64|0;o=m+48|0;c=m+32|0;k=4;s=Z2(40)|0;t[s>>2]=0;u=m+16|0;b=m;w=t[r>>2]|0;l=t[r+4>>2]|0;k=G6(189680,1,s|0,k|0)|0;s=G;d=0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,k|0,s|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1)r=G;else r=0;while(1){if(r|0){r=-1;break}d=0;t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];ue(28,u|0,o|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,k|0,s|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){r=G;continue}t[i>>2]=t[u>>2];t[i+4>>2]=t[u+4>>2];t[i+8>>2]=t[u+8>>2];t[i+12>>2]=t[u+12>>2];f=i+16|0;d=0;t[o>>2]=t[f>>2];t[o+4>>2]=t[f+4>>2];t[o+8>>2]=t[f+8>>2];t[o+12>>2]=t[f+12>>2];ue(28,b|0,o|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,k|0,s|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){r=G;continue}t[f>>2]=t[b>>2];t[f+4>>2]=t[b+4>>2];t[f+8>>2]=t[b+8>>2];t[f+12>>2]=t[b+12>>2];t[47459]=0;d=0;oe(115,4);r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,k|0,s|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){r=G;continue}n=t[47460]|0;r=t[47459]|0;t[47459]=r+1;r=n+(r<<4)|0;t[r>>2]=t[w>>2];t[r+4>>2]=t[w+4>>2];t[r+8>>2]=t[w+8>>2];t[r+12>>2]=t[w+12>>2];d=0;t[c>>2]=t[i>>2];t[c+4>>2]=t[i+4>>2];t[c+8>>2]=t[i+8>>2];t[c+12>>2]=t[i+12>>2];t[o>>2]=t[f>>2];t[o+4>>2]=t[f+4>>2];t[o+8>>2]=t[f+8>>2];t[o+12>>2]=t[f+12>>2];r=le(1,e|0,A|0,w|0,l|0,c|0,o|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,k|0,s|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1)r=G;else{g=8;break}}if((g|0)==8)if((r|0)==-1)r=-1;else{t[a+4>>2]=t[47459];t[a>>2]=t[47460];r=0}G2(k|0);h=m;return r|0}function Fl(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0,n=0.0,f=0.0;r=+c[A>>3];i=A+8|0;a=+c[i>>3];f=a*a+r*r;n=+D(+f);if(f>1.0e-06){c[A>>3]=r/n;c[i>>3]=a/n}t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];return}function Ml(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+32|0;i=a+16|0;r=a;if((t[47463]|0)<(e|0)){A=t[47460]|0;if(!A){i=Z2(e<<4)|0;t[47460]=i;if(!i){i=t[15712]|0;t[r>>2]=141831;t[r+4>>2]=531;t[r+8>>2]=141966;a3(i,141839,r)|0;aA(189680,1)}}else{r=Q2(A,e<<4)|0;t[47460]=r;if(!r){r=t[15712]|0;t[i>>2]=141831;t[i+4>>2]=537;t[i+8>>2]=141984;a3(r,141839,i)|0;aA(189680,1)}}t[47463]=e}h=a;return}function Vl(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0.0,s=0,o=0.0,u=0,b=0.0,w=0.0,k=0,d=0.0,v=0.0,g=0.0,m=0.0,p=0.0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0.0,j=0.0,U=0.0,T=0.0;P=h;h=h+336|0;F=P+320|0;Y=P+304|0;E=P+144|0;k=P+128|0;z=P+112|0;W=P+96|0;H=P+80|0;I=P+64|0;G=P+48|0;M=P+32|0;V=P+16|0;N=P;B=P+288|0;y=P+272|0;C=P+256|0;Z=P+240|0;L=P+224|0;Q=P+208|0;R=P+192|0;x=P+176|0;J=P+160|0;f=t[47462]|0;do{if((t[47461]|0)<(i|0)){if(!f){f=Z2(i*40|0)|0;t[47462]=f;if(!f){f=-1;break}}else{f=Q2(f,i*40|0)|0;t[47462]=f;if(!f){f=-1;break}}t[47461]=i;s=6}else s=6}while(0);if((s|0)==6){c[f>>3]=0.0;s=1;l=0.0;while(1){if((s|0)>=(i|0))break;u=r+(s<<4)|0;D=r+(s+-1<<4)|0;t[Y>>2]=t[u>>2];t[Y+4>>2]=t[u+4>>2];t[Y+8>>2]=t[u+8>>2];t[Y+12>>2]=t[u+12>>2];t[F>>2]=t[D>>2];t[F+4>>2]=t[D+4>>2];t[F+8>>2]=t[D+8>>2];t[F+12>>2]=t[D+12>>2];p=+Nl(Y,F)+l;c[f+(s*40|0)>>3]=p;s=s+1|0;l=p}D=i+-1|0;u=f+(D*40|0)|0;s=1;while(1){if((s|0)>=(i|0))break;X=f+(s*40|0)|0;c[X>>3]=+c[X>>3]/+c[u>>3];s=s+1|0}s=0;while(1){if((s|0)>=(i|0))break;X=f+(s*40|0)+8|0;u=f+(s*40|0)|0;p=+Rl(+c[u>>3]);t[F>>2]=t[a>>2];t[F+4>>2]=t[a+4>>2];t[F+8>>2]=t[a+8>>2];t[F+12>>2]=t[a+12>>2];xl(B,F,p);t[X>>2]=t[B>>2];t[X+4>>2]=t[B+4>>2];t[X+8>>2]=t[B+8>>2];t[X+12>>2]=t[B+12>>2];X=f+(s*40|0)+24|0;p=+Jl(+c[u>>3]);t[F>>2]=t[n>>2];t[F+4>>2]=t[n+4>>2];t[F+8>>2]=t[n+8>>2];t[F+12>>2]=t[n+12>>2];xl(y,F,p);t[X>>2]=t[y>>2];t[X+4>>2]=t[y+4>>2];t[X+8>>2]=t[y+8>>2];t[X+12>>2]=t[y+12>>2];s=s+1|0}t[Y>>2]=t[a>>2];t[Y+4>>2]=t[a+4>>2];t[Y+8>>2]=t[a+8>>2];t[Y+12>>2]=t[a+12>>2];t[F>>2]=t[n>>2];t[F+4>>2]=t[n+4>>2];t[F+8>>2]=t[n+8>>2];t[F+12>>2]=t[n+12>>2];Hl(r,i,f,Y,F,z,I,W,G);t[k>>2]=t[z>>2];t[k+4>>2]=t[z+4>>2];t[k+8>>2]=t[z+8>>2];t[k+12>>2]=t[z+12>>2];t[E>>2]=t[I>>2];t[E+4>>2]=t[I+4>>2];t[E+8>>2]=t[I+8>>2];t[E+12>>2]=t[I+12>>2];t[Y>>2]=t[W>>2];t[Y+4>>2]=t[W+4>>2];t[Y+8>>2]=t[W+8>>2];t[Y+12>>2]=t[W+12>>2];t[F>>2]=t[G>>2];t[F+4>>2]=t[G+4>>2];t[F+8>>2]=t[G+8>>2];t[F+12>>2]=t[G+12>>2];if(!(Pl(e,A,k,E,Y,F,r,i)|0)){t[F>>2]=t[I>>2];t[F+4>>2]=t[I+4>>2];t[F+8>>2]=t[I+8>>2];t[F+12>>2]=t[I+12>>2];xl(C,F,.3333333333333333);t[Y>>2]=t[z>>2];t[Y+4>>2]=t[z+4>>2];t[Y+8>>2]=t[z+8>>2];t[Y+12>>2]=t[z+12>>2];t[F>>2]=t[C>>2];t[F+4>>2]=t[C+4>>2];t[F+8>>2]=t[C+8>>2];t[F+12>>2]=t[C+12>>2];Xl(Z,Y,F);p=+c[Z>>3];m=+c[Z+8>>3];t[F>>2]=t[G>>2];t[F+4>>2]=t[G+4>>2];t[F+8>>2]=t[G+8>>2];t[F+12>>2]=t[G+12>>2];xl(L,F,.3333333333333333);t[Y>>2]=t[W>>2];t[Y+4>>2]=t[W+4>>2];t[Y+8>>2]=t[W+8>>2];t[Y+12>>2]=t[W+12>>2];t[F>>2]=t[L>>2];t[F+4>>2]=t[L+4>>2];t[F+8>>2]=t[L+8>>2];t[F+12>>2]=t[L+12>>2];Sl(Q,Y,F);g=+c[Q>>3];w=+c[Q+8>>3];k=t[47462]|0;d=+c[z>>3];v=+c[W>>3];b=+c[z+8>>3];o=+c[W+8>>3];u=H+8|0;f=-1;l=-1.0;s=1;while(1){if((s|0)>=(D|0))break;S=+c[k+(s*40|0)>>3];j=+jl(S);U=+Rl(S);T=+Jl(S);S=+Ul(S);c[H>>3]=U*p+d*j+T*g+v*S;c[u>>3]=T*w+U*m+b*j+o*S;X=r+(s<<4)|0;t[Y>>2]=t[H>>2];t[Y+4>>2]=t[H+4>>2];t[Y+8>>2]=t[H+8>>2];t[Y+12>>2]=t[H+12>>2];t[F>>2]=t[X>>2];t[F+4>>2]=t[X+4>>2];t[F+8>>2]=t[X+8>>2];t[F+12>>2]=t[X+12>>2];S=+Nl(Y,F);X=S>l;f=X?s:f;l=X?S:l;s=s+1|0}X=r+(f<<4)|0;H=r+(f+-1<<4)|0;t[Y>>2]=t[X>>2];t[Y+4>>2]=t[X+4>>2];t[Y+8>>2]=t[X+8>>2];t[Y+12>>2]=t[X+12>>2];t[F>>2]=t[H>>2];t[F+4>>2]=t[H+4>>2];t[F+8>>2]=t[H+8>>2];t[F+12>>2]=t[H+12>>2];Sl(R,Y,F);t[F>>2]=t[R>>2];t[F+4>>2]=t[R+4>>2];t[F+8>>2]=t[R+8>>2];t[F+12>>2]=t[R+12>>2];Fl(V,F);H=f+1|0;R=r+(H<<4)|0;t[Y>>2]=t[R>>2];t[Y+4>>2]=t[R+4>>2];t[Y+8>>2]=t[R+8>>2];t[Y+12>>2]=t[R+12>>2];t[F>>2]=t[X>>2];t[F+4>>2]=t[X+4>>2];t[F+8>>2]=t[X+8>>2];t[F+12>>2]=t[X+12>>2];Sl(x,Y,F);t[F>>2]=t[x>>2];t[F+4>>2]=t[x+4>>2];t[F+8>>2]=t[x+8>>2];t[F+12>>2]=t[x+12>>2];Fl(N,F);t[Y>>2]=t[V>>2];t[Y+4>>2]=t[V+4>>2];t[Y+8>>2]=t[V+8>>2];t[Y+12>>2]=t[V+12>>2];t[F>>2]=t[N>>2];t[F+4>>2]=t[N+4>>2];t[F+8>>2]=t[N+8>>2];t[F+12>>2]=t[N+12>>2];Xl(J,Y,F);t[F>>2]=t[J>>2];t[F+4>>2]=t[J+4>>2];t[F+8>>2]=t[J+8>>2];t[F+12>>2]=t[J+12>>2];Fl(M,F);t[Y>>2]=t[a>>2];t[Y+4>>2]=t[a+4>>2];t[Y+8>>2]=t[a+8>>2];t[Y+12>>2]=t[a+12>>2];t[F>>2]=t[M>>2];t[F+4>>2]=t[M+4>>2];t[F+8>>2]=t[M+8>>2];t[F+12>>2]=t[M+12>>2];Vl(e,A,r,H,Y,F)|0;t[Y>>2]=t[M>>2];t[Y+4>>2]=t[M+4>>2];t[Y+8>>2]=t[M+8>>2];t[Y+12>>2]=t[M+12>>2];t[F>>2]=t[n>>2];t[F+4>>2]=t[n+4>>2];t[F+8>>2]=t[n+8>>2];t[F+12>>2]=t[n+12>>2];Vl(e,A,X,i-f|0,Y,F)|0;f=0}else f=0}h=P;return f|0}function Nl(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[A>>3]-+c[e>>3];i=+c[A+8>>3]-+c[e+8>>3];return+ +D(+(i*i+r*r))}function Rl(e){e=+e;var A=0.0;A=1.0-e;return+(A*A*(e*3.0))}function xl(e,A,r){e=e|0;A=A|0;r=+r;var i=0;c[A>>3]=+c[A>>3]*r;i=A+8|0;c[i>>3]=+c[i>>3]*r;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];return}function Jl(e){e=+e;return+(e*e*3.0*(1.0-e))}function Hl(e,A,r,i,a,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;var o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0,E=0.0,B=0.0,y=0.0,C=0.0,I=0.0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0.0,Y=0.0,F=0,M=0,V=0,N=0;z=h;h=h+128|0;Z=z+112|0;p=z+80|0;m=z;d=z+96|0;v=z+64|0;g=z+48|0;G=z+32|0;L=z+16|0;Q=e+(A+-1<<4)|0;k=0;E=0.0;B=0.0;y=0.0;C=0.0;I=0.0;while(1){if((k|0)>=(A|0))break;M=r+(k*40|0)+8|0;t[p>>2]=t[M>>2];t[p+4>>2]=t[M+4>>2];t[p+8>>2]=t[M+8>>2];t[p+12>>2]=t[M+12>>2];t[Z>>2]=t[M>>2];t[Z+4>>2]=t[M+4>>2];t[Z+8>>2]=t[M+8>>2];t[Z+12>>2]=t[M+12>>2];W=+$l(p,Z)+B;F=r+(k*40|0)+24|0;t[p>>2]=t[M>>2];t[p+4>>2]=t[M+4>>2];t[p+8>>2]=t[M+8>>2];t[p+12>>2]=t[M+12>>2];t[Z>>2]=t[F>>2];t[Z+4>>2]=t[F+4>>2];t[Z+8>>2]=t[F+8>>2];t[Z+12>>2]=t[F+12>>2];w=+$l(p,Z)+I;t[p>>2]=t[F>>2];t[p+4>>2]=t[F+4>>2];t[p+8>>2]=t[F+8>>2];t[p+12>>2]=t[F+12>>2];t[Z>>2]=t[F>>2];t[Z+4>>2]=t[F+4>>2];t[Z+8>>2]=t[F+8>>2];t[Z+12>>2]=t[F+12>>2];b=+$l(p,Z)+y;V=e+(k<<4)|0;N=r+(k*40|0)|0;Y=+es(+c[N>>3]);t[Z>>2]=t[e>>2];t[Z+4>>2]=t[e+4>>2];t[Z+8>>2]=t[e+8>>2];t[Z+12>>2]=t[e+12>>2];xl(v,Z,Y);Y=+As(+c[N>>3]);t[Z>>2]=t[Q>>2];t[Z+4>>2]=t[Q+4>>2];t[Z+8>>2]=t[Q+8>>2];t[Z+12>>2]=t[Q+12>>2];xl(g,Z,Y);t[p>>2]=t[v>>2];t[p+4>>2]=t[v+4>>2];t[p+8>>2]=t[v+8>>2];t[p+12>>2]=t[v+12>>2];t[Z>>2]=t[g>>2];t[Z+4>>2]=t[g+4>>2];t[Z+8>>2]=t[g+8>>2];t[Z+12>>2]=t[g+12>>2];Xl(d,p,Z);t[p>>2]=t[V>>2];t[p+4>>2]=t[V+4>>2];t[p+8>>2]=t[V+8>>2];t[p+12>>2]=t[V+12>>2];t[Z>>2]=t[d>>2];t[Z+4>>2]=t[d+4>>2];t[Z+8>>2]=t[d+8>>2];t[Z+12>>2]=t[d+12>>2];Sl(m,p,Z);t[p>>2]=t[M>>2];t[p+4>>2]=t[M+4>>2];t[p+8>>2]=t[M+8>>2];t[p+12>>2]=t[M+12>>2];t[Z>>2]=t[m>>2];t[Z+4>>2]=t[m+4>>2];t[Z+8>>2]=t[m+8>>2];t[Z+12>>2]=t[m+12>>2];Y=+$l(p,Z)+E;t[p>>2]=t[F>>2];t[p+4>>2]=t[F+4>>2];t[p+8>>2]=t[F+8>>2];t[p+12>>2]=t[F+12>>2];t[Z>>2]=t[m>>2];t[Z+4>>2]=t[m+4>>2];t[Z+8>>2]=t[m+8>>2];t[Z+12>>2]=t[m+12>>2];k=k+1|0;E=Y;B=W;y=b;C=+$l(p,Z)+C;I=w}b=y*B-I*I;w=b>=0.0?b:-b;if(!(w>=1.0e-06?(o=(y*E-I*C)/b,u=(B*C-I*E)/b,!(w<1.0e-06|o<=0.0|u<=0.0)):0))D=6;if((D|0)==6){t[p>>2]=t[e>>2];t[p+4>>2]=t[e+4>>2];t[p+8>>2]=t[e+8>>2];t[p+12>>2]=t[e+12>>2];t[Z>>2]=t[Q>>2];t[Z+4>>2]=t[Q+4>>2];t[Z+8>>2]=t[Q+8>>2];t[Z+12>>2]=t[Q+12>>2];o=+Nl(p,Z)*.3333333333333333;u=o}t[n>>2]=t[e>>2];t[n+4>>2]=t[e+4>>2];t[n+8>>2]=t[e+8>>2];t[n+12>>2]=t[e+12>>2];t[Z>>2]=t[i>>2];t[Z+4>>2]=t[i+4>>2];t[Z+8>>2]=t[i+8>>2];t[Z+12>>2]=t[i+12>>2];xl(G,Z,o);t[f>>2]=t[G>>2];t[f+4>>2]=t[G+4>>2];t[f+8>>2]=t[G+8>>2];t[f+12>>2]=t[G+12>>2];t[l>>2]=t[Q>>2];t[l+4>>2]=t[Q+4>>2];t[l+8>>2]=t[Q+8>>2];t[l+12>>2]=t[Q+12>>2];t[Z>>2]=t[a>>2];t[Z+4>>2]=t[a+4>>2];t[Z+8>>2]=t[a+8>>2];t[Z+12>>2]=t[a+12>>2];xl(L,Z,u);t[s>>2]=t[L>>2];t[s+4>>2]=t[L+4>>2];t[s+8>>2]=t[L+8>>2];t[s+12>>2]=t[L+12>>2];h=z;return}function Pl(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;var s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0.0,v=0.0,g=0,m=0.0,p=0,E=0.0,B=0,y=0.0,C=0,I=0,Z=0,G=0,L=0.0,Q=0;G=h;h=h+64|0;Z=G;C=(l|0)==2;y=+c[r>>3];m=+c[r+8>>3];p=Z+8|0;E=+c[i>>3];B=Z+16|0;w=+c[i+8>>3];k=Z+24|0;d=+c[a>>3];v=+c[n>>3];g=Z+32|0;b=+c[a+8>>3];u=+c[n+8>>3];i=Z+40|0;a=Z+48|0;n=Z+56|0;r=1;s=4.0;o=4.0;while(1){c[Z>>3]=y;c[p>>3]=m;L=o*.3333333333333333;c[B>>3]=L*E+y;c[k>>3]=L*w+m;L=s*.3333333333333333;c[g>>3]=d-L*v;c[i>>3]=b-L*u;c[a>>3]=d;c[n>>3]=b;if(r?(L=+Tl(Z,4),L<+Tl(f,l)+-.001):0){r=0;break}if(Ol(e,A,Z)|0){I=5;break}if(o==0.0&s==0.0){I=9;break}Q=o>.01;r=0;s=Q?s*.5:0.0;o=Q?o*.5:0.0}e:do{if((I|0)==5){Ml((t[47459]|0)+4|0);i=t[47460]|0;r=1;while(1){if((r|0)==4){r=1;break e}Q=t[47459]|0;c[i+(Q<<4)>>3]=+c[Z+(r<<4)>>3];L=+c[Z+(r<<4)+8>>3];t[47459]=Q+1;c[i+(Q<<4)+8>>3]=L;r=r+1|0}}else if((I|0)==9)if(C){Ml((t[47459]|0)+4|0);i=t[47460]|0;r=1;while(1){if((r|0)==4){r=1;break e}Q=t[47459]|0;c[i+(Q<<4)>>3]=+c[Z+(r<<4)>>3];L=+c[Z+(r<<4)+8>>3];t[47459]=Q+1;c[i+(Q<<4)+8>>3]=L;r=r+1|0}}else r=0}while(0);h=G;return r|0}function Xl(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;c[A>>3]=+c[A>>3]+ +c[r>>3];i=A+8|0;c[i>>3]=+c[i>>3]+ +c[r+8>>3];t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];return}function Sl(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;c[A>>3]=+c[A>>3]-+c[r>>3];i=A+8|0;c[i>>3]=+c[i>>3]-+c[r+8>>3];t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];return}function jl(e){e=+e;e=1.0-e;return+(e*e*e)}function Ul(e){e=+e;return+(e*e*e)}function Tl(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0,t=0.0,n=0;r=0.0;i=1;while(1){if((i|0)>=(A|0))break;n=i+-1|0;a=+c[e+(i<<4)>>3]-+c[e+(n<<4)>>3];t=+c[e+(i<<4)+8>>3]-+c[e+(n<<4)+8>>3];r=+D(+(t*t+a*a))+r;i=i+1|0}return+r}function Ol(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0.0,w=0.0,k=0.0,d=0.0,v=0.0,g=0,m=0,p=0.0,E=0,B=0.0,y=0,C=0,I=0,Z=0,G=0,L=0.0,Q=0.0;G=h;h=h+64|0;g=G+32|0;m=G;E=m+16|0;y=r+16|0;C=r+32|0;I=r+48|0;Z=r+8|0;n=r+24|0;f=r+40|0;l=r+56|0;s=m+8|0;o=m+24|0;a=0;e:while(1){if((a|0)>=(A|0)){i=1;break}u=e+(a<<5)|0;t[m>>2]=t[u>>2];t[m+4>>2]=t[u+4>>2];t[m+8>>2]=t[u+8>>2];t[m+12>>2]=t[u+12>>2];u=e+(a<<5)+16|0;t[E>>2]=t[u>>2];t[E+4>>2]=t[u+4>>2];t[E+8>>2]=t[u+8>>2];t[E+12>>2]=t[u+12>>2];u=_l(r,m,g)|0;A:do{if((u|0)!=4){b=+c[m>>3];w=+c[s>>3];k=+c[E>>3];d=+c[o>>3];i=0;while(1){if((i|0)>=(u|0))break A;v=+c[g+(i<<3)>>3];if((!(v<1.0e-06|v>.999999)?(B=v*v*v,Q=v*3.0,L=1.0-v,v=Q*v*L,p=L*L,Q=p*Q,L=p*L,p=+c[y>>3]*Q+ +c[r>>3]*L+ +c[C>>3]*v+ +c[I>>3]*B,B=+c[n>>3]*Q+ +c[Z>>3]*L+ +c[f>>3]*v+ +c[l>>3]*B,v=p-b,L=B-w,!(L*L+v*v<.001)):0)?(Q=p-k,L=B-d,!(L*L+Q*Q<.001)):0){i=0;break e}i=i+1|0}}}while(0);a=a+1|0}h=G;return i|0}function _l(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0,l=0.0,s=0,o=0,u=0,b=0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+96|0;v=p+48|0;g=p+24|0;s=p;m=p+80|0;w=+c[A>>3];n=+c[A+16>>3]-w;k=+c[A+8>>3];l=+c[A+24>>3]-k;t[m>>2]=0;e:do{if(!(n==0.0)){l=l/n;o=e+16|0;u=e+32|0;b=e+48|0;ql(+c[e+8>>3]-+c[e>>3]*l,+c[e+24>>3]-+c[o>>3]*l,+c[e+40>>3]-+c[u>>3]*l,+c[e+56>>3]-+c[b>>3]*l,v);c[v>>3]=l*w-k+ +c[v>>3];i=ps(v,g)|0;if((i|0)==4)A=4;else{a=v+8|0;f=v+16|0;s=v+24|0;n=1.0/n;A=0;while(1){if((A|0)>=(i|0))break;l=+c[g+(A<<3)>>3];if(l>=0.0&l<=1.0?(ql(+c[e>>3],+c[o>>3],+c[u>>3],+c[b>>3],v),k=(+c[v>>3]-w+((+c[s>>3]*l+ +c[f>>3])*l+ +c[a>>3])*l)*n,k>=0.0&k<=1.0):0)Kl(l,r,m);A=A+1|0}A=t[m>>2]|0}}else{ql(+c[e>>3],+c[e+16>>3],+c[e+32>>3],+c[e+48>>3],v);c[v>>3]=+c[v>>3]-w;d=ps(v,g)|0;if(!(l==0.0)){if((d|0)==4){A=4;break}o=e+8|0;u=e+24|0;b=e+40|0;i=e+56|0;a=v+8|0;f=v+16|0;s=v+24|0;n=1.0/l;A=0;while(1){if((A|0)>=(d|0))break;l=+c[g+(A<<3)>>3];if(l>=0.0&l<=1.0?(ql(+c[o>>3],+c[u>>3],+c[b>>3],+c[i>>3],v),w=(+c[v>>3]-k+((+c[s>>3]*l+ +c[f>>3])*l+ +c[a>>3])*l)*n,w>=0.0&w<=1.0):0)Kl(l,r,m);A=A+1|0}A=t[m>>2]|0;break}ql(+c[e+8>>3],+c[e+24>>3],+c[e+40>>3],+c[e+56>>3],v);c[v>>3]=+c[v>>3]-k;f=ps(v,s)|0;A=(f|0)==4;A:do{if((d|0)==4){if(A){A=4;break e}else A=0;while(1){if((A|0)>=(f|0))break A;Kl(+c[s+(A<<3)>>3],r,m);A=A+1|0}}else{if(A){A=0;while(1){if((A|0)>=(d|0))break A;Kl(+c[g+(A<<3)>>3],r,m);A=A+1|0}}else i=0;while(1){if((i|0)>=(d|0))break A;a=g+(i<<3)|0;A=0;while(1){if((A|0)>=(f|0))break;n=+c[a>>3];if(n==+c[s+(A<<3)>>3])Kl(n,r,m);A=A+1|0}i=i+1|0}}}while(0);A=t[m>>2]|0}}while(0);h=p;return A|0}function ql(e,A,r,i,a){e=+e;A=+A;r=+r;i=+i;a=a|0;c[a+24>>3]=i-e+(A-r)*3.0;c[a+16>>3]=(r+e)*3.0-A*6.0;c[a+8>>3]=(A-e)*3.0;c[a>>3]=e;return}function Kl(e,A,r){e=+e;A=A|0;r=r|0;var i=0;if(e>=0.0&e<=1.0){i=t[r>>2]|0;c[A+(i<<3)>>3]=e;t[r>>2]=i+1}return}function $l(e,A){e=e|0;A=A|0;return+(+c[A+8>>3]*+c[e+8>>3]+ +c[A>>3]*+c[e>>3])}function es(e){e=+e;var A=0.0;A=1.0-e;return+(A*A*(A+e*3.0))}function As(e){e=+e;return+(e*e*((1.0-e)*3.0+e))}function rs(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,g=0,m=0,p=0,B=0,y=0,C=0,I=0,Z=0,L=0,Q=0,D=0,z=0,W=0,Y=0.0;W=h;h=h+112|0;Q=W+80|0;L=W+64|0;Z=W+48|0;z=4;D=Z2(40)|0;t[D>>2]=0;p=W+32|0;B=W+16|0;y=W;C=W+96|0;z=G6(189856,1,D|0,z|0)|0;D=G;d=0;i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1)i=G;else i=0;e:while(1){if(i|0){i=-2;break}n=e+4|0;d=0;oe(116,t[n>>2]|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}t[47503]=0;t[47504]=0;d=0;oe(117,t[n>>2]<<1|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}o=(t[47506]|0)/2|0;t[47507]=o;t[47508]=o+-1;o=t[n>>2]|0;n=t[e>>2]|0;i=0;a=-1;f=E;while(1){if((i|0)>=(o|0))break;Y=+c[n+(i<<4)>>3];m=f>Y;g=m?i:a;i=i+1|0;a=g;f=m?Y:f}m=n+(a<<4)|0;t[B>>2]=t[m>>2];t[B+4>>2]=t[m+4>>2];t[B+8>>2]=t[m+8>>2];t[B+12>>2]=t[m+12>>2];m=n+(((a|0)==0?o:a)+-1<<4)|0;t[p>>2]=t[m>>2];t[p+4>>2]=t[m+4>>2];t[p+8>>2]=t[m+8>>2];t[p+12>>2]=t[m+12>>2];m=n+(((a|0)==(o+-1|0)?0:a+1|0)<<4)|0;t[y>>2]=t[m>>2];t[y+4>>2]=t[m+4>>2];t[y+8>>2]=t[m+8>>2];t[y+12>>2]=t[m+12>>2];Y=+c[B>>3];if((+c[p>>3]==Y?Y==+c[y>>3]:0)?+c[y+8>>3]>+c[B+8>>3]:0)m=15;else m=12;A:do{if((m|0)==12){m=0;d=0;i=te(36,p|0,B|0,y|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,z|0,D|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}if((i|0)==1){n=t[47510]|0;i=t[47511]|0;a=0;while(1){if((a|0)>=(o|0))break A;l=t[e>>2]|0;if(!(((a|0)>0?(I=a+-1|0,+c[l+(a<<4)>>3]==+c[l+(I<<4)>>3]):0)?+c[l+(a<<4)+8>>3]==+c[l+(I<<4)+8>>3]:0)){g=t[47503]|0;t[n+(g<<3)>>2]=l+(a<<4);t[n+(g<<3)+4>>2]=n+(((g|0)%(o|0)|0)<<3);t[i+(g<<2)>>2]=n+(g<<3);t[47503]=g+1}a=a+1|0}}else m=15}}while(0);A:do{if((m|0)==15){m=0;l=t[47510]|0;i=t[47511]|0;n=o;while(1){a=n+-1|0;if((n|0)<=0)break A;s=t[e>>2]|0;if(((n|0)<(o|0)?+c[s+(a<<4)>>3]==+c[s+(n<<4)>>3]:0)?+c[s+(a<<4)+8>>3]==+c[s+(n<<4)+8>>3]:0){n=a;continue}n=t[47503]|0;t[l+(n<<3)>>2]=s+(a<<4);t[l+(n<<3)+4>>2]=l+(((n|0)%(o|0)|0)<<3);t[i+(n<<2)>>2]=l+(n<<3);t[47503]=n+1;n=a}}}while(0);d=0;ue(29,i|0,t[47503]|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}l=0;i=t[47504]|0;A:while(1){if((l|0)>=(i|0)){k=0;break}s=l+1|0;n=s;while(1){if((n|0)>=(i|0)){l=s;continue A}d=0;ue(30,l|0,n|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue e}n=n+1|0;i=t[47504]|0}}while(1){if((k|0)>=(i|0))break;d=0;a=ie(105,k|0,A|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){l=L6(t[n>>2]|0,z|0,D|0)|0;if(!l)aA(n|0,v|0);G=v}else l=-1;if((l|0)==1){i=G;continue e}if(a|0)break;k=k+1|0}if((k|0)==(i|0)){i=t[15712]|0;d=0;t[Z>>2]=141858;t[Z+4>>2]=192;t[Z+8>>2]=141869;te(32,i|0,141839,Z|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}else{m=41;break}}g=A+16|0;s=0;while(1){if((s|0)>=(i|0))break;d=0;a=ie(105,s|0,g|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){l=L6(t[n>>2]|0,z|0,D|0)|0;if(!l)aA(n|0,v|0);G=v}else l=-1;if((l|0)==1){i=G;continue e}if(a|0)break;s=s+1|0}if((s|0)==(i|0)){i=t[15712]|0;d=0;t[L>>2]=141858;t[L+4>>2]=200;t[L+8>>2]=141902;te(32,i|0,141839,L|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}else{m=48;break}}d=0;i=ie(106,k|0,s|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,z|0,D|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue}if(!i){i=t[15712]|0;d=0;t[Q>>2]=141858;t[Q+4>>2]=207;t[Q+8>>2]=141940;te(32,i|0,141839,Q|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}d=0;oe(118,2);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}else{m=53;break}}if((k|0)==(s|0)){d=0;oe(118,2);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,z|0,D|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){i=G;continue}else{m=56;break}}t[C>>2]=A;t[C+4>>2]=0;a=C+8|0;t[a>>2]=g;t[C+12>>2]=0;d=0;ue(31,1,C|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue}t[47509]=t[47507];b=k;A:while(1){if((b|0)==-1){n=a;i=0;break}w=t[47513]|0;t[w+(b*52|0)>>2]=2;i=0;while(1){if((i|0)>=3){m=65;break}m=t[w+(b*52|0)+4+(i<<4)+12>>2]|0;if(m|0?(t[m>>2]|0)==1:0){m=68;break}i=i+1|0}if((m|0)==65){m=0;if((i|0)==3){i=t[47505]|0;s=t[i+(t[47508]<<2)>>2]|0;d=0;i=te(36,g|0,t[t[i+(t[47507]<<2)>>2]>>2]|0,t[s>>2]|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){l=L6(t[n>>2]|0,z|0,D|0)|0;if(!l)aA(n|0,v|0);G=v}else l=-1;if((l|0)==1){i=G;continue e}l=(i|0)==1;u=l?a:s;l=l?s:a}else m=68}if((m|0)==68){m=0;s=t[w+(b*52|0)+4+(i<<4)>>2]|0;o=t[w+(b*52|0)+4+(i<<4)+4>>2]|0;d=0;i=te(36,t[s>>2]|0,t[t[w+(b*52|0)+4+(((i+1|0)%3|0)<<4)+4>>2]>>2]|0,t[o>>2]|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){l=L6(t[n>>2]|0,z|0,D|0)|0;if(!l)aA(n|0,v|0);G=v}else l=-1;if((l|0)==1){i=G;continue e}l=(i|0)==1;u=l?s:o;l=l?o:s}do{if((b|0)==(k|0)){d=0;ue(31,2,l|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}d=0;ue(31,1,u|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}i=0}else{o=t[47505]|0;if((t[o+(t[47507]<<2)>>2]|0)!=(u|0)?(t[o+(t[47508]<<2)>>2]|0)!=(u|0):0){d=0;l=re(34,u|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}d=0;ue(32,2,l|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}d=0;ue(31,1,u|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}if((l|0)<=(t[47509]|0)){i=0;break}t[47509]=l;i=0;break}d=0;s=re(34,l|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}d=0;ue(32,1,s|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}d=0;ue(31,2,l|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,z|0,D|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){i=G;continue e}if((s|0)>=(t[47509]|0)){i=0;break}t[47509]=s;i=0}}while(0);while(1){if((i|0)>=3){b=-1;continue A}n=t[w+(b*52|0)+4+(i<<4)+12>>2]|0;if(n|0?(t[n>>2]|0)==1:0)break;i=i+1|0}b=(n-(t[47513]|0)|0)/52|0}while(1){if(!n)break;n=t[n+4>>2]|0;i=i+1|0}d=0;oe(118,i|0);n=d;d=0;if((n|0)!=0&(v|0)!=0){l=L6(t[n>>2]|0,z|0,D|0)|0;if(!l)aA(n|0,v|0);G=v}else l=-1;if((l|0)==1)i=G;else{m=94;break}}if((m|0)==41)i=-1;else if((m|0)==48)i=-1;else if((m|0)==53){t[r+4>>2]=2;i=t[47512]|0;t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];D=i+16|0;t[D>>2]=t[g>>2];t[D+4>>2]=t[g+4>>2];t[D+8>>2]=t[g+8>>2];t[D+12>>2]=t[g+12>>2];t[r>>2]=i;i=0}else if((m|0)==56){t[r+4>>2]=2;i=t[47512]|0;t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];D=i+16|0;t[D>>2]=t[g>>2];t[D+4>>2]=t[g+4>>2];t[D+8>>2]=t[g+8>>2];t[D+12>>2]=t[g+12>>2];t[r>>2]=i;i=0}else if((m|0)==94){t[r+4>>2]=i;n=t[47512]|0;while(1){i=i+-1|0;if(!a)break;D=n+(i<<4)|0;Q=t[a>>2]|0;t[D>>2]=t[Q>>2];t[D+4>>2]=t[Q+4>>2];t[D+8>>2]=t[Q+8>>2];t[D+12>>2]=t[Q+12>>2];a=t[a+4>>2]|0}t[r>>2]=n;i=0}G2(z|0);h=W;return i|0}function is(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;f=h;h=h+64|0;i=f+48|0;n=f+32|0;a=f+16|0;r=f;if((t[47516]|0)<(e|0)){A=t[47510]|0;if(!A){n=Z2(e<<3)|0;t[47510]=n;if(!n){n=t[15712]|0;t[r>>2]=141858;t[r+4>>2]=523;t[r+8>>2]=142108;a3(n,141839,r)|0;aA(189856,1)}n=Z2(e<<2)|0;t[47511]=n;if(!n){n=t[15712]|0;t[a>>2]=141858;t[a+4>>2]=527;t[a+8>>2]=142127;a3(n,141839,a)|0;aA(189856,1)}}else{a=Q2(A,e<<3)|0;t[47510]=a;if(!a){a=t[15712]|0;t[n>>2]=141858;t[n+4>>2]=533;t[n+8>>2]=142147;a3(a,141839,n)|0;aA(189856,1)}n=Q2(t[47511]|0,e<<2)|0;t[47511]=n;if(!n){n=t[15712]|0;t[i>>2]=141858;t[i+4>>2]=539;t[i+8>>2]=142167;a3(n,141839,i)|0;aA(189856,1)}}t[47516]=e}h=f;return}function as(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+32|0;i=a+16|0;r=a;if((t[47506]|0)<(e|0)){A=t[47505]|0;if(!A){i=Z2(e<<2)|0;t[47505]=i;if(!i){i=t[15712]|0;t[r>>2]=141858;t[r+4>>2]=573;t[r+8>>2]=142063;a3(i,141839,r)|0;aA(189856,1)}}else{r=Q2(A,e<<2)|0;t[47505]=r;if(!r){r=t[15712]|0;t[i>>2]=141858;t[i+4>>2]=580;t[i+8>>2]=142085;a3(r,141839,i)|0;aA(189856,1)}}t[47506]=e}h=a;return}function ts(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+c[A+8>>3];a=+c[A>>3];i=(+c[r>>3]-a)*(+c[e+8>>3]-i)-(+c[e>>3]-a)*(+c[r+8>>3]-i);return(i>0.0?1:i<0.0?2:3)|0}function ns(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;e:while(1){if((A|0)>3)i=0;else{A=9;break}while(1){if((i|0)>=(A|0)){A=8;break e}a=i+1|0;r=(a|0)%(A|0)|0;n=(i+2|0)%(A|0)|0;if(!(hs(i,n,e,A)|0))i=a;else break}ws(t[e+(i<<2)>>2]|0,t[e+(r<<2)>>2]|0,t[e+(n<<2)>>2]|0);A=A+-1|0;while(1){if((r|0)>=(A|0))continue e;n=r+1|0;t[e+(r<<2)>>2]=t[e+(n<<2)>>2];r=n}}if((A|0)==8){e=t[15712]|0;t[f>>2]=141858;t[f+4>>2]=324;t[f+8>>2]=142003;a3(e,141839,f)|0}else if((A|0)==9)ws(t[e>>2]|0,t[e+4>>2]|0,t[e+8>>2]|0);h=l;return}function fs(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;l=t[47513]|0;s=l+(e*52|0)|0;c=l+(A*52|0)|0;n=0;while(1){if((n|0)==3)break;o=l+(e*52|0)+4+(n<<4)|0;u=l+(e*52|0)+4+(n<<4)+4|0;b=l+(e*52|0)+4+(n<<4)+12|0;a=0;while(1){if((a|0)==3)break;h=t[t[o>>2]>>2]|0;f=t[t[l+(A*52|0)+4+(a<<4)>>2]>>2]|0;if((h|0)==(f|0)){r=t[t[l+(A*52|0)+4+(a<<4)+4>>2]>>2]|0;if((t[t[u>>2]>>2]|0)==(r|0))i=10;else i=8}else{r=t[t[l+(A*52|0)+4+(a<<4)+4>>2]>>2]|0;i=8}if(((i|0)==8?(i=0,(h|0)==(r|0)):0)?(t[t[u>>2]>>2]|0)==(f|0):0)i=10;if((i|0)==10){t[b>>2]=c;t[l+(A*52|0)+4+(a<<4)+12>>2]=s}a=a+1|0}n=n+1|0}return}function ls(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=t[47513]|0;r=0;i=0;while(1){if((i|0)==3)break;r=r+((ts(t[t[a+(e*52|0)+4+(i<<4)>>2]>>2]|0,t[t[a+(e*52|0)+4+(i<<4)+4>>2]>>2]|0,A)|0)!=2&1)|0;i=i+1|0}return((r|0)==3|(r|0)==0)&1|0}function ss(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=t[47513]|0;i=r+(e*52|0)|0;e:do{if(!(t[i>>2]|0)){t[i>>2]=1;if((e|0)==(A|0))r=1;else{a=0;while(1){if((a|0)>=3)break;i=t[r+(e*52|0)+4+(a<<4)+12>>2]|0;if(i){if(ss((i-r|0)/52|0,A)|0){r=1;break e}r=t[47513]|0}a=a+1|0}t[r+(e*52|0)>>2]=0;r=0}}else r=0}while(0);return r|0}function cs(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+32|0;i=a+16|0;r=a;if((t[47514]|0)<(e|0)){A=t[47512]|0;if(!A){i=Z2(e<<4)|0;t[47512]=i;if(!i){i=t[15712]|0;t[r>>2]=141858;t[r+4>>2]=593;t[r+8>>2]=141966;a3(i,141839,r)|0;aA(189856,1)}}else{r=Q2(A,e<<4)|0;t[47512]=r;if(!r){r=t[15712]|0;t[i>>2]=141858;t[i+4>>2]=599;t[i+8>>2]=141984;a3(r,141839,i)|0;aA(189856,1)}}t[47514]=e}h=a;return}function os(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=t[47508]|0;i=t[47507]|0;a=(r|0)>=(i|0);if((e|0)==1)if(a){t[A+4>>2]=t[(t[47505]|0)+(i<<2)>>2];e=190028;r=-1}else{e=190028;r=-1}else if(a){t[A+4>>2]=t[(t[47505]|0)+(r<<2)>>2];e=190032;r=1}else{e=190032;r=1}a=(t[e>>2]|0)+r|0;t[e>>2]=a;t[(t[47505]|0)+(a<<2)>>2]=A;return}function us(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=t[47509]|0;n=t[47505]|0;A=t[47507]|0;while(1){if((A|0)>=(a|0)){i=4;break}r=A+1|0;if((ts(t[t[n+(r<<2)>>2]>>2]|0,t[t[n+(A<<2)>>2]>>2]|0,t[e>>2]|0)|0)==1)break;else A=r}e:do{if((i|0)==4){A=t[47508]|0;while(1){if((A|0)<=(a|0)){A=a;break e}r=A+-1|0;if((ts(t[t[n+(r<<2)>>2]>>2]|0,t[t[n+(A<<2)>>2]>>2]|0,t[e>>2]|0)|0)==2)break;else A=r}}}while(0);return A|0}function bs(e,A){e=e|0;A=A|0;t[((e|0)==1?190032:190028)>>2]=A;return}function hs(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0;a=t[t[r+(((e+-1+i|0)%(i|0)|0)<<2)>>2]>>2]|0;l=t[t[r+(e<<2)>>2]>>2]|0;n=t[t[r+(((e+1|0)%(i|0)|0)<<2)>>2]>>2]|0;c=(ts(a,l,n)|0)==1;s=t[t[r+(A<<2)>>2]>>2]|0;if(c)if((ts(l,s,a)|0)==1){a=ts(s,l,n)|0;n=1;f=5}else a=0;else{a=ts(l,s,n)|0;n=2;f=5}e:do{if((f|0)==5)if((a|0)==(n|0)){a=0;while(1){if((a|0)>=(i|0)){a=1;break e}n=a;a=a+1|0;f=(a|0)%(i|0)|0;if((f|0)==(A|0)|((n|0)==(A|0)|((n|0)==(e|0)|(f|0)==(e|0))))continue;if(ds(l,s,t[t[r+(n<<2)>>2]>>2]|0,t[t[r+(f<<2)>>2]>>2]|0)|0){a=0;break}}}else a=0}while(0);return a|0}function ws(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;i=t[47504]|0;a=t[47515]|0;if((i|0)<(a|0))f=i;else{ks(a+20|0);f=t[47504]|0}n=t[47513]|0;t[47504]=f+1;a=n+(f*52|0)|0;t[a>>2]=0;t[n+(f*52|0)+4>>2]=e;t[n+(f*52|0)+8>>2]=A;t[n+(f*52|0)+16>>2]=0;t[n+(f*52|0)+20>>2]=A;t[n+(f*52|0)+24>>2]=r;t[n+(f*52|0)+32>>2]=0;t[n+(f*52|0)+36>>2]=r;t[n+(f*52|0)+40>>2]=e;t[n+(f*52|0)+48>>2]=0;i=0;while(1){if((i|0)==3)break;t[n+(f*52|0)+4+(i<<4)+8>>2]=a;i=i+1|0}return}function ks(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+32|0;i=a+16|0;r=a;if((t[47515]|0)<(e|0)){A=t[47513]|0;if(!A){i=Z2(e*52|0)|0;t[47513]=i;if(!i){i=t[15712]|0;t[r>>2]=141858;t[r+4>>2]=552;t[r+8>>2]=142024;a3(i,141839,r)|0;aA(189856,1)}}else{r=Q2(A,e*52|0)|0;t[47513]=r;if(!r){r=t[15712]|0;t[i>>2]=141858;t[i+4>>2]=558;t[i+8>>2]=142043;a3(r,141839,i)|0;aA(189856,1)}}t[47515]=e}h=a;return}function ds(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0,n=0,f=0;t=ts(e,A,r)|0;if((((t|0)!=3?(n=ts(e,A,i)|0,(n|0)!=3):0)?(f=ts(r,i,e)|0,(f|0)!=3):0)?(a=ts(r,i,A)|0,(a|0)!=3):0)return((t|0)==1^(n|0)==1)&((f|0)==1^(a|0)==1)&1|0;if(((vs(e,A,r)|0)==0?(vs(e,A,i)|0)==0:0)?(vs(r,i,e)|0)==0:0)return(vs(r,i,A)|0)!=0|0;return 1}function vs(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0,n=0.0;a=+c[e>>3];n=+c[A>>3]-a;t=+c[e+8>>3];i=+c[A+8>>3]-t;a=+c[r>>3]-a;t=+c[r+8>>3]-t;if((ts(e,A,r)|0)==3?t*i+a*n>=0.0:0)e=t*t+a*a<=i*i+n*n&1;else e=0;return e|0}function gs(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0,l=0.0,s=0,o=0,u=0,b=0,h=0,w=0.0,k=0;u=Z2(r<<2)|0;b=Z2((r<<3)+8|0)|0;h=b+8|0;a=0;while(1){if((a|0)>=(r|0))break;t[u+(a<<2)>>2]=-1;c[h+(a<<3)>>3]=-2147483647.0;a=a+1|0}c[b>>3]=-2147483648.0;e:while(1){if((e|0)==(A|0))break;o=h+(e<<3)|0;l=+c[o>>3];c[o>>3]=l==-2147483647.0?0.0:-l;s=0;a=-1;while(1){if((s|0)>=(r|0)){e=a;continue e}f=h+(s<<3)|0;n=+c[f>>3];if(n<0.0){k=(e|0)<(s|0);w=+c[(t[i+((k?s:e)<<2)>>2]|0)+((k?e:s)<<3)>>3];l=-(w+ +c[o>>3]);if(w!=0.0&n>3]=l;t[u+(s<<2)>>2]=e;n=l}a=n>+c[h+(a<<3)>>3]?s:a}s=s+1|0}}G2(b);return u|0}function ms(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0;s=h;h=h+32|0;c=s+16|0;o=s;l=t[f+4>>2]|0;t[o>>2]=t[e>>2];t[o+4>>2]=t[e+4>>2];t[o+8>>2]=t[e+8>>2];t[o+12>>2]=t[e+12>>2];t[c>>2]=t[i>>2];t[c+4>>2]=t[i+4>>2];t[c+8>>2]=t[i+8>>2];t[c+12>>2]=t[i+12>>2];if(!(Rs(o,A,c,a,f)|0)){e=t[f+24>>2]|0;t[e+(l<<2)>>2]=n;o=l+1|0;t[e+(o<<2)>>2]=r;e=gs(o,l,l+2|0,e)|0}else{e=Z2((l<<2)+8|0)|0;o=l+1|0;t[e+(l<<2)>>2]=o;t[e+(o<<2)>>2]=-1}h=s;return e|0}function ps(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,t=0.0,n=0.0,f=0.0,l=0;i=+c[e+24>>3];e:do{if(i<1.0e-07&i>-1.0e-07)e=Es(e,A)|0;else{n=+c[e+16>>3]/(i*3.0);t=+c[e+8>>3]/i;a=n*n;i=n*2.0*a-n*t+ +c[e>>3]/i;a=t*.3333333333333333-a;a=a*a*4.0*a;t=i*i+a;if(!(t<0.0)){f=(+D(+t)-i)*.5;a=+u1(f);i=+u1(-i-f)+a;c[A>>3]=i;if(t>0.0)e=1;else{i=i*-.5;c[A+16>>3]=i;e=1;r=7}}else{f=+R(+ +D(+-t),+-i);i=+u1(+D(+-a)*.5)*2.0;c[A>>3]=i*+W(+(f*.3333333333333333));c[A+8>>3]=+W(+((f+6.283185307179586)*.3333333333333333))*i;i=+W(+((f+-6.283185307179586)*.3333333333333333))*i;e=2;r=7}if((r|0)==7){c[A+(e<<3)>>3]=i;e=3}r=0;while(1){if((r|0)>=(e|0))break e;l=A+(r<<3)|0;c[l>>3]=+c[l>>3]-n;r=r+1|0}}}while(0);return e|0}function Es(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e+16>>3];do{if(!(r<1.0e-07&r>-1.0e-07)){i=+c[e+8>>3]/(r*2.0);r=i*i-+c[e>>3]/r;if(!(r<0.0))if(r==0.0){c[A>>3]=-i;e=1;break}else{r=+D(+r)-i;c[A>>3]=r;c[A+8>>3]=i*-2.0-r;e=2;break}else e=0}else e=Bs(e,A)|0}while(0);return e|0}function Bs(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+c[e+8>>3];r=+c[e>>3];if(i<1.0e-07&i>-1.0e-07)e=r<1.0e-07&r>-1.0e-07?4:0;else{c[A>>3]=-r/i;e=1}return e|0}function ys(e){e=e|0;G2(t[e>>2]|0);G2(e);return}function Cs(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;i=t[e+4>>2]|0;l=(i*3|0)+-2|0;r=t[47518]|0;if((l|0)>(t[47517]|0)){if(!r)r=Z2(l<<4)|0;else r=Q2(r,l<<4)|0;t[47518]=r;t[47517]=l;f=r;n=r}else{f=r;n=r}a=t[e>>2]|0;t[f>>2]=t[a>>2];t[f+4>>2]=t[a+4>>2];t[f+8>>2]=t[a+8>>2];t[f+12>>2]=t[a+12>>2];D6(f+16|0,a|0,16)|0;i=i+-1|0;r=1;e=2;while(1){if((r|0)>=(i|0))break;s=f+(e+2<<4)|0;c=f+(e+1<<4)|0;u=f+(e<<4)|0;o=a+(r<<4)|0;t[u>>2]=t[o>>2];t[u+4>>2]=t[o+4>>2];t[u+8>>2]=t[o+8>>2];t[u+12>>2]=t[o+12>>2];D6(c|0,o|0,16)|0;t[s>>2]=t[c>>2];t[s+4>>2]=t[c+4>>2];t[s+8>>2]=t[c+8>>2];t[s+12>>2]=t[c+12>>2];r=r+1|0;e=e+3|0}o=f+(e<<4)|0;u=a+(r<<4)|0;t[o>>2]=t[u>>2];t[o+4>>2]=t[u+4>>2];t[o+8>>2]=t[u+8>>2];t[o+12>>2]=t[u+12>>2];D6(f+(e+1<<4)|0,u|0,16)|0;t[A+4>>2]=l;t[A>>2]=n;return}function Is(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+c[A+8>>3];a=+c[A>>3];i=(+c[r>>3]-a)*(+c[e+8>>3]-i)-(+c[e>>3]-a)*(+c[r+8>>3]-i);return(i>.0001?1:(i<-.0001)<<31>>31)|0}function Zs(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0;a=+c[e>>3];t=+c[A>>3];if(a!=t){i=+c[r>>3];if(!(a>3];a=+c[r+8>>3];i=+c[A+8>>3];if(!(t>2]=t[e>>2];t[n+4>>2]=t[e+4>>2];t[n+8>>2]=t[e+8>>2];t[n+12>>2]=t[e+12>>2];t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];t[l>>2]=t[r>>2];t[l+4>>2]=t[r+4>>2];t[l+8>>2]=t[r+8>>2];t[l+12>>2]=t[r+12>>2];s=Is(n,f,l)|0;if((s|0)==0?(t[n>>2]=t[e>>2],t[n+4>>2]=t[e+4>>2],t[n+8>>2]=t[e+8>>2],t[n+12>>2]=t[e+12>>2],t[f>>2]=t[A>>2],t[f+4>>2]=t[A+4>>2],t[f+8>>2]=t[A+8>>2],t[f+12>>2]=t[A+12>>2],t[l>>2]=t[r>>2],t[l+4>>2]=t[r+4>>2],t[l+8>>2]=t[r+8>>2],t[l+12>>2]=t[r+12>>2],(Zs(n,f,l)|0)!=0):0)a=1;else c=3;do{if((c|0)==3){t[n>>2]=t[e>>2];t[n+4>>2]=t[e+4>>2];t[n+8>>2]=t[e+8>>2];t[n+12>>2]=t[e+12>>2];t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];t[l>>2]=t[i>>2];t[l+4>>2]=t[i+4>>2];t[l+8>>2]=t[i+8>>2];t[l+12>>2]=t[i+12>>2];a=Is(n,f,l)|0;if((a|0)==0?(t[n>>2]=t[e>>2],t[n+4>>2]=t[e+4>>2],t[n+8>>2]=t[e+8>>2],t[n+12>>2]=t[e+12>>2],t[f>>2]=t[A>>2],t[f+4>>2]=t[A+4>>2],t[f+8>>2]=t[A+8>>2],t[f+12>>2]=t[A+12>>2],t[l>>2]=t[i>>2],t[l+4>>2]=t[i+4>>2],t[l+8>>2]=t[i+8>>2],t[l+12>>2]=t[i+12>>2],Zs(n,f,l)|0):0){a=1;break}t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];t[f+8>>2]=t[i+8>>2];t[f+12>>2]=t[i+12>>2];t[l>>2]=t[e>>2];t[l+4>>2]=t[e+4>>2];t[l+8>>2]=t[e+8>>2];t[l+12>>2]=t[e+12>>2];e=Is(n,f,l)|0;t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];t[f+8>>2]=t[i+8>>2];t[f+12>>2]=t[i+12>>2];t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];c=(P(a,s)|0)<0;a=(P(Is(n,f,l)|0,e)|0)>>>31;a=c?a:0}}while(0);h=o;return a|0}function Ls(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e>>3]-+c[A>>3];i=+c[e+8>>3]-+c[A+8>>3];return+(i*i+r*r)}function Qs(e){e=e|0;t[e+24>>2]=Ds(t[e+4>>2]|0)|0;zs(e);return}function Ds(e){e=e|0;var A=0,r=0,i=0,a=0;i=e+2|0;a=Z2(i<<2)|0;A=L2(P(e,e)|0,8)|0;r=0;while(1){if((r|0)>=(e|0))break;t[a+(r<<2)>>2]=A;A=A+(e<<3)|0;r=r+1|0}while(1){if((e|0)>=(i|0))break;t[a+(e<<2)>>2]=0;e=e+1|0}return a|0}function zs(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;w=h;h=h+32|0;f=w+16|0;n=w;l=t[e+4>>2]|0;o=t[e+8>>2]|0;u=t[e+16>>2]|0;b=t[e+20>>2]|0;r=t[e+24>>2]|0;A=0;while(1){if((A|0)>=(l|0))break;k=t[b+(A<<2)>>2]|0;i=o+(A<<4)|0;a=o+(k<<4)|0;t[n>>2]=t[i>>2];t[n+4>>2]=t[i+4>>2];t[n+8>>2]=t[i+8>>2];t[n+12>>2]=t[i+12>>2];t[f>>2]=t[a>>2];t[f+4>>2]=t[a+4>>2];t[f+8>>2]=t[a+8>>2];t[f+12>>2]=t[a+12>>2];d=+Ws(n,f);a=t[r+(A<<2)>>2]|0;c[a+(k<<3)>>3]=d;c[(t[r+(k<<2)>>2]|0)+(A<<3)>>3]=d;e=A+-1|0;e=(k|0)==(e|0)?A+-2|0:e;while(1){if((e|0)<=-1)break;if((Ys(A,e,o,u,b)|0?Ys(e,A,o,u,b)|0:0)?(s=o+(e<<4)|0,t[n>>2]=t[i>>2],t[n+4>>2]=t[i+4>>2],t[n+8>>2]=t[i+8>>2],t[n+12>>2]=t[i+12>>2],t[f>>2]=t[s>>2],t[f+4>>2]=t[s+4>>2],t[f+8>>2]=t[s+8>>2],t[f+12>>2]=t[s+12>>2],Fs(n,f,l,l,l,o,u)|0):0){t[n>>2]=t[i>>2];t[n+4>>2]=t[i+4>>2];t[n+8>>2]=t[i+8>>2];t[n+12>>2]=t[i+12>>2];t[f>>2]=t[s>>2];t[f+4>>2]=t[s+4>>2];t[f+8>>2]=t[s+8>>2];t[f+12>>2]=t[s+12>>2];d=+Ws(n,f);c[a+(e<<3)>>3]=d;c[(t[r+(e<<2)>>2]|0)+(A<<3)>>3]=d}e=e+-1|0}A=A+1|0}h=w;return}function Ws(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,n=0;i=h;h=h+32|0;a=i+16|0;n=i;t[n>>2]=t[e>>2];t[n+4>>2]=t[e+4>>2];t[n+8>>2]=t[e+8>>2];t[n+12>>2]=t[e+12>>2];t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];r=+D(+ +Ls(n,a));h=i;return+r}function Ys(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;n=h;h=h+64|0;f=n+48|0;l=n+32|0;s=n+16|0;c=n;u=r+(t[a+(e<<2)>>2]<<4)|0;o=r+(e<<4)|0;i=r+(t[i+(e<<2)>>2]<<4)|0;a=r+(A<<4)|0;t[c>>2]=t[u>>2];t[c+4>>2]=t[u+4>>2];t[c+8>>2]=t[u+8>>2];t[c+12>>2]=t[u+12>>2];t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];t[l>>2]=t[i>>2];t[l+4>>2]=t[i+4>>2];t[l+8>>2]=t[i+8>>2];t[l+12>>2]=t[i+12>>2];t[f>>2]=t[a>>2];t[f+4>>2]=t[a+4>>2];t[f+8>>2]=t[a+8>>2];t[f+12>>2]=t[a+12>>2];a=Ms(c,s,l,f)|0;h=n;return a|0}function Fs(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;w=h;h=h+64|0;u=w+48|0;o=w+32|0;c=w+16|0;s=w;l=0;while(1){if((l|0)>=(r|0)){b=4;break}d=n+(l<<4)|0;k=n+(t[f+(l<<2)>>2]<<4)|0;t[s>>2]=t[e>>2];t[s+4>>2]=t[e+4>>2];t[s+8>>2]=t[e+8>>2];t[s+12>>2]=t[e+12>>2];t[c>>2]=t[A>>2];t[c+4>>2]=t[A+4>>2];t[c+8>>2]=t[A+8>>2];t[c+12>>2]=t[A+12>>2];t[o>>2]=t[d>>2];t[o+4>>2]=t[d+4>>2];t[o+8>>2]=t[d+8>>2];t[o+12>>2]=t[d+12>>2];t[u>>2]=t[k>>2];t[u+4>>2]=t[k+4>>2];t[u+8>>2]=t[k+8>>2];t[u+12>>2]=t[k+12>>2];if(!(Gs(s,c,o,u)|0))l=l+1|0;else{i=0;break}}e:do{if((b|0)==4)while(1){if((i|0)>=(a|0)){i=1;break e}k=n+(i<<4)|0;d=n+(t[f+(i<<2)>>2]<<4)|0;t[s>>2]=t[e>>2];t[s+4>>2]=t[e+4>>2];t[s+8>>2]=t[e+8>>2];t[s+12>>2]=t[e+12>>2];t[c>>2]=t[A>>2];t[c+4>>2]=t[A+4>>2];t[c+8>>2]=t[A+8>>2];t[c+12>>2]=t[A+12>>2];t[o>>2]=t[k>>2];t[o+4>>2]=t[k+4>>2];t[o+8>>2]=t[k+8>>2];t[o+12>>2]=t[k+12>>2];t[u>>2]=t[d>>2];t[u+4>>2]=t[d+4>>2];t[u+8>>2]=t[d+8>>2];t[u+12>>2]=t[d+12>>2];if(!(Gs(s,c,o,u)|0)){i=i+1|0;b=4}else{i=0;break}}}while(0);h=w;return i|0}function Ms(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;n=h;h=h+48|0;f=n+32|0;l=n+16|0;s=n;t[s>>2]=t[i>>2];t[s+4>>2]=t[i+4>>2];t[s+8>>2]=t[i+8>>2];t[s+12>>2]=t[i+12>>2];t[l>>2]=t[e>>2];t[l+4>>2]=t[e+4>>2];t[l+8>>2]=t[e+8>>2];t[l+12>>2]=t[e+12>>2];t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];a=Is(s,l,f)|0;t[s>>2]=t[i>>2];t[s+4>>2]=t[i+4>>2];t[s+8>>2]=t[i+8>>2];t[s+12>>2]=t[i+12>>2];t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];i=Is(s,l,f)|0;t[s>>2]=t[e>>2];t[s+4>>2]=t[e+4>>2];t[s+8>>2]=t[e+8>>2];t[s+12>>2]=t[e+12>>2];t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];r=(Is(s,l,f)|0)>0;h=n;return(r?i|a:i&a)>>>31^1|0}function Vs(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;v=h;h=h+80|0;l=v+64|0;f=v+48|0;n=v+32|0;s=v+16|0;b=v;w=t[e+4>>2]|0;k=t[e+8>>2]|0;d=t[e+16>>2]|0;o=t[e+20>>2]|0;u=Z2((w<<3)+16|0)|0;if((A|0)==-2222){t[l>>2]=t[r>>2];t[l+4>>2]=t[r+4>>2];t[l+8>>2]=t[r+8>>2];t[l+12>>2]=t[r+12>>2];A=Ns(e,l)|0}if((A|0)>-1){e=t[e+12>>2]|0;a=t[e+(A+1<<2)>>2]|0;e=t[e+(A<<2)>>2]|0}else{a=w;e=w}A=0;while(1){if((A|0)>=(e|0)){A=e;break}m=k+(A<<4)|0;t[b>>2]=t[m>>2];t[b+4>>2]=t[m+4>>2];t[b+8>>2]=t[m+8>>2];t[b+12>>2]=t[m+12>>2];m=k+(t[o+(A<<2)>>2]<<4)|0;g=k+(t[d+(A<<2)>>2]<<4)|0;t[s>>2]=t[m>>2];t[s+4>>2]=t[m+4>>2];t[s+8>>2]=t[m+8>>2];t[s+12>>2]=t[m+12>>2];t[n>>2]=t[b>>2];t[n+4>>2]=t[b+4>>2];t[n+8>>2]=t[b+8>>2];t[n+12>>2]=t[b+12>>2];t[f>>2]=t[g>>2];t[f+4>>2]=t[g+4>>2];t[f+8>>2]=t[g+8>>2];t[f+12>>2]=t[g+12>>2];t[l>>2]=t[r>>2];t[l+4>>2]=t[r+4>>2];t[l+8>>2]=t[r+8>>2];t[l+12>>2]=t[r+12>>2];if((Ms(s,n,f,l)|0)!=0?(t[f>>2]=t[r>>2],t[f+4>>2]=t[r+4>>2],t[f+8>>2]=t[r+8>>2],t[f+12>>2]=t[r+12>>2],t[l>>2]=t[b>>2],t[l+4>>2]=t[b+4>>2],t[l+8>>2]=t[b+8>>2],t[l+12>>2]=t[b+12>>2],(Fs(f,l,e,a,w,k,d)|0)!=0):0){t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];t[l>>2]=t[b>>2];t[l+4>>2]=t[b+4>>2];t[l+8>>2]=t[b+8>>2];t[l+12>>2]=t[b+12>>2];i=+Ws(f,l)}else i=0.0;c[u+(A<<3)>>3]=i;A=A+1|0}while(1){if((A|0)>=(a|0)){A=a;break}c[u+(A<<3)>>3]=0.0;A=A+1|0}while(1){if((A|0)>=(w|0))break;g=k+(A<<4)|0;t[b>>2]=t[g>>2];t[b+4>>2]=t[g+4>>2];t[b+8>>2]=t[g+8>>2];t[b+12>>2]=t[g+12>>2];g=k+(t[o+(A<<2)>>2]<<4)|0;m=k+(t[d+(A<<2)>>2]<<4)|0;t[s>>2]=t[g>>2];t[s+4>>2]=t[g+4>>2];t[s+8>>2]=t[g+8>>2];t[s+12>>2]=t[g+12>>2];t[n>>2]=t[b>>2];t[n+4>>2]=t[b+4>>2];t[n+8>>2]=t[b+8>>2];t[n+12>>2]=t[b+12>>2];t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[l>>2]=t[r>>2];t[l+4>>2]=t[r+4>>2];t[l+8>>2]=t[r+8>>2];t[l+12>>2]=t[r+12>>2];if((Ms(s,n,f,l)|0)!=0?(t[f>>2]=t[r>>2],t[f+4>>2]=t[r+4>>2],t[f+8>>2]=t[r+8>>2],t[f+12>>2]=t[r+12>>2],t[l>>2]=t[b>>2],t[l+4>>2]=t[b+4>>2],t[l+8>>2]=t[b+8>>2],t[l+12>>2]=t[b+12>>2],(Fs(f,l,e,a,w,k,d)|0)!=0):0){t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];t[l>>2]=t[b>>2];t[l+4>>2]=t[b+4>>2];t[l+8>>2]=t[b+8>>2];t[l+12>>2]=t[b+12>>2];i=+Ws(f,l)}else i=0.0;c[u+(A<<3)>>3]=i;A=A+1|0}c[u+(w<<3)>>3]=0.0;c[u+(w+1<<3)>>3]=0.0;h=v;return u|0}function Ns(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;o=h;h=h+32|0;a=o+8|0;i=o;f=o+24|0;l=e+8|0;s=e+12|0;c=f+4|0;r=0;while(1){if((r|0)>=(t[e>>2]|0)){r=-1111;break}b=t[s>>2]|0;u=t[b+(r<<2)>>2]|0;t[f>>2]=(t[l>>2]|0)+(u<<4);n=r+1|0;t[c>>2]=(t[b+(n<<2)>>2]|0)-u;t[i>>2]=t[f>>2];t[i+4>>2]=t[f+4>>2];t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];if(!(Wl(i,a)|0))r=n;else break}h=o;return r|0}function Rs(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+64|0;u=g+48|0;o=g+32|0;w=g+16|0;b=g;d=t[a+4>>2]|0;v=t[a+8>>2]|0;k=t[a+16>>2]|0;n=(i|0)<0;do{if((A|0)<0)if(n){n=0;l=0;a=0;f=0}else{A=t[a+12>>2]|0;a=0;f=0;l=i;s=A;A=A+(i<<2)|0;c=9}else{if(n){c=t[a+12>>2]|0;a=0;f=0;l=A;s=c;A=c+(A<<2)|0;c=9;break}n=t[a+12>>2]|0;if((A|0)>(i|0)){a=t[n+(i+1<<2)>>2]|0;f=t[n+(i<<2)>>2]|0;l=A;s=n;A=n+(A<<2)|0;c=9;break}else{a=t[n+(A+1<<2)>>2]|0;f=t[n+(A<<2)>>2]|0;l=i;s=n;A=n+(i<<2)|0;c=9;break}}}while(0);if((c|0)==9){n=t[s+(l+1<<2)>>2]|0;l=t[A>>2]|0}A=0;while(1){if((A|0)>=(f|0)){c=13;break}s=v+(A<<4)|0;i=v+(t[k+(A<<2)>>2]<<4)|0;t[b>>2]=t[e>>2];t[b+4>>2]=t[e+4>>2];t[b+8>>2]=t[e+8>>2];t[b+12>>2]=t[e+12>>2];t[w>>2]=t[r>>2];t[w+4>>2]=t[r+4>>2];t[w+8>>2]=t[r+8>>2];t[w+12>>2]=t[r+12>>2];t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[o+8>>2]=t[s+8>>2];t[o+12>>2]=t[s+12>>2];t[u>>2]=t[i>>2];t[u+4>>2]=t[i+4>>2];t[u+8>>2]=t[i+8>>2];t[u+12>>2]=t[i+12>>2];if(!(Gs(b,w,o,u)|0))A=A+1|0;else{n=0;break}}e:do{if((c|0)==13){while(1){if((a|0)>=(l|0))break;i=v+(a<<4)|0;c=v+(t[k+(a<<2)>>2]<<4)|0;t[b>>2]=t[e>>2];t[b+4>>2]=t[e+4>>2];t[b+8>>2]=t[e+8>>2];t[b+12>>2]=t[e+12>>2];t[w>>2]=t[r>>2];t[w+4>>2]=t[r+4>>2];t[w+8>>2]=t[r+8>>2];t[w+12>>2]=t[r+12>>2];t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];t[u>>2]=t[c>>2];t[u+4>>2]=t[c+4>>2];t[u+8>>2]=t[c+8>>2];t[u+12>>2]=t[c+12>>2];if(!(Gs(b,w,o,u)|0)){a=a+1|0;c=13}else{n=0;break e}}while(1){if((n|0)>=(d|0)){n=1;break e}i=v+(n<<4)|0;c=v+(t[k+(n<<2)>>2]<<4)|0;t[b>>2]=t[e>>2];t[b+4>>2]=t[e+4>>2];t[b+8>>2]=t[e+8>>2];t[b+12>>2]=t[e+12>>2];t[w>>2]=t[r>>2];t[w+4>>2]=t[r+4>>2];t[w+8>>2]=t[r+8>>2];t[w+12>>2]=t[r+12>>2];t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];t[u>>2]=t[c>>2];t[u+4>>2]=t[c+4>>2];t[u+8>>2]=t[c+8>>2];t[u+12>>2]=t[c+12>>2];if(!(Gs(b,w,o,u)|0))n=n+1|0;else{n=0;break}}}}while(0);h=g;return n|0}function xs(e){e=e|0;return Js(e,0,0)|0}function Js(e,A,r){e=e|0;A=A|0;r=r|0;return Hs(e,A,r,0)|0}function Hs(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0;if(!A){n=Z2(496)|0;if(!n)n=0;else{t[n+12>>2]=35;t[n+16>>2]=107;t[n+20>>2]=105;A=35;f=6}}else{n=I5[t[A>>2]&63](496)|0;if(!n)n=0;else{f=t[A>>2]|0;t[n+12>>2]=f;t[n+16>>2]=t[A+4>>2];t[n+20>>2]=t[A+8>>2];A=f;f=6}}do{if((f|0)==6){t[n+8>>2]=0;t[n+32>>2]=0;t[n+376>>2]=16;s=n+12|0;l=I5[A&63](256)|0;A=n+388|0;t[A>>2]=l;if(!l){F5[t[n+20>>2]&127](n);n=0;break}f=I5[t[s>>2]&63](1024)|0;l=n+44|0;t[l>>2]=f;if(!f){r=n+20|0;F5[t[r>>2]&127](t[A>>2]|0);F5[t[r>>2]&127](n);n=0;break}t[n+48>>2]=f+1024;if(!a){a=Ps(s)|0;t[n+352>>2]=a;if(!a){r=n+20|0;F5[t[r>>2]&127](t[l>>2]|0);F5[t[r>>2]&127](t[A>>2]|0);F5[t[r>>2]&127](n);n=0;break}}else t[n+352>>2]=a;t[n+372>>2]=0;t[n+364>>2]=0;t[n+300>>2]=0;t[n+464>>2]=0;t[n+460>>2]=0;t[n+124>>2]=0;t[n+244>>2]=0;A=n+468|0;i[A>>0]=33;f=n+232|0;i[f>>0]=0;i[n+233>>0]=0;t[n+392>>2]=0;t[n+396>>2]=0;i[n+400>>0]=0;a=n+228|0;t[a>>2]=0;Xs(n+412|0,s);Xs(n+436|0,s);Ss(n,e);if(e|0?(t[a>>2]|0)==0:0){js(n);n=0;break}if(!r){t[n+224>>2]=XK()|0;break}else{i[f>>0]=1;t[n+224>>2]=E0()|0;i[A>>0]=i[r>>0]|0;break}}}while(0);return n|0}function Ps(e){e=e|0;var A=0;A=I5[t[e>>2]&63](188)|0;if(A|0){Xs(A+80|0,e);Xs(A+104|0,e);$c(A,e);$c(A+20|0,e);$c(A+40|0,e);$c(A+60|0,e);i[A+131>>0]=0;$c(A+132|0,e);t[A+152>>2]=0;t[A+156>>2]=0;i[A+160>>0]=0;e=A+164|0;t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;t[e+12>>2]=0;t[e+16>>2]=0;t[e+20>>2]=0;i[A+128>>0]=1;i[A+129>>0]=0;i[A+130>>0]=0}return A|0}function Xs(e,A){e=e|0;A=A|0;t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;t[e+12>>2]=0;t[e+16>>2]=0;t[e+20>>2]=A;return}function Ss(e,A){e=e|0;A=A|0;var r=0,n=0,f=0;t[e+276>>2]=56;L0(e+252|0);if(A|0)t[e+228>>2]=ec(A,e+12|0)|0;t[e+356>>2]=0;z$(e+148|0,e+144|0,0)|0;t[e>>2]=0;t[e+4>>2]=0;A=e+116|0;n=e+52|0;f=n+64|0;do{t[n>>2]=0;n=n+4|0}while((n|0)<(f|0));t[A>>2]=e;t[e+120>>2]=0;A=e+128|0;t[A>>2]=0;t[A+4>>2]=0;t[A+8>>2]=0;t[A+12>>2]=0;A=t[e+8>>2]|0;t[e+24>>2]=A;t[e+28>>2]=A;t[e+36>>2]=0;t[e+40>>2]=0;A=e+312|0;n=e+404|0;t[n>>2]=0;t[n+4>>2]=0;n=e+280|0;r=e+304|0;t[n>>2]=0;t[n+4>>2]=0;t[n+8>>2]=0;t[n+12>>2]=0;t[n+16>>2]=0;n=A;f=n+36|0;do{t[n>>2]=0;n=n+4|0}while((n|0)<(f|0));a[A+36>>1]=0;i[r>>0]=1;t[e+308>>2]=0;t[e+360>>2]=0;t[e+368>>2]=0;t[e+380>>2]=0;t[e+236>>2]=0;t[e+248>>2]=0;t[e+240>>2]=0;t[e+472>>2]=0;t[e+476>>2]=0;i[e+484>>0]=0;i[e+485>>0]=0;t[e+488>>2]=0;t[e+492>>2]=0;return}function js(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;if(e|0){r=e+364|0;n=e+20|0;A=t[e+360>>2]|0;while(1){if(!A){A=t[r>>2]|0;if(!A)break;t[r>>2]=0}f=t[A>>2]|0;F5[t[n>>2]&127](t[A+36>>2]|0);Us(t[A+44>>2]|0,e);F5[t[n>>2]&127](A);A=f}r=e+300|0;A=t[e+296>>2]|0;while(1){if(!A){A=t[r>>2]|0;if(!A)break;t[r>>2]=0}f=t[A+8>>2]|0;F5[t[n>>2]&127](A);A=f}Us(t[e+372>>2]|0,e);Us(t[e+368>>2]|0,e);Ts(e+412|0);Ts(e+436|0);A=e+12|0;F5[t[n>>2]&127](t[e+228>>2]|0);if((i[e+484>>0]|0)==0?(a=t[e+352>>2]|0,a|0):0)Os(a,(t[e+472>>2]|0)==0&1,A);F5[t[n>>2]&127](t[e+388>>2]|0);F5[t[n>>2]&127](t[e+460>>2]|0);F5[t[n>>2]&127](t[e+8>>2]|0);F5[t[n>>2]&127](t[e+44>>2]|0);F5[t[n>>2]&127](t[e+392>>2]|0);F5[t[n>>2]&127](t[e+236>>2]|0);A=t[e+248>>2]|0;if(A|0)F5[A&127](t[e+240>>2]|0);F5[t[n>>2]&127](e)}return}function Us(e,A){e=e|0;A=A|0;var r=0;A=A+20|0;while(1){if(!e)break;r=t[e+4>>2]|0;F5[t[A>>2]&127](t[e+16>>2]|0);F5[t[A>>2]&127](e);e=r}return}function Ts(e){e=e|0;var A=0,r=0,i=0;r=e+20|0;A=t[e>>2]|0;while(1){if(!A)break;i=t[A>>2]|0;F5[t[(t[r>>2]|0)+8>>2]&127](A);A=i}A=t[e+4>>2]|0;while(1){if(!A)break;i=t[A>>2]|0;F5[t[(t[r>>2]|0)+8>>2]&127](A);A=i}return}function Os(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=h;h=h+16|0;a=f;n=e+20|0;_s(a,n);r=r+8|0;while(1){i=qs(a)|0;if(!i)break;if(!(t[i+16>>2]|0))continue;F5[t[r>>2]&127](t[i+20>>2]|0)}Ks(e);Ks(e+132|0);Ks(n);Ks(e+40|0);Ks(e+60|0);Ts(e+80|0);Ts(e+104|0);if(A<<24>>24){F5[t[r>>2]&127](t[e+184>>2]|0);F5[t[r>>2]&127](t[e+164>>2]|0)}F5[t[r>>2]&127](e);h=f;return}function _s(e,A){e=e|0;A=A|0;var r=0;r=t[A>>2]|0;t[e>>2]=r;t[e+4>>2]=r+(t[A+8>>2]<<2);return}function qs(e){e=e|0;var A=0,r=0,i=0;r=t[e+4>>2]|0;i=t[e>>2]|0;do{if((i|0)==(r|0)){A=0;break}A=i;i=i+4|0;t[e>>2]=i;A=t[A>>2]|0}while(!(A|0));return A|0}function Ks(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;r=e+8|0;i=e+16|0;A=0;while(1){a=t[(t[i>>2]|0)+8>>2]|0;n=t[e>>2]|0;if(A>>>0>=(t[r>>2]|0)>>>0)break;F5[a&127](t[n+(A<<2)>>2]|0);A=A+1|0}F5[a&127](n);return}function $s(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=Ac(e)|0;if(!a){t[e+276>>2]=57;a=rc(e,A,r,i)|0}return a|0}function ec(e,A){e=e|0;A=A|0;var r=0,a=0;r=0;do{a=r;r=r+1|0}while((i[e+a>>0]|0)!=0);A=I5[t[A>>2]&63](r)|0;if(!A)A=0;else Q6(A|0,e|0,r|0)|0;return A|0}function Ac(e){e=e|0;var A=0;A=e+228|0;if(!(L5[(i[e+232>>0]<<24>>24?38:37)&63](e+148|0,e+144|0,t[A>>2]|0)|0))e=Kc(e,t[A>>2]|0)|0;else e=0;return e|0}function rc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0;n=h;h=h+16|0;f=n;t[f>>2]=A;s=e+144|0;l=t[s>>2]|0;l=Q5[t[l>>2]&127](l,A,r,f)|0;a=ic(e,t[s>>2]|0,A,r,l,t[f>>2]|0,a,(i[e+480>>0]|0)==0&1)|0;h=n;return a|0}function ic(e,A,r,a,f,l,s,c){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;l=l|0;s=s|0;c=c|0;var o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0,q=0,K=0,$=0,ee=0,Ae=0,re=0,ie=0,ae=0,te=0,ne=0,fe=0,le=0,se=0,ce=0,oe=0,ue=0,be=0,he=0,we=0,ke=0,de=0,ve=0,ge=0,me=0,pe=0,Ee=0,Be=0,ye=0,Ce=0,Ie=0,Ze=0,Ge=0,Le=0,Qe=0,De=0,ze=0;ze=h;h=h+16|0;Le=ze;t[Le>>2]=l;d=t[e+352>>2]|0;v=e+144|0;if((t[v>>2]|0)==(A|0)){w=e+284|0;k=e+288|0;be=e+296|0}else{be=e+296|0;k=t[be>>2]|0;w=k;k=k+4|0}g=c<<24>>24!=0;we=e+252|0;m=e+80|0;p=e+476|0;E=e+84|0;B=e+320|0;y=e+412|0;C=e+316|0;I=e+424|0;Z=e+428|0;G=e+324|0;de=e+4|0;L=e+485|0;Q=d+132|0;D=e+312|0;ge=d+129|0;z=d+128|0;W=d+80|0;Y=d+92|0;F=d+96|0;M=e+136|0;V=e+88|0;N=e+488|0;pe=e+112|0;Ee=d+131|0;Be=e+116|0;ye=d+130|0;Ce=e+108|0;Ie=e+356|0;R=e+340|0;x=e+132|0;J=e+344|0;H=e+348|0;P=e+328|0;X=e+349|0;S=e+420|0;j=d+120|0;U=d+116|0;T=e+92|0;O=e+472|0;_=e+336|0;q=e+332|0;K=e+96|0;$=e+256|0;ee=e+464|0;Ae=e+460|0;re=d+160|0;ie=d+184|0;ae=d+180|0;te=d+164|0;ne=e+128|0;fe=e+12|0;le=e+16|0;se=e+268|0;ce=e+120|0;oe=d+176|0;ue=d+168|0;b=A;u=r;A=f;e:while(1){t[w>>2]=u;r=t[Le>>2]|0;t[k>>2]=r;l=r;A:do{if((A|0)<1){if(g&(A|0)!=0){o=7;break e}switch(A|0){case-1:{l=5;o=280;break e}case 0:{o=9;break e}case-2:{l=6;break e}case-4:{o=10;break e}case-15:{A=15;break A}default:{}}t[Le>>2]=a;A=0-A|0;l=a}}while(0);f=D5[t[we>>2]&127](we,A,u,l,b)|0;A:do{switch(f|0){case 2:{o=58;break e}case-1:{o=184;break e}case 1:{l=ac(e,0,u,t[Le>>2]|0)|0;if(l|0){o=280;break e}l=t[v>>2]|0;break}case 4:{if(!(t[E>>2]|0))l=1;else{o=tc(y,b,u,t[Le>>2]|0)|0;t[C>>2]=o;if(!o){l=1;o=280;break e}t[Z>>2]=t[I>>2];t[G>>2]=0;l=0}t[B>>2]=0;o=274;break}case 7:{l=t[E>>2]|0;if(!l)o=275;else{x5[l&15](t[de>>2]|0,t[C>>2]|0,t[B>>2]|0,t[G>>2]|0,1);t[C>>2]=0;nc(y);l=b}break}case 57:{l=ac(e,1,u,t[Le>>2]|0)|0;if(l|0){o=280;break e}l=t[v>>2]|0;break}case 6:{i[L>>0]=0;o=fc(e,Q,75395,36)|0;t[D>>2]=o;if(!o){l=1;o=280;break e}i[ge>>0]=1;if(!(t[E>>2]|0))o=33;else{if(!(Q5[t[b+52>>2]&127](b,u,t[Le>>2]|0,w)|0)){l=32;o=280;break e}l=t[b+64>>2]|0;l=tc(y,b,u+l|0,(t[Le>>2]|0)+(0-l)|0)|0;if(!l){l=1;o=280;break e}lc(l);t[Z>>2]=t[I>>2];t[G>>2]=l;l=0;o=34}break}case 14:{o=33;break}case 8:{l=t[C>>2]|0;if(!l)l=1;else{x5[t[E>>2]&15](t[de>>2]|0,l,t[B>>2]|0,t[G>>2]|0,0);nc(y);l=0}if(!((t[B>>2]|0)==0?!(i[L>>0]|0):0)){r=i[ge>>0]|0;i[ge>>0]=1;do{if(t[N>>2]|0?t[pe>>2]|0:0){f=fc(e,Q,75395,36)|0;if(!f){l=1;o=280;break e}if(!(i[L>>0]|0))A=f+20|0;else{A=f+20|0;t[A>>2]=t[Ie>>2]}i[Ee>>0]=0;if(!(D5[t[pe>>2]&127](t[Be>>2]|0,0,t[A>>2]|0,t[f+16>>2]|0,t[f+24>>2]|0)|0)){l=21;o=280;break e}if(!(i[Ee>>0]|0)){if(t[B>>2]|0)break;i[ge>>0]=r;break}if(((i[ye>>0]|0)==0?(he=t[Ce>>2]|0,he|0):0)?(I5[he&63](t[de>>2]|0)|0)==0:0){l=22;o=280;break e}}}while(0);i[L>>0]=0}A=t[V>>2]|0;if(!A)o=274;else{F5[A&127](t[de>>2]|0);l=b}break}case 34:{o=cc(e,b,u,t[Le>>2]|0)|0;t[R>>2]=o;if(!o){l=1;o=280;break e}else o=80;break}case 22:{o=oc(e,b,u,t[Le>>2]|0)|0;t[J>>2]=o;if(!o){l=1;o=280;break e}i[H>>0]=0;t[P>>2]=0;i[X>>0]=0;o=80;break}case 23:{i[H>>0]=1;t[P>>2]=142188;o=80;break}case 24:{i[X>>0]=1;t[P>>2]=142194;o=80;break}case 25:{t[P>>2]=142197;o=80;break}case 26:{t[P>>2]=142203;o=80;break}case 27:{t[P>>2]=142210;o=80;break}case 28:{t[P>>2]=142217;o=80;break}case 29:{t[P>>2]=142226;o=80;break}case 30:{t[P>>2]=142234;o=80;break}case 32:case 31:{if((i[z>>0]|0)!=0?(t[x>>2]|0)!=0:0){if(!(uc(y,(t[P>>2]|0)==0?(f|0)==32?142243:142253:142255)|0)){l=1;o=280;break e}if(!(bc(y,b,u,t[Le>>2]|0)|0)){l=1;o=280;break e}t[P>>2]=t[Z>>2];l=b}else o=275;break}case 36:case 35:{if(i[z>>0]|0){if(!(hc(t[R>>2]|0,t[J>>2]|0,i[H>>0]|0,i[X>>0]|0,0,e)|0)){l=1;o=280;break e}if((t[x>>2]|0)!=0?(ke=t[P>>2]|0,(ke|0)!=0):0){switch(i[ke>>0]|0){case 40:{o=93;break}case 78:{if((i[ke+1>>0]|0)==79)o=93;break}default:{}}if((o|0)==93){o=0;l=t[I>>2]|0;if((l|0)==(t[S>>2]|0)){if(!((wc(y)|0)<<24>>24)){l=1;o=280;break e}l=t[I>>2]|0}t[I>>2]=l+1;i[l>>0]=41;l=t[I>>2]|0;if((l|0)==(t[S>>2]|0)){if(!((wc(y)|0)<<24>>24)){l=1;o=280;break e}l=t[I>>2]|0}t[I>>2]=l+1;i[l>>0]=0;t[P>>2]=t[Z>>2];t[Z>>2]=t[I>>2]}t[k>>2]=u;J5[t[x>>2]&15](t[de>>2]|0,t[t[R>>2]>>2]|0,t[t[J>>2]>>2]|0,t[P>>2]|0,0,(f|0)==36&1);nc(y);l=b}else o=275}else o=275;break}case 38:case 37:{if(i[z>>0]|0){l=t[b+64>>2]|0;l=kc(e,b,i[H>>0]|0,u+l|0,(t[Le>>2]|0)+(0-l)|0,W)|0;if(l|0){o=280;break e}A=t[F>>2]|0;t[F>>2]=t[Y>>2];if(!(hc(t[R>>2]|0,t[J>>2]|0,i[H>>0]|0,0,A,e)|0)){l=1;o=280;break e}if((t[x>>2]|0)!=0?(ve=t[P>>2]|0,(ve|0)!=0):0){switch(i[ve>>0]|0){case 40:{o=108;break}case 78:{if((i[ve+1>>0]|0)==79)o=108;break}default:{}}if((o|0)==108){o=0;l=t[I>>2]|0;if((l|0)==(t[S>>2]|0)){if(!((wc(y)|0)<<24>>24)){l=1;o=280;break e}l=t[I>>2]|0}t[I>>2]=l+1;i[l>>0]=41;l=t[I>>2]|0;if((l|0)==(t[S>>2]|0)){if(!((wc(y)|0)<<24>>24)){l=1;o=280;break e}l=t[I>>2]|0}t[I>>2]=l+1;i[l>>0]=0;t[P>>2]=t[Z>>2];t[Z>>2]=t[I>>2]}t[k>>2]=u;J5[t[x>>2]&15](t[de>>2]|0,t[t[R>>2]>>2]|0,t[t[J>>2]>>2]|0,t[P>>2]|0,A,(f|0)==38&1);nc(y);l=b}else o=275}else o=275;break}case 12:{if(i[z>>0]|0){l=t[b+64>>2]|0;l=dc(e,b,u+l|0,(t[Le>>2]|0)+(0-l)|0)|0;A=t[D>>2]|0;r=t[j>>2]|0;if(A){t[A+4>>2]=r;t[(t[D>>2]|0)+8>>2]=(t[U>>2]|0)-(t[j>>2]|0);t[j>>2]=t[U>>2];if(!(t[M>>2]|0))A=1;else{t[k>>2]=u;A=t[D>>2]|0;H5[t[M>>2]&0](t[de>>2]|0,t[A>>2]|0,n[A+33>>0]|0,t[A+4>>2]|0,t[A+8>>2]|0,t[Ie>>2]|0,0,0,0);A=0}}else{t[U>>2]=r;A=1}if(!l){l=A;o=274}else{o=280;break e}}else o=275;break}case 5:{i[L>>0]=0;i[ge>>0]=1;if(!(t[E>>2]|0)){t[B>>2]=75395;l=1}else{o=t[b+64>>2]|0;o=tc(y,b,u+o|0,(t[Le>>2]|0)+(0-o)|0)|0;t[B>>2]=o;if(!o){l=1;o=280;break e}t[Z>>2]=t[I>>2];l=0}if((((i[ye>>0]|0)==0?(t[N>>2]|0)==0:0)?(me=t[Ce>>2]|0,me|0):0)?(I5[me&63](t[de>>2]|0)|0)==0:0){l=22;o=280;break e}if(!(t[D>>2]|0)){A=fc(e,Q,75395,36)|0;t[D>>2]=A;if(!A){l=1;o=280;break e}t[A+24>>2]=0;o=133}else o=133;break}case 13:{l=1;o=133;break}case 15:{if(((i[z>>0]|0)!=0?(t[D>>2]|0)!=0:0)?(t[M>>2]|0)!=0:0){t[k>>2]=u;l=t[D>>2]|0;H5[t[M>>2]&0](t[de>>2]|0,t[l>>2]|0,n[l+33>>0]|0,0,0,t[l+20>>2]|0,t[l+16>>2]|0,t[l+24>>2]|0,0);l=b}else o=275;break}case 16:{if((i[z>>0]|0)!=0?(t[D>>2]|0)!=0:0){f=tc(W,b,u,t[Le>>2]|0)|0;t[(t[D>>2]|0)+28>>2]=f;if(!(t[(t[D>>2]|0)+28>>2]|0)){l=1;o=280;break e}t[F>>2]=t[Y>>2];if(t[T>>2]|0){t[k>>2]=u;l=t[D>>2]|0;J5[t[T>>2]&15](t[de>>2]|0,t[l>>2]|0,t[l+20>>2]|0,t[l+16>>2]|0,t[l+24>>2]|0,t[l+28>>2]|0);l=b;break A}if(t[M>>2]|0){t[k>>2]=u;l=t[D>>2]|0;H5[t[M>>2]&0](t[de>>2]|0,t[l>>2]|0,0,0,0,t[l+20>>2]|0,t[l+16>>2]|0,t[l+24>>2]|0,t[l+28>>2]|0);l=b}else o=275}else o=275;break}case 9:{if(L5[t[b+44>>2]&63](b,u,t[Le>>2]|0)|0){t[D>>2]=0;o=275;break A}if(!(i[z>>0]|0)){t[Y>>2]=t[F>>2];t[D>>2]=0;o=275;break A}l=tc(W,b,u,t[Le>>2]|0)|0;if(!l){l=1;o=280;break e}A=fc(e,d,l,36)|0;t[D>>2]=A;if(!A){l=1;o=280;break e}if((t[A>>2]|0)!=(l|0)){t[Y>>2]=t[F>>2];t[D>>2]=0;o=275;break A}t[F>>2]=t[Y>>2];t[(t[D>>2]|0)+24>>2]=0;i[(t[D>>2]|0)+33>>0]=0;if(!(t[O>>2]|0))l=(t[be>>2]|0)!=0;else l=1;i[(t[D>>2]|0)+34>>0]=(l^1)&1;if(!(t[M>>2]|0))o=275;else l=b;break}case 10:{if(!(i[z>>0]|0)){t[Y>>2]=t[F>>2];t[D>>2]=0;o=275;break A}l=tc(W,b,u,t[Le>>2]|0)|0;if(!l){l=1;o=280;break e}A=fc(e,Q,l,36)|0;t[D>>2]=A;if(!A){l=1;o=280;break e}if((t[A>>2]|0)!=(l|0)){t[Y>>2]=t[F>>2];t[D>>2]=0;o=275;break A}t[F>>2]=t[Y>>2];t[(t[D>>2]|0)+24>>2]=0;i[(t[D>>2]|0)+33>>0]=1;if(!(t[O>>2]|0))l=(t[be>>2]|0)!=0;else l=1;i[(t[D>>2]|0)+34>>0]=(l^1)&1;if(!(t[M>>2]|0))o=275;else l=b;break}case 18:{t[_>>2]=0;t[q>>2]=0;if(!(t[K>>2]|0))o=275;else{u=tc(y,b,u,t[Le>>2]|0)|0;t[q>>2]=u;if(!u){l=1;o=280;break e}t[Z>>2]=t[I>>2];l=b}break}case 21:{if(!(Q5[t[b+52>>2]&127](b,u,t[Le>>2]|0,w)|0)){l=32;o=280;break e}if(!(t[q>>2]|0))o=275;else{l=t[b+64>>2]|0;l=tc(y,b,u+l|0,(t[Le>>2]|0)+(0-l)|0)|0;if(!l){l=1;o=280;break e}lc(l);t[_>>2]=l;t[Z>>2]=t[I>>2];l=b}break}case 19:{if((t[q>>2]|0)!=0?(t[K>>2]|0)!=0:0){l=t[b+64>>2]|0;l=tc(y,b,u+l|0,(t[Le>>2]|0)+(0-l)|0)|0;if(!l){l=1;o=280;break e}t[k>>2]=u;x5[t[K>>2]&15](t[de>>2]|0,t[q>>2]|0,t[Ie>>2]|0,l,t[_>>2]|0);l=0}else l=1;nc(y);o=274;break}case 20:{if((t[_>>2]|0)!=0?(t[K>>2]|0)!=0:0){t[k>>2]=u;x5[t[K>>2]&15](t[de>>2]|0,t[q>>2]|0,t[Ie>>2]|0,0,t[_>>2]|0);l=0}else l=1;nc(y);o=274;break}case 58:{if(t[m>>2]|0)vc(e,b,u,t[Le>>2]|0);l=gc(e,b,Le,a,s,c)|0;if(l|0){o=280;break e}if(!(t[Le>>2]|0)){o=189;break e}else l=b;break}case 44:{l=t[ee>>2]|0;do{if((t[$>>2]|0)>>>0>=l>>>0){if(!l){f=t[fe>>2]|0;t[ee>>2]=32;f=I5[f&63](32)|0;t[Ae>>2]=f;if(!f){o=198;break e}else break}r=t[le>>2]|0;f=t[Ae>>2]|0;l=l<<1;t[ee>>2]=l;l=Z5[r&127](f,l)|0;if(!l){o=193;break e}t[Ae>>2]=l;l=t[ie>>2]|0;if(l|0){l=Z5[t[le>>2]&127](l,t[ee>>2]<<2)|0;if(!l){l=1;o=280;break e}t[ie>>2]=l}}}while(0);i[(t[Ae>>2]|0)+(t[$>>2]|0)>>0]=0;if(i[re>>0]|0){l=pc(e)|0;if((l|0)<0){l=1;o=280;break e}t[(t[ie>>2]|0)+(t[ae>>2]<<2)>>2]=l;t[ae>>2]=(t[ae>>2]|0)+1;t[(t[te>>2]|0)+(l*28|0)>>2]=6;if(t[ne>>2]|0)l=b;else o=275}else o=275;break}case 50:{l=(t[Ae>>2]|0)+(t[$>>2]|0)|0;if((i[l>>0]|0)==124){l=2;o=280;break e}i[l>>0]=44;if((i[re>>0]|0)!=0?(t[ne>>2]|0)!=0:0)l=b;else o=275;break}case 49:{r=t[Ae>>2]|0;A=t[$>>2]|0;l=i[r+A>>0]|0;if(l<<24>>24==44){l=2;o=280;break e}if(l<<24>>24==0&(i[re>>0]|0)!=0?(Ze=(t[te>>2]|0)+((t[(t[ie>>2]|0)+((t[ae>>2]|0)+-1<<2)>>2]|0)*28|0)|0,(t[Ze>>2]|0)!=3):0){t[Ze>>2]=5;l=(t[ne>>2]|0)==0&1;r=t[Ae>>2]|0;A=t[$>>2]|0}else l=1;i[r+A>>0]=124;o=274;break}case 59:case 60:{i[ge>>0]=1;if(t[N>>2]|0){A=t[b+64>>2]|0;A=tc(W,b,u+A|0,(t[Le>>2]|0)+(0-A)|0)|0;if(!A){l=1;o=280;break e}r=fc(e,Q,A,0)|0;t[Y>>2]=t[F>>2];do{if(t[se>>2]|0){if(!(i[ye>>0]|0)){if(i[ge>>0]|0){o=219;break}}else if(t[be>>2]|0){o=219;break}if(!r){l=11;o=280;break e}if(!(i[r+34>>0]|0)){l=24;o=280;break e}}else o=219}while(0);if((o|0)==219?(o=0,(r|0)==0):0){i[z>>0]=i[ye>>0]|0;if((f|0)!=60){o=275;break A}l=t[ce>>2]|0;if(!l){o=275;break A}V5[l&127](t[de>>2]|0,A,1);l=b;break A}l=r+32|0;if(i[l>>0]|0){l=12;o=280;break e}if(t[r+4>>2]|0){l=Ec(e,r,(f|0)==60&1)|0;A=(l|0)==0;if(A){l=(A^1)&1;o=274;break A}else{o=280;break e}}if(!(t[pe>>2]|0)){i[z>>0]=i[ye>>0]|0;o=275;break A}i[Ee>>0]=0;i[l>>0]=1;f=(D5[t[pe>>2]&127](t[Be>>2]|0,0,t[r+20>>2]|0,t[r+16>>2]|0,t[r+24>>2]|0)|0)==0;i[l>>0]=0;if(f){l=21;o=280;break e}A=i[ye>>0]|0;if(!(i[Ee>>0]|0)){i[z>>0]=A;l=b;break A}else l=0}else{A=i[ye>>0]|0;i[z>>0]=A;l=1}if((A<<24>>24==0?(Ge=t[Ce>>2]|0,(Ge|0)!=0):0)?(I5[Ge&63](t[de>>2]|0)|0)==0:0){l=22;o=280;break e}else o=274;break}case 40:{if(!(t[ne>>2]|0))o=275;else{u=cc(e,b,u,t[Le>>2]|0)|0;t[R>>2]=u;if(!u){l=1;o=280;break e}t[ae>>2]=0;t[oe>>2]=0;i[re>>0]=1;l=b}break}case 42:case 41:{if(!(i[re>>0]|0))o=275;else{if(!(t[ne>>2]|0))l=1;else{l=I5[t[fe>>2]&63](20)|0;if(!l){l=1;o=280;break e}o=l+4|0;t[o>>2]=0;t[o+4>>2]=0;t[o+8>>2]=0;t[o+12>>2]=0;t[l>>2]=(f|0)==41?2:1;t[k>>2]=u;V5[t[ne>>2]&127](t[de>>2]|0,t[t[R>>2]>>2]|0,l);l=0}i[re>>0]=0;o=274}break}case 43:{if((i[re>>0]|0)!=0?(t[(t[te>>2]|0)+((t[(t[ie>>2]|0)+((t[ae>>2]|0)+-1<<2)>>2]|0)*28|0)>>2]=3,(t[ne>>2]|0)!=0):0)l=b;else o=275;break}case 51:{A=0;o=247;break}case 53:{A=1;o=247;break}case 52:{A=2;o=247;break}case 54:{A=3;o=247;break}case 45:{r=0;o=258;break}case 47:{r=1;o=258;break}case 46:{r=2;o=258;break}case 48:{r=3;o=258;break}case 55:{if(!(yc(e,b,u,t[Le>>2]|0)|0)){l=1;o=280;break e}else l=b;break}case 56:{if(!(Cc(e,b,u,t[Le>>2]|0)|0)){l=1;o=280;break e}else l=b;break}case 0:{if((A|0)==14)l=b;else o=275;break}case 3:{if(!(t[E>>2]|0))o=275;else l=b;break}case 11:{if((i[z>>0]|0)!=0?(t[M>>2]|0)!=0:0)l=b;else o=275;break}case 17:{if(!(t[K>>2]|0))o=275;else l=b;break}case 33:{if((i[z>>0]|0)!=0?(t[x>>2]|0)!=0:0)l=b;else o=275;break}case 39:{if(!(t[ne>>2]|0))o=275;else l=b;break}default:o=275}}while(0);if((o|0)==33)if(!(Q5[t[b+52>>2]&127](b,u,t[Le>>2]|0,w)|0)){l=32;o=280;break}else{l=1;o=34}else if((o|0)==80){o=0;if((i[z>>0]|0)!=0?(t[x>>2]|0)!=0:0)l=b;else o=275}else if((o|0)==133){o=0;if((i[z>>0]|0)!=0?(t[D>>2]|0)!=0:0){A=t[b+64>>2]|0;A=tc(W,b,u+A|0,(t[Le>>2]|0)+(0-A)|0)|0;t[(t[D>>2]|0)+16>>2]=A;A=t[D>>2]|0;if(!(t[A+16>>2]|0)){l=1;o=280;break}t[A+20>>2]=t[Ie>>2];t[F>>2]=t[Y>>2];if((f|0)==13&(t[M>>2]|0)!=0)l=b;else o=274}else o=274}else if((o|0)==247){o=0;if(i[re>>0]|0){l=t[Le>>2]|0;if(A)l=l+(0-(t[b+64>>2]|0))|0;r=pc(e)|0;if((r|0)<0){l=1;o=280;break}t[(t[te>>2]|0)+(r*28|0)>>2]=4;t[(t[te>>2]|0)+(r*28|0)+4>>2]=A;l=cc(e,b,u,l)|0;if(!l){l=1;o=280;break}A=t[l>>2]|0;t[(t[te>>2]|0)+(r*28|0)+8>>2]=A;l=0;do{f=l;l=l+1|0}while((i[A+f>>0]|0)!=0);t[ue>>2]=(t[ue>>2]|0)+l;if(t[ne>>2]|0)l=b;else o=275}else o=275}else if((o|0)==258)if(i[re>>0]|0){A=(t[ne>>2]|0)==0;l=A&1;o=(t[ae>>2]|0)+-1|0;t[ae>>2]=o;t[(t[te>>2]|0)+((t[(t[ie>>2]|0)+(o<<2)>>2]|0)*28|0)+4>>2]=r;if(!(t[ae>>2]|0)){if(!A){A=Bc(e)|0;if(!A){l=1;o=280;break}t[k>>2]=u;V5[t[ne>>2]&127](t[de>>2]|0,t[t[R>>2]>>2]|0,A)}i[re>>0]=0;t[ue>>2]=0;o=274}else o=274}else o=275;if((o|0)==34){o=0;if((i[z>>0]|0)!=0?(t[D>>2]|0)!=0:0){A=t[b+64>>2]|0;A=tc(W,b,u+A|0,(t[Le>>2]|0)+(0-A)|0)|0;if(!A){l=1;o=280;break}lc(A);t[(t[D>>2]|0)+24>>2]=A;t[F>>2]=t[Y>>2];if((f|0)==14&(t[M>>2]|0)!=0)l=b;else o=274}else o=274}if((o|0)==274){o=0;if(!(l<<24>>24))l=b;else o=275}if((o|0)==275){o=0;if(!(t[m>>2]|0))l=b;else{vc(e,b,u,t[Le>>2]|0);l=b}}switch(t[p>>2]|0){case 3:{o=278;break e}case 2:{l=35;o=280;break e}default:{}}A=t[Le>>2]|0;b=l;u=A;A=Q5[t[l>>2]&127](l,A,a,Le)|0}e:switch(o|0){case 7:{t[s>>2]=u;l=0;break}case 9:{t[w>>2]=r;l=4;break}case 10:{l=(b|0)==(t[v>>2]|0);if(!l?(i[(t[be>>2]|0)+20>>0]|0)==0:0){t[s>>2]=u;l=0;break}if((i[e+484>>0]|0)!=0|l^1)if((D5[t[we>>2]&127](we,-4,a,a,b)|0)==-1)l=29;else{t[s>>2]=u;l=0}else l=3;break}case 58:{do{if((i[L>>0]|0?(Qe=i[ge>>0]|0,i[ge>>0]=1,t[N>>2]|0):0)?t[pe>>2]|0:0){l=fc(e,Q,75395,36)|0;if(!l){l=1;break e}Le=l+20|0;t[Le>>2]=t[Ie>>2];i[Ee>>0]=0;if(!(D5[t[pe>>2]&127](t[Be>>2]|0,0,t[Le>>2]|0,t[l+16>>2]|0,t[l+24>>2]|0)|0)){l=21;break e}if(!(i[Ee>>0]|0)){i[ge>>0]=Qe;break}if(((i[ye>>0]|0)==0?(De=t[Ce>>2]|0,De|0):0)?(I5[De&63](t[de>>2]|0)|0)==0:0){l=22;break e}}}while(0);t[e+276>>2]=58;l=sc(e,u,a,s)|0;break}case 184:{l=(A|0)==28?10:(A|0)==12?17:2;break}case 189:{t[e+276>>2]=59;l=0;break}case 193:{t[ee>>2]=(t[ee>>2]|0)>>>1;l=1;break}case 198:{t[ee>>2]=0;l=1;break}case 278:{t[s>>2]=t[Le>>2];l=0;break}case 280:break}h=ze;return l|0}function ac(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+32|0;w=k+16|0;o=k+12|0;l=k+8|0;s=k+4|0;c=k;t[w>>2]=0;t[o>>2]=0;t[l>>2]=0;t[c>>2]=-1;u=e+144|0;b=e+284|0;n=(A|0)!=0;e:do{if(W5[(i[e+232>>0]<<24>>24?2:1)&3](A,t[u>>2]|0,r,a,b,l,s,w,o,c)|0){if((t[c>>2]|0)==1&(n^1)?(i[(t[e+352>>2]|0)+130>>0]=1,f=e+488|0,(t[f>>2]|0)==1):0)t[f>>2]=0;f=e+140|0;if(!(t[f>>2]|0))if(!(t[e+80>>2]|0)){r=0;A=0}else{vc(e,t[u>>2]|0,r,a);r=0;A=0}else{A=t[w>>2]|0;if(!A)A=0;else{a=t[u>>2]|0;A=tc(e+436|0,a,A,A+(Z5[t[a+28>>2]&127](a,A)|0)|0)|0;if(!A){A=1;break}t[e+452>>2]=t[e+448>>2]}n=t[l>>2]|0;if(n){l=t[u>>2]|0;n=tc(e+436|0,l,n,(t[s>>2]|0)+(0-(t[l+64>>2]|0))|0)|0;if(!n){A=1;break}}else n=0;R5[t[f>>2]&31](t[e+4>>2]|0,n,A,t[c>>2]|0);r=n}do{if(!(t[e+228>>2]|0)){n=t[o>>2]|0;f=n;if(n|0){c=t[n+64>>2]|0;o=t[u>>2]|0;if((c|0)==(t[o+64>>2]|0)?(c|0)!=2|(n|0)==(o|0):0){t[u>>2]=f;break}t[b>>2]=t[w>>2];A=19;break e}n=t[w>>2]|0;if(n|0){f=e+436|0;if(!A){A=t[u>>2]|0;A=tc(f,A,n,n+(Z5[t[A+28>>2]&127](A,n)|0)|0)|0;if(!A){A=1;break e}}A=Kc(e,A)|0;nc(f);if((A|0)!=18)break e;t[b>>2]=t[w>>2];A=18;break e}}}while(0);if((A|0)!=0|(r|0)!=0){nc(e+436|0);A=0}else A=0}else A=n?31:30}while(0);h=k;return A|0}function tc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;do{if(!(bc(e,A,r,a)|0))A=0;else{r=e+12|0;A=t[r>>2]|0;if((A|0)==(t[e+8>>2]|0)){if(!((wc(e)|0)<<24>>24)){A=0;break}A=t[r>>2]|0}t[r>>2]=A+1;i[A>>0]=0;A=t[e+16>>2]|0}}while(0);return A|0}function nc(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;i=e+4|0;A=t[i>>2]|0;e:do{if(!A){t[i>>2]=t[e>>2];A=e}else{r=t[e>>2]|0;while(1){if(!r){A=e;break e}n=t[r>>2]|0;t[r>>2]=A;t[i>>2]=r;a=r;r=n;A=a}}}while(0);t[A>>2]=0;t[e+16>>2]=0;t[e+12>>2]=0;t[e+8>>2]=0;return}function fc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0;E=A+8|0;e:do{if(!(t[E>>2]|0))if(a){i[A+4>>0]=6;t[E>>2]=64;f=A+16|0;l=I5[t[t[f>>2]>>2]&63](256)|0;t[A>>2]=l;if(!l){t[E>>2]=0;f=0;break}else{z6(l|0,0,256)|0;s=_c(e,r)|0;s=(t[E>>2]|0)+-1&s;l=A;h=27;break}}else f=0;else{p=_c(e,r)|0;c=t[E>>2]|0;s=c+-1|0;o=t[A>>2]|0;u=p&0-c;m=A+4|0;b=s>>>2;l=0;s=s&p;while(1){f=t[o+(s<<2)>>2]|0;if(!f)break;if((qc(r,t[f>>2]|0)|0)<<24>>24)break e;if(!(l<<24>>24))f=(u>>>((n[m>>0]|0)+-1|0)&b|1)&255;else f=l;g=f&255;l=f;s=s-g+(s>>>0>>0?c:0)|0}if(a){l=i[m>>0]|0;f=l&255;if(!((t[A+12>>2]|0)>>>(f+-1|0))){f=A+16|0;l=A;h=27;break}k=f+1&255;s=l+1&255;v=1<>2]>>2]&63](l)|0;if(g){z6(g|0,0,l|0)|0;w=0-v|0;b=s+-1|0;h=d>>>2;u=0;while(1){if(u>>>0>=(t[E>>2]|0)>>>0)break;l=t[(t[A>>2]|0)+(u<<2)>>2]|0;if(l|0){l=_c(e,t[l>>2]|0)|0;c=((l&w)>>>b&h|1)&255;l=l&d;s=0;while(1){o=g+(l<<2)|0;if(!(t[o>>2]|0))break;o=s<<24>>24==0?c:s;B=o&255;l=l+(l>>>0>>0?v:0)-B|0;s=o}t[o>>2]=t[(t[A>>2]|0)+(u<<2)>>2]}u=u+1|0}F5[t[(t[f>>2]|0)+8>>2]&127](t[A>>2]|0);t[A>>2]=g;i[m>>0]=k;t[E>>2]=v;c=((p&w)>>>b&h|1)&255;l=d&p;s=0;while(1){if(!(t[g+(l<<2)>>2]|0)){s=l;l=A;h=27;break e}B=s<<24>>24==0?c:s;E=B&255;l=l+(l>>>0>>0?v:0)-E|0;s=B}}else f=0}else f=0}}while(0);if((h|0)==27){f=I5[t[t[f>>2]>>2]&63](a)|0;t[(t[l>>2]|0)+(s<<2)>>2]=f;f=t[(t[l>>2]|0)+(s<<2)>>2]|0;if(!f)f=0;else{z6(f|0,0,a|0)|0;t[t[(t[l>>2]|0)+(s<<2)>>2]>>2]=r;f=A+12|0;t[f>>2]=(t[f>>2]|0)+1;f=t[(t[l>>2]|0)+(s<<2)>>2]|0}}return f|0}function lc(e){e=e|0;var A=0,r=0,a=0;a=e;A=e;while(1){r=i[a>>0]|0;if(!(r<<24>>24))break;switch(r<<24>>24|0){case 10:case 13:case 32:{if((A|0)!=(e|0)){if((i[A+-1>>0]|0)!=32){i[A>>0]=32;A=A+1|0}}else A=e;break}default:{i[A>>0]=r;A=A+1|0}}a=a+1|0}if((A|0)!=(e|0)){e=A+-1|0;e=(i[e>>0]|0)==32?e:A}i[e>>0]=0;return}function sc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;A=Gc(e,0,t[e+144>>2]|0,A,r,a,(i[e+480>>0]|0)==0&1)|0;if((A|0)==0?(Vc(e)|0)<<24>>24==0:0)A=1;return A|0}function cc(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;n=t[e+352>>2]|0;A=tc(n+80|0,A,r,i)|0;do{if((A|0)!=0?(a=fc(e,n+20|0,A,24)|0,(a|0)!=0):0)if((t[a>>2]|0)==(A|0)){t[n+96>>2]=t[n+92>>2];if(!(Rc(e,a)|0)){a=0;break}}else t[n+92>>2]=t[n+96>>2];else a=0}while(0);return a|0}function oc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;u=t[e+352>>2]|0;c=u+80|0;b=u+92|0;f=t[b>>2]|0;o=u+88|0;if((f|0)==(t[o>>2]|0))if(!((wc(c)|0)<<24>>24))n=0;else{f=t[b>>2]|0;l=4}else l=4;e:do{if((l|0)==4){t[b>>2]=f+1;i[f>>0]=0;A=tc(c,A,r,a)|0;if((A|0)!=0?(s=A+1|0,n=fc(e,u+40|0,s,12)|0,(n|0)!=0):0){if((t[n>>2]|0)!=(s|0)){t[b>>2]=t[u+96>>2];break}f=t[b>>2]|0;l=u+96|0;t[l>>2]=f;if(i[e+232>>0]|0){r=i[s>>0]|0;A:do{if(r<<24>>24==120)if((((i[A+2>>0]|0)==109?(i[A+3>>0]|0)==108:0)?(i[A+4>>0]|0)==110:0)?(i[A+5>>0]|0)==115:0){switch(i[A+6>>0]|0){case 0:{f=u+152|0;break}case 58:{f=fc(e,u+60|0,A+7|0,8)|0;break}default:{a=0;A=120;break A}}t[n+4>>2]=f;i[n+9>>0]=1;break e}else{a=0;A=120}else{a=0;A=r}}while(0);A:while(1){switch(A<<24>>24){case 0:break e;case 58:{r=0;break A}default:{}}A=a+1|0;a=A;A=i[s+A>>0]|0}while(1){A=(f|0)==(t[o>>2]|0);if((r|0)>=(a|0))break;if(A){if(!((wc(c)|0)<<24>>24)){n=0;break e}f=t[b>>2]|0}A=i[s+r>>0]|0;t[b>>2]=f+1;i[f>>0]=A;r=r+1|0;f=t[b>>2]|0}if(A){if(!((wc(c)|0)<<24>>24)){n=0;break}f=t[b>>2]|0}t[b>>2]=f+1;i[f>>0]=0;f=fc(e,u+60|0,t[l>>2]|0,8)|0;t[n+4>>2]=f;if(f){A=t[l>>2]|0;if((t[f>>2]|0)==(A|0)){t[l>>2]=t[b>>2];break}else{t[b>>2]=A;break}}else n=0}}else n=0}}while(0);return n|0}function uc(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;n=e+12|0;f=e+8|0;while(1){r=i[A>>0]|0;if(!(r<<24>>24)){l=7;break}a=t[n>>2]|0;if((a|0)==(t[f>>2]|0)){if(!((wc(e)|0)<<24>>24)){A=0;break}a=t[n>>2]|0;r=i[A>>0]|0}t[n>>2]=a+1;i[a>>0]=r;A=A+1|0}if((l|0)==7)A=t[e+16>>2]|0;return A|0}function bc(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;t[f>>2]=r;n=e+12|0;if((t[n>>2]|0)==0?(wc(e)|0)<<24>>24==0:0)r=0;else a=3;e:do{if((a|0)==3){r=A+56|0;a=e+8|0;while(1){if((D5[t[r>>2]&127](A,f,i,n,t[a>>2]|0)|0)>>>0<2)break;if(!((wc(e)|0)<<24>>24)){r=0;break e}}r=t[e+16>>2]|0}}while(0);h=l;return r|0}function hc(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0;l=a<<24>>24==0;b=e+12|0;u=t[b>>2]|0;e:do{if(!(l&(n|0)==0)){s=e+20|0;a=0;while(1){if((a|0)>=(u|0))break;if((t[(t[s>>2]|0)+(a*12|0)>>2]|0)==(A|0)){a=1;break e}else a=a+1|0}if((!l?(c=e+8|0,(t[c>>2]|0)==0):0)?(i[A+9>>0]|0)==0:0){t[c>>2]=A;o=9}else o=9}else o=9}while(0);e:do{if((o|0)==9){s=e+16|0;do{if((u|0)==(t[s>>2]|0))if(!u){t[s>>2]=8;a=I5[t[f+12>>2]&63](96)|0;t[e+20>>2]=a;if(a|0)break;t[s>>2]=0;a=0;break e}else{l=e+20|0;a=Z5[t[f+16>>2]&127](t[l>>2]|0,u*24|0)|0;if(!a){a=0;break e}t[s>>2]=u<<1;t[l>>2]=a;break}else a=t[e+20>>2]|0}while(0);f=t[b>>2]|0;t[a+(f*12|0)>>2]=A;t[a+(f*12|0)+8>>2]=n;i[a+(f*12|0)+4>>0]=r;if(!(r<<24>>24))i[A+8>>0]=1;t[b>>2]=(t[b>>2]|0)+1;a=1}}while(0);return a|0}function wc(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;A=e+4|0;i=t[A>>2]|0;do{if(i){a=e+16|0;n=t[a>>2]|0;if(!n){t[e>>2]=i;t[A>>2]=t[i>>2];t[i>>2]=0;o=t[e>>2]|0;A=o+8|0;t[a>>2]=A;t[e+8>>2]=(t[o+4>>2]|0)+(o+8);t[e+12>>2]=A;A=1;break}r=e+8|0;if(((t[r>>2]|0)-n|0)<(t[i+4>>2]|0)){c=t[i>>2]|0;t[i>>2]=t[e>>2];o=t[A>>2]|0;t[e>>2]=o;t[A>>2]=c;A=t[a>>2]|0;Q6(o+8|0,A|0,(t[r>>2]|0)-A|0)|0;A=t[e>>2]|0;o=e+12|0;t[o>>2]=(t[o>>2]|0)-(t[a>>2]|0)+(A+8);t[a>>2]=A+8;t[r>>2]=(t[A+4>>2]|0)+(A+8);A=1}else f=6}else f=6}while(0);e:do{if((f|0)==6){i=t[e>>2]|0;c=e+16|0;do{if(!i){l=c;A=t[c>>2]|0}else{s=t[c>>2]|0;A=s;if((s|0)!=(i+8|0)){l=c;break}a=e+8|0;n=(t[a>>2]|0)-A<<1;f=e+12|0;r=(t[f>>2]|0)-A|0;if((n|0)<0){A=0;break e}A=Oc(n)|0;if(!A){A=0;break e}A=Z5[t[(t[e+20>>2]|0)+4>>2]&127](i,A)|0;if(!A){A=0;break e}t[e>>2]=A;t[A+4>>2]=n;A=t[e>>2]|0;t[f>>2]=A+8+r;t[c>>2]=A+8;t[a>>2]=A+8+n;A=1;break e}}while(0);s=e+8|0;A=(t[s>>2]|0)-A|0;if((A|0)>=0){if((A|0)>=1024){A=A<<1;if((A|0)<0){A=0;break}}else A=1024;r=Oc(A)|0;if((r|0)!=0?(o=I5[t[t[e+20>>2]>>2]&63](r)|0,(o|0)!=0):0){t[o+4>>2]=A;t[o>>2]=t[e>>2];t[e>>2]=o;f=e+12|0;e=t[f>>2]|0;i=t[c>>2]|0;r=e;a=i;if((e|0)==(i|0)){n=o+8|0;i=a}else{n=o+8|0;Q6(n|0,i|0,r-a|0)|0;i=t[l>>2]|0;r=t[f>>2]|0}t[f>>2]=o+8+(r-i);t[c>>2]=n;t[s>>2]=o+8+A;A=1}else A=0}else A=0}}while(0);return A|0}function kc(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0;e=Tc(e,A,r,a,n,f)|0;do{if(!e){A=f+12|0;e=t[A>>2]|0;if((r<<24>>24==0?(t[f+16>>2]|0)!=(e|0):0)?(l=e+-1|0,(i[l>>0]|0)==32):0){t[A>>2]=l;e=l}if((e|0)==(t[f+8>>2]|0)){if(!((wc(f)|0)<<24>>24)){e=1;break}e=t[A>>2]|0}t[A>>2]=e+1;i[e>>0]=0;e=0}}while(0);return e|0}function dc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0;W=h;h=h+16|0;Z=W;G=W+4|0;n=t[e+352>>2]|0;L=n+104|0;D=e+272|0;Q=t[D>>2]|0;t[D>>2]=1;if((t[L>>2]|0)==0?(wc(L)|0)<<24>>24==0:0)n=1;else{u=A+20|0;b=e+484|0;w=e+144|0;k=e+412|0;d=A+64|0;v=n+132|0;g=e+428|0;m=e+424|0;p=e+224|0;E=e+112|0;o=n+130|0;B=n+128|0;y=n+131|0;C=e+116|0;I=n+112|0;s=n+116|0;c=A+40|0;e:while(1){A:do{switch(Q5[t[u>>2]&127](A,r,a,Z)|0){case-4:{n=0;break e}case-1:{z=37;break e}case 0:{z=39;break e}case 28:{if((i[b>>0]|0)==0?(t[w>>2]|0)==(A|0):0){z=19;break e}n=t[d>>2]|0;n=tc(k,A,r+n|0,(t[Z>>2]|0)+(0-n)|0)|0;if(!n){n=1;break e}f=fc(e,v,n,0)|0;t[m>>2]=t[g>>2];if(!f){z=9;break e}l=f+32|0;if(i[l>>0]|0){z=11;break e}n=f+16|0;if(!(t[n>>2]|0)){i[l>>0]=1;n=t[f+4>>2]|0;n=dc(e,t[p>>2]|0,n,n+(t[f+8>>2]|0)|0)|0;i[l>>0]=0;if(!n)break A;else break e}if(t[E>>2]|0){i[y>>0]=0;i[l>>0]=1;f=(D5[t[E>>2]&127](t[C>>2]|0,0,t[f+20>>2]|0,t[n>>2]|0,t[f+24>>2]|0)|0)==0;i[l>>0]=0;if(f){n=21;break e}if(i[y>>0]|0)break A}i[B>>0]=i[o>>0]|0;break}case 6:case 9:{if(!(bc(L,A,r,t[Z>>2]|0)|0)){n=1;break e}break}case-3:{t[Z>>2]=r+(t[d>>2]|0);z=22;break}case 7:{z=22;break}case 10:{n=Z5[t[c>>2]&127](A,r)|0;if((n|0)<0){z=27;break e}f=vo(n,G)|0;r=0;while(1){if((r|0)>=(f|0))break;n=t[s>>2]|0;if((t[I>>2]|0)==(n|0)){if(!((wc(L)|0)<<24>>24)){n=1;z=35;break e}n=t[s>>2]|0}l=i[G+r>>0]|0;t[s>>2]=n+1;i[n>>0]=l;r=r+1|0}break}default:{z=41;break e}}}while(0);if((z|0)==22){z=0;n=t[s>>2]|0;if((t[I>>2]|0)==(n|0)){if(!((wc(L)|0)<<24>>24)){n=1;break}n=t[s>>2]|0}t[s>>2]=n+1;i[n>>0]=10}r=t[Z>>2]|0}if((z|0)==9){i[B>>0]=i[o>>0]|0;n=0}else if((z|0)==11)if((t[w>>2]|0)==(A|0)){t[e+284>>2]=r;n=12}else n=12;else if((z|0)==19){t[e+284>>2]=r;n=10}else if((z|0)==27)if((t[w>>2]|0)==(A|0)){t[e+284>>2]=r;n=14;z=35}else{n=14;z=35}else if((z|0)==37)if((t[w>>2]|0)==(A|0)){t[e+284>>2]=r;n=4}else n=4;else if((z|0)==39)if((t[w>>2]|0)==(A|0)){t[e+284>>2]=t[Z>>2];n=4}else n=4;else if((z|0)==41)if((t[w>>2]|0)==(A|0)){t[e+284>>2]=r;n=23}else n=23;t[D>>2]=Q}h=W;return n|0}function vc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+16|0;u=w;b=w+4|0;t[u>>2]=r;if(!(i[A+68>>0]|0)){if((t[e+144>>2]|0)==(A|0)){n=e+288|0;f=e+284|0}else{f=t[e+296>>2]|0;n=f+4|0}l=e+44|0;s=A+56|0;c=e+48|0;o=e+80|0;r=e+4|0;do{t[b>>2]=t[l>>2];e=D5[t[s>>2]&127](A,u,a,b,t[c>>2]|0)|0;t[n>>2]=t[u>>2];k=t[l>>2]|0;V5[t[o>>2]&127](t[r>>2]|0,k,(t[b>>2]|0)-k|0);t[f>>2]=t[u>>2]}while(e>>>0>1)}else V5[t[e+80>>2]&127](t[e+4>>2]|0,r,a-r|0);h=w;return}function gc(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0;o=h;h=h+16|0;s=o;c=t[r>>2]|0;if((t[e+144>>2]|0)==(A|0)){l=e+284|0;t[l>>2]=c;f=e+288|0}else{l=t[e+296>>2]|0;f=l+4|0}t[l>>2]=c;t[r>>2]=0;u=Q5[t[A+12>>2]&127](A,c,i,s)|0;i=t[s>>2]|0;t[f>>2]=i;switch(u|0){case 42:{if(t[e+80>>2]|0){vc(e,A,c,i);i=t[s>>2]|0}t[r>>2]=i;t[a>>2]=i;i=(t[e+476>>2]|0)==2?35:0;break}case 0:{t[l>>2]=i;i=4;break}case-2:{if(!(n<<24>>24))i=6;else{t[a>>2]=c;i=0}break}case-4:case-1:{if(!(n<<24>>24))i=2;else{t[a>>2]=c;i=0}break}default:{t[l>>2]=i;i=23}}h=o;return i|0}function mc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0;f=h;h=h+16|0;n=f;t[n>>2]=A;A=gc(e,t[e+144>>2]|0,n,r,a,(i[e+480>>0]|0)==0&1)|0;n=t[n>>2]|0;if(!((A|0)!=0|(n|0)==0)){t[e+276>>2]=57;A=rc(e,n,r,a)|0}h=f;return A|0}function pc(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;l=t[e+352>>2]|0;s=l+184|0;if(!(t[s>>2]|0)){A=I5[t[e+12>>2]&63](t[e+464>>2]<<2)|0;t[s>>2]=A;if(!A)A=-1;else{t[A>>2]=0;r=4}}else r=4;do{if((r|0)==4){f=l+176|0;A=t[f>>2]|0;n=l+172|0;r=t[n>>2]|0;a=l+164|0;i=t[a>>2]|0;if(A>>>0>>0)n=i;else{if(!i){A=I5[t[e+12>>2]&63](896)|0;if(!A){A=-1;break}else{r=A;A=32}}else{A=Z5[t[e+16>>2]&127](i,r*56|0)|0;if(!A){A=-1;break}r=A;A=t[n>>2]<<1}t[n>>2]=A;t[a>>2]=r;A=t[f>>2]|0;n=r}t[f>>2]=A+1;r=t[l+180>>2]|0;if(r|0){e=t[(t[s>>2]|0)+(r+-1<<2)>>2]|0;a=n+(e*28|0)+16|0;r=t[a>>2]|0;if(r|0)t[n+(r*28|0)+24>>2]=A;r=n+(e*28|0)+20|0;i=t[r>>2]|0;if(!i)t[n+(e*28|0)+12>>2]=A;t[a>>2]=A;t[r>>2]=i+1}s=n+(A*28|0)+12|0;t[s>>2]=0;t[s+4>>2]=0;t[s+8>>2]=0;t[s+12>>2]=0}}while(0);return A|0}function Ec(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+16|0;u=w;b=e+300|0;a=t[b>>2]|0;if(!a){a=I5[t[e+12>>2]&63](24)|0;if(!a)a=1;else{o=a;n=4}}else{t[b>>2]=t[a+8>>2];o=a;n=4}do{if((n|0)==4){f=A+32|0;i[f>>0]=1;l=A+12|0;t[l>>2]=0;s=e+296|0;c=o+8|0;t[c>>2]=t[s>>2];t[s>>2]=o;t[o+12>>2]=A;a=e+308|0;t[o+16>>2]=t[a>>2];i[o+20>>0]=r;t[o>>2]=0;t[o+4>>2]=0;n=t[A+4>>2]|0;r=n+(t[A+8>>2]|0)|0;t[u>>2]=n;if(!(i[A+33>>0]|0))a=Gc(e,t[a>>2]|0,t[e+224>>2]|0,n,r,u,0)|0;else{A=e+224|0;a=t[A>>2]|0;a=Q5[t[a>>2]&127](a,n,r,u)|0;a=ic(e,t[A>>2]|0,n,r,a,t[u>>2]|0,u,0)|0}if(!a){a=t[u>>2]|0;if((r|0)!=(a|0)?(t[e+476>>2]|0)==3:0){t[l>>2]=a-n;t[e+276>>2]=60;a=0;break}i[f>>0]=0;t[s>>2]=t[c>>2];t[c>>2]=t[b>>2];t[b>>2]=o;a=0}}}while(0);h=w;return a|0}function Bc(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;n=h;h=h+16|0;r=n+4|0;i=n;A=t[e+352>>2]|0;a=A+176|0;A=I5[t[e+12>>2]&63](((t[a>>2]|0)*20|0)+(t[A+168>>2]|0)|0)|0;if(!A)A=0;else{t[i>>2]=A+((t[a>>2]|0)*20|0);t[r>>2]=A+20;Zc(e,0,A,r,i)}h=n;return A|0}function yc(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;s=e+64|0;if(!(t[s>>2]|0))if(!(t[e+80>>2]|0))r=1;else{vc(e,A,r,i);r=1}else{f=A+64|0;n=r+(t[f>>2]<<1)|0;r=n+(Z5[t[A+28>>2]&127](A,n)|0)|0;a=e+412|0;n=tc(a,A,n,r)|0;if((n|0)!=0?(t[e+428>>2]=t[e+424>>2],l=Z5[t[A+32>>2]&127](A,r)|0,l=tc(a,A,l,i+(0-(t[f>>2]<<1))|0)|0,(l|0)!=0):0){Ic(l);V5[t[s>>2]&127](t[e+4>>2]|0,n,l);nc(a);r=1}else r=0}return r|0}function Cc(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;n=e+68|0;if(!(t[n>>2]|0))if(!(t[e+80>>2]|0))A=1;else{vc(e,A,r,i);A=1}else{a=e+412|0;f=t[A+64>>2]|0;A=tc(a,A,r+(f<<2)|0,i+(P(f,-3)|0)|0)|0;if(!A)A=0;else{Ic(A);M5[t[n>>2]&63](t[e+4>>2]|0,A);nc(a);A=1}}return A|0}function Ic(e){e=e|0;var A=0,r=0,a=0;e:while(1){switch(i[e>>0]|0){case 0:break e;case 13:{r=e;A=13;a=4;break e}default:{}}e=e+1|0}if((a|0)==4){while(1){if(A<<24>>24==13){i[r>>0]=10;a=e+1|0;e=(i[a>>0]|0)==10?e+2|0:a}else{i[r>>0]=A;e=e+1|0}r=r+1|0;A=i[e>>0]|0;if(!(A<<24>>24))break;else a=4}i[r>>0]=0}return}function Zc(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0;c=(t[e+352>>2]|0)+164|0;s=t[(t[c>>2]|0)+(A*28|0)>>2]|0;t[r>>2]=s;t[r+4>>2]=t[(t[c>>2]|0)+(A*28|0)+4>>2];if((s|0)==4){t[r+8>>2]=t[n>>2];A=t[(t[c>>2]|0)+(A*28|0)+8>>2]|0;while(1){s=i[A>>0]|0;c=t[n>>2]|0;t[n>>2]=c+1;i[c>>0]=s;if(!(i[A>>0]|0))break;else A=A+1|0}t[r+12>>2]=0;t[r+16>>2]=0}else{f=t[(t[c>>2]|0)+(A*28|0)+20>>2]|0;l=r+12|0;t[l>>2]=f;s=r+16|0;t[s>>2]=t[a>>2];t[a>>2]=(t[a>>2]|0)+(f*20|0);A=(t[c>>2]|0)+(A*28|0)+12|0;f=0;while(1){A=t[A>>2]|0;if(f>>>0>=(t[l>>2]|0)>>>0)break;Zc(e,A,(t[s>>2]|0)+(f*20|0)|0,a,n);A=(t[c>>2]|0)+(A*28|0)+24|0;f=f+1|0}t[r+8>>2]=0}return}function Gc(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;var s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0,q=0,K=0,$=0,ee=0,Ae=0,re=0,ie=0,ae=0,te=0,ne=0,fe=0,le=0,se=0,ce=0,oe=0,ue=0,be=0;ue=h;h=h+48|0;se=ue+28|0;ae=ue+32|0;ce=ue+24|0;q=ue;t[se>>2]=a;K=t[e+352>>2]|0;if((t[e+144>>2]|0)==(r|0)){te=e+284|0;_=e+288|0}else{_=t[e+296>>2]|0;te=_;_=_+4|0}t[te>>2]=a;g=r+4|0;ne=e+80|0;m=e+476|0;p=r+44|0;E=r+64|0;B=K+80|0;y=K+96|0;C=K+92|0;I=K+129|0;Z=e+112|0;G=e+116|0;L=e+428|0;Q=e+424|0;D=e+304|0;z=e+120|0;fe=e+4|0;W=K+130|0;$=e+60|0;Y=e+364|0;F=e+12|0;M=e+360|0;V=r+28|0;le=e+308|0;ee=r+56|0;N=e+16|0;R=e+52|0;x=e+412|0;J=e+388|0;H=e+56|0;P=e+232|0;X=e+233|0;S=e+468|0;j=e+104|0;U=e+372|0;T=r+40|0;O=e+72|0;Ae=r+68|0;re=e+44|0;ie=e+48|0;e:while(1){v=t[se>>2]|0;t[ae>>2]=v;v=Q5[t[g>>2]&127](r,v,n,ae)|0;a=t[ae>>2]|0;t[_>>2]=a;c=a;A:do{switch(v|0){case-3:{oe=6;break e}case-4:{oe=15;break e}case 0:{oe=20;break e}case-1:{oe=21;break e}case-2:{oe=23;break e}case 12:{a=17;break e}case-5:{oe=134;break e}case 9:{v=t[E>>2]|0;v=(L5[t[p>>2]&63](r,(t[se>>2]|0)+v|0,c+(0-v)|0)|0)&255;i[ce>>0]=v;do{if(v<<24>>24){a=t[$>>2]|0;if(a|0){V5[a&127](t[fe>>2]|0,ce,1);break}if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,t[ae>>2]|0)}else{s=t[E>>2]|0;s=tc(B,r,(t[se>>2]|0)+s|0,(t[ae>>2]|0)+(0-s)|0)|0;if(!s){a=1;oe=56;break e}c=fc(e,K,s,0)|0;t[C>>2]=t[y>>2];if((i[I>>0]|0)!=0?(i[W>>0]|0)==0:0){if(!c){a=t[z>>2]|0;if(a|0){V5[a&127](t[fe>>2]|0,s,0);break}if(!(t[ne>>2]|0))break;vc(e,r,t[se>>2]|0,t[ae>>2]|0);break}}else{if(!c){a=11;oe=56;break e}if(!(i[c+34>>0]|0)){a=24;oe=56;break e}}a=c+32|0;if(i[a>>0]|0){a=12;oe=56;break e}if(t[c+28>>2]|0){a=15;oe=56;break e}if(!(t[c+4>>2]|0)){if(!(t[Z>>2]|0)){if(!(t[ne>>2]|0))break;vc(e,r,t[se>>2]|0,t[ae>>2]|0);break}i[a>>0]=1;s=Qc(e)|0;i[a>>0]=0;if(!s){a=1;oe=56;break e}if(!(D5[t[Z>>2]&127](t[G>>2]|0,s,t[c+20>>2]|0,t[c+16>>2]|0,t[c+24>>2]|0)|0)){a=21;oe=56;break e}t[Q>>2]=t[L>>2];break}if(i[D>>0]|0){a=Ec(e,c,0)|0;if(!a)break;else{oe=58;break e}}a=t[z>>2]|0;if(!a){if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,t[ae>>2]|0)}else V5[a&127](t[fe>>2]|0,t[c>>2]|0,0);break A}}while(0);break}case 1:case 2:{a=t[Y>>2]|0;if(!a){a=I5[t[F>>2]&63](48)|0;if(!a){a=1;oe=75;break e}s=I5[t[F>>2]&63](32)|0;t[a+36>>2]=s;if(!s){oe=63;break e}t[a+40>>2]=s+32}else t[Y>>2]=t[a>>2];b=a+44|0;t[b>>2]=0;t[a>>2]=t[M>>2];t[M>>2]=a;v=a+12|0;t[a+16>>2]=0;t[a+20>>2]=0;d=(t[se>>2]|0)+(t[E>>2]|0)|0;k=a+4|0;t[k>>2]=d;w=a+8|0;t[w>>2]=Z5[t[V>>2]&127](r,d)|0;t[le>>2]=(t[le>>2]|0)+1;k=t[k>>2]|0;w=k+(t[w>>2]|0)|0;t[q>>2]=k;k=a+36|0;t[ce>>2]=t[k>>2];d=a+40|0;s=t[d>>2]|0;while(1){be=D5[t[ee>>2]&127](r,q,w,ce,s+-1|0)|0;s=t[ce>>2]|0;o=t[k>>2]|0;c=o;u=s-c|0;if((be|0)==1?1:(t[q>>2]|0)>>>0>=w>>>0)break;c=(t[d>>2]|0)-c<<1;s=Z5[t[N>>2]&127](o,c)|0;if(!s){oe=69;break e}t[k>>2]=s;be=s+c|0;t[d>>2]=be;t[ce>>2]=s+u;s=be}t[a+24>>2]=u;t[v>>2]=c;i[s>>0]=0;a=Dc(e,r,t[se>>2]|0,v,b)|0;if(a|0){oe=75;break e}a=t[R>>2]|0;if(!a){if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,t[ae>>2]|0)}else V5[a&127](t[fe>>2]|0,t[v>>2]|0,t[J>>2]|0);nc(x);break}case 3:case 4:{be=(t[se>>2]|0)+(t[E>>2]|0)|0;t[ce>>2]=0;be=tc(x,r,be,be+(Z5[t[V>>2]&127](r,be)|0)|0)|0;t[q>>2]=be;if(!be){a=1;oe=89;break e}t[L>>2]=t[Q>>2];a=Dc(e,r,t[se>>2]|0,q,ce)|0;if(a|0){oe=79;break e}t[L>>2]=t[Q>>2];a=t[R>>2]|0;if(!a)s=1;else{V5[a&127](t[fe>>2]|0,t[q>>2]|0,t[J>>2]|0);s=0}a=t[H>>2]|0;if(!a){if(s|0?t[ne>>2]|0:0)vc(e,r,t[se>>2]|0,t[ae>>2]|0)}else{if(t[R>>2]|0){t[te>>2]=t[_>>2];a=t[H>>2]|0}M5[a&63](t[fe>>2]|0,t[q>>2]|0)}nc(x);zc(e,t[ce>>2]|0);if((t[le>>2]|0)==0?(t[m>>2]&-2|0)!=2:0){oe=92;break e}break}case 5:{if((t[le>>2]|0)==(A|0)){a=13;break e}u=t[M>>2]|0;t[M>>2]=t[u>>2];t[u>>2]=t[Y>>2];t[Y>>2]=u;a=(t[se>>2]|0)+(t[E>>2]<<1)|0;s=Z5[t[V>>2]&127](r,a)|0;if((s|0)!=(t[u+8>>2]|0)){oe=96;break e}if(F4(t[u+4>>2]|0,a,s)|0){oe=96;break e}t[le>>2]=(t[le>>2]|0)+-1;a=t[H>>2]|0;if(!a){if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,t[ae>>2]|0)}else{s=t[u+16>>2]|0;o=u+12|0;if((s|0)!=0&(i[P>>0]|0)!=0){a=(t[o>>2]|0)+(t[u+28>>2]|0)|0;while(1){c=i[s>>0]|0;if(!(c<<24>>24))break;i[a>>0]=c;a=a+1|0;s=s+1|0}s=t[u+20>>2]|0;r:do{if((s|0)!=0&(i[X>>0]|0)!=0){i[a>>0]=i[S>>0]|0;while(1){a=a+1|0;c=i[s>>0]|0;if(!(c<<24>>24))break r;i[a>>0]=c;s=s+1|0}}}while(0);i[a>>0]=0;a=t[H>>2]|0}M5[a&63](t[fe>>2]|0,t[o>>2]|0)}c=u+44|0;while(1){o=t[c>>2]|0;if(!o)break;a=t[j>>2]|0;if(!a){a=o;s=o}else{M5[a&63](t[fe>>2]|0,t[t[o>>2]>>2]|0);a=o;s=t[c>>2]|0}t[c>>2]=t[s+4>>2];t[o+4>>2]=t[U>>2];t[U>>2]=o;t[(t[a>>2]|0)+4>>2]=t[o+8>>2]}if(!(t[le>>2]|0)){oe=117;break e}break}case 10:{a=Z5[t[T>>2]&127](r,t[se>>2]|0)|0;if((a|0)<0){a=14;break e}s=t[$>>2]|0;if(s|0){v=t[fe>>2]|0;be=vo(a,ce)|0;V5[s&127](v,ce,be);break A}if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,t[ae>>2]|0);break}case 7:{a=t[$>>2]|0;if(a|0){i[ce>>0]=10;V5[a&127](t[fe>>2]|0,ce,1);break A}if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,c);break}case 8:{a=t[O>>2]|0;if(!a){if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,c)}else F5[a&127](t[fe>>2]|0);a=Yc(e,r,ae,n,f,l)|0;if(a|0)break e;if(!(t[ae>>2]|0)){oe=133;break e}break}case 6:{s=t[$>>2]|0;if(!s){if(!(t[ne>>2]|0))break A;vc(e,r,t[se>>2]|0,c);break A}if(!(i[Ae>>0]|0))a=c;else{be=t[se>>2]|0;V5[s&127](t[fe>>2]|0,be,a-be|0);break A}while(1){t[ce>>2]=t[re>>2];be=D5[t[ee>>2]&127](r,se,a,ce,t[ie>>2]|0)|0;t[_>>2]=t[se>>2];v=t[re>>2]|0;V5[s&127](t[fe>>2]|0,v,(t[ce>>2]|0)-v|0);if(be>>>0<2)break;t[te>>2]=t[se>>2];a=t[ae>>2]|0}break}case 11:{if(!(yc(e,r,t[se>>2]|0,c)|0)){a=1;break e}break}case 13:{if(!(Cc(e,r,t[se>>2]|0,c)|0)){a=1;break e}break}default:if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,c)}}while(0);be=t[ae>>2]|0;t[se>>2]=be;t[te>>2]=be;switch(t[m>>2]|0){case 2:{a=35;break e}case 3:{oe=160;break e}default:{}}}switch(oe|0){case 6:{if(l<<24>>24){t[f>>2]=t[se>>2];a=0;break}t[_>>2]=n;a=t[$>>2]|0;if(!a){if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,n)}else{i[ce>>0]=10;V5[a&127](t[fe>>2]|0,ce,1)}if(A)if((t[le>>2]|0)==(A|0)){t[f>>2]=n;a=0}else a=13;else a=3;break}case 15:{if(l<<24>>24){t[f>>2]=t[se>>2];a=0;break}if((A|0)>0)if((t[le>>2]|0)==(A|0)){t[f>>2]=t[se>>2];a=0}else a=13;else a=3;break}case 20:{t[te>>2]=a;a=4;break}case 21:{if(!(l<<24>>24))a=5;else{t[f>>2]=t[se>>2];a=0}break}case 23:{if(!(l<<24>>24))a=6;else{t[f>>2]=t[se>>2];a=0}break}case 56:break;case 58:break;case 63:{F5[t[e+20>>2]&127](a);a=1;oe=75;break}case 69:{a=1;oe=75;break}case 79:{zc(e,t[ce>>2]|0);oe=89;break}case 92:{a=Wc(e,t[ae>>2]|0,n,f)|0;break}case 96:{t[te>>2]=a;a=7;break}case 117:{a=Wc(e,t[ae>>2]|0,n,f)|0;break}case 133:{t[e+276>>2]=61;a=0;break}case 134:{if(l<<24>>24){t[f>>2]=t[se>>2];a=0;break}a=t[$>>2]|0;do{if(!a){if(t[ne>>2]|0)vc(e,r,t[se>>2]|0,n)}else if(!(i[Ae>>0]|0)){t[ce>>2]=t[re>>2];D5[t[ee>>2]&127](r,se,n,ce,t[ie>>2]|0)|0;be=t[re>>2]|0;V5[t[$>>2]&127](t[fe>>2]|0,be,(t[ce>>2]|0)-be|0);break}else{be=t[se>>2]|0;V5[a&127](t[fe>>2]|0,be,n-be|0);break}}while(0);if(!A){t[te>>2]=n;a=3;break}if((t[le>>2]|0)==(A|0)){t[f>>2]=n;a=0;break}else{t[te>>2]=n;a=13;break}}case 160:{t[f>>2]=t[ae>>2];a=0;break}}h=ue;return a|0}function Lc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;k=h;h=h+16|0;w=k;c=e+296|0;o=t[c>>2]|0;do{if(o){u=t[o+12>>2]|0;f=u+4|0;s=t[f>>2]|0;l=u+12|0;n=s+(t[l>>2]|0)|0;s=s+(t[u+8>>2]|0)|0;t[w>>2]=n;b=u+33|0;if(!(i[b>>0]|0))n=Gc(e,t[o+16>>2]|0,t[e+224>>2]|0,n,s,w,0)|0;else{v=e+224|0;d=t[v>>2]|0;d=Q5[t[d>>2]&127](d,n,s,w)|0;n=ic(e,t[v>>2]|0,n,s,d,t[w>>2]|0,w,0)|0}if(!n){n=t[w>>2]|0;if((s|0)!=(n|0)?(t[e+476>>2]|0)==3:0){t[l>>2]=n-(t[f>>2]|0);n=0;break}i[u+32>>0]=0;v=o+8|0;t[c>>2]=t[v>>2];n=e+300|0;t[v>>2]=t[n>>2];t[n>>2]=o;n=e+276|0;if(!(i[b>>0]|0)){t[n>>2]=58;n=Gc(e,(t[e+472>>2]|0)!=0&1,t[e+144>>2]|0,A,r,a,(i[e+480>>0]|0)==0&1)|0;break}else{t[n>>2]=57;v=e+144|0;n=t[v>>2]|0;n=Q5[t[n>>2]&127](n,A,r,w)|0;n=ic(e,t[v>>2]|0,A,r,n,t[w>>2]|0,a,(i[e+480>>0]|0)==0&1)|0;break}}}else n=23}while(0);h=k;return n|0}function Qc(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;u=k;o=t[e+352>>2]|0;f=o+156|0;b=e+412|0;w=e+424|0;e:do{if(!(t[f>>2]|0)){A=0;l=e+420|0;c=e+468|0;s=12}else{A=t[w>>2]|0;l=e+420|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break}A=t[w>>2]|0}t[w>>2]=A+1;i[A>>0]=61;n=e+468|0;r=(t[(t[f>>2]|0)+20>>2]|0)+(((i[n>>0]|0)!=0)<<31>>31)|0;a=0;while(1){if((a|0)>=(r|0)){A=1;c=n;s=12;break e}A=t[w>>2]|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0}c=i[(t[(t[f>>2]|0)+16>>2]|0)+a>>0]|0;t[w>>2]=A+1;i[A>>0]=c;a=a+1|0}}}while(0);e:do{if((s|0)==12){_s(u,o+60|0);A:while(1){do{r=qs(u)|0;if(!r)break A;f=r+4|0}while(!(t[f>>2]|0));if(A<<24>>24){A=t[w>>2]|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0}t[w>>2]=A+1;i[A>>0]=12}n=t[r>>2]|0;while(1){r=i[n>>0]|0;A=t[w>>2]|0;a=(A|0)==(t[l>>2]|0);if(!(r<<24>>24))break;if(a){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0;r=i[n>>0]|0}t[w>>2]=A+1;i[A>>0]=r;n=n+1|0}if(a){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0}t[w>>2]=A+1;i[A>>0]=61;a=(t[(t[f>>2]|0)+20>>2]|0)+(((i[c>>0]|0)!=0)<<31>>31)|0;r=0;while(1){if((r|0)>=(a|0)){A=1;continue A}A=t[w>>2]|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0}s=i[(t[(t[f>>2]|0)+16>>2]|0)+r>>0]|0;t[w>>2]=A+1;i[A>>0]=s;r=r+1|0}}_s(u,o);A:while(1){do{r=qs(u)|0;if(!r)break A}while(!(i[r+32>>0]|0));if(A<<24>>24){A=t[w>>2]|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0}t[w>>2]=A+1;i[A>>0]=12}a=t[r>>2]|0;while(1){r=i[a>>0]|0;if(!(r<<24>>24)){A=1;continue A}A=t[w>>2]|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break e}A=t[w>>2]|0;r=i[a>>0]|0}t[w>>2]=A+1;i[A>>0]=r;a=a+1|0}}A=t[w>>2]|0;if((A|0)==(t[l>>2]|0)){if(!((wc(b)|0)<<24>>24)){A=0;break}A=t[w>>2]|0}t[w>>2]=A+1;i[A>>0]=0;A=t[e+428>>2]|0}}while(0);h=k;return A|0}function Dc(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0;x=h;h=h+80|0;M=x+16|0;V=x;N=t[e+352>>2]|0;c=N+20|0;l=fc(e,c,t[a>>2]|0,0)|0;if(!l){l=Nc(N+80|0,t[a>>2]|0)|0;if((l|0)!=0?(s=fc(e,c,l,24)|0,(s|0)!=0):0)if((i[e+232>>0]|0)!=0?(Rc(e,s)|0)==0:0)l=1;else I=6;else l=1}else{s=l;I=6}e:do{if((I|0)==6){B=t[s+12>>2]|0;c=A+36|0;o=e+376|0;g=e+388|0;m=Q5[t[c>>2]&127](A,r,t[o>>2]|0,t[g>>2]|0)|0;l=m+B|0;u=t[o>>2]|0;if((l|0)>(u|0)){l=l+16|0;t[o>>2]=l;l=Z5[t[e+16>>2]&127](t[g>>2]|0,l<<4)|0;if(!l){t[o>>2]=u;l=1;break}t[g>>2]=l;if((m|0)>(u|0))Q5[t[c>>2]&127](A,r,m,l)|0}F=t[g>>2]|0;d=A+28|0;W=e+412|0;Y=e+428|0;E=s+20|0;k=e+424|0;v=0;w=0;c=0;while(1){if((w|0)>=(m|0))break;b=t[(t[g>>2]|0)+(w<<4)>>2]|0;b=oc(e,A,b,b+(Z5[t[d>>2]&127](A,b)|0)|0)|0;if(!b){l=1;break e}l=(t[b>>2]|0)+-1|0;if(i[l>>0]|0){I=15;break}i[l>>0]=1;r=v+1|0;t[F+(v<<2)>>2]=t[b>>2];u=t[g>>2]|0;if(i[u+(w<<4)+12>>0]|0){z=tc(W,A,t[u+(w<<4)+4>>2]|0,t[u+(w<<4)+8>>2]|0)|0;t[F+(r<<2)>>2]=z;if(!z){l=1;break e}}else{A:do{if(!(i[b+8>>0]|0))l=1;else{l=0;while(1){if((l|0)>=(B|0)){l=1;break A}o=t[E>>2]|0;if((b|0)==(t[o+(l*12|0)>>2]|0))break;l=l+1|0}l=i[o+(l*12|0)+4>>0]|0}}while(0);l=kc(e,A,l,t[u+(w<<4)+4>>2]|0,t[u+(w<<4)+8>>2]|0,W)|0;if(l|0)break e;t[F+(r<<2)>>2]=t[Y>>2]}t[Y>>2]=t[k>>2];l=t[b+4>>2]|0;do{if(l)if(i[b+9>>0]|0){l=xc(e,l,b,t[F+(r<<2)>>2]|0,f)|0;if(!l){l=v;break}else break e}else{i[(t[b>>2]|0)+-1>>0]=2;c=c+1|0;l=v+2|0;break}else l=v+2|0}while(0);v=l;w=w+1|0}if((I|0)==15){if((t[e+144>>2]|0)!=(A|0)){l=8;break}t[e+284>>2]=t[(t[g>>2]|0)+(w<<4)>>2];l=8;break}t[e+380>>2]=v;l=t[s+8>>2]|0;A:do{if((l|0)!=0?(p=t[l>>2]|0,(i[p+-1>>0]|0)!=0):0){l=0;while(1){if((l|0)>=(v|0)){r=0;w=c;z=v;break A}if((t[F+(l<<2)>>2]|0)==(p|0)){I=37;break A}l=l+2|0}}else{l=-1;I=37}}while(0);if((I|0)==37){t[e+384>>2]=l;r=0;w=c;z=v}while(1){if((r|0)>=(B|0))break;l=t[E>>2]|0;u=l+(r*12|0)|0;c=t[u>>2]|0;o=(t[c>>2]|0)+-1|0;A:do{if((i[o>>0]|0)==0?(y=l+(r*12|0)+8|0,C=t[y>>2]|0,(C|0)!=0):0){l=t[c+4>>2]|0;do{if(l)if(i[c+9>>0]|0){l=xc(e,l,c,C,f)|0;if(!l){l=w;c=z;break A}else break e}else{i[o>>0]=2;l=w+1|0;break}else{i[o>>0]=1;l=w}}while(0);t[F+(z<<2)>>2]=t[t[u>>2]>>2];t[F+(z+1<<2)>>2]=t[y>>2];c=z+2|0}else{l=w;c=z}}while(0);r=r+1|0;w=l;z=c}t[F+(z<<2)>>2]=0;A:do{if(!w)l=0;else{b=e+396|0;u=t[b>>2]|0;D=e+400|0;r=i[D>>0]|0;l=r&255;do{if(!(w<<1>>l)){l=1<>24}while((w>>(Q&255)|0)!=0);l=(l&255)>3?l:3;i[D>>0]=l;l=l&255;o=e+392|0;c=Z5[t[e+16>>2]&127](t[o>>2]|0,12<>0]=r;l=1;break e}else{t[o>>2]=c;c=1<>2]|0)+(Q*12|0)>>2]=-1;l=Q}}}while(0);Q=l+-1|0;t[b>>2]=Q;E=N+40|0;B=e+424|0;y=e+420|0;C=c+-1|0;I=0-c|0;Z=C>>>2;G=e+233|0;L=e+468|0;l=0;p=w;r:while(1){while(1){if((l|0)>=(z|0))break A;A=F+(l<<2)|0;u=t[A>>2]|0;r=u+-1|0;if((i[r>>0]|0)==2)break;i[r>>0]=0;l=l+2|0}Jc(e,V);Hc(M,V);i[r>>0]=0;r=fc(e,E,u,0)|0;if(!r){l=1;break}r=t[r+4>>2]|0;if(!r){l=1;break}m=t[r+4>>2]|0;if(!m){l=27;break}k=m+20|0;d=m+16|0;w=0;while(1){r=t[k>>2]|0;b=t[d>>2]|0;if((w|0)>=(r|0))break;b=i[b+w>>0]|0;r=t[B>>2]|0;if((r|0)==(t[y>>2]|0)){if(!((wc(W)|0)<<24>>24)){l=1;break r}r=t[B>>2]|0}t[B>>2]=r+1;i[r>>0]=b;w=w+1|0}Pc(M,b,r);do{g=u;u=u+1|0}while((i[g>>0]|0)!=58);Pc(M,u,Xc(u)|0);while(1){r=t[B>>2]|0;if((r|0)==(t[y>>2]|0)){if(!((wc(W)|0)<<24>>24)){l=1;break r}r=t[B>>2]|0}g=i[u>>0]|0;t[B>>2]=r+1;i[r>>0]=g;if(!(i[u>>0]|0))break;else u=u+1|0}g=Sc(M)|0;k=t[o>>2]|0;d=g&I;u=0;v=C&g;while(1){if((t[k+(v*12|0)>>2]|0)!=(Q|0))break;if((t[k+(v*12|0)+4>>2]|0)==(g|0)){r=t[k+(v*12|0)+8>>2]|0;b=t[Y>>2]|0;while(1){J=i[b>>0]|0;w=J<<24>>24==0;if(w|J<<24>>24!=(i[r>>0]|0))break;r=r+1|0;b=b+1|0}if(w){l=8;break r}}if(!(u<<24>>24))u=(d>>>((n[D>>0]|0)+-1|0)&Z|1)&255;J=u&255;v=v+((v|0)<(J|0)?c:0)-J|0}if(i[G>>0]|0){i[(t[B>>2]|0)+-1>>0]=i[L>>0]|0;r=t[t[m>>2]>>2]|0;while(1){u=t[B>>2]|0;if((u|0)==(t[y>>2]|0)){if(!((wc(W)|0)<<24>>24)){l=1;break r}u=t[B>>2]|0}J=i[r>>0]|0;t[B>>2]=u+1;i[u>>0]=J;if(!(i[r>>0]|0))break;else r=r+1|0}}J=t[Y>>2]|0;t[Y>>2]=t[B>>2];t[A>>2]=J;t[(t[o>>2]|0)+(v*12|0)>>2]=Q;t[(t[o>>2]|0)+(v*12|0)+4>>2]=g;t[(t[o>>2]|0)+(v*12|0)+8>>2]=J;p=p+-1|0;l=l+2|0;if(!p)break A}break e}}while(0);while(1){if((l|0)>=(z|0)){l=f;break}i[(t[F+(l<<2)>>2]|0)+-1>>0]=0;l=l+2|0}while(1){l=t[l>>2]|0;if(!l)break;i[(t[t[l+12>>2]>>2]|0)+-1>>0]=0;l=l+4|0}if(!(i[e+232>>0]|0))l=0;else{l=t[s+4>>2]|0;if(!l){l=t[N+156>>2]|0;if(!l){l=0;break}c=t[a>>2]|0}else{l=t[l+4>>2]|0;if(!l){l=27;break}s=t[a>>2]|0;while(1){c=s+1|0;if((i[s>>0]|0)==58)break;else s=c}}if((i[e+233>>0]|0)!=0?(R=t[t[l>>2]>>2]|0,(R|0)!=0):0){s=0;while(1){o=s+1|0;if(!(i[R+s>>0]|0))break;else s=o}}else o=0;t[a+4>>2]=c;w=l+20|0;t[a+16>>2]=t[w>>2];t[a+8>>2]=t[t[l>>2]>>2];t[a+20>>2]=o;k=0;while(1){d=k+1|0;if(!(i[c+k>>0]|0))break;else k=d}s=t[w>>2]|0;u=d+o+s|0;r=l+24|0;if((u|0)>(t[r>>2]|0)){s=u+24|0;b=I5[t[e+12>>2]&63](s)|0;if(!b){l=1;break}t[r>>2]=s;r=l+16|0;Q6(b|0,t[r>>2]|0,t[w>>2]|0)|0;s=e+360|0;while(1){s=t[s>>2]|0;if(!s)break;u=s+12|0;if((t[u>>2]|0)==(t[r>>2]|0))t[u>>2]=b}F5[t[e+20>>2]&127](t[r>>2]|0);t[r>>2]=b;u=b;s=t[w>>2]|0}else{u=l+16|0;r=u;u=t[u>>2]|0}s=u+s|0;Q6(s|0,c|0,d|0)|0;if(o|0){J=s+k|0;i[J>>0]=i[e+468>>0]|0;Q6(J+1|0,t[t[l>>2]>>2]|0,o|0)|0}t[a>>2]=t[r>>2];l=0}}}while(0);h=x;return l|0}function zc(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;i=e+104|0;a=e+372|0;r=e+4|0;while(1){if(!A)break;e=t[i>>2]|0;if(!e)e=A;else{M5[e&63](t[r>>2]|0,t[t[A>>2]>>2]|0);e=A}f=A+4|0;n=t[f>>2]|0;t[f>>2]=t[a>>2];t[a>>2]=A;t[(t[e>>2]|0)+4>>2]=t[A+8>>2];A=n}return}function Wc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;k=h;h=h+16|0;s=k;t[e+276>>2]=62;c=e+284|0;t[c>>2]=A;o=e+144|0;u=e+288|0;b=e+80|0;l=e+476|0;n=A;e:while(1){t[s>>2]=0;d=t[o>>2]|0;d=Q5[t[d>>2]&127](d,n,r,s)|0;A=t[s>>2]|0;t[u>>2]=A;f=A;switch(d|0){case-15:{w=3;break e}case-4:{w=7;break e}case 0:{w=12;break e}case-1:{w=13;break e}case-2:{w=15;break e}case 15:{if(t[b>>2]|0)vc(e,t[o>>2]|0,n,f);break}case 11:{if(!(yc(e,t[o>>2]|0,n,f)|0)){A=1;break e}break}case 13:{if(!(Cc(e,t[o>>2]|0,n,f)|0)){A=1;break e}break}default:{A=9;break e}}A=t[s>>2]|0;t[c>>2]=A;switch(t[l>>2]|0){case 2:{A=35;break e}case 3:{w=18;break e}default:{}}n=A}do{if((w|0)==3){if(t[b>>2]|0){vc(e,t[o>>2]|0,n,f);if((t[l>>2]|0)==2){A=35;break}A=t[s>>2]|0}t[a>>2]=A;A=0}else if((w|0)==7){t[a>>2]=n;A=0}else if((w|0)==12){t[c>>2]=A;A=4}else if((w|0)==13)if(!(i[e+480>>0]|0)){t[a>>2]=n;A=0}else A=5;else if((w|0)==15)if(!(i[e+480>>0]|0)){t[a>>2]=n;A=0}else A=6;else if((w|0)==18){t[a>>2]=A;A=0}}while(0);h=k;return A|0}function Yc(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0;Z=h;h=h+16|0;y=Z+8|0;C=Z+4|0;B=Z;l=t[r>>2]|0;t[y>>2]=l;if((t[e+144>>2]|0)==(A|0)){v=e+284|0;t[v>>2]=l;g=e+288|0}else{g=t[e+296>>2]|0;v=g;g=g+4|0}t[v>>2]=l;t[r>>2]=0;c=A+8|0;o=e+60|0;m=e+80|0;p=e+4|0;E=e+476|0;u=A+68|0;b=e+44|0;w=A+56|0;k=e+48|0;e:while(1){s=Q5[t[c>>2]&127](A,t[y>>2]|0,a,C)|0;l=t[C>>2]|0;t[g>>2]=l;d=l;A:do{switch(s|0){case 40:{I=6;break e}case 0:{I=23;break e}case-2:{I=24;break e}case-4:case-1:{I=26;break e}case 7:{l=t[o>>2]|0;if(l|0){i[B>>0]=10;V5[l&127](t[p>>2]|0,B,1);break A}if(t[m>>2]|0)vc(e,A,t[y>>2]|0,d);break}case 6:{s=t[o>>2]|0;if(!s){if(!(t[m>>2]|0))break A;vc(e,A,t[y>>2]|0,d);break A}if(!(i[u>>0]|0))l=d;else{d=t[y>>2]|0;V5[s&127](t[p>>2]|0,d,l-d|0);break A}while(1){t[B>>2]=t[b>>2];d=D5[t[w>>2]&127](A,y,l,B,t[k>>2]|0)|0;t[g>>2]=t[C>>2];l=t[b>>2]|0;V5[s&127](t[p>>2]|0,l,(t[B>>2]|0)-l|0);if(d>>>0<2)break;t[v>>2]=t[y>>2];l=t[C>>2]|0}break}default:{I=28;break e}}}while(0);d=t[C>>2]|0;t[y>>2]=d;t[v>>2]=d;switch(t[E>>2]|0){case 3:{I=30;break e}case 2:{l=35;break e}default:{}}}if((I|0)==6){l=t[e+76>>2]|0;if(!l){if(t[m>>2]|0)vc(e,A,t[y>>2]|0,d)}else F5[l&127](t[p>>2]|0);l=t[C>>2]|0;t[r>>2]=l;t[n>>2]=l;l=(t[E>>2]|0)==2?35:0}else if((I|0)==23){t[v>>2]=l;l=4}else if((I|0)==24)if(!(f<<24>>24))l=6;else{t[n>>2]=t[y>>2];l=0}else if((I|0)==26)if(!(f<<24>>24))l=20;else{t[n>>2]=t[y>>2];l=0}else if((I|0)==28){t[v>>2]=l;l=23}else if((I|0)==30){t[n>>2]=t[C>>2];l=0}h=Z;return l|0}function Fc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0;f=h;h=h+16|0;n=f;t[n>>2]=A;A=Yc(e,t[e+144>>2]|0,n,r,a,(i[e+480>>0]|0)==0&1)|0;n=t[n>>2]|0;do{if(!((A|0)!=0|(n|0)==0)){A=e+276|0;if(!(t[e+472>>2]|0)){t[A>>2]=58;A=sc(e,n,r,a)|0;break}else{t[A>>2]=63;A=Mc(e,n,r,a)|0;break}}}while(0);h=f;return A|0}function Mc(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;A=Gc(e,1,t[e+144>>2]|0,A,r,a,(i[e+480>>0]|0)==0&1)|0;if((A|0)==0?(Vc(e)|0)<<24>>24==0:0)A=1;return A|0}function Vc(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=e+16|0;e=e+360|0;while(1){e=t[e>>2]|0;if(!e){e=1;break}l=(t[e+24>>2]|0)+1|0;s=e+36|0;a=t[s>>2]|0;i=a+l|0;o=e+4|0;r=t[o>>2]|0;if((r|0)==(i|0)){e=1;break}c=e+8|0;A=t[c>>2]|0;n=A+l|0;f=e+40|0;if((n|0)>((t[f>>2]|0)-a|0)){i=Z5[t[u>>2]&127](a,n)|0;if(!i){e=0;break}A=e+12|0;a=t[s>>2]|0;if((t[A>>2]|0)==(a|0))t[A>>2]=i;A=e+16|0;r=t[A>>2]|0;if(r|0)t[A>>2]=i+(r-a);t[s>>2]=i;t[f>>2]=i+n;i=i+l|0;r=t[o>>2]|0;A=t[c>>2]|0}Q6(i|0,r|0,A|0)|0;t[o>>2]=i}return e|0}function Nc(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;a=e+12|0;n=e+8|0;while(1){r=t[a>>2]|0;if((r|0)==(t[n>>2]|0)){if(!((wc(e)|0)<<24>>24)){A=0;break}r=t[a>>2]|0}l=i[A>>0]|0;t[a>>2]=r+1;i[r>>0]=l;if(!(i[A>>0]|0)){f=6;break}else A=A+1|0}if((f|0)==6){l=e+16|0;A=t[l>>2]|0;t[l>>2]=t[a>>2]}return A|0}function Rc(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=t[e+352>>2]|0;s=b+80|0;c=b+92|0;o=b+88|0;u=b+60|0;b=b+96|0;l=A+4|0;f=t[A>>2]|0;e:while(1){switch(i[f>>0]|0){case 0:{r=1;break e}case 58:{n=t[A>>2]|0;while(1){r=t[c>>2]|0;a=(r|0)==(t[o>>2]|0);if((n|0)==(f|0))break;if(a){if(!((wc(s)|0)<<24>>24)){r=0;break e}r=t[c>>2]|0}a=i[n>>0]|0;t[c>>2]=r+1;i[r>>0]=a;n=n+1|0}if(a){if(!((wc(s)|0)<<24>>24)){r=0;break e}r=t[c>>2]|0}t[c>>2]=r+1;i[r>>0]=0;r=fc(e,u,t[b>>2]|0,8)|0;if(!r){r=0;break e}a=t[b>>2]|0;if((t[r>>2]|0)==(a|0))t[b>>2]=t[c>>2];else t[c>>2]=a;t[l>>2]=r;break}default:{}}f=f+1|0}return r|0}function xc(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0;c=i[a>>0]|0;l=t[A>>2]|0;f=(l|0)==0;do{if(!(c<<24>>24))if(f){u=0;s=11}else f=28;else if(((!f?(i[l>>0]|0)==120:0)?(i[l+1>>0]|0)==109:0)?(i[l+2>>0]|0)==108:0){f=i[l+3>>0]|0;if((f<<24>>24==110?(i[l+4>>0]|0)==115:0)?(i[l+5>>0]|0)==0:0){f=39;break}u=f<<24>>24==0&1;s=11}else{u=0;s=11}}while(0);e:do{if((s|0)==11){o=u<<24>>24!=0;f=1;l=1;b=0;while(1){s=l<<24>>24!=0;if(!(c<<24>>24))break;do{if(s){if((b|0)<=36?c<<24>>24==(i[142257+b>>0]|0):0)break;l=0}else l=0}while(0);do{if(!(o|f<<24>>24==0)){if((b|0)<=29?c<<24>>24==(i[142294+b>>0]|0):0)break;f=0}}while(0);c=b+1|0;b=c;c=i[a+c>>0]|0}if((u&255|0)!=(s&(b|0)==36&1|0)){f=o?38:40;break}if(!(f<<24>>24!=0&(b|0)==29)){h=e+468|0;b=b+((i[h>>0]|0)!=0&1)|0;f=e+372|0;s=t[f>>2]|0;do{if(!s){f=e+12|0;l=I5[t[f>>2]&63](28)|0;if(!l){f=1;break e}s=b+24|0;u=I5[t[f>>2]&63](s)|0;t[l+16>>2]=u;if(!u){F5[t[e+20>>2]&127](l);f=1;break e}else{t[l+24>>2]=s;s=l;break}}else{l=s+24|0;if((b|0)>(t[l>>2]|0)){c=s+16|0;o=b+24|0;u=Z5[t[e+16>>2]&127](t[c>>2]|0,o)|0;if(!u){f=1;break e}t[c>>2]=u;t[l>>2]=o}t[f>>2]=t[s+4>>2]}}while(0);t[s+20>>2]=b;l=s+16|0;Q6(t[l>>2]|0,a|0,b|0)|0;f=i[h>>0]|0;if(f<<24>>24)i[(t[l>>2]|0)+(b+-1)>>0]=f;t[s>>2]=A;t[s+12>>2]=r;l=A+4|0;t[s+8>>2]=t[l>>2];if((i[a>>0]|0)==0?((t[e+352>>2]|0)+152|0)==(A|0):0)f=0;else f=s;t[l>>2]=f;t[s+4>>2]=t[n>>2];t[n>>2]=s;if((r|0)!=0?(w=t[e+100>>2]|0,(w|0)!=0):0){V5[w&127](t[e+4>>2]|0,t[A>>2]|0,t[l>>2]|0?a:0);f=0}else f=0}else f=40}}while(0);return f|0}function Jc(e,A){e=e|0;A=A|0;var r=0;r=A;t[r>>2]=0;t[r+4>>2]=0;A=A+8|0;t[A>>2]=Uc(e)|0;t[A+4>>2]=0;return}function Hc(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=A;n=t[r+4>>2]^1936682341;i=e;t[i>>2]=t[r>>2]^1886610805;t[i+4>>2]=n;i=A+8|0;n=i;r=t[n+4>>2]^1685025377;a=e+8|0;t[a>>2]=t[n>>2]^1852075885;t[a+4>>2]=r;a=A;A=t[a+4>>2]^1819895653;r=e+16|0;t[r>>2]=t[a>>2]^1852142177;t[r+4>>2]=A;r=t[i+4>>2]^1952801890;A=e+24|0;t[A>>2]=t[i>>2]^2037671283;t[A+4>>2]=r;t[e+40>>2]=e+32;A=e+48|0;t[A>>2]=0;t[A+4>>2]=0;return}function Pc(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;b=A+r|0;h=e+40|0;w=e+40|0;k=e+32|0;d=e+33|0;v=e+34|0;g=e+35|0;f=e+36|0;l=e+37|0;s=e+38|0;c=e+39|0;o=e+24|0;u=e+48|0;r=A;do{while(1){a=t[h>>2]|0;if(r>>>0>=b>>>0){A=0;break}if(a>>>0>=w>>>0){A=1;break}A=i[r>>0]|0;t[h>>2]=a+1;i[a>>0]=A;r=r+1|0}if(a>>>0>>0)break;C=n[k>>0]|0;I=C6(n[d>>0]|0|0,0,8)|0;a=G;y=C6(n[v>>0]|0|0,0,16)|0;a=a|G;E=C6(n[g>>0]|0|0,0,24)|0;a=a|G|(n[f>>0]|0);m=C6(n[l>>0]|0|0,0,40)|0;a=a|G;B=C6(n[s>>0]|0|0,0,48)|0;a=a|G;p=C6(n[c>>0]|0|0,0,56)|0;p=I|C|y|E|m|B|p;a=a|G;B=o;m=a^t[B+4>>2];E=o;t[E>>2]=p^t[B>>2];t[E+4>>2]=m;jc(e,2);E=e;a=t[E+4>>2]^a;m=e;t[m>>2]=t[E>>2]^p;t[m+4>>2]=a;t[h>>2]=k;m=u;m=d6(t[m>>2]|0,t[m+4>>2]|0,8,0)|0;a=u;t[a>>2]=m;t[a+4>>2]=G}while(A);return}function Xc(e){e=e|0;var A=0;A=0;while(1){if(!(i[e>>0]|0))break;A=A+1|0;e=e+1|0}return A|0}function Sc(e){e=e|0;var A=0,r=0,i=0,a=0,f=0,l=0;i=e+32|0;f=(t[e+40>>2]|0)-i|0;r=e+48|0;r=d6(t[r>>2]|0,t[r+4>>2]|0,f|0,0)|0;r=C6(r|0,G|0,56)|0;A=G;switch(f<<24>>24|0){case 7:{r=C6(n[e+38>>0]|0|0,0,48)|0|r;A=G|A;a=3;break}case 6:{a=3;break}case 5:{a=4;break}case 4:{a=5;break}case 3:{a=6;break}case 2:{a=7;break}case 1:{a=8;break}default:{}}if((a|0)==3){f=C6(n[e+37>>0]|0|0,0,40)|0;r=f|r;A=G|A;a=4}if((a|0)==4){A=n[e+36>>0]|0|A;a=5}if((a|0)==5){f=C6(n[e+35>>0]|0|0,0,24)|0;r=f|r;A=G|A;a=6}if((a|0)==6){f=C6(n[e+34>>0]|0|0,0,16)|0;r=f|r;A=G|A;a=7}if((a|0)==7){f=C6(n[e+33>>0]|0|0,0,8)|0;A=G|A;r=f|r;a=8}if((a|0)==8)r=r|(n[i>>0]|0);f=e+24|0;l=f;a=t[l+4>>2]^A;i=f;t[i>>2]=t[l>>2]^r;t[i+4>>2]=a;jc(e,2);i=e;A=t[i+4>>2]^A;a=e;t[a>>2]=t[i>>2]^r;t[a+4>>2]=A;a=e+16|0;A=a;r=t[A+4>>2]|0;i=a;t[i>>2]=t[A>>2]^255;t[i+4>>2]=r;jc(e,4);i=e;e=e+8|0;G=t[e+4>>2]^t[i+4>>2]^t[a+4>>2]^t[f+4>>2];return t[e>>2]^t[i>>2]^t[a>>2]^t[f>>2]|0}function jc(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;i=e+8|0;a=e+24|0;n=e+16|0;r=0;while(1){if((r|0)>=(A|0))break;f=i;b=t[f>>2]|0;f=t[f+4>>2]|0;h=e;h=d6(t[h>>2]|0,t[h+4>>2]|0,b|0,f|0)|0;c=G;u=C6(b|0,f|0,13)|0;o=G;f=y6(b|0,f|0,51)|0;f=(u|f)^h;o=(o|G)^c;u=a;b=t[u>>2]|0;u=t[u+4>>2]|0;s=n;s=d6(t[s>>2]|0,t[s+4>>2]|0,b|0,u|0)|0;l=G;k=C6(b|0,u|0,16)|0;w=G;u=y6(b|0,u|0,48)|0;u=(k|u)^s;w=(w|G)^l;h=d6(c|0,h|0,u|0,w|0)|0;c=G;k=e;t[k>>2]=h;t[k+4>>2]=c;k=C6(u|0,w|0,21)|0;b=G;w=y6(u|0,w|0,43)|0;u=a;t[u>>2]=(k|w)^h;t[u+4>>2]=(b|G)^c;l=d6(s|0,l|0,f|0,o|0)|0;s=G;u=C6(f|0,o|0,17)|0;c=G;o=y6(f|0,o|0,47)|0;f=i;t[f>>2]=(u|o)^l;t[f+4>>2]=(c|G)^s;f=n;t[f>>2]=s;t[f+4>>2]=l;r=r+1|0}return}function Uc(e){e=e|0;var A=0;while(1){A=t[e+472>>2]|0;if(!A)break;else e=A}return t[e+492>>2]|0}function Tc(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0;V=h;h=h+16|0;Y=V;F=V+4|0;M=t[e+352>>2]|0;b=A+16|0;w=A+40|0;k=e+144|0;d=e+284|0;v=r<<24>>24==0;g=f+12|0;p=f+16|0;E=f+8|0;B=A+44|0;y=A+64|0;C=e+436|0;I=e+452|0;Z=e+448|0;G=(M+80|0)==(f|0);L=e+268|0;Q=M+130|0;D=M+129|0;z=e+296|0;W=e+224|0;l=0;e:while(1){A:while(1){switch(Q5[t[b>>2]&127](A,a,n,Y)|0){case-4:{l=0;u=61;break e}case 0:{u=4;break e}case-1:{u=6;break e}case 6:{u=21;break A}case-3:{u=22;break A}case 7:case 39:{u=23;break A}case 10:{s=Z5[t[w>>2]&127](A,a)|0;r:do{if((s|0)<0)if((t[k>>2]|0)==(A|0)){t[d>>2]=a;s=1;l=14}else{s=1;l=14}else{if(v&(s|0)==32){c=t[g>>2]|0;if((t[p>>2]|0)==(c|0)){s=4;break}if((i[c+-1>>0]|0)==32){s=4;break}}o=vo(s,F)|0;c=0;while(1){if((c|0)>=(o|0)){s=0;break r}s=t[g>>2]|0;if((s|0)==(t[E>>2]|0)){if(!((wc(f)|0)<<24>>24)){s=1;l=1;break r}s=t[g>>2]|0}N=i[F+c>>0]|0;t[g>>2]=s+1;i[s>>0]=N;c=c+1|0}}}while(0);switch(s&7){case 4:case 0:break A;default:{}}break}case 9:{s=t[y>>2]|0;s=(L5[t[B>>2]&63](A,a+s|0,(t[Y>>2]|0)+(0-s)|0)|0)&255;if(s<<24>>24){u=31;break A}s=t[y>>2]|0;s=tc(C,A,a+s|0,(t[Y>>2]|0)+(0-s)|0)|0;if(!s){l=1;u=61;break e}o=fc(e,M,s,0)|0;t[Z>>2]=t[I>>2];do{if(G){if(!(t[L>>2]|0))if(!o)break A;else break;if(!(i[Q>>0]|0)){s=(o|0)!=0;if(!(i[D>>0]|0)){u=45;break}else{m=s;u=47;break}}else{s=(o|0)!=0;if(!(t[z>>2]|0)){u=45;break}else{m=s;u=47;break}}}else if(!(i[D>>0]|0))if(!o){l=11;u=61;break e}else{u=46;break}else{s=(o|0)!=0;if(!(i[Q>>0]|0)){m=s;u=47;break}else{u=45;break}}}while(0);if((u|0)==45)if(s)u=46;else{l=11;u=61;break e}else if((u|0)==47?(u=0,!m):0)break A;if((u|0)==46?(u=0,(i[o+34>>0]|0)==0):0){l=24;u=61;break e}c=o+32|0;if(i[c>>0]|0){u=49;break e}if(t[o+28>>2]|0){u=52;break e}s=t[o+4>>2]|0;if(!s){u=55;break e}o=s+(t[o+8>>2]|0)|0;i[c>>0]=1;o=Tc(e,t[W>>2]|0,r,s,o,f)|0;i[c>>0]=0;s=(o|0)==0;if(s)break A;else{s=(s^1)&1;l=o}break}default:{u=58;break e}}if(s)break e}if((u|0)==21){u=0;if(!(bc(f,A,a,t[Y>>2]|0)|0)){l=1;u=61;break}}else if((u|0)==22){t[Y>>2]=a+(t[y>>2]|0);u=23}else if((u|0)==31){u=0;a=t[g>>2]|0;if((a|0)==(t[E>>2]|0)){if(!((wc(f)|0)<<24>>24)){l=1;u=61;break}a=t[g>>2]|0}t[g>>2]=a+1;i[a>>0]=s}do{if((u|0)==23){u=0;a=t[g>>2]|0;if(v){if((t[p>>2]|0)==(a|0))break;if((i[a+-1>>0]|0)==32)break}if((a|0)==(t[E>>2]|0)){if(!((wc(f)|0)<<24>>24)){l=1;u=61;break e}a=t[g>>2]|0}t[g>>2]=a+1;i[a>>0]=32}}while(0);a=t[Y>>2]|0}if((u|0)==4)if((t[k>>2]|0)==(A|0)){t[d>>2]=t[Y>>2];l=4;u=61}else{l=4;u=61}else if((u|0)==6)if((t[k>>2]|0)==(A|0)){t[d>>2]=a;l=4;u=61}else{l=4;u=61}else if((u|0)==49)if((t[k>>2]|0)==(A|0)){t[d>>2]=a;l=12;u=61}else{l=12;u=61}else if((u|0)==52)if((t[k>>2]|0)==(A|0)){t[d>>2]=a;l=15;u=61}else{l=15;u=61}else if((u|0)==55)if((t[k>>2]|0)==(A|0)){t[d>>2]=a;l=16;u=61}else{l=16;u=61}else if((u|0)==58)if((t[k>>2]|0)==(A|0)){t[d>>2]=a;l=23;u=61}else{l=23;u=61}h=V;return l|0}function Oc(e){e=e|0;var A=0;A=e+8|0;return((e|0)<1?0:(A|0)>0?A:0)|0}function _c(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+80|0;i=r+16|0;a=r;Jc(e,a);Hc(i,a);Pc(i,A,Xc(A)|0);A=Sc(i)|0;h=r;return A|0}function qc(e,A){e=e|0;A=A|0;var r=0;while(1){r=i[e>>0]|0;if(r<<24>>24!=(i[A>>0]|0)){A=0;break}if(!(r<<24>>24)){A=1;break}A=A+1|0;e=e+1|0}return A|0}function Kc(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+1040|0;l=c;a=t[e+124>>2]|0;e:do{if(!a)r=18;else{r=0;while(1){if((r|0)==256)break;t[l+(r<<2)>>2]=-1;r=r+1|0}n=l+1028|0;t[n>>2]=0;s=l+1024|0;t[s>>2]=0;f=l+1032|0;t[f>>2]=0;do{if(L5[a&63](t[e+244>>2]|0,A,l)|0){a=t[e+12>>2]|0;r=go()|0;r=I5[a&63](r)|0;t[e+236>>2]=r;if(!r){r=t[f>>2]|0;if(!r)r=1;else{F5[r&127](t[s>>2]|0);r=1}}else{r=Q5[(i[e+232>>0]<<24>>24?65:64)&127](r,l,t[n>>2]|0,t[s>>2]|0)|0;if(!r)break;t[e+240>>2]=t[s>>2];t[e+248>>2]=t[f>>2];t[e+144>>2]=r;r=0}break e}}while(0);r=t[f>>2]|0;if(r|0)F5[r&127](t[s>>2]|0);r=18}}while(0);h=c;return r|0}function $c(e,A){e=e|0;A=A|0;i[e+4>>0]=0;t[e+8>>2]=0;t[e+12>>2]=0;t[e>>2]=0;t[e+16>>2]=A;return}function eo(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0;o=t[e+352>>2]|0;u=e+424|0;b=e+420|0;h=e+412|0;w=e+428|0;k=o+152|0;d=e+368|0;s=o+60|0;c=o+80|0;e:while(1){f=A;A:while(1){if(!(i[A>>0]|0)){A=1;break e}a=i[f>>0]|0;switch(a<<24>>24){case 0:case 12:{v=5;break A}case 61:break A;default:{}}r=t[u>>2]|0;if((r|0)==(t[b>>2]|0)){if(!((wc(h)|0)<<24>>24)){A=0;break e}r=t[u>>2]|0;a=i[f>>0]|0}t[u>>2]=r+1;i[r>>0]=a;f=f+1|0}if((v|0)==5){v=0;A=t[u>>2]|0;if((A|0)==(t[b>>2]|0)){if(!((wc(h)|0)<<24>>24)){A=0;break}A=t[u>>2]|0}t[u>>2]=A+1;i[A>>0]=0;A=fc(e,o,t[w>>2]|0,0)|0;if(A|0)i[A+32>>0]=1;A=(i[f>>0]|0)==0?f:f+1|0;t[u>>2]=t[w>>2];continue}A=t[u>>2]|0;if((t[w>>2]|0)==(A|0))a=k;else{if((A|0)==(t[b>>2]|0)){if(!((wc(h)|0)<<24>>24)){A=0;break}A=t[u>>2]|0}t[u>>2]=A+1;i[A>>0]=0;a=fc(e,s,t[w>>2]|0,8)|0;if(!a){A=0;break}r=t[a>>2]|0;l=t[w>>2]|0;A=l;if((r|0)==(l|0)){l=Nc(c,r)|0;t[a>>2]=l;if(!l){A=0;break}A=t[w>>2]|0}t[u>>2]=A}A:while(1){l=f+1|0;r=i[l>>0]|0;n=(A|0)==(t[b>>2]|0);switch(r<<24>>24){case 0:case 12:break A;default:{}}if(n){if(!((wc(h)|0)<<24>>24)){A=0;break e}A=t[u>>2]|0;r=i[l>>0]|0}t[u>>2]=A+1;i[A>>0]=r;f=l;A=t[u>>2]|0}if(n){if(!((wc(h)|0)<<24>>24)){A=0;break}A=t[u>>2]|0}t[u>>2]=A+1;i[A>>0]=0;if(xc(e,a,0,t[w>>2]|0,d)|0){A=0;break}t[u>>2]=t[w>>2];A=(i[l>>0]|0)==0?l:f+2|0}return A|0}function Ao(e,A){e=e|0;A=A|0;var r=0,i=0;if(e|0?(r=e+4|0,i=(t[r>>2]|0)==(t[e>>2]|0),t[e>>2]=A,i):0)t[r>>2]=A;return}function ro(e,A,r){e=e|0;A=A|0;r=r|0;if(e|0){t[e+52>>2]=A;t[e+56>>2]=r}return}function io(e,A){e=e|0;A=A|0;if(e|0)t[e+60>>2]=A;return}function ao(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0;n=(e|0)==0;e:do{if(!(n|(r|0)<0)?!((A|0)==0&(r|0)!=0):0){f=e+476|0;switch(t[f>>2]|0){case 3:{t[e+280>>2]=33;n=0;break e}case 2:{t[e+280>>2]=36;n=0;break e}case 0:{if((t[e+472>>2]|0)==0?(to(e)|0)<<24>>24==0:0){t[e+280>>2]=1;n=0;break e}break}default:{}}t[f>>2]=1;if(r|0){n=fo(e,r)|0;if(!n){n=0;break}Q6(n|0,A|0,r|0)|0;n=lo(e,r,a)|0;break}i[e+480>>0]=a;if(!a)n=1;else{n=e+24|0;s=t[n>>2]|0;A=e+292|0;t[A>>2]=s;a=t[e+28>>2]|0;t[e+40>>2]=a;r=e+276|0;a=Q5[t[r>>2]&127](e,s,a,n)|0;t[e+280>>2]=a;if(a|0){t[e+288>>2]=t[e+284>>2];t[r>>2]=66;n=0;break}switch(t[f>>2]|0){case 3:{s=t[e+144>>2]|0;R5[t[s+48>>2]&31](s,t[A>>2]|0,t[n>>2]|0,e+404|0);t[A>>2]=t[n>>2];n=2;break e}case 1:case 0:{t[f>>2]=2;n=1;break e}default:{n=1;break e}}}}else l=3}while(0);if((l|0)==3)if(n)n=0;else{t[e+280>>2]=41;n=0}return n|0}function to(e){e=e|0;var A=0;A=e+492|0;if(!(t[A>>2]|0))t[A>>2]=so()|0;if(!(i[e+232>>0]|0))e=1;else e=eo(e,142324)|0;return e|0}function no(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return t[e+280>>2]|0}function fo(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;e:do{if(!e)r=0;else{if((A|0)<0){t[e+280>>2]=1;r=0;break}switch(t[e+476>>2]|0){case 3:{t[e+280>>2]=33;r=0;break e}case 2:{t[e+280>>2]=36;r=0;break e}default:{u=e+32|0;s=t[u>>2]|0;b=e+28|0;i=t[b>>2]|0;r=i;if((s-i|0)>=(A|0))break e;w=e+24|0;c=t[w>>2]|0;l=i-c|0;i=l+A|0;if((i|0)<0){t[e+280>>2]=1;r=0;break e}o=e+8|0;a=t[o>>2]|0;k=a;n=c-k|0;f=(n|0)>1024;A=f?1024:n;i=A+i|0;do{if((i|0)>(s-k|0)){r=s-c|0;r=(r|0)==0?1024:r;do{r=r<<1}while((r|0)<(i|0)&(r|0)>0);if((r|0)<1){t[e+280>>2]=1;r=0;break e}i=I5[t[e+12>>2]&63](r)|0;if(!i){t[e+280>>2]=1;r=0;break e}t[u>>2]=i+r;r=t[w>>2]|0;if(!r){r=i+(t[b>>2]|0)|0;t[b>>2]=r;t[o>>2]=i;h=22;break}else{k=r;h=k-(t[o>>2]|0)|0;h=(h|0)<1024?h:1024;Q6(i|0,r+(0-h)|0,(t[b>>2]|0)-k+h|0)|0;F5[t[e+20>>2]&127](t[o>>2]|0);t[o>>2]=i;r=i+((t[b>>2]|0)-(t[w>>2]|0))+h|0;t[b>>2]=r;i=i+h|0;h=22;break}}else if(f){i=n-A|0;D6(a|0,a+i|0,A+l|0)|0;i=0-i|0;r=(t[b>>2]|0)+i|0;t[b>>2]=r;i=(t[w>>2]|0)+i|0;h=22}}while(0);if((h|0)==22)t[w>>2]=i;t[e+288>>2]=0;t[e+284>>2]=0;t[e+292>>2]=0;break e}}}}while(0);return r|0}function lo(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0;e:do{if(!e)A=0;else{a=e+476|0;switch(t[a>>2]|0){case 3:{t[e+280>>2]=33;A=0;break e}case 2:{t[e+280>>2]=36;A=0;break e}case 0:{if((t[e+472>>2]|0)==0?(to(e)|0)<<24>>24==0:0){t[e+280>>2]=1;A=0;break e}break}default:{}}t[a>>2]=1;n=e+24|0;s=t[n>>2]|0;f=e+292|0;t[f>>2]=s;c=e+28|0;l=(t[c>>2]|0)+A|0;t[c>>2]=l;t[e+40>>2]=l;c=e+36|0;t[c>>2]=(t[c>>2]|0)+A;i[e+480>>0]=r;A=e+276|0;l=Q5[t[A>>2]&127](e,s,l,n)|0;t[e+280>>2]=l;if(l|0){t[e+288>>2]=t[e+284>>2];t[A>>2]=66;A=0;break}switch(t[a>>2]|0){case 3:{A=2;break}case 1:case 0:{if(!r)A=1;else{t[a>>2]=2;A=1;break e}break}default:A=1}c=t[e+144>>2]|0;R5[t[c+48>>2]&31](c,t[f>>2]|0,t[n>>2]|0,e+404|0);t[f>>2]=t[n>>2]}}while(0);return A|0}function so(){var e=0,A=0,r=0;A=h;h=h+16|0;e=A;if(!(co(e)|0)){r=uo()|0;r=(D3()|0)^r;t[e>>2]=r;e=oo(142378,P(r,2147483647)|0)|0}else e=oo(142365,t[e>>2]|0)|0;h=A;return e|0}function co(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=h;h=h+16|0;i=T2(142365,0,a)|0;if((i|0)<0)A=0;else{A=0;while(1){n=Q3(i,e+A|0,4-A|0)|0;r=n+A|0;if((n|0)>0)if(r>>>0<4)A=r;else{A=1;break}if((t[(R2()|0)>>2]|0)!=4){A=0;break}}U4(i)|0}h=a;return A|0}function oo(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=h;h=h+16|0;i=a;r=Te(142443)|0;if(r|0?(e1(r,142463)|0)==0:0){r=t[15712]|0;t[i>>2]=e;t[i+4>>2]=8;t[i+8>>2]=A;t[i+12>>2]=4;a3(r,142465,i)|0}h=a;return A|0}function uo(){var e=0,A=0;A=h;h=h+16|0;e=A;if(!(Oe(e|0,0)|0)){h=A;return t[e+4>>2]|0}else ge(142390,142412,819,142423);return 0}function bo(e){e=e|0;if(!e)e=41;else e=t[e+280>>2]|0;return e|0}function ho(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if(!e)e=0;else{A=e+284|0;r=t[A>>2]|0;if(r|0?(i=e+292|0,a=t[i>>2]|0,r>>>0>=a>>>0):0){n=t[e+144>>2]|0;R5[t[n+48>>2]&31](n,a,r,e+404|0);t[i>>2]=t[A>>2]}e=(t[e+404>>2]|0)+1|0}return e|0}function wo(e){e=e|0;do{switch(e|0){case 41:{e=142502;break}case 1:{e=143774;break}case 2:{e=143761;break}case 3:{e=143744;break}case 4:{e=143712;break}case 5:{e=143697;break}case 6:{e=143679;break}case 7:{e=143664;break}case 8:{e=143644;break}case 9:{e=143616;break}case 10:{e=143581;break}case 11:{e=143564;break}case 12:{e=143537;break}case 13:{e=143517;break}case 14:{e=143479;break}case 15:{e=143452;break}case 16:{e=143410;break}case 17:{e=143363;break}case 18:{e=143346;break}case 19:{e=143295;break}case 20:{e=143272;break}case 21:{e=143226;break}case 22:{e=143199;break}case 23:{e=143148;break}case 24:{e=143112;break}case 25:{e=143060;break}case 26:{e=143015;break}case 27:{e=143e3;break}case 28:{e=142974;break}case 29:{e=142936;break}case 30:{e=142904;break}case 31:{e=142871;break}case 32:{e=142837;break}case 33:{e=142820;break}case 34:{e=142799;break}case 35:{e=142783;break}case 36:{e=142766;break}case 37:{e=142722;break}case 38:{e=142642;break}case 39:{e=142583;break}case 40:{e=142519;break}default:e=0}}while(0);return e|0}function ko(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,f=0,l=0;r=t[A>>2]|0;i=0;e:while(1){if(r>>>0<=e>>>0)break;f=r+-1|0;a=n[f>>0]|0;do{if((a&248|0)==240)if((i+1|0)>>>0>3){l=5;break e}else i=0;else{if((a&240|0)==224)if((i+1|0)>>>0>2){l=8;break e}else{i=0;break}if((a&224|0)==192)if((i+1|0)>>>0>1){l=11;break e}else{i=0;break}else if(!(a&128))break e;else break}}while(0);r=f;i=i+1|0}if((l|0)==5)r=r+3|0;else if((l|0)==8)r=r+2|0;else if((l|0)==11)r=r+1|0;t[A>>2]=r;return}function vo(e,A){e=e|0;A=A|0;do{if((e|0)>=0){if((e|0)<128){i[A>>0]=e;e=1;break}if((e|0)<2048){i[A>>0]=e>>>6|192;i[A+1>>0]=e&63|128;e=2;break}if((e|0)<65536){i[A>>0]=e>>>12|224;i[A+1>>0]=e>>>6&63|128;i[A+2>>0]=e&63|128;e=3;break}if((e|0)<1114112){i[A>>0]=e>>>18|240;i[A+1>>0]=e>>>12&63|128;i[A+2>>0]=e>>>6&63|128;i[A+3>>0]=e&63|128;e=4}else e=0}else e=0}while(0);return e|0}function go(){return 1908}function mo(e,A,r,f){e=e|0;A=A|0;r=r|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;l=0;while(1){if((l|0)==364){l=0;break}i[e+l>>0]=i[56576+l>>0]|0;l=l+1|0}e:while(1){if((l|0)>=128){s=5;break}switch(i[56648+l>>0]|0){case 0:case 28:break;default:if((t[A+(l<<2)>>2]|0)!=(l|0)){e=0;break e}}l=l+1|0}e:do{if((s|0)==5){k=e+72|0;u=e+372|0;b=e+884|0;h=(r|0)==0;o=0;while(1){if((o|0)>=256)break;w=t[A+(o<<2)>>2]|0;do{if((w|0)==-1){i[k+o>>0]=1;a[u+(o<<1)>>1]=-1;i[b+(o<<2)>>0]=1;i[b+(o<<2)+1>>0]=0}else{if((w|0)<0){if(h|(w|0)<-4){e=0;break e}i[k+o>>0]=3-w;i[b+(o<<2)>>0]=0;a[u+(o<<1)>>1]=0;break}if((w|0)<128){l=i[56648+w>>0]|0;switch(l<<24>>24){case 0:case 28:break;default:if((w|0)!=(o|0)){e=0;break e}}i[k+o>>0]=l;i[b+(o<<2)>>0]=1;i[b+(o<<2)+1>>0]=w;a[u+(o<<1)>>1]=(w|0)==0?-1:w&65535;break}if((po(w)|0)<0){i[k+o>>0]=0;a[u+(o<<1)>>1]=-1;i[b+(o<<2)>>0]=1;i[b+(o<<2)+1>>0]=0;break}if((w|0)>65535){e=0;break e}l=w>>>8;s=w>>>5&7;c=1<<(w&31);if(!(t[56940+((n[143788+l>>0]<<3|s)<<2)>>2]&c))i[k+o>>0]=t[56940+((n[144044+l>>0]<<3|s)<<2)>>2]&c|0?26:28;else i[k+o>>0]=22;i[b+(o<<2)>>0]=vo(w,b+(o<<2)+1|0)|0;a[u+(o<<1)>>1]=w}}while(0);o=o+1|0}t[e+368>>2]=f;t[e+364>>2]=r;if(!h){t[e+328>>2]=108;t[e+332>>2]=108;t[e+336>>2]=108;t[e+340>>2]=109;t[e+344>>2]=109;t[e+348>>2]=109;t[e+352>>2]=110;t[e+356>>2]=110;t[e+360>>2]=110}t[e+56>>2]=13;t[e+60>>2]=14}}while(0);return e|0}function po(e){e=e|0;var A=0;switch(e>>8|0){case 223:case 222:case 221:case 220:case 219:case 218:case 217:case 216:{e=-1;break}case 0:{if(!(i[56648+e>>0]|0))e=-1;else A=4;break}case 255:{if((e|1|0)==65535)e=-1;else A=4;break}default:A=4}return e|0}function Eo(e,A){e=e|0;A=A|0;e=Z5[t[e+364>>2]&127](t[e+368>>2]|0,A)|0;if(e>>>0>65535)e=0;else e=t[56940+(((n[144044+(e>>>8)>>0]|0)<<3|e>>>5&7)<<2)>>2]&1<<(e&31);return e|0}function Bo(e,A){e=e|0;A=A|0;e=Z5[t[e+364>>2]&127](t[e+368>>2]|0,A)|0;if(e>>>0>65535)e=0;else e=t[56940+(((n[143788+(e>>>8)>>0]|0)<<3|e>>>5&7)<<2)>>2]&1<<(e&31);return e|0}function yo(e,A){e=e|0;A=A|0;e=Z5[t[e+364>>2]&127](t[e+368>>2]|0,A)|0;if(e>>>0>65535)e=1;else e=(po(e)|0)>>>31;return e|0}function Co(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;k=h;h=h+16|0;o=k;u=e+364|0;b=e+884|0;w=e+368|0;c=e+72|0;while(1){l=t[A>>2]|0;if((l|0)==(r|0)){f=0;break}d=n[l>>0]|0;s=b+(d<<2)+1|0;d=i[b+(d<<2)>>0]|0;e=d<<24>>24;if(!(d<<24>>24)){e=vo(Z5[t[u>>2]&127](t[w>>2]|0,l)|0,o)|0;if((e|0)>(f-(t[a>>2]|0)|0)){f=2;break}l=t[A>>2]|0;s=o;l=l+((n[c+(n[l>>0]|0)>>0]|0)+-3)|0}else{if((f-(t[a>>2]|0)|0)<(e|0)){f=2;break}l=l+1|0}t[A>>2]=l;Q6(t[a>>2]|0,s|0,e|0)|0;t[a>>2]=(t[a>>2]|0)+e}h=k;return f|0}function Io(e,A,r,i,f){e=e|0;A=A|0;r=r|0;i=i|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0;u=e+372|0;b=e+364|0;h=e+368|0;o=e+72|0;while(1){c=t[A>>2]|0;e=c>>>0>>0;l=t[i>>2]|0;if(!(e&l>>>0>>0))break;e=a[u+((n[c>>0]|0)<<1)>>1]|0;if(!(e<<16>>16)){e=(Z5[t[b>>2]&127](t[h>>2]|0,c)|0)&65535;l=t[A>>2]|0;s=(n[o+(n[l>>0]|0)>>0]|0)+-3|0}else{s=1;l=c}t[A>>2]=l+s;c=t[i>>2]|0;t[i>>2]=c+2;a[c>>1]=e}return((l|0)!=(f|0)|e^1?0:2)|0}function Zo(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0;e:do{if(A>>>0>>0){b=e+72|0;do{switch(i[b+(n[A>>0]|0)>>0]|0){case 12:{f=JK(12,e,A+1|0,r,a)|0;break e}case 13:{f=JK(13,e,A+1|0,r,a)|0;break e}case 2:{f=A+1|0;if((r-f|0)<=0){f=-1;break e}switch(i[b+(n[f>>0]|0)>>0]|0){case 16:{f=HK(e,A+2|0,r,a)|0;break e}case 15:{f=VK(e,A+2|0,r,a)|0;break e}case 7:case 6:case 5:case 29:case 24:case 22:{t[a>>2]=A;f=29;break e}default:{t[a>>2]=f;f=0;break e}}}case 9:{if((A+1|0)==(r|0)){t[a>>2]=r;f=-15;break e}else c=3;break}case 10:case 21:{c=3;break}case 30:{f=DK(e,A+1|0,r,a)|0;break e}case 35:{t[a>>2]=A+1;f=38;break e}case 20:{t[a>>2]=A+1;f=25;break e}case 4:{l=A+1|0;f=r-l|0;if((f|0)<=0){f=-26;break e}if((i[l>>0]|0)==93){if((f|0)<=1){f=-1;break e}if((i[A+2>>0]|0)==62){t[a>>2]=A+3;f=34;break e}}t[a>>2]=l;f=26;break e}case 31:{t[a>>2]=A+1;f=23;break e}case 32:{f=A+1|0;if((r-f|0)<=0){f=-24;break e}switch(i[b+(n[f>>0]|0)>>0]|0){case 33:{t[a>>2]=A+2;f=36;break e}case 15:{t[a>>2]=A+2;f=35;break e}case 34:{t[a>>2]=A+2;f=37;break e}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{t[a>>2]=f;f=24;break e}default:{t[a>>2]=f;f=0;break e}}}case 36:{t[a>>2]=A+1;f=21;break e}case 11:{t[a>>2]=A+1;f=17;break e}case 19:{f=PK(e,A+1|0,r,a)|0;break e}case 5:{if((r-A|0)<2){f=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0))if(!(Z5[t[e+328>>2]&127](e,A)|0)){t[a>>2]=A;f=0;break e}else{f=19;l=2}else{f=18;l=2}break}case 6:{if((r-A|0)<3){f=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0))if(!(Z5[t[e+332>>2]&127](e,A)|0)){t[a>>2]=A;f=0;break e}else{f=19;l=3}else{f=18;l=3}break}case 7:{if((r-A|0)<4){f=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0))if(!(Z5[t[e+336>>2]&127](e,A)|0)){t[a>>2]=A;f=0;break e}else{f=19;l=4}else{f=18;l=4}break}case 24:case 22:{f=18;l=1;break}case 23:case 27:case 26:case 25:{f=19;l=1;break}default:{t[a>>2]=A;f=0;break e}}}while(0);if((c|0)==3){s=r;l=A;A:while(1){f=l;l=l+1|0;if((s-l|0)<=0){c=18;break}switch(i[b+(n[l>>0]|0)>>0]|0){case 10:case 21:continue A;case 9:break;default:{c=17;break A}}if((f+2|0)==(r|0)){c=17;break}}if((c|0)==17){t[a>>2]=l;f=15;break}else if((c|0)==18){t[a>>2]=l;f=15;break}}c=e+328|0;o=e+332|0;u=e+336|0;s=A+l|0;A:while(1){l=r-s|0;if((l|0)<=0){c=99;break}switch(i[b+(n[s>>0]|0)>>0]|0){case 29:{c=56;break A}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{c=70;break A}case 34:{c=89;break A}case 33:{c=92;break A}case 15:{c=95;break A}case 27:case 26:case 25:case 24:case 22:{A=f;s=s+1|0;f=A;continue A}case 5:{if((l|0)<2){f=-2;break e}if(!(Z5[t[c>>2]&127](e,s)|0)){c=60;break A}A=f;s=s+2|0;f=A;continue A}case 6:{if((l|0)<3){f=-2;break e}if(!(Z5[t[o>>2]&127](e,s)|0)){c=64;break A}A=f;s=s+3|0;f=A;continue A}case 7:{if((l|0)<4){f=-2;break e}if(!(Z5[t[u>>2]&127](e,s)|0)){c=68;break A}A=f;s=s+4|0;f=A;continue A}case 23:{l=s+1|0;switch(f&63){case 18:break;case 41:{f=19;s=l;continue A}default:{A=f;s=l;f=A;continue A}}f=r-l|0;if((f|0)<=0){f=-1;break e}switch(i[b+(n[l>>0]|0)>>0]|0){case 29:{c=74;break A}case 27:case 26:case 25:case 24:case 22:{f=41;s=s+2|0;continue A}case 5:{if((f|0)<2){f=-2;break e}if(!(Z5[t[c>>2]&127](e,l)|0)){c=78;break A}f=41;s=s+3|0;continue A}case 6:{if((f|0)<3){f=-2;break e}if(!(Z5[t[o>>2]&127](e,l)|0)){c=82;break A}f=41;s=s+4|0;continue A}case 7:{if((f|0)<4){f=-2;break e}if(!(Z5[t[u>>2]&127](e,l)|0)){c=86;break A}f=41;s=s+5|0;continue A}default:{f=19;s=l;continue A}}}default:{c=98;break A}}}switch(c|0){case 56:{t[a>>2]=s;f=0;break e}case 60:{t[a>>2]=s;f=0;break e}case 64:{t[a>>2]=s;f=0;break e}case 68:{t[a>>2]=s;f=0;break e}case 70:{t[a>>2]=s;break e}case 74:{t[a>>2]=l;f=0;break e}case 78:{t[a>>2]=l;f=0;break e}case 82:{t[a>>2]=l;f=0;break e}case 86:{t[a>>2]=l;f=0;break e}case 89:if((f|0)==19){t[a>>2]=s;f=0;break e}else{t[a>>2]=s+1;f=32;break e}case 92:if((f|0)==19){t[a>>2]=s;f=0;break e}else{t[a>>2]=s+1;f=31;break e}case 95:if((f|0)==19){t[a>>2]=s;f=0;break e}else{t[a>>2]=s+1;f=30;break e}case 98:{t[a>>2]=s;f=0;break e}case 99:{f=0-f|0;break e}}}else f=-4}while(0);return f|0}function Go(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0;e:do{if(A>>>0>>0){u=e+72|0;A:do{switch(i[u+(n[A>>0]|0)>>0]|0){case 2:{f=YK(e,A+1|0,r,a)|0;break e}case 3:{f=QK(e,A+1|0,r,a)|0;break e}case 9:{f=A+1|0;if((r-f|0)<=0){f=-3;break e}t[a>>2]=(i[u+(n[f>>0]|0)>>0]|0)==10?A+2|0:f;f=7;break e}case 10:{t[a>>2]=A+1;f=7;break e}case 4:{l=A+1|0;if((r-l|0)<=0){f=-5;break e}if((i[l>>0]|0)==93){f=A+2|0;if((r-f|0)<=0){f=-5;break e}if((i[f>>0]|0)==62){t[a>>2]=f;f=0;break e}else f=r}else f=r;break}case 5:{f=r;if((f-A|0)<2){f=-2;break e}if(!(Z5[t[e+352>>2]&127](e,A)|0)){l=A+2|0;break A}else{t[a>>2]=A;f=0;break e}}case 6:{f=r;if((f-A|0)<3){f=-2;break e}if(!(Z5[t[e+356>>2]&127](e,A)|0)){l=A+3|0;break A}else{t[a>>2]=A;f=0;break e}}case 7:{f=r;if((f-A|0)<4){f=-2;break e}if(!(Z5[t[e+360>>2]&127](e,A)|0)){l=A+4|0;break A}else{t[a>>2]=A;f=0;break e}}case 8:case 1:case 0:{t[a>>2]=A;f=0;break e}default:{l=A+1|0;f=r}}}while(0);s=e+352|0;c=e+356|0;o=e+360|0;A:while(1){r=f-l|0;if((r|0)<=0){r=49;break}switch(i[u+(n[l>>0]|0)>>0]|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{r=47;break A}case 5:{if((r|0)<2){r=32;break A}if(Z5[t[s>>2]&127](e,l)|0){r=32;break A}l=l+2|0;continue A}case 6:{if((r|0)<3){r=36;break A}if(Z5[t[c>>2]&127](e,l)|0){r=36;break A}l=l+3|0;continue A}case 7:{if((r|0)<4){r=40;break A}if(Z5[t[o>>2]&127](e,l)|0){r=40;break A}l=l+4|0;continue A}case 4:{if((r|0)<=1){r=47;break A}A=l+1|0;if((i[A>>0]|0)!=93){l=A;continue A}if((r|0)<=2){r=47;break A}l=l+2|0;if((i[l>>0]|0)==62){r=46;break A}else{l=A;continue A}}default:{l=l+1|0;continue A}}}if((r|0)==32){t[a>>2]=l;f=6;break}else if((r|0)==36){t[a>>2]=l;f=6;break}else if((r|0)==40){t[a>>2]=l;f=6;break}else if((r|0)==46){t[a>>2]=l;f=0;break}else if((r|0)==47){t[a>>2]=l;f=6;break}else if((r|0)==49){t[a>>2]=l;f=6;break}}else f=-4}while(0);return f|0}function Lo(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;e:do{if(A>>>0>>0){o=e+72|0;A:do{switch(i[o+(n[A>>0]|0)>>0]|0){case 4:{l=A+1|0;f=r;if((f-l|0)<=0){f=-1;break e}if((i[l>>0]|0)==93){r=A+2|0;if((f-r|0)<=0){f=-1;break e}if((i[r>>0]|0)==62){t[a>>2]=A+3;f=40;break e}}break}case 9:{f=A+1|0;if((r-f|0)<=0){f=-1;break e}t[a>>2]=(i[o+(n[f>>0]|0)>>0]|0)==10?A+2|0:f;f=7;break e}case 10:{t[a>>2]=A+1;f=7;break e}case 5:{f=r;if((f-A|0)<2){f=-2;break e}if(!(Z5[t[e+352>>2]&127](e,A)|0)){l=A+2|0;break A}else{t[a>>2]=A;f=0;break e}}case 6:{f=r;if((f-A|0)<3){f=-2;break e}if(!(Z5[t[e+356>>2]&127](e,A)|0)){l=A+3|0;break A}else{t[a>>2]=A;f=0;break e}}case 7:{f=r;if((f-A|0)<4){f=-2;break e}if(!(Z5[t[e+360>>2]&127](e,A)|0)){l=A+4|0;break A}else{t[a>>2]=A;f=0;break e}}case 8:case 1:case 0:{t[a>>2]=A;f=0;break e}default:{l=A+1|0;f=r}}}while(0);A=e+352|0;s=e+356|0;c=e+360|0;A:while(1){r=f-l|0;if((r|0)<=0){r=39;break}switch(i[o+(n[l>>0]|0)>>0]|0){case 4:case 10:case 9:case 8:case 1:case 0:{r=37;break A}case 5:{if((r|0)<2){r=30;break A}if(!(Z5[t[A>>2]&127](e,l)|0))r=2;else{r=30;break A}break}case 6:{if((r|0)<3){r=33;break A}if(!(Z5[t[s>>2]&127](e,l)|0))r=3;else{r=33;break A}break}case 7:{if((r|0)<4){r=36;break A}if(!(Z5[t[c>>2]&127](e,l)|0))r=4;else{r=36;break A}break}default:r=1}l=l+r|0}if((r|0)==30){t[a>>2]=l;f=6;break}else if((r|0)==33){t[a>>2]=l;f=6;break}else if((r|0)==36){t[a>>2]=l;f=6;break}else if((r|0)==37){t[a>>2]=l;f=6;break}else if((r|0)==39){t[a>>2]=l;f=6;break}}else f=-4}while(0);return f|0}function Qo(e,A,r,i,a,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;var o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0;if(!((e|0)>-1&((A|0)>0&(r|0)>0)))ge(95162,94943,843,95188);l=uK(A,r,e,f,l,1)|0;if(!l)ge(95233,94943,847,95188);m=t[l+20>>2]|0;g=t[l+24>>2]|0;u=A+1|0;o=0;while(1){if((o|0)==(u|0))break;t[m+(o<<2)>>2]=0;o=o+1|0}e:do{switch(f|0){case 1:{f=t[l+28>>2]|0;o=0;while(1){if((o|0)>=(e|0)){k=0;break}u=t[i+(o<<2)>>2]|0;if(!((u|0)>-1&(u|0)<(A|0))){v=13;break}d=t[a+(o<<2)>>2]|0;if(!((d|0)>-1&(d|0)<(r|0))){v=13;break}d=m+(u+1<<2)|0;t[d>>2]=(t[d>>2]|0)+1;o=o+1|0}if((v|0)==13)ge(138394,94943,862,95188);while(1){if((k|0)==(A|0)){o=0;break}v=k+1|0;r=m+(v<<2)|0;t[r>>2]=(t[r>>2]|0)+(t[m+(k<<2)>>2]|0);k=v}while(1){if((o|0)==(e|0))break;d=m+(t[i+(o<<2)>>2]<<2)|0;v=t[d>>2]|0;c[f+(v<<3)>>3]=+c[n+(o<<3)>>3];r=t[a+(o<<2)>>2]|0;t[d>>2]=v+1;t[g+(v<<2)>>2]=r;o=o+1|0}while(1){if((A|0)<=0)break e;a=A+-1|0;t[m+(A<<2)>>2]=t[m+(a<<2)>>2];A=a}}case 2:{f=t[l+28>>2]|0;o=0;while(1){if((o|0)>=(e|0)){d=0;break}u=t[i+(o<<2)>>2]|0;if(!((u|0)>-1&(u|0)<(A|0))){v=25;break}k=t[a+(o<<2)>>2]|0;if(!((k|0)>-1&(k|0)<(r|0))){v=25;break}k=m+(u+1<<2)|0;t[k>>2]=(t[k>>2]|0)+1;o=o+1|0}if((v|0)==25)ge(138394,94943,880,95188);while(1){if((d|0)==(A|0)){o=0;break}v=d+1|0;r=m+(v<<2)|0;t[r>>2]=(t[r>>2]|0)+(t[m+(d<<2)>>2]|0);d=v}while(1){if((o|0)==(e|0))break;d=m+(t[i+(o<<2)>>2]<<2)|0;v=t[d>>2]|0;r=v<<1;c[f+(r<<3)>>3]=+c[n>>3];c[f+((r|1)<<3)>>3]=+c[n+8>>3];r=t[a+(o<<2)>>2]|0;t[d>>2]=v+1;t[g+(v<<2)>>2]=r;n=n+16|0;o=o+1|0}while(1){if((A|0)<=0)break e;a=A+-1|0;t[m+(A<<2)>>2]=t[m+(a<<2)>>2];A=a}}case 4:{f=t[l+28>>2]|0;o=0;while(1){if((o|0)>=(e|0)){w=0;break}u=t[i+(o<<2)>>2]|0;if(!((u|0)>-1&(u|0)<(A|0))){v=37;break}d=t[a+(o<<2)>>2]|0;if(!((d|0)>-1&(d|0)<(r|0))){v=37;break}d=m+(u+1<<2)|0;t[d>>2]=(t[d>>2]|0)+1;o=o+1|0}if((v|0)==37)ge(138394,94943,899,95188);while(1){if((w|0)==(A|0)){o=0;break}v=w+1|0;r=m+(v<<2)|0;t[r>>2]=(t[r>>2]|0)+(t[m+(w<<2)>>2]|0);w=v}while(1){if((o|0)==(e|0))break;d=i+(o<<2)|0;t[f+(t[m+(t[d>>2]<<2)>>2]<<2)>>2]=t[n+(o<<2)>>2];r=t[a+(o<<2)>>2]|0;d=m+(t[d>>2]<<2)|0;v=t[d>>2]|0;t[d>>2]=v+1;t[g+(v<<2)>>2]=r;o=o+1|0}while(1){if((A|0)<=0)break e;a=A+-1|0;t[m+(A<<2)>>2]=t[m+(a<<2)>>2];A=a}}case 8:{n=0;while(1){if((n|0)>=(e|0)){b=0;break}o=t[i+(n<<2)>>2]|0;if(!((o|0)>-1&(o|0)<(A|0))){v=48;break}d=t[a+(n<<2)>>2]|0;if(!((d|0)>-1&(d|0)<(r|0))){v=48;break}d=m+(o+1<<2)|0;t[d>>2]=(t[d>>2]|0)+1;n=n+1|0}if((v|0)==48)ge(138394,94943,915,95188);while(1){if((b|0)==(A|0)){n=0;break}v=b+1|0;r=m+(v<<2)|0;t[r>>2]=(t[r>>2]|0)+(t[m+(b<<2)>>2]|0);b=v}while(1){if((n|0)==(e|0))break;r=t[a+(n<<2)>>2]|0;d=m+(t[i+(n<<2)>>2]<<2)|0;v=t[d>>2]|0;t[d>>2]=v+1;t[g+(v<<2)>>2]=r;n=n+1|0}while(1){if((A|0)<=0)break e;a=A+-1|0;t[m+(A<<2)>>2]=t[m+(a<<2)>>2];A=a}}case 16:{o=0;while(1){if((o|0)>=(e|0)){h=0;break}u=t[i+(o<<2)>>2]|0;if(!((u|0)>-1&(u|0)<(A|0))){v=59;break}d=t[a+(o<<2)>>2]|0;if(!((d|0)>-1&(d|0)<(r|0))){v=59;break}d=m+(u+1<<2)|0;t[d>>2]=(t[d>>2]|0)+1;o=o+1|0}if((v|0)==59)ge(138394,94943,930,95188);while(1){if((h|0)==(A|0))break;v=h+1|0;r=m+(v<<2)|0;t[r>>2]=(t[r>>2]|0)+(t[m+(h<<2)>>2]|0);h=v}Q6(t[l+28>>2]|0,n|0,P(t[l+40>>2]|0,e)|0)|0;n=0;while(1){if((n|0)==(e|0))break;r=t[a+(n<<2)>>2]|0;d=m+(t[i+(n<<2)>>2]<<2)|0;v=t[d>>2]|0;t[d>>2]=v+1;t[g+(v<<2)>>2]=r;n=n+1|0}while(1){if((A|0)<=0)break e;a=A+-1|0;t[m+(A<<2)>>2]=t[m+(a<<2)>>2];A=a}}default:ge(138394,94943,944,95188)}}while(0);t[m>>2]=0;t[l+8>>2]=e;if(s)l=Do(l,s)|0;return l|0}function Do(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0.0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;g=t[e+20>>2]|0;m=t[e+24>>2]|0;i=t[e+16>>2]|0;d=t[e+4>>2]|0;e:do{if(A){u=d<<2;b=$F(u)|0;r=0;while(1){if((r|0)>=(d|0))break;t[b+(r<<2)>>2]=-1;r=r+1|0}A:do{switch(i|0){case 1:{s=t[e+28>>2]|0;a=0;i=t[g>>2]|0;r=0;r:while(1){if((r|0)>=(t[e>>2]|0)){p=a;E=b;break A}o=r+1|0;u=g+(o<<2)|0;f=g+(r<<2)|0;r=a;while(1){A=t[u>>2]|0;if((i|0)>=(A|0))break;A=m+(i<<2)|0;a=t[A>>2]|0;n=t[b+(a<<2)>>2]|0;if((n|0)<(t[f>>2]|0)){t[m+(r<<2)>>2]=a;c[s+(r<<3)>>3]=+c[s+(i<<3)>>3];t[b+(t[A>>2]<<2)>>2]=r;r=r+1|0}else{if((t[m+(n<<2)>>2]|0)!=(a|0))break r;v=s+(n<<3)|0;c[v>>3]=+c[v>>3]+ +c[s+(i<<3)>>3]}i=i+1|0}t[u>>2]=r;a=r;i=A;r=o}ge(95235,94943,1792,95260);break}case 2:{v=t[e+28>>2]|0;switch(A|0){case 1:{A=t[g>>2]|0;i=0;r=0;r:while(1){if((i|0)>=(t[e>>2]|0)){p=r;E=b;break A}s=i+1|0;o=g+(s<<2)|0;f=g+(i<<2)|0;while(1){i=t[o>>2]|0;if((A|0)>=(i|0))break;i=m+(A<<2)|0;a=t[i>>2]|0;n=t[b+(a<<2)>>2]|0;if((n|0)<(t[f>>2]|0)){t[m+(r<<2)>>2]=a;k=A<<1;d=r<<1;c[v+(d<<3)>>3]=+c[v+(k<<3)>>3];c[v+((d|1)<<3)>>3]=+c[v+((k|1)<<3)>>3];t[b+(t[i>>2]<<2)>>2]=r;r=r+1|0}else{if((t[m+(n<<2)>>2]|0)!=(a|0))break r;k=A<<1;d=n<<1;w=v+(d<<3)|0;c[w>>3]=+c[w>>3]+ +c[v+(k<<3)>>3];d=v+((d|1)<<3)|0;c[d>>3]=+c[d>>3]+ +c[v+((k|1)<<3)>>3]}A=A+1|0}t[o>>2]=r;A=i;i=s}ge(95235,94943,1815,95260);break}case 4:{A=t[g>>2]|0;i=0;r=0;r:while(1){if((i|0)>=(t[e>>2]|0)){p=r;E=b;break A}o=i+1|0;s=g+(o<<2)|0;f=g+(i<<2)|0;while(1){i=t[s>>2]|0;if((A|0)>=(i|0))break;i=m+(A<<2)|0;a=t[i>>2]|0;n=t[b+(a<<2)>>2]|0;if((n|0)<(t[f>>2]|0)){t[m+(r<<2)>>2]=a;k=A<<1;d=r<<1;c[v+(d<<3)>>3]=+c[v+(k<<3)>>3];c[v+((d|1)<<3)>>3]=+c[v+((k|1)<<3)>>3];t[b+(t[i>>2]<<2)>>2]=r;r=r+1|0}else{if((t[m+(n<<2)>>2]|0)!=(a|0))break r;k=A<<1;d=n<<1;w=v+(d<<3)|0;c[w>>3]=+c[w>>3]+ +c[v+(k<<3)>>3];c[v+((d|1)<<3)>>3]=+c[v+((k|1)<<3)>>3]}A=A+1|0}t[s>>2]=r;A=i;i=o}ge(95235,94943,1835,95260);break}case 2:{k=~~+c[v+8>>3];f=t[e>>2]|0;i=k;n=0;r=0;r:while(1){if((n|0)>=(f|0))break;s=n+1|0;o=t[g+(s<<2)>>2]|0;a=r;A=k;r=t[g+(n<<2)>>2]|0;while(1){if((r|0)>=(o|0)){k=A;n=s;r=a;continue r}k=~~+c[v+((a<<1|1)<<3)>>3];a=a+1|0;i=(i|0)>(k|0)?i:k;A=(A|0)<(k|0)?A:k;r=r+1|0}}G2(b);w=i-k+1|0;h=$F(P(w,u)|0)|0;w=P(w,d)|0;r=0;while(1){if((r|0)>=(w|0))break;t[h+(r<<2)>>2]=-1;r=r+1|0}r=0;A=t[g>>2]|0;i=0;r:while(1){if((i|0)>=(t[e>>2]|0)){p=r;E=h;break A}u=i+1|0;b=g+(u<<2)|0;o=g+(i<<2)|0;while(1){i=t[b>>2]|0;if((A|0)>=(i|0))break;i=t[m+(A<<2)>>2]|0;a=A<<1;l=+c[v+((a|1)<<3)>>3];n=(P(~~l-k|0,d)|0)+i|0;f=h+(n<<2)|0;s=t[f>>2]|0;if((s|0)<(t[o>>2]|0)){t[m+(r<<2)>>2]=i;s=r<<1;c[v+(s<<3)>>3]=+c[v+(a<<3)>>3];c[v+((s|1)<<3)>>3]=l;t[f>>2]=r;r=r+1|0}else{if((n|0)>=(w|0)){r=55;break r}if((t[m+(s<<2)>>2]|0)!=(i|0)){r=57;break r}s=s<<1;f=v+(s<<3)|0;c[f>>3]=+c[f>>3]+ +c[v+(a<<3)>>3];c[v+((s|1)<<3)>>3]=l}A=A+1|0}t[b>>2]=r;A=i;i=u}if((r|0)==55)ge(95292,94943,1869,95260);else if((r|0)==57)ge(95313,94943,1870,95260);break}case 3:{a=~~+c[v+8>>3];f=t[e>>2]|0;r=a;i=0;n=0;r:while(1){if((n|0)>=(f|0))break;s=n+1|0;o=t[g+(s<<2)>>2]|0;A=r;r=t[g+(n<<2)>>2]|0;while(1){if((r|0)>=(o|0)){r=A;n=s;continue r}k=~~+c[v+(i<<1<<3)>>3];A=(A|0)>(k|0)?A:k;a=(a|0)>(k|0)?a:k;i=i+1|0;r=r+1|0}}G2(b);i=r-a+1|0;h=$F(P(i,u)|0)|0;i=P(i,d)|0;r=0;while(1){if((r|0)>=(i|0))break;t[h+(r<<2)>>2]=-1;r=r+1|0}r=0;A=t[g>>2]|0;i=0;r:while(1){if((i|0)>=(t[e>>2]|0)){p=r;E=h;break A}u=i+1|0;b=g+(u<<2)|0;o=g+(i<<2)|0;while(1){i=t[b>>2]|0;if((A|0)>=(i|0))break;i=t[m+(A<<2)>>2]|0;n=A<<1;l=+c[v+(n<<3)>>3];f=h+((P(~~l-a|0,d)|0)+i<<2)|0;s=t[f>>2]|0;if((s|0)<(t[o>>2]|0)){t[m+(r<<2)>>2]=i;k=r<<1;c[v+(k<<3)>>3]=l;c[v+((k|1)<<3)>>3]=+c[v+((n|1)<<3)>>3];t[f>>2]=r;r=r+1|0}else{if((t[m+(s<<2)>>2]|0)!=(i|0))break r;k=s<<1;c[v+(k<<3)>>3]=l;k=v+((k|1)<<3)|0;c[k>>3]=+c[k>>3]+ +c[v+((n|1)<<3)>>3]}A=A+1|0}t[b>>2]=r;A=i;i=u}ge(95313,94943,1905,95260);break}default:{p=0;E=b;break A}}break}case 4:{s=t[e+28>>2]|0;i=0;r=0;A=t[g>>2]|0;r:while(1){if((i|0)>=(t[e>>2]|0)){p=r;E=b;break A}o=i+1|0;u=g+(o<<2)|0;f=g+(i<<2)|0;while(1){a=t[u>>2]|0;if((A|0)>=(a|0))break;i=m+(A<<2)|0;a=t[i>>2]|0;n=t[b+(a<<2)>>2]|0;if((n|0)<(t[f>>2]|0)){t[m+(r<<2)>>2]=a;t[s+(r<<2)>>2]=t[s+(A<<2)>>2];t[b+(t[i>>2]<<2)>>2]=r;r=r+1|0}else{if((t[m+(n<<2)>>2]|0)!=(a|0))break r;v=s+(n<<2)|0;t[v>>2]=(t[v>>2]|0)+(t[s+(A<<2)>>2]|0)}A=A+1|0}t[u>>2]=r;i=o;A=a}ge(95235,94943,1929,95260);break}case 8:{i=0;r=0;A=t[g>>2]|0;r:while(1){if((i|0)>=(t[e>>2]|0)){p=r;E=b;break A}s=i+1|0;o=g+(s<<2)|0;f=g+(i<<2)|0;while(1){a=t[o>>2]|0;if((A|0)>=(a|0))break;i=m+(A<<2)|0;a=t[i>>2]|0;n=t[b+(a<<2)>>2]|0;if((n|0)>=(t[f>>2]|0)){if((t[m+(n<<2)>>2]|0)!=(a|0))break r}else{t[m+(r<<2)>>2]=a;t[b+(t[i>>2]<<2)>>2]=r;r=r+1|0}A=A+1|0}t[o>>2]=r;i=s;A=a}ge(95235,94943,1948,95260);break}default:{e=0;break e}}}while(0);t[e+8>>2]=p;G2(E)}}while(0);return e|0}function zo(e,A,r,i,a,t,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;if(!i)Wo(e,r,a,n,A,t);else Yo(e,r,a,n,A,t);return}function Wo(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0.0,m=0;if((t[e+32>>2]|0)!=1)ge(94919,94943,1121,95483);if((t[e+16>>2]|0)!=1)ge(95364,94943,1122,95483);w=t[e+28>>2]|0;k=t[e+20>>2]|0;d=t[e+24>>2]|0;v=t[e>>2]|0;h=t[e+4>>2]|0;e=t[r>>2]|0;f=(e|0)!=0;if(!a){if(!f)e=$F(P(i<<3,v)|0)|0;a=0;e:while(1){if((a|0)>=(v|0))break;b=P(a,i)|0;f=0;while(1){if((f|0)>=(i|0))break;c[e+(f+b<<3)>>3]=0.0;f=f+1|0}o=a+1|0;u=t[k+(o<<2)>>2]|0;f=t[k+(a<<2)>>2]|0;while(1){if((f|0)>=(u|0)){a=o;continue e}l=w+(f<<3)|0;s=d+(f<<2)|0;a=0;while(1){if((a|0)>=(i|0))break;g=+c[A+((P(t[s>>2]|0,i)|0)+a<<3)>>3]*+c[l>>3];h=e+(a+b<<3)|0;c[h>>3]=+c[h>>3]+g;a=a+1|0}f=f+1|0}}if(n)Mo(e,v,i)}else{if(!f)e=$F(P(i<<3,h)|0)|0;a=P(h,i)|0;f=0;while(1){if((f|0)>=(a|0)){f=0;break}c[e+(f<<3)>>3]=0.0;f=f+1|0}e:while(1){if((f|0)>=(v|0))break;o=f+1|0;u=t[k+(o<<2)>>2]|0;b=P(f,i)|0;f=t[k+(f<<2)>>2]|0;while(1){if((f|0)>=(u|0)){f=o;continue e}l=w+(f<<3)|0;s=d+(f<<2)|0;a=0;while(1){if((a|0)>=(i|0))break;m=e+((P(t[s>>2]|0,i)|0)+a<<3)|0;c[m>>3]=+c[m>>3]+ +c[A+(a+b<<3)>>3]*+c[l>>3];a=a+1|0}f=f+1|0}}if(n)Mo(e,h,i)}t[r>>2]=e;return}function Yo(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+16|0;o=u;if((t[e+32>>2]|0)!=1)ge(94919,94943,1163,95335);if((t[e+16>>2]|0)!=1)ge(95364,94943,1164,95335);f=t[r>>2]|0;s=t[e>>2]|0;c=t[e+4>>2]|0;l=(f|0)!=0;if(!a){if(!l)f=$F(P(i<<3,s)|0)|0;l=0;while(1){if((l|0)>=(i|0))break;t[o>>2]=f+((P(l,s)|0)<<3);Fo(e,A+((P(l,c)|0)<<3)|0,o,0);l=l+1|0}if(!n)Mo(f,i,s)}else{if(!l)f=$F(P(i<<3,c)|0)|0;l=0;while(1){if((l|0)>=(i|0))break;t[o>>2]=f+((P(l,c)|0)<<3);Fo(e,A+((P(l,s)|0)<<3)|0,o,a);l=l+1|0}if(!n)Mo(f,i,c)}t[r>>2]=f;h=u;return}function Fo(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0.0;if((t[e+32>>2]|0)!=1)ge(94919,94943,1222,95392);f=t[e+16>>2]|0;switch(f|0){case 4:case 1:break;default:ge(95421,94943,1223,95392)}b=t[e+20>>2]|0;u=t[e+24>>2]|0;h=t[e>>2]|0;s=t[e+4>>2]|0;l=t[r>>2]|0;e:do{switch(f|0){case 1:{o=t[e+28>>2]|0;e=(i|0)!=0;a=(l|0)!=0;if(!A){if(!e){if(a)a=l;else a=$F(h<<3)|0;e=0;A:while(1){if((e|0)>=(h|0))break e;f=a+(e<<3)|0;c[f>>3]=0.0;l=e+1|0;i=t[b+(l<<2)>>2]|0;e=t[b+(e<<2)>>2]|0;n=0.0;while(1){if((e|0)>=(i|0)){e=l;continue A}w=n+ +c[o+(e<<3)>>3];c[f>>3]=w;e=e+1|0;n=w}}}if(!a)l=$F(s<<3)|0;e=0;while(1){if((e|0)>=(s|0)){e=0;break}c[l+(e<<3)>>3]=0.0;e=e+1|0}A:while(1){if((e|0)>=(h|0)){a=l;break e}a=e+1|0;f=t[b+(a<<2)>>2]|0;e=t[b+(e<<2)>>2]|0;while(1){if((e|0)>=(f|0)){e=a;continue A}A=l+(t[u+(e<<2)>>2]<<3)|0;c[A>>3]=+c[A>>3]+ +c[o+(e<<3)>>3];e=e+1|0}}}else{if(!e){if(a)a=l;else a=$F(h<<3)|0;e=0;A:while(1){if((e|0)>=(h|0))break e;f=a+(e<<3)|0;c[f>>3]=0.0;l=e+1|0;i=t[b+(l<<2)>>2]|0;e=t[b+(e<<2)>>2]|0;n=0.0;while(1){if((e|0)>=(i|0)){e=l;continue A}w=n+ +c[A+(t[u+(e<<2)>>2]<<3)>>3]*+c[o+(e<<3)>>3];c[f>>3]=w;e=e+1|0;n=w}}}if(a)a=l;else a=$F(s<<3)|0;e=0;while(1){if((e|0)>=(s|0)){e=0;break}c[a+(e<<3)>>3]=0.0;e=e+1|0}A:while(1){if((e|0)>=(h|0))break e;f=e+1|0;l=t[b+(f<<2)>>2]|0;i=A+(e<<3)|0;e=t[b+(e<<2)>>2]|0;while(1){if((e|0)>=(l|0)){e=f;continue A}s=a+(t[u+(e<<2)>>2]<<3)|0;c[s>>3]=+c[s>>3]+ +c[i>>3]*+c[o+(e<<3)>>3];e=e+1|0}}}}case 4:{o=t[e+28>>2]|0;e=(i|0)!=0;a=(l|0)!=0;if(!A){if(!e){if(a)a=l;else a=$F(h<<3)|0;e=0;A:while(1){if((e|0)>=(h|0))break e;f=a+(e<<3)|0;c[f>>3]=0.0;l=e+1|0;i=t[b+(l<<2)>>2]|0;e=t[b+(e<<2)>>2]|0;n=0.0;while(1){if((e|0)>=(i|0)){e=l;continue A}w=n+ +(t[o+(e<<2)>>2]|0);c[f>>3]=w;e=e+1|0;n=w}}}if(!a)l=$F(s<<3)|0;e=0;while(1){if((e|0)>=(s|0)){e=0;break}c[l+(e<<3)>>3]=0.0;e=e+1|0}A:while(1){if((e|0)>=(h|0)){a=l;break e}a=e+1|0;f=t[b+(a<<2)>>2]|0;e=t[b+(e<<2)>>2]|0;while(1){if((e|0)>=(f|0)){e=a;continue A}A=l+(t[u+(e<<2)>>2]<<3)|0;c[A>>3]=+c[A>>3]+ +(t[o+(e<<2)>>2]|0);e=e+1|0}}}else{if(!e){if(a)a=l;else a=$F(h<<3)|0;e=0;A:while(1){if((e|0)>=(h|0))break e;f=a+(e<<3)|0;c[f>>3]=0.0;l=e+1|0;i=t[b+(l<<2)>>2]|0;e=t[b+(e<<2)>>2]|0;n=0.0;while(1){if((e|0)>=(i|0)){e=l;continue A}w=n+ +c[A+(t[u+(e<<2)>>2]<<3)>>3]*+(t[o+(e<<2)>>2]|0);c[f>>3]=w;e=e+1|0;n=w}}}if(a)a=l;else a=$F(s<<3)|0;e=0;while(1){if((e|0)>=(s|0)){e=0;break}c[a+(e<<3)>>3]=0.0;e=e+1|0}A:while(1){if((e|0)>=(h|0))break e;f=e+1|0;l=t[b+(f<<2)>>2]|0;i=A+(e<<3)|0;e=t[b+(e<<2)>>2]|0;while(1){if((e|0)>=(l|0)){e=f;continue A}s=a+(t[u+(e<<2)>>2]<<3)|0;c[s>>3]=+c[s>>3]+ +c[i>>3]*+(t[o+(e<<2)>>2]|0);e=e+1|0}}}}default:ge(138394,94943,1315,95392)}}while(0);t[r>>2]=a;return}function Mo(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,t=0,n=0;i=P(A<<3,r)|0;t=$F(i)|0;Q6(t|0,e|0,i|0)|0;i=0;while(1){if((i|0)>=(A|0))break;n=P(i,r)|0;a=0;while(1){if((a|0)>=(r|0))break;c[e+((P(a,A)|0)+i<<3)>>3]=+c[t+(a+n<<3)>>3];a=a+1|0}i=i+1|0}G2(t);return}function Vo(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0;B=t[e+20>>2]|0;y=t[e+24>>2]|0;C=t[A+20>>2]|0;I=t[A+24>>2]|0;E=t[e+32>>2]|0;if(!((E|0)==1?(E|0)==(t[A+32>>2]|0):0))ge(95005,94943,1408,95512);E=t[e>>2]|0;if(((t[e+4>>2]|0)==(t[A>>2]|0)?(b=t[e+16>>2]|0,(b|0)==(t[A+16>>2]|0)):0)?(u=A+4|0,Z=$F(t[u>>2]<<2)|0,(Z|0)!=0):0){r=0;while(1){if((r|0)>=(t[u>>2]|0)){i=0;r=0;break}t[Z+(r<<2)>>2]=-1;r=r+1|0}e:while(1){if((r|0)>=(E|0))break;l=r+1|0;s=B+(l<<2)|0;o=-2-r|0;f=t[B+(r<<2)>>2]|0;while(1){if((f|0)>=(t[s>>2]|0)){r=l;continue e}a=t[y+(f<<2)>>2]|0;n=C+(a+1<<2)|0;a=t[C+(a<<2)>>2]|0;while(1){if((a|0)>=(t[n>>2]|0))break;r=Z+(t[I+(a<<2)>>2]<<2)|0;if((t[r>>2]|0)!=(o|0)){t[r>>2]=o;i=i+1|0}a=a+1|0}f=f+1|0}}r=aK(E,t[u>>2]|0,i,b,1)|0;e:do{if(!r)r=0;else{g=t[r+20>>2]|0;m=t[r+24>>2]|0;A:do{switch(b|0){case 1:{d=t[e+28>>2]|0;b=t[A+28>>2]|0;A=t[r+28>>2]|0;t[g>>2]=0;i=0;a=0;r:while(1){if((i|0)>=(E|0)){p=a;break A}h=i+1|0;w=B+(h<<2)|0;k=g+(i<<2)|0;e=t[B+(i<<2)>>2]|0;while(1){if((e|0)>=(t[w>>2]|0))break;s=t[y+(e<<2)>>2]|0;o=C+(s+1<<2)|0;u=d+(e<<3)|0;s=t[C+(s<<2)>>2]|0;while(1){if((s|0)>=(t[o>>2]|0))break;i=I+(s<<2)|0;n=t[i>>2]|0;f=Z+(n<<2)|0;l=t[f>>2]|0;if((l|0)<(t[k>>2]|0)){t[f>>2]=a;t[m+(a<<2)>>2]=t[i>>2];c[A+(a<<3)>>3]=+c[b+(s<<3)>>3]*+c[u>>3];a=a+1|0}else{if((t[m+(l<<2)>>2]|0)!=(n|0))break r;v=A+(l<<3)|0;c[v>>3]=+c[v>>3]+ +c[b+(s<<3)>>3]*+c[u>>3]}s=s+1|0}e=e+1|0}t[g+(h<<2)>>2]=a;i=h}ge(95534,94943,1468,95512);break}case 2:{v=t[e+28>>2]|0;A=t[A+28>>2]|0;h=t[r+28>>2]|0;t[g>>2]=0;i=0;a=0;r:while(1){if((i|0)>=(E|0)){p=a;break A}w=i+1|0;k=B+(w<<2)|0;d=g+(i<<2)|0;b=t[B+(i<<2)>>2]|0;while(1){if((b|0)>=(t[k>>2]|0))break;s=t[y+(b<<2)>>2]|0;o=C+(s+1<<2)|0;e=b<<1;u=v+(e<<3)|0;e=v+((e|1)<<3)|0;s=t[C+(s<<2)>>2]|0;while(1){if((s|0)>=(t[o>>2]|0))break;i=I+(s<<2)|0;n=t[i>>2]|0;f=Z+(n<<2)|0;l=t[f>>2]|0;if((l|0)<(t[d>>2]|0)){t[f>>2]=a;t[m+(a<<2)>>2]=t[i>>2];f=s<<1;n=A+(f<<3)|0;f=A+((f|1)<<3)|0;l=a<<1;c[h+(l<<3)>>3]=+c[n>>3]*+c[u>>3]-+c[f>>3]*+c[e>>3];c[h+((l|1)<<3)>>3]=+c[n>>3]*+c[e>>3]+ +c[f>>3]*+c[u>>3];a=a+1|0}else{if((t[m+(l<<2)>>2]|0)!=(n|0))break r;f=s<<1;n=A+(f<<3)|0;f=A+((f|1)<<3)|0;l=l<<1;i=h+(l<<3)|0;c[i>>3]=+c[i>>3]+ +c[n>>3]*+c[u>>3]-+c[f>>3]*+c[e>>3];l=h+((l|1)<<3)|0;c[l>>3]=+c[n>>3]*+c[e>>3]+ +c[f>>3]*+c[u>>3]+ +c[l>>3]}s=s+1|0}b=b+1|0}t[g+(w<<2)>>2]=a;i=w}ge(95534,94943,1497,95512);break}case 4:{d=t[e+28>>2]|0;b=t[A+28>>2]|0;A=t[r+28>>2]|0;t[g>>2]=0;i=0;a=0;r:while(1){if((a|0)>=(E|0)){p=i;break A}h=a+1|0;w=B+(h<<2)|0;k=g+(a<<2)|0;o=t[B+(a<<2)>>2]|0;while(1){if((o|0)>=(t[w>>2]|0))break;s=t[y+(o<<2)>>2]|0;u=C+(s+1<<2)|0;e=d+(o<<2)|0;s=t[C+(s<<2)>>2]|0;while(1){if((s|0)>=(t[u>>2]|0))break;a=I+(s<<2)|0;n=t[a>>2]|0;f=Z+(n<<2)|0;l=t[f>>2]|0;if((l|0)<(t[k>>2]|0)){t[f>>2]=i;t[m+(i<<2)>>2]=t[a>>2];t[A+(i<<2)>>2]=P(t[b+(s<<2)>>2]|0,t[e>>2]|0)|0;i=i+1|0}else{if((t[m+(l<<2)>>2]|0)!=(n|0))break r;f=P(t[b+(s<<2)>>2]|0,t[e>>2]|0)|0;v=A+(l<<2)|0;t[v>>2]=(t[v>>2]|0)+f}s=s+1|0}o=o+1|0}t[g+(h<<2)>>2]=i;a=h}ge(95534,94943,1523,95512);break}case 8:{t[g>>2]=0;i=0;a=0;r:while(1){if((a|0)>=(E|0)){p=i;break A}e=a+1|0;b=B+(e<<2)|0;A=g+(a<<2)|0;o=t[B+(a<<2)>>2]|0;while(1){if((o|0)>=(t[b>>2]|0))break;s=t[y+(o<<2)>>2]|0;u=C+(s+1<<2)|0;s=t[C+(s<<2)>>2]|0;while(1){if((s|0)>=(t[u>>2]|0))break;a=I+(s<<2)|0;n=t[a>>2]|0;f=Z+(n<<2)|0;l=t[f>>2]|0;if((l|0)>=(t[A>>2]|0)){if((t[m+(l<<2)>>2]|0)!=(n|0))break r}else{t[f>>2]=i;t[m+(i<<2)>>2]=t[a>>2];i=i+1|0}s=s+1|0}o=o+1|0}t[g+(e<<2)>>2]=i;a=e}ge(95534,94943,1543,95512);break}default:{iK(r);r=0;break e}}}while(0);t[r+8>>2]=p}}while(0);G2(Z)}else r=0;return r|0}function No(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0.0,M=0.0,V=0.0,N=0.0;D=t[e+20>>2]|0;z=t[e+24>>2]|0;W=t[A+20>>2]|0;Z=t[A+24>>2]|0;G=t[r+20>>2]|0;L=t[r+24>>2]|0;Q=t[e+32>>2]|0;if(!((Q|0)==1?(Q|0)==(t[A+32>>2]|0):0))ge(95005,94943,1574,95559);Q=t[e>>2]|0;if(((((t[e+4>>2]|0)==(t[A>>2]|0)?(t[A+4>>2]|0)==(t[r>>2]|0):0)?(k=t[e+16>>2]|0,(k|0)==(t[A+16>>2]|0)):0)?(k|0)==(t[r+16>>2]|0):0)?(w=r+4|0,Y=$F(t[w>>2]<<2)|0,(Y|0)!=0):0){i=0;while(1){if((i|0)>=(t[w>>2]|0)){a=0;i=0;break}t[Y+(i<<2)>>2]=-1;i=i+1|0}e:while(1){if((i|0)>=(Q|0))break;u=i+1|0;b=D+(u<<2)|0;h=-2-i|0;o=t[D+(i<<2)>>2]|0;while(1){if((o|0)>=(t[b>>2]|0)){i=u;continue e}l=t[z+(o<<2)>>2]|0;s=W+(l+1<<2)|0;l=t[W+(l<<2)>>2]|0;while(1){if((l|0)>=(t[s>>2]|0))break;n=t[Z+(l<<2)>>2]|0;f=G+(n+1<<2)|0;n=t[G+(n<<2)>>2]|0;while(1){if((n|0)>=(t[f>>2]|0))break;i=Y+(t[L+(n<<2)>>2]<<2)|0;if((t[i>>2]|0)!=(h|0)){t[i>>2]=h;a=a+1|0}n=n+1|0}l=l+1|0}o=o+1|0}}i=aK(Q,t[w>>2]|0,a,k,1)|0;e:do{if(!i)i=0;else{y=t[i+20>>2]|0;C=t[i+24>>2]|0;A:do{switch(k|0){case 1:{p=t[e+28>>2]|0;m=t[A+28>>2]|0;r=t[r+28>>2]|0;d=t[i+28>>2]|0;t[y>>2]=0;a=0;n=0;r:while(1){if((a|0)>=(Q|0)){I=n;break A}v=a+1|0;g=D+(v<<2)|0;A=y+(a<<2)|0;k=t[D+(a<<2)>>2]|0;while(1){if((k|0)>=(t[g>>2]|0))break;h=t[z+(k<<2)>>2]|0;w=W+(h+1<<2)|0;e=p+(k<<3)|0;h=t[W+(h<<2)>>2]|0;while(1){if((h|0)>=(t[w>>2]|0))break;o=t[Z+(h<<2)>>2]|0;u=G+(o+1<<2)|0;b=m+(h<<3)|0;o=t[G+(o<<2)>>2]|0;while(1){if((o|0)>=(t[u>>2]|0))break;a=L+(o<<2)|0;f=t[a>>2]|0;l=Y+(f<<2)|0;s=t[l>>2]|0;if((s|0)<(t[A>>2]|0)){t[l>>2]=n;t[C+(n<<2)>>2]=t[a>>2];c[d+(n<<3)>>3]=+c[b>>3]*+c[e>>3]*+c[r+(o<<3)>>3];n=n+1|0}else{if((t[C+(s<<2)>>2]|0)!=(f|0))break r;B=d+(s<<3)|0;c[B>>3]=+c[B>>3]+ +c[b>>3]*+c[e>>3]*+c[r+(o<<3)>>3]}o=o+1|0}h=h+1|0}k=k+1|0}t[y+(v<<2)>>2]=n;a=v}ge(95582,94943,1642,95559);break}case 2:{B=t[e+28>>2]|0;E=t[A+28>>2]|0;d=t[r+28>>2]|0;v=t[i+28>>2]|0;t[y>>2]=0;a=0;n=0;r:while(1){if((n|0)>=(Q|0)){I=a;break A}g=n+1|0;m=D+(g<<2)|0;p=y+(n<<2)|0;e=t[D+(n<<2)>>2]|0;while(1){if((e|0)>=(t[m>>2]|0))break;u=t[z+(e<<2)>>2]|0;k=W+(u+1<<2)|0;r=e<<1;A=B+(r<<3)|0;r=B+((r|1)<<3)|0;u=t[W+(u<<2)>>2]|0;while(1){if((u|0)>=(t[k>>2]|0))break;o=t[Z+(u<<2)>>2]|0;b=G+(o+1<<2)|0;w=u<<1;h=E+(w<<3)|0;w=E+((w|1)<<3)|0;o=t[G+(o<<2)>>2]|0;while(1){if((o|0)>=(t[b>>2]|0))break;n=L+(o<<2)|0;f=t[n>>2]|0;l=Y+(f<<2)|0;s=t[l>>2]|0;if((s|0)<(t[p>>2]|0)){t[l>>2]=a;t[C+(a<<2)>>2]=t[n>>2];M=+c[A>>3];V=+c[h>>3];F=+c[r>>3];N=+c[w>>3];l=o<<1;f=d+(l<<3)|0;l=d+((l|1)<<3)|0;s=a<<1;c[v+(s<<3)>>3]=(V*M-N*F)*+c[f>>3]-(N*M+F*V)*+c[l>>3];V=+c[A>>3];F=+c[w>>3];M=+c[r>>3];N=+c[h>>3];c[v+((s|1)<<3)>>3]=(N*M+F*V)*+c[f>>3]+(N*V-M*F)*+c[l>>3];a=a+1|0}else{if((t[C+(s<<2)>>2]|0)!=(f|0))break r;V=+c[A>>3];M=+c[h>>3];N=+c[r>>3];F=+c[w>>3];l=o<<1;f=d+(l<<3)|0;l=d+((l|1)<<3)|0;s=s<<1;n=v+(s<<3)|0;c[n>>3]=+c[n>>3]+(M*V-F*N)*+c[f>>3]-(F*V+N*M)*+c[l>>3];M=+c[A>>3];N=+c[w>>3];V=+c[r>>3];F=+c[h>>3];s=v+((s|1)<<3)|0;c[s>>3]=(F*V+N*M)*+c[f>>3]+(F*M-V*N)*+c[l>>3]+ +c[s>>3]}o=o+1|0}u=u+1|0}e=e+1|0}t[y+(g<<2)>>2]=a;n=g}ge(95582,94943,1674,95559);break}case 4:{p=t[e+28>>2]|0;m=t[A+28>>2]|0;A=t[r+28>>2]|0;r=t[i+28>>2]|0;t[y>>2]=0;a=0;n=0;r:while(1){if((n|0)>=(Q|0)){I=a;break A}d=n+1|0;v=D+(d<<2)|0;g=y+(n<<2)|0;w=t[D+(n<<2)>>2]|0;while(1){if((w|0)>=(t[v>>2]|0))break;u=t[z+(w<<2)>>2]|0;e=W+(u+1<<2)|0;k=p+(w<<2)|0;u=t[W+(u<<2)>>2]|0;while(1){if((u|0)>=(t[e>>2]|0))break;o=t[Z+(u<<2)>>2]|0;b=G+(o+1<<2)|0;h=m+(u<<2)|0;o=t[G+(o<<2)>>2]|0;while(1){if((o|0)>=(t[b>>2]|0))break;n=L+(o<<2)|0;f=t[n>>2]|0;l=Y+(f<<2)|0;s=t[l>>2]|0;if((s|0)<(t[g>>2]|0)){t[l>>2]=a;t[C+(a<<2)>>2]=t[n>>2];E=P(t[h>>2]|0,t[k>>2]|0)|0;E=P(E,t[A+(o<<2)>>2]|0)|0;B=r+(a<<2)|0;t[B>>2]=(t[B>>2]|0)+E;a=a+1|0}else{if((t[C+(s<<2)>>2]|0)!=(f|0))break r;E=P(t[h>>2]|0,t[k>>2]|0)|0;E=P(E,t[A+(o<<2)>>2]|0)|0;B=r+(s<<2)|0;t[B>>2]=(t[B>>2]|0)+E}o=o+1|0}u=u+1|0}w=w+1|0}t[y+(d<<2)>>2]=a;n=d}ge(95582,94943,1706,95559);break}case 8:{t[y>>2]=0;a=0;n=0;r:while(1){if((n|0)>=(Q|0)){I=a;break A}e=n+1|0;k=D+(e<<2)|0;A=y+(n<<2)|0;h=t[D+(n<<2)>>2]|0;while(1){if((h|0)>=(t[k>>2]|0))break;u=t[z+(h<<2)>>2]|0;w=W+(u+1<<2)|0;u=t[W+(u<<2)>>2]|0;while(1){if((u|0)>=(t[w>>2]|0))break;o=t[Z+(u<<2)>>2]|0;b=G+(o+1<<2)|0;o=t[G+(o<<2)>>2]|0;while(1){if((o|0)>=(t[b>>2]|0))break;n=L+(o<<2)|0;f=t[n>>2]|0;l=Y+(f<<2)|0;s=t[l>>2]|0;if((s|0)>=(t[A>>2]|0)){if((t[C+(s<<2)>>2]|0)!=(f|0))break r}else{t[l>>2]=a;t[C+(a<<2)>>2]=t[n>>2];a=a+1|0}o=o+1|0}u=u+1|0}h=h+1|0}t[y+(e<<2)>>2]=a;n=e}ge(95582,94943,1729,95559);break}default:{iK(i);i=0;break e}}}while(0);t[i+8>>2]=I}}while(0);G2(Y)}else i=0;return i|0}function Ro(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;if((t[e+32>>2]|0)!=2)ge(95100,94943,1971,95607);if((A|0)>=1){f=t[e+8>>2]|0;n=f+A|0;if((n|0)>=(t[e+12>>2]|0))xo(e,n+10|0)|0;l=f<<2;n=A<<2;Q6((t[e+20>>2]|0)+l|0,r|0,n|0)|0;Q6((t[e+24>>2]|0)+l|0,i|0,n|0)|0;n=t[e+40>>2]|0;if(n|0){l=P(n,A)|0;f=P(n,f)|0;Q6((t[e+28>>2]|0)+f|0,a|0,l|0)|0}a=e+4|0;f=0;while(1){if((f|0)>=(A|0))break;n=t[r+(f<<2)>>2]|0;if((n|0)>=(t[e>>2]|0))t[e>>2]=n+1;n=t[i+(f<<2)>>2]|0;if((n|0)>=(t[a>>2]|0))t[a>>2]=n+1;f=f+1|0}l=e+8|0;t[l>>2]=(t[l>>2]|0)+A}return e|0}function xo(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;if((t[e+32>>2]|0)==2){r=e+20|0;a=A<<2;t[r>>2]=AM(t[r>>2]|0,a)|0;r=e+24|0;t[r>>2]=AM(t[r>>2]|0,a)|0;r=t[e+40>>2]|0;if((r|0)>0){a=e+28|0;i=t[a>>2]|0;r=P(r,A)|0;if(!i)r=$F(r)|0;else r=AM(i,r)|0;t[a>>2]=r}}else{r=e+24|0;t[r>>2]=AM(t[r>>2]|0,A<<2)|0;r=t[e+40>>2]|0;if((r|0)>0){a=e+28|0;i=t[a>>2]|0;r=P(r,A)|0;if(!i)r=$F(r)|0;else r=AM(i,r)|0;t[a>>2]=r}}t[e+12>>2]=A;return e|0}function Jo(e){e=e|0;var A=0,r=0.0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;e:do{if(!e)e=0;else{o=t[e+20>>2]|0;s=t[e+24>>2]|0;A:do{switch(t[e+16>>2]|0){case 1:{f=t[e+28>>2]|0;i=t[e>>2]|0;A=0;r:while(1){if((A|0)>=(i|0))break A;a=A+1|0;n=t[o+(a<<2)>>2]|0;A=t[o+(A<<2)>>2]|0;r=1.0/+(n-A|0);while(1){if((A|0)>=(n|0)){A=a;continue r}s=f+(A<<3)|0;c[s>>3]=+c[s>>3]*r;A=A+1|0}}}case 2:{a=t[e+28>>2]|0;n=t[e>>2]|0;A=0;r:while(1){if((A|0)>=(n|0))break A;f=A+1|0;l=t[o+(f<<2)>>2]|0;i=t[o+(A<<2)>>2]|0;r=1.0/+(l-i|0);while(1){if((i|0)>=(l|0)){A=f;continue r}if((t[s+(i<<2)>>2]|0)!=(A|0)){u=i<<1;b=a+(u<<3)|0;c[b>>3]=+c[b>>3]*r;u=a+((u|1)<<3)|0;c[u>>3]=+c[u>>3]*r}i=i+1|0}}}case 4:{ge(138394,94943,2192,95648);break}case 8:break;default:{e=0;break e}}}while(0)}}while(0);return e|0}function Ho(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if((e|0)!=0?(A=e+8|0,r=t[A>>2]|0,i=t[e+4>>2]|0,(i|0)==(t[e>>2]|0)):0){n=t[e+24>>2]|0;e=t[e+20>>2]|0;a=aK(i,i,r,8,1)|0;Q6(t[a+20>>2]|0,e|0,(i<<2)+4|0)|0;Q6(t[a+24>>2]|0,n|0,r<<2|0)|0;t[a+8>>2]=t[A>>2];e=lK(a,1)|0;iK(a);e=hK(e)|0;i=e+8|0;r=$F(t[i>>2]<<3)|0;t[e+28>>2]=r;i=t[i>>2]|0;A=0;while(1){if((A|0)>=(i|0))break;c[r+(A<<3)>>3]=1.0;A=A+1|0}t[e+16>>2]=1;t[e+40>>2]=8}else e=0;return e|0}function Po(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;w=t[e+20>>2]|0;k=t[e+24>>2]|0;p=t[e+4>>2]|0;b=t[e>>2]|0;d=p<<2;v=$F(d)|0;g=$F(d+4|0)|0;m=$F(d)|0;d=$F(d)|0;h=g+4|0;e=0;while(1){if((e|0)>=(p|0))break;t[v+(e<<2)>>2]=0;e=e+1|0}t[h>>2]=p;e=0;while(1){if((e|0)>=(p|0)){f=1;c=0;break}t[m+(e<<2)>>2]=-1;e=e+1|0}e:while(1){if((c|0)>=(b|0))break;n=w+(c<<2)|0;o=c+1|0;u=w+(o<<2)|0;e=t[n>>2]|0;while(1){a=t[u>>2]|0;if((e|0)>=(a|0))break;s=h+(t[v+(t[k+(e<<2)>>2]<<2)>>2]<<2)|0;t[s>>2]=(t[s>>2]|0)+-1;e=e+1|0}e=f;s=t[n>>2]|0;while(1){if((s|0)>=(a|0)){f=e;c=o;continue e}f=k+(s<<2)|0;a=v+(t[f>>2]<<2)|0;l=t[a>>2]|0;n=m+(l<<2)|0;if((t[n>>2]|0)<(c|0)){t[n>>2]=c;a=h+(l<<2)|0;if(!(t[a>>2]|0)){t[a>>2]=1;n=e;e=l;a=d+(l<<2)|0}else{t[d+(l<<2)>>2]=e;t[h+(e<<2)>>2]=1;n=e+1|0;a=v+(t[f>>2]<<2)|0}t[a>>2]=e;e=n}else{l=d+(l<<2)|0;t[a>>2]=t[l>>2];l=h+(t[l>>2]<<2)|0;t[l>>2]=(t[l>>2]|0)+1}s=s+1|0;a=t[u>>2]|0}}t[g>>2]=0;e=0;a=0;while(1){if((e|0)>=(f|0))break;w=e+1|0;h=g+(w<<2)|0;k=(t[h>>2]|0)+a|0;t[h>>2]=k;e=w;a=k}t[r>>2]=d;e=0;while(1){if((e|0)>=(p|0)){e=f;break}k=g+(t[v+(e<<2)>>2]<<2)|0;r=t[k>>2]|0;t[k>>2]=r+1;t[d+(r<<2)>>2]=e;e=e+1|0}while(1){if((e|0)<=0)break;p=e+-1|0;t[g+(e<<2)>>2]=t[g+(p<<2)>>2];e=p}t[g>>2]=0;t[i>>2]=g;t[A>>2]=f;G2(m);G2(v);return}function Xo(){return+(+(t8()|0)*4.656612875245797e-10)}function So(e){e=e|0;if((e|0)>1)return(t8()|0)%(e|0)|0|0;else ge(95682,95688,58,95698);return 0}function jo(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;e:do{if((e|0)<1)A=0;else{A=$F(e<<2)|0;r=0;while(1){if((r|0)==(e|0))break;t[A+(r<<2)>>2]=r;r=r+1|0}while(1){if((e|0)<=1)break e;i=So(e)|0;r=e+-1|0;n=A+(r<<2)|0;a=t[n>>2]|0;i=A+(i<<2)|0;t[n>>2]=t[i>>2];t[i>>2]=a;e=r}}}while(0);return A|0}function Uo(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=0;while(1){if((i|0)>=(e|0))break;a=r+(i<<3)|0;c[a>>3]=+c[A+(i<<3)>>3]-+c[a>>3];i=i+1|0}return r|0}function To(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,t=0.0;i=0;a=0.0;while(1){if((i|0)>=(e|0))break;t=+c[r+(i<<3)>>3]*+c[A+(i<<3)>>3]+a;i=i+1|0;a=t}return+a}function Oo(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0,t=0;a=0;while(1){if((a|0)>=(e|0))break;t=r+(a<<3)|0;c[t>>3]=+c[t>>3]*i+ +c[A+(a<<3)>>3];a=a+1|0}return r|0}function _o(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0,t=0;a=0;while(1){if((a|0)>=(e|0))break;t=A+(a<<3)|0;c[t>>3]=+c[r+(a<<3)>>3]*i+ +c[t>>3];a=a+1|0}return A|0}function qo(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0,n=0.0;t=P(r,A)|0;i=P(i,A)|0;a=0.0;r=0;while(1){if((r|0)>=(A|0))break;n=+c[e+(r+t<<3)>>3]-+c[e+(r+i<<3)>>3];a=n*n+a;r=r+1|0}n=+D(+a);return+(n>1.0e-15?n:1.0e-15)}function Ko(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0,n=0.0;t=P(r,A)|0;i=P(i,A)|0;a=0.0;r=0;while(1){if((r|0)>=(A|0))break;n=+c[e+(r+t<<3)>>3]-+c[e+(r+i<<3)>>3];a=n*n+a;r=r+1|0}return+ +D(+a)}function $o(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,t=0.0;i=0.0;a=0;while(1){if((a|0)>=(r|0))break;t=+c[e+(a<<3)>>3]-+c[A+(a<<3)>>3];i=t*t+i;a=a+1|0}return+ +D(+i)}function eu(e,A,r,i,a,t,n){e=+e;A=+A;r=+r;i=+i;a=a|0;t=t|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0,v=0.0;w=h;h=h+80|0;u=w+48|0;o=w+24|0;b=w;f=0;while(1){if((f|0)>=(t|0)){l=0;break}k=+c[n+(f<<3)>>3];c[u+(f<<3)>>3]=k;c[o+(f<<3)>>3]=k;f=f+1|0}while(1){if((l|0)>=(a|0))break;s=P(l,t)|0;f=0;while(1){if((f|0)>=(t|0))break;v=+c[n+(f+s<<3)>>3];d=u+(f<<3)|0;k=+c[d>>3];c[d>>3]=v>3];c[d>>3]=v>k?v:k;f=f+1|0}l=l+1|0}k=+c[o>>3]-+c[u>>3];r=k!=0.0?(r-e)/k:1.0;k=+c[o+8>>3]-+c[u+8>>3];v=(i-A)/k;r=k!=0.0?r>3]=e;c[b+8>>3]=A;c[b+16>>3]=0.0;l=0;while(1){if((l|0)>=(a|0))break;s=P(l,t)|0;f=0;while(1){if((f|0)>=(t|0))break;d=n+(f+s<<3)|0;c[d>>3]=(+c[d>>3]-+c[u+(f<<3)>>3])*r+ +c[b+(f<<3)>>3];f=f+1|0}l=l+1|0}h=w;return}function Au(e,A){e=e|0;A=A|0;if((gk(e)|0)==1){e=t[(t[(sd(e)|0)+16>>2]|0)+132>>2]|0;t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;t[e+12>>2]=0}else{ru(e);if(!((mx(Hw(A,95704)|0)|0)<<24>>24))A=Nb(e,186208)|0;else A=iu(e)|0;Ub(e,A,186208);au(A)}return}function ru(e){e=e|0;var A=0;A=Bd(t[t[(t[(sd(e)|0)+16>>2]|0)+112>>2]>>2]|0)|0;e=t[46925]|0;if((A|0)!=(e|0)){t[46555]=0;t[46925]=A;t[46926]=zw(A,0,95713,0)|0;t[46927]=zw(t[46925]|0,1,95721,0)|0;t[46928]=zw(t[46925]|0,1,95738,0)|0;e=t[46925]|0}t[46929]=Hw(e,95738)|0;zb(186208);t[46554]=1;c[23280]=+wx(t[46925]|0,t[46926]|0,1.0,0.0);t[46556]=t[46927];t[46557]=t[46928];t[46558]=t[46929];return}function iu(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+144|0;i=a;r=a+8|0;A=t[46555]|0;t[46555]=A+1;t[i>>2]=A;T4(r,96234,i)|0;r=Wb(Rv(e,r,1)|0)|0;i=r+8|0;A=sd(e)|0;while(1){if(!A)break;hd(t[i>>2]|0,A,1)|0;t[(t[(t[A+16>>2]|0)+112>>2]|0)+12>>2]=r;A=cd(e,A)|0}h=a;return r|0}function au(e){e=e|0;jb(e);return}function tu(e,A){e=e|0;A=A|0;var r=0;r=$F(32)|0;t[r>>2]=4;c[r+8>>3]=.75;t[r+16>>2]=1073741824;t[r+20>>2]=1;t[r+24>>2]=e;t[r+28>>2]=A;return r|0}function nu(e){e=e|0;G2(e);return}function fu(e){e=e|0;var A=0,r=0;if(!e)return;r=t[e+8>>2]|0;do{if(r|0){if(t[e>>2]|0){iK(r);A=t[e+12>>2]|0;if(!A)break;iK(A);break}if(t[e+36>>2]|0?(iK(r),A=t[e+12>>2]|0,A|0):0)iK(A)}}while(0);iK(t[e+16>>2]|0);iK(t[e+20>>2]|0);A=t[e+24>>2]|0;if(A|0?(t[e>>2]|0)>0:0)G2(A);fu(t[e+28>>2]|0);G2(e);return}function lu(e,A,r,i,a,n,f,l,s,o){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;o=o|0;var u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0.0,p=0;p=h;h=h+32|0;u=p+16|0;b=p+12|0;w=p+8|0;k=p+4|0;d=p;t[u>>2]=e;t[b>>2]=0;t[w>>2]=0;t[k>>2]=0;t[d>>2]=0;t[f>>2]=0;t[l>>2]=0;t[A>>2]=0;t[n>>2]=0;t[i>>2]=0;v=s+28|0;g=s+8|0;m=+(t[e+4>>2]|0);a=r;do{su(e,u,a,b,0,d,w,k,s,o);a=t[u>>2]|0;if(!a)break;r=t[a+4>>2]|0;a=t[f>>2]|0;if(!a){t[f>>2]=t[w>>2];t[l>>2]=t[k>>2]}else{e=Vo(a,t[w>>2]|0)|0;iK(t[f>>2]|0);iK(t[w>>2]|0);t[f>>2]=e;e=Vo(t[k>>2]|0,t[l>>2]|0)|0;iK(t[l>>2]|0);iK(t[k>>2]|0);t[l>>2]=e}a=t[A>>2]|0;if(a|0)iK(a);t[A>>2]=t[u>>2];a=t[i>>2]|0;if(a|0)iK(a);a=t[b>>2]|0;t[i>>2]=a;e=t[n>>2]|0;if(e){G2(e);a=t[b>>2]|0}t[n>>2]=t[d>>2];e=t[u>>2]|0;t[d>>2]=0;if(!(+c[g>>3]*m<+(r|0)))break}while((t[v>>2]|0)==1);h=p;return}function su(e,A,r,i,a,n,f,l,s,o){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;o=o|0;var u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0.0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0;W=h;h=h+32|0;L=W+28|0;k=W+24|0;Z=W+20|0;Q=W+16|0;b=W+12|0;D=W+8|0;z=W+4|0;p=W;t[L>>2]=0;t[k>>2]=0;t[Q>>2]=0;t[D>>2]=0;t[z>>2]=0;t[A>>2]=0;t[i>>2]=0;t[f>>2]=0;t[l>>2]=0;G=t[e>>2]|0;w=s+24|0;t[o>>2]=t[w>>2];u=t[w>>2]|0;e:do{switch(u|0){case 12:{t[w>>2]=3;t[o>>2]=3;su(e,A,r,i,a,n,f,l,s,o);if((((t[A>>2]|0)==0?(t[w>>2]=4,t[o>>2]=4,su(e,A,r,i,a,n,f,l,s,o),(t[A>>2]|0)==0):0)?(t[w>>2]=6,t[o>>2]=6,su(e,A,r,i,a,n,f,l,s,o),(t[A>>2]|0)==0):0)?(t[w>>2]=9,t[o>>2]=9,su(e,A,r,i,a,n,f,l,s,o),(t[A>>2]|0)==0):0){t[w>>2]=2;t[o>>2]=2;su(e,A,r,i,a,n,f,l,s,o)}t[w>>2]=12;w=0;k=0;s=0;b=0;u=0;o=0;break}case 9:case 10:{r=t[s+20>>2]|0;if((u|0)==9)ku(e,r,Q,b,Z);else du(e,r,Q,b,Z);m=t[e+20>>2]|0;p=t[e+24>>2]|0;g=t[b>>2]|0;if(!(t[s+28>>2]|0)){if((g|0)==(G|0)?1:+c[s+8>>3]*+(G|0)<+(g|0)){w=0;k=0;s=0;b=0;u=0;o=0;break e}}else if((g|0)==(G|0)){w=0;k=0;s=0;b=0;u=0;o=0;break e}if((g|0)>=(t[s>>2]|0)){C=t[Z>>2]|0;y=C<<2;B=$F(y)|0;y=$F(y)|0;C=$F(C<<3)|0;t[Z>>2]=0;v=t[Q>>2]|0;d=0;b=0;A:while(1){if((d|0)>=(G|0))break;r=v+(d<<2)|0;if((t[r>>2]|0)!=-1){t[B+(b<<2)>>2]=d;t[y+(t[Z>>2]<<2)>>2]=t[r>>2];k=t[Z>>2]|0;s=k+1|0;t[Z>>2]=s;c[C+(k<<3)>>3]=1.0;d=d+1|0;b=s;continue}u=t[m+(d<<2)>>2]|0;k=d+1|0;s=m+(k<<2)|0;w=t[s>>2]|0;r=0;o=u;while(1){if((o|0)>=(w|0))break;r=((t[v+(t[p+(o<<2)>>2]<<2)>>2]|0)>>>31^1)+r|0;o=o+1|0}E=1.0/+(r|0);r=w;while(1){if((u|0)>=(r|0)){d=k;continue A}o=p+(u<<2)|0;if((t[v+(t[o>>2]<<2)>>2]|0)>-1){t[B+(b<<2)>>2]=d;t[y+(t[Z>>2]<<2)>>2]=t[v+(t[o>>2]<<2)>>2];r=t[Z>>2]|0;o=r+1|0;t[Z>>2]=o;c[C+(r<<3)>>3]=E;r=t[s>>2]|0}else o=b;u=u+1|0;b=o}}G=kK(b,G,g,B,y,C,1,8)|0;t[f>>2]=G;G=rK(G)|0;t[l>>2]=G;f=No(G,e,t[f>>2]|0)|0;t[A>>2]=f;if(!f){w=C;k=y;s=B;b=B;u=y;o=C}else{Fo(t[l>>2]|0,a,n,0);w=t[A>>2]|0;k=w+36|0;t[k>>2]=t[k>>2]|3;t[A>>2]=hK(w)|0;t[i>>2]=0;w=C;k=y;s=B;b=B;u=y;o=C}}else{w=0;k=0;s=0;b=0;u=0;o=0}break}case 5:{I=26;break}case 1:{o=s+20|0;bu(e,t[o>>2]|0,L,k);r=t[w>>2]|0;if((r|0)==2){r=o;I=24}else I=25;break}case 2:{r=s+20|0;I=24;break}case 3:{cu(e,t[s+20>>2]|0,D,z,p);I=12;break}case 4:{ou(e,t[s+20>>2]|0,D,z,p);I=12;break}case 6:{uu(e,D,z,p);I=12;break}default:{w=0;k=0;s=0;b=0;u=0;o=0}}}while(0);do{if((I|0)==12){d=t[p>>2]|0;if(!(t[s+28>>2]|0)){if((d|0)==(G|0)?1:+c[s+8>>3]*+(G|0)<+(d|0)){w=0;k=0;s=0;b=0;u=0;o=0;break}}else if((d|0)==(G|0)){w=0;k=0;s=0;b=0;u=0;o=0;break}if((d|0)>=(t[s>>2]|0)){g=G<<2;v=$F(g)|0;g=$F(g)|0;m=$F(G<<3)|0;t[Z>>2]=0;b=t[z>>2]|0;w=t[D>>2]|0;u=0;r=0;e:while(1){if((u|0)>=(t[p>>2]|0))break;k=u+1|0;s=b+(k<<2)|0;o=t[b+(u<<2)>>2]|0;while(1){if((o|0)>=(t[s>>2]|0)){u=k;continue e}t[v+(r<<2)>>2]=t[w+(o<<2)>>2];t[g+(t[Z>>2]<<2)>>2]=u;y=t[Z>>2]|0;C=y+1|0;t[Z>>2]=C;c[m+(y<<3)>>3]=1.0;o=o+1|0;r=C}}G=kK(r,G,d,v,g,m,1,8)|0;t[f>>2]=G;t[l>>2]=rK(G)|0;t[i>>2]=0;f=No(t[l>>2]|0,e,t[f>>2]|0)|0;t[A>>2]=f;if(!f){w=m;k=g;s=v;b=v;u=g;o=m}else{Fo(t[l>>2]|0,a,n,0);t[l>>2]=Jo(t[l>>2]|0)|0;w=t[A>>2]|0;k=w+36|0;t[k>>2]=t[k>>2]|3;t[A>>2]=hK(w)|0;w=m;k=g;s=v;b=v;u=g;o=m}}else{w=0;k=0;s=0;b=0;u=0;o=0}}else if((I|0)==24){hu(e,t[r>>2]|0,L,k);r=t[w>>2]|0;I=25}}while(0);if((I|0)==25)if((r|0)==5)I=26;else I=27;if((I|0)==26){wu(e,t[s+20>>2]|0,L,k);I=27}do{if((I|0)==27){r=t[k>>2]|0;if(!(t[s+28>>2]|0)){if((r|0)==(G|0)?1:+c[s+8>>3]*+(G|0)<+(r|0)){w=0;k=0;s=0;b=0;u=0;o=0;break}}else if((r|0)==(G|0)){w=0;k=0;s=0;b=0;u=0;o=0;break}if((r|0)>=(t[s>>2]|0)){v=G<<2;d=$F(v)|0;v=$F(v)|0;g=$F(G<<3)|0;t[Z>>2]=0;k=t[L>>2]|0;r=0;w=0;while(1){if((w|0)>=(G|0))break;o=k+(w<<2)|0;u=t[o>>2]|0;if((u|0)>-1){t[d+(t[Z>>2]<<2)>>2]=w;t[v+(t[Z>>2]<<2)>>2]=r;I=t[Z>>2]|0;b=I+1|0;t[Z>>2]=b;c[g+(I<<3)>>3]=1.0;if((u|0)!=(w|0)){t[d+(b<<2)>>2]=t[o>>2];t[v+(t[Z>>2]<<2)>>2]=r;I=t[Z>>2]|0;t[Z>>2]=I+1;c[g+(I<<3)>>3]=1.0;t[k+(t[o>>2]<<2)>>2]=-1}t[o>>2]=-1;r=r+1|0}w=w+1|0}G=kK(t[Z>>2]|0,G,r,d,v,g,1,8)|0;t[f>>2]=G;G=rK(G)|0;t[l>>2]=G;f=No(G,e,t[f>>2]|0)|0;t[A>>2]=f;if(!f){w=g;k=v;s=d;b=d;u=v;o=g}else{Fo(t[l>>2]|0,a,n,0);t[l>>2]=Jo(t[l>>2]|0)|0;w=t[A>>2]|0;k=w+36|0;t[k>>2]=t[k>>2]|3;t[A>>2]=hK(w)|0;t[i>>2]=0;w=g;k=v;s=d;b=d;u=v;o=g}}else{w=0;k=0;s=0;b=0;u=0;o=0}}}while(0);r=t[L>>2]|0;if(r|0)G2(r);r=t[Q>>2]|0;if(r|0)G2(r);if(s|0)G2(b);if(k|0)G2(u);if(w|0)G2(o);r=t[D>>2]|0;if(r|0)G2(r);r=t[z>>2]|0;if(r|0)G2(r);h=W;return}function cu(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0.0,s=0,o=0,u=0,b=0,h=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;g=t[e+20>>2]|0;m=t[e+24>>2]|0;E=t[e>>2]|0;p=E<<2;t[r>>2]=$F(p)|0;t[i>>2]=$F(p+4|0)|0;p=$F(p)|0;n=0;while(1){if((n|0)>=(E|0))break;t[p+(n<<2)>>2]=n;n=n+1|0}t[a>>2]=0;d=t[i>>2]|0;t[d>>2]=0;v=t[e+28>>2]|0;e:do{if(!A){n=0;e=0;A:while(1){while(1){if((e|0)>=(E|0)){e=0;l=0.0;A=0;break A}A=e;e=e+1|0;if((t[p+(A<<2)>>2]|0)==-1)continue;A=t[g+(A<<2)>>2]|0;if(((t[g+(e<<2)>>2]|0)-A|0)==1)break}o=t[m+(A<<2)>>2]|0;t[p+(o<<2)>>2]=-1;u=t[r>>2]|0;t[u+(n<<2)>>2]=o;b=g+(o+1<<2)|0;s=t[g+(o<<2)>>2]|0;n=n+1|0;while(1){if((s|0)>=(t[b>>2]|0))break;A=m+(s<<2)|0;f=t[A>>2]|0;if((o|0)!=(f|0)?((t[g+(f+1<<2)>>2]|0)-(t[g+(f<<2)>>2]|0)|0)==1:0){t[p+(f<<2)>>2]=-1;t[u+(n<<2)>>2]=t[A>>2];n=n+1|0}s=s+1|0}A=t[a>>2]|0;f=t[d+(A<<2)>>2]|0;if((n-f|0)<5){i=A+1|0;t[a>>2]=i;t[d+(i<<2)>>2]=n;continue}f=f+1|0;A=A+1|0;t[a>>2]=A;t[d+(A<<2)>>2]=f;A=f;while(1){if(!((f|0)<(n|0)&(A|0)<(n|0)))continue A;i=f+3|0;i=(n|0)<(i|0)?n:i;k=(t[a>>2]|0)+1|0;t[a>>2]=k;t[d+(k<<2)>>2]=i;A=A+1|0;f=i}}A:while(1){do{b=A;while(1){if((b|0)>=(E|0)){e=0;break A}w=p+(b<<2)|0;f=t[w>>2]|0;if((f|0)!=-1)break;b=b+1|0}A=b+1|0;k=t[g+(A<<2)>>2]|0;o=1;u=t[g+(b<<2)>>2]|0;while(1){if((u|0)>=(k|0))break;s=t[m+(u<<2)>>2]|0;if((b|0)!=(s|0)?(t[p+(s<<2)>>2]|0)!=-1:0)if((f|0)!=-1){h=+c[v+(u<<3)>>3];if((o|0)==0?!(h>l):0)o=0;else{o=0;e=s;l=h}}else f=-1;u=u+1|0}}while((o|0)!=0);t[p+(e<<2)>>2]=-1;t[w>>2]=-1;k=t[r>>2]|0;t[k+(n<<2)>>2]=b;i=n+2|0;t[k+(n+1<<2)>>2]=e;k=(t[a>>2]|0)+1|0;t[a>>2]=k;t[d+(k<<2)>>2]=i;n=i}while(1){if((e|0)>=(E|0))break e;if((t[p+(e<<2)>>2]|0)==(e|0)){m=n+1|0;t[(t[r>>2]|0)+(n<<2)>>2]=e;n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[d+(n<<2)>>2]=m;n=m}e=e+1|0}}else{d=jo(E)|0;b=0;n=0;while(1){if((b|0)>=(E|0)){k=0;e=0;l=0.0;break}e=t[d+(b<<2)>>2]|0;A:do{if((t[p+(e<<2)>>2]|0)!=-1?(w=t[g+(e<<2)>>2]|0,((t[g+(e+1<<2)>>2]|0)-w|0)==1):0){s=t[m+(w<<2)>>2]|0;t[p+(s<<2)>>2]=-1;o=t[r>>2]|0;t[o+(n<<2)>>2]=s;u=g+(s+1<<2)|0;f=t[g+(s<<2)>>2]|0;n=n+1|0;while(1){if((f|0)>=(t[u>>2]|0))break;e=m+(f<<2)|0;A=t[e>>2]|0;if((s|0)!=(A|0)?((t[g+(A+1<<2)>>2]|0)-(t[g+(A<<2)>>2]|0)|0)==1:0){t[p+(A<<2)>>2]=-1;t[o+(n<<2)>>2]=t[e>>2];n=n+1|0}f=f+1|0}f=t[i>>2]|0;e=t[a>>2]|0;A=t[f+(e<<2)>>2]|0;if((n-A|0)<5){k=e+1|0;t[a>>2]=k;t[f+(k<<2)>>2]=n;break}A=A+1|0;e=e+1|0;t[a>>2]=e;t[f+(e<<2)>>2]=A;e=A;while(1){if(!((A|0)<(n|0)&(e|0)<(n|0)))break A;k=A+3|0;k=(n|0)<(k|0)?n:k;u=(t[a>>2]|0)+1|0;t[a>>2]=u;t[f+(u<<2)>>2]=k;e=e+1|0;A=k}}}while(0);b=b+1|0}while(1){if((k|0)>=(E|0)){e=0;break}u=t[d+(k<<2)>>2]|0;b=p+(u<<2)|0;A=t[b>>2]|0;if((A|0)!=-1){w=t[g+(u+1<<2)>>2]|0;s=1;o=t[g+(u<<2)>>2]|0;while(1){if((o|0)>=(w|0))break;f=t[m+(o<<2)>>2]|0;if((u|0)!=(f|0)?(t[p+(f<<2)>>2]|0)!=-1:0)if((A|0)!=-1){h=+c[v+(o<<3)>>3];if((s|0)==0?!(h>l):0)s=0;else{s=0;e=f;l=h}}else A=-1;o=o+1|0}if(!s){t[p+(e<<2)>>2]=-1;t[b>>2]=-1;b=t[r>>2]|0;t[b+(n<<2)>>2]=u;w=n+2|0;t[b+(n+1<<2)>>2]=e;b=t[i>>2]|0;n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[b+(n<<2)>>2]=w;n=w}}k=k+1|0}while(1){if((e|0)>=(E|0))break;if((t[p+(e<<2)>>2]|0)==(e|0)){m=n+1|0;t[(t[r>>2]|0)+(n<<2)>>2]=e;g=t[i>>2]|0;n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[g+(n<<2)>>2]=m;n=m}e=e+1|0}G2(d)}}while(0);G2(p);return}function ou(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0.0,l=0,s=0,o=0,u=0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;I=h;h=h+16|0;k=I+8|0;y=I+4|0;C=I;t[y>>2]=0;t[C>>2]=0;p=t[e+20>>2]|0;m=t[e+24>>2]|0;E=t[e>>2]|0;B=E<<2;t[r>>2]=$F(B)|0;t[i>>2]=$F(B+4|0)|0;B=$F(B)|0;n=0;while(1){if((n|0)>=(E|0))break;t[B+(n<<2)>>2]=n;n=n+1|0}Po(e,k,y,C);t[a>>2]=0;v=t[i>>2]|0;t[v>>2]=0;g=t[e+28>>2]|0;n=0;e=0;e:while(1){s=t[k>>2]|0;o=t[C>>2]|0;do{if((e|0)>=(s|0))break e;u=e;e=e+1|0;w=o+(e<<2)|0;l=t[w>>2]|0;u=t[o+(u<<2)>>2]|0}while((l-u|0)<2);o=t[y>>2]|0;s=t[v+(t[a>>2]<<2)>>2]|0;while(1){if((u|0)>=(l|0))break;d=o+(u<<2)|0;t[B+(t[d>>2]<<2)>>2]=-1;l=n+1|0;t[(t[r>>2]|0)+(n<<2)>>2]=t[d>>2];if((l-s|0)>3){n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[v+(n<<2)>>2]=l;n=l}else n=s;s=n;u=u+1|0;n=l;l=t[w>>2]|0}if((n|0)<=(s|0))continue;d=(t[a>>2]|0)+1|0;t[a>>2]=d;t[v+(d<<2)>>2]=n}e:do{if(!A){e=0;f=0.0;l=0;A:while(1){do{A=l;while(1){if((A|0)>=(E|0)){e=0;break A}k=B+(A<<2)|0;s=t[k>>2]|0;if((s|0)!=-1)break;A=A+1|0}l=A+1|0;d=t[p+(l<<2)>>2]|0;u=1;w=t[p+(A<<2)>>2]|0;while(1){if((w|0)>=(d|0))break;o=t[m+(w<<2)>>2]|0;if((A|0)!=(o|0)?(t[B+(o<<2)>>2]|0)!=-1:0)if((s|0)!=-1){b=+c[g+(w<<3)>>3];if((u|0)==0?!(b>f):0)u=0;else{u=0;e=o;f=b}}else s=-1;w=w+1|0}}while((u|0)!=0);t[B+(e<<2)>>2]=-1;t[k>>2]=-1;d=t[r>>2]|0;t[d+(n<<2)>>2]=A;i=n+2|0;t[d+(n+1<<2)>>2]=e;d=(t[a>>2]|0)+1|0;t[a>>2]=d;t[v+(d<<2)>>2]=i;n=i}while(1){if((e|0)>=(E|0))break e;if((t[B+(e<<2)>>2]|0)==(e|0)){p=n+1|0;t[(t[r>>2]|0)+(n<<2)>>2]=e;n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[v+(n<<2)>>2]=p;n=p}e=e+1|0}}else{v=jo(E)|0;d=0;e=0;f=0.0;while(1){if((d|0)>=(E|0)){e=0;break}w=t[v+(d<<2)>>2]|0;A=B+(w<<2)|0;l=t[A>>2]|0;if((l|0)!=-1){k=t[p+(w+1<<2)>>2]|0;o=1;u=t[p+(w<<2)>>2]|0;while(1){if((u|0)>=(k|0))break;s=t[m+(u<<2)>>2]|0;if((w|0)!=(s|0)?(t[B+(s<<2)>>2]|0)!=-1:0)if((l|0)!=-1){b=+c[g+(u<<3)>>3];if((o|0)==0?!(b>f):0)o=0;else{o=0;e=s;f=b}}else l=-1;u=u+1|0}if(!o){t[B+(e<<2)>>2]=-1;t[A>>2]=-1;A=t[r>>2]|0;t[A+(n<<2)>>2]=w;k=n+2|0;t[A+(n+1<<2)>>2]=e;A=t[i>>2]|0;n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[A+(n<<2)>>2]=k;n=k}}d=d+1|0}while(1){if((e|0)>=(E|0))break;if((t[B+(e<<2)>>2]|0)==(e|0)){p=n+1|0;t[(t[r>>2]|0)+(n<<2)>>2]=e;m=t[i>>2]|0;n=(t[a>>2]|0)+1|0;t[a>>2]=n;t[m+(n<<2)>>2]=p;n=p}e=e+1|0}G2(v)}}while(0);G2(t[y>>2]|0);G2(t[C>>2]|0);G2(B);h=I;return}function uu(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;d=t[e+20>>2]|0;v=t[e+24>>2]|0;p=t[e>>2]|0;m=p<<2;t[A>>2]=$F(m)|0;t[r>>2]=$F(m+4|0)|0;m=$F(m)|0;k=$F(p<<4)|0;a=0;while(1){if((a|0)>=(p|0))break;t[m+(a<<2)>>2]=a;a=a+1|0}t[i>>2]=0;t[t[r>>2]>>2]=0;w=t[e+28>>2]|0;g=jo(p)|0;a=0;u=0;while(1){if((u|0)>=(p|0)){h=0;break}e=t[g+(u<<2)>>2]|0;e:do{if((t[m+(e<<2)>>2]|0)!=-1?(b=t[d+(e<<2)>>2]|0,((t[d+(e+1<<2)>>2]|0)-b|0)==1):0){l=t[v+(b<<2)>>2]|0;t[m+(l<<2)>>2]=-1;s=t[A>>2]|0;t[s+(a<<2)>>2]=l;o=d+(l+1<<2)|0;f=t[d+(l<<2)>>2]|0;a=a+1|0;while(1){if((f|0)>=(t[o>>2]|0))break;e=v+(f<<2)|0;n=t[e>>2]|0;if((l|0)!=(n|0)?((t[d+(n+1<<2)>>2]|0)-(t[d+(n<<2)>>2]|0)|0)==1:0){t[m+(n<<2)>>2]=-1;t[s+(a<<2)>>2]=t[e>>2];a=a+1|0}f=f+1|0}f=t[r>>2]|0;e=t[i>>2]|0;n=t[f+(e<<2)>>2]|0;if((a-n|0)<5){h=e+1|0;t[i>>2]=h;t[f+(h<<2)>>2]=a;break}n=n+1|0;e=e+1|0;t[i>>2]=e;t[f+(e<<2)>>2]=n;e=n;while(1){if(!((n|0)<(a|0)&(e|0)<(a|0)))break e;h=n+3|0;h=(a|0)<(h|0)?a:h;o=(t[i>>2]|0)+1|0;t[i>>2]=o;t[f+(o<<2)>>2]=h;e=e+1|0;n=h}}}while(0);u=u+1|0}while(1){if((h|0)>=(p|0)){e=0;break}u=t[g+(h<<2)>>2]|0;b=m+(u<<2)|0;e=t[b>>2]|0;if((e|0)!=-1){o=t[d+(u+1<<2)>>2]|0;n=0;s=t[d+(u<<2)>>2]|0;while(1){if((s|0)>=(o|0))break;l=t[v+(s<<2)>>2]|0;if((u|0)!=(l|0)?(t[m+(l<<2)>>2]|0)!=-1:0){f=n<<1;if((e|0)==-1)e=-1;else{c[k+(f<<3)>>3]=+(l|0);c[k+((f|1)<<3)>>3]=+c[w+(s<<3)>>3];n=n+1|0}}s=s+1|0}if((n|0)>0){_4(k,n,16,81);n=(n|0)<3?n:3;e=0;while(1){if((e|0)>=(n|0))break;o=~~+c[k+(e<<1<<3)>>3];t[m+(o<<2)>>2]=-1;t[(t[A>>2]|0)+(a<<2)>>2]=o;e=e+1|0;a=a+1|0}t[b>>2]=-1;b=a+1|0;t[(t[A>>2]|0)+(a<<2)>>2]=u;u=t[r>>2]|0;a=(t[i>>2]|0)+1|0;t[i>>2]=a;t[u+(a<<2)>>2]=b;a=b}}h=h+1|0}while(1){if((e|0)>=(p|0))break;if((t[m+(e<<2)>>2]|0)==(e|0)){v=a+1|0;t[(t[A>>2]|0)+(a<<2)>>2]=e;d=t[r>>2]|0;a=(t[i>>2]|0)+1|0;t[i>>2]=a;t[d+(a<<2)>>2]=v;a=v}e=e+1|0}G2(g);G2(m);return}function bu(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;w=t[e+20>>2]|0;k=t[e+24>>2]|0;d=t[e>>2]|0;a=t[e+4>>2]|0;c=$F(d<<2)|0;t[r>>2]=c;e=0;while(1){if((e|0)>=(d|0))break;t[c+(e<<2)>>2]=e;e=e+1|0}t[i>>2]=a;e:do{if(!A){a=0;A:while(1){if((a|0)>=(d|0))break e;A=a+1|0;n=w+(A<<2)|0;f=c+(a<<2)|0;l=c+(a<<2)|0;e=t[w+(a<<2)>>2]|0;while(1){if((e|0)>=(t[n>>2]|0)){a=A;continue A}s=k+(e<<2)|0;r=t[s>>2]|0;if(((a|0)!=(r|0)?(h=c+(r<<2)|0,(t[h>>2]|0)==(r|0)):0)?(t[f>>2]|0)==(a|0):0){t[h>>2]=a;t[l>>2]=t[s>>2];t[i>>2]=(t[i>>2]|0)+-1}e=e+1|0}}}else{A=jo(d)|0;e=0;while(1){if((e|0)>=(d|0))break;n=t[A+(e<<2)>>2]|0;f=w+(n+1<<2)|0;a=t[w+(n<<2)>>2]|0;while(1){if((a|0)>=(t[f>>2]|0))break;l=k+(a<<2)|0;s=t[l>>2]|0;if(((n|0)!=(s|0)?(o=t[r>>2]|0,u=o+(s<<2)|0,(t[u>>2]|0)==(s|0)):0)?(b=o+(n<<2)|0,(t[b>>2]|0)==(n|0)):0){t[u>>2]=n;t[b>>2]=t[l>>2];t[i>>2]=(t[i>>2]|0)+-1}a=a+1|0}e=e+1|0}G2(A)}}while(0);return}function hu(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0;d=t[e+20>>2]|0;v=t[e+24>>2]|0;g=t[e>>2]|0;n=t[e+4>>2]|0;h=$F(g<<2)|0;t[r>>2]=h;a=0;while(1){if((a|0)>=(g|0))break;t[h+(a<<2)>>2]=a;a=a+1|0}t[i>>2]=n;k=t[e+28>>2]|0;e:do{if(!A){a=0;f=0.0;s=0;while(1){if((s|0)>=(g|0))break e;o=s+1|0;u=t[d+(o<<2)>>2]|0;b=h+(s<<2)|0;n=1;A=t[d+(s<<2)>>2]|0;while(1){if((A|0)>=(u|0))break;e=t[v+(A<<2)>>2]|0;if(((s|0)!=(e|0)?(t[h+(e<<2)>>2]|0)==(e|0):0)?(t[b>>2]|0)==(s|0):0){l=+c[k+(A<<3)>>3];if((n|0)==0?!(l>f):0)n=0;else{n=0;a=e;f=l}}A=A+1|0}if(n|0){s=o;continue}t[h+(a<<2)>>2]=s;t[h+(s<<2)>>2]=a;t[i>>2]=(t[i>>2]|0)+-1;s=o}}else{w=jo(g)|0;h=0;a=0;f=0.0;while(1){if((h|0)>=(g|0))break;s=t[w+(h<<2)>>2]|0;o=t[r>>2]|0;u=o+(s<<2)|0;if((t[u>>2]|0)==(s|0)){b=t[d+(s+1<<2)>>2]|0;A=t[d+(s<<2)>>2]|0;n=1;while(1){if((A|0)>=(b|0))break;e=t[v+(A<<2)>>2]|0;if((s|0)!=(e|0)?(t[o+(e<<2)>>2]|0)==(e|0):0){l=+c[k+(A<<3)>>3];if((n|0)==0?!(l>f):0)n=0;else{n=0;a=e;f=l}}A=A+1|0}if(!n){t[o+(a<<2)>>2]=s;t[u>>2]=a;t[i>>2]=(t[i>>2]|0)+-1}}h=h+1|0}G2(w)}}while(0);return}function wu(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,h=0.0,w=0,k=0,d=0,v=0,g=0,m=0;v=t[e+20>>2]|0;g=t[e+24>>2]|0;m=t[e>>2]|0;n=t[e+4>>2]|0;w=$F(m<<2)|0;t[r>>2]=w;a=0;while(1){if((a|0)>=(m|0))break;t[w+(a<<2)>>2]=a;a=a+1|0}t[i>>2]=n;d=t[e+28>>2]|0;e:do{if(!A){a=0;f=0.0;s=0;while(1){if((s|0)>=(m|0))break e;A=t[v+(s<<2)>>2]|0;o=s+1|0;u=t[v+(o<<2)>>2]|0;b=w+(s<<2)|0;h=+(u-A|0);n=1;while(1){if((A|0)>=(u|0))break;e=t[g+(A<<2)>>2]|0;if(((s|0)!=(e|0)?(t[w+(e<<2)>>2]|0)==(e|0):0)?(t[b>>2]|0)==(s|0):0){l=+c[d+(A<<3)>>3]/(+((t[v+(e+1<<2)>>2]|0)-(t[v+(e<<2)>>2]|0)|0)*h);if((n|0)==0?!(l>f):0)n=0;else{n=0;a=e;f=l}}A=A+1|0}if(n|0){s=o;continue}t[w+(a<<2)>>2]=s;t[w+(s<<2)>>2]=a;t[i>>2]=(t[i>>2]|0)+-1;s=o}}else{k=jo(m)|0;w=0;a=0;f=0.0;while(1){if((w|0)>=(m|0))break;s=t[k+(w<<2)>>2]|0;o=t[r>>2]|0;u=o+(s<<2)|0;if((t[u>>2]|0)==(s|0)){A=t[v+(s<<2)>>2]|0;b=t[v+(s+1<<2)>>2]|0;h=+(b-A|0);n=1;while(1){if((A|0)>=(b|0))break;e=t[g+(A<<2)>>2]|0;if((s|0)!=(e|0)?(t[o+(e<<2)>>2]|0)==(e|0):0){l=+c[d+(A<<3)>>3]/(+((t[v+(e+1<<2)>>2]|0)-(t[v+(e<<2)>>2]|0)|0)*h);if((n|0)==0?!(l>f):0)n=0;else{n=0;a=e;f=l}}A=A+1|0}if(!n){t[o+(a<<2)>>2]=s;t[u>>2]=a;t[i>>2]=(t[i>>2]|0)+-1}}w=w+1|0}G2(k)}}while(0);return}function ku(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;u=t[e+20>>2]|0;b=t[e+24>>2]|0;o=t[e>>2]|0;s=$F(o<<2)|0;t[r>>2]=s;e=0;while(1){if((e|0)>=(o|0))break;t[s+(e<<2)>>2]=-100;e=e+1|0}t[i>>2]=0;t[a>>2]=0;e:do{if(!A){A=0;A:while(1){if((A|0)>=(o|0))break e;if((t[s+(A<<2)>>2]|0)!=-100){A=A+1|0;continue}n=t[i>>2]|0;t[i>>2]=n+1;t[s+(A<<2)>>2]=n;n=A+1|0;f=u+(n<<2)|0;e=t[u+(A<<2)>>2]|0;while(1){if((e|0)>=(t[f>>2]|0)){A=n;continue A}l=t[b+(e<<2)>>2]|0;if((A|0)!=(l|0)){t[s+(l<<2)>>2]=-1;t[a>>2]=(t[a>>2]|0)+1}e=e+1|0}}}else{l=jo(o)|0;f=0;while(1){if((f|0)>=(o|0))break;s=t[l+(f<<2)>>2]|0;c=t[r>>2]|0;e=c+(s<<2)|0;A:do{if((t[e>>2]|0)==-100){A=t[i>>2]|0;t[i>>2]=A+1;t[e>>2]=A;A=u+(s+1<<2)|0;e=t[u+(s<<2)>>2]|0;while(1){if((e|0)>=(t[A>>2]|0))break A;n=t[b+(e<<2)>>2]|0;if((s|0)!=(n|0)){t[c+(n<<2)>>2]=-1;t[a>>2]=(t[a>>2]|0)+1}e=e+1|0}}}while(0);f=f+1|0}G2(l)}}while(0);t[a>>2]=(t[a>>2]|0)+(t[i>>2]|0);return}function du(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;u=k+4|0;b=k;w=t[e+20>>2]|0;o=t[e+24>>2]|0;f=t[e>>2]|0;e=$F(f<<2)|0;t[r>>2]=e;n=0;while(1){t[u>>2]=n;if((n|0)>=(f|0))break;t[e+(n<<2)>>2]=-100;n=(t[u>>2]|0)+1|0}t[i>>2]=0;t[a>>2]=0;c=Bu(f,(f<<1)+-2|0)|0;e:do{if(!A){e=0;while(1){t[u>>2]=e;if((e|0)>=(f|0))break e;s=e+1|0;Cu(c,e,(t[w+(s<<2)>>2]|0)-(t[w+(e<<2)>>2]|0)|0)|0;e=s}}else{n=jo(f)|0;e=0;while(1){if((e|0)>=(f|0))break;s=t[n+(e<<2)>>2]|0;t[u>>2]=s;Cu(c,s,(t[w+(s+1<<2)>>2]|0)-(t[w+(s<<2)>>2]|0)|0)|0;e=e+1|0}G2(n)}}while(0);e:while(1){s=(Iu(c,u,b)|0)==0;e=t[i>>2]|0;if(s)break;t[i>>2]=e+1;t[(t[r>>2]|0)+(t[u>>2]<<2)>>2]=e;e=t[u>>2]|0;s=t[w+(e<<2)>>2]|0;while(1){if((s|0)>=(t[w+(e+1<<2)>>2]|0))continue e;l=t[o+(s<<2)>>2]|0;if((e|0)!=(l|0)){A:do{if((t[(t[r>>2]|0)+(l<<2)>>2]|0)==-100){Gu(c,l)|0;t[(t[r>>2]|0)+(l<<2)>>2]=-1;n=w+(l+1<<2)|0;e=t[w+(l<<2)>>2]|0;while(1){if((e|0)>=(t[n>>2]|0))break A;A=o+(e<<2)|0;f=t[A>>2]|0;if((l|0)!=(f|0)?(t[(t[r>>2]|0)+(f<<2)>>2]|0)==-100:0){f=Zu(c,f)|0;t[b>>2]=f;Cu(c,t[A>>2]|0,f+1|0)|0}e=e+1|0}}}while(0);t[a>>2]=(t[a>>2]|0)+1;e=t[u>>2]|0}s=s+1|0}}t[a>>2]=(t[a>>2]|0)+e;yu(c);h=k;return}function vu(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+c[e+8>>3];r=+c[A+8>>3];return(i>r?-1:i>2]|0)==1:0)a=e;else a=Ho(e)|0;do{if(!A)A=0;else{if(sK(A,0)|0?(t[A+16>>2]|0)==1:0)break;A=bK(A,0)|0}}while(0);r=mu(a,A,r)|0;A=pu(r,i)|0;if((a|0)!=(e|0))t[r+36>>2]=1;return A|0}function mu(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;if(!e)e=0;else{i=$F(44)|0;t[i>>2]=0;t[i+4>>2]=t[e+4>>2];t[i+8>>2]=e;t[i+12>>2]=A;t[i+16>>2]=0;t[i+20>>2]=0;t[i+24>>2]=r;t[i+28>>2]=0;t[i+32>>2]=0;t[i+36>>2]=0;e=i}return e|0}function pu(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+32|0;i=c+20|0;a=c+16|0;n=c+12|0;f=c+8|0;l=c+4|0;s=c;t[a>>2]=0;if((t[e>>2]|0)<((t[A+16>>2]|0)+-1|0)?(lu(t[e+8>>2]|0,l,t[e+12>>2]|0,s,0,a,n,f,A,i),r=t[l>>2]|0,r|0):0){l=t[s>>2]|0;s=mu(r,l,t[a>>2]|0)|0;t[e+28>>2]=s;t[s+40>>2]=t[i>>2];t[s>>2]=(t[e>>2]|0)+1;t[s+4>>2]=t[r>>2];t[s+8>>2]=r;t[s+12>>2]=l;t[s+16>>2]=t[n>>2];t[e+20>>2]=t[f>>2];t[s+32>>2]=e;pu(s,A)|0}h=c;return e|0}function Eu(e){e=e|0;var A=0;while(1){A=t[e+28>>2]|0;if(!A)break;else e=A}return e|0}function Bu(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=$F(28)|0;t[a>>2]=0;t[a+4>>2]=e;t[a+8>>2]=A;t[a+12>>2]=-1;i=a+16|0;t[i>>2]=$F((A<<2)+4|0)|0;r=0;while(1){if((r|0)>(A|0))break;t[(t[i>>2]|0)+(r<<2)>>2]=0;r=r+1|0}A=(e<<2)+4|0;i=a+20|0;t[i>>2]=$F(A)|0;r=0;while(1){if((r|0)>(e|0))break;t[(t[i>>2]|0)+(r<<2)>>2]=0;r=r+1|0}A=$F(A)|0;t[a+24>>2]=A;r=0;while(1){if((r|0)>(e|0))break;t[A+(r<<2)>>2]=-999;r=r+1|0}return a|0}function yu(e){e=e|0;var A=0,r=0,i=0,a=0;if(e|0){i=e+16|0;A=t[i>>2]|0;if(A|0){a=e+8|0;r=0;while(1){if((r|0)>(t[a>>2]|0))break;Gb(t[A+(r<<2)>>2]|0,105);r=r+1|0;A=t[i>>2]|0}G2(A)}A=t[e+20>>2]|0;if(A|0)G2(A);G2(t[e+24>>2]|0);G2(e)}return}function Cu(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;n=e+8|0;s=e+20|0;l=e+24|0;c=e+16|0;if(!e)ge(138953,95743,69,95759);while(1){if((t[n>>2]|0)<(r|0)){f=4;break}i=(t[s>>2]|0)+(A<<2)|0;a=t[i>>2]|0;if(!a)break;o=t[(t[l>>2]|0)+(A<<2)>>2]|0;t[i>>2]=0;t[e>>2]=(t[e>>2]|0)+-1;Db(a,105,(t[c>>2]|0)+(o<<2)|0)}if((f|0)==4)ge(95778,95743,70,95759);t[e>>2]=(t[e>>2]|0)+1;i=e+12|0;if((t[i>>2]|0)<(r|0))t[i>>2]=r;t[(t[l>>2]|0)+(A<<2)>>2]=r;i=$F(4)|0;t[i>>2]=A;a=t[(t[c>>2]|0)+(r<<2)>>2]|0;if(!a)i=Zb(i)|0;else i=Lb(a,i)|0;t[(t[s>>2]|0)+(A<<2)>>2]=i;t[(t[c>>2]|0)+(r<<2)>>2]=i;return e|0}function Iu(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;if((e|0)!=0?(t[e>>2]|0)>=1:0){a=e+12|0;i=t[a>>2]|0;t[r>>2]=i;t[e>>2]=(t[e>>2]|0)+-1;r=e+16|0;n=t[(t[r>>2]|0)+(i<<2)>>2]|0;t[A>>2]=t[(Qb(n)|0)>>2];Db(n,105,(t[r>>2]|0)+(i<<2)|0);r=t[r>>2]|0;if(!(t[r+(i<<2)>>2]|0)){while(1){if((i|0)<=-1)break;if(t[r+(i<<2)>>2]|0)break;i=i+-1|0}t[a>>2]=i}i=t[A>>2]|0;t[(t[e+20>>2]|0)+(i<<2)>>2]=0;t[(t[e+24>>2]|0)+(i<<2)>>2]=-999;i=1}else i=0;return i|0}function Zu(e,A){e=e|0;A=A|0;return t[(t[e+24>>2]|0)+(A<<2)>>2]|0}function Gu(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;if((e|0)!=0?(i=t[e>>2]|0,(i|0)>=1):0){f=e+24|0;r=t[(t[f>>2]|0)+(A<<2)>>2]|0;t[e>>2]=i+-1;a=e+20|0;i=e+16|0;Db(t[(t[a>>2]|0)+(A<<2)>>2]|0,105,(t[i>>2]|0)+(r<<2)|0);e=e+12|0;if((r|0)==(t[e>>2]|0)?(n=t[i>>2]|0,(t[n+(r<<2)>>2]|0)==0):0){while(1){if((r|0)<=-1)break;if(t[n+(r<<2)>>2]|0)break;r=r+-1|0}t[e>>2]=r}t[(t[a>>2]|0)+(A<<2)>>2]=0;t[(t[f>>2]|0)+(A<<2)>>2]=-999;r=1}else r=0;return r|0}function Lu(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0,l=0,s=0.0,o=0.0,u=0,b=0.0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;if(!(sK(e,0)|0))ge(95795,95831,260,95846);E=cK(e)|0;B=t[E+20>>2]|0;y=t[E+24>>2]|0;i=E+16|0;e=E+28|0;if((t[i>>2]|0)==1)p=t[e>>2]|0;else{G2(t[e>>2]|0);t[i>>2]=1;p=$F(t[E+8>>2]<<3)|0;t[e>>2]=p}d=$F(t[E>>2]<<2)|0;e=0;while(1){i=t[E>>2]|0;if((e|0)>=(i|0)){k=0;e=i;break}t[d+(e<<2)>>2]=-1;e=e+1|0}e:while(1){if((k|0)>=(e|0)){n=0.0;s=0.0;a=0;m=0;g=e;break}w=k+1|0;f=B+(w<<2)|0;u=B+(k<<2)|0;l=(t[f>>2]|0)-(t[u>>2]|0)|0;t[d+(k<<2)>>2]=k;i=t[u>>2]|0;while(1){h=t[f>>2]|0;if((i|0)>=(h|0))break;e=t[y+(i<<2)>>2]|0;if((k|0)!=(e|0))t[d+(e<<2)>>2]=k;i=i+1|0}b=+(l|0);i=t[u>>2]|0;while(1){if((i|0)>=(h|0))break;e=t[y+(i<<2)>>2]|0;if((k|0)!=(e|0)){f=t[B+(e+1<<2)>>2]|0;e=t[B+(e<<2)>>2]|0;o=+(f-e|0)+b;while(1){if((e|0)>=(f|0))break;o=(t[d+(t[y+(e<<2)>>2]<<2)>>2]|0)==(k|0)?o+-1.0:o;e=e+1|0}c[p+(i<<3)>>3]=o;if(!(o>0.0)){v=23;break e}}i=i+1|0}k=w;e=t[E>>2]|0}if((v|0)==23)ge(95868,95831,290,95846);while(1){if((m|0)>=(g|0))break;f=m+1|0;l=B+(f<<2)|0;i=t[B+(m<<2)>>2]|0;while(1){if((i|0)>=(t[l>>2]|0))break;e=t[y+(i<<2)>>2]|0;if((m|0)==(e|0))e=a;else{s=+Ko(r,A,m,e)+s;n=+c[p+(i<<3)>>3]+n;e=a+1|0}a=e;i=i+1|0}m=f;g=t[E>>2]|0}b=+(a|0);n=s/(n/b*b);e=0;e:while(1){if((e|0)>=(g|0))break;f=e+1|0;l=t[B+(f<<2)>>2]|0;i=t[B+(e<<2)>>2]|0;while(1){if((i|0)>=(l|0)){e=f;continue e}a=p+(i<<3)|0;if((e|0)!=(t[y+(i<<2)>>2]|0))c[a>>3]=+c[a>>3]*n;i=i+1|0}}return E|0}function Qu(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0.0,w=0,k=0.0,d=0.0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0.0,X=0.0;V=t[e>>2]|0;N=t[e+20>>2]|0;R=t[e+24>>2]|0;if(!(sK(e,0)|0))ge(95795,95831,333,95876);x=Lu(e,A,i)|0;J=$F(56)|0;H=J+32|0;c[H>>3]=1.0;t[J+20>>2]=0;t[J+24>>2]=0;c[J+40>>3]=.01;t[J+48>>2]=~~+D(+ +(t[e>>2]|0));n=V<<3;Y=$F(n)|0;t[J+12>>2]=Y;e=0;while(1){if((e|0)>=(V|0))break;c[Y+(e<<3)>>3]=r;e=e+1|0}F=$F(V<<2)|0;W=$F(n)|0;l=0;while(1){if((l|0)>=(V|0)){b=0;break}s=W+(l<<3)|0;c[s>>3]=0.0;o=l+1|0;u=N+(o<<2)|0;f=t[N+(l<<2)>>2]|0;e=0;r=0.0;while(1){if((f|0)>=(t[u>>2]|0))break;n=t[R+(f<<2)>>2]|0;if((l|0)!=(n|0)){r=+Ko(i,A,l,n);r=+c[s>>3]+r;c[s>>3]=r;e=e+1|0}f=f+1|0}if((e|0)<=0){w=14;break}c[s>>3]=r/+(e|0);l=o}if((w|0)==14)ge(95908,95831,358,95876);while(1){if((b|0)>=(V|0)){e=0;o=0;break}t[F+(b<<2)>>2]=-1;b=b+1|0}e:while(1){if((o|0)>=(V|0))break;t[F+(o<<2)>>2]=o;l=N+(o<<2)|0;u=o+1|0;b=N+(u<<2)|0;f=t[l>>2]|0;while(1){n=t[b>>2]|0;if((f|0)>=(n|0))break;n=F+(t[R+(f<<2)>>2]<<2)|0;if((t[n>>2]|0)!=(o|0)){t[n>>2]=o;e=e+1|0}f=f+1|0}s=t[l>>2]|0;while(1){if((s|0)>=(n|0)){o=u;continue e}f=t[R+(s<<2)>>2]|0;l=N+(f+1<<2)|0;f=t[N+(f<<2)>>2]|0;while(1){if((f|0)>=(t[l>>2]|0))break;n=F+(t[R+(f<<2)>>2]<<2)|0;if((t[n>>2]|0)!=(o|0)){t[n>>2]=o;e=e+1|0}f=f+1|0}s=s+1|0;n=t[b>>2]|0}}n=e+V|0;L=J+4|0;t[L>>2]=aK(V,V,n,1,1)|0;n=aK(V,V,n,1,1)|0;Q=J+8|0;t[Q>>2]=n;e=t[L>>2]|0;do{if(!((n|0)==0|(e|0)==0)){Z=t[e+20>>2]|0;I=t[e+24>>2]|0;y=t[e+28>>2]|0;G=t[n+28>>2]|0;C=t[n+20>>2]|0;g=t[n+24>>2]|0;t[C>>2]=0;t[Z>>2]=0;r=0.0;h=0.0;w=0;f=0;e:while(1){if((w|0)>=(V|0)){w=58;break}m=w+V|0;t[F+(w<<2)>>2]=m;s=N+(w<<2)|0;p=w+1|0;E=N+(p<<2)|0;B=W+(w<<3)|0;k=0.0;d=0.0;l=t[s>>2]|0;while(1){e=t[E>>2]|0;if((l|0)>=(e|0))break;n=t[R+(l<<2)>>2]|0;e=F+(n<<2)|0;if((t[e>>2]|0)!=(m|0)){t[e>>2]=m;t[I+(f<<2)>>2]=n;switch(a|0){case 0:{v=1.0;break}case 1:{v=(+c[W+(n<<3)>>3]+ +c[B>>3])*.5;break}case 2:{v=+z(+ +qo(i,A,w,n),.4);break}default:{w=42;break e}}X=-1.0/(v*v);c[y+(f<<3)>>3]=X;t[g+(f<<2)>>2]=n;P=X*v;b=G+(f<<3)|0;c[b>>3]=P;h=+Ko(i,A,w,n)*P+h;P=+c[b>>3];f=f+1|0;k=X+k;d=P+d;r=P*v+r}l=l+1|0}b=t[s>>2]|0;while(1){if((b|0)>=(e|0))break;s=t[R+(b<<2)>>2]|0;o=N+(s+1<<2)|0;u=W+(s<<3)|0;l=t[N+(s<<2)>>2]|0;while(1){if((l|0)>=(t[o>>2]|0))break;n=R+(l<<2)|0;e=F+(t[n>>2]<<2)|0;if((t[e>>2]|0)!=(m|0)){t[e>>2]=m;switch(a|0){case 0:{v=2.0;break}case 1:{v=(+c[u>>3]*2.0+ +c[B>>3]+ +c[W+(t[n>>2]<<3)>>3])*.5;break}case 2:{v=+z(+ +qo(i,A,w,t[n>>2]|0),.4);break}default:{w=53;break e}}t[I+(f<<2)>>2]=t[n>>2];P=-1.0/(v*v);c[y+(f<<3)>>3]=P;t[g+(f<<2)>>2]=t[n>>2];X=P*v;e=G+(f<<3)|0;c[e>>3]=X;h=+Ko(i,A,t[n>>2]|0,s)*X+h;X=+c[e>>3];f=f+1|0;k=P+k;d=X+d;r=X*v+r}l=l+1|0}b=b+1|0;e=t[E>>2]|0}t[I+(f<<2)>>2]=w;B=Y+(w<<3)|0;X=-(k*+c[B>>3]);c[B>>3]=X;c[y+(f<<3)>>3]=X-k;t[g+(f<<2)>>2]=w;c[G+(f<<3)>>3]=-d;f=f+1|0;t[Z+(p<<2)>>2]=f;t[C+(p<<2)>>2]=f;w=p}if((w|0)==42){G3(95915,29,1,t[15712]|0)|0;ge(138394,95831,418,95876)}else if((w|0)==53){G3(95915,29,1,t[15712]|0)|0;ge(138394,95831,460,95876)}else if((w|0)==58){r=h/r;e=0;while(1){if((e|0)>=(f|0))break;R=G+(e<<3)|0;c[R>>3]=+c[R>>3]*r;e=e+1|0}c[H>>3]=r;t[(t[L>>2]|0)+8>>2]=f;t[(t[Q>>2]|0)+8>>2]=f;G2(F);G2(W);iK(x);M=J;break}}else{Du(J);M=0}}while(0);return M|0}function Du(e){e=e|0;var A=0;if(e|0){A=t[e+4>>2]|0;if(A|0)iK(A);A=t[e+8>>2]|0;if(A|0)iK(A);A=t[e+12>>2]|0;if(A|0)G2(A);A=t[e+20>>2]|0;if(A|0)F5[t[e+16>>2]&127](A);G2(e)}return}function zu(e,A,r,i,a,n){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;n=n|0;var f=0,l=0.0,s=0,o=0.0,u=0.0,b=0.0,h=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0.0,R=0;M=t[e>>2]|0;if(sK(e,0)|0?(t[e+16>>2]|0)==1:0){s=P(M,A)|0;l=0.0;f=0;while(1){if((f|0)>=(s|0))break;k=+c[i+(f<<3)>>3];l=k*k+l;f=f+1|0}e:do{if(l==0.0){f=0;while(1){if((f|0)>=(s|0))break e;c[i+(f<<3)>>3]=+Xo()*72.0;f=f+1|0}}}while(0);Q=t[e+20>>2]|0;z=t[e+24>>2]|0;W=t[e+28>>2]|0;f=$F(56)|0;F=f+32|0;c[F>>3]=1.0;t[f+20>>2]=0;t[f+24>>2]=0;t[f>>2]=e;c[f+40>>3]=.01;t[f+48>>2]=~~+D(+ +(t[e>>2]|0));Y=$F(M<<3)|0;t[f+12>>2]=Y;s=0;while(1){if((s|0)>=(M|0))break;c[Y+(s<<3)>>3]=r;s=s+1|0}e=(t[e+8>>2]|0)+M|0;G=f+4|0;t[G>>2]=aK(M,M,e,1,1)|0;e=aK(M,M,e,1,1)|0;L=f+8|0;t[L>>2]=e;s=t[G>>2]|0;if(!((e|0)==0|(s|0)==0)){B=t[s+20>>2]|0;y=t[s+24>>2]|0;C=t[e+20>>2]|0;I=t[e+24>>2]|0;p=t[s+28>>2]|0;Z=t[e+28>>2]|0;t[C>>2]=0;t[B>>2]=0;w=0.0;k=0.0;E=0;v=0;e:while(1){if((v|0)>=(M|0))break;g=v+1|0;m=Q+(g<<2)|0;o=0.0;u=0.0;d=t[Q+(v<<2)>>2]|0;h=w;r=k;e=E;while(1){if((d|0)>=(t[m>>2]|0))break;s=t[z+(d<<2)>>2]|0;if((s|0)==(v|0)){l=h;s=e}else{t[y+(e<<2)>>2]=s;b=+c[W+(d<<3)>>3];switch(a|0){case 2:{l=b*b;l=l==0.0?-1.0e5:-1.0/l;break}case 1:{l=b*b==0.0?-1.0e5:-1.0/b;break}case 0:{l=-1.0;break}default:{V=23;break e}}c[p+(e<<3)>>3]=l;t[I+(e<<2)>>2]=s;N=l*b;R=Z+(e<<3)|0;c[R>>3]=N;r=+Ko(i,A,v,s)*N+r;N=+c[R>>3];o=l+o;u=N+u;l=N*b+h;s=e+1|0}d=d+1|0;h=l;e=s}t[y+(e<<2)>>2]=v;E=Y+(v<<3)|0;w=-(o*+c[E>>3]);c[E>>3]=w;c[p+(e<<3)>>3]=w-o;t[I+(e<<2)>>2]=v;c[Z+(e<<3)>>3]=-u;E=e+1|0;t[B+(g<<2)>>2]=E;t[C+(g<<2)>>2]=E;w=h;k=r;v=g}if((V|0)==23)ge(138394,95831,591,96012);l=(n|0)==0?1.0:k/w;if(l==0.0)f=0;else{s=0;while(1){if((s|0)>=(E|0))break;R=Z+(s<<3)|0;c[R>>3]=+c[R>>3]*l;s=s+1|0}c[F>>3]=l;t[(t[G>>2]|0)+8>>2]=E;t[(t[L>>2]|0)+8>>2]=E}}else{Du(f);f=0}return f|0}ge(95945,95831,525,96012);return 0}function Wu(e){e=e|0;Du(e);return}function Yu(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;return+ +Fu(e,A,r,i,a)}function Fu(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;var n=0,f=0,l=0.0,s=0,o=0,u=0,b=0,w=0.0,k=0,d=0.0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0.0,G=0,L=0,Q=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,X=0,S=0,j=0;S=h;h=h+16|0;J=S+12|0;X=S+8|0;u=S+4|0;s=S;o=t[e+4>>2]|0;f=t[e+8>>2]|0;t[J>>2]=0;t[X>>2]=0;t[u>>2]=0;M=t[e+12>>2]|0;t[s>>2]=0;V=cK(f)|0;N=t[o>>2]|0;R=P(N,A)|0;n=R<<3;H=$F(n)|0;if((H|0)!=0?(x=P(A<<3,N)|0,Q6(H|0,r|0,x|0)|0,F=$F(n)|0,t[X>>2]=F,(F|0)!=0):0){Y=t[f+20>>2]|0;F=t[f+24>>2]|0;L=t[f+28>>2]|0;Q=t[V+28>>2]|0;z=t[o+28>>2]|0;W=e+24|0;switch(t[W>>2]|0){case 1:{Mu(t[e+20>>2]|0,N,A,r,s,u);n=t[s>>2]|0;if(!n){I=0.0;Z=0.0;n=0}else{o=oK(o,n)|0;I=0.0;Z=0.0}break}case 2:{n=t[e+20>>2]|0;I=+c[n+8>>3];Z=+c[n>>3];n=0;break}default:{I=0.0;Z=0.0;n=0}}y=(M|0)==0;C=e+40|0;B=e+48|0;f=t[u>>2]|0;l=1.0;s=0;e:while(1){E=s+1|0;if(!((s|0)<(i|0)&l>a))break;A:do{if((t[W>>2]|0)==4){u=t[X>>2]|0;s=0;while(1){if((s|0)>=(N|0))break A;b=P(s,A)|0;e=0;while(1){if((e|0)>=(A|0))break;c[u+(e+b<<3)>>3]=0.0;e=e+1|0}s=s+1|0}}else{k=0;while(1){if((k|0)>=(N|0))break;m=k+1|0;p=Y+(m<<2)|0;w=0.0;g=t[Y+(k<<2)>>2]|0;s=-1;while(1){if((g|0)>=(t[p>>2]|0))break;u=F+(g<<2)|0;e=t[u>>2]|0;if((k|0)==(e|0))s=g;else{v=+Ko(r,A,k,e);b=L+(g<<3)|0;d=+c[b>>3];if(d==0.0)d=0.0;else{if(v==0.0){d=d/+c[z+(g<<3)>>3]*.0001;e=0;while(1){if((e|0)>=(A|0))break;v=d*(+Xo()+.0001);j=r+((P(t[u>>2]|0,A)|0)+e<<3)|0;c[j>>3]=v+ +c[j>>3];e=e+1|0}v=+Ko(r,A,k,t[u>>2]|0);d=+c[b>>3]}d=d/v}c[Q+(g<<3)>>3]=d;w=d+w}g=g+1|0}if((s|0)<=-1){G=25;break e}c[Q+(s<<3)>>3]=-w;k=m}zo(V,0,r,0,X,0,A)}}while(0);A:do{if(!y){u=t[X>>2]|0;s=0;while(1){if((s|0)>=(N|0))break A;b=M+(s<<3)|0;k=P(s,A)|0;e=0;while(1){if((e|0)>=(A|0))break;p=e+k|0;j=u+(p<<3)|0;c[j>>3]=+c[j>>3]+ +c[H+(p<<3)>>3]*+c[b>>3];e=e+1|0}s=s+1|0}}}while(0);A:do{switch(t[W>>2]|0){case 1:{s=t[X>>2]|0;e=0;while(1){if((e|0)>=(N|0)){G=50;break A}b=P(e,A)|0;u=0;while(1){if((u|0)>=(A|0))break;G=u+b|0;j=s+(G<<3)|0;c[j>>3]=+c[j>>3]+ +c[f+(G<<3)>>3];u=u+1|0}e=e+1|0}}case 2:{Vu(N,A,r,t[X>>2]|0,Z,I);s=t[X>>2]|0;w=+c[C>>3];e=t[B>>2]|0;if((t[W>>2]|0)==2)Nu(o,Z,A,r,s,w,e,J);else G=51;break}default:{s=t[X>>2]|0;G=50}}}while(0);if((G|0)==50){w=+c[C>>3];e=t[B>>2]|0;G=51}if((G|0)==51){G=0;+tb(o,A,r,s,w,e,0,J)}if(t[J>>2]|0)break;l=+Ru(N,A,r,t[X>>2]|0);l=l/+D(+ +To(R,r,r));Q6(r|0,t[X>>2]|0,x|0)|0;s=E}if((G|0)==25)ge(96049,95831,895,96060);iK(V);if(n){iK(n);iK(o)}}else{iK(V);l=1.0;f=0}G2(H);n=t[X>>2]|0;if(n|0)G2(n);if(f|0)G2(f);h=S;return+l}function Mu(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0.0,g=0,m=0,p=0,E=0.0,B=0,y=0,C=0,I=0,Z=0.0;w=t[e+8>>2]|0;I=t[e+12>>2]|0;B=t[e+16>>2]|0;C=t[e+32>>2]|0;y=t[C+20>>2]|0;C=t[C+24>>2]|0;o=e+20|0;d=t[o>>2]|0;u=e+24|0;k=t[u>>2]|0;b=e+28|0;h=t[b>>2]|0;E=+c[e>>3];e:do{if((w|2|0)==3){if(!d){if((k|0)!=0|(h|0)!=0)ge(96094,95831,692,96111);else{f=0;l=0}while(1){if((f|0)>=(I|0))break;p=t[B+(f<<2)>>2]|0;v=+((t[y+(p+1<<2)>>2]|0)-(t[y+(p<<2)>>2]|0)|0)+1.0;f=f+1|0;l=l+~~(v*v)|0}k=l<<2;d=$F(k)|0;t[o>>2]=d;k=$F(k)|0;t[u>>2]=k;h=$F(l<<3)|0;t[b>>2]=h}m=0;e=0;while(1){if((m|0)>=(I|0))break;w=t[B+(m<<2)>>2]|0;g=y+(w<<2)|0;l=t[g>>2]|0;f=t[C+(l<<2)>>2]|0;l=t[C+(l+1<<2)>>2]|0;A:do{if((f|0)!=(l|0)){Z=+qo(i,r,f,l);Z=Z*Z;b=y+(w+1<<2)|0;v=+((t[b>>2]|0)-(t[g>>2]|0)|0);t[d+(e<<2)>>2]=w;t[k+(e<<2)>>2]=w;c[h+(e<<3)>>3]=E/Z;s=v*v*Z;v=-(E/(Z*v));l=t[g>>2]|0;while(1){e=e+1|0;f=t[b>>2]|0;if((l|0)>=(f|0))break;t[d+(e<<2)>>2]=w;t[k+(e<<2)>>2]=t[C+(l<<2)>>2];c[h+(e<<3)>>3]=v;l=l+1|0}s=E/s;u=t[g>>2]|0;while(1){if((u|0)>=(f|0))break A;o=t[C+(u<<2)>>2]|0;t[d+(e<<2)>>2]=o;t[k+(e<<2)>>2]=w;c[h+(e<<3)>>3]=v;l=t[g>>2]|0;while(1){e=e+1|0;f=t[b>>2]|0;if((l|0)>=(f|0))break;p=t[C+(l<<2)>>2]|0;t[d+(e<<2)>>2]=o;t[k+(e<<2)>>2]=p;c[h+(e<<3)>>3]=s;l=l+1|0}u=u+1|0}}}while(0);m=m+1|0}f=kK(e,A,A,d,k,h,1,8)|0;e=0}else{switch(w|0){case 2:case 4:break;default:{f=0;e=0;break e}}do{if(!d)if((k|0)!=0|(h|0)!=0)ge(96094,95831,734,96111);else{m=I<<2;p=$F(m)|0;t[o>>2]=p;m=$F(m)|0;t[u>>2]=m;g=$F(I<<3)|0;t[b>>2]=g;break}else{g=h;m=k;p=d}}while(0);e=$F(P(A<<3,r)|0)|0;l=P(r,A)|0;f=0;while(1){if((f|0)>=(l|0)){h=0;break}c[e+(f<<3)>>3]=0.0;f=f+1|0}while(1){if((h|0)>=(I|0))break;w=t[B+(h<<2)>>2]|0;o=y+(w<<2)|0;u=t[o>>2]|0;s=+qo(i,r,t[C+(u<<2)>>2]|0,t[C+(u+1<<2)>>2]|0);t[p+(h<<2)>>2]=w;t[m+(h<<2)>>2]=w;s=E/s;c[g+(h<<3)>>3]=s;o=t[o>>2]|0;u=t[y+(w+1<<2)>>2]|0;w=P(w,r)|0;l=o;while(1){if((l|0)>=(u|0))break;b=P(t[C+(l<<2)>>2]|0,r)|0;f=0;while(1){if((f|0)>=(r|0))break;d=e+(f+w<<3)|0;c[d>>3]=+c[d>>3]+ +c[i+(f+b<<3)>>3];f=f+1|0}l=l+1|0}s=s*(1.0/+(u-o|0));f=0;while(1){if((f|0)>=(r|0))break;d=e+(f+w<<3)|0;c[d>>3]=s*+c[d>>3];f=f+1|0}h=h+1|0}f=kK(h,A,A,p,m,g,1,8)|0}}while(0);t[a>>2]=f;t[n>>2]=e;return}function Vu(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;t=+t;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0.0,w=0;t=t*a;n=0;e:while(1){if((n|0)>=(e|0))break;o=n+1|0;u=P(n,A)|0;f=o;while(1){if((f|0)==(e|0)){n=o;continue e}s=P(f,A)|0;a=1.0/+qo(r,A,n,f);l=0;while(1){if((l|0)>=(A|0))break;w=l+u|0;b=l+s|0;h=t*((+c[r+(w<<3)>>3]-+c[r+(b<<3)>>3])*a);w=i+(w<<3)|0;c[w>>3]=h+ +c[w>>3];b=i+(b<<3)|0;c[b>>3]=+c[b>>3]-h;l=l+1|0}f=f+1|0}}return}function Nu(e,A,r,i,a,n,f,l){e=e|0;A=+A;r=r|0;i=i|0;a=a|0;n=+n;f=f|0;l=l|0;var s=0,c=0;c=Tu(e,A)|0;s=$u(e,A)|0;+rb(c,s,t[e>>2]|0,r,i,a,n,f,l);return}function Ru(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0,n=0.0,f=0.0,l=0,s=0.0,o=0;t=0;f=0.0;while(1){if((t|0)>=(e|0))break;l=P(t,A)|0;a=0;n=0.0;while(1){if((a|0)>=(A|0))break;o=a+l|0;s=+c[i+(o<<3)>>3]-+c[r+(o<<3)>>3];a=a+1|0;n=s*s+n}t=t+1|0;f=+D(+n)+f}return+f}function xu(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;var n=0,f=0,l=0,s=0.0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0.0,g=0.0,m=0.0,p=0.0,E=0.0,B=0,y=0,C=0,I=0,Z=0,G=0.0,L=0.0;I=t[e>>2]|0;w=t[e+20>>2]|0;k=t[e+24>>2]|0;if(!(sK(e,0)|0))ge(95795,95831,1034,96133);d=I<<3;Z=$F(d)|0;l=0;while(1){if((l|0)>=(I|0))break;u=Z+(l<<3)|0;c[u>>3]=0.0;b=l+1|0;h=w+(b<<2)|0;o=t[w+(l<<2)>>2]|0;n=0;s=0.0;while(1){if((o|0)>=(t[h>>2]|0))break;f=t[k+(o<<2)>>2]|0;if((l|0)!=(f|0)){s=+Ko(i,A,l,f);s=+c[u>>3]+s;c[u>>3]=s;n=n+1|0}o=o+1|0}if((n|0)<=0){C=11;break}c[u>>3]=s/+(n|0);l=b}if((C|0)==11)ge(95908,95831,1046,96133);n=$F(56)|0;y=n+32|0;c[y>>3]=1.0;t[n+20>>2]=0;t[n+24>>2]=0;c[n+40>>3]=.01;t[n+48>>2]=~~+D(+ +(t[e>>2]|0));B=$F(d)|0;t[n+12>>2]=B;f=0;while(1){if((f|0)>=(I|0))break;c[B+(f<<3)>>3]=r;f=f+1|0}do{if((I|0)>2)if(!a){f=fb(I,A,i)|0;break}else{f=nb(I,A,i)|0;break}else f=cK(e)|0}while(0);a=n+4|0;t[a>>2]=oK(e,f)|0;iK(f);l=cK(t[a>>2]|0)|0;t[n+8>>2]=l;f=t[a>>2]|0;if((l|0)==0|(f|0)==0){Ju(n);n=0}else{d=t[f+20>>2]|0;k=t[f+24>>2]|0;w=t[f+28>>2]|0;a=t[l+28>>2]|0;p=0.0;E=0.0;u=0;while(1){if((u|0)>=(I|0))break;h=u+1|0;b=d+(h<<2)|0;m=0.0;r=0.0;l=-1;v=p;g=E;o=t[d+(u<<2)>>2]|0;while(1){if((o|0)>=(t[b>>2]|0))break;f=t[k+(o<<2)>>2]|0;if((f|0)==(u|0)){s=m;f=o}else{G=+z(+ +qo(i,A,u,f),.6);s=1.0/(G*G);c[w+(o<<3)>>3]=s;L=s*G;e=a+(o<<3)|0;c[e>>3]=L;g=L*+Ko(i,A,u,f)+g;L=+c[e>>3];s=s+m;r=L+r;f=l;v=L*G+v}m=s;l=f;o=o+1|0}e=B+(u<<3)|0;s=-(m*+c[e>>3]);c[e>>3]=s;if((l|0)<=-1){C=31;break}c[w+(l<<3)>>3]=s-m;c[a+(l<<3)>>3]=-r;p=v;E=g;u=h}if((C|0)==31)ge(96154,95831,1112,96133);s=E/p;l=t[d+(I<<2)>>2]|0;f=0;while(1){if((f|0)>=(l|0))break;I=a+(f<<3)|0;c[I>>3]=+c[I>>3]*s;f=f+1|0}c[y>>3]=s;G2(Z)}return n|0}function Ju(e){e=e|0;Du(e);return}function Hu(e,A,r){e=e|0;A=A|0;r=r|0;+Fu(e,A,r,50,.001);return}function Pu(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0;C=t[e>>2]|0;I=t[e+20>>2]|0;Z=t[e+24>>2]|0;if(!(sK(e,0)|0))ge(95795,95831,1149,96165);p=Lu(e,A,i)|0;E=t[p+28>>2]|0;e=$F(8)|0;B=$F(C<<2)|0;y=$F(C<<3)|0;f=0;while(1){if((f|0)>=(C|0)){h=0;break}o=y+(f<<3)|0;c[o>>3]=0.0;u=f+1|0;b=I+(u<<2)|0;l=t[I+(f<<2)>>2]|0;a=0;s=0.0;while(1){if((l|0)>=(t[b>>2]|0))break;n=t[Z+(l<<2)>>2]|0;if((f|0)!=(n|0)){s=+Ko(i,A,f,n);s=+c[o>>3]+s;c[o>>3]=s;a=a+1|0}l=l+1|0}if((a|0)<=0){w=11;break}c[o>>3]=s/+(a|0);f=u}if((w|0)==11)ge(95908,95831,1167,96165);while(1){if((h|0)>=(C|0)){u=0;a=0;break}t[B+(h<<2)>>2]=-1;h=h+1|0}e:while(1){if((u|0)>=(C|0))break;t[B+(u<<2)>>2]=u;l=I+(u<<2)|0;b=u+1|0;h=I+(b<<2)|0;f=t[l>>2]|0;while(1){n=t[h>>2]|0;if((f|0)>=(n|0))break;n=B+(t[Z+(f<<2)>>2]<<2)|0;if((t[n>>2]|0)!=(u|0)){t[n>>2]=u;a=a+1|0}f=f+1|0}o=t[l>>2]|0;while(1){if((o|0)>=(n|0)){u=b;continue e}f=t[Z+(o<<2)>>2]|0;l=I+(f+1<<2)|0;f=t[I+(f<<2)>>2]|0;while(1){if((f|0)>=(t[l>>2]|0))break;n=B+(t[Z+(f<<2)>>2]<<2)|0;if((t[n>>2]|0)!=(u|0)){t[n>>2]=u;a=a+1|0}f=f+1|0}o=o+1|0;n=t[h>>2]|0}}i=aK(C,C,a,1,1)|0;t[e>>2]=i;if(!i){Xu(e);e=0}else{w=t[i+20>>2]|0;k=t[i+24>>2]|0;d=t[i+28>>2]|0;t[w>>2]=0;n=0;a=0;while(1){if((n|0)>=(C|0))break;v=n+C|0;t[B+(n<<2)>>2]=v;o=I+(n<<2)|0;g=n+1|0;m=I+(g<<2)|0;A=y+(n<<3)|0;l=t[o>>2]|0;while(1){n=t[m>>2]|0;if((l|0)>=(n|0))break;n=t[Z+(l<<2)>>2]|0;f=B+(n<<2)|0;if((t[f>>2]|0)!=(v|0)){t[f>>2]=v;t[k+(a<<2)>>2]=n;h=d+(a<<3)|0;c[h>>3]=(+c[y+(n<<3)>>3]+ +c[A>>3])*.5;c[h>>3]=+c[E+(l<<3)>>3];a=a+1|0}l=l+1|0}h=t[o>>2]|0;while(1){if((h|0)>=(n|0))break;l=t[Z+(h<<2)>>2]|0;o=I+(l+1<<2)|0;u=y+(l<<3)|0;b=E+(h<<3)|0;l=t[I+(l<<2)>>2]|0;while(1){if((l|0)>=(t[o>>2]|0))break;n=Z+(l<<2)|0;f=B+(t[n>>2]<<2)|0;if((t[f>>2]|0)!=(v|0)){t[f>>2]=v;t[k+(a<<2)>>2]=t[n>>2];f=d+(a<<3)|0;c[f>>3]=(+c[u>>3]*2.0+ +c[A>>3]+ +c[y+(t[n>>2]<<3)>>3])*.5;c[f>>3]=+c[E+(l<<3)>>3]+ +c[b>>3];a=a+1|0}l=l+1|0}h=h+1|0;n=t[m>>2]|0}t[w+(g<<2)>>2]=a;n=g}t[i+8>>2]=a;I=VS()|0;Z=e+4|0;t[Z>>2]=I;Q6(I|0,r|0,168)|0;Z=t[Z>>2]|0;t[Z+16>>2]=0;t[Z+40>>2]=1;I=Z+96|0;c[I>>3]=+c[I>>3]*.5;t[Z+80>>2]=20;G2(B);G2(y);iK(p)}return e|0}function Xu(e){e=e|0;var A=0;if(e|0){A=t[e>>2]|0;if(A|0)iK(A);e=t[e+4>>2]|0;if(e|0)NS(e)}return}function Su(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;n=h;h=h+16|0;f=n;t[f>>2]=0;tj(i,A,t[e>>2]|0,t[e+4>>2]|0,r,a,f);if(!(t[f>>2]|0)){h=n;return}else ge(96184,95831,1262,96190)}function ju(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0;t[n>>2]=0;n=t[r+120>>2]|0;e:do{switch(n|0){case 5:case 6:{if((t[A>>2]|0)>2){A=xu(A,e,0.0,a,(n|0)!=6&1)|0;Hu(A,e,a);Ju(A)}break}case 4:{n=0;while(1){if((n|0)==1)break e;l=Pu(A,e,r,a)|0;Su(l,A,i,e,a);Xu(l);n=n+1|0}}case 1:{r=0;f=6;break}case 2:{r=1;f=6;break}case 3:{r=2;f=6;break}default:{}}}while(0);e:do{if((f|0)==6){n=0;while(1){if((n|0)==1)break e;l=Qu(A,e,.05,a,r)|0;+Fu(l,e,a,50,.001);Du(l);n=n+1|0}}}while(0);return}function Uu(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0,f=0.0,l=0,s=0;s=h;h=h+16|0;n=s;t[n>>2]=r;l=t[e>>2]|0;e=t[l+8>>2]|0;f=+c[l>>3];l=t[e>>2]|0;Fo(e,A,n,0);e=0;a=0.0;while(1){if((e|0)>=(l|0))break;i=+c[A+(e<<3)>>3]+a;e=e+1|0;a=i}i=+(l|0);r=t[n>>2]|0;e=0;while(1){if((e|0)>=(l|0))break;n=r+(e<<3)|0;c[n>>3]=(+c[A+(e<<3)>>3]*i-a)*f+ +c[n>>3];e=e+1|0}h=s;return r|0}function Tu(e,A){e=e|0;A=+A;var r=0,i=0;r=$F(8)|0;i=$F(16)|0;t[r>>2]=i;c[i>>3]=A;t[i+8>>2]=e;t[r+4>>2]=25;return r|0}function Ou(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=h;h=h+16|0;i=a;t[i>>2]=r;Fo(t[e>>2]|0,A,i,0);h=a;return t[i>>2]|0}function _u(e){e=e|0;var A=0;A=$F(8)|0;t[A>>2]=e;t[A+4>>2]=26;return A|0}function qu(e){e=e|0;if(e|0)G2(e);return}function Ku(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=t[e>>2]|0;i=~~+c[a>>3];a=a+8|0;e=0;while(1){if((e|0)>=(i|0))break;c[r+(e<<3)>>3]=+c[a+(e<<3)>>3]*+c[A+(e<<3)>>3];e=e+1|0}return r|0}function $u(e,A){e=e|0;A=+A;var r=0,i=0,a=0,n=0,f=0,l=0.0,s=0,o=0,u=0,b=0.0,h=0,w=0,k=0.0;u=t[e>>2]|0;h=t[e+20>>2]|0;w=t[e+24>>2]|0;s=t[e+28>>2]|0;o=$F(8)|0;f=$F((u<<3)+8|0)|0;t[o>>2]=f;c[f>>3]=+(u|0);f=f+8|0;k=+(u+-1|0);l=1.0/k;A=k*A;e=0;e:while(1){if((e|0)>=(u|0))break;i=f+(e<<3)|0;c[i>>3]=l;a=e+1|0;n=t[h+(a<<2)>>2]|0;r=t[h+(e<<2)>>2]|0;while(1){if((r|0)>=(n|0)){e=a;continue e}if((e|0)==(t[w+(r<<2)>>2]|0)?(b=+c[s+(r<<3)>>3],(b>=0.0?b:-b)>0.0):0)c[i>>3]=1.0/(b+A);r=r+1|0}}t[o+4>>2]=27;return o|0}function eb(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0.0,s=0,o=0,u=0,b=0;f=t[e>>2]|0;s=t[e+20>>2]|0;o=t[e+24>>2]|0;u=t[e+28>>2]|0;b=$F(8)|0;r=$F((t[e>>2]<<3)+8|0)|0;t[b>>2]=r;c[r>>3]=+(f|0);r=r+8|0;e=0;e:while(1){if((e|0)>=(f|0))break;i=r+(e<<3)|0;c[i>>3]=1.0;a=e+1|0;n=t[s+(a<<2)>>2]|0;A=t[s+(e<<2)>>2]|0;while(1){if((A|0)>=(n|0)){e=a;continue e}if((e|0)==(t[o+(A<<2)>>2]|0)?(l=+c[u+(A<<3)>>3],(l>=0.0?l:-l)>0.0):0)c[i>>3]=1.0/l;A=A+1|0}}t[b+4>>2]=27;return b|0}function Ab(e){e=e|0;G2(t[e>>2]|0);if(e|0)G2(e);return}function rb(e,A,r,i,a,t,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=+n;f=f|0;l=l|0;var s=0.0,o=0,u=0.0,b=0,h=0,w=0;h=r<<3;b=$F(h)|0;h=$F(h)|0;o=0;u=0.0;while(1){if((o|0)<(i|0))l=0;else break;while(1){if((l|0)>=(r|0))break;w=(P(l,i)|0)+o|0;c[b+(l<<3)>>3]=+c[a+(w<<3)>>3];c[h+(l<<3)>>3]=+c[t+(w<<3)>>3];l=l+1|0}s=+ib(e,A,r,b,h,n,f);l=0;while(1){if((l|0)>=(r|0))break;c[t+((P(l,i)|0)+o<<3)>>3]=+c[b+(l<<3)>>3];l=l+1|0}o=o+1|0;u=s+u}G2(b);G2(h);return+u}function ib(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=+n;f=f|0;var l=0,s=0.0,c=0,o=0,u=0,b=0.0,h=0.0,w=0,k=0,d=0,v=0.0,g=0,m=0;d=t[e+4>>2]|0;w=t[A+4>>2]|0;k=r<<3;l=$F(k)|0;c=$F(k)|0;g=$F(k)|0;o=$F(k)|0;c=L5[d&63](e,i,c)|0;u=Uo(r,a,c)|0;h=+(r|0);v=+D(+ +To(r,u,u))/h;b=v*n;h=1.0/h;u=0;a=g;s=1.0;n=v;while(1){if(!(n>b&(u|0)<(f|0)))break;l=L5[w&63](A,c,l)|0;n=+To(r,c,l);if((u|0)>0)Oo(r,l,a,n/s)|0;else Q6(a|0,l|0,k|0)|0;m=L5[d&63](e,a,o)|0;s=n/+To(r,a,m);_o(r,i,a,s)|0;g=_o(r,c,m,-s)|0;u=u+1|0;s=n;o=m;n=+D(+ +To(r,g,g))*h}G2(l);G2(c);G2(a);G2(o);return+n}function ab(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0.0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0;G=h;h=h+16|0;Z=G;y=t[e+4>>2]|0;C=y<<3;I=$F(C)|0;m=$F(C)|0;p=$F(C)|0;E=t[e+20>>2]|0;B=t[e+24>>2]|0;v=t[e+28>>2]|0;g=t[15712]|0;d=0;while(1){if((d|0)<(A|0))n=0;else break;while(1){if((n|0)>=(y|0)){e=0;break}k=(P(n,A)|0)+d|0;c[I+(n<<3)>>3]=+c[r+(k<<3)>>3];c[p+(n<<3)>>3]=+c[i+(k<<3)>>3];n=n+1|0}while(1){if((e|0)<(a|0))u=0;else{n=0;break}while(1){if((u|0)>=(y|0))break;b=t[E+(u<<2)>>2]|0;w=u+1|0;k=t[E+(w<<2)>>2]|0;o=b;l=0.0;f=0.0;while(1){if((o|0)>=(k|0))break;n=t[B+(o<<2)>>2]|0;s=+c[v+(o<<3)>>3];if((n|0)==(u|0))f=s;else l=+c[I+(n<<3)>>3]*s+l;o=o+1|0}if(l==0.0){t[Z>>2]=k-b;a3(g,96212,Z)|0}c[m+(u<<3)>>3]=(+c[p+(u<<3)>>3]-l)/f;u=w}Q6(I|0,m|0,C|0)|0;e=e+1|0}while(1){if((n|0)>=(y|0))break;c[i+((P(n,A)|0)+d<<3)>>3]=+c[I+(n<<3)>>3];n=n+1|0}d=d+1|0}G2(I);G2(m);G2(p);h=G;return i|0}function tb(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;n=n|0;f=f|0;l=l|0;var s=0;s=t[e>>2]|0;t[l>>2]=0;switch(f|0){case 0:{f=_u(e)|0;l=eb(e)|0;a=+rb(f,l,s,A,r,i,a,n,0);qu(f);Ab(l);break}case 1:{ab(e,A,r,i,n,0)|0;a=0.0;break}default:a=0.0}return+a}function nb(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0;b=h;h=h+32|0;s=b;o=b+20|0;a=b+16|0;n=b+12|0;f=b+8|0;c[s>>3]=1.0;l=e<<3;u=$F(l)|0;l=$F(l)|0;A=0;while(1){if((A|0)>=(e|0))break;i=A<<1;c[u+(A<<3)>>3]=+c[r+(i<<3)>>3];c[l+(A<<3)>>3]=+c[r+((i|1)<<3)>>3];A=A+1|0}t[o>>2]=A;if((e|0)>2)r=NU(u,l,e,f)|0;else{t[f>>2]=0;r=0}i=aK(e,e,1,1,2)|0;A=0;while(1){t[o>>2]=A;if((A|0)>=(t[f>>2]|0))break;w=A<<1;t[a>>2]=t[r+(w<<2)>>2];t[n>>2]=t[r+((w|1)<<2)>>2];Ro(i,1,a,n,s)|0;A=(t[o>>2]|0)+1|0}if((e|0)==2){t[a>>2]=0;t[n>>2]=1;Ro(i,1,a,n,s)|0;A=0}else A=0;while(1){t[o>>2]=A;if((A|0)>=(e|0))break;Ro(i,1,o,o,s)|0;A=(t[o>>2]|0)+1|0}e=wK(i)|0;iK(i);w=lK(e,0)|0;iK(e);G2(r);G2(u);G2(l);h=b;return w|0}function fb(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+16|0;n=o+8|0;f=o;c[f>>3]=1.0;s=e<<3;l=$F(s)|0;s=$F(s)|0;i=0;while(1){if((i|0)>=(e|0))break;a=P(i,A)|0;c[l+(i<<3)>>3]=+c[r+(a<<3)>>3];c[s+(i<<3)>>3]=+c[r+(a+1<<3)>>3];i=i+1|0}t[n>>2]=i;i=RU(l,s,e,0)|0;a=aK(e,e,1,1,2)|0;A=0;while(1){t[n>>2]=A;if((A|0)<(e|0))r=1;else{A=0;break}while(1){if((r|0)>=(t[i+(A*12|0)>>2]|0))break;Ro(a,1,n,(t[i+(A*12|0)+4>>2]|0)+(r<<2)|0,f)|0;r=r+1|0;A=t[n>>2]|0}A=A+1|0}while(1){t[n>>2]=A;if((A|0)>=(e|0))break;Ro(a,1,n,n,f)|0;A=(t[n>>2]|0)+1|0}f=lK(wK(a)|0,0)|0;iK(a);G2(l);G2(s);xU(i);h=o;return f|0}function lb(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0;a=h;h=h+16|0;t=a;sb(t,r);cb(e,A,r,t);ob(A,t,i);ub(t);h=a;return}function sb(e,A){e=e|0;A=A|0;t[e>>2]=$F(A<<4)|0;t[e+4>>2]=A;t[e+8>>2]=0;return}function cb(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0;L=h;h=h+64|0;d=L+32|0;m=L+48|0;p=L+16|0;E=L;g=A<<2;I=$F(g)|0;G=$F(g)|0;t[p>>2]=0;t[p+4>>2]=0;t[p+8>>2]=0;t[p+12>>2]=0;v=$F(g)|0;g=$F(g)|0;a=0;while(1){if((a|0)>=(A|0))break;t[v+(a<<2)>>2]=a;a=a+1|0}k=A+-1|0;OT(e,v,0,k);a=0;while(1){if((a|0)>=(A|0))break;t[g+(t[v+(a<<2)>>2]<<2)>>2]=a;a=a+1|0}hb(m,e,v,A);a=1;while(1){if((a|0)>=(A|0)){a=0;break}t[I+(t[v+(a<<2)>>2]<<2)>>2]=t[v+(a+-1<<2)>>2];a=a+1|0}while(1){if((a|0)>=(k|0))break;w=a+1|0;t[G+(t[v+(a<<2)>>2]<<2)>>2]=t[v+(w<<2)>>2];a=w}s=i+8|0;o=i+4|0;u=p+4|0;b=E+4|0;w=E+8|0;l=0;while(1){if((l|0)>=(r|0))break;if(!((wb(m,p)|0)<<24>>24))break;a=t[s>>2]|0;A=t[o>>2]|0;if((a|0)<(A|0))A=t[i>>2]|0;else{t[o>>2]=A<<1;A=Q2(t[i>>2]|0,A<<5)|0;t[i>>2]=A;a=t[s>>2]|0}t[s>>2]=a+1;a=A+(a<<4)|0;t[a>>2]=t[p>>2];t[a+4>>2]=t[p+4>>2];t[a+8>>2]=t[p+8>>2];t[a+12>>2]=t[p+12>>2];a=t[p>>2]|0;A=t[g+(a<<2)>>2]|0;n=t[u>>2]|0;f=t[g+(n<<2)>>2]|0;if((A|0)>0?(B=t[v+(A+-1<<2)>>2]|0,y=G+(B<<2)|0,(t[g+(t[y>>2]<<2)>>2]|0)<(f|0)):0){t[E>>2]=B;t[b>>2]=n;c[w>>3]=+c[e+(n<<3)>>3]-+c[e+(B<<3)>>3];t[d>>2]=t[E>>2];t[d+4>>2]=t[E+4>>2];t[d+8>>2]=t[E+8>>2];t[d+12>>2]=t[E+12>>2];kb(m,d);t[y>>2]=n;t[I+(n<<2)>>2]=B}if((f|0)<(k|0)?(C=t[v+(f+1<<2)>>2]|0,Z=I+(C<<2)|0,(t[g+(t[Z>>2]<<2)>>2]|0)>(A|0)):0){t[E>>2]=a;t[b>>2]=C;c[w>>3]=+c[e+(C<<3)>>3]-+c[e+(a<<3)>>3];t[d>>2]=t[E>>2];t[d+4>>2]=t[E+4>>2];t[d+8>>2]=t[E+8>>2];t[d+12>>2]=t[E+12>>2];kb(m,d);t[Z>>2]=a;t[G+(a<<2)>>2]=C}l=l+1|0}G2(I);G2(G);G2(v);G2(g);db(m);h=L;return}function ob(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,c=0,o=0,u=0,b=0;c=$F(e<<2)|0;o=A+8|0;f=t[o>>2]|0;l=(f<<1)+e|0;n=l<<2;i=$F(n)|0;n=$F(n)|0;a=0;while(1){if((a|0)>=(e|0))break;t[c+(a<<2)>>2]=1;a=a+1|0}a=0;while(1){if((a|0)>=(f|0)){a=0;break}b=t[A>>2]|0;u=t[b+(a<<4)+4>>2]|0;b=c+(t[b+(a<<4)>>2]<<2)|0;t[b>>2]=(t[b>>2]|0)+1;u=c+(u<<2)|0;t[u>>2]=(t[u>>2]|0)+1;a=a+1|0}while(1){if((a|0)>=(l|0))break;s[n+(a<<2)>>2]=1.0;a=a+1|0}f=$F(e*20|0)|0;t[r>>2]=f;a=0;while(1){if((a|0)>=(e|0))break;t[f+(a*20|0)>>2]=1;t[f+(a*20|0)+8>>2]=n;t[f+(a*20|0)+4>>2]=i;t[i>>2]=a;s[n>>2]=0.0;b=t[c+(a<<2)>>2]|0;n=n+(b<<2)|0;i=i+(b<<2)|0;a=a+1|0}G2(c);while(1){i=t[o>>2]|0;if(!i)break;b=i+-1|0;t[o>>2]=b;u=t[A>>2]|0;bb(f,t[u+(b<<4)>>2]|0,t[u+(b<<4)+4>>2]|0)}return}function ub(e){e=e|0;G2(t[e>>2]|0);return}function bb(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;a=e+(A*20|0)|0;n=t[a>>2]|0;f=t[e+(A*20|0)+4>>2]|0;i=0;while(1){if((i|0)>=(n|0)){l=4;break}if((t[f+(i<<2)>>2]|0)==(r|0))break;else i=i+1|0}if((l|0)==4?(t[a>>2]=n+1,t[f+(n<<2)>>2]=r,f=t[e+(r*20|0)+4>>2]|0,n=e+(r*20|0)|0,l=t[n>>2]|0,t[n>>2]=l+1,t[f+(l<<2)>>2]=A,t[e+8>>2]|0):0){l=t[e+(A*20|0)+8>>2]|0;s[l>>2]=+s[l>>2]+-1.0;l=t[e+(r*20|0)+8>>2]|0;s[l>>2]=+s[l>>2]+-1.0}return}function hb(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0.0,s=0,o=0;a=i+-1|0;t[e+4>>2]=a;t[e+8>>2]=a;t[e>>2]=$F(a<<4)|0;i=0;while(1){if((i|0)>=(a|0))break;o=t[r+(i<<2)>>2]|0;n=i+1|0;s=t[r+(n<<2)>>2]|0;l=+c[A+(s<<3)>>3]-+c[A+(o<<3)>>3];f=t[e>>2]|0;t[f+(i<<4)>>2]=o;t[f+(i<<4)+4>>2]=s;c[f+(i<<4)+8>>3]=l;i=n}i=(a|0)/2|0;while(1){if((i|0)<=-1)break;vb(e,i);i=i+-1|0}return}function wb(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+4|0;if(!(t[r>>2]|0))e=0;else{i=t[e>>2]|0;t[A>>2]=t[i>>2];t[A+4>>2]=t[i+4>>2];t[A+8>>2]=t[i+8>>2];t[A+12>>2]=t[i+12>>2];A=t[e>>2]|0;i=A+((t[r>>2]|0)+-1<<4)|0;t[A>>2]=t[i>>2];t[A+4>>2]=t[i+4>>2];t[A+8>>2]=t[i+8>>2];t[A+12>>2]=t[i+12>>2];t[r>>2]=(t[r>>2]|0)+-1;vb(e,0);e=1}return e|0}function kb(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+16|0;o=u;l=e+4|0;n=t[l>>2]|0;r=e+8|0;if((n|0)==(t[r>>2]|0)){t[r>>2]=n<<1;r=Q2(t[e>>2]|0,n<<5)|0;t[e>>2]=r;s=e;f=t[l>>2]|0}else{s=e;f=n;r=t[e>>2]|0}t[l>>2]=f+1;l=r+(n<<4)|0;t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];while(1){if((n|0)<=0)break;r=t[s>>2]|0;i=+c[r+(n<<4)+8>>3];e=n>>>1;a=+c[r+(e<<4)+8>>3];if(!(i>2]|0}l=r+(n<<4)|0;t[o>>2]=t[l>>2];t[o+4>>2]=t[l+4>>2];t[o+8>>2]=t[l+8>>2];t[o+12>>2]=t[l+12>>2];A=r+(e<<4)|0;t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];l=(t[s>>2]|0)+(e<<4)|0;t[l>>2]=t[o>>2];t[l+4>>2]=t[o+4>>2];t[l+8>>2]=t[o+8>>2];t[l+12>>2]=t[o+12>>2];n=e}h=u;return}function db(e){e=e|0;G2(t[e>>2]|0);return}function vb(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0;o=h;h=h+16|0;f=o;l=e+4|0;while(1){r=A<<1;n=r|1;if((r|0)<(t[l>>2]|0)){u=t[e>>2]|0;i=+c[u+(r<<4)+8>>3];a=+c[u+(A<<4)+8>>3];if(!(i>2]|0)){u=t[e>>2]|0;i=+c[u+(n<<4)+8>>3];a=+c[u+(r<<4)+8>>3];if(!(i>2]|0;u=n+(r<<4)|0;t[f>>2]=t[u>>2];t[f+4>>2]=t[u+4>>2];t[f+8>>2]=t[u+8>>2];t[f+12>>2]=t[u+12>>2];n=n+(A<<4)|0;t[u>>2]=t[n>>2];t[u+4>>2]=t[n+4>>2];t[u+8>>2]=t[n+8>>2];t[u+12>>2]=t[n+12>>2];u=(t[e>>2]|0)+(A<<4)|0;t[u>>2]=t[f>>2];t[u+4>>2]=t[f+4>>2];t[u+8>>2]=t[f+8>>2];t[u+12>>2]=t[f+12>>2];A=r}h=o;return}function gb(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=+r;i=+i;a=a|0;n=n|0;f=f|0;l=l|0;var s=0,o=0,u=0,b=0.0;o=(a|0)!=0;if(!o){a=$F(A<<3)|0;if(!(_O(e,A,a,A)|0))u=3;else{e=1;u=17}}else u=3;if((u|0)==3){s=KF(A<<2)|0;t[n>>2]=s;e=0;while(1){if((e|0)>=(A|0))break;t[s+(e<<2)>>2]=e;e=e+1|0}e=A+-1|0;OT(a,s,0,e);b=+c[a+(t[s>>2]<<3)>>3];i=(+c[a+(t[s+(e<<2)>>2]<<3)>>3]-b)*i/+(e|0);i=i=(A|0))break;b=+c[a+(t[s+(n<<2)>>2]<<3)>>3];e=e+(b-r>i&1)|0;n=n+1|0;r=b}t[l>>2]=e;e:do{if(!e){s=$F(4)|0;t[f>>2]=s;t[s>>2]=A}else{l=$F(e<<2)|0;t[f>>2]=l;e=0;n=1;while(1){if((n|0)>=(A|0))break e;if(+c[a+(t[s+(n<<2)>>2]<<3)>>3]-+c[a+(t[s+(n+-1<<2)>>2]<<3)>>3]>i){t[l+(e<<2)>>2]=n;e=e+1|0}n=n+1|0}}}while(0);if(o)e=0;else{e=0;u=17}}if((u|0)==17)G2(a);return e|0}function mb(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0,f=0,l=0.0,s=0,o=0,u=0,b=0,h=0,w=0,k=0;r=t[46930]|0;if(r|0)sP(r);t[46930]=lP(A,A,0.0)|0;r=t[46931]|0;if(r|0)G2(r);t[46931]=KF(A<<2)|0;r=t[46932]|0;if(r|0)G2(r);b=KF(A<<3)|0;t[46932]=b;h=t[46930]|0;w=t[46931]|0;f=0;while(1){if((f|0)>=(A|0)){i=10;break}i=e+(f<<2)|0;n=h+(f<<2)|0;a=0.0;r=0;while(1){if((r|0)==(A|0))break;l=+c[(t[i>>2]|0)+(r<<3)>>3];c[(t[n>>2]|0)+(r<<3)>>3]=l;l=+Q(+l);a=a>3]=1.0/a;t[w+(f<<2)>>2]=f;f=f+1|0}e:do{if((i|0)==10){u=A+-1|0;r=0;o=0;A:while(1){if((o|0)<(u|0)){i=o;s=r;a=0.0}else break;while(1){if((i|0)>=(A|0))break;e=t[w+(i<<2)>>2]|0;l=+Q(+ +c[(t[h+(e<<2)>>2]|0)+(o<<3)>>3]);l=+c[b+(e<<3)>>3]*l;e=a>2]|0;e=w+(s<<2)|0;t[r>>2]=t[e>>2];t[e>>2]=f}n=t[h+(t[r>>2]<<2)>>2]|0;e=o+1|0;a=1.0/+c[n+(o<<3)>>3];i=e;while(1){if((i|0)>=(A|0)){r=s;o=e;continue A}f=t[h+(t[w+(i<<2)>>2]<<2)>>2]|0;r=f+(o<<3)|0;l=+c[r>>3]*a;c[r>>3]=l;r:do{if(l!=0.0){r=e;while(1){if((r|0)>=(A|0))break r;k=f+(r<<3)|0;c[k>>3]=+c[k>>3]-+c[n+(r<<3)>>3]*l;r=r+1|0}}}while(0);i=i+1|0}}r=+c[(t[h+(t[w+(u<<2)>>2]<<2)>>2]|0)+(u<<3)>>3]!=0.0&1}else if((i|0)==15){c[b+(f<<3)>>3]=0.0;r=0}}while(0);return r|0}function pb(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0,f=0,l=0,s=0,o=0;s=t[46930]|0;o=t[46931]|0;l=0;while(1){if((l|0)>=(r|0)){i=r;break}n=t[o+(l<<2)>>2]|0;f=s+(n<<2)|0;a=0.0;i=0;while(1){if((i|0)==(l|0))break;a=+c[e+(i<<3)>>3]*+c[(t[f>>2]|0)+(i<<3)>>3]+a;i=i+1|0}c[e+(l<<3)>>3]=+c[A+(n<<3)>>3]-a;l=l+1|0}while(1){A=i+-1|0;if((i|0)<=0)break;n=o+(A<<2)|0;a=0.0;while(1){if((i|0)>=(r|0))break;a=+c[e+(i<<3)>>3]*+c[(t[s+(t[n>>2]<<2)>>2]|0)+(i<<3)>>3]+a;i=i+1|0}i=e+(A<<3)|0;c[i>>3]=(+c[i>>3]-a)/+c[(t[s+(t[n>>2]<<2)>>2]|0)+(A<<3)>>3];i=A}return}function Eb(e){e=e|0;var A=0;A=$F(8)|0;t[A>>2]=e;t[A+4>>2]=0;return A|0}function Bb(e,A){e=e|0;A=A|0;var r=0,i=0;if(e|0)do{r=e;e=t[e+4>>2]|0;i=t[r>>2]|0;if(i|0)F5[A&127](i);G2(r)}while((e|0)!=0);return}function yb(e,A){e=e|0;A=A|0;A=Eb(A)|0;t[A+4>>2]=e;return A|0}function Cb(e){e=e|0;return t[e>>2]|0}function Ib(e){e=e|0;return t[e+4>>2]|0}function Zb(e){e=e|0;var A=0;A=$F(12)|0;t[A>>2]=e;t[A+4>>2]=0;t[A+8>>2]=0;return A|0}function Gb(e,A){e=e|0;A=A|0;var r=0,i=0;if(e|0)do{r=e;e=t[e+4>>2]|0;i=t[r>>2]|0;if(i|0)F5[A&127](i);G2(r)}while((e|0)!=0);return}function Lb(e,A){e=e|0;A=A|0;A=Zb(A)|0;if(e|0){t[A+4>>2]=e;t[e+8>>2]=A}return A|0}function Qb(e){e=e|0;return t[e>>2]|0}function Db(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;if(e|0){i=t[e+4>>2]|0;a=t[e+8>>2]|0;n=t[e>>2]|0;if(n|0)F5[A&127](n);G2(e);if(i|0)t[i+8>>2]=a;t[(a|0?a+4|0:r)>>2]=i}return}function zb(e){e=e|0;t[e>>2]=0;t[e+4>>2]=0;return}function Wb(e){e=e|0;var A=0;A=KF(64)|0;zb(A+36|0);t[A+8>>2]=e;return A|0}function Yb(e){e=e|0;if(e|0){rh(t[e+32>>2]|0);G2(e)}return}function Fb(e){e=e|0;return gk(t[e+8>>2]|0)|0}function Mb(e,A){e=e|0;A=A|0;var r=0,i=0;t[A+4>>2]=0;r=e+4|0;i=t[r>>2]|0;t[((i|0)==0?e:i+4|0)>>2]=A;t[r>>2]=A;return}function Vb(e,A){e=e|0;A=A|0;var r=0;r=t[e>>2]|0;if(!r){t[e>>2]=A;e=e+4|0}else t[A+4>>2]=r;t[e>>2]=A;return}function Nb(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;Rb(e,A);s=t[A>>2]|0;f=t[s+4>>2]|0;while(1){if(!f)break;c=t[f+8>>2]|0;l=sd(c)|0;r=t[(t[l+16>>2]|0)+112>>2]|0;e=t[r+16+4>>2]|0;r=t[r+8>>2]|0;a=l;l=cd(c,l)|0;while(1){if(!l)break;i=t[(t[l+16>>2]|0)+112>>2]|0;n=t[i+16+4>>2]|0;if((n|0)<(e|0)){a=l;r=t[i+8>>2]|0;e=n}l=cd(c,l)|0}l=t[(t[r+16>>2]|0)+112>>2]|0;c=l+4|0;t[c>>2]=t[c>>2]|8;t[f>>2]=a;c=t[f+4>>2]|0;Mb((t[l+12>>2]|0)+36|0,f);f=c}zb(A);return s|0}function Rb(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;n=l+8|0;i=t[A+24>>2]|0;if(!((i|0)!=0?(r=gd(e,i,0)|0,(r|0)!=0):0))a=3;e:do{if((a|0)==3){i=A+20|0;A:do{if(t[i>>2]|0){r=sd(e)|0;while(1){if(!r)break A;if((gx(t[t[(t[r+16>>2]|0)+112>>2]>>2]|0,t[i>>2]|0,0)|0)<<24>>24)break e;r=cd(e,r)|0}}}while(0);r=sd(e)|0}}while(0);if(0){a=t[15712]|0;t[f>>2]=Mk(r)|0;a3(a,96223,f)|0}t[n+4>>2]=0;t[n>>2]=0;xb(e,r,A,1,n);h=l;return}function xb(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;o=r+8|0;c=t[o>>2]|0;t[o>>2]=c+1;o=A+16|0;t[(t[(t[o>>2]|0)+112>>2]|0)+16+4>>2]=c;t[(t[(t[o>>2]|0)+112>>2]|0)+24>>2]=c;c=(i|0)==0;s=ek(e,A)|0;while(1){if(!s)break;i=t[s>>2]&3;n=t[((i|0)==2?s:s+-48|0)+40>>2]|0;if((n|0)==(A|0)){i=t[((i|0)==3?s:s+48|0)+40>>2]|0;n=t[(t[s+16>>2]|0)+120>>2]|0;if(!(t[n>>2]|0))t[n>>2]=-1}else{i=t[(t[s+16>>2]|0)+120>>2]|0;if(!(t[i>>2]|0)){t[i>>2]=1;i=n}else i=n}n=i+16|0;f=t[(t[n>>2]|0)+112>>2]|0;l=t[f+16+4>>2]|0;do{if(!l){t[f+8>>2]=A;Jb(a,s);xb(e,i,r,0,a);l=(t[(t[o>>2]|0)+112>>2]|0)+24|0;t[l>>2]=t[(t[(t[((t[l>>2]|0)<(t[(t[(t[n>>2]|0)+112>>2]|0)+24>>2]|0)?A:i)+16>>2]|0)+112>>2]|0)+24>>2];if((t[(t[(t[n>>2]|0)+112>>2]|0)+24>>2]|0)>=(t[(t[(t[o>>2]|0)+112>>2]|0)+16+4>>2]|0)){i=0;do{f=Hb(a)|0;n=(t[t[(t[f+16>>2]|0)+120>>2]>>2]|0)==1;n=t[((t[f>>2]&3|0)==((n?2:3)|0)?f:f+((n?-1:1)*48|0)|0)+40>>2]|0;if(!(t[(t[(t[n+16>>2]|0)+112>>2]|0)+12>>2]|0)){if(!i)i=Pb(e,r)|0;Xb(i,n)}}while((f|0)!=(s|0));if(i|0){if((t[(t[(t[o>>2]|0)+112>>2]|0)+12>>2]|0)==0?(Fb(i)|0)>1:0)Xb(i,A);if(!c?(t[(t[(t[o>>2]|0)+112>>2]|0)+12>>2]|0)==(i|0):0){Vb(r,i);break}Mb(r,i)}}}else{n=t[(t[o>>2]|0)+112>>2]|0;if((t[n+8>>2]|0)!=(i|0)){f=n+24|0;n=t[f>>2]|0;t[f>>2]=(n|0)<(l|0)?n:l}}}while(0);s=Ak(e,s,A)|0}if(!c?(t[(t[(t[o>>2]|0)+112>>2]|0)+12>>2]|0)==0:0){o=Pb(e,r)|0;Xb(o,A);Vb(r,o)}return}function Jb(e,A){e=e|0;A=A|0;t[(t[(t[A+16>>2]|0)+120>>2]|0)+4>>2]=t[e>>2];t[e>>2]=A;A=e+4|0;t[A>>2]=(t[A>>2]|0)+1;return}function Hb(e){e=e|0;var A=0,r=0,i=0;A=t[e>>2]|0;if(!A)ge(138394,96254,65,96266);r=e+4|0;i=t[r>>2]|0;if((i|0)>0){t[e>>2]=t[(t[(t[A+16>>2]|0)+120>>2]|0)+4>>2];t[r>>2]=i+-1;return A|0}else ge(96244,96254,61,96266);return 0}function Pb(e,A){e=e|0;A=A|0;return Wb(Sb(e,A)|0)|0}function Xb(e,A){e=e|0;A=A|0;hd(t[e+8>>2]|0,A,1)|0;t[(t[(t[A+16>>2]|0)+112>>2]|0)+12>>2]=e;return}function Sb(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=h;h=h+144|0;a=r;i=r+8|0;n=A+12|0;A=t[n>>2]|0;t[n>>2]=A+1;t[a>>2]=A;T4(i,96234,a)|0;A=Rv(e,i,1)|0;Sd(A,137483,280,1)|0;h=r;return A|0}function jb(e){e=e|0;var A=0,r=0;A=t[e+36>>2]|0;while(1){if(!A)break;r=t[A+4>>2]|0;jb(A);A=r}Yb(e);return}function Ub(e,A,r){e=e|0;A=A|0;r=r|0;Tb(e,A,+c[r+32>>3]);return}function Tb(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,n=0,f=0;i=A+36|0;a=0;while(1){i=t[i>>2]|0;if(!i)break;Tb(e,i,r);i=i+4|0;a=a+1|0}i=uh(e,A,r)|0;t[A+32>>2]=i;e=sh(i)|0;if((a|0)>0)r=+Ob(a,e,i,A,r);else r=3.141592653589793;if((((e|0)==1?(n=t[A>>2]|0,n|0):0)?t[(t[(t[n+16>>2]|0)+112>>2]|0)+8>>2]|0:0)?(f=A+48|0,c[f>>3]=r,r<0.0):0)c[f>>3]=r+6.283185307179586;return}function Ob(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;var n=0.0,f=0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+48|0;g=p;m=KF(e*56|0)|0;t[g+40>>2]=t[i+36>>2];w=i+16|0;l=+c[w>>3];k=g+8|0;c[k>>3]=l;c[g>>3]=l;t[g+44>>2]=t[i>>2];l=6.283185307179586/+(A|0);c[g+16>>3]=l;d=g+24|0;c[d>>3]=-1.0;v=g+32|0;c[v>>3]=-1.0;s=0;b=0;n=0.0;while(1){f=t[r>>2]|0;if(!f)break;r=t[f>>2]|0;if(!(t[(t[(t[r+16>>2]|0)+112>>2]|0)+4>>2]&8))r=b;else{u=m+(b*56|0)|0;t[u>>2]=r;c[m+(b*56|0)+8>>3]=l*+(s|0);r=b+1|0;n=+_b(u,g,a)}s=s+1|0;b=r;r=f+4|0}e:do{switch(b|0){case 1:{c[m+40>>3]=1.0;r=0;break}case 2:{l=+c[m+64>>3]-+c[m+8>>3];qb(m,m+56|0,l>3.141592653589793?6.283185307179586-l:l);r=0;break}default:{u=m+8|0;o=m;r=0;while(1){if((r|0)>=(b|0)){r=0;break e}r=r+1|0;if((r|0)==(b|0)){f=m;l=+c[u>>3]+6.283185307179586-+c[o+8>>3];s=o+56|0}else{s=o+56|0;f=s;l=+c[o+64>>3]-+c[o+8>>3]}qb(o,f,l);o=s}}}}while(0);while(1){if((r|0)>=(b|0))break;Kb(m+(r*56|0)|0,g,A,a);r=r+1|0}G2(m);if((e|0)==1){a=n+a*.5;$b(i,-a,0.0,0.0);c[w>>3]=+c[w>>3]+a;m=i+56|0;t[m>>2]=t[m>>2]|1}else c[w>>3]=+c[k>>3];h=p;return+((+c[v>>3]+ +c[d>>3])*.5+-3.141592653589793)}function _b(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0.0,n=0.0,f=0,l=0,s=0.0;f=0;a=0.0;n=0.0;i=A+40|0;while(1){l=t[i>>2]|0;if(!l)break;i=t[l>>2]|0;if(!i)i=0;else i=t[(t[(t[i+16>>2]|0)+112>>2]|0)+8>>2]|0;if((i|0)==(t[e>>2]|0)){s=+c[l+16>>3];i=f+1|0;a=a+r+s*2.0;n=n>3]=a;t[e+48>>2]=f;c[e+16>>3]=n+r+ +c[A>>3];c[e+24>>3]=n;return+n}function qb(e,A,r){e=e|0;A=A|0;r=+r;var i=0.0,a=0.0;a=+c[A+16>>3];i=+c[e+16>>3];r=(i*+c[A+32>>3]+a*+c[e+32>>3])/(r*2.0*a*i);r=r<1.0?1.0:r;e=e+40|0;if(r>+c[e>>3])c[e>>3]=r;e=A+40|0;if(r>+c[e>>3])c[e>>3]=r;return}function Kb(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0.0,n=0.0,f=0,l=0.0,s=0.0,o=0.0,u=0.0,b=0,h=0,w=0.0,k=0.0,d=0,v=0,g=0,m=0.0,p=0.0,E=0,B=0,y=0.0,C=0,I=0,Z=0,G=0,L=0.0,Q=0.0;C=A+8|0;y=+c[C>>3];I=A+24|0;s=+c[I>>3];Z=A+32|0;l=+c[Z>>3];a=+c[e+16>>3]*+c[e+40>>3];B=(r|0)==1;if(B){p=+c[e+32>>3];n=p*.15915494309189535;n=a>n?a:n;a=n*6.283185307179586-p;if(a>0.0){i=a/+(t[e+48>>2]|0)+i;o=0.0;a=n}else{o=0.0;a=n}}else o=+c[e+8>>3]-+c[e+32>>3]/(a*2.0);k=+c[e+24>>3]+a;d=k>y;v=e+48|0;g=((t[v>>2]|0)+1|0)/2|0;m=1.0/a;p=i/a*.5;E=e+8|0;b=A+40|0;h=0;w=0.0;n=o;while(1){b=t[b>>2]|0;if(!b)break;f=t[b>>2]|0;if(!f)f=0;else f=t[(t[(t[f+16>>2]|0)+112>>2]|0)+8>>2]|0;if((f|0)==(t[e>>2]|0)?(sh(t[b+32>>2]|0)|0)>=1:0){o=+c[b+16>>3];u=o*m;do{if(!B)if((t[v>>2]|0)==1){n=+c[E>>3];break}else{n=n+p+u;break}else{if(n!=0.0)n=(t[v>>2]|0)==2?3.141592653589793:u+n;l=n;s=s<0.0?n:s}}while(0);Q=+W(+n)*a;L=+Y(+n)*a;$b(b,Q,L,+eh(b,Q,L,n));n=(B?(o+i)*m:u+p)+n;h=h+1|0;f=h;o=(h|0)==(g|0)?n:w}else{f=h;o=w}b=b+4|0;h=f;w=o}a=d?k:y;if((r|0)>1?(G=t[e>>2]|0,(G|0)==(t[A+44>>2]|0)):0)c[(t[(t[G+16>>2]|0)+112>>2]|0)+24>>3]=w;c[C>>3]=a;c[I>>3]=s;c[Z>>3]=l;return}function $b(e,A,r,i){e=e|0;A=+A;r=+r;i=+i;var a=0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,h=0.0,w=0.0;u=t[e+8>>2]|0;b=i!=0.0;a=sd(u)|0;while(1){if(!a)break;s=t[(t[a+16>>2]|0)+132>>2]|0;f=+c[s>>3];o=s+8|0;n=+c[o>>3];if(b){h=+W(+i);w=+Y(+i);l=h*f-w*n;n=w*f+h*n}else l=f;c[s>>3]=l+A;c[o>>3]=n+r;a=cd(u,a)|0}a=e+36|0;while(1){a=t[a>>2]|0;if(!a)break;$b(a,A,r,i);a=a+4|0}return}function eh(e,A,r,i){e=e|0;A=+A;r=+r;i=+i;var a=0.0,n=0,f=0,l=0.0,s=0.0,o=0,u=0,b=0,h=0;u=t[e+8>>2]|0;a=+c[e+48>>3];do{if(!(a>=0.0)){if((sh(t[e+32>>2]|0)|0)==2){a=i+-1.5707963267948966;break}o=t[e>>2]|0;b=o+16|0;f=t[(t[b>>2]|0)+132>>2]|0;a=+c[f>>3]+A;s=+c[f+8>>3]+r;a=s*s+a*a;f=sd(u)|0;n=o;while(1){if(!f)break;if((f|0)!=(o|0)?(h=t[(t[f+16>>2]|0)+132>>2]|0,l=+c[h>>3]+A,s=+c[h+8>>3]+r,l=s*s+l*l,l>3];s=+c[e+16>>3]-l;n=t[b>>2]|0;f=t[n+132>>2]|0;a=+c[f>>3];if(a>-s?(t[e+56>>2]&1|0)!=0:0){r=+D(+(r*r+A*A));A=+R(+ +c[f+8>>3],+(a+s));a=+W(+A);a=i+1.5707963267948966-A-+V(+((s-l/a)/r*a));break}else{a=+R(+ +c[f+8>>3],+a);a=i+3.141592653589793-a-+c[(t[n+112>>2]|0)+24>>3];a=a>6.283185307179586?a+-6.283185307179586:a;break}}else a=0.0}else{a=3.141592653589793-a+i;a=a<0.0?a+6.283185307179586:a}}while(0);return+a}function Ah(){return KF(12)|0}function rh(e){e=e|0;var A=0,r=0;if(e|0){A=t[e>>2]|0;while(1){if(!A)break;r=t[A+4>>2]|0;G2(A);A=r}G2(e)}return}function ih(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=ah(r)|0;r=e+8|0;t[r>>2]=(t[r>>2]|0)+1;r=e+4|0;i=t[r>>2]|0;if((A|0)==0|(i|0)==(A|0)){t[(i|0?i+4|0:e)>>2]=a;t[a+8>>2]=i;i=0}else{i=A+4|0;r=t[i>>2]|0;t[i>>2]=a;t[a+8>>2]=A;i=r;r=r+8|0}t[r>>2]=a;t[a+4>>2]=i;return}function ah(e){e=e|0;var A=0;A=KF(12)|0;t[A>>2]=e;return A|0}function th(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;A=t[e>>2]|0;r=A;while(1){if(!A)break;n=A+4|0;i=t[n>>2]|0;a=A+8|0;t[n>>2]=t[a>>2];t[a>>2]=i;A=i}a=e+4|0;n=t[a>>2]|0;t[a>>2]=r;t[e>>2]=n;return e|0}function nh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=t[e>>2]|0;if((r|0)!=(A|0)){a=A+8|0;i=t[a>>2]|0;t[e>>2]=A;t[a>>2]=0;A=e+4|0;e=t[A>>2]|0;t[e+4>>2]=r;t[r+8>>2]=e;t[A>>2]=i;t[i+4>>2]=0}return}function fh(e){e=e|0;var A=0,r=0,i=0;r=Ah()|0;i=r+4|0;A=0;while(1){e=t[e>>2]|0;if(!e)break;ih(r,A,t[e>>2]|0);A=t[i>>2]|0;e=e+4|0}return r|0}function lh(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0;a=e;while(1){s=t[a>>2]|0;if(!s){c=6;break}if((t[s>>2]|0)==(A|0))break;a=s+4|0}if((c|0)==6)ge(96270,96277,217,96288);l=s+8|0;a=t[l>>2]|0;n=s+4|0;A=t[n>>2]|0;t[(a|0?a+4|0:e)>>2]=A;f=e+4|0;t[(A|0?A+8|0:f)>>2]=a;A=0;a=e;while(1){a=t[a>>2]|0;if(!a)break;if((t[a>>2]|0)==(r|0)){c=9;break}A=a;a=a+4|0}if((c|0)==9){do{if(!i)if((a|0)==(t[e>>2]|0)){t[e>>2]=s;t[n>>2]=a;t[l>>2]=0;a=a+8|0;break}else{t[A+4>>2]=s;t[l>>2]=A;t[n>>2]=a;a=a+8|0;break}else if((a|0)==(t[f>>2]|0)){t[f>>2]=s;t[n>>2]=0;t[l>>2]=a;a=a+4|0;break}else{t[l>>2]=a;a=a+4|0;t[n>>2]=t[a>>2];t[(t[a>>2]|0)+8>>2]=s;break}}while(0);t[a>>2]=s}return}function sh(e){e=e|0;return t[e+8>>2]|0}function ch(e,A){e=e|0;A=A|0;oh(e,th(A)|0);G2(A);return}function oh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=t[A>>2]|0;if(r|0){i=e+4|0;a=t[i>>2]|0;t[a+4>>2]=r;t[r+8>>2]=a;t[i>>2]=t[A+4>>2];r=e+8|0;t[r>>2]=(t[r>>2]|0)+(t[A+8>>2]|0)}return}function uh(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,h=0.0;u=t[A+8>>2]|0;bh(e,A);o=hh(u)|0;e=kh(wh(o)|0)|0;dh(u,e);u=vh(e,u)|0;e=sh(u)|0;l=+gh(u);s=(e|0)==1;a=+(e|0);f=a*.15915494309189535*(l+r);n=s?0.0:f;e=u;while(1){e=t[e>>2]|0;if(!e)break;if(t[(t[(t[(t[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&8|0){i=4;break}e=e+4|0}if((i|0)==4)nh(u,e);r=1.0/a;i=0;e=u;while(1){e=t[e>>2]|0;if(!e)break;b=(t[e>>2]|0)+16|0;t[(t[(t[b>>2]|0)+112>>2]|0)+16>>2]=i;c[(t[(t[b>>2]|0)+112>>2]|0)+24>>3]=0.0;a=6.283185307179586*r*+(i|0);h=+W(+a)*n;b=t[(t[b>>2]|0)+132>>2]|0;c[b>>3]=h;c[b+8>>3]=+Y(+a)*n;i=i+1|0;e=e+4|0}h=s?l*.5:f;c[A+16>>3]=h;c[A+24>>3]=h;c[A+48>>3]=-1.0;vk(o)|0;return u|0}function bh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=t[A+8>>2]|0;r=sd(a)|0;while(1){if(!r)break;i=Ow(e,r)|0;while(1){if(!i)break;if((t[(t[(t[(t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+12>>2]|0)==(A|0))uk(a,i,1)|0;i=qw(e,i)|0}r=cd(a,r)|0}return}function hh(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;n=c;a=Ch(e,n)|0;n=t[n>>2]|0;l=gk(n)|0;f=Ih(n)|0;l=l+-3|0;i=0;while(1){if((i|0)>=(l|0))break;s=Fh(f)|0;r=ek(n,s)|0;while(1){if(!r)break;A=t[r>>2]&3;e=t[((A|0)==2?r:r+-48|0)+40>>2]|0;if((s|0)==(e|0))e=t[((A|0)==3?r:r+48|0)+40>>2]|0;Yh(f,e);r=Ak(n,r,s)|0}Zh(n,s,a);r=ek(n,s)|0;while(1){if(!r)break;A=t[r>>2]&3;e=t[((A|0)==2?r:r+-48|0)+40>>2]|0;if((s|0)==(e|0))e=t[((A|0)==3?r:r+48|0)+40>>2]|0;A=(t[e+16>>2]|0)+236|0;t[A>>2]=(t[A>>2]|0)+-1;Wh(f,e);r=Ak(n,r,s)|0}Ed(n,s)|0;i=i+1|0}vk(n)|0;zh(f);h=c;return a|0}function wh(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+144|0;A=a;i=a+8|0;r=t[46933]|0;t[46933]=r+1;t[A>>2]=r;T4(i,96303,A)|0;i=Rv(e,i,1)|0;Sd(i,137483,280,1)|0;A=sd(e)|0;while(1){if(!A)break;hd(i,A,1)|0;r=A+16|0;t[(t[(t[r>>2]|0)+112>>2]|0)+16+12>>2]=0;t[(t[(t[r>>2]|0)+112>>2]|0)+32>>2]=0;r=(t[(t[r>>2]|0)+112>>2]|0)+4|0;t[r>>2]=t[r>>2]&-2;A=cd(e,A)|0}A=sd(e)|0;while(1){if(!A)break;r=t[(t[A+16>>2]|0)+112>>2]|0;if(!(t[r+4>>2]&1)){t[r+16>>2]=0;yh(e,A,i)}A=cd(e,A)|0}h=a;return i|0}function kh(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if((gk(e)|0)!=1){r=sd(e)|0;while(1){if(!r)break;A=0;i=ek(e,r)|0;while(1){if(!i)break;A=A+1|0;i=Ak(e,i,r)|0}if((A|0)==1)Bh(r,r,0,0);r=cd(e,r)|0}A=0;a=0;r=sd(e)|0;while(1){if(!r)break;n=t[(t[r+16>>2]|0)+112>>2]|0;n=(t[n+32>>2]|0)+(t[n+16+12>>2]|0)|0;i=(n|0)>(A|0);A=i?n:A;a=i?r:a;r=cd(e,r)|0}A=Ah()|0;i=a+16|0;r=(t[(t[i>>2]|0)+112>>2]|0)+16+4|0;while(1){r=t[r>>2]|0;if((r|0)==(a|0))break;ih(A,0,r);r=t[(t[r+16>>2]|0)+112>>2]|0;n=r+4|0;t[n>>2]=t[n>>2]|16;r=r+16|0}ih(A,0,a);n=t[(t[i>>2]|0)+112>>2]|0;e=n+4|0;t[e>>2]=t[e>>2]|16;if(t[n+32>>2]|0){e=Ah()|0;r=(t[(t[i>>2]|0)+112>>2]|0)+24|0;while(1){r=t[r>>2]|0;if((r|0)==(a|0))break;ih(e,0,r);r=t[(t[r+16>>2]|0)+112>>2]|0;n=r+4|0;t[n>>2]=t[n>>2]|16;r=r+16|0}ch(A,e)}}else{A=Ah()|0;n=sd(e)|0;ih(A,0,n);n=(t[(t[n+16>>2]|0)+112>>2]|0)+4|0;t[n>>2]=t[n>>2]|16}return A|0}function dh(e,A){e=e|0;A=A|0;var r=0;r=sd(e)|0;while(1){if(!r)break;if(!(t[(t[(t[r+16>>2]|0)+112>>2]|0)+4>>2]&16))Eh(e,r,A);r=cd(e,r)|0}return}function vh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;n=h;h=h+16|0;a=n;r=mh(e,A)|0;t[a>>2]=r;e:do{if(r){i=0;while(1){if((i|0)>=10)break e;e=ph(e,A,a)|0;f=r;r=t[a>>2]|0;if((f|0)==(r|0)|(r|0)==0)break;else i=i+1|0}}}while(0);h=n;return e|0}function gh(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0;A=0.0;while(1){e=t[e>>2]|0;if(!e)break;a=t[(t[t[(t[(t[e>>2]|0)+16>>2]|0)+112>>2]>>2]|0)+16>>2]|0;r=+c[a+32>>3];r=r>A?r:A;i=+c[a+40>>3];A=i>r?i:r;e=e+4|0}return+A}function mh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;c=Mh()|0;i=sd(A)|0;while(1){if(!i)break;r=Ow(A,i)|0;while(1){if(!r)break;t[t[(t[r+16>>2]|0)+120>>2]>>2]=0;r=qw(A,r)|0}i=cd(A,i)|0}s=1;r=0;while(1){f=t[e>>2]|0;if(!f)break;l=t[f>>2]|0;n=ek(A,l)|0;while(1){if(!n)break;a=n+16|0;if((t[t[(t[a>>2]|0)+120>>2]>>2]|0)>0){e=L5[t[c>>2]&63](c,0,128)|0;while(1){if(!e)break;i=t[e+8>>2]|0;if((t[t[(t[i+16>>2]|0)+120>>2]>>2]|0)>(t[t[(t[a>>2]|0)+120>>2]>>2]|0)?(o=t[i>>2]&3,(t[((o|0)==2?i:i+-48|0)+40>>2]|0)!=(l|0)):0)r=r+((t[((o|0)==3?i:i+48|0)+40>>2]|0)!=(l|0)&1)|0;e=L5[t[c>>2]&63](c,e,8)|0}Hh(c,n)}n=Ak(A,n,l)|0}i=ek(A,l)|0;while(1){if(!i)break;e=t[(t[i+16>>2]|0)+120>>2]|0;if(!(t[e>>2]|0)){t[e>>2]=s;Jh(c,i)}i=Ak(A,i,l)|0}e=f+4|0;s=s+1|0}xh(c);return r|0}function ph(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;i=t[r>>2]|0;c=sd(A)|0;e:while(1){if(!c)break;s=ek(A,c)|0;while(1){if(!s)break;n=t[s>>2]&3;a=t[((n|0)==3?s:s+48|0)+40>>2]|0;if((a|0)==(c|0))a=t[((n|0)==2?s:s+-48|0)+40>>2]|0;l=0;while(1){if((l|0)>=2)break;f=fh(e)|0;lh(e,c,a,l);n=mh(e,A)|0;if((n|0)<(i|0)){rh(f);if(!n){i=0;break e}else i=n}else{rh(e);e=f}l=l+1|0}s=Ak(A,s,c)|0}c=cd(A,c)|0}t[r>>2]=i;return e|0}function Eh(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=Ah()|0;i=Ow(e,A)|0;while(1){if(!i)break;a=i+-48|0;ih(f,0,t[((t[i>>2]&3|0)==2?i:a)+40>>2]|0);a=(t[(t[(t[((t[i>>2]&3|0)==2?i:a)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;t[a>>2]=t[a>>2]|32;i=qw(e,i)|0}i=Kw(e,A)|0;while(1){if(!i)break;a=i+48|0;ih(f,0,t[((t[i>>2]&3|0)==3?i:a)+40>>2]|0);a=(t[(t[(t[((t[i>>2]&3|0)==3?i:a)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;t[a>>2]=t[a>>2]|32;i=$w(e,i)|0}e:do{if((sh(f)|0)>1){a=r+4|0;e=r;while(1){i=t[e>>2]|0;if(!i){n=13;break e}e=i+4|0;if(!(t[(t[(t[(t[i>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32))continue;if(t[(t[(t[(t[t[((i|0)==(t[a>>2]|0)?r:e)>>2]>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break}ih(r,i,A)}else n=13}while(0);e:do{if((n|0)==13){A:do{if((sh(f)|0)>0){i=r;while(1){i=t[i>>2]|0;if(!i)break A;if(t[(t[(t[(t[i>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break;i=i+4|0}ih(r,i,A);break e}}while(0);ih(r,0,A)}}while(0);i=f;while(1){i=t[i>>2]|0;if(!i)break;r=(t[(t[(t[i>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;t[r>>2]=t[r>>2]&-33;i=i+4|0}rh(f);return}function Bh(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0;while(1){n=t[(t[(t[A+16>>2]|0)+112>>2]|0)+16>>2]|0;if(!n)break;f=r+1|0;l=n+16|0;s=t[(t[l>>2]|0)+112>>2]|0;A=s+16|0;a=t[A+12>>2]|0;if(a){if((a|0)>(r|0)){c=11;break}A=t[A+4>>2]|0;a=A;if((A|0)==(i|0))A=s;else{r=s+24|0;if(!((t[s+32>>2]|0)!=0?(t[r>>2]|0)==(i|0):0))i=A;t[r>>2]=a;A=t[(t[l>>2]|0)+112>>2]|0;t[A+32>>2]=t[A+16+12>>2];A=t[(t[l>>2]|0)+112>>2]|0}A=A+16|0}t[A+4>>2]=e;t[(t[(t[l>>2]|0)+112>>2]|0)+16+12>>2]=f;A=n;r=f}if((c|0)==11?(t[s+32>>2]|0)<=(r|0):0){t[s+24>>2]=e;t[(t[(t[l>>2]|0)+112>>2]|0)+32>>2]=f}return}function yh(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=(t[(t[A+16>>2]|0)+112>>2]|0)+4|0;t[n>>2]=t[n>>2]|1;n=ek(e,A)|0;while(1){if(!n)break;a=t[n>>2]&3;i=t[((a|0)==2?n:n+-48|0)+40>>2]|0;if((i|0)==(A|0))i=t[((a|0)==3?n:n+48|0)+40>>2]|0;a=i+16|0;if(!(t[(t[(t[a>>2]|0)+112>>2]|0)+4>>2]&1)){uk(r,n,1)|0;t[(t[(t[a>>2]|0)+112>>2]|0)+16>>2]=A;yh(e,i,r)}n=Ak(e,n,A)|0}return}function Ch(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;c=h;h=h+144|0;s=c+8|0;l=c;r=c+16|0;f=t[46934]|0;t[46934]=f+1;t[l>>2]=f;T4(r,96312,l)|0;l=Rv(e,r,1)|0;Sd(l,137483,280,1)|0;f=t[46934]|0;t[46934]=f+1;t[s>>2]=f;T4(r,96312,s)|0;f=e+24|0;i[s>>0]=i[f>>0]|0;i[s+1>>0]=i[f+1>>0]|0;i[s+2>>0]=i[f+2>>0]|0;i[s+3>>0]=i[f+3>>0]|0;s=hk(r,s,0)|0;r=sd(e)|0;while(1){if(!r)break;hd(l,r,1)|0;f=gd(s,Mk(r)|0,1)|0;Sd(f,137447,304,1)|0;t[(t[(t[r+16>>2]|0)+112>>2]|0)+16>>2]=f;r=cd(e,r)|0}a=sd(e)|0;while(1){if(!a)break;n=t[(t[(t[a+16>>2]|0)+112>>2]|0)+16>>2]|0;f=n+16|0;r=Ow(e,a)|0;while(1){if(!r)break;uk(l,r,1)|0;o=t[(t[(t[(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+16>>2]|0;u=lk(s,n,o,0,1)|0;Sd(u,137460,176,1)|0;t[(t[u+16>>2]|0)+116>>2]=r;u=(t[f>>2]|0)+236|0;t[u>>2]=(t[u>>2]|0)+1;o=(t[o+16>>2]|0)+236|0;t[o>>2]=(t[o>>2]|0)+1;r=qw(e,r)|0}a=cd(e,a)|0}t[A>>2]=s;h=c;return l|0}function Ih(e){e=e|0;var A=0,r=0;r=Gh()|0;A=sd(e)|0;while(1){if(!A)break;Wh(r,A);A=cd(e,A)|0}return r|0}function Zh(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0;u=t[(t[A+16>>2]|0)+236>>2]|0;w=u<<2;h=$F(w)|0;w=$F(w)|0;l=0;o=ek(e,A)|0;b=0;a=0;while(1){if(!o)break;i=t[o>>2]&3;n=t[((i|0)==2?o:o+-48|0)+40>>2]|0;if((n|0)==(A|0))n=t[((i|0)==3?o:o+48|0)+40>>2]|0;f=0;c=ek(e,A)|0;s=l;while(1){if(!c)break;if((c|0)!=(o|0)){l=t[c>>2]&3;i=t[((l|0)==2?c:c+-48|0)+40>>2]|0;if((i|0)==(A|0))i=t[((l|0)==3?c:c+48|0)+40>>2]|0;l=lk(e,n,i,0,0)|0;if(l)if(n>>>0>>0){i=s+1|0;f=l+16|0;l=t[(t[f>>2]|0)+116>>2]|0;if(!l)f=1;else{Ed(r,l)|0;t[(t[f>>2]|0)+116>>2]=0;f=1}}else{f=1;i=s}else i=s}else i=s;c=Ak(e,c,A)|0;s=i}if(!f){t[w+(b<<2)>>2]=n;i=b+1|0}else{t[h+(a<<2)>>2]=n;i=b;a=a+1|0}l=s;o=Ak(e,o,A)|0;b=i}i=u+-1-l|0;e:do{if((i|0)>0){if((i|0)<(b|0))n=0;else{if((i|0)!=(b|0))break;a=t[h>>2]|0;n=a+16|0;i=0;while(1){if((i|0)>=(b|0))break e;u=t[w+(i<<2)>>2]|0;Sd(lk(e,a,u,0,1)|0,137460,176,1)|0;r=(t[n>>2]|0)+236|0;t[r>>2]=(t[r>>2]|0)+1;u=(t[u+16>>2]|0)+236|0;t[u>>2]=(t[u>>2]|0)+1;i=i+1|0}}while(1){if((n|0)>=(b|0)){a=2;break}a=n|1;if((a|0)>=(b|0)){a=2;break}r=t[w+(n<<2)>>2]|0;u=t[w+(a<<2)>>2]|0;Sd(lk(e,r,u,0,1)|0,137460,176,1)|0;r=(t[r+16>>2]|0)+236|0;t[r>>2]=(t[r>>2]|0)+1;u=(t[u+16>>2]|0)+236|0;t[u>>2]=(t[u>>2]|0)+1;n=n+2|0;i=i+-1|0}while(1){if((i|0)<=0)break e;u=t[w>>2]|0;b=t[w+(a<<2)>>2]|0;Sd(lk(e,u,b,0,1)|0,137460,176,1)|0;u=(t[u+16>>2]|0)+236|0;t[u>>2]=(t[u>>2]|0)+1;b=(t[b+16>>2]|0)+236|0;t[b>>2]=(t[b>>2]|0)+1;a=a+1|0;i=i+-1|0}}}while(0);G2(w);G2(h);return}function Gh(){return Uh(18240,t[4581]|0)|0}function Lh(e,A,r){e=e|0;A=A|0;r=r|0;r=$F(16)|0;t[r+12>>2]=0;t[r+8>>2]=t[A+8>>2];return r|0}function Qh(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function Dh(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;A=t[A>>2]|0;i=t[r>>2]|0;return((A|0)<(i|0)?-1:(A|0)>(i|0)&1)|0}function zh(e){e=e|0;Ph(e)|0;return}function Wh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+16|0;a=r;i=A+16|0;t[a+8>>2]=t[(t[i>>2]|0)+236>>2];e=(L5[t[e>>2]&63](e,a,1)|0)+12|0;t[(t[i>>2]|0)+164>>2]=t[e>>2];t[e>>2]=A;h=r;return}function Yh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f;a=A+16|0;t[n+8>>2]=t[(t[a>>2]|0)+236>>2];n=L5[t[e>>2]&63](e,n,4)|0;if(!n)ge(96322,96325,107,96335);i=n+12|0;r=t[i>>2]|0;if((r|0)==(A|0)){A=t[(t[a>>2]|0)+164>>2]|0;t[i>>2]=A;if(!A)L5[t[e>>2]&63](e,n,2)|0}else{do{e=(t[r+16>>2]|0)+164|0;r=t[e>>2]|0;i=(r|0)!=0}while(i&(r|0)!=(A|0));if(i)t[e>>2]=t[(t[r+16>>2]|0)+164>>2]}h=f;return}function Fh(e){e=e|0;var A=0,r=0,i=0,a=0;r=L5[t[e>>2]&63](e,0,128)|0;if(r){a=r+12|0;A=t[a>>2]|0;i=t[(t[A+16>>2]|0)+164>>2]|0;t[a>>2]=i;if(!i)L5[t[e>>2]&63](e,r,2)|0}else A=0;return A|0}function Mh(){return Uh(18276,t[4581]|0)|0}function Vh(e,A,r){e=e|0;A=A|0;r=r|0;r=$F(12)|0;t[r+8>>2]=t[A+8>>2];return r|0}function Nh(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function Rh(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;A=t[A>>2]|0;i=t[r>>2]|0;return(A>>>0>i>>>0?1:(A>>>0>>0)<<31>>31)|0}function xh(e){e=e|0;Ph(e)|0;return}function Jh(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i+8>>2]=A;L5[t[e>>2]&63](e,i,1)|0;h=r;return}function Hh(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i+8>>2]=A;L5[t[e>>2]&63](e,i,2)|0;h=r;return}function Ph(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;do{if((e|0)!=0?(t[e+24>>2]|0)<=0:0){f=t[e+4>>2]|0;n=f+32|0;A=t[n>>2]|0;if(A){A=Q5[A&127](e,2,0,f)|0;if((A|0)<0){A=-1;break}}else A=0;if(t[e+28>>2]|0)Kh(e,0)|0;a=(A|0)==0;if(a){L5[t[t[e+16>>2]>>2]&63](e,0,64)|0;if((Oh(e)|0)>0){A=-1;break}r=e+8|0;A=t[r>>2]|0;if((t[A+12>>2]|0)>0){i=e+12|0;Q5[t[i>>2]&127](e,t[A+8>>2]|0,0,f)|0;A=t[r>>2]|0}else i=e+12|0;Q5[t[i>>2]&127](e,A,0,f)|0}A=t[e+20>>2]|0;if(A){if(a&(A|0)==1)Q5[t[e+12>>2]&127](e,e,0,f)|0}else G2(e);A=t[n>>2]|0;if(!A)A=0;else{Q5[A&127](e,6,0,f)|0;A=0}}else A=-1}while(0);return A|0}function Xh(e){e=e|0;var A=0,r=0,i=0;i=e+8|0;A=t[i>>2]|0;r=t[A>>2]|0;e:do{if(!(r&12)){if(!(r&3)){r=A+8|0;e=t[r>>2]|0;t[r>>2]=0;break}e=Sh(e)|0;r=t[i>>2]|0;A=t[r+8>>2]|0;r=A+(t[r+12>>2]<<2)|0;while(1){if(A>>>0>=r>>>0)break e;t[A>>2]=0;A=A+4|0}}else e=t[A+4>>2]|0}while(0);i=t[i>>2]|0;t[i>>2]=t[i>>2]&-4097;t[i+16>>2]=0;t[i+4>>2]=0;return e|0}function Sh(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;n=e+8|0;e=t[n>>2]|0;A=t[e>>2]|0;if(!(A&4096)){e:do{if(!(A&3)){if(A&112|0){e=t[e+8>>2]|0;break}e=t[e+4>>2]|0;if(!e)e=0;else{while(1){A=e+4|0;r=t[A>>2]|0;if(!r){i=e;break}t[A>>2]=t[r>>2];t[r>>2]=e;e=r}while(1){A=t[i>>2]|0;if(!A)break e;r=t[A+4>>2]|0;if(!r){i=A;continue}while(1){t[A+4>>2]=t[r>>2];t[r>>2]=A;A=t[r+4>>2]|0;if(!A)break;else{a=r;r=A;A=a}}t[i>>2]=r;i=r}}}else{i=t[e+8>>2]|0;a=i+(t[e+12>>2]<<2)|0;A=0;e=0;while(1){if(i>>>0>=a>>>0)break e;r=t[i>>2]|0;if(r){if(!A){A=r;e=r}else t[A>>2]=r;while(1){r=t[A>>2]|0;if(!r)break;else A=r}t[i>>2]=A}i=i+4|0}}}while(0);n=t[n>>2]|0;t[n+4>>2]=e;t[n>>2]=t[n>>2]|4096}else e=t[e+4>>2]|0;return e|0}function jh(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0;v=e+8|0;if(t[t[v>>2]>>2]&4096|0)Th(e,0)|0;d=t[e+4>>2]|0;u=t[d>>2]|0;b=t[d+4>>2]|0;k=d+8|0;m=t[k>>2]|0;h=t[d+20>>2]|0;w=e+20|0;a=t[w>>2]&-32769;t[w>>2]=a;e:do{if(!A){if(r&384|0){a=t[v>>2]|0;i=t[a+8>>2]|0;if(!i){i=0;break}if(r&256){i=t[i+4>>2]|0;t[a+4>>2]=i;if(!i){i=0;break}}else t[a+4>>2]=i;if((m|0)<0){i=t[i+8>>2]|0;break}else{i=i+(0-m)|0;break}}if(r&4098|0){i=t[v>>2]|0;if(t[i>>2]&144|0){i=0;break}i=t[i+8>>2]|0;if(!i){i=0;break}else{f=i;g=84;break}}if(!(r&64))i=0;else{l=d+16|0;A:do{if((t[l>>2]|0)!=0|(m|0)<0){s=e+12|0;c=(m|0)<0;a=0-m|0;i=t[(t[v>>2]|0)+8>>2]|0;while(1){if(!i)break A;n=t[i>>2]|0;f=t[l>>2]|0;if(f|0){if(c)A=t[i+8>>2]|0;else A=i+a|0;V5[f&127](e,A,d)}if((t[k>>2]|0)>=0){i=n;continue}Q5[t[s>>2]&127](e,i,0,d)|0;i=n}}}while(0);i=t[v>>2]|0;t[i+4>>2]=0;t[i+8>>2]=0;t[(t[v>>2]|0)+16>>2]=0;i=0}}else{if(r&2049|0){n=d+12|0;i=t[n>>2]|0;f=(r&1|0)==0;if(!(f|(i|0)==0)){i=L5[i&63](e,A,d)|0;if(!i){i=0;break}else a=i}else a=A;do{if((m|0)>-1)f=a+m|0;else{i=Q5[t[e+12>>2]&127](e,0,12,d)|0;if(i|0){t[i+8>>2]=a;f=i;break}if(!(t[n>>2]|0)){i=0;break e}i=t[d+16>>2]|0;if(f|(i|0)==0){i=0;break e}V5[i&127](e,a,d);i=0;break e}}while(0);n=t[v>>2]|0;i=t[n>>2]|0;do{if(!(i&128)){if(!(i&16))if(!(i&32)){g=51;break}else{g=48;break}a=t[n+4>>2]|0;i=(a|0)!=0;if(!(r&8192)){if(!i){g=48;break}if((a|0)==(t[n+8>>2]|0)){g=48;break}d=a+4|0;e=t[d>>2]|0;t[f+4>>2]=e;t[e>>2]=f;t[f>>2]=a;t[d>>2]=f;break}else{if(!i){g=51;break}i=t[a>>2]|0;if(!i){g=51;break}t[f>>2]=i;t[i+4>>2]=f;t[f+4>>2]=a;t[a>>2]=f;break}}else if(!(r&8192))g=48;else g=51}while(0);if((g|0)==48){i=t[n+8>>2]|0;t[f>>2]=i;if(!i)i=f;else t[f+4>>2]=t[i+4>>2];t[i+4>>2]=f;t[(t[v>>2]|0)+8>>2]=f}else if((g|0)==51){a=n+8|0;i=t[a>>2]|0;if(!i){t[a>>2]=f;i=f}else{d=i+4|0;t[t[d>>2]>>2]=f;t[f+4>>2]=t[d>>2]}t[i+4>>2]=f;t[f>>2]=0}i=t[v>>2]|0;a=i+16|0;n=t[a>>2]|0;if((n|0)>-1)t[a>>2]=n+1;t[i+4>>2]=f;if((m|0)<0){i=t[f+8>>2]|0;break}else{i=f+(0-m)|0;break}}f=t[v>>2]|0;do{if(!(r&512)){i=t[f+4>>2]|0;if(i|0){if((m|0)<0)n=t[i+8>>2]|0;else n=i+(0-m)|0;if((n|0)==(A|0))break}i=A+u|0;if((b|0)<0){A=t[i>>2]|0;g=68}else{A=i;g=68}}else g=68}while(0);if((g|0)==68){n=(m|0)<0;l=(b|0)<0;s=(h|0)==0;c=(b|0)<1;o=0-m|0;i=f+8|0;do{i=t[i>>2]|0;if(!i){i=0;break e}if(n)a=t[i+8>>2]|0;else a=i+o|0;a=a+u|0;if(l)a=t[a>>2]|0;do{if(s)if(c){a=e1(A,a)|0;break}else{a=F4(A,a,b)|0;break}else a=Q5[h&127](e,A,a,d)|0}while(0)}while((a|0)!=0);a=t[w>>2]|0}t[w>>2]=a|32768;if(!(r&4098)){do{if(!(r&8)){a=t[v>>2]|0;if(!(r&16)){t[a+4>>2]=i;break}if((i|0)==(t[a+8>>2]|0)){t[a+4>>2]=0;i=0;break e}else{i=i+4|0;g=108;break}}else{a=t[v>>2]|0;g=108}}while(0);if((g|0)==108){i=t[i>>2]|0;t[a+4>>2]=i;if(!i){i=0;break}}if((m|0)<0){i=t[i+8>>2]|0;break}else{i=i+(0-m)|0;break}}else{f=i;g=84}}}while(0);if((g|0)==84){i=t[f>>2]|0;if(i){t[i+4>>2]=t[f+4>>2];i=t[f>>2]|0}a=(t[v>>2]|0)+8|0;n=t[a>>2]|0;if((f|0)==(n|0)){t[a>>2]=i;i=t[(t[v>>2]|0)+8>>2]|0;if(i|0)t[i+4>>2]=t[f+4>>2]}else{a=f+4|0;t[t[a>>2]>>2]=i;i=n+4|0;if((f|0)==(t[i>>2]|0))t[i>>2]=t[a>>2]}i=t[v>>2]|0;a=i+4|0;if((f|0)==(t[a>>2]|0))n=t[f>>2]|0;else n=0;t[a>>2]=n;g=i+16|0;t[g>>2]=(t[g>>2]|0)+-1;if((m|0)<0)i=t[f+8>>2]|0;else i=f+(0-m)|0;a=t[d+16>>2]|0;if(!((r&2|0)==0|(a|0)==0))V5[a&127](e,i,d);if((t[k>>2]|0)<0)Q5[t[e+12>>2]&127](e,f,0,d)|0}return i|0}function Uh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;n=s;e:do{if((e|0)!=0&(A|0)!=0?(a=Z2(40)|0,(a|0)!=0):0){t[a>>2]=0;t[a+16>>2]=0;t[a+4>>2]=0;Aw(a,e,0)|0;r=a+20|0;l=e+32|0;t[r>>2]=0;t[r+4>>2]=0;t[r+8>>2]=0;t[r+12>>2]=0;t[r+16>>2]=0;r=t[l>>2]|0;do{if(r){t[n>>2]=0;r=Q5[r&127](a,1,n,e)|0;if((r|0)>=0)if(r){i=t[n>>2]|0;if(i|0)if(!(t[A+4>>2]&t[i>>2])){r=a;f=12;break}else{r=a;break}r=e+28|0;if(!(t[r>>2]|0)){r=a;f=12}else{G2(a);i=Q5[t[r>>2]&127](0,0,40,e)|0;if(!i){r=0;break e}t[i>>2]=0;t[i+16>>2]=0;t[i+4>>2]=0;Aw(i,e,0)|0;t[i+20>>2]=1;t[i+24>>2]=0;t[i+32>>2]=0;t[i+28>>2]=0;r=i;a=i;f=11}}else{r=a;f=11}else{r=a;f=12}}else{r=a;f=11}}while(0);if((f|0)==11){i=Q5[t[r+12>>2]&127](r,0,28,e)|0;t[n>>2]=i;if(!i){r=a;f=12}else{t[i>>2]=t[A+4>>2];n=i+4|0;t[n>>2]=0;t[n+4>>2]=0;t[n+8>>2]=0;t[n+12>>2]=0;t[n+16>>2]=0;t[n+20>>2]=0}}if((f|0)==12){G2(r);r=0;break}t[r+8>>2]=i;t[r>>2]=t[A>>2];t[r+16>>2]=A;i=t[l>>2]|0;if(i)Q5[i&127](r,5,a,e)|0}else r=0}while(0);h=s;return r|0}function Th(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;a=t[t[e+16>>2]>>2]|0;s=e+8|0;n=t[s>>2]|0;f=t[n>>2]|0;r=f&4096;if(!A)if(!r)A=-1;else{i=r;A=t[n+4>>2]|0;l=5}else if(!(t[n+16>>2]|0)){i=0;l=5}else A=-1;e:do{if((l|0)==5){t[n>>2]=f&-4097;if(!(f&3)){r=n+4|0;if(!(f&12)){t[r>>2]=0;r=n+8|0}t[r>>2]=A;if(i|0){A=0;break}t[(t[s>>2]|0)+16>>2]=-1;A=0;break}t[n+4>>2]=0;if(!i){t[n+16>>2]=0;while(1){if(!A){A=0;break e}s=t[A>>2]|0;L5[a&63](e,A,32)|0;A=s}}i=t[n+8>>2]|0;e=i+(t[n+12>>2]<<2)|0;while(1){if(i>>>0>=e>>>0){A=0;break e}r=t[i>>2]|0;if(r){t[i>>2]=A;A=t[r>>2]|0;t[r>>2]=0}i=i+4|0}}}while(0);return A|0}function Oh(e){e=e|0;var A=0,r=0,i=0;A=e+8|0;r=t[A>>2]|0;if(t[r>>2]&4096){Th(e,0)|0;r=t[A>>2]|0}i=r+16|0;e=t[i>>2]|0;do{if((e|0)<0){A=t[r>>2]|0;if(A&12|0){e=_h(t[r+4>>2]|0)|0;t[i>>2]=e;break}if(A&112){e=0;A=r+8|0;while(1){A=t[A>>2]|0;if(!A)break;e=e+1|0}t[i>>2]=e}}}while(0);return e|0}function _h(e){e=e|0;var A=0;if(!e)return 0;else{A=_h(t[e+4>>2]|0)|0;return A+1+(_h(t[e>>2]|0)|0)|0}return 0}function qh(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0;z=h;h=h+128|0;C=z+120|0;d=z;D=e+8|0;i=t[D>>2]|0;if(t[i>>2]&4096){Th(e,0)|0;i=t[D>>2]|0}Q=t[e+4>>2]|0;I=t[Q>>2]|0;Z=t[Q+4>>2]|0;B=Q+8|0;L=t[B>>2]|0;G=t[Q+20>>2]|0;g=e+20|0;t[g>>2]=t[g>>2]&-32769;f=t[i+4>>2]|0;e:do{if(!A)if((r&448|0)==0|(f|0)==0)i=0;else{if(!(r&64)){A:do{if(!(r&256)){i=f;while(1){a=i+4|0;n=t[a>>2]|0;if(!n)break A;t[a>>2]=t[n>>2];t[n>>2]=i;i=n}}else{i=f;while(1){a=t[i>>2]|0;if(!a)break A;e=a+4|0;t[i>>2]=t[e>>2];t[e>>2]=i;i=a}}}while(0);t[(t[D>>2]|0)+4>>2]=i;if((L|0)<0){i=t[i+8>>2]|0;break}else{i=i+(0-L)|0;break}}A=Q+16|0;if((t[A>>2]|0)!=0|(L|0)<0){s=e+12|0;c=(L|0)<0;l=0-L|0;i=f;do{f=i;while(1){i=f+4|0;a=t[i>>2]|0;if(!a)break;t[i>>2]=t[a>>2];t[a>>2]=f;f=a}i=t[f>>2]|0;a=t[A>>2]|0;if(a|0){if(c)n=t[f+8>>2]|0;else n=f+l|0;V5[a&127](e,n,Q)}if((t[B>>2]|0)<0)Q5[t[s>>2]&127](e,f,0,Q)|0}while((i|0)!=0);i=t[D>>2]|0}t[i+16>>2]=0;t[i+4>>2]=0;i=0}else{y=e+16|0;m=(r&4098|0)==0;A:do{if(m|(t[(t[y>>2]|0)+4>>2]|0)!=8)p=45;else{c=(Z|0)<0;i=A+I|0;if(c)i=t[i>>2]|0;l=(G|0)==0;s=(Z|0)<1;n=L5[t[e>>2]&63](e,A,4)|0;while(1){if(!n){p=45;break A}a=n+I|0;if(c)a=t[a>>2]|0;do{if(l)if(s){a=e1(i,a)|0;break}else{a=F4(i,a,Z)|0;break}else a=Q5[G&127](e,i,a,Q)|0}while(0);if(a|0){p=45;break A}if((n|0)==(A|0))break;n=L5[t[e>>2]&63](e,n,8)|0}f=t[(t[D>>2]|0)+4>>2]|0;t[C>>2]=t[f+4>>2];t[C+4>>2]=t[f>>2];i=C;p=180}}while(0);A:do{if((p|0)==45){do{if(!(r&2565)){if(r&32|0){if((L|0)<0)n=t[A+8>>2]|0;else n=A+(0-L)|0;i=n+I|0;if((Z|0)<0)a=t[i>>2]|0;else a=i;if(!f){i=A;a=C;f=C;p=198;break}else{i=A;v=a;s=A;p=64;break}}if(f){if((L|0)<0)i=t[f+8>>2]|0;else i=f+(0-L)|0;if((i|0)!=(A|0)){a=A+I|0;if((Z|0)<0){n=A;i=0;v=t[a>>2]|0;s=0;p=64}else{n=A;i=0;v=a;s=0;p=64}}else{i=0;n=A;a=C;c=C;s=0;p=141}}else{i=0;n=A;a=C;f=C;p=198}}else{if(!(r&512)){i=A+I|0;if((Z|0)<0)a=t[i>>2]|0;else a=i}else a=A;if(!f){i=0;n=A;a=C;f=C;p=198}else{n=A;i=0;v=a;s=0;p=64}}}while(0);r:do{if((p|0)==64){i:do{if((t[(t[y>>2]|0)+4>>2]|0)==4?(k=t[(t[D>>2]|0)+24>>2]|0,!((r&516|0)==0|(k|0)==0)):0){A=(L|0)<0;o=(Z|0)<0;u=(G|0)==0;b=(Z|0)<1;w=0-L|0;c=0;a=f;while(1){if((c|0)>=(k|0)){a=C;c=C;o=0;break}if(A)l=t[a+8>>2]|0;else l=a+w|0;l=l+I|0;if(o)l=t[l>>2]|0;do{if(u)if(b){l=e1(v,l)|0;break}else{l=F4(v,l,Z)|0;break}else l=Q5[G&127](e,v,l,Q)|0}while(0);if(!l){p=80;break}t[d+(c<<2)>>2]=l;a=t[((l|0)<0?a+4|0:a)>>2]|0;if(!a){i=0;break e}else c=c+1|0}if((p|0)==80)if(A){i=t[a+8>>2]|0;break e}else{i=a+w|0;break e}while(1){if((o|0)>=(k|0))break i;do{if((t[d+(o<<2)>>2]|0)<0){l=f+4|0;A=t[l>>2]|0;if((t[d+((o|1)<<2)>>2]|0)<0){t[l>>2]=t[A>>2];t[A>>2]=f;t[a+4>>2]=A;a=A;f=c;l=A+4|0;break}else{t[c>>2]=A;t[a+4>>2]=f;a=f;f=A;l=A;break}}else{l=t[f>>2]|0;if((t[d+((o|1)<<2)>>2]|0)>0){w=l+4|0;t[f>>2]=t[w>>2];t[w>>2]=f;t[c>>2]=l;f=l;break}else{t[a+4>>2]=l;t[c>>2]=f;a=l;l=l+4|0;break}}}while(0);c=f;o=o+2|0;f=t[l>>2]|0}}else{a=C;c=C}}while(0);u=(L|0)<0;b=(Z|0)<0;w=(G|0)!=0;k=(Z|0)<1;d=0-L|0;l=f;i:while(1){f=l;while(1){if(u)l=t[f+8>>2]|0;else l=f+d|0;l=l+I|0;if(b)l=t[l>>2]|0;do{if(!w)if(k){l=e1(v,l)|0;break}else{l=F4(v,l,Z)|0;break}else l=Q5[G&127](e,v,l,Q)|0}while(0);if(!l){p=140;break i}if((l|0)>=0)break;A=f+4|0;o=t[A>>2]|0;if(!o){p=121;break i}if(u)l=t[o+8>>2]|0;else l=o+d|0;l=l+I|0;if(b)l=t[l>>2]|0;do{if(!w)if(k){l=e1(v,l)|0;break}else{l=F4(v,l,Z)|0;break}else l=Q5[G&127](e,v,l,Q)|0}while(0);if((l|0)>=0){p=118;break}t[A>>2]=t[o>>2];t[o>>2]=f;t[a+4>>2]=o;f=t[o+4>>2]|0;if(!f){a=o;f=c;p=198;break r}else a=o}if((p|0)==118){p=0;if(!l){p=119;break}t[c>>2]=o;t[a+4>>2]=f;l=t[o>>2]|0;if(!l){a=f;f=o;p=198;break r}else{a=f;c=o;continue}}A=t[f>>2]|0;if(!A){p=139;break}if(u)l=t[A+8>>2]|0;else l=A+d|0;l=l+I|0;if(b)l=t[l>>2]|0;do{if(!w)if(k){l=e1(v,l)|0;break}else{l=F4(v,l,Z)|0;break}else l=Q5[G&127](e,v,l,Q)|0}while(0);if((l|0)>0){l=A+4|0;t[f>>2]=t[l>>2];t[l>>2]=f;t[c>>2]=A;l=t[A>>2]|0;if(!l){f=A;p=198;break r}else{c=A;continue}}if(!l){p=137;break}t[a+4>>2]=A;t[c>>2]=f;l=t[A+4>>2]|0;if(!l){a=A;p=198;break r}else{a=A;c=f}}if((p|0)==119){t[a+4>>2]=f;a=f;f=o;p=141;break}else if((p|0)==121){t[a+4>>2]=f;a=f;f=c;p=198;break}else if((p|0)==137){t[c>>2]=f;c=f;f=A;p=141;break}else if((p|0)==139){t[c>>2]=f;p=198;break}else if((p|0)==140)if(!f){f=c;p=198;break}else{p=141;break}}}while(0);do{if((p|0)==141){t[g>>2]=t[g>>2]|32768;l=f+4|0;t[c>>2]=t[l>>2];t[a+4>>2]=t[f>>2];if(!(r&516)){if(r&8|0){t[l>>2]=t[C>>2];t[f>>2]=0;t[C>>2]=f;p=169;break}if(r&16|0){p=C+4|0;t[f>>2]=t[p>>2];t[l>>2]=0;t[p>>2]=f;p=175;break}if(!m){i=a;p=180;break A}if(r&2049|0){if(t[(t[y>>2]|0)+4>>2]&4|0){i=f;break}t[l>>2]=0;i=C+4|0;t[f>>2]=t[i>>2];t[i>>2]=f;i=f;p=205;break}if(!(r&32)){i=0;break e}if(!(t[(t[y>>2]|0)+4>>2]&4)){t[i+4>>2]=0;B=C+4|0;t[i>>2]=t[B>>2];t[B>>2]=s;i=(t[D>>2]|0)+16|0;t[i>>2]=(t[i>>2]|0)+1;i=f;break}i=t[Q+16>>2]|0;if(i|0)V5[i&127](e,n,Q);if((t[B>>2]|0)<0){Q5[t[e+12>>2]&127](e,s,0,Q)|0;i=f}else i=f}else i=f}else if((p|0)==198){t[a+4>>2]=0;t[f>>2]=0;if(!(r&8))if(!(r&16)){if(r&516|0){i=a;break A}if(!(r&2049)){if(!(r&32)){n=0;i=a;break A}B=(t[D>>2]|0)+16|0;t[B>>2]=(t[B>>2]|0)+1}else{i=0;p=205}}else p=175;else p=169}}while(0);if((p|0)==169){f=C+4|0;i=t[f>>2]|0;if(!i){i=a;break}while(1){a=i+4|0;n=t[a>>2]|0;if(!n)break;t[a>>2]=t[n>>2];t[n>>2]=i;i=n}t[f>>2]=t[i>>2]}else if((p|0)==175){i=t[C>>2]|0;if(!i){i=a;break}while(1){a=t[i>>2]|0;if(!a)break;B=a+4|0;t[i>>2]=t[B>>2];t[B>>2]=i;i=a}t[C>>2]=t[i+4>>2]}else if((p|0)==205){l=Q+12|0;f=t[l>>2]|0;s=(r&1|0)==0;if(!(s|(f|0)==0))n=L5[f&63](e,n,Q)|0;do{if(n){if((L|0)>-1){i=n+L|0;p=215;break}i=Q5[t[e+12>>2]&127](e,0,12,Q)|0;if(i|0){t[i+8>>2]=n;break}if((t[l>>2]|0)!=0?(E=t[Q+16>>2]|0,!(s|(E|0)==0)):0){V5[E&127](e,n,Q);p=215}else p=215}else p=215}while(0);if((p|0)==215)if(!i){i=a;break}a=(t[D>>2]|0)+16|0;n=t[a>>2]|0;if((n|0)>-1)t[a>>2]=n+1}t[i+4>>2]=t[C>>2];t[i>>2]=t[C+4>>2];r:do{if(!((r&516|0)==0?1:(t[(t[y>>2]|0)+4>>2]&8|0)==0)){o=(L|0)<0;if(o)a=t[i+8>>2]|0;else a=i+(0-L)|0;u=(Z|0)<0;a=a+I|0;if(u)a=t[a>>2]|0;s=(G|0)==0;c=(Z|0)<1;A=0-L|0;while(1){l=i+4|0;n=t[l>>2]|0;if(!n)break r;while(1){f=t[n>>2]|0;if(!f)break;C=f+4|0;t[n>>2]=t[C>>2];t[C>>2]=n;n=f}t[l>>2]=n;if(o)f=t[n+8>>2]|0;else f=n+A|0;f=f+I|0;if(u)f=t[f>>2]|0;do{if(s)if(c){f=e1(a,f)|0;break}else{f=F4(a,f,Z)|0;break}else f=Q5[G&127](e,a,f,Q)|0}while(0);if(f|0)break r;t[l>>2]=t[n>>2];t[n>>2]=i;i=n}}}while(0);t[(t[D>>2]|0)+4>>2]=i;if((L|0)<0){i=t[i+8>>2]|0;break e}else{i=i+(0-L)|0;break e}}}while(0);if((p|0)==180){if((L|0)<0)n=t[f+8>>2]|0;else n=f+(0-L)|0;a=t[Q+16>>2]|0;if(!((r&2|0)==0|(a|0)==0))V5[a&127](e,n,Q);if((t[B>>2]|0)<0)Q5[t[e+12>>2]&127](e,f,0,Q)|0;e=(t[D>>2]|0)+16|0;Q=t[e>>2]|0;t[e>>2]=(Q|0)<1?-1:Q+-1|0}do{a=i+4|0;i=t[a>>2]|0}while((i|0)!=0);t[a>>2]=t[C>>2];t[(t[D>>2]|0)+4>>2]=t[C+4>>2];i=r&2|0?n:0}}while(0);h=z;return i|0}function Kh(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;if(t[t[e+8>>2]>>2]&4096|0)Th(e,0)|0;a=(A|0)!=0;if(a){if(t[t[A+8>>2]>>2]&4096|0)Th(A,0)|0;if((t[A+16>>2]|0)==(t[e+16>>2]|0)){r=A;i=7}else A=0}else{r=0;i=7}e:do{if((i|0)==7){while(1){if(!r)break;if((r|0)==(e|0)){A=0;break e}r=t[r+28>>2]|0;i=7}r=e+28|0;i=t[r>>2]|0;if(i|0){n=i+24|0;t[n>>2]=(t[n>>2]|0)+-1}t[e+32>>2]=0;t[r>>2]=0;if(a){t[r>>2]=A;t[e>>2]=28;n=A+24|0;t[n>>2]=(t[n>>2]|0)+1;break}else{t[e>>2]=t[t[e+16>>2]>>2];A=i;break}}}while(0);return A|0}function $h(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0;e:do{if(!(r&99)){if((r&516|0)==0?(i=t[(t[e+16>>2]|0)+4>>2]|0,!((r&384|0)!=0&(i&12|0)==0)):0){if(i&12|0){if(!(r&408)){i=0;break}h=(r&136|0)!=0;w=(r&272|0)!=0;o=0;a=0;i=0;b=e;while(1){if(!b)break;u=L5[t[t[b+16>>2]>>2]&63](b,A,r)|0;do{if(!u)n=o;else{f=t[b+4>>2]|0;l=t[f+4>>2]|0;s=t[f+20>>2]|0;n=u+(t[f>>2]|0)|0;if((l|0)<0)c=t[n>>2]|0;else c=n;if(i|0){do{if(!s)if((l|0)<1){n=e1(c,a)|0;break}else{n=F4(c,a,l)|0;break}else n=Q5[s&127](b,c,a,f)|0}while(0);if(!(h&(n|0)<0|w&(n|0)>0)){n=o;break}}n=b;a=c;i=u}}while(0);o=n;b=t[b+28>>2]|0}t[e+32>>2]=o;break}if(!(r&24)){i=0;break}s=e+32|0;a=t[s>>2]|0;if(a){i=t[(t[a+4>>2]|0)+8>>2]|0;n=t[(t[a+8>>2]|0)+4>>2]|0;if((i|0)<0)i=t[n+8>>2]|0;else i=n+(0-i)|0;if((i|0)==(A|0))i=A;else{a=e;f=32}}else{a=e;f=32}do{if((f|0)==32){while(1){if(!a){f=33;break}i=L5[t[t[a+16>>2]>>2]&63](a,A,4)|0;if(i|0){f=36;break}a=t[a+28>>2]|0;f=32}if((f|0)==33){t[s>>2]=0;i=0;break e}else if((f|0)==36){t[s>>2]=a;break}}}while(0);l=(r<<4&128^128)+128|0;i=L5[t[t[a+16>>2]>>2]&63](a,i,r)|0;while(1){f=a+16|0;while(1){if(!i)break;else n=e;while(1){if((n|0)==(a|0))break e;if(L5[t[t[n+16>>2]>>2]&63](n,i,4)|0)break;n=t[n+28>>2]|0}i=L5[t[t[f>>2]>>2]&63](a,i,r)|0}a=t[a+28>>2]|0;t[s>>2]=a;if(!a){i=0;break e}i=L5[t[t[a+16>>2]>>2]&63](a,0,l)|0}}else a=e;while(1){if(!a){a=0;i=0;break}i=L5[t[t[a+16>>2]>>2]&63](a,A,r)|0;if(i|0)break;a=t[a+28>>2]|0}t[e+32>>2]=a}else i=L5[t[t[e+16>>2]>>2]&63](e,A,r)|0}while(0);return i|0}function ew(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;n=e+32|0;a=L5[t[e>>2]&63](e,0,128)|0;do{if(!a){i=0;break}f=t[n>>2]|0;i=a;a=L5[t[e>>2]&63](e,a,8)|0;i=L5[A&63]((f|0)==0?e:f,i,r)|0}while((i|0)>=0);return i|0}function Aw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;a=e+4|0;b=t[a>>2]|0;e:do{if(b)if(A){u=t[t[e+16>>2]>>2]|0;n=e+8|0;if(t[t[n>>2]>>2]&4096|0)Th(e,0)|0;i=t[b+32>>2]|0;if(i|0?(Q5[i&127](e,3,A,b)|0)<0:0){A=0;break}t[a>>2]=A;i=t[A+28>>2]|0;t[e+12>>2]=(i|0)==0?52:i;i=t[t[n>>2]>>2]|0;if(!(i&112)){do{if(!(i&2))if(!(i&3))if(!(r&1))break;else{A=b;break e}else if((r&3|0)==3){A=b;break e}else break;else if(r&2|0){A=b;break e}}while(0);f=Sh(e)|0;i=t[n>>2]|0;o=t[i>>2]|0;t[i>>2]=o&-4097;t[i+4>>2]=0;t[i+16>>2]=0;A:do{if(o&3|0){o=t[i+8>>2]|0;a=o+(t[i+12>>2]<<2)|0;i=o;while(1){if(i>>>0>=a>>>0)break A;t[i>>2]=0;i=i+4|0}}}while(0);l=(r&2|0)==0;s=A+8|0;c=A+4|0;o=A+24|0;while(1){if(!f){A=b;break e}r=t[f>>2]|0;if(l){i=t[s>>2]|0;if((i|0)<0)i=t[f+8>>2]|0;else i=f+(0-i)|0;n=t[c>>2]|0;i=i+(t[A>>2]|0)|0;if((n|0)<0)i=t[i>>2]|0;a=t[o>>2]|0;if(!a)i=iw(0,i,n)|0;else i=L5[a&63](e,i,A)|0;t[f+4>>2]=i}L5[u&63](e,f,32)|0;f=r}}else A=b}else A=b;else{t[a>>2]=A;b=t[A+28>>2]|0;t[e+12>>2]=(b|0)==0?52:b}}while(0);return A|0}function rw(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=(r|0)==0;do{if(!A)if(e)e=0;else e=Z2(r)|0;else if(e){G2(A);e=0;break}else{e=Q2(A,r)|0;break}}while(0);return e|0}function iw(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0,f=0;t=A;if((r|0)>=1){f=A+r+-1|0;t=(f>>>0
>>0?A:f)+(1-t)&-2;a=A;while(1){if(a>>>0>=f>>>0)break;e=P(((n[a>>0]|0)<<8)+e+(n[a+1>>0]|0)|0,17109811)|0;a=a+2|0}a=A+t|0;if(a>>>0>f>>>0)A=r;else{A=r;e=P(((n[a>>0]|0)<<8)+e|0,17109811)|0}}else{while(1){a=i[A>>0]|0;if(!(a<<24>>24))break;f=i[A+1>>0]|0;r=P(((a&255)<<8)+e+(f&255)|0,17109811)|0;e=r;A=A+(f<<24>>24?2:1)|0}A=A-t|0}return P(e+A|0,17109811)|0}function aw(e){e=e|0;var A=0;A=t[46935]|0;t[46935]=e;return A|0}function tw(e){e=e|0;var A=0;A=t[46936]|0;t[46936]=e;return A|0}function nw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=r;r=fw(e,A,a)|0;h=i;return r|0}function fw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;n=h;h=h+16|0;i=n;a=(e|0)==3;f=a?t[46938]|0:(e|0)==2?1:e;t[46938]=f;l=t[46939]|0;t[46939]=l>>>0>f>>>0?l:f;do{if(f>>>0<(t[46936]|0)>>>0){e=t[46937]|0;if(!e){e=c6()|0;t[46937]=e;if(!e){e=1;break}}if(!a){b6(e)|0;e=t[46937]|0}w4(e,A,r)|0;e=0}else{if(t[46935]|0){lw(e,A,r);e=0;break}if(a)e=t[15712]|0;else{l=t[15712]|0;t[i>>2]=(e|0)==1?96349:96355;a3(l,96363,i)|0;e=l}w4(e,A,r)|0;e=0}}while(0);h=n;return e|0}function lw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;if((t[46940]|0)==0?(a=Z2(t[4590]|0)|0,t[46940]=a,(a|0)==0):0)Z3(96368,t[15712]|0)|0;else i=4;do{if((i|0)==4){if((e|0)!=3){I5[t[46935]&63]((e|0)==1?96349:96355)|0;I5[t[46935]&63](97027)|0}while(1){e=h4(t[46940]|0,t[4590]|0,A,r)|0;i=t[4590]|0;if((e|0)>-1&(e|0)<(i|0)){i=7;break}i=i<<1;a=e+1|0;a=(i|0)>(a|0)?i:a;t[4590]=a;if(!(Q2(t[46940]|0,a)|0)){i=9;break}}if((i|0)==7){I5[t[46935]&63](t[46940]|0)|0;break}else if((i|0)==9){Z3(96368,t[15712]|0)|0;break}}}while(0);return}function sw(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=A;fw(1,e,i)|0;h=r;return}function cw(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;if(!r){r=(A|0)==0?1024:A;A=r;r=Z2(r)|0;a=1}else a=0;t[e+12>>2]=a;t[e>>2]=r;t[e+8>>2]=r+A;t[e+4>>2]=r;i[r>>0]=0;return}function ow(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;f=e+8|0;a=t[e>>2]|0;n=(t[f>>2]|0)-a|0;i=n<<1;n=n+A|0;i=n>>>0>i>>>0?n:i;n=e+4|0;A=a;a=(t[n>>2]|0)-a|0;r=e+12|0;if(!(t[r>>2]|0)){l=Z2(i)|0;Q6(l|0,A|0,a|0)|0;t[r>>2]=1;A=l}else A=Q2(A,i)|0;t[e>>2]=A;t[n>>2]=A+a;t[f>>2]=A+i;return 0}function uw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=e+4|0;i=t[a>>2]|0;if((i+r|0)>>>0>(t[e+8>>2]|0)>>>0){ow(e,r)|0;i=t[a>>2]|0}Q6(i|0,A|0,r|0)|0;t[a>>2]=(t[a>>2]|0)+r;return r|0}function bw(e,A){e=e|0;A=A|0;return uw(e,A,U2(A)|0)|0}function hw(e){e=e|0;if(t[e+12>>2]|0)G2(t[e>>2]|0);return}function ww(e){e=e|0;var A=0,r=0;A=e+4|0;r=t[A>>2]|0;if(r>>>0>(t[e>>2]|0)>>>0){t[A>>2]=r+-1;e=n[r>>0]|0}else e=-1;return e|0}function kw(e,A,r){e=e|0;A=A|0;r=r|0;fv(t[46942]|0,t[A+8>>2]|0)|0;fv(t[46942]|0,t[A+12>>2]|0)|0;ad(t[46942]|0,A);return}function dw(e,A){e=e|0;A=A|0;var r=0;r=Pd(e,96416,0)|0;if((A|0)!=0&(r|0)==0){vw(e);r=Pd(e,96416,0)|0}return r|0}function vw(e){e=e|0;var A=0,r=0,i=0;i=yd(e)|0;Zg(i,i,107,0,1)|0;r=sd(i)|0;while(1){if(!r)break;mw(e,r);A=Ow(i,r)|0;while(1){if(!A)break;pw(e,A);A=qw(i,A)|0}r=cd(i,r)|0}return}function gw(e){e=e|0;var A=0;A=e+24|0;i[A>>0]=i[A>>0]|64;Iw(e);A=Hv(e)|0;Bw((A|0)==0?e:A,e);return}function mw(e,A){e=e|0;A=A|0;var r=0;r=Ew(A)|0;if(!((r|0)!=0?(t[r+8>>2]|0)!=0:0))Bw(e,A);return}function pw(e,A){e=e|0;A=A|0;var r=0;r=Ew(A)|0;if(!((r|0)!=0?(t[r+8>>2]|0)!=0:0))Bw(e,A);return}function Ew(e){e=e|0;return Pd(e,96404,0)|0}function Bw(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=Sd(A,96404,16,0)|0;a=yw(e,t[A>>2]&3)|0;i=r+8|0;e:do{if(!(t[i>>2]|0)){e=yd(e)|0;t[i>>2]=yw(e,t[A>>2]&3)|0;e=Cw(A)|0;r=r+12|0;t[r>>2]=id(Bd(A)|0,((e|0)>4?e:4)<<2)|0;e=L5[t[a>>2]&63](a,0,128)|0;while(1){if(!e)break e;i=Bd(A)|0;i=tv(i,t[e+12>>2]|0)|0;t[(t[r>>2]|0)+(t[e+16>>2]<<2)>>2]=i;e=L5[t[a>>2]&63](a,e,8)|0}}}while(0);return}function yw(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+16|0;r=i;e=dw(e,0)|0;e:do{if(!e)e=0;else switch(A|0){case 0:{e=t[e+16>>2]|0;break e}case 1:{e=t[e+8>>2]|0;break e}case 2:case 3:{e=t[e+12>>2]|0;break e}default:{t[r>>2]=A;nw(1,96429,r)|0;e=0;break e}}}while(0);h=i;return e|0}function Cw(e){e=e|0;var A=0;A=yd(Bd(e)|0)|0;e=yw(A,t[e>>2]&3)|0;if(!e)e=0;else e=Oh(e)|0;return e|0}function Iw(e){e=e|0;var A=0,r=0,i=0,a=0;r=Sd(e,96416,20,0)|0;i=r+8|0;t[i>>2]=jv(e,18364,t[4589]|0)|0;a=r+12|0;t[a>>2]=jv(e,18364,t[4589]|0)|0;r=r+16|0;t[r>>2]=jv(e,18364,t[4589]|0)|0;A=Hv(e)|0;if(!A){A=t[46941]|0;if(!((A|0)==0|(A|0)==(e|0))){A=dw(A,0)|0;Zw(t[A+8>>2]|0,t[i>>2]|0,e,1);Zw(t[A+12>>2]|0,t[a>>2]|0,e,2);Zw(t[A+16>>2]|0,t[r>>2]|0,e,0)}}else{e=dw(A,0)|0;Kh(t[i>>2]|0,t[e+8>>2]|0)|0;Kh(t[a>>2]|0,t[e+12>>2]|0)|0;Kh(t[r>>2]|0,t[e+16>>2]|0)|0}return}function Zw(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0;n=L5[t[e>>2]&63](e,0,128)|0;while(1){if(!n)break;f=Gw(r,t[n+8>>2]|0,t[n+12>>2]|0,t[n+16>>2]|0,a)|0;i[f+22>>0]=i[n+22>>0]|0;i[f+21>>0]=i[n+21>>0]|0;L5[t[A>>2]&63](A,f,1)|0;n=L5[t[e>>2]&63](e,n,8)|0}return}function Gw(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0;f=id(e,24)|0;i[f+20>>0]=n;t[f+8>>2]=tv(e,A)|0;t[f+12>>2]=tv(e,r)|0;t[f+16>>2]=a;return f|0}function Lw(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+32|0;i=r;t[i+8>>2]=A;A=L5[t[e>>2]&63](e,i,4)|0;h=r;return A|0}function Qw(e,A){e=e|0;A=A|0;var r=0;r=Kh(e,0)|0;A=Lw(e,A)|0;Kh(e,r)|0;return A|0}function Dw(e,A){e=e|0;A=A|0;e=Ew(e)|0;if(!e)e=0;else e=Lw(t[e+8>>2]|0,A)|0;return e|0}function zw(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0;f=h;h=h+16|0;n=f;if(!e){e=t[46941]|0;if(!e){i[n>>0]=i[18400]|0;i[n+1>>0]=i[18401]|0;i[n+2>>0]=i[18402]|0;i[n+3>>0]=i[18403]|0;e=hk(0,n,0)|0;t[46941]=e}}if(!a)e=Yw(e,A,r)|0;else e=Ww(e,A,r,a)|0;h=f;return e|0}function Ww(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=yd(e)|0;dw(e,1)|0;n=yw(e,A)|0;a=Qw(n,r)|0;e:do{if(!a){a=Lw(n,r)|0;if(a|0){a=Gw(e,r,i,t[a+16>>2]|0,A)|0;L5[t[n>>2]&63](n,a,1)|0;f=16;break}n=yw(l,A)|0;a=Gw(e,r,i,Oh(n)|0,A)|0;L5[t[n>>2]&63](n,a,1)|0;switch(A|0){case 0:{Zg(l,l,57,a,1)|0;f=16;break e}case 1:{r=sd(l)|0;while(1){if(!r){f=16;break e}Fw(e,r,a);r=cd(l,r)|0}}case 2:case 3:{n=sd(l)|0;while(1){if(!n){f=16;break e}r=Ow(l,n)|0;while(1){if(!r)break;Fw(e,r,a);r=qw(l,r)|0}n=cd(l,n)|0}}default:break e}}else{f=a+12|0;fv(e,t[f>>2]|0)|0;t[f>>2]=tv(e,i)|0;f=16}}while(0);if((f|0)==16)if((A|0)==0&(a|0)!=0)Mw(e,a,i)|0;Zd(e,e,a);return a|0}function Yw(e,A,r){e=e|0;A=A|0;r=r|0;e=yw(e,A)|0;if(!e)e=0;else e=Lw(e,r)|0;return e|0}function Fw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;A=Ew(A)|0;a=r+16|0;i=t[a>>2]|0;if((i|0)>3){n=t[e+64>>2]|0;A=A+12|0;i=i<<2;t[A>>2]=Q5[t[(t[n>>2]|0)+8>>2]&127](t[n+12>>2]|0,t[A>>2]|0,i,i+4|0)|0}else A=A+12|0;n=tv(e,t[r+12>>2]|0)|0;t[(t[A>>2]|0)+(t[a>>2]<<2)>>2]=n;return}function Mw(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;f=Bd(e)|0;n=(Ew(e)|0)+12|0;l=A+16|0;fv(f,t[(t[n>>2]|0)+(t[l>>2]<<2)>>2]|0)|0;a=tv(f,r)|0;t[(t[n>>2]|0)+(t[l>>2]<<2)>>2]=a;do{if(!(t[e>>2]&3)){i=t[(dw(f,0)|0)+16>>2]|0;a=A+8|0;n=Qw(i,t[a>>2]|0)|0;if(!n){l=Gw(f,t[a>>2]|0,r,t[l>>2]|0,t[e>>2]&3)|0;L5[t[i>>2]&63](i,l,1)|0;break}else{l=n+12|0;fv(f,t[l>>2]|0)|0;t[l>>2]=tv(f,r)|0;break}}}while(0);Zd(f,e,A);return 0}function Vw(e,A,r){e=e|0;A=A|0;r=r|0;e=yw(e,A)|0;do{if(e){A=t[e>>2]|0;if(!r){e=L5[A&63](e,0,128)|0;break}else{e=L5[A&63](e,r,8)|0;break}}else e=0}while(0);return e|0}function Nw(e){e=e|0;var A=0;t[46942]=e;A=Ew(e)|0;if(A|0){Rw(e,A);Ud(e,t[A>>2]|0)|0}A=dw(e,0)|0;if(A)if(((Tv(e,t[A+8>>2]|0)|0)==0?(Tv(e,t[A+12>>2]|0)|0)==0:0)?(Tv(e,t[A+16>>2]|0)|0)==0:0){Ud(e,t[A>>2]|0)|0;A=0}else A=1;else A=0;return A|0}function Rw(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=Bd(e)|0;i=Cw(e)|0;A=A+12|0;e=0;while(1){r=t[A>>2]|0;if((e|0)>=(i|0))break;fv(a,t[r+(e<<2)>>2]|0)|0;e=e+1|0}ad(a,r);return}function xw(e){e=e|0;var A=0;A=Ew(e)|0;if(A|0){Rw(e,A);Ud(e,96404)|0}return}function Jw(e){e=e|0;var A=0;A=Ew(e)|0;if(A|0){Rw(e,A);Ud(e,96404)|0}return}function Hw(e,A){e=e|0;A=A|0;A=Dw(e,A)|0;if(!A)A=0;else{e=t[(Ew(e)|0)+12>>2]|0;A=t[e+(t[A+16>>2]<<2)>>2]|0}return A|0}function Pw(e,A){e=e|0;A=A|0;e=t[(Ew(e)|0)+12>>2]|0;return t[e+(t[A+16>>2]<<2)>>2]|0}function Xw(e,A,r){e=e|0;A=A|0;r=r|0;A=Dw(e,A)|0;if(!A)A=-1;else{Mw(e,A,r)|0;A=0}return A|0}function Sw(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=Bd(e)|0;a=zw(a,t[e>>2]&3,A,0)|0;if(!a){a=Bd(e)|0;a=zw(a,t[e>>2]&3,A,i)|0}Mw(e,a,r)|0;return 0}function jw(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=Bd(e)|0;a=t[e>>2]|0;e:do{if(!((t[A>>2]^a)&3)){r=1;i=0;while(1){i=Vw(n,a&3,i)|0;if(!i)break e;r=Dw(A,t[i+8>>2]|0)|0;if(!r){r=1;break e}a=Pw(e,i)|0;Mw(A,r,a)|0;if(lv(a)|0)sv(Pw(A,r)|0);r=0;a=t[e>>2]|0}}else r=1}while(0);return r|0}function Uw(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;e=t[A+40>>2]|0;a=t[r+40>>2]|0;if((e|0)==(a|0)){i=(t[A>>2]|0)>>>4;e=(t[r>>2]|0)>>>4;if(i>>>0>=e>>>0)if(i>>>0>e>>>0)e=1;else n=6;else e=-1}else{i=(t[e>>2]|0)>>>4;e=(t[a>>2]|0)>>>4;if(i>>>0>=e>>>0)if(i>>>0>e>>>0)e=1;else n=6;else e=-1}if((n|0)==6)e=0;return e|0}function Tw(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;e=(t[A+40>>2]|0)+8|0;n=t[e>>2]|0;e=t[e+4>>2]|0;a=(t[r+40>>2]|0)+8|0;i=t[a>>2]|0;a=t[a+4>>2]|0;do{if(!(e>>>0>>0|(e|0)==(a|0)&n>>>0>>0))if(e>>>0>a>>>0|(e|0)==(a|0)&n>>>0>i>>>0)e=1;else{i=A+8|0;e=t[i>>2]|0;i=t[i+4>>2]|0;if(!((e|0)==0&(i|0)==0)?(l=r+8|0,f=t[l>>2]|0,l=t[l+4>>2]|0,!((f|0)==0&(l|0)==0)):0){if(i>>>0>>0|(i|0)==(l|0)&e>>>0>>0){e=-1;break}if(i>>>0>l>>>0|(i|0)==(l|0)&e>>>0>f>>>0){e=1;break}}e=0}else e=-1}while(0);return e|0}function Ow(e,A){e=e|0;A=A|0;var r=0;A=_w(e,A)|0;if(!A)A=0;else{r=e+44|0;e=A+32|0;Th(t[r>>2]|0,t[e>>2]|0)|0;A=t[r>>2]|0;A=L5[t[A>>2]&63](A,0,128)|0;t[e>>2]=Xh(t[r>>2]|0)|0}return A|0}function _w(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+48|0;r=i;if((t[A+24>>2]|0)==(e|0))e=A+28|0;else{t[r+16>>2]=A;e=t[e+40>>2]|0;e=L5[t[e>>2]&63](e,r,4)|0}h=i;return e|0}function qw(e,A){e=e|0;A=A|0;var r=0,i=0;r=_w(e,t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;if(!r)e=0;else{i=e+44|0;r=r+32|0;Th(t[i>>2]|0,t[r>>2]|0)|0;e=t[i>>2]|0;e=L5[t[e>>2]&63](e,A,8)|0;t[r>>2]=Xh(t[i>>2]|0)|0}return e|0}function Kw(e,A){e=e|0;A=A|0;var r=0;A=_w(e,A)|0;if(!A)A=0;else{r=e+44|0;e=A+28|0;Th(t[r>>2]|0,t[e>>2]|0)|0;A=t[r>>2]|0;A=L5[t[A>>2]&63](A,0,128)|0;t[e>>2]=Xh(t[r>>2]|0)|0}return A|0}function $w(e,A){e=e|0;A=A|0;var r=0,i=0;r=_w(e,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;if(!r)e=0;else{i=e+44|0;r=r+28|0;Th(t[i>>2]|0,t[r>>2]|0)|0;e=t[i>>2]|0;e=L5[t[e>>2]&63](e,A,8)|0;t[r>>2]=Xh(t[i>>2]|0)|0}return e|0}function ek(e,A){e=e|0;A=A|0;var r=0;r=Ow(e,A)|0;if(!r)r=Kw(e,A)|0;return r|0}function Ak(e,A,r){e=e|0;A=A|0;r=r|0;e:do{if((t[A>>2]&3|0)==2){A=qw(e,A)|0;if(!A){A=0;do{if(!A)A=Kw(e,r)|0;else A=$w(e,A)|0;if(!A){A=0;break e}}while((t[A+40>>2]|0)==(r|0))}}else do{A=$w(e,A)|0;if(!A){A=0;break e}}while((t[A+40>>2]|0)==(r|0))}while(0);return A|0}function rk(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,f=0;f=h;h=h+32|0;i=f+16|0;a=f;if((Ck(e)|0)!=0?(t[a>>2]=0,t[a+4>>2]=0,t[a+8>>2]=0,t[a+12>>2]=0,t[i>>2]=t[a>>2],t[i+4>>2]=t[a+4>>2],t[i+8>>2]=t[a+8>>2],t[i+12>>2]=t[a+12>>2],(nk(e,A,r,i)|0)!=0):0)i=0;else i=((n[e+24>>0]|0)>>>2&1^1)&255|(A|0)!=(r|0);h=f;return i|0}function ik(e,A){e=e|0;A=A|0;tk(e,A);return}function ak(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0;hd(e,A,1)|0;hd(e,r,1)|0;f=id(e,96)|0;l=f+48|0;o=dk(e,2)|0;s=t[l>>2]|0;c=t[f>>2]|0;u=f+8|0;t[u>>2]=a;t[u+4>>2]=n;u=f+56|0;t[u>>2]=a;t[u+4>>2]=n;n=o<<4;t[f>>2]=c&12|n|2;t[l>>2]=s&12|n|3;t[f+88>>2]=A;t[f+40>>2]=r;tk(e,f);if(i[e+24>>0]&64){Sd(f,96404,16,0)|0;pw(e,f)}Cd(e,f);return f|0}function tk(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;l=h;h=h+16|0;r=l;f=t[A>>2]&3;n=(f|0)==2?A:A+-48|0;f=(f|0)==3?A:A+48|0;i=t[f+40>>2]|0;a=t[n+40>>2]|0;while(1){if(!e)break;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];if(nk(e,i,a,r)|0)break;s=_w(e,i)|0;o=e+44|0;fk(t[o>>2]|0,s+32|0,n);c=e+48|0;fk(t[c>>2]|0,s+24|0,n);s=_w(e,a)|0;fk(t[o>>2]|0,s+28|0,f);fk(t[c>>2]|0,s+20|0,f);e=Hv(e)|0}h=l;return}function nk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;f=h;h=h+48|0;a=f;if(!((A|0)==0|(r|0)==0)?(t[a>>2]=t[i>>2],t[a+4>>2]=t[i+4>>2],t[a+8>>2]=t[i+8>>2],t[a+12>>2]=t[i+12>>2],t[a+40>>2]=A,n=_w(e,r)|0,(n|0)!=0):0){i=e+48|0;n=n+20|0;Th(t[i>>2]|0,t[n>>2]|0)|0;e=t[i>>2]|0;e=L5[t[e>>2]&63](e,a,4)|0;t[n>>2]=Xh(t[i>>2]|0)|0}else e=0;h=f;return e|0}function fk(e,A,r){e=e|0;A=A|0;r=r|0;Th(e,t[A>>2]|0)|0;L5[t[e>>2]&63](e,r,1)|0;t[A>>2]=Xh(e)|0;return}function lk(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;u=h;h=h+48|0;l=u+24|0;c=u+16|0;s=u;do{if(!(Wk(e,2,i,c,0)|0))if(!i){if(a|0?(Ck(e)|0)==0:0){o=18;break}t[s>>2]=0;t[s+4>>2]=0;t[s+8>>2]=0;t[s+12>>2]=0;o=7}else o=17;else{b=s;t[b>>2]=0;t[b+4>>2]=0;b=c;n=t[b+4>>2]|0;o=s+8|0;t[o>>2]=t[b>>2];t[o+4>>2]=n;t[s>>2]=2;o=7}}while(0);e:do{if((o|0)==7){t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];n=nk(e,A,r,l)|0;A:do{if(!n){if(yk(e)|0?(t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],t[l+8>>2]=t[s+8>>2],t[l+12>>2]=t[s+12>>2],f=nk(e,r,A,l)|0,f|0):0){n=f;break}do{if(a|0){n=yd(e)|0;t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];n=nk(n,A,r,l)|0;if(!n){if(!(yk(e)|0))break;n=yd(e)|0;t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];n=nk(n,r,A,l)|0;if(!n)break}ik(e,n);break A}}while(0);o=17;break e}}while(0)}}while(0);if((o|0)==17)if(!a)n=0;else o=18;if((o|0)==18)if((rk(e,A,r)|0)!=0?(Wk(e,2,i,c,1)|0)!=0:0){n=c;n=ak(e,A,r,t[n>>2]|0,t[n+4>>2]|0)|0;Vk(e,2,n)}else n=0;h=u;return n|0}function sk(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;r=(t[A>>2]&3|0)==3;n=r?A+-48|0:A;r=r?A:A+48|0;A=t[n+40>>2]|0;f=_w(e,t[r+40>>2]|0)|0;a=e+44|0;ck(t[a>>2]|0,f+32|0,n);i=e+48|0;ck(t[i>>2]|0,f+24|0,n);A=_w(e,A)|0;ck(t[a>>2]|0,A+28|0,r);ck(t[i>>2]|0,A+20|0,r);return}function ck(e,A,r){e=e|0;A=A|0;r=r|0;Th(e,t[A>>2]|0)|0;L5[t[e>>2]&63](e,r,2)|0;t[A>>2]=Xh(e)|0;return}function ok(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;r=h;h=h+16|0;a=r;A=(t[A>>2]&3|0)==2?A:A+-48|0;n=t[A>>2]&3;f=t[((n|0)==3?A:A+48|0)+40>>2]|0;n=t[((n|0)==2?A:A+-48|0)+40>>2]|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];if(nk(e,f,n,a)|0){if((yd(e)|0)==(e|0)){if(i[e+24>>0]&64)Jw(A);Ld(e,A);$d(A);f=A+8|0;Fk(e,2,t[f>>2]|0,t[f+4>>2]|0)}if(!(Zg(e,A,58,0,0)|0))if((yd(e)|0)==(e|0)){ad(e,A);A=0}else A=0;else A=-1}else A=-1;h=r;return A|0}function uk(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=h;h=h+16|0;i=f;a=hd(e,t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0,r)|0;n=hd(e,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,r)|0;do{if((a|0)!=0&(n|0)!=0){t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];i=nk(e,a,n,i)|0;a=(i|0)==0;if(!((r|0)!=0&a)){if(a)break}else{tk(e,A);i=A}r=t[i>>2]&3;h=f;return((r|0)==(t[A>>2]&3|0)?i:i+(((r|0)==3?-1:1)*48|0)|0)|0}}while(0);h=f;return 0}function bk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;A=A+8|0;i=r+8|0;i=v6(t[A>>2]|0,t[A+4>>2]|0,t[i>>2]|0,t[i+4>>2]|0)|0;return((i|0)==0?0:i>>31|1)|0}function hk(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0;f=h;h=h+16|0;n=f;s=wk(r)|0;a=Z5[t[(t[s>>2]|0)+4>>2]&127](t[s+12>>2]|0,72)|0;t[a>>2]=t[a>>2]&-4;l=a+64|0;t[l>>2]=s;c=a+24|0;A=t[A>>2]|0;t[c>>2]=A;i[c>>0]=A&255|8;t[a+60>>2]=a;r=Z5[t[t[s+4>>2]>>2]&127](a,r)|0;t[(t[l>>2]|0)+16>>2]=r;if(Wk(a,0,e,n,1)|0){l=n;s=t[l+4>>2]|0;c=a+8|0;t[c>>2]=t[l>>2];t[c+4>>2]=s}c=kk(a)|0;Vk(c,0,a);h=f;return c|0}function wk(e){e=e|0;var A=0,r=0,a=0,n=0;A=(e|0)!=0;if(A){r=t[e>>2]|0;r=(r|0)==0?18736:r}else r=18736;n=I5[t[r>>2]&63](e)|0;a=Z5[t[r+4>>2]&127](n,80)|0;t[a>>2]=r;t[a+12>>2]=n;if(A){n=t[e+4>>2]|0;t[a+4>>2]=(n|0)==0?18612:n;e=t[e+8>>2]|0;e=(e|0)==0?18712:e}else{t[a+4>>2]=18612;e=18712}t[a+8>>2]=e;i[a+52>>0]=1;return a|0}function kk(e){e=e|0;var A=0,r=0;t[e+36>>2]=jv(e,18792,t[4589]|0)|0;t[e+40>>2]=jv(e,18756,t[4589]|0)|0;A=(yd(e)|0)==(e|0);t[e+44>>2]=jv(e,A?18404:18440,t[4589]|0)|0;A=(yd(e)|0)==(e|0);t[e+48>>2]=jv(e,A?18476:18512,t[4589]|0)|0;t[e+52>>2]=jv(e,18548,t[4589]|0)|0;A=Hv(e)|0;if(!((A|0)!=0?(r=dk(A,0)|0,t[e>>2]=t[e>>2]&15|r<<4,r=t[A+52>>2]|0,L5[t[r>>2]&63](r,e,1)|0,!(i[A+24>>0]&64)):0))gw(e);Cd(e,e);return e|0}function dk(e,A){e=e|0;A=A|0;var r=0;r=(t[e+64>>2]|0)+24+(A<<3)|0;A=r;A=d6(t[A>>2]|0,t[A+4>>2]|0,1,0)|0;e=G;t[r>>2]=A;t[r+4>>2]=e;G=e;return A|0}function vk(e){e=e|0;var A=0,r=0,a=0,n=0;a=Hv(e)|0;n=(a|0)==0;if(n?(A=e+64|0,(t[(t[t[A>>2]>>2]|0)+16>>2]|0)!=0):0){Ld(e,e);n=e+8|0;Fk(e,0,t[n>>2]|0,t[n+4>>2]|0);A=t[A>>2]|0;F5[t[(t[A>>2]|0)+16>>2]&127](t[A+12>>2]|0);A=0}else r=4;do{if((r|0)==4){A=xv(e)|0;while(1){if(!A)break;r=Jv(A)|0;vk(A)|0;A=r}A=sd(e)|0;while(1){if(!A)break;r=cd(e,A)|0;pd(e,A)|0;A=r}jk(e);Ld(e,e);if(((((Tv(e,t[e+40>>2]|0)|0)==0?(Tv(e,t[e+36>>2]|0)|0)==0:0)?(Tv(e,t[e+48>>2]|0)|0)==0:0)?(Tv(e,t[e+44>>2]|0)|0)==0:0)?(Tv(e,t[e+52>>2]|0)|0)==0:0){if(i[e+24>>0]&64?Nw(e)|0:0){A=-1;break}$d(e);r=e+8|0;Fk(e,0,t[r>>2]|0,t[r+4>>2]|0);if(!n){Pv(a,e)|0;ad(a,e);A=0;break}A=e+64|0;while(1){r=t[A>>2]|0;a=t[r+48>>2]|0;if(!a)break;zd(e,t[a>>2]|0)|0}F5[t[(t[r+4>>2]|0)+20>>2]&127](t[r+16>>2]|0);if(!(ev(e)|0)){A=t[A>>2]|0;n=t[A+12>>2]|0;a=(t[A>>2]|0)+12|0;M5[t[a>>2]&63](n,e);M5[t[a>>2]&63](n,A);A=0}else A=-1}else A=-1}}while(0);return A|0}function gk(e){e=e|0;return Oh(t[e+40>>2]|0)|0}function mk(e){e=e|0;var A=0,r=0,i=0;A=0;r=sd(e)|0;while(1){if(!r)break;i=(pk(e,r,0,1)|0)+A|0;A=i;r=cd(e,r)|0}return A|0}function pk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=_w(e,A)|0;if(a){if(!i)A=0;else A=Ek(t[e+44>>2]|0,a+32|0)|0;if(r)A=(Ek(t[e+44>>2]|0,a+28|0)|0)+A|0}else A=0;return A|0}function Ek(e,A){e=e|0;A=A|0;var r=0;Th(e,t[A>>2]|0)|0;r=Oh(e)|0;t[A>>2]=Xh(e)|0;return r|0}function Bk(e){e=e|0;return i[e+24>>0]&1|0}function yk(e){e=e|0;return(Bk(e)|0)==0|0}function Ck(e){e=e|0;return(n[e+24>>0]|0)>>>1&1|0}function Ik(e,A){e=e|0;A=A|0;return e|0}function Zk(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;if(!r){a=1392;r=t[a>>2]|0;a=t[a+4>>2]|0;t[i>>2]=r;t[i+4>>2]=a;a=d6(r|0,a|0,2,0)|0;i=1392;t[i>>2]=a;t[i+4>>2]=G}else{if(!a)e=rv(e,r)|0;else e=tv(e,r)|0;t[i>>2]=e;t[i+4>>2]=0}return 1}function Gk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return 0}function Lk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;if((r&1|0)==0&0==0)fv(e,r)|0;return}function Qk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return((r&1|0)==0&0==0?r:0)|0}function Dk(e){e=e|0;return}function zk(e,A,r){e=e|0;A=A|0;r=r|0;return}function Wk(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0;l=(r|0)!=0;do{if(l){if((i[r>>0]|0)!=37?(f=t[e+64>>2]|0,f=D5[t[(t[f+4>>2]|0)+4>>2]&127](t[f+16>>2]|0,A,r,a,n)|0,f|0):0)break;f=Nk(e,A,r,a)|0;if(!f)s=5}else s=5}while(0);if((s|0)==5)if(n){f=t[e+64>>2]|0;f=D5[t[(t[f+4>>2]|0)+4>>2]&127](t[f+16>>2]|0,A,0,a,n)|0;if(l&(f|0)!=0){s=a;Rk(e,A,r,t[s>>2]|0,t[s+4>>2]|0)}}else f=0;return f|0}function Yk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=t[e+64>>2]|0;return Q5[t[(t[e+4>>2]|0)+8>>2]&127](t[e+16>>2]|0,A,r,i)|0}function Fk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;Xk(e,A,r,i)|0;e=t[e+64>>2]|0;R5[t[(t[e+4>>2]|0)+12>>2]&31](t[e+16>>2]|0,A,r,i);return}function Mk(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f;r=Bd(e)|0;a=e+8|0;A=a;A=Hk(r,t[e>>2]&3,t[A>>2]|0,t[A+4>>2]|0)|0;do{if(!A){A=t[r+64>>2]|0;r=t[(t[A+4>>2]|0)+16>>2]|0;if(r|0?(i=a,i=Q5[r&127](t[A+16>>2]|0,t[e>>2]&3,t[i>>2]|0,t[i+4>>2]|0)|0,i|0):0){A=i;break}if((t[e>>2]&3|0)==2)A=0;else{i=t[a>>2]|0;a=t[a+4>>2]|0;t[n>>2]=37;A=n+8|0;t[A>>2]=i;t[A+4>>2]=a;T4(194773,96456,n)|0;A=194773}}}while(0);h=f;return A|0}function Vk(e,A,r){e=e|0;A=A|0;r=r|0;e=t[e+64>>2]|0;V5[t[(t[e+4>>2]|0)+24>>2]&127](t[e+16>>2]|0,A,r);return}function Nk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+32|0;f=l;A=t[(t[e+64>>2]|0)+56+(((A|0)==3?2:A)<<2)>>2]|0;if(((A|0)!=0?(a=rv(e,r)|0,(a|0)!=0):0)?(t[f+24>>2]=a,n=L5[t[A>>2]&63](A,f,4)|0,(n|0)!=0):0){r=n+16|0;f=t[r+4>>2]|0;A=i;t[A>>2]=t[r>>2];t[A+4>>2]=f;A=1}else A=0;h=l;return A|0}function Rk(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;f=id(e,32)|0;n=f+16|0;t[n>>2]=i;t[n+4>>2]=a;t[f+24>>2]=tv(e,r)|0;i=(A|0)==3?2:A;n=e+64|0;r=t[n>>2]|0;A=t[r+56+(i<<2)>>2]|0;if(!A){a=jv(e,18640,t[4589]|0)|0;t[(t[n>>2]|0)+56+(i<<2)>>2]=a;A=t[n>>2]|0}else{a=A;A=r}A=t[A+68+(i<<2)>>2]|0;if(!A){A=jv(e,18676,t[4589]|0)|0;t[(t[n>>2]|0)+68+(i<<2)>>2]=A}L5[t[a>>2]&63](a,f,1)|0;L5[t[A>>2]&63](A,f,1)|0;return}function xk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=A+16|0;A=t[e>>2]|0;e=t[e+4>>2]|0;r=r+16|0;i=t[r>>2]|0;r=t[r+4>>2]|0;return(e>>>0>r>>>0|(e|0)==(r|0)&A>>>0>i>>>0?1:(e>>>0>>0|(e|0)==(r|0)&A>>>0>>0)<<31>>31)|0}function Jk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;A=t[A+24>>2]|0;i=t[r+24>>2]|0;return(A>>>0>i>>>0?1:(A>>>0>>0)<<31>>31)|0}function Hk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=Pk(e,A,r,i)|0;if(!e)e=0;else e=t[e+24>>2]|0;return e|0}function Pk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;n=h;h=h+32|0;a=n;e=t[(t[e+64>>2]|0)+68+(((A|0)==3?2:A)<<2)>>2]|0;if(!e)e=0;else{A=a+16|0;t[A>>2]=r;t[A+4>>2]=i;e=L5[t[e>>2]&63](e,a,4)|0}h=n;return e|0}function Xk(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=(A|0)==3?2:A;A=Pk(e,a,r,i)|0;if(!A)A=0;else{i=e+64|0;r=t[(t[i>>2]|0)+56+(a<<2)>>2]|0;L5[t[r>>2]&63](r,A,2)|0;i=t[(t[i>>2]|0)+68+(a<<2)>>2]|0;L5[t[i>>2]&63](i,A,2)|0;fv(e,t[A+24>>2]|0)|0;ad(e,A);A=1}return A|0}function Sk(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;t[46942]=e;n=t[e+64>>2]|0;a=0;while(1){if((a|0)==3)break;f=n+56+(a<<2)|0;A=t[f>>2]|0;e:do{if(A|0){A=L5[t[A>>2]&63](A,0,128)|0;while(1){if(!A)break e;r=t[f>>2]|0;r=L5[t[r>>2]&63](r,A,8)|0;if((i[t[A+24>>2]>>0]|0)!=37){A=r;continue}l=A+16|0;Xk(e,a,t[l>>2]|0,t[l+4>>2]|0)|0;A=r}}}while(0);a=a+1|0}return}function jk(e){e=e|0;t[46942]=e;e=e+64|0;Uk((t[e>>2]|0)+56|0);Uk((t[e>>2]|0)+68|0);return}function Uk(e){e=e|0;var A=0,r=0,i=0;A=0;while(1){if((A|0)==3)break;r=e+(A<<2)|0;i=t[r>>2]|0;if(i|0){Ph(i)|0;t[r>>2]=0}A=A+1|0}return}function Tk(e,A,r){e=e|0;A=A|0;r=r|0;if(!(N4(A,r,e)|0))e=0;else e=U2(A)|0;return e|0}function Ok(e,A){e=e|0;A=A|0;return Z3(A,e)|0}function _k(e){e=e|0;return m3(e)|0}function qk(e){e=e|0;var A=0,r=0,i=0;A=h;h=h+32|0;i=A+12|0;r=A;t[4682]=t[4679];t[4683]=t[4680];t[i>>2]=e;t[i+4>>2]=U2(e)|0;t[i+8>>2]=0;t[r>>2]=18736;t[r+4>>2]=18612;t[r+8>>2]=18724;e=sm(i,r)|0;cv(0);h=A;return e|0}function Kk(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;if((r|0)!=0?(f=e+8|0,a=t[f>>2]|0,(a|0)<(t[e+4>>2]|0)):0){l=(t[e>>2]|0)+a|0;e=0;n=i[l>>0]|0;a=A;A=l;while(1){A=A+1|0;i[a>>0]=n;e=e+1|0;if(!(n<<24>>24!=10&(e|0)<(r|0)))break;n=i[A>>0]|0;if(!(n<<24>>24))break;else a=a+1|0}t[f>>2]=(t[f>>2]|0)+e}else e=0;return e|0}function $k(e){e=e|0;return 0}function ed(e,A){e=e|0;A=A|0;e=Z2(A)|0;z6(e|0,0,A|0)|0;return e|0}function Ad(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=Q2(A,i)|0;if(i>>>0>r>>>0)z6(e+r|0,0,i-r|0)|0;return e|0}function rd(e,A){e=e|0;A=A|0;G2(A);return}function id(e,A){e=e|0;A=A|0;var r=0;r=h;h=h+16|0;e=t[e+64>>2]|0;e=Z5[t[(t[e>>2]|0)+4>>2]&127](t[e+12>>2]|0,A)|0;if(!e)nw(1,96462,r)|0;h=r;return e|0}function ad(e,A){e=e|0;A=A|0;if(A|0){e=t[e+64>>2]|0;M5[t[(t[e>>2]|0)+12>>2]&63](t[e+12>>2]|0,A)}return}function td(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=(t[A+16>>2]|0)+8|0;A=t[e>>2]|0;e=t[e+4>>2]|0;r=(t[r+16>>2]|0)+8|0;i=t[r>>2]|0;r=t[r+4>>2]|0;return(e>>>0>>0|(e|0)==(r|0)&A>>>0>>0?-1:(e>>>0>r>>>0|(e|0)==(r|0)&A>>>0>i>>>0)&1)|0}function nd(e,A,r){e=e|0;A=A|0;r=r|0;e=t[A+16>>2]|0;if((e+28|0)!=(A|0))ad(t[e+24>>2]|0,A);return}function fd(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;A=(t[t[A+16>>2]>>2]|0)>>>4;i=(t[t[r+16>>2]>>2]|0)>>>4;return(A>>>0>>0?-1:A>>>0>i>>>0&1)|0}function ld(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=186256;t[i>>2]=A;t[i+4>>2]=r;t[46947]=186248;e=t[e+40>>2]|0;e=L5[t[e>>2]&63](e,187772,4)|0;if(!e)e=0;else e=t[e+16>>2]|0;return e|0}function sd(e){e=e|0;e=t[e+36>>2]|0;e=L5[t[e>>2]&63](e,0,128)|0;if(!e)e=0;else e=t[e+16>>2]|0;return e|0}function cd(e,A){e=e|0;A=A|0;var r=0;A=_w(e,A)|0;if((A|0)!=0?(r=t[e+36>>2]|0,r=L5[t[r>>2]&63](r,A,8)|0,(r|0)!=0):0)A=t[r+16>>2]|0;else A=0;return A|0}function od(e){e=e|0;e=t[e+36>>2]|0;e=L5[t[e>>2]&63](e,0,256)|0;if(!e)e=0;else e=t[e+16>>2]|0;return e|0}function ud(e,A){e=e|0;A=A|0;var r=0;A=_w(e,A)|0;if((A|0)!=0?(r=t[e+36>>2]|0,r=L5[t[r>>2]&63](r,A,16)|0,(r|0)!=0):0)A=t[r+16>>2]|0;else A=0;return A|0}function bd(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0;a=ld(e,A,r)|0;do{if((i|0)!=0&(a|0)==0){a=yd(e)|0;if((a|0)!=(e|0)?(t=ld(a,A,r)|0,t|0):0){hd(e,t,1)|0;a=t;break}if(!(Yk(e,1,A,r)|0))a=0;else{a=dk(e,1)|0;a=wd(e,A,r,a,G)|0;kd(e,a);dd(e,a)}}}while(0);return a|0}function hd(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=yd(e)|0;if((i|0)==(t[A+24>>2]|0)){i=A+8|0;i=ld(e,t[i>>2]|0,t[i+4>>2]|0)|0;if((r|0)!=0&(i|0)==0){i=Hv(e)|0;if(!i)i=0;else{r=hd(i,A,r)|0;vd(e,r);return r|0}}}else i=0;return i|0}function wd(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0;n=id(e,64)|0;f=t[n>>2]|0;l=n+8|0;t[l>>2]=A;t[l+4>>2]=r;t[n>>2]=f&12|a<<4|1;t[n+24>>2]=yd(e)|0;if(i[(yd(e)|0)+24>>0]&64)Sd(n,96404,16,0)|0;return n|0}function kd(e,A){e=e|0;A=A|0;do{vd(e,A);e=Hv(e)|0}while((e|0)!=0);return}function dd(e,A){e=e|0;A=A|0;if(i[(yd(e)|0)+24>>0]&64)mw(e,A);Cd(e,A);return}function vd(e,A){e=e|0;A=A|0;var r=0,i=0;i=e+40|0;Oh(t[i>>2]|0)|0;if((yd(e)|0)==(e|0))r=A+28|0;else r=id(e,36)|0;t[r+16>>2]=A;i=t[i>>2]|0;L5[t[i>>2]&63](i,r,1)|0;i=t[e+36>>2]|0;L5[t[i>>2]&63](i,r,1)|0;return}function gd(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;n=s;f=yd(e)|0;if(Wk(e,1,A,n,0)|0){i=n;i=ld(e,t[i>>2]|0,t[i+4>>2]|0)|0;if(!i)if(!((r|0)==0|(f|0)==(e|0))?(a=n,a=ld(f,t[a>>2]|0,t[a+4>>2]|0)|0,(a|0)!=0):0)i=hd(e,a,1)|0;else l=6}else l=6;if((l|0)==6)if((r|0)!=0?(Wk(e,1,A,n,1)|0)!=0:0){l=n;f=t[l>>2]|0;l=t[l+4>>2]|0;i=dk(e,1)|0;i=wd(e,f,l,i,G)|0;kd(e,i);dd(e,i);Vk(e,1,i)}else i=0;h=s;return i|0}function md(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;t[46956]=A;r=ek(e,A)|0;while(1){if(!r)break;i=Ak(e,r,A)|0;sk(e,r,0);r=i}i=t[e+40>>2]|0;L5[t[i>>2]&63](i,187808,2)|0;i=t[e+36>>2]|0;L5[t[i>>2]&63](i,187808,2)|0;return}function pd(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;a=A+8|0;r=a;if(ld(e,t[r>>2]|0,t[r+4>>2]|0)|0){if((yd(e)|0)==(e|0)){r=ek(e,A)|0;while(1){if(!r)break;n=Ak(e,r,A)|0;ok(e,r)|0;r=n}if(i[e+24>>0]&64)xw(A);Ld(e,A);$d(A);n=a;Fk(e,1,t[n>>2]|0,t[n+4>>2]|0)}if(!(Zg(e,A,59,0,0)|0))if((yd(e)|0)==(e|0)){ad(e,A);r=0}else r=0;else r=-1}else r=-1;return r|0}function Ed(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;i=f;r=t[A>>2]|0;do{if(!(r&3))if((Hv(A)|0)==(e|0)){r=t[A>>2]|0;n=5;break}else{nw(1,96488,i)|0;a=-1;break}else n=5}while(0);e:do{if((n|0)==5)switch(r&3){case 1:{a=pd(e,A)|0;break e}case 2:case 3:{a=ok(e,A)|0;break e}case 0:{a=vk(A)|0;break e}default:{}}}while(0);h=f;return a|0}function Bd(e){e=e|0;var A=0;switch(t[e>>2]&3){case 2:case 3:{A=t[(t[e+40>>2]|0)+24>>2]|0;break}case 1:{A=t[e+24>>2]|0;break}case 0:{A=e;break}default:{}}return A|0}function yd(e){e=e|0;var A=0;switch(t[e>>2]&3){case 2:case 3:{A=(t[e+40>>2]|0)+24|0;break}case 1:{A=e+24|0;break}case 0:{A=e+60|0;break}default:{}}return t[A>>2]|0}function Cd(e,A){e=e|0;A=A|0;var r=0;r=t[e+64>>2]|0;if(!(i[r+52>>0]|0))Fd(e,A,100,0);else Id(e,A,t[r+48>>2]|0);return}function Id(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;e:do{if(r|0){Id(e,A,t[r+8>>2]|0);switch(t[A>>2]&3){case 0:{i=t[r>>2]|0;break}case 1:{i=(t[r>>2]|0)+12|0;break}case 2:{i=(t[r>>2]|0)+24|0;break}default:break e}i=t[i>>2]|0;if(i|0)V5[i&127](e,A,t[r+4>>2]|0)}}while(0);return}function Zd(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;a=t[e+64>>2]|0;if(!(i[a+52>>0]|0))Fd(e,A,101,r);else Gd(e,A,r,t[a+48>>2]|0);return}function Gd(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;e:do{if(i|0){Gd(e,A,r,t[i+8>>2]|0);switch(t[A>>2]&3){case 0:{a=(t[i>>2]|0)+4|0;break}case 1:{a=(t[i>>2]|0)+16|0;break}case 2:{a=(t[i>>2]|0)+28|0;break}default:break e}a=t[a>>2]|0;if(a|0)R5[a&31](e,A,t[i+4>>2]|0,r)}}while(0);return}function Ld(e,A){e=e|0;A=A|0;var r=0;r=t[e+64>>2]|0;if(!(i[r+52>>0]|0))Fd(e,A,102,0);else Qd(e,A,t[r+48>>2]|0);return}function Qd(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;e:do{if(r|0){Qd(e,A,t[r+8>>2]|0);switch(t[A>>2]&3){case 0:{i=(t[r>>2]|0)+8|0;break}case 1:{i=(t[r>>2]|0)+20|0;break}case 2:{i=(t[r>>2]|0)+32|0;break}default:break e}i=t[i>>2]|0;if(i|0)V5[i&127](e,A,t[r+4>>2]|0)}}while(0);return}function Dd(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=id(e,12)|0;t[i>>2]=A;t[i+4>>2]=r;r=(t[e+64>>2]|0)+48|0;t[i+8>>2]=t[r>>2];t[r>>2]=i;return}function zd(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;i=(t[e+64>>2]|0)+48|0;r=t[i>>2]|0;e:do{if(!r)r=-1;else{if((t[r>>2]|0)!=(A|0)){while(1){if(!r){r=-1;break e}i=r+8|0;a=t[i>>2]|0;if((t[a>>2]|0)==(A|0))break;else r=a}if(a)t[i>>2]=t[a+8>>2]}else t[i>>2]=t[r+8>>2];ad(e,r);r=0}}while(0);return r|0}function Wd(e,A){e=e|0;A=A|0;var r=0;r=yd(e)|0;e:do{if((r|0)==(yd(A)|0))switch(t[A>>2]&3){case 0:{while(1){if((A|0)==(e|0)){A=1;break e}A=Hv(A)|0;if(!A){A=0;break}}break}case 1:{A=A+8|0;A=(bd(e,t[A>>2]|0,t[A+4>>2]|0,0)|0)!=0;break e}default:{A=(uk(e,A,0)|0)!=0;break e}}else A=0}while(0);return A&1|0}function Yd(e){e=e|0;return t[e>>2]&3|0}function Fd(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0,n=0,f=0;f=h;h=h+16|0;n=f;t=Sd(e,96512,44,0)|0;switch(r|0){case 100:{a=Md(t,A,100)|0;if(!(Vd(a,A)|0))Nd(a,e,A,i)|0;break}case 101:{if(((Vd(Md(t,A,100)|0,A)|0)==0?(Vd(Md(t,A,102)|0,A)|0)==0:0)?(a=Md(t,A,101)|0,(Vd(a,A)|0)==0):0)Nd(a,e,A,i)|0;break}case 102:{Rd(Md(t,A,100)|0,A);Rd(Md(t,A,101)|0,A);a=Md(t,A,102)|0;if(!(Vd(a,A)|0))Nd(a,e,A,i)|0;break}default:nw(1,96524,n)|0}h=f;return}function Md(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=h;h=h+16|0;i=n;e:do{switch(t[A>>2]&3){case 0:switch(r|0){case 100:{r=e+8|0;break e}case 101:{r=e+20|0;break e}case 102:{r=e+32|0;break e}default:{a=14;break e}}case 1:switch(r|0){case 100:{r=e+12|0;break e}case 101:{r=e+24|0;break e}case 102:{r=e+36|0;break e}default:{a=14;break e}}case 2:switch(r|0){case 100:{r=e+16|0;break e}case 101:{r=e+28|0;break e}case 102:{r=e+40|0;break e}default:{a=14;break e}}default:a=14}}while(0);if((a|0)==14){nw(1,96558,i)|0;r=0}e=t[r>>2]|0;if(!e){e=Bd(A)|0;e=jv(e,18828,t[4589]|0)|0;t[r>>2]=e}h=n;return e|0}function Vd(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+32|0;i=r;a=xd(A)|0;A=i+8|0;t[A>>2]=a;t[A+4>>2]=G;A=L5[t[e>>2]&63](e,i,4)|0;h=r;return A|0}function Nd(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=id(Bd(r)|0,32)|0;t[a+20>>2]=r;n=xd(r)|0;r=a+8|0;t[r>>2]=n;t[r+4>>2]=G;t[a+16>>2]=A;if(i|0){n=id(A,8)|0;t[a+24>>2]=n;t[n>>2]=i}L5[t[e>>2]&63](e,a,1)|0;return a|0}function Rd(e,A){e=e|0;A=A|0;A=Vd(e,A)|0;if(A|0)L5[t[e>>2]&63](e,A,2)|0;return}function xd(e){e=e|0;e=e+8|0;G=t[e+4>>2]|0;return t[e>>2]|0}function Jd(e,A,r){e=e|0;A=A|0;r=r|0;Hd(A);ad(t[A+16>>2]|0,A);return}function Hd(e){e=e|0;var A=0,r=0;A=e+16|0;e=t[e+24>>2]|0;while(1){if(!e)break;r=t[e+4>>2]|0;ad(t[A>>2]|0,e);e=r}return}function Pd(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;l=c;f=t[e+16>>2]|0;a=f;while(1){if(!a){a=0;break}n=t[a>>2]|0;if((n|0)==(A|0)){s=7;break}if((i[A>>0]|0)==(i[n>>0]|0)?(e1(A,n)|0)==0:0){s=7;break}a=t[a+4>>2]|0;if((a|0)==(f|0)){a=0;break}}do{if((s|0)==7){if(!(t[e>>2]&4)){if((a|0)==(f|0)&(r|0)==0){a=f;break}Xd(e,a,r);break}if(r)if((f|0)==(a|0))a=f;else nw(1,96583,l)|0}}while(0);h=c;return a|0}function Xd(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;t[e+16>>2]=A;i=t[e>>2]|0;r=r<<2&4;t[e>>2]=i&-5|r;if(i&2|0){i=(i&3|0)==3?-1:1;t[e+(i*48|0)+16>>2]=A;i=e+(i*48|0)|0;t[i>>2]=t[i>>2]&-5|r}return}function Sd(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;f=Bd(e)|0;a=Pd(e,A,0)|0;e:do{if((r|0)!=0&(a|0)==0){r=id(f,r)|0;t[r>>2]=tv(f,A)|0;switch(t[e>>2]&3){case 0:{jd(e,r);n=r;break e}case 1:{jd(e,r);n=r;break e}case 2:case 3:{jd(e,r);n=r;break e}default:{}}}else n=a}while(0);if(i|0)Pd(e,A,1)|0;return n|0}function jd(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=t[e+16>>2]|0;do{if(r){i=r+4|0;a=t[i>>2]|0;if((a|0)==(r|0)){t[i>>2]=A;i=r;r=A;break}else{t[A+4>>2]=a;i=A;break}}else{i=A;r=A}}while(0);t[r+4>>2]=i;if(!(t[e>>2]&4))Xd(e,A,0);return}function Ud(e,A){e=e|0;A=A|0;var r=0,i=0;i=Bd(e)|0;r=Pd(e,A,0)|0;if(!r)A=-1;else{Td(e,r);if(!(t[e>>2]&3)){Od(i,e,r);A=r}else{Zg(yd(i)|0,e,60,r,0)|0;A=r}fv(i,t[r>>2]|0)|0;ad(i,A);A=0}return A|0}function Td(e,A){e=e|0;A=A|0;var r=0;e=t[e+16>>2]|0;do{r=e+4|0;e=t[r>>2]|0}while((e|0)!=(A|0));t[r>>2]=t[A+4>>2];return}function Od(e,A,r){e=e|0;A=A|0;r=r|0;if((t[A+16>>2]|0)==(r|0)){e=t[r+4>>2]|0;Xd(A,(e|0)==(r|0)?0:e,0)}return}function _d(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0,n=0;t=(i|0)>-1;n=t?i:0-i|0;e:do{switch(A|0){case 0:{Sd(e,r,n,a)|0;if(!t){A=xv(e)|0;while(1){if(!A)break e;_d(A,0,r,i,a);A=Jv(A)|0}}break}case 3:case 2:case 1:{i=(A|0)==1;A=sd(e)|0;while(1){if(!A)break e;A:do{if(i)Sd(A,r,n,a)|0;else{t=Ow(e,A)|0;while(1){if(!t)break A;Sd(t,r,n,a)|0;t=qw(e,t)|0}}}while(0);A=cd(e,A)|0}}default:{}}}while(0);return}function qd(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;e:do{switch(A|0){case 0:{Zg(e,e,61,r,1)|0;break}case 3:case 2:case 1:{a=(A|0)==1;i=sd(e)|0;while(1){if(!i)break e;A:do{if(a)Ud(i,r)|0;else{A=Ow(e,i)|0;while(1){if(!A)break A;Ud(A,r)|0;A=qw(e,A)|0}}}while(0);i=cd(e,i)|0}}default:{}}}while(0);return}function Kd(e,A,r){e=e|0;A=A|0;r=r|0;Ud(A,r)|0;return}function $d(e){e=e|0;var A=0,r=0,i=0;r=Bd(e)|0;A=e+16|0;e=t[A>>2]|0;if(e|0)do{i=e;e=t[e+4>>2]|0;fv(r,t[i>>2]|0)|0;ad(r,i)}while((e|0)!=(t[A>>2]|0));t[A>>2]=0;return}function ev(e){e=e|0;return Tv(e,Av(e)|0)|0}function Av(e){e=e|0;var A=0,r=0;if(!e)r=187844;else r=(t[e+64>>2]|0)+20|0;A=t[r>>2]|0;if(!A){A=jv(e,18864,t[4589]|0)|0;t[r>>2]=A;e=186312;t[e>>2]=-2147483648;t[e+4>>2]=0;e=186320;t[e>>2]=2147483647;t[e+4>>2]=-1}return A|0}function rv(e,A){e=e|0;A=A|0;return iv(Av(e)|0,A)|0}function iv(e,A){e=e|0;A=A|0;e=av(e,A)|0;if(!e)e=0;else e=t[e+16>>2]|0;return e|0}function av(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+32|0;i=r;t[i+16>>2]=A;A=L5[t[e>>2]&63](e,i,4)|0;h=r;return A|0}function tv(e,A){e=e|0;A=A|0;var r=0,i=0;if(!A)r=0;else{i=Av(e)|0;r=av(i,A)|0;if(!r){r=(U2(A)|0)+24|0;if(!e)r=Z2(r)|0;else r=id(e,r)|0;e=r+8|0;t[e>>2]=1;t[e+4>>2]=0;e=r+20|0;$1(e,A)|0;t[r+16>>2]=e;L5[t[i>>2]&63](i,r,1)|0}else{i=r+8|0;A=i;A=d6(t[A>>2]|0,t[A+4>>2]|0,1,0)|0;t[i>>2]=A;t[i+4>>2]=G}r=t[r+16>>2]|0}return r|0}function nv(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;if(!A)r=0;else{i=Av(e)|0;r=av(i,A)|0;if(!r){r=(U2(A)|0)+24|0;if(!e)r=Z2(r)|0;else r=id(e,r)|0;n=186312;a=t[n+4>>2]|0;e=r+8|0;t[e>>2]=t[n>>2]|1;t[e+4>>2]=a;e=r+20|0;$1(e,A)|0;t[r+16>>2]=e;L5[t[i>>2]&63](i,r,1)|0}else{n=r+8|0;a=n;a=d6(t[a>>2]|0,t[a+4>>2]|0,1,0)|0;t[n>>2]=a;t[n+4>>2]=G}r=t[r+16>>2]|0}return r|0}function fv(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;if((A|0)!=0?(r=Av(e)|0,i=av(r,A)|0,(i|0)!=0):0)if((t[i+16>>2]|0)==(A|0)?(A=i+8|0,n=A,n=d6(t[n>>2]|0,t[n+4>>2]|0,-1,-1)|0,a=G,A,t[A>>2]=n,t[A+4>>2]=a,A=186320,(n|0)==0&(a|0)==0|(t[A>>2]|0)==0&(t[A+4>>2]|0)==0):0){Uv(e,r,i)|0;e=0}else e=0;else e=-1;return e|0}function lv(e){e=e|0;var A=0;if(!e)e=0;else{e=e+-12|0;A=186312;e=t[A>>2]&t[e>>2]}return e|0}function sv(e){e=e|0;var A=0,r=0,i=0;if(e|0){r=186312;e=e+-12|0;i=e;A=t[i+4>>2]|t[r+4>>2];t[e>>2]=t[i>>2]|t[r>>2];t[e+4>>2]=A}return}function cv(e){e=e|0;t[46966]=e;t[4725]=1;return}function ov(e,A){e=e|0;A=A|0;t[46967]=e;t[46968]=A;t[46969]=0;return}function uv(){var e=0,A=0,r=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;if(!(t[46970]|0)){t[46970]=1;if(!(t[46971]|0))t[46971]=1;if(!(t[46962]|0))t[46962]=t[15647];if(!(t[46963]|0))t[46963]=t[15679];c=t[46972]|0;if(!((c|0)!=0?(t[c>>2]|0)!=0:0)){bv();c=hv(t[46962]|0,16384)|0;t[t[46972]>>2]=c}wv()}e:while(1){s=t[46973]|0;i[s>>0]=i[194805]|0;e=(t[(t[t[46972]>>2]|0)+28>>2]|0)+(t[46971]|0)|0;A=s;A:while(1){f=A;while(1){A=t[18904+(n[f>>0]<<2)>>2]|0;if(a[63856+(e<<1)>>1]|0){t[46974]=e;t[46975]=f}r:while(1){r=A&255;do{A=r+(a[64042+(e<<1)>>1]|0)|0;if((e|0)==(a[64252+(A<<1)>>1]|0))break r;c=a[64788+(e<<1)>>1]|0;e=c<<16>>16}while(c<<16>>16<=92);A=t[19928+(r<<2)>>2]|0}e=a[64998+(A<<1)>>1]|0;A=f+1|0;if((a[64042+(e<<1)>>1]|0)==219)break;else f=A}r:while(1){c=s;i:while(1){e=a[63856+(e<<1)>>1]|0;if(!(e<<16>>16)){e=a[63856+(t[46974]<<1)>>1]|0;A=t[46975]|0}else e=e<<16>>16;t[46964]=s;l=A;t[46965]=l-c;i[194805]=i[A>>0]|0;i[A>>0]=0;t[46973]=A;a:while(1){switch(e|0){case 1:{u=27;break e}case 12:{u=53;break e}case 13:{u=55;break e}case 14:{u=57;break e}case 15:{u=61;break e}case 16:{u=65;break e}case 17:{u=67;break e}case 18:{u=69;break e}case 19:{u=72;break e}case 20:{u=75;break e}case 21:{u=78;break e}case 23:{u=86;break e}case 33:{u=118;break e}case 39:case 38:case 37:case 36:{o=0;break e}case 2:{u=29;break A}case 3:{u=32;break A}case 4:{u=35;break A}case 5:{u=37;break A}case 6:{u=39;break A}case 7:{u=42;break A}case 8:{u=44;break A}case 9:{u=47;break A}case 10:{u=49;break A}case 11:{u=51;break A}case 22:{u=83;break A}case 24:{u=89;break A}case 25:{u=92;break A}case 26:{u=95;break A}case 27:{u=98;break A}case 28:{u=101;break A}case 29:{u=104;break A}case 30:{u=109;break A}case 31:{u=112;break A}case 32:{u=115;break A}case 34:{u=121;break A}case 0:break a;case 35:break;default:{u=134;break e}}f=t[46964]|0;i[A>>0]=i[194805]|0;e=t[46972]|0;r=t[e>>2]|0;if(!(t[r+44>>2]|0)){b=t[r+16>>2]|0;t[46977]=b;t[r>>2]=t[46962];r=t[e>>2]|0;t[r+44>>2]=1;e=b}else e=t[46977]|0;if((t[46973]|0)>>>0<=((t[r+4>>2]|0)+e|0)>>>0){u=128;break i}switch(yv()|0){case 0:{u=132;break r}case 2:{u=133;break i}case 1:break;default:continue e}t[46973]=t[46964];e=(((t[46971]|0)+-1|0)/2|0)+36|0}i[A>>0]=i[194805]|0;A=t[46975]|0;e=t[46974]|0}if((u|0)==128){u=0;r=l-f|0;f=t[46964]|0;A=f+(r+-1)|0;t[46973]=A;e=Ev()|0;l=Bv(e)|0;s=t[46964]|0;if(!l)continue;else{u=129;break}}else if((u|0)==133){u=0;A=(t[(t[t[46972]>>2]|0)+4>>2]|0)+(t[46977]|0)|0;t[46973]=A;e=Ev()|0;s=t[46964]|0;continue}}if((u|0)==129){u=0;A=f+r|0;t[46973]=A;e=l;continue}else if((u|0)==132){u=0;A=(t[46964]|0)+(l-f+-1)|0;t[46973]=A;e=Ev()|0;s=t[46964]|0;continue}}switch(u|0){case 29:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[4725]=(t[4725]|0)+1;continue e}case 32:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[46971]=3;continue e}case 35:{u=0;e=t[46965]|0;if(!e)continue e;t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;continue e}case 37:{u=0;e=t[46965]|0;if(!e)continue e;t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;continue e}case 39:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[46971]=1;continue e}case 42:{u=0;e=t[46965]|0;if(!e)continue e;t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;continue e}case 44:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;kv();continue e}case 47:{u=0;e=t[46965]|0;if(!e)continue e;t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;continue e}case 49:{u=0;e=t[46965]|0;if(!e)continue e;t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;continue e}case 51:{u=0;e=t[46965]|0;if(!e)continue e;t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;continue e}case 83:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[46971]=5;vv();continue e}case 89:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;mv(98744);continue e}case 92:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;mv(96616);continue e}case 95:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[4725]=(t[4725]|0)+1;continue e}case 98:{u=0;A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;mv(e);continue e}case 101:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[46971]=7;t[46976]=1;vv();continue e}case 104:{u=0;e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;b=(t[46976]|0)+-1|0;t[46976]=b;if(!b){u=108;break e}mv(t[46964]|0);continue e}case 109:{u=0;A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;t[46976]=(t[46976]|0)+1;mv(e);continue e}case 112:{u=0;A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;mv(e);t[4725]=(t[4725]|0)+1;continue e}case 115:{u=0;A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;mv(e);continue e}case 121:{u=0;A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;G3(e,A,1,t[46963]|0)|0;continue e}}}switch(u|0){case 27:{e=t[46965]|0;if(!e)o=-1;else{t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=-1}break}case 53:{e=t[46965]|0;if(!e)o=259;else{t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=259}break}case 55:{e=t[46965]|0;if(!e)o=260;else{t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=260}break}case 57:{e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;if(!(t[46969]|0)){t[46969]=258;o=258}else o=258;break}case 61:{e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;if(!(t[46969]|0)){t[46969]=261;o=261}else o=261;break}case 65:{e=t[46965]|0;if(!e)o=263;else{t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=263}break}case 67:{e=t[46965]|0;if(!e)o=262;else{t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=262}break}case 69:{e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=(t[46969]|0)==261?264:45;break}case 72:{e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;o=(t[46969]|0)==258?264:45;break}case 75:{A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;t[46992]=tv(t[46942]|0,e)|0;o=267;break}case 78:{e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;if(dv()|0){u=(t[46965]|0)+-1|0;i[A>>0]=i[194805]|0;b=s+u|0;t[46973]=b;t[46964]=s;t[46965]=u;i[194805]=i[b>>0]|0;i[b>>0]=0;t[46973]=b}t[46992]=tv(t[46942]|0,t[46964]|0)|0;o=267;break}case 86:{e=t[46965]|0;if(e|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[(t[46964]|0)+(e+-1)>>0]|0)==10&1;t[46971]=1;gv();o=268;break}case 108:{t[46971]=1;pv();o=268;break}case 118:{A=t[46965]|0;e=t[46964]|0;if(A|0)t[(t[t[46972]>>2]|0)+28>>2]=(i[e+(A+-1)>>0]|0)==10&1;o=i[e>>0]|0;break}case 134:{Cv(96619);break}}return o|0}function bv(){var e=0,A=0,r=0;A=t[46972]|0;do{if(!A){e=zv(4)|0;t[46972]=e;if(!e)Cv(96977);else{t[e>>2]=0;e=1;r=9;break}}else{e=t[46983]|0;if(0>=(e+-1|0)>>>0){e=e+8|0;A=Iv(A,e<<2)|0;t[46972]=A;if(!A)Cv(96977);else{r=A+(t[46983]<<2)|0;t[r>>2]=0;t[r+4>>2]=0;t[r+8>>2]=0;t[r+12>>2]=0;t[r+16>>2]=0;t[r+20>>2]=0;t[r+24>>2]=0;t[r+28>>2]=0;r=9;break}}}}while(0);if((r|0)==9)t[46983]=e;return}function hv(e,A){e=e|0;A=A|0;var r=0;r=zv(48)|0;if(!r)Cv(96932);t[r+12>>2]=A;A=zv(A+2|0)|0;t[r+4>>2]=A;if(!A)Cv(96932);else{t[r+20>>2]=1;Gv(r,e);return r|0}return 0}function wv(){var e=0,A=0;A=t[46972]|0;e=t[A>>2]|0;t[46977]=t[e+16>>2];e=t[e+8>>2]|0;t[46973]=e;t[46964]=e;t[46962]=t[t[A>>2]>>2];i[194805]=i[e>>0]|0;return}function kv(){var e=0,A=0,r=0,a=0,n=0,f=0,l=0;n=h;h=h+32|0;a=n;A=n+16|0;r=n+12|0;f=t[46964]|0;e=f+1|0;l=(y1(e,96916,4)|0)==0;e=l?f+5|0:e;t[a>>2]=r;t[a+4>>2]=n+20;t[a+8>>2]=A;a=V3(e,96921,a)|0;if((a|0)>0?(t[4725]=(t[r>>2]|0)+-1,(a|0)!=1):0){A=e+(t[A>>2]|0)|0;e=A;e:while(1){r=i[e>>0]|0;switch(r<<24>>24){case 0:case 34:break e;default:{}}e=e+1|0}if((e|0)!=(A|0)&r<<24>>24==34){i[e>>0]=0;Dv(A,e-A|0)}}h=n;return}function dv(){var e=0,A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0;s=h;h=h+2080|0;l=s+8|0;a=s;e=s+1056|0;A=s+32|0;f=s+16|0;c=i[(t[46964]|0)+((t[46965]|0)+-1)>>0]|0;r=c<<24>>24==46;if(r|((c&255)+-48|0)>>>0<10)if(r?(Qv()|0)!=0:0)n=4;else e=0;else n=4;if((n|0)==4){c=t[46966]|0;cw(f,1024,e);bw(f,96827)|0;bw(f,t[46964]|0)|0;t[a>>2]=t[4725];T4(A,96871,a)|0;bw(f,A)|0;bw(f,(c|0)==0?96821:c)|0;bw(f,96888)|0;A=f+4|0;e=t[A>>2]|0;if(e>>>0>=(t[f+8>>2]|0)>>>0){ow(f,1)|0;e=t[A>>2]|0}i[e>>0]=0;e=t[f>>2]|0;t[A>>2]=e;t[l>>2]=e;nw(0,96913,l)|0;hw(f);e=1}h=s;return e|0}function vv(){var e=0;e=t[46978]|0;if(!e){e=Z2(1024)|0;t[46978]=e;t[46980]=e+1024}t[46979]=e;i[e>>0]=0;return}function gv(){t[46992]=tv(t[46942]|0,t[46978]|0)|0;i[t[46978]>>0]=0;return}function mv(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;r=t[46979]|0;A=t[46978]|0;if(r>>>0>A>>>0){r=r+-1|0;a=3}e:while(1){if((a|0)==3)t[46979]=r;a=t[46980]|0;n=a;do{f=e;e=e+1|0;f=i[f>>0]|0;l=r;r=r+1|0;i[l>>0]=f;if(!(f<<24>>24))break e}while(r>>>0>>0);t[46979]=r;a=A;l=n-a<<1;A=Q2(A,l)|0;t[46978]=A;t[46980]=A+l;r=A+(r-a)|0;a=3}t[46979]=r;return}function pv(){t[46992]=nv(t[46942]|0,t[46978]|0)|0;i[t[46978]>>0]=0;return}function Ev(){var e=0,A=0,r=0,n=0,f=0;f=t[46973]|0;n=t[46964]|0;A=(t[(t[t[46972]>>2]|0)+28>>2]|0)+(t[46971]|0)|0;while(1){if(n>>>0>=f>>>0)break;e=i[n>>0]|0;if(!(e<<24>>24))e=1;else e=t[18904+((e&255)<<2)>>2]|0;if(a[63856+(A<<1)>>1]|0){t[46974]=A;t[46975]=n}e:while(1){r=e&255;do{e=r+(a[64042+(A<<1)>>1]|0)|0;if((A|0)==(a[64252+(e<<1)>>1]|0))break e;e=a[64788+(A<<1)>>1]|0;A=e<<16>>16}while(e<<16>>16<=92);e=t[19928+(r<<2)>>2]|0}n=n+1|0;A=a[64998+(e<<1)>>1]|0}return A|0}function Bv(e){e=e|0;var A=0;if(a[63856+(e<<1)>>1]|0){A=t[46973]|0;t[46974]=e;t[46975]=A}while(1){A=(a[64042+(e<<1)>>1]|0)+1|0;if((e|0)==(a[64252+(A<<1)>>1]|0))break;e=a[64788+(e<<1)>>1]|0}A=a[64998+(A<<1)>>1]|0;return(A<<16>>16==92?0:A<<16>>16)|0}function yv(){var e=0,A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;s=t[46972]|0;n=t[s>>2]|0;l=t[n+4>>2]|0;a=t[46964]|0;o=t[46973]|0;c=o;if(o>>>0>(l+((t[46977]|0)+1)|0)>>>0)Cv(96674);f=c-a|0;if(!(t[n+40>>2]|0))e=(f|0)==1?1:2;else{o=f+-1|0;f=l;n=0;while(1){if((n|0)>=(o|0))break;i[f>>0]=i[a>>0]|0;f=f+1|0;a=a+1|0;n=n+1|0}a=t[s>>2]|0;do{if((t[a+44>>2]|0)==2){t[46977]=0;t[a+16>>2]=0;r=a;u=17}else{while(1){l=a+12|0;f=t[l>>2]|0;n=f-o+-1|0;if(n|0){u=16;break}n=a+4|0;s=t[n>>2]|0;if(!(t[a+20>>2]|0)){u=12;break}a=f<<1;a=(a|0)==0?(f>>>3)+f|0:a;t[l>>2]=a;a=Iv(s,a+2|0)|0;t[n>>2]=a;if(!a)break;s=a+(c-s)|0;t[46973]=s;a=t[t[46972]>>2]|0;c=s}if((u|0)==12)t[n>>2]=0;else if((u|0)==16){A=L5[t[t[(t[46967]|0)+8>>2]>>2]&63](t[46968]|0,(t[a+4>>2]|0)+o|0,n>>>0<8192?n:8192)|0;r=t[t[46972]>>2]|0;t[46977]=A;t[r+16>>2]=A;if(!A){u=17;break}else{e=0;break}}Cv(96730)}}while(0);do{if((u|0)==17)if(!o){Zv(t[46962]|0);e=1;A=t[46977]|0;r=t[t[46972]>>2]|0;break}else{t[r+44>>2]=2;e=2;A=0;break}}while(0);a=A+o|0;do{if(a>>>0>(t[r+12>>2]|0)>>>0){u=Iv(t[r+4>>2]|0,a+(A>>>1)|0)|0;A=t[46972]|0;t[(t[A>>2]|0)+4>>2]=u;A=t[(t[A>>2]|0)+4>>2]|0;if(!A)Cv(96774);else{b=t[46977]|0;h=A;break}}else{b=A;h=t[r+4>>2]|0}}while(0);b=b+o|0;t[46977]=b;i[h+b>>0]=0;h=t[46972]|0;i[(t[(t[h>>2]|0)+4>>2]|0)+((t[46977]|0)+1)>>0]=0;t[46964]=t[(t[h>>2]|0)+4>>2]}return e|0}function Cv(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=t[15712]|0;t[A>>2]=e;a3(r,96670,A)|0;Ue(2)}function Iv(e,A){e=e|0;A=A|0;return Q2(e,A)|0}function Zv(e){e=e|0;var A=0,r=0,i=0;r=t[46972]|0;if((r|0)!=0?(A=t[r>>2]|0,(A|0)!=0):0)i=4;else{bv();A=hv(t[46962]|0,16384)|0;r=t[46972]|0;t[r>>2]=A;if(!r)A=0;else i=4}Gv(A,e);wv();return}function Gv(e,A){e=e|0;A=A|0;var r=0;r=t[(R2()|0)>>2]|0;Lv(e);t[e>>2]=A;t[e+40>>2]=1;A=t[46972]|0;if(!A)A=0;else A=t[A>>2]|0;if((A|0)!=(e|0)){t[e+32>>2]=1;t[e+36>>2]=0}t[e+24>>2]=0;t[(R2()|0)>>2]=r;return}function Lv(e){e=e|0;var A=0;if(e|0){t[e+16>>2]=0;A=e+4|0;i[t[A>>2]>>0]=0;i[(t[A>>2]|0)+1>>0]=0;t[e+8>>2]=t[A>>2];t[e+28>>2]=1;t[e+44>>2]=0;A=t[46972]|0;if(!A)A=0;else A=t[A>>2]|0;if((A|0)==(e|0))wv()}return}function Qv(){var e=0,A=0;A=t[46964]|0;e=(t[46965]|0)+-2|0;while(1){if((e|0)<=-1){e=0;break}if((i[A+e>>0]|0)==46){e=1;break}else e=e+-1|0}return e|0}function Dv(e,A){e=e|0;A=A|0;var r=0;r=t[46981]|0;if((r|0)<(A|0)){if(!r)r=Z2(A+1|0)|0;else r=Q2(t[46982]|0,A+1|0)|0;t[46982]=r;t[46981]=A}else r=t[46982]|0;$1(r,e)|0;t[46966]=t[46982];return}function zv(e){e=e|0;return Z2(e)|0}function Wv(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+2112|0;c=o+32|0;l=o+24|0;f=o+16|0;n=o+8|0;a=o;A=o+56|0;s=o+40|0;cw(s,1024,o+1080|0);r=t[46966]|0;if(r|0){bw(s,r)|0;bw(s,97027)|0}bw(s,e)|0;t[a>>2]=t[4725];T4(A,97030,a)|0;bw(s,A)|0;e:do{if(!(i[t[46964]>>0]|0))switch(((t[46971]|0)+-1|0)/2|0|0){case 2:{t[n>>2]=16384;T4(A,97050,n)|0;bw(s,A)|0;e=t[46978]|0;if(!(i[e>>0]|0))break e;l=U2(e)|0;bw(s,97112)|0;e=t[46978]|0;if((l|0)>80)i[e+80>>0]=0;bw(s,e)|0;break e}case 3:{t[f>>2]=16384;T4(A,97131,f)|0;bw(s,A)|0;e=t[46978]|0;if(!(i[e>>0]|0))break e;l=U2(e)|0;bw(s,97199)|0;e=t[46978]|0;if((l|0)>80)i[e+80>>0]=0;bw(s,e)|0;break e}case 1:{t[l>>2]=16384;T4(A,97218,l)|0;bw(s,A)|0;break e}default:break e}else{bw(s,97042)|0;bw(s,t[46964]|0)|0;A=s+4|0;e=t[A>>2]|0;if(e>>>0>=(t[s+8>>2]|0)>>>0){ow(s,1)|0;e=t[A>>2]|0}t[A>>2]=e+1;i[e>>0]=39}}while(0);r=s+4|0;e=t[r>>2]|0;A=s+8|0;if(e>>>0>=(t[A>>2]|0)>>>0){ow(s,1)|0;e=t[r>>2]|0}t[r>>2]=e+1;i[e>>0]=10;e=t[r>>2]|0;if(e>>>0>=(t[A>>2]|0)>>>0){ow(s,1)|0;e=t[r>>2]|0}i[e>>0]=0;l=t[s>>2]|0;t[r>>2]=l;t[c>>2]=l;nw(1,96913,c)|0;hw(s);h=o;return}function Yv(){Fv(t[46964]|0);return}function Fv(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;s=t[46973]|0;i[s>>0]=i[194805]|0;l=t[46972]|0;r=t[l>>2]|0;A=t[r+4>>2]|0;if(s>>>0<(A+2|0)>>>0){a=A+((t[46977]|0)+2)|0;n=A+((t[r+12>>2]|0)+2)|0;c=A;f=r;while(1){if(a>>>0<=c>>>0)break;r=a+-1|0;c=n+-1|0;i[c>>0]=i[r>>0]|0;f=t[l>>2]|0;a=r;n=c;c=t[f+4>>2]|0}r=n-a|0;A=s+r|0;s=t[f+12>>2]|0;t[46977]=s;t[f+16>>2]=s;if(A>>>0<(c+2|0)>>>0)Cv(97277);else{o=e+r|0;u=A}}else{o=e;u=s}e=u+-1|0;i[e>>0]=64;t[46964]=o;i[194805]=i[e>>0]|0;t[46973]=e;return}function Mv(){var e=0;e=t[46972]|0;if(!e)e=0;else e=t[e>>2]|0;Lv(e);return}function Vv(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=h;h=h+80|0;a=i;n=e+52|0;Ov(e,t[n>>2]|0,18548);e=a+8|0;t[e>>2]=A;t[e+4>>2]=r;r=t[n>>2]|0;r=L5[t[r>>2]&63](r,a,4)|0;h=i;return r|0}function Nv(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;a=Vv(e,A,r)|0;if(!a){a=id(e,72)|0;t[a+64>>2]=t[e+64>>2];n=a+24|0;f=t[e+24>>2]|0;t[n>>2]=f;i[n>>0]=f&255&-9;t[a+56>>2]=e;t[a+60>>2]=t[e+60>>2];e=a+8|0;t[e>>2]=A;t[e+4>>2]=r;kk(a)|0}return a|0}function Rv(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=h;h=h+16|0;a=n;if(!(((A|0)!=0?(Wk(e,0,A,a,0)|0)!=0:0)?(i=a,i=Vv(e,t[i>>2]|0,t[i+4>>2]|0)|0,(i|0)!=0):0))if((r|0)!=0?(Wk(e,0,A,a,1)|0)!=0:0){i=a;i=Nv(e,t[i>>2]|0,t[i+4>>2]|0)|0;Vk(e,0,i)}else i=0;h=n;return i|0}function xv(e){e=e|0;e=t[e+52>>2]|0;return L5[t[e>>2]&63](e,0,128)|0}function Jv(e){e=e|0;var A=0;A=Hv(e)|0;if(!A)e=0;else{A=t[A+52>>2]|0;e=L5[t[A>>2]&63](A,e,8)|0}return e|0}function Hv(e){e=e|0;return t[e+56>>2]|0}function Pv(e,A){e=e|0;A=A|0;e=t[e+52>>2]|0;return L5[t[e>>2]&63](e,A,2)|0}function Xv(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=t[46984]|0;i=(A|0)!=0;do{if(!e)if(i){G2(A);e=0;break}else{e=Z2(r)|0;break}else if(i){ad(e,A);e=0;break}else{e=id(e,r)|0;break}}while(0);return e|0}function Sv(e,A,r){e=e|0;A=A|0;r=r|0;e=t[46984]|0;if(!e)G2(A);else ad(e,A);return}function jv(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=A+28|0;a=t[i>>2]|0;t[i>>2]=7;t[46984]=e;r=Uh(A,r)|0;t[i>>2]=a;t[46984]=0;return r|0}function Uv(e,A,r){e=e|0;A=A|0;r=r|0;t[46984]=e;return L5[t[A>>2]&63](A,r,2)|0}function Tv(e,A){e=e|0;A=A|0;var r=0,i=0;r=(Aw(A,0,0)|0)+28|0;i=t[r>>2]|0;t[r>>2]=7;t[46984]=e;if(!(Ph(A)|0)){t[r>>2]=i;t[46984]=0;e=0}else e=1;return e|0}function Ov(e,A,r){e=e|0;A=A|0;r=r|0;if(r|0?(Aw(A,0,0)|0)!=(r|0):0)Aw(A,r,0)|0;return}function _v(e,A){e=e|0;A=A|0;if(!(lv(e)|0))A=Kv(e,A)|0;else qv(e,A)|0;return A|0}function qv(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;i[A>>0]=60;a=A;while(1){r=a+1|0;t=i[e>>0]|0;if(!(t<<24>>24))break;i[r>>0]=t;e=e+1|0;a=r}i[r>>0]=62;i[a+2>>0]=0;return A|0}function Kv(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;e:do{if((e|0)!=0?(i[e>>0]|0)!=0:0){i[A>>0]=34;o=i[e>>0]|0;k=0;n=((o+-45&255)<2|((o&255)+-48|0)>>>0<10)&1;f=0;l=0;s=0;r=A+1|0;a=e+1|0;A:while(1){c=r;while(1){if(!(o<<24>>24))break A;r=o&255;r:do{if(o<<24>>24==34){i[c>>0]=92;u=n;b=1;c=c+1|0}else{if(!n){b=o<<24>>24>-1&(o<<24>>24!=95&(M1(r)|0)==0);u=0;b=b?1:f;break}switch(o<<24>>24){case 45:{b=(s|0)==0;u=b?n:0;b=b?f:1;break r}case 46:{b=(l|0)==0;u=b?n:0;b=b?f:1;l=l+1|0;break r}default:{b=(r+-48|0)>>>0<10;u=b?n:0;b=b?f:1;break r}}}}while(0);r=c+1|0;i[c>>0]=o;w=a+1|0;h=i[a>>0]|0;s=s+1|0;a=t[5031]|0;if(!a){n=u;f=b;c=r;a=w;o=h;continue}n=h&255;f=h<<24>>24!=0;if((k&f?!(o<<24>>24==92|o<<24>>24>-1&((o+-45&255)>1&(M1(o<<24>>24)|0)==0)^1):0)?!(h<<24>>24>-1&((h+-45&255)>1&(M1(n)|0)==0)):0)break;if((s|0)<(a|0)|f^1){n=u;f=b;c=r;a=w;o=h;continue}if(o<<24>>24==92|o<<24>>24>-1&((M1(o<<24>>24)|0)==0&(o+-45&255)>1)^1){k=1;n=u;f=b;o=h;a=w;continue A}if(h<<24>>24>-1&((h+-45&255)>1&(M1(n)|0)==0)){k=1;n=u;f=b;o=h;a=w;continue A}i[r>>0]=92;i[c+2>>0]=10;n=u;f=1;s=0;c=c+3|0;a=w;o=h}i[r>>0]=92;i[c+2>>0]=10;k=0;n=u;f=1;s=0;o=h;r=c+3|0;a=w}i[c>>0]=34;i[c+1>>0]=0;if(!f){if((s|0)==1?((i[e>>0]|0)+-45&255)<2:0){e=A;break}else r=20128;while(1){a=t[r>>2]|0;if(!a)break e;if(!(N1(a,e)|0)){e=A;break}else r=r+4|0}}else e=A}else e=97309}while(0);return e|0}function $v(e){e=e|0;return _v(e,eg(e)|0)|0}function eg(e){e=e|0;var A=0;A=((U2(e)|0)<<1)+2|0;A=A>>>0>1024?A:1024;e=t[46986]|0;if(A>>>0>(t[46985]|0)>>>0){if(!e)e=Z2(A)|0;else e=Q2(e,A)|0;t[46986]=e;t[46985]=A}return e|0}function Ag(e,A){e=e|0;A=A|0;e=xv(e)|0;while(1){if(!e){e=0;break}if((rg(e)|0)==0?hd(e,A,0)|0:0){e=1;break}e=Jv(e)|0}return e|0}function rg(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;f=Mk(e)|0;if((f|0)!=0?(i[f>>0]|0)!=37:0)A=0;else r=3;e:do{if((r|0)==3){A=Ew(e)|0;A:do{if(A|0?(a=Ew(Hv(e)|0)|0,a|0):0){f=Oh(t[(Ew(yd(e)|0)|0)+8>>2]|0)|0;n=A+12|0;r=a+12|0;A=0;while(1){if((A|0)>=(f|0))break A;a=t[(t[n>>2]|0)+(A<<2)>>2]|0;if((a|0?(l=t[(t[r>>2]|0)+(A<<2)>>2]|0,l|0):0)?e1(a,l)|0:0){A=0;break e}A=A+1|0}}}while(0);A=dw(e,0)|0;if(A)if((Oh(t[A+8>>2]|0)|0)>0)A=0;else return(Oh(t[A+12>>2]|0)|0)<1|0;else A=1}}while(0);return A|0}function ig(e,A){e=e|0;A=A|0;var r=0,a=0;t[46987]=0;r=Hw(e,97319)|0;if((r|0?((i[r>>0]|0)+-48|0)>>>0<10:0)?(a=n3(r,0,10)|0,(a|0)==0|(a|0)>59):0)t[5031]=a;ag(e,1);if(((tg(e,A,1)|0)!=-1?(ng(e,A)|0)!=-1:0)?(fg(e,A)|0)!=-1:0){t[5031]=128;e=I5[t[(t[(t[e+64>>2]|0)+8>>2]|0)+8>>2]&63](A)|0}else e=-1;return e|0}function ag(e,A){e=e|0;A=A|0;var r=0;t[e>>2]=t[e>>2]&-9;r=xv(e)|0;while(1){if(!r)break;ag(r,0);r=Jv(r)|0}e:do{if(A|0){A=sd(e)|0;while(1){if(!A)break e;t[A>>2]=t[A>>2]&-9;r=Ow(e,A)|0;while(1){if(!r)break;t[r>>2]=t[r>>2]&-9;r=qw(e,r)|0}A=cd(e,A)|0}}}while(0);return}function tg(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0;if((r|0)==0?(Hv(e)|0)!=0:0){l=0;n=195059;c=109514}else{c=(i[e+24>>0]&1)==0?195059:97363;n=(Ck(e)|0)==0;t[46988]=zw(e,2,111455,0)|0;t[46989]=zw(e,2,111464,0)|0;l=1;n=n?195059:97366}a=Mk(e)|0;if((a|0)!=0?(i[a>>0]|0)!=37:0){f=1;s=102604}else{f=0;s=195059;a=195059}do{if((lg(e,A)|0)!=-1?(sg(e,A,n)|0)!=-1:0){n=(f|0)==0;if(f|l|0){if((sg(e,A,c)|0)==-1){a=-1;break}if((sg(e,A,102597)|0)==-1){a=-1;break}}if(!n?(mg(e,A,a)|0)==-1:0){a=-1;break}if(((sg(e,A,s)|0)!=-1?(sg(e,A,97374)|0)!=-1:0)?(t[46987]=(t[46987]|0)+1,(Cg(e,A,r)|0)!=-1):0){t[e>>2]=t[e>>2]|8;a=0}else a=-1}else a=-1}while(0);return a|0}function ng(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;e:do{if((cg(e,A)|0)==-1)r=-1;else{c=dw(yd(e)|0,0)|0;l=(c|0)==0;s=c+12|0;c=c+8|0;f=sd(e)|0;while(1){if(!f){r=0;break e}if(og(e,f,(t[f>>2]|0)>>>4,0)|0){if(l)r=0;else r=t[c>>2]|0;if((ug(f,A,r)|0)==-1){r=-1;break e}}n=Ow(e,f)|0;r=f;while(1){if(!n)break;a=n+-48|0;i=t[((t[n>>2]&3|0)==2?n:a)+40>>2]|0;if((r|0)!=(i|0)?(og(e,i,(t[f>>2]|0)>>>4,0)|0)!=0:0){if(l)r=0;else r=t[c>>2]|0;if((ug(t[((t[n>>2]&3|0)==2?n:a)+40>>2]|0,A,r)|0)==-1){r=-1;break e}r=t[((t[n>>2]&3|0)==2?n:a)+40>>2]|0}if(bg(e,n)|0){if(l)i=0;else i=t[s>>2]|0;if((hg(n,A,i)|0)==-1){r=-1;break e}}n=qw(e,n)|0}f=cd(e,f)|0}}}while(0);return r|0}function fg(e,A){e=e|0;A=A|0;t[46987]=(t[46987]|0)+-1;if((lg(e,A)|0)==-1)e=-1;else e=((sg(e,A,111008)|0)==-1)<<31>>31;return e|0}function lg(e,A){e=e|0;A=A|0;var r=0;r=t[46987]|0;while(1){if((r|0)<=0){r=0;break}if((sg(e,A,153597)|0)==-1){r=-1;break}else r=r+-1|0}return r|0}function sg(e,A,r){e=e|0;A=A|0;r=r|0;return Z5[t[(t[(t[e+64>>2]|0)+8>>2]|0)+4>>2]&127](A,r)|0}function cg(e,A){e=e|0;A=A|0;e=xv(e)|0;while(1){if(!e){e=0;break}if(!(rg(e)|0)){if((tg(e,A,0)|0)==-1){e=-1;break}if((ng(e,A)|0)==-1){e=-1;break}if((fg(e,A)|0)==-1){e=-1;break}}else cg(e,A)|0;e=Jv(e)|0}return e|0}function og(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;if((Ag(e,A)|0)==0?(Eg(e,A,r,i)|0)!=0:0)if((Bg(e,A)|0)==0?(yg(A)|0)==0:0)a=5;else e=1;else a=5;if((a|0)==5)e=0;return e|0}function ug(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=Bd(e)|0;do{if((lg(i,A)|0)!=-1?(wg(e,A)|0)!=-1:0){if((dg(e)|0)==0?(vg(e,A,r)|0)==-1:0){e=-1;break}e=sg(i,A,97330)|0}else e=-1}while(0);return e|0}function bg(e,A){e=e|0;A=A|0;e=xv(e)|0;while(1){if(!e){e=1;break}if((rg(e)|0)==0?uk(e,A,0)|0:0){e=0;break}e=Jv(e)|0}return e|0}function hg(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=t[e>>2]&3;n=t[((i|0)==3?e:e+48|0)+40>>2]|0;i=t[((i|0)==2?e:e+-48|0)+40>>2]|0;a=Bd(n)|0;do{if((((((lg(a,A)|0)!=-1?(wg(n,A)|0)!=-1:0)?(kg(e,A,t[46988]|0)|0)!=-1:0)?(n=(Bk(Bd(n)|0)|0)!=0,(sg(a,A,n?100079:100084)|0)!=-1):0)?(wg(i,A)|0)!=-1:0)?(kg(e,A,t[46989]|0)|0)!=-1:0){if(!(dg(e)|0)){if((vg(e,A,r)|0)==-1){e=-1;break}}else if((gg(e,A,1)|0)==-1){e=-1;break}e=sg(a,A,97330)|0}else e=-1}while(0);return e|0}function wg(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;l=h;h=h+32|0;n=l;r=l+8|0;i=Mk(e)|0;a=Bd(e)|0;if(!i){s=e+8|0;e=t[s+4>>2]|0;i=n;t[i>>2]=t[s>>2];t[i+4>>2]=e;T4(r,97350,n)|0;if((sg(a,A,r)|0)==-1)e=-1;else f=4}else if((mg(a,A,i)|0)==-1)e=-1;else f=4;if((f|0)==4)e=0;h=l;return e|0}function kg(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0;e:do{if((r|0)!=0?(a=Bd(e)|0,t=Pw(e,r)|0,(i[t>>0]|0)!=0):0)if((sg(a,A,107984)|0)==-1)e=-1;else{do{if(lv(t)|0){if((mg(a,A,t)|0)==-1){e=-1;break e}}else{e=C1(t,58)|0;if(!e)if((pg(a,A,t,0)|0)==-1){e=-1;break e}else break;i[e>>0]=0;if((pg(a,A,t,0)|0)==-1){e=-1;break e}if((sg(a,A,107984)|0)==-1){e=-1;break e}if((pg(a,A,e+1|0,0)|0)==-1){e=-1;break e}i[e>>0]=58}}while(0);e=0}else e=0}while(0);return e|0}function dg(e){e=e|0;return(t[e>>2]|0)>>>3&1|0}function vg(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;e:do{if(!(t[e>>2]&2)){i=0;c=4}else{switch(gg(e,A,0)|0){case-1:{i=-1;break e}case 0:{i=0;c=4;break e}default:{}}i=1;c=4}}while(0);e:do{if((c|0)==4){a=Ew(e)|0;s=Bd(e)|0;A:do{if(a){l=a+12|0;f=L5[t[r>>2]&63](r,0,128)|0;while(1){if(!f)break A;do{if(t[e>>2]&2){n=t[46988]|0;if(n|0?(t[f+16>>2]|0)==(t[n+16>>2]|0):0)break;n=t[46989]|0;if(!((n|0)!=0?(t[f+16>>2]|0)==(t[n+16>>2]|0):0))c=12}else c=12}while(0);if((c|0)==12){c=0;a=f+16|0;if((t[(t[l>>2]|0)+(t[a>>2]<<2)>>2]|0)!=(t[f+12>>2]|0)){n=i+1|0;if(i){if((sg(s,A,97345)|0)==-1){i=-1;break e}if((lg(s,A)|0)==-1){i=-1;break e}}else{if((lg(s,A)|0)==-1){i=-1;break e}if((sg(s,A,97342)|0)==-1){i=-1;break e}t[46987]=(t[46987]|0)+1}if((mg(s,A,t[f+8>>2]|0)|0)==-1){i=-1;break e}if((sg(s,A,97348)|0)==-1){i=-1;break e}if((mg(s,A,t[(t[l>>2]|0)+(t[a>>2]<<2)>>2]|0)|0)==-1){i=-1;break e}else i=n}}f=L5[t[r>>2]&63](r,f,8)|0}}}while(0);if((i|0)>0){if((sg(s,A,97340)|0)==-1){i=-1;break}t[46987]=(t[46987]|0)+-1}t[e>>2]=t[e>>2]|8;i=0}}while(0);return i|0}function gg(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0;a=Mk(e)|0;e=Bd(e)|0;if((a|0)!=0?(i[a>>0]|0)!=0:0)if((sg(e,A,97333)|0)!=-1?(mg(e,A,a)|0)!=-1:0)if((r|0)!=0?(sg(e,A,97340)|0)==-1:0)e=-1;else{e=1;t=7}else e=-1;else{e=0;t=7}return e|0}function mg(e,A,r){e=e|0;A=A|0;r=r|0;return pg(e,A,r,1)|0}function pg(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;if(!i)r=Kv(r,eg(r)|0)|0;else r=$v(r)|0;return sg(e,A,r)|0}function Eg(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e:do{if(0>>0|(0==(i|0)?(t[A>>2]|0)>>>4>>>0>>0:0))A=0;else{A=Kw(e,A)|0;while(1){if(!A){A=1;break e}if(0>>0|(0==(i|0)?(t[t[A+40>>2]>>2]|0)>>>4>>>0>>0:0)){A=0;break e}A=$w(e,A)|0}}}while(0);return A|0}function Bg(e,A){e=e|0;A=A|0;if(!(Kw(e,A)|0))e=(Ow(e,A)|0)==0&1;else e=0;return e|0}function yg(e){e=e|0;var A=0,r=0,i=0;e=Ew(e)|0;e:do{if(!e)e=0;else{r=e+8|0;i=t[r>>2]|0;A=e+12|0;e=L5[t[i>>2]&63](i,0,128)|0;while(1){if(!e){e=0;break e}if((t[(t[A>>2]|0)+(t[e+16>>2]<<2)>>2]|0)!=(t[e+12>>2]|0)){e=1;break e}i=t[r>>2]|0;e=L5[t[i>>2]&63](i,e,8)|0}}}while(0);return e|0}function Cg(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=dw(e,0)|0;if(i)if(((Ig(e,A,111494,t[i+16>>2]|0,r)|0)!=-1?(Ig(e,A,111481,t[i+8>>2]|0,r)|0)!=-1:0)?(Ig(e,A,111450,t[i+12>>2]|0,r)|0)!=-1:0)a=5;else e=-1;else a=5;if((a|0)==5)e=0;return e|0}function Ig(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;u=(n|0)!=0;if(u)o=0;else o=Kh(a,0)|0;c=(o|0)==0;s=L5[t[a>>2]&63](a,0,128)|0;n=0;while(1){if(!s){b=23;break}l=s+12|0;b=t[l>>2]|0;if((b|0)!=0?(i[b>>0]|0)!=0:0)b=12;else b=7;do{if((b|0)==7){b=0;if(!(i[s+22>>0]|0)){if(!c){f=L5[t[o>>2]&63](o,s,4)|0;h=t[f+12>>2]|0;if(h|0?i[h>>0]|0:0){b=12;break}if(!(i[f+22>>0]|0))b=12}}else b=12}}while(0);if((b|0)==12){b=0;f=n+1|0;if(n){if((sg(e,A,97345)|0)==-1){n=-1;break}if((lg(e,A)|0)==-1){n=-1;break}}else{if((lg(e,A)|0)==-1){n=-1;break}if((sg(e,A,r)|0)==-1){n=-1;break}if((sg(e,A,97342)|0)==-1){n=-1;break}t[46987]=(t[46987]|0)+1}if((mg(e,A,t[s+8>>2]|0)|0)==-1){n=-1;break}if((sg(e,A,97348)|0)==-1){n=-1;break}if((mg(e,A,t[l>>2]|0)|0)==-1){n=-1;break}else n=f}s=L5[t[a>>2]&63](a,s,8)|0}do{if((b|0)==23){if((n|0)>0){t[46987]=(t[46987]|0)+-1;if((n|0)!=1){if((sg(e,A,153599)|0)==-1){n=-1;break}if((lg(e,A)|0)==-1){n=-1;break}}n=(sg(e,A,97377)|0)==-1;if(u|n){n=n<<31>>31;break}}else if(u){n=0;break}Kh(a,o)|0;n=0}}while(0);return n|0}function Zg(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;switch(t[A>>2]&3){case 0:{n=82;break}case 1:{n=83;break}case 3:case 2:{n=84;break}default:{}}A=Z5[n&127](e,A)|0;if(!A)A=-1;else{Dg(e,A,r,i,n,a);A=0}return A|0}function Gg(e,A){e=e|0;A=A|0;if((Bd(A)|0)!=(e|0))A=uk(e,A,0)|0;return A|0}function Lg(e,A){e=e|0;A=A|0;if((Bd(A)|0)!=(e|0))A=hd(e,A,0)|0;return A|0}function Qg(e,A){e=e|0;A=A|0;return e|0}function Dg(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;var n=0,f=0,l=0;f=(t|0)!=0;if(f)V5[r&127](e,A,i);n=xv(e)|0;while(1){if(!n)break;l=Z5[a&127](n,A)|0;if(l|0)Dg(n,l,r,i,a,t);n=Jv(n)|0}if(!f)V5[r&127](e,A,i);return}function zg(){var e=0,A=0,r=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+1200|0;d=g+800|0;r=g;t[46990]=0;t[46991]=-2;A=d;l=200;u=r;w=0;k=0;b=d;e:while(1){a[b>>1]=w;if((A+(l<<1)+-2|0)>>>0>b>>>0)c=l;else{o=b-A>>1;e=o+1|0;if(l>>>0>9999){v=75;break}c=l<<1;c=c>>>0<1e4?c:1e4;f=Z2(c*6|3)|0;if(f){Q6(f|0,A|0,e<<1|0)|0;l=f+(c>>>1<<2)|0;Q6(l|0,u|0,e<<2|0)|0;if((A|0)==(d|0)){e=0;A=f}else{G2(A);e=0;A=f}}else{e=4;l=u}s=(e|0)==0;f=A+(o<<1)|0;switch((s?(A+(c<<1)+-2|0)>>>0>f>>>0?0:9:e)&15){case 9:{e=1;v=76;break e}case 4:{v=75;break e}case 0:{r=s?l+(o<<2)|0:r;u=l;b=s?f:b;break}default:{e=0;break e}}}if((w|0)==6){e=0;v=76;break}e=i[97381+w>>0]|0;s=e<<24>>24;do{if(e<<24>>24!=-18){f=t[46991]|0;if((f|0)==-2){f=uv()|0;t[46991]=f}if((f|0)>=1)if(f>>>0<269)l=n[97461+f>>0]|0;else l=2;else{t[46991]=0;l=0}f=l+s|0;if(f>>>0<=59?(l|0)==(n[97730+f>>0]|0):0){w=i[97790+f>>0]|0;e=w<<24>>24;if(w<<24>>24<1){f=0-e|0;v=23;break}else{t[46991]=-2;r=r+4|0;t[r>>2]=t[46992];s=(k|0)==0?0:k+-1|0;f=b;break}}else v=22}else v=22}while(0);if((v|0)==22){v=0;w=i[97850+w>>0]|0;f=w&255;if(!(w<<24>>24)){f=t[46991]|0;A:do{switch(k|0){case 0:{t[46990]=(t[46990]|0)+1;Wv(143761);f=b;break}case 3:if((f|0)<1)if(!f){e=1;v=76;break e}else{f=b;break A}else{t[46991]=-2;f=b;break A}default:f=b}}while(0);while(1){if(e<<24>>24==18)break;if((f|0)==(A|0)){e=1;v=76;break e}e=f+-2|0;r=r+-4|0;f=e;e=i[97381+(a[e>>1]|0)>>0]|0}r=r+4|0;t[r>>2]=t[46992];e=1;s=3}else v=23}do{if((v|0)==23){v=0;l=n[97930+f>>0]|0;e=t[r+(1-l<<2)>>2]|0;A:do{switch(f|0){case 2:{Wg();Yg();break}case 3:{if(t[46993]|0){Wg();Yg();vk(t[46993]|0)|0;t[46942]=0;t[46993]=0}break}case 6:{Fg(t[r>>2]|0,t[r+-4>>2]|0,t[r+-8>>2]|0);break}case 7:{e=t[r>>2]|0;break}case 8:{e=0;break}case 9:{e=1;break}case 10:{e=0;break}case 11:{e=0;break}case 12:{e=1;break}case 21:if(!(t[r+-4>>2]|0)){Vg();break A}else{Mg();break A}case 24:{Ng();break}case 25:{Ng();break}case 26:{e=1;break}case 27:{e=0;break}case 30:{Rg(t[r>>2]|0,0,0);break}case 31:{Rg(t[r+-8>>2]|0,t[r>>2]|0,0);break}case 32:{Rg(t[r+-16>>2]|0,t[r+-8>>2]|0,t[r>>2]|0);break}case 33:{xg(t[r+-8>>2]|0,t[r+-4>>2]|0);break}case 34:{xg(258,0);break}case 35:{e=258;break}case 36:{e=259;break}case 37:{e=260;break}case 38:{e=t[r+-4>>2]|0;break}case 39:{e=0;break}case 48:{Jg(t[r+-8>>2]|0,t[r>>2]|0);break}case 49:{Jg(t[r>>2]|0,0);break}case 51:{Hg(t[r>>2]|0);break}case 52:{Pg();break}case 53:{e=t[r>>2]|0;break}case 54:{e=0;break}case 55:{e=0;break}case 59:{e=t[r>>2]|0;break}case 60:{e=t[r>>2]|0;break}case 61:{e=t[r>>2]|0;break}case 62:{e=Xg(t[r+-8>>2]|0,t[r>>2]|0)|0;break}default:{}}}while(0);l=0-l|0;w=r+(l<<2)|0;l=b+(l<<1)|0;r=w+4|0;t[w+4>>2]=e;e=(n[97993+f>>0]|0)+-24|0;w=a[l>>1]|0;f=w+(i[98056+e>>0]|0)|0;if(f>>>0<60?(n[97730+f>>0]|0)==(w|0):0){e=i[97790+f>>0]|0;s=k;f=l;break}e=i[98091+e>>0]|0;s=k;f=l}}while(0);l=c;w=e;k=s;b=f+2|0}if((v|0)==75){Wv(140558);e=2;v=76}if((v|0)==76)if((A|0)!=(d|0))G2(A);h=g;return e|0}function Wg(){var e=0,A=0;e=t[46994]|0;while(1){if(!e)break;Kg(e+8|0);Kg((t[46994]|0)+24|0);Kg((t[46994]|0)+16|0);A=Sg(t[46994]|0)|0;t[46994]=A;e=A}return}function Yg(){Yv();Sk(t[46993]|0);return}function Fg(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;f=h;h=h+16|0;n=f;a=t[46993]|0;if(!a){i[187980]=A&1|(r&255)<<1&2|i[187980]&-12|8;a=t[46996]|0;i[n>>0]=i[187980]|0;i[n+1>>0]=i[187981]|0;i[n+2>>0]=i[187982]|0;i[n+3>>0]=i[187983]|0;a=hk(e,n,a)|0;t[46993]=a}t[46942]=a;t[46994]=jg(t[46994]|0,a)|0;fv(0,e)|0;h=f;return}function Mg(){var e=0,A=0,r=0,a=0,n=0,f=0;qg(2);r=t[46994]|0;a=i[98126]|0;f=0;e=r+24|0;while(1){A=t[e>>2]|0;if(!A)break;if(((t[A>>2]|0)==267?(n=t[A+4>>2]|0,(i[n>>0]|0)==a<<24>>24):0)?(e1(n,98126)|0)==0:0)e=t[A+8>>2]|0;else e=f;f=e;e=A+12|0}e=r+16|0;e:while(1){r=t[e>>2]|0;e=r+12|0;if(!(t[e>>2]|0))break;A=r+4|0;if((t[r>>2]|0)==262){r=t[A>>2]|0;A=sd(r)|0;while(1){if(!A)continue e;n=hd(t[t[46994]>>2]|0,A,0)|0;tm(n,0,t[e>>2]|0,f);A=cd(r,A)|0}}else while(1){A=t[A>>2]|0;if(!A)continue e;tm(t[A+4>>2]|0,t[A+8>>2]|0,t[e>>2]|0,f);A=A+12|0}}Kg((t[46994]|0)+8|0);Kg((t[46994]|0)+16|0);Kg((t[46994]|0)+24|0);t[(t[46994]|0)+4>>2]=0;return}function Vg(){var e=0;qg(1);e=(t[46994]|0)+8|0;while(1){e=t[e>>2]|0;if(!e)break;am(t[e+4>>2]|0);e=e+12|0}Kg((t[46994]|0)+8|0);Kg((t[46994]|0)+24|0);Kg((t[46994]|0)+16|0);t[(t[46994]|0)+4>>2]=0;return}function Ng(){var e=0,A=0;e=t[46994]|0;A=t[e+8>>2]|0;if(!A){A=t[e+4>>2]|0;if(!A)A=0;else{A=im(A)|0;e=t[46994]|0}t[e+4>>2]=0}else{A=rm(A)|0;e=t[46994]|0;t[e+12>>2]=0;t[e+8>>2]=0}if(A|0)Tg(e+16|0,A);return}function Rg(e,A,r){e=e|0;A=A|0;r=r|0;if(r)A=em(A,r)|0;r=Am(gd(t[t[46994]>>2]|0,e,1)|0,A)|0;Tg((t[46994]|0)+8|0,r);fv(t[46993]|0,e)|0;return}function xg(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;if(A|0)_g();A=(t[46994]|0)+24|0;while(1){A=t[A>>2]|0;if(!A)break;if(!(t[A+8>>2]|0))_g();A=A+12|0}n=(e|0)==260?2:(e|0)==259&1;qg(n);e=t[46994]|0;A=e+24|0;while(1){a=t[A>>2]|0;if(!a)break;do{if((t[a>>2]|0)!=267){A=t[a+4>>2]|0;r=t[e>>2]|0;if(!((i[A+21>>0]|0)!=0&(r|0)==(t[46993]|0))){A=zw(r,n,t[A+8>>2]|0,t[a+8>>2]|0)|0;e=t[46994]|0;if((t[e>>2]|0)!=(t[46993]|0))break}i[A+22>>0]=1}}while(0);A=a+12|0}Kg(e+24|0);return}function Jg(e,A){e=e|0;A=A|0;A=Ug(e,A)|0;Tg((t[46994]|0)+24|0,A);return}function Hg(e){e=e|0;var A=0;A=t[46994]|0;t[46994]=jg(A,Rv(t[A>>2]|0,e,1)|0)|0;fv(t[46993]|0,e)|0;return}function Pg(){var e=0,A=0;e=t[46994]|0;A=t[e>>2]|0;e=Sg(e)|0;t[46994]=e;t[e+4>>2]=A;return}function Xg(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+1024|0;a=n;r=U2(e)|0;r=r+1+(U2(A)|0)|0;if(r>>>0<1025)r=a;else r=Z2(r)|0;$1(r,e)|0;b3(r,A)|0;i=tv(t[46993]|0,r)|0;fv(t[46993]|0,e)|0;fv(t[46993]|0,A)|0;if((r|0)!=(a|0))G2(r);h=n;return i|0}function Sg(e){e=e|0;var A=0;A=t[(t[46994]|0)+32>>2]|0;ad(t[46993]|0,e);return A|0}function jg(e,A){e=e|0;A=A|0;var r=0;r=id(t[46993]|0,36)|0;t[r+32>>2]=e;t[r>>2]=A;return r|0}function Ug(e,A){e=e|0;A=A|0;return Og(267,e,A)|0}function Tg(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+4|0;i=t[r>>2]|0;if(i|0)t[i+12>>2]=A;t[r>>2]=A;if(!(t[e>>2]|0))t[e>>2]=A;return}function Og(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=id(t[46993]|0,16)|0;t[i>>2]=e;t[i+4>>2]=A;t[i+8>>2]=r;return i|0}function _g(){var e=0;e=h;h=h+16|0;nw(0,98130,e)|0;h=e;return}function qg(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;n=(e|0)==2;A=(t[46994]|0)+24|0;while(1){A=t[A>>2]|0;if(!A)break;r=A+4|0;a=t[r>>2]|0;if(!((n?(i[a>>0]|0)==(i[98126]|0):0)?!(e1(a,98126)|0):0)){f=zw(t[t[46994]>>2]|0,e,a,0)|0;t[r>>2]=f;if(!f)t[r>>2]=zw(t[t[46994]>>2]|0,e,a,195059)|0;t[A>>2]=266;fv(t[46993]|0,a)|0}A=A+12|0}return}function Kg(e){e=e|0;$g(t[e>>2]|0);t[e+4>>2]=0;t[e>>2]=0;return}function $g(e){e=e|0;var A=0;while(1){if(!e)break;A=t[e+12>>2]|0;switch(t[e>>2]|0){case 265:{$g(t[e+4>>2]|0);break}case 266:case 267:{fv(t[46993]|0,t[e+8>>2]|0)|0;break}default:{}}ad(t[46993]|0,e);e=A}return}function em(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=h;h=h+1040|0;a=f;n=f+8|0;r=U2(e)|0;r=r+2+(U2(A)|0)|0;if(r>>>0<1025)i=n;else i=Z2(r)|0;t[a>>2]=e;t[a+4>>2]=A;T4(i,98163,a)|0;r=tv(t[46993]|0,i)|0;fv(t[46993]|0,e)|0;fv(t[46993]|0,A)|0;if((i|0)!=(n|0))G2(i);h=f;return r|0}function Am(e,A){e=e|0;A=A|0;return Og(259,e,A)|0}function rm(e){e=e|0;return Og(265,e,0)|0}function im(e){e=e|0;return Og(262,e,0)|0}function am(e){e=e|0;var A=0,r=0;A=(t[46994]|0)+24|0;while(1){A=t[A>>2]|0;if(!A)break;if((t[A>>2]|0)==266?(r=t[A+4>>2]|0,r|0):0)Mw(e,r,t[A+8>>2]|0)|0;A=A+12|0}return}function tm(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=r+4|0;e:do{if((t[r>>2]|0)==262){r=t[a>>2]|0;a=sd(r)|0;while(1){if(!a)break e;nm(e,A,hd(t[t[46994]>>2]|0,a,0)|0,0,i);a=cd(r,a)|0}}else while(1){a=t[a>>2]|0;if(!a)break e;r=hd(t[t[46994]>>2]|0,t[a+4>>2]|0,0)|0;nm(e,A,r,t[a+8>>2]|0,i);a=a+12|0}}while(0);return}function nm(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;r=lk(t[t[46994]>>2]|0,e,r,a,1)|0;if(r|0){n=t[r>>2]&3;a=t[((n|0)==2?r:r+-48|0)+40>>2]|0;e=(a|0)==(e|0)?(t[((n|0)==3?r:r+48|0)+40>>2]|0)!=(a|0):0;fm(r,111455,e?i:A);fm(r,111464,e?A:i);am(r)}return}function fm(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;if(r|0){i=zw(t[t[46994]>>2]|0,2,A,0)|0;if(!i)i=zw(t[t[46994]>>2]|0,2,A,195059)|0;Mw(e,i,r)|0}return}function lm(e,A,r){e=e|0;A=A|0;r=r|0;t[46962]=A;t[46993]=e;t[46942]=0;e=r|0?r:18600;t[46996]=e;ov(e,A);zg()|0;e=t[46942]|0;if(!e){Mv();e=t[46942]|0}return e|0}function sm(e,A){e=e|0;A=A|0;return lm(0,e,A)|0}function cm(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;s=c+8|0;l=c;A=t[e+76>>2]|0;a=t[e>>2]|0;if((A|0)!=0?(r=t[A>>2]|0,(r|0)!=0):0){F5[r&127](e);n=12}else n=4;do{if((n|0)==4)if((t[e+40>>2]|0)==0?(f=e+36|0,(t[f>>2]|0)==0):0){if(i[a+13>>0]|0)om(e);A=e+32|0;r=t[A>>2]|0;if(!r){t[f>>2]=t[15679];n=12;break}a=F3(r,106512)|0;t[f>>2]=a;if(!a){s=t[(t[e+12>>2]|0)+16>>2]|0;f=t[A>>2]|0;A=A1(t[(R2()|0)>>2]|0)|0;t[l>>2]=f;t[l+4>>2]=A;M5[s&63](98169,l);A=1}else n=12}else n=12}while(0);if((n|0)==12)if(!(t[e+152>>2]&1024))A=0;else{M5[t[(t[e+12>>2]|0)+16>>2]&63](98207,s);A=1}h=c;return A|0}function om(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;f=h;h=h+112|0;r=f;n=f+4|0;A=t[e+24>>2]|0;if(!A)i[n>>0]=0;else{t[r>>2]=A+1;T4(n,98225,r)|0}r=t[e+20>>2]|0;r=r|0?r:98229;A=U2(r)|0;l=U2(n)|0;a=e+52|0;l=A+1+l+(U2(t[a>>2]|0)|0)|0;A=l+11|0;if((t[46997]|0)>>>0<(l+1|0)>>>0){t[46997]=A;A=Q2(t[46998]|0,A)|0;t[46998]=A}else A=t[46998]|0;$1(A,r)|0;b3(t[46998]|0,n)|0;A=t[46998]|0;A=A+(U2(A)|0)|0;i[A>>0]=46;i[A+1>>0]=0;A=o3(t[a>>2]|0)|0;a=t[46998]|0;while(1){r=u3(A,58)|0;if(!r)break;b3(a,r+1|0)|0;l=t[46998]|0;n=l+(U2(l)|0)|0;i[n>>0]=46;i[n+1>>0]=0;i[r>>0]=0;a=l}b3(a,A)|0;G2(A);t[e+32>>2]=t[46998];h=f;return}function um(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f+8|0;a=f;if((A|0)!=0&(r|0)!=0){if(t[e+152>>2]&1024|0){M5[t[(t[e+12>>2]|0)+16>>2]&63](98207,a);Ue(1)}if((bm(e,A,r)|0)==(r|0))i=r;else{a=t[(t[e+12>>2]|0)+16>>2]|0;t[n>>2]=r;M5[a&63](98239,n);Ue(1)}}else i=0;h=f;return i|0}function bm(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b;a=t[(t[e>>2]|0)+104>>2]|0;do{if(!a){s=e+40|0;f=t[s>>2]|0;if(!f){r=G3(A,1,r,t[e+36>>2]|0)|0;break}a=e+44|0;l=e+48|0;n=t[l>>2]|0;do{if(((t[a>>2]|0)+-1-n|0)>>>0>>0){n=r+4096+n&-4096;t[a>>2]=n;a=Q2(f,n)|0;t[s>>2]=a;if(!a){M5[t[(t[e+12>>2]|0)+16>>2]&63](98264,u);Ue(1)}else{c=a;o=t[l>>2]|0;break}}else{c=f;o=n}}while(0);Q6(c+o|0,A|0,r|0)|0;u=(t[l>>2]|0)+r|0;t[l>>2]=u;i[(t[s>>2]|0)+u>>0]=0}else r=L5[a&63](e,A,r)|0}while(0);h=b;return r|0}function hm(e,A){e=e|0;A=A|0;var r=0;r=U2(A)|0;A=(um(e,A,r)|0)==(r|0);return(A?1:-1)|0}function wm(e,A){e=e|0;A=A|0;var r=0,a=0;r=h;h=h+16|0;a=r;i[a>>0]=A;e=(um(e,a,1)|0)==1;h=r;return(e?A:-1)|0}function km(e){e=e|0;var A=0;A=t[e+36>>2]|0;if(((A|0)!=0?(i[e+144>>0]|0)==0:0)?(t[(t[e>>2]|0)+104>>2]|0)==0:0)e=m3(A)|0;else e=0;return e|0}function dm(e){e=e|0;var A=0,r=0;A=t[e+76>>2]|0;if(A|0?(r=t[A+4>>2]|0,r|0):0)F5[r&127](e);km(e)|0;return}function vm(e){e=e|0;var A=0,r=0,i=0;i=h;h=h+16|0;r=t[e+76>>2]|0;if(t[e+152>>2]&1024|0){M5[t[(t[e+12>>2]|0)+16>>2]&63](98291,i);Ue(1)}if((r|0)!=0?(A=t[r+8>>2]|0,(A|0)!=0):0)F5[A&127](e);else{km(e)|0;gm(e)}h=i;return}function gm(e){e=e|0;var A=0,r=0,a=0;A=e+32|0;if((t[A>>2]|0?(r=e+36|0,a=t[r>>2]|0,(a|0)!=(t[15679]|0)):0)?(i[e+144>>0]|0)==0:0){if(a|0){k3(a)|0;t[r>>2]=0}t[A>>2]=0}return}function mm(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;l=h;h=h+1056|0;a=l;f=l+24|0;n=l+8|0;t[n>>2]=r;i=h4(f,1024,A,n)|0;if((i|0)>=0){if((i|0)>1023){i=$F(i+1|0)|0;t[n>>2]=r;a=i;i=O4(i,A,n)|0}else a=f;um(e,a,i)|0;if((a|0)!=(f|0))G2(a)}else{t[a>>2]=A1(t[(R2()|0)>>2]|0)|0;nw(1,98308,a)|0}h=l;return}function pm(e,A){e=e|0;A=+A;var r=0,i=0,a=0;r=h;h=h+16|0;i=r;a=Em(i,A)|0;um(e,a,t[i>>2]|0)|0;h=r;return}function Em(e,A){e=e|0;A=+A;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;if(!(A<-1.0e15))if(!(A>1.0e15)){A=A*1.0e4;a=~~((A<0.0?-.5:.5)+A);if(!a){a=138394;r=1}else{o=(a|0)<0;c=4;l=0;r=194826;a=o?0-a|0:a;while(1){if(!((a|0)!=0|(c|0)>0))break;n=(a|0)%10|0;s=(a|0)/10|0;f=r+-1|0;if((n|0)==0&l<<24>>24==0)a=0;else{i[f>>0]=n|48;a=1;r=f}if((c|0)==1)if(!(a<<24>>24))a=1;else{r=r+-1|0;i[r>>0]=46;a=1}c=c+-1|0;l=a;a=s}if(o){r=r+-1|0;i[r>>0]=45}a=r;r=194826-r|0}}else{a=98323;r=18}else{a=98322;r=19}t[e>>2]=r;return a|0}function Bm(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+16|0;i=r;a=Em(i,+c[A>>3])|0;um(e,a,t[i>>2]|0)|0;um(e,102604,1)|0;A=Em(i,+c[A+8>>3])|0;um(e,A,t[i>>2]|0)|0;h=r;return}function ym(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;n=h;h=h+16|0;a=n;i=0;while(1){f=A+(i<<4)|0;t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[a+8>>2]=t[f+8>>2];t[a+12>>2]=t[f+12>>2];Bm(e,a);i=i+1|0;if((i|0)>=(r|0))break;um(e,102604,1)|0}h=n;return}function Cm(e,A){e=e|0;A=A|0;var r=0;r=KF(392)|0;if(r|0){t[r>>2]=20156;t[r+16>>2]=23;t[r+32>>2]=e;t[r+36>>2]=A}return r|0}function Im(e){e=e|0;var A=0,r=0,i=0,a=0;A=KF(392)|0;r=A;i=e;a=r+40|0;do{t[r>>2]=t[i>>2];r=r+4|0;i=i+4|0}while((r|0)<(a|0));a=A+60|0;i=e+60|0;t[a>>2]=t[i>>2];t[a+4>>2]=t[i+4>>2];t[a+8>>2]=t[i+8>>2];t[a+12>>2]=t[i+12>>2];t[a+16>>2]=t[i+16>>2];a=A+80|0;i=e+80|0;t[a>>2]=t[i>>2];t[a+4>>2]=t[i+4>>2];t[a+8>>2]=t[i+8>>2];t[a+12>>2]=t[i+12>>2];t[a+16>>2]=t[i+16>>2];return A|0}function Zm(e){e=e|0;Ym(e);G2(e);return}function Gm(e,A){e=e|0;A=A|0;var r=0,i=0;i=e+160|0;r=t[i>>2]|0;if(r){i=t[46999]|0;if(i){r=t[i+4>>2]|0;if(!r){r=KF(632)|0;t[(t[46999]|0)+4>>2]=r}}}else{r=KF(632)|0;t[i>>2]=r;t[e+164>>2]=r}t[46999]=r;t[r+32>>2]=A;t[r>>2]=e;return}function Lm(e,A){e=e|0;A=A|0;var r=0,i=0;i=e+160|0;r=t[i>>2]|0;if(r){i=t[47e3]|0;if(i){r=t[i+4>>2]|0;if(!r){r=KF(632)|0;t[(t[47e3]|0)+4>>2]=r}}}else{r=KF(632)|0;t[i>>2]=r;t[e+164>>2]=r}t[47e3]=r;t[r+52>>2]=A;t[r>>2]=e;return(Vm(e,3,A)|0)!=0|0}function Qm(e){e=e|0;var A=0;A=t[e+160>>2]|0;t[e+164>>2]=A;return A|0}function Dm(e){e=e|0;var A=0,r=0,i=0;e=e+164|0;A=t[e>>2]|0;r=t[A+4>>2]|0;if(r|0?(i=r+52|0,(t[i>>2]|0)==0):0)t[i>>2]=t[A+52>>2];t[e>>2]=r;return r|0}function zm(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=e+8|0;a=A+10|0;if((t[i>>2]|0)>(A|0))e=t[e>>2]|0;else{t[i>>2]=a;a=AM(t[e>>2]|0,a<<2)|0;t[e>>2]=a;e=a}t[e+(A<<2)>>2]=r;return}function Wm(e){e=e|0;var A=0;A=t[e>>2]|0;if(A|0)G2(A);t[e>>2]=0;t[e+8>>2]=0;t[e+4>>2]=0;return}function Ym(e){e=e|0;var A=0,r=0,i=0;r=e+160|0;A=t[r>>2]|0;while(1){if(!A)break;i=t[A+4>>2]|0;Wm(A+604|0);Wm(A+592|0);G2(t[A+584>>2]|0);G2(t[A+588>>2]|0);G2(A);A=i}t[47e3]=0;t[46999]=0;t[e+192>>2]=0;t[e+164>>2]=0;t[r>>2]=0;t[e+28>>2]=0;return}function Fm(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0;u=h;h=h+128|0;c=u+64|0;o=u;X4(c,r,63)|0;l=C1(c,58)|0;if(l|0)i[l>>0]=0;e=e+60+(A<<2)|0;while(1){A=t[e>>2]|0;if(!A){A=e;e=0;break}X4(o,t[A+4>>2]|0,63)|0;A=C1(o,58)|0;if(A|0)i[A>>0]=0;if((e1(c,o)|0)<1){s=9;break}e=t[e>>2]|0}while(1){if((s|0)==9){A=e;e=t[e>>2]|0}if(!e)break;X4(o,t[e+4>>2]|0,63)|0;e=C1(o,58)|0;if(e|0)i[e>>0]=0;if(e1(c,o)|0)break;e=t[A>>2]|0;if((t[e+8>>2]|0)<=(a|0))break;s=9}o=$F(20)|0;t[o>>2]=t[A>>2];t[A>>2]=o;t[o+4>>2]=r;t[o+8>>2]=a;t[o+12>>2]=n;t[o+16>>2]=f;h=u;return 1}function Mm(e,A){e=e|0;A=A|0;A=h;h=h+16|0;nw(1,98396,A)|0;h=A;return 0}function Vm(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+144|0;d=v;b=v+80|0;w=v+16|0;u=(A+-3|0)>>>0<2?0:A;X4(b,r,63)|0;r=C1(b,58)|0;if(r){a=r+1|0;i[r>>0]=0;r=C1(a,58)|0;if(!r)o=0;else{i[r>>0]=0;o=r+1|0}}else{o=0;a=0}l=(a|0)!=0;s=(o|0)==0;c=(u|0)==(A|0);f=e+60+(A<<2)|0;e:while(1){r=t[f>>2]|0;if(!r){r=0;break}X4(w,t[r+4>>2]|0,63)|0;r=C1(w,58)|0;if(!r)r=0;else{i[r>>0]=0;r=r+1|0}do{if(!(e1(w,b)|0)){n=(r|0)!=0;if(l&n?e1(r,a)|0:0)break;if(!s?e1(o,t[(t[(t[f>>2]|0)+12>>2]|0)+8>>2]|0)|0:0)break;if(c|n^1){k=16;break e}if(Vm(e,u,r)|0){k=16;break e}}}while(0);f=t[f>>2]|0}do{if((k|0)==16){r=t[f>>2]|0;if(r){a=r+16|0;if((t[a>>2]|0)==0?(Mm(0,0)|0,(t[a>>2]|0)==0):0){r=0;break}if((t[e+8>>2]|0)>0){k=t[15712]|0;b=t[r+4>>2]|0;w=t[(t[r+12>>2]|0)+8>>2]|0;t[d>>2]=t[20168+(A<<2)>>2];t[d+4>>2]=b;t[d+8>>2]=w;a3(k,98427,d)|0}}else r=0}}while(0);t[e+80+(A<<2)>>2]=r;h=v;return r|0}function Nm(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;do{if(!r)r=0;else{if(t[5047]|0){cw(188004,0,0);t[5047]=0}f=o3(r)|0;r=C1(f,58)|0;if(r){i[r>>0]=0;a=e+60+(A<<2)|0;r=1;n=a;while(1){e=t[n>>2]|0;if(!e)break;A=o3(t[e+4>>2]|0)|0;e=C1(A,58)|0;if(e|0)i[e>>0]=0;if(!((i[f>>0]|0)!=0?(N1(f,A)|0)!=0:0)){r=t[47002]|0;if(r>>>0>=(t[47003]|0)>>>0){ow(188004,1)|0;r=t[47002]|0}t[47002]=r+1;i[r>>0]=32;bw(188004,t[(t[n>>2]|0)+4>>2]|0)|0;r=t[47002]|0;if(r>>>0>=(t[47003]|0)>>>0){ow(188004,1)|0;r=t[47002]|0}t[47002]=r+1;i[r>>0]=58;bw(188004,t[(t[(t[n>>2]|0)+12>>2]|0)+8>>2]|0)|0;r=0}G2(A);n=t[n>>2]|0}G2(f);if(r<<24>>24){n=0;l=19}}else{G2(f);n=0;a=e+60+(A<<2)|0;r=1;l=19}if((l|0)==19){while(1){e=t[a>>2]|0;if(!e)break;A=o3(t[e+4>>2]|0)|0;e=C1(A,58)|0;if(e|0)i[e>>0]=0;if(!((n|0)!=0?(N1(n,A)|0)==0:0)){r=t[47002]|0;if(r>>>0>=(t[47003]|0)>>>0){ow(188004,1)|0;r=t[47002]|0}t[47002]=r+1;i[r>>0]=32;bw(188004,A)|0;r=0}n=A;a=t[a>>2]|0;l=19}if(r<<24>>24){r=195059;break}}r=t[47002]|0;if(r>>>0>=(t[47003]|0)>>>0){ow(188004,1)|0;r=t[47002]|0}i[r>>0]=0;r=t[47001]|0;t[47002]=r}}while(0);return r|0}function Rm(e){e=e|0;var A=0;if(!e)ge(111208,98444,573,98458);if(!(i[e>>0]|0))ge(111213,98444,574,98458);A=t[47005]|0;if(!A)e=0;else e=L5[t[A>>2]&63](A,e,512)|0;return e|0}function xm(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;s=c+8|0;l=c;if(!e)ge(111312,98444,589,98475);n=e+8|0;r=t[n>>2]|0;if(!r)ge(111315,98444,590,98475);if(!(i[r>>0]|0))ge(111324,98444,591,98475);f=e+20|0;a=t[f>>2]|0;do{if(!a){A=Lx(r)|0;if(!A){t[l>>2]=t[n>>2];nw(0,98499,l)|0;A=0;break}l=F3(A,138821)|0;t[f>>2]=l;if(!l){t[s>>2]=A1(t[(R2()|0)>>2]|0)|0;t[s+4>>2]=A;nw(0,98524,s)|0;A=0;break}A=t[47006]|0;if((A|0)>49){i[e+17>>0]=1;A=1;break}else{t[47006]=A+1;A=1;break}}else{O3(a,0,0)|0;if(!(t[f>>2]|0))ge(98545,98444,614,98475);else A=1}}while(0);h=c;return A|0}function Jm(e){e=e|0;var A=0,r=0;if(i[e+17>>0]|0?(A=e+20|0,r=t[A>>2]|0,r|0):0){k3(r)|0;t[A>>2]=0}return}function Hm(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0;if(!A){i=-1;r=-1}else{i=t[A+48>>2]|0;a=+(i|0);if(!i){n=+c[r>>3];a=+c[r+8>>3]}else{c[r+8>>3]=a;c[r>>3]=a;n=a}i=~~(+((t[A+40>>2]|0)*72|0)/n);r=~~(+((t[A+44>>2]|0)*72|0)/a)}t[e>>2]=i;t[e+4>>2]=r;return}function Pm(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0.0;o=h;h=h+48|0;a=o+16|0;l=o;s=o+32|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){if((0==0?(n=t[47133]|0,(t[47007]|0)!=(n|0)):0)?(t[47007]=n,f=t[47005]|0,f|0):0){Ph(f)|0;t[47005]=0}u=+c[(t[(t[A+16>>2]|0)+8>>2]|0)+24>>3];u=!(u>=1.0)?96.0:u;c[l+8>>3]=u;c[l>>3]=u;A=Xm(r)|0;t[a>>2]=t[l>>2];t[a+4>>2]=t[l+4>>2];t[a+8>>2]=t[l+8>>2];t[a+12>>2]=t[l+12>>2];Hm(s,A,a);A=t[s>>2]|0;a=t[s+4>>2]|0}else{A=-1;a=-1}t[e>>2]=A;t[e+4>>2]=a;h=o;return}function Xm(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+16|0;i=a;if(!e)ge(111208,98444,638,98551);if(!(t[47005]|0))t[47005]=Uh(20192,t[4589]|0)|0;A=Rm(e)|0;e:do{if(!A){A=KF(64)|0;if(!A)A=0;else{r=A+8|0;t[r>>2]=tv(0,e)|0;if(!((xm(A)|0)<<24>>24)){Sm(A);A=0;break}if(!(t[A+20>>2]|0))ge(98545,98444,653,98551);do{switch(jm(A)|0){case 0:{e=CN(t[r>>2]|0)|0;t[A+52>>2]=e;if(!e){t[i>>2]=t[r>>2];nw(0,98568,i)|0;Sm(A);A=0;break e}break}case 2:{Um(A);break}case 3:{Tm(A);break}case 1:{Om(A);break}case 4:{_m(A);break}case 6:{qm(A);break}case 11:{Km(A);break}case 8:{$m(A);break}case 5:{ep(A);break}case 12:{Ap(A);break}default:{}}}while(0);Jm(A);i=t[47005]|0;L5[t[i>>2]&63](i,A,1)|0}}else Jm(A)}while(0);h=a;return A|0}function Sm(e){e=e|0;var A=0;A=t[e+8>>2]|0;if(A|0)fv(0,A)|0;G2(e);return}function jm(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+224|0;a=s+200|0;n=s;f=e+20|0;A=t[f>>2]|0;e:do{if((A|0)!=0?(t6(a,1,20,A)|0)==20:0){r=0;while(1){if(r>>>0>=10){l=13;break e}if(!(F4(a,t[20228+(r<<4)>>2]|0,t[20228+(r<<4)+4>>2]|0)|0))break;r=r+1|0}i=e+28|0;t[i>>2]=t[20228+(r<<4)+12>>2];A=t[20228+(r<<4)+8>>2]|0;e=e+24|0;t[e>>2]=A;switch(r|0){case 7:break;case 8:{if(F4(a+8|0,98784,4)|0)break e;t[i>>2]=98789;t[e>>2]=11;A=11;break e}default:break e}while(1){if(!(N4(n,200,t[f>>2]|0)|0)){l=11;break}if(!(F4(n,98779,4)|0)){l=8;break}}if((l|0)==8){t[i>>2]=101803;t[e>>2]=8;A=8;break}else if((l|0)==11){A=t[e>>2]|0;break}}else l=13}while(0);if((l|0)==13){t[e+28>>2]=98794;t[e+24>>2]=0;A=0}h=s;return A|0}function Um(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+16|0;A=a+4|0;r=a;t[e+48>>2]=0;i=e+20|0;O3(t[i>>2]|0,6,0)|0;if((cp(t[i>>2]|0,2,A)|0)<<24>>24?(cp(t[i>>2]|0,2,r)|0)<<24>>24:0){t[e+40>>2]=t[A>>2];t[e+44>>2]=t[r>>2]}h=a;return}function Tm(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+16|0;A=a+4|0;r=a;t[e+48>>2]=0;i=e+20|0;O3(t[i>>2]|0,16,0)|0;if((rp(t[i>>2]|0,4,A)|0)<<24>>24?(rp(t[i>>2]|0,4,r)|0)<<24>>24:0){t[e+40>>2]=t[A>>2];t[e+44>>2]=t[r>>2]}h=a;return}function Om(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;A=f+12|0;r=f+8|0;i=f+4|0;a=f;t[e+48>>2]=0;n=e+20|0;O3(t[n>>2]|0,16,0)|0;if((((cp(t[n>>2]|0,2,A)|0)<<24>>24?(cp(t[n>>2]|0,2,r)|0)<<24>>24:0)?(cp(t[n>>2]|0,2,i)|0)<<24>>24:0)?(cp(t[n>>2]|0,2,a)|0)<<24>>24:0){t[e+40>>2]=t[A>>2]<<16|t[r>>2];t[e+44>>2]=t[i>>2]<<16|t[a>>2]}h=f;return}function _m(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+32|0;A=o+16|0;i=o+12|0;a=o+8|0;f=o+4|0;l=o;t[e+48>>2]=0;s=e+20|0;while(1){if(!((rp(t[s>>2]|0,1,A)|0)<<24>>24))break;r=t[A>>2]|0;if((r|0)==255)continue;if(C1(98767,r)|0)continue;if((r|0)==192){c=6;break}n=t[s>>2]|0;if((r|0)==194){c=11;break}if(!((rp(n,2,i)|0)<<24>>24))break;O3(t[s>>2]|0,(t[i>>2]|0)+-2|0,1)|0}if((c|0)==6){if(((rp(t[s>>2]|0,3,l)|0)<<24>>24?(rp(t[s>>2]|0,2,a)|0)<<24>>24:0)?(rp(t[s>>2]|0,2,f)|0)<<24>>24:0){t[e+44>>2]=t[a>>2];t[e+40>>2]=t[f>>2]}}else if((((c|0)==11?(rp(n,3,l)|0)<<24>>24:0)?(rp(t[s>>2]|0,2,a)|0)<<24>>24:0)?(rp(t[s>>2]|0,2,f)|0)<<24>>24:0){t[e+44>>2]=t[a>>2];t[e+40>>2]=t[f>>2]}h=o;return}function qm(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+1056|0;s=o;A=o+32|0;i=o+28|0;a=o+24|0;n=o+20|0;f=o+16|0;t[e+48>>2]=72;l=e+20|0;O3(t[l>>2]|0,0,0)|0;while(1){if(!(N4(A,1024,t[l>>2]|0)|0))break;r=R4(A,98752)|0;if(!r)continue;t[s>>2]=i;t[s+4>>2]=a;t[s+8>>2]=n;t[s+12>>2]=f;if((V3(r,104311,s)|0)==4){c=5;break}}if((c|0)==5){s=t[i>>2]|0;t[e+32>>2]=s;c=t[a>>2]|0;t[e+36>>2]=c;t[e+40>>2]=(t[n>>2]|0)-s;t[e+44>>2]=(t[f>>2]|0)-c}h=o;return}function Km(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;n=h;h=h+16|0;A=n+4|0;r=n;t[e+48>>2]=0;i=e+20|0;O3(t[i>>2]|0,15,0)|0;f=(o6(t[i>>2]|0)|0)==88;a=t[i>>2]|0;if(f){O3(a,24,0)|0;if((cp(t[i>>2]|0,4,A)|0)<<24>>24?(cp(t[i>>2]|0,4,r)|0)<<24>>24:0){t[e+40>>2]=t[A>>2];t[e+44>>2]=t[r>>2]}}else{O3(a,26,0)|0;if((cp(t[i>>2]|0,2,A)|0)<<24>>24?(cp(t[i>>2]|0,2,r)|0)<<24>>24:0){t[e+40>>2]=t[A>>2];t[e+44>>2]=t[r>>2]}}h=n;return}function $m(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0;D=h;h=h+352|0;G=D+80|0;Z=D+72|0;Q=D+64|0;L=D+56|0;I=D+48|0;A=D+40|0;v=D+32|0;g=D+24|0;m=D+16|0;p=D+8|0;E=D;B=D+328|0;y=D+128|0;C=D+96|0;if(!(t[47008]|0)){if(b8(188036,98637,1)|0){t[A>>2]=98637;nw(1,98664,A)|0}t[47008]=188036}o=e+20|0;O3(t[o>>2]|0,0,0)|0;u=C+12|0;b=C+20|0;w=C+8|0;k=C+16|0;d=C+4|0;A=0;n=0;a=0;r=0;e:while(1){if(!(N4(y,200,t[o>>2]|0)|0))break;if(n<<24>>24==0|A<<24>>24==0){f=y;s=r}else break;A:while(1){l=a;r:while(1){while(1){if($8(188036,f,4,C,0)|0){a=l;r=s;continue e}i[f+(t[u>>2]|0)>>0]=0;i[f+(t[b>>2]|0)>>0]=0;r=f+(t[w>>2]|0)|0;a=f+(t[k>>2]|0)|0;f=f+((t[d>>2]|0)+1)|0;if(!(e1(r,141116)|0))break;if(!(e1(r,141048)|0))break r;if(e1(r,98711)|0)continue;t[G>>2]=g;t[G+4>>2]=m;t[G+8>>2]=p;t[G+12>>2]=E;if((V3(a,98719,G)|0)==4)break A}t[I>>2]=v;t[I+4>>2]=B;if((V3(a,98701,I)|0)!=2){t[L>>2]=v;if((V3(a,101209,L)|0)==1){r=1;a=sp(+c[v>>3],98708)|0}else{r=n;a=l}}else{r=1;a=sp(+c[v>>3],B)|0}if(!(A<<24>>24)){A=0;n=r;l=a}else{n=r;r=s;continue e}}t[Q>>2]=v;t[Q+4>>2]=B;if((V3(a,98701,Q)|0)!=2){t[Z>>2]=v;if((V3(a,101209,Z)|0)==1){A=1;r=sp(+c[v>>3],98708)|0}else r=s}else{A=1;r=sp(+c[v>>3],B)|0}if(!(n<<24>>24)){n=0;a=l;s=r}else{a=l;continue e}}A=1;n=1;a=~~(+c[p>>3]+1.0-+c[g>>3])>>>0;r=~~(+c[E>>3]+1.0-+c[m>>3])>>>0}t[e+48>>2]=0;t[e+40>>2]=a;t[e+44>>2]=r;h=D;return}function ep(e){e=e|0;var A=0,r=0,i=0,a=0.0,n=0.0;r=h;h=h+32|0;A=r;t[e+48>>2]=0;i=e+20|0;O3(t[i>>2]|0,0,0)|0;if(!(ip(t[i>>2]|0,A)|0)){n=+c[A>>3];t[e+32>>2]=~~n;a=+c[A+8>>3];t[e+36>>2]=~~a;t[e+40>>2]=~~(+c[A+16>>3]-n);t[e+44>>2]=~~(+c[A+24>>3]-a)}h=r;return}function Ap(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+16|0;A=a+4|0;r=a;t[e+48>>2]=0;i=e+20|0;O3(t[i>>2]|0,6,0)|0;if((rp(t[i>>2]|0,1,A)|0)<<24>>24?(rp(t[i>>2]|0,1,r)|0)<<24>>24:0){t[e+40>>2]=t[A>>2];t[e+44>>2]=t[r>>2]}h=a;return}function rp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;t[r>>2]=0;i=0;while(1){if(i>>>0>=A>>>0){i=1;break}a=o6(e)|0;if(w3(e)|0){i=0;break}t[r>>2]=t[r>>2]<<8|a;i=i+1|0}return i|0}function ip(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=h;h=h+1040|0;r=f;i=f+16|0;while(1){if(!(N4(i,1024,e)|0)){e=1;break}a=R4(i,98627)|0;if(a|0){n=4;break}}if((n|0)==4){t[r+4>>2]=i;t[r>>2]=a+9;t[r+8>>2]=e;e=ap(r,A)|0}h=f;return e|0}function ap(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;n=h;h=h+1024|0;a=n;tp(e);r=i[t[e>>2]>>0]|0;if(!(r<<24>>24))r=(np(e)|0)&255;else r=r<<24>>24;if((((r|0)==91?(t[e>>2]=(t[e>>2]|0)+1,fp(e,a),(lp(a,A)|0)==0):0)?(fp(e,a),(lp(a,A+8|0)|0)==0):0)?(fp(e,a),(lp(a,A+16|0)|0)==0):0){fp(e,a);r=(lp(a,A+24|0)|0)!=0&1}else r=1;h=n;return r|0}function tp(e){e=e|0;var A=0;A=t[e>>2]|0;while(1){A=i[A>>0]|0;if(!(A<<24>>24))A=(np(e)|0)&255;else A=A<<24>>24;if(!((A&255)<<24>>24))break;if(!(I1(A&255)|0))break;A=(t[e>>2]|0)+1|0;t[e>>2]=A}return}function np(e){e=e|0;var A=0;A=e+4|0;if(!(N4(t[A>>2]|0,1024,t[e+8>>2]|0)|0))e=0;else{A=t[A>>2]|0;t[e>>2]=A;e=i[A>>0]|0}return e|0}function fp(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;tp(e);r=0;a=t[e>>2]|0;while(1){a=i[a>>0]|0;if(!(a<<24>>24))n=(np(e)|0)&255;else n=a<<24>>24;a=n<<24>>24;if(!a)break;if(!((a|0)==46|(a+-48|0)>>>0<10))break;i[A+r>>0]=n;r=r+1|0;a=(t[e>>2]|0)+1|0;t[e>>2]=a;if((r|0)==1023){r=1023;break}}i[A+r>>0]=0;return}function lp(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0;i=h;h=h+16|0;a=i;r=+e8(e,a);if((t[a>>2]|0)==(e|0))e=1;else{c[A>>3]=r;e=0}h=i;return e|0}function sp(e,A){e=+e;A=A|0;var r=0.0;do{if(!(e1(A,98735)|0)){e=e*72.0;r=e;e=e>=0.0?.5:-.5}else{if(!(e1(A,98738)|0)){e=e*.75;r=e;e=e>=0.0?.5:-.5;break}if(!(e1(A,98741)|0)){e=e*12.0;r=e;e=e>=0.0?.5:-.5;break}if(e1(A,98708)|0?e1(A,98744)|0:0)if(!(e1(A,98746)|0)){e=e*28.346456664;r=e;e=e>=0.0?.5:-.5;break}else{A=(e1(A,98749)|0)==0;r=e*2.8346456663999997;return(A?~~(r+(r>=0.0?.5:-.5)):0)|0}r=e>=0.0?.5:-.5}}while(0);return~~(e+r)|0}function cp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;t[r>>2]=0;i=0;while(1){if(i>>>0>=A>>>0){i=1;break}a=o6(e)|0;if(w3(e)|0){i=0;break}t[r>>2]=t[r>>2]|a<<(i<<3);i=i+1|0}return i|0}function op(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;e=t[A+20>>2]|0;if(e|0)k3(e)|0;if(t[A+52>>2]|0?(i=t[A+60>>2]|0,i|0):0)F5[i&127](A);G2(A);return}function up(){var e=0;zw(0,1,108224,105493)|0;e=Cm(0,1)|0;ji(e,0);return e|0}function bp(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0.0,u=0.0,b=0.0,w=0.0;s=h;h=h+304|0;l=s+24|0;f=s+8|0;a=s;n=s+40|0;if((bi(e,r)|0)!=999)if((hi(e,A)|0)==-1)e=-1;else{e=t[A+16>>2]|0;r=e+16|0;if(!(i[(t[e+8>>2]|0)+81>>0]|0)){w=+c[r>>3];b=+c[e+24>>3];u=+c[e+32>>3];o=+c[e+40>>3];t[l>>2]=~~(w+(w>=0.0?.5:-.5));t[l+4>>2]=~~(b+(b>=0.0?.5:-.5));t[l+8>>2]=~~(u+(u>=0.0?.5:-.5));t[l+12>>2]=~~(o+(o>=0.0?.5:-.5));T4(n,98899,l)|0}else{o=+c[e+24>>3];u=+c[r>>3];b=+c[e+40>>3];w=+c[e+32>>3];t[f>>2]=~~(o+(o>=0.0?.5:-.5));t[f+4>>2]=~~(u+(u>=0.0?.5:-.5));t[f+8>>2]=~~(b+(b>=0.0?.5:-.5));t[f+12>>2]=~~(w+(w>=0.0?.5:-.5));T4(n,98899,f)|0}Sw(A,102671,n,195059)|0;e=0}else{e=Nm(e,1,r)|0;t[a>>2]=r;t[a+4>>2]=e;nw(1,111233,a)|0;e=-1}h=s;return e|0}function hp(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l;a=t[A+60>>2]|0;Lm(e,r)|0;A=t[e+164>>2]|0;t[A+56>>2]=Zr(A,t[A+52>>2]|0)|0;if((Sd(a,137483,0,1)|0)!=0?(t[(t[a+16>>2]|0)+8>>2]|0)!=0:0)f=5;else if(!(t[A+152>>2]&67108864)){sw(98911,n);A=-1}else f=5;if((f|0)==5){t[A+36>>2]=i;if(!i){f=A+152|0;t[f>>2]=t[f>>2]|134217728}f=fF(e,a)|0;Lr(A);Ym(e);A=f}h=l;return A|0}function wp(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l;a=t[A+60>>2]|0;Lm(e,r)|0;A=t[e+164>>2]|0;t[A+56>>2]=Zr(A,t[A+52>>2]|0)|0;if((Sd(a,137483,0,1)|0)!=0?(t[(t[a+16>>2]|0)+8>>2]|0)!=0:0)f=5;else if(!(t[A+152>>2]&67108864)){sw(98911,n);A=-1}else f=5;if((f|0)==5){Gm(e,i);f=fF(e,a)|0;Lr(A);vm(A);Ym(e);A=f}h=l;return A|0}function kp(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+16|0;f=o+8|0;n=o;A=t[A+60>>2]|0;Lm(e,r)|0;s=t[e+164>>2]|0;t[s+56>>2]=Zr(s,t[s+52>>2]|0)|0;if((Sd(A,137483,0,1)|0)!=0?(t[(t[A+16>>2]|0)+8>>2]|0)!=0:0)c=5;else if(!(t[s+152>>2]&67108864)){sw(98911,n);A=-1}else c=5;do{if((c|0)==5){if(i|0?(l=Z2(4096)|0,t[i>>2]=l,l|0):0){n=s+40|0;t[n>>2]=l;t[s+44>>2]=4096;r=s+48|0;t[r>>2]=0;A=fF(e,A)|0;Lr(s);if(!A){t[i>>2]=t[n>>2];t[a>>2]=t[r>>2]}Ym(e);break}nw(1,98932,f)|0;A=-1}}while(0);h=o;return A|0}function dp(e,A){e=e|0;A=A|0;Xi(e,0,A);return}function vp(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,L=0,Q=0,D=0,z=0,W=0;W=h;h=h+4288|0;Q=W+8|0;L=W;D=4;z=Z2(40)|0;t[z>>2]=0;C=W+4152|0;I=W+4148|0;Z=W+4128|0;s=W+4112|0;c=W+16|0;d=0;l=re(24,e|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;e:do{if((f|0)!=1){if(!l){t[A>>2]=0;n=0;break}d=0;u=te(29,r|0,I|0,C|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)!=1){d=0;o=re(23,40)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)!=1){d=0;ke(7,Z|0,s|0,c|0,24,85);n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)!=1){d=0;r=re(25,e|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)!=1){s=Z+16|0;l=t[s>>2]|0;n=r;while(1){if(!n)break;d=0;ie(l|0,n|0,0)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){r=L6(t[f>>2]|0,z|0,D|0)|0;if(!r)aA(f|0,v|0);G=v}else r=-1;if((r|0)==1){y=0;B=s;E=o;p=u;n=G;o=15;break e}d=0;n=ie(86,e|0,n|0)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){r=L6(t[f>>2]|0,z|0,D|0)|0;if(!r)aA(f|0,v|0);G=v}else r=-1;if((r|0)==1){y=0;B=s;E=o;p=u;n=G;o=15;break e}}z=G6(188068,1,z|0,D|0)|0;D=G;d=0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){y=o;B=s;E=o;p=u;n=G;o=15}else{y=o;B=s;E=o;p=u;n=0;o=15}}else{y=0;B=0;E=o;p=u;n=G;o=15}}else{y=0;B=0;E=o;p=u;n=G;o=15}}else{y=0;B=0;E=o;p=u;n=G;o=15}}else{y=0;B=0;E=0;p=u;n=G;o=15}}else{y=0;B=0;E=0;p=0;n=G;o=15}}while(0);do{if((o|0)==15){e:while(1){A:do{if(!n){d=0;r=re(25,e|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}m=p+(t[I>>2]|0)|0;c=0;o=0;s=0;while(1){if(!r)break;d=0;n=ie(t[B>>2]|0,r|0,-1)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){l=L6(t[f>>2]|0,z|0,D|0)|0;if(!l)aA(f|0,v|0);G=v}else l=-1;if((l|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}if((n|0)==0?(i[(t[r+16>>2]|0)+119>>0]|0)==3:0){if(!o){d=0;t[L>>2]=s;te(30,m|0,137395,L|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}d=0;l=te(31,e|0,p|0,1)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}d=0;ne(53,l|0,137483,280,1)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}t[y+(s<<2)>>2]=l;c=1;s=s+1|0}else l=o;d=0;ne(54,e|0,r|0,l|0,Z|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}}else l=o;d=0;r=ie(86,e|0,r|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}o=l}d=0;r=re(25,e|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}l=10;u=y;b=E;w=E;g=E;while(1){if(!r){o=0;l=w;r=g;break A}d=0;n=ie(t[B>>2]|0,r|0,-1)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){o=L6(t[f>>2]|0,z|0,D|0)|0;if(!o)aA(f|0,v|0);G=v}else o=-1;if((o|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}if(!n){d=0;t[Q>>2]=s;te(30,m|0,137395,Q|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}d=0;k=te(31,e|0,p|0,1)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}d=0;ne(53,k|0,137483,280,1)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){n=L6(t[f>>2]|0,z|0,D|0)|0;if(!n)aA(f|0,v|0);G=v}else n=-1;if((n|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}d=0;ne(54,e|0,r|0,k|0,Z|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}if((s|0)==(l|0)){l=s<<1;d=0;o=ie(87,b|0,s<<3|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}n=o;b=o;w=o;f=o}else{n=u;f=g}t[n+(s<<2)>>2]=k;u=n;s=s+1|0;o=f}else o=g;d=0;r=ie(86,e|0,r|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}g=o}}else{o=1;c=0;u=y;s=0;l=E;r=E}}while(0);d=0;oe(108,Z|0);n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue}if((p|0)!=(C|0)){d=0;oe(105,p|0);n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue}}if(!o){d=0;n=ie(87,r|0,s<<2|0)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){r=L6(t[f>>2]|0,z|0,D|0)|0;if(!r)aA(f|0,v|0);G=v}else r=-1;if((r|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue}else{o=58;break}}t[A>>2]=0;n=0;while(1){if((n|0)>=(s|0))break;d=0;re(26,t[u+(n<<2)>>2]|0)|0;f=d;d=0;if((f|0)!=0&(v|0)!=0){r=L6(t[f>>2]|0,z|0,D|0)|0;if(!r)aA(f|0,v|0);G=v}else r=-1;if((r|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15;continue e}n=n+1|0}d=0;oe(105,l|0);n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,z|0,D|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){k=p;g=E;m=B;o=y;n=G;p=k;E=g;B=m;y=o;o=15}else{o=56;break}}if((o|0)==56){n=0;break}else if((o|0)==58){t[A>>2]=s;i[a>>0]=c;break}}}while(0);G2(z|0);h=W;return n|0}function gp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;if(!((e|0)!=0?(Gp(e)|0)!=0:0))e=98988;i=U2(e)|0;if((i|0)>=104){r=$F(i+25|0)|0;if(!r)r=0;else a=6}else a=6;if((a|0)==6){$1(r,e)|0;t[A>>2]=i}return r|0}function mp(e,A){e=e|0;A=A|0;hd(A,e,1)|0;return}function pp(e,A){e=e|0;A=A|0;var r=0;e=(t[e+16>>2]|0)+157|0;r=i[e>>0]|0;if((A|0)>=0)i[e>>0]=A;return r|0}function Ep(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t[A>>2]=r;t[A+4>>2]=r+4096;t[A+12>>2]=0;t[A+8>>2]=0;t[e>>2]=A;t[e+4>>2]=A;t[e+8>>2]=r;t[e+12>>2]=i;t[e+16>>2]=a;return}function Bp(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0;Ip(i,A);l=i+12|0;s=i+16|0;A=0;e:while(1){c=Zp(i)|0;if(!c)break;A=A+1|0;a=t[l>>2]|0;if(a|0)M5[a&63](c,r);f=ek(e,c)|0;while(1){if(!f)continue e;n=t[f>>2]&3;a=t[((n|0)==3?f:f+48|0)+40>>2]|0;if((a|0)==(c|0))a=t[((n|0)==2?f:f+-48|0)+40>>2]|0;if(!(Z5[t[s>>2]&127](a,-1)|0))Ip(i,a);f=Ak(e,f,c)|0}}return A|0}function yp(e){e=e|0;var A=0;e=t[(t[e>>2]|0)+12>>2]|0;while(1){if(!e)break;A=t[e+12>>2]|0;Cp(e);e=A}return}function Cp(e){e=e|0;G2(t[e>>2]|0);G2(e);return}function Ip(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;s=c+8|0;a=c;n=e+8|0;l=e+4|0;r=t[l>>2]|0;if((t[n>>2]|0)==(t[r+4>>2]|0)){r=t[r+12>>2]|0;do{if(!r){i=$F(16)|0;if(!i){nw(1,98969,a)|0;aA(188068,1)}t[i+8>>2]=t[l>>2];t[i+12>>2]=0;r=$F(4e6)|0;t[i>>2]=r;if(!r){nw(1,98969,s)|0;aA(188068,1)}else{t[i+4>>2]=r+4e6;t[(t[l>>2]|0)+12>>2]=i;f=i;break}}else f=r}while(0);t[l>>2]=f;t[n>>2]=t[f>>2]}Z5[t[e+16>>2]&127](A,1)|0;s=t[n>>2]|0;t[n>>2]=s+4;t[s>>2]=A;h=c;return}function Zp(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=e+8|0;A=t[a>>2]|0;r=e+4|0;i=t[r>>2]|0;if((A|0)==(t[i>>2]|0))if((i|0)==(t[e>>2]|0))A=0;else{A=t[i+8>>2]|0;t[r>>2]=A;A=t[A+4>>2]|0;t[a>>2]=A;n=4}else n=4;if((n|0)==4){A=A+-4|0;t[a>>2]=A;A=t[A>>2]|0}return A|0}function Gp(e){e=e|0;var A=0;e:while(1){A=e;e=e+1|0;A=i[A>>0]|0;switch(A<<24>>24){case 95:continue e;case 0:{e=1;break e}default:{}}if(!(M1(A&255)|0)){e=0;break}}return e|0}function Lp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;I=h;h=h+4272|0;B=I;y=4;C=Z2(40)|0;t[C>>2]=0;m=I+4144|0;p=I+4140|0;E=I+4120|0;f=I+4104|0;l=I+8|0;d=0;a=re(24,e|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){i=L6(t[n>>2]|0,C|0,y|0)|0;if(!i)aA(n|0,v|0);G=v}else i=-1;e:do{if((i|0)!=1)if(a){d=0;c=te(29,r|0,p|0,m|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)!=1){d=0;s=re(23,40)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)!=1){d=0;ke(7,E|0,f|0,l|0,24,85);i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)!=1){d=0;a=re(25,e|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)!=1){f=E+16|0;n=t[f>>2]|0;i=a;while(1){if(!i)break;d=0;ie(n|0,i|0,0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,C|0,y|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){g=f;k=s;w=c;i=G;s=14;break e}d=0;i=ie(86,e|0,i|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,C|0,y|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){g=f;k=s;w=c;i=G;s=14;break e}}C=G6(188068,1,C|0,y|0)|0;y=G;d=0;i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)==1){g=f;k=s;w=c;i=G;s=14}else{g=f;k=s;w=c;i=0;s=14}}else{g=0;k=s;w=c;i=G;s=14}}else{g=0;k=s;w=c;i=G;s=14}}else{g=0;k=s;w=c;i=G;s=14}}else{g=0;k=0;w=c;i=G;s=14}}else{r=0;i=0}else{g=0;k=0;w=0;i=G;s=14}}while(0);e:do{if((s|0)==14){A:while(1){if(i|0){d=0;oe(108,E|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue}d=0;oe(105,k|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue}if((w|0)==(m|0)){r=0;i=0;break e}d=0;oe(105,w|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue}else{s=19;break}}d=0;a=re(25,e|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){r=L6(t[i>>2]|0,C|0,y|0)|0;if(!r)aA(i|0,v|0);G=v}else r=-1;if((r|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue}b=w+(t[p>>2]|0)|0;f=10;c=k;i=0;s=k;u=k;while(1){if(!a)break;d=0;r=ie(t[g>>2]|0,a|0,-1)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){l=L6(t[n>>2]|0,C|0,y|0)|0;if(!l)aA(n|0,v|0);G=v}else l=-1;if((l|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}if(!r){d=0;t[B>>2]=i;te(30,b|0,137395,B|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,C|0,y|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}d=0;o=te(31,e|0,w|0,1)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,C|0,y|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}d=0;ne(53,o|0,137483,280,1)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,C|0,y|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}d=0;ne(54,e|0,a|0,o|0,E|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,C|0,y|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}if((i|0)==(f|0)){f=i<<1;d=0;l=ie(87,s|0,i<<3|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,C|0,y|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}n=l;s=l;r=l}else{n=c;r=u}t[n+(i<<2)>>2]=o;i=i+1|0;c=n;l=r}else l=u;d=0;a=ie(86,e|0,a|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){n=L6(t[r>>2]|0,C|0,y|0)|0;if(!n)aA(r|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue A}u=l}d=0;oe(108,E|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){a=L6(t[r>>2]|0,C|0,y|0)|0;if(!a)aA(r|0,v|0);G=v}else a=-1;if((a|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue}d=0;r=ie(87,u|0,i<<2|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,C|0,y|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14;continue}if((w|0)==(m|0))break e;d=0;oe(105,w|0);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,C|0,y|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){u=w;b=k;s=g;i=G;w=u;k=b;g=s;s=14}else{s=39;break}}if((s|0)==19){r=0;i=0;break}else if((s|0)==39)break}}while(0);t[A>>2]=i;G2(C|0);h=I;return r|0}function Qp(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=0;a=sd(e)|0;while(1){if(!a)break;i=Ow(A,a)|0;while(1){if(!i)break;if(hd(e,t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,0)|0){uk(e,i,1)|0;r=r+1|0}i=qw(A,i)|0}a=cd(e,a)|0}return r|0}function Dp(e){e=e|0;e=Pd(e,98993,0)|0;if(!e)ge(98998,99001,529,99010);else return t[e+8>>2]|0;return 0}function zp(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;m=h;h=h+4320|0;v=m+24|0;d=m+8|0;k=m;g=m+4184|0;w=m+4160|0;a=m+40|0;if(gk(e)|0){_d(e,0,99019,-12,0);_d(e,1,99031,16,0);b=gp(r,a,g)|0;c=Wp(e)|0;o=$F((gk(c)|0)<<2)|0;Ep(w,m+4144|0,m+48|0,24,88);f=sd(c)|0;u=w+16|0;l=b+(t[a>>2]|0)|0;s=t[15712]|0;r=0;while(1){if(!f)break;if(!(Z5[t[u>>2]&127](f,-1)|0)){t[k>>2]=r;T4(l,99933,k)|0;p=Rv(c,b,1)|0;E=Rv(e,b,1)|0;Sd(E,99019,12,0)|0;i[(Pd(E,99019,0)|0)+8>>0]=1;a=Bp(c,f,p,w)|0;Fp(p,E);n=Mp(E)|0;Vp(e,E);t[o+(r<<2)>>2]=E;Ed(c,p)|0;if(0){t[d>>2]=r;t[d+4>>2]=a;t[d+8>>2]=n;a3(s,99043,d)|0}r=r+1|0}f=cd(c,f)|0}if(0){d=gk(e)|0;p=mk(e)|0;E=Mk(e)|0;t[v>>2]=d;t[v+4>>2]=p;t[v+8>>2]=r;t[v+12>>2]=E;a3(s,99073,v)|0}vk(c)|0;qd(e,0,99019);qd(e,1,99031);yp(w);a=AM(o,r<<2)|0;if((b|0)!=(g|0))G2(b)}else{a=0;r=0}t[A>>2]=r;h=m;return a|0}function Wp(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;i[f>>0]=i[18596]|0;i[f+1>>0]=i[18597]|0;i[f+2>>0]=i[18598]|0;i[f+3>>0]=i[18599]|0;f=hk(99120,f,0)|0;xp(f,e);A=sd(e)|0;while(1){if(!A)break;if(!(t[(Pd(A,99031,0)|0)+12>>2]|0)){n=gd(f,Mk(A)|0,1)|0;Sd(n,99031,16,1)|0;t[(t[n+16>>2]|0)+12>>2]=A;t[(Pd(A,99031,0)|0)+12>>2]=n}A=cd(e,A)|0}r=sd(e)|0;while(1){if(!r)break;a=t[(Pd(r,99031,0)|0)+12>>2]|0;A=Ow(e,r)|0;while(1){if(!A)break;n=t[(Pd(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,99031,0)|0)+12>>2]|0;do{if((n|0)!=(a|0))if(n>>>0>a>>>0){lk(f,a,n,0,1)|0;break}else{lk(f,n,a,0,1)|0;break}}while(0);A=qw(e,A)|0}r=cd(e,r)|0}h=l;return f|0}function Yp(e,A){e=e|0;A=A|0;var r=0;e=(t[e+16>>2]|0)+8|0;r=i[e>>0]|0;if((A|0)>=0)i[e>>0]=A;return r|0}function Fp(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;i=sd(e)|0;while(1){if(!i)break;a=t[(t[i+16>>2]|0)+12>>2]|0;e:do{if((t[a>>2]&3|0)==1)hd(A,a,1)|0;else{r=sd(a)|0;while(1){if(!r)break e;hd(A,r,1)|0;r=cd(a,r)|0}}}while(0);i=cd(e,i)|0}return}function Mp(e){e=e|0;return Qp(e,t[e+60>>2]|0)|0}function Vp(e,A){e=e|0;A=A|0;Np(e,A,0);return}function Np(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0,n=0;n=(r|0)==0;e=xv(e)|0;while(1){if(!e)break;if((i[(Pd(e,99019,0)|0)+8>>0]|0)==0?(t=Rp(e,A,r)|0,t|0):0){if(n)a=(y1(Mk(e)|0,108006,7)|0)==0;else a=1;Np(e,t,a&1)}e=Jv(e)|0}return}function Rp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=0;n=sd(e)|0;while(1){if(!n)break;a=gd(A,Mk(n)|0,0)|0;if(a){if(!i)i=Rv(A,Mk(e)|0,1)|0;hd(i,a,1)|0}n=cd(e,n)|0}if((r|0)!=0&(i|0)==0)i=Rv(A,Mk(e)|0,1)|0;if(i|0?(Qp(i,e)|0,jw(e,i)|0,(y1(Mk(i)|0,108006,7)|0)==0):0)t[(Sd(i,98993,12,0)|0)+8>>2]=e;return i|0}function xp(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;f=h;h=h+16|0;n=f;r=xv(A)|0;i=t[15712]|0;while(1){if(!r)break;e:do{if(!(y1(Mk(r)|0,108006,7)|0)){a=gd(e,Mk(r)|0,1)|0;Sd(a,99031,16,1)|0;t[(t[a+16>>2]|0)+12>>2]=r;A=sd(r)|0;while(1){if(!A)break e;if(t[(Pd(A,99031,0)|0)+12>>2]|0){c=Mk(A)|0;s=Mk(r)|0;l=Mk(t[(Pd(A,99031,0)|0)+12>>2]|0)|0;t[n>>2]=c;t[n+4>>2]=s;t[n+8>>2]=l;a3(i,99123,n)|0}t[(Pd(A,99031,0)|0)+12>>2]=a;A=cd(r,A)|0}}else xp(e,r)}while(0);r=Jv(r)|0}h=f;return}function Jp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,t=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0.0;b=+c[e>>3];l=~~(b+(b>=0.0?.5:-.5));b=+c[e+8>>3];e=~~(b+(b>=0.0?.5:-.5));b=+c[A>>3];n=~~(b+(b>=0.0?.5:-.5));b=+c[A+8>>3];t=~~(b+(b>=0.0?.5:-.5));o=n-l|0;f=((o|0)>-1?o:0-o|0)<<1;o=o>>31|1;u=t-e|0;s=((u|0)>-1?u:0-u|0)<<1;u=u>>31|1;e:do{if((f|0)>(s|0)){a=0-f|0;i=s-(f>>1)|0;A=l;while(1){tV(r,A,e);if((A|0)==(n|0))break e;l=(i|0)>-1;i=i+s+(l?a:0)|0;A=A+o|0;e=(l?u:0)+e|0}}else{a=0-s|0;i=l;A=f-(s>>1)|0;while(1){tV(r,i,e);if((e|0)==(t|0))break e;s=(A|0)>-1;i=(s?o:0)+i|0;A=A+f+(s?a:0)|0;e=e+u|0}}}while(0);return}function Hp(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+16|0;c=u;s=u+4|0;do{if((e|0)<1)r=0;else{a=i+16|0;if((t[a>>2]|0)>>>0<4){r=Pp(e,A,r,i)|0;break}o=$F(e<<5)|0;r=0;while(1){if((r|0)==(e|0))break;n=t[A+(r<<2)>>2]|0;Xx(n);f=o+(r<<5)|0;n=(t[n+16>>2]|0)+16|0;t[f>>2]=t[n>>2];t[f+4>>2]=t[n+4>>2];t[f+8>>2]=t[n+8>>2];t[f+12>>2]=t[n+12>>2];t[f+16>>2]=t[n+16>>2];t[f+20>>2]=t[n+20>>2];t[f+24>>2]=t[n+24>>2];t[f+28>>2]=t[n+28>>2];r=r+1|0}if((t[a>>2]|0)==4){f=i+28|0;e:do{if(t[f>>2]&2|0){a=i+24|0;t[a>>2]=KF(e<<2)|0;r=0;while(1){if((r|0)==(e|0))break e;n=Hw(t[A+(r<<2)>>2]|0,99190)|0;if(n|0?(t[c>>2]=s,n=(V3(n,137395,c)|0)>0,l=t[s>>2]|0,n&(l|0)>-1):0)t[(t[a>>2]|0)+(r<<2)>>2]=l;r=r+1|0}}}while(0);r=Xp(e,o,i)|0;if(t[f>>2]&2)G2(t[i+24>>2]|0)}else r=0;G2(o)}}while(0);h=u;return r|0}function Pp(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0.0,Y=0.0,F=0.0,M=0.0;z=h;h=h+144|0;Z=z+136|0;I=z+64|0;D=z+48|0;p=z+40|0;m=z;g=z+120|0;B=z+104|0;G=z+96|0;L=t[a+20>>2]|0;t[B>>2]=0;t[B+4>>2]=0;t[B+8>>2]=0;t[B+12>>2]=0;e:do{if((e|0)>=1){b=(L|0)==0;Q=t[15712]|0;w=g+4|0;k=g+8|0;d=g+12|0;y=B+4|0;E=B+8|0;C=B+12|0;u=0;n=0;while(1){if((u|0)==(e|0))break;v=t[A+(u<<2)>>2]|0;Xx(v);if(!b?(i[L+u>>0]|0)!=0:0){o=t[v+16>>2]|0;W=+c[o+16>>3];f=~~(W+(W>=0.0?.5:-.5));t[g>>2]=f;W=+c[o+24>>3];l=~~(W+(W>=0.0?.5:-.5));t[w>>2]=l;W=+c[o+32>>3];s=~~(W+(W>=0.0?.5:-.5));t[k>>2]=s;W=+c[o+40>>3];o=~~(W+(W>=0.0?.5:-.5));t[d>>2]=o;if(!n){t[B>>2]=t[g>>2];t[B+4>>2]=t[g+4>>2];t[B+8>>2]=t[g+8>>2];t[B+12>>2]=t[g+12>>2]}else{t[B>>2]=t[((t[B>>2]|0)>(f|0)?g:B)>>2];t[y>>2]=t[((t[y>>2]|0)>(l|0)?g:B)+4>>2];t[E>>2]=t[((t[E>>2]|0)<(s|0)?g:B)+8>>2];t[C>>2]=t[((t[C>>2]|0)<(o|0)?g:B)+12>>2]}n=n+1|0}if(0>2){o=Mk(v)|0;v=t[v+16>>2]|0;M=+c[v+16>>3];F=+c[v+24>>3];Y=+c[v+32>>3];W=+c[v+40>>3];t[m>>2]=o;c[m+8>>3]=M;c[m+16>>3]=F;c[m+24>>3]=Y;c[m+32>>3]=W;a3(Q,99257,m)|0}u=u+1|0}k=$F(e<<5)|0;n=0;while(1){if((n|0)==(e|0))break;m=k+(n<<5)|0;g=(t[(t[A+(n<<2)>>2]|0)+16>>2]|0)+16|0;t[m>>2]=t[g>>2];t[m+4>>2]=t[g+4>>2];t[m+8>>2]=t[g+8>>2];t[m+12>>2]=t[g+12>>2];t[m+16>>2]=t[g+16>>2];t[m+20>>2]=t[g+20>>2];t[m+24>>2]=t[g+24>>2];t[m+28>>2]=t[g+28>>2];n=n+1|0}b=a+8|0;w=Up(e,k,t[b>>2]|0)|0;if(0){t[p>>2]=w;a3(Q,99285,p)|0}if((w|0)>=1){u=(L|0)!=0;if(u){f=((t[E>>2]|0)+(t[B>>2]|0)|0)/2|0;n=((t[C>>2]|0)+(t[y>>2]|0)|0)/2|0}else{f=0;n=0}t[G+4>>2]=n;t[G>>2]=f;o=KF(e<<4)|0;s=a+16|0;n=0;while(1){if((n|0)>=(e|0))break;f=t[A+(n<<2)>>2]|0;l=o+(n<<4)|0;t[o+(n<<4)+12>>2]=n;if((t[s>>2]|0)==3){B=(t[f+16>>2]|0)+16|0;y=t[b>>2]|0;C=Mk(f)|0;t[I>>2]=t[B>>2];t[I+4>>2]=t[B+4>>2];t[I+8>>2]=t[B+8>>2];t[I+12>>2]=t[B+12>>2];t[I+16>>2]=t[B+16>>2];t[I+20>>2]=t[B+20>>2];t[I+24>>2]=t[B+24>>2];t[I+28>>2]=t[B+28>>2];t[Z>>2]=t[G>>2];t[Z+4>>2]=t[G+4>>2];Tp(I,l,w,y,Z,C)}else{t[Z>>2]=t[G>>2];t[Z+4>>2]=t[G+4>>2];Op(r,f,l,w,a,Z)}n=n+1|0}l=KF(e<<2)|0;n=0;while(1){if((n|0)>=(e|0))break;t[l+(n<<2)>>2]=o+(n<<4);n=n+1|0}_4(l,e,4,89);s=$M()|0;n=KF(e<<3)|0;A:do{if(u){f=0;while(1){if((f|0)>=(e|0)){f=0;break}if(i[L+f>>0]|0){r=t[l+(f<<2)>>2]|0;a=n+(t[r+12>>2]<<3)|0;t[Z>>2]=t[G>>2];t[Z+4>>2]=t[G+4>>2];qp(r,s,a,Z)}f=f+1|0}while(1){if((f|0)>=(e|0))break A;if(!(i[L+f>>0]|0)){G=t[l+(f<<2)>>2]|0;Kp(f,G,s,n+(t[G+12>>2]<<3)|0,w,t[b>>2]|0,k)}f=f+1|0}}else{f=0;while(1){if((f|0)>=(e|0))break A;L=t[l+(f<<2)>>2]|0;Kp(f,L,s,n+(t[L+12>>2]<<3)|0,w,t[b>>2]|0,k);f=f+1|0}}}while(0);G2(l);f=0;while(1){if((f|0)>=(e|0))break;G2(t[o+(f<<4)+4>>2]|0);f=f+1|0}G2(o);rV(s);G2(k);if(0>1){f=0;while(1){if((f|0)>=(e|0))break e;G=t[n+(f<<3)>>2]|0;L=t[n+(f<<3)+4>>2]|0;t[D>>2]=f;t[D+4>>2]=G;t[D+8>>2]=L;a3(Q,99301,D)|0;f=f+1|0}}}else n=0}else n=0}while(0);h=z;return n|0}function Xp(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0.0,l=0,s=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0;C=h;h=h+16|0;n=C;B=KF(e<<3)|0;a=t[r+4>>2]|0;y=r+28|0;i=(a|0)>0;do{if(!(t[y>>2]&1))if(i){s=1;E=(e+-1+a|0)/(a|0)|0;break}else{a=~~+H(+ +D(+ +(e|0)));s=1;E=(e+-1+a|0)/(a|0)|0;break}else if(i){s=0;E=a;a=(e+-1+a|0)/(a|0)|0;break}else{a=~~+H(+ +D(+ +(e|0)));s=0;E=a;a=(e+-1+a|0)/(a|0)|0;break}}while(0);if(0){p=t[15712]|0;t[n>>2]=s|0?99196:99206;t[n+4>>2]=E;t[n+8>>2]=a;a3(p,99219,n)|0}g=KF((a<<3)+8|0)|0;m=KF((E<<3)+8|0)|0;p=KF(e*24|0)|0;l=r+8|0;i=0;n=p;while(1){if((i|0)>=(e|0))break;w=+c[A+(i<<5)+8>>3];b=+c[A+(i<<5)+24>>3];k=+((t[l>>2]|0)>>>0);c[n>>3]=+c[A+(i<<5)+16>>3]-+c[A+(i<<5)>>3]+k;c[n+8>>3]=b-w+k;t[n+16>>2]=i;i=i+1|0;n=n+24|0}v=KF(e<<2)|0;i=0;while(1){if((i|0)>=(e|0))break;t[v+(i<<2)>>2]=p+(i*24|0);i=i+1|0}i=t[r+24>>2]|0;if(!i){if(!(t[y>>2]&64))_4(v,e,4,91)}else{t[47056]=i;_4(v,e,4,90)}d=(s|0)==0;i=0;n=0;l=0;while(1){if((l|0)>=(e|0)){f=0.0;i=0;break}s=t[v+(l<<2)>>2]|0;r=g+(n<<3)|0;k=+c[r>>3];w=+c[s>>3];c[r>>3]=k>w?k:w;r=m+(i<<3)|0;w=+c[r>>3];k=+c[s+8>>3];c[r>>3]=w>k?w:k;if(d){i=i+1|0;r=(i|0)==(E|0);i=r?0:i;n=n+(r&1)|0}else{n=n+1|0;r=(n|0)==(a|0);i=i+(r&1)|0;n=r?0:n}l=l+1|0}while(1){if((i|0)>(a|0)){f=0.0;i=E;break}r=g+(i<<3)|0;k=+c[r>>3];c[r>>3]=f;f=k+f;i=i+1|0}while(1){if((i|0)<=0)break;r=i+-1|0;k=+c[m+(r<<3)>>3];c[m+(i<<3)>>3]=f;f=k+f;i=r}c[m>>3]=f;i=0;n=0;r=0;while(1){if((r|0)>=(e|0))break;s=t[(t[v+(r<<2)>>2]|0)+16>>2]|0;f=+c[A+(s<<5)>>3];o=-f;w=+c[A+(s<<5)+8>>3];k=-w;u=+c[A+(s<<5)+16>>3];b=+c[A+(s<<5)+24>>3];l=t[y>>2]|0;do{if(!(l&4))if(!(l&8)){f=(o-u+ +c[g+(n<<3)>>3]+ +c[g+(n+1<<3)>>3])*.5;break}else{f=f-u+ +c[g+(n+1<<3)>>3];break}else f=+c[g+(n<<3)>>3]}while(0);t[B+(s<<3)>>2]=~~f;do{if(!(l&16))if(!(l&32)){f=(k-b+ +c[m+(i<<3)>>3]+ +c[m+(i+1<<3)>>3])*.5;break}else{f=+c[m+(i+1<<3)>>3];break}else f=w-b+ +c[m+(i<<3)>>3]}while(0);t[B+(s<<3)+4>>2]=~~f;if(d){i=i+1|0;s=(i|0)==(E|0);i=s?0:i;n=n+(s&1)|0}else{n=n+1|0;s=(n|0)==(a|0);i=i+(s&1)|0;n=s?0:n}r=r+1|0}G2(p);G2(v);G2(g);G2(m);h=C;return B|0}function Sp(e,A){e=e|0;A=A|0;var r=0;r=t[47056]|0;e=t[r+(t[(t[e>>2]|0)+16>>2]<<2)>>2]|0;A=t[r+(t[(t[A>>2]|0)+16>>2]<<2)>>2]|0;return((e|0)>(A|0)?1:((e|0)<(A|0))<<31>>31)|0}function jp(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;e=t[e>>2]|0;A=t[A>>2]|0;i=+c[e>>3]+ +c[e+8>>3];r=+c[A>>3]+ +c[A+8>>3];return(ir)<<31>>31)|0}function Up(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0.0,b=0.0,w=0,k=0,d=0,v=0;v=h;h=h+96|0;k=v+80|0;d=v+48|0;w=v+8|0;o=v;s=(e*100|0)+-1|0;i=+(r<<1|0);u=0.0;b=0.0;r=0;while(1){if((r|0)>=(e|0))break;l=+c[A+(r<<5)+16>>3]-+c[A+(r<<5)>>3]+i;f=+c[A+(r<<5)+24>>3]-+c[A+(r<<5)+8>>3]+i;u=u-l-f;b=b-f*l;r=r+1|0}f=+(s|0);l=u*u-f*4.0*b;if(!(l<0.0)){i=+D(+l);n=f*2.0;a=(i-u)/n;n=(-u-i)/n;r=~~a;r=(r|0)==0?1:r;if(0>2){o=t[15712]|0;G3(99444,27,1,o)|0;c[w>>3]=f;c[w+8>>3]=u;c[w+16>>3]=b;c[w+24>>3]=l;c[w+32>>3]=i;a3(o,99472,w)|0;t[d>>2]=r;c[d+8>>3]=a;t[d+16>>2]=~~n;c[d+24>>3]=n;a3(o,99498,d)|0;c[k>>3]=(a*f+u)*a+b;c[k+8>>3]=(n*f+u)*n+b;a3(o,99520,k)|0}}else{c[o>>3]=l;nw(1,99417,o)|0;r=-1}h=v;return r|0}function Tp(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0.0,E=0.0;m=h;h=h+32|0;g=m+16|0;v=m;w=+c[e>>3];k=+c[e+8>>3];u=+c[e+16>>3];b=+c[e+24>>3];d=$M()|0;l=t[a>>2]|0;e=l-i|0;s=t[a+4>>2]|0;f=s-i|0;l=i-~~(w+(w>=0.0?.5:-.5))+l+~~(u+(u>=0.0?.5:-.5))|0;s=i-~~(k+(k>=0.0?.5:-.5))+s+~~(b+(b>=0.0?.5:-.5))|0;if((e|0)>-1)a=(e|0)/(r|0)|0;else a=((e+1|0)/(r|0)|0)+-1|0;if((f|0)>-1)o=(f|0)/(r|0)|0;else o=((f+1|0)/(r|0)|0)+-1|0;if((l|0)>-1)l=(l|0)/(r|0)|0;else l=((l+1|0)/(r|0)|0)+-1|0;if((s|0)>-1)f=(s|0)/(r|0)|0;else f=((s+1|0)/(r|0)|0)+-1|0;while(1){if((a|0)>(l|0))break;else e=o;while(1){if((e|0)>(f|0))break;tV(d,a,e);e=e+1|0}a=a+1|0}s=A+4|0;t[s>>2]=sV(d)|0;l=lV(d)|0;o=A+8|0;t[o>>2]=l;E=+(i<<1|0);p=+(r|0);f=~~+H(+((u+E-w)/p));e=~~+H(+((b+E-k)/p));t[A>>2]=e+f;e:do{if(0>2){a=t[15712]|0;t[v>>2]=n;t[v+4>>2]=l;t[v+8>>2]=f;t[v+12>>2]=e;a3(a,99376,v)|0;e=0;while(1){if((e|0)>=(t[o>>2]|0))break e;n=t[s>>2]|0;v=t[n+(e<<3)+4>>2]|0;t[g>>2]=t[n+(e<<3)>>2];t[g+4>>2]=v;a3(a,99403,g)|0;e=e+1|0}}}while(0);rV(d);h=m;return}function Op(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0.0,P=0.0;x=h;h=h+128|0;D=x+112|0;Q=x+104|0;R=x+16|0;N=x;W=x+64|0;Y=x+56|0;C=x+40|0;I=x+96|0;y=x+88|0;p=x+24|0;E=x+80|0;B=x+72|0;M=t[a+8>>2]|0;z=t[a+12>>2]|0;G=(e|0)==0?A:e;V=$M()|0;F=A+16|0;Z=t[F>>2]|0;g=+c[Z+16>>3];L=(t[n>>2]|0)-~~(g+(g>=0.0?.5:-.5))|0;g=+c[Z+24>>3];Z=(t[n+4>>2]|0)-~~(g+(g>=0.0?.5:-.5))|0;e:do{if((t[a+16>>2]|0)==1){p=$F((gk(A)|0)<<2)|0;e=0;n=sd(A)|0;while(1){if(!n)break;B=n+16|0;t[p+(e<<2)>>2]=t[(t[B>>2]|0)+112>>2];t[(t[B>>2]|0)+112>>2]=0;e=e+1|0;n=cd(A,n)|0}b=L-M|0;w=Z-M|0;k=L+M|0;d=Z+M|0;u=1;while(1){e=t[F>>2]|0;if((u|0)>(t[e+180>>2]|0))break;o=t[(t[e+184>>2]|0)+(u<<2)>>2]|0;f=t[o+16>>2]|0;g=+c[f+16>>3];e=~~(g+(g>=0.0?.5:-.5));g=+c[f+24>>3];n=~~(g+(g>=0.0?.5:-.5));g=+c[f+32>>3];a=~~(g+(g>=0.0?.5:-.5));g=+c[f+40>>3];f=~~(g+(g>=0.0?.5:-.5));A:do{if((a|0)>(e|0)&(f|0)>(n|0)){e=b+e|0;l=w+n|0;a=k+a|0;s=d+f|0;if((e|0)>-1)n=(e|0)/(i|0)|0;else n=((e+1|0)/(i|0)|0)+-1|0;if((l|0)>-1)l=(l|0)/(i|0)|0;else l=((l+1|0)/(i|0)|0)+-1|0;if((a|0)>-1)f=(a|0)/(i|0)|0;else f=((a+1|0)/(i|0)|0)+-1|0;if((s|0)>-1)a=(s|0)/(i|0)|0;else a=((s+1|0)/(i|0)|0)+-1|0;while(1){if((n|0)>(f|0))break;else e=l;while(1){if((e|0)>(a|0))break;tV(V,n,e);e=e+1|0}n=n+1|0}e=sd(o)|0;while(1){if(!e)break A;t[(t[e+16>>2]|0)+212>>2]=o;e=cd(o,e)|0}}}while(0);u=u+1|0}d=C+8|0;v=W+4|0;g=+(M|0);m=Y+4|0;k=I+4|0;w=y+4|0;b=sd(A)|0;while(1){if(!b)break;Ix(C,b);P=+c[C>>3];J=+c[d>>3];o=L+~~(P+(P>=0.0?.5:-.5))|0;t[W>>2]=o;u=Z+~~(J+(J>=0.0?.5:-.5))|0;t[v>>2]=u;n=b+16|0;e=t[n>>2]|0;A:do{if(!(t[e+212>>2]|0)){t[Y>>2]=~~((+c[e+96>>3]+ +c[e+88>>3])*.5+g);t[m>>2]=~~(+c[e+80>>3]*.5+g);t[Q>>2]=t[W>>2];t[Q+4>>2]=t[W+4>>2];t[D>>2]=t[Y>>2];t[D+4>>2]=t[Y+4>>2];eE(I,Q,D);e=t[I>>2]|0;a=t[k>>2]|0;t[Q>>2]=t[W>>2];t[Q+4>>2]=t[W+4>>2];t[D>>2]=t[Y>>2];t[D+4>>2]=t[Y+4>>2];AE(y,Q,D);f=t[y>>2]|0;l=t[w>>2]|0;if((e|0)>-1)n=(e|0)/(i|0)|0;else n=((e+1|0)/(i|0)|0)+-1|0;if((a|0)>-1)s=(a|0)/(i|0)|0;else s=((a+1|0)/(i|0)|0)+-1|0;if((f|0)>-1)f=(f|0)/(i|0)|0;else f=((f+1|0)/(i|0)|0)+-1|0;if((l|0)>-1)a=(l|0)/(i|0)|0;else a=((l+1|0)/(i|0)|0)+-1|0;while(1){if((n|0)>(f|0))break;else e=s;while(1){if((e|0)>(a|0))break;tV(V,n,e);e=e+1|0}n=n+1|0}if((o|0)>-1)e=(o|0)/(i|0)|0;else e=((o+1|0)/(i|0)|0)+-1|0;t[W>>2]=e;if((u|0)>-1)e=(u|0)/(i|0)|0;else e=((u+1|0)/(i|0)|0)+-1|0;t[v>>2]=e;e=Ow(G,b)|0;while(1){if(!e)break A;t[D>>2]=t[W>>2];t[D+4>>2]=t[W+4>>2];rE(e,D,V,L,Z,i,z);e=qw(G,e)|0}}else{if((o|0)>-1)e=(o|0)/(i|0)|0;else e=((o+1|0)/(i|0)|0)+-1|0;t[W>>2]=e;if((u|0)>-1)e=(u|0)/(i|0)|0;else e=((u+1|0)/(i|0)|0)+-1|0;t[v>>2]=e;e=Ow(G,b)|0;while(1){if(!e)break A;if((t[(t[n>>2]|0)+212>>2]|0)!=(t[(t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)){t[D>>2]=t[W>>2];t[D+4>>2]=t[W+4>>2];rE(e,D,V,L,Z,i,z)}e=qw(G,e)|0}}}while(0);b=cd(A,b)|0}e=0;n=sd(A)|0;while(1){if(!n)break;t[(t[n+16>>2]|0)+112>>2]=t[p+(e<<2)>>2];e=e+1|0;n=cd(A,n)|0}G2(p)}else{d=p+8|0;v=W+4|0;g=+(M|0);m=Y+4|0;k=E+4|0;w=B+4|0;b=sd(A)|0;while(1){if(!b)break e;Ix(p,b);J=+c[p>>3];P=+c[d>>3];o=L+~~(J+(J>=0.0?.5:-.5))|0;t[W>>2]=o;u=Z+~~(P+(P>=0.0?.5:-.5))|0;t[v>>2]=u;e=t[b+16>>2]|0;t[Y>>2]=~~((+c[e+96>>3]+ +c[e+88>>3])*.5+g);t[m>>2]=~~(+c[e+80>>3]*.5+g);t[Q>>2]=t[W>>2];t[Q+4>>2]=t[W+4>>2];t[D>>2]=t[Y>>2];t[D+4>>2]=t[Y+4>>2];eE(E,Q,D);e=t[E>>2]|0;a=t[k>>2]|0;t[Q>>2]=t[W>>2];t[Q+4>>2]=t[W+4>>2];t[D>>2]=t[Y>>2];t[D+4>>2]=t[Y+4>>2];AE(B,Q,D);f=t[B>>2]|0;l=t[w>>2]|0;if((e|0)>-1)n=(e|0)/(i|0)|0;else n=((e+1|0)/(i|0)|0)+-1|0;if((a|0)>-1)s=(a|0)/(i|0)|0;else s=((a+1|0)/(i|0)|0)+-1|0;if((f|0)>-1)f=(f|0)/(i|0)|0;else f=((f+1|0)/(i|0)|0)+-1|0;if((l|0)>-1)a=(l|0)/(i|0)|0;else a=((l+1|0)/(i|0)|0)+-1|0;while(1){if((n|0)>(f|0))break;else e=s;while(1){if((e|0)>(a|0))break;tV(V,n,e);e=e+1|0}n=n+1|0}if((o|0)>-1)e=(o|0)/(i|0)|0;else e=((o+1|0)/(i|0)|0)+-1|0;t[W>>2]=e;if((u|0)>-1)e=(u|0)/(i|0)|0;else e=((u+1|0)/(i|0)|0)+-1|0;t[v>>2]=e;e=Ow(G,b)|0;while(1){if(!e)break;t[D>>2]=t[W>>2];t[D+4>>2]=t[W+4>>2];rE(e,D,V,L,Z,i,z);e=qw(G,e)|0}b=cd(A,b)|0}}}while(0);f=r+4|0;t[f>>2]=sV(V)|0;l=r+8|0;t[l>>2]=lV(V)|0;n=t[F>>2]|0;J=+(M<<1|0);P=+(i|0);e=~~+H(+((+c[n+32>>3]+J-+c[n+16>>3])/P));n=~~+H(+((+c[n+40>>3]+J-+c[n+24>>3])/P));t[r>>2]=n+e;e:do{if(0>2){a=t[15712]|0;r=Mk(A)|0;A=t[l>>2]|0;t[N>>2]=r;t[N+4>>2]=A;t[N+8>>2]=e;t[N+12>>2]=n;a3(a,99376,N)|0;e=0;while(1){if((e|0)>=(t[l>>2]|0))break e;A=t[f>>2]|0;N=t[A+(e<<3)+4>>2]|0;t[R>>2]=t[A+(e<<3)>>2];t[R+4>>2]=N;a3(a,99403,R)|0;e=e+1|0}}}while(0);rV(V);h=x;return}function _p(e,A){e=e|0;A=A|0;return(t[t[A>>2]>>2]|0)-(t[t[e>>2]>>2]|0)|0}function qp(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0;s=h;h=h+32|0;f=s+16|0;l=s;c=t[e+4>>2]|0;n=t[e+8>>2]|0;t[r>>2]=0-(t[i>>2]|0);a=r+4|0;t[a>>2]=0-(t[i+4>>2]|0);e=0;i=c;while(1){if((e|0)>=(n|0))break;t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];iV(A,f);e=e+1|0;i=i+8|0}if(0>1){c=t[15712]|0;A=t[r>>2]|0;r=t[a>>2]|0;t[l>>2]=n;t[l+4>>2]=A;t[l+8>>2]=r;a3(c,99350,l)|0}h=s;return}function Kp(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0.0,u=0.0,b=0.0,h=0.0,w=0.0,k=0.0;s=t[A+12>>2]|0;o=+c[f+(s<<5)>>3];u=+c[f+(s<<5)+8>>3];b=+c[f+(s<<5)+16>>3];h=+c[f+(s<<5)+24>>3];if(!((e|0)==0?(k=+(n<<1|0),w=+(a|0),($p((~~+H(+((k-o+b)/w))|0)/-2|0,(~~+H(+((k-u+h)/w))|0)/-2|0,A,r,i,a,f)|0)!=0):0))l=3;e:do{if((l|0)==3?($p(0,0,A,r,i,a,f)|0)==0:0)if((~~+H(+(b-o))|0)<(~~+H(+(h-u))|0)){s=1;while(1){l=0-s|0;e=0;while(1){if((e|0)<=(l|0)){n=l;break}if($p(l,e,A,r,i,a,f)|0)break e;e=e+-1|0}while(1){if((n|0)>=(s|0))break;if($p(n,e,A,r,i,a,f)|0)break e;n=n+1|0}while(1){if((e|0)>=(s|0))break;if($p(n,e,A,r,i,a,f)|0)break e;e=e+1|0}while(1){if((n|0)<=(l|0))break;if($p(n,e,A,r,i,a,f)|0)break e;n=n+-1|0}while(1){if((e|0)<=0)break;if(!($p(n,e,A,r,i,a,f)|0))e=e+-1|0;else break e}s=s+1|0}}else{s=1;while(1){l=0-s|0;e=0;while(1){if((e|0)>=(s|0)){n=l;break}if($p(e,l,A,r,i,a,f)|0)break e;e=e+1|0}while(1){if((n|0)>=(s|0))break;if($p(e,n,A,r,i,a,f)|0)break e;n=n+1|0}while(1){if((e|0)<=(l|0))break;if($p(e,n,A,r,i,a,f)|0)break e;e=e+-1|0}while(1){if((n|0)<=(l|0))break;if($p(e,n,A,r,i,a,f)|0)break e;n=n+-1|0}while(1){if((e|0)>=0)break;if(!($p(e,n,A,r,i,a,f)|0))e=e+1|0;else break e}s=s+1|0}}}while(0);return}function $p(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0.0,B=0.0;g=h;h=h+48|0;d=g+32|0;v=g+8|0;k=g;o=r+4|0;b=t[r+8>>2]|0;w=k+4|0;l=t[o>>2]|0;s=0;while(1){if((s|0)>=(b|0)){u=5;break}p=l;m=t[p+4>>2]|0;t[k>>2]=(t[p>>2]|0)+e;t[w>>2]=m+A;t[d>>2]=t[k>>2];t[d+4>>2]=t[k+4>>2];if(nV(i,d)|0){l=0;break}l=l+8|0;s=s+1|0}if((u|0)==5){r=t[r+12>>2]|0;B=+c[f+(r<<5)>>3];E=+c[f+(r<<5)+8>>3];t[a>>2]=(P(n,e)|0)-~~(B+(B>=0.0?.5:-.5));r=a+4|0;t[r>>2]=(P(n,A)|0)-~~(E+(E>=0.0?.5:-.5));l=t[o>>2]|0;s=0;while(1){if((s|0)>=(b|0))break;m=l;p=t[m+4>>2]|0;t[k>>2]=(t[m>>2]|0)+e;t[w>>2]=p+A;t[d>>2]=t[k>>2];t[d+4>>2]=t[k+4>>2];iV(i,d);l=l+8|0;s=s+1|0}if(0>1){l=t[15712]|0;m=t[a>>2]|0;p=t[r>>2]|0;t[v>>2]=b;t[v+4>>2]=e;t[v+8>>2]=A;t[v+12>>2]=m;t[v+16>>2]=p;a3(l,99316,v)|0;l=1}else l=1}h=g;return l|0}function eE(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=(t[A+4>>2]|0)-(t[r+4>>2]|0)|0;t[e>>2]=(t[A>>2]|0)-(t[r>>2]|0);t[e+4>>2]=i;return}function AE(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=(t[r+4>>2]|0)+(t[A+4>>2]|0)|0;t[e>>2]=(t[r>>2]|0)+(t[A>>2]|0);t[e+4>>2]=i;return}function rE(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0.0,s=0.0,o=0,u=0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;I=h;h=h+112|0;B=I+96|0;E=I+80|0;d=I+48|0;v=I+32|0;y=I+16|0;C=I;u=I+64|0;c[y>>3]=+(t[A>>2]|0);g=y+8|0;c[g>>3]=+(t[A+4>>2]|0);e:do{if((f|0)!=0?(m=e+16|0,o=t[(t[m>>2]|0)+8>>2]|0,(o|0)!=0):0){k=+(i|0);w=+(a|0);b=1.0/+(n|0);u=C+8|0;f=0;while(1){if((f|0)>=(t[o+4>>2]|0))break e;a=t[o>>2]|0;e=t[a+(f*48|0)>>2]|0;A=t[a+(f*48|0)+4>>2]|0;n=t[a+(f*48|0)+8>>2]|0;i=t[a+(f*48|0)+12>>2]|0;o=a+(f*48|0)+16|0;t[d>>2]=t[o>>2];t[d+4>>2]=t[o+4>>2];t[d+8>>2]=t[o+8>>2];t[d+12>>2]=t[o+12>>2];a=a+(f*48|0)+32|0;t[v>>2]=t[a>>2];t[v+4>>2]=t[a+4>>2];t[v+8>>2]=t[a+8>>2];t[v+12>>2]=t[a+12>>2];if(!n){t[y>>2]=t[e>>2];t[y+4>>2]=t[e+4>>2];t[y+8>>2]=t[e+8>>2];t[y+12>>2]=t[e+12>>2];o=e+16|0;t[C>>2]=t[o>>2];t[C+4>>2]=t[o+4>>2];t[C+8>>2]=t[o+8>>2];t[C+12>>2]=t[o+12>>2];o=2}else{t[y>>2]=t[d>>2];t[y+4>>2]=t[d+4>>2];t[y+8>>2]=t[d+8>>2];t[y+12>>2]=t[d+12>>2];t[C>>2]=t[e>>2];t[C+4>>2]=t[e+4>>2];t[C+8>>2]=t[e+8>>2];t[C+12>>2]=t[e+12>>2];o=1}l=+c[y>>3]+k;c[y>>3]=l;s=+c[g>>3]+w;c[g>>3]=s;if(!(l>=0.0))l=(l+1.0)*b+-1.0;else l=l*b;c[y>>3]=l;if(!(s>=0.0))l=(s+1.0)*b+-1.0;else l=s*b;c[g>>3]=l;l=+c[C>>3]+k;c[C>>3]=l;s=+c[u>>3]+w;c[u>>3]=s;if(!(l>=0.0))l=(l+1.0)*b+-1.0;else l=l*b;c[C>>3]=l;if(!(s>=0.0))l=(s+1.0)*b+-1.0;else l=s*b;c[u>>3]=l;t[E>>2]=t[y>>2];t[E+4>>2]=t[y+4>>2];t[E+8>>2]=t[y+8>>2];t[E+12>>2]=t[y+12>>2];t[B>>2]=t[C>>2];t[B+4>>2]=t[C+4>>2];t[B+8>>2]=t[C+8>>2];t[B+12>>2]=t[C+12>>2];Jp(E,B,r);while(1){if((o|0)>=(A|0))break;t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];n=e+(o<<4)|0;t[C>>2]=t[n>>2];t[C+4>>2]=t[n+4>>2];t[C+8>>2]=t[n+8>>2];t[C+12>>2]=t[n+12>>2];l=+c[C>>3]+k;c[C>>3]=l;s=+c[u>>3]+w;c[u>>3]=s;if(!(l>=0.0))l=(l+1.0)*b+-1.0;else l=l*b;c[C>>3]=l;if(!(s>=0.0))l=(s+1.0)*b+-1.0;else l=s*b;c[u>>3]=l;t[E>>2]=t[y>>2];t[E+4>>2]=t[y+4>>2];t[E+8>>2]=t[y+8>>2];t[E+12>>2]=t[y+12>>2];t[B>>2]=t[C>>2];t[B+4>>2]=t[C+4>>2];t[B+8>>2]=t[C+8>>2];t[B+12>>2]=t[C+12>>2];Jp(E,B,r);o=o+1|0}if(i|0){t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];t[C>>2]=t[v>>2];t[C+4>>2]=t[v+4>>2];t[C+8>>2]=t[v+8>>2];t[C+12>>2]=t[v+12>>2];l=+c[C>>3]+k;c[C>>3]=l;s=+c[u>>3]+w;c[u>>3]=s;if(!(l>=0.0))l=(l+1.0)*b+-1.0;else l=l*b;c[C>>3]=l;if(!(s>=0.0))l=(s+1.0)*b+-1.0;else l=s*b;c[u>>3]=l;t[E>>2]=t[y>>2];t[E+4>>2]=t[y+4>>2];t[E+8>>2]=t[y+8>>2];t[E+12>>2]=t[y+12>>2];t[B>>2]=t[C>>2];t[B+4>>2]=t[C+4>>2];t[B+8>>2]=t[C+8>>2];t[B+12>>2]=t[C+12>>2];Jp(E,B,r)}f=f+1|0;o=t[(t[m>>2]|0)+8>>2]|0}}else p=4}while(0);if((p|0)==4){Ix(u,t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0);t[C>>2]=t[u>>2];t[C+4>>2]=t[u+4>>2];t[C+8>>2]=t[u+8>>2];t[C+12>>2]=t[u+12>>2];l=+c[C>>3]+ +(i|0);c[C>>3]=l;o=C+8|0;s=+c[o>>3]+ +(a|0);c[o>>3]=s;if(!(l>=0.0))l=(l+1.0)/+(n|0)+-1.0;else l=l/+(n|0);c[C>>3]=l;if(!(s>=0.0))l=(s+1.0)/+(n|0)+-1.0;else l=s/+(n|0);c[o>>3]=l;t[E>>2]=t[y>>2];t[E+4>>2]=t[y+4>>2];t[E+8>>2]=t[y+8>>2];t[E+12>>2]=t[y+12>>2];t[B>>2]=t[C>>2];t[B+4>>2]=t[C+4>>2];t[B+8>>2]=t[C+8>>2];t[B+12>>2]=t[C+12>>2];Jp(E,B,r)}h=I;return}function iE(e,A,r){e=e|0;A=A|0;r=r|0;e:do{if((e|0)<1)e=0;else switch(t[r+16>>2]|0){case 4:{e=Xp(e,A,r)|0;break e}case 3:{e=aE(e,A,r)|0;break e}default:{e=0;break e}}}while(0);return e|0}function aE(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;u=h;h=h+80|0;n=u+64|0;a=u+24|0;o=u+8|0;i=u;f=u+56|0;s=r+8|0;c=Up(e,A,t[s>>2]|0)|0;if(0){l=t[15712]|0;t[i>>2]=c;a3(l,99285,i)|0}e:do{if((c|0)>=1){t[f+4>>2]=0;t[f>>2]=0;l=KF(e<<4)|0;r=0;while(1){if((r|0)>=(e|0))break;t[l+(r<<4)+12>>2]=r;b=A+(r<<5)|0;i=t[s>>2]|0;t[a>>2]=t[b>>2];t[a+4>>2]=t[b+4>>2];t[a+8>>2]=t[b+8>>2];t[a+12>>2]=t[b+12>>2];t[a+16>>2]=t[b+16>>2];t[a+20>>2]=t[b+20>>2];t[a+24>>2]=t[b+24>>2];t[a+28>>2]=t[b+28>>2];t[n>>2]=t[f>>2];t[n+4>>2]=t[f+4>>2];Tp(a,l+(r<<4)|0,c,i,n,195059);r=r+1|0}a=KF(e<<2)|0;r=0;while(1){if((r|0)>=(e|0))break;t[a+(r<<2)>>2]=l+(r<<4);r=r+1|0}_4(a,e,4,89);n=$M()|0;r=KF(e<<3)|0;i=0;while(1){if((i|0)>=(e|0))break;b=t[a+(i<<2)>>2]|0;Kp(i,b,n,r+(t[b+12>>2]<<3)|0,c,t[s>>2]|0,A);i=i+1|0}G2(a);i=0;while(1){if((i|0)>=(e|0))break;G2(t[l+(i<<4)+4>>2]|0);i=i+1|0}G2(l);rV(n);if(0>1){a=t[15712]|0;i=0;while(1){if((i|0)>=(e|0))break e;A=t[r+(i<<3)>>2]|0;b=t[r+(i<<3)+4>>2]|0;t[o>>2]=i;t[o+4>>2]=A;t[o+8>>2]=b;a3(a,99301,o)|0;i=i+1|0}}}else r=0}while(0);h=u;return r|0}function tE(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0,h=0.0,w=0.0,k=0,d=0,v=0,g=0;e:do{if((e|0)<1)a=0-e|0;else{v=(i|0)==0;k=(a|0)==0;l=0;while(1){if((l|0)==(e|0)){a=0;break e}d=t[A+(l<<2)>>2]|0;n=v?d:i;s=t[r+(l<<3)>>2]|0;o=t[r+(l<<3)+4>>2]|0;u=+(s|0);b=u*.013888888888888888;h=+(o|0);w=h*.013888888888888888;f=sd(d)|0;while(1){if(!f)break;a=t[f+16>>2]|0;g=t[a+132>>2]|0;c[g>>3]=+c[g>>3]+b;g=g+8|0;c[g>>3]=+c[g>>3]+w;g=a+16|0;c[g>>3]=+c[g>>3]+u;g=a+24|0;c[g>>3]=+c[g>>3]+h;a=t[a+108>>2]|0;if(a|0){g=a+56|0;c[g>>3]=+c[g>>3]+u;g=a+64|0;c[g>>3]=+c[g>>3]+h}A:do{if(!k){a=Ow(n,f)|0;while(1){if(!a)break A;nE(a,s,o);a=qw(n,a)|0}}}while(0);f=cd(d,f)|0}fE(d,s,o);l=l+1|0}}}while(0);return a|0}function nE(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0.0,s=0,o=0.0,u=0,b=0;i=t[e+16>>2]|0;e=t[i+96>>2]|0;if(e|0){u=e+56|0;c[u>>3]=+c[u>>3]+ +(A|0);u=e+64|0;c[u>>3]=+c[u>>3]+ +(r|0)}e=t[i+108>>2]|0;if(e|0){u=e+56|0;c[u>>3]=+c[u>>3]+ +(A|0);u=e+64|0;c[u>>3]=+c[u>>3]+ +(r|0)}e=t[i+100>>2]|0;if(e|0){u=e+56|0;c[u>>3]=+c[u>>3]+ +(A|0);u=e+64|0;c[u>>3]=+c[u>>3]+ +(r|0)}e=t[i+104>>2]|0;if(e|0){u=e+56|0;c[u>>3]=+c[u>>3]+ +(A|0);u=e+64|0;c[u>>3]=+c[u>>3]+ +(r|0)}u=t[i+8>>2]|0;e:do{if(u|0){o=+(A|0);l=+(r|0);A=t[u+4>>2]|0;e=0;while(1){if((e|0)>=(A|0))break e;s=t[u>>2]|0;r=t[s+(e*48|0)>>2]|0;a=t[s+(e*48|0)+4>>2]|0;n=t[s+(e*48|0)+8>>2]|0;f=t[s+(e*48|0)+12>>2]|0;i=0;while(1){if((i|0)>=(a|0))break;b=r+(i<<4)|0;c[b>>3]=+c[b>>3]+o;b=r+(i<<4)+8|0;c[b>>3]=+c[b>>3]+l;i=i+1|0}if(n|0){b=s+(e*48|0)+16|0;c[b>>3]=+c[b>>3]+o;b=s+(e*48|0)+24|0;c[b>>3]=+c[b>>3]+l}if(f|0){b=s+(e*48|0)+32|0;c[b>>3]=+c[b>>3]+o;b=s+(e*48|0)+40|0;c[b>>3]=+c[b>>3]+l}e=e+1|0}}}while(0);return}function fE(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0.0,l=0,s=0.0,o=0.0,u=0,b=0.0,h=0;l=e+16|0;e=t[l>>2]|0;h=e+16|0;u=e+24|0;a=e+32|0;e=e+40|0;n=+(A|0);o=+c[a>>3]+n;f=+(r|0);b=+c[u>>3]+f;s=+c[e>>3]+f;c[h>>3]=+c[h>>3]+n;c[u>>3]=b;c[a>>3]=o;c[e>>3]=s;e=t[l>>2]|0;a=t[e+12>>2]|0;if((a|0)!=0?(i[a+81>>0]|0)!=0:0){h=a+56|0;c[h>>3]=+c[h>>3]+n;a=a+64|0;c[a>>3]=+c[a>>3]+f;a=1}else a=1;while(1){if((a|0)>(t[e+180>>2]|0))break;fE(t[(t[e+184>>2]|0)+(a<<2)>>2]|0,A,r);a=a+1|0;e=t[l>>2]|0}return}function lE(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=Hp(e,A,r,i)|0;if(!a)e=1;else{e=tE(e,A,a,r,t[i+12>>2]|0)|0;G2(a)}return e|0}function sE(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0;w=h;h=h+32|0;b=w;u=lE(e,A,r,i)|0;if(!u){Xx(r);o=(t[r+16>>2]|0)+16|0;t[b>>2]=t[o>>2];t[b+4>>2]=t[o+4>>2];t[b+8>>2]=t[o+8>>2];t[b+12>>2]=t[o+12>>2];t[b+16>>2]=t[o+16>>2];t[b+20>>2]=t[o+20>>2];t[b+24>>2]=t[o+24>>2];t[b+28>>2]=t[o+28>>2];a=b+8|0;n=b+16|0;f=b+24|0;i=0;while(1){if((i|0)>=(e|0))break;s=t[(t[A+(i<<2)>>2]|0)+16>>2]|0;l=t[s+180>>2]|0;s=s+184|0;r=1;while(1){if((r|0)>(l|0))break;d=(t[(t[(t[s>>2]|0)+(r<<2)>>2]|0)+16>>2]|0)+16|0;c[b>>3]=+c[(+c[b>>3]<+c[d>>3]?b:d)>>3];d=t[(t[(t[s>>2]|0)+(r<<2)>>2]|0)+16>>2]|0;k=d+16|0;c[a>>3]=+c[(+c[a>>3]<+c[d+24>>3]?b:k)+8>>3];c[n>>3]=+c[(+c[n>>3]>+c[d+32>>3]?b:k)+16>>3];c[f>>3]=+c[(+c[f>>3]>+c[d+40>>3]?b:k)+24>>3];r=r+1|0}i=i+1|0}t[o>>2]=t[b>>2];t[o+4>>2]=t[b+4>>2];t[o+8>>2]=t[b+8>>2];t[o+12>>2]=t[b+12>>2];t[o+16>>2]=t[b+16>>2];t[o+20>>2]=t[b+20>>2];t[o+24>>2]=t[b+24>>2];t[o+28>>2]=t[b+28>>2]}h=w;return u|0}function cE(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;n=h;h=h+16|0;a=n;if(!i)ge(99534,99540,1400,99547);r=oE(e,r,r)|0;t[i+8>>2]=r;if(0){f=t[15712]|0;t[a>>2]=r;a3(f,99559,a)|0}t[i+12>>2]=0;t[i+20>>2]=0;uE(e,A,i)|0;h=n;return t[i+16>>2]|0}function oE(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;a=l+4|0;n=Hw(e,99689)|0;e:do{if(n){t[f>>2]=a;f=(V3(n,137395,f)|0)==1;e=t[a>>2]|0;if(f&(e|0)>-1)A=e;else{switch(i[n>>0]|0){case 84:case 116:break;default:break e}A=r}}}while(0);h=l;return A|0}function uE(e,A,r){e=e|0;A=A|0;r=r|0;return bE(Hw(e,99572)|0,A,r)|0}function bE(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0.0;m=h;h=h+64|0;d=m+40|0;k=m+32|0;g=m+24|0;v=m+16|0;o=m+8|0;l=m;n=m+48|0;f=m+44|0;if(!r)ge(99534,99540,1292,99581);b=r+28|0;t[b>>2]=0;w=r+16|0;t[w>>2]=A;u=r+4|0;t[u>>2]=0;t[r+24>>2]=0;e:do{if(e|0?(a=i[e>>0]|0,a<<24>>24):0)switch(a<<24>>24|0){case 97:if(!(y1(e,99599,5)|0)){t[w>>2]=4;o=hE(e+5|0,r)|0;t[l>>2]=f;o=(V3(o,137395,l)|0)>0;A=t[f>>2]|0;if(!(o&(A|0)>0))break e;t[u>>2]=A;break e}else{if(y1(e,99605,6)|0)break e;t[w>>2]=5;t[o>>2]=n;o=(V3(e+5|0,99612,o)|0)>0;p=+s[n>>2];s[r>>2]=o&p>0.0?p:1.0;break e}case 99:{if(a<<24>>24!=99)break e;if(e1(e,108006)|0)break e;t[w>>2]=1;break e}case 103:{if(a<<24>>24!=103)break e;if(e1(e,111494)|0)break e;t[w>>2]=3;break e}case 110:{if(a<<24>>24!=110)break e;if(e1(e,111481)|0)break e;t[w>>2]=2;break e}default:break e}}while(0);if(0){A=t[15712]|0;G3(99615,11,1,A)|0;t[v>>2]=wE(t[w>>2]|0)|0;a3(A,99627,v)|0;if((t[w>>2]|0)==5){c[g>>3]=+s[r>>2];a3(A,99640,g)|0}t[k>>2]=t[u>>2];a3(A,99653,k)|0;t[d>>2]=t[b>>2];a3(A,99666,d)|0}h=m;return t[w>>2]|0}function hE(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;e:do{if((i[e>>0]|0)==95){a=A+28|0;r=1;while(1){e=e+1|0;A:while(1){if(!r)break e;A=i[e>>0]|0;if(!(A<<24>>24))break e;switch(A<<24>>24|0){case 99:{n=10;break A}case 105:{n=9;break A}case 117:{n=11;break A}case 116:{n=12;break A}case 98:{A=32;break A}case 108:{n=7;break A}case 114:{n=8;break A}default:r=0}}if((n|0)==7){n=0;A=4}else if((n|0)==8){n=0;A=8}else if((n|0)==9){n=0;A=64}else if((n|0)==10){n=0;A=1}else if((n|0)==11){n=0;A=2}else if((n|0)==12){n=0;A=16}t[a>>2]=t[a>>2]|A}}}while(0);return e|0}function wE(e){e=e|0;switch(e|0){case 1:{e=108006;break}case 2:{e=111481;break}case 3:{e=111494;break}case 4:{e=99599;break}case 5:{e=99605;break}default:e=99679}return e|0}function kE(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+96|0;c=u;o=u+80|0;do{if(e){if(!i){i=L2(1,20)|0;t[i+4>>2]=r>>>0>80?r:80}r=t[i>>2]|0;s=t[i+4>>2]|0;if(!r){f=100;r=e;l=L2(100,s)|0}else{f=r+100|0;l=Q2(t[i+8>>2]|0,P(f,s)|0)|0;z6(l+(P(s,r)|0)|0,0,s*100|0)|0;r=e}while(1){r=dE(c,r,A,o)|0;if(!r)break;e=t[i>>2]|0;a=f<<1;n=P(f,s)|0;if((e|0)==(f|0)){l=Q2(l,P(a,s)|0)|0;z6(l+n|0,0,n|0)|0;e=t[i>>2]|0}else a=f;e=l+(P(e,s)|0)|0;n=c;f=e+80|0;do{t[e>>2]=t[n>>2];e=e+4|0;n=n+4|0}while((e|0)<(f|0));t[i>>2]=(t[i>>2]|0)+1;f=a}if(t[o>>2]|0){o=i+16|0;t[o>>2]=t[o>>2]|1}r=t[i>>2]|0;if(!r){G2(l);G2(i);i=0;break}else{t[i+8>>2]=Q2(l,P(r,s)|0)|0;break}}}while(0);h=u;return i|0}function dE(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0;s=h;h=h+80|0;f=s+64|0;l=s;t[a>>2]=0;do{n=i[A>>0]|0;A=A+1|0}while((I1(n)|0)!=0);e:do{switch(n|0){case 69:{t[e>>2]=0;A=vE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r>>2];break}case 101:{t[e>>2]=1;A=vE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r>>2];break}case 80:{t[e>>2]=2;A=gE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+4>>2];break}case 112:{t[e>>2]=3;A=gE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+4>>2];break}case 98:{t[e>>2]=4;A=gE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+8>>2];break}case 66:{t[e>>2]=5;A=gE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+8>>2];break}case 99:{A=mE(A,f)|0;if(!A){t[a>>2]=1;A=0;break e}n=pE(t[f>>2]|0,l)|0;t[f>>2]=n;if(!n){t[a>>2]=1;A=0;break e}if(!(t[l>>2]|0)){t[e>>2]=9;t[e+8>>2]=t[l+8>>2];if(!r)break e;t[e+72>>2]=t[r+24>>2];break e}else{t[e>>2]=14;a=e+8|0;n=l;f=a+64|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));if(!r)break e;t[e+72>>2]=t[r+40>>2];break e}}case 67:{A=mE(A,f)|0;if(!A){t[a>>2]=1;A=0;break e}n=pE(t[f>>2]|0,l)|0;t[f>>2]=n;if(!n){t[a>>2]=1;A=0;break e}if(!(t[l>>2]|0)){t[e>>2]=8;t[e+8>>2]=t[l+8>>2];if(!r)break e;t[e+72>>2]=t[r+20>>2];break e}else{t[e>>2]=13;a=e+8|0;n=l;f=a+64|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));if(!r)break e;t[e+72>>2]=t[r+40>>2];break e}}case 76:{t[e>>2]=6;A=gE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+12>>2];break}case 84:{t[e>>2]=7;A=EE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}A=EE(A,e+16|0)|0;if(!A){t[a>>2]=1;A=0;break e}A=BE(A,e+24|0)|0;if(!A){t[a>>2]=1;A=0;break e}A=EE(A,e+32|0)|0;if(!A){t[a>>2]=1;A=0;break e}A=mE(A,e+40|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+16>>2];break}case 70:{t[e>>2]=10;A=EE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}A=mE(A,e+16|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+28>>2];break}case 83:{t[e>>2]=11;A=mE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+32>>2];break}case 73:{t[e>>2]=12;A=vE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}A=mE(A,e+40|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+36>>2];break}case 116:{t[e>>2]=15;A=yE(A,e+8|0)|0;if(!A){t[a>>2]=1;A=0;break e}if(r)t[e+72>>2]=t[r+44>>2];break}case 0:{A=0;break}default:{t[a>>2]=1;A=0}}}while(0);h=s;return A|0}function vE(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;i=f;c[A>>3]=+e8(e,i);a=t[i>>2]|0;if(((a|0)!=(e|0)?(c[A+8>>3]=+e8(a,i),n=t[i>>2]|0,(a|0)!=(n|0)):0)?(c[A+16>>3]=+e8(n,i),r=t[i>>2]|0,(n|0)!=(r|0)):0){c[A+24>>3]=+e8(r,i);e=t[i>>2]|0;e=(r|0)==(e|0)?0:e}else e=0;h=f;return e|0}function gE(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;l=s+4|0;n=s;e=CE(e,l)|0;do{if(e){r=t[l>>2]|0;f=L2(r,24)|0;t[A>>2]=r;i=f;a=0;while(1){if((a|0)>=(r|0)){r=9;break}c[i>>3]=+e8(e,n);r=t[n>>2]|0;if((e|0)==(r|0)){r=5;break}c[i+8>>3]=+e8(r,n);e=t[n>>2]|0;if((r|0)==(e|0)){r=7;break}c[i+16>>3]=0.0;i=i+24|0;r=t[A>>2]|0;a=a+1|0}if((r|0)==5){t[l>>2]=a;G2(f);e=0;break}else if((r|0)==7){t[l>>2]=a;G2(f);e=0;break}else if((r|0)==9){t[l>>2]=a;t[A+4>>2]=f;break}}else e=0}while(0);h=s;return e|0}function mE(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;l=s;e=CE(e,l)|0;a=t[l>>2]|0;do{if(!((e|0)==0|(a|0)<1)){while(1){f=i[e>>0]|0;r=f<<24>>24==0;if(r^f<<24>>24!=45)e=e+1|0;else break}if(!r){f=L2(a+1|0,1)|0;n=f;r=a;while(1){e=e+1|0;if((r|0)<=0){r=9;break}r=i[e>>0]|0;if(!(r<<24>>24)){r=8;break}i[n>>0]=r;r=(t[l>>2]|0)+-1|0;t[l>>2]=r;n=n+1|0}if((r|0)==8){G2(f);e=0;break}else if((r|0)==9){i[n>>0]=0;t[A>>2]=f;break}}else e=0}else e=0}while(0);h=s;return e|0}function pE(e,A){e=e|0;A=A|0;var r=0;r=i[e>>0]|0;switch(r|0){case 91:{e=IE(e+1|0,A)|0;break}case 40:{e=ZE(e+1|0,A)|0;break}case 47:case 35:{t[A>>2]=0;t[A+8>>2]=e;break}default:if(!(M1(r)|0))e=0;else{t[A>>2]=0;t[A+8>>2]=e}}return e|0}function EE(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0;a=h;h=h+16|0;r=a;i=+e8(e,r);r=t[r>>2]|0;if((r|0)==(e|0))r=0;else c[A>>3]=i;h=a;return r|0}function BE(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;e=CE(e,i)|0;i=t[i>>2]|0;t[A>>2]=(i|0)<0?0:i|0?2:1;h=r;return e|0}function yE(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[A>>2]=Z1(e,i,10)|0;A=t[i>>2]|0;h=r;return((A|0)==(e|0)?0:A)|0}function CE(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[A>>2]=n3(e,i,10)|0;A=t[i>>2]|0;h=r;return((A|0)==(e|0)?0:A)|0}function IE(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,o=0,u=0,b=0;b=h;h=h+16|0;o=b;t[A>>2]=1;u=A+8|0;n=EE(e,u)|0;do{if(((((n|0)!=0?(f=EE(n,A+16|0)|0,(f|0)!=0):0)?(i=EE(f,A+24|0)|0,(i|0)!=0):0)?(a=EE(i,A+32|0)|0,(a|0)!=0):0)?(l=A+40|0,r=CE(a,l)|0,(r|0)!=0):0){A=t[l>>2]|0;a=L2(A,8)|0;i=0;while(1){if((i|0)>=(A|0)){r=13;break}r=EE(r,o)|0;if(!r){r=9;break}s[a+(i<<3)>>2]=+c[o>>3];r=mE(r,a+(i<<3)+4|0)|0;if(!r){r=12;break}i=i+1|0;A=t[l>>2]|0}if((r|0)==9){G2(a);e=0;break}else if((r|0)==12){G2(a);e=0;break}else if((r|0)==13){t[u+36>>2]=a;break}}else e=0}while(0);h=b;return e|0}function ZE(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,o=0,u=0,b=0,w=0;w=h;h=h+16|0;u=w;t[A>>2]=2;l=EE(e,A+8|0)|0;do{if(((((((l|0)!=0?(o=EE(l,A+16|0)|0,(o|0)!=0):0)?(i=EE(o,A+24|0)|0,(i|0)!=0):0)?(a=EE(i,A+32|0)|0,(a|0)!=0):0)?(n=EE(a,A+40|0)|0,(n|0)!=0):0)?(f=EE(n,A+48|0)|0,(f|0)!=0):0)?(b=A+56|0,r=CE(f,b)|0,(r|0)!=0):0){i=t[b>>2]|0;n=L2(i,8)|0;a=0;while(1){if((a|0)>=(i|0)){r=15;break}r=EE(r,u)|0;if(!r){r=11;break}s[n+(a<<3)>>2]=+c[u>>3];r=mE(r,n+(a<<3)+4|0)|0;if(!r){r=14;break}a=a+1|0;i=t[b>>2]|0}if((r|0)==11){G2(n);e=0;break}else if((r|0)==14){G2(n);e=0;break}else if((r|0)==15){t[A+60>>2]=n;break}}else e=0}while(0);h=w;return e|0}function GE(e,A,r){e=e|0;A=A|0;r=r|0;return kE(e,A,r,0)|0}function LE(e){e=e|0;return GE(e,0,0)|0}function QE(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;i=t[e+12>>2]|0;if(e|0){a=t[e+8>>2]|0;n=e+4|0;f=(i|0)==0;A=0;while(1){if((A|0)>=(t[e>>2]|0))break;r=a+(P(t[n>>2]|0,A)|0)|0;if(!f)F5[i&127](r);DE(r);A=A+1|0}G2(a);G2(e)}return}function DE(e){e=e|0;switch(t[e>>2]|0){case 3:case 2:{G2(t[e+8+4>>2]|0);break}case 5:case 4:{G2(t[e+8+4>>2]|0);break}case 6:{G2(t[e+8+4>>2]|0);break}case 7:{G2(t[e+40>>2]|0);break}case 9:case 8:{G2(t[e+8>>2]|0);break}case 14:case 13:{zE(e+8|0);break}case 10:{G2(t[e+16>>2]|0);break}case 11:{G2(t[e+8>>2]|0);break}case 12:{G2(t[e+40>>2]|0);break}default:{}}return}function zE(e){e=e|0;var A=0,r=0,i=0;switch(t[e>>2]|0){case 1:{i=e+40|0;A=e+8+36|0;e=0;while(1){r=t[A>>2]|0;if((e|0)>=(t[i>>2]|0))break;G2(t[r+(e<<3)+4>>2]|0);e=e+1|0}G2(r);break}case 2:{i=e+56|0;r=e+60|0;e=0;while(1){A=t[r>>2]|0;if((e|0)>=(t[i>>2]|0))break;G2(t[A+(e<<3)+4>>2]|0);e=e+1|0}G2(A);break}default:{}}return}function WE(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;c=b+4|0;u=b;t[A>>2]=0;t[r>>2]=(Bk(Bd(e)|0)|0)!=0&1;a=t[47184]|0;e:do{if(a|0?(f=Pw(e,a)|0,l=i[f>>0]|0,l<<24>>24):0){a=20388;while(1){n=t[a>>2]|0;if(!n)break e;if(l<<24>>24==(i[n>>0]|0)?(e1(f,n)|0)==0:0)break;a=a+12|0}t[A>>2]=t[a+4>>2];t[r>>2]=t[a+8>>2]}}while(0);a=t[47195]|0;if((a|0?(t[r>>2]|0)==1:0)?(s=Pw(e,a)|0,i[s>>0]|0):0)YE(s,r);a=t[47196]|0;if((a|0?(t[A>>2]|0)==1:0)?(o=Pw(e,a)|0,i[o>>0]|0):0)YE(o,A);if(i[(t[e+16>>2]|0)+153>>0]|0){s=e+-48|0;l=Bd(t[((t[e>>2]&3|0)==2?e:s)+40>>2]|0)|0;o=t[e>>2]&3;WE(lk(l,t[((o|0)==2?e:s)+40>>2]|0,t[((o|0)==3?e:e+48|0)+40>>2]|0,0,0)|0,c,u);t[r>>2]=t[c>>2]|t[r>>2];t[A>>2]=t[u>>2]|t[A>>2]}h=b;return}function YE(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;o=b;c=b+4|0;s=0;r=0;e:while(1){t[A>>2]=r;n=(s|0)<4;f=(s|0)==3;l=(s|0)==0;while(1){if(!(n&(i[e>>0]|0)!=0))break e;t[c>>2]=0;a=FE(e,c)|0;r=t[c>>2]|0;if(!r){u=5;break e}e=(r|0)==8;if(!(f&e)){if(!(l&e))break;if(i[a>>0]|0)break}t[c>>2]=0;e=a}r=t[A>>2]|r<<(s<<3);s=s+1|0;e=a}if((u|0)==5){t[o>>2]=e;nw(0,99694,o)|0}h=b;return}function FE(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=h;h=h+16|0;i=a;t[i>>2]=0;r=ME(e,20448,i)|0;if((r|0)==(e|0)){while(1){r=ME(e,20464,i)|0;if((e|0)==(r|0))break;else e=r}r=ME(e,20512,i)|0}e=t[i>>2]|0;if((e|0)!=0&(e&15|0)==0){e=e|1;t[i>>2]=e}t[A>>2]=t[A>>2]|e;h=a;return r|0}function ME(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;while(1){i=t[A>>2]|0;if(!i)break;a=U2(i)|0;if(!(y1(e,i,a)|0)){n=4;break}A=A+8|0}if((n|0)==4){t[r>>2]=t[r>>2]|t[A+4>>2];e=e+a|0}return e|0}function VE(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,n=0,f=0;n=0;r=0.0;while(1){if((n|0)==4)break;a=A>>(n<<3)&15;i=1400;while(1){if(!(t[i+16>>2]|0))break;if((a|0)==(t[i>>2]|0)){f=6;break}i=i+24|0}if((f|0)==6){f=0;r=+c[i+8>>3]+r}n=n+1|0}return+(r*10.0*+wx(e,t[47188]|0,1.0,0.0))}function NE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0.0,l=0.0,s=0.0,o=0,u=0.0,b=0,w=0;w=h;h=h+96|0;o=w+80|0;b=w;s=a>4.0?a*.0875:.35;f=+c[r+8>>3];u=f*s;l=+c[r>>3];s=l*s;i=+c[A>>3];l=i+l;c[o>>3]=l;a=+c[A+8>>3];f=f+a;c[o+8>>3]=f;r=b+64|0;if(!(n&32)){t[r>>2]=t[o>>2];t[r+4>>2]=t[o+4>>2];t[r+8>>2]=t[o+8>>2];t[r+12>>2]=t[o+12>>2];t[b>>2]=t[o>>2];t[b+4>>2]=t[o+4>>2];t[b+8>>2]=t[o+8>>2];t[b+12>>2]=t[o+12>>2];o=b+32|0;t[o>>2]=t[A>>2];t[o+4>>2]=t[A+4>>2];t[o+8>>2]=t[A+8>>2];t[o+12>>2]=t[A+12>>2];a=f;i=l}else{t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];t[b>>2]=t[A>>2];t[b+4>>2]=t[A+4>>2];t[b+8>>2]=t[A+8>>2];t[b+12>>2]=t[A+12>>2];A=b+32|0;t[A>>2]=t[o>>2];t[A+4>>2]=t[o+4>>2];t[A+8>>2]=t[o+8>>2];t[A+12>>2]=t[o+12>>2]}c[b+16>>3]=i+u;c[b+24>>3]=a-s;c[b+48>>3]=i-u;c[b+56>>3]=a+s;do{if(!(n&64))if(!(n&128)){ti(e,b+16|0,3,n>>>4&1^1);break}else{ti(e,b+32|0,3,n>>>4&1^1);break}else ti(e,b,3,n>>>4&1^1)}while(0);h=w;return}function RE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0.0,l=0.0,s=0.0,o=0.0,u=0,b=0.0,w=0.0,k=0.0,d=0.0,v=0.0,g=0.0,m=0.0,p=0.0,E=0,B=0,y=0;B=h;h=h+160|0;u=B+144|0;E=B;k=i*4.0;y=(n&32|0)==0;k=!(k1.0)|y?0.0:(a+-1.0)*.05/i;m=+c[r+8>>3];d=-m;p=k*d;g=+c[r>>3];k=g*k;d=v*d;v=g*v;w=+c[A>>3];i=w+g;c[u>>3]=i;b=+c[A+8>>3];a=m+b;c[u+8>>3]=a;g=g*.5+w;m=m*.5+b;r=E+128|0;if(y){t[r>>2]=t[u>>2];t[r+4>>2]=t[u+4>>2];t[r+8>>2]=t[u+8>>2];t[r+12>>2]=t[u+12>>2];t[E>>2]=t[u>>2];t[E+4>>2]=t[u+4>>2];t[E+8>>2]=t[u+8>>2];t[E+12>>2]=t[u+12>>2];y=E+64|0;t[y>>2]=t[A>>2];t[y+4>>2]=t[A+4>>2];t[y+8>>2]=t[A+8>>2];t[y+12>>2]=t[A+12>>2];f=b;l=w;s=b;o=w;a=b;i=w}else{t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];t[E>>2]=t[A>>2];t[E+4>>2]=t[A+4>>2];t[E+8>>2]=t[A+8>>2];t[E+12>>2]=t[A+12>>2];y=E+64|0;t[y>>2]=t[u>>2];t[y+4>>2]=t[u+4>>2];t[y+8>>2]=t[u+8>>2];t[y+12>>2]=t[u+12>>2];f=a+v;l=i+d;s=a-v;o=i-d}c[E+16>>3]=i-p;c[E+24>>3]=a-k;c[E+32>>3]=g-d;c[E+40>>3]=m-v;c[E+48>>3]=o;c[E+56>>3]=s;c[E+80>>3]=l;c[E+88>>3]=f;c[E+96>>3]=g+d;c[E+104>>3]=m+v;c[E+112>>3]=i+p;c[E+120>>3]=a+k;do{if(!(n&64))if(!(n&128)){ti(e,E,9,1);break}else{ti(e,E+48|0,6,1);break}else ti(e,E,6,1)}while(0);h=B;return}function xE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0.0,l=0.0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0;k=h;h=h+64|0;w=k;g=+c[r+8>>3];v=+c[r>>3];s=+c[A>>3];i=s+v;o=+c[A+8>>3];a=o+g;f=s+v*.2;l=o+g*.2;s=s+v*.6;o=o+g*.6;c[w>>3]=f-g;c[w+8>>3]=l+v;u=w+16|0;c[u>>3]=f+g;b=w+24|0;c[b>>3]=l-v;c[w+32>>3]=s+g;c[w+40>>3]=o-v;c[w+48>>3]=s-g;c[w+56>>3]=o+v;if(!(n&64)){if(n&128|0){r=2;n=1;d=3}}else{r=3;n=0;d=3}if((d|0)==3){c[w+(n<<4)>>3]=f;c[w+(n<<4)+8>>3]=l;c[w+(r<<4)>>3]=s;c[w+(r<<4)+8>>3]=o}ti(e,w,4,1);t[w>>2]=t[A>>2];t[w+4>>2]=t[A+4>>2];t[w+8>>2]=t[A+8>>2];t[w+12>>2]=t[A+12>>2];c[u>>3]=i;c[b>>3]=a;li(e,w,2);h=k;return}function JE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0.0,g=0.0;b=h;h=h+64|0;u=b;l=+c[r+8>>3];d=l*-.4;f=+c[r>>3];k=f*.4;g=+c[A>>3];i=g+f*.8;v=+c[A+8>>3];a=v+l*.8;f=g+f;l=v+l;c[u>>3]=g+d;s=u+8|0;c[s>>3]=v+k;r=u+16|0;c[r>>3]=g-d;o=u+24|0;c[o>>3]=v-k;c[u+32>>3]=i-d;c[u+40>>3]=a-k;c[u+48>>3]=i+d;c[u+56>>3]=a+k;if(!(n&64)){if(n&128|0){t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];r=2;w=5}}else{t[u>>2]=t[A>>2];t[u+4>>2]=t[A+4>>2];t[u+8>>2]=t[A+8>>2];t[u+12>>2]=t[A+12>>2];r=3;w=5}if((w|0)==5){c[u+(r<<4)>>3]=i;c[u+(r<<4)+8>>3]=a}ti(e,u,4,n>>>4&1^1);c[u>>3]=i;c[s>>3]=a;c[u+16>>3]=f;c[o>>3]=l;li(e,u,2);h=b;return}function HE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0,l=0,s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0;l=h;h=h+80|0;f=l;u=+c[r+8>>3];s=u*-.3333333333333333;w=+c[r>>3];a=w*.3333333333333333;k=+c[A>>3];o=k+w*.5;b=+c[A+8>>3];i=b+u*.5;r=f+64|0;c[f+64>>3]=k+w;c[f+72>>3]=b+u;t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];c[f+16>>3]=o+s;c[f+24>>3]=i+a;r=f+32|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];c[f+48>>3]=o-s;c[f+56>>3]=i-a;do{if(!(n&64)){r=n>>>4&1^1;if(!(n&128)){ti(e,f,4,r);break}else{ti(e,f,3,r);break}}else ti(e,r,3,n>>>4&1^1)}while(0);h=l;return}function PE(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=+i;a=+a;t=t|0;var n=0,f=0,l=0.0,s=0.0,o=0.0;n=h;h=h+32|0;f=n;s=+c[r>>3];a=+c[r+8>>3];i=+D(+(a*a+s*s))*.5;o=+c[A>>3];s=s*.5;c[f>>3]=o+s-i;l=+c[A+8>>3];a=a*.5;c[f+8>>3]=l-i+a;c[f+16>>3]=o+i+s;c[f+24>>3]=l+i+a;ai(e,f,2,t>>>4&1^1);h=n;return}function XE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0,g=0;g=h;h=h+112|0;k=g+48|0;d=g+16|0;v=g;u=a>4.0?a*.125:.5;w=+c[A>>3];b=+c[r>>3];f=+c[A+8>>3];o=+c[r+8>>3];i=o*u;a=b*u;t[d>>2]=t[A>>2];t[d+4>>2]=t[A+4>>2];t[d+8>>2]=t[A+8>>2];t[d+12>>2]=t[A+12>>2];c[d+16>>3]=b+w;c[d+24>>3]=o+f;c[k>>3]=u*(b-o)+w;l=u*(o+b);s=l+f;c[k+8>>3]=s;c[k+48>>3]=l+w;f=u*(o-b)+f;c[k+56>>3]=f;b=i*-.95;o=b+a+w;u=a*1.3333333333333333;if(!(n&32)){i=i*1.3333333333333333;l=a*-.33333333333333326;f=f-i;a=s-i;i=o-u}else{i=i*1.3333333333333333;l=a*2.333333333333333;f=f+i;a=s+i;i=o+u}c[k+16>>3]=i;c[k+24>>3]=a;c[k+32>>3]=l-b+w;c[k+40>>3]=f;li(e,d,2);if(!(n&64)){if(n&128|0)Zx(v,k,3,.5,k,0)}else Zx(v,k,3,.5,0,k);fi(e,k,4,0,0,0);h=g;return}function SE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0;n=h;h=h+32|0;f=n;i=+c[r>>3]+ +c[A>>3];a=+c[r+8>>3]+ +c[A+8>>3];t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];c[f+16>>3]=i;c[f+24>>3]=a;li(e,f,2);h=n;return}function jE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0.0,l=0,s=0,o=0,u=0,b=0.0,w=0.0,k=0,d=0,v=0;u=h;h=h+80|0;l=u+72|0;s=u+8|0;o=u;f=+VE(e,n);f=f*f;c[o>>3]=f;t[a+12>>2]=n;n=a+32|0;e=i+3|0;a=A+(e<<4)|0;t[n>>2]=t[a>>2];t[n+4>>2]=t[a+4>>2];t[n+8>>2]=t[a+8>>2];t[n+12>>2]=t[a+12>>2];if((i|0)>(r|0)?(b=+c[A+(i<<4)>>3]-+c[a>>3],w=+c[A+(i<<4)+8>>3]-+c[A+(e<<4)+8>>3],w*w+b*b>2]=t[d>>2];t[v+4>>2]=t[d+4>>2];t[v+8>>2]=t[d+8>>2];t[v+12>>2]=t[d+12>>2];k=s+32|0;e=A+(i+1<<4)|0;t[k>>2]=t[e>>2];t[k+4>>2]=t[e+4>>2];t[k+8>>2]=t[e+8>>2];t[k+12>>2]=t[e+12>>2];a=s+16|0;r=A+(i+2<<4)|0;t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];t[s>>2]=t[n>>2];t[s+4>>2]=t[n+4>>2];t[s+8>>2]=t[n+8>>2];t[s+12>>2]=t[n+12>>2];t[l>>2]=s;t[l+4>>2]=o;kR(l,92,s,1);t[d>>2]=t[v>>2];t[d+4>>2]=t[v+4>>2];t[d+8>>2]=t[v+8>>2];t[d+12>>2]=t[v+12>>2];t[e>>2]=t[k>>2];t[e+4>>2]=t[k+4>>2];t[e+8>>2]=t[k+8>>2];t[e+12>>2]=t[k+12>>2];t[r>>2]=t[a>>2];t[r+4>>2]=t[a+4>>2];t[r+8>>2]=t[a+8>>2];t[r+12>>2]=t[a+12>>2];o=A+(i+3<<4)|0;t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[o+8>>2]=t[s+8>>2];t[o+12>>2]=t[s+12>>2];h=u;return i|0}function UE(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0;a=t[e>>2]|0;r=+c[A>>3]-+c[a>>3];i=+c[A+8>>3]-+c[a+8>>3];return i*i+r*r<=+c[t[e+4>>2]>>3]|0}function TE(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0.0,s=0,o=0,u=0,b=0,w=0.0,k=0.0,d=0,v=0;b=h;h=h+80|0;s=b+72|0;o=b+8|0;u=b;l=+VE(e,n);l=l*l;c[u>>3]=l;t[a+8>>2]=n;a=a+16|0;e=A+(r<<4)|0;t[a>>2]=t[e>>2];t[a+4>>2]=t[e+4>>2];t[a+8>>2]=t[e+8>>2];t[a+12>>2]=t[e+12>>2];if(!((i|0)>(r|0)?(f=r+3|0,w=+c[e>>3]-+c[A+(f<<4)>>3],k=+c[A+(r<<4)+8>>3]-+c[A+(f<<4)+8>>3],k*k+w*w>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];n=o+16|0;r=A+(f+2<<4)|0;t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];d=o+32|0;e=A+(f+1<<4)|0;t[d>>2]=t[e>>2];t[d+4>>2]=t[e+4>>2];t[d+8>>2]=t[e+8>>2];t[d+12>>2]=t[e+12>>2];v=o+48|0;t[v>>2]=t[a>>2];t[v+4>>2]=t[a+4>>2];t[v+8>>2]=t[a+8>>2];t[v+12>>2]=t[a+12>>2];t[s>>2]=v;t[s+4>>2]=u;kR(s,92,o,0);u=A+(f<<4)|0;t[u>>2]=t[v>>2];t[u+4>>2]=t[v+4>>2];t[u+8>>2]=t[v+8>>2];t[u+12>>2]=t[v+12>>2];t[e>>2]=t[d>>2];t[e+4>>2]=t[d+4>>2];t[e+8>>2]=t[d+8>>2];t[e+12>>2]=t[d+12>>2];t[r>>2]=t[n>>2];t[r+4>>2]=t[n+4>>2];t[r+8>>2]=t[n+8>>2];t[r+12>>2]=t[n+12>>2];t[i>>2]=t[o>>2];t[i+4>>2]=t[o+4>>2];t[i+8>>2]=t[o+8>>2];t[i+12>>2]=t[o+12>>2];h=b;return f|0}function OE(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0.0,s=0.0,o=0,u=0.0,b=0.0,h=0.0,w=0.0,k=0.0,d=0,v=0.0,g=0.0,m=0,p=0,E=0;m=(n|0)!=0;o=(f|0)!=0;if(!((i|0)==(r|0)&(m&o))){if(o){l=+VE(e,f);s=+c[A+(i<<4)>>3];w=+c[A+(i<<4)+8>>3];o=i+3|0;d=A+(o<<4)|0;b=+c[d>>3];o=A+(o<<4)+8|0;h=+c[o>>3];g=s-b;v=w-h;g=+D(+(v*v+g*g))*.9;l=l>=g?g:l;if(w==h){u=(s>3]=s;c[A+(E<<4)+8>>3]=w;i=A+(i+2<<4)|0;c[d>>3]=u;c[o>>3]=l;t[i>>2]=t[d>>2];t[i+4>>2]=t[d+4>>2];t[i+8>>2]=t[d+8>>2];t[i+12>>2]=t[d+12>>2];t[a+12>>2]=f;c[a+32>>3]=b;c[a+40>>3]=h}if(m){u=+VE(e,n);o=A+(r<<4)|0;s=+c[o>>3];l=+c[A+(r<<4)+8>>3];E=r+3|0;h=+c[A+(E<<4)>>3];w=+c[A+(E<<4)+8>>3];g=s-h;v=l-w;g=+D(+(v*v+g*g))*.9;u=u>=g?g:u;if(l==w){b=(s>3]=b;c[A+(E<<4)+8>>3]=u;t[o>>2]=t[p>>2];t[o+4>>2]=t[p+4>>2];t[o+8>>2]=t[p+8>>2];t[o+12>>2]=t[p+12>>2];p=r+2|0;c[A+(p<<4)>>3]=h;c[A+(p<<4)+8>>3]=w;p=16}}else{d=A+(i<<4)|0;v=+c[d>>3];g=+c[A+(i<<4)+8>>3];o=i+3|0;m=A+(o<<4)|0;s=+c[m>>3];o=A+(o<<4)+8|0;l=+c[o>>3];u=+VE(e,n);k=+VE(e,f);b=v-s;w=g-l;b=+D(+(w*w+b*b));E=!(k+u>=b);b=b*.3333333333333333;u=E?u:b;b=E?k:b;if(g==l){E=v>3]=k;c[A+(E<<4)+8>>3]=h;t[d>>2]=t[p>>2];t[d+4>>2]=t[p+4>>2];t[d+8>>2]=t[p+8>>2];t[d+12>>2]=t[p+12>>2];p=A+(i+2<<4)|0;c[m>>3]=w;c[o>>3]=u;t[p>>2]=t[m>>2];t[p+4>>2]=t[m+4>>2];t[p+8>>2]=t[m+8>>2];t[p+12>>2]=t[m+12>>2];t[a+12>>2]=f;c[a+32>>3]=v;c[a+40>>3]=g;p=16}if((p|0)==16){t[a+8>>2]=n;c[a+16>>3]=s;c[a+24>>3]=l}return}function _E(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;var t=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,h=0.0;b=+c[A>>3];s=+c[r>>3]-b;h=+c[A+8>>3];o=+c[r+8>>3]-h;l=i*10.0/(+D(+(s*s+o*o))+.0001);s=l*((s>=0.0?.0001:-.0001)+s);l=((o>=0.0?.0001:-.0001)+o)*l;o=s*.5;u=l*.5;f=b-u;t=h-o;b=u+b;o=h+o;h=f+s;u=t+l;s=b+s;l=o+l;n=h>s?h:s;n=b>n?b:n;i=u>l?u:l;i=o>i?o:i;s=h>3]=f>3]=t>3]=f>n?f:n;c[e+24>>3]=t>i?t:i;return}function qE(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;n=+n;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0.0,g=0.0;k=h;h=h+48|0;o=k+32|0;s=k+16|0;w=k;u=(t[e+16>>2]|0)+12|0;b=t[u>>2]|0;t[u>>2]=A;ii(e,t[(t[e>>2]|0)+336>>2]|0);ui(e,n);g=+c[i>>3]-+c[r>>3];A=i+8|0;v=+c[A>>3]-+c[r+8>>3];d=10.0/(+D(+(g*g+v*v))+.0001);c[i>>3]=d*((g>=0.0?.0001:-.0001)+g);c[A>>3]=((v>=0.0?.0001:-.0001)+v)*d;A=0;while(1){if((A|0)>=4)break;l=f>>(A<<3)&255;if(!l)break;t[s>>2]=t[r>>2];t[s+4>>2]=t[r+4>>2];t[s+8>>2]=t[r+8>>2];t[s+12>>2]=t[r+12>>2];t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];KE(w,e,s,o,a,n,l);t[r>>2]=t[w>>2];t[r+4>>2]=t[w+4>>2];t[r+8>>2]=t[w+8>>2];t[r+12>>2]=t[w+12>>2];A=A+1|0}t[u>>2]=b;h=k;return}function KE(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;n=+n;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;k=h;h=h+32|0;o=k+16|0;s=k;u=f&15;l=1400;while(1){b=t[l>>2]|0;if(!b)break;if((u|0)==(b|0)){w=4;break}l=l+24|0}if((w|0)==4){d=+c[l+8>>3]*a;c[i>>3]=d*+c[i>>3];b=i+8|0;c[b>>3]=d*+c[b>>3];w=t[l+16>>2]|0;t[s>>2]=t[r>>2];t[s+4>>2]=t[r+4>>2];t[s+8>>2]=t[r+8>>2];t[s+12>>2]=t[r+12>>2];t[o>>2]=t[i>>2];t[o+4>>2]=t[i+4>>2];t[o+8>>2]=t[i+8>>2];t[o+12>>2]=t[i+12>>2];N5[w&15](A,s,o,a,n,f);c[r>>3]=+c[i>>3]+ +c[r>>3];w=r+8|0;c[w>>3]=+c[b>>3]+ +c[w>>3]}t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];h=k;return}function $E(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l+8|0;a=l;A=Hw(e,99796)|0;if((A|0)!=0?(i[A>>0]|0)!=0:0){r=A;f=5}else{A=Hw(e,99808)|0;if((A|0)!=0?(i[A>>0]|0)!=0:0){r=A;f=5}else A=0}if((f|0)==5){A=GE(r,0,120)|0;if(!A){t[a>>2]=Mk(e)|0;nw(0,99815,a)|0;t[n>>2]=r;nw(3,99868,n)|0}}h=l;return A|0}function eB(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;n=h;h=h+16|0;a=KF(304)|0;if(!a)nw(1,99876,n)|0;i=e+16|0;e=t[i>>2]|0;t[a>>2]=e;t[i>>2]=a;if(!e){t[a+144>>2]=3;t[a+148>>2]=0;c[a+152>>3]=1.0}else{A=a+16|0;r=e+16|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));A=a+56|0;r=e+56|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));t[a+144>>2]=t[e+144>>2];t[a+148>>2]=t[e+148>>2];c[a+152>>3]=+c[e+152>>3];t[a+136>>2]=t[e+136>>2];A=a+96|0;r=e+96|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0))}h=n;return a|0}function AB(e){e=e|0;var A=0;e=e+16|0;A=t[e>>2]|0;if(!A)ge(99902,99906,117,99913);else{G2(t[A+212>>2]|0);G2(t[A+208>>2]|0);G2(t[A+216>>2]|0);G2(t[A+220>>2]|0);G2(t[A+224>>2]|0);G2(t[A+228>>2]|0);G2(t[A+232>>2]|0);G2(t[A+236>>2]|0);G2(t[A+240>>2]|0);G2(t[A+244>>2]|0);G2(t[A+248>>2]|0);G2(t[A+252>>2]|0);G2(t[A+256>>2]|0);G2(t[A+272>>2]|0);G2(t[A+284>>2]|0);G2(t[A+280>>2]|0);t[e>>2]=t[A>>2];G2(A);return}}function rB(e,A,r,n,f,l,s){e=e|0;A=A|0;r=r|0;n=n|0;f=f|0;l=l|0;s=s|0;var c=0,o=0;o=t[e+16>>2]|0;c=t[e+152>>2]|0;if((A|0)!=0&(c&32768|0)!=0)t[o+192>>2]=A;if(((c&65536|0)!=0?(t[o+212>>2]=UF(l,s)|0,(r|0)!=0):0)?(i[r>>0]|0)!=0:0){t[o+208>>2]=UF(r,s)|0;e=1}else e=0;do{if(c&4194304){if(n|0?i[n>>0]|0:0){t[o+228>>2]=UF(n,s)|0;e=o+260|0;a[e>>1]=a[e>>1]|1;e=1;break}A=t[o+192>>2]|0;if(A){t[o+228>>2]=o3(A)|0;e=1}}}while(0);if((f|0)!=0&(c&8388608|0)!=0?(i[f>>0]|0)!=0:0){t[o+244>>2]=UF(f,s)|0;e=1}return e|0}function iB(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;s=h;h=h+80|0;l=s;f=s+8|0;n=t[(t[e>>2]|0)+168>>2]|0;a=t[(t[(t[n+16>>2]|0)+8>>2]|0)+92>>2]|0;aB(e,r);e=Hw(A,141060)|0;if((e|0)!=0?(i[e>>0]|0)!=0:0){bw(r,e)|0;a=r+4|0;e=t[a>>2]|0;if(e>>>0>=(t[r+8>>2]|0)>>>0){ow(r,1)|0;e=t[a>>2]|0}i[e>>0]=0;e=t[r>>2]|0;t[a>>2]=e}else{if((n|0)!=(A|0)&(a|0)!=0){bw(r,a)|0;a=r+4|0;e=t[a>>2]|0;if(e>>>0>=(t[r+8>>2]|0)>>>0){ow(r,1)|0;e=t[a>>2]|0}t[a>>2]=e+1;i[e>>0]=95}switch(Yd(A)|0){case 0:{a=(n|0)==(A|0)?111494:99927;e=(t[A>>2]|0)>>>4;break}case 1:{a=111481;e=(t[A>>2]|0)>>>4;break}case 2:{a=111450;e=(t[A>>2]|0)>>>4;break}default:{a=0;e=0}}bw(r,a)|0;t[l>>2]=e;T4(f,99933,l)|0;bw(r,f)|0;a=r+4|0;e=t[a>>2]|0;if(e>>>0>=(t[r+8>>2]|0)>>>0){ow(r,1)|0;e=t[a>>2]|0}i[e>>0]=0;e=t[r>>2]|0;t[a>>2]=e}h=s;return e|0}function aB(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;l=h;h=h+144|0;f=l;n=l+8|0;r=t[e+160>>2]|0;if((r|0)>1?t[e+152>>2]&64|0:0){bw(A,t[(t[(t[e>>2]|0)+308>>2]|0)+(r<<2)>>2]|0)|0;a=A+4|0;r=t[a>>2]|0;if(r>>>0>=(t[A+8>>2]|0)>>>0){ow(A,1)|0;r=t[a>>2]|0}t[a>>2]=r+1;i[r>>0]=95}a=t[e+196>>2]|0;r=t[e+200>>2]|0;if((a|0)>0|(r|0)>0){t[f>>2]=a;t[f+4>>2]=r;T4(n,99937,f)|0;bw(A,n)|0}h=l;return}function tB(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0.0,f=0,l=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0.0,v=0;v=h;h=h+48|0;w=v+16|0;a=v+32|0;k=v;d=+c[(t[e+16>>2]|0)+152>>3];b=nB(r,0,a)|0;if((b+-1|0)>>>0>=2){i=+c[A+16>>3];l=(i+ +c[A>>3])*.5;c[k>>3]=l;n=+c[A+24>>3];o=(n+ +c[A+8>>3])*.5;c[k+8>>3]=o;l=i-l;o=n-o;u=d>.5;if(u)ui(e,.5);f=t[a>>2]|0;n=0.0;a=t[f+8>>2]|0;while(1){r=t[a>>2]|0;if(!r)break;A=a+4|0;if(+s[A>>2]==0.0)i=n;else{Ai(e,r);if(!(t[a+12>>2]|0))i=6.283185307179586;else i=+s[A>>2]*6.283185307179586+n;t[w>>2]=t[k>>2];t[w+4>>2]=t[k+4>>2];t[w+8>>2]=t[k+8>>2];t[w+12>>2]=t[k+12>>2];A=Ia(w,l,o,n,i)|0;fi(e,t[A>>2]|0,t[A+4>>2]|0,0,0,1);ys(A)}n=i;a=a+12|0}if(u)ui(e,d);fB(f)}h=v;return b|0}function nB(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0.0,c=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0;d=h;h=h+16|0;b=d+8|0;u=d;k=KF(12)|0;f=o3(e)|0;e:do{if(!A){A=1;a=f;while(1){switch(i[a>>0]|0){case 0:break e;case 58:{A=A+1|0;break}default:{}}a=a+1|0}}}while(0);t[k+4>>2]=f;w=KF((A*12|0)+12|0)|0;t[k+8>>2]=w;o=1.0;n=0;A=0;a=f;while(1){a=l3(a,107984)|0;if(!a){a=20;break}l=+lB(a);if(!(l>=0.0)){a=17;break}c=l-o;if(c>0.0)if((t[5156]|0)!=0?!(c<1.0e-05&c>-1.0e-05):0){t[u>>2]=e;nw(0,99948,u)|0;t[5156]=0;l=o;A=3}else l=o;c=o-l;if(l>0.0)i[w+(n*12|0)+8>>0]=1;if(i[a>>0]|0)t[w+(n*12|0)>>2]=a;a=n+1|0;s[w+(n*12|0)+4>>2]=l;if(c<1.0e-05&c>-1.0e-05){n=a;a=30;break}else{o=c;n=a;a=0}}e:do{if((a|0)==17){if(!(t[5156]|0))A=1;else{t[b>>2]=e;nw(1,99983,b)|0;t[5156]=0;A=2}fB(k)}else if((a|0)==20)if(o>0.0){a=0;f=0;while(1){if((a|0)>=(n|0))break;b=f+(+s[w+(a*12|0)+4>>2]==0.0&1)|0;a=a+1|0;f=b}if((f|0)<=0){a=w+((n+-1|0)*12|0)+4|0;s[a>>2]=o+ +s[a>>2];a=30;break}l=o/+(f|0);a=0;while(1){if((a|0)>=(n|0)){a=30;break e}f=w+(a*12|0)+4|0;if(+s[f>>2]==0.0)s[f>>2]=l;a=a+1|0}}else a=30}while(0);if((a|0)==30){while(1){a=n+-1|0;if((n|0)<=0)break;if(+s[w+(a*12|0)+4>>2]>0.0)break;else n=a}t[w+(n*12|0)>>2]=0;t[k>>2]=n;t[r>>2]=k}h=d;return A|0}function fB(e){e=e|0;G2(t[e+4>>2]|0);G2(t[e+8>>2]|0);G2(e);return}function lB(e){e=e|0;var A=0.0,r=0,a=0,n=0;a=h;h=h+16|0;r=a;e=C1(e,59)|0;if(!e)A=0.0;else{n=e+1|0;i[e>>0]=0;A=+e8(n,r);A=(A>=0.0?(t[r>>2]|0)!=(n|0):0)?A:-1.0}h=a;return+A}function sB(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0,f=0,l=0,o=0.0,u=0.0,b=0,w=0,k=0,d=0,v=0.0,g=0;g=h;h=h+80|0;n=g+64|0;d=g;v=+c[(t[e+16>>2]|0)+152>>3];k=nB(r,0,n)|0;if((k+-1|0)>>>0>=2){if(!i){t[d>>2]=t[A>>2];t[d+4>>2]=t[A+4>>2];t[d+8>>2]=t[A+8>>2];t[d+12>>2]=t[A+12>>2];w=d+16|0;b=A+16|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2];w=d+32|0;b=A+32|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2];w=d+48|0;b=A+48|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2]}else{w=A+32|0;t[d>>2]=t[w>>2];t[d+4>>2]=t[w+4>>2];t[d+8>>2]=t[w+8>>2];t[d+12>>2]=t[w+12>>2];w=d+16|0;b=A+48|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2];w=d+32|0;t[w>>2]=t[A>>2];t[w+4>>2]=t[A+4>>2];t[w+8>>2]=t[A+8>>2];t[w+12>>2]=t[A+12>>2];w=d+48|0;b=A+16|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2]}l=d+16|0;o=+c[l>>3];a=+c[d>>3];u=o-a;b=d+32|0;c[b>>3]=a;c[l>>3]=a;w=v>.5;if(w)ui(e,.5);n=t[n>>2]|0;f=d+48|0;i=t[n+8>>2]|0;while(1){r=t[i>>2]|0;if(!r)break;A=i+4|0;if(!(+s[A>>2]==0.0)){Ai(e,r);if(!(t[i+12>>2]|0))a=o;else a=u*+s[A>>2]+ +c[d>>3];c[b>>3]=a;c[l>>3]=a;ti(e,d,4,1);a=+c[l>>3];c[f>>3]=a;c[d>>3]=a}i=i+12|0}if(w)ui(e,v);fB(n)}h=g;return k|0}function cB(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;r=t[e+16>>2]|0;i=t[e+152>>2]|0;if(i&4259840|0){a=i&131072;n=a>>>16^2;t[r+264>>2]=n;f=r+268|0;t[f>>2]=n+2;n=r+272|0;G2(t[n>>2]|0);r=KF(t[f>>2]<<4)|0;t[n>>2]=r;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];n=r+16|0;A=A+16|0;t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];if(!(i&8192))Dr(e,r,r,2)|0;if(!a)IF(r)}return}function oB(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0,t=0,n=0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0,w=0,k=0;k=h;h=h+144|0;r=k+80|0;a=k+16|0;t=k;s=+c[A>>3];b=e+16|0;o=+c[b>>3];if(!(((((((((!(s>o)?(u=+c[e>>3],!(s>3],f=+c[e+24>>3],!(i>f)):0)?(l=+c[e+8>>3],!(i>3],!(s>o|s>3],!(s>f|s>3],!(s>o|s>3],!(s>f|s>3],!(s>o|s>3],!(u>f|u>3];if(!(i>+c[b>>3])){if(i<+c[e>>3]){r=e;w=16}}else{r=b;w=16}if((w|0)==16){w=0;c[r>>3]=i}i=+c[A+(a<<4)+8>>3];if(!(i>+c[t>>3])){if(i<+c[n>>3]){r=e;w=19}}else{r=b;w=19}if((w|0)==19){w=0;c[r+8>>3]=i}a=a+1|0}}}while(0);h=k;return}function uB(e){e=e|0;var A=0,r=0,i=0,a=0,n=0.0,f=0,l=0;A=h;h=h+48|0;r=A+32|0;i=A+16|0;a=A;l=e+48|0;f=e+16|0;t[a>>2]=t[e>>2];t[a+4>>2]=t[e+4>>2];t[a+8>>2]=t[e+8>>2];t[a+12>>2]=t[e+12>>2];t[i>>2]=t[l>>2];t[i+4>>2]=t[l+4>>2];t[i+8>>2]=t[l+8>>2];t[i+12>>2]=t[l+12>>2];t[r>>2]=t[f>>2];t[r+4>>2]=t[f+4>>2];t[r+8>>2]=t[f+8>>2];t[r+12>>2]=t[f+12>>2];n=+DF(a,i,r);f=e+32|0;t[a>>2]=t[e>>2];t[a+4>>2]=t[e+4>>2];t[a+8>>2]=t[e+8>>2];t[a+12>>2]=t[e+12>>2];t[i>>2]=t[l>>2];t[i+4>>2]=t[l+4>>2];t[i+8>>2]=t[l+8>>2];t[i+12>>2]=t[l+12>>2];t[r>>2]=t[f>>2];t[r+4>>2]=t[f+4>>2];t[r+8>>2]=t[f+8>>2];t[r+12>>2]=t[f+12>>2];e=n<4.0&+DF(a,i,r)<4.0&1;h=A;return e|0}function bB(e,A){e=e|0;A=A|0;var r=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0.0,z=0.0,W=0.0,Y=0.0,F=0,M=0;L=h;h=h+272|0;m=L+256|0;p=L+224|0;E=L+192|0;B=L+128|0;y=L+64|0;C=L;I=L+160|0;Z=L+96|0;G=L+32|0;g=t[A+16>>2]|0;v=t[g+144>>2]|0;d=g+16|0;t[B>>2]=t[d>>2];t[B+4>>2]=t[d+4>>2];t[B+8>>2]=t[d+8>>2];t[B+12>>2]=t[d+12>>2];t[B+16>>2]=t[d+16>>2];t[B+20>>2]=t[d+20>>2];t[B+24>>2]=t[d+24>>2];t[B+28>>2]=t[d+28>>2];g=t[(t[g+8>>2]|0)+88>>2]|0;t[C>>2]=0;t[C+4>>2]=0;t[C+8>>2]=0;t[C+12>>2]=0;t[C+16>>2]=0;t[C+20>>2]=0;t[C+24>>2]=0;t[C+28>>2]=0;if(!g){t[e>>2]=t[B>>2];t[e+4>>2]=t[B+4>>2];t[e+8>>2]=t[B+8>>2];t[e+12>>2]=t[B+12>>2];t[e+16>>2]=t[B+16>>2];t[e+20>>2]=t[B+20>>2];t[e+24>>2]=t[B+24>>2];t[e+28>>2]=t[B+28>>2]}else{A=B+16|0;if(+c[B>>3]==+c[A>>3]?(r=B+8|0,a=B+24|0,+c[r>>3]==+c[a>>3]):0){c[r>>3]=1797693134862315708145274.0e284;c[B>>3]=1797693134862315708145274.0e284;c[a>>3]=-1797693134862315708145274.0e284;c[A>>3]=-1797693134862315708145274.0e284}l=p+8|0;s=p+16|0;o=p+24|0;u=y+16|0;b=y+24|0;w=v+144|0;k=E+16|0;d=g+12|0;A=0;a=t[g+8>>2]|0;r=0;n=0.0;f=0;while(1){if((f|0)>=(t[g>>2]|0))break;t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];t[y+16>>2]=t[C+16>>2];t[y+20>>2]=t[C+20>>2];t[y+24>>2]=t[C+24>>2];t[y+28>>2]=t[C+28>>2];switch(t[a>>2]|0){case 1:case 0:{W=+c[a+8>>3];Y=+c[a+24>>3];c[p>>3]=W-Y;D=+c[a+16>>3];z=+c[a+32>>3];c[l>>3]=D-z;c[s>>3]=Y+W;c[o>>3]=z+D;Q=a+80|0;t[Q>>2]=t[p>>2];t[Q+4>>2]=t[p+4>>2];t[Q+8>>2]=t[p+8>>2];t[Q+12>>2]=t[p+12>>2];Q=a+96|0;t[Q>>2]=t[s>>2];t[Q+4>>2]=t[s+4>>2];t[Q+8>>2]=t[s+8>>2];t[Q+12>>2]=t[s+12>>2];t[m>>2]=t[p>>2];t[m+4>>2]=t[p+4>>2];t[m+8>>2]=t[p+8>>2];t[m+12>>2]=t[p+12>>2];hB(B,m);t[m>>2]=t[s>>2];t[m+4>>2]=t[s+4>>2];t[m+8>>2]=t[s+8>>2];t[m+12>>2]=t[s+12>>2];hB(B,m);break}case 3:case 2:{Q=a+80|0;F=a+8|0;wB(I,t[F+4>>2]|0,t[F>>2]|0,B);t[Q>>2]=t[I>>2];t[Q+4>>2]=t[I+4>>2];t[Q+8>>2]=t[I+8>>2];t[Q+12>>2]=t[I+12>>2];t[Q+16>>2]=t[I+16>>2];t[Q+20>>2]=t[I+20>>2];t[Q+24>>2]=t[I+24>>2];t[Q+28>>2]=t[I+28>>2];break}case 5:case 4:{F=a+80|0;Q=a+8|0;wB(Z,t[Q+4>>2]|0,t[Q>>2]|0,B);t[F>>2]=t[Z>>2];t[F+4>>2]=t[Z+4>>2];t[F+8>>2]=t[Z+8>>2];t[F+12>>2]=t[Z+12>>2];t[F+16>>2]=t[Z+16>>2];t[F+20>>2]=t[Z+20>>2];t[F+24>>2]=t[Z+24>>2];t[F+28>>2]=t[Z+28>>2];break}case 6:{F=a+80|0;Q=a+8|0;wB(G,t[Q+4>>2]|0,t[Q>>2]|0,B);t[F>>2]=t[G>>2];t[F+4>>2]=t[G+4>>2];t[F+8>>2]=t[G+8>>2];t[F+12>>2]=t[G+12>>2];t[F+16>>2]=t[G+16>>2];t[F+20>>2]=t[G+20>>2];t[F+24>>2]=t[G+24>>2];t[F+28>>2]=t[G+28>>2];break}case 7:{F=a+112|0;t[F>>2]=KF(56)|0;Q=o3(t[a+40>>2]|0)|0;M=t[F>>2]|0;t[M>>2]=Q;i[M+48>>0]=i[100029+(t[a+24>>2]|0)>>0]|0;t[y>>2]=r;c[u>>3]=n;t[b>>2]=t[b>>2]&-128|A&127;M=t[w>>2]|0;M=L5[t[M>>2]&63](M,y,1)|0;Q=t[F>>2]|0;t[Q+4>>2]=M;ex(m,v,Q);kB(E,+c[a+8>>3],+c[a+16>>3],t[F>>2]|0);F=a+80|0;t[F>>2]=t[E>>2];t[F+4>>2]=t[E+4>>2];t[F+8>>2]=t[E+8>>2];t[F+12>>2]=t[E+12>>2];t[F+16>>2]=t[E+16>>2];t[F+20>>2]=t[E+20>>2];t[F+24>>2]=t[E+24>>2];t[F+28>>2]=t[E+28>>2];t[m>>2]=t[E>>2];t[m+4>>2]=t[E+4>>2];t[m+8>>2]=t[E+8>>2];t[m+12>>2]=t[E+12>>2];hB(B,m);t[m>>2]=t[k>>2];t[m+4>>2]=t[k+4>>2];t[m+8>>2]=t[k+8>>2];t[m+12>>2]=t[k+12>>2];hB(B,m);if(!(t[d>>2]|0))t[d>>2]=109;break}case 10:{r=t[a+16>>2]|0;n=+c[a+8>>3];break}case 15:{A=t[a+8>>2]|0;break}default:{}}a=a+120|0;f=f+1|0}t[e>>2]=t[B>>2];t[e+4>>2]=t[B+4>>2];t[e+8>>2]=t[B+8>>2];t[e+12>>2]=t[B+12>>2];t[e+16>>2]=t[B+16>>2];t[e+20>>2]=t[B+20>>2];t[e+24>>2]=t[B+24>>2];t[e+28>>2]=t[B+28>>2]}h=L;return}function hB(e,A){e=e|0;A=A|0;var r=0.0,i=0;r=+c[A>>3];i=e+16|0;if(r>+c[i>>3])c[i>>3]=r;if(r<+c[e>>3])c[e>>3]=r;r=+c[A+8>>3];A=e+24|0;if(r>+c[A>>3])c[A>>3]=r;A=e+8|0;if(r<+c[A>>3])c[A>>3]=r;return}function wB(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0;d=h;h=h+48|0;s=d+32|0;u=d;a=+c[A>>3];b=u+16|0;c[b>>3]=a;c[u>>3]=a;a=+c[A+8>>3];w=u+24|0;c[w>>3]=a;o=u+8|0;c[o>>3]=a;l=1;while(1){if((l|0)>=(r|0))break;f=A+24|0;a=+c[f>>3];if(!(a<+c[u>>3])){if(a>+c[b>>3]){n=b;k=5}}else{n=u;k=5}if((k|0)==5){k=0;c[n>>3]=a}a=+c[A+32>>3];if(!(a<+c[o>>3])){if(a>+c[w>>3]){A=b;k=8}}else{A=u;k=8}if((k|0)==8){k=0;c[A+8>>3]=a}l=l+1|0;A=f}t[s>>2]=t[u>>2];t[s+4>>2]=t[u+4>>2];t[s+8>>2]=t[u+8>>2];t[s+12>>2]=t[u+12>>2];hB(i,s);t[s>>2]=t[b>>2];t[s+4>>2]=t[b+4>>2];t[s+8>>2]=t[b+8>>2];t[s+12>>2]=t[b+12>>2];hB(i,s);t[e>>2]=t[u>>2];t[e+4>>2]=t[u+4>>2];t[e+8>>2]=t[u+8>>2];t[e+12>>2]=t[u+12>>2];t[e+16>>2]=t[u+16>>2];t[e+20>>2]=t[u+20>>2];t[e+24>>2]=t[u+24>>2];t[e+28>>2]=t[u+28>>2];h=d;return}function kB(e,A,r,a){e=e|0;A=+A;r=+r;a=a|0;var t=0.0,n=0,f=0,l=0,s=0.0,o=0,u=0;u=h;h=h+16|0;f=u+8|0;l=u;t=+c[a+32>>3];s=+c[a+40>>3];switch(i[a+48>>0]|0){case 108:{c[f>>3]=A;t=t+A;n=l;o=5;break}case 110:{t=t*.5;c[f>>3]=A-t;t=t+A;n=l;o=5;break}case 114:{c[l>>3]=A;t=A-t;n=f;o=5;break}default:{A=0.0;t=0.0}}if((o|0)==5){c[n>>3]=t;A=+c[f>>3];t=+c[l>>3]}r=+c[a+16>>3]+r;c[e>>3]=A;c[e+8>>3]=r-s;c[e+16>>3]=t;c[e+24>>3]=r;h=u;return}function dB(e){e=e|0;if((t[e>>2]|0)==7)XF(t[e+112>>2]|0,1);return}function vB(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0.0;o=h;h=h+16|0;s=o;l=t[e+152>>2]|0;u=+c[e+432>>3];f=+c[e+352>>3]*.013888888888888888;a=f*u;c[e+488>>3]=a;n=+c[e+440>>3];f=f*n;c[e+496>>3]=f;c[e+520>>3]=u*.013888888888888888;r=e+528|0;c[r>>3]=n*.013888888888888888;if(l&4096|0)c[r>>3]=n*-.013888888888888888;r=(t[e+360>>2]|0)==0;u=+((t[e+448>>2]|0)>>>0);n=+((t[e+452>>2]|0)>>>0);c[e+368>>3]=(r?u:n)/a;c[e+376>>3]=(r?n:u)/f;si(e,dx(A,zw(A,0,101522,0)|0,195059)|0);t[e+160>>2]=0;gB(e,A);if(l&2|0)mB(e,A);r=sd(A)|0;while(1){if(!r)break;i[(t[r+16>>2]|0)+116>>0]=0;r=cd(A,r)|0}pB(e,s);while(1){if(!((EB(e)|0)<<24>>24))break;if((BB(e)|0)>1)Mr(e);yB(e);while(1){if(!((CB(e)|0)<<24>>24))break;IB(e,A);ZB(e)}if((BB(e)|0)>1)Vr(e);GB(e,s)}LB(e);h=o;return}function gB(e,A){e=e|0;A=A|0;var r=0;r=eB(e)|0;t[r+4>>2]=0;t[r+8>>2]=A;t[r+12>>2]=0;SY(e,t[(t[A+16>>2]|0)+12>>2]|0,A);zr(e,A);return}function mB(e,A){e=e|0;A=A|0;var r=0,a=0,t=0,n=0;Ai(e,134800);r=Hw(A,140977)|0;if(r|0?i[r>>0]|0:0)Ai(e,r);r=Hw(A,101446)|0;if(r|0?i[r>>0]|0:0)$r(e,r);iF(e,A);n=sd(A)|0;while(1){if(!n)break;r=Hw(n,140823)|0;if(r|0?i[r>>0]|0:0)$r(e,r);r=Hw(n,137729)|0;if(r|0?i[r>>0]|0:0)Ai(e,r);r=Hw(n,101418)|0;do{if(r|0?i[r>>0]|0:0){if(!(C1(r,58)|0)){$r(e,r);break}a=o3(r)|0;r=a;while(1){r=l3(r,107984)|0;if(!r)break;if(!(i[r>>0]|0)){r=0;continue}$r(e,r);r=0}G2(a)}}while(0);r=Hw(n,101446)|0;if(r|0?i[r>>0]|0:0)$r(e,r);t=Ow(A,n)|0;while(1){if(!t)break;r=Hw(t,140823)|0;do{if(r|0?i[r>>0]|0:0){if(!(C1(r,58)|0)){$r(e,r);break}a=o3(r)|0;r=a;while(1){r=l3(r,107984)|0;if(!r)break;if(!(i[r>>0]|0)){r=0;continue}$r(e,r);r=0}G2(a)}}while(0);r=Hw(t,101446)|0;if(r|0?i[r>>0]|0:0)$r(e,r);t=qw(A,t)|0}n=cd(A,n)|0}return}function pB(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;i=l+8|0;n=l;f=t[e>>2]|0;r=t[f+312>>2]|0;a=e+156|0;t[a>>2]=r;f=t[f+316>>2]|0;if(!f)if((r|0)>1?(t[e+152>>2]&64|0)==0:0){t[i>>2]=t[e+52>>2];nw(0,100567,i)|0;t[a>>2]=1;i=1;r=0}else{i=1;r=0}else{r=f+4|0;if((t[f>>2]|0)>1?(t[e+152>>2]&64|0)==0:0){t[n>>2]=t[e+52>>2];nw(0,100567,n)|0;t[f+8>>2]=(t[a>>2]|0)+1}i=t[r>>2]|0;r=f+8|0}t[e+160>>2]=i;t[A>>2]=r;h=l;return}function EB(e){e=e|0;return(t[e+160>>2]|0)<=(t[e+156>>2]|0)|0}function BB(e){e=e|0;var A=0;A=t[(t[e>>2]|0)+316>>2]|0;return t[((A|0)==0?e+156|0:A)>>2]|0}function yB(e){e=e|0;var A=0,r=0;r=e+172|0;A=t[r+4>>2]|0;e=e+196|0;t[e>>2]=t[r>>2];t[e+4>>2]=A;return}function CB(e){e=e|0;var A=0,r=0;r=t[e+196>>2]|0;if(((r|0)>-1?(r|0)<(t[e+164>>2]|0):0)?(A=t[e+200>>2]|0,(A|0)>-1):0)e=(A|0)<(t[e+168>>2]|0)&1;else e=0;return e|0}function IB(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+176|0;c=w;r=w+48|0;o=w+32|0;u=t[e+16>>2]|0;b=t[e+152>>2]|0;if((t[e+160>>2]|0)<=1?(t[e+196>>2]|0)<=0:0)f=0;else{cw(o,128,r);n=u+212|0;f=t[n>>2]|0;aB(e,o);bw(o,f)|0;l=o+4|0;r=t[l>>2]|0;if(r>>>0>=(t[o+8>>2]|0)>>>0){ow(o,1)|0;r=t[l>>2]|0}i[r>>0]=0;r=t[o>>2]|0;t[l>>2]=r;t[n>>2]=r}Ca(Hw(A,100032)|0);DB(e);Yr(e);$r(e,137314);Ai(e,134800);do{if(b&4259840|0){if((t[u+208>>2]|0)==0?(a[u+260>>1]&1)==0:0)break;if(b&655360){l=b&131072;t[u+264>>2]=l>>>16^2;r=KF((l>>>12^32)+32|0)|0;n=e+288|0;t[r>>2]=t[n>>2];t[r+4>>2]=t[n+4>>2];t[r+8>>2]=t[n+8>>2];t[r+12>>2]=t[n+12>>2];n=r+16|0;k=e+304|0;t[n>>2]=t[k>>2];t[n+4>>2]=t[k+4>>2];t[n+8>>2]=t[k+8>>2];t[n+12>>2]=t[k+12>>2];if(!l){IF(r);n=4}else n=2}else{r=0;n=0}if(!(b&8192))Dr(e,r,r,n)|0;t[u+272>>2]=r;t[u+268>>2]=n}}while(0);if(b&32768|0?(s=t[(t[A+16>>2]|0)+12>>2]|0,s|0):0)t[u+192>>2]=t[s>>2];n=(b&4|0)!=0;do{if(!n){r=u+208|0;if((t[r>>2]|0)==0?(a[u+260>>1]&1)==0:0)break;k=e+256|0;t[c>>2]=t[k>>2];t[c+4>>2]=t[k+4>>2];t[c+8>>2]=t[k+8>>2];t[c+12>>2]=t[k+12>>2];t[c+16>>2]=t[k+16>>2];t[c+20>>2]=t[k+20>>2];t[c+24>>2]=t[k+24>>2];t[c+28>>2]=t[k+28>>2];cB(e,c);Tr(e,t[r>>2]|0,t[u+228>>2]|0,t[u+244>>2]|0,t[u+212>>2]|0)}}while(0);zB(e,A);r=t[(t[A+16>>2]|0)+12>>2]|0;if(r|0)jF(e,4,r);do{if(!n){if((t[u+208>>2]|0)==0?(a[u+260>>1]&1)==0:0)break;Or(e)}}while(0);WB(e,A,b);Fr(e);if(f|0){hw(o);t[u+212>>2]=f}h=w;return}function ZB(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;f=h;h=h+32|0;r=f+24|0;A=f+16|0;s=f+8|0;a=f;n=e+196|0;l=e+188|0;t[A>>2]=t[n>>2];t[A+4>>2]=t[n+4>>2];t[r>>2]=t[l>>2];t[r+4>>2]=t[l+4>>2];QB(s,A,r);l=t[s+4>>2]|0;i=n;t[i>>2]=t[s>>2];t[i+4>>2]=l;if(!((CB(e)|0)<<24>>24)){i=e+180|0;if(!(t[e+184>>2]|0))t[e+200>>2]=t[e+176>>2];else t[n>>2]=t[e+172>>2];t[A>>2]=t[n>>2];t[A+4>>2]=t[n+4>>2];t[r>>2]=t[i>>2];t[r+4>>2]=t[i+4>>2];QB(a,A,r);l=t[a+4>>2]|0;s=n;t[s>>2]=t[a>>2];t[s+4>>2]=l}h=f;return}function GB(e,A){e=e|0;A=A|0;var r=0;r=t[A>>2]|0;if(!r){r=e+160|0;t[r>>2]=(t[r>>2]|0)+1}else{t[e+160>>2]=t[r>>2];t[A>>2]=r+4}return}function LB(e){e=e|0;Wr(e);AB(e);return}function QB(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=(t[r+4>>2]|0)+(t[A+4>>2]|0)|0;t[e>>2]=(t[r>>2]|0)+(t[A>>2]|0);t[e+4>>2]=i;return}function DB(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0.0;g=h;h=h+48|0;u=g+32|0;a=g+24|0;l=g+8|0;s=g+16|0;o=g;d=e+196|0;k=t[d>>2]|0;d=t[d+4>>2]|0;w=a;t[w>>2]=k;t[w+4>>2]=d;w=e+164|0;f=t[w>>2]|0;w=t[w+4>>2]|0;v=l;t[v>>2]=f;t[v+4>>2]=w;v=e+360|0;if(!(t[v>>2]|0)){s=k;l=d}else{t[u>>2]=t[a>>2];t[u+4>>2]=t[a+4>>2];rF(s,u);d=s;s=t[d>>2]|0;d=t[d+4>>2]|0;w=a;t[w>>2]=s;t[w+4>>2]=d;t[u>>2]=t[l>>2];t[u+4>>2]=t[l+4>>2];rF(o,u);w=o;f=t[w>>2]|0;w=t[w+4>>2]|0;t[l>>2]=f;t[l+4>>2]=w;l=d}r=+c[e+320>>3];n=r*+(s|0)-+c[e+240>>3];c[e+288>>3]=n;i=+c[e+328>>3];b=i*+(l|0)-+c[e+248>>3];c[e+296>>3]=b;c[e+304>>3]=r+n;c[e+312>>3]=i+b;a=e+472|0;if(!(t[(t[e+12>>2]|0)+28>>2]|0)){d=e+456|0;t[a>>2]=t[d>>2];t[a+4>>2]=t[d+4>>2];t[a+8>>2]=t[d+8>>2];t[a+12>>2]=t[d+12>>2]}else{k=e+456|0;t[a>>2]=t[((t[a>>2]|0)<(t[k>>2]|0)?a:k)>>2];d=e+476|0;t[d>>2]=t[((t[d>>2]|0)<(t[e+460>>2]|0)?a:k)+4>>2];d=e+480|0;t[d>>2]=t[((t[d>>2]|0)>(t[e+464>>2]|0)?a:k)+8>>2];d=e+484|0;t[d>>2]=t[((t[d>>2]|0)>(t[e+468>>2]|0)?a:k)+12>>2]}o=t[e+152>>2]|0;A=+c[e+336>>3];if(!(o&128)){A=(+(s|0)-+(f|0)*.5)*r+A;c[e+256>>3]=A;n=(+(l|0)-+(w|0)*.5)*i+ +c[e+344>>3];b=n;r=r+A;n=n+i}else{r=+c[e+368>>3]*.5;i=A-r;c[e+256>>3]=i;n=+c[e+344>>3];m=+c[e+376>>3]*.5;b=n-m;r=r+A;n=m+n;A=i}c[e+264>>3]=b;c[e+272>>3]=r;c[e+280>>3]=n;if(!(t[v>>2]|0)){i=+c[e+352>>3];c[e+504>>3]=+c[e+384>>3]/i-A;if(!(o&4096)){r=+c[e+392>>3]/i;A=b}else{r=-n;A=+c[e+392>>3]/i}c[e+512>>3]=r-A}else{a=e+384|0;i=+c[e+352>>3];c[e+512>>3]=-n-+c[e+392>>3]/i;if(!(o&4096))r=+c[a>>3]/i;else{r=-r;A=+c[a>>3]/i}c[e+504>>3]=r-A}h=g;return}function zB(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0,f=0,l=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+48|0;k=v;b=v+40|0;w=v+36|0;d=v+32|0;r=Hw(A,140977)|0;if(!r){l=1;r=137198}else{f=(i[r>>0]|0)==0;l=f&1;r=f?137198:r}n=t[e+152>>2]|0;f=(i[r>>0]|0)==116;if(!(n&256))if(f){o=(e1(r,137379)|0)==0;c=o?137198:r;o=o?1:l;u=8}else{c=r;o=l;u=8}else if(!(f?!(e1(r,137379)|0):0)){c=r;o=l;u=8}if((u|0)==8?!((o|0)!=0&(n&33554432|0)!=0):0)if(!((KY(c,b,w)|0)<<24>>24)){Ai(e,c);$r(e,137379);d=e+256|0;t[k>>2]=t[d>>2];t[k+4>>2]=t[d+4>>2];t[k+8>>2]=t[d+8>>2];t[k+12>>2]=t[d+12>>2];t[k+16>>2]=t[d+16>>2];t[k+20>>2]=t[d+20>>2];t[k+24>>2]=t[d+24>>2];t[k+28>>2]=t[d+28>>2];ni(e,k,1)}else{t[d>>2]=0;f=t[b>>2]|0;Ai(e,f);$r(e,137379);qY(A,d)|0;r=t[b+4>>2]|0;n=hx(A,t[47143]|0,0,0)|0;a=+s[w>>2];if(!r)ri(e,137314,n,a);else ri(e,r,n,a);d=(t[d>>2]|0)>>>1&1|2;w=e+256|0;t[k>>2]=t[w>>2];t[k+4>>2]=t[w+4>>2];t[k+8>>2]=t[w+8>>2];t[k+12>>2]=t[w+12>>2];t[k+16>>2]=t[w+16>>2];t[k+20>>2]=t[w+20>>2];t[k+24>>2]=t[w+24>>2];t[k+28>>2]=t[w+28>>2];ni(e,k,d);G2(f)}r=t[(t[(t[A+16>>2]|0)+8>>2]|0)+88>>2]|0;if(r|0)eF(e,r);h=v;return}function WB(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=(t[e>>2]|0)+28|0;t[n>>2]=(t[n>>2]|0)+1;n=(r&4|0)!=0;if(!n)YB(e,A,r);e:do{if(!(r&1)){if(r&16|0){Hr(e);a=sd(A)|0;while(1){if(!a)break;i=Ow(A,a)|0;while(1){if(!i)break;MB(e,i);i=qw(A,i)|0}a=cd(A,a)|0}Pr(e);xr(e);i=sd(A)|0;while(1){if(!i)break;FB(e,i);i=cd(A,i)|0}Jr(e);break}if(!(r&8)){a=sd(A)|0;while(1){if(!a)break e;FB(e,a);i=Ow(A,a)|0;while(1){if(!i)break;FB(e,t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0);MB(e,i);i=qw(A,i)|0}a=cd(A,a)|0}}xr(e);i=sd(A)|0;while(1){if(!i)break;if((VB(A,i)|0)<<24>>24)FB(e,i);i=cd(A,i)|0}Jr(e);Hr(e);a=sd(A)|0;while(1){if(!a)break;i=Ow(A,a)|0;while(1){if(!i)break;if((NB(A,i)|0)<<24>>24)MB(e,i);i=qw(A,i)|0}a=cd(A,a)|0}Pr(e)}else{xr(e);i=sd(A)|0;while(1){if(!i)break;FB(e,i);i=cd(A,i)|0}Jr(e);Hr(e);a=sd(A)|0;while(1){if(!a)break;i=Ow(A,a)|0;while(1){if(!i)break;MB(e,i);i=qw(A,i)|0}a=cd(A,a)|0}Pr(e)}}while(0);if(n)YB(e,A,r);return}function YB(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0,o=0,u=0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0;J=h;h=h+128|0;E=J+72|0;R=J+64|0;W=J+112|0;Y=J;F=J+104|0;M=A+16|0;V=(r&4|0)!=0;N=e+16|0;B=Y+32|0;y=Y+16|0;I=Y+8|0;Z=Y+24|0;G=Y+48|0;L=Y+40|0;Q=Y+56|0;D=(r&8|0)==0;z=F+4|0;p=1;while(1){f=t[M>>2]|0;if((p|0)>(t[f+180>>2]|0))break;m=t[(t[f+184>>2]|0)+(p<<2)>>2]|0;if((OY(e,m)|0)<<24>>24){if(V)YB(e,m,r);_Y(e,m);d=t[N>>2]|0;v=d+208|0;if(!(t[v>>2]|0))g=(a[d+260>>1]&1)!=0;else g=1;Ca(Hw(m,100032)|0);if(!(V|g^1)){k=(t[m+16>>2]|0)+16|0;t[E>>2]=t[k>>2];t[E+4>>2]=t[k+4>>2];t[E+8>>2]=t[k+8>>2];t[E+12>>2]=t[k+12>>2];t[E+16>>2]=t[k+16>>2];t[E+20>>2]=t[k+20>>2];t[E+24>>2]=t[k+24>>2];t[E+28>>2]=t[k+28>>2];cB(e,E);Tr(e,t[v>>2]|0,t[d+228>>2]|0,t[d+244>>2]|0,t[d+212>>2]|0)}t[W>>2]=0;f=qY(m,W)|0;if(!f)w=0;else{ii(e,f);w=t[W>>2]&1}k=m+16|0;f=n[(t[k>>2]|0)+112>>0]|0;do{if(!(f&1)){if(f&2|0){f=vx(m,0,106256)|0;l=vx(m,0,106264)|0;x=29;break}if(f&8|0){f=vx(m,0,106272)|0;l=vx(m,0,106280)|0;x=29;break}if(f&4|0){f=vx(m,0,106288)|0;l=vx(m,0,106296)|0;x=29;break}f=Hw(m,140823)|0;if(!f)l=0;else l=(i[f>>0]|0)==0?0:f;f=Hw(m,137729)|0;if(!f)f=l;else f=(i[f>>0]|0)==0?l:f;o=Hw(m,101418)|0;if(o)l=(i[o>>0]|0)==0?l:o;if(!((w|0)!=0&(l|0)!=0)){o=Hw(m,140977)|0;if(o|0?i[o>>0]|0:0){l=o;x=29;break}f=(f|0)==0?137314:f;u=(l|0)==0?134800:l;t[F>>2]=0;if(!w)l=0;else x=31}else x=29}else{f=vx(m,0,106240)|0;l=vx(m,0,106248)|0;x=29}}while(0);if((x|0)==29){t[F>>2]=0;f=(f|0)==0?137314:f;u=(l|0)==0?134800:l;x=31}if((x|0)==31){x=0;if(!((KY(u,F,E)|0)<<24>>24)){Ai(e,u);l=1}else{Ai(e,t[F>>2]|0);l=t[z>>2]|0;o=hx(m,t[47143]|0,0,0)|0;b=+s[E>>2];if(!l)ri(e,137314,o,b);else ri(e,l,o,b);l=(t[W>>2]|0)>>>1&1|2}}o=t[47142]|0;if((o|0?(C=Pw(m,o)|0,C|0):0)?i[C>>0]|0:0)ui(e,+wx(m,t[47142]|0,1.0,0.0));w=t[W>>2]|0;do{if(w&4){o=hx(m,t[47141]|0,1,0)|0;if(o|l|0){u=t[k>>2]|0;H=u+16|0;t[Y>>2]=t[H>>2];t[Y+4>>2]=t[H+4>>2];t[Y+8>>2]=t[H+8>>2];t[Y+12>>2]=t[H+12>>2];u=u+32|0;t[B>>2]=t[u>>2];t[B+4>>2]=t[u+4>>2];t[B+8>>2]=t[u+8>>2];t[B+12>>2]=t[u+12>>2];c[y>>3]=+c[B>>3];c[Z>>3]=+c[I>>3];c[G>>3]=+c[Y>>3];c[Q>>3]=+c[L>>3];if(!o)$r(e,137379);else $r(e,f);lN(e,Y,4,w,l)}}else{if(!(w&64)){if(hx(m,t[47141]|0,1,0)|0){$r(e,f);H=(t[k>>2]|0)+16|0;t[E>>2]=t[H>>2];t[E+4>>2]=t[H+4>>2];t[E+8>>2]=t[H+8>>2];t[E+12>>2]=t[H+12>>2];t[E+16>>2]=t[H+16>>2];t[E+20>>2]=t[H+20>>2];t[E+24>>2]=t[H+24>>2];t[E+28>>2]=t[H+28>>2];ni(e,E,l);break}if(!l)break;$r(e,137379);H=(t[k>>2]|0)+16|0;t[E>>2]=t[H>>2];t[E+4>>2]=t[H+4>>2];t[E+8>>2]=t[H+8>>2];t[E+12>>2]=t[H+12>>2];t[E+16>>2]=t[H+16>>2];t[E+20>>2]=t[H+20>>2];t[E+24>>2]=t[H+24>>2];t[E+28>>2]=t[H+28>>2];ni(e,E,l);break}H=t[k>>2]|0;w=H+16|0;t[Y>>2]=t[w>>2];t[Y+4>>2]=t[w+4>>2];t[Y+8>>2]=t[w+8>>2];t[Y+12>>2]=t[w+12>>2];H=H+32|0;t[B>>2]=t[H>>2];t[B+4>>2]=t[H+4>>2];t[B+8>>2]=t[H+8>>2];t[B+12>>2]=t[H+12>>2];c[y>>3]=+c[B>>3];c[Z>>3]=+c[I>>3];c[G>>3]=+c[Y>>3];c[Q>>3]=+c[L>>3];if(!(hx(m,t[47141]|0,1,0)|0))$r(e,137379);else $r(e,f);if((sB(e,Y,u,0)|0)>1){t[R>>2]=Mk(m)|0;nw(3,100400,R)|0}H=(t[k>>2]|0)+16|0;t[E>>2]=t[H>>2];t[E+4>>2]=t[H+4>>2];t[E+8>>2]=t[H+8>>2];t[E+12>>2]=t[H+12>>2];t[E+16>>2]=t[H+16>>2];t[E+20>>2]=t[H+20>>2];t[E+24>>2]=t[H+24>>2];t[E+28>>2]=t[H+28>>2];ni(e,E,0)}}while(0);G2(t[F>>2]|0);f=t[(t[k>>2]|0)+12>>2]|0;if(f|0)jF(e,5,f);if(g){if(V){H=(t[k>>2]|0)+16|0;t[E>>2]=t[H>>2];t[E+4>>2]=t[H+4>>2];t[E+8>>2]=t[H+8>>2];t[E+12>>2]=t[H+12>>2];t[E+16>>2]=t[H+16>>2];t[E+20>>2]=t[H+20>>2];t[E+24>>2]=t[H+24>>2];t[E+28>>2]=t[H+28>>2];cB(e,E);Tr(e,t[v>>2]|0,t[d+228>>2]|0,t[d+244>>2]|0,t[d+212>>2]|0)}Or(e)}e:do{if(!D){l=sd(m)|0;while(1){if(!l)break e;FB(e,l);f=Ow(m,l)|0;while(1){if(!f)break;MB(e,f);f=qw(m,f)|0}l=cd(m,l)|0}}}while(0);$Y(e,A);if(!V)YB(e,m,r)}p=p+1|0}h=J;return}function FB(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;s=h;h=h+32|0;r=s;f=t[e>>2]|0;l=A+16|0;e:do{if(((t[(t[l>>2]|0)+8>>2]|0?(JY(e,Bd(A)|0,A)|0)<<24>>24:0)?(c=e+256|0,t[r>>2]=t[c>>2],t[r+4>>2]=t[c+4>>2],t[r+8>>2]=t[c+8>>2],t[r+12>>2]=t[c+12>>2],t[r+16>>2]=t[c+16>>2],t[r+20>>2]=t[c+20>>2],t[r+24>>2]=t[c+24>>2],t[r+28>>2]=t[c+28>>2],(HY(A,r)|0)<<24>>24):0)?(a=(t[l>>2]|0)+116|0,n=t[f+28>>2]|0,(n|0)!=(i[a>>0]|0)):0){i[a>>0]=n;si(e,Mk(A)|0);r=dx(A,t[47169]|0,195059)|0;if(i[r>>0]|0)si(e,r);r=dx(A,t[47157]|0,195059)|0;A:do{if(i[r>>0]|0){JB(r)|0;r=188228;while(1){a=r;r=r+4|0;a=t[a>>2]|0;if(!a)break A;if((i[a>>0]|0)!=105)continue;if(!(e1(a,134335)|0))break e}}}while(0);PY(e,A);M5[t[(t[(t[(t[l>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&63](e,A);r=t[(t[l>>2]|0)+108>>2]|0;if(r|0?i[r+81>>0]|0:0)jF(e,10,r);XY(e)}}while(0);h=s;return}function MB(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;f=h;h=h+32|0;n=f;r=e+256|0;t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];t[n+16>>2]=t[r+16>>2];t[n+20>>2]=t[r+20>>2];t[n+24>>2]=t[r+24>>2];t[n+28>>2]=t[r+28>>2];e:do{if((RB(A,n)|0)<<24>>24?(a=A+-48|0,(xB(e,A)|0)<<24>>24):0){l=A+48|0;r=U2(Mk(t[((t[A>>2]&3|0)==3?A:l)+40>>2]|0)|0)|0;r=Z2(r+3+(U2(Mk(t[((t[A>>2]&3|0)==2?A:a)+40>>2]|0)|0)|0)|0)|0;$1(r,Mk(t[((t[A>>2]&3|0)==3?A:l)+40>>2]|0)|0)|0;l=(Bk(Bd(t[((t[A>>2]&3|0)==2?A:a)+40>>2]|0)|0)|0)==0;n=r+(U2(r)|0)|0;if(l){i[n>>0]=i[141747]|0;i[n+1>>0]=i[141748]|0;i[n+2>>0]=i[141749]|0}else{i[n>>0]=i[137738]|0;i[n+1>>0]=i[137739]|0;i[n+2>>0]=i[137740]|0}b3(r,Mk(t[((t[A>>2]&3|0)==2?A:a)+40>>2]|0)|0)|0;si(e,r);G2(r);r=dx(A,t[47191]|0,195059)|0;if(i[r>>0]|0)si(e,r);r=dx(A,t[47185]|0,195059)|0;A:do{if(!(i[r>>0]|0))r=0;else{JB(r)|0;r=188228;while(1){a=r;r=r+4|0;a=t[a>>2]|0;if(!a){r=188228;break A}if((i[a>>0]|0)!=105)continue;if(!(e1(a,134335)|0))break e}}}while(0);tY(e,A,r);nY(e,A,r);fY(e)}}while(0);h=f;return}function VB(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+16|0;e=1;while(1){i=t[r>>2]|0;if((e|0)>(t[i+180>>2]|0)){e=1;break}if(!(Wd(t[(t[i+184>>2]|0)+(e<<2)>>2]|0,A)|0))e=e+1|0;else{e=0;break}}return e|0}function NB(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+16|0;e=1;while(1){i=t[r>>2]|0;if((e|0)>(t[i+180>>2]|0)){e=1;break}if(!(Wd(t[(t[i+184>>2]|0)+(e<<2)>>2]|0,A)|0))e=e+1|0;else{e=0;break}}return e|0}function RB(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+64|0;l=s+32|0;a=s;n=e+16|0;e=t[n>>2]|0;r=t[e+8>>2]|0;if((r|0)!=0?(r=r+8|0,t[a>>2]=t[r>>2],t[a+4>>2]=t[r+4>>2],t[a+8>>2]=t[r+8>>2],t[a+12>>2]=t[r+12>>2],t[a+16>>2]=t[r+16>>2],t[a+20>>2]=t[r+20>>2],t[a+24>>2]=t[r+24>>2],t[a+28>>2]=t[r+28>>2],t[l>>2]=t[A>>2],t[l+4>>2]=t[A+4>>2],t[l+8>>2]=t[A+8>>2],t[l+12>>2]=t[A+12>>2],t[l+16>>2]=t[A+16>>2],t[l+20>>2]=t[A+20>>2],t[l+24>>2]=t[A+24>>2],t[l+28>>2]=t[A+28>>2],(xY(a,l)|0)!=0):0)e=1;else f=3;do{if((f|0)==3){r=t[e+96>>2]|0;if(r){t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];t[l+16>>2]=t[A+16>>2];t[l+20>>2]=t[A+20>>2];t[l+24>>2]=t[A+24>>2];t[l+28>>2]=t[A+28>>2];if((CJ(r,l)|0)<<24>>24){e=1;break}e=t[n>>2]|0}e=t[e+108>>2]|0;if((e|0?i[e+81>>0]|0:0)?(t[l>>2]=t[A>>2],t[l+4>>2]=t[A+4>>2],t[l+8>>2]=t[A+8>>2],t[l+12>>2]=t[A+12>>2],t[l+16>>2]=t[A+16>>2],t[l+20>>2]=t[A+20>>2],t[l+24>>2]=t[A+24>>2],t[l+28>>2]=t[A+28>>2],(CJ(e,l)|0)<<24>>24):0){e=1;break}e=0}}while(0);h=s;return e|0}function xB(e,A){e=e|0;A=A|0;var r=0,a=0;e:do{if((t[e+156>>2]|0)>=2?(r=dx(A,t[47190]|0,195059)|0,(MY(e,r)|0)<<24>>24==0):0)if(!(i[r>>0]|0)){r=0;while(1){if((r|0)>=2){r=0;break e}a=(r|0)==1;a=dx(t[((t[A>>2]&3|0)==((a?2:3)|0)?A:A+((a?-1:1)*48|0)|0)+40>>2]|0,t[47167]|0,195059)|0;if(!(i[a>>0]|0)){r=1;break e}if(!((MY(e,a)|0)<<24>>24))r=r+1|0;else{r=1;break}}}else r=0;else r=1}while(0);return r|0}function JB(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+192|0;b=w+24|0;u=w+16|0;o=w+8|0;c=w;n=w+48|0;s=w+32|0;if(i[100282]|0){cw(188492,128,194826);i[100282]=0}cw(s,128,w+56|0);t[n>>2]=e;f=s+4|0;l=s+8|0;A=0;r=0;e:while(1){a=A;A:while(1)switch(YY(n,s)|0){case 0:{A=21;break e}case 40:if(!(a<<24>>24)){a=1;continue A}else{A=7;break e}case 41:if(!(a<<24>>24)){A=9;break e}else{a=0;continue A}default:break A}if(!(a<<24>>24)){if((r|0)==63){A=12;break}A=t[47124]|0;if(A>>>0>=(t[47125]|0)>>>0){ow(188492,1)|0;A=t[47124]|0}t[47124]=A+1;i[A>>0]=0;t[188228+(r<<2)>>2]=t[47124];r=r+1|0}A=t[f>>2]|0;if(A>>>0>=(t[l>>2]|0)>>>0){ow(s,1)|0;A=t[f>>2]|0}i[A>>0]=0;A=t[s>>2]|0;t[f>>2]=A;bw(188492,A)|0;A=t[47124]|0;if(A>>>0>=(t[47125]|0)>>>0){ow(188492,1)|0;A=t[47124]|0}t[47124]=A+1;i[A>>0]=0;A=a}do{if((A|0)==7){t[c>>2]=e;nw(1,100283,c)|0;t[47057]=0;hw(s)}else if((A|0)==9){t[o>>2]=e;nw(1,100317,o)|0;t[47057]=0;hw(s)}else if((A|0)==12){t[u>>2]=e;nw(0,100345,u)|0;t[47120]=0;hw(s)}else if((A|0)==21){if(a<<24>>24){t[b>>2]=e;nw(1,100368,b)|0;t[47057]=0;hw(s);break}t[188228+(r<<2)>>2]=0;hw(s);A=t[47124]|0;if(A>>>0>=(t[47125]|0)>>>0){ow(188492,1)|0;A=t[47124]|0}i[A>>0]=0;t[47124]=t[47123]}}while(0);h=w;return 188228}function HB(e){e=e|0;var A=0;A=h;h=h+e|0;h=h+15&-16;return A|0}function PB(){return h|0}function XB(e){e=e|0;h=e}function SB(e,A){e=e|0;A=A|0;h=e;w=A}function jB(e,A){e=e|0;A=A|0;if(!d){d=e;v=A}}function UB(e){e=e|0;G=e}function TB(){return G|0}function OB(e){e=e|0;t[46654]=e;return 0}function _B(){return t[46654]|0}function qB(e,A){e=e|0;A=A|0;Pe(0,e|0,A|0)|0;return}function KB(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;a=l+4|0;n=l;t[a>>2]=0;f=up()|0;dp(f,10976);dp(f,17220);dp(f,17440);tw(1)|0;aw(18)|0;while(1){e=qk(e)|0;i=t[a>>2]|0;if(!e)break;if(i|0){e=195059;continue}bp(f,e,r)|0;kp(f,e,A,a,n)|0;e=195059}h=l;return i|0}function $B(e){e=e|0;var A=0,r=0,i=0,n=0;n=h;h=h+16|0;A=n+4|0;r=n;i=t[(t[e+16>>2]|0)+8>>2]|0;e=e+64|0;switch(t[e>>2]|0){case 0:{KM(i);break}case 1:{if(a[(t[i+16>>2]|0)+136>>1]&1)sJ(i);break}case 4:case 5:case 6:{OM(i,r,A);ry(i,t[r>>2]|0,t[A>>2]|0,t[e>>2]|0);break}default:{}}h=n;return}function ey(e){e=e|0;var A=0,r=0,i=0,a=0;r=t[(t[e+16>>2]|0)+8>>2]|0;if(!(t[46655]|0)){t[46655]=t[4678];t[46656]=57;t[46657]=19}i=r+64|0;a=(t[i>>2]|0)+8|0;A=t[a>>2]|0;t[a>>2]=186620;switch(t[e+64>>2]|0){case 2:{RM(e,r,e,0);break}case 3:{RM(e,r,e,1);break}case 1:case 0:{if(!(t[e+152>>2]&134217728))ig(r,e)|0;break}case 6:case 5:case 4:{Ay(r);if(!(t[e+152>>2]&134217728))ig(r,e)|0;break}default:{}}t[(t[i>>2]|0)+8>>2]=A;return}function Ay(e){e=e|0;var A=0,r=0;A=t[46659]|0;if((A|0)!=(t[46658]|0)){r=t[t[46690]>>2]|0;if(!r){r=wJ(e,0,99808,195059)|0;t[t[46690]>>2]=r;A=t[46659]|0}if(A>>>0>=(t[46660]|0)>>>0){ow(186632,1)|0;A=t[46659]|0}i[A>>0]=0;A=t[46658]|0;t[46659]=A;Mw(e,r,A)|0}if(t[(t[e+16>>2]|0)+12>>2]|0){r=t[(t[46690]|0)+4>>2]|0;A=t[46675]|0;if(A>>>0>=(t[46676]|0)>>>0){ow(186696,1)|0;A=t[46675]|0}i[A>>0]=0;A=t[46674]|0;t[46675]=A;Mw(e,r,A)|0}Sw(e,66753,t[(t[46690]|0)+8236>>2]|0,195059)|0;A=0;while(1){if((A|0)==8)break;hw(186632+(A<<4)|0);A=A+1|0}G2(t[46690]|0);c[1]=1.0;c[5]=1.0;t[46691]=0;t[46695]=0;return}function ry(e,A,r,n){e=e|0;A=A|0;r=r|0;n=n|0;var f=0,l=0,s=0;l=Z2(8240)|0;t[46690]=l;e:do{switch(n|0){case 6:{a[l+8232>>1]=14;n=66769;break}case 5:{a[l+8232>>1]=12;n=66773;break}default:{n=Hw(e,66753)|0;if((n|0?i[n>>0]|0:0)?(f=iy(n)|0,(f&65535)>10):0){l=t[46690]|0;a[l+8232>>1]=f;break e}n=iy(66765)|0;l=t[46690]|0;a[l+8232>>1]=n;n=66765}}}while(0);t[l+8236>>2]=n;s=e+16|0;n=t[s>>2]|0;if(!(t[n+180>>2]|0))f=0;else{f=wJ(e,0,99808,195059)|0;l=t[46690]|0;n=t[s>>2]|0}t[l>>2]=f;if(!(i[n+113>>0]&8))n=0;else n=wJ(e,0,66777,195059)|0;t[(t[46690]|0)+4>>2]=n;l=wJ(e,1,99808,195059)|0;t[(t[46690]|0)+8>>2]=l;l=wJ(e,1,66777,195059)|0;t[(t[46690]|0)+12>>2]=l;l=wJ(e,2,99808,195059)|0;n=t[46690]|0;t[n+16>>2]=l;if(!r)f=0;else{f=wJ(e,2,66785,195059)|0;n=t[46690]|0}t[n+20>>2]=f;if(!A)f=0;else{f=wJ(e,2,66793,195059)|0;n=t[46690]|0}t[n+24>>2]=f;f=i[(t[s>>2]|0)+113>>0]|0;if(!(f&33))l=0;else{l=wJ(e,2,66777,195059)|0;n=t[46690]|0;f=i[(t[s>>2]|0)+113>>0]|0}t[n+28>>2]=l;if(!(f&2))l=0;else{l=wJ(e,2,66801,195059)|0;n=t[46690]|0;f=i[(t[s>>2]|0)+113>>0]|0}t[n+32>>2]=l;if(!(f&4))f=0;else{f=wJ(e,2,66810,195059)|0;n=t[46690]|0}t[n+36>>2]=f;n=0;while(1){if((n|0)==8)break;cw(186632+(n<<4)|0,1024,(t[46690]|0)+40+(n<<10)|0);n=n+1|0}return}function iy(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+1040|0;f=s;n=s+8|0;a=0;A=e;e:while(1){do{r=A;A=A+1|0;r=i[r>>0]|0;if(!(r<<24>>24))break e}while(((r<<24>>24)+-48|0)>>>0>=10);if((a|0)>=1023){l=7;break}i[n+a>>0]=r;a=a+1|0}if((l|0)==7){t[f>>2]=e;nw(0,66819,f)|0}i[n+a>>0]=0;l=(K3(n)|0)&65535;h=s;return l|0}function ay(e){e=e|0;var A=0,r=0;r=t[(t[e+16>>2]|0)+8>>2]|0;A=t[t[46690]>>2]|0;e=t[46663]|0;if(e>>>0>=(t[46664]|0)>>>0){ow(186648,1)|0;e=t[46663]|0}i[e>>0]=0;e=t[46662]|0;t[46663]=e;Mw(r,A,e)|0;if(t[(t[r+16>>2]|0)+12>>2]|0){A=t[(t[46690]|0)+4>>2]|0;e=t[46679]|0;if(e>>>0>=(t[46680]|0)>>>0){ow(186712,1)|0;e=t[46679]|0}i[e>>0]=0;e=t[46678]|0;t[46679]=e;Mw(r,A,e)|0}c[2]=1.0;c[6]=1.0;t[46692]=0;t[46696]=0;return}function ty(e){e=e|0;var A=0,r=0;r=t[(t[e+16>>2]|0)+8>>2]|0;e=t[46663]|0;if((t[46662]|0)!=(e|0)){A=t[(t[46690]|0)+8>>2]|0;if(e>>>0>=(t[46664]|0)>>>0){ow(186648,1)|0;e=t[46663]|0}i[e>>0]=0;e=t[46662]|0;t[46663]=e;Mw(r,A,e)|0}e=t[46679]|0;if((t[46678]|0)!=(e|0)){A=t[(t[46690]|0)+12>>2]|0;if(e>>>0>=(t[46680]|0)>>>0){ow(186712,1)|0;e=t[46679]|0}i[e>>0]=0;e=t[46678]|0;t[46679]=e;Mw(r,A,e)|0}c[9]=1.0;c[11]=1.0;t[46699]=0;t[46701]=0;return}function ny(e){e=e|0;var A=0,r=0;r=t[(t[e+16>>2]|0)+8>>2]|0;e=t[46663]|0;if((t[46662]|0)!=(e|0)){A=t[(t[46690]|0)+16>>2]|0;if(e>>>0>=(t[46664]|0)>>>0){ow(186648,1)|0;e=t[46663]|0}i[e>>0]=0;e=t[46662]|0;t[46663]=e;Mw(r,A,e)|0}e=t[46667]|0;if((t[46666]|0)!=(e|0)){A=t[(t[46690]|0)+24>>2]|0;if(e>>>0>=(t[46668]|0)>>>0){ow(186664,1)|0;e=t[46667]|0}i[e>>0]=0;e=t[46666]|0;t[46667]=e;Mw(r,A,e)|0}e=t[46671]|0;if((t[46670]|0)!=(e|0)){A=t[(t[46690]|0)+20>>2]|0;if(e>>>0>=(t[46672]|0)>>>0){ow(186680,1)|0;e=t[46671]|0}i[e>>0]=0;e=t[46670]|0;t[46671]=e;Mw(r,A,e)|0}e=t[46679]|0;if((t[46678]|0)!=(e|0)){A=t[(t[46690]|0)+28>>2]|0;if(e>>>0>=(t[46680]|0)>>>0){ow(186712,1)|0;e=t[46679]|0}i[e>>0]=0;e=t[46678]|0;t[46679]=e;Mw(r,A,e)|0}e=t[46683]|0;if((t[46682]|0)!=(e|0)){A=t[(t[46690]|0)+36>>2]|0;if(e>>>0>=(t[46684]|0)>>>0){ow(186728,1)|0;e=t[46683]|0}i[e>>0]=0;e=t[46682]|0;t[46683]=e;Mw(r,A,e)|0}e=t[46687]|0;if((t[46686]|0)!=(e|0)){A=t[(t[46690]|0)+32>>2]|0;if(e>>>0>=(t[46688]|0)>>>0){ow(186744,1)|0;e=t[46687]|0}i[e>>0]=0;e=t[46686]|0;t[46687]=e;Mw(r,A,e)|0}c[10]=1.0;c[12]=1.0;c[3]=1.0;c[4]=1.0;c[7]=1.0;c[8]=1.0;t[46700]=0;t[46702]=0;t[46693]=0;t[46694]=0;t[46697]=0;t[46698]=0;return}function fy(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+1056|0;l=g+16|0;v=g+8|0;d=g;s=g+32|0;b=t[(t[e+16>>2]|0)+12>>2]|0;w=t[11416+(b<<2)>>2]|0;bw(w,66916)|0;n=r+4|0;ky(s,+c[(t[n>>2]|0)+16>>3]);bw(w,s)|0;gy(e,195059,t[t[n>>2]>>2]|0);by(e);k=i[r+48>>0]|0;k=k<<24>>24==108?-1:k<<24>>24==114&1;n=t[n>>2]|0;if(!n)n=0;else n=t[n+24>>2]&127;f=a[(t[46690]|0)+8232>>1]|0;if((f&65535)>14?(o=t[11464+((f&65535)+-15<<2)>>2]&n,u=186764+(b<<2)|0,(t[u>>2]|0)!=(o|0)):0){t[d>>2]=o;T4(s,66919,d)|0;bw(w,s)|0;t[u>>2]=o}d=A+8|0;c[d>>3]=+c[d>>3]+ +c[r+24>>3];bw(w,66925)|0;t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];wy(w,l);t[v>>2]=k;T4(s,102220,v)|0;bw(w,s)|0;ky(s,+c[r+32>>3]);bw(w,s)|0;gy(e,195059,t[r>>2]|0);h=g;return}function ly(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=h;h=h+1040|0;a=f;n=f+16|0;i=t[(t[e+16>>2]|0)+12>>2]|0;uy(e);by(e);if(!r){e=t[11416+(i<<2)>>2]|0;bw(e,66913)|0}else{if((r|1|0)==3)py(e,r,A,2);else Ey(e);e=t[11416+(i<<2)>>2]|0;bw(e,66910)|0}t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];wy(e,a);ky(n,+c[A+16>>3]-+c[A>>3]);bw(e,n)|0;ky(n,+c[A+24>>3]-+c[A+8>>3]);bw(e,n)|0;h=f;return}function sy(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;uy(e);by(e);if(!i)hy(e,112,A,r);else{if((i|1|0)==3)py(e,i,A,r);else Ey(e);hy(e,80,A,r)}return}function cy(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;uy(e);by(e);if(!t)hy(e,66,A,r);else{if((t|1|0)==3)py(e,t,A,r);else Ey(e);hy(e,98,A,r)}return}function oy(e,A,r){e=e|0;A=A|0;r=r|0;uy(e);by(e);hy(e,76,A,r);return}function uy(e){e=e|0;var A=0,r=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+1184|0;f=u;a=u+24|0;o=u+8|0;cw(o,1024,u+152|0);l=e+16|0;A=t[l>>2]|0;n=+c[A+152>>3];r=8+(t[A+12>>2]<<3)|0;if(n!=+c[r>>3]){c[r>>3]=n;bw(o,66882)|0;c[f>>3]=+c[(t[l>>2]|0)+152>>3];T4(a,66896,f)|0;dy(a,0);bw(o,a)|0;a=o+4|0;A=t[a>>2]|0;r=o+8|0;if(A>>>0>=(t[r>>2]|0)>>>0){ow(o,1)|0;A=t[a>>2]|0}t[a>>2]=A+1;i[A>>0]=41;A=t[a>>2]|0;if(A>>>0>=(t[r>>2]|0)>>>0){ow(o,1)|0;A=t[a>>2]|0}i[A>>0]=0;A=t[o>>2]|0;t[a>>2]=A;gy(e,66901,A);A=t[l>>2]|0}A=t[A+160>>2]|0;if(A|0){l=o+4|0;s=o+8|0;e:while(1){f=A+4|0;A=t[A>>2]|0;if(!A)break;switch(i[A>>0]|0){case 102:{if(!(e1(A,111101)|0)){A=f;continue e}break}case 98:{if(!(e1(A,111083)|0)){A=f;continue e}break}case 115:{if(!(e1(A,111088)|0)){A=f;continue e}break}default:{}}bw(o,A)|0;do{a=A;A=A+1|0}while((i[a>>0]|0)!=0);if(i[A>>0]|0){r=t[l>>2]|0;if(r>>>0>=(t[s>>2]|0)>>>0){ow(o,1)|0;r=t[l>>2]|0}t[l>>2]=r+1;i[r>>0]=40;a=0;while(1){if(!(i[A>>0]|0))break;if(a|0){r=t[l>>2]|0;if(r>>>0>=(t[s>>2]|0)>>>0){ow(o,1)|0;r=t[l>>2]|0}t[l>>2]=r+1;i[r>>0]=44}bw(o,A)|0;do{r=A;A=A+1|0}while((i[r>>0]|0)!=0);a=a+1|0}A=t[l>>2]|0;if(A>>>0>=(t[s>>2]|0)>>>0){ow(o,1)|0;A=t[l>>2]|0}t[l>>2]=A+1;i[A>>0]=41}A=t[l>>2]|0;if(A>>>0>=(t[s>>2]|0)>>>0){ow(o,1)|0;A=t[l>>2]|0}i[A>>0]=0;A=t[o>>2]|0;t[l>>2]=A;gy(e,66901,A);A=f}hw(o)}h=u;return}function by(e){e=e|0;vy((t[e+16>>2]|0)+16|0);gy(e,75834,193758);return}function hy(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0;c=h;h=h+1040|0;s=c;l=c+16|0;f=t[11416+(t[(t[e+16>>2]|0)+12>>2]<<2)>>2]|0;n=f+4|0;e=t[n>>2]|0;if(e>>>0>=(t[f+8>>2]|0)>>>0){ow(f,1)|0;e=t[n>>2]|0}t[n>>2]=e+1;i[e>>0]=A;t[s>>2]=a;T4(l,66846,s)|0;bw(f,l)|0;e=0;while(1){if((e|0)>=(a|0))break;l=r+(e<<4)|0;t[s>>2]=t[l>>2];t[s+4>>2]=t[l+4>>2];t[s+8>>2]=t[l+8>>2];t[s+12>>2]=t[l+12>>2];wy(f,s);e=e+1|0}h=c;return}function wy(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+1024|0;i=r;ky(i,+c[A>>3]);bw(e,i)|0;ky(i,+NM(+c[A+8>>3]));bw(e,i)|0;h=r;return}function ky(e,A){e=e|0;A=+A;var r=0,i=0;r=h;h=h+16|0;i=r;c[i>>3]=A>-1.0e-08&A<1.0e-08?0.0:A;T4(e,66851,i)|0;dy(e,1);h=r;return}function dy(e,A){e=e|0;A=A|0;var r=0,a=0;r=C1(e,46)|0;if(!r){if(A|0){r=e+(U2(e)|0)|0;a=10}}else{while(1){e=r+1|0;if(!(i[e>>0]|0))break;else r=e}e:while(1){switch(i[r>>0]|0){case 46:{a=5;break e}case 48:break;default:{a=6;break e}}i[r>>0]=0;r=r+-1|0}if((a|0)==5)i[r>>0]=0;else if((a|0)==6)r=r+1|0;if(A|0)a=10}if((a|0)==10){i[r>>0]=32;i[r+1>>0]=0}return}function vy(e){e=e|0;var A=0,r=0,a=0,f=0,l=0,s=0;s=h;h=h+32|0;l=s+16|0;f=s;A=i[e+3>>0]|0;r=n[e>>0]|0;a=n[e+1>>0]|0;e=n[e+2>>0]|0;if(A<<24>>24==-1){t[f>>2]=r;t[f+4>>2]=a;t[f+8>>2]=e;T4(193758,75714,f)|0}else{t[l>>2]=r;t[l+4>>2]=a;t[l+8>>2]=e;t[l+12>>2]=A&255;T4(193758,66864,l)|0}h=s;return}function gy(e,A,r){e=e|0;A=A|0;r=r|0;my(t[11416+(t[(t[e+16>>2]|0)+12>>2]<<2)>>2]|0,A,r);return}function my(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;a=h;h=h+1040|0;f=a;n=a+8|0;l=U2(r)|0;t[f>>2]=A;t[f+4>>2]=l;T4(n,66857,f)|0;bw(e,n)|0;bw(e,r)|0;r=e+4|0;A=t[r>>2]|0;if(A>>>0>=(t[e+8>>2]|0)>>>0){ow(e,1)|0;A=t[r>>2]|0}t[r>>2]=A+1;i[A>>0]=32;h=a;return}function py(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0.0,l=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0;B=h;h=h+1120|0;g=B+64|0;E=B+80|0;l=B+32|0;d=B+16|0;v=B;m=t[e+16>>2]|0;n=+(t[m+136>>2]|0)*.017453292519943295;if((f[(t[46690]|0)+8232>>1]|0)<14)Ey(e);else{cw(E,1024,B+96|0);p=(A|0)==2;if(p){zJ(r,l,a,n,2);r=E+4|0;A=t[r>>2]|0;if(A>>>0>=(t[E+8>>2]|0)>>>0){ow(E,1)|0;A=t[r>>2]|0}t[r>>2]=A+1;i[A>>0]=91;t[g>>2]=t[l>>2];t[g+4>>2]=t[l+4>>2];t[g+8>>2]=t[l+8>>2];t[g+12>>2]=t[l+12>>2];wy(E,g);v=l+16|0;t[g>>2]=t[v>>2];t[g+4>>2]=t[v+4>>2];t[g+8>>2]=t[v+8>>2];t[g+12>>2]=t[v+12>>2];wy(E,g)}else{zJ(r,l,a,0.0,3);k=+c[l+24>>3];b=+c[l>>3];if(n==0.0){u=+c[l+8>>3];w=k*.25;n=u;o=b}else{w=k*.25;y=w;o=+W(+n)*y+b;u=+c[l+8>>3];n=+Y(+n)*y+u}c[d>>3]=o;c[d+8>>3]=n;c[v>>3]=b;c[v+8>>3]=u;r=E+4|0;A=t[r>>2]|0;if(A>>>0>=(t[E+8>>2]|0)>>>0){ow(E,1)|0;A=t[r>>2]|0}t[r>>2]=A+1;i[A>>0]=40;t[g>>2]=t[d>>2];t[g+4>>2]=t[d+4>>2];t[g+8>>2]=t[d+8>>2];t[g+12>>2]=t[d+12>>2];wy(E,g);By(E,w);t[g>>2]=t[v>>2];t[g+4>>2]=t[v+4>>2];t[g+8>>2]=t[v+8>>2];t[g+12>>2]=t[v+12>>2];wy(E,g);By(E,k)}bw(E,66907)|0;A=m+140|0;n=+s[A>>2];r=m+56|0;if(n>0.0){yy(E,n,r);yy(E,+s[A>>2],m+96|0)}else{yy(E,0.0,r);yy(E,1.0,m+96|0)}ww(E)|0;l=E+4|0;A=t[l>>2]|0;a=E+8|0;r=A>>>0>=(t[a>>2]|0)>>>0;if(p){if(r){ow(E,1)|0;A=t[l>>2]|0}t[l>>2]=A+1;i[A>>0]=93}else{if(r){ow(E,1)|0;A=t[l>>2]|0}t[l>>2]=A+1;i[A>>0]=41}A=t[l>>2]|0;if(A>>>0>=(t[a>>2]|0)>>>0){ow(E,1)|0;A=t[l>>2]|0}i[A>>0]=0;p=t[E>>2]|0;t[l>>2]=p;gy(e,66904,p);hw(E)}h=B;return}function Ey(e){e=e|0;vy((t[e+16>>2]|0)+56|0);gy(e,66904,193758);return}function By(e,A){e=e|0;A=+A;var r=0,i=0;r=h;h=h+1024|0;i=r;ky(i,A);bw(e,i)|0;h=r;return}function yy(e,A,r){e=e|0;A=+A;r=r|0;var i=0,a=0,t=0;i=h;h=h+1040|0;t=i;a=i+8|0;c[t>>3]=A;T4(a,94168,t)|0;dy(a,1);vy(r);my(e,a,193758);h=i;return}function Cy(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;i=h;h=h+1040|0;f=i;a=i+16|0;n=t[11416+(t[(t[e+16>>2]|0)+12>>2]<<2)>>2]|0;bw(n,67013)|0;t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];wy(n,f);ky(a,+c[r+16>>3]-+c[r>>3]);bw(n,a)|0;ky(a,+c[r+24>>3]-+c[r+8>>3]);bw(n,a)|0;gy(e,195059,t[A+8>>2]|0);h=i;return}function Iy(e){e=e|0;var A=0;switch(t[e+64>>2]|0){case 0:{A=Im(t[e>>2]|0)|0;hp(A,t[(t[e+16>>2]|0)+8>>2]|0,67797,0)|0;Zm(A);break}case 1:{KM(t[(t[e>>2]|0)+168>>2]|0);break}default:{}}return}function Zy(e){e=e|0;var A=0,r=0,a=0,n=0;a=h;h=h+16|0;A=a;r=t[(t[e+16>>2]|0)+8>>2]|0;if(!(t[46703]|0)){t[46703]=t[4678];t[46704]=57;t[46705]=19}t[(t[r+64>>2]|0)+8>>2]=186812;Gy(r,1);t[A>>2]=0;i[A+4>>0]=(i[(t[r+16>>2]|0)+115>>0]|0)==1&1;n=t[e+64>>2]|0;i[A+5>>0]=((n|0)==0|(n|0)==3)&1;i[A+6>>0]=0;Ly(r,e,1,A);h=a;return}function Gy(e,A){e=e|0;A=A|0;var r=0;t[e>>2]=t[e>>2]&-9;r=xv(e)|0;while(1){if(!r)break;Gy(r,0);r=Jv(r)|0}e:do{if(A|0){A=sd(e)|0;while(1){if(!A)break e;t[A>>2]=t[A>>2]&-9;r=Ow(e,A)|0;while(1){if(!r)break;t[r>>2]=t[r>>2]&-9;r=qw(e,r)|0}A=cd(e,A)|0}}}while(0);return}function Ly(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;w=k+8|0;b=k;u=(r|0)!=0;if(u){o=Uh(11836,t[4581]|0)|0;_d(e,1,141060,12,0);_d(e,2,141060,12,0);_d(e,0,141060,-12,0);a=Qy(e,0,o)|0;s=sd(e)|0;l=0;n=0;while(1){if(!s)break;if(!(y1(Mk(s)|0,108006,7)|0)){c=n;n=Dy(o,Mk(s)|0)|0}else{c=n+1|0;n=n+a|0}t[(Pd(s,141060,0)|0)+8>>2]=n;f=Ow(e,s)|0;n=l;while(1){if(!f)break;t[(Pd(f,141060,0)|0)+8>>2]=n;f=qw(e,f)|0;n=n+1|0}s=cd(e,s)|0;l=n;n=c}Ph(o)|0}else a=0;o=t[i>>2]|0;t[i>>2]=o+1;zy(A,o);hm(A,97374)|0;Wy(e,A,r,i);Yy(e,A,i);hm(A,97345)|0;zy(A,t[i>>2]|0);if(u){t[b>>2]=a;mm(A,67016,b)}else{t[w>>2]=t[(Pd(e,141060,0)|0)+8>>2];mm(A,67036,w)}My(e,A,r,Fy(e,A,r,i)|0,i);Vy(e,A,r,i);hm(A,153599)|0;w=(t[i>>2]|0)+-1|0;t[i>>2]=w;zy(A,w);if(u)hm(A,111008)|0;else hm(A,75357)|0;h=k;return}function Qy(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;if((yd(e)|0)!=(e|0)){i=A+1|0;t[(Pd(e,141060,0)|0)+8>>2]=A;if(!(y1(Mk(e)|0,108006,7)|0)){A=Mk(e)|0;Oy(r,A,t[(Pd(e,141060,0)|0)+8>>2]|0);A=i}else A=i}i=xv(e)|0;while(1){if(!i)break;e=Qy(i,A,r)|0;i=Jv(i)|0;A=e}return A|0}function Dy(e,A){e=e|0;A=A|0;e=L5[t[e>>2]&63](e,A,512)|0;if(!e)e=-1;else e=t[e+12>>2]|0;return e|0}function zy(e,A){e=e|0;A=A|0;while(1){if((A|0)<=0)break;hm(e,90574)|0;A=A+-1|0}return}function Wy(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;f=h;h=h+32|0;n=f+16|0;a=f+8|0;l=f;s=Mk(e)|0;zy(A,t[i>>2]|0);t[l>>2]=xy(s,i)|0;mm(A,67124,l);if(r|0){hm(A,97345)|0;zy(A,t[i>>2]|0);s=(Bk(e)|0)!=0;t[a>>2]=s?107652:137308;mm(A,67738,a);zy(A,t[i>>2]|0);s=(Ck(e)|0)!=0;t[n>>2]=s?107652:137308;mm(A,67755,n)}h=f;return}function Yy(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b+8|0;o=b;l=yd(e)|0;s=t[e>>2]&3;a=Vw(l,s,0)|0;e:do{if(a|0){c=r+5|0;while(1){if(!a)break e;n=Pw(e,a)|0;do{if(n|0){f=a+8|0;if(!(i[n>>0]|0)){n=t[f>>2]|0;if((i[n>>0]|0)!=108)break;if(e1(n,108224)|0)break}hm(A,97345)|0;zy(A,t[r>>2]|0);t[o>>2]=xy(t[f>>2]|0,r)|0;mm(A,67174,o);if(i[c>>0]|0?Hy(t[f>>2]|0)|0:0){Py(Pw(e,a)|0,A,r);break}t[u>>2]=xy(Pw(e,a)|0,r)|0;mm(A,67181,u)}}while(0);a=Vw(l,s,a)|0}}}while(0);h=b;return}function Fy(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;a=xv(e)|0;if(a){hm(A,97345)|0;n=t[i>>2]|0;t[i>>2]=n+1;zy(A,n);n=(r|0)!=0;if(n){hm(A,67098)|0;e=0;r=a}else{hm(A,67158)|0;zy(A,t[i>>2]|0);e=0;r=a}while(1){if(!r)break;if(!e)e=1;else hm(A,97345)|0;if(n)Jy(r,A,i);else{t[f>>2]=t[(Pd(r,141060,0)|0)+8>>2];mm(A,137395,f)}r=Jv(r)|0}if(n)e=1;else{t[i>>2]=(t[i>>2]|0)+-1;hm(A,153599)|0;zy(A,t[i>>2]|0);hm(A,97340)|0;e=1}}else e=0;h=l;return e|0}function My(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;n=sd(e)|0;if(!n){if((r|0)!=0&(i|0)!=0){t[a>>2]=(t[a>>2]|0)+-1;hm(A,153599)|0;zy(A,t[a>>2]|0);hm(A,97340)|0}}else{hm(A,97345)|0;f=(r|0)!=0;if(f)if(!i){i=t[a>>2]|0;t[a>>2]=i+1;zy(A,i);hm(A,67098)|0;i=0}else i=0;else{i=t[a>>2]|0;t[a>>2]=i+1;zy(A,i);hm(A,67112)|0;zy(A,t[a>>2]|0);i=0}while(1){if(!n)break;if(y1(Mk(n)|0,108006,7)|0){do{if(i)if(f){hm(A,97345)|0;break}else{hm(A,100999)|0;break}else i=1}while(0);Ry(n,A,r,a)}n=cd(e,n)|0}t[a>>2]=(t[a>>2]|0)+-1;hm(A,153599)|0;zy(A,t[a>>2]|0);hm(A,97340)|0}return}function Vy(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;a=sd(e)|0;e:do{if(a|0){while(1){if(!a)break e;if(Ow(e,a)|0)break;a=cd(e,a)|0}hm(A,97345)|0;l=t[i>>2]|0;t[i>>2]=l+1;zy(A,l);hm(A,67048)|0;l=(r|0)!=0;if(l)n=0;else{zy(A,t[i>>2]|0);n=0}while(1){if(!a)break;f=Ow(e,a)|0;while(1){if(!f)break;do{if(n)if(l){hm(A,97345)|0;break}else{hm(A,100999)|0;break}else n=1}while(0);Ny(f,A,r,i);f=qw(e,f)|0}a=cd(e,a)|0}t[i>>2]=(t[i>>2]|0)+-1;hm(A,153599)|0;zy(A,t[i>>2]|0);hm(A,97340)|0}}while(0);return}function Ny(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;s=h;h=h+32|0;l=s+24|0;f=s+16|0;n=s+8|0;a=s;if(!r){t[l>>2]=t[(Pd(e,141060,0)|0)+8>>2];mm(A,137395,l)}else{l=t[i>>2]|0;t[i>>2]=l+1;zy(A,l);hm(A,97374)|0;zy(A,t[i>>2]|0);t[a>>2]=t[(Pd(e,141060,0)|0)+8>>2];mm(A,67060,a);zy(A,t[i>>2]|0);t[n>>2]=t[(Pd(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,141060,0)|0)+8>>2];mm(A,67074,n);zy(A,t[i>>2]|0);t[f>>2]=t[(Pd(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,141060,0)|0)+8>>2];mm(A,67087,f);Yy(e,A,i);hm(A,153599)|0;l=(t[i>>2]|0)+-1|0;t[i>>2]=l;zy(A,l);hm(A,75357)|0}h=s;return}function Ry(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+32|0;f=l+16|0;n=l+8|0;a=l;if(!r){t[f>>2]=t[(Pd(e,141060,0)|0)+8>>2];mm(A,137395,f)}else{f=t[i>>2]|0;t[i>>2]=f+1;zy(A,f);hm(A,97374)|0;zy(A,t[i>>2]|0);t[a>>2]=t[(Pd(e,141060,0)|0)+8>>2];mm(A,67060,a);zy(A,t[i>>2]|0);t[n>>2]=xy(Mk(e)|0,i)|0;mm(A,67124,n);Yy(e,A,i);hm(A,153599)|0;f=(t[i>>2]|0)+-1|0;t[i>>2]=f;zy(A,f);hm(A,75357)|0}h=l;return}function xy(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;n=A+4|0;if(i[n>>0]|0)e=pJ(e)|0;if(!(t[46706]|0)){cw(186824,1024,0);r=e}else r=e;e:while(1){a=i[r>>0]|0;switch(a<<24>>24){case 0:break e;case 34:{bw(186824,67137)|0;break}case 92:{bw(186824,96616)|0;break}case 47:{bw(186824,67140)|0;break}case 8:{bw(186824,67143)|0;break}case 12:{bw(186824,67146)|0;break}case 10:{bw(186824,67149)|0;break}case 13:{bw(186824,67152)|0;break}case 9:{bw(186824,67155)|0;break}default:{A=t[46707]|0;if(A>>>0>=(t[46708]|0)>>>0){ow(186824,1)|0;A=t[46707]|0}t[46707]=A+1;i[A>>0]=a}}r=r+1|0}A=t[46707]|0;if(A>>>0>=(t[46708]|0)>>>0){ow(186824,1)|0;A=t[46707]|0}i[A>>0]=0;A=t[46706]|0;t[46707]=A;if(i[n>>0]|0)G2(e);return A|0}function Jy(e,A,r){e=e|0;A=A|0;r=r|0;Ly(e,A,0,r);e=xv(e)|0;while(1){if(!e)break;hm(A,97345)|0;Jy(e,A,r);e=Jv(e)|0}return}function Hy(e){e=e|0;var A=0;A=e+1|0;e:do{if((i[e>>0]|0)==95){e=(i[A>>0]|0)+-100<<24>>24;switch(((e&255)>>>2|e<<6&255)<<24>>24){case 0:{if(!(e1(A,67695)|0)){e=1;break e}break}case 2:{if(!(e1(A,67701)|0)){e=1;break e}break}case 1:{if(!(e1(A,67708)|0)){e=1;break e}return(e1(A,67722)|0)==0|0}case 4:{if(!(e1(A,67715)|0)){e=1;break e}e=(e1(A,67730)|0)==0&1;break e}default:{e=0;break e}}e=0}else e=0}while(0);return e|0}function Py(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;a=l;do{if(e|0?i[e>>0]|0:0){f=LE(e)|0;if(!f){t[a>>2]=e;nw(0,67186,a)|0;break}hm(A,153599)|0;n=t[r>>2]|0;t[r>>2]=n+1;zy(A,n);hm(A,67213)|0;n=f+8|0;e=0;a=0;while(1){if((a|0)>=(t[f>>2]|0))break;if(!e)e=1;else hm(A,97345)|0;Xy((t[n>>2]|0)+(a*80|0)|0,A,r);a=a+1|0}t[r>>2]=(t[r>>2]|0)+-1;hm(A,153599)|0;zy(A,t[r>>2]|0);hm(A,97340)|0;QE(f)}}while(0);h=l;return}function Xy(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0.0,G=0.0,L=0.0;I=h;h=h+240|0;y=I+224|0;B=I+216|0;E=I+208|0;p=I+200|0;m=I+192|0;g=I+184|0;v=I+176|0;d=I+152|0;k=I+136|0;w=I+128|0;b=I+112|0;u=I+104|0;o=I+96|0;s=I+88|0;l=I+72|0;f=I+48|0;C=I+40|0;n=I+8|0;a=I;i=t[r>>2]|0;t[r>>2]=i+1;zy(A,i);hm(A,97374)|0;zy(A,t[r>>2]|0);i=t[e>>2]|0;e:do{switch(i|0){case 1:case 0:{t[a>>2]=(i|0)==0?69:101;mm(A,67216,a);zy(A,t[r>>2]|0);L=+c[e+16>>3];G=+c[e+24>>3];Z=+c[e+32>>3];c[n>>3]=+c[e+8>>3];c[n+8>>3]=L;c[n+16>>3]=G;c[n+24>>3]=Z;mm(A,67229,n);break}case 3:case 2:{t[C>>2]=(i|0)==2?80:112;mm(A,67216,C);zy(A,t[r>>2]|0);Sy(A,e+8|0);break}case 5:case 4:{t[f>>2]=(i|0)==4?66:98;mm(A,67216,f);zy(A,t[r>>2]|0);Sy(A,e+8|0);break}case 6:{mm(A,67264,I+56|0);zy(A,t[r>>2]|0);Sy(A,e+8|0);break}case 7:{mm(A,67276,I+64|0);zy(A,t[r>>2]|0);L=+c[e+16>>3];c[l>>3]=+c[e+8>>3];c[l+8>>3]=L;mm(A,67288,l);zy(A,t[r>>2]|0);C=t[e+24>>2]|0;t[s>>2]=(C|0)==0?108:(C|0)==1?99:114;mm(A,67310,s);zy(A,t[r>>2]|0);c[o>>3]=+c[e+32>>3];mm(A,67326,o);zy(A,t[r>>2]|0);t[u>>2]=xy(t[e+40>>2]|0,r)|0;mm(A,67343,u);break}case 9:case 8:{t[b>>2]=(i|0)==8?67:99;mm(A,67216,b);zy(A,t[r>>2]|0);mm(A,67357,I+120|0);zy(A,t[r>>2]|0);t[w>>2]=xy(t[e+8>>2]|0,r)|0;mm(A,67374,w);break}case 13:case 14:{t[k>>2]=(i|0)==13?67:99;mm(A,67216,k);zy(A,t[r>>2]|0);switch(t[e+8>>2]|0){case 0:{mm(A,67357,I+144|0);zy(A,t[r>>2]|0);t[d>>2]=xy(t[e+16>>2]|0,r)|0;mm(A,67374,d);break e}case 1:{mm(A,67389,I+160|0);zy(A,t[r>>2]|0);jy(A,e+16|0,r);break e}default:{mm(A,67408,I+168|0);zy(A,t[r>>2]|0);Uy(A,e+16|0,r);break e}}}case 10:{mm(A,67427,v);zy(A,t[r>>2]|0);c[g>>3]=+c[e+8>>3];mm(A,67439,g);zy(A,t[r>>2]|0);t[m>>2]=xy(t[e+16>>2]|0,r)|0;mm(A,67455,m);break}case 11:{mm(A,67469,p);zy(A,t[r>>2]|0);t[E>>2]=xy(t[e+8>>2]|0,r)|0;mm(A,67481,E);break}case 15:{mm(A,67496,B);zy(A,t[r>>2]|0);t[y>>2]=t[e+8>>2];mm(A,67508,y);break}default:{}}}while(0);C=(t[r>>2]|0)+-1|0;t[r>>2]=C;zy(A,C);hm(A,75357)|0;h=I;return}function Sy(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0.0;l=h;h=h+48|0;f=l+32|0;n=l+16|0;a=l+8|0;i=t[A>>2]|0;r=t[A+4>>2]|0;mm(e,67669,l);A=0;while(1){if((A|0)>=(i|0))break;if((A|0)>0)mm(e,100999,a);s=+c[r+(A*24|0)+8>>3];c[n>>3]=+c[r+(A*24|0)>>3];c[n+8>>3]=s;mm(e,67681,n);A=A+1|0}mm(e,67622,f);h=l;return}function jy(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0;i=h;h=h+32|0;a=i+16|0;f=i;zy(e,t[r>>2]|0);n=+c[A+8>>3];c[f>>3]=+c[A>>3];c[f+8>>3]=n;mm(e,67625,f);zy(e,t[r>>2]|0);n=+c[A+24>>3];c[a>>3]=+c[A+16>>3];c[a+8>>3]=n;mm(e,67647,a);zy(e,t[r>>2]|0);Ty(e,t[A+32>>2]|0,t[A+36>>2]|0,r);h=i;return}function Uy(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0;i=h;h=h+48|0;a=i+24|0;l=i;zy(e,t[r>>2]|0);n=+c[A+8>>3];f=+c[A+16>>3];c[l>>3]=+c[A>>3];c[l+8>>3]=n;c[l+16>>3]=f;mm(e,67524,l);zy(e,t[r>>2]|0);f=+c[A+32>>3];n=+c[A+40>>3];c[a>>3]=+c[A+24>>3];c[a+8>>3]=f;c[a+16>>3]=n;mm(e,67552,a);zy(e,t[r>>2]|0);Ty(e,t[A+48>>2]|0,t[A+52>>2]|0,r);h=i;return}function Ty(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,o=0,u=0,b=0.0;o=h;h=h+48|0;l=o+32|0;f=o+16|0;n=o+8|0;mm(e,67580,o);a=0;while(1){if((a|0)>=(A|0))break;if((a|0)>0)mm(e,100999,n);b=+s[r+(a<<3)>>2];u=xy(t[r+(a<<3)+4>>2]|0,i)|0;c[f>>3]=b;t[f+8>>2]=u;mm(e,67591,f);a=a+1|0}mm(e,67622,l);h=o;return}function Oy(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=h;h=h+16|0;a=n;i=L5[t[e>>2]&63](e,A,512)|0;if(i){if((t[i+12>>2]|0)!=(r|0)){t[a>>2]=A;nw(0,67768,a)|0}}else{a=L2(1,16)|0;t[a+8>>2]=o3(A)|0;t[a+12>>2]=r;L5[t[e>>2]&63](e,a,1)|0}h=n;return}function _y(e,A,r){e=e|0;A=A|0;r=r|0;G2(t[A+8>>2]|0);G2(A);return}function qy(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;A=h;h=h+32|0;r=A+24|0;i=A+16|0;n=A;a=t[e+16>>2]|0;hm(e,68623)|0;s=t[t[e+12>>2]>>2]|0;l=t[s+4>>2]|0;f=t[s+8>>2]|0;t[n>>2]=t[s>>2];t[n+4>>2]=l;t[n+8>>2]=f;mm(e,68633,n);t[i>>2]=Mk(t[a+8>>2]|0)|0;mm(e,68668,i);t[r>>2]=P(t[e+168>>2]|0,t[e+164>>2]|0)|0;mm(e,68681,r);hm(e,68694)|0;hm(e,68704)|0;hm(e,68712)|0;hm(e,68720)|0;hm(e,68728)|0;hm(e,68736)|0;hm(e,68744)|0;hm(e,68748)|0;hm(e,68753)|0;h=A;return}function Ky(e){e=e|0;hm(e,68604)|0;return}function $y(e){e=e|0;t[46710]=2;return}function eC(e){e=e|0;t[46710]=1;return}function AC(e){e=e|0;t[46710]=2;return}function rC(e){e=e|0;t[46710]=0;return}function iC(e){e=e|0;t[46710]=2;return}function aC(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0.0,l=0,s=0.0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0;w=h;h=h+80|0;b=w;o=t[(t[e+16>>2]|0)+16>>2]|0;u=t[46710]|0;a=t[r+4>>2]|0;n=+c[e+352>>3]*+c[a+16>>3];f=t[e+360>>2]|0?1.5707963267948966:0.0;l=t[r>>2]|0;s=n*.3333333333333333*+((U2(l)|0)>>>0);a=t[a+8>>2]|0;if(!a)a=-1;else a=t[a+20>>2]|0;v=i[r+48>>0]|0;d=+c[A>>3];k=+c[A+8>>3];r=hC(l)|0;t[b>>2]=4;t[b+4>>2]=v<<24>>24==108?0:v<<24>>24==114?2:1;t[b+8>>2]=o;t[b+12>>2]=u;t[b+16>>2]=0;t[b+20>>2]=a;c[b+24>>3]=n;c[b+32>>3]=f;t[b+40>>2]=6;c[b+48>>3]=n;c[b+56>>3]=s;t[b+64>>2]=~~(d+(d>=0.0?.5:-.5));t[b+68>>2]=~~(k+(k+-72.0>=0.0?-71.5:-72.5));t[b+72>>2]=r;mm(e,68549,b);h=w;return}function tC(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;u=h;h=h+32|0;s=u;l=u+20|0;o=A+32|0;e:do{switch(t[o>>2]|0){case 5:{r=0;while(1){a=t[12724+(r<<2)>>2]|0;if((r|0)==8)break e;f=t[A>>2]|0;if((i[a>>0]|0)==(i[f>>0]|0)?(e1(a,f)|0)==0:0){c=10;break e}r=r+1|0}}case 1:{a=A+1|0;f=A+2|0;r=(bC(l,n[A>>0]|0,n[a>>0]|0,n[f>>0]|0)|0)+32|0;if(!(t[l>>2]|0))c=10;else{b=n[A>>0]|0;l=n[a>>0]|0;c=n[f>>0]|0;t[s>>2]=0;t[s+4>>2]=r;t[s+8>>2]=b;t[s+12>>2]=l;t[s+16>>2]=c;mm(e,68492,s);c=10}break}default:ge(138394,67889,163,67920)}}while(0);if((c|0)==10)t[A>>2]=r;t[o>>2]=6;h=u;return}function nC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0,s=0,o=0.0,u=0.0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0;i=h;h=h+112|0;a=i+8|0;m=i+104|0;g=i;s=t[e+16>>2]|0;v=~~+c[s+152>>3];d=t[s+16>>2]|0;k=t[s+56>>2]|0;w=t[46710]|0;oC(s,m,g);u=+c[A>>3];s=~~(u+(u>=0.0?.5:-.5));o=+c[A+8>>3];l=~~(o+(o>=0.0?.5:-.5));f=+c[A+16>>3];u=f-u;n=+c[A+24>>3];o=n-o;A=t[m>>2]|0;b=+c[g>>3];t[a>>2]=1;t[a+4>>2]=1;t[a+8>>2]=A;t[a+12>>2]=v;t[a+16>>2]=d;t[a+20>>2]=k;t[a+24>>2]=w;t[a+28>>2]=0;t[a+32>>2]=r|0?20:-1;c[a+40>>3]=b;t[a+48>>2]=0;c[a+56>>3]=0.0;t[a+64>>2]=s;t[a+68>>2]=l;t[a+72>>2]=~~(u+(u>=0.0?.5:-.5));t[a+76>>2]=~~(o+(o>=0.0?.5:-.5));t[a+80>>2]=s;t[a+84>>2]=l;t[a+88>>2]=~~(f+(f>=0.0?.5:-.5));t[a+92>>2]=~~(n+(n>=0.0?.5:-.5));mm(e,68427,a);h=i;return}function fC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;a=h;h=h+96|0;n=a+8|0;b=a+80|0;w=a;k=t[e+16>>2]|0;u=~~+c[k+152>>3];o=t[k+16>>2]|0;s=t[k+56>>2]|0;l=t[46710]|0;oC(k,b,w);b=t[b>>2]|0;f=+c[w>>3];t[n>>2]=2;t[n+4>>2]=3;t[n+8>>2]=b;t[n+12>>2]=u;t[n+16>>2]=o;t[n+20>>2]=s;t[n+24>>2]=l;t[n+28>>2]=0;t[n+32>>2]=i|0?20:-1;c[n+40>>3]=f;t[n+48>>2]=0;t[n+52>>2]=0;t[n+56>>2]=0;t[n+60>>2]=0;t[n+64>>2]=0;t[n+68>>2]=r+1;mm(e,68331,n);uC(e,A,r,1);h=a;return}function lC(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0.0,Q=0.0,D=0;G=h;h=h+192|0;Z=G+176|0;C=G+168|0;I=G+104|0;y=G+96|0;f=G+88|0;m=G+180|0;p=G+80|0;E=G+16|0;B=G;a=e+16|0;i=t[a>>2]|0;k=~~+c[i+152>>3];d=t[i+16>>2]|0;v=t[46710]|0;if((r|0)<=3)ge(67882,67889,360,67909);g=Z2((r*140|0)+140|0)|0;oC(i,m,p);if(!n){b=4;l=0;s=-1}else{b=5;l=t[(t[a>>2]|0)+56>>2]|0;s=20}Q=+c[A>>3];u=E+48|0;c[u>>3]=Q;L=+c[A+8>>3];c[E+56>>3]=L;t[f>>2]=~~(Q+(Q>=0.0?.5:-.5));t[f+4>>2]=~~(L+(L>=0.0?.5:-.5));o=B+8|0;i=g+(T4(g,81099,f)|0)|0;w=1;n=0;while(1){f=n+3|0;if((f|0)>=(r|0))break;t[E>>2]=t[u>>2];t[E+4>>2]=t[u+4>>2];t[E+8>>2]=t[u+8>>2];t[E+12>>2]=t[u+12>>2];a=1;while(1){if((a|0)==4){a=1;break}D=a+n|0;c[E+(a<<4)>>3]=+c[A+(D<<4)>>3];c[E+(a<<4)+8>>3]=+c[A+(D<<4)+8>>3];a=a+1|0}while(1){if((a|0)==7)break;Zx(B,E,3,+(a|0)*.16666666666666666,0,0);L=+c[B>>3];Q=+c[o>>3];t[y>>2]=~~(L+(L>=0.0?.5:-.5));t[y+4>>2]=~~(Q+(Q>=0.0?.5:-.5));a=a+1|0;i=i+(T4(i,81099,y)|0)|0}w=w+6|0;n=f}a=t[m>>2]|0;Q=+c[p>>3];t[I>>2]=3;t[I+4>>2]=b;t[I+8>>2]=a;t[I+12>>2]=k;t[I+16>>2]=d;t[I+20>>2]=l;t[I+24>>2]=v;t[I+28>>2]=0;t[I+32>>2]=s;c[I+40>>3]=Q;t[I+48>>2]=0;t[I+52>>2]=0;t[I+56>>2]=0;t[I+60>>2]=w;mm(e,68382,I);t[C>>2]=g;mm(e,81106,C);G2(g);a=w+-1|0;i=0;while(1){if((i|0)>=(w|0))break;t[Z>>2]=((i|0)%(a|0)|0|0)!=0&1;mm(e,81111,Z);i=i+1|0}hm(e,153599)|0;h=G;return}function sC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0;i=h;h=h+96|0;a=i+8|0;o=i+80|0;u=i;b=t[e+16>>2]|0;s=~~+c[b+152>>3];l=t[b+16>>2]|0;f=t[46710]|0;oC(b,o,u);o=t[o>>2]|0;n=+c[u>>3];t[a>>2]=2;t[a+4>>2]=1;t[a+8>>2]=o;t[a+12>>2]=s;t[a+16>>2]=l;t[a+20>>2]=0;t[a+24>>2]=f;t[a+28>>2]=0;t[a+32>>2]=0;c[a+40>>3]=n;t[a+48>>2]=0;t[a+52>>2]=0;t[a+56>>2]=0;t[a+60>>2]=0;t[a+64>>2]=0;t[a+68>>2]=r;mm(e,68331,a);uC(e,A,r,0);h=i;return}function cC(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=A;mm(e,68325,i);h=r;return}function oC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;switch(t[e+144>>2]|0){case 1:{i=10.0;e=1;break}case 2:{i=10.0;e=2;break}default:{i=0.0;e=0}}t[A>>2]=e;c[r>>3]=i;return}function uC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0.0;l=h;h=h+16|0;f=l+8|0;n=l;a=0;while(1){if((a|0)>=(r|0))break;o=+c[A+(a<<4)>>3];s=+c[A+(a<<4)+8>>3];t[n>>2]=~~(o+(o>=0.0?.5:-.5));t[n+4>>2]=~~(s+(s>=0.0?.5:-.5));mm(e,81099,n);a=a+1|0}if(i|0){s=+c[A>>3];o=+c[A+8>>3];t[f>>2]=~~(s+(s>=0.0?.5:-.5));t[f+4>>2]=~~(o+(o>=0.0?.5:-.5));mm(e,81099,f)}hm(e,153599)|0;h=l;return}function bC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;t[e>>2]=0;c=t[46711]|0;f=195075;n=0;l=-1;while(1){if((n|0)>=(c|0)){o=6;break}u=(a[190680+(n<<1)>>1]|0)-A|0;b=(a[191192+(n<<1)>>1]|0)-r|0;s=(a[191704+(n<<1)>>1]|0)-i|0;s=(P(b,b)|0)+(P(u,u)|0)+(P(s,s)|0)|0;if((s|0)<(f|0))if(!s)break;else{f=s;l=n}n=n+1|0}if((o|0)==6){t[46711]=c+1;if((c|0)==256)n=l;else{a[190680+(n<<1)>>1]=A;a[191192+(n<<1)>>1]=r;a[191704+(n<<1)>>1]=i;t[e>>2]=1}}return n|0}function hC(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;A=t[46712]|0;if(!A){t[46713]=64;A=Z2(64)|0;t[46712]=A;r=0}else r=0;while(1){n=e+1|0;a=i[e>>0]|0;if(!(a<<24>>24))break;e=t[46713]|0;if((r|0)>(e+-8|0)){A=e<<1;t[46713]=A;A=Q2(t[46712]|0,A)|0;t[46712]=A;A=A+r|0}if(a<<24>>24<=-1){i[A>>0]=92;t[f>>2]=a&255;T4(A+1|0,81224,f)|0;e=n;A=A+4|0;r=r+4|0;continue}if(a<<24>>24==92){i[A>>0]=92;r=r+1|0;A=A+1|0}i[A>>0]=a;e=n;A=A+1|0;r=r+1|0}i[A>>0]=0;h=l;return t[46712]|0}function wC(e){e=e|0;var A=0,r=0,a=0;r=t[e+16>>2]|0;switch(t[e+64>>2]|0){case 0:{hm(e,68220)|0;A=r+208|0;r=t[A>>2]|0;if(r|0?i[r>>0]|0:0){hm(e,68234)|0;hm(e,TF(t[A>>2]|0)|0)|0;hm(e,153599)|0}break}case 1:{A=r+208|0;a=t[A>>2]|0;if(a|0?i[a>>0]|0:0){hm(e,68234)|0;hm(e,TF(t[A>>2]|0)|0)|0;hm(e,102604)|0;hm(e,TF(Mk(t[r+8>>2]|0)|0)|0)|0;hm(e,153599)|0}break}case 3:{a=TF(Mk(t[r+8>>2]|0)|0)|0;hm(e,68243)|0;hm(e,a)|0;hm(e,68253)|0;hm(e,a)|0;hm(e,68208)|0;break}default:{}}return}function kC(e){e=e|0;var A=0;A=t[e+16>>2]|0;switch(t[e+64>>2]|0){case 2:{vC(e,t[A+264>>2]|0,t[A+272>>2]|0,t[A+268>>2]|0,t[A+208>>2]|0,t[A+228>>2]|0,t[A+244>>2]|0,t[A+212>>2]|0);break}case 3:{vC(e,t[A+264>>2]|0,t[A+272>>2]|0,t[A+268>>2]|0,t[A+208>>2]|0,t[A+228>>2]|0,t[A+244>>2]|0,t[A+212>>2]|0);hm(e,68212)|0;break}default:{}}return}function dC(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;n=t[e+16>>2]|0;vC(e,t[n+264>>2]|0,t[n+272>>2]|0,t[n+268>>2]|0,A,r,i,a);return}function vC(e,A,r,a,n,f,l,s){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;var o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0.0;y=h;h=h+128|0;B=y+120|0;m=y+112|0;g=y+96|0;v=y+80|0;d=y+56|0;E=y+48|0;k=y+40|0;p=y+24|0;w=y;e:do{if((r|0)!=0&(a|0)!=0){o=a+10|0;if((t[46714]|0)<(a|0)){t[46714]=o;b=Q2(t[46715]|0,o<<3)|0;t[46715]=b}else b=t[46715]|0;o=0;while(1){if((o|0)>=(a|0))break;C=+c[r+(o<<4)>>3];t[b+(o<<3)>>2]=~~(C+(C>=0.0?.5:-.5));C=+c[r+(o<<4)+8>>3];t[b+(o<<3)+4>>2]=~~(C+(C>=0.0?.5:-.5));o=o+1|0}u=e+64|0;o=t[u>>2]|0;r=(n|0)!=0;if(r&(o|0)==0){if(!(i[n>>0]|0))break;switch(A|0){case 0:{p=t[b>>2]|0;E=t[b+12>>2]|0;B=t[b+8>>2]|0;a=t[b+4>>2]|0;t[w>>2]=n;t[w+4>>2]=p;t[w+8>>2]=E;t[w+12>>2]=B;t[w+16>>2]=a;mm(e,67954,w);break e}case 1:{E=t[b>>2]|0;B=t[b+4>>2]|0;a=(t[b+8>>2]|0)-E|0;t[p>>2]=n;t[p+4>>2]=E;t[p+8>>2]=B;t[p+12>>2]=a;mm(e,67975,p);break e}case 2:{t[k>>2]=n;mm(e,67995,k);o=0;while(1){if((o|0)>=(a|0))break;p=t[46715]|0;B=t[p+(o<<3)+4>>2]|0;t[E>>2]=t[p+(o<<3)>>2];t[E+4>>2]=B;mm(e,68003,E);o=o+1|0}hm(e,153599)|0;break e}default:ge(138394,68010,63,68030)}}if(r&(o|0)==1){if(!(i[n>>0]|0))break;if(!A){E=t[b+12>>2]|0;B=t[b+8>>2]|0;a=t[b+4>>2]|0;t[d>>2]=t[b>>2];t[d+4>>2]=E;t[d+8>>2]=B;t[d+12>>2]=a;t[d+16>>2]=n;t[d+20>>2]=f;mm(e,68047,d);break}else ge(138394,68010,75,68030)}if((o&-2|0)==2){switch(A|0){case 1:{hm(e,68080)|0;break}case 0:{hm(e,68101)|0;break}case 2:{hm(e,68120)|0;break}default:ge(138394,68010,91,68030)}if(s|0?i[s>>0]|0:0){hm(e,73600)|0;hm(e,qF(s)|0)|0;hm(e,98744)|0}if(r?i[n>>0]|0:0){hm(e,68139)|0;hm(e,qF(n)|0)|0;hm(e,98744)|0}if(l|0?i[l>>0]|0:0){hm(e,74559)|0;hm(e,TF(l)|0)|0;hm(e,98744)|0}if(f|0?i[f>>0]|0:0){hm(e,68147)|0;hm(e,TF(f)|0)|0;hm(e,98744)|0}hm(e,68156)|0;hm(e,68164)|0;A:do{switch(A|0){case 1:{a=t[46715]|0;E=t[a>>2]|0;B=t[a+4>>2]|0;a=(t[a+8>>2]|0)-E|0;t[v>>2]=E;t[v+4>>2]=B;t[v+8>>2]=a;mm(e,68174,v);break}case 0:{p=t[46715]|0;E=t[p+12>>2]|0;B=t[p+8>>2]|0;a=t[p+4>>2]|0;t[g>>2]=t[p>>2];t[g+4>>2]=E;t[g+8>>2]=B;t[g+12>>2]=a;mm(e,68183,g);break}case 2:{E=t[46715]|0;o=t[E+4>>2]|0;t[m>>2]=t[E>>2];t[m+4>>2]=o;mm(e,68195,m);o=1;while(1){if((o|0)>=(a|0))break A;p=t[46715]|0;E=t[p+(o<<3)+4>>2]|0;t[B>>2]=t[p+(o<<3)>>2];t[B+4>>2]=E;mm(e,68201,B);o=o+1|0}}default:{}}}while(0);if((t[u>>2]|0)==3){hm(e,73424)|0;break}else{hm(e,68208)|0;break}}}}while(0);h=y;return}function gC(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;A=h;h=h+32|0;r=A+24|0;i=A+16|0;n=A;a=t[e+16>>2]|0;hm(e,68623)|0;s=t[t[e+12>>2]>>2]|0;l=t[s+4>>2]|0;f=t[s+8>>2]|0;t[n>>2]=t[s>>2];t[n+4>>2]=l;t[n+8>>2]=f;mm(e,68633,n);t[i>>2]=Mk(t[a+8>>2]|0)|0;mm(e,68668,i);t[r>>2]=P(t[e+168>>2]|0,t[e+164>>2]|0)|0;mm(e,68681,r);hm(e,68694)|0;hm(e,68704)|0;hm(e,68712)|0;hm(e,68720)|0;hm(e,68728)|0;hm(e,68736)|0;hm(e,68744)|0;hm(e,68748)|0;hm(e,68753)|0;h=A;return}function mC(e){e=e|0;hm(e,68604)|0;return}function pC(e){e=e|0;t[46716]=2;return}function EC(e){e=e|0;t[46716]=1;return}function BC(e){e=e|0;t[46716]=2;return}function yC(e){e=e|0;t[46716]=0;return}function CC(e){e=e|0;t[46716]=2;return}function IC(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0.0,w=0.0,k=0;u=h;h=h+80|0;o=u;l=t[(t[e+16>>2]|0)+16>>2]|0;s=t[46716]|0;a=t[r+4>>2]|0;n=+c[e+352>>3]*+c[a+16>>3];f=t[e+360>>2]|0?1.5707963267948966:0.0;a=t[a+8>>2]|0;if(!a)a=-1;else a=t[a+20>>2]|0;k=i[r+48>>0]|0;w=+c[A>>3];b=+c[A+8>>3];r=MC(t[r>>2]|0)|0;t[o>>2]=4;t[o+4>>2]=k<<24>>24==108?0:k<<24>>24==114?2:1;t[o+8>>2]=l;t[o+12>>2]=s;t[o+16>>2]=0;t[o+20>>2]=a;c[o+24>>3]=n;c[o+32>>3]=f;t[o+40>>2]=4;c[o+48>>3]=0.0;c[o+56>>3]=0.0;t[o+64>>2]=~~(w+(w>=0.0?.5:-.5));t[o+68>>2]=~~(b+(b>=0.0?.5:-.5));t[o+72>>2]=r;mm(e,68549,o);h=u;return}function ZC(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;u=h;h=h+32|0;s=u;l=u+20|0;o=A+32|0;e:do{switch(t[o>>2]|0){case 5:{r=0;while(1){a=t[12724+(r<<2)>>2]|0;if((r|0)==8)break e;f=t[A>>2]|0;if((i[a>>0]|0)==(i[f>>0]|0)?(e1(a,f)|0)==0:0){c=10;break e}r=r+1|0}}case 1:{a=A+1|0;f=A+2|0;r=(FC(l,n[A>>0]|0,n[a>>0]|0,n[f>>0]|0)|0)+32|0;if(!(t[l>>2]|0))c=10;else{b=n[A>>0]|0;l=n[a>>0]|0;c=n[f>>0]|0;t[s>>2]=0;t[s+4>>2]=r;t[s+8>>2]=b;t[s+12>>2]=l;t[s+16>>2]=c;mm(e,68492,s);c=10}break}case 0:{r=0;c=10;break}default:ge(138394,68513,168,68532)}}while(0);if((c|0)==10)t[A>>2]=r;t[o>>2]=6;h=u;return}function GC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0,s=0,o=0.0,u=0.0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0;i=h;h=h+112|0;a=i+8|0;m=i+104|0;g=i;s=t[e+16>>2]|0;v=~~+c[s+152>>3];d=t[s+16>>2]|0;k=t[s+56>>2]|0;w=t[46716]|0;WC(s,m,g);u=+c[A>>3];s=~~(u+(u>=0.0?.5:-.5));o=+c[A+8>>3];l=~~(o+(o>=0.0?.5:-.5));f=+c[A+16>>3];u=f-u;n=+c[A+24>>3];o=n-o;A=t[m>>2]|0;b=+c[g>>3];t[a>>2]=1;t[a+4>>2]=1;t[a+8>>2]=A;t[a+12>>2]=v;t[a+16>>2]=d;t[a+20>>2]=k;t[a+24>>2]=w;t[a+28>>2]=0;t[a+32>>2]=r|0?20:-1;c[a+40>>3]=b;t[a+48>>2]=0;c[a+56>>3]=0.0;t[a+64>>2]=s;t[a+68>>2]=l;t[a+72>>2]=~~(u+(u>=0.0?.5:-.5));t[a+76>>2]=~~(o+(o>=0.0?.5:-.5));t[a+80>>2]=s;t[a+84>>2]=l;t[a+88>>2]=~~(f+(f>=0.0?.5:-.5));t[a+92>>2]=~~(n+(n>=0.0?.5:-.5));mm(e,68427,a);h=i;return}function LC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;a=h;h=h+96|0;n=a+8|0;b=a+80|0;w=a;k=t[e+16>>2]|0;u=~~+c[k+152>>3];o=t[k+16>>2]|0;s=t[k+56>>2]|0;l=t[46716]|0;WC(k,b,w);b=t[b>>2]|0;f=+c[w>>3];t[n>>2]=2;t[n+4>>2]=3;t[n+8>>2]=b;t[n+12>>2]=u;t[n+16>>2]=o;t[n+20>>2]=s;t[n+24>>2]=l;t[n+28>>2]=0;t[n+32>>2]=i|0?20:-1;c[n+40>>3]=f;t[n+48>>2]=0;t[n+52>>2]=0;t[n+56>>2]=0;t[n+60>>2]=0;t[n+64>>2]=0;t[n+68>>2]=r+1;mm(e,68331,n);YC(e,A,r,1);h=a;return}function QC(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0.0,Q=0.0,D=0;G=h;h=h+192|0;Z=G+176|0;C=G+168|0;I=G+104|0;y=G+96|0;a=G+88|0;m=G+180|0;p=G+80|0;E=G+16|0;B=G;i=e+16|0;w=t[i>>2]|0;k=~~+c[w+152>>3];d=t[w+16>>2]|0;v=t[46716]|0;g=Z2((r*140|0)+140|0)|0;WC(w,m,p);if(!n){b=4;l=0;s=-1}else{b=5;l=t[(t[i>>2]|0)+56>>2]|0;s=20}Q=+c[A>>3];u=E+48|0;c[u>>3]=Q;L=+c[A+8>>3];c[E+56>>3]=L;t[a>>2]=~~(Q+(Q>=0.0?.5:-.5));t[a+4>>2]=~~(L+(L>=0.0?.5:-.5));o=B+8|0;i=g+(T4(g,81099,a)|0)|0;w=1;n=0;while(1){f=n+3|0;if((f|0)>=(r|0))break;t[E>>2]=t[u>>2];t[E+4>>2]=t[u+4>>2];t[E+8>>2]=t[u+8>>2];t[E+12>>2]=t[u+12>>2];a=1;while(1){if((a|0)==4){a=1;break}D=a+n|0;c[E+(a<<4)>>3]=+c[A+(D<<4)>>3];c[E+(a<<4)+8>>3]=+c[A+(D<<4)+8>>3];a=a+1|0}while(1){if((a|0)==7)break;Zx(B,E,3,+(a|0)*.16666666666666666,0,0);L=+c[B>>3];Q=+c[o>>3];t[y>>2]=~~(L+(L>=0.0?.5:-.5));t[y+4>>2]=~~(Q+(Q>=0.0?.5:-.5));a=a+1|0;i=i+(T4(i,81099,y)|0)|0}w=w+6|0;n=f}a=t[m>>2]|0;Q=+c[p>>3];t[I>>2]=3;t[I+4>>2]=b;t[I+8>>2]=a;t[I+12>>2]=k;t[I+16>>2]=d;t[I+20>>2]=l;t[I+24>>2]=v;t[I+28>>2]=0;t[I+32>>2]=s;c[I+40>>3]=Q;t[I+48>>2]=0;t[I+52>>2]=0;t[I+56>>2]=0;t[I+60>>2]=w;mm(e,68382,I);t[C>>2]=g;mm(e,81106,C);G2(g);a=w+-1|0;i=0;while(1){if((i|0)>=(w|0))break;t[Z>>2]=((i|0)%(a|0)|0|0)!=0&1;mm(e,81111,Z);i=i+1|0}hm(e,153599)|0;h=G;return}function DC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0;i=h;h=h+96|0;a=i+8|0;o=i+80|0;u=i;b=t[e+16>>2]|0;s=~~+c[b+152>>3];l=t[b+16>>2]|0;f=t[46716]|0;WC(b,o,u);o=t[o>>2]|0;n=+c[u>>3];t[a>>2]=2;t[a+4>>2]=1;t[a+8>>2]=o;t[a+12>>2]=s;t[a+16>>2]=l;t[a+20>>2]=0;t[a+24>>2]=f;t[a+28>>2]=0;t[a+32>>2]=0;c[a+40>>3]=n;t[a+48>>2]=0;t[a+52>>2]=0;t[a+56>>2]=0;t[a+60>>2]=0;t[a+64>>2]=0;t[a+68>>2]=r;mm(e,68331,a);YC(e,A,r,0);h=i;return}function zC(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=A;mm(e,68325,i);h=r;return}function WC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;switch(t[e+144>>2]|0){case 1:{i=10.0;e=1;break}case 2:{i=10.0;e=2;break}default:{i=0.0;e=0}}t[A>>2]=e;c[r>>3]=i;return}function YC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0.0;l=h;h=h+16|0;f=l+8|0;n=l;a=0;while(1){if((a|0)>=(r|0))break;o=+c[A+(a<<4)>>3];s=+c[A+(a<<4)+8>>3];t[n>>2]=~~(o+(o>=0.0?.5:-.5));t[n+4>>2]=~~(s+(s>=0.0?.5:-.5));mm(e,81099,n);a=a+1|0}if(i|0){s=+c[A>>3];o=+c[A+8>>3];t[f>>2]=~~(s+(s>=0.0?.5:-.5));t[f+4>>2]=~~(o+(o>=0.0?.5:-.5));mm(e,81099,f)}hm(e,153599)|0;h=l;return}function FC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;t[e>>2]=0;c=t[46717]|0;f=195075;n=0;l=-1;while(1){if((n|0)>=(c|0)){o=6;break}u=(a[192216+(n<<1)>>1]|0)-A|0;b=(a[192728+(n<<1)>>1]|0)-r|0;s=(a[193240+(n<<1)>>1]|0)-i|0;s=(P(b,b)|0)+(P(u,u)|0)+(P(s,s)|0)|0;if((s|0)<(f|0))if(!s)break;else{f=s;l=n}n=n+1|0}if((o|0)==6){t[46717]=c+1;if((c|0)==256)n=l;else{a[192216+(n<<1)>>1]=A;a[192728+(n<<1)>>1]=r;a[193240+(n<<1)>>1]=i;t[e>>2]=1}}return n|0}function MC(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;A=t[46718]|0;if(!A){t[46719]=64;A=Z2(64)|0;t[46718]=A;r=0}else r=0;while(1){n=e+1|0;a=i[e>>0]|0;if(!(a<<24>>24))break;e=t[46719]|0;if((r|0)>(e+-8|0)){A=e<<1;t[46719]=A;A=Q2(t[46718]|0,A)|0;t[46718]=A;A=A+r|0}if(a<<24>>24<=-1){i[A>>0]=92;t[f>>2]=a&255;T4(A+1|0,81224,f)|0;e=n;A=A+4|0;r=r+4|0;continue}if(a<<24>>24==92){i[A>>0]=92;r=r+1|0;A=A+1|0}i[A>>0]=a;e=n;A=A+1|0;r=r+1|0}i[A>>0]=0;h=l;return t[46718]|0}function VC(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;r=h;h=h+16|0;A=r;hm(e,73332)|0;if((t[e+64>>2]|0)==2)hm(e,73347)|0;else hm(e,153599)|0;n=t[t[e+12>>2]>>2]|0;a=t[n+4>>2]|0;i=t[n+8>>2]|0;t[A>>2]=t[n>>2];t[A+4>>2]=a;t[A+8>>2]=i;mm(e,73358,A);h=r;return}function NC(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;n=h;h=h+32|0;a=n+8|0;i=n;hm(e,73286)|0;r=e+64|0;A=e+12|0;if((t[r>>2]|0)!=2){t[i>>2]=t[(t[A>>2]|0)+28>>2];mm(e,73297,i)}if((t[(t[A>>2]|0)+20>>2]|0)==0?(t[r>>2]|0)!=2:0){A=t[e+476>>2]|0;r=t[e+480>>2]|0;i=t[e+484>>2]|0;t[a>>2]=t[e+472>>2];t[a+4>>2]=A;t[a+8>>2]=r;t[a+12>>2]=i;mm(e,69666,a)}hm(e,73312)|0;hm(e,73325)|0;h=n;return}function RC(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;c=h;h=h+32|0;s=c+24|0;a=c+8|0;l=c;n=t[e+16>>2]|0;i[193768]=0;r=e+12|0;f=n+8|0;if(!(t[(t[r>>2]|0)+28>>2]|0)){t[l>>2]=Mk(t[f>>2]|0)|0;mm(e,69597,l);A=e+64|0;if((t[A>>2]|0)==2)hm(e,69630)|0;else hm(e,69612)|0;do{if(!(t[(t[r>>2]|0)+20>>2]|0))if((t[A>>2]|0)==2){u=t[e+460>>2]|0;o=t[e+464>>2]|0;A=t[e+468>>2]|0;t[a>>2]=t[e+456>>2];t[a+4>>2]=u;t[a+8>>2]=o;t[a+12>>2]=A;mm(e,69666,a);break}else{hm(e,69642)|0;break}}while(0);hm(e,69696)|0;JV(e,t[(t[r>>2]|0)+24>>2]|0,13e3);PV(e);A=t[(t[r>>2]|0)+20>>2]|0;if(A|0){t[l>>2]=t[A>>2];t[l+4>>2]=0;JV(e,0,l)}}t[46720]=(i[(t[(t[f>>2]|0)+16>>2]|0)+115>>0]|0)==1?1:-1;if(!(i[193768]|0)){hm(e,69716)|0;i[193768]=1}A=t[n+208>>2]|0;if(A|0){t[s>>2]=XV(A,t[46720]|0)|0;mm(e,69729,s)}h=c;return}function xC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;A=h;h=h+16|0;a=A;t[a>>2]=r;t[a+4>>2]=i;mm(e,69581,a);h=A;return}function JC(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0.0,p=0.0,E=0.0;v=h;h=h+144|0;d=v+128|0;k=v+112|0;w=v+72|0;b=v+56|0;u=v+40|0;o=v+32|0;i=v+24|0;A=v+8|0;r=v;a=t[e+456>>2]|0;l=t[e+460>>2]|0;n=t[e+464>>2]|0;f=t[e+468>>2]|0;s=e+12|0;g=(t[(t[s>>2]|0)+28>>2]|0)+1|0;t[r>>2]=g;t[r+4>>2]=g;mm(e,69208,r);if(!(t[(t[s>>2]|0)+20>>2]|0)){t[A>>2]=a;t[A+4>>2]=l;t[A+8>>2]=n;t[A+12>>2]=f;mm(e,69225,A)}r=e+360|0;t[i>>2]=t[r>>2]|0?69259:69269;mm(e,69278,i);A=e+64|0;if((t[A>>2]|0)==1){t[o>>2]=n;t[o+4>>2]=f;mm(e,69303,o)}o=t[e+200>>2]|0;g=t[e+204>>2]|0;t[u>>2]=t[e+196>>2];t[u+4>>2]=o;t[u+8>>2]=g;mm(e,69342,u);if(!(t[(t[s>>2]|0)+20>>2]|0)){t[b>>2]=a;t[b+4>>2]=l;t[b+8>>2]=n-a;t[b+12>>2]=f-l;mm(e,69362,b)}E=+c[e+496>>3];g=t[r>>2]|0;p=+c[e+504>>3];m=+c[e+512>>3];c[w>>3]=+c[e+488>>3];c[w+8>>3]=E;t[w+16>>2]=g;c[w+24>>3]=p;c[w+32>>3]=m;mm(e,69402,w);if((t[A>>2]|0)==1){if((n|0)>14399|(f|0)>14399){g=t[(t[s>>2]|0)+16>>2]|0;t[k>>2]=n;t[k+4>>2]=f;t[k+8>>2]=14400;M5[g&63](69445,k)}t[d>>2]=a;t[d+4>>2]=l;t[d+8>>2]=n;t[d+12>>2]=f;mm(e,69540,d)}h=v;return}function HC(e){e=e|0;var A=0,r=0,i=0;i=h;h=h+16|0;r=i;A=e+12|0;if(t[(t[A>>2]|0)+20>>2]|0){hm(e,69132)|0;JV(e,0,(t[(t[A>>2]|0)+20>>2]|0)+4|0)}hm(e,69149)|0;hm(e,69176)|0;t[r>>2]=t[(t[A>>2]|0)+28>>2];mm(e,69191,r);h=i;return}function PC(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=A;t[r>>2]=Mk(t[(t[e+16>>2]|0)+8>>2]|0)|0;mm(e,69125,r);hm(e,69118)|0;h=A;return}function XC(e){e=e|0;hm(e,84552)|0;return}function SC(e){e=e|0;hm(e,69118)|0;return}function jC(e){e=e|0;hm(e,84552)|0;return}function UC(e){e=e|0;hm(e,69118)|0;return}function TC(e){e=e|0;hm(e,84552)|0;return}function OC(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;i=h;h=h+16|0;r=i;if(A|0?(n=(t[e+16>>2]|0)+272|0,t[n>>2]|0):0){hm(e,69014)|0;ym(e,t[n>>2]|0,2);hm(e,69025)|0;t[r>>2]=XV(A,t[46720]|0)|0;mm(e,69029,r)}h=i;return}function _C(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0,l=0,s=0,o=0,u=0;o=h;h=h+32|0;l=o+8|0;s=o;a=t[e+16>>2]|0;if(!(+c[a+40>>3]<.5)){iI(e,a+16|0);f=r+4|0;pm(e,+c[(t[f>>2]|0)+16>>3]);t[l>>2]=t[t[f>>2]>>2];mm(e,68973,l);f=XV(t[r>>2]|0,t[46720]|0)|0;switch(i[r+48>>0]|0){case 114:{u=r+32|0;a=u;n=+c[u>>3];break}case 108:{a=r+32|0;n=0.0;break}default:{u=r+32|0;a=u;n=+c[u>>3]*.5}}c[A>>3]=+c[A>>3]-n;u=A+8|0;c[u>>3]=+c[u>>3]+ +c[r+24>>3];t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];Bm(e,l);hm(e,68988)|0;pm(e,+c[a>>3]);t[s>>2]=f;mm(e,68997,s)}h=o;return}function qC(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=h;h=h+32|0;a=n;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];c[a+16>>3]=+c[A+16>>3]-+c[A>>3];c[a+24>>3]=+c[A+24>>3]-+c[A+8>>3];A=e+16|0;if(r|0?(i=t[A>>2]|0,+c[i+80>>3]>.5):0){iI(e,i+56|0);ym(e,a,2);hm(e,68931)|0}if(+c[(t[A>>2]|0)+40>>3]>.5){aI(e);iI(e,(t[A>>2]|0)+16|0);ym(e,a,2);hm(e,68951)|0}h=n;return}function KC(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;n=e+16|0;if(i|0?(a=t[n>>2]|0,+c[a+80>>3]>.5):0){iI(e,a+56|0);hm(e,68852)|0;t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];Bm(e,f);hm(e,68861)|0;i=1;while(1){if((i|0)>=(r|0))break;a=A+(i<<4)|0;t[f>>2]=t[a>>2];t[f+4>>2]=t[a+4>>2];t[f+8>>2]=t[a+8>>2];t[f+12>>2]=t[a+12>>2];Bm(e,f);hm(e,68870)|0;i=i+1|0}hm(e,68897)|0}if(+c[(t[n>>2]|0)+40>>3]>.5){aI(e);iI(e,(t[n>>2]|0)+16|0);hm(e,68852)|0;t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];Bm(e,f);hm(e,68861)|0;i=1;while(1){if((i|0)>=(r|0))break;n=A+(i<<4)|0;t[f>>2]=t[n>>2];t[f+4>>2]=t[n+4>>2];t[f+8>>2]=t[n+8>>2];t[f+12>>2]=t[n+12>>2];Bm(e,f);hm(e,68870)|0;i=i+1|0}hm(e,68913)|0}h=l;return}function $C(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0;s=h;h=h+16|0;a=s;f=e+16|0;if(n|0?(l=t[f>>2]|0,+c[l+80>>3]>.5):0){iI(e,l+56|0);hm(e,68852)|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];Bm(e,a);hm(e,68861)|0;i=1;while(1){if((i|0)>=(r|0))break;ym(e,A+(i<<4)|0,3);hm(e,68887)|0;i=i+3|0}hm(e,68897)|0}if(+c[(t[f>>2]|0)+40>>3]>.5){aI(e);iI(e,(t[f>>2]|0)+16|0);hm(e,68852)|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];Bm(e,a);hm(e,68861)|0;i=1;while(1){if((i|0)>=(r|0))break;ym(e,A+(i<<4)|0,3);hm(e,68887)|0;i=i+3|0}hm(e,68879)|0}h=s;return}function eI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;n=h;h=h+16|0;a=n;i=e+16|0;if(+c[(t[i>>2]|0)+40>>3]>.5){aI(e);iI(e,(t[i>>2]|0)+16|0);hm(e,68852)|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];Bm(e,a);hm(e,68861)|0;i=1;while(1){if((i|0)>=(r|0))break;f=A+(i<<4)|0;t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[a+8>>2]=t[f+8>>2];t[a+12>>2]=t[f+12>>2];Bm(e,a);hm(e,68870)|0;i=i+1|0}hm(e,68879)|0}h=n;return}function AI(e,A){e=e|0;A=A|0;hm(e,68849)|0;hm(e,A)|0;hm(e,153599)|0;return}function rI(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+32|0;n=u+16|0;o=u+8|0;s=u;f=e+16|0;if(a|0?(l=t[f>>2]|0,+c[l+80>>3]>.5):0){iI(e,l+56|0);hm(e,84447)|0;ym(e,r,i);hm(e,102604)|0;t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];Bm(e,n);t[s>>2]=i;t[s+4>>2]=A;mm(e,68766,s)}if(+c[(t[f>>2]|0)+40>>3]>.5){aI(e);iI(e,(t[f>>2]|0)+16|0);hm(e,84447)|0;ym(e,r,i);hm(e,102604)|0;t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];Bm(e,n);t[o>>2]=i;t[o+4>>2]=A;mm(e,68782,o)}h=u;return}function iI(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0.0;a=h;h=h+32|0;i=a;if(A|0){switch(t[(t[e+16>>2]|0)+4>>2]|0){case 1:case 0:{r=111494;break}case 2:{r=111481;break}case 3:{r=111450;break}default:r=68818}f=+c[A+8>>3];n=+c[A+16>>3];c[i>>3]=+c[A>>3];c[i+8>>3]=f;c[i+16>>3]=n;t[i+24>>2]=r;mm(e,68825,i)}h=a;return}function aI(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+16|0;s=o+8|0;l=o;n=e+16|0;f=t[n>>2]|0;A=t[f+160>>2]|0;pm(e,+c[f+152>>3]);hm(e,68799)|0;while(1){if(!A)break;f=A+4|0;a=t[A>>2]|0;if(!a)break;if(!(e1(a,111088)|0)){A=f;continue}else r=a;while(1){A=r+1|0;if(!(i[r>>0]|0))break;else r=A}e:while(1){if(!(i[A>>0]|0))break;t[l>>2]=A;mm(e,68814,l);while(1){r=A+1|0;if(!(i[A>>0]|0)){A=r;continue e}else A=r}}if(!(e1(a,134335)|0))c[(t[n>>2]|0)+152>>3]=0.0;t[s>>2]=a;mm(e,96670,s);A=f}h=o;return}function tI(e){e=e|0;var A=0;hm(e,74838)|0;A=Hw(t[(t[e>>2]|0)+168>>2]|0,74894)|0;if(A|0?i[A>>0]|0:0){hm(e,74905)|0;hm(e,A)|0;hm(e,74929)|0}hm(e,74950)|0;hm(e,74998)|0;hm(e,75052)|0;A=e+12|0;hm(e,TF(t[t[t[A>>2]>>2]>>2]|0)|0)|0;hm(e,78181)|0;hm(e,TF(t[(t[t[A>>2]>>2]|0)+4>>2]|0)|0)|0;hm(e,78191)|0;hm(e,TF(t[(t[t[A>>2]>>2]|0)+8>>2]|0)|0)|0;hm(e,75434)|0;hm(e,75458)|0;return}function nI(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0.0,s=0.0,o=0.0;f=h;h=h+48|0;n=f+16|0;a=f+8|0;r=f;A=t[e+16>>2]|0;hm(e,74673)|0;A=A+8|0;if(i[(Mk(t[A>>2]|0)|0)>>0]|0){hm(e,75397)|0;hm(e,TF(Mk(t[A>>2]|0)|0)|0)|0}t[r>>2]=P(t[e+168>>2]|0,t[e+164>>2]|0)|0;mm(e,74678,r);r=t[e+452>>2]|0;t[a>>2]=t[e+448>>2];t[a+4>>2]=r;mm(e,74694,a);o=+c[e+392>>3];s=+c[e+400>>3];l=+c[e+408>>3];c[n>>3]=+c[e+384>>3];c[n+8>>3]=o;c[n+16>>3]=s;c[n+24>>3]=l;mm(e,74727,n);hm(e,74758)|0;hm(e,74794)|0;hm(e,76388)|0;h=f;return}function fI(e){e=e|0;hm(e,74665)|0;return}function lI(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;DI(e,A,0,101510,t[(t[e+16>>2]|0)+8>>2]|0);hm(e,76388)|0;return}function sI(e){e=e|0;hm(e,74513)|0;return}function cI(e){e=e|0;var A=0,r=0,a=0,n=0;r=h;h=h+16|0;a=r;n=t[e+16>>2]|0;A=n+8|0;DI(e,t[n+212>>2]|0,0,111494,t[A>>2]|0);hm(e,74617)|0;pm(e,+c[e+488>>3]);hm(e,102604)|0;pm(e,+c[e+496>>3]);t[a>>2]=0-(t[e+360>>2]|0);mm(e,74636,a);pm(e,+c[e+504>>3]);hm(e,102604)|0;pm(e,-+c[e+512>>3]);hm(e,74660)|0;if(i[(Mk(t[A>>2]|0)|0)>>0]|0){hm(e,74569)|0;hm(e,TF(Mk(t[A>>2]|0)|0)|0)|0;hm(e,74577)|0}h=r;return}function oI(e){e=e|0;hm(e,74513)|0;return}function uI(e){e=e|0;var A=0,r=0;r=t[e+16>>2]|0;A=r+8|0;DI(e,t[r+212>>2]|0,0,108006,t[A>>2]|0);hm(e,76388)|0;hm(e,74569)|0;hm(e,TF(Mk(t[A>>2]|0)|0)|0)|0;hm(e,74577)|0;return}function bI(e){e=e|0;hm(e,74513)|0;return}function hI(e){e=e|0;var A=0,r=0,i=0;r=t[e+16>>2]|0;A=t[e+160>>2]|0;if((A|0)>1)A=t[(t[(t[e>>2]|0)+308>>2]|0)+(A<<2)>>2]|0;else A=0;i=r+8|0;DI(e,t[r+212>>2]|0,A,111481,t[i>>2]|0);hm(e,76388)|0;hm(e,74569)|0;hm(e,TF(Mk(t[i>>2]|0)|0)|0)|0;hm(e,74577)|0;return}function wI(e){e=e|0;hm(e,74513)|0;return}function kI(e){e=e|0;var A=0,r=0;r=t[e+16>>2]|0;A=r+8|0;DI(e,t[r+212>>2]|0,0,111450,t[A>>2]|0);hm(e,76388)|0;hm(e,74569)|0;A=UF(102095,t[A>>2]|0)|0;hm(e,TF(A)|0)|0;G2(A);hm(e,74577)|0;return}function dI(e){e=e|0;hm(e,74513)|0;return}function vI(e,A,r,a,t){e=e|0;A=A|0;r=r|0;a=a|0;t=t|0;hm(e,74519)|0;if(t|0){hm(e,74522)|0;hm(e,TF(t)|0)|0;hm(e,98744)|0}hm(e,74412)|0;hm(e,76349)|0;if(A|0?i[A>>0]|0:0){hm(e,74530)|0;hm(e,A)|0;hm(e,98744)|0}if(r|0?i[r>>0]|0:0){hm(e,74544)|0;hm(e,OF(r,1)|0)|0;hm(e,98744)|0}if(a|0?i[a>>0]|0:0){hm(e,74559)|0;hm(e,TF(a)|0)|0;hm(e,98744)|0}hm(e,76388)|0;return}function gI(e){e=e|0;hm(e,76343)|0;hm(e,74513)|0;return}function mI(e,A,r){e=e|0;A=A|0;r=r|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0.0,W=0,Y=0,F=0,M=0,V=0,N=0;N=h;h=h+176|0;V=N+160|0;M=N+152|0;D=N+136|0;F=N+128|0;Q=N+120|0;L=N+112|0;G=N+104|0;Z=N+96|0;I=N+88|0;y=N+80|0;E=N+72|0;p=N+64|0;m=N+56|0;g=N+48|0;f=N+40|0;k=N+32|0;v=N+24|0;d=N+16|0;w=N+8|0;b=N;Y=t[e+16>>2]|0;hm(e,74044)|0;switch(i[r+48>>0]|0){case 108:{hm(e,74050)|0;break}case 114:{hm(e,74071)|0;break}default:hm(e,74090)|0}W=A+8|0;z=+c[W>>3]+ +c[r+24>>3];c[W>>3]=z;W=Y+260|0;if(!(a[W>>1]&512)){hm(e,74112)|0;pm(e,+c[A>>3]);hm(e,74117)|0;pm(e,-z);hm(e,98744)|0}B=r+4|0;A=t[B>>2]|0;u=t[A+8>>2]|0;if(u){switch(t[(t[(t[(t[e>>2]|0)+168>>2]|0)+16>>2]|0)+244>>2]|0){case 1:{o=u;A=u+16|0;f=u+8|0;break}case 2:{o=u+24|0;A=u+32|0;f=u+28|0;break}default:{o=u+4|0;A=u+16|0;f=u+8|0}}l=t[A>>2]|0;A=t[f>>2]|0;s=t[u+12>>2]|0;t[b>>2]=t[o>>2];mm(e,74123,b);f=t[u+24>>2]|0;if(f|0){t[w>>2]=f;mm(e,74140,w)}hm(e,98744)|0;if(A|0){t[d>>2]=A;mm(e,74144,d)}if(s|0){t[v>>2]=s;mm(e,74162,v)}if(!l)l=0;else{t[k>>2]=l;mm(e,74181,k)}}else{t[f>>2]=t[A>>2];mm(e,74198,f);l=0;A=0}f=t[B>>2]|0;if(f|0?(C=t[f+24>>2]|0,C&127|0):0){if(!((A|0)!=0|(C&1|0)==0))mm(e,74216,g);if(!((l|0)!=0|(C&2|0)==0))mm(e,74236,m);if(C&100|0){mm(e,74257,p);if(!(C&4))A=0;else{mm(e,105986,E);A=1}if(C&64){t[y>>2]=A|0?100999:195059;mm(e,74276,y);A=1}if(C&32|0){t[I>>2]=A|0?100999:195059;mm(e,74287,I)}mm(e,98744,Z)}if(C&8|0)mm(e,74302,G);if(C&16|0)mm(e,74326,L)}c[Q>>3]=+c[(t[B>>2]|0)+16>>3];mm(e,74348,Q);A=Y+16|0;switch(t[Y+48>>2]|0){case 5:{A=t[A>>2]|0;if(N1(A,137314)|0){t[F>>2]=A;mm(e,74366,F)}break}case 1:{Q=n[A+1>>0]|0;F=n[A+2>>0]|0;t[D>>2]=n[A>>0];t[D+4>>2]=Q;t[D+8>>2]=F;mm(e,74377,D);break}default:ge(138394,73558,486,74399)}hm(e,74412)|0;if(a[W>>1]&512){t[M>>2]=TF(t[Y+212>>2]|0)|0;mm(e,74414,M);hm(e,74463)|0;pm(e,-z);hm(e,74481)|0}hm(e,OF(t[r>>2]|0,1)|0)|0;if(a[W>>1]&512)mm(e,74484,V);hm(e,74504)|0;h=N;return}function pI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;switch(r|0){case 2:{i=GI(e,A,2)|0;break}case 3:{i=LI(e)|0;break}default:i=0}hm(e,74008)|0;II(e,r,i);hm(e,74017)|0;pm(e,+c[A>>3]);hm(e,74023)|0;r=A+8|0;pm(e,-+c[r>>3]);hm(e,74030)|0;pm(e,+c[A+16>>3]-+c[A>>3]);hm(e,74037)|0;pm(e,+c[A+24>>3]-+c[r>>3]);hm(e,73424)|0;return}function EI(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;switch(i|0){case 2:{a=GI(e,A,r)|0;break}case 3:{a=LI(e)|0;break}default:a=0}hm(e,73999)|0;II(e,i,a);hm(e,73414)|0;a=0;while(1){if((a|0)>=(r|0))break;pm(e,+c[A+(a<<4)>>3]);hm(e,100999)|0;pm(e,-+c[A+(a<<4)+8>>3]);hm(e,102604)|0;a=a+1|0}pm(e,+c[A>>3]);hm(e,100999)|0;pm(e,-+c[A+8>>3]);hm(e,73424)|0;return}function BI(e,A,r,i,n,f){e=e|0;A=A|0;r=r|0;i=i|0;n=n|0;f=f|0;n=t[e+16>>2]|0;switch(f|0){case 2:{i=GI(e,A,r)|0;break}case 3:{i=LI(e)|0;break}default:i=0}hm(e,73594)|0;if(a[n+260>>1]&512){hm(e,73600)|0;hm(e,TF(t[n+212>>2]|0)|0)|0;hm(e,73606)|0}II(e,f,i);hm(e,73611)|0;QI(e,A,r);hm(e,73424)|0;return}function yI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;hm(e,73404)|0;II(e,0,0);hm(e,73414)|0;i=0;while(1){if((i|0)>=(r|0))break;pm(e,+c[A+(i<<4)>>3]);hm(e,100999)|0;pm(e,-+c[A+(i<<4)+8>>3]);hm(e,102604)|0;i=i+1|0}hm(e,73424)|0;return}function CI(e,A){e=e|0;A=A|0;hm(e,73398)|0;hm(e,TF(A)|0)|0;hm(e,75458)|0;return}function II(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+96|0;s=k+48|0;w=k+40|0;u=k+32|0;b=k+24|0;l=k+16|0;n=k+8|0;a=k;o=t[e+16>>2]|0;hm(e,73429)|0;e:do{switch(A|0){case 2:{t[a>>2]=r;mm(e,73437,a);break}case 3:{t[n>>2]=r;mm(e,73448,n);break}case 0:{hm(e,135709)|0;break}default:{A=o+56|0;a=s;n=A;f=a+40|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));ZI(e,s);if((t[o+88>>2]|0)==1){A=i[A+3>>0]|0;switch(A<<24>>24){case-1:case 0:break e;default:{}}c[l>>3]=+(A&255)*.00392156862745098;mm(e,73459,l)}}}}while(0);hm(e,73478)|0;r=o+16|0;a=s;n=r;f=a+40|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));ZI(e,s);A=o+152|0;if(+c[A>>3]!=1.0){hm(e,73489)|0;pm(e,+c[A>>3])}switch(t[o+144>>2]|0){case 1:{t[b>>2]=73529;mm(e,73506,b);break}case 2:{t[u>>2]=73533;mm(e,73506,u);break}default:{}}e:do{if((t[o+48>>2]|0)==1){A=i[r+3>>0]|0;switch(A<<24>>24){case-1:case 0:break e;default:{}}c[w>>3]=+(A&255)*.00392156862745098;mm(e,73537,w)}}while(0);hm(e,98744)|0;h=k;return}function ZI(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0;a=h;h=h+16|0;r=a;e:do{switch(t[A+32>>2]|0){case 5:{hm(e,t[A>>2]|0)|0;break}case 1:if(!(i[A+3>>0]|0)){hm(e,137379)|0;break e}else{l=n[A+1>>0]|0;f=n[A+2>>0]|0;t[r>>2]=n[A>>0];t[r+4>>2]=l;t[r+8>>2]=f;mm(e,75714,r);break e}default:ge(138394,73558,117,73578)}}while(0);h=a;return}function GI(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+112|0;b=g+64|0;d=g+56|0;u=g+48|0;o=g+40|0;n=g+32|0;l=g;k=t[46722]|0;t[46722]=k+1;w=t[e+16>>2]|0;a=+(t[w+136>>2]|0)*.017453292519943295;t[l>>2]=0;t[l+4>>2]=0;t[l+8>>2]=0;t[l+12>>2]=0;t[l+16>>2]=0;t[l+20>>2]=0;t[l+24>>2]=0;t[l+28>>2]=0;zJ(A,l,r,a,0);t[b>>2]=k;mm(e,73831,b);hm(e,73896)|0;pm(e,+c[l>>3]);hm(e,73901)|0;pm(e,+c[l+8>>3]);hm(e,73908)|0;pm(e,+c[l+16>>3]);hm(e,73915)|0;pm(e,+c[l+24>>3]);hm(e,73922)|0;l=w+140|0;a=+s[l>>2];if(a>0.0){c[n>>3]=a+-.001;mm(e,73927,n)}else hm(e,73703)|0;A=w+56|0;r=b;n=A;f=r+40|0;do{t[r>>2]=t[n>>2];r=r+4|0;n=n+4|0}while((r|0)<(f|0));ZI(e,b);hm(e,73739)|0;e:do{if((t[w+88>>2]|0)==1){A=i[A+3>>0]|0;switch(A<<24>>24){case-1:case 0:{v=7;break e}default:{}}c[o>>3]=+(A&255)*.00392156862745098;mm(e,99612,o)}else v=7}while(0);if((v|0)==7)hm(e,73754)|0;hm(e,73757)|0;a=+s[l>>2];if(a>0.0){c[u>>3]=a;mm(e,73927,u)}else hm(e,73763)|0;A=w+96|0;r=b;n=A;f=r+40|0;do{t[r>>2]=t[n>>2];r=r+4|0;n=n+4|0}while((r|0)<(f|0));ZI(e,b);hm(e,73739)|0;e:do{if((t[w+128>>2]|0)==1){A=i[A+3>>0]|0;switch(A<<24>>24){case-1:case 0:{v=14;break e}default:{}}c[d>>3]=+(A&255)*.00392156862745098;mm(e,99612,d)}else v=14}while(0);if((v|0)==14)hm(e,73754)|0;hm(e,73967)|0;h=g;return k|0}function LI(e){e=e|0;var A=0,r=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;k=h;h=h+64|0;s=k+16|0;b=k+8|0;l=k;u=t[46721]|0;t[46721]=u+1;o=t[e+16>>2]|0;d=+(t[o+136>>2]|0)*.017453292519943295;r=d;if(d==0.0){a=50;A=50}else{a=~~((+W(+r)+1.0)*50.0);A=~~((1.0-+Y(+r))*50.0)}t[s>>2]=u;t[s+4>>2]=a;t[s+8>>2]=A;mm(e,73619,s);hm(e,73703)|0;A=o+56|0;a=s;n=A;f=a+40|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));ZI(e,s);hm(e,73739)|0;e:do{if((t[o+88>>2]|0)==1){A=i[A+3>>0]|0;switch(A<<24>>24){case-1:case 0:{w=6;break e}default:{}}c[l>>3]=+(A&255)*.00392156862745098;mm(e,99612,l)}else w=6}while(0);if((w|0)==6)hm(e,73754)|0;hm(e,73757)|0;hm(e,73763)|0;A=o+96|0;a=s;n=A;f=a+40|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));ZI(e,s);hm(e,73739)|0;e:do{if((t[o+128>>2]|0)==1){A=i[A+3>>0]|0;switch(A<<24>>24){case-1:case 0:{w=10;break e}default:{}}c[b>>3]=+(A&255)*.00392156862745098;mm(e,99612,b)}else w=10}while(0);if((w|0)==10)hm(e,73754)|0;hm(e,73799)|0;h=k;return u|0}function QI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f;i=77;a=0;while(1){if((a|0)>=(r|0))break;t[n>>2]=i;mm(e,73616,n);pm(e,+c[A+(a<<4)>>3]);hm(e,100999)|0;pm(e,-+c[A+(a<<4)+8>>3]);i=(a|0)==0?67:32;a=a+1|0}h=f;return}function DI(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0;s=h;h=h+16|0;l=s+8|0;f=s;hm(e,74587)|0;hm(e,TF(A)|0)|0;if(r|0){t[f>>2]=TF(r)|0;mm(e,74595,f)}t[l>>2]=a;mm(e,74599,l);A=Hw(n,74611)|0;if(A|0?i[A>>0]|0:0){hm(e,102604)|0;hm(e,TF(A)|0)|0}hm(e,98744)|0;h=s;return}function zI(e){e=e|0;var A=0;hm(e,75418)|0;A=e+12|0;hm(e,HI(t[t[t[A>>2]>>2]>>2]|0)|0)|0;hm(e,78181)|0;hm(e,HI(t[(t[t[A>>2]>>2]|0)+4>>2]|0)|0)|0;hm(e,78191)|0;hm(e,HI(t[(t[t[A>>2]>>2]|0)+8>>2]|0)|0)|0;hm(e,75434)|0;return}function WI(e){e=e|0;var A=0,r=0,a=0;a=h;h=h+16|0;r=a;A=t[e+16>>2]|0;hm(e,75395)|0;A=A+8|0;if(i[(Mk(t[A>>2]|0)|0)>>0]|0){hm(e,75397)|0;hm(e,HI(Mk(t[A>>2]|0)|0)|0)|0}t[r>>2]=P(t[e+168>>2]|0,t[e+164>>2]|0)|0;mm(e,75406,r);t[46723]=0;h=a;return}function YI(e){e=e|0;t[46723]=1;return}function FI(e){e=e|0;t[46723]=-1;return}function MI(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+48|0;f=u+8|0;o=u;a=t[e+16>>2]|0;if(t[a+144>>2]|0?(s=r+4|0,l=~~(+c[e+352>>3]*+c[(t[s>>2]|0)+16>>3]),l|0):0){PI(e);hm(e,75334)|0;n=A+8|0;c[n>>3]=+c[n>>3]-+(l|0)*.55;t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];Bm(e,f);hm(e,75348)|0;hm(e,t[r>>2]|0)|0;hm(e,75357)|0;hm(e,75155)|0;n=f;A=a+16|0;a=n+40|0;do{t[n>>2]=t[A>>2];n=n+4|0;A=A+4|0}while((n|0)<(a|0));XI(e,f);hm(e,75359)|0;f=t[s>>2]|0;s=t[f+8>>2]|0;s=t[((s|0)==0?f:s+4|0)>>2]|0;hm(e,98744)|0;hm(e,s)|0;hm(e,98744)|0;t[o>>2]=l;mm(e,75368,o);switch(i[r+48>>0]|0){case 108:{hm(e,75373)|0;break}case 114:{hm(e,75384)|0;break}default:{}}SI(e);hm(e,153599)|0}h=u;return}function VI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0.0,o=0.0,u=0.0;l=h;h=h+48|0;a=l;n=t[e+16>>2]|0;f=n+144|0;if(t[f>>2]|0){u=+c[A>>3];o=+c[A+24>>3];i=A+8|0;s=+c[i>>3];c[A>>3]=u-+c[A+16>>3]+u;c[i>>3]=s-o+s;PI(e);hm(e,75320)|0;ym(e,A,2);hm(e,75155)|0;do{if(!r)if(!(t[46723]|0)){hm(e,97309)|0;break}else{hm(e,137198)|0;break}else{A=a;r=n+56|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));XI(e,a)}}while(0);if((t[46723]|0)==1)t[46723]=0;hm(e,75266)|0;pm(e,+c[n+152>>3]);hm(e,75309)|0;A=a;r=n+16|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));XI(e,a);A=t[f>>2]|0;if((A|0)==1){hm(e,75163)|0;A=t[f>>2]|0}if((A|0)==2)hm(e,75172)|0;SI(e);hm(e,153599)|0}h=l;return}function NI(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;l=h;h=h+48|0;a=l;n=t[e+16>>2]|0;f=n+144|0;if(t[f>>2]|0){PI(e);hm(e,75292)|0;ym(e,A,r);hm(e,75155)|0;do{if(!i)if(!(t[46723]|0)){hm(e,97309)|0;break}else{hm(e,137198)|0;break}else{A=a;r=n+56|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));XI(e,a)}}while(0);if((t[46723]|0)==1)t[46723]=0;hm(e,75266)|0;pm(e,+c[n+152>>3]);hm(e,75309)|0;A=a;r=n+16|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));XI(e,a);A=t[f>>2]|0;if((A|0)==1){hm(e,75163)|0;A=t[f>>2]|0}if((A|0)==2)hm(e,75172)|0;SI(e);hm(e,153599)|0}h=l;return}function RI(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0;o=h;h=h+48|0;f=o;l=t[e+16>>2]|0;s=l+144|0;if(t[s>>2]|0){PI(e);hm(e,75141)|0;ym(e,A,r);hm(e,75155)|0;i=f;a=l+16|0;n=i+40|0;do{t[i>>2]=t[a>>2];i=i+4|0;a=a+4|0}while((i|0)<(n|0));XI(e,f);hm(e,75266)|0;pm(e,+c[l+152>>3]);i=t[s>>2]|0;if((i|0)==1){hm(e,75163)|0;i=t[s>>2]|0}if((i|0)==2)hm(e,75172)|0;hm(e,75275)|0;SI(e);hm(e,153599)|0}h=o;return}function xI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;l=h;h=h+48|0;n=l;i=t[e+16>>2]|0;f=i+144|0;if(t[f>>2]|0){PI(e);hm(e,75141)|0;ym(e,A,r);hm(e,75155)|0;a=n;A=i+16|0;r=a+40|0;do{t[a>>2]=t[A>>2];a=a+4|0;A=A+4|0}while((a|0)<(r|0));XI(e,n);A=t[f>>2]|0;if((A|0)==1){hm(e,75163)|0;A=t[f>>2]|0}if((A|0)==2)hm(e,75172)|0;SI(e);hm(e,153599)|0}h=l;return}function JI(e,A){e=e|0;A=A|0;hm(e,75138)|0;hm(e,HI(A)|0)|0;hm(e,153599)|0;return}function HI(e){e=e|0;return e|0}function PI(e){e=e|0;if(!(i[e+144>>0]|0))hm(e,75263)|0;else hm(e,t[e+148>>2]|0)|0;return}function XI(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0;a=h;h=h+16|0;r=a;e:do{switch(t[A+32>>2]|0){case 5:{hm(e,t[A>>2]|0)|0;break}case 1:if(!(i[A+3>>0]|0)){hm(e,97309)|0;break e}else{l=n[A+1>>0]|0;f=n[A+2>>0]|0;t[r>>2]=n[A>>0];t[r+4>>2]=l;t[r+8>>2]=f;mm(e,75714,r);break e}default:ge(138394,75181,49,75245)}}while(0);h=a;return}function SI(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f;a=t[e+16>>2]|0;switch(t[a+12>>2]|0){case 8:{A=1;r=111481;i=a+8|0;break}case 10:{A=0;r=111481;i=a+8|0;break}case 3:case 2:case 9:{A=1;r=111450;i=a+8|0;break}case 7:case 6:case 11:{A=0;r=111450;i=a+8|0;break}case 0:{A=1;r=111494;i=a+8|0;break}case 4:{A=0;r=75217;i=a+8|0;break}case 1:{A=1;r=111494;i=a+8|0;break}case 5:{A=0;r=111494;i=a+8|0;break}default:ge(138394,75181,106,75200)}a=t[(t[i>>2]|0)+8>>2]|0;t[n>>2]=A;t[n+4>>2]=r;t[n+8>>2]=a;mm(e,75229,n);h=f;return}function jI(e){e=e|0;var A=0;hm(e,78153)|0;hm(e,78161)|0;A=e+12|0;hm(e,iZ(t[t[t[A>>2]>>2]>>2]|0)|0)|0;hm(e,78181)|0;hm(e,iZ(t[(t[t[A>>2]>>2]|0)+4>>2]|0)|0)|0;hm(e,78191)|0;hm(e,iZ(t[(t[t[A>>2]>>2]|0)+8>>2]|0)|0)|0;hm(e,78194)|0;return}function UI(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+32|0;f=l+24|0;n=l+16|0;a=l+8|0;r=l;A=t[e+16>>2]|0;t[46727]=~~(+c[e+232>>3]-+c[e+216>>3]);t[46726]=~~(+c[e+224>>3]-+c[e+208>>3]);hm(e,76840)|0;hm(e,76847)|0;A=Mk(t[A+8>>2]|0)|0;if(i[A>>0]|0){hm(e,76916)|0;hm(e,iZ(A)|0)|0;hm(e,76924)|0}t[r>>2]=P(t[e+168>>2]|0,t[e+164>>2]|0)|0;mm(e,76933,r);hm(e,76953)|0;hm(e,76988)|0;hm(e,77016)|0;hm(e,77022)|0;hm(e,77065)|0;hm(e,77106)|0;hm(e,77125)|0;hm(e,77142)|0;hm(e,77190)|0;hm(e,77243)|0;hm(e,77319)|0;hm(e,77395)|0;hm(e,77404)|0;hm(e,77427)|0;hm(e,77454)|0;hm(e,77507)|0;hm(e,77529)|0;hm(e,77574)|0;hm(e,77586)|0;hm(e,77596)|0;hm(e,77622)|0;hm(e,77507)|0;hm(e,77674)|0;hm(e,77574)|0;hm(e,77586)|0;hm(e,77718)|0;hm(e,77427)|0;hm(e,77454)|0;hm(e,77507)|0;hm(e,77674)|0;hm(e,77574)|0;hm(e,77586)|0;hm(e,77596)|0;hm(e,77622)|0;hm(e,77507)|0;hm(e,77529)|0;hm(e,77574)|0;hm(e,77586)|0;hm(e,77731)|0;hm(e,77739)|0;hm(e,77745)|0;hm(e,77759)|0;hm(e,77767)|0;hm(e,77800)|0;r=(t[46727]|0)+10|0;t[a>>2]=t[46726];t[a+4>>2]=r;mm(e,77877,a);hm(e,77907)|0;hm(e,77916)|0;hm(e,77974)|0;hm(e,77984)|0;hm(e,78049)|0;a=t[46727]|0;t[n>>2]=t[46726];t[n+4>>2]=a;mm(e,78086,n);n=t[46727]|0;t[f>>2]=t[46726];t[f+4>>2]=n;mm(e,78114,f);h=l;return}function TI(e){e=e|0;hm(e,76391)|0;hm(e,76403)|0;hm(e,76411)|0;hm(e,76474)|0;hm(e,76403)|0;hm(e,76519)|0;hm(e,76568)|0;hm(e,76622)|0;hm(e,76403)|0;hm(e,76722)|0;hm(e,76771)|0;hm(e,76403)|0;hm(e,76823)|0;return}function OI(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0;s=h;h=h+32|0;l=s+16|0;f=s+8|0;n=s;hm(e,76349)|0;if(A|0?i[A>>0]|0:0){t[n>>2]=iZ(A)|0;mm(e,76352,n)}if(r|0?i[r>>0]|0:0){t[f>>2]=iZ(r)|0;mm(e,76363,f)}if(a|0?i[a>>0]|0:0){t[l>>2]=iZ(a)|0;mm(e,76375,l)}hm(e,76388)|0;h=s;return}function _I(e){e=e|0;hm(e,76343)|0;return}function qI(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0.0,l=0.0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0.0;I=h;h=h+112|0;y=I+96|0;C=I+88|0;E=I+80|0;k=I+72|0;p=I+64|0;g=I+56|0;v=I+48|0;d=I+40|0;w=I+24|0;b=I+8|0;u=I;B=t[e+16>>2]|0;switch(i[r+48>>0]|0){case 108:{l=+c[A>>3];o=+c[r+32>>3];break}case 114:{o=+c[r+32>>3];l=+c[A>>3]-o;break}default:{o=+c[r+32>>3];l=+c[A>>3]-o*.5}}a=r+40|0;f=+c[a>>3];m=r+4|0;s=+c[(t[m>>2]|0)+16>>3];if(f>3]=f}Z=l+-8.0;s=+((t[46727]|0)>>>0)-+c[A+8>>3]-f+s*.2+(s<12.0?1.4:2.0);mm(e,76005,u);c[b>>3]=Z;c[b+8>>3]=s;mm(e,75942,b);c[w>>3]=l+8.0+o-Z;c[w+8>>3]=f;mm(e,75966,w);hm(e,76040)|0;hm(e,76074)|0;a=t[m>>2]|0;A=t[a+8>>2]|0;if(A){t[d>>2]=t[A+4>>2];mm(e,76164,d);a=t[A+8>>2]|0;if(a|0){t[v>>2]=a;mm(e,76183,v)}a=t[A+12>>2]|0;if(a|0){t[g>>2]=a;mm(e,76200,g)}a=t[A+16>>2]|0;if(a|0){t[p>>2]=a;mm(e,76218,p)}}else{t[k>>2]=t[a>>2];mm(e,76164,k)}c[E>>3]=+c[(t[m>>2]|0)+16>>3];mm(e,76234,E);a=B+16|0;switch(t[B+48>>2]|0){case 5:{a=t[a>>2]|0;if(N1(a,137314)|0){t[C>>2]=a;mm(e,76254,C)}break}case 1:{B=n[a+1>>0]|0;C=n[a+2>>0]|0;t[y>>2]=n[a>>0];t[y+4>>2]=B;t[y+8>>2]=C;mm(e,76264,y);break}default:ge(138394,75728,438,76285)}hm(e,76298)|0;hm(e,iZ(t[r>>2]|0)|0)|0;hm(e,76309)|0;hm(e,76332)|0;h=I;return}function KI(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0,s=0.0,o=0.0;i=h;h=h+32|0;a=i+16|0;l=i;hm(e,75906)|0;o=+c[A>>3];f=+c[A+16>>3]-o;s=+c[A+24>>3];n=s-+c[A+8>>3];s=+((t[46727]|0)>>>0)-s;c[l>>3]=o-f;c[l+8>>3]=s;mm(e,75942,l);c[a>>3]=f*2.0;c[a+8>>3]=n*2.0;mm(e,75966,a);fZ(e,r);hm(e,75788)|0;tZ(e);hm(e,75994)|0;h=i;return}function $I(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0,f=0.0,l=0,s=0,o=0,u=0;o=h;h=h+48|0;s=o+24|0;l=o+8|0;n=o;hm(e,75511)|0;u=t[46727]|0;t[n>>2]=t[46726];t[n+4>>2]=u;mm(e,75764,n);fZ(e,i);hm(e,75788)|0;tZ(e);hm(e,75791)|0;n=r+-1|0;i=0;while(1){if((i|0)>=(r|0))break;f=+c[A+(i<<4)>>3];a=+((t[46727]|0)>>>0)-+c[A+(i<<4)+8>>3];if(!i){hm(e,75818)|0;c[l>>3]=f;c[l+8>>3]=a;mm(e,75884,l);hm(e,75895)|0}else{c[s>>3]=f;c[s+8>>3]=a;mm(e,75884,s)}if((i|0)==(n|0))hm(e,75898)|0;i=i+1|0}hm(e,75627)|0;h=o;return}function eZ(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0;a=h;h=h+16|0;i=a;hm(e,75511)|0;f=t[46727]|0;t[i>>2]=t[46726];t[i+4>>2]=f;mm(e,75764,i);fZ(e,n);hm(e,75788)|0;tZ(e);hm(e,75791)|0;lZ(e,A,r);hm(e,75804)|0;h=a;return}function AZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0.0;s=h;h=h+48|0;l=s+24|0;f=s+8|0;a=s;hm(e,75511)|0;n=t[46727]|0;t[a>>2]=t[46726];t[a+4>>2]=n;mm(e,75548,a);hm(e,75588)|0;a=r+-1|0;n=A+8|0;i=0;while(1){if((i|0)>=(r|0))break;if(!i){hm(e,75600)|0;o=+((t[46727]|0)>>>0)-+c[n>>3];c[f>>3]=+c[A>>3];c[f+8>>3]=o;mm(e,75604,f);hm(e,75615)|0}else{o=+((t[46727]|0)>>>0)-+c[A+(i<<4)+8>>3];c[l>>3]=+c[A+(i<<4)>>3];c[l+8>>3]=o;mm(e,75604,l)}if((i|0)==(a|0))hm(e,75619)|0;i=i+1|0}hm(e,75623)|0;tZ(e);hm(e,75627)|0;h=s;return}function rZ(e,A){e=e|0;A=A|0;hm(e,75446)|0;hm(e,iZ(A)|0)|0;hm(e,75458)|0;return}function iZ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+16|0;r=m;A=t[46724]|0;if(!A){t[46725]=64;A=$F(64)|0;t[46724]=A}v=r+15|0;d=r+14|0;n=0;k=0;b=0;r=0;a=0;e:while(1){u=(b|0)!=0;c=n;w=e;s=r;A:while(1){if(!w){g=32;break e}r=i[w>>0]|0;if(!(r<<24>>24)){g=32;break e}e=t[46725]|0;if((k|0)>(e+-8|0)){A=e<<1;t[46725]=A;A=AM(t[46724]|0,A)|0;t[46724]=A;A=A+k|0;r=i[w>>0]|0}switch(r<<24>>24){case 60:{r=4;e=102153;g=26;break A}case 62:{r=4;e=102136;g=27;break A}case 38:{g=10;break A}case 45:{r=5;e=102147;l=s;break A}default:{}}if(u&r<<24>>24==32){g=12;break}switch(r<<24>>24){case 34:{r=6;e=102116;g=26;break A}case 39:{r=5;e=102141;g=27;break A}default:{}}if(r<<24>>24<0){l=127;e=0}else{r=1;e=w;g=26;break}while(1){n=l&255;f=r&255;if(n>>>0>=f>>>0)break;r=l&f&255;l=n>>>1;e=e+1|0}if((e|0)<=1){n=C6(s|0,a|0,6)|0;n=d6(n|0,G|0,r&255|0,0)|0;a=G;o=c+-1|0;if((c|0)>1){e=o;r=n}else{g=21;break}}else{e=e+-1|0;r=r&255;a=0}c=e;w=w+1|0;s=r}if((g|0)==10){g=0;e=(aZ(w)|0)==0;r=e?5:1;e=e?102130:w;l=s}else if((g|0)==12){g=0;e=(i[b>>0]|0)==32;r=e?6:1;e=e?102123:w;l=s}else if((g|0)==21){g=0;i[v>>0]=59;r=3;f=d;l=n;s=a;while(1){e=E6(l|0,s|0,10,0)|0;n=f+-1|0;i[f>>0]=e|48;e=l;l=p6(l|0,s|0,10,0)|0;a=s;s=G;b=r;r=r+1|0;if((b|0)>11){g=23;break e}if(!(a>>>0>0|(a|0)==0&e>>>0>9))break;else f=n}e=f+-2|0;i[n>>0]=35;i[e>>0]=38;c=o;a=s}else if((g|0)==26){g=0;l=s}else if((g|0)==27){g=0;l=s}f=A+r|0;n=r;while(1){if(!n)break;i[A>>0]=i[e>>0]|0;n=n+-1|0;e=e+1|0;A=A+1|0}n=c;e=w+1|0;k=r+k|0;b=w;A=f;r=l}if((g|0)==23){G3(75464,46,1,t[15712]|0)|0;Ue(1)}else if((g|0)==32){i[A>>0]=0;h=m;return t[46724]|0}return 0}function aZ(e){e=e|0;var A=0,r=0;r=e+1|0;A=i[r>>0]|0;e:do{if(A<<24>>24==35){r=e+2|0;A=i[r>>0]|0;switch(A<<24>>24){case 88:case 120:break;default:{e=r;while(1){r=e+1|0;if((A+-48&255)>=10)break e;e=r;A=i[r>>0]|0}}}r=e+3|0;while(1){A=i[r>>0]|0;if((A+-48&255)>=10)switch(A<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break e}r=r+1|0}}else while(1){e=r+1|0;if(((A&-33)+-65&255)>=26)break e;r=e;A=i[e>>0]|0}}while(0);return A<<24>>24==59|0}function tZ(e){e=e|0;var A=0.0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;s=h;h=h+48|0;r=s+8|0;l=s;f=t[e+16>>2]|0;hm(e,75639)|0;i=r;a=f+16|0;n=i+40|0;do{t[i>>2]=t[a>>2];i=i+4|0;a=a+4|0}while((i|0)<(n|0));nZ(e,r);A=+c[f+152>>3];if(A!=1.0){c[l>>3]=A;mm(e,75657,l)}switch(t[f+144>>2]|0){case 1:{hm(e,75674)|0;break}case 2:{hm(e,75692)|0;break}default:{}}hm(e,75709)|0;h=s;return}function nZ(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0;a=h;h=h+16|0;r=a;e:do{switch(t[A+32>>2]|0){case 5:{hm(e,t[A>>2]|0)|0;break}case 1:if(!(i[A+3>>0]|0)){hm(e,135709)|0;break e}else{l=n[A+1>>0]|0;f=n[A+2>>0]|0;t[r>>2]=n[A>>0];t[r+4>>2]=l;t[r+8>>2]=f;mm(e,75714,r);break e}default:ge(138394,75728,94,75748)}}while(0);h=a;return}function fZ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+48|0;a=n;if(!A)hm(e,75867)|0;else{r=t[e+16>>2]|0;hm(e,75837)|0;A=a;r=r+56|0;i=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));nZ(e,a);hm(e,75864)|0}h=n;return}function lZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0.0,s=0.0;f=h;h=h+32|0;n=f;i=75818;a=0;while(1){if((a|0)>=(r|0))break;s=+c[A+(a<<4)>>3];l=+((t[46727]|0)>>>0)-+c[A+(a<<4)+8>>3];t[n>>2]=i;c[n+8>>3]=s;c[n+16>>3]=l;mm(e,75821,n);i=(a|0)==0?75834:195059;a=a+1|0}hm(e,98744)|0;h=f;return}function sZ(e){e=e|0;var A=0,r=0,i=0;A=h;h=h+16|0;r=A+8|0;i=A;hm(e,80451)|0;hm(e,80466)|0;hm(e,80505)|0;hm(e,80554)|0;t[i>>2]=137314;t[i+4>>2]=80642;mm(e,80623,i);t[r>>2]=137198;t[r+4>>2]=80648;mm(e,80623,r);h=A;return}function cZ(e){e=e|0;var A=0,r=0,i=0.0,a=0.0,n=0.0,f=0.0,l=0;A=h;h=h+64|0;r=A+8|0;l=A;t[l>>2]=Mk(t[(t[e+16>>2]|0)+8>>2]|0)|0;mm(e,79404,l);f=+c[e+368>>3]*.5*+c[e+488>>3];n=+c[e+376>>3]*.5*+c[e+496>>3];a=+N(+(f*2.0000000949949026e-03))*180.0*.6366197723675814;i=+N(+(n*2.0000000949949026e-03))*180.0*.6366197723675814;c[r>>3]=f;c[r+8>>3]=n;c[r+16>>3]=-500.0;c[r+24>>3]=f;c[r+32>>3]=n;c[r+40>>3]=0.0;c[r+48>>3]=(a>i?a:i)*1.2;mm(e,79426,r);hm(e,79573)|0;hm(e,80403)|0;h=A;return}function oZ(e){e=e|0;hm(e,79387)|0;return}function uZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=h;h=h+16|0;n=a;t[n>>2]=A;t[n+4>>2]=r;t[n+8>>2]=i;mm(e,79357,n);s[46728]=+(P(r,-10)|0);h=a;return}function bZ(e){e=e|0;hm(e,79340)|0;return}function hZ(e){e=e|0;hm(e,79322)|0;return}function wZ(e){e=e|0;hm(e,79306)|0;return}function kZ(e){e=e|0;hm(e,79285)|0;s[46728]=+s[46728]+-2.0;return}function dZ(e){e=e|0;hm(e,79266)|0;return}function vZ(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=A;t[r>>2]=Mk(t[(t[e+16>>2]|0)+8>>2]|0)|0;mm(e,79244,r);h=A;return}function gZ(e){e=e|0;hm(e,79228)|0;return}function mZ(e){e=e|0;hm(e,79210)|0;s[46728]=+s[46728]+-5.0;return}function pZ(e){e=e|0;hm(e,79194)|0;s[46728]=+s[46728]+5.0;return}function EZ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0,m=0.0;d=h;h=h+144|0;b=d+104|0;k=d+56|0;o=d+32|0;f=d+24|0;u=d;w=r+4|0;n=t[w>>2]|0;a=+c[n+16>>3];n=t[n>>2]|0;t[u>>2]=t[r>>2];c[u+8>>3]=a;t[u+16>>2]=n;mm(e,79040,u);s[46729]=+s[46728]+-9.0;switch(i[r+48>>0]|0){case 108:{a=+c[A>>3];break}case 114:{n=A;a=+c[A>>3]-+c[r+32>>3];l=5;break}default:{n=A;a=+c[A>>3]-+c[r+32>>3]*.5;l=5}}if((l|0)==5)c[n>>3]=a;m=+c[e+488>>3];g=(+c[e+504>>3]+a)*m;v=(+c[e+512>>3]+ +c[A+8>>3])*+c[e+496>>3];c[f>>3]=+c[(t[w>>2]|0)+16>>3]*m;u=GZ(e,79092,f)|0;a=+(t[e+360>>2]|0);c[o>>3]=0.0;c[o+8>>3]=0.0;c[o+16>>3]=a;n=GZ(e,78309,o)|0;a=+s[46729];c[b>>3]=g;c[b+8>>3]=v;c[b+16>>3]=a;A=GZ(e,78341,b)|0;f=b;l=(t[e+16>>2]|0)+16|0;o=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(o|0));b=LZ(e,b,0.0)|0;r=t[r>>2]|0;t[k>>2]=t[t[w>>2]>>2];c[k+8>>3]=.25;c[k+16>>3]=0.0;t[k+24>>2]=r;t[k+28>>2]=79179;t[k+32>>2]=u;t[k+36>>2]=n;t[k+40>>2]=A;t[k+44>>2]=b;k=GZ(e,79104,k)|0;hm(e,k)|0;G2(k);G2(n);G2(b);G2(A);G2(u);h=d;return}function BZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0.0,o=0,u=0,b=0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0;C=h;h=h+240|0;B=C+192|0;y=C+152|0;g=C+128|0;d=C+104|0;b=C+80|0;u=C+48|0;i=C+24|0;o=C;hm(e,78917)|0;s[46729]=+s[46728]+-6.0;n=+c[A>>3];f=+c[e+488>>3];w=(+c[e+504>>3]+n)*f;I=+c[A+8>>3];l=+c[e+496>>3];k=(+c[e+512>>3]+I)*l;f=(+c[A+16>>3]-n)*f;l=(+c[A+24>>3]-I)*l;v=e+16|0;I=l+f;n=+c[(t[v>>2]|0)+152>>3]/I*2.5;c[o>>3]=f;c[o+8>>3]=I*.25;c[o+16>>3]=l;A=GZ(e,78277,o)|0;o=e+360|0;I=+(t[o>>2]|0);c[i>>3]=90.0;c[i+8>>3]=0.0;c[i+16>>3]=I;i=GZ(e,78309,i)|0;I=+s[46729];c[B>>3]=w;c[B+8>>3]=k;c[B+16>>3]=I;a=GZ(e,78341,B)|0;m=B;p=(t[v>>2]|0)+16|0;E=m+40|0;do{t[m>>2]=t[p>>2];m=m+4|0;p=p+4|0}while((m|0)<(E|0));p=LZ(e,B,0.0)|0;c[u>>3]=1.0;c[u+8>>3]=n;t[u+16>>2]=A;t[u+20>>2]=i;t[u+24>>2]=a;t[u+28>>2]=p;E=GZ(e,78932,u)|0;hm(e,E)|0;G2(A);G2(i);G2(a);G2(p);G2(E);if(r|0){c[b>>3]=f;c[b+8>>3]=l;c[b+16>>3]=1.0;a=GZ(e,78277,b)|0;I=+(t[o>>2]|0);c[d>>3]=0.0;c[d+8>>3]=0.0;c[d+16>>3]=I;i=GZ(e,78309,d)|0;I=+s[46729];c[g>>3]=w;c[g+8>>3]=k;c[g+16>>3]=I;A=GZ(e,78341,g)|0;m=B;p=(t[v>>2]|0)+56|0;E=m+40|0;do{t[m>>2]=t[p>>2];m=m+4|0;p=p+4|0}while((m|0)<(E|0));B=LZ(e,B,0.0)|0;c[y>>3]=0.0;c[y+8>>3]=0.0;c[y+16>>3]=0.0;t[y+24>>2]=a;t[y+28>>2]=i;t[y+32>>2]=A;t[y+36>>2]=B;y=GZ(e,78978,y)|0;hm(e,y)|0;G2(a);G2(i);G2(A);G2(B);G2(y)}h=C;return}function yZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0.0,N=0,R=0.0;M=h;h=h+336|0;Z=M+296|0;F=M+288|0;Y=M+272|0;W=M+264|0;z=M+240|0;L=M+232|0;I=M+208|0;C=M+184|0;E=M+160|0;p=M+152|0;m=M+136|0;g=M+128|0;v=M+96|0;d=M+88|0;k=M+56|0;a=M+48|0;o=M+24|0;l=M;hm(e,78782)|0;s[46729]=+s[46728]+-2.0;b=e+488|0;w=e+496|0;V=+c[w>>3];c[l>>3]=+c[b>>3];c[l+8>>3]=V;c[l+16>>3]=1.0;l=GZ(e,78277,l)|0;y=e+360|0;V=+(t[y>>2]|0);c[o>>3]=0.0;c[o+8>>3]=0.0;c[o+16>>3]=V;o=GZ(e,78309,o)|0;V=+s[46729]+-2.0;c[Z>>3]=0.0;c[Z+8>>3]=0.0;c[Z+16>>3]=V;u=GZ(e,78341,Z)|0;G=e+16|0;n=Z;f=(t[G>>2]|0)+16|0;B=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(B|0));f=LZ(e,Z,0.0)|0;t[a>>2]=78404;t[a+4>>2]=r+1;Q=e+504|0;D=e+512|0;n=0;a=GZ(e,78373,a)|0;while(1){if((n|0)>=(r|0))break;R=+c[D>>3]+ +c[A+(n<<4)+8>>3];V=+c[(t[G>>2]|0)+152>>3];c[k>>3]=+c[Q>>3]+ +c[A+(n<<4)>>3];c[k+8>>3]=R;c[k+16>>3]=0.0;c[k+24>>3]=V;N=GZ(e,78418,k)|0;t[d>>2]=a;t[d+4>>2]=N;B=GZ(e,78447,d)|0;G2(N);G2(a);n=n+1|0;a=B}V=+c[D>>3]+ +c[A+8>>3];R=+c[(t[G>>2]|0)+152>>3];c[v>>3]=+c[Q>>3]+ +c[A>>3];c[v+8>>3]=V;c[v+16>>3]=0.0;c[v+24>>3]=R;B=GZ(e,78418,v)|0;t[g>>2]=a;t[g+4>>2]=B;N=GZ(e,78447,g)|0;G2(B);G2(a);t[m>>2]=l;t[m+4>>2]=o;t[m+8>>2]=u;t[m+12>>2]=f;B=GZ(e,78797,m)|0;t[p>>2]=N;t[p+4>>2]=B;N=GZ(e,78502,p)|0;G2(B);hm(e,N)|0;G2(l);G2(o);G2(u);G2(f);G2(N);if(i|0){R=+c[w>>3];c[E>>3]=+c[b>>3];c[E+8>>3]=R;c[E+16>>3]=1.0;u=GZ(e,78277,E)|0;R=+(t[y>>2]|0);c[C>>3]=0.0;c[C+8>>3]=0.0;c[C+16>>3]=R;o=GZ(e,78309,C)|0;R=+s[46729]+-2.0;c[I>>3]=0.0;c[I+8>>3]=0.0;c[I+16>>3]=R;l=GZ(e,78341,I)|0;n=Z;f=(t[G>>2]|0)+56|0;B=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(B|0));f=LZ(e,Z,.25)|0;t[L>>2]=r;n=0;a=GZ(e,78842,L)|0;while(1){if((n|0)>=(r|0))break;R=+c[D>>3]+ +c[A+(n<<4)+8>>3];c[z>>3]=+c[Q>>3]+ +c[A+(n<<4)>>3];c[z+8>>3]=R;c[z+16>>3]=0.0;L=GZ(e,78857,z)|0;t[W>>2]=a;t[W+4>>2]=L;N=GZ(e,78879,W)|0;G2(L);G2(a);n=n+1|0;a=N}t[Y>>2]=u;t[Y+4>>2]=o;t[Y+8>>2]=l;t[Y+12>>2]=f;Y=GZ(e,78889,Y)|0;t[F>>2]=a;t[F+4>>2]=Y;N=GZ(e,78502,F)|0;G2(Y);hm(e,N)|0;G2(u);G2(o);G2(l);G2(f);G2(N)}h=M;return}function CZ(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0.0,L=0.0;Z=h;h=h+208|0;i=Z+160|0;I=Z+152|0;C=Z+136|0;y=Z+128|0;B=Z+96|0;E=Z+88|0;p=Z+56|0;l=Z+48|0;v=Z+24|0;d=Z;hm(e,78709)|0;s[46729]=+s[46728]+-4.0;G=+c[e+496>>3];c[d>>3]=+c[e+488>>3];c[d+8>>3]=G;c[d+16>>3]=1.0;d=GZ(e,78277,d)|0;G=+(t[e+360>>2]|0);c[v>>3]=0.0;c[v+8>>3]=0.0;c[v+16>>3]=G;v=GZ(e,78309,v)|0;G=+s[46729]+-2.0;c[i>>3]=0.0;c[i+8>>3]=0.0;c[i+16>>3]=G;g=GZ(e,78341,i)|0;m=e+16|0;a=i;n=(t[m>>2]|0)+56|0;f=a+40|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));u=LZ(e,i,0.0)|0;t[l>>2]=78723;t[l+4>>2]=r+2;b=e+504|0;w=e+512|0;k=r+-1|0;o=0;i=GZ(e,78373,l)|0;while(1){if((o|0)>=(r|0))break;a=A+(o<<4)|0;n=A+(o<<4)+8|0;L=+c[w>>3]+ +c[n>>3];G=+c[(t[m>>2]|0)+152>>3];c[p>>3]=+c[b>>3]+ +c[a>>3];c[p+8>>3]=L;c[p+16>>3]=0.0;c[p+24>>3]=G;l=GZ(e,78418,p)|0;t[E>>2]=i;t[E+4>>2]=l;f=GZ(e,78447,E)|0;G2(l);G2(i);if((o|0)==0|(o|0)==(k|0)){G=+c[w>>3]+ +c[n>>3];L=+c[(t[m>>2]|0)+152>>3];c[B>>3]=+c[b>>3]+ +c[a>>3];c[B+8>>3]=G;c[B+16>>3]=0.0;c[B+24>>3]=L;l=GZ(e,78418,B)|0;t[y>>2]=f;t[y+4>>2]=l;i=GZ(e,78447,y)|0;G2(l);G2(f)}else i=f;o=o+1|0}t[C>>2]=d;t[C+4>>2]=v;t[C+8>>2]=g;t[C+12>>2]=u;A=GZ(e,78732,C)|0;t[I>>2]=i;t[I+4>>2]=A;r=GZ(e,78502,I)|0;G2(A);hm(e,r)|0;G2(d);G2(v);G2(g);G2(u);G2(r);h=Z;return}function IZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0.0,B=0,y=0.0;p=h;h=h+160|0;i=p+120|0;m=p+112|0;g=p+96|0;v=p+88|0;d=p+56|0;o=p+48|0;u=p+24|0;k=p;hm(e,78261)|0;s[46729]=+s[46728]+-6.0;E=+c[e+496>>3];c[k>>3]=+c[e+488>>3];c[k+8>>3]=E;c[k+16>>3]=1.0;k=GZ(e,78277,k)|0;E=+(t[e+360>>2]|0);c[u>>3]=0.0;c[u+8>>3]=0.0;c[u+16>>3]=E;u=GZ(e,78309,u)|0;E=+s[46729];c[i>>3]=0.0;c[i+8>>3]=0.0;c[i+16>>3]=E;b=GZ(e,78341,i)|0;w=e+16|0;a=i;n=(t[w>>2]|0)+16|0;f=a+40|0;do{t[a>>2]=t[n>>2];a=a+4|0;n=n+4|0}while((a|0)<(f|0));n=LZ(e,i,0.0)|0;t[o>>2]=78404;t[o+4>>2]=r;f=e+504|0;l=e+512|0;a=0;i=GZ(e,78373,o)|0;while(1){if((a|0)>=(r|0))break;y=+c[l>>3]+ +c[A+(a<<4)+8>>3];E=+c[(t[w>>2]|0)+152>>3];c[d>>3]=+c[f>>3]+ +c[A+(a<<4)>>3];c[d+8>>3]=y;c[d+16>>3]=0.0;c[d+24>>3]=E;B=GZ(e,78418,d)|0;t[v>>2]=i;t[v+4>>2]=B;o=GZ(e,78447,v)|0;G2(B);G2(i);a=a+1|0;i=o}t[g>>2]=k;t[g+4>>2]=u;t[g+8>>2]=b;t[g+12>>2]=n;g=GZ(e,78456,g)|0;t[m>>2]=i;t[m+4>>2]=g;B=GZ(e,78502,m)|0;G2(g);hm(e,B)|0;G2(k);G2(u);G2(b);G2(n);G2(B);h=p;return}function ZZ(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=A;mm(e,78242,i);h=r;return}function GZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;l=h;h=h+1056|0;f=l;i=l+24|0;a=l+8|0;t[a>>2]=r;n=h4(i,1024,A,a)|0;do{if((n|0)>=0)if((n|0)>1023){e=Z2(n+1|0)|0;t[a>>2]=r;O4(e,A,a)|0;break}else{e=o3(i)|0;break}else{e=t[(t[e+12>>2]|0)+16>>2]|0;t[f>>2]=A1(t[(R2()|0)>>2]|0)|0;M5[e&63](78687,f);e=o3(195059)|0}}while(0);h=l;return e|0}function LZ(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0.0;k=h;h=h+112|0;b=k+104|0;l=k+96|0;f=k+64|0;u=k+48|0;w=k+32|0;o=k+16|0;s=k;a=t[A+32>>2]|0;e:do{switch(a|0){case 5:{i=t[A>>2]|0;if(!(e1(i,136302)|0)){t[s>>2]=78524;c[s+8>>3]=r;i=GZ(e,78507,s)|0;break e}if(!(e1(i,133432)|0)){t[o>>2]=78528;c[o+8>>3]=r;i=GZ(e,78507,o)|0;break e}if(!(e1(i,131431)|0)){t[w>>2]=78534;c[w+8>>3]=r;i=GZ(e,78507,w)|0;break e}else{t[u>>2]=i;c[u+8>>3]=r;i=GZ(e,78507,u)|0;break e}}case 1:{v=+(n[A+1>>0]|0)*.00390625;d=+(n[A+2>>0]|0)*.00390625;c[f>>3]=+(n[A>>0]|0)*.00390625;c[f+8>>3]=v;c[f+16>>3]=d;c[f+24>>3]=r;i=GZ(e,78539,f)|0;break}default:{w=t[15712]|0;u=t[A>>2]|0;t[l>>2]=a;t[l+4>>2]=u;a3(w,78578,l)|0;ge(138394,78628,436,78648)}}}while(0);t[b>>2]=i;w=GZ(e,78665,b)|0;G2(i);h=k;return w|0}function QZ(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;A=h;h=h+32|0;r=A+24|0;i=A+16|0;n=A;a=t[e+16>>2]|0;f=t[t[e+12>>2]>>2]|0;s=t[f>>2]|0;l=t[f+4>>2]|0;f=t[f+8>>2]|0;t[n>>2]=81094;t[n+4>>2]=s;t[n+8>>2]=l;t[n+12>>2]=f;mm(e,83704,n);a=Mk(t[a+8>>2]|0)|0;t[i>>2]=81094;t[i+4>>2]=a;mm(e,83736,i);t[r>>2]=81094;mm(e,83750,r);h=A;return}function DZ(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=A;t[r>>2]=81094;mm(e,83652,r);h=A;return}function zZ(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0;T=h;h=h+304|0;U=T+296|0;j=T+288|0;S=T+272|0;P=T+264|0;H=T+256|0;J=T+248|0;x=T+240|0;R=T+232|0;N=T+224|0;V=T+216|0;M=T+208|0;F=T+200|0;Y=T+192|0;W=T+184|0;D=T+176|0;Q=T+168|0;L=T+160|0;G=T+152|0;I=T+144|0;C=T+136|0;y=T+128|0;B=T+120|0;E=T+112|0;p=T+104|0;m=T+96|0;g=T+88|0;v=T+80|0;d=T+72|0;k=T+64|0;w=T+56|0;b=T+48|0;X=T+40|0;Z=T+24|0;u=T+16|0;o=T;n=t[e+456>>2]|0;f=t[e+460>>2]|0;l=t[e+464>>2]|0;s=t[e+468>>2]|0;a=e+360|0;e:do{if(t[4025]|0){switch(t[a>>2]|0){case 90:case 0:break e;default:{}}XZ();t[4025]=0}}while(0);i=(+(s|0)-+(f|0))*.013888888888888888;A=(+(l|0)-+(n|0))*.013888888888888888;s=(t[a>>2]|0)==90;r=s?i:A;i=s?A:i;c[o>>3]=r;c[o+8>>3]=i;mm(e,81281,o);t[u>>2]=81094;mm(e,81296,u);if(r>0.0){A=+l1(r);c[19214]=A;A=A+3.0-+(~~A|0)}else A=3.0;A=+z(10.0,+A);c[19214]=A;c[Z>>3]=A;c[Z+8>>3]=A;mm(e,81465,Z);t[X>>2]=81094;mm(e,81500,X);t[b>>2]=81094;mm(e,81558,b);t[w>>2]=81094;mm(e,81618,w);t[k>>2]=81094;mm(e,81667,k);t[d>>2]=81094;mm(e,81706,d);t[v>>2]=81094;mm(e,81757,v);t[g>>2]=81094;mm(e,81819,g);t[m>>2]=81094;mm(e,81929,m);t[p>>2]=81094;mm(e,82020,p);t[E>>2]=81094;mm(e,82074,E);t[B>>2]=81094;mm(e,82143,B);mm(e,82179,y);t[C>>2]=81094;mm(e,82304,C);t[I>>2]=81094;mm(e,82333,I);mm(e,82373,G);t[L>>2]=81094;mm(e,82466,L);t[Q>>2]=81094;mm(e,82525,Q);t[D>>2]=81094;mm(e,82606,D);mm(e,82676,W);t[Y>>2]=81094;mm(e,82765,Y);t[F>>2]=81094;mm(e,82870,F);t[M>>2]=81094;mm(e,82946,M);t[V>>2]=81094;mm(e,82985,V);t[N>>2]=81094;mm(e,83084,N);t[R>>2]=81094;mm(e,83130,R);mm(e,83219,x);t[J>>2]=81094;mm(e,83260,J);t[H>>2]=81094;mm(e,83343,H);t[P>>2]=81094;mm(e,83444,P);c[S>>3]=i;c[S+8>>3]=r;mm(e,83508,S);mm(e,83536,j);mm(e,83544,U);h=T;return}function WZ(e){e=e|0;var A=0;A=h;h=h+16|0;mm(e,81274,A);h=A;return}function YZ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0.0,b=0,w=0,k=0,d=0;d=h;h=h+48|0;k=d+24|0;w=d+8|0;b=d;switch(i[r+48>>0]|0){case 108:{s=A;f=+c[r+32>>3];l=+c[A>>3];break}case 114:{f=+c[r+32>>3];n=f;a=5;break}default:{f=+c[r+32>>3];n=f*.5;a=5}}if((a|0)==5){l=+c[A>>3]-n;c[A>>3]=l;s=A}o=r+4|0;a=t[o>>2]|0;n=+c[a+16>>3];A=A+8|0;u=+c[A>>3]+n*.004629629629629629;c[A>>3]=u;f=l+f*.006944444444444444;c[s>>3]=f;a=t[a>>2]|0;do{if(a){A=t[46730]|0;if(A|0?(e1(A,a)|0)==0:0)break;t[b>>2]=HZ(a)|0;mm(e,81173,b);b=t[o>>2]|0;t[46730]=t[b>>2];n=+c[b+16>>3]}}while(0);a=~~n;a=(a|0)>1?a:1;if((a|0)!=(t[46731]|0)){l=+c[19214];t[w>>2]=a;c[w+8>>3]=l;mm(e,81181,w);t[46731]=a}t[k>>2]=PZ(t[r>>2]|0)|0;c[k+8>>3]=f;c[k+16>>3]=u;mm(e,81202,k);h=d;return}function FZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0;i=h;h=h+48|0;a=i;f=+c[A>>3];s=(+c[A+16>>3]-f)*.027777777777777776;n=+c[A+8>>3];l=(+c[A+24>>3]-n)*.027777777777777776;t[a>>2]=1;t[a+4>>2]=r|0?81115:195059;c[a+8>>3]=s;c[a+16>>3]=l;c[a+24>>3]=f*.013888888888888888;c[a+32>>3]=n*.013888888888888888;mm(e,81121,a);h=i;return}function MZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;i=h;h=h+16|0;xZ(t[e+16>>2]|0,i+8|0,i);JZ(e,A,r,1);h=i;return}function VZ(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0.0,p=0.0,E=0;g=h;h=h+128|0;v=g+112|0;k=g+104|0;w=g+96|0;i=g+88|0;u=g+16|0;b=g;s=t[e+16>>2]|0;l=Z2((r*140|0)+140|0)|0;xZ(s,g+116|0,g+80|0);p=+c[A>>3];s=u+48|0;c[s>>3]=p;m=+c[A+8>>3];c[u+56>>3]=m;t[i>>2]=~~(p+(p>=0.0?.5:-.5));t[i+4>>2]=~~(m+(m>=0.0?.5:-.5));f=b+8|0;i=l+(T4(l,81099,i)|0)|0;d=1;n=0;while(1){o=n+3|0;if((o|0)>=(r|0))break;t[u>>2]=t[s>>2];t[u+4>>2]=t[s+4>>2];t[u+8>>2]=t[s+8>>2];t[u+12>>2]=t[s+12>>2];a=1;while(1){if((a|0)==4){a=1;break}E=a+n|0;c[u+(a<<4)>>3]=+c[A+(E<<4)>>3];c[u+(a<<4)+8>>3]=+c[A+(E<<4)+8>>3];a=a+1|0}while(1){if((a|0)==7)break;Zx(b,u,3,+(a|0)*.16666666666666666,0,0);m=+c[b>>3];p=+c[f>>3];t[w>>2]=~~(m+(m>=0.0?.5:-.5));t[w+4>>2]=~~(p+(p>=0.0?.5:-.5));a=a+1|0;i=i+(T4(i,81099,w)|0)|0}d=d+6|0;n=o}t[k>>2]=l;mm(e,81106,k);G2(l);a=d+-1|0;i=0;while(1){if((i|0)>=(d|0))break;t[v>>2]=((i|0)%(a|0)|0|0)!=0&1;mm(e,81111,v);i=i+1|0}hm(e,153599)|0;h=g;return}function NZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=h;h=h+16|0;xZ(t[e+16>>2]|0,i+8|0,i);JZ(e,A,r,0);h=i;return}function RZ(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=81094;t[i+4>>2]=A;mm(e,81087,i);h=r;return}function xZ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;switch(t[e+144>>2]|0){case 1:{i=10.0;e=1;break}case 2:{i=10.0;e=2;break}default:{i=0.0;e=0}}t[A>>2]=e;c[r>>3]=i;return}function JZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0.0;l=h;h=h+16|0;f=l+8|0;n=l;a=0;while(1){if((a|0)>=(r|0))break;o=+c[A+(a<<4)>>3];s=+c[A+(a<<4)+8>>3];t[n>>2]=~~(o+(o>=0.0?.5:-.5));t[n+4>>2]=~~(s+(s>=0.0?.5:-.5));mm(e,81099,n);a=a+1|0}if(i|0){s=+c[A>>3];o=+c[A+8>>3];t[f>>2]=~~(s+(s>=0.0?.5:-.5));t[f+4>>2]=~~(o+(o>=0.0?.5:-.5));mm(e,81099,f)}hm(e,153599)|0;h=l;return}function HZ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=h;h=h+16|0;a=f;e:while(1){A=15828;while(1){r=t[A+4>>2]|0;if(!r)break;if(!(e1(r,e)|0)){n=6;break e}A=A+8|0}t[a>>2]=81255;t[a+4>>2]=e;nw(1,81229,a)|0;A=u3(e,45)|0;if(!A){A=81272;break}i[A>>0]=0}h=f;return A|0}function PZ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l;A=t[46732]|0;if(!A){t[46733]=64;A=Z2(64)|0;t[46732]=A;r=0}else r=0;while(1){n=e+1|0;a=i[e>>0]|0;if(!(a<<24>>24))break;e=t[46733]|0;if((r|0)>(e+-8|0)){A=e<<1;t[46733]=A;A=Q2(t[46732]|0,A)|0;t[46732]=A;A=A+r|0}if(a<<24>>24<=-1){i[A>>0]=92;t[f>>2]=a&255;T4(A+1|0,81224,f)|0;e=n;A=A+4|0;r=r+4|0;continue}if(a<<24>>24==92){i[A>>0]=92;r=r+1|0;A=A+1|0}i[A>>0]=a;e=n;A=A+1|0;r=r+1|0}i[A>>0]=0;h=l;return t[46732]|0}function XZ(){var e=0,A=0;e=h;h=h+16|0;A=e;t[A>>2]=81255;t[A+4>>2]=91269;nw(0,83634,A)|0;h=e;return}function SZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0.0,l=0,s=0;i=h;h=h+32|0;a=i+8|0;l=i;A=A+8|0;s=t[A>>2]|0;t[l>>2]=s;t[l+4>>2]=s;mm(e,84223,l);f=(+c[r>>3]+ +c[r+16>>3])*.5;n=(+c[r+8>>3]+ +c[r+24>>3])*.5;t[a>>2]=t[A>>2];c[a+8>>3]=f;c[a+16>>3]=n;mm(e,84265,a);h=i;return}function jZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0.0,l=0.0,s=0.0;i=h;h=h+48|0;a=i;f=+c[r>>3];s=+c[r+16>>3]-f;n=+c[r+24>>3];l=n-+c[r+8>>3];n=+(~~(+c[e+232>>3]-+c[e+216>>3])>>>0)-n;t[a>>2]=t[A+8>>2];c[a+8>>3]=s;c[a+16>>3]=l;c[a+24>>3]=f;c[a+32>>3]=n;mm(e,84310,a);hm(e,84402)|0;h=i;return}function UZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return}function TZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0.0;g=h;h=h+160|0;v=g+152|0;d=g+136|0;k=g+120|0;s=g+112|0;u=g+104|0;o=g+88|0;l=g+72|0;f=g+64|0;b=g;if(!e)ge(111282,84407,212,84426);if(!A)ge(111312,84407,213,84426);w=A+8|0;if(!(t[w>>2]|0))ge(111315,84407,214,84426);if(t[A+52>>2]|0){t[b>>2]=t[r>>2];t[b+4>>2]=t[r+4>>2];t[b+8>>2]=t[r+8>>2];t[b+12>>2]=t[r+12>>2];A=b+32|0;r=r+16|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];a=+c[b>>3];c[b+16>>3]=a;c[b+24>>3]=+c[b+40>>3];c[b+48>>3]=+c[A>>3];n=+c[b+8>>3];c[b+56>>3]=n;if(i<<24>>24){mm(e,84447,f);A=0;while(1){if((A|0)==4)break;m=+c[b+(A<<4)+8>>3];c[l>>3]=+c[b+(A<<4)>>3];c[l+8>>3]=m;mm(e,84450,l);A=A+1|0}c[o>>3]=a;c[o+8>>3]=n;mm(e,84450,o);o=t[w>>2]|0;t[u>>2]=4;t[u+4>>2]=o;mm(e,84457,u)}mm(e,84447,s);A=0;while(1){if((A|0)==4)break;m=+c[b+(A<<4)+8>>3];c[k>>3]=+c[b+(A<<4)>>3];c[k+8>>3]=m;mm(e,84450,k);A=A+1|0}c[d>>3]=a;c[d+8>>3]=n;mm(e,84450,d);d=t[w>>2]|0;t[v>>2]=4;t[v+4>>2]=d;mm(e,84472,v)}h=g;return}function OZ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0.0;b=h;h=h+112|0;u=b+24|0;o=b+16|0;s=b;f=b+28|0;if(!e)ge(111282,84407,153,84488);if(!A)ge(111312,84407,154,84488);if(!(t[A+8>>2]|0))ge(111315,84407,155,84488);l=A+52|0;if(t[l>>2]|0){a=A+60|0;n=t[a>>2]|0;if((n|0)==100)n=18;else{F5[n&127](A);t[l>>2]=0;t[a>>2]=0;t[A+56>>2]=0;n=10}}else n=10;do{if((n|0)==10){if(!((xm(A)|0)<<24>>24))break;a=l6(t[A+20>>2]|0)|0;if((t[A+24>>2]&-2|0)==6){W3(a,f)|0;f=t[f+36>>2]|0;t[A+56>>2]=f;a=S2(0,f,1,1,a,0)|0;t[l>>2]=a;i[A+16>>0]=1}else a=t[l>>2]|0;if(a|0)t[A+60>>2]=100;Jm(A);if(t[l>>2]|0)n=18}}while(0);if((n|0)==18){w=+c[r+8>>3]-+(t[A+36>>2]|0);c[s>>3]=+c[r>>3]-+(t[A+32>>2]|0);c[s+8>>3]=w;mm(e,84506,s);if(!(i[A+16>>0]|0)){t[o>>2]=t[A+12>>2];mm(e,84537,o)}else HV(e,A);mm(e,84552,u)}h=b;return}function _Z(e){e=e|0;P2(t[e+52>>2]|0,t[e+56>>2]|0)|0;return}function qZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;n=h;h=h+80|0;a=n+48|0;if(!e)ge(111282,84407,121,84562);i=t[e+16>>2]|0;if(!i)ge(99902,84407,123,84562);if(!A)ge(111312,84407,124,84562);r=A+8|0;if(!(t[r>>2]|0))ge(111315,84407,125,84562);if(!(t[i+8>>2]|0))ge(138879,84407,128,84562);else{mm(e,84582,n);mm(e,84591,n+8|0);mm(e,84618,n+16|0);mm(e,84643,n+24|0);mm(e,84672,n+32|0);mm(e,84700,n+40|0);t[a>>2]=t[r>>2];mm(e,84707,a);mm(e,84746,n+56|0);mm(e,111008,n+64|0);h=n;return}}function KZ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0.0;f=h;h=h+128|0;n=f+80|0;a=f;if(!e)ge(111282,84407,97,84751);if(!A)ge(111312,84407,98,84751);i=t[A+8>>2]|0;if(!i)ge(111315,84407,99,84751);else{o=+c[r>>3];l=~~(o+(o>=0.0?.5:-.5));o=+c[r+8>>3];A=~~(o+(o>=0.0?.5:-.5));o=+c[r+16>>3];s=~~(o+(o>=0.0?.5:-.5));o=+c[r+24>>3];r=~~(o+(o>=0.0?.5:-.5));t[a>>2]=2;t[a+4>>2]=5;t[a+8>>2]=0;t[a+12>>2]=0;t[a+16>>2]=0;t[a+20>>2]=-1;t[a+24>>2]=1;t[a+28>>2]=-1;t[a+32>>2]=0;c[a+40>>3]=0.0;t[a+48>>2]=0;t[a+52>>2]=0;t[a+56>>2]=0;t[a+60>>2]=0;t[a+64>>2]=0;t[a+68>>2]=5;t[a+72>>2]=0;t[a+76>>2]=i;mm(e,84770,a);t[n>>2]=l;t[n+4>>2]=A;t[n+8>>2]=l;t[n+12>>2]=r;t[n+16>>2]=s;t[n+20>>2]=r;t[n+24>>2]=s;t[n+28>>2]=A;t[n+32>>2]=l;t[n+36>>2]=A;mm(e,84828,n);h=f;return}}function $Z(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0;b=h;h=h+96|0;u=b+56|0;o=b+32|0;s=b;f=+c[r>>3];l=+c[r+16>>3]-f;a=+c[r+24>>3];n=a-+c[r+8>>3];if(!e)ge(111282,84407,53,84860);if(!A)ge(111312,84407,54,84860);i=A+8|0;if(!(t[i>>2]|0))ge(111315,84407,55,84860);hm(e,84879)|0;hm(e,t[i>>2]|0)|0;i=e+360|0;a=-a;if(!(t[i>>2]|0)){c[u>>3]=l;c[u+8>>3]=n;c[u+16>>3]=f;c[u+24>>3]=a;mm(e,85008,u)}else{c[s>>3]=n;c[s+8>>3]=l;c[s+16>>3]=f;c[s+24>>3]=a;mm(e,84899,s);t[o>>2]=t[i>>2];c[o+8>>3]=f;c[o+16>>3]=a;mm(e,84978,o)}hm(e,85087)|0;h=b;return}function eG(e){e=e|0;var A=0,r=0;A=sd(e)|0;while(1){if(!A)break;AG(A);A=cd(e,A)|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;rG(A);A=qw(e,A)|0}r=cd(e,r)|0}return}function AG(e){e=e|0;var A=0,r=0;Sd(e,137447,304,1)|0;Fx(e);WJ(e,t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1);e=e+16|0;t[(t[e>>2]|0)+176>>2]=0;A=KF(20)|0;r=t[e>>2]|0;t[r+172>>2]=A;t[r+184>>2]=0;r=KF(20)|0;A=t[e>>2]|0;t[A+180>>2]=r;t[A+200>>2]=0;A=KF(12)|0;r=t[e>>2]|0;t[r+196>>2]=A;t[r+192>>2]=0;r=KF(12)|0;A=t[e>>2]|0;t[A+188>>2]=r;t[A+208>>2]=0;A=KF(12)|0;e=t[e>>2]|0;t[e+204>>2]=A;t[e+216>>2]=1;return}function rG(e){e=e|0;var A=0,r=0,n=0,f=0,l=0;Sd(e,137460,176,1)|0;Mx(e)|0;f=hx(e,t[47174]|0,1,0)|0;n=e+16|0;t[(t[n>>2]|0)+156>>2]=f;f=dx(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,t[47168]|0,195059)|0;l=dx(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,t[47168]|0,195059)|0;A=t[n>>2]|0;r=A+154|0;a[r>>1]=1;a[A+168>>1]=1;if((f|0)==(l|0)&(i[f>>0]|0)!=0){a[r>>1]=1e3;l=A+156|0;t[l>>2]=(t[l>>2]|0)*100}if(Kz(e)|0){l=t[n>>2]|0;a[l+154>>1]=0;t[l+156>>2]=0}l=(hx(e,t[47187]|0,0,0)|0)&255;i[(t[n>>2]|0)+152>>0]=l;l=(hx(e,t[47175]|0,1,0)|0)&65535;a[(t[n>>2]|0)+170>>1]=l;return}function iG(e){e=e|0;var A=0,r=0;aG(t[(t[e+16>>2]|0)+192>>2]|0);r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;bJ(A);A=qw(e,A)|0}tG(r);r=cd(e,r)|0}nG(e);return}function aG(e){e=e|0;var A=0,r=0,a=0,n=0;while(1){if(!e)break;a=e+16|0;n=t[(t[a>>2]|0)+164>>2]|0;fG(e);A=t[a>>2]|0;if((i[A+156>>0]|0)!=1){e=n;continue}r=t[A+180>>2]|0;if(r){G2(r);A=t[a>>2]|0}r=t[A+172>>2]|0;if(r){G2(r);A=t[a>>2]|0}G2(A);G2(e);e=n}return}function tG(e){e=e|0;var A=0,r=0,i=0;i=e+16|0;A=t[i>>2]|0;r=t[A+172>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+180>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+188>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+196>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+204>>2]|0;if(r){G2(r);A=t[i>>2]|0}SF(t[A+104>>2]|0);SF(t[(t[i>>2]|0)+108>>2]|0);A=t[(t[i>>2]|0)+8>>2]|0;if(A|0)F5[t[(t[A+4>>2]|0)+4>>2]&127](e);Ud(e,137447)|0;return}function nG(e){e=e|0;var A=0,r=0,i=0;A=xv(e)|0;while(1){if(!A)break;nG(A);A=Jv(A)|0}if(Sd(e,137483,0,1)|0){i=e+16|0;A=t[i>>2]|0;r=t[A+184>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+268>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+216>>2]|0;if(r){G2(r);A=t[i>>2]|0}do{if(t[A+196>>2]|0){r=a[A+236>>1]|0;while(1){if((r|0)>(a[A+238>>1]|0))break;G2(t[(t[A+196>>2]|0)+(r<<6)+12>>2]|0);r=r+1|0;A=t[i>>2]|0}r=t[A+196>>2]|0;if((a[A+236>>1]|0)==-1){G2(r+-64|0);break}else{G2(r);break}}}while(0);if((yd(e)|0)!=(e|0)){SF(t[(t[i>>2]|0)+12>>2]|0);Ud(e,137483)|0}}return}function fG(e){e=e|0;var A=0,r=0,i=0;i=e+16|0;r=t[i>>2]|0;A=t[r+176>>2]|0;while(1){e=A+-1|0;if((A|0)<=0)break;A=t[(t[r+172>>2]|0)+(e<<2)>>2]|0;EL(A);G2(t[A+16>>2]|0);G2(A);A=e;r=t[i>>2]|0}A=t[r+184>>2]|0;while(1){e=A+-1|0;if((A|0)<=0)break;A=t[(t[(t[i>>2]|0)+180>>2]|0)+(e<<2)>>2]|0;EL(A);G2(t[A+16>>2]|0);G2(A);A=e}return}function lG(e){e=e|0;if(gk(e)|0)sG(e);MV(e);return}function sG(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;f=h;h=h+48|0;n=f+32|0;a=f;A=oE(e,-1,8)|0;r=uE(e,0,a)|0;cE(e,2,8,a)|0;r=(r|0)==0;i=(A|0)<0;if(i&r)cG(e);else{if(r)t[a+16>>2]=3;else A=i?8:A;t[a+8>>2]=A;t[a+20>>2]=0;i=zp(e,n,0)|0;A=t[n>>2]|0;do{if((A|0)==1){cG(e);A=0}else{if(t[(t[(t[e+16>>2]|0)+8>>2]|0)+84>>2]|0){cG(e);A=0;break}t[a+12>>2]=1;r=0;while(1){if((r|0)>=(A|0))break;A=t[i+(r<<2)>>2]|0;oG(A,e);cG(A);r=r+1|0;A=t[n>>2]|0}uG(e);sE(t[n>>2]|0,i,e,a)|0;bG(e);hG(t[n>>2]|0,i,e);A=0}}while(0);while(1){if((A|0)>=(t[n>>2]|0))break;a=i+(A<<2)|0;G2(t[(t[(t[a>>2]|0)+16>>2]|0)+8>>2]|0);nG(t[a>>2]|0);Ed(e,t[a>>2]|0)|0;A=A+1|0}G2(i)}h=f;return}function cG(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;o=h;h=h+48|0;c=o+40|0;r=o;l=hx(e,zw(e,0,85102,0)|0,-1,1)|0;DJ(e,10);A=qz(e,r)|0;kG(e,e);eG(e);i=(l|0)==1;n=r+32|0;f=(l|0)==2;l=(l|0)==3;s=r+28|0;r=r+24|0;while(1){VD(e,A);if(i){A=3;break}if(t[n>>2]|0){nw(0,85108,c)|0;t[r>>2]=0;A=0}UL(e,(A|0)!=0&1);if(f){A=7;break}_Q(e,A);if(l){A=9;break}u=(t[s>>2]|0)+-1|0;t[s>>2]=u;if(!((u|0)!=0&(t[r>>2]|0)!=0)){A=11;break}}if((A|0)==3)dG(e,1);else if((A|0)==7)dG(e,2);else if((A|0)==9)dG(e,2);else if((A|0)==11){if(a[(t[e+16>>2]|0)+136>>1]&16)vG(e);Dz(e);EG(e);if((mx(Hw(e,85199)|0)|0)<<24>>24)CW(e)}h=o;return}function oG(e,A){e=e|0;A=A|0;var r=0,a=0;Sd(e,137483,280,1)|0;r=KF(96)|0;e=t[e+16>>2]|0;t[e+8>>2]=r;A=t[A+16>>2]|0;a=t[A+8>>2]|0;c[r>>3]=+c[a>>3];c[r+24>>3]=+c[a+24>>3];t[e+144>>2]=t[A+144>>2];i[e+115>>0]=i[A+115>>0]|0;t[e+116>>2]=t[A+116>>2];t[e+248>>2]=t[A+248>>2];t[e+252>>2]=t[A+252>>2];t[e+244>>2]=t[A+244>>2];return}function uG(e){e=e|0;var A=0,r=0,i=0;A=KF((gk(e)|0)<<4)|0;r=sd(e)|0;while(1){if(!r)break;i=t[r+16>>2]|0;t[i+132>>2]=A;c[A>>3]=+c[i+16>>3]*.013888888888888888;c[A+8>>3]=+c[i+24>>3]*.013888888888888888;A=A+16|0;r=cd(e,r)|0}return}function bG(e){e=e|0;var A=0,r=0,i=0,a=0;i=t[(t[(sd(e)|0)+16>>2]|0)+132>>2]|0;A=i;r=sd(e)|0;while(1){if(!r)break;a=t[r+16>>2]|0;t[a+132>>2]=0;c[a+16>>3]=+c[A>>3]*72.0;c[a+24>>3]=+c[A+8>>3]*72.0;A=A+16|0;r=cd(e,r)|0}G2(i);return}function hG(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;i=0;a=0;while(1){if((i|0)>=(e|0))break;l=(t[(t[(t[A+(i<<2)>>2]|0)+16>>2]|0)+180>>2]|0)+a|0;i=i+1|0;a=l}l=r+16|0;t[(t[l>>2]|0)+180>>2]=a;n=KF((a<<2)+4|0)|0;t[(t[l>>2]|0)+184>>2]=n;n=0;i=1;while(1){if((n|0)>=(e|0))break;f=(t[A+(n<<2)>>2]|0)+16|0;a=1;while(1){r=t[f>>2]|0;if((a|0)>(t[r+180>>2]|0))break;r=Dp(t[(t[r+184>>2]|0)+(a<<2)>>2]|0)|0;t[(t[(t[l>>2]|0)+184>>2]|0)+(i<<2)>>2]=r;wG(t[(t[(t[f>>2]|0)+184>>2]|0)+(a<<2)>>2]|0,r);a=a+1|0;i=i+1|0}n=n+1|0}return}function wG(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;Sd(A,137483,280,1)|0;n=A+16|0;A=(t[n>>2]|0)+16|0;a=e+16|0;e=(t[a>>2]|0)+16|0;t[A>>2]=t[e>>2];t[A+4>>2]=t[e+4>>2];t[A+8>>2]=t[e+8>>2];t[A+12>>2]=t[e+12>>2];t[A+16>>2]=t[e+16>>2];t[A+20>>2]=t[e+20>>2];t[A+24>>2]=t[e+24>>2];t[A+28>>2]=t[e+28>>2];e=t[a>>2]|0;A=t[n>>2]|0;i[A+275>>0]=i[e+275>>0]|0;A=A+48|0;e=e+48|0;r=A+64|0;do{t[A>>2]=t[e>>2];A=A+4|0;e=e+4|0}while((A|0)<(r|0));e=t[(t[a>>2]|0)+180>>2]|0;t[(t[n>>2]|0)+180>>2]=e;A=KF((e<<2)+4|0)|0;t[(t[n>>2]|0)+184>>2]=A;A=1;while(1){r=t[a>>2]|0;if((A|0)>(e|0))break;r=Dp(t[(t[r+184>>2]|0)+(A<<2)>>2]|0)|0;t[(t[(t[n>>2]|0)+184>>2]|0)+(A<<2)>>2]=r;wG(t[(t[(t[a>>2]|0)+184>>2]|0)+(A<<2)>>2]|0,r);A=A+1|0}a=r+12|0;t[(t[n>>2]|0)+12>>2]=t[a>>2];t[a>>2]=0;return}function kG(e,A){e=e|0;A=A|0;if((yd(e)|0)!=(e|0))Sd(e,137483,280,1)|0;if((e|0)==(A|0))t[(t[(yd(e)|0)+16>>2]|0)+188>>2]=e;e=xv(e)|0;while(1){if(!e)break;kG(e,A);e=Jv(e)|0}return}function dG(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+1040|0;c=o+8|0;s=o;i=o+16|0;a=zw(e,1,87171,195059)|0;n=zw(e,1,85242,195059)|0;f=(A|0)>0;r=(A|0)==1;A=sd(e)|0;while(1){if(!A)break;if(f?(l=A+16|0,t[s>>2]=t[(t[l>>2]|0)+232>>2],T4(i,137395,s)|0,Mw(A,a,i)|0,!r):0){t[c>>2]=t[(t[l>>2]|0)+236>>2];T4(i,137395,c)|0;Mw(A,n,i)|0}A=cd(e,A)|0}h=o;return}function vG(e){e=e|0;var A=0,r=0,i=0;r=Rv(e,86675,0)|0;if(r|0){A=sd(r)|0;while(1){if(!A)break;i=cd(r,A)|0;QL(e,A);gG(e,A);tG(A);pd(e,A)|0;A=i}Pv(e,r)|0}return}function gG(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;s=t[(t[A+16>>2]|0)+232>>2]|0;l=e+16|0;e=t[(t[l>>2]|0)+196>>2]|0;r=t[e+(s<<6)>>2]|0;f=e+(s<<6)+4|0;n=0;i=0;while(1){if((i|0)>=(r|0)){a=7;break}a=t[(t[f>>2]|0)+(i<<2)>>2]|0;i=i+1|0;if((a|0)==(A|0)){a=4;break}else n=a}if((a|0)==4){while(1){if((i|0)>=(r|0))break;a=t[e+(s<<6)+4>>2]|0;t[a+(i+-1<<2)>>2]=t[a+(i<<2)>>2];a=t[(t[l>>2]|0)+196>>2]|0;i=i+1|0;r=t[a+(s<<6)>>2]|0;e=a;a=4}t[e+(s<<6)>>2]=r+-1}else if((a|0)==7?(n|0)!=(A|0):0)ge(85208,85215,248,85225);return}function mG(e){e=e|0;return t[(t[(yd(e)|0)+16>>2]|0)+188>>2]|0}function pG(e,A){e=e|0;A=A|0;var r=0;r=i[e+28>>0]|0;if(i[A+28>>0]|0)if(r<<24>>24){r=~~(+c[e>>3]-+c[A>>3]);if(!r)r=~~(+c[e+8>>3]-+c[A+8>>3])}else r=-1;else r=r<<24>>24!=0&1;return r|0}function EG(e){e=e|0;BG(e,1);return}function BG(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0,q=0,K=0.0;q=h;h=h+656|0;x=q+592|0;R=q+552|0;r=q+544|0;S=q+96|0;j=q;_=q+632|0;U=e+16|0;O=a[(t[U>>2]|0)+136>>1]&14;J=O&65535;H=S+16|0;t[H>>2]=q+368;P=j+16|0;t[P>>2]=q+192;do{if(O<<16>>16){X=O<<16>>16==4;do{if(X){yG(e);if(!(i[(t[(t[e+60>>2]|0)+16>>2]|0)+113>>0]&1))I=9;else{nw(0,85248,r)|0;I=9}}else if(O<<16>>16==8){yG(e);if(!(i[(t[(t[e+60>>2]|0)+16>>2]|0)+113>>0]&1)){sA(e,0);u=0;o=0;s=0;break}else{CG(e);sA(e,1);u=0;o=0;s=0;break}}else I=9}while(0);if((I|0)==9){BW(e);if(TV()|0)break;T=KF(96)|0;M=t[(t[U>>2]|0)+248>>2]|0;t[_+8>>2]=(M|0)/4|0;t[_+12>>2]=M;s=KF(512)|0;D=_+4|0;t[D>>2]=0;t[_>>2]=0;l=t[U>>2]|0;G=a[l+236>>1]|0;L=0;V=0;N=s;Q=s;o=s;u=s;b=s;W=0;Y=0;e:while(1){if((G|0)>(a[l+238>>1]|0))break;w=t[l+196>>2]|0;f=t[w+(G<<6)>>2]|0;z=f+L|0;n=t[w+(G<<6)+4>>2]|0;r=t[n>>2]|0;if(!r)r=W;else{K=+(W|0);r=t[r+16>>2]|0;y=+c[r+16>>3]-+c[r+88>>3];r=~~(y>K?K:y)}if((f|0)!=0?(F=t[n+(f+-1<<2)>>2]|0,(F|0)!=0):0){y=+(Y|0);n=t[F+16>>2]|0;K=+c[n+96>>3]+ +c[n+16>>3];n=~~(K=(f|0))break;s=t[(t[r+(G<<6)+4>>2]|0)+(B<<2)>>2]|0;E=s+16|0;r=t[E>>2]|0;f=t[r+112>>2]|0;if(f){f=f+16|0;l=t[(t[f>>2]|0)+96>>2]|0;if(!l){I=21;break e}v=l+56|0;r=r+16|0;t[v>>2]=t[r>>2];t[v+4>>2]=t[r+4>>2];t[v+8>>2]=t[r+8>>2];t[v+12>>2]=t[r+12>>2];i[(t[(t[f>>2]|0)+96>>2]|0)+81>>0]=1;r=t[E>>2]|0}if((i[r+156>>0]|0)!=0?(I5[t[17300>>2]&63](s)|0)<<24>>24==0:0){k=g;r=d;l=m;s=p;f=b}else{v=0;k=g;l=m;s=p;I=25}A:do{if((I|0)==25){while(1){I=0;w=t[E>>2]|0;f=t[(t[w+180>>2]|0)+(v<<2)>>2]|0;if(!f)break;switch(i[(t[f+16>>2]|0)+112>>0]|0){case 6:case 4:{r=k;f=d;break}default:{IG(f,1,16,64);r=k+1|0;t[d+(k<<2)>>2]=f;if(!(r&127)){n=AM(n,(k<<2)+516|0)|0;f=n;l=n;s=n;u=n;b=n}else f=d}}v=v+1|0;k=r;d=f;I=25}r=t[w+188>>2]|0;r:do{if(!r)f=b;else{v=0;f=b;while(1){r=t[r+(v<<2)>>2]|0;if(!r)break r;IG(r,2,0,128);b=k+1|0;t[d+(k<<2)>>2]=r;if(!(b&127)){n=AM(f,(k<<2)+516|0)|0;r=n;l=n;s=n;u=n;f=n}else r=d;w=t[E>>2]|0;v=v+1|0;k=b;d=r;r=t[w+188>>2]|0}}}while(0);r=t[w+204>>2]|0;if(!r)r=d;else{if(!(i[w+156>>0]|0)){p=w+96|0;K=+c[p>>3];v=w+240|0;c[p>>3]=+c[v>>3];c[v>>3]=K;v=0;w=d}else{v=0;w=d}while(1){r=t[r+(v<<2)>>2]|0;if(!r){r=w;break A}IG(r,0,0,128);b=k+1|0;t[w+(k<<2)>>2]=r;if(!(b&127)){n=AM(u,(k<<2)+516|0)|0;r=n;l=n;s=n;u=n;f=n}else r=w;v=v+1|0;k=b;w=r;r=t[(t[E>>2]|0)+204>>2]|0}}}}while(0);m=t[U>>2]|0;E=t[m+196>>2]|0;B=B+1|0;g=k;d=r;k=m;m=l;p=s;b=f;f=t[E+(G<<6)>>2]|0;r=E}G=G+1|0;L=z;V=g;N=d;Q=m;l=k;o=p;s=n;W=Z;Y=C}if((I|0)==21)ge(85316,85329,313,85342);t[_>>2]=W;t[D>>2]=Y;_4(Q,V,4,58);t[T+84>>2]=KF((L<<5)+11520|0)|0;t[_+16>>2]=KF(G<<5)|0;e:do{if(O<<16>>16==2){r=(t[U>>2]|0)+192|0;while(1){n=t[r>>2]|0;if(!n)break e;f=n+16|0;r=t[f>>2]|0;if((i[r+156>>0]|0)==1?(t[r+104>>2]|0)!=0:0){GG(n);r=t[f>>2]|0}r=r+164|0}}}while(0);C=j+48|0;I=j+-48|0;Z=S+48|0;G=S+-48|0;y=+(M|0);B=0;e:while(1){if((B|0)>=(V|0))break;p=N+(B<<2)|0;d=t[p>>2]|0;v=LG(d)|0;g=d+16|0;n=t[g>>2]|0;if(!(i[n+44>>0]|0)){n=(i[n+84>>0]|0)==0?v:d;r=n;n=t[n+16>>2]|0}else r=d;f=r+16|0;if(t[n+164>>2]&32){n=t[H>>2]|0;Q6(n|0,t[f>>2]|0,176)|0;u=S;b=r;w=u+48|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));t[H>>2]=n;b=t[r>>2]&3;u=t[S>>2]&3;t[((u|0)==3?S:Z)+40>>2]=t[((b|0)==2?r:r+-48|0)+40>>2];t[((u|0)==2?S:G)+40>>2]=t[((b|0)==3?r:r+48|0)+40>>2];u=n+16|0;b=(t[f>>2]|0)+56|0;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));u=n+56|0;b=(t[f>>2]|0)+16|0;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));i[n+112>>0]=1;t[n+116>>2]=r;r=S}k=r+16|0;E=1;r=B;while(1){m=r+1|0;if((m|0)>=(V|0))break;l=N+(m<<2)|0;r=t[l>>2]|0;if((v|0)!=(LG(r)|0))break;if(!(i[(t[g>>2]|0)+113>>0]|0)){s=r+16|0;n=t[s>>2]|0;if(!(i[n+44>>0]|0)){n=(i[n+84>>0]|0)==0?v:r;r=n;n=t[n+16>>2]|0}f=r+16|0;if(t[n+164>>2]&32){n=t[P>>2]|0;Q6(n|0,t[f>>2]|0,176)|0;u=j;b=r;w=u+48|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));t[P>>2]=n;b=t[r>>2]&3;u=t[j>>2]&3;t[((u|0)==3?j:C)+40>>2]=t[((b|0)==2?r:r+-48|0)+40>>2];t[((u|0)==2?j:I)+40>>2]=t[((b|0)==3?r:r+48|0)+40>>2];u=n+16|0;b=(t[f>>2]|0)+56|0;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));u=n+56|0;b=(t[f>>2]|0)+16|0;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));i[n+112>>0]=1;t[n+116>>2]=r}f=t[k>>2]|0;r=n+16|0;u=R;b=f+16|0;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));u=x;b=r;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));if(pG(R,x)|0)break;r=n+56|0;u=R;b=f+56|0;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));u=x;b=r;w=u+40|0;do{t[u>>2]=t[b>>2];u=u+4|0;b=b+4|0}while((u|0)<(w|0));if(pG(R,x)|0)break;M=t[g>>2]|0;if((t[M+164>>2]&15|0)==2?(t[M+96>>2]|0)!=(t[(t[s>>2]|0)+96>>2]|0):0)break;if(t[(t[(t[l>>2]|0)+16>>2]|0)+164>>2]&64|0)break}E=E+1|0;r=m}if(X){if((E|0)==1)r=x;else r=KF(E<<2)|0;t[r>>2]=LG(t[p>>2]|0)|0;n=1;while(1){if((n|0)>=(E|0))break;t[r+(n<<2)>>2]=t[p+(n<<2)>>2];n=n+1|0}aN(e,r,E,J,17296);if((E|0)>1)G2(r);B=m;continue}r=t[d>>2]&3;M=t[((r|0)==3?d:d+48|0)+40>>2]|0;r=t[((r|0)==2?d:d+-48|0)+40>>2]|0;n=t[M+16>>2]|0;f=t[n+232>>2]|0;if((M|0)!=(r|0))if((f|0)==(t[(t[r+16>>2]|0)+232>>2]|0)){QG(e,_,T,N,B,E,J);B=m;continue}else{DG(e,_,T,N,B,E,J);B=m;continue}r=t[U>>2]|0;do{if((f|0)==(a[r+238>>1]|0))if((f|0)>0){r=~~(+c[(t[(t[t[(t[r+196>>2]|0)+(f+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+c[n+24>>3]);break}else{r=~~+c[n+80>>3];break}else if((f|0)==(a[r+236>>1]|0)){r=~~(+c[n+24>>3]-+c[(t[(t[t[(t[r+196>>2]|0)+(f+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);break}else{r=t[r+196>>2]|0;K=+c[n+24>>3];M=~~(+c[(t[(t[t[r+(f+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-K);r=~~(K-+c[(t[(t[t[r+(f+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);r=(M|0)<(r|0)?M:r;break}}while(0);GR(T,N,B,E,y,+((r|0)/2|0|0),17296);r=0;while(1){if((r|0)>=(E|0)){B=m;continue e}n=t[(t[(t[N+(r+B<<2)>>2]|0)+16>>2]|0)+96>>2]|0;if(n|0)Hx(e,n);r=r+1|0}}r=(t[U>>2]|0)+192|0;while(1){n=t[r>>2]|0;if(!n)break;f=n+16|0;r=t[f>>2]|0;if((i[r+156>>0]|0)==1?(t[r+104>>2]|0)!=0:0){GG(n);Hx(e,t[(t[f>>2]|0)+104>>2]|0);r=t[f>>2]|0}r=r+164|0}if(!A){u=T;s=T}else{zG(e);u=T;s=T}}e:do{if((t[47197]|0)!=0|(t[47198]|0)!=0?(t[47203]|0)!=0|(t[47202]|0)!=0:0){l=sd(e)|0;while(1){if(!l)break e;A:do{if(t[47197]|0){r=Kw(e,l)|0;while(1){if(!r)break A;n=r+-48|0;f=(t[r>>2]&3|0)==2?r:n;if(t[(t[f+16>>2]|0)+100>>2]|0){MR(f,1)|0;Hx(e,t[(t[((t[r>>2]&3|0)==2?r:n)+16>>2]|0)+100>>2]|0)}r=$w(e,r)|0}}}while(0);A:do{if(t[47198]|0){r=Ow(e,l)|0;while(1){if(!r)break A;n=r+16|0;if(t[(t[n>>2]|0)+104>>2]|0?MR(r,0)|0:0)Hx(e,t[(t[n>>2]|0)+104>>2]|0);r=qw(e,r)|0}}}while(0);l=cd(e,l)|0}}}while(0);switch(O&15){case 4:case 8:break;default:{G2(o);G2(t[u+84>>2]|0);G2(s);G2(t[_+16>>2]|0);OV()}}t[47138]=1;t[47139]=1}}while(0);h=q;return}function yG(e){e=e|0;var A=0,r=0,i=0.0,a=0;A=sd(e)|0;while(1){if(!A)break;r=t[A+16>>2]|0;if(t[r+204>>2]|0){a=r+96|0;i=+c[a>>3];r=r+240|0;c[a>>3]=+c[r>>3];c[r>>3]=i}A=cd(e,A)|0}return}function CG(e){e=e|0;var A=0,r=0,a=0,n=0;A=(t[e+16>>2]|0)+192|0;e:while(1){a=t[A>>2]|0;if(!a){A=12;break}n=a+16|0;A=t[n>>2]|0;do{if((i[A+156>>0]|0)==1){r=t[A+112>>2]|0;if(!r){r=t[A+104>>2]|0;if(!r)break;GG(a);A=r}else{r=t[(t[r+16>>2]|0)+96>>2]|0;if(!r){A=6;break e}a=r+56|0;A=A+16|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];i[r+81>>0]=1;A=r}Hx(e,A);A=t[n>>2]|0}}while(0);A=A+164|0}if((A|0)==6)ge(85516,85329,234,85535);else if((A|0)==12)return}function IG(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0;do{if(!A){n=t[e>>2]&3;A=t[((n|0)==3?e:e+48|0)+40>>2]|0;n=t[((n|0)==2?e:e+-48|0)+40>>2]|0;if((A|0)!=(n|0)){A=(t[(t[A+16>>2]|0)+232>>2]|0)==(t[(t[n+16>>2]|0)+232>>2]|0)?2:1;break}A=t[e+16>>2]|0;if(!(i[A+44>>0]|0))A=(i[A+84>>0]|0)==0?8:4;else A=4}}while(0);e:do{if(!r)switch(A|0){case 1:{r=t[e>>2]&3;r=(t[(t[(t[((r|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)<(t[(t[(t[((r|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)?16:32;break e}case 2:{r=t[e>>2]&3;r=(t[(t[(t[((r|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)<(t[(t[(t[((r|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)?16:32;break e}default:{r=16;break e}}}while(0);t[(t[e+16>>2]|0)+164>>2]=A|a|r;return}function ZG(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0;L=h;h=h+624|0;C=L+584|0;y=L+544|0;v=L+368|0;r=L+192|0;g=L+96|0;p=L;m=g+16|0;t[m>>2]=v;E=p+16|0;t[E>>2]=r;G=t[e>>2]|0;Z=t[A>>2]|0;B=G+16|0;k=t[B>>2]|0;A=t[k+164>>2]|0;a=A&15;I=Z+16|0;e=t[I>>2]|0;n=t[e+164>>2]&15;do{if((n|0)==(a|0)){w=LG(G)|0;d=LG(Z)|0;u=t[w>>2]|0;n=u&3;a=t[(t[((n|0)==3?w:w+48|0)+40>>2]|0)+16>>2]|0;n=t[(t[((n|0)==2?w:w+-48|0)+40>>2]|0)+16>>2]|0;f=(t[a+232>>2]|0)-(t[n+232>>2]|0)|0;b=t[d>>2]|0;o=b&3;s=t[(t[((o|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0;o=t[(t[((o|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0;l=(t[s+232>>2]|0)-(t[o+232>>2]|0)|0;f=(f|0)>-1?f:0-f|0;l=(l|0)>-1?l:0-l|0;if((f|0)!=(l|0)){e=f-l|0;break}n=~~(+c[a+16>>3]-+c[n+16>>3]);n=(n|0)>-1?n:0-n|0;a=~~(+c[s+16>>3]-+c[o+16>>3]);a=(a|0)>-1?a:0-a|0;if((n|0)!=(a|0)){e=n-a|0;break}n=u>>>4;a=b>>>4;if((n|0)!=(a|0)){e=n-a|0;break}if(!(i[k+44>>0]|0)){A=(i[k+84>>0]|0)==0?w:G;n=A;A=t[(t[A+16>>2]|0)+164>>2]|0}else n=G;a=n+16|0;if(A&32){Q6(v|0,t[a>>2]|0,176)|0;f=g;l=n;s=f+48|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));t[m>>2]=v;l=t[n>>2]&3;f=t[g>>2]&3;t[((f|0)==3?g:g+48|0)+40>>2]=t[((l|0)==2?n:n+-48|0)+40>>2];t[((f|0)==2?g:g+-48|0)+40>>2]=t[((l|0)==3?n:n+48|0)+40>>2];f=v+16|0;l=(t[a>>2]|0)+56|0;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));f=v+56|0;l=(t[a>>2]|0)+16|0;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));i[v+112>>0]=1;t[v+116>>2]=n;n=g;e=t[I>>2]|0}if(!(i[e+44>>0]|0)){e=(i[e+84>>0]|0)==0?d:Z;a=e;e=t[e+16>>2]|0}else a=Z;A=a+16|0;if(!(t[e+164>>2]&32))r=e;else{Q6(r|0,t[A>>2]|0,176)|0;f=p;l=a;s=f+48|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));t[E>>2]=r;l=t[a>>2]&3;f=t[p>>2]&3;t[((f|0)==3?p:p+48|0)+40>>2]=t[((l|0)==2?a:a+-48|0)+40>>2];t[((f|0)==2?p:p+-48|0)+40>>2]=t[((l|0)==3?a:a+48|0)+40>>2];f=r+16|0;l=(t[A>>2]|0)+56|0;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));f=r+56|0;l=(t[A>>2]|0)+16|0;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));i[r+112>>0]=1;t[r+116>>2]=a}A=t[n+16>>2]|0;e=r+16|0;f=y;l=A+16|0;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));f=C;l=e;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));e=pG(y,C)|0;if(!e){e=r+56|0;f=y;l=A+56|0;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));f=C;l=e;s=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));e=pG(y,C)|0;if(!e){A=t[(t[B>>2]|0)+164>>2]&192;e=t[(t[I>>2]|0)+164>>2]&192;if((A|0)==(e|0)){e=((t[G>>2]|0)>>>4)-((t[Z>>2]|0)>>>4)|0;break}else{e=A-e|0;break}}}}else e=n-a|0}while(0);h=L;return e|0}function GG(e){e=e|0;var A=0,r=0,a=0,n=0.0,f=0.0;a=e+16|0;A=t[a>>2]|0;if(t[A+176>>2]|0){A=t[A+180>>2]|0;while(1){A=(t[A>>2]|0)+16|0;r=t[A>>2]|0;if(!(i[r+112>>0]|0))break;else A=r+116|0}r=t[r+96>>2]|0;n=+c[r+24>>3];f=+c[r+32>>3];r=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1|0)!=0;e=t[a>>2]|0;a=t[(t[A>>2]|0)+96>>2]|0;c[a+56>>3]=(r?f:n)*.5+ +c[e+16>>3];c[a+64>>3]=+c[e+24>>3];i[a+81>>0]=1}return}function LG(e){e=e|0;var A=0,r=0;while(1){A=t[e+16>>2]|0;r=t[A+172>>2]|0;if(!r)break;else e=r}while(1){A=t[A+116>>2]|0;if(!A)break;e=A;A=t[A+16>>2]|0}return e|0}function QG(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;var s=0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0.0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0.0,L=0.0,Q=0.0,D=0.0,z=0.0;Z=h;h=h+1712|0;B=Z+1664|0;v=Z+1488|0;g=Z+1392|0;I=Z+1696|0;y=Z+696|0;C=Z;w=g+16|0;t[w>>2]=v;k=t[a+(n<<2)>>2]|0;d=k+16|0;s=t[d>>2]|0;m=i[s+113>>0]|0;if(t[s+164>>2]&32){Q6(v|0,s|0,176)|0;s=g;u=k;b=s+48|0;do{t[s>>2]=t[u>>2];s=s+4|0;u=u+4|0}while((s|0)<(b|0));t[w>>2]=v;s=t[g>>2]&3;t[((s|0)==3?g:g+48|0)+40>>2]=t[((t[k>>2]&3|0)==2?k:k+-48|0)+40>>2];t[((s|0)==2?g:g+-48|0)+40>>2]=t[((t[k>>2]&3|0)==3?k:k+48|0)+40>>2];s=v+16|0;u=(t[d>>2]|0)+56|0;b=s+40|0;do{t[s>>2]=t[u>>2];s=s+4|0;u=u+4|0}while((s|0)<(b|0));s=v+56|0;u=(t[d>>2]|0)+16|0;b=s+40|0;do{t[s>>2]=t[u>>2];s=s+4|0;u=u+4|0}while((s|0)<(b|0));i[v+112>>0]=1;t[v+116>>2]=k;k=g}s=1;while(1){if((s|0)>=(f|0)){E=6;break}if(!(i[(t[(t[a+(s+n<<2)>>2]|0)+16>>2]|0)+113>>0]|0))s=s+1|0;else{E=7;break}}e:do{if((E|0)==6)if(!(m<<24>>24)){s=t[k+16>>2]|0;if(t[s+96>>2]|0){rL(e,A,r,k,l);break}if((l|0)==2){I=t[k>>2]&3;iL(t[((I|0)==3?k:k+48|0)+40>>2]|0,t[((I|0)==2?k:k+-48|0)+40>>2]|0,a,n,f,2);break}g=i[s+49>>0]|0;m=i[s+89>>0]|0;if(!(g<<24>>24==1&m<<24>>24!=4)?!(g<<24>>24!=4&m<<24>>24==1):0){w=t[k>>2]&3;b=t[((w|0)==3?k:k+48|0)+40>>2]|0;w=t[((w|0)==2?k:k+-48|0)+40>>2]|0;s=t[b+16>>2]|0;u=t[s+232>>2]|0;if((u|0)>0){m=t[(t[e+16>>2]|0)+196>>2]|0;g=u+~(i[(t[(t[e+60>>2]|0)+16>>2]|0)+113>>0]&1)|0;o=+c[(t[(t[t[m+(g<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+c[m+(g<<6)+16>>3]-+c[s+24>>3]-+c[m+(u<<6)+24>>3]}else o=+(t[(t[e+16>>2]|0)+252>>2]|0);G=+(f+1|0);p=+(t[A+12>>2]|0)/G;o=o/G;tL(e,A,r,b,k,y,1);tL(e,A,r,w,k,C,0);v=y+52|0;g=C+52|0;w=(l|0)==10;k=r+80|0;s=0;while(1){if((s|0)>=(f|0))break e;d=t[a+(s+n<<2)>>2]|0;b=t[v>>2]|0;u=b+-1|0;z=+c[y+56+(u<<5)>>3];D=+c[y+56+(u<<5)+16>>3];Q=+c[y+56+(u<<5)+24>>3];c[19215]=z;c[19216]=Q;s=s+1|0;G=+(s|0);L=p*G;c[19217]=D+L;G=Q+o*G;c[19218]=G;c[19219]=z;c[19220]=G;u=(t[g>>2]|0)+-1|0;z=+c[C+56+(u<<5)+16>>3];c[19221]=z;c[19222]=G+o;Q=+c[C+56+(u<<5)>>3];D=+c[C+56+(u<<5)+24>>3];c[19225]=z;c[19224]=D;c[19223]=Q-L;c[19226]=G;u=0;while(1){if((u|0)>=(b|0)){u=0;break}b=y+56+(u<<5)|0;t[B>>2]=t[b>>2];t[B+4>>2]=t[b+4>>2];t[B+8>>2]=t[b+8>>2];t[B+12>>2]=t[b+12>>2];t[B+16>>2]=t[b+16>>2];t[B+20>>2]=t[b+20>>2];t[B+24>>2]=t[b+24>>2];t[B+28>>2]=t[b+28>>2];ER(r,B);u=u+1|0;b=t[v>>2]|0}while(1){if((u|0)==3)break;l=153720+(u<<5)|0;t[B>>2]=t[l>>2];t[B+4>>2]=t[l+4>>2];t[B+8>>2]=t[l+8>>2];t[B+12>>2]=t[l+12>>2];t[B+16>>2]=t[l+16>>2];t[B+20>>2]=t[l+20>>2];t[B+24>>2]=t[l+24>>2];t[B+28>>2]=t[l+28>>2];ER(r,B);u=u+1|0}b=t[g>>2]|0;while(1){u=b+-1|0;if((b|0)<=0)break;b=C+56+(u<<5)|0;t[B>>2]=t[b>>2];t[B+4>>2]=t[b+4>>2];t[B+8>>2]=t[b+8>>2];t[B+12>>2]=t[b+12>>2];t[B+16>>2]=t[b+16>>2];t[B+20>>2]=t[b+20>>2];t[B+24>>2]=t[b+24>>2];t[B+28>>2]=t[b+28>>2];ER(r,B);b=u}if(w)u=_V(r,I)|0;else u=rN(r,I)|0;b=t[I>>2]|0;if(!b)break e;mR(d,t[((t[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,u,b,17296);t[k>>2]=0}}aL(e,A,r,a,n,f,k,(l|0)==10&1)}else E=7}while(0);if((E|0)==7)AL(e,a,n,f,k,l);h=Z;return}function DG(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;var s=0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0,q=0,K=0,$=0,ee=0,Ae=0,re=0;Ae=h;h=h+2576|0;X=Ae+2528|0;K=Ae+2568|0;s=Ae+2352|0;u=Ae+2176|0;g=Ae+1904|0;_=Ae+1808|0;$=Ae+1712|0;S=Ae+1016|0;j=Ae+320|0;U=Ae+256|0;O=Ae+2564|0;q=Ae+2560|0;C=Ae+288|0;I=Ae+224|0;V=Ae+192|0;N=Ae+160|0;R=Ae+128|0;x=Ae+96|0;J=Ae+64|0;H=Ae+32|0;T=Ae;v=g+16|0;t[v>>2]=s;b=_+16|0;t[b>>2]=u;ee=$+16|0;t[ee>>2]=Ae+2e3;if(!(t[46734]|0)){t[46734]=$F(32e3)|0;t[46735]=$F(32e3)|0;t[46736]=2e3;t[46737]=2e3}m=t[a+(n<<2)>>2]|0;M=t[m>>2]&3;w=m+48|0;k=m+-48|0;M=(t[(t[(t[((M|0)==3?m:w)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((M|0)==2?m:k)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0;d=m+16|0;if((((M|0)>-1?M:0-M|0)|0)<=1){s=t[d>>2]|0;if(!(t[s+164>>2]&32)){M=m;u=0}else{u=t[v>>2]|0;Q6(u|0,s|0,176)|0;E=g;B=m;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));t[v>>2]=u;E=t[g>>2]&3;t[((E|0)==3?g:g+48|0)+40>>2]=t[((t[m>>2]&3|0)==2?m:k)+40>>2];t[((E|0)==2?g:g+-48|0)+40>>2]=t[((t[m>>2]&3|0)==3?m:w)+40>>2];E=u+16|0;B=(t[d>>2]|0)+56|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));s=t[v>>2]|0;E=s+56|0;B=(t[d>>2]|0)+16|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));i[s+112>>0]=1;u=0;F=12}}else{Q6(s|0,t[d>>2]|0,176)|0;E=g;B=m;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));E=g+48|0;B=w;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));t[v>>2]=s;s=t[d>>2]|0;if(!(t[s+164>>2]&32)){Q6(u|0,s|0,176)|0;E=_;B=m;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));t[b>>2]=u;b=t[g>>2]|0;t[((b&3|0)==3?g:g+48|0)+40>>2]=t[((t[m>>2]&3|0)==3?m:w)+40>>2];E=_+48|0;B=w;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0))}else{u=t[b>>2]|0;Q6(u|0,s|0,176)|0;E=_;B=m;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));t[b>>2]=u;E=t[_>>2]&3;t[((E|0)==3?_:_+48|0)+40>>2]=t[((t[m>>2]&3|0)==2?m:k)+40>>2];t[((E|0)==2?_:_+-48|0)+40>>2]=t[((t[m>>2]&3|0)==3?m:w)+40>>2];E=u+16|0;B=(t[d>>2]|0)+56|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));s=t[b>>2]|0;E=s+56|0;B=(t[d>>2]|0)+16|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));i[s+112>>0]=1;t[s+116>>2]=m;b=t[g>>2]|0;t[((b&3|0)==3?g:g+48|0)+40>>2]=t[((t[m>>2]&3|0)==2?m:k)+40>>2];E=(t[v>>2]|0)+16|0;B=(t[d>>2]|0)+56|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0))}s=LG(m)|0;while(1){u=t[(t[s+16>>2]|0)+172>>2]|0;if(!u)break;else s=u}t[((b&3|0)==2?g:g+-48|0)+40>>2]=t[((t[s>>2]&3|0)==2?s:s+-48|0)+40>>2];s=t[v>>2]|0;i[s+84>>0]=0;i[s+112>>0]=1;u=s+56|0;t[u>>2]=0;t[u+4>>2]=0;t[u+8>>2]=0;t[u+12>>2]=0;u=1;F=12}if((F|0)==12){t[s+116>>2]=m;M=g}W=(l|0)==2;if(W?(p=FG(e,M,t[46734]|0,K)|0,t[q>>2]=p,(p|0)!=0):0)F=63;else F=15;e:do{if((F|0)==15){z=(l|0)==10;t[q>>2]=0;b=t[M>>2]&3;s=t[((b|0)==3?M:M+48|0)+40>>2]|0;b=t[((b|0)==2?M:M+-48|0)+40>>2]|0;t[K>>2]=b;MG(C,e,A,s,0,M);t[S>>2]=t[C>>2];t[S+4>>2]=t[C+4>>2];t[S+8>>2]=t[C+8>>2];t[S+12>>2]=t[C+12>>2];t[S+16>>2]=t[C+16>>2];t[S+20>>2]=t[C+20>>2];t[S+24>>2]=t[C+24>>2];t[S+28>>2]=t[C+28>>2];t[U>>2]=t[C>>2];t[U+4>>2]=t[C+4>>2];t[U+8>>2]=t[C+8>>2];t[U+12>>2]=t[C+12>>2];t[U+16>>2]=t[C+16>>2];t[U+20>>2]=t[C+20>>2];BR(r,M,1,S,VG(s)|0);Z=S+52|0;Y=(t[Z>>2]|0)+-1|0;L=U+24|0;c[L>>3]=+c[S+56+(Y<<5)+24>>3];Q=U+8|0;c[Q>>3]=+c[S+56+(Y<<5)+8>>3];Y=t[s+16>>2]|0;D=e+16|0;o=+c[Y+24>>3]-+c[(t[(t[D>>2]|0)+196>>2]|0)+(t[Y+232>>2]<<6)+16>>3];t[X>>2]=t[U>>2];t[X+4>>2]=t[U+4>>2];t[X+8>>2]=t[U+8>>2];t[X+12>>2]=t[U+12>>2];t[X+16>>2]=t[U+16>>2];t[X+20>>2]=t[U+20>>2];t[X+24>>2]=t[U+24>>2];t[X+28>>2]=t[U+28>>2];NG(I,X,1,o);t[U>>2]=t[I>>2];t[U+4>>2]=t[I+4>>2];t[U+8>>2]=t[I+8>>2];t[U+12>>2]=t[I+12>>2];t[U+16>>2]=t[I+16>>2];t[U+20>>2]=t[I+20>>2];t[U+24>>2]=t[I+24>>2];t[U+28>>2]=t[I+28>>2];I=U+16|0;if(+c[U>>3]<+c[I>>3]?+c[Q>>3]<+c[L>>3]:0){Y=t[Z>>2]|0;t[Z>>2]=Y+1;Y=S+56+(Y<<5)|0;t[Y>>2]=t[U>>2];t[Y+4>>2]=t[U+4>>2];t[Y+8>>2]=t[U+8>>2];t[Y+12>>2]=t[U+12>>2];t[Y+16>>2]=t[U+16>>2];t[Y+20>>2]=t[U+20>>2];t[Y+24>>2]=t[U+24>>2];t[Y+28>>2]=t[U+28>>2]}E=e+60|0;G=j+52|0;B=r+56|0;y=r+69|0;l=r+16|0;C=r+29|0;Y=M;k=0;d=-1;A:while(1){v=s;g=0;s=0;m=Y;while(1){w=b;p=b;if((i[(t[w+16>>2]|0)+156>>0]|0)!=1)break A;if((I5[t[17300>>2]&63](w)|0)<<24>>24)break A;b=g|1;re=153720+(g<<5)|0;RG(V,A,e,t[(t[v+16>>2]|0)+232>>2]|0);t[re>>2]=t[V>>2];t[re+4>>2]=t[V+4>>2];t[re+8>>2]=t[V+8>>2];t[re+12>>2]=t[V+12>>2];t[re+16>>2]=t[V+16>>2];t[re+20>>2]=t[V+20>>2];t[re+24>>2]=t[V+24>>2];t[re+28>>2]=t[V+28>>2];if(!s){k=xG(w)|0;s=(k|0)<((i[(t[(t[E>>2]|0)+16>>2]|0)+113>>0]<<1&2)+3&255|0);k=s?k:k+-2|0;d=s?d:1;s=(s^1)&1}if(!((s|0)==0|(d|0)>0))break;re=153720+(b<<5)|0;MG(N,e,A,w,m,t[t[(t[w+16>>2]|0)+180>>2]>>2]|0);t[re>>2]=t[N>>2];t[re+4>>2]=t[N+4>>2];t[re+8>>2]=t[N+8>>2];t[re+12>>2]=t[N+12>>2];t[re+16>>2]=t[N+16>>2];t[re+20>>2]=t[N+20>>2];t[re+24>>2]=t[N+24>>2];t[re+28>>2]=t[N+28>>2];re=t[t[(t[p+16>>2]|0)+180>>2]>>2]|0;b=t[re>>2]&3;v=t[((b|0)==3?re:re+48|0)+40>>2]|0;b=t[((b|0)==2?re:re+-48|0)+40>>2]|0;t[K>>2]=b;g=g+2|0;d=d+-1|0;m=re}MG(R,e,A,w,m,t[t[(t[w+16>>2]|0)+180>>2]>>2]|0);t[j>>2]=t[R>>2];t[j+4>>2]=t[R+4>>2];t[j+8>>2]=t[R+8>>2];t[j+12>>2]=t[R+12>>2];t[j+16>>2]=t[R+16>>2];t[j+20>>2]=t[R+20>>2];t[j+24>>2]=t[R+24>>2];t[j+28>>2]=t[R+28>>2];IR(r,m,1,j,VG(t[((t[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0)|0);re=j+56+((t[G>>2]|0)+-1<<5)|0;g=t[p+16>>2]|0;o=+c[(t[(t[D>>2]|0)+196>>2]|0)+(t[g+232>>2]<<6)+24>>3]+ +c[g+24>>3];t[X>>2]=t[re>>2];t[X+4>>2]=t[re+4>>2];t[X+8>>2]=t[re+8>>2];t[X+12>>2]=t[re+12>>2];t[X+16>>2]=t[re+16>>2];t[X+20>>2]=t[re+20>>2];t[X+24>>2]=t[re+24>>2];t[X+28>>2]=t[re+28>>2];NG(U,X,4,o);if(+c[U>>3]<+c[I>>3]?+c[Q>>3]<+c[L>>3]:0){re=t[G>>2]|0;t[G>>2]=re+1;re=j+56+(re<<5)|0;t[re>>2]=t[U>>2];t[re+4>>2]=t[U+4>>2];t[re+8>>2]=t[U+8>>2];t[re+12>>2]=t[U+12>>2];t[re+16>>2]=t[U+16>>2];t[re+20>>2]=t[U+20>>2];t[re+24>>2]=t[U+24>>2];t[re+28>>2]=t[U+28>>2]}c[B>>3]=1.5707963267948966;i[y>>0]=1;JG(r,Y,m,S,j,b);if(!z){s=rN(r,O)|0;b=t[O>>2]|0;if(W&(b|0)>4){re=s+16|0;t[re>>2]=t[s>>2];t[re+4>>2]=t[s+4>>2];t[re+8>>2]=t[s+8>>2];t[re+12>>2]=t[s+12>>2];re=s+32|0;b=s+(b+-1<<4)|0;t[re>>2]=t[b>>2];t[re+4>>2]=t[b+4>>2];t[re+8>>2]=t[b+8>>2];t[re+12>>2]=t[b+12>>2];D6(s+48|0,b|0,16)|0;t[O>>2]=4;b=4}else F=33}else{s=_V(r,O)|0;b=t[O>>2]|0;F=33}if((F|0)==33){F=0;if(!b)break e}m=t[q>>2]|0;w=m+b|0;if((w|0)>(t[46736]|0)){t[46736]=w<<1;g=AM(t[46734]|0,w<<5)|0;t[46734]=g;b=t[O>>2]|0}else g=t[46734]|0;v=0;w=m;while(1){if((v|0)>=(b|0))break;re=g+(w<<4)|0;m=s+(v<<4)|0;t[re>>2]=t[m>>2];t[re+4>>2]=t[m+4>>2];t[re+8>>2]=t[m+8>>2];t[re+12>>2]=t[m+12>>2];v=v+1|0;w=w+1|0}t[q>>2]=w;b=HG(t[t[(t[p+16>>2]|0)+180>>2]>>2]|0,k,g,q)|0;PG(Y,r);w=t[b>>2]&3;s=t[((w|0)==3?b:b+48|0)+40>>2]|0;w=t[((w|0)==2?b:b+-48|0)+40>>2]|0;t[K>>2]=w;Y=s+16|0;MG(x,e,A,s,t[t[(t[Y>>2]|0)+172>>2]>>2]|0,b);t[S>>2]=t[x>>2];t[S+4>>2]=t[x+4>>2];t[S+8>>2]=t[x+8>>2];t[S+12>>2]=t[x+12>>2];t[S+16>>2]=t[x+16>>2];t[S+20>>2]=t[x+20>>2];t[S+24>>2]=t[x+24>>2];t[S+28>>2]=t[x+28>>2];BR(r,b,1,S,VG(s)|0);re=S+56+((t[Z>>2]|0)+-1<<5)|0;Y=t[Y>>2]|0;o=+c[Y+24>>3]-+c[(t[(t[D>>2]|0)+196>>2]|0)+(t[Y+232>>2]<<6)+16>>3];t[X>>2]=t[re>>2];t[X+4>>2]=t[re+4>>2];t[X+8>>2]=t[re+8>>2];t[X+12>>2]=t[re+12>>2];t[X+16>>2]=t[re+16>>2];t[X+20>>2]=t[re+20>>2];t[X+24>>2]=t[re+24>>2];t[X+28>>2]=t[re+28>>2];NG(U,X,1,o);if(+c[U>>3]<+c[I>>3]?+c[Q>>3]<+c[L>>3]:0){re=t[Z>>2]|0;t[Z>>2]=re+1;re=S+56+(re<<5)|0;t[re>>2]=t[U>>2];t[re+4>>2]=t[U+4>>2];t[re+8>>2]=t[U+8>>2];t[re+12>>2]=t[U+12>>2];t[re+16>>2]=t[U+16>>2];t[re+20>>2]=t[U+20>>2];t[re+24>>2]=t[U+24>>2];t[re+28>>2]=t[U+28>>2]}c[l>>3]=-1.5707963267948966;i[C>>0]=1;Y=b;b=w}s=g|1;d=153720+(g<<5)|0;RG(J,A,e,t[(t[v+16>>2]|0)+232>>2]|0);t[d>>2]=t[J>>2];t[d+4>>2]=t[J+4>>2];t[d+8>>2]=t[J+8>>2];t[d+12>>2]=t[J+12>>2];t[d+16>>2]=t[J+16>>2];t[d+20>>2]=t[J+20>>2];t[d+24>>2]=t[J+24>>2];t[d+28>>2]=t[J+28>>2];MG(H,e,A,w,m,0);t[j>>2]=t[H>>2];t[j+4>>2]=t[H+4>>2];t[j+8>>2]=t[H+8>>2];t[j+12>>2]=t[H+12>>2];t[j+16>>2]=t[H+16>>2];t[j+20>>2]=t[H+20>>2];t[j+24>>2]=t[H+24>>2];t[j+28>>2]=t[H+28>>2];t[U>>2]=t[H>>2];t[U+4>>2]=t[H+4>>2];t[U+8>>2]=t[H+8>>2];t[U+12>>2]=t[H+12>>2];t[U+16>>2]=t[H+16>>2];t[U+20>>2]=t[H+20>>2];t[U+24>>2]=t[H+24>>2];t[U+28>>2]=t[H+28>>2];d=(u|0)!=0;v=m+-48|0;IR(r,d?_:m,1,j,VG(t[((t[m>>2]&3|0)==2?m:v)+40>>2]|0)|0);re=(t[G>>2]|0)+-1|0;c[L>>3]=+c[j+56+(re<<5)+24>>3];c[Q>>3]=+c[j+56+(re<<5)+8>>3];re=t[p+16>>2]|0;o=+c[(t[(t[D>>2]|0)+196>>2]|0)+(t[re+232>>2]<<6)+24>>3]+ +c[re+24>>3];t[X>>2]=t[U>>2];t[X+4>>2]=t[U+4>>2];t[X+8>>2]=t[U+8>>2];t[X+12>>2]=t[U+12>>2];t[X+16>>2]=t[U+16>>2];t[X+20>>2]=t[U+20>>2];t[X+24>>2]=t[U+24>>2];t[X+28>>2]=t[U+28>>2];NG(T,X,4,o);t[U>>2]=t[T>>2];t[U+4>>2]=t[T+4>>2];t[U+8>>2]=t[T+8>>2];t[U+12>>2]=t[T+12>>2];t[U+16>>2]=t[T+16>>2];t[U+20>>2]=t[T+20>>2];t[U+24>>2]=t[T+24>>2];t[U+28>>2]=t[T+28>>2];if(+c[U>>3]<+c[I>>3]?+c[Q>>3]<+c[L>>3]:0){re=t[G>>2]|0;t[G>>2]=re+1;re=j+56+(re<<5)|0;t[re>>2]=t[U>>2];t[re+4>>2]=t[U+4>>2];t[re+8>>2]=t[U+8>>2];t[re+12>>2]=t[U+12>>2];t[re+16>>2]=t[U+16>>2];t[re+20>>2]=t[U+20>>2];t[re+24>>2]=t[U+24>>2];t[re+28>>2]=t[U+28>>2]}JG(r,Y,m,S,j,s);if(z)k=_V(r,O)|0;else k=rN(r,O)|0;s=t[O>>2]|0;if(!(W&(s|0)>4)){if(!s)break}else{re=k+16|0;t[re>>2]=t[k>>2];t[re+4>>2]=t[k+4>>2];t[re+8>>2]=t[k+8>>2];t[re+12>>2]=t[k+12>>2];re=k+32|0;s=k+(s+-1<<4)|0;t[re>>2]=t[s>>2];t[re+4>>2]=t[s+4>>2];t[re+8>>2]=t[s+8>>2];t[re+12>>2]=t[s+12>>2];D6(k+48|0,s|0,16)|0;t[O>>2]=4;s=4}b=t[q>>2]|0;u=b+s|0;if((u|0)>(t[46736]|0)){t[46736]=u<<1;w=AM(t[46734]|0,u<<5)|0;t[46734]=w;s=t[O>>2]|0}else w=t[46734]|0;u=0;while(1){if((u|0)>=(s|0))break;re=w+(b<<4)|0;O=k+(u<<4)|0;t[re>>2]=t[O>>2];t[re+4>>2]=t[O+4>>2];t[re+8>>2]=t[O+8>>2];t[re+12>>2]=t[O+12>>2];u=u+1|0;b=b+1|0}t[q>>2]=b;PG(Y,r);if(d)s=(t[_>>2]&3|0)==2?_:_+-48|0;else s=(t[m>>2]&3|0)==2?m:v;t[K>>2]=t[s+40>>2];p=b;F=63}}while(0);e:do{if((F|0)==63){if((f|0)==1){mR(M,t[K>>2]|0,t[46734]|0,p,17296);break}g=A+12|0;m=p+-1|0;o=+((P(t[g>>2]|0,f+-1|0)|0)/2|0|0);u=t[46734]|0;s=1;while(1){if((s|0)>=(m|0))break;re=u+(s<<4)|0;c[re>>3]=+c[re>>3]-o;s=s+1|0}s=t[46736]|0;if((s|0)>(t[46737]|0)){t[46737]=s;b=AM(t[46735]|0,s<<4)|0;t[46735]=b;u=t[46734]|0}else b=t[46735]|0;s=0;while(1){if((s|0)>=(p|0))break;re=b+(s<<4)|0;A=u+(s<<4)|0;t[re>>2]=t[A>>2];t[re+4>>2]=t[A+4>>2];t[re+8>>2]=t[A+8>>2];t[re+12>>2]=t[A+12>>2];s=s+1|0}mR(M,t[K>>2]|0,b,p,17296);d=$+48|0;v=$+-48|0;k=1;while(1){if((k|0)>=(f|0))break e;b=t[a+(k+n<<2)>>2]|0;w=b+16|0;s=t[w>>2]|0;if(t[s+164>>2]&32){u=t[ee>>2]|0;Q6(u|0,s|0,176)|0;E=$;B=b;y=E+48|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));t[ee>>2]=u;E=t[$>>2]&3;t[((E|0)==3?$:d)+40>>2]=t[((t[b>>2]&3|0)==2?b:b+-48|0)+40>>2];t[((E|0)==2?$:v)+40>>2]=t[((t[b>>2]&3|0)==3?b:b+48|0)+40>>2];E=u+16|0;B=(t[w>>2]|0)+56|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));s=t[ee>>2]|0;E=s+56|0;B=(t[w>>2]|0)+16|0;y=E+40|0;do{t[E>>2]=t[B>>2];E=E+4|0;B=B+4|0}while((E|0)<(y|0));i[s+112>>0]=1;t[s+116>>2]=b;b=$}w=t[46734]|0;s=1;while(1){if((s|0)>=(m|0))break;re=w+(s<<4)|0;c[re>>3]=+c[re>>3]+ +(t[g>>2]|0);s=s+1|0}u=t[46735]|0;s=0;while(1){if((s|0)>=(p|0))break;re=u+(s<<4)|0;K=w+(s<<4)|0;t[re>>2]=t[K>>2];t[re+4>>2]=t[K+4>>2];t[re+8>>2]=t[K+8>>2];t[re+12>>2]=t[K+12>>2];s=s+1|0}mR(b,t[((t[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0,u,p,17296);k=k+1|0}}}while(0);h=Ae;return}function zG(e){e=e|0;var A=0,r=0,i=0;A=sd(e)|0;while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;if((I5[t[4324]&63](r)|0)<<24>>24?(i=t[(t[r+16>>2]|0)+8>>2]|0,i|0):0)WG(i);r=qw(e,r)|0}A=cd(e,A)|0}return}function WG(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=t[e+4>>2]|0;n=$F(a*48|0)|0;A=n;r=0;i=(t[e>>2]|0)+((a+-1|0)*48|0)|0;while(1){if((r|0)>=(a|0)){A=0;break}YG(i,A);A=A+48|0;r=r+1|0;i=i+-48|0}while(1){r=t[e>>2]|0;if((A|0)>=(a|0))break;G2(t[r+(A*48|0)>>2]|0);A=A+1|0}G2(r);t[e>>2]=n;return}function YG(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;n=t[e+4>>2]|0;f=$F(n<<4)|0;r=f;i=0;a=(t[e>>2]|0)+(n+-1<<4)|0;while(1){if((i|0)>=(n|0))break;t[r>>2]=t[a>>2];t[r+4>>2]=t[a+4>>2];t[r+8>>2]=t[a+8>>2];t[r+12>>2]=t[a+12>>2];r=r+16|0;i=i+1|0;a=a+-16|0}t[A>>2]=f;t[A+4>>2]=n;t[A+8>>2]=t[e+12>>2];t[A+12>>2]=t[e+8>>2];f=A+16|0;n=e+32|0;t[f>>2]=t[n>>2];t[f+4>>2]=t[n+4>>2];t[f+8>>2]=t[n+8>>2];t[f+12>>2]=t[n+12>>2];f=A+32|0;n=e+16|0;t[f>>2]=t[n>>2];t[f+4>>2]=t[n+4>>2];t[f+8>>2]=t[n+8>>2];t[f+12>>2]=t[n+12>>2];return}function FG(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;B=h;h=h+96|0;k=B+80|0;v=B+64|0;d=B+48|0;m=B+32|0;p=B+16|0;E=B;o=A;while(1){g=o+16|0;n=t[g>>2]|0;if(!(i[n+112>>0]|0))break;o=t[n+116>>2]|0}n=t[o>>2]&3;b=t[((n|0)==2?o:o+-48|0)+40>>2]|0;n=t[((n|0)==3?o:o+48|0)+40>>2]|0;o=b+16|0;u=n+16|0;y=(t[(t[o>>2]|0)+232>>2]|0)-(t[(t[u>>2]|0)+232>>2]|0)|0;switch(((y|0)>-1?y:0-y|0)|0){case 1:{n=0;break}case 2:{if(!(i[(t[(t[e+60>>2]|0)+16>>2]|0)+113>>0]&1))w=6;else n=0;break}default:w=6}do{if((w|0)==6){if((t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)==(n|0)){t[a>>2]=b;y=(t[u>>2]|0)+16|0;w=(t[g>>2]|0)+16|0;t[v>>2]=t[y>>2];t[v+4>>2]=t[y+4>>2];t[v+8>>2]=t[y+8>>2];t[v+12>>2]=t[y+12>>2];t[k>>2]=t[w>>2];t[k+4>>2]=t[w+4>>2];t[k+8>>2]=t[w+8>>2];t[k+12>>2]=t[w+12>>2];$G(m,v,k);w=(t[o>>2]|0)+16|0;y=(t[g>>2]|0)+56|0;t[v>>2]=t[w>>2];t[v+4>>2]=t[w+4>>2];t[v+8>>2]=t[w+8>>2];t[v+12>>2]=t[w+12>>2];t[k>>2]=t[y>>2];t[k+4>>2]=t[y+4>>2];t[k+8>>2]=t[y+8>>2];t[k+12>>2]=t[y+12>>2];$G(p,v,k)}else{t[a>>2]=n;y=(t[o>>2]|0)+16|0;w=(t[g>>2]|0)+56|0;t[v>>2]=t[y>>2];t[v+4>>2]=t[y+4>>2];t[v+8>>2]=t[y+8>>2];t[v+12>>2]=t[y+12>>2];t[k>>2]=t[w>>2];t[k+4>>2]=t[w+4>>2];t[k+8>>2]=t[w+8>>2];t[k+12>>2]=t[w+12>>2];$G(m,v,k);w=(t[u>>2]|0)+16|0;y=(t[g>>2]|0)+16|0;t[v>>2]=t[w>>2];t[v+4>>2]=t[w+4>>2];t[v+8>>2]=t[w+8>>2];t[v+12>>2]=t[w+12>>2];t[k>>2]=t[y>>2];t[k+4>>2]=t[y+4>>2];t[k+8>>2]=t[y+8>>2];t[k+12>>2]=t[y+12>>2];$G(p,v,k)}n=t[(t[g>>2]|0)+96>>2]|0;if(!n){n=r+16|0;t[r>>2]=t[m>>2];t[r+4>>2]=t[m+4>>2];t[r+8>>2]=t[m+8>>2];t[r+12>>2]=t[m+12>>2];t[n>>2]=t[m>>2];t[n+4>>2]=t[m+4>>2];t[n+8>>2]=t[m+8>>2];t[n+12>>2]=t[m+12>>2];n=r+48|0;y=r+32|0;t[y>>2]=t[p>>2];t[y+4>>2]=t[p+4>>2];t[y+8>>2]=t[p+8>>2];t[y+12>>2]=t[p+12>>2];t[n>>2]=t[p>>2];t[n+4>>2]=t[p+4>>2];t[n+8>>2]=t[p+8>>2];t[n+12>>2]=t[p+12>>2];n=4;break}l=+c[n+24>>3];f=+c[n+32>>3];w=(t[(t[(Bd(b)|0)+16>>2]|0)+116>>2]&1|0)==0;s=w?f:l;y=(t[(t[g>>2]|0)+96>>2]|0)+56|0;t[E>>2]=t[y>>2];t[E+4>>2]=t[y+4>>2];t[E+8>>2]=t[y+8>>2];t[E+12>>2]=t[y+12>>2];t[d>>2]=t[p>>2];t[d+4>>2]=t[p+4>>2];t[d+8>>2]=t[p+8>>2];t[d+12>>2]=t[p+12>>2];t[v>>2]=t[m>>2];t[v+4>>2]=t[m+4>>2];t[v+8>>2]=t[m+8>>2];t[v+12>>2]=t[m+12>>2];t[k>>2]=t[y>>2];t[k+4>>2]=t[y+4>>2];t[k+8>>2]=t[y+8>>2];t[k+12>>2]=t[y+12>>2];y=(eL(d,v,k)|0)==0;f=(w?l:f)*.5;l=+c[E>>3];if(y){c[E>>3]=l-f;y=E+8|0;c[y>>3]=+c[y>>3]+s*.5}else{c[E>>3]=l+f;y=E+8|0;c[y>>3]=+c[y>>3]-s*.5}n=r+16|0;t[r>>2]=t[m>>2];t[r+4>>2]=t[m+4>>2];t[r+8>>2]=t[m+8>>2];t[r+12>>2]=t[m+12>>2];t[n>>2]=t[m>>2];t[n+4>>2]=t[m+4>>2];t[n+8>>2]=t[m+8>>2];t[n+12>>2]=t[m+12>>2];n=r+32|0;y=r+48|0;m=r+64|0;t[m>>2]=t[E>>2];t[m+4>>2]=t[E+4>>2];t[m+8>>2]=t[E+8>>2];t[m+12>>2]=t[E+12>>2];t[y>>2]=t[E>>2];t[y+4>>2]=t[E+4>>2];t[y+8>>2]=t[E+8>>2];t[y+12>>2]=t[E+12>>2];t[n>>2]=t[E>>2];t[n+4>>2]=t[E+4>>2];t[n+8>>2]=t[E+8>>2];t[n+12>>2]=t[E+12>>2];n=r+80|0;y=r+96|0;t[y>>2]=t[p>>2];t[y+4>>2]=t[p+4>>2];t[y+8>>2]=t[p+8>>2];t[y+12>>2]=t[p+12>>2];t[n>>2]=t[p>>2];t[n+4>>2]=t[p+4>>2];t[n+8>>2]=t[p+8>>2];t[n+12>>2]=t[p+12>>2];n=7}}while(0);h=B;return n|0}function MG(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0.0,s=0,o=0,u=0.0,b=0,h=0.0,w=0.0,k=0;k=t[a+16>>2]|0;w=+c[k+16>>3];l=w-+c[k+88>>3];u=l+-4.0;o=OG(A,a,n,f,-1)|0;if(!o){b=~~(l+(u>=0.0?-3.5:-4.5));s=t[r>>2]|0;s=(s|0)>(b|0)?b:s}else{s=_G(A,a,o)|0;do{if(!s){b=t[o+16>>2]|0;l=+c[b+240>>3]+ +c[b+16>>3];if(!(i[b+156>>0]|0)){l=+(t[(t[A+16>>2]|0)+248>>2]|0)*.5+l;break}else{l=l+ +(t[r+8>>2]|0);break}}else l=+c[(t[s+16>>2]|0)+32>>3]+ +(t[r+8>>2]|0)}while(0);h=l=0.0?.5:-.5))}h=+(s|0);b=(i[k+156>>0]|0)==1;if(b?(t[k+104>>2]|0)!=0:0)u=w+10.0;else u=w+4.0+ +c[k+96>>3];o=OG(A,a,n,f,1)|0;if(!o){a=~~(u+(u>=0.0?.5:-.5));s=t[r+4>>2]|0;s=(s|0)<(a|0)?a:s}else{s=_G(A,a,o)|0;do{if(!s){a=t[o+16>>2]|0;l=+c[a+16>>3]-+c[a+88>>3];if(!(i[a+156>>0]|0)){l=l-+(t[(t[A+16>>2]|0)+248>>2]|0)*.5;break}else{l=l-+(t[r+8>>2]|0);break}}else l=+c[(t[s+16>>2]|0)+16>>3]-+(t[r+8>>2]|0)}while(0);u=l>u?l:u;s=~~(u+(u>=0.0?.5:-.5))}l=+(s|0);if(b?(t[k+104>>2]|0)!=0:0){l=l-+c[k+96>>3];if(l>3];A=t[(t[A+16>>2]|0)+196>>2]|0;k=t[k+232>>2]|0;u=w-+c[A+(k<<6)+16>>3];w=+c[A+(k<<6)+24>>3]+w;c[e>>3]=h;c[e+8>>3]=u;c[e+16>>3]=l;c[e+24>>3]=w;return}function VG(e){e=e|0;e=t[e+16>>2]|0;if((i[e+156>>0]|0)==1)if((t[e+176>>2]|0)>1)e=1;else e=(t[e+184>>2]|0)>1&1;else e=0;return e|0}function NG(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0,n=0;n=h;h=h+32|0;a=n;switch(r|0){case 1:{TG(a,+c[A>>3],i,+c[A+16>>3],+c[A+8>>3]);break}case 4:{TG(a,+c[A>>3],+c[A+24>>3],+c[A+16>>3],i);break}default:{}}t[e>>2]=t[a>>2];t[e+4>>2]=t[a+4>>2];t[e+8>>2]=t[a+8>>2];t[e+12>>2]=t[a+12>>2];t[e+16>>2]=t[a+16>>2];t[e+20>>2]=t[a+20>>2];t[e+24>>2]=t[a+24>>2];t[e+28>>2]=t[a+28>>2];h=n;return}function RG(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,h=0;o=t[A+16>>2]|0;s=o+(i<<5)|0;l=+c[s>>3];u=o+(i<<5)+8|0;n=+c[u>>3];b=o+(i<<5)+16|0;a=+c[b>>3];o=o+(i<<5)+24|0;f=+c[o>>3];if(l==a){r=t[(t[r+16>>2]|0)+196>>2]|0;h=i+1|0;l=+(t[A>>2]|0);n=+c[r+(h<<6)+24>>3]+ +c[(t[(t[t[r+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];a=+(t[A+4>>2]|0);f=+c[(t[(t[t[r+(i<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+c[r+(i<<6)+16>>3];c[s>>3]=l;c[u>>3]=n;c[b>>3]=a;c[o>>3]=f}c[e>>3]=l;c[e+8>>3]=n;c[e+16>>3]=a;c[e+24>>3]=f;return}function xG(e){e=e|0;var A=0,r=0;e=t[e+16>>2]|0;r=e+16|0;A=0;while(1){e=t[t[e+180>>2]>>2]|0;e=t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;if((i[e+156>>0]|0)!=1)break;if((t[e+184>>2]|0)!=1)break;if((t[e+176>>2]|0)!=1)break;if(+c[e+16>>3]!=+c[r>>3])break;A=A+1|0}return A|0}function JG(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0;c=h;h=h+32|0;s=c;f=SG(A,-1)|0;A=SG(A,1)|0;if(!((f|0)!=0?!(VR(f)|0):0))l=3;do{if((l|0)==3){if(A|0?(VR(A)|0)==0:0)break;f=jG(r,-1)|0;A=jG(r,1)|0;if(f|0?(VR(f)|0)==0:0)break;if(A|0?(VR(A)|0)==0:0)break;f=i+52|0;A=0;while(1){if((A|0)>=(t[f>>2]|0))break;r=i+56+(A<<5)|0;t[s>>2]=t[r>>2];t[s+4>>2]=t[r+4>>2];t[s+8>>2]=t[r+8>>2];t[s+12>>2]=t[r+12>>2];t[s+16>>2]=t[r+16>>2];t[s+20>>2]=t[r+20>>2];t[s+24>>2]=t[r+24>>2];t[s+28>>2]=t[r+28>>2];ER(e,s);A=A+1|0}f=t[e+80>>2]|0;l=n+-3|0;A=0;while(1){if((A|0)>=(n|0))break;i=153720+(A<<5)|0;t[s>>2]=t[i>>2];t[s+4>>2]=t[i+4>>2];t[s+8>>2]=t[i+8>>2];t[s+12>>2]=t[i+12>>2];t[s+16>>2]=t[i+16>>2];t[s+20>>2]=t[i+20>>2];t[s+24>>2]=t[i+24>>2];t[s+28>>2]=t[i+28>>2];ER(e,s);A=A+1|0}r=f+1|0;l=l+r|0;f=t[a+52>>2]|0;while(1){A=f+-1|0;if((f|0)<=0)break;f=a+56+(A<<5)|0;t[s>>2]=t[f>>2];t[s+4>>2]=t[f+4>>2];t[s+8>>2]=t[f+8>>2];t[s+12>>2]=t[f+12>>2];t[s+16>>2]=t[f+16>>2];t[s+20>>2]=t[f+20>>2];t[s+24>>2]=t[f+24>>2];t[s+28>>2]=t[f+28>>2];ER(e,s);f=A}UG(e,r,l)}}while(0);h=c;return}function HG(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=t[i>>2]|0;while(1){if(!A)break;e=t[t[(t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0;A=A+-1|0}t[i>>2]=a+1;n=r+(a<<4)|0;A=r+(a+-1<<4)|0;t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];a=t[i>>2]|0;t[i>>2]=a+1;a=r+(a<<4)|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];a=r+(t[i>>2]<<4)|0;i=(t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+16|0;t[a>>2]=t[i>>2];t[a+4>>2]=t[i+4>>2];t[a+8>>2]=t[i+8>>2];t[a+12>>2]=t[i+12>>2];return e|0}function PG(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0,l=0,s=0,o=0,u=0;u=A+84|0;o=A+80|0;r=0;A=e;e:while(1){l=t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0;s=l+16|0;if((i[(t[s>>2]|0)+156>>0]|0)!=1)break;if((I5[t[17300>>2]&63](l)|0)<<24>>24)break;A=t[o>>2]|0;while(1){if((r|0)>=(A|0))break e;if(!(+c[(t[u>>2]|0)+(r<<5)+8>>3]>+c[(t[s>>2]|0)+24>>3]))break;r=r+1|0}A=t[u>>2]|0;e=t[s>>2]|0;do{if(!(+c[A+(r<<5)+24>>3]<+c[e+24>>3])){n=+c[A+(r<<5)>>3];f=~~n;a=+c[A+(r<<5)+16>>3];if(!(t[e+104>>2]|0)){XG(l,f,~~((a+n)*.5),~~a);break}else{XG(l,f,~~a,~~(+c[e+96>>3]+a));break}}}while(0);A=t[t[(t[s>>2]|0)+180>>2]>>2]|0}return}function XG(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=t[e+16>>2]|0;c[e+16>>3]=+(r|0);c[e+88>>3]=+(r-A|0);c[e+96>>3]=+(i-r|0);return}function SG(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;f=t[e>>2]&3;l=t[(t[(t[((f|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+180>>2]|0;f=((f|0)==2?e:e+-48|0)+40|0;n=0;e=0;while(1){i=t[l+(n<<2)>>2]|0;if(!i)break;a=t[(t[(t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do{if((P(a-(t[(t[(t[f>>2]|0)+16>>2]|0)+236>>2]|0)|0,A)|0)>=1){r=t[i+16>>2]|0;if(!(t[r+8>>2]|0)){r=t[r+116>>2]|0;if(!r)break;if(!(t[(t[r+16>>2]|0)+8>>2]|0))break}if(e|0?(P((t[(t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-a|0,A)|0)<=0:0)break;e=i}}while(0);n=n+1|0}return e|0}function jG(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;f=t[e>>2]&3;l=t[(t[(t[((f|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+172>>2]|0;f=((f|0)==3?e:e+48|0)+40|0;n=0;e=0;while(1){i=t[l+(n<<2)>>2]|0;if(!i)break;a=t[(t[(t[((t[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do{if((P(a-(t[(t[(t[f>>2]|0)+16>>2]|0)+236>>2]|0)|0,A)|0)>=1){r=t[i+16>>2]|0;if(!(t[r+8>>2]|0)){r=t[r+116>>2]|0;if(!r)break;if(!(t[(t[r+16>>2]|0)+8>>2]|0))break}if(e|0?(P((t[(t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-a|0,A)|0)<=0:0)break;e=i}}while(0);n=n+1|0}return e|0}function UG(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0;o=e+84|0;f=A+-1|0;while(1){if((f|0)>(r|0))break;a=t[o>>2]|0;l=a+(f<<5)|0;i=+c[l>>3];if(!(f-A&1)){a=a+(f<<5)+16|0;u=+c[a>>3];n=~~((u+i)*.5);if(i>=u){c[l>>3]=+(n+-8|0);c[a>>3]=+(n+8|0)}}else{a=a+(f<<5)+16|0;u=+c[a>>3];n=~~((u+i)*.5);if(i+16.0>u){c[l>>3]=+(n+-8|0);c[a>>3]=+(n+8|0)}}f=f+1|0}s=(t[e+80>>2]|0)+-1|0;n=0;while(1){if((n|0)>=(s|0))break;f=t[o>>2]|0;a=f+(n<<5)|0;l=n+1|0;e=f+(l<<5)|0;if(!((n|0)<(A|0)|(n|0)>(r|0))?(n-A&1|0)==0:0){i=+c[a>>3]+16.0;a=f+(l<<5)+16|0;if(i>+c[a>>3])c[a>>3]=i;i=+c[f+(n<<5)+16>>3]+-16.0;if(!(i<+c[e>>3])){n=l;continue}c[e>>3]=i;n=l;continue}if(!((n|0)<(r|0)&(l|0)>=(A|0))){n=l;continue}if(l-A&1|0){n=l;continue}i=+c[f+(l<<5)+16>>3];if(+c[a>>3]+16.0>i)c[a>>3]=i+-16.0;a=f+(n<<5)+16|0;i=+c[e>>3];if(!(+c[a>>3]+-16.0>3]=i+16.0;n=l}return}function TG(e,A,r,i,a){e=e|0;A=+A;r=+r;i=+i;a=+a;c[e>>3]=A;c[e+8>>3]=r;c[e+16>>3]=i;c[e+24>>3]=a;return}function OG(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0;c=t[(t[e+16>>2]|0)+196>>2]|0;f=t[A+16>>2]|0;s=t[f+232>>2]|0;l=c+(s<<6)|0;s=c+(s<<6)+4|0;f=t[f+236>>2]|0;e:do{f=f+n|0;if((f|0)<=-1){e=0;break}if((f|0)>=(t[l>>2]|0)){e=0;break}e=t[(t[s>>2]|0)+(f<<2)>>2]|0;c=t[e+16>>2]|0;switch(i[c+156>>0]|0){case 0:break e;case 1:{if(t[c+104>>2]|0)break e;break}default:{}}}while((KG(e,A,r,a)|0)<<24>>24!=0);return e|0}function _G(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;A=t[A+16>>2]|0;if(!(i[A+156>>0]|0)){l=t[A+212>>2]|0;f=l}else{l=t[(t[(t[t[A+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;n=t[l>>2]&3;f=t[(t[(t[((n|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;l=t[(t[(t[((n|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0}A=t[r+16>>2]|0;if(!(i[A+156>>0]|0)){r=t[A+212>>2]|0;r=(r|0)==(e|0)?0:r;return((r|0)==(f|0)|((r|0)==0|(r|0)==(l|0))?0:r)|0}a=t[(t[(t[t[A+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;n=t[a>>2]&3;A=t[(t[(t[((n|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;A=(A|0)==(e|0)?0:A;if(!(!((A|0)==(f|0)|((A|0)==0|(A|0)==(l|0)))?(qG(A,r)|0)!=0:0)){A=t[(t[(t[((n|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;A=(A|0)==(e|0)?0:A;if((A|0)==(f|0)|((A|0)==0|(A|0)==(l|0)))A=0;else{r=(qG(A,r)|0)==0;return(r?0:A)|0}}return A|0}function qG(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0;r=t[e+16>>2]|0;e=t[A+16>>2]|0;a=+c[e+16>>3];if((+c[r+16>>3]<=a?a<=+c[r+32>>3]:0)?(i=+c[e+24>>3],+c[r+24>>3]<=i):0)e=i<=+c[r+40>>3]&1;else e=0;return e|0}function KG(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0;l=t[e+16>>2]|0;s=(t[l+236>>2]|0)>(t[(t[A+16>>2]|0)+236>>2]|0);e:do{if((t[l+184>>2]|0)==1){A:do{if(a|0){f=0;e=t[t[l+180>>2]>>2]|0;while(1){if((f|0)>=2)break A;e=t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;A=t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0;if((e|0)==(A|0))break A;n=t[e+16>>2]|0;e=t[A+16>>2]|0;if(s^(t[n+236>>2]|0)>(t[e+236>>2]|0)){e=1;break e}if((t[n+184>>2]|0)!=1)break A;if(!(i[n+156>>0]|0))break A;if((t[e+184>>2]|0)!=1)break A;if(!(i[e+156>>0]|0))break A;f=f+1|0;a=t[t[e+180>>2]>>2]|0;e=t[t[n+180>>2]>>2]|0}}}while(0);if(r|0?(t[l+176>>2]|0)==1:0){n=0;A=r;e=t[t[l+172>>2]>>2]|0;while(1){if((n|0)>=2){e=0;break e}e=t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;A=t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0;if((e|0)==(A|0)){e=0;break e}a=t[e+16>>2]|0;e=t[A+16>>2]|0;if(s^(t[a+236>>2]|0)>(t[e+236>>2]|0)){e=1;break e}if((t[a+176>>2]|0)!=1){e=0;break e}if(!(i[a+156>>0]|0)){e=0;break e}if((t[e+176>>2]|0)!=1){e=0;break e}if(!(i[e+156>>0]|0)){e=0;break e}n=n+1|0;A=t[t[e+172>>2]>>2]|0;e=t[t[a+172>>2]>>2]|0}}else e=0}else e=0}while(0);return e|0}function $G(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[r+8>>3]+ +c[A+8>>3];c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=i;return}function eL(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+c[A+8>>3];a=+c[A>>3];return(~~((+c[r>>3]-a)*(+c[e+8>>3]-i)-(+c[e>>3]-a)*(+c[r+8>>3]-i))|0)>0|0}function AL(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0,m=0,p=0.0,E=0.0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0;P=h;h=h+256|0;L=P+232|0;G=P+216|0;J=P+88|0;x=P+80|0;M=P+64|0;V=P+200|0;N=P+184|0;R=P;Q=P+168|0;D=P+152|0;z=P+136|0;W=P+120|0;Y=P+104|0;Z=t[n>>2]&3;F=t[((Z|0)==3?n:n+48|0)+40>>2]|0;Z=t[((Z|0)==2?n:n+-48|0)+40>>2]|0;do{if((oN(F)|0)!=2?(oN(Z)|0)!=2:0){n=0;l=0;s=0;while(1){if((s|0)>=(a|0))break;I=t[(t[A+(s+r<<2)>>2]|0)+16>>2]|0;n=n+((t[I+96>>2]|0)!=0&1)|0;if(!((i[I+44>>0]|0)==0?(i[I+84>>0]|0)==0:0))l=1;s=s+1|0}if(!l)if(!n){iL(F,Z,A,r,a,f);break}else{lL(F,Z,A,r,a,f,n);break}y=KF(156)|0;C=sL(e,y)|0;g=Rv(C,85478,1)|0;Sd(g,137483,280,1)|0;Xw(g,87171,87185)|0;o=+c[(t[Z+16>>2]|0)+16>>3];v=+c[(t[F+16>>2]|0)+16>>3];I=e+16|0;k=(t[(t[I>>2]|0)+116>>2]&1|0)==0;d=k?Z:F;k=k?F:Z;g=cL(g,k)|0;m=cL(C,d)|0;n=0;w=0;while(1){if((w|0)>=(a|0))break;l=A+(w+r<<2)|0;while(1){b=t[l>>2]|0;u=b+16|0;l=t[u>>2]|0;if(!(i[l+112>>0]|0))break;else l=l+116|0}if((t[((t[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)==(k|0))s=oL(C,g,m,b)|0;else s=oL(C,m,g,b)|0;l=t[u>>2]|0;t[l+120>>2]=s;if(!n)if((i[l+44>>0]|0)==0?(i[l+84>>0]|0)==0:0){t[(t[s+16>>2]|0)+120>>2]=b;n=s}else n=0;w=w+1|0}if(!n)B=lk(C,g,m,0,1)|0;else B=n;Mw(B,t[47174]|0,85482)|0;n=C+16|0;u=t[n>>2]|0;t[u+144>>2]=t[(t[I>>2]|0)+144>>2];t[u+188>>2]=C;DJ(C,f);eG(C);VD(C,0);UL(C,0);_Q(C,0);k=k+16|0;f=t[k>>2]|0;u=t[d+16>>2]|0;d=g+16|0;b=t[d>>2]|0;w=b+16|0;p=+(~~o|0);E=+(~~((+c[(t[m+16>>2]|0)+16>>3]+ +c[w>>3])*.5)|0);o=+(~~v|0);v=+(~~((+c[f+16>>3]-+c[f+96>>3]+ +c[u+16>>3]+ +c[u+88>>3])*.5)|0);u=b+24|0;n=(t[n>>2]|0)+192|0;while(1){l=t[n>>2]|0;if(!l)break;do{if((l|0)!=(g|0)){n=t[l+16>>2]|0;s=n+24|0;if((l|0)==(m|0)){c[s>>3]=o;c[n+16>>3]=E;break}else{c[s>>3]=v;break}}else{c[u>>3]=p;c[w>>3]=E;n=b}}while(0);n=n+164|0}Dz(C);BG(C,0);MV(C);s=t[k>>2]|0;n=t[d>>2]|0;if(!(t[(t[I>>2]|0)+116>>2]&1)){l=n+16|0;o=+c[s+24>>3]-+c[n+24>>3]}else{l=n+24|0;o=+c[n+16>>3]+ +c[s+24>>3]}c[M>>3]=+c[s+16>>3]-+c[l>>3];c[M+8>>3]=o;f=R+16|0;g=R+32|0;m=R+48|0;d=0;while(1){if((d|0)>=(a|0))break;n=A+(d+r<<2)|0;while(1){l=t[n>>2]|0;k=l+16|0;n=t[k>>2]|0;if(!(i[n+112>>0]|0))break;else n=n+116|0}b=t[n+120>>2]|0;w=b+16|0;n=t[w>>2]|0;if(!((b|0)==(B|0)&(t[n+120>>2]|0)==0)){u=t[t[n+8>>2]>>2]|0;b=u+4|0;l=gR(l,t[b>>2]|0)|0;t[l+8>>2]=t[u+8>>2];n=l+16|0;s=u+16|0;X=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[s>>2];t[G+4>>2]=t[s+4>>2];t[G+8>>2]=t[s+8>>2];t[G+12>>2]=t[s+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(V,G,L,X);t[n>>2]=t[V>>2];t[n+4>>2]=t[V+4>>2];t[n+8>>2]=t[V+8>>2];t[n+12>>2]=t[V+12>>2];t[l+12>>2]=t[u+12>>2];n=l+32|0;X=u+32|0;s=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[X>>2];t[G+4>>2]=t[X+4>>2];t[G+8>>2]=t[X+8>>2];t[G+12>>2]=t[X+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(N,G,L,s);t[n>>2]=t[N>>2];t[n+4>>2]=t[N+4>>2];t[n+8>>2]=t[N+8>>2];t[n+12>>2]=t[N+12>>2];n=0;while(1){if((n|0)>=(t[b>>2]|0))break;s=(t[l>>2]|0)+(n<<4)|0;S=(t[u>>2]|0)+(n<<4)|0;X=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[S>>2];t[G+4>>2]=t[S+4>>2];t[G+8>>2]=t[S+8>>2];t[G+12>>2]=t[S+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(Q,G,L,X);t[s>>2]=t[Q>>2];t[s+4>>2]=t[Q+4>>2];t[s+8>>2]=t[Q+8>>2];t[s+12>>2]=t[Q+12>>2];t[R>>2]=t[Q>>2];t[R+4>>2]=t[Q+4>>2];t[R+8>>2]=t[Q+8>>2];t[R+12>>2]=t[Q+12>>2];s=n+1|0;if((s|0)>=(t[b>>2]|0)){H=48;break}X=(t[l>>2]|0)+(s<<4)|0;s=(t[u>>2]|0)+(s<<4)|0;S=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[s>>2];t[G+4>>2]=t[s+4>>2];t[G+8>>2]=t[s+8>>2];t[G+12>>2]=t[s+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(D,G,L,S);t[X>>2]=t[D>>2];t[X+4>>2]=t[D+4>>2];t[X+8>>2]=t[D+8>>2];t[X+12>>2]=t[D+12>>2];t[f>>2]=t[D>>2];t[f+4>>2]=t[D+4>>2];t[f+8>>2]=t[D+8>>2];t[f+12>>2]=t[D+12>>2];X=n+2|0;S=(t[l>>2]|0)+(X<<4)|0;X=(t[u>>2]|0)+(X<<4)|0;s=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[X>>2];t[G+4>>2]=t[X+4>>2];t[G+8>>2]=t[X+8>>2];t[G+12>>2]=t[X+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(z,G,L,s);t[S>>2]=t[z>>2];t[S+4>>2]=t[z+4>>2];t[S+8>>2]=t[z+8>>2];t[S+12>>2]=t[z+12>>2];t[g>>2]=t[z>>2];t[g+4>>2]=t[z+4>>2];t[g+8>>2]=t[z+8>>2];t[g+12>>2]=t[z+12>>2];S=n+3|0;s=(t[u>>2]|0)+(S<<4)|0;X=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[s>>2];t[G+4>>2]=t[s+4>>2];t[G+8>>2]=t[s+8>>2];t[G+12>>2]=t[s+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(W,G,L,X);t[m>>2]=t[W>>2];t[m+4>>2]=t[W+4>>2];t[m+8>>2]=t[W+8>>2];t[m+12>>2]=t[W+12>>2];oB((t[I>>2]|0)+16|0,R);n=S}if((H|0)==48)H=0;n=t[(t[k>>2]|0)+96>>2]|0;if(n|0){S=n+56|0;w=(t[(t[w>>2]|0)+96>>2]|0)+56|0;X=t[(t[I>>2]|0)+116>>2]&1;t[G>>2]=t[w>>2];t[G+4>>2]=t[w+4>>2];t[G+8>>2]=t[w+8>>2];t[G+12>>2]=t[w+12>>2];t[L>>2]=t[M>>2];t[L+4>>2]=t[M+4>>2];t[L+8>>2]=t[M+8>>2];t[L+12>>2]=t[M+12>>2];uL(Y,G,L,X);t[S>>2]=t[Y>>2];t[S+4>>2]=t[Y+4>>2];t[S+8>>2]=t[Y+8>>2];t[S+12>>2]=t[Y+12>>2];S=t[(t[k>>2]|0)+96>>2]|0;i[S+81>>0]=1;Hx(e,S)}}d=d+1|0}bL(C,y)}else H=3}while(0);if((H|0)==3?(t[46738]|0)==0:0){t[46738]=1;nw(0,85355,x)|0;H=Mk(F)|0;X=(Bk(e)|0)!=0;S=Mk(Z)|0;t[J>>2]=H;t[J+4>>2]=X?137738:141747;t[J+8>>2]=S;nw(3,85461,J)|0}h=P;return}function rL(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0.0,G=0.0,L=0.0,Q=0.0;C=h;h=h+1600|0;m=C+1552|0;u=C+1536|0;g=C+840|0;p=C+144|0;E=C+1584|0;l=C+32|0;v=C+16|0;b=C;k=t[a>>2]&3;w=t[((k|0)==3?a:a+48|0)+40>>2]|0;B=a+-48|0;k=t[((k|0)==2?a:B)+40>>2]|0;d=a+16|0;s=t[d>>2]|0;f=t[s+172>>2]|0;while(1){o=t[(t[f+16>>2]|0)+172>>2]|0;if(!o)break;else f=o}s=(t[s+96>>2]|0)+56|0;f=(t[((t[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)+16|0;o=(t[f>>2]|0)+16|0;t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];s=t[d>>2]|0;i[(t[s+96>>2]|0)+81>>0]=1;if((n|0)!=2){s=t[f>>2]|0;G=+c[s+16>>3];Q=G-+c[s+88>>3];G=+c[s+96>>3]+G;Z=+c[s+24>>3];L=+c[s+80>>3]*.5+Z;s=t[(t[e+16>>2]|0)+196>>2]|0;o=t[w+16>>2]|0;l=t[o+232>>2]|0;Z=+(~~(+(~~(Z-+c[s+(l<<6)+16>>3]-+c[o+24>>3]+ +c[s+(l<<6)+24>>3])|0)*.16666666666666666)|0);Z=L-(Z<5.0?5.0:Z);tL(e,A,r,w,a,g,1);tL(e,A,r,k,a,p,0);l=g+52|0;s=t[l>>2]|0;o=s+-1|0;I=+c[g+56+(o<<5)>>3];c[19215]=I;c[19216]=+c[g+56+(o<<5)+24>>3];c[19217]=Q;c[19218]=Z;c[19219]=I;c[19220]=Z;o=p+52|0;f=(t[o>>2]|0)+-1|0;I=+c[p+56+(f<<5)+16>>3];c[19221]=I;c[19222]=L;c[19223]=G;c[19226]=Z;c[19224]=+c[p+56+(f<<5)+24>>3];c[19225]=I;f=0;while(1){if((f|0)>=(s|0)){f=0;break}s=g+56+(f<<5)|0;t[m>>2]=t[s>>2];t[m+4>>2]=t[s+4>>2];t[m+8>>2]=t[s+8>>2];t[m+12>>2]=t[s+12>>2];t[m+16>>2]=t[s+16>>2];t[m+20>>2]=t[s+20>>2];t[m+24>>2]=t[s+24>>2];t[m+28>>2]=t[s+28>>2];ER(r,m);f=f+1|0;s=t[l>>2]|0}while(1){if((f|0)==3)break;g=153720+(f<<5)|0;t[m>>2]=t[g>>2];t[m+4>>2]=t[g+4>>2];t[m+8>>2]=t[g+8>>2];t[m+12>>2]=t[g+12>>2];t[m+16>>2]=t[g+16>>2];t[m+20>>2]=t[g+20>>2];t[m+24>>2]=t[g+24>>2];t[m+28>>2]=t[g+28>>2];ER(r,m);f=f+1|0}l=t[o>>2]|0;while(1){f=l+-1|0;if((l|0)<=0)break;l=p+56+(f<<5)|0;t[m>>2]=t[l>>2];t[m+4>>2]=t[l+4>>2];t[m+8>>2]=t[l+8>>2];t[m+12>>2]=t[l+12>>2];t[m+16>>2]=t[l+16>>2];t[m+20>>2]=t[l+20>>2];t[m+24>>2]=t[l+24>>2];t[m+28>>2]=t[l+28>>2];ER(r,m);l=f}if((n|0)==10)l=_V(r,E)|0;else l=rN(r,E)|0;f=t[E>>2]|0;if(f|0)y=17}else{f=(t[w+16>>2]|0)+16|0;p=s+16|0;t[u>>2]=t[f>>2];t[u+4>>2]=t[f+4>>2];t[u+8>>2]=t[f+8>>2];t[u+12>>2]=t[f+12>>2];t[m>>2]=t[p>>2];t[m+4>>2]=t[p+4>>2];t[m+8>>2]=t[p+8>>2];t[m+12>>2]=t[p+12>>2];$G(v,u,m);p=(t[k+16>>2]|0)+16|0;f=(t[d>>2]|0)+56|0;t[u>>2]=t[p>>2];t[u+4>>2]=t[p+4>>2];t[u+8>>2]=t[p+8>>2];t[u+12>>2]=t[p+12>>2];t[m>>2]=t[f>>2];t[m+4>>2]=t[f+4>>2];t[m+8>>2]=t[f+8>>2];t[m+12>>2]=t[f+12>>2];$G(b,u,m);f=t[(t[d>>2]|0)+96>>2]|0;L=+c[f+56>>3];Q=+c[f+64>>3]-+c[f+32>>3]*.5;f=l+16|0;t[l>>2]=t[v>>2];t[l+4>>2]=t[v+4>>2];t[l+8>>2]=t[v+8>>2];t[l+12>>2]=t[v+12>>2];t[f>>2]=t[v>>2];t[f+4>>2]=t[v+4>>2];t[f+8>>2]=t[v+8>>2];t[f+12>>2]=t[v+12>>2];f=l+32|0;p=l+48|0;y=l+64|0;c[l+64>>3]=L;c[l+72>>3]=Q;t[p>>2]=t[y>>2];t[p+4>>2]=t[y+4>>2];t[p+8>>2]=t[y+8>>2];t[p+12>>2]=t[y+12>>2];t[f>>2]=t[y>>2];t[f+4>>2]=t[y+4>>2];t[f+8>>2]=t[y+8>>2];t[f+12>>2]=t[y+12>>2];f=l+80|0;y=l+96|0;t[y>>2]=t[b>>2];t[y+4>>2]=t[b+4>>2];t[y+8>>2]=t[b+8>>2];t[y+12>>2]=t[b+12>>2];t[f>>2]=t[b>>2];t[f+4>>2]=t[b+4>>2];t[f+8>>2]=t[b+8>>2];t[f+12>>2]=t[b+12>>2];t[E>>2]=7;f=7;y=17}if((y|0)==17)mR(a,t[((t[a>>2]&3|0)==2?a:B)+40>>2]|0,l,f,17296);h=C;return}function iL(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0,g=0.0,m=0,p=0,E=0,B=0,y=0,C=0.0,I=0.0,Z=0.0,G=0.0,L=0.0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0;R=h;h=h+352|0;B=R+336|0;E=R+320|0;V=R+128|0;m=R+304|0;y=R+288|0;N=R+112|0;Q=R+96|0;D=R+80|0;z=R+64|0;W=R+48|0;Y=R+32|0;F=R+16|0;M=R;e=e+16|0;k=(t[e>>2]|0)+16|0;p=(t[r+(i<<2)>>2]|0)+16|0;v=(t[p>>2]|0)+16|0;t[E>>2]=t[k>>2];t[E+4>>2]=t[k+4>>2];t[E+8>>2]=t[k+8>>2];t[E+12>>2]=t[k+12>>2];t[B>>2]=t[v>>2];t[B+4>>2]=t[v+4>>2];t[B+8>>2]=t[v+8>>2];t[B+12>>2]=t[v+12>>2];$G(m,E,B);G=+c[m>>3];L=+c[m+8>>3];m=(t[A+16>>2]|0)+16|0;p=(t[p>>2]|0)+56|0;t[E>>2]=t[m>>2];t[E+4>>2]=t[m+4>>2];t[E+8>>2]=t[m+8>>2];t[E+12>>2]=t[m+12>>2];t[B>>2]=t[p>>2];t[B+4>>2]=t[p+4>>2];t[B+8>>2]=t[p+8>>2];t[B+12>>2]=t[p+12>>2];$G(y,E,B);I=+c[y>>3];Z=+c[y+8>>3];if((a|0)>1){C=+c[(t[e>>2]|0)+80>>3];f=C*.5;C=C/+(a+-1|0)}else{f=0.0;C=0.0}w=(n|8|0)==10;o=V+8|0;k=V+16|0;d=(I+G*2.0)*.3333333333333333;v=V+32|0;g=(I*2.0+G)*.3333333333333333;u=V+24|0;m=V+48|0;p=V+64|0;E=V+80|0;B=V+96|0;y=V+112|0;s=V+128|0;b=V+136|0;f=L-f;A=0;while(1){if((A|0)>=(a|0))break;l=t[r+(A+i<<2)>>2]|0;c[V>>3]=G;c[o>>3]=L;if(w){fL(N,d,f);t[k>>2]=t[N>>2];t[k+4>>2]=t[N+4>>2];t[k+8>>2]=t[N+8>>2];t[k+12>>2]=t[N+12>>2];fL(Q,g,f);t[v>>2]=t[Q>>2];t[v+4>>2]=t[Q+4>>2];t[v+8>>2]=t[Q+8>>2];t[v+12>>2]=t[Q+12>>2];e=4;n=3}else{c[k>>3]=G;c[u>>3]=L;fL(D,d,f);t[v>>2]=t[D>>2];t[v+4>>2]=t[D+4>>2];t[v+8>>2]=t[D+8>>2];t[v+12>>2]=t[D+12>>2];fL(z,d,f);t[m>>2]=t[z>>2];t[m+4>>2]=t[z+4>>2];t[m+8>>2]=t[z+8>>2];t[m+12>>2]=t[z+12>>2];fL(W,d,f);t[p>>2]=t[W>>2];t[p+4>>2]=t[W+4>>2];t[p+8>>2]=t[W+8>>2];t[p+12>>2]=t[W+12>>2];fL(Y,g,f);t[E>>2]=t[Y>>2];t[E+4>>2]=t[Y+4>>2];t[E+8>>2]=t[Y+8>>2];t[E+12>>2]=t[Y+12>>2];fL(F,g,f);t[B>>2]=t[F>>2];t[B+4>>2]=t[F+4>>2];t[B+8>>2]=t[F+8>>2];t[B+12>>2]=t[F+12>>2];fL(M,g,f);t[y>>2]=t[M>>2];t[y+4>>2]=t[M+4>>2];t[y+8>>2]=t[M+8>>2];t[y+12>>2]=t[M+12>>2];c[s>>3]=I;c[b>>3]=Z;e=10;n=9}c[V+(n<<4)>>3]=I;c[V+(n<<4)+8>>3]=Z;mR(l,t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0,V,e,17296);f=f+C;A=A+1|0}h=R;return}function aL(e,A,r,i,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;n=n|0;f=f|0;l=l|0;s=s|0;var o=0,u=0.0,b=0,w=0,k=0,d=0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0.0,I=0.0,Z=0.0,G=0.0,L=0.0;B=h;h=h+1440|0;g=B+1392|0;p=B+1424|0;E=B+696|0;m=B;d=t[l>>2]&3;k=t[((d|0)==3?l:l+48|0)+40>>2]|0;d=t[((d|0)==2?l:l+-48|0)+40>>2]|0;o=t[k+16>>2]|0;b=t[o+232>>2]|0;w=t[e+16>>2]|0;if((b|0)<(a[w+238>>1]|0)){y=t[w+196>>2]|0;w=b+1|0;u=+c[o+24>>3]-+c[y+(b<<6)+32>>3]-+c[(t[(t[t[y+(w<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+c[y+(w<<6)+40>>3]}else u=+(t[w+252>>2]|0);C=+(f+1|0);v=+(t[A+12>>2]|0)/C;u=u/C;nL(e,A,r,k,l,E,1);nL(e,A,r,d,l,m,0);d=E+52|0;l=m+52|0;e=(s|0)==0;A=r+80|0;o=0;while(1){if((o|0)>=(f|0))break;k=t[i+(o+n<<2)>>2]|0;w=t[d>>2]|0;b=w+-1|0;L=+c[E+56+(b<<5)>>3];Z=+c[E+56+(b<<5)+8>>3];G=+c[E+56+(b<<5)+16>>3];c[19215]=L;c[19218]=Z;o=o+1|0;C=+(o|0);I=v*C;c[19217]=G+I;C=Z-u*C;c[19216]=C;c[19219]=L;c[19222]=C;b=(t[l>>2]|0)+-1|0;L=+c[m+56+(b<<5)+16>>3];c[19221]=L;c[19220]=C-u;Z=+c[m+56+(b<<5)>>3];G=+c[m+56+(b<<5)+8>>3];c[19225]=L;c[19226]=G;c[19223]=Z-I;c[19224]=C;b=0;while(1){if((b|0)>=(w|0)){b=0;break}w=E+56+(b<<5)|0;t[g>>2]=t[w>>2];t[g+4>>2]=t[w+4>>2];t[g+8>>2]=t[w+8>>2];t[g+12>>2]=t[w+12>>2];t[g+16>>2]=t[w+16>>2];t[g+20>>2]=t[w+20>>2];t[g+24>>2]=t[w+24>>2];t[g+28>>2]=t[w+28>>2];ER(r,g);b=b+1|0;w=t[d>>2]|0}while(1){if((b|0)==3)break;y=153720+(b<<5)|0;t[g>>2]=t[y>>2];t[g+4>>2]=t[y+4>>2];t[g+8>>2]=t[y+8>>2];t[g+12>>2]=t[y+12>>2];t[g+16>>2]=t[y+16>>2];t[g+20>>2]=t[y+20>>2];t[g+24>>2]=t[y+24>>2];t[g+28>>2]=t[y+28>>2];ER(r,g);b=b+1|0}w=t[l>>2]|0;while(1){b=w+-1|0;if((w|0)<=0)break;w=m+56+(b<<5)|0;t[g>>2]=t[w>>2];t[g+4>>2]=t[w+4>>2];t[g+8>>2]=t[w+8>>2];t[g+12>>2]=t[w+12>>2];t[g+16>>2]=t[w+16>>2];t[g+20>>2]=t[w+20>>2];t[g+24>>2]=t[w+24>>2];t[g+28>>2]=t[w+28>>2];ER(r,g);w=b}if(e)b=rN(r,p)|0;else b=_V(r,p)|0;w=t[p>>2]|0;if(!w)break;mR(k,t[((t[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0,b,w,17296);t[A>>2]=0}h=B;return}function tL(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0.0;u=h;h=h+128|0;l=u+96|0;s=u+64|0;b=u+32|0;o=u;MG(b,e,A,i,0,a);t[n>>2]=t[b>>2];t[n+4>>2]=t[b+4>>2];t[n+8>>2]=t[b+8>>2];t[n+12>>2]=t[b+12>>2];t[n+16>>2]=t[b+16>>2];t[n+20>>2]=t[b+20>>2];t[n+24>>2]=t[b+24>>2];t[n+28>>2]=t[b+28>>2];t[s>>2]=t[b>>2];t[s+4>>2]=t[b+4>>2];t[s+8>>2]=t[b+8>>2];t[s+12>>2]=t[b+12>>2];t[s+16>>2]=t[b+16>>2];t[s+20>>2]=t[b+20>>2];t[s+24>>2]=t[b+24>>2];t[s+28>>2]=t[b+28>>2];t[n+48>>2]=4;if(!(f<<24>>24))IR(r,a,2,n,0);else BR(r,a,2,n,0);A=n+52|0;a=(t[A>>2]|0)+-1|0;b=s+24|0;c[b>>3]=+c[n+56+(a<<5)+24>>3];f=s+8|0;c[f>>3]=+c[n+56+(a<<5)+8>>3];i=t[i+16>>2]|0;w=+c[(t[(t[e+16>>2]|0)+196>>2]|0)+(t[i+232>>2]<<6)+24>>3]+ +c[i+24>>3];t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];t[l+16>>2]=t[s+16>>2];t[l+20>>2]=t[s+20>>2];t[l+24>>2]=t[s+24>>2];t[l+28>>2]=t[s+28>>2];NG(o,l,4,w);t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];t[s+16>>2]=t[o+16>>2];t[s+20>>2]=t[o+20>>2];t[s+24>>2]=t[o+24>>2];t[s+28>>2]=t[o+28>>2];if(+c[s>>3]<+c[s+16>>3]?+c[f>>3]<+c[b>>3]:0){b=t[A>>2]|0;t[A>>2]=b+1;b=n+56+(b<<5)|0;t[b>>2]=t[s>>2];t[b+4>>2]=t[s+4>>2];t[b+8>>2]=t[s+8>>2];t[b+12>>2]=t[s+12>>2];t[b+16>>2]=t[s+16>>2];t[b+20>>2]=t[s+20>>2];t[b+24>>2]=t[s+24>>2];t[b+28>>2]=t[s+28>>2]}h=u;return}function nL(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0.0;u=h;h=h+128|0;l=u+96|0;s=u+64|0;b=u+32|0;o=u;MG(b,e,A,i,0,a);t[n>>2]=t[b>>2];t[n+4>>2]=t[b+4>>2];t[n+8>>2]=t[b+8>>2];t[n+12>>2]=t[b+12>>2];t[n+16>>2]=t[b+16>>2];t[n+20>>2]=t[b+20>>2];t[n+24>>2]=t[b+24>>2];t[n+28>>2]=t[b+28>>2];t[s>>2]=t[b>>2];t[s+4>>2]=t[b+4>>2];t[s+8>>2]=t[b+8>>2];t[s+12>>2]=t[b+12>>2];t[s+16>>2]=t[b+16>>2];t[s+20>>2]=t[b+20>>2];t[s+24>>2]=t[b+24>>2];t[s+28>>2]=t[b+28>>2];t[n+48>>2]=1;if(!(f<<24>>24))IR(r,a,2,n,0);else BR(r,a,2,n,0);A=n+52|0;a=(t[A>>2]|0)+-1|0;b=s+24|0;c[b>>3]=+c[n+56+(a<<5)+24>>3];f=s+8|0;c[f>>3]=+c[n+56+(a<<5)+8>>3];i=t[i+16>>2]|0;w=+c[i+24>>3]-+c[(t[(t[e+16>>2]|0)+196>>2]|0)+(t[i+232>>2]<<6)+24>>3];t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];t[l+16>>2]=t[s+16>>2];t[l+20>>2]=t[s+20>>2];t[l+24>>2]=t[s+24>>2];t[l+28>>2]=t[s+28>>2];NG(o,l,1,w);t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];t[s+16>>2]=t[o+16>>2];t[s+20>>2]=t[o+20>>2];t[s+24>>2]=t[o+24>>2];t[s+28>>2]=t[o+28>>2];if(+c[s>>3]<+c[s+16>>3]?+c[f>>3]<+c[b>>3]:0){b=t[A>>2]|0;t[A>>2]=b+1;b=n+56+(b<<5)|0;t[b>>2]=t[s>>2];t[b+4>>2]=t[s+4>>2];t[b+8>>2]=t[s+8>>2];t[b+12>>2]=t[s+12>>2];t[b+16>>2]=t[s+16>>2];t[b+20>>2]=t[s+20>>2];t[b+24>>2]=t[s+24>>2];t[b+28>>2]=t[s+28>>2]}h=u;return}function fL(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function lL(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;var s=0,o=0,u=0,b=0,w=0.0,k=0.0,d=0.0,v=0.0,g=0.0,m=0.0,p=0.0,E=0.0,B=0.0,y=0,C=0,I=0.0,Z=0.0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0,q=0.0;_=h;h=h+288|0;P=_+256|0;H=_+240|0;J=_+224|0;U=_+280|0;T=_+272|0;O=_+32|0;X=_+16|0;S=_;o=_+208|0;u=_+192|0;b=t[r+(a<<2)>>2]|0;j=KF(n<<2)|0;s=0;while(1){if((s|0)>=(n|0))break;t[j+(s<<2)>>2]=t[r+(s+a<<2)>>2];s=s+1|0}_4(j,n,4,59);r=e+16|0;a=(t[r>>2]|0)+16|0;b=b+16|0;G=(t[b>>2]|0)+16|0;t[H>>2]=t[a>>2];t[H+4>>2]=t[a+4>>2];t[H+8>>2]=t[a+8>>2];t[H+12>>2]=t[a+12>>2];t[P>>2]=t[G>>2];t[P+4>>2]=t[G+4>>2];t[P+8>>2]=t[G+8>>2];t[P+12>>2]=t[G+12>>2];$G(o,H,P);t[X>>2]=t[o>>2];t[X+4>>2]=t[o+4>>2];t[X+8>>2]=t[o+8>>2];t[X+12>>2]=t[o+12>>2];G=A+16|0;a=(t[G>>2]|0)+16|0;b=(t[b>>2]|0)+56|0;t[H>>2]=t[a>>2];t[H+4>>2]=t[a+4>>2];t[H+8>>2]=t[a+8>>2];t[H+12>>2]=t[a+12>>2];t[P>>2]=t[b>>2];t[P+4>>2]=t[b+4>>2];t[P+8>>2]=t[b+8>>2];t[P+12>>2]=t[b+12>>2];$G(u,H,P);t[S>>2]=t[u>>2];t[S+4>>2]=t[u+4>>2];t[S+8>>2]=t[u+8>>2];t[S+12>>2]=t[u+12>>2];E=+c[(t[r>>2]|0)+96>>3]+ +c[X>>3];B=+c[S>>3]-+c[(t[G>>2]|0)+88>>3];m=B+E;p=m*.5;G=t[j>>2]|0;t[O>>2]=t[X>>2];t[O+4>>2]=t[X+4>>2];t[O+8>>2]=t[X+8>>2];t[O+12>>2]=t[X+12>>2];b=O+16|0;t[b>>2]=t[X>>2];t[b+4>>2]=t[X+4>>2];t[b+8>>2]=t[X+8>>2];t[b+12>>2]=t[X+12>>2];r=O+32|0;t[r>>2]=t[S>>2];t[r+4>>2]=t[S+4>>2];t[r+8>>2]=t[S+8>>2];t[r+12>>2]=t[S+12>>2];a=O+48|0;t[a>>2]=t[S>>2];t[a+4>>2]=t[S+4>>2];t[a+8>>2]=t[S+8>>2];t[a+12>>2]=t[S+12>>2];mR(G,t[((t[G>>2]&3|0)==2?G:G+-48|0)+40>>2]|0,O,4,17296);G=t[(t[G+16>>2]|0)+96>>2]|0;c[G+56>>3]=p;C=X+8|0;d=+c[C>>3];v=+c[G+32>>3];c[G+64>>3]=(v+6.0)*.5+d;i[G+81>>0]=1;d=d+3.0;Z=+c[G+24>>3];I=(m-Z)*.5;Z=(Z+m)*.5;G=O+24|0;L=O+40|0;Q=O+56|0;D=O+64|0;z=S+8|0;W=O+72|0;Y=O+80|0;F=O+88|0;M=O+96|0;V=O+104|0;N=O+112|0;R=O+120|0;x=U+4|0;u=(f|0)==6&1;k=0.0;w=0.0;v=v+d;o=1;while(1){if((o|0)>=(l|0)){y=6;break}A=t[j+(o<<2)>>2]|0;if(!(o&1)){t[O>>2]=t[X>>2];t[O+4>>2]=t[X+4>>2];t[O+8>>2]=t[X+8>>2];t[O+12>>2]=t[X+12>>2];c[b>>3]=I;c[G>>3]=+c[C>>3];c[r>>3]=I;c[L>>3]=v;c[a>>3]=Z;c[Q>>3]=v;c[D>>3]=Z;g=+c[z>>3];c[W>>3]=g;q=+c[S>>3];c[Y>>3]=q;c[F>>3]=g;c[M>>3]=q;q=v+6.0;c[V>>3]=q;c[N>>3]=+c[X>>3];c[R>>3]=q;v=+c[(t[(t[A+16>>2]|0)+96>>2]|0)+32>>3];g=q+v*.5;v=q+v}else{s=A+16|0;e=t[(t[s>>2]|0)+96>>2]|0;if((o|0)==1){w=+c[e+24>>3];k=(w+m)*.5;w=(m-w)*.5}d=d+-6.0-+c[e+32>>3];t[O>>2]=t[X>>2];t[O+4>>2]=t[X+4>>2];t[O+8>>2]=t[X+8>>2];t[O+12>>2]=t[X+12>>2];c[b>>3]=+c[X>>3];g=d+-6.0;c[G>>3]=g;c[r>>3]=+c[S>>3];c[L>>3]=g;t[a>>2]=t[S>>2];t[a+4>>2]=t[S+4>>2];t[a+8>>2]=t[S+8>>2];t[a+12>>2]=t[S+12>>2];c[D>>3]=k;c[W>>3]=+c[z>>3];c[Y>>3]=k;c[F>>3]=d;c[M>>3]=w;c[V>>3]=d;c[N>>3]=w;c[R>>3]=+c[C>>3];g=+c[(t[(t[s>>2]|0)+96>>2]|0)+32>>3]*.5+d}t[x>>2]=8;t[U>>2]=O;t[J>>2]=t[X>>2];t[J+4>>2]=t[X+4>>2];t[J+8>>2]=t[X+8>>2];t[J+12>>2]=t[X+12>>2];t[H>>2]=t[S>>2];t[H+4>>2]=t[S+4>>2];t[H+8>>2]=t[S+8>>2];t[H+12>>2]=t[S+12>>2];t[P>>2]=t[U>>2];t[P+4>>2]=t[U+4>>2];s=jV(J,H,P,T,u)|0;e=t[T>>2]|0;if(!e)break;f=t[(t[A+16>>2]|0)+96>>2]|0;c[f+56>>3]=p;c[f+64>>3]=g;i[f+81>>0]=1;mR(A,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,s,e,17296);o=o+1|0}e:do{if((y|0)==6){p=(B+E*2.0)*.3333333333333333;m=(B*2.0+E)*.3333333333333333;while(1){if((o|0)>=(n|0))break;A=t[j+(o<<2)>>2]|0;if(!(o&1)){t[O>>2]=t[X>>2];t[O+4>>2]=t[X+4>>2];t[O+8>>2]=t[X+8>>2];t[O+12>>2]=t[X+12>>2];c[b>>3]=I;c[G>>3]=+c[C>>3];c[r>>3]=I;c[L>>3]=v;c[a>>3]=Z;c[Q>>3]=v;c[D>>3]=Z;g=+c[z>>3];c[W>>3]=g;q=+c[S>>3];c[Y>>3]=q;c[F>>3]=g;c[M>>3]=q;q=v+6.0;c[V>>3]=q;c[N>>3]=+c[X>>3];v=q;g=w;w=q}else{y=(o|0)==1;g=y?p:w;k=y?m:k;w=d+-6.0;t[O>>2]=t[X>>2];t[O+4>>2]=t[X+4>>2];t[O+8>>2]=t[X+8>>2];t[O+12>>2]=t[X+12>>2];c[b>>3]=+c[X>>3];d=d+-12.0;c[G>>3]=d;c[r>>3]=+c[S>>3];c[L>>3]=d;t[a>>2]=t[S>>2];t[a+4>>2]=t[S+4>>2];t[a+8>>2]=t[S+8>>2];t[a+12>>2]=t[S+12>>2];c[D>>3]=k;c[W>>3]=+c[z>>3];c[Y>>3]=k;c[F>>3]=w;c[M>>3]=g;c[V>>3]=w;c[N>>3]=g;d=w;w=+c[C>>3]}c[R>>3]=w;t[x>>2]=8;t[U>>2]=O;t[J>>2]=t[X>>2];t[J+4>>2]=t[X+4>>2];t[J+8>>2]=t[X+8>>2];t[J+12>>2]=t[X+12>>2];t[H>>2]=t[S>>2];t[H+4>>2]=t[S+4>>2];t[H+8>>2]=t[S+8>>2];t[H+12>>2]=t[S+12>>2];t[P>>2]=t[U>>2];t[P+4>>2]=t[U+4>>2];s=jV(J,H,P,T,u)|0;e=t[T>>2]|0;if(!e)break e;mR(A,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,s,e,17296);o=o+1|0;w=g}G2(j)}}while(0);h=_;return}function sL(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0;n=h;h=h+16|0;a=n;l=(Bk(e)|0)==0;l=l?18592:18584;i[a>>0]=i[l>>0]|0;i[a+1>>0]=i[l+1>>0]|0;i[a+2>>0]=i[l+2>>0]|0;i[a+3>>0]=i[l+3>>0]|0;a=hk(85493,a,0)|0;Sd(a,137483,280,1)|0;zw(a,0,87171,195059)|0;l=KF(96)|0;r=t[a+16>>2]|0;t[r+8>>2]=l;f=t[e+16>>2]|0;s=t[f+8>>2]|0;c[l>>3]=+c[s>>3];c[l+24>>3]=+c[s+24>>3];i[r+115>>0]=i[f+115>>0]|0;t[r+116>>2]=t[f+116>>2]&1^1;t[r+248>>2]=t[f+248>>2];t[r+252>>2]=t[f+252>>2];r=Vw(yd(e)|0,1,0)|0;while(1){if(!r)break;zw(a,1,t[r+8>>2]|0,t[r+12>>2]|0)|0;r=Vw(yd(e)|0,1,r)|0}r=Vw(yd(e)|0,2,0)|0;while(1){if(!r)break;zw(a,2,t[r+8>>2]|0,t[r+12>>2]|0)|0;r=Vw(yd(e)|0,2,r)|0}if(!(zw(a,2,111464,0)|0))zw(a,2,111464,195059)|0;if(!(zw(a,2,111455,0)|0))zw(a,2,111455,195059)|0;hL(a,A);h=n;return a|0}function cL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;i=h;h=h+16|0;r=i;e=gd(e,Mk(A)|0,1)|0;Sd(e,137447,304,1)|0;jw(A,e)|0;if((oN(A)|0)==2){a=A+16|0;A=$F((U2(t[t[(t[a>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;t[r>>2]=t[t[(t[a>>2]|0)+104>>2]>>2];T4(A,85488,r)|0;Xw(e,108224,A)|0}h=i;return e|0}function oL(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;r=lk(e,A,r,0,1)|0;Sd(r,137460,176,1)|0;jw(i,r)|0;return r|0}function uL(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0.0;f=h;h=h+32|0;n=f+16|0;a=f;if(i|0){l=+c[A>>3];i=A+8|0;c[A>>3]=+c[i>>3];c[i>>3]=-l}t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];$G(e,a,n);h=f;return}function bL(e,A){e=e|0;A=A|0;t[47189]=t[A>>2];t[47193]=t[A+4>>2];t[47194]=t[A+8>>2];t[47174]=t[A+12>>2];t[47175]=t[A+16>>2];t[47181]=t[A+20>>2];t[47180]=t[A+24>>2];t[47179]=t[A+28>>2];t[47205]=t[A+32>>2];t[47197]=t[A+36>>2];t[47182]=t[A+40>>2];t[47192]=t[A+44>>2];t[47201]=t[A+48>>2];t[47200]=t[A+52>>2];t[47199]=t[A+56>>2];t[47204]=t[A+60>>2];t[47198]=t[A+64>>2];t[47183]=t[A+68>>2];t[47145]=t[A+72>>2];t[47146]=t[A+76>>2];t[47147]=t[A+80>>2];t[47157]=t[A+84>>2];t[47150]=t[A+88>>2];t[47151]=t[A+92>>2];t[47152]=t[A+96>>2];t[47154]=t[A+100>>2];t[47155]=t[A+104>>2];t[47158]=t[A+108>>2];t[47161]=t[A+112>>2];t[47159]=t[A+116>>2];t[47160]=t[A+120>>2];t[47163]=t[A+124>>2];t[47162]=t[A+128>>2];t[47164]=t[A+132>>2];t[47165]=t[A+136>>2];t[47156]=t[A+140>>2];t[47168]=t[A+144>>2];t[47140]=t[A+148>>2];t[47138]=t[A+152>>2];G2(A);iG(e);vk(e)|0;return}function hL(e,A){e=e|0;A=A|0;t[A>>2]=t[47189];t[A+4>>2]=t[47193];t[A+8>>2]=t[47194];t[A+12>>2]=t[47174];t[A+16>>2]=t[47175];t[A+20>>2]=t[47181];t[A+24>>2]=t[47180];t[A+28>>2]=t[47179];t[A+32>>2]=t[47205];t[A+36>>2]=t[47197];t[A+40>>2]=t[47182];t[A+44>>2]=t[47192];t[A+48>>2]=t[47201];t[A+52>>2]=t[47200];t[A+56>>2]=t[47199];t[A+60>>2]=t[47204];t[A+64>>2]=t[47198];t[A+68>>2]=t[47183];t[A+72>>2]=t[47145];t[A+76>>2]=t[47146];t[A+80>>2]=t[47147];t[A+84>>2]=t[47157];t[A+88>>2]=t[47150];t[A+92>>2]=t[47151];t[A+96>>2]=t[47152];t[A+100>>2]=t[47154];t[A+104>>2]=t[47155];t[A+108>>2]=t[47158];t[A+112>>2]=t[47161];t[A+116>>2]=t[47159];t[A+120>>2]=t[47160];t[A+124>>2]=t[47163];t[A+128>>2]=t[47162];t[A+132>>2]=t[47164];t[A+136>>2]=t[47165];t[A+140>>2]=t[47156];t[A+144>>2]=t[47168];t[A+152>>2]=t[47138];t[A+148>>2]=t[47140];t[47189]=0;t[47193]=zw(e,2,87412,0)|0;t[47194]=zw(e,2,87421,0)|0;A=zw(e,2,101541,0)|0;t[47174]=A;if(!A)t[47174]=zw(e,2,101541,195059)|0;t[47175]=0;t[47181]=0;t[47180]=zw(e,2,101437,0)|0;t[47179]=zw(e,2,101428,0)|0;t[47205]=zw(e,2,101717,0)|0;t[47197]=0;t[47182]=zw(e,2,108224,0)|0;t[47192]=zw(e,2,85498,0)|0;t[47201]=0;t[47200]=zw(e,2,101617,0)|0;t[47199]=zw(e,2,101603,0)|0;t[47204]=zw(e,2,101708,0)|0;t[47198]=0;t[47183]=0;t[47145]=zw(e,1,141048,0)|0;t[47146]=zw(e,1,141116,0)|0;t[47147]=zw(e,1,108230,0)|0;t[47157]=0;t[47150]=zw(e,1,101428,0)|0;t[47151]=zw(e,1,101437,0)|0;t[47152]=0;t[47154]=zw(e,1,108224,0)|0;t[47155]=0;t[47158]=0;t[47161]=zw(e,1,101409,0)|0;t[47159]=zw(e,1,141076,0)|0;t[47160]=zw(e,1,101472,0)|0;t[47163]=zw(e,1,101484,0)|0;t[47162]=zw(e,1,101348,0)|0;t[47164]=zw(e,1,101489,0)|0;t[47165]=zw(e,1,85510,0)|0;t[47156]=0;t[47168]=0;t[47140]=zw(e,0,101409,0)|0;return}function wL(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0.0,f=0.0;r=t[(t[(t[e>>2]|0)+16>>2]|0)+96>>2]|0;e=t[(t[(t[A>>2]|0)+16>>2]|0)+96>>2]|0;A=(e|0)!=0;if(r)if(A?(a=+c[r+24>>3],f=+c[r+32>>3],i=+c[e+24>>3],n=+c[e+32>>3],!(a>i)):0)if(!(an)e=-1;else e=f>2]|0)+116>>2]|0;if(!A)break;else e=A}A=t[e>>2]&3;r=t[(t[((A|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;i=t[r+232>>2]|0;e=t[(t[((A|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0;A=t[e+232>>2]|0;if((i|0)<=(A|0))if((i|0)<(A|0))e=1;else e=(t[r+236>>2]|0)<(t[e+236>>2]|0)&1;else e=0;return e|0}function dL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;r=h;h=h+16|0;i=r+8|0;a=r;f=(t[e+16>>2]|0)+180|0;n=(t[A+16>>2]|0)+172|0;t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[i>>2]=t[n>>2];t[i+4>>2]=t[n+4>>2];A=vL(e,a,A,i)|0;h=r;return A|0}function vL(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=t[A+4>>2]|0;e:do{if((a|0)>0?(n=t[i+4>>2]|0,(n|0)>0):0)if((a|0)<(n|0)){a=t[A>>2]|0;i=0;while(1){A=t[a+(i<<2)>>2]|0;if(!A){A=0;break e}if((t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)==(r|0))break;else i=i+1|0}}else{a=t[i>>2]|0;i=0;while(1){A=t[a+(i<<2)>>2]|0;if(!A){A=0;break e}if((t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)==(e|0))break;else i=i+1|0}}else A=0}while(0);return A|0}function gL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;r=h;h=h+16|0;i=r+8|0;a=r;f=(t[e+16>>2]|0)+188|0;n=(t[A+16>>2]|0)+196|0;t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[i>>2]=t[n>>2];t[i+4>>2]=t[n+4>>2];A=vL(e,a,A,i)|0;h=r;return A|0}function mL(e){e=e|0;var A=0,r=0,i=0,a=0;i=e+48|0;r=t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0;A=t[r+180>>2]|0;if(!A)A=$F((t[r+184>>2]<<2)+8|0)|0;else A=AM(A,(t[r+184>>2]<<2)+8|0)|0;t[(t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0)+180>>2]=A;a=t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0;r=t[a+180>>2]|0;a=a+184|0;A=t[a>>2]|0;t[a>>2]=A+1;t[r+(A<<2)>>2]=e;i=t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0;t[(t[i+180>>2]|0)+(t[i+184>>2]<<2)>>2]=0;i=e+-48|0;A=t[(t[((t[e>>2]&3|0)==2?e:i)+40>>2]|0)+16>>2]|0;r=t[A+172>>2]|0;if(!r)A=$F((t[A+176>>2]<<2)+8|0)|0;else A=AM(r,(t[A+176>>2]<<2)+8|0)|0;t[(t[(t[((t[e>>2]&3|0)==2?e:i)+40>>2]|0)+16>>2]|0)+172>>2]=A;A=t[(t[((t[e>>2]&3|0)==2?e:i)+40>>2]|0)+16>>2]|0;r=t[A+172>>2]|0;A=A+176|0;a=t[A>>2]|0;t[A>>2]=a+1;t[r+(a<<2)>>2]=e;a=t[(t[((t[e>>2]&3|0)==2?e:i)+40>>2]|0)+16>>2]|0;t[(t[a+172>>2]|0)+(t[a+176>>2]<<2)>>2]=0;return e|0}function pL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;i=e+4|0;a=t[i>>2]|0;r=0;while(1){if((r|0)>=(a|0))break;n=t[e>>2]|0;f=n+(r<<2)|0;if((t[f>>2]|0)==(A|0)){l=4;break}else r=r+1|0}if((l|0)==4){l=a+-1|0;t[i>>2]=l;t[f>>2]=t[n+(l<<2)>>2];t[(t[e>>2]|0)+(l<<2)>>2]=0}return}function EL(e){e=e|0;if(!e)ge(85551,85561,117,85570);else{pL((t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+180|0,e);pL((t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+172|0,e);return}}function BL(e){e=e|0;var A=0,r=0,i=0,a=0;i=e+48|0;r=t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0;A=t[r+204>>2]|0;if(!A)A=$F((t[r+208>>2]<<2)+8|0)|0;else A=AM(A,(t[r+208>>2]<<2)+8|0)|0;t[(t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0)+204>>2]=A;a=t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0;A=t[a+204>>2]|0;a=a+208|0;r=t[a>>2]|0;t[a>>2]=r+1;t[A+(r<<2)>>2]=e;i=t[(t[((t[e>>2]&3|0)==3?e:i)+40>>2]|0)+16>>2]|0;t[(t[i+204>>2]|0)+(t[i+208>>2]<<2)>>2]=0;return}function yL(e){e=e|0;CL(e,(t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+204|0);return}function CL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=A+4|0;i=t[f>>2]|0;a=t[A>>2]|0;r=0;while(1){if((r|0)>=(i|0)){n=4;break}if((t[a+(r<<2)>>2]|0)==(e|0))break;else r=r+1|0}if((n|0)==4){if(!a)r=$F((i<<2)+8|0)|0;else r=AM(a,(i<<2)+8|0)|0;t[A>>2]=r;a=t[f>>2]|0;n=a+1|0;t[f>>2]=n;t[r+(a<<2)>>2]=e;t[(t[A>>2]|0)+(n<<2)>>2]=0}return}function IL(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=KF(96)|0;n=b+48|0;t[n>>2]=t[n>>2]|3;t[b>>2]=t[b>>2]&-4|2;f=KF(176)|0;u=b+16|0;t[u>>2]=f;t[((t[b>>2]&3|0)==3?b:n)+40>>2]=e;s=b+-48|0;t[((t[b>>2]&3|0)==2?b:s)+40>>2]=A;i[f+112>>0]=1;if(!r){t[f+156>>2]=1;a[f+154>>1]=1;a[f+168>>1]=1;a[f+170>>1]=1}else{t[b>>2]=t[b>>2]&15|t[r>>2]&-16;t[n>>2]=t[n>>2]&15|t[r>>2]&-16;o=r+16|0;l=t[o>>2]|0;a[f+168>>1]=a[l+168>>1]|0;a[f+154>>1]=a[l+154>>1]|0;t[f+156>>2]=t[l+156>>2];a[f+170>>1]=a[l+170>>1]|0;e=t[((t[b>>2]&3|0)==3?b:n)+40>>2]|0;A=t[r>>2]&3;c=r+48|0;if((e|0)!=(t[((A|0)==3?r:c)+40>>2]|0)){n=r+-48|0;if((e|0)==(t[((A|0)==2?r:n)+40>>2]|0)){f=f+16|0;e=l+56|0;A=f+40|0;do{t[f>>2]=t[e>>2];f=f+4|0;e=e+4|0}while((f|0)<(A|0))}}else{f=f+16|0;e=l+16|0;A=f+40|0;do{t[f>>2]=t[e>>2];f=f+4|0;e=e+4|0}while((f|0)<(A|0));n=r+-48|0}e=t[((t[b>>2]&3|0)==2?b:s)+40>>2]|0;A=t[r>>2]&3;if((e|0)!=(t[((A|0)==2?r:n)+40>>2]|0)){if((e|0)==(t[((A|0)==3?r:c)+40>>2]|0)){f=(t[u>>2]|0)+56|0;e=(t[o>>2]|0)+16|0;A=f+40|0;do{t[f>>2]=t[e>>2];f=f+4|0;e=e+4|0}while((f|0)<(A|0))}}else{f=(t[u>>2]|0)+56|0;e=(t[o>>2]|0)+56|0;A=f+40|0;do{t[f>>2]=t[e>>2];f=f+4|0;e=e+4|0}while((f|0)<(A|0))}e=(t[o>>2]|0)+172|0;if(!(t[e>>2]|0))t[e>>2]=b;t[(t[u>>2]|0)+116>>2]=r}return b|0}function ZL(e,A,r){e=e|0;A=A|0;r=r|0;return mL(IL(e,A,r)|0)|0}function GL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;e=(t[e+16>>2]|0)+192|0;a=t[e>>2]|0;r=t[A+16>>2]|0;t[r+164>>2]=a;i=a;if(a|0)t[(t[i+16>>2]|0)+168>>2]=A;t[e>>2]=A;t[r+168>>2]=0;if((i|0)==(A|0))ge(85587,85561,215,85603);else return}function LL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;if((e|0)==(A|0))ge(85613,85561,220,85620);a=t[A+16>>2]|0;r=a+164|0;if(t[r>>2]|0)ge(85633,85561,221,85620);i=(t[e+16>>2]|0)+164|0;t[r>>2]=t[i>>2];r=t[i>>2]|0;if(r|0)t[(t[r+16>>2]|0)+168>>2]=A;t[a+168>>2]=e;t[i>>2]=A;return}function QL(e,A){e=e|0;A=A|0;var r=0,i=0;if(!(DL(e,A)|0))ge(85652,85561,231,85673);A=t[A+16>>2]|0;r=t[A+164>>2]|0;i=r;A=A+168|0;if(r|0)t[(t[r+16>>2]|0)+168>>2]=t[A>>2];A=t[A>>2]|0;if(!A)t[(t[e+16>>2]|0)+192>>2]=i;else t[(t[A+16>>2]|0)+164>>2]=i;return}function DL(e,A){e=e|0;A=A|0;e=(t[e+16>>2]|0)+192|0;while(1){e=t[e>>2]|0;if((e|0)==0|(e|0)==(A|0))break;e=(t[e+16>>2]|0)+164|0}return e|0}function zL(e){e=e|0;var A=0,r=0,a=0,n=0;A=KF(64)|0;t[A>>2]=t[A>>2]&-4|1;r=A+16|0;t[r>>2]=KF(304)|0;t[A+24>>2]=yd(e)|0;n=t[r>>2]|0;i[n+156>>0]=1;c[n+96>>3]=1.0;c[n+88>>3]=1.0;c[n+80>>3]=1.0;t[n+216>>2]=1;t[n+176>>2]=0;n=KF(20)|0;a=t[r>>2]|0;t[a+172>>2]=n;t[a+184>>2]=0;a=KF(20)|0;t[(t[r>>2]|0)+180>>2]=a;GL(e,A);e=(t[e+16>>2]|0)+232|0;t[e>>2]=(t[e>>2]|0)+1;return A|0}function WL(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;n=A+48|0;r=t[(t[((t[A>>2]&3|0)==3?A:n)+40>>2]|0)+16>>2]|0;a=t[r+188>>2]|0;if(!a)r=$F((t[r+192>>2]<<2)+8|0)|0;else r=AM(a,(t[r+192>>2]<<2)+8|0)|0;t[(t[(t[((t[A>>2]&3|0)==3?A:n)+40>>2]|0)+16>>2]|0)+188>>2]=r;f=t[(t[((t[A>>2]&3|0)==3?A:n)+40>>2]|0)+16>>2]|0;a=t[f+188>>2]|0;f=f+192|0;r=t[f>>2]|0;t[f>>2]=r+1;t[a+(r<<2)>>2]=A;n=t[(t[((t[A>>2]&3|0)==3?A:n)+40>>2]|0)+16>>2]|0;t[(t[n+188>>2]|0)+(t[n+192>>2]<<2)>>2]=0;n=A+-48|0;r=t[(t[((t[A>>2]&3|0)==2?A:n)+40>>2]|0)+16>>2]|0;a=t[r+196>>2]|0;if(!a)r=$F((t[r+200>>2]<<2)+8|0)|0;else r=AM(a,(t[r+200>>2]<<2)+8|0)|0;t[(t[(t[((t[A>>2]&3|0)==2?A:n)+40>>2]|0)+16>>2]|0)+196>>2]=r;r=t[(t[((t[A>>2]&3|0)==2?A:n)+40>>2]|0)+16>>2]|0;a=t[r+196>>2]|0;r=r+200|0;f=t[r>>2]|0;t[r>>2]=f+1;t[a+(f<<2)>>2]=A;f=t[(t[((t[A>>2]&3|0)==2?A:n)+40>>2]|0)+16>>2]|0;t[(t[f+196>>2]|0)+(t[f+200>>2]<<2)>>2]=0;i[(t[e+16>>2]|0)+240>>0]=1;i[(t[(mG(e)|0)+16>>2]|0)+240>>0]=1;return}function YL(e){e=e|0;var A=0,r=0;if(!e)ge(85551,85561,269,85690);A=t[(t[e+16>>2]|0)+116>>2]|0;if(A|0?(r=(t[A+16>>2]|0)+172|0,(t[r>>2]|0)==(e|0)):0)t[r>>2]=0;pL((t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+188|0,e);pL((t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+196|0,e);return}function FL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=h;h=h+16|0;r=(t[e+16>>2]|0)+172|0;i=t[r>>2]|0;do{if((i|0)!=(A|0))if(!i){t[r>>2]=A;ML(e,A);break}else ge(87593,85561,340,85728);else nw(0,85707,a)|0}while(0);h=a;return}function ML(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,l=0;r=(t[A+16>>2]|0)+170|0;l=t[e+16>>2]|0;e=a[l+170>>1]|0;if((f[r>>1]|0)<(e&65535))a[r>>1]=e;i=l+168|0;n=l+154|0;r=l+156|0;e=A;while(1){if(!e)break;A=t[e+16>>2]|0;l=A+168|0;a[l>>1]=(f[l>>1]|0)+(f[i>>1]|0);l=A+154|0;a[l>>1]=(f[l>>1]|0)+(f[n>>1]|0);l=A+156|0;t[l>>2]=(t[l>>2]|0)+(t[r>>2]|0);e=t[A+172>>2]|0}return}function VL(e){e=e|0;var A=0,r=0,n=0,f=0;r=e+16|0;A=t[(t[r>>2]|0)+172>>2]|0;e:while(1){if(!A)break;NL(A,e);f=t[A+16>>2]|0;n=t[f+172>>2]|0;if(!(a[f+168>>1]|0))RL(A);while(1){if((i[(t[A+16>>2]|0)+112>>0]|0)!=1){A=n;continue e}A=t[(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)+16>>2]|0;if((i[A+156>>0]|0)!=1){A=n;continue e}if((t[A+184>>2]|0)!=1){A=n;continue e}A=t[t[A+180>>2]>>2]|0;NL(A,e)}}t[(t[r>>2]|0)+172>>2]=0;return}function NL(e,A){e=e|0;A=A|0;var r=0;r=t[A+16>>2]|0;A=t[e+16>>2]|0;e=A+168|0;a[e>>1]=(f[e>>1]|0)-(f[r+168>>1]|0);e=A+154|0;a[e>>1]=(f[e>>1]|0)-(f[r+154>>1]|0);A=A+156|0;t[A>>2]=(t[A>>2]|0)-(t[r+156>>2]|0);return}function RL(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if(!e)ge(85551,85561,128,85741);n=e+48|0;r=0;while(1){A=t[e>>2]|0;i=(t[(t[((A&3|0)==3?e:n)+40>>2]|0)+16>>2]|0)+180|0;a=t[(t[i>>2]|0)+(r<<2)>>2]|0;if(!a)break;if((a|0)==(e|0))pL(i,e);r=r+1|0}n=e+-48|0;a=0;while(1){r=(t[(t[((A&3|0)==2?e:n)+40>>2]|0)+16>>2]|0)+172|0;i=t[(t[r>>2]|0)+(a<<2)>>2]|0;if(!i)break;if((i|0)==(e|0)){pL(r,e);A=t[e>>2]|0}a=a+1|0}return}function xL(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;w=h;h=h+1040|0;u=w+1032|0;b=w;o=w+8|0;c=e+16|0;e=t[c>>2]|0;s=a[e+236>>1]|0;while(1){if((s|0)>(a[e+238>>1]|0))break;l=t[e+196>>2]|0;f=l+(s<<6)|0;l=l+(s<<6)+4|0;n=0;e=0;while(1){if((n|0)>=(t[f>>2]|0))break;A=t[(t[l>>2]|0)+(n<<2)>>2]|0;r=A+16|0;if(t[(t[r>>2]|0)+112>>2]|0){if(!e){i[u>>0]=i[18588]|0;i[u+1>>0]=i[18589]|0;i[u+2>>0]=i[18590]|0;i[u+3>>0]=i[18591]|0;e=hk(85763,u,0)|0}t[b>>2]=n;T4(o,137395,b)|0;g=gd(e,o,1)|0;Sd(g,91164,24,1)|0;k=t[(t[r>>2]|0)+180>>2]|0;d=t[k>>2]|0;d=t[(t[(t[((t[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;k=t[k+4>>2]|0;k=t[(t[(t[((t[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;v=(d|0)>(k|0);r=t[g+16>>2]|0;t[r+12>>2]=v?k:d;t[r+16>>2]=v?d:k;t[r+20>>2]=A}n=n+1|0}if(e|0){if((gk(e)|0)>1)JL(e,f);vk(e)|0}s=s+1|0;e=t[c>>2]|0}h=w;return}function JL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;r=0;f=sd(e)|0;e:while(1){if(!f)break;l=cd(e,f)|0;s=f+16|0;n=l;while(1){if(!n){f=l;continue e}a=t[n+16>>2]|0;i=t[s>>2]|0;if((t[a+16>>2]|0)>(t[i+12>>2]|0)){if((t[i+16>>2]|0)<=(t[a+12>>2]|0))lk(e,f,n,0,1)|0}else{lk(e,n,f,0,1)|0;r=1}n=cd(e,n)|0}}do{if(r|0){f=Rv(e,85766,1)|0;s=KF((gk(e)|0)<<2)|0;l=KF((gk(e)|0)<<2)|0;a=A+4|0;i=sd(e)|0;e:while(1){if(!i){r=23;break}if((t[(t[i+16>>2]|0)+8>>2]|0)==0?pk(e,i,1,1)|0:0){A:do{if(HL(e,i,f,l)|0){n=gk(f)|0;if((PL(e,f,s)|0)!=(n|0)){r=17;break e}_4(l,n,4,60);r=0;while(1){if((r|0)>=(n|0))break A;A=l+(r<<2)|0;c=t[s+(r<<2)>>2]|0;t[(t[c+16>>2]|0)+236>>2]=t[A>>2];t[(t[a>>2]|0)+(t[A>>2]<<2)>>2]=c;r=r+1|0}}}while(0);SL(f)}i=cd(e,i)|0}if((r|0)==17)ge(85771,85781,265,85792);else if((r|0)==23){G2(s);break}}}while(0);return}function HL(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;f=t[A+16>>2]|0;t[f+8>>2]=1;f=t[(t[(t[f+20>>2]|0)+16>>2]|0)+236>>2]|0;t[i+((gk(r)|0)<<2)>>2]=f;hd(r,A,1)|0;f=Ow(e,A)|0;a=0;while(1){if(!f)break;s=t[f>>2]&3;n=t[((s|0)==2?f:f+-48|0)+40>>2]|0;l=t[n+16>>2]|0;a=a+((t[(t[(t[l+20>>2]|0)+16>>2]|0)+236>>2]|0)>(t[(t[(t[(t[(t[((s|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(t[l+8>>2]|0))a=(HL(e,n,r,i)|0)+a|0;f=qw(e,f)|0}f=Kw(e,A)|0;while(1){if(!f)break;l=t[f>>2]&3;n=t[((l|0)==3?f:f+48|0)+40>>2]|0;s=t[n+16>>2]|0;a=a+((t[(t[(t[(t[(t[((l|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)>(t[(t[(t[s+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(t[s+8>>2]|0))a=(HL(e,n,r,i)|0)+a|0;f=$w(e,f)|0}return a|0}function PL(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;a=0;while(1){i=jL(e,A)|0;if(!i)break;t[r+(a<<2)>>2]=t[(t[i+16>>2]|0)+20>>2];pd(A,i)|0;i=Ow(e,i)|0;while(1){if(!i)break;n=qw(e,i)|0;ok(e,i)|0;i=n}a=a+1|0}return a|0}function XL(e,A){e=e|0;A=A|0;return(t[e>>2]|0)-(t[A>>2]|0)|0}function SL(e){e=e|0;var A=0,r=0;A=sd(e)|0;while(1){if(!A)break;r=cd(e,A)|0;pd(e,A)|0;A=r}return}function jL(e,A){e=e|0;A=A|0;var r=0;r=sd(A)|0;while(1){if(!r){r=0;break}if(!(pk(e,r,1,0)|0))break;r=cd(A,r)|0}return r|0}function UL(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;TL(e);l=e+16|0;a=0;r=0;while(1){if((a|0)>=(t[(t[l>>2]|0)+220>>2]|0))break;OL(e,a);a=a+1|0;r=(_L(e,0,A)|0)+r|0}qL(e);f=1;while(1){a=t[l>>2]|0;n=t[a+180>>2]|0;if((f|0)>(n|0))break;n=(KL(t[(t[a+184>>2]|0)+(f<<2)>>2]|0,A)|0)+r|0;f=f+1|0;r=n}do{if((n|0)>0){a=Hw(e,85806)|0;if(a|0?(mx(a)|0)<<24>>24==0:0)break;BW(e);i[193769]=1;r=_L(e,2,A)|0}}while(0);$L(e,r);return}function TL(e){e=e|0;var A=0;if(0)lx();i[193769]=0;t[46741]=e;A=((mk(mG(e)|0)|0)<<2)+4|0;t[46740]=KF(A)|0;t[46739]=KF(A)|0;PQ(e);A=e+16|0;if(a[(t[A>>2]|0)+136>>1]&16)XQ(e);aW(e);jW(e,1);SQ(e);nQ(e);A=t[A>>2]|0;t[46742]=a[A+236>>1];t[46743]=a[A+238>>1];return}function OL(e,A){e=e|0;A=A|0;var r=0,i=0,n=0;e=t[e+16>>2]|0;t[e+192>>2]=t[(t[e+216>>2]|0)+(A<<2)>>2];e:do{if((A|0)>0){A=a[e+238>>1]|0;r=e+196|0;e=a[e+236>>1]|0;while(1){if((e|0)>(A|0))break e;i=t[r>>2]|0;n=i+(e<<6)+4|0;i=i+(e<<6)|0;t[n>>2]=(t[n>>2]|0)+(t[i>>2]<<2);t[i>>2]=0;e=e+1|0}}}while(0);return}function _L(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;b=h;h=h+32|0;u=b;if((A|0)>1){i=EQ(0)|0;BQ(e)}else i=2147483647;o=t[15712]|0;s=A;a=0;A=i;while(1){if((s|0)>=3)break;a=t[47136]|0;if((s|0)==2)if((i|0)>(A|0)){CQ(e);i=A}else i=A;else{i=(a|0)<4?a:4;if((mG(e)|0)==(e|0))yQ(e,s);if(!s)fQ(e);lQ(e);n=EQ(0)|0;if((n|0)>(A|0)){a=i;i=n}else{BQ(e);a=i;i=n;A=n}}n=0;l=0;while(1){if((l|0)>=(a|0))break;if(0){t[u>>2]=s;t[u+4>>2]=l;t[u+8>>2]=n;t[u+12>>2]=i;t[u+16>>2]=A;a3(o,86199,u)|0}f=n+1|0;if((i|0)==0|(n|0)>=(t[46744]|0))break;IQ(e,l);i=EQ(0)|0;if((i|0)>(A|0))n=f;else{BQ(e);n=+c[23215]*+(A|0)>+(i|0)?0:f;A=i}l=l+1|0}if(!i){i=0;break}else s=s+1|0}if((i|0)>(A|0))CQ(e);if((A|0)>0){ZQ(e,0);i=EQ(0)|0}else i=A;e:do{if(r|0){A=0;while(1){if((A|0)>=(a|0))break e;GQ(e);A=A+1|0}}}while(0);h=b;return i|0}function qL(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+16|0;u=w;pQ(e);c=e+16|0;A=t[c>>2]|0;o=t[15712]|0;s=a[A+236>>1]|0;while(1){if((s|0)>(a[A+238>>1]|0))break;r=t[A+196>>2]|0;i=t[r+(s<<6)+8>>2]|0;t[r+(s<<6)>>2]=i;n=t[r+(s<<6)+12>>2]|0;t[r+(s<<6)+4>>2]=n;l=0;while(1){if((l|0)>=(i|0))break;f=t[n+(l<<2)>>2]|0;if(!f){b=6;break}t[(t[f+16>>2]|0)+236>>2]=l;l=l+1|0}if((b|0)==6){b=0;if(0){r=Mk(e)|0;A=t[(t[(t[c>>2]|0)+196>>2]|0)+(s<<6)>>2]|0;t[u>>2]=r;t[u+4>>2]=s;t[u+8>>2]=l;t[u+12>>2]=A;a3(o,86149,u)|0;A=t[c>>2]|0;r=t[A+196>>2]|0}t[r+(s<<6)>>2]=l}s=s+1|0}h=w;return}function KL(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;dW(e);nQ(e);fQ(e);lQ(e);a=e+16|0;r=_L(e,2,A)|0;i=1;while(1){n=t[a>>2]|0;if((i|0)>(t[n+180>>2]|0))break;r=(KL(t[(t[n+184>>2]|0)+(i<<2)>>2]|0,A)|0)+r|0;i=i+1|0}sQ(e);return r|0}function $L(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;k=h;h=h+16|0;w=k;r=t[46739]|0;if(r|0){G2(r);t[46739]=0}r=t[46740]|0;if(r|0){G2(r);t[46740]=0}b=e+16|0;r=1;while(1){n=t[b>>2]|0;if((r|0)>(t[n+180>>2]|0))break;eQ(t[(t[n+184>>2]|0)+(r<<2)>>2]|0);r=r+1|0}u=a[n+236>>1]|0;r=n;while(1){if((u|0)>(a[r+238>>1]|0))break;else o=0;while(1){r=t[r+196>>2]|0;if((o|0)>=(t[r+(u<<6)>>2]|0))break;s=(t[(t[r+(u<<6)+4>>2]|0)+(o<<2)>>2]|0)+16|0;r=t[s>>2]|0;t[r+236>>2]=o;r=t[r+188>>2]|0;e:do{if(r|0){n=0;while(1){f=t[r+(n<<2)>>2]|0;if(!f)break e;l=f+16|0;if((i[(t[l>>2]|0)+112>>0]|0)==4){YL(f);G2(t[l>>2]|0);G2(f);n=n+-1|0;r=t[(t[s>>2]|0)+188>>2]|0}n=n+1|0}}}while(0);o=o+1|0;r=t[b>>2]|0}AQ(t[r+(u<<6)+56>>2]|0);u=u+1|0;r=t[b>>2]|0}if(0){b=t[15712]|0;e=Mk(e)|0;d=+sx();t[w>>2]=e;t[w+4>>2]=A;c[w+8>>3]=d;a3(b,85817,w)|0}h=k;return}function eQ(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0;n=e+16|0;A=1;while(1){i=t[n>>2]|0;if((A|0)>(t[i+180>>2]|0))break;eQ(t[(t[i+184>>2]|0)+(A<<2)>>2]|0);A=A+1|0}e:do{if(t[i+268>>2]|0){r=a[i+236>>1]|0;A=i;while(1){if((r|0)>(a[A+238>>1]|0))break e;s=t[(t[A+268>>2]|0)+(r<<2)>>2]|0;l=rQ(e,s,-1)|0;s=rQ(e,s,1)|0;t[(t[(t[n>>2]|0)+268>>2]|0)+(r<<2)>>2]=l;c=t[(t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0)+(r<<6)+4>>2]|0;l=t[(t[l+16>>2]|0)+236>>2]|0;i=t[n>>2]|0;f=t[i+196>>2]|0;t[f+(r<<6)+4>>2]=c+(l<<2);t[f+(r<<6)>>2]=(t[(t[s+16>>2]|0)+236>>2]|0)+1-l;r=r+1|0;A=i}}}while(0);return}function AQ(e){e=e|0;if(e|0){G2(t[e+8>>2]|0);G2(e)}return}function rQ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=A;while(1){A=iQ(A,r)|0;if(!A)break;if(aQ(e,A)|0){i=A;continue}a=(tQ(e,A)|0)==0;i=a?i:A}return i|0}function iQ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;if(!e)ge(85856,85781,1023,85858);if((A|0)<0){e=t[e+16>>2]|0;i=t[e+236>>2]|0;if((i|0)>0){e=(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(t[e+232>>2]<<6)+4|0;r=i+-1|0;a=7}else n=0}else{e=t[e+16>>2]|0;i=t[e+236>>2]|0;e=(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(t[e+232>>2]<<6)+4|0;r=i+1|0;a=7}if((a|0)==7){e=t[(t[e>>2]|0)+(r<<2)>>2]|0;if(e)if((P((t[(t[e+16>>2]|0)+236>>2]|0)-i|0,A)|0)>0)n=e;else ge(85867,85781,1029,85858);else n=0}return n|0}function aQ(e,A){e=e|0;A=A|0;if(!(i[(t[A+16>>2]|0)+156>>0]|0))e=(Wd(e,A)|0)!=0&1;else e=0;return e|0}function tQ(e,A){e=e|0;A=A|0;var r=0,a=0;A=t[A+16>>2]|0;if(((i[A+156>>0]|0)==1?(t[A+176>>2]|0)==1:0)?(t[A+184>>2]|0)==1:0){A=t[A+180>>2]|0;while(1){A=t[A>>2]|0;r=t[A+16>>2]|0;if(!(i[r+112>>0]|0))break;else A=r+116|0}if(Wd(e,A)|0)A=1;else a=7}else a=7;if((a|0)==7)A=0;return A|0}function nQ(e){e=e|0;var A=0,r=0,a=0;a=h;h=h+16|0;r=a;A=t[47140]|0;e:do{if((A|0)!=0|(t[47161]|0)!=0){A=dx(e,A,0)|0;if(A|0){switch(i[A>>0]|0){case 0:break e;case 111:{if(!(e1(A,86069)|0)){kQ(e,1);break e}break}case 105:{if(!(e1(A,98735)|0)){kQ(e,0);break e}break}default:{}}t[r>>2]=A;nw(1,86073,r)|0;break}A=xv(e)|0;while(1){if(!A)break;if(!(Az(A)|0))nQ(A);A=Jv(A)|0}if(t[47161]|0)dQ(e)}}while(0);h=a;return}function fQ(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0;c=e+16|0;A=t[c>>2]|0;s=a[A+236>>1]|0;while(1){if((s|0)>(a[A+238>>1]|0))break;else{r=0;l=0}while(1){n=t[A+196>>2]|0;f=t[n+(s<<6)>>2]|0;if((l|0)>=(f|0))break;n=t[(t[(t[n+(s<<6)+4>>2]|0)+(l<<2)>>2]|0)+16>>2]|0;i[n+158>>0]=0;i[n+157>>0]=0;t[n+284>>2]=l;if((r|0)==0&(t[n+192>>2]|0)>0){r=hQ(f,f)|0;A=t[c>>2]|0;t[(t[A+196>>2]|0)+(s<<6)+56>>2]=r;r=1}l=l+1|0}e:do{if(r){l=0;r=f;while(1){if((l|0)>=(r|0))break e;f=t[(t[n+(s<<6)+4>>2]|0)+(l<<2)>>2]|0;if(!(i[(t[f+16>>2]|0)+157>>0]|0)){wQ(e,f);A=t[c>>2]|0;r=t[A+196>>2]|0;n=r;r=t[r+(s<<6)>>2]|0}l=l+1|0}}}while(0);s=s+1|0}return}function lQ(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0;v=e+16|0;A=t[v>>2]|0;if(i[A+240>>0]|0){f=0;d=a[A+236>>1]|0;k=0;l=0;e:while(1){if((d|0)>(a[A+238>>1]|0))break;r=t[A+196>>2]|0;n=t[r+(d<<6)>>2]|0;if(!n){n=k;r=l}else{r=t[r+(d<<6)+4>>2]|0;h=t[(t[(t[r>>2]|0)+16>>2]|0)+236>>2]|0;A=0;while(1){if((A|0)>=(n|0))break;i[(t[(t[r+(A<<2)>>2]|0)+16>>2]|0)+157>>0]=0;A=A+1|0}A=(A<<2)+4|0;if(!f)w=$F(A)|0;else w=AM(l,A)|0;u=0;b=0;while(1){A=t[v>>2]|0;r=t[A+196>>2]|0;n=t[r+(d<<6)>>2]|0;if((n|0)<=(b|0))break;s=t[(t[r+(d<<6)+4>>2]|0)+(((t[A+116>>2]&1|0)==0?n+~b|0:b)<<2)>>2]|0;o=s+16|0;A=0;c=0;while(1){l=t[o>>2]|0;if((A|0)>=(t[l+200>>2]|0)){r=0;n=0;A=l;break}l=c+((cQ(e,t[(t[l+196>>2]|0)+(A<<2)>>2]|0)|0)!=0&1)|0;A=A+1|0;c=l}while(1){if((n|0)>=(t[A+192>>2]|0))break;l=r+((cQ(e,t[(t[A+188>>2]|0)+(n<<2)>>2]|0)|0)!=0&1)|0;r=l;n=n+1|0;A=t[o>>2]|0}if(r|c)if((c|0)==0&(i[A+157>>0]|0)==0)A=(oQ(e,s,w+(u<<2)|0,d)|0)+u|0;else A=u;else{t[w+(u<<2)>>2]=s;A=u+1|0}u=A;b=b+1|0}A:do{if(u){r:do{if(!(t[A+116>>2]&1)){r=w;A=w+(u<<2)|0;while(1){A=A+-4|0;if(r>>>0>=A>>>0){n=0;break r}b=t[r>>2]|0;t[r>>2]=t[A>>2];t[A>>2]=b;r=r+4|0}}else n=0}while(0);while(1){A=t[v>>2]|0;l=t[A+196>>2]|0;r=t[l+(d<<6)>>2]|0;if((n|0)>=(r|0)){u=0;n=l;break}b=t[w+(n<<2)>>2]|0;t[(t[l+(d<<6)+4>>2]|0)+(n<<2)>>2]=b;t[(t[b+16>>2]|0)+236>>2]=n+h;n=n+1|0}while(1){if((u|0)>=(r|0))break A;o=(t[(t[n+(d<<6)+4>>2]|0)+(u<<2)>>2]|0)+16|0;l=t[(t[o>>2]|0)+188>>2]|0;if(l){c=0;r=l;while(1){n=t[r+(c<<2)>>2]|0;A=t[v>>2]|0;if(!n)break;s=t[n>>2]&3;l=t[(t[(t[((s|0)==2?n:n+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=t[(t[(t[((s|0)==3?n:n+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;if(!(t[A+116>>2]&1))if((l|0)<(s|0))g=36;else A=c;else if((l|0)>(s|0))g=36;else A=c;if((g|0)==36){g=0;if(cQ(e,n)|0){g=37;break e}YL(n);uQ(e,n);A=c+-1|0;r=t[(t[o>>2]|0)+188>>2]|0}c=A+1|0}r=t[A+196>>2]|0;n=r;r=t[r+(d<<6)>>2]|0}u=u+1|0}}}while(0);i[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(d<<6)+49>>0]=0;f=w;n=w;r=w}d=d+1|0;k=n;l=r}if((g|0)==37)ge(85915,85781,1561,85954);if(f|0)G2(k)}return}function sQ(e){e=e|0;var A=0,r=0;r=e+16|0;e=t[r>>2]|0;e:do{if(t[e+268>>2]|0){A=a[e+236>>1]|0;while(1){if((A|0)>(a[e+238>>1]|0))break e;t[(t[e+268>>2]|0)+(A<<2)>>2]=t[t[(t[e+196>>2]|0)+(A<<6)+4>>2]>>2];A=A+1|0;e=t[r>>2]|0}}}while(0);return}function cQ(e,A){e=e|0;A=A|0;if((t[(t[A+16>>2]|0)+156>>2]|0)!=0?(bQ(e,t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0)!=0:0)e=(bQ(e,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0)!=0&1;else e=0;return e|0}function oQ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;o=A+16|0;n=t[o>>2]|0;i[n+157>>0]=1;e:do{if((t[n+192>>2]|0)>0){f=0;s=0;while(1){l=t[(t[n+188>>2]|0)+(s<<2)>>2]|0;if(!l)break e;if((cQ(e,l)|0)!=0?(c=t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0,(i[(t[c+16>>2]|0)+157>>0]|0)==0):0)f=(oQ(e,c,r+(f<<2)|0,a)|0)+f|0;s=s+1|0;n=t[o>>2]|0}}else f=0}while(0);if((t[n+232>>2]|0)==(a|0)){t[r+(f<<2)>>2]=A;return f+1|0}else ge(85967,85781,1490,85983);return 0}function uQ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;l=t[A>>2]&3;s=t[((l|0)==2?A:A+-48|0)+40>>2]|0;a=t[(t[s+16>>2]|0)+188>>2]|0;e:do{if(!a){r=A+48|0;u=15}else{o=A+48|0;n=((l|0)==3?A:o)+40|0;r=0;while(1){f=t[a+(r<<2)>>2]|0;if(!f){r=o;u=15;break e}if((t[((t[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)==(t[n>>2]|0))break;else r=r+1|0}FL(A,f);r=(t[A+16>>2]|0)+172|0;if(!(t[r>>2]|0))t[r>>2]=f;r=t[f+16>>2]|0;if((i[r+112>>0]|0)==4?(c=r+116|0,(t[c>>2]|0)==0):0)t[c>>2]=A;r=t[(t[((t[A>>2]&3|0)==3?A:o)+40>>2]|0)+16>>2]|0;a=t[r+204>>2]|0;if(!a)r=$F((t[r+208>>2]<<2)+8|0)|0;else r=AM(a,(t[r+208>>2]<<2)+8|0)|0;t[(t[(t[((t[A>>2]&3|0)==3?A:o)+40>>2]|0)+16>>2]|0)+204>>2]=r;l=t[(t[((t[A>>2]&3|0)==3?A:o)+40>>2]|0)+16>>2]|0;s=t[l+204>>2]|0;l=l+208|0;c=t[l>>2]|0;t[l>>2]=c+1;t[s+(c<<2)>>2]=A;A=t[(t[((t[A>>2]&3|0)==3?A:o)+40>>2]|0)+16>>2]|0;t[(t[A+204>>2]|0)+(t[A+208>>2]<<2)>>2]=0}}while(0);if((u|0)==15){u=IL(s,t[((l|0)==3?A:r)+40>>2]|0,A)|0;o=t[A+16>>2]|0;A=t[u+16>>2]|0;i[A+112>>0]=(i[o+112>>0]|0)==4?4:3;t[A+96>>2]=t[o+96>>2];WL(e,u)}return}function bQ(e,A){e=e|0;A=A|0;var r=0;r=aQ(e,A)|0;return tQ(e,A)|0|r|0}function hQ(e,A){e=e|0;A=A|0;var r=0;r=KF(12)|0;t[r>>2]=e;t[r+4>>2]=A;t[r+8>>2]=KF(P(A,e)|0)|0;return r|0}function wQ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;h=A+16|0;o=t[h>>2]|0;c=t[(t[(t[e+16>>2]|0)+196>>2]|0)+(t[o+232>>2]<<6)+56>>2]|0;i[o+157>>0]=1;i[o+158>>0]=1;o=(t[(t[(mG(e)|0)+16>>2]|0)+180>>2]|0)>0;r=t[h>>2]|0;a=t[r+188>>2]|0;e:do{if(a){u=c+4|0;b=c+8|0;A=0;A:while(1){s=t[a+(A<<2)>>2]|0;if(!s){w=r;break e}if(o){if((Wd(e,t[((t[s>>2]&3|0)==3?s:s+48|0)+40>>2]|0)|0)!=0?(Wd(e,t[((t[s>>2]&3|0)==2?s:s+-48|0)+40>>2]|0)|0)!=0:0)k=7}else k=7;do{if((k|0)==7){k=0;f=s+16|0;if(t[(t[f>>2]|0)+156>>2]|0){r=t[s>>2]&3;n=s+-48|0;d=t[(t[((r|0)==2?s:n)+40>>2]|0)+16>>2]|0;l=t[d+284>>2]|0;a=(l|0)<(t[c>>2]|0);if((i[d+158>>0]|0)==1){if(!a){k=10;break A}r=t[(t[(t[((r|0)==3?s:s+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;a=t[u>>2]|0;if((r|0)>=(a|0)){k=12;break A}i[(t[b>>2]|0)+((P(a,l)|0)+r)>>0]=1;YL(s);A=A+-1|0;if((i[(t[f>>2]|0)+112>>0]|0)==4)break;uQ(e,s);break}else{if(!a){k=16;break A}r=t[(t[(t[((r|0)==3?s:s+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;a=t[u>>2]|0;if((r|0)>=(a|0)){k=18;break A}i[(t[b>>2]|0)+((P(a,r)|0)+l)>>0]=1;r=t[((t[s>>2]&3|0)==2?s:n)+40>>2]|0;if(i[(t[r+16>>2]|0)+157>>0]|0)break;wQ(e,r);break}}}}while(0);a=t[h>>2]|0;A=A+1|0;r=a;a=t[a+188>>2]|0}if((k|0)==10)ge(85993,85781,1251,86025);else if((k|0)==12)ge(86037,85781,1252,86025);else if((k|0)==16)ge(85993,85781,1260,86025);else if((k|0)==18)ge(86037,85781,1261,86025)}else w=r}while(0);i[w+158>>0]=0;return}function kQ(e,A){e=e|0;A=A|0;var r=0;r=sd(e)|0;while(1){if(!r)break;vQ(e,r,A);r=cd(e,r)|0}return}function dQ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;n=h;h=h+16|0;a=n;A=sd(e)|0;while(1){if(!A)break;r=dx(A,t[47161]|0,0)|0;e:do{if(r|0){switch(i[r>>0]|0){case 0:break e;case 111:{if(!(e1(r,86069)|0)){vQ(e,A,1);break e}break}case 105:{if(!(e1(r,98735)|0)){vQ(e,A,0);break e}break}default:{}}f=Mk(A)|0;t[a>>2]=r;t[a+4>>2]=f;nw(1,86104,a)|0}}while(0);A=cd(e,A)|0}h=n;return}function vQ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;s=t[46740]|0;f=A+16|0;a=t[f>>2]|0;e:do{if(!(t[a+212>>2]|0)){l=(r|0)!=0;A:do{if(l){n=0;A=0;r=a;while(1){a=t[(t[r+180>>2]|0)+(n<<2)>>2]|0;if(!a)break A;if(!(gQ(a)|0)){t[s+(A<<2)>>2]=a;A=A+1|0;r=t[f>>2]|0}n=n+1|0}}else{n=0;A=0;r=a;while(1){a=t[(t[r+172>>2]|0)+(n<<2)>>2]|0;if(!a)break A;if(!(gQ(a)|0)){t[s+(A<<2)>>2]=a;A=A+1|0;r=t[f>>2]|0}n=n+1|0}}}while(0);if((A|0)>=2){t[s+(A<<2)>>2]=0;_4(s,A,4,61);f=l?2:3;n=l?-1:1;a=1;while(1){A=t[s+(a<<2)>>2]|0;if(!A)break e;r=t[s+(a+-1<<2)>>2]|0;r=t[((t[r>>2]&3|0)==(f|0)?r:r+(n*48|0)|0)+40>>2]|0;A=t[((t[A>>2]&3|0)==(f|0)?A:A+(n*48|0)|0)+40>>2]|0;if(gL(r,A)|0)break e;l=IL(r,A,0)|0;i[(t[l+16>>2]|0)+112>>0]=4;WL(e,l);a=a+1|0}}}}while(0);return}function gQ(e){e=e|0;var A=0;while(1){A=t[(t[e+16>>2]|0)+116>>2]|0;if(!A)break;else e=A}A=t[e>>2]&3;return(t[(t[(t[((A|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)!=(t[(t[(t[((A|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)|0}function mQ(e,A){e=e|0;A=A|0;return((t[t[e>>2]>>2]|0)>>>4)-((t[t[A>>2]>>2]|0)>>>4)|0}function pQ(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0;i=t[e+16>>2]|0;n=i+220|0;f=t[n>>2]|0;if((f|0)>=2){l=i+216|0;e=0;r=0;while(1){if((r|0)>=(f|0))break;A=t[(t[l>>2]|0)+(r<<2)>>2]|0;if(e|0)t[(t[e+16>>2]|0)+164>>2]=A;s=t[A+16>>2]|0;t[s+168>>2]=e;e=A;A=s;while(1){A=t[A+164>>2]|0;if(!A)break;e=A;A=t[A+16>>2]|0}r=r+1|0}t[n>>2]=1;t[i+192>>2]=t[t[i+216>>2]>>2];a[i+236>>1]=t[46742];a[i+238>>1]=t[46743]}return}function EQ(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0;l=t[46741]|0;s=l+16|0;r=t[s>>2]|0;n=0;f=a[r+236>>1]|0;while(1){if((f|0)>=(a[r+238>>1]|0))break;e=t[r+196>>2]|0;if(!(i[e+(f<<6)+49>>0]|0)){A=JQ(l,f)|0;e=t[s>>2]|0;r=t[e+196>>2]|0;t[r+(f<<6)+52>>2]=A;i[r+(f<<6)+49>>0]=1}else{A=t[e+(f<<6)+52>>2]|0;e=r}n=A+n|0;f=f+1|0;r=e}return n|0}function BQ(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0;e=t[e+16>>2]|0;n=a[e+238>>1]|0;f=e+196|0;e=a[e+236>>1]|0;while(1){if((e|0)>(n|0))break;i=t[f>>2]|0;r=t[i+(e<<6)>>2]|0;i=i+(e<<6)+4|0;A=0;while(1){if((A|0)>=(r|0))break;l=t[(t[(t[i>>2]|0)+(A<<2)>>2]|0)+16>>2]|0;c[l+16>>3]=+(t[l+236>>2]|0);A=A+1|0}e=e+1|0}return}function yQ(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;d=h;h=h+16|0;o=d;u=e+16|0;b=cx(t[(t[u>>2]|0)+232>>2]|0)|0;s=t[u>>2]|0;r=s+192|0;n=r;while(1){n=t[n>>2]|0;if(!n)break;n=t[n+16>>2]|0;i[n+157>>0]=0;n=n+164|0}f=a[s+238>>1]|0;l=s+196|0;n=a[s+236>>1]|0;while(1){if((n|0)>(f|0))break;t[(t[l>>2]|0)+(n<<6)>>2]=0;n=n+1|0}l=(A|0)==0;while(1){n=t[r>>2]|0;if(!n)break;f=n+16|0;r=t[f>>2]|0;if((t[t[(l?r+172|0:r+180|0)>>2]>>2]|0)==0?(c=r+157|0,(i[c>>0]|0)==0):0){i[c>>0]=1;ux(b,n);while(1){r=bx(b)|0;if(!r)break;if((i[(t[r+16>>2]|0)+159>>0]|0)==7){EW(e,r,A,b);continue}else{RQ(e,r);xQ(b,r,A);continue}}r=t[f>>2]|0}r=r+164|0}if(bx(b)|0)nw(1,86312,o)|0;r=t[u>>2]|0;s=a[r+236>>1]|0;while(1){if((s|0)>(a[r+238>>1]|0))break;i[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(s<<6)+49>>0]=0;if((t[r+116>>2]&1|0)!=0?(w=t[r+196>>2]|0,k=t[w+(s<<6)>>2]|0,(k|0)>0):0){n=t[w+(s<<6)+4>>2]|0;f=k+-1|0;l=(f|0)/2|0;r=0;while(1){if((r|0)>(l|0))break;WQ(t[n+(r<<2)>>2]|0,t[n+(f-r<<2)>>2]|0);r=r+1|0}r=t[u>>2]|0}s=s+1|0}if((mG(e)|0)==(e|0)?(EQ(0)|0)>0:0)ZQ(e,0);ox(b);h=d;return}function CQ(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0;b=e+16|0;e=t[b>>2]|0;r=a[e+236>>1]|0;A=a[e+238>>1]|0;o=A<<16>>16;u=e+196|0;n=r;while(1){if((n|0)>(o|0))break;s=t[u>>2]|0;l=t[s+(n<<6)>>2]|0;s=s+(n<<6)+4|0;f=0;while(1){if((f|0)>=(l|0))break;h=t[(t[(t[s>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;t[h+236>>2]=~~+c[h+16>>3];f=f+1|0}n=n+1|0}while(1){if((r|0)>(A<<16>>16|0))break;i[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(r<<6)+49>>0]=0;h=t[e+196>>2]|0;_4(t[h+(r<<6)+4>>2]|0,t[h+(r<<6)>>2]|0,4,62);h=t[b>>2]|0;r=r+1|0;A=a[h+238>>1]|0;e=h}return}function IQ(e,A){e=e|0;A=A|0;var r=0,i=0,n=0;n=((A|0)%4|0|0)<2&1;r=t[e+16>>2]|0;if(!(A&1)){A=a[r+236>>1]|0;i=1;r=a[r+238>>1]|0;A=(A<<16>>16<=(a[(t[(t[46741]|0)+16>>2]|0)+236>>1]|0)&1)+(A<<16>>16)|0}else{A=a[r+238>>1]|0;i=-1;r=a[r+236>>1]|0;A=((A<<16>>16>=(a[(t[(t[46741]|0)+16>>2]|0)+238>>1]|0))<<31>>31)+(A<<16>>16)|0}r=i+r|0;while(1){if((A|0)==(r|0))break;MQ(e,A,n,(FQ(e,A,A-i|0)|0)&255);A=A+i|0}ZQ(e,n^1);return}function ZQ(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0;c=e+16|0;n=t[c>>2]|0;l=a[n+236>>1]|0;s=a[n+238>>1]|0;f=n+196|0;r=l<<16>>16;while(1){if((r|0)>(s|0)){f=l;break}i[(t[f>>2]|0)+(r<<6)+48>>0]=1;r=r+1|0}while(1){r=0;f=f<<16>>16;while(1){if((f|0)>(a[n+238>>1]|0))break;if(i[(t[n+196>>2]|0)+(f<<6)+48>>0]|0){r=(YQ(e,f,A)|0)+r|0;n=t[c>>2]|0}f=f+1|0}if((r|0)<=0)break;f=a[n+236>>1]|0}return}function GQ(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;h=e+16|0;A=t[h>>2]|0;b=a[A+238>>1]|0;e:while(1){if((b|0)<(a[A+236>>1]|0)){A=16;break}r=t[A+196>>2]|0;i[r+(b<<6)+48>>0]=0;w=(b|0)>0;k=b+1|0;n=0;A:while(1){o=(t[r+(b<<6)>>2]|0)+-1|0;u=r+(b<<6)+4|0;c=r+(k<<6)|0;while(1){if((n|0)>=(o|0))break A;s=t[u>>2]|0;l=t[s+(n<<2)>>2]|0;n=n+1|0;s=t[s+(n<<2)>>2]|0;if((t[(t[l+16>>2]|0)+236>>2]|0)>=(t[(t[s+16>>2]|0)+236>>2]|0)){A=7;break e}if(LQ(e,l,s)|0)continue;if(w){r=QQ(l,s)|0;f=QQ(s,l)|0}else{r=0;f=0}if((t[c>>2]|0)>0){r=(DQ(l,s)|0)+r|0;f=(DQ(s,l)|0)+f|0}if((f|0)<=(r|0))break}zQ(e,b,l,s);A=t[h>>2]|0;r=t[A+196>>2]|0}b=b+-1|0}if((A|0)==7)ge(86263,85781,721,86289);else if((A|0)==16)return}function LQ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0;s=t[A+16>>2]|0;l=t[s+212>>2]|0;a=t[r+16>>2]|0;n=t[a+212>>2]|0;f=(l|0)!=(n|0);do{if(!(i[193769]|0))if((n|0)==0|((l|0)==0|f^1))c=9;else{if((i[s+159>>0]|0)==7?(i[s+156>>0]|0)==1:0){e=0;break}if((i[a+159>>0]|0)==7?(i[a+156>>0]|0)==1:0){e=0;break}e=1}else if(f)e=1;else c=9}while(0);if((c|0)==9){a=t[e+16>>2]|0;e=t[(t[a+196>>2]|0)+(t[s+232>>2]<<6)+56>>2]|0;if(!e)e=0;else{s=(t[a+116>>2]&1|0)==0;c=P(t[e+4>>2]|0,t[(t[(s?A:r)+16>>2]|0)+284>>2]|0)|0;e=i[(t[e+8>>2]|0)+((t[(t[(s?r:A)+16>>2]|0)+284>>2]|0)+c)>>0]|0}}return e|0}function QQ(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;o=e+16|0;l=t[(t[A+16>>2]|0)+172>>2]|0;A=0;while(1){e=t[l>>2]|0;if(!e)break;f=t[e+16>>2]|0;s=a[f+154>>1]|0;n=t[(t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;f=f+16|0;i=t[(t[o>>2]|0)+172>>2]|0;e=A;while(1){A=t[i>>2]|0;if(!A)break;r=(t[(t[(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-n|0;if((r|0)<=0){if((r|0)==0?(u=t[A+16>>2]|0,+c[u+16>>3]>+c[f>>3]):0){A=u;b=9}}else{A=t[A+16>>2]|0;b=9}if((b|0)==9){b=0;e=(P(a[A+154>>1]|0,s)|0)+e|0}i=i+4|0}l=l+4|0;A=e}return A|0}function DQ(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;o=e+16|0;l=t[(t[A+16>>2]|0)+180>>2]|0;A=0;while(1){e=t[l>>2]|0;if(!e)break;f=t[e+16>>2]|0;s=a[f+154>>1]|0;n=t[(t[(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;f=f+56|0;i=t[(t[o>>2]|0)+180>>2]|0;e=A;while(1){A=t[i>>2]|0;if(!A)break;r=(t[(t[(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-n|0;if((r|0)<=0){if((r|0)==0?(u=t[A+16>>2]|0,+c[u+56>>3]>+c[f>>3]):0){A=u;b=9}}else{A=t[A+16>>2]|0;b=9}if((b|0)==9){b=0;e=(P(a[A+154>>1]|0,s)|0)+e|0}i=i+4|0}l=l+4|0;A=e}return A|0}function zQ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;l=i[(t[r+16>>2]|0)+156>>0]|0;if(l<<24>>24!=(i[(t[a+16>>2]|0)+156>>0]|0)){s=e+16|0;o=t[(t[s>>2]|0)+196>>2]|0;c=t[o+(A<<6)>>2]|0;o=o+(A<<6)+4|0;e=0;n=0;f=0;while(1){if((e|0)>=(c|0))break;h=(i[(t[(t[(t[o>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+156>>0]|0)==0;e=e+1|0;n=n+(h&1)|0;f=f+((h^1)&1)|0}l=l<<24>>24==0;f=(n|0)<(f|0)?l?r:a:l?a:r;l=0;e=0;while(1){if((e|0)>=(c|0))break;l=(t[(t[o>>2]|0)+(e<<2)>>2]|0)==(f|0)?e:l;e=e+1|0}h=(i[(t[f+16>>2]|0)+156>>0]|0)==0&1;b=0;n=l;while(1){e=n+-1|0;if((n|0)<=0){u=0;e=l;break}if((i[(t[(t[(t[o>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(h|0)){u=0;e=l;break}b=b+1|0;n=e}while(1){e=e+1|0;if((e|0)>=(c|0))break;if((i[(t[(t[(t[o>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(h|0))break;u=u+1|0}WQ(r,a);s=t[(t[s>>2]|0)+196>>2]|0;c=t[s+(A<<6)>>2]|0;s=s+(A<<6)+4|0;e=0;while(1){if((e|0)>=(c|0)){f=0;n=l;break}l=(t[(t[s>>2]|0)+(e<<2)>>2]|0)==(f|0)?e:l;e=e+1|0}while(1){e=n+-1|0;if((n|0)<=0){n=0;e=l;break}if((i[(t[(t[(t[s>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(h|0)){n=0;e=l;break}f=f+1|0;n=e}while(1){e=e+1|0;if((e|0)>=(c|0))break;if((i[(t[(t[(t[s>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(h|0))break;n=n+1|0}A=f-n|0;h=b-u|0;if((((A|0)>-1?A:0-A|0)|0)>(((h|0)>-1?h:0-h|0)|0))WQ(r,a)}return}function WQ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;a=t[e+16>>2]|0;i=t[a+232>>2]|0;a=a+236|0;r=t[a>>2]|0;n=A+16|0;f=t[(t[n>>2]|0)+236>>2]|0;t[a>>2]=f;a=(t[46741]|0)+16|0;t[(t[(t[(t[a>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0)+(f<<2)>>2]=e;t[(t[n>>2]|0)+236>>2]=r;t[(t[(t[(t[a>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0)+(r<<2)>>2]=A;return}function YQ(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0;k=e+16|0;b=t[(t[k>>2]|0)+196>>2]|0;i[b+(A<<6)+48>>0]=0;d=(A|0)>0;v=A+1|0;h=(r|0)!=0;w=A+-1|0;n=0;l=0;r=b;e:while(1){o=(t[r+(A<<6)>>2]|0)+-1|0;u=r+(A<<6)+4|0;f=r+(v<<6)|0;b=n;while(1){if((b|0)>=(o|0)){r=17;break e}c=t[u>>2]|0;s=t[c+(b<<2)>>2]|0;b=b+1|0;c=t[c+(b<<2)>>2]|0;if((t[(t[s+16>>2]|0)+236>>2]|0)>=(t[(t[c+16>>2]|0)+236>>2]|0)){r=5;break e}if(LQ(e,s,c)|0)continue;if(d){r=QQ(s,c)|0;n=QQ(c,s)|0}else{r=0;n=0}if((t[f>>2]|0)>0){r=(DQ(s,c)|0)+r|0;n=(DQ(c,s)|0)+n|0}if((r|0)>(n|0))break;if((r|0)==(n|0)&(h&(r|0)>0)){r=n;break}}WQ(s,c);l=r-n+l|0;n=t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0;i[n+(A<<6)+49>>0]=0;f=t[k>>2]|0;r=t[f+196>>2]|0;i[r+(A<<6)+48>>0]=1;if((a[f+236>>1]|0)<(A|0)){i[n+(w<<6)+49>>0]=0;i[r+(w<<6)+48>>0]=1}if((a[f+238>>1]|0)<=(A|0)){n=b;continue}i[n+(v<<6)+49>>0]=0;i[r+(v<<6)+48>>0]=1;n=b}if((r|0)==5)ge(86263,85781,770,86297);else if((r|0)==17)return l|0;return 0}function FQ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,f=0.0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;w=t[46739]|0;k=e+16|0;e=t[(t[k>>2]|0)+196>>2]|0;d=t[e+(A<<6)+4>>2]|0;b=(r|0)>(A|0);h=w+4|0;u=0;while(1){r=t[e+(A<<6)>>2]|0;if((u|0)>=(r|0)){e=0;l=0;break}o=(t[d+(u<<2)>>2]|0)+16|0;e=t[o>>2]|0;e:do{if(b){s=t[e+180>>2]|0;e=0;l=0;while(1){r=t[s+(l<<2)>>2]|0;if(!r)break e;i=t[r+16>>2]|0;if((a[i+154>>1]|0)>0){t[w+(e<<2)>>2]=t[(t[(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|n[i+88>>0];e=e+1|0}l=l+1|0}}else{s=t[e+172>>2]|0;l=0;e=0;while(1){r=t[s+(l<<2)>>2]|0;if(!r)break e;i=t[r+16>>2]|0;if((a[i+154>>1]|0)>0){t[w+(e<<2)>>2]=t[(t[(t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|n[i+48>>0];e=e+1|0}l=l+1|0}}}while(0);e:do{switch(e|0){case 0:{f=-1.0;break}case 1:{f=+(t[w>>2]|0);break}case 2:{f=+(((t[h>>2]|0)+(t[w>>2]|0)|0)/2|0|0);break}default:{_4(w,e,4,60);r=(e|0)/2|0;if(e&1|0){f=+(t[w+(r<<2)>>2]|0);break e}l=t[w+(r<<2)>>2]|0;i=(t[w+(e+-1<<2)>>2]|0)-l|0;e=t[w+(r+-1<<2)>>2]|0;r=e-(t[w>>2]|0)|0;if((r|0)==(i|0)){f=+((e+l|0)/2|0|0);break e}else{f=+(((P(r,l)|0)+(P(e,i)|0)|0)/(r+i|0)|0|0);break e}}}}while(0);c[(t[o>>2]|0)+240>>3]=f;u=u+1|0;e=t[(t[k>>2]|0)+196>>2]|0}while(1){if((l|0)>=(r|0))break;i=t[d+(l<<2)>>2]|0;w=t[i+16>>2]|0;if((t[w+184>>2]|0)==0?(t[w+176>>2]|0)==0:0){e=(VQ(i)|0|e&255)&255;r=t[(t[(t[k>>2]|0)+196>>2]|0)+(A<<6)>>2]|0}l=l+1|0}return e|0}function MQ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0.0,b=0,h=0,w=0,k=0,d=0,v=0;h=t[(t[e+16>>2]|0)+196>>2]|0;v=t[h+(A<<6)+4>>2]|0;h=t[h+(A<<6)>>2]|0;k=(r|0)!=0;w=(a|r|0)==0;a=0;r=h;h=v+(h<<2)|0;while(1){b=r+-1|0;if((r|0)>0)r=v;else break;e:while(1){A:while(1){if(r>>>0>=h>>>0)break e;while(1){if(r>>>0>=h>>>0)break e;o=t[r>>2]|0;u=+c[(t[o+16>>2]|0)+240>>3];if(!(u<0.0))break;r=r+4|0}s=0;while(1){n=s<<24>>24==0;while(1){r=r+4|0;if(r>>>0>=h>>>0)break e;if(n){n=11;break}f=t[r>>2]|0;if(!(t[(t[f+16>>2]|0)+212>>2]|0)){n=13;break}}if((n|0)==11){f=t[r>>2]|0;l=f}else if((n|0)==13)l=f;if(LQ(e,o,l)|0)continue A;n=t[f+16>>2]|0;if(+c[n+240>>3]>=0.0)break;s=(t[n+212>>2]|0)==0?s:1}n=~~u;s=~~+c[(t[f+16>>2]|0)+240>>3];if((n|0)>(s|0)|k&(n|0)==(s|0))break}WQ(o,l);a=a+1|0}r=b;h=w?h+-4|0:h}if(a|0?(d=t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0,i[d+(A<<6)+49>>0]=0,(A|0)>0):0)i[d+(A+-1<<6)+49>>0]=0;return}function VQ(e){e=e|0;var A=0.0,r=0,i=0,a=0,n=0;n=t[e+16>>2]|0;if((t[n+200>>2]|0)>0){a=t[n+196>>2]|0;e=t[a>>2]|0;e=t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;r=1;while(1){i=t[a+(r<<2)>>2]|0;if(!i)break;i=t[((t[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0;e=(t[(t[i+16>>2]|0)+236>>2]|0)>(t[(t[e+16>>2]|0)+236>>2]|0)?i:e;r=r+1|0}A=+c[(t[e+16>>2]|0)+240>>3];if(!(A>=0.0))e=1;else{c[n+240>>3]=A+1.0;e=0}}else if((t[n+192>>2]|0)>0){i=t[n+188>>2]|0;r=t[i>>2]|0;e=1;r=t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0;while(1){a=t[i+(e<<2)>>2]|0;if(!a)break;a=t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0;e=e+1|0;r=(t[(t[a+16>>2]|0)+236>>2]|0)<(t[(t[r+16>>2]|0)+236>>2]|0)?a:r}A=+c[(t[r+16>>2]|0)+240>>3];if(A>0.0){c[n+240>>3]=A+-1.0;e=0}else e=1}else e=1;return e|0}function NQ(e,A){e=e|0;A=A|0;return(t[(t[(t[e>>2]|0)+16>>2]|0)+236>>2]|0)-(t[(t[(t[A>>2]|0)+16>>2]|0)+236>>2]|0)|0}function RQ(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+96|0;b=w+64|0;u=w+48|0;f=w+24|0;i=w;s=A+16|0;c=t[(t[s>>2]|0)+232>>2]|0;o=e+16|0;r=t[(t[o>>2]|0)+196>>2]|0;l=t[r+(c<<6)>>2]|0;do{if((t[r+(c<<6)+8>>2]|0)>=1){t[(t[r+(c<<6)+4>>2]|0)+(l<<2)>>2]=A;t[(t[s>>2]|0)+236>>2]=l;e=t[o>>2]|0;i=t[e+196>>2]|0;r=i+(c<<6)|0;n=t[r>>2]|0;t[r>>2]=n+1;if((n|0)>=(t[i+(c<<6)+8>>2]|0))ge(86377,85781,1346,86413);n=t[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(c<<6)+8>>2]|0;if((l|0)>(n|0)){o=Mk(A)|0;u=t[(t[s>>2]|0)+236>>2]|0;b=t[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(c<<6)+8>>2]|0;t[f>>2]=1359;t[f+4>>2]=o;t[f+8>>2]=u;t[f+12>>2]=c;t[f+16>>2]=b;nw(1,86429,f)|0;break}r=a[e+236>>1]|0;e=a[e+238>>1]|0;if((c|0)<(r|0)|(c|0)>(e<<16>>16|0)){t[u>>2]=1364;t[u+4>>2]=c;t[u+8>>2]=r;t[u+12>>2]=e<<16>>16;nw(1,86502,u)|0;break}if(((t[i+(c<<6)+4>>2]|0)+(l<<2)|0)>>>0>((t[i+(c<<6)+12>>2]|0)+(n<<2)|0)>>>0){l=Mk(A)|0;u=t[(t[o>>2]|0)+196>>2]|0;o=(t[u+(c<<6)+4>>2]|0)+(t[(t[s>>2]|0)+236>>2]<<2)|0;u=(t[u+(c<<6)+12>>2]|0)+(t[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(c<<6)+8>>2]<<2)|0;t[b>>2]=1370;t[b+4>>2]=c;t[b+8>>2]=l;t[b+12>>2]=o;t[b+16>>2]=c;t[b+20>>2]=c;t[b+24>>2]=u;nw(1,86563,b)|0}}else{u=Mk(e)|0;b=Mk(A)|0;t[i>>2]=1339;t[i+4>>2]=u;t[i+8>>2]=b;t[i+12>>2]=c;t[i+16>>2]=l;nw(1,86322,i)|0}}while(0);h=w;return}function xQ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;f=A+16|0;e:do{if(!r){n=0;while(1){A=t[f>>2]|0;if((n|0)>=(t[A+184>>2]|0))break e;A=t[(t[A+180>>2]|0)+(n<<2)>>2]|0;r=A+-48|0;a=(t[(t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)+16>>2]|0)+157|0;if(!(i[a>>0]|0)){i[a>>0]=1;ux(e,t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)}n=n+1|0}}else{n=0;while(1){A=t[f>>2]|0;if((n|0)>=(t[A+176>>2]|0))break e;A=t[(t[A+172>>2]|0)+(n<<2)>>2]|0;r=A+48|0;a=(t[(t[((t[A>>2]&3|0)==3?A:r)+40>>2]|0)+16>>2]|0)+157|0;if(!(i[a>>0]|0)){i[a>>0]=1;ux(e,t[((t[A>>2]&3|0)==3?A:r)+40>>2]|0)}n=n+1|0}}}while(0);return}function JQ(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+16|0;m=p;n=e+16|0;r=t[(t[n>>2]|0)+196>>2]|0;v=t[r+(A<<6)+4>>2]|0;g=A+1|0;e=t[(t[(t[(t[46741]|0)+16>>2]|0)+196>>2]|0)+(g<<6)>>2]|0;if((t[46745]|0)>(e|0))k=t[46746]|0;else{e=e+1|0;t[46745]=e;r=t[46746]|0;if(!r)e=$F(e<<2)|0;else e=AM(r,e<<2)|0;t[46746]=e;r=t[(t[n>>2]|0)+196>>2]|0;k=e}d=r+(g<<6)|0;e=0;while(1){if((e|0)>=(t[d>>2]|0))break;t[k+(e<<2)>>2]=0;e=e+1|0}w=r+(A<<6)|0;b=0;f=0;e=0;s=k;while(1){c=t[w>>2]|0;if((b|0)>=(c|0))break;u=t[(t[(t[v+(b<<2)>>2]|0)+16>>2]|0)+180>>2]|0;e:do{if((f|0)>0){o=0;while(1){n=t[u+(o<<2)>>2]|0;if(!n)break e;c=n+16|0;l=t[(t[(t[((t[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;while(1){n=l+1|0;if((l|0)>=(f|0))break;l=n;e=(P(t[s+(n<<2)>>2]|0,a[(t[c>>2]|0)+154>>1]|0)|0)+e|0}o=o+1|0}}}while(0);l=0;while(1){n=t[u+(l<<2)>>2]|0;if(!n)break;s=t[(t[(t[((t[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;o=k+(s<<2)|0;t[o>>2]=(t[o>>2]|0)+(a[(t[n+16>>2]|0)+154>>1]|0);f=(s|0)>(f|0)?s:f;l=l+1|0;s=k}b=b+1|0}l=r+(A<<6)+4|0;f=0;while(1){if((f|0)>=(c|0))break;n=t[(t[(t[l>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;if(i[n+145>>0]|0){A=n+180|0;t[m>>2]=t[A>>2];t[m+4>>2]=t[A+4>>2];e=(HQ(m,1)|0)+e|0}f=f+1|0}l=t[d>>2]|0;f=r+(g<<6)+4|0;n=0;while(1){if((n|0)>=(l|0))break;r=t[(t[(t[f>>2]|0)+(n<<2)>>2]|0)+16>>2]|0;if(i[r+145>>0]|0){g=r+172|0;t[m>>2]=t[g>>2];t[m+4>>2]=t[g+4>>2];e=(HQ(m,-1)|0)+e|0}n=n+1|0}h=p;return e|0}function HQ(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;b=(A|0)<1;o=t[e>>2]|0;A=0;e=0;e:while(1){u=t[o+(A<<2)>>2]|0;if(!u)break;A=A+1|0;if(b){l=u+48|0;s=u+16|0;f=A;while(1){r=t[o+(f<<2)>>2]|0;if(!r)continue e;i=t[r+16>>2]|0;n=t[s>>2]|0;if((+c[i+56>>3]-+c[n+56>>3])*+((t[(t[(t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(t[(t[(t[((t[u>>2]&3|0)==3?u:l)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)e=(P(a[i+154>>1]|0,a[n+154>>1]|0)|0)+e|0;f=f+1|0}}else{l=u+-48|0;s=u+16|0;f=A;while(1){r=t[o+(f<<2)>>2]|0;if(!r)continue e;i=t[r+16>>2]|0;n=t[s>>2]|0;if((+c[i+16>>3]-+c[n+16>>3])*+((t[(t[(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(t[(t[(t[((t[u>>2]&3|0)==2?u:l)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)e=(P(a[i+154>>1]|0,a[n+154>>1]|0)|0)+e|0;f=f+1|0}}}return e|0}function PQ(e){e=e|0;var A=0.0,r=0.0;t[46744]=8;t[47136]=24;c[23215]=.995;e=Hw(e,86685)|0;if(e|0?(A=+$3(e),A>0.0):0){r=A*+(t[46744]|0);t[46744]=~~(r>1.0?r:1.0);A=A*+(t[47136]|0);t[47136]=~~(A>1.0?A:1.0)}return}function XQ(e){e=e|0;var A=0,r=0;r=(a[(t[e+16>>2]|0)+238>>1]|0)+2|0;A=KF(r<<2)|0;jQ(e,A,r,0)|0;G2(A);return}function SQ(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0;f=e+16|0;l=KF((a[(t[f>>2]|0)+238>>1]<<2)+8|0)|0;n=sd(e)|0;while(1){if(!n)break;i=l+(t[(t[n+16>>2]|0)+232>>2]<<2)|0;t[i>>2]=(t[i>>2]|0)+1;i=Ow(e,n)|0;while(1){if(!i)break;s=t[i>>2]&3;A=t[(t[(t[((s|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;s=t[(t[(t[((s|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;c=(A|0)>(s|0);r=c?A:s;A=c?s:A;while(1){A=A+1|0;if((A|0)>=(r|0))break;c=l+(A<<2)|0;t[c>>2]=(t[c>>2]|0)+1}i=qw(e,i)|0}n=cd(e,n)|0}i=KF((a[(t[f>>2]|0)+238>>1]<<6)+128|0)|0;r=t[f>>2]|0;t[r+196>>2]=i;A=a[r+236>>1]|0;while(1){if((A|0)>(a[r+238>>1]|0))break;s=l+(A<<2)|0;r=t[s>>2]|0;t[i+(A<<6)>>2]=r;t[i+(A<<6)+8>>2]=r;s=KF((t[s>>2]<<2)+4|0)|0;r=t[f>>2]|0;c=t[r+196>>2]|0;t[c+(A<<6)+4>>2]=s;t[c+(A<<6)+12>>2]=s;A=A+1|0;i=c}G2(l);return}function jQ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var n=0,f=0,l=0,s=0,o=0,u=0;u=e+16|0;f=1;while(1){n=t[u>>2]|0;if((f|0)>(t[n+180>>2]|0))break;o=jQ(t[(t[n+184>>2]|0)+(f<<2)>>2]|0,A,r,i)|0;f=f+1|0;i=o}e:do{if((mG(e)|0)!=(e|0)){z6(A|0,0,r<<2|0)|0;n=sd(e)|0;while(1){if(!n)break;s=n+16|0;t[A+(t[(t[s>>2]|0)+232>>2]<<2)>>2]=1;f=Ow(e,n)|0;while(1){if(!f)break;o=f+-48|0;l=t[(t[s>>2]|0)+232>>2]|0;while(1){r=l+1|0;if((l|0)>=(t[(t[(t[((t[f>>2]&3|0)==2?f:o)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;t[A+(r<<2)>>2]=1;l=r}f=qw(e,f)|0}n=cd(e,n)|0}n=t[u>>2]|0;f=a[n+236>>1]|0;while(1){if((f|0)>(a[n+238>>1]|0))break e;if(!(t[A+(f<<2)>>2]|0)){if(!i)i=Rv(mG(e)|0,86675,1)|0;n=gd(i,0,1)|0;Sd(n,137447,304,1)|0;o=n+16|0;l=t[o>>2]|0;t[l+232>>2]=f;c[l+96>>3]=.5;c[l+88>>3]=.5;c[l+80>>3]=1.0;t[l+216>>2]=1;t[l+176>>2]=0;l=KF(20)|0;s=t[o>>2]|0;t[s+172>>2]=l;t[s+184>>2]=0;s=KF(20)|0;t[(t[o>>2]|0)+180>>2]=s;hd(e,n,1)|0;n=t[u>>2]|0}f=f+1|0}}}while(0);return i|0}function UQ(e){e=e|0;var A=0,r=0;sQ(e);A=e+16|0;e=1;while(1){r=t[A>>2]|0;if((e|0)>(t[r+180>>2]|0))break;UQ(t[(t[r+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}return}function TQ(e){e=e|0;var A=0,r=0;A=t[e>>2]&3;r=OQ(t[((A|0)==3?e:e+48|0)+40>>2]|0)|0;A=t[17308+(r*12|0)+((OQ(t[((A|0)==2?e:e+-48|0)+40>>2]|0)|0)<<2)>>2]|0;e=(t[e+16>>2]|0)+156|0;t[e>>2]=P(t[e>>2]|0,A)|0;return}function OQ(e){e=e|0;e=t[e+16>>2]|0;if((i[e+156>>0]|0)==1)e=2;else e=(i[e+160>>0]|0)<2&1;return e|0}function _Q(e,A){e=e|0;A=A|0;if(t[(t[e+16>>2]|0)+192>>2]|0){BW(e);qQ(e);if(i[194954]|0)VW(e);KQ(e);if(AY(e)|0)qQ(e);$Q(e);if(VM(e,2,eD(e)|0)|0?(AD(e),VM(e,2,eD(e)|0)|0):0)ge(86693,86721,134,86732);rD(e);iD(e,A);aD(e)}return}function qQ(e){e=e|0;var A=0,r=0,n=0,f=0,l=0.0,s=0.0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0.0;p=e+16|0;A=t[p>>2]|0;E=t[A+196>>2]|0;g=a[A+236>>1]|0;while(1){if((g|0)>(a[A+238>>1]|0))break;b=E+(g<<6)|0;h=E+(g<<6)+4|0;w=E+(g<<6)+40|0;k=E+(g<<6)+24|0;d=E+(g<<6)+32|0;v=E+(g<<6)+16|0;u=0;while(1){if((u|0)>=(t[b>>2]|0))break;o=(t[(t[h>>2]|0)+(u<<2)>>2]|0)+16|0;A=t[o>>2]|0;l=+c[A+80>>3]*.5;f=t[A+204>>2]|0;e:do{if(f){n=0;while(1){r=t[f+(n<<2)>>2]|0;if(!r)break e;B=t[r>>2]&3;if((t[((B|0)==3?r:r+48|0)+40>>2]|0)==(t[((B|0)==2?r:r+-48|0)+40>>2]|0)?(m=t[(t[r+16>>2]|0)+96>>2]|0,(m|0)!=0):0){s=+c[m+32>>3]*.5;l=l>s?l:s}n=n+1|0}}}while(0);if(+c[w>>3]>3]=l;c[w>>3]=l}if(+c[d>>3]>3]=l;c[d>>3]=l}r=t[A+212>>2]|0;if(r|0){if((r|0)==(e|0))n=0;else{n=hx(r,t[47144]|0,8,0)|0;A=t[o>>2]|0}f=t[A+232>>2]|0;r=t[r+16>>2]|0;A=r+128|0;l=l+ +(n|0);if((f|0)==(a[r+236>>1]|0)){s=+c[A>>3];c[A>>3]=s>l?s:l}A=r+120|0;if((f|0)==(a[r+238>>1]|0)){s=+c[A>>3];c[A>>3]=s>l?s:l}}u=u+1|0}g=g+1|0;A=t[p>>2]|0}u=DD(e)|0;n=t[p>>2]|0;A=a[n+238>>1]|0;c[(t[(t[t[E+(A<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+c[E+(A<<6)+16>>3];r=a[n+236>>1]|0;f=n+252|0;s=0.0;while(1){o=A+-1|0;if((A|0)<=(r|0))break;y=+c[E+(o<<6)+32>>3]+ +c[E+(A<<6)+40>>3]+ +(t[f>>2]|0);l=+c[E+(A<<6)+24>>3]+8.0+ +c[E+(o<<6)+16>>3];l=y>l?y:l;if((t[E+(o<<6)>>2]|0)>0)c[(t[(t[t[E+(o<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+c[(t[(t[t[E+(A<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+l;s=s>l?s:l;A=o}e:do{if((u|0)!=0?(t[n+116>>2]&1|0)!=0:0){zD(e,0);n=t[p>>2]|0;if(i[n+276>>0]|0){A=a[n+238>>1]|0;r=a[n+236>>1]|0;l=+c[(t[(t[t[E+(A<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];s=0.0;while(1){f=A+-1|0;if((A|0)<=(r|0))break e;C=+c[(t[(t[t[E+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];y=C-l;l=C;s=s>y?s:y;A=f}}}}while(0);e:do{if(i[n+276>>0]|0){f=a[n+236>>1]|0;r=a[n+238>>1]|0;while(1){A=r+-1|0;if((r|0)<=(f|0))break e;if((t[E+(A<<6)>>2]|0)<=0){r=A;continue}c[(t[(t[t[E+(A<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+c[(t[(t[t[E+(r<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+s;r=A}}}while(0);A=n+192|0;while(1){A=t[A>>2]|0;if(!A)break;A=t[A+16>>2]|0;c[A+24>>3]=+c[(t[(t[t[E+(t[A+232>>2]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];A=A+164|0}return}function KQ(e){e=e|0;var A=0,r=0,i=0;ZD(e);A=(t[e+16>>2]|0)+192|0;while(1){A=t[A>>2]|0;if(!A)break;i=A+16|0;A=t[i>>2]|0;r=t[A+224>>2]|0;if(r){GD(e,r);A=t[i>>2]|0}r=t[A+228>>2]|0;if(!r)r=A;else{GD(e,r);r=t[i>>2]|0}i=t[r+204>>2]|0;if(i|0){A=0;while(1)if(!(t[i+(A<<2)>>2]|0))break;else A=A+1|0}A=r+164|0}return}function $Q(e){e=e|0;bD(e);hD(e);wD(e);kD(e);dD(e);return}function eD(e){e=e|0;var A=0,r=0.0;A=Hw(e,86921)|0;if(!A)e=2147483647;else{r=+$3(A);e=~~(r*+(gk(e)|0))}return e|0}function AD(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0;d=e+16|0;A=t[d>>2]|0;k=a[A+236>>1]|0;while(1){w=a[A+238>>1]|0;if((k|0)>(w|0)){v=19;break}b=t[A+196>>2]|0;h=b+(k<<6)|0;u=t[h>>2]|0;b=b+(k<<6)+4|0;o=0;r=0;e:while(1){if((o|0)>=(u|0)){v=14;break}r=t[(t[b>>2]|0)+(o<<2)>>2]|0;f=t[r+16>>2]|0;l=t[f+256>>2]|0;A:do{if(l|0){n=0;while(1){s=t[l+(n<<2)>>2]|0;if(!s)break A;c=t[s>>2]&3;if((t[(t[(t[((c|0)==2?s:s+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(k|0))break e;if((t[(t[(t[((c|0)==3?s:s+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(k|0))break e;else n=n+1|0}}}while(0);f=t[f+248>>2]|0;A:do{if(f|0){n=0;while(1){l=t[f+(n<<2)>>2]|0;if(!l)break A;s=t[l>>2]&3;if((t[(t[(t[((s|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(k|0))break e;if((t[(t[(t[((s|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(k|0))break e;else n=n+1|0}}}while(0);o=o+1|0}if((v|0)==14){v=0;if(r){r=t[t[b>>2]>>2]|0;A=t[t[h+(((k|0)<(w|0)?1:-1)<<6)+4>>2]>>2]|0;if(!A){v=16;break}h=zL(e)|0;w=h+16|0;i[(t[w>>2]|0)+156>>0]=2;oD(h,r,0.0,0)|0;oD(h,A,0.0,0)|0;t[(t[w>>2]|0)+232>>2]=t[(t[((t[(t[r+16>>2]|0)+232>>2]|0)<(t[(t[A+16>>2]|0)+232>>2]|0)?r:A)+16>>2]|0)+232>>2];A=t[d>>2]|0}}k=k+1|0}if((v|0)==16)ge(86829,86721,111,86832);else if((v|0)==19)return}function rD(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0;e=t[e+16>>2]|0;f=t[e+196>>2]|0;r=a[e+238>>1]|0;e=a[e+236>>1]|0;while(1){if((e|0)>(r|0))break;i=t[f+(e<<6)>>2]|0;n=f+(e<<6)+4|0;A=0;while(1){if((A|0)>=(i|0))break;s=t[(t[(t[n>>2]|0)+(A<<2)>>2]|0)+16>>2]|0;l=s+232|0;c[s+16>>3]=+(t[l>>2]|0);t[l>>2]=e;A=A+1|0}e=e+1|0}return}function iD(e,A){e=e|0;A=A|0;var r=0,i=0.0,n=0,f=0.0,l=0,s=0,o=0.0,u=0,b=0,h=0,w=0;tD(e,e);n=e+16|0;s=t[n>>2]|0;e:do{if((a[s+238>>1]|0)>0?(l=t[s+8>>2]|0,r=t[l+84>>2]|0,r|0):0){h=~~(+c[s+32>>3]-+c[s+16>>3]);u=~~(+c[s+40>>3]-+c[s+24>>3]);w=(t[s+116>>2]&1|0)==0;b=w?u:h;u=w?h:u;if((r|0)==4){r=nD(e)|0;s=t[n>>2]|0;l=t[s+8>>2]|0}else r=(r|0)==2&1;A:do{if(!(r<<24>>24)){switch(t[l+84>>2]|0){case 5:{i=+c[l+64>>3];if(i<=0.0)break e;f=i/+c[s+32>>3];o=+c[l+72>>3]/+c[s+40>>3];i=f1.0&o>1.0){o=i;break A}else break e}case 1:break;default:break e}f=+c[l+16>>3];i=+(b|0)/+(u|0);if(i>3];if(i<=0.0)break e;f=i/+(u|0);i=+c[l+72>>3]/+(b|0);if(f<1.0|i<1.0)if(f>2]&1|0)==0;f=r?i:o;i=r?o:i;r=s+192|0;while(1){r=t[r>>2]|0;if(!r)break;r=t[r+16>>2]|0;w=r+16|0;o=+c[w>>3]*i;c[w>>3]=+(~~(o+(o>=0.0?.5:-.5))|0);w=r+24|0;o=+c[w>>3]*f;c[w>>3]=+(~~(o+(o>=0.0?.5:-.5))|0);r=r+164|0}fD(e,i,f)}}while(0);if(A|0)lD(e,A);return}function aD(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=e+16|0;e=(t[f>>2]|0)+192|0;while(1){e=t[e>>2]|0;if(!e)break;n=e+16|0;A=0;while(1){e=t[n>>2]|0;a=t[e+180>>2]|0;r=t[a+(A<<2)>>2]|0;if(!r)break;G2(t[r+16>>2]|0);G2(r);A=A+1|0}if(a){G2(a);e=t[n>>2]|0}A=t[e+172>>2]|0;if(A){G2(A);e=t[n>>2]|0}a=e+256|0;r=t[a+4>>2]|0;e=e+180|0;t[e>>2]=t[a>>2];t[e+4>>2]=r;e=t[n>>2]|0;r=e+248|0;a=t[r+4>>2]|0;e=e+172|0;t[e>>2]=t[r>>2];t[e+4>>2]=a;e=(t[n>>2]|0)+164|0}e=0;A=t[(t[f>>2]|0)+192>>2]|0;e:while(1){n=(e|0)==0;a=e+16|0;e=A;while(1){if(!e)break e;r=t[e+16>>2]|0;A=t[r+164>>2]|0;if((i[r+156>>0]|0)!=2)continue e;if(n)t[(t[f>>2]|0)+192>>2]=A;else t[(t[a>>2]|0)+164>>2]=A;G2(r);G2(e);e=A}}t[(t[(t[(t[f>>2]|0)+192>>2]|0)+16>>2]|0)+168>>2]=0;return}function tD(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;i=e+16|0;r=1;while(1){a=t[i>>2]|0;if((r|0)>(t[a+180>>2]|0))break;tD(t[(t[a+184>>2]|0)+(r<<2)>>2]|0,A);r=r+1|0}cD(e,A);return}function nD(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0.0,s=0.0,o=0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0;v=h;h=h+80|0;i=v+64|0;r=v+48|0;a=v+16|0;o=v;d=v+32|0;e=e+16|0;A=t[(t[e>>2]|0)+8>>2]|0;g=A+48|0;t[a>>2]=t[g>>2];t[a+4>>2]=t[g+4>>2];t[a+8>>2]=t[g+8>>2];t[a+12>>2]=t[g+12>>2];if((!(+c[a>>3]<.001)?(n=a+8|0,!(+c[n>>3]<.001)):0)?(f=A+32|0,t[o>>2]=t[f>>2],t[o+4>>2]=t[f+4>>2],t[o+8>>2]=t[f+8>>2],t[o+12>>2]=t[f+12>>2],t[r>>2]=t[a>>2],t[r+4>>2]=t[a+4>>2],t[r+8>>2]=t[a+8>>2],t[r+12>>2]=t[a+12>>2],t[i>>2]=t[f>>2],t[i+4>>2]=t[f+4>>2],t[i+8>>2]=t[f+8>>2],t[i+12>>2]=t[f+12>>2],sD(d,r,i),t[a>>2]=t[d>>2],t[a+4>>2]=t[d+4>>2],t[a+8>>2]=t[d+8>>2],t[a+12>>2]=t[d+12>>2],t[r>>2]=t[d>>2],t[r+4>>2]=t[d+4>>2],t[r+8>>2]=t[d+8>>2],t[r+12>>2]=t[d+12>>2],t[i>>2]=t[o>>2],t[i+4>>2]=t[o+4>>2],t[i+8>>2]=t[o+8>>2],t[i+12>>2]=t[o+12>>2],sD(a,r,i),f=t[e>>2]|0,l=+c[f+32>>3],s=+c[f+40>>3],u=+c[a>>3],b=u/l,w=+c[n>>3],k=w/s,!(b>=1.0&k>=1.0)):0){b=b.5?b:.5;k=+H(+(b*s/w))*w/s;w=+H(+(b*l/u))*u/l*l;e=t[f+8>>2]|0;c[e+64>>3]=w;c[e+72>>3]=k*s;e=1}else e=0;h=v;return e|0}function fD(e,A,r){e=e|0;A=+A;r=+r;var i=0,a=0;i=e+16|0;e=1;while(1){a=t[i>>2]|0;if((e|0)>(t[a+180>>2]|0))break;fD(t[(t[a+184>>2]|0)+(e<<2)>>2]|0,A,r);e=e+1|0}i=a+16|0;c[i>>3]=+c[i>>3]*A;i=a+24|0;c[i>>3]=+c[i>>3]*r;i=a+32|0;c[i>>3]=+c[i>>3]*A;a=a+40|0;c[a>>3]=+c[a>>3]*r;return}function lD(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0,f=0.0,l=0,s=0,o=0,u=0;o=h;h=h+32|0;l=o+24|0;n=o+16|0;a=o;u=t[e+16>>2]|0;i=+c[u+32>>3]-+c[u+16>>3];r=+c[u+40>>3]-+c[u+24>>3];f=i/r;if(0){u=t[15712]|0;c[a>>3]=f;c[a+8>>3]=i*.0001*r;a3(u,86745,a)|0;t[n>>2]=Vz(e)|0;a3(u,86770,n)|0}r=+c[A>>3];do{if(!(f>r*1.1)){e=A+24|0;if(!(f<=r*.8)){t[e>>2]=0;s=9;break}t[e>>2]=-1;if(0){G3(86780,34,1,t[15712]|0)|0;s=9}}else{t[A+24>>2]=~~(r*+((t[A+20>>2]|0)-(t[A+16>>2]|0)|0)/f);s=9}}while(0);if((s|0)==9?0:0){u=t[15712]|0;t[l>>2]=t[A+24>>2];a3(u,86815,l)|0}h=o;return}function sD(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[A+8>>3]-+c[r+8>>3];c[e>>3]=+c[A>>3]-+c[r>>3];c[e+8>>3]=i;return}function cD(e,A){e=e|0;A=A|0;var r=0,n=0.0,f=0.0,l=0,s=0,o=0,u=0.0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0.0;v=(mG(e)|0)==(e|0);p=e+16|0;E=t[p>>2]|0;e:do{if(v){r=a[E+236>>1]|0;e=a[E+238>>1]|0;k=e<<16>>16;d=E+196|0;v=E+196|0;w=r<<16>>16;f=-2147483647.0;n=2147483647.0;while(1){if((w|0)>(k|0))break;l=t[d>>2]|0;h=t[l+(w<<6)>>2]|0;if((h|0)!=0?(g=t[l+(w<<6)+4>>2]|0,m=t[g>>2]|0,(m|0)!=0):0){o=1;l=m;while(1){l=t[l+16>>2]|0;s=i[l+156>>0]|0;if(!((o|0)<(h|0)&s<<24>>24!=0))break;l=t[g+(o<<2)>>2]|0;o=o+1|0}if(!(s<<24>>24)){u=+c[l+16>>3]-+c[l+88>>3];b=n>2]|0)+(w<<6)+4>>2]|0;s=h+-2|0;l=h+-1|0;while(1){l=t[(t[o+(l<<2)>>2]|0)+16>>2]|0;if(!(i[l+156>>0]|0))break;else{l=s;s=s+-1|0}}B=+c[l+96>>3]+ +c[l+16>>3];f=f>B?f:B;n=b?n:u}}w=w+1|0}s=t[E+180>>2]|0;o=E+184|0;l=1;while(1){if((l|0)>(s|0))break e;m=t[(t[(t[o>>2]|0)+(l<<2)>>2]|0)+16>>2]|0;B=+c[m+16>>3]+-8.0;u=+c[m+32>>3]+8.0;l=l+1|0;f=f>u?f:u;n=n>2]|0)+16>>2]|0)+232>>2]|0);n=+(t[(t[(t[E+256>>2]|0)+16>>2]|0)+232>>2]|0);r=a[E+236>>1]|0;e=a[E+238>>1]|0}}while(0);A=t[(t[A+16>>2]|0)+196>>2]|0;u=+c[(t[(t[t[A+(e<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+c[E+120>>3];B=+c[E+128>>3]+ +c[(t[(t[t[A+(r<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];c[E+16>>3]=n;c[E+24>>3]=u;A=t[p>>2]|0;c[A+32>>3]=f;c[A+40>>3]=B;return}function oD(e,A,r,i){e=e|0;A=A|0;r=+r;i=i|0;var n=0,f=0,l=0,s=0;l=KF(96)|0;s=l+48|0;t[s>>2]=t[s>>2]|3;t[l>>2]=t[l>>2]&-4|2;n=KF(176)|0;f=l+16|0;t[f>>2]=n;t[((t[l>>2]&3|0)==3?l:s)+40>>2]=e;t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]=A;if(r>65535.0){uD(r);r=65535.0;n=t[f>>2]|0}a[n+170>>1]=~~(r+(r>=0.0?.5:-.5));t[n+156>>2]=i;mL(l)|0;return l|0}function uD(e){e=+e;var A=0,r=0;A=h;h=h+16|0;r=A;c[r>>3]=e;t[r+8>>2]=65535;nw(1,86845,r)|0;h=A;return}function bD(e){e=e|0;var A=0,r=0,i=0,a=0;e=(t[e+16>>2]|0)+192|0;while(1){e=t[e>>2]|0;if(!e)break;a=e+16|0;i=t[a>>2]|0;e=i+172|0;r=t[e+4>>2]|0;i=i+248|0;t[i>>2]=t[e>>2];t[i+4>>2]=r;i=t[a>>2]|0;r=i+180|0;e=t[r+4>>2]|0;i=i+256|0;t[i>>2]=t[r>>2];t[i+4>>2]=e;i=t[a>>2]|0;e=t[i+180>>2]|0;r=0;while(1)if(!(t[e+(r<<2)>>2]|0))break;else r=r+1|0;A=t[i+172>>2]|0;e=0;while(1)if(!(t[A+(e<<2)>>2]|0))break;else e=e+1|0;t[i+176>>2]=0;e=KF((e+r<<2)+16|0)|0;i=t[a>>2]|0;t[i+172>>2]=e;t[i+184>>2]=0;i=KF(16)|0;e=t[a>>2]|0;t[e+180>>2]=i;e=e+164|0}return}function hD(e){e=e|0;var A=0,r=0,n=0.0,l=0,s=0,o=0,u=0,b=0,w=0.0,k=0,d=0,v=0,g=0.0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0.0;C=h;h=h+16|0;E=C;B=e+16|0;m=t[B>>2]|0;y=t[m+196>>2]|0;e=(i[(t[(t[e+60>>2]|0)+16>>2]|0)+113>>0]&1)!=0;p=t[m+248>>2]|0;t[E>>2]=p;t[E+4>>2]=e?5:p;p=a[m+236>>1]|0;e=m;while(1){if((p|0)>(a[e+238>>1]|0))break;d=y+(p<<6)+4|0;t[(t[(t[t[d>>2]>>2]|0)+16>>2]|0)+232>>2]=0;v=y+(p<<6)|0;g=+(t[E+((p&1)<<2)>>2]|0);w=0.0;s=0;e:while(1){if((s|0)>=(t[v>>2]|0))break;A=t[d>>2]|0;o=t[A+(s<<2)>>2]|0;m=o+16|0;e=t[m>>2]|0;n=+c[e+96>>3];c[e+240>>3]=n;if((t[e+208>>2]|0)>0){l=0;A=0;while(1){r=t[(t[e+204>>2]|0)+(l<<2)>>2]|0;if(!r)break;k=t[r>>2]&3;if((t[((k|0)==3?r:r+48|0)+40>>2]|0)==(t[((k|0)==2?r:r+-48|0)+40>>2]|0)){A=(ZR(r)|0)+A|0;e=t[m>>2]|0}l=l+1|0}k=e+96|0;n=+c[k>>3]+ +(A|0);c[k>>3]=n;A=t[d>>2]|0}k=s+1|0;A=t[A+(k<<2)>>2]|0;if(A){b=A+16|0;n=n+g+ +c[(t[b>>2]|0)+88>>3];oD(o,A,n,0)|0;e=~~(n+w);t[(t[b>>2]|0)+232>>2]=e;w=+(e|0);e=t[m>>2]|0}A=t[e+112>>2]|0;if(A){l=t[e+256>>2]|0;s=t[l>>2]|0;l=t[l+4>>2]|0;e=(t[(t[(t[((t[s>>2]&3|0)==2?s:s+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)>(t[(t[(t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0);r=e?l:s;l=e?s:l;s=A+16|0;e=t[s>>2]|0;n=+((P(t[(t[B>>2]|0)+248>>2]|0,f[e+170>>1]|0)|0)/2|0|0);b=t[r>>2]&3;A=t[((b|0)==2?r:r+-48|0)+40>>2]|0;r=t[((b|0)==3?r:r+48|0)+40>>2]|0;if(!(CD(r,A)|0))oD(A,r,+(~~(+c[(t[A+16>>2]|0)+96>>3]+n+ +c[(t[r+16>>2]|0)+88>>3])|0),t[e+156>>2]|0)|0;e=t[l>>2]&3;A=t[((e|0)==3?l:l+48|0)+40>>2]|0;e=t[((e|0)==2?l:l+-48|0)+40>>2]|0;if(!(CD(e,A)|0)){oD(A,e,+(~~(+c[(t[A+16>>2]|0)+96>>3]+n+ +c[(t[e+16>>2]|0)+88>>3])|0),t[(t[s>>2]|0)+156>>2]|0)|0;b=0}else b=0}else b=0;while(1){e=t[m>>2]|0;if((b|0)>=(t[e+192>>2]|0)){s=k;continue e}o=t[(t[e+188>>2]|0)+(b<<2)>>2]|0;s=t[o>>2]&3;r=t[((s|0)==3?o:o+48|0)+40>>2]|0;s=t[((s|0)==2?o:o+-48|0)+40>>2]|0;l=(t[(t[r+16>>2]|0)+236>>2]|0)<(t[(t[s+16>>2]|0)+236>>2]|0);A=l?r:s;r=l?s:r;n=+c[(t[r+16>>2]|0)+88>>3]+ +c[(t[A+16>>2]|0)+96>>3];s=o+16|0;l=~~(n+ +(P(t[(t[B>>2]|0)+248>>2]|0,f[(t[s>>2]|0)+170>>1]|0)|0));u=dL(A,r)|0;if(!u){e=t[s>>2]|0;if(!(t[e+96>>2]|0))oD(A,r,+(l|0),t[e+156>>2]|0)|0}else{I=+(l|0);e=t[s>>2]|0;Z=+c[e+136>>3];n=n+ +(t[(t[B>>2]|0)+248>>2]|0)+ +(~~(Z+(Z>=0.0?.5:-.5))|0);A=~~(n65535){uD(+(A|0));A=65535;e=t[s>>2]|0}s=t[u+16>>2]|0;l=s+170|0;r=f[l>>1]|0;a[l>>1]=(A|0)<(r|0)?r:A;s=s+156|0;t[s>>2]=t[(t[((t[s>>2]|0)>(t[e+156>>2]|0)?u:o)+16>>2]|0)+156>>2]}b=b+1|0}}p=p+1|0;e=t[B>>2]|0}h=C;return}function wD(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;A=(t[e+16>>2]|0)+192|0;while(1){A=t[A>>2]|0;if(!A)break;n=A+16|0;A=t[n>>2]|0;r=t[A+256>>2]|0;e:do{if(r){a=0;while(1){r=t[r+(a<<2)>>2]|0;if(!r)break e;b=zL(e)|0;A=b+16|0;i[(t[A>>2]|0)+156>>0]=2;o=r+16|0;s=t[o>>2]|0;f=~~(+c[s+56>>3]-+c[s+16>>3]);u=(f|0)>0;l=u?0:0-f|0;f=u?f:0;u=r+48|0;oD(b,t[((t[r>>2]&3|0)==3?r:u)+40>>2]|0,+(f+1|0),t[s+156>>2]|0)|0;s=r+-48|0;oD(b,t[((t[r>>2]&3|0)==2?r:s)+40>>2]|0,+(l+1|0),t[(t[o>>2]|0)+156>>2]|0)|0;o=t[r>>2]&3;f=(t[(t[(t[((o|0)==3?r:u)+40>>2]|0)+16>>2]|0)+232>>2]|0)-f|0;r=(t[(t[(t[((o|0)==2?r:s)+40>>2]|0)+16>>2]|0)+232>>2]|0)-l|0;t[(t[A>>2]|0)+232>>2]=((f|0)<(r|0)?f:r)+-1;A=t[n>>2]|0;a=a+1|0;r=t[A+256>>2]|0}}}while(0);A=A+164|0}return}function kD(e){e=e|0;if((t[(t[e+16>>2]|0)+180>>2]|0)>0){mD(e);pD(e);ED(e);BD(e)}return}function dD(e){e=e|0;var A=0.0,r=0.0,i=0,a=0;i=e+16|0;a=t[(t[i>>2]|0)+8>>2]|0;if((t[a+84>>2]|0)==3?(A=+c[a+64>>3],r=+c[a+72>>3],!(r*A<=1.0)):0){vD(e);a=t[i>>2]|0;r=(t[a+116>>2]&1|0)==0?A:r;oD(t[a+256>>2]|0,t[a+260>>2]|0,r<65535.0?r:65535.0,1e3)|0}return}function vD(e){e=e|0;var A=0,r=0,i=0.0,n=0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+16|0;o=u;r=hx(e,t[47144]|0,8,0)|0;gD(e);f=e+16|0;n=t[f>>2]|0;l=t[n+256>>2]|0;s=t[n+260>>2]|0;i=+(r|0);r=a[n+236>>1]|0;while(1){if((r|0)>(a[n+238>>1]|0))break;A=t[n+196>>2]|0;do{if(t[A+(r<<6)>>2]|0){A=t[t[A+(r<<6)+4>>2]>>2]|0;if(!A){t[o>>2]=Mk(e)|0;t[o+4>>2]=r;nw(1,86929,o)|0;break}else{oD(l,A,+c[(t[A+16>>2]|0)+88>>3]+i+ +c[n+96>>3],0)|0;n=t[f>>2]|0;A=t[n+196>>2]|0;A=t[(t[A+(r<<6)+4>>2]|0)+((t[A+(r<<6)>>2]|0)+-1<<2)>>2]|0;oD(A,s,+c[(t[A+16>>2]|0)+96>>3]+i+ +c[n+64>>3],0)|0;break}}}while(0);r=r+1|0;n=t[f>>2]|0}h=u;return}function gD(e){e=e|0;var A=0,r=0,a=0;A=e+16|0;if(!(t[(t[A>>2]|0)+256>>2]|0)){a=zL(mG(e)|0)|0;i[(t[a+16>>2]|0)+156>>0]=2;r=zL(mG(e)|0)|0;i[(t[r+16>>2]|0)+156>>0]=2;if((t[(t[A>>2]|0)+12>>2]|0?(mG(e)|0)!=(e|0):0)?(t[(t[(yd(e)|0)+16>>2]|0)+116>>2]&1|0)==0:0){e=t[A>>2]|0;oD(a,r,+(~~+c[e+48+((+c[e+48>>3]>+c[e+80>>3]?0:2)<<4)>>3]|0),0)|0}A=t[A>>2]|0;t[A+256>>2]=a;t[A+260>>2]=r}return}function mD(e){e=e|0;var A=0,r=0;do{if((mG(e)|0)!=(e|0)){vD(e);e=e+16|0;A=t[e>>2]|0;A=dL(t[A+256>>2]|0,t[A+260>>2]|0)|0;if(!A){r=t[e>>2]|0;oD(t[r+256>>2]|0,t[r+260>>2]|0,1.0,128)|0;break}else{r=(t[A+16>>2]|0)+156|0;t[r>>2]=(t[r>>2]|0)+128;break}}else e=e+16|0}while(0);A=1;while(1){r=t[e>>2]|0;if((A|0)>(t[r+180>>2]|0))break;mD(t[(t[r+184>>2]|0)+(A<<2)>>2]|0);A=A+1|0}return}function pD(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0,h=0;s=hx(e,t[47144]|0,8,0)|0;h=e+16|0;A=t[h>>2]|0;u=+(s|0);s=a[A+236>>1]|0;while(1){if((s|0)>(a[A+238>>1]|0)){r=1;break}A=t[A+196>>2]|0;e:do{if(t[A+(s<<6)>>2]|0?(o=t[t[A+(s<<6)+4>>2]>>2]|0,o|0):0){f=o+16|0;r=t[(t[f>>2]|0)+236>>2]|0;while(1){if((r|0)<=0)break;r=r+-1|0;l=t[(t[(t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0)+(s<<6)+4>>2]|0)+(r<<2)>>2]|0;n=l+16|0;A=t[n>>2]|0;if(!(i[A+156>>0]|0)){b=10;break}if(yD(e,l)|0){b=9;break}}if((b|0)==9){A=t[n>>2]|0;b=10}if((b|0)==10){b=0;oD(l,t[(t[h>>2]|0)+256>>2]|0,+c[A+96>>3]+u,0)|0}r=(t[(t[(t[h>>2]|0)+196>>2]|0)+(s<<6)>>2]|0)+(t[(t[f>>2]|0)+236>>2]|0)|0;while(1){if((r|0)>=(t[(t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0)+(s<<6)>>2]|0))break e;f=t[(t[(t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0)+(s<<6)+4>>2]|0)+(r<<2)>>2]|0;n=f+16|0;A=t[n>>2]|0;if(!(i[A+156>>0]|0))break;if(!(yD(e,f)|0))r=r+1|0;else{b=15;break}}if((b|0)==15){b=0;A=t[n>>2]|0}oD(t[(t[h>>2]|0)+260>>2]|0,f,+c[A+88>>3]+u,0)|0}}while(0);s=s+1|0;A=t[h>>2]|0}while(1){if((r|0)>(t[A+180>>2]|0))break;pD(t[(t[A+184>>2]|0)+(r<<2)>>2]|0);r=r+1|0;A=t[h>>2]|0}return}function ED(e){e=e|0;var A=0,r=0.0,i=0,a=0,n=0;i=hx(e,t[47144]|0,8,0)|0;gD(e);A=e+16|0;r=+(i|0);e=1;while(1){i=t[A>>2]|0;if((e|0)>(t[i+180>>2]|0))break;i=t[(t[i+184>>2]|0)+(e<<2)>>2]|0;gD(i);a=t[A>>2]|0;n=i+16|0;oD(t[a+256>>2]|0,t[(t[n>>2]|0)+256>>2]|0,+c[a+96>>3]+r,0)|0;a=t[A>>2]|0;oD(t[(t[n>>2]|0)+260>>2]|0,t[a+260>>2]|0,+c[a+64>>3]+r,0)|0;ED(i);e=e+1|0}return}function BD(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0.0,b=0,h=0;A=hx(e,t[47144]|0,8,0)|0;b=e+16|0;e=1;while(1){i=t[b>>2]|0;r=t[i+180>>2]|0;if((e|0)>(r|0))break;gD(t[(t[i+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}u=+(A|0);o=1;e=r;A=i;while(1){if((o|0)>(e|0))break;c=o+1|0;s=c;while(1){r=t[A+184>>2]|0;i=t[r+(o<<2)>>2]|0;if((s|0)>(e|0))break;r=t[r+(s<<2)>>2]|0;n=(a[(t[i+16>>2]|0)+236>>1]|0)>(a[(t[r+16>>2]|0)+236>>1]|0);l=n?r:i;r=n?i:r;i=t[l+16>>2]|0;n=t[r+16>>2]|0;h=a[n+236>>1]|0;f=h<<16>>16;if((a[i+238>>1]|0)>=h<<16>>16){e=(t[(t[(t[t[(t[i+196>>2]|0)+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0)<(t[(t[(t[t[(t[n+196>>2]|0)+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0);oD(t[(t[(e?l:r)+16>>2]|0)+260>>2]|0,t[(t[(e?r:l)+16>>2]|0)+256>>2]|0,u,0)|0;e=t[b>>2]|0;A=e;e=t[e+180>>2]|0}s=s+1|0}BD(i);A=t[b>>2]|0;o=c;e=t[A+180>>2]|0}return}function yD(e,A){e=e|0;A=A|0;var r=0;A=t[A+16>>2]|0;if((i[A+156>>0]|0)==1){A=t[t[A+256>>2]>>2]|0;while(1){r=t[(t[A+16>>2]|0)+116>>2]|0;if(!r)break;else A=r}if(!(Wd(e,t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0))A=(Wd(e,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0)==0&1;else A=0}else A=0;return A|0}function CD(e,A){e=e|0;A=A|0;return ID(e,A)|0}function ID(e,A){e=e|0;A=A|0;var r=0,i=0;e:do{if((e|0)==(A|0))e=1;else{r=t[(t[e+16>>2]|0)+180>>2]|0;e=0;while(1){i=t[r+(e<<2)>>2]|0;if(!i){e=0;break e}if(!(ID(t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,A)|0))e=e+1|0;else{e=1;break}}}}while(0);return e|0}function ZD(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0;c=e+16|0;e=t[c>>2]|0;s=a[e+236>>1]|0;while(1){if((s|0)>(a[e+238>>1]|0))break;f=t[e+196>>2]|0;n=t[f+(s<<6)>>2]|0;f=f+(s<<6)+4|0;l=0;r=0;while(1){if((r|0)>=(n|0))break;A=t[(t[(t[f>>2]|0)+(r<<2)>>2]|0)+16>>2]|0;t[A+236>>2]=l;if((i[A+159>>0]|0)==6)A=t[A+216>>2]|0;else A=1;l=A+l|0;r=r+1|0}if((l|0)>(n|0)){e=t[f>>2]|0;if(!e)e=$F((l<<2)+4|0)|0;else e=AM(e,(l<<2)+4|0)|0;r=t[(t[c>>2]|0)+196>>2]|0;t[r+(s<<6)+4>>2]=e;A=t[r+(s<<6)>>2]|0;while(1){e=A+-1|0;if((A|0)<=0)break;f=t[r+(s<<6)+4>>2]|0;A=t[f+(e<<2)>>2]|0;t[f+(t[(t[A+16>>2]|0)+236>>2]<<2)>>2]=A;A=e;r=t[(t[c>>2]|0)+196>>2]|0}t[r+(s<<6)>>2]=l;t[(t[r+(s<<6)+4>>2]|0)+(l<<2)>>2]=0;e=t[c>>2]|0}s=s+1|0}return}function GD(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0;b=h;h=h+48|0;u=b+32|0;o=b+8|0;r=b+24|0;s=b+16|0;l=b;i=A+16|0;a=t[i>>2]|0;e:do{if((t[a+216>>2]|0)>=2){t[o>>2]=~~(+c[a+16>>3]-+c[a+88>>3]);t[o+4>>2]=~~+c[a+24>>3];t[u>>2]=t[o>>2];t[u+4>>2]=t[o+4>>2];LD(r,A,u);n=r;f=t[n+4>>2]|0;r=o;t[r>>2]=t[n>>2];t[r+4>>2]=f;r=t[i>>2]|0;if((t[r+184>>2]|0)>0){l=t[t[r+180>>2]>>2]|0;r=(t[r+236>>2]|0)+1|0;l=Kw(e,t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0)|0;while(1){if(!l)break e;f=(t[l>>2]&3|0)==2?l:l+-48|0;i=f+48|0;a=t[((t[f>>2]&3|0)==3?f:i)+40>>2]|0;if((a|0)!=(A|0)?(Ex(a)|0)==(A|0):0){a=t[((t[f>>2]&3|0)==3?f:i)+40>>2]|0;t[u>>2]=t[o>>2];t[u+4>>2]=t[o+4>>2];QD(s,e,a,u,r);a=s;i=t[a+4>>2]|0;n=o;t[n>>2]=t[a>>2];t[n+4>>2]=i;VL(f);n=f+-48|0;i=t[(t[((t[f>>2]&3|0)==2?f:n)+40>>2]|0)+16>>2]|0;a=t[i+172>>2]|0;if(!a)i=$F((t[i+176>>2]<<2)+8|0)|0;else i=AM(a,(t[i+176>>2]<<2)+8|0)|0;t[(t[(t[((t[f>>2]&3|0)==2?f:n)+40>>2]|0)+16>>2]|0)+172>>2]=i;w=t[(t[((t[f>>2]&3|0)==2?f:n)+40>>2]|0)+16>>2]|0;i=t[w+172>>2]|0;w=w+176|0;a=t[w>>2]|0;t[w>>2]=a+1;t[i+(a<<2)>>2]=f;f=t[(t[((t[f>>2]&3|0)==2?f:n)+40>>2]|0)+16>>2]|0;t[(t[f+172>>2]|0)+(t[f+176>>2]<<2)>>2]=0;r=r+1|0}l=$w(e,l)|0}}else{f=t[t[r+172>>2]>>2]|0;r=(t[r+236>>2]|0)+1|0;f=Ow(e,t[((t[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)|0;while(1){if(!f)break e;i=f+-48|0;a=t[((t[f>>2]&3|0)==2?f:i)+40>>2]|0;if((a|0)!=(A|0)?(Ex(a)|0)==(A|0):0){a=t[((t[f>>2]&3|0)==2?f:i)+40>>2]|0;t[u>>2]=t[o>>2];t[u+4>>2]=t[o+4>>2];QD(l,e,a,u,r);a=l;i=t[a+4>>2]|0;n=o;t[n>>2]=t[a>>2];t[n+4>>2]=i;VL(f);n=f+48|0;i=t[(t[((t[f>>2]&3|0)==3?f:n)+40>>2]|0)+16>>2]|0;a=t[i+180>>2]|0;if(!a)i=$F((t[i+184>>2]<<2)+8|0)|0;else i=AM(a,(t[i+184>>2]<<2)+8|0)|0;t[(t[(t[((t[f>>2]&3|0)==3?f:n)+40>>2]|0)+16>>2]|0)+180>>2]=i;a=t[(t[((t[f>>2]&3|0)==3?f:n)+40>>2]|0)+16>>2]|0;s=t[a+180>>2]|0;a=a+184|0;w=t[a>>2]|0;t[a>>2]=w+1;t[s+(w<<2)>>2]=f;w=t[(t[((t[f>>2]&3|0)==3?f:n)+40>>2]|0)+16>>2]|0;t[(t[w+180>>2]|0)+(t[w+184>>2]<<2)>>2]=0;r=r+1|0}f=qw(e,f)|0}}}}while(0);h=b;return}function LD(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0;WJ(A,t[(t[(Bd(A)|0)+16>>2]|0)+116>>2]&1);i=t[A+16>>2]|0;c[i+24>>3]=+(t[r+4>>2]|0);a=+c[i+88>>3]+ +(t[r>>2]|0);c[i+16>>3]=a;a=a+ +c[i+96>>3];t[r>>2]=~~(a+ +(t[(t[(Bd(A)|0)+16>>2]|0)+248>>2]|0));i=r;A=t[i+4>>2]|0;r=e;t[r>>2]=t[i>>2];t[r+4>>2]=A;return}function QD(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;l=h;h=h+16|0;f=l;A=mG(A)|0;n=Ex(r)|0;if((n|0)!=(r|0))LL(n,r);s=t[r+16>>2]|0;t[s+236>>2]=a;n=t[(t[n+16>>2]|0)+232>>2]|0;t[s+232>>2]=n;t[(t[(t[(t[A+16>>2]|0)+196>>2]|0)+(n<<6)+4>>2]|0)+(a<<2)>>2]=r;t[f>>2]=t[i>>2];t[f+4>>2]=t[i+4>>2];LD(e,r,f);h=l;return}function DD(e){e=e|0;var A=0.0,r=0.0,i=0,n=0,f=0,l=0.0,s=0,o=0,u=0,b=0.0;u=t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0;if((mG(e)|0)==(e|0))l=8.0;else l=+(hx(e,t[47144]|0,8,0)|0);o=e+16|0;n=t[o>>2]|0;i=0;s=1;r=+c[n+120>>3];A=+c[n+128>>3];while(1){if((s|0)>(t[n+180>>2]|0))break;f=t[(t[n+184>>2]|0)+(s<<2)>>2]|0;i=DD(f)|0|i;f=t[f+16>>2]|0;n=t[o>>2]|0;if((a[f+238>>1]|0)==(a[n+238>>1]|0)){b=+c[f+120>>3]+l;r=r>b?r:b}if((a[f+236>>1]|0)==(a[n+236>>1]|0)){b=+c[f+128>>3]+l;A=A>b?A:b}s=s+1|0}if((mG(e)|0)!=(e|0)?(t[(t[o>>2]|0)+12>>2]|0)!=0:0)if(!(t[(t[(yd(e)|0)+16>>2]|0)+116>>2]&1)){s=t[o>>2]|0;i=1;r=+c[s+56>>3]+r;A=+c[s+88>>3]+A}else i=1;s=t[o>>2]|0;c[s+120>>3]=r;c[s+128>>3]=A;if((mG(e)|0)!=(e|0)){o=t[o>>2]|0;e=u+(a[o+236>>1]<<6)+24|0;b=+c[e>>3];c[e>>3]=b>A?b:A;u=u+(a[o+238>>1]<<6)+16|0;b=+c[u>>3];c[u>>3]=b>r?b:r}return i|0}function zD(e,A){e=e|0;A=A|0;var r=0,i=0.0,n=0.0,f=0,l=0,s=0.0,o=0,u=0,b=0,h=0,w=0.0,k=0.0;h=t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0;if((mG(e)|0)==(e|0))r=0;else r=hx(e,t[47144]|0,8,0)|0;o=e+16|0;f=t[o>>2]|0;u=r+A|0;s=+(r|0);l=1;i=+c[f+128>>3];n=+c[f+120>>3];r=f;while(1){if((l|0)>(t[r+180>>2]|0))break;f=t[(t[r+184>>2]|0)+(l<<2)>>2]|0;zD(f,u);f=t[f+16>>2]|0;r=t[o>>2]|0;if((a[f+238>>1]|0)==(a[r+238>>1]|0)){k=+c[f+120>>3]+s;n=n>k?n:k}if((a[f+236>>1]|0)==(a[r+236>>1]|0)){k=+c[f+128>>3]+s;i=i>k?i:k}l=l+1|0}c[r+120>>3]=n;c[r+128>>3]=i;if(((mG(e)|0)!=(e|0)?(b=t[o>>2]|0,t[b+12>>2]|0):0)?(w=-n-i+ +c[b+48+((+c[b+104>>3]>+c[b+72>>3]?3:1)<<4)+8>>3]-+c[(t[(t[t[h+(a[b+236>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +c[(t[(t[t[h+(a[b+238>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3],w>0.0):0)WD(e,~~w,A);if((mG(e)|0)!=(e|0)){b=t[o>>2]|0;u=h+(a[b+236>>1]<<6)+24|0;k=+c[u>>3];w=+c[b+128>>3];c[u>>3]=k>w?k:w;h=h+(a[b+238>>1]<<6)+16|0;w=+c[h>>3];k=+c[b+120>>3];c[h>>3]=w>k?w:k}return}function WD(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0.0,h=0.0,w=0,k=0,d=0;s=t[(mG(e)|0)+16>>2]|0;k=t[s+196>>2]|0;w=t[e+16>>2]|0;e=a[w+238>>1]|0;i=a[w+236>>1]|0;o=(A+1|0)/2|0;u=w+120|0;b=+c[u>>3];h=+(o|0);f=+(r|0);r=~~(h+f+b-+c[k+(e<<6)+16>>3]);if((r|0)>0){n=+(r|0);while(1){if((e|0)<(i|0))break;if((t[k+(e<<6)>>2]|0)>0){d=(t[(t[t[k+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;c[d>>3]=+c[d>>3]+n}e=e+-1|0}l=+c[w+128>>3];e=r;n=l+ +(A-o|0)}else{l=+c[w+128>>3];e=A-o|0;n=l}e=~~(+(e|0)+f+n-+c[k+(i<<6)+24>>3]);e:do{if((e|0)>0){r=a[s+236>>1]|0;n=+(e|0);while(1){e=i+-1|0;if((i|0)<=(r|0))break e;if((t[k+(e<<6)>>2]|0)<=0){i=e;continue}i=(t[(t[t[k+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;c[i>>3]=+c[i>>3]+n;i=e}}}while(0);c[w+128>>3]=l+ +(A-o|0);c[u>>3]=b+h;return}function YD(e,A){e=e|0;A=A|0;var r=0,a=0;r=t[e+16>>2]|0;a=i[r+84>>0]|0;e=t[A+16>>2]|0;do{if(a<<24>>24==(i[e+84>>0]|0)){if(+c[r+56>>3]==+c[e+56>>3]){if(!(a<<24>>24==0?1:+c[r+64>>3]==+c[e+64>>3])){e=0;break}}else if(a<<24>>24){e=0;break}if(+c[r+16>>3]==+c[e+16>>3]?+c[r+24>>3]==+c[e+24>>3]:0){e=1;break}e=(i[r+44>>0]|0)==0&1}else e=0}while(0);return e|0}function FD(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0;l=e+16|0;A=t[l>>2]|0;a[A+236>>1]=32767;a[A+238>>1]=-1;A=0;f=sd(e)|0;while(1){r=t[l>>2]|0;if(!f)break;i=r+238|0;n=t[(t[f+16>>2]|0)+232>>2]|0;if((n|0)>(a[i>>1]|0))a[i>>1]=n;r=r+236|0;if((n|0)<(a[r>>1]|0))a[r>>1]=n;if(!A)A=f;else A=(n|0)<(t[(t[A+16>>2]|0)+232>>2]|0)?f:A;f=cd(e,f)|0}t[r+264>>2]=A;return}function MD(e){e=e|0;var A=0,r=0,i=0,a=0,n=0.0;A=Hw(e,86974)|0;if(!A)A=2147483647;else{n=+$3(A);A=~~(n*+(gk(e)|0))}i=e+16|0;r=0;while(1){a=t[i>>2]|0;if((r|0)>=(t[a+220>>2]|0))break;t[a+192>>2]=t[(t[a+216>>2]|0)+(r<<2)>>2];VM(e,(t[a+180>>2]|0)==0&1,A)|0;r=r+1|0}return}function VD(e,A){e=e|0;A=A|0;var r=0,i=0,n=0;i=h;h=h+16|0;r=i;if(!(Hw(e,86983)|0))RD(e,A);else{n=(t[e+16>>2]|0)+136|0;a[n>>1]=a[n>>1]|16;ND(e,A)}if(0){n=t[15712]|0;e=t[e+16>>2]|0;A=a[e+236>>1]|0;t[r>>2]=a[e+238>>1];t[r+4>>2]=A;a3(n,86991,r)|0}h=i;return}function ND(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0.0;l=h;h=h+16|0;f=l;t[46747]=0;i[f>>0]=i[18588]|0;i[f+1>>0]=i[18589]|0;i[f+2>>0]=i[18590]|0;i[f+3>>0]=i[18591]|0;f=hk(87201,f,0)|0;Sd(f,87230,280,1)|0;Dd(f,17404,17344);xD(e);r=Hw(e,86974)|0;if(!r)a=2147483647;else{s=+$3(r);a=~~(s*+(gk(e)|0))}rz(e,0);iz(e,f);az(e,f);tz(e,f,0,0);nz(f);n=fz(f)|0;lz(f);if(A|0){_z(f);Nz(f)}r=Hw(e,102586)|0;if(!r)r=-1;else r=K3(r)|0;rM(f,1,a,r)|0;sz(e,f,n);vk(f)|0;h=l;return}function RD(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;n=h;h=h+32|0;a=n+16|0;i=n+8|0;r=n;xD(e);do{if(!A){JD(e,e);$z(e);HD(r,e);f=r;r=t[f+4>>2]|0;A=i;t[A>>2]=t[f>>2];t[A+4>>2]=r;jW(e,0);A=0}else{_z(e);Nz(e);JD(e,e);$z(e);HD(r,e);l=r;r=t[l+4>>2]|0;f=i;t[f>>2]=t[l>>2];t[f+4>>2]=r;jW(e,0);f=t[e+16>>2]|0;if((t[f+220>>2]|0)<=1?(t[f+180>>2]|0)<=0:0)break;t[A+32>>2]=1;A=0}}while(0);Fz(e);t[a>>2]=t[i>>2];t[a+4>>2]=t[i+4>>2];if(PD(e,a)|0)jW(e,0);if(!A)MD(e);else Rz(e,A);XD(e,A);SD(e);h=n;return}function xD(e){e=e|0;var A=0,r=0,n=0;if(i[(t[(t[e+60>>2]|0)+16>>2]|0)+113>>0]&1){r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;n=(t[A+16>>2]|0)+170|0;a[n>>1]=(f[n>>1]|0)<<1;A=qw(e,A)|0}r=cd(e,r)|0}n=(t[e+16>>2]|0)+252|0;t[n>>2]=((t[n>>2]|0)+1|0)/2|0}return}function JD(e,A){e=e|0;A=A|0;var r=0;A=xv(A)|0;while(1){if(!A)break;r=$D(A)|0;do{if(r)if((r|0)==7&(t[47135]|0)==100){OD(e,A);break}else{ez(e,A,r);break}else JD(e,A)}while(0);A=Jv(A)|0}return}function HD(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;l=A+16|0;r=t[l>>2]|0;A=t[r+228>>2]|0;r=t[r+224>>2]|0;a=(r|0)==0;if(!A)if(a){s=0;c=0}else n=4;else if(a)n=5;else n=4;if((n|0)==4){A=Ex(r)|0;r=t[l>>2]|0;t[r+224>>2]=A;A=t[r+228>>2]|0;if(!A){f=0;A=r;n=12}else n=5}do{if((n|0)==5){A=Ex(A)|0;r=t[l>>2]|0;t[r+228>>2]=A;if(A){r=A+16|0;A=t[r>>2]|0;a=(i[A+159>>0]|0)==5&1;while(1){A=t[t[A+180>>2]>>2]|0;if(!A){n=11;break}f=t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0;if((f|0)!=(Ex(f)|0)){n=9;break}Yz(A);A=t[r>>2]|0}if((n|0)==9)ge(87094,87034,346,87126);else if((n|0)==11){f=a;A=t[l>>2]|0;n=12;break}}else{f=0;A=r;n=12}}}while(0);e:do{if((n|0)==12){A=t[A+224>>2]|0;if(!A){s=0;c=f}else{r=A+16|0;A=t[r>>2]|0;a=(i[A+159>>0]|0)==3&1;while(1){A=t[t[A+172>>2]>>2]|0;if(!A){s=a;c=f;break e}l=t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0;if((l|0)!=(Ex(l)|0))break;Yz(A);A=t[r>>2]|0}ge(87139,87034,353,87126)}}}while(0);t[e>>2]=s;t[e+4>>2]=c;return}function PD(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0;s=e+16|0;l=t[s>>2]|0;if((t[l+228>>2]|0)==0?(t[l+224>>2]|0)==0:0)A=0;else r=3;e:do{if((r|0)==3){n=sd(e)|0;l=A+4|0;f=t[A>>2]&65535;A=0;while(1){if(!n)break e;if((n|0)==(Ex(n)|0)){i=n+16|0;r=t[i>>2]|0;if((t[r+184>>2]|0)==0?(c=t[(t[s>>2]|0)+228>>2]|0,!((c|0)==0|(n|0)==(c|0))):0){A=ZL(n,c,0)|0;r=t[A+16>>2]|0;a[r+170>>1]=t[l>>2];t[r+156>>2]=0;r=t[i>>2]|0}if((t[r+176>>2]|0)==0?(o=t[(t[s>>2]|0)+224>>2]|0,!((o|0)==0|(n|0)==(o|0))):0){A=ZL(o,n,0)|0;i=t[A+16>>2]|0;a[i+170>>1]=f;t[i+156>>2]=0}}n=cd(e,n)|0}}}while(0);return(A|0)!=0|0}function XD(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0;n=sd(e)|0;c=e+16|0;r=t[c>>2]|0;e:do{if(n){a[r+236>>1]=32767;a[r+238>>1]=-1;s=(A|0)==0;while(1){if(!n)break;r=Ex(n)|0;l=t[n+16>>2]|0;A=t[l+232>>2]|0;do{if((r|0)!=(n|0)){if(!s)if(!A)A=0;else break;A=A+(t[(t[r+16>>2]|0)+232>>2]|0)|0;t[l+232>>2]=A}}while(0);r=t[c>>2]|0;f=r+238|0;if((A|0)>(a[f>>1]|0))a[f>>1]=A;r=r+236|0;if((A|0)<(a[r>>1]|0))a[r>>1]=A;switch(i[l+159>>0]|0){case 6:case 0:break;default:yx(n)}n=cd(e,n)|0}if((mG(e)|0)==(e|0)){if((t[47135]|0)==100)A=1;else{TD(e);break}while(1){r=t[c>>2]|0;if((A|0)>(t[r+180>>2]|0))break e;UD(t[(t[r+184>>2]|0)+(A<<2)>>2]|0);A=A+1|0}}}else{a[r+238>>1]=0;a[r+236>>1]=0}}while(0);return}function SD(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;s=e+16|0;r=0;while(1){A=t[s>>2]|0;if((r|0)>=(t[A+220>>2]|0))break;l=t[(t[A+216>>2]|0)+(r<<2)>>2]|0;t[A+192>>2]=l;A=l;while(1){if(!A)break;l=A+16|0;jD((t[l>>2]|0)+172|0);jD((t[l>>2]|0)+180|0);l=t[l>>2]|0;i[l+157>>0]=0;A=t[l+164>>2]|0}r=r+1|0}l=sd(e)|0;while(1){if(!l)break;f=Ow(e,l)|0;while(1){if(!f)break;a=f+16|0;A=t[a>>2]|0;n=t[A+172>>2]|0;if((n|0)!=0?(c=n+16|0,(f|0)==(t[(t[c>>2]|0)+116>>2]|0)):0){A=sd(e)|0;while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;if((f|0)!=(r|0)?(o=(t[r+16>>2]|0)+172|0,u=t[o>>2]|0,(u|0)!=0&(n|0)==(u|0)):0)t[o>>2]=0;r=qw(e,r)|0}A=cd(e,A)|0}G2(t[c>>2]|0);G2(n);A=t[a>>2]|0}t[A+172>>2]=0;f=qw(e,f)|0}l=cd(e,l)|0}G2(t[(t[s>>2]|0)+216>>2]|0);u=t[s>>2]|0;t[u+216>>2]=0;t[u+220>>2]=0;return}function jD(e){e=e|0;var A=0,r=0;r=e+4|0;A=t[r>>2]|0;while(1){if((A|0)<=-1)break;t[(t[e>>2]|0)+(A<<2)>>2]=0;A=A+-1|0}t[r>>2]=0;return}function UD(e){e=e|0;var A=0,r=0,i=0;A=e+16|0;r=t[A>>2]|0;i=t[(t[(t[r+264>>2]|0)+16>>2]|0)+232>>2]|0;e=r+236|0;a[e>>1]=i+(f[e>>1]|0);e=r+238|0;a[e>>1]=i+(f[e>>1]|0);e=1;while(1){if((e|0)>(t[r+180>>2]|0))break;UD(t[(t[r+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0;r=t[A>>2]|0}return}function TD(e){e=e|0;var A=0;A=xv(mG(e)|0)|0;while(1){if(!A)break;if((i[(t[A+16>>2]|0)+274>>0]|0)==7)OD(e,A);A=Jv(A)|0}return}function OD(e,A){e=e|0;A=A|0;var r=0;r=(t[A+16>>2]|0)+200|0;do{if((t[r>>2]|0)==0?(t[r>>2]=e,_D(e,A),sd(A)|0):0){qD(e,A);if((t[47135]|0)==100){RD(A,0);KD(A);break}else{FD(A);break}}}while(0);return}function _D(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;f=e+16|0;n=sd(A)|0;while(1){if(!n)break;l=cd(A,n)|0;s=n+16|0;if(!(i[(t[s>>2]|0)+159>>0]|0))a=1;else{Ed(A,n)|0;n=l;continue}while(1){r=t[f>>2]|0;e=t[r+180>>2]|0;if((a|0)>=(e|0))break;if(Wd(t[(t[r+184>>2]|0)+(a<<2)>>2]|0,n)|0){c=7;break}a=a+1|0}if((c|0)==7){c=0;e=t[(t[f>>2]|0)+180>>2]|0}if((a|0)<(e|0))Ed(A,n)|0;t[(t[s>>2]|0)+212>>2]=0;n=l}r=sd(A)|0;while(1){if(!r)break;e=Ow(mG(A)|0,r)|0;while(1){if(!e)break;if(Wd(A,t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0)uk(A,e,1)|0;e=qw(mG(A)|0,e)|0}r=cd(A,r)|0}return}function qD(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;i=e+16|0;r=t[i>>2]|0;n=r+180|0;e=t[n>>2]|0;a=e+1|0;t[n>>2]=a;r=t[r+184>>2]|0;if(!r)e=KF((e<<2)+8|0)|0;else e=eM(r,e+2|0,4,a)|0;t[(t[i>>2]|0)+184>>2]=e;t[e+(a<<2)>>2]=A;VF(A);return}function KD(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;n=t[e+16>>2]|0;A=n+192|0;f=0;while(1){A=t[A>>2]|0;if(!A)break;a=t[A+16>>2]|0;if(!(t[a+232>>2]|0))r=(i[a+156>>0]|0)==0?A:f;else r=f;A=a+164|0;f=r}if(!f)ge(87019,87034,238,87041);t[n+264>>2]=f;A=sd(e)|0;while(1){if(!A){A=13;break}r=A+16|0;if(!((A|0)==(f|0)?1:(t[(t[r>>2]|0)+216>>2]|0)<2)){A=11;break}Bx(A,f)|0;i[(t[r>>2]|0)+159>>0]=7;A=cd(e,A)|0}if((A|0)==11)ge(87056,87034,242,87041);else if((A|0)==13)return}function $D(e){e=e|0;var A=0;if(!(Az(e)|0)){A=zx(Hw(e,87171)|0,17356,17380)|0;i[(t[e+16>>2]|0)+274>>0]=A;e=A}else e=7;return e|0}function ez(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;n=sd(A)|0;e:do{if(n|0){s=r&255;l=n+16|0;a=n;f=s;while(1){i[(t[a+16>>2]|0)+159>>0]=f;a=cd(A,a)|0;if(!a)break;Bx(n,a)|0;f=i[(t[l>>2]|0)+159>>0]|0}switch(r|0){case 3:case 2:{e=e+16|0;a=t[e>>2]|0;f=t[a+224>>2]|0;if(f){n=Bx(f,n)|0;a=t[e>>2]|0}t[a+224>>2]=n;break}case 5:case 4:{e=e+16|0;a=t[e>>2]|0;f=t[a+228>>2]|0;if(f){n=Bx(f,n)|0;a=t[e>>2]|0}t[a+228>>2]=n;break}default:break e}switch(r|0){case 3:{a=a+224|0;break}case 5:{a=a+228|0;break}default:break e}i[(t[(t[a>>2]|0)+16>>2]|0)+159>>0]=s}}while(0);return}function Az(e){e=e|0;return(y1(Mk(e)|0,108006,7)|0)==0|0}function rz(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+16|0;n=o;if(!(Bz(e)|0)){do{if(Tx(e)|0)if(!A){t[(t[e+16>>2]|0)+204>>2]=0;A=e;break}else{t[(t[e+16>>2]|0)+204>>2]=(t[(t[A+16>>2]|0)+204>>2]|0)+1;yz(e,A);A=e;break}}while(0);r=xv(e)|0;while(1){if(!r)break;rz(r,A);r=Jv(r)|0}e:do{if(Tx(e)|0){r=sd(e)|0;while(1){if(!r)break e;a=(t[r+16>>2]|0)+212|0;if(!(t[a>>2]|0))t[a>>2]=e;r=cd(e,r)|0}}}while(0);switch(Cz(e)|0){case 3:{A=A+16|0;i[(t[A>>2]|0)+241>>0]=1;c=19;break}case 2:{A=A+16|0;c=19;break}case 5:{A=A+16|0;i[(t[A>>2]|0)+242>>0]=1;c=21;break}case 4:{A=A+16|0;c=21;break}case 1:{Iz(e)|0;break}case 6:break;default:{r=Mk(e)|0;a=Hw(e,87171)|0;t[n>>2]=r;t[n+4>>2]=a;nw(0,87354,n)|0}}if((c|0)==19){c=Iz(e)|0;c=Zz(c,t[(t[A>>2]|0)+208>>2]|0)|0;t[(t[A>>2]|0)+208>>2]=c}else if((c|0)==21){c=Iz(e)|0;c=Zz(c,t[(t[A>>2]|0)+212>>2]|0)|0;t[(t[A>>2]|0)+212>>2]=c}if((Tx(e)|0?(f=e+16|0,l=t[f>>2]|0,s=t[l+208>>2]|0,s|0):0)?(s|0)==(t[l+212>>2]|0):0){s=Iz(e)|0;c=t[f>>2]|0;t[c+208>>2]=s;t[c+212>>2]=s}}h=o;return}function iz(e,A){e=e|0;A=A|0;var r=0,i=0;t[46747]=0;r=sd(e)|0;while(1){if(!r)break;if((cz(r)|0)==(r|0)){i=bz(A,Mk(r)|0)|0;t[(t[r+16>>2]|0)+148>>2]=i}r=cd(e,r)|0}r=sd(e)|0;while(1){if(!r)break;A=r+16|0;if(!(t[(t[A>>2]|0)+148>>2]|0)){i=t[(t[(cz(r)|0)+16>>2]|0)+148>>2]|0;t[(t[A>>2]|0)+148>>2]=i}r=cd(e,r)|0}return}function az(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;f=sd(e)|0;while(1){if(!f)break;r=t[(t[f+16>>2]|0)+148>>2]|0;l=Ow(e,f)|0;while(1){if(!l)break;do{if((vz(l)|0)==0?(s=l+-48|0,c=t[(t[(cz(t[((t[l>>2]&3|0)==2?l:s)+40>>2]|0)|0)+16>>2]|0)+148>>2]|0,(r|0)!=(c|0)):0){a=t[l>>2]&3;n=l+48|0;i=((a|0)==3?l:n)+40|0;a=t[(t[(t[((a|0)==2?l:s)+40>>2]|0)+16>>2]|0)+212>>2]|0;if(!(gz(l)|0)){if((dz(t[(t[(t[i>>2]|0)+16>>2]|0)+212>>2]|0)|0)==0?(dz(a)|0)==0:0){mz(A,r,c,l);break}pz(A,r,c,l);break}else{a=cz(t[i>>2]|0)|0;i=t[l>>2]&3;if((a|0)!=(t[(t[(t[(t[(t[((i|0)==3?l:n)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+212>>2]|0)?(n=cz(t[((i|0)==2?l:s)+40>>2]|0)|0,(n|0)!=(t[(t[(t[(t[(t[((t[l>>2]&3|0)==2?l:s)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+208>>2]|0)):0)i=c;else{i=r;r=c}mz(A,r,i,l);break}}}while(0);l=qw(e,l)|0}f=cd(e,f)|0}return}function tz(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;if((Tx(e)|0)!=0?(dz(e)|0)!=0:0){n=sd(e)|0;while(1){if(!n)break;if(!(Kw(e,n)|0)){a=t[(t[(cz(n)|0)+16>>2]|0)+148>>2]|0;if(!r)r=bz(A,87252)|0;lk(A,r,a,0,1)|0}if(!(Ow(e,n)|0)){a=t[(t[(cz(n)|0)+16>>2]|0)+148>>2]|0;if(!i)i=bz(A,87257)|0;lk(A,a,i,0,1)|0}n=cd(e,n)|0}if((i|0)!=0&(r|0)!=0){kz(lk(A,r,i,0,1)|0,0,1e3);a=r}else a=r}else a=r;r=xv(e)|0;while(1){if(!r)break;tz(r,A,a,i);r=Jv(r)|0}return}function nz(e){e=e|0;var A=0,r=0;A=sd(e)|0;while(1){if(!A)break;r=t[A+16>>2]|0;i[r+158>>0]=0;i[r+157>>0]=0;A=cd(e,A)|0}A=sd(e)|0;while(1){if(!A)break;hz(e,A);A=cd(e,A)|0}return}function fz(e){e=e|0;var A=0,r=0,i=0,a=0;A=sd(e)|0;while(1){if(!A)break;t[(t[A+16>>2]|0)+128>>2]=0;A=cd(e,A)|0}A=0;i=sd(e)|0;while(1){if(!i)break;r=A+1|0;if(!(t[(t[i+16>>2]|0)+128>>2]|0)){uz(e,i,r);A=r}i=cd(e,i)|0}e:do{if((A|0)>1){a=bz(e,87246)|0;r=1;i=sd(e)|0;while(1){if(!i)break e;if((t[(t[i+16>>2]|0)+128>>2]|0)==(r|0)){lk(e,a,i,0,1)|0;r=r+1|0}i=cd(e,i)|0}}}while(0);return A|0}function lz(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;n=sd(e)|0;while(1){if(!n)break;f=n+16|0;a=Ow(e,n)|0;while(1){if(!a)break;A=t[f>>2]|0;r=t[A+180>>2]|0;if(!r)A=$F((t[A+184>>2]<<2)+8|0)|0;else A=AM(r,(t[A+184>>2]<<2)+8|0)|0;r=t[f>>2]|0;t[r+180>>2]=A;r=r+184|0;i=t[r>>2]|0;t[r>>2]=i+1;t[A+(i<<2)>>2]=a;i=t[f>>2]|0;t[(t[i+180>>2]|0)+(t[i+184>>2]<<2)>>2]=0;i=a+-48|0;A=t[(t[((t[a>>2]&3|0)==2?a:i)+40>>2]|0)+16>>2]|0;r=t[A+172>>2]|0;if(!r)A=$F((t[A+176>>2]<<2)+8|0)|0;else A=AM(r,(t[A+176>>2]<<2)+8|0)|0;t[(t[(t[((t[a>>2]&3|0)==2?a:i)+40>>2]|0)+16>>2]|0)+172>>2]=A;l=t[(t[((t[a>>2]&3|0)==2?a:i)+40>>2]|0)+16>>2]|0;A=t[l+172>>2]|0;l=l+176|0;r=t[l>>2]|0;t[l>>2]=r+1;t[A+(r<<2)>>2]=a;i=t[(t[((t[a>>2]&3|0)==2?a:i)+40>>2]|0)+16>>2]|0;t[(t[i+172>>2]|0)+(t[i+176>>2]<<2)>>2]=0;a=qw(e,a)|0}n=cd(e,n)|0}return}function sz(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;b=e+16|0;h=t[b>>2]|0;a[h+236>>1]=32767;a[h+238>>1]=-1;e:do{if((r|0)>1){n=KF((r<<2)+4|0)|0;i=r+1|0;r=1;while(1){if((r|0)==(i|0)){u=n;h=n;break e}t[n+(r<<2)>>2]=32767;r=r+1|0}}else{u=0;h=0}}while(0);l=(u|0)==0;n=sd(e)|0;while(1){if(!n)break;s=t[(t[(t[(cz(n)|0)+16>>2]|0)+148>>2]|0)+16>>2]|0;c=t[s+232>>2]|0;o=t[n+16>>2]|0;t[o+232>>2]=c;r=t[b>>2]|0;i=r+238|0;if((c|0)>(a[i>>1]|0))a[i>>1]=c;r=r+236|0;if((c|0)<(a[r>>1]|0))a[r>>1]=c;if(!l){s=t[s+128>>2]|0;t[o+128>>2]=s;o=u+(s<<2)|0;s=t[o>>2]|0;t[o>>2]=(s|0)<(c|0)?s:c}n=cd(e,n)|0}s=(u|0)!=0;e:do{if(!s){u=a[(t[b>>2]|0)+236>>1]|0;i=u<<16>>16;if(u<<16>>16>0){r=sd(e)|0;while(1){if(!r)break;u=(t[r+16>>2]|0)+232|0;t[u>>2]=(t[u>>2]|0)-i;r=cd(e,r)|0}r=t[b>>2]|0;b=r+236|0;a[b>>1]=(f[b>>1]|0)-i;r=r+238|0;a[r>>1]=(f[r>>1]|0)-i;r=0}else r=0}else{r=sd(e)|0;while(1){if(!r){r=1;break e}o=t[r+16>>2]|0;b=o+232|0;t[b>>2]=(t[b>>2]|0)-(t[u+(t[o+128>>2]<<2)>>2]|0);r=cd(e,r)|0}}}while(0);oz(e,r);l=sd(A)|0;while(1){if(!l)break;i=l+16|0;r=t[i>>2]|0;n=t[r+172>>2]|0;if(n){G2(n);r=t[i>>2]|0}r=t[r+180>>2]|0;if(r|0)G2(r);l=cd(A,l)|0}G2(t[(t[(sd(e)|0)+16>>2]|0)+112>>2]|0);r=sd(e)|0;while(1){if(!r)break;t[(t[r+16>>2]|0)+112>>2]=0;r=cd(e,r)|0}if(s)G2(h);return}function cz(e){e=e|0;var A=0,r=0,i=0;A=e+16|0;r=(t[A>>2]|0)+152|0;i=t[r>>2]|0;if(i){if((i|0)!=(e|0)){i=cz(i)|0;t[(t[A>>2]|0)+152>>2]=i;return i|0}}else t[r>>2]=e;return e|0}function oz(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0;l=e+16|0;r=1;while(1){i=t[l>>2]|0;if((r|0)>(t[i+180>>2]|0))break;oz(t[(t[i+184>>2]|0)+(r<<2)>>2]|0,0);r=r+1|0}if((A|0)!=0|(t[i+200>>2]|0)!=0){a[i+236>>1]=32767;a[i+238>>1]=-1;r=0;f=sd(e)|0;while(1){if(!f)break;n=t[(t[f+16>>2]|0)+232>>2]|0;A=t[l>>2]|0;i=A+238|0;if((n|0)>(a[i>>1]|0))a[i>>1]=n;A=A+236|0;if((n|0)<(a[A>>1]|0)){a[A>>1]=n;r=f}f=cd(e,f)|0}t[(t[l>>2]|0)+264>>2]=r}return}function uz(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=(t[A+16>>2]|0)+128|0;e:do{if(!(t[i>>2]|0)){t[i>>2]=r;i=Ow(e,A)|0;while(1){if(!i)break;uz(e,t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,r);i=qw(e,i)|0}i=Kw(e,A)|0;while(1){if(!i)break e;uz(e,t[((t[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0,r);i=$w(e,i)|0}}}while(0);return}function bz(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=gd(e,A,1)|0;A=a+16|0;t[(t[A>>2]|0)+176>>2]=0;i=KF(20)|0;r=t[A>>2]|0;t[r+172>>2]=i;t[r+184>>2]=0;r=KF(20)|0;A=t[A>>2]|0;t[A+180>>2]=r;r=t[46747]|0;i=A+168|0;if(!r){t[i>>2]=0;t[(t[e+16>>2]|0)+192>>2]=a}else{t[i>>2]=r;t[(t[r+16>>2]|0)+164>>2]=a}t[46747]=a;t[A+164>>2]=0;return a|0}function hz(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;f=A+16|0;r=t[f>>2]|0;a=r+157|0;if(!(i[a>>0]|0)){i[a>>0]=1;i[r+158>>0]=1;A=Ow(e,A)|0;while(1){if(!A)break;r=qw(e,A)|0;a=t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0;n=t[a+16>>2]|0;if(i[n+158>>0]|0){wz(e,A);A=r;continue}if(i[n+157>>0]|0){A=r;continue}hz(e,a);A=r}i[(t[f>>2]|0)+158>>0]=0}return}function wz(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=t[A>>2]&3;a=A+-48|0;i=A+48|0;r=lk(e,t[((r|0)==2?A:a)+40>>2]|0,t[((r|0)==3?A:i)+40>>2]|0,0,0)|0;if(!r){r=t[A>>2]&3;r=lk(e,t[((r|0)==2?A:a)+40>>2]|0,t[((r|0)==3?A:i)+40>>2]|0,0,1)|0}a=t[A+16>>2]|0;kz(r,f[a+170>>1]|0,t[a+156>>2]|0);Ed(e,A)|0;return}function kz(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0;e=t[e+16>>2]|0;i=e+170|0;n=f[i>>1]|0;a[i>>1]=(n|0)>(A|0)?n:A;A=e+156|0;t[A>>2]=(t[A>>2]|0)+r;return}function dz(e){e=e|0;return(px(Hw(e,87262)|0,0)|0)&255|0}function vz(e){e=e|0;var A=0,r=0;A=t[47189]|0;if((((A|0)!=0?(r=Pw(e,A)|0,(r|0)!=0):0)?(i[r>>0]|0)!=0:0)?(mx(r)|0)<<24>>24==0:0)e=1;else e=0;return e|0}function gz(e){e=e|0;var A=0,r=0;r=t[e>>2]&3;A=t[(t[(t[((r|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;e=t[(t[(t[((r|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;if((A|0)==(e|0))return 1;else{r=Ez(A,e)|0;return((r|0)==(A|0)|(r|0)==(e|0))&1|0}return 0}function mz(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,l=0,s=0;s=h;h=h+16|0;n=s;a=lk(e,A,r,0,0)|0;if(!a){a=lk(e,r,A,0,0)|0;if(!a){a=lk(e,A,r,0,1)|0;if(!a){A=Mk(A)|0;i=Mk(r)|0;t[n>>2]=A;t[n+4>>2]=i;nw(1,87279,n)|0}else l=4}else l=4}else l=4;if((l|0)==4){l=t[i+16>>2]|0;kz(a,f[l+170>>1]|0,t[l+156>>2]|0)}h=s;return}function pz(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var n=0,l=0,s=0,c=0,o=0,u=0;o=h;h=h+112|0;s=o;l=o+4|0;n=Kw(e,A)|0;while(1){if(!n){c=6;break}u=Ow(e,t[((t[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)|0;if(u|0?(t[((t[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0)==(r|0):0)break;n=$w(e,n)|0}if((c|0)==6){u=t[46748]|0;t[46748]=u+1;t[s>>2]=u;T4(l,87270,s)|0;l=bz(e,l)|0;u=lk(e,l,A,0,1)|0;l=lk(e,l,r,0,1)|0;r=t[i+16>>2]|0;c=r+156|0;u=(t[u+16>>2]|0)+156|0;t[u>>2]=(t[u>>2]|0)+((t[c>>2]|0)*1e3|0);u=t[l+16>>2]|0;s=u+170|0;a[s>>1]=a[(t[((f[s>>1]|0)>(f[r+170>>1]|0)?l:i)+16>>2]|0)+170>>1]|0;u=u+156|0;t[u>>2]=(t[u>>2]|0)+(t[c>>2]|0)}h=o;return}function Ez(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;e:while(1){i=e+16|0;while(1){if((e|0)==(A|0))break e;a=t[i>>2]|0;r=t[A+16>>2]|0;if((t[a+204>>2]|0)>=(t[r+204>>2]|0))break;A=t[r+200>>2]|0}e=t[a+200>>2]|0}return e|0}function Bz(e){e=e|0;return(sd(e)|0)==0|0}function yz(e,A){e=e|0;A=A|0;t[(t[e+16>>2]|0)+200>>2]=A;qD(A,e);_D(A,e);return}function Cz(e){e=e|0;var A=0;e=Hw(e,87171)|0;if((e|0)!=0?(i[e>>0]|0)!=0:0)if(e1(e,87181)|0)if(e1(e,87185)|0)if(e1(e,87192)|0)if(e1(e,87196)|0)if(!(e1(e,87176)|0))e=1;else A=8;else e=5;else e=4;else e=3;else e=2;else A=8;if((A|0)==8)e=6;return e|0}function Iz(e){e=e|0;var A=0,r=0;r=sd(e)|0;e:do{if(!r)A=0;else{A=cz(r)|0;while(1){r=cd(e,r)|0;if(!r)break e;Zz(A,r)|0}}}while(0);return A|0}function Zz(e,A){e=e|0;A=A|0;if(A){e=cz(e)|0;t[(t[(cz(A)|0)+16>>2]|0)+152>>2]=e}return e|0}function Gz(e,A,r){e=e|0;A=A|0;r=r|0;Sd(A,87230,t[r>>2]|0,1)|0;return}function Lz(e,A,r){e=e|0;A=A|0;r=r|0;Sd(A,87397,t[r+4>>2]|0,1)|0;return}function Qz(e,A,r){e=e|0;A=A|0;r=r|0;Sd(A,87382,t[r+8>>2]|0,1)|0;return}function Dz(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+240|0;o=w+120|0;u=w;t[47193]=zw(e,2,87412,0)|0;c=zw(e,2,87421,0)|0;t[47194]=c;e:do{if((c|0)!=0|(t[47193]|0)!=0){c=sd(e)|0;while(1){if(!c)break e;s=0;A=0;l=ek(e,c)|0;while(1){if(!l){a=0;break}r=t[l>>2]|0;n=r&3;a=t[((n|0)==2?l:l+-48|0)+40>>2]|0;f=l+48|0;A:do{if((a|0)!=(t[((n|0)==3?l:f)+40>>2]|0)){n=t[47193]|0;do{if((a|0)==(c|0)&(n|0)!=0){a=Pw(l,n)|0;if(!(i[a>>0]|0)){r=t[l>>2]|0;break}else{r=s;A=zz(o,A,c,l,a)|0;break A}}}while(0);a=t[47194]|0;if((a|0?(t[((r&3|0)==3?l:f)+40>>2]|0)==(c|0):0)?(b=Pw(l,a)|0,(i[b>>0]|0)!=0):0)r=zz(u,s,c,l,b)|0;else r=s}else r=s}while(0);s=r;l=Ak(e,l,c)|0}while(1){if((a|0)>=(A|0)){r=0;break}r=o+(a*24|0)+4|0;if((t[o+(a*24|0)+8>>2]|0)>1)Wz(c,r);r=t[r>>2]|0;if(r|0)G2(r);a=a+1|0}while(1){if((r|0)>=(s|0))break;A=u+(r*24|0)+4|0;if((t[u+(r*24|0)+8>>2]|0)>1)Wz(c,A);A=t[A>>2]|0;if(A|0)G2(A);r=r+1|0}c=cd(e,c)|0}}}while(0);h=w;return}function zz(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;w=h;h=h+16|0;s=w;o=w+12|0;u=w+8|0;b=0;while(1){if((b|0)>=(A|0)){l=10;break}l=t[e+(b*24|0)>>2]|0;if((i[l>>0]|0)==(i[n>>0]|0)?(e1(l,n)|0)==0:0){l=5;break}b=b+1|0}do{if((l|0)==5){s=e+(b*24|0)+4|0;l=t[s>>2]|0;if(!l){l=e+(b*24|0)+8|0;n=l;l=$F((t[l>>2]<<2)+8|0)|0}else{k=e+(b*24|0)+8|0;n=k;l=AM(l,(t[k>>2]<<2)+8|0)|0}t[s>>2]=l;d=t[n>>2]|0;k=d+1|0;t[n>>2]=k;t[l+(d<<2)>>2]=a;t[(t[s>>2]|0)+(k<<2)>>2]=0;l=13}else if((l|0)==10)if((A|0)>4){d=Mk(r)|0;t[s>>2]=5;t[s+4>>2]=d;nw(1,87430,s)|0;break}else{v=e+(b*24|0)+8|0;t[v>>2]=0;s=KF(8)|0;d=e+(b*24|0)+4|0;t[d>>2]=s;k=t[v>>2]|0;l=k+1|0;t[v>>2]=l;t[s+(k<<2)>>2]=a;t[(t[d>>2]|0)+(l<<2)>>2]=0;t[e+(b*24|0)>>2]=n;t[e+(b*24|0)+12>>2]=0;c[e+(b*24|0)+16>>3]=0.0;A=A+1|0;l=13;break}}while(0);if((l|0)==13){WE(a,o,u);l=(t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)==(r|0)?t[u>>2]|0:t[o>>2]|0;if(l){d=e+(b*24|0)+12|0;v=t[d>>2]|0;t[d>>2]=v+1;if(!v)f=+VE(a,l);else f=0.0;c[e+(b*24|0)+16>>3]=f}}h=w;return A|0}function Wz(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0.0,s=0.0,o=0.0,u=0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0;B=h;h=h+80|0;g=B+68|0;m=B+64|0;d=B;p=A+4|0;u=t[p>>2]|0;E=e+16|0;f=0;w=0.0;k=0.0;while(1){if((f|0)>=(u|0))break;a=t[(t[A>>2]|0)+(f<<2)>>2]|0;n=t[a>>2]&3;r=t[((n|0)==2?a:a+-48|0)+40>>2]|0;if((r|0)==(e|0))r=t[((n|0)==3?a:a+48|0)+40>>2]|0;n=t[r+16>>2]|0;v=t[E>>2]|0;s=+c[n+16>>3]-+c[v+16>>3];o=+c[n+24>>3]-+c[v+24>>3];b=+g1(s,o);f=f+1|0;w=s/b+w;k=o/b+k}l=+g1(w,k);v=t[E>>2]|0;s=+c[v+16>>3];o=+c[v+24>>3];y=+c[v+96>>3]+ +c[v+88>>3];b=+c[v+80>>3];v=y>b+ +(t[(t[(Bd(e)|0)+16>>2]|0)+252>>2]|0);r=t[E>>2]|0;if(v)b=+c[r+96>>3]+ +c[r+88>>3];else{b=+c[r+80>>3];b=b+ +(t[(t[(Bd(e)|0)+16>>2]|0)+252>>2]|0);r=t[E>>2]|0}y=+c[r+16>>3]+b*(w/l);l=+c[r+24>>3]+b*(k/l);c[d>>3]=s;u=d+8|0;c[u>>3]=o;c[d+16>>3]=(y+s*2.0)*.3333333333333333;c[d+24>>3]=(l+o*2.0)*.3333333333333333;c[d+32>>3]=(y*2.0+s)*.3333333333333333;c[d+40>>3]=(l*2.0+o)*.3333333333333333;c[d+48>>3]=y;c[d+56>>3]=l;dR(e,d);v=t[E>>2]|0;l=+c[d>>3]-+c[v+16>>3];s=+c[u>>3]-+c[v+24>>3];l=+(~~(l+(l>=0.0?.5:-.5))|0);s=+(~~(s+(s>=0.0?.5:-.5))|0);y=+c[v+88>>3];v=~~((y+l)*256.0/(+c[v+96>>3]+y))&255;d=0;while(1){if((d|0)>=(t[p>>2]|0))break;u=t[(t[A>>2]|0)+(d<<2)>>2]|0;WE(u,g,m);while(1){if(!u)break;else n=u;while(1){if(!n){f=u;break}r=t[n>>2]|0;f=n+-48|0;if((t[((r&3|0)==2?n:f)+40>>2]|0)==(e|0)){r=t[n+16>>2]|0;c[r+56>>3]=l;c[r+64>>3]=s;c[r+72>>3]=0.0;t[r+80>>2]=0;i[r+84>>0]=1;i[r+85>>0]=0;i[r+86>>0]=0;i[r+87>>0]=0;i[r+88>>0]=v;i[r+89>>0]=0;t[r+92>>2]=0;r=t[n>>2]|0}a=n+16|0;if((t[((r&3|0)==3?n:n+48|0)+40>>2]|0)==(e|0)){r=t[a>>2]|0;c[r+16>>3]=l;c[r+24>>3]=s;c[r+32>>3]=0.0;t[r+40>>2]=0;i[r+44>>0]=1;i[r+45>>0]=0;i[r+46>>0]=0;i[r+47>>0]=0;i[r+48>>0]=v;i[r+49>>0]=0;t[r+52>>2]=0}if((i[(t[a>>2]|0)+112>>0]|0)!=1){n=0;continue}r=t[(t[((t[n>>2]&3|0)==2?n:f)+40>>2]|0)+16>>2]|0;if((i[r+156>>0]|0)!=1){n=0;continue}if((t[r+184>>2]|0)!=1){n=0;continue}n=t[t[r+180>>2]>>2]|0}while(1){if(!f)break;r=t[f>>2]|0;if((t[((r&3|0)==2?f:f+-48|0)+40>>2]|0)==(e|0)){r=t[f+16>>2]|0;c[r+56>>3]=l;c[r+64>>3]=s;c[r+72>>3]=0.0;t[r+80>>2]=0;i[r+84>>0]=1;i[r+85>>0]=0;i[r+86>>0]=0;i[r+87>>0]=0;i[r+88>>0]=v;i[r+89>>0]=0;t[r+92>>2]=0;r=t[f>>2]|0}a=f+48|0;n=f+16|0;if((t[((r&3|0)==3?f:a)+40>>2]|0)==(e|0)){r=t[n>>2]|0;c[r+16>>3]=l;c[r+24>>3]=s;c[r+32>>3]=0.0;t[r+40>>2]=0;i[r+44>>0]=1;i[r+45>>0]=0;i[r+46>>0]=0;i[r+47>>0]=0;i[r+48>>0]=v;i[r+49>>0]=0;t[r+52>>2]=0}if((i[(t[n>>2]|0)+112>>0]|0)!=1){f=0;continue}r=t[(t[((t[f>>2]&3|0)==3?f:a)+40>>2]|0)+16>>2]|0;if((i[r+156>>0]|0)!=1){f=0;continue}if((t[r+176>>2]|0)!=1){f=0;continue}f=t[t[r+172>>2]>>2]|0}u=t[(t[u+16>>2]|0)+172>>2]|0}d=d+1|0}i[(t[E>>2]|0)+145>>0]=1;h=B;return}function Yz(e){e=e|0;var A=0,r=0,i=0;EL(e);A=t[e>>2]&3;r=e+-48|0;i=e+48|0;A=dL(t[((A|0)==2?e:r)+40>>2]|0,t[((A|0)==3?e:i)+40>>2]|0)|0;if(!A){A=t[e>>2]&3;ZL(t[((A|0)==2?e:r)+40>>2]|0,t[((A|0)==3?e:i)+40>>2]|0,e)|0}else FL(e,A);return}function Fz(e){e=e|0;var A=0,r=0,a=0,n=0;a=e+16|0;r=0;while(1){e=t[a>>2]|0;if((r|0)>=(t[e+220>>2]|0))break;A=t[(t[e+216>>2]|0)+(r<<2)>>2]|0;t[e+192>>2]=A;e=A;A=e;while(1){if(!A)break;n=t[A+16>>2]|0;i[n+157>>0]=0;A=t[n+164>>2]|0}while(1){if(!e)break;Mz(e);e=t[(t[e+16>>2]|0)+164>>2]|0}r=r+1|0}return}function Mz(e){e=e|0;var A=0,r=0,a=0,n=0;n=e+16|0;A=t[n>>2]|0;e=A+157|0;if(!(i[e>>0]|0)){i[e>>0]=1;i[A+158>>0]=1;e=0;while(1){a=t[(t[A+180>>2]|0)+(e<<2)>>2]|0;if(!a)break;A=t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0;r=t[A+16>>2]|0;if(!(i[r+158>>0]|0)){if(!(i[r+157>>0]|0))Mz(A)}else{Yz(a);e=e+-1|0}e=e+1|0;A=t[n>>2]|0}i[A+158>>0]=0}return}function Vz(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;i=sd(e)|0;A=0;while(1){if(!i)break;r=Ow(e,i)|0;while(1){if(!r)break;n=t[r>>2]&3;f=t[(t[(t[((n|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;n=t[(t[(t[((n|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;a=f-n|0;r=qw(e,r)|0;A=((f|0)==(n|0)?0:((a|0)>-1?a:0-a|0)+-1|0)+A|0}i=cd(e,i)|0}return A|0}function Nz(e){e=e|0;var A=0,r=0,a=0,n=0;r=sd(e)|0;while(1){if(!r)break;n=t[r+16>>2]|0;a=t[n+176>>2]|0;n=n+172|0;A=0;while(1){if((A|0)>=(a|0))break;i[(t[(t[(t[n>>2]|0)+(A<<2)>>2]|0)+16>>2]|0)+112>>0]=0;A=A+1|0}r=cd(e,r)|0}return}function Rz(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;b=k;l=t[A+24>>2]|0;xz(e);s=(l|0)==-1;o=A+8|0;f=s^1;u=t[15712]|0;a=1797693134862315708145274.0e284;n=0;while(1){if(!(s|(n|0)<(l|0)))break;r=sd(e)|0;while(1){if(!r)break;t[(t[r+16>>2]|0)+232>>2]=0;r=cd(e,r)|0}MD(e);i=+Jz(e);c[o>>3]=i;if(0){c[b>>3]=i;a3(u,87482,b)|0;i=+c[o>>3]}if(!(!(i<=+c[A>>3])&(!(a<=i)|f))){w=9;break}Hz(e);a=i;n=n+1|0}if((w|0)==9){w=A+20|0;t[A+16>>2]=t[w>>2];t[w>>2]=n}MD(e);Pz(e);Xz();c[o>>3]=+Jz(e);h=k;return}function xz(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0.0,u=0.0,b=0;t[46752]=$F((gk(e)|0)*24|0)|0;t[46751]=0;A=sd(e)|0;while(1){if(!A)break;t[(t[A+16>>2]|0)+120>>2]=-1;A=cd(e,A)|0}f=sd(e)|0;while(1){if(!f)break;l=f+16|0;do{if(!(t[(t[l>>2]|0)+216>>2]|0)){a=KF(4)|0;n=t[46752]|0;s=t[46751]|0;t[n+(s*24|0)>>2]=a;t[a>>2]=f;t[n+(s*24|0)+4>>2]=1;l=t[l>>2]|0;c[n+(s*24|0)+8>>3]=+c[l+32>>3];c[n+(s*24|0)+16>>3]=+c[l+40>>3];t[l+120>>2]=s;t[46751]=s+1}else{n=Ex(f)|0;s=n+16|0;A=t[s>>2]|0;r=t[A+120>>2]|0;if((r|0)>-1){n=t[46752]|0;a=t[n+(r*24|0)>>2]|0;i=n+(r*24|0)+4|0;s=t[i>>2]|0;t[i>>2]=s+1;t[a+(s<<2)>>2]=f;s=t[l>>2]|0;l=n+(r*24|0)+8|0;c[l>>3]=+c[l>>3]+ +c[s+32>>3];l=n+(r*24|0)+16|0;o=+c[l>>3];u=+c[s+40>>3];c[l>>3]=o>2]=r;break}r=KF(t[A+216>>2]<<2)|0;i=t[46752]|0;a=t[46751]|0;A=i+(a*24|0)|0;t[A>>2]=r;t[r>>2]=n;if((n|0)==(f|0)){c[i+(a*24|0)+8>>3]=+c[(t[s>>2]|0)+32>>3];r=1;A=f}else{t[(t[A>>2]|0)+4>>2]=f;b=t[s>>2]|0;A=t[l>>2]|0;c[i+(a*24|0)+8>>3]=+c[A+32>>3]+ +c[b+32>>3];r=2;A=+c[b+40>>3]<+c[A+40>>3]?f:n}t[i+(a*24|0)+4>>2]=r;c[i+(a*24|0)+16>>3]=+c[(t[A+16>>2]|0)+40>>3];t[(t[s>>2]|0)+120>>2]=a;t[(t[l>>2]|0)+120>>2]=a;t[46751]=a+1}}while(0);f=cd(e,f)|0}return}function Jz(e){e=e|0;var A=0.0,r=0.0,i=0,a=0,n=0,f=0.0,l=0.0;Pz(e);n=t[46749]|0;i=t[e+16>>2]|0;A=+(P(t[i+252>>2]|0,n+-1|0)|0);a=t[46750]|0;i=i+248|0;e=0;r=0.0;while(1){if((e|0)>=(n|0))break;f=+c[a+(e*40|0)+24>>3]+ +(P(t[i>>2]|0,t[a+(e*40|0)+16>>2]|0)|0);l=+c[a+(e*40|0)+32>>3]+A;e=e+1|0;A=l;r=r=(gk(e)|0))break;t[(t[46753]|0)+(A<<2)>>2]=A;A=A+1|0}Pz(e);Sz(e);jz(e);return}function Pz(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0.0,s=0,o=0;t[46749]=0;A=t[46750]|0;if(A|0){i=0;while(1){if((i|0)>=(t[46751]|0))break;r=t[A+(i*40|0)+4>>2]|0;if(r){G2(r);A=t[46750]|0}r=t[A+(i*40|0)+8>>2]|0;if(r){G2(r);A=t[46750]|0}i=i+1|0}G2(A)}t[46750]=KF((t[46751]|0)*40|0)|0;A=0;while(1){r=t[46751]|0;if((A|0)>=(r|0))break;s=KF(r<<2)|0;t[(t[46750]|0)+(A*40|0)+4>>2]=s;s=KF(t[46751]<<2)|0;o=t[46750]|0;t[o+(A*40|0)+8>>2]=s;t[o+(A*40|0)>>2]=A;t[o+(A*40|0)+12>>2]=0;t[o+(A*40|0)+16>>2]=0;o=o+(A*40|0)+24|0;t[o>>2]=0;t[o+4>>2]=0;t[o+8>>2]=0;t[o+12>>2]=0;A=A+1|0}i=sd(e)|0;while(1){if(!i)break;r=Ow(e,i)|0;while(1){if(!r)break;f=t[r>>2]|0;a=r+-48|0;n=t[46750]|0;A=t[(t[(t[((f&3|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){A=A+1|0;if((A|0)>=(t[(t[(t[((f&3|0)==2?r:a)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;f=n+(A*40|0)+16|0;t[f>>2]=(t[f>>2]|0)+1;f=t[r>>2]|0}r=qw(e,r)|0}i=cd(e,i)|0}f=t[46751]|0;s=t[46752]|0;o=t[46750]|0;r=e+16|0;A=0;while(1){if((A|0)>=(f|0))break;i=(t[t[s+(A*24|0)>>2]>>2]|0)+16|0;a=t[(t[i>>2]|0)+232>>2]|0;if((a|0)>=(t[46749]|0))t[46749]=a+1;n=o+(a*40|0)+24|0;l=+c[n>>3];c[n>>3]=l+ +c[s+(A*24|0)+8>>3]*72.0+(l>0.0?+(t[(t[r>>2]|0)+248>>2]|0):0.0);n=o+(a*40|0)+32|0;l=+c[s+(A*24|0)+16>>3]*72.0;if(+c[n>>3]>3]=l;t[(t[o+(a*40|0)+4>>2]|0)+(t[o+(a*40|0)+12>>2]<<2)>>2]=s+(A*24|0);e=o+((t[(t[i>>2]|0)+232>>2]|0)*40|0)+12|0;t[e>>2]=(t[e>>2]|0)+1;A=A+1|0}return}function Xz(){var e=0,A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;c=t[46749]|0;o=t[46750]|0;s=0;A=0;e=0;while(1){if((s|0)>=(c|0))break;r=o+(s*40|0)|0;l=t[o+(s*40|0)+12>>2]|0;i=(A|0)==0;e:do{if(l)if(!i){if((t[r>>2]|0)>(e|0)){a=o+(s*40|0)+4|0;r=0;while(1){if((r|0)>=(l|0))break e;n=t[(t[a>>2]|0)+(r<<2)>>2]|0;f=t[n+4>>2]|0;i=0;while(1){if((i|0)>=(f|0))break;u=(t[(t[(t[n>>2]|0)+(i<<2)>>2]|0)+16>>2]|0)+232|0;t[u>>2]=(t[u>>2]|0)-A;i=i+1|0}r=r+1|0}}}else A=0;else{if(i)e=t[r>>2]|0;A=A+1|0}}while(0);s=s+1|0}return}function Sz(e){e=e|0;var A=0;A=t[46753]|0;_4(A,gk(e)|0,4,63);return}function jz(e){e=e|0;var A=0.0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0,h=0,w=0,k=0,d=0.0,v=0;l=t[46749]|0;s=t[46750]|0;n=t[46753]|0;f=0;while(1){if((f|0)>=(l|0)){r=0;A=0.0;break}r=t[n+(f<<2)>>2]|0;a=f+1|0;if((t[s+(r*40|0)+12>>2]|0)<2)f=a;else{o=4;break}}if((o|0)==4)if((l|0)>(a|0))A=+c[s+((t[n+(a<<2)>>2]|0)*40|0)+24>>3];else A=0.0;e:do{if((f|0)!=(l|0)){_4(t[s+(r*40|0)+4>>2]|0,t[s+(r*40|0)+12>>2]|0,4,64);n=t[46750]|0;d=+c[n+(r*40|0)+24>>3];d=!(A<=d*.25)&!(A>=d*.75)?A:d*.5;v=t[n+(r*40|0)+12>>2]|0;k=e+16|0;b=0;h=0;A=0.0;a=0;w=0;while(1){if((w|0)>=(a+v|0))break e;do{if(!(t[(t[n+(r*40|0)+8>>2]|0)+(w<<2)>>2]|0)){o=t[(t[n+(r*40|0)+4>>2]|0)+(w<<2)>>2]|0;e=o+8|0;u=+c[e>>3]*72.0+A+(A>0.0?+(t[(t[k>>2]|0)+248>>2]|0):0.0);f=(h|0)!=0;if(!(f&!(u<=d))){l=f?b:o;f=f?h:1;A=u;break}l=b+4|0;s=o+4|0;f=0;while(1){if((f|0)<(t[l>>2]|0))n=0;else break;while(1){if((n|0)>=(t[s>>2]|0))break;i[(t[(ZL(t[(t[b>>2]|0)+(f<<2)>>2]|0,t[(t[o>>2]|0)+(n<<2)>>2]|0,0)|0)+16>>2]|0)+112>>0]=1;n=n+1|0}f=f+1|0}n=t[46750]|0;t[(t[n+(r*40|0)+8>>2]|0)+(w<<2)>>2]=1;l=n+(r*40|0)+12|0;t[l>>2]=(t[l>>2]|0)+-1;l=n+(r*40|0)+16|0;t[l>>2]=(t[l>>2]|0)+1;l=n+(r*40|0)+24|0;c[l>>3]=+c[e>>3]*-72.0-+(t[(t[k>>2]|0)+248>>2]|0)+ +c[l>>3];l=b;f=h}else{l=b;f=h;a=a+1|0}}while(0);b=l;h=f;w=w+1|0}}}while(0);return}function Uz(e,A){e=e|0;A=A|0;e=Tz(t[e>>2]|0)|0;A=Tz(t[A>>2]|0)|0;return((A|0)<(e|0)&1)-((A|0)>(e|0)&1)|0}function Tz(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=e+4|0;r=0;A=0;while(1){if((r|0)>=(t[a>>2]|0))break;i=t[(t[e>>2]|0)+(r<<2)>>2]|0;n=Bd(i)|0;i=Ow(n,i)|0;while(1){if(!i)break;i=qw(n,i)|0;A=A+1|0}r=r+1|0}return A|0}function Oz(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0;a=t[46750]|0;i=+c[a+((t[A>>2]|0)*40|0)+24>>3];r=+c[a+((t[e>>2]|0)*40|0)+24>>3];return(i>r&1)-(i>2]|0)+216>>2]=0;A=cd(e,A)|0}return}function qz(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+32|0;a=n+16|0;i=n+8|0;r=n+20|0;t[r>>2]=5;e=Hw(e,99605)|0;if(e|0?(t[i>>2]=n,t[i+4>>2]=r,(V3(e,87497,i)|0)>=1):0)nw(0,87504,a)|0;t[A+24>>2]=0;t[A+32>>2]=0;h=n;return 0}function Kz(e){e=e|0;var A=0,r=0;A=t[47189]|0;if((((A|0)!=0?(r=Pw(e,A)|0,(r|0)!=0):0)?(i[r>>0]|0)!=0:0)?(mx(r)|0)<<24>>24==0:0)e=1;else e=0;return e|0}function $z(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;mW(e);A=sd(e)|0;while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;do{if(((t[(t[r+16>>2]|0)+172>>2]|0)==0?(Kz(r)|0)==0:0)?(i=r+48|0,a=Ex(t[((t[r>>2]&3|0)==3?r:i)+40>>2]|0)|0,n=r+-48|0,f=Ex(t[((t[r>>2]&3|0)==2?r:n)+40>>2]|0)|0,(a|0)!=(f|0)):0){if((t[(t[a+16>>2]|0)+212>>2]|0)==0?(t[(t[f+16>>2]|0)+212>>2]|0)==0:0){l=dL(a,f)|0;if(!l){ZL(a,f,r)|0;break}else{FL(r,l);break}}l=t[r>>2]&3;eW(e,t[((l|0)==3?r:i)+40>>2]|0,t[((l|0)==2?r:n)+40>>2]|0,r)}}while(0);r=qw(e,r)|0}A=cd(e,A)|0}return}function eW(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,l=0,s=0,c=0;s=t[a>>2]&3;n=t[(t[((s|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;l=t[n+212>>2]|0;if(!l)c=0;else c=(t[n+232>>2]|0)-(t[(t[(t[(t[l+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)|0;n=t[(t[((s|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;l=t[n+212>>2]|0;if(!l)n=0;else n=(t[(t[(t[(t[l+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)-(t[n+232>>2]|0)|0;s=a+16|0;c=n+c+(f[(t[s>>2]|0)+170>>1]|0)|0;e=zL(e)|0;i[(t[e+16>>2]|0)+156>>0]=2;l=Ex(A)|0;A=Ex(r)|0;r=oD(e,l,(c|0)>0?0.0:+(0-c|0),(t[(t[s>>2]|0)+156>>2]|0)*10|0)|0;t[(t[(oD(e,A,+(((c|0)>0?c:0)|0),t[(t[s>>2]|0)+156>>2]|0)|0)+16>>2]|0)+116>>2]=a;t[(t[r+16>>2]|0)+116>>2]=a;return}function AW(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var n=0,l=0,s=0,c=0;s=t[A>>2]&3;l=(s|0)==3?A:A+48|0;s=(s|0)==2?A:A+-48|0;s=t[(t[(t[((t[(t[(t[l+40>>2]|0)+16>>2]|0)+232>>2]|0)>(t[(t[(t[s+40>>2]|0)+16>>2]|0)+232>>2]|0)?l:s)+40>>2]|0)+16>>2]|0)+232>>2]|0;l=A+16|0;A=(t[l>>2]|0)+172|0;if(t[A>>2]|0)ge(87593,87615,148,87624);t[A>>2]=r;n=(i|0)==0;do{A=t[l>>2]|0;if(n)i=t[r+16>>2]|0;else{i=t[r+16>>2]|0;c=i+168|0;a[c>>1]=(f[c>>1]|0)+(f[A+168>>1]|0)}c=i+154|0;a[c>>1]=(f[c>>1]|0)+(f[A+154>>1]|0);i=i+156|0;t[i>>2]=(t[i>>2]|0)+(t[A+156>>2]|0);A=r+-48|0;i=t[((t[r>>2]&3|0)==2?r:A)+40>>2]|0;if((t[(t[i+16>>2]|0)+232>>2]|0)==(s|0))break;rW(e,i);r=t[t[(t[(t[((t[r>>2]&3|0)==2?r:A)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((r|0)!=0);return}function rW(e,A){e=e|0;A=A|0;var r=0.0;r=+((t[(t[e+16>>2]|0)+248>>2]|0)/2|0|0);A=t[A+16>>2]|0;e=A+88|0;c[e>>3]=+c[e>>3]+r;A=A+96|0;c[A>>3]=+c[A>>3]+r;return}function iW(e,A){e=e|0;A=A|0;var r=0,i=0;if(((((e|0)!=0&(A|0)!=0?(i=t[e>>2]&3,r=t[A>>2]&3,(t[((i|0)==3?e:e+48|0)+40>>2]|0)==(t[((r|0)==3?A:A+48|0)+40>>2]|0)):0)?(t[((i|0)==2?e:e+-48|0)+40>>2]|0)==(t[((r|0)==2?A:A+-48|0)+40>>2]|0):0)?(t[(t[e+16>>2]|0)+96>>2]|0)==(t[(t[A+16>>2]|0)+96>>2]|0):0)?(YD(e,A)|0)!=0:0)e=1;else e=0;return e|0}function aW(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;d=e+16|0;A=t[d>>2]|0;t[A+192>>2]=0;t[A+232>>2]=0;mW(e);A=1;while(1){r=t[d>>2]|0;if((A|0)>(t[r+180>>2]|0))break;pW(e,t[(t[r+184>>2]|0)+(A<<2)>>2]|0);A=A+1|0}f=sd(e)|0;while(1){if(!f)break;n=Ow(e,f)|0;while(1){if(!n)break;A=t[n>>2]|0;r=(t[(t[((A&3|0)==2?n:n+-48|0)+40>>2]|0)+16>>2]|0)+160|0;a=i[r>>0]|0;if(a<<24>>24<3){i[r>>0]=a+1<<24>>24;A=t[n>>2]|0}A=(t[(t[((A&3|0)==3?n:n+48|0)+40>>2]|0)+16>>2]|0)+160|0;r=i[A>>0]|0;if(r<<24>>24<3)i[A>>0]=r+1<<24>>24;n=qw(e,n)|0}f=cd(e,f)|0}u=sd(e)|0;while(1){if(!u)break;if((t[(t[u+16>>2]|0)+212>>2]|0)==0?(u|0)==(Ex(u)|0):0){GL(e,u);o=(t[d>>2]|0)+232|0;t[o>>2]=(t[o>>2]|0)+1}A=0;o=Ow(e,u)|0;while(1){if(!o)break;c=o+16|0;f=t[c>>2]|0;e:do{if(!(t[f+172>>2]|0)){if(tW(o)|0){if(!(iW(A,o)|0)){nW(e,o);A=o;break}r=t[(t[A+16>>2]|0)+172>>2]|0;if(r|0){AW(e,o,r,0);BL(o);break}c=t[o>>2]&3;if((t[(t[(t[((c|0)==3?o:o+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)!=(t[(t[(t[((c|0)==2?o:o+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;FL(o,A);BL(o);break}if(A){l=t[o>>2]&3;r=o+48|0;a=t[((l|0)==3?o:r)+40>>2]|0;n=t[A>>2]&3;if((a|0)==(t[((n|0)==3?A:A+48|0)+40>>2]|0)?(b=t[((l|0)==2?o:o+-48|0)+40>>2]|0,(b|0)==(t[((n|0)==2?A:A+-48|0)+40>>2]|0)):0){if((t[(t[a+16>>2]|0)+232>>2]|0)==(t[(t[b+16>>2]|0)+232>>2]|0)){FL(o,A);BL(o);break}if(((t[f+96>>2]|0)==0?(h=A+16|0,(t[(t[h>>2]|0)+96>>2]|0)==0):0)?(YD(o,A)|0)!=0:0)if(!(i[194954]|0)){AW(e,o,t[(t[h>>2]|0)+172>>2]|0,1);BL(o);break}else{i[(t[c>>2]|0)+112>>0]=6;break}else l=r}else l=r}else l=o+48|0;f=t[o>>2]&3;r=t[((f|0)==3?o:l)+40>>2]|0;s=o+-48|0;if((r|0)==(t[((f|0)==2?o:s)+40>>2]|0)){BL(o);A=o;break}r=Ex(r)|0;a=Ex(t[((t[o>>2]&3|0)==2?o:s)+40>>2]|0)|0;f=t[o>>2]&3;if((t[((f|0)==3?o:l)+40>>2]|0)==(r|0)?(t[((f|0)==2?o:s)+40>>2]|0)==(a|0):0){n=t[(t[r+16>>2]|0)+232>>2]|0;f=t[(t[a+16>>2]|0)+232>>2]|0;if((n|0)==(f|0)){WL(e,o);A=o;break}if((f|0)>(n|0)){fW(e,r,a,o);A=o;break}r=lk(e,a,r,0,0)|0;do{if(r|0?(w=t[r>>2]&3,k=t[((w|0)==2?r:r+-48|0)+40>>2]|0,(k|0)!=(t[((t[o>>2]&3|0)==2?o:s)+40>>2]|0)):0){a=r+16|0;if(!(t[(t[a>>2]|0)+172>>2]|0))fW(e,t[((w|0)==3?r:r+48|0)+40>>2]|0,k,r);if((t[(t[c>>2]|0)+96>>2]|0)==0?(t[(t[a>>2]|0)+96>>2]|0)==0:0){if(!(YD(o,r)|0))break;if(!(i[194954]|0)){BL(o);AW(e,o,t[(t[a>>2]|0)+172>>2]|0,1);break e}else{i[(t[c>>2]|0)+112>>0]=6;i[(t[a>>2]|0)+153>>0]=1;break e}}}}while(0);A=t[o>>2]&3;fW(e,t[((A|0)==2?o:s)+40>>2]|0,t[((A|0)==3?o:l)+40>>2]|0,o);A=o}}else A=o}while(0);o=qw(e,o)|0}u=cd(e,u)|0}if((mG(e)|0)!=(e|0)){A=t[(t[d>>2]|0)+216>>2]|0;if(!A)A=$F(4)|0;else A=AM(A,4)|0;d=t[d>>2]|0;t[d+216>>2]=A;t[A>>2]=t[d+192>>2]}return}function tW(e){e=e|0;var A=0;A=t[e>>2]&3;if((i[(t[(t[((A|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7)e=1;else e=(i[(t[(t[((A|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7&1;return e|0}function nW(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;a=cW(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;n=cW(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;l=(t[(t[a+16>>2]|0)+232>>2]|0)>(t[(t[n+16>>2]|0)+232>>2]|0);r=l?a:n;a=l?n:a;n=a+16|0;l=r+16|0;e:do{if((t[(t[n>>2]|0)+212>>2]|0)!=(t[(t[l>>2]|0)+212>>2]|0)){f=dL(a,r)|0;if(f|0){AW(e,A,f,1);break}if((t[(t[n>>2]|0)+232>>2]|0)!=(t[(t[l>>2]|0)+232>>2]|0)){fW(e,a,r,A);r=(t[A+16>>2]|0)+172|0;while(1){r=t[r>>2]|0;if(!r)break e;a=r+-48|0;if((t[(t[(t[((t[r>>2]&3|0)==2?r:a)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(t[(t[l>>2]|0)+232>>2]|0))break e;i[(t[r+16>>2]|0)+112>>0]=5;r=t[(t[(t[((t[r>>2]&3|0)==2?r:a)+40>>2]|0)+16>>2]|0)+180>>2]|0}}}}while(0);return}function fW(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0;c=i+16|0;a=t[c>>2]|0;if(!(t[a+96>>2]|0))s=-1;else s=((t[(t[r+16>>2]|0)+232>>2]|0)+(t[(t[A+16>>2]|0)+232>>2]|0)|0)/2|0;if(t[a+172>>2]|0)ge(87636,87615,89,87661);l=r+16|0;f=t[(t[A+16>>2]|0)+232>>2]|0;while(1){n=f+1|0;a=t[(t[l>>2]|0)+232>>2]|0;if((f|0)>=(a|0))break;if((n|0)<(a|0)){if((n|0)==(s|0))a=lW(e,i)|0;else a=sW(e)|0;t[(t[a+16>>2]|0)+232>>2]=n}else a=r;TQ(ZL(A,a,i)|0);f=n;A=a}if(!(t[(t[c>>2]|0)+172>>2]|0))ge(87672,87615,103,87661);else return}function lW(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0,f=0,l=0.0;f=A+16|0;n=t[(t[f>>2]|0)+96>>2]|0;r=+c[n+24>>3];a=+c[n+32>>3];n=zL(e)|0;A=n+16|0;t[(t[A>>2]|0)+104>>2]=t[(t[f>>2]|0)+96>>2];l=+(t[(t[(yd(n)|0)+16>>2]|0)+248>>2]|0);c[(t[A>>2]|0)+88>>3]=l;if(!(i[(t[f>>2]|0)+114>>0]|0)){e=(t[(t[(yd(e)|0)+16>>2]|0)+116>>2]&1|0)==0;f=t[A>>2]|0;c[f+80>>3]=e?a:r;c[f+96>>3]=e?r:a}return n|0}function sW(e){e=e|0;var A=0;A=zL(e)|0;rW(e,A);return A|0}function cW(e){e=e|0;var A=0;A=t[e+16>>2]|0;if((i[A+159>>0]|0)==7)e=t[(t[(t[(t[A+212>>2]|0)+16>>2]|0)+268>>2]|0)+(t[A+232>>2]<<2)>>2]|0;else e=Ex(e)|0;return e|0}function oW(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;s=mG(e)|0;f=sd(e)|0;while(1){if(!f)break;A=ek(s,f)|0;l=0;while(1){if(!A)break;o=Ak(s,A,f)|0;if(Wd(e,A)|0){c=l;A=o;l=c;continue}c=(t[A>>2]&3|0)==2?A:A+-48|0;u=(iW(l,c)|0)==0;i=t[c>>2]&3;A=t[((i|0)==3?c:c+48|0)+40>>2]|0;r=t[(t[A+16>>2]|0)+232>>2]|0;i=t[((i|0)==2?c:c+-48|0)+40>>2]|0;a=t[(t[i+16>>2]|0)+232>>2]|0;n=(r|0)==(a|0);if(!u){t[(t[c+16>>2]|0)+172>>2]=n?l:0;A=t[(t[l+16>>2]|0)+172>>2]|0;if(!A){u=l;A=o;l=u;continue}AW(e,c,A,0);yL(c);u=l;A=o;l=u;continue}if(!n)if((a|0)>(r|0)){uW(A,i,c);A=o;l=c;continue}else{uW(i,A,c);A=o;l=c;continue}A=gL(A,i)|0;if(!A){WL(s,c);A=o;l=c;continue}if((c|0)==(A|0)){u=l;A=o;l=u;continue}yL(c);if(t[(t[c+16>>2]|0)+172>>2]|0){u=l;A=o;l=u;continue}FL(c,A);u=l;A=o;l=u}f=cd(e,f)|0}return}function uW(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=bW(e)|0;i=bW(A)|0;hW(a,i,r,t[(t[r+16>>2]|0)+172>>2]|0,(a|0)==(e|0)&(i|0)==(A|0)?1:5);return}function bW(e){e=e|0;var A=0,r=0,a=0;A=t[e+16>>2]|0;r=t[A+212>>2]|0;if((r|0)!=0?(a=t[r+16>>2]|0,(i[a+272>>0]|0)==0):0)e=t[(t[a+268>>2]|0)+(t[A+232>>2]<<2)>>2]|0;return e|0}function hW(e,A,r,n,f){e=e|0;A=A|0;r=r|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0;b=e+16|0;c=t[(t[b>>2]|0)+232>>2]|0;h=A+16|0;l=t[(t[h>>2]|0)+232>>2]|0;if((l|0)<=(c|0))ge(87697,87725,81,87735);u=t[n>>2]&3;if(!((t[((u|0)==3?n:n+48|0)+40>>2]|0)==(e|0)?(t[((u|0)==2?n:n+-48|0)+40>>2]|0)==(A|0):0))o=5;e:do{if((o|0)==5){if((a[(t[n+16>>2]|0)+168>>1]|0)>1){t[(t[r+16>>2]|0)+172>>2]=0;if(((l-c|0)==1?(s=dL(e,A)|0,s|0):0)?YD(r,s)|0:0){FL(r,s);if(i[(t[b>>2]|0)+156>>0]|0)break;if(i[(t[h>>2]|0)+156>>0]|0)break;BL(r);break}u=f&255;f=e;o=t[(t[b>>2]|0)+232>>2]|0;while(1){l=t[(t[h>>2]|0)+232>>2]|0;if((o|0)>=(l|0))break e;if((o|0)<(l+-1|0)){l=mG(e)|0;s=n+-48|0;l=wW(l,t[((t[n>>2]&3|0)==2?n:s)+40>>2]|0)|0;c=n}else{l=A;s=n+-48|0;c=n}i[(t[(ZL(f,l,r)|0)+16>>2]|0)+112>>0]=u;b=(t[n+16>>2]|0)+168|0;a[b>>1]=(a[b>>1]|0)+-1<<16>>16;f=l;o=o+1|0;n=t[t[(t[(t[((t[c>>2]&3|0)==2?n:s)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}}do{if((l-c|0)==1){n=dL(e,A)|0;if(n|0?YD(r,n)|0:0){t[(t[r+16>>2]|0)+172>>2]=n;u=t[n+16>>2]|0;i[u+112>>0]=f;u=u+168|0;a[u>>1]=(a[u>>1]|0)+1<<16>>16;if(i[(t[b>>2]|0)+156>>0]|0)break;if(i[(t[h>>2]|0)+156>>0]|0)break;BL(r);break}t[(t[r+16>>2]|0)+172>>2]=0;n=ZL(e,A,r)|0;i[(t[n+16>>2]|0)+112>>0]=f}}while(0);l=t[(t[h>>2]|0)+232>>2]|0;if((l-(t[(t[b>>2]|0)+232>>2]|0)|0)>1){if((t[((t[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)==(e|0))o=l;else{b=r+16|0;t[(t[b>>2]|0)+172>>2]=0;o=ZL(e,t[((t[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0,r)|0;t[(t[b>>2]|0)+172>>2]=o;EL(n);n=o;o=t[(t[h>>2]|0)+232>>2]|0}while(1){l=t[n>>2]&3;s=t[((l|0)==2?n:n+-48|0)+40>>2]|0;c=t[s+16>>2]|0;if((t[c+232>>2]|0)==(o|0))break;n=t[t[c+180>>2]>>2]|0}if((s|0)!=(A|0)){i[(t[(ZL(t[((l|0)==3?n:n+48|0)+40>>2]|0,A,r)|0)+16>>2]|0)+112>>0]=f;EL(n)}}}}while(0);return}function wW(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=A+16|0;A=t[r>>2]|0;i=t[A+232>>2]|0;kW(e,i,t[A+236>>2]|0,2);A=zL(e)|0;r=t[r>>2]|0;a=t[A+16>>2]|0;c[a+88>>3]=+c[r+88>>3];c[a+96>>3]=+c[r+96>>3];t[a+232>>2]=t[r+232>>2];r=(t[r+236>>2]|0)+1|0;t[a+236>>2]=r;t[(t[(t[(t[e+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0)+(r<<2)>>2]=A;return A|0}function kW(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;f=e+16|0;a=t[(t[f>>2]|0)+196>>2]|0;l=t[a+(A<<6)+4>>2]|0;e:do{if((i|0)<1){r=r-i|0;while(1){n=r+1|0;e=t[a+(A<<6)>>2]|0;if((n|0)>=(e|0))break;e=t[l+(n<<2)>>2]|0;a=r+i|0;t[(t[e+16>>2]|0)+236>>2]=a;t[l+(a<<2)>>2]=e;r=n;a=t[(t[f>>2]|0)+196>>2]|0}n=i+-1|0;r=n+e|0;while(1){if((r|0)>=(e|0))break e;t[l+(r<<2)>>2]=0;a=t[(t[f>>2]|0)+196>>2]|0;r=r+1|0;e=t[a+(A<<6)>>2]|0}}else{n=i+-1|0;e=t[a+(A<<6)>>2]|0;while(1){e=e+-1|0;if((e|0)<=(r|0))break;s=t[l+(e<<2)>>2]|0;a=n+e|0;t[(t[s+16>>2]|0)+236>>2]=a;t[l+(a<<2)>>2]=s}a=i+r|0;e=r;while(1){e=e+1|0;if((e|0)>=(a|0))break;t[l+(e<<2)>>2]=0}e=t[(t[f>>2]|0)+196>>2]|0;a=e;e=t[e+(A<<6)>>2]|0}}while(0);t[a+(A<<6)>>2]=n+e;return}function dW(e){e=e|0;var A=0;aW(e);A=t[e+16>>2]|0;t[A+220>>2]=1;t[t[A+216>>2]>>2]=t[A+192>>2];SQ(e);yQ(e,0);vW(e);oW(e);gW(e);return}function vW(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;c=mG(e)|0;o=e+16|0;r=t[o>>2]|0;s=a[r+236>>1]|0;A=s<<16>>16;u=c+16|0;if(s<<16>>16>0)i[(t[(t[u>>2]|0)+196>>2]|0)+(A+-1<<6)+49>>0]=0;s=A;while(1){if((s|0)>(a[r+238>>1]|0))break;l=t[(t[(t[(t[r+268>>2]|0)+(s<<2)>>2]|0)+16>>2]|0)+236>>2]|0;kW(c,s,l,t[(t[r+196>>2]|0)+(s<<6)>>2]|0);n=0;f=l;while(1){r=t[o>>2]|0;A=t[r+196>>2]|0;if((n|0)>=(t[A+(s<<6)>>2]|0))break;A=t[(t[A+(s<<6)+4>>2]|0)+(n<<2)>>2]|0;t[(t[(t[(t[u>>2]|0)+196>>2]|0)+(s<<6)+4>>2]|0)+(f<<2)>>2]=A;r=t[A+16>>2]|0;t[r+236>>2]=f;if((i[r+156>>0]|0)==1)t[A+24>>2]=yd(c)|0;QL(e,A);GL(c,A);r=(t[u>>2]|0)+232|0;t[r>>2]=(t[r>>2]|0)+1;n=n+1|0;f=f+1|0}f=t[(t[u>>2]|0)+196>>2]|0;t[A+(s<<6)+4>>2]=(t[f+(s<<6)+4>>2]|0)+(l<<2);i[f+(s<<6)+49>>0]=0;s=s+1|0}A=t[u>>2]|0;if((s|0)<(a[A+238>>1]|0))i[(t[A+196>>2]|0)+(s<<6)+49>>0]=0;i[r+272>>0]=1;return}function gW(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0;l=e+16|0;A=t[l>>2]|0;f=a[A+236>>1]|0;while(1){if((f|0)>(a[A+238>>1]|0))break;i=t[(t[A+268>>2]|0)+(f<<2)>>2]|0;n=i+16|0;while(1){A=t[n>>2]|0;r=t[t[A+180>>2]>>2]|0;if(!r)break;EL(r)}while(1){A=t[t[A+172>>2]>>2]|0;if(!A)break;EL(A);A=t[n>>2]|0}QL(mG(e)|0,i);t[(t[(t[l>>2]|0)+268>>2]|0)+(f<<2)>>2]=0;f=f+1|0;A=t[l>>2]|0}return}function mW(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b;a=sd(e)|0;while(1){if(!a)break;r=a+16|0;A=t[r>>2]|0;if((i[A+159>>0]|0)==7){yx(a);A=t[r>>2]|0}t[A+212>>2]=0;a=cd(e,a)|0}o=e+16|0;c=1;while(1){A=t[o>>2]|0;if((c|0)>(t[A+180>>2]|0))break;f=t[(t[A+184>>2]|0)+(c<<2)>>2]|0;l=f+16|0;A=sd(f)|0;e:while(1){if(!A)break;s=cd(f,A)|0;r=A+16|0;if(i[(t[r>>2]|0)+159>>0]|0){a=Mk(A)|0;n=Mk(e)|0;t[u>>2]=a;t[u+4>>2]=n;nw(0,87744,u)|0;Ed(f,A)|0;A=s;continue}Cx(A,t[(t[l>>2]|0)+264>>2]|0);n=t[r>>2]|0;t[n+212>>2]=f;i[n+159>>0]=7;n=Ow(f,A)|0;while(1){if(!n){A=s;continue e}A=t[(t[n+16>>2]|0)+172>>2]|0;A:do{if(A|0)do{r=A+-48|0;a=t[(t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)+16>>2]|0;if((i[a+156>>0]|0)!=1)break A;t[a+212>>2]=f;A=t[t[(t[(t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((A|0)!=0)}while(0);n=qw(f,n)|0}}c=c+1|0}h=b;return}function pW(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,c=0;c=A+16|0;n=KF((a[(t[c>>2]|0)+238>>1]<<2)+8|0)|0;r=t[c>>2]|0;t[r+268>>2]=n;n=0;f=a[r+236>>1]|0;while(1){if((f|0)>(a[r+238>>1]|0))break;r=zL(e)|0;t[(t[(t[c>>2]|0)+268>>2]|0)+(f<<2)>>2]=r;s=t[r+16>>2]|0;t[s+232>>2]=f;i[s+159>>0]=7;t[s+212>>2]=A;if(n|0){s=(t[(ZL(n,r,0)|0)+16>>2]|0)+154|0;a[s>>1]=(a[s>>1]|0)*1e3}n=r;f=f+1|0;r=t[c>>2]|0}s=sd(A)|0;while(1){r=t[c>>2]|0;if(!s)break;f=(t[(t[r+268>>2]|0)+(t[(t[s+16>>2]|0)+232>>2]<<2)>>2]|0)+16|0;r=(t[f>>2]|0)+216|0;t[r>>2]=(t[r>>2]|0)+1;r=Ow(A,s)|0;while(1){if(!r)break;l=t[r>>2]|0;e=r+-48|0;n=t[(t[(t[((l&3|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){if((n|0)>=(t[(t[(t[((l&3|0)==2?r:e)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;l=(t[(t[t[(t[f>>2]|0)+180>>2]>>2]|0)+16>>2]|0)+168|0;a[l>>1]=(a[l>>1]|0)+1<<16>>16;n=n+1|0;l=t[r>>2]|0}r=qw(A,r)|0}s=cd(A,s)|0}e=a[r+238>>1]|0;l=r+268|0;r=a[r+236>>1]|0;while(1){if((r|0)>(e|0))break;n=(t[(t[(t[l>>2]|0)+(r<<2)>>2]|0)+16>>2]|0)+216|0;f=t[n>>2]|0;if((f|0)>1)t[n>>2]=f+-1;r=r+1|0}return}function EW(e,A,r,n){e=e|0;A=A|0;r=r|0;n=n|0;var f=0,l=0,s=0,c=0;c=(t[(t[A+16>>2]|0)+212>>2]|0)+16|0;A=t[c>>2]|0;s=r+1|0;if((s|0)!=(i[A+273>>0]|0)){l=a[A+236>>1]|0;while(1){f=a[A+238>>1]|0;if((l|0)>(f<<16>>16|0))break;RQ(e,t[(t[A+268>>2]|0)+(l<<2)>>2]|0);l=l+1|0;A=t[c>>2]|0}l=a[A+236>>1]|0;while(1){if((l|0)>(f<<16>>16|0))break;xQ(n,t[(t[A+268>>2]|0)+(l<<2)>>2]|0,r);e=t[c>>2]|0;l=l+1|0;f=a[e+238>>1]|0;A=e}i[A+273>>0]=s}return}function BW(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=sd(e)|0;while(1){if(!f)break;t[(t[f+16>>2]|0)+212>>2]=0;n=Ow(e,f)|0;while(1){if(!n)break;A=t[(t[n+16>>2]|0)+172>>2]|0;e:do{if(A|0)do{r=A+-48|0;a=t[(t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)+16>>2]|0;if((i[a+156>>0]|0)!=1)break e;t[a+212>>2]=0;A=t[t[(t[(t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((A|0)!=0)}while(0);n=qw(e,n)|0}f=cd(e,f)|0}yW(e);return}function yW(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;r=e+16|0;A=1;while(1){a=t[r>>2]|0;if((A|0)>(t[a+180>>2]|0))break;yW(t[(t[a+184>>2]|0)+(A<<2)>>2]|0);A=A+1|0}l=sd(e)|0;while(1){if(!l)break;A=(t[l+16>>2]|0)+212|0;if(!(t[A>>2]|0))t[A>>2]=e;f=Ow(e,l)|0;while(1){if(!f)break;A=t[(t[f+16>>2]|0)+172>>2]|0;e:do{if(A|0)do{r=t[A>>2]|0;n=A+-48|0;a=t[(t[((r&3|0)==2?A:n)+40>>2]|0)+16>>2]|0;if((i[a+156>>0]|0)!=1)break e;a=a+212|0;if(!(t[a>>2]|0)){t[a>>2]=e;r=t[A>>2]|0}A=t[t[(t[(t[((r&3|0)==2?A:n)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((A|0)!=0)}while(0);f=qw(e,f)|0}l=cd(e,l)|0}return}function CW(e){e=e|0;var A=0,r=0,i=0;i=qx(e)|0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;IW(A,i);A=qw(e,A)|0}r=cd(e,r)|0}Ph(i)|0;return}function IW(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0;N=h;h=h+320|0;W=N+296|0;z=N+280|0;B=N+136|0;E=N+120|0;u=N+104|0;l=N+88|0;a=N+80|0;Q=N+16|0;C=N;s=N+264|0;c=N+248|0;o=N+232|0;b=N+216|0;I=N+200|0;Z=N+184|0;y=N+168|0;L=N+152|0;n=ZW(Hw(e,87798)|0,A)|0;k=ZW(Hw(e,87804)|0,A)|0;d=(k|0)!=0;A=(n|0)!=0;do{if(A|d?(V=e+16|0,i=t[(t[V>>2]|0)+8>>2]|0,i|0):0){if((t[i+4>>2]|0)>1){M=Mk(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;V=Mk(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0;t[a>>2]=M;t[a+4>>2]=V;nw(0,87810,a)|0;break}Y=t[i>>2]|0;i=t[Y+4>>2]|0;w=t[e>>2]&3;v=e+-48|0;g=t[((w|0)==2?e:v)+40>>2]|0;m=e+48|0;w=t[((w|0)==3?e:m)+40>>2]|0;F=$F(48)|0;p=Y+12|0;t[F+12>>2]=t[p>>2];G=Y+8|0;t[F+8>>2]=t[G>>2];do{if(A){f=(t[n+16>>2]|0)+16|0;n=(t[g+16>>2]|0)+16|0;t[W>>2]=t[n>>2];t[W+4>>2]=t[n+4>>2];t[W+8>>2]=t[n+8>>2];t[W+12>>2]=t[n+12>>2];if(!(GW(W,f)|0)){b=Mk(t[((t[e>>2]&3|0)==3?e:m)+40>>2]|0)|0;D=Mk(t[((t[e>>2]&3|0)==2?e:v)+40>>2]|0)|0;M=Hw(e,87798)|0;t[l>>2]=b;t[l+4>>2]=D;t[l+8>>2]=M;nw(0,87851,l)|0;M=26;break}A=t[Y>>2]|0;t[W>>2]=t[A>>2];t[W+4>>2]=t[A+4>>2];t[W+8>>2]=t[A+8>>2];t[W+12>>2]=t[A+12>>2];if(GW(W,f)|0){D=(t[w+16>>2]|0)+16|0;t[W>>2]=t[D>>2];t[W+4>>2]=t[D+4>>2];t[W+8>>2]=t[D+8>>2];t[W+12>>2]=t[D+12>>2];if(GW(W,f)|0){b=Mk(t[((t[e>>2]&3|0)==3?e:m)+40>>2]|0)|0;D=Mk(t[((t[e>>2]&3|0)==2?e:v)+40>>2]|0)|0;M=Hw(e,87798)|0;t[u>>2]=b;t[u+4>>2]=D;t[u+8>>2]=M;nw(0,87894,u)|0;M=26;break}if(!(t[G>>2]|0))ge(87936,87947,369,87958);b=Y+16|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];t[W>>2]=t[b>>2];t[W+4>>2]=t[b+4>>2];t[W+8>>2]=t[b+8>>2];t[W+12>>2]=t[b+12>>2];LW(C,z,W,f);D=(t[Y>>2]|0)+48|0;t[D>>2]=t[C>>2];t[D+4>>2]=t[C+4>>2];t[D+8>>2]=t[C+8>>2];t[D+12>>2]=t[C+12>>2];D=(t[Y>>2]|0)+16|0;t[z>>2]=t[C>>2];t[z+4>>2]=t[C+4>>2];t[z+8>>2]=t[C+8>>2];t[z+12>>2]=t[C+12>>2];t[W>>2]=t[b>>2];t[W+4>>2]=t[b+4>>2];t[W+8>>2]=t[b+8>>2];t[W+12>>2]=t[b+12>>2];QW(s,z,W);t[D>>2]=t[s>>2];t[D+4>>2]=t[s+4>>2];t[D+8>>2]=t[s+8>>2];t[D+12>>2]=t[s+12>>2];D=t[Y>>2]|0;A=D+16|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];t[W>>2]=t[b>>2];t[W+4>>2]=t[b+4>>2];t[W+8>>2]=t[b+8>>2];t[W+12>>2]=t[b+12>>2];QW(c,z,W);t[D>>2]=t[c>>2];t[D+4>>2]=t[c+4>>2];t[D+8>>2]=t[c+8>>2];t[D+12>>2]=t[c+12>>2];D=t[Y>>2]|0;A=D+32|0;D=D+16|0;t[z>>2]=t[D>>2];t[z+4>>2]=t[D+4>>2];t[z+8>>2]=t[D+8>>2];t[z+12>>2]=t[D+12>>2];t[W>>2]=t[C>>2];t[W+4>>2]=t[C+4>>2];t[W+8>>2]=t[C+8>>2];t[W+12>>2]=t[C+12>>2];QW(o,z,W);t[A>>2]=t[o>>2];t[A+4>>2]=t[o+4>>2];t[A+8>>2]=t[o+8>>2];t[A+12>>2]=t[o+12>>2];A=t[p>>2]|0;if(!A){D=3;break}D=(jE(e,t[Y>>2]|0,0,0,F,A)|0)+3|0;break}n=i+-1|0;A=0;while(1){if((A|0)>=(n|0))break;if(DW((t[Y>>2]|0)+(A<<4)|0,f)|0)break;A=A+3|0}i=t[p>>2]|0;a=(i|0)!=0;if((A|0)==(n|0))if(a){D=F+32|0;o=Y+32|0;u=(t[Y>>2]|0)+(n<<4)|0;t[z>>2]=t[o>>2];t[z+4>>2]=t[o+4>>2];t[z+8>>2]=t[o+8>>2];t[z+12>>2]=t[o+12>>2];t[W>>2]=t[u>>2];t[W+4>>2]=t[u+4>>2];t[W+8>>2]=t[u+8>>2];t[W+12>>2]=t[u+12>>2];LW(b,z,W,f);t[D>>2]=t[b>>2];t[D+4>>2]=t[b+4>>2];t[D+8>>2]=t[b+8>>2];t[D+12>>2]=t[b+12>>2];D=n;break}else ge(87975,87947,387,87958);else{if(a)A=jE(e,t[Y>>2]|0,0,A,F,i)|0;D=A+3|0;break}}else M=26}while(0);if((M|0)==26){A=i+-1|0;if(!(t[p>>2]|0))D=A;else{D=F+32|0;b=Y+32|0;t[D>>2]=t[b>>2];t[D+4>>2]=t[b+4>>2];t[D+8>>2]=t[b+8>>2];t[D+12>>2]=t[b+12>>2];D=A}}do{if(d){a=(t[k+16>>2]|0)+16|0;d=(t[w+16>>2]|0)+16|0;t[W>>2]=t[d>>2];t[W+4>>2]=t[d+4>>2];t[W+8>>2]=t[d+8>>2];t[W+12>>2]=t[d+12>>2];if(!(GW(W,a)|0)){z=Mk(t[((t[e>>2]&3|0)==3?e:m)+40>>2]|0)|0;W=Mk(t[((t[e>>2]&3|0)==2?e:v)+40>>2]|0)|0;M=Hw(e,87804)|0;t[E>>2]=z;t[E+4>>2]=W;t[E+8>>2]=M;nw(0,87986,E)|0;M=52;break}A=(t[Y>>2]|0)+(D<<4)|0;t[W>>2]=t[A>>2];t[W+4>>2]=t[A+4>>2];t[W+8>>2]=t[A+8>>2];t[W+12>>2]=t[A+12>>2];if(GW(W,a)|0){Q=(t[g+16>>2]|0)+16|0;t[W>>2]=t[Q>>2];t[W+4>>2]=t[Q+4>>2];t[W+8>>2]=t[Q+8>>2];t[W+12>>2]=t[Q+12>>2];if(GW(W,a)|0){z=Mk(t[((t[e>>2]&3|0)==3?e:m)+40>>2]|0)|0;W=Mk(t[((t[e>>2]&3|0)==2?e:v)+40>>2]|0)|0;M=Hw(e,87804)|0;t[B>>2]=z;t[B+4>>2]=W;t[B+8>>2]=M;nw(0,88029,B)|0;M=52;break}if(!(t[p>>2]|0))ge(87975,87947,429,87958);B=F+32|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];t[W>>2]=t[B>>2];t[W+4>>2]=t[B+4>>2];t[W+8>>2]=t[B+8>>2];t[W+12>>2]=t[B+12>>2];LW(C,z,W,a);r=D+-3|0;Q=(t[Y>>2]|0)+(r<<4)|0;t[Q>>2]=t[C>>2];t[Q+4>>2]=t[C+4>>2];t[Q+8>>2]=t[C+8>>2];t[Q+12>>2]=t[C+12>>2];Q=D+-1|0;A=(t[Y>>2]|0)+(Q<<4)|0;t[z>>2]=t[C>>2];t[z+4>>2]=t[C+4>>2];t[z+8>>2]=t[C+8>>2];t[z+12>>2]=t[C+12>>2];t[W>>2]=t[B>>2];t[W+4>>2]=t[B+4>>2];t[W+8>>2]=t[B+8>>2];t[W+12>>2]=t[B+12>>2];QW(I,z,W);t[A>>2]=t[I>>2];t[A+4>>2]=t[I+4>>2];t[A+8>>2]=t[I+8>>2];t[A+12>>2]=t[I+12>>2];A=t[Y>>2]|0;L=A+(D<<4)|0;A=A+(Q<<4)|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];t[W>>2]=t[B>>2];t[W+4>>2]=t[B+4>>2];t[W+8>>2]=t[B+8>>2];t[W+12>>2]=t[B+12>>2];QW(Z,z,W);t[L>>2]=t[Z>>2];t[L+4>>2]=t[Z+4>>2];t[L+8>>2]=t[Z+8>>2];t[L+12>>2]=t[Z+12>>2];L=t[Y>>2]|0;A=L+(D+-2<<4)|0;Q=L+(Q<<4)|0;t[z>>2]=t[Q>>2];t[z+4>>2]=t[Q+4>>2];t[z+8>>2]=t[Q+8>>2];t[z+12>>2]=t[Q+12>>2];t[W>>2]=t[C>>2];t[W+4>>2]=t[C+4>>2];t[W+8>>2]=t[C+8>>2];t[W+12>>2]=t[C+12>>2];QW(y,z,W);t[A>>2]=t[y>>2];t[A+4>>2]=t[y+4>>2];t[A+8>>2]=t[y+8>>2];t[A+12>>2]=t[y+12>>2];A=t[G>>2]|0;if(!A)break;r=TE(e,t[Y>>2]|0,r,r,F,A)|0;break}i=D;while(1){if((i|0)>0)A=0;else break;while(1){if((A|0)==4)break;Z=Q+(A<<4)|0;I=(t[Y>>2]|0)+(i-A<<4)|0;t[Z>>2]=t[I>>2];t[Z+4>>2]=t[I+4>>2];t[Z+8>>2]=t[I+8>>2];t[Z+12>>2]=t[I+12>>2];A=A+1|0}if(DW(Q,a)|0){A=0;M=43;break}i=i+-3|0}e:do{if((M|0)==43)while(1){M=0;if((A|0)==4)break e;M=(t[Y>>2]|0)+(i-A<<4)|0;Z=Q+(A<<4)|0;t[M>>2]=t[Z>>2];t[M+4>>2]=t[Z+4>>2];t[M+8>>2]=t[Z+8>>2];t[M+12>>2]=t[Z+12>>2];A=A+1|0;M=43}}while(0);if(i|0){r=i+-3|0;A=t[G>>2]|0;if(!A)break;r=TE(e,t[Y>>2]|0,r,D+-3|0,F,A)|0;break}if(!(t[G>>2]|0))ge(87936,87947,452,87958);else{r=F+16|0;Q=Y+16|0;e=t[Y>>2]|0;t[z>>2]=t[Q>>2];t[z+4>>2]=t[Q+4>>2];t[z+8>>2]=t[Q+8>>2];t[z+12>>2]=t[Q+12>>2];t[W>>2]=t[e>>2];t[W+4>>2]=t[e+4>>2];t[W+8>>2]=t[e+8>>2];t[W+12>>2]=t[e+12>>2];LW(L,z,W,a);t[r>>2]=t[L>>2];t[r+4>>2]=t[L+4>>2];t[r+8>>2]=t[L+8>>2];t[r+12>>2]=t[L+12>>2];r=0;break}}else M=52}while(0);if((M|0)==52)if(!(t[G>>2]|0))r=0;else{r=F+16|0;M=Y+16|0;t[r>>2]=t[M>>2];t[r+4>>2]=t[M+4>>2];t[r+8>>2]=t[M+8>>2];t[r+12>>2]=t[M+12>>2];r=0}A=D-r+1|0;i=F+4|0;t[i>>2]=A;t[F>>2]=$F(A<<4)|0;A=0;while(1){if((A|0)>=(t[i>>2]|0))break;M=(t[F>>2]|0)+(A<<4)|0;e=(t[Y>>2]|0)+(r<<4)|0;t[M>>2]=t[e>>2];t[M+4>>2]=t[e+4>>2];t[M+8>>2]=t[e+8>>2];t[M+12>>2]=t[e+12>>2];r=r+1|0;A=A+1|0}G2(t[Y>>2]|0);G2(Y);t[t[(t[V>>2]|0)+8>>2]>>2]=F}}while(0);h=N;return}function ZW(e,A){e=e|0;A=A|0;var r=0,a=0;a=h;h=h+16|0;r=a;if((e|0)!=0?(i[e>>0]|0)!=0:0){A=$x(A,e)|0;if(!A){t[r>>2]=e;nw(0,88149,r)|0;A=0}}else A=0;h=a;return A|0}function GW(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+c[e>>3];if((+c[A>>3]<=i?i<=+c[A+16>>3]:0)?(r=+c[e+8>>3],+c[A+8>>3]<=r):0)e=r<=+c[A+24>>3]&1;else e=0;return e|0}function LW(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0,l=0.0,s=0.0,o=0.0,u=0,b=0.0,w=0.0,k=0.0,d=0.0,v=0.0,g=0.0,m=0,p=0,E=0,B=0,y=0.0,C=0,I=0,Z=0,G=0;G=h;h=h+464|0;u=G+48|0;Z=G+32|0;m=G+16|0;p=G;E=G+364|0;B=G+264|0;C=G+164|0;I=G+64|0;k=+c[A>>3];d=+c[A+8>>3];v=+c[r>>3];g=+c[r+8>>3];t[m>>2]=t[i>>2];t[m+4>>2]=t[i+4>>2];t[m+8>>2]=t[i+8>>2];t[m+12>>2]=t[i+12>>2];i=i+16|0;t[p>>2]=t[i>>2];t[p+4>>2]=t[i+4>>2];t[p+8>>2]=t[i+8>>2];t[p+12>>2]=t[i+12>>2];s=+c[m>>3];if((v=+c[m+8>>3]):0)?a<=+c[p+8>>3]:0){b=a;w=s}else f=4;do{if((f|0)==4){l=+c[p>>3];if(v>l){n=d+ +(~~((l-k)*(d-g)/(k-v))|0);a=+c[m+8>>3];if(n>=a?n<=+c[p+8>>3]:0){b=n;w=l;break}}else a=+c[m+8>>3];if(g=s)|!(o<=l))):0){b=a;w=o;break}a=+c[p+8>>3];if(g>a?(y=k+ +(~~((a-d)*(k-v)/(d-g))|0),!(!(y>=s)|!(y<=l))):0){b=a;w=y;break}t[u>>2]=t[A>>2];t[u+4>>2]=t[A+4>>2];t[u+8>>2]=t[A+8>>2];t[u+12>>2]=t[A+12>>2];E=MW(u,E)|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];B=MW(u,B)|0;t[u>>2]=t[m>>2];t[u+4>>2]=t[m+4>>2];t[u+8>>2]=t[m+8>>2];t[u+12>>2]=t[m+12>>2];C=MW(u,C)|0;t[u>>2]=t[p>>2];t[u+4>>2]=t[p+4>>2];t[u+8>>2]=t[p+8>>2];t[u+12>>2]=t[p+12>>2];I=MW(u,I)|0;t[Z>>2]=E;t[Z+4>>2]=B;t[Z+8>>2]=C;t[Z+12>>2]=I;nw(1,88071,Z)|0;ge(138394,87947,78,88123)}}while(0);c[e>>3]=w;c[e+8>>3]=b;h=G;return}function QW(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=(+c[r+8>>3]+ +c[A+8>>3])*.5;c[e>>3]=(+c[r>>3]+ +c[A>>3])*.5;c[e+8>>3]=i;return}function DW(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+80|0;l=o+16|0;s=o;i=0;while(1){if((i|0)==4)break;f=l+(i<<4)|0;n=e+(i<<4)|0;t[f>>2]=t[n>>2];t[f+4>>2]=t[n+4>>2];t[f+8>>2]=t[n+8>>2];t[f+12>>2]=t[n+12>>2];i=i+1|0}i=A+8|0;f=A+24|0;r=+zW(e,0.0,1.0,+c[A>>3],+c[i>>3],+c[f>>3]);if(r>=0.0&r<2.0)Zx(s,l,3,r,e,0);else r=2.0;n=A+16|0;a=+zW(e,0.0,r>1.0?1.0:r,+c[n>>3],+c[i>>3],+c[f>>3]);if(a>=0.0&a1.0?1.0:r,+c[i>>3],+c[A>>3],+c[n>>3]);if(a>=0.0&a1.0?1.0:r,+c[f>>3],+c[A>>3],+c[n>>3]);if(a>=0.0&a>3]-i))<=.005){A=+c[e+56>>3];A=!(A>=a)|!(A<=t)?-1.0:r;break e}break}default:{}}Zx(f,e,3,.5,l,s);n=(r+A)*.5;A=+zW(l,A,n,i,a,t);if(!(A>=0.0))A=+zW(s,n,r,i,a,t)}}while(0);h=o;return+A}function WW(e,A,r,i,a,t){e=e|0;A=+A;r=+r;i=+i;a=+a;t=+t;var n=0.0,f=0,l=0,s=0,o=0;o=h;h=h+144|0;l=o+80|0;s=o+16|0;f=o;e:do{if(!(A==r)){switch(YW(e,i)|0){case 0:{A=-1.0;break e}case 1:{if(+Q(+(+c[e+56>>3]-i))<=.005){A=+c[e+48>>3];A=!(A>=a)|!(A<=t)?-1.0:r;break e}break}default:{}}Zx(f,e,3,.5,l,s);n=(r+A)*.5;A=+WW(l,A,n,i,a,t);if(!(A>=0.0))A=+WW(s,n,r,i,a,t)}}while(0);h=o;return+A}function YW(e,A){e=e|0;A=+A;var r=0,i=0,a=0,t=0.0,n=0,f=0;t=+c[e+8>>3];a=tA&1;r=1;i=a;a=(a|0)==0&1;while(1){if((r|0)==4)break;t=+c[e+(r<<4)+8>>3];f=tA&1;n=a+((i|0)!=0&(f|0)!=(i|0)&1)|0;r=r+1|0;i=f;a=n}return a|0}function FW(e,A){e=e|0;A=+A;var r=0,i=0,a=0,t=0.0,n=0,f=0;t=+c[e>>3];a=tA&1;r=1;i=a;a=(a|0)==0&1;while(1){if((r|0)==4)break;t=+c[e+(r<<4)>>3];f=tA&1;n=a+((i|0)!=0&(f|0)!=(i|0)&1)|0;r=r+1|0;i=f;a=n}return a|0}function MW(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0;r=h;h=h+16|0;i=r;a=+c[e+8>>3];c[i>>3]=+c[e>>3];c[i+8>>3]=a;T4(A,88137,i)|0;h=r;return A|0}function VW(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,g=0,m=0,p=0;p=h;h=h+16|0;k=p;m=4;g=Z2(40)|0;t[g>>2]=0;w=e+16|0;r=t[w>>2]|0;e:do{if(((a[r+238>>1]|0)-(a[r+236>>1]|0)|0)>=2){o=1;A=r;r=t[r+196>>2]|0;A:while(1){u=o+1|0;if(!(t[r+(u<<6)>>2]|0)){b=15;break}else c=0;while(1){f=t[r+(o<<6)>>2]|0;if((c|0)>=(f|0)){o=u;continue A}s=t[(t[r+(o<<6)+4>>2]|0)+(c<<2)>>2]|0;d=0;A=re(20,s|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,g|0,m|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){A=G;break A}if(A<<24>>24){l=c;A=f;while(1){n=l+1|0;if((n|0)>=(A|0))break;d=0;A=ie(65,s|0,t[(t[r+(o<<6)+4>>2]|0)+(n<<2)>>2]|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,g|0,m|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)==1){A=G;break A}if(!(A<<24>>24))break;A=t[(t[w>>2]|0)+196>>2]|0;l=n;r=A;A=t[A+(o<<6)>>2]|0}if((n-c|0)>1){d=0;ke(6,e|0,o|0,c|0,l|0,1);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,g|0,m|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;break A}}}r=t[w>>2]|0;c=c+1|0;A=r;r=t[r+196>>2]|0}}A:do{if((b|0)==15){while(1){if((o|0)>0)c=0;else break;while(1){r=t[A+196>>2]|0;f=t[r+(o<<6)>>2]|0;if((c|0)>=(f|0))break;s=t[(t[r+(o<<6)+4>>2]|0)+(c<<2)>>2]|0;d=0;A=re(21,s|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){n=L6(t[i>>2]|0,g|0,m|0)|0;if(!n)aA(i|0,v|0);G=v}else n=-1;if((n|0)==1){A=G;break A}if(A<<24>>24){l=c;A=f;while(1){n=l+1|0;if((n|0)>=(A|0))break;d=0;A=ie(66,s|0,t[(t[r+(o<<6)+4>>2]|0)+(n<<2)>>2]|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,g|0,m|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)==1){A=G;break A}if(!(A<<24>>24))break;A=t[(t[w>>2]|0)+196>>2]|0;l=n;r=A;A=t[A+(o<<6)>>2]|0}if((n-c|0)>1){d=0;ke(6,e|0,o|0,c|0,l|0,0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,g|0,m|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;break A}}}c=c+1|0;A=t[w>>2]|0}o=o+-1|0;b=15}g=G6(187016,1,g|0,m|0)|0;m=G;d=0;A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,g|0,m|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1)A=G;else A=0}}while(0);A:while(1){if(A){d=0;te(20,3,88177,k|0)|0;A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,g|0,m|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;continue}else break}else i=1;while(1){A=t[w>>2]|0;if((i|0)>(t[A+180>>2]|0))break e;d=0;oe(101,t[(t[A+184>>2]|0)+(i<<2)>>2]|0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,g|0,m|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;continue A}i=i+1|0}}}}while(0);G2(g|0);h=p;return}function NW(e){e=e|0;e=t[e+16>>2]|0;if(((i[e+156>>0]|0)==1?(t[e+176>>2]|0)==1:0)?(t[e+184>>2]|0)==1:0)e=(t[e+104>>2]|0)==0&1;else e=0;return e|0}function RW(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+80|0;f=l+40|0;n=l;i=t[t[(t[e+16>>2]|0)+172>>2]>>2]|0;e=t[t[(t[A+16>>2]|0)+172>>2]>>2]|0;if(((NW(A)|0)<<24>>24!=0?(t[((t[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)==(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0):0)?(SW(i,e)|0)<<24>>24!=0:0){r=(t[e+16>>2]|0)+16|0;a=n;e=(t[i+16>>2]|0)+16|0;A=a+40|0;do{t[a>>2]=t[e>>2];a=a+4|0;e=e+4|0}while((a|0)<(A|0));a=f;e=r;A=a+40|0;do{t[a>>2]=t[e>>2];a=a+4|0;e=e+4|0}while((a|0)<(A|0));e=(pG(n,f)|0)==0&1}else e=0;h=l;return e|0}function xW(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0;g=e+16|0;k=t[(t[(t[(t[g>>2]|0)+196>>2]|0)+(A<<6)+4>>2]|0)+(r<<2)>>2]|0;w=r+1|0;u=(a|0)==1;b=k+16|0;o=w;while(1){if((o|0)>(i|0)){n=i;v=w;break}h=t[(t[(t[(t[g>>2]|0)+196>>2]|0)+(A<<6)+4>>2]|0)+(o<<2)>>2]|0;c=h+16|0;e:do{if(u)while(1){r=t[c>>2]|0;s=t[t[r+180>>2]>>2]|0;if(!s)break e;f=t[(t[b>>2]|0)+180>>2]|0;l=s+-48|0;a=0;while(1){r=t[f+(a<<2)>>2]|0;if(!r){d=8;break}if((t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)==(t[((t[s>>2]&3|0)==2?s:l)+40>>2]|0))break;else a=a+1|0}if((d|0)==8){d=0;r=ZL(k,t[((t[s>>2]&3|0)==2?s:l)+40>>2]|0,s)|0}while(1){a=t[t[(t[c>>2]|0)+172>>2]>>2]|0;if(!a)break;FL(a,r);EL(a)}EL(s)}else while(1){r=t[c>>2]|0;s=t[t[r+172>>2]>>2]|0;if(!s)break e;f=t[(t[b>>2]|0)+172>>2]|0;l=s+48|0;a=0;while(1){r=t[f+(a<<2)>>2]|0;if(!r){d=17;break}if((t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0)==(t[((t[s>>2]&3|0)==3?s:l)+40>>2]|0))break;else a=a+1|0}if((d|0)==17){d=0;r=ZL(t[((t[s>>2]&3|0)==3?s:l)+40>>2]|0,k,s)|0}while(1){a=t[t[(t[c>>2]|0)+180>>2]>>2]|0;if(!a)break;FL(a,r);EL(a)}EL(s)}}while(0);if((t[r+176>>2]|0)!=(0-(t[r+184>>2]|0)|0)){d=23;break}QL(e,h);o=o+1|0}if((d|0)==23)ge(88313,88357,115,88364);while(1){n=n+1|0;r=t[(t[g>>2]|0)+196>>2]|0;a=r+(A<<6)|0;if((n|0)>=(t[a>>2]|0))break;i=t[r+(A<<6)+4>>2]|0;d=t[i+(n<<2)>>2]|0;t[i+(v<<2)>>2]=d;t[(t[d+16>>2]|0)+236>>2]=v;v=v+1|0}t[a>>2]=v;t[(t[r+(A<<6)+4>>2]|0)+(v<<2)>>2]=0;return}function JW(e){e=e|0;e=t[e+16>>2]|0;if(((i[e+156>>0]|0)==1?(t[e+184>>2]|0)==1:0)?(t[e+176>>2]|0)==1:0)e=(t[e+104>>2]|0)==0&1;else e=0;return e|0}function HW(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+80|0;f=l+40|0;n=l;i=t[t[(t[e+16>>2]|0)+180>>2]>>2]|0;e=t[t[(t[A+16>>2]|0)+180>>2]>>2]|0;if(((JW(A)|0)<<24>>24!=0?(t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0)==(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0):0)?(SW(i,e)|0)<<24>>24!=0:0){r=(t[e+16>>2]|0)+56|0;a=n;e=(t[i+16>>2]|0)+56|0;A=a+40|0;do{t[a>>2]=t[e>>2];a=a+4|0;e=e+4|0}while((a|0)<(A|0));a=f;e=r;A=a+40|0;do{t[a>>2]=t[e>>2];a=a+4|0;e=e+4|0}while((a|0)<(A|0));e=(pG(n,f)|0)==0&1}else e=0;h=l;return e|0}function PW(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;d=h;h=h+32|0;w=d+16|0;b=d;o=e+16|0;r=t[o>>2]|0;A=a[r+236>>1]|0;while(1){if((A|0)>(a[r+238>>1]|0))break;t[(t[r+268>>2]|0)+(A<<2)>>2]=0;A=A+1|0;r=t[o>>2]|0}FD(e);s=sd(e)|0;while(1){if(!s)break;XW(e,s);l=Ow(e,s)|0;while(1){if(!l)break;else r=l;while(1){A=t[(t[r+16>>2]|0)+172>>2]|0;if(!A)break;else r=A}f=l+-48|0;while(1){A=r+-48|0;n=t[((t[r>>2]&3|0)==2?r:A)+40>>2]|0;if((t[(t[n+16>>2]|0)+232>>2]|0)>=(t[(t[(t[((t[l>>2]&3|0)==2?l:f)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;XW(e,n);r=t[t[(t[(t[((t[r>>2]&3|0)==2?r:A)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}l=qw(e,l)|0}s=cd(e,s)|0}A=t[o>>2]|0;l=a[A+236>>1]|0;while(1){if((l|0)>(a[A+238>>1]|0)){c=1;u=A;break}A=t[(t[A+268>>2]|0)+(l<<2)>>2]|0;s=t[(t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0)+(l<<6)+4>>2]|0;r=A+16|0;if((t[s+(t[(t[r>>2]|0)+236>>2]<<2)>>2]|0)!=(A|0)){k=17;break}f=t[(t[(t[(mG(e)|0)+16>>2]|0)+196>>2]|0)+(l<<6)+4>>2]|0;A=t[o>>2]|0;r=t[A+196>>2]|0;t[r+(l<<6)+4>>2]=f+(t[(t[(t[(t[A+268>>2]|0)+(l<<2)>>2]|0)+16>>2]|0)+236>>2]<<2);A=-1;f=0;e:while(1){if((f|0)>=(t[r+(l<<6)>>2]|0))break;r=t[(t[r+(l<<6)+4>>2]|0)+(f<<2)>>2]|0;if(!r)break;n=t[r+16>>2]|0;A:do{if(!(i[n+156>>0]|0))if(!(Wd(e,r)|0))break e;else A=f;else{r=t[t[n+172>>2]>>2]|0;while(1){if(!r)break A;n=t[(t[r+16>>2]|0)+116>>2]|0;if(!n)break;else r=n}if(Wd(e,t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0)|0){s=(Wd(e,t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)|0)==0;A=s?A:f}}}while(0);f=f+1|0;r=t[(t[o>>2]|0)+196>>2]|0}if((A|0)==-1){t[w>>2]=Mk(e)|0;t[w+4>>2]=l;nw(0,88277,w)|0}s=t[o>>2]|0;t[(t[s+196>>2]|0)+(l<<6)>>2]=A+1;l=l+1|0;A=s}if((k|0)==17){w=Mk(A)|0;k=t[(t[r>>2]|0)+236>>2]|0;t[b>>2]=w;t[b+4>>2]=k;t[b+8>>2]=l;nw(1,88219,b)|0;aA(187016,1)}while(1){if((c|0)>(t[u+180>>2]|0))break;PW(t[(t[u+184>>2]|0)+(c<<2)>>2]|0);c=c+1|0;u=t[o>>2]|0}h=d;return}function XW(e,A){e=e|0;A=A|0;var r=0,i=0;r=t[A+16>>2]|0;e=(t[(t[e+16>>2]|0)+268>>2]|0)+(t[r+232>>2]<<2)|0;i=t[e>>2]|0;if(!((i|0)!=0?(t[(t[i+16>>2]|0)+236>>2]|0)<=(t[r+236>>2]|0):0))t[e>>2]=A;return}function SW(e,A){e=e|0;A=A|0;var r=0,a=0;while(1){a=t[e+16>>2]|0;if(!(i[a+112>>0]|0))break;e=t[a+116>>2]|0}while(1){r=t[A+16>>2]|0;if(!(i[r+112>>0]|0))break;A=t[r+116>>2]|0}if((i[a+153>>0]|0)==0?(i[r+153>>0]|0)==0:0){a=t[A>>2]&3;r=t[e>>2]&3;e=(P((t[(t[(t[((r|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((r|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0,(t[(t[(t[((a|0)==3?A:A+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((a|0)==2?A:A+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)|0)>0&1}else e=0;return e|0}function jW(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+544|0;s=c+528|0;UW(s,c+512|0,c);r=(i[193770]|0)+1<<24>>24;i[193770]=r<<24>>24==0?1:r;r=t[e+16>>2]|0;t[r+220>>2]=0;t[r+232>>2]=0;r=(A|0)>0;A=sd(e)|0;while(1){if(!A)break;if(r?(f=t[A+16>>2]|0,l=t[f+212>>2]|0,(l|0)!=0):0){n=t[(t[(t[l+16>>2]|0)+268>>2]|0)+(t[f+232>>2]<<2)>>2]|0;a=7}else a=6;if((a|0)==6?(a=0,(A|0)==(Ex(A)|0)):0){n=A;a=7}if((a|0)==7?(0,(i[(t[n+16>>2]|0)+157>>0]|0)!=(i[193770]|0)):0){TW(e);OW(s,e,n);_W(e)}A=cd(e,A)|0}qW(s);h=c;return}function UW(e,A,r){e=e|0;A=A|0;r=r|0;t[A>>2]=r;t[A+4>>2]=r+512;t[A+12>>2]=0;t[A+8>>2]=0;t[e>>2]=A;t[e+4>>2]=A;t[e+8>>2]=r;return}function TW(e){e=e|0;t[(t[e+16>>2]|0)+192>>2]=0;t[46793]=0;return}function OW(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+32|0;w=k;KW(e,r);c=w+8|0;o=w+16|0;u=w+24|0;e:while(1){b=$W(e)|0;if(!b)break;r=b+16|0;if((i[(t[r>>2]|0)+157>>0]|0)==(i[193770]|0))continue;eY(A,b);f=t[r>>2]|0;n=f+180|0;s=t[n+4>>2]|0;l=w;t[l>>2]=t[n>>2];t[l+4>>2]=s;l=f+172|0;s=t[l+4>>2]|0;n=c;t[n>>2]=t[l>>2];t[n+4>>2]=s;n=f+188|0;s=t[n+4>>2]|0;l=o;t[l>>2]=t[n>>2];t[l+4>>2]=s;f=f+196|0;l=t[f+4>>2]|0;s=u;t[s>>2]=t[f>>2];t[s+4>>2]=l;s=3;while(1){if((s|0)<=-1)continue e;r=t[w+(s<<3)>>2]|0;A:do{if(r|0){l=(t[w+(s<<3)+4>>2]|0)+-1|0;f=r+(l<<2)|0;while(1){if((l|0)<=-1)break A;a=t[f>>2]|0;n=t[a>>2]&3;r=t[((n|0)==2?a:a+-48|0)+40>>2]|0;if((r|0)==(b|0))r=t[((n|0)==3?a:a+48|0)+40>>2]|0;if((i[(t[r+16>>2]|0)+157>>0]|0)!=(i[193770]|0)?(r|0)==(Ex(r)|0):0)KW(e,r);f=f+-4|0;l=l+-1|0}}}while(0);s=s+-1|0}}h=k;return}function _W(e){e=e|0;var A=0,r=0,i=0,a=0;r=e+16|0;A=t[r>>2]|0;a=A+220|0;i=t[a>>2]|0;e=i+1|0;t[a>>2]=e;A=t[A+216>>2]|0;if(!A)e=$F(e<<2)|0;else e=AM(A,e<<2)|0;a=t[r>>2]|0;t[a+216>>2]=e;t[e+(i<<2)>>2]=t[a+192>>2];return}function qW(e){e=e|0;var A=0;e=t[(t[e>>2]|0)+12>>2]|0;while(1){if(!e)break;A=t[e+12>>2]|0;G2(t[e>>2]|0);G2(e);e=A}return}function KW(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;f=c+8|0;a=c;s=e+8|0;r=t[s>>2]|0;l=e+4|0;e=t[l>>2]|0;if((r|0)==(t[e+4>>2]|0)){r=t[e+12>>2]|0;if(!r){r=KF(16)|0;if(!r)nw(1,98969,a)|0;t[r+8>>2]=t[l>>2];t[r+12>>2]=0;e=KF(4e6)|0;t[r>>2]=e;if(!e){nw(1,88377,f)|0;e=t[r>>2]|0}t[r+4>>2]=e+4e6;t[(t[l>>2]|0)+12>>2]=r}t[l>>2]=r;r=t[r>>2]|0;t[s>>2]=r}i[(t[A+16>>2]|0)+157>>0]=(n[193770]|0)+1;t[s>>2]=r+4;t[r>>2]=A;h=c;return}function $W(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=e+8|0;A=t[a>>2]|0;r=e+4|0;i=t[r>>2]|0;if((A|0)==(t[i>>2]|0))if((i|0)==(t[e>>2]|0))A=0;else{A=t[i+8>>2]|0;t[r>>2]=A;A=t[A+4>>2]|0;t[a>>2]=A;n=4}else n=4;if((n|0)==4){A=A+-4|0;t[a>>2]=A;A=t[A>>2]|0}return A|0}function eY(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;a=t[e+16>>2]|0;n=a+232|0;t[n>>2]=(t[n>>2]|0)+1;n=t[A+16>>2]|0;i[n+157>>0]=i[193770]|0;e=t[46793]|0;r=n+168|0;if(!e){t[r>>2]=0;t[a+192>>2]=A}else{t[r>>2]=e;t[(t[e+16>>2]|0)+164>>2]=A}t[46793]=A;t[n+164>>2]=0;return}function AY(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0.0,h=0.0;u=e+16|0;A=(t[u>>2]|0)+192|0;while(1){A=t[A>>2]|0;if(!A)break;n=A+16|0;A=t[n>>2]|0;r=t[A+188>>2]|0;e:do{if(!r)a=0;else{a=0;while(1){r=t[r+(a<<2)>>2]|0;if(!r){a=0;break e}rY(r);A=t[n>>2]|0;a=a+1|0;r=t[A+188>>2]|0}}}while(0);while(1){if((a|0)>=(t[A+208>>2]|0))break;r=t[(t[A+204>>2]|0)+(a<<2)>>2]|0;o=t[r>>2]&3;if((t[(t[(t[((o|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)==(t[(t[(t[((o|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)){rY(r);A=t[n>>2]|0}a=a+1|0}A=A+164|0}o=t[u>>2]|0;A=t[o+196>>2]|0;if(!((t[A+56>>2]|0)==0?(t[o+180>>2]|0)<=0:0))f=13;e:do{if((f|0)==13){f=t[A+4>>2]|0;n=0;A:while(1){A=t[f+(n<<2)>>2]|0;if(!A)break e;r=t[(t[A+16>>2]|0)+196>>2]|0;A=0;while(1){a=t[r+(A<<2)>>2]|0;if(!a)break;o=t[a+16>>2]|0;if(t[o+96>>2]|0?(i[o+113>>0]|0)==0:0)break A;A=A+1|0}n=n+1|0}iY(e)}}while(0);UQ(e);r=0;A=(t[u>>2]|0)+192|0;while(1){A=t[A>>2]|0;if(!A)break;o=A+16|0;A=t[o>>2]|0;a=t[A+188>>2]|0;e:do{if(a){s=0;while(1){n=t[a+(s<<2)>>2]|0;if(!n){s=0;break}f=t[n+16>>2]|0;l=t[f+96>>2]|0;do{if(l)if(!(i[f+113>>0]|0)){aY(n);a=t[o>>2]|0;r=1;A=a;a=t[a+188>>2]|0;break}else{c[f+136>>3]=+c[((t[(t[u>>2]|0)+116>>2]&1|0)==0?l+24|0:l+32|0)>>3];break}}while(0);s=s+1|0}while(1){if((s|0)>=(t[A+208>>2]|0))break e;f=t[(t[A+204>>2]|0)+(s<<2)>>2]|0;l=t[f>>2]&3;n=t[((l|0)==3?f:f+48|0)+40>>2]|0;l=t[((l|0)==2?f:f+-48|0)+40>>2]|0;do{if(!((n|0)==(l|0)?1:(t[(t[n+16>>2]|0)+232>>2]|0)!=(t[(t[l+16>>2]|0)+232>>2]|0))){a=f;do{l=t[a+16>>2]|0;a=t[l+172>>2]|0}while((a|0)!=0);a=i[l+113>>0]|0;n=t[f+16>>2]|0;i[n+113>>0]=a;n=t[n+96>>2]|0;if(n)if(!(a<<24>>24)){aY(f);r=1;A=t[o>>2]|0;break}else{h=+c[((t[(t[u>>2]|0)+116>>2]&1|0)==0?n+24|0:n+32|0)>>3];l=l+136|0;b=+c[l>>3];c[l>>3]=h>b?h:b;break}}}while(0);s=s+1|0}}}while(0);A=A+164|0}if(r|0){xL(e);eQ(e)}return r|0}function rY(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;A=t[e>>2]&3;l=t[((A|0)==3?e:e+48|0)+40>>2]|0;a=l+16|0;n=t[(t[a>>2]|0)+236>>2]|0;A=t[(t[(t[((A|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;f=(n|0)<(A|0);r=f?A:n;l=t[(t[(mG(l)|0)+16>>2]|0)+196>>2]|0;a=l+(t[(t[a>>2]|0)+232>>2]<<6)+4|0;A=f?n:A;e:while(1){A=A+1|0;if((A|0)>=(r|0))break;n=t[(t[(t[a>>2]|0)+(A<<2)>>2]|0)+16>>2]|0;switch(i[n+156>>0]|0){case 0:break e;case 1:break;default:continue e}if(t[n+104>>2]|0)break}if((A|0)==(r|0))do{l=t[e+16>>2]|0;i[l+113>>0]=1;e=t[l+172>>2]|0}while((e|0)!=0);return}function iY(e){e=e|0;var A=0,r=0,i=0,n=0;n=e+16|0;e=t[n>>2]|0;if(a[e+236>>1]|0)ge(88434,88417,190,88453);A=(a[e+238>>1]|0)+3|0;e=t[e+196>>2]|0;if(!e)e=$F(A<<6)|0;else e=AM(e,A<<6)|0;A=e+64|0;e=t[n>>2]|0;t[e+196>>2]=A;e=a[e+238>>1]|0;while(1){if((e|0)<=-1)break;i=e+-1|0;r=A+(e<<6)|0;e=A+(i<<6)|0;A=r+64|0;do{t[r>>2]=t[e>>2];r=r+4|0;e=e+4|0}while((r|0)<(A|0));e=i;A=t[(t[n>>2]|0)+196>>2]|0}t[A+(e<<6)+8>>2]=0;t[A+(e<<6)>>2]=0;r=KF(8)|0;n=t[n>>2]|0;i=t[n+196>>2]|0;t[i+(e<<6)+12>>2]=r;t[i+(e<<6)+4>>2]=r;t[i+(e<<6)+56>>2]=0;c[i+(e<<6)+24>>3]=1.0;c[i+(e<<6)+16>>3]=1.0;c[i+(e<<6)+40>>3]=1.0;c[i+(e<<6)+32>>3]=1.0;n=n+236|0;a[n>>1]=(a[n>>1]|0)+-1<<16>>16;return}function aY(e){e=e|0;var A=0,r=0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0.0,k=0.0,d=0.0;l=e+16|0;if(t[(t[l>>2]|0)+96>>2]|0){u=e+48|0;s=mG(t[((t[e>>2]&3|0)==3?e:u)+40>>2]|0)|0;A=t[(t[(t[((t[e>>2]&3|0)==3?e:u)+40>>2]|0)+16>>2]|0)+232>>2]|0;o=YJ(s,e)|0;b=s+16|0;r=t[b>>2]|0;n=t[r+196>>2]|0;h=A+-1|0;f=t[t[n+(h<<6)+4>>2]>>2]|0;if(!f)a=+c[n+(A<<6)+24>>3]+ +c[(t[(t[t[n+(A<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +(t[r+252>>2]|0);else a=+c[(t[f+16>>2]|0)+24>>3]-+c[n+(h<<6)+16>>3];A=FJ(s,h,o)|0;s=t[(t[l>>2]|0)+96>>2]|0;k=+c[s+24>>3];w=+c[s+32>>3];l=(t[(t[b>>2]|0)+116>>2]&1|0)==0;d=l?w:k;n=A+16|0;r=t[n>>2]|0;c[r+80>>3]=d;o=~~(d*.5);w=(l?k:w)*.5;c[r+96>>3]=w;c[r+88>>3]=w;t[r+104>>2]=s;c[r+24>>3]=+(o+~~a|0);r=ZL(A,t[((t[e>>2]&3|0)==3?e:u)+40>>2]|0,e)|0;r=t[r+16>>2]|0;c[r+16>>3]=-+c[(t[n>>2]|0)+88>>3];c[r+56>>3]=+c[(t[(t[((t[e>>2]&3|0)==3?e:u)+40>>2]|0)+16>>2]|0)+96>>3];i[r+112>>0]=4;r=e+-48|0;A=ZL(A,t[((t[e>>2]&3|0)==2?e:r)+40>>2]|0,e)|0;n=t[n>>2]|0;A=t[A+16>>2]|0;c[A+16>>3]=+c[n+96>>3];c[A+56>>3]=+c[(t[(t[((t[e>>2]&3|0)==2?e:r)+40>>2]|0)+16>>2]|0)+88>>3];i[A+112>>0]=4;A=t[(t[b>>2]|0)+196>>2]|0;r=A+(h<<6)+16|0;a=+(o|0);if(+c[r>>3]>3]=a;A=A+(h<<6)+24|0;if(+c[A>>3]>3]=a;t[n+112>>2]=e}return}function tY(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,l=0,s=0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;I=h;h=h+160|0;y=I+24|0;E=I+20|0;p=I+16|0;b=I;w=I+32|0;B=t[e+152>>2]|0;t[y>>2]=0;t[E>>2]=0;t[p>>2]=0;C=eB(e)|0;t[C+4>>2]=3;t[C+8>>2]=A;t[C+12>>2]=9;g=A+16|0;u=t[(t[g>>2]|0)+96>>2]|0;if((u|0?(i[u+82>>0]|0)==0:0)?(px(Hw(A,100105)|0,0)|0)<<24>>24:0){u=C+260|0;a[u>>1]=a[u>>1]|512}if(r|0?t[(t[g>>2]|0)+8>>2]|0:0)ii(e,r);r=t[47206]|0;if((r|0?(n=Pw(A,r)|0,n|0):0)?i[n>>0]|0:0)ui(e,+wx(A,t[47206]|0,1.0,0.0));do{if(B&16777216|0){r=A+48|0;if((f[(t[(Bd(t[((t[A>>2]&3|0)==3?A:r)+40>>2]|0)|0)+16>>2]|0)+178>>1]|0)>2){o=+c[(t[(t[(t[((t[A>>2]&3|0)==3?A:r)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;c[C+176>>3]=+(~~(o+(o>=0.0?.5:-.5))|0);o=+c[(t[(t[(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;c[C+184>>3]=+(~~(o+(o>=0.0?.5:-.5))|0);break}else{u=C+176|0;t[u>>2]=0;t[u+4>>2]=0;t[u+8>>2]=0;t[u+12>>2]=0;break}}}while(0);if(B&32768|0){u=t[g>>2]|0;r=t[u+96>>2]|0;if(!r)r=t[C+192>>2]|0;else{r=t[r>>2]|0;t[C+192>>2]=r}n=C+196|0;t[n>>2]=r;s=C+204|0;t[s>>2]=r;l=C+200|0;t[l>>2]=r;r=t[u+108>>2]|0;if(r|0)t[n>>2]=t[r>>2];r=t[u+104>>2]|0;if(r|0)t[l>>2]=t[r>>2];r=t[u+100>>2]|0;if(r|0)t[s>>2]=t[r>>2]}if(!(B&65536))l=0;else{cw(b,128,w);t[C+212>>2]=UF(iB(e,A,b)|0,A)|0;hw(b);r=Hw(A,141055)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=31;else{r=Hw(A,111477)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=31;else n=0}if((k|0)==31)n=UF(r,A)|0;r=Hw(A,100118)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=36;else k=34;do{if((k|0)==34){r=Hw(A,100127)|0;if(r|0?i[r>>0]|0:0){k=36;break}if(n|0){r=o3(n)|0;k=39}}}while(0);if((k|0)==36){r=UF(r,A)|0;k=39}if((k|0)==39)t[C+208>>2]=r;r=Hw(A,100135)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=44;else k=42;do{if((k|0)==42){r=Hw(A,100145)|0;if(r|0?i[r>>0]|0:0){k=44;break}if(n|0){r=o3(n)|0;k=47}}}while(0);if((k|0)==44){r=UF(r,A)|0;k=47}if((k|0)==47)t[C+216>>2]=r;r=Hw(A,100154)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=52;else k=50;do{if((k|0)==50){r=Hw(A,100163)|0;if(r|0?i[r>>0]|0:0){k=52;break}if(n|0)t[C+220>>2]=o3(n)|0}}while(0);if((k|0)==52){t[C+220>>2]=UF(r,A)|0;k=C+260|0;a[k>>1]=a[k>>1]|128}r=Hw(A,100171)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=59;else k=57;do{if((k|0)==57){r=Hw(A,100180)|0;if(r|0?i[r>>0]|0:0){k=59;break}if(n|0)t[C+224>>2]=o3(n)|0}}while(0);if((k|0)==59){t[C+224>>2]=UF(r,A)|0;k=C+260|0;a[k>>1]=a[k>>1]|256}l=n}do{if(B&8388608){r=Hw(A,141088)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)n=UF(r,A)|0;else n=0;r=Hw(A,100188)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){k=C+260|0;a[k>>1]=a[k>>1]|64;r=UF(r,A)|0;k=72}else k=70;if((k|0)==70?n|0:0){r=o3(n)|0;k=72}if((k|0)==72)t[C+244>>2]=r;r=Hw(A,100199)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){r=UF(r,A)|0;k=78}else k=76;if((k|0)==76?n|0:0){r=o3(n)|0;k=78}if((k|0)==78)t[C+248>>2]=r;r=Hw(A,100211)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){t[C+252>>2]=UF(r,A)|0;w=C+260|0;a[w>>1]=a[w>>1]|16}else k=82;if((k|0)==82?n|0:0)t[C+252>>2]=o3(n)|0;r=Hw(A,100222)|0;if(r|0?i[r>>0]|0:0){k=C+260|0;a[k>>1]=a[k>>1]|32;t[C+256>>2]=UF(r,A)|0;break}if(n)t[C+256>>2]=o3(n)|0;else n=0}else n=0}while(0);do{if(B&4194304|0){r=Hw(A,141101)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)k=94;else k=92;do{if((k|0)==92){r=Hw(A,100233)|0;if(r|0?i[r>>0]|0:0){k=94;break}r=t[C+192>>2]|0;if(r|0)t[C+228>>2]=o3(r)|0}}while(0);if((k|0)==94){w=IY(r,A)|0;t[C+228>>2]=UF(w,A)|0;G2(w);w=C+260|0;a[w>>1]=a[w>>1]|1}r=Hw(A,100245)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){w=IY(r,A)|0;t[C+232>>2]=UF(w,A)|0;G2(w);w=C+260|0;a[w>>1]=a[w>>1]|8}else k=100;if((k|0)==100?(d=t[C+192>>2]|0,d|0):0)t[C+232>>2]=o3(d)|0;r=Hw(A,100258)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){d=IY(r,A)|0;t[C+236>>2]=UF(d,A)|0;G2(d);d=C+260|0;a[d>>1]=a[d>>1]|2}else k=105;if((k|0)==105?(v=t[C+200>>2]|0,v|0):0)t[C+236>>2]=o3(v)|0;r=Hw(A,100270)|0;if(r|0?i[r>>0]|0:0){v=IY(r,A)|0;t[C+240>>2]=UF(v,A)|0;G2(v);v=C+260|0;a[v>>1]=a[v>>1]|4;break}r=t[C+204>>2]|0;if(r|0)t[C+240>>2]=o3(r)|0}}while(0);G2(l);G2(n);do{if(B&4259840|0?(m=t[(t[g>>2]|0)+8>>2]|0,m|0):0){if(!(t[C+208>>2]|0)){if((B&524288|0)==0|(t[C+228>>2]|0)==0)break}else if(!(B&524288))break;o=+c[(t[e+16>>2]|0)+152>>3]*.5;o=o>2.0?o:2.0;n=t[m+4>>2]|0;r=0;while(1){if((r|0)>=(n|0))break;ZY(y,E,p,(t[m>>2]|0)+(r*48|0)|0,o);r=r+1|0}l=t[p>>2]|0;t[C+276>>2]=l;s=t[E>>2]|0;t[C+280>>2]=s;if(!(B&8192)){r=0;n=0;while(1){if((n|0)>=(l|0))break;r=(t[s+(n<<2)>>2]|0)+r|0;n=n+1|0}y=t[y>>2]|0;Dr(e,y,y,r)|0;r=y}else r=t[y>>2]|0;t[C+284>>2]=r;t[C+264>>2]=2;t[C+272>>2]=r;t[C+268>>2]=t[s>>2]}}while(0);jr(e,A);r=t[C+208>>2]|0;if(!((r|0)==0?!(a[C+260>>1]&1):0))Tr(e,r,t[C+228>>2]|0,t[C+244>>2]|0,t[C+212>>2]|0);h=I;return}function nY(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0.0,R=0.0,x=0,J=0,H=0,P=0,X=0;J=h;h=h+240|0;V=J+224|0;M=J+208|0;B=J+128|0;E=J+112|0;x=J+64|0;G=J+48|0;L=J+32|0;Q=J+16|0;D=J;z=J+192|0;W=J+176|0;y=J+160|0;Z=J+144|0;t[Q>>2]=0;t[Q+4>>2]=0;t[Q+8>>2]=0;t[Q+12>>2]=0;N=+c[(t[e+16>>2]|0)+152>>3];Ca(Hw(A,100032)|0);F=A+16|0;e:do{if(t[(t[F>>2]|0)+8>>2]|0){R=+wx(A,t[47188]|0,1.0,0.0);s=dx(A,t[47176]|0,195059)|0;p=(r|0)!=0;A:do{if(p){a=r;while(1){f=a;a=a+4|0;f=t[f>>2]|0;if(!f){b=0;break A}if((i[f>>0]|0)!=116)continue;if(!(e1(f,111117)|0)){b=1;break}}}else b=0}while(0);l=s;k=0;f=0;A:while(1){switch(i[l>>0]|0){case 0:break A;case 58:{a=k+1|0;break}case 59:{a=k;f=f+1|0;break}default:a=k}l=l+1|0;k=a}u=(k|0)!=0;if((f|0)!=0&u)if(!(hY(e,A,r,s,k+1|0,R,N)|0))break;else o=137314;else o=s;a=n[(t[F>>2]|0)+115>>0]|0;if(!(a&1))if(!(a&2))if(!(a&8))if(!(a&4)){f=o;l=vx(A,t[47177]|0,o)|0}else{l=106296;a=106288;s=188712;f=188712;w=18}else{l=106280;a=106272;s=188712;f=188712;w=18}else{l=106264;a=106256;s=188712;f=188712;w=18}else{l=106248;a=106240;s=188712;f=188712;w=18}if((w|0)==18){f=t[f>>2]|0;f=vx(A,f,wY(o,a)|0)|0;a=vx(A,t[s>>2]|0,l)|0;if((f|0)==(o|0)){f=o;l=a}else{$r(e,f);l=a}}if((l|0)!=(o|0))Ai(e,l);if(b<<24>>24){f=(i[f>>0]|0)==0?137314:f;a=(i[l>>0]|0)==0?137314:l;$r(e,137379);Ai(e,f);m=x;d=t[t[(t[F>>2]|0)+8>>2]>>2]|0;v=m+48|0;do{t[m>>2]=t[d>>2];m=m+4|0;d=d+4|0}while((m|0)<(v|0));F=HR(x,kY(A)|0,N,0,0)|0;ti(e,t[F+8>>2]|0,t[F>>2]|0,1);dY(F);$r(e,f);if((a|0)!=(f|0))Ai(e,a);a=t[x+8>>2]|0;if(a|0){Y=x+16|0;F=t[x>>2]|0;t[M>>2]=t[Y>>2];t[M+4>>2]=t[Y+4>>2];t[M+8>>2]=t[Y+8>>2];t[M+12>>2]=t[Y+12>>2];t[V>>2]=t[F>>2];t[V+4>>2]=t[F+4>>2];t[V+8>>2]=t[F+8>>2];t[V+12>>2]=t[F+12>>2];qE(e,2,M,V,R,N,a)}a=t[x+12>>2]|0;if(!a)break;F=x+32|0;x=(t[x>>2]|0)+((t[x+4>>2]|0)+-1<<4)|0;t[M>>2]=t[F>>2];t[M+4>>2]=t[F+4>>2];t[M+8>>2]=t[F+8>>2];t[M+12>>2]=t[F+12>>2];t[V>>2]=t[x>>2];t[V+4>>2]=t[x+4>>2];t[V+8>>2]=t[x+8>>2];t[V+12>>2]=t[x+12>>2];qE(e,3,M,V,R,N,a);break}a=t[F>>2]|0;if(!u){do{if(!(i[a+115>>0]&3)){if(i[f>>0]|0){$r(e,f);Ai(e,l);break}$r(e,137314);if(!(i[l>>0]|0)){Ai(e,137314);break}else{Ai(e,l);break}}}while(0);s=e+152|0;o=x+4|0;u=x+8|0;b=x+12|0;w=x+32|0;k=x+16|0;l=0;while(1){a=t[(t[F>>2]|0)+8>>2]|0;if((l|0)>=(t[a+4>>2]|0))break e;m=x;d=(t[a>>2]|0)+(l*48|0)|0;v=m+48|0;do{t[m>>2]=t[d>>2];m=m+4|0;d=d+4|0}while((m|0)<(v|0));a=t[x>>2]|0;f=t[o>>2]|0;do{if(!(t[s>>2]&16384)){fi(e,a,f,0,0,0);a=t[u>>2]|0;if(a|0){Y=t[x>>2]|0;t[M>>2]=t[k>>2];t[M+4>>2]=t[k+4>>2];t[M+8>>2]=t[k+8>>2];t[M+12>>2]=t[k+12>>2];t[V>>2]=t[Y>>2];t[V+4>>2]=t[Y+4>>2];t[V+8>>2]=t[Y+8>>2];t[V+12>>2]=t[Y+12>>2];qE(e,2,M,V,R,N,a)}a=t[b>>2]|0;if(a|0){Y=(t[x>>2]|0)+((t[o>>2]|0)+-1<<4)|0;t[M>>2]=t[w>>2];t[M+4>>2]=t[w+4>>2];t[M+8>>2]=t[w+8>>2];t[M+12>>2]=t[w+12>>2];t[V>>2]=t[Y>>2];t[V+4>>2]=t[Y+4>>2];t[V+8>>2]=t[Y+8>>2];t[V+12>>2]=t[Y+12>>2];qE(e,3,M,V,R,N,a)}if((t[(t[(t[F>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(t[u>>2]|0)){if(!(p&(t[b>>2]|0)!=0))break}else if(!p)break;ii(e,r)}}else fi(e,a,f,t[u>>2]|0,t[b>>2]|0,0)}while(0);l=l+1|0}}Y=t[(t[a+8>>2]|0)+4>>2]|0;I=Y*48|0;C=Z2(I)|0;I=Z2(I)|0;g=+(k+2|0)*.5;p=x+4|0;w=G+8|0;k=L+8|0;A=Q+8|0;r=D+8|0;b=0;while(1){if((b|0)>=(Y|0))break;m=x;d=(t[t[(t[F>>2]|0)+8>>2]>>2]|0)+(b*48|0)|0;v=m+48|0;do{t[m>>2]=t[d>>2];m=m+4|0;d=d+4|0}while((m|0)<(v|0));a=t[p>>2]|0;t[C+(b*48|0)+4>>2]=a;t[I+(b*48|0)+4>>2]=a;u=a<<4;o=Z2(u)|0;t[C+(b*48|0)>>2]=o;u=Z2(u)|0;t[I+(b*48|0)>>2]=u;s=t[x>>2]|0;t[D>>2]=t[s>>2];t[D+4>>2]=t[s+4>>2];t[D+8>>2]=t[s+8>>2];t[D+12>>2]=t[s+12>>2];s=0;while(1){if((s|0)>=(a+-1|0))break;t[G>>2]=t[D>>2];t[G+4>>2]=t[D+4>>2];t[G+8>>2]=t[D+8>>2];t[G+12>>2]=t[D+12>>2];a=s+1|0;l=(t[x>>2]|0)+(a<<4)|0;t[L>>2]=t[l>>2];t[L+4>>2]=t[l+4>>2];t[L+8>>2]=t[l+8>>2];t[L+12>>2]=t[l+12>>2];l=o+(s<<4)|0;if(!s){t[M>>2]=t[G>>2];t[M+4>>2]=t[G+4>>2];t[M+8>>2]=t[G+8>>2];t[M+12>>2]=t[G+12>>2];t[V>>2]=t[L>>2];t[V+4>>2]=t[L+4>>2];t[V+8>>2]=t[L+8>>2];t[V+12>>2]=t[L+12>>2];vY(z,M,V);t[l>>2]=t[z>>2];t[l+4>>2]=t[z+4>>2];t[l+8>>2]=t[z+8>>2];t[l+12>>2]=t[z+12>>2]}else{t[M>>2]=t[Q>>2];t[M+4>>2]=t[Q+4>>2];t[M+8>>2]=t[Q+8>>2];t[M+12>>2]=t[Q+12>>2];t[V>>2]=t[L>>2];t[V+4>>2]=t[L+4>>2];t[V+8>>2]=t[L+8>>2];t[V+12>>2]=t[L+12>>2];vY(W,M,V);t[l>>2]=t[W>>2];t[l+4>>2]=t[W+4>>2];t[l+8>>2]=t[W+8>>2];t[l+12>>2]=t[W+12>>2]}P=t[x>>2]|0;v=s+2|0;X=P+(v<<4)|0;t[Q>>2]=t[X>>2];t[Q+4>>2]=t[X+4>>2];t[Q+8>>2]=t[X+8>>2];t[Q+12>>2]=t[X+12>>2];m=s+3|0;P=P+(m<<4)|0;t[D>>2]=t[P>>2];t[D+4>>2]=t[P+4>>2];t[D+8>>2]=t[P+8>>2];t[D+12>>2]=t[P+12>>2];H=o+(a<<4)|0;d=o+(v<<4)|0;t[E>>2]=t[G>>2];t[E+4>>2]=t[G+4>>2];t[E+8>>2]=t[G+8>>2];t[E+12>>2]=t[G+12>>2];t[B>>2]=t[L>>2];t[B+4>>2]=t[L+4>>2];t[B+8>>2]=t[L+8>>2];t[B+12>>2]=t[L+12>>2];t[M>>2]=t[X>>2];t[M+4>>2]=t[X+4>>2];t[M+8>>2]=t[X+8>>2];t[M+12>>2]=t[X+12>>2];t[V>>2]=t[P>>2];t[V+4>>2]=t[P+4>>2];t[V+8>>2]=t[P+8>>2];t[V+12>>2]=t[P+12>>2];gY(y,E,B,M,V);t[d>>2]=t[y>>2];t[d+4>>2]=t[y+4>>2];t[d+8>>2]=t[y+8>>2];t[d+12>>2]=t[y+12>>2];t[H>>2]=t[y>>2];t[H+4>>2]=t[y+4>>2];t[H+8>>2]=t[y+8>>2];t[H+12>>2]=t[y+12>>2];c[u+(s<<4)>>3]=+c[G>>3]-+c[l>>3]*g;c[u+(s<<4)+8>>3]=+c[w>>3]-+c[o+(s<<4)+8>>3]*g;c[u+(a<<4)>>3]=+c[L>>3]-+c[H>>3]*g;c[u+(a<<4)+8>>3]=+c[k>>3]-+c[o+(a<<4)+8>>3]*g;c[u+(v<<4)>>3]=+c[Q>>3]-+c[d>>3]*g;c[u+(v<<4)+8>>3]=+c[A>>3]-+c[o+(v<<4)+8>>3]*g;s=m;a=t[p>>2]|0}X=o+(s<<4)|0;t[M>>2]=t[Q>>2];t[M+4>>2]=t[Q+4>>2];t[M+8>>2]=t[Q+8>>2];t[M+12>>2]=t[Q+12>>2];t[V>>2]=t[D>>2];t[V+4>>2]=t[D+4>>2];t[V+8>>2]=t[D+8>>2];t[V+12>>2]=t[D+12>>2];vY(Z,M,V);t[X>>2]=t[Z>>2];t[X+4>>2]=t[Z+4>>2];t[X+8>>2]=t[Z+8>>2];t[X+12>>2]=t[Z+12>>2];c[u+(s<<4)>>3]=+c[D>>3]-+c[X>>3]*g;c[u+(s<<4)+8>>3]=+c[r>>3]-+c[o+(s<<4)+8>>3]*g;b=b+1|0}v=o3(f)|0;r=0;d=f;a=f;l=f;f=v;while(1){f=l3(f,107984)|0;if(!f)break;A=(i[f>>0]|0)==0?137314:f;if((A|0)!=(l|0))if(!(i[(t[F>>2]|0)+115>>0]&3)){$r(e,A);Ai(e,A);l=A}else l=A;o=(r|0)==0;u=r>>>0<2;f=0;while(1){if((f|0)>=(Y|0))break;b=t[I+(f*48|0)>>2]|0;w=t[C+(f*48|0)>>2]|0;k=t[I+(f*48|0)+4>>2]|0;s=0;while(1){if((s|0)>=(k|0))break;X=b+(s<<4)|0;c[X>>3]=+c[X>>3]+ +c[w+(s<<4)>>3];X=b+(s<<4)+8|0;c[X>>3]=+c[X>>3]+ +c[w+(s<<4)+8>>3];s=s+1|0}fi(e,b,k,0,0,0);f=f+1|0}r=r+1|0;d=o?A:d;a=u?A:a;f=0}f=t[x+8>>2]|0;if(!f)f=0;else{if(a){if(!(i[(t[F>>2]|0)+115>>0]&3)){$r(e,a);Ai(e,a)}}else a=0;P=x+16|0;X=t[x>>2]|0;t[M>>2]=t[P>>2];t[M+4>>2]=t[P+4>>2];t[M+8>>2]=t[P+8>>2];t[M+12>>2]=t[P+12>>2];t[V>>2]=t[X>>2];t[V+4>>2]=t[X+4>>2];t[V+8>>2]=t[X+8>>2];t[V+12>>2]=t[X+12>>2];qE(e,2,M,V,R,N,f);f=a}l=x+12|0;a=t[l>>2]|0;if(a|0){if((f|0)!=(d|0)?(i[(t[F>>2]|0)+115>>0]&3)==0:0){$r(e,d);Ai(e,d);a=t[l>>2]|0}P=x+32|0;X=(t[x>>2]|0)+((t[p>>2]|0)+-1<<4)|0;t[M>>2]=t[P>>2];t[M+4>>2]=t[P+4>>2];t[M+8>>2]=t[P+8>>2];t[M+12>>2]=t[P+12>>2];t[V>>2]=t[X>>2];t[V+4>>2]=t[X+4>>2];t[V+8>>2]=t[X+8>>2];t[V+12>>2]=t[X+12>>2];qE(e,3,M,V,R,N,a)}G2(v);a=0;while(1){if((a|0)>=(Y|0))break;G2(t[C+(a*48|0)>>2]|0);G2(t[I+(a*48|0)>>2]|0);a=a+1|0}G2(C);G2(I)}}while(0);h=J;return}function fY(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;B=h;h=h+64|0;d=B+48|0;m=B+32|0;g=B+16|0;v=B;E=t[e+16>>2]|0;p=t[E+8>>2]|0;k=E+208|0;if(!((t[k>>2]|0)==0?!(a[E+260>>1]&1):0))A=3;e:do{if((A|0)==3?(Or(e),w=E+276|0,r=t[w>>2]|0,r|0):0){f=E+280|0;A=t[f>>2]|0;l=E+268|0;s=E+284|0;c=E+272|0;o=E+228|0;u=E+244|0;b=E+212|0;i=t[A>>2]|0;n=1;while(1){if((n|0)>=(r|0))break e;t[l>>2]=t[A+(n<<2)>>2];t[c>>2]=(t[s>>2]|0)+(i<<4);Tr(e,t[k>>2]|0,t[o>>2]|0,t[u>>2]|0,t[b>>2]|0);Or(e);y=t[f>>2]|0;i=(t[y+(n<<2)>>2]|0)+i|0;n=n+1|0;r=t[w>>2]|0;A=y}}}while(0);t[E+268>>2]=0;t[E+272>>2]=0;k=p+16|0;A=t[k>>2]|0;r=t[A+8>>2]|0;if(!r)i=E+260|0;else{w=t[r>>2]|0;A=t[w>>2]|0;y=t[w+8>>2]|0;b=w+16|0;t[g>>2]=t[b>>2];t[g+4>>2]=t[b+4>>2];t[g+8>>2]=t[b+8>>2];t[g+12>>2]=t[b+12>>2];w=w+32|0;t[v>>2]=t[w>>2];t[v+4>>2]=t[w+4>>2];t[v+8>>2]=t[w+8>>2];t[v+12>>2]=t[w+12>>2];if(!y){t[m>>2]=t[A>>2];t[m+4>>2]=t[A+4>>2];t[m+8>>2]=t[A+8>>2];t[m+12>>2]=t[A+12>>2]}else{t[m>>2]=t[g>>2];t[m+4>>2]=t[g+4>>2];t[m+8>>2]=t[g+8>>2];t[m+12>>2]=t[g+12>>2]}i=E+260|0;w=a[i>>1]|0;b=t[E+220>>2]|0;t[d>>2]=t[m>>2];t[d+4>>2]=t[m+4>>2];t[d+8>>2]=t[m+8>>2];t[d+12>>2]=t[m+12>>2];lY(e,d,(w<<8&65535)<<16>>16>>15&255,b,(w<<14&65535)<<16>>16>>15&255);w=t[(t[k>>2]|0)+8>>2]|0;b=t[w>>2]|0;w=(t[w+4>>2]|0)+-1|0;A=t[b+(w*48|0)>>2]|0;r=t[b+(w*48|0)+4>>2]|0;y=t[b+(w*48|0)+12>>2]|0;u=b+(w*48|0)+16|0;t[g>>2]=t[u>>2];t[g+4>>2]=t[u+4>>2];t[g+8>>2]=t[u+8>>2];t[g+12>>2]=t[u+12>>2];g=b+(w*48|0)+32|0;t[v>>2]=t[g>>2];t[v+4>>2]=t[g+4>>2];t[v+8>>2]=t[g+8>>2];t[v+12>>2]=t[g+12>>2];if(!y){y=A+(r+-1<<4)|0;t[m>>2]=t[y>>2];t[m+4>>2]=t[y+4>>2];t[m+8>>2]=t[y+8>>2];t[m+12>>2]=t[y+12>>2]}else{t[m>>2]=t[v>>2];t[m+4>>2]=t[v+4>>2];t[m+8>>2]=t[v+8>>2];t[m+12>>2]=t[v+12>>2]}A=a[i>>1]|0;y=t[E+224>>2]|0;t[d>>2]=t[m>>2];t[d+4>>2]=t[m+4>>2];t[d+8>>2]=t[m+8>>2];t[d+12>>2]=t[m+12>>2];lY(e,d,(A<<7&65535)<<16>>16>>15&255,y,(A<<13&65535)<<16>>16>>15&255);A=t[k>>2]|0}r=t[A+96>>2]|0;n=(a[i>>1]<<12&65535)<<16>>16>>15<<16>>16;o=E+216|0;f=t[o>>2]|0;u=E+232|0;l=t[u>>2]|0;b=E+248|0;s=t[b>>2]|0;w=E+212|0;c=t[w>>2]|0;if(!((mx(dx(p,t[47186]|0,137308)|0)|0)<<24>>24))A=0;else A=t[(t[k>>2]|0)+8>>2]|0;sY(e,r,11,n,f,l,s,c,A);s=t[(t[k>>2]|0)+108>>2]|0;c=(a[i>>1]<<12&65535)<<16>>16>>15<<16>>16;l=t[o>>2]|0;f=t[u>>2]|0;r=t[b>>2]|0;n=t[w>>2]|0;if(!((mx(dx(p,t[47186]|0,137308)|0)|0)<<24>>24))A=0;else A=t[(t[k>>2]|0)+8>>2]|0;sY(e,s,11,c,l,f,r,n,A);sY(e,t[(t[k>>2]|0)+100>>2]|0,7,(a[i>>1]<<13&65535)<<16>>16>>15<<16>>16,t[E+224>>2]|0,t[E+240>>2]|0,t[E+256>>2]|0,t[w>>2]|0,0);sY(e,t[(t[k>>2]|0)+104>>2]|0,6,(a[i>>1]<<14&65535)<<16>>16>>15<<16>>16,t[E+220>>2]|0,t[E+236>>2]|0,t[E+252>>2]|0,t[w>>2]|0,0);Ur(e);AB(e);h=B;return}function lY(e,A,r,i,n){e=e|0;A=A|0;r=r|0;i=i|0;n=n|0;var f=0,l=0,s=0;s=h;h=h+16|0;f=s;l=t[e+16>>2]|0;if(!(r<<24>>24))i=t[l+208>>2]|0;if(!(n<<24>>24==0?(i|0)==0?(a[l+260>>1]&1)==0:0:0)){t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];bY(e,f)}h=s;return}function sY(e,A,r,a,n,f,l,s,c){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;c=c|0;var o=0,u=0,b=0,w=0,k=0,d=0;d=h;h=h+16|0;b=d;k=t[e+152>>2]|0;if(A|0?i[A+81>>0]|0:0){if(!s)u=0;else{u=KF((U2(s)|0)+11|0)|0;switch(r|0){case 11:{o=108224;break}case 7:{o=101583;break}case 6:{o=101593;break}default:ge(138394,99906,2730,100044)}t[b>>2]=s;t[b+4>>2]=o;T4(u,100060,b)|0}b=e+16|0;s=(t[b>>2]|0)+12|0;w=t[s>>2]|0;t[s>>2]=r;s=(a|0)!=0|(n|0)!=0;o=(k&4|0)==0;if(s&o){cY(e,A);Tr(e,n,f,l,u)}jF(e,r,A);if(c|0)oY(e,A,c);if(s){if(!o){cY(e,A);Tr(e,n,f,l,u)}Or(e)}G2(u);t[(t[b>>2]|0)+12>>2]=w}h=d;return}function cY(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;r=t[e+16>>2]|0;i=t[e+152>>2]|0;if(i&4259840|0){a=i&131072;f=a>>>16^2;t[r+264>>2]=f;l=r+268|0;t[l>>2]=f+2;f=r+272|0;G2(t[f>>2]|0);r=KF(t[l>>2]<<4)|0;t[f>>2]=r;f=A+56|0;l=A+24|0;c[r>>3]=+c[f>>3]-+c[l>>3]*.5;n=A+64|0;A=A+32|0;c[r+8>>3]=+c[n>>3]-+c[A>>3]*.5;c[r+16>>3]=+c[l>>3]*.5+ +c[f>>3];c[r+24>>3]=+c[A>>3]*.5+ +c[n>>3];if(!(i&8192))Dr(e,r,r,2)|0;if(!a)IF(r)}return}function oY(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0.0;b=h;h=h+96|0;n=b+80|0;f=b+32|0;l=b+16|0;s=b;a=t[A>>2]|0;while(1){o=i[a>>0]|0;if(!(o<<24>>24))break;if(!(I1(o&255)|0)){u=4;break}else a=a+1|0}if((u|0)==4){w=+c[A+24>>3];o=A+56|0;uY(f,+c[o>>3]+w*.5,+c[A+64>>3]-+c[A+32>>3]*.5);u=f+16|0;uY(l,+c[f>>3]-w,+c[f+8>>3]);t[u>>2]=t[l>>2];t[u+4>>2]=t[l+4>>2];t[u+8>>2]=t[l+8>>2];t[u+12>>2]=t[l+12>>2];u=f+32|0;t[n>>2]=t[o>>2];t[n+4>>2]=t[o+4>>2];t[n+8>>2]=t[o+8>>2];t[n+12>>2]=t[o+12>>2];Wx(s,r,n);t[u>>2]=t[s>>2];t[u+4>>2]=t[s+4>>2];t[u+8>>2]=t[s+8>>2];t[u+12>>2]=t[s+12>>2];ii(e,t[(t[e>>2]|0)+336>>2]|0);$r(e,t[A+8>>2]|0);li(e,f,3)}h=b;return}function uY(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function bY(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0.0,l=0,s=0;r=t[e+16>>2]|0;i=t[e+152>>2]|0;if(i&4259840|0){a=i&131072;l=a>>>16^2;t[r+264>>2]=l;s=r+268|0;t[s>>2]=l+2;l=r+272|0;G2(t[l>>2]|0);r=KF(t[s>>2]<<4)|0;t[l>>2]=r;f=+c[A>>3];c[r>>3]=f+-3.0;n=+c[A+8>>3];c[r+8>>3]=n+-3.0;c[r+16>>3]=f+3.0;c[r+24>>3]=n+3.0;if(!(i&8192))Dr(e,r,r,2)|0;if(!a)IF(r)}return}function hY(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=+n;f=+f;var l=0,c=0,o=0.0,u=0.0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0;F=h;h=h+256|0;L=F+224|0;G=F+208|0;l=F+192|0;D=F+144|0;z=F+96|0;W=F+48|0;Q=F;c=F+240|0;i=nB(i,a,c)|0;if((i|0)>1){C=A+48|0;I=Bd(t[((t[A>>2]&3|0)==3?A:C)+40>>2]|0)|0;C=Mk(t[((t[A>>2]&3|0)==3?A:C)+40>>2]|0)|0;I=(Bk(I)|0)!=0;Z=Mk(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;t[l>>2]=C;t[l+4>>2]=I?100079:100084;t[l+8>>2]=Z;nw(3,100089,l)|0;if((i|0)==2)i=1;else Y=4}else if((i|0)==1)i=1;else Y=4;if((Y|0)==4){Z=A+16|0;d=t[c>>2]|0;v=d+8|0;g=W+4|0;m=D+8|0;p=D+12|0;E=(r|0)!=0;k=(r|0)==0;B=D+32|0;y=D+4|0;C=D+16|0;I=Q+4|0;i=0;w=0;while(1){a=t[(t[Z>>2]|0)+8>>2]|0;if((w|0)>=(t[a+4>>2]|0))break;l=D;a=(t[a>>2]|0)+(w*48|0)|0;A=l+48|0;do{t[l>>2]=t[a>>2];l=l+4|0;a=a+4|0}while((l|0)<(A|0));A=1;o=1.0;b=t[v>>2]|0;e:while(1){a=t[b>>2]|0;if(!a)break;c=b+4|0;u=+s[c>>2];do{if(u<1.0e-05&u>-1.0e-05)a=A;else{$r(e,a);u=+s[c>>2];o=o-u;i=t[b>>2]|0;if(A|0){yY(D,u,W,Q);c=t[W>>2]|0;fi(e,c,t[g>>2]|0,0,0,0);G2(c);if(o<1.0e-05&o>-1.0e-05){Y=11;break e}else{a=0;break}}if(o<1.0e-05&o>-1.0e-05){Y=13;break e}l=z;a=Q;A=l+48|0;do{t[l>>2]=t[a>>2];l=l+4|0;a=a+4|0}while((l|0)<(A|0));u=+s[c>>2];yY(z,u/(o+u),W,Q);G2(t[z>>2]|0);a=t[W>>2]|0;fi(e,a,t[g>>2]|0,0,0,0);G2(a);a=0}}while(0);A=a;b=b+12|0}if((Y|0)==11){Y=0;G2(t[Q>>2]|0)}else if((Y|0)==13){Y=0;b=t[Q>>2]|0;fi(e,b,t[I>>2]|0,0,0,0);G2(b)}if(t[m>>2]|0){$r(e,t[t[v>>2]>>2]|0);Ai(e,t[t[v>>2]>>2]|0);c=t[D>>2]|0;b=t[m>>2]|0;t[G>>2]=t[C>>2];t[G+4>>2]=t[C+4>>2];t[G+8>>2]=t[C+8>>2];t[G+12>>2]=t[C+12>>2];t[L>>2]=t[c>>2];t[L+4>>2]=t[c+4>>2];t[L+8>>2]=t[c+8>>2];t[L+12>>2]=t[c+12>>2];qE(e,2,G,L,n,f,b)}if(t[p>>2]|0){$r(e,i);Ai(e,i);c=(t[D>>2]|0)+((t[y>>2]|0)+-1<<4)|0;b=t[p>>2]|0;t[G>>2]=t[B>>2];t[G+4>>2]=t[B+4>>2];t[G+8>>2]=t[B+8>>2];t[G+12>>2]=t[B+12>>2];t[L>>2]=t[c>>2];t[L+4>>2]=t[c+4>>2];t[L+8>>2]=t[c+8>>2];t[L+12>>2]=t[c+12>>2];qE(e,3,G,L,n,f,b)}do{if((t[(t[(t[Z>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(t[m>>2]|0)){if(!(E&(t[p>>2]|0)!=0))break}else if(k)break;ii(e,r)}}while(0);w=w+1|0}fB(d);i=0}h=F;return i|0}function wY(e,A){e=e|0;A=A|0;var r=0,a=0;r=1;e:while(1){switch(i[e>>0]|0){case 0:break e;case 58:{r=r+1|0;break}default:{}}e=e+1|0}a=P((U2(A)|0)+1|0,r)|0;e=a+10|0;if((t[47121]|0)<(a|0)){t[47121]=e;e=Q2(t[47122]|0,e)|0;t[47122]=e}else e=t[47122]|0;$1(e,A)|0;while(1){r=r+-1|0;e=t[47122]|0;if(!r)break;a=e+(U2(e)|0)|0;i[a>>0]=58;i[a+1>>0]=0;b3(e,A)|0}return e|0}function kY(e){e=e|0;var A=0,r=0;A=t[47184]|0;e:do{if(!A)r=7;else{A=Pw(e,A)|0;switch(i[A>>0]|0){case 110:if(!(e1(A,135709)|0)){A=1;break e}else{r=7;break e}case 102:if(!(e1(A,100066)|0)){A=2;break e}else{r=7;break e}case 98:{if(!(e1(A,100074)|0)){A=3;break e}if(!(e1(A,111221)|0)){A=4;break e}else{r=7;break e}}default:{r=7;break e}}}}while(0);if((r|0)==7){A=(Bk(Bd(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0)|0)!=0;A=A?2:1}return A|0}function dY(e){e=e|0;if(e|0){G2(t[e+8>>2]|0);G2(e)}return}function vY(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0;a=+c[A>>3]-+c[r>>3];t=+c[A+8>>3]-+c[r+8>>3];i=2.0/+D(+(a*a+.0001+t*t));c[e>>3]=i*t;c[e+8>>3]=-(a*i);return}function gY(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0.0,n=0.0,f=0.0,l=0.0;n=+c[r>>3]-+c[i>>3];f=+c[r+8>>3]-+c[i+8>>3];t=+D(+(f*f+n*n));if(t<.0001){l=+c[A>>3]-+c[a>>3];t=+c[A+8>>3]-+c[a+8>>3];f=t;n=l;t=+D(+(l*l+.0001+t*t))}l=2.0/t;c[e>>3]=f*l;c[e+8>>3]=-(l*n);return}function mY(e,A,r){e=+e;A=+A;r=+r;return+(r*.5*(1.0-e/A))}function pY(e,A,r){e=+e;A=+A;r=+r;return+(r*.5)}function EY(e,A,r){e=+e;A=+A;r=+r;return+(r*.5*(e/A))}function BY(e,A,r){e=+e;A=+A;r=+r;A=e/A;return+((!(A<=.5)?1.0-A:A)*r)}function yY(e,A,r,i){e=e|0;A=+A;r=r|0;i=i|0;var a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0,v=0;w=h;h=h+16|0;b=w;u=t[e+4>>2]|0;l=(u+-1|0)/3|0;if((u+-4|0)>>>0<3){t[r+4>>2]=4;t[r>>2]=KF(64)|0;t[i+4>>2]=4;u=KF(64)|0;t[i>>2]=u;Zx(b,t[e>>2]|0,3,A,t[r>>2]|0,u)}else{u=KF(l<<3)|0;n=0;f=t[e>>2]|0;a=0.0;while(1){if((n|0)>=(l|0))break;k=+CY(f);c[u+(n<<3)>>3]=k;n=n+1|0;f=f+48|0;a=k+a}A=a*A;o=0;a=0.0;while(1){if((l|0)<=(o|0))break;a=+c[u+(o<<3)>>3]+a;if(a>=A)break;o=o+1|0}s=o*3|0;n=s+4|0;f=r+4|0;t[f>>2]=n;t[r>>2]=KF(n<<4)|0;n=((l-o|0)*3|0)+1|0;l=i+4|0;t[l>>2]=n;t[i>>2]=KF(n<<4)|0;n=0;while(1){if((n|0)>=(t[f>>2]|0))break;d=(t[r>>2]|0)+(n<<4)|0;v=(t[e>>2]|0)+(n<<4)|0;t[d>>2]=t[v>>2];t[d+4>>2]=t[v+4>>2];t[d+8>>2]=t[v+8>>2];t[d+12>>2]=t[v+12>>2];n=n+1|0}n=n+-4|0;f=0;while(1){if((f|0)>=(t[l>>2]|0))break;v=(t[i>>2]|0)+(f<<4)|0;d=(t[e>>2]|0)+(n<<4)|0;t[v>>2]=t[d>>2];t[v+4>>2]=t[d+4>>2];t[v+8>>2]=t[d+8>>2];t[v+12>>2]=t[d+12>>2];n=n+1|0;f=f+1|0}k=+c[u+(o<<3)>>3];Zx(b,(t[e>>2]|0)+(s<<4)|0,3,(A-a+k)/k,(t[r>>2]|0)+(s<<4)|0,t[i>>2]|0);G2(u)}h=w;return}function CY(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0.0,t=0.0;a=+c[e+16>>3];i=+c[e>>3]-a;t=+c[e+24>>3];A=+c[e+8>>3]-t;i=+D(+(A*A+i*i));A=+c[e+32>>3];a=a-A;r=+c[e+40>>3];t=t-r;i=+D(+(t*t+a*a))+i;A=A-+c[e+48>>3];r=r-+c[e+56>>3];return+(i+ +D(+(r*r+A*A)))}function IY(e,A){e=e|0;A=A|0;A=yd(A)|0;if((i[(t[A+16>>2]|0)+115>>0]|0)==1)A=pJ(e)|0;else A=vJ(e,A)|0;return WY(A)|0}function ZY(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;k=h;h=h+1664|0;o=k+1600|0;u=k+800|0;b=k;w=$F(24)|0;t[w+16>>2]=1;s=((t[i+4>>2]|0)+-1|0)/3|0;f=0;l=w;while(1){if((f|0)>=(s|0))break;c=f*3|0;n=0;while(1){if((n|0)==4)break;d=o+(n<<4)|0;v=(t[i>>2]|0)+(n+c<<4)|0;t[d>>2]=t[v>>2];t[d+4>>2]=t[v+4>>2];t[d+8>>2]=t[v+8>>2];t[d+12>>2]=t[v+12>>2];n=n+1|0}f=f+1|0;l=GY(o,l)|0}n=0;f=0;l=w;while(1){if(!l){f=w;n=w;break}s=t[l+16>>2]|0;c=u+(n<<4)|0;i=b+(n<<4)|0;LY(f,l,s,c,i,a);n=n+1|0;if(!((n|0)==50|(s|0)==0)){f=l;l=s;continue}QY(e,A,r,n,u,b);t[u>>2]=t[c>>2];t[u+4>>2]=t[c+4>>2];t[u+8>>2]=t[c+8>>2];t[u+12>>2]=t[c+12>>2];t[b>>2]=t[i>>2];t[b+4>>2]=t[i+4>>2];t[b+8>>2]=t[i+8>>2];t[b+12>>2]=t[i+12>>2];f=l;n=1;l=s}while(1){if(!f)break;v=t[f+16>>2]|0;G2(n);f=v;n=v}h=k;return}function GY(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+144|0;a=n+128|0;r=n+64|0;i=n;if(!(uB(e)|0)){Zx(a,e,3,.5,r,i);r=GY(i,GY(r,A)|0)|0}else{r=A+16|0;if((t[r>>2]|0)==1){t[r>>2]=0;t[A>>2]=t[e>>2];t[A+4>>2]=t[e+4>>2];t[A+8>>2]=t[e+8>>2];t[A+12>>2]=t[e+12>>2]}r=e+48|0;t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];r=zY(a,A)|0}h=n;return r|0}function LY(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=+n;var f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0;d=h;h=h+96|0;u=d+80|0;o=d+64|0;s=d+48|0;b=d+32|0;w=d+16|0;k=d;t[b>>2]=t[A>>2];t[b+4>>2]=t[A+4>>2];t[b+8>>2]=t[A+8>>2];t[b+12>>2]=t[A+12>>2];do{if(e){t[w>>2]=t[e>>2];t[w+4>>2]=t[e+4>>2];t[w+8>>2]=t[e+8>>2];t[w+12>>2]=t[e+12>>2];if(!r){f=+c[b>>3];c[k>>3]=f*2.0-+c[w>>3];l=+c[b+8>>3];c[k+8>>3]=l*2.0-+c[w+8>>3];break}else{t[k>>2]=t[r>>2];t[k+4>>2]=t[r+4>>2];t[k+8>>2]=t[r+8>>2];t[k+12>>2]=t[r+12>>2];f=+c[b>>3];l=+c[b+8>>3];break}}else{t[k>>2]=t[r>>2];t[k+4>>2]=t[r+4>>2];t[k+8>>2]=t[r+8>>2];t[k+12>>2]=t[r+12>>2];f=+c[b>>3];c[w>>3]=f*2.0-+c[k>>3];l=+c[b+8>>3];c[w+8>>3]=l*2.0-+c[k+8>>3]}}while(0);t[s>>2]=t[w>>2];t[s+4>>2]=t[w+4>>2];t[s+8>>2]=t[w+8>>2];t[s+12>>2]=t[w+12>>2];t[o>>2]=t[b>>2];t[o+4>>2]=t[b+4>>2];t[o+8>>2]=t[b+8>>2];t[o+12>>2]=t[b+12>>2];t[u>>2]=t[k>>2];t[u+4>>2]=t[k+4>>2];t[u+8>>2]=t[k+8>>2];t[u+12>>2]=t[k+12>>2];g=+DY(s,o,u);v=+W(+g)*n;n=+Y(+g)*n;c[i>>3]=f+v;c[i+8>>3]=l+n;c[a>>3]=f-v;c[a+8>>3]=l-n;h=d;return}function QY(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0;l=i<<1;s=t[r>>2]|0;f=0;c=0;while(1){if((f|0)>=(s|0))break;o=(t[(t[A>>2]|0)+(f<<2)>>2]|0)+c|0;f=f+1|0;c=o}o=s+1|0;t[r>>2]=o;o=AM(t[A>>2]|0,o<<2)|0;t[A>>2]=o;t[o+(f<<2)>>2]=l;t[e>>2]=AM(t[e>>2]|0,c+l<<4)|0;A=l+-1+c|0;f=0;while(1){if((f|0)>=(i|0))break;o=(t[e>>2]|0)+(f+c<<4)|0;s=a+(f<<4)|0;t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[o+8>>2]=t[s+8>>2];t[o+12>>2]=t[s+12>>2];o=(t[e>>2]|0)+(A-f<<4)|0;s=n+(f<<4)|0;t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[o+8>>2]=t[s+8>>2];t[o+12>>2]=t[s+12>>2];f=f+1|0}return}function DY(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0;t=+c[A+8>>3];i=+c[A>>3];a=+R(+(+c[r+8>>3]-t),+(+c[r>>3]-i));i=+R(+(+c[e+8>>3]-t),+(+c[e>>3]-i));a=a-i;return+((a>0.0?a+-6.283185307179586:a)*.5+i)}function zY(e,A){e=e|0;A=A|0;var r=0;r=$F(24)|0;t[r+16>>2]=0;t[r>>2]=t[e>>2];t[r+4>>2]=t[e+4>>2];t[r+8>>2]=t[e+8>>2];t[r+12>>2]=t[e+12>>2];t[A+16>>2]=r;return r|0}function WY(e){e=e|0;var A=0,r=0,a=0,t=0,n=0;A=e;t=e;e:while(1){a=0;while(1){r=A;A=A+1|0;r=i[r>>0]|0;if(!(r<<24>>24))break e;if(a<<24>>24){n=5;break}if(r<<24>>24!=92)break;else a=1}A:do{if((n|0)==5){n=0;switch(r<<24>>24|0){case 114:{r=13;break A}case 108:case 110:{r=10;break A}default:break A}}}while(0);i[t>>0]=r;t=t+1|0}i[t>>0]=0;return e|0}function YY(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;r=t[e>>2]|0;while(1){n=i[r>>0]|0;if(!(n<<24>>24)){a=0;break}a=n<<24>>24;if(!(n<<24>>24==44|(I1(a)|0)!=0)){f=5;break}r=r+1|0}e:do{if((f|0)==5){switch(a|0){case 0:{a=0;break e}case 41:case 40:{r=r+1|0;break e}default:{}}f=A+4|0;l=A+8|0;while(1){if((FY(n<<24>>24)|0)<<24>>24){a=1;break e}a=t[f>>2]|0;if(a>>>0>=(t[l>>2]|0)>>>0){ow(A,1)|0;a=t[f>>2]|0}t[f>>2]=a+1;i[a>>0]=n;a=r+1|0;r=a;n=i[a>>0]|0}}}while(0);t[e>>2]=r;return a|0}function FY(e){e=e|0;switch(e|0){case 0:case 44:case 41:case 40:{e=1;break}default:e=0}return e|0}function MY(e,A){e=e|0;A=A|0;return VY(t[e>>2]|0,t[e+160>>2]|0,t[e+156>>2]|0,A)|0}function VY(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+160|0;c=b+20|0;o=b+16|0;u=b;t[c>>2]=0;t[o>>2]=0;cw(u,128,b+24|0);bw(u,a)|0;n=u+4|0;a=t[n>>2]|0;if(a>>>0>=(t[u+8>>2]|0)>>>0){ow(u,1)|0;a=t[n>>2]|0}i[a>>0]=0;f=t[u>>2]|0;t[n>>2]=f;l=e+300|0;s=e+296|0;a=0;n=f;e:while(1){if(a){a=1;break}a=c3(n,t[l>>2]|0,c)|0;if(!a){a=0;break}n=c3(a,t[s>>2]|0,o)|0;f=(n|0)!=0;if(f)a=c3(0,t[s>>2]|0,o)|0;else a=0;switch(((a|0)!=0&1)+(f&1)&3){case 2:{n=NY(e,n,0)|0;a=NY(e,a,r)|0;f=(n|0)>(a|0);a=(a&n|0)>-1&(((f?n:a)|0)>=(A|0)&((f?a:n)|0)<=(A|0));n=0;continue e}case 1:{a=(NY(e,n,A)|0)==(A|0);n=0;continue e}default:{a=0;n=0;continue e}}}hw(u);h=b;return a|0}function NY(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;f=i[A>>0]|0;if(!(f<<24>>24==97?(e1(A,100396)|0)==0:0))a=3;e:do{if((a|0)==3){if((RY(A)|0)<<24>>24){r=K3(A)|0;break}n=t[e+308>>2]|0;if(!n)r=-1;else{e=t[e+312>>2]|0;r=1;while(1){if((r|0)>(e|0)){r=-1;break e}a=t[n+(r<<2)>>2]|0;if(f<<24>>24==(i[a>>0]|0)?(e1(A,a)|0)==0:0)break e;r=r+1|0}}}}while(0);return r|0}function RY(e){e=e|0;var A=0;while(1){A=i[e>>0]|0;if(!(A<<24>>24)){e=1;break}if(((A&255)+-48|0)>>>0<10)e=e+1|0;else{e=0;break}}return e|0}function xY(e,A){e=e|0;A=A|0;if((+c[e+16>>3]>=+c[A>>3]?+c[A+16>>3]>=+c[e>>3]:0)?+c[e+24>>3]>=+c[A+8>>3]:0)e=+c[A+24>>3]>=+c[e+8>>3]&1;else e=0;return e|0}function JY(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0;e:do{if((t[e+156>>2]|0)>=2?(a=dx(r,t[47167]|0,195059)|0,(MY(e,a)|0)<<24>>24==0):0)if(!(i[a>>0]|0))if(!(ek(A,r)|0))a=1;else{a=ek(A,r)|0;while(1){if(!a){a=0;break e}n=dx(a,t[47190]|0,195059)|0;if(!(i[n>>0]|0)){a=1;break e}if((MY(e,n)|0)<<24>>24){a=1;break e}a=Ak(A,a,r)|0}}else a=0;else a=1}while(0);return a|0}function HY(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+64|0;i=r+32|0;a=r;e=(t[e+16>>2]|0)+48|0;t[a>>2]=t[e>>2];t[a+4>>2]=t[e+4>>2];t[a+8>>2]=t[e+8>>2];t[a+12>>2]=t[e+12>>2];t[a+16>>2]=t[e+16>>2];t[a+20>>2]=t[e+20>>2];t[a+24>>2]=t[e+24>>2];t[a+28>>2]=t[e+28>>2];t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];t[i+16>>2]=t[A+16>>2];t[i+20>>2]=t[A+20>>2];t[i+24>>2]=t[A+24>>2];t[i+28>>2]=t[A+28>>2];A=(xY(a,i)|0)&255;h=r;return A|0}function PY(e,A){e=e|0;A=A|0;var r=0.0,i=0,n=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0.0,d=0,v=0,g=0,m=0.0,p=0.0;d=t[e+152>>2]|0;v=eB(e)|0;t[v+4>>2]=2;t[v+8>>2]=A;t[v+12>>2]=8;if(d&16777216|0){if((f[(t[(Bd(A)|0)+16>>2]|0)+178>>1]|0)>2){r=+c[(t[(t[A+16>>2]|0)+132>>2]|0)+16>>3]*72.0;r=+(~~(r+(r>=0.0?.5:-.5))|0)}else r=0.0;c[v+168>>3]=r}s=A+16|0;SY(e,t[(t[s>>2]|0)+104>>2]|0,A);do{if(d&4259840|0){if((t[v+208>>2]|0)==0?(a[v+260>>1]&1)==0:0)break;w=oN(A)|0;o=t[s>>2]|0;r=+c[o+16>>3];k=+c[o+24>>3];o=jY(A)|0;e:do{if((w|2|0)==3){b=t[(t[s>>2]|0)+12>>2]|0;if(!((UY(b)|0)<<24>>24))i=0;else i=(t[b+4>>2]|o|0)!=0;if(!((d&524288|0)==0|((b|0)==0|i))){n=b+8|0;h=t[n>>2]|0;h=(h|0)<3?1:h;l=b+4|0;u=t[l>>2]|0;u=(u|0)>1?u:1;w=t[b+44>>2]|0;i=Hw(A,102705)|0;if(!i)i=0;else i=K3(i)|0;i=(i+-4|0)>>>0>56?20:i;if(!(t[l>>2]|o)){t[v+264>>2]=0;n=KF(32)|0;i=t[s>>2]|0;p=+c[i+88>>3];c[n>>3]=r-p;m=+c[i+80>>3]*.5;c[n+8>>3]=k-m;c[n+16>>3]=p+r;c[n+24>>3]=m+k;i=2;break}n=t[n>>2]|0;if(((n|0)<3?+c[b+32>>3]==0.0:0)?+c[b+24>>3]==0.0:0){n=v+264|0;if(t[b>>2]|0){t[n>>2]=1;n=KF(32)|0;c[n>>3]=r;c[n+8>>3]=k;i=(u<<1)+-1|0;c[n+16>>3]=+c[w+(i<<4)>>3]+r;c[n+24>>3]=+c[w+(i<<4)+8>>3]+k;i=2;break}t[n>>2]=2;n=(u<<1)+-1|0;n=TY(+c[w+(n<<4)>>3],+c[w+(n<<4)+8>>3],i)|0;l=0;while(1){if((l|0)>=(i|0))break e;w=n+(l<<4)|0;c[w>>3]=+c[w>>3]+r;w=n+(l<<4)+8|0;c[w>>3]=+c[w>>3]+k;l=l+1|0}}u=P(n,u+-1|0)|0;t[v+264>>2]=2;if((n|0)<(i|0)){n=KF(h<<4)|0;i=0;while(1){if((i|0)>=(h|0)){i=h;break e}b=i+u|0;c[n+(i<<4)>>3]=+c[w+(b<<4)>>3]+r;c[n+(i<<4)+8>>3]=+c[w+(b<<4)+8>>3]+k;i=i+1|0}}else{o=(n|0)/(i|0)|0;n=KF(i<<4)|0;l=0;s=0;while(1){if((l|0)>=(i|0))break e;h=s+u|0;c[n+(l<<4)>>3]=+c[w+(h<<4)>>3]+r;c[n+(l<<4)+8>>3]=+c[w+(h<<4)+8>>3]+k;l=l+1|0;s=s+o|0}}}else g=31}else g=31}while(0);if((g|0)==31){t[v+264>>2]=0;n=KF(32)|0;i=t[s>>2]|0;c[n>>3]=r-+c[i+88>>3];p=+c[i+80>>3]*.5;c[n+8>>3]=k-p;c[n+16>>3]=+c[i+96>>3]+r;c[n+24>>3]=p+k;i=2}if(!(d&8192))Dr(e,n,n,i)|0;t[v+272>>2]=n;t[v+268>>2]=i}}while(0);Ca(Hw(A,100032)|0);Xr(e,A);return}function XY(e){e=e|0;Sr(e);AB(e);return}function SY(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+144|0;s=o;a=Hw(r,141055)|0;l=Hw(r,141101)|0;c=Hw(r,141088)|0;cw(s,128,o+16|0);if(!A)f=0;else f=t[A>>2]|0;if(!((a|0)!=0?(i[a>>0]|0)!=0:0))a=Hw(r,111477)|0;n=iB(e,r,s)|0;if(!l)A=0;else A=IY(l,r)|0;rB(e,f,a,A,c,n,r)|0;G2(A);hw(s);h=o;return}function jY(e){e=e|0;var A=0,r=0;e=vx(e,t[47157]|0,195059)|0;e:do{if(!(i[e>>0]|0))e=0;else{JB(e)|0;e=0;A=188228;while(1){r=t[A>>2]|0;if(!r)break e;r=(e1(r,111101)|0)==0;e=r?1:e;A=A+4|0}}}while(0);return e|0}function UY(e){e=e|0;var A=0.0;if(((t[e+8>>2]|0)==4?(A=+c[e+16>>3],((~~(A+(A>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+c[e+24>>3]==0.0:0)e=+c[e+32>>3]==0.0&1;else e=0;return e|0}function TY(e,A,r){e=+e;A=+A;r=r|0;var i=0.0,a=0,t=0.0,n=0;t=6.283185307179586/+(r|0);n=KF(r<<4)|0;i=0.0;a=0;while(1){if((a|0)>=(r|0))break;c[n+(a<<4)>>3]=+W(+i)*e;c[n+(a<<4)+8>>3]=+Y(+i)*A;i=i+t;a=a+1|0}return n|0}function OY(e,A){e=e|0;A=A|0;var r=0;e:do{if((t[e+156>>2]|0)>=2?(r=dx(A,zw(A,0,101510,0)|0,195059)|0,(MY(e,r)|0)<<24>>24==0):0)if(!(i[r>>0]|0)){r=sd(A)|0;while(1){if(!r){r=0;break e}if((JY(e,A,r)|0)<<24>>24){r=1;break e}r=cd(A,r)|0}}else r=0;else r=1}while(0);return r|0}function _Y(e,A){e=e|0;A=A|0;var r=0;r=eB(e)|0;t[r+4>>2]=1;t[r+8>>2]=A;t[r+12>>2]=1;SY(e,t[(t[A+16>>2]|0)+12>>2]|0,A);Nr(e,A);return}function qY(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;e=Hw(e,141082)|0;e:do{if((e|0)!=0?(i[e>>0]|0)!=0:0){JB(e)|0;r=188228;e=0;while(1){while(1){a=t[r>>2]|0;if(!a){r=188228;break e}if(!(e1(a,111101)|0)){n=10;break}if(!(e1(a,106334)|0)){a=r;n=12;break}if(!(e1(a,106341)|0)){a=r;n=14;break}if(!(e1(a,106316)|0)){a=r;n=16;break}r=r+4|0}if((n|0)==10){r=r+4|0;e=e|1;continue}else if((n|0)==12){while(1){f=a;a=a+4|0;n=t[a>>2]|0;t[f>>2]=n;if(!n)break;else n=12}e=e|3;continue}else if((n|0)==14){while(1){n=a;a=a+4|0;f=t[a>>2]|0;t[n>>2]=f;if(!f)break;else n=14}e=e|64;continue}else if((n|0)==16){while(1){n=a;a=a+4|0;f=t[a>>2]|0;t[n>>2]=f;if(!f)break;else n=16}e=e|4;continue}}}else{r=0;e=0}}while(0);t[A>>2]=e;return r|0}function KY(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,c=0,o=0;c=h;h=h+16|0;f=c;l=c+4|0;t[l>>2]=0;o=(nB(e,0,l)|0)==0;l=t[l>>2]|0;if((o?(a=t[l>>2]|0,(a|0)>=2):0)?(n=l+8|0,(t[t[n>>2]>>2]|0)!=0):0){if((a|0)>2)nw(0,100415,f)|0;o=$F((U2(e)|0)+1|0)|0;t[A>>2]=o;$1(o,t[t[n>>2]>>2]|0)|0;if(!(t[(t[n>>2]|0)+12>>2]|0))t[A+4>>2]=0;else{o=t[A>>2]|0;o=o+((U2(o)|0)+1)|0;t[A+4>>2]=o;$1(o,t[(t[n>>2]|0)+12>>2]|0)|0}e=t[n>>2]|0;do{if(!(i[e+8>>0]|0))if(!(i[e+20>>0]|0)){s[r>>2]=0.0;break}else{s[r>>2]=1.0-+s[e+16>>2];break}else t[r>>2]=t[e+4>>2]}while(0);fB(l);e=1}else{t[A>>2]=0;fB(l);e=0}h=c;return e|0}function $Y(e,A){e=e|0;A=A|0;Rr(e,A);AB(e);return}function eF(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0.0,o=0.0,u=0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;B=h;h=h+96|0;w=B+48|0;v=B+16|0;E=B+8|0;p=B;g=B+80|0;t[g>>2]=1e3;a=$F(16e3)|0;m=e+256|0;i=1;f=1;n=0;k=0;d=t[A+8>>2]|0;while(1){if((k|0)>=(t[A>>2]|0))break;r=t[d>>2]|0;e:do{switch(r|0){case 1:case 0:{u=d+80|0;t[v>>2]=t[u>>2];t[v+4>>2]=t[u+4>>2];t[v+8>>2]=t[u+8>>2];t[v+12>>2]=t[u+12>>2];t[v+16>>2]=t[u+16>>2];t[v+20>>2]=t[u+20>>2];t[v+24>>2]=t[u+24>>2];t[v+28>>2]=t[u+28>>2];t[w>>2]=t[m>>2];t[w+4>>2]=t[m+4>>2];t[w+8>>2]=t[m+8>>2];t[w+12>>2]=t[m+12>>2];t[w+16>>2]=t[m+16>>2];t[w+20>>2]=t[m+20>>2];t[w+24>>2]=t[m+24>>2];t[w+28>>2]=t[m+28>>2];if(!(xY(v,w)|0))r=f;else{C=d+8|0;I=d+24|0;c[a>>3]=+c[C>>3]-+c[I>>3];u=d+16|0;y=d+32|0;c[a+8>>3]=+c[u>>3]-+c[y>>3];c[a+16>>3]=+c[I>>3]+ +c[C>>3];c[a+24>>3]=+c[y>>3]+ +c[u>>3];ai(e,a,2,(r|0)==0?f:0);r=f}break}case 3:case 2:{I=d+80|0;t[v>>2]=t[I>>2];t[v+4>>2]=t[I+4>>2];t[v+8>>2]=t[I+8>>2];t[v+12>>2]=t[I+12>>2];t[v+16>>2]=t[I+16>>2];t[v+20>>2]=t[I+20>>2];t[v+24>>2]=t[I+24>>2];t[v+28>>2]=t[I+28>>2];t[w>>2]=t[m>>2];t[w+4>>2]=t[m+4>>2];t[w+8>>2]=t[m+8>>2];t[w+12>>2]=t[m+12>>2];t[w+16>>2]=t[m+16>>2];t[w+20>>2]=t[m+20>>2];t[w+24>>2]=t[m+24>>2];t[w+28>>2]=t[m+28>>2];if(!(xY(v,w)|0))r=f;else{r=d+8|0;a=AF(a,g,t[r+4>>2]|0,t[r>>2]|0)|0;ti(e,a,t[r>>2]|0,(t[d>>2]|0)==2?f:0);r=f}break}case 5:case 4:{I=d+80|0;t[v>>2]=t[I>>2];t[v+4>>2]=t[I+4>>2];t[v+8>>2]=t[I+8>>2];t[v+12>>2]=t[I+12>>2];t[v+16>>2]=t[I+16>>2];t[v+20>>2]=t[I+20>>2];t[v+24>>2]=t[I+24>>2];t[v+28>>2]=t[I+28>>2];t[w>>2]=t[m>>2];t[w+4>>2]=t[m+4>>2];t[w+8>>2]=t[m+8>>2];t[w+12>>2]=t[m+12>>2];t[w+16>>2]=t[m+16>>2];t[w+20>>2]=t[m+20>>2];t[w+24>>2]=t[m+24>>2];t[w+28>>2]=t[m+28>>2];if(!(xY(v,w)|0))r=f;else{r=d+8|0;a=AF(a,g,t[r+4>>2]|0,t[r>>2]|0)|0;fi(e,a,t[r>>2]|0,0,0,(t[d>>2]|0)==4?f&255:0);r=f}break}case 6:{I=d+80|0;t[v>>2]=t[I>>2];t[v+4>>2]=t[I+4>>2];t[v+8>>2]=t[I+8>>2];t[v+12>>2]=t[I+12>>2];t[v+16>>2]=t[I+16>>2];t[v+20>>2]=t[I+20>>2];t[v+24>>2]=t[I+24>>2];t[v+28>>2]=t[I+28>>2];t[w>>2]=t[m>>2];t[w+4>>2]=t[m+4>>2];t[w+8>>2]=t[m+8>>2];t[w+12>>2]=t[m+12>>2];t[w+16>>2]=t[m+16>>2];t[w+20>>2]=t[m+20>>2];t[w+24>>2]=t[m+24>>2];t[w+28>>2]=t[m+28>>2];if(!(xY(v,w)|0))r=f;else{r=d+8|0;a=AF(a,g,t[r+4>>2]|0,t[r>>2]|0)|0;li(e,a,t[r>>2]|0);r=f}break}case 7:{I=d+80|0;t[v>>2]=t[I>>2];t[v+4>>2]=t[I+4>>2];t[v+8>>2]=t[I+8>>2];t[v+12>>2]=t[I+12>>2];t[v+16>>2]=t[I+16>>2];t[v+20>>2]=t[I+20>>2];t[v+24>>2]=t[I+24>>2];t[v+28>>2]=t[I+28>>2];t[w>>2]=t[m>>2];t[w+4>>2]=t[m+4>>2];t[w+8>>2]=t[m+8>>2];t[w+12>>2]=t[m+12>>2];t[w+16>>2]=t[m+16>>2];t[w+20>>2]=t[m+20>>2];t[w+24>>2]=t[m+24>>2];t[w+28>>2]=t[m+28>>2];if(!(xY(v,w)|0))r=f;else{c[a>>3]=+c[d+8>>3];c[a+8>>3]=+c[d+16>>3];r=t[d+112>>2]|0;t[w>>2]=t[a>>2];t[w+4>>2]=t[a+4>>2];t[w+8>>2]=t[a+8>>2];t[w+12>>2]=t[a+12>>2];Kr(e,w,r);r=f}break}case 8:{Ai(e,t[d+8>>2]|0);r=1;break}case 9:{$r(e,t[d+8>>2]|0);r=1;break}case 13:{if((t[d+8>>2]|0)!=2){r=d+16|0;C=t[r+36>>2]|0;I=t[C+12>>2]|0;b=+s[C+8>>2];r=~~(+R(+(+c[d+40>>3]-+c[d+24>>3]),+(+c[d+32>>3]-+c[r>>3]))*57.29577951308232);Ai(e,t[C+4>>2]|0);ri(e,I,r,b);r=2;break e}I=t[d+68>>2]|0;f=t[I+4>>2]|0;u=t[I+12>>2]|0;b=+s[I+8>>2];l=+c[d+40>>3];o=+c[d+16>>3];if(l==o?+c[d+48>>3]==+c[d+24>>3]:0)r=0;else r=~~(+M(+((o-l)/+c[d+32>>3]))*57.29577951308232);Ai(e,f);ri(e,u,r,b);r=3;break}case 14:{nw(0,100481,p)|0;r=f;break}case 12:{if(!i){i=0;r=f}else{nw(0,100521,E)|0;i=0;r=f}break}case 11:{JB(t[d+8>>2]|0)|0;ii(e,188228);n=188228;r=f;break}default:r=f}}while(0);f=r;k=k+1|0;d=d+120|0}if(n|0)ii(e,t[(t[e>>2]|0)+336>>2]|0);G2(a);h=B;return}function AF(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;n=t[A>>2]|0;a=n<<1;a=(a|0)>(i|0)?a:i;if((n|0)<(i|0)){e=AM(e,a<<4)|0;t[A>>2]=a}A=0;while(1){if((A|0)>=(i|0))break;c[e+(A<<4)>>3]=+c[r+(A*24|0)>>3];c[e+(A<<4)+8>>3]=+c[r+(A*24|0)+8>>3];A=A+1|0}return e|0}function rF(e,A){e=e|0;A=A|0;var r=0;r=t[A>>2]|0;t[e>>2]=t[A+4>>2];t[e+4>>2]=r;return}function iF(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;n=A+16|0;a=1;while(1){A=t[n>>2]|0;if((a|0)>(t[A+180>>2]|0))break;r=t[(t[A+184>>2]|0)+(a<<2)>>2]|0;iF(e,r);A=Hw(r,140823)|0;if(A|0?i[A>>0]|0:0)$r(e,A);A=Hw(r,137729)|0;if(A|0?i[A>>0]|0:0)$r(e,A);A=Hw(r,140977)|0;if(A|0?i[A>>0]|0:0)$r(e,A);A=Hw(r,101418)|0;if(A|0?i[A>>0]|0:0)Ai(e,A);A=Hw(r,101446)|0;if(A|0?i[A>>0]|0:0)$r(e,A);a=a+1|0}return}function aF(e){e=e|0;var A=0,r=0,i=0;A=t[47127]|0;if(!A){A=Uh(20628,t[4581]|0)|0;t[47127]=A}if(!(L5[t[A>>2]&63](A,e,4)|0)){r=t[47127]|0;i=t[r>>2]|0;A=o3(e)|0;L5[i&63](r,A,1)|0;A=1}else A=0;return A|0}function tF(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function nF(e){e=e|0;var A=0;A=t[47128]|0;if(!e){if((A|0)>0?(A=A+-1|0,t[47128]=A,(A|0)==0):0){W4(1,t[47129]|0)|0;G2(t[47129]|0)}}else{t[47128]=A+1;if(!A){t[47129]=o3(W4(1,0)|0)|0;W4(1,153563)|0}}return}function fF(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0.0;m=h;h=h+96|0;d=m+72|0;k=m+56|0;w=m+48|0;g=m+32|0;v=m+24|0;i=m+8|0;r=m;if(0)lx();do{if((Sd(A,137483,0,1)|0)!=0?(b=A+16|0,(t[(t[b>>2]|0)+8>>2]|0)!=0):0){lF(A);sF(e,A);cF(e,A);nF(1);l=e+56|0;s=e+184|0;o=e+192|0;u=e+28|0;f=Qm(e)|0;e:while(1){if(!f){n=33;break}r=t[l>>2]|0;if(!r){t[f+20>>2]=0;r=0}else{t[f+20>>2]=t[r+8>>2];r=t[r+12>>2]|0}t[f+24>>2]=r;t[f+12>>2]=e;t[f+28>>2]=t[s>>2];t[f+620>>2]=25764;t[f+624>>2]=14;if(!(t[(t[b>>2]|0)+8>>2]|0)){n=13;break}i=f+52|0;n=Zr(f,t[i>>2]|0)|0;t[f+56>>2]=n;switch(n|0){case 999:{n=16;break e}case 21:{r=1;break}case 24:{r=520;break}default:r=oF(A)|0}a=f+152|0;t[a>>2]=t[a>>2]|r;r=t[o>>2]|0;do{if(!r)n=24;else{if(t[r+152>>2]&32|0?(e1(t[i>>2]|0,t[r+52>>2]|0)|0)==0:0){r=t[47130]|0;if(!r){n=27;break}t[r+8>>2]=f;t[f+36>>2]=t[r+36>>2];n=29;break}Lr(r);t[o>>2]=0;t[u>>2]=0;n=24}}while(0);if((n|0)==24){t[47130]=0;n=27}if((n|0)==27?(n=0,(Gr(f)|0)==0):0){t[o>>2]=f;n=29}if((n|0)==29){t[f+8>>2]=0;t[f+104>>2]=25876;uF(f);bF(f);hF(f,A);wF(f,A);kF(f,A);if(!(t[a>>2]&128))vB(f,A);t[47130]=f}f=Dm(e)|0}if((n|0)==13){nw(1,100679,v)|0;nF(0);if(!0){r=-1;break}r=t[15712]|0;v=Mk(A)|0;p=+sx();t[g>>2]=v;c[g+8>>3]=p;a3(r,100650,g)|0;r=-1;break}else if((n|0)==16){t[w>>2]=t[i>>2];nw(1,100700,w)|0;nF(0);if(!0){r=-1;break}r=t[15712]|0;g=Mk(A)|0;p=+sx();t[k>>2]=g;c[k+8>>3]=p;a3(r,100650,k)|0;r=-1;break}else if((n|0)==33){nF(0);if(!0){r=0;break}r=t[15712]|0;g=Mk(A)|0;p=+sx();t[d>>2]=g;c[d+8>>3]=p;a3(r,100650,d)|0;r=0;break}}else n=5}while(0);if((n|0)==5){nw(1,100602,r)|0;if(!0)r=-1;else{r=t[15712]|0;g=Mk(A)|0;p=+sx();t[i>>2]=g;c[i+8>>3]=p;a3(r,100650,i)|0;r=-1}}h=m;return r|0}function lF(e){e=e|0;var A=0;A=sd(e)|0;while(1){if(!A)break;pF(e,A);A=cd(e,A)|0}return}function sF(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0.0;b=h;h=h+32|0;s=b+24|0;a=b+16|0;l=b+8|0;u=b;t[e+168>>2]=A;n=e+293|0;i[n>>0]=0;r=Hw(A,105496)|0;if(r|0?(t[a>>2]=l,t[a+4>>2]=u,f=V3(r,105503,a)|0,(f|0)>0):0){w=+c[l>>3]*72.0;r=e+208|0;c[r>>3]=w;c[e+200>>3]=w;if((f|0)!=1)c[r>>3]=+c[u>>3]*72.0;i[n>>0]=1}a=e+292|0;i[a>>0]=0;r=Hw(A,101102)|0;if(r|0?(t[s>>2]=l,t[s+4>>2]=u,o=V3(r,105503,s)|0,(o|0)>0):0){w=+c[l>>3]*72.0;r=e+224|0;c[r>>3]=w;c[e+216>>3]=w;if((o|0)!=1)c[r>>3]=+c[u>>3]*72.0;i[a>>0]=1}r=e+294|0;i[r>>0]=0;a=e+232|0;n=A+16|0;u=(t[(t[n>>2]|0)+8>>2]|0)+48|0;t[a>>2]=t[u>>2];t[a+4>>2]=t[u+4>>2];t[a+8>>2]=t[u+8>>2];t[a+12>>2]=t[u+12>>2];a=t[(t[n>>2]|0)+8>>2]|0;if(+c[a+48>>3]>.001?+c[a+56>>3]>.001:0)i[r>>0]=1;t[e+288>>2]=i[a+81>>0]|0?90:0;r=e+196|0;t[r>>2]=101106;a=Hw(A,101109)|0;if(a|0?i[a>>0]|0:0)t[r>>2]=a;u=e+256|0;o=(t[n>>2]|0)+16|0;t[u>>2]=t[o>>2];t[u+4>>2]=t[o+4>>2];t[u+8>>2]=t[o+8>>2];t[u+12>>2]=t[o+12>>2];t[u+16>>2]=t[o+16>>2];t[u+20>>2]=t[o+20>>2];t[u+24>>2]=t[o+24>>2];t[u+28>>2]=t[o+28>>2];t[47141]=zw(A,0,101472,0)|0;t[47142]=zw(A,0,101463,0)|0;t[e+320>>2]=vx(0,t[47151]|0,107994)|0;c[e+328>>3]=+wx(0,t[47150]|0,14.0,1.0);t[e+336>>2]=20664;t[e+188>>2]=Mk(A)|0;h=b;return}function cF(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;r=e+304|0;a=t[r>>2]|0;if(a|0){G2(a);t[r>>2]=0}a=e+308|0;r=t[a>>2]|0;if(r|0){G2(r);t[a>>2]=0}n=e+316|0;r=t[n>>2]|0;if(r|0){G2(r);t[n>>2]=0}r=Hw(A,100853)|0;if(r){t[e+312>>2]=gF(e,A,r)|0;r=Hw(A,100860)|0;if(r|0?i[r>>0]|0:0)t[n>>2]=mF(e,r)|0}else{t[a>>2]=0;t[e+312>>2]=1}return}function oF(e){e=e|0;e=Hw(e,100821)|0;e:do{if(!e)e=0;else switch(i[e>>0]|0){case 110:{if(!(e1(e+1|0,100833)|0))e=1;else{e=0;break e}break}case 101:{if(!(e1(e+1|0,100843)|0))e=16;else{e=0;break e}break}default:{e=0;break e}}}while(0);return e|0}function uF(e){e=e|0;var A=0.0,r=0;r=t[e>>2]|0;if(!(i[r+292>>0]|0)){if((t[e+56>>2]|0)==300)A=+c[(t[e+68>>2]|0)+8>>3];else A=4.0;c[e+248>>3]=A;c[e+240>>3]=A}else{e=e+240|0;r=r+216|0;t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2]}return}function bF(e){e=e|0;var A=0;A=t[e>>2]|0;e:do{if(!(i[A+293>>0]|0))switch(t[e+56>>2]|0){case 300:{A=e+416|0;e=(t[e+84>>2]|0)+8|0;t[A>>2]=t[e>>2];t[A+4>>2]=t[e+4>>2];t[A+8>>2]=t[e+8>>2];t[A+12>>2]=t[e+12>>2];break e}case 30:case 21:case 22:case 4:case 3:case 2:{c[e+424>>3]=36.0;c[e+416>>3]=36.0;break e}default:{A=e+416|0;t[A>>2]=0;t[A+4>>2]=0;t[A+8>>2]=0;t[A+12>>2]=0;break e}}else{e=e+416|0;A=A+200|0;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2]}}while(0);return}function hF(e,A){e=e|0;A=A|0;var r=0.0,a=0;a=t[(t[e>>2]|0)+192>>2]|0;r=+c[(t[(t[A+16>>2]|0)+8>>2]|0)+24>>3];do{if(!(r!=0.0)){if(a|0?i[a+128>>0]|0:0){e=e+432|0;a=a+112|0;t[e>>2]=t[a>>2];t[e+4>>2]=t[a+4>>2];t[e+8>>2]=t[a+8>>2];t[e+12>>2]=t[a+12>>2];break}A=e+432|0;if((t[e+56>>2]|0)==300){e=(t[e+84>>2]|0)+40|0;t[A>>2]=t[e>>2];t[A+4>>2]=t[e+4>>2];t[A+8>>2]=t[e+8>>2];t[A+12>>2]=t[e+12>>2];break}else{c[e+440>>3]=96.0;c[A>>3]=96.0;break}}else{c[e+440>>3]=r;c[e+432>>3]=r}}while(0);return}function wF(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0.0,w=0.0,k=0.0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;I=h;h=h+112|0;g=I+80|0;m=I+56|0;v=I+40|0;p=I+32|0;E=I+24|0;B=I+16|0;y=I+8|0;C=I;o=t[e>>2]|0;b=+c[o+272>>3];k=+c[o+280>>3];w=+c[o+256>>3];d=+c[o+264>>3];a=+c[e+240>>3];r=w-a;c[e+208>>3]=r;f=+c[e+248>>3];l=d-f;c[e+216>>3]=l;a=a+b;c[e+224>>3]=a;f=f+k;c[e+232>>3]=f;r=a-r;l=f-l;c[B>>3]=1.0;n=t[(t[A+16>>2]|0)+8>>2]|0;f=+c[n+64>>3];do{if(f>.001?(s=+c[n+72>>3],s>.001):0){r=r==0.0?f:r;a=l==0.0?s:l;if(!(fa&(f>r&(i[n+80>>0]|0)!=0)):0){s=r;l=a;f=1.0;break}u=f/r>3]=f;s=r;l=a}else{s=r;f=1.0}}while(0);a=(w+b)*.5;c[y>>3]=a;r=(d+k)*.5;c[C>>3]=r;t[e+360>>2]=t[o+288>>2];s=f*s;c[p>>3]=s;l=f*l;c[E>>3]=l;n=Hw(A,100752)|0;if(n){o=Z2((U2(n)|0)+1|0)|0;u=Z2((U2(n)|0)+1|0)|0;t[v>>2]=p;t[v+4>>2]=E;t[v+8>>2]=B;t[v+12>>2]=o;do{if((V3(n,100761,v)|0)==4){n=gd(t[A+60>>2]|0,o,0)|0;if(n|0){m=t[n+16>>2]|0;c[y>>3]=+c[m+16>>3];c[C>>3]=+c[m+24>>3]}}else{t[m>>2]=p;t[m+4>>2]=E;t[m+8>>2]=B;t[m+12>>2]=o;t[m+16>>2]=u;if((V3(n,100781,m)|0)!=4){t[g>>2]=p;t[g+4>>2]=E;t[g+8>>2]=B;t[g+12>>2]=y;t[g+16>>2]=C;V3(n,100801,g)|0;break}n=gd(t[A+60>>2]|0,o,0)|0;if(n|0){m=t[n+16>>2]|0;c[y>>3]=+c[m+16>>3];c[C>>3]=+c[m+24>>3]}}}while(0);G2(o);G2(u);s=+c[p>>3];l=+c[E>>3];f=+c[B>>3];a=+c[y>>3];r=+c[C>>3]}c[e+368>>3]=s;c[e+376>>3]=l;c[e+352>>3]=f;c[e+336>>3]=a;c[e+344>>3]=r;h=I;return}function kF(e,A){e=e|0;A=A|0;var r=0,a=0,n=0.0,f=0.0,l=0,s=0.0,o=0.0,u=0.0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0.0,x=0.0,J=0.0;N=h;h=h+224|0;F=N+200|0;C=N+168|0;Q=N+144|0;Y=N+120|0;D=N+96|0;z=N+64|0;r=N+184|0;p=N+176|0;E=N+160|0;y=N+136|0;B=N+112|0;I=N+80|0;Z=N+48|0;G=N+32|0;L=N+16|0;M=N+8|0;V=N;m=t[e>>2]|0;t[z>>2]=0;t[z+4>>2]=0;t[z+8>>2]=0;t[z+12>>2]=0;W=e+368|0;t[Y>>2]=t[W>>2];t[Y+4>>2]=t[W+4>>2];t[Y+8>>2]=t[W+8>>2];t[Y+12>>2]=t[W+12>>2];W=e+360|0;if(t[W>>2]|0){t[F>>2]=t[Y>>2];t[F+4>>2]=t[Y+4>>2];t[F+8>>2]=t[Y+8>>2];t[F+12>>2]=t[Y+12>>2];dF(r,F);t[Y>>2]=t[r>>2];t[Y+4>>2]=t[r+4>>2];t[Y+8>>2]=t[r+8>>2];t[Y+12>>2]=t[r+12>>2]}g=e+416|0;t[D>>2]=t[g>>2];t[D+4>>2]=t[g+4>>2];t[D+8>>2]=t[g+8>>2];t[D+12>>2]=t[g+12>>2];if((i[m+294>>0]|0)!=0?(t[e+152>>2]&32|0)!=0:0){f=+c[m+232>>3]-+c[D>>3]*2.0;c[Q>>3]=f;s=+c[m+240>>3]-+c[D+8>>3]*2.0;w=Q+8|0;c[w>>3]=s;if(!(f<.0001)){b=+c[Y>>3];r=~~(b/f);a=e+164|0;t[a>>2]=r;if(b-f*+(r|0)>.0001){r=r+1|0;t[a>>2]=r}}else{t[e+164>>2]=1;r=1}if(!(s<.0001)){n=+c[Y+8>>3];a=~~(n/s);l=e+168|0;t[l>>2]=a;if(n-s*+(a|0)>.0001){a=a+1|0;t[l>>2]=a}}else{t[e+168>>2]=1;a=1;n=+c[Y+8>>3]}t[e+204>>2]=P(a,r)|0;b=+c[(+c[Y>>3]>3];c[Y>>3]=b;r=w;a=Y;o=+c[(n>3];n=b;l=21}else{if(t[e+68>>2]|0){r=t[e+84>>2]|0;f=+c[r+24>>3]-+c[D>>3]*2.0;f=f<0.0?0.0:f;c[Q>>3]=f;b=+c[r+32>>3]-+c[D+8>>3]*2.0;r=Q+8|0;c[r>>3]=b;if(b<0.0){a=Q;l=17}else r=Q}else{c[Q+8>>3]=0.0;a=Q;r=Q;l=17}if((l|0)==17){c[r>>3]=0.0;r=a;f=+c[a>>3]}t[e+204>>2]=1;t[e+168>>2]=1;t[e+164>>2]=1;n=+c[Y>>3];if(f>3]=n;f=n}r=Q+8|0;s=+c[r>>3];o=+c[Y+8>>3];if(s>3]=o;d=r;o=+c[r>>3]}u=+c[D>>3];v=e+432|0;s=+c[v>>3]*.013888888888888888*(u*2.0+f);t[e+448>>2]=~~(s+(s>=0.0?.5:-.5));k=D+8|0;s=+c[k>>3];g=e+440|0;b=+c[g>>3]*.013888888888888888*(s*2.0+o);t[e+452>>2]=~~(b+(b>=0.0?.5:-.5));l=e+188|0;w=e+180|0;r=e+172|0;a=m+196|0;t[r>>2]=0;t[r+4>>2]=0;t[r+8>>2]=0;t[r+12>>2]=0;t[r+16>>2]=0;t[r+20>>2]=0;vF(p,e,i[t[a>>2]>>0]|0);m=p;p=t[m+4>>2]|0;r=w;t[r>>2]=t[m>>2];t[r+4>>2]=p;vF(E,e,i[(t[a>>2]|0)+1>>0]|0);r=E;E=t[r>>2]|0;r=t[r+4>>2]|0;p=l;t[p>>2]=E;t[p+4>>2]=r;E=(t[w>>2]|0)+E|0;if(!((((E|0)>-1?E:0-E|0)|0)==1?(E=(t[e+184>>2]|0)+r|0,(((E|0)>-1?E:0-E|0)|0)==1):0)){vF(y,e,66);p=y;y=t[p+4>>2]|0;E=w;t[E>>2]=t[p>>2];t[E+4>>2]=y;vF(B,e,76);E=B;B=t[E+4>>2]|0;y=l;t[y>>2]=t[E>>2];t[y+4>>2]=B;t[C>>2]=t[a>>2];nw(0,100732,C)|0}if(i[(t[(t[A+16>>2]|0)+8>>2]|0)+82>>0]|0){if(f>n){o=(f-n)*.5;c[z>>3]=o}else o=0.0;f=+c[d>>3];b=+c[Y+8>>3];if(f>b){f=(f-b)*.5;c[z+8>>3]=f}else f=0.0}else{f=0.0;o=0.0}if(!(t[W>>2]|0))l=1;else{t[F>>2]=t[Y>>2];t[F+4>>2]=t[Y+4>>2];t[F+8>>2]=t[Y+8>>2];t[F+12>>2]=t[Y+12>>2];dF(I,F);t[Y>>2]=t[I>>2];t[Y+4>>2]=t[I+4>>2];t[Y+8>>2]=t[I+8>>2];t[Y+12>>2]=t[I+12>>2];t[F>>2]=t[Q>>2];t[F+4>>2]=t[Q+4>>2];t[F+8>>2]=t[Q+8>>2];t[F+12>>2]=t[Q+12>>2];dF(Z,F);t[Q>>2]=t[Z>>2];t[Q+4>>2]=t[Z+4>>2];t[Q+8>>2]=t[Z+8>>2];t[Q+12>>2]=t[Z+12>>2];t[F>>2]=t[D>>2];t[F+4>>2]=t[D+4>>2];t[F+8>>2]=t[D+8>>2];t[F+12>>2]=t[D+12>>2];dF(G,F);t[D>>2]=t[G>>2];t[D+4>>2]=t[G+4>>2];t[D+8>>2]=t[G+8>>2];t[D+12>>2]=t[G+12>>2];t[F>>2]=t[z>>2];t[F+4>>2]=t[z+4>>2];t[F+8>>2]=t[z+8>>2];t[F+12>>2]=t[z+12>>2];dF(L,F);t[z>>2]=t[L>>2];t[z+4>>2]=t[L+4>>2];t[z+8>>2]=t[L+8>>2];t[z+12>>2]=t[L+12>>2];u=+c[D>>3];o=+c[z>>3];s=+c[k>>3];f=+c[z+8>>3];n=+c[Y>>3];l=(t[W>>2]|0)==0}b=o+u;c[e+384>>3]=b;x=f+s;c[e+392>>3]=x;R=o+u+n;c[e+400>>3]=R;J=+c[Y+8>>3];u=f+s+J;c[e+408>>3]=u;o=+c[e+352>>3];c[e+320>>3]=n/o;c[e+328>>3]=J/o;o=+c[v>>3];b=b*.013888888888888888*o;a=e+456|0;t[a>>2]=~~(b+(b>=0.0?.5:-.5));b=+c[g>>3];s=x*.013888888888888888*b;t[e+460>>2]=~~(s+(s>=0.0?.5:-.5));o=R*.013888888888888888*o;r=e+464|0;t[r>>2]=~~(o+(o>=0.0?.5:-.5));b=u*.013888888888888888*b;t[e+468>>2]=~~(b+(b>=0.0?.5:-.5));if(!l){t[F>>2]=t[a>>2];t[F+4>>2]=t[a+4>>2];rF(M,F);Y=M;M=t[Y+4>>2]|0;e=a;t[e>>2]=t[Y>>2];t[e+4>>2]=M;t[F>>2]=t[r>>2];t[F+4>>2]=t[r+4>>2];rF(V,F);e=V;M=t[e+4>>2]|0;V=r;t[V>>2]=t[e>>2];t[V+4>>2]=M}h=N;return}function dF(e,A){e=e|0;A=A|0;var r=0.0;r=+c[A>>3];c[e>>3]=+c[A+8>>3];c[e+8>>3]=r;return}function vF(e,A,r){e=e|0;A=A|0;r=r|0;r=(r<<24>>24)+-66|0;switch(r>>>1|r<<31|0){case 9:{t[A+176>>2]=(t[A+168>>2]|0)+-1;A=0;r=-1;break}case 0:{A=0;r=1;break}case 5:{A=1;r=0;break}case 8:{t[A+172>>2]=(t[A+164>>2]|0)+-1;A=-1;r=0;break}default:{A=0;r=0}}t[e>>2]=A;t[e+4>>2]=r;return}function gF(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;s=h;h=h+16|0;n=s;a=Hw(A,100973)|0;l=e+296|0;t[l>>2]=(a|0)==0?100982:a;A=Hw(A,100986)|0;a=e+300|0;A=(A|0)==0?100999:A;t[a>>2]=A;A=h3(t[l>>2]|0,A)|0;if(A|0){t[n>>2]=i[A>>0];nw(0,101001,n)|0;t[a>>2]=195059}A=o3(r)|0;t[e+304>>2]=A;f=e+308|0;a=0;e=0;while(1){r=l3(A,t[l>>2]|0)|0;if(!r)break;n=e+1|0;if((e|0)<(a|0))A=t[f>>2]|0;else{a=a+128|0;A=t[f>>2]|0;if(!A)A=$F(a<<2)|0;else A=AM(A,a<<2)|0;t[f>>2]=A}t[A+(n<<2)>>2]=r;e=n;A=0}if(e|0){l=AM(t[f>>2]|0,(e<<2)+8|0)|0;t[f>>2]=l;t[l>>2]=0;t[(t[f>>2]|0)+(e+1<<2)>>2]=0}h=s;return e|0}function mF(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;s=c;l=e+312|0;r=$F((t[l>>2]<<2)+8|0)|0;i=0;f=1;while(1){n=t[l>>2]|0;if((f|0)>(n|0))break;a=i+1|0;if((VY(e,f,n,A)|0)<<24>>24){t[r+(a<<2)>>2]=f;i=a}f=f+1|0}if(!i){t[s>>2]=A;nw(0,100872,s)|0;G2(r);r=0}else{t[r>>2]=i;t[r+(i+1<<2)>>2]=(t[l>>2]|0)+1}h=c;return r|0}function pF(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0.0;r=t[A+16>>2]|0;n=+c[r+16>>3];c[r+48>>3]=n-+c[r+88>>3];i=+c[r+24>>3];a=+c[r+80>>3]*.5;c[r+56>>3]=i-a;c[r+64>>3]=+c[r+96>>3]+n;c[r+72>>3]=a+i;A=Ow(e,A)|0;while(1){if(!A)break;EF(A);A=qw(e,A)|0}return}function EF(e){e=e|0;e=t[(t[e+16>>2]|0)+8>>2]|0;if(e|0)BF(e);return}function BF(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0;G=h;h=h+240|0;p=G+192|0;m=G+176|0;E=G+64|0;B=G+32|0;y=G;C=G+144|0;I=G+112|0;Z=e+4|0;if((t[Z>>2]|0)<=0)ge(101140,99906,3994,101154);A=t[e>>2]|0;r=E;i=A;a=r+48|0;do{t[r>>2]=t[i>>2];r=r+4|0;i=i+4|0}while((r|0)<(a|0));r=p;i=A;a=r+48|0;do{t[r>>2]=t[i>>2];r=r+4|0;i=i+4|0}while((r|0)<(a|0));yF(B,p);f=B+8|0;l=y+8|0;s=B+16|0;o=y+16|0;u=B+24|0;b=y+24|0;w=E+8|0;k=E+12|0;d=E+32|0;v=E+4|0;g=E+16|0;n=0;while(1){if((n|0)>=(t[Z>>2]|0))break;if((n|0)>0){A=(t[e>>2]|0)+(n*48|0)|0;r=E;i=A;a=r+48|0;do{t[r>>2]=t[i>>2];r=r+4|0;i=i+4|0}while((r|0)<(a|0));r=p;i=A;a=r+48|0;do{t[r>>2]=t[i>>2];r=r+4|0;i=i+4|0}while((r|0)<(a|0));yF(y,p);c[B>>3]=+c[(+c[B>>3]<+c[y>>3]?B:y)>>3];c[f>>3]=+c[(+c[f>>3]<+c[l>>3]?B:y)+8>>3];c[s>>3]=+c[(+c[s>>3]>+c[o>>3]?B:y)+16>>3];c[u>>3]=+c[(+c[u>>3]>+c[b>>3]?B:y)+24>>3]}A=t[w>>2]|0;if(A|0){a=t[E>>2]|0;t[m>>2]=t[g>>2];t[m+4>>2]=t[g+4>>2];t[m+8>>2]=t[g+8>>2];t[m+12>>2]=t[g+12>>2];t[p>>2]=t[a>>2];t[p+4>>2]=t[a+4>>2];t[p+8>>2]=t[a+8>>2];t[p+12>>2]=t[a+12>>2];_E(C,m,p,1.0,A);t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];t[y+16>>2]=t[C+16>>2];t[y+20>>2]=t[C+20>>2];t[y+24>>2]=t[C+24>>2];t[y+28>>2]=t[C+28>>2];c[B>>3]=+c[(+c[B>>3]<+c[y>>3]?B:y)>>3];c[f>>3]=+c[(+c[f>>3]<+c[l>>3]?B:y)+8>>3];c[s>>3]=+c[(+c[s>>3]>+c[o>>3]?B:y)+16>>3];c[u>>3]=+c[(+c[u>>3]>+c[b>>3]?B:y)+24>>3]}A=t[k>>2]|0;if(A|0){a=(t[E>>2]|0)+((t[v>>2]|0)+-1<<4)|0;t[m>>2]=t[d>>2];t[m+4>>2]=t[d+4>>2];t[m+8>>2]=t[d+8>>2];t[m+12>>2]=t[d+12>>2];t[p>>2]=t[a>>2];t[p+4>>2]=t[a+4>>2];t[p+8>>2]=t[a+8>>2];t[p+12>>2]=t[a+12>>2];_E(I,m,p,1.0,A);t[y>>2]=t[I>>2];t[y+4>>2]=t[I+4>>2];t[y+8>>2]=t[I+8>>2];t[y+12>>2]=t[I+12>>2];t[y+16>>2]=t[I+16>>2];t[y+20>>2]=t[I+20>>2];t[y+24>>2]=t[I+24>>2];t[y+28>>2]=t[I+28>>2];c[B>>3]=+c[(+c[B>>3]<+c[y>>3]?B:y)>>3];c[f>>3]=+c[(+c[f>>3]<+c[l>>3]?B:y)+8>>3];c[s>>3]=+c[(+c[s>>3]>+c[o>>3]?B:y)+16>>3];c[u>>3]=+c[(+c[u>>3]>+c[b>>3]?B:y)+24>>3]}n=n+1|0}Z=e+8|0;t[Z>>2]=t[B>>2];t[Z+4>>2]=t[B+4>>2];t[Z+8>>2]=t[B+8>>2];t[Z+12>>2]=t[B+12>>2];t[Z+16>>2]=t[B+16>>2];t[Z+20>>2]=t[B+20>>2];t[Z+24>>2]=t[B+24>>2];t[Z+28>>2]=t[B+28>>2];h=G;return}function yF(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0.0,w=0.0,k=0.0,d=0.0,v=0.0,g=0;u=h;h=h+48|0;f=u+32|0;l=u;s=t[A+4>>2]|0;if((s|0)<=0)ge(101170,99906,3968,101182);if(((s>>>0)%3|0|0)!=1)ge(101192,99906,3969,101182);o=l+16|0;r=t[A>>2]|0;t[o>>2]=t[r>>2];t[o+4>>2]=t[r+4>>2];t[o+8>>2]=t[r+8>>2];t[o+12>>2]=t[r+12>>2];t[l>>2]=t[r>>2];t[l+4>>2]=t[r+4>>2];t[l+8>>2]=t[r+8>>2];t[l+12>>2]=t[r+12>>2];i=f+8|0;a=l+8|0;n=l+24|0;A=1;while(1){if((A|0)>=(s|0))break;w=+c[r+(A<<4)+8>>3];g=A+1|0;b=+c[r+(g<<4)+8>>3];d=(+c[r+(g<<4)>>3]+ +c[r+(A<<4)>>3])*.5;c[f>>3]=d;w=(b+w)*.5;c[i>>3]=w;b=+c[(+c[l>>3]>3];c[l>>3]=b;v=+c[(+c[a>>3]>3];c[a>>3]=v;d=+c[(+c[o>>3]>d?o:f)>>3];c[o>>3]=d;w=+c[(+c[n>>3]>w?o:f)+8>>3];c[n>>3]=w;g=r+(A+2<<4)|0;t[f>>2]=t[g>>2];t[f+4>>2]=t[g+4>>2];t[f+8>>2]=t[g+8>>2];t[f+12>>2]=t[g+12>>2];k=+c[f>>3];c[l>>3]=+c[(b>3];b=+c[i>>3];c[a>>3]=+c[(v>3];c[o>>3]=+c[(d>k?o:f)>>3];c[n>>3]=+c[(w>b?o:f)+8>>3];A=A+3|0}t[e>>2]=t[l>>2];t[e+4>>2]=t[l+4>>2];t[e+8>>2]=t[l+8>>2];t[e+12>>2]=t[l+12>>2];t[e+16>>2]=t[l+16>>2];t[e+20>>2]=t[l+20>>2];t[e+24>>2]=t[l+24>>2];t[e+28>>2]=t[l+28>>2];h=u;return}function CF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,t=0.0,n=0.0,f=0,l=0.0,s=0,o=0,u=0.0,b=0.0,h=0.0,w=0.0,k=0.0,d=0.0;k=+c[e>>3];d=+c[r>>3];s=!(k>=d);if((!s?k<=+c[r+16>>3]:0)?(a=+c[e+8>>3],a>=+c[r+8>>3]):0)f=a<=+c[r+24>>3];else f=0;a=+c[A>>3];if((a>=d?a<=+c[r+16>>3]:0)?(t=+c[A+8>>3],t>=+c[r+8>>3]):0){i=t<=+c[r+24>>3];if(!(f^i))if(f&i)i=1;else o=11;else i=0}else if(f)i=0;else o=11;e:do{if((o|0)==11){w=+c[e+8>>3];do{if(k==a){d=+c[r+8>>3];if(!(s|w>=d^+c[A+8>>3]>=d^1)?k<=+c[r+16>>3]:0){i=0;break e}}else{l=+c[A+8>>3];if(w==l){if(!(k>=d^a>=d))break;if(!(w>=+c[r+8>>3]))break;if(!(w<=+c[r+24>>3]))break;else{i=0;break e}}h=(l-w)/(a-k);o=k>3];if(!(!(d>=n)|!(d<=a)|!(t>=u))?t<=+c[r+24>>3]:0){i=0;break e}b=+c[r+16>>3];t=(b-d)*h+t;if(t>=u?!(!(b<=a)|(b>=n?!(t<=+c[r+24>>3]):1)):0){i=0;break e}o=w=d?!(!(u<=t)|(!(u>=n)|!(a<=b))):0){i=0;break e}w=+c[r+24>>3];k=(w-u)/h+a;if(k>=d?!(!(w<=t)|(!(w>=n)|!(k<=b))):0){i=0;break e}}}while(0);i=-1}}while(0);return i|0}function IF(e){e=e|0;var A=0,r=0.0;A=e+16|0;r=+c[A>>3];c[e+32>>3]=r;c[e+48>>3]=r;c[e+40>>3]=+c[e+24>>3];c[e+56>>3]=+c[e+8>>3];c[A>>3]=+c[e>>3];return}function ZF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0.0,f=0.0;if((t[47131]|0)!=(r|0)){p1(+(r|0)*.15915494309189535,186328,186336);t[47131]=r}n=+c[A>>3];i=+c[23292];a=+c[A+8>>3];f=+c[23291];c[e>>3]=i*n-f*a;c[e+8>>3]=f*n+a*i;return}function GF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0.0,f=0,l=0,s=0;s=h;h=h+16|0;a=s;i=+c[A>>3];f=A+8|0;n=+c[f>>3];e:do{switch(r|0){case 0:{l=11;break}case 90:{c[A>>3]=n;i=-i;l=10;break}case 180:{i=-n;l=10;break}case 270:{c[A>>3]=n;l=10;break}default:{if((r|0)<0){t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];LF(e,a,0-r|0);break e}if((r|0)>360){t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];GF(e,a,(r>>>0)%360|0);break e}else{t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];ZF(e,a,r);break e}}}}while(0);if((l|0)==10){c[f>>3]=i;l=11}if((l|0)==11){t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2]}h=s;return}function LF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0.0,f=0,l=0,s=0;s=h;h=h+16|0;a=s;i=+c[A>>3];f=A+8|0;n=+c[f>>3];e:do{switch(r|0){case 0:{l=11;break}case 90:{c[A>>3]=-n;l=10;break}case 180:{i=-n;l=10;break}case 270:{c[A>>3]=n;l=10;break}default:{if((r|0)<0){t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];GF(e,a,0-r|0);break e}if((r|0)>360){t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];LF(e,a,(r>>>0)%360|0);break e}else{t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];ZF(e,a,360-r|0);break e}}}}while(0);if((l|0)==10){c[f>>3]=i;l=11}if((l|0)==11){t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2]}h=s;return}function QF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0,n=0.0;n=+c[r>>3];i=+c[r+8>>3];t=i+ +c[A>>3];a=n+ +c[A+24>>3];i=i+ +c[A+16>>3];c[e>>3]=n+ +c[A+8>>3];c[e+8>>3]=t;c[e+16>>3]=a;c[e+24>>3]=i;return}function DF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0,n=0.0;t=+c[e>>3];i=+c[A>>3]-t;n=+c[e+8>>3];a=+c[A+8>>3]-n;t=(+c[r+8>>3]-n)*i-(+c[r>>3]-t)*a;t=t*t;return+(t<1.0e-10?0.0:t/(a*a+i*i))}function zF(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=h;h=h+16|0;a=n+8|0;i=n;e=Hw(e,A)|0;if(e|0?(t[a>>2]=i,(V3(e,101209,a)|0)>0):0)c[r>>3]=+c[i>>3];h=n;return}function WF(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+16|0;n=u+8|0;f=u;r=KF(96)|0;o=e+16|0;t[(t[o>>2]|0)+8>>2]=r;r=Hw(e,101213)|0;if(!r){r=Te(101222)|0;if(r|0)s=3}else s=3;if((s|0)==3)tA(101234,r|0,1)|0;r=(YF(e)|0)&255;i[(t[o>>2]|0)+115>>0]=r;if(0==0?(r=Hw(e,101245)|0,t[47133]=r,(r|0)==0):0)t[47133]=t[47132];a=+wx(e,zw(e,0,101255,0)|0,0.0,0.0);c[t[(t[o>>2]|0)+8>>2]>>3]=a;r=Hw(e,101263)|0;e:do{if(!r)r=0;else{switch(i[r>>0]|0){case 76:{if(!(e1(r,101271)|0)){r=1;break e}break}case 66:{if(!(e1(r,101274)|0)){r=2;break e}break}case 82:{r=(e1(r,101277)|0)==0;r=r?3:0;break e}default:{r=0;break e}}r=0}}while(0);t[(t[o>>2]|0)+116>>2]=r<<2|(A<<24>>24==0?0:r);a=+wx(e,zw(e,0,101280,0)|0,.25,.02);c[f>>3]=a;a=a*72.0;t[(t[o>>2]|0)+248>>2]=~~(a+(a>=0.0?.5:-.5));r=dx(e,zw(e,0,101288,0)|0,0)|0;if(r){t[n>>2]=f;if(V3(r,101209,n)|0){a=+c[f>>3];if(a<.02){c[f>>3]=.02;a=.02}}else{c[f>>3]=.5;a=.5}if(R4(r,101296)|0)i[(t[o>>2]|0)+276>>0]=1}else{c[f>>3]=.5;a=.5}a=a*72.0;t[(t[o>>2]|0)+252>>2]=~~(a+(a>=0.0?.5:-.5));f=(hx(e,zw(e,0,101304,0)|0,0,0)|0)&255;i[(t[o>>2]|0)+243>>0]=f;f=zx(dx(e,zw(e,0,101314,0)|0,0)|0,20676,20692)|0;t[(t[o>>2]|0)+244>>2]=f;FF(e);f=MF(e,101324,(t[(t[o>>2]|0)+8>>2]|0)+64|0)|0;r=t[(t[o>>2]|0)+8>>2]|0;i[r+80>>0]=f;MF(e,101329,r+48|0)|0;r=mx(Hw(e,101334)|0)|0;i[(t[(t[o>>2]|0)+8>>2]|0)+82>>0]=r;r=Hw(e,101341)|0;do{if(!r){r=Hw(e,101348)|0;if(r|0){r=(i[r>>0]|32)<<24>>24==108&1;s=27;break}r=Hw(e,101360)|0;if(r|0){r=mx(r)|0;s=27}}else{r=(K3(r)|0)==90&1;s=27}}while(0);if((s|0)==27)i[(t[(t[o>>2]|0)+8>>2]|0)+81>>0]=r;t[47135]=zx(Hw(e,101370)|0,20708,20724)|0;i[194954]=mx(Hw(e,101382)|0)|0;t[47138]=0;t[47139]=0;c[(t[(t[o>>2]|0)+8>>2]|0)+24>>3]=0.0;r=Hw(e,101394)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0)s=32;else s=30;if(((s|0)==30?(l=Hw(e,101398)|0,l|0):0)?i[l>>0]|0:0){r=l;s=32}if((s|0)==32){a=+$3(r);c[(t[(t[o>>2]|0)+8>>2]|0)+24>>3]=a}VF(e);c[23295]=1.e+37;t[47140]=zw(e,0,101409,0)|0;t[47143]=zw(e,0,141034,0)|0;t[47144]=zw(e,0,105496,0)|0;t[47145]=zw(e,1,141048,0)|0;t[47146]=zw(e,1,141116,0)|0;t[47147]=zw(e,1,108230,0)|0;t[47148]=zw(e,1,140823,0)|0;t[47149]=zw(e,1,101418,0)|0;t[47157]=zw(e,1,141082,0)|0;t[47150]=zw(e,1,101428,0)|0;t[47151]=zw(e,1,101437,0)|0;t[47152]=zw(e,1,101446,0)|0;s=zw(e,1,108224,0)|0;t[47154]=s;if(!s)t[47154]=zw(e,1,108224,105493)|0;t[47155]=zw(e,1,101456,0)|0;t[47158]=zw(e,1,101304,0)|0;t[47172]=zw(e,1,101463,0)|0;t[47161]=zw(e,1,101409,0)|0;t[47153]=zw(e,1,105496,0)|0;t[47159]=zw(e,1,141076,0)|0;t[47160]=zw(e,1,101472,0)|0;t[47163]=zw(e,1,101484,0)|0;t[47162]=zw(e,1,101348,0)|0;t[47164]=zw(e,1,101489,0)|0;t[47165]=zw(e,1,141024,0)|0;t[47166]=zw(e,1,137297,0)|0;t[47156]=zw(e,1,101500,0)|0;t[47167]=zw(e,1,101510,0)|0;t[47168]=zw(e,1,101516,0)|0;t[47169]=zw(e,1,101522,0)|0;t[47170]=zw(e,1,101530,0)|0;t[47171]=zw(e,1,101539,0)|0;t[47173]=zw(e,1,141034,0)|0;t[47174]=zw(e,2,101541,0)|0;t[47176]=zw(e,2,140823,0)|0;t[47177]=zw(e,2,101418,0)|0;t[47179]=zw(e,2,101428,0)|0;t[47180]=zw(e,2,101437,0)|0;t[47181]=zw(e,2,101446,0)|0;t[47182]=zw(e,2,108224,0)|0;t[47183]=zw(e,2,101456,0)|0;t[47192]=zw(e,2,101548,0)|0;t[47184]=zw(e,2,101559,0)|0;t[47195]=zw(e,2,101563,0)|0;t[47196]=zw(e,2,101573,0)|0;t[47197]=zw(e,2,101583,0)|0;t[47198]=zw(e,2,101593,0)|0;t[47199]=zw(e,2,101603,0)|0;t[47200]=zw(e,2,101617,0)|0;t[47201]=zw(e,2,101631,0)|0;t[47202]=zw(e,2,101646,0)|0;t[47203]=zw(e,2,101660,0)|0;t[47175]=zw(e,2,101671,0)|0;t[47187]=zw(e,2,101304,0)|0;t[47185]=zw(e,2,141082,0)|0;t[47186]=zw(e,2,101678,0)|0;t[47188]=zw(e,2,101687,0)|0;t[47189]=zw(e,2,101697,0)|0;t[47190]=zw(e,2,101510,0)|0;t[47191]=zw(e,2,101522,0)|0;t[47204]=zw(e,2,101708,0)|0;t[47205]=zw(e,2,101717,0)|0;t[47206]=zw(e,2,101463,0)|0;r=$E(e)|0;t[(t[(t[o>>2]|0)+8>>2]|0)+88>>2]=r;r=Hw(e,141060)|0;if(r|0?i[r>>0]|0:0){e=UF(r,e)|0;t[(t[(t[o>>2]|0)+8>>2]|0)+92>>2]=e}h=u;return}function YF(e){e=e|0;var A=0,r=0;r=h;h=h+16|0;A=r;e=vx(e,zw(e,0,101807,0)|0,101815)|0;if(((((((N1(e,101821)|0)!=0?(N1(e,101829)|0)!=0:0)?(N1(e,101836)|0)!=0:0)?(N1(e,101839)|0)!=0:0)?(N1(e,101850)|0)!=0:0)?(N1(e,101861)|0)!=0:0)?(N1(e,101871)|0)!=0:0)if((N1(e,101882)|0)!=0?(N1(e,101888)|0)!=0:0)if((N1(e,101815)|0)!=0?(N1(e,101893)|0)!=0:0){t[A>>2]=e;nw(0,101898,A)|0;e=0}else e=0;else e=2;else e=1;h=r;return e|0}function FF(e){e=e|0;var A=0.0,r=0,a=0;r=Hw(e,101765)|0;e:do{if(r|0?(a=i[r>>0]|0,a<<24>>24):0)switch(a<<24>>24|0){case 97:{if(a<<24>>24!=97)break e;if(e1(r,101771)|0)break e;t[(t[(t[e+16>>2]|0)+8>>2]|0)+84>>2]=4;break e}case 99:{if(a<<24>>24!=99)break e;if(e1(r,101776)|0)break e;t[(t[(t[e+16>>2]|0)+8>>2]|0)+84>>2]=3;break e}case 101:{if(a<<24>>24!=101)break e;if(e1(r,101785)|0)break e;t[(t[(t[e+16>>2]|0)+8>>2]|0)+84>>2]=5;break e}case 102:{if(a<<24>>24!=102)break e;if(e1(r,101792)|0)break e;t[(t[(t[e+16>>2]|0)+8>>2]|0)+84>>2]=2;break e}default:{A=+$3(r);if(!(A>0.0))break e;e=t[(t[e+16>>2]|0)+8>>2]|0;t[e+84>>2]=1;c[e+16>>3]=A;break e}}}while(0);return}function MF(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0;b=h;h=h+48|0;o=b+32|0;f=b+16|0;s=b+8|0;l=b;u=b+40|0;i[u>>0]=0;e=Hw(e,A)|0;do{if(e){t[f>>2]=s;t[f+4>>2]=l;t[f+8>>2]=u;f=(V3(e,101749,f)|0)>1;n=+c[s>>3];a=+c[l>>3];if(f&n>0.0&a>0.0){n=n*72.0;c[r>>3]=+(~~(n+(n>=0.0?.5:-.5))|0);n=a*72.0;c[r+8>>3]=+(~~(n+(n>=0.0?.5:-.5))|0);e=(i[u>>0]|0)==33;break}i[u>>0]=0;t[o>>2]=s;t[o+4>>2]=u;o=(V3(e,101759,o)|0)>0;a=+c[s>>3];if(o&a>0.0){n=a*72.0;n=+(~~(n+(n>=0.0?.5:-.5))|0);c[r>>3]=n;c[r+8>>3]=n;e=(i[u>>0]|0)==33}else e=0}else e=0}while(0);h=b;return e&1|0}function VF(e){e=e|0;var A=0,r=0,a=0.0,n=0.0,f=0;A=Hw(e,108224)|0;do{if(A|0?i[A>>0]|0:0){r=(t[(t[e+60>>2]|0)+16>>2]|0)+113|0;i[r>>0]=i[r>>0]|8;r=(lv(A)|0)!=0;n=+wx(e,zw(e,0,101428,0)|0,14.0,1.0);f=vx(e,zw(e,0,101437,0)|0,107994)|0;A=HF(e,A,r?2:0,n,f,vx(e,zw(e,0,101446,0)|0,137314)|0)|0;f=e+16|0;t[(t[f>>2]|0)+12>>2]=A;A=Hw(e,105628)|0;r=(A|0)!=0;do{if((yd(e)|0)==(e|0)){if(r?(i[A>>0]|0)==116:0){A=1;break}A=0}else{if(r?(i[A>>0]|0)==98:0){A=0;break}A=1}}while(0);r=Hw(e,101726)|0;e:do{if(r)switch(i[r>>0]|0){case 108:{A=A|2;break e}case 114:{A=A|4;break e}default:break e}}while(0);i[(t[f>>2]|0)+275>>0]=A;if((yd(e)|0)!=(e|0)){A=t[(t[f>>2]|0)+12>>2]|0;a=+c[A+24>>3]+16.0;n=+c[A+32>>3]+8.0;e=(t[(t[(yd(e)|0)+16>>2]|0)+116>>2]&1|0)==0;A=t[f>>2]|0;r=i[A+275>>0]<<1&2;if(e){e=r&255;c[A+48+(e<<4)>>3]=a;c[A+48+(e<<4)+8>>3]=n;break}else{e=(r^3)&255;c[A+48+(e<<4)>>3]=n;c[A+48+(e<<4)+8>>3]=a;break}}}}while(0);return}function NF(e){e=e|0;var A=0,r=0,i=0;i=e+16|0;r=t[i>>2]|0;A=t[r+8>>2]|0;do{if(!A)A=r;else{r=t[A+88>>2]|0;if(r){QE(r);r=t[i>>2]|0;A=t[r+8>>2]|0;if(!A){A=r;break}}G2(t[A+92>>2]|0);A=t[i>>2]|0}}while(0);G2(t[A+8>>2]|0);i=t[i>>2]|0;t[i+8>>2]=0;SF(t[i+12>>2]|0);qd(e,0,137483);return}function RF(e){e=e|0;var A=0,r=0;r=h;h=h+16|0;A=r;switch(e|0){case 0:{e=101971;break}case 1:{e=101839;break}case 2:{e=101977;break}default:{t[A>>2]=e;nw(1,101941,A)|0;e=101971}}h=r;return e|0}function xF(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;a=t[A>>2]|0;o=A+24|0;t[o>>2]=0;t[o+4>>2]=0;t[o+8>>2]=0;t[o+12>>2]=0;if(i[a>>0]|0){l=$F((U2(a)|0)+1|0)|0;i[l>>0]=0;s=A+12|0;r=l;e:while(1){A:while(1){f=a+1|0;n=i[a>>0]|0;if(!(n<<24>>24))break e;if(!(n<<24>>24==-1|((n&255)<161|(t[s>>2]|0)!=2))){i[r>>0]=n;f=i[f>>0]|0;n=r+2|0;i[r+1>>0]=f;if(!(f<<24>>24)){r=n;break e}else{r=n;a=a+2|0;continue}}switch(n<<24>>24){case 92:break A;case 10:{c=12;break A}default:{}}i[r>>0]=n;r=r+1|0;a=f}if((c|0)==12){c=0;a=r+1|0;i[r>>0]=0;JF(e,A,l,110);r=a;l=a;a=f;continue}n=i[f>>0]|0;switch(n<<24>>24|0){case 114:case 108:case 110:{n=r+1|0;i[r>>0]=0;JF(e,A,l,i[f>>0]|0);r=n;break}default:{i[r>>0]=n;r=r+1|0;n=l}}l=n;a=(i[f>>0]|0)==0?f:a+2|0}if((l|0)!=(r|0)){i[r>>0]=0;JF(e,A,l,110)}A=A+40|0;t[A>>2]=t[o>>2];t[A+4>>2]=t[o+4>>2];t[A+8>>2]=t[o+8>>2];t[A+12>>2]=t[o+12>>2]}return}function JF(e,A,r,n){e=e|0;A=A|0;r=r|0;n=n|0;var f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+32|0;k=v+16|0;w=v;d=A+76|0;s=a[d>>1]|0;b=A+72|0;o=t[b>>2]|0;if(!o)u=KF((s*56|0)+112|0)|0;else u=eM(o,s+2|0,56,s+1|0)|0;t[b>>2]=u;s=a[d>>1]|0;o=u+(s*56|0)|0;t[o>>2]=r;i[u+(s*56|0)+48>>0]=n;if((r|0)!=0?(i[r>>0]|0)!=0:0){t[46594]=t[A+4>>2];c[23299]=+c[A+16>>3];n=t[e+144>>2]|0;t[u+(s*56|0)+4>>2]=L5[t[n>>2]&63](n,186376,1)|0;ex(w,e,o);l=+c[w>>3];c[k>>3]=l;f=+c[w+8>>3]}else{c[k>>3]=0.0;f=+(~~(+c[A+16>>3]*1.2)|0);c[u+(s*56|0)+40>>3]=f;l=0.0}a[d>>1]=(a[d>>1]|0)+1<<16>>16;d=A+24|0;c[d>>3]=+c[(+c[d>>3]>l?d:k)>>3];d=A+32|0;c[d>>3]=+c[d>>3]+f;h=v;return}function HF(e,A,r,a,f,l){e=e|0;A=A|0;r=r|0;a=+a;f=f|0;l=l|0;var s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+32|0;d=m+16|0;k=m+8|0;w=m;g=KF(88)|0;switch(Yd(e)|0){case 0:{o=0;v=t[e+60>>2]|0;u=e;b=0;break}case 1:{o=0;v=yd(Bd(e)|0)|0;u=0;b=e;break}case 2:{o=e;v=yd(Bd(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0)|0;u=0;b=0;break}default:{o=0;v=0;u=0;b=0}}t[g+4>>2]=f;t[g+8>>2]=l;c[g+16>>3]=a;s=v+16|0;l=g+12|0;t[l>>2]=n[(t[s>>2]|0)+115>>0];e:do{if(r&4){t[g>>2]=o3(A)|0;if(r&2|0)i[g+82>>0]=1}else switch(r|0){case 2:{t[g>>2]=o3(A)|0;i[g+82>>0]=1;if(!(gt(e,g)|0))break e;switch(Yd(e)|0){case 0:{t[w>>2]=Mk(u)|0;nw(3,101983,w)|0;break e}case 1:{t[k>>2]=Mk(b)|0;nw(3,102005,k)|0;break e}case 2:{w=Mk(t[((t[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)|0;k=(Bk(v)|0)!=0;v=Mk(t[((t[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0)|0;t[d>>2]=w;t[d+4>>2]=k?137738:141747;t[d+8>>2]=v;nw(3,102026,d)|0;break e}default:break e}}case 0:{f=PF(A,e,0)|0;t[g>>2]=f;if((t[l>>2]|0)==1)f=pJ(f)|0;else f=vJ(f,v)|0;G2(t[g>>2]|0);t[g>>2]=f;xF(t[(t[s>>2]|0)+144>>2]|0,g);break e}default:ge(102053,102069,166,102078)}}while(0);h=m;return g|0}function PF(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;switch(Yd(A)|0){case 0:{l=Mk(A)|0;n=U2(l)|0;a=t[(t[A+16>>2]|0)+12>>2]|0;if(a){a=t[a>>2]|0;if(!e){p=0;g=2;m=2;v=2;f=2;y=102101;u=102098;s=105493;h=195059;k=195059;w=0;d=0;b=2;E=a;B=102095}else{p=0;g=2;m=2;v=2;f=2;y=102101;u=102098;s=105493;h=195059;k=195059;w=0;d=0;b=U2(a)|0;E=a;B=102095}}else{p=0;g=2;m=2;v=2;f=2;y=102101;u=102098;s=105493;h=195059;k=195059;w=0;d=0;b=2;E=102089;B=102095}break}case 1:{l=Mk(Bd(A)|0)|0;n=U2(l)|0;s=Mk(A)|0;f=U2(s)|0;a=t[(t[A+16>>2]|0)+104>>2]|0;if(a){a=t[a>>2]|0;if(!e){p=0;g=2;m=2;v=2;y=102101;u=102098;h=195059;k=195059;w=0;d=0;b=2;E=a;B=102095}else{p=0;g=2;m=2;v=2;y=102101;u=102098;h=195059;k=195059;w=0;d=0;b=U2(a)|0;E=a;B=102095}}else{p=0;g=2;m=2;v=2;y=102101;u=102098;h=195059;k=195059;w=0;d=0;b=2;E=102089;B=102095}break}case 2:{f=A+48|0;l=Mk(yd(Bd(t[((t[A>>2]&3|0)==3?A:f)+40>>2]|0)|0)|0)|0;n=U2(l)|0;o=Mk(t[((t[A>>2]&3|0)==3?A:f)+40>>2]|0)|0;c=U2(o)|0;a=A+16|0;k=t[(t[a>>2]|0)+52>>2]|0;if(!k)d=0;else d=U2(k)|0;u=Mk(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;a=t[a>>2]|0;h=t[a+92>>2]|0;if(!h)w=0;else w=U2(h)|0;s=U2(u)|0;a=t[a+96>>2]|0;if(a){a=t[a>>2]|0;if(!e)b=2;else b=U2(a)|0}else{b=2;a=102089}B=(Bk(yd(Bd(t[((t[A>>2]&3|0)==3?A:f)+40>>2]|0)|0)|0)|0)==0;p=1;g=c;m=s;v=c+2+(d|0?d+1|0:0)+s+(w|0?w+1|0:0)|0;f=2;y=o;s=105493;E=a;B=B?141747:137738;break}default:{p=0;g=2;m=2;v=2;f=2;n=2;y=102101;u=102098;s=105493;l=102092;h=195059;k=195059;w=0;d=0;b=2;E=102089;B=102095}}r=(r|0)==0;o=0;a=e;e:while(1){A=a+1|0;A:do{switch(i[a>>0]|0){case 0:break e;case 92:{a=a+2|0;switch(i[A>>0]|0){case 78:{c=f;break A}case 71:{c=n;break A}case 69:{c=v;break A}case 72:{c=m;break A}case 84:{c=g;break A}case 76:{c=b;break A}case 92:{if(!r){c=1;break A}break}default:{}}c=2;break}default:{c=1;a=A}}}while(0);o=o+c|0}v=$F(o+1|0)|0;b=(p|0)==0;o=(d|0)==0;A=(w|0)==0;a=v;n=e;e:while(1){c=n+1|0;f=i[n>>0]|0;switch(f<<24>>24){case 0:break e;case 92:break;default:{i[a>>0]=f;a=a+1|0;n=c;continue e}}f=n+2|0;n=i[c>>0]|0;switch(n<<24>>24|0){case 71:{n=l;while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=f;continue e}n=n+1|0;a=a+1|0}}case 78:{n=s;while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=f;continue e}n=n+1|0;a=a+1|0}}case 69:{if(b){n=f;continue e}else n=y;while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24))break;n=n+1|0;a=a+1|0}if(o)n=B;else{i[a>>0]=58;n=k;while(1){a=a+1|0;e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=B;break}else n=n+1|0}}while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=u;break}n=n+1|0;a=a+1|0}while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24))break;n=n+1|0;a=a+1|0}if(A){n=f;continue e}i[a>>0]=58;n=h;while(1){a=a+1|0;e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=f;continue e}else n=n+1|0}}case 84:{n=y;while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=f;continue e}n=n+1|0;a=a+1|0}}case 72:{n=u;while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=f;continue e}a=a+1|0;n=n+1|0}}case 76:{n=E;while(1){e=i[n>>0]|0;i[a>>0]=e;if(!(e<<24>>24)){n=f;continue e}a=a+1|0;n=n+1|0}}case 92:{if(!r){i[a>>0]=92;a=a+1|0;n=f;continue e}break}default:{}}i[a>>0]=92;i[a+1>>0]=n;a=a+2|0;n=f}i[a>>0]=0;return v|0}function XF(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;if(e|0){r=e;i=0;while(1){if((i|0)>=(A|0))break;if(!i)G2(t[r>>2]|0);n=t[r+8>>2]|0;if(n|0?(a=t[r+12>>2]|0,a|0):0)F5[a&127](n);r=r+56|0;i=i+1|0}G2(e)}return}function SF(e){e=e|0;var A=0;if(e|0){G2(t[e>>2]|0);A=e+72|0;if(i[e+82>>0]|0){A=t[A>>2]|0;if(A|0)at(A,1)}else XF(t[A>>2]|0,a[e+76>>1]|0);G2(e)}return}function jF(e,A,r){e=e|0;A=A|0;r=r|0;var n=0.0,f=0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+32|0;k=m+16|0;d=m;s=t[e+16>>2]|0;v=s+12|0;g=t[v>>2]|0;t[v>>2]=A;if(!(i[r+82>>0]|0)){w=r+76|0;if((a[w>>1]|0)>=1){_r(e,0);$r(e,t[r+8>>2]|0);switch(i[r+80>>0]|0){case 116:{l=+c[r+64>>3];n=+c[r+48>>3]*.5+l;break}case 98:{l=+c[r+64>>3];n=+c[r+48>>3]*-.5+l+ +c[r+32>>3];break}default:{l=+c[r+64>>3];n=+c[r+32>>3]*.5+l}}n=n-+c[r+16>>3];b=d+8|0;c[b>>3]=n;if(a[s+260>>1]&512)c[b>>3]=n-l;o=r+72|0;u=r+56|0;f=r+40|0;A=0;while(1){if((A|0)>=(a[w>>1]|0))break;s=t[o>>2]|0;switch(i[s+(A*56|0)+48>>0]|0){case 108:{n=+c[u>>3]-+c[f>>3]*.5;break}case 114:{n=+c[f>>3]*.5+ +c[u>>3];break}default:n=+c[u>>3]}c[d>>3]=n;t[k>>2]=t[d>>2];t[k+4>>2]=t[d+4>>2];t[k+8>>2]=t[d+8>>2];t[k+12>>2]=t[d+12>>2];Kr(e,k,s+(A*56|0)|0);c[b>>3]=+c[b>>3]-+c[(t[o>>2]|0)+(A*56|0)+40>>3];A=A+1|0}qr(e);f=18}}else{Va(e,t[r+72>>2]|0,r);f=18}if((f|0)==18)t[v>>2]=g;h=m;return}function UF(e,A){e=e|0;A=A|0;return PF(e,A,1)|0}function TF(e){e=e|0;return OF(e,0)|0}function OF(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;r=t[47207]|0;if(!r){t[47208]=64;r=$F(64)|0;t[47207]=r}s=A<<24>>24==0;l=0;a=0;f=e;while(1){if(!f)break;A=i[f>>0]|0;if(!(A<<24>>24))break;e=t[47208]|0;if((l|0)>(e+-8|0)){r=e<<1;t[47208]=r;r=AM(t[47207]|0,r)|0;t[47207]=r;r=r+l|0;A=i[f>>0]|0}e:do{switch(A<<24>>24){case 38:{if(s?(_F(f)|0)!=0:0)c=18;else{a=5;A=102130}break}case 60:{a=4;A=102153;break}case 62:{a=4;A=102136;break}case 45:{a=5;A=102147;break}default:{if((a|0)!=0&A<<24>>24==32)if((i[a>>0]|0)==32){a=6;A=102123;break e}else{c=18;break e}switch(A<<24>>24){case 34:{a=6;A=102116;break e}case 39:{a=5;A=102141;break e}case 10:if(s){c=18;break e}else{a=5;A=102110;break e}default:{c=18;break e}}}}}while(0);if((c|0)==18){c=0;A=s|A<<24>>24!=13;a=A?1:5;A=A?f:102104}n=r+a|0;e=a;while(1){if(!e)break;i[r>>0]=i[A>>0]|0;e=e+-1|0;A=A+1|0;r=r+1|0}e=f;l=a+l|0;r=n;f=f+1|0;a=e}i[r>>0]=0;return t[47207]|0}function _F(e){e=e|0;var A=0,r=0;r=e+1|0;A=i[r>>0]|0;e:do{if(A<<24>>24==35){r=e+2|0;A=i[r>>0]|0;switch(A<<24>>24){case 88:case 120:break;default:{e=r;while(1){r=e+1|0;if((A+-48&255)>=10)break e;e=r;A=i[r>>0]|0}}}r=e+3|0;while(1){A=i[r>>0]|0;if((A+-48&255)>=10)switch(A<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break e}r=r+1|0}}else while(1){e=r+1|0;if(((A&-33)+-65&255)>=26)break e;r=e;A=i[e>>0]|0}}while(0);return A<<24>>24==59|0}function qF(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0;A=t[47209]|0;if(!A){t[47210]=64;A=$F(64)|0;t[47209]=A;l=0}else l=0;while(1){if(!e)break;r=i[e>>0]|0;if(!(r<<24>>24))break;a=t[47210]|0;if((l|0)>(a+-8|0)){A=a<<1;t[47210]=A;A=AM(t[47209]|0,A)|0;t[47209]=A;A=A+l|0;r=i[e>>0]|0}switch(r<<24>>24){case 38:{if(!(_F(e)|0)){n=5;r=102130}else s=12;break}case 60:{n=4;r=102153;break}case 62:{n=4;r=102136;break}case 34:{n=6;r=102116;break}case 39:{n=5;r=102141;break}default:s=12}if((s|0)==12){s=0;n=1;r=e}f=A+n|0;a=n;while(1){if(!a)break;i[A>>0]=i[r>>0]|0;a=a+-1|0;r=r+1|0;A=A+1|0}l=n+l|0;A=f;e=e+1|0}i[A>>0]=0;return t[47209]|0}function KF(e){e=e|0;var A=0;if(!e)e=0;else{A=$F(e)|0;z6(A|0,0,e|0)|0;e=A}return e|0}function $F(e){e=e|0;if(e){e=Z2(e)|0;if(!e){G3(111740,14,1,t[15712]|0)|0;e=0}}else e=0;return e|0}function eM(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=Q2(e,P(r,A)|0)|0;if(!((A|0)!=0&(e|0)==0)){if(A>>>0>i>>>0)z6(e+(P(i,r)|0)|0,0,P(A-i|0,r)|0)|0}else G3(111740,14,1,t[15712]|0)|0;return e|0}function AM(e,A){e=e|0;A=A|0;e=Q2(e,A)|0;if((A|0)!=0&(e|0)==0)G3(111740,14,1,t[15712]|0)|0;return e|0}function rM(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0,u=0,b=0,w=0,k=0,g=0,m=0;m=h;h=h+80|0;w=m+40|0;b=m+32|0;u=m+24|0;o=m;k=4;g=Z2(40)|0;t[g>>2]=0;a=m+68|0;n=m+64|0;if(0){d=0;be(62,e|0,a|0,n|0);f=d;d=0;if((f|0)!=0&(v|0)!=0){l=L6(t[f>>2]|0,g|0,k|0)|0;if(!l)aA(f|0,v|0);G=v}else l=-1;if((l|0)!=1){l=t[15712]|0;f=t[a>>2]|0;a=t[n>>2]|0;d=0;t[o>>2]=102202;t[o+4>>2]=f;t[o+8>>2]=a;t[o+12>>2]=r;t[o+16>>2]=A;te(32,l|0,102158,o|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)!=1){d=0;ce(1);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)!=1)l=6;else{a=G;l=15}}else{a=G;l=15}}else{a=G;l=15}}else l=6;do{if((l|0)==6){d=0;a=re(27,e|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,g|0,k|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)!=1){if(!a){d=0;ce(2);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;break}}if((r|0)<1){d=0;ce(3);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;break}a=0;break}else{t[47211]=(i|0)>-1?i:30;g=G6(188848,1,g|0,k|0)|0;k=G;d=0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;break}a=0;l=15;break}}else{a=G;l=15}}}while(0);e:do{if((l|0)==15){A:while(1){if(a|0){a=2;break e}d=0;ce(4);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue}e=t[15712]|0;o=0;while(1){d=0;l=Ae(2)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}if(!l)break;d=0;a=re(28,l|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,g|0,k|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){a=G;l=15;continue A}d=0;ue(25,l|0,a|0);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}o=o+1|0;do{if(((o|0)%100|0|0)==0&0!=0){a=(o|0)%1e3|0;if((a|0)==100){d=0;ie(93,102202,e|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}d=0;t[u>>2]=o;te(32,e|0,102220,u|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}break}d=0;t[b>>2]=o;te(32,e|0,102220,b|0)|0;n=d;d=0;if((n|0)!=0&(v|0)!=0){f=L6(t[n>>2]|0,g|0,k|0)|0;if(!f)aA(n|0,v|0);G=v}else f=-1;if((f|0)==1){a=G;l=15;continue A}if(!a){d=0;ie(94,10,e|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}}}}while(0);if((o|0)>=(r|0))break}switch(A|0){case 1:{d=0;ce(5);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}break}case 2:{d=0;ce(6);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}break}default:{d=0;ce(7);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}d=0;ce(3);a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue A}}}if(!0){a=0;break e}if((o|0)>99){d=0;ie(94,10,e|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15;continue}}a=t[47251]|0;n=t[47252]|0;d=0;s=+K(1);f=d;d=0;if((f|0)!=0&(v|0)!=0){l=L6(t[f>>2]|0,g|0,k|0)|0;if(!l)aA(f|0,v|0);G=v}else l=-1;if((l|0)==1){a=G;l=15;continue}d=0;t[w>>2]=102202;t[w+4>>2]=a;t[w+8>>2]=n;t[w+12>>2]=o;c[w+16>>3]=s;te(32,e|0,102224,w|0)|0;a=d;d=0;if((a|0)!=0&(v|0)!=0){n=L6(t[a>>2]|0,g|0,k|0)|0;if(!n)aA(a|0,v|0);G=v}else n=-1;if((n|0)==1){a=G;l=15}else break}a=0}}while(0);G2(g|0);h=m;return a|0}function iM(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;e=(t[e+16>>2]|0)+192|0;i=0;f=0;while(1){e=t[e>>2]|0;if(!e)break;n=t[e+16>>2]|0;a=t[n+180>>2]|0;e=0;while(1){if(!(t[a+(e<<2)>>2]|0))break;e=e+1|0;i=i+1|0}e=n+164|0;f=f+1|0}t[A>>2]=f;t[r>>2]=i;return}function aM(e){e=e|0;var A=0,r=0,a=0,n=0,l=0,s=0,c=0,o=0;t[47254]=e;t[47261]=0;t[47252]=0;t[47251]=0;l=e+16|0;e=(t[l>>2]|0)+192|0;n=0;r=0;while(1){e=t[e>>2]|0;if(!e)break;a=t[e+16>>2]|0;i[a+157>>0]=0;n=n+1|0;t[47251]=n;A=t[a+180>>2]|0;e=0;while(1){if(!(t[A+(e<<2)>>2]|0))break;c=r+1|0;t[47252]=c;e=e+1|0;r=c}e=a+164|0}e=t[47262]|0;if(!e)e=$F(n<<2)|0;else e=AM(e,n<<2)|0;t[47262]=e;t[47263]=0;e=t[47256]|0;if(!e)e=$F(t[47251]<<2)|0;else e=AM(e,t[47251]<<2)|0;t[47256]=e;t[47255]=0;A=1;e=(t[l>>2]|0)+192|0;while(1){e=t[e>>2]|0;if(!e)break;c=e+16|0;l=t[c>>2]|0;s=l+292|0;t[s>>2]=0;l=t[l+172>>2]|0;n=A;a=0;e=0;while(1){A=t[l+(a<<2)>>2]|0;if(!A)break;r=e+1|0;t[s>>2]=r;e=t[A+16>>2]|0;t[e+160>>2]=0;t[e+164>>2]=-1;if(!n)e=0;else{o=t[A>>2]&3;e=((t[(t[(t[((o|0)==2?A:A+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((o|0)==3?A:A+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)<(f[e+170>>1]|0|0)?0:n}n=e;a=a+1|0;e=r}e=KF((a<<2)+4|0)|0;A=t[c>>2]|0;t[A+264>>2]=e;t[A+268>>2]=0;A=t[A+180>>2]|0;e=0;do{o=e;e=e+1|0}while((t[A+(o<<2)>>2]|0)!=0);A=KF(e<<2)|0;e=t[c>>2]|0;t[e+272>>2]=A;t[e+276>>2]=0;A=n;e=e+164|0}return A|0}function tM(){var e=0,A=0,r=0,i=0,a=0,n=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b+8|0;c=b;o=cx(t[47251]|0)|0;e=(t[(t[47254]|0)+16>>2]|0)+192|0;while(1){A=t[e>>2]|0;if(!A){s=0;break}r=A+16|0;e=t[r>>2]|0;if(!(t[e+292>>2]|0)){ux(o,A);e=t[r>>2]|0}e=e+164|0}while(1){e=bx(o)|0;if(!e)break;l=e+16|0;e=t[l>>2]|0;i=e+232|0;t[i>>2]=0;r=t[e+172>>2]|0;A=0;n=0;while(1){a=t[r+(A<<2)>>2]|0;if(!a){i=0;break}a=(t[(t[(t[((t[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(f[(t[a+16>>2]|0)+170>>1]|0)|0;a=(n|0)>(a|0)?n:a;t[i>>2]=a;A=A+1|0;n=a}while(1){A=t[(t[e+180>>2]|0)+(i<<2)>>2]|0;if(!A)break;r=A+-48|0;a=(t[(t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0)+16>>2]|0)+292|0;n=t[a>>2]|0;t[a>>2]=n+-1;if((n|0)<2){ux(o,t[((t[A>>2]&3|0)==2?A:r)+40>>2]|0);e=t[l>>2]|0}i=i+1|0}s=s+1|0}e:do{if((s|0)!=(t[47251]|0)){nw(1,102556,c)|0;e=(t[(t[47254]|0)+16>>2]|0)+192|0;while(1){A=t[e>>2]|0;if(!A)break e;r=A+16|0;e=t[r>>2]|0;if(t[e+292>>2]|0){c=Mk(A)|0;e=t[(t[r>>2]|0)+292>>2]|0;t[u>>2]=c;t[u+4>>2]=e;nw(3,102578,u)|0;e=t[r>>2]|0}e=e+164|0}}}while(0);ox(o);h=b;return}function nM(){var e=0,A=0,r=0;e=(t[(t[47254]|0)+16>>2]|0)+192|0;while(1){e=t[e>>2]|0;if(!e)break;r=e+16|0;e=t[r>>2]|0;A=t[e+264>>2]|0;if(A){G2(A);e=t[r>>2]|0}A=t[e+272>>2]|0;if(A){G2(A);e=t[r>>2]|0}i[e+157>>0]=0;e=e+164|0}return}function fM(){var e=0,A=0,r=0,i=0,a=0;e=(t[(t[47254]|0)+16>>2]|0)+192|0;while(1){e=t[e>>2]|0;if(!e)break;e=t[e+16>>2]|0;t[e+280>>2]=0;e=e+164|0}a=KF(t[47251]<<2)|0;i=0;e=(t[(t[47254]|0)+16>>2]|0)+192|0;while(1){A=t[e>>2]|0;if(!A)break;r=A+16|0;e=t[r>>2]|0;if(!(t[e+280>>2]|0)){t[a+(i<<2)>>2]=mM(A)|0;A=i+1|0;e=t[r>>2]|0}else A=i;i=A;e=e+164|0}e=pM(a,i)|0;while(1){if((EM(e)|0)<=1)break;IM(e,t[(CM(yM(BM(e)|0)|0)|0)+8>>2]|0)}G2(e);e=0;while(1){if((e|0)>=(i|0))break;G2(t[a+(e<<2)>>2]|0);e=e+1|0}G2(a);if((t[47255]|0)==((t[47251]|0)+-1|0)){ZM();return}else ge(102301,102331,523,102336)}function lM(){var e=0,A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;l=t[47261]|0;a=t[47255]|0;s=t[47256]|0;c=t[47211]|0;A=0;e=0;n=l;while(1){if((n|0)>=(a|0)){f=8;break}i=t[s+(n<<2)>>2]|0;r=t[(t[i+16>>2]|0)+160>>2]|0;if((r|0)<0){if(!e)e=i;else e=(t[(t[e+16>>2]|0)+160>>2]|0)>(r|0)?i:e;A=A+1|0;if((A|0)>=(c|0))break}i=n+1|0;t[47261]=i;n=i}if((f|0)==8)if((l|0)>0){a=0;while(1){if((a|0)>=(l|0))break;r=t[s+(a<<2)>>2]|0;i=t[(t[r+16>>2]|0)+160>>2]|0;if((i|0)<0){if(!e)e=r;else e=(t[(t[e+16>>2]|0)+160>>2]|0)>(i|0)?r:e;A=A+1|0;if((A|0)>=(c|0))break}a=a+1|0}t[47261]=a}return e|0}function sM(e){e=e|0;var A=0,r=0;A=t[e>>2]&3;r=t[((A|0)==3?e:e+48|0)+40>>2]|0;e=t[((A|0)==2?e:e+-48|0)+40>>2]|0;A=(t[(t[r+16>>2]|0)+288>>2]|0)<(t[(t[e+16>>2]|0)+288>>2]|0);e=A?r:e;t[47257]=0;t[47258]=2147483647;r=t[e+16>>2]|0;t[47259]=t[r+284>>2];t[47260]=t[r+288>>2];if(A)gM(e);else vM(e);return t[47257]|0}function cM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b;a=t[A>>2]&3;o=A+-48|0;s=A+48|0;c=A+16|0;a=(t[(t[(t[((a|0)==2?A:o)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((a|0)==3?A:s)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[c>>2]|0)+170>>1]|0)|0;do{if((a|0)>0){r=t[e>>2]&3;n=t[((r|0)==3?e:e+48|0)+40>>2]|0;l=t[n+16>>2]|0;if(((t[l+276>>2]|0)+(t[l+268>>2]|0)|0)==1){hM(n,a);break}r=t[((r|0)==2?e:e+-48|0)+40>>2]|0;i=t[r+16>>2]|0;if(((t[i+276>>2]|0)+(t[i+268>>2]|0)|0)==1){hM(r,0-a|0);break}if((t[l+288>>2]|0)<(t[i+288>>2]|0)){hM(n,a);break}else{hM(r,0-a|0);break}}}while(0);r=e+16|0;i=t[(t[r>>2]|0)+160>>2]|0;a=t[A>>2]&3;a=wM(t[((a|0)==3?A:s)+40>>2]|0,t[((a|0)==2?A:o)+40>>2]|0,i,1)|0;l=t[A>>2]&3;if((wM(t[((l|0)==2?A:o)+40>>2]|0,t[((l|0)==3?A:s)+40>>2]|0,i,0)|0)==(a|0)){t[(t[c>>2]|0)+160>>2]=0-i;t[(t[r>>2]|0)+160>>2]=0;kM(e,A);u=t[a+16>>2]|0;dM(a,t[u+280>>2]|0,t[u+284>>2]|0)|0;h=b;return}else{nw(1,102262,u)|0;aA(188848,1)}}function oM(){var e=0,A=0,r=0,a=0,n=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;bM();u=KF((t[47253]<<2)+4|0)|0;A=t[47253]|0;e=0;while(1){if((e|0)>(A|0))break;t[u+(e<<2)>>2]=0;e=e+1|0}e=(t[(t[47254]|0)+16>>2]|0)+192|0;A=e;while(1){A=t[A>>2]|0;if(!A)break;A=t[A+16>>2]|0;if(!(i[A+156>>0]|0)){o=u+(t[A+232>>2]<<2)|0;t[o>>2]=(t[o>>2]|0)+1}A=A+164|0}while(1){e=t[e>>2]|0;if(!e)break;o=e+16|0;e=t[o>>2]|0;if(!(i[e+156>>0]|0)){n=t[47253]|0;r=t[e+172>>2]|0;c=0;s=0;A=0;while(1){a=t[r+(A<<2)>>2]|0;if(!a)break;b=t[a+16>>2]|0;l=(t[(t[(t[((t[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(f[b+170>>1]|0)|0;c=(t[b+156>>2]|0)+c|0;s=(s|0)>(l|0)?s:l;A=A+1|0}a=t[e+180>>2]|0;l=0;A=0;while(1){r=t[a+(A<<2)>>2]|0;if(!r)break;h=t[r+16>>2]|0;b=(t[(t[(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[h+170>>1]|0)|0;l=(t[h+156>>2]|0)+l|0;n=(n|0)<(b|0)?n:b;A=A+1|0}A=(s|0)>0?s:0;if((c|0)==(l|0)){a=A;r=A;while(1){A=r+1|0;if((r|0)>=(n|0))break;a=(t[u+(A<<2)>>2]|0)<(t[u+(a<<2)>>2]|0)?A:a;r=A}h=e+232|0;b=u+(t[h>>2]<<2)|0;t[b>>2]=(t[b>>2]|0)+-1;b=u+(a<<2)|0;t[b>>2]=(t[b>>2]|0)+1;t[h>>2]=a}A=t[e+264>>2]|0;if(A){G2(A);e=t[o>>2]|0}A=t[e+272>>2]|0;if(A){G2(A);e=t[o>>2]|0}i[e+157>>0]=0}e=e+164|0}G2(u);return}function uM(){var e=0,A=0,r=0,i=0,a=0,n=0;A=0;while(1){if((A|0)>=(t[47255]|0))break;e=t[(t[47256]|0)+(A<<2)>>2]|0;do{if(((t[(t[e+16>>2]|0)+160>>2]|0)==0?(r=sM(e)|0,r|0):0)?(i=t[r>>2]&3,i=(t[(t[(t[((i|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((i|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[r+16>>2]|0)+170>>1]|0)|0,(i|0)>=2):0){n=t[e>>2]&3;a=t[((n|0)==3?e:e+48|0)+40>>2]|0;e=t[((n|0)==2?e:e+-48|0)+40>>2]|0;if((t[(t[a+16>>2]|0)+288>>2]|0)<(t[(t[e+16>>2]|0)+288>>2]|0)){hM(a,i>>>1);break}else{hM(e,(i|0)/-2|0);break}}}while(0);A=A+1|0}nM();return}function bM(){var e=0,A=0,r=0,a=0,n=0,f=0,l=0,s=0;l=h;h=h+16|0;f=l;t[f>>2]=0;t[f>>2]=2147483647;t[47253]=-2147483647;e=(t[(t[47254]|0)+16>>2]|0)+192|0;r=e;n=2147483647;a=-2147483647;while(1){A=t[r>>2]|0;if(!A)break;r=t[A+16>>2]|0;if(!(i[r+156>>0]|0)){s=t[r+232>>2]|0;A=(n|0)<(s|0)?n:s;t[f>>2]=A;a=(a|0)>(s|0)?a:s;t[47253]=a}else A=n;r=r+164|0;n=A}if(n|0){while(1){e=t[e>>2]|0;if(!e)break;e=t[e+16>>2]|0;s=e+232|0;t[s>>2]=(t[s>>2]|0)-n;e=e+164|0}t[47253]=a-n;t[f>>2]=0}h=l;return}function hM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=e+16|0;e=t[a>>2]|0;i=e+232|0;t[i>>2]=(t[i>>2]|0)-A;i=0;while(1){r=t[(t[e+272>>2]|0)+(i<<2)>>2]|0;if(!r){i=0;break}if((r|0)!=(t[e+280>>2]|0)){hM(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0,A);e=t[a>>2]|0}i=i+1|0}while(1){r=t[(t[e+264>>2]|0)+(i<<2)>>2]|0;if(!r)break;if((r|0)!=(t[e+280>>2]|0)){hM(t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0,A);e=t[a>>2]|0}i=i+1|0}return}function wM(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;n=(i|0)==0&1;f=0-r|0;a=t[(t[A+16>>2]|0)+288>>2]|0;A=e;while(1){e=t[A+16>>2]|0;if((t[e+284>>2]|0)<=(a|0)?(a|0)<=(t[e+288>>2]|0):0)break;e=t[e+280>>2]|0;l=e+48|0;s=(t[e+16>>2]|0)+160|0;t[s>>2]=(((A|0)==(t[((t[e>>2]&3|0)==3?e:l)+40>>2]|0)?i:n)|0?r:f)+(t[s>>2]|0);s=t[e>>2]&3;l=t[((s|0)==3?e:l)+40>>2]|0;e=t[((s|0)==2?e:e+-48|0)+40>>2]|0;A=(t[(t[l+16>>2]|0)+288>>2]|0)>(t[(t[e+16>>2]|0)+288>>2]|0)?l:e}return A|0}function kM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;l=e+16|0;i=(t[l>>2]|0)+164|0;t[(t[A+16>>2]|0)+164>>2]=t[i>>2];t[(t[47256]|0)+(t[i>>2]<<2)>>2]=A;t[(t[l>>2]|0)+164>>2]=-1;l=(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16|0;i=t[l>>2]|0;n=i+276|0;a=t[n>>2]|0;s=a+-1|0;t[n>>2]=s;n=i+272|0;f=0;while(1){if((f|0)>=(a|0)){c=3;break}r=t[n>>2]|0;if((t[r+(f<<2)>>2]|0)==(e|0))break;f=f+1|0}if((c|0)==3)r=t[i+272>>2]|0;t[r+(f<<2)>>2]=t[r+(s<<2)>>2];t[(t[(t[l>>2]|0)+272>>2]|0)+(s<<2)>>2]=0;l=(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16|0;i=t[l>>2]|0;n=i+268|0;a=t[n>>2]|0;s=a+-1|0;t[n>>2]=s;n=i+264|0;f=0;while(1){if((f|0)>=(a|0)){c=8;break}r=t[n>>2]|0;if((t[r+(f<<2)>>2]|0)==(e|0))break;f=f+1|0}if((c|0)==8)r=t[i+264>>2]|0;t[r+(f<<2)>>2]=t[r+(s<<2)>>2];t[(t[(t[l>>2]|0)+264>>2]|0)+(s<<2)>>2]=0;c=(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)+16|0;e=t[c>>2]|0;s=t[e+272>>2]|0;e=e+276|0;l=t[e>>2]|0;t[e>>2]=l+1;t[s+(l<<2)>>2]=A;c=t[c>>2]|0;t[(t[c+272>>2]|0)+(t[c+276>>2]<<2)>>2]=0;c=(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)+16|0;l=t[c>>2]|0;s=t[l+264>>2]|0;l=l+268|0;e=t[l>>2]|0;t[l>>2]=e+1;t[s+(e<<2)>>2]=A;c=t[c>>2]|0;t[(t[c+264>>2]|0)+(t[c+268>>2]<<2)>>2]=0;return}function dM(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;n=e+16|0;e=t[n>>2]|0;t[e+280>>2]=A;t[e+284>>2]=r;a=0;while(1){i=t[(t[e+272>>2]|0)+(a<<2)>>2]|0;if(!i){a=0;break}if((i|0)!=(A|0)){r=dM(t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,i,r)|0;e=t[n>>2]|0}a=a+1|0}while(1){i=t[(t[e+264>>2]|0)+(a<<2)>>2]|0;if(!i)break;if((i|0)!=(A|0)){r=dM(t[((t[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0,i,r)|0;e=t[n>>2]|0}a=a+1|0}t[e+288>>2]=r;return r+1|0}function vM(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,l=0,s=0;l=e+16|0;a=0;while(1){e=t[l>>2]|0;r=t[(t[e+180>>2]|0)+(a<<2)>>2]|0;if(!r){r=0;break}i=t[r+16>>2]|0;if((t[i+164>>2]|0)<0){e=t[r>>2]&3;A=t[(t[((e|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0;s=t[A+288>>2]|0;if((t[47259]|0)>(s|0)|(s|0)>(t[47260]|0)?(n=(t[A+232>>2]|0)-(t[(t[(t[((e|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[i+170>>1]|0)|0,(n|0)<(t[47258]|0)|(t[47257]|0)==0):0){t[47257]=r;t[47258]=n}}else{A=t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0;if((t[(t[A+16>>2]|0)+288>>2]|0)<(t[e+288>>2]|0))vM(A)}a=a+1|0}while(1){A=t[(t[e+264>>2]|0)+(r<<2)>>2]|0;if(!((A|0)!=0&(t[47258]|0)>0))break;A=t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0;if((t[(t[A+16>>2]|0)+288>>2]|0)<(t[e+288>>2]|0)){vM(A);e=t[l>>2]|0}r=r+1|0}return}function gM(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,l=0,s=0;l=e+16|0;a=0;while(1){e=t[l>>2]|0;r=t[(t[e+172>>2]|0)+(a<<2)>>2]|0;if(!r){r=0;break}i=t[r+16>>2]|0;if((t[i+164>>2]|0)<0){e=t[r>>2]&3;A=t[(t[((e|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0;s=t[A+288>>2]|0;if((t[47259]|0)>(s|0)|(s|0)>(t[47260]|0)?(n=(t[(t[(t[((e|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[A+232>>2]|0)-(f[i+170>>1]|0)|0,(n|0)<(t[47258]|0)|(t[47257]|0)==0):0){t[47257]=r;t[47258]=n}}else{A=t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0;if((t[(t[A+16>>2]|0)+288>>2]|0)<(t[e+288>>2]|0))gM(A)}a=a+1|0}while(1){A=t[(t[e+272>>2]|0)+(r<<2)>>2]|0;if(!((A|0)!=0&(t[47258]|0)>0))break;A=t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0;if((t[(t[A+16>>2]|0)+288>>2]|0)<(t[e+288>>2]|0)){gM(A);e=t[l>>2]|0}r=r+1|0}return}function mM(e){e=e|0;var A=0;A=KF(16)|0;t[A>>2]=e;t[A+4>>2]=MM(e,A)|0;t[A+12>>2]=A;return A|0}function pM(e,A){e=e|0;A=A|0;var r=0,i=0;i=KF(8)|0;t[i>>2]=e;t[i+4>>2]=A;r=0;while(1){if((r|0)>=(A|0))break;t[(t[e+(r<<2)>>2]|0)+8>>2]=r;r=r+1|0}r=(A|0)/2|0;while(1){if((r|0)<=-1)break;IM(i,r);r=r+-1|0}return i|0}function EM(e){e=e|0;return t[e+4>>2]|0}function BM(e){e=e|0;var A=0,r=0,i=0,a=0;a=t[e>>2]|0;A=t[a>>2]|0;t[A+8>>2]=-1;r=e+4|0;i=(t[r>>2]|0)+-1|0;t[a>>2]=t[a+(i<<2)>>2];a=t[e>>2]|0;t[(t[a>>2]|0)+8>>2]=0;t[a+(i<<2)>>2]=A;t[r>>2]=i;IM(e,0);return A|0}function yM(e){e=e|0;return FM(t[e>>2]|0,0,0)|0}function CM(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,l=0;A=e+16|0;if((t[(t[A>>2]|0)+164>>2]|0)>-1)ge(102350,102331,463,102364);a=e+48|0;r=DM(t[((t[e>>2]&3|0)==3?e:a)+40>>2]|0)|0;l=e+-48|0;i=DM(t[((t[e>>2]&3|0)==2?e:l)+40>>2]|0)|0;n=t[e>>2]&3;A=(t[(t[(t[((n|0)==2?e:l)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((n|0)==3?e:a)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[A>>2]|0)+170>>1]|0)|0;if((t[r+8>>2]|0)==-1)zM(t[r>>2]|0,0,A);else zM(t[i>>2]|0,0,0-A|0);WM(e);return YM(r,i)|0}function IM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;f=t[e>>2]|0;n=t[e+4>>2]|0;while(1){e=A<<1;a=e+2|0;e=e|1;if(!((e|0)<(n|0)?(t[(t[f+(e<<2)>>2]|0)+4>>2]|0)<(t[(t[f+(A<<2)>>2]|0)+4>>2]|0):0))e=A;if((a|0)>=(n|0))break;r=f+(a<<2)|0;i=t[r>>2]|0;if((a|0)==(A|0)?1:(t[i+4>>2]|0)>=(t[(t[f+(e<<2)>>2]|0)+4>>2]|0))break;l=f+(A<<2)|0;e=t[l>>2]|0;t[l>>2]=i;t[r>>2]=e;t[(t[l>>2]|0)+8>>2]=A;t[e+8>>2]=a;A=a}return}function ZM(){dM(t[(t[(t[47254]|0)+16>>2]|0)+192>>2]|0,0,1)|0;GM(t[(t[(t[47254]|0)+16>>2]|0)+192>>2]|0,0);return}function GM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=e+16|0;r=0;while(1){e=t[a>>2]|0;i=t[(t[e+272>>2]|0)+(r<<2)>>2]|0;if(!i){i=0;break}if((i|0)!=(A|0))GM(t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,i);r=r+1|0}while(1){r=t[(t[e+264>>2]|0)+(i<<2)>>2]|0;if(!r)break;if((r|0)!=(A|0)){GM(t[((t[r>>2]&3|0)==3?r:r+48|0)+40>>2]|0,r);e=t[a>>2]|0}i=i+1|0}if(A|0)LM(A);return}function LM(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;A=t[e>>2]&3;r=t[((A|0)==3?e:e+48|0)+40>>2]|0;i=t[r+16>>2]|0;if((t[i+280>>2]|0)==(e|0))l=1;else{i=t[((A|0)==2?e:e+-48|0)+40>>2]|0;l=-1;r=i;i=t[i+16>>2]|0}n=t[i+180>>2]|0;A=0;a=0;while(1){f=t[n+(a<<2)>>2]|0;if(!f)break;A=(QM(f,r,l)|0)+A|0;a=a+1|0}n=t[i+172>>2]|0;i=0;while(1){a=t[n+(i<<2)>>2]|0;if(!a)break;A=(QM(a,r,l)|0)+A|0;i=i+1|0}t[(t[e+16>>2]|0)+160>>2]=A;return}function QM(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;f=t[e>>2]&3;l=(f|0)==3?e:e+48|0;i=t[l+40>>2]|0;if((i|0)==(A|0))i=t[((f|0)==2?e:e+-48|0)+40>>2]|0;n=t[A+16>>2]|0;a=t[(t[i+16>>2]|0)+288>>2]|0;if((t[n+284>>2]|0)<=(a|0)?(a|0)<=(t[n+288>>2]|0):0){a=t[e+16>>2]|0;if((t[a+164>>2]|0)>-1)i=t[a+160>>2]|0;else i=0;n=1;i=i-(t[a+156>>2]|0)|0}else{n=0;i=t[(t[e+16>>2]|0)+156>>2]|0}l=(t[((r|0)>0?(f|0)==2?e:e+-48|0:l)+40>>2]|0)==(A|0)?1:-1;return(((n?l:0-l|0)|0)<0?0-i|0:i)|0}function DM(e){e=e|0;var A=0,r=0;e=t[(t[e+16>>2]|0)+280>>2]|0;while(1){A=e+12|0;r=t[A>>2]|0;if(!((r|0)!=(e|0)&(r|0)!=0))break;e=t[r+12>>2]|0;if(!e){e=r;continue}t[A>>2]=e}return e|0}function zM(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;f=e+16|0;i=t[f>>2]|0;n=i+232|0;t[n>>2]=(t[n>>2]|0)+r;n=0;while(1){a=t[(t[i+264>>2]|0)+(n<<2)>>2]|0;if(!a){n=0;break}a=t[((t[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0;if((a|0)!=(A|0)){zM(a,e,r);i=t[f>>2]|0}n=n+1|0}while(1){a=t[(t[i+272>>2]|0)+(n<<2)>>2]|0;if(!a)break;a=t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0;if((a|0)!=(A|0)){zM(a,e,r);i=t[f>>2]|0}n=n+1|0}return}function WM(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;f=h;h=h+32|0;A=(t[e+16>>2]|0)+164|0;if((t[A>>2]|0)>-1){nw(1,102453,f)|0;aA(188848,1)}n=t[47255]|0;t[A>>2]=n;A=t[47256]|0;t[47255]=n+1;t[A+(n<<2)>>2]=e;A=t[e>>2]|0;n=e+48|0;r=t[((A&3|0)==3?e:n)+40>>2]|0;if(!(i[(t[r+16>>2]|0)+157>>0]|0)){a=t[47262]|0;A=t[47263]|0;t[47263]=A+1;t[a+(A<<2)>>2]=r;A=t[e>>2]|0}a=e+-48|0;r=t[((A&3|0)==2?e:a)+40>>2]|0;if(!(i[(t[r+16>>2]|0)+157>>0]|0)){l=t[47262]|0;A=t[47263]|0;t[47263]=A+1;t[l+(A<<2)>>2]=r;A=t[e>>2]|0}l=(t[((A&3|0)==3?e:n)+40>>2]|0)+16|0;A=t[l>>2]|0;i[A+157>>0]=1;r=t[A+272>>2]|0;A=A+276|0;n=t[A>>2]|0;t[A>>2]=n+1;t[r+(n<<2)>>2]=e;n=t[l>>2]|0;t[(t[n+272>>2]|0)+(t[n+276>>2]<<2)>>2]=0;l=t[l>>2]|0;if(!(t[(t[l+180>>2]|0)+((t[l+276>>2]|0)+-1<<2)>>2]|0)){nw(1,102487,f+8|0)|0;aA(188848,1)}l=(t[((t[e>>2]&3|0)==2?e:a)+40>>2]|0)+16|0;r=t[l>>2]|0;i[r+157>>0]=1;a=t[r+264>>2]|0;r=r+268|0;n=t[r>>2]|0;t[r>>2]=n+1;t[a+(n<<2)>>2]=e;e=t[l>>2]|0;t[(t[e+264>>2]|0)+(t[e+268>>2]<<2)>>2]=0;l=t[l>>2]|0;if(!(t[(t[l+172>>2]|0)+((t[l+268>>2]|0)+-1<<2)>>2]|0)){nw(1,102522,f+16|0)|0;aA(188848,1)}else{h=f;return}}function YM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;while(1){n=e+12|0;r=t[n>>2]|0;if((r|0)==0|(r|0)==(e|0))break;else e=r}while(1){a=A+12|0;r=t[a>>2]|0;if((r|0)==0|(r|0)==(A|0))break;else A=r}if((e|0)!=(A|0)){i=t[e+8>>2]|0;r=t[A+8>>2]|0;do{if((i|0)>-1)if((r|0)==-1)f=e;else s=10;else if((r|0)>-1)if((i|0)==-1){f=A;break}else{s=10;break}else ge(102376,102331,327,102423)}while(0);if((s|0)==10)f=(t[A+4>>2]|0)<(t[e+4>>2]|0)?e:A;t[a>>2]=f;t[n>>2]=f;t[f+4>>2]=(t[A+4>>2]|0)+(t[e+4>>2]|0);if((t[f+8>>2]|0)>-1)l=f;else ge(102434,102331,335,102423)}else l=e;return l|0}function FM(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,l=0,s=0,c=0,o=0,u=0;o=DM(e)|0;if(r){c=t[r>>2]&3;if(((t[(t[(t[((c|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((c|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)!=(f[(t[r+16>>2]|0)+170>>1]|0|0))i=3}else{r=0;i=3}e:do{if((i|0)==3){c=e+16|0;s=0;while(1){i=t[c>>2]|0;l=t[(t[i+180>>2]|0)+(s<<2)>>2]|0;if(!l){s=0;break}i=l+16|0;a=l+-48|0;n=t[((t[l>>2]&3|0)==2?l:a)+40>>2]|0;do{if((t[(t[i>>2]|0)+164>>2]|0)>-1){if((n|0)!=(A|0))r=FM(n,e,r)|0}else if((DM(n)|0)!=(o|0)){if(r|0?(u=t[l>>2]&3,n=t[r>>2]&3,((t[(t[(t[((u|0)==2?l:a)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((u|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[i>>2]|0)+170>>1]|0)|0)>=((t[(t[(t[((n|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((n|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[r+16>>2]|0)+170>>1]|0)|0)):0)break;r=l}}while(0);s=s+1|0}while(1){i=t[(t[i+172>>2]|0)+(s<<2)>>2]|0;if(!i)break e;a=i+16|0;n=i+48|0;l=t[((t[i>>2]&3|0)==3?i:n)+40>>2]|0;do{if((t[(t[a>>2]|0)+164>>2]|0)>-1){if((l|0)!=(A|0))r=FM(l,e,r)|0}else if((DM(l)|0)!=(o|0)){if(r|0?(l=t[i>>2]&3,u=t[r>>2]&3,((t[(t[(t[((l|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((l|0)==3?i:n)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[a>>2]|0)+170>>1]|0)|0)>=((t[(t[(t[((u|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[(t[(t[((u|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(f[(t[r+16>>2]|0)+170>>1]|0)|0)):0)break;r=i}}while(0);s=s+1|0;i=t[c>>2]|0}}}while(0);return r|0}function MM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;o=e+16|0;r=t[o>>2]|0;t[r+280>>2]=A;e=1;n=0;while(1){a=t[(t[r+172>>2]|0)+(n<<2)>>2]|0;if(!a){n=0;break}i=t[a+16>>2]|0;if(((t[i+164>>2]|0)<=-1?(l=t[a>>2]&3,s=a+48|0,c=t[(t[((l|0)==3?a:s)+40>>2]|0)+16>>2]|0,(t[c+280>>2]|0)==0):0)?((t[(t[(t[((l|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(t[c+232>>2]|0)|0)==(f[i+170>>1]|0|0):0){WM(a);e=(MM(t[((t[a>>2]&3|0)==3?a:s)+40>>2]|0,A)|0)+e|0;r=t[o>>2]|0}n=n+1|0}while(1){i=t[(t[r+180>>2]|0)+(n<<2)>>2]|0;if(!i)break;a=t[i+16>>2]|0;if(((t[a+164>>2]|0)<=-1?(u=t[i>>2]&3,b=i+-48|0,h=t[(t[((u|0)==2?i:b)+40>>2]|0)+16>>2]|0,(t[h+280>>2]|0)==0):0)?((t[h+232>>2]|0)-(t[(t[(t[((u|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)==(f[a+170>>1]|0|0):0){WM(i);e=(MM(t[((t[i>>2]&3|0)==2?i:b)+40>>2]|0,A)|0)+e|0;r=t[o>>2]|0}n=n+1|0}return e|0}function VM(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=Hw(e,102586)|0;if(!i)i=30;else i=K3(i)|0;return rM(e,A,r,i)|0}function NM(e){e=+e;return+(0==0?e:+c[23301]-e)}function RM(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0,m=0;d=h;h=h+16|0;k=d;t[47264]=t[(t[(t[A+64>>2]|0)+8>>2]|0)+4>>2];xM(A);f=t[A+16>>2]|0;g=+c[f+32>>3];v=+c[f+40>>3];JM(r,102597,+c[e+352>>3]);JM(r,102604,g*.013888888888888888);JM(r,102604,v*.013888888888888888);HM(r);f=sd(A)|0;while(1){if(!f)break;n=f+16|0;if(!(i[(t[n>>2]|0)+118>>0]|0)){PM(r,102606,$v(Mk(f)|0)|0);w=(t[n>>2]|0)+16|0;t[k>>2]=t[w>>2];t[k+4>>2]=t[w+4>>2];t[k+8>>2]=t[w+8>>2];t[k+12>>2]=t[w+12>>2];XM(r,k);if(!(i[(t[(t[n>>2]|0)+104>>2]|0)+82>>0]|0)){e=Bd(f)|0;e=SM(e,t[t[(t[n>>2]|0)+104>>2]>>2]|0)|0}else e=$v(Pw(f,t[47154]|0)|0)|0;JM(r,102604,+c[(t[n>>2]|0)+32>>3]);JM(r,102604,+c[(t[n>>2]|0)+40>>3]);PM(r,102604,e);PM(r,102604,vx(f,t[47157]|0,111067)|0);PM(r,102604,t[t[(t[n>>2]|0)+8>>2]>>2]|0);PM(r,102604,vx(f,t[47148]|0,137314)|0);e=vx(f,t[47149]|0,195059)|0;if(!(i[e>>0]|0))e=vx(f,t[47148]|0,134800)|0;PM(r,102604,e);HM(r)}f=cd(A,f)|0}b=a<<24>>24==0;u=sd(A)|0;while(1){if(!u)break;o=Ow(A,u)|0;while(1){if(!o)break;if(b){a=195059;l=195059}else{l=Hw(o,111455)|0;a=Hw(o,111464)|0;a=a|0?a:195059;l=l|0?l:195059}w=o+16|0;e=t[w>>2]|0;s=t[e+8>>2]|0;e:do{if(s){f=t[s+4>>2]|0;e=0;n=0;while(1){if((e|0)>=(f|0))break;m=(t[(t[s>>2]|0)+(e*48|0)+4>>2]|0)+n|0;e=e+1|0;n=m}PM(r,0,111450);jM(r,t[((t[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0,l);jM(r,t[((t[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0,a);UM(r,n);a=0;while(1){e=t[w>>2]|0;n=t[e+8>>2]|0;if((a|0)>=(t[n+4>>2]|0))break e;f=t[n>>2]|0;n=t[f+(a*48|0)>>2]|0;f=t[f+(a*48|0)+4>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;m=n+(e<<4)|0;t[k>>2]=t[m>>2];t[k+4>>2]=t[m+4>>2];t[k+8>>2]=t[m+8>>2];t[k+12>>2]=t[m+12>>2];XM(r,k);e=e+1|0}a=a+1|0}}}while(0);if(t[e+96>>2]|0){m=Bd(t[((t[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)|0;PM(r,102604,SM(m,t[t[(t[w>>2]|0)+96>>2]>>2]|0)|0);m=(t[(t[w>>2]|0)+96>>2]|0)+56|0;t[k>>2]=t[m>>2];t[k+4>>2]=t[m+4>>2];t[k+8>>2]=t[m+8>>2];t[k+12>>2]=t[m+12>>2];XM(r,k)}PM(r,102604,vx(o,t[47185]|0,111067)|0);PM(r,102604,vx(o,t[47176]|0,137314)|0);HM(r);o=qw(A,o)|0}u=cd(A,u)|0}TM(102612,r);h=d;return}function xM(e){e=e|0;var A=0.0;if(0){e=t[e+16>>2]|0;A=+c[e+24>>3]+ +c[e+40>>3];c[23301]=A;c[23302]=A*.013888888888888888}return}function JM(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,t=0;t=h;h=h+1040|0;a=t;i=t+8|0;if(A|0)TM(A,e);c[a>>3]=r;T4(i,102618,a)|0;TM(i,e);h=t;return}function HM(e){e=e|0;i[194955]=10;Z5[t[47264]&127](e,194955)|0;return}function PM(e,A,r){e=e|0;A=A|0;r=r|0;if(A|0)TM(A,e);TM(r,e);return}function XM(e,A){e=e|0;A=A|0;var r=0.0;JM(e,102604,+c[A>>3]*.013888888888888888);if(!0)r=+c[A+8>>3];else r=+c[23301]-+c[A+8>>3];JM(e,102604,r*.013888888888888888);return}function SM(e,A){e=e|0;A=A|0;var r=0;r=tv(e,A)|0;A=$v(r)|0;fv(e,r)|0;return A|0}function jM(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;if(!(i[(t[A+16>>2]|0)+118>>0]|0))A=$v(Mk(A)|0)|0;else{a=Bd(A)|0;A=SM(a,(C1(Mk(A)|0,58)|0)+1|0)|0}PM(e,102604,A);if(r|0?i[r>>0]|0:0)PM(e,107984,$v(r)|0);return}function UM(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+1040|0;a=r;i=r+8|0;TM(102604,e);t[a>>2]=A;T4(i,137395,a)|0;TM(i,e);h=r;return}function TM(e,A){e=e|0;A=A|0;Z5[t[47264]&127](A,e)|0;return}function OM(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,l=0,s=0,o=0.0,u=0,b=0.0,w=0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0;_=h;h=h+2288|0;T=_+208|0;U=_+192|0;j=_+176|0;S=_+160|0;X=_+144|0;P=_+128|0;J=_+112|0;x=_+96|0;R=_+80|0;N=_+64|0;V=_+56|0;M=_+48|0;O=_+32|0;H=_+24|0;F=_;Q=_+1264|0;D=_+224|0;z=e+16|0;G=(f[(t[z>>2]|0)+178>>1]|0)>2;nF(1);xM(e);cw(D,1024,_+240|0);wJ(e,1,102623,195059)|0;wJ(e,1,102627,195059)|0;t[47146]=wJ(e,1,141116,195059)|0;t[47145]=wJ(e,1,141048,195059)|0;wJ(e,2,102623,195059)|0;n=i[(t[z>>2]|0)+113>>0]|0;if(n&16){wJ(e,1,102633,195059)|0;n=i[(t[z>>2]|0)+113>>0]|0}if(n&1){wJ(e,2,102637,195059)|0;n=i[(t[z>>2]|0)+113>>0]|0}if(n&32){wJ(e,2,102633,195059)|0;n=i[(t[z>>2]|0)+113>>0]|0}if(n&2){wJ(e,2,102640,195059)|0;n=i[(t[z>>2]|0)+113>>0]|0}if(n&4){wJ(e,2,102648,195059)|0;n=i[(t[z>>2]|0)+113>>0]|0}if(!(n&8)){p=0;E=0;B=0}else{B=wJ(e,0,102637,195059)|0;E=wJ(e,0,102656,195059)|0;p=wJ(e,0,102663,195059)|0}C=wJ(e,0,102671,195059)|0;I=D+4|0;Z=D+8|0;m=0;n=0;y=sd(e)|0;while(1){if(!y)break;g=y+16|0;s=t[g>>2]|0;b=+c[s+16>>3];l=0==0;if(G){if(l)o=+c[s+24>>3];else o=+c[23301]-+c[s+24>>3];k=+c[(t[s+132>>2]|0)+16>>3]*72.0;c[F>>3]=b;c[F+8>>3]=o;c[F+16>>3]=k;T4(Q,102674,F)|0;bw(D,Q)|0;l=3;while(1){if((l|0)>=(f[(t[z>>2]|0)+178>>1]|0))break;c[H>>3]=+c[(t[(t[g>>2]|0)+132>>2]|0)+(l<<3)>>3]*72.0;T4(Q,102689,H)|0;bw(D,Q)|0;l=l+1|0}l=t[I>>2]|0;if(l>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;l=t[I>>2]|0}i[l>>0]=0;v=t[D>>2]|0;t[I>>2]=v;Xw(y,102623,v)|0;v=y}else{if(l)o=+c[s+24>>3];else o=+c[23301]-+c[s+24>>3];c[O>>3]=b;c[O+8>>3]=o;T4(Q,102695,O)|0;Xw(y,102623,Q)|0;v=y}c[M>>3]=+c[(t[g>>2]|0)+80>>3]*.013888888888888888;T4(Q,102618,M)|0;Mw(v,t[47145]|0,Q)|0;l=t[g>>2]|0;c[V>>3]=(+c[l+96>>3]+ +c[l+88>>3])*.013888888888888888;T4(Q,102618,V)|0;Mw(v,t[47146]|0,Q)|0;l=t[g>>2]|0;s=t[l+108>>2]|0;if((s|0)!=0?(i[s+81>>0]|0)!=0:0){k=+c[s+64>>3];k=0==0?k:+c[23301]-k;c[N>>3]=+c[s+56>>3];c[N+8>>3]=k;T4(Q,102695,N)|0;Xw(v,102633,Q)|0;l=t[g>>2]|0}if(e1(t[t[l+8>>2]>>2]|0,106220)|0){if(t[47170]|0?(yN(y)|0)<<24>>24:0){s=t[(t[g>>2]|0)+12>>2]|0;d=s+8|0;l=t[d>>2]|0;if((l|0)<3){l=Hw(v,102705)|0;if(!l)l=8;else l=K3(l)|0;l=(l|0)<3?8:l}w=s+44|0;k=1.0/+(l|0);u=0;while(1){if((u|0)>=(l|0))break;if((u|0)>0){s=t[I>>2]|0;if(s>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;s=t[I>>2]|0}t[I>>2]=s+1;i[s>>0]=32}if((t[d>>2]|0)>2){s=t[w>>2]|0;if(!0)o=+c[s+(u<<4)+8>>3]*.013888888888888888;else o=+c[23302]-+c[s+(u<<4)+8>>3]*.013888888888888888;c[R>>3]=+c[s+(u<<4)>>3]*.013888888888888888;c[R+8>>3]=o;T4(Q,102718,R)|0}else{s=t[g>>2]|0;o=k*+(u|0)*6.283185307179586;b=+c[s+32>>3]*.5*+W(+o);if(!0)o=+c[s+40>>3]*.5*+Y(+o);else o=+c[23302]-+c[s+40>>3]*.5*+Y(+o);c[x>>3]=b;c[x+8>>3]=o;T4(Q,102718,x)|0}bw(D,Q)|0;u=u+1|0}s=t[47170]|0;l=t[I>>2]|0;if(l>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;l=t[I>>2]|0}i[l>>0]=0;g=t[D>>2]|0;t[I>>2]=g;Mw(v,s,g)|0}}else{_M(y,t[l+12>>2]|0,D);ww(D)|0;l=t[I>>2]|0;if(l>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;l=t[I>>2]|0}i[l>>0]=0;g=t[D>>2]|0;t[I>>2]=g;Xw(v,102627,g)|0}e:do{if((t[47138]|0)>0){g=Ow(e,y)|0;l=m;while(1){if(!g)break e;v=g+16|0;s=t[v>>2]|0;do{if((i[s+112>>0]|0)!=6?(L=t[s+8>>2]|0,(L|0)!=0):0){d=0;s=L;while(1){if((d|0)>=(t[s+4>>2]|0))break;if((d|0)>0){s=t[I>>2]|0;if(s>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;s=t[I>>2]|0}t[I>>2]=s+1;i[s>>0]=59;s=t[(t[v>>2]|0)+8>>2]|0}s=t[s>>2]|0;if(t[s+(d*48|0)+8>>2]|0){if(!0)o=+c[s+(d*48|0)+24>>3];else o=+c[23301]-+c[s+(d*48|0)+24>>3];c[J>>3]=+c[s+(d*48|0)+16>>3];c[J+8>>3]=o;T4(Q,102728,J)|0;bw(D,Q)|0;n=1;s=t[t[(t[v>>2]|0)+8>>2]>>2]|0}if(t[s+(d*48|0)+12>>2]|0){if(!0)o=+c[s+(d*48|0)+40>>3];else o=+c[23301]-+c[s+(d*48|0)+40>>3];c[P>>3]=+c[s+(d*48|0)+32>>3];c[P+8>>3]=o;T4(Q,102741,P)|0;bw(D,Q)|0;l=1}w=0;while(1){s=t[(t[v>>2]|0)+8>>2]|0;u=t[s>>2]|0;if((w|0)>=(t[u+(d*48|0)+4>>2]|0))break;if((w|0)>0){s=t[I>>2]|0;if(s>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;s=t[I>>2]|0}t[I>>2]=s+1;i[s>>0]=32;s=t[t[(t[v>>2]|0)+8>>2]>>2]|0}else s=u;m=t[s+(d*48|0)>>2]|0;k=+c[m+(w<<4)+8>>3];k=0==0?k:+c[23301]-k;c[X>>3]=+c[m+(w<<4)>>3];c[X+8>>3]=k;T4(Q,102695,X)|0;bw(D,Q)|0;w=w+1|0}d=d+1|0}s=t[I>>2]|0;if(s>>>0>=(t[Z>>2]|0)>>>0){ow(D,1)|0;s=t[I>>2]|0}i[s>>0]=0;s=t[D>>2]|0;t[I>>2]=s;Xw(g,102623,s)|0;s=t[v>>2]|0;u=t[s+96>>2]|0;if(u){k=+c[u+64>>3];k=0==0?k:+c[23301]-k;c[S>>3]=+c[u+56>>3];c[S+8>>3]=k;T4(Q,102695,S)|0;Xw(g,102637,Q)|0;s=t[v>>2]|0}u=t[s+108>>2]|0;do{if(u){if(!(i[u+81>>0]|0))break;k=+c[u+64>>3];k=0==0?k:+c[23301]-k;c[j>>3]=+c[u+56>>3];c[j+8>>3]=k;T4(Q,102695,j)|0;Xw(g,102633,Q)|0;s=t[v>>2]|0}}while(0);u=t[s+100>>2]|0;if(u){k=+c[u+64>>3];k=0==0?k:+c[23301]-k;c[U>>3]=+c[u+56>>3];c[U+8>>3]=k;T4(Q,102695,U)|0;Xw(g,102640,Q)|0;s=t[v>>2]|0}s=t[s+104>>2]|0;if(!s)break;k=+c[s+64>>3];k=0==0?k:+c[23301]-k;c[T>>3]=+c[s+56>>3];c[T+8>>3]=k;T4(Q,102695,T)|0;Xw(g,102648,Q)|0}}while(0);g=qw(e,g)|0}}else l=m}while(0);m=l;y=cd(e,y)|0}qM(e,C,B,E,p);hw(D);if(a[(t[z>>2]|0)+136>>1]&1)sJ(e);t[A>>2]=n;t[r>>2]=m;nF(0);h=_;return}function _M(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0.0;u=h;h=h+1056|0;s=u;l=u+32|0;o=A+48|0;if(!(t[o>>2]|0)){i=t[e+16>>2]|0;f=+c[i+16>>3];if(!0){n=+c[i+24>>3];a=n+ +c[A+24>>3];n=n+ +c[A+40>>3]}else{n=+c[i+24>>3];a=+c[23301]-+c[A+24>>3]-n;n=+c[23301]-+c[A+40>>3]-n}b=f+ +c[A+32>>3];c[s>>3]=f+ +c[A+16>>3];c[s+8>>3]=a;c[s+16>>3]=b;c[s+24>>3]=n;T4(l,102779,s)|0;bw(r,l)|0}A=A+56|0;i=0;while(1){if((i|0)>=(t[o>>2]|0))break;_M(e,t[(t[A>>2]|0)+(i<<2)>>2]|0,r);i=i+1|0}h=u;return}function qM(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0;v=h;h=h+1088|0;b=v+56|0;k=v+48|0;w=v+32|0;l=v;u=v+64|0;d=e+16|0;f=t[d>>2]|0;if(!0){s=+c[f+24>>3];o=+c[f+40>>3]}else{o=+c[23301];s=o-+c[f+24>>3];o=o-+c[f+40>>3]}g=+c[f+32>>3];c[l>>3]=+c[f+16>>3];c[l+8>>3]=s;c[l+16>>3]=g;c[l+24>>3]=o;T4(u,102754,l)|0;Mw(e,A,u)|0;f=t[(t[d>>2]|0)+12>>2]|0;if((f|0)!=0?(i[t[f>>2]>>0]|0)!=0:0){g=+c[f+64>>3];g=0==0?g:+c[23301]-g;c[w>>3]=+c[f+56>>3];c[w+8>>3]=g;T4(u,102695,w)|0;Mw(e,r,u)|0;f=t[(t[d>>2]|0)+12>>2]|0;g=+c[f+32>>3];c[k>>3]=+c[f+24>>3]*.013888888888888888;T4(u,102774,k)|0;Mw(e,a,u)|0;c[b>>3]=g*.013888888888888888;T4(u,102774,b)|0;Mw(e,n,u)|0;f=1}else f=1;while(1){l=t[d>>2]|0;if((f|0)>(t[l+180>>2]|0))break;qM(t[(t[l+184>>2]|0)+(f<<2)>>2]|0,A,r,a,n);f=f+1|0}h=v;return}function KM(e){e=e|0;var A=0;A=h;h=h+16|0;OM(e,A,A+4|0);h=A;return}function $M(){return Uh(20740,t[4581]|0)|0}function eV(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function AV(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=t[A>>2]|0;i=t[r>>2]|0;if((e|0)<=(i|0))if((e|0)<(i|0))e=-1;else{A=t[A+4>>2]|0;r=t[r+4>>2]|0;return((A|0)>(r|0)?1:((A|0)<(r|0))<<31>>31)|0}else e=1;return e|0}function rV(e){e=e|0;Ph(e)|0;return}function iV(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];A=aV(i)|0;if((L5[t[e>>2]&63](e,A,1)|0)!=(A|0))G2(A);h=r;return}function aV(e){e=e|0;var A=0,r=0,i=0;A=KF(16)|0;i=e;r=t[i+4>>2]|0;e=A+8|0;t[e>>2]=t[i>>2];t[e+4>>2]=r;return A|0}function tV(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=h;h=h+16|0;a=i+8|0;n=i;t[n>>2]=A;t[n+4>>2]=r;t[a>>2]=t[n>>2];t[a+4>>2]=t[n+4>>2];A=aV(a)|0;if((L5[t[e>>2]&63](e,A,1)|0)!=(A|0))G2(A);h=i;return}function nV(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=h;h=h+16|0;i=r;n=A;a=t[n+4>>2]|0;A=i+8|0;t[A>>2]=t[n>>2];t[A+4>>2]=a;A=(L5[t[e>>2]&63](e,i,4)|0)!=0&1;h=r;return A|0}function fV(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a+8>>2]=A;t[a+12>>2]=r;r=(L5[t[e>>2]&63](e,a,4)|0)!=0&1;h=i;return r|0}function lV(e){e=e|0;return Oh(e)|0}function sV(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;r=KF((Oh(e)|0)<<3)|0;A=r;e=Sh(e)|0;while(1){if(!e)break;n=e+8|0;a=t[n+4>>2]|0;i=A;t[i>>2]=t[n>>2];t[i+4>>2]=a;A=A+8|0;e=t[e>>2]|0}return r|0}function cV(){var e=0,A=0,r=0,i=0;e=$F(40)|0;A=e;r=20776;i=A+36|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(i|0));t[e+36>>2]=0;return Uh(e,t[4581]|0)|0}function oV(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;r=r+36|0;e=t[r>>2]|0;if(!e)e=$F(20)|0;else t[r>>2]=t[e>>2];a=A+8|0;i=t[a+4>>2]|0;r=e+8|0;t[r>>2]=t[a>>2];t[r+4>>2]=i;t[e+16>>2]=t[A+16>>2];return e|0}function uV(e,A,r){e=e|0;A=A|0;r=r|0;r=r+36|0;t[A>>2]=t[r>>2];t[r>>2]=A;return}function bV(e){e=e|0;L5[t[e>>2]&63](e,0,64)|0;return}function hV(e){e=e|0;var A=0,r=0;A=t[e+4>>2]|0;Ph(e)|0;e=t[A+36>>2]|0;while(1){if(!e)break;r=t[e>>2]|0;G2(e);e=r}G2(A);return}function wV(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=h;h=h+32|0;n=a;t[n+8>>2]=A;t[n+12>>2]=r;t[n+16>>2]=i;i=t[(L5[t[e>>2]&63](e,n,1)|0)+16>>2]|0;h=a;return i|0}function kV(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+160|0;k=g+144|0;r=g+48|0;l=g+128|0;s=g+112|0;o=g+96|0;u=g+80|0;b=g+32|0;w=g+16|0;d=g;v=e+16|0;e=t[v>>2]|0;i=+c[e+16>>3];a=+c[e+24>>3];n=+c[e+32>>3];f=+c[e+40>>3];if((A+-1|0)>>>0<2){dV(l,i,f);t[k>>2]=t[l>>2];t[k+4>>2]=t[l+4>>2];t[k+8>>2]=t[l+8>>2];t[k+12>>2]=t[l+12>>2];vV(r,k);w=r+16|0;dV(s,n,a);t[k>>2]=t[s>>2];t[k+4>>2]=t[s+4>>2];t[k+8>>2]=t[s+8>>2];t[k+12>>2]=t[s+12>>2];vV(o,k);t[w>>2]=t[o>>2];t[w+4>>2]=t[o+4>>2];t[w+8>>2]=t[o+8>>2];t[w+12>>2]=t[o+12>>2]}else{dV(u,i,a);t[k>>2]=t[u>>2];t[k+4>>2]=t[u+4>>2];t[k+8>>2]=t[u+8>>2];t[k+12>>2]=t[u+12>>2];vV(r,k);u=r+16|0;dV(b,n,f);t[k>>2]=t[b>>2];t[k+4>>2]=t[b+4>>2];t[k+8>>2]=t[b+8>>2];t[k+12>>2]=t[b+12>>2];vV(w,k);t[u>>2]=t[w>>2];t[u+4>>2]=t[w+4>>2];t[u+8>>2]=t[w+8>>2];t[u+12>>2]=t[w+12>>2]}e=(t[v>>2]|0)+16|0;t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];t[e+16>>2]=t[r+16>>2];t[e+20>>2]=t[r+20>>2];t[e+24>>2]=t[r+24>>2];t[e+28>>2]=t[r+28>>2];e=t[(t[v>>2]|0)+12>>2]|0;if(!e)e=1;else{e=e+56|0;t[k>>2]=t[e>>2];t[k+4>>2]=t[e+4>>2];t[k+8>>2]=t[e+8>>2];t[k+12>>2]=t[e+12>>2];vV(d,k);t[e>>2]=t[d>>2];t[e+4>>2]=t[d+4>>2];t[e+8>>2]=t[d+8>>2];t[e+12>>2]=t[d+12>>2];e=1}while(1){r=t[v>>2]|0;if((e|0)>(t[r+180>>2]|0))break;kV(t[(t[r+184>>2]|0)+(e<<2)>>2]|0,A);e=e+1|0}h=g;return}function dV(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function vV(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=h;h=h+32|0;n=r+16|0;i=r;a=(t[47265]|0)*90|0;t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];LF(i,n,a);t[A>>2]=t[i>>2];t[A+4>>2]=t[i+4>>2];t[A+8>>2]=t[i+8>>2];t[A+12>>2]=t[i+12>>2];c[A>>3]=+c[A>>3]-+c[23303];i=A+8|0;c[i>>3]=+c[i>>3]-+c[23304];t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];h=r;return}function gV(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0,f=0,l=0.0,s=0.0,o=0,u=0.0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;E=h;h=h+1168|0;v=E+144|0;p=E+96|0;m=E+64|0;g=E+48|0;b=E+32|0;w=E+16|0;k=E;t[g>>2]=0;t[g+4>>2]=0;t[g+8>>2]=0;t[g+12>>2]=0;d=e+16|0;o=t[(t[d>>2]|0)+116>>2]|0;t[47265]=o&3;o=o&1;i[194957]=o;if(!(o<<24>>24))pV(e);else mV(e);EV(e);o=t[d>>2]|0;r=t[o+12>>2]|0;do{if(r|0?(i[r+81>>0]|0)==0:0){n=r+24|0;t[g>>2]=t[n>>2];t[g+4>>2]=t[n+4>>2];t[g+8>>2]=t[n+8>>2];t[g+12>>2]=t[n+12>>2];u=+c[g>>3]+16.0;c[g>>3]=u;n=g+8|0;a=+c[n>>3]+8.0;c[n>>3]=a;n=(i[o+275>>0]&1)!=0;if(i[194957]|0){if(n){f=o+32|0;c[f>>3]=+c[f>>3]+a}else{f=o+16|0;c[f>>3]=+c[f>>3]-a}n=o+40|0;a=+c[n>>3];f=o+24|0;l=+c[f>>3];s=a-l;if(!(u>s))break;u=(u-s)*.5;c[f>>3]=l-u;c[n>>3]=a+u;break}f=(t[47265]|0)==0;do{if(n)if(f){f=o+40|0;c[f>>3]=+c[f>>3]+a;break}else{f=o+24|0;c[f>>3]=+c[f>>3]-a;break}else if(f){f=o+24|0;c[f>>3]=+c[f>>3]-a;break}else{f=o+40|0;c[f>>3]=+c[f>>3]+a;break}}while(0);n=o+32|0;a=+c[n>>3];f=o+16|0;l=+c[f>>3];s=a-l;if(u>s){u=(u-s)*.5;c[f>>3]=l-u;c[n>>3]=a+u}}}while(0);if(A){switch(t[47265]|0){case 0:{k=o+16|0;t[46606]=t[k>>2];t[46607]=t[k+4>>2];t[46608]=t[k+8>>2];t[46609]=t[k+12>>2];break}case 1:{dV(b,-+c[o+40>>3],+c[o+16>>3]);t[46606]=t[b>>2];t[46607]=t[b+4>>2];t[46608]=t[b+8>>2];t[46609]=t[b+12>>2];break}case 2:{dV(w,+c[o+16>>3],-+c[o+40>>3]);t[46606]=t[w>>2];t[46607]=t[w+4>>2];t[46608]=t[w+8>>2];t[46609]=t[w+12>>2];break}case 3:{dV(k,+c[o+24>>3],+c[o+16>>3]);t[46606]=t[k>>2];t[46607]=t[k+4>>2];t[46608]=t[k+8>>2];t[46609]=t[k+12>>2];break}default:{}}BV(e);r=t[(t[d>>2]|0)+12>>2]|0}if(r|0?(i[r+81>>0]|0)==0:0){t[v>>2]=t[g>>2];t[v+4>>2]=t[g+4>>2];t[v+8>>2]=t[g+8>>2];t[v+12>>2]=t[g+12>>2];yV(e,v)}if(!0){h=E;return}if(!(i[194957]|0)){u=+c[23304];s=+c[23303];c[p>>3]=u;c[p+8>>3]=s;c[p+16>>3]=u;c[p+24>>3]=s;c[p+32>>3]=-s;c[p+40>>3]=-u;T4(v,103015,p)|0}else{s=+c[23303];u=+c[23304];c[m>>3]=s;c[m+8>>3]=u;c[m+16>>3]=s;c[m+24>>3]=u;T4(v,102800,m)|0}o3(v)|0;iA()}function mV(e){e=e|0;var A=0,r=0.0,a=0.0,n=0,f=0,l=0;l=e+16|0;if(((yd(e)|0)!=(e|0)?(n=t[l>>2]|0,f=t[n+12>>2]|0,(f|0)!=0):0)?(i[f+81>>0]|0)==0:0){A=i[n+275>>0]|0;if(!(A&1)){a=+c[n+16>>3]+ +c[n+96>>3]*.5;e=n+104|0}else{a=+c[n+32>>3]-+c[n+64>>3]*.5;e=n+72|0}r=+c[e>>3];e=A<<24>>24;do{if(!(e&4))if(!(e&2)){r=(+c[n+40>>3]+ +c[n+24>>3])*.5;break}else{r=+c[n+40>>3]-r*.5;break}else r=+c[n+24>>3]+r*.5}while(0);c[f+56>>3]=a;c[f+64>>3]=r;i[(t[(t[l>>2]|0)+12>>2]|0)+81>>0]=1;e=1}else e=1;while(1){A=t[l>>2]|0;if((e|0)>(t[A+180>>2]|0))break;mV(t[(t[A+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}return}function pV(e){e=e|0;var A=0,r=0.0,a=0.0,n=0.0,f=0,l=0,s=0;s=e+16|0;if(((yd(e)|0)!=(e|0)?(f=t[s>>2]|0,l=t[f+12>>2]|0,(l|0)!=0):0)?(i[l+81>>0]|0)==0:0){A=i[f+275>>0]|0;if(!(A&1)){n=+c[f+24>>3]+ +c[f+56>>3]*.5;e=f+48|0}else{n=+c[f+40>>3]-+c[f+88>>3]*.5;e=f+80|0}a=+c[e>>3];e=A<<24>>24;do{if(!(e&4)){r=+c[f+16>>3];if(!(e&2)){r=(+c[f+32>>3]+r)*.5;break}else{r=r+a*.5;break}}else r=+c[f+32>>3]-a*.5}while(0);c[l+56>>3]=r;c[l+64>>3]=n;i[(t[(t[s>>2]|0)+12>>2]|0)+81>>0]=1;e=1}else e=1;while(1){A=t[s>>2]|0;if((e|0)>(t[A+180>>2]|0))break;pV(t[(t[A+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}return}function EV(e){e=e|0;var A=0,r=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0;X=h;h=h+544|0;V=X+504|0;P=X+416|0;H=X+376|0;M=X+352|0;F=X+312|0;Y=X+288|0;W=X+248|0;N=X+200|0;Z=X+152|0;x=X+96|0;w=X+488|0;G=X+456|0;L=X+424|0;Q=X+384|0;D=X+360|0;z=X+320|0;E=X+296|0;B=X+256|0;y=X+232|0;C=X+168|0;I=X+136|0;A=X+56|0;R=X+16|0;J=X;b=e+16|0;m=t[b>>2]|0;r=a[m+136>>1]&14;m=n[m+113>>0]|0;if(!((m&54|0)==0?(m&1|0)==0|(t[47139]|0)!=0:0)){m=r<<16>>16==0;u=sd(e)|0;f=0;s=0;l=0;while(1){if(!u)break;r=t[(t[u+16>>2]|0)+108>>2]|0;do{if(r)if(!(i[r+81>>0]|0)){l=l+1|0;break}else{f=f+1|0;break}}while(0);o=Ow(e,u)|0;r=s;while(1){if(!o)break;c=t[o+16>>2]|0;s=t[c+108>>2]|0;do{if(s){if(i[s+81>>0]|0){f=f+1|0;break}if(!m)r=r+((t[c+8>>2]|0)!=0&1)|0}}while(0);s=t[c+100>>2]|0;do{if(s){if(i[s+81>>0]|0){f=f+1|0;break}if(!m)r=r+((t[c+8>>2]|0)!=0&1)|0}}while(0);s=t[c+104>>2]|0;do{if(s){if(i[s+81>>0]|0){f=f+1|0;break}if(!m)r=r+((t[c+8>>2]|0)!=0&1)|0}}while(0);s=t[c+96>>2]|0;do{if(s){if(i[s+81>>0]|0){f=f+1|0;break}if(!m)r=r+((t[c+8>>2]|0)!=0&1)|0}}while(0);o=qw(e,o)|0}u=cd(e,u)|0;s=r}if(!(i[(t[b>>2]|0)+113>>0]&8))b=0;else b=IV(e)|0;g=s+l|0;if(g|0){k=f+s+b+(gk(e)|0)|0;d=KF(k*40|0)|0;v=KF(g*40|0)|0;dV(N,2147483647.0,2147483647.0);r=N+16|0;dV(w,-2147483647.0,-2147483647.0);t[r>>2]=t[w>>2];t[r+4>>2]=t[w+4>>2];t[r+8>>2]=t[w+8>>2];t[r+12>>2]=t[w+12>>2];r=v;l=d;u=sd(e)|0;while(1){if(!u)break;t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];t[V+16>>2]=t[N+16>>2];t[V+20>>2]=t[N+20>>2];t[V+24>>2]=t[N+24>>2];t[V+28>>2]=t[N+28>>2];ZV(G,u,l,V);t[N>>2]=t[G>>2];t[N+4>>2]=t[G+4>>2];t[N+8>>2]=t[G+8>>2];t[N+12>>2]=t[G+12>>2];t[N+16>>2]=t[G+16>>2];t[N+20>>2]=t[G+20>>2];t[N+24>>2]=t[G+24>>2];t[N+28>>2]=t[G+28>>2];f=t[(t[u+16>>2]|0)+108>>2]|0;do{if(f)if(!(i[f+81>>0]|0)){t[V>>2]=t[Z>>2];t[V+4>>2]=t[Z+4>>2];t[V+8>>2]=t[Z+8>>2];t[V+12>>2]=t[Z+12>>2];LV(f,l,r,0,V);r=r+40|0;break}else{l=l+40|0;t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];t[V+16>>2]=t[N+16>>2];t[V+20>>2]=t[N+20>>2];t[V+24>>2]=t[N+24>>2];t[V+28>>2]=t[N+28>>2];GV(L,f,l,V);t[N>>2]=t[L>>2];t[N+4>>2]=t[L+4>>2];t[N+8>>2]=t[L+8>>2];t[N+12>>2]=t[L+12>>2];t[N+16>>2]=t[L+16>>2];t[N+20>>2]=t[L+20>>2];t[N+24>>2]=t[L+24>>2];t[N+28>>2]=t[L+28>>2];break}}while(0);o=Ow(e,u)|0;l=l+40|0;while(1){if(!o)break;c=o+16|0;f=t[c>>2]|0;s=t[f+96>>2]|0;e:do{if(!s)p=52;else{do{if(!(i[s+81>>0]|0)){if(!m?t[f+8>>2]|0:0){NR(D,e,o);t[V>>2]=t[D>>2];t[V+4>>2]=t[D+4>>2];t[V+8>>2]=t[D+8>>2];t[V+12>>2]=t[D+12>>2];LV(s,l,r,1,V);r=r+40|0;break}t[W>>2]=t[s>>2];nw(0,103827,W)|0;break e}else{t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];t[V+16>>2]=t[N+16>>2];t[V+20>>2]=t[N+20>>2];t[V+24>>2]=t[N+24>>2];t[V+28>>2]=t[N+28>>2];GV(Q,s,l,V);t[N>>2]=t[Q>>2];t[N+4>>2]=t[Q+4>>2];t[N+8>>2]=t[Q+8>>2];t[N+12>>2]=t[Q+12>>2];t[N+16>>2]=t[Q+16>>2];t[N+20>>2]=t[Q+20>>2];t[N+24>>2]=t[Q+24>>2];t[N+28>>2]=t[Q+28>>2]}}while(0);l=l+40|0;f=t[c>>2]|0;p=52}}while(0);e:do{if((p|0)==52){p=0;s=t[f+104>>2]|0;if(s){do{if(!(i[s+81>>0]|0)){if(!m?t[f+8>>2]|0:0){QV(E,o);t[V>>2]=t[E>>2];t[V+4>>2]=t[E+4>>2];t[V+8>>2]=t[E+8>>2];t[V+12>>2]=t[E+12>>2];LV(s,l,r,1,V);r=r+40|0;break}t[Y>>2]=t[s>>2];nw(0,103862,Y)|0;break e}else{t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];t[V+16>>2]=t[N+16>>2];t[V+20>>2]=t[N+20>>2];t[V+24>>2]=t[N+24>>2];t[V+28>>2]=t[N+28>>2];GV(z,s,l,V);t[N>>2]=t[z>>2];t[N+4>>2]=t[z+4>>2];t[N+8>>2]=t[z+8>>2];t[N+12>>2]=t[z+12>>2];t[N+16>>2]=t[z+16>>2];t[N+20>>2]=t[z+20>>2];t[N+24>>2]=t[z+24>>2];t[N+28>>2]=t[z+28>>2]}}while(0);l=l+40|0;f=t[c>>2]|0}s=t[f+100>>2]|0;if(s){do{if(!(i[s+81>>0]|0)){if(!m?t[f+8>>2]|0:0){DV(y,o);t[V>>2]=t[y>>2];t[V+4>>2]=t[y+4>>2];t[V+8>>2]=t[y+8>>2];t[V+12>>2]=t[y+12>>2];LV(s,l,r,1,V);r=r+40|0;break}t[F>>2]=t[s>>2];nw(0,103902,F)|0;break e}else{t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];t[V+16>>2]=t[N+16>>2];t[V+20>>2]=t[N+20>>2];t[V+24>>2]=t[N+24>>2];t[V+28>>2]=t[N+28>>2];GV(B,s,l,V);t[N>>2]=t[B>>2];t[N+4>>2]=t[B+4>>2];t[N+8>>2]=t[B+8>>2];t[N+12>>2]=t[B+12>>2];t[N+16>>2]=t[B+16>>2];t[N+20>>2]=t[B+20>>2];t[N+24>>2]=t[B+24>>2];t[N+28>>2]=t[B+28>>2]}}while(0);l=l+40|0;f=t[c>>2]|0}s=t[f+108>>2]|0;if(s){do{if(!(i[s+81>>0]|0)){if(!m?t[f+8>>2]|0:0){NR(I,e,o);t[V>>2]=t[I>>2];t[V+4>>2]=t[I+4>>2];t[V+8>>2]=t[I+8>>2];t[V+12>>2]=t[I+12>>2];LV(s,l,r,1,V);r=r+40|0;break}t[M>>2]=t[s>>2];nw(0,103942,M)|0;break e}else{t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];t[V+16>>2]=t[N+16>>2];t[V+20>>2]=t[N+20>>2];t[V+24>>2]=t[N+24>>2];t[V+28>>2]=t[N+28>>2];GV(C,s,l,V);t[N>>2]=t[C>>2];t[N+4>>2]=t[C+4>>2];t[N+8>>2]=t[C+8>>2];t[N+12>>2]=t[C+12>>2];t[N+16>>2]=t[C+16>>2];t[N+20>>2]=t[C+20>>2];t[N+24>>2]=t[C+24>>2];t[N+28>>2]=t[C+28>>2]}}while(0);l=l+40|0}}}while(0);o=qw(e,o)|0}u=cd(e,u)|0}if(b|0){t[A>>2]=t[N>>2];t[A+4>>2]=t[N+4>>2];t[A+8>>2]=t[N+8>>2];t[A+12>>2]=t[N+12>>2];t[A+16>>2]=t[N+16>>2];t[A+20>>2]=t[N+20>>2];t[A+24>>2]=t[N+24>>2];t[A+28>>2]=t[N+28>>2];t[A+32>>2]=l;f=V;r=f+40|0;do{t[f>>2]=t[A>>2];f=f+4|0;A=A+4|0}while((f|0)<(r|0));zV(R,e,V);t[N>>2]=t[R>>2];t[N+4>>2]=t[R+4>>2];t[N+8>>2]=t[R+8>>2];t[N+12>>2]=t[R+12>>2];t[N+16>>2]=t[R+16>>2];t[N+20>>2]=t[R+20>>2];t[N+24>>2]=t[R+24>>2];t[N+28>>2]=t[R+28>>2]}i[x+32>>0]=gx(e,zw(e,0,103978,0)|0,1)|0;t[x>>2]=t[N>>2];t[x+4>>2]=t[N+4>>2];t[x+8>>2]=t[N+8>>2];t[x+12>>2]=t[N+12>>2];t[x+16>>2]=t[N+16>>2];t[x+20>>2]=t[N+20>>2];t[x+24>>2]=t[N+24>>2];t[x+28>>2]=t[N+28>>2];$i(d,k,v,g,x)|0;if(0)WV(d,k,v,g,x);A=0;r=0;f=v;while(1){if((r|0)>=(g|0))break;if(i[f+36>>0]|0){x=t[f+32>>2]|0;i[x+81>>0]=1;R=x+56|0;YV(J,f);t[R>>2]=t[J>>2];t[R+4>>2]=t[J+4>>2];t[R+8>>2]=t[J+8>>2];t[R+12>>2]=t[J+12>>2];Hx(e,x);A=A+1|0}r=r+1|0;f=f+40|0}if(!0){if((A|0)!=(g|0)){t[P>>2]=A;t[P+4>>2]=g;nw(0,104023,P)|0}}else{P=t[15712]|0;t[H>>2]=A;t[H+4>>2]=g;a3(P,103990,H)|0}G2(d);G2(v)}}h=X;return}function BV(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;f=h;h=h+48|0;i=f+32|0;a=f+16|0;n=f;if(+c[23303]!=0.0|+c[23304]!=0.0|(t[47265]|0)!=0){r=sd(e)|0;while(1){if(!r)break;if(t[47265]|0)WJ(r,0);A=r+16|0;l=(t[A>>2]|0)+16|0;t[i>>2]=t[l>>2];t[i+4>>2]=t[l+4>>2];t[i+8>>2]=t[l+8>>2];t[i+12>>2]=t[l+12>>2];vV(a,i);t[l>>2]=t[a>>2];t[l+4>>2]=t[a+4>>2];t[l+8>>2]=t[a+8>>2];t[l+12>>2]=t[a+12>>2];A=t[(t[A>>2]|0)+108>>2]|0;if(A|0){l=A+56|0;t[i>>2]=t[l>>2];t[i+4>>2]=t[l+4>>2];t[i+8>>2]=t[l+8>>2];t[i+12>>2]=t[l+12>>2];vV(n,i);t[l>>2]=t[n>>2];t[l+4>>2]=t[n+4>>2];t[l+8>>2]=t[n+8>>2];t[l+12>>2]=t[n+12>>2]}e:do{if((t[47138]|0)==1){A=Ow(e,r)|0;while(1){if(!A)break e;CV(A);A=qw(e,A)|0}}}while(0);r=cd(e,r)|0}kV(e,t[(t[e+16>>2]|0)+116>>2]&3)}h=f;return}function yV(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0,f=0,l=0;f=e+16|0;l=t[f>>2]|0;n=i[l+275>>0]|0;e=n<<24>>24;do{if(!(e&4)){r=+c[l+16>>3];if(!(e&2)){a=(+c[l+32>>3]+r)*.5;break}else{a=+c[A>>3]*.5+r;break}}else a=+c[l+32>>3]-+c[A>>3]*.5}while(0);if(!(n&1))r=+c[A+8>>3]*.5+ +c[l+24>>3];else r=+c[l+40>>3]-+c[A+8>>3]*.5;l=t[l+12>>2]|0;c[l+56>>3]=a;c[l+64>>3]=r;i[(t[(t[f>>2]|0)+12>>2]|0)+81>>0]=1;return}function CV(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;v=h;h=h+144|0;k=v+120|0;r=v+16|0;l=v+104|0;s=v+88|0;c=v+72|0;o=v+56|0;u=v+40|0;b=v+24|0;d=v;w=e+16|0;A=t[w>>2]|0;a=t[A+8>>2]|0;if(!a){if((i[194954]|0)==0?(i[A+112>>0]|0)!=6:0){k=Mk(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;d=Mk(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0;t[r>>2]=k;t[r+4>>2]=d;nw(1,103810,r)|0}}else{f=0;e=a;while(1){if((f|0)>=(t[e+4>>2]|0))break;n=t[e>>2]|0;e=t[n+(f*48|0)>>2]|0;r=t[n+(f*48|0)+4>>2]|0;a=t[n+(f*48|0)+8>>2]|0;n=t[n+(f*48|0)+12>>2]|0;A=0;while(1){if((A|0)>=(r|0))break;g=e+(A<<4)|0;t[k>>2]=t[g>>2];t[k+4>>2]=t[g+4>>2];t[k+8>>2]=t[g+8>>2];t[k+12>>2]=t[g+12>>2];vV(l,k);t[g>>2]=t[l>>2];t[g+4>>2]=t[l+4>>2];t[g+8>>2]=t[l+8>>2];t[g+12>>2]=t[l+12>>2];A=A+1|0}if(a|0){g=(t[t[(t[w>>2]|0)+8>>2]>>2]|0)+(f*48|0)+16|0;t[k>>2]=t[g>>2];t[k+4>>2]=t[g+4>>2];t[k+8>>2]=t[g+8>>2];t[k+12>>2]=t[g+12>>2];vV(s,k);t[g>>2]=t[s>>2];t[g+4>>2]=t[s+4>>2];t[g+8>>2]=t[s+8>>2];t[g+12>>2]=t[s+12>>2]}if(n|0){g=(t[t[(t[w>>2]|0)+8>>2]>>2]|0)+(f*48|0)+32|0;t[k>>2]=t[g>>2];t[k+4>>2]=t[g+4>>2];t[k+8>>2]=t[g+8>>2];t[k+12>>2]=t[g+12>>2];vV(c,k);t[g>>2]=t[c>>2];t[g+4>>2]=t[c+4>>2];t[g+8>>2]=t[c+8>>2];t[g+12>>2]=t[c+12>>2]}A=t[w>>2]|0;f=f+1|0;e=t[A+8>>2]|0}e=t[A+96>>2]|0;if(e){A=e+56|0;t[k>>2]=t[A>>2];t[k+4>>2]=t[A+4>>2];t[k+8>>2]=t[A+8>>2];t[k+12>>2]=t[A+12>>2];vV(o,k);t[A>>2]=t[o>>2];t[A+4>>2]=t[o+4>>2];t[A+8>>2]=t[o+8>>2];t[A+12>>2]=t[o+12>>2];A=t[w>>2]|0}e=t[A+108>>2]|0;if(e){A=e+56|0;t[k>>2]=t[A>>2];t[k+4>>2]=t[A+4>>2];t[k+8>>2]=t[A+8>>2];t[k+12>>2]=t[A+12>>2];vV(u,k);t[A>>2]=t[u>>2];t[A+4>>2]=t[u+4>>2];t[A+8>>2]=t[u+8>>2];t[A+12>>2]=t[u+12>>2];A=t[w>>2]|0}e=t[A+100>>2]|0;if(e){A=e+56|0;t[k>>2]=t[A>>2];t[k+4>>2]=t[A+4>>2];t[k+8>>2]=t[A+8>>2];t[k+12>>2]=t[A+12>>2];vV(b,k);t[A>>2]=t[b>>2];t[A+4>>2]=t[b+4>>2];t[A+8>>2]=t[b+8>>2];t[A+12>>2]=t[b+12>>2];A=t[w>>2]|0}A=t[A+104>>2]|0;if(A|0){g=A+56|0;t[k>>2]=t[g>>2];t[k+4>>2]=t[g+4>>2];t[k+8>>2]=t[g+8>>2];t[k+12>>2]=t[g+12>>2];vV(d,k);t[g>>2]=t[d>>2];t[g+4>>2]=t[d+4>>2];t[g+8>>2]=t[d+8>>2];t[g+12>>2]=t[d+12>>2]}}h=v;return}function IV(e){e=e|0;var A=0,r=0,a=0;a=e+16|0;if((yd(e)|0)!=(e|0)?(A=t[(t[a>>2]|0)+12>>2]|0,(A|0)!=0):0){r=1;e=(i[A+81>>0]|0)!=0&1}else{r=1;e=0}while(1){A=t[a>>2]|0;if((r|0)>(t[A+180>>2]|0))break;A=(IV(t[(t[A+184>>2]|0)+(r<<2)>>2]|0)|0)+e|0;r=r+1|0;e=A}return e|0}function ZV(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0.0,s=0.0,o=0,u=0;n=h;h=h+32|0;f=n;u=(i[194957]|0)==0;A=A+16|0;o=t[A>>2]|0;s=+c[(u?o+32|0:o+40|0)>>3];c[r+16>>3]=s*72.0;l=+c[(u?o+40|0:o+32|0)>>3];c[r+24>>3]=l*72.0;A=(t[A>>2]|0)+16|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];c[r>>3]=+c[r>>3]-s*36.0;A=r+8|0;c[A>>3]=+c[A>>3]-l*36.0;t[f>>2]=t[a>>2];t[f+4>>2]=t[a+4>>2];t[f+8>>2]=t[a+8>>2];t[f+12>>2]=t[a+12>>2];t[f+16>>2]=t[a+16>>2];t[f+20>>2]=t[a+20>>2];t[f+24>>2]=t[a+24>>2];t[f+28>>2]=t[a+28>>2];FV(e,r,f);h=n;return}function GV(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0.0,s=0.0,o=0,u=0;n=h;h=h+32|0;f=n;u=(i[194957]|0)==0;o=A+24|0;s=+c[(u?o:A+32|0)>>3];c[r+16>>3]=s;l=+c[(u?A+32|0:o)>>3];c[r+24>>3]=l;A=A+56|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];c[r>>3]=+c[r>>3]-s*.5;A=r+8|0;c[A>>3]=+c[A>>3]-l*.5;t[f>>2]=t[a>>2];t[f+4>>2]=t[a+4>>2];t[f+8>>2]=t[a+8>>2];t[f+12>>2]=t[a+12>>2];t[f+16>>2]=t[a+16>>2];t[f+20>>2]=t[a+20>>2];t[f+24>>2]=t[a+24>>2];t[f+28>>2]=t[a+28>>2];FV(e,r,f);h=n;return}function LV(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;if(a|0){a=A+16|0;t[a>>2]=0;t[a+4>>2]=0;t[a+8>>2]=0;t[a+12>>2]=0;t[A>>2]=t[n>>2];t[A+4>>2]=t[n+4>>2];t[A+8>>2]=t[n+8>>2];t[A+12>>2]=t[n+12>>2]}if(!(i[194957]|0)){n=e+24|0;t[r>>2]=t[n>>2];t[r+4>>2]=t[n+4>>2];t[r+8>>2]=t[n+8>>2];t[r+12>>2]=t[n+12>>2]}else{c[r>>3]=+c[e+32>>3];c[r+8>>3]=+c[e+24>>3]}t[r+32>>2]=e;i[r+36>>0]=0;t[A+32>>2]=r;return}function QV(e,A){e=e|0;A=A|0;A=VR(A)|0;do{if(A){A=t[A>>2]|0;if(!(t[A+8>>2]|0)){A=t[A>>2]|0;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];break}else{A=A+16|0;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];break}}else{t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;t[e+12>>2]=0}}while(0);return}function DV(e,A){e=e|0;A=A|0;var r=0;A=VR(A)|0;do{if(A){r=t[A>>2]|0;A=(t[A+4>>2]|0)+-1|0;if(!(t[r+(A*48|0)+12>>2]|0)){r=(t[r+(A*48|0)>>2]|0)+((t[r+(A*48|0)+4>>2]|0)+-1<<4)|0;t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];break}else{r=r+(A*48|0)+32|0;t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];break}}else{t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;t[e+12>>2]=0}}while(0);return}function zV(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+112|0;c=k+72|0;u=k+32|0;b=k;w=A+16|0;s=1;while(1){a=t[w>>2]|0;if((s|0)>(t[a+180>>2]|0))break;a=t[(t[a+184>>2]|0)+(s<<2)>>2]|0;n=c;f=r;l=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(l|0));zV(u,a,c);n=r;f=u;l=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(l|0));s=s+1|0}if(((yd(A)|0)!=(A|0)?(o=t[(t[w>>2]|0)+12>>2]|0,o|0):0)?i[o+81>>0]|0:0){w=r+32|0;u=t[w>>2]|0;t[c>>2]=t[r>>2];t[c+4>>2]=t[r+4>>2];t[c+8>>2]=t[r+8>>2];t[c+12>>2]=t[r+12>>2];t[c+16>>2]=t[r+16>>2];t[c+20>>2]=t[r+20>>2];t[c+24>>2]=t[r+24>>2];t[c+28>>2]=t[r+28>>2];GV(b,o,u,c);t[r>>2]=t[b>>2];t[r+4>>2]=t[b+4>>2];t[r+8>>2]=t[b+8>>2];t[r+12>>2]=t[b+12>>2];t[r+16>>2]=t[b+16>>2];t[r+20>>2]=t[b+20>>2];t[r+24>>2]=t[b+24>>2];t[r+28>>2]=t[b+28>>2];t[w>>2]=(t[w>>2]|0)+40}n=e;f=r;l=n+40|0;do{t[n>>2]=t[f>>2];n=n+4|0;f=f+4|0}while((n|0)<(l|0));h=k;return}function WV(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var f=0.0,l=0.0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+160|0;d=v+96|0;w=v+48|0;b=v;k=t[15712]|0;u=n[a+32>>0]|0;f=+c[a>>3];l=+c[a+8>>3];s=+c[a+16>>3];o=+c[a+24>>3];t[b>>2]=A;t[b+4>>2]=i;t[b+8>>2]=u;c[b+16>>3]=f;c[b+24>>3]=l;c[b+32>>3]=s;c[b+40>>3]=o;a3(k,104065,b)|0;e:do{if(0>=2){G3(104125,8,1,k)|0;b=0;while(1){if((b|0)>=(A|0))break;a=t[e+32>>2]|0;f=+c[e>>3];l=+c[e+8>>3];s=+c[e+16>>3];o=+c[e+24>>3];if(!a)u=195059;else u=t[t[a+32>>2]>>2]|0;t[w>>2]=b;c[w+8>>3]=f;c[w+16>>3]=l;c[w+24>>3]=s;c[w+32>>3]=o;t[w+40>>2]=a;t[w+44>>2]=u;a3(k,104134,w)|0;b=b+1|0;e=e+40|0}G3(104177,8,1,k)|0;a=0;while(1){if((a|0)>=(i|0))break e;A=n[r+36>>0]|0;f=+c[r+16>>3];l=+c[r+24>>3];s=+c[r>>3];o=+c[r+8>>3];w=t[t[r+32>>2]>>2]|0;t[d>>2]=a;t[d+4>>2]=r;t[d+8>>2]=A;c[d+16>>3]=f;c[d+24>>3]=l;c[d+32>>3]=s;c[d+40>>3]=o;t[d+48>>2]=w;a3(k,104186,d)|0;r=r+40|0;a=a+1|0}}}while(0);h=v;return}function YV(e,A){e=e|0;A=A|0;var r=0.0;r=+c[A+8>>3]*.5+ +c[A+24>>3];c[e>>3]=+c[A>>3]*.5+ +c[A+16>>3];c[e+8>>3]=r;return}function FV(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0.0,l=0.0;i=h;h=h+16|0;a=i;l=+c[A>>3];c[r>>3]=+c[(+c[r>>3]>3];n=r+8|0;f=+c[A+8>>3];c[n>>3]=+c[(+c[n>>3]>3];l=+c[A+16>>3]+l;c[a>>3]=l;f=+c[A+24>>3]+f;c[a+8>>3]=f;n=r+16|0;c[n>>3]=+c[(+c[n>>3]>l?n:a)>>3];A=r+24|0;c[A>>3]=+c[(+c[A>>3]>f?n:a)+8>>3];t[e>>2]=t[r>>2];t[e+4>>2]=t[r+4>>2];t[e+8>>2]=t[r+8>>2];t[e+12>>2]=t[r+12>>2];t[e+16>>2]=t[r+16>>2];t[e+20>>2]=t[r+20>>2];t[e+24>>2]=t[r+24>>2];t[e+28>>2]=t[r+28>>2];h=i;return}function MV(e){e=e|0;gV(e,1);return}function VV(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;i=h;h=h+16|0;r=i;A=Lx(Hw(e,105526)|0)|0;if(A){A=NV(A)|0;if(A|0){a=t[A+40>>2]|0;r=t[A+44>>2]|0;n=e+16|0;e=t[n>>2]|0;c[e+32>>3]=+(a|0)*.013888888888888888;c[e+40>>3]=+(r|0)*.013888888888888888;e=KF(12)|0;t[(t[n>>2]|0)+12>>2]=e;t[e>>2]=t[A+12>>2];t[e+4>>2]=((a|0)/-2|0)-(t[A+32>>2]|0);t[e+8>>2]=((r|0)/-2|0)-(t[A+36>>2]|0)}}else{t[r>>2]=Mk(e)|0;nw(0,104234,r)|0}h=i;return}function NV(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+1152|0;l=w+24|0;f=w+8|0;r=w;a=w+120|0;s=w+44|0;c=w+40|0;o=w+36|0;u=w+32|0;b=w+28|0;A=t[47266]|0;if(!A){A=Uh(20812,t[4581]|0)|0;t[47266]=A}A=L5[t[A>>2]&63](A,e,512)|0;do{if(!A){n=F3(e,138821)|0;if(!n){t[r>>2]=e;nw(0,104283,r)|0;A=0;break}else{A=0;r=0}while(1){if(!(N4(a,1024,n)|0)){a=11;break}t[f>>2]=c;t[f+4>>2]=o;t[f+8>>2]=u;t[f+12>>2]=b;k=(V3(a,104311,f)|0)==4;r=k?1:r;if((i[a>>0]|0)!=37){k=(R4(a,104340)|0)==0;A=k?A:1}if((r|0)!=0&(A|0)!=0){a=12;break}}if((a|0)==11)if(!r){t[l>>2]=e;nw(0,104345,l)|0;A=0}else a=12;if((a|0)==12){k=$F(64)|0;c=t[c>>2]|0;t[k+32>>2]=c;o=t[o>>2]|0;t[k+40>>2]=(t[u>>2]|0)-c;t[k+36>>2]=(t[b>>2]|0)-o;t[k+8>>2]=e;b=t[47267]|0;t[47267]=b+1;t[k+12>>2]=b;W3(l6(n)|0,s)|0;b=t[s+36>>2]|0;u=$F(b+1|0)|0;t[k+52>>2]=u;O3(n,0,0)|0;t6(u,b,1,n)|0;i[u+b>>0]=0;b=t[47266]|0;L5[t[b>>2]&63](b,k,1)|0;i[k+16>>0]=A;A=k}k3(n)|0}}while(0);h=w;return A|0}function RV(e,A,r){e=e|0;A=A|0;r=r|0;G2(t[A+52>>2]|0);return}function xV(e){e=e|0;G2(t[(t[e+16>>2]|0)+12>>2]|0);return}function JV(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+16|0;o=u+8|0;c=u;s=(A|0)!=0;e:do{if(s){f=0;a=0;A:while(1)while(1){if(f)break e;n=t[A+(a<<2)>>2]|0;if(!n){l=6;break e}a=a+1|0;if(!(i[n>>0]|0)){f=1;continue A}}}else l=6}while(0);e:do{if((l|0)==6)while(1){a=t[r>>2]|0;if(!a)break e;hm(e,a)|0;hm(e,153599)|0;r=r+4|0;l=6}}while(0);e:do{if(s){f=0;while(1){a=t[A+(f<<2)>>2]|0;if(!a)break e;do{if(i[a>>0]|0){r=Lx(a)|0;if(!r){t[c>>2]=a;nw(0,104384,c)|0;break}n=F3(r,138821)|0;if(!n){t[o>>2]=r;nw(0,104412,o)|0;break}while(1){a=Gx(n)|0;if(!a)break;hm(e,a)|0}hm(e,153599)|0;k3(n)|0}}while(0);f=f+1|0}}}while(0);h=u;return}function HV(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;A=t[A+52>>2]|0;e:while(1){r=i[A>>0]|0;A:do{switch(r<<24>>24){case 0:break e;case 37:{if((i[A+1>>0]|0)==37){r=A+2|0;if((((S1(r,104440,3)|0)!=0?(S1(r,104444,5)|0)!=0:0)?(S1(r,104450,3)|0)!=0:0)?(S1(r,104454,7)|0)!=0:0){r=37;break A}else n=37;r:while(1){switch(n<<24>>24){case 13:{a=10;break r}case 10:case 0:{a=12;break r}default:{}}n=A+1|0;A=n;n=i[n>>0]|0}if((a|0)==10){r=A+1|0;if((i[r>>0]|0)==10){A=A+2|0;continue e}}else if((a|0)==12)r=A+1|0;A=n<<24>>24==0?A:r;continue e}else r=37;break}default:{}}}while(0);A:while(1){switch(r<<24>>24){case 10:case 13:case 0:break A;default:{}}wm(e,r<<24>>24)|0;n=A+1|0;A=n;r=i[n>>0]|0}a=A+1|0;if(r<<24>>24==13?(i[a>>0]|0)==10:0)A=A+2|0;else A=r<<24>>24==0?A:a;wm(e,10)|0}return}function PV(e){e=e|0;var A=0,r=0,a=0,n=0;a=h;h=h+16|0;r=a;A=t[47266]|0;e:do{if(A|0){A=L5[t[A>>2]&63](A,0,128)|0;while(1){if(!A)break e;if(!(i[A+16>>0]|0)){t[r>>2]=t[A+12>>2];mm(e,104462,r);hm(e,104480)|0;HV(e,A);hm(e,104498)|0;hm(e,104513)|0}n=t[47266]|0;A=L5[t[n>>2]&63](n,A,8)|0}}}while(0);h=a;return}function XV(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;n=h;h=h+16|0;r=n;e:do{switch(A|0){case 0:{a=e;break}case 1:{a=EJ(e)|0;break}default:{switch(SV(e)|0){case 2:break;case 1:{a=EJ(e)|0;break e}default:{a=e;break e}}if(!(t[47268]|0)){nw(0,104525,r)|0;t[47268]=1;a=e}else a=e}}}while(0);if(!(t[47269]|0))cw(189076,0,0);A=t[47270]|0;if(A>>>0>=(t[47271]|0)>>>0){ow(189076,1)|0;A=t[47270]|0}t[47270]=A+1;i[A>>0]=40;r=a;e:while(1){switch(i[r>>0]|0){case 0:break e;case 92:case 41:case 40:{A=t[47270]|0;if(A>>>0>=(t[47271]|0)>>>0){ow(189076,1)|0;A=t[47270]|0}t[47270]=A+1;i[A>>0]=92;break}default:{}}A=t[47270]|0;if(A>>>0>=(t[47271]|0)>>>0){ow(189076,1)|0;A=t[47270]|0}f=i[r>>0]|0;t[47270]=A+1;i[A>>0]=f;r=r+1|0}A=t[47270]|0;if(A>>>0>=(t[47271]|0)>>>0){ow(189076,1)|0;A=t[47270]|0}t[47270]=A+1;i[A>>0]=41;if((a|0)!=(e|0))G2(a);A=t[47270]|0;if(A>>>0>=(t[47271]|0)>>>0){ow(189076,1)|0;A=t[47270]|0}i[A>>0]=0;f=t[47269]|0;t[47270]=f;h=n;return f|0}function SV(e){e=e|0;var A=0,r=0;A=0;e:while(1){while(1){r=i[e>>0]|0;if(!(r<<24>>24))break e;if((r&255)<127)e=e+1|0;else break}if((r&-4)<<24>>24==-64){A=1;e=e+2|0}else{A=2;break}}return A|0}function jV(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0;u=h;h=h+96|0;f=u+80|0;l=u+72|0;o=u+64|0;n=u+32|0;s=u;c[n>>3]=+c[e>>3];c[n+8>>3]=+c[e+8>>3];c[n+16>>3]=+c[A>>3];c[n+24>>3]=+c[A+8>>3];do{if((rs(r,n,l)|0)>=0){if(!a){A=r+4|0;e=t[A>>2]|0;a=t[47274]|0;if((e|0)>(t[47273]|0)){if(!a)e=$F(e<<5)|0;else e=AM(a,e<<5)|0;t[47274]=e;n=t[A>>2]|0;t[47273]=n;a=e}else n=e;A=t[r>>2]|0;e=0;while(1){if((e|0)>=(n|0))break;b=a+(e<<5)|0;r=A+(e<<4)|0;t[b>>2]=t[r>>2];t[b+4>>2]=t[r+4>>2];t[b+8>>2]=t[r+8>>2];t[b+12>>2]=t[r+12>>2];b=a+(e<<5)+16|0;r=e+1|0;w=A+(((r|0)%(n|0)|0)<<4)|0;t[b>>2]=t[w>>2];t[b+4>>2]=t[w+4>>2];t[b+8>>2]=t[w+8>>2];t[b+12>>2]=t[w+12>>2];e=r}t[s>>2]=0;t[s+4>>2]=0;t[s+8>>2]=0;t[s+12>>2]=0;t[s+16>>2]=0;t[s+20>>2]=0;t[s+24>>2]=0;t[s+28>>2]=0;t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];if((Yl(a,n,f,s,o)|0)<0){e=0;break}}else{t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];Cs(f,o)}e=o+4|0;if(!(UV(t[e>>2]|0)|0)){n=t[e>>2]|0;e=t[47275]|0;a=t[o>>2]|0;A=0;while(1){if((A|0)>=(n|0))break;w=e+(A<<4)|0;b=a+(A<<4)|0;t[w>>2]=t[b>>2];t[w+4>>2]=t[b+4>>2];t[w+8>>2]=t[b+8>>2];t[w+12>>2]=t[b+12>>2];A=A+1|0}t[i>>2]=n}else e=0}else e=0}while(0);h=u;return e|0}function UV(e){e=e|0;var A=0,r=0,i=0;i=h;h=h+16|0;r=i;A=t[47276]|0;do{if((A|0)<(e|0)){e=e+300-((e|0)%300|0)+A|0;A=AM(t[47275]|0,e<<4)|0;t[47275]=A;if(!A){nw(1,104615,r)|0;e=1;break}else{t[47276]=e;e=0;break}}else e=0}while(0);h=i;return e|0}function TV(){var e=0,A=0,r=0;A=h;h=h+16|0;e=A;r=t[47277]|0;t[47277]=r+1;do{if((r|0)<=0){r=$F(4800)|0;t[47275]=r;if(!r){nw(1,104638,e)|0;e=1;break}t[47276]=300;t[47278]=0;t[47279]=0;if(0){lx();e=0}else e=0}else e=0}while(0);h=A;return e|0}function OV(){var e=0,A=0,r=0,i=0.0,a=0,n=0;A=h;h=h+16|0;e=A;r=t[47277]|0;t[47277]=r+-1;if((r|0)<=1?(G2(t[47275]|0),0):0){r=t[15712]|0;n=t[47278]|0;a=t[47279]|0;i=+sx();t[e>>2]=n;t[e+4>>2]=a;c[e+8>>3]=i;a3(r,104676,e)|0}h=A;return}function _V(e,A){e=e|0;A=A|0;return qV(e,A,0)|0}function qV(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,F=0,M=0,V=0,N=0,R=0;V=h;h=h+176|0;Q=V+168|0;M=V+128|0;B=V+120|0;p=V+112|0;f=V+104|0;v=V+88|0;u=V+72|0;n=V+64|0;g=V+160|0;z=V+152|0;y=V+144|0;m=V+32|0;E=V;F=V+136|0;t[47278]=(t[47278]|0)+1;D=t[e+80>>2]|0;t[47279]=(t[47279]|0)+D;a=e+88|0;while(1){G=t[a>>2]|0;if(!G){L=4;break}a=t[G+16>>2]|0;if(!(i[a+112>>0]|0)){L=5;break}else a=a+116|0}do{if((L|0)==4){nw(1,104719,n)|0;a=0}else if((L|0)==5){Z=t[e+84>>2]|0;if(!(KV(D,Z,e)|0)){n=D<<3;if((n|0)>(t[47280]|0)){a=t[47281]|0;if(!a)a=$F(D<<7)|0;else a=AM(a,D<<7)|0;t[47281]=a;t[47280]=n}e:do{if((D|0)>1?+c[Z+8>>3]>+c[Z+40>>3]:0){a=0;while(1){if((a|0)==(D|0)){w=1;break e}C=Z+(a<<5)+24|0;o=+c[C>>3];I=Z+(a<<5)+8|0;c[C>>3]=-+c[I>>3];c[I>>3]=-o;a=a+1|0}}else w=0}while(0);d=t[G>>2]&3;C=G+48|0;a=t[((d|0)==3?G:C)+40>>2]|0;I=G+-48|0;if((a|0)==(t[((d|0)==2?G:I)+40>>2]|0)){t[f>>2]=Mk(a)|0;nw(1,104826,f)|0;a=0;break}b=D+-1|0;k=t[47281]|0;d=k;a=0;l=0;e:while(1){if((l|0)>=(D|0)){l=b;u=a;break}if((l|0)>0)n=+c[Z+(l<<5)+8>>3]>+c[Z+(l+-1<<5)+8>>3]?-1:1;else n=0;if((l|0)<(b|0))f=+c[Z+(l+1<<5)+8>>3]>+c[Z+(l<<5)+8>>3]?1:-1;else f=0;A:do{if((n|0)!=(f|0))if((n|0)==1|(f|0)==-1){n=Z+(l<<5)|0;c[k+(a<<4)>>3]=+c[n>>3];f=a+1|0;c[k+(a<<4)+8>>3]=+c[Z+(l<<5)+24>>3];c[k+(f<<4)>>3]=+c[n>>3];n=Z+(l<<5)+8|0;L=29;break}else{n=Z+(l<<5)+16|0;c[k+(a<<4)>>3]=+c[n>>3];f=a+1|0;c[k+(a<<4)+8>>3]=+c[Z+(l<<5)+8>>3];c[k+(f<<4)>>3]=+c[n>>3];n=Z+(l<<5)+24|0;L=29;break}else{switch(n|0){case-1:break A;case 0:break;default:{L=28;break e}}n=Z+(l<<5)|0;c[k+(a<<4)>>3]=+c[n>>3];f=a+1|0;c[k+(a<<4)+8>>3]=+c[Z+(l<<5)+24>>3];c[k+(f<<4)>>3]=+c[n>>3];n=Z+(l<<5)+8|0;L=29}}while(0);if((L|0)==29){L=0;c[k+(f<<4)+8>>3]=+c[n>>3];a=a+2|0}l=l+1|0}if((L|0)==28){t[u>>2]=n;t[u+4>>2]=n;t[u+8>>2]=480;nw(1,104761,u)|0;a=0;break}e:while(1){if((l|0)<=-1)break;if((l|0)<(b|0))a=+c[Z+(l<<5)+8>>3]>+c[Z+(l+1<<5)+8>>3]?-1:1;else a=0;if((l|0)>0)n=+c[Z+(l+-1<<5)+8>>3]>+c[Z+(l<<5)+8>>3]?1:-1;else n=0;A:do{if((a|0)!=(n|0))if((a|0)==1|(n|0)==-1){a=Z+(l<<5)|0;c[k+(u<<4)>>3]=+c[a>>3];n=u+1|0;c[k+(u<<4)+8>>3]=+c[Z+(l<<5)+24>>3];c[k+(n<<4)>>3]=+c[a>>3];a=Z+(l<<5)+8|0;f=2;break}else{a=Z+(l<<5)+16|0;c[k+(u<<4)>>3]=+c[a>>3];n=u+1|0;c[k+(u<<4)+8>>3]=+c[Z+(l<<5)+8>>3];c[k+(n<<4)>>3]=+c[a>>3];a=Z+(l<<5)+24|0;f=2;break}else switch(a|0){case 0:{a=Z+(l<<5)+16|0;c[k+(u<<4)>>3]=+c[a>>3];n=u+1|0;c[k+(u<<4)+8>>3]=+c[Z+(l<<5)+8>>3];c[k+(n<<4)>>3]=+c[a>>3];a=Z+(l<<5)+24|0;f=2;break A}case-1:{R=Z+(l<<5)+16|0;c[k+(u<<4)>>3]=+c[R>>3];a=Z+(l<<5)+8|0;f=u+1|0;c[k+(u<<4)+8>>3]=+c[a>>3];c[k+(f<<4)>>3]=+c[R>>3];R=Z+(l<<5)+24|0;N=u+2|0;c[k+(f<<4)+8>>3]=+c[R>>3];f=Z+(l<<5)|0;c[k+(N<<4)>>3]=+c[f>>3];n=u+3|0;c[k+(N<<4)+8>>3]=+c[R>>3];c[k+(n<<4)>>3]=+c[f>>3];f=4;break A}default:{L=42;break e}}}while(0);c[k+(n<<4)+8>>3]=+c[a>>3];l=l+-1|0;u=u+f|0}if((L|0)==42){t[v>>2]=a;t[v+4>>2]=a;t[v+8>>2]=513;nw(1,104761,v)|0;a=0;break}e:do{if(!w)a=0;else{a=0;while(1){if((a|0)>=(D|0)){a=0;break}N=Z+(a<<5)+24|0;o=+c[N>>3];R=Z+(a<<5)+8|0;c[N>>3]=-+c[R>>3];c[R>>3]=-o;a=a+1|0}while(1){if((a|0)>=(u|0)){a=0;break e}R=k+(a<<4)+8|0;c[R>>3]=-+c[R>>3];a=a+1|0}}}while(0);while(1){if((a|0)>=(D|0))break;c[Z+(a<<5)>>3]=2147483647.0;c[Z+(a<<5)+16>>3]=-2147483648.0;a=a+1|0}t[g>>2]=d;f=g+4|0;t[f>>2]=u;c[m>>3]=+c[e>>3];c[m+8>>3]=+c[e+8>>3];c[m+16>>3]=+c[e+40>>3];c[m+24>>3]=+c[e+48>>3];if((rs(g,m,z)|0)<0){nw(1,104865,p)|0;a=0;break}if(!r){n=t[f>>2]|0;a=t[47274]|0;if((n|0)>(t[47273]|0)){if(!a)a=$F(n<<5)|0;else a=AM(a,n<<5)|0;t[47274]=a;n=t[f>>2]|0;t[47273]=n}l=t[47281]|0;f=0;while(1){if((f|0)>=(n|0))break;N=a+(f<<5)|0;R=l+(f<<4)|0;t[N>>2]=t[R>>2];t[N+4>>2]=t[R+4>>2];t[N+8>>2]=t[R+8>>2];t[N+12>>2]=t[R+12>>2];N=a+(f<<5)+16|0;R=f+1|0;p=l+(((R|0)%(n|0)|0)<<4)|0;t[N>>2]=t[p>>2];t[N+4>>2]=t[p+4>>2];t[N+8>>2]=t[p+8>>2];t[N+12>>2]=t[p+12>>2];f=R}if(!(i[e+29>>0]|0)){s=0.0;o=0.0}else{o=+c[e+16>>3];s=+W(+o);o=+Y(+o)}c[E+8>>3]=o;c[E>>3]=s;if(!(i[e+69>>0]|0)){s=0.0;o=0.0}else{o=+c[e+56>>3];s=-+W(+o);o=-+Y(+o)}c[E+24>>3]=o;c[E+16>>3]=s;t[Q>>2]=t[z>>2];t[Q+4>>2]=t[z+4>>2];if((Yl(a,n,Q,E,y)|0)<0){nw(1,104904,B)|0;a=0;break}}else{t[Q>>2]=t[z>>2];t[Q+4>>2]=t[z+4>>2];Cs(Q,y)}u=y+4|0;if(!(UV(t[u>>2]|0)|0)){a=0;while(1){if((a|0)>=(D|0))break;c[Z+(a<<5)>>3]=2147483647.0;c[Z+(a<<5)+16>>3]=-2147483648.0;a=a+1|0}f=t[u>>2]|0;l=t[47275]|0;n=t[y>>2]|0;a=0;while(1){if((a|0)>=(f|0)){f=1;a=10;n=0;break}R=l+(a<<4)|0;N=n+(a<<4)|0;t[R>>2]=t[N>>2];t[R+4>>2]=t[N+4>>2];t[R+8>>2]=t[N+8>>2];t[R+12>>2]=t[N+12>>2];a=a+1|0}while(1){if(!((n|0)<15&f<<24>>24!=0))break;$V(Z,D,t[47275]|0,t[u>>2]|0,a);l=0;while(1){if((l|0)>=(D|0))break;if(+c[Z+(l<<5)>>3]==2147483647.0){L=82;break}if(+c[Z+(l<<5)+16>>3]==-2147483648.0){L=82;break}l=l+1|0}if((L|0)==82){L=0;R=a<<1;a=R;n=(R|0)>(2147483647/(D|0)|0|0)?15:n}f=(l|0)==(D|0)?0:f;n=n+1|0}if(f<<24>>24){N=Mk(t[((t[G>>2]&3|0)==3?G:C)+40>>2]|0)|0;R=Mk(t[((t[G>>2]&3|0)==2?G:I)+40>>2]|0)|0;t[M>>2]=N;t[M+4>>2]=R;nw(0,104942,M)|0;t[Q>>2]=t[z>>2];t[Q+4>>2]=t[z+4>>2];Cs(Q,F);$V(Z,D,t[F>>2]|0,t[F+4>>2]|0,10);G2(t[F>>2]|0)}t[A>>2]=t[u>>2];a=t[47275]|0}else a=0}else a=0}}while(0);h=V;return a|0}function KV(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0,f=0,l=0,s=0,o=0.0,u=0.0,b=0,w=0.0,k=0.0,d=0.0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0.0,V=0,N=0,R=0,x=0.0,J=0,H=0,P=0;P=h;h=h+32|0;Y=P+16|0;W=P+8|0;s=P;i=0;l=0;while(1){if((l|0)>=(e|0))break;f=A+(l<<5)|0;v=+c[A+(l<<5)+8>>3]-+c[A+(l<<5)+24>>3];if(!((v>=0.0?v:-v)<.01)?(v=+c[f>>3]-+c[A+(l<<5)+16>>3],!((v>=0.0?v:-v)<.01)):0){if((i|0)!=(l|0)){J=A+(i<<5)|0;t[J>>2]=t[f>>2];t[J+4>>2]=t[f+4>>2];t[J+8>>2]=t[f+8>>2];t[J+12>>2]=t[f+12>>2];t[J+16>>2]=t[f+16>>2];t[J+20>>2]=t[f+20>>2];t[J+24>>2]=t[f+24>>2];t[J+28>>2]=t[f+28>>2]}i=i+1|0}l=l+1|0}F=A+16|0;do{if(!(+c[A>>3]>+c[F>>3])?(V=A+8|0,R=A+24|0,!(+c[V>>3]>+c[R>>3])):0){J=i+-1|0;N=t[15712]|0;E=0;while(1){if((E|0)>=(J|0))break;L=E+1|0;Q=A+(L<<5)|0;a=+c[Q>>3];D=A+(L<<5)+16|0;n=+c[D>>3];if(a>n){H=16;break}I=A+(L<<5)+8|0;o=+c[I>>3];Z=A+(L<<5)+24|0;u=+c[Z>>3];if(o>u){H=16;break}z=A+(E<<5)+16|0;p=+c[z>>3]>3]>n;e=m&1;C=A+(E<<5)+24|0;g=+c[C>>3]>3]>u;f=s&1;B=e+i+l+f|0;b=(B|0)!=0;if(!(0==0|b^1)){t[Y>>2]=E;t[Y+4>>2]=L;a3(N,105142,Y)|0;eN(r)}e:do{if(b){if(!p)if(!m)if(!g){if(s){s=0;b=i;i=Z;f=y;H=24}}else{s=f;l=0;b=i;i=I;f=C;H=24}else{s=f;e=0;b=i;i=D;f=G;H=24}else{s=f;b=0;i=Q;f=z;H=24}if((H|0)==24){H=0;E=~~+c[f>>3];c[f>>3]=+c[i>>3];c[i>>3]=+(E|0);f=s;i=b}b=B+-1|0;s=0;while(1){if((s|0)>=(b|0))break e;do{if((i|0)!=1){if((e|0)==1){v=+(~~((+c[D>>3]+ +c[G>>3])*.5+.5)|0);c[D>>3]=v;c[G>>3]=v;e=0;break}if((l|0)==1){v=+(~~((+c[I>>3]+ +c[C>>3])*.5+.5)|0);c[I>>3]=v;c[C>>3]=v;l=0;break}if((f|0)==1){v=+(~~((+c[Z>>3]+ +c[y>>3])*.5+.5)|0);c[Z>>3]=v;c[y>>3]=v;f=0}}else{v=+(~~((+c[Q>>3]+ +c[z>>3])*.5+.5)|0);c[Q>>3]=v;c[z>>3]=v;i=0}}while(0);s=s+1|0}}}while(0);w=+c[G>>3];k=+c[z>>3];d=+c[Q>>3];v=+c[D>>3];f=AN(~~w,~~k,~~d,~~v)|0;u=+c[y>>3];o=+c[C>>3];n=+c[I>>3];a=+c[Z>>3];i=AN(~~u,~~o,~~n,~~a)|0;if(!((f|0)!=0&(i|0)!=0)){E=L;continue}if((f|0)<(i|0)){Z=k-w>v-d;E=k>3]=Z?E?d:v:E?k:w;E=L;continue}else{Z=o-u>a-n;E=o>3]=Z?E?n:a:E?o:u;E=L;continue}}if((H|0)==16){t[W>>2]=L;nw(1,105096,W)|0;eN(r);i=1;break}a=+c[r>>3];n=+c[A>>3];if(!(((!(a+c[F>>3]):0)?(M=+c[r+8>>3],!(M<+c[V>>3])):0)?!(M>+c[R>>3]):0)){if(0){G3(105185,42,1,N)|0;eN(r);n=+c[A>>3];a=+c[r>>3]}if(a>3]=n;else n=a;a=+c[F>>3];if(n>a)c[r>>3]=a;i=r+8|0;n=+c[i>>3];a=+c[V>>3];if(n>3]=a;n=a}a=+c[R>>3];if(n>a)c[i>>3]=a}f=r+40|0;a=+c[f>>3];i=A+(J<<5)|0;n=+c[i>>3];if(((!(a+c[A+(J<<5)+16>>3]):0)?(x=+c[r+48>>3],!(x<+c[A+(J<<5)+8>>3])):0)?!(x>+c[A+(J<<5)+24>>3]):0){i=0;break}if(0){G3(105228,39,1,N)|0;eN(r);n=+c[i>>3];a=+c[f>>3]}if(a>3]=n;a=n}n=+c[A+(J<<5)+16>>3];if(a>n)c[f>>3]=n;i=r+48|0;a=+c[i>>3];n=+c[A+(J<<5)+8>>3];if(a>3]=n;else n=a;a=+c[A+(J<<5)+24>>3];if(n>a){c[i>>3]=a;i=0}else i=0}else H=12}while(0);if((H|0)==12){nw(1,105051,s)|0;eN(r);i=1}h=P;return i|0}function $V(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0,h=0,w=0,k=0,d=0,v=0,g=0.0,m=0,p=0.0,E=0.0,B=0.0,y=0.0,C=0.0;v=P(a,A)|0;g=1.0/+(v|0);a=0;e:while(1){m=a+3|0;if((m|0)>=(i|0))break;h=r+(a<<4)|0;w=r+(a<<4)+8|0;d=a+1|0;k=r+(d<<4)|0;d=r+(d<<4)+8|0;l=a+2|0;f=r+(l<<4)|0;l=r+(l<<4)+8|0;s=r+(m<<4)|0;o=r+(m<<4)+8|0;n=0;while(1){if((n|0)>(v|0)){a=m;continue e}p=g*+(n|0);u=+c[h>>3];b=+c[w>>3];y=+c[k>>3];E=+c[d>>3];C=+c[f>>3];B=+c[l>>3];u=(y-u)*p+u;b=(E-b)*p+b;y=(C-y)*p+y;E=(B-E)*p+E;u=(y-u)*p+u;b=(E-b)*p+b;u=((C-y+(+c[s>>3]-C)*p)*p+y-u)*p+u;b=((B-E+(+c[o>>3]-B)*p)*p+E-b)*p+b;t=0;while(1){if((t|0)>=(A|0))break;if(b<=+c[e+(t<<5)+24>>3]+.0001?b>=+c[e+(t<<5)+8>>3]+-.0001:0){a=e+(t<<5)|0;if(+c[a>>3]>u)c[a>>3]=u;a=e+(t<<5)+16|0;if(+c[a>>3]>3]=u}t=t+1|0}n=n+1|0}}return}function eN(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0,w=0.0,k=0.0,d=0;o=h;h=h+112|0;l=o+80|0;s=o+48|0;f=o+8|0;n=o;r=t[15712]|0;a=e+80|0;t[n>>2]=t[a>>2];a3(r,105268,n)|0;n=e+84|0;A=0;while(1){if((A|0)>=(t[a>>2]|0))break;d=t[n>>2]|0;k=+c[d+(A<<5)>>3];w=+c[d+(A<<5)+8>>3];b=+c[d+(A<<5)+16>>3];u=+c[d+(A<<5)+24>>3];t[f>>2]=A;c[f+8>>3]=k;c[f+16>>3]=w;c[f+24>>3]=b;c[f+32>>3]=u;a3(r,105279,f)|0;A=A+1|0}k=+c[e+8>>3];w=+c[e+16>>3];d=i[e+29>>0]|0?105310:105322;c[s>>3]=+c[e>>3];c[s+8>>3]=k;c[s+16>>3]=w;t[s+24>>2]=d;a3(r,105338,s)|0;w=+c[e+48>>3];k=+c[e+56>>3];d=i[e+69>>0]|0?105310:105322;c[l>>3]=+c[e+40>>3];c[l+8>>3]=w;c[l+16>>3]=k;t[l+24>>2]=d;a3(r,105389,l)|0;h=o;return}function AN(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;do{if((A|0)>(r|0)&(i|0)>(e|0)){if(!((r|0)>(e|0)|(i|0)<(e|0))){e=i-e|0;break}if((A|0)<(r|0)|(A|0)>(i|0)){A=A-e|0;e=i-r|0;e=(A|0)<(e|0)?A:e;break}else{e=A-r|0;break}}else e=0}while(0);return e|0}function rN(e,A){e=e|0;A=A|0;return qV(e,A,1)|0}function iN(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;s=h;h=h+80|0;n=s;l=1;a=A;while(1){f=a;a=t[(t[a+16>>2]|0)+172>>2]|0;if(!((a|0)!=0&(f|0)!=(a|0)))break;else l=l+1|0}if((l|0)>=21)n=KF(l<<2)|0;f=0;a=A;while(1){if((f|0)>=(l|0))break;t[n+(f<<2)>>2]=a;f=f+1|0;a=t[(t[a+16>>2]|0)+172>>2]|0}aN(e,n,l,r,i);if((l|0)>20)G2(n);h=s;return}function aN(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,z=0,W=0,Y=0,F=0,M=0,V=0.0,N=0.0,R=0.0,x=0,J=0;M=h;h=h+304|0;I=M+272|0;C=M+208|0;z=M+96|0;W=M+32|0;Y=M+16|0;F=M;d=M+192|0;y=M+176|0;f=M+160|0;Z=M+296|0;G=M+288|0;l=t[A>>2]|0;E=t[l>>2]&3;s=l+-48|0;L=t[((E|0)==2?l:s)+40>>2]|0;g=z+16|0;E=(t[(t[((E|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+16|0;B=l+16|0;Q=(t[B>>2]|0)+16|0;t[C>>2]=t[E>>2];t[C+4>>2]=t[E+4>>2];t[C+8>>2]=t[E+8>>2];t[C+12>>2]=t[E+12>>2];t[I>>2]=t[Q>>2];t[I+4>>2]=t[Q+4>>2];t[I+8>>2]=t[Q+8>>2];t[I+12>>2]=t[Q+12>>2];tN(d,C,I);t[z>>2]=t[d>>2];t[z+4>>2]=t[d+4>>2];t[z+8>>2]=t[d+8>>2];t[z+12>>2]=t[d+12>>2];t[g>>2]=t[d>>2];t[g+4>>2]=t[d+4>>2];t[g+8>>2]=t[d+8>>2];t[g+12>>2]=t[d+12>>2];t[Y>>2]=t[d>>2];t[Y+4>>2]=t[d+4>>2];t[Y+8>>2]=t[d+8>>2];t[Y+12>>2]=t[d+12>>2];d=z+32|0;Q=z+48|0;E=(t[L+16>>2]|0)+16|0;B=(t[B>>2]|0)+56|0;t[C>>2]=t[E>>2];t[C+4>>2]=t[E+4>>2];t[C+8>>2]=t[E+8>>2];t[C+12>>2]=t[E+12>>2];t[I>>2]=t[B>>2];t[I+4>>2]=t[B+4>>2];t[I+8>>2]=t[B+8>>2];t[I+12>>2]=t[B+12>>2];tN(y,C,I);t[Q>>2]=t[y>>2];t[Q+4>>2]=t[y+4>>2];t[Q+8>>2]=t[y+8>>2];t[Q+12>>2]=t[y+12>>2];t[d>>2]=t[y>>2];t[d+4>>2]=t[y+4>>2];t[d+8>>2]=t[y+8>>2];t[d+12>>2]=t[y+12>>2];t[F>>2]=t[y>>2];t[F+4>>2]=t[y+4>>2];t[F+8>>2]=t[y+8>>2];t[F+12>>2]=t[y+12>>2];e:do{if((r|0)!=1&(i[194954]|0)==0){o=+c[z>>3];u=+c[Q>>3];V=o-u;b=+c[z+8>>3];w=+c[z+56>>3];v=b-w;k=v*v;if(k+V*V<1.0e-06){t[g>>2]=t[z>>2];t[g+4>>2]=t[z+4>>2];t[g+8>>2]=t[z+8>>2];t[g+12>>2]=t[z+12>>2];t[d>>2]=t[Q>>2];t[d+4>>2]=t[Q+4>>2];t[d+8>>2]=t[Q+8>>2];t[d+12>>2]=t[Q+12>>2];y=z+24|0;B=z+40|0;u=0.0;o=0.0}else{N=u-o;V=+D(+(k+N*N));E=t[(t[(t[e+60>>2]|0)+16>>2]|0)+248>>2]|0;R=+((P(E,r+-1|0)|0)/2|0|0);k=v*R/V;c[g>>3]=k+o;o=N*R/V;y=z+24|0;c[y>>3]=o+b;c[d>>3]=k+u;B=z+40|0;c[B>>3]=w+o;o=+(0-E|0);u=N*o/V;o=v*o/V}a=(a|0)==6;m=G+4|0;p=Z+4|0;l=0;while(1){if((l|0)>=(r|0))break e;E=t[A+(l<<2)>>2]|0;s=E+-48|0;A:do{if((t[((t[E>>2]&3|0)==2?E:s)+40>>2]|0)==(L|0)){t[Y>>2]=t[z>>2];t[Y+4>>2]=t[z+4>>2];t[Y+8>>2]=t[z+8>>2];t[Y+12>>2]=t[z+12>>2];t[F>>2]=t[Q>>2];t[F+4>>2]=t[Q+4>>2];t[F+8>>2]=t[Q+8>>2];t[F+12>>2]=t[Q+12>>2];f=0;while(1){if((f|0)==4)break A;x=W+(f<<4)|0;J=z+(f<<4)|0;t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];f=f+1|0}}else{t[Y>>2]=t[Q>>2];t[Y+4>>2]=t[Q+4>>2];t[Y+8>>2]=t[Q+8>>2];t[Y+12>>2]=t[Q+12>>2];t[F>>2]=t[z>>2];t[F+4>>2]=t[z+4>>2];t[F+8>>2]=t[z+8>>2];t[F+12>>2]=t[z+12>>2];f=0;while(1){if((f|0)==4)break A;J=W+(3-f<<4)|0;x=z+(f<<4)|0;t[J>>2]=t[x>>2];t[J+4>>2]=t[x+4>>2];t[J+8>>2]=t[x+8>>2];t[J+12>>2]=t[x+12>>2];f=f+1|0}}}while(0);if(a){t[m>>2]=4;t[G>>2]=C;f=0;while(1){if((f|0)==4)break;J=C+(f<<4)|0;x=W+(f<<4)|0;t[J>>2]=t[x>>2];t[J+4>>2]=t[x+4>>2];t[J+8>>2]=t[x+8>>2];t[J+12>>2]=t[x+12>>2];f=f+1|0}t[I>>2]=t[G>>2];t[I+4>>2]=t[G+4>>2];Cs(I,Z);mR(E,t[((t[E>>2]&3|0)==2?E:s)+40>>2]|0,t[Z>>2]|0,t[p>>2]|0,n)}else mR(E,t[((t[E>>2]&3|0)==2?E:s)+40>>2]|0,W,4,n);t[C>>2]=t[Y>>2];t[C+4>>2]=t[Y+4>>2];t[C+8>>2]=t[Y+8>>2];t[C+12>>2]=t[Y+12>>2];t[I>>2]=t[F>>2];t[I+4>>2]=t[F+4>>2];t[I+8>>2]=t[F+8>>2];t[I+12>>2]=t[F+12>>2];JR(e,E,C,I);c[g>>3]=+c[g>>3]+o;c[y>>3]=+c[y>>3]+u;c[d>>3]=+c[d>>3]+o;c[B>>3]=+c[B>>3]+u;l=l+1|0}}else{if((a|0)==4){nN(f,e);t[I>>2]=t[f>>2];t[I+4>>2]=t[f+4>>2];t[I+8>>2]=t[f+8>>2];t[I+12>>2]=t[f+12>>2];fN(z,I)}mR(l,t[((t[l>>2]&3|0)==2?l:s)+40>>2]|0,z,4,n);t[C>>2]=t[Y>>2];t[C+4>>2]=t[Y+4>>2];t[C+8>>2]=t[Y+8>>2];t[C+12>>2]=t[Y+12>>2];t[I>>2]=t[F>>2];t[I+4>>2]=t[F+4>>2];t[I+8>>2]=t[F+8>>2];t[I+12>>2]=t[F+12>>2];JR(e,l,C,I)}}while(0);h=M;return}function tN(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[r+8>>3]+ +c[A+8>>3];c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=i;return}function nN(e,A){e=e|0;A=A|0;A=t[A+16>>2]|0;c[23305]=(+c[A+32>>3]+ +c[A+16>>3])*.5;c[23306]=(+c[A+40>>3]+ +c[A+24>>3])*.5;t[e>>2]=t[46610];t[e+4>>2]=t[46611];t[e+8>>2]=t[46612];t[e+12>>2]=t[46613];return}function fN(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0,t=0.0,n=0.0,f=0.0;t=+c[e>>3];i=+c[e+48>>3];f=(i+t)*.5;n=+c[e+8>>3];r=+c[e+56>>3];a=(r+n)*.5;t=i-t;n=r-n;t=+D(+(n*n+t*t))*.2;n=+c[A>>3]-f;r=+c[A+8>>3]-a;i=+D(+(r*r+n*n));if(!(i==0.0)){n=f-n/i*t;f=a-r/i*t;c[e+32>>3]=n;c[e+16>>3]=n;c[e+40>>3]=f;c[e+24>>3]=f}return}function lN(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0.0,u=0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0.0,z=0,W=0.0,Y=0.0,F=0.0;L=h;h=h+208|0;g=L+192|0;v=L+176|0;Z=L+32|0;E=L+16|0;B=L;y=L+160|0;C=L+144|0;m=L+128|0;p=L+112|0;n=i&2130706432;I=(i&8|0)==0?(n|0)==0?4:n:8;if((I|0)==436207616)sN(e,A,r,a);else{G=KF((r<<6)+64|0)|0;w=r+-1|0;k=B+8|0;d=E+8|0;b=12.0;i=0;while(1){if((i|0)>=(r|0))break;u=A+(i<<4)|0;t[E>>2]=t[u>>2];t[E+4>>2]=t[u+4>>2];t[E+8>>2]=t[u+8>>2];t[E+12>>2]=t[u+12>>2];if((i|0)<(w|0)){i=i+1|0;u=A+(i<<4)|0;t[B>>2]=t[u>>2];t[B+4>>2]=t[u+4>>2];t[B+8>>2]=t[u+8>>2];t[B+12>>2]=t[u+12>>2]}else{t[B>>2]=t[A>>2];t[B+4>>2]=t[A+4>>2];t[B+8>>2]=t[A+8>>2];t[B+12>>2]=t[A+12>>2];i=i+1|0}o=+c[B>>3]-+c[E>>3];Q=+c[k>>3]-+c[d>>3];o=+D(+(Q*Q+o*o))*.3333333333333333;b=b=(r|0))break;n=A+(f<<4)|0;t[E>>2]=t[n>>2];t[E+4>>2]=t[n+4>>2];t[E+8>>2]=t[n+8>>2];t[E+12>>2]=t[n+12>>2];if((f|0)<(w|0)){n=A+(f+1<<4)|0;t[B>>2]=t[n>>2];t[B+4>>2]=t[n+4>>2];t[B+8>>2]=t[n+8>>2];t[B+12>>2]=t[n+12>>2]}else{t[B>>2]=t[A>>2];t[B+4>>2]=t[A+4>>2];t[B+8>>2]=t[A+8>>2];t[B+12>>2]=t[A+12>>2]}o=+c[B>>3]-+c[E>>3];Q=+c[k>>3]-+c[d>>3];o=b/+D(+(Q*Q+o*o));o=s?o*.3333333333333333:l?o*.5:o;n=G+(i<<4)|0;if(u){t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[g>>2]=t[B>>2];t[g+4>>2]=t[B+4>>2];t[g+8>>2]=t[B+8>>2];t[g+12>>2]=t[B+12>>2];cN(y,o*.5,v,g);t[n>>2]=t[y>>2];t[n+4>>2]=t[y+4>>2];t[n+8>>2]=t[y+8>>2];t[n+12>>2]=t[y+12>>2]}else{t[n>>2]=t[E>>2];t[n+4>>2]=t[E+4>>2];t[n+8>>2]=t[E+8>>2];t[n+12>>2]=t[E+12>>2]}n=G+(i+1<<4)|0;t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[g>>2]=t[B>>2];t[g+4>>2]=t[B+4>>2];t[g+8>>2]=t[B+8>>2];t[g+12>>2]=t[B+12>>2];cN(C,o,v,g);t[n>>2]=t[C>>2];t[n+4>>2]=t[C+4>>2];t[n+8>>2]=t[C+8>>2];t[n+12>>2]=t[C+12>>2];n=i+3|0;z=G+(i+2<<4)|0;t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[g>>2]=t[B>>2];t[g+4>>2]=t[B+4>>2];t[g+8>>2]=t[B+8>>2];t[g+12>>2]=t[B+12>>2];cN(m,1.0-o,v,g);t[z>>2]=t[m>>2];t[z+4>>2]=t[m+4>>2];t[z+8>>2]=t[m+8>>2];t[z+12>>2]=t[m+12>>2];if(u){z=G+(n<<4)|0;t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[g>>2]=t[B>>2];t[g+4>>2]=t[B+4>>2];t[g+8>>2]=t[B+8>>2];t[g+12>>2]=t[B+12>>2];cN(p,1.0-o*.5,v,g);t[z>>2]=t[p>>2];t[z+4>>2]=t[p+4>>2];t[z+8>>2]=t[p+8>>2];t[z+12>>2]=t[p+12>>2];i=i+4|0}else i=n;f=f+1|0}s=G+(i<<4)|0;t[s>>2]=t[G>>2];t[s+4>>2]=t[G+4>>2];t[s+8>>2]=t[G+8>>2];t[s+12>>2]=t[G+12>>2];s=G+(i+1<<4)|0;l=G+16|0;t[s>>2]=t[l>>2];t[s+4>>2]=t[l+4>>2];t[s+8>>2]=t[l+8>>2];t[s+12>>2]=t[l+12>>2];i=G+(i+2<<4)|0;s=G+32|0;t[i>>2]=t[s>>2];t[i+4>>2]=t[s+4>>2];t[i+8>>2]=t[s+8>>2];t[i+12>>2]=t[s+12>>2];i=I&2147483647;e:do{if((i|0)<201326592){if((i|0)>=83886080){if((i|0)<134217728){if((i|0)<100663296){switch(i|0){case 83886080:break;default:break e}if((r|0)==4){z=KF(192)|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];w=z+16|0;g=A+16|0;t[w>>2]=t[g>>2];t[w+4>>2]=t[g+4>>2];t[w+8>>2]=t[g+8>>2];t[w+12>>2]=t[g+12>>2];w=G+48|0;g=G+64|0;b=+c[g>>3];u=z+32|0;c[u>>3]=b;k=G+56|0;d=G+72|0;W=+c[d>>3];C=z+40|0;c[C>>3]=W;Q=+c[w>>3]+b-+c[s>>3];m=z+48|0;c[m>>3]=Q;F=+c[k>>3]+W-+c[G+40>>3];B=z+56|0;c[B>>3]=F;Y=+c[g>>3]+Q-+c[w>>3];w=z+64|0;c[w>>3]=Y;o=+c[d>>3]+F-+c[k>>3];k=z+72|0;c[k>>3]=o;d=z+80|0;c[d>>3]=b+Y-Q;c[z+88>>3]=W+o-F;g=G+96|0;p=G+80|0;F=+c[p>>3];r=z+144|0;c[r>>3]=F;E=G+104|0;v=G+88|0;o=+c[v>>3];c[z+152>>3]=o;W=+c[g>>3]+F-+c[G+112>>3];y=z+128|0;c[y>>3]=W;Q=+c[E>>3]+o-+c[G+120>>3];I=z+136|0;c[I>>3]=Q;Y=+c[p>>3]+W-+c[g>>3];g=z+112|0;c[g>>3]=Y;b=+c[v>>3]+Q-+c[E>>3];E=z+120|0;c[E>>3]=b;v=z+96|0;c[v>>3]=F+Y-W;p=z+104|0;c[p>>3]=o+b-Q;s=z+160|0;l=A+32|0;t[s>>2]=t[l>>2];t[s+4>>2]=t[l+4>>2];t[s+8>>2]=t[l+8>>2];t[s+12>>2]=t[l+12>>2];s=z+176|0;A=A+48|0;t[s>>2]=t[A>>2];t[s+4>>2]=t[A+4>>2];t[s+8>>2]=t[A+8>>2];t[s+12>>2]=t[A+12>>2];ti(e,z,12,a);t[Z>>2]=t[u>>2];t[Z+4>>2]=t[u+4>>2];t[Z+8>>2]=t[u+8>>2];t[Z+12>>2]=t[u+12>>2];Q=+c[u>>3];b=+c[m>>3];Q=Q+Q-b;m=Z+16|0;c[m>>3]=Q;o=+c[C>>3];W=+c[B>>3];o=o+o-W;B=Z+24|0;c[B>>3]=o;C=Z+32|0;c[C>>3]=+c[w>>3]+Q-b;A=Z+40|0;c[A>>3]=+c[k>>3]+o-W;a=Z+48|0;t[a>>2]=t[d>>2];t[a+4>>2]=t[d+4>>2];t[a+8>>2]=t[d+8>>2];t[a+12>>2]=t[d+12>>2];li(e,Z,4);t[Z>>2]=t[v>>2];t[Z+4>>2]=t[v+4>>2];t[Z+8>>2]=t[v+8>>2];t[Z+12>>2]=t[v+12>>2];W=+c[v>>3];o=+c[g>>3];W=W-(o-W);c[m>>3]=W;b=+c[p>>3];Q=+c[E>>3];b=b-(Q-b);c[B>>3]=b;c[C>>3]=+c[y>>3]+W-o;c[A>>3]=+c[I>>3]+b-Q;t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];li(e,Z,4);G2(z);break}else ge(105438,105449,737,105458)}if((i|0)<117440512){switch(i|0){case 100663296:break;default:break e}y=r+5|0;z=KF(y<<4)|0;C=A+16|0;W=+c[C>>3];W=(+c[A>>3]-W)*.625+W;c[z>>3]=W;I=A+40|0;F=+c[I>>3];r=A+24|0;p=G+48|0;E=G+56|0;B=G+72|0;F=(+c[r>>3]-F)*.5+F+(+c[E>>3]-+c[B>>3])*1.5;c[z+8>>3]=F;Y=+c[C>>3];Y=(+c[A>>3]-Y)*.25+Y;c[z+16>>3]=Y;c[z+24>>3]=F;c[z+32>>3]=Y;Q=+c[I>>3];c[z+40>>3]=(+c[r>>3]-Q)*.5+Q;Y=(+c[s>>3]-+c[p>>3])*.5+Y;c[z+48>>3]=Y;Q=+c[I>>3];c[z+56>>3]=(+c[r>>3]-Q)*.5+Q;c[z+64>>3]=Y;Y=+c[I>>3];Y=(+c[r>>3]-Y)*.5+Y+(+c[E>>3]-+c[B>>3]);c[z+72>>3]=Y;c[z+80>>3]=W;c[z+88>>3]=Y;c[z+96>>3]=W;Y=Y-(+c[E>>3]-+c[B>>3])*.25;c[z+104>>3]=Y;c[z+112>>3]=+c[s>>3]+W-+c[p>>3];c[z+120>>3]=(+c[E>>3]-+c[B>>3])*.5+Y;c[z+128>>3]=+c[z>>3];c[z+136>>3]=(+c[E>>3]-+c[B>>3])*.25+F;ti(e,z,y,a);c[Z>>3]=+c[C>>3];F=+c[I>>3];c[Z+8>>3]=(+c[r>>3]-F)*.5+F;c[Z+16>>3]=+c[A>>3];c[Z+24>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}else{switch(i|0){case 117440512:break;default:break e}r=r+1|0;z=KF(r<<4)|0;c[z>>3]=+c[l>>3];C=G+56|0;I=G+72|0;c[z+8>>3]=+c[G+24>>3]-(+c[C>>3]-+c[I>>3])*.5;c[z+16>>3]=+c[G+48>>3];F=+c[C>>3];c[z+24>>3]=F-(F-+c[I>>3])*.5;c[z+32>>3]=+c[A+32>>3];Z=A+40|0;c[z+40>>3]=(+c[C>>3]-+c[I>>3])*.5+ +c[Z>>3];c[z+48>>3]=+c[l>>3];c[z+56>>3]=(+c[C>>3]-+c[I>>3])*.5+ +c[Z>>3];F=+c[A+8>>3];c[z+72>>3]=F-(F-+c[A+56>>3])*.5;c[z+64>>3]=+c[A>>3];ti(e,z,r,a);G2(z);break}}if((i|0)<167772160)if((i|0)<150994944){switch(i|0){case 134217728:break;default:break e}y=r+4|0;z=KF(y<<4)|0;C=A+16|0;Q=+c[C>>3];B=G+48|0;Q=(+c[A>>3]-Q)*.5+Q+(+c[s>>3]-+c[B>>3])*.25;c[z>>3]=Q;I=A+40|0;F=+c[I>>3];r=A+24|0;F=(+c[r>>3]-F)*.5+F;c[z+8>>3]=F;c[z+16>>3]=Q;p=G+56|0;E=G+72|0;W=(+c[p>>3]-+c[E>>3])*.5+F;c[z+24>>3]=W;Q=(+c[s>>3]-+c[B>>3])*.5+Q;c[z+32>>3]=Q;c[z+40>>3]=W;c[z+48>>3]=Q;Q=(+c[p>>3]-+c[E>>3])*.5+W;c[z+56>>3]=Q;Y=+c[C>>3];Y=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[B>>3])*-.75;c[z+64>>3]=Y;c[z+72>>3]=Q;c[z+80>>3]=Y;c[z+88>>3]=W;Y=+c[C>>3];Y=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[B>>3])*-.25;c[z+96>>3]=Y;c[z+104>>3]=W;c[z+112>>3]=Y;c[z+120>>3]=F;ti(e,z,y,a);c[Z>>3]=+c[C>>3];F=+c[I>>3];c[Z+8>>3]=(+c[r>>3]-F)*.5+F;c[Z+16>>3]=+c[A>>3];c[Z+24>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}else{switch(i|0){case 150994944:break;default:break e}y=r+2|0;z=KF(y<<4)|0;C=A+16|0;W=+c[C>>3];B=G+48|0;W=(+c[A>>3]-W)*.5+W+(+c[s>>3]-+c[B>>3])*.75;c[z>>3]=W;I=A+40|0;F=+c[I>>3];r=A+24|0;F=(+c[r>>3]-F)*.5+F;c[z+8>>3]=F;c[z+16>>3]=W;p=G+56|0;E=G+72|0;W=(+c[p>>3]-+c[E>>3])*.25+F;c[z+24>>3]=W;Y=+c[C>>3];c[z+32>>3]=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[B>>3])*.25;Y=(+c[p>>3]-+c[E>>3])*.5+W;c[z+40>>3]=Y;Q=+c[C>>3];c[z+48>>3]=(+c[A>>3]-Q)*.5+Q+(+c[s>>3]-+c[B>>3])*-.25;c[z+56>>3]=Y;Y=+c[C>>3];Y=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[B>>3])*-.75;c[z+64>>3]=Y;c[z+72>>3]=W;c[z+80>>3]=Y;c[z+88>>3]=F;ti(e,z,y,a);c[Z>>3]=+c[C>>3];F=+c[I>>3];c[Z+8>>3]=(+c[r>>3]-F)*.5+F;c[Z+16>>3]=+c[A>>3];c[Z+24>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}else if((i|0)<184549376){switch(i|0){case 167772160:break;default:break e}y=r+1|0;z=KF(y<<4)|0;C=A+16|0;W=+c[C>>3];p=G+48|0;W=+c[s>>3]+W+(+c[A>>3]-W)*.5-+c[p>>3];c[z>>3]=W;I=A+40|0;F=+c[I>>3];r=A+24|0;E=G+56|0;B=G+72|0;F=(+c[r>>3]-F)*.5+F+(+c[E>>3]-+c[B>>3])*.25;c[z+8>>3]=F;W=W-+c[s>>3]+ +c[p>>3];c[z+16>>3]=W;c[z+24>>3]=+c[E>>3]+F-+c[B>>3];c[z+32>>3]=W;W=(+c[E>>3]-+c[B>>3])*.5+F;c[z+40>>3]=W;Y=+c[C>>3];Y=(+c[A>>3]-Y)*.25+Y;c[z+48>>3]=Y;c[z+56>>3]=W;c[z+64>>3]=Y;c[z+72>>3]=F;ti(e,z,y,a);c[Z>>3]=+c[C>>3];F=+c[I>>3];c[Z+8>>3]=(+c[r>>3]-F)*.5+F;c[Z+16>>3]=+c[A>>3];c[Z+24>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}else{switch(i|0){case 184549376:break;default:break e}C=r+4|0;z=KF(C<<4)|0;y=A+16|0;W=+c[y>>3];Y=+c[A>>3]-W;m=G+48|0;Y=Y*.125+W+(+c[s>>3]-+c[m>>3]+Y)*.5;c[z>>3]=Y;E=A+40|0;W=+c[E>>3];B=A+24|0;r=G+56|0;p=G+72|0;W=(+c[B>>3]-W)*.5+W+(+c[r>>3]-+c[p>>3])*.25;c[z+8>>3]=W;F=+c[y>>3];F=(+c[A>>3]-F)*.375+F;c[z+16>>3]=F;c[z+24>>3]=W;c[z+32>>3]=F;W=(+c[r>>3]-+c[p>>3])*.5+W;c[z+40>>3]=W;F=F-(+c[s>>3]-+c[m>>3])*.5;c[z+48>>3]=F;c[z+56>>3]=W;I=z+64|0;c[I>>3]=F;F=+c[E>>3];F=(+c[B>>3]-F)*.5+F+(+c[r>>3]-+c[p>>3])*-.25;c[z+72>>3]=F;W=Y-(+c[s>>3]-+c[m>>3])*.5;c[z+80>>3]=W;c[z+88>>3]=F;c[z+96>>3]=W;F=F-(+c[r>>3]-+c[p>>3])*.5;c[z+104>>3]=F;p=z+112|0;c[p>>3]=Y;c[z+120>>3]=F;ti(e,z,C,a);c[Z>>3]=+c[y>>3];F=+c[E>>3];y=Z+8|0;c[y>>3]=(+c[B>>3]-F)*.5+F;C=Z+16|0;c[C>>3]=+c[I>>3];I=A+8|0;r=A+56|0;a=Z+24|0;c[a>>3]=(+c[I>>3]-+c[r>>3])*.5+F;li(e,Z,2);c[Z>>3]=+c[p>>3];F=+c[E>>3];c[y>>3]=(+c[B>>3]-F)*.5+F;c[C>>3]=+c[A>>3];c[a>>3]=(+c[I>>3]-+c[r>>3])*.5+F;li(e,Z,2);G2(z);break}}if((i|0)<33554432){if((i|0)<8){switch(i|0){case 4:break;default:break e}f=$F((r*96|0)+32|0)|0;i=0;n=0;while(1){l=n|1;s=f+(n<<4)|0;if((i|0)>=(r|0))break;A=i<<2;z=G+(A<<4)|0;t[s>>2]=t[z>>2];t[s+4>>2]=t[z+4>>2];t[s+8>>2]=t[z+8>>2];t[s+12>>2]=t[z+12>>2];z=f+(l<<4)|0;Z=G+((A|1)<<4)|0;t[z>>2]=t[Z>>2];t[z+4>>2]=t[Z+4>>2];t[z+8>>2]=t[Z+8>>2];t[z+12>>2]=t[Z+12>>2];z=f+(n+2<<4)|0;t[z>>2]=t[Z>>2];t[z+4>>2]=t[Z+4>>2];t[z+8>>2]=t[Z+8>>2];t[z+12>>2]=t[Z+12>>2];z=f+(n+3<<4)|0;Z=G+((A|2)<<4)|0;t[z>>2]=t[Z>>2];t[z+4>>2]=t[Z+4>>2];t[z+8>>2]=t[Z+8>>2];t[z+12>>2]=t[Z+12>>2];z=f+(n+4<<4)|0;t[z>>2]=t[Z>>2];t[z+4>>2]=t[Z+4>>2];t[z+8>>2]=t[Z+8>>2];t[z+12>>2]=t[Z+12>>2];z=f+(n+5<<4)|0;A=G+((A|3)<<4)|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];i=i+1|0;n=n+6|0}t[s>>2]=t[f>>2];t[s+4>>2]=t[f+4>>2];t[s+8>>2]=t[f+8>>2];t[s+12>>2]=t[f+12>>2];r=f+(l<<4)|0;z=f+16|0;t[r>>2]=t[z>>2];t[r+4>>2]=t[z+4>>2];t[r+8>>2]=t[z+8>>2];t[r+12>>2]=t[z+12>>2];fi(e,z,l,0,0,a&255);G2(f);break}if((i|0)<16777216){switch(i|0){case 8:break;default:break e}ti(e,A,r,a);n=Z+16|0;i=0;while(1){if((i|0)>=(r|0))break e;z=i*3|0;a=G+(z+2<<4)|0;t[Z>>2]=t[a>>2];t[Z+4>>2]=t[a+4>>2];t[Z+8>>2]=t[a+8>>2];t[Z+12>>2]=t[a+12>>2];z=G+(z+4<<4)|0;t[n>>2]=t[z>>2];t[n+4>>2]=t[z+4>>2];t[n+8>>2]=t[z+8>>2];t[n+12>>2]=t[z+12>>2];li(e,Z,2);i=i+1|0}}switch(i|0){case 16777216:break;default:break e}n=r+1|0;f=KF(n<<4)|0;i=1;while(1){if((i|0)>=(r|0))break;z=f+(i<<4)|0;I=A+(i<<4)|0;t[z>>2]=t[I>>2];t[z+4>>2]=t[I+4>>2];t[z+8>>2]=t[I+8>>2];t[z+12>>2]=t[I+12>>2];i=i+1|0}A=r*3|0;I=G+(A+1<<4)|0;t[f>>2]=t[I>>2];t[f+4>>2]=t[I+4>>2];t[f+8>>2]=t[I+8>>2];t[f+12>>2]=t[I+12>>2];r=f+(r<<4)|0;z=G+(A+-1<<4)|0;t[r>>2]=t[z>>2];t[r+4>>2]=t[z+4>>2];t[r+8>>2]=t[z+8>>2];t[r+12>>2]=t[z+12>>2];ti(e,f,n,a);G2(f);t[Z>>2]=t[z>>2];t[Z+4>>2]=t[z+4>>2];t[Z+8>>2]=t[z+8>>2];t[Z+12>>2]=t[z+12>>2];z=Z+16|0;t[z>>2]=t[I>>2];t[z+4>>2]=t[I+4>>2];t[z+8>>2]=t[I+8>>2];t[z+12>>2]=t[I+12>>2];a=Z+32|0;c[a>>3]=+c[Z>>3]+ +c[z>>3]-+c[G+(A<<4)>>3];c[Z+40>>3]=+c[Z+8>>3]+ +c[Z+24>>3]-+c[G+(A<<4)+8>>3];li(e,z,2);t[z>>2]=t[a>>2];t[z+4>>2]=t[a+4>>2];t[z+8>>2]=t[a+8>>2];t[z+12>>2]=t[a+12>>2];li(e,Z,2);break}else{if((i|0)<50331648){switch(i|0){case 33554432:break;default:break e}n=r+2|0;f=KF(n<<4)|0;t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];l=f+16|0;t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];l=G+48|0;r=G+64|0;c[f+32>>3]=(+c[l>>3]-+c[r>>3])*.3333333333333333+ +c[s>>3];z=G+56|0;i=G+72|0;c[f+40>>3]=(+c[z>>3]-+c[i>>3])*.3333333333333333+ +c[G+40>>3];F=+c[l>>3];c[f+48>>3]=(F-+c[r>>3])*.3333333333333333+F;F=+c[z>>3];c[f+56>>3]=(F-+c[i>>3])*.3333333333333333+F;i=4;while(1){if((i|0)>=(n|0))break;z=f+(i<<4)|0;r=A+(i+-2<<4)|0;t[z>>2]=t[r>>2];t[z+4>>2]=t[r+4>>2];t[z+8>>2]=t[r+8>>2];t[z+12>>2]=t[r+12>>2];i=i+1|0}ti(e,f,n,a);G2(f);t[Z>>2]=t[l>>2];t[Z+4>>2]=t[l+4>>2];t[Z+8>>2]=t[l+8>>2];t[Z+12>>2]=t[l+12>>2];z=Z+16|0;t[z>>2]=t[s>>2];t[z+4>>2]=t[s+4>>2];t[z+8>>2]=t[s+8>>2];t[z+12>>2]=t[s+12>>2];li(e,Z,2);break}if((i|0)>=67108864){switch(i|0){case 67108864:break;default:break e}if((r|0)==4){z=KF(96)|0;t[z>>2]=t[A>>2];t[z+4>>2]=t[A+4>>2];t[z+8>>2]=t[A+8>>2];t[z+12>>2]=t[A+12>>2];r=z+16|0;t[r>>2]=t[s>>2];t[r+4>>2]=t[s+4>>2];t[r+8>>2]=t[s+8>>2];t[r+12>>2]=t[s+12>>2];r=z+32|0;I=G+64|0;t[r>>2]=t[I>>2];t[r+4>>2]=t[I+4>>2];t[r+8>>2]=t[I+8>>2];t[r+12>>2]=t[I+12>>2];r=z+48|0;A=A+32|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];A=z+64|0;r=G+128|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];A=z+80|0;C=G+160|0;t[A>>2]=t[C>>2];t[A+4>>2]=t[C+4>>2];t[A+8>>2]=t[C+8>>2];t[A+12>>2]=t[C+12>>2];ti(e,z,6,a);G2(z);c[Z>>3]=+c[G+176>>3]+ +c[l>>3]-+c[G>>3];c[Z+8>>3]=+c[G+184>>3]+ +c[G+24>>3]-+c[G+8>>3];z=Z+16|0;t[z>>2]=t[I>>2];t[z+4>>2]=t[I+4>>2];t[z+8>>2]=t[I+8>>2];t[z+12>>2]=t[I+12>>2];li(e,Z,2);t[z>>2]=t[r>>2];t[z+4>>2]=t[r+4>>2];t[z+8>>2]=t[r+8>>2];t[z+12>>2]=t[r+12>>2];li(e,Z,2);t[z>>2]=t[G>>2];t[z+4>>2]=t[G+4>>2];t[z+8>>2]=t[G+8>>2];t[z+12>>2]=t[G+12>>2];li(e,Z,2);break}else ge(105438,105449,714,105458)}switch(i|0){case 50331648:break;default:break e}n=r+3|0;f=KF(n<<4)|0;t[f>>2]=t[A>>2];t[f+4>>2]=t[A+4>>2];t[f+8>>2]=t[A+8>>2];t[f+12>>2]=t[A+12>>2];F=+c[A>>3];c[f+16>>3]=F-(F-+c[l>>3])*.25;i=G+56|0;F=(+c[i>>3]-+c[G+72>>3])*.3333333333333333+ +c[A+8>>3];c[f+24>>3]=F;Y=+c[A>>3];c[f+32>>3]=Y-(Y-+c[l>>3])*2.0;c[f+40>>3]=F;F=+c[A>>3];c[f+48>>3]=F-(F-+c[l>>3])*2.25;c[f+56>>3]=+c[i>>3];c[f+64>>3]=+c[G+48>>3];c[f+72>>3]=+c[i>>3];i=4;while(1){if((i|0)>=(n|0))break;z=f+(i<<4)|0;r=A+(i+-3<<4)|0;t[z>>2]=t[r>>2];t[z+4>>2]=t[r+4>>2];t[z+8>>2]=t[r+8>>2];t[z+12>>2]=t[r+12>>2];i=i+1|0}ti(e,f,n,a);G2(f);break}}else if((i|0)<318767104){if((i|0)<251658240){if((i|0)<218103808){switch(i|0){case 201326592:break;default:break e}z=r<<4;m=KF(z)|0;p=A+16|0;F=+c[p>>3];c[m>>3]=F;C=A+40|0;Y=+c[C>>3];I=A+24|0;y=G+48|0;E=G+56|0;B=G+72|0;Y=(+c[I>>3]-Y)*.5+Y+(+c[E>>3]-+c[B>>3])*.125;c[m+8>>3]=Y;W=(+c[s>>3]-+c[y>>3])*2.0+F;c[m+16>>3]=W;c[m+24>>3]=Y;c[m+32>>3]=W;Y=(+c[E>>3]-+c[B>>3])*.5+Y;c[m+40>>3]=Y;c[m+48>>3]=F;c[m+56>>3]=Y;ti(e,m,r,a);G2(m);z=KF(z)|0;Y=+c[s>>3]+ +c[p>>3]-+c[y>>3];c[z>>3]=Y;F=+c[C>>3];F=(+c[I>>3]-F)*.5+F+(+c[E>>3]-+c[B>>3])*-.625;c[z+8>>3]=F;W=+c[s>>3]-+c[y>>3]+Y;y=z+16|0;c[y>>3]=W;c[z+24>>3]=F;c[z+32>>3]=W;F=(+c[E>>3]-+c[B>>3])*.5+F;c[z+40>>3]=F;c[z+48>>3]=Y;c[z+56>>3]=F;ti(e,z,r,a);c[Z>>3]=+c[y>>3];F=+c[C>>3];c[Z+8>>3]=(+c[I>>3]-F)*.5+F;c[Z+16>>3]=+c[A>>3];c[Z+24>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}if((i|0)<234881024){switch(i|0){case 218103808:break;default:break e}z=r<<4;E=KF(z)|0;F=+c[A>>3];c[E>>3]=F;y=A+40|0;Y=+c[y>>3];C=A+24|0;B=G+56|0;I=G+72|0;Y=(+c[C>>3]-Y)*.5+Y+(+c[B>>3]-+c[I>>3])*.125;c[E+8>>3]=Y;c[E+16>>3]=F;W=(+c[B>>3]-+c[I>>3])*.5+Y;c[E+24>>3]=W;F=F-(+c[B>>3]-+c[I>>3])*2.0;c[E+32>>3]=F;c[E+40>>3]=W;c[E+48>>3]=F;c[E+56>>3]=Y;ti(e,E,r,a);G2(E);z=KF(z)|0;Y=+c[A>>3]-+c[s>>3]+ +c[G+48>>3];c[z>>3]=Y;F=+c[y>>3];F=(+c[C>>3]-F)*.5+F+(+c[B>>3]-+c[I>>3])*-.625;c[z+8>>3]=F;c[z+16>>3]=Y;W=(+c[B>>3]-+c[I>>3])*.5+F;c[z+24>>3]=W;Y=Y-(+c[B>>3]-+c[I>>3]);c[z+32>>3]=Y;c[z+40>>3]=W;I=z+48|0;c[I>>3]=Y;c[z+56>>3]=F;ti(e,z,r,a);c[Z>>3]=+c[A+16>>3];F=+c[y>>3];c[Z+8>>3]=(+c[C>>3]-F)*.5+F;c[Z+16>>3]=+c[I>>3];c[Z+24>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}else{switch(i|0){case 234881024:break;default:break e}z=r<<4;y=KF(z)|0;m=A+16|0;Y=+c[m>>3];p=G+48|0;Y=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[p>>3])*-1.125;c[y>>3]=Y;E=A+40|0;F=+c[E>>3];B=A+24|0;I=G+56|0;C=G+72|0;F=(+c[B>>3]-F)*.5+F+(+c[I>>3]-+c[C>>3])*.125;c[y+8>>3]=F;W=+c[s>>3]-+c[p>>3]+Y;c[y+16>>3]=W;c[y+24>>3]=F;c[y+32>>3]=W;F=(+c[I>>3]-+c[C>>3])*.5+F;c[y+40>>3]=F;c[y+48>>3]=Y;c[y+56>>3]=F;ti(e,y,r,a);G2(y);y=KF(z)|0;F=+c[m>>3];F=(+c[A>>3]-F)*.5+F+(+c[s>>3]-+c[p>>3])*-1.125;c[y>>3]=F;Y=+c[E>>3];Y=(+c[B>>3]-Y)*.5+Y+(+c[I>>3]-+c[C>>3])*-.625;c[y+8>>3]=Y;W=+c[s>>3]-+c[p>>3]+F;c[y+16>>3]=W;c[y+24>>3]=Y;c[y+32>>3]=W;Y=(+c[I>>3]-+c[C>>3])*.5+Y;c[y+40>>3]=Y;c[y+48>>3]=F;c[y+56>>3]=Y;ti(e,y,r,a);G2(y);y=KF(z)|0;Y=+c[m>>3];Y=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[p>>3])*.125;c[y>>3]=Y;F=+c[E>>3];F=(+c[B>>3]-F)*.5+F+(+c[I>>3]-+c[C>>3])*-.625;c[y+8>>3]=F;W=+c[s>>3]-+c[p>>3]+Y;c[y+16>>3]=W;c[y+24>>3]=F;c[y+32>>3]=W;F=(+c[I>>3]-+c[C>>3])*.5+F;c[y+40>>3]=F;c[y+48>>3]=Y;c[y+56>>3]=F;ti(e,y,r,a);G2(y);z=KF(z)|0;F=+c[m>>3];F=(+c[A>>3]-F)*.5+F+(+c[s>>3]-+c[p>>3])*.125;c[z>>3]=F;Y=+c[E>>3];Y=(+c[B>>3]-Y)*.5+Y+(+c[I>>3]-+c[C>>3])*.125;c[z+8>>3]=Y;W=+c[s>>3]-+c[p>>3]+F;y=z+16|0;c[y>>3]=W;c[z+24>>3]=Y;c[z+32>>3]=W;Y=(+c[I>>3]-+c[C>>3])*.5+Y;c[z+40>>3]=Y;c[z+48>>3]=F;c[z+56>>3]=Y;ti(e,z,r,a);c[Z>>3]=+c[y>>3];Y=+c[E>>3];y=Z+8|0;c[y>>3]=(+c[B>>3]-Y)*.5+Y;C=Z+16|0;c[C>>3]=+c[A>>3];I=A+8|0;r=A+56|0;a=Z+24|0;c[a>>3]=(+c[I>>3]-+c[r>>3])*.5+Y;li(e,Z,2);Y=+c[m>>3];c[Z>>3]=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[p>>3])*-1.125;F=+c[E>>3];c[y>>3]=(+c[B>>3]-F)*.5+F;c[C>>3]=Y;c[a>>3]=(+c[I>>3]-+c[r>>3])*.5+F;li(e,Z,2);G2(z);break}}if((i|0)<285212672)if((i|0)<268435456){switch(i|0){case 251658240:break;default:break e}z=r<<4;m=KF(z)|0;p=A+16|0;F=+c[p>>3];y=G+48|0;F=F-+c[s>>3]+(+c[A>>3]-F)*.5+ +c[y>>3];c[m>>3]=F;E=A+40|0;Y=+c[E>>3];B=A+24|0;I=G+56|0;C=G+72|0;Y=(+c[B>>3]-Y)*.5+Y+(+c[I>>3]-+c[C>>3])*.125;c[m+8>>3]=Y;W=(+c[s>>3]-+c[y>>3])*2.0+F;c[m+16>>3]=W;c[m+24>>3]=Y;c[m+32>>3]=W;Y=(+c[I>>3]-+c[C>>3])*.5+Y;c[m+40>>3]=Y;c[m+48>>3]=F;c[m+56>>3]=Y;ti(e,m,r,a);G2(m);z=KF(z)|0;Y=+c[p>>3];Y=Y-+c[s>>3]+(+c[A>>3]-Y)*.5+ +c[y>>3];c[z>>3]=Y;F=+c[E>>3];F=(+c[B>>3]-F)*.5+F+(+c[I>>3]-+c[C>>3])*-.625;c[z+8>>3]=F;W=(+c[s>>3]-+c[y>>3])*2.0+Y;y=z+16|0;c[y>>3]=W;c[z+24>>3]=F;c[z+32>>3]=W;F=(+c[I>>3]-+c[C>>3])*.5+F;c[z+40>>3]=F;c[z+48>>3]=Y;c[z+56>>3]=F;ti(e,z,r,a);c[Z>>3]=+c[y>>3];F=+c[E>>3];y=Z+8|0;c[y>>3]=(+c[B>>3]-F)*.5+F;C=Z+16|0;c[C>>3]=+c[A>>3];I=A+8|0;r=A+56|0;a=Z+24|0;c[a>>3]=(+c[I>>3]-+c[r>>3])*.5+F;li(e,Z,2);c[Z>>3]=+c[p>>3];F=+c[E>>3];c[y>>3]=(+c[B>>3]-F)*.5+F;c[C>>3]=+c[z>>3];c[a>>3]=(+c[I>>3]-+c[r>>3])*.5+F;li(e,Z,2);G2(z);break}else{switch(i|0){case 268435456:break;default:break e}z=KF(r<<4)|0;c[z>>3]=+c[A>>3];p=G+48|0;B=G+56|0;y=G+72|0;c[z+8>>3]=+c[G+24>>3]-(+c[B>>3]-+c[y>>3])*.5;c[z+16>>3]=+c[p>>3];F=+c[B>>3];c[z+24>>3]=F-(F-+c[y>>3])*.5;c[z+32>>3]=+c[A+32>>3];C=A+40|0;c[z+40>>3]=(+c[B>>3]-+c[y>>3])*.5+ +c[C>>3];c[z+48>>3]=+c[A>>3];c[z+56>>3]=(+c[B>>3]-+c[y>>3])*.5+ +c[C>>3];ti(e,z,r,a);E=A+16|0;F=(+c[s>>3]-+c[p>>3])*.25;Y=F+ +c[E>>3];c[Z>>3]=Y;W=+c[C>>3];m=A+24|0;Q=+c[B>>3]-+c[y>>3];W=(+c[m>>3]-W)*.5+W+Q*.125;I=Z+8|0;c[I>>3]=W;r=Z+16|0;c[r>>3]=F+Y;a=Z+24|0;c[a>>3]=W-Q*.25;li(e,Z,2);Q=(+c[s>>3]-+c[p>>3])*.25;W=Q+ +c[E>>3];c[Z>>3]=W;Y=+c[C>>3];F=+c[B>>3]-+c[y>>3];Y=(+c[m>>3]-Y)*.5+Y+F*-.125;c[I>>3]=Y;c[r>>3]=Q+W;c[a>>3]=F*.25+Y;li(e,Z,2);Y=(+c[s>>3]-+c[p>>3])*.25;c[Z>>3]=Y+ +c[E>>3];F=(+c[B>>3]-+c[y>>3])*.75+ +c[C>>3];c[I>>3]=F;c[r>>3]=+c[A>>3]-Y;c[a>>3]=F;li(e,Z,2);G2(z);break}else if((i|0)<301989888){switch(i|0){case 285212672:break;default:break e}y=KF(r<<4)|0;p=A+16|0;Y=+c[p>>3];C=G+48|0;Y=(+c[s>>3]-+c[C>>3]+(+c[A>>3]-Y))*.5+Y;c[y>>3]=Y;E=A+40|0;Q=+c[E>>3];B=A+24|0;Q=(+c[s>>3]-+c[C>>3]+(+c[B>>3]-Q))*.5+Q;c[y+8>>3]=Q;c[y+16>>3]=Y;Y=+c[E>>3];b=+c[s>>3]-+c[C>>3];Y=(+c[B>>3]-Y-b)*.5+Y;c[y+24>>3]=Y;F=+c[p>>3];F=(+c[A>>3]-F-b)*.5+F;c[y+32>>3]=F;c[y+40>>3]=Y;c[y+48>>3]=F;c[y+56>>3]=Q;ti(e,y,r,a);G2(y);Q=+c[p>>3];Q=(+c[A>>3]-Q)*.5+Q;F=+c[s>>3]-+c[C>>3];Y=F*.75;b=Q+Y;c[Z>>3]=b;W=+c[E>>3];W=(+c[B>>3]-W)*.5+W;Y=W+Y;y=Z+8|0;c[y>>3]=Y;I=Z+16|0;c[I>>3]=b;F=F*-.75;W=W+F;z=Z+24|0;c[z>>3]=W;F=Q+F;c[Z+32>>3]=F;c[Z+40>>3]=W;c[Z+48>>3]=F;c[Z+56>>3]=Y;r=Z+64|0;t[r>>2]=t[Z>>2];t[r+4>>2]=t[Z+4>>2];t[r+8>>2]=t[Z+8>>2];t[r+12>>2]=t[Z+12>>2];li(e,Z,5);Y=+c[p>>3];F=+c[A>>3];c[Z>>3]=(F-Y)*.5+Y+(+c[s>>3]-+c[C>>3])*.75;Y=+c[E>>3];c[y>>3]=(+c[B>>3]-Y)*.5+Y;c[I>>3]=F;r=A+8|0;a=A+56|0;c[z>>3]=(+c[r>>3]-+c[a>>3])*.5+Y;li(e,Z,2);Y=+c[p>>3];c[Z>>3]=Y;F=+c[E>>3];c[y>>3]=(+c[B>>3]-F)*.5+F;c[I>>3]=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[C>>3])*-.75;c[z>>3]=(+c[r>>3]-+c[a>>3])*.5+F;li(e,Z,2);break}else{switch(i|0){case 301989888:break;default:break e}I=r+12|0;z=KF(I<<4)|0;B=A+16|0;o=+c[B>>3];v=G+48|0;o=(+c[A>>3]-o)*.5+o+(+c[s>>3]-+c[v>>3])*.25;c[z>>3]=o;y=A+40|0;Q=+c[y>>3];C=A+24|0;p=G+56|0;E=G+72|0;Q=(+c[p>>3]-+c[E>>3]+(+c[C>>3]-Q))*.5+Q;m=z+8|0;c[m>>3]=Q;c[z+16>>3]=o;Q=(+c[p>>3]-+c[E>>3])*.125+Q;g=z+24|0;c[g>>3]=Q;W=o-(+c[s>>3]-+c[v>>3])*.125;r=z+32|0;c[r>>3]=W;b=(+c[p>>3]-+c[E>>3])*.125+Q;c[z+40>>3]=b;c[z+48>>3]=o;Y=(+c[p>>3]-+c[E>>3])*.125+b;c[z+56>>3]=Y;c[z+64>>3]=o;o=(+c[p>>3]-+c[E>>3])*.125+Y;c[z+72>>3]=o;c[z+80>>3]=W;c[z+88>>3]=o;W=+c[B>>3];W=(+c[A>>3]-W)*.5+W;c[z+96>>3]=W;c[z+104>>3]=Y;F=W-(+c[s>>3]-+c[v>>3])*.125;c[z+112>>3]=F;c[z+120>>3]=o;F=F-(+c[s>>3]-+c[v>>3])*.125;c[z+128>>3]=F;c[z+136>>3]=o;c[z+144>>3]=F;c[z+152>>3]=Y;Y=(+c[s>>3]-+c[v>>3])*.125+F;c[z+160>>3]=Y;c[z+168>>3]=b;c[z+176>>3]=F;c[z+184>>3]=Q;c[z+192>>3]=F;F=+c[m>>3];c[z+200>>3]=F;c[z+208>>3]=Y;c[z+216>>3]=F;m=z+224|0;c[m>>3]=W;c[z+232>>3]=+c[g>>3];c[z+240>>3]=+c[r>>3];c[z+248>>3]=F;ti(e,z,I,a);F=+c[m>>3];c[Z>>3]=F;W=+c[y>>3];W=(+c[C>>3]-W)*.5+W;I=Z+8|0;c[I>>3]=W;r=Z+16|0;c[r>>3]=F;a=Z+24|0;c[a>>3]=(+c[p>>3]-+c[E>>3])*.125+W;li(e,Z,2);W=+c[m>>3];c[Z>>3]=W;F=+c[y>>3];Y=+c[p>>3]-+c[E>>3];F=(+c[C>>3]-F)*.5+F+Y*.25;c[I>>3]=F;c[r>>3]=W;c[a>>3]=Y*.125+F;li(e,Z,2);c[Z>>3]=+c[B>>3];F=+c[y>>3];c[I>>3]=(+c[C>>3]-F)*.5+F;c[r>>3]=+c[A>>3];c[a>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}}else{if((i|0)<369098752){if((i|0)<335544320){switch(i|0){case 318767104:break;default:break e}I=r+4|0;z=KF(I<<4)|0;B=A+16|0;W=+c[B>>3];r=G+48|0;W=(+c[A>>3]-W)*.5+W+(+c[s>>3]-+c[r>>3])*.125;c[z>>3]=W;y=A+40|0;F=+c[y>>3];C=A+24|0;p=G+56|0;E=G+72|0;F=(+c[p>>3]-+c[E>>3]+(+c[C>>3]-F))*.5+F;c[z+8>>3]=F;b=(+c[s>>3]-+c[r>>3])*.125+W;c[z+16>>3]=b;Y=(+c[p>>3]-+c[E>>3])*.125+F;c[z+24>>3]=Y;c[z+32>>3]=b;b=(+c[p>>3]-+c[E>>3])*.25+Y;c[z+40>>3]=b;c[z+48>>3]=W;Q=(+c[p>>3]-+c[E>>3])*.125+b;c[z+56>>3]=Q;W=W-(+c[s>>3]-+c[r>>3])*.25;c[z+64>>3]=W;c[z+72>>3]=Q;Q=W-(+c[s>>3]-+c[r>>3])*.125;c[z+80>>3]=Q;c[z+88>>3]=b;c[z+96>>3]=Q;c[z+104>>3]=Y;c[z+112>>3]=W;c[z+120>>3]=F;ti(e,z,I,a);F=+c[B>>3];F=(+c[A>>3]-F)*.5+F;c[Z>>3]=F;W=+c[y>>3];W=(+c[C>>3]-W)*.5+W;I=Z+8|0;c[I>>3]=W;r=Z+16|0;c[r>>3]=F;a=Z+24|0;c[a>>3]=(+c[p>>3]-+c[E>>3])*.125+W;li(e,Z,2);W=+c[B>>3];W=(+c[A>>3]-W)*.5+W;c[Z>>3]=W;F=+c[y>>3];Y=+c[p>>3]-+c[E>>3];F=(+c[C>>3]-F)*.5+F+Y*.25;c[I>>3]=F;c[r>>3]=W;c[a>>3]=Y*.125+F;li(e,Z,2);c[Z>>3]=+c[B>>3];F=+c[y>>3];c[I>>3]=(+c[C>>3]-F)*.5+F;c[r>>3]=+c[A>>3];c[a>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}if((i|0)<352321536){switch(i|0){case 335544320:break;default:break e}B=r+12|0;z=KF(B<<4)|0;y=A+16|0;o=+c[y>>3];m=G+48|0;o=(+c[A>>3]-o)*.5+o+(+c[s>>3]-+c[m>>3])*.25;c[z>>3]=o;C=A+40|0;Q=+c[C>>3];I=A+24|0;v=G+56|0;g=G+72|0;Q=(+c[v>>3]-+c[g>>3]+(+c[I>>3]-Q))*.5+Q;r=z+8|0;c[r>>3]=Q;c[z+16>>3]=o;Q=(+c[v>>3]-+c[g>>3])*.125+Q;p=z+24|0;c[p>>3]=Q;Y=o-(+c[s>>3]-+c[m>>3])*.125;E=z+32|0;c[E>>3]=Y;b=(+c[v>>3]-+c[g>>3])*.125+Q;c[z+40>>3]=b;c[z+48>>3]=o;W=(+c[v>>3]-+c[g>>3])*.125+b;c[z+56>>3]=W;c[z+64>>3]=o;o=(+c[v>>3]-+c[g>>3])*.125+W;c[z+72>>3]=o;c[z+80>>3]=Y;c[z+88>>3]=o;Y=+c[y>>3];Y=(+c[A>>3]-Y)*.5+Y;c[z+96>>3]=Y;c[z+104>>3]=W;F=Y-(+c[s>>3]-+c[m>>3])*.125;c[z+112>>3]=F;c[z+120>>3]=o;F=F-(+c[s>>3]-+c[m>>3])*.125;c[z+128>>3]=F;c[z+136>>3]=o;c[z+144>>3]=F;c[z+152>>3]=W;W=(+c[s>>3]-+c[m>>3])*.125+F;c[z+160>>3]=W;c[z+168>>3]=b;c[z+176>>3]=F;c[z+184>>3]=Q;c[z+192>>3]=F;F=+c[r>>3];c[z+200>>3]=F;c[z+208>>3]=W;c[z+216>>3]=F;r=z+224|0;c[r>>3]=Y;c[z+232>>3]=+c[p>>3];c[z+240>>3]=+c[E>>3];c[z+248>>3]=F;ti(e,z,B,a);t[Z>>2]=t[r>>2];t[Z+4>>2]=t[r+4>>2];t[Z+8>>2]=t[r+8>>2];t[Z+12>>2]=t[r+12>>2];r=Z+16|0;c[r>>3]=+c[Z>>3];F=+c[C>>3];a=Z+24|0;c[a>>3]=(+c[I>>3]-F)*.5+F;li(e,Z,2);c[Z>>3]=+c[y>>3];F=+c[C>>3];c[Z+8>>3]=(+c[I>>3]-F)*.5+F;c[r>>3]=+c[A>>3];c[a>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}else{switch(i|0){case 352321536:break;default:break e}I=r+4|0;z=KF(I<<4)|0;B=A+16|0;Y=+c[B>>3];E=G+48|0;Y=(+c[A>>3]-Y)*.5+Y+(+c[s>>3]-+c[E>>3])*.125;c[z>>3]=Y;y=A+40|0;F=+c[y>>3];C=A+24|0;m=G+56|0;p=G+72|0;F=(+c[m>>3]-+c[p>>3]+(+c[C>>3]-F))*.5+F;r=z+8|0;c[r>>3]=F;b=(+c[s>>3]-+c[E>>3])*.125+Y;c[z+16>>3]=b;W=(+c[m>>3]-+c[p>>3])*.125+F;c[z+24>>3]=W;c[z+32>>3]=b;b=(+c[m>>3]-+c[p>>3])*.25+W;c[z+40>>3]=b;c[z+48>>3]=Y;Q=(+c[m>>3]-+c[p>>3])*.125+b;c[z+56>>3]=Q;Y=Y-(+c[s>>3]-+c[E>>3])*.25;c[z+64>>3]=Y;c[z+72>>3]=Q;Q=Y-(+c[s>>3]-+c[E>>3])*.125;c[z+80>>3]=Q;c[z+88>>3]=b;c[z+96>>3]=Q;c[z+104>>3]=W;c[z+112>>3]=Y;c[z+120>>3]=F;ti(e,z,I,a);F=+c[B>>3];F=(+c[A>>3]-F)*.5+F;c[Z>>3]=F;I=Z+8|0;c[I>>3]=+c[r>>3];r=Z+16|0;c[r>>3]=F;F=+c[y>>3];a=Z+24|0;c[a>>3]=(+c[C>>3]-F)*.5+F;li(e,Z,2);c[Z>>3]=+c[B>>3];F=+c[y>>3];c[I>>3]=(+c[C>>3]-F)*.5+F;c[r>>3]=+c[A>>3];c[a>>3]=(+c[A+8>>3]-+c[A+56>>3])*.5+F;li(e,Z,2);G2(z);break}}if((i|0)<402653184)if((i|0)<385875968){switch(i|0){case 369098752:break;default:break e}r=r+5|0;z=KF(r<<4)|0;Z=G+48|0;c[z>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;y=G+56|0;I=G+72|0;c[z+8>>3]=+c[G+24>>3]-(+c[y>>3]-+c[I>>3])*.5;c[z+16>>3]=+c[Z>>3];F=+c[y>>3];c[z+24>>3]=F-(F-+c[I>>3])*.5;c[z+32>>3]=+c[A+32>>3];C=A+40|0;c[z+40>>3]=+c[C>>3];F=+c[s>>3];c[z+48>>3]=(F-+c[Z>>3])*.5+F;c[z+56>>3]=+c[C>>3];F=+c[s>>3];c[z+64>>3]=(F-+c[Z>>3])*.5+F;c[z+72>>3]=(+c[y>>3]-+c[I>>3])*.5+ +c[C>>3];c[z+80>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;c[z+88>>3]=(+c[y>>3]-+c[I>>3])*.5+ +c[C>>3];c[z+96>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;C=A+56|0;c[z+104>>3]=+c[C>>3];I=A+8|0;F=+c[I>>3];c[z+120>>3]=F-(F-+c[C>>3])*.5;c[z+112>>3]=+c[A>>3];c[z+136>>3]=+c[I>>3];c[z+128>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;ti(e,z,r,a);G2(z);break}else{switch(i|0){case 385875968:break;default:break e}r=r+3|0;z=KF(r<<4)|0;Z=G+48|0;c[z>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;y=G+56|0;I=G+72|0;c[z+8>>3]=+c[G+24>>3]-(+c[y>>3]-+c[I>>3])*.5;c[z+16>>3]=+c[Z>>3];F=+c[y>>3];c[z+24>>3]=F-(F-+c[I>>3])*.5;c[z+32>>3]=+c[A+32>>3];C=A+40|0;c[z+40>>3]=(+c[y>>3]-+c[I>>3])*.5+ +c[C>>3];c[z+48>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;c[z+56>>3]=(+c[y>>3]-+c[I>>3])*.5+ +c[C>>3];c[z+64>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;C=A+56|0;c[z+72>>3]=+c[C>>3];I=A+8|0;F=+c[I>>3];c[z+88>>3]=F-(F-+c[C>>3])*.5;c[z+80>>3]=+c[A>>3];c[z+104>>3]=+c[I>>3];c[z+96>>3]=+c[l>>3]-(+c[s>>3]-+c[Z>>3])*.5;ti(e,z,r,a);G2(z);break}else if((i|0)<419430400){switch(i|0){case 402653184:break;default:break e}r=r+3|0;z=KF(r<<4)|0;c[z>>3]=+c[A>>3];y=A+8|0;C=G+48|0;I=G+56|0;Z=G+72|0;c[z+8>>3]=+c[y>>3]-(+c[I>>3]-+c[Z>>3])*.5;F=+c[s>>3];c[z+16>>3]=(F-+c[C>>3])*.5+F;c[z+24>>3]=+c[y>>3]-(+c[I>>3]-+c[Z>>3])*.5;F=+c[s>>3];c[z+32>>3]=(F-+c[C>>3])*.5+F;c[z+40>>3]=+c[G+40>>3];c[z+48>>3]=+c[A+16>>3];F=+c[A+24>>3];y=A+40|0;c[z+56>>3]=F-(F-+c[y>>3])*.5;F=+c[s>>3];c[z+64>>3]=(F-+c[C>>3])*.5+F;c[z+72>>3]=+c[y>>3];c[z+88>>3]=(+c[I>>3]-+c[Z>>3])*.5+ +c[y>>3];F=+c[s>>3];c[z+80>>3]=(F-+c[C>>3])*.5+F;c[z+104>>3]=(+c[I>>3]-+c[Z>>3])*.5+ +c[A+56>>3];c[z+96>>3]=+c[A>>3];ti(e,z,r,a);G2(z);break}else{switch(i|0){case 419430400:break;default:break e}r=r+5|0;z=KF(r<<4)|0;c[z>>3]=+c[A>>3];Z=A+8|0;I=G+48|0;y=G+56|0;C=G+72|0;c[z+8>>3]=+c[Z>>3]-(+c[y>>3]-+c[C>>3])*.5;F=+c[s>>3];c[z+16>>3]=(F-+c[I>>3])*.5+F;c[z+24>>3]=+c[Z>>3]-(+c[y>>3]-+c[C>>3])*.5;F=+c[s>>3];c[z+32>>3]=(F-+c[I>>3])*.5+F;c[z+40>>3]=+c[G+40>>3];c[z+48>>3]=+c[A+16>>3];F=+c[A+24>>3];Z=A+40|0;c[z+56>>3]=F-(F-+c[Z>>3])*.5;F=+c[s>>3];c[z+64>>3]=(F-+c[I>>3])*.5+F;c[z+72>>3]=+c[Z>>3];c[z+88>>3]=(+c[y>>3]-+c[C>>3])*.5+ +c[Z>>3];F=+c[s>>3];c[z+80>>3]=(F-+c[I>>3])*.5+F;Z=A+56|0;c[z+104>>3]=(+c[y>>3]-+c[C>>3])*.5+ +c[Z>>3];c[z+96>>3]=+c[l>>3]-(+c[s>>3]-+c[I>>3])*.5;c[z+112>>3]=+c[l>>3]-(+c[s>>3]-+c[I>>3])*.5;c[z+120>>3]=+c[Z>>3];c[z+128>>3]=+c[A+48>>3];c[z+136>>3]=+c[Z>>3];ti(e,z,r,a);G2(z);break}}}while(0);G2(G)}h=L;return}function sN(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0;a=h;h=h+112|0;n=a;s=+c[A+8>>3]*2.0;t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];c[n+16>>3]=+c[A+16>>3];c[n+24>>3]=s-+c[A+24>>3];c[n+32>>3]=+c[A+32>>3];c[n+40>>3]=s-+c[A+40>>3];c[n+48>>3]=+c[A+48>>3];c[n+56>>3]=s-+c[A+56>>3];c[n+64>>3]=+c[A+64>>3];c[n+72>>3]=s-+c[A+72>>3];c[n+80>>3]=+c[A+80>>3];c[n+88>>3]=s-+c[A+88>>3];f=n+96|0;l=A+96|0;t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];t[f+8>>2]=t[l+8>>2];t[f+12>>2]=t[l+12>>2];fi(e,A,r,0,0,i&255);fi(e,n,7,0,0,0);h=a;return}function cN(e,A,r,i){e=e|0;A=+A;r=r|0;i=i|0;var a=0.0,t=0.0;t=+c[r>>3];a=+c[r+8>>3];a=(+c[i+8>>3]-a)*A+a;c[e>>3]=(+c[i>>3]-t)*A+t;c[e+8>>3]=a;return}function oN(e){e=e|0;e=t[(t[e+16>>2]|0)+8>>2]|0;if(e){e=t[t[e+4>>2]>>2]|0;if((e|0)!=91)if((e|0)==94)e=2;else return((e|0)==93?3:(e|0)==96?4:0)|0;else e=1}else e=0;return e|0}function uN(e){e=e|0;var A=0,r=0,a=0.0,n=0,f=0,l=0,s=0.0,o=0.0,u=0.0,b=0.0,w=0,k=0.0,d=0.0,v=0.0,g=0.0,m=0.0,p=0.0,E=0.0,B=0.0,y=0.0,C=0.0,I=0,Z=0,G=0,L=0,z=0,F=0,M=0,V=0,N=0,x=0.0,J=0.0,H=0,X=0,S=0.0,j=0.0,U=0.0,T=0,O=0,_=0,q=0,K=0,$=0,ee=0,Ae=0.0;ee=h;h=h+144|0;F=ee+112|0;N=ee+104|0;G=ee+96|0;L=ee+88|0;f=ee+80|0;_=ee+64|0;K=ee+48|0;H=ee+40|0;X=ee+32|0;l=ee+24|0;w=ee+16|0;Z=ee+136|0;I=ee+128|0;M=ee;$=KF(48)|0;q=e+16|0;T=t[(t[(t[q>>2]|0)+8>>2]|0)+8>>2]|0;n=(T|0)==1616;O=t[T>>2]|0;A=t[T+4>>2]|0;r=t[T+8>>2]|0;o=+c[T+16>>3];u=+c[T+32>>3];b=+c[T+24>>3];O=O|(mx(Hw(e,105511)|0)|0)&255;do{if(!n){if(!O){T=t[q>>2]|0;s=+c[T+32>>3]*72.0;a=+c[T+40>>3]*72.0;a=+(~~(a+(a>=0.0?.5:-.5))|0);s=+(~~(s+(s>=0.0?.5:-.5))|0);break}s=+EN(e);if(s>0.0)a=s;else{T=t[q>>2]|0;a=+c[T+32>>3];s=+c[T+40>>3];s=(a=0.0?.5:-.5))|0);a=s}}else{a=0.0;s=0.0}}while(0);T=hx(e,t[47160]|0,A,0)|0;U=+wx(e,t[47162]|0,0.0,-360.0)+o;if(!r){j=+wx(e,t[47163]|0,0.0,-100.0);z=hx(e,t[47159]|0,4,0)|0;S=+wx(e,t[47164]|0,0.0,-100.0)}else{z=r;j=u;S=b}A=t[(t[q>>2]|0)+104>>2]|0;r=A+24|0;t[_>>2]=t[r>>2];t[_+4>>2]=t[r+4>>2];t[_+8>>2]=t[r+8>>2];t[_+12>>2]=t[r+12>>2];k=+c[_>>3];if(k>0.0){if(!n)V=11}else if(!(n|!(+c[_+8>>3]>0.0)))V=11;if((V|0)==11){A=Hw(e,105496)|0;do{if(A){c[w>>3]=0.0;c[l>>3]=0.0;t[f>>2]=l;t[f+4>>2]=w;A=V3(A,105503,f)|0;o=+c[l>>3];if(o<0.0){c[l>>3]=0.0;o=0.0}u=+c[w>>3];if(u<0.0){c[w>>3]=0.0;b=0.0}else b=u;if((A|0)<=0){u=k+16.0;c[_>>3]=u;o=8.0;break}o=o*72.0;o=+(~~(o+(o>=0.0?.5:-.5))<<1|0);u=k+o;c[_>>3]=u;if((A|0)!=1){o=b*72.0;o=+(~~(o+(o>=0.0?.5:-.5))<<1|0)}}else{u=k+16.0;c[_>>3]=u;o=8.0}}while(0);A=_+8|0;c[A>>3]=+c[A>>3]+o;A=t[(t[q>>2]|0)+104>>2]|0;k=u}v=+c[A+24>>3];o=+c[t[(t[(Bd(e)|0)+16>>2]|0)+8>>2]>>3];if(o>0.0){x=o*72.0;x=+(~~(x+(x>=0.0?.5:-.5))|0);J=+BN(k,x);c[_>>3]=J;w=_+8|0;c[w>>3]=+BN(+c[w>>3],x)}else J=k;A=t[(t[q>>2]|0)+8>>2]|0;do{if(!(i[A+12>>0]|0)){r=Hw(e,109025)|0;if((r|0)!=0?(i[r>>0]|0)!=0:0){Pm(I,Bd(e)|0,r);A=t[I>>2]|0;n=t[I+4>>2]|0;if((n&A|0)==-1){A=Mk(e)|0;t[G>>2]=r;t[G+4>>2]=A;nw(0,105587,G)|0;r=0;A=0;break}else{i[(t[(Bd(e)|0)+16>>2]|0)+114>>0]=1;r=A+2|0;A=n+2|0;break}}else{r=0;A=0}}else{A=t[A>>2]|0;if((i[A>>0]|0)==99?(e1(A,105519)|0)==0:0){r=Hw(e,105526)|0;Pm(Z,Bd(e)|0,r);A=t[Z>>2]|0;n=t[Z+4>>2]|0;if((n&A|0)==-1){A=Mk(e)|0;t[L>>2]=r|0?r:105536;t[L+4>>2]=A;nw(0,105542,L)|0;r=0;A=0;break}else{i[(t[(Bd(e)|0)+16>>2]|0)+114>>0]=1;r=A+2|0;A=n+2|0;break}}else{r=0;A=0}}}while(0);x=+(r|0);c[K>>3]=J>x?J:x;x=+c[_+8>>3];d=+(A|0);A=K+8|0;c[A>>3]=x>d?x:d;r=(z|0)<3&(S!=0.0|j!=0.0)?120:z;n=Hw(e,105628)|0;if(!n)f=99;else{f=i[n>>0]|0;f=f<<24>>24==116?116:f<<24>>24==98?98:99}n=t[q>>2]|0;i[(t[n+104>>2]|0)+80>>0]=f;if((r|0)==4?(S==0.0?((~~(U+(U>=0.0?.5:-.5))|0)%90|0|0)==0:0)&j==0.0:0)w=1;else V=39;do{if((V|0)==39){n=t[(t[(t[n+8>>2]|0)+8>>2]|0)+44>>2]|0;if(n|0){w=t[n>>2]|0;t[F>>2]=t[K>>2];t[F+4>>2]=t[K+4>>2];t[F+8>>2]=t[K+8>>2];t[F+12>>2]=t[K+12>>2];M5[w&63](M,F);t[K>>2]=t[M>>2];t[K+4>>2]=t[M+4>>2];t[K+8>>2]=t[M+8>>2];t[K+12>>2]=t[M+12>>2];w=0;break}o=+c[A>>3];u=o*1.4142135623730951;if(a>u&f<<24>>24==99){b=o/a;b=+D(+(1.0/(1.0-b*b)));b=+c[K>>3]*b;c[K>>3]=b}else{b=+c[K>>3]*1.4142135623730951;c[K>>3]=b;c[A>>3]=u;o=u}if((r|0)>2){C=+W(+(3.141592653589793/+(r|0)));c[K>>3]=b/C;c[A>>3]=o/C;w=0}else w=0}}while(0);o=+c[A>>3];n=dx(e,t[47165]|0,137308)|0;if((i[n>>0]|0)==115?(e1(n,108230)|0)==0:0){c[K>>3]=s;c[A>>3]=a;N=$+40|0;t[N>>2]=t[N>>2]|2048}else{if(!((mx(n)|0)<<24>>24)){C=+c[K>>3];s=s>C?s:C;c[K>>3]=s;C=+c[A>>3];a=a>C?a:C}else{V=t[(t[q>>2]|0)+104>>2]|0;if(!(!(s<+c[V+24>>3])?!(a<+c[V+32>>3]):0)){M=Mk(e)|0;V=Mk(Bd(e)|0)|0;t[N>>2]=M;t[N+4>>2]=V;nw(0,105637,N)|0}c[K>>3]=s}c[A>>3]=a}if(!O){C=a;y=s}else{y=s>a?s:a;c[A>>3]=y;c[K>>3]=y;C=y}do{if(!((mx(dx(e,t[47156]|0,137308)|0)|0)<<24>>24)){if(w){a=+c[(J>+c[K>>3]?_:K)>>3];break}a=+c[A>>3];if(x>3]*+D(+(1.0-x*x/(a*a)));a=J>a?J:a}else a=J}else a=J}while(0);n=t[(t[q>>2]|0)+104>>2]|0;c[n+40>>3]=v-k+a;I=$+40|0;if(!(t[I>>2]&2048)){B=+c[A>>3]-o;c[n+48>>3]=(x1;n=l?T:1;e:do{if((r|0)<3){n=KF(n<<5)|0;s=+c[K>>3]*.5;a=+c[A>>3]*.5;c[n>>3]=-s;c[n+8>>3]=-a;c[n+16>>3]=s;c[n+24>>3]=a;if(l){r=1;f=2;while(1){if((r|0)==(T|0))break;y=s+4.0;C=a+4.0;c[n+(f<<4)>>3]=-y;c[n+(f<<4)+8>>3]=-C;X=f|1;c[n+(X<<4)>>3]=y;c[n+(X<<4)+8>>3]=C;r=r+1|0;f=f+2|0;s=y;a=C}c[K>>3]=s*2.0;c[A>>3]=a*2.0;r=2}else r=2}else{n=KF(P(n<<4,r)|0)|0;f=t[(t[(t[(t[q>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;A:do{if(!f){k=6.283185307179586/+(r|0);g=k*.5;d=+Y(+g);v=+g1(+Q(+j)+ +Q(+S),1.0);g=S*1.4142135623730951/+W(+g);m=j*.5;p1((k+-3.141592653589793)*.5,H,X);p=U*.017453292519943295;s=0.0;a=0.0;o=0.0;f=0;u=+c[X>>3]*.5;b=+c[H>>3]*.5;while(1){if((f|0)>=(r|0))break A;o=o+k;p1(o,H,X);u=+c[X>>3]*d+u;b=+c[H>>3]*d+b;B=(b*g+v)*u+m*b;p1(+R(+b,+B)+p,H,X);B=+g1(B,b);E=+c[X>>3]*B*+c[K>>3];B=+c[H>>3]*B*+c[A>>3];Ae=+Q(+E);a=Ae>a?Ae:a;Ae=+Q(+B);s=Ae>s?Ae:s;c[n+(f<<4)>>3]=E;c[n+(f<<4)+8>>3]=B;if(w)break;else f=f+1|0}Ae=-E;c[n+16>>3]=Ae;c[n+24>>3]=B;c[n+32>>3]=Ae;Ae=-B;c[n+40>>3]=Ae;c[n+48>>3]=E;c[n+56>>3]=Ae}else{M5[t[f+4>>2]&63](n,K);s=+c[A>>3]*.5;a=+c[K>>3]*.5}}while(0);a=a*2.0;s=s*2.0;y=y>a?y:a;c[K>>3]=y;Ae=C>s?C:s;c[A>>3]=Ae;a=y/a;s=Ae/s;f=0;while(1){if((f|0)>=(r|0))break;N=n+(f<<4)|0;e=n+(f<<4)+8|0;Ae=+c[e>>3]*s;c[N>>3]=+c[N>>3]*a;c[e>>3]=Ae;f=f+1|0}if(l){l=r+-1|0;s=+c[n>>3];o=+c[n+8>>3];a=+R(+(o-+c[n+(l<<4)+8>>3]),+(s-+c[n+(l<<4)>>3]));l=0;A:while(1){if((l|0)>=(r|0))break;w=l+1|0;f=(w|0)%(r|0)|0;u=+c[n+(f<<4)>>3];b=+c[n+(f<<4)+8>>3];k=+R(+(b-o),+(u-s));C=(a+3.141592653589793-k)*.5;Ae=4.0/+Y(+C);p1(a-C,H,X);c[H>>3]=+c[H>>3]*Ae;c[X>>3]=+c[X>>3]*Ae;f=1;a=o;while(1){if((f|0)==(T|0)){a=k;l=w;s=u;o=b;continue A}C=+c[X>>3]+s;Ae=+c[H>>3]+a;e=(P(f,r)|0)+l|0;c[n+(e<<4)>>3]=C;c[n+(e<<4)+8>>3]=Ae;f=f+1|0;s=C;a=Ae}}l=P(r,T+-1|0)|0;f=0;while(1){if((f|0)>=(r|0))break e;X=f+l|0;C=+c[n+(X<<4)+8>>3];y=+Q(+ +c[n+(X<<4)>>3])*2.0;Ae=+c[K>>3];c[K>>3]=y>Ae?y:Ae;C=+Q(+C)*2.0;Ae=+c[A>>3];c[A>>3]=C>Ae?C:Ae;f=f+1|0}}}}while(0);t[$>>2]=O;t[$+4>>2]=T;t[$+8>>2]=r;c[$+16>>3]=U;c[$+32>>3]=j;c[$+24>>3]=S;t[$+44>>2]=n;a=+c[K>>3];if(!(t[I>>2]&2048)){r=t[q>>2]|0;c[r+32>>3]=a*.013888888888888888}else{r=t[q>>2]|0;c[r+32>>3]=+c[(J>a?_:K)>>3]*.013888888888888888;A=(x>+c[A>>3]?_:K)+8|0}c[r+40>>3]=+c[A>>3]*.013888888888888888;t[r+12>>2]=$;h=ee;return}function bN(e){e=e|0;var A=0,r=0,i=0,a=0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0;b=h;h=h+64|0;l=b+40|0;i=b+32|0;s=b+16|0;u=b;r=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]|0)>>>2&1^1;o=e+16|0;a=t[t[(t[o>>2]|0)+104>>2]>>2]|0;t[47282]=a;a=U2(a)|0;a=KF(((a|0)>1?a:1)+1|0)|0;A=wN(e,r,1,a)|0;if(!A){t[i>>2]=t[t[(t[o>>2]|0)+104>>2]>>2];nw(1,105472,i)|0;t[47282]=105493;A=wN(e,r,1,a)|0}G2(a);kN(l,e,A);r=t[o>>2]|0;f=+c[r+32>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);c[u>>3]=f;n=+c[r+40>>3]*72.0;n=+(~~(n+(n>=0.0?.5:-.5))|0);r=u+8|0;c[r>>3]=n;if(!((mx(dx(e,t[47165]|0,137308)|0)|0)<<24>>24)){f=+c[(+c[A>>3]>f?A:u)>>3];c[u>>3]=f;i=A+8|0;n=+c[(+c[i>>3]>n?A:u)+8>>3];c[r>>3]=n;r=i;i=A}else{r=A+8|0;i=A}e=(mx(dx(e,t[47156]|0,137308)|0)|0)&255;t[l>>2]=t[u>>2];t[l+4>>2]=t[u+4>>2];t[l+8>>2]=t[u+8>>2];t[l+12>>2]=t[u+12>>2];dN(A,l,e);vN(s,f*-.5,n*.5);t[l>>2]=t[s>>2];t[l+4>>2]=t[s+4>>2];t[l+8>>2]=t[s+8>>2];t[l+12>>2]=t[s+12>>2];gN(A,l,15);u=t[o>>2]|0;c[u+32>>3]=+c[i>>3]*.013888888888888888;c[u+40>>3]=(+c[r>>3]+1.0)*.013888888888888888;t[u+12>>2]=A;h=b;return}function hN(e){e=e|0;var A=0.0,r=0,i=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0.0,u=0;l=KF(48)|0;s=e+16|0;n=t[(t[(t[(t[s>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;a=+wx(e,t[47146]|0,1797693134862315708145274.0e284,0.0);A=+wx(e,t[47145]|0,1797693134862315708145274.0e284,0.0);a=a0.0?a>.0003?a:.0003:a;f=t[s>>2]|0;c[f+40>>3]=a;c[f+32>>3]=a;A=a*72.0;n=hx(e,t[47160]|0,n,0)|0;f=KF((n|0)<1?32:n<<5)|0;a=a*36.0;i=-a;c[f>>3]=i;c[f+8>>3]=i;c[f+16>>3]=a;c[f+24>>3]=a;if((n|0)>1){e=1;r=2;i=a;A=a;while(1){if((e|0)==(n|0))break;o=i+4.0;a=A+4.0;c[f+(r<<4)>>3]=-o;c[f+(r<<4)+8>>3]=-a;u=r|1;c[f+(u<<4)>>3]=o;c[f+(u<<4)+8>>3]=a;e=e+1|0;r=r+2|0;i=o;A=a}A=i*2.0}t[l>>2]=1;t[l+4>>2]=n;t[l+8>>2]=2;u=l+16|0;t[u>>2]=0;t[u+4>>2]=0;t[u+8>>2]=0;t[u+12>>2]=0;t[u+16>>2]=0;t[u+20>>2]=0;t[l+44>>2]=f;o=A*.013888888888888888;u=t[s>>2]|0;c[u+32>>3]=o;c[u+40>>3]=o;t[u+12>>2]=l;return}function wN(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0;n=KF(72)|0;b=t[(t[e+16>>2]|0)+104>>2]|0;u=0;f=1;l=t[47282]|0;e:while(1){s=i[l>>0]|0;switch(s<<24>>24){case 0:break e;case 92:{l=l+1|0;s=i[l>>0]|0;switch(s<<24>>24){case 124:case 125:case 123:case 92:{o=u;break}default:Q=4}break}default:Q=4}if((Q|0)==4){Q=0;switch(s<<24>>24){case 123:{o=u+1|0;break}case 125:{o=u+-1|0;break}default:{o=u;f=f+((u|0)==0&s<<24>>24==124&1)|0}}if((o|0)<0)break}u=o;l=l+1|0}Z=n+56|0;t[Z>>2]=KF(f<<2)|0;i[n+64>>0]=A;y=(A|0)==0&1;C=b+82|0;I=a+1|0;p=(r|0)!=0;E=b+16|0;B=b+4|0;m=b+8|0;s=0;u=0;A=0;g=0;o=0;r=0;b=a;f=0;l=0;e:while(1){w=s;s=0;A:while(1){r:while(1){v=r;i:while(1){d=s;h=f;a:while(1){k=u;t:while(1){while(1){if(g){Q=78;break e}u=t[47282]|0;f=i[u>>0]|0;if((f+-1&255)>=31)break;t[47282]=u+1}switch(f<<24>>24|0){case 92:{Q=53;break r}case 0:case 124:case 125:break i;case 60:break a;case 62:break t;case 123:break;default:{s=A;f=u;break r}}f=u+1|0;t[47282]=f;if(o|0){Q=34;break e}if(!(i[f>>0]|0)){Q=34;break e}r=wN(e,y,0,a)|0;t[(t[Z>>2]|0)+(k<<2)>>2]=r;if(!r){Q=36;break e}else{k=k+1|0;o=4}}if(i[C>>0]|0){s=A;f=u;break r}if(!(o&16)){Q=27;break e}if(h>>>0>I>>>0?(G=h+-1|0,(G|0)!=(v|0)):0)f=(i[G>>0]|0)==32?G:h;else f=h;i[f>>0]=0;d=o3(a)|0;t[47282]=(t[47282]|0)+1;u=k;o=o&-17;h=f}if(o&6|0){Q=22;break e}if(i[C>>0]|0){s=A;f=u;break r}t[47282]=u+1;u=k;o=o|18;s=d;v=a;f=a}if(!((o&16|0)==0&(p|f<<24>>24!=0))){Q=38;break e}if(!(o&4)){s=KF(72)|0;t[(t[Z>>2]|0)+(k<<2)>>2]=s;u=k+1|0}else{s=w;u=k}if(d|0)t[s+60>>2]=d;if(!(o&5)){i[a+l>>0]=32;o=o|1;l=l+1|0}f=a+l|0;if(o&1){if((l|0)>1?(L=f+-1|0,(L|0)!=(b|0)):0)f=(i[L>>0]|0)==32?L:f;i[f>>0]=0;b=o3(a)|0;t[s+52>>2]=HF(e,b,i[C>>0]|0?2:0,+c[E>>3],t[B>>2]|0,t[m>>2]|0)|0;i[s+64>>0]=1;b=a;l=0}f=t[47282]|0;switch(i[f>>0]|0){case 0:{g=1;r=v;f=h;continue e}case 125:{Q=51;break e}default:{}}t[47282]=f+1;w=s;o=0;s=0;r=v;f=h}r:do{if((Q|0)==53){Q=0;s=a+l|0;f=u+1|0;switch(i[f>>0]|0){case 0:{s=A;f=u;break r}case 62:case 60:case 124:case 125:case 123:{s=A;break}case 32:{if(!(i[C>>0]|0))s=1;else Q=55;break}default:Q=55}if((Q|0)==55){Q=0;i[s>>0]=92;s=A;o=o|9;l=l+1|0}t[47282]=f}}while(0);A=a+l|0;if(o&4|0?(i[f>>0]|0)!=32:0){Q=59;break e}if(!(o&24))o=(i[f>>0]|0)==32?o:o|9;if(!(o&8))if(!(o&16))r=v;else{u=i[f>>0]|0;A=(s|0)!=0;if(!(A|u<<24>>24!=32))if((h|0)!=(a|0))if((i[h+-1>>0]|0)==32)u=h;else Q=73;else u=a;else Q=73;if((Q|0)==73){Q=0;i[h>>0]=u;u=h+1|0;f=t[47282]|0}r=A?u+-1|0:v;h=u}else{u=i[f>>0]|0;r=(s|0)!=0;if(!((!(r|u<<24>>24!=32)?(i[A+-1>>0]|0)==32:0)?(i[C>>0]|0)==0:0)){i[A>>0]=u;l=l+1|0}if(r){r=v;b=a+l+-1|0}else r=v}f=f+1|0;t[47282]=f;while(1){if((i[f>>0]|0)>=0){u=k;A=s;s=d;f=h;continue A}v=f+1|0;t[47282]=v;i[a+l>>0]=i[f>>0]|0;l=l+1|0;f=v}}}if((Q|0)==22){mN(n,d);n=0}else if((Q|0)==27){mN(n,d);n=0}else if((Q|0)==34){mN(n,d);n=0}else if((Q|0)==36){mN(n,d);n=0}else if((Q|0)==38){mN(n,d);n=0}else if((Q|0)==51){t[47282]=f+1;t[n+48>>2]=u}else if((Q|0)==59){mN(n,d);n=0}else if((Q|0)==78)t[n+48>>2]=k;return n|0}function kN(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+64|0;s=m+48|0;o=m+40|0;u=m+32|0;g=m+16|0;v=m;l=t[r+52>>2]|0;e:do{if(!l){u=g+8|0;b=r+48|0;w=r+56|0;k=r+64|0;d=v+8|0;t[g>>2]=0;t[g+4>>2]=0;t[g+8>>2]=0;t[g+12>>2]=0;l=0;while(1){if((l|0)>=(t[b>>2]|0))break e;kN(v,A,t[(t[w>>2]|0)+(l<<2)>>2]|0);if(!(i[k>>0]|0)){c[u>>3]=+c[u>>3]+ +c[d>>3];s=g;o=+c[g>>3]>+c[v>>3]?g:v}else{c[g>>3]=+c[g>>3]+ +c[v>>3];s=u;o=(+c[u>>3]>+c[d>>3]?g:v)+8|0}c[s>>3]=+c[o>>3];l=l+1|0}}else{n=+c[l+24>>3];a=+c[l+32>>3];if(n>0.0|a>0.0){l=Hw(A,105496)|0;do{if(l){t[s>>2]=o;t[s+4>>2]=u;l=V3(l,105503,s)|0;if((l|0)<=0){f=8.0;n=n+16.0;break}f=+c[o>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))<<1|0);n=n+f;if((l|0)!=1){f=+c[u>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))<<1|0)}}else{f=8.0;n=n+16.0}}while(0);a=f+a}c[g>>3]=n;c[g+8>>3]=a}}while(0);t[r>>2]=t[g>>2];t[r+4>>2]=t[g+4>>2];t[r+8>>2]=t[g+8>>2];t[r+12>>2]=t[g+12>>2];t[e>>2]=t[g>>2];t[e+4>>2]=t[g+4>>2];t[e+8>>2]=t[g+8>>2];t[e+12>>2]=t[g+12>>2];h=m;return}function dN(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0;v=h;h=h+32|0;b=v+16|0;w=v;k=+c[A>>3];f=k-+c[e>>3];d=+c[A+8>>3];a=d-+c[e+8>>3];t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];A=t[e+52>>2]|0;if(!((r|0)!=0|(A|0)==0)){u=A+40|0;c[u>>3]=+c[u>>3]+f;u=A+48|0;c[u>>3]=+c[u>>3]+a}o=e+48|0;A=t[o>>2]|0;e:do{if(A|0){u=e+64|0;a=((i[u>>0]|0)==0?a:f)/+(A|0);s=e+56|0;l=0;while(1){if((l|0)>=(A|0))break e;e=t[(t[s>>2]|0)+(l<<2)>>2]|0;n=l+1|0;A=~~(a*+(n|0))-~~(a*+(l|0))|0;if(!(i[u>>0]|0))vN(w,k,+c[e+8>>3]+ +(A|0));else vN(w,+c[e>>3]+ +(A|0),d);t[b>>2]=t[w>>2];t[b+4>>2]=t[w+4>>2];t[b+8>>2]=t[w+8>>2];t[b+12>>2]=t[w+12>>2];dN(e,b,r);l=n;A=t[o>>2]|0}}}while(0);h=v;return}function vN(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function gN(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0.0;k=h;h=h+48|0;l=k+32|0;u=k+16|0;o=k;i[e+65>>0]=r;s=e+16|0;v=+c[A>>3];w=A+8|0;d=+c[w>>3];vN(u,v,d-+c[e+8>>3]);t[s>>2]=t[u>>2];t[s+4>>2]=t[u+4>>2];t[s+8>>2]=t[u+8>>2];t[s+12>>2]=t[u+12>>2];s=e+32|0;vN(o,+c[e>>3]+v,d);t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];s=t[e+48>>2]|0;o=s+-1|0;u=(r|0)==0;b=e+56|0;f=e+64|0;n=0;while(1){if((n|0)>=(s|0))break;do{if(!u){e=(n|0)==0;a=(n|0)==(o|0);if(!(i[f>>0]|0))if(e){e=a?15:14;break}else{e=a?11:10;break}else if(e){e=a?15:13;break}else{e=a?7:5;break}}else e=0}while(0);a=t[(t[b>>2]|0)+(n<<2)>>2]|0;t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];gN(a,l,e&r);if(!(i[f>>0]|0))c[w>>3]=+c[w>>3]-+c[(t[(t[b>>2]|0)+(n<<2)>>2]|0)+8>>3];else c[A>>3]=+c[t[(t[b>>2]|0)+(n<<2)>>2]>>3]+ +c[A>>3];n=n+1|0}h=k;return}function mN(e,A){e=e|0;A=A|0;pN(e);G2(A);return}function pN(e){e=e|0;var A=0,r=0,i=0;r=e+48|0;i=e+56|0;A=0;while(1){if((A|0)>=(t[r>>2]|0))break;pN(t[(t[i>>2]|0)+(A<<2)>>2]|0);A=A+1|0}G2(t[e+60>>2]|0);SF(t[e+52>>2]|0);G2(t[i>>2]|0);G2(e);return}function EN(e){e=e|0;var A=0.0,r=0.0;r=+wx(e,t[47146]|0,0.0,.01);A=+wx(e,t[47145]|0,0.0,.02);A=(r>A?r:A)*72.0;return+ +(~~(A+(A>=0.0?.5:-.5))|0)}function BN(e,A){e=+e;A=+A;var r=0;r=~~(e/A);return+(+((+(r|0)*A+1.0e-05>2]|0)+8>>2]|0;if(!e)e=0;else e=(t[t[e+4>>2]>>2]|0)==91&1;return e|0}function CN(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;a=t[47283]|0;e:do{if(!a)A=0;else{n=t[47284]|0;r=0;while(1){if((r|0)>=(n|0)){A=0;break e}A=t[a+(r<<2)>>2]|0;f=t[A>>2]|0;if((i[f>>0]|0)==(i[e>>0]|0)?(e1(f,e)|0)==0:0)break e;r=r+1|0}}}while(0);return A|0}function IN(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;if(Lx(Hw(A,105526)|0)|0)if((i[e>>0]|0)==101?(e1(e,105685)|0)==0:0){A=101;n=6}else{e=105519;n=4}else n=4;if((n|0)==4){A=i[e>>0]|0;if(A<<24>>24==99)if(!(e1(e,105519)|0))n=11;else{A=99;n=6}else n=6}e:do{if((n|0)==6){r=20848;while(1){a=t[r>>2]|0;if(!a){n=11;break e}if((i[a>>0]|0)==A<<24>>24?(e1(a,e)|0)==0:0){e=r;break e}r=r+16|0}}}while(0);if((n|0)==11)e=ZN(e)|0;return e|0}function ZN(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f;A=CN(e)|0;if(!A){a=t[47284]|0;A=a+1|0;t[47284]=A;r=t[47283]|0;if(!r)A=$F(A<<2)|0;else A=AM(r,A<<2)|0;t[47283]=A;A=KF(16)|0;t[(t[47283]|0)+(a<<2)>>2]=A;t[A>>2]=t[5212];t[A+4>>2]=t[5213];t[A+8>>2]=t[5214];t[A+12>>2]=t[5215];r=o3(e)|0;t[A>>2]=r;do{if(!0){if((i[e>>0]|0)==99?(e1(e,105519)|0)==0:0){r=1;break}t[n>>2]=t[5212];t[n+4>>2]=r;nw(0,105690,n)|0;r=0}else r=1}while(0);i[A+12>>0]=r}h=f;return A|0}function GN(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+c[A>>3]*.5257311121191336;r=+c[A+8>>3]*.8944271909999159;r=i>r?i:r;c[e>>3]=r*4.97979656976556;c[e+8>>3]=r*4.73606797749979;return}function LN(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0,t=0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0.0;i=+c[A>>3];s=A+8|0;a=+c[s>>3];r=a/i;if(!(r>.9510565162951536))if(r<.9510565162951536){l=i;a=i*.9510565162951536}else l=i;else l=a*1.0514622242382672;i=l*.5257311121191336;n=l*.20081141588622725;f=l*.05020285397155681;r=.3141592653589793;t=0;while(1){if((t|0)>=10)break;c[e+(t<<4)>>3]=+W(+r)*i;c[e+(t<<4)+8>>3]=+Y(+r)*i-f;u=r+.6283185307179586;o=t|1;c[e+(o<<4)>>3]=+W(+u)*n;c[e+(o<<4)+8>>3]=+Y(+u)*n-f;r=r+1.2566370614359172;t=t+2|0}c[A>>3]=l;c[s>>3]=a;return}function QN(e){e=e|0;e=t[(t[e+16>>2]|0)+12>>2]|0;if(e|0){G2(t[e+44>>2]|0);G2(e)}return}function DN(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+80|0;c=b+40|0;n=b;u=b+64|0;f=b+56|0;if(!(i[r>>0]|0)){n=4208;f=e+40|0;do{t[e>>2]=t[n>>2];e=e+4|0;n=n+4|0}while((e|0)<(f|0))}else{l=(a|0)==0?106356:a;t[u>>2]=15;s=A+16|0;a=t[s>>2]|0;do{if(i[(t[a+104>>2]|0)+82>>0]|0){a=ft(A,r,u)|0;if(!a){a=t[s>>2]|0;o=8;break}if(SN(A,a,n,l,t[u>>2]|0,0)|0){t[c>>2]=Mk(A)|0;t[c+4>>2]=r;t[c+8>>2]=l;nw(0,106358,c)|0}}else o=8}while(0);if((o|0)==8){if((t[(t[a+8>>2]|0)+8>>2]|0)==1664)f=0;else{t[f>>2]=A;t[f+4>>2]=0}if(SN(A,0,n,r,t[u>>2]|0,f)|0)jN(A,r)}t[n+36>>2]=0;f=e+40|0;do{t[e>>2]=t[n>>2];e=e+4|0;n=n+4|0}while((e|0)<(f|0))}h=b;return}function zN(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0,f=0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0;d=h;h=h+112|0;u=d+96|0;o=d+80|0;w=d+64|0;s=d+48|0;k=d+32|0;b=d;a=d+16|0;if(!e){t[47287]=0;e=0}else{n=t[e+4>>2]|0;e=t[e>>2]|0;f=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3)*90|0;t[u>>2]=t[A>>2];t[u+4>>2]=t[A+4>>2];t[u+8>>2]=t[A+8>>2];t[u+12>>2]=t[A+12>>2];LF(a,u,f);t[k>>2]=t[a>>2];t[k+4>>2]=t[a+4>>2];t[k+8>>2]=t[a+8>>2];t[k+12>>2]=t[a+12>>2];e:do{if(n){r=+c[n+8>>3];i=+c[n+24>>3];v=+c[k>>3];if((+c[n>>3]<=v?v<=+c[n+16>>3]:0)?(l=+c[k+8>>3],r<=l):0)e=l<=i&1;else e=0}else{if((e|0)==(t[47287]|0)){a=t[47288]|0;n=t[47290]|0;f=t[47289]|0}else{n=t[(t[e+16>>2]|0)+12>>2]|0;t[47291]=n;f=t[n+44>>2]|0;t[47289]=f;a=t[n+8>>2]|0;t[47288]=a;n=P((t[n+4>>2]|0)+-1|0,a)|0;n=(n|0)>0?n:0;t[47290]=n;t[47287]=e}e=0;A=0;while(1){if((e|0)>=(a|0)){e=1;break e}g=f+(n+e<<4)|0;t[b>>2]=t[g>>2];t[b+4>>2]=t[g+4>>2];t[b+8>>2]=t[g+8>>2];t[b+12>>2]=t[g+12>>2];g=f+(n+((e+4|0)%(a|0)|0)<<4)|0;t[s>>2]=t[k>>2];t[s+4>>2]=t[k+4>>2];t[s+8>>2]=t[k+8>>2];t[s+12>>2]=t[k+12>>2];t[w>>2]=t[46614];t[w+4>>2]=t[46615];t[w+8>>2]=t[46616];t[w+12>>2]=t[46617];t[o>>2]=t[b>>2];t[o+4>>2]=t[b+4>>2];t[o+8>>2]=t[b+8>>2];t[o+12>>2]=t[b+12>>2];t[u>>2]=t[g>>2];t[u+4>>2]=t[g+4>>2];t[u+8>>2]=t[g+8>>2];t[u+12>>2]=t[g+12>>2];A=A+((XN(s,w,o,u)|0)==0&1)|0;if((A|0)==2){e=0;break}else e=e+2|0}}}while(0)}h=d;return e|0}function WN(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;r=t[e+16>>2]|0;if((i[(t[r+104>>2]|0)+82>>0]|0)!=0?(i[r+145>>0]|0)!=0:0)e=ct(e,A,0,a,n)|0;else e=0;return e|0}function YN(e,A){e=e|0;A=A|0;var r=0,f=0,l=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0.0,G=0.0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0;x=h;h=h+48|0;W=x+24|0;z=x+16|0;I=x+8|0;C=x;V=x+32|0;u=x+28|0;N=t[e+16>>2]|0;R=N+208|0;r=t[R>>2]|0;if((r|0)==0?(a[N+260>>1]&1)==0:0)F=0;else Q=4;if((Q|0)==4)if(!(t[e+152>>2]&4)){Tr(e,r,t[N+228>>2]|0,t[N+244>>2]|0,t[N+212>>2]|0);F=1}else F=1;Y=A+16|0;r=t[Y>>2]|0;d=t[r+12>>2]|0;D=t[d+44>>2]|0;M=t[d+8>>2]|0;d=t[d+4>>2]|0;if((t[47285]|0)<(M|0)){r=M+5|0;t[47285]=r;f=t[47286]|0;if(!f)r=$F(r<<4)|0;else r=AM(f,r<<4)|0;t[47286]=r;r=t[Y>>2]|0}L=(t[r+104>>2]|0)+56|0;r=r+16|0;t[L>>2]=t[r>>2];t[L+4>>2]=t[r+4>>2];t[L+8>>2]=t[r+8>>2];t[L+12>>2]=t[r+12>>2];L=t[Y>>2]|0;Z=+c[L+32>>3]*72.0;Z=(+c[L+96>>3]+ +c[L+88>>3])/+(~~(Z+(Z>=0.0?.5:-.5))|0);G=+c[L+40>>3]*72.0;G=+c[L+80>>3]/+(~~(G+(G>=0.0?.5:-.5))|0);L=FN(e,A)|0;t[V>>2]=0;r=n[(t[Y>>2]|0)+117>>0]|0;do{if(!(r&1)){if(r&2|0){v=vx(A,0,106256)|0;$r(e,v);Ai(e,vx(A,0,106264)|0);f=0;r=1;break}if(r&8|0){v=vx(A,0,106272)|0;$r(e,v);Ai(e,vx(A,0,106280)|0);f=0;r=1;break}if(r&4|0){v=vx(A,0,106288)|0;$r(e,v);Ai(e,vx(A,0,106296)|0);f=0;r=1;break}if(!(L&1))if(!(L&576)){f=0;r=0}else{f=MN(A)|0;r=1}else{f=MN(A)|0;if(!((KY(f,V,u)|0)<<24>>24)){Ai(e,f);r=1}else{Ai(e,t[V>>2]|0);r=t[V+4>>2]|0;o=hx(A,t[47173]|0,0,0)|0;l=+s[u>>2];if(!r)ri(e,137314,o,l);else ri(e,r,o,l);r=(L&2)>>>1|2}}v=VN(e,A)|0}else{v=vx(A,0,106240)|0;$r(e,v);Ai(e,vx(A,0,106248)|0);f=0;r=1}}while(0);o=t[(t[Y>>2]|0)+8>>2]|0;if(i[o+12>>0]|0){o=t[o>>2]|0;if((i[o>>0]|0)==99){o=(e1(o,105519)|0)==0;Q=33}else m=1}else{o=1;Q=33}if((Q|0)==33){o=o^1;if((d|0)!=0|r<<24>>24==0|o)m=o;else{$r(e,137379);d=1;m=0}}p=(M|0)<3;E=(L&512|0)!=0;y=(L&8|0)==0;B=(L&64|0)==0;w=(L&1024|0)==0;k=(L&2130706444|0)==0;g=0;while(1){if((g|0)>=(d|0))break;u=P(g,M)|0;b=t[47286]|0;o=0;while(1){if((o|0)>=(M|0))break;H=o+u|0;l=+c[D+(H<<4)+8>>3];J=t[Y>>2]|0;c[b+(o<<4)>>3]=+c[J+16>>3]+ +c[D+(H<<4)>>3]*Z;c[b+(o<<4)+8>>3]=+c[J+24>>3]+l*G;o=o+1|0}do{if(p){if(E&(g|0)==0?(C1(f,58)|0)!=0:0)if((tB(e,b,f)|0)>1){t[C>>2]=Mk(A)|0;nw(3,106304,C)|0;r=0}else r=0;ai(e,t[47286]|0,M,r&255);if(!y)NN(e,A)}else{if(!B){if((g|0)==0?(sB(e,b,f,1)|0)>1:0){t[I>>2]=Mk(A)|0;nw(3,106304,I)|0}ti(e,t[47286]|0,M,0);break}if(!w){$r(e,137379);ti(e,t[47286]|0,M,r&255);$r(e,v);li(e,(t[47286]|0)+32|0,2);break}r=r&255;if(k){ti(e,b,M,r);break}else{lN(e,b,M,L,r);break}}}while(0);g=g+1|0;r=0}o=t[(t[Y>>2]|0)+8>>2]|0;if(!(i[o+12>>0]|0)){o=Hw(A,109025)|0;if(o|0?i[o>>0]|0:0){b=o;Q=65}}else{o=t[o>>2]|0;if((i[o>>0]|0)==99?(e1(o,105519)|0)==0:0){o=Hw(A,105526)|0;if(o|0?i[o>>0]|0:0){b=o;Q=65}}else{b=o;Q=65}}if((Q|0)==65){u=t[47286]|0;o=0;while(1){if((o|0)>=(M|0))break;l=+c[D+(o<<4)+8>>3];H=t[Y>>2]|0;c[u+(o<<4)>>3]=+c[H+16>>3]+ +c[D+(o<<4)>>3]*Z;c[u+(o<<4)+8>>3]=+c[H+24>>3]+l*G;o=o+1|0}o=r&255;do{if(!(m|r<<24>>24==0)){if(p){if(E&(g|0)==0?(C1(f,58)|0)!=0:0)if((tB(e,u,f)|0)>1){t[z>>2]=Mk(A)|0;nw(3,106304,z)|0;r=0}else r=0;ai(e,t[47286]|0,M,r&255);if(y)break;NN(e,A);break}if(B)if(!(L&12)){ti(e,u,M,o);break}else{lN(e,u,M,L,o);break}else{if((sB(e,u,f,1)|0)>1){t[W>>2]=Mk(A)|0;nw(3,106304,W)|0}ti(e,t[47286]|0,M,0);break}}}while(0);H=t[47286]|0;ci(e,b,H,M,r,dx(A,t[47166]|0,137308)|0)}G2(t[V>>2]|0);jF(e,10,t[(t[Y>>2]|0)+104>>2]|0);if(F){if(t[e+152>>2]&4|0)Tr(e,t[R>>2]|0,t[N+228>>2]|0,t[N+244>>2]|0,t[N+212>>2]|0);Or(e)}h=x;return}function FN(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;f=h;h=h+16|0;a=f;r=JN(A,a)|0;if(r|0)ii(e,r);r=t[47172]|0;if((r|0?(n=Pw(A,r)|0,n|0):0)?i[n>>0]|0:0)ui(e,+wx(A,t[47172]|0,1.0,0.0));h=f;return t[a>>2]|0}function MN(e){e=e|0;return xN(e,134800)|0}function VN(e,A){e=e|0;A=A|0;A=vx(A,t[47148]|0,195059)|0;A=i[A>>0]|0?A:137314;$r(e,A);return A|0}function NN(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0,f=0.0,l=0,s=0,o=0;r=h;h=h+96|0;l=r+80|0;s=r+64|0;i=r+32|0;o=r+16|0;n=r;A=t[A+16>>2]|0;a=+c[A+80>>3];c[o+8>>3]=a*.375;f=+c[A+96>>3];c[o>>3]=f*.6614;A=A+16|0;t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];RN(n,s,l);t[i>>2]=t[n>>2];t[i+4>>2]=t[n+4>>2];t[i+8>>2]=t[n+8>>2];t[i+12>>2]=t[n+12>>2];n=i+8|0;A=i+24|0;c[A>>3]=+c[n>>3];c[i+16>>3]=+c[i>>3]-f*1.3228;li(e,i,2);a=+c[n>>3]-a*.75;c[n>>3]=a;c[A>>3]=a;li(e,i,2);h=r;return}function RN(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[r+8>>3]+ +c[A+8>>3];c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=i;return}function xN(e,A){e=e|0;A=A|0;var r=0;r=vx(e,t[47149]|0,195059)|0;if(!(i[r>>0]|0)){r=vx(e,t[47148]|0,195059)|0;return((i[r>>0]|0)==0?A:r)|0}else return r|0;return 0}function JN(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0;r=vx(e,t[47157]|0,195059)|0;e:do{if(!(i[r>>0]|0)){n=0;r=0}else{n=JB(r)|0;f=n;r=0;A:while(1){a=t[f>>2]|0;if(!a)break e;switch(i[a>>0]|0){case 102:{if(!(e1(a,111101)|0)){f=f+4|0;r=r|1;continue A}break}case 114:{if(!(e1(a,106316)|0)){a=f;do{s=a;a=a+4|0;l=t[a>>2]|0;t[s>>2]=l}while((l|0)!=0);s=f;r=r|4;f=s;continue A}if(!(e1(a,106334)|0)){a=f;do{l=a;a=a+4|0;s=t[a>>2]|0;t[l>>2]=s}while((s|0)!=0);s=f;r=r|3;f=s;continue A}break}case 100:{if(!(e1(a,106324)|0)){a=f;do{l=a;a=a+4|0;s=t[a>>2]|0;t[l>>2]=s}while((s|0)!=0);s=f;r=r|8;f=s;continue A}break}case 105:{if(!(e1(a,134335)|0)){f=f+4|0;r=r|32;continue A}break}case 115:{if((e1(a,106341)|0)==0?HN(e)|0:0){a=f;do{l=a;a=a+4|0;s=t[a>>2]|0;t[l>>2]=s}while((s|0)!=0);s=f;r=r|64;f=s;continue A}break}case 119:{if((e1(a,106349)|0)==0?PN(e)|0:0){a=f;do{l=a;a=a+4|0;s=t[a>>2]|0;t[l>>2]=s}while((s|0)!=0);s=f;r=r|512;f=s;continue A}break}default:{}}f=f+4|0}}}while(0);a=t[(t[(t[e+16>>2]|0)+8>>2]|0)+8>>2]|0;if(a)r=t[a+40>>2]|r;t[A>>2]=r;return n|0}function HN(e){e=e|0;var A=0.0;e=t[(t[(t[e+16>>2]|0)+8>>2]|0)+8>>2]|0;if((((e|0)!=0?(t[e+8>>2]|0)==4:0)?(A=+c[e+16>>3],((~~(A+(A>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+c[e+24>>3]==0.0:0)e=+c[e+32>>3]==0.0&1;else e=0;return e|0}function PN(e){e=e|0;e=t[(t[(t[e+16>>2]|0)+8>>2]|0)+8>>2]|0;if(!e)e=0;else e=(t[e+8>>2]|0)<3&1;return e|0}function XN(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0.0,n=0.0,f=0.0;f=+c[r+8>>3];n=-(+c[i+8>>3]-f);t=+c[r>>3];a=+c[i>>3]-t;t=a*f+t*n;return(+c[e+8>>3]*a+ +c[e>>3]*n-t>=0.0^+c[A>>3]*n-t+ +c[A+8>>3]*a>=0.0^1)&1|0}function SN(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0.0,g=0.0,m=0.0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0;z=h;h=h+192|0;Z=z+176|0;Q=z+160|0;o=z+144|0;C=z+128|0;I=z+112|0;u=z+96|0;b=z+80|0;w=z+64|0;p=z+48|0;E=z+32|0;B=z+16|0;L=z;if(!A){t[Q>>2]=0;t[Q+4>>2]=0;t[Q+8>>2]=0;t[Q+12>>2]=0;o=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1|0)==0;G=t[e+16>>2]|0;k=+c[G+80>>3]*.5;l=+c[G+88>>3];g=o?k:l;k=o?l:k;o=0;G=Q;l=0.0;s=-k;d=g;D=Q+8|0;v=0.0;g=-g}else{s=+c[A>>3];g=+c[A+8>>3];k=+c[A+16>>3];d=+c[A+24>>3];vN(o,(k+s)*.5,(d+g)*.5);t[Q>>2]=t[o>>2];t[Q+4>>2]=t[o+4>>2];t[Q+8>>2]=t[o+8>>2];t[Q+12>>2]=t[o+12>>2];W=Q+8|0;o=1;G=Q;l=+c[Q>>3];D=W;v=+c[W>>3]}m=(k>d?k:d)*4.0;e:do{if((a|0)!=0?(y=i[a>>0]|0,y<<24>>24!=0):0){a=a+1|0;switch(y<<24>>24|0){case 99:{w=1;n=0;a=0;u=0;l=0.0;b=0;break e}case 101:{if(i[a>>0]|0){w=1;n=0;a=0;u=0;l=0.0;b=1;break e}if(!f)c[G>>3]=k;else{UN(C,f,v,m);t[Q>>2]=t[C>>2];t[Q+4>>2]=t[C+4>>2];t[Q+8>>2]=t[C+8>>2];t[Q+12>>2]=t[C+12>>2]}w=0;n=n&2;a=0;u=1;l=0.0;b=0;o=1;break e}case 115:{c[D>>3]=g;switch(i[a>>0]|0){case 0:{if(!f)c[G>>3]=l;else{UN(I,f,-m,l);t[Q>>2]=t[I>>2];t[Q+4>>2]=t[I+4>>2];t[Q+8>>2]=t[I+8>>2];t[Q+12>>2]=t[I+12>>2]}w=0;n=n&1;a=0;u=1;l=-1.5707963267948966;b=0;o=1;break e}case 101:{if(!f)c[G>>3]=k;else{UN(u,f,-m,m);t[Q>>2]=t[u>>2];t[Q+4>>2]=t[u+4>>2];t[Q+8>>2]=t[u+8>>2];t[Q+12>>2]=t[u+12>>2]}w=0;n=n&3;a=0;u=1;l=-.7853981633974483;b=0;o=1;break e}case 119:{if(!f)c[G>>3]=s;else{m=-m;UN(b,f,m,m);t[Q>>2]=t[b>>2];t[Q+4>>2]=t[b+4>>2];t[Q+8>>2]=t[b+8>>2];t[Q+12>>2]=t[b+12>>2]}w=0;n=n&9;a=0;u=1;l=-2.356194490192345;b=0;o=1;break e}default:{c[D>>3]=v;w=1;n=0;a=0;u=0;l=0.0;b=1;break e}}}case 119:{if(i[a>>0]|0){w=1;n=0;a=0;u=0;l=0.0;b=1;break e}if(!f)c[G>>3]=s;else{UN(w,f,v,-m);t[Q>>2]=t[w>>2];t[Q+4>>2]=t[w+4>>2];t[Q+8>>2]=t[w+8>>2];t[Q+12>>2]=t[w+12>>2]}w=0;n=n&8;a=0;u=1;l=3.141592653589793;b=0;o=1;break e}case 110:{c[D>>3]=d;switch(i[a>>0]|0){case 0:{if(!f)c[G>>3]=l;else{UN(p,f,m,l);t[Q>>2]=t[p>>2];t[Q+4>>2]=t[p+4>>2];t[Q+8>>2]=t[p+8>>2];t[Q+12>>2]=t[p+12>>2]}w=0;n=n&4;a=0;u=1;l=1.5707963267948966;b=0;o=1;break e}case 101:{if(!f)c[G>>3]=k;else{UN(E,f,m,m);t[Q>>2]=t[E>>2];t[Q+4>>2]=t[E+4>>2];t[Q+8>>2]=t[E+8>>2];t[Q+12>>2]=t[E+12>>2]}w=0;n=n&6;a=0;u=1;l=.7853981633974483;b=0;o=1;break e}case 119:{if(!f)c[G>>3]=s;else{UN(B,f,m,-m);t[Q>>2]=t[B>>2];t[Q+4>>2]=t[B+4>>2];t[Q+8>>2]=t[B+8>>2];t[Q+12>>2]=t[B+12>>2]}w=0;n=n&12;a=0;u=1;l=2.356194490192345;b=0;o=1;break e}default:{c[D>>3]=v;w=1;n=0;a=0;u=0;l=0.0;b=1;break e}}}case 95:{w=1;a=1;u=0;l=0.0;b=0;break e}default:{w=1;n=0;a=0;u=0;l=0.0;b=1;break e}}}else{w=1;n=0;a=0;u=0;l=0.0;b=0}}while(0);W=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3)*90|0;t[Z>>2]=t[Q>>2];t[Z+4>>2]=t[Q+4>>2];t[Z+8>>2]=t[Q+8>>2];t[Z+12>>2]=t[Q+12>>2];GF(L,Z,W);t[Q>>2]=t[L>>2];t[Q+4>>2]=t[L+4>>2];t[Q+8>>2]=t[L+8>>2];t[Q+12>>2]=t[L+12>>2];if(!(a<<24>>24))n=TN(n,t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3)|0;i[r+33>>0]=n;t[r+24>>2]=A;s=+c[G>>3];c[r>>3]=+(~~(s+(s>=0.0?.5:-.5))|0);s=+c[D>>3];c[r+8>>3]=+(~~(s+(s>=0.0?.5:-.5))|0);c[r+16>>3]=+ON(l,t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3);s=+c[G>>3];l=+c[D>>3];if(s==0.0&l==0.0)n=-128;else{m=+R(+l,+s);g=m+4.71238898038469;n=~~((!(g>=6.283185307179586)?g:m+-1.5707963267948966)*40.74366543152521)&255}i[r+32>>0]=n;i[r+29>>0]=u;i[r+28>>0]=o;i[r+30>>0]=w;i[r+31>>0]=a;h=z;return b|0}function jN(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=Mk(e)|0;t[i+4>>2]=A;nw(0,106419,i)|0;h=r;return}function UN(e,A,r,i){e=e|0;A=A|0;r=+r;i=+i;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+128|0;n=w+112|0;l=w+48|0;s=w+16|0;o=w+32|0;u=w;b=t[A>>2]|0;f=t[(t[(Bd(b)|0)+16>>2]|0)+116>>2]&3;c[s>>3]=i;c[s+8>>3]=r;a=(f|0)!=0;if(a){t[n>>2]=t[s>>2];t[n+4>>2]=t[s+4>>2];t[n+8>>2]=t[s+8>>2];t[n+12>>2]=t[s+12>>2];GF(o,n,f*90|0);t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2]}o=l+48|0;k=l+32|0;t[l>>2]=0;t[l+4>>2]=0;t[l+8>>2]=0;t[l+12>>2]=0;t[l+16>>2]=0;t[l+20>>2]=0;t[l+24>>2]=0;t[l+28>>2]=0;t[k>>2]=t[s>>2];t[k+4>>2]=t[s+4>>2];t[k+8>>2]=t[s+8>>2];t[k+12>>2]=t[s+12>>2];t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[o+8>>2]=t[s+8>>2];t[o+12>>2]=t[s+12>>2];kR(A,t[(t[(t[(t[b+16>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,l,1);if(a){t[n>>2]=t[l>>2];t[n+4>>2]=t[l+4>>2];t[n+8>>2]=t[l+8>>2];t[n+12>>2]=t[l+12>>2];LF(u,n,f*90|0);t[l>>2]=t[u>>2];t[l+4>>2]=t[u+4>>2];t[l+8>>2]=t[u+8>>2];t[l+12>>2]=t[u+12>>2]}t[e>>2]=t[l>>2];t[e+4>>2]=t[l+4>>2];t[e+8>>2]=t[l+8>>2];t[e+12>>2]=t[l+12>>2];h=w;return}function TN(e,A){e=e|0;A=A|0;e:do{switch(A|0){case 3:switch(e|0){case 4:{e=2;break e}case 1:{e=8;break e}case 8:{e=1;break e}case 2:{e=4;break e}default:break e}case 2:switch(e|0){case 4:{e=1;break e}case 1:{e=4;break e}default:break e}case 1:switch(e|0){case 4:{e=2;break e}case 1:{e=8;break e}case 8:{e=4;break e}case 2:{e=1;break e}default:break e}default:{}}}while(0);return e|0}function ON(e,A){e=+e;A=A|0;switch(A|0){case 3:{if(!(e==3.141592653589793))if(!(e==2.356194490192345))if(!(e==1.5707963267948966))if(!(e==0.0))if(!(e==-.7853981633974483)){if(e==-1.5707963267948966)e=3.141592653589793}else e=2.356194490192345;else e=1.5707963267948966;else e=0.0;else e=-.7853981633974483;else e=-1.5707963267948966;break}case 2:{e=-e;break}case 1:{e=e+-1.5707963267948966;break}default:{}}return+e}function _N(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0,n=0.0,f=0,l=0,s=0;i=h;h=h+32|0;s=i+16|0;f=i;e=t[e>>2]|0;l=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3)*90|0;t[s>>2]=t[A>>2];t[s+4>>2]=t[A+4>>2];t[s+8>>2]=t[A+8>>2];t[s+12>>2]=t[A+12>>2];LF(f,s,l);r=+c[f>>3];n=+c[f+8>>3];e=t[e+16>>2]|0;a=+c[e+80>>3]*.5;if(!(!(n>=-a)|!(n<=a))?r>=-+c[e+88>>3]:0)e=r<=+c[e+96>>3]&1;else e=0;h=i;return e|0}function qN(e,A){e=e|0;A=A|0;var r=0,i=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0.0;u=h;h=h+32|0;o=u;f=t[e+16>>2]|0;l=f+208|0;n=t[l>>2]|0;if(!n)s=(a[f+260>>1]&1)!=0;else s=1;r=A+16|0;A=t[r>>2]|0;i=t[A+12>>2]|0;if(i|0){if(s?(t[e+152>>2]&4|0)==0:0){Tr(e,n,t[f+228>>2]|0,t[f+244>>2]|0,t[f+212>>2]|0);A=t[r>>2]|0}n=t[e+36>>2]|0;w=+c[A+24>>3]+ +(t[i+8>>2]|0);b=t[i>>2]|0;c[o>>3]=+c[A+16>>3]+ +(t[i+4>>2]|0);c[o+8>>3]=w;t[o+16>>2]=b;a3(n,106450,o)|0;n=t[r>>2]|0;o=(t[n+104>>2]|0)+56|0;n=n+16|0;t[o>>2]=t[n>>2];t[o+4>>2]=t[n+4>>2];t[o+8>>2]=t[n+8>>2];t[o+12>>2]=t[n+12>>2];jF(e,10,t[(t[r>>2]|0)+104>>2]|0);if(s){if(t[e+152>>2]&4|0)Tr(e,t[l>>2]|0,t[f+228>>2]|0,t[f+244>>2]|0,t[f+212>>2]|0);Or(e)}}h=u;return}function KN(e){e=e|0;pN(t[(t[e+16>>2]|0)+12>>2]|0);return}function $N(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;o=h;h=h+64|0;c=o+40|0;f=o;if(!(i[r>>0]|0)){f=4208;a=e+40|0;do{t[e>>2]=t[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(a|0))}else{a=(a|0)==0?106356:a;l=t[(t[A+16>>2]|0)+12>>2]|0;s=tR(l,r)|0;if(!s){if(SN(A,l+16|0,f,r,15,0)|0)jN(A,r)}else if(SN(A,s+16|0,f,a,n[s+65>>0]|0,0)|0){t[c>>2]=Mk(A)|0;t[c+4>>2]=r;t[c+8>>2]=a;nw(0,106358,c)|0}a=e+40|0;do{t[e>>2]=t[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(a|0))}h=o;return}function eR(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0,f=0,l=0.0,s=0,o=0,u=0.0;s=h;h=h+32|0;o=s+16|0;f=s;a=t[e+4>>2]|0;e=t[e>>2]|0;n=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3)*90|0;t[o>>2]=t[A>>2];t[o+4>>2]=t[A+4>>2];t[o+8>>2]=t[A+8>>2];t[o+12>>2]=t[A+12>>2];LF(f,o,n);t[A>>2]=t[f>>2];t[A+4>>2]=t[f+4>>2];t[A+8>>2]=t[f+8>>2];t[A+12>>2]=t[f+12>>2];if(!a){a=t[(t[e+16>>2]|0)+12>>2]|0;n=a+16|0;e=a+24|0;f=a+32|0;a=a+40|0}else{n=a;e=a+8|0;f=a+16|0;a=a+24|0}i=+c[e>>3];r=+c[a>>3];u=+c[A>>3];if((+c[n>>3]<=u?u<=+c[f>>3]:0)?(l=+c[A+8>>3],i<=l):0)e=l<=r&1;else e=0;h=s;return e|0}function AR(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0,m=0,p=0.0;m=h;h=h+80|0;d=m+64|0;k=m+32|0;g=m;e:do{if(!(i[A+28>>0]|0))r=0;else{f=+c[A>>3];w=e+16|0;o=t[(t[w>>2]|0)+12>>2]|0;s=o+48|0;o=o+56|0;A=0;while(1){if((A|0)>=(t[s>>2]|0))break e;u=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1|0)==0;b=t[(t[o>>2]|0)+(A<<2)>>2]|0;l=+(~~+c[(u?b+16|0:b+24|0)>>3]|0);if(f>=l?(v=+(~~+c[(u?b+32|0:b+40|0)>>3]|0),f<=v):0)break;A=A+1|0}if(!(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1)){g=t[w>>2]|0;p=+c[g+16>>3];c[a>>3]=p+l;l=+c[g+24>>3];f=+c[g+80>>3];c[a+8>>3]=l-f*.5;c[a+16>>3]=p+v}else{b=(t[(t[o>>2]|0)+(A<<2)>>2]|0)+16|0;e=(t[w>>2]|0)+16|0;t[k>>2]=t[b>>2];t[k+4>>2]=t[b+4>>2];t[k+8>>2]=t[b+8>>2];t[k+12>>2]=t[b+12>>2];t[k+16>>2]=t[b+16>>2];t[k+20>>2]=t[b+20>>2];t[k+24>>2]=t[b+24>>2];t[k+28>>2]=t[b+28>>2];t[d>>2]=t[e>>2];t[d+4>>2]=t[e+4>>2];t[d+8>>2]=t[e+8>>2];t[d+12>>2]=t[e+12>>2];QF(g,k,d);t[a>>2]=t[g>>2];t[a+4>>2]=t[g+4>>2];t[a+8>>2]=t[g+8>>2];t[a+12>>2]=t[g+12>>2];t[a+16>>2]=t[g+16>>2];t[a+20>>2]=t[g+20>>2];t[a+24>>2]=t[g+24>>2];t[a+28>>2]=t[g+28>>2];g=t[w>>2]|0;f=+c[g+80>>3];l=+c[g+24>>3]}c[a+24>>3]=f*.5+l;t[n>>2]=1}}while(0);h=m;return r|0}function rR(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0.0;E=h;h=h+144|0;u=E+96|0;w=E+64|0;d=E;v=E+128|0;g=t[e+16>>2]|0;m=g+208|0;r=t[m>>2]|0;if(!r)p=(a[g+260>>1]&1)!=0;else p=1;o=A+16|0;k=t[o>>2]|0;b=t[k+12>>2]|0;f=b+16|0;t[w>>2]=t[f>>2];t[w+4>>2]=t[f+4>>2];t[w+8>>2]=t[f+8>>2];t[w+12>>2]=t[f+12>>2];t[w+16>>2]=t[f+16>>2];t[w+20>>2]=t[f+20>>2];t[w+24>>2]=t[f+24>>2];t[w+28>>2]=t[f+28>>2];B=+c[k+16>>3];c[w>>3]=+c[w>>3]+B;l=+c[k+24>>3];k=w+8|0;c[k>>3]=+c[k>>3]+l;k=w+16|0;c[k>>3]=+c[k>>3]+B;f=w+24|0;c[f>>3]=+c[f>>3]+l;if(p?(t[e+152>>2]&4|0)==0:0)Tr(e,r,t[g+228>>2]|0,t[g+244>>2]|0,t[g+212>>2]|0);r=FN(e,A)|0;VN(e,A)|0;t[v>>2]=0;if(!(r&1))n=0;else{n=MN(A)|0;if(!((KY(n,v,u)|0)<<24>>24)){Ai(e,n);n=1}else{Ai(e,t[v>>2]|0);n=t[v+4>>2]|0;f=hx(A,t[47173]|0,0,0)|0;l=+s[u>>2];if(!n)ri(e,137314,f,l);else ri(e,n,f,l);n=r>>>1&1|2}}f=t[t[(t[o>>2]|0)+8>>2]>>2]|0;if((i[f>>0]|0)==77){o=(e1(f,106227)|0)==0;r=o?r|4:r}if(!(r&2130706444)){t[u>>2]=t[w>>2];t[u+4>>2]=t[w+4>>2];t[u+8>>2]=t[w+8>>2];t[u+12>>2]=t[w+12>>2];t[u+16>>2]=t[w+16>>2];t[u+20>>2]=t[w+20>>2];t[u+24>>2]=t[w+24>>2];t[u+28>>2]=t[w+28>>2];ni(e,u,n)}else{t[d>>2]=t[w>>2];t[d+4>>2]=t[w+4>>2];t[d+8>>2]=t[w+8>>2];t[d+12>>2]=t[w+12>>2];w=d+32|0;t[w>>2]=t[k>>2];t[w+4>>2]=t[k+4>>2];t[w+8>>2]=t[k+8>>2];t[w+12>>2]=t[k+12>>2];c[d+16>>3]=+c[w>>3];c[d+24>>3]=+c[d+8>>3];c[d+48>>3]=+c[d>>3];c[d+56>>3]=+c[d+40>>3];lN(e,d,4,r,n)}iR(e,A,b);G2(t[v>>2]|0);if(p){if(t[e+152>>2]&4|0)Tr(e,t[m>>2]|0,t[g+228>>2]|0,t[g+244>>2]|0,t[g+212>>2]|0);Or(e)}h=E;return}function iR(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+144|0;w=m+128|0;b=m+112|0;k=m+16|0;d=m;n=m+96|0;f=m+80|0;v=m+64|0;g=m+48|0;l=r+52|0;a=t[l>>2]|0;if(!a)a=A+16|0;else{u=a+56|0;o=r+16|0;a=r+32|0;t[b>>2]=t[o>>2];t[b+4>>2]=t[o+4>>2];t[b+8>>2]=t[o+8>>2];t[b+12>>2]=t[o+12>>2];t[w>>2]=t[a>>2];t[w+4>>2]=t[a+4>>2];t[w+8>>2]=t[a+8>>2];t[w+12>>2]=t[a+12>>2];aR(n,b,w);a=A+16|0;o=(t[a>>2]|0)+16|0;t[b>>2]=t[n>>2];t[b+4>>2]=t[n+4>>2];t[b+8>>2]=t[n+8>>2];t[b+12>>2]=t[n+12>>2];t[w>>2]=t[o>>2];t[w+4>>2]=t[o+4>>2];t[w+8>>2]=t[o+8>>2];t[w+12>>2]=t[o+12>>2];RN(f,b,w);t[u>>2]=t[f>>2];t[u+4>>2]=t[f+4>>2];t[u+8>>2]=t[f+8>>2];t[u+12>>2]=t[f+12>>2];jF(e,10,t[l>>2]|0);VN(e,A)|0}s=(t[a>>2]|0)+16|0;t[d>>2]=t[s>>2];t[d+4>>2]=t[s+4>>2];t[d+8>>2]=t[s+8>>2];t[d+12>>2]=t[s+12>>2];s=r+48|0;o=r+64|0;u=k+16|0;l=r+56|0;r=k+16|0;f=0;while(1){if((f|0)>=(t[s>>2]|0))break;if((f|0)>0){a=(t[l>>2]|0)+(f<<2)|0;n=t[a>>2]|0;if(!(i[o>>0]|0)){n=n+32|0;t[u>>2]=t[n>>2];t[u+4>>2]=t[n+4>>2];t[u+8>>2]=t[n+8>>2];t[u+12>>2]=t[n+12>>2];c[k>>3]=+c[(t[a>>2]|0)+16>>3];a=u;n=0}else{n=n+16|0;t[k>>2]=t[n>>2];t[k+4>>2]=t[n+4>>2];t[k+8>>2]=t[n+8>>2];t[k+12>>2]=t[n+12>>2];c[r>>3]=+c[k>>3];a=(t[a>>2]|0)+32|0;n=1}c[k+(n<<4)+8>>3]=+c[a+8>>3];t[b>>2]=t[k>>2];t[b+4>>2]=t[k+4>>2];t[b+8>>2]=t[k+8>>2];t[b+12>>2]=t[k+12>>2];t[w>>2]=t[d>>2];t[w+4>>2]=t[d+4>>2];t[w+8>>2]=t[d+8>>2];t[w+12>>2]=t[d+12>>2];RN(v,b,w);t[k>>2]=t[v>>2];t[k+4>>2]=t[v+4>>2];t[k+8>>2]=t[v+8>>2];t[k+12>>2]=t[v+12>>2];t[b>>2]=t[u>>2];t[b+4>>2]=t[u+4>>2];t[b+8>>2]=t[u+8>>2];t[b+12>>2]=t[u+12>>2];t[w>>2]=t[d>>2];t[w+4>>2]=t[d+4>>2];t[w+8>>2]=t[d+8>>2];t[w+12>>2]=t[d+12>>2];RN(g,b,w);t[u>>2]=t[g>>2];t[u+4>>2]=t[g+4>>2];t[u+8>>2]=t[g+8>>2];t[u+12>>2]=t[g+12>>2];li(e,k,2)}iR(e,A,t[(t[l>>2]|0)+(f<<2)>>2]|0);f=f+1|0}h=m;return}function aR(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=(+c[r+8>>3]+ +c[A+8>>3])*.5;c[e>>3]=(+c[r>>3]+ +c[A>>3])*.5;c[e+8>>3]=i;return}function tR(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;r=t[e+60>>2]|0;if(!(((r|0)!=0?(i[r>>0]|0)==(i[A>>0]|0):0)?(e1(r,A)|0)==0:0))a=4;e:do{if((a|0)==4){n=e+56|0;a=t[e+48>>2]|0;r=0;while(1){if((r|0)>=(a|0)){e=0;break e}e=tR(t[(t[n>>2]|0)+(r<<2)>>2]|0,A)|0;if(!e)r=r+1|0;else break}}}while(0);return e|0}function nR(e,A){e=e|0;A=A|0;var r=0;r=A+8|0;c[r>>3]=+c[r>>3]*1.375;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];return}function fR(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0;s=+c[A>>3];a=s*.5;u=+c[A+8>>3];f=u*.5;c[e>>3]=a;i=u*.40909090909090906;c[e+8>>3]=i;c[e+16>>3]=a;n=u*.4592530909090909;c[e+24>>3]=n;l=s*.275892;c[e+32>>3]=l;c[e+40>>3]=f;c[e+48>>3]=0.0;c[e+56>>3]=f;s=s*-.275892;c[e+64>>3]=s;c[e+72>>3]=f;o=-a;c[e+80>>3]=o;c[e+88>>3]=n;r=e+96|0;c[r>>3]=o;c[e+104>>3]=i;A=e+112|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];A=e+128|0;c[A>>3]=o;c[e+136>>3]=u*-.40909090909090906;r=e+144|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];c[e+160>>3]=o;n=-n;c[e+168>>3]=n;c[e+176>>3]=s;f=-f;c[e+184>>3]=f;c[e+192>>3]=0.0;c[e+200>>3]=f;c[e+208>>3]=l;c[e+216>>3]=f;c[e+224>>3]=a;c[e+232>>3]=n;r=e+240|0;c[r>>3]=a;c[e+248>>3]=-i;A=e+256|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];A=e+288|0;r=e+272|0;t[r>>2]=t[e>>2];t[r+4>>2]=t[e+4>>2];t[r+8>>2]=t[e+8>>2];t[r+12>>2]=t[e+12>>2];t[A>>2]=t[e>>2];t[A+4>>2]=t[e+4>>2];t[A+8>>2]=t[e+8>>2];t[A+12>>2]=t[e+12>>2];return}function lR(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0;B=h;h=h+144|0;m=B+112|0;g=B+96|0;p=B+80|0;v=B+64|0;E=B+32|0;k=B+16|0;d=B;n=B+48|0;do{if(e){l=t[e+4>>2]|0;s=t[e>>2]|0;b=(t[(t[(Bd(s)|0)+16>>2]|0)+116>>2]&3)*90|0;t[m>>2]=t[A>>2];t[m+4>>2]=t[A+4>>2];t[m+8>>2]=t[A+8>>2];t[m+12>>2]=t[A+12>>2];LF(n,m,b);t[E>>2]=t[n>>2];t[E+4>>2]=t[n+4>>2];t[E+8>>2]=t[n+8>>2];t[E+12>>2]=t[n+12>>2];if(l|0){r=+c[E>>3];if(!(+c[l>>3]<=r)){e=0;break}if(!(r<=+c[l+16>>3])){e=0;break}r=+c[E+8>>3];if(!(+c[l+8>>3]<=r)){e=0;break}e=r<=+c[l+24>>3];break}if((s|0)==(t[47292]|0)){r=+c[23309];i=+c[23310];f=+c[23311]}else{e=s+16|0;A=t[(t[e>>2]|0)+12>>2]|0;t[47293]=A;t[47294]=t[A+44>>2];t[47295]=t[A+8>>2];if(!(t[A+40>>2]&2048)){u=(t[(t[(Bd(s)|0)+16>>2]|0)+116>>2]&1|0)==0;b=t[e>>2]|0;c[(u?186496:186504)>>3]=+c[b+96>>3]+ +c[b+88>>3];c[(u?186504:186496)>>3]=+c[b+80>>3];f=+c[b+32>>3]*72.0;a=+c[b+40>>3]*72.0;a=+(~~(a+(a>=0.0?.5:-.5))|0);f=+(~~(f+(f>=0.0?.5:-.5))|0)}else{Jx(m,A);f=+c[m+16>>3]-+c[m>>3];a=+c[m+24>>3]-+c[m+8>>3];b=(t[(t[(Bd(s)|0)+16>>2]|0)+116>>2]&1|0)==0;c[(b?186496:186504)>>3]=f;c[(b?186504:186496)>>3]=a}r=+c[23312];if(r==0.0){c[23312]=1.0;r=1.0}i=+c[23313];if(i==0.0){c[23313]=1.0;i=1.0}r=f/r;c[23309]=r;i=a/i;c[23310]=i;f=f*.5;c[23311]=f;c[23314]=a*.5;b=P((t[(t[47293]|0)+4>>2]|0)+-1|0,t[47295]|0)|0;t[47296]=(b|0)>0?b:0;t[47292]=s}a=+c[E>>3]*r;c[E>>3]=a;b=E+8|0;r=+c[b>>3]*i;c[b>>3]=r;if(!(+Q(+a)>f)?(i=+Q(+r),w=+c[23314],!(i>w)):0){b=t[47295]|0;if((b|0)<3){e=+g1(a/f,r/w)<1.0;break}A=(t[47297]|0)%(b|0)|0;e=(A+1|0)%(b|0)|0;s=t[47294]|0;o=t[47296]|0;u=s+(o+A<<4)|0;t[k>>2]=t[u>>2];t[k+4>>2]=t[u+4>>2];t[k+8>>2]=t[u+8>>2];t[k+12>>2]=t[u+12>>2];u=s+(o+e<<4)|0;t[d>>2]=t[u>>2];t[d+4>>2]=t[u+4>>2];t[d+8>>2]=t[u+8>>2];t[d+12>>2]=t[u+12>>2];t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[p>>2]=t[46630];t[p+4>>2]=t[46631];t[p+8>>2]=t[46632];t[p+12>>2]=t[46633];t[g>>2]=t[k>>2];t[g+4>>2]=t[k+4>>2];t[g+8>>2]=t[k+8>>2];t[g+12>>2]=t[k+12>>2];t[m>>2]=t[u>>2];t[m+4>>2]=t[u+4>>2];t[m+8>>2]=t[u+8>>2];t[m+12>>2]=t[u+12>>2];if(XN(v,p,g,m)|0){t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[p>>2]=t[k>>2];t[p+4>>2]=t[k+4>>2];t[p+8>>2]=t[k+8>>2];t[p+12>>2]=t[k+12>>2];t[g>>2]=t[d>>2];t[g+4>>2]=t[d+4>>2];t[g+8>>2]=t[d+8>>2];t[g+12>>2]=t[d+12>>2];t[m>>2]=t[46630];t[m+4>>2]=t[46631];t[m+8>>2]=t[46632];t[m+12>>2]=t[46633];u=(XN(v,p,g,m)|0)!=0;if(u?(t[v>>2]=t[E>>2],t[v+4>>2]=t[E+4>>2],t[v+8>>2]=t[E+8>>2],t[v+12>>2]=t[E+12>>2],t[p>>2]=t[d>>2],t[p+4>>2]=t[d+4>>2],t[p+8>>2]=t[d+8>>2],t[p+12>>2]=t[d+12>>2],t[g>>2]=t[46630],t[g+4>>2]=t[46631],t[g+8>>2]=t[46632],t[g+12>>2]=t[46633],t[m>>2]=t[k>>2],t[m+4>>2]=t[k+4>>2],t[m+8>>2]=t[k+8>>2],t[m+12>>2]=t[k+12>>2],(XN(v,p,g,m)|0)!=0):0){e=1;break}else{l=A;A=1}while(1){if((A|0)>=(b|0)){A=31;break}if(u){n=e;e=(e+1|0)%(b|0)|0}else{n=(l+-1+b|0)%(b|0)|0;e=l}k=s+(o+n<<4)|0;d=s+(o+e<<4)|0;t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];t[p>>2]=t[46630];t[p+4>>2]=t[46631];t[p+8>>2]=t[46632];t[p+12>>2]=t[46633];t[g>>2]=t[k>>2];t[g+4>>2]=t[k+4>>2];t[g+8>>2]=t[k+8>>2];t[g+12>>2]=t[k+12>>2];t[m>>2]=t[d>>2];t[m+4>>2]=t[d+4>>2];t[m+8>>2]=t[d+8>>2];t[m+12>>2]=t[d+12>>2];if(!(XN(v,p,g,m)|0)){A=30;break}else{l=n;A=A+1|0}}if((A|0)==30){t[47297]=n;e=0;break}else if((A|0)==31){t[47297]=l;e=1;break}}else e=0}else e=0}else{t[47292]=0;e=0}}while(0);h=B;return e&1|0}function sR(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0.0,f=0,l=0,s=0;l=h;h=h+32|0;a=l+16|0;f=l;if(e){e=t[e>>2]|0;s=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&3)*90|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];LF(f,a,s);n=+c[f>>3];i=+c[f+8>>3];if((e|0)==(t[47300]|0))r=+c[23317];else{f=t[(t[e+16>>2]|0)+12>>2]|0;s=(t[f+4>>2]<<1)+-2|0;r=+c[(t[f+44>>2]|0)+((((s|0)>0?s:0)|1)<<4)>>3];c[23317]=r;t[47300]=e}if(+Q(+n)>r|+Q(+i)>r)e=0;else e=+g1(n,i)<=r&1}else{t[47300]=0;e=0}h=l;return e|0}function cR(e,A){e=e|0;A=A|0;var r=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0.0,p=0,E=0;g=h;h=h+16|0;l=g;d=t[e+16>>2]|0;v=d+208|0;r=t[v>>2]|0;if((r|0)==0?(a[d+260>>1]&1)==0:0)k=0;else if(!(t[e+152>>2]&4)){Tr(e,r,t[d+228>>2]|0,t[d+244>>2]|0,t[d+212>>2]|0);k=1}else k=1;u=A+16|0;s=t[(t[u>>2]|0)+12>>2]|0;b=t[s+44>>2]|0;w=t[s+8>>2]|0;s=t[s+4>>2]|0;if((t[47298]|0)<(w|0)){r=w+2|0;t[47298]=r;f=t[47299]|0;if(!f)r=$F(r<<4)|0;else r=AM(f,r<<4)|0;t[47299]=r}JN(A,l)|0;if(!(t[l>>2]&32))ii(e,22020);else ii(e,22016);r=t[47172]|0;if(r|0)ui(e,+wx(A,r,1.0,0.0));r=n[(t[u>>2]|0)+117>>0]|0;do{if(!(r&1)){if(r&2|0){$r(e,vx(A,0,106256)|0);r=vx(A,0,106264)|0;Ai(e,r);break}if(r&8|0){$r(e,vx(A,0,106272)|0);r=vx(A,0,106280)|0;Ai(e,r);break}if(!(r&4)){r=xN(A,137314)|0;Ai(e,r);VN(e,A)|0;break}else{$r(e,vx(A,0,106288)|0);r=vx(A,0,106296)|0;Ai(e,r);break}}else{$r(e,vx(A,0,106240)|0);r=vx(A,0,106248)|0;Ai(e,r)}}while(0);if(!s)if(!(i[r>>0]|0))f=1;else{$r(e,r);f=1}else f=s;l=1;A=0;while(1){if((A|0)>=(f|0))break;s=P(A,w)|0;o=t[47299]|0;r=0;while(1){if((r|0)>=(w|0))break;E=r+s|0;m=+c[b+(E<<4)+8>>3];p=t[u>>2]|0;c[o+(r<<4)>>3]=+c[p+16>>3]+ +c[b+(E<<4)>>3];c[o+(r<<4)+8>>3]=+c[p+24>>3]+m;r=r+1|0}ai(e,o,w,l);l=0;A=A+1|0}if(k){if(t[e+152>>2]&4|0)Tr(e,t[v>>2]|0,t[d+228>>2]|0,t[d+244>>2]|0,t[d+212>>2]|0);Or(e)}h=g;return}function oR(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,f=0;a=h;h=h+48|0;f=a;r=uR(A,r,i)|0;t[f+36>>2]=t[i+36>>2];SN(A,t[i+24>>2]|0,f,r,n[i+33>>0]|0,0)|0;A=f;r=e+40|0;do{t[e>>2]=t[A>>2];e=e+4|0;A=A+4|0}while((e|0)<(r|0));h=a;return}function uR(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0.0,l=0.0,s=0,o=0.0,u=0.0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0.0,G=0;C=h;h=h+32|0;y=C;n=C+24|0;s=C+16|0;B=t[(t[(t[(Bd(e)|0)+60>>2]|0)+16>>2]|0)+116>>2]&3;a=e+16|0;E=(t[a>>2]|0)+16|0;t[y>>2]=t[E>>2];t[y+4>>2]=t[E+4>>2];t[y+8>>2]=t[E+8>>2];t[y+12>>2]=t[E+12>>2];bR(n,y,B);E=(t[A+16>>2]|0)+16|0;t[y>>2]=t[E>>2];t[y+4>>2]=t[E+4>>2];t[y+8>>2]=t[E+8>>2];t[y+12>>2]=t[E+12>>2];bR(s,y,B);B=i[r+33>>0]|0;y=B&255;e:do{switch(B<<24>>24){case 0:case 15:{A=0;break}default:{A=t[r+24>>2]|0;if(!A){B=(t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1|0)==0;E=t[a>>2]|0;Z=+c[E+80>>3]*.5;I=-Z;o=+c[E+88>>3];l=-o;u=B?l:I;f=B?o:Z;o=B?Z:o;l=B?I:l}else{u=+c[A>>3];f=+c[A+16>>3];o=+c[A+24>>3];l=+c[A+8>>3]}B=t[n>>2]|0;p=t[n+4>>2]|0;E=t[s>>2]|0;v=t[s+4>>2]|0;g=~~l;m=~~((f+u)*.5);d=~~f;k=~~((o+l)*.5);w=~~o;b=~~u;n=0;s=0;A=0;r=0;e=0;while(1){if((s|0)==4)break e;if(1<>2]|0;else a=n}else a=n;n=a;s=s+1|0}}}}while(0);h=C;return A|0}function bR(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;switch(r|0){case 0:{a=+c[A>>3];i=+c[A+8>>3];break}case 2:{a=+c[A>>3];i=-+c[A+8>>3];break}case 1:{a=-+c[A+8>>3];i=+c[A>>3];break}case 3:{a=+c[A+8>>3];i=+c[A>>3];break}default:{a=0.0;i=0.0}}t[e>>2]=~~(a+(a>=0.0?.5:-.5));t[e+4>>2]=~~(i+(i>=0.0?.5:-.5));return}function hR(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+80|0;a=l+40|0;f=l;n=e+16|0;r=t[n>>2]|0;A=r+16|0;if(i[r+47>>0]|0){r=t[e>>2]&3;oR(a,t[((r|0)==3?e:e+48|0)+40>>2]|0,t[((r|0)==2?e:e+-48|0)+40>>2]|0,A);r=a;a=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(a|0));r=t[n>>2]|0}A=r+56|0;if(i[r+87>>0]|0){r=t[e>>2]&3;oR(f,t[((r|0)==2?e:e+-48|0)+40>>2]|0,t[((r|0)==3?e:e+48|0)+40>>2]|0,A);r=f;a=A+40|0;do{t[A>>2]=t[r>>2];A=A+4|0;r=r+4|0}while((A|0)<(a|0))}h=l;return}function wR(){var e=0,A=0,r=0;e=h;h=h+32|0;A=e+16|0;r=e;t[r>>2]=0;t[r+4>>2]=0;t[r+8>>2]=0;t[r+12>>2]=0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];lR(0,A)|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];sR(0,A)|0;t[A>>2]=t[r>>2];t[A+4>>2]=t[r+4>>2];t[A+8>>2]=t[r+8>>2];t[A+12>>2]=t[r+12>>2];zN(0,A)|0;h=e;return}function kR(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0.0,k=0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;C=h;h=h+192|0;v=C+176|0;B=C+112|0;y=C+48|0;g=C+32|0;m=C+24|0;p=C+16|0;E=C;if(!(i<<24>>24)){s=r+48|0;t[g>>2]=t[s>>2];t[g+4>>2]=t[s+4>>2];t[g+8>>2]=t[s+8>>2];t[g+12>>2]=t[s+12>>2];s=m;o=p;u=B;b=0}else{t[g>>2]=t[r>>2];t[g+4>>2]=t[r+4>>2];t[g+8>>2]=t[r+8>>2];t[g+12>>2]=t[r+12>>2];s=p;o=m;u=0;b=B}c[m>>3]=0.0;c[p>>3]=1.0;k=g+8|0;a=0.0;n=1.0;l=0;w=+c[g>>3];while(1){d=+c[k>>3];a=(a+n)*.5;Zx(E,r,3,a,u,b);t[g>>2]=t[E>>2];t[g+4>>2]=t[E+4>>2];t[g+8>>2]=t[E+8>>2];t[g+12>>2]=t[E+12>>2];t[v>>2]=t[E>>2];t[v+4>>2]=t[E+4>>2];t[v+8>>2]=t[E+8>>2];t[v+12>>2]=t[E+12>>2];e:do{if(!((Z5[A&127](e,v)|0)<<24>>24)){i=0;while(1){if((i|0)==4){i=s;l=1;break e}l=y+(i<<4)|0;I=B+(i<<4)|0;t[l>>2]=t[I>>2];t[l+4>>2]=t[I+4>>2];t[l+8>>2]=t[I+8>>2];t[l+12>>2]=t[I+12>>2];i=i+1|0}}else i=o}while(0);c[i>>3]=a;f=+c[g>>3];w=w-f;if(!((w>=0.0?w:-w)>.5)?(d=d-+c[k>>3],!((d>=0.0?d:-d)>.5)):0)break;a=+c[m>>3];n=+c[p>>3];w=f}e:do{if(!(l<<24>>24)){i=0;while(1){if((i|0)==4)break e;I=r+(i<<4)|0;y=B+(i<<4)|0;t[I>>2]=t[y>>2];t[I+4>>2]=t[y+4>>2];t[I+8>>2]=t[y+8>>2];t[I+12>>2]=t[y+12>>2];i=i+1|0}}else{i=0;while(1){if((i|0)==4)break e;I=r+(i<<4)|0;B=y+(i<<4)|0;t[I>>2]=t[B>>2];t[I+4>>2]=t[B+4>>2];t[I+8>>2]=t[B+8>>2];t[I+12>>2]=t[B+12>>2];i=i+1|0}}}while(0);h=C;return}function dR(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0;o=h;h=h+48|0;r=o+16|0;i=o;a=o+32|0;n=e+16|0;f=t[n>>2]|0;l=t[f+8>>2]|0;if(l|0?(s=l+4|0,t[(t[s>>2]|0)+12>>2]|0):0){t[a>>2]=e;t[a+4>>2]=0;u=+c[f+96>>3];c[i>>3]=+c[A>>3]-+c[f+16>>3];c[i+8>>3]=+c[A+8>>3]-+c[f+24>>3];s=t[(t[s>>2]|0)+12>>2]|0;t[r>>2]=t[i>>2];t[r+4>>2]=t[i+4>>2];t[r+8>>2]=t[i+8>>2];t[r+12>>2]=t[i+12>>2];s=Z5[s&127](a,r)|0;c[(t[n>>2]|0)+96>>3]=u;vR(a,e,A,s)}h=o;return}function vR(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,o=0,u=0;u=h;h=h+64|0;o=u;l=A+16|0;n=t[l>>2]|0;s=+c[n+96>>3];f=n+16|0;a=n+24|0;A=0;while(1){if((A|0)==4)break;c[o+(A<<4)>>3]=+c[r+(A<<4)>>3]-+c[f>>3];c[o+(A<<4)+8>>3]=+c[r+(A<<4)+8>>3]-+c[a>>3];A=A+1|0}kR(e,t[(t[(t[n+8>>2]|0)+4>>2]|0)+12>>2]|0,o,i);A=0;while(1){if((A|0)==4)break;i=t[l>>2]|0;c[r+(A<<4)>>3]=+c[i+16>>3]+ +c[o+(A<<4)>>3];c[r+(A<<4)+8>>3]=+c[i+24>>3]+ +c[o+(A<<4)+8>>3];A=A+1|0}c[(t[l>>2]|0)+96>>3]=s;h=u;return}function gR(e,A){e=e|0;A=A|0;var r=0,a=0;while(1){a=e+16|0;e=t[a>>2]|0;if(!(i[e+112>>0]|0))break;e=t[e+116>>2]|0}e=t[e+8>>2]|0;if(!e){e=KF(40)|0;t[(t[a>>2]|0)+8>>2]=e}r=t[e>>2]|0;if(!r)e=$F(((t[e+4>>2]|0)*48|0)+48|0)|0;else e=AM(r,((t[e+4>>2]|0)*48|0)+48|0)|0;a=t[(t[a>>2]|0)+8>>2]|0;t[a>>2]=e;a=a+4|0;r=t[a>>2]|0;t[a>>2]=r+1;a=e+(r*48|0)|0;t[a>>2]=KF(A<<4)|0;t[e+(r*48|0)+4>>2]=A;e=e+(r*48|0)+8|0;r=e+40|0;do{t[e>>2]=0;e=e+4|0}while((e|0)<(r|0));return a|0}function mR(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0.0,D=0.0;L=h;h=h+96|0;I=L+16|0;m=L;B=L+92|0;y=L+88|0;p=L+80|0;o=t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;C=Bd(o)|0;Z=gR(e,a)|0;u=e;while(1){b=t[u+16>>2]|0;if(!(i[b+112>>0]|0))break;u=t[b+116>>2]|0}if((i[f+8>>0]|0)==0?(l=t[o+16>>2]|0,s=t[A+16>>2]|0,(t[l+232>>2]|0)==(t[s+232>>2]|0)):0){w=(t[l+236>>2]|0)>(t[s+236>>2]|0);E=w?o:A;o=w?A:o}else E=A;if((o|0)==(t[((t[u>>2]&3|0)==3?u:u+48|0)+40>>2]|0)){l=b+80|0;s=b+40|0;w=n[b+86>>0]|0;A=n[b+46>>0]|0}else{l=b+40|0;s=b+80|0;w=n[b+46>>0]|0;A=n[b+86>>0]|0}b=t[l>>2]|0;l=t[s>>2]|0;if(((A|0)!=0?(d=o+16|0,k=t[(t[d>>2]|0)+8>>2]|0,(k|0)!=0):0)?(t[(t[k+4>>2]|0)+12>>2]|0)!=0:0){t[p>>2]=o;t[p+4>>2]=l;l=a+-4|0;A=m+8|0;s=0;while(1){if((s|0)>=(l|0))break;u=s+3|0;k=t[d>>2]|0;c[m>>3]=+c[r+(u<<4)>>3]-+c[k+16>>3];c[A>>3]=+c[r+(u<<4)+8>>3]-+c[k+24>>3];k=t[(t[(t[k+8>>2]|0)+4>>2]|0)+12>>2]|0;t[I>>2]=t[m>>2];t[I+4>>2]=t[m+4>>2];t[I+8>>2]=t[m+8>>2];t[I+12>>2]=t[m+12>>2];if(!((Z5[k&127](p,I)|0)<<24>>24))break;else s=u}t[B>>2]=s;vR(p,o,r+(s<<4)|0,1)}else{t[B>>2]=0;s=0}if(((w|0)!=0?(g=E+16|0,v=t[(t[g>>2]|0)+8>>2]|0,(v|0)!=0):0)?(t[(t[v+4>>2]|0)+12>>2]|0)!=0:0){t[p>>2]=E;t[p+4>>2]=b;o=a+-4|0;A=m+8|0;l=o;while(1){if((l|0)<=0)break;a=t[g>>2]|0;c[m>>3]=+c[r+(l<<4)>>3]-+c[a+16>>3];c[A>>3]=+c[r+(l<<4)+8>>3]-+c[a+24>>3];a=t[(t[(t[a+8>>2]|0)+4>>2]|0)+12>>2]|0;t[I>>2]=t[m>>2];t[I+4>>2]=t[m+4>>2];t[I+8>>2]=t[m+8>>2];t[I+12>>2]=t[m+12>>2];if(!((Z5[a&127](p,I)|0)<<24>>24))break;l=l+-3|0}t[y>>2]=l;vR(p,E,r+(l<<4)|0,0)}else{o=a+-4|0;t[y>>2]=o;l=o}while(1){if((s|0)>=(o|0))break;A=s+3|0;Q=+c[r+(s<<4)>>3]-+c[r+(A<<4)>>3];D=+c[r+(s<<4)+8>>3]-+c[r+(A<<4)+8>>3];if(D*D+Q*Q<1.0e-06)s=A;else break}t[B>>2]=s;while(1){if((l|0)<=0)break;p=l+3|0;D=+c[r+(l<<4)>>3]-+c[r+(p<<4)>>3];Q=+c[r+(l<<4)+8>>3]-+c[r+(p<<4)+8>>3];if(!(Q*Q+D*D<1.0e-06))break;l=l+-3|0}t[y>>2]=l;pR(e,E,r,B,y,Z,f);d=t[B>>2]|0;u=t[y>>2]|0;o=u+4|0;u=u+3|0;b=I+16|0;w=I+32|0;k=I+48|0;s=C+16|0;l=d;while(1){if((l|0)>=(o|0))break;C=(t[Z>>2]|0)+(l-d<<4)|0;A=r+(l<<4)|0;t[C>>2]=t[A>>2];t[C+4>>2]=t[A+4>>2];t[C+8>>2]=t[A+8>>2];t[C+12>>2]=t[A+12>>2];t[I>>2]=t[A>>2];t[I+4>>2]=t[A+4>>2];t[I+8>>2]=t[A+8>>2];t[I+12>>2]=t[A+12>>2];A=l+1|0;if((l|0)>=(u|0)){G=38;break}y=(t[Z>>2]|0)+(A-d<<4)|0;C=r+(A<<4)|0;t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];t[b>>2]=t[C>>2];t[b+4>>2]=t[C+4>>2];t[b+8>>2]=t[C+8>>2];t[b+12>>2]=t[C+12>>2];C=l+2|0;y=(t[Z>>2]|0)+(C-d<<4)|0;C=r+(C<<4)|0;t[y>>2]=t[C>>2];t[y+4>>2]=t[C+4>>2];t[y+8>>2]=t[C+8>>2];t[y+12>>2]=t[C+12>>2];t[w>>2]=t[C>>2];t[w+4>>2]=t[C+4>>2];t[w+8>>2]=t[C+8>>2];t[w+12>>2]=t[C+12>>2];C=l+3|0;y=r+(C<<4)|0;t[k>>2]=t[y>>2];t[k+4>>2]=t[y+4>>2];t[k+8>>2]=t[y+8>>2];t[k+12>>2]=t[y+12>>2];oB((t[s>>2]|0)+16|0,I);l=C}t[Z+4>>2]=o-d;h=L;return}function pR(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;var s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+16|0;o=w+4|0;u=w;b=e;while(1){s=t[(t[b+16>>2]|0)+116>>2]|0;if(!s)break;else b=s}if(!(i[l+8>>0]|0))s=(I5[t[l>>2]&63](b)|0)&255;else s=0;WE(b,o,u);c=l+4|0;if((I5[t[c>>2]&63](A)|0)<<24>>24)t[u>>2]=0;if((I5[t[c>>2]&63](t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)<<24>>24)t[o>>2]=0;if(s|0){A=t[o>>2]|0;t[o>>2]=t[u>>2];t[u>>2]=A}if(!(i[l+9>>0]|0)){s=t[o>>2]|0;if(s|0)t[a>>2]=TE(b,r,t[a>>2]|0,t[n>>2]|0,f,s)|0;s=t[u>>2]|0;if(s|0)t[n>>2]=jE(b,r,t[a>>2]|0,t[n>>2]|0,f,s)|0}else{c=t[u>>2]|0;s=t[o>>2]|0;if(s|c|0)OE(b,r,t[a>>2]|0,t[n>>2]|0,f,s,c)}h=w;return}function ER(e,A){e=e|0;A=A|0;var r=0,i=0;if(+c[A>>3]<+c[A+16>>3]?+c[A+8>>3]<+c[A+24>>3]:0){r=t[e+84>>2]|0;i=e+80|0;e=t[i>>2]|0;t[i>>2]=e+1;e=r+(e<<5)|0;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];t[e+16>>2]=t[A+16>>2];t[e+20>>2]=t[A+20>>2];t[e+24>>2]=t[A+24>>2];t[e+28>>2]=t[A+28>>2]}return}function BR(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0.0;B=h;h=h+112|0;m=B+72|0;b=B+56|0;u=B+16|0;k=B;l=t[A>>2]&3;w=A+48|0;E=t[((l|0)==3?A:w)+40>>2]|0;g=A+16|0;d=t[g>>2]|0;f=d+16|0;if(i[d+47>>0]|0){oR(u,E,t[((l|0)==2?A:A+-48|0)+40>>2]|0,f);l=u;u=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(u|0))}d=E+16|0;l=t[d>>2]|0;f=t[l+8>>2]|0;if(!f)u=0;else u=t[(t[f+4>>2]|0)+16>>2]|0;f=l+16|0;l=(t[g>>2]|0)+16|0;t[b>>2]=t[f>>2];t[b+4>>2]=t[f+4>>2];t[b+8>>2]=t[f+8>>2];t[b+12>>2]=t[f+12>>2];t[m>>2]=t[l>>2];t[m+4>>2]=t[l+4>>2];t[m+8>>2]=t[l+8>>2];t[m+12>>2]=t[l+12>>2];yR(k,b,m);t[e>>2]=t[k>>2];t[e+4>>2]=t[k+4>>2];t[e+8>>2]=t[k+8>>2];t[e+12>>2]=t[k+12>>2];if(!(n<<24>>24)){f=t[g>>2]|0;if(!(i[f+45>>0]|0))f=0;else{s=+c[f+32>>3];p=9}}else{s=+CR(t[((t[A>>2]&3|0)==3?A:w)+40>>2]|0);p=9}if((p|0)==9){c[e+16>>3]=s;f=1}i[e+29>>0]=f;t[e+80>>2]=0;t[e+88>>2]=A;k=a+32|0;t[k>>2]=t[e>>2];t[k+4>>2]=t[e+4>>2];t[k+8>>2]=t[e+8>>2];t[k+12>>2]=t[e+12>>2];switch(r|0){case 1:{l=t[d>>2]|0;if((i[l+156>>0]|0)==0?(k=i[(t[g>>2]|0)+49>>0]|0,v=k&255,k<<24>>24!=0):0){t[m>>2]=t[a>>2];t[m+4>>2]=t[a+4>>2];t[m+8>>2]=t[a+8>>2];t[m+12>>2]=t[a+12>>2];t[m+16>>2]=t[a+16>>2];t[m+20>>2]=t[a+20>>2];t[m+24>>2]=t[a+24>>2];t[m+28>>2]=t[a+28>>2];do{if(!(v&4)){if(v&1|0){t[a+48>>2]=1;f=m+24|0;c[f>>3]=+c[(+c[f>>3]>+c[e+8>>3]?m+16|0:e)+8>>3];f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1;break}f=a+48|0;if(!(v&8)){t[f>>2]=2;c[m>>3]=+c[e>>3];c[m+8>>3]=+c[l+24>>3]-+c[l+80>>3]*.5;c[m+24>>3]=+c[e+8>>3];f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1;break}else{t[f>>2]=8;c[m+16>>3]=+c[e>>3];c[m+8>>3]=+c[l+24>>3]-+c[l+80>>3]*.5;c[m+24>>3]=+c[e+8>>3];f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1;break}}else{t[a+48>>2]=4;s=+c[m>>3];if(+c[e>>3]<+c[l+16>>3]){C=s+-1.0;y=+c[e+8>>3];e=m+16|0;s=+c[e>>3];o=+c[l+80>>3]*.5+ +c[l+24>>3];o=o+ +((t[(t[(Bd(E)|0)+16>>2]|0)+252>>2]|0)/2|0|0);f=t[d>>2]|0;c[e>>3]=+c[f+16>>3]-+c[f+88>>3];c[m+24>>3]=y;c[m+8>>3]=+c[f+24>>3]-+c[f+80>>3]*.5;c[m>>3]=C;c[a+56>>3]=C;c[a+64>>3]=y;c[a+72>>3]=s;c[a+80>>3]=o;f=a+88|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=2;break}else{o=+c[e+8>>3];f=m+16|0;y=+c[f>>3]+1.0;C=+c[l+80>>3]*.5+ +c[l+24>>3];C=C+ +((t[(t[(Bd(E)|0)+16>>2]|0)+252>>2]|0)/2|0|0);e=t[d>>2]|0;c[m>>3]=+c[e+96>>3]+ +c[e+16>>3];c[m+24>>3]=o;c[m+8>>3]=+c[e+24>>3]-+c[e+80>>3]*.5;c[f>>3]=y;c[a+56>>3]=s;c[a+64>>3]=o;c[a+72>>3]=y;c[a+80>>3]=C;f=a+88|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=2;break}}}while(0);t[a+52>>2]=f;while(1){f=t[A+16>>2]|0;if(!(i[f+112>>0]|0))break;A=t[f+116>>2]|0}i[((E|0)==(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)?f+16|0:f+56|0)+30>>0]=0}else{l=1;p=47}break}case 2:{v=i[(t[g>>2]|0)+49>>0]|0;l=v&255;if(!(v<<24>>24))p=46;else{t[m>>2]=t[a>>2];t[m+4>>2]=t[a+4>>2];t[m+8>>2]=t[a+8>>2];t[m+12>>2]=t[a+12>>2];t[m+16>>2]=t[a+16>>2];t[m+20>>2]=t[a+20>>2];t[m+24>>2]=t[a+24>>2];t[m+28>>2]=t[a+28>>2];do{if(!(l&4)){if(l&1|0)if((t[a+48>>2]|0)==4){f=t[d>>2]|0;C=+c[f+24>>3]-+c[f+80>>3]*.5;f=m+16|0;y=+c[f>>3]+1.0;s=+c[e>>3];o=C-+((t[(t[(Bd(E)|0)+16>>2]|0)+252>>2]|0)/2|0|0);e=t[d>>2]|0;c[m>>3]=+c[e+96>>3]+ +c[e+16>>3];c[m+8>>3]=C;c[m+24>>3]=+c[e+80>>3]*.5+ +c[e+24>>3];c[f>>3]=y;c[a+56>>3]=s;c[a+64>>3]=o;c[a+72>>3]=y;c[a+80>>3]=C;f=a+88|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=2;break}else{f=m+24|0;c[f>>3]=+c[(+c[f>>3]>+c[e+8>>3]?m+16|0:e)+8>>3];f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1;break}s=+c[e>>3];if(!(l&8)){c[m>>3]=s;r=t[d>>2]|0;s=+c[r+24>>3];o=+c[r+80>>3]*.5;if((t[a+48>>2]|0)==4){c[m+24>>3]=o+s;s=+c[e+8>>3];f=m}else{c[m+8>>3]=s-o;s=+c[e+8>>3]+1.0;f=m+16|0}c[f+8>>3]=s;f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1;break}else{f=m+16|0;c[f>>3]=s+1.0;r=t[d>>2]|0;s=+c[r+24>>3];o=+c[r+80>>3]*.5;if((t[a+48>>2]|0)==4){c[m+24>>3]=o+s;s=+c[e+8>>3]+-1.0;f=m}else{c[m+8>>3]=s-o;s=+c[e+8>>3]+1.0}c[f+8>>3]=s;f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1;break}}else{f=m+8|0;c[f>>3]=+c[(+c[f>>3]<+c[e+8>>3]?m:e)+8>>3];f=a+56|0;t[f>>2]=t[m>>2];t[f+4>>2]=t[m+4>>2];t[f+8>>2]=t[m+8>>2];t[f+12>>2]=t[m+12>>2];t[f+16>>2]=t[m+16>>2];t[f+20>>2]=t[m+20>>2];t[f+24>>2]=t[m+24>>2];t[f+28>>2]=t[m+28>>2];f=1}}while(0);t[a+52>>2]=f;while(1){f=t[A+16>>2]|0;if(!(i[f+112>>0]|0))break;A=t[f+116>>2]|0}i[((E|0)==(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)?f+16|0:f+56|0)+30>>0]=0;t[a+48>>2]=l}break}default:p=46}if((p|0)==46){l=t[a+48>>2]|0;p=47}e:do{if((p|0)==47){if(u){A=a+56|0;f=a+52|0;l=D5[u&127](E,(t[g>>2]|0)+16|0,l,A,f)|0;if(l){t[a+48>>2]=l;break}}else{f=a+52|0;A=a+56|0}t[A>>2]=t[a>>2];t[A+4>>2]=t[a+4>>2];t[A+8>>2]=t[a+8>>2];t[A+12>>2]=t[a+12>>2];t[A+16>>2]=t[a+16>>2];t[A+20>>2]=t[a+20>>2];t[A+24>>2]=t[a+24>>2];t[A+28>>2]=t[a+28>>2];t[f>>2]=1;switch(r|0){case 8:{ge(138394,106514,569,106524);break}case 2:{c[((t[a+48>>2]|0)==4?a+56|0:a+72|0)+8>>3]=+c[e+8>>3];break e}case 1:{c[a+80>>3]=+c[e+8>>3];t[a+48>>2]=1;break e}default:break e}}}while(0);h=B;return}function yR(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[r+8>>3]+ +c[A+8>>3];c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=i;return}function CR(e){e=e|0;var A=0.0,r=0,i=0,a=0.0,n=0,f=0,l=0,s=0.0,o=0.0;f=t[e+16>>2]|0;l=t[f+172>>2]|0;a=0.0;n=0;while(1){e=t[l+(n<<2)>>2]|0;if(!e)break;a=+c[(t[(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+16>>3]+a;n=n+1|0}i=t[f+180>>2]|0;A=0.0;e=0;while(1){r=t[i+(e<<2)>>2]|0;if(!r)break;A=+c[(t[(t[((t[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+16>>3]+A;e=e+1|0}s=+c[f+16>>3];o=+c[f+24>>3];l=t[l>>2]|0;a=+R(+(o-+c[(t[(t[((t[l>>2]&3|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+24>>3]),+(s-a/+(n|0)));l=t[i>>2]|0;return+((+R(+(+c[(t[(t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+24>>3]-o),+(A/+(e|0)-s))+a)*.5)}function IR(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0.0;C=h;h=h+112|0;E=C+72|0;w=C+56|0;u=C+16|0;g=C;l=t[A>>2]&3;d=A+-48|0;y=t[((l|0)==2?A:d)+40>>2]|0;m=A+16|0;v=t[m>>2]|0;f=v+56|0;if(i[v+87>>0]|0){oR(u,y,t[((l|0)==3?A:A+48|0)+40>>2]|0,f);l=u;u=f+40|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(u|0))}v=y+16|0;l=t[v>>2]|0;f=t[l+8>>2]|0;if(!f)b=0;else b=t[(t[f+4>>2]|0)+16>>2]|0;u=e+40|0;f=l+16|0;l=(t[m>>2]|0)+56|0;t[w>>2]=t[f>>2];t[w+4>>2]=t[f+4>>2];t[w+8>>2]=t[f+8>>2];t[w+12>>2]=t[f+12>>2];t[E>>2]=t[l>>2];t[E+4>>2]=t[l+4>>2];t[E+8>>2]=t[l+8>>2];t[E+12>>2]=t[l+12>>2];yR(g,w,E);t[u>>2]=t[g>>2];t[u+4>>2]=t[g+4>>2];t[u+8>>2]=t[g+8>>2];t[u+12>>2]=t[g+12>>2];if(!(n<<24>>24)){f=t[m>>2]|0;if(!(i[f+85>>0]|0))k=0;else{c[e+56>>3]=+c[f+72>>3];k=1}}else{o=+CR(t[((t[A>>2]&3|0)==2?A:d)+40>>2]|0)+3.141592653589793;c[e+56>>3]=o;if(o<6.283185307179586)k=1;else ge(106534,106514,606,106558)}i[e+69>>0]=k;g=a+32|0;t[g>>2]=t[u>>2];t[g+4>>2]=t[u+4>>2];t[g+8>>2]=t[u+8>>2];t[g+12>>2]=t[u+12>>2];switch(r|0){case 1:{l=t[v>>2]|0;if((i[l+156>>0]|0)==0?(g=i[(t[m>>2]|0)+89>>0]|0,p=g&255,g<<24>>24!=0):0){t[E>>2]=t[a>>2];t[E+4>>2]=t[a+4>>2];t[E+8>>2]=t[a+8>>2];t[E+12>>2]=t[a+12>>2];t[E+16>>2]=t[a+16>>2];t[E+20>>2]=t[a+20>>2];t[E+24>>2]=t[a+24>>2];t[E+28>>2]=t[a+28>>2];do{if(!(p&4))if(!(p&1)){f=a+48|0;if(!(p&8)){t[f>>2]=2;c[E>>3]=+c[u>>3];c[E+24>>3]=+c[l+80>>3]*.5+ +c[l+24>>3];c[E+8>>3]=+c[e+48>>3];f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1;break}else{t[f>>2]=8;c[E+16>>3]=+c[u>>3];c[E+24>>3]=+c[l+80>>3]*.5+ +c[l+24>>3];c[E+8>>3]=+c[e+48>>3];f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1;break}}else{t[a+48>>2]=1;s=+c[E>>3];if(+c[u>>3]<+c[l+16>>3]){Z=s+-1.0;o=+c[e+48>>3];e=E+16|0;s=+c[e>>3];I=+c[l+80>>3]*-.5+ +c[l+24>>3];I=I-+((t[(t[(Bd(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);f=t[v>>2]|0;c[e>>3]=+c[f+16>>3]-+c[f+88>>3];c[E+8>>3]=o;c[E+24>>3]=+c[f+80>>3]*.5+ +c[f+24>>3];c[E>>3]=Z;c[a+56>>3]=Z;c[a+64>>3]=I;c[a+72>>3]=s;c[a+80>>3]=o;f=a+88|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=2;break}else{Z=+c[e+48>>3];f=E+16|0;I=+c[f>>3]+1.0;o=+c[l+80>>3]*-.5+ +c[l+24>>3];o=o-+((t[(t[(Bd(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);e=t[v>>2]|0;c[E>>3]=+c[e+96>>3]+ +c[e+16>>3];c[E+8>>3]=Z;c[E+24>>3]=+c[e+80>>3]*.5+ +c[e+24>>3];c[f>>3]=I;c[a+56>>3]=s;c[a+64>>3]=o;c[a+72>>3]=I;c[a+80>>3]=Z;f=a+88|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=2;break}}else{t[a+48>>2]=4;f=E+8|0;c[f>>3]=+c[(+c[f>>3]<+c[e+48>>3]?E:u)+8>>3];f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1}}while(0);t[a+52>>2]=f;while(1){f=t[A+16>>2]|0;if(!(i[f+112>>0]|0))break;A=t[f+116>>2]|0}i[((y|0)==(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)?f+56|0:f+16|0)+30>>0]=0;t[a+48>>2]=p}else{l=4;B=47}break}case 2:{p=i[(t[m>>2]|0)+89>>0]|0;l=p&255;if(!(p<<24>>24))B=46;else{t[E>>2]=t[a>>2];t[E+4>>2]=t[a+4>>2];t[E+8>>2]=t[a+8>>2];t[E+12>>2]=t[a+12>>2];t[E+16>>2]=t[a+16>>2];t[E+20>>2]=t[a+20>>2];t[E+24>>2]=t[a+24>>2];t[E+28>>2]=t[a+28>>2];do{if(!(l&4)){if(l&1|0)if((t[a+48>>2]|0)==4){s=+c[E>>3]+-1.0;f=t[v>>2]|0;Z=+c[f+24>>3]-+c[f+80>>3]*.5;I=+c[u>>3];o=Z-+((t[(t[(Bd(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);f=t[v>>2]|0;c[E+16>>3]=+c[f+16>>3]+-2.0-+c[f+88>>3];c[E+8>>3]=Z;c[E+24>>3]=+c[f+80>>3]*.5+ +c[f+24>>3];c[E>>3]=s;c[a+56>>3]=s;c[a+64>>3]=o;c[a+72>>3]=I;c[a+80>>3]=Z;f=a+88|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=2;break}else{f=E+24|0;c[f>>3]=+c[(+c[f>>3]>+c[e+8>>3]?E+16|0:e)+8>>3];f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1;break}s=+c[u>>3];if(!(l&8)){c[E>>3]=s+-1.0;r=t[v>>2]|0;s=+c[r+24>>3];o=+c[r+80>>3]*.5;if((t[a+48>>2]|0)==4){c[E+24>>3]=o+s;s=+c[e+48>>3]+-1.0;f=E}else{c[E+8>>3]=s-o;s=+c[e+48>>3];f=E+16|0}c[f+8>>3]=s;f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1;break}else{f=E+16|0;c[f>>3]=s+1.0;r=t[v>>2]|0;s=+c[r+24>>3];o=+c[r+80>>3]*.5;if((t[a+48>>2]|0)==4){c[E+24>>3]=o+s;s=+c[e+48>>3]+-1.0;f=E}else{c[E+8>>3]=s-o;s=+c[e+48>>3]+1.0}c[f+8>>3]=s;f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1;break}}else{f=E+8|0;c[f>>3]=+c[(+c[f>>3]<+c[e+48>>3]?E:u)+8>>3];f=a+56|0;t[f>>2]=t[E>>2];t[f+4>>2]=t[E+4>>2];t[f+8>>2]=t[E+8>>2];t[f+12>>2]=t[E+12>>2];t[f+16>>2]=t[E+16>>2];t[f+20>>2]=t[E+20>>2];t[f+24>>2]=t[E+24>>2];t[f+28>>2]=t[E+28>>2];f=1}}while(0);t[a+52>>2]=f;while(1){f=t[A+16>>2]|0;if(!(i[f+112>>0]|0))break;A=t[f+116>>2]|0}i[((y|0)==(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)?f+56|0:f+16|0)+30>>0]=0;t[a+48>>2]=l}break}default:B=46}if((B|0)==46){l=t[a+48>>2]|0;B=47}e:do{if((B|0)==47){if(b){A=a+56|0;f=a+52|0;l=D5[b&127](y,(t[m>>2]|0)+56|0,l,A,f)|0;if(l){t[a+48>>2]=l;break}}else{f=a+52|0;A=a+56|0}t[A>>2]=t[a>>2];t[A+4>>2]=t[a+4>>2];t[A+8>>2]=t[a+8>>2];t[A+12>>2]=t[a+12>>2];t[A+16>>2]=t[a+16>>2];t[A+20>>2]=t[a+20>>2];t[A+24>>2]=t[a+24>>2];t[A+28>>2]=t[a+28>>2];t[f>>2]=1;switch(r|0){case 8:{ge(138394,106514,765,106558);break}case 2:{c[((t[a+48>>2]|0)==4?a+56|0:a+72|0)+8>>3]=+c[e+48>>3];break e}case 1:{c[a+64>>3]=+c[e+48>>3];t[a+48>>2]=4;break e}default:break e}}}while(0);h=C;return}function ZR(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;n=t[e+16>>2]|0;f=t[n+96>>2]|0;if((i[n+44>>0]|0)==0?(i[n+84>>0]|0)==0:0)l=6;else{A=i[n+49>>0]|0;r=A&255;if(((r&8|0)==0?(a=i[n+89>>0]|0,(a&8)==0):0)?(r&5|0)==0?1:A<<24>>24!=a<<24>>24:0)l=6;else e=0}if((l|0)==6)if(!f)e=18;else{e=(t[(t[(Bd(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)!=0;e=~~(+c[(e?f+32|0:f+24|0)>>3]+18.0)}return e|0}function GR(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=+n;f=+f;l=l|0;var s=0,c=0,o=0,u=0;e=t[(t[A+(r<<2)>>2]|0)+16>>2]|0;if((i[e+44>>0]|0)==0?(i[e+84>>0]|0)==0:0)o=6;else o=3;do{if((o|0)==3){s=i[e+49>>0]|0;c=s&255;if(!(c&8)){u=i[e+89>>0]|0;if((u&8)==0?(c&5|0)==0?1:s<<24>>24!=u<<24>>24:0){o=6;break}if(!(i[e+89>>0]&8)){if(c&4|0){QR(A,r,a,n,f,l);break}if(!(c&1))ge(138394,106514,1231,106566);else{zR(A,r,a,n,f,l);break}}}if((s&2)==0?(i[e+89>>0]&2)==0:0){DR(A,r,a,n,f,l);break}QR(A,r,a,n,f,l)}}while(0);if((o|0)==6)LR(A,r,a,n,f,l);return}function LR(e,A,r,a,f,l){e=e|0;A=A|0;r=r|0;a=+a;f=+f;l=l|0;var s=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0.0,E=0,B=0,y=0,C=0.0,I=0,Z=0,G=0.0,L=0,Q=0.0,D=0.0,z=0.0,W=0.0,Y=0.0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0.0,P=0.0,X=0;J=h;h=h+16080|0;V=J+80|0;N=J+64|0;R=J+48|0;x=J+32|0;F=J+16|0;M=J;Z=t[e+(A<<2)>>2]|0;u=f*.5/+(r|0);u=u>2.0?u:2.0;L=(t[((t[Z>>2]&3|0)==3?Z:Z+48|0)+40>>2]|0)+16|0;I=t[L>>2]|0;G=+c[I+16>>3];W=+c[I+24>>3];Z=t[Z+16>>2]|0;o=+c[Z+16>>3];Q=o+G;D=+c[Z+24>>3]+W;f=+c[Z+56>>3];z=f+G;W=+c[Z+64>>3]+W;s=!(D>=W)?-1:1;w=+c[I+96>>3];switch(WR(n[Z+49>>0]|0,n[Z+89>>0]|0)|0){case 65:case 32:{if(D==W)s=0-s|0;break}default:{}}H=(w-o)*3.0;o=(w-f)*3.0;p=u*+(s|0);m=V+8|0;E=V+16|0;B=V+32|0;y=V+48|0;C=(W+D)*.5;I=V+64|0;Z=V+80|0;v=V+96|0;g=V+104|0;d=0;b=0.0;f=w;u=w=(r|0))break;k=A+1|0;A=t[e+(A<<2)>>2]|0;w=f+a;u=u+a;o=o+a;b=b+p;c[V>>3]=Q;c[m>>3]=D;H=b+D;YR(N,u*.3333333333333333+Q,H);t[E>>2]=t[N>>2];t[E+4>>2]=t[N+4>>2];t[E+8>>2]=t[N+8>>2];t[E+12>>2]=t[N+12>>2];P=w+G;YR(R,P,H);t[B>>2]=t[R>>2];t[B+4>>2]=t[R+4>>2];t[B+8>>2]=t[R+8>>2];t[B+12>>2]=t[R+12>>2];YR(x,P,C);t[y>>2]=t[x>>2];t[y+4>>2]=t[x+4>>2];t[y+8>>2]=t[x+8>>2];t[y+12>>2]=t[x+12>>2];H=W-b;YR(F,P,H);t[I>>2]=t[F>>2];t[I+4>>2]=t[F+4>>2];t[I+8>>2]=t[F+8>>2];t[I+12>>2]=t[F+12>>2];YR(M,o*.3333333333333333+z,H);t[Z>>2]=t[M>>2];t[Z+4>>2]=t[M+4>>2];t[Z+8>>2]=t[M+8>>2];t[Z+12>>2]=t[M+12>>2];c[v>>3]=z;c[g>>3]=W;s=A+16|0;if((t[(t[s>>2]|0)+96>>2]|0)!=0?(X=(t[(t[(Bd(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,s=t[(t[s>>2]|0)+96>>2]|0,Y=+c[(X?s+24|0:s+32|0)>>3],X=t[L>>2]|0,c[s+56>>3]=Y*.5+w+ +c[X+16>>3],c[s+64>>3]=+c[X+24>>3],i[s+81>>0]=1,Y>a):0)f=Y+f;else f=w;mR(A,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,V,7,l);A=k;d=d+1|0}h=J;return}function QR(e,A,r,a,f,l){e=e|0;A=A|0;r=r|0;a=+a;f=+f;l=l|0;var s=0.0,o=0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0.0,Z=0,G=0,L=0.0,Q=0,D=0.0,z=0.0,W=0.0,Y=0.0,F=0.0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0.0,X=0;H=h;h=h+16080|0;N=H+80|0;R=H+64|0;x=H+48|0;J=H+32|0;M=H+16|0;V=H;G=t[e+(A<<2)>>2]|0;k=a*.5/+(r|0);k=k>2.0?k:2.0;Q=(t[((t[G>>2]&3|0)==3?G:G+48|0)+40>>2]|0)+16|0;o=t[Q>>2]|0;W=+c[o+16>>3];L=+c[o+24>>3];G=t[G+16>>2]|0;s=+c[G+16>>3];w=+c[G+24>>3];D=s+W;z=w+L;a=+c[G+56>>3];b=+c[G+64>>3];W=a+W;Y=b+L;u=!(D>=W)?-1.0:1.0;v=+c[o+80>>3]*.5;switch(WR(n[G+49>>0]|0,n[G+89>>0]|0)|0){case 15:{s=(k-a+ +c[o+96>>3])*u;break}case 38:{s=(a+k+ +c[o+88>>3])*u;break}case 41:{s=(k-s+ +c[o+96>>3])*u;break}case 48:{s=(k-s+ +c[o+96>>3])*u;break}case 58:case 57:case 51:case 47:case 37:case 14:{s=u*.3333333333333333*(s-a+ +c[o+88>>3]+ +c[o+96>>3]);break}case 73:{s=(s+k+ +c[o+88>>3])*u;break}case 83:{s=(+c[o+88>>3]+s)*u;break}case 84:{s=((s-a+ +c[o+88>>3]+ +c[o+96>>3])*.5+k)*u;break}case 85:case 75:case 74:{s=((s-a+ +c[o+88>>3]+ +c[o+96>>3])*.5+k*2.0)*u;break}default:s=0.0}w=(v-w)*3.0;b=(v-b)*3.0;k=u*k;E=N+8|0;B=N+16|0;y=N+32|0;C=N+48|0;I=(W+D)*.5;Z=N+64|0;G=N+80|0;m=N+96|0;p=N+104|0;g=0;a=v;w=v=(r|0))break;d=A+1|0;A=t[e+(A<<2)>>2]|0;b=a+f;w=w+f;u=u+f;s=s+k;c[N>>3]=D;c[E>>3]=z;v=s+D;YR(R,v,w*.3333333333333333+z);t[B>>2]=t[R>>2];t[B+4>>2]=t[R+4>>2];t[B+8>>2]=t[R+8>>2];t[B+12>>2]=t[R+12>>2];P=b+L;YR(x,v,P);t[y>>2]=t[x>>2];t[y+4>>2]=t[x+4>>2];t[y+8>>2]=t[x+8>>2];t[y+12>>2]=t[x+12>>2];YR(J,I,P);t[C>>2]=t[J>>2];t[C+4>>2]=t[J+4>>2];t[C+8>>2]=t[J+8>>2];t[C+12>>2]=t[J+12>>2];v=W-s;YR(M,v,P);t[Z>>2]=t[M>>2];t[Z+4>>2]=t[M+4>>2];t[Z+8>>2]=t[M+8>>2];t[Z+12>>2]=t[M+12>>2];YR(V,v,u*.3333333333333333+Y);t[G>>2]=t[V>>2];t[G+4>>2]=t[V+4>>2];t[G+8>>2]=t[V+8>>2];t[G+12>>2]=t[V+12>>2];c[m>>3]=W;c[p>>3]=Y;o=A+16|0;if((t[(t[o>>2]|0)+96>>2]|0)!=0?(X=(t[(t[(Bd(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,o=t[(t[o>>2]|0)+96>>2]|0,F=+c[(X?o+32|0:o+24|0)>>3],X=t[Q>>2]|0,c[o+64>>3]=F*.5+b+ +c[X+24>>3],c[o+56>>3]=+c[X+16>>3],i[o+81>>0]=1,F>f):0)a=F+a;else a=b;mR(A,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,N,7,l);A=d;g=g+1|0}h=H;return}function DR(e,A,r,a,f,l){e=e|0;A=A|0;r=r|0;a=+a;f=+f;l=l|0;var s=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0.0,E=0,B=0,y=0,C=0.0,I=0,Z=0,G=0.0,L=0,Q=0.0,D=0.0,z=0.0,W=0.0,Y=0.0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0.0,P=0.0,X=0;J=h;h=h+16080|0;V=J+80|0;N=J+64|0;R=J+48|0;x=J+32|0;F=J+16|0;M=J;Z=t[e+(A<<2)>>2]|0;u=f*.5/+(r|0);u=u>2.0?u:2.0;L=(t[((t[Z>>2]&3|0)==3?Z:Z+48|0)+40>>2]|0)+16|0;I=t[L>>2]|0;G=+c[I+16>>3];W=+c[I+24>>3];Z=t[Z+16>>2]|0;o=+c[Z+16>>3];Q=o+G;D=+c[Z+24>>3]+W;f=+c[Z+56>>3];z=f+G;W=+c[Z+64>>3]+W;s=!(D>=W)?-1:1;w=+c[I+88>>3];switch(WR(n[Z+49>>0]|0,n[Z+89>>0]|0)|0){case 67:case 12:{if(D==W)s=0-s|0;break}default:{}}H=(o+w)*3.0;o=(f+w)*3.0;p=u*+(s|0);m=V+8|0;E=V+16|0;B=V+32|0;y=V+48|0;C=(W+D)*.5;I=V+64|0;Z=V+80|0;v=V+96|0;g=V+104|0;d=0;b=0.0;f=w;u=w=(r|0))break;k=A+1|0;A=t[e+(A<<2)>>2]|0;w=f+a;u=u+a;o=o+a;b=b+p;c[V>>3]=Q;c[m>>3]=D;H=b+D;YR(N,Q-u*.3333333333333333,H);t[E>>2]=t[N>>2];t[E+4>>2]=t[N+4>>2];t[E+8>>2]=t[N+8>>2];t[E+12>>2]=t[N+12>>2];P=G-w;YR(R,P,H);t[B>>2]=t[R>>2];t[B+4>>2]=t[R+4>>2];t[B+8>>2]=t[R+8>>2];t[B+12>>2]=t[R+12>>2];YR(x,P,C);t[y>>2]=t[x>>2];t[y+4>>2]=t[x+4>>2];t[y+8>>2]=t[x+8>>2];t[y+12>>2]=t[x+12>>2];H=W-b;YR(F,P,H);t[I>>2]=t[F>>2];t[I+4>>2]=t[F+4>>2];t[I+8>>2]=t[F+8>>2];t[I+12>>2]=t[F+12>>2];YR(M,z-o*.3333333333333333,H);t[Z>>2]=t[M>>2];t[Z+4>>2]=t[M+4>>2];t[Z+8>>2]=t[M+8>>2];t[Z+12>>2]=t[M+12>>2];c[v>>3]=z;c[g>>3]=W;s=A+16|0;if((t[(t[s>>2]|0)+96>>2]|0)!=0?(X=(t[(t[(Bd(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,s=t[(t[s>>2]|0)+96>>2]|0,Y=+c[(X?s+24|0:s+32|0)>>3],X=t[L>>2]|0,c[s+56>>3]=Y*-.5-w+ +c[X+16>>3],c[s+64>>3]=+c[X+24>>3],i[s+81>>0]=1,Y>a):0)f=Y+f;else f=w;mR(A,t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0,V,7,l);A=k;d=d+1|0}h=J;return}function zR(e,A,r,a,f,l){e=e|0;A=A|0;r=r|0;a=+a;f=+f;l=l|0;var s=0.0,o=0.0,u=0.0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0.0,E=0,B=0.0,y=0.0,C=0.0,I=0.0,Z=0.0,G=0,L=0,Q=0,D=0.0,z=0,W=0,Y=0.0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0.0,P=0.0,X=0;J=h;h=h+16080|0;V=J+80|0;N=J+64|0;R=J+48|0;x=J+32|0;F=J+16|0;M=J;G=t[e+(A<<2)>>2]|0;Z=a*.5/+(r|0);E=(t[((t[G>>2]&3|0)==3?G:G+48|0)+40>>2]|0)+16|0;L=t[E>>2]|0;C=+c[L+16>>3];p=+c[L+24>>3];G=t[G+16>>2]|0;o=+c[G+24>>3];B=+c[G+16>>3]+C;y=o+p;u=+c[G+64>>3];C=+c[G+56>>3]+C;I=u+p;m=!(B>=C)?-1:1;b=+c[L+80>>3]*.5;G=(WR(n[G+49>>0]|0,n[G+89>>0]|0)|0)==67;o=(o+b)*3.0;u=(u+b)*3.0;Z=(Z>2.0?Z:2.0)*+((G?0-m|0:m)|0);m=V+8|0;G=V+16|0;L=V+32|0;Q=V+48|0;D=(C+B)*.5;z=V+64|0;W=V+80|0;v=V+96|0;g=V+104|0;a=b;s=0.0;o=b=(r|0))break;d=A+1|0;w=t[e+(A<<2)>>2]|0;b=a+f;o=o+f;u=u+f;s=s+Z;c[V>>3]=B;c[m>>3]=y;H=s+B;YR(N,H,y-o*.3333333333333333);t[G>>2]=t[N>>2];t[G+4>>2]=t[N+4>>2];t[G+8>>2]=t[N+8>>2];t[G+12>>2]=t[N+12>>2];P=p-b;YR(R,H,P);t[L>>2]=t[R>>2];t[L+4>>2]=t[R+4>>2];t[L+8>>2]=t[R+8>>2];t[L+12>>2]=t[R+12>>2];YR(x,D,P);t[Q>>2]=t[x>>2];t[Q+4>>2]=t[x+4>>2];t[Q+8>>2]=t[x+8>>2];t[Q+12>>2]=t[x+12>>2];H=C-s;YR(F,H,P);t[z>>2]=t[F>>2];t[z+4>>2]=t[F+4>>2];t[z+8>>2]=t[F+8>>2];t[z+12>>2]=t[F+12>>2];YR(M,H,I-u*.3333333333333333);t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];c[v>>3]=C;c[g>>3]=I;A=w+16|0;if((t[(t[A>>2]|0)+96>>2]|0)!=0?(X=(t[(t[(Bd(t[((t[w>>2]&3|0)==3?w:w+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,A=t[(t[A>>2]|0)+96>>2]|0,Y=+c[(X?A+32|0:A+24|0)>>3],X=t[E>>2]|0,c[A+64>>3]=Y*-.5-b+ +c[X+24>>3],c[A+56>>3]=+c[X+16>>3],i[A+81>>0]=1,Y>f):0)a=Y+a;else a=b;mR(w,t[((t[w>>2]&3|0)==2?w:w+-48|0)+40>>2]|0,V,7,l);A=d;k=k+1|0}h=J;return}function WR(e,A){e=e|0;A=A|0;var r=0;r=0;while(1){if((r|0)>=8){A=-1;break}if((t[22044+(r<<2)>>2]|0)==(A|0)){A=r;break}r=r+1|0}r=0;while(1){if((r|0)>=8){r=-1;break}if((t[22044+(r<<2)>>2]|0)==(e|0))break;r=r+1|0}if((r|A|0)<0)r=0;else r=t[22076+(r<<5)+(A<<2)>>2]|0;return r|0}function YR(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function FR(e){e=e|0;var A=0,r=0;if((t[47203]|0)!=0|(t[47202]|0)!=0){A=e+16|0;r=t[(t[A>>2]|0)+100>>2]|0;if((r|0?(i[r+81>>0]|0)==0:0)?MR(e,1)|0:0){r=Bd(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;Hx(r,t[(t[A>>2]|0)+100>>2]|0)}r=t[(t[A>>2]|0)+104>>2]|0;if((r|0?(i[r+81>>0]|0)==0:0)?MR(e,0)|0:0){r=Bd(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;Hx(r,t[(t[A>>2]|0)+104>>2]|0)}}return}function MR(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;k=h;h=h+96|0;b=k+32|0;o=k+16|0;u=k;f=e+16|0;do{if((i[(t[f>>2]|0)+112>>0]|0)!=6){r=t[47203]|0;if(!((r|0)!=0?(i[(Pw(e,r)|0)>>0]|0)!=0:0)){r=t[47202]|0;if(!r){r=0;break}if(!(i[(Pw(e,r)|0)>>0]|0)){r=0;break}}A=A<<24>>24==0;w=t[f>>2]|0;w=t[(A?w+104|0:w+100|0)>>2]|0;r=VR(e)|0;if(r){s=t[r>>2]|0;do{if(A){if(t[s+8>>2]|0){r=t[s>>2]|0;l=+c[r>>3];n=+c[s+16>>3];r=r+8|0;a=+c[s+24>>3];break}r=t[s>>2]|0;n=+c[r>>3];a=+c[r+8>>3];r=0;while(1){if((r|0)==4)break;u=b+(r<<4)|0;f=(t[s>>2]|0)+(r<<4)|0;t[u>>2]=t[f>>2];t[u+4>>2]=t[f+4>>2];t[u+8>>2]=t[f+8>>2];t[u+12>>2]=t[f+12>>2];r=r+1|0}Zx(o,b,3,.1,0,0);l=+c[o>>3];r=o+8|0}else{A=(t[r+4>>2]|0)+-1|0;f=s+(A*48|0)|0;if(t[s+(A*48|0)+12>>2]|0){b=t[f>>2]|0;r=(t[s+(A*48|0)+4>>2]|0)+-1|0;l=+c[b+(r<<4)>>3];n=+c[s+(A*48|0)+32>>3];r=b+(r<<4)+8|0;a=+c[s+(A*48|0)+40>>3];break}o=t[f>>2]|0;A=s+(A*48|0)+4|0;r=(t[A>>2]|0)+-1|0;n=+c[o+(r<<4)>>3];a=+c[o+(r<<4)+8>>3];r=0;while(1){if((r|0)==4)break;o=b+(r<<4)|0;s=(t[f>>2]|0)+(r+-4+(t[A>>2]|0)<<4)|0;t[o>>2]=t[s>>2];t[o+4>>2]=t[s+4>>2];t[o+8>>2]=t[s+8>>2];t[o+12>>2]=t[s+12>>2];r=r+1|0}Zx(u,b,3,.9,0,0);l=+c[u>>3];r=u+8|0}}while(0);d=+R(+(+c[r>>3]-a),+(l-n));d=+wx(e,t[47203]|0,-25.0,-180.0)*.017453292519943295+d;l=+wx(e,t[47202]|0,1.0,0.0)*10.0;c[w+56>>3]=l*+W(+d)+n;c[w+64>>3]=+Y(+d)*l+a;i[w+81>>0]=1;r=1}else r=0}else r=0}while(0);h=k;return r|0}function VR(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=h;h=h+16|0;a=f;A=e;while(1){r=t[A+16>>2]|0;A=t[r+8>>2]|0;if(A|0)break;if(!(i[r+112>>0]|0)){n=5;break}A=t[r+116>>2]|0}if((n|0)==5){n=Mk(t[((t[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;A=Mk(t[((t[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)|0;t[a>>2]=n;t[a+4>>2]=A;nw(1,106579,a)|0;A=0}h=f;return A|0}function NR(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0,m=0.0;v=h;h=h+96|0;o=v+80|0;u=v+64|0;b=v+48|0;w=v+32|0;k=v+16|0;d=v;s=a[(t[A+16>>2]|0)+136>>1]|0;A=r+16|0;RR(t[(t[A>>2]|0)+8>>2]|0,w,k);i=+c[w>>3];n=+c[k>>3];g=i-n;f=+c[w+8>>3];l=+c[k+8>>3];m=f-l;e:do{if(m*m+g*g<1.0e-06){t[b>>2]=t[w>>2];t[b+4>>2]=t[w+4>>2];t[b+8>>2]=t[w+8>>2];t[b+12>>2]=t[w+12>>2]}else switch(s&14){case 4:case 10:{c[u>>3]=(n+i)*.5;c[u+8>>3]=(l+f)*.5;k=t[(t[A>>2]|0)+8>>2]|0;t[o>>2]=t[u>>2];t[o+4>>2]=t[u+4>>2];t[o+8>>2]=t[u+8>>2];t[o+12>>2]=t[u+12>>2];Wx(d,k,o);t[b>>2]=t[d>>2];t[b+4>>2]=t[d+4>>2];t[b+8>>2]=t[d+8>>2];t[b+12>>2]=t[d+12>>2];break e}default:{xR(b,t[(t[A>>2]|0)+8>>2]|0,w,k);break e}}}while(0);t[e>>2]=t[b>>2];t[e+4>>2]=t[b+4>>2];t[e+8>>2]=t[b+8>>2];t[e+12>>2]=t[b+12>>2];h=v;return}function RR(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;f=h;h=h+32|0;n=f+16|0;a=f;s=t[e>>2]|0;i=t[s>>2]|0;l=t[s+8>>2]|0;c=s+16|0;t[n>>2]=t[c>>2];t[n+4>>2]=t[c+4>>2];t[n+8>>2]=t[c+8>>2];t[n+12>>2]=t[c+12>>2];s=s+32|0;t[a>>2]=t[s>>2];t[a+4>>2]=t[s+4>>2];t[a+8>>2]=t[s+8>>2];t[a+12>>2]=t[s+12>>2];if(!l){t[A>>2]=t[i>>2];t[A+4>>2]=t[i+4>>2];t[A+8>>2]=t[i+8>>2];t[A+12>>2]=t[i+12>>2]}else{t[A>>2]=t[n>>2];t[A+4>>2]=t[n+4>>2];t[A+8>>2]=t[n+8>>2];t[A+12>>2]=t[n+12>>2]}l=t[e>>2]|0;s=(t[e+4>>2]|0)+-1|0;i=t[l+(s*48|0)>>2]|0;e=t[l+(s*48|0)+4>>2]|0;c=t[l+(s*48|0)+12>>2]|0;A=l+(s*48|0)+16|0;t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];s=l+(s*48|0)+32|0;t[a>>2]=t[s>>2];t[a+4>>2]=t[s+4>>2];t[a+8>>2]=t[s+8>>2];t[a+12>>2]=t[s+12>>2];if(!c){c=i+(e+-1<<4)|0;t[r>>2]=t[c>>2];t[r+4>>2]=t[c+4>>2];t[r+8>>2]=t[c+8>>2];t[r+12>>2]=t[c+12>>2]}else{t[r>>2]=t[a>>2];t[r+4>>2]=t[a+4>>2];t[r+8>>2]=t[a+8>>2];t[r+12>>2]=t[a+12>>2]}h=f;return}function xR(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0,l=0,s=0,o=0,u=0.0,b=0.0,h=0.0,w=0.0,k=0.0,d=0,v=0.0;d=t[A+4>>2]|0;n=0.0;a=0;while(1){if((a|0)>=(d|0))break;o=t[A>>2]|0;s=t[o+(a*48|0)>>2]|0;o=t[o+(a*48|0)+4>>2]|0;f=3;l=0;while(1){if((f|0)>=(o|0))break;k=+c[s+(l<<4)>>3]-+c[s+(f<<4)>>3];w=+c[s+(l<<4)+8>>3]-+c[s+(f<<4)+8>>3];f=f+3|0;l=l+3|0;n=+D(+(w*w+k*k))+n}a=a+1|0}o=0;n=n*.5;e:while(1){if((o|0)>=(d|0)){a=15;break}s=t[A>>2]|0;l=t[s+(o*48|0)>>2]|0;s=t[s+(o*48|0)+4>>2]|0;a=3;f=0;while(1){if((a|0)>=(s|0))break;u=+c[l+(f<<4)>>3];w=+c[l+(f<<4)+8>>3];b=+c[l+(a<<4)>>3];h=+c[l+(a<<4)+8>>3];k=u-b;v=w-h;k=+D(+(v*v+k*k));if(k>=n){a=12;break e}a=a+3|0;f=f+3|0;n=n-k}o=o+1|0}if((a|0)==12){c[r>>3]=u;c[r+8>>3]=w;c[i>>3]=b;c[i+8>>3]=h;v=k-n;c[e>>3]=(v*u+b*n)/k;c[e+8>>3]=(v*w+h*n)/k;return}else if((a|0)==15)ge(138712,106514,1316,106641)}function JR(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;FR(A);return}function HR(e,A,r,a,n){e=e|0;A=A|0;r=+r;a=a|0;n=n|0;var f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0,h=0,w=0.0,k=0.0,d=0.0,v=0,g=0.0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0.0,G=0.0,L=0,Q=0,D=0,z=0,F=0,M=0,V=0;F=PR(e)|0;z=t[F+4>>2]|0;M=t[F>>2]|0;D=z+-1|0;Z=+c[M+(D<<6)+16>>3];G=+(z|0);L=(n|0)==2;Q=(a|0)!=0;b=0;l=0.0;f=0.0;o=0.0;u=0.0;while(1){if((b|0)>=(z|0))break;e=~~+XR(+(b+-1|0),G);I=b+1|0;V=~~+XR(+(I|0),G);h=M+(b<<6)|0;u=+c[h>>3];C=M+(b<<6)+8|0;o=+c[C>>3];v=M+(b<<6)+16|0;g=+c[v>>3];m=M+(b<<6)+24|0;p=M+(b<<6)+32|0;E=M+(b<<6)+40|0;B=M+(b<<6)+48|0;y=M+(b<<6)+56|0;s=+SR(+c[M+(V<<6)+8>>3]-o,+c[M+(V<<6)>>3]-u);k=+SR(+c[M+(e<<6)+8>>3]-o,+c[M+(e<<6)>>3]-u);d=+B5[A&7](g,Z,r);e=(b|0)==0;do{if(e|(b|0)==(D|0))if(e){f=s+1.5707963267948966;if(!L){e=0;w=f;l=d;break}e=0;w=f;l=d;o=o-+Y(+s)*d;u=u-+W(+s)*d;break}else{f=k+-1.5707963267948966;if(!L){e=0;w=f;l=d;break}e=0;w=f;l=d;o=o-+Y(+k)*d;u=u-+W(+k)*d;break}else{w=s-k;w=1.5707963267948966-(w<0.0?w+6.283185307179586:w)*.5;l=+W(+w);l=l==0.0?0.0:d/l;f=s+1.5707963267948966;s=w+f;if(Q|l>d*10.0){k=+XR(k+-1.5707963267948966,6.283185307179586);e=1;w=+XR(f,6.283185307179586);l=d;f=k}else{e=0;w=s;f=s}}}while(0);c[h>>3]=u;c[C>>3]=o;c[v>>3]=g;i[m>>0]=108;c[p>>3]=f;c[E>>3]=l;t[B>>2]=e;c[y>>3]=w;b=I}h=KF(12)|0;e=0;while(1){if((e|0)>=(z|0))break;u=+c[M+(e<<6)>>3];o=+c[M+(e<<6)+8>>3];f=+c[M+(e<<6)+32>>3];l=+c[M+(e<<6)+40>>3];V=t[M+(e<<6)+48>>2]|0;s=+c[M+(e<<6)+56>>3];jR(h,+W(+f)*l+u,+Y(+f)*l+o);if(V|0)UR(u,o,l,1,f,s,a,h);e=e+1|0}b=(n|0)==1;s=f+3.141592653589793;if(b)TR(h,u,o,l,f,s);else{jR(h,+W(+s)*l+u,+Y(+s)*l+o);f=s}e=z+-2|0;s=u;while(1){if((e|0)<=-1)break;u=+c[M+(e<<6)>>3];o=+c[M+(e<<6)+8>>3];l=+c[M+(e<<6)+40>>3];V=t[M+(e<<6)+48>>2]|0;f=+c[M+(e<<6)+32>>3]+3.141592653589793;s=+c[M+(e<<6)+56>>3]+3.141592653589793;jR(h,+W(+s)*l+u,+Y(+s)*l+o);if(V|0)UR(u,o,l,0,f,s,a,h);e=e+-1|0;s=u}if(b)TR(h,s,o,l,f,f+3.141592653589793);OR(F);return h|0}function PR(e){e=e|0;var A=0.0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0;k=h;h=h+144|0;l=k+128|0;f=k+112|0;s=k+96|0;c=k+64|0;o=k;u=k+80|0;b=_R()|0;w=t[e+4>>2]|0;a=t[e>>2]|0;t[l>>2]=t[a>>2];t[l+4>>2]=t[a+4>>2];t[l+8>>2]=t[a+8>>2];t[l+12>>2]=t[a+12>>2];qR(b,l,0.0);n=o+48|0;t[n>>2]=t[a>>2];t[n+4>>2]=t[a+4>>2];t[n+8>>2]=t[a+8>>2];t[n+12>>2]=t[a+12>>2];r=0;A=0.0;e:while(1){i=r+3|0;if((i|0)>=(w|0))break;t[o>>2]=t[n>>2];t[o+4>>2]=t[n+4>>2];t[o+8>>2]=t[n+8>>2];t[o+12>>2]=t[n+12>>2];e=1;while(1){if((e|0)==4)break;d=o+(e<<4)|0;v=a+(e+r<<4)|0;t[d>>2]=t[v>>2];t[d+4>>2]=t[v+4>>2];t[d+8>>2]=t[v+8>>2];t[d+12>>2]=t[v+12>>2];e=e+1|0}t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];e=1;while(1){if((e|0)==21){r=i;continue e}Zx(u,o,3,+(e|0)*.05,0,0);t[c>>2]=t[u>>2];t[c+4>>2]=t[u+4>>2];t[c+8>>2]=t[u+8>>2];t[c+12>>2]=t[u+12>>2];t[f>>2]=t[s>>2];t[f+4>>2]=t[s+4>>2];t[f+8>>2]=t[s+8>>2];t[f+12>>2]=t[s+12>>2];t[l>>2]=t[u>>2];t[l+4>>2]=t[u+4>>2];t[l+8>>2]=t[u+8>>2];t[l+12>>2]=t[u+12>>2];g=+KR(f,l)+A;t[l>>2]=t[c>>2];t[l+4>>2]=t[c+4>>2];t[l+8>>2]=t[c+8>>2];t[l+12>>2]=t[c+12>>2];qR(b,l,g);t[s>>2]=t[c>>2];t[s+4>>2]=t[c+4>>2];t[s+8>>2]=t[c+8>>2];t[s+12>>2]=t[c+12>>2];e=e+1|0;A=g}}$R(b);h=k;return b|0}function XR(e,A){e=+e;A=+A;var r=0.0;r=e-+L(+(e/A))*A;return+(!(e<0.0)&!(e>=A)?e:r)}function SR(e,A){e=+e;A=+A;if(!(e==0.0&A==0.0)){e=+R(+e,+A);if(!(e>=0.0))e=e+6.283185307179586}else e=0.0;return+e}function jR(e,A,r){e=e|0;A=+A;r=+r;var i=0,a=0;i=t[e>>2]|0;a=e+4|0;if((i|0)<(t[a>>2]|0))a=t[e+8>>2]|0;else{t[a>>2]=2e3;i=e+8|0;a=AM(t[i>>2]|0,32e3)|0;t[i>>2]=a;i=t[e>>2]|0}t[e>>2]=i+1;c[a+(i<<4)>>3]=A;c[a+(i<<4)+8>>3]=r;return}function UR(e,A,r,i,a,t,n,f){e=+e;A=+A;r=+r;i=i|0;a=+a;t=+t;n=n|0;f=f|0;var l=0.0;i=(i|0)==0;l=i?a:t;do{if((n|0)==1){a=(i?t:a)-l;a=!(a<=1.7453292519943296e-03)?a:a+6.283185307179586;if(a<3.141592653589793){TR(f,e,A,r,a+l,l);break}else{jR(f,+W(+l)*r+e,+Y(+l)*r+e);break}}else jR(f,+W(+l)*r+e,+Y(+l)*r+e)}while(0);return}function TR(e,A,r,i,a,t){e=e|0;A=+A;r=+r;i=+i;a=+a;t=+t;var n=0,f=0.0;jR(e,+W(+a)*i+A,+Y(+a)*i+r);e:do{if(!(i==0.0)){while(1){if(!(t>a))break;t=t+-6.283185307179586}t=a-t;while(1){if(!(t>6.283185307179586))break;t=t+-6.283185307179586}t=t*.05263157894736842;n=1;while(1){if((n|0)==20)break e;f=a-t*+(n|0);jR(e,+W(+f)*i+A,+Y(+f)*i+r);n=n+1|0}}}while(0);return}function OR(e){e=e|0;G2(t[e>>2]|0);G2(e);return}function _R(){var e=0;e=KF(12)|0;t[e+4>>2]=0;t[e+8>>2]=2e3;t[e>>2]=KF(128e3)|0;return e|0}function qR(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,n=0,f=0;f=e+4|0;i=t[f>>2]|0;a=e+8|0;n=t[a>>2]|0;if((i|0)<(n|0))e=t[e>>2]|0;else{t[a>>2]=n<<1;i=AM(t[e>>2]|0,n<<7)|0;t[e>>2]=i;e=i;i=t[f>>2]|0}c[e+(i<<6)>>3]=+c[A>>3];c[e+(i<<6)+8>>3]=+c[A+8>>3];t[f>>2]=i+1;c[e+(i<<6)+16>>3]=r;return}function KR(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e>>3]-+c[A>>3];i=+c[e+8>>3]-+c[A+8>>3];return+ +D(+(i*i+r*r))}function $R(e){e=e|0;var A=0;A=t[e+4>>2]|0;if((t[e+8>>2]|0)>(A|0))t[e>>2]=AM(t[e>>2]|0,A<<6)|0;return}function ex(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;s=c+8|0;l=c;n=c+12|0;t[n>>2]=0;f=t[r+4>>2]|0;if(!f)ge(106658,106669,203,106680);i=t[f>>2]|0;if(!i)ge(106694,106669,206,106680);a=f+8|0;if(!(t[a>>2]|0))t[a>>2]=Ax(i)|0;if(!0)i=0;else{i=(aF(t[f>>2]|0)|0)==0;i=i?0:n}if(!((Oi(A,r,i)|0)<<24>>24))rx(r,i);do{if(i|0){a=t[n>>2]|0;A=t[15712]|0;i=t[f>>2]|0;if(!a){t[s>>2]=i;a3(A,106737,s)|0;break}else{t[l>>2]=i;t[l+4>>2]=a;a3(A,106705,l)|0;break}}}while(0);s=r+32|0;t[e>>2]=t[s>>2];t[e+4>>2]=t[s+4>>2];t[e+8>>2]=t[s+8>>2];t[e+12>>2]=t[s+12>>2];h=c;return}function Ax(e){e=e|0;var A=0;A=t[47301]|0;if((A|0)!=0?(N1(A,e)|0)==0:0)e=t[47310]|0;else{G2(A);t[47301]=o3(e)|0;e=r8(189204,22332,35,36,95)|0;t[47310]=e}return e|0}function rx(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0,f=0.0,l=0,s=0.0;l=t[e+4>>2]|0;r=t[l>>2]|0;f=+c[l+16>>3];l=e+32|0;c[l>>3]=0.0;c[e+40>>3]=f*1.2;c[e+16>>3]=0.0;c[e+24>>3]=f*.1;t[e+8>>2]=0;t[e+12>>2]=0;if(S1(r,106771,4)|0)if((S1(r,106776,5)|0)!=0?(S1(r,106782,9)|0)!=0:0){n=4248;r=106792}else{n=8344;r=106828}else{n=6296;r=106809}if(A|0)t[A>>2]=r;r=t[e>>2]|0;if(r|0){a=0.0;while(1){e=i[r>>0]|0;if(!(e<<24>>24))break;s=a+ +c[n+((e&255)<<3)>>3];c[l>>3]=s;r=r+1|0;a=s}c[l>>3]=a*f}return}function ix(e,A){e=e|0;A=A|0;return N1(t[e>>2]|0,t[A>>2]|0)|0}function ax(e){e=e|0;var A=0;A=e+108|0;t[A>>2]=0;t[e+112>>2]=32;t[e+116>>2]=-1;t[e+120>>2]=33;t[e+124>>2]=63;t[e+128>>2]=55;t[e+132>>2]=0;t[e+136>>2]=0;t[e+140>>2]=0;A=Uh(A,t[4581]|0)|0;t[e+144>>2]=A;return A|0}function tx(e,A,r){e=e|0;A=A|0;r=r|0;r=L2(1,32)|0;e=t[A>>2]|0;if(e|0)t[r>>2]=o3(e)|0;e=t[A+4>>2]|0;if(e|0)t[r+4>>2]=o3(e)|0;t[r+24>>2]=t[A+24>>2]&127;c[r+16>>3]=+c[A+16>>3];t[r+8>>2]=t[A+8>>2];return r|0}function nx(e,A,r){e=e|0;A=A|0;r=r|0;G2(t[A>>2]|0);G2(t[A+4>>2]|0);G2(A);return}function fx(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0,l=0;e=t[A>>2]|0;i=t[r>>2]|0;f=(i|0)==0;if(!e)if(f)l=5;else e=-1;else if(!f){e=e1(e,i)|0;if(!e)l=5}else e=1;do{if((l|0)==5){e=t[A+4>>2]|0;i=t[r+4>>2]|0;f=(i|0)==0;if(!e){if(!f){e=-1;break}}else{if(f){e=1;break}e=e1(e,i)|0;if(e|0)break}e=(t[A+24>>2]&127)-(t[r+24>>2]&127)|0;if(!e){n=+c[A+16>>3];a=+c[r+16>>3];if(na&1}}}while(0);return e|0}function lx(){fA(189244)|0;return}function sx(){var e=0,A=0;A=h;h=h+16|0;e=A;fA(e|0)|0;h=A;return+(+((t[e+4>>2]|0)+(t[e>>2]|0)-(t[47311]|0)-(t[47312]|0)|0)*.016666666666666666)}function cx(e){e=e|0;var A=0,r=0;A=KF(16)|0;e=(e|0)>2?e:2;r=KF(e<<2)|0;t[A>>2]=r;t[A+12>>2]=r;t[A+8>>2]=r;t[A+4>>2]=r+(e<<2);return A|0}function ox(e){e=e|0;G2(t[e>>2]|0);G2(e);return}function ux(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+12|0;i=t[r>>2]|0;t[r>>2]=i+4;t[i>>2]=A;if((t[r>>2]|0)>>>0>=(t[e+4>>2]|0)>>>0)t[r>>2]=t[e>>2];return}function bx(e){e=e|0;var A=0,r=0,i=0;r=e+8|0;A=t[r>>2]|0;if((A|0)!=(t[e+12>>2]|0)){i=A+4|0;t[r>>2]=i;A=t[A>>2]|0;if(i>>>0>=(t[e+4>>2]|0)>>>0)t[r>>2]=t[e>>2]}else A=0;return A|0}function hx(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0;l=h;h=h+16|0;n=l;if(((A|0)!=0?(f=Pw(e,A)|0,(f|0)!=0):0)?(i[f>>0]|0)!=0:0){A=n3(f,n,10)|0;r=(f|0)==(t[n>>2]|0)?r:(A|0)<(a|0)?a:A}h=l;return r|0}function wx(e,A,r,a){e=e|0;A=A|0;r=+r;a=+a;var n=0,f=0,l=0,s=0.0;l=h;h=h+16|0;n=l;if(((e|0)!=0&(A|0)!=0?(f=Pw(e,A)|0,(f|0)!=0):0)?(i[f>>0]|0)!=0:0){s=+e8(f,n);r=(f|0)==(t[n>>2]|0)?r:s0.0)){A=+wx(e,zw(e,0,107638,0)|0,-1.0,0.0);A=A==0.0?72.0:A}return+A}function dx(e,A,r){e=e|0;A=A|0;r=r|0;if((e|0)!=0&(A|0)!=0)r=Pw(e,A)|0;return r|0}function vx(e,A,r){e=e|0;A=A|0;r=r|0;e=dx(e,A,r)|0;if((e|0)!=0?(i[e>>0]|0)!=0:0)r=e;return r|0}function gx(e,A,r){e=e|0;A=A|0;r=r|0;if(!A)e=r&255;else e=mx(Pw(e,A)|0)|0;return e|0}function mx(e){e=e|0;return px(e,0)|0}function px(e,A){e=e|0;A=A|0;var r=0;if((e|0)!=0?(r=i[e>>0]|0,r<<24>>24!=0):0)if((N1(e,137308)|0)!=0?(N1(e,107649)|0)!=0:0)if((N1(e,107652)|0)!=0?(N1(e,107657)|0)!=0:0){if(((r<<24>>24)+-48|0)>>>0<10)A=(K3(e)|0)&255}else A=1;else A=0;return A|0}function Ex(e){e=e|0;var A=0,r=0;while(1){A=(t[e+16>>2]|0)+220|0;r=t[A>>2]|0;if(!((r|0)!=(e|0)&(r|0)!=0))break;e=t[(t[r+16>>2]|0)+220>>2]|0;if(!e){e=r;continue}t[A>>2]=e}return e|0}function Bx(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;if((e|0)!=(A|0)){r=t[e+16>>2]|0;i=r+220|0;if(!(t[i>>2]|0)){t[i>>2]=e;t[r+216>>2]=1}else e=Ex(e)|0;r=t[A+16>>2]|0;i=r+220|0;if(!(t[i>>2]|0)){t[i>>2]=A;t[r+216>>2]=1}else{r=Ex(A)|0;A=r;r=t[r+16>>2]|0}n=e+16|0;i=t[n>>2]|0;a=A+16|0;f=(t[i+120>>2]|0)>(t[r+120>>2]|0);e=f?A:e;t[(f?i:r)+220>>2]=e;i=(t[(f?a:n)>>2]|0)+216|0;t[i>>2]=(t[i>>2]|0)+(t[(t[(f?n:a)>>2]|0)+216>>2]|0)}return e|0}function yx(e){e=e|0;e=t[e+16>>2]|0;t[e+216>>2]=1;t[e+220>>2]=0;i[e+159>>0]=0;return}function Cx(e,A){e=e|0;A=A|0;if((Ex(e)|0)==(e|0)){e=t[e+16>>2]|0;t[e+220>>2]=A;A=(t[A+16>>2]|0)+216|0;t[A>>2]=(t[A>>2]|0)+(t[e+216>>2]|0);return}else ge(107669,107661,194,107685)}function Ix(e,A){e=e|0;A=A|0;var r=0.0;A=t[(t[A+16>>2]|0)+132>>2]|0;r=+c[A+8>>3]*72.0;c[e>>3]=+c[A>>3]*72.0;c[e+8>>3]=r;return}function Zx(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;n=n|0;var f=0,l=0,s=0,o=0.0,u=0,b=0,w=0;b=h;h=h+576|0;u=b;f=0;while(1){if((f|0)>(r|0))break;s=u+(f<<4)|0;l=A+(f<<4)|0;t[s>>2]=t[l>>2];t[s+4>>2]=t[l+4>>2];t[s+8>>2]=t[l+8>>2];t[s+12>>2]=t[l+12>>2];f=f+1|0}o=1.0-i;f=1;while(1){if((f|0)>(r|0))break;l=r-f|0;s=f+-1|0;A=0;while(1){if((A|0)>(l|0))break;w=A+1|0;c[u+(f*96|0)+(A<<4)>>3]=+c[u+(s*96|0)+(w<<4)>>3]*i+ +c[u+(s*96|0)+(A<<4)>>3]*o;c[u+(f*96|0)+(A<<4)+8>>3]=+c[u+(s*96|0)+(w<<4)+8>>3]*i+ +c[u+(s*96|0)+(A<<4)+8>>3]*o;A=w}f=f+1|0}e:do{if(a|0){f=0;while(1){if((f|0)>(r|0))break e;w=a+(f<<4)|0;s=u+(f*96|0)|0;t[w>>2]=t[s>>2];t[w+4>>2]=t[s+4>>2];t[w+8>>2]=t[s+8>>2];t[w+12>>2]=t[s+12>>2];f=f+1|0}}}while(0);e:do{if(n|0){f=0;while(1){if((f|0)>(r|0))break e;w=n+(f<<4)|0;a=u+((r-f|0)*96|0)+(f<<4)|0;t[w>>2]=t[a>>2];t[w+4>>2]=t[a+4>>2];t[w+8>>2]=t[a+8>>2];t[w+12>>2]=t[a+12>>2];f=f+1|0}}}while(0);w=u+(r*96|0)|0;t[e>>2]=t[w>>2];t[e+4>>2]=t[w+4>>2];t[e+8>>2]=t[w+8>>2];t[e+12>>2]=t[w+12>>2];h=b;return}function Gx(e){e=e|0;var A=0,r=0,a=0,n=0;r=0;do{A=t[47315]|0;a=A+1024|0;if((A-r|0)<1024){t[47315]=a;a=AM(t[47316]|0,a)|0;t[47316]=a;A=t[47315]|0}else a=t[47316]|0;A=N4(a+r|0,A-r|0,e)|0;if(!A){n=6;break}r=(U2(A)|0)+r|0;A=t[47316]|0}while((i[A+(r+-1)>>0]|0)!=10);if((n|0)==6)A=t[47316]|0;return((r|0)>0?A:0)|0}function Lx(e){e=e|0;var A=0,r=0,a=0;a=h;h=h+16|0;do{if((e|0)!=0?(i[e>>0]|0)!=0:0)if(!0){A=t[47133]|0;r=t[47318]|0;if((t[47317]|0)==(A|0))A=r;else{if(r){G2(t[r>>2]|0);G2(t[47318]|0);t[47318]=0;A=t[47133]|0}t[47317]=A;if(!A)break;if(!(i[A>>0]|0))break;A=Qx(A)|0;t[47318]=A}if(!((i[e>>0]|0)!=47&(A|0)!=0))break;e=Dx(A,t[47319]|0,e)|0;break}else U();else e=0}while(0);h=a;return e|0}function Qx(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;i=0;a=0;n=0;A=o3(e)|0;r=0;while(1){A=l3(A,107984)|0;if(!A)break;e=(n<<2)+8|0;if(!a)e=$F(e)|0;else e=AM(r,e)|0;t[e+(n<<2)>>2]=A;a=U2(A)|0;i=i>>>0>a>>>0?i:a;a=e;n=n+1|0;A=0;r=e}t[a+(n<<2)>>2]=0;t[47319]=i;return a|0}function Dx(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;n=h;h=h+16|0;i=n;f=t[47320]|0;t[47320]=Q2(f,A+2+(U2(r)|0)|0)|0;while(1){A=t[e>>2]|0;if(!A){e=0;break}f=t[47320]|0;t[i>>2]=A;t[i+4>>2]=107982;t[i+8>>2]=r;T4(f,107975,i)|0;if(!(Y3(t[47320]|0,4)|0)){a=4;break}else e=e+4|0}if((a|0)==4)e=t[47320]|0;h=n;return e|0}function zx(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;n=(e|0)==0;a=0;while(1){f=t[A+(a<<2)>>2]|0;if(!f)break;if((!n?(i[e>>0]|0)==(i[f>>0]|0):0)?(e1(e,f)|0)==0:0)break;a=a+1|0}return t[r+(a<<2)>>2]|0}function Wx(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0;C=h;h=h+80|0;B=C+16|0;y=C;m=t[A+4>>2]|0;p=t[A>>2]|0;E=r+8|0;a=0;i=-1;n=1.e+38;A=-1;while(1){if((a|0)>=(m|0))break;v=t[p+(a*48|0)>>2]|0;g=t[p+(a*48|0)+4>>2]|0;d=0;while(1){if((d|0)>=(g|0))break;k=+c[v+(d<<4)>>3]-+c[r>>3];w=+c[v+(d<<4)+8>>3]-+c[E>>3];k=w*w+k*k;I=(i|0)==-1|k>2]|0;i=i+(((i|0)==((t[p+(A*48|0)+4>>2]|0)+-1|0))<<31>>31)|0;i=i-((i|0)%3|0)|0;A=0;while(1){if((A|0)==4)break;Z=A+i|0;c[B+(A<<4)>>3]=+c[a+(Z<<4)>>3];c[B+(A<<4)+8>>3]=+c[a+(Z<<4)+8>>3];A=A+1|0}k=+c[r>>3];s=+c[B>>3]-k;b=+c[E>>3];w=+c[B+8>>3]-b;l=+c[B+48>>3]-k;u=+c[B+56>>3]-b;A=y+8|0;n=1.0;f=0.0;l=u*u+l*l;s=w*w+s*s;while(1){w=(n+f)*.5;Zx(y,B,3,w,0,0);o=+c[y>>3];u=+c[A>>3];if(+Q(+(s-l))<1.0)break;if(+Q(+(n-f))<1.0e-05)break;Z=s>3]=o;c[e+8>>3]=u;h=C;return}function Yx(){return 0}function Fx(e){e=e|0;var A=0.0,r=0,a=0,n=0,f=0,l=0,s=0,o=0;A=+wx(e,t[47146]|0,.75,.01);n=e+16|0;c[(t[n>>2]|0)+32>>3]=A;A=+wx(e,t[47145]|0,.5,.02);c[(t[n>>2]|0)+40>>3]=A;o=IN(vx(e,t[47147]|0,107986)|0,e)|0;t[(t[n>>2]|0)+8>>2]=o;o=Pw(e,t[47154]|0)|0;A=+wx(e,t[47150]|0,14.0,1.0);r=vx(e,t[47151]|0,107994)|0;a=vx(e,t[47152]|0,137314)|0;f=(lv(o)|0)!=0;s=(oN(e)|0)==2;f=HF(e,o,(s?4:0)|(f?2:0),A,r,a)|0;t[(t[n>>2]|0)+104>>2]=f;f=t[47155]|0;if((f|0?(l=Pw(e,f)|0,l|0):0)?i[l>>0]|0:0){o=(lv(l)|0)!=0;o=HF(e,l,o?2:0,A,r,a)|0;t[(t[n>>2]|0)+108>>2]=o;o=(t[(Bd(e)|0)+16>>2]|0)+113|0;i[o>>0]=i[o>>0]|16}s=(hx(e,t[47158]|0,0,0)|0)&255;o=t[n>>2]|0;i[o+144>>0]=s;F5[t[t[(t[o+8>>2]|0)+4>>2]>>2]&127](e);return}function Mx(e){e=e|0;var A=0,r=0,a=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+112|0;o=p+96|0;u=p+80|0;v=p+40|0;m=p;d=e+48|0;w=Bd(t[((t[e>>2]&3|0)==3?e:d)+40>>2]|0)|0;n=o+8|0;t[n>>2]=0;b=u+8|0;t[b>>2]=0;A=t[47182]|0;if(((A|0)!=0?(r=Pw(e,A)|0,(r|0)!=0):0)?(i[r>>0]|0)!=0:0){Vx(e,o);g=(lv(r)|0)!=0;f=+c[o>>3];a=t[n>>2]|0;A=t[o+12>>2]|0;r=HF(e,r,g?2:0,f,a,A)|0;g=e+16|0;t[(t[g>>2]|0)+96>>2]=r;r=(t[w+16>>2]|0)+113|0;i[r>>0]=i[r>>0]|1;r=mx(dx(e,t[47192]|0,137308)|0)|0;i[(t[g>>2]|0)+114>>0]=r;g=1;r=a}else{g=0;A=0;f=0.0;r=0}a=t[47183]|0;if((a|0?(l=Pw(e,a)|0,l|0):0)?i[l>>0]|0:0){if(!r){Vx(e,o);f=+c[o>>3];r=t[n>>2]|0;A=t[o+12>>2]|0}n=(lv(l)|0)!=0;l=HF(e,l,n?2:0,f,r,A)|0;t[(t[e+16>>2]|0)+108>>2]=l;l=(t[w+16>>2]|0)+113|0;i[l>>0]=i[l>>0]|32}A=t[47197]|0;if(((A|0)!=0?(s=Pw(e,A)|0,(s|0)!=0):0)?(i[s>>0]|0)!=0:0){Nx(e,o,u);l=(lv(s)|0)!=0;f=+c[u>>3];A=t[b>>2]|0;r=t[u+12>>2]|0;s=HF(e,s,l?2:0,f,A,r)|0;t[(t[e+16>>2]|0)+100>>2]=s;s=(t[w+16>>2]|0)+113|0;i[s>>0]=i[s>>0]|2}else{r=0;f=0.0;A=0}a=t[47198]|0;if((a|0?(k=Pw(e,a)|0,k|0):0)?i[k>>0]|0:0){if(!A){Nx(e,o,u);r=t[u+12>>2]|0;f=+c[u>>3];A=t[b>>2]|0}b=(lv(k)|0)!=0;k=HF(e,k,b?2:0,f,A,r)|0;t[(t[e+16>>2]|0)+104>>2]=k;k=(t[w+16>>2]|0)+113|0;i[k>>0]=i[k>>0]|4}A=Hw(e,111455)|0;A=A|0?A:195059;if(i[A>>0]|0)i[(t[(t[((t[e>>2]&3|0)==3?e:d)+40>>2]|0)+16>>2]|0)+145>>0]=1;n=e+16|0;a=(t[n>>2]|0)+16|0;r=t[((t[e>>2]&3|0)==3?e:d)+40>>2]|0;Rx(v,t[(t[(t[(t[r+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,r,A);A=v;r=a+40|0;do{t[a>>2]=t[A>>2];a=a+4|0;A=A+4|0}while((a|0)<(r|0));if((xx(e,t[47204]|0)|0)<<24>>24)i[(t[n>>2]|0)+46>>0]=0;A=Hw(e,111464)|0;A=A|0?A:195059;if(!(i[A>>0]|0))r=e+-48|0;else{r=e+-48|0;i[(t[(t[((t[e>>2]&3|0)==2?e:r)+40>>2]|0)+16>>2]|0)+145>>0]=1}a=(t[n>>2]|0)+56|0;r=t[((t[e>>2]&3|0)==2?e:r)+40>>2]|0;Rx(m,t[(t[(t[(t[r+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,r,A);A=m;r=a+40|0;do{t[a>>2]=t[A>>2];a=a+4|0;A=A+4|0}while((a|0)<(r|0));if((xx(e,t[47205]|0)|0)<<24>>24)i[(t[n>>2]|0)+86>>0]=0;h=p;return g|0}function Vx(e,A){e=e|0;A=A|0;c[A>>3]=+wx(e,t[47179]|0,14.0,1.0);t[A+8>>2]=vx(e,t[47180]|0,107994)|0;t[A+12>>2]=vx(e,t[47181]|0,137314)|0;return}function Nx(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=A+8|0;if(!(t[i>>2]|0))Vx(e,A);c[r>>3]=+wx(e,t[47199]|0,+c[A>>3],1.0);t[r+8>>2]=vx(e,t[47200]|0,t[i>>2]|0)|0;t[r+12>>2]=vx(e,t[47201]|0,t[A+12>>2]|0)|0;return}function Rx(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+128|0;c=o+80|0;f=o+40|0;n=o;if((a|0)!=0?(s=C1(a,58)|0,(s|0)!=0):0){i[s>>0]=0;l=s+1|0;R5[A&31](f,r,a,l);r=c;n=f;A=r+36|0;do{t[r>>2]=t[n>>2];r=r+4|0;n=n+4|0}while((r|0)<(A|0));i[s>>0]=58;a=l}else{R5[A&31](n,r,a,0);r=c;A=r+36|0;do{t[r>>2]=t[n>>2];r=r+4|0;n=n+4|0}while((r|0)<(A|0))}r=e;n=c;A=r+36|0;do{t[r>>2]=t[n>>2];r=r+4|0;n=n+4|0}while((r|0)<(A|0));t[e+36>>2]=a;h=o;return}function xx(e,A){e=e|0;A=A|0;var r=0;if(((A|0)!=0?(r=Pw(e,A)|0,(r|0)!=0):0)?(i[r>>0]|0)!=0:0)e=(mx(r)|0)<<24>>24==0&1;else e=0;return e|0}function Jx(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0;s=h;h=h+32|0;f=s;l=t[A+8>>2]|0;r=t[A+4>>2]|0;r=(t[A+44>>2]|0)+((P((r|0)>1?r+-1|0:0,l)|0)<<4)|0;i=f+16|0;t[i>>2]=t[r>>2];t[i+4>>2]=t[r+4>>2];t[i+8>>2]=t[r+8>>2];t[i+12>>2]=t[r+12>>2];t[f>>2]=t[r>>2];t[f+4>>2]=t[r+4>>2];t[f+8>>2]=t[r+8>>2];t[f+12>>2]=t[r+12>>2];a=f+8|0;n=f+24|0;A=1;while(1){if((A|0)>=(l|0))break;o=r+(A<<4)|0;b=+c[o>>3];c[f>>3]=+c[(+c[f>>3]>3];u=+c[o+8>>3];c[a>>3]=+c[(+c[a>>3]>3];c[i>>3]=+c[(+c[i>>3]>b?i:o)>>3];c[n>>3]=+c[(+c[n>>3]>u?i:o)+8>>3];A=A+1|0}t[e>>2]=t[f>>2];t[e+4>>2]=t[f+4>>2];t[e+8>>2]=t[f+8>>2];t[e+12>>2]=t[f+12>>2];t[e+16>>2]=t[f+16>>2];t[e+20>>2]=t[f+20>>2];t[e+24>>2]=t[f+24>>2];t[e+28>>2]=t[f+28>>2];h=s;return}function Hx(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=h;h=h+64|0;n=r+32|0;i=r;a=t[e+16>>2]|0;e=a+16|0;a=t[a+116>>2]&1;t[n>>2]=t[e>>2];t[n+4>>2]=t[e+4>>2];t[n+8>>2]=t[e+8>>2];t[n+12>>2]=t[e+12>>2];t[n+16>>2]=t[e+16>>2];t[n+20>>2]=t[e+20>>2];t[n+24>>2]=t[e+24>>2];t[n+28>>2]=t[e+28>>2];Px(i,n,A,a);t[e>>2]=t[i>>2];t[e+4>>2]=t[i+4>>2];t[e+8>>2]=t[i+8>>2];t[e+12>>2]=t[i+12>>2];t[e+16>>2]=t[i+16>>2];t[e+20>>2]=t[i+20>>2];t[e+24>>2]=t[i+24>>2];t[e+28>>2]=t[i+28>>2];h=r;return}function Px(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0.0,l=0,s=0.0,o=0.0,u=0.0;n=+c[r+56>>3];o=+c[r+64>>3];l=i<<24>>24==0;s=+c[r+24>>3];f=+c[r+32>>3];u=(l?s:f)*.5;a=n-u;n=u+n;if(a<+c[A>>3])c[A>>3]=a;i=A+16|0;if(n>+c[i>>3])c[i>>3]=n;n=(l?f:s)*.5;a=o-n;n=n+o;i=A+8|0;if(a<+c[i>>3])c[i>>3]=a;i=A+24|0;if(n>+c[i>>3])c[i>>3]=n;t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];t[e+16>>2]=t[A+16>>2];t[e+20>>2]=t[A+20>>2];t[e+24>>2]=t[A+24>>2];t[e+28>>2]=t[A+28>>2];return}function Xx(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0.0,R=0.0,x=0.0,J=0.0;V=h;h=h+448|0;W=V+416|0;g=V+384|0;m=V+304|0;M=V+256|0;z=V+192|0;Z=V+144|0;G=V+96|0;A=V+400|0;r=V+368|0;a=V+352|0;n=V+336|0;p=V+288|0;E=V+224|0;B=V+160|0;y=V+112|0;C=V+64|0;I=V+32|0;Y=V;F=e+16|0;if((gk(e)|0)==0?(t[(t[F>>2]|0)+180>>2]|0)==0:0){Sx(A,0.0,0.0);t[M>>2]=t[A>>2];t[M+4>>2]=t[A+4>>2];t[M+8>>2]=t[A+8>>2];t[M+12>>2]=t[A+12>>2];M=M+16|0;Sx(r,0.0,0.0);t[M>>2]=t[r>>2];t[M+4>>2]=t[r+4>>2];t[M+8>>2]=t[r+8>>2];t[M+12>>2]=t[r+12>>2]}else{Sx(a,2147483647.0,2147483647.0);t[M>>2]=t[a>>2];t[M+4>>2]=t[a+4>>2];t[M+8>>2]=t[a+8>>2];t[M+12>>2]=t[a+12>>2];D=M+16|0;Sx(n,-2147483647.0,-2147483647.0);t[D>>2]=t[n>>2];t[D+4>>2]=t[n+4>>2];t[D+8>>2]=t[n+8>>2];t[D+12>>2]=t[n+12>>2];b=G+8|0;w=m+16|0;L=M+8|0;k=m+8|0;Q=M+24|0;d=m+24|0;v=Z+8|0;u=sd(e)|0;while(1){if(!u)break;Ix(Z,u);A=u+16|0;o=t[A>>2]|0;c[G>>3]=(+c[o+96>>3]+ +c[o+88>>3])*.5;c[b>>3]=+c[o+80>>3]*.5;t[g>>2]=t[Z>>2];t[g+4>>2]=t[Z+4>>2];t[g+8>>2]=t[Z+8>>2];t[g+12>>2]=t[Z+12>>2];t[W>>2]=t[G>>2];t[W+4>>2]=t[G+4>>2];t[W+8>>2]=t[G+8>>2];t[W+12>>2]=t[G+12>>2];jx(m,g,W);t[g>>2]=t[Z>>2];t[g+4>>2]=t[Z+4>>2];t[g+8>>2]=t[Z+8>>2];t[g+12>>2]=t[Z+12>>2];t[W>>2]=t[G>>2];t[W+4>>2]=t[G+4>>2];t[W+8>>2]=t[G+8>>2];t[W+12>>2]=t[G+12>>2];Ux(p,g,W);t[w>>2]=t[p>>2];t[w+4>>2]=t[p+4>>2];t[w+8>>2]=t[p+8>>2];t[w+12>>2]=t[p+12>>2];c[M>>3]=+c[(+c[M>>3]<+c[m>>3]?M:m)>>3];c[L>>3]=+c[(+c[L>>3]<+c[k>>3]?M:m)+8>>3];c[D>>3]=+c[(+c[D>>3]>+c[w>>3]?M:m)+16>>3];c[Q>>3]=+c[(+c[Q>>3]>+c[d>>3]?M:m)+24>>3];A=t[(t[A>>2]|0)+108>>2]|0;if(A|0?i[A+81>>0]|0:0){o=t[(t[F>>2]|0)+116>>2]&1;t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];t[W+16>>2]=t[M+16>>2];t[W+20>>2]=t[M+20>>2];t[W+24>>2]=t[M+24>>2];t[W+28>>2]=t[M+28>>2];Px(E,W,A,o);t[M>>2]=t[E>>2];t[M+4>>2]=t[E+4>>2];t[M+8>>2]=t[E+8>>2];t[M+12>>2]=t[E+12>>2];t[M+16>>2]=t[E+16>>2];t[M+20>>2]=t[E+20>>2];t[M+24>>2]=t[E+24>>2];t[M+28>>2]=t[E+28>>2]}o=Ow(e,u)|0;while(1){if(!o)break;s=o+16|0;A=t[s>>2]|0;l=A+8|0;r=t[l>>2]|0;if(r|0){f=0;while(1){if((f|0)<(t[r+4>>2]|0))n=0;else break;while(1){a=t[r>>2]|0;if((n|0)>=(t[a+(f*48|0)+4>>2]|0))break;r=(t[a+(f*48|0)>>2]|0)+(n<<4)|0;t[Z>>2]=t[r>>2];t[Z+4>>2]=t[r+4>>2];t[Z+8>>2]=t[r+8>>2];t[Z+12>>2]=t[r+12>>2];R=+c[Z>>3];c[M>>3]=+c[(+c[M>>3]>3];N=+c[v>>3];c[L>>3]=+c[(+c[L>>3]>3];c[D>>3]=+c[(+c[D>>3]>R?D:Z)>>3];c[Q>>3]=+c[(+c[Q>>3]>N?D:Z)+8>>3];n=n+1|0;r=t[l>>2]|0}f=f+1|0}r=t[A+96>>2]|0;if((r|0)!=0?(i[r+81>>0]|0)!=0:0){A=t[(t[F>>2]|0)+116>>2]&1;t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];t[W+16>>2]=t[M+16>>2];t[W+20>>2]=t[M+20>>2];t[W+24>>2]=t[M+24>>2];t[W+28>>2]=t[M+28>>2];Px(B,W,r,A);t[M>>2]=t[B>>2];t[M+4>>2]=t[B+4>>2];t[M+8>>2]=t[B+8>>2];t[M+12>>2]=t[B+12>>2];t[M+16>>2]=t[B+16>>2];t[M+20>>2]=t[B+20>>2];t[M+24>>2]=t[B+24>>2];t[M+28>>2]=t[B+28>>2];A=t[s>>2]|0}r=t[A+100>>2]|0;if((r|0)!=0?(i[r+81>>0]|0)!=0:0){A=t[(t[F>>2]|0)+116>>2]&1;t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];t[W+16>>2]=t[M+16>>2];t[W+20>>2]=t[M+20>>2];t[W+24>>2]=t[M+24>>2];t[W+28>>2]=t[M+28>>2];Px(y,W,r,A);t[M>>2]=t[y>>2];t[M+4>>2]=t[y+4>>2];t[M+8>>2]=t[y+8>>2];t[M+12>>2]=t[y+12>>2];t[M+16>>2]=t[y+16>>2];t[M+20>>2]=t[y+20>>2];t[M+24>>2]=t[y+24>>2];t[M+28>>2]=t[y+28>>2];A=t[s>>2]|0}r=t[A+104>>2]|0;if((r|0)!=0?(i[r+81>>0]|0)!=0:0){A=t[(t[F>>2]|0)+116>>2]&1;t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];t[W+16>>2]=t[M+16>>2];t[W+20>>2]=t[M+20>>2];t[W+24>>2]=t[M+24>>2];t[W+28>>2]=t[M+28>>2];Px(C,W,r,A);t[M>>2]=t[C>>2];t[M+4>>2]=t[C+4>>2];t[M+8>>2]=t[C+8>>2];t[M+12>>2]=t[C+12>>2];t[M+16>>2]=t[C+16>>2];t[M+20>>2]=t[C+20>>2];t[M+24>>2]=t[C+24>>2];t[M+28>>2]=t[C+28>>2];A=t[s>>2]|0}A=t[A+108>>2]|0;if(A|0?i[A+81>>0]|0:0){s=t[(t[F>>2]|0)+116>>2]&1;t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];t[W+16>>2]=t[M+16>>2];t[W+20>>2]=t[M+20>>2];t[W+24>>2]=t[M+24>>2];t[W+28>>2]=t[M+28>>2];Px(I,W,A,s);t[M>>2]=t[I>>2];t[M+4>>2]=t[I+4>>2];t[M+8>>2]=t[I+8>>2];t[M+12>>2]=t[I+12>>2];t[M+16>>2]=t[I+16>>2];t[M+20>>2]=t[I+20>>2];t[M+24>>2]=t[I+24>>2];t[M+28>>2]=t[I+28>>2]}}o=qw(e,o)|0}u=cd(e,u)|0}A=t[F>>2]|0;a=t[A+180>>2]|0;n=A+184|0;f=z+8|0;l=z+16|0;s=z+24|0;r=1;while(1){if((r|0)>(a|0))break;J=+c[(t[(t[(t[n>>2]|0)+(r<<2)>>2]|0)+16>>2]|0)+16>>3];c[z>>3]=J;G=t[(t[(t[n>>2]|0)+(r<<2)>>2]|0)+16>>2]|0;x=+c[G+24>>3];c[f>>3]=x;N=+c[G+32>>3];c[l>>3]=N;R=+c[G+40>>3];c[s>>3]=R;c[M>>3]=+c[(+c[M>>3]>3];c[L>>3]=+c[(+c[L>>3]>3];c[D>>3]=+c[(+c[D>>3]>N?M:z)+16>>3];c[Q>>3]=+c[(+c[Q>>3]>R?M:z)+24>>3];r=r+1|0}r=t[A+12>>2]|0;if((r|0)!=0?(i[r+81>>0]|0)!=0:0){A=t[A+116>>2]&1;t[W>>2]=t[M>>2];t[W+4>>2]=t[M+4>>2];t[W+8>>2]=t[M+8>>2];t[W+12>>2]=t[M+12>>2];t[W+16>>2]=t[M+16>>2];t[W+20>>2]=t[M+20>>2];t[W+24>>2]=t[M+24>>2];t[W+28>>2]=t[M+28>>2];Px(Y,W,r,A);t[M>>2]=t[Y>>2];t[M+4>>2]=t[Y+4>>2];t[M+8>>2]=t[Y+8>>2];t[M+12>>2]=t[Y+12>>2];t[M+16>>2]=t[Y+16>>2];t[M+20>>2]=t[Y+20>>2];t[M+24>>2]=t[Y+24>>2];t[M+28>>2]=t[Y+28>>2];A=t[F>>2]|0}F=A+16|0;t[F>>2]=t[M>>2];t[F+4>>2]=t[M+4>>2];t[F+8>>2]=t[M+8>>2];t[F+12>>2]=t[M+12>>2];t[F+16>>2]=t[M+16>>2];t[F+20>>2]=t[M+20>>2];t[F+24>>2]=t[M+24>>2];t[F+28>>2]=t[M+28>>2]}h=V;return}function Sx(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function jx(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[A+8>>3]-+c[r+8>>3];c[e>>3]=+c[A>>3]-+c[r>>3];c[e+8>>3]=i;return}function Ux(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[r+8>>3]+ +c[A+8>>3];c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=i;return}function Tx(e){e=e|0;if((t[e+60>>2]|0)==(e|0))e=1;else e=(S1(Mk(e)|0,108006,7)|0)==0&1;return e|0}function Ox(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;e:do{if(!a)switch(Yd(A)|0){case 0:{a=zw(e,0,r,195059)|0;break e}case 1:{a=zw(e,1,r,195059)|0;break e}case 2:{a=zw(e,2,r,195059)|0;break e}default:{a=0;break e}}}while(0);Mw(A,a,i)|0;return a|0}function _x(e){e=e|0;var A=0,r=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+144|0;n=c;l=qx(e)|0;f=Uh(23592,t[4581]|0)|0;s=Rv(e,108014,1)|0;Sd(s,137483,280,1)|0;cw(n,128,c+16|0);A=sd(e)|0;while(1){if(!A)break;e:do{if(!(i[(t[A+16>>2]|0)+118>>0]|0)){r=Ow(e,A)|0;while(1){if(!r)break e;Kx(r,s,n,f,l);r=qw(e,r)|0}}}while(0);A=cd(e,A)|0}hw(n);Ph(f)|0;r=gk(s)|0;A=sd(s)|0;while(1){if(!A)break;f=cd(s,A)|0;Ed(e,A)|0;A=f}vk(s)|0;if(r|0){s=(t[e+16>>2]|0)+136|0;a[s>>1]=a[s>>1]|1}Ph(l)|0;h=c;return r|0}function qx(e){e=e|0;var A=0;A=Uh(23628,t[4581]|0)|0;fJ(e,A);return A|0}function Kx(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+48|0;k=g+32|0;w=g+24|0;v=g+16|0;d=g+8|0;c=g;u=t[e>>2]&3;o=t[((u|0)==3?e:e+48|0)+40>>2]|0;u=t[((u|0)==2?e:e+-48|0)+40>>2]|0;do{if(!(i[(t[u+16>>2]|0)+118>>0]|0)){if(!(y1(Mk(o)|0,108006,7)|0))b=$x(n,Mk(o)|0)|0;else b=0;if(!(y1(Mk(u)|0,108006,7)|0))l=$x(n,Mk(u)|0)|0;else l=0;f=(b|0)!=0;s=(l|0)!=0;if(f|s){if((b|0)==(l|0)){d=Mk(o)|0;v=Mk(o)|0;t[c>>2]=d;t[c+4>>2]=v;nw(0,108029,c)|0;break}n=eJ(a,e)|0;if(n|0){AJ(e,t[n+16>>2]|0,t[n+20>>2]|0)|0;break}if(!s)if(!(Wd(b,u)|0)){iJ(a,o,u,AJ(e,rJ(o,b,r,A)|0,u)|0);break}else{d=Mk(u)|0;v=Mk(b)|0;t[k>>2]=d;t[k+4>>2]=v;nw(0,108184,k)|0;break}if(!f)if(!(Wd(l,o)|0)){iJ(a,o,u,AJ(e,o,rJ(u,l,r,A)|0)|0);break}else{d=Mk(o)|0;v=Mk(l)|0;t[w>>2]=d;t[w+4>>2]=v;nw(0,108147,w)|0;break}if(Wd(l,b)|0){k=Mk(b)|0;v=Mk(l)|0;t[d>>2]=k;t[d+4>>2]=v;nw(0,108067,d)|0;break}if(!(Wd(b,l)|0)){v=rJ(o,b,r,A)|0;iJ(a,o,u,AJ(e,v,rJ(u,l,r,A)|0)|0);break}else{k=Mk(l)|0;d=Mk(b)|0;t[v>>2]=k;t[v+4>>2]=d;nw(0,108107,v)|0;break}}}}while(0);h=g;return}function $x(e,A){e=e|0;A=A|0;e=L5[t[e>>2]&63](e,A,512)|0;if(!e)e=0;else e=t[e+12>>2]|0;return e|0}function eJ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+16|0;i=r;a=t[A>>2]&3;t[i>>2]=t[((a|0)==3?A:A+48|0)+40>>2];t[i+4>>2]=t[((a|0)==2?A:A+-48|0)+40>>2];A=L5[t[e>>2]&63](e,i,512)|0;h=r;return A|0}function AJ(e,A,r){e=e|0;A=A|0;r=r|0;r=lk(Bd(A)|0,A,r,0,1)|0;Sd(r,137460,176,1)|0;jw(e,r)|0;return r|0}function rJ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0;c=h;h=h+112|0;n=c;s=c+4|0;bw(r,108221)|0;l=t[47321]|0;t[47321]=l+1;t[n>>2]=l;T4(s,137395,n)|0;bw(r,s)|0;s=r+4|0;n=t[s>>2]|0;l=r+8|0;if(n>>>0>=(t[l>>2]|0)>>>0){ow(r,1)|0;n=t[s>>2]|0}t[s>>2]=n+1;i[n>>0]=58;bw(r,Mk(A)|0)|0;f=yd(A)|0;n=t[s>>2]|0;if(n>>>0>=(t[l>>2]|0)>>>0){ow(r,1)|0;n=t[s>>2]|0}i[n>>0]=0;r=t[r>>2]|0;t[s>>2]=r;s=gd(f,r,1)|0;Sd(s,137447,304,1)|0;i[(t[s+16>>2]|0)+118>>0]=1;hd(A,s,1)|0;hd(a,e,1)|0;a=Bd(s)|0;t[47154]=Ox(a,s,108224,195059,t[47154]|0)|0;a=Bd(s)|0;t[47157]=Ox(a,s,141082,134335,t[47157]|0)|0;a=Bd(s)|0;t[47147]=Ox(a,s,108230,108236,t[47147]|0)|0;h=c;return s|0}function iJ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;a=h;h=h+32|0;n=a;u=n+8|0;t[u>>2]=A;o=n+12|0;t[o>>2]=r;b=t[i>>2]&3;l=i+48|0;s=n+16|0;t[s>>2]=t[((b|0)==3?i:l)+40>>2];c=i+-48|0;f=n+20|0;t[f>>2]=t[((b|0)==2?i:c)+40>>2];L5[t[e>>2]&63](e,n,1)|0;t[u>>2]=r;t[o>>2]=A;r=t[i>>2]&3;t[s>>2]=t[((r|0)==2?i:c)+40>>2];t[f>>2]=t[((r|0)==3?i:l)+40>>2];L5[t[e>>2]&63](e,n,1)|0;h=a;return}function aJ(e,A,r){e=e|0;A=A|0;r=r|0;r=KF(24)|0;t[r+8>>2]=t[A+8>>2];t[r+12>>2]=t[A+12>>2];t[r+16>>2]=t[A+16>>2];t[r+20>>2]=t[A+20>>2];return r|0}function tJ(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function nJ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=t[A>>2]|0;i=t[r>>2]|0;if(e>>>0>=i>>>0)if(e>>>0>i>>>0)e=1;else{A=t[A+4>>2]|0;r=t[r+4>>2]|0;return(A>>>0>>0?-1:A>>>0>r>>>0&1)|0}else e=-1;return e|0}function fJ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;f=h;h=h+16|0;n=f;a=e+16|0;i=1;while(1){e=t[a>>2]|0;if((i|0)>(t[e+180>>2]|0))break;e=t[(t[e+184>>2]|0)+(i<<2)>>2]|0;r=Mk(e)|0;if(!(L5[t[A>>2]&63](A,r,512)|0)){l=KF(16)|0;t[l+8>>2]=r;t[l+12>>2]=e;L5[t[A>>2]&63](A,l,1)|0}else{t[n>>2]=r;nw(0,108240,n)|0}fJ(e,A);i=i+1|0}h=f;return}function lJ(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function sJ(e){e=e|0;var A=0,r=0,i=0;i=Rv(e,108014,1)|0;Sd(i,137483,280,1)|0;A=sd(e)|0;while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;cJ(r,i);r=qw(e,r)|0}A=cd(e,A)|0}A=sd(i)|0;while(1){if(!A)break;r=cd(i,A)|0;oJ(A);Ed(e,A)|0;A=r}vk(i)|0;return}function cJ(e,A){e=e|0;A=A|0;var r=0,a=0;r=t[e>>2]&3;a=t[((r|0)==3?e:e+48|0)+40>>2]|0;r=t[((r|0)==2?e:e+-48|0)+40>>2]|0;if(!((i[(t[a+16>>2]|0)+118>>0]|0)==0?!(i[(t[r+16>>2]|0)+118>>0]|0):0)){a=uJ(a,A)|0;r=AJ(e,a,uJ(r,A)|0)|0;a=t[e+16>>2]|0;A=a+8|0;r=t[r+16>>2]|0;t[r+8>>2]=t[A>>2];t[A>>2]=0;A=a+96|0;t[r+96>>2]=t[A>>2];t[A>>2]=0;A=a+108|0;t[r+108>>2]=t[A>>2];t[A>>2]=0;A=a+100|0;t[r+100>>2]=t[A>>2];t[A>>2]=0;a=a+104|0;t[r+104>>2]=t[a>>2];t[a>>2]=0;bJ(e)}return}function oJ(e){e=e|0;var A=0,r=0,i=0;i=e+16|0;A=t[i>>2]|0;r=t[A+132>>2]|0;if(r){G2(r);A=t[i>>2]|0}r=t[A+8>>2]|0;if(r){F5[t[(t[r+4>>2]|0)+4>>2]&127](e);A=t[i>>2]|0}SF(t[A+104>>2]|0);SF(t[(t[i>>2]|0)+108>>2]|0);Ud(e,137447)|0;return}function uJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;a=Bd(e)|0;e:do{if(i[(t[e+16>>2]|0)+118>>0]|0){hd(A,e,1)|0;e=C1(Mk(e)|0,58)|0;if(!e)ge(111208,107661,1225,108292);A=e+1|0;e=gd(a,A,0)|0;if(!e){e=gd(a,A,1)|0;Sd(e,137447,304,1)|0;A=Vw(a,1,0)|0;while(1){if(!A)break e;n=Pw(e,A)|0;r=t[A+12>>2]|0;if((n|0)!=(r|0))Mw(e,A,r)|0;A=Vw(a,1,A)|0}}}}while(0);return e|0}function bJ(e){e=e|0;var A=0;A=e+16|0;G2(t[(t[A>>2]|0)+144>>2]|0);hJ(e);SF(t[(t[A>>2]|0)+96>>2]|0);SF(t[(t[A>>2]|0)+108>>2]|0);SF(t[(t[A>>2]|0)+100>>2]|0);SF(t[(t[A>>2]|0)+104>>2]|0);Ud(e,137460)|0;return}function hJ(e){e=e|0;var A=0,r=0,i=0;i=e+16|0;e=t[i>>2]|0;A=t[e+8>>2]|0;if(A){r=0;while(1){e=t[A>>2]|0;if((r|0)>=(t[A+4>>2]|0))break;G2(t[e+(r*48|0)>>2]|0);r=r+1|0;A=t[(t[i>>2]|0)+8>>2]|0}G2(e);G2(t[(t[i>>2]|0)+8>>2]|0);e=t[i>>2]|0}t[e+8>>2]=0;return}function wJ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=zw(e,A,r,0)|0;if(!a)a=zw(e,A,r,i)|0;return a|0}function kJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+32|0;l=b;f=b+8|0;s=b+16|0;o=C1(e,59)|0;u=A+4|0;r=t[u>>2]|0;c=A+8|0;if(r>>>0>=(t[c>>2]|0)>>>0){ow(A,1)|0;r=t[u>>2]|0}t[u>>2]=r+1;i[r>>0]=38;if(((o|0)!=0?(a=o-e|0,(a+-2|0)>>>0<=6):0)?(X4(s,e,a)|0,i[s+a>>0]=0,t[f>>2]=s,n=r8(f,23664,252,8,96)|0,(n|0)!=0):0){t[l>>2]=t[n+4>>2];T4(s,137395,l)|0;e=t[u>>2]|0;if(e>>>0>=(t[c>>2]|0)>>>0){ow(A,1)|0;e=t[u>>2]|0}t[u>>2]=e+1;i[e>>0]=35;bw(A,s)|0;e=t[u>>2]|0;if(e>>>0>=(t[c>>2]|0)>>>0){ow(A,1)|0;e=t[u>>2]|0}t[u>>2]=e+1;i[e>>0]=59;e=o+1|0}h=b;return e|0}function dJ(e,A){e=e|0;A=A|0;return e1(t[e>>2]|0,t[A>>2]|0)|0}function vJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+1072|0;c=k+8|0;s=k;l=k+16|0;b=k+24|0;t[l>>2]=e;if((t[47322]|0)!=(A|0)){t[47322]=A;i[194958]=0}cw(b,1024,k+40|0);w=b+4|0;u=b+8|0;while(1){a=e+1|0;t[l>>2]=a;r=i[e>>0]|0;if(!(r<<24>>24))break;do{if((r&255)<192)if(r<<24>>24==38){a=mJ(l)|0;if(!a)r=38;else{if(a>>>0<127){r=a&255;break}e=t[w>>2]|0;r=e>>>0>=(t[u>>2]|0)>>>0;if(a>>>0<2047){if(r){ow(b,1)|0;e=t[w>>2]|0}t[w>>2]=e+1;i[e>>0]=a>>>6|192;r=(a&63|128)&255;break}if(r){ow(b,1)|0;e=t[w>>2]|0}t[w>>2]=e+1;i[e>>0]=a>>>12|224;e=t[w>>2]|0;if(e>>>0>=(t[u>>2]|0)>>>0){ow(b,1)|0;e=t[w>>2]|0}t[w>>2]=e+1;i[e>>0]=a>>>6&63|128;r=(a&63|128)&255}}else{f=0;o=9}else if((r&255)>=224)if((r&255)>=240)if((r&255)<248){f=3;o=9}else{if(!(i[194958]|0)){t[s>>2]=Mk(A)|0;nw(0,109707,s)|0;i[194958]=1}f=-1;r=gJ(r,b)|0;o=9}else{f=2;o=9}else{f=1;o=9}}while(0);do{if((o|0)==9){o=0;n=0;while(1){if((n|0)>=(f|0)){o=34;break}if((i[a>>0]&-64)<<24>>24!=-128)break;e=t[w>>2]|0;if(e>>>0>=(t[u>>2]|0)>>>0){ow(b,1)|0;e=t[w>>2]|0}t[w>>2]=e+1;i[e>>0]=r;n=n+1|0;r=i[a>>0]|0;a=a+1|0}if((o|0)==34){o=0;t[l>>2]=a;break}t[l>>2]=a;if(!(i[194958]|0)){n=Mk(A)|0;t[c>>2]=f+1;t[c+4>>2]=n;nw(0,109828,c)|0;i[194958]=1}r=gJ(r,b)|0}}while(0);e=t[w>>2]|0;if(e>>>0>=(t[u>>2]|0)>>>0){ow(b,1)|0;e=t[w>>2]|0}t[w>>2]=e+1;i[e>>0]=r;e=t[l>>2]|0}e=t[w>>2]|0;if(e>>>0>=(t[u>>2]|0)>>>0){ow(b,1)|0;e=t[w>>2]|0}i[e>>0]=0;u=t[b>>2]|0;t[w>>2]=u;w=o3(u)|0;hw(b);h=k;return w|0}function gJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;s=h;h=h+16|0;n=s;i[n>>0]=e;i[n+1>>0]=0;n=pJ(n)|0;f=A+4|0;l=A+8|0;r=U2(n)|0;a=n;while(1){if((r|0)<=1)break;e=t[f>>2]|0;if(e>>>0>=(t[l>>2]|0)>>>0){ow(A,1)|0;e=t[f>>2]|0}c=i[a>>0]|0;t[f>>2]=e+1;i[e>>0]=c;r=r+-1|0;a=a+1|0}c=i[a>>0]|0;G2(n);h=s;return c|0}function mJ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+32|0;f=l;A=l+8|0;r=t[e>>2]|0;e:do{if((i[r>>0]|0)!=35){t[f>>2]=A;n=0;A:while(1){if((n|0)>=8){A=0;break e}a=i[r+n>>0]|0;switch(a<<24>>24){case 0:{A=0;break e}case 59:break A;default:{}}i[A>>0]=a;A=A+1|0;n=n+1|0}i[A>>0]=0;A=r8(f,23664,252,8,96)|0;if(!A)A=0;else{r=r+(n+1)|0;A=t[A+4>>2]|0}}else{f=i[r+1>>0]|0;A=f&255;A:do{if((f|32)<<24>>24==120){f=0;n=2;while(1){if((n|0)>=8){a=f;break A}a=i[r+n>>0]|0;A=a&255;if((a+-65&255)>=6)if((a+-97&255)>=6)if((a+-48&255)<10)a=-48;else{a=f;break A}else a=-87;else a=-55;A=a+A|0;f=A+(f<<4)|0;n=n+1|0}}else{a=0;n=1;while(1){if((n|0)>=8)break A;f=i[r+n>>0]|0;A=f&255;if((f+-48&255)>=10)break A;a=(a*10|0)+-48+A|0;n=n+1|0}}}while(0);A=(A|0)==59;r=A?r+(n+1)|0:r;A=A?a:0}}while(0);t[e>>2]=r;h=l;return A|0}function pJ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+1056|0;n=c;l=c+8|0;t[n>>2]=e;cw(l,1024,c+24|0);s=l+4|0;f=l+8|0;while(1){t[n>>2]=e+1;A=i[e>>0]|0;if(!(A<<24>>24))break;e=A&255;if(A<<24>>24==38){e=mJ(n)|0;if(!e){e=38;a=6}else a=5}else a=5;do{if((a|0)==5){a=0;if(e>>>0<127)a=6;else{A=t[s>>2]|0;r=A>>>0>=(t[f>>2]|0)>>>0;if(e>>>0<2047){if(r){ow(l,1)|0;A=t[s>>2]|0}t[s>>2]=A+1;i[A>>0]=e>>>6|192;A=t[s>>2]|0;if(A>>>0>=(t[f>>2]|0)>>>0){ow(l,1)|0;A=t[s>>2]|0}e=e&63|128;break}if(r){ow(l,1)|0;A=t[s>>2]|0}t[s>>2]=A+1;i[A>>0]=e>>>12|224;A=t[s>>2]|0;if(A>>>0>=(t[f>>2]|0)>>>0){ow(l,1)|0;A=t[s>>2]|0}t[s>>2]=A+1;i[A>>0]=e>>>6&63|128;A=t[s>>2]|0;if(A>>>0>=(t[f>>2]|0)>>>0){ow(l,1)|0;A=t[s>>2]|0}e=e&63|128}}}while(0);if((a|0)==6){A=t[s>>2]|0;if(A>>>0>=(t[f>>2]|0)>>>0){ow(l,1)|0;A=t[s>>2]|0}}t[s>>2]=A+1;i[A>>0]=e;e=t[n>>2]|0}e=t[s>>2]|0;if(e>>>0>=(t[f>>2]|0)>>>0){ow(l,1)|0;e=t[s>>2]|0}i[e>>0]=0;f=t[l>>2]|0;t[s>>2]=f;s=o3(f)|0;hw(l);h=c;return s|0}function EJ(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=h;h=h+1040|0;n=l;cw(n,1024,l+16|0);f=n+4|0;a=n+8|0;while(1){A=e+1|0;r=i[e>>0]|0;if(!(r<<24>>24))break;if((r&255)<127){e=t[f>>2]|0;if(e>>>0>=(t[a>>2]|0)>>>0){ow(n,1)|0;e=t[f>>2]|0}t[f>>2]=e+1;i[e>>0]=r;e=A;continue}else{r=i[A>>0]&63|r<<6&255;A=t[f>>2]|0;if(A>>>0>=(t[a>>2]|0)>>>0){ow(n,1)|0;A=t[f>>2]|0}t[f>>2]=A+1;i[A>>0]=r;e=e+2|0;continue}}e=t[f>>2]|0;if(e>>>0>=(t[a>>2]|0)>>>0){ow(n,1)|0;e=t[f>>2]|0}i[e>>0]=0;a=t[n>>2]|0;t[f>>2]=a;f=o3(a)|0;hw(n);h=l;return f|0}function BJ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0;u=h;h=h+80|0;i=u+48|0;r=u+32|0;a=u+64|0;n=u+16|0;f=u;l=A+16|0;s=e+16|0;o=t[s>>2]|0;if(((+c[l>>3]>=+c[o+48>>3]?+c[o+64>>3]>=+c[A>>3]:0)?+c[A+24>>3]>=+c[o+56>>3]:0)?+c[o+72>>3]>=+c[A+8>>3]:0){o=o+16|0;t[r>>2]=t[l>>2];t[r+4>>2]=t[l+4>>2];t[r+8>>2]=t[l+8>>2];t[r+12>>2]=t[l+12>>2];t[i>>2]=t[A>>2];t[i+4>>2]=t[A+4>>2];t[i+8>>2]=t[A+8>>2];t[i+12>>2]=t[A+12>>2];yJ(n,r,i);t[r>>2]=t[o>>2];t[r+4>>2]=t[o+4>>2];t[r+8>>2]=t[o+8>>2];t[r+12>>2]=t[o+12>>2];t[i>>2]=t[n>>2];t[i+4>>2]=t[n+4>>2];t[i+8>>2]=t[n+8>>2];t[i+12>>2]=t[n+12>>2];jx(f,r,i);t[a>>2]=e;t[a+4>>2]=0;r=t[(t[(t[(t[s>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0;t[i>>2]=t[f>>2];t[i+4>>2]=t[f+4>>2];t[i+8>>2]=t[f+8>>2];t[i+12>>2]=t[f+12>>2];r=Z5[r&127](a,i)|0}else r=0;h=u;return r|0}function yJ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=(+c[r+8>>3]+ +c[A+8>>3])*.5;c[e>>3]=(+c[r>>3]+ +c[A>>3])*.5;c[e+8>>3]=i;return}function CJ(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0,n=0,f=0.0,l=0,s=0,o=0,u=0;i=h;h=h+80|0;l=i+64|0;s=i+48|0;o=i;u=i+32|0;n=i+16|0;c[o>>3]=+c[e+24>>3]*.5;c[o+8>>3]=+c[e+32>>3]*.5;e=e+56|0;t[s>>2]=t[e>>2];t[s+4>>2]=t[e+4>>2];t[s+8>>2]=t[e+8>>2];t[s+12>>2]=t[e+12>>2];t[l>>2]=t[o>>2];t[l+4>>2]=t[o+4>>2];t[l+8>>2]=t[o+8>>2];t[l+12>>2]=t[o+12>>2];jx(u,s,l);f=+c[u>>3];a=+c[u+8>>3];t[s>>2]=t[e>>2];t[s+4>>2]=t[e+4>>2];t[s+8>>2]=t[e+8>>2];t[s+12>>2]=t[e+12>>2];t[l>>2]=t[o>>2];t[l+4>>2]=t[o+4>>2];t[l+8>>2]=t[o+8>>2];t[l+12>>2]=t[o+12>>2];Ux(n,s,l);r=+c[n+8>>3];if((+c[A+16>>3]>=f?+c[n>>3]>=+c[A>>3]:0)?+c[A+24>>3]>=a:0)e=r>=+c[A+8>>3]&1;else e=0;h=i;return e|0}function IJ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+80|0;c=u+48|0;s=u;f=e+16|0;e=t[f>>2]|0;l=t[e+8>>2]|0;e:do{if((l|0)!=0?(n=l+8|0,t[s>>2]=t[n>>2],t[s+4>>2]=t[n+4>>2],t[s+8>>2]=t[n+8>>2],t[s+12>>2]=t[n+12>>2],t[s+16>>2]=t[n+16>>2],t[s+20>>2]=t[n+20>>2],t[s+24>>2]=t[n+24>>2],t[s+28>>2]=t[n+28>>2],t[c>>2]=t[A>>2],t[c+4>>2]=t[A+4>>2],t[c+8>>2]=t[A+8>>2],t[c+12>>2]=t[A+12>>2],t[c+16>>2]=t[A+16>>2],t[c+20>>2]=t[A+20>>2],t[c+24>>2]=t[A+24>>2],t[c+28>>2]=t[A+28>>2],(ZJ(s,c)|0)!=0):0){r=l+4|0;e=0;while(1){if((e|0)>=(t[r>>2]|0))break;i=s;a=(t[l>>2]|0)+(e*48|0)|0;n=i+48|0;do{t[i>>2]=t[a>>2];i=i+4|0;a=a+4|0}while((i|0)<(n|0));t[c>>2]=t[A>>2];t[c+4>>2]=t[A+4>>2];t[c+8>>2]=t[A+8>>2];t[c+12>>2]=t[A+12>>2];t[c+16>>2]=t[A+16>>2];t[c+20>>2]=t[A+20>>2];t[c+24>>2]=t[A+24>>2];t[c+28>>2]=t[A+28>>2];if(!((GJ(s,c)|0)<<24>>24))e=e+1|0;else{e=1;break e}}e=t[f>>2]|0;o=7}else o=7}while(0);do{if((o|0)==7){e=t[e+96>>2]|0;if(e|0?(t[c>>2]=t[A>>2],t[c+4>>2]=t[A+4>>2],t[c+8>>2]=t[A+8>>2],t[c+12>>2]=t[A+12>>2],t[c+16>>2]=t[A+16>>2],t[c+20>>2]=t[A+20>>2],t[c+24>>2]=t[A+24>>2],t[c+28>>2]=t[A+28>>2],(CJ(e,c)|0)<<24>>24):0){e=1;break}e=0}}while(0);h=u;return e|0}function ZJ(e,A){e=e|0;A=A|0;if((+c[e+16>>3]>=+c[A>>3]?+c[A+16>>3]>=+c[e>>3]:0)?+c[e+24>>3]>=+c[A+8>>3]:0)e=+c[A+24>>3]>=+c[e+8>>3]&1;else e=0;return e|0}function GJ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+96|0;c=u+64|0;s=u+48|0;l=u+32|0;a=u+16|0;n=u;o=e+4|0;r=t[o>>2]|0;if(!r)ge(109937,107661,1637,109945);i=t[e>>2]|0;t[n>>2]=t[i>>2];t[n+4>>2]=t[i+4>>2];t[n+8>>2]=t[i+8>>2];t[n+12>>2]=t[i+12>>2];i=1;while(1){if((i|0)>=(r|0)){f=7;break}r=(t[e>>2]|0)+(i<<4)|0;t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];t[l>>2]=t[r>>2];t[l+4>>2]=t[r+4>>2];t[l+8>>2]=t[r+8>>2];t[l+12>>2]=t[r+12>>2];t[s>>2]=t[n>>2];t[s+4>>2]=t[n+4>>2];t[s+8>>2]=t[n+8>>2];t[s+12>>2]=t[n+12>>2];t[c>>2]=t[A>>2];t[c+4>>2]=t[A+4>>2];t[c+8>>2]=t[A+8>>2];t[c+12>>2]=t[A+12>>2];t[c+16>>2]=t[A+16>>2];t[c+20>>2]=t[A+20>>2];t[c+24>>2]=t[A+24>>2];t[c+28>>2]=t[A+28>>2];if((CF(l,s,c)|0)!=-1){r=1;break}t[n>>2]=t[a>>2];t[n+4>>2]=t[a+4>>2];t[n+8>>2]=t[a+8>>2];t[n+12>>2]=t[a+12>>2];i=i+1|0;r=t[o>>2]|0}do{if((f|0)==7){r=t[e+8>>2]|0;if(r|0?(n=e+16|0,f=t[e>>2]|0,t[l>>2]=t[n>>2],t[l+4>>2]=t[n+4>>2],t[l+8>>2]=t[n+8>>2],t[l+12>>2]=t[n+12>>2],t[s>>2]=t[f>>2],t[s+4>>2]=t[f+4>>2],t[s+8>>2]=t[f+8>>2],t[s+12>>2]=t[f+12>>2],t[c>>2]=t[A>>2],t[c+4>>2]=t[A+4>>2],t[c+8>>2]=t[A+8>>2],t[c+12>>2]=t[A+12>>2],t[c+16>>2]=t[A+16>>2],t[c+20>>2]=t[A+20>>2],t[c+24>>2]=t[A+24>>2],t[c+28>>2]=t[A+28>>2],(LJ(l,s,r,c)|0)<<24>>24):0){r=1;break}r=t[e+12>>2]|0;if(r|0?(f=e+32|0,o=(t[e>>2]|0)+((t[o>>2]|0)+-1<<4)|0,t[l>>2]=t[f>>2],t[l+4>>2]=t[f+4>>2],t[l+8>>2]=t[f+8>>2],t[l+12>>2]=t[f+12>>2],t[s>>2]=t[o>>2],t[s+4>>2]=t[o+4>>2],t[s+8>>2]=t[o+8>>2],t[s+12>>2]=t[o+12>>2],t[c>>2]=t[A>>2],t[c+4>>2]=t[A+4>>2],t[c+8>>2]=t[A+8>>2],t[c+12>>2]=t[A+12>>2],t[c+16>>2]=t[A+16>>2],t[c+20>>2]=t[A+20>>2],t[c+24>>2]=t[A+24>>2],t[c+28>>2]=t[A+28>>2],(LJ(l,s,r,c)|0)<<24>>24):0){r=1;break}r=0}}while(0);h=u;return r|0}function LJ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0.0;o=h;h=h+160|0;n=o+144|0;a=o+128|0;u=o+96|0;f=o+64|0;l=o+32|0;s=o;b=+c[i+16>>3];t[a>>2]=t[e>>2];t[a+4>>2]=t[e+4>>2];t[a+8>>2]=t[e+8>>2];t[a+12>>2]=t[e+12>>2];t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];_E(u,a,n,1.0,r);if(((b>=+c[u>>3]?(t[a>>2]=t[e>>2],t[a+4>>2]=t[e+4>>2],t[a+8>>2]=t[e+8>>2],t[a+12>>2]=t[e+12>>2],t[n>>2]=t[A>>2],t[n+4>>2]=t[A+4>>2],t[n+8>>2]=t[A+8>>2],t[n+12>>2]=t[A+12>>2],_E(f,a,n,1.0,r),+c[f+16>>3]>=+c[i>>3]):0)?(b=+c[i+24>>3],t[a>>2]=t[e>>2],t[a+4>>2]=t[e+4>>2],t[a+8>>2]=t[e+8>>2],t[a+12>>2]=t[e+12>>2],t[n>>2]=t[A>>2],t[n+4>>2]=t[A+4>>2],t[n+8>>2]=t[A+8>>2],t[n+12>>2]=t[A+12>>2],_E(l,a,n,1.0,r),b>=+c[l+8>>3]):0)?(t[a>>2]=t[e>>2],t[a+4>>2]=t[e+4>>2],t[a+8>>2]=t[e+8>>2],t[a+12>>2]=t[e+12>>2],t[n>>2]=t[A>>2],t[n+4>>2]=t[A+4>>2],t[n+8>>2]=t[A+8>>2],t[n+12>>2]=t[A+12>>2],_E(s,a,n,1.0,r),+c[s+24>>3]>=+c[i+8>>3]):0)a=1;else a=0;h=o;return a|0}function QJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;n=h;h=h+16|0;a=n;e:do{if((e|0)!=0?(r=i[e>>0]|0,r<<24>>24!=0):0){do{switch(r<<24>>24|0){case 48:{A=2;break e}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{A=10;break e}case 67:case 99:{r=e+1|0;if(!(N1(r,109960)|0)){A=4;break e}if(!(N1(r,109966)|0)){A=12;break e}break}case 70:case 102:{if(!(N1(e+1|0,109974)|0)){A=2;break e}break}case 76:case 108:{if(!(N1(e+1|0,109979)|0)){A=2;break e}break}case 78:case 110:{r=e+1|0;if(!(N1(r,109983)|0)){A=0;break e}if(!(N1(r,109987)|0)){A=2;break e}break}case 79:case 111:{if(!(N1(e+1|0,109989)|0)){A=8;break e}break}case 80:case 112:{if(!(N1(e+1|0,109994)|0)){A=6;break e}break}case 83:case 115:{if(!(N1(e+1|0,110002)|0)){A=10;break e}break}case 84:case 116:{if(!(N1(e+1|0,110008)|0)){A=10;break e}break}case 89:case 121:{if(!(N1(e+1|0,110012)|0)){A=10;break e}break}default:{}}}while(0);t[a>>2]=e;nw(0,110015,a)|0}}while(0);h=n;return A|0}function DJ(e,A){e=e|0;A=A|0;var r=0;r=Hw(e,110056)|0;if(r)if(!(i[r>>0]|0))A=0;else A=QJ(r,A)|0;e=(t[e+16>>2]|0)+136|0;a[e>>1]=A|f[e>>1];return}function zJ(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;var t=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0.0,w=0,k=0.0,d=0,v=0.0,g=0,m=0,p=0,E=0;p=h;h=h+32|0;w=p+16|0;d=p;g=a&1;m=a&2;e:do{if((r|0)==2){v=+c[e+16>>3];t=+c[e>>3];l=+c[e+24>>3];f=+c[e+8>>3];t=t-(v-t);c[w>>3]=t;c[d>>3]=v;f=f-(l-f);c[w+8>>3]=f;c[d+8>>3]=l}else{n=+c[e>>3];c[d>>3]=n;c[w>>3]=n;l=+c[e+8>>3];o=d+8|0;c[o>>3]=l;u=w+8|0;c[u>>3]=l;a=0;t=n;f=l;while(1){if((a|0)>=(r|0)){v=n;break e}E=e+(a<<4)|0;k=+c[E>>3];s=+c[(k>3];c[w>>3]=s;v=+c[e+(a<<4)+8>>3];b=+c[(v>3];c[u>>3]=b;k=+c[(k>n?E:d)>>3];c[d>>3]=k;v=+c[(v>l?E:d)+8>>3];c[o>>3]=v;a=a+1|0;t=s;f=b;n=k;l=v}}}while(0);n=(v-t)*.5;k=n+t;b=(l-f)*.5;s=b+f;if(!g){t=l-s;l=i;f=+Y(+l);l=+W(+l);if(!m){n=f*t-s;t=-s-b*f}else{t=f*t;n=s-t;t=t+s}c[A+8>>3]=n;c[A+24>>3]=t;i=l*(v-k);c[A>>3]=k-i;c[A+16>>3]=i+k}else{i=+D(+(b*b+n*n));c[A+8>>3]=m|0?s:-s;c[A>>3]=k;c[A+16>>3]=i*.25;c[A+24>>3]=i}h=p;return}function WJ(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0;i=e+16|0;a=t[i>>2]|0;if(!(A<<24>>24)){r=+c[a+32>>3]*36.0;c[a+88>>3]=r;e=a+40|0}else{r=+c[a+40>>3]*36.0;c[a+88>>3]=r;e=a+32|0}c[a+96>>3]=r;c[(t[i>>2]|0)+80>>3]=+c[e>>3]*72.0;return}function YJ(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+32|0;s=u+8|0;a=u+4|0;n=u;r=t[A>>2]&3;i=t[((r|0)==3?A:A+48|0)+40>>2]|0;c=(t[(t[i+16>>2]|0)+232>>2]|0)+-1|0;e=t[(t[e+16>>2]|0)+196>>2]|0;f=t[e+(c<<6)+4>>2]|0;e=t[e+(c<<6)>>2]|0;c=s+8|0;t[c>>2]=-1;t[s>>2]=-1;o=s+12|0;t[o>>2]=e;l=s+4|0;t[l>>2]=e;MJ(i,t[((r|0)==2?A:A+-48|0)+40>>2]|0,a,n);a=t[a>>2]|0;n=t[n>>2]|0;r=0;i=e;A=-1;while(1){if((r|0)>=(i|0))break;i=i+-1|0;VJ(t[f+(r<<2)>>2]|0,s,a,n);if((r|0)!=(i|0))VJ(t[f+(i<<2)>>2]|0,s,a,n);e=t[l>>2]|0;A=t[s>>2]|0;if((e-A|0)<2)break;else r=r+1|0}if((A|0)>(e|0))e=(t[o>>2]|0)+(t[c>>2]|0)|0;else e=e+A|0;h=u;return(e+1|0)/2|0|0}function FJ(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;n=e+16|0;a=t[(t[n>>2]|0)+196>>2]|0;i=a+(A<<6)|0;a=t[a+(A<<6)+4>>2]|0;if(!a)a=$F((t[i>>2]<<2)+8|0)|0;else a=AM(a,(t[i>>2]<<2)+8|0)|0;i=t[(t[n>>2]|0)+196>>2]|0;t[i+(A<<6)+4>>2]=a;i=t[i+(A<<6)>>2]|0;while(1){if((i|0)<=(r|0))break;f=i+-1|0;l=t[a+(f<<2)>>2]|0;t[a+(i<<2)>>2]=l;l=(t[l+16>>2]|0)+236|0;t[l>>2]=(t[l>>2]|0)+1;i=f}f=zL(e)|0;l=a+(r<<2)|0;t[l>>2]=f;f=t[f+16>>2]|0;t[f+236>>2]=r;t[f+232>>2]=A;n=(t[(t[n>>2]|0)+196>>2]|0)+(A<<6)|0;f=(t[n>>2]|0)+1|0;t[n>>2]=f;t[a+(f<<2)>>2]=0;return t[l>>2]|0}function MJ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;e=t[(t[e+16>>2]|0)+236>>2]|0;A=t[(t[A+16>>2]|0)+236>>2]|0;a=(e|0)>(A|0);t[r>>2]=a?A:e;t[i>>2]=a?e:A;return}function VJ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;o=h;h=h+16|0;f=o+4|0;n=o;e=t[e+16>>2]|0;do{if((i[e+156>>0]|0)==1){c=t[e+236>>2]|0;if(t[e+176>>2]|0){l=t[e+180>>2]|0;e=0;n=0;f=0;while(1){s=t[l+(f<<2)>>2]|0;if(!s)break;u=t[(t[(t[((t[s>>2]&3|0)==2?s:s+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=(u|0)>(r|0);e=s?(u|0)<(a|0)?e:1:e;n=s?n:1;f=f+1|0}if(n<<24>>24!=0&e<<24>>24==0){t[A>>2]=c+1;break}if(!(n<<24>>24==0&e<<24>>24!=0))break;t[A+4>>2]=c+-1;break}if((t[e+184>>2]|0)!=2)ge(88397,88417,63,88424);l=t[e+180>>2]|0;u=t[l>>2]|0;l=t[l+4>>2]|0;MJ(t[((t[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0,t[((t[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0,f,n);l=t[n>>2]|0;if((l|0)<=(r|0)){t[A>>2]=c;t[A+8>>2]=c;break}e=t[f>>2]|0;if((e|0)>=(a|0)){t[A+4>>2]=c;t[A+12>>2]=c;break}n=(e|0)<(r|0);f=(l|0)>(a|0);if(!(f&n)){if(!(!n?!((l|0)<(a|0)&(e|0)==(r|0)):0))t[A+8>>2]=c;if(!f?!((l|0)==(a|0)&(e|0)>(r|0)):0)break;t[A+12>>2]=c}}}while(0);h=o;return}function NJ(e){e=e|0;t[47134]=1;aH(e);t[47134]=0;return}function RJ(e){e=e|0;t[47134]=2;aH(e);t[47134]=0;return}function xJ(e){e=e|0;var A=0;Sd(e,137447,304,1)|0;Fx(e);A=KF((f[(t[(Bd(e)|0)+16>>2]|0)+176>>1]|0)<<3)|0;t[(t[e+16>>2]|0)+132>>2]=A;WJ(e,t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1);return}function JJ(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0,m=0.0;v=h;h=h+64|0;l=v+48|0;b=v+40|0;s=v+24|0;f=v+8|0;k=v+56|0;o=v;do{if((e|0)!=0?(d=r+16|0,w=t[(t[d>>2]|0)+132>>2]|0,n=Pw(r,e)|0,(i[n>>0]|0)!=0):0){i[k>>0]=0;e=w+8|0;if((t[47137]|0)>2?(t[f>>2]=w,t[f+4>>2]=e,t[f+8>>2]=w+16,t[f+12>>2]=k,(V3(n,88535,f)|0)>2):0){i[(t[d>>2]|0)+119>>0]=1;n=t[47137]|0;e:do{if(+c[23293]>0.0){e=0;while(1){if((e|0)>=(n|0))break e;b=w+(e<<3)|0;c[b>>3]=+c[b>>3]/+c[23293];e=e+1|0}}}while(0);if((n|0)>3)gP(r,a,3);if((i[k>>0]|0)!=33){if(!A){e=1;break}if(!((mx(Pw(r,A)|0)|0)<<24>>24)){e=1;break}}i[(t[d>>2]|0)+119>>0]=3;e=1;break}t[s>>2]=w;t[s+4>>2]=e;t[s+8>>2]=k;if((V3(n,101749,s)|0)<=1){t[l>>2]=Mk(r)|0;t[l+4>>2]=n;nw(1,88549,l)|0;e=0;break}i[(t[d>>2]|0)+119>>0]=1;n=t[47137]|0;e:do{if(+c[23293]>0.0){e=0;while(1){if((e|0)>=(n|0))break e;s=w+(e<<3)|0;c[s>>3]=+c[s>>3]/+c[23293];e=e+1|0}}}while(0);do{if((n|0)>2){e=t[47171]|0;if((e|0?(u=Pw(r,e)|0,u|0):0)?(t[b>>2]=o,(V3(u,101209,b)|0)==1):0){m=+c[23293];g=+c[o>>3];c[w+16>>3]=m>0.0?g/m:g;gP(r,a,3);break}mP(r,a)}}while(0);if((i[k>>0]|0)!=33){if(!A){e=1;break}if(!((mx(Pw(r,A)|0)|0)<<24>>24)){e=1;break}}i[(t[d>>2]|0)+119>>0]=3;e=1}else e=0}while(0);h=v;return e|0}function HJ(e){e=e|0;var A=0,r=0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;bJ(A);A=qw(e,A)|0}oJ(r);r=cd(e,r)|0}PJ(e);return}function PJ(e){e=e|0;if((t[47134]|0)!=0|(t[46795]|0)<0)dP(e);if((yd(e)|0)!=(e|0))qd(e,0,137483);return}function XJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+48|0;o=k+32|0;b=k;s=zw(e,0,102637,0)|0;r=zw(e,0,102671,0)|0;w=(px(Hw(e,88593)|0,0)|0)<<24>>24!=0;if(!r)r=zw(e,0,102671,195059)|0;kP(e)|0;u=e+16|0;f=0;while(1){l=t[(t[(t[u>>2]|0)+152>>2]|0)+(f<<2)>>2]|0;if(!l){a=12;break}n=l+16|0;a=t[n>>2]|0;if(!(i[a+119>>0]|0)){if(y1(Mk(l)|0,108006,7)|0){a=8;break}a=t[n>>2]|0}a=t[a+108>>2]|0;if(a|0)SJ(l,a,102633);f=f+1|0}e:do{if((a|0)==8){w=Mk(l)|0;r=Mk(e)|0;t[o>>2]=w;t[o+4>>2]=r;nw(1,88605,o)|0;r=-1}else if((a|0)==12){jJ(e,s,r);l=UJ(e)|0;r=t[(t[u>>2]|0)+8>>2]|0;if(!(t[r+88>>2]|0))r=0;else{t[r+84>>2]=0;r=1}n=(A|0)!=0;f=(r|0)!=0;if(!(f|n&(t[47134]|0)==1^1)?(AU(e)|0)!=0:0){a=t[(t[u>>2]|0)+12>>2]|0;if(!a)a=1;else{i[a+81>>0]=0;a=1}}else a=0;Xx(e);if(f){A=(t[u>>2]|0)+16|0;bB(b,e);t[A>>2]=t[b>>2];t[A+4>>2]=t[b+4>>2];t[A+8>>2]=t[b+8>>2];t[A+12>>2]=t[b+12>>2];t[A+16>>2]=t[b+16>>2];t[A+20>>2]=t[b+20>>2];t[A+24>>2]=t[b+24>>2];t[A+28>>2]=t[b+28>>2]}if(!n){t[47138]=1;a=sd(e)|0;while(1){if(!a)break e;w=t[a+16>>2]|0;b=t[w+132>>2]|0;c[w+16>>3]=+c[b>>3]*72.0;c[w+24>>3]=+c[b+8>>3]*72.0;a=cd(e,a)|0}}do{if(!(w|f)){w=t[u>>2]|0;if(!(+c[w+16>>3]!=0.0)?!(+c[w+24>>3]!=0.0):0)break;PH(e)}}while(0);if(!((l|0)!=0&(a|(JH(e)|0)<<24>>24!=0))){if((l|0)==2){t[47138]=1;break}}else TJ(e);xH(e,0)}}while(0);h=k;return r|0}function SJ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;s=h;h=h+48|0;l=s+32|0;a=s+24|0;n=s+16|0;f=s;e=Hw(e,r)|0;if(e|0?(t[l>>2]=a,t[l+4>>2]=n,(V3(e,105503,l)|0)==2):0){l=A+56|0;qJ(f,+c[a>>3],+c[n>>3]);t[l>>2]=t[f>>2];t[l+4>>2]=t[f+4>>2];t[l+8>>2]=t[f+8>>2];t[l+12>>2]=t[f+12>>2];i[A+81>>0]=1}h=s;return}function jJ(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0;o=h;h=h+48|0;s=o+32|0;a=o+24|0;n=o+16|0;f=o;l=e+16|0;if((A|0?(t[(t[l>>2]|0)+12>>2]|0)!=0:0)?(u=Pw(e,A)|0,t[s>>2]=a,t[s+4>>2]=n,(V3(u,105503,s)|0)==2):0){u=(t[(t[l>>2]|0)+12>>2]|0)+56|0;qJ(f,+c[a>>3],+c[n>>3]);t[u>>2]=t[f>>2];t[u+4>>2]=t[f+4>>2];t[u+8>>2]=t[f+8>>2];t[u+12>>2]=t[f+12>>2];i[(t[(t[l>>2]|0)+12>>2]|0)+81>>0]=1}e:do{if(r|0){a=xv(e)|0;while(1){if(!a)break e;KJ(a,e,A,r);a=Jv(a)|0}}}while(0);h=o;return}function UJ(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if(mk(e)|0){a=zw(e,2,102623,0)|0;if(!((a|0)==0|(t[47134]|0)<2)){A=0;i=sd(e)|0;while(1){if(!i)break;r=Ow(e,i)|0;while(1){if(!r)break;n=A+((OJ(a,r)|0)!=0&1)|0;r=qw(e,r)|0;A=n}i=cd(e,i)|0}if(A){A=(A|0)==(mk(e)|0);A=A?2:1}else A=0}else A=0}else A=2;return A|0}function TJ(e){e=e|0;var A=0,r=0,i=0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;hJ(A);i=A+16|0;SF(t[(t[i>>2]|0)+96>>2]|0);SF(t[(t[i>>2]|0)+108>>2]|0);SF(t[(t[i>>2]|0)+100>>2]|0);SF(t[(t[i>>2]|0)+104>>2]|0);A=qw(e,A)|0}r=cd(e,r)|0}return}function OJ(e,A){e=e|0;A=A|0;var r=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0;Z=h;h=h+96|0;C=Z+72|0;B=Z+56|0;I=Z+48|0;y=Z+32|0;E=Z+16|0;d=Z+88|0;v=Z+8|0;g=Z;m=Z+84|0;p=Z+80|0;e=Pw(A,e)|0;do{if(i[e>>0]|0){WE(A,m,p);k=1;a=0;r=0;l=0.0;f=0.0;s=0.0;n=0.0;e:while(1){t[E>>2]=v;t[E+4>>2]=g;t[E+8>>2]=d;if((V3(e,88642,E)|0)==2){w=1;e=e+(t[d>>2]|0)|0;f=+c[v>>3];n=+c[g>>3]}else w=r;t[y>>2]=v;t[y+4>>2]=g;t[y+8>>2]=d;if((V3(e,88654,y)|0)==2){b=1;e=e+(t[d>>2]|0)|0;l=+c[v>>3];s=+c[g>>3]}else b=a;o=_J(e)|0;if(!((o|0)>3&((o|0)%3|0|0)==1)){r=8;break}u=$F(o<<4)|0;r=u;a=o;while(1){if(!a)break;t[B>>2]=v;t[B+4>>2]=g;t[B+8>>2]=d;if((V3(e,88724,B)|0)<2){r=13;break e}G=e+(t[d>>2]|0)|0;c[r>>3]=+c[v>>3];c[r+8>>3]=+c[g>>3];r=r+16|0;a=a+-1|0;e=G}while(1){r=i[e>>0]|0;a=e+1|0;if(!(I1(r<<24>>24)|0))break;else e=a}G=r<<24>>24==0;e=G?e:a;k=G?0:k;a=gR(A,o)|0;if(w|0){t[a+8>>2]=t[m>>2];c[a+16>>3]=f;c[a+24>>3]=n}if(b|0){t[a+12>>2]=t[p>>2];c[a+32>>3]=l;c[a+40>>3]=s}r=0;while(1){if((r|0)>=(o|0))break;G=(t[a>>2]|0)+(r<<4)|0;L=u+(r<<4)|0;t[G>>2]=t[L>>2];t[G+4>>2]=t[L+4>>2];t[G+8>>2]=t[L+8>>2];t[G+12>>2]=t[L+12>>2];r=r+1|0}G2(u);if(!k){r=26;break}else{a=b;r=w}}if((r|0)==8){hJ(A);if(i[193771]|0){e=0;break}i[193771]=1;L=Mk(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;e=Mk(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;t[I>>2]=L;t[I+4>>2]=e;nw(0,88667,I)|0;e=0;break}else if((r|0)==13){if(!(i[193771]|0)){i[193771]=1;G=Mk(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;L=Mk(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;t[C>>2]=G;t[C+4>>2]=L;nw(0,88734,C)|0}G2(u);hJ(A);e=0;break}else if((r|0)==26){a=A+16|0;e=t[a>>2]|0;r=t[e+96>>2]|0;if(r){SJ(A,r,102637);e=t[a>>2]|0}r=t[e+108>>2]|0;if(r){SJ(A,r,102633);e=t[a>>2]|0}r=t[e+100>>2]|0;if(r){SJ(A,r,102640);e=t[a>>2]|0}e=t[e+104>>2]|0;if(!e){e=1;break}SJ(A,e,102648);e=1;break}}else e=0}while(0);h=Z;return e|0}function _J(e){e=e|0;var A=0,r=0;r=0;do{while(1){A=i[e>>0]|0;if(!(I1(A&255)|0))break;else e=e+1|0}e:do{if(!(A<<24>>24))A=0;else{r=r+1|0;while(1){if(!(A<<24>>24)){A=0;break e}if(A<<24>>24==59|(I1(A&255)|0)!=0)break e;A=e+1|0;e=A;A=i[A>>0]|0}}}while(0)}while((I1(A&255)|0)!=0);return r|0}function qJ(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function KJ(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;f=h;h=h+32|0;a=f;if((y1(Mk(e)|0,108006,7)|0)==0?($J(e,i,a)|0)!=0:0){Sd(e,137483,280,1)|0;l=(t[e+16>>2]|0)+16|0;t[l>>2]=t[a>>2];t[l+4>>2]=t[a+4>>2];t[l+8>>2]=t[a+8>>2];t[l+12>>2]=t[a+12>>2];t[l+16>>2]=t[a+16>>2];t[l+20>>2]=t[a+20>>2];t[l+24>>2]=t[a+24>>2];t[l+28>>2]=t[a+28>>2];eH(A,e);jJ(e,r,i)}else n=4;e:do{if((n|0)==4){e=xv(e)|0;while(1){if(!e)break e;KJ(e,A,r,i);e=Jv(e)|0}}}while(0);h=f;return}function $J(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0,f=0,l=0,s=0;f=h;h=h+48|0;l=f+32|0;n=f;s=Pw(e,A)|0;e=n+8|0;A=n+24|0;t[l>>2]=n;t[l+4>>2]=e;t[l+8>>2]=n+16;t[l+12>>2]=A;if((V3(s,88782,l)|0)==4){i=+c[e>>3];a=+c[A>>3];if(i>a){c[e>>3]=a;c[A>>3]=i}t[r>>2]=t[n>>2];t[r+4>>2]=t[n+4>>2];t[r+8>>2]=t[n+8>>2];t[r+12>>2]=t[n+12>>2];t[r+16>>2]=t[n+16>>2];t[r+20>>2]=t[n+20>>2];t[r+24>>2]=t[n+24>>2];t[r+28>>2]=t[n+28>>2];e=1}else e=0;h=f;return e|0}function eH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;i=e+16|0;r=t[i>>2]|0;n=r+180|0;e=t[n>>2]|0;a=e+1|0;t[n>>2]=a;r=t[r+184>>2]|0;if(!r)e=KF((e<<2)+8|0)|0;else e=eM(r,e+2|0,4,a)|0;t[(t[i>>2]|0)+184>>2]=e;t[e+(a<<2)>>2]=A;VF(A);return}function AH(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+48|0;o=u+8|0;c=u;l=u+16|0;s=u+12|0;f=Hw(e,88798)|0;do{if((f|0)!=0?(a=i[f>>0]|0,a<<24>>24!=0):0){a=a&255;if(!(V1(a)|0))if((A|0)==2|(a+-48|0)>>>0<10)A=f;else break;else{if(!(y1(f,88804,4)|0)){A=0;break}if(!(y1(f,105511,7)|0)){A=1;break}if(y1(f,88809,6)|0)if((A|0)==2)A=f;else break;else A=f+6|0}if(!(((n[A>>0]|0)+-48|0)>>>0<10?(t[c>>2]=s,(V3(A,99933,c)|0)>=1):0)){c=D3()|0;c=(nA(0)|0)^c;t[s>>2]=c;t[o>>2]=c;T4(l,99933,o)|0;Xw(e,88798,l)|0}t[r>>2]=t[s>>2];A=2}}while(0);h=u;return A|0}function rH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=h;h=h+16|0;i=a+4|0;t[i>>2]=1;r=AH(e,r,i)|0;if((r|0)!=2&(t[46796]|0)!=0)nw(0,88816,a)|0;if((r|0)==1)iH(e,A);f8(t[i>>2]|0);h=a;return r|0}function iH(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0.0,l=0,s=0,o=0.0;n=+(A|0);f=6.283185307179586/n;r=sd(e)|0;a=0.0;while(1){if(!r)break;o=+W(+a)*n;l=t[r+16>>2]|0;s=t[l+132>>2]|0;c[s>>3]=o;c[s+8>>3]=+Y(+a)*n;i[l+119>>0]=1;if((t[47137]|0)>2)mP(r,A);r=cd(e,r)|0;a=a+f}return}function aH(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0;d=h;h=h+80|0;A=d+24|0;u=d+32|0;s=d;w=d+28|0;o=d+64|0;k=+c[23293];do{if(t[47134]|0){c[23293]=72.0;tH(e);nH(e);if((XJ(e,1)|0)<0){nw(3,88864,A)|0;break}else{gV(e,0);a=32;break}}else{b=px(Hw(e,88593)|0,0)|0;c[23293]=+kx(e);tH(e);n=fH(e)|0;Ij(e,s,0)|0;f=lH(e)|0;l=uE(e,0,u)|0;A=oE(e,-1,8)|0;t[46795]=A;r=(A|0)<0;do{if(!l){if((n|0)!=0&r){t[46795]=8;t[u+16>>2]=2;a=11;break}t[u+16>>2]=2;if((A|0)<=-1){sH(e,n,f);Lj(e,s)|0;nH(e);if(!(b<<24>>24)){TH(e);break}else{cH(e);break}}else a=11}else if(r){t[46795]=8;a=11}else a=11}while(0);if((a|0)==11){l=vp(e,w,88892,o)|0;A=t[w>>2]|0;do{if((A|0)<=1){sH(e,n,f);Lj(e,s)|0;if(!(b<<24>>24)){TH(e);break}else{cH(e);break}}else{a=b<<24>>24==0;r=0;while(1){if((r|0)>=(A|0))break;A=t[l+(r<<2)>>2]|0;Mp(A)|0;sH(A,n,f);Lj(A,s)|0;DJ(A,2);if(a)TH(A);else cH(A);r=r+1|0;A=t[w>>2]|0}if(!(i[o>>0]|0))r=0;else{r=KF(A)|0;i[r>>0]=1;A=t[w>>2]|0}t[u+8>>2]=t[46795];t[u+20>>2]=r;t[u+12>>2]=1;lE(A,l,e,u)|0;G2(r)}}while(0);Xx(e);nH(e);A=0;while(1){if((A|0)>=(t[w>>2]|0))break;u=t[l+(A<<2)>>2]|0;dP(u);Ud(u,137483)|0;Ed(e,u)|0;A=A+1|0}G2(l)}gV(e,b<<24>>24==0&1);a=32}}while(0);if((a|0)==32)c[23293]=k;h=d;return}function tH(e){e=e|0;var A=0,r=0,i=0,n=0;DJ(e,2);i=hx(e,zw(e,0,91368,0)|0,2,2)|0;A=(hx(e,zw(e,0,91374,0)|0,i,2)|0)&65535;a[(t[(yd(e)|0)+16>>2]|0)+176>>1]=A;A=t[(t[e+60>>2]|0)+16>>2]|0;n=A+176|0;r=a[n>>1]|0;r=(r&65535)<10?r:10;a[n>>1]=r;r=r&65535;t[47137]=r;a[A+178>>1]=(i|0)<(r|0)?i:r;mH(e);return}function nH(e){e=e|0;var A=0,r=0,i=0,a=0;a=h;h=h+1040|0;i=a;r=a+8|0;e:do{if((t[47137]|0)>2&(t[47171]|0)!=0){A=sd(e)|0;while(1){if(!A)break e;c[i>>3]=+c[(t[(t[A+16>>2]|0)+132>>2]|0)+16>>3]*72.0;T4(r,101209,i)|0;Mw(A,t[47171]|0,r)|0;A=cd(e,A)|0}}}while(0);h=a;return}function fH(e){e=e|0;var A=0,r=0,a=0;a=h;h=h+16|0;r=a;A=Hw(e,89577)|0;e:do{if(!A)e=1;else{switch(i[A>>0]|0){case 0:{e=1;break e}case 75:{if(!(e1(A,89582)|0)){e=0;break e}break}case 109:{if(!(e1(A,89585)|0)){e=1;break e}break}case 104:{if(!(e1(A,89591)|0)){e=2;break e}break}default:{}}e=Mk(e)|0;t[r>>2]=A;t[r+4>>2]=e;nw(0,89596,r)|0;e=1}}while(0);h=a;return e|0}function lH(e){e=e|0;var A=0,r=0,a=0,n=0,f=0;f=h;h=h+32|0;n=f+16|0;a=f+8|0;r=f;A=Hw(e,89360)|0;e:do{if(!A)e=0;else{switch(i[A>>0]|0){case 0:{e=0;break e}case 99:{if(!(e1(A,89366)|0)){e=1;break e}break}case 115:{if(!(e1(A,89374)|0)){e=2;break e}if(!(e1(A,89381)|0)){e=0;break e}break}case 109:{if(!(e1(A,89391)|0)){if(zw(e,2,92493,0)|0){e=3;break e}t[r>>2]=Mk(e)|0;nw(0,89395,r)|0;nw(3,89458,a)|0;e=0;break e}break}default:{}}e=Mk(e)|0;t[n>>2]=A;t[n+4>>2]=e;nw(0,89515,n)|0;e=0}}while(0);h=f;return e|0}function sH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=Hw(e,91061)|0;if(!i)if((A|0)==1)i=200;else i=(gk(e)|0)*100|0;else i=K3(i)|0;t[47136]=i;i=cP(e,A)|0;do{if(!((i|0)<2|(t[47136]|0)<0))if(!A){uH(e,i,r);break}else{oH(e,i,A,r,t[47137]|0);break}}while(0);return}function cH(e){e=e|0;Xx(e);xH(e,1);return}function oH(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+64|0;d=m+40|0;b=m+24|0;u=m;w=m+48|0;g=m+44|0;k=(r|0)==2;f=rH(e,A,k?0:2)|0;l=gH(e)|0;s=l|4;v=$F(a<<2)|0;t[v>>2]=$F(P(A<<3,a)|0)|0;n=t[47137]|0;a=1;while(1){if((a|0)>=(n|0))break;t[v+(a<<2)>>2]=(t[v>>2]|0)+((P(a,A)|0)<<3);a=a+1|0}n=(f|0)==0;a=n?s:l;if(0){s=t[15712]|0;l=t[47136]|0;o=+c[23294];t[u>>2]=i;t[u+4>>2]=n&1;t[u+8>>2]=a&3;t[u+12>>2]=l;c[u+16>>3]=o;a3(s,89173,u)|0;G3(89230,15,1,s)|0;lx();G3(89246,13,1,s)|0}u=wH(e,A,w,r,i,g)|0;if(0){s=t[15712]|0;o=+sx();t[b>>2]=A;c[b+8>>3]=o;a3(s,89260,b)|0}if((r|0)!=1){o=+wx(e,zw(e,0,89279,0)|0,0.0,-1797693134862315708145274.0e284);if(k){a=hU(u,A,t[w>>2]|0,v,t[g>>2]|0,t[47137]|0,a,i,t[47136]|0,o)|0;n=12}else n=14}else{a=rP(u,A,t[w>>2]|0,v,t[g>>2]|0,t[47137]|0,a,i,t[47136]|0)|0;n=12}if((n|0)==12)if((a|0)<0)nw(3,89289,d)|0;else n=14;e:do{if((n|0)==14){n=sd(e)|0;while(1){if(!n)break e;s=t[n+16>>2]|0;f=t[s+120>>2]|0;l=t[47137]|0;s=s+132|0;a=0;while(1){if((a|0)>=(l|0))break;c[(t[s>>2]|0)+(a<<3)>>3]=+c[(t[v+(a<<2)>>2]|0)+(f<<3)>>3];a=a+1|0}n=cd(e,n)|0}}}while(0);JU(u);G2(t[v>>2]|0);G2(v);G2(t[g>>2]|0);h=m;return}function uH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0.0,l=0;n=h;h=h+48|0;a=n+32|0;i=n;switch(r|0){case 2:{bH(e,A);break}case 1:{if(!(cU(e,A)|0)){t[i>>2]=Mk(e)|0;nw(0,88902,i)|0;nw(3,93364,n+8|0)|0;nw(3,88954,n+16|0)|0;nw(3,89026,n+24|0)|0;YP(e,A)}break}default:{YP(e,A);if((r|0)==3)hH(e)}}EP(e,A);BP(e,A);if(0){i=t[15712]|0;l=t[47136]|0;f=+c[23294];t[a>>2]=r;t[a+4>>2]=l;c[a+8>>3]=f;a3(i,89064,a)|0;lx()}yP(e,A);h=n;return}function bH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=wH(e,A,l,0,2,0)|0;f=PT(n,A)|0;i=e+16|0;e=0;while(1){if((e|0)>=(A|0))break;a=f+(e<<2)|0;r=0;while(1){if((r|0)==(A|0))break;c[(t[(t[(t[i>>2]|0)+160>>2]|0)+(e<<2)>>2]|0)+(r<<3)>>3]=+(t[(t[a>>2]|0)+(r<<2)>>2]|0);r=r+1|0}e=e+1|0}G2(t[f>>2]|0);G2(f);JU(n);h=l;return}function hH(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0.0;a=e+16|0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;n=t[A>>2]&3;i=(t[t[((n|0)==3?A:A+48|0)+40>>2]>>2]|0)>>>4;n=(t[t[((n|0)==2?A:A+-48|0)+40>>2]>>2]|0)>>>4;if((i|0)!=(n|0)){l=+c[(t[A+16>>2]|0)+136>>3];f=t[(t[a>>2]|0)+160>>2]|0;c[(t[f+(n<<2)>>2]|0)+(i<<3)>>3]=l;c[(t[f+(i<<2)>>2]|0)+(n<<3)>>3]=l}A=qw(e,A)|0}r=cd(e,r)|0}return}function wH(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,o=0,u=0,b=0,h=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0.0,Y=0;f=mk(e)|0;z=cV()|0;if((a|0)==2){l=0;L=0}else{L=zw(e,2,92493,0)|0;l=(t[47174]|0)!=0&1;L=(L|0)!=0}I=(i|1|0)==3;Q=$F(A*20|0)|0;D=$F(A<<2)|0;o=(f<<1)+A<<2;u=$F(o)|0;C=I|L;if(C)a=$F(o)|0;else a=0;G=(l|0)!=0;if(G)f=$F(o)|0;else f=0;if(I)l=$F(o)|0;else l=0;o=0;B=sd(e)|0;y=0;while(1){if(!B)break;bV(z);if((t[(t[B+16>>2]|0)+120>>2]|0)!=(y|0)){Z=12;break}t[D+(y<<2)>>2]=B;m=Q+(y*20|0)+4|0;t[m>>2]=u;p=Q+(y*20|0)+8|0;t[p>>2]=C?a:0;E=Q+(y*20|0)+12|0;t[E>>2]=G?f:0;t[Q+(y*20|0)+16>>2]=I?l:0;d=1;g=ek(e,B)|0;v=1;k=o;u=u+4|0;a=C?a+4|0:a;f=G?f+4|0:f;l=I?l+4|0:l;while(1){if(!g)break;b=t[g>>2]&3;w=g+-48|0;o=g+48|0;do{if((t[((b|0)==2?g:w)+40>>2]|0)==(t[((b|0)==3?g:o)+40>>2]|0)){b=d;w=v;o=k}else{b=kH(z,g,d)|0;if((b|0)!=(d|0)){if(G){w=(t[E>>2]|0)+(b<<2)|0;s[w>>2]=+c[(t[g+16>>2]|0)+128>>3]+ +s[w>>2]}if(!L){b=d;w=v;o=k;break}b=(t[p>>2]|0)+(b<<2)|0;W=+c[(t[g+16>>2]|0)+136>>3];h=+(~~+s[b>>2]|0);s[b>>2]=W>h?W:h;b=d;w=v;o=k;break}Y=t[g>>2]&3;o=(Y|0)==3?g:o;k=k+1|0;b=d+1|0;d=u+4|0;t[u>>2]=t[(t[(t[((t[o+40>>2]|0)==(B|0)?(Y|0)==2?g:w:o)+40>>2]|0)+16>>2]|0)+120>>2];if(G){s[f>>2]=+c[(t[g+16>>2]|0)+128>>3];f=f+4|0}if(L){o=a+4|0;s[a>>2]=+c[(t[g+16>>2]|0)+136>>3];if(I){a=o;Z=27}else a=o}else if(I){s[a>>2]=1.0;a=a+4|0;Z=27}if((Z|0)==27){Z=0;o=Hw(g,101559)|0;if((o|0)!=0?(y1(o,135709,4)|0)==0:0)h=0.0;else h=(B|0)==(t[((t[g>>2]&3|0)==2?g:w)+40>>2]|0)?1.0:-1.0;s[l>>2]=h;l=l+4|0}w=v+1|0;o=k;u=d}}while(0);d=b;g=Ak(e,g,B)|0;v=w;k=o}t[Q+(y*20|0)>>2]=v;t[t[m>>2]>>2]=y;o=k;B=cd(e,B)|0;y=y+1|0}if((Z|0)==12)ge(89103,89118,819,89130);if(I)dH(Q,A,i,D);b=(o|0)/2|0;e:do{if((b|0)!=(mk(e)|0)){o=(b<<1)+A<<2;l=AM(t[Q+4>>2]|0,o)|0;if(L)a=AM(t[Q+8>>2]|0,o)|0;if(G){u=0;f=AM(t[Q+12>>2]|0,o)|0}else u=0;while(1){if((u|0)>=(A|0))break e;o=t[Q+(u*20|0)>>2]|0;t[Q+(u*20|0)+4>>2]=l;if(L){t[Q+(u*20|0)+8>>2]=a;a=a+(o<<2)|0}if(G){t[Q+(u*20|0)+12>>2]=f;f=f+(o<<2)|0}u=u+1|0;l=l+(o<<2)|0}}}while(0);t[r>>2]=b;if(!n)G2(D);else t[n>>2]=D;hV(z);return Q|0}function kH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=t[A>>2]&3;i=t[(t[(t[((a|0)==3?A:A+48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;A=t[(t[(t[((a|0)==2?A:A+-48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;a=(i|0)>(A|0);return wV(e,a?A:i,a?i:A,r)|0}function dH(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0;n=0;while(1){if((n|0)>=(A|0)){n=0;break}f=t[(t[a+(n<<2)>>2]|0)+16>>2]|0;i[f+157>>0]=0;i[f+158>>0]=0;n=n+1|0}while(1){if((n|0)>=(A|0))break;if(!(i[(t[(t[a+(n<<2)>>2]|0)+16>>2]|0)+157>>0]|0))vH(e,n,r,a);n=n+1|0}return}function vH(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,c=0,o=0,u=0,b=0,h=0.0,w=0,k=0;k=(t[a+(A<<2)>>2]|0)+16|0;o=t[k>>2]|0;i[o+157>>0]=1;i[o+158>>0]=1;o=e+(A*20|0)|0;u=e+(A*20|0)+16|0;b=e+(A*20|0)+4|0;h=(r|0)==3?-1.0:1.0;c=1;e:while(1){if((c|0)>=(t[o>>2]|0)){n=14;break}n=(t[u>>2]|0)+(c<<2)|0;do{if(!(+s[n>>2]==1.0)){w=t[(t[b>>2]|0)+(c<<2)>>2]|0;f=t[(t[a+(w<<2)>>2]|0)+16>>2]|0;if(!(i[f+158>>0]|0)){if(i[f+157>>0]|0)break;vH(e,w,r,a);break}s[n>>2]=h;f=e+(w*20|0)+4|0;l=t[e+(w*20|0)>>2]|0;n=1;while(1){if((n|0)>=(l|0)){n=9;break e}if((t[(t[f>>2]|0)+(n<<2)>>2]|0)==(A|0))break;n=n+1|0}s[(t[e+(w*20|0)+16>>2]|0)+(n<<2)>>2]=-1.0}}while(0);c=c+1|0}if((n|0)==9)ge(89144,89118,721,89164);else if((n|0)==14){i[(t[k>>2]|0)+158>>0]=0;return}}function gH(e){e=e|0;var A=0,r=0;r=h;h=h+16|0;A=r;e=hx(e,zw(e,0,89305,0)|0,2,0)|0;if((e|0)==0|(e|0)>2){t[A>>2]=89305;nw(0,89314,A)|0;e=2}h=r;return e|0}function mH(e){e=e|0;var A=0,r=0,i=0;r=gk(e)|0;t[46796]=zw(e,1,102623,0)|0;i=zw(e,1,90660,0)|0;A=sd(e)|0;while(1){if(!A)break;xJ(A);JJ(t[46796]|0,i,A,r)|0;A=cd(e,A)|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;pH(A);A=qw(e,A)|0}r=cd(e,r)|0}return}function pH(e){e=e|0;var A=0.0;Sd(e,137460,176,1)|0;Mx(e)|0;A=+wx(e,t[47174]|0,1.0,1.0);c[(t[e+16>>2]|0)+128>>3]=A;return}function EH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0;e=KF(64)|0;r=e+8|0;i=A+8|0;n=r+48|0;do{t[r>>2]=t[i>>2];r=r+4|0;i=i+4|0}while((r|0)<(n|0));A=t[A+56>>2]|0;t[e+56>>2]=A;a[(t[A+16>>2]|0)+168>>1]=1;return e|0}function BH(e,A,r){e=e|0;A=A|0;r=r|0;G2(A);return}function yH(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=t[A>>2]|0;i=t[r>>2]|0;if(e>>>0<=i>>>0)if(e>>>0>=i>>>0){i=t[A+24>>2]|0;e=t[r+24>>2]|0;if(i>>>0<=e>>>0)if(i>>>0>=e>>>0){e=~~(+c[A+8>>3]-+c[r+8>>3]);if(!e){e=~~(+c[A+16>>3]-+c[r+16>>3]);if(!e){e=~~(+c[A+32>>3]-+c[r+32>>3]);if(!e)e=~~(+c[A+40>>3]-+c[r+40>>3])}}}else e=-1;else e=1}else e=-1;else e=1;return e|0}function CH(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,s=0,c=0,o=0.0;c=h;h=h+16|0;n=c;f=A+16|0;l=a[(t[f>>2]|0)+168>>1]|0;s=l<<16>>16;if(l<<16>>16!=1&(i[194954]|0)==0){l=$F(s<<2)|0;n=0;while(1){if((n|0)>=(s|0))break;t[l+(n<<2)>>2]=A;A=t[(t[A+16>>2]|0)+172>>2]|0;n=n+1|0}o=+(r|0);GR(e,l,0,s,o,o,17792);A=0;while(1){if((A|0)>=(s|0))break;n=t[l+(A<<2)>>2]|0;f=n+16|0;if(t[(t[f>>2]|0)+96>>2]|0){r=Bd(t[((t[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)|0;Hx(r,t[(t[f>>2]|0)+96>>2]|0)}FR(n);A=A+1|0}G2(l)}else{t[n>>2]=A;o=+(r|0);GR(e,n,0,1,o,o,17792);if(t[(t[f>>2]|0)+96>>2]|0){s=Bd(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;Hx(s,t[(t[f>>2]|0)+96>>2]|0)}FR(A)}h=c;return}function IH(e){e=e|0;return 0}function ZH(e){e=e|0;return 0}function GH(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0.0,g=0,m=0,p=0,E=0.0,B=0.0,y=0.0,C=0,I=0,Z=0,G=0,L=0,Q=0,z=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0;H=h;h=h+384|0;x=H+368|0;J=H+112|0;f=H+32|0;d=H+336|0;M=H+320|0;V=H+304|0;N=H+288|0;R=H+272|0;n=H+256|0;Q=H+240|0;z=H+224|0;F=H+208|0;g=H+192|0;m=H+176|0;p=H+160|0;C=H+144|0;I=H+128|0;Z=H+96|0;G=H+16|0;L=H;e:do{switch(oN(e)|0){case 3:case 1:{a=KF(8)|0;C=e+16|0;e=t[C>>2]|0;n=t[e+12>>2]|0;do{if(!(r<<24>>24)){e=t[n+8>>2]|0;if((e|0)>2){y=0.0;f=t[n+44>>2]|0;r=0;w=+s[A>>2];k=+s[A+4>>2];break}else{y=+s8()*.01;e=8;f=0;r=1;w=0.0;k=0.0;break}}else if(!(t[n+40>>2]&2048)){k=+c[e+88>>3];w=-k;y=+c[e+80>>3];B=y*-.5;c[f>>3]=w;c[f+8>>3]=B;c[f+16>>3]=k;c[f+24>>3]=B;y=y*.5;c[f+32>>3]=k;c[f+40>>3]=y;c[f+48>>3]=w;c[f+56>>3]=y;y=0.0;e=4;r=0;w=0.0;k=0.0;break}else{Jx(d,n);w=+c[d>>3];B=+c[d+8>>3];k=+c[d+16>>3];y=+c[d+24>>3];c[f>>3]=w;c[f+8>>3]=B;c[f+16>>3]=k;c[f+24>>3]=B;c[f+32>>3]=k;c[f+40>>3]=y;c[f+48>>3]=w;c[f+56>>3]=y;y=0.0;e=4;r=0;w=0.0;k=0.0;break}}while(0);t[a+4>>2]=e;d=KF(e<<4)|0;t[a>>2]=d;v=1.0/+(e|0);g=A+8|0;m=A+4|0;p=(e|0)==4;E=-w;B=-k;n=0;while(1){if((e|0)<=(n|0))break e;do{if(r){l=+(n|0)*6.283185307179586*v+y;o=+W(+l);l=+Y(+l);if(!(i[g>>0]|0)){J=t[C>>2]|0;u=l*+s[m>>2]*+c[J+80>>3];l=o*+s[A>>2]*(+c[J+96>>3]+ +c[J+88>>3])}else{J=t[C>>2]|0;u=(+c[J+80>>3]+ +s[m>>2])*l;l=(+c[J+96>>3]+ +c[J+88>>3]+ +s[A>>2])*o}b=l*.5;l=u*.5}else{if(!(i[g>>0]|0)){b=+c[f+(n<<4)>>3]*w;l=+c[f+(n<<4)+8>>3]*k;break}if(!p){b=+c[f+(n<<4)>>3];l=+c[f+(n<<4)+8>>3];u=+D(+(l*l+b*b));b=(w/u+1.0)*b;l=(k/u+1.0)*l;break}switch(n|0){case 0:{o=k;l=w;break}case 1:{o=k;l=E;break}case 2:{o=B;l=E;break}case 3:{o=B;l=w;break}default:{o=0.0;l=0.0}}b=+c[f+(n<<4)>>3]+l;l=+c[f+(n<<4)+8>>3]+o}}while(0);x=t[C>>2]|0;J=e-n+-1|0;c[d+(J<<4)>>3]=+c[x+16>>3]+b;c[d+(J<<4)+8>>3]=+c[x+24>>3]+l;n=n+1|0}}case 2:{L=e+16|0;a=t[(t[L>>2]|0)+12>>2]|0;l=+c[a+16>>3];b=+c[a+24>>3];o=+c[a+32>>3];u=+c[a+40>>3];a=KF(8)|0;t[a+4>>2]=4;e=KF(64)|0;t[a>>2]=e;L=(t[L>>2]|0)+16|0;t[J>>2]=t[L>>2];t[J+4>>2]=t[L+4>>2];t[J+8>>2]=t[L+8>>2];t[J+12>>2]=t[L+12>>2];if(!(i[A+8>>0]|0)){t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(n,l,b,x,A);t[e>>2]=t[n>>2];t[e+4>>2]=t[n+4>>2];t[e+8>>2]=t[n+8>>2];t[e+12>>2]=t[n+12>>2];R=(t[a>>2]|0)+16|0;t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(Q,l,u,x,A);t[R>>2]=t[Q>>2];t[R+4>>2]=t[Q+4>>2];t[R+8>>2]=t[Q+8>>2];t[R+12>>2]=t[Q+12>>2];R=(t[a>>2]|0)+32|0;t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(z,o,u,x,A);t[R>>2]=t[z>>2];t[R+4>>2]=t[z+4>>2];t[R+8>>2]=t[z+8>>2];t[R+12>>2]=t[z+12>>2];R=(t[a>>2]|0)+48|0;t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(F,o,b,x,A);t[R>>2]=t[F>>2];t[R+4>>2]=t[F+4>>2];t[R+8>>2]=t[F+8>>2];t[R+12>>2]=t[F+12>>2];break e}else{y=l-+s[A>>2];F=A+4|0;B=b-+s[F>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(M,y,B,x);t[e>>2]=t[M>>2];t[e+4>>2]=t[M+4>>2];t[e+8>>2]=t[M+8>>2];t[e+12>>2]=t[M+12>>2];M=(t[a>>2]|0)+16|0;B=l-+s[A>>2];y=u+ +s[F>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(V,B,y,x);t[M>>2]=t[V>>2];t[M+4>>2]=t[V+4>>2];t[M+8>>2]=t[V+8>>2];t[M+12>>2]=t[V+12>>2];V=(t[a>>2]|0)+32|0;y=o+ +s[A>>2];B=u+ +s[F>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(N,y,B,x);t[V>>2]=t[N>>2];t[V+4>>2]=t[N+4>>2];t[V+8>>2]=t[N+8>>2];t[V+12>>2]=t[N+12>>2];N=(t[a>>2]|0)+48|0;B=o+ +s[A>>2];y=b-+s[F>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(R,B,y,x);t[N>>2]=t[R>>2];t[N+4>>2]=t[R+4>>2];t[N+8>>2]=t[R+8>>2];t[N+12>>2]=t[R+12>>2];break e}}case 4:{e=e+16|0;a=KF(8)|0;t[a+4>>2]=4;n=KF(64)|0;t[a>>2]=n;f=t[e>>2]|0;R=f+16|0;t[J>>2]=t[R>>2];t[J+4>>2]=t[R+4>>2];t[J+8>>2]=t[R+8>>2];t[J+12>>2]=t[R+12>>2];l=-+c[f+88>>3];if(!(i[A+8>>0]|0)){B=-+c[f+80>>3];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(I,l,B,x,A);t[n>>2]=t[I>>2];t[n+4>>2]=t[I+4>>2];t[n+8>>2]=t[I+8>>2];t[n+12>>2]=t[I+12>>2];R=(t[a>>2]|0)+16|0;N=t[e>>2]|0;B=-+c[N+88>>3];y=+c[N+80>>3];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(Z,B,y,x,A);t[R>>2]=t[Z>>2];t[R+4>>2]=t[Z+4>>2];t[R+8>>2]=t[Z+8>>2];t[R+12>>2]=t[Z+12>>2];R=(t[a>>2]|0)+32|0;N=t[e>>2]|0;y=+c[N+96>>3];B=+c[N+80>>3];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(G,y,B,x,A);t[R>>2]=t[G>>2];t[R+4>>2]=t[G+4>>2];t[R+8>>2]=t[G+8>>2];t[R+12>>2]=t[G+12>>2];R=(t[a>>2]|0)+48|0;N=t[e>>2]|0;B=+c[N+96>>3];y=-+c[N+80>>3];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];QH(L,B,y,x,A);t[R>>2]=t[L>>2];t[R+4>>2]=t[L+4>>2];t[R+8>>2]=t[L+8>>2];t[R+12>>2]=t[L+12>>2];break e}else{y=l-+s[A>>2];N=A+4|0;B=-+c[f+80>>3]-+s[N>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(g,y,B,x);t[n>>2]=t[g>>2];t[n+4>>2]=t[g+4>>2];t[n+8>>2]=t[g+8>>2];t[n+12>>2]=t[g+12>>2];R=(t[a>>2]|0)+16|0;V=t[e>>2]|0;B=-+c[V+88>>3]-+s[A>>2];y=+c[V+80>>3]+ +s[N>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(m,B,y,x);t[R>>2]=t[m>>2];t[R+4>>2]=t[m+4>>2];t[R+8>>2]=t[m+8>>2];t[R+12>>2]=t[m+12>>2];R=(t[a>>2]|0)+32|0;V=t[e>>2]|0;y=+c[V+96>>3]+ +s[A>>2];B=+c[V+80>>3]+ +s[N>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(p,y,B,x);t[R>>2]=t[p>>2];t[R+4>>2]=t[p+4>>2];t[R+8>>2]=t[p+8>>2];t[R+12>>2]=t[p+12>>2];R=(t[a>>2]|0)+48|0;V=t[e>>2]|0;B=+c[V+96>>3]+ +s[A>>2];y=-+c[V+80>>3]-+s[N>>2];t[x>>2]=t[J>>2];t[x+4>>2]=t[J+4>>2];t[x+8>>2]=t[J+8>>2];t[x+12>>2]=t[J+12>>2];LH(C,B,y,x);t[R>>2]=t[C>>2];t[R+4>>2]=t[C+4>>2];t[R+8>>2]=t[C+8>>2];t[R+12>>2]=t[C+12>>2];break e}}default:a=0}}while(0);h=H;return a|0}function LH(e,A,r,i){e=e|0;A=+A;r=+r;i=i|0;r=+c[i+8>>3]+r;c[e>>3]=+c[i>>3]+A;c[e+8>>3]=r;return}function QH(e,A,r,i,a){e=e|0;A=+A;r=+r;i=i|0;a=a|0;r=+s[a+4>>2]*r+ +c[i+8>>3];c[e>>3]=+s[a>>2]*A+ +c[i>>3];c[e+8>>3]=r;return}function DH(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;b=h;h=h+112|0;s=b+88|0;l=b+72|0;c=b+32|0;o=b+16|0;u=b;a=b+56|0;n=b+40|0;f=A+48|0;d=(t[(t[((t[A>>2]&3|0)==3?A:f)+40>>2]|0)+16>>2]|0)+16|0;w=A+16|0;k=(t[w>>2]|0)+16|0;t[l>>2]=t[d>>2];t[l+4>>2]=t[d+4>>2];t[l+8>>2]=t[d+8>>2];t[l+12>>2]=t[d+12>>2];t[s>>2]=t[k>>2];t[s+4>>2]=t[k+4>>2];t[s+8>>2]=t[k+8>>2];t[s+12>>2]=t[k+12>>2];zH(a,l,s);t[o>>2]=t[a>>2];t[o+4>>2]=t[a+4>>2];t[o+8>>2]=t[a+8>>2];t[o+12>>2]=t[a+12>>2];a=A+-48|0;k=(t[(t[((t[A>>2]&3|0)==2?A:a)+40>>2]|0)+16>>2]|0)+16|0;w=(t[w>>2]|0)+56|0;t[l>>2]=t[k>>2];t[l+4>>2]=t[k+4>>2];t[l+8>>2]=t[k+8>>2];t[l+12>>2]=t[k+12>>2];t[s>>2]=t[w>>2];t[s+4>>2]=t[w+4>>2];t[s+8>>2]=t[w+8>>2];t[s+12>>2]=t[w+12>>2];zH(n,l,s);t[u>>2]=t[n>>2];t[u+4>>2]=t[n+4>>2];t[u+8>>2]=t[n+8>>2];t[u+12>>2]=t[n+12>>2];if(!i){n=-1111;a=-1111}else{d=t[A>>2]&3;n=t[(t[(t[((d|0)==2?A:a)+40>>2]|0)+16>>2]|0)+288>>2]|0;a=t[(t[(t[((d|0)==3?A:f)+40>>2]|0)+16>>2]|0)+288>>2]|0}t[l>>2]=t[o>>2];t[l+4>>2]=t[o+4>>2];t[l+8>>2]=t[o+8>>2];t[l+12>>2]=t[o+12>>2];t[s>>2]=t[u>>2];t[s+4>>2]=t[u+4>>2];t[s+8>>2]=t[u+8>>2];t[s+12>>2]=t[u+12>>2];zl(r,l,a,s,n,c)|0;w=c;k=t[w+4>>2]|0;d=e;t[d>>2]=t[w>>2];t[d+4>>2]=k;h=b;return}function zH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[r+8>>3]+ +c[A+8>>3];c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=i;return}function WH(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;m=h;h=h+144|0;w=m+104|0;k=m+88|0;b=m+80|0;u=m+72|0;s=m+64|0;v=m+128|0;c=m+32|0;o=m+124|0;g=m+16|0;d=m;l=m+120|0;f=(t[A+16>>2]|0)+144|0;n=t[f>>2]|0;f=t[f+4>>2]|0;p=s;t[p>>2]=n;t[p+4>>2]=f;p=n;t[g>>2]=t[p>>2];t[g+4>>2]=t[p+4>>2];t[g+8>>2]=t[p+8>>2];t[g+12>>2]=t[p+12>>2];f=n+(f+-1<<4)|0;t[d>>2]=t[f>>2];t[d+4>>2]=t[f+4>>2];t[d+8>>2]=t[f+8>>2];t[d+12>>2]=t[f+12>>2];e:do{if(!(a<<24>>24)){n=-1111;a=-1111}else{n=-1111;a=-1111;f=0;while(1){if((f|0)>=(i|0))break e;if((a|0)==-1111){a=t[r+(f<<2)>>2]|0;t[k>>2]=t[a>>2];t[k+4>>2]=t[a+4>>2];t[w>>2]=t[g>>2];t[w+4>>2]=t[g+4>>2];t[w+8>>2]=t[g+8>>2];t[w+12>>2]=t[g+12>>2];a=(Wl(k,w)|0)==0;a=a?-1111:f}if((n|0)==-1111){n=t[r+(f<<2)>>2]|0;t[k>>2]=t[n>>2];t[k+4>>2]=t[n+4>>2];t[w>>2]=t[d>>2];t[w+4>>2]=t[d+4>>2];t[w+8>>2]=t[d+8>>2];t[w+12>>2]=t[d+12>>2];n=(Wl(k,w)|0)==0;n=n?-1111:f}f=f+1|0}}}while(0);YH(r,i,a,n,l,o);t[c>>2]=0;t[c+4>>2]=0;t[c+8>>2]=0;t[c+12>>2]=0;t[c+16>>2]=0;t[c+20>>2]=0;t[c+24>>2]=0;t[c+28>>2]=0;f=t[l>>2]|0;p=t[o>>2]|0;t[w>>2]=t[s>>2];t[w+4>>2]=t[s+4>>2];if((Yl(f,p,w,c,v)|0)<0){g=Mk(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;p=Mk(t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0)|0;t[u>>2]=g;t[u+4>>2]=p;nw(1,89657,u)|0}else{if(0>1){n=t[15712]|0;u=Mk(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;a=A+-48|0;p=Mk(t[((t[A>>2]&3|0)==2?A:a)+40>>2]|0)|0;t[b>>2]=u;t[b+4>>2]=p;a3(n,89705,b)|0;n=A}else{a=A+-48|0;n=A}mR(A,t[((t[n>>2]&3|0)==2?A:a)+40>>2]|0,t[v>>2]|0,t[v+4>>2]|0,17792);G2(f);t[k>>2]=t[g>>2];t[k+4>>2]=t[g+4>>2];t[k+8>>2]=t[g+8>>2];t[k+12>>2]=t[g+12>>2];t[w>>2]=t[d>>2];t[w+4>>2]=t[d+4>>2];t[w+8>>2]=t[d+8>>2];t[w+12>>2]=t[d+12>>2];JR(e,A,k,w)}h=m;return}function YH(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;l=0;f=0;while(1){if((l|0)>=(A|0))break;if(!((l|0)==(r|0)|(l|0)==(i|0)))f=(t[(t[e+(l<<2)>>2]|0)+4>>2]|0)+f|0;l=l+1|0}h=$F(f<<5)|0;l=0;b=0;while(1){if((b|0)>=(A|0))break;e:do{if(!((b|0)==(r|0)|(b|0)==(i|0))){u=e+(b<<2)|0;o=0;while(1){s=t[u>>2]|0;c=t[s+4>>2]|0;if((o|0)>=(c|0))break e;w=o+1|0;k=h+(l<<5)|0;s=(t[s>>2]|0)+(o<<4)|0;t[k>>2]=t[s>>2];t[k+4>>2]=t[s+4>>2];t[k+8>>2]=t[s+8>>2];t[k+12>>2]=t[s+12>>2];s=h+(l<<5)+16|0;c=(t[t[u>>2]>>2]|0)+(((w|0)<(c|0)?w:0)<<4)|0;t[s>>2]=t[c>>2];t[s+4>>2]=t[c+4>>2];t[s+8>>2]=t[c+8>>2];t[s+12>>2]=t[c+12>>2];o=w;l=l+1|0}}}while(0);b=b+1|0}if((l|0)==(f|0)){t[a>>2]=h;t[n>>2]=f;return}else ge(89719,89726,77,89741)}function FH(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;u=h;h=h+32|0;c=u+12|0;i=u;rU(i,e);t[c>>2]=t[i>>2];t[c+4>>2]=t[i+4>>2];t[c+8>>2]=t[i+8>>2];i=sd(e)|0;while(1){if(!i)break;n=Ow(e,i)|0;while(1){if(!n)break;hR(n);n=qw(e,n)|0}i=cd(e,i)|0}f=Uh(17756,t[4581]|0)|0;i=sd(e)|0;while(1){if(!i)break;n=Ow(e,i)|0;while(1){if(!n)break;if((t[47134]|0)>1?(l=t[n+16>>2]|0,(t[l+8>>2]|0)!=0):0){b=l+168|0;a[b>>1]=(a[b>>1]|0)+1<<16>>16}else o=14;if((o|0)==14?(o=0,s=MH(f,n)|0,(s|0)!=(n|0)):0){b=t[s+16>>2]|0;w=b+168|0;a[w>>1]=(a[w>>1]|0)+1<<16>>16;b=b+172|0;t[(t[n+16>>2]|0)+172>>2]=t[b>>2];t[b>>2]=n}n=qw(e,n)|0}i=cd(e,i)|0}Ph(f)|0;if(!(L5[A&63](e,c,r)|0)){t[47138]=1;i=0}else i=1;h=u;return i|0}function MH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0.0,f=0,l=0.0,s=0.0,o=0.0,u=0.0,b=0,w=0,k=0;k=h;h=h+64|0;w=k;i=t[A>>2]&3;f=t[((i|0)==3?A:A+48|0)+40>>2]|0;i=t[((i|0)==2?A:A+-48|0)+40>>2]|0;do{if(f>>>0>=i>>>0){r=A+16|0;if(f>>>0>i>>>0){r=t[r>>2]|0;b=i;i=f;s=+c[r+16>>3];o=+c[r+24>>3];n=+c[r+56>>3];a=+c[r+64>>3];break}b=t[r>>2]|0;l=+c[b+56>>3];u=+c[b+64>>3];n=+c[b+16>>3];a=+c[b+24>>3];if(!(nl)){r=a>u;if(a>2]|0;b=f;s=+c[r+56>>3];o=+c[r+64>>3];n=+c[r+16>>3];a=+c[r+24>>3]}}while(0);t[w+8>>2]=b;c[w+16>>3]=n;c[w+24>>3]=a;t[w+32>>2]=i;c[w+40>>3]=s;c[w+48>>3]=o;t[w+56>>2]=A;w=t[(L5[t[e>>2]&63](e,w,1)|0)+56>>2]|0;h=k;return w|0}function VH(e,A){e=e|0;A=A|0;return FH(e,21,A)|0}function NH(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0.0,W=0;D=h;h=h+112|0;Z=D+88|0;I=D+72|0;g=D+40|0;k=D+8|0;w=D;m=D+64|0;G=D+48|0;L=D+24|0;n=(t[47134]|0)>1&1;do{if((r|0)>5){v=KF((gk(e)|0)<<2)|0;b=(r|0)==8;u=b&1;o=sd(e)|0;d=0;while(1){if(!o)break;f=GH(o,A,u)|0;l=(t[o+16>>2]|0)+288|0;if(!f){t[l>>2]=-1111;f=d}else{t[l>>2]=d;t[v+(d<<2)>>2]=f;f=d+1|0}o=cd(e,o)|0;d=f}if(v){f=KT(v,d)|0;if(f|0){if(b){y=0;C=v;B=v;E=1;break}y=Ll(v,d)|0;C=v;B=v;E=1;break}if(b){nw(0,89755,w)|0;f=0;y=0;C=v;B=v;E=1;break}else{z=+s[A+4>>2];c[k>>3]=+s[A>>2];c[k+8>>3]=z;nw(0,89833,k)|0;f=0;y=0;C=v;B=v;E=1;break}}else{f=0;y=0;C=0;B=0;E=0}}else{f=0;y=0;C=0;d=0;B=0;E=0}}while(0);if(0){l=t[15712]|0;if((r|0)==8&(f|0)!=0)o=89939;else o=(y|0)==0?89925:(r|0)==10?110056:89915;t[g>>2]=o;a3(l,89956,g)|0}p=(y|0)!=0;e:do{if(!p){if((r|0)==8&(f|0)!=0){sA(e,0);n=1}}else{l=sd(e)|0;while(1){if(!l)break e;f=Ow(e,l)|0;while(1){if(!f)break;g=(t[f+16>>2]|0)+144|0;DH(m,f,y,1,0,0);k=m;v=t[k+4>>2]|0;t[g>>2]=t[k>>2];t[g+4>>2]=v;f=qw(e,f)|0}l=cd(e,l)|0}}}while(0);w=(n|0)==0;k=e+60|0;v=(r|0)==10;n=0;b=sd(e)|0;f=0;while(1){if(!b)break;g=b+16|0;A=Ow(e,b)|0;while(1){if(!A)break;u=t[((t[A>>2]&3|0)==2?A:A+-48|0)+40>>2]|0;l=A+16|0;o=t[l>>2]|0;if(!w?(t[o+8>>2]|0)!=0:0){W=(t[g>>2]|0)+16|0;m=o+16|0;t[I>>2]=t[W>>2];t[I+4>>2]=t[W+4>>2];t[I+8>>2]=t[W+8>>2];t[I+12>>2]=t[W+12>>2];t[Z>>2]=t[m>>2];t[Z+4>>2]=t[m+4>>2];t[Z+8>>2]=t[m+8>>2];t[Z+12>>2]=t[m+12>>2];zH(G,I,Z);u=(t[u+16>>2]|0)+16|0;m=(t[l>>2]|0)+56|0;t[I>>2]=t[u>>2];t[I+4>>2]=t[u+4>>2];t[I+8>>2]=t[u+8>>2];t[I+12>>2]=t[u+12>>2];t[Z>>2]=t[m>>2];t[Z+4>>2]=t[m+4>>2];t[Z+8>>2]=t[m+8>>2];t[Z+12>>2]=t[m+12>>2];zH(L,I,Z);t[I>>2]=t[G>>2];t[I+4>>2]=t[G+4>>2];t[I+8>>2]=t[G+8>>2];t[I+12>>2]=t[G+12>>2];t[Z>>2]=t[L>>2];t[Z+4>>2]=t[L+4>>2];t[Z+8>>2]=t[L+8>>2];t[Z+12>>2]=t[L+12>>2];JR(e,A,I,Z)}else Q=35;e:do{if((Q|0)==35){Q=0;W=a[o+168>>1]|0;l=W<<16>>16;if(W<<16>>16){if((b|0)==(u|0)){if(!n){f=KF(96)|0;t[f+84>>2]=KF(((gk(e)|0)<<5)+11520|0)|0;n=f}CH(n,A,t[(t[(t[k>>2]|0)+16>>2]|0)+248>>2]|0);break}if(!p){iN(e,A,r,17792);break}l=i[194954]|0?1:l;o=A;u=0;while(1){if((u|0)>=(l|0))break e;if(v)WH(e,o,C,d,1);else RH(e,o);o=t[(t[o+16>>2]|0)+172>>2]|0;u=u+1|0}}}}while(0);A=qw(e,A)|0}b=cd(e,b)|0}if(p)Dl(y);if(n|0){G2(t[n+84>>2]|0);G2(f)}if(E){n=0;while(1){if((n|0)>=(d|0))break;G2(t[C+(n<<2)>>2]|0);n=n+1|0}G2(B)}h=D;return 0}function RH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;c=h;h=h+96|0;n=c+64|0;a=c+48|0;r=c+40|0;f=c+80|0;i=c+32|0;l=c+16|0;s=c;o=(t[A+16>>2]|0)+144|0;u=t[o>>2]|0;o=t[o+4>>2]|0;b=i;t[b>>2]=u;t[b+4>>2]=o;b=u;t[l>>2]=t[b>>2];t[l+4>>2]=t[b+4>>2];t[l+8>>2]=t[b+8>>2];t[l+12>>2]=t[b+12>>2];o=u+(o+-1<<4)|0;t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];t[n>>2]=t[i>>2];t[n+4>>2]=t[i+4>>2];Cs(n,f);if(0>1){b=t[15712]|0;o=Mk(t[((t[A>>2]&3|0)==3?A:A+48|0)+40>>2]|0)|0;i=A+-48|0;u=Mk(t[((t[A>>2]&3|0)==2?A:i)+40>>2]|0)|0;t[r>>2]=o;t[r+4>>2]=u;a3(b,89981,r)|0;r=i;i=A}else{r=A+-48|0;i=A}mR(A,t[((t[i>>2]&3|0)==2?A:r)+40>>2]|0,t[f>>2]|0,t[f+4>>2]|0,17792);t[a>>2]=t[l>>2];t[a+4>>2]=t[l+4>>2];t[a+8>>2]=t[l+8>>2];t[a+12>>2]=t[l+12>>2];t[n>>2]=t[s>>2];t[n+4>>2]=t[s+4>>2];t[n+8>>2]=t[s+8>>2];t[n+12>>2]=t[s+12>>2];JR(e,A,a,n);h=c;return}function xH(e,A){e=e|0;A=A|0;var r=0;r=a[(t[e+16>>2]|0)+136>>1]&14;if(A<<24>>24)JH(e)|0;if(r<<16>>16)VH(e,r&65535)|0;return}function JH(e){e=e|0;var A=0,r=0,i=0,a=0;r=HH(e)|0;A=sd(e)|0;while(1){if(!A)break;i=t[A+16>>2]|0;a=t[i+132>>2]|0;c[i+16>>3]=+c[a>>3]*72.0;c[i+24>>3]=+c[a+8>>3]*72.0;A=cd(e,A)|0}return r|0}function HH(e){e=e|0;var A=0,r=0,i=0,a=0.0,n=0.0,f=0.0,l=0,s=0;e:do{if((t[e+60>>2]|0)==(e|0)?(r=e+16|0,i=t[r>>2]|0,(t[(t[i+8>>2]|0)+84>>2]|0)!=0):0){if(!(+c[i+16>>3]!=0.0)?!(+c[i+24>>3]!=0.0):0)A=0;else{PH(e);A=1;i=t[r>>2]|0}l=(t[i+116>>2]&1|0)==0;if(!l){s=i+32|0;f=+c[s>>3];r=i+40|0;c[s>>3]=+c[r>>3];c[r>>3]=f}r=t[i+8>>2]|0;A:do{switch(t[r+84>>2]|0){case 2:{a=+c[r+64>>3];if(a<=0.0)break e;n=a/+c[i+32>>3];a=+c[r+72>>3]/+c[i+40>>3];if(n<1.0|a<1.0)if(n>3];if(a<=0.0)break e;n=a/+c[i+32>>3];a=+c[r+72>>3]/+c[i+40>>3];if(!(n>1.0&a>1.0))break e;a=n>3];a=+c[i+40>>3]/+c[i+32>>3];if(a1){r=sd(e)|0;while(1){if(!r)break A;A=Ow(e,r)|0;while(1){if(!A)break;if(t[(t[A+16>>2]|0)+8>>2]|0)XH(A,a,n);A=qw(e,A)|0}r=cd(e,r)|0}}}while(0);A=sd(e)|0;while(1){if(!A)break;s=t[(t[A+16>>2]|0)+132>>2]|0;c[s>>3]=+c[s>>3]*a;s=s+8|0;c[s>>3]=+c[s>>3]*n;A=cd(e,A)|0}SH(e,a,n);A=1}else A=0}while(0);return A|0}function PH(e){e=e|0;var A=0,r=0,a=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0;u=h;h=h+32|0;s=u+16|0;o=u;A=(t[e+16>>2]|0)+16|0;t[o>>2]=t[A>>2];t[o+4>>2]=t[A+4>>2];t[o+8>>2]=t[A+8>>2];t[o+12>>2]=t[A+12>>2];a=+c[o>>3];n=a*.013888888888888888;f=+c[o+8>>3];l=f*.013888888888888888;A=sd(e)|0;while(1){if(!A)break;r=t[A+16>>2]|0;b=t[r+132>>2]|0;c[b>>3]=+c[b>>3]-n;b=b+8|0;c[b>>3]=+c[b>>3]-l;r=t[r+108>>2]|0;if(r|0?i[r+81>>0]|0:0){b=r+56|0;c[b>>3]=+c[b>>3]-a;b=r+64|0;c[b>>3]=+c[b>>3]-f}A=cd(e,A)|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;if(t[(t[A+16>>2]|0)+8>>2]|0){t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];jH(A,s)}A=qw(e,A)|0}r=cd(e,r)|0}t[s>>2]=t[o>>2];t[s+4>>2]=t[o+4>>2];t[s+8>>2]=t[o+8>>2];t[s+12>>2]=t[o+12>>2];UH(e,s);h=u;return}function XH(e,A,r){e=e|0;A=+A;r=+r;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0.0,w=0,k=0.0,d=0.0,v=0.0,g=0.0,m=0;w=t[e>>2]&3;f=t[(t[(t[((w|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;v=(A+-1.0)*72.0;k=v*+c[f>>3];g=(r+-1.0)*72.0;d=g*+c[f+8>>3];w=t[(t[(t[((w|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;v=v*+c[w>>3];g=g*+c[w+8>>3];w=t[e+16>>2]|0;f=t[w+8>>2]|0;l=t[f+4>>2]|0;s=l+-1|0;e=0;f=t[f>>2]|0;while(1){if((e|0)>=(l|0))break;o=t[f+4>>2]|0;u=o+-1|0;b=(e|0)==(s|0);a=0;n=t[f>>2]|0;while(1){if((a|0)>=(o|0))break;do{if(a|e){h=+c[n>>3];if((a|0)==(u|0)&b){c[n>>3]=h+k;m=n+8|0;c[m>>3]=+c[m>>3]+d;break}else{c[n>>3]=h*A;m=n+8|0;c[m>>3]=+c[m>>3]*r;break}}else{c[n>>3]=+c[n>>3]+v;m=n+8|0;c[m>>3]=+c[m>>3]+g}}while(0);a=a+1|0;n=n+16|0}if(t[f+8>>2]|0){m=f+16|0;c[m>>3]=+c[m>>3]+v;m=f+24|0;c[m>>3]=+c[m>>3]+g}if(t[f+12>>2]|0){m=f+32|0;c[m>>3]=+c[m>>3]+k;m=f+40|0;c[m>>3]=+c[m>>3]+d}e=e+1|0;f=f+48|0}e=t[w+96>>2]|0;if(e|0?i[e+81>>0]|0:0){m=e+56|0;c[m>>3]=+c[m>>3]*A;m=e+64|0;c[m>>3]=+c[m>>3]*r}e=t[w+100>>2]|0;if(e|0?i[e+81>>0]|0:0){m=e+56|0;c[m>>3]=+c[m>>3]+k;m=e+64|0;c[m>>3]=+c[m>>3]+d}e=t[w+104>>2]|0;if(e|0?i[e+81>>0]|0:0){m=e+56|0;c[m>>3]=+c[m>>3]+v;m=e+64|0;c[m>>3]=+c[m>>3]+g}return}function SH(e,A,r){e=e|0;A=+A;r=+r;var a=0,n=0,f=0;f=e+16|0;n=t[f>>2]|0;e=n+32|0;c[e>>3]=+c[e>>3]*A;e=n+40|0;c[e>>3]=+c[e>>3]*r;e=n+16|0;c[e>>3]=+c[e>>3]*A;e=n+24|0;c[e>>3]=+c[e>>3]*r;e=t[n+12>>2]|0;if((e|0)!=0?(i[e+81>>0]|0)!=0:0){a=e+56|0;c[a>>3]=+c[a>>3]*A;a=e+64|0;c[a>>3]=+c[a>>3]*r;a=1;e=n}else{a=1;e=n}while(1){if((a|0)>(t[e+180>>2]|0))break;SH(t[(t[e+184>>2]|0)+(a<<2)>>2]|0,A,r);a=a+1|0;e=t[f>>2]|0}return}function jH(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0;s=t[e+16>>2]|0;e=t[s+8>>2]|0;l=t[e+4>>2]|0;o=A+8|0;e=t[e>>2]|0;n=0;while(1){if((n|0)>=(l|0))break;f=t[e+4>>2]|0;r=t[e>>2]|0;a=0;while(1){if((a|0)>=(f|0))break;c[r>>3]=+c[r>>3]-+c[A>>3];u=r+8|0;c[u>>3]=+c[u>>3]-+c[o>>3];r=r+16|0;a=a+1|0}if(t[e+8>>2]|0){u=e+16|0;c[u>>3]=+c[u>>3]-+c[A>>3];u=e+24|0;c[u>>3]=+c[u>>3]-+c[o>>3]}if(t[e+12>>2]|0){u=e+32|0;c[u>>3]=+c[u>>3]-+c[A>>3];u=e+40|0;c[u>>3]=+c[u>>3]-+c[o>>3]}e=e+48|0;n=n+1|0}e=t[s+96>>2]|0;if(e|0?i[e+81>>0]|0:0){u=e+56|0;c[u>>3]=+c[u>>3]-+c[A>>3];u=e+64|0;c[u>>3]=+c[u>>3]-+c[o>>3]}e=t[s+108>>2]|0;if(e|0?i[e+81>>0]|0:0){u=e+56|0;c[u>>3]=+c[u>>3]-+c[A>>3];u=e+64|0;c[u>>3]=+c[u>>3]-+c[o>>3]}e=t[s+100>>2]|0;if(e|0?i[e+81>>0]|0:0){u=e+56|0;c[u>>3]=+c[u>>3]-+c[A>>3];u=e+64|0;c[u>>3]=+c[u>>3]-+c[o>>3]}e=t[s+104>>2]|0;if(e|0?i[e+81>>0]|0:0){u=e+56|0;c[u>>3]=+c[u>>3]-+c[A>>3];u=e+64|0;c[u>>3]=+c[u>>3]-+c[o>>3]}return}function UH(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0,l=0,s=0,o=0;s=h;h=h+16|0;l=s;n=+c[A>>3];f=e+16|0;e=t[f>>2]|0;r=e+32|0;c[r>>3]=+c[r>>3]-n;a=+c[A+8>>3];r=e+40|0;c[r>>3]=+c[r>>3]-a;r=e+16|0;c[r>>3]=+c[r>>3]-n;r=e+24|0;c[r>>3]=+c[r>>3]-a;r=t[e+12>>2]|0;if((r|0)!=0?(i[r+81>>0]|0)!=0:0){o=r+56|0;c[o>>3]=+c[o>>3]-n;r=r+64|0;c[r>>3]=+c[r>>3]-a;r=1}else r=1;while(1){if((r|0)>(t[e+180>>2]|0))break;o=t[(t[e+184>>2]|0)+(r<<2)>>2]|0;t[l>>2]=t[A>>2];t[l+4>>2]=t[A+4>>2];t[l+8>>2]=t[A+8>>2];t[l+12>>2]=t[A+12>>2];UH(o,l);r=r+1|0;e=t[f>>2]|0}h=s;return}function TH(e){e=e|0;var A=0,r=0,i=0,a=0.0,n=0.0,f=0,l=0;f=h;h=h+16|0;r=f;Xx(e);i=e+16|0;A=t[i>>2]|0;a=+c[A+16>>3]*.013888888888888888;n=+c[A+24>>3]*.013888888888888888;A=sd(e)|0;while(1){if(!A)break;l=t[(t[A+16>>2]|0)+132>>2]|0;c[l>>3]=+c[l>>3]-a;l=l+8|0;c[l>>3]=+c[l>>3]-n;A=cd(e,A)|0}l=(t[i>>2]|0)+16|0;t[r>>2]=t[l>>2];t[r+4>>2]=t[l+4>>2];t[r+8>>2]=t[l+8>>2];t[r+12>>2]=t[l+12>>2];OH(e,r);xH(e,1);h=f;return}function OH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0.0,l=0.0;n=h;h=h+16|0;a=n;r=e+16|0;e=1;while(1){i=t[r>>2]|0;if((e|0)>(t[i+180>>2]|0))break;i=t[(t[i+184>>2]|0)+(e<<2)>>2]|0;t[a>>2]=t[A>>2];t[a+4>>2]=t[A+4>>2];t[a+8>>2]=t[A+8>>2];t[a+12>>2]=t[A+12>>2];OH(i,a);e=e+1|0}l=+c[A>>3];a=i+32|0;c[a>>3]=+c[a>>3]-l;f=+c[A+8>>3];A=i+40|0;c[A>>3]=+c[A>>3]-f;A=i+16|0;c[A>>3]=+c[A>>3]-l;A=i+24|0;c[A>>3]=+c[A>>3]-f;h=n;return}function _H(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0.0;w=(r|0)>2;b=0;h=0;l=t[a+4>>2]|0;e=t[a>>2]|0;while(1){if((h|0)>=(A|0)){e=0;break}f=t[(t[n+(h<<2)>>2]|0)+16>>2]|0;o=i[f+119>>0]|0;e:do{if(!(o<<24>>24)){s=e+8|0;c[e>>3]=+s8();f=l+8|0;c[l>>3]=+s8();if(w){e=2;while(1){if((e|0)==(r|0)){l=b;e=s;break e}k=+s8();c[(t[a+(e<<2)>>2]|0)+(h<<3)>>3]=k;e=e+1|0}}else{l=b;e=s}}else{s=t[f+132>>2]|0;u=e+8|0;c[e>>3]=+c[s>>3];f=l+8|0;c[l>>3]=+c[s+8>>3];A:do{if(w){l=2;e=s+16|0;while(1){if((l|0)==(r|0))break A;c[(t[a+(l<<2)>>2]|0)+(h<<3)>>3]=+c[e>>3];l=l+1|0;e=e+8|0}}}while(0);l=(o&255)>1?1:b;e=u}}while(0);b=l;h=h+1|0;l=f}while(1){if((e|0)>=(r|0))break;mO(A,t[a+(e<<2)>>2]|0);e=e+1|0}return b|0}function qH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,o=0.0,u=0,b=0,h=0,w=0;r=KF(((P(A+1|0,A)|0)/2|0)<<2)|0;b=lP(A,A,0.0)|0;h=lP(A,A,0.0)|0;e:do{if(!(t[e+8>>2]|0)){i=0;while(1){if((i|0)>=(A|0))break e;n=t[e+(i*20|0)>>2]|0;f=e+(i*20|0)+4|0;l=b+(i<<2)|0;a=1;while(1){if((a|0)>=(n|0))break;u=t[(t[f>>2]|0)+(a<<2)>>2]|0;c[(t[b+(u<<2)>>2]|0)+(i<<3)>>3]=-1.0;c[(t[l>>2]|0)+(u<<3)>>3]=-1.0;a=a+1|0}i=i+1|0}}else{i=0;while(1){if((i|0)>=(A|0))break e;n=t[e+(i*20|0)>>2]|0;f=e+(i*20|0)+4|0;l=e+(i*20|0)+8|0;u=b+(i<<2)|0;a=1;while(1){if((a|0)>=(n|0))break;w=t[(t[f>>2]|0)+(a<<2)>>2]|0;o=-1.0/+s[(t[l>>2]|0)+(a<<2)>>2];c[(t[b+(w<<2)>>2]|0)+(i<<3)>>3]=o;c[(t[u>>2]|0)+(w<<3)>>3]=o;a=a+1|0}i=i+1|0}}}while(0);e:do{if(!(sU(A,b,h)|0)){G2(r);r=0}else{a=0;f=0;u=A;while(1){if((f|0)>=(A|0))break e;l=h+(f<<2)|0;i=f;n=a;while(1){if((i|0)==(A|0))break;if((f|0)==(i|0))o=0.0;else{w=t[l>>2]|0;o=+c[(t[h+(i<<2)>>2]|0)+(i<<3)>>3]+ +c[w+(f<<3)>>3]+ +c[w+(i<<3)>>3]*-2.0}s[r+(n<<2)>>2]=o;i=i+1|0;n=n+1|0}a=a+u|0;f=f+1|0;u=u+-1|0}}}while(0);sP(b);sP(h);return r|0}function KH(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0;d=h;h=h+16|0;k=d;if(t[e+8>>2]|0){r=$H(e,A)|0;a=0.0;i=0;w=0;while(1){if((w|0)>=(A|0))break;i=i+w|0;b=t[e+(w*20|0)>>2]|0;l=e+(w*20|0)+4|0;o=(P(w,A)|0)-i|0;u=e+(w*20|0)+8|0;f=1;while(1){if((f|0)>=(b|0))break;n=t[(t[l>>2]|0)+(f<<2)>>2]|0;if((n|0)>=(w|0)){n=r+(o+n<<2)|0;v=+s[(t[u>>2]|0)+(f<<2)>>2];a=a+ +Q(+(+s[n>>2]-v));s[n>>2]=v}f=f+1|0}w=w+1|0}if(0){A=t[15712]|0;c[k>>3]=a;a3(A,89997,k)|0}}else r=0;h=d;return r|0}function $H(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+16|0;f=o;l=KF(((P(A+1|0,A)|0)/2|0)<<2)|0;s=KF(A<<2)|0;fU(f,A);r=0;a=0;c=A;while(1){if((r|0)>=(A|0))break;TU(r,e,A,s);i=r;n=a;while(1){if((i|0)==(A|0))break;t[l+(n<<2)>>2]=t[s+(i<<2)>>2];i=i+1|0;n=n+1|0}r=r+1|0;a=a+c|0;c=c+-1|0}G2(s);lU(f);h=o;return l|0}function eP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,c=0,o=0,u=0;u=h;h=h+16|0;f=u;l=KF(((P(A+1|0,A)|0)/2|0)<<2)|0;c=KF(A<<2)|0;fU(f,A);r=0;a=0;o=A;while(1){if((r|0)>=(A|0))break;iU(r,e,A,c,f);i=r;n=a;while(1){if((i|0)==(A|0))break;s[l+(n<<2)>>2]=+(t[c+(i<<2)>>2]|0);i=i+1|0;n=n+1|0}r=r+1|0;a=a+o|0;o=o+-1|0}G2(c);lU(f);h=u;return l|0}function AP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,c=0,o=0.0,u=0,b=0,h=0,w=0,k=0,d=0,v=0.0;d=e+8|0;r=t[d>>2]|0;i=0;a=0;while(1){if((a|0)>=(A|0))break;i=(t[e+(a*20|0)>>2]|0)+i|0;a=a+1|0}a=KF(i<<2)|0;k=KF(A<<2)|0;i=0;while(1){if((i|0)>=(A|0))break;t[k+(i<<2)>>2]=0;i=i+1|0}if(!(t[d>>2]|0)){n=0;while(1){if((n|0)>=(A|0))break;t[e+(n*20|0)+8>>2]=a;NT(e,n,k);f=e+(n*20|0)|0;l=t[f>>2]|0;c=e+(n*20|0)+4|0;o=+(l+-1|0);i=1;while(1){if((i|0)>=(l|0))break;w=t[(t[c>>2]|0)+(i<<2)>>2]|0;v=+((t[e+(w*20|0)>>2]|0)+-1|0)+o;s[a+(i<<2)>>2]=v-+((VT(e,n,w,k)|0)<<1|0);i=i+1|0}RT(e,n,k);a=a+(t[f>>2]<<2)|0;n=n+1|0}a=eP(e,A)|0}else{l=0;while(1){if((l|0)>=(A|0))break;NT(e,l,k);c=e+(l*20|0)|0;u=t[c>>2]|0;b=e+(l*20|0)+4|0;h=u+-2|0;w=e+(l*20|0)+8|0;f=1;while(1){if((f|0)>=(u|0))break;i=t[(t[b>>2]|0)+(f<<2)>>2]|0;n=h+(t[e+(i*20|0)>>2]|0)|0;v=+(n-((VT(e,l,i,k)|0)<<1)|0);o=+s[(t[w>>2]|0)+(f<<2)>>2];if(o>2]=o;f=f+1|0}RT(e,l,k);t[w>>2]=a;a=a+(t[c>>2]<<2)|0;l=l+1|0}a=$H(e,A)|0}G2(k);G2(t[d>>2]|0);t[d>>2]=0;e:do{if(r|0){i=0;while(1){if((i|0)>=(A|0))break e;t[e+(i*20|0)+8>>2]=r;r=r+(t[e+(i*20|0)>>2]<<2)|0;i=i+1|0}}}while(0);return a|0}function rP(e,A,r,i,a,f,l,o,u){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;f=f|0;l=l|0;o=o|0;u=u|0;var b=0,w=0,k=0,d=0.0,v=0,g=0,m=0,p=0.0,E=0,B=0.0,y=0,C=0,I=0,Z=0,G=0,L=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0.0,x=0.0;N=h;h=h+80|0;V=N+56|0;M=N+48|0;I=N+40|0;m=N+32|0;g=N+24|0;v=N+16|0;w=N+8|0;b=N;k=l&4;F=l&3;e:do{if((u|0)<0)r=0;else{if(0)lx();l=(o|0)==2;A:do{if(l){if(0)G3(93290,24,1,t[15712]|0)|0;r=AP(e,A)|0;E=14}else{switch(o|0){case 1:{r=qH(e,A)|0;if(r|0){Y=r;break A}nw(0,93315,b)|0;nw(3,93364,w)|0;E=15;break A}case 3:break;default:{E=15;break A}}if(0)G3(93417,21,1,t[15712]|0)|0;r=KH(e,A)|0;E=14}}while(0);if((E|0)==14)if(!r)E=15;else Y=r;do{if((E|0)==15){if(0)G3(93439,26,1,t[15712]|0)|0;if(!(t[e+8>>2]|0)){Y=eP(e,A)|0;break}else{Y=$H(e,A)|0;break}}}while(0);if(0){W=t[15712]|0;c[v>>3]=+sx();a3(W,93466,v)|0;G3(93478,25,1,W)|0;lx()}A:do{if((A|0)>1&(k|0)!=0)if((iP(e,A,i,f,k,F,l&1)|0)<0){m=0;g=0;r=-1;e=0;v=0;k=0;w=0;b=0;o=0;l=0}else{l=0;while(1){if((l|0)>=(f|0)){y=0;E=35;break A}o=i+(l<<2)|0;d=1.0;r=0;while(1){if((r|0)==(A|0))break;B=+Q(+ +c[(t[o>>2]|0)+(r<<3)>>3]);d=B>d?B:d;r=r+1|0}d=1.0/d;r=0;while(1){if((r|0)==(A|0)){r=0;break}W=(t[o>>2]|0)+(r<<3)|0;c[W>>3]=+c[W>>3]*d;r=r+1|0}while(1){if((r|0)==(A|0))break;B=(+s8()+-.5)*1.0e-06;W=(t[o>>2]|0)+(r<<3)|0;c[W>>3]=+c[W>>3]+B;r=r+1|0}mO(A,t[o>>2]|0);l=l+1|0}}else{y=_H(0,A,f,i,a)|0;E=35}}while(0);A:do{if((E|0)==35){if(0){W=t[15712]|0;c[g>>3]=+sx();a3(W,93504,g)|0}if((A|0)==1|(u|0)==0){r=0;break e}if(0){W=t[15712]|0;c[m>>3]=+sx();a3(W,93466,m)|0;G3(90019,26,1,W)|0;lx()}v=f<<2;W=KF(v)|0;g=A<<2;e=P(g,f)|0;z=KF(e)|0;r=0;while(1){if((r|0)>=(f|0))break;o=z+((P(r,A)|0)<<2)|0;t[W+(r<<2)>>2]=o;b=i+(r<<2)|0;l=0;while(1){if((l|0)>=(A|0))break;s[o+(l<<2)>>2]=+c[(t[b>>2]|0)+(l<<3)>>3];l=l+1|0}r=r+1|0}r:do{if(!F){w=A+-1|0;r=0;d=0.0;b=0;while(1){if((b|0)>=(w|0))break r;k=A-b|0;o=r;l=1;while(1){r=o+1|0;if((l|0)>=(k|0))break;o=r;d=+s[Y+(r<<2)>>2]+d;l=l+1|0}b=b+1|0}}else d=+(A|0)*.5*+(A+-1|0)}while(0);Z=(P(A+1|0,A)|0)/2|0;G=(F|0)==2;if(G)HO(Z,Y);PO(Z,Y);L=A<<3;o=KF(L)|0;z6(o|0,0,L|0)|0;D=A+-1|0;r=0;b=0;while(1){if((b|0)>=(D|0)){r=A;l=0;b=0;break}w=A-b|0;p=0.0;l=1;while(1){r=r+1|0;if((l|0)>=(w|0))break;B=+s[Y+(r<<2)>>2];C=o+(l+b<<3)|0;c[C>>3]=+c[C>>3]-B;p=p+B;l=l+1|0}C=o+(b<<3)|0;c[C>>3]=+c[C>>3]-p;b=b+1|0}while(1){if((l|0)>=(A|0))break;s[Y+(b<<2)>>2]=+c[o+(l<<3)>>3];C=r+b|0;r=r+-1|0;l=l+1|0;b=C}C=KF(v)|0;t[C>>2]=KF(e)|0;r=1;while(1){if((r|0)>=(f|0))break;t[C+(r<<2)>>2]=(t[C>>2]|0)+((P(r,A)|0)<<2);r=r+1|0}w=KF(g)|0;b=KF(g)|0;l=KF(Z<<2)|0;if(0){E=t[15712]|0;c[I>>3]=+sx();a3(E,93466,I)|0;G3(90046,15,1,E)|0;lx()}E=(y|0)==0;y=t[15712]|0;r=0;k=0;B=1797693134862315708145274.0e284;while(1){if(!(k<<24>>24==0&(r|0)<(u|0)))break;z6(o|0,0,L|0)|0;if(G){XO(Z,Y,l);m=0;e=0}else{m=0;e=0}while(1){if((m|0)>=(D|0)){k=A;v=0;e=0;break}g=A-m+-1|0;xO(g,0.0,b);k=0;while(1){if((k|0)>=(f|0))break;I=W+(k<<2)|0;xO(g,+s[(t[I>>2]|0)+(m<<2)>>2],w);FO(g,w,-1.0,(t[I>>2]|0)+(m<<2)+4|0);HO(g,w);YO(g,w,b,b);k=k+1|0}SO(g,b);k=0;while(1){if((k|0)>=(g|0))break;v=b+(k<<2)|0;p=+s[v>>2];if(p>=3402823466385288598117041.0e14|p<0.0)s[v>>2]=0.0;k=k+1|0}k=e+1|0;e=m+1|0;r:do{if(G){p=0.0;v=0;while(1){if((v|0)>=(g|0))break r;I=l+(k<<2)|0;R=+s[I>>2]*+s[b+(v<<2)>>2];s[I>>2]=R;I=o+(e+v<<3)|0;c[I>>3]=+c[I>>3]-R;p=p+R;k=k+1|0;v=v+1|0}}else{p=0.0;v=0;while(1){if((v|0)>=(g|0))break r;R=+s[b+(v<<2)>>2];s[l+(k<<2)>>2]=R;I=o+(e+v<<3)|0;c[I>>3]=+c[I>>3]-R;p=p+R;k=k+1|0;v=v+1|0}}}while(0);I=o+(m<<3)|0;c[I>>3]=+c[I>>3]-p;m=e;e=k}while(1){if((v|0)>=(A|0)){k=0;break}s[l+(e<<2)>>2]=+c[o+(v<<3)>>3];I=k+e|0;k=k+-1|0;v=v+1|0;e=I}while(1){if((k|0)>=(f|0)){p=0.0;k=0;break}zO(l,A,t[W+(k<<2)>>2]|0,t[C+(k<<2)>>2]|0);k=k+1|0}while(1){if((k|0)>=(f|0))break;p=+NO(A,t[W+(k<<2)>>2]|0,t[C+(k<<2)>>2]|0)+p;k=k+1|0}p=p*2.0+d;k=0;while(1){if((k|0)>=(f|0))break;I=W+(k<<2)|0;zO(Y,A,t[I>>2]|0,w);p=p-+NO(A,t[I>>2]|0,w);k=k+1|0}x=B-p;R=+c[23294];k=(p=0.0?x:-x)/B=(f|0))break;g=W+(e<<2)|0;v=t[g>>2]|0;r:do{if(E){if((bU(Y,v,t[C+(e<<2)>>2]|0,A,.001,A)|0)<0){m=C;g=Y;r=-1;e=z;v=W;k=C;break A}}else{VO(A,v,w);if((bU(Y,w,t[C+(e<<2)>>2]|0,A,.001,A)|0)<0){m=C;g=Y;r=-1;e=z;v=W;k=C;break A}else v=0;while(1){if((v|0)>=(A|0))break r;if((n[(t[(t[a+(v<<2)>>2]|0)+16>>2]|0)+119>>0]|0)<=1)t[(t[g>>2]|0)+(v<<2)>>2]=t[w+(v<<2)>>2];v=v+1|0}}}while(0);e=e+1|0}if(((r|0)%5|0|0)==0&0!=0?(c[M>>3]=p,a3(y,90371,M)|0,((r+5|0)%50|0|0)==0):0)u6(10,y)|0;r=r+1|0;B=p}if(!0)k=0;else{R=+aP(W,Y,f,A,F);x=+sx();c[V>>3]=R;t[V+8>>2]=r;c[V+16>>3]=x;a3(y,90062,V)|0;k=0}while(1){if((k|0)>=(f|0)){m=C;g=Y;e=z;v=W;k=C;break A}e=W+(k<<2)|0;g=i+(k<<2)|0;v=0;while(1){if((v|0)>=(A|0))break;c[(t[g>>2]|0)+(v<<3)>>3]=+s[(t[e>>2]|0)+(v<<2)>>2];v=v+1|0}k=k+1|0}}}while(0);G2(e);G2(v);G2(g);if(m|0){G2(t[m>>2]|0);G2(k)}G2(w);G2(b);G2(o);G2(l)}}while(0);h=N;return r|0}function iP(e,A,r,a,n,f,l){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;var o=0,u=0,b=0,w=0.0,k=0,d=0,v=0.0,g=0,m=0.0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0;H=h;h=h+32|0;b=H+24|0;J=H+8|0;W=H+4|0;R=H;N=(A|0)<50?A:50;x=$F(N<<2)|0;z=A<<3;u=$F(P(z,N)|0)|0;o=0;while(1){if((o|0)>=(N|0))break;t[x+(o<<2)>>2]=u+((P(o,A)|0)<<3);o=o+1|0}L=N<<1;L=(L|0)>50?L:50;L=(L|0)>(A|0)?A:L;t[b>>2]=0;aT(e,A,L,b,l);tT(t[b>>2]|0,A,L);$O(t[b>>2]|0,L,A,x,N);G2(t[t[b>>2]>>2]|0);G2(t[b>>2]|0);L=A<<2;V=$F(L)|0;o=0;while(1){if((o|0)>=(A|0))break;t[V+(o<<2)>>2]=-1;o=o+1|0}fU(J,A);F=t[e+8>>2]|0;Y=(l|0)!=0;if(Y)XT(e,A);Z=$F(L)|0;M=$F(160)|0;u=$F(A*160|0)|0;G=$F(160)|0;o=0;while(1){if((o|0)==40)break;t[G+(o<<2)>>2]=u+((P(o,A)|0)<<2);o=o+1|0}o=(t8()|0)%(A|0)|0;t[V+(o<<2)>>2]=0;t[M>>2]=o;u=t[G>>2]|0;if(Y){HU(o,e,A,u);u=0;b=0}else{iU(o,e,A,u,J);u=0;b=0}while(1){if((b|0)>=(A|0)){d=1;break}D=t[(t[G>>2]|0)+(b<<2)>>2]|0;t[Z+(b<<2)>>2]=D;I=(D|0)>(u|0);o=I?b:o;u=I?D:u;b=b+1|0}while(1){if((d|0)==40){o=0;break}t[V+(o<<2)>>2]=d;t[M+(d<<2)>>2]=o;g=G+(d<<2)|0;u=t[g>>2]|0;if(Y){HU(o,e,A,u);k=0;u=0}else{iU(o,e,A,u,J);k=0;u=0}while(1){if((k|0)>=(A|0))break;b=Z+(k<<2)|0;D=t[b>>2]|0;l=t[(t[g>>2]|0)+(k<<2)>>2]|0;l=(D|0)<(l|0)?D:l;t[b>>2]=l;if((l|0)<=(u|0)){if((l|0)==(u|0)?((t8()|0)%(k+1|0)|0|0)==0:0){u=t[b>>2]|0;o=k}}else{u=l;o=k}k=k+1|0}d=d+1|0}while(1){if((o|0)>=(A|0))break;t[Z+(o<<2)>>2]=-1;o=o+1|0}E=$F(L)|0;D=$F(A<<4)|0;B=A+-1|0;y=B<<2;I=0;b=0;l=0;u=0;C=0;while(1){if((C|0)>=(A|0))break;o=V+(C<<2)|0;e:do{if((t[o>>2]|0)>-1){g=D+(C<<4)+4|0;t[g>>2]=$F(y)|0;p=$F(y)|0;t[D+(C<<4)+8>>2]=p;t[D+(C<<4)>>2]=B;i[D+(C<<4)+12>>0]=1;d=G+(t[o>>2]<<2)|0;o=0;while(1){if((o|0)==(C|0)){k=C;break}t[(t[g>>2]|0)+(o<<2)>>2]=o;t[p+(o<<2)>>2]=t[(t[d>>2]|0)+(o<<2)>>2];o=o+1|0}while(1){o=k+1|0;if((k|0)==(B|0)){o=B;break e}t[(t[g>>2]|0)+(k<<2)>>2]=o;t[p+(k<<2)>>2]=t[(t[d>>2]|0)+(o<<2)>>2];k=o}}else{if((u|0)<40){l=$F(L)|0;b=$F(L)|0;u=A;o=1}else o=0;i[D+(C<<4)+12>>0]=o;t[D+(C<<4)+4>>2]=l;t[D+(C<<4)+8>>2]=b;t[D+(C<<4)>>2]=40;o=0;while(1){if((o|0)==40)break;t[l+(o<<2)>>2]=t[M+(o<<2)>>2];t[b+(o<<2)>>2]=t[(t[G+(o<<2)>>2]|0)+(C<<2)>>2];o=o+1|0}b=b+160|0;l=l+160|0;u=u+-40|0;o=40}}while(0);I=o+I|0;C=C+1|0}G2(Z);G2(E);if(G|0){G2(t[G>>2]|0);G2(G)}G=$F(A*20|0)|0;k=I+A<<2;d=$F(k)|0;p=(f|0)==2;k=$F(k)|0;g=0;while(1){if((g|0)>=(A|0))break;t[G+(g*20|0)+4>>2]=d;t[G+(g*20|0)+8>>2]=k;o=(t[D+(g<<4)>>2]|0)+1|0;E=G+(g*20|0)|0;t[E>>2]=o;b=(t[D+(g<<4)+8>>2]|0)+-4|0;l=D+(g<<4)+4|0;e:do{if(p){w=0.0;u=1;while(1){if((u|0)>=(o|0))break e;t[d+(u<<2)>>2]=t[(t[l>>2]|0)+(u+-1<<2)>>2];m=+(t[b+(u<<2)>>2]|0);m=-1.0/(m*m);s[k+(u<<2)>>2]=m;w=w-m;u=u+1|0;o=t[E>>2]|0}}else{w=0.0;u=1;while(1){if((u|0)>=(o|0))break e;t[d+(u<<2)>>2]=t[(t[l>>2]|0)+(u+-1<<2)>>2];m=-1.0/+(t[b+(u<<2)>>2]|0);s[k+(u<<2)>>2]=m;w=w-m;u=u+1|0;o=t[E>>2]|0}}}while(0);t[d>>2]=g;s[k>>2]=w;L=t[E>>2]|0;k=k+(L<<2)|0;d=d+(L<<2)|0;g=g+1|0}Z=$F(a<<2)|0;t[Z>>2]=$F(P(a<<3,N)|0)|0;o=1;while(1){if((o|0)>=(a|0))break;t[Z+(o<<2)>>2]=(t[Z>>2]|0)+((P(o,N)|0)<<3);o=o+1|0}e:do{if(n){o=0;while(1){if((o|0)>=(a|0))break;b=Z+(o<<2)|0;u=0;while(1){if((u|0)>=(N|0))break;c[(t[b>>2]|0)+(u<<3)>>3]=0.0;u=u+1|0}o=o+1|0}if((a|0)!=2){o=0;while(1){if((o|0)>=(a|0)){o=0;break e}c[(t[Z+(o<<2)>>2]|0)+(o<<3)>>3]=1.0;o=o+1|0}}c[t[Z>>2]>>3]=1.0;o=Z+4|0;if(!((e_(x,N,A,t[o>>2]|0)|0)<<24>>24)){u=t[o>>2]|0;o=0;while(1){if((o|0)>=(N|0))break;c[u+(o<<3)>>3]=0.0;o=o+1|0}c[u+8>>3]=1.0;o=0}else o=0}else{u=0;while(1){if((u|0)>=(a|0)){o=0;break e}b=Z+(u<<2)|0;o=0;while(1){if((o|0)>=(N|0))break;m=+(t8()|0)*4.656612875245797e-10;c[(t[b>>2]|0)+(o<<3)>>3]=m;o=o+1|0}u=u+1|0}}}while(0);while(1){if((o|0)>=(a|0))break;QO(x,A,N,t[Z+(o<<2)>>2]|0,t[r+(o<<2)>>2]|0);o=o+1|0}t[W>>2]=0;t[R>>2]=0;gO(G,x,A,N,W);dO(x,t[W>>2]|0,N,A,N,R);G2(t[t[W>>2]>>2]|0);G2(t[W>>2]|0);C=$F(z)|0;I=$F(N<<3)|0;o=0;u=0;w=+tP(r,D,a,A,f);e:while(1){if((u|0)<50&o<<24>>24==0)B=0;else break;while(1){if((B|0)>=(a|0))break;y=r+(B<<2)|0;b=0;while(1){if((b|0)>=(A|0))break;k=C+(b<<3)|0;c[k>>3]=0.0;d=(t[D+(b<<4)+8>>2]|0)+-4|0;g=t[G+(b*20|0)+4>>2]|0;p=t[G+(b*20|0)+8>>2]|0;E=G+(b*20|0)|0;v=0.0;l=1;while(1){if((l|0)>=(t[E>>2]|0))break;o=t[g+(l<<2)>>2]|0;m=+jT(r,a,b,o);if(m>1.0e-30){m=-(+s[p+(l<<2)>>2]*+(t[d+(l<<2)>>2]|0))/m;c[k>>3]=m*+c[(t[y>>2]|0)+(o<<3)>>3]+ +c[k>>3];v=v-m}l=l+1|0}c[k>>3]=+c[k>>3]+ +c[(t[y>>2]|0)+(b<<3)>>3]*v;b=b+1|0}kO(x,N,A,C,I);o=Z+(B<<2)|0;if(uU(t[R>>2]|0,t[o>>2]|0,I,N,.001,N,0)|0){u=-1;break e}QO(x,A,N,t[o>>2]|0,t[y>>2]|0);B=B+1|0}if(!(u&1)){m=+tP(r,D,a,A,f);w=+Q(+(m-w))/(m+1.0e-10);o=w<+c[23294]&1;w=m}else o=0;u=u+1|0}G2(I);G2(C);if(Y){ST(e,A,F);o=0}else o=0;while(1){if((o|0)>=(A|0))break;if(i[D+(o<<4)+12>>0]|0){G2(t[D+(o<<4)+4>>2]|0);G2(t[D+(o<<4)+8>>2]|0)}o=o+1|0}G2(D);G2(t[G+4>>2]|0);G2(t[G+8>>2]|0);G2(G);G2(V);G2(M);G2(t[Z>>2]|0);G2(Z);o=t[R>>2]|0;if(o|0){G2(t[o>>2]|0);G2(t[R>>2]|0)}G2(t[x>>2]|0);G2(x);lU(J);h=H;return u|0}function aP(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0.0,l=0,c=0,o=0.0,u=0,b=0,h=0,w=0,k=0,d=0;k=i+-1|0;h=(a|0)==2;n=0.0;a=0;u=0;while(1){if((u|0)>=(k|0))break;w=i-u|0;b=1;while(1){a=a+1|0;if((b|0)>=(w|0))break;c=b+u|0;f=0.0;l=0;while(1){if((l|0)>=(r|0))break;d=t[e+(l<<2)>>2]|0;o=+s[d+(u<<2)>>2]-+s[d+(c<<2)>>2];f=f+o*o;l=l+1|0}f=+D(+f);o=+s[A+(a<<2)>>2];if(h){f=1.0/+D(+o)-f;f=f*f}else{f=1.0/o-f;f=f*f}b=b+1|0;n=f*o+n}u=u+1|0}return+n}function tP(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,h=0,w=0.0,k=0;e:do{if((a|0)==2){n=0.0;o=0;while(1){if((o|0)>=(i|0))break e;b=t[A+(o<<4)>>2]|0;h=A+(o<<4)+4|0;u=A+(o<<4)+8|0;s=0;while(1){if((s|0)>=(b|0))break;l=t[(t[h>>2]|0)+(s<<2)>>2]|0;if((l|0)>(o|0)){f=0.0;a=0;while(1){if((a|0)>=(r|0))break;k=t[e+(a<<2)>>2]|0;w=+c[k+(o<<3)>>3]-+c[k+(l<<3)>>3];f=w*w+f;a=a+1|0}f=+D(+f);w=+(t[(t[u>>2]|0)+(s<<2)>>2]|0);f=w-f;n=f*f/(w*w)+n}s=s+1|0}o=o+1|0}}else{o=0;n=0.0;while(1){if((o|0)>=(i|0))break e;u=t[A+(o<<4)>>2]|0;b=A+(o<<4)+4|0;h=A+(o<<4)+8|0;s=0;while(1){if((s|0)>=(u|0))break;l=t[(t[b>>2]|0)+(s<<2)>>2]|0;if((l|0)>(o|0)){f=0.0;a=0;while(1){if((a|0)>=(r|0))break;k=t[e+(a<<2)>>2]|0;w=+c[k+(o<<3)>>3]-+c[k+(l<<3)>>3];f=w*w+f;a=a+1|0}f=+D(+f);w=+(t[(t[h>>2]|0)+(s<<2)>>2]|0);f=w-f;n=f*f/w+n}s=s+1|0}o=o+1|0}}}while(0);return+n}function nP(e){e=+e;return+(+D(+e)*e)}function fP(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0.0;n=t[47137]|0;i=0.0;a=0;while(1){if((a|0)>=(n|0))break;f=+c[e+(a<<3)>>3]-+c[A+(a<<3)>>3];c[r+(a<<3)>>3]=f;i=f*f+i;a=a+1|0}return+ +D(+i)}function lP(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,n=0,f=0;f=KF(e<<2)|0;a=0;n=KF(P(e<<3,A)|0)|0;while(1){if((a|0)>=(e|0))break;t[f+(a<<2)>>2]=n;i=0;while(1){if((i|0)>=(A|0))break;c[n+(i<<3)>>3]=r;i=i+1|0}a=a+1|0;n=n+(A<<3)|0}return f|0}function sP(e){e=e|0;if(e|0){G2(t[e>>2]|0);G2(e)}return}function cP(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0;b=h;h=h+16|0;u=gk(e)|0;o=mk(e)|0;s=zw(e,2,92493,0)|0;e:do{if(!A){c[23294]=+(u|0)*.0001;zF(e,108886,186352);n=Hw(t[e+60>>2]|0,90100)|0;if(!n)r=.99;else r=+$3(n);c[23296]=r;n=KF((u<<2)+4|0)|0;l=e+16|0;t[(t[l>>2]|0)+152>>2]=n;n=0;r=0.0;f=sd(e)|0;while(1){if(!f)break e;t[(t[(t[l>>2]|0)+152>>2]|0)+(n<<2)>>2]=f;w=t[f+16>>2]|0;t[w+120>>2]=n;t[w+124>>2]=-1;a=+bP(e,f,s)+r;n=n+1|0;r=a;f=cd(e,f)|0}}else{c[23294]=.0001;zF(e,108886,186352);n=0;r=0.0;f=sd(e)|0;while(1){if(!f)break e;t[(t[f+16>>2]|0)+120>>2]=n;a=+bP(e,f,s)+r;n=n+1|0;r=a;f=cd(e,f)|0}}}while(0);n=Hw(e,90108)|0;if((n|0)!=0?(i[n>>0]|0)!=0:0){r=+c[23294];a=+$3(n);if(!(r>a))r=a}else r=r/+(((o|0)>1?o:1)|0)*+D(+ +(u|0))+1.0;c[23295]=r;if(!(t[47134]|A)){A=lP(u,u,r)|0;w=e+16|0;t[(t[w>>2]|0)+160>>2]=A;A=lP(u,u,1.0)|0;t[(t[w>>2]|0)+164>>2]=A;A=lP(u,t[47137]|0,1.0)|0;t[(t[w>>2]|0)+168>>2]=A;A=hP(u,u,t[47137]|0)|0;t[(t[w>>2]|0)+172>>2]=A}h=b;return u|0}function oP(e,A,r){e|0;A|0;r|0;var i=0,a=0,n=0,f=0,l=0,s=0;0;0;ek(e,A)|0;e:while(1){if(!s)break;t[s>>2]&3;t[((f|0)==2?s:s+-48|0)+40>>2]|0;t[((f|0)==3?s:s+48|0)+40>>2]|0;do{if((n|0)!=(f|0)){(f|0)==(A|0);if((i|0)!=1){l?n:f;t[r>>2]=a;i+1|0;break}if(!((n|0)==(a|0)&l)?!((n|0)==(A|0)&(f|0)==(a|0)):0){2;break e}else 1}}while(0);Ak(e,s,A)|0}return i|0}function uP(e,A,r){e|0;A|0;r|0;var i=0,a=0,n=0,f=0;h;h=h+16|0;f;e+60|0;e:while(1){A:while(1){if(!A)break e;switch(oP(e,A,a)|0){case 0:{5;break A}case 1:{8;break A}default:0}}if((i|0)==5){if((r|0)==(A|0))cd(e,r)|0;Ed(t[n>>2]|0,A)|0;0;continue}else if((i|0)==8){if((r|0)==(A|0))cd(e,r)|0;Ed(t[n>>2]|0,A)|0;t[a>>2]|0;continue}}h=f;return r|0}function bP(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0,f=0,l=0,s=0;s=h;h=h+32|0;f=s+8|0;n=s;A=Ow(e,A)|0;i=0.0;while(1){if(!A)break;switch(wP(A,r,n)|0){case 0:{a=+c[n>>3];break}case 2:{t[f>>2]=Mk(e)|0;c[f+8>>3]=1.0;nw(3,90120,f)|0;l=6;break}default:l=6}if((l|0)==6){l=0;c[n>>3]=1.0;a=1.0}c[(t[A+16>>2]|0)+136>>3]=a;A=qw(e,A)|0;i=a+i}h=s;return+i}function hP(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0;l=KF((e<<2)+4|0)|0;s=(A<<2)+4|0;o=r<<3;n=0;while(1){if((n|0)>=(e|0))break;f=l+(n<<2)|0;t[f>>2]=KF(s)|0;a=0;while(1){if((a|0)>=(A|0))break;i=KF(o)|0;t[(t[f>>2]|0)+(a<<2)>>2]=i;i=0;while(1){if((i|0)>=(r|0))break;c[(t[(t[f>>2]|0)+(a<<2)>>2]|0)+(i<<3)>>3]=0.0;i=i+1|0}a=a+1|0}t[(t[f>>2]|0)+(a<<2)>>2]=0;n=n+1|0}t[l+(n<<2)>>2]=0;return l|0}function wP(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0.0,f=0,l=0,s=0;s=h;h=h+16|0;l=s+8|0;f=s;do{if((A|0)!=0?(a=Pw(e,A)|0,(i[a>>0]|0)!=0):0){t[f>>2]=r;if(((V3(a,101209,f)|0)>=1?(n=+c[r>>3],!(n<0.0)):0)?n!=0.0|(t[47134]|0)!=0:0){e=0;break}t[l>>2]=a;nw(0,90147,l)|0;e=2}else e=1}while(0);h=s;return e|0}function kP(e){e=e|0;return cP(e,0)|0}function dP(e){e=e|0;e=e+16|0;G2(t[(t[e>>2]|0)+152>>2]|0);if(!(t[47134]|0)){sP(t[(t[e>>2]|0)+160>>2]|0);sP(t[(t[e>>2]|0)+164>>2]|0);sP(t[(t[e>>2]|0)+168>>2]|0);vP(t[(t[e>>2]|0)+172>>2]|0);t[(t[e>>2]|0)+172>>2]=0}return}function vP(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if(e|0){a=0;while(1){n=e+(a<<2)|0;A=t[n>>2]|0;if(!A)break;else i=0;while(1){r=t[A+(i<<2)>>2]|0;if(!r)break;G2(r);i=i+1|0;A=t[n>>2]|0}G2(A);a=a+1|0}G2(e)}return}function gP(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+(A|0);A=e+16|0;while(1){if((r|0)>=(t[47137]|0))break;a=+s8()*i;c[(t[(t[A>>2]|0)+132>>2]|0)+(r<<3)>>3]=a;r=r+1|0}return}function mP(e,A){e=e|0;A=A|0;gP(e,A,2);return}function pP(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0;i=+(A|0);a=+s8()*i;r=e+16|0;c[t[(t[r>>2]|0)+132>>2]>>3]=a;i=+s8()*i;c[(t[(t[r>>2]|0)+132>>2]|0)+8>>3]=i;if((t[47137]|0)>2)mP(e,A);return}function EP(e,A){e=e|0;A=A|0;var r=0,a=0;a=h;h=h+16|0;r=a;if(0)G3(90165,26,1,t[15712]|0)|0;A=rH(e,A,2)|0;e:do{if((A|0)!=1){if(!(t[46797]|A)){nw(0,90192,r)|0;t[46797]=1}r=e+16|0;A=0;while(1){e=t[(t[(t[r>>2]|0)+152>>2]|0)+(A<<2)>>2]|0;if(!e)break e;if(!(i[(t[e+16>>2]|0)+119>>0]|0))pP(e,1);A=A+1|0}}}while(0);h=a;return}function BP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0.0;k=h;h=h+96|0;w=k+80|0;u=k;if(0){G3(90241,25,1,t[15712]|0)|0;lx()}b=e+16|0;a=t[b>>2]|0;s=t[a+164>>2]|0;a=t[a+160>>2]|0;o=0;while(1){if((o|0)>=(A|0))break;f=a+(o<<2)|0;l=s+(o<<2)|0;i=0;while(1){if((i|0)==(o|0))break;n=+c[(t[f>>2]|0)+(i<<3)>>3];n=1.0/(n*n);r=t[(t[b>>2]|0)+152>>2]|0;r=lk(e,t[r+(o<<2)>>2]|0,t[r+(i<<2)>>2]|0,0,0)|0;if(r)n=+c[(t[r+16>>2]|0)+128>>3]*n;c[(t[s+(i<<2)>>2]|0)+(o<<3)>>3]=n;c[(t[l>>2]|0)+(i<<3)>>3]=n;i=i+1|0}o=o+1|0}e=t[47137]|0;i=0;while(1){if((i|0)<(A|0))r=0;else break;while(1){if((r|0)>=(e|0))break;c[(t[(t[(t[b>>2]|0)+168>>2]|0)+(i<<2)>>2]|0)+(r<<3)>>3]=0.0;r=r+1|0}i=i+1|0}f=0;while(1){r=t[(t[(t[b>>2]|0)+152>>2]|0)+(f<<2)>>2]|0;if(!r)break;e=r+16|0;r=0;while(1){if((r|0)>=(A|0))break;e:do{if((f|0)!=(r|0)){n=+fP(t[(t[e>>2]|0)+132>>2]|0,t[(t[(t[(t[(t[b>>2]|0)+152>>2]|0)+(r<<2)>>2]|0)+16>>2]|0)+132>>2]|0,u);a=t[47137]|0;n=1.0/n;i=0;while(1){if((i|0)>=(a|0))break e;o=t[b>>2]|0;d=+c[u+(i<<3)>>3];d=(d-+c[(t[(t[o+160>>2]|0)+(f<<2)>>2]|0)+(r<<3)>>3]*d*n)*+c[(t[(t[o+164>>2]|0)+(f<<2)>>2]|0)+(r<<3)>>3];c[(t[(t[(t[o+172>>2]|0)+(f<<2)>>2]|0)+(r<<2)>>2]|0)+(i<<3)>>3]=d;o=(t[(t[o+168>>2]|0)+(f<<2)>>2]|0)+(i<<3)|0;c[o>>3]=+c[o>>3]+d;i=i+1|0}}}while(0);r=r+1|0}f=f+1|0}if(0){b=t[15712]|0;c[w>>3]=+sx();a3(b,90267,w)|0}h=k;return}function yP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0.0,s=0;f=h;h=h+32|0;n=f+24|0;a=f+8|0;i=f;l=+c[23294];c[23216]=l*l;while(1){r=CP(e,A)|0;if(!r)break;IP(e,A,r)}if(!0)A=e+16|0;else{r=t[15712]|0;c[i>>3]=+ZP(e,A);a3(r,90277,i)|0;A=e+16|0;s=t[(t[A>>2]|0)+156>>2]|0;i=(s|0)==(t[47136]|0)?90291:195059;l=+sx();t[a>>2]=s;t[a+4>>2]=i;c[a+8>>3]=l;a3(r,90293,a)|0}A=t[(t[A>>2]|0)+156>>2]|0;if((A|0)==(t[47136]|0)){s=Mk(e)|0;t[n>>2]=A;t[n+4>>2]=s;nw(0,90320,n)|0}h=f;return}function CP(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0;d=h;h=h+16|0;k=d;b=(t[46799]|0)+1|0;t[46799]=b;e=t[e+16>>2]|0;if((t[e+156>>2]|0)<(t[47136]|0)){o=t[47137]|0;u=e+152|0;s=e+168|0;e=0;r=0.0;l=0;while(1){if((l|0)>=(A|0))break;a=t[(t[u>>2]|0)+(l<<2)>>2]|0;if((n[(t[a+16>>2]|0)+119>>0]|0)<=1){f=0.0;i=0;while(1){if((i|0)>=(o|0))break;v=+c[(t[(t[s>>2]|0)+(l<<2)>>2]|0)+(i<<3)>>3];f=v*v+f;i=i+1|0}if(f>r){e=a;r=f}}l=l+1|0}if(!(r<+c[23216])){if(0!=0&((b|0)%100|0|0)==0?(w=t[15712]|0,c[k>>3]=+D(+r),a3(w,90371,k)|0,((t[46799]|0)%1e3|0|0)==0):0)u6(10,w)|0}else e=0}else e=0;h=d;return e|0}function IP(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b;s=r+16|0;o=t[(t[s>>2]|0)+120>>2]|0;a=t[46798]|0;if(!a){n=t[47137]|0;n=$F(P(n<<3,n)|0)|0}else{n=t[47137]|0;n=AM(a,P(n<<3,n)|0)|0}t[46798]=n;GP(e,A,o,n);f=t[47137]|0;l=e+16|0;a=0;while(1){if((a|0)>=(f|0))break;c[185736+(a<<3)>>3]=-+c[(t[(t[(t[l>>2]|0)+168>>2]|0)+(o<<2)>>2]|0)+(a<<3)>>3];a=a+1|0}M_(n,185816,185736,f);a=0;while(1){if((a|0)>=(t[47137]|0))break;i=+c[23296];i=(1.0-i)*2.0*+s8()+i;f=185816+(a<<3)|0;i=i*+c[f>>3];c[f>>3]=i;f=(t[(t[s>>2]|0)+132>>2]|0)+(a<<3)|0;c[f>>3]=+c[f>>3]+i;a=a+1|0}s=(t[l>>2]|0)+156|0;t[s>>2]=(t[s>>2]|0)+1;LP(e,A,o);if(Yx()|0){n=t[47137]|0;i=0.0;a=0;while(1){if((a|0)>=(n|0))break;i=+Q(+ +c[185816+(a<<3)>>3])+i;a=a+1|0}i=+D(+i);o=t[15712]|0;t[u>>2]=Mk(r)|0;c[u+8>>3]=i;a3(o,90362,u)|0}h=b;return}function ZP(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0.0;k=A+-1|0;b=e+16|0;h=t[47137]|0;n=0;r=0.0;e:while(1){if((n|0)>=(k|0))break;u=t[b>>2]|0;w=t[u+152>>2]|0;l=n+1|0;s=(t[w+(n<<2)>>2]|0)+16|0;o=u+164|0;u=u+160|0;f=l;while(1){if((f|0)>=(A|0)){n=l;continue e}a=(t[w+(f<<2)>>2]|0)+16|0;e=0;i=0.0;while(1){if((e|0)>=(h|0))break;d=+c[(t[(t[s>>2]|0)+132>>2]|0)+(e<<3)>>3]-+c[(t[(t[a>>2]|0)+132>>2]|0)+(e<<3)>>3];e=e+1|0;i=d*d+i}d=+c[(t[(t[u>>2]|0)+(n<<2)>>2]|0)+(f<<3)>>3];d=((+D(+i)*-2.0+d)*d+i)*+c[(t[(t[o>>2]|0)+(n<<2)>>2]|0)+(f<<3)>>3]+r;f=f+1|0;r=d}}return+r}function GP(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0,w=0.0,k=0.0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0;B=h;h=h+80|0;E=B;p=t[e+16>>2]|0;s=t[p+164>>2]|0;o=t[p+160>>2]|0;p=t[p+152>>2]|0;l=t[p+(r<<2)>>2]|0;n=t[47137]|0;e=0;while(1){if((e|0)>=(n|0))break;f=P(n,e)|0;a=0;while(1){if((a|0)==(n|0))break;c[i+(f+a<<3)>>3]=0.0;a=a+1|0}e=e+1|0}m=t[47137]|0;g=l+16|0;v=s+(r<<2)|0;s=o+(r<<2)|0;l=0;while(1){if((l|0)>=(A|0))break;e:do{if((l|0)!=(r|0)){a=(t[p+(l<<2)>>2]|0)+16|0;d=0.0;e=0;while(1){if((e|0)>=(m|0))break;k=+c[(t[(t[g>>2]|0)+132>>2]|0)+(e<<3)>>3]-+c[(t[(t[a>>2]|0)+132>>2]|0)+(e<<3)>>3];c[E+(e<<3)>>3]=k;d=k*k+d;e=e+1|0}u=1.0/+nP(d);f=0;while(1){if((f|0)>=(m|0))break e;a=(t[v>>2]|0)+(l<<3)|0;n=(t[s>>2]|0)+(l<<3)|0;b=+c[E+(f<<3)>>3];e=0;while(1){w=+c[a>>3];k=+c[n>>3];if((e|0)==(f|0))break;o=i+((P(m,e)|0)+f<<3)|0;c[o>>3]=+c[o>>3]+w*u*k*b*+c[E+(e<<3)>>3];e=e+1|0}o=i+((P(m,f)|0)+f<<3)|0;c[o>>3]=(1.0-k*u*(d-b*b))*w+ +c[o>>3];f=f+1|0}}}while(0);l=l+1|0}a=t[47137]|0;f=1;while(1){if((f|0)>=(a|0))break;n=P(a,f)|0;e=0;while(1){if((e|0)==(f|0))break;c[i+(n+e<<3)>>3]=+c[i+((P(a,e)|0)+f<<3)>>3];e=e+1|0}f=f+1|0}h=B;return}function LP(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0.0,w=0.0,k=0,d=0,v=0;o=h;h=h+80|0;s=o;l=e+16|0;a=t[l>>2]|0;n=t[(t[a+152>>2]|0)+(r<<2)>>2]|0;i=t[47137]|0;a=a+168|0;e=0;while(1){if((e|0)>=(i|0))break;c[(t[(t[a>>2]|0)+(r<<2)>>2]|0)+(e<<3)>>3]=0.0;e=e+1|0}a=n+16|0;e=0;while(1){if((e|0)>=(A|0))break;e:do{if((e|0)!=(r|0)){f=+fP(t[(t[a>>2]|0)+132>>2]|0,t[(t[(t[(t[(t[l>>2]|0)+152>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+132>>2]|0,s);n=t[47137]|0;f=1.0/f;i=0;while(1){if((i|0)>=(n|0))break e;u=t[l>>2]|0;k=t[u+172>>2]|0;d=(t[(t[k+(r<<2)>>2]|0)+(e<<2)>>2]|0)+(i<<3)|0;b=+c[s+(i<<3)>>3];b=(b-+c[(t[(t[u+160>>2]|0)+(r<<2)>>2]|0)+(e<<3)>>3]*b*f)*+c[(t[(t[u+164>>2]|0)+(r<<2)>>2]|0)+(e<<3)>>3];c[d>>3]=b;u=t[u+168>>2]|0;v=(t[u+(r<<2)>>2]|0)+(i<<3)|0;c[v>>3]=+c[v>>3]+b;k=(t[(t[k+(e<<2)>>2]|0)+(r<<2)>>2]|0)+(i<<3)|0;b=+c[k>>3];w=-+c[d>>3];c[k>>3]=w;u=(t[u+(e<<2)>>2]|0)+(i<<3)|0;c[u>>3]=w-b+ +c[u>>3];i=i+1|0}}}while(0);e=e+1|0}h=o;return}function QP(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;r=e+16|0;n=t[46800]|0;A=t[(t[r>>2]|0)+124>>2]|0;while(1){if((A|0)<=0)break;f=(A+-1|0)/2|0;l=n+(f<<2)|0;i=t[l>>2]|0;a=i+16|0;if(+c[(t[a>>2]|0)+136>>3]<=+c[(t[r>>2]|0)+136>>3])break;t[l>>2]=e;t[(t[r>>2]|0)+124>>2]=f;t[n+(A<<2)>>2]=i;t[(t[a>>2]|0)+124>>2]=A;A=f}return}function DP(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0;f=e+16|0;l=t[46801]|0;s=t[46800]|0;n=t[(t[f>>2]|0)+124>>2]|0;while(1){i=n<<1|1;if((i|0)>=(l|0))break;r=i+1|0;if((r|0)<(l|0)){a=t[s+(r<<2)>>2]|0;A=t[s+(i<<2)>>2]|0;if(+c[(t[a+16>>2]|0)+136>>3]<+c[(t[A+16>>2]|0)+136>>3]){i=r;A=a}else o=6}else{A=t[s+(i<<2)>>2]|0;o=6}if((o|0)==6)o=0;r=A+16|0;if(+c[(t[f>>2]|0)+136>>3]<=+c[(t[r>>2]|0)+136>>3])break;t[s+(i<<2)>>2]=e;t[(t[f>>2]|0)+124>>2]=i;t[s+(n<<2)>>2]=A;t[(t[r>>2]|0)+124>>2]=n;n=i}return}function zP(e){e=e|0;var A=0,r=0;A=(t[e+16>>2]|0)+124|0;if((t[A>>2]|0)>=0)ge(90377,90397,643,90405);r=t[46801]|0;t[46801]=r+1;t[A>>2]=r;t[(t[46800]|0)+(r<<2)>>2]=e;if((r|0)>0)QP(e);return}function WP(){var e=0,A=0,r=0,i=0;A=t[46801]|0;if(!A)e=0;else{i=t[46800]|0;e=t[i>>2]|0;r=A+-1|0;t[46801]=r;r=t[i+(r<<2)>>2]|0;t[i>>2]=r;t[(t[r+16>>2]|0)+124>>2]=0;if((A|0)>2)DP(r);t[(t[e+16>>2]|0)+124>>2]=-1}return e|0}function YP(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+16|0;r=i;t[46800]=KF((A<<2)+4|0)|0;if(0){G3(90419,28,1,t[15712]|0)|0;lx()}A=sd(e)|0;while(1){if(!A)break;FP(e,A);A=cd(e,A)|0}if(0){e=t[15712]|0;c[r>>3]=+sx();a3(e,90267,r)|0}G2(t[46800]|0);h=i;return}function FP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0,f=0,l=0,s=0;i=t[(t[e+16>>2]|0)+152>>2]|0;a=+c[23295];r=0;while(1){n=t[i+(r<<2)>>2]|0;if(!n)break;c[(t[n+16>>2]|0)+136>>3]=a;r=r+1|0}t[46802]=A;s=t[A+16>>2]|0;c[s+136>>3]=0.0;t[s+128>>2]=0;zP(A);e:while(1){s=WP()|0;if(!s)break;r=t[46802]|0;l=s+16|0;if((s|0)!=(r|0))MP(e,r,s,+c[(t[l>>2]|0)+136>>3]);f=ek(e,s)|0;while(1){if(!f)continue e;r=t[f>>2]&3;A=t[((r|0)==3?f:f+48|0)+40>>2]|0;if((A|0)==(s|0))A=t[((r|0)==2?f:f+-48|0)+40>>2]|0;r=t[l>>2]|0;a=+c[(t[f+16>>2]|0)+136>>3]+ +c[r+136>>3];i=t[A+16>>2]|0;n=i+136|0;do{if(+c[n>>3]>a){c[n>>3]=a;if((t[i+124>>2]|0)>-1){QP(A);break}else{t[i+128>>2]=(t[r+128>>2]|0)+1;zP(A);break}}}while(0);f=Ak(e,f,s)|0}}return}function MP(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;A=t[(t[A+16>>2]|0)+120>>2]|0;r=t[(t[r+16>>2]|0)+120>>2]|0;e=t[(t[e+16>>2]|0)+160>>2]|0;c[(t[e+(r<<2)>>2]|0)+(A<<3)>>3]=i;c[(t[e+(A<<2)>>2]|0)+(r<<3)>>3]=i;return}function VP(e){e=e|0;DJ(e,2);a[(t[e+16>>2]|0)+176>>1]=2;t[47137]=2;NP(e);return}function NP(e){e=e|0;var A=0,r=0,i=0,a=0;A=gk(e)|0;i=KF(A*56|0)|0;A=KF((A<<2)+4|0)|0;a=e+16|0;t[(t[a>>2]|0)+152>>2]=A;A=sd(e)|0;r=0;while(1){if(!A)break;xJ(A);t[(t[A+16>>2]|0)+112>>2]=i+(r*56|0);t[(t[(t[a>>2]|0)+152>>2]|0)+(r<<2)>>2]=A;A=cd(e,A)|0;r=r+1|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;RP(A);A=qw(e,A)|0}r=cd(e,r)|0}return}function RP(e){e=e|0;var A=0.0;Sd(e,137460,176,1)|0;Mx(e)|0;A=+wx(e,t[47174]|0,1.0,0.0);c[(t[e+16>>2]|0)+128>>3]=A;return}function xP(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+80|0;o=m+32|0;f=m+24|0;n=m+16|0;l=m;g=m+72|0;w=m+40|0;if(gk(e)|0){VP(e);a=Hw(e,95738)|0;if(a)if(i[a>>0]|0){A=gd(e,a,0)|0;if(!A){t[n>>2]=a;nw(0,90448,n)|0;nw(3,90488,f)|0;A=0;v=1}else v=0}else{A=0;v=1}else{A=0;v=0}u=zw(e,1,95738,0)|0;b=(u|0)!=0;a=Hw(e,140742)|0;if((a|0?i[a>>0]|0:0)?(s=l+8|0,t[o>>2]=l,t[o+4>>2]=s,(V3(a,105503,o)|0)==1):0)c[s>>3]=+c[l>>3];if(gk(e)|0){o=Lp(e,g,0)|0;if((t[g>>2]|0)==1){n=(A|0)!=0;do{if(n)r=A;else{if(b?(r=JP(e,u)|0,r|0):0)break;r=0}}while(0);a=N_(e,r)|0;if(!((r|0)!=0|b^1))Mw(a,u,142463)|0;d=(sd(e)|0)+16|0;G2(t[(t[d>>2]|0)+112>>2]|0);t[(t[d>>2]|0)+112>>2]=0;AU(e)|0;TH(e);A=(v|0)==0|n?A:a}else{cE(e,2,8,w)|0;t[w+12>>2]=0;s=(v|0)==0;l=0;while(1){if((l|0)>=(t[g>>2]|0))break;n=t[o+(l<<2)>>2]|0;r=(A|0)!=0;if(r?(Wd(n,A)|0)!=0:0)a=A;else d=23;do{if((d|0)==23){d=0;if(b?(k=JP(n,u)|0,k|0):0){a=k;break}a=0}}while(0);Mp(n)|0;f=N_(n,a)|0;A=s|r?A:f;if(b?(a|0)==0|(a|0)==(A|0):0)Mw(f,u,142463)|0;AU(n)|0;l=l+1|0}d=(sd(e)|0)+16|0;G2(t[(t[d>>2]|0)+112>>2]|0);t[(t[d>>2]|0)+112>>2]=0;sE(t[g>>2]|0,o,e,w)|0;TH(e)}r=0;while(1){if((r|0)>=(t[g>>2]|0))break;Ed(e,t[o+(r<<2)>>2]|0)|0;r=r+1|0}G2(o)}if(v|0)Xw(e,95738,Mk(A)|0)|0;MV(e)}h=m;return}function JP(e,A){e=e|0;A=A|0;var r=0;r=sd(e)|0;while(1){if(!r){r=0;break}if((mx(Pw(r,A)|0)|0)<<24>>24)break;r=cd(e,r)|0}return r|0}function HP(e){e=e|0;var A=0,r=0;A=sd(e)|0;if(A|0){while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;bJ(r);r=qw(e,r)|0}oJ(A);A=cd(e,A)|0}PP(e)}return}function PP(e){e=e|0;G2(t[(t[e+16>>2]|0)+152>>2]|0);if((yd(e)|0)!=(e|0))qd(e,0,137483);return}function XP(e){e=e|0;SP(e);if(!((gk(e)|0)==0?!(t[(t[e+16>>2]|0)+180>>2]|0):0)){eq(e);MV(e)}return}function SP(e){e=e|0;t[47147]=zw(e,1,108230,108236)|0;DJ(e,2);a[(t[e+16>>2]|0)+176>>1]=2;t[47137]=2;jP(e,0);UP(e);return}function jP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l;f=(A|0)==0;if(f){_P(n);A=n}r=xv(e)|0;while(1){if(!r)break;if(!(y1(Mk(r)|0,108006,7)|0)){Sd(r,137483,280,1)|0;qP(A,r);jP(r,0)}else jP(r,A);r=Jv(r)|0}if(f?(i=t[n+8>>2]|0,a=e+16|0,t[(t[a>>2]|0)+180>>2]=i,i|0):0){f=AM(t[n>>2]|0,(i<<2)+4|0)|0;t[(t[a>>2]|0)+184>>2]=f}h=l;return}function UP(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=KF((gk(e)|0)<<2)|0;A=KF(((gk(e)|0)<<2)+4|0)|0;n=e+16|0;t[(t[n>>2]|0)+152>>2]=A;A=sd(e)|0;r=0;while(1){if(!A)break;Sd(A,137447,304,1)|0;t[(t[A+16>>2]|0)+112>>2]=a+(r<<2);t[(t[(t[n>>2]|0)+152>>2]|0)+(r<<2)>>2]=A;TP(A);i=Ow(e,A)|0;while(1){if(!i)break;OP(i);i=qw(e,i)|0}A=cd(e,A)|0;r=r+1|0}return}function TP(e){e=e|0;Xw(e,108230,108236)|0;return}function OP(e){e=e|0;Sd(e,137460,304,1)|0;return}function _P(e){e=e|0;t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;return}function qP(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;n=e+8|0;r=(t[n>>2]|0)+1|0;t[n>>2]=r;i=e+4|0;f=t[i>>2]|0;a=f+10|0;if((r|0)<(f|0))e=t[e>>2]|0;else{t[i>>2]=a;r=AM(t[e>>2]|0,a<<2)|0;t[e>>2]=r;e=r;r=t[n>>2]|0}t[e+(r<<2)>>2]=A;return}function KP(e){e=e|0;var A=0,r=0;A=sd(e)|0;if(A|0){G2(t[(t[A+16>>2]|0)+112>>2]|0);while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;bJ(r);r=qw(e,r)|0}oJ(A);A=cd(e,A)|0}$P(e)}return}function $P(e){e=e|0;G2(t[(t[e+16>>2]|0)+152>>2]|0);if((yd(e)|0)!=(e|0))qd(e,0,137483);return}function eX(e){e=e|0;var A=0,r=0,i=0;AX(e);rX(e,0);iX(e,0);aX(e,0);A=t[e+16>>2]|0;if(!(t[(t[A+8>>2]|0)+84>>2]|0)){A=a[A+136>>1]&14;if(A<<16>>16)VH(e,A&65535)|0}else{A=sd(e)|0;while(1){if(!A)break;i=t[A+16>>2]|0;r=t[i+132>>2]|0;c[r>>3]=+c[i+16>>3]*.013888888888888888;c[r+8>>3]=+c[i+24>>3]*.013888888888888888;A=cd(e,A)|0}xH(e,1)}MV(e);return}function AX(e){e=e|0;var A=0,r=0;DJ(e,2);a[(t[e+16>>2]|0)+176>>1]=2;t[47137]=2;A=sd(e)|0;while(1){if(!A)break;xJ(A);A=cd(e,A)|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;Sd(A,137460,176,1)|0;Mx(A)|0;A=qw(e,A)|0}r=cd(e,r)|0}return}function rX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l;f=(A|0)==0;if(f){sX(n);A=n}r=xv(e)|0;while(1){if(!r)break;if(!(y1(Mk(r)|0,108006,7)|0)){Sd(r,137483,280,1)|0;VF(r);cX(A,r);rX(r,0)}else rX(r,A);r=Jv(r)|0}if(f?(i=t[n+8>>2]|0,a=e+16|0,t[(t[a>>2]|0)+180>>2]=i,i|0):0){f=AM(t[n>>2]|0,(i<<2)+4|0)|0;t[(t[a>>2]|0)+184>>2]=f}h=l;return}function iX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0.0,l=0.0,s=0.0,o=0.0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0;H=h;h=h+448|0;z=H+400|0;D=H+384|0;J=H+344|0;x=H+304|0;R=H+248|0;L=H+192|0;B=H+152|0;y=H+96|0;b=H+72|0;r=H+64|0;Y=H+32|0;F=H;Z=H+416|0;m=H+328|0;E=H+288|0;M=H+232|0;V=H+176|0;N=H+136|0;W=H+80|0;u=t[e+60>>2]|0;if(0>1){tX(A);Q=t[15712]|0;t[r>>2]=Mk(e)|0;a3(Q,90723,r)|0}Q=e+16|0;a=A+1|0;r=1;i=0;while(1){n=t[Q>>2]|0;if((r|0)>(t[n+180>>2]|0))break;G=t[(t[n+184>>2]|0)+(r<<2)>>2]|0;iX(G,a);r=r+1|0;i=(gk(G)|0)+i|0}w=(gk(e)|0)-i|0;r=t[Q>>2]|0;G=(t[r+180>>2]|0)+w|0;p=(G|0)==0;if(p?(t[r+12>>2]|0)==0:0){J=r+16|0;t[J>>2]=0;t[J+4>>2]=0;t[J+8>>2]=0;t[J+12>>2]=0;c[r+40>>3]=18.0;c[r+32>>3]=18.0}else{r=Z+16|0;do{if((cE(e,4,4,Z)|0)>>>0>=3)if((t[r>>2]|0)==4?(t[Z+28>>2]&2|0)!=0:0){i=zw(u,0,99190,0)|0;r=zw(u,1,99190,0)|0;if((i|0)!=0|(r|0)!=0){t[Z+24>>2]=KF(G<<2)|0;break}else{t[b>>2]=Mk(e)|0;nw(0,90577,b)|0;r=0;i=0;break}}else{r=0;i=0}else{t[r>>2]=3;r=0;i=0}}while(0);C=KF(G<<5)|0;I=KF(G<<2)|0;v=Z+24|0;u=(i|0)!=0;d=0;n=1;while(1){a=t[Q>>2]|0;if((n|0)>(t[a+180>>2]|0))break;a=t[(t[a+184>>2]|0)+(n<<2)>>2]|0;g=C+(d<<5)|0;k=(t[a+16>>2]|0)+16|0;t[g>>2]=t[k>>2];t[g+4>>2]=t[k+4>>2];t[g+8>>2]=t[k+8>>2];t[g+12>>2]=t[k+12>>2];t[g+16>>2]=t[k+16>>2];t[g+20>>2]=t[k+20>>2];t[g+24>>2]=t[k+24>>2];t[g+28>>2]=t[k+28>>2];if(u&(t[v>>2]|0)!=0){g=hx(a,i,0,0)|0;t[(t[v>>2]|0)+(d<<2)>>2]=g}t[I+(d<<2)>>2]=a;d=d+1|0;n=n+1|0}e:do{if((w|0)>0){b=Y+16|0;w=Y+24|0;k=(r|0)!=0;u=sd(e)|0;i=d;while(1){if(!u)break e;a=t[u+16>>2]|0;n=a+112|0;if(!(t[n>>2]|0)){t[n>>2]=e;t[Y>>2]=0;t[Y+4>>2]=0;t[Y+8>>2]=0;t[Y+12>>2]=0;c[b>>3]=+c[a+96>>3]+ +c[a+88>>3];c[w>>3]=+c[a+80>>3];g=C+(i<<5)|0;t[g>>2]=t[Y>>2];t[g+4>>2]=t[Y+4>>2];t[g+8>>2]=t[Y+8>>2];t[g+12>>2]=t[Y+12>>2];t[g+16>>2]=t[Y+16>>2];t[g+20>>2]=t[Y+20>>2];t[g+24>>2]=t[Y+24>>2];t[g+28>>2]=t[Y+28>>2];if(k&(t[v>>2]|0)!=0){g=hx(u,r,0,0)|0;t[(t[v>>2]|0)+(i<<2)>>2]=g}t[I+(i<<2)>>2]=u;i=i+1|0}u=cd(e,u)|0}}}while(0);g=iE(G,C,Z)|0;r=t[v>>2]|0;if(r|0)G2(r);nX(F,2147483647.0,2147483647.0);v=F+16|0;nX(m,-2147483647.0,-2147483647.0);t[v>>2]=t[m>>2];t[v+4>>2]=t[m+4>>2];t[v+8>>2]=t[m+8>>2];t[v+12>>2]=t[m+12>>2];n=Y+16|0;u=Y+8|0;b=Y+24|0;w=F+8|0;k=F+24|0;d=t[15712]|0;r=0;while(1){if((r|0)>=(G|0))break;l=+(t[g+(r<<3)>>2]|0);o=+(t[g+(r<<3)+4>>2]|0);i=C+(r<<5)|0;t[Y>>2]=t[i>>2];t[Y+4>>2]=t[i+4>>2];t[Y+8>>2]=t[i+8>>2];t[Y+12>>2]=t[i+12>>2];t[Y+16>>2]=t[i+16>>2];t[Y+20>>2]=t[i+20>>2];t[Y+24>>2]=t[i+24>>2];t[Y+28>>2]=t[i+28>>2];f=+c[Y>>3]+l;c[Y>>3]=f;l=+c[n>>3]+l;c[n>>3]=l;s=+c[u>>3]+o;c[u>>3]=s;o=+c[b>>3]+o;c[b>>3]=o;c[F>>3]=+c[(+c[F>>3]>3];c[w>>3]=+c[(+c[w>>3]>3];c[v>>3]=+c[(+c[v>>3]>l?F:Y)+16>>3];c[k>>3]=+c[(+c[k>>3]>o?F:Y)+24>>3];i=t[I+(r<<2)>>2]|0;a=i+16|0;if((r|0)<(t[(t[Q>>2]|0)+180>>2]|0)){m=(t[a>>2]|0)+16|0;t[m>>2]=t[Y>>2];t[m+4>>2]=t[Y+4>>2];t[m+8>>2]=t[Y+8>>2];t[m+12>>2]=t[Y+12>>2];t[m+16>>2]=t[Y+16>>2];t[m+20>>2]=t[Y+20>>2];t[m+24>>2]=t[Y+24>>2];t[m+28>>2]=t[Y+28>>2];if(0>1){tX(A);t[y>>2]=Mk(i)|0;c[y+8>>3]=f;c[y+16>>3]=s;c[y+24>>3]=l;c[y+32>>3]=o;a3(d,90556,y)|0}}else{m=(t[a>>2]|0)+16|0;t[D>>2]=t[Y>>2];t[D+4>>2]=t[Y+4>>2];t[D+8>>2]=t[Y+8>>2];t[D+12>>2]=t[Y+12>>2];t[z>>2]=t[n>>2];t[z+4>>2]=t[n+4>>2];t[z+8>>2]=t[n+8>>2];t[z+12>>2]=t[n+12>>2];fX(E,D,z);t[m>>2]=t[E>>2];t[m+4>>2]=t[E+4>>2];t[m+8>>2]=t[E+8>>2];t[m+12>>2]=t[E+12>>2];if(0>1){tX(A);m=Mk(i)|0;a=t[a>>2]|0;s=+c[a+16>>3];o=+c[a+24>>3];t[B>>2]=m;c[B+8>>3]=s;c[B+16>>3]=o;a3(d,90544,B)|0}}r=r+1|0}i=t[Q>>2]|0;r=t[i+12>>2]|0;if(r|0){f=+c[r+24>>3];if(p){l=+c[r+32>>3];t[F>>2]=0;t[F+4>>2]=0;t[F+8>>2]=0;t[F+12>>2]=0;c[v>>3]=f;c[k>>3]=l;l=0.0;s=f}else{l=+c[F>>3];s=+c[v>>3]}o=f-(s-l);f=o*.5;if(o>0.0){c[F>>3]=l-f;c[v>>3]=s+f}}if((A|0)>0)f=+((t[Z+8>>2]|0)>>>0)*.5;else f=0.0;l=+c[F>>3]-f;c[F>>3]=l;s=+c[v>>3]+f;c[v>>3]=s;o=-f-+c[i+56>>3]+ +c[w>>3];c[w>>3]=o;f=+c[i+88>>3]+f+ +c[k>>3];c[k>>3]=f;if(0>1){tX(A);t[L>>2]=Mk(e)|0;c[L+8>>3]=l;c[L+16>>3]=o;c[L+24>>3]=s;c[L+32>>3]=f;a3(d,90556,L)|0}r=0;while(1){if((r|0)>=(G|0))break;i=t[I+(r<<2)>>2]|0;a=i+16|0;if((r|0)<(t[(t[Q>>2]|0)+180>>2]|0)){L=(t[a>>2]|0)+16|0;t[Y>>2]=t[L>>2];t[Y+4>>2]=t[L+4>>2];t[Y+8>>2]=t[L+8>>2];t[Y+12>>2]=t[L+12>>2];t[Y+16>>2]=t[L+16>>2];t[Y+20>>2]=t[L+20>>2];t[Y+24>>2]=t[L+24>>2];t[Y+28>>2]=t[L+28>>2];t[D>>2]=t[L>>2];t[D+4>>2]=t[L+4>>2];t[D+8>>2]=t[L+8>>2];t[D+12>>2]=t[L+12>>2];t[z>>2]=t[F>>2];t[z+4>>2]=t[F+4>>2];t[z+8>>2]=t[F+8>>2];t[z+12>>2]=t[F+12>>2];lX(Y,D,z);t[D>>2]=t[n>>2];t[D+4>>2]=t[n+4>>2];t[D+8>>2]=t[n+8>>2];t[D+12>>2]=t[n+12>>2];t[z>>2]=t[F>>2];t[z+4>>2]=t[F+4>>2];t[z+8>>2]=t[F+8>>2];t[z+12>>2]=t[F+12>>2];lX(M,D,z);t[n>>2]=t[M>>2];t[n+4>>2]=t[M+4>>2];t[n+8>>2]=t[M+8>>2];t[n+12>>2]=t[M+12>>2];L=(t[a>>2]|0)+16|0;t[L>>2]=t[Y>>2];t[L+4>>2]=t[Y+4>>2];t[L+8>>2]=t[Y+8>>2];t[L+12>>2]=t[Y+12>>2];t[L+16>>2]=t[Y+16>>2];t[L+20>>2]=t[Y+20>>2];t[L+24>>2]=t[Y+24>>2];t[L+28>>2]=t[Y+28>>2];if(0>1){tX(A);L=Mk(i)|0;f=+c[Y>>3];l=+c[u>>3];s=+c[n>>3];o=+c[b>>3];t[R>>2]=L;c[R+8>>3]=f;c[R+16>>3]=l;c[R+24>>3]=s;c[R+32>>3]=o;a3(d,90556,R)|0}}else{L=(t[a>>2]|0)+16|0;t[D>>2]=t[L>>2];t[D+4>>2]=t[L+4>>2];t[D+8>>2]=t[L+8>>2];t[D+12>>2]=t[L+12>>2];t[z>>2]=t[F>>2];t[z+4>>2]=t[F+4>>2];t[z+8>>2]=t[F+8>>2];t[z+12>>2]=t[F+12>>2];lX(V,D,z);t[L>>2]=t[V>>2];t[L+4>>2]=t[V+4>>2];t[L+8>>2]=t[V+8>>2];t[L+12>>2]=t[V+12>>2];if(0>1){tX(A);L=Mk(i)|0;Z=t[a>>2]|0;s=+c[Z+16>>3];o=+c[Z+24>>3];t[x>>2]=L;c[x+8>>3]=s;c[x+16>>3]=o;a3(d,90544,x)|0}}r=r+1|0}t[D>>2]=t[v>>2];t[D+4>>2]=t[v+4>>2];t[D+8>>2]=t[v+8>>2];t[D+12>>2]=t[v+12>>2];t[z>>2]=t[F>>2];t[z+4>>2]=t[F+4>>2];t[z+8>>2]=t[F+8>>2];t[z+12>>2]=t[F+12>>2];lX(N,D,z);t[v>>2]=t[N>>2];t[v+4>>2]=t[N+4>>2];t[v+8>>2]=t[N+8>>2];t[v+12>>2]=t[N+12>>2];t[D>>2]=t[F>>2];t[D+4>>2]=t[F+4>>2];t[D+8>>2]=t[F+8>>2];t[D+12>>2]=t[F+12>>2];t[z>>2]=t[F>>2];t[z+4>>2]=t[F+4>>2];t[z+8>>2]=t[F+8>>2];t[z+12>>2]=t[F+12>>2];lX(W,D,z);t[F>>2]=t[W>>2];t[F+4>>2]=t[W+4>>2];t[F+8>>2]=t[W+8>>2];t[F+12>>2]=t[W+12>>2];x=(t[Q>>2]|0)+16|0;t[x>>2]=t[F>>2];t[x+4>>2]=t[F+4>>2];t[x+8>>2]=t[F+8>>2];t[x+12>>2]=t[F+12>>2];t[x+16>>2]=t[F+16>>2];t[x+20>>2]=t[F+20>>2];t[x+24>>2]=t[F+24>>2];t[x+28>>2]=t[F+28>>2];if(0>1){tX(A);x=Mk(e)|0;f=+c[F>>3];l=+c[w>>3];s=+c[v>>3];o=+c[k>>3];t[J>>2]=x;c[J+8>>3]=f;c[J+16>>3]=l;c[J+24>>3]=s;c[J+32>>3]=o;a3(d,90556,J)|0}G2(C);G2(I);G2(g)}h=H;return}function aX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0.0,s=0.0,o=0.0,u=0.0,b=0,w=0.0,k=0.0,d=0,v=0,g=0,m=0;g=h;h=h+80|0;v=g+32|0;f=g+8|0;r=g;d=e+16|0;b=t[d>>2]|0;w=+c[b+16>>3];k=+c[b+24>>3];if(0>1){tX(A);b=t[15712]|0;t[r>>2]=Mk(e)|0;a3(b,90529,r)|0}b=(A|0)!=0;e:do{if(b){r=sd(e)|0;i=t[15712]|0;while(1){if(!r)break e;a=r+16|0;n=t[a>>2]|0;if((t[n+112>>2]|0)==(e|0)?(m=n+16|0,c[m>>3]=+c[m>>3]+w,n=n+24|0,c[n>>3]=+c[n>>3]+k,0>1):0){tX(A);m=Mk(r)|0;n=t[a>>2]|0;o=+c[n+16>>3];u=+c[n+24>>3];t[f>>2]=m;c[f+8>>3]=o;c[f+16>>3]=u;a3(i,90544,f)|0}r=cd(e,r)|0}}else i=t[15712]|0}while(0);f=A+1|0;e=1;while(1){r=t[d>>2]|0;if((e|0)>(t[r+180>>2]|0))break;n=t[(t[r+184>>2]|0)+(e<<2)>>2]|0;if(b){a=n+16|0;r=t[a>>2]|0;l=+c[r+16>>3]+w;s=+c[r+24>>3]+k;o=+c[r+32>>3]+w;u=+c[r+40>>3]+k;if(0>1){tX(A);t[v>>2]=Mk(n)|0;c[v+8>>3]=l;c[v+16>>3]=s;c[v+24>>3]=o;c[v+32>>3]=u;a3(i,90556,v)|0;r=t[a>>2]|0}c[r+16>>3]=l;c[r+24>>3]=s;c[r+32>>3]=o;c[r+40>>3]=u}aX(n,f);e=e+1|0}h=g;return}function tX(e){e=e|0;var A=0;A=t[15712]|0;while(1){if((e|0)<=0)break;Z3(90574,A)|0;e=e+-1|0}return}function nX(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A;c[e+8>>3]=r;return}function fX(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=(+c[r+8>>3]+ +c[A+8>>3])*.5;c[e>>3]=(+c[r>>3]+ +c[A>>3])*.5;c[e+8>>3]=i;return}function lX(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0;i=+c[A+8>>3]-+c[r+8>>3];c[e>>3]=+c[A>>3]-+c[r>>3];c[e+8>>3]=i;return}function sX(e){e=e|0;t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;return}function cX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;n=e+8|0;r=(t[n>>2]|0)+1|0;t[n>>2]=r;i=e+4|0;f=t[i>>2]|0;a=f+10|0;if((r|0)<(f|0))e=t[e>>2]|0;else{t[i>>2]=a;r=AM(t[e>>2]|0,a<<2)|0;t[e>>2]=r;e=r;r=t[n>>2]|0}t[e+(r<<2)>>2]=A;return}function oX(e){e=e|0;var A=0;A=sd(e)|0;while(1){if(!A)break;oJ(A);A=cd(e,A)|0}uX(e);return}function uX(e){e=e|0;var A=0,r=0,i=0;A=e+16|0;e=1;while(1){i=t[A>>2]|0;r=t[i+184>>2]|0;if((e|0)>(t[i+180>>2]|0))break;i=t[r+(e<<2)>>2]|0;SF(t[(t[i+16>>2]|0)+12>>2]|0);uX(i);e=e+1|0}G2(r);return}function bX(e){e=e|0;var A=0,r=0,i=0;_d(e,1,137447,304,1);_x(e)|0;A=KF(((gk(e)|0)<<2)+4|0)|0;i=e+16|0;t[(t[i>>2]|0)+152>>2]=A;A=0;r=sd(e)|0;while(1){if(!r)break;hX(r);t[(t[(t[i>>2]|0)+152>>2]|0)+(A<<2)>>2]=r;t[(t[r+16>>2]|0)+120>>2]=A;A=A+1|0;r=cd(e,r)|0}i=zw(e,2,92493,0)|0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;wX(A,i);A=qw(e,A)|0}r=cd(e,r)|0}kX(e);return}function hX(e){e=e|0;var A=0;Fx(e);A=KF((f[(t[(Bd(e)|0)+16>>2]|0)+176>>1]|0)<<3)|0;t[(t[e+16>>2]|0)+132>>2]=A;WJ(e,t[(t[(Bd(e)|0)+16>>2]|0)+116>>2]&1);return}function wX(e,A){e=e|0;A=A|0;var r=0,i=0.0;Sd(e,137460,176,1)|0;i=+wx(e,t[47174]|0,1.0,0.0);r=e+16|0;c[(t[r>>2]|0)+128>>3]=i;i=+wx(e,A,+c[1371],0.0);c[(t[r>>2]|0)+136>>3]=i;Mx(e)|0;return}function kX(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;d=h;h=h+32|0;k=d+16|0;w=d;o=d+24|0;u=zw(e,1,102623,0)|0;e:do{if(u|0){b=zw(e,1,90660,0)|0;f=e+16|0;l=(b|0)==0;s=t[15712]|0;n=0;while(1){r=t[(t[(t[f>>2]|0)+152>>2]|0)+(n<<2)>>2]|0;if(!r)break e;e=Pw(r,u)|0;do{if(i[e>>0]|0){a=r+16|0;A=t[(t[a>>2]|0)+132>>2]|0;i[o>>0]=0;t[w>>2]=A;t[w+4>>2]=A+8;t[w+8>>2]=o;if((V3(e,101749,w)|0)<=1){t[k>>2]=Mk(r)|0;t[k+4>>2]=e;a3(s,90664,k)|0;break}A:do{if(+c[23293]>0.0){e=0;while(1){if((e|0)==2)break A;v=A+(e<<3)|0;c[v>>3]=+c[v>>3]/+c[23293];e=e+1|0}}}while(0);e=t[a>>2]|0;i[e+119>>0]=1;if((i[o>>0]|0)!=33){if(l)break;if(!((mx(Pw(r,b)|0)|0)<<24>>24))break;e=t[a>>2]|0}i[e+119>>0]=3}}while(0);n=n+1|0}}}while(0);h=d;return}function dX(e){e=e|0;var A=0,r=0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;bJ(A);A=qw(e,A)|0}oJ(r);r=cd(e,r)|0}vX(e);return}function vX(e){e=e|0;gX(e);e=e+16|0;G2(t[(t[e>>2]|0)+152>>2]|0);G2(t[(t[e>>2]|0)+140>>2]|0);return}function gX(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;n=e+16|0;a=1;while(1){i=t[n>>2]|0;A=t[i+184>>2]|0;if((a|0)>(t[i+180>>2]|0))break;i=t[A+(a<<2)>>2]|0;A=i+16|0;SF(t[(t[A>>2]|0)+12>>2]|0);r=t[(t[A>>2]|0)+140>>2]|0;if(r|0){G2(t[r>>2]|0);G2(t[(t[A>>2]|0)+140>>2]|0)}gX(i);a=a+1|0}G2(A);if((yd(e)|0)!=(e|0))Ud(e,137483)|0;return}function mX(e,A){e=e|0;A=A|0;t[A+4>>2]=zw(e,0,90716,0)|0;t[A+8>>2]=zw(e,0,141116,0)|0;t[A+12>>2]=zw(e,0,141048,0)|0;t[A>>2]=e;t[A+16>>2]=0;t[A+36>>2]=cE(e,2,4,A+20|0)|0;return}function pX(e){e=e|0;var A=0,r=0;DJ(e,2);A=KF(56)|0;r=e+16|0;t[(t[r>>2]|0)+140>>2]=A;A=(hx(e,zw(e,0,91374,0)|0,2,2)|0)&65535;A=(A&65535)<10?A:10;a[(t[r>>2]|0)+176>>1]=A;t[47137]=A&65535;EX(e,0,e);jX(e);bX(e);return}function EX(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;o=h;h=h+16|0;s=o;c=(A|0)==0;if(c){BX(s);A=s}n=r+16|0;i=xv(e)|0;while(1){if(!i)break;if(!(y1(Mk(i)|0,108006,7)|0)){Sd(i,137483,280,1)|0;u=KF(56)|0;w=t[i+16>>2]|0;t[w+140>>2]=u;b=t[n>>2]|0;a[w+176>>1]=a[b+176>>1]|0;t[u+44>>2]=(t[(t[b+140>>2]|0)+44>>2]|0)+1;t[u+48>>2]=r;yX(A,i);EX(i,0,i)}else EX(i,A,r);i=Jv(i)|0}if(c?(f=t[s+8>>2]|0,l=e+16|0,t[(t[l>>2]|0)+180>>2]=f,f|0):0){w=AM(t[s>>2]|0,(f<<2)+4|0)|0;t[(t[l>>2]|0)+184>>2]=w}h=o;return}function BX(e){e=e|0;t[e>>2]=0;t[e+4>>2]=0;t[e+8>>2]=0;return}function yX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;n=e+8|0;r=(t[n>>2]|0)+1|0;t[n>>2]=r;i=e+4|0;f=t[i>>2]|0;a=f+10|0;if((r|0)<(f|0))e=t[e>>2]|0;else{t[i>>2]=a;r=AM(t[e>>2]|0,a<<2)|0;t[e>>2]=r;e=r;r=t[n>>2]|0}t[e+(r<<2)>>2]=A;return}function CX(e){e=e|0;var A=0,r=0;A=h;h=h+64|0;r=A;mX(e,r);IX(e,r);ZX(e);GX(e,e);LX(e);h=A;return}function IX(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0.0,m=0.0,p=0,E=0.0,B=0.0;v=h;h=h+64|0;d=v+48|0;r=v+40|0;b=v+56|0;u=v+52|0;o=v;if(0){k=t[15712]|0;t[r>>2]=Mk(e)|0;a3(k,90723,r)|0}r=sd(e)|0;while(1){if(!r)break;t[(t[r+16>>2]|0)+164>>2]=0;r=cd(e,r)|0}w=QX(e,A)|0;k=pq(w,b,u)|0;r=k;while(1){s=r+4|0;a=t[r>>2]|0;if(!a)break;UX(a,o);r=sd(a)|0;while(1){if(!r)break;n=cd(a,r)|0;f=r+16|0;l=t[f>>2]|0;if(t[l+212>>2]|0){p=DX(r,a)|0;IX(p,A);p=t[(t[p+16>>2]|0)+140>>2]|0;m=+c[p+24>>3];l=t[f>>2]|0;c[l+32>>3]=m;g=+c[p+32>>3];c[l+40>>3]=g;m=m*36.0;c[l+88>>3]=m;c[l+96>>3]=m;c[l+80>>3]=g*72.0;r=n;continue}if(t[(t[l+112>>2]|0)+8>>2]|0){r=n;continue}Ed(a,r)|0;r=n}if((gk(a)|0)<=1){r=s;continue}if((t[A>>2]|0)==(e|0))yj(a)|0;nS(a,o);r=s}r=t[b>>2]|0;if((r|0)<=1)if((r|0)==1){Xx(t[k>>2]|0);r=0}else r=0;else{if(!(t[u>>2]|0))a=0;else{a=KF(r)|0;i[a>>0]=1;r=t[b>>2]|0}t[A+40>>2]=a;r=Hp(r,k,0,A+20|0)|0;G2(a)}zX(w,t[b>>2]|0,k,r,e,A);G2(r);a=sd(w)|0;while(1){if(!a)break;n=t[a+16>>2]|0;r=t[n+212>>2]|0;if(!r){r=t[(t[n+112>>2]|0)+8>>2]|0;if(r|0){b=t[n+132>>2]|0;p=t[(t[r+16>>2]|0)+132>>2]|0;c[p>>3]=+c[b>>3];c[p+8>>3]=+c[b+8>>3]}}else{b=t[n+132>>2]|0;B=+c[n+32>>3];E=+c[b>>3]-B*.5;p=t[(t[r+16>>2]|0)+140>>2]|0;c[p+8>>3]=E;g=+c[n+40>>3];m=+c[b+8>>3]-g*.5;c[p+16>>3]=m;c[p+24>>3]=B+E;c[p+32>>3]=g+m}a=cd(w,a)|0}p=(t[(t[e+16>>2]|0)+140>>2]|0)+8|0;b=(t[(t[w+16>>2]|0)+140>>2]|0)+8|0;t[p>>2]=t[b>>2];t[p+4>>2]=t[b+4>>2];t[p+8>>2]=t[b+8>>2];t[p+12>>2]=t[b+12>>2];t[p+16>>2]=t[b+16>>2];t[p+20>>2]=t[b+20>>2];t[p+24>>2]=t[b+24>>2];t[p+28>>2]=t[b+28>>2];WX(w,k);G2(k);if(0){p=t[15712]|0;t[d>>2]=Mk(e)|0;a3(p,90734,d)|0}h=v;return}function ZX(e){e=e|0;var A=0,r=0,a=0.0,n=0.0,f=0.0,l=0.0,s=0;A=sd(e)|0;while(1){if(!A)break;r=t[A+16>>2]|0;if(i[r+118>>0]|0){s=t[(t[(t[r+212>>2]|0)+16>>2]|0)+140>>2]|0;l=+c[s+24>>3]-+c[s+8>>3];f=+c[s+32>>3]-+c[s+16>>3];n=l*36.0;a=f*36.0;s=t[r+132>>2]|0;c[s>>3]=l*.5;c[s+8>>3]=f*.5;c[r+32>>3]=l;c[r+40>>3]=f;c[r+96>>3]=n;c[r+88>>3]=n;c[r+80>>3]=f*72.0;r=t[(t[r+12>>2]|0)+44>>2]|0;c[r>>3]=n;c[r+8>>3]=a;f=-n;c[r+16>>3]=f;c[r+24>>3]=a;c[r+32>>3]=f;a=-a;c[r+40>>3]=a;c[r+48>>3]=n;c[r+56>>3]=a}A=cd(e,A)|0}return}function GX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,n=0.0,f=0,l=0,s=0.0,o=0,u=0.0,b=0,h=0.0,w=0;f=e+16|0;l=t[(t[f>>2]|0)+140>>2]|0;a=+c[l+8>>3];n=+c[l+16>>3];l=(e|0)!=(A|0);e:do{if(l){r=sd(e)|0;while(1){if(!r){e=1;break e}i=t[r+16>>2]|0;if((t[i+212>>2]|0)==(e|0)){i=t[i+132>>2]|0;c[i>>3]=+c[i>>3]+a;i=i+8|0;c[i>>3]=+c[i>>3]+n}r=cd(e,r)|0}}else e=1}while(0);while(1){r=t[f>>2]|0;if((e|0)>(t[r+180>>2]|0))break;r=t[(t[r+184>>2]|0)+(e<<2)>>2]|0;if(l){i=t[(t[r+16>>2]|0)+140>>2]|0;w=i+8|0;b=i+16|0;o=i+24|0;i=i+32|0;h=+c[b>>3]+n;u=+c[o>>3]+a;s=+c[i>>3]+n;c[w>>3]=+c[w>>3]+a;c[b>>3]=h;c[o>>3]=u;c[i>>3]=s}GX(r,A);e=e+1|0}return}function LX(e){e=e|0;var A=0,r=0,i=0.0,a=0.0,n=0.0;A=e+16|0;e=t[A>>2]|0;r=t[e+140>>2]|0;n=+c[r+16>>3]*72.0;a=+c[r+24>>3]*72.0;i=+c[r+32>>3]*72.0;c[e+16>>3]=+c[r+8>>3]*72.0;c[e+24>>3]=n;c[e+32>>3]=a;c[e+40>>3]=i;e=1;while(1){r=t[A>>2]|0;if((e|0)>(t[r+180>>2]|0))break;LX(t[(t[r+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}return}function QX(e,A){e=e|0;A=A|0;var r=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;y=h;h=h+160|0;v=y+24|0;g=y+8|0;n=y;r=y+56|0;E=A+16|0;B=t[E>>2]|0;t[E>>2]=B+1;t[v>>2]=B;T4(r,90796,v)|0;if(0>1){B=t[15712]|0;E=Mk(e)|0;t[n>>2]=r;t[n+4>>2]=E;a3(B,90803,n)|0}i[v>>0]=i[18588]|0;i[v+1>>0]=i[18589]|0;i[v+2>>0]=i[18590]|0;i[v+3>>0]=i[18591]|0;B=hk(91156,v,0)|0;Sd(B,137483,280,1)|0;p=KF(56)|0;E=B+16|0;b=t[E>>2]|0;t[b+140>>2]=p;p=e+16|0;a[b+176>>1]=a[(t[p>>2]|0)+176>>1]|0;RX(e,B,92507);RX(e,B,93112);RX(e,B,91202);b=A+4|0;w=v+16|0;k=v+8|0;d=v+24|0;l=0;u=1;while(1){r=t[p>>2]|0;if((u|0)>(t[r+180>>2]|0))break;t[v>>2]=t[332];t[v+4>>2]=t[333];t[v+8>>2]=t[334];t[v+12>>2]=t[335];t[v+16>>2]=t[336];t[v+20>>2]=t[337];t[v+24>>2]=t[338];t[v+28>>2]=t[339];n=t[(t[r+184>>2]|0)+(u<<2)>>2]|0;VF(n);f=xX(B,Mk(n)|0)|0;s=f+16|0;r=t[s>>2]|0;t[r+212>>2]=n;o=l+1|0;t[r+120>>2]=l;if(t[b>>2]|0)JX(n,f,A,v);r=sd(n)|0;while(1){if(!r)break;t[(t[r+16>>2]|0)+164>>2]=f;r=cd(n,r)|0}r=t[s>>2]|0;if(i[r+119>>0]|0){s=t[r+132>>2]|0;c[s>>3]=(+c[w>>3]+ +c[v>>3])*.5;c[s+8>>3]=(+c[d>>3]+ +c[k>>3])*.5}l=o;u=u+1|0}s=sd(e)|0;while(1){if(!s)break;r=s+16|0;n=t[r>>2]|0;if(!(t[n+164>>2]|0)){f=n+212|0;v=t[f>>2]|0;if(v|0?(v|0)!=(t[(t[(t[p>>2]|0)+140>>2]|0)+48>>2]|0):0){m=18;break}t[f>>2]=e;if(!(i[n+118>>0]|0)){f=xX(B,Mk(s)|0)|0;n=t[r>>2]|0;t[n+164>>2]=f;f=t[f+16>>2]|0;t[f+120>>2]=l;c[f+32>>3]=+c[n+32>>3];c[f+40>>3]=+c[n+40>>3];c[f+88>>3]=+c[n+88>>3];c[f+96>>3]=+c[n+96>>3];c[f+80>>3]=+c[n+80>>3];t[f+8>>2]=t[n+8>>2];t[f+12>>2]=t[n+12>>2];r=i[n+119>>0]|0;if(r<<24>>24){A=t[n+132>>2]|0;v=t[f+132>>2]|0;c[v>>3]=+c[A>>3];c[v+8>>3]=+c[A+8>>3];i[f+119>>0]=r}t[(t[f+112>>2]|0)+8>>2]=s;r=l+1|0}else r=l}else r=l;s=cd(e,s)|0;l=r}if((m|0)==18){A=Mk(s)|0;v=Mk(e)|0;m=Mk(t[(t[r>>2]|0)+212>>2]|0)|0;t[g>>2]=A;t[g+4>>2]=v;t[g+8>>2]=m;nw(1,90826,g)|0;aA(187212,1)}o=sd(e)|0;while(1){if(!o)break;u=t[(t[o+16>>2]|0)+164>>2]|0;b=u+16|0;f=Ow(e,o)|0;while(1){if(!f)break;r=t[(t[(t[((t[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+164>>2]|0;if((r|0)!=(u|0)){if(r>>>0>u>>>0)s=lk(B,u,r,0,1)|0;else s=lk(B,r,u,0,1)|0;Sd(s,137460,176,1)|0;n=t[f+16>>2]|0;m=t[s+16>>2]|0;c[m+136>>3]=+c[n+136>>3];c[m+128>>3]=+c[n+128>>3];r=t[(t[r+16>>2]|0)+112>>2]|0;n=r+4|0;t[n>>2]=(t[n>>2]|0)+1;n=t[(t[b>>2]|0)+112>>2]|0;g=n+4|0;t[g>>2]=(t[g>>2]|0)+1;if(!(t[m+172>>2]|0)){t[r>>2]=(t[r>>2]|0)+1;t[n>>2]=(t[n>>2]|0)+1}HX(s,f)}f=qw(e,f)|0}o=cd(e,o)|0}r=t[(t[p>>2]|0)+140>>2]|0;n=t[r>>2]|0;if(n|0){f=KF((t[r+4>>2]<<4)+16|0)|0;t[t[(t[E>>2]|0)+140>>2]>>2]=f;r=0;while(1){if(!(t[n>>2]|0))break;o=t[(t[(t[n+4>>2]|0)+16>>2]|0)+164>>2]|0;if(o){PX(e,n);u=xX(B,193772)|0;b=u+16|0;t[(t[b>>2]|0)+120>>2]=l;if(u>>>0>o>>>0)s=lk(B,o,u,0,1)|0;else s=lk(B,u,o,0,1)|0;Sd(s,137460,176,1)|0;m=t[n>>2]|0;g=t[m+16>>2]|0;p=t[s+16>>2]|0;c[p+136>>3]=+c[g+136>>3];c[p+128>>3]=+c[g+128>>3];HX(s,m);m=t[(t[b>>2]|0)+112>>2]|0;p=m+4|0;t[p>>2]=(t[p>>2]|0)+1;p=t[(t[o+16>>2]|0)+112>>2]|0;g=p+4|0;t[g>>2]=(t[g>>2]|0)+1;t[m>>2]=(t[m>>2]|0)+1;t[p>>2]=(t[p>>2]|0)+1;t[f+4>>2]=u;c[f+8>>3]=+c[n+8>>3];t[f>>2]=s;r=r+1|0;f=f+16|0;l=l+1|0}n=n+16|0}t[(t[(t[E>>2]|0)+140>>2]|0)+4>>2]=r}h=y;return B|0}function DX(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,n=0,f=0,l=0,s=0,o=0;o=t[e+16>>2]|0;s=t[o+212>>2]|0;o=t[(t[o+112>>2]|0)+4>>2]|0;do{if(o|0){l=KF((o<<4)+16|0)|0;a=MX(e,A)|0;n=a+8|0;A=0;i=a;while(1){if(!(t[i>>2]|0))break;f=i+24|0;if(!(t[f>>2]|0))r=+c[n>>3]+6.283185307179586;else r=+c[i+32>>3];A=VX(e,i,l,A,r)|0;i=f}if((A|0)==(o|0)){e=t[(t[s+16>>2]|0)+140>>2]|0;t[e>>2]=l;t[e+4>>2]=o;G2(a);break}else ge(90742,90752,766,90761)}}while(0);return s|0}function zX(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0.0,l=0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0.0,W=0.0;Z=h;h=h+32|0;B=Z+16|0;I=Z;o=t[n+8>>2]|0;l=t[n+12>>2]|0;y=(t[n>>2]|0)==(a|0);C=(A|0)!=0;e:do{if(C){w=t[(t[r>>2]|0)+16>>2]|0;s=+c[w+16>>3];o=~~(s+(s>=0.0?.5:-.5));t[I>>2]=o;s=+c[w+24>>3];n=~~(s+(s>=0.0?.5:-.5));m=I+4|0;t[m>>2]=n;s=+c[w+32>>3];u=~~(s+(s>=0.0?.5:-.5));p=I+8|0;t[p>>2]=u;s=+c[w+40>>3];w=~~(s+(s>=0.0?.5:-.5));E=I+12|0;t[E>>2]=w;if((A|0)>1){k=t[i>>2]|0;g=t[i+4>>2]|0;o=k+o|0;t[I>>2]=o;A=g+n|0;t[m>>2]=A;u=k+u|0;t[p>>2]=u;k=B+4|0;d=B+8|0;v=B+12|0;b=i;n=r;g=g+w|0;w=A;while(1){n=n+4|0;l=b+8|0;t[E>>2]=g;A=t[n>>2]|0;if(!A){l=0;d=w;v=g;break e}Q=t[A+16>>2]|0;z=+c[Q+16>>3];f=+c[Q+24>>3];s=+c[Q+32>>3];W=+c[Q+40>>3];Q=~~(W+(W>=0.0?.5:-.5));t[v>>2]=Q;A=t[l>>2]|0;D=t[b+12>>2]|0;L=A+~~(z+(z>=0.0?.5:-.5))|0;t[B>>2]=L;G=D+~~(f+(f>=0.0?.5:-.5))|0;t[k>>2]=G;A=A+~~(s+(s>=0.0?.5:-.5))|0;t[d>>2]=A;Q=D+Q|0;t[v>>2]=Q;L=t[((o|0)<(L|0)?I:B)>>2]|0;t[I>>2]=L;G=t[((w|0)<(G|0)?I:B)+4>>2]|0;t[m>>2]=G;A=t[((u|0)>(A|0)?I:B)+8>>2]|0;t[p>>2]=A;b=l;g=t[((g|0)>(Q|0)?I:B)+12>>2]|0;o=L;w=G;u=A}}else{l=0;d=n;v=w}}else{t[I>>2]=0;t[I+4>>2]=0;u=hx(a,o,54,3)|0;t[I+8>>2]=u;v=hx(a,l,36,3)|0;t[I+12>>2]=v;l=1;o=0;d=0}}while(0);A=a+16|0;b=t[A>>2]|0;n=t[b+12>>2]|0;if(n){W=+c[n+24>>3];n=o-u+~~(W+(W>=0.0?.5:-.5))|0;if((n|0)>0){n=n>>>1;o=o-n|0;t[I>>2]=o;u=u+n|0;t[I+8>>2]=u;n=0}else n=0}else n=l;if(y|(n|0)!=0){l=0;n=b}else{l=hx(e,t[47144]|0,8,0)|0;n=t[A>>2]|0}k=l-o|0;w=~~(+c[n+56>>3]+ +(l-d|0));t[I>>2]=0;t[I+4>>2]=0;b=k+l+u|0;t[I+8>>2]=b;A=~~(+c[n+88>>3]+ +(l+w|0)+ +(v|0));t[I+12>>2]=A;e:do{if(C){n=i;A:while(1){u=r+4|0;l=t[r>>2]|0;if(!l)break e;if(!n){o=0;r=k;n=w}else{o=n+8|0;r=(t[n>>2]|0)+k|0;n=(t[n+4>>2]|0)+w|0}s=+(r|0)*.013888888888888888;f=+(n|0)*.013888888888888888;r=sd(l)|0;while(1){if(!r){r=u;n=o;continue A}D=t[(t[r+16>>2]|0)+132>>2]|0;c[D>>3]=+c[D>>3]+s;D=D+8|0;c[D>>3]=+c[D>>3]+f;r=cd(l,r)|0}}}}while(0);D=t[(t[e+16>>2]|0)+140>>2]|0;Q=D+8|0;t[Q>>2]=0;t[Q+4>>2]=0;t[Q+8>>2]=0;t[Q+12>>2]=0;c[D+24>>3]=+(b|0)*.013888888888888888;c[D+32>>3]=+(A|0)*.013888888888888888;h=Z;return}function WX(e,A){e=e|0;A=A|0;var r=0,i=0;while(1){r=t[A>>2]|0;if(!r)break;YX(r);Ud(r,137483)|0;A=A+4|0}A=t[t[(t[e+16>>2]|0)+140>>2]>>2]|0;if(A|0)G2(A);YX(e);Ud(e,137483)|0;r=sd(e)|0;while(1){if(!r)break;i=cd(e,r)|0;A=Ow(e,r)|0;while(1){if(!A)break;G2(t[(t[A+16>>2]|0)+172>>2]|0);Ud(A,137460)|0;A=qw(e,A)|0}FX(r);r=i}vk(e)|0;return}function YX(e){e=e|0;G2(t[(t[e+16>>2]|0)+140>>2]|0);return}function FX(e){e=e|0;var A=0;A=e+16|0;G2(t[(t[A>>2]|0)+112>>2]|0);G2(t[(t[A>>2]|0)+132>>2]|0);Ud(e,137447)|0;return}function MX(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0;s=e+16|0;o=t[t[(t[s>>2]|0)+112>>2]>>2]|0;u=KF((o*24|0)+24|0)|0;f=0;l=ek(A,e)|0;while(1){if(!l)break;a=t[l>>2]&3;i=t[((a|0)==2?l:l+-48|0)+40>>2]|0;if((i|0)==(e|0))i=t[((a|0)==3?l:l+48|0)+40>>2]|0;i=t[(t[i+16>>2]|0)+132>>2]|0;a=t[(t[s>>2]|0)+132>>2]|0;n=+c[i>>3]-+c[a>>3];r=+c[i+8>>3]-+c[a+8>>3];t[u+(f*24|0)>>2]=l;c[u+(f*24|0)+8>>3]=+R(+r,+n);c[u+(f*24|0)+16>>3]=r*r+n*n;f=f+1|0;l=Ak(A,l,e)|0}if((f|0)!=(o|0))ge(90775,90752,642,90784);_4(u,o,24,67);e:do{if((o|0)>1){l=o+-1|0;i=0;A:while(1){if((i|0)>=(l|0))break e;n=+c[u+(i*24|0)+8>>3];a=i+1|0;f=a;while(1){if((f|0)>=(o|0))break;if(!(+c[u+(f*24|0)+8>>3]==n))break;f=f+1|0}if((f|0)==(a|0)){i=a;continue}if((f|0)==(o|0))r=3.141592653589793;else r=+c[u+(f*24|0)+8>>3];r=(r-n)/+(f-i|0);r=r>.03490658503988659?.03490658503988659:r;n=0.0;while(1){if((i|0)>=(f|0))continue A;s=u+(i*24|0)+8|0;c[s>>3]=+c[s>>3]+n;n=n+r;i=i+1|0}}}}while(0);return u|0}function VX(e,A,r,i,n){e=e|0;A=A|0;r=r|0;i=i|0;n=+n;var f=0,l=0,s=0,o=0.0,u=0,b=0,h=0,w=0.0,k=0;s=t[A>>2]|0;b=t[s+16>>2]|0;u=a[b+168>>1]|0;h=u<<16>>16;l=t[s>>2]&3;f=t[((l|0)==2?s:s+-48|0)+40>>2]|0;if((f|0)==(e|0))f=t[((l|0)==3?s:s+48|0)+40>>2]|0;w=+c[A+8>>3];n=(n-w)/+(u<<16>>16);n=n>.03490658503988659?.03490658503988659:n;u=f>>>0>e>>>0;o=u?n:-n;A=u?1:-1;s=0;f=t[b+172>>2]|0;l=u?i:i+-1+h|0;n=u?w:n*+(h+-1|0)+w;while(1){if((s|0)>=(h|0))break;b=t[f>>2]|0;t[r+(l<<4)>>2]=b;u=t[b>>2]&3;k=(u|0)==3?b:b+48|0;t[r+(l<<4)+4>>2]=t[((t[(t[(t[k+40>>2]|0)+16>>2]|0)+164>>2]|0)==(e|0)?k:(u|0)==2?b:b+-48|0)+40>>2];c[r+(l<<4)+8>>3]=n;s=s+1|0;f=f+4|0;l=l+A|0;n=n+o}return h+i|0}function NX(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e+8>>3];i=+c[A+8>>3];if(!(r>i))if(!(r>3];r=+c[A+16>>3];if(i>r)e=1;else e=(i>31}else e=-1;else e=1;return e|0}function RX(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=zw(e,0,r,0)|0;do{if(i|0){e=Pw(e,i)|0;i=zw(A,0,r,0)|0;if(!i){zw(A,0,r,e)|0;break}else{Mw(A,i,e)|0;break}}}while(0);return}function xX(e,A){e=e|0;A=A|0;var r=0,i=0;A=gd(e,A,1)|0;Sd(A,137447,304,1)|0;i=KF(32)|0;r=A+16|0;t[(t[r>>2]|0)+112>>2]=i;e=$F((f[(t[e+16>>2]|0)+176>>1]|0)<<3)|0;t[(t[r>>2]|0)+132>>2]=e;return A|0}function JX(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+80|0;u=k+56|0;o=k+32|0;w=k;b=k+64|0;f=t[r+4>>2]|0;s=Pw(e,f)|0;do{if(i[s>>0]|0){if((t[r>>2]|0)!=(e|0)){r=Pw(Hv(e)|0,f)|0;if((r|0)==(s|0))break;if(!(e1(s,r)|0))break}i[b>>0]=0;r=w+8|0;f=w+16|0;l=w+24|0;t[o>>2]=w;t[o+4>>2]=r;t[o+8>>2]=f;t[o+12>>2]=l;t[o+16>>2]=b;if((V3(s,90937,o)|0)<=3){t[u>>2]=Mk(e)|0;t[u+4>>2]=s;nw(0,90955,u)|0;break}n=+c[23293];if(n>0.0){c[w>>3]=+c[w>>3]/n;c[r>>3]=+c[r>>3]/n;c[f>>3]=+c[f>>3]/n;c[l>>3]=+c[l>>3]/n}r=i[b>>0]|0;if(r<<24>>24==33)i[(t[A+16>>2]|0)+119>>0]=3;else i[(t[A+16>>2]|0)+119>>0]=r<<24>>24==63?2:1;t[a>>2]=t[w>>2];t[a+4>>2]=t[w+4>>2];t[a+8>>2]=t[w+8>>2];t[a+12>>2]=t[w+12>>2];t[a+16>>2]=t[w+16>>2];t[a+20>>2]=t[w+20>>2];t[a+24>>2]=t[w+24>>2];t[a+28>>2]=t[w+28>>2]}}while(0);h=k;return}function HX(e,A){e=e|0;A=A|0;var r=0,i=0,n=0;n=e+16|0;i=t[n>>2]|0;e=a[i+168>>1]|0;i=t[i+172>>2]|0;if(!i){e=e<<16>>16;r=e;e=$F((e<<2)+4|0)|0}else{e=e<<16>>16;r=e;e=AM(i,(e<<2)+4|0)|0}t[e+(r<<2)>>2]=A;A=t[n>>2]|0;t[A+172>>2]=e;A=A+168|0;a[A>>1]=(a[A>>1]|0)+1<<16>>16;return}function PX(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;l=h;h=h+48|0;f=l+24|0;n=l;i=t[A>>2]|0;r=t[i>>2]&3;a=t[((r|0)==2?i:i+-48|0)+40>>2]|0;r=t[((r|0)==3?i:i+48|0)+40>>2]|0;A=U2(Mk(e)|0)|0;s=U2(Mk(a)|0)|0;s=(A+8+s+(U2(Mk(r)|0)|0)|0)>999;A=Mk(e)|0;if(s){r=Mk(r)|0;s=Mk(a)|0;f=(t[i>>2]|0)>>>4;t[n>>2]=A;t[n+4>>2]=r;t[n+8>>2]=s;s=n+16|0;t[s>>2]=f;t[s+4>>2]=0;T4(193772,90895,n)|0}else{r=t[(t[r+16>>2]|0)+120>>2]|0;s=t[(t[a+16>>2]|0)+120>>2]|0;n=(t[i>>2]|0)>>>4;t[f>>2]=A;t[f+4>>2]=r;t[f+8>>2]=s;s=f+16|0;t[s>>2]=n;t[s+4>>2]=0;T4(193772,90914,f)|0}h=l;return}function XX(e){e=e|0;var A=0,r=0,i=0.0,n=0.0,f=0,l=0,s=0;l=4;f=Z2(40)|0;t[f>>2]=0;n=+c[23293];d=0;i=+ee(1,e|0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,f|0,l|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)!=1){c[23293]=i;d=0;oe(102,e|0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,f|0,l|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)!=1){f=G6(187212,1,f|0,l|0)|0;l=G;d=0;r=d;d=0;if((r|0)!=0&(v|0)!=0){A=L6(t[r>>2]|0,f|0,l|0)|0;if(!A)aA(r|0,v|0);G=v}else A=-1;if((A|0)!=1)A=0;else A=G}else A=G}else A=G;while(1){if(A|0)break;d=0;oe(103,e|0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,f|0,l|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;continue}d=0;re(22,e|0)|0;A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,f|0,l|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;continue}if(a[(t[e+16>>2]|0)+136>>1]&14){d=0;oe(104,e|0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,f|0,l|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1){A=G;continue}}d=0;ue(22,e|0,0);A=d;d=0;if((A|0)!=0&(v|0)!=0){r=L6(t[A>>2]|0,f|0,l|0)|0;if(!r)aA(A|0,v|0);G=v}else r=-1;if((r|0)==1)A=G;else{s=12;break}}if((s|0)==12)c[23293]=n;G2(f|0);return}function SX(e){e=e|0;var A=0,r=0,i=0,n=0,f=0,l=0;l=h;h=h+16|0;n=l;r=e+16|0;i=a[(t[r>>2]|0)+136>>1]&14;A=i&65535;if((i&65535)>8){if(i<<16>>16==12){if(FH(e,22,10)|0){t[47134]=2;f=5}}else f=5;do{if((f|0)==5)if(!(a[(t[r>>2]|0)+136>>1]&1)){VH(e,A)|0;break}else{nw(0,90998,n)|0;A=2;break}}while(0);t[47134]=0}if((t[47138]|0)<1)VH(e,A)|0;h=l;return}function jX(e){e=e|0;var A=0.0,r=0.0,i=0;i=h;h=h+16|0;t[46474]=1;t[46475]=1;t[46477]=-1;t[46479]=50;c[23245]=0.0;c[23240]=0.0;c[23241]=1.0;t[46478]=hx(e,zw(e,0,91061,0)|0,600,0)|0;r=+wx(e,zw(e,0,91202,0)|0,.3,0.0);c[23242]=r;c[1371]=r;if(-1.0==-1.0)A=+wx(e,zw(e,0,91069,0)|0,-1.0,0.0);else A=-1.0;c[23243]=A;t[46476]=1;e=AH(e,2,185904)|0;t[46488]=e;if(!e){nw(0,91072,i)|0;t[46476]=2}t[46504]=(P(t[46478]|0,t[46479]|0)|0)/100|0;r=+c[23242];c[23247]=r*r;if(t[46474]|0){A=+c[23245];if(A<=0.0){A=r*3.0;c[23245]=A}c[23246]=A*A}h=i;return}function UX(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,n=0,f=0,l=0;l=h;h=h+16|0;r=l;n=t[t[(t[e+16>>2]|0)+140>>2]>>2]|0;f=TX(e,A)|0;OX(r,e,n);i=+c[r>>3];a=+c[r+8>>3];e:do{if(!(t[46474]|0)){A=0;while(1){if((A|0)>=(t[46505]|0))break e;KX(e,+_X(A),n);A=A+1|0}}else{r=Bq(gk(e)|0)|0;Gq(r,gk(e)|0);A=0;while(1){if((A|0)>=(t[46505]|0))break;qX(e,+_X(A),n,r);A=A+1|0}Qq(r)}}while(0);e:do{if(i!=0.0|a!=0.0){A=sd(e)|0;while(1){if(!A)break e;n=t[(t[A+16>>2]|0)+132>>2]|0;c[n>>3]=+c[n>>3]+i;n=n+8|0;c[n>>3]=+c[n>>3]+a;A=cd(e,A)|0}}}while(0);if(f|0)$X();h=l;return}function TX(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0,n=0,f=0,l=0;if(+c[23243]==-1.0){f=gk(e)|0;r=+c[23242];c[23243]=+c[23241]*.2*r*+D(+ +(f|0));f=1}else{f=0;r=+c[23242]}n=t[46504]|0;c[A+8>>3]=+_X(n);c[A+16>>3]=r;c[A+24>>3]=+c[23240];i=t[46478]|0;e=i-n|0;t[A>>2]=e;a=t[46477]|0;do{if((a|0)>-1){if((a|0)<=(n|0)){t[46505]=a;e=0;l=10;break}if((a|0)<=(i|0)){t[46505]=n;e=a-n|0;l=10}}else{t[46505]=n;l=10}}while(0);if((l|0)==10)t[A+32>>2]=e;return f|0}function OX(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0.0,l=0.0,s=0,o=0.0,u=0.0,b=0,h=0.0,w=0.0,k=0,d=0,v=0.0,g=0.0,m=0,p=0,E=0.0,B=0,y=0,C=0;p=gk(A)|0;B=t[(t[(t[A+16>>2]|0)+140>>2]|0)+4>>2]|0;m=sd(A)|0;k=0;d=0;n=0;s=0;b=0;while(1){if(!m)break;a=t[m+16>>2]|0;if(!(i[a+119>>0]|0))a=d;else{a=t[a+132>>2]|0;f=+c[a>>3];if(!k){s=~~f;n=~~+c[a+8>>3];b=n;a=s}else{w=+(d|0);v=+c[a+8>>3];g=+(n|0);E=+(s|0);h=+(b|0);b=~~(v>h?v:h);a=~~(fE?f:E)}k=k+1|0}m=cd(A,m)|0;d=a}f=+c[23242]*(+D(+ +(p-B|0))+1.0);v=f*.6;c[23249]=v;c[23248]=v;if((k|0)!=1)if((k|0)>1){g=+(s+d|0)*.5;E=+(b+n|0)*.5;h=+(s-d|0);w=h*1.2;o=+(b-n|0);u=o*1.2;f=f*2.4*v;l=u*w/f;do{if(!(l>=1.0)){if(l>0.0){f=+D(+l)*2.0;l=w/f;c[23248]=l;f=u/f;C=20;break}if(w>0.0){l=h*.6;c[23248]=l;f=f/w*.5;C=20;break}if(u>0.0){l=f/u*.5;c[23248]=l;f=o*.6;C=20}else{f=v;l=v}}else{l=h*.6;c[23248]=l;f=o*.6;C=20}}while(0);if((C|0)==20)c[23249]=f;v=+R(+f,+l);l=l/+W(+v);c[23248]=l;f=f/+Y(+v);c[23249]=f}else{g=0.0;E=0.0;l=v;f=v}else{g=+(d|0);E=+(n|0);l=v;f=v}c[23250]=l*l;c[23251]=f*f;if((t[46488]|0)==2)a=t[46476]|0;else{a=D3()|0;a=(nA(0)|0)^a}f8(a);e:do{if(!r){r=sd(A)|0;if(!k)while(1){if(!r)break e;v=+c[23248];v=(+s8()*2.0+-1.0)*v;C=r+16|0;c[t[(t[C>>2]|0)+132>>2]>>3]=v;v=+c[23249];v=(+s8()*2.0+-1.0)*v;c[(t[(t[C>>2]|0)+132>>2]|0)+8>>3]=v;r=cd(A,r)|0}while(1){if(!r)break e;a=r+16|0;n=t[a>>2]|0;if(!(i[n+119>>0]|0)){v=+c[23248];v=(+s8()*2.0+-1.0)*v;c[t[(t[a>>2]|0)+132>>2]>>3]=v;v=+c[23249];v=(+s8()*2.0+-1.0)*v;c[(t[(t[a>>2]|0)+132>>2]|0)+8>>3]=v}else{C=t[n+132>>2]|0;c[C>>3]=+c[C>>3]-g;C=C+8|0;c[C>>3]=+c[C>>3]-E}r=cd(A,r)|0}}else{while(1){if(!(t[r>>2]|0))break;m=r+8|0;v=+W(+ +c[m>>3])*+c[23248]+g;B=t[(t[r+4>>2]|0)+16>>2]|0;p=t[B+132>>2]|0;c[p>>3]=v;c[p+8>>3]=+Y(+ +c[m>>3])*+c[23249]+E;i[B+119>>0]=1;r=r+16|0}o=g*.1;u=E*.1;d=sd(A)|0;while(1){if(!d)break e;k=d+16|0;r=t[k>>2]|0;if(!((t[(t[r+112>>2]|0)+8>>2]|0)==0?!(t[r+212>>2]|0):0))C=32;do{if((C|0)==32){C=0;if(i[r+119>>0]|0){B=t[r+132>>2]|0;c[B>>3]=+c[B>>3]-g;B=B+8|0;c[B>>3]=+c[B>>3]-E;break}b=ek(A,d)|0;r=0;l=0.0;f=0.0;while(1){if(!b)break;s=t[b>>2]&3;a=(s|0)==2?b:b+-48|0;n=t[a+40>>2]|0;s=(s|0)==3?b:b+48|0;do{if((n|0)!=(t[s+40>>2]|0)?(y=t[(t[((n|0)==(d|0)?s:a)+40>>2]|0)+16>>2]|0,(i[y+119>>0]|0)!=0):0)if(!r){B=t[y+132>>2]|0;r=1;l=+c[B>>3];f=+c[B+8>>3];break}else{w=+(r|0);B=t[y+132>>2]|0;r=r+1|0;v=+(r|0);l=(+c[B>>3]+l*w)/v;f=(+c[B+8>>3]+f*w)/v;break}}while(0);b=Ak(A,b,d)|0}do{if((r|0)<=1)if((r|0)==1){a=t[k>>2]|0;r=t[a+132>>2]|0;c[r>>3]=l*.98+o;f=f*.9+u;break}else{f=+s8()*6.283185307179586;v=+s8()*.9;w=v*+c[23248]*+W(+f);a=t[k>>2]|0;r=t[a+132>>2]|0;c[r>>3]=w;f=+c[23249]*v*+Y(+f);break}else{a=t[k>>2]|0;r=t[a+132>>2]|0;c[r>>3]=l}}while(0);c[r+8>>3]=f;i[a+119>>0]=1}}while(0);d=cd(A,d)|0}}}while(0);c[e>>3]=g;c[e+8>>3]=E;return}function _X(e){e=e|0;var A=0;A=t[46478]|0;return+(+c[23243]*+(A-e|0)/+(A|0))}function qX(e,A,r,i){e=e|0;A=+A;r=r|0;i=i|0;var a=0,n=0,f=0,l=0.0;if(!(A<=0.0)){Lq(i);a=sd(e)|0;while(1){if(!a)break;f=t[a+16>>2]|0;n=(t[f+112>>2]|0)+16|0;t[n>>2]=0;t[n+4>>2]=0;t[n+8>>2]=0;t[n+12>>2]=0;f=t[f+132>>2]|0;l=+c[23245];n=~~+L(+(+c[f>>3]/l));zq(i,n,~~+L(+(+c[f+8>>3]/l)),a);a=cd(e,a)|0}n=sd(e)|0;while(1){if(!n)break;a=Ow(e,n)|0;while(1){if(!a)break;f=t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0;if((n|0)!=(f|0))AS(n,f,a);a=qw(e,a)|0}n=cd(e,n)|0}Yq(i,23);rS(e,A,r)}return}function KX(e,A,r){e=e|0;A=+A;r=r|0;var i=0,a=0,n=0;if(!(A<=0.0)){i=sd(e)|0;while(1){if(!i)break;n=(t[(t[i+16>>2]|0)+112>>2]|0)+16|0;t[n>>2]=0;t[n+4>>2]=0;t[n+8>>2]=0;t[n+12>>2]=0;i=cd(e,i)|0}n=sd(e)|0;while(1){if(!n)break;else i=n;while(1){i=cd(e,i)|0;if(!i)break;eS(n,i)}i=Ow(e,n)|0;while(1){if(!i)break;a=t[((t[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0;if((n|0)!=(a|0))AS(n,a,i);i=qw(e,i)|0}n=cd(e,n)|0}rS(e,A,r)}return}function $X(){c[23243]=-1.0;return}function eS(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0;n=t[(t[A+16>>2]|0)+132>>2]|0;a=t[(t[e+16>>2]|0)+132>>2]|0;r=+c[n>>3]-+c[a>>3];i=+c[n+8>>3]-+c[a+8>>3];iS(e,A,r,i,i*i+r*r);return}function AS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0.0,f=0.0,l=0,s=0;l=A+16|0;s=t[(t[l>>2]|0)+132>>2]|0;e=e+16|0;A=t[(t[e>>2]|0)+132>>2]|0;i=+c[s>>3]-+c[A>>3];a=+c[s+8>>3]-+c[A+8>>3];n=i;f=a;i=i*i;a=a*a;while(1){i=i+a;if(!(i==0.0))break;i=+(5-((t8()|0)%10|0)|0);a=+(5-((t8()|0)%10|0)|0);n=i;f=a;i=i*i;a=a*a}a=+D(+i);A=t[r+16>>2]|0;i=+c[A+128>>3];if(!(t[46475]|0))i=i*a/+c[A+136>>3];else i=(a-+c[A+136>>3])*i/a;n=i*n;s=t[(t[l>>2]|0)+112>>2]|0;l=s+16|0;c[l>>3]=+c[l>>3]-n;f=i*f;s=s+24|0;c[s>>3]=+c[s>>3]-f;s=t[(t[e>>2]|0)+112>>2]|0;l=s+16|0;c[l>>3]=+c[l>>3]+n;s=s+24|0;c[s>>3]=+c[s>>3]+f;return}function rS(e,A,r){e=e|0;A=+A;r=r|0;var a=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0,h=0.0;h=A*A;b=(r|0)==0;u=sd(e)|0;while(1){if(!u)break;o=t[u+16>>2]|0;if(!(i[o+119>>0]&2)){s=t[o+112>>2]|0;a=+c[s+16>>3];f=+c[s+24>>3];n=f*f+a*a;if(n>2]|0;l=+c[r>>3]+a;a=+c[r+8>>3]+f}else{n=A/+D(+n);r=t[o+132>>2]|0;l=+c[r>>3]+n*a;a=+c[r+8>>3]+n*f}do{if(!b){n=+D(+(a*a/+c[23251]+l*l/+c[23250]));if((t[s+8>>2]|0)==0?(t[o+212>>2]|0)==0:0){c[r>>3]=l/n;a=a/n;break}if(!(n>=1.0)){c[r>>3]=l;break}else{c[r>>3]=l*.95/n;a=a*.95/n;break}}else c[r>>3]=l}while(0);c[r+8>>3]=a}u=cd(e,u)|0}return}function iS(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=+i;a=+a;var n=0.0,f=0,l=0;n=r;r=a;while(1){if(!(r==0.0))break;r=+(5-((t8()|0)%10|0)|0);i=+(5-((t8()|0)%10|0)|0);n=r;r=i*i+r*r}if(!(t[46475]|0))r=+c[23247]/r;else{a=+D(+r);r=+c[23247]/(a*r)}l=t[e+16>>2]|0;e=t[l+112>>2]|0;if(((t[e+8>>2]|0)==0?(t[l+212>>2]|0)==0:0)?(f=t[A+16>>2]|0,(t[(t[f+112>>2]|0)+8>>2]|0)==0):0)r=(t[f+212>>2]|0)==0?r*10.0:r;a=r*n;l=t[(t[A+16>>2]|0)+112>>2]|0;A=l+16|0;c[A>>3]=+c[A>>3]+a;n=r*i;l=l+24|0;c[l>>3]=+c[l>>3]+n;l=e+16|0;c[l>>3]=+c[l>>3]-a;l=e+24|0;c[l>>3]=+c[l>>3]-n;return}function aS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;a=t[A+8>>2]|0;n=t[A>>2]|0;i=t[A+4>>2]|0;A=a;while(1){if(!A)break;e=a;while(1){if(!e)break;if((A|0)!=(e|0))eS(t[A>>2]|0,t[e>>2]|0);e=t[e+4>>2]|0}A=t[A+4>>2]|0}f=n+-1|0;e=i+-1|0;tS(r,f,e,a);tS(r,f,i,a);A=i+1|0;tS(r,f,A,a);tS(r,n,e,a);tS(r,n,A,a);n=n+1|0;tS(r,n,e,a);tS(r,n,i,a);tS(r,n,A,a);return 0}function tS(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0.0,f=0.0,l=0,s=0,o=0,u=0;e=Fq(e,A,r)|0;if((i|0)!=0&(e|0)!=0){s=e+8|0;do{r=t[i>>2]|0;l=r+16|0;e=s;while(1){e=t[e>>2]|0;if(!e)break;A=t[e>>2]|0;u=t[(t[A+16>>2]|0)+132>>2]|0;o=t[(t[l>>2]|0)+132>>2]|0;a=+c[u>>3]-+c[o>>3];n=+c[u+8>>3]-+c[o+8>>3];f=n*n+a*a;if(f<+c[23246])iS(r,A,a,n,f);e=e+4|0}i=t[i+4>>2]|0}while((i|0)!=0)}return}function nS(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;f=h;h=h+16|0;n=f;r=Hw(e,92507)|0;if(0)G3(91116,8,1,t[15712]|0)|0;if(!((r|0)!=0?(i[r>>0]|0)!=0:0))r=91125;a=C1(r,58)|0;do{if(!a)a=0;else{if((a|0)!=(r|0)?((i[r>>0]|0)+-48|0)>>>0>=10:0){a=0;break}l=K3(r)|0;r=a+1|0;a=(l|0)>0?l:0}}while(0);if(0){l=t[15712]|0;t[n>>2]=a;t[n+4>>2]=r;a3(l,91133,n)|0}if(!((a|0)!=0?!(fS(e,A,a)|0):0))eU(e,r)|0;h=f;return}function fS(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0.0,d=0,v=0,g=0;g=h;h=h+64|0;d=g;f=g+40|0;v=gk(e)|0;l=mk(e)|0;Kj(f,e);t[46842]=t[f>>2];t[46843]=t[f+4>>2];t[46844]=t[f+8>>2];if(i[187376]|0){s[46842]=+s[46842]*.013888888888888888;s[46843]=+s[46843]*.013888888888888888}a=lS(e)|0;e:do{if(!a)a=0;else{f=d;n=f+40|0;do{t[f>>2]=t[A>>2];f=f+4|0;A=A+4|0}while((f|0)<(n|0));f=d+16|0;k=+c[f>>3];b=+(l|0)*2.0;w=1.0/+(P(v+-1|0,v)|0);n=0;u=k;while(1){if(!((a|0)!=0&(n|0)<(r|0)))break e;sS(v,d);o=+c[23253]*+c[170];c[23254]=o;c[23255]=b*o*w;A=0;while(1){if((A|0)>=(t[46512]|0))break;o=+cS(A);if(o<=0.0)break;a=oS(e,o)|0;if(!a){a=0;break}else A=A+1|0}o=u+k;c[f>>3]=o;n=n+1|0;u=o}}}while(0);h=g;return a|0}function lS(e){e=e|0;var A=0,r=0,i=0,a=0;A=0;a=sd(e)|0;while(1){if(!a)break;else i=a;while(1){r=cd(e,i)|0;if(!r)break;i=r;A=(hS(a,r)|0)+A|0}a=cd(e,a)|0}return A|0}function sS(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0;i=+c[A+16>>3];c[171]=i;t[344]=t[A>>2];a=+c[A+8>>3];c[23257]=a;t[46512]=t[A+32>>2];r=+c[A+24>>3];if(r>0.0)c[170]=r;c[23253]=i*i;if(a==0.0)c[23257]=+D(+ +(e|0))*.2*i;return}function cS(e){e=e|0;var A=0;A=t[344]|0;return+(+c[23257]*+(A-e|0)/+(A|0))}function oS(e,A){e=e|0;A=+A;var r=0,a=0,n=0,f=0.0,l=0,s=0.0,o=0.0,u=0.0;r=sd(e)|0;while(1){if(!r)break;l=(t[(t[r+16>>2]|0)+112>>2]|0)+16|0;t[l>>2]=0;t[l+4>>2]=0;t[l+8>>2]=0;t[l+12>>2]=0;r=cd(e,r)|0}r=0;l=sd(e)|0;while(1){if(!l)break;else n=l;while(1){a=cd(e,n)|0;if(!a)break;n=a;r=(uS(l,a)|0)+r|0}a=Ow(e,l)|0;while(1){if(!a)break;bS(l,t[((t[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0);a=qw(e,a)|0}l=cd(e,l)|0}e:do{if(!r)r=0;else{u=A*A;n=sd(e)|0;while(1){if(!n)break e;a=t[n+16>>2]|0;if((i[a+119>>0]|0)!=3){l=t[a+112>>2]|0;s=+c[l+16>>3];f=+c[l+24>>3];o=f*f+s*s;if(o>2]|0;c[a>>3]=+c[a>>3]+s}else{o=+D(+o);a=t[a+132>>2]|0;c[a>>3]=+c[a>>3]+s*A/o;f=f*A/o}l=a+8|0;c[l>>3]=+c[l>>3]+f}n=cd(e,n)|0}}}while(0);return r|0}function uS(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0;n=t[(t[A+16>>2]|0)+132>>2]|0;a=t[(t[e+16>>2]|0)+132>>2]|0;r=+c[n>>3]-+c[a>>3];i=+c[n+8>>3]-+c[a+8>>3];return kS(e,A,r,i,i*i+r*r)|0}function bS(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0,n=0.0,f=0,l=0.0,s=0.0,o=0,u=0;if(!(hS(e,A)|0)){f=t[A+16>>2]|0;u=t[f+132>>2]|0;a=t[e+16>>2]|0;o=t[a+132>>2]|0;i=+c[u>>3]-+c[o>>3];r=+c[u+8>>3]-+c[o+8>>3];n=+D(+(r*r+i*i));l=+wS(e);l=+wS(A)+l;s=n-l;n=s*s/((+c[171]+l)*n);i=n*i;A=t[f+112>>2]|0;e=A+16|0;c[e>>3]=+c[e>>3]-i;r=n*r;A=A+24|0;c[A>>3]=+c[A>>3]-r;A=t[a+112>>2]|0;e=A+16|0;c[e>>3]=+c[e>>3]+i;A=A+24|0;c[A>>3]=+c[A>>3]+r}return}function hS(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0.0,f=0.0,l=0,o=0;l=t[A+16>>2]|0;o=t[l+132>>2]|0;A=t[e+16>>2]|0;e=t[A+132>>2]|0;n=+c[o>>3]-+c[e>>3];f=+c[o+8>>3]-+c[e+8>>3];f=f<0.0?-f:f;e=(i[187376]|0)==0;r=+c[A+32>>3];if(e){a=+s[46842];r=r*.5*a;a=+c[l+32>>3]*.5*a}else{a=+s[46842];r=r*.5+a;a=+c[l+32>>3]*.5+a}if(!((n<0.0?-n:n)<=a+r))A=0;else{r=+c[A+40>>3];if(e){n=+s[46843];a=r*.5*n;r=+c[l+40>>3]*.5*n}else{n=+s[46843];a=r*.5+n;r=+c[l+40>>3]*.5+n}A=f<=r+a&1}return A|0}function wS(e){e=e|0;var A=0.0,r=0.0;e=t[e+16>>2]|0;A=+c[e+32>>3];if(!(i[187376]|0)){r=A*.5*+s[46842];A=+c[e+40>>3]*.5*+s[46843]}else{r=A*.5+ +s[46842];A=+c[e+40>>3]*.5+ +s[46843]}return+ +D(+(A*A+r*r))}function kS(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=+i;a=+a;var n=0,f=0;while(1){if(!(a==0.0))break;a=+(5-((t8()|0)%10|0)|0);i=+(5-((t8()|0)%10|0)|0);r=a;a=i*i+a*a}n=hS(e,A)|0;a=((n|0)==0?+c[23255]:+c[23254])/a;r=a*r;A=t[(t[A+16>>2]|0)+112>>2]|0;f=A+16|0;c[f>>3]=+c[f>>3]+r;a=a*i;A=A+24|0;c[A>>3]=+c[A>>3]+a;A=t[(t[e+16>>2]|0)+112>>2]|0;e=A+16|0;c[e>>3]=+c[e>>3]-r;A=A+24|0;c[A>>3]=+c[A>>3]-a;return n|0}function dS(e){e=e|0;DJ(e,2);a[(t[e+16>>2]|0)+176>>1]=2;t[47137]=2;vS(e);return}function vS(e){e=e|0;var A=0,r=0,i=0,a=0;i=KF((gk(e)|0)<<2)|0;A=KF(((gk(e)|0)<<2)+4|0)|0;a=e+16|0;t[(t[a>>2]|0)+152>>2]=A;A=sd(e)|0;r=0;while(1){if(!A)break;xJ(A);t[(t[A+16>>2]|0)+112>>2]=i+(r<<2);t[(t[(t[a>>2]|0)+152>>2]|0)+(r<<2)>>2]=A;A=cd(e,A)|0;r=r+1|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;gS(A);A=qw(e,A)|0}r=cd(e,r)|0}return}function gS(e){e=e|0;var A=0.0;Sd(e,137460,176,1)|0;Mx(e)|0;A=+wx(e,t[47174]|0,1.0,0.0);c[(t[e+16>>2]|0)+128>>3]=A;return}function mS(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+16|0;o=u+4|0;c=u;i[o>>0]=i[18596]|0;i[o+1>>0]=i[18597]|0;i[o+2>>0]=i[18598]|0;i[o+3>>0]=i[18599]|0;o=hk(91156,o,0)|0;Sd(o,91164,280,1)|0;t[(t[e+16>>2]|0)+140>>2]=o;r=sd(e)|0;while(1){if(!r)break;a=r+16|0;if(!(t[t[(t[a>>2]|0)+112>>2]>>2]|0)){s=pS(o,Mk(r)|0,r)|0;t[t[(t[a>>2]|0)+112>>2]>>2]=s}r=cd(e,r)|0}a=sd(e)|0;while(1){if(!a)break;r=Ow(e,a)|0;while(1){if(!r)break;f=t[r>>2]&3;n=t[t[(t[(t[((f|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;f=t[t[(t[(t[((f|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((n|0)!=(f|0))Sd(lk(o,n,f,0,1)|0,137460,176,1)|0;r=qw(e,r)|0}a=cd(e,a)|0}s=Lp(o,c,0)|0;a=0;while(1){if((a|0)>=(t[c>>2]|0))break;f=t[s+(a<<2)>>2]|0;r=sd(f)|0;while(1){if(!r)break;n=Ow(e,t[t[(t[r+16>>2]|0)+112>>2]>>2]|0)|0;while(1){if(!n)break;l=t[t[(t[(t[((t[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((r|0)!=(l|0)){l=lk(o,r,l,0,1)|0;Sd(l,137460,176,1)|0;uk(f,l,1)|0}n=qw(e,n)|0}r=cd(f,r)|0}a=a+1|0}r=sd(o)|0;while(1){if(!r)break;a=Ow(o,r)|0;while(1){if(!a)break;e=KF(8)|0;t[(t[a+16>>2]|0)+120>>2]=e;a=qw(o,a)|0}r=cd(o,r)|0}t[A>>2]=t[c>>2];h=u;return s|0}function pS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;A=gd(e,A,1)|0;Sd(A,137447,304,1)|0;i=KF(40)|0;e=A+16|0;t[(t[e>>2]|0)+112>>2]=i;i=KF(t[47137]<<3)|0;e=t[e>>2]|0;t[e+132>>2]=i;i=t[r+16>>2]|0;c[e+88>>3]=+c[i+88>>3];c[e+96>>3]=+c[i+96>>3];c[e+80>>3]=+c[i+80>>3];t[t[e+112>>2]>>2]=r;return A|0}function ES(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;f=h;h=h+48|0;A=f+32|0;i=f;if(gk(e)|0){n=mS(e,A)|0;a=t[A>>2]|0;A=t[n>>2]|0;if((a|0)==1){Au(A,e);BS(t[n>>2]|0);AU(e)|0}else{r=t[A+60>>2]|0;cE(e,2,8,i)|0;A=0;while(1){if((A|0)>=(a|0))break;l=t[n+(A<<2)>>2]|0;Au(l,e);AU(l)|0;A=A+1|0}sE(a,n,r,i)|0;A=0;while(1){if((A|0)>=(a|0))break;BS(t[n+(A<<2)>>2]|0);A=A+1|0}}G2(n)}h=f;return}function BS(e){e=e|0;var A=0,r=0,i=0;A=sd(e)|0;while(1){if(!A)break;r=t[A+16>>2]|0;i=t[r+132>>2]|0;r=t[(t[(t[t[r+112>>2]>>2]|0)+16>>2]|0)+132>>2]|0;c[r>>3]=+c[i>>3];c[r+8>>3]=+c[i+8>>3];A=cd(e,A)|0}return}function yS(e){e=e|0;if(gk(e)|0){dS(e);ES(e);G2(t[(t[(sd(e)|0)+16>>2]|0)+112>>2]|0);TH(e);MV(e)}return}function CS(e){e=e|0;var A=0,r=0,i=0;A=sd(e)|0;if(A|0){i=e+16|0;IS(t[(t[i>>2]|0)+140>>2]|0);while(1){if(!A)break;r=Ow(e,A)|0;while(1){if(!r)break;bJ(r);r=qw(e,r)|0}oJ(A);A=cd(e,A)|0}G2(t[(t[i>>2]|0)+152>>2]|0);if((yd(e)|0)!=(e|0))qd(e,0,137483)}return}function IS(e){e=e|0;var A=0,r=0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;G2(t[(t[A+16>>2]|0)+120>>2]|0);A=qw(e,A)|0}A=r+16|0;G2(t[(t[A>>2]|0)+112>>2]|0);G2(t[(t[A>>2]|0)+132>>2]|0);r=cd(e,r)|0}vk(e)|0;return}function ZS(e){e=e|0;var A=0,r=0.0,a=0.0,n=0,f=0,l=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+112|0;o=v+40|0;u=v+16|0;d=v+100|0;b=v;f=v+88|0;w=v+56|0;GS(e);n=(t[47137]|0)==2;A=n&1;if(gk(e)|0){k=VS()|0;LS(e,k);Ij(e,u,0)|0;if(n&(t[u>>2]|0)==18){t[k+124>>2]=t[u+8>>2];c[k+144>>3]=+c[u+16>>3];Kj(f,e);if(!(i[f+8>>0]|0)){a=.05555555555555555;r=.05555555555555555}else{a=+s[f+4>>2]*.013888888888888888;r=+s[f>>2]*.013888888888888888}c[b>>3]=r;c[b+8>>3]=a;A=0}else t[k+124>>2]=-1;if(0)RS(k);l=Lp(e,d,0)|0;if((t[d>>2]|0)==1){t[o>>2]=t[b>>2];t[o+4>>2]=t[b+4>>2];t[o+8>>2]=t[b+8>>2];t[o+12>>2]=t[b+12>>2];QS(e,k,o);if(A|0)Lj(e,u)|0;TH(e);A=0}else{cE(e,2,8,w)|0;t[w+12>>2]=1;f=(A|0)==0;n=0;while(1){A=t[d>>2]|0;if((n|0)>=(A|0))break;A=t[l+(n<<2)>>2]|0;Mp(A)|0;t[o>>2]=t[b>>2];t[o+4>>2]=t[b+4>>2];t[o+8>>2]=t[b+8>>2];t[o+12>>2]=t[b+12>>2];QS(A,k,o);if(!f)Lj(A,u)|0;DJ(A,2);TH(A);n=n+1|0}sE(A,l,e,w)|0;A=0}while(1){if((A|0)>=(t[d>>2]|0))break;Ed(e,t[l+(A<<2)>>2]|0)|0;A=A+1|0}G2(l);NS(k)}MV(e);h=v;return}function GS(e){e=e|0;var A=0,r=0;DJ(e,2);A=hx(e,zw(e,0,91368,0)|0,2,2)|0;r=(hx(e,zw(e,0,91374,0)|0,A,2)|0)&65535;a[(t[(yd(e)|0)+16>>2]|0)+176>>1]=r;if((f[(t[(yd(e)|0)+16>>2]|0)+176>>1]|0)<10)r=a[(t[(yd(e)|0)+16>>2]|0)+176>>1]|0;else r=10;a[(t[(yd(e)|0)+16>>2]|0)+176>>1]=r;r=r&65535;t[47137]=r;a[(t[(yd(e)|0)+16>>2]|0)+178>>1]=(A|0)<(r|0)?A:r;YS(e);return}function LS(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+16|0;a=n+8|0;r=n+12|0;i=A+108|0;t[r>>2]=t[i>>2];if((AH(e,2,r)|0)!=2)nw(0,91169,n)|0;t[i>>2]=t[r>>2];c[A+24>>3]=+wx(e,zw(e,0,91202,0)|0,-1.0,0.0);c[A>>3]=-+wx(e,zw(e,0,91204,0)|0,1.0001234,0.0);t[A+40>>2]=hx(e,zw(e,0,91219,0)|0,2147483647,0)|0;t[A+120>>2]=zS(e,zw(e,0,91226,0)|0)|0;t[A+132>>2]=WS(e,zw(e,0,91236,0)|0)|0;t[A+136>>2]=0;t[A+112>>2]=(px(Hw(e,91245)|0,0)|0)&255;t[A+128>>2]=(px(Hw(e,91254)|0,1)|0)&255;c[A+152>>3]=+wx(e,zw(e,0,91269,0)|0,0.0,-1797693134862315708145274.0e284);r=hx(e,zw(e,0,91278,0)|0,0,0)|0;e=A+160|0;t[e>>2]=r;if((r|0)>4){t[a>>2]=r;nw(0,91291,a)|0;t[e>>2]=0}h=n;return}function QS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+48|0;a=k;u=k+32|0;l=k+28|0;n=k+24|0;w=k+20|0;b=k+16|0;t[n>>2]=0;t[w>>2]=0;t[b>>2]=0;f=A+136|0;i=t[47137]|0;if((t[f>>2]|0)==1)o=Bj(e,i,b)|0;else o=Bj(e,i,0)|0;do{if((t[A+124>>2]|0)>-1)if((t[A+160>>2]|0)>0){t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];s=Ej(e,a,n,w)|0;break}else{t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];s=Ej(e,a,0,0)|0;break}else s=0}while(0);i=DS(e)|0;t[u>>2]=i;switch(t[f>>2]|0){case 1:case 0:{sj(t[47137]|0,o,t[b>>2]|0,A,0,s,i,t[n>>2]|0,t[w>>2]|0,l);break}case 5:{pj(t[47137]|0,o,i,l);break}case 4:{i=t[b>>2]|0;if(!i)i=Ho(o)|0;else i=bK(i,0)|0;t[b>>2]=i;kj(t[47137]|0,o,i,u,1,200,.001,l);break}default:{}}i=sd(e)|0;while(1){if(!i)break;r=t[47137]|0;n=t[i+16>>2]|0;A=(t[u>>2]|0)+((P(t[n+120>>2]|0,r)|0)<<3)|0;n=n+132|0;a=0;while(1){if((a|0)>=(r|0))break;c[(t[n>>2]|0)+(a<<3)>>3]=+c[A+(a<<3)>>3];a=a+1|0}i=cd(e,i)|0}G2(s);G2(t[u>>2]|0);iK(o);i=t[b>>2]|0;if(i|0)iK(i);i=t[w>>2]|0;if(i|0)G2(i);h=k;return}function DS(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0;l=t[47137]|0;l=KF(P(l<<3,gk(e)|0)|0)|0;e:do{if(zw(e,1,102623,0)|0){a=sd(e)|0;while(1){if(!a)break e;A=t[a+16>>2]|0;A:do{if(i[A+119>>0]|0){n=t[47137]|0;f=P(n,t[A+120>>2]|0)|0;r=A+132|0;A=0;while(1){if((A|0)>=(n|0))break A;c[l+(f+A<<3)>>3]=+c[(t[r>>2]|0)+(A<<3)>>3];A=A+1|0}}}while(0);a=cd(e,a)|0}}}while(0);return l|0}function zS(e,A){e=e|0;A=A|0;do{if(A){e=Pw(e,A)|0;A=i[e>>0]|0;if((A+-48|0)>>>0<10){e=K3(e)|0;e=(e|0)<5?e:0;break}if(V1(A)|0)if(N1(e,91330)|0)if(N1(e,91339)|0)if(N1(e,135709)|0)if(!(N1(e,91350)|0))e=3;else{e=(N1(e,91361)|0)==0;e=e?4:0}else e=0;else e=1;else e=2;else e=0}else e=0}while(0);return e|0}function WS(e,A){e=e|0;A=A|0;do{if(A){e=Pw(e,A)|0;A=i[e>>0]|0;if((A+-48|0)>>>0<10){e=K3(e)|0;e=e>>>0<3?e:1;break}if(V1(A)|0)if((N1(e,135709)|0)!=0?(N1(e,137308)|0)!=0:0)if(((N1(e,99730)|0)!=0?(N1(e,107652)|0)!=0:0)?(N1(e,107657)|0)!=0:0){e=(N1(e,91325)|0)==0;e=e?2:1}else e=1;else e=0;else e=1}else e=1}while(0);return e|0}function YS(e){e=e|0;var A=0,r=0;A=sd(e)|0;while(1){if(!A)break;xJ(A);A=cd(e,A)|0}r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;FS(A);A=qw(e,A)|0}r=cd(e,r)|0}return}function FS(e){e=e|0;Sd(e,137460,176,1)|0;Mx(e)|0;return}function MS(e){e=e|0;var A=0,r=0;r=sd(e)|0;while(1){if(!r)break;A=Ow(e,r)|0;while(1){if(!A)break;bJ(A);A=qw(e,A)|0}oJ(r);r=cd(e,r)|0}return}function VS(){var e=0,A=0;e=$F(168)|0;c[e>>3]=-1.0001234;c[e+8>>3]=1.0;t[e+16>>2]=1;c[e+24>>3]=-1.0;c[e+32>>3]=.2;t[e+40>>2]=0;t[e+44>>2]=4;t[e+48>>2]=1;t[e+52>>2]=45;t[e+56>>2]=10;c[e+64>>3]=.6;c[e+72>>3]=.001;t[e+80>>2]=500;c[e+88>>3]=.9;c[e+96>>3]=.1;t[e+104>>2]=1;t[e+108>>2]=123;A=e+112|0;t[A>>2]=0;t[A+4>>2]=0;t[A+8>>2]=0;t[A+12>>2]=0;t[e+128>>2]=1;t[e+132>>2]=3;t[e+136>>2]=0;c[e+144>>3]=-4.0;c[e+152>>3]=0.0;t[e+160>>2]=0;return e|0}function NS(e){e=e|0;G2(e);return}function RS(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0;A=h;h=h+176|0;r=A+160|0;a=A+152|0;n=A+128|0;s=A+112|0;l=A+88|0;o=A+64|0;u=A+56|0;b=A+40|0;k=A+24|0;w=A+16|0;d=A;i=t[15712]|0;G3(91378,27,1,i)|0;f=+c[e+8>>3];c[d>>3]=+c[e>>3];c[d+8>>3]=f;a3(i,91406,d)|0;d=t[e+108>>2]|0;t[w>>2]=t[e+16>>2];t[w+4>>2]=d;a3(i,91457,w)|0;f=+c[e+32>>3];c[k>>3]=+c[e+24>>3];c[k+8>>3]=f;a3(i,91484,k)|0;k=t[e+44>>2]|0;w=t[e+48>>2]|0;t[b>>2]=t[e+40>>2];t[b+4>>2]=k;t[b+8>>2]=w;a3(i,91507,b)|0;b=t[e+56>>2]|0;t[u>>2]=t[e+52>>2];t[u+4>>2]=b;a3(i,91558,u)|0;f=+c[e+72>>3];u=t[e+80>>2]|0;c[o>>3]=+c[e+64>>3];c[o+8>>3]=f;t[o+16>>2]=u;a3(i,91591,o)|0;f=+c[e+96>>3];o=t[e+104>>2]|0;c[l>>3]=+c[e+88>>3];c[l+8>>3]=f;t[l+16>>2]=o;a3(i,91649,l)|0;l=t[e+116>>2]|0;f=+c[e+152>>3];t[s>>2]=t[e+112>>2];t[s+4>>2]=l;c[s+8>>3]=f;a3(i,91695,s)|0;s=t[e+124>>2]|0;l=t[e+128>>2]|0;f=+c[e+144>>3];t[n>>2]=t[17804+(t[e+120>>2]<<2)>>2];t[n+4>>2]=s;t[n+8>>2]=l;c[n+16>>3]=f;a3(i,91748,n)|0;n=t[17848+(t[e+136>>2]<<2)>>2]|0;t[a>>2]=t[17832+(t[e+132>>2]<<2)>>2];t[a+4>>2]=n;a3(i,91813,a)|0;t[r>>2]=t[e+160>>2];a3(i,91843,r)|0;h=A;return}function xS(e){e=e|0;G2(e);return}function JS(e){e=e|0;var A=0;A=$F(184)|0;t[A>>2]=e;t[A+176>>2]=0;return A|0}function HS(e,A){e=e|0;A=+A;var r=0,i=0,a=0;i=t[e>>2]|0;c[e+8+(i<<3)>>3]=A;a=e+176|0;e:do{switch(t[a>>2]|0){case 0:{r=t[e>>2]|0;if((r|0)==20){t[a>>2]=-1;r=19}else{t[a>>2]=1;r=(r|0)>19?20:r+1|0}t[e>>2]=r;break}case 1:{r=t[e>>2]|0;if((r|0)<20?+c[e+8+(i+-1<<3)>>3]>A:0){t[e>>2]=r+1;break e}else{t[e>>2]=r+-1;t[a>>2]=-1;break e}}default:{r=t[e>>2]|0;if((r|0)>0?+c[e+8+(i+1<<3)>>3]>A:0){t[e>>2]=r+-1;break e}else{t[e>>2]=r+1;t[a>>2]=1;break e}}}}while(0);return}function PS(e){e=e|0;return t[e>>2]|0}function XS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0.0;h=t[e+20>>2]|0;w=t[e+24>>2]|0;u=t[e>>2]|0;b=t[h+(u<<2)>>2]|0;if(!b)i=1.0;else{e=0;i=0.0;e:while(1){if((e|0)>=(u|0))break;l=e+1|0;s=t[h+(l<<2)>>2]|0;o=P(e,A)|0;f=t[h+(e<<2)>>2]|0;while(1){if((f|0)>=(s|0)){e=l;continue e}n=w+(f<<2)|0;e=0;a=0.0;while(1){if((e|0)>=(A|0))break;k=+c[r+(e+o<<3)>>3]-+c[r+((P(t[n>>2]|0,A)|0)<<3)>>3];e=e+1|0;a=k*k+a}f=f+1|0;i=+D(+a)+i}}i=i/+(b|0)}return+i}function SS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=A+10|0;if((t[r>>2]|0)<=(A|0)){t[r>>2]=i;t[e>>2]=AM(t[e>>2]|0,i<<3)|0}return}function jS(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=A+10|0;if((t[r>>2]|0)<=(A|0)){t[r>>2]=i;t[e>>2]=AM(t[e>>2]|0,i<<2)|0}return}function US(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,t=0.0,n=0.0,f=0,l=0,s=0;s=h;h=h+16|0;l=s;f=P(i,A)|0;A=P(r,A)|0;i=0;while(1){if((i|0)==2)break;c[l+(i<<3)>>3]=+c[e+(i+f<<3)>>3]-+c[e+(i+A<<3)>>3];i=i+1|0}n=+c[l>>3];t=+c[l+8>>3];do{if(!((n>=0.0?n:-n)<=(t>=0.0?t:-t)*1.0e-05)){a=+N(+(t/n));if(n>0.0){if(!(t<0.0))break;a=a+6.283185307179586;break}else{if(!(n<0.0))break;a=a+3.141592653589793;break}}else a=t>0.0?1.5707963267948966:4.71238898038469}while(0);h=s;return+a}function TS(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;i=+c[e>>3];r=+c[A>>3];return(i>r?1:(i>31)|0}function OS(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0.0,s=0,o=0,u=0.0,b=0,w=0.0,k=0.0,d=0,v=0,g=0,m=0,p=0.0,E=0,B=0,y=0,C=0.0,I=0.0,Z=0,G=0,L=0,Q=0,W=0,Y=0,F=0,M=0,V=0,N=0.0,R=0,x=0,J=0,H=0.0,X=0,S=0.0,j=0,U=0,T=0,O=0,_=0,q=0,K=0,$=0,ee=0.0;K=h;h=h+80|0;q=K+32|0;_=K;w=+c[r>>3];o=r+24|0;u=+c[o>>3];b=r+32|0;l=+c[b>>3];H=+c[r+72>>3];X=t[r+80>>2]|0;S=+c[r+88>>3];k=+c[r+96>>3];j=t[r+104>>2]|0;U=r+56|0;f=t[U>>2]|0;do{if(!((A|0)==0|(X|0)<1)?(T=t[A+4>>2]|0,!((e|0)<1|(T|0)<1)):0){J=t[A>>2]|0;O=JS(f)|0;t[n>>2]=0;if((J|0)!=(T|0)){t[n>>2]=-100;xS(O);t[U>>2]=f;break}R=lK(A,1)|0;x=t[R+20>>2]|0;J=t[R+24>>2]|0;e:do{if(t[r+16>>2]|0){a8(t[r+108>>2]|0);s=P(T,e)|0;f=0;while(1){if((f|0)>=(s|0))break e;c[a+(f<<3)>>3]=+Xo();f=f+1|0}}}while(0);if(u<0.0){u=+XS(R,e,a);c[o>>3]=u}if(l<0.0){c[b>>3]=.2;l=.2}if(w>=0.0){c[r>>3]=-1.0;w=-1.0}N=+z(+u,+(1.0-w));I=+z(+l,+((2.0-w)*.3333333333333333))/u;Z=P(T,e<<3)|0;G=$F(Z)|0;L=$F(Z)|0;Q=r+116|0;W=r+64|0;Y=t[15712]|0;F=R+8|0;M=_+8|0;V=_+16|0;y=0;C=0.0;p=k;while(1){Q6(G|0,a|0,Z|0)|0;E=PS(O)|0;B=Tq(e,T,E,a,(t[Q>>2]|0)==0?0:i)|0;Pq(B,L,a,+c[W>>3],w,N,_,n);o=0;e:while(1){if((o|0)>=(T|0)){k=0.0;s=0;break}b=P(o,e)|0;d=L+(b<<3)|0;v=o+1|0;g=x+(v<<2)|0;s=t[x+(o<<2)>>2]|0;while(1){if((s|0)>=(t[g>>2]|0)){o=v;continue e}m=J+(s<<2)|0;f=t[m>>2]|0;A:do{if((f|0)!=(o|0)){l=+Ko(a,e,o,f)*I;f=0;while(1){if((f|0)>=(e|0))break A;k=l*(+c[a+(f+b<<3)>>3]-+c[a+((P(t[m>>2]|0,e)|0)+f<<3)>>3]);$=d+(f<<3)|0;c[$>>3]=+c[$>>3]-k;f=f+1|0}}}while(0);s=s+1|0}}while(1){if((s|0)>=(T|0))break;o=P(s,e)|0;b=L+(o<<3)|0;l=0.0;f=0;while(1){if((f|0)>=(e|0))break;ee=+c[b+(f<<3)>>3];l=ee*ee+l;f=f+1|0}l=+D(+l);k=l+k;e:do{if(l>0.0){l=1.0/l;f=0;while(1){if((f|0)>=(e|0)){f=0;break e}$=b+(f<<3)|0;c[$>>3]=+c[$>>3]*l;f=f+1|0}}else f=0}while(0);while(1){if((f|0)>=(e|0))break;$=a+(f+o<<3)|0;c[$>>3]=+c[$>>3]+ +c[b+(f<<3)>>3]*p;f=f+1|0}s=s+1|0}y=y+1|0;if(!B){if(0){$=t[F>>2]|0;t[q>>2]=y;c[q+8>>3]=p;c[q+16>>3]=k;t[q+24>>2]=$;c[q+32>>3]=u;a3(Y,92099,q)|0}}else{AK(B);HS(O,+c[M>>3]*.85+ +c[_>>3]+ +c[V>>3]*3.3)}p=+_S(j,p,k,C,S);if(!((y|0)<(X|0)&p>H))break;else C=k}if(t[r+112>>2]|0)qS(e,R,a);xS(O);t[U>>2]=E;G2(G);if((R|0)!=(A|0))iK(R);G2(L)}}while(0);h=K;return}function _S(e,A,r,i,a){e=e|0;A=+A;r=+r;i=+i;a=+a;do{if(e){if(r>=i){A=a*A;break}if(!(i*.95>2]|0;G=t[A+20>>2]|0;g=t[A+24>>2]|0;t[p>>2]=10;t[I>>2]=10;m=$F(Z<<2)|0;a=$F(80)|0;t[y>>2]=a;i=$F(40)|0;t[C>>2]=i;A=0;while(1){if((A|0)>=(Z|0)){u=0;d=a;s=i;b=i;o=a;break}t[m+(A<<2)>>2]=0;A=A+1|0}while(1){if((u|0)>=(Z|0))break;A=t[G+(u<<2)>>2]|0;e:do{if((((t[G+(u+1<<2)>>2]|0)-A|0)==1?(t[m+(u<<2)>>2]|0)==0:0)?(E=t[g+(A<<2)>>2]|0,B=m+(E<<2)|0,(t[B>>2]|0)==0):0){t[B>>2]=1;k=G+(E+1<<2)|0;u=0;v=0;n=0.0;w=t[G+(E<<2)>>2]|0;s=b;A=d;while(1){if((w|0)>=(t[k>>2]|0))break;i=g+(w<<2)|0;a=t[i>>2]|0;if(((t[G+(a+1<<2)>>2]|0)-(t[G+(a<<2)>>2]|0)|0)==1){t[m+(a<<2)>>2]=1;jS(C,v,p);n=+Ko(r,e,E,t[i>>2]|0)+n;s=t[C>>2]|0;t[s+(v<<2)>>2]=t[i>>2];i=u;a=v+1|0}else{SS(y,u,I);l=+US(r,e,E,t[i>>2]|0);A=t[y>>2]|0;c[A+(u<<3)>>3]=l;i=u+1|0;a=v;o=A}u=i;v=a;w=w+1|0}l=n/+(v|0);if((u|0)>0){KS(u,o);A=o}n=(v|0)>1?6.283185307179586/+(v+-1|0):0.0;i=0;f=0.0;while(1){if((i|0)>=(v|0)){b=s;a=s;break e}$S(r,e,l,f,E,t[s+(i<<2)>>2]|0);i=i+1|0;f=f+n}}else{i=u;a=s;A=d}}while(0);u=i+1|0;d=A;s=a}G2(m);G2(d);G2(s);h=L;return}function KS(e,A){e=e|0;A=A|0;_4(A,e,8,68);return}function $S(e,A,r,i,a,t){e=e|0;A=A|0;r=+r;i=+i;a=a|0;t=t|0;var n=0.0;n=+W(+i)*r;a=P(a,A)|0;t=P(t,A)|0;c[e+(t<<3)>>3]=n+ +c[e+(a<<3)>>3];i=+Y(+i)*r;c[e+(t+1<<3)>>3]=i+ +c[e+(a+1<<3)>>3];return}function ej(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0.0,u=0,b=0,h=0.0,w=0,k=0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0.0,I=0,Z=0.0,G=0.0,L=0,Q=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0.0,J=0,H=0.0,X=0,S=0,j=0,U=0,T=0.0;h=+c[r>>3];u=r+24|0;o=+c[u>>3];b=r+32|0;s=+c[b>>3];x=+c[r+72>>3];J=t[r+80>>2]|0;H=+c[r+88>>3];d=+c[r+96>>3];X=t[r+104>>2]|0;f=t[r+56>>2]|0;G3(92198,32,1,t[15712]|0)|0;if(!((A|0)==0|(J|0)<1)?(S=t[A>>2]|0,l=t[A+4>>2]|0,!((e|0)<1|(l|0)<1)):0){w=e<<3;j=$F(P(w,l)|0)|0;if((l|0)<(t[r+52>>2]|0)){Y=0;F=0;M=0;V=0;N=0;R=0}else{JS(f)|0;V=$F(e*80|0)|0;N=$F(80)|0;R=$F(80)|0;Y=R;F=N;M=V}t[n>>2]=0;if((S|0)==(l|0)){L=lK(A,1)|0;Q=t[L+20>>2]|0;W=t[L+24>>2]|0;e:do{if(t[r+16>>2]|0){a8(t[r+108>>2]|0);l=P(S,e)|0;f=0;while(1){if((f|0)>=(l|0))break e;c[a+(f<<3)>>3]=+Xo();f=f+1|0}}}while(0);if(o<0.0){o=+XS(L,e,a);c[u>>3]=o}if(s<0.0){c[b>>3]=.2;s=.2}if(h>=0.0){c[r>>3]=-1.0;h=-1.0}Z=1.0-h;G=+z(+o,+Z);C=+z(+s,+((2.0-h)*.3333333333333333))/o;I=$F(w)|0;m=P(S,w)|0;p=$F(m)|0;E=P(S,e)|0;B=r+116|0;y=(i|0)!=0;g=h==-1.0;v=0;h=0.0;while(1){f=0;while(1){if((f|0)>=(E|0))break;c[j+(f<<3)>>3]=0.0;f=f+1|0}Q6(p|0,a|0,m|0)|0;w=0;while(1){if((w|0)<(S|0))f=0;else{b=0;break}while(1){if((f|0)>=(e|0))break;c[I+(f<<3)>>3]=0.0;f=f+1|0}b=P(w,e)|0;e:do{if(y&(t[B>>2]|0)!=0){f=0;while(1){if((f|0)==(S|0)){f=0;break e}A:do{if((f|0)!=(w|0)){o=+qo(a,e,w,f);n=i+(f<<3)|0;u=P(f,e)|0;s=+z(+o,+Z);s=1.0/(g?o*o:s);l=0;while(1){if((l|0)>=(e|0))break A;k=I+(l<<3)|0;c[k>>3]=+c[n>>3]*G*(+c[a+(l+b<<3)>>3]-+c[a+(l+u<<3)>>3])*s+ +c[k>>3];l=l+1|0}}}while(0);f=f+1|0}}else{f=0;while(1){if((f|0)==(S|0)){f=0;break e}A:do{if((f|0)!=(w|0)){o=+qo(a,e,w,f);n=P(f,e)|0;s=+z(+o,+Z);s=1.0/(g?o*o:s);l=0;while(1){if((l|0)>=(e|0))break A;k=I+(l<<3)|0;c[k>>3]=(+c[a+(l+b<<3)>>3]-+c[a+(l+n<<3)>>3])*G*s+ +c[k>>3];l=l+1|0}}}while(0);f=f+1|0}}}while(0);while(1){if((f|0)>=(e|0))break;k=j+(f+b<<3)|0;c[k>>3]=+c[k>>3]+ +c[I+(f<<3)>>3];f=f+1|0}w=w+1|0}e:while(1){if((b|0)<(S|0))f=0;else{o=0.0;l=0;break}while(1){if((f|0)>=(e|0))break;c[I+(f<<3)>>3]=0.0;f=f+1|0}w=b+1|0;n=Q+(w<<2)|0;k=P(b,e)|0;l=t[Q+(b<<2)>>2]|0;while(1){if((l|0)>=(t[n>>2]|0)){f=0;break}u=W+(l<<2)|0;f=t[u>>2]|0;A:do{if((f|0)!=(b|0)){s=+Ko(a,e,b,f)*C;f=0;while(1){if((f|0)>=(e|0))break A;o=s*(+c[a+(f+k<<3)>>3]-+c[a+((P(t[u>>2]|0,e)|0)+f<<3)>>3]);U=I+(f<<3)|0;c[U>>3]=+c[U>>3]-o;f=f+1|0}}}while(0);l=l+1|0}while(1){if((f|0)>=(e|0)){b=w;continue e}U=j+(f+k<<3)|0;c[U>>3]=+c[U>>3]+ +c[I+(f<<3)>>3];f=f+1|0}}while(1){if((l|0)>=(S|0))break;n=P(l,e)|0;f=0;while(1){if((f|0)>=(e|0)){s=0.0;f=0;break}c[I+(f<<3)>>3]=+c[j+(f+n<<3)>>3];f=f+1|0}while(1){if((f|0)>=(e|0))break;T=+c[I+(f<<3)>>3];s=T*T+s;f=f+1|0}s=+D(+s);o=s+o;e:do{if(s>0.0){s=1.0/s;f=0;while(1){if((f|0)>=(e|0)){f=0;break e}U=I+(f<<3)|0;c[U>>3]=+c[U>>3]*s;f=f+1|0}}else f=0}while(0);while(1){if((f|0)>=(e|0))break;U=a+(f+n<<3)|0;c[U>>3]=+c[U>>3]+ +c[I+(f<<3)>>3]*d;f=f+1|0}l=l+1|0}v=v+1|0;d=+_S(X,d,o,h,H);if(!((v|0)<(J|0)&d>x))break;else h=o}if(t[r+112>>2]|0)qS(e,L,a);G2(p);if((L|0)!=(A|0))iK(L);G2(I)}else t[n>>2]=-100;if(M|0)G2(V);if(F|0)G2(N);if(Y|0)G2(R);G2(j)}return}function Aj(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0.0,g=0.0,m=0.0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0.0,L=0,Q=0,W=0.0,Y=0.0,F=0,M=0,V=0,N=0,R=0.0,x=0.0,J=0,H=0,X=0,S=0,j=0,U=0.0,T=0,O=0.0,_=0,q=0,K=0,$=0,ee=0,Ae=0,re=0,ie=0,ae=0,te=0,ne=0,fe=0.0,le=0;ne=h;h=h+32|0;K=ne+24|0;$=ne+20|0;ie=ne+16|0;ae=ne+12|0;te=ne+8|0;j=ne;v=+c[r>>3];s=r+24|0;d=+c[s>>3];o=r+32|0;k=+c[o>>3];U=+c[r+72>>3];T=t[r+80>>2]|0;O=+c[r+88>>3];g=+c[r+96>>3];_=t[r+104>>2]|0;t[K>>2]=0;t[$>>2]=10;t[ie>>2]=0;t[ae>>2]=0;t[te>>2]=0;c[j>>3]=0.0;re=r+56|0;u=t[re>>2]|0;if(!((A|0)==0|(T|0)<1)?(q=t[A>>2]|0,f=t[A+4>>2]|0,!((e|0)<1|(f|0)<1)):0){if((f|0)<(t[r+52>>2]|0)){Ae=0;ee=0}else{Ae=JS(u)|0;t[ie>>2]=$F(e*80|0)|0;t[ae>>2]=$F(80)|0;t[te>>2]=$F(80)|0;ee=1}t[n>>2]=0;e:do{if((q|0)==(f|0)){b=lK(A,1)|0;J=t[b+20>>2]|0;H=t[b+24>>2]|0;A:do{if(t[r+16>>2]|0){a8(t[r+108>>2]|0);l=P(q,e)|0;f=0;while(1){if((f|0)>=(l|0))break A;c[a+(f<<3)>>3]=+Xo();f=f+1|0}}}while(0);if(d<0.0){d=+XS(b,e,a);c[s>>3]=d}if(k<0.0){c[o>>3]=.2;k=.2}if(v>=0.0){c[r>>3]=-1.0;v=-1.0}R=1.0-v;x=+z(+d,+R);Y=+z(+k,+((2.0-v)*.3333333333333333))/d;F=e<<3;X=$F(F)|0;F=P(q,F)|0;S=$F(F)|0;M=(ee|0)!=0;V=r+116|0;N=r+64|0;L=v==-1.0;Q=(i|0)!=0;W=1.0/+(q|0);f=0;Z=0;G=0.0;while(1){Z=Z+1|0;Q6(S|0,a|0,F|0)|0;if(M){f=PS(Ae)|0;u=f;f=Tq(e,q,f,a,(t[V>>2]|0)==0?0:i)|0}m=0.0;v=0.0;p=0;d=0.0;A:while(1){if((p|0)<(q|0))l=0;else break;while(1){if((l|0)>=(e|0))break;c[X+(l<<3)>>3]=0.0;l=l+1|0}C=p+1|0;o=J+(C<<2)|0;I=P(p,e)|0;s=t[J+(p<<2)>>2]|0;while(1){if((s|0)>=(t[o>>2]|0))break;w=H+(s<<2)|0;l=t[w>>2]|0;r:do{if((l|0)!=(p|0)){k=+Ko(a,e,p,l)*Y;l=0;while(1){if((l|0)>=(e|0))break r;fe=k*(+c[a+(l+I<<3)>>3]-+c[a+((P(t[w>>2]|0,e)|0)+l<<3)>>3]);y=X+(l<<3)|0;c[y>>3]=+c[y>>3]-fe;l=l+1|0}}}while(0);s=s+1|0}r:do{if(!M)if(Q&(t[V>>2]|0)!=0){l=0;while(1){if((l|0)==(q|0))break r;i:do{if((l|0)!=(p|0)){fe=+qo(a,e,p,l);o=i+(l<<3)|0;w=P(l,e)|0;k=+z(+fe,+R);k=1.0/(L?fe*fe:k);s=0;while(1){if((s|0)>=(e|0))break i;y=X+(s<<3)|0;c[y>>3]=+c[o>>3]*x*(+c[a+(s+I<<3)>>3]-+c[a+(s+w<<3)>>3])*k+ +c[y>>3];s=s+1|0}}}while(0);l=l+1|0}}else{l=0;while(1){if((l|0)==(q|0))break r;i:do{if((l|0)!=(p|0)){fe=+qo(a,e,p,l);o=P(l,e)|0;k=+z(+fe,+R);k=1.0/(L?fe*fe:k);s=0;while(1){if((s|0)>=(e|0))break i;y=X+(s<<3)|0;c[y>>3]=(+c[a+(s+I<<3)>>3]-+c[a+(s+o<<3)>>3])*x*k+ +c[y>>3];s=s+1|0}}}while(0);l=l+1|0}}else{Hq(f,+c[N>>3],a+(I<<3)|0,p,K,$,ie,ae,te,j,n);m=+c[j>>3]+m;y=t[K>>2]|0;v=v+ +(y|0);if(t[n>>2]|0){o=X;s=S;f=X;l=S;w=67;break e}o=t[te>>2]|0;w=t[ae>>2]|0;p=t[ie>>2]|0;l=0;while(1){if((l|0)>=(y|0))break r;fe=+c[o+(l<<3)>>3];fe=fe>1.0e-15?fe:1.0e-15;E=w+(l<<3)|0;B=P(l,e)|0;k=+z(+fe,+R);k=1.0/(L?fe*fe:k);s=0;while(1){if((s|0)>=(e|0))break;le=X+(s<<3)|0;c[le>>3]=+c[E>>3]*x*(+c[a+(s+I<<3)>>3]-+c[p+(s+B<<3)>>3])*k+ +c[le>>3];s=s+1|0}l=l+1|0}}}while(0);k=0.0;l=0;while(1){if((l|0)>=(e|0))break;fe=+c[X+(l<<3)>>3];k=fe*fe+k;l=l+1|0}k=+D(+k);d=k+d;r:do{if(k>0.0){k=1.0/k;l=0;while(1){if((l|0)>=(e|0)){l=0;break r}le=X+(l<<3)|0;c[le>>3]=+c[le>>3]*k;l=l+1|0}}else l=0}while(0);while(1){if((l|0)>=(e|0)){p=C;continue A}le=a+(l+I<<3)|0;c[le>>3]=+c[le>>3]+ +c[X+(l<<3)>>3]*g;l=l+1|0}}if(f|0){AK(f);HS(Ae,v*W*5.0+m*W)}g=+_S(_,g,d,G,O);if(!((Z|0)<(T|0)&g>U))break;else G=d}if(!(t[r+112>>2]|0)){o=X;s=S;l=S;f=X;w=66}else{qS(e,b,a);o=X;s=S;l=S;f=X;w=66}}else{t[n>>2]=-100;b=A;o=0;s=0;l=0;f=0;w=66}}while(0);if((w|0)==66)if(ee)w=67;if((w|0)==67){xS(Ae);t[re>>2]=u}if(s|0)G2(l);if((b|0)!=(A|0))iK(b);if(o|0)G2(f);f=t[ie>>2]|0;if(f|0)G2(f);f=t[ae>>2]|0;if(f|0)G2(f);f=t[te>>2]|0;if(f|0)G2(f)}h=ne;return}function rj(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=+f;l=l|0;var s=0,o=0,u=0,b=0,w=0.0,k=0,d=0.0,v=0,g=0.0,m=0.0,p=0.0,E=0,B=0,y=0.0,C=0,I=0,Z=0.0,G=0,L=0.0,Q=0.0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,X=0,S=0,j=0,U=0,T=0,O=0,_=0.0,q=0,K=0.0,$=0,ee=0,Ae=0,re=0,ie=0,ae=0,te=0,ne=0,fe=0.0,le=0;ne=h;h=h+48|0;b=ne+8|0;Ae=ne+40|0;re=ne+36|0;T=ne+32|0;ae=ne+28|0;te=ne+24|0;O=ne;w=+c[i>>3];k=i+32|0;d=+c[k>>3];_=+c[i+72>>3];q=t[i+80>>2]|0;K=+c[i+88>>3];g=+c[i+96>>3];$=t[i+104>>2]|0;t[Ae>>2]=0;t[re>>2]=10;t[T>>2]=0;t[ae>>2]=0;t[te>>2]=0;c[O>>3]=0.0;if(!((A|0)==0|(q|0)<1)?(ee=t[A>>2]|0,u=t[A+4>>2]|0,!((e|0)<1|(u|0)<1)):0){if((t[i+132>>2]|0)!=0?(u|0)>=(t[i+52>>2]|0):0){o=$F(e*80|0)|0;t[T>>2]=o;t[ae>>2]=$F(80)|0;t[te>>2]=$F(80)|0;v=1;s=o}else{v=0;s=0;o=0}t[l>>2]=0;if((ee|0)==(u|0)){U=lK(A,1)|0;if(!r){j=0;s=U}else{j=t[r+28>>2]|0;s=r}S=t[s+24>>2]|0;X=t[s+20>>2]|0;if(f<0.0){Q=+ij(ee,X,j);L=+(t[X+(ee<<2)>>2]|0);Z=+(ee|0);f=L/(Z*Z-L)*f/+z(+Q,+(w+1.0));H=t[15712]|0;c[b>>3]=Q;c[b+8>>3]=f;a3(H,92231,b)|0}e:do{if(t[i+16>>2]|0){G3(92253,24,1,t[15712]|0)|0;a8(t[i+108>>2]|0);o=P(ee,e)|0;s=0;while(1){if((s|0)>=(o|0))break e;c[n+(s<<3)>>3]=+Xo();s=s+1|0}}}while(0);aj(ee,e,n,X,S,j);if(d<0.0)c[k>>3]=.2;if(w>=0.0){c[i>>3]=-1.0;w=-1.0}J=e<<3;x=$F(J)|0;J=P(ee,J)|0;H=$F(J)|0;Y=(v|0)!=0;F=i+116|0;M=(j|0)==0;V=i+8|0;N=(a|0)!=0;R=w==-1.0;Q=1.0-w;W=i+64|0;s=0;G=0;L=0.0;w=1.0;Z=g;e:while(1){G=G+1|0;Q6(H|0,n|0,J|0)|0;if(Y)s=Tq(e,ee,10,n,(t[F>>2]|0)==0?0:a)|0;v=0;g=0.0;A:while(1){if((v|0)<(ee|0))o=0;else break;while(1){if((o|0)>=(e|0))break;c[x+(o<<3)>>3]=0.0;o=o+1|0}I=v+1|0;k=X+(I<<2)|0;C=P(v,e)|0;b=t[X+(v<<2)>>2]|0;while(1){if((b|0)>=(t[k>>2]|0))break;r=S+(b<<2)|0;o=t[r>>2]|0;r:do{if((o|0)!=(v|0)){y=+qo(n,e,v,o);if(!M)w=+c[j+(b<<3)>>3];d=+c[V>>3];i:do{if(!(d==2.0))if(d==1.0){d=(y-w)*(1.0/(w*w));m=1.0/y;o=0;while(1){if((o|0)>=(e|0))break i;p=d*(+c[n+(o+C<<3)>>3]-+c[n+((P(t[r>>2]|0,e)|0)+o<<3)>>3])*m;B=x+(o<<3)|0;c[B>>3]=+c[B>>3]-p;o=o+1|0}}else{d=1.0/+z(+w,+(d+1.0));m=y-w;p=1.0/y;o=0;while(1){if((o|0)>=(e|0))break i;fe=+c[n+(o+C<<3)>>3]-+c[n+((P(t[r>>2]|0,e)|0)+o<<3)>>3];fe=d*fe*+z(+m,+ +c[V>>3])*p;B=x+(o<<3)|0;c[B>>3]=+c[B>>3]-fe;o=o+1|0}}else{d=y-w;d=d*d*(1.0/(w*w*w));m=1.0/y;o=0;while(1){if((o|0)>=(e|0))break i;fe=d*(+c[n+(o+C<<3)>>3]-+c[n+((P(t[r>>2]|0,e)|0)+o<<3)>>3])*m;B=x+(o<<3)|0;c[B>>3]=+c[B>>3]-fe;o=o+1|0}}}while(0);if(N&(t[F>>2]|0)!=0){u=a+(b<<3)|0;d=+z(+y,+Q);d=1.0/(R?y*y:d);o=0;while(1){if((o|0)>=(e|0))break r;fe=+c[u>>3]*f*(+c[n+(o+C<<3)>>3]-+c[n+((P(t[r>>2]|0,e)|0)+o<<3)>>3])*d;B=x+(o<<3)|0;c[B>>3]=+c[B>>3]-fe;o=o+1|0}}else{d=+z(+y,+Q);d=1.0/(R?y*y:d);o=0;while(1){if((o|0)>=(e|0))break r;fe=(+c[n+(o+C<<3)>>3]-+c[n+((P(t[r>>2]|0,e)|0)+o<<3)>>3])*f*d;B=x+(o<<3)|0;c[B>>3]=+c[B>>3]-fe;o=o+1|0}}}}while(0);b=b+1|0}r:do{if(!Y)if(N&(t[F>>2]|0)!=0){o=0;while(1){if((o|0)==(ee|0)){d=0.0;o=0;break r}i:do{if((o|0)!=(v|0)){fe=+qo(n,e,v,o);r=a+(o<<3)|0;b=P(o,e)|0;d=+z(+fe,+Q);d=1.0/(R?fe*fe:d);u=0;while(1){if((u|0)>=(e|0))break i;B=x+(u<<3)|0;c[B>>3]=+c[r>>3]*f*(+c[n+(u+C<<3)>>3]-+c[n+(u+b<<3)>>3])*d+ +c[B>>3];u=u+1|0}}}while(0);o=o+1|0}}else{o=0;while(1){if((o|0)==(ee|0)){d=0.0;o=0;break r}i:do{if((o|0)!=(v|0)){fe=+qo(n,e,v,o);r=P(o,e)|0;d=+z(+fe,+Q);d=1.0/(R?fe*fe:d);u=0;while(1){if((u|0)>=(e|0))break i;B=x+(u<<3)|0;c[B>>3]=(+c[n+(u+C<<3)>>3]-+c[n+(u+r<<3)>>3])*f*d+ +c[B>>3];u=u+1|0}}}while(0);o=o+1|0}}else{Hq(s,+c[W>>3],n+(C<<3)|0,v,Ae,re,T,ae,te,O,l);r=t[Ae>>2]|0;if(t[l>>2]|0)break e;b=t[te>>2]|0;k=t[ae>>2]|0;v=t[T>>2]|0;o=0;while(1){if((o|0)>=(r|0)){d=0.0;o=0;break r}fe=+c[b+(o<<3)>>3];fe=fe>1.0e-15?fe:1.0e-15;E=k+(o<<3)|0;B=P(o,e)|0;d=+z(+fe,+Q);d=1.0/(R?fe*fe:d);u=0;while(1){if((u|0)>=(e|0))break;le=x+(u<<3)|0;c[le>>3]=+c[E>>3]*f*(+c[n+(u+C<<3)>>3]-+c[v+(u+B<<3)>>3])*d+ +c[le>>3];u=u+1|0}o=o+1|0}}}while(0);while(1){if((o|0)>=(e|0))break;fe=+c[x+(o<<3)>>3];d=fe*fe+d;o=o+1|0}d=+D(+d);g=d+g;r:do{if(d>0.0){d=1.0/d;o=0;while(1){if((o|0)>=(e|0)){o=0;break r}le=x+(o<<3)|0;c[le>>3]=+c[le>>3]*d;o=o+1|0}}else o=0}while(0);while(1){if((o|0)>=(e|0)){v=I;continue A}le=n+(o+C<<3)|0;c[le>>3]=+c[le>>3]+ +c[x+(o<<3)>>3]*Z;o=o+1|0}}if(s|0)AK(s);Z=+_S($,Z,g,L,K);if(!((G|0)<(q|0)&Z>_)){ie=83;break}else L=g}if((ie|0)==83?t[i+112>>2]|0:0)qS(e,U,n);G2(H);if((U|0)!=(A|0))iK(U);G2(x);s=t[T>>2]|0;o=s}else t[l>>2]=-100;if(o|0)G2(s);s=t[ae>>2]|0;if(s|0)G2(s);s=t[te>>2]|0;if(s|0)G2(s)}h=ne;return}function ij(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0.0;if(!r)i=1.0;else{a=0;i=0.0;e:while(1){if((a|0)>=(e|0))break;n=a+1|0;f=t[A+(n<<2)>>2]|0;a=t[A+(a<<2)>>2]|0;while(1){if((a|0)>=(f|0)){a=n;continue e}l=+c[r+(a<<3)>>3]+i;a=a+1|0;i=l}}i=i/+(t[A+(e<<2)>>2]|0)}return+i}function aj(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0,E=0.0;p=h;h=h+16|0;m=p;g=(n|0)==0;s=0.0;o=0.0;u=1.0;l=0;e:while(1){if((l|0)>=(e|0))break;d=l+1|0;v=i+(d<<2)|0;k=t[i+(l<<2)>>2]|0;while(1){if((k|0)>=(t[v>>2]|0)){l=d;continue e}f=t[a+(k<<2)>>2]|0;A:do{if((f|0)!=(l|0)){b=+qo(r,A,l,f);if(!g)u=+c[n+(k<<3)>>3];E=1.0/(u*u);w=u*b*E;b=b*b*E;f=0;while(1){if((f|0)>=(A|0))break A;f=f+1|0;s=s+b;o=o+w}}}while(0);k=k+1|0}}s=o/s;l=P(A,e)|0;f=0;while(1){if((f|0)>=(l|0))break;A=r+(f<<3)|0;c[A>>3]=+c[A>>3]*s;f=f+1|0}r=t[15712]|0;c[m>>3]=s;a3(r,92278,m)|0;h=p;return}function tj(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,o=0,u=0.0,b=0.0,w=0,k=0,d=0.0,v=0,g=0,m=0,p=0.0,E=0,B=0,y=0,C=0.0,I=0,Z=0,G=0,L=0,Q=0.0,W=0,Y=0.0,F=0,M=0,V=0,N=0.0,R=0.0,x=0,J=0,H=0,X=0,S=0,j=0,U=0,T=0.0,O=0,_=0.0,q=0,K=0,$=0,ee=0,Ae=0,re=0,ie=0,ae=0,te=0,ne=0.0,fe=0.0,le=0;te=h;h=h+32|0;$=te+24|0;ee=te+20|0;Ae=te+16|0;ie=te+12|0;ae=te+8|0;U=te;d=+c[i>>3];w=i+24|0;b=+c[w>>3];k=i+32|0;u=+c[k>>3];T=+c[i+72>>3];O=t[i+80>>2]|0;_=+c[i+88>>3];p=+c[i+96>>3];q=t[i+104>>2]|0;t[$>>2]=0;t[ee>>2]=10;t[Ae>>2]=0;t[ie>>2]=0;t[ae>>2]=0;c[U>>3]=0.0;if(!((A|0)==0|(O|0)<1)?(K=t[A>>2]|0,o=t[A+4>>2]|0,!((e|0)<1|(o|0)<1)):0){if((o|0)<(t[i+52>>2]|0)){v=0;l=0;s=0}else{s=$F(e*80|0)|0;t[Ae>>2]=s;t[ie>>2]=$F(80)|0;t[ae>>2]=$F(80)|0;v=1;l=s}t[f>>2]=0;if((K|0)==(o|0)){J=lK(A,1)|0;H=t[J+20>>2]|0;X=t[J+24>>2]|0;S=t[r+20>>2]|0;j=t[r+24>>2]|0;x=t[r+28>>2]|0;e:do{if(t[i+16>>2]|0){a8(t[i+108>>2]|0);s=P(K,e)|0;l=0;while(1){if((l|0)>=(s|0))break e;c[n+(l<<3)>>3]=+Xo();l=l+1|0}}}while(0);if(b<0.0){b=+XS(J,e,n);c[w>>3]=b}if(u<0.0){c[k>>3]=.2;u=.2}if(d>=0.0){c[i>>3]=-1.0;d=-1.0}N=1.0-d;R=+z(+b,+N);Y=+z(+u,+((2.0-d)*.3333333333333333))/b;M=e<<3;F=$F(M)|0;M=P(K,M)|0;V=$F(M)|0;G=(v|0)!=0;L=i+116|0;Q=Y*.2;W=i+64|0;I=d==-1.0;Z=(a|0)!=0;l=0;y=0;C=0.0;e:while(1){y=y+1|0;Q6(V|0,n|0,M|0)|0;if(G)l=Tq(e,K,10,n,(t[L>>2]|0)==0?0:a)|0;v=0;b=0.0;A:while(1){if((v|0)<(K|0))s=0;else break;while(1){if((s|0)>=(e|0))break;c[F+(s<<3)>>3]=0.0;s=s+1|0}E=v+1|0;r=H+(E<<2)|0;B=P(v,e)|0;o=t[H+(v<<2)>>2]|0;while(1){if((o|0)>=(t[r>>2]|0))break;w=X+(o<<2)|0;s=t[w>>2]|0;r:do{if((s|0)!=(v|0)){u=+Ko(n,e,v,s)*Y;s=0;while(1){if((s|0)>=(e|0))break r;d=u*(+c[n+(s+B<<3)>>3]-+c[n+((P(t[w>>2]|0,e)|0)+s<<3)>>3]);m=F+(s<<3)|0;c[m>>3]=+c[m>>3]-d;s=s+1|0}}}while(0);o=o+1|0}w=S+(E<<2)|0;r=t[S+(v<<2)>>2]|0;while(1){if((r|0)>=(t[w>>2]|0))break;k=j+(r<<2)|0;s=t[k>>2]|0;r:do{if((s|0)!=(v|0)){u=+qo(n,e,v,s);o=x+(r<<3)|0;d=1.0/u;s=0;while(1){if((s|0)>=(e|0))break r;fe=+c[o>>3];ne=u-fe;ne=ne*ne*Q*(+c[n+(s+B<<3)>>3]-+c[n+((P(t[k>>2]|0,e)|0)+s<<3)>>3])*d;m=F+(s<<3)|0;c[m>>3]=(u>3];s=s+1|0}}}while(0);r=r+1|0}r:do{if(!G)if(Z&(t[L>>2]|0)!=0){s=0;while(1){if((s|0)==(K|0)){u=0.0;s=0;break r}i:do{if((s|0)!=(v|0)){fe=+qo(n,e,v,s);r=a+(s<<3)|0;w=P(s,e)|0;u=+z(+fe,+N);u=1.0/(I?fe*fe:u);o=0;while(1){if((o|0)>=(e|0))break i;m=F+(o<<3)|0;c[m>>3]=+c[r>>3]*R*(+c[n+(o+B<<3)>>3]-+c[n+(o+w<<3)>>3])*u+ +c[m>>3];o=o+1|0}}}while(0);s=s+1|0}}else{s=0;while(1){if((s|0)==(K|0)){u=0.0;s=0;break r}i:do{if((s|0)!=(v|0)){fe=+qo(n,e,v,s);r=P(s,e)|0;u=+z(+fe,+N);u=1.0/(I?fe*fe:u);o=0;while(1){if((o|0)>=(e|0))break i;m=F+(o<<3)|0;c[m>>3]=(+c[n+(o+B<<3)>>3]-+c[n+(o+r<<3)>>3])*R*u+ +c[m>>3];o=o+1|0}}}while(0);s=s+1|0}}else{Hq(l,+c[W>>3],n+(B<<3)|0,v,$,ee,Ae,ie,ae,U,f);r=t[$>>2]|0;if(t[f>>2]|0)break e;w=t[ae>>2]|0;k=t[ie>>2]|0;v=t[Ae>>2]|0;s=0;while(1){if((s|0)>=(r|0)){u=0.0;s=0;break r}fe=+c[w+(s<<3)>>3];fe=fe>1.0e-15?fe:1.0e-15;g=k+(s<<3)|0;m=P(s,e)|0;u=+z(+fe,+N);u=1.0/(I?fe*fe:u);o=0;while(1){if((o|0)>=(e|0))break;le=F+(o<<3)|0;c[le>>3]=+c[g>>3]*R*(+c[n+(o+B<<3)>>3]-+c[v+(o+m<<3)>>3])*u+ +c[le>>3];o=o+1|0}s=s+1|0}}}while(0);while(1){if((s|0)>=(e|0))break;fe=+c[F+(s<<3)>>3];u=fe*fe+u;s=s+1|0}u=+D(+u);b=u+b;r:do{if(u>0.0){u=1.0/u;s=0;while(1){if((s|0)>=(e|0)){s=0;break r}le=F+(s<<3)|0;c[le>>3]=+c[le>>3]*u;s=s+1|0}}else s=0}while(0);while(1){if((s|0)>=(e|0)){v=E;continue A}le=n+(s+B<<3)|0;c[le>>3]=+c[le>>3]+ +c[F+(s<<3)>>3]*p;s=s+1|0}}if(l|0)AK(l);p=+_S(q,p,b,C,_);if(!((y|0)<(O|0)&p>T)){re=70;break}else C=b}if((re|0)==70?t[i+112>>2]|0:0)qS(e,J,n);G2(V);if((J|0)!=(A|0))iK(J);G2(F);l=t[Ae>>2]|0;s=l}else t[f>>2]=-100;if(s|0)G2(l);l=t[ie>>2]|0;if(l|0)G2(l);l=t[ae>>2]|0;if(l|0)G2(l)}h=te;return}function nj(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0;b=t[A+20>>2]|0;h=t[A+24>>2]|0;w=$F(e<<3)|0;u=t[A>>2]|0;s=0;e:while(1){if((s|0)<(u|0))A=0;else break;while(1){if((A|0)>=(e|0))break;c[w+(A<<3)>>3]=0.0;A=A+1|0}o=s+1|0;l=t[b+(o<<2)>>2]|0;f=t[b+(s<<2)>>2]|0;A=0;while(1){if((f|0)>=(l|0))break;i=t[h+(f<<2)>>2]|0;if((i|0)!=(s|0)){n=P(i,e)|0;i=0;while(1){if((i|0)>=(e|0))break;k=w+(i<<3)|0;c[k>>3]=+c[k>>3]+ +c[r+(n+i<<3)>>3];i=i+1|0}A=A+1|0}f=f+1|0}if((A|0)<=0){s=o;continue}a=.5/+(A|0);i=P(s,e)|0;A=0;while(1){if((A|0)>=(e|0)){s=o;continue e}k=r+(A+i<<3)|0;c[k>>3]=+c[w+(A<<3)>>3]*a+ +c[k>>3]*.5;A=A+1|0}}G2(w);return}function fj(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0.0;l=t[e+20>>2]|0;s=t[e+24>>2]|0;f=t[e>>2]|0;c=$F((f<<2)+4|0)|0;e=0;while(1){if((e|0)>(f|0)){r=0;i=0;break}t[c+(e<<2)>>2]=0;e=e+1|0}while(1){if((i|0)>=(f|0))break;a=i+1|0;n=t[l+(a<<2)>>2]|0;e=0;A=t[l+(i<<2)>>2]|0;while(1){if((A|0)>=(n|0))break;e=e+((i|0)!=(t[s+(A<<2)>>2]|0)&1)|0;A=A+1|0}n=c+(e<<2)|0;i=(t[n>>2]|0)+1|0;t[n>>2]=i;r=(r|0)>(i|0)?r:i;i=a}o=+(t[c+4>>2]|0);if(+(r|0)*.8=(n|0)){a=0;break}c[u+(a<<3)>>3]=0.0;a=a+1|0}while(1){if((a|0)>=(A|0)){n=0;break}c[l+(a<<3)>>3]=0.0;a=a+1|0}while(1){if((n|0)>=(e|0))break;f=P(n,A)|0;a=0;while(1){if((a|0)>=(A|0))break;o=l+(a<<3)|0;c[o>>3]=+c[o>>3]+ +c[r+(a+f<<3)>>3];a=a+1|0}n=n+1|0}i=1.0/+(e|0);a=0;while(1){if((a|0)>=(A|0)){n=0;break}o=l+(a<<3)|0;c[o>>3]=+c[o>>3]*i;a=a+1|0}while(1){if((n|0)>=(e|0)){f=0;break}f=P(n,A)|0;a=0;while(1){if((a|0)>=(A|0))break;o=r+(a+f<<3)|0;c[o>>3]=+c[o>>3]-+c[l+(a<<3)>>3];a=a+1|0}n=n+1|0}while(1){if((f|0)>=(e|0))break;l=P(f,A)|0;n=0;while(1){if((n|0)>=(A|0))break;s=r+(n+l<<3)|0;o=P(n,A)|0;a=0;while(1){if((a|0)==(A|0))break;w=u+(a+o<<3)|0;c[w>>3]=+c[w>>3]+ +c[r+(a+l<<3)>>3]*+c[s>>3];a=a+1|0}n=n+1|0}f=f+1|0}i=+c[u+8>>3];if(i==0.0)i=0.0;else{k=+c[u>>3];t=+c[u+24>>3];i=-(t-k-+D(+(k*k+i*i*4.0+(k*-2.0+t)*t)))/(i*2.0)}t=+D(+(i*i+1.0));i=i/t;t=1.0/t;a=0;while(1){if((a|0)>=(e|0))break;w=P(a,A)|0;u=r+(w<<3)|0;k=+c[u>>3];w=r+(w+1<<3)|0;d=+c[w>>3];c[u>>3]=d*t+k*i;c[w>>3]=d*i-k*t;a=a+1|0}h=b;return}function sj(e,A,r,i,a,t,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;s=s|0;cj(e,A,r,i,a,t,n,f,l,s);return}function cj(e,A,r,i,a,n,f,l,s,o){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;o=o|0;var u=0.0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0;N=h;h=h+192|0;Y=N+176|0;W=N+168|0;M=N;Q6(M|0,i|0,168)|0;t[o>>2]=0;do{if(A|0?(V=t[A+4>>2]|0,!((e|0)<1|(V|0)<1)):0){if((sK(A,0)|0)!=0?(t[A+16>>2]|0)==1:0){if((t[i+136>>2]|0)==1)b=hK(r)|0;else b=r;F=hK(A)|0}else g=5;do{if((g|0)==5)if((t[i+136>>2]|0)==1){F=bK(A,0)|0;b=bK(r,0)|0;break}else{F=Ho(A)|0;b=r;break}}while(0);z=i+160|0;w=t[z>>2]|0;if((w|0)==3){if((l|0)>0)g=14}else if((l|0)>0&(w|0)==4)g=14;if((g|0)==14){r=$F(P(e<<3,t[F>>2]|0)|0)|0;V=oj(F,l,s)|0;sj(e,V,0,i,0,0,r,0,0,o);uj(e,F,l,s,f,r);KO(e,F,f,n,t[i+124>>2]|0,+c[i+144>>3],t[z>>2]|0,l,s);iK(V);G2(r);if((F|0)==(A|0))break;iK(F);break}Q=tu(t[i+44>>2]|0,t[i+48>>2]|0)|0;t[Q+16>>2]=t[i+40>>2];D=gu(F,b,a,Q)|0;k=Eu(D)|0;if(!(t[k+32>>2]|0))d=f;else d=$F(P(e<<3,t[k+4>>2]|0)|0)|0;w=fj(F)|0;if(+c[i>>3]==-1.0001234)c[i>>3]=(w|0)==0?-1.0:-1.8;p=i+136|0;E=i+24|0;B=i+16|0;y=i+104|0;C=i+96|0;I=e<<3;Z=i+132|0;G=t[15712]|0;L=i+80|0;while(1){e:do{switch(t[p>>2]|0){case 0:{switch(t[Z>>2]|0){case 0:{ej(e,t[k+8>>2]|0,i,t[k+24>>2]|0,d,o);break e}case 2:{w=k+8|0;g=29;break}case 3:{w=k+8|0;v=t[w>>2]|0;if((t[v>>2]|0)>1e4)if(!0)g=29;else{t[W>>2]=1e4;a3(G,92299,W)|0;g=29}else g=30;break}default:{v=t[k+8>>2]|0;g=30}}if((g|0)==29){OS(e,t[w>>2]|0,i,t[k+24>>2]|0,d,o);break e}else if((g|0)==30){Aj(e,v,i,t[k+24>>2]|0,d,o);break e}break}case 1:{c[C>>3]=1.0;t[y>>2]=1;m=(t[k+28>>2]|0)==0;u=m?.5:.05;t[L>>2]=m?500:100;m=(t[k+32>>2]|0)==0;w=k+8|0;v=k+12|0;g=k+24|0;rj(e,t[w>>2]|0,t[v>>2]|0,i,t[g>>2]|0,d,u,o);if(m){t[B>>2]=0;c[C>>3]=.05;t[y>>2]=0;rj(e,t[w>>2]|0,t[v>>2]|0,i,t[g>>2]|0,d,u*.5,o);rj(e,t[w>>2]|0,t[v>>2]|0,i,t[g>>2]|0,d,u*.125,o);rj(e,t[w>>2]|0,t[v>>2]|0,i,t[g>>2]|0,d,u*.03125,o)}break}default:{}}}while(0);g=t[k+32>>2]|0;if(!g){g=39;break}if(t[o>>2]|0){g=35;break}m=t[k+16>>2]|0;w=t[k+40>>2]|0;if(!(t[g+32>>2]|0))v=f;else v=$F(P(I,t[g+4>>2]|0)|0)|0;bj(e,t[g+8>>2]|0,m,t[g+20>>2]|0,d,v,w,+c[E>>3]*.001);G2(d);t[B>>2]=0;c[E>>3]=+c[E>>3]*.75;t[y>>2]=0;c[C>>3]=((t[(t[g+28>>2]|0)+40>>2]|0)+-9|0)>>>0<2?1.0:.1;k=g;d=v}if((g|0)==35)G2(d);else if((g|0)==39){ju(e,F,i,a,f,o);if(0){t[Y>>2]=t[i+124>>2];a3(G,92362,Y)|0}if((e|0)==2)lj(V,2,f);u=+c[i+152>>3];if(u!=0.0)hj(V,e,f,u);KO(e,F,f,n,t[i+124>>2]|0,+c[i+144>>3],t[z>>2]|0,l,s)}Q6(i|0,M|0,168)|0;if((F|0)!=(A|0))iK(F);if(!((b|0)==0|(b|0)==(r|0)))iK(b);nu(Q);fu(D)}}while(0);h=N;return}function oj(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;y=h;h=h+16|0;B=y;m=t[e+20>>2]|0;p=t[e+24>>2]|0;E=$F(t[e>>2]<<2)|0;i=0;while(1){if((i|0)>=(t[e>>2]|0)){i=0;break}t[E+(i<<2)>>2]=1;i=i+1|0}while(1){if((i|0)>=(A|0)){i=0;r=0;break}t[E+(t[r+(i<<2)>>2]<<2)>>2]=-1;i=i+1|0}while(1){o=t[e>>2]|0;if((r|0)>=(o|0)){r=0;A=0;break}A=E+(r<<2)|0;if((t[A>>2]|0)>0){t[A>>2]=i;i=i+1|0}r=r+1|0}e:while(1){while(1){if((A|0)>=(o|0))break e;if((t[E+(A<<2)>>2]|0)>=0)break;A=A+1|0}s=A+1|0;c=t[m+(s<<2)>>2]|0;l=t[m+(A<<2)>>2]|0;while(1){if((l|0)>=(c|0)){A=s;continue e}a=t[p+(l<<2)>>2]|0;A:do{if((t[E+(a<<2)>>2]|0)>-1)r=r+1|0;else{f=t[m+(a+1<<2)>>2]|0;n=t[m+(a<<2)>>2]|0;while(1){if((n|0)>=(f|0))break A;a=t[p+(n<<2)>>2]|0;if((a|0)!=(A|0))r=((t[E+(a<<2)>>2]|0)>>>31^1)+r|0;n=n+1|0}}}while(0);l=l+1|0}}A=r<<2;if((r|0)>0){d=$F(A)|0;v=$F(A)|0;w=v;k=d}else{w=0;k=0;d=0;v=0}g=t[15712]|0;A=0;a=0;e:while(1){r=t[e>>2]|0;while(1){if((A|0)>=(r|0))break e;b=E+(A<<2)|0;if((t[b>>2]|0)>=0)break;A=A+1|0}o=A+1|0;u=m+(o<<2)|0;c=t[m+(A<<2)>>2]|0;r=a;while(1){if((c|0)>=(t[u>>2]|0)){A=o;a=r;continue e}a=p+(c<<2)|0;n=t[a>>2]|0;A:do{if((t[E+(n<<2)>>2]|0)>-1){t[k+(r<<2)>>2]=t[b>>2];t[w+(r<<2)>>2]=t[E+(t[a>>2]<<2)>>2];r=r+1|0}else{s=m+(n+1<<2)|0;l=t[m+(n<<2)>>2]|0;while(1){if((l|0)>=(t[s>>2]|0))break A;a=p+(l<<2)|0;f=t[a>>2]|0;do{if((f|0)!=(A|0)?(t[E+(f<<2)>>2]|0)>-1:0){t[k+(r<<2)>>2]=t[b>>2];f=r+1|0;t[w+(r<<2)>>2]=t[E+(t[a>>2]<<2)>>2];n=t[b>>2]|0;r=t[E+(t[a>>2]<<2)>>2]|0;if((n|0)!=68)if((r|0)==68)r=68;else{r=f;break}t[B>>2]=n;t[B+4>>2]=r;a3(g,92380,B)|0;r=f}}while(0);l=l+1|0}}}while(0);c=c+1|0}}B=kK(a,i,i,k,w,0,8,8)|0;G2(d);G2(v);G2(E);h=y;return B|0}function uj(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0.0,o=0,u=0,b=0,h=0,w=0,k=0;w=$F(t[A>>2]<<2)|0;f=0;while(1){if((f|0)>=(t[A>>2]|0)){f=0;break}t[w+(f<<2)>>2]=1;f=f+1|0}while(1){if((f|0)>=(r|0)){f=0;o=0;break}l=t[i+(f<<2)>>2]|0;if((l|0)>-1?(l|0)<(t[A>>2]|0):0)t[w+(l<<2)>>2]=-1;f=f+1|0}while(1){b=t[A>>2]|0;if((o|0)>=(b|0)){o=0;break}l=w+(o<<2)|0;if((t[l>>2]|0)>-1){t[l>>2]=f;f=f+1|0}o=o+1|0}while(1){if((o|0)>=(b|0))break;f=t[w+(o<<2)>>2]|0;e:do{if((f|0)>-1){u=P(o,e)|0;l=P(f,e)|0;f=0;while(1){if((f|0)>=(e|0))break e;c[a+(f+u<<3)>>3]=+c[n+(l+f<<3)>>3];f=f+1|0}}}while(0);o=o+1|0}h=A+20|0;n=A+24|0;b=0;while(1){if((b|0)>=(r|0))break;A=t[i+(b<<2)>>2]|0;f=t[h>>2]|0;o=t[f+(A+1<<2)>>2]|0;f=t[f+(A<<2)>>2]|0;u=o-f|0;A=P(A,e)|0;l=0;while(1){if((l|0)>=(e|0))break;c[a+(l+A<<3)>>3]=0.0;l=l+1|0}while(1){if((f|0)<(o|0))l=0;else break;while(1){if((l|0)>=(e|0))break;s=+c[a+((P(t[(t[n>>2]|0)+(f<<2)>>2]|0,e)|0)+l<<3)>>3];k=a+(l+A<<3)|0;c[k>>3]=+c[k>>3]+s;l=l+1|0}f=f+1|0}s=1.0/+(u|0);f=0;while(1){if((f|0)>=(e|0))break;k=a+(f+A<<3)|0;c[k>>3]=+c[k>>3]*s;f=f+1|0}b=b+1|0}G2(w);return}function bj(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=+l;var s=0,o=0,u=0,b=0,w=0,k=0.0;b=h;h=h+16|0;u=b;t[u>>2]=n;zo(r,0,a,0,u,0,e);e:do{if((f+-1|0)>>>0<6){nj(e,A,t[u>>2]|0);s=t[i>>2]|0;o=t[i+20>>2]|0;n=t[i+24>>2]|0;A=0;A:while(1){if((A|0)>=(s|0))break e;f=A+1|0;i=o+(f<<2)|0;A=t[o+(A<<2)>>2]|0;r:while(1){A=A+1|0;if((A|0)>=(t[i>>2]|0)){A=f;continue A}a=n+(A<<2)|0;r=0;while(1){if((r|0)>=(e|0))continue r;k=(+Xo()+-.5)*l;w=(t[u>>2]|0)+((P(t[a>>2]|0,e)|0)+r<<3)|0;c[w>>3]=+c[w>>3]+k;r=r+1|0}}}}}while(0);h=b;return}function hj(e,A,r,i){e=e|0;A=A|0;r=r|0;i=+i;var a=0,t=0.0,n=0,f=0,l=0,s=0,o=0,u=0.0,b=0.0;s=h;h=h+16|0;l=s;a=0;while(1){if((a|0)>=(A|0)){n=0;break}c[l+(a<<3)>>3]=0.0;a=a+1|0}while(1){if((n|0)>=(e|0))break;f=P(n,A)|0;a=0;while(1){if((a|0)>=(A|0))break;o=l+(a<<3)|0;c[o>>3]=+c[o>>3]+ +c[r+(a+f<<3)>>3];a=a+1|0}n=n+1|0}t=1.0/+(e|0);a=0;while(1){if((a|0)>=(A|0)){n=0;break}o=l+(a<<3)|0;c[o>>3]=+c[o>>3]*t;a=a+1|0}while(1){if((n|0)>=(e|0))break;f=P(n,A)|0;a=0;while(1){if((a|0)>=(A|0))break;o=r+(a+f<<3)|0;c[o>>3]=+c[o>>3]-+c[l+(a<<3)>>3];a=a+1|0}n=n+1|0}i=i*-.017453277777777776;t=+W(+i);i=+Y(+i);a=0;while(1){if((a|0)>=(e|0))break;o=P(a,A)|0;l=r+(o<<3)|0;u=+c[l>>3];o=r+(o+1<<3)|0;b=+c[o>>3];c[l>>3]=b*i+u*t;c[o>>3]=b*t-u*i;a=a+1|0}h=s;return}function wj(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=+n;f=f|0;var l=0,s=0,o=0,u=0;u=(sK(A,0)|0)==0;l=(t[A+16>>2]|0)==1;if(u)if(l)l=hK(lK(A,0)|0)|0;else s=5;else if(l)l=A;else s=5;if((s|0)==5)l=Ho(A)|0;u=hK(l)|0;t[f>>2]=0;l=t[u>>2]|0;if(!r){$F(P(e<<3,l)|0)|0;iA()}o=zu(u,e,0.0,t[r>>2]|0,(i|0)==0?0:2,1)|0;if(!o)t[f>>2]=-1;else{c[o+40>>3]=.1;t[o+24>>2]=5;+Yu(o,e,t[r>>2]|0,a,n);s=P(l,e)|0;i=o+32|0;l=0;while(1){if((l|0)>=(s|0))break;f=(t[r>>2]|0)+(l<<3)|0;c[f>>3]=+c[f>>3]/+c[i>>3];l=l+1|0}Wu(o)}if((u|0)!=(A|0))iK(u);return}function kj(e,A,r,i,a,t,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=+n;f=f|0;wj(e,r,i,a,t,n,f);return}function dj(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=n|0;var f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0.0;p=t[A>>2]|0;E=t[A+20>>2]|0;g=t[A+24>>2]|0;m=t[A+28>>2]|0;if(!(sK(A,0)|0))ge(95795,92387,37,92404);e=$F(56)|0;s=e+20|0;t[s>>2]=0;t[e+24>>2]=2;t[e+12>>2]=0;l=$F(16)|0;t[s>>2]=l;c[l>>3]=i;c[l+8>>3]=a;t[e+16>>2]=105;c[e+40>>3]=.01;t[e+48>>2]=~~+D(+ +(t[A>>2]|0));l=A+8|0;s=e+4|0;t[s>>2]=aK(p,p,(t[l>>2]|0)+p|0,1,1)|0;l=aK(p,p,(t[l>>2]|0)+p|0,1,1)|0;t[e+8>>2]=l;s=t[s>>2]|0;o=t[s+28>>2]|0;u=t[l+28>>2]|0;if((l|0)==0|(s|0)==0){Du(e);e=0}else{b=t[s+20>>2]|0;h=t[s+24>>2]|0;w=t[l+20>>2]|0;k=t[l+24>>2]|0;t[w>>2]=0;t[b>>2]=0;A=0;r=0;while(1){if((A|0)>=(p|0))break;d=A+1|0;v=E+(d<<2)|0;i=0.0;a=0.0;f=t[E+(A<<2)>>2]|0;while(1){if((f|0)>=(t[v>>2]|0))break;n=t[g+(f<<2)>>2]|0;if((n|0)!=(A|0)){B=+c[m+(f<<3)>>3];B=B>=0.0?B:-B;B=B>.01?B:.01;t[h+(r<<2)>>2]=n;t[k+(r<<2)>>2]=n;n=o+(r<<3)|0;c[n>>3]=-1.0;c[u+(r<<3)>>3]=-B;i=+c[n>>3]+i;a=a-B;r=r+1|0}f=f+1|0}t[h+(r<<2)>>2]=A;t[k+(r<<2)>>2]=A;c[o+(r<<3)>>3]=-i;c[u+(r<<3)>>3]=-a;r=r+1|0;t[b+(d<<2)>>2]=r;t[w+(d<<2)>>2]=r;A=d}t[s+8>>2]=r;t[l+8>>2]=r}return e|0}function vj(e){e=e|0;Du(e);return}function gj(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return+ +Fu(e,A,r,i,.001)}function mj(e,A){e=e|0;A=+A;var r=0,i=0,a=0,n=0;if((t[e+16>>2]|0)==1)r=lK(e,0)|0;else r=Ho(e)|0;a=t[r+28>>2]|0;e:do{if(A!=1.0){i=t[r+8>>2]|0;e=0;while(1){if((e|0)>=(i|0))break e;n=a+(e<<3)|0;c[n>>3]=+c[n>>3]*A;e=e+1|0}}}while(0);return r|0}function pj(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0.0;l=t[A>>2]|0;t[i>>2]=0;s=P(l,e)|0;i=0;while(1){if((i|0)>=(s|0)){i=1;a=1;break}c[r+(i<<3)>>3]=+Xo()*100.0;i=i+1|0}while(1){if((a|0)>=(l|0))break;f=P(a,e)|0;n=0;while(1){if((n|0)>=(e|0))break;o=+c[r+(n<<3)>>3]-+c[r+(n+f<<3)>>3];if((o>=0.0?o:-o)>1.0e-16){i=0;a=l;break}else n=n+1|0}a=a+1|0}e:do{if(i|0){a8(1);i=0;while(1){if((i|0)>=(s|0))break e;c[r+(i<<3)>>3]=+Xo()*100.0;i=i+1|0}}}while(0);i=mj(A,1.0)|0;if(!(sK(i,0)|0))ge(92430,92387,164,92466);else{s=dj(0,i,0,101.0e5,100.0,0)|0;+gj(s,e,r,300);vj(s);s=dj(0,i,0,101.0e3,100.0,0)|0;+gj(s,e,r,300);vj(s);s=dj(0,i,0,1010.0,100.0,0)|0;+gj(s,e,r,300);vj(s);s=dj(0,i,0,10.1,100.0,0)|0;+gj(s,e,r,300);vj(s);eu(0.0,0.0,490.0,700.0,t[A>>2]|0,e,r);iK(i);return}}function Ej(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0;s=$F((gk(e)|0)<<4)|0;f=(i|0)!=0;l=A+8|0;n=sd(e)|0;a=0;while(1){if(!n)break;if(f)a=a+((y1(Mk(n)|0,92481,11)|0)==0&1)|0;u=t[n+16>>2]|0;o=t[u+120>>2]<<1;c[s+(o<<3)>>3]=+c[u+32>>3]*.5+ +c[A>>3];c[s+((o|1)<<3)>>3]=+c[u+40>>3]*.5+ +c[l>>3];n=cd(e,n)|0}if(f&(a|0)!=0){A=$F(a<<2)|0;n=sd(e)|0;a=0;while(1){if(!n)break;if(!(y1(Mk(n)|0,92481,11)|0)){t[A+(a<<2)>>2]=t[(t[n+16>>2]|0)+120>>2];a=a+1|0}n=cd(e,n)|0}t[i>>2]=A;t[r>>2]=a}return s|0}function Bj(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;C=h;h=h+32|0;E=C+16|0;p=C+8|0;m=C;if(e){B=gk(e)|0;y=mk(e)|0;A=sd(e)|0;i=0;while(1){if(!A)break;t[(t[A+16>>2]|0)+120>>2]=i;A=cd(e,A)|0;i=i+1|0}d=y<<2;k=$F(d)|0;d=$F(d)|0;A=y<<3;v=$F(A)|0;b=zw(e,2,101541,0)|0;g=(r|0)!=0;if(g){i=zw(e,2,92493,0)|0;w=KF(A)|0;u=w}else{u=0;i=0;w=0}l=(b|0)==0;s=(i|0)==0;f=sd(e)|0;A=0;while(1){if(!f)break;o=t[(t[f+16>>2]|0)+120>>2]|0;n=Ow(e,f)|0;while(1){if(!n)break;t[k+(A<<2)>>2]=o;t[d+(A<<2)>>2]=t[(t[(t[((t[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)+16>>2]|0)+120>>2];if(!l?(I=Pw(n,b)|0,t[p>>2]=m,(V3(I,101209,p)|0)==1):0)a=+c[m>>3];else{c[m>>3]=1.0;a=1.0}c[v+(A<<3)>>3]=a;if(!s){I=Pw(n,i)|0;t[E>>2]=m;if((V3(I,101209,E)|0)==1)a=+c[m>>3];else{c[m>>3]=1.0;a=1.0}c[u+(A<<3)>>3]=a}n=qw(e,n)|0;A=A+1|0}f=cd(e,f)|0}A=kK(y,B,B,k,d,v,1,8)|0;if(g)t[r>>2]=kK(y,B,B,k,d,w,1,8)|0;G2(k);G2(d);G2(v);if(u)G2(w)}else A=0;h=C;return A|0}function yj(e){e=e|0;var A=0,r=0,i=0.0,a=0,n=0.0,f=0.0,l=0.0,s=0,o=0,u=0,b=0.0,w=0.0;o=h;h=h+16|0;s=o;e:do{if(Cj(e,s)|0){A=t[(t[(sd(e)|0)+16>>2]|0)+132>>2]|0;n=+c[A>>3];i=+c[A+8>>3];A=sd(e)|0;while(1){if(!A)break;a=t[(t[A+16>>2]|0)+132>>2]|0;c[a>>3]=+c[a>>3]-n;a=a+8|0;c[a>>3]=+c[a>>3]-i;A=cd(e,A)|0}A=(n!=0.0|i!=0.0)&1;r=sd(e)|0;while(1){if(!r)break e;a=Ow(e,r)|0;if(a|0)break;r=cd(e,r)|0}u=t[a>>2]&3;r=t[(t[(t[((u|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;a=t[(t[(t[((u|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;f=+c[a+8>>3];l=+c[a>>3];i=+R(+(+c[r+8>>3]-f),+(+c[r>>3]-l));i=+c[s>>3]-i;c[s>>3]=i;if(i!=0.0){n=+W(+i);i=+Y(+i);A=sd(e)|0;while(1){if(!A){A=1;break e}s=t[(t[A+16>>2]|0)+132>>2]|0;w=+c[s>>3]-l;u=s+8|0;b=+c[u>>3]-f;c[s>>3]=w*n+l-b*i;c[u>>3]=w*i+f+b*n;A=cd(e,A)|0}}}else A=0}while(0);h=o;return A|0}function Cj(e,A){e=e|0;A=A|0;var r=0.0,a=0,n=0;n=h;h=h+16|0;a=n;e=Hw(e,92497)|0;do{if((e|0)!=0?(i[e>>0]|0)!=0:0){r=+e8(e,a);if((t[a>>2]|0)==(e|0))if(!((mx(e)|0)<<24>>24)){e=0;break}else r=0.0;while(1){if(!(r>180.0))break;r=r+-360.0}while(1){if(!(r<=-180.0))break;r=r+360.0}c[A>>3]=r*.017453292519943295;e=1}else e=0}while(0);h=n;return e|0}function Ij(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=Hw(e,92507)|0;return Zj(e,(i|0)==0?r|0?r:195059:i,A)|0}function Zj(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0.0;u=h;h=h+32|0;o=u+16|0;l=u+8|0;f=u;if((A|0)!=0?(i[A>>0]|0)!=0:0){a=17896;while(1){n=t[a+4>>2]|0;if(!n)break;if(!(S1(A,n,t[a+8>>2]|0)|0)){s=6;break}a=a+16|0}if((s|0)==6){if(!(t[a+12>>2]|0)){t[f>>2]=n;nw(0,92515,f)|0;a=17896}f=t[a>>2]|0;t[r>>2]=f;t[r+4>>2]=t[a+12>>2];if((f|0)==18)Gj(e,A+(t[a+8>>2]|0)|0,r)}if(!(t[a+4>>2]|0)){a=px(A,63)|0;if(a<<24>>24==63){t[l>>2]=A;nw(0,92557,l)|0;a=0}else a=a&255;a=(a|0)==0;t[r>>2]=a&1;a=a?92604:135709;s=15}}else{t[r>>2]=0;a=135709;s=15}if((s|0)==15)t[r+4>>2]=a;if(0){s=t[15712]|0;l=t[r+8>>2]|0;b=+c[r+16>>3];t[o>>2]=t[r+4>>2];t[o+4>>2]=l;c[o+8>>3]=b;a3(s,92612,o)|0}h=u;return r|0}function Gj(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;i=h;h=h+16|0;a=i;n=i+4|0;t[a>>2]=n;a=(V3(A,137395,a)|0)>0;A=t[n>>2]|0;t[r+8>>2]=a&(A|0)>-1?A:1e3;c[r+16>>3]=+wx(e,zw(e,0,92648,0)|0,-4.0,-1.0e10);h=i;return}function Lj(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0;f=h;h=h+16|0;n=f+8|0;a=f;do{if((gk(e)|0)>=2){r=yj(e)|0;r=(Qj(e)|0)+r|0;i=t[A>>2]|0;if(i){if(0){i=t[15712]|0;s=Mk(e)|0;l=t[A+4>>2]|0;t[a>>2]=s;t[a+4>>2]=l;a3(i,92977,a)|0;i=t[A>>2]|0}if(i>>>0>2){switch(i|0){case 3:{i=DU(e,1)|0;break}case 4:{i=DU(e,0)|0;break}case 6:case 5:{i=0;break}case 10:case 9:case 7:case 8:case 14:case 13:case 11:case 12:{wU(e,i)|0;i=0;break}case 15:{i=DU(e,-1)|0;break}default:{t[n>>2]=t[A+4>>2];nw(0,93e3,n)|0;i=0}}r=i+r|0;break}if(Dj(e)|0){zj();G2(t[46845]|0);t[46845]=0;break}Wj(e);if((t[A>>2]|0)==2)i=Yj()|0;else i=Fj()|0;if(i|0)Mj();zj();G2(t[46845]|0);t[46845]=0;r=i+r|0}}else r=0}while(0);h=f;return r|0}function Qj(e){e=e|0;var A=0,r=0.0,i=0,a=0,n=0.0,f=0,l=0,s=0,o=0;o=h;h=h+48|0;f=o+24|0;a=o+16|0;l=o;A=Hw(e,140742)|0;e:do{if(((A|0)!=0?(s=l+8|0,t[a>>2]=l,t[a+4>>2]=s,i=V3(A,105503,a)|0,(i|0)!=0):0)?(n=+c[l>>3],!(+Q(+n)<1.0e-09)):0){if((i|0)!=1){r=+c[s>>3];if(+Q(+r)<1.0e-09){A=0;break}}else{c[s>>3]=n;r=n}if(!(r==1.0&n==1.0)){if(0){a=t[15712]|0;c[f>>3]=n;c[f+8>>3]=r;a3(a,93160,f)|0}A=sd(e)|0;while(1){if(!A){A=1;break e}f=t[(t[A+16>>2]|0)+132>>2]|0;c[f>>3]=+c[f>>3]*+c[l>>3];f=f+8|0;c[f>>3]=+c[f>>3]*+c[s>>3];A=cd(e,A)|0}}else A=0}else A=0}while(0);h=o;return A|0}function Dj(e){e=e|0;var A=0,r=0,a=0,n=0.0,f=0.0,l=0,o=0,u=0,b=0;u=h;h=h+16|0;l=u;t[46854]=gk(e)|0;nT();t[46869]=$F((t[46854]|0)*96|0)|0;a=sd(e)|0;A=t[46869]|0;Kj(l,e);n=+s[l>>2];f=+s[l+4>>2];l=(i[l+8>>0]|0)==0;f=l?f:f*.013888888888888888;n=l?n:n*.013888888888888888;l=l?2:1;r=0;while(1){if((r|0)>=(t[46854]|0)){A=0;break}b=t[(t[a+16>>2]|0)+132>>2]|0;c[A+8>>3]=+c[b>>3];c[A+16>>3]=+c[b+8>>3];if(G5[l&3](A+40|0,a,n,f)|0){o=4;break}t[A+24>>2]=r;t[A+28>>2]=1;t[A>>2]=a;t[A+88>>2]=0;A=A+96|0;r=r+1|0;a=cd(e,a)|0}if((o|0)==4){G2(t[46869]|0);t[46869]=0;A=1}h=u;return A|0}function zj(){var e=0,A=0;e=t[46869]|0;A=0;while(1){if((A|0)>=(t[46854]|0))break;r_(e+40|0);e=e+96|0;A=A+1|0}A_();YT();G2(t[46869]|0);return}function Wj(e){e=e|0;var A=0,r=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0.0,g=0.0;b=h;h=h+32|0;o=b+16|0;u=b;w=t[46869]|0;f=+c[w+8>>3];s=+c[w+16>>3];a=t[46854]|0;A=w;r=1;n=+c[w+40>>3]+f;f=+c[w+56>>3]+f;l=+c[w+48>>3]+s;s=+c[w+64>>3]+s;while(1){if((r|0)>=(a|0))break;v=+c[A+104>>3];k=+c[A+112>>3];g=+c[A+136>>3]+v;d=+c[A+144>>3]+k;v=+c[A+152>>3]+v;k=+c[A+160>>3]+k;A=A+96|0;r=r+1|0;n=gf?v:f;l=ds?k:s}A=Hw(e,93100)|0;if(A|0?i[A>>0]|0:0)c[173]=+$3(A);v=+c[173];g=v*(s-l);v=v*(f-n);c[o>>3]=n-v;c[o+8>>3]=l-g;c[u>>3]=v+f;c[u+8>>3]=g+s;Xj(o,u);h=b;return}function Yj(){var e=0,A=0,r=0,i=0;r=h;h=h+16|0;A=r;if(Vj(0)|0){Nj();e=0;do{qj();e=e+1|0}while((Vj(e)|0)!=0);if(!0)e=1;else{i=t[15712]|0;t[A>>2]=e;a3(i,93028,A)|0;e=1}}else e=0;h=r;return e|0}function Fj(){var e=0,A=0,r=0,i=0,a=0,n=0,f=0,l=0;l=h;h=h+16|0;f=l+8|0;n=l;A=Vj(0)|0;if(!A)e=0;else{Nj();Rj(0);V_(0,1);e=0;i=0;r=0;while(1){Jj();r=r+1|0;a=Vj(r)|0;if(!a)break;A=(a|0)<(A|0)?0:i+1|0;t[46846]=1;if(A){Hj();e=e+1|0}Rj(1);V_(0,1);i=A;A=a}if(0){a=t[15712]|0;t[n>>2]=r;a3(a,93028,n)|0;t[f>>2]=e;a3(a,93055,f)|0}Pj();e=1}h=l;return e|0}function Mj(){var e=0,A=0,r=0,i=0;r=t[46854]|0;e=t[46869]|0;A=0;while(1){if((A|0)>=(r|0))break;i=t[(t[(t[e>>2]|0)+16>>2]|0)+132>>2]|0;c[i>>3]=+c[e+8>>3];c[i+8>>3]=+c[e+16>>3];e=e+96|0;A=A+1|0}return}function Vj(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+48|0;b=k+24|0;u=k+8|0;w=k;r=t[46869]|0;i=t[46854]|0;A=0;while(1){if((A|0)>=(i|0)){a=0;A=0;break}t[r+(A*96|0)+32>>2]=0;A=A+1|0}e:while(1){if((A|0)>=(i+-1|0))break;o=r+96|0;A=A+1|0;s=r+8|0;c=r+40|0;l=r+32|0;n=o;f=A;while(1){if((f|0)>=(i|0)){r=o;continue e}i=n+8|0;t[u>>2]=t[s>>2];t[u+4>>2]=t[s+4>>2];t[u+8>>2]=t[s+8>>2];t[u+12>>2]=t[s+12>>2];t[b>>2]=t[i>>2];t[b+4>>2]=t[i+4>>2];t[b+8>>2]=t[i+8>>2];t[b+12>>2]=t[i+12>>2];if(!(o_(u,c,b,n+40|0)|0))r=a;else{t[l>>2]=1;t[n+32>>2]=1;r=a+1|0}n=n+96|0;f=f+1|0;a=r;i=t[46854]|0}}if(0>1){b=t[15712]|0;t[w>>2]=e;t[w+4>>2]=a;a3(b,93081,w)|0}h=k;return a|0}function Nj(){var e=0,A=0,r=0,i=0.0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0;Oj();s=t[46848]|0;o=t[46869]|0;e=t[46845]|0;e:while(1){f=e;if(e>>>0>=s>>>0)break;A=e+4|0;if(A>>>0>=s>>>0){e=A;continue}a=t[A>>2]|0;r=t[e>>2]|0;n=+c[r>>3];if(+c[a>>3]!=n){e=A;continue}i=+c[r+8>>3];if(+c[a+8>>3]!=i){e=A;continue}l=e+8|0;a=2;while(1){if(l>>>0>=s>>>0)break;r=t[l>>2]|0;if(!(+c[r>>3]==n)){u=11;break}if(!(+c[r+8>>3]==i)){u=11;break}l=l+4|0;a=a+1|0}if((u|0)==11){u=0;r=t[l>>2]|0;if(+c[r+8>>3]==i){i=(+c[r>>3]-n)/+(a|0);r=(((l>>>0>A>>>0?l:A)+-1+(0-f)|0)>>>2)+1|0;e=1;while(1){if((e|0)==(r|0)){e=l;continue e}f=t[A>>2]|0;c[f>>3]=+c[f>>3]+i*+(e|0);e=e+1|0;A=A+4|0}}}while(1){if(A>>>0>=l>>>0){e=l;continue e}a=t[e>>2]|0;b=t[a+16>>2]|0;f=t[A>>2]|0;r=t[f+16>>2]|0;c[f>>3]=(+c[o+(b*96|0)+56>>3]-+c[o+(b*96|0)+40>>3]+ +c[o+(r*96|0)+56>>3]-+c[o+(r*96|0)+40>>3])*.5+ +c[a>>3];A=A+4|0;e=e+4|0}}return}function Rj(e){e=e|0;var A=0.0,r=0.0,i=0.0,a=0,n=0.0,f=0,l=0,s=0;if(e|0)Oj();f=t[46845]|0;l=t[f>>2]|0;r=+c[l>>3];c[23272]=r;s=t[46854]|0;a=1;n=+c[l>>3];while(1){if((a|0)>=(s|0))break;e=t[f+(a<<2)>>2]|0;A=+c[e>>3];if(A>3]}else{i=A;A=r}a=a+1|0;r=A;n=i>n?i:n}i=+c[l+8>>3];c[23273]=i;c[23275]=+c[(t[f+(s+-1<<2)>>2]|0)+8>>3]-i;c[23274]=n-r;return}function xj(){var e=0;e=t[46847]|0;if(e>>>0<(t[46848]|0)>>>0){t[46847]=e+4;e=t[e>>2]|0}else e=0;return e|0}function Jj(){var e=0,A=0,r=0;e=t[46869]|0;Sj();r=(t[46846]|0)==0;A=0;while(1){if((A|0)>=(t[46854]|0))break;if(!(r?!(t[e+32>>2]|0):0))jj(e);e=e+96|0;A=A+1|0}return}function Hj(){var e=0,A=0,r=0,i=0.0,a=0.0,t=0.0,n=0.0,f=0.0,l=0.0;e=h;h=h+32|0;r=e+16|0;A=e;l=+c[23268];f=+c[23266];n=+c[23269];a=+c[23267];i=(f-a)*.05;t=(l-n)*.05;c[A>>3]=t+l;c[A+8>>3]=f+i;c[r>>3]=n-t;c[r+8>>3]=a-i;Xj(r,A);h=e;return}function Pj(){gT();pT();B_();$U();return}function Xj(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0,t=0.0;t=+c[e>>3];c[23269]=t;a=+c[A>>3];c[23268]=a;r=+c[e+8>>3];c[23267]=r;i=+c[A+8>>3];c[23266]=i;c[23258]=t;c[23260]=t;c[23262]=a;c[23264]=a;c[23265]=i;c[23261]=i;c[23263]=r;c[23259]=r;return}function Sj(){var e=0,A=0.0,r=0.0,i=0.0,a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0.0,v=0.0,g=0.0,m=0.0;u=t[46869]|0;n=u+8|0;a=+fT(n,186064);i=+fT(n,186080);r=+fT(n,186096);e=1;A=+fT(n,186112);n=u;f=u;l=u;s=u;while(1){o=u+96|0;if((e|0)>=(t[46854]|0))break;k=u+104|0;d=+fT(k,186064);b=d>2]|0;b=s+8|0;A=0.0;r=0.0;i=0.0;s=t[s>>2]|0;while(1){a=t[s>>2]|0;if(!a)break;v=s+8|0;d=a+8|0;t[n>>2]=t[b>>2];t[n+4>>2]=t[b+4>>2];t[n+8>>2]=t[b+8>>2];t[n+12>>2]=t[b+12>>2];t[f>>2]=t[v>>2];t[f+4>>2]=t[v+4>>2];t[f+8>>2]=t[v+8>>2];t[f+12>>2]=t[v+12>>2];t[l>>2]=t[d>>2];t[l+4>>2]=t[d+4>>2];t[l+8>>2]=t[d+8>>2];t[l+12>>2]=t[d+12>>2];k=+Uj(n,f,l);t[n>>2]=t[b>>2];t[n+4>>2]=t[b+4>>2];t[n+8>>2]=t[b+8>>2];t[n+12>>2]=t[b+12>>2];t[f>>2]=t[v>>2];t[f+4>>2]=t[v+4>>2];t[f+8>>2]=t[v+8>>2];t[f+12>>2]=t[v+12>>2];t[l>>2]=t[d>>2];t[l+4>>2]=t[d+4>>2];t[l+8>>2]=t[d+8>>2];t[l+12>>2]=t[d+12>>2];Tj(n,f,l,o,u);A=+c[u>>3]*k+A;r=+c[o>>3]*k+r;i=k+i;s=a}c[e+8>>3]=r/i;c[e+16>>3]=A/i;h=w;return}function Uj(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0;i=+c[A+8>>3];t=+c[r+8>>3];a=+c[e+8>>3];return+(+Q(+((t-a)*+c[A>>3]+(i-t)*+c[e>>3]+ +c[r>>3]*(a-i)))*.5)}function Tj(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;c[i>>3]=(+c[A>>3]+ +c[e>>3]+ +c[r>>3])*.3333333333333333;c[a>>3]=(+c[A+8>>3]+ +c[e+8>>3]+ +c[r+8>>3])*.3333333333333333;return}function Oj(){var e=0,A=0,r=0,i=0;e=t[46845]|0;if(!e){e=$F(t[46854]<<2)|0;t[46845]=e;t[46848]=e+(t[46854]<<2)}r=t[46869]|0;YT();i=t[46854]|0;A=0;while(1){if((A|0)>=(i|0))break;t[e>>2]=r+8;t[r+88>>2]=0;t[r+28>>2]=1;r=r+96|0;e=e+4|0;A=A+1|0}_4(t[46845]|0,i,4,69);t[46847]=t[46845];return}function _j(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;e=t[e>>2]|0;A=t[A>>2]|0;r=+c[e+8>>3];i=+c[A+8>>3];if(!(ri)){i=+c[e>>3];r=+c[A>>3];if(ir&1}else e=1;else e=-1;return e|0}function qj(){var e=0,A=0,r=0,i=0;r=t[46854]|0;e=0;A=t[46869]|0;while(1){if((e|0)>=(r|0))break;i=A+8|0;c[i>>3]=+c[i>>3]*1.05;i=A+16|0;c[i>>3]=+c[i>>3]*1.05;e=e+1|0;A=A+96|0}return}function Kj(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0,o=0,u=0.0,b=0.0;o=h;h=h+48|0;l=o;f=o+24|0;r=Hw(A,93112)|0;if(!((r|0)!=0?($j(r,f,1.0,0.0)|0)!=0:0))a=3;do{if((a|0)==3){A=Hw(A,93116)|0;if(A|0?$j(A,f,.800000011920929,4.0)|0:0)break;s[f+4>>2]=4.0;s[f>>2]=4.0;i[f+8>>0]=1}}while(0);if(0){a=t[15712]|0;b=+s[f>>2];u=+s[f+4>>2];t[l>>2]=n[f+8>>0];c[l+8>>3]=b;c[l+16>>3]=u;a3(a,93121,l)|0}t[e>>2]=t[f>>2];t[e+4>>2]=t[f+4>>2];t[e+8>>2]=t[f+8>>2];h=o;return}function $j(e,A,r,a){e=e|0;A=A|0;r=+r;a=+a;var n=0,f=0,l=0,c=0,o=0,u=0,b=0,w=0,k=0.0;b=h;h=h+16|0;o=b;l=b+12|0;c=b+8|0;while(1){n=i[e>>0]|0;f=e+1|0;if(!(I1(n<<24>>24)|0))break;else e=f}w=n<<24>>24==43;n=A+8|0;i[n>>0]=w&1;t[o>>2]=l;t[o+4>>2]=c;switch(V3(w?f:e,93154,o)|0){case 0:{e=0;break}case 1:{t[c>>2]=t[l>>2];u=5;break}default:u=5}if((u|0)==5){do{if(i[n>>0]|0){if(r>1.0){k=+s[l>>2]/r;s[A>>2]=k>a?a:k;r=+s[c>>2]/r;r=r>a?a:r;break}if(r<1.0){k=+s[l>>2]/r;s[A>>2]=k>2]/r;r=r>2]=t[l>>2];r=+s[c>>2];break}}else{s[A>>2]=+s[l>>2]/r+1.0;r=+s[c>>2]/r+1.0}}while(0);s[A+4>>2]=r;e=1}h=b;return e|0}function eU(e,A){e=e|0;A=A|0;var r=0,i=0;i=h;h=h+32|0;r=i;if((gk(e)|0)<2)e=0;else{Zj(e,A,r)|0;e=Lj(e,r)|0}h=i;return e|0}function AU(e){e=e|0;return eU(e,Hw(e,92507)|0)|0}function rU(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0,o=0,u=0.0,b=0.0;o=h;h=h+48|0;l=o;f=o+24|0;r=Hw(A,93116)|0;if(!((r|0)!=0?($j(r,f,1.0,0.0)|0)!=0:0))a=3;do{if((a|0)==3){A=Hw(A,93112)|0;if(A|0?$j(A,f,1.25,3.200000047683716)|0:0)break;s[f+4>>2]=3.200000047683716;s[f>>2]=3.200000047683716;i[f+8>>0]=1}}while(0);if(0){a=t[15712]|0;b=+s[f>>2];u=+s[f+4>>2];t[l>>2]=n[f+8>>0];c[l+8>>3]=b;c[l+16>>3]=u;a3(a,93183,l)|0}t[e>>2]=t[f>>2];t[e+4>>2]=t[f+4>>2];t[e+8>>2]=t[f+8>>2];h=o;return}function iU(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+16|0;b=w;n=0;while(1){if((n|0)>=(r|0))break;t[i+(n<<2)>>2]=-1;n=n+1|0}t[i+(e<<2)>>2]=0;aU(a,e);e:do{if(!(t[A+8>>2]|0)){n=2147483647;A:while(1){if(!((tU(a,b)|0)<<24>>24))break e;l=t[b>>2]|0;n=t[i+(l<<2)>>2]|0;f=A+(l*20|0)|0;l=A+(l*20|0)+4|0;c=n+1|0;e=1;while(1){if((e|0)>=(t[f>>2]|0))continue A;o=t[(t[l>>2]|0)+(e<<2)>>2]|0;u=i+(o<<2)|0;if((t[u>>2]|0)<0){t[u>>2]=c;nU(a,o)|0}e=e+1|0}}}else{n=2147483647;A:while(1){if(!((tU(a,b)|0)<<24>>24))break e;c=t[b>>2]|0;n=t[i+(c<<2)>>2]|0;f=A+(c*20|0)|0;l=A+(c*20|0)+4|0;c=A+(c*20|0)+8|0;e=1;while(1){if((e|0)>=(t[f>>2]|0))continue A;o=t[(t[l>>2]|0)+(e<<2)>>2]|0;u=i+(o<<2)|0;if((t[u>>2]|0)<0){t[u>>2]=n+~~+s[(t[c>>2]|0)+(e<<2)>>2];nU(a,o)|0}e=e+1|0}}}}while(0);e=n+10|0;n=0;while(1){if((n|0)>=(r|0))break;f=i+(n<<2)|0;if((t[f>>2]|0)<0)t[f>>2]=e;n=n+1|0}h=w;return}function aU(e,A){e=e|0;A=A|0;t[t[e>>2]>>2]=A;t[e+12>>2]=0;t[e+8>>2]=1;return}function tU(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+12|0;i=t[r>>2]|0;if((i|0)<(t[e+8>>2]|0)){e=t[e>>2]|0;t[r>>2]=i+1;t[A>>2]=t[e+(i<<2)>>2];e=1}else e=0;return e|0}function nU(e,A){e=e|0;A=A|0;var r=0,i=0;r=e+8|0;i=t[r>>2]|0;if((i|0)<(t[e+4>>2]|0)){e=t[e>>2]|0;t[r>>2]=i+1;t[e+(i<<2)>>2]=A;e=1}else e=0;return e|0}function fU(e,A){e=e|0;A=A|0;t[e>>2]=$F(A<<2)|0;t[e+4>>2]=A;t[e+8>>2]=0;t[e+12>>2]=0;return}function lU(e){e=e|0;G2(t[e>>2]|0);return}function sU(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0;if(!0)n=0;else{G3(93216,25,1,t[15712]|0)|0;n=0}while(1){if((n|0)>=(e|0))break;f=A+(n<<2)|0;a=0;i=0.0;while(1){if((a|0)==(e|0))break;if((n|0)!=(a|0))i=+c[(t[f>>2]|0)+(a<<3)>>3]+i;a=a+1|0}c[(t[f>>2]|0)+(n<<3)>>3]=-i;n=n+1|0}return sO(A,r,e+-1|0)|0}function cU(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0.0;l=lP(A,A,0.0)|0;s=lP(A,A,0.0)|0;i=sd(e)|0;while(1){if(!i)break;r=ek(e,i)|0;while(1){if(!r)break;n=t[r>>2]&3;a=(t[t[((n|0)==3?r:r+48|0)+40>>2]>>2]|0)>>>4;n=(t[t[((n|0)==2?r:r+-48|0)+40>>2]>>2]|0)>>>4;if((a|0)!=(n|0)){o=-1.0/+c[(t[r+16>>2]|0)+136>>3];c[(t[l+(n<<2)>>2]|0)+(a<<3)>>3]=o;c[(t[l+(a<<2)>>2]|0)+(n<<3)>>3]=o}r=Ak(e,r,i)|0}i=cd(e,i)|0}f=sU(A,l,s)|0;e:do{if(f|0){a=e+16|0;i=0;while(1){if((i|0)>=(A|0))break e;n=s+(i<<2)|0;r=0;while(1){if((r|0)==(A|0))break;e=t[n>>2]|0;c[(t[(t[(t[a>>2]|0)+160>>2]|0)+(i<<2)>>2]|0)+(r<<3)>>3]=+c[(t[s+(r<<2)>>2]|0)+(r<<3)>>3]+ +c[e+(i<<3)>>3]+ +c[e+(r<<3)>>3]*-2.0;r=r+1|0}i=i+1|0}}}while(0);sP(l);sP(s);return f|0}function oU(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;t=t|0;var n=0.0,f=0.0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+16|0;s=v;u=i<<3;b=$F(u)|0;w=$F(u)|0;k=$F(u)|0;c=$F(u)|0;o=$F(u)|0;u=$F(u)|0;ZO(i,r,u);mO(i,u);mO(i,A);EO(e,i,A,c);yO(i,u,c,b);ZO(i,b,w);l=t+-1|0;r=0;n=+GO(i,b,b);while(1){if((r|0)>=(t|0)){r=0;break}if(!(+LO(i,b)>a)){r=0;break}EO(e,i,w,k);f=+GO(i,w,k);if(f==0.0){r=0;break}f=n/f;IO(i,w,f,o);CO(i,A,o,A);if((r|0)<(l|0)){IO(i,k,f,k);yO(i,b,k,b);f=+GO(i,b,b);if(n==0.0){d=7;break}IO(i,w,f/n,w);CO(i,b,w,w);n=f}r=r+1|0}if((d|0)==7){nw(1,93242,s)|0;r=1}G2(b);G2(w);G2(k);G2(c);G2(o);G2(u);h=v;return r|0}function uU(e,A,r,i,a,t,n){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;t=t|0;n=n|0;var f=0.0,l=0.0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+16|0;s=v;b=i<<3;w=$F(b)|0;k=$F(b)|0;c=$F(b)|0;o=$F(b)|0;u=$F(b)|0;b=$F(b)|0;ZO(i,r,b);if(n<<24>>24){mO(i,b);mO(i,A)}BO(e,i,A,o);yO(i,b,o,w);ZO(i,w,k);n=t+-1|0;r=0;f=+GO(i,w,w);while(1){if((r|0)>=(t|0)){r=0;break}if(!(+LO(i,w)>a)){r=0;break}BO(e,i,k,c);l=+GO(i,k,c);if(l==0.0){r=0;break}l=f/l;IO(i,k,l,u);CO(i,A,u,A);if((r|0)<(n|0)){IO(i,c,l,c);yO(i,w,c,w);l=+GO(i,w,w);if(f==0.0){d=9;break}IO(i,k,l/f,k);CO(i,w,k,k);f=l}r=r+1|0}if((d|0)==9){nw(1,93242,s)|0;r=1}G2(w);G2(k);G2(c);G2(o);G2(u);G2(b);h=v;return r|0}function bU(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;t=t|0;var n=0.0,f=0.0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;s=k;c=i<<2;o=KF(c)|0;u=KF(c)|0;b=KF(c)|0;c=KF(c)|0;DO(i,A);DO(i,r);zO(e,i,A,c);DO(i,c);WO(i,r,c,o);VO(i,o,u);l=t+-1|0;r=0;n=+NO(i,o,o);while(1){if((r|0)>=(t|0)){r=0;break}if(!(+JO(i,o)>a)){r=0;break}DO(i,u);DO(i,A);DO(i,o);zO(e,i,u,b);DO(i,b);f=+NO(i,u,b);if(f==0.0){r=0;break}f=n/f;FO(i,A,f,u);if((r|0)<(l|0)){FO(i,o,-f,b);f=+NO(i,o,o);if(n==0.0){w=7;break}MO(i,u,f/n,u);YO(i,o,u,u);n=f}r=r+1|0}if((w|0)==7){nw(1,93242,s)|0;r=1}G2(o);G2(u);G2(b);G2(c);h=k;return r|0}function hU(e,A,r,i,a,n,f,l,o,u){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;o=o|0;u=+u;var b=0,w=0,k=0.0,d=0,v=0,g=0,m=0,p=0.0,E=0,B=0,y=0,C=0,I=0.0,Z=0,G=0,L=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0.0;N=h;h=h+48|0;D=N+24|0;L=N+16|0;G=N+8|0;Z=N;F=N+40|0;M=N+36|0;W=N+32|0;v=f&4;t[F>>2]=0;t[M>>2]=0;e:do{if(t[e+16>>2]|0){w=0;b=0;while(1){if((w|0)>=(A|0))break;g=t[e+(w*20|0)>>2]|0;m=e+(w*20|0)+16|0;d=1;while(1){if((d|0)>=(g|0))break;if(!(b<<24>>24))b=+s[(t[m>>2]|0)+(d<<2)>>2]!=0.0;else b=1;d=d+1|0;b=b&1}w=w+1|0}if(b<<24>>24){C=(v|0)!=0;if(C){d=i+4|0;A:do{if((n|0)>2){b=n+-1|0;if((rP(e,A,r,d,a,b,f,l,15)|0)<0){b=-1;break e}w=i+(b<<2)|0;b=0;while(1){if((b|0)>=(A|0))break A;c[(t[w>>2]|0)+(b<<3)>>3]=+c[(t[d>>2]|0)+(b<<3)>>3];b=b+1|0}}}while(0);y=t[i>>2]|0;E=t[d>>2]|0;if((_O(e,A,E,A)|0)==0?(gb(e,A,.01,.1,E,F,M,W)|0)==0:0){B=t[W>>2]|0;if((B|0)<1){b=rP(e,A,r,i,a,n,f,l,o)|0;break}A:do{if(u>0.0){v=t[F>>2]|0;g=t[M>>2]|0;m=B+-1|0;k=0.0;d=0;while(1){if((d|0)>=(B|0))break A;b=t[g+(d<<2)>>2]|0;I=u-k-+c[E+(t[v+(b<<2)>>2]<<3)>>3]+ +c[E+(t[v+(b+-1<<2)>>2]<<3)>>3];k=(I<0.0?0.0:I)+k;if((d|0)<(m|0))w=t[g+(d+1<<2)>>2]|0;else w=A;while(1){if((b|0)>=(w|0))break;Y=E+(t[v+(b<<2)>>2]<<3)|0;c[Y>>3]=+c[Y>>3]+k;b=b+1|0}d=d+1|0}}}while(0);if((n|0)==2?(L_(e,A,E,y,+c[23294])|0)!=0:0){w=0;b=-1}else V=33}else{w=0;b=-1}}else{_H(e,A,n,i,a)|0;if(!(gb(e,A,.01,.1,0,F,M,W)|0))V=33;else{w=0;b=-1}}A:do{if((V|0)==33){if((A|0)==1){b=0;break e}Y=$F(t[W>>2]<<2)|0;if(!o){b=0;break e}if(0)lx();switch(l|0){case 2:{if(0)G3(93290,24,1,t[15712]|0)|0;b=AP(e,A)|0;V=46;break}case 1:{b=qH(e,A)|0;if(!b){nw(0,93315,Z)|0;nw(3,93364,G)|0;V=47}else z=b;break}case 3:{if(0)G3(93417,21,1,t[15712]|0)|0;b=KH(e,A)|0;V=46;break}default:V=47}if((V|0)==46)if(!b)V=47;else z=b;if((V|0)==47){if(0)G3(93439,26,1,t[15712]|0)|0;z=eP(e,A)|0}if(0){e=t[15712]|0;c[L>>3]=+sx();a3(e,93466,L)|0;G3(93478,25,1,e)|0;lx()}e=A+-1|0;y=(P(e,A)|0)/2|0;L=y+A|0;r:do{if(!C){k=1.0;w=0;while(1){if((w|0)>=(n|0))break;d=i+(w<<2)|0;b=0;while(1){if((b|0)>=(A|0))break;I=+Q(+ +c[(t[d>>2]|0)+(b<<3)>>3]);k=I>k?I:k;b=b+1|0}w=w+1|0}k=1.0/k;w=0;while(1){if((w|0)>=(n|0))break r;d=i+(w<<2)|0;b=0;while(1){if((b|0)>=(A|0))break;G=(t[d>>2]|0)+(b<<3)|0;c[G>>3]=+c[G>>3]*(10.0*k);b=b+1|0}w=w+1|0}}}while(0);r:do{if(u>0.0){p=+(y|0);b=0;k=0.0;v=0;i:while(1){if((v|0)>=(e|0))break;g=v+1|0;d=b;w=g;while(1){b=d+1|0;if((w|0)>=(A|0)){v=g;continue i}I=+jT(i,n,v,w);d=b;k=I/+s[z+(b<<2)>>2]+k;w=w+1|0}}k=k/p;b=0;while(1){if((b|0)>=(L|0)){b=0;break r}G=z+(b<<2)|0;s[G>>2]=+s[G>>2]*k;b=b+1|0}}else b=0}while(0);while(1){if((b|0)>=(n|0))break;mO(A,t[i+(b<<2)>>2]|0);b=b+1|0}w=t[i+4>>2]|0;k=+c[w>>3];b=0;while(1){if((b|0)>=(A|0))break;G=w+(b<<3)|0;c[G>>3]=+c[G>>3]-k;b=b+1|0}m=n<<2;G=$F(m)|0;B=A<<2;E=P(B,n)|0;d=$F(E)|0;b=0;while(1){if((b|0)>=(n|0))break;v=d+((P(b,A)|0)<<2)|0;t[G+(b<<2)>>2]=v;g=i+(b<<2)|0;w=0;while(1){if((w|0)>=(A|0))break;s[v+(w<<2)>>2]=+c[(t[g>>2]|0)+(w<<3)>>3];w=w+1|0}b=b+1|0}p=+(y|0);if(0){Z=t[15712]|0;c[D>>3]=+sx();a3(Z,93504,D)|0}HO(L,z);PO(L,z);Z=$F(A<<3)|0;RO(A,0.0,Z);b=0;d=0;while(1){if((d|0)>=(e|0)){b=A;w=0;d=0;break}v=A-d|0;k=0.0;w=1;while(1){b=b+1|0;if((w|0)>=(v|0))break;I=+s[z+(b<<2)>>2];D=Z+(w+d<<3)|0;c[D>>3]=+c[D>>3]-I;k=k+I;w=w+1|0}D=Z+(d<<3)|0;c[D>>3]=+c[D>>3]-k;d=d+1|0}while(1){if((w|0)>=(A|0))break;s[z+(d<<2)>>2]=+c[Z+(w<<3)>>3];D=b+d|0;b=b+-1|0;w=w+1|0;d=D}l=$F(m)|0;t[l>>2]=$F(E)|0;b=1;while(1){if((b|0)>=(n|0))break;t[l+(b<<2)>>2]=(t[l>>2]|0)+((P(b,A)|0)<<2);b=b+1|0}C=$F(B)|0;a=$F(B)|0;f=$F(L<<2)|0;w=d_(z,A)|0;r=E_(z,A,t[F>>2]|0,t[M>>2]|0,t[W>>2]|0)|0;y=l+4|0;d=0;I=1797693134862315708145274.0e284;b=0;while(1){if(!(d<<24>>24==0&(b|0)<(o|0)))break;RO(A,0.0,Z);XO(L,z,f);E=0;g=0;while(1){if((E|0)>=(e|0)){d=0;v=A;g=0;break}B=A-E+-1|0;xO(A,0.0,a);d=0;while(1){if((d|0)>=(n|0))break;W=G+(d<<2)|0;xO(B,+s[(t[W>>2]|0)+(E<<2)>>2],C);FO(B,C,-1.0,(t[W>>2]|0)+(E<<2)+4|0);HO(B,C);YO(B,C,a,a);d=d+1|0}SO(B,a);d=0;while(1){if((d|0)>=(B|0))break;v=a+(d<<2)|0;k=+s[v>>2];if(k>=3402823466385288598117041.0e14|k<0.0)s[v>>2]=0.0;d=d+1|0}m=E+1|0;k=0.0;d=g;v=0;while(1){d=d+1|0;if((v|0)>=(B|0))break;W=f+(d<<2)|0;R=+s[W>>2]*+s[a+(v<<2)>>2];s[W>>2]=R;W=Z+(m+v<<3)|0;c[W>>3]=+c[W>>3]-R;k=k+R;v=v+1|0}g=Z+(E<<3)|0;c[g>>3]=+c[g>>3]-k;E=m;g=d}while(1){if((d|0)>=(A|0)){d=0;break}s[f+(g<<2)>>2]=+c[Z+(d<<3)>>3];W=v+g|0;d=d+1|0;v=v+-1|0;g=W}while(1){if((d|0)>=(n|0)){k=0.0;d=0;break}zO(f,A,t[G+(d<<2)>>2]|0,t[l+(d<<2)>>2]|0);d=d+1|0}while(1){if((d|0)>=(n|0))break;k=+NO(A,t[G+(d<<2)>>2]|0,t[l+(d<<2)>>2]|0)+k;d=d+1|0}k=k*2.0+p;d=0;while(1){if((d|0)>=(n|0))break;W=G+(d<<2)|0;zO(z,A,t[W>>2]|0,C);k=k-+NO(A,t[W>>2]|0,C);d=d+1|0}R=+Q(+(k-I))/+Q(+(I+1.0e-10));d=((b|0)>1&k>I|R<+c[23294])&1;v=0;while(1){if((v|0)>=(n|0))break;if((v|0)!=1){if(bU(z,t[G+(v<<2)>>2]|0,t[l+(v<<2)>>2]|0,A,.001,A)|0){b=-1;break A}}else v_(r,t[y>>2]|0,G,n,1,15,Y,u)|0;v=v+1|0}I=k;b=b+1|0}G2(Y);p_(r);if(G|0){d=0;while(1){if((d|0)>=(n|0))break;g=G+(d<<2)|0;m=i+(d<<2)|0;v=0;while(1){if((v|0)>=(A|0))break;c[(t[m>>2]|0)+(v<<3)>>3]=+s[(t[g>>2]|0)+(v<<2)>>2];v=v+1|0}d=d+1|0}G2(t[G>>2]|0);G2(G)}if(l|0){G2(t[l>>2]|0);G2(l)}G2(C);G2(a);G2(Z);G2(z);G2(f)}}while(0);G2(t[F>>2]|0);G2(t[M>>2]|0);if(w){G2(t[w>>2]|0);G2(w)}}else V=10}else V=10}while(0);if((V|0)==10)b=rP(e,A,r,i,a,n,f,l,o)|0;h=N;return b|0}function wU(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+48|0;a=o+24|0;n=o+12|0;r=o;f=gk(e)|0;s=$F(f*48|0)|0;Kj(r,e);t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];r=sd(e)|0;i=s;while(1){if(!r)break;t[a>>2]=t[n>>2];t[a+4>>2]=t[n+4>>2];t[a+8>>2]=t[n+8>>2];kU(r,i,a);r=cd(e,r)|0;i=i+48|0}e:do{if(!(dU(s,f)|0))r=0;else{switch(A|0){case 9:{gU(e,s,f,70,1);pU(e,s,f,71,1);r=0;i=s;break}case 10:{pU(e,s,f,71,1);gU(e,s,f,70,1);r=0;i=s;break}case 7:{gU(e,s,f,72,1);pU(e,s,f,71,1);l=9;break}case 8:{l=9;break}case 13:{l=10;break}case 14:{pU(e,s,f,71,0);gU(e,s,f,70,0);r=0;i=s;break}case 12:{pU(e,s,f,73,0);gU(e,s,f,70,0);r=0;i=s;break}default:{gU(e,s,f,72,0);pU(e,s,f,71,0);r=0;i=s}}if((l|0)==9){pU(e,s,f,73,1);gU(e,s,f,70,1);l=10}if((l|0)==10){gU(e,s,f,70,0);pU(e,s,f,71,0);r=0;i=s}while(1){if((r|0)>=(f|0)){r=1;break e}n=t[i+16>>2]|0;l=t[(t[(t[i+20>>2]|0)+16>>2]|0)+132>>2]|0;c[l>>3]=+(t[i+12>>2]|0)*1.3888888888888887e-03;c[l+8>>3]=+(n|0)*1.3888888888888887e-03;r=r+1|0;i=i+48|0}}}while(0);G2(s);h=o;return r|0}function kU(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,o=0.0,u=0.0;a=t[e+16>>2]|0;l=t[a+132>>2]|0;o=+c[l>>3]*720.0;f=~~(o+(o>=0.0?.5:-.5));o=+c[l+8>>3]*720.0;l=~~(o+(o>=0.0?.5:-.5));if(!(i[r+8>>0]|0)){u=+c[a+32>>3]*72.0*(+s[r>>2]*5.0);o=+c[a+40>>3]*72.0*(+s[r+4>>2]*5.0);n=~~(u+(u>=0.0?.5:-.5));a=~~(o+(o>=0.0?.5:-.5))}else{o=+c[a+32>>3]*36.0;u=+c[a+40>>3]*36.0;n=~~((+s[r>>2]+ +(~~(o+(o>=0.0?.5:-.5))|0))*10.0);a=~~((+s[r+4>>2]+ +(~~(u+(u>=0.0?.5:-.5))|0))*10.0)}t[A+12>>2]=f;t[A+16>>2]=l;t[A+20>>2]=e;t[A+32>>2]=f-n;t[A+36>>2]=l-a;t[A+40>>2]=n+f;t[A+44>>2]=a+l;return}function dU(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=A+-1|0;r=0;e:while(1){if((r|0)>=(c|0)){e=0;break}s=e+48|0;r=r+1|0;n=e+32|0;f=e+40|0;l=e+36|0;a=e+44|0;e=s;i=r;while(1){if((i|0)>=(A|0)){e=s;continue e}if((((t[n>>2]|0)<=(t[e+40>>2]|0)?(t[e+32>>2]|0)<=(t[f>>2]|0):0)?(t[l>>2]|0)<=(t[e+44>>2]|0):0)?(t[e+36>>2]|0)<=(t[a>>2]|0):0){e=1;break e}e=e+48|0;i=i+1|0}}return e|0}function vU(e,A){e=e|0;A=A|0;if((t[e+36>>2]|0)>(t[A+44>>2]|0))e=0;else e=(t[A+36>>2]|0)<=(t[e+44>>2]|0)&1;return e|0}function gU(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;l=Uh(18168,t[4584]|0)|0;n=A;f=0;while(1){if((f|0)>=(r|0))break;t[n+8>>2]=t[n+12>>2];L5[t[l>>2]&63](l,n,1)|0;n=n+48|0;f=f+1|0}if(!a)f=ZU(e,l,i,74)|0;else f=IU(l,i,74)|0;VM(f,2,2147483647)|0;n=0;while(1){if((n|0)>=(r|0))break;a=A+12|0;e=t[(t[(t[A+24>>2]|0)+16>>2]|0)+232>>2]|0;i=e-(t[a>>2]|0)|0;t[a>>2]=e;a=A+32|0;t[a>>2]=(t[a>>2]|0)+i;a=A+40|0;t[a>>2]=(t[a>>2]|0)+i;A=A+48|0;n=n+1|0}GU(f);Ph(l)|0;return}function mU(e,A){e=e|0;A=A|0;if((t[e+32>>2]|0)>(t[A+40>>2]|0))e=0;else e=(t[A+32>>2]|0)<=(t[e+40>>2]|0)&1;return e|0}function pU(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;l=Uh(18168,t[4584]|0)|0;n=A;f=0;while(1){if((f|0)>=(r|0))break;t[n+8>>2]=t[n+16>>2];L5[t[l>>2]&63](l,n,1)|0;n=n+48|0;f=f+1|0}if(!a)f=ZU(e,l,i,75)|0;else f=IU(l,i,75)|0;VM(f,2,2147483647)|0;n=0;while(1){if((n|0)>=(r|0))break;a=A+16|0;e=t[(t[(t[A+24>>2]|0)+16>>2]|0)+232>>2]|0;i=e-(t[a>>2]|0)|0;t[a>>2]=e;a=A+36|0;t[a>>2]=(t[a>>2]|0)+i;a=A+44|0;t[a>>2]=(t[a>>2]|0)+i;A=A+48|0;n=n+1|0}GU(f);Ph(l)|0;return}function EU(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=e+32|0;i=A+32|0;if((t[e+36>>2]|0)<=(t[A+44>>2]|0)?(t[A+36>>2]|0)<=(t[e+44>>2]|0):0)if((t[e+40>>2]|0)<(t[i>>2]|0))e=1;else{n=CU(r,i)|0;n=n-(t[A+12>>2]|0)+(t[e+12>>2]|0)|0;A=t[A+16>>2]|0;e=t[e+16>>2]|0;a=(A|0)<(e|0);i=yU(r,i)|0;e=(n|0)<=(i-(a?e:A)+(a?A:e)|0)&1}else e=0;return e|0}function BU(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;r=e+32|0;i=A+32|0;if((t[r>>2]|0)<=(t[A+40>>2]|0)?(t[i>>2]|0)<=(t[e+40>>2]|0):0)if((t[e+44>>2]|0)<(t[A+36>>2]|0))e=1;else{n=yU(r,i)|0;n=n-(t[A+16>>2]|0)+(t[e+16>>2]|0)|0;A=t[A+12>>2]|0;e=t[e+12>>2]|0;a=(A|0)<(e|0);i=CU(r,i)|0;e=(n|0)<=(i-(a?e:A)+(a?A:e)|0)&1}else e=0;return e|0}function yU(e,A){e=e|0;A=A|0;return((t[e+12>>2]|0)-(t[e+4>>2]|0)+(t[A+12>>2]|0)-(t[A+4>>2]|0)|0)/2|0|0}function CU(e,A){e=e|0;A=A|0;return((t[e+8>>2]|0)-(t[e>>2]|0)+(t[A+8>>2]|0)-(t[A>>2]|0)|0)/2|0|0}function IU(e,A,r){e=e|0;A=A|0;r=r|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0;B=h;h=h+16|0;p=B;i[p>>0]=i[18588]|0;i[p+1>>0]=i[18589]|0;i[p+2>>0]=i[18590]|0;i[p+3>>0]=i[18591]|0;E=hk(93515,p,0)|0;Sd(E,137483,280,1)|0;n=Sh(e)|0;f=-2147483647;m=0;while(1){if(!n)break;v=t[n+8>>2]|0;g=m+((f|0)!=(v|0)&1)|0;n=t[n>>2]|0;f=v;m=g}v=E+16|0;g=(m<<3)+-4|0;u=0;s=0;n=0;f=0;o=0;d=Sh(e)|0;l=-2147483647;while(1){if(!d)break;k=t[d+8>>2]|0;if((l|0)!=(k|0)){w=gd(E,Mk(t[d+20>>2]|0)|0,1)|0;Sd(w,137447,304,1)|0;b=w+16|0;n=t[b>>2]|0;t[n+112>>2]=d;if(!f){t[(t[v>>2]|0)+192>>2]=w;u=w}else{t[(t[u+16>>2]|0)+164>>2]=w;u=f}t[n+176>>2]=0;c=s+1|0;l=KF(c<<2)|0;t[(t[b>>2]|0)+172>>2]=l;if(!o){s=c;c=w;o=w;n=w;f=u;l=k}else{l=o+16|0;t[(t[l>>2]|0)+184>>2]=0;s=KF((o|0)==(u|0)?g:m-s<<2)|0;t[(t[l>>2]|0)+180>>2]=s;s=lk(E,o,w,0,1)|0;Sd(s,137460,176,1)|0;n=t[s+16>>2]|0;a[n+170>>1]=10;t[n+156>>2]=1;n=t[l>>2]|0;f=t[n+180>>2]|0;if(!f)n=$F((t[n+184>>2]<<2)+8|0)|0;else n=AM(f,(t[n+184>>2]<<2)+8|0)|0;o=t[l>>2]|0;t[o+180>>2]=n;o=o+184|0;f=t[o>>2]|0;t[o>>2]=f+1;t[n+(f<<2)>>2]=s;n=t[l>>2]|0;t[(t[n+180>>2]|0)+(t[n+184>>2]<<2)>>2]=0;n=t[b>>2]|0;f=t[n+172>>2]|0;if(!f)n=$F((t[n+176>>2]<<2)+8|0)|0;else n=AM(f,(t[n+176>>2]<<2)+8|0)|0;f=t[b>>2]|0;t[f+172>>2]=n;f=f+176|0;o=t[f>>2]|0;t[f>>2]=o+1;t[n+(o<<2)>>2]=s;s=t[b>>2]|0;t[(t[s+172>>2]|0)+(t[s+176>>2]<<2)>>2]=0;s=c;c=w;o=w;n=w;f=u;l=k}}else{c=n;n=u}t[d+24>>2]=c;u=n;n=c;d=t[d>>2]|0}o=o+16|0;t[(t[o>>2]|0)+184>>2]=0;n=KF(4)|0;t[(t[o>>2]|0)+180>>2]=n;i[p>>0]=i[18588]|0;i[p+1>>0]=i[18589]|0;i[p+2>>0]=i[18590]|0;i[p+3>>0]=i[18591]|0;o=hk(93562,p,0)|0;n=Sh(e)|0;while(1){if(!n)break;p=gd(o,Mk(t[n+20>>2]|0)|0,1)|0;Sd(p,137447,304,1)|0;t[n+28>>2]=p;t[(t[p+16>>2]|0)+112>>2]=n;n=t[n>>2]|0}n=0;c=Sh(e)|0;f=-2147483647;e:while(1){if(!c)break;s=t[c+8>>2]|0;A:do{if((f|0)==(s|0))s=f;else{n=c;while(1){n=t[n>>2]|0;if(!n)break e;if((t[n+8>>2]|0)!=(s|0))break A}}}while(0);l=c+28|0;f=n;while(1){if(!f)break;if(Z5[A&127](c,f)|0)lk(o,t[l>>2]|0,t[f+28>>2]|0,0,1)|0;f=t[f>>2]|0}c=t[c>>2]|0;f=s}LU(o,E,r);vk(o)|0;h=B;return E|0}function ZU(e,A,r,n){e=e|0;A=A|0;r=r|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;v=h;h=h+16|0;d=v;i[d>>0]=i[18588]|0;i[d+1>>0]=i[18589]|0;i[d+2>>0]=i[18590]|0;i[d+3>>0]=i[18591]|0;d=hk(93515,d,0)|0;Sd(d,137483,280,1)|0;c=d+16|0;f=Sh(A)|0;l=0;while(1){if(!f)break;s=gd(d,Mk(t[f+20>>2]|0)|0,1)|0;Sd(s,137447,304,1)|0;w=s+16|0;u=t[w>>2]|0;t[u+112>>2]=f;t[f+24>>2]=s;t[u+176>>2]=0;u=KF(4)|0;b=t[w>>2]|0;t[b+172>>2]=u;t[b+184>>2]=0;b=KF(4)|0;t[(t[w>>2]|0)+180>>2]=b;if(!l)t[(t[c>>2]|0)+192>>2]=s;else t[(t[l+16>>2]|0)+164>>2]=s;f=t[f>>2]|0;l=s}o=Sh(A)|0;e:while(1){if(!o)break;u=o+32|0;b=o+24|0;w=o+20|0;f=o;while(1){f=t[f>>2]|0;if(!f)break;if(Z5[r&127](o,f)|0){l=Z5[n&127](u,f+32|0)|0;s=lk(d,t[b>>2]|0,t[f+24>>2]|0,0,1)|0;Sd(s,137460,176,1)|0;if((l|0)>=65536){k=13;break e}c=s+16|0;g=t[c>>2]|0;a[g+170>>1]=l;t[g+156>>2]=1;if(s|0?lk(e,t[w>>2]|0,t[f+20>>2]|0,0,0)|0:0)t[(t[c>>2]|0)+156>>2]=100}}o=t[o>>2]|0}if((k|0)==13)ge(93518,93534,254,93547);o=Sh(A)|0;while(1){if(!o)break;c=t[o+24>>2]|0;u=c+16|0;c=Ow(d,c)|0;while(1){if(!c)break;f=t[u>>2]|0;l=t[f+180>>2]|0;if(!l)f=$F((t[f+184>>2]<<2)+8|0)|0;else f=AM(l,(t[f+184>>2]<<2)+8|0)|0;l=t[u>>2]|0;t[l+180>>2]=f;l=l+184|0;s=t[l>>2]|0;t[l>>2]=s+1;t[f+(s<<2)>>2]=c;s=t[u>>2]|0;t[(t[s+180>>2]|0)+(t[s+184>>2]<<2)>>2]=0;s=c+-48|0;f=t[(t[((t[c>>2]&3|0)==2?c:s)+40>>2]|0)+16>>2]|0;l=t[f+172>>2]|0;if(!l)f=$F((t[f+176>>2]<<2)+8|0)|0;else f=AM(l,(t[f+176>>2]<<2)+8|0)|0;t[(t[(t[((t[c>>2]&3|0)==2?c:s)+40>>2]|0)+16>>2]|0)+172>>2]=f;n=t[(t[((t[c>>2]&3|0)==2?c:s)+40>>2]|0)+16>>2]|0;k=t[n+172>>2]|0;n=n+176|0;g=t[n>>2]|0;t[n>>2]=g+1;t[k+(g<<2)>>2]=c;g=t[(t[((t[c>>2]&3|0)==2?c:s)+40>>2]|0)+16>>2]|0;t[(t[g+172>>2]|0)+(t[g+176>>2]<<2)>>2]=0;c=qw(d,c)|0}o=t[o>>2]|0}h=v;return d|0}function GU(e){e=e|0;var A=0,r=0,i=0,a=0;a=sd(e)|0;while(1){if(!a)break;r=a+16|0;A=t[r>>2]|0;i=t[A+172>>2]|0;if(i){G2(i);A=t[r>>2]|0}A=t[A+180>>2]|0;if(A|0)G2(A);a=cd(e,a)|0}vk(e)|0;return}function LU(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0;c=sd(e)|0;while(1){if(!c)break;b=t[(t[c+16>>2]|0)+112>>2]|0;u=t[b+24>>2]|0;b=b+32|0;h=u+16|0;o=Ow(e,c)|0;while(1){if(!o)break;f=t[(t[(t[((t[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;w=Z5[r&127](b,f+32|0)|0;f=t[f+24>>2]|0;l=lk(A,u,f,0,1)|0;Sd(l,137460,176,1)|0;s=l+16|0;i=t[s>>2]|0;t[i+156>>2]=1;n=a[i+170>>1]|0;if((w|0)>(n&65535|0)){if(!(n<<16>>16)){i=t[h>>2]|0;n=t[i+180>>2]|0;if(!n)i=$F((t[i+184>>2]<<2)+8|0)|0;else i=AM(n,(t[i+184>>2]<<2)+8|0)|0;k=t[h>>2]|0;t[k+180>>2]=i;k=k+184|0;n=t[k>>2]|0;t[k>>2]=n+1;t[i+(n<<2)>>2]=l;i=t[h>>2]|0;t[(t[i+180>>2]|0)+(t[i+184>>2]<<2)>>2]=0;f=f+16|0;i=t[f>>2]|0;n=t[i+172>>2]|0;if(!n)i=$F((t[i+176>>2]<<2)+8|0)|0;else i=AM(n,(t[i+176>>2]<<2)+8|0)|0;n=t[f>>2]|0;t[n+172>>2]=i;n=n+176|0;k=t[n>>2]|0;t[n>>2]=k+1;t[i+(k<<2)>>2]=l;i=t[f>>2]|0;t[(t[i+172>>2]|0)+(t[i+176>>2]<<2)>>2]=0;i=t[s>>2]|0}a[i+170>>1]=w}o=qw(e,o)|0}c=cd(e,c)|0}return}function QU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return(t[A>>2]|0)-(t[r>>2]|0)|0}function DU(e,A){e=e|0;A=A|0;var r=0,a=0,n=0.0,f=0.0,l=0.0,o=0.0,u=0.0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0.0,I=0.0;y=h;h=h+64|0;m=y+24|0;v=y+16|0;d=y+52|0;k=y+40|0;g=y;E=gk(e)|0;B=$F(E*72|0)|0;Kj(k,e);l=+s[k>>2];o=+s[k+4>>2];k=(i[k+8>>0]|0)!=0;l=k?l*.013888888888888888:l;o=k?o*.013888888888888888:o;u=l*.5;b=o*.5;r=B;a=sd(e)|0;while(1){if(!a)break;w=t[a+16>>2]|0;n=+c[w+32>>3];if(k){f=+c[w+40>>3]*.5+o;n=n*.5+l}else{f=b*+c[w+40>>3];n=u*n}w=t[w+132>>2]|0;I=+c[w>>3];c[r>>3]=I;C=+c[w+8>>3];c[r+8>>3]=C;c[r+16>>3]=I-n;c[r+24>>3]=C-f;c[r+32>>3]=I+n;c[r+40>>3]=C+f;c[r+48>>3]=n;c[r+56>>3]=f;t[r+64>>2]=a;r=r+72|0;a=cd(e,a)|0}do{if((A|0)<0){n=+zU(B,E);if(n==0.0){G2(B);r=0;break}if(!0){l=n;f=n;p=19}else{p=t[15712]|0;c[v>>3]=n;a3(p,93565,v)|0;l=n;f=n;p=19}}else{a=WU(B,E,d)|0;r=t[d>>2]|0;if(!r){G2(a);G2(B);r=0;break}if(!A){FU(g,a,r);n=+c[g>>3];f=+c[g+8>>3]}else{f=+YU(a,r);n=f}G2(a);if(!0){l=n;p=19}else{p=t[15712]|0;c[m>>3]=n;c[m+8>>3]=f;a3(p,93579,m)|0;l=n;p=19}}}while(0);if((p|0)==19){r=0;a=B;while(1){if((r|0)>=(E|0))break;p=t[(t[(t[a+64>>2]|0)+16>>2]|0)+132>>2]|0;c[p>>3]=+c[a>>3]*l;c[p+8>>3]=+c[a+8>>3]*f;r=r+1|0;a=a+72|0}G2(B);r=1}h=y;return r|0}function zU(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0,t=0.0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;r=0.0;i=0;e:while(1){if((i|0)>=(A|0))break;d=e+72|0;i=i+1|0;u=e+16|0;b=e+8|0;h=e+56|0;w=e+48|0;k=e+32|0;s=e+24|0;o=e+40|0;f=i;l=d;while(1){if((f|0)>=(A|0)){e=d;continue e}if(((+c[u>>3]<=+c[l+32>>3]?+c[l+16>>3]<=+c[k>>3]:0)?+c[s>>3]<=+c[l+40>>3]:0)?+c[l+24>>3]<=+c[o>>3]:0){r=0.0;break e}a=+c[e>>3];t=+c[l>>3];if(a==t)n=E;else{n=+Q(+(a-t));n=(+c[l+48>>3]+ +c[w>>3])/n}a=+c[b>>3];t=+c[l+8>>3];if(a==t)a=E;else{a=+Q(+(a-t));a=(+c[l+56>>3]+ +c[h>>3])/a}n=ar?n:r}}return+r}function WU(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0,f=0,l=0.0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,B=0,y=0,C=0,I=0;s=$F((A<<4)+16|0)|0;u=0;i=0;b=s;h=A;f=s;e:while(1){if((i|0)>=(A|0))break;C=e+72|0;i=i+1|0;y=e+16|0;d=e+32|0;v=e+24|0;g=e+40|0;m=e+8|0;p=e+56|0;B=e+48|0;w=i;k=C;o=f;while(1){if((w|0)==(A|0)){e=C;f=o;continue e}if(((+c[y>>3]<=+c[k+32>>3]?+c[k+16>>3]<=+c[d>>3]:0)?+c[v>>3]<=+c[k+40>>3]:0)?+c[k+24>>3]<=+c[g>>3]:0){f=h+A|0;if((u|0)==(h|0)){s=AM(s,(f<<4)+16|0)|0;b=s;o=s}else f=h;a=+c[e>>3];n=+c[k>>3];if(!(a==n)){a=(+c[k+48>>3]+ +c[B>>3])/+Q(+(a-n));if(a<1.0){a=1.0;I=13}}else{a=E;I=13}if((I|0)==13)I=0;n=+c[m>>3];l=+c[k+8>>3];if(!(n==l)){n=(+c[k+56>>3]+ +c[p>>3])/+Q(+(n-l));if(n<1.0){n=1.0;I=16}}else{n=E;I=16}if((I|0)==16)I=0;u=u+1|0;c[b+(u<<4)>>3]=a;c[b+(u<<4)+8>>3]=n}else f=h;w=w+1|0;k=k+72|0;h=f}}I=AM(f,(u<<4)+16|0)|0;t[r>>2]=u;return I|0}function YU(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0,t=0.0,n=0.0;i=1;a=0.0;while(1){r=e+16|0;if((i|0)>(A|0))break;n=+c[r>>3];t=+c[e+24>>3];t=na?t:a;e=r}return+a}function FU(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,t=0,n=0,f=0.0;c[A>>3]=1.0;c[A+8>>3]=E;_4(A+16|0,r,16,76);n=$F((r<<4)+16|0)|0;c[n+(r<<4)>>3]=+c[A+(r<<4)>>3];t=r;i=1.0;while(1){c[n+(t<<4)+8>>3]=i;a=t+-1|0;if((t|0)<=0){i=E;a=0;t=0;break}c[n+(a<<4)>>3]=+c[A+(a<<4)>>3];f=+c[(+c[A+(t<<4)+8>>3]>i?A:n)+(t<<4)+8>>3];t=a;i=f}while(1){if((t|0)>(r|0))break;f=+c[n+(t<<4)+8>>3]*+c[n+(t<<4)>>3];A=f>3];c[e>>3]=+c[n+(a<<4)>>3];c[e+8>>3]=f;return}else ge(93596,93534,832,93616)}function MU(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e>>3];i=+c[A>>3];if(!(ri)){i=+c[e+8>>3];r=+c[A+8>>3];if(ir&1}else e=1;else e=-1;return e|0}function VU(e,A,r){e=e|0;A=A|0;r=r|0;r=h;h=h+16|0;A=r;t[A>>2]=93631;nw(1,93681,A)|0;h=r;return 0}function NU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;i=h;h=h+16|0;r=i;t[r>>2]=93631;nw(1,93709,r)|0;h=i;return 0}function RU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;e:do{switch(r|0){case 2:{i=$F(16)|0;a=$F(24)|0;t[a+8>>2]=0;t[a+4>>2]=i;t[a>>2]=2;t[i>>2]=0;t[i+4>>2]=1;r=i+8|0;t[a+16>>2]=r;t[a+20>>2]=0;t[a+12>>2]=2;t[r>>2]=1;t[i+12>>2]=0;break}case 1:{i=$F(4)|0;a=$F(12)|0;t[a+8>>2]=0;t[a+4>>2]=i;t[a>>2]=1;t[i>>2]=0;break}default:{VU(0,0,0)|0;e=(r|0)>0;if(!i){if(!e){a=0;break e}iA()}else{if(!e){a=0;break e}iA()}}}}while(0);return a|0}function xU(e){e=e|0;var A=0;if(e|0){A=t[e+4>>2]|0;if(A|0)G2(A);A=t[e+8>>2]|0;if(A|0)G2(A);G2(e)}return}function JU(e){e=e|0;var A=0;if(e|0){A=t[e+4>>2]|0;if(A|0)G2(A);A=t[e+8>>2]|0;if(A|0)G2(A);A=t[e+16>>2]|0;if(A|0)G2(A);G2(e)}return}function HU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;u=b+8|0;o=b;c=Q2(t[46849]|0,r<<2)|0;t[46849]=c;a=0;while(1){if((a|0)>=(r|0))break;t[i+(a<<2)>>2]=2147483647;a=a+1|0}t[i+(e<<2)>>2]=0;n=A+(e*20|0)|0;f=A+(e*20|0)+8|0;l=A+(e*20|0)+4|0;a=1;while(1){if((a|0)>=(t[n>>2]|0))break;t[i+(t[(t[l>>2]|0)+(a<<2)>>2]<<2)>>2]=~~+s[(t[f>>2]|0)+(a<<2)>>2];a=a+1|0}PU(u,e,c,i,r);f=-2147483639;while(1){if(!((XU(u,o,t[46849]|0,i)|0)<<24>>24)){a=0;break}a=t[o>>2]|0;e=t[i+(a<<2)>>2]|0;if((e|0)==2147483647){a=0;break}f=A+(a*20|0)|0;l=A+(a*20|0)+4|0;n=A+(a*20|0)+8|0;a=1;while(1){if((a|0)>=(t[f>>2]|0))break;SU(u,t[(t[l>>2]|0)+(a<<2)>>2]|0,e+~~+s[(t[n>>2]|0)+(a<<2)>>2]|0,t[46849]|0,i);a=a+1|0}f=e+10|0}while(1){if((a|0)>=(r|0))break;n=i+(a<<2)|0;if((t[n>>2]|0)==2147483647)t[n>>2]=f;a=a+1|0}jU(u);h=b;return}function PU(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;if((a|0)==1)l=0;else l=$F((a<<2)+-4|0)|0;t[e>>2]=l;s=a+-1|0;t[e+4>>2]=s;n=0;f=0;while(1){if((f|0)>=(a|0))break;if((f|0)!=(A|0)){t[l+(n<<2)>>2]=f;t[r+(f<<2)>>2]=n;n=n+1|0}f=f+1|0}n=(s|0)/2|0;while(1){if((n|0)<=-1)break;UU(e,n,r,i);n=n+-1|0}return}function XU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=e+4|0;if(!(t[a>>2]|0))e=0;else{n=t[e>>2]|0;t[A>>2]=t[n>>2];A=t[n+((t[a>>2]|0)+-1<<2)>>2]|0;t[n>>2]=A;t[r+(A<<2)>>2]=0;t[a>>2]=(t[a>>2]|0)+-1;UU(e,0,r,i);e=1}return e|0}function SU(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;n=a+(A<<2)|0;if((t[n>>2]|0)>(r|0)){s=i+(A<<2)|0;l=t[s>>2]|0;t[n>>2]=r;n=t[e>>2]|0;e=l;while(1){if((e|0)<=0)break;f=e>>>1;l=t[n+(f<<2)>>2]|0;if((t[a+(l<<2)>>2]|0)<=(r|0))break;t[n+(e<<2)>>2]=l;t[i+(l<<2)>>2]=e;e=f}t[n+(e<<2)>>2]=A;t[s>>2]=e}return}function jU(e){e=e|0;e=t[e>>2]|0;if(e|0)G2(e);return}function UU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;l=e+4|0;while(1){a=A<<1;n=a|1;f=t[l>>2]|0;if(!((a|0)<(f|0)?(s=t[e>>2]|0,(t[i+(t[s+(a<<2)>>2]<<2)>>2]|0)<(t[i+(t[s+(A<<2)>>2]<<2)>>2]|0)):0))a=A;if((n|0)<(f|0)){s=t[e>>2]|0;a=(t[i+(t[s+(n<<2)>>2]<<2)>>2]|0)<(t[i+(t[s+(a<<2)>>2]<<2)>>2]|0)?n:a}if((a|0)==(A|0))break;s=t[e>>2]|0;f=s+(a<<2)|0;n=t[f>>2]|0;s=s+(A<<2)|0;t[f>>2]=t[s>>2];t[s>>2]=n;t[r+(t[f>>2]<<2)>>2]=a;t[r+(t[s>>2]<<2)>>2]=A;A=a}return}function TU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,c=0.0,o=0,u=0,b=0,w=0;w=h;h=h+16|0;o=w+8|0;u=w;t[u>>2]=0;b=$F(r<<2)|0;a=0;while(1){if((a|0)>=(r|0))break;s[i+(a<<2)>>2]=3402823466385288598117041.0e14;a=a+1|0}s[i+(e<<2)>>2]=0.0;n=t[A+(e*20|0)>>2]|0;f=A+(e*20|0)+8|0;l=A+(e*20|0)+4|0;a=1;while(1){if((a|0)>=(n|0))break;t[i+(t[(t[l>>2]|0)+(a<<2)>>2]<<2)>>2]=t[(t[f>>2]|0)+(a<<2)>>2];a=a+1|0}OU(o,e,b,i,r);e:while(1){if(!((_U(o,u,b,i)|0)<<24>>24))break;a=t[u>>2]|0;c=+s[i+(a<<2)>>2];if(c==3402823466385288598117041.0e14)break;f=A+(a*20|0)|0;l=A+(a*20|0)+4|0;n=A+(a*20|0)+8|0;a=1;while(1){if((a|0)>=(t[f>>2]|0))continue e;qU(o,t[(t[l>>2]|0)+(a<<2)>>2]|0,+s[(t[n>>2]|0)+(a<<2)>>2]+c,b,i);a=a+1|0}}jU(o);G2(b);h=w;return}function OU(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;l=a+-1|0;s=$F(l<<2)|0;t[e>>2]=s;t[e+4>>2]=l;n=0;f=0;while(1){if((f|0)>=(a|0))break;if((f|0)!=(A|0)){t[s+(n<<2)>>2]=f;t[r+(f<<2)>>2]=n;n=n+1|0}f=f+1|0}n=(l|0)/2|0;while(1){if((n|0)<=-1)break;KU(e,n,r,i);n=n+-1|0}return}function _U(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=e+4|0;if(!(t[a>>2]|0))e=0;else{n=t[e>>2]|0;t[A>>2]=t[n>>2];A=t[n+((t[a>>2]|0)+-1<<2)>>2]|0;t[n>>2]=A;t[r+(A<<2)>>2]=0;t[a>>2]=(t[a>>2]|0)+-1;KU(e,0,r,i);e=1}return e|0}function qU(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;var n=0,f=0,l=0,c=0;n=a+(A<<2)|0;if(!(+s[n>>2]<=r)){c=i+(A<<2)|0;l=t[c>>2]|0;s[n>>2]=r;n=t[e>>2]|0;e=l;while(1){if((e|0)<=0)break;f=e>>>1;l=t[n+(f<<2)>>2]|0;if(!(+s[a+(l<<2)>>2]>r))break;t[n+(e<<2)>>2]=l;t[i+(l<<2)>>2]=e;e=f}t[n+(e<<2)>>2]=A;t[c>>2]=e}return}function KU(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,c=0;l=e+4|0;while(1){a=A<<1;n=a|1;f=t[l>>2]|0;if(!((a|0)<(f|0)?(c=t[e>>2]|0,+s[i+(t[c+(a<<2)>>2]<<2)>>2]<+s[i+(t[c+(A<<2)>>2]<<2)>>2]):0))a=A;if((n|0)<(f|0)?(c=t[e>>2]|0,+s[i+(t[c+(n<<2)>>2]<<2)>>2]<+s[i+(t[c+(a<<2)>>2]<<2)>>2]):0)a=n;if((a|0)==(A|0))break;c=t[e>>2]|0;f=c+(a<<2)|0;n=t[f>>2]|0;c=c+(A<<2)|0;t[f>>2]=t[c>>2];t[c>>2]=n;t[r+(t[f>>2]<<2)>>2]=a;t[r+(t[c>>2]<<2)>>2]=A;A=a}return}function $U(){jO(187400,48);t[46853]=0;return}function eT(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0.0,n=0.0,f=0;f=TO(187400)|0;t[f+32>>2]=e;t[f+36>>2]=A;G_(e);G_(A);t[f+24>>2]=0;t[f+28>>2]=0;a=+c[e>>3];n=+c[A>>3]-a;i=+c[e+8>>3];r=+c[A+8>>3]-i;a=r*i+n*a+(r*r+n*n)*.5;A=f+16|0;c[A>>3]=a;if((n>0.0?n:-n)>(r>0.0?r:-r)){c[f>>3]=1.0;i=r/n;r=n;e=f+8|0}else{c[f+8>>3]=1.0;i=n/r;e=f}c[e>>3]=i;c[A>>3]=a/r;A=t[46853]|0;t[f+40>>2]=A;t[46853]=A+1;return f|0}function AT(e){e=e|0;var A=0,r=0,i=0.0,a=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0;o=+c[e>>3];e:do{if(o==1.0){if(!(+c[e+8>>3]>=0.0)){A=t[e+28>>2]|0;r=t[e+24>>2]|0;if(!r)u=9;else u=5}else{A=t[e+24>>2]|0;r=t[e+28>>2]|0;if(!r)u=9;else u=5}do{if((u|0)==5){i=+c[r+8>>3];if(i>+c[23266])break e;a=+c[23267];if(!(i>=a)){f=a;i=+c[e+16>>3]-+c[e+8>>3]*a;break}else{f=i;i=+c[r>>3];break}}else if((u|0)==9){a=+c[23267];f=a;i=+c[e+16>>3]-+c[e+8>>3]*a}}while(0);do{if(A){n=+c[A+8>>3];if(n>3]-+c[e+8>>3]*a;break}else{a=+c[A>>3];break}}else{a=+c[23266];n=a;a=+c[e+16>>3]-+c[e+8>>3]*a}}while(0);l=+c[23268];A=i>l;r=a>l;s=+c[23269];if(!(A&r|i>3]-l)/+c[e+8>>3];i=l}if(i>3]-s)/+c[e+8>>3];i=s}if(r){n=(+c[e+16>>3]-l)/+c[e+8>>3];a=l}if(a>3]-s)/+c[e+8>>3];a=s;u=46}else u=46}}else{r=t[e+28>>2]|0;A=t[e+24>>2]|0;do{if(A){i=+c[A>>3];if(i>+c[23268])break e;n=+c[23269];if(!(i>=n)){f=+c[e+16>>3]-n*o;i=n;break}else{f=+c[A+8>>3];break}}else{n=+c[23269];f=+c[e+16>>3]-n*o;i=n}}while(0);do{if(r){a=+c[r>>3];if(a>3]-o*l;a=l;break}else{n=+c[r+8>>3];break}}else{a=+c[23268];n=+c[e+16>>3]-o*a}}while(0);l=+c[23266];A=f>l;r=n>l;s=+c[23267];if(!(A&r|f>3]-l)/o}if(f>3]-s)/o}if(r){n=l;a=(+c[e+16>>3]-l)/o}if(n>3]-s)/o;u=46}else u=46}}}while(0);if((u|0)==46)rT(e,i,f,a,n);return}function rT(e,A,r,i,a){e=e|0;A=+A;r=+r;i=+i;a=+a;var n=0;n=e+32|0;FT(t[n>>2]|0,A,r);FT(t[n>>2]|0,i,a);e=e+36|0;FT(t[e>>2]|0,A,r);FT(t[e>>2]|0,i,a);return}function iT(e,A,r){e=e|0;A=A|0;r=r|0;t[e+24+(A<<2)>>2]=r;G_(r);if(t[e+24+(1-A<<2)>>2]|0){AT(e);Z_(t[e+32>>2]|0);Z_(t[e+36>>2]|0);OO(e,187400)}return}function aT(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;w=h;h=h+16|0;b=w;o=A<<2;f=$F(P(o,r)|0)|0;n=t[i>>2]|0;o=$F(o)|0;u=t[e+8>>2]|0;if(n|0){G2(t[n>>2]|0);G2(n)}c=$F(r<<2)|0;t[i>>2]=c;n=0;while(1){if((n|0)>=(r|0))break;t[c+(n<<2)>>2]=f+((P(n,A)|0)<<2);n=n+1|0}s=(a|0)!=0;if(s)XT(e,A);i=(t8()|0)%(A|0)|0;fU(b,A);n=t[c>>2]|0;if(s){HU(i,e,A,n);a=0;n=0}else{iU(i,e,A,n,b);a=0;n=0}while(1){if((n|0)>=(A|0)){l=1;break}f=t[(t[c>>2]|0)+(n<<2)>>2]|0;t[o+(n<<2)>>2]=f;l=(f|0)>(a|0);a=l?f:a;i=l?n:i;n=n+1|0}while(1){if((l|0)>=(r|0))break;f=c+(l<<2)|0;n=t[f>>2]|0;if(s){HU(i,e,A,n);n=0;a=0}else{iU(i,e,A,n,b);n=0;a=0}while(1){if((n|0)>=(A|0))break;v=o+(n<<2)|0;k=t[v>>2]|0;d=t[(t[f>>2]|0)+(n<<2)>>2]|0;d=(k|0)<(d|0)?k:d;t[v>>2]=d;v=(d|0)>(a|0);k=v?n:i;n=n+1|0;a=v?d:a;i=k}l=l+1|0}G2(o);if(s)ST(e,A,u);h=w;return}function tT(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0.0,s=0,c=0;l=1.0/+(A|0);f=0;while(1){if((f|0)>=(r|0))break;s=e+(f<<2)|0;i=0.0;a=0;while(1){if((a|0)>=(A|0))break;i=i+ +(t[(t[s>>2]|0)+(a<<2)>>2]|0);a=a+1|0}n=~~(i*l);a=0;while(1){if((a|0)>=(A|0))break;c=(t[s>>2]|0)+(a<<2)|0;t[c>>2]=(t[c>>2]|0)-n;a=a+1|0}f=f+1|0}return}function nT(){t[46855]=~~+D(+ +((t[46854]|0)+4|0));return}function fT(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e>>3]-+c[A>>3];i=+c[e+8>>3]-+c[A+8>>3];return+(i*i+r*r)}function lT(e,A,r){e=e|0;A=A|0;r=r|0;c[e>>3]=+c[A>>3]-+c[r>>3];c[e+8>>3]=+c[A+8>>3]-+c[r+8>>3];return}function sT(e,A,r){e=e|0;A=A|0;r=r|0;c[e>>3]=+c[r>>3]+ +c[A>>3];c[e+8>>3]=+c[r+8>>3]+ +c[A+8>>3];return}function cT(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;i=+c[A+8>>3];a=+c[A>>3];return+((+c[r>>3]-a)*(+c[e+8>>3]-i)-(+c[e>>3]-a)*(+c[r+8>>3]-i))}function oT(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;i=h;h=h+48|0;a=i+32|0;n=i+16|0;f=i;t[f>>2]=t[e>>2];t[f+4>>2]=t[e+4>>2];t[f+8>>2]=t[e+8>>2];t[f+12>>2]=t[e+12>>2];t[n>>2]=t[A>>2];t[n+4>>2]=t[A+4>>2];t[n+8>>2]=t[A+8>>2];t[n+12>>2]=t[A+12>>2];t[a>>2]=t[r>>2];t[a+4>>2]=t[r+4>>2];t[a+8>>2]=t[r+8>>2];t[a+12>>2]=t[r+12>>2];r=+cT(f,n,a)>0.0&1;h=i;return r|0}function uT(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,h=0.0,w=0.0,k=0.0;h=+c[e>>3];w=+c[i+8>>3];k=+c[r+8>>3];u=(w-k)*h;b=+c[A>>3];o=+c[i>>3];s=+c[A+8>>3];f=+c[e+8>>3];l=s-f;t=+c[r>>3];n=u+b*(k-w)+l*o+t*(f-s);if(n==0.0)i=0;else{w=(t*(f-w)+u+(k-f)*o)/n;k=-(t*l+((k-s)*h+(f-k)*b))/n;c[a>>3]=w*(b-h)+h;c[a+8>>3]=l*w+f;i=k<=1.0&(k>=0.0&(w>=0.0&w<=1.0))&1}return i|0}function bT(e,A,r){e=e|0;A=A|0;r=+r;var i=0,a=0,n=0.0,f=0;t[e+20>>2]=A;G_(A);f=e+24|0;c[f>>3]=+c[A+8>>3]+r;i=t[46856]|0;i=i+((hT(e)|0)*40|0)|0;while(1){a=i+32|0;i=t[a>>2]|0;if(!i)break;r=+c[f>>3];n=+c[i+24>>3];if(r>n)continue;if(!(r==n))break;if(!(+c[A>>3]>+c[t[i+20>>2]>>3]))break}t[e+32>>2]=i;t[a>>2]=e;t[46857]=(t[46857]|0)+1;return}function hT(e){e=e|0;var A=0.0,r=0,i=0.0;r=t[46858]|0;i=+(r|0);A=(+c[e+24>>3]-+c[23273])/+c[23275]*i;do{if(!(A<0.0))if(!(A>=i)){e=~~A;break}else{e=r+-1|0;break}else e=0}while(0);if((e|0)<(t[46859]|0))t[46859]=e;return e|0}function wT(e){e=e|0;var A=0,r=0,i=0;r=e+20|0;if(t[r>>2]|0){A=t[46856]|0;A=A+((hT(e)|0)*40|0)|0;do{i=A+32|0;A=t[i>>2]|0}while((A|0)!=(e|0));t[i>>2]=t[e+32>>2];t[46857]=(t[46857]|0)+-1;Z_(t[r>>2]|0);t[r>>2]=0}return}function kT(){return(t[46857]|0)==0|0}function dT(e){e=e|0;var A=0,r=0,i=0,a=0.0;A=t[46856]|0;r=t[46859]|0;while(1){i=t[A+(r*40|0)+32>>2]|0;if(i|0)break;i=r+1|0;t[46859]=i;r=i}a=+c[i+24>>3];c[e>>3]=+c[t[i+20>>2]>>3];c[e+8>>3]=a;return}function vT(){var e=0,A=0;A=(t[46856]|0)+((t[46859]|0)*40|0)+32|0;e=t[A>>2]|0;t[A>>2]=t[e+32>>2];t[46857]=(t[46857]|0)+-1;return e|0}function gT(){G2(t[46856]|0);t[46856]=0;return}function mT(){var e=0,A=0,r=0;t[46857]=0;t[46859]=0;e=t[46855]|0;A=e<<2;t[46858]=A;r=t[46856]|0;if(!r){r=$F(e*160|0)|0;t[46856]=r;A=t[46858]|0}e=0;while(1){if((e|0)>=(A|0))break;t[r+(e*40|0)+32>>2]=0;e=e+1|0}return}function pT(){jO(187448,40);G2(t[46865]|0);t[46865]=0;return}function ET(){var e=0,A=0,r=0;jO(187448,40);e=t[46855]|0;A=e<<1;t[46866]=A;r=t[46865]|0;if(!r){r=$F(e<<3)|0;t[46865]=r;A=t[46866]|0}e=0;while(1){if((e|0)>=(A|0))break;t[r+(e<<2)>>2]=0;e=e+1|0}t[46860]=BT(0,0)|0;t[46861]=BT(0,0)|0;t[t[46860]>>2]=0;r=t[46861]|0;A=t[46860]|0;t[A+4>>2]=r;t[r>>2]=A;t[(t[46861]|0)+4>>2]=0;r=t[46865]|0;t[r>>2]=t[46860];t[r+((t[46866]|0)+-1<<2)>>2]=t[46861];return}function BT(e,A){e=e|0;A=A|0;var r=0;r=TO(187448)|0;t[r+8>>2]=e;i[r+16>>0]=A;t[r+32>>2]=0;t[r+20>>2]=0;t[r+12>>2]=0;return r|0}function yT(e,A){e=e|0;A=A|0;var r=0,a=0.0,n=0.0,f=0,l=0.0,s=0,o=0.0,u=0.0,b=0.0,h=0,w=0.0,k=0.0;f=t[e+8>>2]|0;s=t[A+8>>2]|0;do{if((!((f|0)==0|(s|0)==0)?(h=t[f+36>>2]|0,r=t[s+36>>2]|0,(h|0)!=(r|0)):0)?(l=+c[f>>3],a=+c[s+8>>3],n=+c[f+8>>3],o=+c[s>>3],u=a*l-o*n,!(u>-1.0e-10&u<1.0e-10)):0){w=+c[f+16>>3];k=+c[s+16>>3];b=(w*a-k*n)/u;l=(k*l-w*o)/u;a=+c[h+8>>3];n=+c[r+8>>3];do{if(a>3]<+c[r>>3]:0){r=h;break}e=A}}while(0);e=i[e+16>>0]|0;if(!(b>=+c[r>>3])){if(e<<24>>24==1){e=0;break}}else if(!(e<<24>>24)){e=0;break}e=y_()|0;t[e+20>>2]=0;c[e>>3]=b;c[e+8>>3]=l}else e=0}while(0);return e|0}function CT(e,A){e=e|0;A=A|0;var r=0.0,a=0,n=0.0,f=0.0,l=0.0,s=0,o=0.0,u=0,b=0,h=0.0,w=0;b=t[e+8>>2]|0;s=t[b+36>>2]|0;o=+c[A>>3];h=+c[s>>3];u=o>h;w=i[e+16>>0]|0;if(u)if(!(w<<24>>24))e=1;else a=4;else if(w<<24>>24==1)e=0;else a=4;if((a|0)==4){r=+c[b>>3];e:do{if(r==1.0){r=+c[A+8>>3];n=r-+c[s+8>>3];f=o-h;l=+c[b+8>>3];A=l<0.0;do{if(u?l>=0.0:A){if(n>=l*f){e=1;break e}}else{e=l*r+o>+c[b+16>>3];if(A)if(e){e=0;break e}else break;else if(e)break;else{e=0;break e}}}while(0);h=h-+c[t[b+32>>2]>>3];e=l*(f*f-n*n)>3]-o*r;l=+c[A+8>>3]-f;h=o-h;o=f-+c[s+8>>3];e=l*l>o*o+h*h}}while(0);e=(e^w<<24>>24!=0)&1}return e|0}function IT(e,A){e=e|0;A=A|0;t[A>>2]=e;e=e+4|0;t[A+4>>2]=t[e>>2];t[t[e>>2]>>2]=A;t[e>>2]=A;return}function ZT(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;a=t[46866]|0;A=~~((+c[e>>3]-+c[23272])/+c[23274]*+(a|0));A=(A|0)>0?A:0;a=(A|0)<(a|0)?A:a+-1|0;A=GT(a)|0;if(!A){r=1;while(1){A=GT(a-r|0)|0;if(A|0)break;A=GT(r+a|0)|0;if(A|0)break;r=r+1|0}t[46867]=(t[46867]|0)+r}t[46868]=(t[46868]|0)+1;i=t[46860]|0;r=t[46861]|0;e:do{if((A|0)==(i|0))n=9;else{if((A|0)!=(r|0)?(CT(A,e)|0)!=0:0){n=9;break}while(1){A=t[A>>2]|0;if((A|0)==(i|0))break e;if(CT(A,e)|0){i=A;break}}}}while(0);if((n|0)==9){while(1){A=t[A+4>>2]|0;if((A|0)==(r|0))break;if(!(CT(A,e)|0))break;else n=9}i=t[A>>2]|0}if((a|0)>0?(a|0)<((t[46866]|0)+-1|0):0){A=(t[46865]|0)+(a<<2)|0;r=t[A>>2]|0;if(r|0){n=r+12|0;t[n>>2]=(t[n>>2]|0)+-1}t[A>>2]=i;n=i+12|0;t[n>>2]=(t[n>>2]|0)+1}return i|0}function GT(e){e=e|0;var A=0,r=0;if((e|0)>-1&(t[46866]|0)>(e|0)?(r=(t[46865]|0)+(e<<2)|0,A=t[r>>2]|0,(A|0)!=0):0){if((t[A+8>>2]|0)==(-2|0)){t[r>>2]=0;e=A+12|0;r=(t[e>>2]|0)+-1|0;t[e>>2]=r;if(!r){OO(A,187448);A=0}else A=0}}else A=0;return A|0}function LT(e){e=e|0;var A=0,r=0;A=e+4|0;r=t[e>>2]|0;t[r+4>>2]=t[A>>2];t[t[A>>2]>>2]=r;t[e+8>>2]=-2;return}function QT(e){e=e|0;return t[e+4>>2]|0}function DT(e){e=e|0;return t[e>>2]|0}function zT(e){e=e|0;var A=0;A=t[e+8>>2]|0;if(!A)e=187672;else e=(i[e+16>>0]|0)==0?A+32|0:A+36|0;return t[e>>2]|0}function WT(e){e=e|0;var A=0;A=t[e+8>>2]|0;if(!A)e=187672;else e=(i[e+16>>0]|0)==0?A+36|0:A+32|0;return t[e>>2]|0}function YT(){jO(187480,24);return}function FT(e,A,r){e=e|0;A=+A;r=+r;var i=0,a=0,n=0,f=0,l=0;l=h;h=h+32|0;f=l;n=(t[46869]|0)+((t[e+16>>2]|0)*96|0)+88|0;a=t[n>>2]|0;c[f+8>>3]=A;c[f+16>>3]=r;i=MT(e,f,a)|0;do{if(i|0){if((i|0)<0){f=TO(187480)|0;c[f+8>>3]=A;c[f+16>>3]=r;t[f>>2]=a;t[n>>2]=f;break}while(1){i=t[a>>2]|0;n=MT(e,f,i)|0;if((n|0)>0)a=i;else break}if(n|0){f=TO(187480)|0;c[f+8>>3]=A;c[f+16>>3]=r;t[a>>2]=f;t[f>>2]=i}}}while(0);h=l;return}function MT(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,t=0.0,n=0.0,f=0.0,l=0.0,s=0.0;do{if(r){a=+c[A+8>>3];f=+c[r+8>>3];i=+c[A+16>>3];t=+c[r+16>>3];if(!(a==f&i==t)){s=+c[e>>3];l=a-s;a=+c[e+8>>3];n=i-a;f=f-s;i=t-a;if(!(l>=0.0)){if(f>=0.0){A=1;break}a=i/f;i=n/l;if(ia){A=1;break}A=l>f?-1:1;break}if(!(f<0.0)){A=f>0.0;if(!(l>0.0)){if(A){A=!(n<=0.0)?1:-1;break}if(n0.0?-1:1;break}a=i/f;i=n/l;if(ia){A=1;break}A=l>2]|0;r=e+(r*20|0)+4|0;A=1;e=0;while(1){if((A|0)>=(a|0))break;n=e+((t[i+(t[(t[r>>2]|0)+(A<<2)>>2]<<2)>>2]|0)>0&1)|0;A=A+1|0;e=n}return e|0}function NT(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=e+(A*20|0)|0;A=e+(A*20|0)+4|0;e=1;while(1){if((e|0)>=(t[i>>2]|0))break;t[r+(t[(t[A>>2]|0)+(e<<2)>>2]<<2)>>2]=1;e=e+1|0}return}function RT(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=e+(A*20|0)|0;A=e+(A*20|0)+4|0;e=1;while(1){if((e|0)>=(t[i>>2]|0))break;t[r+(t[(t[A>>2]|0)+(e<<2)>>2]<<2)>>2]=0;e=e+1|0}return}function xT(e,A){e=e|0;A=A|0;if(!(t[e+8>>2]|0))e=HT(e,A)|0;else e=JT(e,A)|0;return e|0}function JT(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=A<<2;i=$F(P(a,A)|0)|0;a=$F(a)|0;r=0;while(1){if((r|0)>=(A|0)){r=0;break}t[a+(r<<2)>>2]=i+((P(r,A)|0)<<2);r=r+1|0}while(1){if((r|0)>=(A|0))break;HU(r,e,A,t[a+(r<<2)>>2]|0);r=r+1|0}return a|0}function HT(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=h;h=h+16|0;a=f;n=A<<2;i=$F(P(n,A)|0)|0;n=$F(n)|0;r=0;while(1){if((r|0)>=(A|0))break;t[n+(r<<2)>>2]=i+((P(r,A)|0)<<2);r=r+1|0}fU(a,A);r=0;while(1){if((r|0)>=(A|0))break;iU(r,e,A,t[n+(r<<2)>>2]|0,a);r=r+1|0}lU(a);h=f;return n|0}function PT(e,A){e=e|0;A=A|0;var r=0,i=0;i=t[e+8>>2]|0;XT(e,A);r=JT(e,A)|0;ST(e,A,i);return r|0}function XT(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,c=0,o=0,u=0,b=0;o=$F(A<<2)|0;r=0;i=0;while(1){if((r|0)>=(A|0))break;c=(t[e+(r*20|0)>>2]|0)+i|0;r=r+1|0;i=c}i=$F(i<<2)|0;r=0;while(1){if((r|0)>=(A|0))break;t[o+(r<<2)>>2]=0;r=r+1|0}a=0;while(1){if((a|0)>=(A|0))break;t[e+(a*20|0)+8>>2]=i;NT(e,a,o);n=e+(a*20|0)|0;f=t[n>>2]|0;l=e+(a*20|0)+4|0;c=f+-2|0;r=1;while(1){if((r|0)>=(f|0))break;u=t[(t[l>>2]|0)+(r<<2)>>2]|0;b=t[e+(u*20|0)>>2]|0;s[i+(r<<2)>>2]=+(c+b-((VT(e,0,u,o)|0)<<1)|0);r=r+1|0}RT(e,a,o);i=i+(t[n>>2]<<2)|0;a=a+1|0}G2(o);return}function ST(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=e+8|0;G2(t[i>>2]|0);t[i>>2]=0;e:do{if(r|0){i=0;while(1){if((i|0)>=(A|0))break e;t[e+(i*20|0)+8>>2]=r;a=r+(t[e+(i*20|0)>>2]<<2)|0;i=i+1|0;r=a}}}while(0);return}function jT(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0.0,f=0.0,l=0;a=0;n=0.0;while(1){if((a|0)>=(A|0))break;l=t[e+(a<<2)>>2]|0;f=+c[l+(r<<3)>>3]-+c[l+(i<<3)>>3];a=a+1|0;n=f*f+n}return+ +D(+n)}function UT(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;if((i|0)>(r|0)){t[46873]=e;_4(A+(r<<2)|0,1-r+i|0,4,77)}return}function TT(e,A){e=e|0;A=A|0;var r=0.0,i=0.0,a=0;a=t[46873]|0;i=+s[a+(t[e>>2]<<2)>>2];r=+s[a+(t[A>>2]<<2)>>2];return(ir&1)|0}function OT(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;f=h;h=h+16|0;a=f;if((r|0)<(i|0)){_T(e,A,r,i,a);n=t[a>>2]|0;a=n+-1|0;OT(e,A,r,a);n=n+1|0;OT(e,A,n,i);if(!(qT(e,A,r,a)|0))OT(e,A,r,a);if(!(qT(e,A,n,i)|0))OT(e,A,n,i)}h=f;return}function _T(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0.0,u=0,b=0;n=t8()|0;n=A+(((((t8()|0)<<16|n)>>>0)%((1-r+i|0)>>>0)|0)+r<<2)|0;l=t[n>>2]|0;s=A+(r<<2)|0;t[n>>2]=t[s>>2];t[s>>2]=l;o=+c[e+(l<<3)>>3];n=r+1|0;r=i;e:while(1){if((n|0)>=(r|0))break;while(1){if((n|0)>=(r|0))break;if(!(+c[e+(t[A+(n<<2)>>2]<<3)>>3]<=o))break;n=n+1|0}while(1){if((n|0)>=(r|0))continue e;i=A+(r<<2)|0;f=t[i>>2]|0;if(!(+c[e+(f<<3)>>3]>o))break;r=r+-1|0}b=A+(n<<2)|0;u=t[b>>2]|0;t[b>>2]=f;t[i>>2]=u;n=n+1|0;r=r+-1|0}b=n+((+c[e+(t[A+(n<<2)>>2]<<3)>>3]>o)<<31>>31)|0;t[a>>2]=b;b=A+(b<<2)|0;t[s>>2]=t[b>>2];t[b>>2]=l;return}function qT(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;n=1;while(1){a=r+1|0;if(!((r|0)<(i|0)&(n|0)!=0))break;n=+c[e+(t[A+(r<<2)>>2]<<3)>>3]>+c[e+(t[A+(a<<2)>>2]<<3)>>3]?0:n;r=a}return n|0}function KT(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0.0;B=h;h=h+16|0;p=4;E=Z2(40)|0;t[E>>2]=0;g=B;d=0;m=re(23,A*40|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,E|0,p|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)!=1){r=0;w=0;while(1){if((r|0)>=(A|0))break;k=(t[(t[e+(r<<2)>>2]|0)+4>>2]|0)+w|0;r=r+1|0;w=k}d=0;k=re(23,w*24|0)|0;r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,E|0,p|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)!=1){r=0;o=0;while(1){if((o|0)>=(A|0))break;u=m+(o*40|0)|0;t[u>>2]=k+(r*24|0);b=e+(o<<2)|0;a=0;n=1797693134862315708145274.0e284;f=-1797693134862315708145274.0e284;l=-1797693134862315708145274.0e284;s=1797693134862315708145274.0e284;while(1){i=t[b>>2]|0;if((a|0)>=(t[i+4>>2]|0))break;i=t[i>>2]|0;C=+c[i+(a<<4)>>3];y=+c[i+(a<<4)+8>>3];c[k+(r*24|0)>>3]=C;c[k+(r*24|0)+8>>3]=y;t[k+(r*24|0)+16>>2]=u;t[k+(r*24|0)+20>>2]=0;a=a+1|0;r=r+1|0;n=nC?f:C;l=l>y?l:y;s=s>2]=k+((r+-1|0)*24|0);c[m+(o*40|0)+8>>3]=n;c[m+(o*40|0)+16>>3]=s;c[m+(o*40|0)+24>>3]=f;c[m+(o*40|0)+32>>3]=l;o=o+1|0}t[g>>2]=w;t[g+4>>2]=A;E=G6(187496,1,E|0,p|0)|0;p=G;d=0;r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,E|0,p|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)==1){r=G;b=k;o=k;u=m}else{r=0;b=k;o=k;u=m}}else{r=G;b=0;o=k;u=m}}else{r=G;b=0;o=0;u=0}while(1){if(r|0){d=0;oe(105,m|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,E|0,p|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)==1){a=u;w=o;k=b;r=G;u=a;o=w;b=k;continue}d=0;oe(105,o|0);r=d;d=0;if((r|0)!=0&(v|0)!=0){i=L6(t[r>>2]|0,E|0,p|0)|0;if(!i)aA(r|0,v|0);G=v}else i=-1;if((i|0)==1){a=u;w=o;k=b;r=G;u=a;o=w;b=k;continue}else{i=17;break}}d=0;r=ie(78,b|0,g|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,E|0,p|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){a=u;w=o;k=b;r=G;u=a;o=w;b=k;continue}if(!r){d=0;r=te(24,e|0,A|0,u|0)|0;i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,E|0,p|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){a=u;w=o;k=b;r=G;u=a;o=w;b=k;continue}}d=0;oe(105,m|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,E|0,p|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){a=u;w=o;k=b;r=G;u=a;o=w;b=k;continue}d=0;oe(105,o|0);i=d;d=0;if((i|0)!=0&(v|0)!=0){a=L6(t[i>>2]|0,E|0,p|0)|0;if(!a)aA(i|0,v|0);G=v}else a=-1;if((a|0)==1){a=u;w=o;k=b;r=G;u=a;o=w;b=k}else{i=24;break}}if((i|0)==17)r=0;else if((i|0)==24)r=(r|0)==0&1;G2(E|0);h=B;return r|0}function $T(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+16|0;k=p;b=p+8|0;w=p+4|0;t[A+8>>2]=0;m=$F(t[A>>2]<<2)|0;a=t[A>>2]|0;i=0;while(1){if((i|0)>=(a|0))break;t[m+(i<<2)>>2]=e+(i*24|0);i=i+1|0}_4(m,a,4,79);o=0;n=0;a=0;f=0;e:while(1){if((o|0)>=(t[A>>2]|0)){v=0;r=n;g=f;break}u=m+(o<<2)|0;i=t[u>>2]|0;t[b>>2]=i;e=t[i+16>>2]|0;if((t[e>>2]|0)==(i|0))i=t[e+4>>2]|0;else i=i+-24|0;t[w>>2]=i;c=0;e=n;s=f;while(1){if((c|0)>=2)break;switch(AO(b,w)|0){case-1:{n=0;f=e;while(1){if((n|0)>=(s|0))break;l=rO(t[f>>2]|0,i)|0;if(l|0){v=l;r=e;g=s;break e}n=n+1|0;f=t[f+4>>2]|0}n=$F(12)|0;if(!s){a=0;e=n}else t[a+4>>2]=n;t[n+8>>2]=a;t[n>>2]=i;t[n+4>>2]=0;t[i+20>>2]=n;f=s+1|0;break}case 1:{i=i+20|0;n=t[i>>2]|0;if(!n){d=19;break e}do{if((s|0)!=1){if((n|0)==(e|0)){e=t[e+4>>2]|0;t[e+8>>2]=0;break}if((n|0)==(a|0)){a=t[a+8>>2]|0;t[a+4>>2]=0;break}else{l=n+4|0;f=t[n+8>>2]|0;t[f+4>>2]=t[l>>2];t[(t[l>>2]|0)+8>>2]=f;break}}else{e=0;a=0}}while(0);G2(n);t[i>>2]=0;n=a;f=s+-1|0;break}default:{n=a;f=s}}i=t[u>>2]|0;a=t[i+16>>2]|0;if((i|0)==(t[a+4>>2]|0))a=t[a>>2]|0;else a=i+24|0;t[w>>2]=a;c=c+1|0;a=n;s=f}o=o+1|0;n=e;f=s}if((d|0)==19){nw(1,93727,k)|0;aA(187496,1)}i=0;while(1){if((i|0)>=(g|0))break;d=t[r+4>>2]|0;G2(r);i=i+1|0;r=d}G2(m);h=p;return v|0}function eO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0,f=0,l=0.0,s=0.0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0.0,g=0.0,m=0,p=0.0,E=0.0,B=0.0,y=0.0,C=0,I=0,Z=0,G=0,L=0,Q=0.0;L=h;h=h+48|0;b=L+24|0;u=L+16|0;m=L;i=0;e:while(1){if((i|0)>=(A|0)){i=0;break}C=t[e+(i<<2)>>2]|0;I=t[C>>2]|0;t[m>>2]=t[I>>2];t[m+4>>2]=t[I+4>>2];t[m+8>>2]=t[I+8>>2];t[m+12>>2]=t[I+12>>2];I=i+1|0;Z=r+(i*40|0)+8|0;w=r+(i*40|0)+24|0;k=r+(i*40|0)+32|0;n=r+(i*40|0)+16|0;i=I;while(1){if((i|0)>=(A|0)){i=I;continue e}f=t[e+(i<<2)>>2]|0;l=+c[Z>>3];s=+c[r+(i*40|0)+24>>3];o=!(l<=s);a=+c[r+(i*40|0)+8>>3];if((((!(o|!(l>=a))?(d=+c[n>>3],v=+c[r+(i*40|0)+32>>3],d<=v):0)?(g=+c[r+(i*40|0)+16>>3],d>=g):0)?(Q=+c[w>>3],!(!(Q<=s)|!(Q>=a))):0)?(Q=+c[k>>3],!(!(Q<=v)|!(Q>=g))):0){t[u>>2]=t[f>>2];t[u+4>>2]=t[f+4>>2];t[b>>2]=t[m>>2];t[b+4>>2]=t[m+4>>2];t[b+8>>2]=t[m+8>>2];t[b+12>>2]=t[m+12>>2];if(Wl(u,b)|0){i=1;break e}}else G=11;if((((((G|0)==11?(G=0,p=+c[w>>3],!(!(a<=p)|!(a>=l))):0)?(E=+c[r+(i*40|0)+16>>3],B=+c[k>>3],E<=B):0)?(y=+c[n>>3],!(!(E>=y)|(!(s<=p)|o))):0)?(Q=+c[r+(i*40|0)+32>>3],!(!(Q<=B)|!(Q>=y))):0)?(o=t[f>>2]|0,t[u>>2]=t[C>>2],t[u+4>>2]=t[C+4>>2],t[b>>2]=t[o>>2],t[b+4>>2]=t[o+4>>2],t[b+8>>2]=t[o+8>>2],t[b+12>>2]=t[o+12>>2],Wl(u,b)|0):0){i=1;break e}i=i+1|0}}h=L;return i|0}function AO(e,A){e=e|0;A=A|0;var r=0.0,i=0;i=t[e>>2]|0;e=t[A>>2]|0;r=+c[i>>3]-+c[e>>3];if(!(r!=0.0)){r=+c[i+8>>3]-+c[e+8>>3];if(r==0.0)e=0;else e=r>0.0?1:-1}else e=r>0.0?1:-1;return e|0}function rO(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0;o=h;h=h+64|0;n=o+32|0;f=o+24|0;l=o+16|0;s=o;a=o+48|0;iO(e,A,a);r=a+8|0;i=t[r>>2]|0;do{if((i|0)>0)r=0;else{if((i|0)<0){iO(A,e,a);r=t[r>>2]|0;if((r|0)>0){r=0;break}if((r|0)<0)r=3;else{r=t[a>>2]|0;r=aO(A,e,(r|0)>-1?r:0-r|0)|0}if(!(tO(e,A,f,l,r)|0)){r=0;break}}else{r=t[a>>2]|0;if((r|0)==(t[a+4>>2]|0)){r=aO(e,A,0)|0;r=(aO(e,A,(r|0)<=(aO(e,A,1)|0)&1)|0)<<1}else r=aO(e,A,(r|0)>-1?r:0-r|0)|0;if(!(tO(e,A,f,l,r)|0)){r=0;break}}c[s>>3]=+c[f>>3];c[s+8>>3]=+c[l>>3];t[n>>2]=t[s>>2];t[n+4>>2]=t[s+4>>2];t[n+8>>2]=t[s+8>>2];t[n+12>>2]=t[s+12>>2];r=nO(e,A,n)|0}}while(0);h=o;return r|0}function iO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0;f=+c[e>>3];l=+c[e+8>>3];i=t[e+16>>2]|0;if((t[i+4>>2]|0)==(e|0)){e=t[i>>2]|0;i=e}else{i=e+24|0;e=e+24|0}n=+c[i>>3]-f;a=+c[e+8>>3]-l;i=t[A+16>>2]|0;if((t[i+4>>2]|0)==(A|0)){e=t[i>>2]|0;i=e}else{i=A+24|0;e=A+24|0}s=+c[i>>3]-f;o=+c[e+8>>3]-l;l=(+c[A+8>>3]-l)*n-(+c[A>>3]-f)*a;A=l==0.0?0:l>0.0?1:-1;t[r>>2]=A;l=o*n-s*a;e=l==0.0?0:l>0.0?1:-1;t[r+4>>2]=e;t[r+8>>2]=P(e,A)|0;return}function aO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0;s=+c[e>>3];o=+c[e+8>>3];a=t[e+16>>2]|0;if((t[a+4>>2]|0)==(e|0))e=t[a>>2]|0;else e=e+24|0;l=+c[e>>3];f=+c[e+8>>3];do{if(r){e=t[A+16>>2]|0;if((t[e+4>>2]|0)==(A|0)){A=t[e>>2]|0;break}else{A=A+24|0;break}}}while(0);n=+c[A>>3];i=+c[A+8>>3];if(s==l)if(s==n)A=(lO(o,i,f)|0)!=-1&1;else A=0;else A=lO(s,n,l)|0;return A|0}function tO(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,h=0.0,w=0.0;e:do{if((a|0)<1)n=0;else{b=+c[e>>3];w=+c[e+8>>3];n=t[e+16>>2]|0;if((t[n+4>>2]|0)==(e|0))n=t[n>>2]|0;else n=e+24|0;o=+c[n>>3];l=+c[n+8>>3];u=+c[A>>3];h=+c[A+8>>3];n=t[A+16>>2]|0;if((t[n+4>>2]|0)==(A|0))n=t[n>>2]|0;else n=A+24|0;s=+c[n>>3];f=+c[n+8>>3];A:do{switch(a|0){case 3:{if(b==o){c[r>>3]=b;f=(h-f)/(u-s)*(b-s)+f;break A}if(u==s){c[r>>3]=u;f=(w-l)/(b-o)*(u-o)+l;break A}else{s=(h-f)/(u-s);o=(w-l)/(b-o);h=h-s*u;w=w-o*b;f=s-o;c[r>>3]=(w-h)/f;f=(s*w-h*o)/f;break A}}case 2:{if((aO(e,A,0)|0)==-1)if((aO(A,e,1)|0)==-1){a=(aO(A,e,0)|0)==-1;o=a?o:b;s=u;l=a?l:w;f=h}else{o=s;s=u;l=f;f=h}else if((aO(e,A,1)|0)!=-1)if((aO(A,e,0)|0)==-1){s=b;f=w}else{n=0;break e}else{o=u;l=h}c[r>>3]=(s+o)*.5;f=(f+l)*.5;break}case 1:if((h-w)*(b-o)==(u-b)*(w-l)){c[r>>3]=u;f=h;break A}else{c[r>>3]=s;break A}default:{n=1;break e}}}while(0);c[i>>3]=f;n=1}}while(0);return n|0}function nO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0;v=h;h=h+16|0;k=v;b=+c[e>>3];w=+c[e+8>>3];i=t[e+16>>2]|0;if((t[i+4>>2]|0)==(e|0))i=t[i>>2]|0;else i=e+24|0;o=+c[i>>3];l=+c[i+8>>3];s=+c[A>>3];u=+c[A+8>>3];i=t[A+16>>2]|0;if((t[i+4>>2]|0)==(A|0))i=t[i>>2]|0;else i=A+24|0;f=+c[i>>3];n=+c[i+8>>3];e:do{if(!(b!=o&s!=f)){do{if(b==o){a=+c[r>>3];if(b==a?w==+c[r+8>>3]:0)break;if(!(o==a)){d=18;break e}if(!(l==+c[r+8>>3])){d=18;break e}}}while(0);if(s==f){a=+c[r>>3];if(s==a?u==+c[r+8>>3]:0){i=0;break}if(f==a?n==+c[r+8>>3]:0)i=0;else d=18}else i=0}else d=18}while(0);if((d|0)==18)if(0>1){i=t[15712]|0;w=+c[r+8>>3];c[k>>3]=+c[r>>3];c[k+8>>3]=w;a3(i,93756,k)|0;fO(1,e);fO(2,A);i=1}else i=1;h=v;return i|0}function fO(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0.0,l=0,s=0,o=0.0,u=0.0;s=h;h=h+48|0;l=s;a=t[15712]|0;n=+c[A>>3];f=+c[A+8>>3];r=t[A+16>>2]|0;if((t[r+4>>2]|0)==(A|0)){r=t[r>>2]|0;i=r}else{i=A+24|0;r=A+24|0}u=+c[i>>3];o=+c[r+8>>3];t[l>>2]=e;c[l+8>>3]=n;c[l+16>>3]=f;c[l+24>>3]=u;c[l+32>>3]=o;a3(a,93784,l)|0;h=s;return}function lO(e,A,r){e=+e;A=+A;r=+r;return(e==A|A==r?0:(e>3]=0.0;i=i+1|0}c[a+(e<<3)>>3]=1.0;pb(t[A+(e<<2)>>2]|0,a,r);e=e+1|0}G2(a);a=0;while(1){if((a|0)>=(r|0)){e=1;break e}i=A+(a<<2)|0;e=0;while(1){if((e|0)==(a|0))break;l=(t[i>>2]|0)+(e<<3)|0;f=+c[l>>3];n=(t[A+(e<<2)>>2]|0)+(a<<3)|0;c[l>>3]=+c[n>>3];c[n>>3]=f;e=e+1|0}a=a+1|0}}}while(0);return e|0}function cO(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0.0,s=0,o=0.0,u=0,b=0,h=0,w=0,k=0,d=0,v=0;k=A<<3;w=$F(k)|0;k=$F(k)|0;d=A*30|0;b=(r|0)<(A|0)?r:A;h=A+-1|0;u=(n|0)==0;r=0;f=0;e:while(1){if((f|0)>=(b|0))break;s=t[i+(f<<2)>>2]|0;do{A:do{if(u)r=0;else{r=0;while(1){if((r|0)==(A|0)){r=0;break A}c[s+(r<<3)>>3]=+((t8()|0)%100|0|0);r=r+1|0}}}while(0);while(1){if((r|0)==(f|0))break;n=t[i+(r<<2)>>2]|0;uO(s,0,h,-+oO(n,0,h,s),n);r=r+1|0}l=+bO(s,0,h)}while(l<1.0e-10);hO(s,0,h,1.0/l,s);r=0;do{wO(k,0,h,s);kO(e,A,A,s,w);wO(s,0,h,w);n=0;while(1){if((n|0)==(f|0))break;v=t[i+(n<<2)>>2]|0;uO(s,0,h,-+oO(v,0,h,s),v);n=n+1|0}v=r;r=r+1|0;l=+bO(s,0,h);if(!((v|0)<(d|0)&!(l<1.0e-10)))break e;hO(s,0,h,1.0/l,s);o=+oO(s,0,h,k)}while(+Q(+o)<.999);c[a+(f<<3)>>3]=o*l;f=f+1|0}while(1){if((f|0)>=(b|0))break;s=t[i+(f<<2)>>2]|0;n=0;while(1){if((n|0)>=(A|0)){n=0;break}c[s+(n<<3)>>3]=+((t8()|0)%100|0|0);n=n+1|0}while(1){if((n|0)>=(f|0))break;v=t[i+(n<<2)>>2]|0;uO(s,0,h,-+oO(v,0,h,s),v);n=n+1|0}hO(s,0,h,1.0/+bO(s,0,h),s);c[a+(f<<3)>>3]=0.0;f=f+1|0}u=b+-1|0;f=0;while(1){if((f|0)>=(u|0))break;e=a+(f<<3)|0;A=f+1|0;l=+c[e>>3];n=f;s=A;while(1){if((s|0)>=(b|0))break;o=+c[a+(s<<3)>>3];v=l>2]|0);v=i+(n<<2)|0;wO(t[s>>2]|0,0,h,t[v>>2]|0);wO(t[v>>2]|0,0,h,w);c[a+(n<<3)>>3]=+c[e>>3];c[e>>3]=l;f=A}G2(w);G2(k);return(r|0)<=(d|0)|0}function oO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0.0;t=0.0;a=1-A+r|0;i=i+(A<<3)|0;r=e+(A<<3)|0;while(1){if(!a)break;t=+c[i>>3]*+c[r>>3]+t;a=a+-1|0;i=i+8|0;r=r+8|0}return+t}function uO(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;var t=0;t=1-A+r|0;a=a+(A<<3)|0;r=e+(A<<3)|0;while(1){if(!t)break;c[r>>3]=+c[r>>3]+ +c[a>>3]*i;t=t+-1|0;a=a+8|0;r=r+8|0}return}function bO(e,A,r){e=e|0;A=A|0;r=r|0;return+ +D(+ +oO(e,A,r,e))}function hO(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=a|0;var t=0;t=1-A+r|0;a=a+(A<<3)|0;r=e+(A<<3)|0;while(1){if(!t)break;c[r>>3]=+c[a>>3]*i;t=t+-1|0;a=a+8|0;r=r+8|0}return}function wO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=1-A+r|0;i=i+(A<<3)|0;r=e+(A<<3)|0;while(1){if(!a)break;c[r>>3]=+c[i>>3];a=a+-1|0;i=i+8|0;r=r+8|0}return}function kO(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0,l=0,s=0;l=0;while(1){if((l|0)>=(A|0))break;s=e+(l<<2)|0;n=0.0;f=0;while(1){if((f|0)>=(r|0))break;n=+c[i+(f<<3)>>3]*+c[(t[s>>2]|0)+(f<<3)>>3]+n;f=f+1|0}c[a+(l<<3)>>3]=n;l=l+1|0}return}function dO(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,o=0.0,u=0,b=0,h=0,w=0.0;l=t[n>>2]|0;if(!l){h=r<<2;f=Z2(P(h,a)|0)|0;h=Z2(h)|0}else{h=r<<2;f=Q2(t[l>>2]|0,P(h,a)|0)|0;h=Q2(l,h)|0}t[n>>2]=h;l=0;while(1){if((l|0)>=(r|0)){n=0;break}t[h+(l<<2)>>2]=f;l=l+1|0;f=f+(a<<2)|0}while(1){if((n|0)>=(r|0))break;u=e+(n<<2)|0;b=h+(n<<2)|0;l=0;while(1){if((l|0)<(a|0)){f=0;o=0.0}else break;while(1){if((f|0)>=(i|0))break;w=+c[(t[u>>2]|0)+(f<<3)>>3]*+s[(t[A+(f<<2)>>2]|0)+(l<<2)>>2]+o;f=f+1|0;o=w}s[(t[b>>2]|0)+(l<<2)>>2]=o;l=l+1|0}n=n+1|0}return}function vO(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,o=0.0,u=0,b=0,h=0;l=t[n>>2]|0;if(!l){f=Z2(P(r<<3,a)|0)|0;h=Z2(r<<2)|0}else{f=Q2(t[l>>2]|0,P(r<<3,a)|0)|0;h=Q2(l,r<<2)|0}t[n>>2]=h;l=0;while(1){if((l|0)>=(r|0)){n=0;break}t[h+(l<<2)>>2]=f;l=l+1|0;f=f+(a<<3)|0}while(1){if((n|0)>=(r|0))break;u=e+(n<<2)|0;b=h+(n<<2)|0;l=0;while(1){if((l|0)<(a|0)){o=0.0;f=0}else break;while(1){if((f|0)>=(i|0))break;o=+c[(t[u>>2]|0)+(f<<3)>>3]*+s[(t[A+(f<<2)>>2]|0)+(l<<2)>>2]+o;f=f+1|0}c[(t[b>>2]|0)+(l<<3)>>3]=o;l=l+1|0}n=n+1|0}return}function gO(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0.0,o=0,u=0,b=0,h=0,w=0,k=0;f=t[a>>2]|0;if(!f){n=Z2(P(r*20|0,i)|0)|0;k=Z2(r<<2)|0}else{n=Q2(t[f>>2]|0,P(r*20|0,i)|0)|0;k=Q2(f,r<<2)|0}t[a>>2]=k;f=0;while(1){if((f|0)>=(r|0)){a=0;break}t[k+(f<<2)>>2]=n;f=f+1|0;n=n+(i<<2)|0}while(1){if((a|0)>=(r|0))break;o=t[e+(a*20|0)+4>>2]|0;u=t[e+(a*20|0)+8>>2]|0;b=t[e+(a*20|0)>>2]|0;h=k+(a<<2)|0;n=0;while(1){if((n|0)>=(i|0))break;w=A+(n<<2)|0;l=0.0;f=0;while(1){if((f|0)>=(b|0))break;l=+c[(t[w>>2]|0)+(t[o+(f<<2)>>2]<<3)>>3]*+s[u+(f<<2)>>2]+l;f=f+1|0}s[(t[h>>2]|0)+(n<<2)>>2]=l;n=n+1|0}a=a+1|0}return}function mO(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0;r=0.0;i=A;a=e;while(1){if(!a)break;r=+c[i>>3]+r;i=i+8|0;a=a+-1|0}r=r/+(e|0);while(1){if(!e)break;c[A>>3]=+c[A>>3]-r;A=A+8|0;e=e+-1|0}return}function pO(e,A){e=e|0;A=A|0;var r=0;r=0;while(1){if((r|0)>=(e|0))break;c[A+(r<<3)>>3]=+((t8()|0)%500|0|0);r=r+1|0}mO(e,A);return}function EO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0,f=0,l=0,o=0,u=0;f=0;while(1){if((f|0)>=(A|0))break;l=t[e+(f*20|0)>>2]|0;o=e+(f*20|0)+8|0;u=e+(f*20|0)+4|0;a=0.0;n=0;while(1){if((n|0)>=(l|0))break;a=+c[r+(t[(t[u>>2]|0)+(n<<2)>>2]<<3)>>3]*+s[(t[o>>2]|0)+(n<<2)>>2]+a;n=n+1|0}c[i+(f<<3)>>3]=a;f=f+1|0}return}function BO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0,f=0,l=0;f=0;while(1){if((f|0)>=(A|0))break;l=e+(f<<2)|0;a=0.0;n=0;while(1){if((n|0)==(A|0))break;a=+c[r+(n<<3)>>3]*+s[(t[l>>2]|0)+(n<<2)>>2]+a;n=n+1|0}c[i+(f<<3)>>3]=a;f=f+1|0}return}function yO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=0;while(1){if((a|0)>=(e|0))break;c[i+(a<<3)>>3]=+c[A+(a<<3)>>3]-+c[r+(a<<3)>>3];a=a+1|0}return}function CO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=0;while(1){if((a|0)>=(e|0))break;c[i+(a<<3)>>3]=+c[r+(a<<3)>>3]+ +c[A+(a<<3)>>3];a=a+1|0}return}function IO(e,A,r,i){e=e|0;A=A|0;r=+r;i=i|0;var a=0;a=0;while(1){if((a|0)>=(e|0))break;c[i+(a<<3)>>3]=+c[A+(a<<3)>>3]*r;a=a+1|0}return}function ZO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=0;while(1){if((i|0)>=(e|0))break;c[r+(i<<3)>>3]=+c[A+(i<<3)>>3];i=i+1|0}return}function GO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0;i=0.0;a=0;while(1){if((a|0)>=(e|0))break;i=+c[r+(a<<3)>>3]*+c[A+(a<<3)>>3]+i;a=a+1|0}return+i}function LO(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0;r=0;i=-1.e+50;while(1){if((r|0)>=(e|0))break;a=+Q(+ +c[A+(r<<3)>>3]);r=r+1|0;i=a>i?a:i}return+i}function QO(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0,l=0;l=0;while(1){if((l|0)<(A|0)){n=0.0;f=0}else break;while(1){if((f|0)>=(r|0))break;n=+c[i+(f<<3)>>3]*+c[(t[e+(f<<2)>>2]|0)+(l<<3)>>3]+n;f=f+1|0}c[a+(l<<3)>>3]=n;l=l+1|0}return}function DO(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0;r=0.0;i=A;a=e;while(1){if(!a)break;r=+s[i>>2]+r;i=i+4|0;a=a+-1|0}r=r/+(e|0);while(1){if(!e)break;s[A>>2]=+s[A>>2]-r;A=A+4|0;e=e+-1|0}return}function zO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0.0,n=0,f=0,l=0,c=0,o=0.0,u=0,b=0.0,h=0,w=0.0;a=0;while(1){if((a|0)>=(A|0)){n=0;l=0;u=A;break}s[i+(a<<2)>>2]=0.0;a=a+1|0}while(1){if((l|0)>=(A|0))break;o=+s[r+(l<<2)>>2];c=l+1|0;t=+s[e+(n<<2)>>2]*o;f=c;a=n;while(1){a=a+1|0;if((f|0)==(A|0))break;w=+s[e+(a<<2)>>2];b=+s[r+(f<<2)>>2]*w+t;h=i+(f<<2)|0;s[h>>2]=+s[h>>2]+w*o;t=b;f=f+1|0}h=i+(l<<2)|0;s[h>>2]=+s[h>>2]+t;n=n+u|0;l=c;u=u+-1|0}return}function WO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=0;while(1){if((a|0)>=(e|0))break;s[i+(a<<2)>>2]=+s[A+(a<<2)>>2]-+s[r+(a<<2)>>2];a=a+1|0}return}function YO(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=0;while(1){if((a|0)>=(e|0))break;s[i+(a<<2)>>2]=+s[r+(a<<2)>>2]+ +s[A+(a<<2)>>2];a=a+1|0}return}function FO(e,A,r,i){e=e|0;A=A|0;r=+r;i=i|0;var a=0,t=0;a=0;while(1){if((a|0)>=(e|0))break;t=A+(a<<2)|0;s[t>>2]=+s[i+(a<<2)>>2]*r+ +s[t>>2];a=a+1|0}return}function MO(e,A,r,i){e=e|0;A=A|0;r=+r;i=i|0;var a=0;a=0;while(1){if((a|0)>=(e|0))break;s[i+(a<<2)>>2]=+s[A+(a<<2)>>2]*r;a=a+1|0}return}function VO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=0;while(1){if((i|0)>=(e|0))break;t[r+(i<<2)>>2]=t[A+(i<<2)>>2];i=i+1|0}return}function NO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0;i=0.0;a=0;while(1){if((a|0)>=(e|0))break;i=i+ +s[r+(a<<2)>>2]*+s[A+(a<<2)>>2];a=a+1|0}return+i}function RO(e,A,r){e=e|0;A=+A;r=r|0;var i=0;i=0;while(1){if((i|0)>=(e|0))break;c[r+(i<<3)>>3]=A;i=i+1|0}return}function xO(e,A,r){e=e|0;A=+A;r=r|0;var i=0;i=0;while(1){if((i|0)>=(e|0))break;s[r+(i<<2)>>2]=A;i=i+1|0}return}function JO(e,A){e=e|0;A=A|0;var r=0.0,i=0,a=0.0;r=-1000000015047466219876688.0e6;i=0;while(1){if((i|0)>=(e|0))break;a=+Q(+ +s[A+(i<<2)>>2]);r=a>r?a:r;i=i+1|0}return+r}function HO(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0;r=0;while(1){if((r|0)>=(e|0))break;i=A+(r<<2)|0;a=+s[i>>2];s[i>>2]=a*a;r=r+1|0}return}function PO(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0;r=0;while(1){if((r|0)>=(e|0))break;i=A+(r<<2)|0;a=+s[i>>2];if(a!=0.0)s[i>>2]=1.0/a;r=r+1|0}return}function XO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0;i=0;while(1){if((i|0)>=(e|0))break;a=+s[A+(i<<2)>>2];if(a>=0.0)s[r+(i<<2)>>2]=+D(+a);i=i+1|0}return}function SO(e,A){e=e|0;A=A|0;var r=0,i=0,a=0.0;r=0;while(1){if((r|0)>=(e|0))break;i=A+(r<<2)|0;a=+s[i>>2];if(a>0.0)s[i>>2]=1.0/+D(+a);r=r+1|0}return}function jO(e,A){e=e|0;A=A|0;var r=0;t[e>>2]=0;if(A&3)if(!(4%(A>>>0)|0))A=4;else A=P(4/((UO(A)|0)>>>0)|0,A)|0;t[e+8>>2]=A;e=e+4|0;A=t[e>>2]|0;e:do{if(A|0)while(1){if(!A)break e;r=t[A>>2]|0;G2(t[A+4>>2]|0);G2(A);A=r}}while(0);t[e>>2]=0;return}function UO(e){e=e|0;var A=0,r=0;r=4;e:while(1){A=r;while(1){if((A|0)==(e|0))break e;if((A|0)<=(e|0))break;A=A-e|0}r=A;e=e-A|0}return e|0}function TO(e){e=e|0;var A=0,r=0,i=0,a=0;A=t[e>>2]|0;if(!A){r=t[e+8>>2]|0;i=$F(8)|0;a=$F(P(t[46855]|0,r)|0)|0;t[i+4>>2]=a;A=0;while(1){if((A|0)>=(t[46855]|0))break;OO(a+(P(A,r)|0)|0,e);A=A+1|0}A=e+4|0;t[i>>2]=t[A>>2];t[A>>2]=i;A=t[e>>2]|0}t[e>>2]=t[A>>2];return A|0}function OO(e,A){e=e|0;A=A|0;t[e>>2]=t[A>>2];t[A>>2]=e;return}function _O(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,c=0,o=0,u=0;u=KF(A<<3)|0;o=e+8|0;a=t[o>>2]|0;qO(e,A,u);pO(A,r);n=0;f=0;while(1){if((f|0)>=(A|0))break;n=(t[e+(f*20|0)>>2]|0)+n|0;f=f+1|0}n=$F(n<<2)|0;l=0;while(1){if((l|0)>=(A|0))break;t[e+(l*20|0)+8>>2]=n;c=t[e+(l*20|0)>>2]|0;s[n>>2]=+(1-c|0);f=1;while(1){if((f|0)>=(c|0))break;s[n+(f<<2)>>2]=1.0;f=f+1|0}n=n+(c<<2)|0;l=l+1|0}f=oU(e,r,u,A,.001,i)|0;G2(t[o>>2]|0);n=0;while(1){if((n|0)>=(A|0))break;t[e+(n*20|0)+8>>2]=a;a=a+(t[e+(n*20|0)>>2]<<2)|0;n=n+1|0}G2(u);return f>>>31|0}function qO(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0,o=0,u=0;l=e+16|0;n=0;while(1){if((n|0)>=(A|0))break;if(t[l>>2]|0){o=t[e+(n*20|0)>>2]|0;u=e+(n*20|0)+8|0;f=e+(n*20|0)+16|0;i=0.0;a=1;while(1){if((a|0)>=(o|0))break;i=i+ +s[(t[f>>2]|0)+(a<<2)>>2]*+s[(t[u>>2]|0)+(a<<2)>>2];a=a+1|0}c[r+(n<<3)>>3]=i}n=n+1|0}return}function KO(e,A,r,i,a,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=+f;l=l|0;s=s|0;e=h;h=h+16|0;if(!(t[46913]|0)){t[46913]=1;nw(1,93820,e)|0}h=e;return}function $O(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0.0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0.0;d=$F(a<<2)|0;f=A<<3;n=0;while(1){if((n|0)>=(a|0))break;t[d+(n<<2)>>2]=$F(f)|0;n=n+1|0}w=$F(a<<3)|0;k=$F(A<<2)|0;n=$F(P(f,A)|0)|0;f=0;while(1){if((f|0)>=(A|0))break;t[k+(f<<2)>>2]=n;n=n+(A<<3)|0;f=f+1|0}s=0;h=1;while(1){if((s|0)>=(A|0))break;o=e+(s<<2)|0;u=k+(s<<2)|0;f=0;while(1){if((f|0)==(h|0))break;b=e+(f<<2)|0;n=0;l=0.0;while(1){if((n|0)>=(r|0))break;v=l+ +(P(t[(t[b>>2]|0)+(n<<2)>>2]|0,t[(t[o>>2]|0)+(n<<2)>>2]|0)|0);n=n+1|0;l=v}c[(t[k+(f<<2)>>2]|0)+(s<<3)>>3]=l;c[(t[u>>2]|0)+(f<<3)>>3]=l;f=f+1|0}s=s+1|0;h=h+1|0}cO(k,A,a,d,w,1)|0;f=0;while(1){if((f|0)>=(a|0)){n=0;break}o=d+(f<<2)|0;u=i+(f<<2)|0;s=0;while(1){if((s|0)<(r|0)){n=0;l=0.0}else break;while(1){if((n|0)>=(A|0))break;v=+c[(t[o>>2]|0)+(n<<3)>>3]*+(t[(t[e+(n<<2)>>2]|0)+(s<<2)>>2]|0)+l;n=n+1|0;l=v}c[(t[u>>2]|0)+(s<<3)>>3]=l;s=s+1|0}f=f+1|0}while(1){if((n|0)>=(a|0))break;G2(t[d+(n<<2)>>2]|0);n=n+1|0}G2(d);G2(w);G2(t[k>>2]|0);G2(k);return}function e_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0;a=h;h=h+32|0;n=a+16|0;s=a+20|0;l=a+12|0;f=a+8|0;t[n>>2]=i;t[l>>2]=0;t[f>>2]=0;lb(t[e>>2]|0,r,r<<2,s);gO(t[s>>2]|0,e,r,A,l);vO(e,t[l>>2]|0,A,r,A,f);G2(t[t[l>>2]>>2]|0);G2(t[l>>2]|0);i=(cO(t[f>>2]|0,A,1,n,a,1)|0)&255;h=a;return i|0}function A_(){t[46914]=0;G2(t[46915]|0);G2(t[46916]|0);G2(t[46917]|0);t[46915]=0;t[46916]=0;t[46917]=0;return}function r_(e){e=e|0;G2(t[e+36>>2]|0);return}function i_(e,A,r,a){e=e|0;A=A|0;r=+r;a=+a;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0,m=0.0,p=0.0;d=h;h=h+80|0;b=d+64|0;k=d+68|0;f=d+48|0;l=d+32|0;s=d+16|0;o=d;u=A+16|0;n=t[u>>2]|0;e:do{if(!(t[n+212>>2]|0))switch(oN(A)|0){case 1:{n=t[u>>2]|0;l=t[n+12>>2]|0;s=t[l+8>>2]|0;t[k>>2]=s;n=t[t[n+8>>2]>>2]|0;switch(i[n>>0]|0){case 98:{if(!(e1(n,108236)|0))w=11;else w=8;break}case 112:{if((e1(n,105721)|0)==0?(a_(t[l+44>>2]|0,s)|0)!=0:0)w=11;else w=8;break}default:w=8}do{if((w|0)==8)if((s|0)<3){t[e+40>>2]=(t[l>>2]|0)==0?0:2;w=17;break}else{n=e+40|0;t[n>>2]=0;break}else if((w|0)==11){n=e+40|0;t[n>>2]=1;if((s|0)<=2)w=17}}while(0);if((w|0)==17){f=t_(A,k,r,a)|0;w=21;break e}f=$F(s<<4)|0;l=l+44|0;if((t[n>>2]|0)==1){w=t[l>>2]|0;v=r;c[f>>3]=+c[w>>3]*.013888888888888888+v;r=a;c[f+8>>3]=+c[w+8>>3]*.013888888888888888+r;c[f+16>>3]=+c[w+16>>3]*.013888888888888888-v;c[f+24>>3]=+c[w+24>>3]*.013888888888888888+r;c[f+32>>3]=+c[w+32>>3]*.013888888888888888-v;c[f+40>>3]=+c[w+40>>3]*.013888888888888888-r;c[f+48>>3]=+c[w+48>>3]*.013888888888888888+v;c[f+56>>3]=+c[w+56>>3]*.013888888888888888-r;w=21;break e}n=0;while(1){if((n|0)>=(s|0)){w=21;break e}w=t[l>>2]|0;m=+c[w+(n<<4)>>3];v=+c[w+(n<<4)+8>>3];g=+D(+(v*v+m*m));c[f+(n<<4)>>3]=(r/g+1.0)*m*.013888888888888888;c[f+(n<<4)+8>>3]=(a/g+1.0)*v*.013888888888888888;n=n+1|0}}case 2:{t[k>>2]=4;w=$F(64)|0;A=t[(t[u>>2]|0)+12>>2]|0;p=+c[A+32>>3];g=+c[A+40>>3];b=~~+c[A+16>>3];A=~~+c[A+24>>3];m=-r;v=-a;n_(f,b,A,m,v);t[w>>2]=t[f>>2];t[w+4>>2]=t[f+4>>2];t[w+8>>2]=t[f+8>>2];t[w+12>>2]=t[f+12>>2];f=w+16|0;u=~~p;n_(l,u,A,r,v);t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];t[f+8>>2]=t[l+8>>2];t[f+12>>2]=t[l+12>>2];f=w+32|0;A=~~g;n_(s,u,A,r,a);t[f>>2]=t[s>>2];t[f+4>>2]=t[s+4>>2];t[f+8>>2]=t[s+8>>2];t[f+12>>2]=t[s+12>>2];f=w+48|0;n_(o,b,A,m,a);t[f>>2]=t[o>>2];t[f+4>>2]=t[o+4>>2];t[f+8>>2]=t[o+8>>2];t[f+12>>2]=t[o+12>>2];t[e+40>>2]=1;f=w;w=21;break e}case 3:{t[e+40>>2]=2;f=t_(A,k,r,a)|0;w=21;break e}default:{t[b>>2]=t[t[(t[u>>2]|0)+8>>2]>>2];nw(1,93883,b)|0;n=1;break e}}else{t[k>>2]=4;m=+c[n+32>>3]*.5+r;p=+c[n+40>>3]*.5+a;t[e+40>>2]=1;f=$F(64)|0;c[f>>3]=m;c[f+8>>3]=p;g=-m;c[f+16>>3]=g;c[f+24>>3]=p;c[f+32>>3]=g;p=-p;c[f+40>>3]=p;c[f+48>>3]=m;c[f+56>>3]=p;w=21}}while(0);if((w|0)==21){t[e+36>>2]=f;n=t[k>>2]|0;t[e+32>>2]=n;f_(f,n,e,e+16|0);if((n|0)>(t[46914]|0)){t[46914]=n;n=0}else n=0}h=d;return n|0}function a_(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;do{if((A|0)==4){r=+c[e+8>>3];A=e+16|0;i=+c[e+24>>3];if(r==i){if(!(+c[e+40>>3]==+c[e+56>>3])){A=0;break}if(!(+c[e>>3]==+c[e+48>>3])){A=0;break}A=+c[A>>3]==+c[e+32>>3];break}if((+c[e>>3]==+c[A>>3]?+c[e+32>>3]==+c[e+48>>3]:0)?r==+c[e+56>>3]:0)A=i==+c[e+40>>3];else A=0}else A=0}while(0);return A&1|0}function t_(e,A,r,i){e=e|0;A=A|0;r=+r;i=+i;var a=0,n=0.0,f=0,l=0,s=0.0,o=0;a=Hw(e,102705)|0;if(!a)a=0;else a=K3(a)|0;f=(a|0)<3?20:a;l=$F(f<<4)|0;e=e+16|0;n=1.0/+(f|0);a=0;while(1){if((a|0)>=(f|0))break;o=t[e>>2]|0;s=n*+(a|0)*6.283185307179586;c[l+(a<<4)>>3]=(+c[o+32>>3]*.5+r)*+W(+s);c[l+(a<<4)+8>>3]=(+c[o+40>>3]*.5+i)*+Y(+s);a=a+1|0}t[A>>2]=f;return l|0}function n_(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=+a;c[e>>3]=+(A|0)*.013888888888888888+i;c[e+8>>3]=+(r|0)*.013888888888888888+a;return}function f_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0.0,n=0.0,f=0.0,l=0.0,s=0,o=0.0,u=0.0;l=+c[e>>3];f=+c[e+8>>3];a=1;t=f;n=l;while(1){if((a|0)>=(A|0))break;s=e+16|0;o=+c[s>>3];u=+c[e+24>>3];a=a+1|0;t=u>t?u:t;n=o>n?o:n;f=u>3]=l;c[r+8>>3]=f;c[i>>3]=n;c[i+8>>3]=t;return}function l_(e,A,r,a){e=e|0;A=A|0;r=+r;a=+a;var n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0,m=0.0,p=0.0;d=h;h=h+80|0;u=d+64|0;w=d+68|0;f=d+48|0;l=d+32|0;s=d+16|0;o=d;b=A+16|0;n=t[b>>2]|0;e:do{if(!(t[n+212>>2]|0))switch(oN(A)|0){case 1:{o=t[(t[b>>2]|0)+12>>2]|0;u=o+8|0;s=t[u>>2]|0;t[w>>2]=s;A:do{if((s|0)>2){f=$F(s<<4)|0;l=o+44|0;n=0;while(1){if((n|0)>=(s|0))break A;A=t[l>>2]|0;c[f+(n<<4)>>3]=+c[A+(n<<4)>>3]*.013888888888888888;c[f+(n<<4)+8>>3]=+c[A+(n<<4)+8>>3]*.013888888888888888;n=n+1|0}}else f=t_(A,w,0.0,0.0)|0}while(0);n=t[t[(t[b>>2]|0)+8>>2]>>2]|0;switch(i[n>>0]|0){case 98:{if(!(e1(n,108236)|0))n=1;else k=13;break}case 112:{if((e1(n,105721)|0)==0?(a_(f,t[w>>2]|0)|0)!=0:0)n=1;else k=13;break}default:k=13}do{if((k|0)==13){if((t[u>>2]|0)<3?t[o>>2]|0:0){n=2;break}n=0}}while(0);t[e+40>>2]=n;k=20;break e}case 2:{t[w>>2]=4;k=$F(64)|0;b=t[(t[b>>2]|0)+12>>2]|0;g=+c[b+16>>3];p=+c[b+24>>3];m=+c[b+32>>3];v=+c[b+40>>3];s_(f,g,p);t[k>>2]=t[f>>2];t[k+4>>2]=t[f+4>>2];t[k+8>>2]=t[f+8>>2];t[k+12>>2]=t[f+12>>2];f=k+16|0;s_(l,m,p);t[f>>2]=t[l>>2];t[f+4>>2]=t[l+4>>2];t[f+8>>2]=t[l+8>>2];t[f+12>>2]=t[l+12>>2];f=k+32|0;s_(s,m,v);t[f>>2]=t[s>>2];t[f+4>>2]=t[s+4>>2];t[f+8>>2]=t[s+8>>2];t[f+12>>2]=t[s+12>>2];f=k+48|0;s_(o,g,v);t[f>>2]=t[o>>2];t[f+4>>2]=t[o+4>>2];t[f+8>>2]=t[o+8>>2];t[f+12>>2]=t[o+12>>2];t[e+40>>2]=1;f=k;k=20;break e}case 3:{t[e+40>>2]=2;f=t_(A,w,0.0,0.0)|0;k=20;break e}default:{t[u>>2]=t[t[(t[b>>2]|0)+8>>2]>>2];nw(1,93919,u)|0;n=1;break e}}else{t[w>>2]=4;m=+c[n+32>>3]*.5;p=+c[n+40>>3]*.5;t[e+40>>2]=1;f=$F(64)|0;c[f>>3]=m;c[f+8>>3]=p;g=-m;c[f+16>>3]=g;c[f+24>>3]=p;c[f+32>>3]=g;p=-p;c[f+40>>3]=p;c[f+48>>3]=m;c[f+56>>3]=p;k=20}}while(0);if((k|0)==20){n=t[w>>2]|0;if(r!=1.0|a!=1.0)c_(f,n,r,a);t[e+36>>2]=f;t[e+32>>2]=n;f_(f,n,e,e+16|0);if((n|0)>(t[46914]|0)){t[46914]=n;n=0}else n=0}h=d;return n|0}function s_(e,A,r){e=e|0;A=+A;r=+r;c[e>>3]=A*.013888888888888888;c[e+8>>3]=r*.013888888888888888;return}function c_(e,A,r,i){e=e|0;A=A|0;r=+r;i=+i;var a=0,t=0;a=0;while(1){if((a|0)>=(A|0))break;c[e>>3]=+c[e>>3]*r;t=e+8|0;c[t>>3]=+c[t>>3]*i;e=e+16|0;a=a+1|0}return}function o_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0.0,g=0.0,m=0.0,p=0;d=h;h=h+128|0;b=d+112|0;u=d+96|0;o=d+80|0;a=d+64|0;w=d+48|0;k=d+32|0;l=d+16|0;s=d;t[u>>2]=t[e>>2];t[u+4>>2]=t[e+4>>2];t[u+8>>2]=t[e+8>>2];t[u+12>>2]=t[e+12>>2];t[b>>2]=t[A>>2];t[b+4>>2]=t[A+4>>2];t[b+8>>2]=t[A+8>>2];t[b+12>>2]=t[A+12>>2];sT(w,u,b);n=A+16|0;t[u>>2]=t[e>>2];t[u+4>>2]=t[e+4>>2];t[u+8>>2]=t[e+8>>2];t[u+12>>2]=t[e+12>>2];t[b>>2]=t[n>>2];t[b+4>>2]=t[n+4>>2];t[b+8>>2]=t[n+8>>2];t[b+12>>2]=t[n+12>>2];sT(k,u,b);t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];t[b>>2]=t[i>>2];t[b+4>>2]=t[i+4>>2];t[b+8>>2]=t[i+8>>2];t[b+12>>2]=t[i+12>>2];sT(l,u,b);f=i+16|0;t[u>>2]=t[r>>2];t[u+4>>2]=t[r+4>>2];t[u+8>>2]=t[r+8>>2];t[u+12>>2]=t[r+12>>2];t[b>>2]=t[f>>2];t[b+4>>2]=t[f+4>>2];t[b+8>>2]=t[f+8>>2];t[b+12>>2]=t[f+12>>2];sT(s,u,b);t[a>>2]=t[w>>2];t[a+4>>2]=t[w+4>>2];t[a+8>>2]=t[w+8>>2];t[a+12>>2]=t[w+12>>2];t[o>>2]=t[k>>2];t[o+4>>2]=t[k+4>>2];t[o+8>>2]=t[k+8>>2];t[o+12>>2]=t[k+12>>2];t[u>>2]=t[l>>2];t[u+4>>2]=t[l+4>>2];t[u+8>>2]=t[l+8>>2];t[u+12>>2]=t[l+12>>2];t[b>>2]=t[s>>2];t[b+4>>2]=t[s+4>>2];t[b+8>>2]=t[s+8>>2];t[b+12>>2]=t[s+12>>2];do{if(u_(a,o,u,b)|0){a=t[A+40>>2]|0;if(a&1|0?t[i+40>>2]&1|0:0){a=1;break}if(a&2|0?t[i+40>>2]&2|0:0){v=+c[n>>3]-+c[A>>3]+ +c[f>>3]-+c[i>>3];g=+c[e>>3]-+c[r>>3];m=+c[e+8>>3]-+c[r+8>>3];a=!(m*m+g*g>v*v*.25);break}a=t[46915]|0;if(!a){t[46915]=$F(t[46914]<<4)|0;f=$F(t[46914]<<4)|0;t[46916]=f;a=t[46915]|0}else f=t[46916]|0;p=t[A+36>>2]|0;A=A+32|0;n=t[A>>2]|0;t[b>>2]=t[e>>2];t[b+4>>2]=t[e+4>>2];t[b+8>>2]=t[e+8>>2];t[b+12>>2]=t[e+12>>2];b_(p,n,b,a);e=t[i+36>>2]|0;n=i+32|0;i=t[n>>2]|0;t[b>>2]=t[r>>2];t[b+4>>2]=t[r+4>>2];t[b+8>>2]=t[r+8>>2];t[b+12>>2]=t[r+12>>2];b_(e,i,b,f);if(!(h_(a,f,t[A>>2]|0,t[n>>2]|0)|0)){a=t[46915]|0;t[o>>2]=t[a>>2];t[o+4>>2]=t[a+4>>2];t[o+8>>2]=t[a+8>>2];t[o+12>>2]=t[a+12>>2];t[u>>2]=t[l>>2];t[u+4>>2]=t[l+4>>2];t[u+8>>2]=t[l+8>>2];t[u+12>>2]=t[l+12>>2];t[b>>2]=t[s>>2];t[b+4>>2]=t[s+4>>2];t[b+8>>2]=t[s+8>>2];t[b+12>>2]=t[s+12>>2];if(w_(o,u,b)|0?(s=t[46916]|0,p=t[n>>2]|0,t[b>>2]=t[a>>2],t[b+4>>2]=t[a+4>>2],t[b+8>>2]=t[a+8>>2],t[b+12>>2]=t[a+12>>2],k_(s,p,b)|0):0){a=1;break}a=t[46916]|0;t[o>>2]=t[a>>2];t[o+4>>2]=t[a+4>>2];t[o+8>>2]=t[a+8>>2];t[o+12>>2]=t[a+12>>2];t[u>>2]=t[w>>2];t[u+4>>2]=t[w+4>>2];t[u+8>>2]=t[w+8>>2];t[u+12>>2]=t[w+12>>2];t[b>>2]=t[k>>2];t[b+4>>2]=t[k+4>>2];t[b+8>>2]=t[k+8>>2];t[b+12>>2]=t[k+12>>2];if(!(w_(o,u,b)|0))a=0;else{k=t[46915]|0;p=t[A>>2]|0;t[b>>2]=t[a>>2];t[b+4>>2]=t[a+4>>2];t[b+8>>2]=t[a+8>>2];t[b+12>>2]=t[a+12>>2];a=(k_(k,p,b)|0)!=0}}else a=1}else a=0}while(0);h=d;return a&1|0}function u_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;if((+c[e>>3]<=+c[i>>3]?+c[r>>3]<=+c[A>>3]:0)?+c[e+8>>3]<=+c[i+8>>3]:0)e=+c[r+8>>3]<=+c[A+8>>3]&1;else e=0;return e|0}function b_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0;t=r+8|0;a=0;while(1){if((a|0)>=(A|0))break;c[i>>3]=+c[r>>3]+ +c[e>>3];c[i+8>>3]=+c[t>>3]+ +c[e+8>>3];a=a+1|0;e=e+16|0;i=i+16|0}return}function h_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0.0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0;I=h;h=h+112|0;v=I+96|0;d=I+80|0;k=I+64|0;w=I+48|0;m=I+32|0;p=I+16|0;E=I;B=r+-1|0;y=i+-1|0;C=r<<1;g=i<<1;a=0;n=0;f=0;l=0;while(1){Z=e+(a<<4)|0;G=e+(((B+a|0)%(r|0)|0)<<4)|0;t[d>>2]=t[Z>>2];t[d+4>>2]=t[Z+4>>2];t[d+8>>2]=t[Z+8>>2];t[d+12>>2]=t[Z+12>>2];t[v>>2]=t[G>>2];t[v+4>>2]=t[G+4>>2];t[v+8>>2]=t[G+8>>2];t[v+12>>2]=t[G+12>>2];lT(m,d,v);b=A+(n<<4)|0;u=A+(((y+n|0)%(i|0)|0)<<4)|0;t[d>>2]=t[b>>2];t[d+4>>2]=t[b+4>>2];t[d+8>>2]=t[b+8>>2];t[d+12>>2]=t[b+12>>2];t[v>>2]=t[u>>2];t[v+4>>2]=t[u+4>>2];t[v+8>>2]=t[u+8>>2];t[v+12>>2]=t[u+12>>2];lT(p,d,v);t[k>>2]=t[46540];t[k+4>>2]=t[46541];t[k+8>>2]=t[46542];t[k+12>>2]=t[46543];t[d>>2]=t[m>>2];t[d+4>>2]=t[m+4>>2];t[d+8>>2]=t[m+8>>2];t[d+12>>2]=t[m+12>>2];t[v>>2]=t[p>>2];t[v+4>>2]=t[p+4>>2];t[v+8>>2]=t[p+8>>2];t[v+12>>2]=t[p+12>>2];s=+cT(k,d,v);t[k>>2]=t[G>>2];t[k+4>>2]=t[G+4>>2];t[k+8>>2]=t[G+8>>2];t[k+12>>2]=t[G+12>>2];t[d>>2]=t[Z>>2];t[d+4>>2]=t[Z+4>>2];t[d+8>>2]=t[Z+8>>2];t[d+12>>2]=t[Z+12>>2];t[v>>2]=t[b>>2];t[v+4>>2]=t[b+4>>2];t[v+8>>2]=t[b+8>>2];t[v+12>>2]=t[b+12>>2];c=oT(k,d,v)|0;t[k>>2]=t[u>>2];t[k+4>>2]=t[u+4>>2];t[k+8>>2]=t[u+8>>2];t[k+12>>2]=t[u+12>>2];t[d>>2]=t[b>>2];t[d+4>>2]=t[b+4>>2];t[d+8>>2]=t[b+8>>2];t[d+12>>2]=t[b+12>>2];t[v>>2]=t[Z>>2];t[v+4>>2]=t[Z+4>>2];t[v+8>>2]=t[Z+8>>2];t[v+12>>2]=t[Z+12>>2];o=oT(k,d,v)|0;t[w>>2]=t[G>>2];t[w+4>>2]=t[G+4>>2];t[w+8>>2]=t[G+8>>2];t[w+12>>2]=t[G+12>>2];t[k>>2]=t[Z>>2];t[k+4>>2]=t[Z+4>>2];t[k+8>>2]=t[Z+8>>2];t[k+12>>2]=t[Z+12>>2];t[d>>2]=t[u>>2];t[d+4>>2]=t[u+4>>2];t[d+8>>2]=t[u+8>>2];t[d+12>>2]=t[u+12>>2];t[v>>2]=t[b>>2];t[v+4>>2]=t[b+4>>2];t[v+8>>2]=t[b+8>>2];t[v+12>>2]=t[b+12>>2];if(uT(w,k,d,v,E)|0){a=1;break}u=(c|0)==0;b=(o|0)==0;do{if(s!=0.0|(o|c|0)!=0)if(!(s>=0.0))if(b){a=(a+1|0)%(r|0)|0;f=f+1|0;break}else{n=(n+1|0)%(i|0)|0;l=l+1|0;break}else if(u){n=(n+1|0)%(i|0)|0;l=l+1|0;break}else{a=(a+1|0)%(r|0)|0;f=f+1|0;break}else{a=(a+1|0)%(r|0)|0;f=f+1|0}}while(0);if(!((l|0)<(g|0)&((f|0)<(C|0)&((l|0)<(i|0)|(f|0)<(r|0))))){a=0;break}}h=I;return a|0}function w_(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0;a=+c[e>>3];if((a<=+c[r>>3]?a>=+c[A>>3]:0)?(i=+c[e+8>>3],i<=+c[r+8>>3]):0)e=i>=+c[A+8>>3]&1;else e=0;return e|0}function k_(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0,f=0,l=0.0,s=0.0,o=0;i=t[46917]|0;if(!i){i=$F(t[46914]<<4)|0;t[46917]=i}f=r+8|0;n=0;while(1){if((n|0)>=(A|0))break;c[i+(n<<4)>>3]=+c[e+(n<<4)>>3]-+c[r>>3];c[i+(n<<4)+8>>3]=+c[e+(n<<4)+8>>3]-+c[f>>3];n=n+1|0}r=A+-1|0;a=0.0;e=0;e:while(1){if((e|0)>=(A|0)){o=19;break}n=(r+e|0)%(A|0)|0;l=+c[i+(e<<4)+8>>3];f=l==0.0;if(f?+c[i+(n<<4)+8>>3]==0.0:0){if(+c[i+(n<<4)>>3]*+c[i+(e<<4)>>3]<0.0){i=1;break}}else o=11;do{if((o|0)==11){o=0;s=+c[i+(n<<4)+8>>3];if(!(l>=0.0)|!(s<=0.0)?!(s>=0.0)|!(l<=0.0):0)break;l=(s*+c[i+(e<<4)>>3]-l*+c[i+(n<<4)>>3])/(s-l);if(l==0.0){i=1;break e}if(l>0.0)if(s==0.0|f){a=a+.5;break}else{a=a+1.0;break}}}while(0);e=e+1|0}if((o|0)==19)i=((~~a|0)%2|0|0)==1&1;return i|0}function d_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;s=$F(A<<2)|0;l=P(A,A)|0;r=$F(l<<2)|0;t[s>>2]=r;xO(l,0.0,r);r=1;while(1){if((r|0)>=(A|0)){r=0;n=0;l=A;break}t[s+(r<<2)>>2]=(t[s>>2]|0)+((P(r,A)|0)<<2);r=r+1|0}while(1){if((n|0)>=(A|0))break;f=s+(n<<2)|0;i=n;a=r;while(1){if((i|0)==(A|0))break;c=t[e+(a<<2)>>2]|0;t[(t[f>>2]|0)+(i<<2)>>2]=c;t[(t[s+(i<<2)>>2]|0)+(n<<2)>>2]=c;i=i+1|0;a=a+1|0}r=r+l|0;n=n+1|0;l=l+-1|0}return s|0}function v_(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=+l;var c=0.0,o=0.0,u=0.0,b=0,h=0,w=0,k=0.0,d=0,v=0.0,g=0,m=0,p=0,E=0,B=0,y=0.0,C=0,I=0,Z=0,G=0,L=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0.0;N=t[r+(a<<2)>>2]|0;Z=t[e+4>>2]|0;G=t[e>>2]|0;L=t[e+48>>2]|0;D=t[e+52>>2]|0;z=t[e+56>>2]|0;e:do{if((n|0)<1)r=0;else{m_(N,Z,L,D,z,l);W=t[e+28>>2]|0;Y=t[e+32>>2]|0;F=t[e+36>>2]|0;M=t[e+12>>2]|0;V=t[e+16>>2]|0;a=0;i=0;r=-1;while(1){if((a|0)>=(Z|0))break;if((a|0)>=(i|0)){r=r+1|0;if((r|0)==(z|0)){i=Z;r=z}else i=t[D+(r<<2)>>2]|0}t[V+(t[L+(a<<2)>>2]<<2)>>2]=r;a=a+1|0}C=t[e+40>>2]|0;I=Y+(Z+-1<<2)|0;r=0;i=0;while(1){if(i<<24>>24==0&(r|0)<(n|0)){c=-1.0e9;a=0;i=1}else break e;A:while(1){B=a;while(1){if((B|0)>=(Z|0))break A;a=t[L+(B<<2)>>2]|0;y=+s[N+(a<<2)>>2];o=y;E=B;u=0.0;while(1){s[C+(a<<2)>>2]=u;a=E+1|0;if((a|0)>=(Z|0)){p=0;break}o=(t[V+(a<<2)>>2]|0)>(t[V+(E<<2)>>2]|0)?o+l:o;e=t[L+(a<<2)>>2]|0;u=+s[N+(e<<2)>>2];if(+Q(+(u-o))>1.0e-09){p=1;break}E=a;u=u-y;a=e}b=B;while(1){if((b|0)>(E|0)){e=0;h=B;break}h=t[L+(b<<2)>>2]|0;w=t[G+(h<<2)>>2]|0;e=0;o=-+s[A+(h<<2)>>2];while(1){if((e|0)>=(Z|0))break;if((e|0)!=(h|0))o=+s[N+(e<<2)>>2]*+s[w+(e<<2)>>2]+o;e=e+1|0}s[W+(h<<2)>>2]=o/-+s[w+(h<<2)>>2]-+s[C+(h<<2)>>2];b=b+1|0}r:while(1){if((h|0)>(E|0)){u=0.0;k=0.0;d=0;break}b=t[V+(t[L+(h<<2)>>2]<<2)>>2]|0;if((b|0)==(z|0))d=a;else{d=t[D+(b<<2)>>2]|0;d=(a|0)<(d|0)?a:d}w=h;while(1){if((w|0)>=(d|0)){w=h;break}b=t[L+(w<<2)>>2]|0;if(+s[W+(b<<2)>>2]>2]=b;e=e+1|0}w=w+1|0}while(1){if((w|0)>=(d|0))break;b=t[L+(w<<2)>>2]|0;if(+s[W+(b<<2)>>2]==y){t[M+(e<<2)>>2]=b;e=e+1|0}w=w+1|0}while(1){if((h|0)>=(d|0)){h=d;continue r}b=t[L+(h<<2)>>2]|0;if(+s[W+(b<<2)>>2]>y){t[M+(e<<2)>>2]=b;e=e+1|0}h=h+1|0}}while(1){if((d|0)>=(e|0))break;h=t[M+(d<<2)>>2]|0;w=t[G+(h<<2)>>2]|0;o=0.0;b=0;while(1){if((b|0)==(d|0))break;o=o-+s[w+(t[M+(b<<2)>>2]<<2)>>2];b=b+1|0}R=o*2.0;m=w+(h<<2)|0;v=+s[m>>2];o=R+u;v=(R*y+u*k-+s[W+(h<<2)>>2]*v)/(o-v);s[Y+(d<<2)>>2]=v;u=o-+s[m>>2];k=v;d=d+1|0}w=(e|0)==(Z|0);if(w)s[I>>2]=y;m=e+-1|0;u=0.0;k=0.0;h=m;while(1){if((h|0)<=-1)break;d=t[M+(h<<2)>>2]|0;g=t[G+(d<<2)>>2]|0;o=0.0;b=h;while(1){b=b+1|0;if((b|0)>=(e|0))break;o=o-+s[g+(t[M+(b<<2)>>2]<<2)>>2]}o=o*2.0;g=g+(d<<2)|0;R=+s[g>>2];v=o+u;R=(o*y+u*k-+s[W+(d<<2)>>2]*R)/(v-R);s[F+(h<<2)>>2]=R;u=v-+s[g>>2];k=R;h=h+-1|0}if(w){s[F>>2]=y;v=0.0;b=-1;w=0}else{v=0.0;b=-1;w=0}while(1){if((e|0)<=(w|0))break;k=+s[F+(w<<2)>>2];if((w|0)>0)o=+s[Y+(w+-1<<2)>>2];else o=k;do{if(ky;if(kv;v=g?R:v;b=g?w:b;w=w+1|0}if((b|0)>-1)break;if(p?(t[V+(t[L+(a<<2)>>2]<<2)>>2]|0)>(t[V+(t[L+(E<<2)>>2]<<2)>>2]|0):0){c=+s[N+(t[M+(m<<2)>>2]<<2)>>2]+l;B=a;continue}c=+s[N+(t[M+(m<<2)>>2]<<2)>>2];B=a}u=+s[F+(b<<2)>>2];if(!b)k=u;else k=+s[Y+(b+-1<<2)>>2];if(p){g=t[L+(a<<2)>>2]|0;o=+s[N+(g<<2)>>2];o=((t[V+(g<<2)>>2]|0)>(t[V+(t[L+(E<<2)>>2]<<2)>>2]|0)?o-l:o)-+s[C+(t[M+(m<<2)>>2]<<2)>>2]}else o=1.0e9;o=uc?k:c;do{if(oy;if(o=(b|0))break;g=t[M+(h<<2)>>2]|0;s[N+(g<<2)>>2]=+s[C+(g<<2)>>2]+o;h=h+1|0}while(1){if((b|0)>=(e|0))break;g=t[M+(b<<2)>>2]|0;s[N+(g<<2)>>2]=+s[C+(g<<2)>>2]+u;b=b+1|0}if(p?(t[V+(t[L+(a<<2)>>2]<<2)>>2]|0)>(t[V+(t[L+(E<<2)>>2]<<2)>>2]|0):0)c=+s[N+(t[M+(m<<2)>>2]<<2)>>2]+l;else c=+s[N+(t[M+(m<<2)>>2]<<2)>>2];e=B;while(1){if((e|0)>(E|0))break;t[L+(e<<2)>>2]=t[M+(e-B<<2)>>2];e=e+1|0}if(i<<24>>24!=0?+Q(+(o-y))<.01:0)i=+Q(+(u-y))<.01;else i=0;i=i&1}DO(Z,N);g_(N,L,D,z,f);r=r+1|0}}}while(0);return r|0}function g_(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;n=0;while(1){if((n|0)>=(i|0))break;t[a+(n<<2)>>2]=t[e+(t[A+((t[r+(n<<2)>>2]|0)+-1<<2)>>2]<<2)>>2];n=n+1|0}return}function m_(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=+n;var f=0.0,l=0,c=0,o=0,u=0;f=-1.0e9;c=0;l=-1;u=0;while(1){if((u|0)>=(A|0))break;if((u|0)<(c|0))o=c;else{l=l+1|0;if((l|0)==(a|0))c=A;else c=t[i+(l<<2)>>2]|0;if((u|0)>0)f=+s[e+(t[r+(u+-1<<2)>>2]<<2)>>2]+n;else f=-1.0e9;UT(e,r,u,c+-1|0);o=c}c=e+(t[r+(u<<2)>>2]<<2)|0;if(+s[c>>2]>2]=f;c=o;u=u+1|0}return}function p_(e){e=e|0;G2(t[t[e>>2]>>2]|0);G2(t[e>>2]|0);G2(t[e+8>>2]|0);G2(t[e+28>>2]|0);G2(t[e+32>>2]|0);G2(t[e+36>>2]|0);G2(t[e+40>>2]|0);G2(t[e+12>>2]|0);G2(t[e+16>>2]|0);G2(t[e+20>>2]|0);G2(t[e+24>>2]|0);G2(e);return}function E_(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;c=$F(60)|0;t[c>>2]=0;o=c+4|0;t[o>>2]=A;t[c+48>>2]=r;t[c+52>>2]=i;t[c+56>>2]=a;t[c>>2]=d_(e,A)|0;l=A<<2;s=$F(l)|0;t[c+8>>2]=s;f=0;A=0;e=-1;while(1){if((f|0)>=(t[o>>2]|0))break;n=e+1|0;if((f|0)>=(A|0)){A=t[((n|0)==(a|0)?o:i+(n<<2)|0)>>2]|0;e=n}t[s+(t[r+(f<<2)>>2]<<2)>>2]=e;f=f+1|0}t[c+28>>2]=$F(l)|0;t[c+32>>2]=$F(l)|0;t[c+36>>2]=$F(l)|0;t[c+40>>2]=$F(l)|0;t[c+12>>2]=$F(l)|0;t[c+16>>2]=$F(l)|0;t[c+20>>2]=$F(l)|0;t[c+24>>2]=$F(l)|0;return c|0}function B_(){jO(187676,24);t[46922]=0;return}function y_(){return TO(187676)|0}function C_(e,A){e=e|0;A=A|0;var r=0.0,i=0.0;r=+c[e>>3]-+c[A>>3];i=+c[e+8>>3]-+c[A+8>>3];return+ +D(+(i*i+r*r))}function I_(e){e=e|0;var A=0;A=t[46922]|0;t[e+16>>2]=A;t[46922]=A+1;return}function Z_(e){e=e|0;var A=0,r=0;r=e+20|0;A=(t[r>>2]|0)+-1|0;t[r>>2]=A;if(!A)OO(e,187676);return}function G_(e){e=e|0;e=e+20|0;t[e>>2]=(t[e>>2]|0)+1;return}function L_(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;var n=0.0,f=0,l=0,o=0,u=0.0,b=0,w=0.0,k=0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;B=h;h=h+16|0;b=B;t[b>>2]=i;k=A<<2;p=$F(k)|0;o=A<<3;E=$F(o)|0;m=xT(e,A)|0;e=0;while(1){if((e|0)>=(A|0))break;l=m+(e<<2)|0;f=0;while(1){if((f|0)==(A|0))break;v=(t[l>>2]|0)+(f<<2)|0;t[v>>2]=t[v>>2]<<8;f=f+1|0}e=e+1|0}if(!r)ge(93952,93960,283,93974);v=$F(o)|0;e=0;while(1){if((e|0)>=(A|0))break;c[v+(e<<3)>>3]=+c[r+(e<<3)>>3];e=e+1|0}Q_(v,A);n=0.0;u=0.0;o=1;while(1){if((o|0)>=(A|0))break;f=m+(o<<2)|0;l=r+(o<<3)|0;e=0;while(1){if((e|0)==(o|0))break;y=t[(t[f>>2]|0)+(e<<2)>>2]|0;d=+c[l>>3]-+c[r+(e<<3)>>3];n=d*d*(1.0/+(P(y,y)|0))+n;u=+Q(+d)*(1.0/+(y|0))+u;e=e+1|0}o=o+1|0}d=u/n;e=0;while(1){if((e|0)>=(A|0))break;y=r+(e<<3)|0;c[y>>3]=+c[y>>3]*d;e=e+1|0}D_(A,b,a,r,m);l=$F(P(k,A)|0)|0;f=0;while(1){if((f|0)>=(A|0)){l=1;break}o=l+((P(f,A)|0)<<2)|0;t[p+(f<<2)>>2]=o;b=m+(f<<2)|0;n=0.0;e=0;while(1){if((e|0)==(A|0))break;if((e|0)!=(f|0)){w=+(t[(t[b>>2]|0)+(e<<2)>>2]|0);w=-1.0/(w*w);s[o+(e<<2)>>2]=w;n=n-w}e=e+1|0}s[o+(f<<2)>>2]=n;f=f+1|0}while(1){if((l|0)>=(A|0)){f=0;break}n=+c[r+(l<<3)>>3];f=m+(l<<2)|0;e=0;while(1){if((e|0)==(l|0))break;y=(t[f>>2]|0)+(e<<2)|0;u=+(t[y>>2]|0);w=n-+c[r+(e<<3)>>3];w=u*u-w*w;k=~~+D(+w);k=w>0.0?k:0;t[(t[m+(e<<2)>>2]|0)+(l<<2)>>2]=k;t[y>>2]=k;e=e+1|0}l=l+1|0}while(1){if((f|0)>=(A|0)){k=0;e=0;break}u=+c[i+(f<<3)>>3];o=E+(f<<3)|0;c[o>>3]=0.0;b=m+(f<<2)|0;l=p+(f<<2)|0;e=0;n=0.0;while(1){if((e|0)==(A|0))break;if((e|0)!=(f|0)){w=+s[(t[l>>2]|0)+(e<<2)>>2]*+(t[(t[b>>2]|0)+(e<<2)>>2]|0);n=n+(u>=+c[i+(e<<3)>>3]?-w:w);c[o>>3]=n}e=e+1|0}f=f+1|0}while(1){if(!(e<<24>>24==0&(k|0)<200)){g=42;break}if((uU(p,i,E,A,a,A,1)|0)<0){e=1;break}else{e=1;b=0}while(1){if((b|0)>=(A|0))break;w=+c[i+(b<<3)>>3];l=m+(b<<2)|0;o=p+(b<<2)|0;n=0.0;f=0;while(1){if((f|0)==(A|0))break;do{if((f|0)!=(b|0)){u=+s[(t[o>>2]|0)+(f<<2)>>2]*+(t[(t[l>>2]|0)+(f<<2)>>2]|0);if(!(w>=+c[i+(f<<3)>>3])){n=n+u;break}else{n=n+-u;break}}}while(0);f=f+1|0}f=E+(b<<3)|0;w=+c[f>>3];if(n!=w?+Q(+(1.0-n/w))>1.0e-05:0){c[f>>3]=n;e=0}b=b+1|0}k=k+1|0}e:do{if((g|0)==42){n=1.0/d;e=0;while(1){if((e|0)>=(A|0)){e=0;break e}y=r+(e<<3)|0;c[y>>3]=+c[y>>3]*n;y=i+(e<<3)|0;c[y>>3]=+c[y>>3]*n;e=e+1|0}}}while(0);G2(t[m>>2]|0);G2(m);G2(t[p>>2]|0);G2(p);G2(v);G2(E);h=B;return e|0}function Q_(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0.0,t=0;r=0;i=0.0;while(1){if((r|0)>=(A|0))break;a=+c[e+(r<<3)>>3]+i;r=r+1|0;i=a}i=i/+(A|0);r=0;while(1){if((r|0)>=(A|0))break;t=e+(r<<3)|0;c[t>>3]=+c[t>>3]-i;r=r+1|0}t=A+-1|0;hO(e,0,t,1.0/+bO(e,0,t),e);return}function D_(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,o=0,u=0;s=z_(a,e)|0;o=$F(8)|0;if(!i){a=0;l=0}else{n=$F(e<<3)|0;a=0;while(1){if((a|0)>=(e|0))break;c[n+(a<<3)>>3]=+c[i+(a<<3)>>3];a=a+1|0}Q_(n,e);a=n;l=n}W_(s,e,A,o,a,r);i=0;while(1){if((i|0)==1)break;n=o+(i<<3)|0;f=A+(i<<2)|0;a=0;while(1){if((a|0)>=(e|0))break;r=+D(+ +Q(+ +c[n>>3]));u=(t[f>>2]|0)+(a<<3)|0;c[u>>3]=+c[u>>3]*r;a=a+1|0}i=i+1|0}G2(t[s>>2]|0);G2(s);G2(o);G2(l);return}function z_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0,l=0,c=0,o=0,u=0,b=0,w=0.0;b=h;h=h+16|0;a=b;u=A<<2;i=$F(P(u,A)|0)|0;u=$F(u)|0;r=0;while(1){if((r|0)>=(A|0))break;t[u+(r<<2)>>2]=i+((P(r,A)|0)<<2);r=r+1|0}o=F_(e,A,a)|0;n=+s[a>>2];i=0;c=1;while(1){if((i|0)>=(A|0))break;a=e+(i<<2)|0;f=o+(i<<2)|0;l=u+(i<<2)|0;r=0;while(1){if((r|0)==(c|0))break;w=+(t[(t[a>>2]|0)+(r<<2)>>2]|0);w=+s[o+(r<<2)>>2]+ +s[f>>2]-w*w-n;s[(t[l>>2]|0)+(r<<2)>>2]=w;s[(t[u+(r<<2)>>2]|0)+(i<<2)>>2]=w;r=r+1|0}i=i+1|0;c=c+1|0}G2(o);h=b;return u|0}function W_(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=+n;var f=0,l=0,s=0,o=0,u=0.0,b=0.0,h=0,w=0,k=0,d=0,v=0;d=A<<3;k=$F(d)|0;d=$F(d)|0;b=1.0-n;h=(A|0)<1?A:1;w=A+-1|0;s=(a|0)==0;l=0;e:while(1){if((l|0)>=(h|0))break;o=t[r+(l<<2)>>2]|0;do{f=0;while(1){if((f|0)==(A|0))break;c[o+(f<<3)>>3]=+((t8()|0)%100|0|0);f=f+1|0}if(s)f=0;else{uO(o,0,w,-+oO(a,0,w,o),a);f=0}while(1){if((f|0)==(l|0))break;v=r+(f<<2)|0;u=-+oO(t[v>>2]|0,0,w,o);uO(o,0,w,u,t[v>>2]|0);f=f+1|0}n=+bO(o,0,w)}while(n<1.0e-10);hO(o,0,w,1.0/n,o);do{wO(d,0,w,o);Y_(e,A,A,o,k,a);wO(o,0,w,k);f=0;while(1){if((f|0)==(l|0))break;v=r+(f<<2)|0;u=-+oO(t[v>>2]|0,0,w,o);uO(o,0,w,u,t[v>>2]|0);f=f+1|0}n=+bO(o,0,w);if(n<1.0e-10)break e;hO(o,0,w,1.0/n,o);u=+oO(o,0,w,d)}while(+Q(+u)>3]=u*n;l=l+1|0}while(1){if((l|0)>=(h|0))break;s=t[r+(l<<2)>>2]|0;f=0;while(1){if((f|0)>=(A|0)){f=0;break}c[s+(f<<3)>>3]=+((t8()|0)%100|0|0);f=f+1|0}while(1){if((f|0)>=(l|0))break;v=r+(f<<2)|0;b=-+oO(t[v>>2]|0,0,w,s);uO(s,0,w,b,t[v>>2]|0);f=f+1|0}hO(s,0,w,1.0/+bO(s,0,w),s);c[i+(l<<3)>>3]=0.0;l=l+1|0}o=h+-1|0;l=0;while(1){if((l|0)>=(o|0))break;e=i+(l<<3)|0;a=l+1|0;n=+c[e>>3];f=l;s=a;while(1){if((s|0)>=(h|0))break;b=+c[i+(s<<3)>>3];v=n>2]|0);v=r+(f<<2)|0;wO(t[A>>2]|0,0,w,t[v>>2]|0);wO(t[v>>2]|0,0,w,k);c[i+(f<<3)>>3]=+c[e>>3];c[e>>3]=n;l=a}G2(k);G2(d);return}function Y_(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0.0,o=0,u=0;f=0;while(1){if((f|0)>=(A|0))break;u=e+(f<<2)|0;l=0.0;o=0;while(1){if((o|0)>=(r|0))break;l=+c[i+(o<<3)>>3]*+s[(t[u>>2]|0)+(o<<2)>>2]+l;o=o+1|0}c[a+(f<<3)>>3]=l;f=f+1|0}f=A+-1|0;if(n|0)uO(a,0,f,-+oO(a,0,f,n),n);return}function F_(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0.0,n=0,f=0,l=0,c=0.0,o=0,u=0.0;l=$F(A<<2)|0;c=1.0/+(A|0);i=0.0;f=0;while(1){if((f|0)>=(A|0))break;o=e+(f<<2)|0;a=0.0;n=0;while(1){if((n|0)==(A|0))break;u=+(t[(t[o>>2]|0)+(n<<2)>>2]|0);u=u*u;a=u+a;n=n+1|0;i=u+i}s[l+(f<<2)>>2]=c*a;f=f+1|0}s[r>>2]=i/+(P(A,A)|0);return l|0}function M_(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0.0,m=0;k=P(i,i)|0;d=$F(k<<3)|0;v=$F(i<<3)|0;a=0;while(1){if((a|0)>=(i|0))break;c[v+(a<<3)>>3]=+c[r+(a<<3)>>3];a=a+1|0}a=0;while(1){if((a|0)>=(k|0))break;c[d+(a<<3)>>3]=+c[e+(a<<3)>>3];a=a+1|0}w=i+-1|0;n=0;h=0;e:while(1){if((h|0)<(w|0)){t=0.0;a=h}else{o=21;break}while(1){if((a|0)>=(i|0))break;g=+Q(+ +c[e+((P(a,i)|0)+h<<3)>>3]);u=g=(i|0))break;o=e+(a+f<<3)|0;g=+c[o>>3];u=e+(a+b<<3)|0;c[o>>3]=+c[u>>3];c[u>>3]=g;a=a+1|0}u=r+(n<<3)|0;g=+c[u>>3];l=r+(h<<3)|0;c[u>>3]=+c[l>>3];c[l>>3]=g;u=h+1|0;s=e+(b+h<<3)|0;a=u;while(1){if((a|0)>=(i|0)){h=u;continue e}o=P(a,i)|0;t=+c[e+(o+h<<3)>>3]/+c[s>>3];f=r+(a<<3)|0;c[f>>3]=+c[f>>3]-+c[l>>3]*t;f=0;while(1){if((f|0)>=(i|0))break;m=e+(f+o<<3)|0;c[m>>3]=+c[m>>3]-+c[e+(f+b<<3)>>3]*t;f=f+1|0}a=a+1|0}}if((o|0)==21){t=+c[e+(k+-1<<3)>>3];if(+Q(+t)<1.0e-10)o=33;else{c[A+(w<<3)>>3]=+c[r+(w<<3)>>3]/t;a=0;while(1){if((a|0)>=(w|0)){a=0;break}n=i-a|0;f=n+-2|0;t=+c[r+(f<<3)>>3];l=A+(f<<3)|0;c[l>>3]=t;s=P(f,i)|0;n=n+-1|0;while(1){if((n|0)>=(i|0))break;g=t-+c[A+(n<<3)>>3]*+c[e+(n+s<<3)>>3];c[l>>3]=g;n=n+1|0;t=g}c[l>>3]=t/+c[e+(s+f<<3)>>3];a=a+1|0}while(1){if((a|0)>=(i|0)){a=0;break}c[r+(a<<3)>>3]=+c[v+(a<<3)>>3];a=a+1|0}while(1){if((a|0)>=(k|0))break;c[e+(a<<3)>>3]=+c[d+(a<<3)>>3];a=a+1|0}G2(d);G2(v)}}if((o|0)==33){s6(93989)|0;G2(d);G2(v)}return}function V_(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;v=h;h=h+16|0;d=v;$U();B_();mT();t[46918]=C5[A&3]()|0;ET();k=d+8|0;w=C5[A&3]()|0;r=0.0;a=0.0;e:while(1){u=(w|0)==0;b=w+8|0;while(1){if(!(kT()|0)){dT(d);r=+c[d>>3];a=+c[k>>3]}if(!u){if(kT()|0)break;n=+c[b>>3];if(n>3]>2]|0;I_(l);iT(t[g+8>>2]|0,i[g+16>>0]|0,l);iT(t[p+8>>2]|0,i[p+16>>0]|0,l);LT(g);wT(p);LT(p);p=+c[o+8>>3]>+c[m+8>>3];g=p&1;s=p?m:o;m=eT(s,p?o:m)|0;o=BT(m,g)|0;IT(e,o);iT(m,(g^1)&255,l);Z_(l);l=yT(e,o)|0;if(l|0){wT(e);bT(e,l,+C_(l,s))}e=yT(o,f)|0;if(!e)continue;bT(o,e,+C_(e,s))}e=ZT(w)|0;s=QT(e)|0;f=eT(WT(e)|0,w)|0;o=BT(f,0)|0;IT(e,o);l=yT(e,o)|0;if(l|0){wT(e);bT(e,l,+C_(l,w))}f=BT(f,1)|0;IT(o,f);e=yT(f,s)|0;if(e|0)bT(f,e,+C_(e,w));w=C5[A&3]()|0}e=t[46860]|0;while(1){e=QT(e)|0;if((e|0)==(t[46861]|0))break;AT(t[e+8>>2]|0)}h=v;return}function N_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;n=h;h=h+16|0;a=n+8|0;i=n;do{if((gk(e)|0)!=1){R_(e);if(!A)A=x_(e)|0;r=J_(e,A)|0;if(0){f=t[15712]|0;t[i>>2]=Mk(A)|0;t[i+4>>2]=r;a3(f,94005,i)|0}if((r|0)<0){nw(1,94039,a)|0;break}else{H_(e);P_(e,A);X_(e,A);S_(e,r);break}}else{f=t[(t[(sd(e)|0)+16>>2]|0)+132>>2]|0;t[f>>2]=0;t[f+4>>2]=0;t[f+8>>2]=0;t[f+12>>2]=0}}while(0);h=n;return A|0}function R_(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;r=gk(e)|0;r=P(r,r)|0;A=sd(e)|0;while(1){if(!A)break;i=A+16|0;a=t[(t[i>>2]|0)+112>>2]|0;n=a+24|0;t[n>>2]=r;t[n+4>>2]=0;c[a+48>>3]=10.0;a=($_(e,A)|0)==0;i=t[(t[i>>2]|0)+112>>2]|0;t[i>>2]=a?r:0;t[i+4>>2]=a?0:0;A=cd(e,A)|0}return}function x_(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;i=(gk(e)|0)<3;A=sd(e)|0;e:do{if(!i){while(1){if(!A)break;i=t[(t[A+16>>2]|0)+112>>2]|0;if((t[i>>2]|0)==0&(t[i+4>>2]|0)==0)K_(e,A,0);A=cd(e,A)|0}r=0;A=0;i=sd(e)|0;while(1){if(!i)break e;f=t[(t[i+16>>2]|0)+112>>2]|0;n=t[f>>2]|0;f=t[f+4>>2]|0;a=((r|0)<0)<<31>>31;a=f>>>0>a>>>0|(f|0)==(a|0)&n>>>0>r>>>0;r=a?n:r;A=a?i:A;i=cd(e,i)|0}}}while(0);return A|0}function J_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;r=t[(t[A+16>>2]|0)+112>>2]|0;a=r+24|0;i=t[a>>2]|0;t[a>>2]=0;t[a+4>>2]=0;t[r+32>>2]=0;O_(e,A);r=sd(e)|0;i=B6(0,i|0,32)|0;a=G;A=0;while(1){if(!r)break;f=(t[(t[r+16>>2]|0)+112>>2]|0)+24|0;n=t[f>>2]|0;f=t[f+4>>2]|0;if((n|0)==(i|0)&(f|0)==(a|0)){A=-1;break}l=((A|0)<0)<<31>>31;A=f>>>0>l>>>0|(f|0)==(l|0)&n>>>0>A>>>0?n:A;r=cd(e,r)|0}return A|0}function H_(e){e=e|0;var A=0,r=0,i=0,a=0;r=sd(e)|0;while(1){if(!r)break;A=t[(t[r+16>>2]|0)+112>>2]|0;i=A+16|0;e:do{if((t[i>>2]|0)==0&(t[i+4>>2]|0)==0)while(1){i=A+8|0;a=i;a=d6(t[a>>2]|0,t[a+4>>2]|0,1,0)|0;t[i>>2]=a;t[i+4>>2]=G;A=t[A+32>>2]|0;if(!A)break e;A=t[(t[A+16>>2]|0)+112>>2]|0}}while(0);r=cd(e,r)|0}return}function P_(e,A){e=e|0;A=A|0;c[(t[(t[A+16>>2]|0)+112>>2]|0)+40>>3]=6.283185307179586;T_(e,A);return}function X_(e,A){e=e|0;A=A|0;c[(t[(t[A+16>>2]|0)+112>>2]|0)+48>>3]=0.0;U_(e,A);return}function S_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0.0,s=0.0;f=h;h=h+16|0;a=f;n=j_(e,A)|0;if(0){i=t[15712]|0;Z3(94095,i)|0;r=0;while(1){if((r|0)>(A|0))break;c[a>>3]=+c[n+(r<<3)>>3];a3(i,94114,a)|0;r=r+1|0}Z3(153599,i)|0}r=sd(e)|0;while(1){if(!r)break;a=t[r+16>>2]|0;i=t[a+112>>2]|0;l=+c[n+(t[i+24>>2]<<3)>>3];i=i+48|0;s=+W(+ +c[i>>3])*l;a=t[a+132>>2]|0;c[a>>3]=s;c[a+8>>3]=+Y(+ +c[i>>3])*l;r=cd(e,r)|0}G2(n);h=f;return}function j_(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0,f=0.0,l=0,s=0,o=0,u=0;u=h;h=h+16|0;s=u;o=KF((A<<3)+8|0)|0;e=dx(e,zw(t[e+60>>2]|0,0,101288,0)|0,0)|0;e:do{if(!e){a=1.0;r=0.0;e=1}else{f=0.0;r=0.0;n=1;A:while(1){if((n|0)>(A|0)){a=f;e=n;break e}a=+e8(e,s);if(!(a>0.0)){a=f;e=n;break e}f=a>.02?a:.02;r=f+r;l=n+1|0;c[o+(n<<3)>>3]=r;e=t[s>>2]|0;while(1){n=i[e>>0]|0;if(!(n<<24>>24)){n=l;continue A}if(!(n<<24>>24==58|(I1(n<<24>>24)|0)!=0)){n=l;continue A}e=e+1|0}}}}while(0);while(1){if((e|0)>(A|0))break;f=r+a;c[o+(e<<3)>>3]=f;e=e+1|0;r=f}h=u;return o|0}function U_(e,A){e=e|0;A=A|0;var r=0,i=0.0,a=0,n=0,f=0,l=0.0;r=t[(t[A+16>>2]|0)+112>>2]|0;if(!(t[r+32>>2]|0))i=0.0;else i=+c[r+48>>3]-+c[r+40>>3]*.5;n=ek(e,A)|0;while(1){if(!n)break;r=t[n>>2]&3;a=t[((r|0)==3?n:n+48|0)+40>>2]|0;if((a|0)==(A|0))a=t[((r|0)==2?n:n+-48|0)+40>>2]|0;r=t[(t[a+16>>2]|0)+112>>2]|0;if((t[r+32>>2]|0)==(A|0)?(f=r+48|0,!(+c[f>>3]!=10.0)):0){l=+c[r+40>>3];c[f>>3]=l*.5+i;i=l+i;r=r+16|0;if(!((t[r>>2]|0)==0&(t[r+4>>2]|0)==0))U_(e,a)}n=Ak(e,n,A)|0}return}function T_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0.0,f=0,l=0;i=t[(t[A+16>>2]|0)+112>>2]|0;a=i+8|0;n=+c[i+40>>3]/(+((t[a>>2]|0)>>>0)+4294967296.0*+((t[a+4>>2]|0)>>>0));a=ek(e,A)|0;while(1){if(!a)break;i=t[a>>2]&3;r=t[((i|0)==3?a:a+48|0)+40>>2]|0;if((r|0)==(A|0))r=t[((i|0)==2?a:a+-48|0)+40>>2]|0;i=t[(t[r+16>>2]|0)+112>>2]|0;if(((t[i+32>>2]|0)==(A|0)?(f=i+40|0,!(+c[f>>3]!=0.0)):0)?(l=i+8|0,c[f>>3]=n*(+((t[l>>2]|0)>>>0)+4294967296.0*+((t[l+4>>2]|0)>>>0)),i=i+16|0,!((t[i>>2]|0)==0&(t[i+4>>2]|0)==0)):0)T_(e,r);a=Ak(e,a,A)|0}return}function O_(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0;w=h;h=h+16|0;u=w;b=zw(e,2,101541,0)|0;t[u+4>>2]=0;t[u>>2]=0;__(u,A);s=(b|0)==0;e:while(1){c=q_(u)|0;if(!c)break;o=c+16|0;f=t[(t[(t[o>>2]|0)+112>>2]|0)+24>>2]|0;n=ek(e,c)|0;f=d6(0,f|0,0,1)|0;f=B6(f|0,G|0,32)|0;l=G;while(1){if(!n)continue e;if(!((!s?(i[(Pw(n,b)|0)>>0]|0)==48:0)?!(e1(Pw(n,b)|0,138394)|0):0)){A=t[n>>2]&3;r=t[((A|0)==3?n:n+48|0)+40>>2]|0;if((r|0)==(c|0))r=t[((A|0)==2?n:n+-48|0)+40>>2]|0;A=t[(t[r+16>>2]|0)+112>>2]|0;a=A+24|0;k=a;d=t[k+4>>2]|0;if(l>>>0>>0|((l|0)==(d|0)?f>>>0<(t[k>>2]|0)>>>0:0)){d=a;t[d>>2]=f;t[d+4>>2]=l;t[A+32>>2]=c;d=(t[(t[o>>2]|0)+112>>2]|0)+16|0;k=d;k=d6(t[k>>2]|0,t[k+4>>2]|0,1,0)|0;t[d>>2]=k;t[d+4>>2]=G;__(u,r)}}n=Ak(e,n,c)|0}}h=w;return}function __(e,A){e=e|0;A=A|0;var r=0,i=0;r=KF(8)|0;t[r>>2]=A;A=e+4|0;i=t[A>>2]|0;t[((i|0)==0?e:i+4|0)>>2]=r;t[A>>2]=r;return}function q_(e){e=e|0;var A=0,r=0;r=t[e>>2]|0;if(r){A=t[r>>2]|0;t[e>>2]=t[r+4>>2];G2(r);if(!(t[e>>2]|0))t[e+4>>2]=0}else A=0;return A|0}function K_(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0;f=t[t[(t[A+16>>2]|0)+112>>2]>>2]|0;n=ek(e,A)|0;f=d6(0,f|0,0,1)|0;f=B6(f|0,G|0,32)|0;l=G;while(1){if(!n)break;a=t[n>>2]&3;i=t[((a|0)==3?n:n+48|0)+40>>2]|0;if((i|0)==(A|0))i=t[((a|0)==2?n:n+-48|0)+40>>2]|0;if((i|0)!=(r|0)?(s=t[(t[i+16>>2]|0)+112>>2]|0,a=s,c=t[a+4>>2]|0,l>>>0>>0|((l|0)==(c|0)?f>>>0<(t[a>>2]|0)>>>0:0)):0){c=s;t[c>>2]=f;t[c+4>>2]=l;K_(e,i,A)}n=Ak(e,n,A)|0}return}function $_(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;a=0;n=ek(e,A)|0;while(1){if(!n){r=1;break}i=t[n>>2]&3;r=t[((i|0)==3?n:n+48|0)+40>>2]|0;if((r|0)==(A|0))r=t[((i|0)==2?n:n+-48|0)+40>>2]|0;if((r|0)!=(A|0)){if(a)if((a|0)==(r|0))r=a;else{r=0;break}}else r=a;a=r;n=Ak(e,n,A)|0}return r|0}function eq(e){e=e|0;var A=0,r=0,i=0,a=0.0,n=0;A=h;h=h+32|0;i=A;r=zw(e,1,94122,0)|0;n=zw(e,0,94122,0)|0;e=Aq(e,n,r,zw(e,0,94127,0)|0)|0;r=e+16|0;a=+D(+(+c[e>>3]+.1));uq(i,0.0,0.0,a,a);t[r>>2]=t[i>>2];t[r+4>>2]=t[i+4>>2];t[r+8>>2]=t[i+8>>2];t[r+12>>2]=t[i+12>>2];t[r+16>>2]=t[i+16>>2];t[r+20>>2]=t[i+20>>2];t[r+24>>2]=t[i+24>>2];t[r+28>>2]=t[i+28>>2];rq(e);iq(e);aq(e);h=A;return}function Aq(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0.0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0;h=KF(72)|0;t[h+60>>2]=0;t[h+56>>2]=e;s=e+16|0;a=0.0;o=0;f=1;l=0;u=0;while(1){n=t[s>>2]|0;if((f|0)>(t[n+180>>2]|0))break;n=Aq(t[(t[n+184>>2]|0)+(f<<2)>>2]|0,A,r,i)|0;a=+c[n>>3]+a;if(l|0)t[l+52>>2]=n;o=o+1|0;f=f+1|0;l=n;u=(u|0)==0?n:u}b=sd(e)|0;n=u;while(1){if(!b)break;f=b+16|0;if(!(t[t[(t[f>>2]|0)+112>>2]>>2]|0)){s=fq(b,r)|0;a=+c[s>>3]+a;if(l|0)t[l+52>>2]=s;t[t[(t[f>>2]|0)+112>>2]>>2]=e;f=o+1|0;l=s;n=(n|0)==0?s:n}else f=o;b=cd(e,b)|0;o=f}t[h+64>>2]=o;if(!o)a=+sq(e,A);else{c[h+8>>3]=a;a=+lq(h,i)}c[h>>3]=a;t[h+48>>2]=n;return h|0}function rq(e){e=e|0;var A=0,r=0,i=0,a=0,n=0.0,f=0,l=0,s=0,o=0,u=0,b=0,w=0,k=0.0,d=0.0,v=0.0,g=0.0,m=0.0;w=h;h=h+176|0;a=w+144|0;u=w+64|0;s=w+32|0;f=w;b=t[e+64>>2]|0;e:do{if(b|0){o=KF(b<<2)|0;A=e+48|0;i=0;r=A;while(1){r=t[r>>2]|0;if((i|0)>=(b|0))break;t[o+(i<<2)>>2]=r;i=i+1|0;r=r+52|0}_4(o,b,4,80);l=KF(b<<3)|0;r=0;while(1){if((r|0)>=(b|0))break;c[l+(r<<3)>>3]=+c[t[o+(r<<2)>>2]>>3];r=r+1|0}n=+c[e+8>>3];if(+c[e>>3]==n){f=e+16|0;t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[a+8>>2]=t[f+8>>2];t[a+12>>2]=t[f+12>>2];t[a+16>>2]=t[f+16>>2];t[a+20>>2]=t[f+20>>2];t[a+24>>2]=t[f+24>>2];t[a+28>>2]=t[f+28>>2];f=cq(b,l,a)|0}else{k=+c[e+40>>3];d=+c[e+32>>3];c[f>>3]=+c[e+16>>3];c[f+8>>3]=+c[e+24>>3];v=k-d;n=(d+k-+D(+(n*4.0+v*v)))*.5;c[f+16>>3]=d-n;c[f+24>>3]=k-n;t[a>>2]=t[f>>2];t[a+4>>2]=t[f+4>>2];t[a+8>>2]=t[f+8>>2];t[a+12>>2]=t[f+12>>2];t[a+16>>2]=t[f+16>>2];t[a+20>>2]=t[f+20>>2];t[a+24>>2]=t[f+24>>2];t[a+28>>2]=t[f+28>>2];f=cq(b,l,a)|0}if(0){a=t[15712]|0;k=+c[e+24>>3];d=+c[e+32>>3];v=+c[e+40>>3];c[s>>3]=+c[e+16>>3];c[s+8>>3]=k;c[s+16>>3]=d;c[s+24>>3]=v;a3(a,94174,s)|0}i=t[15712]|0;r=0;while(1){if((r|0)>=(b|0))break;s=(t[o+(r<<2)>>2]|0)+16|0;a=f+(r<<5)|0;t[s>>2]=t[a>>2];t[s+4>>2]=t[a+4>>2];t[s+8>>2]=t[a+8>>2];t[s+12>>2]=t[a+12>>2];t[s+16>>2]=t[a+16>>2];t[s+20>>2]=t[a+20>>2];t[s+24>>2]=t[a+24>>2];t[s+28>>2]=t[a+28>>2];if(0){n=+c[a>>3];d=+c[f+(r<<5)+16>>3];m=d*.5;k=+c[f+(r<<5)+8>>3];v=+c[f+(r<<5)+24>>3];g=v*.5;c[u>>3]=+c[l+(r<<3)>>3];c[u+8>>3]=n-m;c[u+16>>3]=k-g;c[u+24>>3]=m+n;c[u+32>>3]=g+k;c[u+40>>3]=v*d;c[u+48>>3]=n;c[u+56>>3]=k;c[u+64>>3]=d;c[u+72>>3]=v;a3(i,94191,u)|0}r=r+1|0}G2(o);G2(l);G2(f);r=0;while(1){A=t[A>>2]|0;if((r|0)>=(b|0))break e;if(!(t[A+60>>2]|0))rq(A);A=A+52|0;r=r+1|0}}}while(0);h=w;return}function iq(e){e=e|0;var A=0,r=0,i=0,a=0,n=0.0,f=0.0,l=0,s=0.0,o=0.0;a=h;h=h+48|0;i=a;if(t[e+60>>2]|0){s=+c[e+24>>3];f=+c[e+32>>3];n=+c[e+40>>3];A=t[e+56>>2]|0;r=A+16|0;l=t[r>>2]|0;c[l+16>>3]=+c[e+16>>3];c[l+24>>3]=s;e=t[r>>2]|0;c[e+32>>3]=f*.013888888888888888;c[e+40>>3]=n*.013888888888888888;WJ(A,t[(t[(Bd(A)|0)+16>>2]|0)+116>>2]&1);tq(A);if(0){l=t[15712]|0;e=Mk(A)|0;r=t[r>>2]|0;o=+c[r+16>>3];n=+c[r+24>>3];f=+c[r+80>>3];s=+c[r+96>>3]+ +c[r+88>>3];t[i>>2]=e;c[i+8>>3]=o;c[i+16>>3]=n;c[i+24>>3]=f;c[i+32>>3]=s;a3(l,94133,i)|0}}else{A=e+48|0;while(1){A=t[A>>2]|0;if(!A)break;iq(A);A=A+52|0}f=+c[e+32>>3];o=+c[e+40>>3];n=+c[e+16>>3]-f*.5;s=+c[e+24>>3]-o*.5;l=t[(t[e+56>>2]|0)+16>>2]|0;c[l+16>>3]=n;c[l+24>>3]=s;c[l+32>>3]=n+f;c[l+40>>3]=s+o}h=a;return}function aq(e){e=e|0;var A=0,r=0,i=0;i=t[e+64>>2]|0;A=e+48|0;r=0;while(1){A=t[A>>2]|0;if((r|0)>=(i|0))break;aq(A);A=A+52|0;r=r+1|0}G2(e);return}function tq(e){e=e|0;var A=0,r=0,a=0,n=0;n=h;h=h+48|0;a=n;A=n+8|0;r=t[47150]|0;if(r|0?(i[(Pw(e,r)|0)>>0]|0)==0:0){c[a>>3]=+c[(t[e+16>>2]|0)+80>>3]*.7;T4(A,94168,a)|0;Mw(e,t[47150]|0,A)|0}Fx(e);h=n;return}function nq(e,A){e=e|0;A=A|0;var r=0.0;r=+c[t[e>>2]>>3]-+c[t[A>>2]>>3];return(r<0.0?1:(r>0.0)<<31>>31)|0}function fq(e,A){e=e|0;A=A|0;var r=0;r=KF(72)|0;c[r>>3]=+sq(e,A);t[r+60>>2]=1;t[r+56>>2]=e;return r|0}function lq(e,A){e=e|0;A=A|0;var r=0.0;r=+wx(t[e+56>>2]|0,A,0.0,0.0);if(r==0.0)r=+c[e+8>>3];else{r=+D(+ +c[e+8>>3])+r*2.0;r=r*r}return+r}function sq(e,A){e=e|0;A=A|0;var r=0.0;r=+wx(e,A,1.0,0.0);return+(r==0.0?1.0e3:r*1.0e3)}function cq(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0.0,n=0,f=0,l=0.0;f=h;h=h+32|0;n=f;i=0;a=0.0;while(1){if((i|0)>=(e|0))break;l=+c[A+(i<<3)>>3]+a;i=i+1|0;a=l}if(a>+c[r+24>>3]*+c[r+16>>3]+.001)i=0;else{i=KF(e<<5)|0;t[n>>2]=t[r>>2];t[n+4>>2]=t[r+4>>2];t[n+8>>2]=t[r+8>>2];t[n+12>>2]=t[r+12>>2];t[n+16>>2]=t[r+16>>2];t[n+20>>2]=t[r+20>>2];t[n+24>>2]=t[r+24>>2];t[n+28>>2]=t[r+28>>2];oq(e,A,i,0,0.0,1.0,0.0,1.0,n)}h=f;return i|0}function oq(e,A,r,i,a,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;n=+n;f=+f;l=+l;s=s|0;var o=0,u=0.0,b=0.0,w=0,k=0.0,d=0.0,v=0.0,g=0.0,m=0,p=0.0,E=0,B=0,y=0,C=0,I=0,Z=0.0;C=h;h=h+112|0;y=C+72|0;m=C+40|0;w=C+32|0;o=C;E=s+16|0;k=+c[E>>3];B=s+24|0;d=+c[B>>3];p=+c[s+16+((!(k>3];do{if((e|0)>=1){if(0){I=t[15712]|0;Z=+c[s+8>>3];c[o>>3]=+c[s>>3];c[o+8>>3]=k;c[o+16>>3]=Z;c[o+24>>3]=d;a3(I,94228,o)|0;t[w>>2]=i;a3(I,94274,w)|0}if(!i){f=+c[A>>3];Z=p*p;p=f/Z;Z=Z/f;t[y>>2]=t[s>>2];t[y+4>>2]=t[s+4>>2];t[y+8>>2]=t[s+8>>2];t[y+12>>2]=t[s+12>>2];t[y+16>>2]=t[s+16>>2];t[y+20>>2]=t[s+20>>2];t[y+24>>2]=t[s+24>>2];t[y+28>>2]=t[s+28>>2];oq(e,A,r,1,f,f,f,p>Z?p:Z,y);break}if((e|0)>(i|0)?(g=+c[A+(i<<3)>>3],u=gn?n:g,g=g+f,b=g/p,b=b*b,Z=b/v,b=u/b,b=Z>b?Z:b,b<=l):0){t[y>>2]=t[s>>2];t[y+4>>2]=t[s+4>>2];t[y+8>>2]=t[s+8>>2];t[y+12>>2]=t[s+12>>2];t[y+16>>2]=t[s+16>>2];t[y+20>>2]=t[s+20>>2];t[y+24>>2]=t[s+24>>2];t[y+28>>2]=t[s+28>>2];oq(e,A,r,i+1|0,u,v,g,b,y);break}k=f/p;if(0){I=t[15712]|0;t[m>>2]=i;c[m+8>>3]=f;c[m+16>>3]=p;c[m+24>>3]=k;a3(I,94299,m)|0}u=+c[E>>3];if(p==u){b=1.0/k;w=s+8|0;u=+c[s>>3]-u*.5;o=0;while(1){if((o|0)>=(i|0))break;c[r+(o<<5)+24>>3]=k;Z=+c[A+(o<<3)>>3]*b;c[r+(o<<5)+16>>3]=Z;c[r+(o<<5)+8>>3]=(+c[B>>3]-k)*.5+ +c[w>>3];c[r+(o<<5)>>3]=Z*.5+u;u=Z+u;o=o+1|0}c[w>>3]=+c[w>>3]-k*.5;o=1}else{b=1.0/k;u=+c[B>>3]*.5+ +c[s+8>>3];o=0;while(1){if((o|0)>=(i|0))break;c[r+(o<<5)+16>>3]=k;Z=+c[A+(o<<3)>>3]*b;c[r+(o<<5)+24>>3]=Z;c[r+(o<<5)>>3]=(k-+c[E>>3])*.5+ +c[s>>3];c[r+(o<<5)+8>>3]=u-Z*.5;u=u-Z;o=o+1|0}c[s>>3]=+c[s>>3]+k*.5;o=0}I=s+16+(o<<3)|0;c[I>>3]=+c[I>>3]-k;t[y>>2]=t[s>>2];t[y+4>>2]=t[s+4>>2];t[y+8>>2]=t[s+8>>2];t[y+12>>2]=t[s+12>>2];t[y+16>>2]=t[s+16>>2];t[y+20>>2]=t[s+20>>2];t[y+24>>2]=t[s+24>>2];t[y+28>>2]=t[s+28>>2];oq(e-i|0,A+(i<<3)|0,r+(i<<5)|0,0,0.0,0.0,0.0,1.0,y)}}while(0);h=C;return}function uq(e,A,r,i,a){e=e|0;A=+A;r=+r;i=+i;a=+a;c[e>>3]=A;c[e+8>>3]=r;c[e+16>>3]=i;c[e+24>>3]=a;return}function bq(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,n=0,f=0,l=0,o=0.0,u=0.0,b=0.0,w=0.0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0;L=h;h=h+96|0;G=L+48|0;Z=L+24|0;I=L+16|0;C=L+8|0;m=L+80|0;p=L;E=e+16|0;B=A+4|0;y=m+4|0;v=sd(e)|0;r=0;i=0;n=0;f=0;while(1){if(!v)break;g=Ow(e,v)|0;k=r;d=f;while(1){if(!g)break;r=(a[(t[g+16>>2]|0)+168>>1]|0)==0;do{if((v|0)==(t[((t[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0))if(r){f=k;r=d}else{if(!i){r=KF(96)|0;t[r+84>>2]=KF(((gk(e)|0)<<5)+11520|0)|0;i=r}else r=d;CH(i,g,t[(t[E>>2]|0)+248>>2]|0);f=k}else if(!r){n=hq(g,A)|0;f=n+8|0;if(KT(t[f>>2]|0,t[n>>2]|0)|0){l=Ll(t[f>>2]|0,t[n>>2]|0)|0;if(!l){nw(0,94352,C)|0;f=1;r=d;break}else r=g;while(1){if(!r)break;Q=r+16|0;D=(t[Q>>2]|0)+144|0;DH(p,r,l,0,t[f>>2]|0,t[n>>2]|0);W=p;z=t[W+4>>2]|0;t[D>>2]=t[W>>2];t[D+4>>2]=z;WH(e,r,t[f>>2]|0,t[n>>2]|0,0);r=t[(t[Q>>2]|0)+172>>2]|0}wq(n);f=k;r=d;break}if(!k){Kj(m,e);r=oE(e,8,8)|0;nw(0,94436,I)|0;u=+(r|0);b=+s[A>>2];w=+s[B>>2];if(!(b>=u)&!(w>=u)){o=+s[m>>2];u=+s[y>>2];if(!(!(o<=b)&!(u<=w))){c[G>>3]=o;c[G+8>>3]=u;c[G+16>>3]=b;c[G+24>>3]=w;nw(3,94552,G)|0}}else{t[Z>>2]=r;c[Z+8>>3]=b;c[Z+16>>3]=w;nw(3,94502,Z)|0}f=1;r=d}else{f=k;r=d}}else{f=k;r=d}}while(0);g=qw(e,g)|0;k=f;d=r}v=cd(e,v)|0;r=k;f=d}kq(n);if(i|0){G2(t[i+84>>2]|0);G2(f)}h=L;return r|0}function hq(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+16|0;o=w+4|0;u=w;r=t[e>>2]&3;a=t[((r|0)==2?e:e+-48|0)+40>>2]|0;r=t[((r|0)==3?e:e+48|0)+40>>2]|0;k=a+16|0;f=t[(t[k>>2]|0)+212>>2]|0;t[o>>2]=f;l=r+16|0;n=t[(t[l>>2]|0)+212>>2]|0;t[u>>2]=n;c=KF(12)|0;e=f;s=n;if(i[(t[k>>2]|0)+118>>0]|0){e=t[(t[(t[e+16>>2]|0)+140>>2]|0)+48>>2]|0;t[o>>2]=e;a=f;f=e}if(!(i[(t[l>>2]|0)+118>>0]|0))l=s;else{l=t[(t[(t[s+16>>2]|0)+140>>2]|0)+48>>2]|0;t[u>>2]=l;r=n;n=l}f=t[(t[(t[f+16>>2]|0)+140>>2]|0)+44>>2]|0;n=t[(t[(t[n+16>>2]|0)+140>>2]|0)+44>>2]|0;if((f|0)<=(n|0))if((n|0)>(f|0)){dq(c,n,r,f,u,A);e=t[u>>2]|0;n=e;r=u;b=11}else f=l;else{dq(c,f,a,n,o,A);e=t[o>>2]|0;a=e;n=r;r=o;b=11}while(1){if((b|0)==11){t[r>>2]=t[(t[(t[e+16>>2]|0)+140>>2]|0)+48>>2];r=n;e=t[o>>2]|0;f=t[u>>2]|0}if((e|0)==(f|0))break;vq(c,e,0,a,A);vq(c,f,r,0,A);t[o>>2]=t[(t[(t[e+16>>2]|0)+140>>2]|0)+48>>2];a=e;n=f;r=u;e=f;b=11}vq(c,f,r,a,A);h=w;return c|0}function wq(e){e=e|0;t[e>>2]=0;return}function kq(e){e=e|0;if(e|0){G2(t[e+8>>2]|0);G2(e)}return}function dq(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0;l=a;while(1){f=t[l>>2]|0;if((A|0)<=(i|0))break;vq(e,f,r,0,n);A=A+-1|0;l=(t[(t[f+16>>2]|0)+140>>2]|0)+48|0;r=f}t[a>>2]=r;return}function vq(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0;f=sd(A)|0;while(1){if(!f)break;l=t[f+16>>2]|0;if(!((f|0)==(a|0)|((f|0)==(r|0)?1:(t[l+212>>2]|0)!=(A|0)))?(i[l+118>>0]|0)==0:0)gq(e,GH(f,n,0)|0);f=cd(A,f)|0}l=A+16|0;A=1;while(1){f=t[l>>2]|0;if((A|0)>(t[f+180>>2]|0))break;f=t[(t[f+184>>2]|0)+(A<<2)>>2]|0;if(!((f|0)==(r|0)|(f|0)==(a|0)))gq(e,mq(f,n)|0);A=A+1|0}return}function gq(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;i=e+4|0;a=t[i>>2]|0;n=e+8|0;r=t[n>>2]|0;do{if((a|0)==(t[e>>2]|0))if(!r){r=$F(400)|0;t[n>>2]=r;t[i>>2]=100;break}else{t[i>>2]=a<<1;r=AM(r,a<<3)|0;t[n>>2]=r;break}}while(0);n=t[e>>2]|0;t[e>>2]=n+1;t[r+(n<<2)>>2]=A;return}function mq(e,A){e=e|0;A=A|0;var r=0.0,a=0.0,n=0.0,f=0.0,l=0.0,o=0.0,u=0,b=0.0,h=0.0,w=0.0;u=KF(8)|0;e=t[e+16>>2]|0;r=+c[e+16>>3];o=+c[e+24>>3];a=+c[e+32>>3];l=+c[e+40>>3];t[u+4>>2]=4;e=KF(64)|0;t[u>>2]=e;if(!(i[A+8>>0]|0)){w=+s[A>>2];h=+s[A+4>>2];n=(a+r)*.5*(w+-1.0);b=(l+o)*.5*(h+-1.0);f=r*w-n;n=a*w-n;a=l*h-b;r=o*h-b}else{n=+s[A>>2];w=+s[A+4>>2];f=r-n;n=a+n;a=l+w;r=o-w}c[e>>3]=f;c[e+8>>3]=r;c[e+16>>3]=f;c[e+24>>3]=a;c[e+32>>3]=n;c[e+40>>3]=a;c[e+48>>3]=n;c[e+56>>3]=r;return u|0}function pq(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;b=h;h=h+160|0;u=b+16|0;s=b+8|0;n=b;c=b+24|0;o=KF(gk(e)|0)|0;f=e+16|0;a=t[t[(t[f>>2]|0)+140>>2]>>2]|0;e:do{if(!a){n=0;a=0}else{w=Mk(e)|0;l=t[46923]|0;t[n>>2]=w;t[n+4>>2]=l;T4(c,94612,n)|0;l=Rv(e,c,1)|0;Sd(l,137483,280,1)|0;n=KF(56)|0;t[(t[l+16>>2]|0)+140>>2]=n;t[n>>2]=a;t[n+4>>2]=t[(t[(t[f>>2]|0)+140>>2]|0)+4>>2];while(1){n=t[a+4>>2]|0;if(!n){n=l;a=1;break e}if(!(i[o+(t[(t[n+16>>2]|0)+120>>2]|0)>>0]|0))Eq(e,n,l,o);a=a+16|0}}}while(0);f=0;l=sd(e)|0;while(1){if(!l)break;w=t[l+16>>2]|0;if((i[o+(t[w+120>>2]|0)>>0]|0)==0?(i[w+119>>0]|0)==3:0){if(!n){w=Mk(e)|0;n=(t[46923]|0)+a|0;t[s>>2]=w;t[s+4>>2]=n;T4(c,94612,s)|0;n=Rv(e,c,1)|0;Sd(n,137483,280,1)|0;w=KF(56)|0;t[(t[n+16>>2]|0)+140>>2]=w;a=a+1|0}Eq(e,l,n,o);f=1}l=cd(e,l)|0}if(n|0)Mp(n)|0;n=sd(e)|0;while(1){if(!n)break;if(!(i[o+(t[(t[n+16>>2]|0)+120>>2]|0)>>0]|0)){s=Mk(e)|0;w=(t[46923]|0)+a|0;t[u>>2]=s;t[u+4>>2]=w;T4(c,94620,u)|0;w=Rv(e,c,1)|0;Sd(w,137483,280,1)|0;s=KF(56)|0;t[(t[w+16>>2]|0)+140>>2]=s;Eq(e,n,w,o);Mp(w)|0;a=a+1|0}n=cd(e,n)|0}G2(o);t[46923]=(t[46923]|0)+a;if(A|0)t[A>>2]=a;if(r|0)t[r>>2]=f;l=KF((a<<2)+4|0)|0;f=l;n=xv(e)|0;while(1){if(!n)break;t[f>>2]=n;f=f+4|0;n=Jv(n)|0;a=a+-1|0}if(!a){t[f>>2]=0;h=b;return l|0}else ge(94628,94639,134,94646);return 0}function Eq(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0;i[a+(t[(t[A+16>>2]|0)+120>>2]|0)>>0]=1;hd(r,A,1)|0;l=ek(e,A)|0;while(1){if(!l)break;f=t[l>>2]&3;n=t[((f|0)==3?l:l+48|0)+40>>2]|0;if((n|0)==(A|0))n=t[((f|0)==2?l:l+-48|0)+40>>2]|0;if(!(i[a+(t[(t[n+16>>2]|0)+120>>2]|0)>>0]|0))Eq(e,n,r,a);l=Ak(e,l,A)|0}return}function Bq(e){e=e|0;var A=0;A=$F(24)|0;t[46924]=A;t[A>>2]=Uh(18204,t[4581]|0)|0;t[A+16>>2]=0;t[A+12>>2]=0;t[A+4>>2]=yq(e)|0;return A|0}function yq(e){e=e|0;var A=0,r=0;A=$F(16)|0;t[A+12>>2]=0;r=$F(e*20|0)|0;t[A>>2]=r;t[A+8>>2]=r+(e*20|0);t[A+4>>2]=r;return A|0}function Cq(e,A,r){e=e|0;A=A|0;r=r|0;r=Zq(t[46924]|0)|0;t[r>>2]=t[A>>2];t[r+4>>2]=t[A+4>>2];t[r+8>>2]=0;return r|0}function Iq(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;e=(t[A>>2]|0)-(t[r>>2]|0)|0;if(!e)e=(t[A+4>>2]|0)-(t[r+4>>2]|0)|0;return e|0}function Zq(e){e=e|0;var A=0,r=0,i=0,a=0;a=e+8|0;e=t[a>>2]|0;A=t[e+4>>2]|0;if((A|0)==(t[e+8>>2]|0)){r=e+12|0;i=t[r>>2]|0;if(!i){e=yq(((A-(t[e>>2]|0)|0)/20|0)<<1)|0;t[r>>2]=e}else e=i;t[a>>2]=e;A=t[e>>2]|0;t[e+4>>2]=A}t[e+4>>2]=A+20;return A|0}function Gq(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=e+12|0;r=t[a>>2]|0;if((r|0)<(A|0)){i=r<<1;i=(i|0)<(A|0)?A:i;A=e+16|0;r=t[A>>2]|0;if(r|0)G2(r);t[A>>2]=$F(i<<3)|0;t[a>>2]=i}return}function Lq(e){e=e|0;var A=0;A=t[e>>2]|0;L5[t[A>>2]&63](A,0,64)|0;t[e+20>>2]=t[e+16>>2];A=t[e+4>>2]|0;t[e+8>>2]=A;t[A+4>>2]=t[A>>2];return}function Qq(e){e=e|0;Ph(t[e>>2]|0)|0;Dq(t[e+4>>2]|0);G2(t[e+16>>2]|0);G2(e);return}function Dq(e){e=e|0;var A=0;while(1){if(!e)break;A=t[e+12>>2]|0;G2(t[e>>2]|0);G2(e);e=A}return}function zq(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0;n=h;h=h+32|0;a=n;f=n+12|0;t[f>>2]=A;t[f+4>>2]=r;l=t[e>>2]|0;f=(L5[t[l>>2]&63](l,f,1)|0)+8|0;t[f>>2]=Wq(e,i,t[f>>2]|0)|0;if(0>2){l=t[15712]|0;f=Mk(i)|0;t[a>>2]=A;t[a+4>>2]=r;t[a+8>>2]=f;a3(l,94656,a)|0}h=n;return}function Wq(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;i=e+20|0;e=t[i>>2]|0;t[i>>2]=e+8;t[e>>2]=A;t[e+4>>2]=r;return e|0}function Yq(e,A){e=e|0;A=A|0;ew(t[e>>2]|0,A,e)|0;return}function Fq(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+32|0;a=i;t[a>>2]=A;t[a+4>>2]=r;r=t[e>>2]|0;r=L5[t[r>>2]&63](r,a,4)|0;h=i;return r|0}function Mq(e){e=e|0;G2(t[e+8>>2]|0);G2(e);return}function Vq(e){e=e|0;return+ +c[e>>3]}function Nq(e){e=e|0;return t[e+8>>2]|0}function Rq(e){e=e|0;return~~+c[e+16>>3]|0}function xq(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;A=t[A>>2]|0;if((A|0)>=(t[r>>2]|0)){A=A+10|0;t[r>>2]=A;t[i>>2]=AM(t[i>>2]|0,P(e<<3,A)|0)|0;t[a>>2]=AM(t[a>>2]|0,t[r>>2]<<3)|0;t[n>>2]=AM(t[n>>2]|0,t[r>>2]<<3)|0}return}function Jq(e,A,r,i,a,n,f,l,s,o,u){e=e|0;A=+A;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;o=o|0;u=u|0;var b=0,h=0,w=0,k=0,d=0.0;c[o>>3]=+c[o>>3]+1.0;e:do{if(e|0){k=t[e+16>>2]|0;b=t[e+40>>2]|0;if(b|0)do{xq(k,a,n,f,l,s);if((Rq(Cb(b)|0)|0)!=(i|0)){w=Nq(Cb(b)|0)|0;h=0;while(1){if((h|0)>=(k|0))break;c[(t[f>>2]|0)+((P(t[a>>2]|0,k)|0)+h<<3)>>3]=+c[w+(h<<3)>>3];h=h+1|0}d=+Vq(Cb(b)|0);c[(t[l>>2]|0)+(t[a>>2]<<3)>>3]=d;d=+$o(r,w,k);w=t[a>>2]|0;c[(t[s>>2]|0)+(w<<3)>>3]=d;t[a>>2]=w+1}b=Ib(b)|0}while((b|0)!=0);w=e+36|0;if(t[w>>2]|0){d=+$o(t[e+20>>2]|0,r,k);if(!(+c[e+24>>3]=(h|0))break e;Jq(t[(t[w>>2]|0)+(b<<2)>>2]|0,A,r,i,a,n,f,l,s,o,u);b=b+1|0}}xq(k,a,n,f,l,s);h=e+32|0;b=0;while(1){if((b|0)>=(k|0))break;c[(t[f>>2]|0)+((P(t[a>>2]|0,k)|0)+b<<3)>>3]=+c[(t[h>>2]|0)+(b<<3)>>3];b=b+1|0}c[(t[l>>2]|0)+(t[a>>2]<<3)>>3]=+c[e+8>>3];d=+$o(t[h>>2]|0,r,k);l=t[a>>2]|0;c[(t[s>>2]|0)+(l<<3)>>3]=d;t[a>>2]=l+1}}}while(0);return}function Hq(e,A,r,i,a,n,f,l,s,o,u){e=e|0;A=+A;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;o=o|0;u=u|0;var b=0;b=t[e+16>>2]|0;c[o>>3]=0.0;t[a>>2]=0;t[u>>2]=0;t[n>>2]=10;if(!(t[f>>2]|0))t[f>>2]=$F(b*80|0)|0;if(!(t[l>>2]|0))t[l>>2]=$F(t[n>>2]<<3)|0;if(!(t[s>>2]|0))t[s>>2]=$F(t[n>>2]<<3)|0;Jq(e,A,r,i,a,n,f,l,s,o,u);return}function Pq(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=+i;a=+a;n=+n;f=f|0;l=l|0;var s=0,o=0,u=0;u=t[e>>2]|0;o=t[e+16>>2]|0;s=0;while(1){if((s|0)==4)break;c[f+(s<<3)>>3]=0.0;s=s+1|0}t[l>>2]=0;o=P(o,u)|0;s=0;while(1){if((s|0)>=(o|0))break;c[A+(s<<3)>>3]=0.0;s=s+1|0}Xq(e,e,r,A,i,a,n,f);Sq(e,A,f);i=1.0/+(u|0);s=0;while(1){if((s|0)==4)break;u=f+(s<<3)|0;c[u>>3]=+c[u>>3]*i;s=s+1|0}return}function Xq(e,A,r,i,a,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;n=+n;f=+f;l=l|0;var s=0,o=0.0,u=0,b=0.0,h=0,w=0,k=0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0;e:do{if((e|0)!=0&(A|0)!=0){if((t[e>>2]|0)>0?(t[A>>2]|0)>0:0){E=t[e+16>>2]|0;w=t[e+40>>2]|0;p=A+40|0;h=t[p>>2]|0;s=e+32|0;u=A+32|0;d=+$o(t[s>>2]|0,t[u>>2]|0,E);o=+c[e+24>>3];b=+c[A+24>>3];if(b+o>3]=+c[l>>3]+1.0;k=t[s>>2]|0;b=+c[e+8>>3];w=jq(e,E)|0;h=t[u>>2]|0;o=+c[A+8>>3];u=jq(A,E)|0;if(!(d>0.0))ge(94798,94681,191,94764);b=b*f*o;o=+z(+d,+(1.0-n));o=1.0/(n==-1.0?d*d:o);s=0;while(1){if((s|0)>=(E|0))break e;f=b*(+c[k+(s<<3)>>3]-+c[h+(s<<3)>>3])*o;i=w+(s<<3)|0;c[i>>3]=f+ +c[i>>3];i=u+(s<<3)|0;c[i>>3]=+c[i>>3]-f;s=s+1|0}}u=(w|0)!=0;s=(h|0)!=0;m=(e|0)==(A|0);if(u&s){v=l+8|0;g=n==-1.0;a=1.0-n;u=w;while(1){if(!u)break e;w=Nq(Cb(u)|0)|0;d=+Vq(Cb(u)|0);k=Rq(Cb(u)|0)|0;e=Uq(i,k,u,E)|0;d=d*f;h=t[p>>2]|0;while(1){if(!h)break;A=Nq(Cb(h)|0)|0;o=+Vq(Cb(h)|0);s=Rq(Cb(h)|0)|0;l=Uq(i,s,h,E)|0;A:do{if(!((k|0)==(s|0)|m&(s|0)<(k|0))){c[v>>3]=+c[v>>3]+1.0;n=+qo(r,E,k,s);o=d*o;b=+z(+n,+a);b=1.0/(g?n*n:b);s=0;while(1){if((s|0)>=(E|0))break A;n=o*(+c[w+(s<<3)>>3]-+c[A+(s<<3)>>3])*b;B=e+(s<<3)|0;c[B>>3]=n+ +c[B>>3];B=l+(s<<3)|0;c[B>>3]=+c[B>>3]-n;s=s+1|0}}}while(0);h=Ib(h)|0}u=Ib(u)|0}}if(m){k=1<=(k|0))break e;w=t[(t[h>>2]|0)+(u<<2)>>2]|0;s=u;while(1){if((s|0)==(k|0))break;Xq(w,t[(t[h>>2]|0)+(s<<2)>>2]|0,r,i,a,n,f,l);s=s+1|0}u=u+1|0}}if(!(u|!(o>b))){h=1<=(h|0))break e;Xq(t[(t[u>>2]|0)+(s<<2)>>2]|0,A,r,i,a,n,f,l);s=s+1|0}}if(!(s|!(b>o))){h=1<=(h|0))break e;Xq(t[(t[u>>2]|0)+(s<<2)>>2]|0,e,r,i,a,n,f,l);s=s+1|0}}if(!u){h=1<=(h|0))break e;Xq(t[(t[u>>2]|0)+(s<<2)>>2]|0,A,r,i,a,n,f,l);s=s+1|0}}if(s)ge(138394,94681,273,94764);h=1<=(h|0))break e;Xq(t[(t[u>>2]|0)+(s<<2)>>2]|0,e,r,i,a,n,f,l);s=s+1|0}}ge(94739,94681,175,94764)}}while(0);return}function Sq(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,h=0;i=t[e+40>>2]|0;u=t[e+16>>2]|0;n=+c[e+8>>3];b=jq(e,u)|0;if(!(n>0.0))ge(94673,94681,289,94692);o=r+16|0;c[o>>3]=+c[o>>3]+1.0;e:do{if(!i){o=1<=(o|0))break e;a=t[(t[s>>2]|0)+(e<<2)>>2]|0;if(a|0){if((t[a>>2]|0)<=0)break;l=jq(a,u)|0;f=+c[a+8>>3]*n;i=0;while(1){if((i|0)>=(u|0))break;h=l+(i<<3)|0;c[h>>3]=+c[h>>3]+ +c[b+(i<<3)>>3]*f;i=i+1|0}Sq(a,A,r)}e=e+1|0}ge(94728,94681,307,94692)}else{f=1.0/n;while(1){if(!i)break e;a=Uq(A,Rq(Cb(i)|0)|0,i,u)|0;n=+Vq(Cb(i)|0)*f;e=0;while(1){if((e|0)>=(u|0))break;h=a+(e<<3)|0;c[h>>3]=+c[h>>3]+ +c[b+(e<<3)>>3]*n;e=e+1|0}i=Ib(i)|0}}}while(0);return}function jq(e,A){e=e|0;A=A|0;var r=0;r=e+48|0;e=t[r>>2]|0;e:do{if(!e){e=$F(A<<3)|0;t[r>>2]=e;r=0;while(1){if((r|0)>=(A|0))break e;c[e+(r<<3)>>3]=0.0;r=r+1|0}}}while(0);return e|0}function Uq(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=t[(Cb(r)|0)+24>>2]|0;if(!a){a=e+((P(i,A)|0)<<3)|0;t[(Cb(r)|0)+24>>2]=a;a=t[(Cb(r)|0)+24>>2]|0}return a|0}function Tq(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0,n=0,f=0.0,l=0,s=0,o=0,u=0,b=0,h=0.0,w=0;u=e<<3;s=$F(u)|0;o=$F(u)|0;u=$F(u)|0;if((s|0)!=0&(o|0)!=0&(u|0)!=0){t=0;while(1){if((t|0)>=(e|0)){t=0;break}c[s+(t<<3)>>3]=+c[i+(t<<3)>>3];t=t+1|0}while(1){if((t|0)>=(e|0)){n=1;break}c[o+(t<<3)>>3]=+c[i+(t<<3)>>3];t=t+1|0}while(1){if((n|0)>=(A|0))break;l=P(n,e)|0;t=0;while(1){if((t|0)>=(e|0))break;b=s+(t<<3)|0;f=+c[b>>3];w=i+(t+l<<3)|0;h=+c[w>>3];c[b>>3]=f>3];f=+c[w>>3];c[b>>3]=h>f?h:f;t=t+1|0}n=n+1|0}f=+c[o>>3]-+c[s>>3];t=0;while(1){if((t|0)>=(e|0))break;w=s+(t<<3)|0;b=o+(t<<3)|0;c[u+(t<<3)>>3]=(+c[b>>3]+ +c[w>>3])*.5;h=+c[b>>3]-+c[w>>3];f=f>h?f:h;t=t+1|0}t=Oq(e,u,f==0.0?5.2e-06:f*.52,r)|0;e:do{if(!a){n=0;while(1){if((n|0)>=(A|0))break e;t=_q(t,i+((P(n,e)|0)<<3)|0,1.0,n)|0;n=n+1|0}}else{n=0;while(1){if((n|0)>=(A|0))break e;w=i+((P(n,e)|0)<<3)|0;t=_q(t,w,+c[a+(n<<3)>>3],n)|0;n=n+1|0}}}while(0);G2(s);G2(o);G2(u)}else{G2(s);G2(o);G2(u);t=0}return t|0}function Oq(e,A,r,i){e=e|0;A=A|0;r=+r;i=i|0;var a=0,n=0,f=0;n=$F(56)|0;t[n+16>>2]=e;t[n>>2]=0;f=$F(e<<3)|0;t[n+20>>2]=f;a=0;while(1){if((a|0)>=(e|0))break;c[f+(a<<3)>>3]=+c[A+(a<<3)>>3];a=a+1|0}if(r>0.0){c[n+24>>3]=r;c[n+8>>3]=0.0;t[n+32>>2]=0;t[n+36>>2]=0;t[n+40>>2]=0;t[n+44>>2]=i;t[n+48>>2]=0;return n|0}else ge(94896,94681,410,94906);return 0}function _q(e,A,r,i){e=e|0;A=A|0;r=+r;i=i|0;if(!e)e=0;else qq(e,A,r,i,0)|0;return e|0}function qq(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;var n=0,f=0,l=0,s=0.0,o=0.0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0;g=e+16|0;d=t[g>>2]|0;v=t[e+44>>2]|0;u=t[e>>2]|0;do{if(!u){t[e>>2]=1;c[e+8>>3]=r;l=$F(d<<3)|0;t[e+32>>2]=l;f=t[g>>2]|0;n=0;while(1){if((n|0)>=(f|0))break;c[l+(n<<3)>>3]=+c[A+(n<<3)>>3];n=n+1|0}n=Kq(f,r,A,i)|0;f=e+40|0;if(!(t[f>>2]|0)){t[f>>2]=Eb(n)|0;break}else ge(94807,94681,502,94815)}else{if((v|0)<=(a|0)){if(t[e+36>>2]|0)ge(94881,94681,541,94815);n=u+1|0;t[e>>2]=n;f=e+8|0;c[f>>3]=+c[f>>3]+r;f=e+32|0;s=+(n|0);o=1.0/+(u+2|0);n=0;while(1){if((n|0)>=(d|0))break;k=(t[f>>2]|0)+(n<<3)|0;c[k>>3]=(+c[k>>3]*s+ +c[A+(n<<3)>>3])*o;n=n+1|0}n=Kq(d,r,A,i)|0;f=e+40|0;l=t[f>>2]|0;if(!l)ge(94891,94681,547,94815);else{t[f>>2]=yb(l,n)|0;break}}f=e+8|0;c[f>>3]=+c[f>>3]+r;f=e+32|0;o=+(u|0);s=1.0/+(u+1|0);n=0;while(1){if((n|0)>=(d|0))break;k=(t[f>>2]|0)+(n<<3)|0;c[k>>3]=(+c[k>>3]*o+ +c[A+(n<<3)>>3])*s;n=n+1|0}k=e+36|0;w=1<>2]|0)){t[k>>2]=$F(w<<2)|0;n=0;while(1){if((n|0)>=(w|0))break e;t[(t[k>>2]|0)+(n<<2)>>2]=0;n=n+1|0}}}while(0);b=e+20|0;n=t[b>>2]|0;l=$q(d,n,A)|0;if(!((l|0)<(w|0)&(l|0)>-1))ge(94837,94681,515,94815);f=t[(t[k>>2]|0)+(l<<2)>>2]|0;if(!f){f=eK(t[g>>2]|0,n,+c[e+24>>3]*.5,v,l)|0;t[(t[k>>2]|0)+(l<<2)>>2]=f;f=t[(t[k>>2]|0)+(l<<2)>>2]|0}h=a+1|0;i=qq(f,A,r,i,h)|0;t[(t[k>>2]|0)+(l<<2)>>2]=i;if(!(t[(t[k>>2]|0)+(l<<2)>>2]|0))ge(94860,94681,519,94815);A=e+40|0;n=t[A>>2]|0;do{if(n|0){u=Rq(Cb(n)|0)|0;if((t[e>>2]|0)!=1)ge(94871,94681,523,94815);a=Nq(Cb(t[A>>2]|0)|0)|0;s=+Vq(Cb(t[A>>2]|0)|0);f=t[b>>2]|0;l=$q(d,f,a)|0;if(!((l|0)<(w|0)&(l|0)>-1))ge(94837,94681,527,94815);n=t[(t[k>>2]|0)+(l<<2)>>2]|0;if(!n){n=eK(t[g>>2]|0,f,+c[e+24>>3]*.5,v,l)|0;t[(t[k>>2]|0)+(l<<2)>>2]=n;n=t[(t[k>>2]|0)+(l<<2)>>2]|0}g=qq(n,a,s,u,h)|0;t[(t[k>>2]|0)+(l<<2)>>2]=g;if(!(t[(t[k>>2]|0)+(l<<2)>>2]|0))ge(94860,94681,532,94815);else{Bb(t[A>>2]|0,106);t[A>>2]=0;break}}}while(0);t[e>>2]=(t[e>>2]|0)+1}}while(0);return e|0}function Kq(e,A,r,i){e=e|0;A=+A;r=r|0;i=i|0;var a=0,n=0;n=$F(32)|0;c[n>>3]=A;a=$F(e<<3)|0;t[n+8>>2]=a;c[n+16>>3]=+(i|0);i=0;while(1){if((i|0)>=(e|0))break;c[a+(i<<3)>>3]=+c[r+(i<<3)>>3];i=i+1|0}t[n+24>>2]=0;return n|0}function $q(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;a=0;while(1){i=e+-1|0;if((e|0)<=0)break;e=i;a=a<<1|!(+c[r+(i<<3)>>3]-+c[A+(i<<3)>>3]<0.0)&1}return a|0}function eK(e,A,r,i,a){e=e|0;A=A|0;r=+r;i=i|0;a=a|0;var n=0,f=0,l=0.0;n=Oq(e,A,r,i)|0;f=t[n+20>>2]|0;l=-r;i=0;A=a;while(1){if((i|0)>=(e|0))break;a=f+(i<<3)|0;c[a>>3]=+c[a>>3]+((A&1|0)==0?l:r);i=i+1|0;A=(A|0)/2|0}return n|0}function AK(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if(e|0){A=t[e+16>>2]|0;G2(t[e+20>>2]|0);G2(t[e+32>>2]|0);G2(t[e+48>>2]|0);n=e+36|0;i=t[n>>2]|0;if(i|0){a=1<=(a|0))break;AK(t[A+(r<<2)>>2]|0);r=r+1|0;A=t[n>>2]|0}G2(A)}Bb(t[e+40>>2]|0,106);G2(e)}return}function rK(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0.0,d=0,v=0,g=0;e:do{if(!e)A=0;else{o=t[e+20>>2]|0;u=t[e+24>>2]|0;r=t[e+8>>2]|0;b=t[e>>2]|0;i=t[e+4>>2]|0;f=e+16|0;if((t[e+32>>2]|0)!=1)ge(94919,94943,76,94958);A=aK(i,b,r,t[f>>2]|0,1)|0;t[A+8>>2]=r;h=t[A+20>>2]|0;s=t[A+24>>2]|0;r=0;while(1){if((r|0)>(i|0)){r=0;break}t[h+(r<<2)>>2]=0;r=r+1|0}A:while(1){if((r|0)>=(b|0)){r=0;break}a=r+1|0;n=o+(a<<2)|0;r=t[o+(r<<2)>>2]|0;while(1){if((r|0)>=(t[n>>2]|0)){r=a;continue A}l=h+((t[u+(r<<2)>>2]|0)+1<<2)|0;t[l>>2]=(t[l>>2]|0)+1;r=r+1|0}}while(1){if((r|0)>=(i|0))break;l=r+1|0;n=h+(l<<2)|0;t[n>>2]=(t[n>>2]|0)+(t[h+(r<<2)>>2]|0);r=l}A:do{switch(t[f>>2]|0){case 1:{n=t[e+28>>2]|0;e=t[A+28>>2]|0;a=0;r:while(1){if((a|0)>=(b|0))break A;f=a+1|0;l=o+(f<<2)|0;r=t[o+(a<<2)>>2]|0;while(1){if((r|0)>=(t[l>>2]|0)){a=f;continue r}d=u+(r<<2)|0;t[s+(t[h+(t[d>>2]<<2)>>2]<<2)>>2]=a;k=+c[n+(r<<3)>>3];d=h+(t[d>>2]<<2)|0;w=t[d>>2]|0;t[d>>2]=w+1;c[e+(w<<3)>>3]=k;r=r+1|0}}}case 2:{n=t[e+28>>2]|0;e=t[A+28>>2]|0;a=0;r:while(1){if((a|0)>=(b|0))break A;f=a+1|0;l=o+(f<<2)|0;r=t[o+(a<<2)>>2]|0;while(1){if((r|0)>=(t[l>>2]|0)){a=f;continue r}d=u+(r<<2)|0;t[s+(t[h+(t[d>>2]<<2)>>2]<<2)>>2]=a;g=r<<1;d=h+(t[d>>2]<<2)|0;w=t[d>>2]|0;v=w<<1;c[e+(v<<3)>>3]=+c[n+(g<<3)>>3];c[e+((v|1)<<3)>>3]=+c[n+((g|1)<<3)>>3];t[d>>2]=w+1;r=r+1|0}}}case 4:{n=t[e+28>>2]|0;e=t[A+28>>2]|0;a=0;r:while(1){if((a|0)>=(b|0))break A;f=a+1|0;l=o+(f<<2)|0;r=t[o+(a<<2)>>2]|0;while(1){if((r|0)>=(t[l>>2]|0)){a=f;continue r}d=u+(r<<2)|0;t[s+(t[h+(t[d>>2]<<2)>>2]<<2)>>2]=a;v=t[n+(r<<2)>>2]|0;d=h+(t[d>>2]<<2)|0;g=t[d>>2]|0;t[d>>2]=g+1;t[e+(g<<2)>>2]=v;r=r+1|0}}}case 8:{a=0;r:while(1){if((a|0)>=(b|0))break A;n=a+1|0;e=o+(n<<2)|0;r=t[o+(a<<2)>>2]|0;while(1){if((r|0)>=(t[e>>2]|0)){a=n;continue r}v=h+(t[u+(r<<2)>>2]<<2)|0;g=t[v>>2]|0;t[v>>2]=g+1;t[s+(g<<2)>>2]=a;r=r+1|0}}}case 16:{iK(A);A=0;break e}default:{iK(A);A=0;break e}}}while(0);while(1){r=i+-1|0;if((i|0)<=0)break;t[h+(i<<2)>>2]=t[h+(r<<2)>>2];i=r}t[h>>2]=0}}while(0);return A|0}function iK(e){e=e|0;var A=0;if(e|0){A=t[e+20>>2]|0;if(A|0)G2(A);A=t[e+24>>2]|0;if(A|0)G2(A);G2(t[e+28>>2]|0);G2(e)}return}function aK(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;e=nK(e,A,i,tK(i)|0,a)|0;if((r|0)>0)fK(e,r)|0;return e|0}function tK(e){e=e|0;switch(e|0){case 1:{e=8;break}case 2:{e=16;break}case 4:{e=4;break}case 8:{e=0;break}case 16:{e=0;break}default:e=0}return e|0}function nK(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;n=$F(44)|0;t[n>>2]=e;t[n+4>>2]=A;t[n+8>>2]=0;t[n+12>>2]=0;t[n+16>>2]=r;t[n+40>>2]=i;if((a|0)==2)e=0;else e=$F((e<<2)+4|0)|0;t[n+20>>2]=e;t[n+24>>2]=0;t[n+28>>2]=0;t[n+32>>2]=a;t[n+36>>2]=0;return n|0}function fK(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0;f=t[e+32>>2]|0;a=e+28|0;t[a>>2]=0;r=A<<2;i=$F(r)|0;if((f|0)!=2){t[e+24>>2]=i;r=t[e+40>>2]|0;if((A|0)!=0&(r|0)>0)n=4}else{t[e+20>>2]=i;t[e+24>>2]=$F(r)|0;r=t[e+40>>2]|0;n=4}if((n|0)==4)t[a>>2]=$F(P(r,A)|0)|0;t[e+12>>2]=A;return e|0}function lK(e,A){e=e|0;A=A|0;if(!(sK(e,A)|0)){A=rK(e)|0;if(!A)A=0;else{e=oK(e,A)|0;iK(A);A=e+36|0;t[A>>2]=t[A>>2]|3;A=e}}else A=cK(e)|0;return A|0}function sK(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0.0;if(e){if((t[e+32>>2]|0)!=1)ge(94919,94943,187,95074);v=e+36|0;r=t[v>>2]|0;if((r&2|0)==0?(w=(A|0)!=0,(r&1|0)==0|w^1):0)if((t[e>>2]|0)==(t[e+4>>2]|0)?(g=rK(e)|0,(g|0)!=0):0){s=t[e+20>>2]|0;o=t[e+24>>2]|0;u=t[g+20>>2]|0;b=t[g+24>>2]|0;h=t[e>>2]|0;k=$F(h<<2)|0;A=0;while(1){if((A|0)>=(h|0))break;t[k+(A<<2)>>2]=-1;A=A+1|0}e:do{switch((w?8:t[e+16>>2]|0)|0){case 1:{n=t[e+28>>2]|0;f=t[g+28>>2]|0;A=0;while(1){if((A|0)>(h|0)){r=0;break}if((t[s+(A<<2)>>2]|0)==(t[u+(A<<2)>>2]|0))A=A+1|0;else{A=0;break e}}A:while(1){if((r|0)>=(h|0)){d=54;break e}i=s+(r<<2)|0;a=r+1|0;e=s+(a<<2)|0;A=t[i>>2]|0;while(1){if((A|0)>=(t[e>>2]|0))break;t[k+(t[o+(A<<2)>>2]<<2)>>2]=A;A=A+1|0}A=t[u+(r<<2)>>2]|0;e=t[u+(a<<2)>>2]|0;r=A;while(1){if((r|0)>=(e|0))break;if((t[k+(t[b+(r<<2)>>2]<<2)>>2]|0)<(t[i>>2]|0)){A=0;break e}else r=r+1|0}while(1){if((A|0)>=(e|0)){r=a;continue A}m=+c[f+(A<<3)>>3]-+c[n+(t[k+(t[b+(A<<2)>>2]<<2)>>2]<<3)>>3];if((m>=0.0?m:-m)>1.0e-07){A=0;break e}else A=A+1|0}}}case 2:{f=t[e+28>>2]|0;l=t[g+28>>2]|0;A=0;while(1){if((A|0)>(h|0)){r=0;break}if((t[s+(A<<2)>>2]|0)==(t[u+(A<<2)>>2]|0))A=A+1|0;else{A=0;break e}}A:while(1){if((r|0)>=(h|0)){d=54;break e}a=s+(r<<2)|0;n=r+1|0;e=s+(n<<2)|0;A=t[a>>2]|0;while(1){if((A|0)>=(t[e>>2]|0))break;t[k+(t[o+(A<<2)>>2]<<2)>>2]=A;A=A+1|0}r=t[u+(r<<2)>>2]|0;i=t[u+(n<<2)>>2]|0;A=r;while(1){if((A|0)>=(i|0)){A=r;break}if((t[k+(t[b+(A<<2)>>2]<<2)>>2]|0)<(t[a>>2]|0)){A=0;break e}else A=A+1|0}while(1){if((A|0)>=(i|0)){r=n;continue A}r=A<<1;e=t[k+(t[b+(A<<2)>>2]<<2)>>2]<<1;m=+c[l+(r<<3)>>3]-+c[f+(e<<3)>>3];if((m>=0.0?m:-m)>1.0e-07){A=0;break e}m=+c[l+((r|1)<<3)>>3]-+c[f+((e|1)<<3)>>3];if((m>=0.0?m:-m)>1.0e-07){A=0;break e}else A=A+1|0}}}case 4:{a=t[e+28>>2]|0;n=t[g+28>>2]|0;A=0;A:while(1){if((A|0)>=(h|0)){d=54;break e}i=s+(A<<2)|0;f=A+1|0;e=s+(f<<2)|0;r=t[i>>2]|0;while(1){if((r|0)>=(t[e>>2]|0))break;t[k+(t[o+(r<<2)>>2]<<2)>>2]=r;r=r+1|0}A=t[u+(A<<2)>>2]|0;e=t[u+(f<<2)>>2]|0;r=A;while(1){if((r|0)>=(e|0))break;if((t[k+(t[b+(r<<2)>>2]<<2)>>2]|0)<(t[i>>2]|0)){A=0;break e}else r=r+1|0}while(1){if((A|0)>=(e|0)){A=f;continue A}if((t[n+(A<<2)>>2]|0)==(t[a+(t[k+(t[b+(A<<2)>>2]<<2)>>2]<<2)>>2]|0))A=A+1|0;else{A=0;break e}}}}case 8:{e=0;A:while(1){if((e|0)>=(h|0)){d=54;break e}i=s+(e<<2)|0;a=e+1|0;r=s+(a<<2)|0;A=t[i>>2]|0;while(1){if((A|0)>=(t[r>>2]|0))break;t[k+(t[o+(A<<2)>>2]<<2)>>2]=A;A=A+1|0}r=t[u+(a<<2)>>2]|0;A=t[u+(e<<2)>>2]|0;while(1){if((A|0)>=(r|0)){e=a;continue A}if((t[k+(t[b+(A<<2)>>2]<<2)>>2]|0)<(t[i>>2]|0)){A=0;break e}else A=A+1|0}}}default:A=0}}while(0);if((d|0)==54){r=t[v>>2]|0;if(w)A=1;else{t[v>>2]=r|2;A=3}t[v>>2]=A|r;A=1}G2(k);iK(g)}else A=0;else A=1}else A=0;return A|0}function cK(e){e=e|0;var A=0,r=0,i=0,a=0;if(!e)A=0;else{i=e+8|0;a=e+40|0;A=uK(t[e>>2]|0,t[e+4>>2]|0,t[i>>2]|0,t[e+16>>2]|0,t[a>>2]|0,t[e+32>>2]|0)|0;r=e+20|0;Q6(t[A+20>>2]|0,t[r>>2]|0,(t[e>>2]<<2)+4|0)|0;Q6(t[A+24>>2]|0,t[e+24>>2]|0,t[(t[r>>2]|0)+(t[e>>2]<<2)>>2]<<2|0)|0;r=t[e+28>>2]|0;if(r|0)Q6(t[A+28>>2]|0,r|0,P(t[i>>2]|0,t[a>>2]|0)|0)|0;t[A+36>>2]=t[e+36>>2];t[A+8>>2]=t[i>>2]}return A|0}function oK(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;w=t[e+20>>2]|0;d=t[e+24>>2]|0;v=t[A+20>>2]|0;g=t[A+24>>2]|0;if(!((e|0)!=0&(A|0)!=0))ge(94981,94943,973,94988);k=t[e+32>>2]|0;if(!((k|0)==1?(k|0)==(t[A+32>>2]|0):0))ge(95005,94943,974,94988);i=e+16|0;r=t[i>>2]|0;if((r|0)!=(t[A+16>>2]|0))ge(95055,94943,975,94988);h=t[e>>2]|0;a=t[e+4>>2]|0;if(((h|0)==(t[A>>2]|0)?(a|0)==(t[A+4>>2]|0):0)?(m=aK(h,a,(t[A+8>>2]|0)+(t[e+8>>2]|0)|0,r,1)|0,m|0):0){u=t[m+20>>2]|0;b=t[m+24>>2]|0;k=$F(a<<2)|0;r=0;while(1){if((r|0)>=(a|0))break;t[k+(r<<2)>>2]=-1;r=r+1|0}t[u>>2]=0;e:do{switch(t[i>>2]|0){case 1:{o=t[e+28>>2]|0;f=t[A+28>>2]|0;l=t[m+28>>2]|0;r=0;a=0;while(1){if((a|0)>=(h|0))break e;s=a+1|0;i=w+(s<<2)|0;e=t[w+(a<<2)>>2]|0;while(1){if((e|0)>=(t[i>>2]|0))break;n=d+(e<<2)|0;t[k+(t[n>>2]<<2)>>2]=r;t[b+(r<<2)>>2]=t[n>>2];c[l+(r<<3)>>3]=+c[o+(e<<3)>>3];e=e+1|0;r=r+1|0}A=v+(s<<2)|0;n=u+(a<<2)|0;a=t[v+(a<<2)>>2]|0;while(1){if((a|0)>=(t[A>>2]|0))break;e=t[g+(a<<2)>>2]|0;i=t[k+(e<<2)>>2]|0;if((i|0)<(t[n>>2]|0)){t[b+(r<<2)>>2]=e;c[l+(r<<3)>>3]=+c[f+(a<<3)>>3];r=r+1|0}else{i=l+(i<<3)|0;c[i>>3]=+c[i>>3]+ +c[f+(a<<3)>>3]}a=a+1|0}t[u+(s<<2)>>2]=r;a=s}}case 2:{o=t[e+28>>2]|0;s=t[A+28>>2]|0;f=t[m+28>>2]|0;a=0;r=0;while(1){if((a|0)>=(h|0))break e;l=a+1|0;i=w+(l<<2)|0;e=t[w+(a<<2)>>2]|0;while(1){if((e|0)>=(t[i>>2]|0))break;A=d+(e<<2)|0;t[k+(t[A>>2]<<2)>>2]=r;t[b+(r<<2)>>2]=t[A>>2];A=e<<1;n=r<<1;c[f+(n<<3)>>3]=+c[o+(A<<3)>>3];c[f+((n|1)<<3)>>3]=+c[o+((A|1)<<3)>>3];e=e+1|0;r=r+1|0}A=v+(l<<2)|0;n=u+(a<<2)|0;a=t[v+(a<<2)>>2]|0;while(1){if((a|0)>=(t[A>>2]|0))break;e=t[g+(a<<2)>>2]|0;i=t[k+(e<<2)>>2]|0;if((i|0)<(t[n>>2]|0)){t[b+(r<<2)>>2]=e;e=a<<1;i=r<<1;c[f+(i<<3)>>3]=+c[s+(e<<3)>>3];c[f+((i|1)<<3)>>3]=+c[s+((e|1)<<3)>>3];r=r+1|0}else{e=a<<1;i=i<<1;p=f+(i<<3)|0;c[p>>3]=+c[p>>3]+ +c[s+(e<<3)>>3];i=f+((i|1)<<3)|0;c[i>>3]=+c[i>>3]+ +c[s+((e|1)<<3)>>3]}a=a+1|0}t[u+(l<<2)>>2]=r;a=l}}case 4:{o=t[e+28>>2]|0;f=t[A+28>>2]|0;l=t[m+28>>2]|0;a=0;r=0;while(1){if((a|0)>=(h|0))break e;s=a+1|0;i=w+(s<<2)|0;e=t[w+(a<<2)>>2]|0;while(1){if((e|0)>=(t[i>>2]|0))break;p=d+(e<<2)|0;t[k+(t[p>>2]<<2)>>2]=r;t[b+(r<<2)>>2]=t[p>>2];t[l+(r<<2)>>2]=t[o+(e<<2)>>2];e=e+1|0;r=r+1|0}A=v+(s<<2)|0;n=u+(a<<2)|0;a=t[v+(a<<2)>>2]|0;while(1){if((a|0)>=(t[A>>2]|0))break;e=t[g+(a<<2)>>2]|0;i=t[k+(e<<2)>>2]|0;if((i|0)<(t[n>>2]|0)){t[b+(r<<2)>>2]=e;t[l+(r<<2)>>2]=t[f+(a<<2)>>2];r=r+1|0}else{p=l+(i<<2)|0;t[p>>2]=(t[p>>2]|0)+(t[f+(a<<2)>>2]|0)}a=a+1|0}t[u+(s<<2)>>2]=r;a=s}}case 8:{r=0;a=0;while(1){if((a|0)>=(h|0))break e;f=a+1|0;i=w+(f<<2)|0;e=t[w+(a<<2)>>2]|0;while(1){if((e|0)>=(t[i>>2]|0))break;p=d+(e<<2)|0;t[k+(t[p>>2]<<2)>>2]=r;t[b+(r<<2)>>2]=t[p>>2];r=r+1|0;e=e+1|0}A=v+(f<<2)|0;n=u+(a<<2)|0;i=t[v+(a<<2)>>2]|0;while(1){if((i|0)>=(t[A>>2]|0))break;e=t[g+(i<<2)>>2]|0;if((t[k+(e<<2)>>2]|0)<(t[n>>2]|0)){t[b+(r<<2)>>2]=e;r=r+1|0}i=i+1|0}t[u+(f<<2)>>2]=r;a=f}}default:r=0}}while(0);t[m+8>>2]=r;G2(k);return m|0}return 0}function uK(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;e=nK(e,A,i,a,t)|0;if((r|0)>0)fK(e,r)|0;return e|0}function bK(e,A){e=e|0;A=A|0;var r=0;if(!(sK(e,A)|0)){A=rK(e)|0;if(!A)A=0;else{r=oK(e,A)|0;iK(A);A=r+36|0;t[A>>2]=t[A>>2]|3;A=r;r=5}}else{A=cK(e)|0;r=5}if((r|0)==5)A=hK(A)|0;return A|0}function hK(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,u=0;e:do{if(!e)e=0;else{s=t[e+20>>2]|0;o=t[e+24>>2]|0;r=t[s>>2]|0;A:do{switch(t[e+16>>2]|0){case 1:{l=t[e+28>>2]|0;f=0;A=0;while(1){if((f|0)>=(t[e>>2]|0))break A;a=f+1|0;n=s+(a<<2)|0;while(1){i=t[n>>2]|0;if((r|0)>=(i|0))break;i=t[o+(r<<2)>>2]|0;if((i|0)!=(f|0)){t[o+(A<<2)>>2]=i;c[l+(A<<3)>>3]=+c[l+(r<<3)>>3];A=A+1|0}r=r+1|0}t[n>>2]=A;f=a;r=i}}case 2:{l=t[e+28>>2]|0;f=0;A=0;while(1){if((f|0)>=(t[e>>2]|0))break A;a=f+1|0;n=s+(a<<2)|0;while(1){i=t[n>>2]|0;if((r|0)>=(i|0))break;i=t[o+(r<<2)>>2]|0;if((i|0)!=(f|0)){t[o+(A<<2)>>2]=i;u=r<<1;i=A<<1;c[l+(i<<3)>>3]=+c[l+(u<<3)>>3];c[l+((i|1)<<3)>>3]=+c[l+((u|1)<<3)>>3];A=A+1|0}r=r+1|0}t[n>>2]=A;f=a;r=i}}case 4:{l=t[e+28>>2]|0;f=0;A=0;while(1){if((f|0)>=(t[e>>2]|0))break A;a=f+1|0;n=s+(a<<2)|0;while(1){i=t[n>>2]|0;if((r|0)>=(i|0))break;i=t[o+(r<<2)>>2]|0;if((i|0)!=(f|0)){t[o+(A<<2)>>2]=i;t[l+(A<<2)>>2]=t[l+(r<<2)>>2];A=A+1|0}r=r+1|0}t[n>>2]=A;f=a;r=i}}case 8:{f=0;A=0;while(1){if((f|0)>=(t[e>>2]|0))break A;a=f+1|0;n=s+(a<<2)|0;while(1){i=t[n>>2]|0;if((r|0)>=(i|0))break;i=t[o+(r<<2)>>2]|0;if((i|0)!=(f|0)){t[o+(A<<2)>>2]=i;A=A+1|0}r=r+1|0}t[n>>2]=A;f=a;r=i}}default:{e=0;break e}}}while(0);t[e+8>>2]=A}}while(0);return e|0}function wK(e){e=e|0;if((t[e+32>>2]|0)==2)return kK(t[e+8>>2]|0,t[e>>2]|0,t[e+4>>2]|0,t[e+20>>2]|0,t[e+24>>2]|0,t[e+28>>2]|0,t[e+16>>2]|0,t[e+40>>2]|0)|0;else ge(95100,94943,803,95126);return 0}function kK(e,A,r,i,a,t,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;return Qo(e,A,r,i,a,t,n,f,1)|0}function dK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;s=e+72|0;c=e+352|0;o=e+356|0;u=e+360|0;l=0;e:while(1){f=r-A|0;if((f|0)<=0){r=-1;break}switch(i[s+(n[A>>0]|0)>>0]|0){case 8:case 1:case 0:{b=16;break e}case 5:{if((f|0)<2){r=-2;break e}if(Z5[t[c>>2]&127](e,A)|0){b=6;break e}f=l;A=A+2|0;l=f;continue e}case 6:{if((f|0)<3){r=-2;break e}if(Z5[t[o>>2]&127](e,A)|0){b=10;break e}f=l;A=A+3|0;l=f;continue e}case 7:{if((f|0)<4){r=-2;break e}if(Z5[t[u>>2]&127](e,A)|0){b=14;break e}f=l;A=A+4|0;l=f;continue e}case 2:{f=A+1|0;if((r-f|0)<=0){r=-1;break e}if((i[f>>0]|0)!=33){h=l;A=f;l=h;continue e}f=A+2|0;if((r-f|0)<=0){r=-1;break e}h=(i[f>>0]|0)==91;l=l+(h&1)|0;A=h?A+3|0:f;continue e}case 4:{f=A+1|0;if((r-f|0)<=0){r=-1;break e}if((i[f>>0]|0)!=93){h=l;A=f;l=h;continue e}f=A+2|0;if((r-f|0)<=0){r=-1;break e}if((i[f>>0]|0)!=62){h=l;A=f;l=h;continue e}A=A+3|0;if(!l){b=26;break e}l=l+-1|0;continue e}default:{h=l;A=A+1|0;l=h;continue e}}}if((b|0)==6){t[a>>2]=A;r=0}else if((b|0)==10){t[a>>2]=A;r=0}else if((b|0)==14){t[a>>2]=A;r=0}else if((b|0)==16){t[a>>2]=A;r=0}else if((b|0)==26){t[a>>2]=A;r=42}return r|0}function vK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;do{if(A>>>0>>0){c=r;if((c-A|0)>0){o=e+72|0;l=A;e:while(1){if((c-l|0)<=0){s=24;break}switch(i[o+(n[l>>0]|0)>>0]|0){case 3:{s=8;break e}case 2:{s=11;break e}case 10:{s=12;break e}case 9:{s=15;break e}case 21:{s=19;break e}case 5:{f=2;break}case 6:{f=3;break}case 7:{f=4;break}default:f=1}l=l+f|0}if((s|0)==8)if((l|0)==(A|0)){f=QK(e,A+1|0,r,a)|0;break}else{t[a>>2]=l;f=6;break}else if((s|0)==11){t[a>>2]=l;f=0;break}else if((s|0)==12)if((l|0)==(A|0)){t[a>>2]=A+1;f=7;break}else{t[a>>2]=l;f=6;break}else if((s|0)==15){if((l|0)!=(A|0)){t[a>>2]=l;f=6;break}f=A+1|0;if((c-f|0)<=0){f=-3;break}t[a>>2]=(i[o+(n[f>>0]|0)>>0]|0)==10?A+2|0:f;f=7;break}else if((s|0)==19)if((l|0)==(A|0)){t[a>>2]=A+1;f=39;break}else{t[a>>2]=l;f=6;break}else if((s|0)==24){t[a>>2]=l;f=6;break}}else f=-1}else f=-4}while(0);return f|0}function gK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;do{if(A>>>0>>0){c=r;if((c-A|0)>0){o=e+72|0;l=A;e:while(1){if((c-l|0)<=0){s=23;break}switch(i[o+(n[l>>0]|0)>>0]|0){case 3:{s=8;break e}case 30:{s=11;break e}case 10:{s=14;break e}case 9:{s=17;break e}case 5:{f=2;break}case 6:{f=3;break}case 7:{f=4;break}default:f=1}l=l+f|0}if((s|0)==8)if((l|0)==(A|0)){f=QK(e,A+1|0,r,a)|0;break}else{t[a>>2]=l;f=6;break}else if((s|0)==11)if((l|0)==(A|0)){f=DK(e,A+1|0,r,a)|0;f=(f|0)==22?0:f;break}else{t[a>>2]=l;f=6;break}else if((s|0)==14)if((l|0)==(A|0)){t[a>>2]=A+1;f=7;break}else{t[a>>2]=l;f=6;break}else if((s|0)==17){if((l|0)!=(A|0)){t[a>>2]=l;f=6;break}f=A+1|0;if((c-f|0)<=0){f=-3;break}t[a>>2]=(i[o+(n[f>>0]|0)>>0]|0)==10?A+2|0:f;f=7;break}else if((s|0)==23){t[a>>2]=l;f=6;break}}else f=-1}else f=-4}while(0);return f|0}function mK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var t=0,n=0;t=r;e=A;while(1){A=i[a>>0]|0;if(!(A<<24>>24)){n=6;break}if((t-e|0)<1){e=0;break}if((i[e>>0]|0)!=A<<24>>24){e=0;break}a=a+1|0;e=e+1|0}if((n|0)==6)e=(e|0)==(r|0)&1;return e|0}function pK(e,A){e=e|0;A=A|0;var r=0,a=0;a=e+72|0;e=A;e:while(1){switch(i[a+(n[e>>0]|0)>>0]|0){case 5:{r=2;break}case 6:{r=3;break}case 7:{r=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{r=1;break}default:break e}e=e+r|0}return e-A|0}function EK(e,A){e=e|0;A=A|0;e=e+72|0;e:while(1){switch(i[e+(n[A>>0]|0)>>0]|0){case 21:case 9:case 10:break;default:break e}A=A+1|0}return A|0}function BK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;o=e+72|0;s=0;c=0;e=1;e:while(1){f=A+1|0;l=i[f>>0]|0;do{switch(i[o+(l&255)>>0]|0){case 5:{if(!e)if((c|0)<(r|0)){t[a+(c<<4)>>2]=f;i[a+(c<<4)+12>>0]=1;e=1}else e=1;f=c;l=s;A=A+2|0;c=f;s=l;continue e}case 6:{if(!e)if((c|0)<(r|0)){t[a+(c<<4)>>2]=f;i[a+(c<<4)+12>>0]=1;e=1}else e=1;f=c;l=s;A=A+3|0;c=f;s=l;continue e}case 7:{if(!e)if((c|0)<(r|0)){t[a+(c<<4)>>2]=f;i[a+(c<<4)+12>>0]=1;e=1}else e=1;f=c;l=s;A=A+4|0;c=f;s=l;continue e}case 24:case 22:case 29:{if(e|0){h=e;b=c;l=s;A=f;e=h;c=b;s=l;continue e}if((c|0)>=(r|0)){b=c;h=s;e=1;A=f;c=b;s=h;continue e}t[a+(c<<4)>>2]=f;i[a+(c<<4)+12>>0]=1;b=c;h=s;e=1;A=f;c=b;s=h;continue e}case 12:{if((e|0)!=2){if((c|0)>=(r|0)){h=c;s=12;e=2;A=f;c=h;continue e}t[a+(c<<4)+4>>2]=A+2;h=c;s=12;e=2;A=f;c=h;continue e}if((s|0)!=12){b=c;h=s;e=2;A=f;c=b;s=h;continue e}if((c|0)<(r|0))t[a+(c<<4)+8>>2]=f;s=12;c=c+1|0;e=0;A=f;continue e}case 13:{if((e|0)!=2){if((c|0)>=(r|0)){h=c;s=13;e=2;A=f;c=h;continue e}t[a+(c<<4)+4>>2]=A+2;h=c;s=13;e=2;A=f;c=h;continue e}if((s|0)!=13){b=c;h=s;e=2;A=f;c=b;s=h;continue e}if((c|0)<(r|0))t[a+(c<<4)+8>>2]=f;s=13;c=c+1|0;e=0;A=f;continue e}case 3:{if((c|0)>=(r|0)){l=e;b=c;h=s;A=f;e=l;c=b;s=h;continue e}i[a+(c<<4)+12>>0]=0;l=e;b=c;h=s;A=f;e=l;c=b;s=h;continue e}case 21:{switch(e|0){case 1:{b=c;h=s;e=0;A=f;c=b;s=h;continue e}case 2:break;default:{l=e;b=c;h=s;A=f;e=l;c=b;s=h;continue e}}if((c|0)>=(r|0)){b=c;h=s;e=2;A=f;c=b;s=h;continue e}e=a+(c<<4)+12|0;if(!(i[e>>0]|0)){b=c;h=s;e=2;A=f;c=b;s=h;continue e}if(((l<<24>>24==32?(f|0)!=(t[a+(c<<4)+4>>2]|0):0)?(u=i[A+2>>0]|0,u<<24>>24!=32):0)?(s|0)!=(n[o+(u&255)>>0]|0):0){b=c;h=s;e=2;A=f;c=b;s=h;continue e}i[e>>0]=0;b=c;h=s;e=2;A=f;c=b;s=h;continue e}case 10:case 9:{switch(e|0){case 1:{b=c;h=s;e=0;A=f;c=b;s=h;continue e}case 2:break;default:{l=e;b=c;h=s;A=f;e=l;c=b;s=h;continue e}}if((c|0)>=(r|0)){b=c;h=s;e=2;A=f;c=b;s=h;continue e}i[a+(c<<4)+12>>0]=0;b=c;h=s;e=2;A=f;c=b;s=h;continue e}case 17:case 11:if((e|0)==2){b=c;h=s;e=2;A=f;c=b;s=h;continue e}else break e;default:{l=e;b=c;h=s;A=f;e=l;c=b;s=h;continue e}}}while(0)}return c|0}function yK(e,A){e=e|0;A=A|0;var r=0,a=0;e=A+2|0;r=i[e>>0]|0;e:do{if(r<<24>>24==120){r=A+3|0;e=0;while(1){A:while(1){a=i[r>>0]|0;A=a<<24>>24;if(a<<24>>24==59){a=14;break e}switch(A|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{a=7;break A}case 70:case 69:case 68:case 67:case 66:case 65:{a=8;break A}case 102:case 101:case 100:case 99:case 98:case 97:{a=9;break A}default:{}}r=r+1|0}if((a|0)==7){a=0;e=A+-48|e<<4}else if((a|0)==8){a=0;e=(e<<4)+-55+A|0}else if((a|0)==9){a=0;e=(e<<4)+-87+A|0}if((e|0)<1114112)r=r+1|0;else{e=-1;break}}}else{A=e;e=0;while(1){if(r<<24>>24==59){a=14;break e}e=(r<<24>>24)+-48+(e*10|0)|0;if((e|0)>=1114112){e=-1;break e}r=A+1|0;A=r;r=i[r>>0]|0}}}while(0);if((a|0)==14)e=po(e)|0;return e|0}function CK(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;e:do{switch(r-A|0){case 2:{if((i[A+1>>0]|0)==116){e=i[A>>0]|0;e=e<<24>>24==108?60:e<<24>>24==103?62:0}else a=14;break}case 3:{if(((i[A>>0]|0)==97?(i[A+1>>0]|0)==109:0)?(i[A+2>>0]|0)==112:0)e=38;else a=14;break}case 4:switch(i[A>>0]|0){case 113:{if((i[A+1>>0]|0)!=117){a=14;break e}if((i[A+2>>0]|0)!=111){a=14;break e}if((i[A+3>>0]|0)==116){e=34;break e}else{a=14;break e}}case 97:{if((i[A+1>>0]|0)!=112){a=14;break e}if((i[A+2>>0]|0)!=111){a=14;break e}if((i[A+3>>0]|0)==115){e=39;break e}else{a=14;break e}}default:{a=14;break e}}default:a=14}}while(0);if((a|0)==14)e=0;return e|0}function IK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0;f=e+72|0;l=a+4|0;while(1){if((r-A|0)<=0)break;switch(i[f+(n[A>>0]|0)>>0]|0){case 5:{A=A+2|0;break}case 6:{A=A+3|0;break}case 7:{A=A+4|0;break}case 10:{t[l>>2]=-1;t[a>>2]=(t[a>>2]|0)+1;A=A+1|0;break}case 9:{t[a>>2]=(t[a>>2]|0)+1;e=A+1|0;if((r-e|0)>0)A=(i[f+(n[e>>0]|0)>>0]|0)==10?A+2|0:e;else A=e;t[l>>2]=-1;break}default:A=A+1|0}t[l>>2]=(t[l>>2]|0)+1}return}function ZK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0;n=r+-1|0;e=e+72|0;e:while(1){A=A+1|0;if((n-A|0)<=0){A=1;break}r=i[A>>0]|0;switch(i[e+(r&255)>>0]|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:continue e;case 21:if(r<<24>>24==9){f=7;break e}else continue e;case 22:case 26:{if(r<<24>>24>=0)continue e;break}default:{}}switch(r<<24>>24|0){case 64:case 36:break;default:{f=7;break e}}}if((f|0)==7){t[a>>2]=A;A=0}return A|0}function GK(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0;l=f;while(1){s=t[A>>2]|0;if((s|0)==(r|0)){e=0;break}c=n[s>>0]|0;e=t[a>>2]|0;if(!(c&128)){if((e|0)==(f|0)){e=2;break}t[A>>2]=s+1;s=i[s>>0]|0;c=t[a>>2]|0;t[a>>2]=c+1;i[c>>0]=s;continue}else{if((l-e|0)<2){e=2;break}t[a>>2]=e+1;i[e>>0]=c>>>6|192;s=t[a>>2]|0;t[a>>2]=s+1;i[s>>0]=c&63|128;t[A>>2]=(t[A>>2]|0)+1;continue}}return e|0}function LK(e,A,r,i,f){e=e|0;A=A|0;r=r|0;i=i|0;f=f|0;var l=0,s=0;while(1){e=t[A>>2]|0;l=e>>>0>>0;s=t[i>>2]|0;if(!(l&s>>>0>>0))break;t[A>>2]=e+1;l=n[e>>0]|0;s=t[i>>2]|0;t[i>>2]=s+2;a[s>>1]=l}return((s|0)!=(f|0)|l^1?0:2)|0}function QK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;c=r;f=c-A|0;e:do{if((f|0)>0){o=e+72|0;switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{t[a>>2]=A;r=0;break e}case 24:case 22:{r=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else r=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else r=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else r=4;break}case 19:{r=zK(e,A+1|0,r,a)|0;break e}default:{t[a>>2]=A;r=0;break e}}f=e+328|0;l=e+332|0;s=e+336|0;A=A+r|0;A:while(1){r=c-A|0;if((r|0)<=0){r=-1;break e}switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{f=18;break A}case 18:{f=29;break A}case 27:case 26:case 25:case 24:case 22:{r=1;break}case 5:{if((r|0)<2){r=-2;break e}if(!(Z5[t[f>>2]&127](e,A)|0)){f=21;break A}else r=2;break}case 6:{if((r|0)<3){r=-2;break e}if(!(Z5[t[l>>2]&127](e,A)|0)){f=24;break A}else r=3;break}case 7:{if((r|0)<4){r=-2;break e}if(!(Z5[t[s>>2]&127](e,A)|0)){f=27;break A}else r=4;break}default:{f=30;break A}}A=A+r|0}if((f|0)==18){t[a>>2]=A;r=0;break}else if((f|0)==21){t[a>>2]=A;r=0;break}else if((f|0)==24){t[a>>2]=A;r=0;break}else if((f|0)==27){t[a>>2]=A;r=0;break}else if((f|0)==29){t[a>>2]=A+1;r=9;break}else if((f|0)==30){t[a>>2]=A;r=0;break}}else r=-1}while(0);return r|0}function DK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;f=r-A|0;e:do{if((f|0)>0){o=e+72|0;switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{t[a>>2]=A;r=0;break e}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=4;break}case 30:case 9:case 10:case 21:{t[a>>2]=A;r=22;break e}default:{t[a>>2]=A;r=0;break e}}l=e+328|0;s=e+332|0;c=e+336|0;A=A+f|0;A:while(1){f=r-A|0;if((f|0)<=0){r=-1;break e}switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{f=18;break A}case 18:{f=29;break A}case 27:case 26:case 25:case 24:case 22:{f=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[l>>2]&127](e,A)|0)){f=21;break A}else f=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[s>>2]&127](e,A)|0)){f=24;break A}else f=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[c>>2]&127](e,A)|0)){f=27;break A}else f=4;break}default:{f=30;break A}}A=A+f|0}if((f|0)==18){t[a>>2]=A;r=0;break}else if((f|0)==21){t[a>>2]=A;r=0;break}else if((f|0)==24){t[a>>2]=A;r=0;break}else if((f|0)==27){t[a>>2]=A;r=0;break}else if((f|0)==29){t[a>>2]=A+1;r=28;break}else if((f|0)==30){t[a>>2]=A;r=0;break}}else r=-1}while(0);return r|0}function zK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0;l=r;e:do{if((l-A|0)>0){f=i[A>>0]|0;if(f<<24>>24==120){e=WK(e,A+1|0,r,a)|0;break}r=e+72|0;if((i[r+(f&255)>>0]|0)!=25){t[a>>2]=A;e=0;break}A:while(1){e=A+1|0;if((l-e|0)<=0){e=-1;break e}switch(i[r+(n[e>>0]|0)>>0]|0){case 25:{A=e;break}case 18:{r=8;break A}default:{r=9;break A}}}if((r|0)==8){t[a>>2]=A+2;e=10;break}else if((r|0)==9){t[a>>2]=e;e=0;break}}else e=-1}while(0);return e|0}function WK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0;e:do{if((r-A|0)>0){e=e+72|0;if((i[e+(n[A>>0]|0)>>0]&-2)<<24>>24!=24){t[a>>2]=A;r=0;break}A:while(1){f=A+1|0;if((r-f|0)<=0){r=-1;break e}switch(i[e+(n[f>>0]|0)>>0]|0){case 24:case 25:{A=f;break}case 18:{e=6;break A}default:{e=7;break A}}}if((e|0)==6){t[a>>2]=A+2;r=10;break}else if((e|0)==7){t[a>>2]=f;r=0;break}}else r=-1}while(0);return r|0}function YK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;k=r;f=k-A|0;e:do{if((f|0)>0){w=e+72|0;switch(i[w+(n[A>>0]|0)>>0]|0){case 29:{t[a>>2]=A;f=0;break e}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0)){t[a>>2]=A;f=0;break e}else f=2;break}case 6:{if((f|0)<3){f=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0)){t[a>>2]=A;f=0;break e}else f=3;break}case 7:{if((f|0)<4){f=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0)){t[a>>2]=A;f=0;break e}else f=4;break}case 16:{f=A+1|0;if((k-f|0)<=0){f=-1;break e}switch(i[w+(n[f>>0]|0)>>0]|0){case 27:{f=FK(e,A+2|0,r,a)|0;break e}case 20:{f=MK(A+2|0,r,a)|0;break e}default:{t[a>>2]=f;f=0;break e}}}case 15:{f=VK(e,A+1|0,r,a)|0;break e}case 17:{f=NK(e,A+1|0,r,a)|0;break e}default:{t[a>>2]=A;f=0;break e}}s=e+328|0;c=e+332|0;o=e+336|0;u=e+340|0;b=e+344|0;h=e+348|0;l=0;f=A+f|0;A:while(1){A=k-f|0;if((A|0)<=0){f=-1;break e}r:do{switch(i[w+(n[f>>0]|0)>>0]|0){case 29:{d=24;break A}case 10:case 9:case 21:{d=50;break A}case 11:{d=64;break A}case 17:break A;case 27:case 26:case 25:case 24:case 22:{A=1;break}case 5:{if((A|0)<2){f=-2;break e}if(!(Z5[t[s>>2]&127](e,f)|0)){d=27;break A}else A=2;break}case 6:{if((A|0)<3){f=-2;break e}if(!(Z5[t[c>>2]&127](e,f)|0)){d=30;break A}else A=3;break}case 7:{if((A|0)<4){f=-2;break e}if(!(Z5[t[o>>2]&127](e,f)|0)){d=33;break A}else A=4;break}case 23:{if(l|0){d=35;break A}l=f+1|0;A=k-l|0;if((A|0)<=0){f=-1;break e}switch(i[w+(n[l>>0]|0)>>0]|0){case 29:{d=38;break A}case 24:case 22:{l=1;A=2;break r}case 5:{if((A|0)<2){f=-2;break e}if(!(Z5[t[u>>2]&127](e,l)|0)){d=42;break A}else{l=1;A=3;break r}}case 6:{if((A|0)<3){f=-2;break e}if(!(Z5[t[b>>2]&127](e,l)|0)){d=45;break A}else{l=1;A=4;break r}}case 7:{if((A|0)<4){f=-2;break e}if(!(Z5[t[h>>2]&127](e,l)|0)){d=48;break A}else{l=1;A=5;break r}}default:{d=49;break A}}}default:{d=69;break A}}}while(0);f=f+A|0}A:switch(d|0){case 24:{t[a>>2]=f;f=0;break e}case 27:{t[a>>2]=f;f=0;break e}case 30:{t[a>>2]=f;f=0;break e}case 33:{t[a>>2]=f;f=0;break e}case 35:{t[a>>2]=f;f=0;break e}case 38:{t[a>>2]=l;f=0;break e}case 42:{t[a>>2]=l;f=0;break e}case 45:{t[a>>2]=l;f=0;break e}case 48:{t[a>>2]=l;f=0;break e}case 49:{t[a>>2]=l;f=0;break e}case 50:{r:while(1){d=0;l=f+1|0;A=k-l|0;if((A|0)<=0){f=-1;break e}switch(i[w+(n[l>>0]|0)>>0]|0){case 11:{f=l;d=64;break A}case 17:{f=l;break A}case 10:case 9:case 21:{f=l;d=50;break}case 29:{d=52;break r}case 24:case 22:{l=2;break r}case 5:{d=53;break r}case 6:{d=56;break r}case 7:{d=59;break r}default:{d=62;break r}}}if((d|0)==52){t[a>>2]=l;f=0;break e}else if((d|0)==53){if((A|0)<2){f=-2;break e}if(!(Z5[t[u>>2]&127](e,l)|0)){t[a>>2]=l;f=0;break e}else l=3}else if((d|0)==56){if((A|0)<3){f=-2;break e}if(!(Z5[t[b>>2]&127](e,l)|0)){t[a>>2]=l;f=0;break e}else l=4}else if((d|0)==59){if((A|0)<4){f=-2;break e}if(!(Z5[t[h>>2]&127](e,l)|0)){t[a>>2]=l;f=0;break e}else l=5}else if((d|0)==62){t[a>>2]=l;f=0;break e}f=RK(e,f+l|0,r,a)|0;break e}case 69:{t[a>>2]=f;f=0;break e}}if((d|0)==64){t[a>>2]=f+1;f=2;break}l=f+1|0;if((k-l|0)>0)if((i[l>>0]|0)==62){t[a>>2]=f+2;f=4;break}else{t[a>>2]=l;f=0;break}else f=-1}else f=-1}while(0);return f|0}function FK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;e:do{if((r-A|0)>0){if((i[A>>0]|0)!=45){t[a>>2]=A;r=0;break}f=e+72|0;l=e+352|0;s=e+356|0;c=e+360|0;o=A+1|0;A:while(1){A=r-o|0;if((A|0)<=0){r=-1;break e}switch(i[f+(n[o>>0]|0)>>0]|0){case 8:case 1:case 0:{A=19;break A}case 5:{if((A|0)<2){r=-2;break e}if(Z5[t[l>>2]&127](e,o)|0){A=9;break A}o=o+2|0;continue A}case 6:{if((A|0)<3){r=-2;break e}if(Z5[t[s>>2]&127](e,o)|0){A=13;break A}o=o+3|0;continue A}case 7:{if((A|0)<4){r=-2;break e}if(Z5[t[c>>2]&127](e,o)|0){A=17;break A}o=o+4|0;continue A}case 27:{A=o+1|0;if((r-A|0)<=0){r=-1;break e}if((i[A>>0]|0)==45){A=22;break A}else{o=A;continue A}}default:{o=o+1|0;continue A}}}if((A|0)==9){t[a>>2]=o;r=0;break}else if((A|0)==13){t[a>>2]=o;r=0;break}else if((A|0)==17){t[a>>2]=o;r=0;break}else if((A|0)==19){t[a>>2]=o;r=0;break}else if((A|0)==22){A=o+2|0;if((r-A|0)<=0){r=-1;break}if((i[A>>0]|0)==62){t[a>>2]=o+3;r=13;break}else{t[a>>2]=A;r=0;break}}}else r=-1}while(0);return r|0}function MK(e,A,r){e=e|0;A=A|0;r=r|0;if((A-e|0)>5){A=0;while(1){if((A|0)>=6){A=8;break}if((i[e>>0]|0)!=(i[144300+A>>0]|0)){A=0;break}A=A+1|0;e=e+1|0}t[r>>2]=e}else A=-1;return A|0}function VK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;w=k;b=r;r=b-A|0;e:do{if((r|0)>0){u=e+72|0;switch(i[u+(n[A>>0]|0)>>0]|0){case 29:{t[a>>2]=A;r=0;break e}case 24:case 22:{r=1;break}case 5:{if((r|0)<2){r=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else r=2;break}case 6:{if((r|0)<3){r=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else r=3;break}case 7:{if((r|0)<4){r=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else r=4;break}default:{t[a>>2]=A;r=0;break e}}l=e+328|0;s=e+332|0;c=e+336|0;r=A+r|0;A:while(1){f=b-r|0;if((f|0)<=0){r=-1;break e}switch(i[u+(n[r>>0]|0)>>0]|0){case 29:{o=17;break A}case 10:case 9:case 21:{o=28;break A}case 15:{o=50;break A}case 27:case 26:case 25:case 24:case 22:{f=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[l>>2]&127](e,r)|0)){o=20;break A}else f=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[s>>2]&127](e,r)|0)){o=23;break A}else f=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[c>>2]&127](e,r)|0)){o=26;break A}else f=4;break}default:break A}r=r+f|0}if((o|0)==17){t[a>>2]=r;r=0;break}else if((o|0)==20){t[a>>2]=r;r=0;break}else if((o|0)==23){t[a>>2]=r;r=0;break}else if((o|0)==26){t[a>>2]=r;r=0;break}else if((o|0)==28){if(!(xK(A,r,w)|0)){t[a>>2]=r;r=0;break}l=e+352|0;s=e+356|0;c=e+360|0;f=r+1|0;A:while(1){r=b-f|0;if((r|0)<=0){r=-1;break e}switch(i[u+(n[f>>0]|0)>>0]|0){case 8:case 1:case 0:{o=45;break A}case 5:{if((r|0)<2){r=-2;break e}if(Z5[t[l>>2]&127](e,f)|0){o=35;break A}f=f+2|0;continue A}case 6:{if((r|0)<3){r=-2;break e}if(Z5[t[s>>2]&127](e,f)|0){o=39;break A}f=f+3|0;continue A}case 7:{if((r|0)<4){r=-2;break e}if(Z5[t[c>>2]&127](e,f)|0){o=43;break A}f=f+4|0;continue A}case 15:{r=f+1|0;if((b-r|0)<=0){r=-1;break e}if((i[r>>0]|0)==62){o=48;break A}else{f=r;continue A}}default:{f=f+1|0;continue A}}}if((o|0)==35){t[a>>2]=f;r=0;break}else if((o|0)==39){t[a>>2]=f;r=0;break}else if((o|0)==43){t[a>>2]=f;r=0;break}else if((o|0)==45){t[a>>2]=f;r=0;break}else if((o|0)==48){t[a>>2]=f+2;r=t[w>>2]|0;break}}else if((o|0)==50){if(!(xK(A,r,w)|0)){t[a>>2]=r;r=0;break}f=r+1|0;if((b-f|0)<=0){r=-1;break}if((i[f>>0]|0)==62){t[a>>2]=r+2;r=t[w>>2]|0;break}else r=f}t[a>>2]=r;r=0}else r=-1}while(0);h=k;return r|0}function NK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;f=r-A|0;e:do{if((f|0)>0){o=e+72|0;switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{t[a>>2]=A;r=0;break e}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=4;break}default:{t[a>>2]=A;r=0;break e}}l=e+328|0;s=e+332|0;c=e+336|0;f=A+f|0;A:while(1){A=r-f|0;if((A|0)<=0){r=-1;break e}switch(i[o+(n[f>>0]|0)>>0]|0){case 29:{l=17;break A}case 10:case 9:case 21:{l=27;break A}case 11:{l=32;break A}case 23:case 27:case 26:case 25:case 24:case 22:{A=1;break}case 5:{if((A|0)<2){r=-2;break e}if(!(Z5[t[l>>2]&127](e,f)|0)){l=20;break A}else A=2;break}case 6:{if((A|0)<3){r=-2;break e}if(!(Z5[t[s>>2]&127](e,f)|0)){l=23;break A}else A=3;break}case 7:{if((A|0)<4){r=-2;break e}if(!(Z5[t[c>>2]&127](e,f)|0)){l=26;break A}else A=4;break}default:{l=33;break A}}f=f+A|0}if((l|0)==17){t[a>>2]=f;r=0;break}else if((l|0)==20){t[a>>2]=f;r=0;break}else if((l|0)==23){t[a>>2]=f;r=0;break}else if((l|0)==26){t[a>>2]=f;r=0;break}else if((l|0)==27){A:while(1){A=f+1|0;if((r-A|0)<=0){r=-1;break e}switch(i[o+(n[A>>0]|0)>>0]|0){case 10:case 9:case 21:{f=A;l=27;break}case 11:{l=29;break A}default:{l=30;break A}}}if((l|0)==29){t[a>>2]=f+2;r=5;break}else if((l|0)==30){t[a>>2]=A;r=0;break}}else if((l|0)==32){t[a>>2]=f+1;r=5;break}else if((l|0)==33){t[a>>2]=f;r=0;break}}else r=-1}while(0);return r|0}function RK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;y=h;h=h+16|0;p=y;t[p>>2]=A;E=r;d=e+72|0;v=e+328|0;g=e+332|0;m=e+336|0;c=e+340|0;o=e+344|0;u=e+348|0;b=e+352|0;w=e+356|0;k=e+360|0;l=0;e:while(1){f=E-A|0;if((f|0)<=0){A=-1;break}A:do{switch(i[d+(n[A>>0]|0)>>0]|0){case 29:{B=4;break e}case 27:case 26:case 25:case 24:case 22:{f=A+1|0;t[p>>2]=f;s=l;A=f;l=s;continue e}case 5:{if((f|0)<2){A=-2;break e}if(!(Z5[t[v>>2]&127](e,A)|0)){B=8;break e}f=A+2|0;t[p>>2]=f;s=l;A=f;l=s;continue e}case 6:{if((f|0)<3){A=-2;break e}if(!(Z5[t[g>>2]&127](e,A)|0)){B=12;break e}f=A+3|0;t[p>>2]=f;s=l;A=f;l=s;continue e}case 7:{if((f|0)<4){A=-2;break e}if(!(Z5[t[m>>2]&127](e,A)|0)){B=16;break e}f=A+4|0;t[p>>2]=f;s=l;A=f;l=s;continue e}case 23:{if(l|0){B=19;break e}f=A+1|0;t[p>>2]=f;l=E-f|0;if((l|0)<=0){A=-1;break e}switch(i[d+(n[f>>0]|0)>>0]|0){case 29:{B=22;break e}case 24:case 22:{s=A+2|0;t[p>>2]=s;l=1;A=s;continue e}case 5:{if((l|0)<2){A=-2;break e}if(!(Z5[t[c>>2]&127](e,f)|0)){B=26;break e}s=A+3|0;t[p>>2]=s;l=1;A=s;continue e}case 6:{if((l|0)<3){A=-2;break e}if(!(Z5[t[o>>2]&127](e,f)|0)){B=30;break e}s=A+4|0;t[p>>2]=s;l=1;A=s;continue e}case 7:{if((l|0)<4){A=-2;break e}if(!(Z5[t[u>>2]&127](e,f)|0)){B=34;break e}s=A+5|0;t[p>>2]=s;l=1;A=s;continue e}default:{B=36;break e}}}case 10:case 9:case 21:while(1){A=A+1|0;t[p>>2]=A;if((E-A|0)<=0){A=-1;break e}switch(i[d+(n[A>>0]|0)>>0]|0){case 14:break A;case 9:case 10:case 21:break;default:{B=39;break e}}}case 14:break;default:{B=92;break e}}}while(0);while(1){f=A+1|0;t[p>>2]=f;if((E-f|0)<=0){A=-1;break e}s=i[d+(n[f>>0]|0)>>0]|0;if((s|1)<<24>>24==13)break;switch(s<<24>>24){case 9:case 10:case 21:{A=f;break}default:{B=43;break e}}}A=A+2|0;t[p>>2]=A;A:while(1){f=E-A|0;if((f|0)<=0){A=-1;break e}l=i[d+(n[A>>0]|0)>>0]|0;if(l<<24>>24==s<<24>>24)break;switch(l<<24>>24){case 8:case 1:case 0:{B=60;break e}case 2:{B=65;break e}case 5:{if((f|0)<2){A=-2;break e}if(Z5[t[b>>2]&127](e,A)|0){B=50;break e}l=A+2|0;t[p>>2]=l;A=l;continue A}case 6:{if((f|0)<3){A=-2;break e}if(Z5[t[w>>2]&127](e,A)|0){B=54;break e}l=A+3|0;t[p>>2]=l;A=l;continue A}case 7:{if((f|0)<4){A=-2;break e}if(Z5[t[k>>2]&127](e,A)|0){B=58;break e}l=A+4|0;t[p>>2]=l;A=l;continue A}case 3:{A=QK(e,A+1|0,r,p)|0;if((A|0)<1){B=63;break e}A=t[p>>2]|0;continue A}default:{l=A+1|0;t[p>>2]=l;A=l;continue A}}}f=A+1|0;t[p>>2]=f;if((E-f|0)<=0){A=-1;break}switch(i[d+(n[f>>0]|0)>>0]|0){case 11:{B=86;break e}case 17:{B=87;break e}case 10:case 9:case 21:{A=f;break}default:{B=69;break e}}A:while(1){f=A+1|0;t[p>>2]=f;l=E-f|0;if((l|0)<=0){A=-1;break e}switch(i[d+(n[f>>0]|0)>>0]|0){case 29:{B=72;break e}case 11:{B=86;break e}case 17:{B=87;break e}case 10:case 9:case 21:{A=f;break}case 24:case 22:{B=73;break A}case 5:{B=74;break A}case 6:{B=78;break A}case 7:{B=82;break A}default:{B=91;break e}}}if((B|0)==73){B=0;A=A+2|0;t[p>>2]=A;l=0;continue}else if((B|0)==74){B=0;if((l|0)<2){A=-2;break}if(!(Z5[t[c>>2]&127](e,f)|0)){B=76;break}A=A+3|0;t[p>>2]=A;l=0;continue}else if((B|0)==78){B=0;if((l|0)<3){A=-2;break}if(!(Z5[t[o>>2]&127](e,f)|0)){B=80;break}A=A+4|0;t[p>>2]=A;l=0;continue}else if((B|0)==82){B=0;if((l|0)<4){A=-2;break}if(!(Z5[t[u>>2]&127](e,f)|0)){B=84;break}A=A+5|0;t[p>>2]=A;l=0;continue}}switch(B|0){case 4:{t[a>>2]=A;A=0;break}case 8:{t[a>>2]=A;A=0;break}case 12:{t[a>>2]=A;A=0;break}case 16:{t[a>>2]=A;A=0;break}case 19:{t[a>>2]=A;A=0;break}case 22:{t[a>>2]=f;A=0;break}case 26:{t[a>>2]=f;A=0;break}case 30:{t[a>>2]=f;A=0;break}case 34:{t[a>>2]=f;A=0;break}case 36:{t[a>>2]=f;A=0;break}case 39:{t[a>>2]=A;A=0;break}case 43:{t[a>>2]=f;A=0;break}case 50:{t[a>>2]=A;A=0;break}case 54:{t[a>>2]=A;A=0;break}case 58:{t[a>>2]=A;A=0;break}case 60:{t[a>>2]=A;A=0;break}case 63:{if(!A){t[a>>2]=t[p>>2];A=0}break}case 65:{t[a>>2]=A;A=0;break}case 69:{t[a>>2]=f;A=0;break}case 72:{t[a>>2]=f;A=0;break}case 76:{t[a>>2]=f;A=0;break}case 80:{t[a>>2]=f;A=0;break}case 84:{t[a>>2]=f;A=0;break}case 86:{t[a>>2]=A+2;A=1;break}case 87:{A=f+1|0;t[p>>2]=A;if((E-A|0)>0)if((i[A>>0]|0)==62){t[a>>2]=f+2;A=3;break}else{t[a>>2]=A;A=0;break}else A=-1;break}case 91:{t[a>>2]=f;A=0;break}case 92:{t[a>>2]=A;A=0;break}}h=y;return A|0}function xK(e,A,r){e=e|0;A=A|0;r=r|0;t[r>>2]=11;e:do{if((A-e|0)==3){switch(i[e>>0]|0){case 120:{A=0;break}case 88:{A=1;break}default:{A=1;break e}}switch(i[e+1>>0]|0){case 109:break;case 77:{A=1;break}default:{A=1;break e}}switch(i[e+2>>0]|0){case 108:break;case 76:{A=0;break e}default:{A=1;break e}}if(!A){t[r>>2]=12;A=1}else A=0}else A=1}while(0);return A|0}function JK(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0;c=A+72|0;o=A+352|0;u=A+356|0;b=A+360|0;e:while(1){l=a-r|0;if((l|0)<=0){a=-1;break}s=i[c+(n[r>>0]|0)>>0]|0;switch(s<<24>>24){case 8:case 1:case 0:{h=16;break e}case 5:{if((l|0)<2){a=-2;break e}if(Z5[t[o>>2]&127](A,r)|0){h=6;break e}r=r+2|0;continue e}case 6:{if((l|0)<3){a=-2;break e}if(Z5[t[u>>2]&127](A,r)|0){h=10;break e}r=r+3|0;continue e}case 7:{if((l|0)<4){a=-2;break e}if(Z5[t[b>>2]&127](A,r)|0){h=14;break e}r=r+4|0;continue e}case 13:case 12:{r=r+1|0;if((s&255|0)==(e|0)){h=18;break e}else continue e}default:{r=r+1|0;continue e}}}e:do{if((h|0)==6){t[f>>2]=r;a=0}else if((h|0)==10){t[f>>2]=r;a=0}else if((h|0)==14){t[f>>2]=r;a=0}else if((h|0)==16){t[f>>2]=r;a=0}else if((h|0)==18)if((a-r|0)>0){t[f>>2]=r;switch(i[c+(n[r>>0]|0)>>0]|0){case 20:case 30:case 11:case 10:case 9:case 21:{a=27;break e}default:{}}a=0}else a=-27}while(0);return a|0}function HK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0;f=r;e:do{if((f-A|0)>0){l=e+72|0;switch(i[l+(n[A>>0]|0)>>0]|0){case 27:{e=FK(e,A+1|0,r,a)|0;break e}case 20:{t[a>>2]=A+1;e=33;break e}case 24:case 22:{A:while(1){e=A+1|0;r=f-e|0;if((r|0)<=0){e=-1;break e}switch(i[l+(n[e>>0]|0)>>0]|0){case 24:case 22:{A=e;break}case 30:{s=8;break A}case 10:case 9:case 21:break A;default:{s=12;break A}}}if((s|0)==12){t[a>>2]=e;e=0;break e}A:do{if((s|0)==8){if((r|0)<=1){e=-1;break e}switch(i[l+(n[A+2>>0]|0)>>0]|0){case 30:case 10:case 9:case 21:break;default:break A}t[a>>2]=e;e=0;break e}}while(0);t[a>>2]=e;e=16;break e}default:{t[a>>2]=A;e=0;break e}}}else e=-1}while(0);return e|0}function PK(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;f=r-A|0;e:do{if((f|0)>0){o=e+72|0;switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{t[a>>2]=A;r=0;break e}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[e+340>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[e+344>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[e+348>>2]&127](e,A)|0)){t[a>>2]=A;r=0;break e}else f=4;break}default:{t[a>>2]=A;r=0;break e}}l=e+328|0;s=e+332|0;c=e+336|0;A=A+f|0;A:while(1){f=r-A|0;if((f|0)<=0){r=-20;break e}switch(i[o+(n[A>>0]|0)>>0]|0){case 29:{f=17;break A}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{f=28;break A}case 27:case 26:case 25:case 24:case 22:{f=1;break}case 5:{if((f|0)<2){r=-2;break e}if(!(Z5[t[l>>2]&127](e,A)|0)){f=20;break A}else f=2;break}case 6:{if((f|0)<3){r=-2;break e}if(!(Z5[t[s>>2]&127](e,A)|0)){f=23;break A}else f=3;break}case 7:{if((f|0)<4){r=-2;break e}if(!(Z5[t[c>>2]&127](e,A)|0)){f=26;break A}else f=4;break}default:{f=29;break A}}A=A+f|0}if((f|0)==17){t[a>>2]=A;r=0;break}else if((f|0)==20){t[a>>2]=A;r=0;break}else if((f|0)==23){t[a>>2]=A;r=0;break}else if((f|0)==26){t[a>>2]=A;r=0;break}else if((f|0)==28){t[a>>2]=A;r=20;break}else if((f|0)==29){t[a>>2]=A;r=0;break}}else r=-1}while(0);return r|0}function XK(){return 58220}function SK(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;l=h;h=h+16|0;n=l;t[n>>2]=r;f=t[A>>2]|0;e=a-(t[i>>2]|0)|0;if((r-f|0)>(e|0)){e=f+e|0;t[n>>2]=e;a=1}else{a=0;e=r}ko(f,n);f=t[n>>2]|0;r=t[A>>2]|0;n=f-r|0;Q6(t[i>>2]|0,r|0,n|0)|0;t[A>>2]=(t[A>>2]|0)+n;t[i>>2]=(t[i>>2]|0)+n;h=l;return(a?2:f>>>0>>0&1)|0}function jK(e,A,r,n,f){e=e|0;A=A|0;r=r|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0;s=e+72|0;c=r;o=f;u=t[A>>2]|0;b=t[n>>2]|0;e:while(1){e=u>>>0>>0;if(!(b>>>0>>0&e)){h=12;break}e=i[u>>0]|0;l=e&255;switch(i[s+l>>0]|0){case 5:{if((c-u|0)<2){e=1;break e}a[b>>1]=(e&31)<<6|i[u+1>>0]&63;u=u+2|0;b=b+2|0;continue e}case 6:{if((c-u|0)<3){e=1;break e}a[b>>1]=(i[u+1>>0]&63)<<6|l<<12|i[u+2>>0]&63;u=u+3|0;b=b+2|0;continue e}case 7:{if((o-b|0)<4){e=2;break e}if((c-u|0)<4){e=1;break e}l=((i[u+1>>0]&63)<<12|(e&7)<<18|(i[u+2>>0]&63)<<6|i[u+3>>0]&63)+-65536|0;a[b>>1]=l>>>10|55296;a[b+2>>1]=l&1023|56320;u=u+4|0;b=b+4|0;continue e}default:{a[b>>1]=e<<24>>24;u=u+1|0;b=b+2|0;continue e}}}if((h|0)==12)e=e?2:0;t[A>>2]=u;t[n>>2]=b;return e|0}function UK(e,A){e=e|0;A=A|0;e=n[A>>0]|0;A=n[A+1>>0]|0;return 1<<(A&31)&t[56940+(((n[144044+(e>>>2&7)>>0]|0)<<3|e<<1&6|A>>>5&1)<<2)>>2]|0}function TK(e,A){e=e|0;A=A|0;var r=0;r=n[A+1>>0]|0;e=n[A+2>>0]|0;return 1<<(e&31)&t[56940+(((n[144044+(r>>>2&15|i[A>>0]<<4&255)>>0]|0)<<3|r<<1&6|e>>>5&1)<<2)>>2]|0}function OK(e,A){e=e|0;A=A|0;return 0}function _K(e,A){e=e|0;A=A|0;e=n[A>>0]|0;A=n[A+1>>0]|0;return 1<<(A&31)&t[56940+(((n[143788+(e>>>2&7)>>0]|0)<<3|e<<1&6|A>>>5&1)<<2)>>2]|0}function qK(e,A){e=e|0;A=A|0;var r=0;r=n[A+1>>0]|0;e=n[A+2>>0]|0;return 1<<(e&31)&t[56940+(((n[143788+(r>>>2&15|i[A>>0]<<4&255)>>0]|0)<<3|r<<1&6|e>>>5&1)<<2)>>2]|0}function KK(e,A){e=e|0;A=A|0;if((n[A>>0]|0)<194)return 1;else{A=n[A+1>>0]|0;return A>>>7^1|(A&192|0)==192|0}return 0}function $K(e,A){e=e|0;A=A|0;var r=0;e=i[A+2>>0]|0;do{if(e<<24>>24>-1)e=1;else{r=i[A>>0]|0;if(r<<24>>24==-17?(i[A+1>>0]|0)==-65:0)if((e&255)>189){e=1;break}else{e=191;A=-65}else{if((e&255)>191){e=1;break}A=i[A+1>>0]|0;e=A&255;if(r<<24>>24==-32){e=(A&255)<160|(e&192|0)==192;break}}e=(e&128|0)==0?1:r<<24>>24==-19?(A&255)>159:(e&192|0)==192}}while(0);return e&1|0}function e$(e,A){e=e|0;A=A|0;var r=0;r=n[A+3>>0]|0;do{if(!((r&128|0)==0|(r&192|0)==192)?(r=n[A+2>>0]|0,!((r&128|0)==0|(r&192|0)==192)):0){r=i[A>>0]|0;e=i[A+1>>0]|0;A=e&255;if(r<<24>>24==-16){e=(e&255)<144|(A&192|0)==192;break}else{e=(A&128|0)==0?1:r<<24>>24==-12?(e&255)>143:(A&192|0)==192;break}}else e=1}while(0);return e&1|0}function A$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0;e:do{if(A>>>0>>0){l=A;u=r-l|0;c=(u&1|0)==0;u=u&-2;o=(u|0)==0;u=c|o?r:A+u|0;if(c|o^1){r=i[A+1>>0]|0;if(!(r<<24>>24)){f=i[A>>0]|0;s=f;f=n[e+72+(f&255)>>0]|0}else{f=i[A>>0]|0;s=f;f=d$(r,f)|0}do{switch(f|0){case 12:{r=L$(12,e,A+2|0,u,a)|0;break e}case 13:{r=L$(13,e,A+2|0,u,a)|0;break e}case 2:{f=A+2|0;if((u-f|0)<=1){r=-1;break e}r=i[A+3>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[f>>0]|0)>>0]|0;else r=d$(r,i[f>>0]|0)|0;switch(r|0){case 16:{r=Q$(e,A+4|0,u,a)|0;break e}case 15:{r=C$(e,A+4|0,u,a)|0;break e}case 7:case 6:case 5:case 29:case 24:case 22:{t[a>>2]=A;r=29;break e}default:{t[a>>2]=f;r=0;break e}}}case 9:{if((A+2|0)==(u|0)){t[a>>2]=u;r=-15;break e}else l=7;break}case 10:case 21:{l=7;break}case 30:{r=g$(e,A+2|0,u,a)|0;break e}case 35:{t[a>>2]=A+2;r=38;break e}case 20:{t[a>>2]=A+2;r=25;break e}case 4:{f=A+2|0;r=u-f|0;if((r|0)<=1){r=-26;break e}if((i[A+3>>0]|0)==0?(i[f>>0]|0)==93:0){if((r|0)<=3){r=-1;break e}if((i[A+5>>0]|0)==0?(i[A+4>>0]|0)==62:0){t[a>>2]=A+6;r=34;break e}}t[a>>2]=f;r=26;break e}case 31:{t[a>>2]=A+2;r=23;break e}case 32:{f=A+2|0;if((u-f|0)<=1){r=-24;break e}r=i[A+3>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[f>>0]|0)>>0]|0;else r=d$(r,i[f>>0]|0)|0;switch(r|0){case 33:{t[a>>2]=A+4;r=36;break e}case 15:{t[a>>2]=A+4;r=35;break e}case 34:{t[a>>2]=A+4;r=37;break e}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{t[a>>2]=f;r=24;break e}default:{t[a>>2]=f;r=0;break e}}}case 36:{t[a>>2]=A+2;r=21;break e}case 11:{t[a>>2]=A+2;r=17;break e}case 19:{r=D$(e,A+2|0,u,a)|0;break e}case 5:{if((u-l|0)<2){r=-2;break e}t[a>>2]=A;r=0;break e}case 6:{if((u-l|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((u-l|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}case 24:case 22:{r=18;l=61;break}case 23:case 27:case 26:case 25:{r=19;l=61;break}case 29:{l=r&255;f=s&255;r=f>>>5;f=1<<(f&31);if(!(f&t[56940+((r|n[143788+l>>0]<<3)<<2)>>2]))if(!(t[56940+((n[144044+l>>0]<<3|r)<<2)>>2]&f))l=64;else{r=19;l=61}else{r=18;l=61}break}default:l=64}}while(0);if((l|0)==7){c=u;e=e+72|0;s=A;A:while(1){l=s;s=s+2|0;if((c-s|0)<=1){l=28;break}r=i[l+3>>0]|0;f=i[s>>0]|0;if(!(r<<24>>24))r=n[e+(f&255)>>0]|0;else r=d$(r,f)|0;switch(r|0){case 10:case 21:continue A;case 9:break;default:{l=27;break A}}if((l+4|0)==(u|0)){l=27;break}}if((l|0)==27){t[a>>2]=s;r=15;break}else if((l|0)==28){t[a>>2]=s;r=15;break}}else if((l|0)==61){o=e+72|0;f=A+2|0;A:while(1){A=r&255;r:while(1){c=u-f|0;if((c|0)<=1){l=104;break A}l=i[f+1>>0]|0;s=i[f>>0]|0;if(!(l<<24>>24))e=n[o+(s&255)>>0]|0;else e=d$(l,s)|0;switch(e|0){case 5:{l=73;break A}case 6:{l=74;break A}case 7:{l=76;break A}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{l=78;break A}case 34:{l=94;break A}case 33:{l=97;break A}case 15:{l=100;break A}case 29:{c=s&255;if(!(1<<(c&31)&t[56940+((c>>>5|n[144044+(l&255)>>0]<<3)<<2)>>2])){l=71;break A}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{c=f+2|0;switch(A&63){case 41:{r=19;f=c;continue A}case 18:break r;default:{f=c;continue r}}}default:{l=103;break A}}f=f+2|0}e=u-c|0;if((e|0)<=1){r=-1;break e}r=i[f+3>>0]|0;l=i[c>>0]|0;if(!(r<<24>>24))s=n[o+(l&255)>>0]|0;else s=d$(r,l)|0;switch(s|0){case 5:{l=89;break A}case 6:{l=90;break A}case 7:{l=92;break A}case 29:{A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|n[144044+(r&255)>>0]<<3)<<2)>>2])){l=87;break A}break}case 27:case 26:case 25:case 24:case 22:break;default:{r=19;f=c;continue A}}r=41;f=f+4|0}switch(l|0){case 71:{t[a>>2]=f;r=0;break e}case 73:{t[a>>2]=f;r=0;break e}case 74:{if((c|0)<3){r=-2;break e}t[a>>2]=f;r=0;break e}case 76:{if((c|0)<4){r=-2;break e}t[a>>2]=f;r=0;break e}case 78:{t[a>>2]=f;break e}case 87:{t[a>>2]=c;r=0;break e}case 89:{t[a>>2]=c;r=0;break e}case 90:{if((e|0)<3){r=-2;break e}t[a>>2]=c;r=0;break e}case 92:{if((e|0)<4){r=-2;break e}t[a>>2]=c;r=0;break e}case 94:if((r|0)==19){t[a>>2]=f;r=0;break e}else{t[a>>2]=f+2;r=32;break e}case 97:if((r|0)==19){t[a>>2]=f;r=0;break e}else{t[a>>2]=f+2;r=31;break e}case 100:if((r|0)==19){t[a>>2]=f;r=0;break e}else{t[a>>2]=f+2;r=30;break e}case 103:{t[a>>2]=f;r=0;break e}case 104:{r=0-r|0;break e}}}else if((l|0)==64){t[a>>2]=A;r=0;break}}else r=-1}else r=-4}while(0);return r|0}function r$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;e:do{if(A>>>0>>0){f=A;l=r-f|0;c=(l&1|0)==0;l=l&-2;s=(l|0)==0;l=c|s?r:A+l|0;if(c|s^1){r=i[A+1>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A>>0]|0)>>0]|0;else r=d$(r,i[A>>0]|0)|0;do{switch(r|0){case 2:{r=E$(e,A+2|0,l,a)|0;break e}case 3:{r=v$(e,A+2|0,l,a)|0;break e}case 9:{f=A+2|0;if((l-f|0)<=1){r=-3;break e}r=i[A+3>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[f>>0]|0)>>0]|0;else r=d$(r,i[f>>0]|0)|0;t[a>>2]=(r|0)==10?A+4|0:f;r=7;break e}case 10:{t[a>>2]=A+2;r=7;break e}case 4:{f=A+2|0;if((l-f|0)<=1){r=-5;break e}if((i[A+3>>0]|0)==0?(i[f>>0]|0)==93:0){r=A+4|0;if((l-r|0)<=1){r=-5;break e}if((i[A+5>>0]|0)==0?(i[r>>0]|0)==62:0){t[a>>2]=r;r=0;break e}else r=l}else r=l;break}case 5:{r=l;if((r-f|0)<2){r=-2;break e}f=A+2|0;break}case 6:{r=l;if((r-f|0)<3){r=-2;break e}f=A+3|0;break}case 7:{r=l;if((r-f|0)<4){r=-2;break e}f=A+4|0;break}case 8:case 1:case 0:{t[a>>2]=A;r=0;break e}default:{f=A+2|0;r=l}}}while(0);s=e+72|0;e=f;A:while(1){A=r-e|0;if((A|0)<=1){f=52;break}f=i[e+1>>0]|0;l=i[e>>0]|0;if(!(f<<24>>24))f=n[s+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{f=50;break A}case 5:{e=e+2|0;continue A}case 6:{if((A|0)<3){f=38;break A}e=e+3|0;continue A}case 7:{if((A|0)<4){f=41;break A}e=e+4|0;continue A}case 4:{if((A|0)<=3){f=50;break A}f=e+2|0;if(i[e+3>>0]|0){e=f;continue A}if((i[f>>0]|0)!=93){e=f;continue A}if((A|0)<=5){f=50;break A}l=e+4|0;if(i[e+5>>0]|0){e=f;continue A}if((i[l>>0]|0)==62){f=49;break A}else{e=f;continue A}}default:{e=e+2|0;continue A}}}if((f|0)==38){t[a>>2]=e;r=6;break}else if((f|0)==41){t[a>>2]=e;r=6;break}else if((f|0)==49){t[a>>2]=l;r=0;break}else if((f|0)==50){t[a>>2]=e;r=6;break}else if((f|0)==52){t[a>>2]=e;r=6;break}}else r=-1}else r=-4}while(0);return r|0}function i$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;e:do{if(A>>>0>>0){f=A;l=r-f|0;c=(l&1|0)==0;l=l&-2;s=(l|0)==0;l=c|s?r:A+l|0;if(c|s^1){r=i[A+1>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A>>0]|0)>>0]|0;else r=d$(r,i[A>>0]|0)|0;switch(r|0){case 4:{f=A+2|0;if((l-f|0)<=1){r=-1;break e}if((i[A+3>>0]|0)==0?(i[f>>0]|0)==93:0){r=A+4|0;if((l-r|0)<=1){r=-1;break e}if((i[A+5>>0]|0)==0?(i[r>>0]|0)==62:0){t[a>>2]=A+6;r=40;break e}}break}case 9:{f=A+2|0;if((l-f|0)<=1){r=-1;break e}r=i[A+3>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[f>>0]|0)>>0]|0;else r=d$(r,i[f>>0]|0)|0;t[a>>2]=(r|0)==10?A+4|0:f;r=7;break e}case 10:{t[a>>2]=A+2;r=7;break e}case 5:{r=l;if((r-f|0)<2){r=-2;break e}f=A+2|0;l=r;break}case 6:{r=l;if((r-f|0)<3){r=-2;break e}f=A+3|0;l=r;break}case 7:{r=l;if((r-f|0)<4){r=-2;break e}f=A+4|0;l=r;break}case 8:case 1:case 0:{t[a>>2]=A;r=0;break e}default:f=A+2|0}s=e+72|0;e=f;A:while(1){A=l-e|0;if((A|0)<=1){f=40;break}r=i[e+1>>0]|0;f=i[e>>0]|0;if(!(r<<24>>24))r=n[s+(f&255)>>0]|0;else r=d$(r,f)|0;switch(r|0){case 10:case 9:case 8:case 1:case 0:case 4:{f=38;break A}case 6:{if((A|0)<3){f=35;break A}else r=3;break}case 7:{if((A|0)<4){f=37;break A}else r=4;break}default:r=2}e=e+r|0}if((f|0)==35){t[a>>2]=e;r=6;break}else if((f|0)==37){t[a>>2]=e;r=6;break}else if((f|0)==38){t[a>>2]=e;r=6;break}else if((f|0)==40){t[a>>2]=e;r=6;break}}else r=-1}else r=-4}while(0);return r|0}function a$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;c=r-A|0;c=(c&1|0)==0?r:A+(c&-2)|0;s=e+72|0;l=0;r=A;e:while(1){f=c-r|0;if((f|0)<=1){r=-1;break}e=i[r+1>>0]|0;A=i[r>>0]|0;if(!(e<<24>>24))e=n[s+(A&255)>>0]|0;else e=d$(e,A)|0;switch(e|0){case 8:case 1:case 0:{o=12;break e}case 5:{f=l;r=r+2|0;l=f;continue e}case 6:{if((f|0)<3){r=-2;break e}f=l;r=r+3|0;l=f;continue e}case 7:{if((f|0)<4){r=-2;break e}f=l;r=r+4|0;l=f;continue e}case 2:{e=r+2|0;if((c-e|0)<=1){r=-1;break e}if(i[r+3>>0]|0){f=l;r=e;l=f;continue e}if((i[e>>0]|0)!=33){f=l;r=e;l=f;continue e}e=r+4|0;if((c-e|0)<=1){r=-1;break e}if(i[r+5>>0]|0){f=l;r=e;l=f;continue e}f=(i[e>>0]|0)==91;l=l+(f&1)|0;r=f?r+6|0:e;continue e}case 4:{e=r+2|0;if((c-e|0)<=1){r=-1;break e}if(i[r+3>>0]|0){f=l;r=e;l=f;continue e}if((i[e>>0]|0)!=93){f=l;r=e;l=f;continue e}e=r+4|0;if((c-e|0)<=1){r=-1;break e}if(i[r+5>>0]|0){f=l;r=e;l=f;continue e}if((i[e>>0]|0)!=62){f=l;r=e;l=f;continue e}r=r+6|0;if(!l){o=26;break e}l=l+-1|0;continue e}default:{f=l;r=r+2|0;l=f;continue e}}}if((o|0)==12){t[a>>2]=r;r=0}else if((o|0)==26){t[a>>2]=r;r=42}return r|0}function t$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;do{if(A>>>0>>0){c=r;if((c-A|0)>1){o=e+72|0;s=A;e:while(1){if((c-s|0)<=1){l=30;break}f=i[s+1>>0]|0;l=i[s>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 3:{l=11;break e}case 2:{l=14;break e}case 10:{l=15;break e}case 9:{l=18;break e}case 21:{l=25;break e}case 5:{f=2;break}case 6:{f=3;break}case 7:{f=4;break}default:f=2}s=s+f|0}if((l|0)==11)if((s|0)==(A|0)){f=v$(e,A+2|0,r,a)|0;break}else{t[a>>2]=s;f=6;break}else if((l|0)==14){t[a>>2]=s;f=0;break}else if((l|0)==15)if((s|0)==(A|0)){t[a>>2]=A+2;f=7;break}else{t[a>>2]=s;f=6;break}else if((l|0)==18){if((s|0)!=(A|0)){t[a>>2]=s;f=6;break}s=A+2|0;if((c-s|0)<=1){f=-3;break}f=i[A+3>>0]|0;l=i[s>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;t[a>>2]=(f|0)==10?A+4|0:s;f=7;break}else if((l|0)==25)if((s|0)==(A|0)){t[a>>2]=A+2;f=39;break}else{t[a>>2]=s;f=6;break}else if((l|0)==30){t[a>>2]=s;f=6;break}}else f=-1}else f=-4}while(0);return f|0}function n$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;do{if(A>>>0>>0){c=r;if((c-A|0)>1){o=e+72|0;s=A;e:while(1){if((c-s|0)<=1){l=29;break}f=i[s+1>>0]|0;l=i[s>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 3:{l=11;break e}case 30:{l=14;break e}case 10:{l=17;break e}case 9:{l=20;break e}case 5:{f=2;break}case 6:{f=3;break}case 7:{f=4;break}default:f=2}s=s+f|0}if((l|0)==11)if((s|0)==(A|0)){f=v$(e,A+2|0,r,a)|0;break}else{t[a>>2]=s;f=6;break}else if((l|0)==14)if((s|0)==(A|0)){f=g$(e,A+2|0,r,a)|0;f=(f|0)==22?0:f;break}else{t[a>>2]=s;f=6;break}else if((l|0)==17)if((s|0)==(A|0)){t[a>>2]=A+2;f=7;break}else{t[a>>2]=s;f=6;break}else if((l|0)==20){if((s|0)!=(A|0)){t[a>>2]=s;f=6;break}s=A+2|0;if((c-s|0)<=1){f=-3;break}f=i[A+3>>0]|0;l=i[s>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;t[a>>2]=(f|0)==10?A+4|0:s;f=7;break}else if((l|0)==29){t[a>>2]=s;f=6;break}}else f=-1}else f=-4}while(0);return f|0}function f$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var t=0,n=0;t=r;e=A;while(1){A=i[a>>0]|0;if(!(A<<24>>24)){n=7;break}if((t-e|0)<2){e=0;break}if(i[e+1>>0]|0){e=0;break}if((i[e>>0]|0)!=A<<24>>24){e=0;break}a=a+1|0;e=e+2|0}if((n|0)==7)e=(e|0)==(r|0)&1;return e|0}function l$(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;t=e+72|0;a=A;e:while(1){e=i[a+1>>0]|0;r=i[a>>0]|0;if(!(e<<24>>24))e=n[t+(r&255)>>0]|0;else e=d$(e,r)|0;switch(e|0){case 5:{e=2;break}case 6:{e=3;break}case 7:{e=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{e=2;break}default:break e}a=a+e|0}return a-A|0}function s$(e,A){e=e|0;A=A|0;var r=0,a=0;a=e+72|0;e:while(1){e=i[A+1>>0]|0;r=i[A>>0]|0;if(!(e<<24>>24))e=n[a+(r&255)>>0]|0;else e=d$(e,r)|0;switch(e|0){case 21:case 9:case 10:break;default:break e}A=A+2|0}return A|0}function c$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;h=e+72|0;u=0;b=0;e=1;e:while(1){o=A+2|0;l=A+3|0;f=i[l>>0]|0;s=f<<24>>24==0;c=i[o>>0]|0;if(s)f=n[h+(c&255)>>0]|0;else f=d$(f,c)|0;do{switch(f|0){case 5:{if(e|0){l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}if((b|0)>=(r|0)){s=b;c=u;e=1;A=o;b=s;u=c;continue e}t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;s=b;c=u;e=1;A=o;b=s;u=c;continue e}case 6:{if(e|0){s=e;c=b;o=u;A=l;e=s;b=c;u=o;continue e}if((b|0)>=(r|0)){c=b;o=u;e=1;A=l;b=c;u=o;continue e}t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;c=b;o=u;e=1;A=l;b=c;u=o;continue e}case 7:{if(!e)if((b|0)<(r|0)){t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;e=1}else e=1;c=b;o=u;A=A+4|0;b=c;u=o;continue e}case 24:case 22:case 29:{if(e|0){l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}if((b|0)>=(r|0)){s=b;c=u;e=1;A=o;b=s;u=c;continue e}t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;s=b;c=u;e=1;A=o;b=s;u=c;continue e}case 12:{if((e|0)!=2){if((b|0)>=(r|0)){c=b;u=12;e=2;A=o;b=c;continue e}t[a+(b<<4)+4>>2]=A+4;c=b;u=12;e=2;A=o;b=c;continue e}if((u|0)!=12){s=b;c=u;e=2;A=o;b=s;u=c;continue e}if((b|0)<(r|0))t[a+(b<<4)+8>>2]=o;u=12;b=b+1|0;e=0;A=o;continue e}case 13:{if((e|0)!=2){if((b|0)>=(r|0)){c=b;u=13;e=2;A=o;b=c;continue e}t[a+(b<<4)+4>>2]=A+4;c=b;u=13;e=2;A=o;b=c;continue e}if((u|0)!=13){s=b;c=u;e=2;A=o;b=s;u=c;continue e}if((b|0)<(r|0))t[a+(b<<4)+8>>2]=o;u=13;b=b+1|0;e=0;A=o;continue e}case 3:{if((b|0)>=(r|0)){l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}i[a+(b<<4)+12>>0]=0;l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}case 21:{switch(e|0){case 1:{s=b;c=u;e=0;A=o;b=s;u=c;continue e}case 2:break;default:{l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}}if((b|0)>=(r|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}l=a+(b<<4)+12|0;if(!(i[l>>0]|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}do{if(s&(o|0)!=(t[a+(b<<4)+4>>2]|0)&c<<24>>24==32){f=i[A+5>>0]|0;e=i[A+4>>0]|0;if(!(f<<24>>24)){if(e<<24>>24==32)break;e=n[h+(e&255)>>0]|0}else e=d$(f,e)|0;if((e|0)!=(u|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}}}while(0);i[l>>0]=0;s=b;c=u;e=2;A=o;b=s;u=c;continue e}case 10:case 9:{switch(e|0){case 1:{s=b;c=u;e=0;A=o;b=s;u=c;continue e}case 2:break;default:{l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}}if((b|0)>=(r|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}i[a+(b<<4)+12>>0]=0;s=b;c=u;e=2;A=o;b=s;u=c;continue e}case 17:case 11:if((e|0)==2){s=b;c=u;e=2;A=o;b=s;u=c;continue e}else break e;default:{l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}}}while(0)}return b|0}function o$(e,A){e=e|0;A=A|0;var r=0,a=0;e=A+4|0;e:do{if((i[A+5>>0]|0)==0?(i[e>>0]|0)==120:0){A=A+6|0;e=0;while(1){A:while(1){if(!(i[A+1>>0]|0)){r=i[A>>0]|0;if(r<<24>>24==59){a=17;break e}r=r<<24>>24;switch(r|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{a=8;break A}case 70:case 69:case 68:case 67:case 66:case 65:{a=9;break A}case 102:case 101:case 100:case 99:case 98:case 97:{a=10;break A}default:{}}}A=A+2|0}if((a|0)==8){a=0;e=r+-48|e<<4}else if((a|0)==9){a=0;e=(e<<4)+-55+r|0}else if((a|0)==10){a=0;e=(e<<4)+-87+r|0}if((e|0)<1114112)A=A+2|0;else{e=-1;break}}}else{r=e;e=0;a=13}}while(0);e:do{if((a|0)==13)while(1){a=0;if(!(i[r+1>>0]|0)){A=i[r>>0]|0;if(A<<24>>24==59){a=17;break e}A=A<<24>>24}else A=-1;e=(e*10|0)+-48+A|0;if((e|0)>=1114112){e=-1;break}else{r=r+2|0;a=13}}}while(0);if((a|0)==17)e=po(e)|0;return e|0}function u$(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;e:do{switch((r-A|0)/2|0|0){case 2:{if((i[A+3>>0]|0)==0?(i[A+2>>0]|0)==116:0){if(!(i[A+1>>0]|0))e=i[A>>0]|0;else e=-1;e=(e|0)==108?60:(e|0)==103?62:0}else a=27;break}case 3:{if((((((i[A+1>>0]|0)==0?(i[A>>0]|0)==97:0)?(i[A+3>>0]|0)==0:0)?(i[A+2>>0]|0)==109:0)?(i[A+5>>0]|0)==0:0)?(i[A+4>>0]|0)==112:0)e=38;else a=27;break}case 4:{if(!(i[A+1>>0]|0))switch(i[A>>0]|0){case 113:{if(i[A+3>>0]|0){a=27;break e}if((i[A+2>>0]|0)!=117){a=27;break e}if(i[A+5>>0]|0){a=27;break e}if((i[A+4>>0]|0)!=111){a=27;break e}if(i[A+7>>0]|0){a=27;break e}if((i[A+6>>0]|0)==116){e=34;break e}else{a=27;break e}}case 97:{if(i[A+3>>0]|0){a=27;break e}if((i[A+2>>0]|0)!=112){a=27;break e}if(i[A+5>>0]|0){a=27;break e}if((i[A+4>>0]|0)!=111){a=27;break e}if(i[A+7>>0]|0){a=27;break e}if((i[A+6>>0]|0)==115){e=39;break e}else{a=27;break e}}default:{a=27;break e}}else a=27;break}default:a=27}}while(0);if((a|0)==27)e=0;return e|0}function b$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=e+72|0;c=a+4|0;while(1){if((r-A|0)<=1)break;e=i[A+1>>0]|0;f=i[A>>0]|0;if(!(e<<24>>24))e=n[s+(f&255)>>0]|0;else e=d$(e,f)|0;switch(e|0){case 5:{A=A+2|0;break}case 6:{A=A+3|0;break}case 7:{A=A+4|0;break}case 10:{t[c>>2]=-1;t[a>>2]=(t[a>>2]|0)+1;A=A+2|0;break}case 9:{t[a>>2]=(t[a>>2]|0)+1;l=A+2|0;if((r-l|0)>1){e=i[A+3>>0]|0;f=i[l>>0]|0;if(!(e<<24>>24))e=n[s+(f&255)>>0]|0;else e=d$(e,f)|0;A=(e|0)==10?A+4|0:l}else A=l;t[c>>2]=-1;break}default:A=A+2|0}t[c>>2]=(t[c>>2]|0)+1}return}function h$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=r+-2|0;l=e+72|0;r=A;e:while(1){f=r+2|0;if((s-f|0)<=1){r=1;break}r=i[r+3>>0]|0;e=r<<24>>24==0;A=i[f>>0]|0;if(e)r=n[l+(A&255)>>0]|0;else r=d$(r,A)|0;switch(r|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{r=f;continue e}case 21:if(e&A<<24>>24==9){c=12;break e}else{r=f;continue e}case 22:case 26:{if(!e){c=12;break e}if(A<<24>>24>=0){r=f;continue e}break}default:if(!e){c=12;break e}}switch(A<<24>>24|0){case 64:case 36:{r=f;break}default:{c=12;break e}}}if((c|0)==12){t[a>>2]=f;r=0}return r|0}function w$(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0;s=t[A>>2]|0;c=s+(r-s&-2)|0;o=c;u=f;e:while(1){if(s>>>0>=c>>>0){e=0;break}l=i[s>>0]|0;e=i[s+1>>0]|0;r=e&255;switch(e<<24>>24){case 0:{if(l<<24>>24>-1){e=t[a>>2]|0;if((e|0)==(f|0)){e=2;break e}t[a>>2]=e+1;i[e>>0]=l;e=s}else b=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{b=7;break}case-37:case-38:case-39:case-40:{e=t[a>>2]|0;if((u-e|0)<4){e=2;break e}if((o-s|0)<4){e=1;break e}h=l&255;l=(r<<2&12|h>>>6)+1|0;t[a>>2]=e+1;i[e>>0]=l>>>2|240;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h>>>2&15|l<<4&48|128;e=s+2|0;l=n[e>>0]|0;r=(h<<4&48|l>>>6|i[s+3>>0]<<2&12|128)&255;s=t[a>>2]|0;t[a>>2]=s+1;i[s>>0]=r;s=t[a>>2]|0;t[a>>2]=s+1;i[s>>0]=l&63|128;break}default:{e=t[a>>2]|0;if((u-e|0)<3){e=2;break e}t[a>>2]=e+1;i[e>>0]=r>>>4|224;h=l&255;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h>>>6|r<<2&60|128;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h&63|128;e=s}}if((b|0)==7){b=0;e=t[a>>2]|0;if((u-e|0)<2){e=2;break}h=l&255;t[a>>2]=e+1;i[e>>0]=h>>>6|r<<2|192;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h&63|128;e=s}s=e+2|0}t[A>>2]=s;return e|0}function k$(e,A,r,f,l){e=e|0;A=A|0;r=r|0;f=f|0;l=l|0;var s=0,c=0,o=0;s=t[A>>2]|0;o=r-s&-2;e=s+o|0;if((o|0)>(l-(t[f>>2]|0)|0)){c=e+-2|0;r=(i[c+1>>0]&-8)<<24>>24==-40;o=r&1;e=r?c:e}else o=0;r=s;while(1){s=r>>>0>>0;c=t[f>>2]|0;if(!(s&c>>>0>>0))break;s=((n[r+1>>0]|0)<<8|(n[r>>0]|0))&65535;t[f>>2]=c+2;a[c>>1]=s;c=(t[A>>2]|0)+2|0;t[A>>2]=c;r=c}return((c|0)!=(l|0)|s^1?o:2)|0}function d$(e,A){e=e|0;A=A|0;var r=0;switch(e<<24>>24){case-37:case-38:case-39:case-40:{e=7;break}case-33:case-34:case-35:case-36:{e=8;break}case-1:{if((A&255)>253)e=0;else r=4;break}default:r=4}if((r|0)==4)e=29;return e|0}function v$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;o=r;s=o-A|0;e:do{if((s|0)>1){c=i[A+1>>0]|0;if(!(c<<24>>24)){l=i[A>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{s=l&255;if(!(1<<(s&31)&t[56940+((s>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;e=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;e=0;break e}case 6:{if((s|0)<3){e=-2;break e}t[a>>2]=A;e=0;break e}case 7:{if((s|0)<4){e=-2;break e}t[a>>2]=A;e=0;break e}case 19:{e=m$(e,A+2|0,r,a)|0;break e}default:{t[a>>2]=A;e=0;break e}}c=e+72|0;s=A;A:while(1){l=s+2|0;A=o-l|0;if((A|0)<=1){e=-1;break e}e=i[s+3>>0]|0;f=i[l>>0]|0;if(!(e<<24>>24))r=n[c+(f&255)>>0]|0;else r=d$(e,f)|0;switch(r|0){case 27:case 26:case 25:case 24:case 22:{s=l;continue A}case 5:{f=23;break A}case 6:{f=24;break A}case 7:{f=26;break A}case 18:{f=28;break A}case 29:break;default:{f=29;break A}}A=f&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(e&255)>>0]|0)<<3)<<2)>>2])){f=22;break}else s=l}if((f|0)==22){t[a>>2]=l;e=0;break}else if((f|0)==23){t[a>>2]=l;e=0;break}else if((f|0)==24){if((A|0)<3){e=-2;break}t[a>>2]=l;e=0;break}else if((f|0)==26){if((A|0)<4){e=-2;break}t[a>>2]=l;e=0;break}else if((f|0)==28){t[a>>2]=s+4;e=9;break}else if((f|0)==29){t[a>>2]=l;e=0;break}}else e=-1}while(0);return e|0}function g$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;s=r-A|0;e:do{if((s|0)>1){c=i[A+1>>0]|0;if(!(c<<24>>24)){l=i[A>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{o=l&255;if(!(1<<(o&31)&t[56940+((o>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}case 30:case 9:case 10:case 21:{t[a>>2]=A;r=22;break e}default:{t[a>>2]=A;r=0;break e}}o=e+72|0;e=A;A:while(1){c=e+2|0;A=r-c|0;if((A|0)<=1){r=-1;break e}f=i[e+3>>0]|0;l=i[c>>0]|0;if(!(f<<24>>24))s=n[o+(l&255)>>0]|0;else s=d$(f,l)|0;switch(s|0){case 27:case 26:case 25:case 24:case 22:{e=c;continue A}case 5:{f=23;break A}case 6:{f=24;break A}case 7:{f=26;break A}case 18:{f=28;break A}case 29:break;default:{f=29;break A}}A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(f&255)>>0]|0)<<3)<<2)>>2])){f=22;break}else e=c}if((f|0)==22){t[a>>2]=c;r=0;break}else if((f|0)==23){t[a>>2]=c;r=0;break}else if((f|0)==24){if((A|0)<3){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==26){if((A|0)<4){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==28){t[a>>2]=e+4;r=28;break}else if((f|0)==29){t[a>>2]=c;r=0;break}}else r=-1}while(0);return r|0}function m$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;c=r;e:do{if((c-A|0)>1){l=i[A+1>>0]|0;f=i[A>>0]|0;do{if(!(l<<24>>24))if(f<<24>>24==120){f=p$(e,A+2|0,r,a)|0;break e}else{f=n[e+72+(f&255)>>0]|0;break}else f=d$(l,f)|0}while(0);if((f|0)!=25){t[a>>2]=A;f=0;break}s=e+72|0;e=A;A:while(1){l=e+2|0;if((c-l|0)<=1){f=-1;break e}f=i[e+3>>0]|0;r=i[l>>0]|0;if(!(f<<24>>24))f=n[s+(r&255)>>0]|0;else f=d$(f,r)|0;switch(f|0){case 25:{e=l;break}case 18:{r=15;break A}default:{r=16;break A}}}if((r|0)==15){t[a>>2]=e+4;f=10;break}else if((r|0)==16){t[a>>2]=l;f=0;break}}else f=-1}while(0);return f|0}function p$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0;e:do{if((r-A|0)>1){f=i[A+1>>0]|0;if(!(f<<24>>24))f=n[e+72+(n[A>>0]|0)>>0]|0;else f=d$(f,i[A>>0]|0)|0;if((f&-2|0)!=24){t[a>>2]=A;r=0;break}s=e+72|0;A:while(1){l=A+2|0;if((r-l|0)<=1){r=-1;break e}f=i[A+3>>0]|0;e=i[l>>0]|0;if(!(f<<24>>24))f=n[s+(e&255)>>0]|0;else f=d$(f,e)|0;switch(f|0){case 24:case 25:{A=l;break}case 18:{f=13;break A}default:{f=14;break A}}}if((f|0)==13){t[a>>2]=A+4;r=10;break}else if((f|0)==14){t[a>>2]=l;r=0;break}}else r=-1}while(0);return r|0}function E$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;h=r;s=h-A|0;e:do{if((s|0)>1){c=i[A+1>>0]|0;if(!(c<<24>>24)){l=i[A>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{u=l&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){t[a>>2]=A;f=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;f=0;break e}case 6:{if((s|0)<3){f=-2;break e}t[a>>2]=A;f=0;break e}case 7:{if((s|0)<4){f=-2;break e}t[a>>2]=A;f=0;break e}case 16:{l=A+2|0;if((h-l|0)<=1){f=-1;break e}f=i[A+3>>0]|0;if(!(f<<24>>24))f=n[e+72+(n[l>>0]|0)>>0]|0;else f=d$(f,i[l>>0]|0)|0;switch(f|0){case 27:{f=B$(e,A+4|0,r,a)|0;break e}case 20:{f=y$(A+4|0,r,a)|0;break e}default:{t[a>>2]=l;f=0;break e}}}case 15:{f=C$(e,A+2|0,r,a)|0;break e}case 17:{f=I$(e,A+2|0,r,a)|0;break e}default:{t[a>>2]=A;f=0;break e}}u=e+72|0;o=0;f=A+2|0;A:while(1){r:while(1){l=h-f|0;if((l|0)<=1){f=-1;break e}s=i[f+1>>0]|0;c=i[f>>0]|0;if(!(s<<24>>24))A=n[u+(c&255)>>0]|0;else A=d$(s,c)|0;switch(A|0){case 5:{b=34;break A}case 6:{b=35;break A}case 7:{b=37;break A}case 10:case 9:case 21:{b=55;break A}case 11:{b=69;break A}case 17:break A;case 23:break r;case 29:{A=c&255;if(!(1<<(A&31)&t[56940+((A>>>5|n[144044+(s&255)>>0]<<3)<<2)>>2])){b=32;break A}break}case 27:case 26:case 25:case 24:case 22:break;default:{b=75;break A}}f=f+2|0}if(o|0){b=40;break}c=f+2|0;A=h-c|0;if((A|0)<=1){f=-1;break e}o=i[f+3>>0]|0;l=i[c>>0]|0;if(!(o<<24>>24))s=n[u+(l&255)>>0]|0;else s=d$(o,l)|0;switch(s|0){case 5:{b=49;break A}case 6:{b=50;break A}case 7:{b=52;break A}case 29:{A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|n[143788+(o&255)>>0]<<3)<<2)>>2])){b=47;break A}break}case 24:case 22:break;default:{b=54;break A}}o=1;f=f+4|0}A:switch(b|0){case 32:{t[a>>2]=f;f=0;break e}case 34:{t[a>>2]=f;f=0;break e}case 35:{if((l|0)<3){f=-2;break e}t[a>>2]=f;f=0;break e}case 37:{if((l|0)<4){f=-2;break e}t[a>>2]=f;f=0;break e}case 40:{t[a>>2]=f;f=0;break e}case 47:{t[a>>2]=c;f=0;break e}case 49:{t[a>>2]=c;f=0;break e}case 50:{if((A|0)<3){f=-2;break e}t[a>>2]=c;f=0;break e}case 52:{if((A|0)<4){f=-2;break e}t[a>>2]=c;f=0;break e}case 54:{t[a>>2]=c;f=0;break e}case 55:{r:while(1){b=0;l=f+2|0;s=h-l|0;if((s|0)<=1){f=-1;break e}c=i[f+3>>0]|0;A=i[l>>0]|0;if(!(c<<24>>24))o=n[u+(A&255)>>0]|0;else o=d$(c,A)|0;switch(o|0){case 11:{f=l;b=69;break A}case 17:{f=l;break A}case 10:case 9:case 21:{f=l;b=55;break}case 29:{b=60;break r}case 24:case 22:break r;case 5:{b=63;break r}case 6:{b=64;break r}case 7:{b=66;break r}default:{b=68;break r}}}if((b|0)==60){h=A&255;if(!(1<<(h&31)&t[56940+((h>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){t[a>>2]=l;f=0;break e}}else if((b|0)==63){t[a>>2]=l;f=0;break e}else if((b|0)==64){if((s|0)<3){f=-2;break e}t[a>>2]=l;f=0;break e}else if((b|0)==66){if((s|0)<4){f=-2;break e}t[a>>2]=l;f=0;break e}else if((b|0)==68){t[a>>2]=l;f=0;break e}f=Z$(e,f+4|0,r,a)|0;break e}case 75:{t[a>>2]=f;f=0;break e}}if((b|0)==69){t[a>>2]=f+2;f=2;break}l=f+2|0;if((h-l|0)>1){if((i[f+3>>0]|0)==0?(i[l>>0]|0)==62:0){t[a>>2]=f+4;f=4;break}t[a>>2]=l;f=0}else f=-1}else f=-1}while(0);return f|0}function B$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=r;e:do{if((s-A|0)>1){if((i[A+1>>0]|0)==0?(i[A>>0]|0)==45:0){l=e+72|0;f=A+2|0;A:while(1){A=s-f|0;if((A|0)<=1){r=-1;break e}r=i[f+1>>0]|0;e=i[f>>0]|0;if(!(r<<24>>24))r=n[l+(e&255)>>0]|0;else r=d$(r,e)|0;switch(r|0){case 8:case 1:case 0:{c=16;break A}case 5:{f=f+2|0;continue A}case 6:{if((A|0)<3){r=-2;break e}f=f+3|0;continue A}case 7:{if((A|0)<4){r=-2;break e}f=f+4|0;continue A}case 27:{r=f+2|0;if((s-r|0)<=1){r=-1;break e}if(i[f+3>>0]|0){f=r;continue A}if((i[r>>0]|0)==45)break A;else{f=r;continue A}}default:{f=f+2|0;continue A}}}if((c|0)==16){t[a>>2]=f;r=0;break}r=f+4|0;if((s-r|0)<=1){r=-1;break}if((i[f+5>>0]|0)==0?(i[r>>0]|0)==62:0){t[a>>2]=f+6;r=13;break}t[a>>2]=r;r=0;break}t[a>>2]=A;r=0}else r=-1}while(0);return r|0}function y$(e,A,r){e=e|0;A=A|0;r=r|0;if((A-e|0)>11){A=0;while(1){if((A|0)>=6){A=8;break}if(i[e+1>>0]|0){A=0;break}if((i[e>>0]|0)!=(i[144300+A>>0]|0)){A=0;break}A=A+1|0;e=e+2|0}t[r>>2]=e}else A=-1;return A|0}function C$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;w=k;b=r;s=b-A|0;e:do{if((s|0)>1){r=i[A+1>>0]|0;if(!(r<<24>>24)){l=i[A>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A>>0]|0;f=d$(r,l)|0}switch(f|0){case 29:{o=l&255;if(!(1<<(o&31)&t[56940+((o>>>5|n[143788+(r&255)>>0]<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}default:{t[a>>2]=A;r=0;break e}}o=e+72|0;c=A;A:while(1){r=c+2|0;f=b-r|0;if((f|0)<=1){r=-1;break e}l=i[c+3>>0]|0;s=i[r>>0]|0;if(!(l<<24>>24))e=n[o+(s&255)>>0]|0;else e=d$(l,s)|0;switch(e|0){case 27:case 26:case 25:case 24:case 22:{c=r;continue A}case 5:{u=22;break A}case 6:{u=23;break A}case 7:{u=25;break A}case 10:case 9:case 21:{u=27;break A}case 15:{u=46;break A}case 29:break;default:break A}c=s&255;if(!(1<<(c&31)&t[56940+((c>>>5|n[144044+(l&255)>>0]<<3)<<2)>>2])){u=21;break}else c=r}if((u|0)==21){t[a>>2]=r;r=0;break}else if((u|0)==22){t[a>>2]=r;r=0;break}else if((u|0)==23){if((f|0)<3){r=-2;break}t[a>>2]=r;r=0;break}else if((u|0)==25){if((f|0)<4){r=-2;break}t[a>>2]=r;r=0;break}else if((u|0)==27){if(!(G$(A,r,w)|0)){t[a>>2]=r;r=0;break}s=c+4|0;A:while(1){l=b-s|0;if((l|0)<=1){r=-1;break e}r=i[s+1>>0]|0;f=i[s>>0]|0;if(!(r<<24>>24))r=n[o+(f&255)>>0]|0;else r=d$(r,f)|0;switch(r|0){case 8:case 1:case 0:{u=40;break A}case 5:{s=s+2|0;continue A}case 6:{if((l|0)<3){r=-2;break e}s=s+3|0;continue A}case 7:{if((l|0)<4){r=-2;break e}s=s+4|0;continue A}case 15:{r=s+2|0;if((b-r|0)<=1){r=-1;break e}if(i[s+3>>0]|0){s=r;continue A}if((i[r>>0]|0)==62){u=44;break A}else{s=r;continue A}}default:{s=s+2|0;continue A}}}if((u|0)==40){t[a>>2]=s;r=0;break}else if((u|0)==44){t[a>>2]=s+4;r=t[w>>2]|0;break}}else if((u|0)==46){if(!(G$(A,r,w)|0)){t[a>>2]=r;r=0;break}r=c+4|0;if((b-r|0)<=1){r=-1;break}if((i[c+5>>0]|0)==0?(i[r>>0]|0)==62:0){t[a>>2]=c+6;r=t[w>>2]|0;break}}t[a>>2]=r;r=0}else r=-1}while(0);h=k;return r|0}function I$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;s=r-A|0;e:do{if((s|0)>1){c=i[A+1>>0]|0;if(!(c<<24>>24)){l=i[A>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{o=l&255;if(!(1<<(o&31)&t[56940+((o>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}default:{t[a>>2]=A;r=0;break e}}o=e+72|0;e=A;A:while(1){s=e+2|0;A=r-s|0;if((A|0)<=1){r=-1;break e}f=i[e+3>>0]|0;l=i[s>>0]|0;if(!(f<<24>>24))c=n[o+(l&255)>>0]|0;else c=d$(f,l)|0;switch(c|0){case 23:case 27:case 26:case 25:case 24:case 22:{e=s;continue A}case 5:{f=22;break A}case 6:{f=23;break A}case 7:{f=25;break A}case 10:case 9:case 21:{f=27;break A}case 11:{f=34;break A}case 29:break;default:{f=35;break A}}A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(f&255)>>0]|0)<<3)<<2)>>2])){f=21;break}else e=s}if((f|0)==21){t[a>>2]=s;r=0;break}else if((f|0)==22){t[a>>2]=s;r=0;break}else if((f|0)==23){if((A|0)<3){r=-2;break}t[a>>2]=s;r=0;break}else if((f|0)==25){if((A|0)<4){r=-2;break}t[a>>2]=s;r=0;break}else if((f|0)==27){A:while(1){c=s+2|0;if((r-c|0)<=1){r=-1;break e}f=i[s+3>>0]|0;l=i[c>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 10:case 9:case 21:{s=c;f=27;break}case 11:{f=32;break A}default:{f=33;break A}}}if((f|0)==32){t[a>>2]=s+4;r=5;break}else if((f|0)==33){t[a>>2]=c;r=0;break}}else if((f|0)==34){t[a>>2]=e+4;r=5;break}else if((f|0)==35){t[a>>2]=s;r=0;break}}else r=-1}while(0);return r|0}function Z$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+16|0;k=v;t[k>>2]=A;d=r;b=e+72|0;f=0;e:while(1){A:while(1){o=d-A|0;if((o|0)<=1){A=-1;break e}l=i[A+1>>0]|0;s=i[A>>0]|0;if(!(l<<24>>24))c=n[b+(s&255)>>0]|0;else c=d$(l,s)|0;switch(c|0){case 5:{w=11;break e}case 6:{w=12;break e}case 7:{w=14;break e}case 23:{w=16;break A}case 10:case 9:case 21:{w=31;break A}case 14:{w=37;break A}case 29:{u=s&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[144044+(l&255)>>0]<<3)<<2)>>2])){w=9;break e}break}case 27:case 26:case 25:case 24:case 22:break;default:{w=89;break e}}u=A+2|0;t[k>>2]=u;A=u}A:do{if((w|0)==16){w=0;if(f|0){w=17;break e}f=A+2|0;t[k>>2]=f;l=f;s=d-l|0;if((s|0)<=1){A=-1;break e}c=i[A+3>>0]|0;o=i[f>>0]|0;if(!(c<<24>>24))u=n[b+(o&255)>>0]|0;else u=d$(c,o)|0;switch(u|0){case 5:{w=25;break e}case 6:{w=26;break e}case 7:{w=28;break e}case 24:case 22:{f=1;break A}case 29:break;default:{w=30;break e}}u=o&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){w=24;break e}else f=1}else if((w|0)==31)while(1){w=0;l=A+2|0;t[k>>2]=l;s=l;if((d-s|0)<=1){A=-1;break e}A=i[A+3>>0]|0;f=i[l>>0]|0;if(!(A<<24>>24))A=n[b+(f&255)>>0]|0;else A=d$(A,f)|0;switch(A|0){case 14:{A=l;w=37;break A}case 9:case 10:case 21:{A=l;w=31;break}default:{w=36;break e}}}}while(0);A:do{if((w|0)==37){while(1){w=0;s=A+2|0;t[k>>2]=s;c=s;if((d-c|0)<=1){A=-1;break e}f=i[A+3>>0]|0;l=i[s>>0]|0;if(!(f<<24>>24))o=n[b+(l&255)>>0]|0;else o=d$(f,l)|0;if((o|1|0)==13)break;switch(o|0){case 9:case 10:case 21:{A=s;w=37;break}default:{w=43;break e}}}A=A+4|0;t[k>>2]=A;r:while(1){s=d-A|0;if((s|0)<=1){A=-1;break e}f=i[A+1>>0]|0;l=i[A>>0]|0;if(!(f<<24>>24))f=n[b+(l&255)>>0]|0;else f=d$(f,l)|0;if((f|0)==(o|0))break;switch(f|0){case 8:case 1:case 0:{w=56;break e}case 2:{w=61;break e}case 5:{u=A+2|0;t[k>>2]=u;A=u;continue r}case 6:{if((s|0)<3){A=-2;break e}u=A+3|0;t[k>>2]=u;A=u;continue r}case 7:{if((s|0)<4){A=-2;break e}u=A+4|0;t[k>>2]=u;A=u;continue r}case 3:{A=v$(e,A+2|0,r,k)|0;if((A|0)<1){w=59;break e}A=t[k>>2]|0;continue r}default:{u=A+2|0;t[k>>2]=u;A=u;continue r}}}l=A+2|0;t[k>>2]=l;c=l;if((d-c|0)<=1){A=-1;break e}f=i[A+3>>0]|0;s=i[l>>0]|0;if(!(f<<24>>24))f=n[b+(s&255)>>0]|0;else f=d$(f,s)|0;switch(f|0){case 11:{w=81;break e}case 17:{w=82;break e}case 10:case 9:case 21:{A=l;break}default:{w=68;break e}}r:while(1){l=A+2|0;t[k>>2]=l;f=l;s=d-f|0;if((s|0)<=1){A=-1;break e}c=i[A+3>>0]|0;o=i[l>>0]|0;if(!(c<<24>>24))u=n[b+(o&255)>>0]|0;else u=d$(c,o)|0;switch(u|0){case 5:{w=76;break e}case 6:{w=77;break e}case 7:{w=79;break e}case 11:{w=81;break e}case 17:{w=82;break e}case 24:case 22:{f=0;break A}case 10:case 9:case 21:{A=l;break}case 29:break r;default:{w=87;break e}}}u=o&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){w=75;break e}else f=0}}while(0);A=A+4|0;t[k>>2]=A}switch(w|0){case 9:{t[a>>2]=A;A=0;break}case 11:{t[a>>2]=A;A=0;break}case 12:{if((o|0)<3)A=-2;else{t[a>>2]=A;A=0}break}case 14:{if((o|0)<4)A=-2;else{t[a>>2]=A;A=0}break}case 17:{t[a>>2]=A;A=0;break}case 24:{t[a>>2]=f;A=0;break}case 25:{t[a>>2]=f;A=0;break}case 26:{if((s|0)<3)A=-2;else{t[a>>2]=f;A=0}break}case 28:{if((s|0)<4)A=-2;else{t[a>>2]=f;A=0}break}case 30:{t[a>>2]=l;A=0;break}case 36:{t[a>>2]=s;A=0;break}case 43:{t[a>>2]=c;A=0;break}case 56:{t[a>>2]=A;A=0;break}case 59:{if(!A){t[a>>2]=t[k>>2];A=0}break}case 61:{t[a>>2]=A;A=0;break}case 68:{t[a>>2]=c;A=0;break}case 75:{t[a>>2]=l;A=0;break}case 76:{t[a>>2]=l;A=0;break}case 77:{if((s|0)<3)A=-2;else{t[a>>2]=l;A=0}break}case 79:{if((s|0)<4)A=-2;else{t[a>>2]=l;A=0}break}case 81:{t[a>>2]=A+4;A=1;break}case 82:{f=l+2|0;t[k>>2]=f;A=f;if((d-A|0)>1){if((i[l+3>>0]|0)==0?(i[f>>0]|0)==62:0){t[a>>2]=l+4;A=3;break}t[a>>2]=A;A=0}else A=-1;break}case 87:{t[a>>2]=f;A=0;break}case 89:{t[a>>2]=A;A=0;break}}h=v;return A|0}function G$(e,A,r){e=e|0;A=A|0;r=r|0;t[r>>2]=11;e:do{if((A-e|0)==6?(i[e+1>>0]|0)==0:0){switch(i[e>>0]|0){case 120:{A=0;break}case 88:{A=1;break}default:{A=1;break e}}if(!(i[e+3>>0]|0)){switch(i[e+2>>0]|0){case 109:break;case 77:{A=1;break}default:{A=1;break e}}if(!(i[e+5>>0]|0)){switch(i[e+4>>0]|0){case 108:break;case 76:{A=0;break e}default:{A=1;break e}}if(!A){t[r>>2]=12;A=1}else A=0}else A=1}else A=1}else A=1}while(0);return A|0}function L$(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0;c=A+72|0;e:while(1){A:while(1){s=a-r|0;if((s|0)<=1){r=-1;break e}A=i[r+1>>0]|0;l=i[r>>0]|0;if(!(A<<24>>24))A=n[c+(l&255)>>0]|0;else A=d$(A,l)|0;switch(A|0){case 8:case 1:case 0:{o=10;break e}case 6:{o=9;break A}case 7:{o=19;break A}case 5:{r=r+2|0;continue A}case 13:case 12:{l=r+2|0;if((A|0)==(e|0)){o=12;break e}else{r=l;continue A}}default:{r=r+2|0;continue A}}}if((o|0)==9){o=0;if((s|0)<3){r=-2;break}else{r=r+3|0;continue}}else if((o|0)==19){o=0;if((s|0)<4){r=-2;break}else{r=r+4|0;continue}}}e:do{if((o|0)==10){t[f>>2]=r;r=0}else if((o|0)==12)if((a-l|0)>1){t[f>>2]=l;a=i[r+3>>0]|0;r=i[l>>0]|0;if(!(a<<24>>24))r=n[c+(r&255)>>0]|0;else r=d$(a,r)|0;switch(r|0){case 20:case 30:case 11:case 10:case 9:case 21:{r=27;break e}default:{}}r=0}else r=-27}while(0);return r|0}function Q$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;c=r;e:do{if((c-A|0)>1){f=i[A+1>>0]|0;if(!(f<<24>>24))f=n[e+72+(n[A>>0]|0)>>0]|0;else f=d$(f,i[A>>0]|0)|0;switch(f|0){case 27:{f=B$(e,A+2|0,r,a)|0;break e}case 20:{t[a>>2]=A+2;f=33;break e}case 24:case 22:{s=e+72|0;A:while(1){l=A+2|0;r=c-l|0;if((r|0)<=1){f=-1;break e}f=i[A+3>>0]|0;e=i[l>>0]|0;if(!(f<<24>>24))f=n[s+(e&255)>>0]|0;else f=d$(f,e)|0;switch(f|0){case 24:case 22:{A=l;break}case 30:{o=15;break A}case 10:case 9:case 21:break A;default:{o=22;break A}}}if((o|0)==22){t[a>>2]=l;f=0;break e}A:do{if((o|0)==15){if((r|0)<=3){f=-1;break e}e=i[A+5>>0]|0;f=i[A+4>>0]|0;if(!(e<<24>>24))f=n[s+(f&255)>>0]|0;else f=d$(e,f)|0;switch(f|0){case 30:case 10:case 9:case 21:break;default:break A}t[a>>2]=l;f=0;break e}}while(0);t[a>>2]=l;f=16;break e}default:{t[a>>2]=A;f=0;break e}}}else f=-1}while(0);return f|0}function D$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=r-A|0;e:do{if((s|0)>1){c=i[A+1>>0]|0;if(!(c<<24>>24)){l=i[A>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{s=l&255;if(!(1<<(s&31)&t[56940+((s>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}default:{t[a>>2]=A;r=0;break e}}e=e+72|0;c=A;A:while(1){f=c;c=c+2|0;A=r-c|0;if((A|0)<=1){r=-20;break e}f=i[f+3>>0]|0;l=i[c>>0]|0;if(!(f<<24>>24))s=n[e+(l&255)>>0]|0;else s=d$(f,l)|0;switch(s|0){case 27:case 26:case 25:case 24:case 22:continue A;case 5:{f=22;break A}case 6:{f=23;break A}case 7:{f=25;break A}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{f=27;break A}case 29:break;default:{f=28;break A}}A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(f&255)>>0]|0)<<3)<<2)>>2])){f=21;break}}if((f|0)==21){t[a>>2]=c;r=0;break}else if((f|0)==22){t[a>>2]=c;r=0;break}else if((f|0)==23){if((A|0)<3){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==25){if((A|0)<4){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==27){t[a>>2]=c;r=20;break}else if((f|0)==28){t[a>>2]=c;r=0;break}}else r=-1}while(0);return r|0}function z$(e,A,r){e=e|0;A=A|0;r=r|0;r=W$(r)|0;if((r|0)==-1)r=0;else{i[e+69>>0]=r;t[e>>2]=67;t[e+4>>2]=68;t[e+48>>2]=31;t[e+72>>2]=A;t[A>>2]=e;r=1}return r|0}function W$(e){e=e|0;var A=0;e:do{if(!e)A=6;else{A=0;while(1){if((A|0)>=6){A=-1;break e}if(w0(e,t[60068+(A<<2)>>2]|0)|0)break e;A=A+1|0}}}while(0);return A|0}function Y$(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return V$(58948,e,0,A,r,i)|0}function F$(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return V$(58948,e,1,A,r,i)|0}function M$(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;IK(58584,A,r,i);return}function V$(e,A,r,a,n,f){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0;e:do{if(a>>>0>>0){o=t[A+72>>2]|0;l=a+1|0;A:do{if((l|0)==(n|0)){l=i[A+69>>0]|0;if(((l<<24>>24)+-3|0)>>>0<3){l=-1;break e}switch(i[a>>0]|0){case 60:case 0:{l=-1;break e}case-17:case-1:case-2:break;default:break A}if(!((r|0)==1&l<<24>>24==0)){l=-1;break e}}else{c=i[a>>0]|0;l=i[l>>0]|0;s=((c&255)<<8|l&255)&65535;r:do{if(s<<16>>16<-2){if(s<<16>>16>=-257){switch(s<<16>>16){case-257:break;default:break r}if((r|0)==1&(i[A+69>>0]|0)==0)break A;t[f>>2]=a+2;t[o>>2]=t[e+16>>2];l=14;break e}switch(s<<16>>16){case-4165:break;default:break r}if((r|0)==1)switch(i[A+69>>0]|0){case 0:case 3:case 4:case 5:break A;default:{}}l=a+2|0;if((l|0)==(n|0)){l=-1;break e}if((i[l>>0]|0)!=-65)break A;t[f>>2]=a+3;t[o>>2]=t[e+8>>2];l=14;break e}else{if(s<<16>>16<15360){switch(s<<16>>16){case-2:break;default:break r}if((r|0)==1&(i[A+69>>0]|0)==0)break A;t[f>>2]=a+2;t[o>>2]=t[e+20>>2];l=14;break e}switch(s<<16>>16){case 15360:break;default:break r}l=i[A+69>>0]|0;if(l<<24>>24==4){if((r|0)==1)break A}else if((r|0)==1&l<<24>>24==3)break A;l=t[e+20>>2]|0;t[o>>2]=l;l=Q5[t[l+(r<<2)>>2]&127](l,a,n,f)|0;break e}}while(0);if(c<<24>>24){if((r|0)==1|l<<24>>24!=0)break;l=t[e+20>>2]|0;t[o>>2]=l;l=Q5[t[l+(r<<2)>>2]&127](l,a,n,f)|0;break e}if((r|0)==1?(i[A+69>>0]|0)==5:0)break;l=t[e+16>>2]|0;t[o>>2]=l;l=Q5[t[l+(r<<2)>>2]&127](l,a,n,f)|0;break e}}while(0);l=t[e+(i[A+69>>0]<<2)>>2]|0;t[o>>2]=l;l=Q5[t[l+(r<<2)>>2]&127](l,a,n,f)|0}else l=-4}while(0);return l|0}function N$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0;e:do{if(A>>>0>>0){l=A;u=r-l|0;c=(u&1|0)==0;u=u&-2;o=(u|0)==0;u=c|o?r:A+u|0;if(c|o^1){r=i[A>>0]|0;if(!(r<<24>>24)){f=i[A+1>>0]|0;s=f;f=n[e+72+(f&255)>>0]|0}else{f=i[A+1>>0]|0;s=f;f=d$(r,f)|0}do{switch(f|0){case 12:{r=o0(12,e,A+2|0,u,a)|0;break e}case 13:{r=o0(13,e,A+2|0,u,a)|0;break e}case 2:{f=A+2|0;if((u-f|0)<=1){r=-1;break e}r=i[f>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A+3>>0]|0)>>0]|0;else r=d$(r,i[A+3>>0]|0)|0;switch(r|0){case 16:{r=u0(e,A+4|0,u,a)|0;break e}case 15:{r=f0(e,A+4|0,u,a)|0;break e}case 7:case 6:case 5:case 29:case 24:case 22:{t[a>>2]=A;r=29;break e}default:{t[a>>2]=f;r=0;break e}}}case 9:{if((A+2|0)==(u|0)){t[a>>2]=u;r=-15;break e}else l=7;break}case 10:case 21:{l=7;break}case 30:{r=A0(e,A+2|0,u,a)|0;break e}case 35:{t[a>>2]=A+2;r=38;break e}case 20:{t[a>>2]=A+2;r=25;break e}case 4:{f=A+2|0;r=u-f|0;if((r|0)<=1){r=-26;break e}if((i[f>>0]|0)==0?(i[A+3>>0]|0)==93:0){if((r|0)<=3){r=-1;break e}if((i[A+4>>0]|0)==0?(i[A+5>>0]|0)==62:0){t[a>>2]=A+6;r=34;break e}}t[a>>2]=f;r=26;break e}case 31:{t[a>>2]=A+2;r=23;break e}case 32:{f=A+2|0;if((u-f|0)<=1){r=-24;break e}r=i[f>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A+3>>0]|0)>>0]|0;else r=d$(r,i[A+3>>0]|0)|0;switch(r|0){case 33:{t[a>>2]=A+4;r=36;break e}case 15:{t[a>>2]=A+4;r=35;break e}case 34:{t[a>>2]=A+4;r=37;break e}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{t[a>>2]=f;r=24;break e}default:{t[a>>2]=f;r=0;break e}}}case 36:{t[a>>2]=A+2;r=21;break e}case 11:{t[a>>2]=A+2;r=17;break e}case 19:{r=b0(e,A+2|0,u,a)|0;break e}case 5:{if((u-l|0)<2){r=-2;break e}t[a>>2]=A;r=0;break e}case 6:{if((u-l|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((u-l|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}case 24:case 22:{r=18;l=61;break}case 23:case 27:case 26:case 25:{r=19;l=61;break}case 29:{l=r&255;f=s&255;r=f>>>5;f=1<<(f&31);if(!(f&t[56940+((r|n[143788+l>>0]<<3)<<2)>>2]))if(!(t[56940+((n[144044+l>>0]<<3|r)<<2)>>2]&f))l=64;else{r=19;l=61}else{r=18;l=61}break}default:l=64}}while(0);if((l|0)==7){c=u;e=e+72|0;s=A;A:while(1){l=s;s=s+2|0;if((c-s|0)<=1){l=28;break}r=i[s>>0]|0;f=i[l+3>>0]|0;if(!(r<<24>>24))r=n[e+(f&255)>>0]|0;else r=d$(r,f)|0;switch(r|0){case 10:case 21:continue A;case 9:break;default:{l=27;break A}}if((l+4|0)==(u|0)){l=27;break}}if((l|0)==27){t[a>>2]=s;r=15;break}else if((l|0)==28){t[a>>2]=s;r=15;break}}else if((l|0)==61){o=e+72|0;f=A+2|0;A:while(1){A=r&255;r:while(1){c=u-f|0;if((c|0)<=1){l=104;break A}l=i[f>>0]|0;s=i[f+1>>0]|0;if(!(l<<24>>24))e=n[o+(s&255)>>0]|0;else e=d$(l,s)|0;switch(e|0){case 5:{l=73;break A}case 6:{l=74;break A}case 7:{l=76;break A}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{l=78;break A}case 34:{l=94;break A}case 33:{l=97;break A}case 15:{l=100;break A}case 29:{c=s&255;if(!(1<<(c&31)&t[56940+((c>>>5|n[144044+(l&255)>>0]<<3)<<2)>>2])){l=71;break A}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{c=f+2|0;switch(A&63){case 41:{r=19;f=c;continue A}case 18:break r;default:{f=c;continue r}}}default:{l=103;break A}}f=f+2|0}e=u-c|0;if((e|0)<=1){r=-1;break e}r=i[c>>0]|0;l=i[f+3>>0]|0;if(!(r<<24>>24))s=n[o+(l&255)>>0]|0;else s=d$(r,l)|0;switch(s|0){case 5:{l=89;break A}case 6:{l=90;break A}case 7:{l=92;break A}case 29:{A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|n[144044+(r&255)>>0]<<3)<<2)>>2])){l=87;break A}break}case 27:case 26:case 25:case 24:case 22:break;default:{r=19;f=c;continue A}}r=41;f=f+4|0}switch(l|0){case 71:{t[a>>2]=f;r=0;break e}case 73:{t[a>>2]=f;r=0;break e}case 74:{if((c|0)<3){r=-2;break e}t[a>>2]=f;r=0;break e}case 76:{if((c|0)<4){r=-2;break e}t[a>>2]=f;r=0;break e}case 78:{t[a>>2]=f;break e}case 87:{t[a>>2]=c;r=0;break e}case 89:{t[a>>2]=c;r=0;break e}case 90:{if((e|0)<3){r=-2;break e}t[a>>2]=c;r=0;break e}case 92:{if((e|0)<4){r=-2;break e}t[a>>2]=c;r=0;break e}case 94:if((r|0)==19){t[a>>2]=f;r=0;break e}else{t[a>>2]=f+2;r=32;break e}case 97:if((r|0)==19){t[a>>2]=f;r=0;break e}else{t[a>>2]=f+2;r=31;break e}case 100:if((r|0)==19){t[a>>2]=f;r=0;break e}else{t[a>>2]=f+2;r=30;break e}case 103:{t[a>>2]=f;r=0;break e}case 104:{r=0-r|0;break e}}}else if((l|0)==64){t[a>>2]=A;r=0;break}}else r=-1}else r=-4}while(0);return r|0}function R$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;e:do{if(A>>>0>>0){f=A;l=r-f|0;c=(l&1|0)==0;l=l&-2;s=(l|0)==0;l=c|s?r:A+l|0;if(c|s^1){r=i[A>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A+1>>0]|0)>>0]|0;else r=d$(r,i[A+1>>0]|0)|0;do{switch(r|0){case 2:{r=a0(e,A+2|0,l,a)|0;break e}case 3:{r=e0(e,A+2|0,l,a)|0;break e}case 9:{f=A+2|0;if((l-f|0)<=1){r=-3;break e}r=i[f>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A+3>>0]|0)>>0]|0;else r=d$(r,i[A+3>>0]|0)|0;t[a>>2]=(r|0)==10?A+4|0:f;r=7;break e}case 10:{t[a>>2]=A+2;r=7;break e}case 4:{f=A+2|0;if((l-f|0)<=1){r=-5;break e}if((i[f>>0]|0)==0?(i[A+3>>0]|0)==93:0){r=A+4|0;if((l-r|0)<=1){r=-5;break e}if((i[r>>0]|0)==0?(i[A+5>>0]|0)==62:0){t[a>>2]=r;r=0;break e}else r=l}else r=l;break}case 5:{r=l;if((r-f|0)<2){r=-2;break e}f=A+2|0;break}case 6:{r=l;if((r-f|0)<3){r=-2;break e}f=A+3|0;break}case 7:{r=l;if((r-f|0)<4){r=-2;break e}f=A+4|0;break}case 8:case 1:case 0:{t[a>>2]=A;r=0;break e}default:{f=A+2|0;r=l}}}while(0);s=e+72|0;e=f;A:while(1){A=r-e|0;if((A|0)<=1){f=52;break}f=i[e>>0]|0;l=i[e+1>>0]|0;if(!(f<<24>>24))f=n[s+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{f=50;break A}case 5:{e=e+2|0;continue A}case 6:{if((A|0)<3){f=38;break A}e=e+3|0;continue A}case 7:{if((A|0)<4){f=41;break A}e=e+4|0;continue A}case 4:{if((A|0)<=3){f=50;break A}f=e+2|0;if(i[f>>0]|0){e=f;continue A}if((i[e+3>>0]|0)!=93){e=f;continue A}if((A|0)<=5){f=50;break A}l=e+4|0;if(i[l>>0]|0){e=f;continue A}if((i[e+5>>0]|0)==62){f=49;break A}else{e=f;continue A}}default:{e=e+2|0;continue A}}}if((f|0)==38){t[a>>2]=e;r=6;break}else if((f|0)==41){t[a>>2]=e;r=6;break}else if((f|0)==49){t[a>>2]=l;r=0;break}else if((f|0)==50){t[a>>2]=e;r=6;break}else if((f|0)==52){t[a>>2]=e;r=6;break}}else r=-1}else r=-4}while(0);return r|0}function x$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;e:do{if(A>>>0>>0){f=A;l=r-f|0;c=(l&1|0)==0;l=l&-2;s=(l|0)==0;l=c|s?r:A+l|0;if(c|s^1){r=i[A>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A+1>>0]|0)>>0]|0;else r=d$(r,i[A+1>>0]|0)|0;switch(r|0){case 4:{f=A+2|0;if((l-f|0)<=1){r=-1;break e}if((i[f>>0]|0)==0?(i[A+3>>0]|0)==93:0){r=A+4|0;if((l-r|0)<=1){r=-1;break e}if((i[r>>0]|0)==0?(i[A+5>>0]|0)==62:0){t[a>>2]=A+6;r=40;break e}}break}case 9:{f=A+2|0;if((l-f|0)<=1){r=-1;break e}r=i[f>>0]|0;if(!(r<<24>>24))r=n[e+72+(n[A+3>>0]|0)>>0]|0;else r=d$(r,i[A+3>>0]|0)|0;t[a>>2]=(r|0)==10?A+4|0:f;r=7;break e}case 10:{t[a>>2]=A+2;r=7;break e}case 5:{r=l;if((r-f|0)<2){r=-2;break e}f=A+2|0;l=r;break}case 6:{r=l;if((r-f|0)<3){r=-2;break e}f=A+3|0;l=r;break}case 7:{r=l;if((r-f|0)<4){r=-2;break e}f=A+4|0;l=r;break}case 8:case 1:case 0:{t[a>>2]=A;r=0;break e}default:f=A+2|0}s=e+72|0;e=f;A:while(1){A=l-e|0;if((A|0)<=1){f=40;break}r=i[e>>0]|0;f=i[e+1>>0]|0;if(!(r<<24>>24))r=n[s+(f&255)>>0]|0;else r=d$(r,f)|0;switch(r|0){case 10:case 9:case 8:case 1:case 0:case 4:{f=38;break A}case 6:{if((A|0)<3){f=35;break A}else r=3;break}case 7:{if((A|0)<4){f=37;break A}else r=4;break}default:r=2}e=e+r|0}if((f|0)==35){t[a>>2]=e;r=6;break}else if((f|0)==37){t[a>>2]=e;r=6;break}else if((f|0)==38){t[a>>2]=e;r=6;break}else if((f|0)==40){t[a>>2]=e;r=6;break}}else r=-1}else r=-4}while(0);return r|0}function J$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;c=r-A|0;c=(c&1|0)==0?r:A+(c&-2)|0;s=e+72|0;l=0;r=A;e:while(1){f=c-r|0;if((f|0)<=1){r=-1;break}e=i[r>>0]|0;A=i[r+1>>0]|0;if(!(e<<24>>24))e=n[s+(A&255)>>0]|0;else e=d$(e,A)|0;switch(e|0){case 8:case 1:case 0:{o=12;break e}case 5:{f=l;r=r+2|0;l=f;continue e}case 6:{if((f|0)<3){r=-2;break e}f=l;r=r+3|0;l=f;continue e}case 7:{if((f|0)<4){r=-2;break e}f=l;r=r+4|0;l=f;continue e}case 2:{e=r+2|0;if((c-e|0)<=1){r=-1;break e}if(i[e>>0]|0){f=l;r=e;l=f;continue e}if((i[r+3>>0]|0)!=33){f=l;r=e;l=f;continue e}e=r+4|0;if((c-e|0)<=1){r=-1;break e}if(i[e>>0]|0){f=l;r=e;l=f;continue e}f=(i[r+5>>0]|0)==91;l=l+(f&1)|0;r=f?r+6|0:e;continue e}case 4:{e=r+2|0;if((c-e|0)<=1){r=-1;break e}if(i[e>>0]|0){f=l;r=e;l=f;continue e}if((i[r+3>>0]|0)!=93){f=l;r=e;l=f;continue e}e=r+4|0;if((c-e|0)<=1){r=-1;break e}if(i[e>>0]|0){f=l;r=e;l=f;continue e}if((i[r+5>>0]|0)!=62){f=l;r=e;l=f;continue e}r=r+6|0;if(!l){o=26;break e}l=l+-1|0;continue e}default:{f=l;r=r+2|0;l=f;continue e}}}if((o|0)==12){t[a>>2]=r;r=0}else if((o|0)==26){t[a>>2]=r;r=42}return r|0}function H$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;do{if(A>>>0>>0){c=r;if((c-A|0)>1){o=e+72|0;s=A;e:while(1){if((c-s|0)<=1){l=30;break}f=i[s>>0]|0;l=i[s+1>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 3:{l=11;break e}case 2:{l=14;break e}case 10:{l=15;break e}case 9:{l=18;break e}case 21:{l=25;break e}case 5:{f=2;break}case 6:{f=3;break}case 7:{f=4;break}default:f=2}s=s+f|0}if((l|0)==11)if((s|0)==(A|0)){f=e0(e,A+2|0,r,a)|0;break}else{t[a>>2]=s;f=6;break}else if((l|0)==14){t[a>>2]=s;f=0;break}else if((l|0)==15)if((s|0)==(A|0)){t[a>>2]=A+2;f=7;break}else{t[a>>2]=s;f=6;break}else if((l|0)==18){if((s|0)!=(A|0)){t[a>>2]=s;f=6;break}s=A+2|0;if((c-s|0)<=1){f=-3;break}f=i[s>>0]|0;l=i[A+3>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;t[a>>2]=(f|0)==10?A+4|0:s;f=7;break}else if((l|0)==25)if((s|0)==(A|0)){t[a>>2]=A+2;f=39;break}else{t[a>>2]=s;f=6;break}else if((l|0)==30){t[a>>2]=s;f=6;break}}else f=-1}else f=-4}while(0);return f|0}function P$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;do{if(A>>>0>>0){c=r;if((c-A|0)>1){o=e+72|0;s=A;e:while(1){if((c-s|0)<=1){l=29;break}f=i[s>>0]|0;l=i[s+1>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 3:{l=11;break e}case 30:{l=14;break e}case 10:{l=17;break e}case 9:{l=20;break e}case 5:{f=2;break}case 6:{f=3;break}case 7:{f=4;break}default:f=2}s=s+f|0}if((l|0)==11)if((s|0)==(A|0)){f=e0(e,A+2|0,r,a)|0;break}else{t[a>>2]=s;f=6;break}else if((l|0)==14)if((s|0)==(A|0)){f=A0(e,A+2|0,r,a)|0;f=(f|0)==22?0:f;break}else{t[a>>2]=s;f=6;break}else if((l|0)==17)if((s|0)==(A|0)){t[a>>2]=A+2;f=7;break}else{t[a>>2]=s;f=6;break}else if((l|0)==20){if((s|0)!=(A|0)){t[a>>2]=s;f=6;break}s=A+2|0;if((c-s|0)<=1){f=-3;break}f=i[s>>0]|0;l=i[A+3>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;t[a>>2]=(f|0)==10?A+4|0:s;f=7;break}else if((l|0)==29){t[a>>2]=s;f=6;break}}else f=-1}else f=-4}while(0);return f|0}function X$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var t=0,n=0;t=r;e=A;while(1){A=i[a>>0]|0;if(!(A<<24>>24)){n=7;break}if((t-e|0)<2){e=0;break}if(i[e>>0]|0){e=0;break}if((i[e+1>>0]|0)!=A<<24>>24){e=0;break}a=a+1|0;e=e+2|0}if((n|0)==7)e=(e|0)==(r|0)&1;return e|0}function S$(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;t=e+72|0;a=A;e:while(1){e=i[a>>0]|0;r=i[a+1>>0]|0;if(!(e<<24>>24))e=n[t+(r&255)>>0]|0;else e=d$(e,r)|0;switch(e|0){case 5:{e=2;break}case 6:{e=3;break}case 7:{e=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{e=2;break}default:break e}a=a+e|0}return a-A|0}function j$(e,A){e=e|0;A=A|0;var r=0,a=0;a=e+72|0;e:while(1){e=i[A>>0]|0;r=i[A+1>>0]|0;if(!(e<<24>>24))e=n[a+(r&255)>>0]|0;else e=d$(e,r)|0;switch(e|0){case 21:case 9:case 10:break;default:break e}A=A+2|0}return A|0}function U$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;h=e+72|0;u=0;b=0;e=1;e:while(1){o=A+2|0;f=i[o>>0]|0;s=f<<24>>24==0;l=A+3|0;c=i[l>>0]|0;if(s)f=n[h+(c&255)>>0]|0;else f=d$(f,c)|0;do{switch(f|0){case 5:{if(e|0){l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}if((b|0)>=(r|0)){s=b;c=u;e=1;A=o;b=s;u=c;continue e}t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;s=b;c=u;e=1;A=o;b=s;u=c;continue e}case 6:{if(e|0){s=e;c=b;o=u;A=l;e=s;b=c;u=o;continue e}if((b|0)>=(r|0)){c=b;o=u;e=1;A=l;b=c;u=o;continue e}t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;c=b;o=u;e=1;A=l;b=c;u=o;continue e}case 7:{if(!e)if((b|0)<(r|0)){t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;e=1}else e=1;c=b;o=u;A=A+4|0;b=c;u=o;continue e}case 24:case 22:case 29:{if(e|0){l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}if((b|0)>=(r|0)){s=b;c=u;e=1;A=o;b=s;u=c;continue e}t[a+(b<<4)>>2]=o;i[a+(b<<4)+12>>0]=1;s=b;c=u;e=1;A=o;b=s;u=c;continue e}case 12:{if((e|0)!=2){if((b|0)>=(r|0)){c=b;u=12;e=2;A=o;b=c;continue e}t[a+(b<<4)+4>>2]=A+4;c=b;u=12;e=2;A=o;b=c;continue e}if((u|0)!=12){s=b;c=u;e=2;A=o;b=s;u=c;continue e}if((b|0)<(r|0))t[a+(b<<4)+8>>2]=o;u=12;b=b+1|0;e=0;A=o;continue e}case 13:{if((e|0)!=2){if((b|0)>=(r|0)){c=b;u=13;e=2;A=o;b=c;continue e}t[a+(b<<4)+4>>2]=A+4;c=b;u=13;e=2;A=o;b=c;continue e}if((u|0)!=13){s=b;c=u;e=2;A=o;b=s;u=c;continue e}if((b|0)<(r|0))t[a+(b<<4)+8>>2]=o;u=13;b=b+1|0;e=0;A=o;continue e}case 3:{if((b|0)>=(r|0)){l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}i[a+(b<<4)+12>>0]=0;l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}case 21:{switch(e|0){case 1:{s=b;c=u;e=0;A=o;b=s;u=c;continue e}case 2:break;default:{l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}}if((b|0)>=(r|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}l=a+(b<<4)+12|0;if(!(i[l>>0]|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}do{if(s&(o|0)!=(t[a+(b<<4)+4>>2]|0)&c<<24>>24==32){f=i[A+4>>0]|0;e=i[A+5>>0]|0;if(!(f<<24>>24)){if(e<<24>>24==32)break;e=n[h+(e&255)>>0]|0}else e=d$(f,e)|0;if((e|0)!=(u|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}}}while(0);i[l>>0]=0;s=b;c=u;e=2;A=o;b=s;u=c;continue e}case 10:case 9:{switch(e|0){case 1:{s=b;c=u;e=0;A=o;b=s;u=c;continue e}case 2:break;default:{l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}}if((b|0)>=(r|0)){s=b;c=u;e=2;A=o;b=s;u=c;continue e}i[a+(b<<4)+12>>0]=0;s=b;c=u;e=2;A=o;b=s;u=c;continue e}case 17:case 11:if((e|0)==2){s=b;c=u;e=2;A=o;b=s;u=c;continue e}else break e;default:{l=e;s=b;c=u;A=o;e=l;b=s;u=c;continue e}}}while(0)}return b|0}function T$(e,A){e=e|0;A=A|0;var r=0,a=0;e=A+4|0;e:do{if(!(i[e>>0]|0))if((i[A+5>>0]|0)==120){A=A+6|0;e=0;while(1){A:while(1){if(!(i[A>>0]|0)){r=i[A+1>>0]|0;if(r<<24>>24==59){a=18;break e}r=r<<24>>24;switch(r|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{a=8;break A}case 70:case 69:case 68:case 67:case 66:case 65:{a=9;break A}case 102:case 101:case 100:case 99:case 98:case 97:{a=10;break A}default:{}}}A=A+2|0}if((a|0)==8)e=r+-48|e<<4;else if((a|0)==9)e=(e<<4)+-55+r|0;else if((a|0)==10)e=(e<<4)+-87+r|0;if((e|0)<1114112)A=A+2|0;else{e=-1;a=19;break}}}else{A=e;e=0;a=13}else{r=e;e=0;A=-1;a=16}}while(0);while(1)if((a|0)==13){if(i[A>>0]|0){r=A;A=-1;a=16;continue}if((i[A+1>>0]|0)==59){a=18;continue}r=A;A=i[A+1>>0]|0;a=16;continue}else if((a|0)==16){e=(e*10|0)+-48+A|0;if((e|0)>=1114112){e=-1;a=19;continue}A=r+2|0;a=13;continue}else if((a|0)==18){e=po(e)|0;a=19;continue}else if((a|0)==19)return e|0;return 0}function O$(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;e:do{switch((r-A|0)/2|0|0){case 2:{if((i[A+2>>0]|0)==0?(i[A+3>>0]|0)==116:0){if(!(i[A>>0]|0))e=i[A+1>>0]|0;else e=-1;e=(e|0)==108?60:(e|0)==103?62:0}else a=27;break}case 3:{if((((((i[A>>0]|0)==0?(i[A+1>>0]|0)==97:0)?(i[A+2>>0]|0)==0:0)?(i[A+3>>0]|0)==109:0)?(i[A+4>>0]|0)==0:0)?(i[A+5>>0]|0)==112:0)e=38;else a=27;break}case 4:{if(!(i[A>>0]|0))switch(i[A+1>>0]|0){case 113:{if(i[A+2>>0]|0){a=27;break e}if((i[A+3>>0]|0)!=117){a=27;break e}if(i[A+4>>0]|0){a=27;break e}if((i[A+5>>0]|0)!=111){a=27;break e}if(i[A+6>>0]|0){a=27;break e}if((i[A+7>>0]|0)==116){e=34;break e}else{a=27;break e}}case 97:{if(i[A+2>>0]|0){a=27;break e}if((i[A+3>>0]|0)!=112){a=27;break e}if(i[A+4>>0]|0){a=27;break e}if((i[A+5>>0]|0)!=111){a=27;break e}if(i[A+6>>0]|0){a=27;break e}if((i[A+7>>0]|0)==115){e=39;break e}else{a=27;break e}}default:{a=27;break e}}else a=27;break}default:a=27}}while(0);if((a|0)==27)e=0;return e|0}function _$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=e+72|0;c=a+4|0;while(1){if((r-A|0)<=1)break;e=i[A>>0]|0;f=i[A+1>>0]|0;if(!(e<<24>>24))e=n[s+(f&255)>>0]|0;else e=d$(e,f)|0;switch(e|0){case 5:{A=A+2|0;break}case 6:{A=A+3|0;break}case 7:{A=A+4|0;break}case 10:{t[c>>2]=-1;t[a>>2]=(t[a>>2]|0)+1;A=A+2|0;break}case 9:{t[a>>2]=(t[a>>2]|0)+1;l=A+2|0;if((r-l|0)>1){e=i[l>>0]|0;f=i[A+3>>0]|0;if(!(e<<24>>24))e=n[s+(f&255)>>0]|0;else e=d$(e,f)|0;A=(e|0)==10?A+4|0:l}else A=l;t[c>>2]=-1;break}default:A=A+2|0}t[c>>2]=(t[c>>2]|0)+1}return}function q$(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;c=r+-2|0;s=e+72|0;e:while(1){f=A+2|0;if((c-f|0)<=1){r=1;break}r=i[f>>0]|0;l=r<<24>>24==0;e=i[A+3>>0]|0;if(l)r=n[s+(e&255)>>0]|0;else r=d$(r,e)|0;switch(r|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{A=f;continue e}case 21:if(l&e<<24>>24==9){o=12;break e}else{A=f;continue e}case 22:case 26:{if(!l){o=12;break e}if(e<<24>>24>=0){A=f;continue e}break}default:if(!l){o=12;break e}}switch(e<<24>>24|0){case 64:case 36:{A=f;break}default:{o=12;break e}}}if((o|0)==12){t[a>>2]=f;r=0}return r|0}function K$(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0;s=t[A>>2]|0;c=s+(r-s&-2)|0;o=c;u=f;e:while(1){if(s>>>0>=c>>>0){e=0;break}l=i[s+1>>0]|0;e=i[s>>0]|0;r=e&255;switch(e<<24>>24){case 0:{if(l<<24>>24>-1){e=t[a>>2]|0;if((e|0)==(f|0)){e=2;break e}t[a>>2]=e+1;i[e>>0]=l;e=s}else b=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{b=7;break}case-37:case-38:case-39:case-40:{e=t[a>>2]|0;if((u-e|0)<4){e=2;break e}if((o-s|0)<4){e=1;break e}h=l&255;l=(r<<2&12|h>>>6)+1|0;t[a>>2]=e+1;i[e>>0]=l>>>2|240;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h>>>2&15|l<<4&48|128;e=s+2|0;l=n[s+3>>0]|0;r=(h<<4&48|l>>>6|i[e>>0]<<2&12|128)&255;s=t[a>>2]|0;t[a>>2]=s+1;i[s>>0]=r;s=t[a>>2]|0;t[a>>2]=s+1;i[s>>0]=l&63|128;break}default:{e=t[a>>2]|0;if((u-e|0)<3){e=2;break e}t[a>>2]=e+1;i[e>>0]=r>>>4|224;h=l&255;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h>>>6|r<<2&60|128;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h&63|128;e=s}}if((b|0)==7){b=0;e=t[a>>2]|0;if((u-e|0)<2){e=2;break}h=l&255;t[a>>2]=e+1;i[e>>0]=h>>>6|r<<2|192;e=t[a>>2]|0;t[a>>2]=e+1;i[e>>0]=h&63|128;e=s}s=e+2|0}t[A>>2]=s;return e|0}function $$(e,A,r,f,l){e=e|0;A=A|0;r=r|0;f=f|0;l=l|0;var s=0,c=0,o=0;s=t[A>>2]|0;o=r-s&-2;e=s+o|0;if((o|0)>(l-(t[f>>2]|0)|0)){c=e+-2|0;r=(i[c>>0]&-8)<<24>>24==-40;o=r&1;e=r?c:e}else o=0;r=s;while(1){s=r>>>0>>0;c=t[f>>2]|0;if(!(s&c>>>0>>0))break;s=((n[r>>0]|0)<<8|(n[r+1>>0]|0))&65535;t[f>>2]=c+2;a[c>>1]=s;c=(t[A>>2]|0)+2|0;t[A>>2]=c;r=c}return((c|0)!=(l|0)|s^1?o:2)|0}function e0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;o=r;s=o-A|0;e:do{if((s|0)>1){c=i[A>>0]|0;if(!(c<<24>>24)){l=i[A+1>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A+1>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{s=l&255;if(!(1<<(s&31)&t[56940+((s>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;e=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;e=0;break e}case 6:{if((s|0)<3){e=-2;break e}t[a>>2]=A;e=0;break e}case 7:{if((s|0)<4){e=-2;break e}t[a>>2]=A;e=0;break e}case 19:{e=r0(e,A+2|0,r,a)|0;break e}default:{t[a>>2]=A;e=0;break e}}c=e+72|0;s=A;A:while(1){l=s+2|0;A=o-l|0;if((A|0)<=1){e=-1;break e}e=i[l>>0]|0;r=i[s+3>>0]|0;if(!(e<<24>>24))f=n[c+(r&255)>>0]|0;else f=d$(e,r)|0;switch(f|0){case 27:case 26:case 25:case 24:case 22:{s=l;continue A}case 5:{r=23;break A}case 6:{r=24;break A}case 7:{r=26;break A}case 18:{r=28;break A}case 29:break;default:{r=29;break A}}A=r&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(e&255)>>0]|0)<<3)<<2)>>2])){r=22;break}else s=l}if((r|0)==22){t[a>>2]=l;e=0;break}else if((r|0)==23){t[a>>2]=l;e=0;break}else if((r|0)==24){if((A|0)<3){e=-2;break}t[a>>2]=l;e=0;break}else if((r|0)==26){if((A|0)<4){e=-2;break}t[a>>2]=l;e=0;break}else if((r|0)==28){t[a>>2]=s+4;e=9;break}else if((r|0)==29){t[a>>2]=l;e=0;break}}else e=-1}while(0);return e|0}function A0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;s=r-A|0;e:do{if((s|0)>1){c=i[A>>0]|0;if(!(c<<24>>24)){l=i[A+1>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A+1>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{o=l&255;if(!(1<<(o&31)&t[56940+((o>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}case 30:case 9:case 10:case 21:{t[a>>2]=A;r=22;break e}default:{t[a>>2]=A;r=0;break e}}o=e+72|0;e=A;A:while(1){c=e+2|0;A=r-c|0;if((A|0)<=1){r=-1;break e}f=i[c>>0]|0;l=i[e+3>>0]|0;if(!(f<<24>>24))s=n[o+(l&255)>>0]|0;else s=d$(f,l)|0;switch(s|0){case 27:case 26:case 25:case 24:case 22:{e=c;continue A}case 5:{f=23;break A}case 6:{f=24;break A}case 7:{f=26;break A}case 18:{f=28;break A}case 29:break;default:{f=29;break A}}A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(f&255)>>0]|0)<<3)<<2)>>2])){f=22;break}else e=c}if((f|0)==22){t[a>>2]=c;r=0;break}else if((f|0)==23){t[a>>2]=c;r=0;break}else if((f|0)==24){if((A|0)<3){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==26){if((A|0)<4){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==28){t[a>>2]=e+4;r=28;break}else if((f|0)==29){t[a>>2]=c;r=0;break}}else r=-1}while(0);return r|0}function r0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;c=r;e:do{if((c-A|0)>1){l=i[A>>0]|0;f=i[A+1>>0]|0;do{if(!(l<<24>>24))if(f<<24>>24==120){f=i0(e,A+2|0,r,a)|0;break e}else{f=n[e+72+(f&255)>>0]|0;break}else f=d$(l,f)|0}while(0);if((f|0)!=25){t[a>>2]=A;f=0;break}s=e+72|0;e=A;A:while(1){l=e+2|0;if((c-l|0)<=1){f=-1;break e}f=i[l>>0]|0;r=i[e+3>>0]|0;if(!(f<<24>>24))f=n[s+(r&255)>>0]|0;else f=d$(f,r)|0;switch(f|0){case 25:{e=l;break}case 18:{r=15;break A}default:{r=16;break A}}}if((r|0)==15){t[a>>2]=e+4;f=10;break}else if((r|0)==16){t[a>>2]=l;f=0;break}}else f=-1}while(0);return f|0}function i0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0;e:do{if((r-A|0)>1){f=i[A>>0]|0;if(!(f<<24>>24))f=n[e+72+(n[A+1>>0]|0)>>0]|0;else f=d$(f,i[A+1>>0]|0)|0;if((f&-2|0)!=24){t[a>>2]=A;r=0;break}s=e+72|0;A:while(1){l=A+2|0;if((r-l|0)<=1){r=-1;break e}f=i[l>>0]|0;e=i[A+3>>0]|0;if(!(f<<24>>24))f=n[s+(e&255)>>0]|0;else f=d$(f,e)|0;switch(f|0){case 24:case 25:{A=l;break}case 18:{f=13;break A}default:{f=14;break A}}}if((f|0)==13){t[a>>2]=A+4;r=10;break}else if((f|0)==14){t[a>>2]=l;r=0;break}}else r=-1}while(0);return r|0}function a0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;h=r;s=h-A|0;e:do{if((s|0)>1){c=i[A>>0]|0;if(!(c<<24>>24)){l=i[A+1>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A+1>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{u=l&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){t[a>>2]=A;f=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;f=0;break e}case 6:{if((s|0)<3){f=-2;break e}t[a>>2]=A;f=0;break e}case 7:{if((s|0)<4){f=-2;break e}t[a>>2]=A;f=0;break e}case 16:{l=A+2|0;if((h-l|0)<=1){f=-1;break e}f=i[l>>0]|0;if(!(f<<24>>24))f=n[e+72+(n[A+3>>0]|0)>>0]|0;else f=d$(f,i[A+3>>0]|0)|0;switch(f|0){case 27:{f=t0(e,A+4|0,r,a)|0;break e}case 20:{f=n0(A+4|0,r,a)|0;break e}default:{t[a>>2]=l;f=0;break e}}}case 15:{f=f0(e,A+2|0,r,a)|0;break e}case 17:{f=l0(e,A+2|0,r,a)|0;break e}default:{t[a>>2]=A;f=0;break e}}u=e+72|0;o=0;f=A+2|0;A:while(1){r:while(1){l=h-f|0;if((l|0)<=1){f=-1;break e}s=i[f>>0]|0;c=i[f+1>>0]|0;if(!(s<<24>>24))A=n[u+(c&255)>>0]|0;else A=d$(s,c)|0;switch(A|0){case 5:{b=34;break A}case 6:{b=35;break A}case 7:{b=37;break A}case 10:case 9:case 21:{b=55;break A}case 11:{b=69;break A}case 17:break A;case 23:break r;case 29:{A=c&255;if(!(1<<(A&31)&t[56940+((A>>>5|n[144044+(s&255)>>0]<<3)<<2)>>2])){b=32;break A}break}case 27:case 26:case 25:case 24:case 22:break;default:{b=75;break A}}f=f+2|0}if(o|0){b=40;break}A=f+2|0;o=h-A|0;if((o|0)<=1){f=-1;break e}l=i[A>>0]|0;s=i[f+3>>0]|0;if(!(l<<24>>24))c=n[u+(s&255)>>0]|0;else c=d$(l,s)|0;switch(c|0){case 5:{b=49;break A}case 6:{b=50;break A}case 7:{b=52;break A}case 29:{o=s&255;if(!(1<<(o&31)&t[56940+((o>>>5|n[143788+(l&255)>>0]<<3)<<2)>>2])){b=47;break A}break}case 24:case 22:break;default:{b=54;break A}}o=1;f=f+4|0}A:switch(b|0){case 32:{t[a>>2]=f;f=0;break e}case 34:{t[a>>2]=f;f=0;break e}case 35:{if((l|0)<3){f=-2;break e}t[a>>2]=f;f=0;break e}case 37:{if((l|0)<4){f=-2;break e}t[a>>2]=f;f=0;break e}case 40:{t[a>>2]=f;f=0;break e}case 47:{t[a>>2]=A;f=0;break e}case 49:{t[a>>2]=A;f=0;break e}case 50:{if((o|0)<3){f=-2;break e}t[a>>2]=A;f=0;break e}case 52:{if((o|0)<4){f=-2;break e}t[a>>2]=A;f=0;break e}case 54:{t[a>>2]=A;f=0;break e}case 55:{r:while(1){b=0;l=f+2|0;s=h-l|0;if((s|0)<=1){f=-1;break e}c=i[l>>0]|0;A=i[f+3>>0]|0;if(!(c<<24>>24))o=n[u+(A&255)>>0]|0;else o=d$(c,A)|0;switch(o|0){case 11:{f=l;b=69;break A}case 17:{f=l;break A}case 10:case 9:case 21:{f=l;b=55;break}case 29:{b=60;break r}case 24:case 22:break r;case 5:{b=63;break r}case 6:{b=64;break r}case 7:{b=66;break r}default:{b=68;break r}}}if((b|0)==60){h=A&255;if(!(1<<(h&31)&t[56940+((h>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){t[a>>2]=l;f=0;break e}}else if((b|0)==63){t[a>>2]=l;f=0;break e}else if((b|0)==64){if((s|0)<3){f=-2;break e}t[a>>2]=l;f=0;break e}else if((b|0)==66){if((s|0)<4){f=-2;break e}t[a>>2]=l;f=0;break e}else if((b|0)==68){t[a>>2]=l;f=0;break e}f=s0(e,f+4|0,r,a)|0;break e}case 75:{t[a>>2]=f;f=0;break e}}if((b|0)==69){t[a>>2]=f+2;f=2;break}l=f+2|0;if((h-l|0)>1){if((i[l>>0]|0)==0?(i[f+3>>0]|0)==62:0){t[a>>2]=f+4;f=4;break}t[a>>2]=l;f=0}else f=-1}else f=-1}while(0);return f|0}function t0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=r;e:do{if((s-A|0)>1){if((i[A>>0]|0)==0?(i[A+1>>0]|0)==45:0){l=e+72|0;f=A+2|0;A:while(1){A=s-f|0;if((A|0)<=1){r=-1;break e}r=i[f>>0]|0;e=i[f+1>>0]|0;if(!(r<<24>>24))r=n[l+(e&255)>>0]|0;else r=d$(r,e)|0;switch(r|0){case 8:case 1:case 0:{c=16;break A}case 5:{f=f+2|0;continue A}case 6:{if((A|0)<3){r=-2;break e}f=f+3|0;continue A}case 7:{if((A|0)<4){r=-2;break e}f=f+4|0;continue A}case 27:{r=f+2|0;if((s-r|0)<=1){r=-1;break e}if(i[r>>0]|0){f=r;continue A}if((i[f+3>>0]|0)==45)break A;else{f=r;continue A}}default:{f=f+2|0;continue A}}}if((c|0)==16){t[a>>2]=f;r=0;break}r=f+4|0;if((s-r|0)<=1){r=-1;break}if((i[r>>0]|0)==0?(i[f+5>>0]|0)==62:0){t[a>>2]=f+6;r=13;break}t[a>>2]=r;r=0;break}t[a>>2]=A;r=0}else r=-1}while(0);return r|0}function n0(e,A,r){e=e|0;A=A|0;r=r|0;if((A-e|0)>11){A=0;while(1){if((A|0)>=6){A=8;break}if(i[e>>0]|0){A=0;break}if((i[e+1>>0]|0)!=(i[144300+A>>0]|0)){A=0;break}A=A+1|0;e=e+2|0}t[r>>2]=e}else A=-1;return A|0}function f0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;k=h;h=h+16|0;w=k;b=r;l=b-A|0;e:do{if((l|0)>1){s=i[A>>0]|0;if(!(s<<24>>24)){f=i[A+1>>0]|0;r=n[e+72+(f&255)>>0]|0}else{f=i[A+1>>0]|0;r=d$(s,f)|0}switch(r|0){case 29:{o=f&255;if(!(1<<(o&31)&t[56940+((o>>>5|n[143788+(s&255)>>0]<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((l|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((l|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}default:{t[a>>2]=A;r=0;break e}}o=e+72|0;c=A;A:while(1){r=c+2|0;f=b-r|0;if((f|0)<=1){r=-1;break e}l=i[r>>0]|0;s=i[c+3>>0]|0;if(!(l<<24>>24))e=n[o+(s&255)>>0]|0;else e=d$(l,s)|0;switch(e|0){case 27:case 26:case 25:case 24:case 22:{c=r;continue A}case 5:{u=22;break A}case 6:{u=23;break A}case 7:{u=25;break A}case 10:case 9:case 21:{u=27;break A}case 15:{u=46;break A}case 29:break;default:break A}c=s&255;if(!(1<<(c&31)&t[56940+((c>>>5|n[144044+(l&255)>>0]<<3)<<2)>>2])){u=21;break}else c=r}if((u|0)==21){t[a>>2]=r;r=0;break}else if((u|0)==22){t[a>>2]=r;r=0;break}else if((u|0)==23){if((f|0)<3){r=-2;break}t[a>>2]=r;r=0;break}else if((u|0)==25){if((f|0)<4){r=-2;break}t[a>>2]=r;r=0;break}else if((u|0)==27){if(!(c0(A,r,w)|0)){t[a>>2]=r;r=0;break}s=c+4|0;A:while(1){l=b-s|0;if((l|0)<=1){r=-1;break e}r=i[s>>0]|0;f=i[s+1>>0]|0;if(!(r<<24>>24))r=n[o+(f&255)>>0]|0;else r=d$(r,f)|0;switch(r|0){case 8:case 1:case 0:{u=40;break A}case 5:{s=s+2|0;continue A}case 6:{if((l|0)<3){r=-2;break e}s=s+3|0;continue A}case 7:{if((l|0)<4){r=-2;break e}s=s+4|0;continue A}case 15:{r=s+2|0;if((b-r|0)<=1){r=-1;break e}if(i[r>>0]|0){s=r;continue A}if((i[s+3>>0]|0)==62){u=44;break A}else{s=r;continue A}}default:{s=s+2|0;continue A}}}if((u|0)==40){t[a>>2]=s;r=0;break}else if((u|0)==44){t[a>>2]=s+4;r=t[w>>2]|0;break}}else if((u|0)==46){if(!(c0(A,r,w)|0)){t[a>>2]=r;r=0;break}r=c+4|0;if((b-r|0)<=1){r=-1;break}if((i[r>>0]|0)==0?(i[c+5>>0]|0)==62:0){t[a>>2]=c+6;r=t[w>>2]|0;break}}t[a>>2]=r;r=0}else r=-1}while(0);h=k;return r|0}function l0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;s=r-A|0;e:do{if((s|0)>1){c=i[A>>0]|0;if(!(c<<24>>24)){l=i[A+1>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A+1>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{o=l&255;if(!(1<<(o&31)&t[56940+((o>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}default:{t[a>>2]=A;r=0;break e}}o=e+72|0;e=A;A:while(1){s=e+2|0;A=r-s|0;if((A|0)<=1){r=-1;break e}f=i[s>>0]|0;l=i[e+3>>0]|0;if(!(f<<24>>24))c=n[o+(l&255)>>0]|0;else c=d$(f,l)|0;switch(c|0){case 23:case 27:case 26:case 25:case 24:case 22:{e=s;continue A}case 5:{f=22;break A}case 6:{f=23;break A}case 7:{f=25;break A}case 10:case 9:case 21:{f=27;break A}case 11:{f=34;break A}case 29:break;default:{f=35;break A}}A=l&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(f&255)>>0]|0)<<3)<<2)>>2])){f=21;break}else e=s}if((f|0)==21){t[a>>2]=s;r=0;break}else if((f|0)==22){t[a>>2]=s;r=0;break}else if((f|0)==23){if((A|0)<3){r=-2;break}t[a>>2]=s;r=0;break}else if((f|0)==25){if((A|0)<4){r=-2;break}t[a>>2]=s;r=0;break}else if((f|0)==27){A:while(1){c=s+2|0;if((r-c|0)<=1){r=-1;break e}f=i[c>>0]|0;l=i[s+3>>0]|0;if(!(f<<24>>24))f=n[o+(l&255)>>0]|0;else f=d$(f,l)|0;switch(f|0){case 10:case 9:case 21:{s=c;f=27;break}case 11:{f=32;break A}default:{f=33;break A}}}if((f|0)==32){t[a>>2]=s+4;r=5;break}else if((f|0)==33){t[a>>2]=c;r=0;break}}else if((f|0)==34){t[a>>2]=e+4;r=5;break}else if((f|0)==35){t[a>>2]=s;r=0;break}}else r=-1}while(0);return r|0}function s0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+16|0;k=v;t[k>>2]=A;d=r;b=e+72|0;f=0;e:while(1){A:while(1){o=d-A|0;if((o|0)<=1){A=-1;break e}l=i[A>>0]|0;s=i[A+1>>0]|0;if(!(l<<24>>24))c=n[b+(s&255)>>0]|0;else c=d$(l,s)|0;switch(c|0){case 5:{w=11;break e}case 6:{w=12;break e}case 7:{w=14;break e}case 23:{w=16;break A}case 10:case 9:case 21:{w=31;break A}case 14:{w=37;break A}case 29:{u=s&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[144044+(l&255)>>0]<<3)<<2)>>2])){w=9;break e}break}case 27:case 26:case 25:case 24:case 22:break;default:{w=89;break e}}u=A+2|0;t[k>>2]=u;A=u}A:do{if((w|0)==16){w=0;if(f|0){w=17;break e}f=A+2|0;t[k>>2]=f;l=f;s=d-l|0;if((s|0)<=1){A=-1;break e}c=i[f>>0]|0;o=i[A+3>>0]|0;if(!(c<<24>>24))u=n[b+(o&255)>>0]|0;else u=d$(c,o)|0;switch(u|0){case 5:{w=25;break e}case 6:{w=26;break e}case 7:{w=28;break e}case 24:case 22:{f=1;break A}case 29:break;default:{w=30;break e}}u=o&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){w=24;break e}else f=1}else if((w|0)==31)while(1){w=0;l=A+2|0;t[k>>2]=l;s=l;if((d-s|0)<=1){A=-1;break e}f=i[l>>0]|0;A=i[A+3>>0]|0;if(!(f<<24>>24))A=n[b+(A&255)>>0]|0;else A=d$(f,A)|0;switch(A|0){case 14:{A=l;w=37;break A}case 9:case 10:case 21:{A=l;w=31;break}default:{w=36;break e}}}}while(0);A:do{if((w|0)==37){while(1){w=0;s=A+2|0;t[k>>2]=s;c=s;if((d-c|0)<=1){A=-1;break e}f=i[s>>0]|0;l=i[A+3>>0]|0;if(!(f<<24>>24))o=n[b+(l&255)>>0]|0;else o=d$(f,l)|0;if((o|1|0)==13)break;switch(o|0){case 9:case 10:case 21:{A=s;w=37;break}default:{w=43;break e}}}A=A+4|0;t[k>>2]=A;r:while(1){s=d-A|0;if((s|0)<=1){A=-1;break e}f=i[A>>0]|0;l=i[A+1>>0]|0;if(!(f<<24>>24))f=n[b+(l&255)>>0]|0;else f=d$(f,l)|0;if((f|0)==(o|0))break;switch(f|0){case 8:case 1:case 0:{w=56;break e}case 2:{w=61;break e}case 5:{u=A+2|0;t[k>>2]=u;A=u;continue r}case 6:{if((s|0)<3){A=-2;break e}u=A+3|0;t[k>>2]=u;A=u;continue r}case 7:{if((s|0)<4){A=-2;break e}u=A+4|0;t[k>>2]=u;A=u;continue r}case 3:{A=e0(e,A+2|0,r,k)|0;if((A|0)<1){w=59;break e}A=t[k>>2]|0;continue r}default:{u=A+2|0;t[k>>2]=u;A=u;continue r}}}l=A+2|0;t[k>>2]=l;c=l;if((d-c|0)<=1){A=-1;break e}f=i[l>>0]|0;s=i[A+3>>0]|0;if(!(f<<24>>24))f=n[b+(s&255)>>0]|0;else f=d$(f,s)|0;switch(f|0){case 11:{w=81;break e}case 17:{w=82;break e}case 10:case 9:case 21:{A=l;break}default:{w=68;break e}}r:while(1){l=A+2|0;t[k>>2]=l;f=l;s=d-f|0;if((s|0)<=1){A=-1;break e}c=i[l>>0]|0;o=i[A+3>>0]|0;if(!(c<<24>>24))u=n[b+(o&255)>>0]|0;else u=d$(c,o)|0;switch(u|0){case 5:{w=76;break e}case 6:{w=77;break e}case 7:{w=79;break e}case 11:{w=81;break e}case 17:{w=82;break e}case 24:case 22:{f=0;break A}case 10:case 9:case 21:{A=l;break}case 29:break r;default:{w=87;break e}}}u=o&255;if(!(1<<(u&31)&t[56940+((u>>>5|n[143788+(c&255)>>0]<<3)<<2)>>2])){w=75;break e}else f=0}}while(0);A=A+4|0;t[k>>2]=A}switch(w|0){case 9:{t[a>>2]=A;A=0;break}case 11:{t[a>>2]=A;A=0;break}case 12:{if((o|0)<3)A=-2;else{t[a>>2]=A;A=0}break}case 14:{if((o|0)<4)A=-2;else{t[a>>2]=A;A=0}break}case 17:{t[a>>2]=A;A=0;break}case 24:{t[a>>2]=f;A=0;break}case 25:{t[a>>2]=f;A=0;break}case 26:{if((s|0)<3)A=-2;else{t[a>>2]=f;A=0}break}case 28:{if((s|0)<4)A=-2;else{t[a>>2]=f;A=0}break}case 30:{t[a>>2]=l;A=0;break}case 36:{t[a>>2]=s;A=0;break}case 43:{t[a>>2]=c;A=0;break}case 56:{t[a>>2]=A;A=0;break}case 59:{if(!A){t[a>>2]=t[k>>2];A=0}break}case 61:{t[a>>2]=A;A=0;break}case 68:{t[a>>2]=c;A=0;break}case 75:{t[a>>2]=l;A=0;break}case 76:{t[a>>2]=l;A=0;break}case 77:{if((s|0)<3)A=-2;else{t[a>>2]=l;A=0}break}case 79:{if((s|0)<4)A=-2;else{t[a>>2]=l;A=0}break}case 81:{t[a>>2]=A+4;A=1;break}case 82:{f=l+2|0;t[k>>2]=f;A=f;if((d-A|0)>1){if((i[f>>0]|0)==0?(i[l+3>>0]|0)==62:0){t[a>>2]=l+4;A=3;break}t[a>>2]=A;A=0}else A=-1;break}case 87:{t[a>>2]=f;A=0;break}case 89:{t[a>>2]=A;A=0;break}}h=v;return A|0}function c0(e,A,r){e=e|0;A=A|0;r=r|0;t[r>>2]=11;e:do{if((A-e|0)==6?(i[e>>0]|0)==0:0){switch(i[e+1>>0]|0){case 120:{A=0;break}case 88:{A=1;break}default:{A=1;break e}}if(!(i[e+2>>0]|0)){switch(i[e+3>>0]|0){case 109:break;case 77:{A=1;break}default:{A=1;break e}}if(!(i[e+4>>0]|0)){switch(i[e+5>>0]|0){case 108:break;case 76:{A=0;break e}default:{A=1;break e}}if(!A){t[r>>2]=12;A=1}else A=0}else A=1}else A=1}else A=1}while(0);return A|0}function o0(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0;c=A+72|0;e:while(1){A:while(1){s=a-r|0;if((s|0)<=1){r=-1;break e}A=i[r>>0]|0;l=i[r+1>>0]|0;if(!(A<<24>>24))l=n[c+(l&255)>>0]|0;else l=d$(A,l)|0;switch(l|0){case 8:case 1:case 0:{o=10;break e}case 6:{o=9;break A}case 7:{o=19;break A}case 5:{r=r+2|0;continue A}case 13:case 12:{A=r+2|0;if((l|0)==(e|0)){o=12;break e}else{r=A;continue A}}default:{r=r+2|0;continue A}}}if((o|0)==9){o=0;if((s|0)<3){r=-2;break}else{r=r+3|0;continue}}else if((o|0)==19){o=0;if((s|0)<4){r=-2;break}else{r=r+4|0;continue}}}e:do{if((o|0)==10){t[f>>2]=r;r=0}else if((o|0)==12)if((a-A|0)>1){t[f>>2]=A;a=i[A>>0]|0;r=i[r+3>>0]|0;if(!(a<<24>>24))r=n[c+(r&255)>>0]|0;else r=d$(a,r)|0;switch(r|0){case 20:case 30:case 11:case 10:case 9:case 21:{r=27;break e}default:{}}r=0}else r=-27}while(0);return r|0}function u0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0,o=0;c=r;e:do{if((c-A|0)>1){f=i[A>>0]|0;if(!(f<<24>>24))f=n[e+72+(n[A+1>>0]|0)>>0]|0;else f=d$(f,i[A+1>>0]|0)|0;switch(f|0){case 27:{f=t0(e,A+2|0,r,a)|0;break e}case 20:{t[a>>2]=A+2;f=33;break e}case 24:case 22:{s=e+72|0;A:while(1){l=A+2|0;r=c-l|0;if((r|0)<=1){f=-1;break e}f=i[l>>0]|0;e=i[A+3>>0]|0;if(!(f<<24>>24))f=n[s+(e&255)>>0]|0;else f=d$(f,e)|0;switch(f|0){case 24:case 22:{A=l;break}case 30:{o=15;break A}case 10:case 9:case 21:break A;default:{o=22;break A}}}if((o|0)==22){t[a>>2]=l;f=0;break e}A:do{if((o|0)==15){if((r|0)<=3){f=-1;break e}e=i[A+4>>0]|0;f=i[A+5>>0]|0;if(!(e<<24>>24))f=n[s+(f&255)>>0]|0;else f=d$(e,f)|0;switch(f|0){case 30:case 10:case 9:case 21:break;default:break A}t[a>>2]=l;f=0;break e}}while(0);t[a>>2]=l;f=16;break e}default:{t[a>>2]=A;f=0;break e}}}else f=-1}while(0);return f|0}function b0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var f=0,l=0,s=0,c=0;s=r-A|0;e:do{if((s|0)>1){c=i[A>>0]|0;if(!(c<<24>>24)){l=i[A+1>>0]|0;f=n[e+72+(l&255)>>0]|0}else{l=i[A+1>>0]|0;f=d$(c,l)|0}switch(f|0){case 29:{s=l&255;if(!(1<<(s&31)&t[56940+((s>>>5|(n[143788+(c&255)>>0]|0)<<3)<<2)>>2])){t[a>>2]=A;r=0;break e}break}case 24:case 22:break;case 5:{t[a>>2]=A;r=0;break e}case 6:{if((s|0)<3){r=-2;break e}t[a>>2]=A;r=0;break e}case 7:{if((s|0)<4){r=-2;break e}t[a>>2]=A;r=0;break e}default:{t[a>>2]=A;r=0;break e}}e=e+72|0;c=A;A:while(1){f=c;c=c+2|0;A=r-c|0;if((A|0)<=1){r=-20;break e}s=i[c>>0]|0;f=i[f+3>>0]|0;if(!(s<<24>>24))l=n[e+(f&255)>>0]|0;else l=d$(s,f)|0;switch(l|0){case 27:case 26:case 25:case 24:case 22:continue A;case 5:{f=22;break A}case 6:{f=23;break A}case 7:{f=25;break A}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{f=27;break A}case 29:break;default:{f=28;break A}}A=f&255;if(!(1<<(A&31)&t[56940+((A>>>5|(n[144044+(s&255)>>0]|0)<<3)<<2)>>2])){f=21;break}}if((f|0)==21){t[a>>2]=c;r=0;break}else if((f|0)==22){t[a>>2]=c;r=0;break}else if((f|0)==23){if((A|0)<3){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==25){if((A|0)<4){r=-2;break}t[a>>2]=c;r=0;break}else if((f|0)==27){t[a>>2]=c;r=20;break}else if((f|0)==28){t[a>>2]=c;r=0;break}}else r=-1}while(0);return r|0}function h0(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0,l=0;while(1){e=t[A>>2]|0;f=e>>>0>>0;l=t[a>>2]|0;if(!(f&l>>>0>>0))break;t[A>>2]=e+1;f=i[e>>0]|0;l=t[a>>2]|0;t[a>>2]=l+1;i[l>>0]=f}return((l|0)!=(n|0)|f^1?0:2)|0}function w0(e,A){e=e|0;A=A|0;var r=0,a=0,t=0,n=0;e:while(1){t=i[e>>0]|0;n=i[A>>0]|0;t=(t+-97&255)<26?(t&255)+224&255:t;switch((t<<24>>24==((n+-97&255)<26?(n&255)+224&255:n)<<24>>24?t<<24>>24==0?2:0:1)&3){case 0:{A=A+1|0;e=e+1|0;break}case 1:{a=3;break e}case 2:{r=1;break e}default:{a=5;break e}}}if((a|0)==3)r=0;return r|0}function k0(e,A,r,i,a,t,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;s=s|0;return v0(39,e,A,r,i,a,t,n,f,l,s)|0}function d0(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;f=h;h=h+144|0;l=f+4|0;a=f+8|0;n=f;t[l>>2]=A;t[n>>2]=a;D5[t[e+56>>2]&127](e,l,r,n,a+127|0)|0;do{if((t[l>>2]|0)==(r|0)){i[t[n>>2]>>0]=0;if(w0(a,144315)|0?(t[e+64>>2]|0)==2:0)break;e=W$(a)|0;if((e|0)!=-1)e=t[58948+(e<<2)>>2]|0;else e=0}else e=0}while(0);h=f;return e|0}function v0(e,A,r,i,a,n,f,l,s,c,o){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;c=c|0;o=o|0;var u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+16|0;g=p+8|0;k=p+12|0;b=p+4|0;w=p;t[k>>2]=0;t[b>>2]=0;t[w>>2]=0;m=r+64|0;v=t[m>>2]|0;d=i+(v*5|0)|0;t[g>>2]=d;v=a+(0-(v<<1))|0;d=(g0(r,d,v,b,w,k,g)|0)!=0;u=t[b>>2]|0;i=u;e:do{if(d&(u|0)!=0){d=r+24|0;a=t[w>>2]|0;do{if(!(Q5[t[d>>2]&127](r,u,a,144340)|0)){if(!A){t[n>>2]=i;i=0;break e}}else{if(f|0)t[f>>2]=t[k>>2];if(!l)i=t[g>>2]|0;else{i=t[g>>2]|0;t[l>>2]=i}if(!(g0(r,i,v,b,w,k,g)|0)){t[n>>2]=t[g>>2];i=0;break e}a=t[b>>2]|0;if(a|0){i=a;u=a;a=t[w>>2]|0;break}if(!A){i=1;break e}t[n>>2]=t[g>>2];i=0;break e}}while(0);if(Q5[t[d>>2]&127](r,u,a,144348)|0){a=t[k>>2]|0;i=a;if((((m0(r,a,v)|0)&-33)+-65|0)>>>0>=26){t[n>>2]=i;i=0;break}if(s|0)t[s>>2]=i;i=t[g>>2]|0;if(c|0)t[c>>2]=L5[e&63](r,a,i+(0-(t[m>>2]|0))|0)|0;if(!(g0(r,i,v,b,w,k,g)|0)){t[n>>2]=t[g>>2];i=0;break}i=t[b>>2]|0;if(!i){i=1;break}u=i;a=t[w>>2]|0}if((A|0)!=0|(Q5[t[d>>2]&127](r,u,a,144357)|0)==0){t[n>>2]=i;i=0;break}a=t[k>>2]|0;i=t[g>>2]|0;u=a;if(!(Q5[t[d>>2]&127](r,a,i+(0-(t[m>>2]|0))|0,107657)|0)){if(!(Q5[t[d>>2]&127](r,a,i+(0-(t[m>>2]|0))|0,107649)|0)){t[n>>2]=u;i=0;break}if(o)t[o>>2]=0}else if(o)t[o>>2]=1;while(1){if(!(p0(m0(r,i,v)|0)|0))break;i=i+(t[m>>2]|0)|0}t[g>>2]=i;if((i|0)==(v|0))i=1;else{t[n>>2]=i;i=0}}else{t[n>>2]=t[g>>2];i=0}}while(0);h=p;return i|0}function g0(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0;e:do{if((A|0)!=(r|0)){if(!(p0(m0(e,A,r)|0)|0)){t[f>>2]=A;A=0;break}s=e+64|0;do{A=A+(t[s>>2]|0)|0}while((p0(m0(e,A,r)|0)|0)!=0);if((A|0)==(r|0)){t[i>>2]=0;A=1;break}t[i>>2]=A;A:while(1){l=m0(e,A,r)|0;switch(l|0){case-1:{l=11;break A}case 61:{l=12;break A}default:{}}if(p0(l)|0){l=14;break}A=A+(t[s>>2]|0)|0}if((l|0)==11){t[f>>2]=A;A=0;break}else if((l|0)==12)t[a>>2]=A;else if((l|0)==14){t[a>>2]=A;do{A=A+(t[s>>2]|0)|0;l=m0(e,A,r)|0}while((p0(l)|0)!=0);if((l|0)!=61){t[f>>2]=A;A=0;break}}if((A|0)==(t[i>>2]|0)){t[f>>2]=A;A=0;break}do{A=A+(t[s>>2]|0)|0;l=m0(e,A,r)|0}while((p0(l)|0)!=0);switch(l|0){case 34:case 39:break;default:{t[f>>2]=A;A=0;break e}}a=A+(t[s>>2]|0)|0;t[n>>2]=a;A=l<<24>>24;A:while(1){l=m0(e,a,r)|0;if((l|0)==(A|0)){l=30;break}if((l+-48|0)>>>0>9&((l&-33)+-65|0)>>>0>25)switch(l|0){case 45:case 46:case 95:break;default:{l=28;break A}}a=a+(t[s>>2]|0)|0}if((l|0)==28){t[f>>2]=a;A=0;break}else if((l|0)==30){t[f>>2]=a+(t[s>>2]|0);A=1;break}}else{t[i>>2]=0;A=1}}while(0);return A|0}function m0(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;f=h;h=h+16|0;l=f+4|0;a=f+8|0;n=f;t[l>>2]=A;t[n>>2]=a;D5[t[e+56>>2]&127](e,l,r,n,a+1|0)|0;h=f;return((t[n>>2]|0)==(a|0)?-1:i[a>>0]|0)|0}function p0(e){e=e|0;switch(e|0){case 9:case 10:case 13:case 32:{e=1;break}default:e=0}return e|0}function E0(){return 60092}function B0(e,A,r){e=e|0;A=A|0;r=r|0;r=W$(r)|0;if((r|0)==-1)r=0;else{i[e+69>>0]=r;t[e>>2]=69;t[e+4>>2]=70;t[e+48>>2]=31;t[e+72>>2]=A;t[A>>2]=e;r=1}return r|0}function y0(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return V$(60456,e,0,A,r,i)|0}function C0(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return V$(60456,e,1,A,r,i)|0}function I0(e,A,r,i,a,t,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;s=s|0;return v0(40,e,A,r,i,a,t,n,f,l,s)|0}function Z0(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;f=h;h=h+144|0;l=f+4|0;a=f+8|0;n=f;t[l>>2]=A;t[n>>2]=a;D5[t[e+56>>2]&127](e,l,r,n,a+127|0)|0;do{if((t[l>>2]|0)==(r|0)){i[t[n>>2]>>0]=0;if(w0(a,144315)|0?(t[e+64>>2]|0)==2:0)break;e=W$(a)|0;if((e|0)!=-1)e=t[60456+(e<<2)>>2]|0;else e=0}else e=0}while(0);h=f;return e|0}function G0(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;e=mo(e,A,r,a)|0;if(e|0)i[e+72+58>>0]=23;return e|0}function L0(e){e=e|0;t[e>>2]=15;t[e+16>>2]=1;t[e+12>>2]=0;t[e+20>>2]=0;return}function Q0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;switch(A|0){case 15:{t[e>>2]=16;e=0;break}case 12:{t[e>>2]=16;e=1;break}case 11:{t[e>>2]=16;e=55;break}case 13:{t[e>>2]=16;e=56;break}case 14:{e=0;break}case 16:{if(!(Q5[t[a+24>>2]&127](a,r+(t[a+64>>2]<<1)|0,i,144368)|0))n=9;else{t[e>>2]=17;e=3}break}case 29:{t[e>>2]=18;e=2;break}default:n=9}if((n|0)==9)e=Y0(e,A)|0;return e|0}function D0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;switch(A|0){case 14:case 15:{e=0;break}case 11:{e=55;break}case 13:{e=56;break}case 16:{if(!(Q5[t[a+24>>2]&127](a,r+(t[a+64>>2]<<1)|0,i,144368)|0))n=7;else{t[e>>2]=17;e=3}break}case 29:{t[e>>2]=18;e=2;break}default:n=7}if((n|0)==7)e=Y0(e,A)|0;return e|0}function z0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=3;break}case 41:case 18:{t[e>>2]=19;e=4;break}default:e=Y0(e,A)|0}return e|0}function W0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;return 0}function Y0(e,A){e=e|0;A=A|0;if((A|0)==28&(t[e+16>>2]|0)==0)e=59;else{t[e>>2]=18;e=-1}return e|0}function F0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;e:do{switch(A|0){case 15:{e=3;break}case 25:{t[e>>2]=20;e=7;break}case 17:{t[e>>2]=21;e=8;break}case 18:{n=a+24|0;if(Q5[t[n>>2]&127](a,r,i,144376)|0){t[e>>2]=22;e=3;break e}if(!(Q5[t[n>>2]&127](a,r,i,144383)|0))f=8;else{t[e>>2]=23;e=3}break}default:f=8}}while(0);if((f|0)==8)e=Y0(e,A)|0;return e|0}function M0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;e:do{switch(A|0){case-4:case 15:{e=0;break}case 16:{n=a+24|0;f=a+64|0;if(Q5[t[n>>2]&127](a,r+(t[f>>2]<<1)|0,i,144390)|0){t[e>>2]=24;e=11;break e}if(Q5[t[n>>2]&127](a,r+(t[f>>2]<<1)|0,i,144397)|0){t[e>>2]=25;e=33;break e}if(Q5[t[n>>2]&127](a,r+(t[f>>2]<<1)|0,i,144405)|0){t[e>>2]=26;e=39;break e}if(!(Q5[t[n>>2]&127](a,r+(t[f>>2]<<1)|0,i,144413)|0))l=14;else{t[e>>2]=27;e=17}break}case 11:{e=55;break}case 13:{e=56;break}case 28:{e=60;break}case 26:{t[e>>2]=28;e=3;break}default:l=14}}while(0);if((l|0)==14)e=Y0(e,A)|0;return e|0}function V0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;a=A+-11|0;switch(a>>>1|a<<31|0){case 2:{e=0;break}case 0:{e=55;break}case 1:{e=56;break}case 9:{t[e>>2]=18;e=2;break}default:e=Y0(e,A)|0}return e|0}function N0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=3;break}case 27:{t[e>>2]=29;e=5;break}default:e=Y0(e,A)|0}return e|0}function R0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=3;break}case 27:{t[e>>2]=22;e=6;break}default:e=Y0(e,A)|0}return e|0}function x0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=3;break}case 25:{t[e>>2]=20;e=7;break}case 17:{t[e>>2]=21;e=8;break}default:e=Y0(e,A)|0}return e|0}function J0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 22:{t[e>>2]=30;e=11;break}case 18:{t[e>>2]=31;e=9;break}default:e=Y0(e,A)|0}return e|0}function H0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 41:case 18:{t[e>>2]=32;e=34;break}default:e=Y0(e,A)|0}return e|0}function P0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=39;break}case 41:case 18:{t[e>>2]=33;e=40;break}default:e=Y0(e,A)|0}return e|0}function X0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=17;break}case 18:{t[e>>2]=34;e=18;break}default:e=Y0(e,A)|0}return e|0}function S0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=3;break}case 17:{t[e>>2]=21;e=8;break}default:e=Y0(e,A)|0}return e|0}function j0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;e:do{switch(A|0){case 15:{e=17;break}case 18:{n=a+24|0;if(Q5[t[n>>2]&127](a,r,i,144376)|0){t[e>>2]=35;e=17;break e}if(!(Q5[t[n>>2]&127](a,r,i,144383)|0))f=6;else{t[e>>2]=36;e=17}break}default:f=6}}while(0);if((f|0)==6)e=Y0(e,A)|0;return e|0}function U0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=17;break}case 27:{t[e>>2]=37;t[e+8>>2]=17;e=19;break}default:e=Y0(e,A)|0}return e|0}function T0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=17;break}case 27:{t[e>>2]=38;e=21;break}default:e=Y0(e,A)|0}return e|0}function O0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=17;break}case 27:{t[e>>2]=37;t[e+8>>2]=17;e=19;break}case 17:{t[e>>2]=t[e+16>>2]|0?20:39;e=20;break}default:e=Y0(e,A)|0}return e|0}function _0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=t[e+8>>2]|0;break}case 17:{t[e>>2]=t[e+16>>2]|0?20:39;e=t[e+8>>2]|0;break}default:e=Y0(e,A)|0}return e|0}function q0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;switch(A|0){case 33:{t[e>>2]=40;r=0;break}case 34:{r=e+12|0;i=t[r>>2]|0;if(!i)n=7;else{t[r>>2]=i+-1;r=0}break}case 15:{r=0;break}case 26:{n=7;break}case-4:{if(!(t[e+12>>2]|0))r=0;else n=7;break}default:r=M0(e,A,r,i,a)|0}if((n|0)==7)r=Y0(e,A)|0;return r|0}function K0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;e:do{switch(A|0){case 15:{e=0;break}case 18:{n=a+24|0;if(Q5[t[n>>2]&127](a,r,i,144422)|0){t[e>>2]=41;e=0;break e}if(!(Q5[t[n>>2]&127](a,r,i,144430)|0))f=6;else{t[e>>2]=42;e=0}break}default:f=6}}while(0);if((f|0)==6)e=Y0(e,A)|0;return e|0}function $0(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=0;break}case 25:{t[e>>2]=39;e=e+12|0;t[e>>2]=(t[e>>2]|0)+1;e=0;break}default:e=Y0(e,A)|0}return e|0}function e2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=0;break}case 25:{t[e>>2]=39;e=58;break}default:e=Y0(e,A)|0}return e|0}function A2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;e:do{switch(A|0){case 15:{e=39;break}case 18:{n=a+24|0;if(Q5[t[n>>2]&127](a,r,i,144437)|0){t[e>>2]=37;t[e+8>>2]=39;e=42;break e}if(!(Q5[t[n>>2]&127](a,r,i,144443)|0))f=7;else{t[e>>2]=37;t[e+8>>2]=39;e=41}break}case 23:{t[e>>2]=43;t[e+4>>2]=1;e=44;break}default:f=7}}while(0);if((f|0)==7)e=Y0(e,A)|0;return e|0}function r2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;switch(A|0){case 15:{e=39;break}case 20:{if(!(Q5[t[a+24>>2]&127](a,r+(t[a+64>>2]|0)|0,i,144447)|0))n=9;else{t[e>>2]=44;e=43}break}case 23:{t[e+4>>2]=2;t[e>>2]=45;e=44;break}case 41:case 18:{t[e>>2]=46;e=51;break}case 30:{t[e>>2]=46;e=53;break}case 31:{t[e>>2]=46;e=52;break}case 32:{t[e>>2]=46;e=54;break}default:n=9}if((n|0)==9)e=Y0(e,A)|0;return e|0}function i2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=39;break}case 24:{t[e>>2]=37;t[e+8>>2]=39;e=45;break}case 36:{t[e>>2]=37;t[e+8>>2]=39;e=46;break}case 21:{t[e>>2]=47;e=39;break}default:e=Y0(e,A)|0}return e|0}function a2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=39;break}case 23:{e=e+4|0;t[e>>2]=(t[e>>2]|0)+1;e=44;break}case 41:case 18:{t[e>>2]=46;e=51;break}case 30:{t[e>>2]=46;e=53;break}case 31:{t[e>>2]=46;e=52;break}case 32:{t[e>>2]=46;e=54;break}default:e=Y0(e,A)|0}return e|0}function t2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=39;break}case 24:{i=e+4|0;a=(t[i>>2]|0)+-1|0;t[i>>2]=a;if(!a){t[e>>2]=37;t[e+8>>2]=39;e=45}else e=45;break}case 36:{i=e+4|0;a=(t[i>>2]|0)+-1|0;t[i>>2]=a;if(!a){t[e>>2]=37;t[e+8>>2]=39;e=46}else e=46;break}case 35:{i=e+4|0;a=(t[i>>2]|0)+-1|0;t[i>>2]=a;if(!a){t[e>>2]=37;t[e+8>>2]=39;e=47}else e=47;break}case 37:{i=e+4|0;a=(t[i>>2]|0)+-1|0;t[i>>2]=a;if(!a){t[e>>2]=37;t[e+8>>2]=39;e=48}else e=48;break}case 38:{t[e>>2]=45;e=50;break}case 21:{t[e>>2]=45;e=49;break}default:e=Y0(e,A)|0}return e|0}function n2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=39;break}case 41:case 18:{t[e>>2]=48;e=51;break}default:e=Y0(e,A)|0}return e|0}function f2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=39;break}case 36:{t[e>>2]=37;t[e+8>>2]=39;e=46;break}case 21:{t[e>>2]=47;e=39;break}default:e=Y0(e,A)|0}return e|0}function l2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 17:{t[e>>2]=t[e+16>>2]|0?20:39;e=33;break}case 41:case 18:{t[e>>2]=49;e=22;break}default:e=Y0(e,A)|0}return e|0}function s2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;e:do{switch(A|0){case 15:{n=33;break}case 18:{f=a+24|0;n=0;while(1){l=t[f>>2]|0;if((n|0)>=8)break;if(Q5[l&127](a,r,i,t[62304+(n<<2)>>2]|0)|0){s=6;break}n=n+1|0}if((s|0)==6){t[e>>2]=50;n=n+23|0;break e}if(!(Q5[l&127](a,r,i,144413)|0))s=10;else{t[e>>2]=51;n=33}break}case 23:{t[e>>2]=52;n=33;break}default:s=10}}while(0);if((s|0)==10)n=Y0(e,A)|0;return n|0}function c2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0;e:do{switch(A|0){case 15:{e=33;break}case 20:{n=a+24|0;f=a+64|0;if(Q5[t[n>>2]&127](a,r+(t[f>>2]|0)|0,i,144454)|0){t[e>>2]=32;e=35;break e}if(Q5[t[n>>2]&127](a,r+(t[f>>2]|0)|0,i,144462)|0){t[e>>2]=32;e=36;break e}if(!(Q5[t[n>>2]&127](a,r+(t[f>>2]|0)|0,i,144471)|0))l=9;else{t[e>>2]=53;e=33}break}case 27:{t[e>>2]=32;e=37;break}default:l=9}}while(0);if((l|0)==9)e=Y0(e,A)|0;return e|0}function o2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 23:{t[e>>2]=54;e=33;break}default:e=Y0(e,A)|0}return e|0}function u2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 41:case 18:case 19:{t[e>>2]=55;e=31;break}default:e=Y0(e,A)|0}return e|0}function b2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 24:{t[e>>2]=50;e=33;break}case 21:{t[e>>2]=52;e=33;break}default:e=Y0(e,A)|0}return e|0}function h2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 18:{t[e>>2]=56;e=32;break}default:e=Y0(e,A)|0}return e|0}function w2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 24:{t[e>>2]=50;e=33;break}case 21:{t[e>>2]=54;e=33;break}default:e=Y0(e,A)|0}return e|0}function k2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=33;break}case 27:{t[e>>2]=32;e=38;break}default:e=Y0(e,A)|0}return e|0}function d2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 18:{t[e>>2]=57;e=10;break}default:e=Y0(e,A)|0}return e|0}function v2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;e:do{switch(A|0){case 15:{e=11;break}case 18:{n=a+24|0;if(Q5[t[n>>2]&127](a,r,i,144376)|0){t[e>>2]=58;e=11;break e}if(!(Q5[t[n>>2]&127](a,r,i,144383)|0))f=7;else{t[e>>2]=59;e=11}break}case 27:{t[e>>2]=37;t[e+8>>2]=11;e=12;break}default:f=7}}while(0);if((f|0)==7)e=Y0(e,A)|0;return e|0}function g2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 27:{t[e>>2]=60;e=13;break}default:e=Y0(e,A)|0}return e|0}function m2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 27:{t[e>>2]=58;e=14;break}default:e=Y0(e,A)|0}return e|0}function p2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0;switch(A|0){case 15:{e=11;break}case 17:{t[e>>2]=t[e+16>>2]|0?20:39;e=15;break}case 18:{if(!(Q5[t[a+24>>2]&127](a,r,i,144525)|0))n=5;else{t[e>>2]=61;e=11}break}default:n=5}if((n|0)==5)e=Y0(e,A)|0;return e|0}function E2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 18:{t[e>>2]=37;t[e+8>>2]=11;e=16;break}default:e=Y0(e,A)|0}return e|0}function B2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0;e:do{switch(A|0){case 15:{e=11;break}case 18:{n=a+24|0;if(Q5[t[n>>2]&127](a,r,i,144376)|0){t[e>>2]=62;e=11;break e}if(!(Q5[t[n>>2]&127](a,r,i,144383)|0))f=7;else{t[e>>2]=63;e=11}break}case 27:{t[e>>2]=37;t[e+8>>2]=11;e=12;break}default:f=7}}while(0);if((f|0)==7)e=Y0(e,A)|0;return e|0}function y2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 27:{t[e>>2]=64;e=13;break}default:e=Y0(e,A)|0}return e|0}function C2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 27:{t[e>>2]=62;e=14;break}default:e=Y0(e,A)|0}return e|0}function I2(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;switch(A|0){case 15:{e=11;break}case 17:{t[e>>2]=t[e+16>>2]|0?20:39;e=15;break}default:e=Y0(e,A)|0}return e|0}function Z2(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0;B=h;h=h+16|0;w=B;do{if(e>>>0<245){o=e>>>0<11?16:e+11&-8;e=o>>>3;b=t[47519]|0;r=b>>>e;if(r&3|0){A=(r&1^1)+e|0;e=190116+(A<<1<<2)|0;r=e+8|0;i=t[r>>2]|0;a=i+8|0;n=t[a>>2]|0;if((n|0)==(e|0))t[47519]=b&~(1<>2]=e;t[r>>2]=n}E=A<<3;t[i+4>>2]=E|3;E=i+E+4|0;t[E>>2]=t[E>>2]|1;E=a;h=B;return E|0}u=t[47521]|0;if(o>>>0>u>>>0){if(r|0){A=2<>>12&16;A=A>>>l;r=A>>>5&8;A=A>>>r;n=A>>>2&4;A=A>>>n;e=A>>>1&2;A=A>>>e;i=A>>>1&1;i=(r|l|n|e|i)+(A>>>i)|0;A=190116+(i<<1<<2)|0;e=A+8|0;n=t[e>>2]|0;l=n+8|0;r=t[l>>2]|0;if((r|0)==(A|0)){e=b&~(1<>2]=A;t[e>>2]=r;e=b}E=i<<3;f=E-o|0;t[n+4>>2]=o|3;a=n+o|0;t[a+4>>2]=f|1;t[n+E>>2]=f;if(u|0){i=t[47524]|0;A=u>>>3;r=190116+(A<<1<<2)|0;A=1<>2]|0}t[e>>2]=i;t[A+12>>2]=i;t[i+8>>2]=A;t[i+12>>2]=r}t[47521]=f;t[47524]=a;E=l;h=B;return E|0}s=t[47520]|0;if(s){r=(s&0-s)+-1|0;l=r>>>12&16;r=r>>>l;f=r>>>5&8;r=r>>>f;c=r>>>2&4;r=r>>>c;i=r>>>1&2;r=r>>>i;e=r>>>1&1;e=t[190380+((f|l|c|i|e)+(r>>>e)<<2)>>2]|0;r=(t[e+4>>2]&-8)-o|0;i=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0;if(!i){c=e;f=r}else{do{l=(t[i+4>>2]&-8)-o|0;c=l>>>0>>0;r=c?l:r;e=c?i:e;i=t[i+16+(((t[i+16>>2]|0)==0&1)<<2)>>2]|0}while((i|0)!=0);c=e;f=r}l=c+o|0;if(l>>>0>c>>>0){a=t[c+24>>2]|0;A=t[c+12>>2]|0;do{if((A|0)==(c|0)){e=c+20|0;A=t[e>>2]|0;if(!A){e=c+16|0;A=t[e>>2]|0;if(!A){r=0;break}}while(1){r=A+20|0;i=t[r>>2]|0;if(i|0){A=i;e=r;continue}r=A+16|0;i=t[r>>2]|0;if(!i)break;else{A=i;e=r}}t[e>>2]=0;r=A}else{r=t[c+8>>2]|0;t[r+12>>2]=A;t[A+8>>2]=r;r=A}}while(0);do{if(a|0){A=t[c+28>>2]|0;e=190380+(A<<2)|0;if((c|0)==(t[e>>2]|0)){t[e>>2]=r;if(!r){t[47520]=s&~(1<>2]|0)!=(c|0)&1)<<2)>>2]=r;if(!r)break}t[r+24>>2]=a;A=t[c+16>>2]|0;if(A|0){t[r+16>>2]=A;t[A+24>>2]=r}A=t[c+20>>2]|0;if(A|0){t[r+20>>2]=A;t[A+24>>2]=r}}}while(0);if(f>>>0<16){E=f+o|0;t[c+4>>2]=E|3;E=c+E+4|0;t[E>>2]=t[E>>2]|1}else{t[c+4>>2]=o|3;t[l+4>>2]=f|1;t[l+f>>2]=f;if(u|0){i=t[47524]|0;A=u>>>3;r=190116+(A<<1<<2)|0;A=1<>2]|0}t[e>>2]=i;t[A+12>>2]=i;t[i+8>>2]=A;t[i+12>>2]=r}t[47521]=f;t[47524]=l}E=c+8|0;h=B;return E|0}else u=o}else u=o}else u=o}else if(e>>>0<=4294967231){e=e+11|0;o=e&-8;c=t[47520]|0;if(c){i=0-o|0;e=e>>>8;if(e)if(o>>>0>16777215)s=31;else{b=(e+1048320|0)>>>16&8;p=e<>>16&4;p=p<>>16&2;s=14-(u|b|s)+(p<>>15)|0;s=o>>>(s+7|0)&1|s<<1}else s=0;r=t[190380+(s<<2)>>2]|0;e:do{if(!r){r=0;e=0;p=57}else{e=0;l=r;f=o<<((s|0)==31?0:25-(s>>>1)|0);r=0;while(1){a=(t[l+4>>2]&-8)-o|0;if(a>>>0>>0)if(!a){i=0;r=l;e=l;p=61;break e}else{e=l;i=a}a=t[l+20>>2]|0;l=t[l+16+(f>>>31<<2)>>2]|0;r=(a|0)==0|(a|0)==(l|0)?r:a;a=(l|0)==0;if(a){p=57;break}else f=f<<((a^1)&1)}}}while(0);if((p|0)==57){if((r|0)==0&(e|0)==0){e=2<>>12&16;b=b>>>l;f=b>>>5&8;b=b>>>f;s=b>>>2&4;b=b>>>s;u=b>>>1&2;b=b>>>u;r=b>>>1&1;e=0;r=t[190380+((f|l|s|u|r)+(b>>>r)<<2)>>2]|0}if(!r){l=e;f=i}else p=61}if((p|0)==61)while(1){p=0;u=(t[r+4>>2]&-8)-o|0;b=u>>>0>>0;i=b?u:i;e=b?r:e;r=t[r+16+(((t[r+16>>2]|0)==0&1)<<2)>>2]|0;if(!r){l=e;f=i;break}else p=61}if((l|0)!=0?f>>>0<((t[47521]|0)-o|0)>>>0:0){n=l+o|0;if(n>>>0<=l>>>0){E=0;h=B;return E|0}a=t[l+24>>2]|0;A=t[l+12>>2]|0;do{if((A|0)==(l|0)){e=l+20|0;A=t[e>>2]|0;if(!A){e=l+16|0;A=t[e>>2]|0;if(!A){A=0;break}}while(1){r=A+20|0;i=t[r>>2]|0;if(i|0){A=i;e=r;continue}r=A+16|0;i=t[r>>2]|0;if(!i)break;else{A=i;e=r}}t[e>>2]=0}else{E=t[l+8>>2]|0;t[E+12>>2]=A;t[A+8>>2]=E}}while(0);do{if(a){e=t[l+28>>2]|0;r=190380+(e<<2)|0;if((l|0)==(t[r>>2]|0)){t[r>>2]=A;if(!A){i=c&~(1<>2]|0)!=(l|0)&1)<<2)>>2]=A;if(!A){i=c;break}}t[A+24>>2]=a;e=t[l+16>>2]|0;if(e|0){t[A+16>>2]=e;t[e+24>>2]=A}e=t[l+20>>2]|0;if(e){t[A+20>>2]=e;t[e+24>>2]=A;i=c}else i=c}else i=c}while(0);do{if(f>>>0>=16){t[l+4>>2]=o|3;t[n+4>>2]=f|1;t[n+f>>2]=f;A=f>>>3;if(f>>>0<256){r=190116+(A<<1<<2)|0;e=t[47519]|0;A=1<>2]|0}t[e>>2]=n;t[A+12>>2]=n;t[n+8>>2]=A;t[n+12>>2]=r;break}A=f>>>8;if(A)if(f>>>0>16777215)A=31;else{p=(A+1048320|0)>>>16&8;E=A<>>16&4;E=E<>>16&2;A=14-(m|p|A)+(E<>>15)|0;A=f>>>(A+7|0)&1|A<<1}else A=0;r=190380+(A<<2)|0;t[n+28>>2]=A;e=n+16|0;t[e+4>>2]=0;t[e>>2]=0;e=1<>2]=n;t[n+24>>2]=r;t[n+12>>2]=n;t[n+8>>2]=n;break}e=f<<((A|0)==31?0:25-(A>>>1)|0);r=t[r>>2]|0;while(1){if((t[r+4>>2]&-8|0)==(f|0)){p=97;break}i=r+16+(e>>>31<<2)|0;A=t[i>>2]|0;if(!A){p=96;break}else{e=e<<1;r=A}}if((p|0)==96){t[i>>2]=n;t[n+24>>2]=r;t[n+12>>2]=n;t[n+8>>2]=n;break}else if((p|0)==97){p=r+8|0;E=t[p>>2]|0;t[E+12>>2]=n;t[p>>2]=n;t[n+8>>2]=E;t[n+12>>2]=r;t[n+24>>2]=0;break}}else{E=f+o|0;t[l+4>>2]=E|3;E=l+E+4|0;t[E>>2]=t[E>>2]|1}}while(0);E=l+8|0;h=B;return E|0}else u=o}else u=o}else u=-1}while(0);r=t[47521]|0;if(r>>>0>=u>>>0){A=r-u|0;e=t[47524]|0;if(A>>>0>15){E=e+u|0;t[47524]=E;t[47521]=A;t[E+4>>2]=A|1;t[e+r>>2]=A;t[e+4>>2]=u|3}else{t[47521]=0;t[47524]=0;t[e+4>>2]=r|3;E=e+r+4|0;t[E>>2]=t[E>>2]|1}E=e+8|0;h=B;return E|0}l=t[47522]|0;if(l>>>0>u>>>0){m=l-u|0;t[47522]=m;E=t[47525]|0;p=E+u|0;t[47525]=p;t[p+4>>2]=m|1;t[E+4>>2]=u|3;E=E+8|0;h=B;return E|0}if(!(t[47637]|0)){t[47639]=4096;t[47638]=4096;t[47640]=-1;t[47641]=-1;t[47642]=0;t[47630]=0;t[47637]=w&-16^1431655768;e=4096}else e=t[47639]|0;s=u+48|0;c=u+47|0;f=e+c|0;a=0-e|0;o=f&a;if(o>>>0<=u>>>0){E=0;h=B;return E|0}e=t[47629]|0;if(e|0?(b=t[47627]|0,w=b+o|0,w>>>0<=b>>>0|w>>>0>e>>>0):0){E=0;h=B;return E|0}e:do{if(!(t[47630]&4)){r=t[47525]|0;A:do{if(r){i=190524;while(1){e=t[i>>2]|0;if(e>>>0<=r>>>0?(v=i+4|0,(e+(t[v>>2]|0)|0)>>>0>r>>>0):0)break;e=t[i+8>>2]|0;if(!e){p=118;break A}else i=e}A=f-l&a;if(A>>>0<2147483647){e=W6(A|0)|0;if((e|0)==((t[i>>2]|0)+(t[v>>2]|0)|0)){if((e|0)!=(-1|0)){f=A;n=e;p=135;break e}}else{i=e;p=126}}else A=0}else p=118}while(0);do{if((p|0)==118){r=W6(0)|0;if((r|0)!=(-1|0)?(A=r,k=t[47638]|0,d=k+-1|0,A=((d&A|0)==0?0:(d+A&0-k)-A|0)+o|0,k=t[47627]|0,d=A+k|0,A>>>0>u>>>0&A>>>0<2147483647):0){v=t[47629]|0;if(v|0?d>>>0<=k>>>0|d>>>0>v>>>0:0){A=0;break}e=W6(A|0)|0;if((e|0)==(r|0)){f=A;n=r;p=135;break e}else{i=e;p=126}}else A=0}}while(0);do{if((p|0)==126){r=0-A|0;if(!(s>>>0>A>>>0&(A>>>0<2147483647&(i|0)!=(-1|0))))if((i|0)==(-1|0)){A=0;break}else{f=A;n=i;p=135;break e}e=t[47639]|0;e=c-A+e&0-e;if(e>>>0>=2147483647){f=A;n=i;p=135;break e}if((W6(e|0)|0)==(-1|0)){W6(r|0)|0;A=0;break}else{f=e+A|0;n=i;p=135;break e}}}while(0);t[47630]=t[47630]|4;p=133}else{A=0;p=133}}while(0);if(((p|0)==133?o>>>0<2147483647:0)?(n=W6(o|0)|0,v=W6(0)|0,g=v-n|0,m=g>>>0>(u+40|0)>>>0,!((n|0)==(-1|0)|m^1|n>>>0>>0&((n|0)!=(-1|0)&(v|0)!=(-1|0))^1)):0){f=m?g:A;p=135}if((p|0)==135){A=(t[47627]|0)+f|0;t[47627]=A;if(A>>>0>(t[47628]|0)>>>0)t[47628]=A;s=t[47525]|0;do{if(s){A=190524;while(1){e=t[A>>2]|0;r=A+4|0;i=t[r>>2]|0;if((n|0)==(e+i|0)){p=143;break}a=t[A+8>>2]|0;if(!a)break;else A=a}if(((p|0)==143?(t[A+12>>2]&8|0)==0:0)?n>>>0>s>>>0&e>>>0<=s>>>0:0){t[r>>2]=i+f;E=(t[47522]|0)+f|0;m=s+8|0;m=(m&7|0)==0?0:0-m&7;p=s+m|0;m=E-m|0;t[47525]=p;t[47522]=m;t[p+4>>2]=m|1;t[s+E+4>>2]=40;t[47526]=t[47641];break}if(n>>>0<(t[47523]|0)>>>0)t[47523]=n;e=n+f|0;A=190524;while(1){if((t[A>>2]|0)==(e|0)){p=151;break}A=t[A+8>>2]|0;if(!A){e=190524;break}}if((p|0)==151)if(!(t[A+12>>2]&8)){t[A>>2]=n;o=A+4|0;t[o>>2]=(t[o>>2]|0)+f;o=n+8|0;o=n+((o&7|0)==0?0:0-o&7)|0;A=e+8|0;A=e+((A&7|0)==0?0:0-A&7)|0;c=o+u|0;l=A-o-u|0;t[o+4>>2]=u|3;do{if((s|0)!=(A|0)){if((t[47524]|0)==(A|0)){E=(t[47521]|0)+l|0;t[47521]=E;t[47524]=c;t[c+4>>2]=E|1;t[c+E>>2]=E;break}e=t[A+4>>2]|0;if((e&3|0)==1){f=e&-8;i=e>>>3;e:do{if(e>>>0<256){e=t[A+8>>2]|0;r=t[A+12>>2]|0;if((r|0)==(e|0)){t[47519]=t[47519]&~(1<>2]=r;t[r+8>>2]=e;break}}else{n=t[A+24>>2]|0;e=t[A+12>>2]|0;do{if((e|0)==(A|0)){i=A+16|0;r=i+4|0;e=t[r>>2]|0;if(!e){e=t[i>>2]|0;if(!e){e=0;break}else r=i}while(1){i=e+20|0;a=t[i>>2]|0;if(a|0){e=a;r=i;continue}i=e+16|0;a=t[i>>2]|0;if(!a)break;else{e=a;r=i}}t[r>>2]=0}else{E=t[A+8>>2]|0;t[E+12>>2]=e;t[e+8>>2]=E}}while(0);if(!n)break;r=t[A+28>>2]|0;i=190380+(r<<2)|0;do{if((t[i>>2]|0)!=(A|0)){t[n+16+(((t[n+16>>2]|0)!=(A|0)&1)<<2)>>2]=e;if(!e)break e}else{t[i>>2]=e;if(e|0)break;t[47520]=t[47520]&~(1<>2]=n;r=A+16|0;i=t[r>>2]|0;if(i|0){t[e+16>>2]=i;t[i+24>>2]=e}r=t[r+4>>2]|0;if(!r)break;t[e+20>>2]=r;t[r+24>>2]=e}}while(0);A=A+f|0;a=f+l|0}else a=l;A=A+4|0;t[A>>2]=t[A>>2]&-2;t[c+4>>2]=a|1;t[c+a>>2]=a;A=a>>>3;if(a>>>0<256){r=190116+(A<<1<<2)|0;e=t[47519]|0;A=1<>2]|0}t[e>>2]=c;t[A+12>>2]=c;t[c+8>>2]=A;t[c+12>>2]=r;break}A=a>>>8;do{if(!A)A=0;else{if(a>>>0>16777215){A=31;break}p=(A+1048320|0)>>>16&8;E=A<>>16&4;E=E<>>16&2;A=14-(m|p|A)+(E<>>15)|0;A=a>>>(A+7|0)&1|A<<1}}while(0);i=190380+(A<<2)|0;t[c+28>>2]=A;e=c+16|0;t[e+4>>2]=0;t[e>>2]=0;e=t[47520]|0;r=1<>2]=c;t[c+24>>2]=i;t[c+12>>2]=c;t[c+8>>2]=c;break}e=a<<((A|0)==31?0:25-(A>>>1)|0);r=t[i>>2]|0;while(1){if((t[r+4>>2]&-8|0)==(a|0)){p=192;break}i=r+16+(e>>>31<<2)|0;A=t[i>>2]|0;if(!A){p=191;break}else{e=e<<1;r=A}}if((p|0)==191){t[i>>2]=c;t[c+24>>2]=r;t[c+12>>2]=c;t[c+8>>2]=c;break}else if((p|0)==192){p=r+8|0;E=t[p>>2]|0;t[E+12>>2]=c;t[p>>2]=c;t[c+8>>2]=E;t[c+12>>2]=r;t[c+24>>2]=0;break}}else{E=(t[47522]|0)+l|0;t[47522]=E;t[47525]=c;t[c+4>>2]=E|1}}while(0);E=o+8|0;h=B;return E|0}else e=190524;while(1){A=t[e>>2]|0;if(A>>>0<=s>>>0?(E=A+(t[e+4>>2]|0)|0,E>>>0>s>>>0):0)break;e=t[e+8>>2]|0}a=E+-47|0;e=a+8|0;e=a+((e&7|0)==0?0:0-e&7)|0;a=s+16|0;e=e>>>0>>0?s:e;A=e+8|0;r=f+-40|0;m=n+8|0;m=(m&7|0)==0?0:0-m&7;p=n+m|0;m=r-m|0;t[47525]=p;t[47522]=m;t[p+4>>2]=m|1;t[n+r+4>>2]=40;t[47526]=t[47641];r=e+4|0;t[r>>2]=27;t[A>>2]=t[47631];t[A+4>>2]=t[47632];t[A+8>>2]=t[47633];t[A+12>>2]=t[47634];t[47631]=n;t[47632]=f;t[47634]=0;t[47633]=A;A=e+24|0;do{p=A;A=A+4|0;t[A>>2]=7}while((p+8|0)>>>0>>0);if((e|0)!=(s|0)){n=e-s|0;t[r>>2]=t[r>>2]&-2;t[s+4>>2]=n|1;t[e>>2]=n;A=n>>>3;if(n>>>0<256){r=190116+(A<<1<<2)|0;e=t[47519]|0;A=1<>2]|0}t[e>>2]=s;t[A+12>>2]=s;t[s+8>>2]=A;t[s+12>>2]=r;break}A=n>>>8;if(A)if(n>>>0>16777215)r=31;else{p=(A+1048320|0)>>>16&8;E=A<>>16&4;E=E<>>16&2;r=14-(m|p|r)+(E<>>15)|0;r=n>>>(r+7|0)&1|r<<1}else r=0;i=190380+(r<<2)|0;t[s+28>>2]=r;t[s+20>>2]=0;t[a>>2]=0;A=t[47520]|0;e=1<>2]=s;t[s+24>>2]=i;t[s+12>>2]=s;t[s+8>>2]=s;break}e=n<<((r|0)==31?0:25-(r>>>1)|0);r=t[i>>2]|0;while(1){if((t[r+4>>2]&-8|0)==(n|0)){p=213;break}i=r+16+(e>>>31<<2)|0;A=t[i>>2]|0;if(!A){p=212;break}else{e=e<<1;r=A}}if((p|0)==212){t[i>>2]=s;t[s+24>>2]=r;t[s+12>>2]=s;t[s+8>>2]=s;break}else if((p|0)==213){p=r+8|0;E=t[p>>2]|0;t[E+12>>2]=s;t[p>>2]=s;t[s+8>>2]=E;t[s+12>>2]=r;t[s+24>>2]=0;break}}}else{E=t[47523]|0;if((E|0)==0|n>>>0>>0)t[47523]=n;t[47631]=n;t[47632]=f;t[47634]=0;t[47528]=t[47637];t[47527]=-1;t[47532]=190116;t[47531]=190116;t[47534]=190124;t[47533]=190124;t[47536]=190132;t[47535]=190132;t[47538]=190140;t[47537]=190140;t[47540]=190148;t[47539]=190148;t[47542]=190156;t[47541]=190156;t[47544]=190164;t[47543]=190164;t[47546]=190172;t[47545]=190172;t[47548]=190180;t[47547]=190180;t[47550]=190188;t[47549]=190188;t[47552]=190196;t[47551]=190196;t[47554]=190204;t[47553]=190204;t[47556]=190212;t[47555]=190212;t[47558]=190220;t[47557]=190220;t[47560]=190228;t[47559]=190228;t[47562]=190236;t[47561]=190236;t[47564]=190244;t[47563]=190244;t[47566]=190252;t[47565]=190252;t[47568]=190260;t[47567]=190260;t[47570]=190268;t[47569]=190268;t[47572]=190276;t[47571]=190276;t[47574]=190284;t[47573]=190284;t[47576]=190292;t[47575]=190292;t[47578]=190300;t[47577]=190300;t[47580]=190308;t[47579]=190308;t[47582]=190316;t[47581]=190316;t[47584]=190324;t[47583]=190324;t[47586]=190332;t[47585]=190332;t[47588]=190340;t[47587]=190340;t[47590]=190348;t[47589]=190348;t[47592]=190356;t[47591]=190356;t[47594]=190364;t[47593]=190364;E=f+-40|0;m=n+8|0;m=(m&7|0)==0?0:0-m&7;p=n+m|0;m=E-m|0;t[47525]=p;t[47522]=m;t[p+4>>2]=m|1;t[n+E+4>>2]=40;t[47526]=t[47641]}}while(0);A=t[47522]|0;if(A>>>0>u>>>0){m=A-u|0;t[47522]=m;E=t[47525]|0;p=E+u|0;t[47525]=p;t[p+4>>2]=m|1;t[E+4>>2]=u|3;E=E+8|0;h=B;return E|0}}t[(R2()|0)>>2]=12;E=0;h=B;return E|0}function G2(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0,s=0;if(!e)return;r=e+-8|0;a=t[47523]|0;e=t[e+-4>>2]|0;A=e&-8;s=r+A|0;do{if(!(e&1)){i=t[r>>2]|0;if(!(e&3))return;f=r+(0-i)|0;n=i+A|0;if(f>>>0>>0)return;if((t[47524]|0)==(f|0)){e=s+4|0;A=t[e>>2]|0;if((A&3|0)!=3){l=f;A=n;break}t[47521]=n;t[e>>2]=A&-2;t[f+4>>2]=n|1;t[f+n>>2]=n;return}r=i>>>3;if(i>>>0<256){e=t[f+8>>2]|0;A=t[f+12>>2]|0;if((A|0)==(e|0)){t[47519]=t[47519]&~(1<>2]=A;t[A+8>>2]=e;l=f;A=n;break}}a=t[f+24>>2]|0;e=t[f+12>>2]|0;do{if((e|0)==(f|0)){r=f+16|0;A=r+4|0;e=t[A>>2]|0;if(!e){e=t[r>>2]|0;if(!e){e=0;break}else A=r}while(1){r=e+20|0;i=t[r>>2]|0;if(i|0){e=i;A=r;continue}r=e+16|0;i=t[r>>2]|0;if(!i)break;else{e=i;A=r}}t[A>>2]=0}else{l=t[f+8>>2]|0;t[l+12>>2]=e;t[e+8>>2]=l}}while(0);if(a){A=t[f+28>>2]|0;r=190380+(A<<2)|0;if((t[r>>2]|0)==(f|0)){t[r>>2]=e;if(!e){t[47520]=t[47520]&~(1<>2]|0)!=(f|0)&1)<<2)>>2]=e;if(!e){l=f;A=n;break}}t[e+24>>2]=a;A=f+16|0;r=t[A>>2]|0;if(r|0){t[e+16>>2]=r;t[r+24>>2]=e}A=t[A+4>>2]|0;if(A){t[e+20>>2]=A;t[A+24>>2]=e;l=f;A=n}else{l=f;A=n}}else{l=f;A=n}}else{l=r;f=r}}while(0);if(f>>>0>=s>>>0)return;e=s+4|0;i=t[e>>2]|0;if(!(i&1))return;if(!(i&2)){if((t[47525]|0)==(s|0)){s=(t[47522]|0)+A|0;t[47522]=s;t[47525]=l;t[l+4>>2]=s|1;if((l|0)!=(t[47524]|0))return;t[47524]=0;t[47521]=0;return}if((t[47524]|0)==(s|0)){s=(t[47521]|0)+A|0;t[47521]=s;t[47524]=f;t[l+4>>2]=s|1;t[f+s>>2]=s;return}a=(i&-8)+A|0;r=i>>>3;do{if(i>>>0<256){A=t[s+8>>2]|0;e=t[s+12>>2]|0;if((e|0)==(A|0)){t[47519]=t[47519]&~(1<>2]=e;t[e+8>>2]=A;break}}else{n=t[s+24>>2]|0;e=t[s+12>>2]|0;do{if((e|0)==(s|0)){r=s+16|0;A=r+4|0;e=t[A>>2]|0;if(!e){e=t[r>>2]|0;if(!e){r=0;break}else A=r}while(1){r=e+20|0;i=t[r>>2]|0;if(i|0){e=i;A=r;continue}r=e+16|0;i=t[r>>2]|0;if(!i)break;else{e=i;A=r}}t[A>>2]=0;r=e}else{r=t[s+8>>2]|0;t[r+12>>2]=e;t[e+8>>2]=r;r=e}}while(0);if(n|0){e=t[s+28>>2]|0;A=190380+(e<<2)|0;if((t[A>>2]|0)==(s|0)){t[A>>2]=r;if(!r){t[47520]=t[47520]&~(1<>2]|0)!=(s|0)&1)<<2)>>2]=r;if(!r)break}t[r+24>>2]=n;e=s+16|0;A=t[e>>2]|0;if(A|0){t[r+16>>2]=A;t[A+24>>2]=r}e=t[e+4>>2]|0;if(e|0){t[r+20>>2]=e;t[e+24>>2]=r}}}}while(0);t[l+4>>2]=a|1;t[f+a>>2]=a;if((l|0)==(t[47524]|0)){t[47521]=a;return}}else{t[e>>2]=i&-2;t[l+4>>2]=A|1;t[f+A>>2]=A;a=A}e=a>>>3;if(a>>>0<256){r=190116+(e<<1<<2)|0;A=t[47519]|0;e=1<>2]|0}t[A>>2]=l;t[e+12>>2]=l;t[l+8>>2]=e;t[l+12>>2]=r;return}e=a>>>8;if(e)if(a>>>0>16777215)e=31;else{f=(e+1048320|0)>>>16&8;s=e<>>16&4;s=s<>>16&2;e=14-(n|f|e)+(s<>>15)|0;e=a>>>(e+7|0)&1|e<<1}else e=0;i=190380+(e<<2)|0;t[l+28>>2]=e;t[l+20>>2]=0;t[l+16>>2]=0;A=t[47520]|0;r=1<>>1)|0);r=t[i>>2]|0;while(1){if((t[r+4>>2]&-8|0)==(a|0)){e=73;break}i=r+16+(A>>>31<<2)|0;e=t[i>>2]|0;if(!e){e=72;break}else{A=A<<1;r=e}}if((e|0)==72){t[i>>2]=l;t[l+24>>2]=r;t[l+12>>2]=l;t[l+8>>2]=l;break}else if((e|0)==73){f=r+8|0;s=t[f>>2]|0;t[s+12>>2]=l;t[f>>2]=l;t[l+8>>2]=s;t[l+12>>2]=r;t[l+24>>2]=0;break}}else{t[47520]=A|r;t[i>>2]=l;t[l+24>>2]=i;t[l+12>>2]=l;t[l+8>>2]=l}}while(0);s=(t[47527]|0)+-1|0;t[47527]=s;if(!s)e=190532;else return;while(1){e=t[e>>2]|0;if(!e)break;else e=e+8|0}t[47527]=-1;return}function L2(e,A){e=e|0;A=A|0;var r=0;if(e){r=P(A,e)|0;if((A|e)>>>0>65535)r=((r>>>0)/(e>>>0)|0|0)==(A|0)?r:-1}else r=0;e=Z2(r)|0;if(!e)return e|0;if(!(t[e+-4>>2]&3))return e|0;z6(e|0,0,r|0)|0;return e|0}function Q2(e,A){e=e|0;A=A|0;var r=0,i=0;if(!e){A=Z2(A)|0;return A|0}if(A>>>0>4294967231){t[(R2()|0)>>2]=12;A=0;return A|0}r=D2(e+-8|0,A>>>0<11?16:A+11&-8)|0;if(r|0){A=r+8|0;return A|0}r=Z2(A)|0;if(!r){A=0;return A|0}i=t[e+-4>>2]|0;i=(i&-8)-((i&3|0)==0?8:4)|0;Q6(r|0,e|0,(i>>>0>>0?i:A)|0)|0;G2(e);A=r;return A|0}function D2(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;o=e+4|0;u=t[o>>2]|0;r=u&-8;l=e+r|0;if(!(u&3)){if(A>>>0<256){e=0;return e|0}if(r>>>0>=(A+4|0)>>>0?(r-A|0)>>>0<=t[47639]<<1>>>0:0)return e|0;e=0;return e|0}if(r>>>0>=A>>>0){r=r-A|0;if(r>>>0<=15)return e|0;c=e+A|0;t[o>>2]=u&1|A|2;t[c+4>>2]=r|3;u=l+4|0;t[u>>2]=t[u>>2]|1;z2(c,r);return e|0}if((t[47525]|0)==(l|0)){c=(t[47522]|0)+r|0;r=c-A|0;i=e+A|0;if(c>>>0<=A>>>0){e=0;return e|0}t[o>>2]=u&1|A|2;t[i+4>>2]=r|1;t[47525]=i;t[47522]=r;return e|0}if((t[47524]|0)==(l|0)){i=(t[47521]|0)+r|0;if(i>>>0>>0){e=0;return e|0}r=i-A|0;if(r>>>0>15){c=e+A|0;i=e+i|0;t[o>>2]=u&1|A|2;t[c+4>>2]=r|1;t[i>>2]=r;i=i+4|0;t[i>>2]=t[i>>2]&-2;i=c}else{t[o>>2]=u&1|i|2;i=e+i+4|0;t[i>>2]=t[i>>2]|1;i=0;r=0}t[47521]=r;t[47524]=i;return e|0}i=t[l+4>>2]|0;if(i&2|0){e=0;return e|0}s=(i&-8)+r|0;if(s>>>0>>0){e=0;return e|0}c=s-A|0;a=i>>>3;do{if(i>>>0<256){i=t[l+8>>2]|0;r=t[l+12>>2]|0;if((r|0)==(i|0)){t[47519]=t[47519]&~(1<>2]=r;t[r+8>>2]=i;break}}else{f=t[l+24>>2]|0;r=t[l+12>>2]|0;do{if((r|0)==(l|0)){a=l+16|0;i=a+4|0;r=t[i>>2]|0;if(!r){r=t[a>>2]|0;if(!r){a=0;break}else n=a}else n=i;while(1){a=r+20|0;i=t[a>>2]|0;if(i|0){r=i;n=a;continue}i=r+16|0;a=t[i>>2]|0;if(!a)break;else{r=a;n=i}}t[n>>2]=0;a=r}else{a=t[l+8>>2]|0;t[a+12>>2]=r;t[r+8>>2]=a;a=r}}while(0);if(f|0){r=t[l+28>>2]|0;i=190380+(r<<2)|0;if((t[i>>2]|0)==(l|0)){t[i>>2]=a;if(!a){t[47520]=t[47520]&~(1<>2]|0)!=(l|0)&1)<<2)>>2]=a;if(!a)break}t[a+24>>2]=f;r=l+16|0;i=t[r>>2]|0;if(i|0){t[a+16>>2]=i;t[i+24>>2]=a}r=t[r+4>>2]|0;if(r|0){t[a+20>>2]=r;t[r+24>>2]=a}}}}while(0);if(c>>>0<16){t[o>>2]=s|u&1|2;u=e+s+4|0;t[u>>2]=t[u>>2]|1;return e|0}else{l=e+A|0;t[o>>2]=u&1|A|2;t[l+4>>2]=c|3;u=e+s+4|0;t[u>>2]=t[u>>2]|1;z2(l,c);return e|0}return 0}function z2(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;l=e+A|0;r=t[e+4>>2]|0;do{if(!(r&1)){a=t[e>>2]|0;if(!(r&3))return;f=e+(0-a)|0;A=a+A|0;if((t[47524]|0)==(f|0)){e=l+4|0;r=t[e>>2]|0;if((r&3|0)!=3)break;t[47521]=A;t[e>>2]=r&-2;t[f+4>>2]=A|1;t[l>>2]=A;return}i=a>>>3;if(a>>>0<256){e=t[f+8>>2]|0;r=t[f+12>>2]|0;if((r|0)==(e|0)){t[47519]=t[47519]&~(1<>2]=r;t[r+8>>2]=e;break}}n=t[f+24>>2]|0;e=t[f+12>>2]|0;do{if((e|0)==(f|0)){i=f+16|0;r=i+4|0;e=t[r>>2]|0;if(!e){e=t[i>>2]|0;if(!e){e=0;break}else r=i}while(1){i=e+20|0;a=t[i>>2]|0;if(a|0){e=a;r=i;continue}i=e+16|0;a=t[i>>2]|0;if(!a)break;else{e=a;r=i}}t[r>>2]=0}else{a=t[f+8>>2]|0;t[a+12>>2]=e;t[e+8>>2]=a}}while(0);if(n){r=t[f+28>>2]|0;i=190380+(r<<2)|0;if((t[i>>2]|0)==(f|0)){t[i>>2]=e;if(!e){t[47520]=t[47520]&~(1<>2]|0)!=(f|0)&1)<<2)>>2]=e;if(!e)break}t[e+24>>2]=n;r=f+16|0;i=t[r>>2]|0;if(i|0){t[e+16>>2]=i;t[i+24>>2]=e}r=t[r+4>>2]|0;if(r){t[e+20>>2]=r;t[r+24>>2]=e}}}else f=e}while(0);e=l+4|0;i=t[e>>2]|0;if(!(i&2)){if((t[47525]|0)==(l|0)){l=(t[47522]|0)+A|0;t[47522]=l;t[47525]=f;t[f+4>>2]=l|1;if((f|0)!=(t[47524]|0))return;t[47524]=0;t[47521]=0;return}if((t[47524]|0)==(l|0)){l=(t[47521]|0)+A|0;t[47521]=l;t[47524]=f;t[f+4>>2]=l|1;t[f+l>>2]=l;return}a=(i&-8)+A|0;r=i>>>3;do{if(i>>>0<256){e=t[l+8>>2]|0;A=t[l+12>>2]|0;if((A|0)==(e|0)){t[47519]=t[47519]&~(1<>2]=A;t[A+8>>2]=e;break}}else{n=t[l+24>>2]|0;A=t[l+12>>2]|0;do{if((A|0)==(l|0)){r=l+16|0;e=r+4|0;A=t[e>>2]|0;if(!A){A=t[r>>2]|0;if(!A){r=0;break}else e=r}while(1){r=A+20|0;i=t[r>>2]|0;if(i|0){A=i;e=r;continue}r=A+16|0;i=t[r>>2]|0;if(!i)break;else{A=i;e=r}}t[e>>2]=0;r=A}else{r=t[l+8>>2]|0;t[r+12>>2]=A;t[A+8>>2]=r;r=A}}while(0);if(n|0){A=t[l+28>>2]|0;e=190380+(A<<2)|0;if((t[e>>2]|0)==(l|0)){t[e>>2]=r;if(!r){t[47520]=t[47520]&~(1<>2]|0)!=(l|0)&1)<<2)>>2]=r;if(!r)break}t[r+24>>2]=n;A=l+16|0;e=t[A>>2]|0;if(e|0){t[r+16>>2]=e;t[e+24>>2]=r}A=t[A+4>>2]|0;if(A|0){t[r+20>>2]=A;t[A+24>>2]=r}}}}while(0);t[f+4>>2]=a|1;t[f+a>>2]=a;if((f|0)==(t[47524]|0)){t[47521]=a;return}}else{t[e>>2]=i&-2;t[f+4>>2]=A|1;t[f+A>>2]=A;a=A}A=a>>>3;if(a>>>0<256){r=190116+(A<<1<<2)|0;e=t[47519]|0;A=1<>2]|0}t[e>>2]=f;t[A+12>>2]=f;t[f+8>>2]=A;t[f+12>>2]=r;return}A=a>>>8;if(A)if(a>>>0>16777215)A=31;else{n=(A+1048320|0)>>>16&8;l=A<>>16&4;l=l<>>16&2;A=14-(i|n|A)+(l<>>15)|0;A=a>>>(A+7|0)&1|A<<1}else A=0;i=190380+(A<<2)|0;t[f+28>>2]=A;t[f+20>>2]=0;t[f+16>>2]=0;e=t[47520]|0;r=1<>2]=f;t[f+24>>2]=i;t[f+12>>2]=f;t[f+8>>2]=f;return}e=a<<((A|0)==31?0:25-(A>>>1)|0);r=t[i>>2]|0;while(1){if((t[r+4>>2]&-8|0)==(a|0)){A=69;break}i=r+16+(e>>>31<<2)|0;A=t[i>>2]|0;if(!A){A=68;break}else{e=e<<1;r=A}}if((A|0)==68){t[i>>2]=f;t[f+24>>2]=r;t[f+12>>2]=f;t[f+8>>2]=f;return}else if((A|0)==69){n=r+8|0;l=t[n>>2]|0;t[l+12>>2]=f;t[n>>2]=f;t[f+8>>2]=l;t[f+12>>2]=r;t[f+24>>2]=0;return}}function W2(e,A){e=e|0;A=A|0;if(e>>>0<9){A=Z2(A)|0;return A|0}else{A=Y2(e,A)|0;return A|0}return 0}function Y2(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0;e=e>>>0>16?e:16;if(e+-1&e){r=16;while(1)if(r>>>0>>0)r=r<<1;else{e=r;break}}if((-64-e|0)>>>0<=A>>>0){t[(R2()|0)>>2]=12;f=0;return f|0}n=A>>>0<11?16:A+11&-8;r=Z2(n+12+e|0)|0;if(!r){f=0;return f|0}a=r+-8|0;do{if(e+-1&r){i=(r+e+-1&0-e)+-8|0;A=a;i=(i-A|0)>>>0>15?i:i+e|0;A=i-A|0;e=r+-4|0;l=t[e>>2]|0;r=(l&-8)-A|0;if(!(l&3)){t[i>>2]=(t[a>>2]|0)+A;t[i+4>>2]=r;e=i;A=i;break}else{l=i+4|0;t[l>>2]=r|t[l>>2]&1|2;r=i+r+4|0;t[r>>2]=t[r>>2]|1;t[e>>2]=A|t[e>>2]&1|2;t[l>>2]=t[l>>2]|1;z2(a,A);e=i;A=i;break}}else{e=a;A=a}}while(0);e=e+4|0;r=t[e>>2]|0;if(r&3|0?(f=r&-8,f>>>0>(n+16|0)>>>0):0){l=f-n|0;a=A+n|0;t[e>>2]=n|r&1|2;t[a+4>>2]=l|3;f=A+f+4|0;t[f>>2]=t[f>>2]|1;z2(a,l)}l=A+8|0;return l|0}function F2(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=A;t[r>>2]=x2(t[e+60>>2]|0)|0;e=N2(Ne(6,r|0)|0)|0;h=A;return e|0}function M2(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0;c=h;h=h+32|0;a=c;l=c+16|0;t[l>>2]=A;n=l+4|0;s=e+48|0;o=t[s>>2]|0;t[n>>2]=r-((o|0)!=0&1);f=e+44|0;t[l+8>>2]=t[f>>2];t[l+12>>2]=o;t[a>>2]=t[e+60>>2];t[a+4>>2]=l;t[a+8>>2]=2;a=N2(Ze(145,a|0)|0)|0;if((a|0)>=1){l=t[n>>2]|0;if(a>>>0>l>>>0){n=t[f>>2]|0;f=e+4|0;t[f>>2]=n;t[e+8>>2]=n+(a-l);if(!(t[s>>2]|0))a=r;else{t[f>>2]=n+1;i[A+(r+-1)>>0]=i[n>>0]|0;a=r}}}else t[e>>2]=t[e>>2]|a&48^16;h=c;return a|0}function V2(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;a=h;h=h+32|0;n=a;i=a+20|0;t[n>>2]=t[e+60>>2];t[n+4>>2]=0;t[n+8>>2]=A;t[n+12>>2]=i;t[n+16>>2]=r;if((N2(Ie(140,n|0)|0)|0)<0){t[i>>2]=-1;e=-1}else e=t[i>>2]|0;h=a;return e|0}function N2(e){e=e|0;if(e>>>0>4294963200){t[(R2()|0)>>2]=0-e;e=-1}return e|0}function R2(){return 190572}function x2(e){e=e|0;return e|0}function J2(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0;n=h;h=h+32|0;a=n;t[e+36>>2]=18;if((t[e>>2]&64|0)==0?(t[a>>2]=t[e+60>>2],t[a+4>>2]=21523,t[a+8>>2]=n+16,Ve(54,a|0)|0):0)i[e+75>>0]=-1;a=H2(e,A,r)|0;h=n;return a|0}function H2(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;u=h;h=h+48|0;c=u+16|0;n=u;a=u+32|0;l=e+28|0;i=t[l>>2]|0;t[a>>2]=i;s=e+20|0;i=(t[s>>2]|0)-i|0;t[a+4>>2]=i;t[a+8>>2]=A;t[a+12>>2]=r;i=i+r|0;f=e+60|0;t[n>>2]=t[f>>2];t[n+4>>2]=a;t[n+8>>2]=2;n=N2(Ge(146,n|0)|0)|0;e:do{if((i|0)!=(n|0)){A=2;while(1){if((n|0)<0)break;i=i-n|0;w=t[a+4>>2]|0;b=n>>>0>w>>>0;a=b?a+8|0:a;A=A+(b<<31>>31)|0;w=n-(b?w:0)|0;t[a>>2]=(t[a>>2]|0)+w;b=a+4|0;t[b>>2]=(t[b>>2]|0)-w;t[c>>2]=t[f>>2];t[c+4>>2]=a;t[c+8>>2]=A;n=N2(Ge(146,c|0)|0)|0;if((i|0)==(n|0)){o=3;break e}}t[e+16>>2]=0;t[l>>2]=0;t[s>>2]=0;t[e>>2]=t[e>>2]|32;if((A|0)==2)r=0;else r=r-(t[a+4>>2]|0)|0}else o=3}while(0);if((o|0)==3){w=t[e+44>>2]|0;t[e+16>>2]=w+(t[e+48>>2]|0);t[l>>2]=w;t[s>>2]=w}h=u;return r|0}function P2(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=e;t[i+4>>2]=A;A=N2(Re(91,i|0)|0)|0;h=r;return A|0}function X2(){return}function S2(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0;l=h;h=h+32|0;f=l;do{if((n&4095|0)==0&(((n|0)<0)<<31>>31&-4096|0)==0){if(A>>>0>2147483646){t[(R2()|0)>>2]=12;e=-1;break}t[f>>2]=e;t[f+4>>2]=A;t[f+8>>2]=r;t[f+12>>2]=i;t[f+16>>2]=a;t[f+20>>2]=n>>12;e=N2(Le(192,f|0)|0)|0}else{t[(R2()|0)>>2]=22;e=-1}}while(0);h=l;return e|0}function j2(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;a=A&255;e:do{if(!a)e=e+(U2(e)|0)|0;else{if(e&3){r=A&255;do{n=i[e>>0]|0;if(n<<24>>24==0?1:n<<24>>24==r<<24>>24)break e;e=e+1|0}while((e&3|0)!=0)}a=P(a,16843009)|0;r=t[e>>2]|0;A:do{if(!((r&-2139062144^-2139062144)&r+-16843009))do{n=r^a;if((n&-2139062144^-2139062144)&n+-16843009|0)break A;e=e+4|0;r=t[e>>2]|0}while(!((r&-2139062144^-2139062144)&r+-16843009|0))}while(0);r=A&255;while(1){n=i[e>>0]|0;if(n<<24>>24==0?1:n<<24>>24==r<<24>>24)break;else e=e+1|0}}}while(0);return e|0}function U2(e){e=e|0;var A=0,r=0,a=0;a=e;e:do{if(!(a&3))r=4;else{A=a;while(1){if(!(i[e>>0]|0)){e=A;break e}e=e+1|0;A=e;if(!(A&3)){r=4;break}}}}while(0);if((r|0)==4){while(1){A=t[e>>2]|0;if(!((A&-2139062144^-2139062144)&A+-16843009))e=e+4|0;else break}if((A&255)<<24>>24)do{e=e+1|0}while((i[e>>0]|0)!=0)}return e-a|0}function T2(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;f=h;h=h+48|0;n=f+16|0;a=f;i=f+32|0;if(!(A&4194368))i=0;else{t[i>>2]=r;l=(t[i>>2]|0)+(4-1)&~(4-1);r=t[l>>2]|0;t[i>>2]=l+4;i=r}t[a>>2]=e;t[a+4>>2]=A|32768;t[a+8>>2]=i;i=Me(5,a|0)|0;if(!((A&524288|0)==0|(i|0)<0)){t[n>>2]=i;t[n+4>>2]=2;t[n+8>>2]=1;We(221,n|0)|0}l=N2(i)|0;h=f;return l|0}function O2(e,A){e=e|0;A=A|0;var r=0,a=0;a=0;while(1){if((n[144531+a>>0]|0)==(e|0)){e=2;break}r=a+1|0;if((r|0)==87){r=144619;a=87;e=5;break}else a=r}if((e|0)==2)if(!a)r=144619;else{r=144619;e=5}if((e|0)==5)while(1){do{e=r;r=r+1|0}while((i[e>>0]|0)!=0);a=a+-1|0;if(!a)break;else e=5}return _2(r,t[A+20>>2]|0)|0}function _2(e,A){e=e|0;A=A|0;return q2(e,A)|0}function q2(e,A){e=e|0;A=A|0;if(!A)A=0;else A=K2(t[A>>2]|0,t[A+4>>2]|0,e)|0;return(A|0?A:e)|0}function K2(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;h=(t[e>>2]|0)+1794895138|0;f=$2(t[e+8>>2]|0,h)|0;a=$2(t[e+12>>2]|0,h)|0;n=$2(t[e+16>>2]|0,h)|0;e:do{if((f>>>0>>2>>>0?(b=A-(f<<2)|0,a>>>0>>0&n>>>0>>0):0)?((n|a)&3|0)==0:0){b=a>>>2;u=n>>>2;o=0;while(1){s=f>>>1;c=o+s|0;l=c<<1;n=l+b|0;a=$2(t[e+(n<<2)>>2]|0,h)|0;n=$2(t[e+(n+1<<2)>>2]|0,h)|0;if(!(n>>>0>>0&a>>>0<(A-n|0)>>>0)){a=0;break e}if(i[e+(n+a)>>0]|0){a=0;break e}a=e1(r,e+n|0)|0;if(!a)break;a=(a|0)<0;if((f|0)==1){a=0;break e}else{o=a?o:c;f=a?s:f-s|0}}a=l+u|0;n=$2(t[e+(a<<2)>>2]|0,h)|0;a=$2(t[e+(a+1<<2)>>2]|0,h)|0;if(a>>>0>>0&n>>>0<(A-a|0)>>>0)a=(i[e+(a+n)>>0]|0)==0?e+a|0:0;else a=0}else a=0}while(0);return a|0}function $2(e,A){e=e|0;A=A|0;var r=0;r=Z6(e|0)|0;return((A|0)==0?e:r)|0}function e1(e,A){e=e|0;A=A|0;var r=0,a=0;r=i[e>>0]|0;a=i[A>>0]|0;if(r<<24>>24==0?1:r<<24>>24!=a<<24>>24)e=a;else{do{e=e+1|0;A=A+1|0;r=i[e>>0]|0;a=i[A>>0]|0}while(!(r<<24>>24==0?1:r<<24>>24!=a<<24>>24));e=a}return(r&255)-(e&255)|0}function A1(e){e=e|0;return O2(e,t[(r1()|0)+188>>2]|0)|0}function r1(){return i1()|0}function i1(){return 62976}function a1(e,A,r){e=+e;A=+A;r=r|0;var i=0.0,a=0.0,t=0.0;t=e*e;i=t*(t*t)*(t*1.58969099521155e-10+-2.5050760253406863e-08)+(t*(t*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);a=t*e;if(!r)e=a*(t*i+-.16666666666666632)+e;else e=e-(a*.16666666666666632+(t*(A*.5-a*i)-A));return+e}function t1(e){e=+e;var A=0,r=0,i=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0;c[u>>3]=e;A=t[u>>2]|0;r=t[u+4>>2]|0;i=(r|0)<0;do{if(i|r>>>0<1048576){if((A|0)==0&(r&2147483647|0)==0){e=-1.0/(e*e);break}if(i){e=(e-e)/0.0;break}else{c[u>>3]=e*18014398509481984.0;r=t[u+4>>2]|0;i=-1077;A=t[u>>2]|0;a=9;break}}else if(r>>>0<=2146435071)if((A|0)==0&0==0&(r|0)==1072693248)e=0.0;else{i=-1023;a=9}}while(0);if((a|0)==9){a=r+614242|0;t[u>>2]=A;t[u+4>>2]=(a&1048575)+1072079006;o=+c[u>>3]+-1.0;l=o*(o*.5);f=o/(o+2.0);s=f*f;n=s*s;c[u>>3]=o-l;r=t[u+4>>2]|0;t[u>>2]=0;t[u+4>>2]=r;e=+c[u>>3];n=o-e-l+f*(l+(n*(n*(n*.15313837699209373+.22222198432149784)+.3999999999940942)+s*(n*(n*(n*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));s=e*1.4426950407214463;l=+(i+(a>>>20)|0);f=s+l;e=f+(s+(l-f)+(n*1.4426950407214463+(n+e)*1.6751713164886512e-10))}return+e}function n1(e,A){e=+e;A=A|0;var r=0,i=0,a=0;c[u>>3]=e;r=t[u>>2]|0;i=t[u+4>>2]|0;a=y6(r|0,i|0,52)|0;switch(a&2047){case 0:{if(e!=0.0){e=+n1(e*18446744073709551616.0,A);r=(t[A>>2]|0)+-64|0}else r=0;t[A>>2]=r;break}case 2047:break;default:{t[A>>2]=(a&2047)+-1022;t[u>>2]=r;t[u+4>>2]=i&-2146435073|1071644672;e=+c[u>>3]}}return+e}function f1(e,A){e=+e;A=+A;var r=0.0,i=0.0,a=0.0,t=0.0;r=e*e;i=r*r;a=r*.5;t=1.0-a;return+(t+(1.0-t-a+(r*(r*(r*(r*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+i*i*(r*(2.087572321298175e-09-r*1.1359647557788195e-11)+-2.7557314351390663e-07))-e*A)))}function l1(e){e=+e;var A=0,r=0,i=0,a=0,n=0.0,f=0.0,l=0.0,s=0.0,o=0.0;c[u>>3]=e;A=t[u>>2]|0;r=t[u+4>>2]|0;i=(r|0)<0;do{if(i|r>>>0<1048576){if((A|0)==0&(r&2147483647|0)==0){e=-1.0/(e*e);break}if(i){e=(e-e)/0.0;break}else{c[u>>3]=e*18014398509481984.0;r=t[u+4>>2]|0;i=-1077;A=t[u>>2]|0;a=9;break}}else if(r>>>0<=2146435071)if((A|0)==0&0==0&(r|0)==1072693248)e=0.0;else{i=-1023;a=9}}while(0);if((a|0)==9){a=r+614242|0;t[u>>2]=A;t[u+4>>2]=(a&1048575)+1072079006;l=+c[u>>3]+-1.0;f=l*(l*.5);s=l/(l+2.0);o=s*s;n=o*o;c[u>>3]=l-f;r=t[u+4>>2]|0;t[u>>2]=0;t[u+4>>2]=r;e=+c[u>>3];n=l-e-f+s*(f+(n*(n*(n*.15313837699209373+.22222198432149784)+.3999999999940942)+o*(n*(n*(n*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));o=e*.4342944818781689;f=+(i+(a>>>20)|0);s=f*.30102999566361177;l=s+o;e=l+(o+(s-l)+(n*.4342944818781689+(f*3.694239077158931e-13+(n+e)*2.5082946711645275e-11)))}return+e}function s1(e,A){e=+e;A=A|0;var r=0,i=0.0,a=0.0,n=0.0,f=0,l=0.0,s=0,o=0,b=0,w=0,k=0,d=0,v=0.0;d=h;h=h+48|0;s=d+16|0;o=d;c[u>>3]=e;r=t[u>>2]|0;f=t[u+4>>2]|0;b=y6(r|0,f|0,63)|0;k=f&2147483647;do{if(k>>>0<1074752123)if((f&1048575|0)!=598523){r=(b|0)!=0;if(k>>>0<1073928573)if(r){n=e+1.5707963267341256;l=n+6.077100506506192e-11;c[A>>3]=l;c[A+8>>3]=n-l+6.077100506506192e-11;r=-1;break}else{n=e+-1.5707963267341256;l=n+-6.077100506506192e-11;c[A>>3]=l;c[A+8>>3]=n-l+-6.077100506506192e-11;r=1;break}else if(r){n=e+3.1415926534682512;l=n+1.2154201013012384e-10;c[A>>3]=l;c[A+8>>3]=n-l+1.2154201013012384e-10;r=-2;break}else{n=e+-3.1415926534682512;l=n+-1.2154201013012384e-10;c[A>>3]=l;c[A+8>>3]=n-l+-1.2154201013012384e-10;r=2;break}}else w=21;else{if(k>>>0<1075594812)if(k>>>0<1075183037){if((k|0)==1074977148){w=21;break}if(!b){n=e+-4.712388980202377;l=n+-1.8231301519518578e-10;c[A>>3]=l;c[A+8>>3]=n-l+-1.8231301519518578e-10;r=3;break}else{n=e+4.712388980202377;l=n+1.8231301519518578e-10;c[A>>3]=l;c[A+8>>3]=n-l+1.8231301519518578e-10;r=-3;break}}else{if((k|0)==1075388923){w=21;break}if(!b){n=e+-6.2831853069365025;l=n+-2.430840202602477e-10;c[A>>3]=l;c[A+8>>3]=n-l+-2.430840202602477e-10;r=4;break}else{n=e+6.2831853069365025;l=n+2.430840202602477e-10;c[A>>3]=l;c[A+8>>3]=n-l+2.430840202602477e-10;r=-4;break}}if(k>>>0>=1094263291){if(k>>>0>2146435071){l=e-e;c[A+8>>3]=l;c[A>>3]=l;r=0;break}t[u>>2]=r;t[u+4>>2]=f&1048575|1096810496;e=+c[u>>3];r=0;do{l=+(~~e|0);c[s+(r<<3)>>3]=l;e=(e-l)*16777216.0;r=r+1|0}while((r|0)!=2);c[s+16>>3]=e;if(e==0.0){r=1;while(1)if(+c[s+(r<<3)>>3]==0.0)r=r+-1|0;else break}else r=2;r=c1(s,o,(k>>>20)+-1046|0,r+1|0,1)|0;e=+c[o>>3];if(!b){c[A>>3]=e;c[A+8>>3]=+c[o+8>>3];break}else{c[A>>3]=-e;c[A+8>>3]=-+c[o+8>>3];r=0-r|0;break}}else w=21}}while(0);if((w|0)==21){n=e*.6366197723675814+6755399441055744.0+-6755399441055744.0;r=~~n;i=e-n*1.5707963267341256;a=n*6.077100506506192e-11;e=i-a;c[A>>3]=e;c[u>>3]=e;w=y6(t[u>>2]|0,t[u+4>>2]|0,52)|0;f=k>>>20;if((f-(w&2047)|0)>16){a=n*6.077100506303966e-11;l=i-a;a=n*2.0222662487959506e-21-(i-l-a);e=l-a;c[A>>3]=e;c[u>>3]=e;k=y6(t[u>>2]|0,t[u+4>>2]|0,52)|0;v=n*2.0222662487111665e-21;i=l-v;n=n*8.4784276603689e-32-(l-i-v);if((f-(k&2047)|0)>49){e=i-n;c[A>>3]=e;a=n}else i=l}c[A+8>>3]=i-e-a}h=d;return r|0}function c1(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0.0,f=0.0,l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,Q=0,D=0,z=0,W=0,Y=0.0;W=h;h=h+560|0;Z=W+480|0;C=W+320|0;z=W+160|0;Q=W;G=t[63220+(a<<2)>>2]|0;w=i+-1|0;y=(r+-3|0)/24|0;y=(y|0)>0?y:0;I=P(y,-24)|0;l=r+-24+I|0;if((G+w|0)>=0){u=G+i|0;s=y-w|0;o=0;while(1){if((s|0)<0)n=0.0;else n=+(t[63236+(s<<2)>>2]|0);c[C+(o<<3)>>3]=n;o=o+1|0;if((o|0)==(u|0))break;else s=s+1|0}}b=(i|0)>0;u=0;while(1){if(b){o=u+w|0;n=0.0;s=0;do{n=n+ +c[e+(s<<3)>>3]*+c[C+(o-s<<3)>>3];s=s+1|0}while((s|0)!=(i|0))}else n=0.0;c[Q+(u<<3)>>3]=n;if((u|0)<(G|0))u=u+1|0;else break}g=(l|0)>0;m=24-l|0;p=23-l|0;E=(i|0)>0;B=(l|0)==0;s=G;e:while(1){n=+c[Q+(s<<3)>>3];b=(s|0)>0;if(b){o=s;u=0;while(1){f=+(~~(n*5.9604644775390625e-08)|0);t[Z+(u<<2)>>2]=~~(n-f*16777216.0);v=o;o=o+-1|0;n=+c[Q+(o<<3)>>3]+f;if((v|0)<=1)break;else u=u+1|0}}n=+o1(n,l);n=n-+L(+(n*.125))*8.0;o=~~n;n=n-+(o|0);do{if(!g)if(!B)if(!(n>=.5)){w=0;v=o;break}else{u=2;D=20;break}else{u=t[Z+(s+-1<<2)>>2]>>23;D=19;break}else{v=Z+(s+-1<<2)|0;u=t[v>>2]|0;D=u>>m;u=u-(D<>2]=u;u=u>>p;o=D+o|0;D=19}}while(0);if((D|0)==19){D=0;if((u|0)>0)D=20;else{w=u;v=o}}if((D|0)==20){D=0;v=o+1|0;if(b){o=0;d=0;do{w=Z+(d<<2)|0;k=t[w>>2]|0;if(!o)if(!k)o=0;else{o=1;b=16777216;D=23}else{b=16777215;D=23}if((D|0)==23){D=0;t[w>>2]=b-k}d=d+1|0}while((d|0)!=(s|0))}else o=0;A:do{if(g){switch(l|0){case 1:{b=8388607;break}case 2:{b=4194303;break}default:break A}d=Z+(s+-1<<2)|0;t[d>>2]=t[d>>2]&b}}while(0);if((u|0)==2){n=1.0-n;if(!o)w=2;else{w=2;n=n-+o1(1.0,l)}}else w=u}if(!(n==0.0)){D=42;break}if((s|0)>(G|0)){o=0;u=s;do{u=u+-1|0;o=t[Z+(u<<2)>>2]|o}while((u|0)>(G|0));if(o){D=41;break}else o=1}else o=1;while(1)if(!(t[Z+(G-o<<2)>>2]|0))o=o+1|0;else break;b=o+s|0;if((o|0)<=0){s=b;continue}while(1){u=s+1|0;o=s+i|0;c[C+(o<<3)>>3]=+(t[63236+(u+y<<2)>>2]|0);if(E){n=0.0;s=0;do{n=n+ +c[e+(s<<3)>>3]*+c[C+(o-s<<3)>>3];s=s+1|0}while((s|0)!=(i|0))}else n=0.0;c[Q+(u<<3)>>3]=n;if((u|0)<(b|0))s=u;else{s=b;continue e}}}if((D|0)==41)while(1){D=0;l=l+-24|0;s=s+-1|0;if(!(t[Z+(s<<2)>>2]|0))D=41;else{b=s;break}}else if((D|0)==42){n=+o1(n,0-l|0);if(n>=16777216.0){f=+(~~(n*5.9604644775390625e-08)|0);t[Z+(s<<2)>>2]=~~(n-f*16777216.0);l=I+r|0;s=s+1|0;n=f}t[Z+(s<<2)>>2]=~~n;b=s}u=(b|0)>-1;if(u){n=+o1(1.0,l);l=b;while(1){c[Q+(l<<3)>>3]=n*+(t[Z+(l<<2)>>2]|0);if((l|0)>0){n=n*5.9604644775390625e-08;l=l+-1|0}else break}if(u){s=b;while(1){o=b-s|0;l=0;n=0.0;while(1){n=n+ +c[10904+(l<<3)>>3]*+c[Q+(l+s<<3)>>3];if((l|0)>=(G|0)|(l|0)>=(o|0))break;else l=l+1|0}c[z+(o<<3)>>3]=n;if((s|0)>0)s=s+-1|0;else break}}}switch(a|0){case 0:{if(u){n=0.0;l=b;while(1){n=n+ +c[z+(l<<3)>>3];if((l|0)>0)l=l+-1|0;else break}}else n=0.0;f=(w|0)==0?n:-n;D=73;break}case 2:case 1:{if(u){n=0.0;l=b;while(1){n=n+ +c[z+(l<<3)>>3];if((l|0)>0)l=l+-1|0;else break}}else n=0.0;s=(w|0)==0;c[A>>3]=s?n:-n;n=+c[z>>3]-n;if((b|0)>=1){l=1;while(1){n=n+ +c[z+(l<<3)>>3];if((l|0)==(b|0))break;else l=l+1|0}}f=s?n:-n;A=A+8|0;D=73;break}case 3:{if((b|0)>0){l=b;n=+c[z+(b<<3)>>3];do{D=l;l=l+-1|0;Q=z+(l<<3)|0;f=+c[Q>>3];Y=n;n=f+n;c[z+(D<<3)>>3]=Y+(f-n);c[Q>>3]=n}while((D|0)>1);s=(b|0)>1;if(s){l=b;n=+c[z+(b<<3)>>3];do{D=l;l=l+-1|0;Q=z+(l<<3)|0;Y=+c[Q>>3];f=n;n=Y+n;c[z+(D<<3)>>3]=f+(Y-n);c[Q>>3]=n}while((D|0)>2);if(s){l=b;f=0.0;while(1){f=f+ +c[z+(l<<3)>>3];if((l|0)>2)l=l+-1|0;else break}}else f=0.0}else f=0.0}else f=0.0;n=+c[z>>3];if(!w){c[A>>3]=n;n=+c[z+8>>3]}else{c[A>>3]=-n;f=-f;n=-+c[z+8>>3]}c[A+8>>3]=n;A=A+16|0;D=73;break}default:{}}if((D|0)==73)c[A>>3]=f;h=W;return v&7|0}function o1(e,A){e=+e;A=A|0;var r=0,i=0;if((A|0)<=1023){if((A|0)<-1022){e=e*2.2250738585072014e-308;i=(A|0)<-2044;r=A+2044|0;e=i?e*2.2250738585072014e-308:e;A=i?(r|0)>-1022?r:-1022:A+1022|0}}else{e=e*8988465674311579538646525.0e283;r=(A|0)>2046;i=A+-2046|0;e=r?e*8988465674311579538646525.0e283:e;A=r?(i|0)<1023?i:1023:A+-1023|0}r=C6(A+1023|0,0,52)|0;i=G;t[u>>2]=r;t[u+4>>2]=i;return+(e*+c[u>>3])}function u1(e){e=+e;var A=0,r=0,i=0,a=0.0,n=0.0;c[u>>3]=e;r=t[u+4>>2]|0;A=r&2147483647;do{if(A>>>0>2146435071)e=e+e;else{if(A>>>0<1048576){c[u>>3]=e*18014398509481984.0;r=t[u+4>>2]|0;A=r&2147483647;if(!A)break;else i=696219795}else i=715094163;t[u>>2]=0;t[u+4>>2]=((A>>>0)/3|0)+i|r&-2147483648;a=+c[u>>3];n=a*a*(a/e);c[u>>3]=(n*(n*n)*(n*.14599619288661245+-.758397934778766)+(n*(n*1.6214297201053545+-1.8849797954337717)+1.87595182427177))*a;r=d6(t[u>>2]|0,t[u+4>>2]|0,-2147483648,0)|0;i=G;t[u>>2]=r&-1073741824;t[u+4>>2]=i;a=+c[u>>3];e=e/(a*a);e=(e-a)/(a+a+e)*a+a}}while(0);return+e}function b1(e,A){e=+e;A=+A;var r=0,i=0;c[u>>3]=e;i=t[u>>2]|0;r=t[u+4>>2]|0;c[u>>3]=A;r=t[u+4>>2]&-2147483648|r&2147483647;t[u>>2]=i;t[u+4>>2]=r;return+ +c[u>>3]}function h1(e,A){e=+e;A=+A;return+ +b1(e,A)}function w1(e,A){e=+e;A=A|0;return+ +o1(e,A)}function k1(e,A){e=+e;A=+A;return+ +d1(e,A)}function d1(e,A){e=+e;A=+A;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,o=0,b=0,h=0,w=0,k=0;c[u>>3]=e;f=t[u>>2]|0;s=t[u+4>>2]|0;c[u>>3]=A;b=t[u>>2]|0;h=t[u+4>>2]|0;i=y6(f|0,s|0,52)|0;i=i&2047;o=y6(b|0,h|0,52)|0;o=o&2047;w=s&-2147483648;n=C6(b|0,h|0,1)|0;l=G;e:do{if(!((n|0)==0&(l|0)==0)?(a=v1(A)|0,r=G&2147483647,!((i|0)==2047|(r>>>0>2146435072|(r|0)==2146435072&a>>>0>0))):0){r=C6(f|0,s|0,1)|0;a=G;if(!(a>>>0>l>>>0|(a|0)==(l|0)&r>>>0>n>>>0))return+((r|0)==(n|0)&(a|0)==(l|0)?e*0.0:e);if(!i){r=C6(f|0,s|0,12)|0;a=G;if((a|0)>-1|(a|0)==-1&r>>>0>4294967295){i=0;do{i=i+-1|0;r=C6(r|0,a|0,1)|0;a=G}while((a|0)>-1|(a|0)==-1&r>>>0>4294967295)}else i=0;f=C6(f|0,s|0,1-i|0)|0;n=G}else n=s&1048575|1048576;if(!o){a=C6(b|0,h|0,12)|0;l=G;if((l|0)>-1|(l|0)==-1&a>>>0>4294967295){r=0;do{r=r+-1|0;a=C6(a|0,l|0,1)|0;l=G}while((l|0)>-1|(l|0)==-1&a>>>0>4294967295)}else r=0;b=C6(b|0,h|0,1-r|0)|0;o=r;s=G}else s=h&1048575|1048576;a=v6(f|0,n|0,b|0,s|0)|0;r=G;l=(r|0)>-1|(r|0)==-1&a>>>0>4294967295;A:do{if((i|0)>(o|0)){while(1){if(l){if((a|0)==0&(r|0)==0)break}else{a=f;r=n}f=C6(a|0,r|0,1)|0;n=G;i=i+-1|0;a=v6(f|0,n|0,b|0,s|0)|0;r=G;l=(r|0)>-1|(r|0)==-1&a>>>0>4294967295;if((i|0)<=(o|0))break A}A=e*0.0;break e}}while(0);if(l){if((a|0)==0&(r|0)==0){A=e*0.0;break}}else{r=n;a=f}if(r>>>0<1048576|(r|0)==1048576&a>>>0<0)do{a=C6(a|0,r|0,1)|0;r=G;i=i+-1|0}while(r>>>0<1048576|(r|0)==1048576&a>>>0<0);if((i|0)>0){h=d6(a|0,r|0,0,-1048576)|0;r=G;i=C6(i|0,0,52)|0;r=r|G;i=h|i}else{i=y6(a|0,r|0,1-i|0)|0;r=G}t[u>>2]=i;t[u+4>>2]=r|w;A=+c[u>>3]}else k=3}while(0);if((k|0)==3){A=e*A;A=A/A}return+A}function v1(e){e=+e;var A=0;c[u>>3]=e;A=t[u>>2]|0;G=t[u+4>>2]|0;return A|0}function g1(e,A){e=+e;A=+A;var r=0.0,i=0,a=0,n=0,f=0,l=0.0,s=0,o=0,b=0,w=0,k=0,d=0,v=0,g=0;k=h;h=h+32|0;s=k+24|0;o=k+16|0;b=k+8|0;w=k;c[u>>3]=e;g=t[u>>2]|0;n=t[u+4>>2]|0;c[u>>3]=A;i=t[u>>2]|0;n=n&2147483647;a=t[u+4>>2]&2147483647;f=n>>>0>>0|(n|0)==(a|0)&g>>>0>>0;v=f?i:g;d=f?a:n;i=f?g:i;a=f?n:a;n=y6(v|0,d|0,52)|0;f=y6(i|0,a|0,52)|0;t[u>>2]=v;t[u+4>>2]=d;e=+c[u>>3];t[u>>2]=i;t[u+4>>2]=a;l=+c[u>>3];do{if((f|0)!=2047){if(!((i|0)==0&(a|0)==0|(n|0)==2047)){if((n-f|0)>64){e=e+l;break}if((n|0)>1533){r=5260135901548373507240989.0e186;A=e*1.90109156629516e-211;e=l*1.90109156629516e-211}else{g=(f|0)<573;r=g?1.90109156629516e-211:1.0;A=g?e*5260135901548373507240989.0e186:e;e=g?l*5260135901548373507240989.0e186:l}m1(s,o,A);m1(b,w,e);e=r*+D(+(+c[w>>3]+ +c[o>>3]+ +c[b>>3]+ +c[s>>3]))}}else e=l}while(0);h=k;return+e}function m1(e,A,r){e=e|0;A=A|0;r=+r;var i=0.0,a=0.0;a=r*134217729.0;a=a+(r-a);i=r-a;r=r*r;c[e>>3]=r;c[A>>3]=i*i+(a*a-r+a*2.0*i);return}function p1(e,A,r){e=+e;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0.0,l=0,s=0;l=h;h=h+16|0;n=l;c[u>>3]=e;a=t[u+4>>2]&2147483647;do{if(a>>>0<1072243196)if(a>>>0<1044816030){c[A>>3]=e;c[r>>3]=1.0;break}else{c[A>>3]=+a1(e,0.0,0);c[r>>3]=+f1(e,0.0);break}else{if(a>>>0>2146435071){f=e-e;c[r>>3]=f;c[A>>3]=f;break}a=s1(e,n)|0;s=n+8|0;i=+a1(+c[n>>3],+c[s>>3],1);e=+f1(+c[n>>3],+c[s>>3]);switch(a&3){case 0:{c[A>>3]=i;f=e;break}case 1:{c[A>>3]=e;f=-i;break}case 2:{c[A>>3]=-i;f=-e;break}case 3:{c[A>>3]=-e;f=i;break}default:{}}c[r>>3]=f}}while(0);h=l;return}function E1(e,A){e=+e;A=A|0;return+ +n1(e,A)}function B1(e){e=e|0;if(e>>>0<131072)e=(n[146423+((n[146423+(e>>>8)>>0]|0)<<5|e>>>3&31)>>0]|0)>>>(e&7)&1;else e=0;return e|0}function y1(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0;if(!r)a=0;else{a=i[e>>0]|0;e:do{if(!(a<<24>>24))a=0;else while(1){r=r+-1|0;t=i[A>>0]|0;if(!(a<<24>>24==t<<24>>24&((r|0)!=0&t<<24>>24!=0)))break e;e=e+1|0;A=A+1|0;a=i[e>>0]|0;if(!(a<<24>>24)){a=0;break}}}while(0);a=(a&255)-(n[A>>0]|0)|0}return a|0}function C1(e,A){e=e|0;A=A|0;e=j2(e,A)|0;return((i[e>>0]|0)==(A&255)<<24>>24?e:0)|0}function I1(e){e=e|0;return((e|0)==32|(e+-9|0)>>>0<5)&1|0}function Z1(e,A,r){e=e|0;A=A|0;r=r|0;r=L1(e,A,r,-1,0)|0;return r|0}function G1(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;f=A&255;a=(r|0)!=0;e:do{if(a&(e&3|0)!=0){n=A&255;while(1){if((i[e>>0]|0)==n<<24>>24){l=6;break e}e=e+1|0;r=r+-1|0;a=(r|0)!=0;if(!(a&(e&3|0)!=0)){l=5;break}}}else l=5}while(0);if((l|0)==5)if(a)l=6;else r=0;e:do{if((l|0)==6){n=A&255;if((i[e>>0]|0)!=n<<24>>24){a=P(f,16843009)|0;A:do{if(r>>>0>3)while(1){f=t[e>>2]^a;if((f&-2139062144^-2139062144)&f+-16843009|0)break;e=e+4|0;r=r+-4|0;if(r>>>0<=3){l=11;break A}}else l=11}while(0);if((l|0)==11)if(!r){r=0;break}while(1){if((i[e>>0]|0)==n<<24>>24)break e;e=e+1|0;r=r+-1|0;if(!r){r=0;break}}}}}while(0);return(r|0?e:0)|0}function L1(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0;s=h;h=h+128|0;f=s;t[f>>2]=0;l=f+4|0;t[l>>2]=e;t[f+44>>2]=e;n=f+8|0;t[n>>2]=(e|0)<0?-1:e+2147483647|0;t[f+76>>2]=-1;Q1(f,0);r=D1(f,r,1,i,a)|0;if(A|0)t[A>>2]=e+((t[l>>2]|0)+(t[f+108>>2]|0)-(t[n>>2]|0));h=s;return r|0}function Q1(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;t[e+104>>2]=A;r=t[e+8>>2]|0;i=t[e+4>>2]|0;a=r-i|0;t[e+108>>2]=a;t[e+100>>2]=(A|0)!=0&(a|0)>(A|0)?i+A|0:r;return}function D1(e,A,r,a,f){e=e|0;A=A|0;r=r|0;a=a|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;e:do{if(A>>>0>36){t[(R2()|0)>>2]=22;f=0;a=0}else{d=e+4|0;k=e+100|0;do{l=t[d>>2]|0;if(l>>>0<(t[k>>2]|0)>>>0){t[d>>2]=l+1;l=n[l>>0]|0}else l=z1(e)|0}while((I1(l)|0)!=0);A:do{switch(l|0){case 43:case 45:{l=((l|0)==45)<<31>>31;s=t[d>>2]|0;if(s>>>0<(t[k>>2]|0)>>>0){t[d>>2]=s+1;w=l;l=n[s>>0]|0;break A}else{w=l;l=z1(e)|0;break A}}default:w=0}}while(0);s=(A|0)==0;do{if((A|16|0)==16&(l|0)==48){l=t[d>>2]|0;if(l>>>0<(t[k>>2]|0)>>>0){t[d>>2]=l+1;l=n[l>>0]|0}else l=z1(e)|0;if((l|32|0)!=120)if(s){A=8;b=46;break}else{b=32;break}l=t[d>>2]|0;if(l>>>0<(t[k>>2]|0)>>>0){t[d>>2]=l+1;l=n[l>>0]|0}else l=z1(e)|0;if((n[149592+l>>0]|0)>15){a=(t[k>>2]|0)==0;if(!a)t[d>>2]=(t[d>>2]|0)+-1;if(!r){Q1(e,0);f=0;a=0;break e}if(a){f=0;a=0;break e}t[d>>2]=(t[d>>2]|0)+-1;f=0;a=0;break e}else{A=16;b=46}}else{A=s?10:A;if(A>>>0>(n[149592+l>>0]|0)>>>0)b=32;else{if(t[k>>2]|0)t[d>>2]=(t[d>>2]|0)+-1;Q1(e,0);t[(R2()|0)>>2]=22;f=0;a=0;break e}}}while(0);A:do{if((b|0)==32)if((A|0)==10){A=l+-48|0;if(A>>>0<10){l=0;s=A;do{l=(l*10|0)+s|0;A=t[d>>2]|0;if(A>>>0<(t[k>>2]|0)>>>0){t[d>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0;s=A+-48|0}while(s>>>0<10&l>>>0<429496729);r=0}else{A=l;l=0;r=0}c=A+-48|0;if(c>>>0<10){s=A;do{A=k6(l|0,r|0,10,0)|0;o=G;u=((c|0)<0)<<31>>31;h=~u;if(o>>>0>h>>>0|(o|0)==(h|0)&A>>>0>~c>>>0){A=10;b=72;break A}l=d6(A|0,o|0,c|0,u|0)|0;r=G;A=t[d>>2]|0;if(A>>>0<(t[k>>2]|0)>>>0){t[d>>2]=A+1;s=n[A>>0]|0}else s=z1(e)|0;c=s+-48|0}while(c>>>0<10&(r>>>0<429496729|(r|0)==429496729&l>>>0<2576980378));if(c>>>0>9){s=w;A=r}else{A=10;b=72}}else{s=w;A=r}}else b=46}while(0);A:do{if((b|0)==46){if(!(A+-1&A)){b=i[149848+((A*23|0)>>>5&7)>>0]|0;r=i[149592+l>>0]|0;s=r&255;if(A>>>0>s>>>0){l=0;c=s;do{l=c|l<>2]|0;if(s>>>0<(t[k>>2]|0)>>>0){t[d>>2]=s+1;s=n[s>>0]|0}else s=z1(e)|0;r=i[149592+s>>0]|0;c=r&255}while(l>>>0<134217728&A>>>0>c>>>0);c=0}else{s=l;c=0;l=0}o=y6(-1,-1,b|0)|0;u=G;if(A>>>0<=(r&255)>>>0|(u>>>0>>0|(u|0)==(c|0)&o>>>0>>0)){r=c;b=72;break}else s=c;while(1){l=C6(l|0,s|0,b|0)|0;c=G;l=l|r&255;s=t[d>>2]|0;if(s>>>0<(t[k>>2]|0)>>>0){t[d>>2]=s+1;s=n[s>>0]|0}else s=z1(e)|0;r=i[149592+s>>0]|0;if(A>>>0<=(r&255)>>>0|(c>>>0>u>>>0|(c|0)==(u|0)&l>>>0>o>>>0)){r=c;b=72;break A}else s=c}}r=i[149592+l>>0]|0;s=r&255;if(A>>>0>s>>>0){l=0;c=s;do{l=c+(P(l,A)|0)|0;s=t[d>>2]|0;if(s>>>0<(t[k>>2]|0)>>>0){t[d>>2]=s+1;s=n[s>>0]|0}else s=z1(e)|0;r=i[149592+s>>0]|0;c=r&255}while(l>>>0<119304647&A>>>0>c>>>0);c=0}else{s=l;l=0;c=0}if(A>>>0>(r&255)>>>0){b=p6(-1,-1,A|0,0)|0;h=G;u=c;while(1){if(u>>>0>h>>>0|(u|0)==(h|0)&l>>>0>b>>>0){r=u;b=72;break A}c=k6(l|0,u|0,A|0,0)|0;o=G;r=r&255;if(o>>>0>4294967295|(o|0)==-1&c>>>0>~r>>>0){r=u;b=72;break A}l=d6(c|0,o|0,r|0,0)|0;c=G;s=t[d>>2]|0;if(s>>>0<(t[k>>2]|0)>>>0){t[d>>2]=s+1;s=n[s>>0]|0}else s=z1(e)|0;r=i[149592+s>>0]|0;if(A>>>0<=(r&255)>>>0){r=c;b=72;break}else u=c}}else{r=c;b=72}}}while(0);if((b|0)==72)if(A>>>0>(n[149592+s>>0]|0)>>>0){do{l=t[d>>2]|0;if(l>>>0<(t[k>>2]|0)>>>0){t[d>>2]=l+1;l=n[l>>0]|0}else l=z1(e)|0}while(A>>>0>(n[149592+l>>0]|0)>>>0);t[(R2()|0)>>2]=34;s=(a&1|0)==0&0==0?w:0;A=f;l=a}else{s=w;A=r}if(t[k>>2]|0)t[d>>2]=(t[d>>2]|0)+-1;if(!(A>>>0>>0|(A|0)==(f|0)&l>>>0>>0)){if(!((a&1|0)!=0|0!=0|(s|0)!=0)){t[(R2()|0)>>2]=34;a=d6(a|0,f|0,-1,-1)|0;f=G;break}if(A>>>0>f>>>0|(A|0)==(f|0)&l>>>0>a>>>0){t[(R2()|0)>>2]=34;break}}a=((s|0)<0)<<31>>31;a=v6(l^s|0,A^a|0,s|0,a|0)|0;f=G}}while(0);G=f;return a|0}function z1(e){e=e|0;var A=0,r=0,a=0,f=0,l=0,s=0;r=e+104|0;f=t[r>>2]|0;if((f|0)!=0?(t[e+108>>2]|0)>=(f|0):0)l=4;else{A=W1(e)|0;if((A|0)>=0){a=t[r>>2]|0;r=e+8|0;if(a){s=t[r>>2]|0;f=t[e+4>>2]|0;r=a-(t[e+108>>2]|0)|0;a=s;if((s-f|0)<(r|0))r=a;else r=f+(r+-1)|0}else{a=t[r>>2]|0;r=a}t[e+100>>2]=r;r=e+4|0;if(!a)r=t[r>>2]|0;else{r=t[r>>2]|0;s=e+108|0;t[s>>2]=a+1-r+(t[s>>2]|0)}r=r+-1|0;if((A|0)!=(n[r>>0]|0|0))i[r>>0]=A}else l=4}if((l|0)==4){t[e+100>>2]=0;A=-1}return A|0}function W1(e){e=e|0;var A=0,r=0;r=h;h=h+16|0;A=r;if((Y1(e)|0)==0?(L5[t[e+32>>2]&63](e,A,1)|0)==1:0)e=n[A>>0]|0;else e=-1;h=r;return e|0}function Y1(e){e=e|0;var A=0,r=0;A=e+74|0;r=i[A>>0]|0;i[A>>0]=r+255|r;A=e+20|0;r=e+28|0;if((t[A>>2]|0)>>>0>(t[r>>2]|0)>>>0)L5[t[e+36>>2]&63](e,0,0)|0;t[e+16>>2]=0;t[r>>2]=0;t[A>>2]=0;A=t[e>>2]|0;if(!(A&4)){r=(t[e+44>>2]|0)+(t[e+48>>2]|0)|0;t[e+8>>2]=r;t[e+4>>2]=r;A=A<<27>>31}else{t[e>>2]=A|32;A=-1}return A|0}function F1(e){e=e|0;return(e+-48|0)>>>0<10|0}function M1(e){e=e|0;return((e+-48|0)>>>0<10|(V1(e)|0)!=0)&1|0}function V1(e){e=e|0;return((e|32)+-97|0)>>>0<26|0}function N1(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;r=i[e>>0]|0;e:do{if(!(r<<24>>24))r=0;else{t=r&255;while(1){a=i[A>>0]|0;if(!(a<<24>>24))break e;if(r<<24>>24!=a<<24>>24?(t=R1(t)|0,(t|0)!=(R1(a&255)|0)):0)break e;e=e+1|0;A=A+1|0;r=i[e>>0]|0;if(!(r<<24>>24)){r=0;break}else t=r&255}}}while(0);t=R1(r&255)|0;return t-(R1(n[A>>0]|0)|0)|0}function R1(e){e=e|0;var A=0;A=(x1(e)|0)==0;return(A?e:e|32)|0}function x1(e){e=e|0;return(e+-65|0)>>>0<26|0}function J1(e){e=e|0;return H1(e,0)|0}function H1(e,A){e=e|0;A=A|0;var r=0,t=0,l=0,s=0,c=0,o=0,u=0;c=(A<<1)+-1|0;o=A+-1|0;e:do{if(!((e+-43008|0)>>>0<22272|((e+-11776|0)>>>0<30784|((e+-1536|0)>>>0<2560|(P1(e)|0)==0)))){r=(A|0)!=0;if(r&(e+-4256|0)>>>0<46){if((e|0)>4293)switch(e|0){case 4295:case 4301:break;default:break e}e=e+7264|0;break}if((e+-11520|0)>>>0<38&(r^1)){e=e+-7264|0;break}else r=0;do{l=i[66346+(r<<2)+2>>0]|0;s=l<<24>>24;t=e-(f[66346+(r<<2)>>1]|0)|0;if((t-(o&s)|0)>>>0<(n[66346+(r<<2)+3>>0]|0)>>>0){u=11;break}r=r+1|0}while((r|0)!=61);if((u|0)==11)if(l<<24>>24==1){e=A+e-(t&1)|0;break}else{e=(P(c,s)|0)+e|0;break}l=1-A|0;r=a[65858+(l<<1)>>1]|0;A:do{if(r<<16>>16){t=0;while(1){if((r&65535|0)==(e|0))break;t=t+1|0;r=a[65858+(t<<2)+(l<<1)>>1]|0;if(!(r<<16>>16))break A}e=f[65858+(t<<2)+(A<<1)>>1]|0;break e}}while(0);return((e+-66600+(A*40|0)|0)>>>0<40?e+-40+(A*80|0)|0:e)|0}}while(0);return e|0}function P1(e){e=e|0;if(e>>>0<131072)e=(n[149857+((n[149857+(e>>>8)>>0]|0)<<5|e>>>3&31)>>0]|0)>>>(e&7)&1;else e=e>>>0<196606&1;return e|0}function X1(e){e=e|0;var A=0;A=e;while(1)if(!(t[A>>2]|0))break;else A=A+4|0;return A-e>>2|0}function S1(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0,f=0;if(!r)e=0;else{a=i[e>>0]|0;e:do{if(!(a<<24>>24))e=0;else{f=e;e=a;a=a&255;while(1){r=r+-1|0;t=i[A>>0]|0;if(!((r|0)!=0&t<<24>>24!=0))break e;if(e<<24>>24!=t<<24>>24?(a=R1(a)|0,(a|0)!=(R1(t&255)|0)):0)break e;f=f+1|0;A=A+1|0;a=i[f>>0]|0;if(!(a<<24>>24)){e=0;break}else{e=a;a=a&255}}}}while(0);e=R1(e&255)|0;e=e-(R1(n[A>>0]|0)|0)|0}return e|0}function j1(e){e=e|0;if(e>>>0>=255)if((e+-57344|0)>>>0<8185|(e>>>0<8232|(e+-8234|0)>>>0<47062))e=1;else return(e&65534|0)!=65534&(e+-65532|0)>>>0<1048580&1|0;else e=(e+1&127)>>>0>32&1;return e|0}function U1(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0;c=h;h=h+16|0;n=c;l=(a|0)==0?190640:a;a=t[l>>2]|0;e:do{if(!A)if(!a)a=0;else s=17;else{f=(e|0)==0?n:e;if(!r)a=-2;else{if(!a){a=i[A>>0]|0;if(a<<24>>24>-1){t[f>>2]=a&255;a=a<<24>>24!=0&1;break}n=(t[t[(q1()|0)+188>>2]>>2]|0)==0;a=i[A>>0]|0;if(n){t[f>>2]=a<<24>>24&57343;a=1;break}a=(a&255)+-194|0;if(a>>>0>50){s=17;break}a=t[62384+(a<<2)>>2]|0;n=r+-1|0;if(n){A=A+1|0;s=11}}else{n=r;s=11}A:do{if((s|0)==11){e=i[A>>0]|0;o=(e&255)>>>3;if((o+-16|o+(a>>26))>>>0>7){s=17;break e}while(1){A=A+1|0;a=(e&255)+-128|a<<6;n=n+-1|0;if((a|0)>=0)break;if(!n)break A;e=i[A>>0]|0;if((e&-64)<<24>>24!=-128){s=17;break e}}t[l>>2]=0;t[f>>2]=a;a=r-n|0;break e}}while(0);t[l>>2]=a;a=-2}}}while(0);if((s|0)==17){t[l>>2]=0;t[(R2()|0)>>2]=84;a=-1}h=c;return a|0}function T1(e,A){e=e|0;A=A|0;if(!e)e=0;else e=O1(e,A,0)|0;return e|0}function O1(e,A,r){e=e|0;A=A|0;r=r|0;do{if(e){if(A>>>0<128){i[e>>0]=A;e=1;break}if(!(t[t[(_1()|0)+188>>2]>>2]|0))if((A&-128|0)==57216){i[e>>0]=A;e=1;break}else{t[(R2()|0)>>2]=84;e=-1;break}if(A>>>0<2048){i[e>>0]=A>>>6|192;i[e+1>>0]=A&63|128;e=2;break}if(A>>>0<55296|(A&-8192|0)==57344){i[e>>0]=A>>>12|224;i[e+1>>0]=A>>>6&63|128;i[e+2>>0]=A&63|128;e=3;break}if((A+-65536|0)>>>0<1048576){i[e>>0]=A>>>18|240;i[e+1>>0]=A>>>12&63|128;i[e+2>>0]=A>>>6&63|128;i[e+3>>0]=A&63|128;e=4;break}else{t[(R2()|0)>>2]=84;e=-1;break}}else e=1}while(0);return e|0}function _1(){return i1()|0}function q1(){return i1()|0}function K1(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0;w=h;h=h+272|0;u=w+8|0;b=w;do{if(!(i[A>>0]|0)){A=Te(152833)|0;if(A|0?i[A>>0]|0:0)break;A=Te(152840+(e*12|0)|0)|0;if(A|0?i[A>>0]|0:0)break;A=Te(152912)|0;if(A|0?i[A>>0]|0:0)break;A=152917}}while(0);r=0;e:do{switch(i[A+r>>0]|0){case 47:case 0:break e;default:{}}r=r+1|0}while(r>>>0<15);a=i[A>>0]|0;if(a<<24>>24!=46?(i[A+r>>0]|0)==0:0)if(a<<24>>24==67)o=15;else{c=A;o=16}else{A=152917;o=15}if((o|0)==15)if(!(i[A+1>>0]|0))o=18;else{c=A;o=16}e:do{if((o|0)==16)if((e1(c,152917)|0)!=0?(e1(c,152925)|0)!=0:0){A=t[47661]|0;if(A|0)do{if(!(e1(c,A+8|0)|0))break e;A=t[A+24>>2]|0}while((A|0)!=0);Ee(190648);A=t[47661]|0;A:do{if(A|0){while(1){if(!(e1(c,A+8|0)|0))break;A=t[A+24>>2]|0;if(!A)break A}xe(190648);break e}}while(0);A:do{if(((t[47646]|0)==0?(n=Te(152931)|0,(n|0)!=0):0)?(i[n>>0]|0)!=0:0){l=254-r|0;s=r+1|0;a=n;while(1){f=j2(a,58)|0;A=i[f>>0]|0;n=f-a+((A<<24>>24!=0)<<31>>31)|0;if(n>>>0>>0){Q6(u|0,a|0,n|0)|0;a=u+n|0;i[a>>0]=47;Q6(a+1|0,c|0,r|0)|0;i[u+(s+n)>>0]=0;a=Be(u|0,b|0)|0;if(a|0)break;A=i[f>>0]|0}a=f+(A<<24>>24!=0&1)|0;if(!(i[a>>0]|0)){o=41;break A}}A=Z2(28)|0;if(!A){P2(a,t[b>>2]|0)|0;o=41;break}else{t[A>>2]=a;t[A+4>>2]=t[b>>2];b=A+8|0;Q6(b|0,c|0,r|0)|0;i[b+r>>0]=0;t[A+24>>2]=t[47661];t[47661]=A;break}}else o=41}while(0);if((o|0)==41){A=Z2(28)|0;if(A){t[A>>2]=t[15584];t[A+4>>2]=t[15585];b=A+8|0;Q6(b|0,c|0,r|0)|0;i[b+r>>0]=0;t[A+24>>2]=t[47661];t[47661]=A}}xe(190648);A=(e|0)==0&(A|0)==0?62336:A}else{A=c;o=18}}while(0);do{if((o|0)==18){if((e|0)==0?(i[A+1>>0]|0)==46:0){A=62336;break}A=0}}while(0);h=w;return A|0}function $1(e,A){e=e|0;A=A|0;e4(e,A)|0;return e|0}function e4(e,A){e=e|0;A=A|0;var r=0,a=0;r=A;e:do{if(!((r^e)&3)){if(r&3)do{r=i[A>>0]|0;i[e>>0]=r;if(!(r<<24>>24))break e;A=A+1|0;e=e+1|0}while((A&3|0)!=0);r=t[A>>2]|0;if(!((r&-2139062144^-2139062144)&r+-16843009)){a=e;while(1){A=A+4|0;e=a+4|0;t[a>>2]=r;r=t[A>>2]|0;if((r&-2139062144^-2139062144)&r+-16843009|0)break;else a=e}}a=8}else a=8}while(0);if((a|0)==8){a=i[A>>0]|0;i[e>>0]=a;if(a<<24>>24)do{A=A+1|0;e=e+1|0;a=i[A>>0]|0;i[e>>0]=a}while(a<<24>>24!=0)}return e|0}function A4(e){e=e|0;return((e|0)==32|(e|0)==9)&1|0}function r4(e){e=e|0;if(!e)e=0;else e=(i4(63500,e)|0)!=0&1;return e|0}function i4(e,A){e=e|0;A=A|0;var r=0;if(!A)e=e+((X1(e)|0)<<2)|0;else{while(1){r=t[e>>2]|0;if((r|0)==0|(r|0)==(A|0))break;else e=e+4|0}e=r|0?e:0}return e|0}function a4(e,A){e=e|0;A=A|0;do{switch(A|0){case 1:{e=t4(e)|0;break}case 2:{e=P1(e)|0;break}case 3:{e=n4(e)|0;break}case 4:{e=f4(e)|0;break}case 5:{e=F1(e)|0;break}case 6:{e=l4(e)|0;break}case 7:{e=s4(e)|0;break}case 8:{e=j1(e)|0;break}case 9:{e=B1(e)|0;break}case 10:{e=r4(e)|0;break}case 11:{e=c4(e)|0;break}case 12:{e=o4(e)|0;break}default:e=0}}while(0);return e|0}function t4(e){e=e|0;if(!(F1(e)|0))e=(P1(e)|0)!=0&1;else e=1;return e|0}function n4(e){e=e|0;return A4(e)|0}function f4(e){e=e|0;return((e+-65529|0)>>>0<3|((e&-2|0)==8232|(e>>>0<32|(e+-127|0)>>>0<33)))&1|0}function l4(e){e=e|0;if(!(r4(e)|0))e=(j1(e)|0)!=0&1;else e=0;return e|0}function s4(e){e=e|0;return(J1(e)|0)!=(e|0)|0}function c4(e){e=e|0;return(u4(e)|0)!=(e|0)|0}function o4(e){e=e|0;return((e+-48|0)>>>0<10|((e|32)+-97|0)>>>0<6)&1|0}function u4(e){e=e|0;return H1(e,1)|0}function b4(e){e=e|0;return(e+-97|0)>>>0<26|0}function h4(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+128|0;n=u+124|0;o=u;f=o;l=63588;s=f+124|0;do{t[f>>2]=t[l>>2];f=f+4|0;l=l+4|0}while((f|0)<(s|0));if((A+-1|0)>>>0>2147483646)if(!A){e=n;A=1;c=4}else{t[(R2()|0)>>2]=75;A=-1}else c=4;if((c|0)==4){c=-2-e|0;c=A>>>0>c>>>0?c:A;t[o+48>>2]=c;n=o+20|0;t[n>>2]=e;t[o+44>>2]=e;A=e+c|0;e=o+16|0;t[e>>2]=A;t[o+28>>2]=A;A=w4(o,r,a)|0;if(c){o=t[n>>2]|0;i[o+(((o|0)==(t[e>>2]|0))<<31>>31)>>0]=0}}h=u;return A|0}function w4(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+224|0;u=v+120|0;w=v+80|0;k=v;d=v+136|0;a=w;n=a+40|0;do{t[a>>2]=0;a=a+4|0}while((a|0)<(n|0));t[u>>2]=t[r>>2];if((k4(0,A,u,k,w)|0)<0)r=-1;else{if((t[e+76>>2]|0)>-1)b=d4(e)|0;else b=0;r=t[e>>2]|0;o=r&32;if((i[e+74>>0]|0)<1)t[e>>2]=r&-33;a=e+48|0;if(!(t[a>>2]|0)){n=e+44|0;f=t[n>>2]|0;t[n>>2]=d;l=e+28|0;t[l>>2]=d;s=e+20|0;t[s>>2]=d;t[a>>2]=80;c=e+16|0;t[c>>2]=d+80;r=k4(e,A,u,k,w)|0;if(f){L5[t[e+36>>2]&63](e,0,0)|0;r=(t[s>>2]|0)==0?-1:r;t[n>>2]=f;t[a>>2]=0;t[c>>2]=0;t[l>>2]=0;t[s>>2]=0}}else r=k4(e,A,u,k,w)|0;a=t[e>>2]|0;t[e>>2]=a|o;if(b|0)v4(e);r=(a&32|0)==0?r:-1}h=v;return r|0}function k4(e,A,r,n,f){e=e|0;A=A|0;r=r|0;n=n|0;f=f|0;var l=0,s=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,L=0,Q=0,D=0,z=0,W=0;W=h;h=h+64|0;L=W+16|0;Q=W;I=W+24|0;D=W+8|0;z=W+20|0;t[L>>2]=A;B=(e|0)!=0;y=I+40|0;C=y;I=I+39|0;Z=D+4|0;s=0;l=0;w=0;e:while(1){do{if((l|0)>-1)if((s|0)>(2147483647-l|0)){t[(R2()|0)>>2]=75;l=-1;break}else{l=s+l|0;break}}while(0);s=i[A>>0]|0;if(!(s<<24>>24)){E=86;break}else o=A;A:while(1){switch(s<<24>>24){case 37:{s=o;E=9;break A}case 0:{s=o;break A}default:{}}p=o+1|0;t[L>>2]=p;s=i[p>>0]|0;o=p}A:do{if((E|0)==9)while(1){E=0;if((i[o+1>>0]|0)!=37)break A;s=s+1|0;o=o+2|0;t[L>>2]=o;if((i[o>>0]|0)==37)E=9;else break}}while(0);s=s-A|0;if(B)g4(e,A,s);if(s|0){A=o;continue}u=o+1|0;s=(i[u>>0]|0)+-48|0;if(s>>>0<10){p=(i[o+2>>0]|0)==36;g=p?s:-1;w=p?1:w;u=p?o+3|0:u}else g=-1;t[L>>2]=u;s=i[u>>0]|0;p=(s<<24>>24)+-32|0;if(p>>>0>31|(1<>24)+-32|o;u=u+1|0;t[L>>2]=u;s=i[u>>0]|0;p=(s<<24>>24)+-32|0}while(!(p>>>0>31|(1<>24==42){b=u+1|0;s=(i[b>>0]|0)+-48|0;if(s>>>0<10?(i[u+2>>0]|0)==36:0){t[f+(s<<2)>>2]=10;s=t[n+((i[b>>0]|0)+-48<<3)>>2]|0;w=1;u=u+3|0}else{if(w|0){l=-1;break}if(B){w=(t[r>>2]|0)+(4-1)&~(4-1);s=t[w>>2]|0;t[r>>2]=w+4;w=0;u=b}else{s=0;w=0;u=b}}t[L>>2]=u;m=(s|0)<0;s=m?0-s|0:s;m=m?o|8192:o}else{s=m4(L)|0;if((s|0)<0){l=-1;break}m=o;u=t[L>>2]|0}do{if((i[u>>0]|0)==46){if((i[u+1>>0]|0)!=42){t[L>>2]=u+1;o=m4(L)|0;u=t[L>>2]|0;break}b=u+2|0;o=(i[b>>0]|0)+-48|0;if(o>>>0<10?(i[u+3>>0]|0)==36:0){t[f+(o<<2)>>2]=10;o=t[n+((i[b>>0]|0)+-48<<3)>>2]|0;u=u+4|0;t[L>>2]=u;break}if(w|0){l=-1;break e}if(B){p=(t[r>>2]|0)+(4-1)&~(4-1);o=t[p>>2]|0;t[r>>2]=p+4}else o=0;t[L>>2]=b;u=b}else o=-1}while(0);v=0;while(1){if(((i[u>>0]|0)+-65|0)>>>0>57){l=-1;break e}p=u+1|0;t[L>>2]=p;b=i[(i[u>>0]|0)+-65+(152944+(v*58|0))>>0]|0;k=b&255;if((k+-1|0)>>>0<8){v=k;u=p}else break}if(!(b<<24>>24)){l=-1;break}d=(g|0)>-1;do{if(b<<24>>24==19)if(d){l=-1;break e}else E=48;else{if(d){t[f+(g<<2)>>2]=k;d=n+(g<<3)|0;g=t[d+4>>2]|0;E=Q;t[E>>2]=t[d>>2];t[E+4>>2]=g;E=48;break}if(!B){l=0;break e}p4(Q,k,r)}}while(0);if((E|0)==48?(E=0,!B):0){s=0;A=p;continue}u=i[u>>0]|0;u=(v|0)!=0&(u&15|0)==3?u&-33:u;g=m&-65537;m=(m&8192|0)==0?m:g;A:do{switch(u|0){case 110:switch((v&255)<<24>>24){case 0:{t[t[Q>>2]>>2]=l;s=0;A=p;continue e}case 1:{t[t[Q>>2]>>2]=l;s=0;A=p;continue e}case 2:{s=t[Q>>2]|0;t[s>>2]=l;t[s+4>>2]=((l|0)<0)<<31>>31;s=0;A=p;continue e}case 3:{a[t[Q>>2]>>1]=l;s=0;A=p;continue e}case 4:{i[t[Q>>2]>>0]=l;s=0;A=p;continue e}case 6:{t[t[Q>>2]>>2]=l;s=0;A=p;continue e}case 7:{s=t[Q>>2]|0;t[s>>2]=l;t[s+4>>2]=((l|0)<0)<<31>>31;s=0;A=p;continue e}default:{s=0;A=p;continue e}}case 112:{u=120;o=o>>>0>8?o:8;A=m|8;E=60;break}case 88:case 120:{A=m;E=60;break}case 111:{u=Q;A=t[u>>2]|0;u=t[u+4>>2]|0;d=B4(A,u,y)|0;v=C-d|0;b=0;k=153408;o=(m&8|0)==0|(o|0)>(v|0)?o:v+1|0;v=m;E=66;break}case 105:case 100:{u=Q;A=t[u>>2]|0;u=t[u+4>>2]|0;if((u|0)<0){A=v6(0,0,A|0,u|0)|0;u=G;b=Q;t[b>>2]=A;t[b+4>>2]=u;b=1;k=153408;E=65;break A}else{b=(m&2049|0)!=0&1;k=(m&2048|0)==0?(m&1|0)==0?153408:153410:153409;E=65;break A}}case 117:{u=Q;b=0;k=153408;A=t[u>>2]|0;u=t[u+4>>2]|0;E=65;break}case 99:{i[I>>0]=t[Q>>2];A=I;b=0;k=153408;d=y;u=1;o=g;break}case 109:{u=A1(t[(R2()|0)>>2]|0)|0;E=70;break}case 115:{u=t[Q>>2]|0;u=u|0?u:153418;E=70;break}case 67:{t[D>>2]=t[Q>>2];t[Z>>2]=0;t[Q>>2]=D;d=-1;u=D;E=74;break}case 83:{A=t[Q>>2]|0;if(!o){C4(e,32,s,0,m);A=0;E=83}else{d=o;u=A;E=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{s=I4(e,+c[Q>>3],s,o,m,u)|0;A=p;continue e}default:{b=0;k=153408;d=y;u=o;o=m}}}while(0);A:do{if((E|0)==60){m=Q;g=t[m>>2]|0;m=t[m+4>>2]|0;d=E4(g,m,y,u&32)|0;k=(A&8|0)==0|(g|0)==0&(m|0)==0;b=k?0:2;k=k?153408:153408+(u>>4)|0;v=A;A=g;u=m;E=66}else if((E|0)==65){d=y4(A,u,y)|0;v=m;E=66}else if((E|0)==70){E=0;m=G1(u,0,o)|0;v=(m|0)==0;A=u;b=0;k=153408;d=v?u+o|0:m;u=v?o:m-u|0;o=g}else if((E|0)==74){E=0;k=u;A=0;o=0;while(1){b=t[k>>2]|0;if(!b)break;o=T1(z,b)|0;if((o|0)<0|o>>>0>(d-A|0)>>>0)break;A=o+A|0;if(d>>>0>A>>>0)k=k+4|0;else break}if((o|0)<0){l=-1;break e}C4(e,32,s,A,m);if(!A){A=0;E=83}else{b=0;while(1){o=t[u>>2]|0;if(!o){E=83;break A}o=T1(z,o)|0;b=o+b|0;if((b|0)>(A|0)){E=83;break A}g4(e,z,o);if(b>>>0>=A>>>0){E=83;break}else u=u+4|0}}}}while(0);if((E|0)==66){E=0;u=(A|0)!=0|(u|0)!=0;m=(o|0)!=0|u;u=C-d+((u^1)&1)|0;A=m?d:y;d=y;u=m?(o|0)>(u|0)?o:u:o;o=(o|0)>-1?v&-65537:v}else if((E|0)==83){E=0;C4(e,32,s,A,m^8192);s=(s|0)>(A|0)?s:A;A=p;continue}g=d-A|0;v=(u|0)<(g|0)?g:u;m=v+b|0;s=(s|0)<(m|0)?m:s;C4(e,32,s,m,o);g4(e,k,b);C4(e,48,s,m,o^65536);C4(e,48,v,g,0);g4(e,A,g);C4(e,32,s,m,o^8192);A=p}e:do{if((E|0)==86)if(!e)if(w){l=1;while(1){A=t[f+(l<<2)>>2]|0;if(!A)break;p4(n+(l<<3)|0,A,r);A=l+1|0;if((l|0)<9)l=A;else{l=A;break}}if((l|0)<10)while(1){if(t[f+(l<<2)>>2]|0){l=-1;break e}if((l|0)<9)l=l+1|0;else{l=1;break}}else l=1}else l=0}while(0);h=W;return l|0}function d4(e){e=e|0;return 0}function v4(e){e=e|0;return}function g4(e,A,r){e=e|0;A=A|0;r=r|0;if(!(t[e>>2]&32))G4(A,r,e)|0;return}function m4(e){e=e|0;var A=0,r=0,a=0;r=t[e>>2]|0;a=(i[r>>0]|0)+-48|0;if(a>>>0<10){A=0;do{A=a+(A*10|0)|0;r=r+1|0;t[e>>2]=r;a=(i[r>>0]|0)+-48|0}while(a>>>0<10)}else A=0;return A|0}function p4(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0.0;e:do{if(A>>>0<=20)do{switch(A|0){case 9:{i=(t[r>>2]|0)+(4-1)&~(4-1);A=t[i>>2]|0;t[r>>2]=i+4;t[e>>2]=A;break e}case 10:{i=(t[r>>2]|0)+(4-1)&~(4-1);A=t[i>>2]|0;t[r>>2]=i+4;i=e;t[i>>2]=A;t[i+4>>2]=((A|0)<0)<<31>>31;break e}case 11:{i=(t[r>>2]|0)+(4-1)&~(4-1);A=t[i>>2]|0;t[r>>2]=i+4;i=e;t[i>>2]=A;t[i+4>>2]=0;break e}case 12:{i=(t[r>>2]|0)+(8-1)&~(8-1);A=i;a=t[A>>2]|0;A=t[A+4>>2]|0;t[r>>2]=i+8;i=e;t[i>>2]=a;t[i+4>>2]=A;break e}case 13:{a=(t[r>>2]|0)+(4-1)&~(4-1);i=t[a>>2]|0;t[r>>2]=a+4;i=(i&65535)<<16>>16;a=e;t[a>>2]=i;t[a+4>>2]=((i|0)<0)<<31>>31;break e}case 14:{a=(t[r>>2]|0)+(4-1)&~(4-1);i=t[a>>2]|0;t[r>>2]=a+4;a=e;t[a>>2]=i&65535;t[a+4>>2]=0;break e}case 15:{a=(t[r>>2]|0)+(4-1)&~(4-1);i=t[a>>2]|0;t[r>>2]=a+4;i=(i&255)<<24>>24;a=e;t[a>>2]=i;t[a+4>>2]=((i|0)<0)<<31>>31;break e}case 16:{a=(t[r>>2]|0)+(4-1)&~(4-1);i=t[a>>2]|0;t[r>>2]=a+4;a=e;t[a>>2]=i&255;t[a+4>>2]=0;break e}case 17:{a=(t[r>>2]|0)+(8-1)&~(8-1);n=+c[a>>3];t[r>>2]=a+8;c[e>>3]=n;break e}case 18:{a=(t[r>>2]|0)+(8-1)&~(8-1);n=+c[a>>3];t[r>>2]=a+8;c[e>>3]=n;break e}default:break e}}while(0)}while(0);return}function E4(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;if(!((e|0)==0&(A|0)==0))do{r=r+-1|0;i[r>>0]=n[153456+(e&15)>>0]|0|a;e=y6(e|0,A|0,4)|0;A=G}while(!((e|0)==0&(A|0)==0));return r|0}function B4(e,A,r){e=e|0;A=A|0;r=r|0;if(!((e|0)==0&(A|0)==0))do{r=r+-1|0;i[r>>0]=e&7|48;e=y6(e|0,A|0,3)|0;A=G}while(!((e|0)==0&(A|0)==0));return r|0}function y4(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;if(A>>>0>0|(A|0)==0&e>>>0>4294967295){while(1){a=E6(e|0,A|0,10,0)|0;r=r+-1|0;i[r>>0]=a&255|48;a=e;e=p6(e|0,A|0,10,0)|0;if(!(A>>>0>9|(A|0)==9&a>>>0>4294967295))break;else A=G}A=e}else A=e;if(A)while(1){r=r+-1|0;i[r>>0]=(A>>>0)%10|0|48;if(A>>>0<10)break;else A=(A>>>0)/10|0}return r|0}function C4(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0,n=0;n=h;h=h+256|0;t=n;if((r|0)>(i|0)&(a&73728|0)==0){a=r-i|0;z6(t|0,A|0,(a>>>0<256?a:256)|0)|0;if(a>>>0>255){A=r-i|0;do{g4(e,t,256);a=a+-256|0}while(a>>>0>255);a=A&255}g4(e,t,a)}h=n;return}function I4(e,A,r,a,f,l){e=e|0;A=+A;r=r|0;a=a|0;f=f|0;l=l|0;var s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,L=0,Q=0,D=0,z=0,W=0;W=h;h=h+560|0;o=W+8|0;m=W;z=W+524|0;D=z;u=W+512|0;t[m>>2]=0;Q=u+12|0;Z4(A)|0;if((G|0)<0){A=-A;Z=1;I=153425}else{Z=(f&2049|0)!=0&1;I=(f&2048|0)==0?(f&1|0)==0?153426:153431:153428}Z4(A)|0;do{if(0==0&(G&2146435072|0)==2146435072){z=(l&32|0)!=0;s=Z+3|0;C4(e,32,r,s,f&-65537);g4(e,I,Z);g4(e,A!=A|0.0!=0.0?z?153593:153452:z?153444:153448,3);C4(e,32,r,s,f^8192)}else{d=+E1(A,m)*2.0;s=d!=0.0;if(s)t[m>>2]=(t[m>>2]|0)+-1;E=l|32;if((E|0)==97){w=l&32;v=(w|0)==0?I:I+9|0;k=Z|2;s=12-a|0;do{if(!(a>>>0>11|(s|0)==0)){A=8.0;do{s=s+-1|0;A=A*16.0}while((s|0)!=0);if((i[v>>0]|0)==45){A=-(A+(-d-A));break}else{A=d+A-A;break}}else A=d}while(0);c=t[m>>2]|0;s=(c|0)<0?0-c|0:c;s=y4(s,((s|0)<0)<<31>>31,Q)|0;if((s|0)==(Q|0)){s=u+11|0;i[s>>0]=48}i[s+-1>>0]=(c>>31&2)+43;b=s+-2|0;i[b>>0]=l+15;o=(a|0)<1;u=(f&8|0)==0;s=z;do{L=~~A;c=s+1|0;i[s>>0]=w|n[153456+L>>0];A=(A-+(L|0))*16.0;if((c-D|0)==1?!(u&(o&A==0.0)):0){i[c>>0]=46;s=s+2|0}else s=c}while(A!=0.0);if((a|0)!=0?(-2-D+s|0)<(a|0):0){c=s-D|0;s=a+2|0}else{s=s-D|0;c=s}Q=Q-b|0;D=Q+k+s|0;C4(e,32,r,D,f);g4(e,v,k);C4(e,48,r,D,f^65536);g4(e,z,c);C4(e,48,s-c|0,0,0);g4(e,b,Q);C4(e,32,r,D,f^8192);s=D;break}c=(a|0)<0?6:a;if(s){s=(t[m>>2]|0)+-28|0;t[m>>2]=s;A=d*268435456.0}else{A=d;s=t[m>>2]|0}L=(s|0)<0?o:o+288|0;o=L;do{y=~~A>>>0;t[o>>2]=y;o=o+4|0;A=(A-+(y>>>0))*1.0e9}while(A!=0.0);if((s|0)>0){u=L;w=o;while(1){b=(s|0)<29?s:29;s=w+-4|0;if(s>>>0>=u>>>0){o=0;do{B=C6(t[s>>2]|0,0,b|0)|0;B=d6(B|0,G|0,o|0,0)|0;y=G;p=E6(B|0,y|0,1e9,0)|0;t[s>>2]=p;o=p6(B|0,y|0,1e9,0)|0;s=s+-4|0}while(s>>>0>=u>>>0);if(o){u=u+-4|0;t[u>>2]=o}}o=w;while(1){if(o>>>0<=u>>>0)break;s=o+-4|0;if(!(t[s>>2]|0))o=s;else break}s=(t[m>>2]|0)-b|0;t[m>>2]=s;if((s|0)>0)w=o;else break}}else u=L;if((s|0)<0){a=((c+25|0)/9|0)+1|0;g=(E|0)==102;do{v=0-s|0;v=(v|0)<9?v:9;if(u>>>0>>0){b=(1<>>v;k=0;s=u;do{y=t[s>>2]|0;t[s>>2]=(y>>>v)+k;k=P(y&b,w)|0;s=s+4|0}while(s>>>0>>0);s=(t[u>>2]|0)==0?u+4|0:u;if(!k){u=s;s=o}else{t[o>>2]=k;u=s;s=o+4|0}}else{u=(t[u>>2]|0)==0?u+4|0:u;s=o}o=g?L:u;o=(s-o>>2|0)>(a|0)?o+(a<<2)|0:s;s=(t[m>>2]|0)+v|0;t[m>>2]=s}while((s|0)<0);s=u;a=o}else{s=u;a=o}y=L;if(s>>>0>>0){o=(y-s>>2)*9|0;b=t[s>>2]|0;if(b>>>0>=10){u=10;do{u=u*10|0;o=o+1|0}while(b>>>0>=u>>>0)}}else o=0;g=(E|0)==103;p=(c|0)!=0;u=c-((E|0)!=102?o:0)+((p&g)<<31>>31)|0;if((u|0)<(((a-y>>2)*9|0)+-9|0)){u=u+9216|0;v=L+4+(((u|0)/9|0)+-1024<<2)|0;u=(u|0)%9|0;if((u|0)<8){b=10;while(1){b=b*10|0;if((u|0)<7)u=u+1|0;else break}}else b=10;w=t[v>>2]|0;k=(w>>>0)%(b>>>0)|0;u=(v+4|0)==(a|0);if(!(u&(k|0)==0)){d=(((w>>>0)/(b>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;B=(b|0)/2|0;A=k>>>0>>0?.5:u&(k|0)==(B|0)?1.0:1.5;if(Z){B=(i[I>>0]|0)==45;A=B?-A:A;d=B?-d:d}u=w-k|0;t[v>>2]=u;if(d+A!=d){B=u+b|0;t[v>>2]=B;if(B>>>0>999999999){o=v;while(1){u=o+-4|0;t[o>>2]=0;if(u>>>0>>0){s=s+-4|0;t[s>>2]=0}B=(t[u>>2]|0)+1|0;t[u>>2]=B;if(B>>>0>999999999)o=u;else break}}else u=v;o=(y-s>>2)*9|0;w=t[s>>2]|0;if(w>>>0>=10){b=10;do{b=b*10|0;o=o+1|0}while(w>>>0>=b>>>0)}}else u=v}else u=v;u=u+4|0;u=a>>>0>u>>>0?u:a;B=s}else{u=a;B=s}E=u;while(1){if(E>>>0<=B>>>0){m=0;break}s=E+-4|0;if(!(t[s>>2]|0))E=s;else{m=1;break}}a=0-o|0;do{if(g){s=c+((p^1)&1)|0;if((s|0)>(o|0)&(o|0)>-5){b=l+-1|0;c=s+-1-o|0}else{b=l+-2|0;c=s+-1|0}s=f&8;if(!s){if(m?(C=t[E+-4>>2]|0,(C|0)!=0):0)if(!((C>>>0)%10|0)){u=0;s=10;do{s=s*10|0;u=u+1|0}while(!((C>>>0)%(s>>>0)|0|0))}else u=0;else u=9;s=((E-y>>2)*9|0)+-9|0;if((b|32|0)==102){v=s-u|0;v=(v|0)>0?v:0;c=(c|0)<(v|0)?c:v;v=0;break}else{v=s+o-u|0;v=(v|0)>0?v:0;c=(c|0)<(v|0)?c:v;v=0;break}}else v=s}else{b=l;v=f&8}}while(0);g=c|v;w=(g|0)!=0&1;k=(b|32|0)==102;if(k){p=0;s=(o|0)>0?o:0}else{s=(o|0)<0?a:o;s=y4(s,((s|0)<0)<<31>>31,Q)|0;u=Q;if((u-s|0)<2)do{s=s+-1|0;i[s>>0]=48}while((u-s|0)<2);i[s+-1>>0]=(o>>31&2)+43;s=s+-2|0;i[s>>0]=b;p=s;s=u-s|0}s=Z+1+c+w+s|0;C4(e,32,r,s,f);g4(e,I,Z);C4(e,48,r,s,f^65536);if(k){b=B>>>0>L>>>0?L:B;v=z+9|0;w=v;k=z+8|0;u=b;do{o=y4(t[u>>2]|0,0,v)|0;if((u|0)==(b|0)){if((o|0)==(v|0)){i[k>>0]=48;o=k}}else if(o>>>0>z>>>0){z6(z|0,48,o-D|0)|0;do{o=o+-1|0}while(o>>>0>z>>>0)}g4(e,o,w-o|0);u=u+4|0}while(u>>>0<=L>>>0);if(g|0)g4(e,153472,1);if(u>>>0>>0&(c|0)>0)while(1){o=y4(t[u>>2]|0,0,v)|0;if(o>>>0>z>>>0){z6(z|0,48,o-D|0)|0;do{o=o+-1|0}while(o>>>0>z>>>0)}g4(e,o,(c|0)<9?c:9);u=u+4|0;o=c+-9|0;if(!(u>>>0>>0&(c|0)>9)){c=o;break}else c=o}C4(e,48,c+9|0,9,0)}else{g=m?E:B+4|0;if((c|0)>-1){m=z+9|0;v=(v|0)==0;a=m;w=0-D|0;k=z+8|0;b=B;do{o=y4(t[b>>2]|0,0,m)|0;if((o|0)==(m|0)){i[k>>0]=48;o=k}do{if((b|0)==(B|0)){u=o+1|0;g4(e,o,1);if(v&(c|0)<1){o=u;break}g4(e,153472,1);o=u}else{if(o>>>0<=z>>>0)break;z6(z|0,48,o+w|0)|0;do{o=o+-1|0}while(o>>>0>z>>>0)}}while(0);D=a-o|0;g4(e,o,(c|0)>(D|0)?D:c);c=c-D|0;b=b+4|0}while(b>>>0>>0&(c|0)>-1)}C4(e,48,c+18|0,18,0);g4(e,p,Q-p|0)}C4(e,32,r,s,f^8192)}}while(0);h=W;return((s|0)<(r|0)?r:s)|0}function Z4(e){e=+e;var A=0;c[u>>3]=e;A=t[u>>2]|0;G=t[u+4>>2]|0;return A|0}function G4(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0,s=0;a=r+16|0;n=t[a>>2]|0;if(!n)if(!(L4(r)|0)){n=t[a>>2]|0;f=5}else a=0;else f=5;e:do{if((f|0)==5){s=r+20|0;l=t[s>>2]|0;a=l;if((n-l|0)>>>0>>0){a=L5[t[r+36>>2]&63](r,e,A)|0;break}A:do{if((i[r+75>>0]|0)>-1){l=A;while(1){if(!l){f=0;n=e;break A}n=l+-1|0;if((i[e+n>>0]|0)==10)break;else l=n}a=L5[t[r+36>>2]&63](r,e,l)|0;if(a>>>0>>0)break e;f=l;n=e+l|0;A=A-l|0;a=t[s>>2]|0}else{f=0;n=e}}while(0);Q6(a|0,n|0,A|0)|0;t[s>>2]=(t[s>>2]|0)+A;a=f+A|0}}while(0);return a|0}function L4(e){e=e|0;var A=0,r=0;A=e+74|0;r=i[A>>0]|0;i[A>>0]=r+255|r;A=t[e>>2]|0;if(!(A&8)){t[e+8>>2]=0;t[e+4>>2]=0;r=t[e+44>>2]|0;t[e+28>>2]=r;t[e+20>>2]=r;t[e+16>>2]=r+(t[e+48>>2]|0);e=0}else{t[e>>2]=A|32;e=-1}return e|0}function Q4(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=e+20|0;a=t[i>>2]|0;e=(t[e+16>>2]|0)-a|0;e=e>>>0>r>>>0?r:e;Q6(a|0,A|0,e|0)|0;t[i>>2]=(t[i>>2]|0)+e;return r|0}function D4(e){e=e|0;var A=0,r=0,a=0,t=0;a=i[e>>0]|0;A=1;r=153474;t=97;while(1){if(a<<24>>24==t<<24>>24?(e1(e,r)|0)==0:0)break;r=r+6|0;t=i[r>>0]|0;if(!(t<<24>>24)){A=0;break}else A=A+1|0}return A|0}function z4(e){e=e|0;var A=0;A=(b4(e)|0)==0;return(A?e:e&95)|0}function W4(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;f=h;h=h+16|0;n=f;do{if(e>>>0>6)A=0;else{Ee(190656);if((e|0)!=6){A=Y4(e,A)|0;xe(190656);break}if(!A){A=197132;e=0}else{e=n;r=153547;a=e+16|0;do{i[e>>0]=i[r>>0]|0;e=e+1|0;r=r+1|0}while((e|0)<(a|0));a=0;do{e=j2(A,59)|0;r=e-A|0;if((r|0)<16){Q6(n|0,A|0,r|0)|0;i[n+r>>0]=0;A=(i[e>>0]|0)==0?A:e+1|0}Y4(a,n)|0;a=a+1|0}while((a|0)!=6);A=197132;e=0}while(1){a=t[190616+(e<<2)>>2]|0;a=a|0?a+8|0:153563;r=U2(a)|0;Q6(A|0,a|0,r|0)|0;a=A+r|0;i[a>>0]=59;e=e+1|0;if((e|0)==6)break;else A=A+(r+1)|0}i[a>>0]=0;xe(190656);A=197132}}while(0);h=f;return A|0}function Y4(e,A){e=e|0;A=A|0;if(!A)e=t[190616+(e<<2)>>2]|0;else{A=K1(e,A)|0;t[190616+(e<<2)>>2]=A;e=A}return(e|0?e+8|0:153563)|0}function F4(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,t=0;e:do{if(!r)e=0;else{while(1){a=i[e>>0]|0;t=i[A>>0]|0;if(a<<24>>24!=t<<24>>24)break;r=r+-1|0;if(!r){e=0;break e}else{e=e+1|0;A=A+1|0}}e=(a&255)-(t&255)|0}}while(0);return e|0}function M4(e){e=e|0;return V4(e)|0}function V4(e){e=e|0;return I6(e|0)|0}function N4(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0;if((t[r+76>>2]|0)>-1)u=d4(r)|0;else u=0;a=A+-1|0;if((A|0)<2){b=r+74|0;o=i[b>>0]|0;i[b>>0]=o+255|o;if(u|0)v4(r);if(!a)i[e>>0]=0;else e=0}else{e:do{if(a){c=r+4|0;o=r+8|0;A=e;while(1){f=t[c>>2]|0;h=f;w=(t[o>>2]|0)-h|0;l=G1(f,10,w)|0;s=(l|0)==0;l=s?w:1-h+l|0;l=l>>>0>>0?l:a;Q6(A|0,f|0,l|0)|0;f=(t[c>>2]|0)+l|0;t[c>>2]=f;A=A+l|0;l=a-l|0;if(!(s&(l|0)!=0)){b=17;break e}if(f>>>0>=(t[o>>2]|0)>>>0){a=W1(r)|0;if((a|0)<0)break;else s=a}else{t[c>>2]=f+1;s=n[f>>0]|0}a=l+-1|0;f=A+1|0;i[A>>0]=s;if(!((a|0)!=0&(s&255|0)!=10)){A=f;b=17;break e}else A=f}if((A|0)!=(e|0)?(t[r>>2]&16|0)!=0:0)b=17;else e=0}else{A=e;b=17}}while(0);if((b|0)==17)if(!e)e=0;else i[A>>0]=0;if(u)v4(r)}return e|0}function R4(e,A){e=e|0;A=A|0;var r=0;r=i[A>>0]|0;do{if(r<<24>>24){e=C1(e,r<<24>>24)|0;if(e){if(i[A+1>>0]|0)if(i[e+1>>0]|0){if(!(i[A+2>>0]|0)){e=x4(e,A)|0;break}if(i[e+2>>0]|0){if(!(i[A+3>>0]|0)){e=J4(e,A)|0;break}if(i[e+3>>0]|0)if(!(i[A+4>>0]|0)){e=H4(e,A)|0;break}else{e=P4(e,A)|0;break}else e=0}else e=0}else e=0}else e=0}}while(0);return e|0}function x4(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;t=(n[A>>0]|0)<<8|(n[A+1>>0]|0);a=n[e>>0]|0;while(1){A=e+1|0;r=i[A>>0]|0;if(!(r<<24>>24))break;a=a<<8&65280|r&255;if((a|0)==(t|0))break;else e=A}return(r<<24>>24?e:0)|0}function J4(e,A){e=e|0;A=A|0;var r=0,a=0;a=(n[A+1>>0]|0)<<16|(n[A>>0]|0)<<24|(n[A+2>>0]|0)<<8;r=e+2|0;A=i[r>>0]|0;e=(n[e+1>>0]|0)<<16|(n[e>>0]|0)<<24|(A&255)<<8;if(!((e|0)==(a|0)|A<<24>>24==0))do{r=r+1|0;A=i[r>>0]|0;e=(e|A&255)<<8}while(!((e|0)==(a|0)|A<<24>>24==0));return(A<<24>>24?r+-2|0:0)|0}function H4(e,A){e=e|0;A=A|0;var r=0,a=0;a=(n[A+1>>0]|0)<<16|(n[A>>0]|0)<<24|(n[A+2>>0]|0)<<8|(n[A+3>>0]|0);A=e+3|0;r=i[A>>0]|0;e=(n[e+1>>0]|0)<<16|(n[e>>0]|0)<<24|(n[e+2>>0]|0)<<8|r&255;if(!(r<<24>>24==0|(e|0)==(a|0)))do{A=A+1|0;r=i[A>>0]|0;e=e<<8|r&255}while(!(r<<24>>24==0|(e|0)==(a|0)));return(r<<24>>24?A+-3|0:0)|0}function P4(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0;p=h;h=h+1056|0;g=p+1024|0;m=p;t[g>>2]=0;t[g+4>>2]=0;t[g+8>>2]=0;t[g+12>>2]=0;t[g+16>>2]=0;t[g+20>>2]=0;t[g+24>>2]=0;t[g+28>>2]=0;r=i[A>>0]|0;e:do{if(r<<24>>24){v=0;do{if(!(i[e+v>>0]|0)){r=0;break e}d=g+(((r&255)>>>5&255)<<2)|0;t[d>>2]=t[d>>2]|1<<(r&31);v=v+1|0;t[m+((r&255)<<2)>>2]=v;r=i[A+v>>0]|0}while(r<<24>>24!=0);o=v>>>0>1;if(o){a=0;c=-1;n=1;A:while(1){f=1;r=a;while(1){a=n;r:while(1){s=1;while(1){n=i[A+(s+c)>>0]|0;l=i[A+a>>0]|0;if(n<<24>>24!=l<<24>>24)break r;if((s|0)==(f|0))break;s=s+1|0;a=s+r|0;if(a>>>0>=v>>>0){u=f;r=c;break A}}r=f+r|0;a=r+1|0;if(a>>>0>=v>>>0){u=f;r=c;break A}}f=a-c|0;if((n&255)<=(l&255))break;n=a+1|0;if(n>>>0>=v>>>0){u=f;r=c;break A}else r=a}n=r+2|0;if(n>>>0>=v>>>0){u=1;break}else{a=r+1|0;c=r}}if(o){f=0;o=-1;l=1;while(1){a=1;n=f;while(1){f=l;A:while(1){c=1;while(1){l=i[A+(c+o)>>0]|0;s=i[A+f>>0]|0;if(l<<24>>24!=s<<24>>24)break A;if((c|0)==(a|0))break;c=c+1|0;f=c+n|0;if(f>>>0>=v>>>0){l=u;n=o;f=26;break e}}n=a+n|0;f=n+1|0;if(f>>>0>=v>>>0){l=u;n=o;f=26;break e}}a=f-o|0;if((l&255)>=(s&255))break;l=f+1|0;if(l>>>0>=v>>>0){l=u;n=o;f=26;break e}else n=f}l=n+2|0;if(l>>>0>=v>>>0){l=u;a=1;f=26;break}else{f=n+1|0;o=n}}}else{l=u;a=1;n=-1;f=26}}else{l=1;r=-1;a=1;n=-1;f=26}}else{l=1;r=-1;v=0;a=1;n=-1;f=26}}while(0);e:do{if((f|0)==26){k=(n+1|0)>>>0>(r+1|0)>>>0;a=k?a:l;k=k?n:r;d=k+1|0;if(!(F4(A,A+a|0,d)|0))w=v-a|0;else{a=v-k+-1|0;w=0;a=(k>>>0>a>>>0?k:a)+1|0}c=v|63;o=v+-1|0;u=(w|0)!=0;b=v-a|0;r=e;s=0;n=e;while(1){f=r;do{if((n-f|0)>>>0>>0){l=G1(n,0,c)|0;if(l)if((l-f|0)>>>0>>0){r=0;break e}else break;else{l=n+c|0;break}}else l=n}while(0);n=i[r+o>>0]|0;A:do{if(!(1<<(n&31)&t[g+(((n&255)>>>5&255)<<2)>>2])){f=0;n=v}else{n=v-(t[m+((n&255)<<2)>>2]|0)|0;if(n|0){f=0;n=u&(s|0)!=0&n>>>0>>0?b:n;break}n=d>>>0>s>>>0?d:s;f=i[A+n>>0]|0;r:do{if(!(f<<24>>24))n=d;else{while(1){if(f<<24>>24!=(i[r+n>>0]|0))break;n=n+1|0;f=i[A+n>>0]|0;if(!(f<<24>>24)){n=d;break r}}f=0;n=n-k|0;break A}}while(0);while(1){if(n>>>0<=s>>>0)break e;n=n+-1|0;if((i[A+n>>0]|0)!=(i[r+n>>0]|0)){f=w;n=a;break}}}}while(0);r=r+n|0;s=f;n=l}}}while(0);h=p;return r|0}function X4(e,A,r){e=e|0;A=A|0;r=r|0;S4(e,A,r)|0;return e|0}function S4(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;n=A;e:do{if(!((n^e)&3)){a=(r|0)!=0;if(a&(n&3|0)!=0)do{n=i[A>>0]|0;i[e>>0]=n;if(!(n<<24>>24))break e;r=r+-1|0;A=A+1|0;e=e+1|0;a=(r|0)!=0}while(a&(A&3|0)!=0);if(a){if(i[A>>0]|0){A:do{if(r>>>0>3){a=A;while(1){A=t[a>>2]|0;if((A&-2139062144^-2139062144)&A+-16843009|0){A=a;break A}t[e>>2]=A;r=r+-4|0;A=a+4|0;e=e+4|0;if(r>>>0>3)a=A;else break}}}while(0);f=11}}else r=0}else f=11}while(0);e:do{if((f|0)==11)if(!r)r=0;else while(1){f=i[A>>0]|0;i[e>>0]=f;if(!(f<<24>>24))break e;r=r+-1|0;e=e+1|0;if(!r){r=0;break}else A=A+1|0}}while(0);z6(e|0,0,r|0)|0;return e|0}function j4(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0;n=h;h=h+32|0;a=n;t[a>>2]=0;t[a+4>>2]=0;t[a+8>>2]=0;t[a+12>>2]=0;t[a+16>>2]=0;t[a+20>>2]=0;t[a+24>>2]=0;t[a+28>>2]=0;r=i[A>>0]|0;do{if(!(r<<24>>24))A=0;else{if(!(i[A+1>>0]|0)){A=e;while(1)if((i[A>>0]|0)==r<<24>>24)A=A+1|0;else break;A=A-e|0;break}do{f=a+(((r&255)>>>5&255)<<2)|0;t[f>>2]=t[f>>2]|1<<(r&31);A=A+1|0;r=i[A>>0]|0}while(r<<24>>24!=0);r=i[e>>0]|0;e:do{if(!(r<<24>>24))A=e;else{A=e;do{if(!(t[a+(((r&255)>>>5&255)<<2)>>2]&1<<(r&31)))break e;A=A+1|0;r=i[A>>0]|0}while(r<<24>>24!=0)}}while(0);A=A-e|0}}while(0);h=n;return A|0}function U4(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=A;t[r>>2]=x2(e)|0;e=Ne(6,r|0)|0;e=N2((e|0)==-4?0:e)|0;h=A;return e|0}function T4(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=r;r=O4(e,A,a)|0;h=i;return r|0}function O4(e,A,r){e=e|0;A=A|0;r=r|0;return h4(e,2147483647,A,r)|0}function _4(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;o=h;h=h+208|0;s=o+8|0;c=o;f=P(r,A)|0;l=c;t[l>>2]=1;t[l+4>>2]=0;e:do{if(f|0){l=0-r|0;t[s+4>>2]=r;t[s>>2]=r;a=2;A=r;n=r;while(1){A=A+r+n|0;t[s+(a<<2)>>2]=A;if(A>>>0>>0){u=n;a=a+1|0;n=A;A=u}else break}n=e+f+l|0;if(n>>>0>e>>>0){f=n;a=1;A=1;do{do{if((A&3|0)!=3){A=a+-1|0;if((t[s+(A<<2)>>2]|0)>>>0<(f-e|0)>>>0)q4(e,r,i,a,s);else $4(e,r,i,c,a,0,s);if((a|0)==1){e3(c,1);a=0;break}else{e3(c,A);a=1;break}}else{q4(e,r,i,a,s);K4(c,2);a=a+2|0}}while(0);A=t[c>>2]|1;t[c>>2]=A;e=e+r|0}while(e>>>0>>0)}else{a=1;A=1}$4(e,r,i,c,a,0,s);n=c+4|0;while(1){if((a|0)==1&(A|0)==1){if(!(t[n>>2]|0))break e}else if((a|0)>=2){e3(c,2);u=a+-2|0;t[c>>2]=t[c>>2]^7;K4(c,1);$4(e+(0-(t[s+(u<<2)>>2]|0))+l|0,r,i,c,a+-1|0,1,s);e3(c,1);A=t[c>>2]|1;t[c>>2]=A;f=e+l|0;$4(f,r,i,c,u,1,s);e=f;a=u;continue}A=A3(c)|0;K4(c,A);e=e+l|0;a=A+a|0;A=t[c>>2]|0}}}while(0);h=o;return}function q4(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+240|0;o=u;t[o>>2]=e;e:do{if((i|0)>1){c=0-A|0;n=e;s=i;i=1;while(1){f=n+c|0;l=s+-2|0;n=f+(0-(t[a+(l<<2)>>2]|0))|0;if((Z5[r&127](e,n)|0)>-1?(Z5[r&127](e,f)|0)>-1:0)break e;e=i+1|0;i=o+(i<<2)|0;if((Z5[r&127](n,f)|0)>-1){t[i>>2]=n;i=s+-1|0}else{t[i>>2]=f;n=f;i=l}if((i|0)<=1){i=e;break e}s=i;i=e;e=t[o>>2]|0}}else i=1}while(0);i3(A,o,i);h=u;return}function K4(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=e+4|0;if(A>>>0>31){i=t[a>>2]|0;t[e>>2]=i;t[a>>2]=0;A=A+-32|0;r=0}else{r=t[a>>2]|0;i=t[e>>2]|0}t[e>>2]=r<<32-A|i>>>A;t[a>>2]=r>>>A;return}function $4(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;var l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0;w=h;h=h+240|0;u=w+232|0;b=w;k=t[i>>2]|0;t[u>>2]=k;s=t[i+4>>2]|0;c=u+4|0;t[c>>2]=s;t[b>>2]=e;e:do{if((k|0)!=1|(s|0)!=0?(o=0-A|0,l=e+(0-(t[f+(a<<2)>>2]|0))|0,(Z5[r&127](l,e)|0)>=1):0){i=1;n=(n|0)==0;s=l;while(1){if(n&(a|0)>1){n=e+o|0;l=t[f+(a+-2<<2)>>2]|0;if((Z5[r&127](n,s)|0)>-1){l=10;break e}if((Z5[r&127](n+(0-l)|0,s)|0)>-1){l=10;break e}}n=i+1|0;t[b+(i<<2)>>2]=s;k=A3(u)|0;K4(u,k);a=k+a|0;if(!((t[u>>2]|0)!=1|(t[c>>2]|0)!=0)){i=n;e=s;l=10;break e}e=s+(0-(t[f+(a<<2)>>2]|0))|0;if((Z5[r&127](e,t[b>>2]|0)|0)<1){e=s;i=n;n=0;l=9;break}else{k=s;i=n;n=1;s=e;e=k}}}else{i=1;l=9}}while(0);if((l|0)==9?(n|0)==0:0)l=10;if((l|0)==10){i3(A,b,i);q4(e,A,r,a,f)}h=w;return}function e3(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;a=e+4|0;if(A>>>0>31){i=t[e>>2]|0;t[a>>2]=i;t[e>>2]=0;A=A+-32|0;r=0}else{r=t[e>>2]|0;i=t[a>>2]|0}t[a>>2]=r>>>(32-A|0)|i<>2]=r<>2]|0)+-1|0)|0;if(!A){A=r3(t[e+4>>2]|0)|0;return((A|0)==0?0:A+32|0)|0}else return A|0;return 0}function r3(e){e=e|0;var A=0;if(e)if(!(e&1)){A=e;e=0;do{e=e+1|0;A=A>>>1}while(!(A&1|0))}else e=0;else e=32;return e|0}function i3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0;f=h;h=h+256|0;i=f;e:do{if((r|0)>=2?(n=A+(r<<2)|0,t[n>>2]=i,e|0):0)while(1){a=e>>>0<256?e:256;Q6(i|0,t[A>>2]|0,a|0)|0;i=0;do{l=A+(i<<2)|0;i=i+1|0;Q6(t[l>>2]|0,t[A+(i<<2)>>2]|0,a|0)|0;t[l>>2]=(t[l>>2]|0)+a}while((i|0)!=(r|0));e=e-a|0;if(!e)break e;i=t[n>>2]|0}}while(0);h=f;return}function a3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=r;r=w4(e,A,a)|0;h=i;return r|0}function t3(e){e=e|0;var A=0,r=0,a=0;a=h;h=h+16|0;r=a;pe(0,r|0)|0;A=0;r=(t[r+4>>2]|0)*65537^(r>>>4)+e;while(1){i[e+A>>0]=(r&15)+65|r<<1&32;A=A+1|0;if((A|0)==6)break;else r=r>>>5}h=a;return e|0}function n3(e,A,r){e=e|0;A=A|0;r=r|0;r=L1(e,A,r,-2147483648,0)|0;return r|0}function f3(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;f=h;h=h+32|0;a=f;r=i[A>>0]|0;e:do{if(r<<24>>24!=0?(i[A+1>>0]|0)!=0:0){t[a>>2]=0;t[a+4>>2]=0;t[a+8>>2]=0;t[a+12>>2]=0;t[a+16>>2]=0;t[a+20>>2]=0;t[a+24>>2]=0;t[a+28>>2]=0;do{l=a+(((r&255)>>>5&255)<<2)|0;t[l>>2]=t[l>>2]|1<<(r&31);A=A+1|0;r=i[A>>0]|0}while(r<<24>>24!=0);r=i[e>>0]|0;if(!(r<<24>>24))A=e;else{A=e;do{if(t[a+(((r&255)>>>5&255)<<2)>>2]&1<<(r&31)|0)break e;A=A+1|0;r=i[A>>0]|0}while(r<<24>>24!=0)}}else n=3}while(0);if((n|0)==3)A=j2(e,r<<24>>24)|0;h=f;return A-e|0}function l3(e,A){e=e|0;A=A|0;var r=0;if(!e){e=t[47666]|0;if(!e)e=0;else r=3}else r=3;do{if((r|0)==3){e=e+(j4(e,A)|0)|0;if(!(i[e>>0]|0)){t[47666]=0;e=0;break}A=e+(f3(e,A)|0)|0;t[47666]=A;if(!(i[A>>0]|0)){t[47666]=0;break}else{t[47666]=A+1;i[A>>0]=0;break}}}while(0);return e|0}function s3(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;a=A&255;do{if(!r){A=0;break}r=r+-1|0;A=e+r|0}while((i[A>>0]|0)!=a<<24>>24);return A|0}function c3(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;if(!e){e=t[r>>2]|0;if(!e)e=0;else a=3}else a=3;do{if((a|0)==3){e=e+(j4(e,A)|0)|0;if(!(i[e>>0]|0)){t[r>>2]=0;e=0;break}A=e+(f3(e,A)|0)|0;t[r>>2]=A;if(!(i[A>>0]|0)){t[r>>2]=0;break}else{t[r>>2]=A+1;i[A>>0]=0;break}}}while(0);return e|0}function o3(e){e=e|0;var A=0,r=0;r=(U2(e)|0)+1|0;A=Z2(r)|0;if(!A)A=0;else Q6(A|0,e|0,r|0)|0;return A|0}function u3(e,A){e=e|0;A=A|0;return s3(e,A,(U2(e)|0)+1|0)|0}function b3(e,A){e=e|0;A=A|0;$1(e+(U2(e)|0)|0,A)|0;return e|0}function h3(e,A){e=e|0;A=A|0;A=e+(f3(e,A)|0)|0;return(i[A>>0]|0?A:0)|0}function w3(e){e=e|0;var A=0;if((t[e+76>>2]|0)>-1){A=(d4(e)|0)==0;e=(t[e>>2]|0)>>>4&1}else e=(t[e>>2]|0)>>>4&1;return e|0}function k3(e){e=e|0;var A=0,r=0,i=0,a=0,n=0;if((t[e+76>>2]|0)>-1)a=d4(e)|0;else a=0;d3(e);n=(t[e>>2]&1|0)!=0;if(!n){i=v3()|0;r=t[e+52>>2]|0;A=e+56|0;if(r|0)t[r+56>>2]=t[A>>2];A=t[A>>2]|0;if(A|0)t[A+52>>2]=r;if((t[i>>2]|0)==(e|0))t[i>>2]=A;g3()}A=m3(e)|0;A=I5[t[e+12>>2]&63](e)|0|A;r=t[e+92>>2]|0;if(r|0)G2(r);if(n){if(a|0)v4(e)}else G2(e);return A|0}function d3(e){e=e|0;var A=0;if(t[e+68>>2]|0){A=t[e+116>>2]|0;e=e+112|0;if(A|0)t[A+112>>2]=t[e>>2];e=t[e>>2]|0;if(!e)e=(E3()|0)+232|0;else e=e+116|0;t[e>>2]=A}return}function v3(){Ee(190668);return 190676}function g3(){xe(190668);return}function m3(e){e=e|0;var A=0,r=0;do{if(e){if((t[e+76>>2]|0)<=-1){A=p3(e)|0;break}r=(d4(e)|0)==0;A=p3(e)|0;if(!r)v4(e)}else{if(!(t[15711]|0))A=0;else A=m3(t[15711]|0)|0;e=t[(v3()|0)>>2]|0;if(e)do{if((t[e+76>>2]|0)>-1)r=d4(e)|0;else r=0;if((t[e+20>>2]|0)>>>0>(t[e+28>>2]|0)>>>0)A=p3(e)|0|A;if(r|0)v4(e);e=t[e+56>>2]|0}while((e|0)!=0);g3()}}while(0);return A|0}function p3(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;A=e+20|0;f=e+28|0;if((t[A>>2]|0)>>>0>(t[f>>2]|0)>>>0?(L5[t[e+36>>2]&63](e,0,0)|0,(t[A>>2]|0)==0):0)e=-1;else{r=e+4|0;i=t[r>>2]|0;a=e+8|0;n=t[a>>2]|0;if(i>>>0>>0)L5[t[e+40>>2]&63](e,i-n|0,1)|0;t[e+16>>2]=0;t[f>>2]=0;t[A>>2]=0;t[a>>2]=0;t[r>>2]=0;e=0}return e|0}function E3(){return i1()|0}function B3(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+64|0;u=b+40|0;c=b+24|0;s=b+16|0;n=b;o=b+56|0;a=i[A>>0]|0;if(G1(153580,a<<24>>24,4)|0){r=Z2(1156)|0;if(!r)r=0;else{f=r;l=f+124|0;do{t[f>>2]=0;f=f+4|0}while((f|0)<(l|0));if(!(C1(A,43)|0))t[r>>2]=a<<24>>24==114?8:4;if(C1(A,101)|0){t[n>>2]=e;t[n+4>>2]=2;t[n+8>>2]=1;We(221,n|0)|0;a=i[A>>0]|0}if(a<<24>>24==97){t[s>>2]=e;t[s+4>>2]=3;a=We(221,s|0)|0;if(!(a&1024)){t[c>>2]=e;t[c+4>>2]=4;t[c+8>>2]=a|1024;We(221,c|0)|0}A=t[r>>2]|128;t[r>>2]=A}else A=t[r>>2]|0;t[r+60>>2]=e;t[r+44>>2]=r+132;t[r+48>>2]=1024;a=r+75|0;i[a>>0]=-1;if((A&8|0)==0?(t[u>>2]=e,t[u+4>>2]=21523,t[u+8>>2]=o,(Ve(54,u|0)|0)==0):0)i[a>>0]=10;t[r+32>>2]=15;t[r+36>>2]=18;t[r+40>>2]=16;t[r+12>>2]=17;if(!(t[47645]|0))t[r+76>>2]=-1;y3(r)|0}}else{t[(R2()|0)>>2]=22;r=0}h=b;return r|0}function y3(e){e=e|0;var A=0,r=0;A=v3()|0;t[e+56>>2]=t[A>>2];r=t[A>>2]|0;if(r|0)t[r+52>>2]=e;t[A>>2]=e;g3();return e|0}function C3(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0,l=0,s=0;s=h;h=h+16|0;a=s;e:do{if(!A)e=0;else{do{if(r|0){l=(e|0)==0?a:e;e=i[A>>0]|0;if(e<<24>>24>-1){t[l>>2]=e&255;e=e<<24>>24!=0&1;break e}f=(t[t[(I3()|0)+188>>2]>>2]|0)==0;e=i[A>>0]|0;if(f){t[l>>2]=e<<24>>24&57343;e=1;break e}e=(e&255)+-194|0;if(e>>>0<=50){a=A+1|0;f=t[62384+(e<<2)>>2]|0;if(r>>>0<4?f&-2147483648>>>((r*6|0)+-6|0)|0:0)break;e=n[a>>0]|0;r=e>>>3;if((r+-16|r+(f>>26))>>>0<=7){e=e+-128|f<<6;if((e|0)>=0){t[l>>2]=e;e=2;break e}a=(n[A+2>>0]|0)+-128|0;if(a>>>0<=63){a=a|e<<6;if((a|0)>=0){t[l>>2]=a;e=3;break e}e=(n[A+3>>0]|0)+-128|0;if(e>>>0<=63){t[l>>2]=e|a<<6;e=4;break e}}}}}}while(0);t[(R2()|0)>>2]=84;e=-1}}while(0);h=s;return e|0}function I3(){return i1()|0}function Z3(e,A){e=e|0;A=A|0;var r=0;r=U2(e)|0;return((G3(e,1,r,A)|0)!=(r|0))<<31>>31|0}function G3(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;a=P(r,A)|0;r=(A|0)==0?0:r;if((t[i+76>>2]|0)>-1){n=(d4(i)|0)==0;e=G4(e,a,i)|0;if(!n)v4(i)}else e=G4(e,a,i)|0;if((e|0)!=(a|0))r=(e>>>0)/(A>>>0)|0;return r|0}function L3(e,A){e=e|0;A=A|0;var r=0,a=0,f=0,l=0,s=0,c=0,o=0;o=h;h=h+16|0;s=o;c=A&255;i[s>>0]=c;a=e+16|0;f=t[a>>2]|0;if(!f)if(!(L4(e)|0)){f=t[a>>2]|0;l=4}else r=-1;else l=4;do{if((l|0)==4){l=e+20|0;a=t[l>>2]|0;if(a>>>0>>0?(r=A&255,(r|0)!=(i[e+75>>0]|0)):0){t[l>>2]=a+1;i[a>>0]=c;break}if((L5[t[e+36>>2]&63](e,s,1)|0)==1)r=n[s>>0]|0;else r=-1}}while(0);h=o;return r|0}function Q3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=e;t[a+4>>2]=A;t[a+8>>2]=r;r=N2(Ye(3,a|0)|0)|0;h=i;return r|0}function D3(){var e=0,A=0;A=h;h=h+16|0;e=ze(20,A|0)|0;h=A;return e|0}function z3(e,A){e=e|0;A=A|0;var r=0,a=0,t=0;r=e;a=153565;t=r+15|0;do{i[r>>0]=i[a>>0]|0;r=r+1|0;a=a+1|0}while((r|0)<(t|0));if(!A){i[e+14>>0]=48;i[e+15>>0]=0}else{a=A;r=14;while(1){r=r+1|0;if(a>>>0<10)break;else a=(a>>>0)/10|0}i[e+r>>0]=0;while(1){r=r+-1|0;i[e+r>>0]=(A>>>0)%10|0|48;if(A>>>0<10)break;else A=(A>>>0)/10|0}}return}function W3(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0;n=h;h=h+48|0;a=n+40|0;i=n+8|0;r=n;t[r>>2]=e;t[r+4>>2]=A;r=De(197,r|0)|0;if((r|0)==-9?(t[i>>2]=e,t[i+4>>2]=1,(We(221,i|0)|0)>=0):0){z3(i,e);t[a>>2]=i;t[a+4>>2]=A;A=N2(Qe(195,a|0)|0)|0}else A=N2(r)|0;h=n;return A|0}function Y3(e,A){e=e|0;A=A|0;var r=0,i=0;r=h;h=h+16|0;i=r;t[i>>2]=e;t[i+4>>2]=A;A=N2(Fe(33,i|0)|0)|0;h=r;return A|0}function F3(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0;l=h;h=h+48|0;f=l+32|0;n=l+16|0;r=l;if(G1(153580,i[A>>0]|0,4)|0){a=M3(A)|0;t[r>>2]=e;t[r+4>>2]=a|32768;t[r+8>>2]=438;r=N2(Me(5,r|0)|0)|0;if((r|0)>=0){if(a&524288|0){t[n>>2]=r;t[n+4>>2]=2;t[n+8>>2]=1;We(221,n|0)|0}e=B3(r,A)|0;if(!e){t[f>>2]=r;Ne(6,f|0)|0;e=0}}else e=0}else{t[(R2()|0)>>2]=22;e=0}h=l;return e|0}function M3(e){e=e|0;var A=0,r=0,a=0;r=(C1(e,43)|0)==0;A=i[e>>0]|0;r=r?A<<24>>24!=114&1:2;a=(C1(e,120)|0)==0;r=a?r:r|128;e=(C1(e,101)|0)==0;e=e?r:r|524288;e=A<<24>>24==114?e:e|64;e=A<<24>>24==119?e|512:e;return(A<<24>>24==97?e|1024:e)|0}function V3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=h;h=h+16|0;a=i;t[a>>2]=r;r=N3(e,A,a)|0;h=i;return r|0}function N3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;n=h;h=h+128|0;i=n;a=i;f=a+124|0;do{t[a>>2]=0;a=a+4|0}while((a|0)<(f|0));t[i+32>>2]=41;t[i+44>>2]=e;t[i+76>>2]=-1;t[i+84>>2]=e;f=x3(i,A,r)|0;h=n;return f|0}function R3(e,A,r){e=e|0;A=A|0;r=r|0;return T3(e,A,r)|0}function x3(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,f=0,l=0,o=0,u=0,b=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0;J=h;h=h+288|0;F=J+8|0;M=J+17|0;V=J;N=J+16|0;if((t[e+76>>2]|0)>-1)x=d4(e)|0;else x=0;a=i[A>>0]|0;e:do{if(a<<24>>24){I=e+4|0;Z=e+100|0;L=e+108|0;Q=e+8|0;D=M+10|0;z=M+33|0;C=F+4|0;W=M+1|0;Y=M+1|0;o=A;g=0;A=0;l=0;f=0;A:while(1){r:do{if(!(I1(a&255)|0)){a=a<<24>>24==37;i:do{if(a){w=o+1|0;u=i[w>>0]|0;a:do{switch(u<<24>>24){case 37:break i;case 42:{y=0;o=o+2|0;break}default:{a=(u&255)+-48|0;if(a>>>0<10?(i[o+2>>0]|0)==36:0){y=J3(r,a)|0;o=o+3|0;break a}o=(t[r>>2]|0)+(4-1)&~(4-1);y=t[o>>2]|0;t[r>>2]=o+4;o=w}}}while(0);a=i[o>>0]|0;u=a&255;if((u+-48|0)>>>0<10){w=0;do{w=(w*10|0)+-48+u|0;o=o+1|0;a=i[o>>0]|0;u=a&255}while((u+-48|0)>>>0<10)}else w=0;a=a<<24>>24==109;B=(y|0)!=0;l=a?0:l;f=a?0:f;o=a?o+1|0:o;a=B&a;u=o+1|0;switch(i[o>>0]|0){case 104:{E=(i[u>>0]|0)==104;k=E?-2:-1;o=E?o+2|0:u;break}case 108:{E=(i[u>>0]|0)==108;k=E?3:1;o=E?o+2|0:u;break}case 106:{k=3;o=u;break}case 116:case 122:{k=1;o=u;break}case 76:{k=2;o=u;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{k=0;break}default:{R=135;break A}}v=n[o>>0]|0;m=(v&47|0)==3;v=m?v|32:v;m=m?1:k;d=v&255;switch(d<<24>>24){case 99:{w=(w|0)>1?w:1;E=g;break}case 91:{E=g;break}case 110:{H3(y,m,g,((g|0)<0)<<31>>31);u=g;break r}default:{Q1(e,0);do{u=t[I>>2]|0;if(u>>>0<(t[Z>>2]|0)>>>0){t[I>>2]=u+1;u=n[u>>0]|0}else u=z1(e)|0}while((I1(u)|0)!=0);if(!(t[Z>>2]|0))u=t[I>>2]|0;else{u=(t[I>>2]|0)+-1|0;t[I>>2]=u}E=(t[L>>2]|0)+g+u-(t[Q>>2]|0)|0}}Q1(e,w);u=t[I>>2]|0;k=t[Z>>2]|0;if(u>>>0>>0)t[I>>2]=u+1;else{if((z1(e)|0)<0){R=135;break A}k=t[Z>>2]|0}if(k|0)t[I>>2]=(t[I>>2]|0)+-1;a:do{switch(d<<24>>24){case 91:case 99:case 115:{p=(v|0)==99;t:do{if((v|16|0)==115){z6(W|0,-1,256)|0;i[M>>0]=0;if((v|0)==115){i[z>>0]=0;i[D>>0]=0;i[D+1>>0]=0;i[D+2>>0]=0;i[D+3>>0]=0;i[D+4>>0]=0}}else{v=o+1|0;u=(i[v>>0]|0)==94;g=u&1;o=u?o+2|0:v;z6(Y|0,u&1|0,256)|0;i[M>>0]=0;u=i[o>>0]|0;switch(u<<24>>24){case 45:{u=46;R=63;break}case 93:{u=94;R=63;break}default:{}}while(1){if((R|0)==63){R=0;i[M+u>>0]=g^1;u=o+1|0;o=u;u=i[u>>0]|0}n:do{switch(u<<24>>24){case 0:{R=135;break A}case 93:break t;case 45:{v=o+1|0;u=i[v>>0]|0;switch(u<<24>>24){case 93:case 0:{u=45;break n}default:{}}o=i[o+-1>>0]|0;if((o&255)<(u&255)){d=(g^1)&255;o=o&255;do{o=o+1|0;i[M+o>>0]=d;u=i[v>>0]|0}while((o|0)<(u&255|0));o=v}else o=v;break}default:{}}}while(0);u=(u&255)+1|0;R=63}}}while(0);u=p?w+1|0:31;v=(m|0)==1;t:do{if(v){if(a){f=Z2(u<<2)|0;if(!f){l=0;f=0;a=1;R=135;break A}}else f=y;t[F>>2]=0;t[C>>2]=0;d=u;l=0;n:while(1){k=(f|0)==0;do{f:while(1){u=t[I>>2]|0;if(u>>>0<(t[Z>>2]|0)>>>0){t[I>>2]=u+1;u=n[u>>0]|0}else u=z1(e)|0;if(!(i[M+(u+1)>>0]|0))break n;i[N>>0]=u;switch(U1(V,N,1,F)|0){case-1:{l=0;R=135;break A}case-2:break;default:break f}}if(!k){t[f+(l<<2)>>2]=t[V>>2];l=l+1|0}}while(!(a&(l|0)==(d|0)));l=d<<1|1;u=Q2(f,l<<2)|0;if(!u){l=0;a=1;R=135;break A}else{m=d;d=l;f=u;l=m}}if(!(P3(F)|0)){l=0;R=135;break A}else{u=l;l=0;d=f}}else{if(a){l=Z2(u)|0;if(!l){l=0;f=0;a=1;R=135;break A}else{k=u;f=0}while(1){do{u=t[I>>2]|0;if(u>>>0<(t[Z>>2]|0)>>>0){t[I>>2]=u+1;u=n[u>>0]|0}else u=z1(e)|0;if(!(i[M+(u+1)>>0]|0)){u=f;d=0;f=0;break t}i[l+f>>0]=u;f=f+1|0}while((f|0)!=(k|0));f=k<<1|1;u=Q2(l,f)|0;if(!u){f=0;a=1;R=135;break A}else{m=k;k=f;l=u;f=m}}}if(!y){l=k;while(1){f=t[I>>2]|0;if(f>>>0>>0){t[I>>2]=f+1;f=n[f>>0]|0}else f=z1(e)|0;if(!(i[M+(f+1)>>0]|0)){u=0;l=0;d=0;f=0;break t}l=t[Z>>2]|0}}else{u=0;l=k;while(1){f=t[I>>2]|0;if(f>>>0>>0){t[I>>2]=f+1;f=n[f>>0]|0}else f=z1(e)|0;if(!(i[M+(f+1)>>0]|0)){l=y;d=0;f=0;break t}i[y+u>>0]=f;u=u+1|0;l=t[Z>>2]|0}}}}while(0);if(!(t[Z>>2]|0))k=t[I>>2]|0;else{k=(t[I>>2]|0)+-1|0;t[I>>2]=k}k=k-(t[Q>>2]|0)+(t[L>>2]|0)|0;if(!k){R=137;break A}if(!((k|0)==(w|0)|p^1)){R=137;break A}do{if(a)if(v){t[y>>2]=d;break}else{t[y>>2]=l;break}}while(0);if(!p){if(d|0)t[d+(u<<2)>>2]=0;if(!l){l=0;break a}i[l+u>>0]=0}break}case 120:case 88:case 112:{u=16;R=123;break}case 111:{u=8;R=123;break}case 117:case 100:{u=10;R=123;break}case 105:{u=0;R=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{b=+X3(e,m,0);if((t[L>>2]|0)==((t[Q>>2]|0)-(t[I>>2]|0)|0)){R=137;break A}if(y)switch(m|0){case 0:{s[y>>2]=b;break a}case 1:{c[y>>3]=b;break a}case 2:{c[y>>3]=b;break a}default:break a}break}default:{}}}while(0);do{if((R|0)==123){R=0;u=D1(e,u,0,-1,-1)|0;if((t[L>>2]|0)==((t[Q>>2]|0)-(t[I>>2]|0)|0)){R=137;break A}if(B&(v|0)==112){t[y>>2]=u;break}else{H3(y,m,u,G);break}}}while(0);A=A+(B&1)|0;u=(t[L>>2]|0)+E+(t[I>>2]|0)-(t[Q>>2]|0)|0;break r}}while(0);o=o+(a&1)|0;Q1(e,0);a=t[I>>2]|0;if(a>>>0<(t[Z>>2]|0)>>>0){t[I>>2]=a+1;a=n[a>>0]|0}else a=z1(e)|0;if((a|0)!=(n[o>>0]|0)){R=22;break A}u=g+1|0}else{while(1){a=o+1|0;if(!(I1(n[a>>0]|0)|0))break;else o=a}Q1(e,0);do{a=t[I>>2]|0;if(a>>>0<(t[Z>>2]|0)>>>0){t[I>>2]=a+1;a=n[a>>0]|0}else a=z1(e)|0}while((I1(a)|0)!=0);if(!(t[Z>>2]|0))a=t[I>>2]|0;else{a=(t[I>>2]|0)+-1|0;t[I>>2]=a}u=(t[L>>2]|0)+g+a-(t[Q>>2]|0)|0}}while(0);o=o+1|0;a=i[o>>0]|0;if(!(a<<24>>24))break e;else g=u}if((R|0)==22){if(t[Z>>2]|0)t[I>>2]=(t[I>>2]|0)+-1;if((A|0)!=0|(a|0)>-1)break;else{a=0;R=136}}else if((R|0)==135){a=a&1;if(!A)R=136}else if((R|0)==137)a=a&1;if((R|0)==136)A=-1;if(a){G2(l);G2(f)}}else A=0}while(0);if(x|0)v4(e);h=J;return A|0}function J3(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;i=h;h=h+16|0;r=i;t[r>>2]=t[e>>2];while(1){a=(t[r>>2]|0)+(4-1)&~(4-1);e=t[a>>2]|0;t[r>>2]=a+4;if(A>>>0>1)A=A+-1|0;else break}h=i;return e|0}function H3(e,A,r,n){e=e|0;A=A|0;r=r|0;n=n|0;e:do{if(e|0)switch(A|0){case-2:{i[e>>0]=r;break e}case-1:{a[e>>1]=r;break e}case 0:{t[e>>2]=r;break e}case 1:{t[e>>2]=r;break e}case 3:{A=e;t[A>>2]=r;t[A+4>>2]=n;break e}default:break e}}while(0);return}function P3(e){e=e|0;if(!e)e=1;else e=(t[e>>2]|0)==0&1;return e|0}function X3(e,A,r){e=e|0;A=A|0;r=r|0;var a=0.0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;switch(A|0){case 0:{o=-149;u=24;s=4;break}case 1:{o=-1074;u=53;s=4;break}case 2:{o=-1074;u=53;s=4;break}default:a=0.0}e:do{if((s|0)==4){h=e+4|0;b=e+100|0;do{A=t[h>>2]|0;if(A>>>0<(t[b>>2]|0)>>>0){t[h>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0}while((I1(A)|0)!=0);A:do{switch(A|0){case 43:case 45:{l=1-(((A|0)==45&1)<<1)|0;A=t[h>>2]|0;if(A>>>0<(t[b>>2]|0)>>>0){t[h>>2]=A+1;f=n[A>>0]|0;break A}else{f=z1(e)|0;break A}}default:{f=A;l=1}}}while(0);A=0;do{if((f|32|0)!=(i[153584+A>>0]|0))break;do{if(A>>>0<7){f=t[h>>2]|0;if(f>>>0<(t[b>>2]|0)>>>0){t[h>>2]=f+1;f=n[f>>0]|0;break}else{f=z1(e)|0;break}}}while(0);A=A+1|0}while(A>>>0<8);A:do{switch(A|0){case 8:break;case 3:{s=23;break}default:{c=(r|0)!=0;if(c&A>>>0>3)if((A|0)==8)break A;else{s=23;break A}r:do{if(!A){A=0;do{if((f|32|0)!=(i[153593+A>>0]|0))break r;do{if(A>>>0<2){f=t[h>>2]|0;if(f>>>0<(t[b>>2]|0)>>>0){t[h>>2]=f+1;f=n[f>>0]|0;break}else{f=z1(e)|0;break}}}while(0);A=A+1|0}while(A>>>0<3)}}while(0);switch(A|0){case 3:{A=t[h>>2]|0;if(A>>>0<(t[b>>2]|0)>>>0){t[h>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0;if((A|0)==40)A=1;else{if(!(t[b>>2]|0)){a=p;break e}t[h>>2]=(t[h>>2]|0)+-1;a=p;break e}while(1){f=t[h>>2]|0;if(f>>>0<(t[b>>2]|0)>>>0){t[h>>2]=f+1;f=n[f>>0]|0}else f=z1(e)|0;if(!((f+-48|0)>>>0<10|(f+-65|0)>>>0<26)?!((f|0)==95|(f+-97|0)>>>0<26):0)break;A=A+1|0}if((f|0)==41){a=p;break e}f=(t[b>>2]|0)==0;if(!f)t[h>>2]=(t[h>>2]|0)+-1;if(!c){t[(R2()|0)>>2]=22;Q1(e,0);a=0.0;break e}if(!A){a=p;break e}while(1){A=A+-1|0;if(!f)t[h>>2]=(t[h>>2]|0)+-1;if(!A){a=p;break e}}}case 0:{if((f|0)==48){A=t[h>>2]|0;if(A>>>0<(t[b>>2]|0)>>>0){t[h>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0;if((A|32|0)==120){a=+S3(e,u,o,l,r);break e}if(!(t[b>>2]|0))A=48;else{t[h>>2]=(t[h>>2]|0)+-1;A=48}}else A=f;a=+j3(e,A,u,o,l,r);break e}default:{if(t[b>>2]|0)t[h>>2]=(t[h>>2]|0)+-1;t[(R2()|0)>>2]=22;Q1(e,0);a=0.0;break e}}}}}while(0);if((s|0)==23){f=(t[b>>2]|0)==0;if(!f)t[h>>2]=(t[h>>2]|0)+-1;if((r|0)!=0&A>>>0>3)do{if(!f)t[h>>2]=(t[h>>2]|0)+-1;A=A+-1|0}while(A>>>0>3)}a=+(l|0)*E}}while(0);return+a}function S3(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var f=0.0,l=0,s=0,c=0.0,o=0,u=0,b=0,h=0.0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;y=e+4|0;l=t[y>>2]|0;B=e+100|0;if(l>>>0<(t[B>>2]|0)>>>0){t[y>>2]=l+1;s=n[l>>0]|0;o=0}else{s=z1(e)|0;o=0}e:while(1){switch(s|0){case 46:{E=8;break e}case 48:break;default:{v=0;b=0;h=1.0;f=0.0;l=0;u=s;g=o;p=0;m=0;o=0;s=0;break e}}l=t[y>>2]|0;if(l>>>0<(t[B>>2]|0)>>>0){t[y>>2]=l+1;s=n[l>>0]|0;o=1;continue}else{s=z1(e)|0;o=1;continue}}if((E|0)==8){l=t[y>>2]|0;if(l>>>0<(t[B>>2]|0)>>>0){t[y>>2]=l+1;s=n[l>>0]|0}else s=z1(e)|0;if((s|0)==48){o=0;s=0;do{l=t[y>>2]|0;if(l>>>0<(t[B>>2]|0)>>>0){t[y>>2]=l+1;u=n[l>>0]|0}else u=z1(e)|0;o=d6(o|0,s|0,-1,-1)|0;s=G}while((u|0)==48);v=1;b=0;h=1.0;f=0.0;l=0;g=1;p=0;m=0}else{v=1;b=0;h=1.0;f=0.0;l=0;u=s;g=o;p=0;m=0;o=0;s=0}}while(1){k=u+-48|0;w=u|32;if(k>>>0>=10){d=(u|0)==46;if(!(d|(w+-97|0)>>>0<6))break;if(d)if(!v){v=1;c=h;d=g;o=m;s=p;k=m;w=p}else{u=46;break}else E=20}else E=20;if((E|0)==20){E=0;u=(u|0)>57?w+-87|0:k;do{if(!((p|0)<0|(p|0)==0&m>>>0<8))if((p|0)<0|(p|0)==0&m>>>0<14){h=h*.0625;c=h;f=f+h*+(u|0);break}else{g=(b|0)!=0|(u|0)==0;b=g?b:1;c=h;f=g?f:f+h*.5;break}else{c=h;l=u+(l<<4)|0}}while(0);k=d6(m|0,p|0,1,0)|0;d=1;w=G}u=t[y>>2]|0;if(u>>>0<(t[B>>2]|0)>>>0){t[y>>2]=u+1;h=c;u=n[u>>0]|0;g=d;p=w;m=k;continue}else{h=c;u=z1(e)|0;g=d;p=w;m=k;continue}}do{if(!g){l=(t[B>>2]|0)==0;if(!l)t[y>>2]=(t[y>>2]|0)+-1;if(a){if(!l)t[y>>2]=(t[y>>2]|0)+-1;if(!((v|0)==0|l))t[y>>2]=(t[y>>2]|0)+-1}else Q1(e,0);f=+(i|0)*0.0}else{w=(v|0)==0;k=w?m:o;w=w?p:s;if((p|0)<0|(p|0)==0&m>>>0<8){o=m;s=p;while(1){l=l<<4;E=o;o=d6(o|0,s|0,1,0)|0;if(!((s|0)<0|(s|0)==0&E>>>0<7)){b=l;break}else s=G}}else b=l;if((u|32|0)==112){s=U3(e,a)|0;l=G;if((s|0)==0&(l|0)==-2147483648){if(!a){Q1(e,0);f=0.0;break}if(!(t[B>>2]|0)){s=0;l=0}else{t[y>>2]=(t[y>>2]|0)+-1;s=0;l=0}}}else if(!(t[B>>2]|0)){s=0;l=0}else{t[y>>2]=(t[y>>2]|0)+-1;s=0;l=0}o=C6(k|0,w|0,2)|0;o=d6(o|0,G|0,-32,-1)|0;o=d6(o|0,G|0,s|0,l|0)|0;l=G;if(!b){f=+(i|0)*0.0;break}y=0-r|0;a=((y|0)<0)<<31>>31;if((l|0)>(a|0)|(l|0)==(a|0)&o>>>0>y>>>0){t[(R2()|0)>>2]=34;f=+(i|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=r+-106|0;a=((y|0)<0)<<31>>31;if((l|0)<(a|0)|(l|0)==(a|0)&o>>>0>>0){t[(R2()|0)>>2]=34;f=+(i|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((b|0)>-1){s=b;do{y=!(f>=.5);s=s<<1|(y^1)&1;f=f+(y?f:f+-1.0);o=d6(o|0,l|0,-1,-1)|0;l=G}while((s|0)>-1);h=f;u=s}else{h=f;u=b}y=((A|0)<0)<<31>>31;r=v6(32,0,r|0,((r|0)<0)<<31>>31|0)|0;l=d6(r|0,G|0,o|0,l|0)|0;r=G;if((r|0)<(y|0)|(r|0)==(y|0)&l>>>0>>0)if((l|0)>0)E=59;else{s=0;l=84;E=61}else{l=A;E=59}if((E|0)==59)if((l|0)<53){s=l;l=84-l|0;E=61}else{c=0.0;f=+(i|0)}if((E|0)==61){f=+(i|0);c=+h1(+o1(1.0,l),f);l=s}i=(u&1|0)==0&(h!=0.0&(l|0)<32);f=(i?0.0:h)*f+(c+f*+((u+(i&1)|0)>>>0))-c;if(!(f!=0.0))t[(R2()|0)>>2]=34;f=+w1(f,o)}}while(0);return+f}function j3(e,A,r,i,a,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;f=f|0;var l=0.0,s=0.0,c=0,o=0,u=0,b=0,w=0,k=0,d=0.0,v=0.0,g=0.0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,L=0,D=0,z=0,W=0,Y=0,F=0,M=0.0;F=h;h=h+512|0;z=F;W=i+r|0;Y=0-W|0;Z=e+4|0;L=e+100|0;c=0;e:while(1){switch(A|0){case 46:{C=6;break e}case 48:break;default:{p=0;w=c;k=0;b=0;break e}}A=t[Z>>2]|0;if(A>>>0<(t[L>>2]|0)>>>0){t[Z>>2]=A+1;A=n[A>>0]|0;c=1;continue}else{A=z1(e)|0;c=1;continue}}if((C|0)==6){A=t[Z>>2]|0;if(A>>>0<(t[L>>2]|0)>>>0){t[Z>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0;if((A|0)==48){c=0;A=0;while(1){c=d6(c|0,A|0,-1,-1)|0;b=G;A=t[Z>>2]|0;if(A>>>0<(t[L>>2]|0)>>>0){t[Z>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0;if((A|0)==48)A=b;else{p=1;w=1;k=c;break}}}else{p=1;w=c;k=0;b=0}}t[z>>2]=0;u=A+-48|0;o=(A|0)==46;e:do{if(o|u>>>0<10){I=z+496|0;E=0;c=0;m=0;B=p;y=w;C=u;w=0;u=0;A:while(1){do{if(o)if(!B){B=1;k=w;b=u}else break A;else{w=d6(w|0,u|0,1,0)|0;u=G;p=(A|0)!=48;if((c|0)>=125){if(!p)break;t[I>>2]=t[I>>2]|1;break}o=z+(c<<2)|0;if(!E)A=C;else A=A+-48+((t[o>>2]|0)*10|0)|0;t[o>>2]=A;E=E+1|0;y=(E|0)==9;E=y?0:E;c=c+(y&1)|0;m=p?w:m;y=1}}while(0);A=t[Z>>2]|0;if(A>>>0<(t[L>>2]|0)>>>0){t[Z>>2]=A+1;A=n[A>>0]|0}else A=z1(e)|0;C=A+-48|0;o=(A|0)==46;if(!(o|C>>>0<10)){p=B;o=y;C=29;break e}}A=E;o=(y|0)!=0;C=37}else{E=0;c=0;m=0;o=w;w=0;u=0;C=29}}while(0);do{if((C|0)==29){I=(p|0)==0;k=I?w:k;b=I?u:b;o=(o|0)!=0;if(!(o&(A|32|0)==101))if((A|0)>-1){A=E;C=37;break}else{A=E;C=39;break}o=U3(e,f)|0;A=G;if((o|0)==0&(A|0)==-2147483648){if(!f){Q1(e,0);l=0.0;break}if(!(t[L>>2]|0)){o=0;A=0}else{t[Z>>2]=(t[Z>>2]|0)+-1;o=0;A=0}}y=d6(o|0,A|0,k|0,b|0)|0;A=E;b=G;C=41}}while(0);if((C|0)==37)if(t[L>>2]|0){t[Z>>2]=(t[Z>>2]|0)+-1;if(o){y=k;C=41}else C=40}else C=39;if((C|0)==39)if(o){y=k;C=41}else C=40;do{if((C|0)==40){t[(R2()|0)>>2]=22;Q1(e,0);l=0.0}else if((C|0)==41){o=t[z>>2]|0;if(!o){l=+(a|0)*0.0;break}if(((u|0)<0|(u|0)==0&w>>>0<10)&((y|0)==(w|0)&(b|0)==(u|0))?(r|0)>30|(o>>>r|0)==0:0){l=+(a|0)*+(o>>>0);break}e=(i|0)/-2|0;L=((e|0)<0)<<31>>31;if((b|0)>(L|0)|(b|0)==(L|0)&y>>>0>e>>>0){t[(R2()|0)>>2]=34;l=+(a|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}e=i+-106|0;L=((e|0)<0)<<31>>31;if((b|0)<(L|0)|(b|0)==(L|0)&y>>>0>>0){t[(R2()|0)>>2]=34;l=+(a|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(A){if((A|0)<9){u=z+(c<<2)|0;o=t[u>>2]|0;while(1){o=o*10|0;if((A|0)>=8)break;else A=A+1|0}t[u>>2]=o}c=c+1|0}if((m|0)<9?(m|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){l=+(a|0)*+((t[z>>2]|0)>>>0);break}if((y|0)<9){l=+(a|0)*+((t[z>>2]|0)>>>0)/+(t[63712+(8-y<<2)>>2]|0);break}e=r+27+(P(y,-3)|0)|0;A=t[z>>2]|0;if((e|0)>30|(A>>>e|0)==0){l=+(a|0)*+(A>>>0)*+(t[63712+(y+-10<<2)>>2]|0);break}}A=(y|0)%9|0;if(!A){A=0;u=0}else{m=(y|0)>-1?A:A+9|0;w=t[63712+(8-m<<2)>>2]|0;if(c){k=1e9/(w|0)|0;u=0;b=0;o=y;A=0;do{Z=z+(A<<2)|0;L=t[Z>>2]|0;e=((L>>>0)/(w>>>0)|0)+u|0;t[Z>>2]=e;u=P(k,(L>>>0)%(w>>>0)|0)|0;e=(A|0)==(b|0)&(e|0)==0;o=e?o+-9|0:o;b=e?b+1&127:b;A=A+1|0}while((A|0)!=(c|0));if(!u)u=b;else{t[z+(c<<2)>>2]=u;u=b;c=c+1|0}}else{u=0;c=0;o=y}A=0;y=9-m+o|0}e:while(1){m=(y|0)<18;p=(y|0)==18;E=z+(u<<2)|0;while(1){if(!m){if(!p){o=y;break e}if((t[E>>2]|0)>>>0>=9007199){o=18;break e}}o=0;B=c;c=c+127|0;while(1){b=c&127;w=z+(b<<2)|0;c=C6(t[w>>2]|0,0,29)|0;c=d6(c|0,G|0,o|0,0)|0;o=G;if(o>>>0>0|(o|0)==0&c>>>0>1e9){k=p6(c|0,o|0,1e9,0)|0;c=E6(c|0,o|0,1e9,0)|0}else k=0;t[w>>2]=c;e=(b|0)==(u|0);B=(c|0)==0&(((b|0)!=(B+127&127|0)|e)^1)?b:B;if(e)break;else{o=k;c=b+-1|0}}A=A+-29|0;if(k|0)break;else c=B}u=u+127&127;c=B+127&127;o=z+((B+126&127)<<2)|0;if((u|0)==(B|0))t[o>>2]=t[o>>2]|t[z+(c<<2)>>2];else c=B;t[z+(u<<2)>>2]=k;y=y+9|0}e:while(1){E=c+1&127;B=z+((c+127&127)<<2)|0;while(1){k=(o|0)==18;p=(o|0)>27?9:1;y=u;while(1){w=0;while(1){u=w+y&127;if((u|0)==(c|0)){D=2;C=88;break}u=t[z+(u<<2)>>2]|0;b=t[63744+(w<<2)>>2]|0;if(u>>>0>>0){D=2;C=88;break}if(u>>>0>b>>>0)break;u=w+1|0;if((w|0)<1)w=u;else{D=u;C=88;break}}if((C|0)==88?(C=0,k&(D|0)==2):0){l=0.0;b=0;break e}A=p+A|0;if((y|0)==(c|0))y=c;else break}k=(1<>>p;w=0;u=y;b=y;do{Z=z+(b<<2)|0;L=t[Z>>2]|0;e=(L>>>p)+w|0;t[Z>>2]=e;w=P(L&k,m)|0;e=(b|0)==(u|0)&(e|0)==0;o=e?o+-9|0:o;u=e?u+1&127:u;b=b+1&127}while((b|0)!=(c|0));if(!w)continue;if((E|0)!=(u|0))break;t[B>>2]=t[B>>2]|1}t[z+(c<<2)>>2]=w;c=E}do{u=b+y&127;o=c+1&127;if((u|0)==(c|0)){t[z+(o+-1<<2)>>2]=0;c=o}l=l*1.0e9+ +((t[z+(u<<2)>>2]|0)>>>0);b=b+1|0}while((b|0)!=2);g=+(a|0);s=l*g;b=A+53|0;w=b-i|0;k=(w|0)<(r|0);u=k?(w|0)>0?w:0:r;if((u|0)<53){M=+h1(+o1(1.0,105-u|0),s);d=+k1(s,+o1(1.0,53-u|0));v=M;l=d;d=M+(s-d)}else{v=0.0;l=0.0;d=s}o=y+2&127;if((o|0)!=(c|0)){o=t[z+(o<<2)>>2]|0;do{if(o>>>0>=5e8){if((o|0)!=5e8){l=g*.75+l;break}if((y+3&127|0)==(c|0)){l=g*.5+l;break}else{l=g*.75+l;break}}else{if((o|0)==0?(y+3&127|0)==(c|0):0)break;l=g*.25+l}}while(0);if((53-u|0)>1?!(+k1(l,1.0)!=0.0):0)s=l+1.0;else s=l}else s=l;l=d+s-v;do{if((b&2147483647|0)>(-2-W|0)){W=!(+Q(+l)>=9007199254740992.0);A=A+((W^1)&1)|0;l=W?l:l*.5;if((A+50|0)<=(Y|0)?!(s!=0.0&(k&((u|0)!=(w|0)|W))):0)break;t[(R2()|0)>>2]=34}}while(0);l=+w1(l,A)}}while(0);h=F;return+l}function U3(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,f=0,l=0;f=e+4|0;r=t[f>>2]|0;l=e+100|0;if(r>>>0<(t[l>>2]|0)>>>0){t[f>>2]=r+1;r=n[r>>0]|0}else r=z1(e)|0;switch(r|0){case 43:case 45:{i=(r|0)==45&1;r=t[f>>2]|0;if(r>>>0<(t[l>>2]|0)>>>0){t[f>>2]=r+1;r=n[r>>0]|0}else r=z1(e)|0;if((A|0)!=0&(r+-48|0)>>>0>9?(t[l>>2]|0)!=0:0)t[f>>2]=(t[f>>2]|0)+-1;break}default:i=0}if((r+-48|0)>>>0>9)if(!(t[l>>2]|0)){i=-2147483648;r=0}else{t[f>>2]=(t[f>>2]|0)+-1;i=-2147483648;r=0}else{a=0;do{a=r+-48+(a*10|0)|0;r=t[f>>2]|0;if(r>>>0<(t[l>>2]|0)>>>0){t[f>>2]=r+1;r=n[r>>0]|0}else r=z1(e)|0}while((r+-48|0)>>>0<10&(a|0)<214748364);A=((a|0)<0)<<31>>31;if((r+-48|0)>>>0<10)do{A=k6(a|0,A|0,10,0)|0;a=G;r=d6(r|0,((r|0)<0)<<31>>31|0,-48,-1)|0;a=d6(r|0,G|0,A|0,a|0)|0;A=G;r=t[f>>2]|0;if(r>>>0<(t[l>>2]|0)>>>0){t[f>>2]=r+1;r=n[r>>0]|0}else r=z1(e)|0}while((r+-48|0)>>>0<10&((A|0)<21474836|(A|0)==21474836&a>>>0<2061584302));if((r+-48|0)>>>0<10)do{r=t[f>>2]|0;if(r>>>0<(t[l>>2]|0)>>>0){t[f>>2]=r+1;r=n[r>>0]|0}else r=z1(e)|0}while((r+-48|0)>>>0<10);if(t[l>>2]|0)t[f>>2]=(t[f>>2]|0)+-1;l=(i|0)!=0;r=v6(0,0,a|0,A|0)|0;i=l?G:A;r=l?r:a}G=i;return r|0}function T3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;i=e+84|0;n=t[i>>2]|0;f=r+256|0;a=G1(n,0,f)|0;a=(a|0)==0?f:a-n|0;r=a>>>0>>0?a:r;Q6(A|0,n|0,r|0)|0;t[e+4>>2]=n+r;A=n+a|0;t[e+8>>2]=A;t[i>>2]=A;return r|0}function O3(e,A,r){e=e|0;A=A|0;r=r|0;return _3(e,A,r)|0}function _3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;if((t[e+76>>2]|0)>-1){i=(d4(e)|0)==0;A=q3(e,A,r)|0;if(!i)v4(e)}else A=q3(e,A,r)|0;return A|0}function q3(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;if((r|0)==1)A=A-(t[e+8>>2]|0)+(t[e+4>>2]|0)|0;i=e+20|0;a=e+28|0;if((t[i>>2]|0)>>>0>(t[a>>2]|0)>>>0?(L5[t[e+36>>2]&63](e,0,0)|0,(t[i>>2]|0)==0):0)A=-1;else{t[e+16>>2]=0;t[a>>2]=0;t[i>>2]=0;if((L5[t[e+40>>2]&63](e,A,r)|0)<0)A=-1;else{t[e+8>>2]=0;t[e+4>>2]=0;t[e>>2]=t[e>>2]&-17;A=0}}return A|0}function K3(e){e=e|0;var A=0,r=0,a=0,t=0,n=0,f=0;while(1){a=i[e>>0]|0;A=a<<24>>24;t=e+1|0;if(!(I1(A)|0))break;else e=t}switch(A|0){case 45:{e=1;n=5;break}case 43:{e=0;n=5;break}default:{f=0;r=e;e=a}}if((n|0)==5){f=e;r=t;e=i[t>>0]|0}A=(e<<24>>24)+-48|0;if(A>>>0<10){e=0;do{r=r+1|0;e=(e*10|0)-A|0;A=(i[r>>0]|0)+-48|0}while(A>>>0<10)}else e=0;return(f|0?e:0-e|0)|0}function $3(e){e=e|0;return+ +e8(e,0)}function e8(e,A){e=e|0;A=A|0;return+ +A8(e,A,1)}function A8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0.0,a=0,n=0,f=0,l=0;l=h;h=h+128|0;f=l;a=f;n=a+124|0;do{t[a>>2]=0;a=a+4|0}while((a|0)<(n|0));a=f+4|0;t[a>>2]=e;n=f+8|0;t[n>>2]=-1;t[f+44>>2]=e;t[f+76>>2]=-1;Q1(f,0);i=+X3(f,r,1);r=(t[a>>2]|0)-(t[n>>2]|0)+(t[f+108>>2]|0)|0;if(A|0)t[A>>2]=r|0?e+r|0:e;h=l;return+i}function r8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var t=0,n=0,f=0;e:do{if(!r)A=0;else{f=A;while(1){n=r>>>1;A=f+(P(n,i)|0)|0;t=Z5[a&127](e,A)|0;if(!t)break e;if((r|0)==1){A=0;break e}t=(t|0)<0;r=t?n:r-n|0;if(!r){A=0;break}else f=t?f:A}}}while(0);return A|0}function i8(e,A){e=e|0;A=A|0;var r=0,i=0,t=0;t=e+2|0;i=e+4|0;r=k6((f[A+2>>1]|0)<<16|(f[A>>1]|0)|0,f[A+4>>1]|0|0,(f[t>>1]|0)<<16|(f[e>>1]|0)|0,f[i>>1]|0|0)|0;A=d6(r|0,G|0,f[A+6>>1]|0|0,0)|0;r=G;a[e>>1]=A;e=y6(A|0,r|0,16)|0;a[t>>1]=e;a[i>>1]=r;G=r&65535;return A|0}function a8(e){e=e|0;var A=0;A=186608;t[A>>2]=e+-1;t[A+4>>2]=0;return}function t8(){var e=0,A=0,r=0;A=186608;A=k6(t[A>>2]|0,t[A+4>>2]|0,1284865837,1481765933)|0;A=d6(A|0,G|0,1,0)|0;e=G;r=186608;t[r>>2]=A;t[r+4>>2]=e;e=y6(A|0,e|0,33)|0;return e|0}function n8(e){e=e|0;a[96876]=a[32922]|0;a[96877]=a[32923]|0;a[96878]=a[32924]|0;a[32922]=a[e>>1]|0;a[32923]=a[e+2>>1]|0;a[32924]=a[e+4>>1]|0;return 193752}function f8(e){e=e|0;var A=0,r=0;A=h;h=h+16|0;r=A;a[r>>1]=13070;a[r+2>>1]=e;a[r+4>>1]=e>>>16;n8(r)|0;h=A;return}function l8(e){e=e|0;var A=0;A=i8(e,65850)|0;A=C6(A|0,G|0,4)|0;e=G|1072693248;t[u>>2]=A;t[u+4>>2]=e;return+(+c[u>>3]+-1.0)}function s8(){return+ +l8(65844)}function c8(e,A){e=e|0;A=A|0;if(!e)A=L2(1,24)|0;else{t[A>>2]=0;t[A+4>>2]=0;t[A+8>>2]=0;t[A+12>>2]=0;t[A+16>>2]=0;t[A+20>>2]=0}return A|0}function o8(e){e=e|0;var A=0,r=0;A=t[e>>2]|0;if(A|0)do{G2(t[A>>2]|0);r=A;A=t[A+4>>2]|0;G2(r)}while((A|0)!=0);G2(e);return}function u8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0;f=e+16|0;e:do{if(!(t[f>>2]|0)){c=e+12|0;n=t[c>>2]|0;if(n>>>0>>0){do{if(A)if(!r){t[f>>2]=1;A=0;break e}else{f=e+8|0;t[f>>2]=r;n=1024;A=r;break}else{n=a<<3;n=n>>>0>1024?n:1024;s=Z2(8)|0;if(!s){t[f>>2]=1;A=0;break e}A=Z2(n)|0;t[s>>2]=A;r=A;if(!A){G2(s);t[f>>2]=1;A=0;break e}t[s+4>>2]=0;f=e+4|0;l=t[f>>2]|0;if(l|0)t[l+4>>2]=s;if(!(t[e>>2]|0))t[e>>2]=s;t[f>>2]=s;f=e+8|0;t[f>>2]=r}}while(0);t[c>>2]=n}else{f=e+8|0;A=t[f>>2]|0;r=A}r=r+a&3;r=((r|0)==0?0:4-r|0)+a|0;t[f>>2]=A+r;t[c>>2]=n-r;if(i)z6(A|0,0,r|0)|0}else A=0}while(0);return A|0}function b8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0;p=h;h=h+48|0;l=p;g=h8()|0;e:do{if(!g)A=12;else{m=c8(0,0)|0;if(!m){w8(g);A=12;break}i=l+8|0;t[i>>2]=0;t[i+4>>2]=0;t[i+8>>2]=0;t[i+12>>2]=0;t[i+16>>2]=0;t[l>>2]=m;t[l+4>>2]=g;t[l+16>>2]=A;t[l+32>>2]=r;i=l+28|0;t[i>>2]=-1;A=k8(l)|0;A:do{if(!A){f=l+20|0;a=t[f>>2]|0;t[e>>2]=a+-1;s=t[l+8>>2]|0;A=t[i>>2]|0;if((A|0)<(a|0)){n=L2(1,68)|0;if(n){d=A>>>31^1;t[n+60>>2]=d;t[n+28>>2]=a;if((r&8|0)==0|(d|0)!=0){A=d8(0,g,s,n)|0;if(A|0){f=0;l=0;a=0;i=0;break}a=t[n+40>>2]|0;if((a|0)>0){A=(a<<2)+4|0;i=Z2(A)|0;if(!i){f=0;l=0;A=12;a=0;i=0;break}t[n+32>>2]=i;z6(i|0,-1,A|0)|0}else i=0;d=L2(a<<1|1,4)|0;t[n+36>>2]=d;if(!d){f=0;l=0;A=12;a=0;i=0;break}A=L2(t[f>>2]|0,12)|0;if(!A){f=0;l=0;A=12;a=0;i=0;break}t[n+16>>2]=A;A=d8(m,g,s,n)|0;if(!A)A=i;else{f=0;l=0;a=0;i=0;break}}else A=0;d=l+24|0;A=v8(m,g,s,d,A)|0;if(!A){A=t[d>>2]|0;t[d>>2]=A+1;A=g8(m,0,0,A)|0;if((A|0)!=0?(v=m8(m,s,A)|0,(v|0)!=0):0){A=p8(m,g,v)|0;if(!A){i=t[d>>2]|0;A=i<<2;w=Z2(A)|0;if(w){k=Z2(A)|0;if(k){if((i|0)>0)z6(w|0,0,i<<2|0)|0;E8(v,0,w,0)|0;a=t[d>>2]|0;if((a|0)>0){A=0;i=0;do{t[k+(i<<2)>>2]=A;b=w+(i<<2)|0;A=A+1+(t[b>>2]|0)|0;t[b>>2]=0;i=i+1|0}while((i|0)<(a|0));o=A}else o=0;u=L2(o+1|0,32)|0;if(u){t[n>>2]=u;b=n+4|0;t[b>>2]=o;A=E8(v,u,w,k)|0;if(!A){t[n+20>>2]=0;a=v+24|0;A=t[a>>2]|0;i=0;while(1){i=i+1|0;if((t[A>>2]|0)<=-1)break;else A=A+32|0}c=L2(i,32)|0;if(!c){f=w;l=k;A=12;a=w;i=k}else{t[n+8>>2]=c;i=t[a>>2]|0;a=t[i>>2]|0;if((a|0)>-1){A=0;do{t[c+(A<<5)+8>>2]=u+(t[k+(a<<2)>>2]<<5);t[c+(A<<5)+12>>2]=a;l=c+(A<<5)+16|0;t[l>>2]=0;s=i+12|0;f=t[s>>2]|0;if(f|0){a=0;do{E=a;a=a+1|0}while((t[f+(E<<2)>>2]|0)>-1);a=a<<2;f=Z2(a)|0;t[l>>2]=f;if(!f){f=w;l=k;A=12;a=w;i=k;break A}Q6(f|0,t[s>>2]|0,a|0)|0}t[c+(A<<5)+20>>2]=t[i+16>>2];A=A+1|0;i=i+32|0;a=t[i>>2]|0}while((a|0)>-1)}else A=0;t[c+(A<<5)+8>>2]=0;t[b>>2]=o;t[n+12>>2]=u+(t[k+(t[t[v+28>>2]>>2]<<2)>>2]<<5);t[n+52>>2]=t[d>>2];t[n+56>>2]=r;o8(m);w8(g);G2(w);G2(k);t[e+4>>2]=n;A=0;break e}}else{f=w;l=k;a=w;i=k}}else{f=w;l=k;A=12;a=w;i=k}}else{f=w;l=k;A=12;a=w;i=0}}else{f=w;l=0;A=12;a=0;i=0}}else{f=0;l=0;a=0;i=0}}else{f=0;l=0;A=12;a=0;i=0}}else{f=0;l=0;a=0;i=0}}else{f=0;l=0;A=12;a=0;i=0}}else{n=0;f=0;l=0;A=6;a=0;i=0}}else{n=0;f=0;l=0;a=0;i=0}}while(0);o8(m);w8(g);if(f|0)G2(a);if(l|0)G2(i);t[e+4>>2]=n;B8(e)}}while(0);h=p;return A|0}function h8(){var e=0,A=0;e=Z2(20)|0;do{if(e){A=Z2(2048)|0;t[e+16>>2]=A;if(!A){G2(e);e=0;break}else{t[e>>2]=512;t[e+4>>2]=1024e3;t[e+8>>2]=128;t[e+12>>2]=0;break}}}while(0);return e|0}function w8(e){e=e|0;G2(t[e+16>>2]|0);G2(e);return}function k8(e){e=e|0;var A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0;m=h;h=h+16|0;w=m+4|0;k=m;d=t[e+32>>2]&1;v=e+16|0;r=t[v>>2]|0;g=t[e+4>>2]|0;A=Z8(g,0)|0;e:do{if(!A){o=(d|0)!=0;u=e+8|0;b=e+12|0;A=0;c=1;A:while(1){n=0;f=A;a=0;r:while(1){A=i[r>>0]|0;if(o){if(A<<24>>24==40)break;if((f|0)!=0&A<<24>>24==41)s=13;else s=14}else if(A<<24>>24==92)switch(i[r+1>>0]|0){case 40:break r;case 41:{s=13;break}default:s=14}else s=14;if((s|0)==13){s=0;l=g8(t[e>>2]|0,-1,-1,-1)|0;t[u>>2]=l;if(!l){A=12;break e}else l=a}else if((s|0)==14){s=0;A=H8(e,r)|0;if(A|0)break e;l=a;r=t[b>>2]|0}i:while(1){a:while(1){A=i[r>>0]|0;switch(A<<24>>24){case 42:case 92:break;default:{if(!o)break a;switch(A<<24>>24){case 123:case 63:case 43:break;default:break a}}}A=A<<24>>24==92;if(o&A)break;a=r+1|0;if(A)switch(i[a>>0]|0){case 123:case 63:case 43:break;default:break a}r=A?a:r;if((!o?(r|0)==((t[v>>2]|0)+1|0):0)?(i[r+-1>>0]|0)==94:0)break;if((i[r>>0]|0)==123){r=P8(r+1|0,d,w,k)|0;if(!r){s=28;break A}A=t[k>>2]|0;a=t[e>>2]|0;if(!A)A=g8(a,-1,-1,-1)|0;else s=36}else{t[w>>2]=0;t[k>>2]=-1;A=i[r>>0]|0;if(A<<24>>24==43){t[w>>2]=1;A=i[r>>0]|0}if(A<<24>>24==63){t[k>>2]=1;A=1}else A=-1;r=r+1|0;a=t[e>>2]|0;s=36}if((s|0)==36){s=0;A=V8(a,t[u>>2]|0,t[w>>2]|0,A,0)|0}t[u>>2]=A;if(!A){A=12;break e}}A=m8(t[e>>2]|0,n,t[u>>2]|0)|0;a=i[r>>0]|0;a:do{if(o){if(a<<24>>24==124){s=40;break i}if((f|0)!=0&a<<24>>24==41|a<<24>>24==0)s=47;else{n=A;a=l;continue r}}else{switch(a<<24>>24){case 0:{s=47;break a}case 92:break;default:{n=A;a=l;continue r}}switch(i[r+1>>0]|0){case 124:case 41:break;default:{n=A;a=l;continue r}}A=N8(t[e>>2]|0,l,A)|0;if((i[r+1>>0]|0)==124){a=2;break i}if(!f){A=8;break e}r=r+2|0;a=92}}while(0);if((s|0)==47){s=0;A=N8(t[e>>2]|0,l,A)|0;r=a<<24>>24==41?r+1|0:r}A=X8(e,A,G8(g)|0)|0;if(A|0)break e;A=a<<24>>24==0;a=(f|0)<1;if(a&A){s=50;break A}if(a|A){A=8;break e}n=L8(g)|0;f=f+-1|0;l=L8(g)|0}if((s|0)==40){a=1;A=N8(t[e>>2]|0,l,A)|0}n=0;r=r+a|0;a=A}A=I8(g,a)|0;if(A|0)break e;A=I8(g,n)|0;if(A|0)break e;A=Z8(g,c)|0;if(A|0)break e;A=f+1|0;c=c+1|0;r=o?r+1|0:r+2|0}if((s|0)==28){A=10;break}else if((s|0)==50){t[e+20>>2]=c;A=0;break}}}while(0);h=m;return A|0}function d8(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0;B=C8(A)|0;y=(e|0)==0|(a|0)==0;if(!y){t[a+48>>2]=0;t[t[a+36>>2]>>2]=-1}f=t[a+28>>2]|0;C=Z2((f<<3)+8|0)|0;do{if(!C)n=12;else{t[C>>2]=-1;I=Z2((f<<2)+4|0)|0;if(!I){G2(C);n=12;break}t[I>>2]=-1;n=0;while(1)if(n>>>0>f>>>0)break;else n=n+1|0;I8(A,r)|0;n=Z8(A,0)|0;e:do{if((n|0)!=0|(C8(A)|0)<=(B|0)){r=C;b=0;f=0;u=0;o=-1}else{m=a+32|0;p=a+36|0;E=a+16|0;r=C;b=0;f=0;u=0;g=1;o=-1;v=0;while(1){A:do{switch(G8(A)|0){case 6:{l=G8(A)|0;n=0;do{s=r+(n<<2)|0;n=n+1|0}while((t[s>>2]|0)>-1);t[s>>2]=l<<1|1;t[r+(n<<2)>>2]=-1;n=0;while(1)if((t[I+(n<<2)>>2]|0)>-1)n=n+1|0;else break;t[I+(n+-1<<2)>>2]=-1;n=0;s=g;l=v;break}case 0:{k=L8(A)|0;d=k+12|0;s=t[d>>2]|0;if((s|0)>-1){n=0;do{l=r+(n<<2)|0;n=n+1|0}while((t[l>>2]|0)>-1);t[l>>2]=s<<1;t[r+(n<<2)>>2]=-1;if(!y){n=0;while(1)if((t[I+(n<<2)>>2]|0)>-1)n=n+1|0;else break;l=(t[E>>2]|0)+(s*12|0)+8|0;t[l>>2]=0;if((n|0)>0){n=Z2((n<<2)+4|0)|0;if(!n){n=12;s=g;l=v;break A}t[l>>2]=n;l=t[I>>2]|0;if((l|0)>-1){c=0;s=n;do{t[s>>2]=l;c=c+1|0;l=t[I+(c<<2)>>2]|0;s=n+(c<<2)|0}while((l|0)>-1);n=s}t[n>>2]=-1}}n=Z8(A,t[d>>2]|0)|0;if(n|0){s=g;l=v;break A}n=Z8(A,6)|0;if(n|0){s=g;l=v;break A}}r:do{switch(t[k>>2]|0){case 0:{w=t[t[k+4>>2]>>2]|0;if((w|0)>-1|(w|0)==-4?(t[r>>2]|0)>-1:0){if(y){t[k+20>>2]=1;n=0}else{n=R8(e,k,u)|0;t[(t[m>>2]|0)+(u<<2)>>2]=v;if((o|0)>-1){s=t[p>>2]|0;l=0;while(1){c=s+(l<<2)|0;h=l+1|0;if((t[c>>2]|0)>-1)l=h;else break}t[c>>2]=u;t[s+(h<<2)>>2]=o;t[s+(l+2<<2)>>2]=-1;f=f+1|0;o=-1}x8(r,a,u)}t[r>>2]=-1;w=g+1|0;h=v;b=b+1|0;u=g}else{w=g;n=0;h=v}break}case 1:{s=t[k+4>>2]|0;c=t[s>>2]|0;s=t[s+4>>2]|0;n=I8(A,k)|0;if(!n){n=Z8(A,5)|0;if(!n){n=I8(A,s)|0;if(!n){n=Z8(A,0)|0;if(!n){l=c+20|0;n=Z8(A,(t[l>>2]|0)+g|0)|0;if(!n){if((t[l>>2]|0)>0){l=(t[s+20>>2]|0)>0;n=l?g:-1;l=g+(l&1)|0}else{n=-1;l=g}n=Z8(A,n)|0;if(!n){n=Z8(A,4)|0;if(!n){n=I8(A,c)|0;if(!n){w=l;n=Z8(A,0)|0;h=v}else{w=l;h=v}}else{w=l;h=v}}else{w=l;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}break}case 2:{l=t[k+4>>2]|0;if(y){if((t[r>>2]|0)>-1)n=1;else n=(i[l+12>>0]&1)!=0;n=Z8(A,n&1)|0;if(n|0){w=g;h=v;break r}}else{n=Z8(A,u)|0;if(n|0){w=g;h=v;break r}n=Z8(A,i[l+12>>0]&1)|0;if(n|0){w=g;h=v;break r}}n=I8(A,k)|0;if(!n){n=Z8(A,1)|0;if(!n){n=I8(A,t[l>>2]|0)|0;if(!n){n=Z8(A,0)|0;if(!n){if((t[r>>2]|0)<=-1?(i[l+12>>0]&1)==0:0){w=g;n=0;h=0;break r}if(y)n=0;else{n=R8(e,k,u)|0;t[(t[m>>2]|0)+(u<<2)>>2]=(i[l+12>>0]&1)==0?v:1;if((o|0)>-1){s=t[p>>2]|0;l=0;while(1){c=s+(l<<2)|0;h=l+1|0;if((t[c>>2]|0)>-1)l=h;else break}t[c>>2]=u;t[s+(h<<2)>>2]=o;t[s+(l+2<<2)>>2]=-1;f=f+1|0;o=-1}x8(r,a,u)}t[r>>2]=-1;w=g+1|0;h=0;b=b+1|0;u=g}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}break}case 3:{s=t[k+4>>2]|0;c=t[s>>2]|0;s=t[s+4>>2]|0;l=(t[r>>2]|0)>-1;w=g+1|0;n=Z8(A,l?w:g)|0;if(!n){n=Z8(A,l?g:u)|0;if(!n){n=I8(A,r)|0;if(!n){n=Z8(A,(t[r>>2]|0)>>>31^1)|0;if(!n){n=I8(A,k)|0;if(!n){n=I8(A,s)|0;if(!n){n=I8(A,c)|0;if(!n){n=Z8(A,3)|0;if(!n){n=I8(A,s)|0;if(!n){n=Z8(A,0)|0;if(!n){n=Z8(A,2)|0;if(n|0){w=g;h=v;break r}n=I8(A,c)|0;if(n|0){w=g;h=v;break r}n=Z8(A,0)|0;if(n|0){w=g;h=v;break r}if((t[r>>2]|0)>-1){if(y)n=0;else{n=R8(e,k,u)|0;t[(t[m>>2]|0)+(u<<2)>>2]=v;if((o|0)>-1){s=t[p>>2]|0;l=0;while(1){c=s+(l<<2)|0;h=l+1|0;if((t[c>>2]|0)>-1)l=h;else break}t[c>>2]=u;t[s+(h<<2)>>2]=o;t[s+(l+2<<2)>>2]=-1;f=f+1|0;o=-1}x8(r,a,u)}t[r>>2]=-1;b=b+1|0;u=g;l=w}else{n=0;l=g}g=(t[k+16>>2]|0)>0;w=g?l+2|0:l;h=v;u=g?l+1|0:u}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}}else{w=g;h=v}break}default:{w=g;n=0;h=v}}}while(0);s=t[d>>2]|0;if((s|0)>-1){l=0;do{c=I+(l<<2)|0;l=l+1|0}while((t[c>>2]|0)>-1);t[c>>2]=s;t[I+(l<<2)>>2]=-1;s=w;l=h}else{s=w;l=h}break}case 1:{n=L8(A)|0;if(y){l=t[(t[t[n+4>>2]>>2]|0)+20>>2]|0;t[n+20>>2]=(G8(A)|0)+l;l=0;o=-1}else{k=G8(A)|0;d=G8(A)|0;l=k;o=(k|0)==0?o:d}n=0;s=g;l=y?v:(l|0)==0&1;break}case 4:{l=G8(A)|0;s=G8(A)|0;n=0;u=(l|0)>-1?l:u;l=v;break}case 5:{n=L8(A)|0;if(y){s=t[n+4>>2]|0;t[n+20>>2]=(t[(t[s+4>>2]|0)+20>>2]|0)+(t[(t[s>>2]|0)+20>>2]|0);n=0;s=g;l=v}else{n=0;s=g;l=v}break}case 2:{while(1)if((t[r>>2]|0)>-1)r=r+4|0;else{n=0;s=g;l=v;break}break}case 3:{s=L8(A)|0;h=L8(A)|0;n=L8(A)|0;r=G8(A)|0;if(y){d=t[n+4>>2]|0;v=n+16|0;t[n+20>>2]=(t[(t[d>>2]|0)+20>>2]|0)+r+(t[(t[d+4>>2]|0)+20>>2]|0)+((t[v>>2]|0)>0?2:0);n=v}else n=n+16|0;r=L8(A)|0;l=G8(A)|0;c=G8(A)|0;if((t[n>>2]|0)>0){if(y)n=0;else{n=J8(e,s,l)|0;t[(t[m>>2]|0)+(l<<2)>>2]=1;if(!n)n=J8(e,h,c)|0;t[(t[m>>2]|0)+(c<<2)>>2]=1}b=b+2|0;s=g;l=1}else{n=0;s=g;l=1}break}default:{n=0;s=g;l=v}}}while(0);if((n|0)!=0|(C8(A)|0)<=(B|0))break e;else{g=s;v=l}}}}while(0);if(!y?(x8(r,a,u),(o|0)>-1):0){l=t[a+36>>2]|0;r=0;while(1){s=l+(r<<2)|0;c=r+1|0;if((t[s>>2]|0)>-1)r=c;else break}t[s>>2]=u;t[l+(c<<2)>>2]=o;t[l+(r+2<<2)>>2]=-1;f=f+1|0}t[a+48>>2]=b;t[a+40>>2]=b;t[a+44>>2]=f;G2(C);G2(I)}}while(0);return n|0}function v8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;y=h;h=h+16|0;g=y+12|0;B=y+8|0;m=y+4|0;p=y;E=C8(A)|0;t[g>>2]=0;t[B>>2]=0;r=I8(A,r)|0;e:do{if(!r){r=Z8(A,0)|0;if(!r){A:do{if((C8(A)|0)>(E|0)){n=0;l=0;s=0;r:while(1){k=G8(A)|0;d=L8(A)|0;i:do{switch(k|0){case 0:{switch(t[d>>2]|0){case 0:{r=t[d+4>>2]|0;d=t[r>>2]|0;if(!((d|0)>-1|(d|0)==-4)){r=s;break i}d=r+8|0;r=(t[d>>2]|0)+s|0;t[d>>2]=r;if((r|0)<=(t[B>>2]|0)){r=s;break i}t[B>>2]=r;r=s;break i}case 3:{f=t[d+4>>2]|0;r=I8(A,t[f+4>>2]|0)|0;if(r|0)break A;r=Z8(A,0)|0;if(r|0)break A;r=I8(A,t[f>>2]|0)|0;if(r|0)break A;break}case 1:{f=t[d+4>>2]|0;r=I8(A,t[f+4>>2]|0)|0;if(r|0)break A;r=Z8(A,0)|0;if(r|0)break A;r=I8(A,t[f>>2]|0)|0;if(r|0)break A;break}case 2:{f=t[d+4>>2]|0;r=Z8(A,s)|0;if(r|0)break A;r=I8(A,d)|0;if(r|0)break A;r=Z8(A,1)|0;if(r|0)break A;r=I8(A,t[f>>2]|0)|0;if(r|0)break A;r=Z8(A,0)|0;if(r|0)break A;if((t[f+4>>2]|0)<=1?(t[f+8>>2]|0)<=1:0)r=s;else{t[g>>2]=0;r=0}l=l+1|0;break i}default:{r=s;break i}}r=Z8(A,0)|0;if(!r)r=s;else break A;break}case 1:{w=d+4|0;b=t[w>>2]|0;k=G8(A)|0;t[g>>2]=k;u=b+4|0;s=t[u>>2]|0;if((s|0)<=1)if((t[b+8>>2]|0)>1){t[m>>2]=0;if((s|0)>0)v=30;else{r=k;f=0;v=37}}else r=k;else{t[m>>2]=0;v=30}a:do{if((v|0)==30){r=M8(e,A,t[b>>2]|0,(s|0)>1?1:2,g,a,p,B)|0;if(!r){f=0;c=k;o=1}else{v=34;break r}while(1){r=t[p>>2]|0;if(!f)f=r;else f=m8(e,f,r)|0;if(!f){r=12;v=34;break r}s=t[u>>2]|0;if((o|0)>=(s|0)){r=c;v=37;break a}c=t[g>>2]|0;o=o+1|0;r=M8(e,A,t[b>>2]|0,(o|0)<(s|0)?1:2,g,a,p,B)|0;if(r|0){v=34;break r}}}}while(0);if((v|0)==37){v=0;u=b+8|0;c=t[u>>2]|0;if((c|0)==-1){c=t[g>>2]|0;r=M8(e,A,t[b>>2]|0,0,g,0,m,B)|0;if(r|0)break r;s=V8(e,t[m>>2]|0,0,-1,0)|0;t[m>>2]=s;if(!s){r=12;break r}else r=c}else if((s|0)<(c|0)){c=s;s=0;while(1){o=t[g>>2]|0;r=M8(e,A,t[b>>2]|0,0,g,0,p,B)|0;if(r|0){v=49;break r}if(!s){r=t[p>>2]|0;t[m>>2]=r}else{r=m8(e,t[p>>2]|0,s)|0;t[m>>2]=r}if(!r){r=12;v=49;break r}s=g8(e,-1,-1,-1)|0;if(!s){r=12;v=49;break r}s=N8(e,s,r)|0;t[m>>2]=s;if(!s){r=12;v=49;break r}c=c+1|0;if((c|0)>=(t[u>>2]|0)){r=o;break}}}else s=0;t[g>>2]=r;if(f){if(s){f=m8(e,f,s)|0;v=54}}else{f=s;v=54}if((v|0)==54){v=0;if(!f){r=12;break r}}t[w>>2]=t[f+4>>2];t[d>>2]=t[f>>2]}l=l+-1|0;f=r-k+n|0;if(!l){t[g>>2]=f;n=f;l=0;r=f}else n=f;break}default:r=s}}while(0);if((C8(A)|0)>(E|0))s=r;else{r=0;break A}}break e}else{r=0;n=0}}while(0);E=(t[i>>2]|0)+n|0;B=t[B>>2]|0;t[i>>2]=(B|0)>(E|0)?B:E}}}while(0);h=y;return r|0}function g8(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;a=u8(e,0,0,1,20)|0;e=F8(e,0,a)|0;if(!e)e=0;else{t[a>>2]=A;t[a+4>>2]=r;t[a+8>>2]=i}return e|0}function m8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;if(A){i=u8(e,0,0,1,8)|0;e=F8(e,1,i)|0;if(!e)r=0;else{t[i>>2]=A;t[i+4>>2]=r;t[e+16>>2]=(t[r+16>>2]|0)+(t[A+16>>2]|0);r=e}}return r|0}function p8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0;b=h;h=h+16|0;s=b+4|0;c=b;o=C8(A)|0;r=I8(A,r)|0;e:do{if(!r){r=Z8(A,0)|0;if(!r)if((C8(A)|0)>(o|0)){A:while(1){f=G8(A)|0;l=L8(A)|0;r:do{switch(f|0){case 0:switch(t[l>>2]|0){case 0:{n=t[l+4>>2]|0;a=t[n>>2]|0;if((a|0)==-4){t[l+8>>2]=0;r=n+8|0;f=Q8(e,t[r>>2]|0,0,1114111,0,0,-1)|0;t[l+24>>2]=f;if(!f){r=12;break e}f=Q8(e,t[r>>2]|0,0,1114111,0,0,t[n+4>>2]|0)|0;t[l+28>>2]=f;if(!f){r=12;break e}else break r}r=l+8|0;if((a|0)<0){t[r>>2]=1;f=D8(e)|0;t[l+24>>2]=f;if(!f){r=12;break e}f=D8(e)|0;t[l+28>>2]=f;if(!f){r=12;break e}else break r}else{t[r>>2]=0;r=n+8|0;i=n+4|0;f=Q8(e,t[r>>2]|0,a,t[i>>2]|0,0,0,-1)|0;t[l+24>>2]=f;if(!f){r=12;break e}f=Q8(e,t[r>>2]|0,t[n>>2]|0,t[i>>2]|0,t[n+12>>2]|0,t[n+16>>2]|0,-1)|0;t[l+28>>2]=f;if(!f){r=12;break e}else break r}}case 3:{r=I8(A,l)|0;if(r|0)break e;r=Z8(A,1)|0;if(r|0)break e;i=l+4|0;r=I8(A,t[(t[i>>2]|0)+4>>2]|0)|0;if(r|0)break e;r=Z8(A,0)|0;if(r|0)break e;r=I8(A,t[t[i>>2]>>2]|0)|0;if(r|0)break e;r=Z8(A,0)|0;if(!r)break r;else break e}case 1:{r=I8(A,l)|0;if(r|0)break e;r=Z8(A,2)|0;if(r|0)break e;i=l+4|0;r=I8(A,t[(t[i>>2]|0)+4>>2]|0)|0;if(r|0)break e;r=Z8(A,0)|0;if(r|0)break e;r=I8(A,t[t[i>>2]>>2]|0)|0;if(r|0)break e;r=Z8(A,0)|0;if(!r)break r;else break e}case 2:{r=I8(A,l)|0;if(r|0)break e;r=Z8(A,3)|0;if(r|0)break e;r=I8(A,t[t[l+4>>2]>>2]|0)|0;if(r|0)break e;r=Z8(A,0)|0;if(!r)break r;else break e}default:break r}case 1:{r=t[l+4>>2]|0;i=t[r>>2]|0;a=r+4|0;n=t[a>>2]|0;if(!(t[i+8>>2]|0))f=(t[n+8>>2]|0)!=0;else f=1;t[l+8>>2]=f&1;f=z8(e,t[i+24>>2]|0,t[n+24>>2]|0,0,0)|0;t[l+24>>2]=f;if(!f){r=12;break e}f=z8(e,t[(t[r>>2]|0)+28>>2]|0,t[(t[a>>2]|0)+28>>2]|0,0,0)|0;t[l+28>>2]=f;if(!f){r=12;break e}break}case 3:{f=t[l+4>>2]|0;r=t[f>>2]|0;if(!(t[f+4>>2]|0))i=1;else i=(t[r+8>>2]|0)!=0&1;t[l+8>>2]=i;t[l+24>>2]=t[r+24>>2];t[l+28>>2]=t[r+28>>2];break}case 2:{n=t[l+4>>2]|0;r=t[n>>2]|0;i=r+8|0;if(!(t[i>>2]|0))a=0;else a=(t[(t[n+4>>2]|0)+8>>2]|0)!=0;t[l+8>>2]=a&1;if(t[i>>2]|0){r=W8(A,r,0,0,s)|0;if(r|0)break A;i=Z2((t[s>>2]<<2)+4|0)|0;if(!i){r=12;break A}t[i>>2]=-1;t[c>>2]=0;r=W8(A,t[n>>2]|0,i,c,0)|0;if(r|0){u=45;break A}r=n+4|0;f=l+24|0;t[f>>2]=z8(e,t[(t[r>>2]|0)+24>>2]|0,t[(t[n>>2]|0)+24>>2]|0,i,t[c>>2]|0)|0;G2(i);if(!(t[f>>2]|0)){r=12;break A}else a=r}else{t[l+24>>2]=t[r+24>>2];a=n+4|0}r=t[a>>2]|0;if(t[r+8>>2]|0){r=W8(A,r,0,0,s)|0;if(r|0)break A;i=Z2((t[s>>2]<<2)+4|0)|0;if(!i){r=12;break A}t[i>>2]=-1;t[c>>2]=0;r=W8(A,t[a>>2]|0,i,c,0)|0;if(r|0){u=52;break A}l=l+28|0;t[l>>2]=z8(e,t[(t[n>>2]|0)+28>>2]|0,t[(t[a>>2]|0)+28>>2]|0,i,t[c>>2]|0)|0;G2(i);if(!(t[l>>2]|0)){r=12;break A}}else t[l+28>>2]=t[r+28>>2];break}default:{}}}while(0);if((C8(A)|0)<=(o|0)){r=0;break e}}if((u|0)==45)G2(i);else if((u|0)==52)G2(i)}else r=0}}while(0);h=b;return r|0}function E8(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;e:while(1){switch(t[e>>2]|0){case 2:{e=t[e+4>>2]|0;if((t[e+8>>2]|0)==-1?(f=t[e>>2]|0,f=y8(t[f+28>>2]|0,t[f+24>>2]|0,A,r,i)|0,(f|0)!=0):0){e=f;break e}break}case 3:{a=t[e+4>>2]|0;e=E8(t[a>>2]|0,A,r,i)|0;if(e|0)break e;e=a+4|0;break}case 1:{a=t[e+4>>2]|0;n=a+4|0;e=y8(t[(t[a>>2]|0)+28>>2]|0,t[(t[n>>2]|0)+24>>2]|0,A,r,i)|0;if(e|0)break e;e=E8(t[a>>2]|0,A,r,i)|0;if(!e)e=n;else break e;break}default:{e=0;break e}}e=t[e>>2]|0}return e|0}function B8(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0;f=t[e+4>>2]|0;if(f|0){i=f+4|0;e=t[f>>2]|0;if(t[i>>2]|0){r=0;do{if(t[e+(r<<5)+8>>2]|0){A=t[e+(r<<5)+16>>2]|0;if(A){G2(A);e=t[f>>2]|0}A=t[e+(r<<5)+28>>2]|0;if(A){G2(A);e=t[f>>2]|0}}r=r+1|0}while(r>>>0<(t[i>>2]|0)>>>0)}if(e|0)G2(e);r=f+8|0;e=t[r>>2]|0;if(e|0){if(t[e+8>>2]|0){while(1){A=t[e+16>>2]|0;if(A|0)G2(A);if(!(t[e+40>>2]|0))break;else e=e+32|0}e=t[r>>2]|0}G2(e)}a=f+16|0;e=t[a>>2]|0;if(e|0){n=f+28|0;A=t[n>>2]|0;if(A){i=0;do{r=t[e+(i*12|0)+8>>2]|0;if(r){G2(r);A=t[n>>2]|0;e=t[a>>2]|0}i=i+1|0}while(i>>>0>>0)}G2(e)}e=t[f+32>>2]|0;if(e|0)G2(e);e=t[f+20>>2]|0;if(e|0)G2(e);e=t[f+36>>2]|0;if(e|0)G2(e);G2(f)}return}function y8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0;n=t[e>>2]|0;f=(n|0)>-1;e:do{if(!r)if(f){f=A+32|0;do{if((t[A>>2]|0)>-1?(y=i+(n<<2)|0,t[y>>2]=(t[y>>2]|0)+1,(t[f>>2]|0)>-1):0){n=f;do{y=i+(t[e>>2]<<2)|0;t[y>>2]=(t[y>>2]|0)+1;n=n+32|0}while((t[n>>2]|0)>-1)}e=e+32|0;n=t[e>>2]|0}while((n|0)>-1);n=0}else n=0;else if(f)while(1){f=t[A>>2]|0;A:do{if((f|0)>-1){w=e+4|0;k=e+8|0;d=e+16|0;v=e+20|0;g=e+24|0;m=e+28|0;p=e+12|0;i=-1;n=A;while(1){h=f;while(1){if((h|0)!=(i|0))break;n=n+32|0;f=t[n>>2]|0;if((f|0)>-1)h=f;else break A}o=r+(t[a+(t[e>>2]<<2)>>2]<<5)|0;while(1){f=o+8|0;if(!(t[f>>2]|0))break;else o=o+32|0}t[o+40>>2]=0;t[o>>2]=t[w>>2];t[o+4>>2]=t[k>>2];t[f>>2]=r+(t[a+(h<<2)>>2]<<5);t[o+12>>2]=h;f=t[v>>2]|0;i=t[n+16>>2]|t[d>>2]|(f|0?4:0)|(t[g>>2]|0?8:0);l=o+20|0;t[l>>2]=i;s=t[m>>2]|0;if((s|0)>-1){t[l>>2]=i|256;f=s}t[o+24>>2]=f;i=t[g>>2]|0;if(!i)t[o+28>>2]=0;else{f=0;do{b=f;f=f+1|0}while((t[i+(b<<2)>>2]|0)!=0);f=Z2(f<<2)|0;t[o+28>>2]=f;if(!f){n=12;break e}c=t[g>>2]|0;i=t[c>>2]|0;if(i){s=0;l=f;do{t[l>>2]=i;s=s+1|0;i=t[c+(s<<2)>>2]|0;l=f+(s<<2)|0}while((i|0)!=0);f=l}t[f>>2]=0}i=t[p>>2]|0;if(!i)f=0;else{f=0;while(1)if((t[i+(f<<2)>>2]|0)>-1)f=f+1|0;else break}c=n+12|0;l=t[c>>2]|0;if(!l)i=0;else{i=0;while(1)if((t[l+(i<<2)>>2]|0)>-1)i=i+1|0;else break}s=o+16|0;l=t[s>>2]|0;if(l|0)G2(l);t[s>>2]=0;f=i+f|0;if((f|0)>0){b=Z2((f<<2)+4|0)|0;t[s>>2]=b;if(!b){n=12;break e}i=t[p>>2]|0;if((i|0)!=0?(E=t[i>>2]|0,(E|0)>-1):0){f=0;l=E;do{t[b+(f<<2)>>2]=l;f=f+1|0;l=t[i+(f<<2)>>2]|0}while((l|0)>-1);u=f}else u=0;s=t[c>>2]|0;if((s|0)!=0?(B=t[s>>2]|0,(B|0)>-1):0){c=(u|0)>0;f=u;l=0;o=B;do{r:do{if(c){i=0;while(1){if((t[b+(i<<2)>>2]|0)==(o|0))break r;i=i+1|0;if((i|0)>=(u|0)){y=39;break}}}else y=39}while(0);if((y|0)==39){y=0;t[b+(f<<2)>>2]=o;f=f+1|0}l=l+1|0;o=t[s+(l<<2)>>2]|0}while((o|0)>-1)}else f=u;t[b+(f<<2)>>2]=-1}n=n+32|0;f=t[n>>2]|0;if((f|0)<=-1)break;else i=h}}}while(0);e=e+32|0;if((t[e>>2]|0)<=-1){n=0;break}}else n=0}while(0);return n|0}function C8(e){e=e|0;return t[e+12>>2]|0}function I8(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+16|0;i=r+4|0;a=r;t[a>>2]=A;t[i>>2]=t[a>>2];A=Y8(e,i)|0;h=r;return A|0}function Z8(e,A){e=e|0;A=A|0;var r=0,i=0,a=0;r=h;h=h+16|0;i=r+4|0;a=r;t[a>>2]=A;t[i>>2]=t[a>>2];A=Y8(e,i)|0;h=r;return A|0}function G8(e){e=e|0;var A=0,r=0;A=t[e+16>>2]|0;r=e+12|0;e=(t[r>>2]|0)+-1|0;t[r>>2]=e;return t[A+(e<<2)>>2]|0}function L8(e){e=e|0;var A=0,r=0;A=t[e+16>>2]|0;r=e+12|0;e=(t[r>>2]|0)+-1|0;t[r>>2]=e;return t[A+(e<<2)>>2]|0}function Q8(e,A,r,i,a,n,f){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;f=f|0;e=u8(e,0,0,1,64)|0;if(!e)e=0;else{t[e>>2]=A;t[e+4>>2]=r;t[e+8>>2]=i;t[e+20>>2]=a;t[e+24>>2]=n;t[e+28>>2]=f;t[e+32>>2]=-1;t[e+36>>2]=-1;t[e+40>>2]=-1}return e|0}function D8(e){e=e|0;e=u8(e,0,0,1,32)|0;if(!e)e=0;else{t[e>>2]=-1;t[e+4>>2]=-1;t[e+8>>2]=-1}return e|0}function z8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;h=(i|0)==0;if(h)b=0;else{n=0;while(1)if((t[i+(n<<2)>>2]|0)>-1)n=n+1|0;else{b=n;break}}f=0;while(1)if((t[A+(f<<5)>>2]|0)>-1)f=f+1|0;else{n=0;break}while(1)if((t[r+(n<<5)>>2]|0)>-1)n=n+1|0;else break;n=u8(e,0,0,1,(n+f<<5)+32|0)|0;e:do{if(!n)n=0;else{f=t[A>>2]|0;if((f|0)>-1){u=(b|0)>0;l=0;while(1){t[n+(l<<5)>>2]=f;t[n+(l<<5)+4>>2]=t[A+(l<<5)+4>>2];t[n+(l<<5)+8>>2]=t[A+(l<<5)+8>>2];t[n+(l<<5)+16>>2]=t[A+(l<<5)+16>>2]|a;t[n+(l<<5)+20>>2]=t[A+(l<<5)+20>>2];t[n+(l<<5)+24>>2]=t[A+(l<<5)+24>>2];t[n+(l<<5)+28>>2]=t[A+(l<<5)+28>>2];o=A+(l<<5)+12|0;s=t[o>>2]|0;f=(s|0)==0;if(h&f)f=0;else{if(f)c=0;else{f=0;while(1)if((t[s+(f<<2)>>2]|0)>-1)f=f+1|0;else{c=f;break}}f=u8(e,0,0,0,(c+b<<2)+4|0)|0;if(!f){n=0;break e}if((c|0)>0){o=t[o>>2]|0;s=0;do{t[f+(s<<2)>>2]=t[o+(s<<2)>>2];s=s+1|0}while((s|0)!=(c|0))}else c=0;if(u){s=0;do{t[f+(s+c<<2)>>2]=t[i+(s<<2)>>2];s=s+1|0}while((s|0)!=(b|0));s=b}else s=0;t[f+(s+c<<2)>>2]=-1}t[n+(l<<5)+12>>2]=f;l=l+1|0;f=t[A+(l<<5)>>2]|0;if((f|0)<=-1){b=l;break}}}else b=0;l=t[r>>2]|0;f=n+(b<<5)|0;if((l|0)>-1){u=0;o=b;do{t[f>>2]=l;t[n+(o<<5)+4>>2]=t[r+(u<<5)+4>>2];t[n+(o<<5)+8>>2]=t[r+(u<<5)+8>>2];t[n+(o<<5)+16>>2]=t[r+(u<<5)+16>>2];t[n+(o<<5)+20>>2]=t[r+(u<<5)+20>>2];t[n+(o<<5)+24>>2]=t[r+(u<<5)+24>>2];t[n+(o<<5)+28>>2]=t[r+(u<<5)+28>>2];s=r+(u<<5)+12|0;f=t[s>>2]|0;if(!f)f=0;else{l=0;while(1)if((t[f+(l<<2)>>2]|0)>-1)l=l+1|0;else break;f=u8(e,0,0,0,(l<<2)+4|0)|0;if(!f){n=0;break e}if((l|0)>0){c=t[s>>2]|0;s=0;do{t[f+(s<<2)>>2]=t[c+(s<<2)>>2];s=s+1|0}while((s|0)!=(l|0))}else l=0;t[f+(l<<2)>>2]=-1}t[n+(o<<5)+12>>2]=f;u=u+1|0;l=t[r+(u<<5)>>2]|0;o=u+b|0;f=n+(o<<5)|0}while((l|0)>-1)}t[f>>2]=-1}}while(0);return n|0}function W8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0;h=C8(e)|0;w=(a|0)!=0;if(w)t[a>>2]=0;A=I8(e,A)|0;e:do{if(!A){u=(r|0)==0;o=(i|0)==0;if((C8(e)|0)>(h|0))while(1){A=L8(e)|0;A:do{switch(t[A>>2]|0){case 0:{A=t[A+4>>2]|0;switch(t[A>>2]|0){case-3:break;case-2:{if(o)break A;t[i>>2]=t[i>>2]|t[A+4>>2];break A}default:break A}f=t[A+4>>2]|0;if((f|0)>-1){r:do{if(!u){A=0;while(1){l=r+(A<<2)|0;s=t[l>>2]|0;if((s|0)<=-1)break;if((s|0)==(f|0))break r;else A=A+1|0}t[l>>2]=f;t[r+(A+1<<2)>>2]=-1}}while(0);if(w)t[a>>2]=(t[a>>2]|0)+1}break}case 3:{A=t[A+4>>2]|0;f=t[A>>2]|0;if(t[f+8>>2]|0){c=f;b=6;break A}A=t[A+4>>2]|0;if(t[A+8>>2]|0){c=A;b=6}break}case 1:{A=t[A+4>>2]|0;f=I8(e,t[A>>2]|0)|0;if(f|0){n=f;break e}c=t[A+4>>2]|0;b=6;break}case 2:{A=t[t[A+4>>2]>>2]|0;if(t[A+8>>2]|0){c=A;b=6}break}default:{}}}while(0);if((b|0)==6?(b=0,n=I8(e,c)|0,n|0):0)break e;if((C8(e)|0)<=(h|0)){n=0;break e}}else n=0}else n=A}while(0);return n|0}function Y8(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+16|0;n=c;r=e+12|0;i=t[r>>2]|0;s=t[e>>2]|0;if((i|0)>=(s|0)){r=t[e+4>>2]|0;if((s|0)<(r|0)?(a=(t[e+8>>2]|0)+s|0,a=(a|0)>(r|0)?r:a,f=e+16|0,l=Q2(t[f>>2]|0,a<<2)|0,(l|0)!=0):0){t[e>>2]=a;t[f>>2]=l;t[n>>2]=t[A>>2];Y8(e,n)|0;r=0}else r=12}else{t[(t[e+16>>2]|0)+(i<<2)>>2]=t[A>>2];t[r>>2]=(t[r>>2]|0)+1;r=0}h=c;return r|0}function F8(e,A,r){e=e|0;A=A|0;r=r|0;e=u8(e,0,0,1,32)|0;if((r|0)!=0&(e|0)!=0){t[e+4>>2]=r;t[e>>2]=A;t[e+8>>2]=-1;t[e+12>>2]=-1}else e=0;return e|0}function M8(e,A,r,a,n,f,l,s){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;f=f|0;l=l|0;s=s|0;var c=0,o=0,u=0,b=0,h=0,w=0,k=0,d=0;d=C8(A)|0;I8(A,r)|0;r=Z8(A,0)|0;e:do{if(!r){k=(a&1|0)==0;w=(a&2|0)!=0;h=0;o=1;r=l;while(1){if((C8(A)|0)>(d|0))b=r;else{a=h;r=0;break e}A:while(1){r:while(1){switch(G8(A)|0){case 1:{l=7;break r}case 0:{r=L8(A)|0;switch(t[r>>2]|0){case 0:{l=9;break A}case 3:{l=19;break A}case 1:{l=26;break A}case 2:{l=33;break r}default:{}}break}default:{}}if((C8(A)|0)<=(d|0)){a=h;r=0;break e}}if((l|0)==7)r=L8(A)|0;else if((l|0)==33){a=t[r+4>>2]|0;r=I8(A,t[a>>2]|0)|0;if(r|0){a=h;break e}r=Z8(A,0)|0;if(r|0){a=h;break e}r=V8(e,t[a>>2]|0,t[a+4>>2]|0,t[a+8>>2]|0,i[a+12>>0]&1)|0;t[b>>2]=r;if(!r){a=h;r=12;break e}r=t[r+4>>2]|0}if((C8(A)|0)>(d|0))b=r;else{a=h;r=0;break e}}if((l|0)==9){u=t[r+4>>2]|0;l=t[u+8>>2]|0;a=t[u>>2]|0;r=t[u+4>>2]|0;if(!((a|0)>-1|(a|0)==-4))if(k|(a|0)!=-3)if((a|0)==-3)if(w&(o|0)!=0){t[f+(r<<2)>>2]=1;a=-3;c=h;o=0}else{a=-3;c=h}else c=h;else{r=-1;a=-1;l=-1;c=h}else{l=(t[n>>2]|0)+l|0;c=h+1|0}r=g8(e,a,r,l)|0;t[b>>2]=r;if(!r)r=12;else{r=t[r+4>>2]|0;t[r+12>>2]=t[u+12>>2];t[r+16>>2]=t[u+16>>2];r=0}if((l|0)>(t[s>>2]|0)){t[s>>2]=l;a=b}else a=b}else if((l|0)==19){l=t[r+4>>2]|0;a=l+4|0;r=N8(e,t[l>>2]|0,t[a>>2]|0)|0;t[b>>2]=r;if(!r){a=h;r=12;break e}u=t[r+4>>2]|0;r=I8(A,t[a>>2]|0)|0;if(r|0){a=h;break e}r=Z8(A,0)|0;if(r|0){a=h;break e}r=I8(A,u+4|0)|0;if(r|0){a=h;break e}r=Z8(A,1)|0;if(r|0){a=h;break e}r=I8(A,t[l>>2]|0)|0;if(r|0){a=h;break e}c=h;a=u;r=Z8(A,0)|0}else if((l|0)==26){u=t[r+4>>2]|0;l=u+4|0;r=m8(e,t[u>>2]|0,t[l>>2]|0)|0;t[b>>2]=r;if(!r){a=h;r=12;break e}a=t[r+4>>2]|0;t[a>>2]=0;c=a+4|0;t[c>>2]=0;r=I8(A,t[l>>2]|0)|0;if(r|0){a=h;break e}r=Z8(A,0)|0;if(r|0){a=h;break e}r=I8(A,c)|0;if(r|0){a=h;break e}r=Z8(A,1)|0;if(r|0){a=h;break e}r=I8(A,t[u>>2]|0)|0;if(r|0){a=h;break e}c=h;r=Z8(A,0)|0}if(!r){h=c;r=a}else{a=c;break}}}else a=0}while(0);t[n>>2]=(t[n>>2]|0)+a;return r|0}function V8(e,A,r,a,n){e=e|0;A=A|0;r=r|0;a=a|0;n=n|0;var f=0;f=u8(e,0,0,1,16)|0;e=F8(e,2,f)|0;if(!e)e=0;else{t[f>>2]=A;t[f+4>>2]=r;t[f+8>>2]=a;f=f+12|0;i[f>>0]=i[f>>0]&-2|n&1;t[e+16>>2]=t[A+16>>2]}return e|0}function N8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0;if(A){i=u8(e,0,0,1,8)|0;e=F8(e,3,i)|0;if((r|0)!=0&(e|0)!=0){t[i>>2]=A;t[i+4>>2]=r;t[e+16>>2]=(t[r+16>>2]|0)+(t[A+16>>2]|0);r=e}else r=0}return r|0}function R8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=u8(e,0,0,0,8)|0;if(((i|0)!=0?(r=g8(e,-3,r,-1)|0,t[i>>2]=r,(r|0)!=0):0)?(a=u8(e,0,0,0,32)|0,t[i+4>>2]=a,(a|0)!=0):0){e=A+4|0;t[a+4>>2]=t[e>>2];t[a>>2]=t[A>>2];t[a+8>>2]=-1;t[a+12>>2]=-1;a=a+16|0;t[a>>2]=0;t[a+4>>2]=0;t[a+8>>2]=0;t[a+12>>2]=0;t[e>>2]=i;t[A>>2]=1;e=0}else e=12;return e|0}function x8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;a=t[e>>2]|0;if((a|0)>-1){n=t[A+16>>2]|0;i=0;A=a;do{a=A>>>1;t[((A&1|0)==0?n+(a*12|0)|0:n+(a*12|0)+4|0)>>2]=r;i=i+1|0;A=t[e+(i<<2)>>2]|0}while((A|0)>-1)}t[e>>2]=-1;return}function J8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=u8(e,0,0,0,8)|0;if(((i|0)!=0?(r=g8(e,-3,r,-1)|0,t[i+4>>2]=r,(r|0)!=0):0)?(a=u8(e,0,0,0,32)|0,t[i>>2]=a,(a|0)!=0):0){e=A+4|0;t[a+4>>2]=t[e>>2];t[a>>2]=t[A>>2];t[a+8>>2]=-1;t[a+12>>2]=-1;a=a+16|0;t[a>>2]=0;t[a+4>>2]=0;t[a+8>>2]=0;t[a+12>>2]=0;t[e>>2]=i;t[A>>2]=1;e=0}else e=12;return e|0}function H8(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0;o=h;h=h+16|0;s=o;l=e+32|0;f=t[l>>2]|0;n=f&1;e:do{switch(i[A>>0]|0){case 91:{r=j8(e,A+1|0)|0;break}case 92:{r=A+1|0;a=U8(r)|0;if(a|0){r=H8(e,a)|0;t[e+12>>2]=A+2;break e}a=i[r>>0]|0;switch(a|0){case 0:{r=5;break e}case 98:{a=g8(t[e>>2]|0,-2,64,-1)|0;break}case 66:{a=g8(t[e>>2]|0,-2,128,-1)|0;break}case 60:{a=g8(t[e>>2]|0,-2,16,-1)|0;break}case 62:{a=g8(t[e>>2]|0,-2,32,-1)|0;break}case 120:{f=A+2|0;l=(i[f>>0]|0)==123;n=l?8:2;f=l?A+3|0:f;r=0;a=0;do{A=T8(i[f+r>>0]|0)|0;if((A|0)<0)break;a=A+(a<<4)|0;r=r+1|0}while((a|0)<1114112&(r|0)<(n|0));r=f+r|0;if(l){if((i[r>>0]|0)!=125){r=9;break e}r=r+1|0}s=t[e>>2]|0;l=e+24|0;c=t[l>>2]|0;t[l>>2]=c+1;a=g8(s,a,a,c)|0;r=r+-1|0;break}case 63:case 43:case 123:if(!n){r=13;break e}else{c=37;break e}case 124:{if(n|0){c=37;break e}r=g8(t[e>>2]|0,-1,-1,-1)|0;c=45;break e}default:{if(!((n|0)==0&(a+-49|0)>>>0<9)){c=37;break e}s=a+-48|0;c=t[e>>2]|0;l=e+24|0;a=t[l>>2]|0;t[l>>2]=a+1;a=g8(c,-4,s,a)|0;c=e+28|0;l=t[c>>2]|0;t[c>>2]=(s|0)<(l|0)?l:s}}A=r+1|0;r=a;c=45;break}case 46:{r=t[e>>2]|0;n=e+24|0;a=t[n>>2]|0;t[n>>2]=a+1;if(f&4){a=g8(r,0,9,a)|0;c=t[e>>2]|0;r=t[n>>2]|0;t[n>>2]=r+1;r=g8(c,11,1114111,r)|0;if((a|0)!=0&(r|0)!=0)r=N8(t[e>>2]|0,a,r)|0;else r=0}else r=g8(r,0,1114111,a)|0;A=A+1|0;c=45;break}case 94:{if((n|0)==0?(t[e+16>>2]|0)!=(A|0):0){r=A;c=37;break e}A=A+1|0;r=g8(t[e>>2]|0,-2,1,-1)|0;c=45;break}case 36:{r=A+1|0;if((n|0)==0?i[r>>0]|0:0){r=A;c=37;break e}A=r;r=g8(t[e>>2]|0,-2,2,-1)|0;c=45;break}case 63:case 43:case 123:case 42:{if(!n){r=A;c=37}else r=13;break}case 124:{if(!n){r=A;c=37}else c=36;break}case 0:{c=36;break}default:{r=A;c=37}}}while(0);if((c|0)==36){r=g8(t[e>>2]|0,-1,-1,-1)|0;c=45}else if((c|0)==37){f=C3(s,r,-1)|0;if((f|0)<0)r=2;else{do{if(t[l>>2]&2){if((c4(t[s>>2]|0)|0)==0?(s4(t[s>>2]|0)|0)==0:0){c=43;break}l=t[e>>2]|0;u=J1(t[s>>2]|0)|0;n=J1(t[s>>2]|0)|0;a=e+24|0;n=g8(l,u,n,t[a>>2]|0)|0;u=t[e>>2]|0;l=u4(t[s>>2]|0)|0;A=u4(t[s>>2]|0)|0;A=g8(u,l,A,t[a>>2]|0)|0;if((n|0)!=0&(A|0)!=0)n=N8(t[e>>2]|0,n,A)|0;else n=0}else c=43}while(0);if((c|0)==43){n=t[s>>2]|0;a=e+24|0;n=g8(t[e>>2]|0,n,n,t[a>>2]|0)|0}t[a>>2]=(t[a>>2]|0)+1;A=r+f|0;r=n;c=45}}if((c|0)==45)if(!r)r=12;else{t[e+8>>2]=r;t[e+12>>2]=A;r=0}h=o;return r|0}function P8(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0;s=h;h=h+16|0;l=s+4|0;n=s;e=S8(e,l)|0;if((i[e>>0]|0)==44){e=S8(e+1|0,n)|0;f=t[n>>2]|0;n=t[l>>2]|0}else{l=t[l>>2]|0;t[n>>2]=l;f=l;n=l}do{if(!(n>>>0>255|((f|0)>255|(f|0)>-1&(f|0)<(n|0)))){if(!A)if((i[e>>0]|0)==92)e=e+1|0;else{e=0;break}if((i[e>>0]|0)==125){t[r>>2]=n;t[a>>2]=f;e=e+1|0}else e=0}else e=0}while(0);h=s;return e|0}function X8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0;if((t[A+12>>2]|0)>-1){i=g8(t[e>>2]|0,-1,-1,-1)|0;if((i|0)!=0?(a=m8(t[e>>2]|0,i,A)|0,(a|0)!=0):0){i=t[A+16>>2]|0;t[a+16>>2]=i;n=6}else i=12}else{a=A;i=t[A+16>>2]|0;n=6}if((n|0)==6){t[a+12>>2]=r;t[a+16>>2]=i+1;t[e+8>>2]=a;i=0}return i|0}function S8(e,A){e=e|0;A=A|0;var r=0,a=0,n=0;t[A>>2]=-1;if(((i[e>>0]|0)+-48|0)>>>0<10){t[A>>2]=0;r=e;n=0;a=i[e>>0]|0;while(1){n=(n*10|0)+-48+(a<<24>>24)|0;t[A>>2]=n;e=r+1|0;a=i[e>>0]|0;if((n|0)>255|((a<<24>>24)+-48|0)>>>0>9)break;else r=e}}return e|0}function j8(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0;v=h;h=h+288|0;r=v+264|0;n=v;t[r>>2]=t[e>>2];f=r+8|0;t[f>>2]=0;t[r+12>>2]=32;w=Z2(128)|0;d=r+4|0;t[d>>2]=w;if(!w)A=12;else{a=n+4|0;t[a>>2]=0;w=(i[A>>0]|0)==94;t[n>>2]=w&1;A=O8(e,w?A+1|0:A,r,n)|0;e:do{if(!A){w=(t[n>>2]|0)==0;if(!w){_4(t[d>>2]|0,t[f>>2]|0,4,111);A=q8(r)|0;if(!A){A=12;r=0;break}t[A>>2]=1114112;t[A+4>>2]=1114112;t[A+8>>2]=-1;A=t[a>>2]|0;if(A){r=A<<2;a=u8(t[e>>2]|0,0,0,0,r+4|0)|0;if(!a){A=12;r=0;break}Q6(a|0,n+8|0,r|0)|0;t[a+(A<<2)>>2]=0}else a=0}else a=0;o=t[f>>2]|0;if((o|0)>0){u=t[d>>2]|0;b=e+24|0;r=0;A=0;c=0;while(1){s=t[u+(c<<2)>>2]|0;n=t[s>>2]|0;f=s+4|0;l=t[f>>2]|0;do{if(!w)if((n|0)>(A|0)){t[s>>2]=A;t[f>>2]=n+-1;A=l+1|0;k=14;break}else{s=l+1|0;A=(s|0)>=(A|0)?s:A;break}else k=14}while(0);if((k|0)==14){k=0;t[s+8>>2]=t[b>>2];t[s+16>>2]=a;s=F8(t[e>>2]|0,0,s)|0;r=N8(t[e>>2]|0,r,s)|0;if(!r){A=12;r=0;break e}}c=c+1|0;if((c|0)>=(o|0)){A=0;break}}}else{A=0;r=0}}else r=0}while(0);G2(t[d>>2]|0);d=e+24|0;t[d>>2]=(t[d>>2]|0)+1;t[e+8>>2]=r}h=v;return A|0}function U8(e){e=e|0;var A=0;A=i[e>>0]|0;e=0;while(1){if((i[63752+(e<<3)>>0]|0)==A<<24>>24)break;e=e+1|0;if((e|0)==12){e=12;break}}return t[63752+(e<<3)+4>>2]|0}function T8(e){e=e|0;var A=0;A=e+-48|0;if(A>>>0<10)return A|0;else{A=e|32;return((A+-97|0)>>>0<6?A+-87|0:-1)|0}return 0}function O8(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0;g=h;h=h+32|0;b=g;k=g+4|0;l=C3(b,A,-1)|0;n=i[A>>0]|0;e:do{if((l|0)>=1){d=a+4|0;u=e+32|0;f=A;s=l;A:while(1){l=(f|0)==(A|0);if(!(l|n<<24>>24!=93)){v=5;break}r:do{if(!(l|n<<24>>24!=45)){switch(i[f+1>>0]|0){case 93:break r;case 45:break;default:{n=11;break e}}if((i[f+2>>0]|0)==93){n=11;break e}}}while(0);r:do{if(n<<24>>24==91){switch(i[f+1>>0]|0){case 61:case 46:{n=3;break e}case 58:break;default:{v=17;break r}}l=f+2|0;n=0;i:while(1){switch(i[l+n>>0]|0){case 0:{v=16;break A}case 58:break i;default:{}}if((n|0)<13)n=n+1|0;else{v=16;break A}}Q6(k|0,l|0,n|0)|0;i[k+n>>0]=0;s=D4(k)|0;if(!s){v=16;break A}f=l+(n+2)|0;if((i[l+(n+1)>>0]|0)!=93){v=16;break A}if(!(t[a>>2]|0)){n=1114111;o=0;c=1;v=25}else{n=t[d>>2]|0;if((n|0)>63){n=12;break e}t[d>>2]=n+1;t[a+8+(n<<2)>>2]=s}}else v=17}while(0);if((v|0)==17){v=0;l=t[b>>2]|0;f=f+s|0;if((i[f>>0]|0)==45?(w=f+1|0,(i[w>>0]|0)!=93):0){f=C3(b,w,-1)|0;n=t[b>>2]|0;if((f|0)<1|(l|0)>(n|0)){n=11;break e}s=0;o=l;f=w+f|0;c=0;v=25}else{s=0;n=l;o=l;c=0;v=25}}if((v|0)==25){v=0;l=q8(r)|0;if(!l){n=12;break e}t[l>>2]=o;t[l+4>>2]=n;t[l+12>>2]=s;t[l+8>>2]=-1;if(!(c|(t[u>>2]&2|0)==0)?(K8(r,o,n)|0)!=0:0){n=12;break e}}s=C3(b,f,-1)|0;n=i[f>>0]|0;if((s|0)<1){v=3;break e}}if((v|0)==5){t[e+12>>2]=f+1;n=0;break}else if((v|0)==16){n=4;break}}else v=3}while(0);if((v|0)==3)n=n<<24>>24?2:7;h=g;return n|0}function _8(e,A){e=e|0;A=A|0;return(t[t[e>>2]>>2]|0)-(t[t[A>>2]>>2]|0)|0}function q8(e){e=e|0;var A=0,r=0,i=0,a=0,n=0,f=0,l=0;f=e+8|0;r=t[f>>2]|0;i=e+12|0;a=t[i>>2]|0;if((r|0)>=(a|0))if((a|0)<=32767?(t[i>>2]=a<<1,n=e+4|0,A=Q2(t[n>>2]|0,a<<3)|0,(A|0)!=0):0){t[n>>2]=A;r=t[f>>2]|0;l=6}else A=0;else{A=t[e+4>>2]|0;l=6}if((l|0)==6){t[f>>2]=r+1;l=u8(t[e>>2]|0,0,0,1,20)|0;t[A+(r<<2)>>2]=l;A=l}return A|0}function K8(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0,n=0,f=0;e:do{if((A|0)>(r|0))A=0;else while(1){A:do{if(!(s4(A)|0)){if(!(c4(A)|0)){A=A+1|0;break}a=u4(A)|0;i=a;while(1){n=A+1|0;i=i+1|0;if((A|0)>=(r|0)){f=a;A=n;n=12;break A}if((u4(n)|0)==(i|0))A=n;else{f=a;A=n;n=12;break}}}else{a=J1(A)|0;i=a;while(1){n=A+1|0;i=i+1|0;if((A|0)>=(r|0)){f=a;A=n;n=12;break A}if((J1(n)|0)==(i|0))A=n;else{f=a;A=n;n=12;break}}}}while(0);if((n|0)==12){n=0;a=q8(e)|0;if(!a){A=-1;break e}t[a>>2]=f;t[a+4>>2]=i+-1;t[a+8>>2]=-1}if((A|0)>(r|0)){A=0;break}}}while(0);return A|0}function $8(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;u=h;h=h+16|0;c=u;l=t[e+4>>2]|0;s=l+56|0;f=(t[s>>2]&8|0)==0?r:0;e=t[l+40>>2]|0;if((e|0)>0&(f|0)!=0){e=Z2(e<<2)|0;if(!e)e=12;else{n=e;r=e;o=3}}else{n=0;r=0;o=3}if((o|0)==3){if(!(t[l+60>>2]|0))e=A6(l,A,n,a,c)|0;else e=e6(l,A,n,a,c)|0;if(!e)r6(f,i,t[s>>2]|0,l,n,t[c>>2]|0);if(n)G2(r)}h=u;return e|0}function e6(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,P=0,X=0,S=0,j=0,U=0;U=h;h=h+16|0;S=U;t[S>>2]=0;b=i&1;P=i&2;X=e+56|0;u=t[X>>2]&4;j=c8(0,0)|0;e:do{if(j){w=u8(j,0,0,0,32)|0;if(!w){o8(j);i=12;break}t[w+24>>2]=0;t[w+28>>2]=0;H=e+40|0;k=t[H>>2]|0;if(k){i=Z2(k<<2)|0;if(!i){o=0;c=0;s=i;i=12;l=0;f=0;n=0}else{s=i;l=i;G=6}}else{s=0;l=0;G=6}A:do{if((G|0)==6){i=t[e+28>>2]|0;if(i){i=Z2(i<<3)|0;if(!i){o=i;c=0;i=12;f=0;n=0;break}else{o=i;f=i}}else{o=0;f=0}J=e+52|0;i=t[J>>2]|0;if(i){i=Z2(i<<2)|0;if(!i){c=i;i=12;n=0;break}else{c=i;n=i}}else{c=0;n=0}M=e+8|0;V=e+12|0;N=(r|0)==0;R=(r|0)!=0;x=e+32|0;F=(u|0)!=0;Y=(b|0)==0;v=A;i=1;d=-1;p=-1;u=k;Z=0;r:while(1){if((u|0)>0){b=0;do{t[s+(b<<2)>>2]=-1;if(!N){t[r+(b<<2)>>2]=-1;u=t[H>>2]|0}b=b+1|0}while((b|0)<(u|0))}u=t[J>>2]|0;if((u|0)>0)z6(n|0,0,u<<2|0)|0;z=i+d|0;i=C3(S,v,4)|0;if((i|0)<1)if((i|0)<0){i=1;break A}else i=1;D=v+i|0;W=t[S>>2]|0;u=t[M>>2]|0;b=u+8|0;if(t[b>>2]|0){E=(z|0)!=0;B=(Z|0)==95;y=(z|0)==0;I=F&(Z|0)==10;C=(z|0)<1&Y;m=u;u=0;g=0;v=b;while(1){d=m+20|0;b=t[d>>2]|0;i:do{if(b)if((b&1|0)==0|C|I){if(b&2|0?(Q=t[S>>2]|0,!((Q|P|0)==0|F&(Q|0)==10)):0){k=g;break}do{if(b&16|0){if(B){k=g;break i}if(t4(Z)|0){k=g;break i}b=t[S>>2]|0;if((b|0)==95)break;if(!(t4(b)|0)){k=g;break i}}}while(0);b=t[d>>2]|0;if(b&32){if(B){b=t[S>>2]|0;if((b|0)==95){k=g;break}}else{Q=(t4(Z)|0)==0;b=t[S>>2]|0;if(Q|(b|0)==95){k=g;break}}if(t4(b)|0){k=g;break}b=t[d>>2]|0}k=t[S>>2]|0;do{if((k|0)!=0&(E&(b&64|0)!=0)){if(B)b=1;else{b=(t4(Z)|0)!=0;k=t[S>>2]|0}if((k|0)==95)if(b){k=g;break i}else break;else if(b^(t4(k)|0)!=0)break;else{k=g;break i}}}while(0);if(!(t[d>>2]&128)){G=49;break}b=t[S>>2]|0;if(y|(b|0)==0){k=g;break}if(B)k=1;else{k=(t4(Z)|0)!=0;b=t[S>>2]|0}if((b|0)==95)if(k){G=49;break}else{k=g;break}else if(k^(t4(b)|0)!=0){k=g;break}else{G=49;break}}else k=g;else G=49}while(0);do{if((G|0)==49){G=0;if(!g){u=t[m+16>>2]|0;k=t[v>>2]|0;break}k=w+28|0;b=t[k>>2]|0;if(!b){b=u8(j,0,0,0,32)|0;if(!b){G=53;break r}t[b+24>>2]=w;t[b+28>>2]=0;Q=u8(j,0,0,0,t[H>>2]<<2)|0;t[b+20>>2]=Q;if(!Q){G=60;break r}t[k>>2]=b;w=b}else w=b;t[w>>2]=z;t[w+4>>2]=D;t[w+8>>2]=t[v>>2];t[w+12>>2]=t[m+12>>2];t[w+16>>2]=t[S>>2];if((t[H>>2]|0)>0){k=t[w+20>>2]|0;b=0;do{t[k+(b<<2)>>2]=t[s+(b<<2)>>2];b=b+1|0}while((b|0)<(t[H>>2]|0))}b=t[m+16>>2]|0;if(!b)k=g;else{k=t[b>>2]|0;if((k|0)<=-1){k=g;break}d=t[w+20>>2]|0;do{b=b+4|0;t[d+(k<<2)>>2]=z;k=t[b>>2]|0}while((k|0)>-1);k=g}}}while(0);v=m+40|0;if(!(t[v>>2]|0))break;else{m=m+32|0;g=k}}if(u){b=t[u>>2]|0;if((b|0)>-1)do{t[s+(b<<2)>>2]=z;u=u+4|0;b=t[u>>2]|0}while((b|0)>-1)}else u=0;if(!k)G=171;else{v=z;d=D;E=k;B=u;G=79}}else{u=0;G=171}i:while(1){if((G|0)==79){if((E|0)==(t[V>>2]|0)){if((p|0)>=(v|0)){if(!(R&(p|0)==(v|0))){u=B;G=171;continue}u=t[H>>2]|0;if(!(a6(u,t[x>>2]|0,s,r)|0)){u=B;G=171;continue}}else{if(N){p=v;u=B;G=171;continue}u=t[H>>2]|0}if((u|0)>0)u=0;else{p=v;u=B;G=171;continue}while(1){t[r+(u<<2)>>2]=t[s+(u<<2)>>2];u=u+1|0;if((u|0)>=(t[H>>2]|0)){p=v;u=B;G=171;continue i}}}m=E+8|0;if((t[m>>2]|0)!=0?(t[E+20>>2]&256|0)!=0:0){b=t[E+24>>2]|0;r6(b+1|0,o,t[X>>2]&-9,e,s,v);Q=t[o+(b<<3)>>2]|0;b=(t[o+(b<<3)+4>>2]|0)-Q|0;if(y1(A+Q|0,d+-1|0,b)|0){u=B;G=171;continue}Q=(b|0)==0;u=Q&1;k=t[E+12>>2]|0;if(Q?t[c+(k<<2)>>2]|0:0){u=B;G=171;continue}t[c+(k<<2)>>2]=u;b=b+-1|0;d=d+b|0;b=b+v|0;k=t[S>>2]|0;u=C3(S,d,4)|0;if((u|0)<1)if((u|0)<0){i=1;break A}else u=1;L=d+u|0;Q=u}else{k=t[S>>2]|0;if(!k){u=B;G=171;continue}u=C3(S,d,4)|0;if((u|0)<1)if((u|0)<0){i=1;break A}else u=1;b=v;L=d+u|0;Q=u}v=b+i|0;if(!(t[m>>2]|0)){i=Q;u=B;G=171;continue}y=(v|0)!=0;C=(k|0)==95;I=(v|0)==0;G=F&(k|0)==10;Z=(v|0)<1&Y;g=0;u=B;while(1){a:do{if((t[E>>2]|0)>>>0<=k>>>0){if((t[E+4>>2]|0)>>>0>>0)break;d=E+20|0;i=t[d>>2]|0;do{if(i|0){if(!((i&1|0)==0|Z|G))break a;if(i&2|0?(B=t[S>>2]|0,!((B|P|0)==0|F&(B|0)==10)):0)break a;do{if(i&16|0){if(C)break a;if(t4(k)|0)break a;i=t[S>>2]|0;if((i|0)==95)break;if(!(t4(i)|0))break a}}while(0);i=t[d>>2]|0;if(i&32){if(C){i=t[S>>2]|0;if((i|0)==95)break a}else{B=(t4(k)|0)==0;i=t[S>>2]|0;if(B|(i|0)==95)break a}if(t4(i)|0)break a;i=t[d>>2]|0}b=t[S>>2]|0;do{if((b|0)!=0&(y&(i&64|0)!=0)){if(C)i=1;else{i=(t4(k)|0)!=0;b=t[S>>2]|0}if((b|0)==95)if(i)break a;else break;else if(i^(t4(b)|0)!=0)break;else break a}}while(0);do{if(t[d>>2]&128|0){i=t[S>>2]|0;if(I|(i|0)==0)break a;if(C)b=1;else{b=(t4(k)|0)!=0;i=t[S>>2]|0}if((i|0)==95)if(b)break;else break a;else if(b^(t4(i)|0)!=0)break a;else break}}while(0);i=t[d>>2]|0;do{if(i&4){if(t[X>>2]&2|0)break;if(!(a4(k,t[E+24>>2]|0)|0))break a;i=t[d>>2]|0}}while(0);do{if(i&4|0){if(!(t[X>>2]&2))break;B=u4(k)|0;i=E+24|0;if(a4(B,t[i>>2]|0)|0)break;B=J1(k)|0;if(!(a4(B,t[i>>2]|0)|0))break a}}while(0);if(!(t[d>>2]&8))break;if(i6(t[E+28>>2]|0,k,t[X>>2]&2)|0)break a}}while(0);if(!g){g=t[m>>2]|0;u=t[E+16>>2]|0;break}b=w+28|0;i=t[b>>2]|0;if(!i){i=u8(j,0,0,0,32)|0;if(!i){G=145;break r}t[i+24>>2]=w;t[i+28>>2]=0;B=u8(j,0,0,0,t[H>>2]<<2)|0;t[i+20>>2]=B;if(!B){G=152;break r}t[b>>2]=i;w=i}else w=i;t[w>>2]=v;t[w+4>>2]=L;t[w+8>>2]=t[m>>2];t[w+12>>2]=t[E+12>>2];t[w+16>>2]=t[S>>2];if((t[H>>2]|0)>0){b=t[w+20>>2]|0;i=0;do{t[b+(i<<2)>>2]=t[s+(i<<2)>>2];i=i+1|0}while((i|0)<(t[H>>2]|0))}i=t[E+16>>2]|0;if(!i)break;b=t[i>>2]|0;if((b|0)<=-1)break;d=t[w+20>>2]|0;do{t[d+(b<<2)>>2]=v;i=i+4|0;b=t[i>>2]|0}while((b|0)>-1)}}while(0);m=E+40|0;if(!(t[m>>2]|0))break;else E=E+32|0}if(!g){i=Q;G=171;continue}if(u){i=t[u>>2]|0;if((i|0)>-1){do{u=u+4|0;t[s+(i<<2)>>2]=v;i=t[u>>2]|0}while((i|0)>-1);k=p;b=L;i=Q}else{k=p;b=L;i=Q}}else{k=p;b=L;i=Q;u=0}}else if((G|0)==171){G=0;d=t[w+24>>2]|0;if(!d)break;g=t[w+8>>2]|0;if(t[g+20>>2]&256|0)t[c+(t[w+12>>2]<<2)>>2]=0;v=t[w>>2]|0;m=t[w+4>>2]|0;t[S>>2]=t[w+16>>2];k=t[H>>2]|0;if((k|0)>0){w=t[w+20>>2]|0;b=0;do{t[s+(b<<2)>>2]=t[w+(b<<2)>>2];b=b+1|0}while((b|0)<(k|0));w=d;k=p;b=m}else{w=d;k=p;b=m}}d=b;p=k;E=g;B=u;G=79}u=(p|0)>-1;if(u|(t[S>>2]|0)==0){G=180;break}t[S>>2]=W;v=D;d=z;u=t[H>>2]|0;Z=W}if((G|0)==53){o8(j);if(s|0)G2(l);if(o|0)G2(f);if(!c){i=12;break e}G2(n);i=12;break e}else if((G|0)==60){o8(j);if(s|0)G2(l);if(o|0)G2(f);if(!c){i=12;break e}G2(n);i=12;break e}else if((G|0)==145){o8(j);if(s|0)G2(l);if(o|0)G2(f);if(!c){i=12;break e}G2(n);i=12;break e}else if((G|0)==152){o8(j);if(s|0)G2(l);if(o|0)G2(f);if(!c){i=12;break e}G2(n);i=12;break e}else if((G|0)==180){t[a>>2]=p;i=(u^1)&1;break}}}while(0);o8(j);if(s|0)G2(l);if(o|0)G2(f);if(c)G2(n)}else i=12}while(0);h=U;return i|0}function A6(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,w=0,k=0,d=0,v=0,g=0,m=0,p=0,E=0,B=0,y=0,C=0,I=0,Z=0,G=0,L=0,Q=0,D=0,z=0,W=0,Y=0,F=0,M=0,V=0,N=0,R=0,x=0,J=0,H=0,X=0,S=0,j=0,U=0,T=0;T=h;h=h+16|0;S=T;t[S>>2]=0;c=i&1;J=i&2;H=e+56|0;s=t[H>>2]&4;if(!r)R=0;else R=t[e+40>>2]|0;x=R<<2;l=t[e+52>>2]|0;f=l<<3;n=f+8|0;i=x+12+f+(n+(P(x,l)|0)<<1)|0;j=Z2(i)|0;if(!j)i=12;else{z6(j|0,0,i|0)|0;i=j+x|0;o=i&3;o=i+((o|0)==0?0:4-o|0)|0;i=o+n|0;u=i&3;u=i+((u|0)==0?0:4-u|0)|0;i=u+n|0;N=i&3;N=i+((N|0)==0?0:4-N|0)|0;i=N+f|0;n=i&3;f=(l|0)>0;if(f){i=i+((n|0)==0?0:4-n|0)|0;n=0;while(1){t[u+(n<<3)+4>>2]=i;i=i+x|0;t[o+(n<<3)+4>>2]=i;n=n+1|0;if((n|0)>=(l|0))break;else i=i+x|0}if(f){i=0;do{t[N+(i<<3)>>2]=-1;i=i+1|0}while((i|0)<(l|0))}}i=C3(S,A,4)|0;if((i|0)<1)if((i|0)<0)i=1;else{l=1;U=11}else{l=i;U=11}e:do{if((U|0)==11){V=e+8|0;M=(s|0)!=0;Q=(c|0)==0;D=(R|0)>0;z=e+12|0;W=(R|0)<1;Y=e+44|0;F=e+32|0;G=e+36|0;L=(R|0)==0;f=0;p=A+l|0;m=0;s=0;i=-1;n=o;I=j;B=o;E=u;while(1){if((i|0)<0){e=t[V>>2]|0;c=e+8|0;A:do{if(t[c>>2]|0){w=(m|0)!=0;k=(f|0)==95;d=(m|0)==0;g=M&(f|0)==10;v=(m|0)<1&Q;while(1){r:while(1){b=e+12|0;if((t[N+(t[b>>2]<<3)>>2]|0)>=(m|0))break;u=e+20|0;A=t[u>>2]|0;if(!A){U=46;break}i:do{if((A&1|0)==0|v|g){if(A&2|0?(Z=t[S>>2]|0,!((Z|J|0)==0|M&(Z|0)==10)):0)break;do{if(A&16|0){if(k)break i;if(t4(f)|0)break i;A=t[S>>2]|0;if((A|0)==95)break;if(!(t4(A)|0))break i}}while(0);A=t[u>>2]|0;if(A&32){if(k){A=t[S>>2]|0;if((A|0)==95)break}else{Z=(t4(f)|0)==0;A=t[S>>2]|0;if(Z|(A|0)==95)break}if(t4(A)|0)break;A=t[u>>2]|0}o=t[S>>2]|0;do{if((o|0)!=0&(w&(A&64|0)!=0)){if(k)A=1;else{A=(t4(f)|0)!=0;o=t[S>>2]|0}if((o|0)==95)if(A)break i;else break;else if(A^(t4(o)|0)!=0)break;else break i}}while(0);if(!(t[u>>2]&128)){U=46;break r}A=t[S>>2]|0;if(d|(A|0)==0)break;if(k)o=1;else{o=(t4(f)|0)!=0;A=t[S>>2]|0}if((A|0)==95)if(o){U=46;break r}else break;else if(o^(t4(A)|0)!=0)break;else{U=46;break r}}}while(0);c=e+40|0;if(!(t[c>>2]|0))break A;else e=e+32|0}if((U|0)==46){U=0;t[n>>2]=t[c>>2];if(D)z6(t[n+4>>2]|0,-1,x|0)|0;c=t[e+16>>2]|0;if(c|0?(X=t[c>>2]|0,(X|0)>-1):0){o=n+4|0;A=X;do{if((A|0)<(R|0))t[(t[o>>2]|0)+(A<<2)>>2]=m;c=c+4|0;A=t[c>>2]|0}while((A|0)>-1)}c=(t[n>>2]|0)!=(t[z>>2]|0);if(c|W){s=c?s:1;i=c?i:m;c=n+4|0}else{c=n+4|0;s=t[c>>2]|0;i=0;do{t[r+(i<<2)>>2]=t[s+(i<<2)>>2];i=i+1|0}while((i|0)!=(R|0));s=1;i=m}Z=t[b>>2]|0;t[N+(Z<<3)>>2]=m;t[N+(Z<<3)+4>>2]=c;n=n+8|0}c=e+40|0;if(!(t[c>>2]|0))break;else e=e+32|0}}}while(0);t[n>>2]=0;n=t[S>>2]|0;if(!n)break;else f=n}else{if(L)break;f=t[S>>2]|0;if(!((n|0)!=(B|0)&(f|0)!=0))break}Z=m+l|0;n=C3(S,p,4)|0;if((n|0)<1)if((n|0)<0){i=1;break e}else l=1;else l=n;C=p+l|0;if((s|0)!=0&(t[Y>>2]|0)!=0){if(!(t[B>>2]|0))n=E;else{b=t[G>>2]|0;w=t[b>>2]|0;k=(w|0)>-1;u=B;n=E;do{o=u+4|0;A:do{if(k){c=0;A=w;do{e=t[b+((c|1)<<2)>>2]|0;if((A|0)>=(R|0))break A;s=t[o>>2]|0;if((t[s+(e<<2)>>2]|0)==(t[r+(e<<2)>>2]|0)?(t[s+(A<<2)>>2]|0)<(t[r+(A<<2)>>2]|0):0)break A;c=c+2|0;A=t[b+(c<<2)>>2]|0}while((A|0)>-1);c=o;U=75}else{c=o;s=t[o>>2]|0;U=75}}while(0);if((U|0)==75){U=0;t[n>>2]=t[u>>2];p=n+4|0;y=t[p>>2]|0;t[p>>2]=s;t[c>>2]=y;n=n+8|0}u=u+8|0}while((t[u>>2]|0)!=0)}t[n>>2]=0;y=B;s=0}else{y=E;E=B}c=t[E>>2]|0;if(!c){c=I;n=y}else{d=(Z|0)!=0;v=(f|0)==95;g=(Z|0)==0;p=M&(f|0)==10;m=(Z|0)<1&Q;k=E;e=I;n=y;while(1){A=c+8|0;if(t[A>>2]|0){w=k+4|0;b=e;u=A;while(1){A:do{if((t[c>>2]|0)>>>0<=f>>>0?(t[c+4>>2]|0)>>>0>=f>>>0:0){o=c+20|0;e=t[o>>2]|0;do{if(e|0){if(!((e&1|0)==0|m|p)){e=b;break A}if(e&2|0?(I=t[S>>2]|0,!((I|J|0)==0|M&(I|0)==10)):0){e=b;break A}do{if(e&16|0){if(v){e=b;break A}if(t4(f)|0){e=b;break A}e=t[S>>2]|0;if((e|0)==95)break;if(!(t4(e)|0)){e=b;break A}}}while(0);e=t[o>>2]|0;if(e&32){if(v){e=t[S>>2]|0;if((e|0)==95){e=b;break A}}else{I=(t4(f)|0)==0;e=t[S>>2]|0;if(I|(e|0)==95){e=b;break A}}if(t4(e)|0){e=b;break A}e=t[o>>2]|0}A=t[S>>2]|0;do{if((A|0)!=0&(d&(e&64|0)!=0)){if(v)e=1;else{e=(t4(f)|0)!=0;A=t[S>>2]|0}if((A|0)==95)if(e){e=b;break A}else break;else if(e^(t4(A)|0)!=0)break;else{e=b;break A}}}while(0);do{if(t[o>>2]&128|0){e=t[S>>2]|0;if(g|(e|0)==0){e=b;break A}if(v)A=1;else{A=(t4(f)|0)!=0;e=t[S>>2]|0}if((e|0)==95)if(A)break;else{e=b;break A}else if(A^(t4(e)|0)!=0){e=b;break A}else break}}while(0);e=t[o>>2]|0;do{if(e&4){if(t[H>>2]&2|0)break;if(!(a4(f,t[c+24>>2]|0)|0)){e=b;break A}e=t[o>>2]|0}}while(0);do{if(e&4|0){if(!(t[H>>2]&2))break;I=u4(f)|0;e=c+24|0;if(a4(I,t[e>>2]|0)|0)break;I=J1(f)|0;if(!(a4(I,t[e>>2]|0)|0)){e=b;break A}}}while(0);if(!(t[o>>2]&8))break;if(i6(t[c+28>>2]|0,f,t[H>>2]&2)|0){e=b;break A}}}while(0);if(D){A=t[w>>2]|0;e=0;do{t[b+(e<<2)>>2]=t[A+(e<<2)>>2];e=e+1|0}while((e|0)!=(R|0))}e=t[c+16>>2]|0;do{if(e|0){A=t[e>>2]|0;if((A|0)<=-1)break;do{if((A|0)<(R|0))t[b+(A<<2)>>2]=Z;e=e+4|0;A=t[e>>2]|0}while((A|0)>-1)}}while(0);e=t[c+12>>2]|0;A=N+(e<<3)|0;if((t[A>>2]|0)>=(Z|0)){e=t[N+(e<<3)+4>>2]|0;A=t[e>>2]|0;if(!(a6(R,t[F>>2]|0,b,A)|0)){e=b;break}t[e>>2]=b;if((t[u>>2]|0)!=(t[z>>2]|0)){e=A;break}if(D)i=0;else{s=1;e=A;i=Z;break}while(1){t[r+(i<<2)>>2]=t[b+(i<<2)>>2];i=i+1|0;if((i|0)==(R|0)){s=1;e=A;i=Z;break A}}}I=t[u>>2]|0;t[n>>2]=I;B=n+4|0;o=t[B>>2]|0;t[B>>2]=b;t[A>>2]=Z;t[N+(e<<3)+4>>2]=B;do{if((t[z>>2]|0)==(I|0)){if((i|0)==-1)if(D)i=0;else{i=Z;s=1;break}else{if(!D)break;if((t[b>>2]|0)>(t[r>>2]|0))break;else i=0}do{t[r+(i<<2)>>2]=t[b+(i<<2)>>2];i=i+1|0}while((i|0)<(R|0));i=Z;s=1}}while(0);e=o;n=n+8|0}else e=b}while(0);u=c+40|0;if(!(t[u>>2]|0))break;else{c=c+32|0;b=e}}}k=k+8|0;c=t[k>>2]|0;if(!c){c=e;break}}}t[n>>2]=0;p=C;m=Z;I=c;B=y}t[a>>2]=i;i=i>>>31}}while(0);G2(j)}h=T;return i|0}function r6(e,A,r,i,a,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;n=n|0;var f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0;if((r&8|0)==0&(n|0)>-1?(u=t[i+16>>2]|0,b=t[i+28>>2]|0,o=(e|0)!=0&(b|0)!=0,o):0){c=t[i+48>>2]|0;s=0;do{r=t[u+(s*12|0)>>2]|0;if((r|0)==(c|0))l=n;else l=t[a+(r<<2)>>2]|0;f=A+(s<<3)|0;t[f>>2]=l;r=t[u+(s*12|0)+4>>2]|0;if((r|0)==(c|0))r=n;else r=t[a+(r<<2)>>2]|0;i=A+(s<<3)+4|0;t[i>>2]=r;if((r|0)==-1|(l|0)==-1){t[i>>2]=-1;t[f>>2]=-1}s=s+1|0}while(s>>>0>>0&s>>>0>>0);if(o){r=0;do{l=A+(r<<3)+4|0;s=t[u+(r*12|0)+8>>2]|0;if(s|0?(h=t[s>>2]|0,(h|0)>-1):0){c=A+(r<<3)|0;f=0;a=h;i=t[c>>2]|0;do{if(!((i|0)>=(t[A+(a<<3)>>2]|0)?(t[l>>2]|0)<=(t[A+(a<<3)+4>>2]|0):0)){t[l>>2]=-1;t[c>>2]=-1;i=-1}f=f+1|0;a=t[s+(f<<2)>>2]|0}while((a|0)>-1)}r=r+1|0}while(r>>>0>>0&r>>>0>>0)}else r=0}else r=0;if(r>>>0>>0)z6(A+(r<<3)|0,-1,e-r<<3|0)|0;return}function i6(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;i=t[e>>2]|0;e:do{if(!i)r=0;else{a=(r|0)==0;r=i;while(1){if(a){if(a4(A,r)|0){r=1;break e}}else{i=J1(A)|0;if(a4(i,t[e>>2]|0)|0){r=1;break e}i=u4(A)|0;if(a4(i,t[e>>2]|0)|0){r=1;break e}}e=e+4|0;r=t[e>>2]|0;if(!r){r=0;break}}}}while(0);return r|0}function a6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0,f=0;e:do{if((e|0)>0){a=0;while(1){f=t[r+(a<<2)>>2]|0;n=t[i+(a<<2)>>2]|0;if(!(t[A+(a<<2)>>2]|0)){if((f|0)<(n|0)){a=1;break e}if((f|0)>(n|0)){a=0;break e}}else{if((f|0)>(n|0)){a=1;break e}if((f|0)<(n|0)){a=0;break e}}a=a+1|0;if((a|0)>=(e|0)){a=0;break}}}else a=0}while(0);return a|0}function t6(e,A,r,a){e=e|0;A=A|0;r=r|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0;c=P(r,A)|0;r=(A|0)==0?0:r;if((t[a+76>>2]|0)>-1)s=d4(a)|0;else s=0;n=a+74|0;f=i[n>>0]|0;i[n>>0]=f+255|f;n=a+4|0;f=t[n>>2]|0;u=(t[a+8>>2]|0)-f|0;l=u>>>0>>0?u:c;if((u|0)>0){Q6(e|0,f|0,l|0)|0;t[n>>2]=f+l;n=c-l|0;e=e+l|0}else n=c;e:do{if(!n)o=13;else{l=a+32|0;while(1){if(Y1(a)|0)break;f=L5[t[l>>2]&63](a,e,n)|0;if((f+1|0)>>>0<2)break;n=n-f|0;if(!n){o=13;break e}else e=e+f|0}if(s|0)v4(a);r=((c-n|0)>>>0)/(A>>>0)|0}}while(0);if((o|0)==13)if(s)v4(a);return r|0}function n6(e){e=e|0;var A=0;if((t[e+76>>2]|0)>-1){A=(d4(e)|0)==0;e=f6(e)|0}else e=f6(e)|0;return e|0}function f6(e){e=e|0;var A=0;if(!(t[e>>2]&128))A=1;else A=(t[e+20>>2]|0)>>>0>(t[e+28>>2]|0)>>>0?2:1;A=L5[t[e+40>>2]&63](e,0,A)|0;if((A|0)>=0)A=A-(t[e+8>>2]|0)+(t[e+4>>2]|0)+(t[e+20>>2]|0)-(t[e+28>>2]|0)|0;return A|0}function l6(e){e=e|0;(t[e+76>>2]|0)>-1?d4(e)|0:0;return t[e+60>>2]|0}function s6(e){e=e|0;var A=0,r=0,a=0,n=0;a=t[15679]|0;if((t[a+76>>2]|0)>-1)n=d4(a)|0;else n=0;do{if((Z3(e,a)|0)<0)e=-1;else{if((i[a+75>>0]|0)!=10?(A=a+20|0,r=t[A>>2]|0,r>>>0<(t[a+16>>2]|0)>>>0):0){t[A>>2]=r+1;i[r>>0]=10;e=0;break}e=(L3(a,10)|0)>>31}}while(0);if(n|0)v4(a);return e|0}function c6(){var e=0,A=0,r=0,a=0,n=0,f=0,l=0,s=0,c=0;c=h;h=h+48|0;l=c+24|0;f=c+16|0;n=c;A=c+28|0;e=A;r=153686;a=e+20|0;do{i[e>>0]=i[r>>0]|0;e=e+1|0;r=r+1|0}while((e|0)<(a|0));r=A+13|0;e=0;while(1){t3(r)|0;t[n>>2]=A;t[n+4>>2]=32962;t[n+8>>2]=384;a=N2(Me(5,n|0)|0)|0;if((a|0)>-1){s=4;break}if((e|0)<99)e=e+1|0;else{e=0;break}}if((s|0)==4){t[f>>2]=A;Ce(10,f|0)|0;e=B3(a,153706)|0;if(!e){t[l>>2]=a;Ne(6,l|0)|0;e=0}}h=c;return e|0}function o6(e){e=e|0;var A=0,r=0,i=0;if((t[e+76>>2]|0)>=0?(d4(e)|0)!=0:0){A=e+4|0;r=t[A>>2]|0;if(r>>>0<(t[e+8>>2]|0)>>>0){t[A>>2]=r+1;A=n[r>>0]|0}else A=W1(e)|0}else i=3;do{if((i|0)==3){A=e+4|0;r=t[A>>2]|0;if(r>>>0<(t[e+8>>2]|0)>>>0){t[A>>2]=r+1;A=n[r>>0]|0;break}else{A=W1(e)|0;break}}}while(0);return A|0}function u6(e,A){e=e|0;A=A|0;var r=0,a=0,n=0,f=0,l=0,s=0,c=0;if((t[A+76>>2]|0)>=0?(d4(A)|0)!=0:0){a=e&255;r=e&255;if((r|0)!=(i[A+75>>0]|0)?(l=A+20|0,s=t[l>>2]|0,s>>>0<(t[A+16>>2]|0)>>>0):0){t[l>>2]=s+1;i[s>>0]=a}else r=L3(A,e)|0;v4(A)}else c=3;do{if((c|0)==3){a=e&255;r=e&255;if((r|0)!=(i[A+75>>0]|0)?(n=A+20|0,f=t[n>>2]|0,f>>>0<(t[A+16>>2]|0)>>>0):0){t[n>>2]=f+1;i[f>>0]=a;break}r=L3(A,e)|0}}while(0);return r|0}function b6(e){e=e|0;return n6(e)|0}function h6(){}function w6(e,A){e=e|0;A=A|0;var r=0,i=0,a=0,t=0;t=e&65535;a=A&65535;r=P(a,t)|0;i=e>>>16;e=(r>>>16)+(P(a,i)|0)|0;a=A>>>16;A=P(a,t)|0;return(G=(e>>>16)+(P(a,i)|0)+(((e&65535)+A|0)>>>16)|0,e+A<<16|r&65535|0)|0}function k6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,t=0;a=e;t=r;r=w6(a,t)|0;e=G;return(G=(P(A,t)|0)+(P(i,a)|0)+e|e&0,r|0|0)|0}function d6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;r=e+r>>>0;return(G=A+i+(r>>>0>>0|0)>>>0,r|0)|0}function v6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;i=A-i-(r>>>0>e>>>0|0)>>>0;return(G=i,e-r>>>0|0)|0}function g6(e){e=e|0;var A=0;A=i[k+(e&255)>>0]|0;if((A|0)<8)return A|0;A=i[k+(e>>8&255)>>0]|0;if((A|0)<8)return A+8|0;A=i[k+(e>>16&255)>>0]|0;if((A|0)<8)return A+16|0;return(i[k+(e>>>24)>>0]|0)+24|0}function m6(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;var n=0,f=0,l=0,s=0,c=0,o=0,u=0,b=0,h=0,w=0;o=e;s=A;c=s;f=r;b=i;l=b;if(!c){n=(a|0)!=0;if(!l){if(n){t[a>>2]=(o>>>0)%(f>>>0);t[a+4>>2]=0}b=0;a=(o>>>0)/(f>>>0)>>>0;return(G=b,a)|0}else{if(!n){b=0;a=0;return(G=b,a)|0}t[a>>2]=e|0;t[a+4>>2]=A&0;b=0;a=0;return(G=b,a)|0}}n=(l|0)==0;do{if(f){if(!n){n=(j(l|0)|0)-(j(c|0)|0)|0;if(n>>>0<=31){u=n+1|0;l=31-n|0;A=n-31>>31;f=u;e=o>>>(u>>>0)&A|c<>>(u>>>0)&A;n=0;l=o<>2]=e|0;t[a+4>>2]=s|A&0;b=0;a=0;return(G=b,a)|0}n=f-1|0;if(n&f|0){l=(j(f|0)|0)+33-(j(c|0)|0)|0;w=64-l|0;u=32-l|0;s=u>>31;h=l-32|0;A=h>>31;f=l;e=u-1>>31&c>>>(h>>>0)|(c<>>(l>>>0))&A;A=A&c>>>(l>>>0);n=o<>>(h>>>0))&s|o<>31;break}if(a|0){t[a>>2]=n&o;t[a+4>>2]=0}if((f|0)==1){h=s|A&0;w=e|0|0;return(G=h,w)|0}else{w=g6(f|0)|0;h=c>>>(w>>>0)|0;w=c<<32-w|o>>>(w>>>0)|0;return(G=h,w)|0}}else{if(n){if(a|0){t[a>>2]=(c>>>0)%(f>>>0);t[a+4>>2]=0}h=0;w=(c>>>0)/(f>>>0)>>>0;return(G=h,w)|0}if(!o){if(a|0){t[a>>2]=0;t[a+4>>2]=(c>>>0)%(l>>>0)}h=0;w=(c>>>0)/(l>>>0)>>>0;return(G=h,w)|0}n=l-1|0;if(!(n&l)){if(a|0){t[a>>2]=e|0;t[a+4>>2]=n&c|A&0}h=0;w=c>>>((g6(l|0)|0)>>>0);return(G=h,w)|0}n=(j(l|0)|0)-(j(c|0)|0)|0;if(n>>>0<=30){A=n+1|0;l=31-n|0;f=A;e=c<>>(A>>>0);A=c>>>(A>>>0);n=0;l=o<>2]=e|0;t[a+4>>2]=s|A&0;h=0;w=0;return(G=h,w)|0}}while(0);if(!f){c=l;s=0;l=0}else{u=r|0|0;o=b|i&0;c=d6(u|0,o|0,-1,-1)|0;r=G;s=l;l=0;do{i=s;s=n>>>31|s<<1;n=l|n<<1;i=e<<1|i>>>31|0;b=e>>>31|A<<1|0;v6(c|0,r|0,i|0,b|0)|0;w=G;h=w>>31|((w|0)<0?-1:0)<<1;l=h&1;e=v6(i|0,b|0,h&u|0,(((w|0)<0?-1:0)>>31|((w|0)<0?-1:0)<<1)&o|0)|0;A=G;f=f-1|0}while((f|0)!=0);c=s;s=0}f=0;if(a|0){t[a>>2]=e;t[a+4>>2]=A}h=(n|0)>>>31|(c|f)<<1|(f<<1|n>>>31)&0|s;w=(n<<1|0>>>31)&-2|l;return(G=h,w)|0}function p6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return m6(e,A,r,i,0)|0}function E6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0,n=0;n=h;h=h+16|0;a=n|0;m6(e,A,r,i,a)|0;h=n;return(G=t[a+4>>2]|0,t[a>>2]|0)|0}function B6(e,A,r){e=e|0;A=A|0;r=r|0;if((r|0)<32){G=A>>r;return e>>>r|(A&(1<>r-32|0}function y6(e,A,r){e=e|0;A=A|0;r=r|0;if((r|0)<32){G=A>>>r;return e>>>r|(A&(1<>>r-32|0}function C6(e,A,r){e=e|0;A=A|0;r=r|0;if((r|0)<32){G=A<>>32-r;return e<>8&255|0}function Z6(e){e=e|0;return(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function G6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;var a=0;g=g+1|0;t[e>>2]=g;while((a|0)<(i|0)){if(!(t[r+(a<<3)>>2]|0)){t[r+(a<<3)>>2]=g;t[r+((a<<3)+4)>>2]=A;t[r+((a<<3)+8)>>2]=0;G=i;return r|0}a=a+1|0}i=i*2|0;r=Q2(r|0,8*(i+1|0)|0)|0;r=G6(e|0,A|0,r|0,i|0)|0;G=i;return r|0}function L6(e,A,r){e=e|0;A=A|0;r=r|0;var i=0,a=0;while((a|0)<(r|0)){i=t[A+(a<<3)>>2]|0;if(!i)break;if((i|0)==(e|0))return t[A+((a<<3)+4)>>2]|0;a=a+1|0}return 0}function Q6(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0;if((r|0)>=8192)return je(e|0,A|0,r|0)|0;f=e|0;n=e+r|0;if((e&3)==(A&3)){while(e&3){if(!r)return f|0;i[e>>0]=i[A>>0]|0;e=e+1|0;A=A+1|0;r=r-1|0}r=n&-4|0;a=r-64|0;while((e|0)<=(a|0)){t[e>>2]=t[A>>2];t[e+4>>2]=t[A+4>>2];t[e+8>>2]=t[A+8>>2];t[e+12>>2]=t[A+12>>2];t[e+16>>2]=t[A+16>>2];t[e+20>>2]=t[A+20>>2];t[e+24>>2]=t[A+24>>2];t[e+28>>2]=t[A+28>>2];t[e+32>>2]=t[A+32>>2];t[e+36>>2]=t[A+36>>2];t[e+40>>2]=t[A+40>>2];t[e+44>>2]=t[A+44>>2];t[e+48>>2]=t[A+48>>2];t[e+52>>2]=t[A+52>>2];t[e+56>>2]=t[A+56>>2];t[e+60>>2]=t[A+60>>2];e=e+64|0;A=A+64|0}while((e|0)<(r|0)){t[e>>2]=t[A>>2];e=e+4|0;A=A+4|0}}else{r=n-4|0;while((e|0)<(r|0)){i[e>>0]=i[A>>0]|0;i[e+1>>0]=i[A+1>>0]|0;i[e+2>>0]=i[A+2>>0]|0;i[e+3>>0]=i[A+3>>0]|0;e=e+4|0;A=A+4|0}}while((e|0)<(n|0)){i[e>>0]=i[A>>0]|0;e=e+1|0;A=A+1|0}return f|0}function D6(e,A,r){e=e|0;A=A|0;r=r|0;var a=0;if((A|0)<(e|0)&(e|0)<(A+r|0)){a=e;A=A+r|0;e=e+r|0;while((r|0)>0){e=e-1|0;A=A-1|0;r=r-1|0;i[e>>0]=i[A>>0]|0}e=a}else Q6(e,A,r)|0;return e|0}function z6(e,A,r){e=e|0;A=A|0;r=r|0;var a=0,n=0,f=0,l=0;f=e+r|0;A=A&255;if((r|0)>=67){while(e&3){i[e>>0]=A;e=e+1|0}a=f&-4|0;n=a-64|0;l=A|A<<8|A<<16|A<<24;while((e|0)<=(n|0)){t[e>>2]=l;t[e+4>>2]=l;t[e+8>>2]=l;t[e+12>>2]=l;t[e+16>>2]=l;t[e+20>>2]=l;t[e+24>>2]=l;t[e+28>>2]=l;t[e+32>>2]=l;t[e+36>>2]=l;t[e+40>>2]=l;t[e+44>>2]=l;t[e+48>>2]=l;t[e+52>>2]=l;t[e+56>>2]=l;t[e+60>>2]=l;e=e+64|0}while((e|0)<(a|0)){t[e>>2]=l;e=e+4|0}}while((e|0)<(f|0)){i[e>>0]=A;e=e+1|0}return f-r|0}function W6(e){e=e|0;var A=0,r=0;r=e+15&-16|0;A=t[o>>2]|0;e=A+r|0;if((r|0)>0&(e|0)<(A|0)|(e|0)<0){q()|0;ye(12);return-1}t[o>>2]=e;if((e|0)>(_()|0)?(O()|0)==0:0){t[o>>2]=A;ye(12);return-1}return A|0}function Y6(e){e=e|0;return+E5[e&1]()}function F6(e,A,r,i){e=e|0;A=+A;r=+r;i=+i;return+B5[e&7](+A,+r,+i)}function M6(e,A){e=e|0;A=A|0;return+y5[e&1](A|0)}function V6(e){e=e|0;return C5[e&3]()|0}function N6(e,A){e=e|0;A=A|0;return I5[e&63](A|0)|0}function R6(e,A,r){e=e|0;A=A|0;r=r|0;return Z5[e&127](A|0,r|0)|0}function x6(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=+i;a=+a;return G5[e&3](A|0,r|0,+i,+a)|0}function J6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;return L5[e&63](A|0,r|0,i|0)|0}function H6(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;return Q5[e&127](A|0,r|0,i|0,a|0)|0}function P6(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;return D5[e&127](A|0,r|0,i|0,a|0,t|0)|0}function X6(e,A,r,i,a,t,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;return z5[e&1](A|0,r|0,i|0,a|0,t|0,n|0)|0}function S6(e,A,r,i,a,t,n,f,l,s,c){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;s=s|0;c=c|0;return W5[e&3](A|0,r|0,i|0,a|0,t|0,n|0,f|0,l|0,s|0,c|0)|0}function j6(e){e=e|0;Y5[e&15]()}function U6(e,A){e=e|0;A=A|0;F5[e&127](A|0)}function T6(e,A,r){e=e|0;A=A|0;r=r|0;M5[e&63](A|0,r|0)}function O6(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;V5[e&127](A|0,r|0,i|0)}function _6(e,A,r,i,a,t,n){e=e|0;A=A|0;r=r|0;i=i|0;a=+a;t=+t;n=n|0;N5[e&15](A|0,r|0,i|0,+a,+t,n|0)}function q6(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;R5[e&31](A|0,r|0,i|0,a|0)}function K6(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;x5[e&15](A|0,r|0,i|0,a|0,t|0)}function $6(e,A,r,i,a,t,n){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;J5[e&15](A|0,r|0,i|0,a|0,t|0,n|0)}function e5(e,A,r,i,a,t,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;s=s|0;H5[e&0](A|0,r|0,i|0,a|0,t|0,n|0,f|0,l|0,s|0)}function A5(){U(0);return 0.0}function r5(e,A,r){e=+e;A=+A;r=+r;U(1);return 0.0}function i5(e){e=e|0;U(2);return 0.0}function a5(){U(3);return 0}function t5(e){e=e|0;U(4);return 0}function n5(e,A){e=e|0;A=A|0;U(5);return 0}function f5(e,A,r,i){e=e|0;A=A|0;r=+r;i=+i;U(6);return 0}function l5(e,A,r){e=e|0;A=A|0;r=r|0;U(7);return 0}function s5(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;U(8);return 0}function c5(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;U(9);return 0}function o5(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;U(10);return 0}function u5(e,A,r,i,a,t,n,f,l,s){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;s=s|0;U(11);return 0}function b5(){U(12)}function h5(e){e=e|0;U(13)}function w5(e,A){e=e|0;A=A|0;U(14)}function k5(e,A,r){e=e|0;A=A|0;r=r|0;U(15)}function d5(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=+i;a=+a;t=t|0;U(16)}function v5(e,A,r,i){e=e|0;A=A|0;r=r|0;i=i|0;U(17)}function g5(e,A,r,i,a){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;U(18)}function m5(e,A,r,i,a,t){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;U(19)}function p5(e,A,r,i,a,t,n,f,l){e=e|0;A=A|0;r=r|0;i=i|0;a=a|0;t=t|0;n=n|0;f=f|0;l=l|0;U(20)}var E5=[A5,sx];var B5=[r5,pY,mY,EY,BY,r5,r5,r5];var y5=[i5,kx];var C5=[a5,xj,lM,$M];var I5=[t5,kL,VG,IH,ZH,_k,$k,CA,IA,di,vi,gi,mi,pi,Ei,Bi,yi,F2,OB,km,NW,JW,JH,$F,gk,sd,vk,aM,sM,mk,oA,KF,kA,dA,us,Z2,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5,t5];var Z5=[n5,Ik,Ok,ed,lR,sR,eR,_N,zN,Uf,Tf,Of,_f,qf,Kf,el,Al,rl,il,al,tl,nl,fl,ll,sl,cl,ol,ul,bl,hl,wl,kl,dl,vl,gl,ml,pl,El,Bl,yl,pK,EK,yK,UK,TK,OK,_K,qK,KK,$K,e$,S$,j$,T$,l$,s$,o$,hm,ZG,wL,XL,mQ,NQ,Oz,Uz,RW,HW,NX,TS,_j,vU,mU,EU,BU,CU,yU,MU,TT,$T,AO,nq,vu,Qg,Lg,Gg,pp,cd,AM,Yp,_p,Sp,jp,UE,Z3,u6,ix,dJ,Hw,_t,Ow,qw,uA,e1,Ba,jf,ls,ss,Q2,Eo,Bo,yo,_8,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5];var G5=[f5,i_,l_,f5];var L5=[l5,EH,Cq,Lh,Vh,jh,qh,Tk,Kk,oV,aJ,Yt,CK,O$,u$,M2,V2,J2,H2,Q4,nw,NH,bq,aS,eO,Uu,Ou,Ku,$h,gp,T4,Rv,a3,tx,fV,Cr,ts,z$,B0,d0,Z0,R3,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5];var Q5=[s5,yH,QU,Iq,Dh,Rh,Uw,Xv,Tw,bk,Gk,Qk,Jk,xk,Ad,td,fd,AV,nJ,er,KA,_i,Mt,tn,an,Zo,Go,Lo,dK,vK,gK,mK,BK,ZK,N$,R$,x$,J$,H$,P$,X$,U$,q$,A$,r$,i$,a$,t$,n$,f$,c$,h$,rw,Sd,Bp,fx,$s,rc,sc,mc,Lc,Fc,Wc,Mc,mo,G0,no,Y$,F$,y0,C0,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5,s5];var D5=[c5,Zk,WN,AR,GK,LK,SK,jK,h0,K$,$$,w$,k$,Co,Io,Q0,D0,z0,W0,F0,M0,V0,N0,R0,J0,H0,P0,X0,S0,x0,d2,v2,l2,A2,j0,U0,T0,_0,O0,q0,K0,$0,e2,r2,i2,a2,t2,n2,f2,s2,c2,o2,u2,k2,h2,b2,w2,B2,g2,m2,p2,E2,y2,C2,I2,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5];var z5=[o5,Vl];var W5=[u5,k0,I0,u5];var Y5=[b5,lx,tM,nM,fM,oM,uM,bM,xt,b5,b5,b5,b5,b5,b5,b5];var F5=[h5,$B,ey,ay,ty,ny,Iy,Zy,qy,Ky,$y,eC,AC,rC,iC,wC,kC,gC,mC,pC,EC,BC,yC,CC,VC,NC,RC,JC,HC,PC,XC,SC,jC,UC,TC,tI,nI,fI,sI,cI,oI,uI,bI,hI,wI,kI,dI,gI,zI,WI,YI,FI,jI,UI,TI,_I,sZ,cZ,oZ,bZ,hZ,wZ,kZ,dZ,vZ,gZ,mZ,pZ,QZ,DZ,zZ,WZ,lG,iG,aH,HJ,XX,dX,ZS,MS,xP,HP,yS,CS,NJ,RJ,XP,KP,eX,oX,Dk,uN,QN,hN,bN,KN,VV,xV,Ci,Qi,_Z,PW,pX,CX,SX,G2,Mq,gw,yp,dB,Rt,vr,gA,rV,nn,Ml,is,as,cs,h5,h5,h5,h5,h5,h5,h5,h5,h5];var M5=[w5,tC,cC,ZC,zC,AI,CI,JI,rZ,ZZ,RZ,rd,YN,cR,rR,qN,GN,LN,nR,fR,Gi,zi,gV,sw,mp,cM,cA,Vf,Fl,ns,fs,os,bs,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5,w5];var V5=[k5,fy,ly,oy,_y,aC,nC,sC,IC,GC,DC,_C,qC,eI,mI,pI,yI,MI,VI,xI,qI,KI,AZ,EZ,BZ,IZ,YZ,FZ,NZ,Gz,Lz,Qz,BH,Qh,Nh,kw,zk,nd,Jd,Sv,op,tF,eV,uV,RV,tJ,lJ,$A,qA,Ii,Zi,Li,Di,Wi,Ft,yf,Bf,Fw,sk,md,Od,Kd,iM,nx,tV,hA,vA,Cf,Zf,Gf,Mf,Nf,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5];var N5=[d5,NE,RE,xE,JE,HE,PE,XE,SE,d5,d5,d5,d5,d5,d5,d5];var R5=[v5,sy,fC,LC,xC,KC,lI,EI,NI,$I,uZ,yZ,MZ,$Z,KZ,qZ,OZ,TZ,UZ,Cy,jZ,SZ,Lk,DN,$N,IK,_$,b$,_4,bA,wA,M$];var x5=[g5,dC,OC,rI,vI,OI,xW,Ep,mA,g5,g5,g5,g5,g5,g5,g5];var J5=[m5,cy,lC,QC,$C,BI,RI,eZ,CZ,VZ,pA,m5,m5,m5,m5,m5];var H5=[p5];return{___errno_location:R2,___muldi3:k6,___udivdi3:p6,___uremdi3:E6,_bitshift64Ashr:B6,_bitshift64Lshr:y6,_bitshift64Shl:C6,_dtextract:Xh,_free:G2,_htons:M4,_i64Add:d6,_i64Subtract:v6,_llvm_bswap_i16:I6,_llvm_bswap_i32:Z6,_malloc:Z2,_memalign:W2,_memcpy:Q6,_memmove:D6,_memset:z6,_realloc:Q2,_saveSetjmp:G6,_sbrk:W6,_testSetjmp:L6,_vizCreateFile:qB,_vizLastErrorMessage:_B,_vizRenderFromString:KB,dynCall_d:Y6,dynCall_dddd:F6,dynCall_di:M6,dynCall_i:V6,dynCall_ii:N6,dynCall_iii:R6,dynCall_iiidd:x6,dynCall_iiii:J6,dynCall_iiiii:H6,dynCall_iiiiii:P6,dynCall_iiiiiii:X6,dynCall_iiiiiiiiiii:S6,dynCall_v:j6,dynCall_vi:U6,dynCall_vii:T6,dynCall_viii:O6,dynCall_viiiddi:_6,dynCall_viiii:q6,dynCall_viiiii:K6,dynCall_viiiiii:$6,dynCall_viiiiiiiii:e5,establishStackSpace:SB,getTempRet0:TB,runPostSets:h6,setTempRet0:UB,setThrew:jB,stackAlloc:HB,stackRestore:XB,stackSave:PB}}(A.asmGlobalArg,A.asmLibraryArg,N),dr=(A.___errno_location=kr.___errno_location,A.___muldi3=kr.___muldi3,A.___udivdi3=kr.___udivdi3,A.___uremdi3=kr.___uremdi3,A._bitshift64Ashr=kr._bitshift64Ashr,A._bitshift64Lshr=kr._bitshift64Lshr,A._bitshift64Shl=kr._bitshift64Shl,A._dtextract=kr._dtextract,A._free=kr._free),vr=(A._htons=kr._htons,A._i64Add=kr._i64Add,A._i64Subtract=kr._i64Subtract,A._llvm_bswap_i16=kr._llvm_bswap_i16,A._llvm_bswap_i32=kr._llvm_bswap_i32,A._malloc=kr._malloc),gr=A._memalign=kr._memalign,mr=(A._memcpy=kr._memcpy,A._memmove=kr._memmove,A._memset=kr._memset),pr=(A._realloc=kr._realloc,A._saveSetjmp=kr._saveSetjmp,A._sbrk=kr._sbrk,A._testSetjmp=kr._testSetjmp,A._vizCreateFile=kr._vizCreateFile,A._vizLastErrorMessage=kr._vizLastErrorMessage,A._vizRenderFromString=kr._vizRenderFromString,A.establishStackSpace=kr.establishStackSpace,A.getTempRet0=kr.getTempRet0,A.runPostSets=kr.runPostSets,A.setTempRet0=kr.setTempRet0,A.setThrew=kr.setThrew,A.stackAlloc=kr.stackAlloc),Er=A.stackRestore=kr.stackRestore,Br=A.stackSave=kr.stackSave;if(A.dynCall_d=kr.dynCall_d,A.dynCall_dddd=kr.dynCall_dddd,A.dynCall_di=kr.dynCall_di,A.dynCall_i=kr.dynCall_i,A.dynCall_ii=kr.dynCall_ii,A.dynCall_iii=kr.dynCall_iii,A.dynCall_iiidd=kr.dynCall_iiidd,A.dynCall_iiii=kr.dynCall_iiii,A.dynCall_iiiii=kr.dynCall_iiiii,A.dynCall_iiiiii=kr.dynCall_iiiiii,A.dynCall_iiiiiii=kr.dynCall_iiiiiii,A.dynCall_iiiiiiiiiii=kr.dynCall_iiiiiiiiiii,A.dynCall_v=kr.dynCall_v,A.dynCall_vi=kr.dynCall_vi,A.dynCall_vii=kr.dynCall_vii,A.dynCall_viii=kr.dynCall_viii,A.dynCall_viiiddi=kr.dynCall_viiiddi,A.dynCall_viiii=kr.dynCall_viiii,A.dynCall_viiiii=kr.dynCall_viiiii,A.dynCall_viiiiii=kr.dynCall_viiiiii,A.dynCall_viiiiiiiii=kr.dynCall_viiiiiiiii,A.asm=kr,A.ccall=E,A.Pointer_stringify=Z,A.UTF8ToString=Q,ze)if(Ye(ze)||("function"==typeof A.locateFile?ze=A.locateFile(ze):A.memoryInitializerPrefixURL&&(ze=A.memoryInitializerPrefixURL+ze)),s||c){var yr=A.readBinary(ze);x.set(yr,k)}else{Qe();var Cr=function(e){e.byteLength&&(e=new Uint8Array(e)),x.set(e,k),A.memoryInitializerRequest&&delete A.memoryInitializerRequest.response,De()};function Ir(){A.readAsync(ze,Cr,(function(){throw"could not load memory initializer "+ze}))}var Zr=UA(ze);if(Zr)Cr(Zr.buffer);else if(A.memoryInitializerRequest){function Gr(){var e=A.memoryInitializerRequest,r=e.response;if(200!==e.status&&0!==e.status){var i=UA(A.memoryInitializerRequestURL);if(!i)return console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+e.status+", retrying "+ze),void Ir();r=i.buffer}Cr(r)}A.memoryInitializerRequest.response?setTimeout(Gr,0):A.memoryInitializerRequest.addEventListener("load",Gr)}else Ir()}function Lr(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function Qr(e){function r(){A.calledRun||(A.calledRun=!0,d||(be(),he(),A.onRuntimeInitialized&&A.onRuntimeInitialized(),ke()))}e=e||A.arguments,Ze>0||(ue(),Ze>0||A.calledRun||(A.setStatus?(A.setStatus("Running..."),setTimeout((function(){setTimeout((function(){A.setStatus("")}),1),r()}),1)):r()))}function Dr(e,r){r&&A.noExitRuntime&&0===e||(A.noExitRuntime||(d=!0,T=wr,we(),A.onExit&&A.onExit(e)),s&&process.exit(e),A.quit(e,new Lr(e)))}function zr(e){throw A.onAbort&&A.onAbort(e),void 0!==e?(A.print(e),A.printErr(e),e=JSON.stringify(e)):e="",d=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}if(Lr.prototype=new Error,Lr.prototype.constructor=Lr,Le=function e(){A.calledRun||Qr(),A.calledRun||(Le=e)},A.run=Qr,A.exit=Dr,A.abort=zr,A.preInit)for("function"==typeof A.preInit&&(A.preInit=[A.preInit]);A.preInit.length>0;)A.preInit.pop()();return A.noExitRuntime=!0,Qr(),A}({TOTAL_MEMORY:t});for(f=0;f1?window.devicePixelRatio:1);var i=new Image;try{if("object"==typeof fabric&&fabric.loadSVGFromString)fabric.loadSVGFromString(e,(function(e,a){if(0==e.length){if(void 0!==r)return void r(new Error("Error loading SVG with Fabric"));throw new Error("Error loading SVG with Fabric")}var t=document.createElement("canvas");t.width=a.width,t.height=a.height;var n=new fabric.Canvas(t,{enableRetinaScaling:!1}),f=fabric.util.groupSVGElements(e,a);n.add(f).renderAll(),i.src=n.toDataURL({multiplier:A}),i.width=a.width,i.height=a.height,void 0!==r&&r(null,i)}));else{var a=new Image;a.onload=function(){var e=document.createElement("canvas");e.width=a.width*A,e.height=a.height*A,e.getContext("2d").drawImage(a,0,0,e.width,e.height),i.src=e.toDataURL("image/png"),i.width=a.width,i.height=a.height,void 0!==r&&r(null,i)},a.onerror=function(e){var A;if(A="error"in e?e.error:new Error("Error loading SVG"),void 0===r)throw A;r(A)},a.src="data:image/svg+xml;base64,"+btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(function(e,A){return String.fromCharCode("0x"+A)})))}}catch(e){if(void 0===r)throw e;r(e)}if(void 0===r)return i},i.svgXmlToPngBase64=function(e,A,r){i.svgXmlToPngImageElement(e,A,(function(e,A){e?r(e):r(null,A.src.slice("data:image/png;base64,".length))}))},e.exports=i}()},6417:e=>{"use strict";e.exports=require("crypto")},5747:e=>{"use strict";e.exports=require("fs")},5622:e=>{"use strict";e.exports=require("path")}},A={};function r(i){if(A[i])return A[i].exports;var a=A[i]={id:i,loaded:!1,exports:{}};return e[i].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}return r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r(8138)})(); \ No newline at end of file diff --git a/resources/fsm/utils/tree-sitter.js b/resources/fsm/utils/tree-sitter.js new file mode 100644 index 0000000..e433281 --- /dev/null +++ b/resources/fsm/utils/tree-sitter.js @@ -0,0 +1 @@ +var Module=void 0!==Module?Module:{};!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():window.TreeSitter=t()}(0,function(){var e,t={};for(e in Module)Module.hasOwnProperty(e)&&(t[e]=Module[e]);var n,r,o=[],s="./this.program",i=function(e,t){throw t},a=!1,_=!1;a="object"==typeof window,_="function"==typeof importScripts,n="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!a&&!n&&!_;var u,l,d,c,f="";n?(f=_?require("path").dirname(f)+"/":__dirname+"/",u=function(e,t){return d||(d=require("fs")),c||(c=require("path")),e=c.normalize(e),d.readFileSync(e,t?null:"utf8")},l=function(e){var t=u(e,!0);return t.buffer||(t=new Uint8Array(t)),O(t.buffer),t},process.argv.length>1&&(s=process.argv[1].replace(/\\/g,"/")),o=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(e){if(!(e instanceof rt))throw e}),process.on("unhandledRejection",we),i=function(e){process.exit(e)},Module.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(u=function(e){return read(e)}),l=function(e){var t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(O("object"==typeof(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?o=scriptArgs:void 0!==arguments&&(o=arguments),"function"==typeof quit&&(i=function(e){quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(a||_)&&(_?f=self.location.href:document.currentScript&&(f=document.currentScript.src),f=0!==f.indexOf("blob:")?f.substr(0,f.lastIndexOf("/")+1):"",u=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},_&&(l=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)});var m=Module.print||console.log.bind(console),p=Module.printErr||console.warn.bind(console);for(e in t)t.hasOwnProperty(e)&&(Module[e]=t[e]);t=null,Module.arguments&&(o=Module.arguments),Module.thisProgram&&(s=Module.thisProgram),Module.quit&&(i=Module.quit);var h=16;function g(e){var t=Q[te>>2],n=t+e+15&-16;return Q[te>>2]=n,t}function y(e,t){return t||(t=h),Math.ceil(e/t)*t}function w(e){switch(e){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===e[e.length-1])return 4;if("i"===e[0]){var t=Number(e.substr(1));return O(t%8==0,"getNativeTypeSize invalid bits "+t+", type "+e),t/8}return 0}}var M={"f64-rem":function(e,t){return e%t},debugger:function(){}},b={nextHandle:1,loadedLibs:{"-1":{refcount:1/0,name:"__self__",module:Module,global:!0}},loadedLibNames:{__self__:-1}};function E(e,t){t=t||{global:!0,nodelete:!0};var n,r=b.loadedLibNames[e];if(r)return n=b.loadedLibs[r],t.global&&!n.global&&(n.global=!0,"loading"!==n.module&&a(n.module)),t.nodelete&&n.refcount!==1/0&&(n.refcount=1/0),n.refcount++,t.loadAsync?Promise.resolve(r):r;function o(e){if(t.fs){var n=t.fs.readFile(e,{encoding:"binary"});return n instanceof Uint8Array||(n=new Uint8Array(lib_data)),t.loadAsync?Promise.resolve(n):n}return t.loadAsync?(r=e,fetch(r,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load binary file at '"+r+"'";return e.arrayBuffer()}).then(function(e){return new Uint8Array(e)})):l(e);var r}function s(e){return I(e,t)}function i(){if(void 0!==Module.preloadedWasm&&void 0!==Module.preloadedWasm[e]){var n=Module.preloadedWasm[e];return t.loadAsync?Promise.resolve(n):n}return t.loadAsync?o(e).then(function(e){return s(e)}):s(o(e))}function a(e){for(var t in e)if(e.hasOwnProperty(t)){var n=t;"_"===t[0]&&(Module.hasOwnProperty(n)||(Module[n]=e[t]))}}function _(e){n.global&&a(e),n.module=e}return r=b.nextHandle++,n={refcount:t.nodelete?1/0:1,name:e,module:"loading",global:t.global},b.loadedLibNames[e]=r,b.loadedLibs[r]=n,t.loadAsync?i().then(function(e){return _(e),r}):(_(i()),r)}function v(e,t,n,r){var o={};for(var s in e){var i=e[s];"object"==typeof i&&(i=i.value),"number"==typeof i&&(i+=t),o[s]=i,r&&(r[s]=i)}return o}function I(e,t){O(1836278016==new Uint32Array(new Uint8Array(e.subarray(0,24)).buffer)[0],"need to see wasm magic number"),O(0===e[8],"need the dylink section to be first");var n=9;function r(){for(var t=0,r=1;;){var o=e[n++];if(t+=(127&o)*r,r*=128,!(128&o))break}return t}r();O(6===e[n]),O(e[++n]==="d".charCodeAt(0)),O(e[++n]==="y".charCodeAt(0)),O(e[++n]==="l".charCodeAt(0)),O(e[++n]==="i".charCodeAt(0)),O(e[++n]==="n".charCodeAt(0)),O(e[++n]==="k".charCodeAt(0)),n++;for(var o=r(),s=r(),i=r(),a=r(),_=r(),u=[],l=0;l<_;++l){var d=r(),c=e.subarray(n,n+d);n+=d;var f=j(c,0);u.push(f)}function m(){s=Math.pow(2,s),a=Math.pow(2,a),s=Math.max(s,h);var n=y(Z(o+s),s),r=Ge,_=F,u=_.length,l=_;_.grow(i),O(_===l);for(var d=n;d=0,a=0;return e[t]=function(){if(!a){var e=f(r,0,i);a=C(e,s)}return a}}return t.startsWith("invoke_")?e[t]=invoke_X:e[t]=function(){return f(t).apply(null,arguments)}}}),g={global:{NaN:NaN,Infinity:1/0},"global.Math":Math,env:p,wasi_snapshot_preview1:p,asm2wasm:M};function w(e,t){var r=v(e.exports,n,0,t),o=r.__post_instantiate;return o&&(_e?o():se.push(o)),r}return t.loadAsync?WebAssembly.instantiate(e,g).then(function(e){return w(e.instance,c)}):w(new WebAssembly.Instance(new WebAssembly.Module(e),g),c)}return t.loadAsync?Promise.all(u.map(function(e){return E(e,t)})).then(function(){return m()}):(u.forEach(function(e){E(e,t)}),m())}Module.loadWebAssemblyModule=I,Module.registerFunctions=function(e,t){e.forEach(function(e){Module["FUNCTION_TABLE_"+e]||(Module["FUNCTION_TABLE_"+e]=[])});var n=alignFunctionTables(),r=alignFunctionTables(t),o=n+r;e.forEach(function(e){var r=t["FUNCTION_TABLE_"+e],s=Module["FUNCTION_TABLE_"+e];O(r!==s),O(s.length===n);for(var i=0;i>0]=t;break;case"i16":V[e>>1]=t;break;case"i32":Q[e>>2]=t;break;case"i64":Ae=[t>>>0,(Se=t,+le(Se)>=1?Se>0?(0|fe(+ce(Se/4294967296),4294967295))>>>0:~~+de((Se-+(~~Se>>>0))/4294967296)>>>0:0)],Q[e>>2]=Ae[0],Q[e+4>>2]=Ae[1];break;case"float":Y[e>>2]=t;break;case"double":J[e>>3]=t;break;default:we("invalid type for setValue: "+n)}}function L(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return G[e>>0];case"i16":return V[e>>1];case"i32":case"i64":return Q[e>>2];case"float":return Y[e>>2];case"double":return J[e>>3];default:we("invalid type for getValue: "+t)}return null}T=y(T,16),Module.wasmBinary&&(x=Module.wasmBinary),Module.noExitRuntime&&(P=Module.noExitRuntime),"object"!=typeof WebAssembly&&p("no native wasm support detected");var F=new WebAssembly.Table({initial:16,element:"anyfunc"}),W=!1;function O(e,t){e||we("Assertion failed: "+t)}var $=3;function Z(e){return _e?Ye(e):g(e)}var U="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function j(e,t,n){for(var r=t+n,o=t;e[o]&&!(o>=r);)++o;if(o-t>16&&e.subarray&&U)return U.decode(e.subarray(t,o));for(var s="";t>10,56320|1023&u)}}else s+=String.fromCharCode((31&i)<<6|a)}else s+=String.fromCharCode(i)}return s}function D(e,t){return e?j(X,e,t):""}function B(e,t,n,r){if(!(r>0))return 0;for(var o=n,s=n+r-1,i=0;i=55296&&a<=57343)a=65536+((1023&a)<<10)|1023&e.charCodeAt(++i);if(a<=127){if(n>=s)break;t[n++]=a}else if(a<=2047){if(n+1>=s)break;t[n++]=192|a>>6,t[n++]=128|63&a}else if(a<=65535){if(n+2>=s)break;t[n++]=224|a>>12,t[n++]=128|a>>6&63,t[n++]=128|63&a}else{if(n+3>=s)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}}return t[n]=0,n-o}function H(e){for(var t=0,n=0;n=55296&&r<=57343&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),r<=127?++t:t+=r<=2047?2:r<=65535?3:4}return t}function z(e){var t=H(e)+1,n=Je(t);return B(e,G,n,t),n}var K,G,X,V,Q,Y,J;function ee(e){K=e,Module.HEAP8=G=new Int8Array(e),Module.HEAP16=V=new Int16Array(e),Module.HEAP32=Q=new Int32Array(e),Module.HEAPU8=X=new Uint8Array(e),Module.HEAPU16=new Uint16Array(e),Module.HEAPU32=new Uint32Array(e),Module.HEAPF32=Y=new Float32Array(e),Module.HEAPF64=J=new Float64Array(e)}var te=7856,ne=Module.INITIAL_MEMORY||33554432;function re(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?Module.dynCall_v(n):Module.dynCall_vi(n,t.arg):n(void 0===t.arg?null:t.arg)}else t(Module)}}(k=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:ne/65536,maximum:32768}))&&(K=k.buffer),ne=K.byteLength,ee(K),Q[te>>2]=5250928;var oe=[],se=[],ie=[],ae=[],_e=!1;function ue(e){oe.unshift(e)}var le=Math.abs,de=Math.ceil,ce=Math.floor,fe=Math.min,me=0,pe=null,he=null;function ge(e){me++,Module.monitorRunDependencies&&Module.monitorRunDependencies(me)}function ye(e){if(me--,Module.monitorRunDependencies&&Module.monitorRunDependencies(me),0==me&&(null!==pe&&(clearInterval(pe),pe=null),he)){var t=he;he=null,t()}}function we(e){throw Module.onAbort&&Module.onAbort(e),m(e+=""),p(e),W=!0,1,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(e)}function Me(e,t){return String.prototype.startsWith?e.startsWith(t):0===e.indexOf(t)}Module.preloadedImages={},Module.preloadedAudios={},Module.preloadedWasm={},ue(function(){if(Module.dynamicLibraries&&Module.dynamicLibraries.length>0&&!l)return ge(),void Promise.all(Module.dynamicLibraries.map(function(e){return E(e,{loadAsync:!0,global:!0,nodelete:!0})})).then(function(){ye()});var e;(e=Module.dynamicLibraries)&&e.forEach(function(e){E(e,{global:!0,nodelete:!0})})});var be="data:application/octet-stream;base64,";function Ee(e){return Me(e,be)}var ve="file://";function Ie(e){return Me(e,ve)}var Ne,Se,Ae,Ce="../resources/tree-sitter/tree-sitter.wasm";function xe(){try{if(x)return new Uint8Array(x);if(l)return l(Ce);throw"both async and sync fetching of the wasm failed"}catch(e){we(e)}}Ee(Ce)||(Ne=Ce,Ce=Module.locateFile?Module.locateFile(Ne,f):f+Ne),Module.asm=function(){var e={env:Ge,wasi_snapshot_preview1:Ge,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:M};function t(e,t){var n=e.exports;n=v(n,T),Module.asm=n,ye()}function n(e){t(e.instance)}function r(t){return(x||!a&&!_||"function"!=typeof fetch||Ie(Ce)?new Promise(function(e,t){e(xe())}):fetch(Ce,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+Ce+"'";return e.arrayBuffer()}).catch(function(){return xe()})).then(function(t){return WebAssembly.instantiate(t,e)}).then(t,function(e){p("failed to asynchronously prepare wasm: "+e),we(e)})}if(ge(),Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return p("Module.instantiateWasm callback failed with error: "+e),!1}return function(){if(x||"function"!=typeof WebAssembly.instantiateStreaming||Ee(Ce)||Ie(Ce)||"function"!=typeof fetch)return r(n);fetch(Ce,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,e).then(n,function(e){p("wasm streaming compile failed: "+e),p("falling back to ArrayBuffer instantiation"),r(n)})})}(),{}},se.push({func:function(){Qe()}});var Pe;function ke(){we()}Module._abort=ke,Pe=n?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:"undefined"!=typeof dateNow?dateNow:function(){return performance.now()};var Re=!0;function Te(){return X.length}function qe(e){try{return k.grow(e-K.byteLength+65535>>>16),ee(k.buffer),1}catch(e){}}function Le(e,t,n){if(Et){const e=D(n);Et(e,0!==t)}}var Fe=T;function We(e){return e|=0,mftCall_X(e)}function Oe(e){return e|=0,0|mftCall_i(e)}function $e(e,t){return e|=0,t|=0,0|mftCall_ii(e,0|t)}function Ze(e,t,n,r,o,s,i){return e|=0,t|=0,n=+n,r|=0,o|=0,s|=0,i|=0,0|mftCall_iidiiii(e,0|t,+n,0|r,0|o,0|s,0|i)}function Ue(e,t,n){return e|=0,t|=0,n|=0,0|mftCall_iii(e,0|t,0|n)}function je(e,t,n,r){return e|=0,t|=0,n|=0,r|=0,0|mftCall_iiii(e,0|t,0|n,0|r)}function De(e,t,n,r,o){return e|=0,t|=0,n|=0,r|=0,o|=0,0|mftCall_iiiii(e,0|t,0|n,0|r,0|o)}function Be(e){e|=0,mftCall_v(e)}function He(e,t){e|=0,t|=0,mftCall_vi(e,0|t)}function ze(e,t,n){e|=0,t|=0,n|=0,mftCall_vii(e,0|t,0|n)}function Ke(e,t,n,r){e|=0,t|=0,n|=0,r|=0,mftCall_viii(e,0|t,0|n,0|r)}var Ge={STACKTOP:8048,__memory_base:1024,__table_base:0,_abort:ke,_clock_gettime:function(e,t){var n,r;if(0===e)n=Date.now();else{if(1!==e&&4!==e||!Re)return r=28,Q[Ve()>>2]=r,-1;n=Pe()}return Q[t>>2]=n/1e3|0,Q[t+4>>2]=n%1e3*1e3*1e3|0,0},_emscripten_get_heap_size:Te,_emscripten_memcpy_big:function(e,t,n){X.copyWithin(e,t,t+n)},_emscripten_resize_heap:function(e){e>>>=0;var t=Te();if(e>2147483648)return!1;for(var n,r,o=1;o<=4;o*=2){var s=t*(1+.2/o);if(s=Math.min(s,e+100663296),qe(Math.min(2147483648,((n=Math.max(16777216,e,s))%(r=65536)>0&&(n+=r-n%r),n))))return!0}return!1},_exit:function(e){st(e)},_tree_sitter_parse_callback:function(e,t,n,r,o){var s=bt(t,{row:n,column:r});"string"==typeof s?(q(o,s.length,"i32"),function(e,t,n){if(void 0===n&&(n=2147483647),n<2)return 0;for(var r=(n-=2)<2*e.length?n/2:e.length,o=0;o>1]=s,t+=2}V[t>>1]=0}(s,e,10240)):q(o,0,"i32")},abort:we,fb:0,fp$_tree_sitter_log_callback$viii:function(){if(!Module.fp$_tree_sitter_log_callback$viii){var e=C(Module._tree_sitter_log_callback||Le,"viii");Module.fp$_tree_sitter_log_callback$viii=e}return Module.fp$_tree_sitter_log_callback$viii},gb:Fe,getTempRet0:function(){return R},memory:k,setTempRet0:function(e){R=e},table:F,tempDoublePtr:8032},Xe=Module.asm({},Ge,K);Module.asm=Xe;Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=function(){return Module.asm.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm.apply(null,arguments)},Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=function(){return Module.asm.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv.apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=function(){return Module.asm.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm.apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=function(){return Module.asm.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm.apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=function(){return Module.asm.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm.apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=function(){return Module.asm.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc.apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_=function(){return Module.asm.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_.apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=function(){return Module.asm.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev.apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=function(){return Module.asm.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw.apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=function(){return Module.asm.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev.apply(null,arguments)},Module.__ZdlPv=function(){return Module.asm.__ZdlPv.apply(null,arguments)},Module.__Znwm=function(){return Module.asm.__Znwm.apply(null,arguments)};var Ve=Module.___errno_location=function(){return Module.asm.___errno_location.apply(null,arguments)},Qe=Module.__apply_relocations=function(){return Module.asm.__apply_relocations.apply(null,arguments)},Ye=(Module._calloc=function(){return Module.asm._calloc.apply(null,arguments)},Module._free=function(){return Module.asm._free.apply(null,arguments)},Module._iswalnum=function(){return Module.asm._iswalnum.apply(null,arguments)},Module._iswalpha=function(){return Module.asm._iswalpha.apply(null,arguments)},Module._iswdigit=function(){return Module.asm._iswdigit.apply(null,arguments)},Module._iswlower=function(){return Module.asm._iswlower.apply(null,arguments)},Module._iswspace=function(){return Module.asm._iswspace.apply(null,arguments)},Module._malloc=function(){return Module.asm._malloc.apply(null,arguments)}),Je=(Module._memchr=function(){return Module.asm._memchr.apply(null,arguments)},Module._memcmp=function(){return Module.asm._memcmp.apply(null,arguments)},Module._memcpy=function(){return Module.asm._memcpy.apply(null,arguments)},Module._strlen=function(){return Module.asm._strlen.apply(null,arguments)},Module._towupper=function(){return Module.asm._towupper.apply(null,arguments)},Module._ts_init=function(){return Module.asm._ts_init.apply(null,arguments)},Module._ts_language_field_count=function(){return Module.asm._ts_language_field_count.apply(null,arguments)},Module._ts_language_field_name_for_id=function(){return Module.asm._ts_language_field_name_for_id.apply(null,arguments)},Module._ts_language_symbol_count=function(){return Module.asm._ts_language_symbol_count.apply(null,arguments)},Module._ts_language_symbol_name=function(){return Module.asm._ts_language_symbol_name.apply(null,arguments)},Module._ts_language_symbol_type=function(){return Module.asm._ts_language_symbol_type.apply(null,arguments)},Module._ts_language_version=function(){return Module.asm._ts_language_version.apply(null,arguments)},Module._ts_node_child_by_field_id_wasm=function(){return Module.asm._ts_node_child_by_field_id_wasm.apply(null,arguments)},Module._ts_node_child_count_wasm=function(){return Module.asm._ts_node_child_count_wasm.apply(null,arguments)},Module._ts_node_child_wasm=function(){return Module.asm._ts_node_child_wasm.apply(null,arguments)},Module._ts_node_children_wasm=function(){return Module.asm._ts_node_children_wasm.apply(null,arguments)},Module._ts_node_descendant_for_index_wasm=function(){return Module.asm._ts_node_descendant_for_index_wasm.apply(null,arguments)},Module._ts_node_descendant_for_position_wasm=function(){return Module.asm._ts_node_descendant_for_position_wasm.apply(null,arguments)},Module._ts_node_descendants_of_type_wasm=function(){return Module.asm._ts_node_descendants_of_type_wasm.apply(null,arguments)},Module._ts_node_end_index_wasm=function(){return Module.asm._ts_node_end_index_wasm.apply(null,arguments)},Module._ts_node_end_point_wasm=function(){return Module.asm._ts_node_end_point_wasm.apply(null,arguments)},Module._ts_node_has_changes_wasm=function(){return Module.asm._ts_node_has_changes_wasm.apply(null,arguments)},Module._ts_node_has_error_wasm=function(){return Module.asm._ts_node_has_error_wasm.apply(null,arguments)},Module._ts_node_is_missing_wasm=function(){return Module.asm._ts_node_is_missing_wasm.apply(null,arguments)},Module._ts_node_is_named_wasm=function(){return Module.asm._ts_node_is_named_wasm.apply(null,arguments)},Module._ts_node_named_child_count_wasm=function(){return Module.asm._ts_node_named_child_count_wasm.apply(null,arguments)},Module._ts_node_named_child_wasm=function(){return Module.asm._ts_node_named_child_wasm.apply(null,arguments)},Module._ts_node_named_children_wasm=function(){return Module.asm._ts_node_named_children_wasm.apply(null,arguments)},Module._ts_node_named_descendant_for_index_wasm=function(){return Module.asm._ts_node_named_descendant_for_index_wasm.apply(null,arguments)},Module._ts_node_named_descendant_for_position_wasm=function(){return Module.asm._ts_node_named_descendant_for_position_wasm.apply(null,arguments)},Module._ts_node_next_named_sibling_wasm=function(){return Module.asm._ts_node_next_named_sibling_wasm.apply(null,arguments)},Module._ts_node_next_sibling_wasm=function(){return Module.asm._ts_node_next_sibling_wasm.apply(null,arguments)},Module._ts_node_parent_wasm=function(){return Module.asm._ts_node_parent_wasm.apply(null,arguments)},Module._ts_node_prev_named_sibling_wasm=function(){return Module.asm._ts_node_prev_named_sibling_wasm.apply(null,arguments)},Module._ts_node_prev_sibling_wasm=function(){return Module.asm._ts_node_prev_sibling_wasm.apply(null,arguments)},Module._ts_node_start_index_wasm=function(){return Module.asm._ts_node_start_index_wasm.apply(null,arguments)},Module._ts_node_start_point_wasm=function(){return Module.asm._ts_node_start_point_wasm.apply(null,arguments)},Module._ts_node_symbol_wasm=function(){return Module.asm._ts_node_symbol_wasm.apply(null,arguments)},Module._ts_node_to_string_wasm=function(){return Module.asm._ts_node_to_string_wasm.apply(null,arguments)},Module._ts_parser_delete=function(){return Module.asm._ts_parser_delete.apply(null,arguments)},Module._ts_parser_enable_logger_wasm=function(){return Module.asm._ts_parser_enable_logger_wasm.apply(null,arguments)},Module._ts_parser_new_wasm=function(){return Module.asm._ts_parser_new_wasm.apply(null,arguments)},Module._ts_parser_parse_wasm=function(){return Module.asm._ts_parser_parse_wasm.apply(null,arguments)},Module._ts_parser_set_language=function(){return Module.asm._ts_parser_set_language.apply(null,arguments)},Module._ts_parser_set_timeout_micros=function(){return Module.asm._ts_parser_set_timeout_micros.apply(null,arguments)},Module._ts_parser_timeout_micros=function(){return Module.asm._ts_parser_timeout_micros.apply(null,arguments)},Module._ts_query_capture_count=function(){return Module.asm._ts_query_capture_count.apply(null,arguments)},Module._ts_query_capture_name_for_id=function(){return Module.asm._ts_query_capture_name_for_id.apply(null,arguments)},Module._ts_query_captures_wasm=function(){return Module.asm._ts_query_captures_wasm.apply(null,arguments)},Module._ts_query_delete=function(){return Module.asm._ts_query_delete.apply(null,arguments)},Module._ts_query_matches_wasm=function(){return Module.asm._ts_query_matches_wasm.apply(null,arguments)},Module._ts_query_new=function(){return Module.asm._ts_query_new.apply(null,arguments)},Module._ts_query_pattern_count=function(){return Module.asm._ts_query_pattern_count.apply(null,arguments)},Module._ts_query_predicates_for_pattern=function(){return Module.asm._ts_query_predicates_for_pattern.apply(null,arguments)},Module._ts_query_string_count=function(){return Module.asm._ts_query_string_count.apply(null,arguments)},Module._ts_query_string_value_for_id=function(){return Module.asm._ts_query_string_value_for_id.apply(null,arguments)},Module._ts_tree_cursor_current_field_id_wasm=function(){return Module.asm._ts_tree_cursor_current_field_id_wasm.apply(null,arguments)},Module._ts_tree_cursor_current_node_id_wasm=function(){return Module.asm._ts_tree_cursor_current_node_id_wasm.apply(null,arguments)},Module._ts_tree_cursor_current_node_is_missing_wasm=function(){return Module.asm._ts_tree_cursor_current_node_is_missing_wasm.apply(null,arguments)},Module._ts_tree_cursor_current_node_is_named_wasm=function(){return Module.asm._ts_tree_cursor_current_node_is_named_wasm.apply(null,arguments)},Module._ts_tree_cursor_current_node_type_id_wasm=function(){return Module.asm._ts_tree_cursor_current_node_type_id_wasm.apply(null,arguments)},Module._ts_tree_cursor_current_node_wasm=function(){return Module.asm._ts_tree_cursor_current_node_wasm.apply(null,arguments)},Module._ts_tree_cursor_delete_wasm=function(){return Module.asm._ts_tree_cursor_delete_wasm.apply(null,arguments)},Module._ts_tree_cursor_end_index_wasm=function(){return Module.asm._ts_tree_cursor_end_index_wasm.apply(null,arguments)},Module._ts_tree_cursor_end_position_wasm=function(){return Module.asm._ts_tree_cursor_end_position_wasm.apply(null,arguments)},Module._ts_tree_cursor_goto_first_child_wasm=function(){return Module.asm._ts_tree_cursor_goto_first_child_wasm.apply(null,arguments)},Module._ts_tree_cursor_goto_next_sibling_wasm=function(){return Module.asm._ts_tree_cursor_goto_next_sibling_wasm.apply(null,arguments)},Module._ts_tree_cursor_goto_parent_wasm=function(){return Module.asm._ts_tree_cursor_goto_parent_wasm.apply(null,arguments)},Module._ts_tree_cursor_new_wasm=function(){return Module.asm._ts_tree_cursor_new_wasm.apply(null,arguments)},Module._ts_tree_cursor_reset_wasm=function(){return Module.asm._ts_tree_cursor_reset_wasm.apply(null,arguments)},Module._ts_tree_cursor_start_index_wasm=function(){return Module.asm._ts_tree_cursor_start_index_wasm.apply(null,arguments)},Module._ts_tree_cursor_start_position_wasm=function(){return Module.asm._ts_tree_cursor_start_position_wasm.apply(null,arguments)},Module._ts_tree_delete=function(){return Module.asm._ts_tree_delete.apply(null,arguments)},Module._ts_tree_edit_wasm=function(){return Module.asm._ts_tree_edit_wasm.apply(null,arguments)},Module._ts_tree_get_changed_ranges_wasm=function(){return Module.asm._ts_tree_get_changed_ranges_wasm.apply(null,arguments)},Module._ts_tree_root_node_wasm=function(){return Module.asm._ts_tree_root_node_wasm.apply(null,arguments)},Module.stackAlloc=function(){return Module.asm.stackAlloc.apply(null,arguments)}),We=Module.dynCall_X=function(){return Module.asm.dynCall_X.apply(null,arguments)},Oe=Module.dynCall_i=function(){return Module.asm.dynCall_i.apply(null,arguments)},$e=Module.dynCall_ii=function(){return Module.asm.dynCall_ii.apply(null,arguments)},Ze=Module.dynCall_iidiiii=function(){return Module.asm.dynCall_iidiiii.apply(null,arguments)},Ue=Module.dynCall_iii=function(){return Module.asm.dynCall_iii.apply(null,arguments)},je=Module.dynCall_iiii=function(){return Module.asm.dynCall_iiii.apply(null,arguments)},De=Module.dynCall_iiiii=function(){return Module.asm.dynCall_iiiii.apply(null,arguments)},Be=Module.dynCall_v=function(){return Module.asm.dynCall_v.apply(null,arguments)},He=Module.dynCall_vi=function(){return Module.asm.dynCall_vi.apply(null,arguments)},ze=Module.dynCall_vii=function(){return Module.asm.dynCall_vii.apply(null,arguments)},Ke=Module.dynCall_viii=function(){return Module.asm.dynCall_viii.apply(null,arguments)};Module.dynCall_X=We,Module.dynCall_i=Oe,Module.dynCall_ii=$e,Module.dynCall_iidiiii=Ze,Module.dynCall_iii=Ue,Module.dynCall_iiii=je,Module.dynCall_iiiii=De,Module.dynCall_v=Be,Module.dynCall_vi=He,Module.dynCall_vii=ze,Module.dynCall_viii=Ke;var et,tt={};for(var nt in tt)Module["_"+nt]=Fe+tt[nt];for(var nt in Module.NAMED_GLOBALS=tt,tt)!function(e){var t=Module["_"+e];Module["g$_"+e]=function(){return t}}(nt);function rt(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_,Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev,Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev,Module.asm=Xe,Module.allocate=function(e,t,n,r){var o,s;"number"==typeof e?(o=!0,s=e):(o=!1,s=e.length);var i,a="string"==typeof t?t:null;if(i=n==$?r:[Ye,Je,g][n](Math.max(s,a?1:t.length)),o){var _;for(r=i,O(0==(3&i)),_=i+(-4&s);r<_;r+=4)Q[r>>2]=0;for(_=i+s;r<_;)G[r++>>0]=0;return i}if("i8"===a)return e.subarray||e.slice?X.set(e,i):X.set(new Uint8Array(e),i),i;for(var u,l,d,c=0;c>2]=z(s);for(var o=1;o>2)+o]=z(e[o-1]);Q[(r>>2)+n]=0;try{st(t(n,r),!0)}catch(e){if(e instanceof rt)return;if("unwind"==e)return void(P=!0);var a=e;e&&"object"==typeof e&&e.stack&&(a=[e,e.stack]),p("exception thrown: "+a),i(1,e)}finally{!0}}}(e),function(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)e=Module.postRun.shift(),ae.unshift(e);var e;re(ae)}()))}e=e||o,me>0||(!function(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)ue(Module.preRun.shift());re(oe)}(),me>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),t()},1)):t()))}function st(e,t){t&&P&&0===e||(P||(W=!0,e,!0,Module.onExit&&Module.onExit(e)),i(e,new rt(e)))}if(he=function e(){et||ot(),et||(he=e)},Module.run=ot,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var it=!0;Module.noInitialRun&&(it=!1),P=!0,ot();const at=Module,_t={},ut=4,lt=5*ut,dt=2*ut,ct=2*ut+2*dt,ft={row:0,column:0},mt=/[\w-.]*/g,pt=1,ht=2,gt=/^_?tree_sitter_\w+/;var yt,wt,Mt,bt,Et,vt=new Promise(e=>{Module.onRuntimeInitialized=e}).then(()=>{Mt=at._ts_init(),yt=L(Mt,"i32"),wt=L(Mt+ut,"i32")});class Parser{static init(){return vt}constructor(){if(null==Mt)throw new Error("You must first call Parser.init() and wait for it to resolve.");at._ts_parser_new_wasm(),this[0]=L(Mt,"i32"),this[1]=L(Mt+ut,"i32")}delete(){at._ts_parser_delete(this[0]),at._free(this[1]),this[0]=0,this[1]=0}setLanguage(e){let t;if(e){if(e.constructor!==Language)throw new Error("Argument must be a Language");{t=e[0];const n=at._ts_language_version(t);if(ne.slice(t,r));else{if("function"!=typeof e)throw new Error("Argument must be a string or a function");bt=e}this.logCallback?(Et=this.logCallback,at._ts_parser_enable_logger_wasm(this[0],1)):(Et=null,at._ts_parser_enable_logger_wasm(this[0],0));let r=0,o=0;if(n&&n.includedRanges){r=n.includedRanges.length;let e=o=at._calloc(r,ct);for(let t=0;t0){let e=n;for(let n=0;n0){let n=t;for(let t=0;t0){let n=t;for(let t=0;t0){let e=a;for(let t=0;t>0];if(!n)return t;t+=String.fromCharCode(n)}}(e);return at._free(e),t}}class TreeCursor{constructor(e,t){St(e),this.tree=t,kt(this)}delete(){Pt(this),at._ts_tree_cursor_delete_wasm(this.tree[0]),this[0]=this[1]=this[2]=0}reset(e){Ct(e),Pt(this,Mt+lt),at._ts_tree_cursor_reset_wasm(this.tree[0]),kt(this)}get nodeType(){return this.tree.language.types[this.nodeTypeId]||"ERROR"}get nodeTypeId(){return Pt(this),at._ts_tree_cursor_current_node_type_id_wasm(this.tree[0])}get nodeId(){return Pt(this),at._ts_tree_cursor_current_node_id_wasm(this.tree[0])}get nodeIsNamed(){return Pt(this),1===at._ts_tree_cursor_current_node_is_named_wasm(this.tree[0])}get nodeIsMissing(){return Pt(this),1===at._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0])}get nodeText(){Pt(this);const e=at._ts_tree_cursor_start_index_wasm(this.tree[0]),t=at._ts_tree_cursor_end_index_wasm(this.tree[0]);return It(this.tree,e,t)}get startPosition(){return Pt(this),at._ts_tree_cursor_start_position_wasm(this.tree[0]),Tt(Mt)}get endPosition(){return Pt(this),at._ts_tree_cursor_end_position_wasm(this.tree[0]),Tt(Mt)}get startIndex(){return Pt(this),at._ts_tree_cursor_start_index_wasm(this.tree[0])}get endIndex(){return Pt(this),at._ts_tree_cursor_end_index_wasm(this.tree[0])}currentNode(){return Pt(this),at._ts_tree_cursor_current_node_wasm(this.tree[0]),xt(this.tree)}currentFieldId(){return Pt(this),at._ts_tree_cursor_current_field_id_wasm(this.tree[0])}currentFieldName(){return this.tree.language.fields[this.currentFieldId()]}gotoFirstChild(){Pt(this);const e=at._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);return kt(this),1===e}gotoNextSibling(){Pt(this);const e=at._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);return kt(this),1===e}gotoParent(){Pt(this);const e=at._ts_tree_cursor_goto_parent_wasm(this.tree[0]);return kt(this),1===e}}class Language{constructor(e,t){St(e),this[0]=t,this.types=new Array(at._ts_language_symbol_count(this[0]));for(let e=0,t=this.types.length;e0){if("string"!==o[0].type)throw new Error("Predicates must begin with a literal value");const t=o[0].value;let n=!0;switch(t){case"not-eq?":n=!1;case"eq?":if(3!==o.length)throw new Error(`Wrong number of arguments to \`#eq?\` predicate. Expected 2, got ${o.length-1}`);if("capture"!==o[1].type)throw new Error(`First argument of \`#eq?\` predicate must be a capture. Got "${o[1].value}"`);if("capture"===o[2].type){const t=o[1].name,r=o[2].name;f[e].push(function(e){let o,s;for(const n of e)n.name===t&&(o=n.node),n.name===r&&(s=n.node);return o.text===s.text===n})}else{const t=o[1].name,r=o[2].value;f[e].push(function(e){for(const o of e)if(o.name===t)return o.node.text===r===n;return!1})}break;case"match?":if(3!==o.length)throw new Error(`Wrong number of arguments to \`#match?\` predicate. Expected 2, got ${o.length-1}.`);if("capture"!==o[1].type)throw new Error(`First argument of \`#match?\` predicate must be a capture. Got "${o[1].value}".`);if("string"!==o[2].type)throw new Error(`Second argument of \`#match?\` predicate must be a string. Got @${o[2].value}.`);const r=o[1].name,s=new RegExp(o[2].value);f[e].push(function(e){for(const t of e)if(t.name===r)return s.test(t.node.text);return!1});break;case"set!":if(o.length<2||o.length>3)throw new Error(`Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${o.length-1}.`);if(o.some(e=>"string"!==e.type))throw new Error('Arguments to `#set!` predicate must be a strings.".');u[e]||(u[e]={}),u[e][o[1].value]=o[2]?o[2].value:null;break;case"is?":case"is-not?":if(o.length<2||o.length>3)throw new Error(`Wrong number of arguments to \`#${t}\` predicate. Expected 1 or 2. Got ${o.length-1}.`);if(o.some(e=>"string"!==e.type))throw new Error(`Arguments to \`#${t}\` predicate must be a strings.".`);const i="is?"===t?l:d;i[e]||(i[e]={}),i[e][o[1].value]=o[2]?o[2].value:null;break;default:c[e].push({operator:t,operands:o.slice(1)})}o.length=0}}Object.freeze(u[e]),Object.freeze(l[e]),Object.freeze(d[e])}return at._free(n),new Query(_t,r,a,f,c,Object.freeze(u),Object.freeze(l),Object.freeze(d))}static load(e){let t;if("undefined"!=typeof process&&process.versions&&process.versions.node){const n=require("fs");t=Promise.resolve(n.readFileSync(e))}else t=fetch(e).then(e=>e.arrayBuffer().then(t=>{if(e.ok)return new Uint8Array(t);{const n=new TextDecoder("utf-8").decode(t);throw new Error(`Language.load failed with status ${e.status}.\n\n${n}`)}}));return t.then(e=>I(e,{loadAsync:!0})).then(e=>{const t=Object.keys(e),n=t.find(e=>gt.test(e)&&!e.includes("external_scanner_"));n||console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(t,null,2)}`);const r=e[n]();return new Language(_t,r)})}}class Query{constructor(e,t,n,r,o,s,i,a){St(e),this[0]=t,this.captureNames=n,this.textPredicates=r,this.predicates=o,this.setProperties=s,this.assertedProperties=i,this.refutedProperties=a}delete(){at._ts_query_delete(this[0]),this[0]=0}matches(e,t,n){t||(t=ft),n||(n=ft),Ct(e),at._ts_query_matches_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column);const r=L(Mt,"i32"),o=L(Mt+ut,"i32"),s=new Array(r);let i=o;for(let t=0;te(o))){s[t]={pattern:n,captures:o};const e=this.setProperties[n];e&&(s[t].setProperties=e);const r=this.assertedProperties[n];r&&(s[t].assertedProperties=r);const i=this.refutedProperties[n];i&&(s[t].refutedProperties=i)}}return at._free(o),s}captures(e,t,n){t||(t=ft),n||(n=ft),Ct(e),at._ts_query_captures_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column);const r=L(Mt,"i32"),o=L(Mt+ut,"i32"),s=[],i=[];let a=o;for(let t=0;te(i))){const e=i[r],n=this.setProperties[t];n&&(e.setProperties=n);const o=this.assertedProperties[t];o&&(e.assertedProperties=o);const a=this.refutedProperties[t];a&&(e.refutedProperties=a),s.push(e)}}return at._free(o),s}predicatesForPattern(e){return this.predicates[e]}}function It(e,t,n){const r=n-t;let o=e.textCallback(t,null,n);for(t+=o.length;t0))break;t+=r.length,o+=r}return t>n&&(o=o.slice(0,r)),o}function Nt(e,t,n,r){for(let o=0,s=r.length;o { + const message = event.data; // The JSON data our extension sen + switch (message.command) { + case 'update': + update_graph(message.svg, message.stms); + break; + case 'clear': + clear(); + break; + } +}); + +let graph = []; +let div = []; +let stms = []; + +function update_graph(svgs, stms_i) { + stms = stms_i; + const el = document.querySelector('body'); + // get scroll position in px + let last_scroll_left = el.scrollLeft; + let last_scroll_top = el.scrollTop; + + let message = document.getElementById("message"); + message.innerHTML = `#State machines ${svgs.length}`; + + delete_graph(); + if (svgs === undefined) { + return; + } + for (let i = 0; i < svgs.length; ++i) { + create_graph(svgs[i].svg, `svg_${i}`, i); + } + + // set scroll position in px + el.scrollLeft = last_scroll_left; + el.scrollTop = last_scroll_top; +} + +function create_graph(svg, name, index) { + let embed = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + embed.setAttribute('style', 'width: 100%; height: 720px;'); + embed.setAttribute('type', 'image/svg+xml'); + embed.innerHTML = svg; + embed.id = name; + + //Add div + var elem = document.createElement('div'); + elem.style.width = "100%"; + elem.style.heigh = "500px"; + elem.style.border = "1px solid black"; + div.push(elem); + + document.body.appendChild(elem); + + //Add svg + elem.appendChild(embed); + + let pan_zoom = svgPanZoom(`#${name}`, pan_config); + pan_zoom.center(); + pan_zoom.resize(); + + let countries = embed.childNodes; + for (let i = 0; i < countries.length; i++) { + countries[i].addEventListener('click', e => { + let parent_target = e.target.parentNode; + let childs = parent_target.childNodes; + for (let i = 0; i < childs.length; ++i) { + let child = childs[i]; + if (child.tagName === 'title') { + let state_name = child.textContent; + let state_machine_index_i = index; + for (let j = 0; j < childs.length; ++j) { + let child_0 = childs[j]; + if (child_0.tagName === 'polygon' && check_state(state_machine_index_i, state_name) === true) { + uncheck_all(); + child_0.style = "fill:#d0fdf7"; + go_to_code_state(state_machine_index_i, state_name); + } + } + } + } + }); + + countries[i].addEventListener('click', e => { + let state_machine_index_i = index; + let parent_target = e.target.parentNode; + let childs = parent_target.childNodes; + for (let i = 0; i < childs.length; ++i) { + let child = childs[i]; + let transtion = child.textContent.split('->'); + + if (child.tagName === 'title' && transtion.length === 2) { + let text_count = 0; + let condition = ''; + let child_match; + let child_match_0; + for (let j = 0; j < childs.length; ++j) { + let child_0 = childs[j]; + if (child_0.tagName === 'text') { + if (text_count === 0) { + condition = child_0.textContent; + } + else { + condition += '\n' + child_0.textContent; + } + text_count += 1; + } + else if (child_0.tagName === 'polygon') { + child_match = child_0; + } + else if (child_0.tagName === 'path') { + child_match_0 = child_0; + } + } + if (text_count >= 0) { + uncheck_all(); + child_match.style = "fill:#0024b9;stroke:#0024b9"; + child_match_0.style = "stroke:#0024b9"; + go_to_condition(state_machine_index_i, transtion, condition); + } + } + } + }); + + } + graph.push(embed); + document.body.contentEditable = false; +} + +function uncheck_all() { + for (let i = 0; i < graph.length; i++) { + search_in_tree(graph[i], 'polygon'); + search_in_tree(graph[i], 'path'); + } +} + +function check_state(stm_index, state) { + let states = stms[stm_index].states; + for (let i = 0; i < states.length; ++i) { + if (states[i].name.replace(/\"/g, '').replace(/\'/g, '') === state) { + return true; + } + } + return false; +} + + +function search_in_tree(element, matchingTitle) { + let match = undefined; + function recursive_searchTree(element, matchingTitle) { + let type = element.tagName; + if (type === matchingTitle) { + if (element.style !== undefined && element.style.fill === 'rgb(208, 253, 247)') { + element.style = "fill:transparent"; + } + else if (element.style !== undefined && element.style.fill === 'rgb(0, 36, 185)' + && element.style.stroke === 'rgb(0, 36, 185)') { + element.style = "fill:#000000;stroke:#000000"; + } + else if (element.style !== undefined && element.style.stroke === 'rgb(0, 36, 185)') { + element.style = "fill:none;stroke:#000000"; + } + match = element; + } else if (element !== null) { + let i; + let result = null; + let childs = element.childNodes; + for (i = 0; result === null && i < childs.length; i++) { + result = recursive_searchTree(childs[i], matchingTitle); + if (result !== null) { + break; + } + } + return result; + } + return null; + } + recursive_searchTree(element, matchingTitle); + return match; +} + + +function go_to_code_state(stm_index, state) { + vscode.postMessage({ + command: 'go_to_state', + stm_index: stm_index, + state: state + }); +} + + +function go_to_condition(stm_index, transition, condition) { + vscode.postMessage({ + command: 'go_to_condition', + stm_index: stm_index, + transition: transition, + condition: condition + }); +} + +function delete_graph() { + if (graph === undefined) { + return; + } + for (let i = 0; i < graph.length; ++i) { + svgPanZoom(graph[i]).destroy(); + if (div[i].parentNode !== null) { + div[i].parentNode.removeChild(div[i]); + } + } +} + +let pan_config = { + zoomEnabled: true, + controlIconsEnabled: true, + fit: true, + center: true, +}; + +document.getElementById("export-as-svg").onclick = () => { + export_message("svg"); +}; + +function export_message(message) { + vscode.postMessage({ + command: 'export', + text: message + }); +} \ No newline at end of file diff --git a/resources/fsm/view/fsm_viewer.html b/resources/fsm/view/fsm_viewer.html new file mode 100644 index 0000000..f6bfb4f --- /dev/null +++ b/resources/fsm/view/fsm_viewer.html @@ -0,0 +1,38 @@ + + + + + + + Dependencies viewer + + + + + +
+ + + + +
+
+ +
+
+ +
+
+
+
+

+
+
+
+
+ + + \ No newline at end of file diff --git a/resources/hdlParser/.gitignore b/resources/hdlParser/.gitignore new file mode 100644 index 0000000..6a8468e --- /dev/null +++ b/resources/hdlParser/.gitignore @@ -0,0 +1,2 @@ +parser.js +parser.wasm \ No newline at end of file diff --git a/resources/hdlParser/index.d.ts b/resources/hdlParser/index.d.ts new file mode 100644 index 0000000..25866e8 --- /dev/null +++ b/resources/hdlParser/index.d.ts @@ -0,0 +1,30 @@ +import type { RawHdlModule, Macro, RawSymbol, Error } from '../../src/hdlParser/common'; +import type { HdlLangID } from '../../src/global/enum'; + +type AbsPath = string; +type RelPath = string; +type Path = AbsPath | RelPath; + + +export const extensionUrl: string; + +interface Fast { + content: RawHdlModule[] + languageId: string + macro: Macro +} + +interface All { + content: RawSymbol[] + languageId: HdlLangID + macro: Macro + error: Error[] +} + +export function callParser(path: AbsPath, func: number): Promise; +export function vlogFast(path: AbsPath): Promise; +export function vlogAll(path: AbsPath): Promise; +export function vhdlFast(path: AbsPath): Promise; +export function vhdlAll(path: AbsPath): Promise; +export function svFast(path: AbsPath): Promise; +export function svAll(path: AbsPath): Promise; \ No newline at end of file diff --git a/resources/hdlParser/index.js b/resources/hdlParser/index.js new file mode 100644 index 0000000..93f9bf3 --- /dev/null +++ b/resources/hdlParser/index.js @@ -0,0 +1,112 @@ +const vscode = require('vscode'); + +const fs = require('fs'); + +const hdlParser = require('./parser'); +const { exit } = require('process'); + +const githubIssueUrl = 'https://github.com/Digital-EDA/Digital-IDE/issues'; +const extensionUrl = 'https://github.com/Digital-EDA/Digital-IDE'; + +const _hdlParser = { + module: null, + tempPath: '/home/hdl_parser', + + async acquire() { + const module = this.module; + if (module) { + return module; + } else { + const _m = await hdlParser(); + this.module = _m; + return _m; + } + } +}; + +const debug = { + acquire: 0, + io: 0, + compute: 0 +}; + +async function callParser(path, func) { + const s1 = Date.now(); + const wasmModule = await _hdlParser.acquire(); + debug.acquire += Date.now() - s1; + + const file = _hdlParser.tempPath; + const fileLength = file.length; + + const s2 = Date.now(); + const source = fs.readFileSync(path, 'utf-8') + '\n'; + wasmModule.FS.writeFile(_hdlParser.tempPath, source, { encoding: 'utf8' }); + debug.io += Date.now() - s2; + + try { + const s3 = Date.now(); + + // hdlparser out + const res = wasmModule.ccall('call_parser', 'string', ['string', 'int', 'int'], [file, fileLength, func]); + // console.log(res); + + debug.compute += Date.now() - s3; + console.log(path, debug); + return JSON.parse(res); + } catch (error) { + console.log(`errors happen when call wasm, path: ${path}, errors: ${error}, input params: (${path}, ${func})`); + + const dsaSetting = vscode.workspace.getConfiguration('digital-ide.dont-show-again'); + if (dsaSetting.get('propose.issue', false) === true) { + return undefined; + } + const res = await vscode.window.showErrorMessage( + `Errors happen when parsing ${path}. Error: "${error}". Just propose a valuable issue in our github repo 😊`, + { title: 'Go and Propose!', value: true }, + { title: "Don't Show Again", value: false } + ); + if (res && res.value === true) { + vscode.env.openExternal(vscode.Uri.parse(githubIssueUrl)); + } else if (res && res.value === false) { + dsaSetting.update('propose.issue', true, vscode.ConfigurationTarget.Global); + } + + return undefined; + } +} + + +async function vhdlFast(path) { + return await callParser(path, 1); +} + +async function vhdlAll(path) { + return await callParser(path, 2); +} + +async function svFast(path) { + return await callParser(path, 3); +} + +async function svAll(path) { + return await callParser(path, 4); +} + +async function vlogFast(path) { + return await callParser(path, 5); +} + +async function vlogAll(path) { + return await callParser(path, 6); +} + +module.exports = { + vlogFast, + vlogAll, + vhdlFast, + vhdlAll, + svFast, + svAll, + extensionUrl, + callParser +}; \ No newline at end of file diff --git a/resources/json5/index.d.ts b/resources/json5/index.d.ts new file mode 100644 index 0000000..e5cb067 --- /dev/null +++ b/resources/json5/index.d.ts @@ -0,0 +1,7 @@ +// It seems that webpack cannot package the json5 correctly + +declare module JSON5 { + export function parse(text: string): any; +} + +export = JSON5; \ No newline at end of file diff --git a/resources/json5/index.js b/resources/json5/index.js new file mode 100644 index 0000000..404cc92 --- /dev/null +++ b/resources/json5/index.js @@ -0,0 +1 @@ +!function(u,D){"object"==typeof exports&&"undefined"!=typeof module?module.exports=D():"function"==typeof define&&define.amd?define(D):u.JSON5=D()}(this,function(){"use strict";var u,D,e=(function(u,D){Object.defineProperty(D,"__esModule",{value:!0});D.Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,D.ID_Start=/[\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\u16EE-\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\u2160-\u2188\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-\u3007\u3021-\u3029\u3031-\u3035\u3038-\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-\uA6EF\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]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,D.ID_Continue=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\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\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\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\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\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-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/}(u={exports:{}},u.exports),u.exports);(D=e)&&D.__esModule&&Object.prototype.hasOwnProperty.call(D,"default")&&D.default;var F=e.Space_Separator,C=e.ID_Start,A=e.ID_Continue;function r(u){return u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||C.test(u)}function t(u){return u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||A.test(u)}function n(u){return/[0-9]/.test(u)}function E(u){return/[0-9A-Fa-f]/.test(u)}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(u){return typeof u}:function(u){return u&&"function"==typeof Symbol&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},a=void 0,o=void 0,B=void 0,c=void 0,s=void 0,f=void 0,l=void 0,d=void 0,v=void 0;var m=void 0,p=void 0,y=void 0,h=void 0,b=void 0;function w(){for(m="default",p="",y=!1,h=1;;){b=g();var u=x[m]();if(u)return u}}function g(){if(a[c])return String.fromCodePoint(a.codePointAt(c))}function S(){var u=g();return"\n"===u?(s++,f=0):u?f+=u.length:f++,u&&(c+=u.length),u}var x={default:function(){switch(b){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void S();case"/":return S(),void(m="comment");case void 0:return S(),N("eof")}if(!function(u){return F.test(u)}(b))return x[o]();S()},comment:function(){switch(b){case"*":return S(),void(m="multiLineComment");case"/":return S(),void(m="singleLineComment")}throw V(S())},multiLineComment:function(){switch(b){case"*":return S(),void(m="multiLineCommentAsterisk");case void 0:throw V(S())}S()},multiLineCommentAsterisk:function(){switch(b){case"*":return void S();case"/":return S(),void(m="default");case void 0:throw V(S())}S(),m="multiLineComment"},singleLineComment:function(){switch(b){case"\n":case"\r":case"\u2028":case"\u2029":return S(),void(m="default");case void 0:return S(),N("eof")}S()},value:function(){switch(b){case"{":case"[":return N("punctuator",S());case"n":return S(),P("ull"),N("null",null);case"t":return S(),P("rue"),N("boolean",!0);case"f":return S(),P("alse"),N("boolean",!1);case"-":case"+":return"-"===S()&&(h=-1),void(m="sign");case".":return p=S(),void(m="decimalPointLeading");case"0":return p=S(),void(m="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return p=S(),void(m="decimalInteger");case"I":return S(),P("nfinity"),N("numeric",1/0);case"N":return S(),P("aN"),N("numeric",NaN);case'"':case"'":return y='"'===S(),p="",void(m="string")}throw V(S())},identifierNameStartEscape:function(){if("u"!==b)throw V(S());S();var u=O();switch(u){case"$":case"_":break;default:if(!r(u))throw L()}p+=u,m="identifierName"},identifierName:function(){switch(b){case"$":case"_":case"‌":case"‍":return void(p+=S());case"\\":return S(),void(m="identifierNameEscape")}if(!t(b))return N("identifier",p);p+=S()},identifierNameEscape:function(){if("u"!==b)throw V(S());S();var u=O();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!t(u))throw L()}p+=u,m="identifierName"},sign:function(){switch(b){case".":return p=S(),void(m="decimalPointLeading");case"0":return p=S(),void(m="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return p=S(),void(m="decimalInteger");case"I":return S(),P("nfinity"),N("numeric",h*(1/0));case"N":return S(),P("aN"),N("numeric",NaN)}throw V(S())},zero:function(){switch(b){case".":return p+=S(),void(m="decimalPoint");case"e":case"E":return p+=S(),void(m="decimalExponent");case"x":case"X":return p+=S(),void(m="hexadecimal")}return N("numeric",0*h)},decimalInteger:function(){switch(b){case".":return p+=S(),void(m="decimalPoint");case"e":case"E":return p+=S(),void(m="decimalExponent")}if(!n(b))return N("numeric",h*Number(p));p+=S()},decimalPointLeading:function(){if(n(b))return p+=S(),void(m="decimalFraction");throw V(S())},decimalPoint:function(){switch(b){case"e":case"E":return p+=S(),void(m="decimalExponent")}return n(b)?(p+=S(),void(m="decimalFraction")):N("numeric",h*Number(p))},decimalFraction:function(){switch(b){case"e":case"E":return p+=S(),void(m="decimalExponent")}if(!n(b))return N("numeric",h*Number(p));p+=S()},decimalExponent:function(){switch(b){case"+":case"-":return p+=S(),void(m="decimalExponentSign")}if(n(b))return p+=S(),void(m="decimalExponentInteger");throw V(S())},decimalExponentSign:function(){if(n(b))return p+=S(),void(m="decimalExponentInteger");throw V(S())},decimalExponentInteger:function(){if(!n(b))return N("numeric",h*Number(p));p+=S()},hexadecimal:function(){if(E(b))return p+=S(),void(m="hexadecimalInteger");throw V(S())},hexadecimalInteger:function(){if(!E(b))return N("numeric",h*Number(p));p+=S()},string:function(){switch(b){case"\\":return S(),void(p+=function(){switch(g()){case"b":return S(),"\b";case"f":return S(),"\f";case"n":return S(),"\n";case"r":return S(),"\r";case"t":return S(),"\t";case"v":return S(),"\v";case"0":if(S(),n(g()))throw V(S());return"\0";case"x":return S(),function(){var u="",D=g();if(!E(D))throw V(S());if(u+=S(),!E(D=g()))throw V(S());return u+=S(),String.fromCodePoint(parseInt(u,16))}();case"u":return S(),O();case"\n":case"\u2028":case"\u2029":return S(),"";case"\r":return S(),"\n"===g()&&S(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw V(S())}return S()}());case'"':return y?(S(),N("string",p)):void(p+=S());case"'":return y?void(p+=S()):(S(),N("string",p));case"\n":case"\r":throw V(S());case"\u2028":case"\u2029":!function(u){console.warn("JSON5: '"+u+"' is not valid ECMAScript; consider escaping")}(b);break;case void 0:throw V(S())}p+=S()},start:function(){switch(b){case"{":case"[":return N("punctuator",S())}m="value"},beforePropertyName:function(){switch(b){case"$":case"_":return p=S(),void(m="identifierName");case"\\":return S(),void(m="identifierNameStartEscape");case"}":return N("punctuator",S());case'"':case"'":return y='"'===S(),void(m="string")}if(r(b))return p+=S(),void(m="identifierName");throw V(S())},afterPropertyName:function(){if(":"===b)return N("punctuator",S());throw V(S())},beforePropertyValue:function(){m="value"},afterPropertyValue:function(){switch(b){case",":case"}":return N("punctuator",S())}throw V(S())},beforeArrayValue:function(){if("]"===b)return N("punctuator",S());m="value"},afterArrayValue:function(){switch(b){case",":case"]":return N("punctuator",S())}throw V(S())},end:function(){throw V(S())}};function N(u,D){return{type:u,value:D,line:s,column:f}}function P(u){var D=!0,e=!1,F=void 0;try{for(var C,A=u[Symbol.iterator]();!(D=(C=A.next()).done);D=!0){var r=C.value;if(g()!==r)throw V(S());S()}}catch(u){e=!0,F=u}finally{try{!D&&A.return&&A.return()}finally{if(e)throw F}}}function O(){for(var u="",D=4;D-- >0;){if(!E(g()))throw V(S());u+=S()}return String.fromCodePoint(parseInt(u,16))}var j={start:function(){if("eof"===l.type)throw J();I()},beforePropertyName:function(){switch(l.type){case"identifier":case"string":return d=l.value,void(o="afterPropertyName");case"punctuator":return void _();case"eof":throw J()}},afterPropertyName:function(){if("eof"===l.type)throw J();o="beforePropertyValue"},beforePropertyValue:function(){if("eof"===l.type)throw J();I()},beforeArrayValue:function(){if("eof"===l.type)throw J();"punctuator"!==l.type||"]"!==l.value?I():_()},afterPropertyValue:function(){if("eof"===l.type)throw J();switch(l.value){case",":return void(o="beforePropertyName");case"}":_()}},afterArrayValue:function(){if("eof"===l.type)throw J();switch(l.value){case",":return void(o="beforeArrayValue");case"]":_()}},end:function(){}};function I(){var u=void 0;switch(l.type){case"punctuator":switch(l.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=l.value}if(void 0===v)v=u;else{var D=B[B.length-1];Array.isArray(D)?D.push(u):Object.defineProperty(D,d,{value:u,writable:!0,enumerable:!0,configurable:!0})}if(null!==u&&"object"===(void 0===u?"undefined":i(u)))B.push(u),o=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{var e=B[B.length-1];o=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}}function _(){B.pop();var u=B[B.length-1];o=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}function V(u){return k(void 0===u?"JSON5: invalid end of input at "+s+":"+f:"JSON5: invalid character '"+function(u){var D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){var e=u.charCodeAt(0).toString(16);return"\\x"+("00"+e).substring(e.length)}return u}(u)+"' at "+s+":"+f)}function J(){return k("JSON5: invalid end of input at "+s+":"+f)}function L(){return k("JSON5: invalid identifier character at "+s+":"+(f-=5))}function k(u){var D=new SyntaxError(u);return D.lineNumber=s,D.columnNumber=f,D}return{parse:function(u,D){a=String(u),o="start",B=[],c=0,s=1,f=0,l=void 0,d=void 0,v=void 0;do{l=w(),j[o]()}while("eof"!==l.type);return"function"==typeof D?function u(D,e,F){var C=D[e];if(null!=C&&"object"===(void 0===C?"undefined":i(C)))if(Array.isArray(C))for(var A=0;A0&&(e=Math.min(10,Math.floor(e)),E=" ".substr(0,e)):"string"==typeof e&&(E=e.substr(0,10)),v("",{"":u});function v(u,D){var e=D[u];switch(null!=e&&("function"==typeof e.toJSON5?e=e.toJSON5(u):"function"==typeof e.toJSON&&(e=e.toJSON(u))),n&&(e=n.call(D,u,e)),e instanceof Number?e=Number(e):e instanceof String?e=String(e):e instanceof Boolean&&(e=e.valueOf()),e){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof e?m(e):"number"==typeof e?String(e):"object"===(void 0===e?"undefined":i(e))?Array.isArray(e)?function(u){if(F.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=E;for(var e=[],A=0;A=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=E;var e=A||Object.keys(u),r=[],t=!0,n=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var B=a.value,c=v(B,u);if(void 0!==c){var s=p(B)+":";""!==E&&(s+=" "),s+=c,r.push(s)}}}catch(u){n=!0,i=u}finally{try{!t&&o.return&&o.return()}finally{if(n)throw i}}var f=void 0;if(0===r.length)f="{}";else{var l=void 0;if(""===E)l=r.join(","),f="{"+l+"}";else{var d=",\n"+C;l=r.join(d),f="{\n"+C+l+",\n"+D+"}"}}return F.pop(),C=D,f}(e):void 0}function m(u){var D={"'":.1,'"':.2},e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},F="",C=!0,A=!1,r=void 0;try{for(var t,n=u[Symbol.iterator]();!(C=(t=n.next()).done);C=!0){var E=t.value;switch(E){case"'":case'"':D[E]++,F+=E;continue}if(e[E])F+=e[E];else if(E<" "){var i=E.charCodeAt(0).toString(16);F+="\\x"+("00"+i).substring(i.length)}else F+=E}}catch(u){A=!0,r=u}finally{try{!C&&n.return&&n.return()}finally{if(A)throw r}}var o=a||Object.keys(D).reduce(function(u,e){return D[u] void); + public load(files: string[]): string; + public synth(options: SynthOptions); + public export(options: ExportOptions): string; + public reset(); + public exit(); + } +} + +export = Netlist; \ No newline at end of file diff --git a/resources/netlist/index.js b/resources/netlist/index.js new file mode 100644 index 0000000..698df11 --- /dev/null +++ b/resources/netlist/index.js @@ -0,0 +1,151 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +const os = require('os'); + +const kernel = require('./utils/kernel'); +const Vrfs = require('./utils/vrfs'); + +class NetlistKernel { + constructor() { + this.kernel = null; + this.vrfs = null; + } + + async launch() { + this.kernel = await kernel(); + this.vrfs = new Vrfs(this.kernel); + this.vrfs.diskMount(); + } + + /** + * @state finish-test + * @descriptionCn 直接执行指令 + * @param {String} command + */ + exec(command) { + this.kernel.ccall('run', '', ['string'], [command]); + } + + /** + * @state finish-test + * @descriptionCn 输出帮助界面 + */ + printHelp() { + this.kernel.TTY.message = ''; + this.exec("help"); + return this.kernel.TTY.message; + } + + /** + * @state finish-test + * @descriptionCn 设置内置log输出的使能 + * @param {Boolean} params (true : 打开内置log输出 | false : 关闭内置log输出) + */ + setInnerOutput(params) { + this.kernel.TTY.innerOutput = params; + } + + /** + * @state finish-test + * @descriptionCn 设置message的回调函数 + * @param {*} callback 对message操作的回调函数 + */ + setMessageCallback(callback) { + this.kernel.TTY.innerOutput = false; + this.kernel.TTY.callbackOutput = true; + this.kernel.TTY.callback = callback; + } + + /** + * @state finish-test + * @descriptionCn 导入文件到工程之中(仅适用于nodefs) 默认支持sv且覆盖 + * @param {Array} files 数组形式输入 输入所需导入工程的文件数组 + * @returns {String} 导入过程中所输出的日志(仅适用与message回调关闭的时候) + */ + load(files) { + this.kernel.TTY.message = ""; + const command = 'read_verilog -sv -formal -overwrite'; + for (let i = 0; i < files.length; i++) { + const file = files[i]; + if (os.platform().toLowerCase() === 'win32') { + // console.log(this.kernel.FS.readdir('/')); + this.exec(`${command} /${file}`); + } else { + this.exec(`${command} /host/${file}`); + } + } + + return this.kernel.TTY.message; + } + + synth(options) { + options.argu = options.argu ? options.argu : ''; + let command = ''; + switch (options.type) { + case 'json': + command = 'write_json'; + break; + case 'verilog': + command = 'write_verilog'; + break; + case 'aiger': + command = 'write_aiger'; + break; + case 'blif': + command = 'write_blif'; + break; + case 'edif': + command = 'write_edif'; + break; + default: break; + } + this.exec(`${command} ${options.argu} /${options.path}`); + } + + /** + * @descriptionCn 以指定的模式导出设计 + * @param {{ + * path : '' // 在虚拟文件系统中存放的路径 + * type : '' // 指定的模式 + * argu : '' // 指定导出的参数 + * }} options + * @returns {String} 设计的内容 + */ + export(options) { + options.path = options.path ? options.path : 'output'; + options.argu = options.argu ? options.argu : ''; + + let command = ''; + switch (options.type) { + case 'json': + command = 'write_json'; + break; + case 'verilog': + command = 'write_verilog'; + break; + case 'aiger': + command = 'write_aiger'; + break; + case 'blif': + command = 'write_blif'; + break; + case 'edif': + command = 'write_edif'; + break; + default: break; + } + this.exec(`${command} ${options.argu} /${options.path}`); + return this.vrfs.readFileToText(options.path); + } + + reset() { + this.exec('design -reset'); + } + + exit() { + this.kernel = null; + this.vrfs = null; + } +} +module.exports = { + NetlistKernel +}; \ No newline at end of file diff --git a/resources/netlist/resources/kernel/kernel.wasm b/resources/netlist/resources/kernel/kernel.wasm new file mode 100644 index 0000000..959e457 Binary files /dev/null and b/resources/netlist/resources/kernel/kernel.wasm differ diff --git a/resources/netlist/resources/kernel/share/abc9_map.v b/resources/netlist/resources/kernel/share/abc9_map.v new file mode 100644 index 0000000..b00e0e6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/abc9_map.v @@ -0,0 +1,27 @@ +`ifdef DFF +(* techmap_celltype = "$_DFF_[PN]_" *) +module $_DFF_x_(input C, D, output Q); + parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx; + parameter _TECHMAP_CELLTYPE_ = ""; + wire D_; + generate if (_TECHMAP_CELLTYPE_ == "$_DFF_N_") begin + if (_TECHMAP_WIREINIT_Q_ === 1'b0) begin + $__DFF_N__$abc9_flop _TECHMAP_REPLACE_ (.C(C), .D(D), .Q(Q), .n1(D_)); + $_DFF_N_ ff (.C(C), .D(D_), .Q(Q)); + end + else + (* abc9_keep *) $_DFF_N_ _TECHMAP_REPLACE_ (.C(C), .D(D), .Q(Q)); + end + else if (_TECHMAP_CELLTYPE_ == "$_DFF_P_") begin + if (_TECHMAP_WIREINIT_Q_ === 1'b0) begin + $__DFF_P__$abc9_flop _TECHMAP_REPLACE_ (.C(C), .D(D), .Q(Q), .n1(D_)); + $_DFF_P_ ff (.C(C), .D(D_), .Q(Q)); + end + else + (* abc9_keep *) $_DFF_P_ _TECHMAP_REPLACE_ (.C(C), .D(D), .Q(Q)); + end + else if (_TECHMAP_CELLTYPE_ != "") + $error("Unrecognised _TECHMAP_CELLTYPE_"); + endgenerate +endmodule +`endif diff --git a/resources/netlist/resources/kernel/share/abc9_model.v b/resources/netlist/resources/kernel/share/abc9_model.v new file mode 100644 index 0000000..570a1ec --- /dev/null +++ b/resources/netlist/resources/kernel/share/abc9_model.v @@ -0,0 +1,29 @@ +(* abc9_box *) +module $__ABC9_DELAY (input I, output O); + parameter DELAY = 0; + specify + (I => O) = DELAY; + endspecify +endmodule + +module $__ABC9_SCC_BREAKER (input [WIDTH-1:0] I, output [WIDTH-1:0] O); +parameter WIDTH = 0; +endmodule + +(* abc9_flop, abc9_box, lib_whitebox *) +module $__DFF_N__$abc9_flop (input C, D, Q, output n1); + assign n1 = D; + specify + $setup(D, posedge C, 0); + (posedge C => (n1:D)) = 0; + endspecify +endmodule + +(* abc9_flop, abc9_box, lib_whitebox *) +module $__DFF_P__$abc9_flop (input C, D, Q, output n1); + assign n1 = D; + specify + $setup(D, posedge C, 0); + (posedge C => (n1:D)) = 0; + endspecify +endmodule diff --git a/resources/netlist/resources/kernel/share/abc9_unmap.v b/resources/netlist/resources/kernel/share/abc9_unmap.v new file mode 100644 index 0000000..b1bc4fb --- /dev/null +++ b/resources/netlist/resources/kernel/share/abc9_unmap.v @@ -0,0 +1,16 @@ +(* techmap_celltype = "$__DFF_N__$abc9_flop $__DFF_P__$abc9_flop" *) +module $__DFF_x__$abc9_flop (input C, D, (* init = 1'b0 *) input Q, output n1); + parameter _TECHMAP_CELLTYPE_ = ""; + generate if (_TECHMAP_CELLTYPE_ == "$__DFF_N__$abc9_flop") + $_DFF_N_ _TECHMAP_REPLACE_ (.C(C), .D(D), .Q(Q)); + else if (_TECHMAP_CELLTYPE_ == "$__DFF_P__$abc9_flop") + $_DFF_P_ _TECHMAP_REPLACE_ (.C(C), .D(D), .Q(Q)); + else if (_TECHMAP_CELLTYPE_ != "") + $error("Unrecognised _TECHMAP_CELLTYPE_"); + endgenerate +endmodule + +module $__ABC9_SCC_BREAKER (input [WIDTH-1:0] I, output [WIDTH-1:0] O); +parameter WIDTH = 0; +assign O = I; +endmodule diff --git a/resources/netlist/resources/kernel/share/achronix/speedster22i/cells_map.v b/resources/netlist/resources/kernel/share/achronix/speedster22i/cells_map.v new file mode 100644 index 0000000..04288ba --- /dev/null +++ b/resources/netlist/resources/kernel/share/achronix/speedster22i/cells_map.v @@ -0,0 +1,73 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +// > c60k28 (Viacheslav, VT) [at] yandex [dot] com +// > Achronix eFPGA technology mapping. User must first simulate the generated \ +// > netlist before going to test it on board/custom chip. + +// > Input/Output buffers < +// Input buffer map +module \$__inpad (input I, output O); + PADIN _TECHMAP_REPLACE_ (.padout(O), .padin(I)); +endmodule +// Output buffer map +module \$__outpad (input I, output O); + PADOUT _TECHMAP_REPLACE_ (.padout(O), .padin(I), .oe(1'b1)); +endmodule +// > end buffers < + +// > Look-Up table < +// > VT: I still think Achronix folks would have chosen a better \ +// > logic architecture. +// LUT Map +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + generate + if (WIDTH == 1) begin + // VT: This is not consistent and ACE will complain: assign Y = ~A[0]; + LUT4 #(.lut_function({4{LUT}})) _TECHMAP_REPLACE_ + (.dout(Y), .din0(A[0]), .din1(1'b0), .din2(1'b0), .din3(1'b0)); + end else + if (WIDTH == 2) begin + LUT4 #(.lut_function({4{LUT}})) _TECHMAP_REPLACE_ + (.dout(Y), .din0(A[0]), .din1(A[1]), .din2(1'b0), .din3(1'b0)); + end else + if(WIDTH == 3) begin + LUT4 #(.lut_function({2{LUT}})) _TECHMAP_REPLACE_ + (.dout(Y), .din0(A[0]), .din1(A[1]), .din2(A[2]), .din3(1'b0)); + end else + if(WIDTH == 4) begin + LUT4 #(.lut_function(LUT)) _TECHMAP_REPLACE_ + (.dout(Y), .din0(A[0]), .din1(A[1]), .din2(A[2]), .din3(A[3])); + end else + wire _TECHMAP_FAIL_ = 1; + endgenerate +endmodule +// > end LUT < + +// > Flops < +// DFF flop +module \$_DFF_P_ (input D, C, output Q); + DFF _TECHMAP_REPLACE_ + (.q(Q), .d(D), .ck(C)); +endmodule + diff --git a/resources/netlist/resources/kernel/share/achronix/speedster22i/cells_sim.v b/resources/netlist/resources/kernel/share/achronix/speedster22i/cells_sim.v new file mode 100644 index 0000000..fc15e09 --- /dev/null +++ b/resources/netlist/resources/kernel/share/achronix/speedster22i/cells_sim.v @@ -0,0 +1,79 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +// > c60k28 (Viacheslav, VT) [at] yandex [dot] com +// > Achronix eFPGA technology sim models. User must first simulate the generated \ +// > netlist before going to test it on board/custom chip. +// > Changelog: 1) Removed unused VCC/GND modules +// > 2) Altera comments here (?). Removed. +// > 3) Reusing LUT sim model, removed wrong wires and parameters. + +module PADIN (output padout, input padin); + assign padout = padin; +endmodule + +module PADOUT (output padout, input padin, input oe); + assign padout = padin; + assign oe = oe; +endmodule + +module LUT4 (output dout, + input din0, din1, din2, din3); + +parameter [15:0] lut_function = 16'hFFFF; +reg combout_rt; +wire dataa_w; +wire datab_w; +wire datac_w; +wire datad_w; + +assign dataa_w = din0; +assign datab_w = din1; +assign datac_w = din2; +assign datad_w = din3; + +function lut_data; +input [15:0] mask; +input dataa, datab, datac, datad; +reg [7:0] s3; +reg [3:0] s2; +reg [1:0] s1; + begin + s3 = datad ? mask[15:8] : mask[7:0]; + s2 = datac ? s3[7:4] : s3[3:0]; + s1 = datab ? s2[3:2] : s2[1:0]; + lut_data = dataa ? s1[1] : s1[0]; + end +endfunction + +always @(dataa_w or datab_w or datac_w or datad_w) begin + combout_rt = lut_data(lut_function, dataa_w, datab_w, + datac_w, datad_w); +end +assign dout = combout_rt & 1'b1; +endmodule + +module DFF (output reg q, + input d, ck); + always @(posedge ck) + q <= d; + +endmodule + + + diff --git a/resources/netlist/resources/kernel/share/adff2dff.v b/resources/netlist/resources/kernel/share/adff2dff.v new file mode 100644 index 0000000..2e4357b --- /dev/null +++ b/resources/netlist/resources/kernel/share/adff2dff.v @@ -0,0 +1,30 @@ +(* techmap_celltype = "$adff" *) +module adff2dff (CLK, ARST, D, Q); + parameter WIDTH = 1; + parameter CLK_POLARITY = 1; + parameter ARST_POLARITY = 1; + parameter ARST_VALUE = 0; + + input CLK, ARST; + (* force_downto *) + input [WIDTH-1:0] D; + (* force_downto *) + output reg [WIDTH-1:0] Q; + (* force_downto *) + reg [WIDTH-1:0] NEXT_Q; + + wire [1023:0] _TECHMAP_DO_ = "proc;;"; + + always @* + if (ARST == ARST_POLARITY) + NEXT_Q <= ARST_VALUE; + else + NEXT_Q <= D; + + if (CLK_POLARITY) + always @(posedge CLK) + Q <= NEXT_Q; + else + always @(negedge CLK) + Q <= NEXT_Q; +endmodule diff --git a/resources/netlist/resources/kernel/share/anlogic/arith_map.v b/resources/netlist/resources/kernel/share/anlogic/arith_map.v new file mode 100644 index 0000000..f0cec49 --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/arith_map.v @@ -0,0 +1,93 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2018 Miodrag Milanovic + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_anlogic_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire CIx; + (* force_downto *) + wire [Y_WIDTH-1:0] COx; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] C = { COx, CIx }; + + wire dummy; + AL_MAP_ADDER #( + .ALUTYPE("ADD_CARRY")) + adder_cin ( + .a(CI), + .b(1'b0), + .c(1'b0), + .o({CIx, dummy}) + ); + + genvar i; + generate for (i = 0; i < Y_WIDTH; i = i + 1) begin: slice + AL_MAP_ADDER #( + .ALUTYPE("ADD") + ) adder_i ( + .a(AA[i]), + .b(BB[i]), + .c(C[i]), + .o({COx[i],Y[i]}) + ); + + wire cout; + AL_MAP_ADDER #( + .ALUTYPE("ADD")) + adder_cout ( + .a(1'b0), + .b(1'b0), + .c(COx[i]), + .o({cout, CO[i]}) + ); + end: slice + endgenerate + + /* End implementation */ + assign X = AA ^ BB; +endmodule diff --git a/resources/netlist/resources/kernel/share/anlogic/brams.txt b/resources/netlist/resources/kernel/share/anlogic/brams.txt new file mode 100644 index 0000000..910cdeb --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/brams.txt @@ -0,0 +1,69 @@ +ram block $__ANLOGIC_BRAM_TDP_ { + abits 13; + widths 1 2 4 9 per_port; + cost 64; + init no_undef; + port srsw "A" "B" { + clock anyedge; + clken; + portoption "WRITEMODE" "NORMAL" { + rdwr no_change; + } + portoption "WRITEMODE" "WRITETHROUGH" { + rdwr new; + } + portoption "WRITEMODE" "READBEFOREWRITE" { + rdwr old; + } + option "RESETMODE" "SYNC" { + rdsrst zero ungated block_wr; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } +} + +ram block $__ANLOGIC_BRAM_SDP_ { + abits 13; + widths 1 2 4 9 18 per_port; + byte 9; + cost 64; + init no_undef; + port sr "R" { + clock anyedge; + clken; + option "RESETMODE" "SYNC" { + rdsrst zero ungated; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } + port sw "W" { + clock anyedge; + clken; + } +} + +ram block $__ANLOGIC_BRAM32K_ { + abits 12; + widths 8 16 per_port; + byte 8; + cost 192; + init no_undef; + port srsw "A" "B" { + clock anyedge; + clken; + portoption "WRITEMODE" "NORMAL" { + rdwr no_change; + } + portoption "WRITEMODE" "WRITETHROUGH" { + rdwr new; + } + # no reset - it doesn't really work without the pipeline + # output registers + } +} diff --git a/resources/netlist/resources/kernel/share/anlogic/brams_map.v b/resources/netlist/resources/kernel/share/anlogic/brams_map.v new file mode 100644 index 0000000..7e2642d --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/brams_map.v @@ -0,0 +1,474 @@ +module $__ANLOGIC_BRAM_TDP_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +parameter PORT_A_WIDTH = 9; +parameter PORT_A_CLK_POL = 1; +parameter PORT_A_OPTION_WRITEMODE = "NORMAL"; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [12:0] PORT_A_ADDR; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +parameter PORT_B_WIDTH = 9; +parameter PORT_B_CLK_POL = 1; +parameter PORT_B_OPTION_WRITEMODE = "NORMAL"; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; +input [12:0] PORT_B_ADDR; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; + +function [255:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < 32; i = i + 1) begin + init_slice[i*8+:8] = INIT[(idx * 32 + i) * 9 +: 8]; + end +endfunction + +function [255:0] initp_slice; + input integer idx; + integer i; + for (i = 0; i < 256; i = i + 1) begin + initp_slice[i] = INIT[(idx * 256 + i) * 9 + 8]; + end +endfunction + +wire [8:0] DOA; +wire [8:0] DOB; +// the replication is important — the BRAM behaves in... unexpected ways for +// width 1 and 2 +wire [8:0] DIA = {9{PORT_A_WR_DATA}}; +wire [8:0] DIB = {9{PORT_B_WR_DATA}}; + +assign PORT_A_RD_DATA = DOA; +assign PORT_B_RD_DATA = DOB; + +EG_PHY_BRAM #( + .INIT_00(init_slice('h00)), + .INIT_01(init_slice('h01)), + .INIT_02(init_slice('h02)), + .INIT_03(init_slice('h03)), + .INIT_04(init_slice('h04)), + .INIT_05(init_slice('h05)), + .INIT_06(init_slice('h06)), + .INIT_07(init_slice('h07)), + .INIT_08(init_slice('h08)), + .INIT_09(init_slice('h09)), + .INIT_0A(init_slice('h0a)), + .INIT_0B(init_slice('h0b)), + .INIT_0C(init_slice('h0c)), + .INIT_0D(init_slice('h0d)), + .INIT_0E(init_slice('h0e)), + .INIT_0F(init_slice('h0f)), + .INIT_10(init_slice('h10)), + .INIT_11(init_slice('h11)), + .INIT_12(init_slice('h12)), + .INIT_13(init_slice('h13)), + .INIT_14(init_slice('h14)), + .INIT_15(init_slice('h15)), + .INIT_16(init_slice('h16)), + .INIT_17(init_slice('h17)), + .INIT_18(init_slice('h18)), + .INIT_19(init_slice('h19)), + .INIT_1A(init_slice('h1a)), + .INIT_1B(init_slice('h1b)), + .INIT_1C(init_slice('h1c)), + .INIT_1D(init_slice('h1d)), + .INIT_1E(init_slice('h1e)), + .INIT_1F(init_slice('h1f)), + .INITP_00(initp_slice('h00)), + .INITP_01(initp_slice('h01)), + .INITP_02(initp_slice('h02)), + .INITP_03(initp_slice('h03)), + .MODE("DP8K"), + .DATA_WIDTH_A($sformatf("%d", PORT_A_WIDTH)), + .DATA_WIDTH_B($sformatf("%d", PORT_B_WIDTH)), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), + .CLKAMUX(PORT_A_CLK_POL ? "SIG" : "INV"), + .CLKBMUX(PORT_B_CLK_POL ? "SIG" : "INV"), + .WRITEMODE_A(PORT_A_OPTION_WRITEMODE), + .WRITEMODE_B(PORT_B_OPTION_WRITEMODE), +) _TECHMAP_REPLACE_ ( + .clka(PORT_A_CLK), + .wea(PORT_A_WR_EN), + .cea(PORT_A_CLK_EN), + .ocea(1'b1), + .rsta(OPTION_RESETMODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST), + .csa(3'b111), + .addra(PORT_A_WIDTH == 9 ? {PORT_A_ADDR[12:1], 1'b1} : PORT_A_ADDR), + .dia(DIA), + .doa(DOA), + + .clkb(PORT_B_CLK), + .web(PORT_B_WR_EN), + .ceb(PORT_B_CLK_EN), + .oceb(1'b1), + .rstb(OPTION_RESETMODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST), + .csb(3'b111), + .addrb(PORT_B_WIDTH == 9 ? {PORT_B_ADDR[12:1], 1'b1} : PORT_B_ADDR), + .dib(DIB), + .dob(DOB), +); + +endmodule + + +module $__ANLOGIC_BRAM_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +parameter PORT_R_WIDTH = 18; +parameter PORT_R_CLK_POL = 1; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input PORT_R_RD_SRST; +input PORT_R_RD_ARST; +input [12:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +parameter PORT_W_WIDTH = 18; +parameter PORT_W_WR_EN_WIDTH = 2; +parameter PORT_W_CLK_POL = 1; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [12:0] PORT_W_ADDR; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +function [255:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < 32; i = i + 1) begin + init_slice[i*8+:8] = INIT[(idx * 32 + i) * 9 +: 8]; + end +endfunction + +function [255:0] initp_slice; + input integer idx; + integer i; + for (i = 0; i < 256; i = i + 1) begin + initp_slice[i] = INIT[(idx * 256 + i) * 9 + 8]; + end +endfunction + +wire [17:0] DI = {18{PORT_W_WR_DATA}}; +wire [17:0] DO; + +assign PORT_R_RD_DATA = PORT_R_WIDTH == 18 ? DO : DO[17:9]; + +EG_PHY_BRAM #( + .INIT_00(init_slice('h00)), + .INIT_01(init_slice('h01)), + .INIT_02(init_slice('h02)), + .INIT_03(init_slice('h03)), + .INIT_04(init_slice('h04)), + .INIT_05(init_slice('h05)), + .INIT_06(init_slice('h06)), + .INIT_07(init_slice('h07)), + .INIT_08(init_slice('h08)), + .INIT_09(init_slice('h09)), + .INIT_0A(init_slice('h0a)), + .INIT_0B(init_slice('h0b)), + .INIT_0C(init_slice('h0c)), + .INIT_0D(init_slice('h0d)), + .INIT_0E(init_slice('h0e)), + .INIT_0F(init_slice('h0f)), + .INIT_10(init_slice('h10)), + .INIT_11(init_slice('h11)), + .INIT_12(init_slice('h12)), + .INIT_13(init_slice('h13)), + .INIT_14(init_slice('h14)), + .INIT_15(init_slice('h15)), + .INIT_16(init_slice('h16)), + .INIT_17(init_slice('h17)), + .INIT_18(init_slice('h18)), + .INIT_19(init_slice('h19)), + .INIT_1A(init_slice('h1a)), + .INIT_1B(init_slice('h1b)), + .INIT_1C(init_slice('h1c)), + .INIT_1D(init_slice('h1d)), + .INIT_1E(init_slice('h1e)), + .INIT_1F(init_slice('h1f)), + .INITP_00(initp_slice('h00)), + .INITP_01(initp_slice('h01)), + .INITP_02(initp_slice('h02)), + .INITP_03(initp_slice('h03)), + .MODE("PDPW8K"), + .DATA_WIDTH_A($sformatf("%d", PORT_W_WIDTH)), + .DATA_WIDTH_B($sformatf("%d", PORT_R_WIDTH)), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), + .CLKAMUX(PORT_W_CLK_POL ? "SIG" : "INV"), + .CLKBMUX(PORT_R_CLK_POL ? "SIG" : "INV"), +) _TECHMAP_REPLACE_ ( + .clka(PORT_W_CLK), + .wea(PORT_W_WIDTH >= 9 ? 1'b1 : PORT_W_WR_EN[0]), + .cea(PORT_W_CLK_EN), + .ocea(1'b1), + .rsta(1'b0), + .csa(3'b111), + .addra(PORT_W_WIDTH == 18 ? {PORT_W_ADDR[12:2], PORT_W_WR_EN[1:0]} : (PORT_W_WIDTH == 9 ? {PORT_W_ADDR[12:1], PORT_W_WR_EN[0]} : PORT_W_ADDR)), + .dia(DI[8:0]), + .doa(DO[8:0]), + + .clkb(PORT_R_CLK), + .web(1'b0), + .ceb(PORT_R_CLK_EN), + .oceb(1'b1), + .rstb(OPTION_RESETMODE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST), + .csb(3'b111), + .addrb(PORT_R_ADDR), + .dib(DI[17:9]), + .dob(DO[17:9]), +); + +endmodule + + +module $__ANLOGIC_BRAM32K_ (...); + +parameter INIT = 0; + +parameter PORT_A_WIDTH = 16; +parameter PORT_A_WR_EN_WIDTH = 2; +parameter PORT_A_CLK_POL = 1; +parameter PORT_A_OPTION_WRITEMODE = "NORMAL"; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +input [11:0] PORT_A_ADDR; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +parameter PORT_B_WIDTH = 16; +parameter PORT_B_WR_EN_WIDTH = 2; +parameter PORT_B_CLK_POL = 1; +parameter PORT_B_OPTION_WRITEMODE = "NORMAL"; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +input [11:0] PORT_B_ADDR; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; + +function [255:0] init_slice; + input integer idx; + init_slice = INIT[256 * idx +: 256]; +endfunction + +wire [15:0] DOA; +wire [15:0] DOB; +wire [15:0] DIA = PORT_A_WR_DATA; +wire [15:0] DIB = PORT_B_WR_DATA; + +assign PORT_A_RD_DATA = DOA; +assign PORT_B_RD_DATA = DOB; + +wire BYTE_A, BYTEWE_A; +wire BYTE_B, BYTEWE_B; + +generate + +if (PORT_A_WIDTH == 8) begin + assign BYTE_A = PORT_A_ADDR[0]; + assign BYTEWE_A = 1; +end else begin + assign BYTE_A = PORT_A_WR_EN == 2; + assign BYTEWE_A = ^PORT_A_WR_EN; +end + +if (PORT_B_WIDTH == 8) begin + assign BYTE_B = PORT_B_ADDR[0]; + assign BYTEWE_B = 1; +end else begin + assign BYTE_B = PORT_B_WR_EN == 2; + assign BYTEWE_B = ^PORT_B_WR_EN; +end + +endgenerate + +EG_PHY_BRAM32K #( + .INIT_00(init_slice('h00)), + .INIT_01(init_slice('h01)), + .INIT_02(init_slice('h02)), + .INIT_03(init_slice('h03)), + .INIT_04(init_slice('h04)), + .INIT_05(init_slice('h05)), + .INIT_06(init_slice('h06)), + .INIT_07(init_slice('h07)), + .INIT_08(init_slice('h08)), + .INIT_09(init_slice('h09)), + .INIT_0A(init_slice('h0a)), + .INIT_0B(init_slice('h0b)), + .INIT_0C(init_slice('h0c)), + .INIT_0D(init_slice('h0d)), + .INIT_0E(init_slice('h0e)), + .INIT_0F(init_slice('h0f)), + .INIT_10(init_slice('h10)), + .INIT_11(init_slice('h11)), + .INIT_12(init_slice('h12)), + .INIT_13(init_slice('h13)), + .INIT_14(init_slice('h14)), + .INIT_15(init_slice('h15)), + .INIT_16(init_slice('h16)), + .INIT_17(init_slice('h17)), + .INIT_18(init_slice('h18)), + .INIT_19(init_slice('h19)), + .INIT_1A(init_slice('h1a)), + .INIT_1B(init_slice('h1b)), + .INIT_1C(init_slice('h1c)), + .INIT_1D(init_slice('h1d)), + .INIT_1E(init_slice('h1e)), + .INIT_1F(init_slice('h1f)), + .INIT_20(init_slice('h20)), + .INIT_21(init_slice('h21)), + .INIT_22(init_slice('h22)), + .INIT_23(init_slice('h23)), + .INIT_24(init_slice('h24)), + .INIT_25(init_slice('h25)), + .INIT_26(init_slice('h26)), + .INIT_27(init_slice('h27)), + .INIT_28(init_slice('h28)), + .INIT_29(init_slice('h29)), + .INIT_2A(init_slice('h2a)), + .INIT_2B(init_slice('h2b)), + .INIT_2C(init_slice('h2c)), + .INIT_2D(init_slice('h2d)), + .INIT_2E(init_slice('h2e)), + .INIT_2F(init_slice('h2f)), + .INIT_30(init_slice('h30)), + .INIT_31(init_slice('h31)), + .INIT_32(init_slice('h32)), + .INIT_33(init_slice('h33)), + .INIT_34(init_slice('h34)), + .INIT_35(init_slice('h35)), + .INIT_36(init_slice('h36)), + .INIT_37(init_slice('h37)), + .INIT_38(init_slice('h38)), + .INIT_39(init_slice('h39)), + .INIT_3A(init_slice('h3a)), + .INIT_3B(init_slice('h3b)), + .INIT_3C(init_slice('h3c)), + .INIT_3D(init_slice('h3d)), + .INIT_3E(init_slice('h3e)), + .INIT_3F(init_slice('h3f)), + .INIT_40(init_slice('h40)), + .INIT_41(init_slice('h41)), + .INIT_42(init_slice('h42)), + .INIT_43(init_slice('h43)), + .INIT_44(init_slice('h44)), + .INIT_45(init_slice('h45)), + .INIT_46(init_slice('h46)), + .INIT_47(init_slice('h47)), + .INIT_48(init_slice('h48)), + .INIT_49(init_slice('h49)), + .INIT_4A(init_slice('h4a)), + .INIT_4B(init_slice('h4b)), + .INIT_4C(init_slice('h4c)), + .INIT_4D(init_slice('h4d)), + .INIT_4E(init_slice('h4e)), + .INIT_4F(init_slice('h4f)), + .INIT_50(init_slice('h50)), + .INIT_51(init_slice('h51)), + .INIT_52(init_slice('h52)), + .INIT_53(init_slice('h53)), + .INIT_54(init_slice('h54)), + .INIT_55(init_slice('h55)), + .INIT_56(init_slice('h56)), + .INIT_57(init_slice('h57)), + .INIT_58(init_slice('h58)), + .INIT_59(init_slice('h59)), + .INIT_5A(init_slice('h5a)), + .INIT_5B(init_slice('h5b)), + .INIT_5C(init_slice('h5c)), + .INIT_5D(init_slice('h5d)), + .INIT_5E(init_slice('h5e)), + .INIT_5F(init_slice('h5f)), + .INIT_60(init_slice('h60)), + .INIT_61(init_slice('h61)), + .INIT_62(init_slice('h62)), + .INIT_63(init_slice('h63)), + .INIT_64(init_slice('h64)), + .INIT_65(init_slice('h65)), + .INIT_66(init_slice('h66)), + .INIT_67(init_slice('h67)), + .INIT_68(init_slice('h68)), + .INIT_69(init_slice('h69)), + .INIT_6A(init_slice('h6a)), + .INIT_6B(init_slice('h6b)), + .INIT_6C(init_slice('h6c)), + .INIT_6D(init_slice('h6d)), + .INIT_6E(init_slice('h6e)), + .INIT_6F(init_slice('h6f)), + .INIT_70(init_slice('h70)), + .INIT_71(init_slice('h71)), + .INIT_72(init_slice('h72)), + .INIT_73(init_slice('h73)), + .INIT_74(init_slice('h74)), + .INIT_75(init_slice('h75)), + .INIT_76(init_slice('h76)), + .INIT_77(init_slice('h77)), + .INIT_78(init_slice('h78)), + .INIT_79(init_slice('h79)), + .INIT_7A(init_slice('h7a)), + .INIT_7B(init_slice('h7b)), + .INIT_7C(init_slice('h7c)), + .INIT_7D(init_slice('h7d)), + .INIT_7E(init_slice('h7e)), + .INIT_7F(init_slice('h7f)), + .MODE("DP16K"), + .DATA_WIDTH_A($sformatf("%d", PORT_A_WIDTH)), + .DATA_WIDTH_B($sformatf("%d", PORT_B_WIDTH)), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .WRITEMODE_A(PORT_A_OPTION_WRITEMODE), + .WRITEMODE_B(PORT_B_OPTION_WRITEMODE), + .CLKAMUX(PORT_A_CLK_POL ? "SIG" : "INV"), + .CLKBMUX(PORT_B_CLK_POL ? "SIG" : "INV"), +) _TECHMAP_REPLACE_ ( + .clka(PORT_A_CLK), + .csa(PORT_A_CLK_EN), + .wea(|PORT_A_WR_EN), + .ocea(1'b1), + .rsta(1'b0), + .addra(PORT_A_ADDR[11:1]), + .bytea(BYTE_A), + .bytewea(BYTEWE_A), + .dia(DIA), + .doa(DOA), + + .clkb(PORT_B_CLK), + .csb(PORT_B_CLK_EN), + .web(|PORT_B_WR_EN), + .ocea(1'b1), + .rsta(1'b0), + .addrb(PORT_B_ADDR[11:1]), + .byteb(BYTE_B), + .byteweb(BYTEWE_B), + .dib(DIB), + .dob(DOB), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/anlogic/cells_map.v b/resources/netlist/resources/kernel/share/anlogic/cells_map.v new file mode 100644 index 0000000..d9f264a --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/cells_map.v @@ -0,0 +1,48 @@ +module \$_DFFE_PN0P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C) ,.ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PN1P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("INV"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PP0P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PP1P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("SR"), . SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_SDFFE_PN0P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C) ,.ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PN1P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PP0P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PP1P_ (input D, C, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("SR"), . SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_DLATCH_NN0_ (input D, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("LATCH"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(E) ,.ce(1'b1), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DLATCH_NN1_ (input D, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("LATCH"), .REGSET("SET"), .SRMUX("INV"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(E), .ce(1'b1), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DLATCH_NP0_ (input D, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("LATCH"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(E), .ce(1'b1), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DLATCH_NP1_ (input D, R, E, output Q); AL_MAP_SEQ #(.DFFMODE("LATCH"), .REGSET("SET"), .SRMUX("SR"), . SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(E), .ce(1'b1), .sr(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +`ifndef NO_LUT +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + AL_MAP_LUT1 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0])); + end else + if (WIDTH == 2) begin + AL_MAP_LUT2 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1])); + end else + if (WIDTH == 3) begin + AL_MAP_LUT3 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2])); + end else + if (WIDTH == 4) begin + AL_MAP_LUT4 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3])); + end else + if (WIDTH == 5) begin + AL_MAP_LUT5 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]), .e(A[4])); + end else + if (WIDTH == 6) begin + AL_MAP_LUT6 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]), .e(A[4]), .f(A[5])); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule +`endif diff --git a/resources/netlist/resources/kernel/share/anlogic/cells_sim.v b/resources/netlist/resources/kernel/share/anlogic/cells_sim.v new file mode 100644 index 0000000..e8ecf4f --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/cells_sim.v @@ -0,0 +1,191 @@ +module AL_MAP_SEQ ( + output reg q, + input ce, + input clk, + input sr, + input d +); + parameter DFFMODE = "FF"; //FF,LATCH + parameter REGSET = "RESET"; //RESET/SET + parameter SRMUX = "SR"; //SR/INV + parameter SRMODE = "SYNC"; //SYNC/ASYNC + + wire srmux; + generate + case (SRMUX) + "SR": assign srmux = sr; + "INV": assign srmux = ~sr; + default: assign srmux = sr; + endcase + endgenerate + + wire regset; + generate + case (REGSET) + "RESET": assign regset = 1'b0; + "SET": assign regset = 1'b1; + default: assign regset = 1'b0; + endcase + endgenerate + + initial q = regset; + + generate + if (DFFMODE == "FF") + begin + if (SRMODE == "ASYNC") + begin + always @(posedge clk, posedge srmux) + if (srmux) + q <= regset; + else if (ce) + q <= d; + end + else + begin + always @(posedge clk) + if (srmux) + q <= regset; + else if (ce) + q <= d; + end + end + else + begin + // DFFMODE == "LATCH" + if (SRMODE == "ASYNC") + begin + always @* + if (srmux) + q <= regset; + else if (~clk & ce) + q <= d; + end + else + begin + always @* + if (~clk) begin + if (srmux) + q <= regset; + else if (ce) + q <= d; + end + end + end + endgenerate +endmodule + +module AL_MAP_LUT1 ( + output o, + input a +); + parameter [1:0] INIT = 2'h0; + parameter EQN = "(A)"; + + assign o = a ? INIT[1] : INIT[0]; +endmodule + +module AL_MAP_LUT2 ( + output o, + input a, + input b +); + parameter [3:0] INIT = 4'h0; + parameter EQN = "(A)"; + + wire [1:0] s1 = b ? INIT[ 3:2] : INIT[1:0]; + assign o = a ? s1[1] : s1[0]; +endmodule + +module AL_MAP_LUT3 ( + output o, + input a, + input b, + input c +); + parameter [7:0] INIT = 8'h0; + parameter EQN = "(A)"; + + wire [3:0] s2 = c ? INIT[ 7:4] : INIT[3:0]; + wire [1:0] s1 = b ? s2[ 3:2] : s2[1:0]; + assign o = a ? s1[1] : s1[0]; +endmodule + +module AL_MAP_LUT4 ( + output o, + input a, + input b, + input c, + input d +); + parameter [15:0] INIT = 16'h0; + parameter EQN = "(A)"; + + wire [7:0] s3 = d ? INIT[15:8] : INIT[7:0]; + wire [3:0] s2 = c ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = b ? s2[ 3:2] : s2[1:0]; + assign o = a ? s1[1] : s1[0]; +endmodule + +module AL_MAP_LUT5 ( + output o, + input a, + input b, + input c, + input d, + input e +); + parameter [31:0] INIT = 32'h0; + parameter EQN = "(A)"; + assign o = INIT >> {e, d, c, b, a}; +endmodule + + +module AL_MAP_LUT6 ( + output o, + input a, + input b, + input c, + input d, + input e, + input f +); + parameter [63:0] INIT = 64'h0; + parameter EQN = "(A)"; + assign o = INIT >> {f, e, d, c, b, a}; +endmodule + +module AL_MAP_ALU2B ( + input cin, + input a0, b0, c0, d0, + input a1, b1, c1, d1, + output s0, s1, cout +); + parameter [15:0] INIT0 = 16'h0000; + parameter [15:0] INIT1 = 16'h0000; + parameter FUNC0 = "NO"; + parameter FUNC1 = "NO"; +endmodule + +module AL_MAP_ADDER ( + input a, + input b, + input c, + output [1:0] o +); + parameter ALUTYPE = "ADD"; + + generate + case (ALUTYPE) + "ADD": assign o = a + b + c; + "SUB": assign o = a - b - c; + "A_LE_B": assign o = a - b - c; + + "ADD_CARRY": assign o = { a, 1'b0 }; + "SUB_CARRY": assign o = { ~a, 1'b0 }; + "A_LE_B_CARRY": assign o = { a, 1'b0 }; + default: assign o = a + b + c; + endcase + endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/anlogic/eagle_bb.v b/resources/netlist/resources/kernel/share/anlogic/eagle_bb.v new file mode 100644 index 0000000..7cbec33 --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/eagle_bb.v @@ -0,0 +1,1028 @@ +// Anlogic Eagle - Blackbox cells +// FIXME: Create sim models + +(* blackbox *) +module EG_LOGIC_BUF( + output o, + input i +); +endmodule + +(* blackbox *) +module EG_LOGIC_BUFG( + output o, + input i +); +endmodule + +(* blackbox *) +module EG_LOGIC_BUFIO( + input clki, + input rst, + input coe, + output clko, + output clkdiv1, + output clkdivx +); + parameter GSR = "DISABLE"; + parameter DIV = 2; + parameter STOPCLK = "DISABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_BUFGMUX( + output o, + input i0, + input i1, + input s +); + parameter INIT_OUT = "0"; + parameter PRESELECT_I0 = "TRUE"; + parameter PRESELECT_I1 = "FALSE"; +endmodule + +(* blackbox *) +module EG_LOGIC_MBOOT( + input rebootn, + input [7:0] dynamic_addr +); + parameter ADDR_SOURCE_SEL = "STATIC"; + parameter STATIC_ADDR = 8'b00000000; +endmodule + +(* blackbox *) +module EG_LOGIC_DNA( + output dout, + input clk, + input din, + input shift_en +); +endmodule + +(* blackbox *) +module EG_LOGIC_GCTRL( + output done, + output highz +); +endmodule + +(* blackbox *) +module EG_LOGIC_GSRN( + input gsrn, + input sync_clk +); + parameter GSRN_SYNC_SEL = "DISABLE"; + parameter USR_GSRN_EN = "DISABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_CCLK( + output cclk, + input en +); + parameter FREQ = "4.5"; +endmodule + +(* blackbox *) +module EG_LOGIC_IDELAY( + output o, + input i +); + parameter INDEL = 0; +endmodule + +(* blackbox *) +module EG_LOGIC_IDDR( + output q1, + output q0, + input clk, + input d, + input rst +); + parameter ASYNCRST = "ENABLE"; + parameter PIPEMODE = "PIPED"; +endmodule + +(* blackbox *) +module EG_LOGIC_ODDR( + output q, + input clk, + input d1, + input d0, + input rst +); + parameter ASYNCRST = "ENABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_IDDRx2( + output q3, + output q2, + output q1, + output q0, + input pclk, + input sclk, + input d, + input rst +); + parameter ASYNCRST = "ENABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_ODELAY( + output o, + input i +); + parameter OUTDEL = 0; +endmodule + +(* blackbox *) +module EG_LOGIC_ODDRx2( + output q, + input pclk, + input sclk, + input d3, + input d2, + input d1, + input d0, + input rst +); + parameter ASYNCRST = "ENABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_ODDRx2l( + output q, + input sclk, + input d3, + input d2, + input d1, + input d0, + input rst +); + parameter ASYNCRST = "ENABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_FIFO( + input rst, + input [DATA_WIDTH_W-1:0] di, + output [DATA_WIDTH_R-1:0] do, + input clkw, + input we, + input clkr, + input re, + input ore, + input [2:0] csw, + input [2:0] csr, + output empty_flag, + output aempty_flag, + output full_flag, + output afull_flag +); + parameter DATA_WIDTH_W = 9; + parameter DATA_WIDTH_R = DATA_WIDTH_W; + parameter DATA_DEPTH_W = 1024; + parameter DATA_DEPTH_R = DATA_WIDTH_W * DATA_DEPTH_W / DATA_WIDTH_R; + parameter MODE = "FIFO8K"; + parameter REGMODE_W = "NOREG"; + parameter REGMODE_R = "NOREG"; + parameter E = 0; + parameter AE = 6; + parameter AF = DATA_DEPTH_W - 6; + parameter F = DATA_DEPTH_W; + parameter GSR = "DISABLE"; + parameter RESETMODE = "ASYNC"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + parameter ENDIAN = "LITTLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_DRAM( + input [DATA_WIDTH_W-1:0] di, + input [ADDR_WIDTH_W-1:0] waddr, + input wclk, + input we, + output [DATA_WIDTH_R-1:0] do, + input [ADDR_WIDTH_R-1:0] raddr +); + parameter DATA_WIDTH_W = 9; + parameter ADDR_WIDTH_W = 10; + parameter DATA_DEPTH_W = 2 ** ADDR_WIDTH_W; + parameter DATA_WIDTH_R = 9; + parameter ADDR_WIDTH_R = 10; + parameter DATA_DEPTH_R = 2 ** ADDR_WIDTH_R; + parameter INIT_FILE = "NONE"; +endmodule + +(* blackbox *) +module EG_LOGIC_DRAM16X4( + input [3:0] di, + input [3:0] waddr, + input wclk, + input we, + input [3:0]raddr, + output [3:0]do +); + parameter INIT_D0=16'h0000; + parameter INIT_D1=16'h0000; + parameter INIT_D2=16'h0000; + parameter INIT_D3=16'h0000; +endmodule + +(* blackbox *) +module EG_LOGIC_MULT( + output [OUTPUT_WIDTH-1:0] p, + input [INPUT_WIDTH_A-1:0] a, + input [INPUT_WIDTH_B-1:0] b, + input cea, + input ceb, + input cepd, + input clk, + input rstan, + input rstbn, + input rstpdn +); + parameter INPUT_WIDTH_A = 18; + parameter INPUT_WIDTH_B = 18; + parameter OUTPUT_WIDTH = 36; + parameter INPUTFORMAT = "SIGNED"; + parameter INPUTREGA = "ENABLE"; + parameter INPUTREGB = "ENABLE"; + parameter OUTPUTREG = "ENABLE"; + parameter SRMODE = "ASYNC"; + parameter IMPLEMENT = "AUTO"; +endmodule + +(* blackbox *) +module EG_LOGIC_SEQ_DIV( + input clk, + input rst, + input start, + input [NUMER_WIDTH-1:0] numer, + input [DENOM_WIDTH-1:0] denom, + output [NUMER_WIDTH-1:0] quotient, + output [DENOM_WIDTH-1:0] remain, + output done +); + parameter NUMER_WIDTH = 16; + parameter DENOM_WIDTH = 16; +endmodule + +(* blackbox *) +module EG_PHY_BRAM( + output [8:0] doa, + output [8:0] dob, + input [8:0] dia, + input [8:0] dib, + input [2:0] csa, + input [2:0] csb, + input cea, + input ocea, + input clka, + input wea, + input rsta, + input ceb, + input oceb, + input clkb, + input web, + input rstb, + input [12:0] addra, + input [12:0] addrb +); + parameter MODE = "DP8K"; + parameter DATA_WIDTH_A = "9"; + parameter DATA_WIDTH_B = "9"; + parameter READBACK = "OFF"; + parameter REGMODE_A = "NOREG"; + parameter REGMODE_B = "NOREG"; + parameter WRITEMODE_A = "NORMAL"; + parameter WRITEMODE_B = "NORMAL"; + parameter GSR = "ENABLE"; + parameter RESETMODE = "SYNC"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + parameter CEAMUX = "SIG"; + parameter CEBMUX = "SIG"; + parameter OCEAMUX = "SIG"; + parameter OCEBMUX = "SIG"; + parameter RSTAMUX = "SIG"; + parameter RSTBMUX = "SIG"; + parameter CLKAMUX = "SIG"; + parameter CLKBMUX = "SIG"; + parameter WEAMUX = "SIG"; + parameter WEBMUX = "SIG"; + parameter CSA0 = "SIG" ; + parameter CSA1 = "SIG" ; + parameter CSA2 = "SIG" ; + parameter CSB0 = "SIG" ; + parameter CSB1 = "SIG" ; + parameter CSB2 = "SIG" ; + parameter INIT_FILE = "NONE"; + parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; +endmodule + +(* blackbox *) +module EG_PHY_BRAM32K( + output [15:0] doa, + output [15:0] dob, + input [15:0] dia, + input [15:0] dib, + input [10:0] addra, + input [10:0] addrb, + input bytea, + input bytewea, + input byteb, + input byteweb, + input csa, + input wea, + input csb, + input web, + input clka, + input rsta, + input clkb, + input rstb, + input ocea, + input oceb +); + parameter MODE = "DP16K"; + parameter DATA_WIDTH_A = "16"; + parameter DATA_WIDTH_B = "16"; + parameter REGMODE_A = "NOREG"; + parameter REGMODE_B = "NOREG"; + parameter WRITEMODE_A = "NORMAL"; + parameter WRITEMODE_B = "NORMAL"; + parameter SRMODE = "SYNC"; + parameter CSAMUX = "SIG"; + parameter CSBMUX = "SIG"; + parameter OCEAMUX = "SIG"; + parameter OCEBMUX = "SIG"; + parameter RSTAMUX = "SIG"; + parameter RSTBMUX = "SIG"; + parameter CLKAMUX = "SIG"; + parameter CLKBMUX = "SIG"; + parameter WEAMUX = "SIG"; + parameter WEBMUX = "SIG"; + parameter READBACK = "OFF"; + parameter INIT_FILE = ""; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000; +endmodule + +(* blackbox *) +module EG_PHY_FIFO( + input [8:0] dia, + input [8:0] dib, + input [2:0] csr, + input [2:0] csw, + input we, + input re, + input clkw, + input clkr, + input rst, + input rprst, + input orea, + input oreb, + output [8:0] dob, + output [8:0] doa, + output empty_flag, + output aempty_flag, + output afull_flag, + output full_flag +); + parameter MODE = "FIFO8K"; + parameter DATA_WIDTH_A = "18"; + parameter DATA_WIDTH_B = "18"; + parameter READBACK = "OFF"; + parameter REGMODE_A = "NOREG"; + parameter REGMODE_B = "NOREG"; + parameter [13:0] AE = 14'b00000001100000; + parameter [13:0] AF = 14'b01111110010000; + parameter [13:0] F = 14'b01111111110000; + parameter [13:0] AEP1 = 14'b00000001110000; + parameter [13:0] AFM1 = 14'b01111110000000; + parameter [13:0] FM1 = 14'b01111111100000; + parameter [4:0] E = 5'b00000; + parameter [5:0] EP1 = 6'b010000; + parameter GSR = "ENABLE"; + parameter RESETMODE = "ASYNC"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + parameter CEA = "SIG"; + parameter CEB = "SIG"; + parameter OCEA = "SIG"; + parameter OCEB = "SIG"; + parameter RSTA = "SIG"; + parameter RSTB = "SIG"; + parameter CLKA = "SIG"; + parameter CLKB = "SIG"; + parameter WEA = "SIG"; + parameter WEB = "SIG"; + parameter CSA0 = "SIG"; + parameter CSA1 = "SIG"; + parameter CSA2 = "SIG"; + parameter CSB0 = "SIG"; + parameter CSB1 = "SIG"; + parameter CSB2 = "SIG"; +endmodule + +(* blackbox *) +module EG_PHY_MULT18( + output [17:0] acout, + output [17:0] bcout, + output [35:0] p, + input signeda, + input signedb, + input [17:0] a, + input [17:0] b, + input [17:0] acin, + input [17:0] bcin, + input cea, + input ceb, + input cepd, + input clk, + input rstan, + input rstbn, + input rstpdn, + input sourcea, + input sourceb +); + parameter INPUTREGA = "ENABLE"; + parameter INPUTREGB = "ENABLE"; + parameter OUTPUTREG = "ENABLE"; + parameter SRMODE = "ASYNC"; + parameter MODE = "MULT18X18C"; + parameter CEAMUX = "SIG"; + parameter CEBMUX = "SIG"; + parameter CEPDMUX = "SIG"; + parameter RSTANMUX = "SIG"; + parameter RSTBNMUX = "SIG"; + parameter RSTPDNMUX = "SIG"; + parameter CLKMUX = "SIG"; + parameter SIGNEDAMUX = "SIG"; + parameter SIGNEDBMUX = "SIG"; + parameter SOURCEAMUX = "SIG"; + parameter SOURCEBMUX = "SIG"; +endmodule + +(* blackbox *) +module EG_PHY_GCLK( + input clki, + output clko +); +endmodule + +(* blackbox *) +module EG_PHY_IOCLK( + input clki, + input stop, + output clko +); + parameter STOPCLK = "DISABLE"; +endmodule + +(* blackbox *) +module EG_PHY_CLKDIV( + output clkdiv1, + output clkdivx, + input clki, + input rst, + input rls +); + parameter GSR = "DISABLE"; + parameter DIV = 2; +endmodule + +(* blackbox *) +module EG_PHY_CONFIG( + output jrstn, + output [1:0] jrti, + output jshift, + output jtck, + output jtdi, + output jupdate, + output [1:0] jscanen, + output jtms, + input [1:0] jtdo, + input [7:0] jtag8_ipa, + input [7:0] jtag8_ipb, + output done, + output highz, + output cclk, + input cclk_en, + input gsrn_sync_clk, + input usr_gsrn, + output dna_dout, + input dna_clk, + input dna_din, + input dna_shift_en, + input mboot_rebootn, + input [7:0] mboot_dynamic_addr +); + parameter MBOOT_AUTO_SEL = "DISABLE"; + parameter ADDR_SOURCE_SEL = "STATIC"; + parameter STATIC_ADDR = 8'b0; + parameter DONE_PERSISTN = "ENABLE"; + parameter INIT_PERSISTN = "ENABLE"; + parameter PROGRAMN_PERSISTN = "DISABLE"; + parameter JTAG_PERSISTN = "DISABLE"; + parameter GSRN_SYNC_SEL = "DISABLE"; + parameter FREQ = "2.5"; + parameter USR_GSRN_EN = "DISABLE"; +endmodule + +(* blackbox *) +module EG_PHY_OSC( + input osc_dis, + output osc_clk +); + parameter STDBY = "DISABLE"; +endmodule + +(* blackbox *) +module EG_PHY_PWRMNT( + output pwr_dwn_n, + input sel_pwr, + input pwr_mnt_pd +); + parameter MNT_LVL = 0; +endmodule + +(* blackbox *) +module EG_PHY_DDR_8M_16( + input clk, + input clk_n, + input ras_n, + input cas_n, + input we_n, + input cs_n, + input [11:0] addr, + input [1:0] ba, + inout [15:0] dq, + input ldqs, + input udqs, + input ldm, + input udm, + input cke +); +endmodule + +(* blackbox *) +module EG_PHY_SDRAM_2M_32( + input clk, + input ras_n, + input cas_n, + input we_n, + input [10:0] addr, + input [1:0] ba, + inout [31:0] dq, + input cs_n, + input dm0, + input dm1, + input dm2, + input dm3, + input cke +); +endmodule + +(* blackbox *) +module EG_PHY_PAD( + input ipad, + output opad, + inout bpad, + input rst, + input ce, + input isclk, + input ipclk, + input osclk, + input opclk, + input ts, + input [3:0] do, + output di, + output [3:0] diq +); + parameter DEDCLK = "DISABLE"; + parameter GSR = "ENABLE"; + parameter SRMODE = "SYNC"; + parameter TSMUX = "1"; + parameter INSCLKMUX = "0"; + parameter INPCLKMUX = "CLK"; + parameter INCEMUX = "CE"; + parameter INRSTMUX = "0"; + parameter IN_REGSET = "RESET"; + parameter IN_DFFMODE = "NONE"; + parameter IDDRMODE = "OFF"; + parameter IDDRPIPEMODE = "NONE"; + parameter INDELMUX = "NODEL"; + parameter INDEL = 0; + parameter OUTSCLKMUX = "0"; + parameter OUTPCLKMUX = "CLK"; + parameter OUTCEMUX = "CE"; + parameter OUTRSTMUX = "0"; + parameter DO_REGSET = "RESET"; + parameter DO_DFFMODE = "NONE"; + parameter ODDRMODE = "OFF"; + parameter OUTDELMUX = "NODEL"; + parameter OUTDEL = 0; + parameter TO_REGSET = "RESET"; + parameter TO_DFFMODE = "NONE"; + parameter MODE = "IN"; + parameter DRIVE = "NONE"; + parameter IOTYPE = "LVCMOS25"; +endmodule + +(* blackbox *) +module EG_PHY_MSLICE( + input [1:0] a, + input [1:0] b, + input [1:0] c, + input [1:0] d, + input [1:0] mi, + input clk, + input ce, + input sr, + input fci, + output [1:0] f, + output [1:0] fx, + output [1:0] q, + output fco, + input dpram_mode, + input [1:0] dpram_di, + input dpram_we, + input dpram_wclk, + input [3:0] dpram_waddr +); + parameter INIT_LUT0 = 16'h0000; + parameter INIT_LUT1 = 16'h0000; + parameter MODE = "LOGIC"; + parameter ALUTYPE = "ADD"; + parameter MSFXMUX = "OFF"; + parameter GSR = "ENABLE"; + parameter TESTMODE = "OFF"; + parameter CEMUX = "CE"; + parameter SRMUX = "SR"; + parameter CLKMUX = "CLK"; + parameter SRMODE = "ASYNC"; + parameter DFFMODE = "FF"; + parameter REG0_SD = "MI"; + parameter REG1_SD = "MI"; + parameter REG0_REGSET = "SET"; + parameter REG1_REGSET = "SET"; +endmodule + +(* blackbox *) +module EG_PHY_LSLICE( + input [1:0] a, + input [1:0] b, + input [1:0] c, + input [1:0] d, + input [1:0] e, + input [1:0] mi, + input clk, + input ce, + input sr, + input fci, + output [1:0] f, + output [1:0] fx, + output [1:0] q, + output fco, + output [3:0] dpram_di, + output [3:0] dpram_waddr, + output dpram_wclk, + output dpram_we, + output dpram_mode +); + parameter INIT_LUTF0 = 16'h0000; + parameter INIT_LUTG0 = 16'h0000; + parameter INIT_LUTF1 = 16'h0000; + parameter INIT_LUTG1 = 16'h0000; + parameter MODE = "LOGIC"; + parameter GSR = "ENABLE"; + parameter TESTMODE = "OFF"; + parameter CEMUX = "1"; + parameter SRMUX = "SR"; + parameter CLKMUX = "CLK"; + parameter SRMODE = "ASYNC"; + parameter DFFMODE = "FF"; + parameter REG0_SD = "MI"; + parameter REG1_SD = "MI"; + parameter REG0_REGSET = "SET"; + parameter REG1_REGSET = "SET"; + parameter DEMUX0 = "D"; + parameter DEMUX1 = "D"; + parameter CMIMUX0 = "C"; + parameter CMIMUX1 = "C"; + parameter LSFMUX0 = "LUTF"; + parameter LSFXMUX0 = "LUTG"; + parameter LSFMUX1 = "LUTF"; + parameter LSFXMUX1 = "LUTG"; +endmodule + +(* blackbox *) +module EG_PHY_PLL( + output [4:0] clkc, + output extlock, + input stdby, + input refclk, + input fbclk, + input reset, + output psdone, + input psclk, + input psdown, + input psstep, + input [2:0] psclksel, + output [7:0] do, + input dclk, + input dcs, + input dwe, + input [7:0] di, + input [5:0] daddr +); + parameter DYNCFG = "DISABLE"; + parameter IF_ESCLKSTSW = "DISABLE"; + parameter REFCLK_SEL = "INTERNAL"; + parameter FIN = "100.0000"; + parameter REFCLK_DIV = 1; + parameter FBCLK_DIV = 1; + parameter CLKC0_DIV = 1; + parameter CLKC1_DIV = 1; + parameter CLKC2_DIV = 1; + parameter CLKC3_DIV = 1; + parameter CLKC4_DIV = 1; + parameter CLKC0_ENABLE = "DISABLE"; + parameter CLKC1_ENABLE = "DISABLE"; + parameter CLKC2_ENABLE = "DISABLE"; + parameter CLKC3_ENABLE = "DISABLE"; + parameter CLKC4_ENABLE = "DISABLE"; + parameter CLKC0_DIV2_ENABLE = "DISABLE"; + parameter CLKC1_DIV2_ENABLE = "DISABLE"; + parameter CLKC2_DIV2_ENABLE = "DISABLE"; + parameter CLKC3_DIV2_ENABLE = "DISABLE"; + parameter CLKC4_DIV2_ENABLE = "DISABLE"; + parameter FEEDBK_MODE = "NORMAL"; + parameter FEEDBK_PATH = "VCO_PHASE_0"; + parameter STDBY_ENABLE = "ENABLE"; + parameter CLKC0_FPHASE = 0; + parameter CLKC1_FPHASE = 0; + parameter CLKC2_FPHASE = 0; + parameter CLKC3_FPHASE = 0; + parameter CLKC4_FPHASE = 0; + parameter CLKC0_CPHASE = 1; + parameter CLKC1_CPHASE = 1; + parameter CLKC2_CPHASE = 1; + parameter CLKC3_CPHASE = 1; + parameter CLKC4_CPHASE = 1; + parameter GMC_GAIN = 7; + parameter GMC_TEST = 14; + parameter ICP_CURRENT = 14; + parameter KVCO = 7; + parameter LPF_CAPACITOR = 3; + parameter LPF_RESISTOR = 1; + parameter PLLRST_ENA = "ENABLE"; + parameter PLLMRST_ENA = "DISABLE"; + parameter PLLC2RST_ENA = "DISABLE"; + parameter PLLC34RST_ENA = "DISABLE"; + parameter PREDIV_MUXC0 = "VCO"; + parameter PREDIV_MUXC1 = "VCO"; + parameter PREDIV_MUXC2 = "VCO"; + parameter PREDIV_MUXC3 = "VCO"; + parameter PREDIV_MUXC4 = "VCO"; + parameter ODIV_MUXC0 = "DIV"; + parameter ODIV_MUXC1 = "DIV"; + parameter ODIV_MUXC2 = "DIV"; + parameter ODIV_MUXC3 = "DIV"; + parameter ODIV_MUXC4 = "DIV"; + parameter FREQ_LOCK_ACCURACY = 2; + parameter PLL_LOCK_MODE = 0; + parameter INTFB_WAKE = "DISABLE"; + parameter DPHASE_SOURCE = "DISABLE"; + parameter VCO_NORESET = "DISABLE"; + parameter STDBY_VCO_ENA = "DISABLE"; + parameter NORESET = "DISABLE"; + parameter SYNC_ENABLE = "ENABLE"; + parameter DERIVE_PLL_CLOCKS = "DISABLE"; + parameter GEN_BASIC_CLOCK = "DISABLE"; +endmodule + +(* blackbox *) +module EG_LOGIC_BRAM( + output [DATA_WIDTH_A-1:0] doa, + output [DATA_WIDTH_B-1:0] dob, + input [DATA_WIDTH_A-1:0] dia, + input [DATA_WIDTH_B-1:0] dib, + input cea, + input ocea, + input clka, + input wea, + input rsta, + input ceb, + input oceb, + input clkb, + input web, + input rstb, + input [BYTE_A - 1 : 0] bea, + input [BYTE_B - 1 : 0] beb, + input [ADDR_WIDTH_A-1:0] addra, + input [ADDR_WIDTH_B-1:0] addrb +); + parameter DATA_WIDTH_A = 9; + parameter DATA_WIDTH_B = DATA_WIDTH_A; + parameter ADDR_WIDTH_A = 10; + parameter ADDR_WIDTH_B = ADDR_WIDTH_A; + parameter DATA_DEPTH_A = 2 ** ADDR_WIDTH_A; + parameter DATA_DEPTH_B = 2 ** ADDR_WIDTH_B; + parameter BYTE_ENABLE = 0; + parameter BYTE_A = BYTE_ENABLE == 0 ? 1 : DATA_WIDTH_A / BYTE_ENABLE; + parameter BYTE_B = BYTE_ENABLE == 0 ? 1 : DATA_WIDTH_B / BYTE_ENABLE; + parameter MODE = "DP"; + parameter REGMODE_A = "NOREG"; + parameter REGMODE_B = "NOREG"; + parameter WRITEMODE_A = "NORMAL"; + parameter WRITEMODE_B = "NORMAL"; + parameter RESETMODE = "SYNC"; + parameter DEBUGGABLE = "NO"; + parameter PACKABLE = "NO"; + parameter FORCE_KEEP = "OFF"; + parameter INIT_FILE = "NONE"; + parameter FILL_ALL = "NONE"; + parameter IMPLEMENT = "9K"; +endmodule + +(* blackbox *) +module EG_PHY_ADC( + input clk, + input pd, + input [2:0] s, + input soc, + output eoc, + output [11:0] dout +); + parameter CH0 = "DISABLE"; + parameter CH1 = "DISABLE"; + parameter CH2 = "DISABLE"; + parameter CH3 = "DISABLE"; + parameter CH4 = "DISABLE"; + parameter CH5 = "DISABLE"; + parameter CH6 = "DISABLE"; + parameter CH7 = "DISABLE"; + parameter VREF = "DISABLE"; +endmodule diff --git a/resources/netlist/resources/kernel/share/anlogic/lutrams.txt b/resources/netlist/resources/kernel/share/anlogic/lutrams.txt new file mode 100644 index 0000000..ef6fec2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/lutrams.txt @@ -0,0 +1,12 @@ +ram distributed $__ANLOGIC_DRAM16X4_ { + abits 4; + width 4; + cost 4; + init no_undef; + prune_rom; + port sw "W" { + clock posedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/anlogic/lutrams_map.v b/resources/netlist/resources/kernel/share/anlogic/lutrams_map.v new file mode 100644 index 0000000..6314da2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/anlogic/lutrams_map.v @@ -0,0 +1,32 @@ +module $__ANLOGIC_DRAM16X4_ (...); + parameter INIT = 64'b0; + + input PORT_W_CLK; + input [3:0] PORT_W_ADDR; + input [3:0] PORT_W_WR_DATA; + input PORT_W_WR_EN; + + input [3:0] PORT_R_ADDR; + output [3:0] PORT_R_RD_DATA; + + function [15:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < 16; i = i + 1) + init_slice[i] = INIT[i * 4 + idx]; + endfunction + + EG_LOGIC_DRAM16X4 #( + .INIT_D0(init_slice(0)), + .INIT_D1(init_slice(1)), + .INIT_D2(init_slice(2)), + .INIT_D3(init_slice(3)) + ) _TECHMAP_REPLACE_ ( + .di(PORT_W_WR_DATA), + .waddr(PORT_W_ADDR), + .wclk(PORT_W_CLK), + .we(PORT_W_WR_EN), + .raddr(PORT_R_ADDR), + .do(PORT_R_RD_DATA) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/cells.lib b/resources/netlist/resources/kernel/share/cells.lib new file mode 100644 index 0000000..eb89036 --- /dev/null +++ b/resources/netlist/resources/kernel/share/cells.lib @@ -0,0 +1,108 @@ +library(yosys_cells) { + cell(DFF_N) { + ff(IQ, IQN) { + clocked_on: "!C"; + next_state: "D"; + } + pin(D) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_P) { + ff(IQ, IQN) { + clocked_on: "C"; + next_state: "D"; + } + pin(D) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_NN0) { + ff(IQ, IQN) { + clocked_on: "!C"; + next_state: "D"; + clear: "!R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_NN1) { + ff(IQ, IQN) { + clocked_on: "!C"; + next_state: "D"; + preset: "!R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_NP0) { + ff(IQ, IQN) { + clocked_on: "!C"; + next_state: "D"; + clear: "R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_NP1) { + ff(IQ, IQN) { + clocked_on: "!C"; + next_state: "D"; + preset: "R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_PN0) { + ff(IQ, IQN) { + clocked_on: "C"; + next_state: "D"; + clear: "!R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_PN1) { + ff(IQ, IQN) { + clocked_on: "C"; + next_state: "D"; + preset: "!R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_PP0) { + ff(IQ, IQN) { + clocked_on: "C"; + next_state: "D"; + clear: "R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } + cell(DFF_PP1) { + ff(IQ, IQN) { + clocked_on: "C"; + next_state: "D"; + preset: "R"; + } + pin(D) { direction: input; } + pin(R) { direction: input; } + pin(C) { direction: input; clock: true; } + pin(Q) { direction: output; function: "IQ"; } + } +} diff --git a/resources/netlist/resources/kernel/share/cmp2lcu.v b/resources/netlist/resources/kernel/share/cmp2lcu.v new file mode 100644 index 0000000..4e62039 --- /dev/null +++ b/resources/netlist/resources/kernel/share/cmp2lcu.v @@ -0,0 +1,129 @@ +// This pass performs an optimisation that decomposes wide arithmetic +// comparisons into LUT-size chunks (as guided by the `LUT_WIDTH +// macro) connected to a single lookahead-carry-unit $lcu cell, +// which is typically mapped to dedicated (and fast) FPGA +// carry-chains. +(* techmap_celltype = "$lt $le $gt $ge" *) +module _80_lcu_cmp_ (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +(* force_downto *) +input [A_WIDTH-1:0] A; +(* force_downto *) +input [B_WIDTH-1:0] B; +(* force_downto *) +output [Y_WIDTH-1:0] Y; + +parameter _TECHMAP_CELLTYPE_ = ""; + +generate + if (_TECHMAP_CELLTYPE_ == "" || `LUT_WIDTH < 2) + wire _TECHMAP_FAIL_ = 1; + else if (_TECHMAP_CELLTYPE_ == "$lt") begin + // Transform $lt into $gt by swapping A and B + $gt #(.A_SIGNED(B_SIGNED), .B_SIGNED(A_SIGNED), .A_WIDTH(B_WIDTH), .B_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) _TECHMAP_REPLACE_ (.A(B), .B(A), .Y(Y)); + end + else if (_TECHMAP_CELLTYPE_ == "$le") begin + // Transform $le into $ge by swapping A and B + $ge #(.A_SIGNED(B_SIGNED), .B_SIGNED(A_SIGNED), .A_WIDTH(B_WIDTH), .B_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) _TECHMAP_REPLACE_ (.A(B), .B(A), .Y(Y)); + end + else begin + // Perform sign extension on A and B + localparam WIDTH = A_WIDTH > B_WIDTH ? A_WIDTH : B_WIDTH; + (* force_downto *) + wire [WIDTH-1:0] AA = {{(WIDTH-A_WIDTH){A_SIGNED ? A[A_WIDTH-1] : 1'b0}}, A}; + (* force_downto *) + wire [WIDTH-1:0] BB = {{(WIDTH-B_WIDTH){B_SIGNED ? B[B_WIDTH-1] : 1'b0}}, B}; + // For $ge operation, start with the assumption that A and B are + // equal (propagating this equality if A and B turn out to be so) + localparam CI = _TECHMAP_CELLTYPE_ == "$ge"; + $__CMP2LCU #(.AB_WIDTH(WIDTH), .AB_SIGNED(A_SIGNED && B_SIGNED), .LCU_WIDTH(1), .BUDGET(`LUT_WIDTH), .CI(CI)) + _TECHMAP_REPLACE_ (.A(AA), .B(BB), .P(1'b1), .G(1'b0), .Y(Y)); + end +endgenerate +endmodule + +module $__CMP2LCU (A, B, P, G, Y); + +parameter AB_WIDTH = 0; +parameter AB_SIGNED = 0; +parameter LCU_WIDTH = 1; +parameter BUDGET = 0; +parameter CI = 0; + +(* force_downto *) +input [AB_WIDTH-1:0] A; // A from original $gt/$ge +(* force_downto *) +input [AB_WIDTH-1:0] B; // B from original $gt/$ge +(* force_downto *) +input [LCU_WIDTH-1:0] P; // P of $lcu +(* force_downto *) +input [LCU_WIDTH-1:0] G; // G of $lcu +output Y; + +parameter [AB_WIDTH-1:0] _TECHMAP_CONSTMSK_A_ = 0; +parameter [AB_WIDTH-1:0] _TECHMAP_CONSTMSK_B_ = 0; +parameter [LCU_WIDTH-1:0] _TECHMAP_CONSTMSK_P_ = 0; + +generate + if (AB_WIDTH == 0) begin + (* force_downto *) + wire [LCU_WIDTH-1:0] CO; + $lcu #(.WIDTH(LCU_WIDTH)) _TECHMAP_REPLACE_ (.P(P), .G(G), .CI(CI), .CO(CO)); + assign Y = CO[LCU_WIDTH-1]; + end + else begin + localparam COST = + _TECHMAP_CONSTMSK_A_[AB_WIDTH-1:0] && _TECHMAP_CONSTMSK_B_[AB_WIDTH-1:0] + ? 0 + : (_TECHMAP_CONSTMSK_A_[AB_WIDTH-1:0] || _TECHMAP_CONSTMSK_B_[AB_WIDTH-1:0] + ? 1 + : 2); + + if (BUDGET < COST) + $__CMP2LCU #(.AB_WIDTH(AB_WIDTH), .AB_SIGNED(AB_SIGNED), .LCU_WIDTH(LCU_WIDTH+1), .BUDGET(`LUT_WIDTH), .CI(CI)) + _TECHMAP_REPLACE_ (.A(A), .B(B), .P({P, 1'b1}), .G({G, 1'b0}), .Y(Y)); + else begin + wire PP, GG; + // Bit-wise equality (xnor) of A and B + assign PP = A[AB_WIDTH-1] ^~ B[AB_WIDTH-1]; + if (AB_SIGNED) + assign GG = ~A[AB_WIDTH-1] & B[AB_WIDTH-1]; + else if (_TECHMAP_CONSTMSK_P_[LCU_WIDTH-1]) // First compare for LUT if P (and G) is constant + assign GG = A[AB_WIDTH-1] & ~B[AB_WIDTH-1]; + else + // Priority "encoder" that checks A[i] == 1'b1 && B[i] == 1'b0 + // from MSB down, deferring to less significant bits if the + // MSBs are equal + assign GG = P[0] & (A[AB_WIDTH-1] & ~B[AB_WIDTH-1]); + (* force_downto *) + wire [LCU_WIDTH-1:0] P_, G_; + if (LCU_WIDTH == 1) begin + // Propagate only if all pairs are equal + // (inconclusive evidence to say A >= B) + assign P_ = P[0] & PP; + // Generate if any comparisons call for it + assign G_ = G[0] | GG; + end + else begin + // Propagate only if all pairs are equal + // (inconclusive evidence to say A >= B) + assign P_ = {P[LCU_WIDTH-1:1], P[0] & PP}; + // Generate if any comparisons call for it + assign G_ = {G[LCU_WIDTH-1:1], G[0] | GG}; + end + if (AB_WIDTH == 1) + $__CMP2LCU #(.AB_WIDTH(AB_WIDTH-1), .AB_SIGNED(1'b0), .LCU_WIDTH(LCU_WIDTH), .BUDGET(BUDGET-COST), .CI(CI)) + _TECHMAP_REPLACE_ (.A(), .B(), .P(P_), .G(G_), .Y(Y)); + else + $__CMP2LCU #(.AB_WIDTH(AB_WIDTH-1), .AB_SIGNED(1'b0), .LCU_WIDTH(LCU_WIDTH), .BUDGET(BUDGET-COST), .CI(CI)) + _TECHMAP_REPLACE_ (.A(A[AB_WIDTH-2:0]), .B(B[AB_WIDTH-2:0]), .P(P_), .G(G_), .Y(Y)); + end + end +endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/cmp2lut.v b/resources/netlist/resources/kernel/share/cmp2lut.v new file mode 100644 index 0000000..c753bd2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/cmp2lut.v @@ -0,0 +1,98 @@ +// Certain arithmetic operations between a signal of width n and a constant can be directly mapped +// to a single k-LUT (where n <= k). This is preferable to normal alumacc techmapping process +// because for many targets, arithmetic techmapping creates hard logic (such as carry cells) which often +// cannot be optimized further. +// +// TODO: Currently, only comparisons with 1-bit output are mapped. Potentially, all arithmetic cells +// with n <= k inputs should be techmapped in this way, because this shortens the critical path +// from n to 1 by avoiding carry chains. + +(* techmap_celltype = "$lt $le $gt $ge" *) +module _90_lut_cmp_ (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +(* force_downto *) +input [A_WIDTH-1:0] A; +(* force_downto *) +input [B_WIDTH-1:0] B; +(* force_downto *) +output [Y_WIDTH-1:0] Y; + +parameter _TECHMAP_CELLTYPE_ = ""; + +parameter _TECHMAP_CONSTMSK_A_ = 0; +parameter _TECHMAP_CONSTVAL_A_ = 0; +parameter _TECHMAP_CONSTMSK_B_ = 0; +parameter _TECHMAP_CONSTVAL_B_ = 0; + +function automatic [(1 << `LUT_WIDTH)-1:0] gen_lut; + input integer width; + input integer operation; + input integer swap; + input integer sign; + input integer operand; + integer n, i_var, i_cst, lhs, rhs, o_bit; + begin + gen_lut = width'b0; + for (n = 0; n < (1 << width); n++) begin + if (sign) + i_var = n[width-1:0]; + else + i_var = n; + i_cst = operand; + if (swap) begin + lhs = i_cst; + rhs = i_var; + end else begin + lhs = i_var; + rhs = i_cst; + end + if (operation == 0) + o_bit = (lhs < rhs); + if (operation == 1) + o_bit = (lhs <= rhs); + if (operation == 2) + o_bit = (lhs > rhs); + if (operation == 3) + o_bit = (lhs >= rhs); + gen_lut = gen_lut | (o_bit << n); + end + end +endfunction + +generate + localparam operation = + _TECHMAP_CELLTYPE_ == "$lt" ? 0 : + _TECHMAP_CELLTYPE_ == "$le" ? 1 : + _TECHMAP_CELLTYPE_ == "$gt" ? 2 : + _TECHMAP_CELLTYPE_ == "$ge" ? 3 : + -1; + + if (A_WIDTH > `LUT_WIDTH || B_WIDTH > `LUT_WIDTH || Y_WIDTH != 1) + wire _TECHMAP_FAIL_ = 1; + else if (&_TECHMAP_CONSTMSK_B_) + \$lut #( + .WIDTH(A_WIDTH), + .LUT({ gen_lut(A_WIDTH, operation, 0, A_SIGNED && B_SIGNED, _TECHMAP_CONSTVAL_B_) }) + ) _TECHMAP_REPLACE_ ( + .A(A), + .Y(Y) + ); + else if (&_TECHMAP_CONSTMSK_A_) + \$lut #( + .WIDTH(B_WIDTH), + .LUT({ gen_lut(B_WIDTH, operation, 1, A_SIGNED && B_SIGNED, _TECHMAP_CONSTVAL_A_) }) + ) _TECHMAP_REPLACE_ ( + .A(B), + .Y(Y) + ); + else + wire _TECHMAP_FAIL_ = 1; +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/coolrunner2/cells_counter_map.v b/resources/netlist/resources/kernel/share/coolrunner2/cells_counter_map.v new file mode 100644 index 0000000..f9c44c8 --- /dev/null +++ b/resources/netlist/resources/kernel/share/coolrunner2/cells_counter_map.v @@ -0,0 +1,162 @@ +module \$__COUNT_ (CE, CLK, OUT, POUT, RST, UP); + + input wire CE; + input wire CLK; + output wire OUT; + (* force_downto *) + output wire[WIDTH-1:0] POUT; + input wire RST; + input wire UP; + + parameter COUNT_TO = 1; + parameter RESET_MODE = "RISING"; + parameter RESET_TO_MAX = 0; + parameter HAS_POUT = 0; + parameter HAS_CE = 0; + parameter WIDTH = 8; + parameter DIRECTION = "DOWN"; + + if (DIRECTION == "UP") begin + if (WIDTH < 2) begin + initial begin + $display("ERROR: \$__COUNT_ must be at least 2 bits wide (bug in extract_counter pass?)."); + $finish; + end + end + + // FIXME: Max width? + + assign OUT = POUT == COUNT_TO; + + if (HAS_CE) begin + genvar i; + for (i = 0; i < WIDTH; i++) begin: countbits + // each bit = (cur & !reset) ^ (all prev & !reset) + wire xor_to_mc_bitn; + FDCP #( + .INIT(0) + ) bitn_ff ( + .C(CLK), + .CLR(0), + .D(xor_to_mc_bitn), + .PRE(0), + .Q(POUT[i]) + ); + wire orterm_to_xor_bitn; + wire pterm0_to_or_bitn; + wire pterm1_to_or_bitn; + MACROCELL_XOR #( + .INVERT_OUT(0) + ) bitn_xor ( + .IN_ORTERM(orterm_to_xor_bitn), + .IN_PTC(pterm1_to_or_bitn), + .OUT(xor_to_mc_bitn) + ); + ORTERM #( + .WIDTH(1) + ) bitn_or ( + .IN(pterm0_to_or_bitn), + .OUT(orterm_to_xor_bitn) + ); + ANDTERM #( + .COMP_INP(1), + .TRUE_INP(1) + ) bitn_pterm0 ( + .IN(POUT[i]), + .IN_B(OUT), + .OUT(pterm0_to_or_bitn) + ); + ANDTERM #( + .COMP_INP(1), + .TRUE_INP(i + 1) + ) bitn_pterm1 ( + .IN({POUT[i-1:0], CE}), + .IN_B(OUT), + .OUT(pterm1_to_or_bitn) + ); + end + end else begin + // Bit0 is special; toggle unless reset + // cur reset out + // 0 0 1 + // 0 1 0 + // 1 0 0 + // 1 1 0 + wire xor_to_mc_bit0; + FDCP #( + .INIT(0) + ) bit0_ff ( + .C(CLK), + .CLR(0), + .D(xor_to_mc_bit0), + .PRE(0), + .Q(POUT[0]) + ); + wire pterm_to_xor_bit0; + MACROCELL_XOR #( + .INVERT_OUT(0) + ) bit0_xor ( + .IN_PTC(pterm_to_xor_bit0), + .OUT(xor_to_mc_bit0) + ); + ANDTERM #( + .COMP_INP(2), + .TRUE_INP(0) + ) bit0_pterm ( + .IN(), + .IN_B({POUT[0], OUT}), + .OUT(pterm_to_xor_bit0) + ); + + genvar i; + for (i = 1; i < WIDTH; i++) begin: countbits + // each bit = (cur & !reset) ^ (all prev & !reset) + wire xor_to_mc_bitn; + FDCP #( + .INIT(0) + ) bitn_ff ( + .C(CLK), + .CLR(0), + .D(xor_to_mc_bitn), + .PRE(0), + .Q(POUT[i]) + ); + wire orterm_to_xor_bitn; + wire pterm0_to_or_bitn; + wire pterm1_to_or_bitn; + MACROCELL_XOR #( + .INVERT_OUT(0) + ) bitn_xor ( + .IN_ORTERM(orterm_to_xor_bitn), + .IN_PTC(pterm1_to_or_bitn), + .OUT(xor_to_mc_bitn) + ); + ORTERM #( + .WIDTH(1) + ) bitn_or ( + .IN(pterm0_to_or_bitn), + .OUT(orterm_to_xor_bitn) + ); + ANDTERM #( + .COMP_INP(1), + .TRUE_INP(1) + ) bitn_pterm0 ( + .IN(POUT[i]), + .IN_B(OUT), + .OUT(pterm0_to_or_bitn) + ); + ANDTERM #( + .COMP_INP(1), + .TRUE_INP(i) + ) bitn_pterm1 ( + .IN(POUT[i-1:0]), + .IN_B(OUT), + .OUT(pterm1_to_or_bitn) + ); + end + end + end + + // FIXME: down counters + +endmodule diff --git a/resources/netlist/resources/kernel/share/coolrunner2/cells_latch.v b/resources/netlist/resources/kernel/share/coolrunner2/cells_latch.v new file mode 100644 index 0000000..f1e19da --- /dev/null +++ b/resources/netlist/resources/kernel/share/coolrunner2/cells_latch.v @@ -0,0 +1,19 @@ +module $_DLATCH_P_(input E, input D, output Q); + LDCP _TECHMAP_REPLACE_ ( + .D(D), + .G(E), + .Q(Q), + .PRE(1'b0), + .CLR(1'b0) + ); +endmodule + +module $_DLATCH_N_(input E, input D, output Q); + LDCP_N _TECHMAP_REPLACE_ ( + .D(D), + .G(E), + .Q(Q), + .PRE(1'b0), + .CLR(1'b0) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/coolrunner2/cells_sim.v b/resources/netlist/resources/kernel/share/coolrunner2/cells_sim.v new file mode 100644 index 0000000..562fb1e --- /dev/null +++ b/resources/netlist/resources/kernel/share/coolrunner2/cells_sim.v @@ -0,0 +1,310 @@ +module IBUF(input I, output O); + assign O = I; +endmodule + +module IOBUFE(input I, input E, output O, inout IO); + assign O = IO; + assign IO = E ? I : 1'bz; +endmodule + +module ANDTERM(IN, IN_B, OUT); + parameter TRUE_INP = 0; + parameter COMP_INP = 0; + + input [TRUE_INP-1:0] IN; + input [COMP_INP-1:0] IN_B; + output reg OUT; + + integer i; + + always @(*) begin + OUT = 1; + for (i = 0; i < TRUE_INP; i=i+1) + OUT = OUT & IN[i]; + for (i = 0; i < COMP_INP; i=i+1) + OUT = OUT & ~IN_B[i]; + end +endmodule + +module ORTERM(IN, OUT); + parameter WIDTH = 0; + + input [WIDTH-1:0] IN; + output reg OUT; + + integer i; + + always @(*) begin + OUT = 0; + for (i = 0; i < WIDTH; i=i+1) begin + OUT = OUT | IN[i]; + end + end +endmodule + +module MACROCELL_XOR(IN_PTC, IN_ORTERM, OUT); + parameter INVERT_OUT = 0; + + input IN_PTC; + input IN_ORTERM; + output wire OUT; + + wire xor_intermed; + + assign OUT = INVERT_OUT ? ~xor_intermed : xor_intermed; + assign xor_intermed = IN_ORTERM ^ IN_PTC; +endmodule + +module FDCP (C, PRE, CLR, D, Q); + parameter INIT = 0; + + input C, PRE, CLR, D; + output reg Q; + + initial begin + Q <= INIT; + end + + always @(posedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q <= 0; + else if (PRE == 1) + Q <= 1; + else + Q <= D; + end +endmodule + +module FDCP_N (C, PRE, CLR, D, Q); + parameter INIT = 0; + + input C, PRE, CLR, D; + output reg Q; + + initial begin + Q <= INIT; + end + + always @(negedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q <= 0; + else if (PRE == 1) + Q <= 1; + else + Q <= D; + end +endmodule + +module LDCP (G, PRE, CLR, D, Q); + parameter INIT = 0; + + input G, PRE, CLR, D; + output reg Q; + + initial begin + Q <= INIT; + end + + always @* begin + if (CLR == 1) + Q <= 0; + else if (G == 1) + Q <= D; + else if (PRE == 1) + Q <= 1; + end +endmodule + +module LDCP_N (G, PRE, CLR, D, Q); + parameter INIT = 0; + + input G, PRE, CLR, D; + output reg Q; + + initial begin + Q <= INIT; + end + + always @* begin + if (CLR == 1) + Q <= 0; + else if (G == 0) + Q <= D; + else if (PRE == 1) + Q <= 1; + end +endmodule + +module BUFG(I, O); + input I; + output O; + + assign O = I; +endmodule + +module BUFGSR(I, O); + parameter INVERT = 0; + + input I; + output O; + + assign O = INVERT ? ~I : I; +endmodule + +module BUFGTS(I, O); + parameter INVERT = 0; + + input I; + output O; + + assign O = INVERT ? ~I : I; +endmodule + +module FDDCP (C, PRE, CLR, D, Q); + parameter INIT = 0; + + input C, PRE, CLR, D; + output reg Q; + + initial begin + Q <= INIT; + end + + always @(posedge C, negedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q <= 0; + else if (PRE == 1) + Q <= 1; + else + Q <= D; + end +endmodule + +module FTCP (C, PRE, CLR, T, Q); + parameter INIT = 0; + + input C, PRE, CLR, T; + output wire Q; + reg Q_; + + initial begin + Q_ <= INIT; + end + + always @(posedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q_ <= 0; + else if (PRE == 1) + Q_ <= 1; + else if (T == 1) + Q_ <= ~Q_; + end + + assign Q = Q_; +endmodule + +module FTCP_N (C, PRE, CLR, T, Q); + parameter INIT = 0; + + input C, PRE, CLR, T; + output wire Q; + reg Q_; + + initial begin + Q_ <= INIT; + end + + always @(negedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q_ <= 0; + else if (PRE == 1) + Q_ <= 1; + else if (T == 1) + Q_ <= ~Q_; + end + + assign Q = Q_; +endmodule + +module FTDCP (C, PRE, CLR, T, Q); + parameter INIT = 0; + + input C, PRE, CLR, T; + output wire Q; + reg Q_; + + initial begin + Q_ <= INIT; + end + + always @(posedge C, negedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q_ <= 0; + else if (PRE == 1) + Q_ <= 1; + else if (T == 1) + Q_ <= ~Q_; + end + + assign Q = Q_; +endmodule + +module FDCPE (C, PRE, CLR, D, Q, CE); + parameter INIT = 0; + + input C, PRE, CLR, D, CE; + output reg Q; + + initial begin + Q <= INIT; + end + + always @(posedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q <= 0; + else if (PRE == 1) + Q <= 1; + else if (CE == 1) + Q <= D; + end +endmodule + +module FDCPE_N (C, PRE, CLR, D, Q, CE); + parameter INIT = 0; + + input C, PRE, CLR, D, CE; + output reg Q; + + initial begin + Q <= INIT; + end + + always @(negedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q <= 0; + else if (PRE == 1) + Q <= 1; + else if (CE == 1) + Q <= D; + end +endmodule + +module FDDCPE (C, PRE, CLR, D, Q, CE); + parameter INIT = 0; + + input C, PRE, CLR, D, CE; + output reg Q; + + initial begin + Q <= INIT; + end + + always @(posedge C, negedge C, posedge PRE, posedge CLR) begin + if (CLR == 1) + Q <= 0; + else if (PRE == 1) + Q <= 1; + else if (CE == 1) + Q <= D; + end +endmodule diff --git a/resources/netlist/resources/kernel/share/coolrunner2/tff_extract.v b/resources/netlist/resources/kernel/share/coolrunner2/tff_extract.v new file mode 100644 index 0000000..b4237dd --- /dev/null +++ b/resources/netlist/resources/kernel/share/coolrunner2/tff_extract.v @@ -0,0 +1,41 @@ +module FTCP (C, PRE, CLR, T, Q); + input C, PRE, CLR, T; + output wire Q; + + wire xorout; + + $_XOR_ xorgate ( + .A(T), + .B(Q), + .Y(xorout), + ); + + $_DFFSR_PPP_ dff ( + .C(C), + .D(xorout), + .Q(Q), + .S(PRE), + .R(CLR), + ); +endmodule + +module FTCP_N (C, PRE, CLR, T, Q); + input C, PRE, CLR, T; + output wire Q; + + wire xorout; + + $_XOR_ xorgate ( + .A(T), + .B(Q), + .Y(xorout), + ); + + $_DFFSR_NPP_ dff ( + .C(C), + .D(xorout), + .Q(Q), + .S(PRE), + .R(CLR), + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/coolrunner2/xc2_dff.lib b/resources/netlist/resources/kernel/share/coolrunner2/xc2_dff.lib new file mode 100644 index 0000000..b578493 --- /dev/null +++ b/resources/netlist/resources/kernel/share/coolrunner2/xc2_dff.lib @@ -0,0 +1,31 @@ +library(xc2_dff) { + cell(FDCP) { + area: 1; + ff("IQ", "IQN") { clocked_on: C; + next_state: D; + clear: "CLR"; + preset: "PRE"; } + pin(C) { direction: input; + clock: true; } + pin(D) { direction: input; } + pin(Q) { direction: output; + function: "IQ"; } + pin(CLR) { direction: input; } + pin(PRE) { direction: input; } + } + + cell(FDCP_N) { + area: 1; + ff("IQ", "IQN") { clocked_on: "!C"; + next_state: D; + clear: "CLR"; + preset: "PRE"; } + pin(C) { direction: input; + clock: true; } + pin(D) { direction: input; } + pin(Q) { direction: output; + function: "IQ"; } + pin(CLR) { direction: input; } + pin(PRE) { direction: input; } + } +} diff --git a/resources/netlist/resources/kernel/share/dff2ff.v b/resources/netlist/resources/kernel/share/dff2ff.v new file mode 100644 index 0000000..33a79ff --- /dev/null +++ b/resources/netlist/resources/kernel/share/dff2ff.v @@ -0,0 +1,16 @@ +(* techmap_celltype = "$dff" *) +module dff2ff (CLK, D, Q); + parameter WIDTH = 1; + parameter CLK_POLARITY = 1; + + input CLK; + (* force_downto *) + input [WIDTH-1:0] D; + (* force_downto *) + output reg [WIDTH-1:0] Q; + + wire [1023:0] _TECHMAP_DO_ = "proc;;"; + + always @($global_clock) + Q <= D; +endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/arith_map.v b/resources/netlist/resources/kernel/share/ecp5/arith_map.v new file mode 100644 index 0000000..9334785 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/arith_map.v @@ -0,0 +1,90 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * Copyright (C) 2018 gatecat + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_ecp5_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 4; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + function integer round_up2; + input integer N; + begin + round_up2 = ((N + 1) / 2) * 2; + end + endfunction + + localparam Y_WIDTH2 = round_up2(Y_WIDTH); + + (* force_downto *) + wire [Y_WIDTH2-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH2-1:0] BB = BI ? ~B_buf : B_buf; + (* force_downto *) + wire [Y_WIDTH2-1:0] BX = B_buf; + (* force_downto *) + wire [Y_WIDTH2-1:0] C = {CO, CI}; + (* force_downto *) + wire [Y_WIDTH2-1:0] FCO, Y1; + + genvar i; + generate for (i = 0; i < Y_WIDTH2; i = i + 2) begin:slice + CCU2C #( + .INIT0(16'b1001011010101010), + .INIT1(16'b1001011010101010), + .INJECT1_0("NO"), + .INJECT1_1("NO") + ) ccu2c_i ( + .CIN(C[i]), + .A0(AA[i]), .B0(BX[i]), .C0(BI), .D0(1'b1), + .A1(AA[i+1]), .B1(BX[i+1]), .C1(BI), .D1(1'b1), + .S0(Y[i]), .S1(Y1[i]), + .COUT(FCO[i]) + ); + + assign CO[i] = (AA[i] && BB[i]) || (C[i] && (AA[i] || BB[i])); + if (i+1 < Y_WIDTH) begin + assign CO[i+1] = FCO[i]; + assign Y[i+1] = Y1[i]; + end + end endgenerate + + assign X = AA ^ BB; +endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/brams.txt b/resources/netlist/resources/kernel/share/ecp5/brams.txt new file mode 100644 index 0000000..db28a40 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/brams.txt @@ -0,0 +1,52 @@ +ram block $__ECP5_DP16KD_ { + abits 14; + widths 1 2 4 9 18 per_port; + byte 9; + cost 128; + init no_undef; + port srsw "A" "B" { + clock anyedge; + clken; + wrbe_separate; + portoption "WRITEMODE" "NORMAL" { + rdwr no_change; + } + portoption "WRITEMODE" "WRITETHROUGH" { + rdwr new; + } + portoption "WRITEMODE" "READBEFOREWRITE" { + rdwr old; + } + option "RESETMODE" "SYNC" { + rdsrst zero ungated block_wr; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } +} + +ram block $__ECP5_PDPW16KD_ { + abits 14; + widths 1 2 4 9 18 36 per_port; + byte 9; + cost 128; + init no_undef; + port sr "R" { + clock anyedge; + clken; + option "RESETMODE" "SYNC" { + rdsrst zero ungated; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } + port sw "W" { + width 36; + clock anyedge; + clken; + } +} diff --git a/resources/netlist/resources/kernel/share/ecp5/brams_map.v b/resources/netlist/resources/kernel/share/ecp5/brams_map.v new file mode 100644 index 0000000..22e6e06 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/brams_map.v @@ -0,0 +1,489 @@ +module $__ECP5_DP16KD_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +parameter PORT_A_WIDTH = 18; +parameter PORT_A_WR_BE_WIDTH = 2; +parameter PORT_A_CLK_POL = 1; +parameter PORT_A_OPTION_WRITEMODE = "NORMAL"; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [13:0] PORT_A_ADDR; +input [PORT_A_WR_BE_WIDTH-1:0] PORT_A_WR_BE; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +parameter PORT_B_WIDTH = 18; +parameter PORT_B_WR_BE_WIDTH = 2; +parameter PORT_B_CLK_POL = 1; +parameter PORT_B_OPTION_WRITEMODE = "NORMAL"; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; +input [13:0] PORT_B_ADDR; +input [PORT_B_WR_BE_WIDTH-1:0] PORT_B_WR_BE; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; + +function [319:0] init_slice; + input integer idx; + integer i, j; + init_slice = 0; + for (i = 0; i < 16; i = i + 1) begin + init_slice[i*20+:18] = INIT[(idx * 16 + i) * 18+:18]; + end +endfunction + +wire [17:0] DOA; +wire [17:0] DOB; +wire [17:0] DIA = PORT_A_WR_DATA; +wire [17:0] DIB = PORT_B_WR_DATA; + +assign PORT_A_RD_DATA = DOA; +assign PORT_B_RD_DATA = DOB; + +DP16KD #( + .INITVAL_00(init_slice('h00)), + .INITVAL_01(init_slice('h01)), + .INITVAL_02(init_slice('h02)), + .INITVAL_03(init_slice('h03)), + .INITVAL_04(init_slice('h04)), + .INITVAL_05(init_slice('h05)), + .INITVAL_06(init_slice('h06)), + .INITVAL_07(init_slice('h07)), + .INITVAL_08(init_slice('h08)), + .INITVAL_09(init_slice('h09)), + .INITVAL_0A(init_slice('h0a)), + .INITVAL_0B(init_slice('h0b)), + .INITVAL_0C(init_slice('h0c)), + .INITVAL_0D(init_slice('h0d)), + .INITVAL_0E(init_slice('h0e)), + .INITVAL_0F(init_slice('h0f)), + .INITVAL_10(init_slice('h10)), + .INITVAL_11(init_slice('h11)), + .INITVAL_12(init_slice('h12)), + .INITVAL_13(init_slice('h13)), + .INITVAL_14(init_slice('h14)), + .INITVAL_15(init_slice('h15)), + .INITVAL_16(init_slice('h16)), + .INITVAL_17(init_slice('h17)), + .INITVAL_18(init_slice('h18)), + .INITVAL_19(init_slice('h19)), + .INITVAL_1A(init_slice('h1a)), + .INITVAL_1B(init_slice('h1b)), + .INITVAL_1C(init_slice('h1c)), + .INITVAL_1D(init_slice('h1d)), + .INITVAL_1E(init_slice('h1e)), + .INITVAL_1F(init_slice('h1f)), + .INITVAL_20(init_slice('h20)), + .INITVAL_21(init_slice('h21)), + .INITVAL_22(init_slice('h22)), + .INITVAL_23(init_slice('h23)), + .INITVAL_24(init_slice('h24)), + .INITVAL_25(init_slice('h25)), + .INITVAL_26(init_slice('h26)), + .INITVAL_27(init_slice('h27)), + .INITVAL_28(init_slice('h28)), + .INITVAL_29(init_slice('h29)), + .INITVAL_2A(init_slice('h2a)), + .INITVAL_2B(init_slice('h2b)), + .INITVAL_2C(init_slice('h2c)), + .INITVAL_2D(init_slice('h2d)), + .INITVAL_2E(init_slice('h2e)), + .INITVAL_2F(init_slice('h2f)), + .INITVAL_30(init_slice('h30)), + .INITVAL_31(init_slice('h31)), + .INITVAL_32(init_slice('h32)), + .INITVAL_33(init_slice('h33)), + .INITVAL_34(init_slice('h34)), + .INITVAL_35(init_slice('h35)), + .INITVAL_36(init_slice('h36)), + .INITVAL_37(init_slice('h37)), + .INITVAL_38(init_slice('h38)), + .INITVAL_39(init_slice('h39)), + .INITVAL_3A(init_slice('h3a)), + .INITVAL_3B(init_slice('h3b)), + .INITVAL_3C(init_slice('h3c)), + .INITVAL_3D(init_slice('h3d)), + .INITVAL_3E(init_slice('h3e)), + .INITVAL_3F(init_slice('h3f)), + .DATA_WIDTH_A(PORT_A_WIDTH), + .DATA_WIDTH_B(PORT_B_WIDTH), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), + .CSDECODE_A("0b000"), + .CSDECODE_B("0b000"), + .CLKAMUX(PORT_A_CLK_POL ? "CLKA" : "INV"), + .CLKBMUX(PORT_B_CLK_POL ? "CLKB" : "INV"), + .WRITEMODE_A(PORT_A_OPTION_WRITEMODE), + .WRITEMODE_B(PORT_B_OPTION_WRITEMODE), + .GSR("AUTO") +) _TECHMAP_REPLACE_ ( + .CLKA(PORT_A_CLK), + .WEA(PORT_A_WIDTH == 18 ? PORT_A_WR_EN : (PORT_A_WR_EN | PORT_A_WR_BE[0])), + .CEA(PORT_A_CLK_EN), + .OCEA(1'b1), + .RSTA(OPTION_RESETMODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST), + .CSA0(1'b0), + .CSA1(1'b0), + .CSA2(1'b0), + .ADA0(PORT_A_WIDTH == 18 ? PORT_A_WR_BE[0] : PORT_A_ADDR[0]), + .ADA1(PORT_A_WIDTH == 18 ? PORT_A_WR_BE[1] : PORT_A_ADDR[1]), + .ADA2(PORT_A_ADDR[2]), + .ADA3(PORT_A_ADDR[3]), + .ADA4(PORT_A_ADDR[4]), + .ADA5(PORT_A_ADDR[5]), + .ADA6(PORT_A_ADDR[6]), + .ADA7(PORT_A_ADDR[7]), + .ADA8(PORT_A_ADDR[8]), + .ADA9(PORT_A_ADDR[9]), + .ADA10(PORT_A_ADDR[10]), + .ADA11(PORT_A_ADDR[11]), + .ADA12(PORT_A_ADDR[12]), + .ADA13(PORT_A_ADDR[13]), + .DIA0(DIA[0]), + .DIA1(DIA[1]), + .DIA2(DIA[2]), + .DIA3(DIA[3]), + .DIA4(DIA[4]), + .DIA5(DIA[5]), + .DIA6(DIA[6]), + .DIA7(DIA[7]), + .DIA8(DIA[8]), + .DIA9(DIA[9]), + .DIA10(DIA[10]), + .DIA11(DIA[11]), + .DIA12(DIA[12]), + .DIA13(DIA[13]), + .DIA14(DIA[14]), + .DIA15(DIA[15]), + .DIA16(DIA[16]), + .DIA17(DIA[17]), + .DOA0(DOA[0]), + .DOA1(DOA[1]), + .DOA2(DOA[2]), + .DOA3(DOA[3]), + .DOA4(DOA[4]), + .DOA5(DOA[5]), + .DOA6(DOA[6]), + .DOA7(DOA[7]), + .DOA8(DOA[8]), + .DOA9(DOA[9]), + .DOA10(DOA[10]), + .DOA11(DOA[11]), + .DOA12(DOA[12]), + .DOA13(DOA[13]), + .DOA14(DOA[14]), + .DOA15(DOA[15]), + .DOA16(DOA[16]), + .DOA17(DOA[17]), + + .CLKB(PORT_B_CLK), + .WEB(PORT_B_WIDTH == 18 ? PORT_B_WR_EN : (PORT_B_WR_EN | PORT_B_WR_BE[0])), + .CEB(PORT_B_CLK_EN), + .OCEB(1'b1), + .RSTB(OPTION_RESETMODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST), + .CSB0(1'b0), + .CSB1(1'b0), + .CSB2(1'b0), + .ADB0(PORT_B_WIDTH == 18 ? PORT_B_WR_BE[0] : PORT_B_ADDR[0]), + .ADB1(PORT_B_WIDTH == 18 ? PORT_B_WR_BE[1] : PORT_B_ADDR[1]), + .ADB2(PORT_B_ADDR[2]), + .ADB3(PORT_B_ADDR[3]), + .ADB4(PORT_B_ADDR[4]), + .ADB5(PORT_B_ADDR[5]), + .ADB6(PORT_B_ADDR[6]), + .ADB7(PORT_B_ADDR[7]), + .ADB8(PORT_B_ADDR[8]), + .ADB9(PORT_B_ADDR[9]), + .ADB10(PORT_B_ADDR[10]), + .ADB11(PORT_B_ADDR[11]), + .ADB12(PORT_B_ADDR[12]), + .ADB13(PORT_B_ADDR[13]), + .DIB0(DIB[0]), + .DIB1(DIB[1]), + .DIB2(DIB[2]), + .DIB3(DIB[3]), + .DIB4(DIB[4]), + .DIB5(DIB[5]), + .DIB6(DIB[6]), + .DIB7(DIB[7]), + .DIB8(DIB[8]), + .DIB9(DIB[9]), + .DIB10(DIB[10]), + .DIB11(DIB[11]), + .DIB12(DIB[12]), + .DIB13(DIB[13]), + .DIB14(DIB[14]), + .DIB15(DIB[15]), + .DIB16(DIB[16]), + .DIB17(DIB[17]), + .DOB0(DOB[0]), + .DOB1(DOB[1]), + .DOB2(DOB[2]), + .DOB3(DOB[3]), + .DOB4(DOB[4]), + .DOB5(DOB[5]), + .DOB6(DOB[6]), + .DOB7(DOB[7]), + .DOB8(DOB[8]), + .DOB9(DOB[9]), + .DOB10(DOB[10]), + .DOB11(DOB[11]), + .DOB12(DOB[12]), + .DOB13(DOB[13]), + .DOB14(DOB[14]), + .DOB15(DOB[15]), + .DOB16(DOB[16]), + .DOB17(DOB[17]), +); + +endmodule + + +module $__ECP5_PDPW16KD_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +parameter PORT_R_WIDTH = 36; +parameter PORT_R_CLK_POL = 1; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input PORT_R_RD_SRST; +input PORT_R_RD_ARST; +input [13:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +parameter PORT_W_WIDTH = 36; +parameter PORT_W_WR_EN_WIDTH = 4; +parameter PORT_W_CLK_POL = 1; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [13:0] PORT_W_ADDR; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +function [319:0] init_slice; + input integer idx; + integer i, j; + init_slice = 0; + for (i = 0; i < 16; i = i + 1) begin + init_slice[i*20+:18] = INIT[(idx * 16 + i) * 18+:18]; + end +endfunction + +wire [35:0] DI = PORT_W_WR_DATA; +wire [35:0] DO; + +assign PORT_R_RD_DATA = PORT_R_WIDTH == 36 ? DO : DO[35:18]; + +DP16KD #( + .INITVAL_00(init_slice('h00)), + .INITVAL_01(init_slice('h01)), + .INITVAL_02(init_slice('h02)), + .INITVAL_03(init_slice('h03)), + .INITVAL_04(init_slice('h04)), + .INITVAL_05(init_slice('h05)), + .INITVAL_06(init_slice('h06)), + .INITVAL_07(init_slice('h07)), + .INITVAL_08(init_slice('h08)), + .INITVAL_09(init_slice('h09)), + .INITVAL_0A(init_slice('h0a)), + .INITVAL_0B(init_slice('h0b)), + .INITVAL_0C(init_slice('h0c)), + .INITVAL_0D(init_slice('h0d)), + .INITVAL_0E(init_slice('h0e)), + .INITVAL_0F(init_slice('h0f)), + .INITVAL_10(init_slice('h10)), + .INITVAL_11(init_slice('h11)), + .INITVAL_12(init_slice('h12)), + .INITVAL_13(init_slice('h13)), + .INITVAL_14(init_slice('h14)), + .INITVAL_15(init_slice('h15)), + .INITVAL_16(init_slice('h16)), + .INITVAL_17(init_slice('h17)), + .INITVAL_18(init_slice('h18)), + .INITVAL_19(init_slice('h19)), + .INITVAL_1A(init_slice('h1a)), + .INITVAL_1B(init_slice('h1b)), + .INITVAL_1C(init_slice('h1c)), + .INITVAL_1D(init_slice('h1d)), + .INITVAL_1E(init_slice('h1e)), + .INITVAL_1F(init_slice('h1f)), + .INITVAL_20(init_slice('h20)), + .INITVAL_21(init_slice('h21)), + .INITVAL_22(init_slice('h22)), + .INITVAL_23(init_slice('h23)), + .INITVAL_24(init_slice('h24)), + .INITVAL_25(init_slice('h25)), + .INITVAL_26(init_slice('h26)), + .INITVAL_27(init_slice('h27)), + .INITVAL_28(init_slice('h28)), + .INITVAL_29(init_slice('h29)), + .INITVAL_2A(init_slice('h2a)), + .INITVAL_2B(init_slice('h2b)), + .INITVAL_2C(init_slice('h2c)), + .INITVAL_2D(init_slice('h2d)), + .INITVAL_2E(init_slice('h2e)), + .INITVAL_2F(init_slice('h2f)), + .INITVAL_30(init_slice('h30)), + .INITVAL_31(init_slice('h31)), + .INITVAL_32(init_slice('h32)), + .INITVAL_33(init_slice('h33)), + .INITVAL_34(init_slice('h34)), + .INITVAL_35(init_slice('h35)), + .INITVAL_36(init_slice('h36)), + .INITVAL_37(init_slice('h37)), + .INITVAL_38(init_slice('h38)), + .INITVAL_39(init_slice('h39)), + .INITVAL_3A(init_slice('h3a)), + .INITVAL_3B(init_slice('h3b)), + .INITVAL_3C(init_slice('h3c)), + .INITVAL_3D(init_slice('h3d)), + .INITVAL_3E(init_slice('h3e)), + .INITVAL_3F(init_slice('h3f)), + .DATA_WIDTH_A(PORT_W_WIDTH), + .DATA_WIDTH_B(PORT_R_WIDTH), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), + .CSDECODE_A("0b000"), + .CSDECODE_B("0b000"), + .CLKAMUX(PORT_W_CLK_POL ? "CLKA" : "INV"), + .CLKBMUX(PORT_R_CLK_POL ? "CLKB" : "INV"), + .GSR("AUTO") +) _TECHMAP_REPLACE_ ( + .CLKA(PORT_W_CLK), + .WEA(PORT_W_WIDTH >= 18 ? 1'b1 : PORT_W_WR_EN[0]), + .CEA(PORT_W_CLK_EN), + .OCEA(1'b0), + .RSTA(1'b0), + .CSA0(1'b0), + .CSA1(1'b0), + .CSA2(1'b0), + .ADA0(PORT_W_WIDTH >= 18 ? PORT_W_WR_EN[0] : PORT_W_ADDR[0]), + .ADA1(PORT_W_WIDTH >= 18 ? PORT_W_WR_EN[1] : PORT_W_ADDR[1]), + .ADA2(PORT_W_WIDTH >= 36 ? PORT_W_WR_EN[2] : PORT_W_ADDR[2]), + .ADA3(PORT_W_WIDTH >= 36 ? PORT_W_WR_EN[3] : PORT_W_ADDR[3]), + .ADA4(PORT_W_ADDR[4]), + .ADA5(PORT_W_ADDR[5]), + .ADA6(PORT_W_ADDR[6]), + .ADA7(PORT_W_ADDR[7]), + .ADA8(PORT_W_ADDR[8]), + .ADA9(PORT_W_ADDR[9]), + .ADA10(PORT_W_ADDR[10]), + .ADA11(PORT_W_ADDR[11]), + .ADA12(PORT_W_ADDR[12]), + .ADA13(PORT_W_ADDR[13]), + .DIA0(DI[0]), + .DIA1(DI[1]), + .DIA2(DI[2]), + .DIA3(DI[3]), + .DIA4(DI[4]), + .DIA5(DI[5]), + .DIA6(DI[6]), + .DIA7(DI[7]), + .DIA8(DI[8]), + .DIA9(DI[9]), + .DIA10(DI[10]), + .DIA11(DI[11]), + .DIA12(DI[12]), + .DIA13(DI[13]), + .DIA14(DI[14]), + .DIA15(DI[15]), + .DIA16(DI[16]), + .DIA17(DI[17]), + .DIB0(DI[18]), + .DIB1(DI[19]), + .DIB2(DI[20]), + .DIB3(DI[21]), + .DIB4(DI[22]), + .DIB5(DI[23]), + .DIB6(DI[24]), + .DIB7(DI[25]), + .DIB8(DI[26]), + .DIB9(DI[27]), + .DIB10(DI[28]), + .DIB11(DI[29]), + .DIB12(DI[30]), + .DIB13(DI[31]), + .DIB14(DI[32]), + .DIB15(DI[33]), + .DIB16(DI[34]), + .DIB17(DI[35]), + + .CLKB(PORT_R_CLK), + .WEB(1'b0), + .CEB(PORT_R_CLK_EN), + .OCEB(1'b1), + .RSTB(OPTION_RESETMODE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST), + .CSB0(1'b0), + .CSB1(1'b0), + .CSB2(1'b0), + .ADB0(PORT_R_ADDR[0]), + .ADB1(PORT_R_ADDR[1]), + .ADB2(PORT_R_ADDR[2]), + .ADB3(PORT_R_ADDR[3]), + .ADB4(PORT_R_ADDR[4]), + .ADB5(PORT_R_ADDR[5]), + .ADB6(PORT_R_ADDR[6]), + .ADB7(PORT_R_ADDR[7]), + .ADB8(PORT_R_ADDR[8]), + .ADB9(PORT_R_ADDR[9]), + .ADB10(PORT_R_ADDR[10]), + .ADB11(PORT_R_ADDR[11]), + .ADB12(PORT_R_ADDR[12]), + .ADB13(PORT_R_ADDR[13]), + .DOA0(DO[0]), + .DOA1(DO[1]), + .DOA2(DO[2]), + .DOA3(DO[3]), + .DOA4(DO[4]), + .DOA5(DO[5]), + .DOA6(DO[6]), + .DOA7(DO[7]), + .DOA8(DO[8]), + .DOA9(DO[9]), + .DOA10(DO[10]), + .DOA11(DO[11]), + .DOA12(DO[12]), + .DOA13(DO[13]), + .DOA14(DO[14]), + .DOA15(DO[15]), + .DOA16(DO[16]), + .DOA17(DO[17]), + .DOB0(DO[18]), + .DOB1(DO[19]), + .DOB2(DO[20]), + .DOB3(DO[21]), + .DOB4(DO[22]), + .DOB5(DO[23]), + .DOB6(DO[24]), + .DOB7(DO[25]), + .DOB8(DO[26]), + .DOB9(DO[27]), + .DOB10(DO[28]), + .DOB11(DO[29]), + .DOB12(DO[30]), + .DOB13(DO[31]), + .DOB14(DO[32]), + .DOB15(DO[33]), + .DOB16(DO[34]), + .DOB17(DO[35]), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/cells_bb.v b/resources/netlist/resources/kernel/share/ecp5/cells_bb.v new file mode 100644 index 0000000..fc352a5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/cells_bb.v @@ -0,0 +1,832 @@ +// ECP5 Blackbox cells +// FIXME: Create sim models + +(* blackbox *) +module MULT18X18D( + input A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, + input B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17, + input C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, + input SIGNEDA, SIGNEDB, SOURCEA, SOURCEB, + input CLK0, CLK1, CLK2, CLK3, + input CE0, CE1, CE2, CE3, + input RST0, RST1, RST2, RST3, + input SRIA0, SRIA1, SRIA2, SRIA3, SRIA4, SRIA5, SRIA6, SRIA7, SRIA8, SRIA9, SRIA10, SRIA11, SRIA12, SRIA13, SRIA14, SRIA15, SRIA16, SRIA17, + input SRIB0, SRIB1, SRIB2, SRIB3, SRIB4, SRIB5, SRIB6, SRIB7, SRIB8, SRIB9, SRIB10, SRIB11, SRIB12, SRIB13, SRIB14, SRIB15, SRIB16, SRIB17, + output SROA0, SROA1, SROA2, SROA3, SROA4, SROA5, SROA6, SROA7, SROA8, SROA9, SROA10, SROA11, SROA12, SROA13, SROA14, SROA15, SROA16, SROA17, + output SROB0, SROB1, SROB2, SROB3, SROB4, SROB5, SROB6, SROB7, SROB8, SROB9, SROB10, SROB11, SROB12, SROB13, SROB14, SROB15, SROB16, SROB17, + output ROA0, ROA1, ROA2, ROA3, ROA4, ROA5, ROA6, ROA7, ROA8, ROA9, ROA10, ROA11, ROA12, ROA13, ROA14, ROA15, ROA16, ROA17, + output ROB0, ROB1, ROB2, ROB3, ROB4, ROB5, ROB6, ROB7, ROB8, ROB9, ROB10, ROB11, ROB12, ROB13, ROB14, ROB15, ROB16, ROB17, + output ROC0, ROC1, ROC2, ROC3, ROC4, ROC5, ROC6, ROC7, ROC8, ROC9, ROC10, ROC11, ROC12, ROC13, ROC14, ROC15, ROC16, ROC17, + output P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, + output SIGNEDP +); + parameter REG_INPUTA_CLK = "NONE"; + parameter REG_INPUTA_CE = "CE0"; + parameter REG_INPUTA_RST = "RST0"; + parameter REG_INPUTB_CLK = "NONE"; + parameter REG_INPUTB_CE = "CE0"; + parameter REG_INPUTB_RST = "RST0"; + parameter REG_INPUTC_CLK = "NONE"; + parameter REG_INPUTC_CE = "CE0"; + parameter REG_INPUTC_RST = "RST0"; + parameter REG_PIPELINE_CLK = "NONE"; + parameter REG_PIPELINE_CE = "CE0"; + parameter REG_PIPELINE_RST = "RST0"; + parameter REG_OUTPUT_CLK = "NONE"; + parameter REG_OUTPUT_CE = "CE0"; + parameter REG_OUTPUT_RST = "RST0"; + parameter [127:0] CLK0_DIV = "ENABLED"; + parameter [127:0] CLK1_DIV = "ENABLED"; + parameter [127:0] CLK2_DIV = "ENABLED"; + parameter [127:0] CLK3_DIV = "ENABLED"; + parameter HIGHSPEED_CLK = "NONE"; + parameter [127:0] GSR = "ENABLED"; + parameter CAS_MATCH_REG = "FALSE"; + parameter [127:0] SOURCEB_MODE = "B_SHIFT"; + parameter [127:0] MULT_BYPASS = "DISABLED"; + parameter [127:0] RESETMODE = "SYNC"; +endmodule + +(* blackbox *) +module ALU54B( + input CLK0, CLK1, CLK2, CLK3, + input CE0, CE1, CE2, CE3, + input RST0, RST1, RST2, RST3, + input SIGNEDIA, SIGNEDIB, SIGNEDCIN, + input A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31, A32, A33, A34, A35, + input B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, + input C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28, C29, C30, C31, C32, C33, C34, C35, C36, C37, C38, C39, C40, C41, C42, C43, C44, C45, C46, C47, C48, C49, C50, C51, C52, C53, + input CFB0, CFB1, CFB2, CFB3, CFB4, CFB5, CFB6, CFB7, CFB8, CFB9, CFB10, CFB11, CFB12, CFB13, CFB14, CFB15, CFB16, CFB17, CFB18, CFB19, CFB20, CFB21, CFB22, CFB23, CFB24, CFB25, CFB26, CFB27, CFB28, CFB29, CFB30, CFB31, CFB32, CFB33, CFB34, CFB35, CFB36, CFB37, CFB38, CFB39, CFB40, CFB41, CFB42, CFB43, CFB44, CFB45, CFB46, CFB47, CFB48, CFB49, CFB50, CFB51, CFB52, CFB53, + input MA0, MA1, MA2, MA3, MA4, MA5, MA6, MA7, MA8, MA9, MA10, MA11, MA12, MA13, MA14, MA15, MA16, MA17, MA18, MA19, MA20, MA21, MA22, MA23, MA24, MA25, MA26, MA27, MA28, MA29, MA30, MA31, MA32, MA33, MA34, MA35, + input MB0, MB1, MB2, MB3, MB4, MB5, MB6, MB7, MB8, MB9, MB10, MB11, MB12, MB13, MB14, MB15, MB16, MB17, MB18, MB19, MB20, MB21, MB22, MB23, MB24, MB25, MB26, MB27, MB28, MB29, MB30, MB31, MB32, MB33, MB34, MB35, + input CIN0, CIN1, CIN2, CIN3, CIN4, CIN5, CIN6, CIN7, CIN8, CIN9, CIN10, CIN11, CIN12, CIN13, CIN14, CIN15, CIN16, CIN17, CIN18, CIN19, CIN20, CIN21, CIN22, CIN23, CIN24, CIN25, CIN26, CIN27, CIN28, CIN29, CIN30, CIN31, CIN32, CIN33, CIN34, CIN35, CIN36, CIN37, CIN38, CIN39, CIN40, CIN41, CIN42, CIN43, CIN44, CIN45, CIN46, CIN47, CIN48, CIN49, CIN50, CIN51, CIN52, CIN53, + input OP0, OP1, OP2, OP3, OP4, OP5, OP6, OP7, OP8, OP9, OP10, + output R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31, R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46, R47, R48, R49, R50, R51, R52, R53, + output CO0, CO1, CO2, CO3, CO4, CO5, CO6, CO7, CO8, CO9, CO10, CO11, CO12, CO13, CO14, CO15, CO16, CO17, CO18, CO19, CO20, CO21, CO22, CO23, CO24, CO25, CO26, CO27, CO28, CO29, CO30, CO31, CO32, CO33, CO34, CO35, CO36, CO37, CO38, CO39, CO40, CO41, CO42, CO43, CO44, CO45, CO46, CO47, CO48, CO49, CO50, CO51, CO52, CO53, + output EQZ, EQZM, EQOM, EQPAT, EQPATB, + output OVER, UNDER, OVERUNDER, + output SIGNEDR +); + parameter REG_INPUTC0_CLK = "NONE"; + parameter REG_INPUTC0_CE = "CE0"; + parameter REG_INPUTC0_RST = "RST0"; + parameter REG_INPUTC1_CLK = "NONE"; + parameter REG_INPUTC1_CE = "CE0"; + parameter REG_INPUTC1_RST = "RST0"; + parameter REG_OPCODEOP0_0_CLK = "NONE"; + parameter REG_OPCODEOP0_0_CE = "CE0"; + parameter REG_OPCODEOP0_0_RST = "RST0"; + parameter REG_OPCODEOP1_0_CLK = "NONE"; + parameter REG_OPCODEOP0_1_CLK = "NONE"; + parameter REG_OPCODEOP0_1_CE = "CE0"; + parameter REG_OPCODEOP0_1_RST = "RST0"; + parameter REG_OPCODEOP1_1_CLK = "NONE"; + parameter REG_OPCODEIN_0_CLK = "NONE"; + parameter REG_OPCODEIN_0_CE = "CE0"; + parameter REG_OPCODEIN_0_RST = "RST0"; + parameter REG_OPCODEIN_1_CLK = "NONE"; + parameter REG_OPCODEIN_1_CE = "CE0"; + parameter REG_OPCODEIN_1_RST = "RST0"; + parameter REG_OUTPUT0_CLK = "NONE"; + parameter REG_OUTPUT0_CE = "CE0"; + parameter REG_OUTPUT0_RST = "RST0"; + parameter REG_OUTPUT1_CLK = "NONE"; + parameter REG_OUTPUT1_CE = "CE0"; + parameter REG_OUTPUT1_RST = "RST0"; + parameter REG_FLAG_CLK = "NONE"; + parameter REG_FLAG_CE = "CE0"; + parameter REG_FLAG_RST = "RST0"; + parameter REG_INPUTCFB_CLK = "NONE"; + parameter REG_INPUTCFB_CE = "CE0"; + parameter REG_INPUTCFB_RST = "RST0"; + parameter [127:0] MCPAT_SOURCE = "STATIC"; + parameter [127:0] MASKPAT_SOURCE = "STATIC"; + parameter MASK01 = "0x00000000000000"; + parameter [127:0] CLK0_DIV = "ENABLED"; + parameter [127:0] CLK1_DIV = "ENABLED"; + parameter [127:0] CLK2_DIV = "ENABLED"; + parameter [127:0] CLK3_DIV = "ENABLED"; + parameter MCPAT = "0x00000000000000"; + parameter MASKPAT = "0x00000000000000"; + parameter RNDPAT = "0x00000000000000"; + parameter [127:0] GSR = "ENABLED"; + parameter [127:0] RESETMODE = "SYNC"; + parameter MULT9_MODE = "DISABLED"; + parameter FORCE_ZERO_BARREL_SHIFT = "DISABLED"; + parameter LEGACY = "DISABLED"; +endmodule + +(* blackbox *) +module EHXPLLL ( + input CLKI, CLKFB, + input PHASESEL1, PHASESEL0, PHASEDIR, PHASESTEP, PHASELOADREG, + input STDBY, PLLWAKESYNC, + input RST, ENCLKOP, ENCLKOS, ENCLKOS2, ENCLKOS3, + output CLKOP, CLKOS, CLKOS2, CLKOS3, + output LOCK, INTLOCK, + output REFCLK, CLKINTFB +); + parameter CLKI_DIV = 1; + parameter CLKFB_DIV = 1; + parameter CLKOP_DIV = 8; + parameter CLKOS_DIV = 8; + parameter CLKOS2_DIV = 8; + parameter CLKOS3_DIV = 8; + parameter CLKOP_ENABLE = "ENABLED"; + parameter CLKOS_ENABLE = "DISABLED"; + parameter CLKOS2_ENABLE = "DISABLED"; + parameter CLKOS3_ENABLE = "DISABLED"; + parameter CLKOP_CPHASE = 0; + parameter CLKOS_CPHASE = 0; + parameter CLKOS2_CPHASE = 0; + parameter CLKOS3_CPHASE = 0; + parameter CLKOP_FPHASE = 0; + parameter CLKOS_FPHASE = 0; + parameter CLKOS2_FPHASE = 0; + parameter CLKOS3_FPHASE = 0; + parameter FEEDBK_PATH = "CLKOP"; + parameter CLKOP_TRIM_POL = "RISING"; + parameter CLKOP_TRIM_DELAY = 0; + parameter CLKOS_TRIM_POL = "RISING"; + parameter CLKOS_TRIM_DELAY = 0; + parameter OUTDIVIDER_MUXA = "DIVA"; + parameter OUTDIVIDER_MUXB = "DIVB"; + parameter OUTDIVIDER_MUXC = "DIVC"; + parameter OUTDIVIDER_MUXD = "DIVD"; + parameter PLL_LOCK_MODE = 0; + parameter PLL_LOCK_DELAY = 200; + parameter STDBY_ENABLE = "DISABLED"; + parameter REFIN_RESET = "DISABLED"; + parameter SYNC_ENABLE = "DISABLED"; + parameter INT_LOCK_STICKY = "ENABLED"; + parameter DPHASE_SOURCE = "DISABLED"; + parameter PLLRST_ENA = "DISABLED"; + parameter INTFB_WAKE = "DISABLED"; +endmodule + +(* blackbox *) +module DTR( + input STARTPULSE, + output DTROUT7, DTROUT6, DTROUT5, DTROUT4, DTROUT3, DTROUT2, DTROUT1, DTROUT0 +); +endmodule + +(* blackbox *) +module OSCG( + output OSC +); +parameter DIV = 128; +endmodule + +(* blackbox *) (* keep *) +module USRMCLK( + input USRMCLKI, USRMCLKTS, + output USRMCLKO +); +endmodule + +(* blackbox *) (* keep *) +module JTAGG( + input TCK, TMS, TDI, JTDO2, JTDO1, + output TDO, JTDI, JTCK, JRTI2, JRTI1, + output JSHIFT, JUPDATE, JRSTN, JCE2, JCE1 +); +parameter ER1 = "ENABLED"; +parameter ER2 = "ENABLED"; +endmodule + +(* blackbox *) +module DELAYF( + input A, LOADN, MOVE, DIRECTION, + output Z, CFLAG +); + parameter DEL_MODE = "USER_DEFINED"; + parameter DEL_VALUE = 0; +endmodule + +(* blackbox *) +module DELAYG( + input A, + output Z +); + parameter DEL_MODE = "USER_DEFINED"; + parameter DEL_VALUE = 0; +endmodule + +(* blackbox *) +module IDDRX1F( + input D, SCLK, RST, + output Q0, Q1 +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module IDDRX2F( + input D, SCLK, ECLK, RST, ALIGNWD, + output Q0, Q1, Q2, Q3 +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module IDDR71B( + input D, SCLK, ECLK, RST, ALIGNWD, + output Q0, Q1, Q2, Q3, Q4, Q5, Q6 +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module IDDRX2DQA( + input D, DQSR90, ECLK, SCLK, RST, + input RDPNTR2, RDPNTR1, RDPNTR0, WRPNTR2, WRPNTR1, WRPNTR0, + output Q0, Q1, Q2, Q3, QWL +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module ODDRX1F( + input SCLK, RST, D0, D1, + output Q +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module ODDRX2F( + input SCLK, ECLK, RST, D0, D1, D2, D3, + output Q +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module ODDR71B( + input SCLK, ECLK, RST, D0, D1, D2, D3, D4, D5, D6, + output Q +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module OSHX2A( + input D0, D1, RST, ECLK, SCLK, + output Q +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module ODDRX2DQA( + input D0, D1, D2, D3, RST, ECLK, SCLK, DQSW270, + output Q +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module ODDRX2DQSB( + input D0, D1, D2, D3, RST, ECLK, SCLK, DQSW, + output Q +); + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module TSHX2DQA( + input T0, T1, SCLK, ECLK, DQSW270, RST, + output Q +); + parameter GSR = "ENABLED"; + parameter REGSET = "SET"; +endmodule + +(* blackbox *) +module TSHX2DQSA( + input T0, T1, SCLK, ECLK, DQSW, RST, + output Q +); + parameter GSR = "ENABLED"; + parameter REGSET = "SET"; +endmodule + +(* blackbox *) +module DQSBUFM( + input DQSI, READ1, READ0, READCLKSEL2, READCLKSEL1, READCLKSEL0, DDRDEL, + input ECLK, SCLK, + input DYNDELAY7, DYNDELAY6, DYNDELAY5, DYNDELAY4, + input DYNDELAY3, DYNDELAY2, DYNDELAY1, DYNDELAY0, + input RST, RDLOADN, RDMOVE, RDDIRECTION, WRLOADN, WRMOVE, WRDIRECTION, PAUSE, + output DQSR90, DQSW, DQSW270, + output RDPNTR2, RDPNTR1, RDPNTR0, WRPNTR2, WRPNTR1, WRPNTR0, + output DATAVALID, BURSTDET, RDCFLAG, WRCFLAG +); + parameter DQS_LI_DEL_ADJ = "FACTORYONLY"; + parameter DQS_LI_DEL_VAL = 0; + parameter DQS_LO_DEL_ADJ = "FACTORYONLY"; + parameter DQS_LO_DEL_VAL = 0; + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module DDRDLLA( + input CLK, RST, UDDCNTLN, FREEZE, + output LOCK, DDRDEL, DCNTL7, DCNTL6, DCNTL5, DCNTL4, DCNTL3, DCNTL2, DCNTL1, DCNTL0 +); + parameter FORCE_MAX_DELAY = "NO"; + parameter GSR = "ENABLED"; +endmodule + +(* blackbox *) +module DLLDELD( + input A, DDRDEL, LOADN, MOVE, DIRECTION, + output Z, CFLAG +); + parameter DEL_ADJ = "PLUS"; + parameter DEL_VAL = 0; +endmodule + +(* blackbox *) +module CLKDIVF( + input CLKI, RST, ALIGNWD, + output CDIVX +); + parameter GSR = "DISABLED"; + parameter DIV = "2.0"; +endmodule + +(* blackbox *) +module ECLKSYNCB( + input ECLKI, STOP, + output ECLKO +); +endmodule + +(* blackbox *) +module ECLKBRIDGECS( + input CLK0, CLK1, SEL, + output ECSOUT +); +endmodule + +(* blackbox *) +module DCCA( + input CLKI, CE, + output CLKO +); +endmodule + +(* blackbox *) +module DCSC( + input CLK1, CLK0, + input SEL1, SEL0, + input MODESEL, + output DCSOUT +); + parameter DCSMODE = "POS"; +endmodule + +(* blackbox *) (* keep *) +module DCUA( + input CH0_HDINP, CH1_HDINP, CH0_HDINN, CH1_HDINN, + input D_TXBIT_CLKP_FROM_ND, D_TXBIT_CLKN_FROM_ND, D_SYNC_ND, D_TXPLL_LOL_FROM_ND, + input CH0_RX_REFCLK, CH1_RX_REFCLK, CH0_FF_RXI_CLK, CH1_FF_RXI_CLK, CH0_FF_TXI_CLK, CH1_FF_TXI_CLK, CH0_FF_EBRD_CLK, CH1_FF_EBRD_CLK, + input CH0_FF_TX_D_0, CH1_FF_TX_D_0, CH0_FF_TX_D_1, CH1_FF_TX_D_1, CH0_FF_TX_D_2, CH1_FF_TX_D_2, CH0_FF_TX_D_3, CH1_FF_TX_D_3, + input CH0_FF_TX_D_4, CH1_FF_TX_D_4, CH0_FF_TX_D_5, CH1_FF_TX_D_5, CH0_FF_TX_D_6, CH1_FF_TX_D_6, CH0_FF_TX_D_7, CH1_FF_TX_D_7, + input CH0_FF_TX_D_8, CH1_FF_TX_D_8, CH0_FF_TX_D_9, CH1_FF_TX_D_9, CH0_FF_TX_D_10, CH1_FF_TX_D_10, CH0_FF_TX_D_11, CH1_FF_TX_D_11, + input CH0_FF_TX_D_12, CH1_FF_TX_D_12, CH0_FF_TX_D_13, CH1_FF_TX_D_13, CH0_FF_TX_D_14, CH1_FF_TX_D_14, CH0_FF_TX_D_15, CH1_FF_TX_D_15, + input CH0_FF_TX_D_16, CH1_FF_TX_D_16, CH0_FF_TX_D_17, CH1_FF_TX_D_17, CH0_FF_TX_D_18, CH1_FF_TX_D_18, CH0_FF_TX_D_19, CH1_FF_TX_D_19, + input CH0_FF_TX_D_20, CH1_FF_TX_D_20, CH0_FF_TX_D_21, CH1_FF_TX_D_21, CH0_FF_TX_D_22, CH1_FF_TX_D_22, CH0_FF_TX_D_23, CH1_FF_TX_D_23, + input CH0_FFC_EI_EN, CH1_FFC_EI_EN, CH0_FFC_PCIE_DET_EN, CH1_FFC_PCIE_DET_EN, CH0_FFC_PCIE_CT, CH1_FFC_PCIE_CT, CH0_FFC_SB_INV_RX, CH1_FFC_SB_INV_RX, + input CH0_FFC_ENABLE_CGALIGN, CH1_FFC_ENABLE_CGALIGN, CH0_FFC_SIGNAL_DETECT, CH1_FFC_SIGNAL_DETECT, CH0_FFC_FB_LOOPBACK, CH1_FFC_FB_LOOPBACK, CH0_FFC_SB_PFIFO_LP, CH1_FFC_SB_PFIFO_LP, + input CH0_FFC_PFIFO_CLR, CH1_FFC_PFIFO_CLR, CH0_FFC_RATE_MODE_RX, CH1_FFC_RATE_MODE_RX, CH0_FFC_RATE_MODE_TX, CH1_FFC_RATE_MODE_TX, CH0_FFC_DIV11_MODE_RX, CH1_FFC_DIV11_MODE_RX, CH0_FFC_RX_GEAR_MODE, CH1_FFC_RX_GEAR_MODE, CH0_FFC_TX_GEAR_MODE, CH1_FFC_TX_GEAR_MODE, + input CH0_FFC_DIV11_MODE_TX, CH1_FFC_DIV11_MODE_TX, CH0_FFC_LDR_CORE2TX_EN, CH1_FFC_LDR_CORE2TX_EN, CH0_FFC_LANE_TX_RST, CH1_FFC_LANE_TX_RST, CH0_FFC_LANE_RX_RST, CH1_FFC_LANE_RX_RST, + input CH0_FFC_RRST, CH1_FFC_RRST, CH0_FFC_TXPWDNB, CH1_FFC_TXPWDNB, CH0_FFC_RXPWDNB, CH1_FFC_RXPWDNB, CH0_LDR_CORE2TX, CH1_LDR_CORE2TX, + input D_SCIWDATA0, D_SCIWDATA1, D_SCIWDATA2, D_SCIWDATA3, D_SCIWDATA4, D_SCIWDATA5, D_SCIWDATA6, D_SCIWDATA7, + input D_SCIADDR0, D_SCIADDR1, D_SCIADDR2, D_SCIADDR3, D_SCIADDR4, D_SCIADDR5, D_SCIENAUX, D_SCISELAUX, + input CH0_SCIEN, CH1_SCIEN, CH0_SCISEL, CH1_SCISEL, D_SCIRD, D_SCIWSTN, D_CYAWSTN, D_FFC_SYNC_TOGGLE, + input D_FFC_DUAL_RST, D_FFC_MACRO_RST, D_FFC_MACROPDB, D_FFC_TRST, CH0_FFC_CDR_EN_BITSLIP, CH1_FFC_CDR_EN_BITSLIP, D_SCAN_ENABLE, D_SCAN_IN_0, + input D_SCAN_IN_1, D_SCAN_IN_2, D_SCAN_IN_3, D_SCAN_IN_4, D_SCAN_IN_5, D_SCAN_IN_6, D_SCAN_IN_7, D_SCAN_MODE, + input D_SCAN_RESET, D_CIN0, D_CIN1, D_CIN2, D_CIN3, D_CIN4, D_CIN5, D_CIN6,D_CIN7, D_CIN8, D_CIN9, D_CIN10, D_CIN11, + output CH0_HDOUTP, CH1_HDOUTP, CH0_HDOUTN, CH1_HDOUTN, D_TXBIT_CLKP_TO_ND, D_TXBIT_CLKN_TO_ND, D_SYNC_PULSE2ND, D_TXPLL_LOL_TO_ND, + output CH0_FF_RX_F_CLK, CH1_FF_RX_F_CLK, CH0_FF_RX_H_CLK, CH1_FF_RX_H_CLK, CH0_FF_TX_F_CLK, CH1_FF_TX_F_CLK, CH0_FF_TX_H_CLK, CH1_FF_TX_H_CLK, + output CH0_FF_RX_PCLK, CH1_FF_RX_PCLK, CH0_FF_TX_PCLK, CH1_FF_TX_PCLK, CH0_FF_RX_D_0, CH1_FF_RX_D_0, CH0_FF_RX_D_1, CH1_FF_RX_D_1, + output CH0_FF_RX_D_2, CH1_FF_RX_D_2, CH0_FF_RX_D_3, CH1_FF_RX_D_3, CH0_FF_RX_D_4, CH1_FF_RX_D_4, CH0_FF_RX_D_5, CH1_FF_RX_D_5, + output CH0_FF_RX_D_6, CH1_FF_RX_D_6, CH0_FF_RX_D_7, CH1_FF_RX_D_7, CH0_FF_RX_D_8, CH1_FF_RX_D_8, CH0_FF_RX_D_9, CH1_FF_RX_D_9, + output CH0_FF_RX_D_10, CH1_FF_RX_D_10, CH0_FF_RX_D_11, CH1_FF_RX_D_11, CH0_FF_RX_D_12, CH1_FF_RX_D_12, CH0_FF_RX_D_13, CH1_FF_RX_D_13, + output CH0_FF_RX_D_14, CH1_FF_RX_D_14, CH0_FF_RX_D_15, CH1_FF_RX_D_15, CH0_FF_RX_D_16, CH1_FF_RX_D_16, CH0_FF_RX_D_17, CH1_FF_RX_D_17, + output CH0_FF_RX_D_18, CH1_FF_RX_D_18, CH0_FF_RX_D_19, CH1_FF_RX_D_19, CH0_FF_RX_D_20, CH1_FF_RX_D_20, CH0_FF_RX_D_21, CH1_FF_RX_D_21, + output CH0_FF_RX_D_22, CH1_FF_RX_D_22, CH0_FF_RX_D_23, CH1_FF_RX_D_23, CH0_FFS_PCIE_DONE, CH1_FFS_PCIE_DONE, CH0_FFS_PCIE_CON, CH1_FFS_PCIE_CON, + output CH0_FFS_RLOS, CH1_FFS_RLOS, CH0_FFS_LS_SYNC_STATUS, CH1_FFS_LS_SYNC_STATUS, CH0_FFS_CC_UNDERRUN, CH1_FFS_CC_UNDERRUN, CH0_FFS_CC_OVERRUN, CH1_FFS_CC_OVERRUN, + output CH0_FFS_RXFBFIFO_ERROR, CH1_FFS_RXFBFIFO_ERROR, CH0_FFS_TXFBFIFO_ERROR, CH1_FFS_TXFBFIFO_ERROR, CH0_FFS_RLOL, CH1_FFS_RLOL, CH0_FFS_SKP_ADDED, CH1_FFS_SKP_ADDED, + output CH0_FFS_SKP_DELETED, CH1_FFS_SKP_DELETED, CH0_LDR_RX2CORE, CH1_LDR_RX2CORE, D_SCIRDATA0, D_SCIRDATA1, D_SCIRDATA2, D_SCIRDATA3, + output D_SCIRDATA4, D_SCIRDATA5, D_SCIRDATA6, D_SCIRDATA7, D_SCIINT, D_SCAN_OUT_0, D_SCAN_OUT_1, D_SCAN_OUT_2, D_SCAN_OUT_3, D_SCAN_OUT_4, D_SCAN_OUT_5, D_SCAN_OUT_6, D_SCAN_OUT_7, + output D_COUT0, D_COUT1, D_COUT2, D_COUT3, D_COUT4, D_COUT5, D_COUT6, D_COUT7, D_COUT8, D_COUT9, D_COUT10, D_COUT11, D_COUT12, D_COUT13, D_COUT14, D_COUT15, D_COUT16, D_COUT17, D_COUT18, D_COUT19, + + input D_REFCLKI, + output D_FFS_PLOL +); + parameter CH0_AUTO_CALIB_EN = "0b0"; + parameter CH0_AUTO_FACQ_EN = "0b0"; + parameter CH0_BAND_THRESHOLD = "0b000000"; + parameter CH0_CALIB_CK_MODE = "0b0"; + parameter CH0_CC_MATCH_1 = "0b0000000000"; + parameter CH0_CC_MATCH_2 = "0b0000000000"; + parameter CH0_CC_MATCH_3 = "0b0000000000"; + parameter CH0_CC_MATCH_4 = "0b0000000000"; + parameter CH0_CDR_CNT4SEL = "0b00"; + parameter CH0_CDR_CNT8SEL = "0b00"; + parameter CH0_CTC_BYPASS = "0b0"; + parameter CH0_DCOATDCFG = "0b00"; + parameter CH0_DCOATDDLY = "0b00"; + parameter CH0_DCOBYPSATD = "0b0"; + parameter CH0_DCOCALDIV = "0b000"; + parameter CH0_DCOCTLGI = "0b000"; + parameter CH0_DCODISBDAVOID = "0b0"; + parameter CH0_DCOFLTDAC = "0b00"; + parameter CH0_DCOFTNRG = "0b000"; + parameter CH0_DCOIOSTUNE = "0b000"; + parameter CH0_DCOITUNE = "0b00"; + parameter CH0_DCOITUNE4LSB = "0b000"; + parameter CH0_DCOIUPDNX2 = "0b0"; + parameter CH0_DCONUOFLSB = "0b000"; + parameter CH0_DCOSCALEI = "0b00"; + parameter CH0_DCOSTARTVAL = "0b000"; + parameter CH0_DCOSTEP = "0b00"; + parameter CH0_DEC_BYPASS = "0b0"; + parameter CH0_ENABLE_CG_ALIGN = "0b0"; + parameter CH0_ENC_BYPASS = "0b0"; + parameter CH0_FF_RX_F_CLK_DIS = "0b0"; + parameter CH0_FF_RX_H_CLK_EN = "0b0"; + parameter CH0_FF_TX_F_CLK_DIS = "0b0"; + parameter CH0_FF_TX_H_CLK_EN = "0b0"; + parameter CH0_GE_AN_ENABLE = "0b0"; + parameter CH0_INVERT_RX = "0b0"; + parameter CH0_INVERT_TX = "0b0"; + parameter CH0_LDR_CORE2TX_SEL = "0b0"; + parameter CH0_LDR_RX2CORE_SEL = "0b0"; + parameter CH0_LEQ_OFFSET_SEL = "0b0"; + parameter CH0_LEQ_OFFSET_TRIM = "0b000"; + parameter CH0_LSM_DISABLE = "0b0"; + parameter CH0_MATCH_2_ENABLE = "0b0"; + parameter CH0_MATCH_4_ENABLE = "0b0"; + parameter CH0_MIN_IPG_CNT = "0b00"; + parameter CH0_PCIE_EI_EN = "0b0"; + parameter CH0_PCIE_MODE = "0b0"; + parameter CH0_PCS_DET_TIME_SEL = "0b00"; + parameter CH0_PDEN_SEL = "0b0"; + parameter CH0_PRBS_ENABLE = "0b0"; + parameter CH0_PRBS_LOCK = "0b0"; + parameter CH0_PRBS_SELECTION = "0b0"; + parameter CH0_RATE_MODE_RX = "0b0"; + parameter CH0_RATE_MODE_TX = "0b0"; + parameter CH0_RCV_DCC_EN = "0b0"; + parameter CH0_REG_BAND_OFFSET = "0b0000"; + parameter CH0_REG_BAND_SEL = "0b000000"; + parameter CH0_REG_IDAC_EN = "0b0"; + parameter CH0_REG_IDAC_SEL = "0b0000000000"; + parameter CH0_REQ_EN = "0b0"; + parameter CH0_REQ_LVL_SET = "0b00"; + parameter CH0_RIO_MODE = "0b0"; + parameter CH0_RLOS_SEL = "0b0"; + parameter CH0_RPWDNB = "0b0"; + parameter CH0_RTERM_RX = "0b00000"; + parameter CH0_RTERM_TX = "0b00000"; + parameter CH0_RXIN_CM = "0b00"; + parameter CH0_RXTERM_CM = "0b00"; + parameter CH0_RX_DCO_CK_DIV = "0b000"; + parameter CH0_RX_DIV11_SEL = "0b0"; + parameter CH0_RX_GEAR_BYPASS = "0b0"; + parameter CH0_RX_GEAR_MODE = "0b0"; + parameter CH0_RX_LOS_CEQ = "0b00"; + parameter CH0_RX_LOS_EN = "0b0"; + parameter CH0_RX_LOS_HYST_EN = "0b0"; + parameter CH0_RX_LOS_LVL = "0b000"; + parameter CH0_RX_RATE_SEL = "0b0000"; + parameter CH0_RX_SB_BYPASS = "0b0"; + parameter CH0_SB_BYPASS = "0b0"; + parameter CH0_SEL_SD_RX_CLK = "0b0"; + parameter CH0_TDRV_DAT_SEL = "0b00"; + parameter CH0_TDRV_POST_EN = "0b0"; + parameter CH0_TDRV_PRE_EN = "0b0"; + parameter CH0_TDRV_SLICE0_CUR = "0b000"; + parameter CH0_TDRV_SLICE0_SEL = "0b00"; + parameter CH0_TDRV_SLICE1_CUR = "0b000"; + parameter CH0_TDRV_SLICE1_SEL = "0b00"; + parameter CH0_TDRV_SLICE2_CUR = "0b00"; + parameter CH0_TDRV_SLICE2_SEL = "0b00"; + parameter CH0_TDRV_SLICE3_CUR = "0b00"; + parameter CH0_TDRV_SLICE3_SEL = "0b00"; + parameter CH0_TDRV_SLICE4_CUR = "0b00"; + parameter CH0_TDRV_SLICE4_SEL = "0b00"; + parameter CH0_TDRV_SLICE5_CUR = "0b00"; + parameter CH0_TDRV_SLICE5_SEL = "0b00"; + parameter CH0_TPWDNB = "0b0"; + parameter CH0_TX_CM_SEL = "0b00"; + parameter CH0_TX_DIV11_SEL = "0b0"; + parameter CH0_TX_GEAR_BYPASS = "0b0"; + parameter CH0_TX_GEAR_MODE = "0b0"; + parameter CH0_TX_POST_SIGN = "0b0"; + parameter CH0_TX_PRE_SIGN = "0b0"; + parameter CH0_UC_MODE = "0b0"; + parameter CH0_UDF_COMMA_A = "0b0000000000"; + parameter CH0_UDF_COMMA_B = "0b0000000000"; + parameter CH0_UDF_COMMA_MASK = "0b0000000000"; + parameter CH0_WA_BYPASS = "0b0"; + parameter CH0_WA_MODE = "0b0"; + parameter CH1_AUTO_CALIB_EN = "0b0"; + parameter CH1_AUTO_FACQ_EN = "0b0"; + parameter CH1_BAND_THRESHOLD = "0b000000"; + parameter CH1_CALIB_CK_MODE = "0b0"; + parameter CH1_CC_MATCH_1 = "0b0000000000"; + parameter CH1_CC_MATCH_2 = "0b0000000000"; + parameter CH1_CC_MATCH_3 = "0b0000000000"; + parameter CH1_CC_MATCH_4 = "0b0000000000"; + parameter CH1_CDR_CNT4SEL = "0b00"; + parameter CH1_CDR_CNT8SEL = "0b00"; + parameter CH1_CTC_BYPASS = "0b0"; + parameter CH1_DCOATDCFG = "0b00"; + parameter CH1_DCOATDDLY = "0b00"; + parameter CH1_DCOBYPSATD = "0b0"; + parameter CH1_DCOCALDIV = "0b000"; + parameter CH1_DCOCTLGI = "0b000"; + parameter CH1_DCODISBDAVOID = "0b0"; + parameter CH1_DCOFLTDAC = "0b00"; + parameter CH1_DCOFTNRG = "0b000"; + parameter CH1_DCOIOSTUNE = "0b000"; + parameter CH1_DCOITUNE = "0b00"; + parameter CH1_DCOITUNE4LSB = "0b000"; + parameter CH1_DCOIUPDNX2 = "0b0"; + parameter CH1_DCONUOFLSB = "0b000"; + parameter CH1_DCOSCALEI = "0b00"; + parameter CH1_DCOSTARTVAL = "0b000"; + parameter CH1_DCOSTEP = "0b00"; + parameter CH1_DEC_BYPASS = "0b0"; + parameter CH1_ENABLE_CG_ALIGN = "0b0"; + parameter CH1_ENC_BYPASS = "0b0"; + parameter CH1_FF_RX_F_CLK_DIS = "0b0"; + parameter CH1_FF_RX_H_CLK_EN = "0b0"; + parameter CH1_FF_TX_F_CLK_DIS = "0b0"; + parameter CH1_FF_TX_H_CLK_EN = "0b0"; + parameter CH1_GE_AN_ENABLE = "0b0"; + parameter CH1_INVERT_RX = "0b0"; + parameter CH1_INVERT_TX = "0b0"; + parameter CH1_LDR_CORE2TX_SEL = "0b0"; + parameter CH1_LDR_RX2CORE_SEL = "0b0"; + parameter CH1_LEQ_OFFSET_SEL = "0b0"; + parameter CH1_LEQ_OFFSET_TRIM = "0b000"; + parameter CH1_LSM_DISABLE = "0b0"; + parameter CH1_MATCH_2_ENABLE = "0b0"; + parameter CH1_MATCH_4_ENABLE = "0b0"; + parameter CH1_MIN_IPG_CNT = "0b00"; + parameter CH1_PCIE_EI_EN = "0b0"; + parameter CH1_PCIE_MODE = "0b0"; + parameter CH1_PCS_DET_TIME_SEL = "0b00"; + parameter CH1_PDEN_SEL = "0b0"; + parameter CH1_PRBS_ENABLE = "0b0"; + parameter CH1_PRBS_LOCK = "0b0"; + parameter CH1_PRBS_SELECTION = "0b0"; + parameter CH1_RATE_MODE_RX = "0b0"; + parameter CH1_RATE_MODE_TX = "0b0"; + parameter CH1_RCV_DCC_EN = "0b0"; + parameter CH1_REG_BAND_OFFSET = "0b0000"; + parameter CH1_REG_BAND_SEL = "0b000000"; + parameter CH1_REG_IDAC_EN = "0b0"; + parameter CH1_REG_IDAC_SEL = "0b0000000000"; + parameter CH1_REQ_EN = "0b0"; + parameter CH1_REQ_LVL_SET = "0b00"; + parameter CH1_RIO_MODE = "0b0"; + parameter CH1_RLOS_SEL = "0b0"; + parameter CH1_RPWDNB = "0b0"; + parameter CH1_RTERM_RX = "0b00000"; + parameter CH1_RTERM_TX = "0b00000"; + parameter CH1_RXIN_CM = "0b00"; + parameter CH1_RXTERM_CM = "0b00"; + parameter CH1_RX_DCO_CK_DIV = "0b000"; + parameter CH1_RX_DIV11_SEL = "0b0"; + parameter CH1_RX_GEAR_BYPASS = "0b0"; + parameter CH1_RX_GEAR_MODE = "0b0"; + parameter CH1_RX_LOS_CEQ = "0b00"; + parameter CH1_RX_LOS_EN = "0b0"; + parameter CH1_RX_LOS_HYST_EN = "0b0"; + parameter CH1_RX_LOS_LVL = "0b000"; + parameter CH1_RX_RATE_SEL = "0b0000"; + parameter CH1_RX_SB_BYPASS = "0b0"; + parameter CH1_SB_BYPASS = "0b0"; + parameter CH1_SEL_SD_RX_CLK = "0b0"; + parameter CH1_TDRV_DAT_SEL = "0b00"; + parameter CH1_TDRV_POST_EN = "0b0"; + parameter CH1_TDRV_PRE_EN = "0b0"; + parameter CH1_TDRV_SLICE0_CUR = "0b000"; + parameter CH1_TDRV_SLICE0_SEL = "0b00"; + parameter CH1_TDRV_SLICE1_CUR = "0b000"; + parameter CH1_TDRV_SLICE1_SEL = "0b00"; + parameter CH1_TDRV_SLICE2_CUR = "0b00"; + parameter CH1_TDRV_SLICE2_SEL = "0b00"; + parameter CH1_TDRV_SLICE3_CUR = "0b00"; + parameter CH1_TDRV_SLICE3_SEL = "0b00"; + parameter CH1_TDRV_SLICE4_CUR = "0b00"; + parameter CH1_TDRV_SLICE4_SEL = "0b00"; + parameter CH1_TDRV_SLICE5_CUR = "0b00"; + parameter CH1_TDRV_SLICE5_SEL = "0b00"; + parameter CH1_TPWDNB = "0b0"; + parameter CH1_TX_CM_SEL = "0b00"; + parameter CH1_TX_DIV11_SEL = "0b0"; + parameter CH1_TX_GEAR_BYPASS = "0b0"; + parameter CH1_TX_GEAR_MODE = "0b0"; + parameter CH1_TX_POST_SIGN = "0b0"; + parameter CH1_TX_PRE_SIGN = "0b0"; + parameter CH1_UC_MODE = "0b0"; + parameter CH1_UDF_COMMA_A = "0b0000000000"; + parameter CH1_UDF_COMMA_B = "0b0000000000"; + parameter CH1_UDF_COMMA_MASK = "0b0000000000"; + parameter CH1_WA_BYPASS = "0b0"; + parameter CH1_WA_MODE = "0b0"; + parameter D_BITCLK_FROM_ND_EN = "0b0"; + parameter D_BITCLK_LOCAL_EN = "0b0"; + parameter D_BITCLK_ND_EN = "0b0"; + parameter D_BUS8BIT_SEL = "0b0"; + parameter D_CDR_LOL_SET = "0b00"; + parameter D_CMUSETBIASI = "0b00"; + parameter D_CMUSETI4CPP = "0b0000"; + parameter D_CMUSETI4CPZ = "0b0000"; + parameter D_CMUSETI4VCO = "0b00"; + parameter D_CMUSETICP4P = "0b00"; + parameter D_CMUSETICP4Z = "0b000"; + parameter D_CMUSETINITVCT = "0b00"; + parameter D_CMUSETISCL4VCO = "0b000"; + parameter D_CMUSETP1GM = "0b000"; + parameter D_CMUSETP2AGM = "0b000"; + parameter D_CMUSETZGM = "0b000"; + parameter D_DCO_CALIB_TIME_SEL = "0b00"; + parameter D_HIGH_MARK = "0b0000"; + parameter D_IB_PWDNB = "0b0"; + parameter D_ISETLOS = "0b00000000"; + parameter D_LOW_MARK = "0b0000"; + parameter D_MACROPDB = "0b0"; + parameter D_PD_ISET = "0b00"; + parameter D_PLL_LOL_SET = "0b00"; + parameter D_REFCK_MODE = "0b000"; + parameter D_REQ_ISET = "0b000"; + parameter D_RG_EN = "0b0"; + parameter D_RG_SET = "0b00"; + parameter D_SETICONST_AUX = "0b00"; + parameter D_SETICONST_CH = "0b00"; + parameter D_SETIRPOLY_AUX = "0b00"; + parameter D_SETIRPOLY_CH = "0b00"; + parameter D_SETPLLRC = "0b000000"; + parameter D_SYNC_LOCAL_EN = "0b0"; + parameter D_SYNC_ND_EN = "0b0"; + parameter D_TXPLL_PWDNB = "0b0"; + parameter D_TX_VCO_CK_DIV = "0b000"; + parameter D_XGE_MODE = "0b0"; + +// These parameters don't do anything but are +// needed for compatibility with Diamond + parameter D_TX_MAX_RATE = "2.5"; + parameter D_RX_MAX_RATE = "2.5"; + parameter CH0_TXAMPLITUDE = "0d1300"; + parameter CH1_TXAMPLITUDE = "0d1300"; + parameter CH0_PROTOCOL = "8B10B"; + parameter CH1_PROTOCOL = "8B10B"; + parameter CH0_CDR_MAX_RATE = "2.5"; + parameter CH1_CDR_MAX_RATE = "2.5"; + parameter CH0_TXDEPRE = "DISABLED"; + parameter CH1_TXDEPRE = "DISABLED"; + parameter CH0_TXDEPOST = "DISABLED"; + parameter CH1_TXDEPOST = "DISABLED"; +endmodule + +(* blackbox *) +module EXTREFB ( + input REFCLKP, REFCLKN, + output REFCLKO +); + parameter REFCK_PWDNB = "0b0"; + parameter REFCK_RTERM = "0b0"; + parameter REFCK_DCBIAS_EN = "0b0"; +endmodule + +(* blackbox *) +module PCSCLKDIV ( + input CLKI, RST, SEL2, SEL1, SEL0, + output CDIV1, CDIVX +); + parameter GSR = "DISABLED"; +endmodule + +// Note: this module is not marked keep as we want it swept away in synth (sim use only) +(* blackbox *) +module PUR ( + input PUR +); + parameter RST_PULSE = 1; +endmodule + +(* blackbox, keep *) +module GSR ( + input GSR +); +endmodule + +(* blackbox, keep *) +module SGSR ( + input GSR, CLK +); +endmodule + + +(* blackbox *) +module PDPW16KD ( + input DI35, DI34, DI33, DI32, DI31, DI30, DI29, DI28, DI27, DI26, DI25, DI24, DI23, DI22, DI21, DI20, DI19, DI18, + input DI17, DI16, DI15, DI14, DI13, DI12, DI11, DI10, DI9, DI8, DI7, DI6, DI5, DI4, DI3, DI2, DI1, DI0, + input ADW8, ADW7, ADW6, ADW5, ADW4, ADW3, ADW2, ADW1, ADW0, + input BE3, BE2, BE1, BE0, CEW, CLKW, CSW2, CSW1, CSW0, + input ADR13, ADR12, ADR11, ADR10, ADR9, ADR8, ADR7, ADR6, ADR5, ADR4, ADR3, ADR2, ADR1, ADR0, + input CER, OCER, CLKR, CSR2, CSR1, CSR0, RST, + output DO35, DO34, DO33, DO32, DO31, DO30, DO29, DO28, DO27, DO26, DO25, DO24, DO23, DO22, DO21, DO20, DO19, DO18, + output DO17, DO16, DO15, DO14, DO13, DO12, DO11, DO10, DO9, DO8, DO7, DO6, DO5, DO4, DO3, DO2, DO1, DO0 +); + parameter DATA_WIDTH_W = 36; + parameter DATA_WIDTH_R = 36; + parameter GSR = "ENABLED"; + + parameter REGMODE = "NOREG"; + + parameter RESETMODE = "SYNC"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + + parameter CSDECODE_W = "0b000"; + parameter CSDECODE_R = "0b000"; + + parameter INITVAL_00 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_01 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_02 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_03 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_04 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_05 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_06 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_07 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_08 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_09 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_10 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_11 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_12 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_13 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_14 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_15 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_16 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_17 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_18 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_19 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_20 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_21 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_22 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_23 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_24 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_25 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_26 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_27 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_28 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_29 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_30 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_31 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_32 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_33 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_34 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_35 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_36 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_37 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_38 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_39 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_DATA = "STATIC"; + parameter CLKWMUX = "CLKW"; + parameter CLKRMUX = "CLKR"; + +endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/cells_ff.vh b/resources/netlist/resources/kernel/share/ecp5/cells_ff.vh new file mode 100644 index 0000000..6b745f3 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/cells_ff.vh @@ -0,0 +1,40 @@ +// Diamond flip-flops +module FD1P3AX(input D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .CE(SP), .DI(D), .Q(Q)); endmodule +module FD1P3AY(input D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .CE(SP), .DI(D), .Q(Q)); endmodule +module FD1P3BX(input PD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule +module FD1P3DX(input CD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule +module FD1P3IX(input CD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule +module FD1P3JX(input PD, D, SP, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule +module FD1S3AX(input D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .DI(D), .Q(Q)); endmodule +module FD1S3AY(input D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(|0), .DI(D), .Q(Q)); endmodule +module FD1S3BX(input PD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .DI(D), .Q(Q)); endmodule +module FD1S3DX(input CD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .DI(D), .Q(Q)); endmodule +module FD1S3IX(input CD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(CD), .DI(D), .Q(Q)); endmodule +module FD1S3JX(input PD, D, CK, output Q); parameter GSR = "ENABLED"; TRELLIS_FF #(.GSR(GSR), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(CK), .LSR(PD), .DI(D), .Q(Q)); endmodule + +// TODO: Diamond latches +// module FL1P3AY(); endmodule +// module FL1P3AZ(); endmodule +// module FL1P3BX(); endmodule +// module FL1P3DX(); endmodule +// module FL1P3IY(); endmodule +// module FL1P3JY(); endmodule +// module FL1S3AX(); endmodule +// module FL1S3AY(); endmodule + +// Diamond I/O registers +module IFS1P3BX(input PD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="input" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule +module IFS1P3DX(input CD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="input" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule +module IFS1P3IX(input CD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="input" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule +module IFS1P3JX(input PD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="input" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule + +module OFS1P3BX(input PD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="output" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule +module OFS1P3DX(input CD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="output" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule +module OFS1P3IX(input CD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="output" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(CD), .CE(SP), .DI(D), .Q(Q)); endmodule +module OFS1P3JX(input PD, D, SP, SCLK, output Q); parameter GSR = "ENABLED"; (* syn_useioff, ioff_dir="output" *) TRELLIS_FF #(.GSR(GSR), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(SCLK), .LSR(PD), .CE(SP), .DI(D), .Q(Q)); endmodule + +// TODO: Diamond I/O latches +// module IFS1S1B(input PD, D, SCLK, output Q); endmodule +// module IFS1S1D(input CD, D, SCLK, output Q); endmodule +// module IFS1S1I(input PD, D, SCLK, output Q); endmodule +// module IFS1S1J(input CD, D, SCLK, output Q); endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/cells_io.vh b/resources/netlist/resources/kernel/share/ecp5/cells_io.vh new file mode 100644 index 0000000..02e66e8 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/cells_io.vh @@ -0,0 +1,14 @@ +// Diamond I/O buffers +module IB (input I, output O); (* PULLMODE="NONE" *) TRELLIS_IO #(.DIR("INPUT")) _TECHMAP_REPLACE_ (.B(I), .O(O)); endmodule +module IBPU (input I, output O); (* PULLMODE="UP" *) TRELLIS_IO #(.DIR("INPUT")) _TECHMAP_REPLACE_ (.B(I), .O(O)); endmodule +module IBPD (input I, output O); (* PULLMODE="DOWN" *) TRELLIS_IO #(.DIR("INPUT")) _TECHMAP_REPLACE_ (.B(I), .O(O)); endmodule +module OB (input I, output O); (* PULLMODE="NONE" *) TRELLIS_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.B(O), .I(I)); endmodule +module OBZ (input I, T, output O); (* PULLMODE="NONE" *) TRELLIS_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.B(O), .I(I), .T(T)); endmodule +module OBZPU(input I, T, output O); (* PULLMODE="UP" *) TRELLIS_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.B(O), .I(I), .T(T)); endmodule +module OBZPD(input I, T, output O); (* PULLMODE="DOWN" *) TRELLIS_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.B(O), .I(I), .T(T)); endmodule +module OBCO (input I, output OT, OC); OLVDS olvds (.A(I), .Z(OT), .ZN(OC)); endmodule +module BB (input I, T, output O, inout B); (* PULLMODE="NONE" *) TRELLIS_IO #(.DIR("BIDIR")) _TECHMAP_REPLACE_ (.B(B), .I(I), .O(O), .T(T)); endmodule +module BBPU (input I, T, output O, inout B); (* PULLMODE="UP" *) TRELLIS_IO #(.DIR("BIDIR")) _TECHMAP_REPLACE_ (.B(B), .I(I), .O(O), .T(T)); endmodule +module BBPD (input I, T, output O, inout B); (* PULLMODE="DOWN" *) TRELLIS_IO #(.DIR("BIDIR")) _TECHMAP_REPLACE_ (.B(B), .I(I), .O(O), .T(T)); endmodule +module ILVDS(input A, AN, output Z ); TRELLIS_IO #(.DIR("INPUT")) _TECHMAP_REPLACE_ (.B(A), .O(Z)); endmodule +module OLVDS(input A, output Z, ZN); TRELLIS_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.B(Z), .I(A)); endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/cells_map.v b/resources/netlist/resources/kernel/share/ecp5/cells_map.v new file mode 100644 index 0000000..4944ece --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/cells_map.v @@ -0,0 +1,191 @@ +module \$_DFF_N_ (input D, C, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(1'b0), .DI(D), .Q(Q)); + else + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(1'b0), .DI(D), .Q(Q)); + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; +endmodule + +module \$_DFF_P_ (input D, C, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(1'b0), .DI(D), .Q(Q)); + else + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(1'b0), .DI(D), .Q(Q)); + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; +endmodule + +module \$_DFFE_NN_ (input D, C, E, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + else + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; +endmodule + +module \$_DFFE_PN_ (input D, C, E, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + else + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; +endmodule + +module \$_DFFE_NP_ (input D, C, E, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + else + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; +endmodule + +module \$_DFFE_PP_ (input D, C, E, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + else + TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(1'b0), .DI(D), .Q(Q)); + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; +endmodule + +module \$_DFF_NP0_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFF_NP1_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFF_PP0_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFF_PP1_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_SDFF_NP0_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFF_NP1_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFF_PP0_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFF_PP1_ (input D, C, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_DFFE_NP0P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_NP1P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PP0P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PP1P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_DFFE_NP0N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_NP1N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PP0N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_DFFE_PP1N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_SDFFE_NP0P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_NP1P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PP0P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PP1P_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_SDFFE_NP0N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_NP1N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PP0N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule +module \$_SDFFE_PP1N_ (input D, C, E, R, output Q); TRELLIS_FF #(.GSR("AUTO"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("SET"), .SRMODE("LSR_OVER_CE")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(R), .DI(D), .Q(Q)); wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; endmodule + +module \$_ALDFF_NP_ (input C, L, AD, D, output Q); TRELLIS_FF #(.GSR("DISABLED"), .CEMUX("1"), .CLKMUX("INV"), .LSRMODE("PRLD"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(L), .DI(D), .M(AD), .Q(Q)); endmodule +module \$_ALDFF_PP_ (input C, L, AD, D, output Q); TRELLIS_FF #(.GSR("DISABLED"), .CEMUX("1"), .CLKMUX("CLK"), .LSRMODE("PRLD"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(L), .DI(D), .M(AD), .Q(Q)); endmodule + +module \$_ALDFFE_NPN_ (input C, E, L, AD, D, output Q); TRELLIS_FF #(.GSR("DISABLED"), .CEMUX("INV"), .CLKMUX("INV"), .LSRMODE("PRLD"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(L), .DI(D), .M(AD), .Q(Q)); endmodule +module \$_ALDFFE_NPP_ (input C, E, L, AD, D, output Q); TRELLIS_FF #(.GSR("DISABLED"), .CEMUX("CE"), .CLKMUX("INV"), .LSRMODE("PRLD"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(L), .DI(D), .M(AD), .Q(Q)); endmodule +module \$_ALDFFE_PPN_ (input C, E, L, AD, D, output Q); TRELLIS_FF #(.GSR("DISABLED"), .CEMUX("INV"), .CLKMUX("CLK"), .LSRMODE("PRLD"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(L), .DI(D), .M(AD), .Q(Q)); endmodule +module \$_ALDFFE_PPP_ (input C, E, L, AD, D, output Q); TRELLIS_FF #(.GSR("DISABLED"), .CEMUX("CE"), .CLKMUX("CLK"), .LSRMODE("PRLD"), .LSRMUX("LSR"), .REGSET("RESET"), .SRMODE("ASYNC")) _TECHMAP_REPLACE_ (.CLK(C), .CE(E), .LSR(L), .DI(D), .M(AD), .Q(Q)); endmodule + +`include "cells_ff.vh" +`include "cells_io.vh" + +`ifndef NO_LUT +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + localparam [15:0] INIT = {{8{LUT[1]}}, {8{LUT[0]}}}; + LUT4 #(.INIT(INIT)) _TECHMAP_REPLACE_ (.Z(Y), + .A(1'b0), .B(1'b0), .C(1'b0), .D(A[0])); + end else + if (WIDTH == 2) begin + localparam [15:0] INIT = {{4{LUT[3]}}, {4{LUT[2]}}, {4{LUT[1]}}, {4{LUT[0]}}}; + LUT4 #(.INIT(INIT)) _TECHMAP_REPLACE_ (.Z(Y), + .A(1'b0), .B(1'b0), .C(A[0]), .D(A[1])); + end else + if (WIDTH == 3) begin + localparam [15:0] INIT = {{2{LUT[7]}}, {2{LUT[6]}}, {2{LUT[5]}}, {2{LUT[4]}}, {2{LUT[3]}}, {2{LUT[2]}}, {2{LUT[1]}}, {2{LUT[0]}}}; + LUT4 #(.INIT(INIT)) _TECHMAP_REPLACE_ (.Z(Y), + .A(1'b0), .B(A[0]), .C(A[1]), .D(A[2])); + end else + if (WIDTH == 4) begin + LUT4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.Z(Y), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + `ifndef NO_PFUMUX + end else + if (WIDTH == 5) begin + wire f0, f1; + LUT4 #(.INIT(LUT[15: 0])) lut0 (.Z(f0), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[31:16])) lut1 (.Z(f1), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + PFUMX mux5(.ALUT(f1), .BLUT(f0), .C0(A[4]), .Z(Y)); + end else + if (WIDTH == 6) begin + wire f0, f1, f2, f3, g0, g1; + LUT4 #(.INIT(LUT[15: 0])) lut0 (.Z(f0), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[31:16])) lut1 (.Z(f1), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + + LUT4 #(.INIT(LUT[47:32])) lut2 (.Z(f2), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[63:48])) lut3 (.Z(f3), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + + PFUMX mux50(.ALUT(f1), .BLUT(f0), .C0(A[4]), .Z(g0)); + PFUMX mux51(.ALUT(f3), .BLUT(f2), .C0(A[4]), .Z(g1)); + L6MUX21 mux6 (.D0(g0), .D1(g1), .SD(A[5]), .Z(Y)); + end else + if (WIDTH == 7) begin + wire f0, f1, f2, f3, f4, f5, f6, f7, g0, g1, g2, g3, h0, h1; + LUT4 #(.INIT(LUT[15: 0])) lut0 (.Z(f0), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[31:16])) lut1 (.Z(f1), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + + LUT4 #(.INIT(LUT[47:32])) lut2 (.Z(f2), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[63:48])) lut3 (.Z(f3), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + + LUT4 #(.INIT(LUT[79:64])) lut4 (.Z(f4), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[95:80])) lut5 (.Z(f5), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + + LUT4 #(.INIT(LUT[111: 96])) lut6 (.Z(f6), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + LUT4 #(.INIT(LUT[127:112])) lut7 (.Z(f7), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + + PFUMX mux50(.ALUT(f1), .BLUT(f0), .C0(A[4]), .Z(g0)); + PFUMX mux51(.ALUT(f3), .BLUT(f2), .C0(A[4]), .Z(g1)); + PFUMX mux52(.ALUT(f5), .BLUT(f4), .C0(A[4]), .Z(g2)); + PFUMX mux53(.ALUT(f7), .BLUT(f6), .C0(A[4]), .Z(g3)); + L6MUX21 mux60 (.D0(g0), .D1(g1), .SD(A[5]), .Z(h0)); + L6MUX21 mux61 (.D0(g2), .D1(g3), .SD(A[5]), .Z(h1)); + L6MUX21 mux7 (.D0(h0), .D1(h1), .SD(A[6]), .Z(Y)); + `endif + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule +`endif diff --git a/resources/netlist/resources/kernel/share/ecp5/cells_sim.v b/resources/netlist/resources/kernel/share/ecp5/cells_sim.v new file mode 100644 index 0000000..f9d503d --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/cells_sim.v @@ -0,0 +1,810 @@ +// --------------------------------------- + +(* abc9_lut=1, lib_whitebox *) +module LUT4(input A, B, C, D, output Z); + parameter [15:0] INIT = 16'h0000; + wire [7:0] s3 = D ? INIT[15:8] : INIT[7:0]; + wire [3:0] s2 = C ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = B ? s2[ 3:2] : s2[1:0]; + assign Z = A ? s1[1] : s1[0]; + specify + (A => Z) = 141; + (B => Z) = 275; + (C => Z) = 379; + (D => Z) = 379; + endspecify +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// cost of 5-input LUTs and is not intended to be instantiated +// LUT5 = 2x LUT4 + PFUMX +(* abc9_lut=2 *) +module \$__ABC9_LUT5 (input M0, D, C, B, A, output Z); + specify + (M0 => Z) = 151; + (D => Z) = 239; + (C => Z) = 373; + (B => Z) = 477; + (A => Z) = 477; + endspecify +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// of 6-input LUTs and is not intended to be instantiated +// LUT6 = 2x LUT5 + MUX2 +(* abc9_lut=4 *) +module \$__ABC9_LUT6 (input M1, M0, D, C, B, A, output Z); + specify + (M1 => Z) = 148; + (M0 => Z) = 292; + (D => Z) = 380; + (C => Z) = 514; + (B => Z) = 618; + (A => Z) = 618; + endspecify +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// of 7-input LUTs and is not intended to be instantiated +// LUT7 = 2x LUT6 + MUX2 +(* abc9_lut=8 *) +module \$__ABC9_LUT7 (input M2, M1, M0, D, C, B, A, output Z); + specify + (M2 => Z) = 148; + (M1 => Z) = 289; + (M0 => Z) = 433; + (D => Z) = 521; + (C => Z) = 655; + (B => Z) = 759; + (A => Z) = 759; + endspecify +endmodule + +// --------------------------------------- +(* abc9_box, lib_whitebox *) +module L6MUX21 (input D0, D1, SD, output Z); + assign Z = SD ? D1 : D0; + specify + (D0 => Z) = 140; + (D1 => Z) = 141; + (SD => Z) = 148; + endspecify +endmodule + +// --------------------------------------- +(* abc9_box, lib_whitebox *) +module CCU2C( + (* abc9_carry *) + input CIN, + input A0, B0, C0, D0, A1, B1, C1, D1, + output S0, S1, + (* abc9_carry *) + output COUT +); + parameter [15:0] INIT0 = 16'h0000; + parameter [15:0] INIT1 = 16'h0000; + parameter INJECT1_0 = "YES"; + parameter INJECT1_1 = "YES"; + + // First half + wire LUT4_0, LUT2_0; + LUT4 #(.INIT(INIT0)) lut4_0(.A(A0), .B(B0), .C(C0), .D(D0), .Z(LUT4_0)); + LUT2 #(.INIT(INIT0[3:0])) lut2_0(.A(A0), .B(B0), .Z(LUT2_0)); + wire gated_cin_0 = (INJECT1_0 == "YES") ? 1'b0 : CIN; + assign S0 = LUT4_0 ^ gated_cin_0; + + wire gated_lut2_0 = (INJECT1_0 == "YES") ? 1'b0 : LUT2_0; + wire cout_0 = (~LUT4_0 & gated_lut2_0) | (LUT4_0 & CIN); + + // Second half + wire LUT4_1, LUT2_1; + LUT4 #(.INIT(INIT1)) lut4_1(.A(A1), .B(B1), .C(C1), .D(D1), .Z(LUT4_1)); + LUT2 #(.INIT(INIT1[3:0])) lut2_1(.A(A1), .B(B1), .Z(LUT2_1)); + wire gated_cin_1 = (INJECT1_1 == "YES") ? 1'b0 : cout_0; + assign S1 = LUT4_1 ^ gated_cin_1; + + wire gated_lut2_1 = (INJECT1_1 == "YES") ? 1'b0 : LUT2_1; + assign COUT = (~LUT4_1 & gated_lut2_1) | (LUT4_1 & cout_0); + + specify + (A0 => S0) = 379; + (B0 => S0) = 379; + (C0 => S0) = 275; + (D0 => S0) = 141; + (CIN => S0) = 257; + (A0 => S1) = 630; + (B0 => S1) = 630; + (C0 => S1) = 526; + (D0 => S1) = 392; + (A1 => S1) = 379; + (B1 => S1) = 379; + (C1 => S1) = 275; + (D1 => S1) = 141; + (CIN => S1) = 273; + (A0 => COUT) = 516; + (B0 => COUT) = 516; + (C0 => COUT) = 412; + (D0 => COUT) = 278; + (A1 => COUT) = 516; + (B1 => COUT) = 516; + (C1 => COUT) = 412; + (D1 => COUT) = 278; + (CIN => COUT) = 43; + endspecify +endmodule + +// --------------------------------------- + +module TRELLIS_RAM16X2 ( + input DI0, DI1, + input WAD0, WAD1, WAD2, WAD3, + input WRE, WCK, + input RAD0, RAD1, RAD2, RAD3, + output DO0, DO1 +); + parameter WCKMUX = "WCK"; + parameter WREMUX = "WRE"; + parameter INITVAL_0 = 16'h0000; + parameter INITVAL_1 = 16'h0000; + + reg [1:0] mem[15:0]; + + integer i; + initial begin + for (i = 0; i < 16; i = i + 1) + mem[i] <= {INITVAL_1[i], INITVAL_0[i]}; + end + + wire muxwck = (WCKMUX == "INV") ? ~WCK : WCK; + + reg muxwre; + always @(*) + case (WREMUX) + "1": muxwre = 1'b1; + "0": muxwre = 1'b0; + "INV": muxwre = ~WRE; + default: muxwre = WRE; + endcase + + + always @(posedge muxwck) + if (muxwre) + mem[{WAD3, WAD2, WAD1, WAD0}] <= {DI1, DI0}; + + assign {DO1, DO0} = mem[{RAD3, RAD2, RAD1, RAD0}]; +endmodule + +// --------------------------------------- +(* abc9_box, lib_whitebox *) +module PFUMX (input ALUT, BLUT, C0, output Z); + assign Z = C0 ? ALUT : BLUT; + specify + (ALUT => Z) = 98; + (BLUT => Z) = 98; + (C0 => Z) = 151; + endspecify +endmodule + +// --------------------------------------- +(* abc9_box, lib_whitebox *) +module TRELLIS_DPR16X4 ( + input [3:0] DI, + input [3:0] WAD, + input WRE, + input WCK, + input [3:0] RAD, + output [3:0] DO +); + parameter WCKMUX = "WCK"; + parameter WREMUX = "WRE"; + parameter [63:0] INITVAL = 64'h0000000000000000; + + reg [3:0] mem[15:0]; + + integer i; + initial begin + for (i = 0; i < 16; i = i + 1) + mem[i] <= INITVAL[4*i +: 4]; + end + + wire muxwck = (WCKMUX == "INV") ? ~WCK : WCK; + + reg muxwre; + always @(*) + case (WREMUX) + "1": muxwre = 1'b1; + "0": muxwre = 1'b0; + "INV": muxwre = ~WRE; + default: muxwre = WRE; + endcase + + always @(posedge muxwck) + if (muxwre) + mem[WAD] <= DI; + + assign DO = mem[RAD]; + + specify + // TODO + (RAD *> DO) = 0; + endspecify +endmodule + +// --------------------------------------- + +(* abc9_box, lib_whitebox *) +module DPR16X4C ( + input [3:0] DI, + input WCK, WRE, + input [3:0] RAD, + input [3:0] WAD, + output [3:0] DO +); + // For legacy Lattice compatibility, INITIVAL is a hex + // string rather than a numeric parameter + parameter INITVAL = "0x0000000000000000"; + + function [63:0] convert_initval; + input [143:0] hex_initval; + reg done; + reg [63:0] temp; + reg [7:0] char; + integer i; + begin + done = 1'b0; + temp = 0; + for (i = 0; i < 16; i = i + 1) begin + if (!done) begin + char = hex_initval[8*i +: 8]; + if (char == "x") begin + done = 1'b1; + end else begin + if (char >= "0" && char <= "9") + temp[4*i +: 4] = char - "0"; + else if (char >= "A" && char <= "F") + temp[4*i +: 4] = 10 + char - "A"; + else if (char >= "a" && char <= "f") + temp[4*i +: 4] = 10 + char - "a"; + end + end + end + convert_initval = temp; + end + endfunction + + localparam conv_initval = convert_initval(INITVAL); + + reg [3:0] ram[0:15]; + integer i; + initial begin + for (i = 0; i < 15; i = i + 1) begin + ram[i] <= conv_initval[4*i +: 4]; + end + end + + always @(posedge WCK) + if (WRE) + ram[WAD] <= DI; + + assign DO = ram[RAD]; + + specify + // TODO + (RAD *> DO) = 0; + endspecify +endmodule + +// --------------------------------------- + +(* lib_whitebox *) +module LUT2(input A, B, output Z); + parameter [3:0] INIT = 4'h0; + wire [1:0] s1 = B ? INIT[ 3:2] : INIT[1:0]; + assign Z = A ? s1[1] : s1[0]; +endmodule + +// --------------------------------------- + +`ifdef YOSYS +(* abc9_flop=(SRMODE != "ASYNC"), abc9_box=(SRMODE == "ASYNC"), lib_whitebox *) +`endif +module TRELLIS_FF(input CLK, LSR, CE, DI, M, output reg Q); + parameter GSR = "ENABLED"; + parameter [127:0] CEMUX = "1"; + parameter CLKMUX = "CLK"; + parameter LSRMUX = "LSR"; + parameter SRMODE = "LSR_OVER_CE"; + parameter REGSET = "RESET"; + parameter [127:0] LSRMODE = "LSR"; + + wire muxce; + generate + case (CEMUX) + "1": assign muxce = 1'b1; + "0": assign muxce = 1'b0; + "INV": assign muxce = ~CE; + default: assign muxce = CE; + endcase + endgenerate + + wire muxlsr = (LSRMUX == "INV") ? ~LSR : LSR; + wire muxclk = (CLKMUX == "INV") ? ~CLK : CLK; + wire srval; + generate + if (LSRMODE == "PRLD") + assign srval = M; + else + assign srval = (REGSET == "SET") ? 1'b1 : 1'b0; + endgenerate + + initial Q = srval; + + generate + if (SRMODE == "ASYNC") begin + always @(posedge muxclk, posedge muxlsr) + if (muxlsr) + Q <= srval; + else if (muxce) + Q <= DI; + end else begin + always @(posedge muxclk) + if (muxlsr) + Q <= srval; + else if (muxce) + Q <= DI; + end + endgenerate + + specify + $setup(DI, negedge CLK &&& CLKMUX == "INV", 0); + $setup(CE, negedge CLK &&& CLKMUX == "INV", 0); + $setup(LSR, negedge CLK &&& CLKMUX == "INV", 0); + $setup(DI, posedge CLK &&& CLKMUX != "INV", 0); + $setup(CE, posedge CLK &&& CLKMUX != "INV", 0); + $setup(LSR, posedge CLK &&& CLKMUX != "INV", 0); +`ifndef YOSYS + if (SRMODE == "ASYNC" && muxlsr && CLKMUX == "INV") (negedge CLK => (Q : srval)) = 0; + if (SRMODE == "ASYNC" && muxlsr && CLKMUX != "INV") (posedge CLK => (Q : srval)) = 0; +`else + if (SRMODE == "ASYNC" && muxlsr) (LSR => Q) = 0; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!muxlsr && muxce && CLKMUX == "INV") (negedge CLK => (Q : DI)) = 0; + if (!muxlsr && muxce && CLKMUX != "INV") (posedge CLK => (Q : DI)) = 0; + endspecify +endmodule + +// --------------------------------------- +(* keep *) +module TRELLIS_IO( + inout B, + input I, + input T, + output O +); + parameter DIR = "INPUT"; + reg T_pd; + always @(*) if (T === 1'bz) T_pd <= 1'b0; else T_pd <= T; + + generate + if (DIR == "INPUT") begin + assign B = 1'bz; + assign O = B; + end else if (DIR == "OUTPUT") begin + assign B = T_pd ? 1'bz : I; + assign O = 1'bx; + end else if (DIR == "BIDIR") begin + assign B = T_pd ? 1'bz : I; + assign O = B; + end else begin + ERROR_UNKNOWN_IO_MODE error(); + end + endgenerate + +endmodule + +// --------------------------------------- + +module INV(input A, output Z); + assign Z = !A; +endmodule + +// --------------------------------------- + +module TRELLIS_SLICE( + input A0, B0, C0, D0, + input A1, B1, C1, D1, + input M0, M1, + input FCI, FXA, FXB, + + input CLK, LSR, CE, + input DI0, DI1, + + input WD0, WD1, + input WAD0, WAD1, WAD2, WAD3, + input WRE, WCK, + + output F0, Q0, + output F1, Q1, + output FCO, OFX0, OFX1, + + output WDO0, WDO1, WDO2, WDO3, + output WADO0, WADO1, WADO2, WADO3 +); + + parameter MODE = "LOGIC"; + parameter GSR = "ENABLED"; + parameter SRMODE = "LSR_OVER_CE"; + parameter [127:0] CEMUX = "1"; + parameter CLKMUX = "CLK"; + parameter LSRMUX = "LSR"; + parameter LUT0_INITVAL = 16'h0000; + parameter LUT1_INITVAL = 16'h0000; + parameter REG0_SD = "0"; + parameter REG1_SD = "0"; + parameter REG0_REGSET = "RESET"; + parameter REG1_REGSET = "RESET"; + parameter REG0_LSRMODE = "LSR"; + parameter REG1_LSRMODE = "LSR"; + parameter [127:0] CCU2_INJECT1_0 = "NO"; + parameter [127:0] CCU2_INJECT1_1 = "NO"; + parameter WREMUX = "WRE"; + parameter WCKMUX = "WCK"; + + parameter A0MUX = "A0"; + parameter A1MUX = "A1"; + parameter B0MUX = "B0"; + parameter B1MUX = "B1"; + parameter C0MUX = "C0"; + parameter C1MUX = "C1"; + parameter D0MUX = "D0"; + parameter D1MUX = "D1"; + + wire A0m, B0m, C0m, D0m; + wire A1m, B1m, C1m, D1m; + + generate + if (A0MUX == "1") assign A0m = 1'b1; else assign A0m = A0; + if (B0MUX == "1") assign B0m = 1'b1; else assign B0m = B0; + if (C0MUX == "1") assign C0m = 1'b1; else assign C0m = C0; + if (D0MUX == "1") assign D0m = 1'b1; else assign D0m = D0; + if (A1MUX == "1") assign A1m = 1'b1; else assign A1m = A1; + if (B1MUX == "1") assign B1m = 1'b1; else assign B1m = B1; + if (C1MUX == "1") assign C1m = 1'b1; else assign C1m = C1; + if (D1MUX == "1") assign D1m = 1'b1; else assign D1m = D1; + + endgenerate + + function [15:0] permute_initval; + input [15:0] initval; + integer i; + begin + for (i = 0; i < 16; i = i + 1) begin + permute_initval[{i[0], i[2], i[1], i[3]}] = initval[i]; + end + end + endfunction + + generate + if (MODE == "LOGIC") begin + // LUTs + LUT4 #( + .INIT(LUT0_INITVAL) + ) lut4_0 ( + .A(A0m), .B(B0m), .C(C0m), .D(D0m), + .Z(F0) + ); + LUT4 #( + .INIT(LUT1_INITVAL) + ) lut4_1 ( + .A(A1m), .B(B1m), .C(C1m), .D(D1m), + .Z(F1) + ); + // LUT expansion muxes + PFUMX lut5_mux (.ALUT(F1), .BLUT(F0), .C0(M0), .Z(OFX0)); + L6MUX21 lutx_mux (.D0(FXA), .D1(FXB), .SD(M1), .Z(OFX1)); + end else if (MODE == "CCU2") begin + CCU2C #( + .INIT0(LUT0_INITVAL), + .INIT1(LUT1_INITVAL), + .INJECT1_0(CCU2_INJECT1_0), + .INJECT1_1(CCU2_INJECT1_1) + ) ccu2c_i ( + .CIN(FCI), + .A0(A0m), .B0(B0m), .C0(C0m), .D0(D0m), + .A1(A1m), .B1(B1m), .C1(C1m), .D1(D1m), + .S0(F0), .S1(F1), + .COUT(FCO) + ); + end else if (MODE == "RAMW") begin + assign WDO0 = C1m; + assign WDO1 = A1m; + assign WDO2 = D1m; + assign WDO3 = B1m; + assign WADO0 = D0m; + assign WADO1 = B0m; + assign WADO2 = C0m; + assign WADO3 = A0m; + end else if (MODE == "DPRAM") begin + TRELLIS_RAM16X2 #( + .INITVAL_0(permute_initval(LUT0_INITVAL)), + .INITVAL_1(permute_initval(LUT1_INITVAL)), + .WREMUX(WREMUX) + ) ram_i ( + .DI0(WD0), .DI1(WD1), + .WAD0(WAD0), .WAD1(WAD1), .WAD2(WAD2), .WAD3(WAD3), + .WRE(WRE), .WCK(WCK), + .RAD0(D0m), .RAD1(B0m), .RAD2(C0m), .RAD3(A0m), + .DO0(F0), .DO1(F1) + ); + // TODO: confirm RAD and INITVAL ordering + // DPRAM mode contract? +`ifdef FORMAL + always @(*) begin + assert(A0m==A1m); + assert(B0m==B1m); + assert(C0m==C1m); + assert(D0m==D1m); + end +`endif + end else begin + ERROR_UNKNOWN_SLICE_MODE error(); + end + endgenerate + + // FF input selection muxes + wire muxdi0 = (REG0_SD == "1") ? DI0 : M0; + wire muxdi1 = (REG1_SD == "1") ? DI1 : M1; + // Flipflops + TRELLIS_FF #( + .GSR(GSR), + .CEMUX(CEMUX), + .CLKMUX(CLKMUX), + .LSRMUX(LSRMUX), + .SRMODE(SRMODE), + .REGSET(REG0_REGSET), + .LSRMODE(REG0_LSRMODE) + ) ff_0 ( + .CLK(CLK), .LSR(LSR), .CE(CE), + .DI(muxdi0), .M(M0), + .Q(Q0) + ); + TRELLIS_FF #( + .GSR(GSR), + .CEMUX(CEMUX), + .CLKMUX(CLKMUX), + .LSRMUX(LSRMUX), + .SRMODE(SRMODE), + .REGSET(REG1_REGSET), + .LSRMODE(REG1_LSRMODE) + ) ff_1 ( + .CLK(CLK), .LSR(LSR), .CE(CE), + .DI(muxdi1), .M(M1), + .Q(Q1) + ); +endmodule + +(* blackbox *) +module DP16KD( + input DIA17, DIA16, DIA15, DIA14, DIA13, DIA12, DIA11, DIA10, DIA9, DIA8, DIA7, DIA6, DIA5, DIA4, DIA3, DIA2, DIA1, DIA0, + input ADA13, ADA12, ADA11, ADA10, ADA9, ADA8, ADA7, ADA6, ADA5, ADA4, ADA3, ADA2, ADA1, ADA0, + input CEA, OCEA, CLKA, WEA, RSTA, + input CSA2, CSA1, CSA0, + output DOA17, DOA16, DOA15, DOA14, DOA13, DOA12, DOA11, DOA10, DOA9, DOA8, DOA7, DOA6, DOA5, DOA4, DOA3, DOA2, DOA1, DOA0, + + input DIB17, DIB16, DIB15, DIB14, DIB13, DIB12, DIB11, DIB10, DIB9, DIB8, DIB7, DIB6, DIB5, DIB4, DIB3, DIB2, DIB1, DIB0, + input ADB13, ADB12, ADB11, ADB10, ADB9, ADB8, ADB7, ADB6, ADB5, ADB4, ADB3, ADB2, ADB1, ADB0, + input CEB, OCEB, CLKB, WEB, RSTB, + input CSB2, CSB1, CSB0, + output DOB17, DOB16, DOB15, DOB14, DOB13, DOB12, DOB11, DOB10, DOB9, DOB8, DOB7, DOB6, DOB5, DOB4, DOB3, DOB2, DOB1, DOB0 +); + parameter DATA_WIDTH_A = 18; + parameter DATA_WIDTH_B = 18; + + parameter REGMODE_A = "NOREG"; + parameter REGMODE_B = "NOREG"; + + parameter RESETMODE = "SYNC"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + + parameter CSDECODE_A = "0b000"; + parameter CSDECODE_B = "0b000"; + + parameter WRITEMODE_A = "NORMAL"; + parameter WRITEMODE_B = "NORMAL"; + + parameter DIA17MUX = "DIA17"; + parameter DIA16MUX = "DIA16"; + parameter DIA15MUX = "DIA15"; + parameter DIA14MUX = "DIA14"; + parameter DIA13MUX = "DIA13"; + parameter DIA12MUX = "DIA12"; + parameter DIA11MUX = "DIA11"; + parameter DIA10MUX = "DIA10"; + parameter DIA9MUX = "DIA9"; + parameter DIA8MUX = "DIA8"; + parameter DIA7MUX = "DIA7"; + parameter DIA6MUX = "DIA6"; + parameter DIA5MUX = "DIA5"; + parameter DIA4MUX = "DIA4"; + parameter DIA3MUX = "DIA3"; + parameter DIA2MUX = "DIA2"; + parameter DIA1MUX = "DIA1"; + parameter DIA0MUX = "DIA0"; + parameter ADA13MUX = "ADA13"; + parameter ADA12MUX = "ADA12"; + parameter ADA11MUX = "ADA11"; + parameter ADA10MUX = "ADA10"; + parameter ADA9MUX = "ADA9"; + parameter ADA8MUX = "ADA8"; + parameter ADA7MUX = "ADA7"; + parameter ADA6MUX = "ADA6"; + parameter ADA5MUX = "ADA5"; + parameter ADA4MUX = "ADA4"; + parameter ADA3MUX = "ADA3"; + parameter ADA2MUX = "ADA2"; + parameter ADA1MUX = "ADA1"; + parameter ADA0MUX = "ADA0"; + parameter CEAMUX = "CEA"; + parameter OCEAMUX = "OCEA"; + parameter CLKAMUX = "CLKA"; + parameter WEAMUX = "WEA"; + parameter RSTAMUX = "RSTA"; + parameter CSA2MUX = "CSA2"; + parameter CSA1MUX = "CSA1"; + parameter CSA0MUX = "CSA0"; + parameter DOA17MUX = "DOA17"; + parameter DOA16MUX = "DOA16"; + parameter DOA15MUX = "DOA15"; + parameter DOA14MUX = "DOA14"; + parameter DOA13MUX = "DOA13"; + parameter DOA12MUX = "DOA12"; + parameter DOA11MUX = "DOA11"; + parameter DOA10MUX = "DOA10"; + parameter DOA9MUX = "DOA9"; + parameter DOA8MUX = "DOA8"; + parameter DOA7MUX = "DOA7"; + parameter DOA6MUX = "DOA6"; + parameter DOA5MUX = "DOA5"; + parameter DOA4MUX = "DOA4"; + parameter DOA3MUX = "DOA3"; + parameter DOA2MUX = "DOA2"; + parameter DOA1MUX = "DOA1"; + parameter DOA0MUX = "DOA0"; + parameter DIB17MUX = "DIB17"; + parameter DIB16MUX = "DIB16"; + parameter DIB15MUX = "DIB15"; + parameter DIB14MUX = "DIB14"; + parameter DIB13MUX = "DIB13"; + parameter DIB12MUX = "DIB12"; + parameter DIB11MUX = "DIB11"; + parameter DIB10MUX = "DIB10"; + parameter DIB9MUX = "DIB9"; + parameter DIB8MUX = "DIB8"; + parameter DIB7MUX = "DIB7"; + parameter DIB6MUX = "DIB6"; + parameter DIB5MUX = "DIB5"; + parameter DIB4MUX = "DIB4"; + parameter DIB3MUX = "DIB3"; + parameter DIB2MUX = "DIB2"; + parameter DIB1MUX = "DIB1"; + parameter DIB0MUX = "DIB0"; + parameter ADB13MUX = "ADB13"; + parameter ADB12MUX = "ADB12"; + parameter ADB11MUX = "ADB11"; + parameter ADB10MUX = "ADB10"; + parameter ADB9MUX = "ADB9"; + parameter ADB8MUX = "ADB8"; + parameter ADB7MUX = "ADB7"; + parameter ADB6MUX = "ADB6"; + parameter ADB5MUX = "ADB5"; + parameter ADB4MUX = "ADB4"; + parameter ADB3MUX = "ADB3"; + parameter ADB2MUX = "ADB2"; + parameter ADB1MUX = "ADB1"; + parameter ADB0MUX = "ADB0"; + parameter CEBMUX = "CEB"; + parameter OCEBMUX = "OCEB"; + parameter CLKBMUX = "CLKB"; + parameter WEBMUX = "WEB"; + parameter RSTBMUX = "RSTB"; + parameter CSB2MUX = "CSB2"; + parameter CSB1MUX = "CSB1"; + parameter CSB0MUX = "CSB0"; + parameter DOB17MUX = "DOB17"; + parameter DOB16MUX = "DOB16"; + parameter DOB15MUX = "DOB15"; + parameter DOB14MUX = "DOB14"; + parameter DOB13MUX = "DOB13"; + parameter DOB12MUX = "DOB12"; + parameter DOB11MUX = "DOB11"; + parameter DOB10MUX = "DOB10"; + parameter DOB9MUX = "DOB9"; + parameter DOB8MUX = "DOB8"; + parameter DOB7MUX = "DOB7"; + parameter DOB6MUX = "DOB6"; + parameter DOB5MUX = "DOB5"; + parameter DOB4MUX = "DOB4"; + parameter DOB3MUX = "DOB3"; + parameter DOB2MUX = "DOB2"; + parameter DOB1MUX = "DOB1"; + parameter DOB0MUX = "DOB0"; + + parameter WID = 0; + + parameter GSR = "ENABLED"; + + parameter INITVAL_00 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_01 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_02 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_03 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_04 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_05 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_06 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_07 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_08 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_09 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_0F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_10 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_11 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_12 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_13 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_14 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_15 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_16 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_17 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_18 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_19 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_1F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_20 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_21 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_22 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_23 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_24 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_25 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_26 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_27 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_28 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_29 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_2F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_30 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_31 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_32 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_33 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_34 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_35 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_36 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_37 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_38 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_39 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INITVAL_3F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_DATA = "STATIC"; +endmodule + +`ifndef NO_INCLUDES + +`include "cells_ff.vh" +`include "cells_io.vh" + +`endif diff --git a/resources/netlist/resources/kernel/share/ecp5/dsp_map.v b/resources/netlist/resources/kernel/share/ecp5/dsp_map.v new file mode 100644 index 0000000..df54d1d --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/dsp_map.v @@ -0,0 +1,17 @@ +module \$__MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y); + + parameter A_WIDTH = 18; + parameter B_WIDTH = 18; + parameter Y_WIDTH = 36; + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + + MULT18X18D _TECHMAP_REPLACE_ ( + .A0(A[0]), .A1(A[1]), .A2(A[2]), .A3(A[3]), .A4(A[4]), .A5(A[5]), .A6(A[6]), .A7(A[7]), .A8(A[8]), .A9(A[9]), .A10(A[10]), .A11(A[11]), .A12(A[12]), .A13(A[13]), .A14(A[14]), .A15(A[15]), .A16(A[16]), .A17(A[17]), + .B0(B[0]), .B1(B[1]), .B2(B[2]), .B3(B[3]), .B4(B[4]), .B5(B[5]), .B6(B[6]), .B7(B[7]), .B8(B[8]), .B9(B[9]), .B10(B[10]), .B11(B[11]), .B12(B[12]), .B13(B[13]), .B14(B[14]), .B15(B[15]), .B16(B[16]), .B17(B[17]), + .C17(1'b0), .C16(1'b0), .C15(1'b0), .C14(1'b0), .C13(1'b0), .C12(1'b0), .C11(1'b0), .C10(1'b0), .C9(1'b0), .C8(1'b0), .C7(1'b0), .C6(1'b0), .C5(1'b0), .C4(1'b0), .C3(1'b0), .C2(1'b0), .C1(1'b0), .C0(1'b0), + .SIGNEDA(A_SIGNED ? 1'b1 : 1'b0), .SIGNEDB(B_SIGNED ? 1'b1 : 1'b0), .SOURCEA(1'b0), .SOURCEB(1'b0), + + .P0(Y[0]), .P1(Y[1]), .P2(Y[2]), .P3(Y[3]), .P4(Y[4]), .P5(Y[5]), .P6(Y[6]), .P7(Y[7]), .P8(Y[8]), .P9(Y[9]), .P10(Y[10]), .P11(Y[11]), .P12(Y[12]), .P13(Y[13]), .P14(Y[14]), .P15(Y[15]), .P16(Y[16]), .P17(Y[17]), .P18(Y[18]), .P19(Y[19]), .P20(Y[20]), .P21(Y[21]), .P22(Y[22]), .P23(Y[23]), .P24(Y[24]), .P25(Y[25]), .P26(Y[26]), .P27(Y[27]), .P28(Y[28]), .P29(Y[29]), .P30(Y[30]), .P31(Y[31]), .P32(Y[32]), .P33(Y[33]), .P34(Y[34]), .P35(Y[35]) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/latches_map.v b/resources/netlist/resources/kernel/share/ecp5/latches_map.v new file mode 100644 index 0000000..c28f88c --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/latches_map.v @@ -0,0 +1,11 @@ +module \$_DLATCH_N_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = !E ? D : Q; +endmodule + +module \$_DLATCH_P_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = E ? D : Q; +endmodule diff --git a/resources/netlist/resources/kernel/share/ecp5/lutrams.txt b/resources/netlist/resources/kernel/share/ecp5/lutrams.txt new file mode 100644 index 0000000..ea42d4f --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/lutrams.txt @@ -0,0 +1,12 @@ +ram distributed $__TRELLIS_DPR16X4_ { + abits 4; + width 4; + cost 4; + init any; + prune_rom; + port sw "W" { + clock anyedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/ecp5/lutrams_map.v b/resources/netlist/resources/kernel/share/ecp5/lutrams_map.v new file mode 100644 index 0000000..3cb325f --- /dev/null +++ b/resources/netlist/resources/kernel/share/ecp5/lutrams_map.v @@ -0,0 +1,30 @@ +module $__TRELLIS_DPR16X4_(...); + +parameter INIT = 64'bx; +parameter PORT_W_CLK_POL = 1; + +input PORT_W_CLK; +input [3:0] PORT_W_ADDR; +input [3:0] PORT_W_WR_DATA; +input PORT_W_WR_EN; + +input [3:0] PORT_R_ADDR; +output [3:0] PORT_R_RD_DATA; + +localparam WCKMUX = PORT_W_CLK_POL ? "WCK" : "INV"; + +TRELLIS_DPR16X4 #( + .INITVAL(INIT), + .WCKMUX(WCKMUX), + .WREMUX("WRE") +) _TECHMAP_REPLACE_ ( + .RAD(PORT_R_ADDR), + .DO(PORT_R_RD_DATA), + + .WAD(PORT_W_ADDR), + .DI(PORT_W_WR_DATA), + .WCK(PORT_W_CLK), + .WRE(PORT_W_WR_EN) +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/efinix/arith_map.v b/resources/netlist/resources/kernel/share/efinix/arith_map.v new file mode 100644 index 0000000..6bda050 --- /dev/null +++ b/resources/netlist/resources/kernel/share/efinix/arith_map.v @@ -0,0 +1,88 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2018 Miodrag Milanovic + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_efinix_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire CIx; + (* force_downto *) + wire [Y_WIDTH-1:0] COx; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] C = { COx, CIx }; + + EFX_ADD #(.I0_POLARITY(1'b1),.I1_POLARITY(1'b1)) + adder_cin ( + .I0(CI), + .I1(1'b1), + .CI(1'b0), + .CO(CIx) + ); + + genvar i; + generate for (i = 0; i < Y_WIDTH; i = i + 1) begin: slice + EFX_ADD #(.I0_POLARITY(1'b1),.I1_POLARITY(1'b1)) + adder_i ( + .I0(AA[i]), + .I1(BB[i]), + .CI(C[i]), + .O(Y[i]), + .CO(COx[i]) + ); + EFX_ADD #(.I0_POLARITY(1'b1),.I1_POLARITY(1'b1)) + adder_cout ( + .I0(1'b0), + .I1(1'b0), + .CI(COx[i]), + .O(CO[i]) + ); + end: slice + endgenerate + + /* End implementation */ + assign X = AA ^ BB; +endmodule diff --git a/resources/netlist/resources/kernel/share/efinix/brams.txt b/resources/netlist/resources/kernel/share/efinix/brams.txt new file mode 100644 index 0000000..271fc4f --- /dev/null +++ b/resources/netlist/resources/kernel/share/efinix/brams.txt @@ -0,0 +1,19 @@ +ram block $__EFINIX_5K_ { + abits 12; + widths 1 2 5 10 20 per_port; + cost 32; + init no_undef; + port sr "R" { + clock anyedge; + rden; + } + port sw "W" { + clock anyedge; + option "WRITE_MODE" "READ_FIRST" { + wrtrans "R" old; + } + option "WRITE_MODE" "WRITE_FIRST" { + wrtrans "R" new; + } + } +} diff --git a/resources/netlist/resources/kernel/share/efinix/brams_map.v b/resources/netlist/resources/kernel/share/efinix/brams_map.v new file mode 100644 index 0000000..752010f --- /dev/null +++ b/resources/netlist/resources/kernel/share/efinix/brams_map.v @@ -0,0 +1,149 @@ +module $__EFINIX_5K_ (...); + parameter INIT = 0; + parameter OPTION_WRITE_MODE = "READ_FIRST"; + + parameter PORT_R_WIDTH = 20; + parameter PORT_R_CLK_POL = 1; + parameter PORT_W_WIDTH = 20; + parameter PORT_W_CLK_POL = 1; + + input PORT_R_CLK; + input PORT_R_RD_EN; + input [11:0] PORT_R_ADDR; + output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + + input PORT_W_CLK; + input PORT_W_WR_EN; + input [11:0] PORT_W_ADDR; + input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + + localparam IS_5BIT = PORT_R_WIDTH >= 5 && PORT_W_WIDTH >= 5; + + localparam RADDR_WIDTH = + PORT_R_WIDTH == 1 ? 12 : + PORT_R_WIDTH == 2 ? 11 : + PORT_R_WIDTH == 5 ? 10 : + PORT_R_WIDTH == 10 ? 9 : + 8; + + localparam WADDR_WIDTH = + PORT_W_WIDTH == 1 ? 12 : + PORT_W_WIDTH == 2 ? 11 : + PORT_W_WIDTH == 5 ? 10 : + PORT_W_WIDTH == 10 ? 9 : + 8; + + localparam READ_WIDTH = + PORT_R_WIDTH == 1 ? 1 : + PORT_R_WIDTH == 2 ? 2 : + PORT_R_WIDTH == 5 ? (IS_5BIT ? 5 : 4) : + PORT_R_WIDTH == 10 ? (IS_5BIT ? 10 : 8) : + (IS_5BIT ? 20 : 16); + + localparam WRITE_WIDTH = + PORT_W_WIDTH == 1 ? 1 : + PORT_W_WIDTH == 2 ? 2 : + PORT_W_WIDTH == 5 ? (IS_5BIT ? 5 : 4) : + PORT_W_WIDTH == 10 ? (IS_5BIT ? 10 : 8) : + (IS_5BIT ? 20 : 16); + + wire [RADDR_WIDTH-1:0] RADDR = PORT_R_ADDR[11:12-RADDR_WIDTH]; + wire [WADDR_WIDTH-1:0] WADDR = PORT_W_ADDR[11:12-WADDR_WIDTH]; + + wire [WRITE_WIDTH-1:0] WDATA; + wire [READ_WIDTH-1:0] RDATA; + + generate + case (WRITE_WIDTH) + 1: assign WDATA = PORT_W_WR_DATA; + 2: assign WDATA = PORT_W_WR_DATA; + 4: assign WDATA = PORT_W_WR_DATA[3:0]; + 5: assign WDATA = PORT_W_WR_DATA; + 8: assign WDATA = { + PORT_W_WR_DATA[8:5], + PORT_W_WR_DATA[3:0] + }; + 10: assign WDATA = PORT_W_WR_DATA; + 16: assign WDATA = { + PORT_W_WR_DATA[18:15], + PORT_W_WR_DATA[13:10], + PORT_W_WR_DATA[8:5], + PORT_W_WR_DATA[3:0] + }; + 20: assign WDATA = PORT_W_WR_DATA; + endcase + case (READ_WIDTH) + 1: assign PORT_R_RD_DATA = RDATA; + 2: assign PORT_R_RD_DATA = RDATA; + 4: assign PORT_R_RD_DATA[3:0] = RDATA; + 5: assign PORT_R_RD_DATA = RDATA; + 8: assign { + PORT_R_RD_DATA[8:5], + PORT_R_RD_DATA[3:0] + } = RDATA; + 10: assign PORT_R_RD_DATA = RDATA; + 16: assign { + PORT_R_RD_DATA[18:15], + PORT_R_RD_DATA[13:10], + PORT_R_RD_DATA[8:5], + PORT_R_RD_DATA[3:0] + } = RDATA; + 20: assign PORT_R_RD_DATA = RDATA; + endcase + endgenerate + + function [255:0] init_slice; + input integer idx; + integer i; + if (IS_5BIT) + init_slice = INIT[idx * 256 +: 256]; + else if (idx > 16) + init_slice = 0; + else + for (i = 0; i < 64; i = i + 1) + init_slice[i*4+:4] = INIT[(idx * 64 + i) * 5+:4]; + endfunction + + EFX_RAM_5K #( + .READ_WIDTH(READ_WIDTH), + .WRITE_WIDTH(WRITE_WIDTH), + .OUTPUT_REG(1'b0), + .RCLK_POLARITY(PORT_R_CLK_POL), + .RE_POLARITY(1'b1), + .WCLK_POLARITY(PORT_W_CLK_POL), + .WE_POLARITY(1'b1), + .WCLKE_POLARITY(1'b1), + .WRITE_MODE(OPTION_WRITE_MODE), + .INIT_0(init_slice('h00)), + .INIT_1(init_slice('h01)), + .INIT_2(init_slice('h02)), + .INIT_3(init_slice('h03)), + .INIT_4(init_slice('h04)), + .INIT_5(init_slice('h05)), + .INIT_6(init_slice('h06)), + .INIT_7(init_slice('h07)), + .INIT_8(init_slice('h08)), + .INIT_9(init_slice('h09)), + .INIT_A(init_slice('h0a)), + .INIT_B(init_slice('h0b)), + .INIT_C(init_slice('h0c)), + .INIT_D(init_slice('h0d)), + .INIT_E(init_slice('h0e)), + .INIT_F(init_slice('h0f)), + .INIT_10(init_slice('h10)), + .INIT_11(init_slice('h11)), + .INIT_12(init_slice('h12)), + .INIT_13(init_slice('h13)), + ) _TECHMAP_REPLACE_ ( + .WDATA(WDATA), + .WADDR(WADDR), + .WE(PORT_W_WR_EN), + .WCLK(PORT_W_CLK), + .WCLKE(1'b1), + .RDATA(RDATA), + .RADDR(RADDR), + .RE(PORT_R_RD_EN), + .RCLK(PORT_R_CLK) + ); + +endmodule diff --git a/resources/netlist/resources/kernel/share/efinix/cells_map.v b/resources/netlist/resources/kernel/share/efinix/cells_map.v new file mode 100644 index 0000000..6f6271d --- /dev/null +++ b/resources/netlist/resources/kernel/share/efinix/cells_map.v @@ -0,0 +1,96 @@ +(* techmap_celltype = "$_DFFE_[PN][PN][01][PN]_" *) +module \$_DFFE_xxxx_ (input D, C, R, E, output Q); + + parameter _TECHMAP_CELLTYPE_ = ""; + + EFX_FF #( + .CLK_POLARITY(_TECHMAP_CELLTYPE_[39:32] == "P"), + .CE_POLARITY(_TECHMAP_CELLTYPE_[15:8] == "P"), + .SR_POLARITY(_TECHMAP_CELLTYPE_[31:24] == "P"), + .D_POLARITY(1'b1), + .SR_SYNC(1'b0), + .SR_VALUE(_TECHMAP_CELLTYPE_[23:16] == "1"), + .SR_SYNC_PRIORITY(1'b1) + ) _TECHMAP_REPLACE_ (.D(D), .CE(E), .CLK(C), .SR(R), .Q(Q)); + + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + +endmodule + +(* techmap_celltype = "$_SDFFE_[PN][PN][01][PN]_" *) +module \$_SDFFE_xxxx_ (input D, C, R, E, output Q); + + parameter _TECHMAP_CELLTYPE_ = ""; + + EFX_FF #( + .CLK_POLARITY(_TECHMAP_CELLTYPE_[39:32] == "P"), + .CE_POLARITY(_TECHMAP_CELLTYPE_[15:8] == "P"), + .SR_POLARITY(_TECHMAP_CELLTYPE_[31:24] == "P"), + .D_POLARITY(1'b1), + .SR_SYNC(1'b1), + .SR_VALUE(_TECHMAP_CELLTYPE_[23:16] == "1"), + .SR_SYNC_PRIORITY(1'b1) + ) _TECHMAP_REPLACE_ (.D(D), .CE(E), .CLK(C), .SR(R), .Q(Q)); + + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + +endmodule + +(* techmap_celltype = "$_SDFFCE_[PN][PN][01][PN]_" *) +module \$_SDFFCE_xxxx_ (input D, C, R, E, output Q); + + parameter _TECHMAP_CELLTYPE_ = ""; + + EFX_FF #( + .CLK_POLARITY(_TECHMAP_CELLTYPE_[39:32] == "P"), + .CE_POLARITY(_TECHMAP_CELLTYPE_[15:8] == "P"), + .SR_POLARITY(_TECHMAP_CELLTYPE_[31:24] == "P"), + .D_POLARITY(1'b1), + .SR_SYNC(1'b1), + .SR_VALUE(_TECHMAP_CELLTYPE_[23:16] == "1"), + .SR_SYNC_PRIORITY(1'b0) + ) _TECHMAP_REPLACE_ (.D(D), .CE(E), .CLK(C), .SR(R), .Q(Q)); + + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + +endmodule + +module \$_DLATCH_N_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = !E ? D : Q; +endmodule + +module \$_DLATCH_P_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = E ? D : Q; +endmodule + +`ifndef NO_LUT +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + EFX_LUT4 #(.LUTMASK(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(1'b0), .I2(1'b0), .I3(1'b0)); + end else + if (WIDTH == 2) begin + EFX_LUT4 #(.LUTMASK(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(A[1]), .I2(1'b0), .I3(1'b0)); + end else + if (WIDTH == 3) begin + EFX_LUT4 #(.LUTMASK(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(1'b0)); + end else + if (WIDTH == 4) begin + EFX_LUT4 #(.LUTMASK(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(A[3])); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule +`endif diff --git a/resources/netlist/resources/kernel/share/efinix/cells_sim.v b/resources/netlist/resources/kernel/share/efinix/cells_sim.v new file mode 100644 index 0000000..22c7bc7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/efinix/cells_sim.v @@ -0,0 +1,179 @@ +module EFX_LUT4( + output O, + input I0, + input I1, + input I2, + input I3 +); + parameter LUTMASK = 16'h0000; + + wire [7:0] s3 = I3 ? LUTMASK[15:8] : LUTMASK[7:0]; + wire [3:0] s2 = I2 ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = I1 ? s2[ 3:2] : s2[1:0]; + assign O = I0 ? s1[1] : s1[0]; +endmodule + +module EFX_ADD( + output O, + output CO, + input I0, + input I1, + input CI +); + parameter I0_POLARITY = 1; + parameter I1_POLARITY = 1; + + wire i0; + wire i1; + + assign i0 = I0_POLARITY ? I0 : ~I0; + assign i1 = I1_POLARITY ? I1 : ~I1; + + assign {CO, O} = i0 + i1 + CI; +endmodule + +module EFX_FF( + output reg Q, + input D, + input CE, + (* clkbuf_sink *) + input CLK, + input SR +); + parameter CLK_POLARITY = 1; + parameter CE_POLARITY = 1; + parameter SR_POLARITY = 1; + parameter SR_SYNC = 0; + parameter SR_VALUE = 0; + parameter SR_SYNC_PRIORITY = 0; + parameter D_POLARITY = 1; + + wire clk; + wire ce; + wire sr; + wire d; + wire prio; + wire sync; + wire async; + + assign clk = CLK_POLARITY ? CLK : ~CLK; + assign ce = CE_POLARITY ? CE : ~CE; + assign sr = SR_POLARITY ? SR : ~SR; + assign d = D_POLARITY ? D : ~D; + + initial Q = 1'b0; + + generate + if (SR_SYNC == 1) + begin + if (SR_SYNC_PRIORITY == 1) + begin + always @(posedge clk) + if (sr) + Q <= SR_VALUE; + else if (ce) + Q <= d; + end + else + begin + always @(posedge clk) + if (ce) + begin + if (sr) + Q <= SR_VALUE; + else + Q <= d; + end + end + end + else + begin + always @(posedge clk or posedge sr) + if (sr) + Q <= SR_VALUE; + else if (ce) + Q <= d; + + end + endgenerate +endmodule + +module EFX_GBUFCE( + input CE, + input I, + (* clkbuf_driver *) + output O +); + parameter CE_POLARITY = 1'b1; + + wire ce; + assign ce = CE_POLARITY ? CE : ~CE; + + assign O = I & ce; + +endmodule + +module EFX_RAM_5K( + input [WRITE_WIDTH-1:0] WDATA, + input [WRITE_ADDR_WIDTH-1:0] WADDR, + input WE, + (* clkbuf_sink *) + input WCLK, + input WCLKE, + output [READ_WIDTH-1:0] RDATA, + input [READ_ADDR_WIDTH-1:0] RADDR, + input RE, + (* clkbuf_sink *) + input RCLK +); + parameter READ_WIDTH = 20; + parameter WRITE_WIDTH = 20; + parameter OUTPUT_REG = 1'b0; + parameter RCLK_POLARITY = 1'b1; + parameter RE_POLARITY = 1'b1; + parameter WCLK_POLARITY = 1'b1; + parameter WE_POLARITY = 1'b1; + parameter WCLKE_POLARITY = 1'b1; + parameter WRITE_MODE = "READ_FIRST"; + parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + + localparam READ_ADDR_WIDTH = + (READ_WIDTH == 16) ? 8 : // 256x16 + (READ_WIDTH == 8) ? 9 : // 512x8 + (READ_WIDTH == 4) ? 10 : // 1024x4 + (READ_WIDTH == 2) ? 11 : // 2048x2 + (READ_WIDTH == 1) ? 12 : // 4096x1 + (READ_WIDTH == 20) ? 8 : // 256x20 + (READ_WIDTH == 10) ? 9 : // 512x10 + (READ_WIDTH == 5) ? 10 : -1; // 1024x5 + + localparam WRITE_ADDR_WIDTH = + (WRITE_WIDTH == 16) ? 8 : // 256x16 + (WRITE_WIDTH == 8) ? 9 : // 512x8 + (WRITE_WIDTH == 4) ? 10 : // 1024x4 + (WRITE_WIDTH == 2) ? 11 : // 2048x2 + (WRITE_WIDTH == 1) ? 12 : // 4096x1 + (WRITE_WIDTH == 20) ? 8 : // 256x20 + (WRITE_WIDTH == 10) ? 9 : // 512x10 + (WRITE_WIDTH == 5) ? 10 : -1; // 1024x5 + +endmodule diff --git a/resources/netlist/resources/kernel/share/efinix/gbuf_map.v b/resources/netlist/resources/kernel/share/efinix/gbuf_map.v new file mode 100644 index 0000000..43e0c9a --- /dev/null +++ b/resources/netlist/resources/kernel/share/efinix/gbuf_map.v @@ -0,0 +1,3 @@ +module \$__EFX_GBUF (input I, output O); + EFX_GBUFCE #(.CE_POLARITY(1'b1)) _TECHMAP_REPLACE_ (.I(I), .O(O), .CE(1'b1)); +endmodule diff --git a/resources/netlist/resources/kernel/share/gate2lut.v b/resources/netlist/resources/kernel/share/gate2lut.v new file mode 100644 index 0000000..15cea3d --- /dev/null +++ b/resources/netlist/resources/kernel/share/gate2lut.v @@ -0,0 +1,87 @@ +(* techmap_celltype = "$_NOT_" *) +module _90_lut_not (A, Y); + input A; + output Y; + + wire [`LUT_WIDTH-1:0] AA; + assign AA = {A}; + + \$lut #( + .WIDTH(`LUT_WIDTH), + .LUT(4'b01) + ) lut ( + .A(AA), + .Y(Y) + ); +endmodule + +(* techmap_celltype = "$_OR_" *) +module _90_lut_or (A, B, Y); + input A, B; + output Y; + + wire [`LUT_WIDTH-1:0] AA; + assign AA = {B, A}; + + \$lut #( + .WIDTH(`LUT_WIDTH), + .LUT(4'b1110) + ) lut ( + .A(AA), + .Y(Y) + ); +endmodule + +(* techmap_celltype = "$_AND_" *) +module _90_lut_and (A, B, Y); + input A, B; + output Y; + + wire [`LUT_WIDTH-1:0] AA; + assign AA = {B, A}; + + \$lut #( + .WIDTH(`LUT_WIDTH), + .LUT(4'b1000) + ) lut ( + .A(AA), + .Y(Y) + ); +endmodule + +(* techmap_celltype = "$_XOR_" *) +module _90_lut_xor (A, B, Y); + input A, B; + output Y; + + wire [`LUT_WIDTH-1:0] AA; + assign AA = {B, A}; + + \$lut #( + .WIDTH(`LUT_WIDTH), + .LUT(4'b0110) + ) lut ( + .A(AA), + .Y(Y) + ); +endmodule + +(* techmap_celltype = "$_MUX_" *) +module _90_lut_mux (A, B, S, Y); + input A, B, S; + output Y; + + wire [`LUT_WIDTH-1:0] AA; + assign AA = {S, B, A}; + + \$lut #( + .WIDTH(`LUT_WIDTH), + // A 1010 1010 + // B 1100 1100 + // S 1111 0000 + .LUT(8'b 1100_1010) + ) lut ( + .A(AA), + .Y(Y) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/arith_map.v b/resources/netlist/resources/kernel/share/gatemate/arith_map.v new file mode 100644 index 0000000..4d7e6c3 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/arith_map.v @@ -0,0 +1,69 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_gatemate_alu(A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] C = {CO, CI}; + + genvar i; + generate + for (i = 0; i < Y_WIDTH; i = i + 1) + begin: slice + CC_ADDF addf_i ( + .A(AA[i]), + .B(BB[i]), + .CI(C[i]), + .CO(CO[i]), + .S(Y[i]) + ); + end + endgenerate + + assign X = AA ^ BB; + +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/brams.txt b/resources/netlist/resources/kernel/share/gatemate/brams.txt new file mode 100644 index 0000000..be22856 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/brams.txt @@ -0,0 +1,80 @@ +ram block $__CC_BRAM_TDP_ { + option "MODE" "20K" { + abits 14; + widths 1 2 5 10 20 per_port; + cost 129; + } + option "MODE" "40K" { + abits 15; + widths 1 2 5 10 20 40 per_port; + cost 257; + } + option "MODE" "CASCADE" { + abits 16; + # hack to enforce same INIT layout as in the other modes + widths 1 2 5 per_port; + cost 513; + } + byte 1; + init no_undef; + port srsw "A" "B" { + clock anyedge; + clken; + option "MODE" "20K" { + width mix; + } + option "MODE" "40K" { + width mix; + } + option "MODE" "CASCADE" { + width mix 1; + } + portoption "WR_MODE" "NO_CHANGE" { + rdwr no_change; + } + portoption "WR_MODE" "WRITE_THROUGH" { + rdwr new; + wrtrans all new; + } + wrbe_separate; + optional_rw; + } +} + +ram block $__CC_BRAM_SDP_ { + option "MODE" "20K" { + abits 14; + widths 1 2 5 10 20 40 per_port; + cost 129; + } + option "MODE" "40K" { + abits 15; + widths 1 2 5 10 20 40 80 per_port; + cost 257; + } + byte 1; + init no_undef; + port sr "R" { + option "MODE" "20K" { + width 40; + } + option "MODE" "40K" { + width 80; + } + clock anyedge; + clken; + optional; + } + port sw "W" { + option "MODE" "20K" { + width 40; + } + option "MODE" "40K" { + width 80; + } + clock anyedge; + clken; + wrbe_separate; + optional; + } +} diff --git a/resources/netlist/resources/kernel/share/gatemate/brams_init_20.vh b/resources/netlist/resources/kernel/share/gatemate/brams_init_20.vh new file mode 100644 index 0000000..d0764ed --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/brams_init_20.vh @@ -0,0 +1,64 @@ +.INIT_00(permute_init(INIT[ 0*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_01(permute_init(INIT[ 1*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_02(permute_init(INIT[ 2*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_03(permute_init(INIT[ 3*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_04(permute_init(INIT[ 4*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_05(permute_init(INIT[ 5*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_06(permute_init(INIT[ 6*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_07(permute_init(INIT[ 7*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_08(permute_init(INIT[ 8*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_09(permute_init(INIT[ 9*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0A(permute_init(INIT[ 10*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0B(permute_init(INIT[ 11*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0C(permute_init(INIT[ 12*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0D(permute_init(INIT[ 13*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0E(permute_init(INIT[ 14*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0F(permute_init(INIT[ 15*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_10(permute_init(INIT[ 16*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_11(permute_init(INIT[ 17*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_12(permute_init(INIT[ 18*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_13(permute_init(INIT[ 19*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_14(permute_init(INIT[ 20*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_15(permute_init(INIT[ 21*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_16(permute_init(INIT[ 22*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_17(permute_init(INIT[ 23*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_18(permute_init(INIT[ 24*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_19(permute_init(INIT[ 25*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1A(permute_init(INIT[ 26*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1B(permute_init(INIT[ 27*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1C(permute_init(INIT[ 28*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1D(permute_init(INIT[ 29*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1E(permute_init(INIT[ 30*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1F(permute_init(INIT[ 31*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_20(permute_init(INIT[ 32*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_21(permute_init(INIT[ 33*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_22(permute_init(INIT[ 34*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_23(permute_init(INIT[ 35*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_24(permute_init(INIT[ 36*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_25(permute_init(INIT[ 37*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_26(permute_init(INIT[ 38*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_27(permute_init(INIT[ 39*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_28(permute_init(INIT[ 40*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_29(permute_init(INIT[ 41*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2A(permute_init(INIT[ 42*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2B(permute_init(INIT[ 43*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2C(permute_init(INIT[ 44*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2D(permute_init(INIT[ 45*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2E(permute_init(INIT[ 46*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2F(permute_init(INIT[ 47*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_30(permute_init(INIT[ 48*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_31(permute_init(INIT[ 49*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_32(permute_init(INIT[ 50*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_33(permute_init(INIT[ 51*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_34(permute_init(INIT[ 52*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_35(permute_init(INIT[ 53*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_36(permute_init(INIT[ 54*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_37(permute_init(INIT[ 55*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_38(permute_init(INIT[ 56*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_39(permute_init(INIT[ 57*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3A(permute_init(INIT[ 58*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3B(permute_init(INIT[ 59*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3C(permute_init(INIT[ 60*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3D(permute_init(INIT[ 61*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3E(permute_init(INIT[ 62*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3F(permute_init(INIT[ 63*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), diff --git a/resources/netlist/resources/kernel/share/gatemate/brams_init_40.vh b/resources/netlist/resources/kernel/share/gatemate/brams_init_40.vh new file mode 100644 index 0000000..6493425 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/brams_init_40.vh @@ -0,0 +1,260 @@ +`ifdef INIT_LOWER +.INIT_00(permute_init(INIT[ 0*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_01(permute_init(INIT[ 1*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_02(permute_init(INIT[ 2*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_03(permute_init(INIT[ 3*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_04(permute_init(INIT[ 4*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_05(permute_init(INIT[ 5*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_06(permute_init(INIT[ 6*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_07(permute_init(INIT[ 7*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_08(permute_init(INIT[ 8*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_09(permute_init(INIT[ 9*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0A(permute_init(INIT[ 10*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0B(permute_init(INIT[ 11*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0C(permute_init(INIT[ 12*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0D(permute_init(INIT[ 13*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0E(permute_init(INIT[ 14*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0F(permute_init(INIT[ 15*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_10(permute_init(INIT[ 16*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_11(permute_init(INIT[ 17*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_12(permute_init(INIT[ 18*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_13(permute_init(INIT[ 19*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_14(permute_init(INIT[ 20*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_15(permute_init(INIT[ 21*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_16(permute_init(INIT[ 22*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_17(permute_init(INIT[ 23*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_18(permute_init(INIT[ 24*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_19(permute_init(INIT[ 25*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1A(permute_init(INIT[ 26*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1B(permute_init(INIT[ 27*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1C(permute_init(INIT[ 28*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1D(permute_init(INIT[ 29*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1E(permute_init(INIT[ 30*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1F(permute_init(INIT[ 31*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_20(permute_init(INIT[ 32*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_21(permute_init(INIT[ 33*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_22(permute_init(INIT[ 34*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_23(permute_init(INIT[ 35*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_24(permute_init(INIT[ 36*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_25(permute_init(INIT[ 37*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_26(permute_init(INIT[ 38*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_27(permute_init(INIT[ 39*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_28(permute_init(INIT[ 40*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_29(permute_init(INIT[ 41*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2A(permute_init(INIT[ 42*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2B(permute_init(INIT[ 43*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2C(permute_init(INIT[ 44*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2D(permute_init(INIT[ 45*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2E(permute_init(INIT[ 46*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2F(permute_init(INIT[ 47*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_30(permute_init(INIT[ 48*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_31(permute_init(INIT[ 49*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_32(permute_init(INIT[ 50*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_33(permute_init(INIT[ 51*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_34(permute_init(INIT[ 52*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_35(permute_init(INIT[ 53*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_36(permute_init(INIT[ 54*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_37(permute_init(INIT[ 55*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_38(permute_init(INIT[ 56*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_39(permute_init(INIT[ 57*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3A(permute_init(INIT[ 58*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3B(permute_init(INIT[ 59*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3C(permute_init(INIT[ 60*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3D(permute_init(INIT[ 61*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3E(permute_init(INIT[ 62*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3F(permute_init(INIT[ 63*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_40(permute_init(INIT[ 64*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_41(permute_init(INIT[ 65*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_42(permute_init(INIT[ 66*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_43(permute_init(INIT[ 67*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_44(permute_init(INIT[ 68*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_45(permute_init(INIT[ 69*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_46(permute_init(INIT[ 70*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_47(permute_init(INIT[ 71*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_48(permute_init(INIT[ 72*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_49(permute_init(INIT[ 73*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4A(permute_init(INIT[ 74*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4B(permute_init(INIT[ 75*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4C(permute_init(INIT[ 76*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4D(permute_init(INIT[ 77*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4E(permute_init(INIT[ 78*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4F(permute_init(INIT[ 79*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_50(permute_init(INIT[ 80*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_51(permute_init(INIT[ 81*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_52(permute_init(INIT[ 82*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_53(permute_init(INIT[ 83*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_54(permute_init(INIT[ 84*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_55(permute_init(INIT[ 85*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_56(permute_init(INIT[ 86*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_57(permute_init(INIT[ 87*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_58(permute_init(INIT[ 88*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_59(permute_init(INIT[ 89*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5A(permute_init(INIT[ 90*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5B(permute_init(INIT[ 91*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5C(permute_init(INIT[ 92*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5D(permute_init(INIT[ 93*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5E(permute_init(INIT[ 94*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5F(permute_init(INIT[ 95*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_60(permute_init(INIT[ 96*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_61(permute_init(INIT[ 97*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_62(permute_init(INIT[ 98*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_63(permute_init(INIT[ 99*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_64(permute_init(INIT[100*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_65(permute_init(INIT[101*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_66(permute_init(INIT[102*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_67(permute_init(INIT[103*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_68(permute_init(INIT[104*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_69(permute_init(INIT[105*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6A(permute_init(INIT[106*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6B(permute_init(INIT[107*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6C(permute_init(INIT[108*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6D(permute_init(INIT[109*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6E(permute_init(INIT[110*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6F(permute_init(INIT[111*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_70(permute_init(INIT[112*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_71(permute_init(INIT[113*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_72(permute_init(INIT[114*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_73(permute_init(INIT[115*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_74(permute_init(INIT[116*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_75(permute_init(INIT[117*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_76(permute_init(INIT[118*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_77(permute_init(INIT[119*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_78(permute_init(INIT[120*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_79(permute_init(INIT[121*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7A(permute_init(INIT[122*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7B(permute_init(INIT[123*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7C(permute_init(INIT[124*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7D(permute_init(INIT[125*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7E(permute_init(INIT[126*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7F(permute_init(INIT[127*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +`endif +`ifdef INIT_UPPER +.INIT_00(permute_init(INIT[128*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_01(permute_init(INIT[129*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_02(permute_init(INIT[130*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_03(permute_init(INIT[131*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_04(permute_init(INIT[132*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_05(permute_init(INIT[133*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_06(permute_init(INIT[134*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_07(permute_init(INIT[135*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_08(permute_init(INIT[136*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_09(permute_init(INIT[137*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0A(permute_init(INIT[138*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0B(permute_init(INIT[139*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0C(permute_init(INIT[140*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0D(permute_init(INIT[141*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0E(permute_init(INIT[142*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_0F(permute_init(INIT[143*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_10(permute_init(INIT[144*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_11(permute_init(INIT[145*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_12(permute_init(INIT[146*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_13(permute_init(INIT[147*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_14(permute_init(INIT[148*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_15(permute_init(INIT[149*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_16(permute_init(INIT[150*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_17(permute_init(INIT[151*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_18(permute_init(INIT[152*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_19(permute_init(INIT[153*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1A(permute_init(INIT[154*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1B(permute_init(INIT[155*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1C(permute_init(INIT[156*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1D(permute_init(INIT[157*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1E(permute_init(INIT[158*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_1F(permute_init(INIT[159*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_20(permute_init(INIT[160*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_21(permute_init(INIT[161*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_22(permute_init(INIT[162*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_23(permute_init(INIT[163*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_24(permute_init(INIT[164*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_25(permute_init(INIT[165*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_26(permute_init(INIT[166*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_27(permute_init(INIT[167*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_28(permute_init(INIT[168*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_29(permute_init(INIT[169*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2A(permute_init(INIT[170*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2B(permute_init(INIT[171*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2C(permute_init(INIT[172*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2D(permute_init(INIT[173*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2E(permute_init(INIT[174*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_2F(permute_init(INIT[175*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_30(permute_init(INIT[176*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_31(permute_init(INIT[177*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_32(permute_init(INIT[178*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_33(permute_init(INIT[179*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_34(permute_init(INIT[180*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_35(permute_init(INIT[181*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_36(permute_init(INIT[182*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_37(permute_init(INIT[183*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_38(permute_init(INIT[184*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_39(permute_init(INIT[185*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3A(permute_init(INIT[186*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3B(permute_init(INIT[187*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3C(permute_init(INIT[188*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3D(permute_init(INIT[189*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3E(permute_init(INIT[190*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_3F(permute_init(INIT[191*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_40(permute_init(INIT[192*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_41(permute_init(INIT[193*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_42(permute_init(INIT[194*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_43(permute_init(INIT[195*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_44(permute_init(INIT[196*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_45(permute_init(INIT[197*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_46(permute_init(INIT[198*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_47(permute_init(INIT[199*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_48(permute_init(INIT[200*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_49(permute_init(INIT[201*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4A(permute_init(INIT[202*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4B(permute_init(INIT[203*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4C(permute_init(INIT[204*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4D(permute_init(INIT[205*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4E(permute_init(INIT[206*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_4F(permute_init(INIT[207*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_50(permute_init(INIT[208*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_51(permute_init(INIT[209*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_52(permute_init(INIT[210*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_53(permute_init(INIT[211*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_54(permute_init(INIT[212*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_55(permute_init(INIT[213*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_56(permute_init(INIT[214*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_57(permute_init(INIT[215*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_58(permute_init(INIT[216*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_59(permute_init(INIT[217*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5A(permute_init(INIT[218*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5B(permute_init(INIT[219*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5C(permute_init(INIT[220*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5D(permute_init(INIT[221*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5E(permute_init(INIT[222*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_5F(permute_init(INIT[223*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_60(permute_init(INIT[224*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_61(permute_init(INIT[225*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_62(permute_init(INIT[226*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_63(permute_init(INIT[227*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_64(permute_init(INIT[228*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_65(permute_init(INIT[229*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_66(permute_init(INIT[230*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_67(permute_init(INIT[231*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_68(permute_init(INIT[232*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_69(permute_init(INIT[233*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6A(permute_init(INIT[234*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6B(permute_init(INIT[235*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6C(permute_init(INIT[236*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6D(permute_init(INIT[237*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6E(permute_init(INIT[238*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_6F(permute_init(INIT[239*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_70(permute_init(INIT[240*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_71(permute_init(INIT[241*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_72(permute_init(INIT[242*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_73(permute_init(INIT[243*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_74(permute_init(INIT[244*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_75(permute_init(INIT[245*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_76(permute_init(INIT[246*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_77(permute_init(INIT[247*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_78(permute_init(INIT[248*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_79(permute_init(INIT[249*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7A(permute_init(INIT[250*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7B(permute_init(INIT[251*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7C(permute_init(INIT[252*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7D(permute_init(INIT[253*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7E(permute_init(INIT[254*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +.INIT_7F(permute_init(INIT[255*INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE])), +`endif diff --git a/resources/netlist/resources/kernel/share/gatemate/brams_map.v b/resources/netlist/resources/kernel/share/gatemate/brams_map.v new file mode 100644 index 0000000..7eeb14e --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/brams_map.v @@ -0,0 +1,882 @@ +module $__CC_BRAM_TDP_(...); + +parameter INIT = 0; +parameter OPTION_MODE = "20K"; + +parameter PORT_A_CLK_POL = 1; +parameter PORT_A_RD_USED = 1; +parameter PORT_A_WR_USED = 1; +parameter PORT_A_RD_WIDTH = 1; +parameter PORT_A_WR_WIDTH = 1; +parameter PORT_A_WR_BE_WIDTH = 1; +parameter PORT_A_OPTION_WR_MODE = "NO_CHANGE"; + +parameter PORT_B_CLK_POL = 1; +parameter PORT_B_RD_USED = 1; +parameter PORT_B_WR_USED = 1; +parameter PORT_B_RD_WIDTH = 1; +parameter PORT_B_WR_WIDTH = 1; +parameter PORT_B_WR_BE_WIDTH = 1; +parameter PORT_B_OPTION_WR_MODE = "NO_CHANGE"; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input [15:0] PORT_A_ADDR; +input [PORT_A_WR_BE_WIDTH-1:0] PORT_A_WR_BE; +input [PORT_A_WR_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_RD_WIDTH-1:0] PORT_A_RD_DATA; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input [15:0] PORT_B_ADDR; +input [PORT_B_WR_BE_WIDTH-1:0] PORT_B_WR_BE; +input [PORT_B_WR_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_B_RD_WIDTH-1:0] PORT_B_RD_DATA; + +generate + if (OPTION_MODE == "20K") begin + CC_BRAM_20K #( + .INIT_00(INIT['h00*320+:320]), + .INIT_01(INIT['h01*320+:320]), + .INIT_02(INIT['h02*320+:320]), + .INIT_03(INIT['h03*320+:320]), + .INIT_04(INIT['h04*320+:320]), + .INIT_05(INIT['h05*320+:320]), + .INIT_06(INIT['h06*320+:320]), + .INIT_07(INIT['h07*320+:320]), + .INIT_08(INIT['h08*320+:320]), + .INIT_09(INIT['h09*320+:320]), + .INIT_0A(INIT['h0a*320+:320]), + .INIT_0B(INIT['h0b*320+:320]), + .INIT_0C(INIT['h0c*320+:320]), + .INIT_0D(INIT['h0d*320+:320]), + .INIT_0E(INIT['h0e*320+:320]), + .INIT_0F(INIT['h0f*320+:320]), + .INIT_10(INIT['h10*320+:320]), + .INIT_11(INIT['h11*320+:320]), + .INIT_12(INIT['h12*320+:320]), + .INIT_13(INIT['h13*320+:320]), + .INIT_14(INIT['h14*320+:320]), + .INIT_15(INIT['h15*320+:320]), + .INIT_16(INIT['h16*320+:320]), + .INIT_17(INIT['h17*320+:320]), + .INIT_18(INIT['h18*320+:320]), + .INIT_19(INIT['h19*320+:320]), + .INIT_1A(INIT['h1a*320+:320]), + .INIT_1B(INIT['h1b*320+:320]), + .INIT_1C(INIT['h1c*320+:320]), + .INIT_1D(INIT['h1d*320+:320]), + .INIT_1E(INIT['h1e*320+:320]), + .INIT_1F(INIT['h1f*320+:320]), + .INIT_20(INIT['h20*320+:320]), + .INIT_21(INIT['h21*320+:320]), + .INIT_22(INIT['h22*320+:320]), + .INIT_23(INIT['h23*320+:320]), + .INIT_24(INIT['h24*320+:320]), + .INIT_25(INIT['h25*320+:320]), + .INIT_26(INIT['h26*320+:320]), + .INIT_27(INIT['h27*320+:320]), + .INIT_28(INIT['h28*320+:320]), + .INIT_29(INIT['h29*320+:320]), + .INIT_2A(INIT['h2a*320+:320]), + .INIT_2B(INIT['h2b*320+:320]), + .INIT_2C(INIT['h2c*320+:320]), + .INIT_2D(INIT['h2d*320+:320]), + .INIT_2E(INIT['h2e*320+:320]), + .INIT_2F(INIT['h2f*320+:320]), + .INIT_30(INIT['h30*320+:320]), + .INIT_31(INIT['h31*320+:320]), + .INIT_32(INIT['h32*320+:320]), + .INIT_33(INIT['h33*320+:320]), + .INIT_34(INIT['h34*320+:320]), + .INIT_35(INIT['h35*320+:320]), + .INIT_36(INIT['h36*320+:320]), + .INIT_37(INIT['h37*320+:320]), + .INIT_38(INIT['h38*320+:320]), + .INIT_39(INIT['h39*320+:320]), + .INIT_3A(INIT['h3a*320+:320]), + .INIT_3B(INIT['h3b*320+:320]), + .INIT_3C(INIT['h3c*320+:320]), + .INIT_3D(INIT['h3d*320+:320]), + .INIT_3E(INIT['h3e*320+:320]), + .INIT_3F(INIT['h3f*320+:320]), + .A_RD_WIDTH(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), + .A_WR_WIDTH(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), + .B_RD_WIDTH(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), + .B_WR_WIDTH(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), + .RAM_MODE("TDP"), + .A_WR_MODE(PORT_A_OPTION_WR_MODE), + .B_WR_MODE(PORT_B_OPTION_WR_MODE), + .A_CLK_INV(!PORT_A_CLK_POL), + .B_CLK_INV(!PORT_B_CLK_POL), + ) _TECHMAP_REPLACE_ ( + .A_CLK(PORT_A_CLK), + .A_EN(PORT_A_CLK_EN), + .A_WE(PORT_A_WR_EN), + .A_BM(PORT_A_WR_BE), + .A_DI(PORT_A_WR_DATA), + .A_ADDR({PORT_A_ADDR[13:5], 1'b0, PORT_A_ADDR[4:0], 1'b0}), + .A_DO(PORT_A_RD_DATA), + .B_CLK(PORT_B_CLK), + .B_EN(PORT_B_CLK_EN), + .B_WE(PORT_B_WR_EN), + .B_BM(PORT_B_WR_BE), + .B_DI(PORT_B_WR_DATA), + .B_ADDR({PORT_B_ADDR[13:5], 1'b0, PORT_B_ADDR[4:0], 1'b0}), + .B_DO(PORT_B_RD_DATA), + ); + end else if (OPTION_MODE == "40K") begin + CC_BRAM_40K #( + .INIT_00(INIT['h00*320+:320]), + .INIT_01(INIT['h01*320+:320]), + .INIT_02(INIT['h02*320+:320]), + .INIT_03(INIT['h03*320+:320]), + .INIT_04(INIT['h04*320+:320]), + .INIT_05(INIT['h05*320+:320]), + .INIT_06(INIT['h06*320+:320]), + .INIT_07(INIT['h07*320+:320]), + .INIT_08(INIT['h08*320+:320]), + .INIT_09(INIT['h09*320+:320]), + .INIT_0A(INIT['h0a*320+:320]), + .INIT_0B(INIT['h0b*320+:320]), + .INIT_0C(INIT['h0c*320+:320]), + .INIT_0D(INIT['h0d*320+:320]), + .INIT_0E(INIT['h0e*320+:320]), + .INIT_0F(INIT['h0f*320+:320]), + .INIT_10(INIT['h10*320+:320]), + .INIT_11(INIT['h11*320+:320]), + .INIT_12(INIT['h12*320+:320]), + .INIT_13(INIT['h13*320+:320]), + .INIT_14(INIT['h14*320+:320]), + .INIT_15(INIT['h15*320+:320]), + .INIT_16(INIT['h16*320+:320]), + .INIT_17(INIT['h17*320+:320]), + .INIT_18(INIT['h18*320+:320]), + .INIT_19(INIT['h19*320+:320]), + .INIT_1A(INIT['h1a*320+:320]), + .INIT_1B(INIT['h1b*320+:320]), + .INIT_1C(INIT['h1c*320+:320]), + .INIT_1D(INIT['h1d*320+:320]), + .INIT_1E(INIT['h1e*320+:320]), + .INIT_1F(INIT['h1f*320+:320]), + .INIT_20(INIT['h20*320+:320]), + .INIT_21(INIT['h21*320+:320]), + .INIT_22(INIT['h22*320+:320]), + .INIT_23(INIT['h23*320+:320]), + .INIT_24(INIT['h24*320+:320]), + .INIT_25(INIT['h25*320+:320]), + .INIT_26(INIT['h26*320+:320]), + .INIT_27(INIT['h27*320+:320]), + .INIT_28(INIT['h28*320+:320]), + .INIT_29(INIT['h29*320+:320]), + .INIT_2A(INIT['h2a*320+:320]), + .INIT_2B(INIT['h2b*320+:320]), + .INIT_2C(INIT['h2c*320+:320]), + .INIT_2D(INIT['h2d*320+:320]), + .INIT_2E(INIT['h2e*320+:320]), + .INIT_2F(INIT['h2f*320+:320]), + .INIT_30(INIT['h30*320+:320]), + .INIT_31(INIT['h31*320+:320]), + .INIT_32(INIT['h32*320+:320]), + .INIT_33(INIT['h33*320+:320]), + .INIT_34(INIT['h34*320+:320]), + .INIT_35(INIT['h35*320+:320]), + .INIT_36(INIT['h36*320+:320]), + .INIT_37(INIT['h37*320+:320]), + .INIT_38(INIT['h38*320+:320]), + .INIT_39(INIT['h39*320+:320]), + .INIT_3A(INIT['h3a*320+:320]), + .INIT_3B(INIT['h3b*320+:320]), + .INIT_3C(INIT['h3c*320+:320]), + .INIT_3D(INIT['h3d*320+:320]), + .INIT_3E(INIT['h3e*320+:320]), + .INIT_3F(INIT['h3f*320+:320]), + .INIT_40(INIT['h40*320+:320]), + .INIT_41(INIT['h41*320+:320]), + .INIT_42(INIT['h42*320+:320]), + .INIT_43(INIT['h43*320+:320]), + .INIT_44(INIT['h44*320+:320]), + .INIT_45(INIT['h45*320+:320]), + .INIT_46(INIT['h46*320+:320]), + .INIT_47(INIT['h47*320+:320]), + .INIT_48(INIT['h48*320+:320]), + .INIT_49(INIT['h49*320+:320]), + .INIT_4A(INIT['h4a*320+:320]), + .INIT_4B(INIT['h4b*320+:320]), + .INIT_4C(INIT['h4c*320+:320]), + .INIT_4D(INIT['h4d*320+:320]), + .INIT_4E(INIT['h4e*320+:320]), + .INIT_4F(INIT['h4f*320+:320]), + .INIT_50(INIT['h50*320+:320]), + .INIT_51(INIT['h51*320+:320]), + .INIT_52(INIT['h52*320+:320]), + .INIT_53(INIT['h53*320+:320]), + .INIT_54(INIT['h54*320+:320]), + .INIT_55(INIT['h55*320+:320]), + .INIT_56(INIT['h56*320+:320]), + .INIT_57(INIT['h57*320+:320]), + .INIT_58(INIT['h58*320+:320]), + .INIT_59(INIT['h59*320+:320]), + .INIT_5A(INIT['h5a*320+:320]), + .INIT_5B(INIT['h5b*320+:320]), + .INIT_5C(INIT['h5c*320+:320]), + .INIT_5D(INIT['h5d*320+:320]), + .INIT_5E(INIT['h5e*320+:320]), + .INIT_5F(INIT['h5f*320+:320]), + .INIT_60(INIT['h60*320+:320]), + .INIT_61(INIT['h61*320+:320]), + .INIT_62(INIT['h62*320+:320]), + .INIT_63(INIT['h63*320+:320]), + .INIT_64(INIT['h64*320+:320]), + .INIT_65(INIT['h65*320+:320]), + .INIT_66(INIT['h66*320+:320]), + .INIT_67(INIT['h67*320+:320]), + .INIT_68(INIT['h68*320+:320]), + .INIT_69(INIT['h69*320+:320]), + .INIT_6A(INIT['h6a*320+:320]), + .INIT_6B(INIT['h6b*320+:320]), + .INIT_6C(INIT['h6c*320+:320]), + .INIT_6D(INIT['h6d*320+:320]), + .INIT_6E(INIT['h6e*320+:320]), + .INIT_6F(INIT['h6f*320+:320]), + .INIT_70(INIT['h70*320+:320]), + .INIT_71(INIT['h71*320+:320]), + .INIT_72(INIT['h72*320+:320]), + .INIT_73(INIT['h73*320+:320]), + .INIT_74(INIT['h74*320+:320]), + .INIT_75(INIT['h75*320+:320]), + .INIT_76(INIT['h76*320+:320]), + .INIT_77(INIT['h77*320+:320]), + .INIT_78(INIT['h78*320+:320]), + .INIT_79(INIT['h79*320+:320]), + .INIT_7A(INIT['h7a*320+:320]), + .INIT_7B(INIT['h7b*320+:320]), + .INIT_7C(INIT['h7c*320+:320]), + .INIT_7D(INIT['h7d*320+:320]), + .INIT_7E(INIT['h7e*320+:320]), + .INIT_7F(INIT['h7f*320+:320]), + .A_RD_WIDTH(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), + .A_WR_WIDTH(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), + .B_RD_WIDTH(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), + .B_WR_WIDTH(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), + .RAM_MODE("TDP"), + .A_WR_MODE(PORT_A_OPTION_WR_MODE), + .B_WR_MODE(PORT_B_OPTION_WR_MODE), + .A_CLK_INV(!PORT_A_CLK_POL), + .B_CLK_INV(!PORT_B_CLK_POL), + ) _TECHMAP_REPLACE_ ( + .A_CLK(PORT_A_CLK), + .A_EN(PORT_A_CLK_EN), + .A_WE(PORT_A_WR_EN), + .A_BM(PORT_A_WR_BE), + .A_DI(PORT_A_WR_DATA), + .A_ADDR({PORT_A_ADDR[14:0], 1'b0}), + .A_DO(PORT_A_RD_DATA), + .B_CLK(PORT_B_CLK), + .B_EN(PORT_B_CLK_EN), + .B_WE(PORT_B_WR_EN), + .B_BM(PORT_B_WR_BE), + .B_DI(PORT_B_WR_DATA), + .B_ADDR({PORT_B_ADDR[14:0], 1'b0}), + .B_DO(PORT_B_RD_DATA), + ); + end else begin + wire CAS_A, CAS_B; + CC_BRAM_40K #( + .INIT_00(INIT['h00*320+:320]), + .INIT_01(INIT['h01*320+:320]), + .INIT_02(INIT['h02*320+:320]), + .INIT_03(INIT['h03*320+:320]), + .INIT_04(INIT['h04*320+:320]), + .INIT_05(INIT['h05*320+:320]), + .INIT_06(INIT['h06*320+:320]), + .INIT_07(INIT['h07*320+:320]), + .INIT_08(INIT['h08*320+:320]), + .INIT_09(INIT['h09*320+:320]), + .INIT_0A(INIT['h0a*320+:320]), + .INIT_0B(INIT['h0b*320+:320]), + .INIT_0C(INIT['h0c*320+:320]), + .INIT_0D(INIT['h0d*320+:320]), + .INIT_0E(INIT['h0e*320+:320]), + .INIT_0F(INIT['h0f*320+:320]), + .INIT_10(INIT['h10*320+:320]), + .INIT_11(INIT['h11*320+:320]), + .INIT_12(INIT['h12*320+:320]), + .INIT_13(INIT['h13*320+:320]), + .INIT_14(INIT['h14*320+:320]), + .INIT_15(INIT['h15*320+:320]), + .INIT_16(INIT['h16*320+:320]), + .INIT_17(INIT['h17*320+:320]), + .INIT_18(INIT['h18*320+:320]), + .INIT_19(INIT['h19*320+:320]), + .INIT_1A(INIT['h1a*320+:320]), + .INIT_1B(INIT['h1b*320+:320]), + .INIT_1C(INIT['h1c*320+:320]), + .INIT_1D(INIT['h1d*320+:320]), + .INIT_1E(INIT['h1e*320+:320]), + .INIT_1F(INIT['h1f*320+:320]), + .INIT_20(INIT['h20*320+:320]), + .INIT_21(INIT['h21*320+:320]), + .INIT_22(INIT['h22*320+:320]), + .INIT_23(INIT['h23*320+:320]), + .INIT_24(INIT['h24*320+:320]), + .INIT_25(INIT['h25*320+:320]), + .INIT_26(INIT['h26*320+:320]), + .INIT_27(INIT['h27*320+:320]), + .INIT_28(INIT['h28*320+:320]), + .INIT_29(INIT['h29*320+:320]), + .INIT_2A(INIT['h2a*320+:320]), + .INIT_2B(INIT['h2b*320+:320]), + .INIT_2C(INIT['h2c*320+:320]), + .INIT_2D(INIT['h2d*320+:320]), + .INIT_2E(INIT['h2e*320+:320]), + .INIT_2F(INIT['h2f*320+:320]), + .INIT_30(INIT['h30*320+:320]), + .INIT_31(INIT['h31*320+:320]), + .INIT_32(INIT['h32*320+:320]), + .INIT_33(INIT['h33*320+:320]), + .INIT_34(INIT['h34*320+:320]), + .INIT_35(INIT['h35*320+:320]), + .INIT_36(INIT['h36*320+:320]), + .INIT_37(INIT['h37*320+:320]), + .INIT_38(INIT['h38*320+:320]), + .INIT_39(INIT['h39*320+:320]), + .INIT_3A(INIT['h3a*320+:320]), + .INIT_3B(INIT['h3b*320+:320]), + .INIT_3C(INIT['h3c*320+:320]), + .INIT_3D(INIT['h3d*320+:320]), + .INIT_3E(INIT['h3e*320+:320]), + .INIT_3F(INIT['h3f*320+:320]), + .INIT_40(INIT['h40*320+:320]), + .INIT_41(INIT['h41*320+:320]), + .INIT_42(INIT['h42*320+:320]), + .INIT_43(INIT['h43*320+:320]), + .INIT_44(INIT['h44*320+:320]), + .INIT_45(INIT['h45*320+:320]), + .INIT_46(INIT['h46*320+:320]), + .INIT_47(INIT['h47*320+:320]), + .INIT_48(INIT['h48*320+:320]), + .INIT_49(INIT['h49*320+:320]), + .INIT_4A(INIT['h4a*320+:320]), + .INIT_4B(INIT['h4b*320+:320]), + .INIT_4C(INIT['h4c*320+:320]), + .INIT_4D(INIT['h4d*320+:320]), + .INIT_4E(INIT['h4e*320+:320]), + .INIT_4F(INIT['h4f*320+:320]), + .INIT_50(INIT['h50*320+:320]), + .INIT_51(INIT['h51*320+:320]), + .INIT_52(INIT['h52*320+:320]), + .INIT_53(INIT['h53*320+:320]), + .INIT_54(INIT['h54*320+:320]), + .INIT_55(INIT['h55*320+:320]), + .INIT_56(INIT['h56*320+:320]), + .INIT_57(INIT['h57*320+:320]), + .INIT_58(INIT['h58*320+:320]), + .INIT_59(INIT['h59*320+:320]), + .INIT_5A(INIT['h5a*320+:320]), + .INIT_5B(INIT['h5b*320+:320]), + .INIT_5C(INIT['h5c*320+:320]), + .INIT_5D(INIT['h5d*320+:320]), + .INIT_5E(INIT['h5e*320+:320]), + .INIT_5F(INIT['h5f*320+:320]), + .INIT_60(INIT['h60*320+:320]), + .INIT_61(INIT['h61*320+:320]), + .INIT_62(INIT['h62*320+:320]), + .INIT_63(INIT['h63*320+:320]), + .INIT_64(INIT['h64*320+:320]), + .INIT_65(INIT['h65*320+:320]), + .INIT_66(INIT['h66*320+:320]), + .INIT_67(INIT['h67*320+:320]), + .INIT_68(INIT['h68*320+:320]), + .INIT_69(INIT['h69*320+:320]), + .INIT_6A(INIT['h6a*320+:320]), + .INIT_6B(INIT['h6b*320+:320]), + .INIT_6C(INIT['h6c*320+:320]), + .INIT_6D(INIT['h6d*320+:320]), + .INIT_6E(INIT['h6e*320+:320]), + .INIT_6F(INIT['h6f*320+:320]), + .INIT_70(INIT['h70*320+:320]), + .INIT_71(INIT['h71*320+:320]), + .INIT_72(INIT['h72*320+:320]), + .INIT_73(INIT['h73*320+:320]), + .INIT_74(INIT['h74*320+:320]), + .INIT_75(INIT['h75*320+:320]), + .INIT_76(INIT['h76*320+:320]), + .INIT_77(INIT['h77*320+:320]), + .INIT_78(INIT['h78*320+:320]), + .INIT_79(INIT['h79*320+:320]), + .INIT_7A(INIT['h7a*320+:320]), + .INIT_7B(INIT['h7b*320+:320]), + .INIT_7C(INIT['h7c*320+:320]), + .INIT_7D(INIT['h7d*320+:320]), + .INIT_7E(INIT['h7e*320+:320]), + .INIT_7F(INIT['h7f*320+:320]), + .A_RD_WIDTH(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), + .A_WR_WIDTH(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), + .B_RD_WIDTH(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), + .B_WR_WIDTH(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), + .RAM_MODE("TDP"), + .A_WR_MODE(PORT_A_OPTION_WR_MODE), + .B_WR_MODE(PORT_B_OPTION_WR_MODE), + .A_CLK_INV(!PORT_A_CLK_POL), + .B_CLK_INV(!PORT_B_CLK_POL), + .CAS("LOWER"), + ) lower ( + .A_CO(CAS_A), + .B_CO(CAS_B), + .A_CLK(PORT_A_CLK), + .A_EN(PORT_A_CLK_EN), + .A_WE(PORT_A_WR_EN), + .A_BM(PORT_A_WR_BE), + .A_DI(PORT_A_WR_DATA), + .A_ADDR({PORT_A_ADDR[14:0], PORT_A_ADDR[15]}), + .B_CLK(PORT_B_CLK), + .B_EN(PORT_B_CLK_EN), + .B_WE(PORT_B_WR_EN), + .B_BM(PORT_B_WR_BE), + .B_DI(PORT_B_WR_DATA), + .B_ADDR({PORT_B_ADDR[14:0], PORT_B_ADDR[15]}), + ); + CC_BRAM_40K #( + .INIT_00(INIT['h80*320+:320]), + .INIT_01(INIT['h81*320+:320]), + .INIT_02(INIT['h82*320+:320]), + .INIT_03(INIT['h83*320+:320]), + .INIT_04(INIT['h84*320+:320]), + .INIT_05(INIT['h85*320+:320]), + .INIT_06(INIT['h86*320+:320]), + .INIT_07(INIT['h87*320+:320]), + .INIT_08(INIT['h88*320+:320]), + .INIT_09(INIT['h89*320+:320]), + .INIT_0A(INIT['h8a*320+:320]), + .INIT_0B(INIT['h8b*320+:320]), + .INIT_0C(INIT['h8c*320+:320]), + .INIT_0D(INIT['h8d*320+:320]), + .INIT_0E(INIT['h8e*320+:320]), + .INIT_0F(INIT['h8f*320+:320]), + .INIT_10(INIT['h90*320+:320]), + .INIT_11(INIT['h91*320+:320]), + .INIT_12(INIT['h92*320+:320]), + .INIT_13(INIT['h93*320+:320]), + .INIT_14(INIT['h94*320+:320]), + .INIT_15(INIT['h95*320+:320]), + .INIT_16(INIT['h96*320+:320]), + .INIT_17(INIT['h97*320+:320]), + .INIT_18(INIT['h98*320+:320]), + .INIT_19(INIT['h99*320+:320]), + .INIT_1A(INIT['h9a*320+:320]), + .INIT_1B(INIT['h9b*320+:320]), + .INIT_1C(INIT['h9c*320+:320]), + .INIT_1D(INIT['h9d*320+:320]), + .INIT_1E(INIT['h9e*320+:320]), + .INIT_1F(INIT['h9f*320+:320]), + .INIT_20(INIT['ha0*320+:320]), + .INIT_21(INIT['ha1*320+:320]), + .INIT_22(INIT['ha2*320+:320]), + .INIT_23(INIT['ha3*320+:320]), + .INIT_24(INIT['ha4*320+:320]), + .INIT_25(INIT['ha5*320+:320]), + .INIT_26(INIT['ha6*320+:320]), + .INIT_27(INIT['ha7*320+:320]), + .INIT_28(INIT['ha8*320+:320]), + .INIT_29(INIT['ha9*320+:320]), + .INIT_2A(INIT['haa*320+:320]), + .INIT_2B(INIT['hab*320+:320]), + .INIT_2C(INIT['hac*320+:320]), + .INIT_2D(INIT['had*320+:320]), + .INIT_2E(INIT['hae*320+:320]), + .INIT_2F(INIT['haf*320+:320]), + .INIT_30(INIT['hb0*320+:320]), + .INIT_31(INIT['hb1*320+:320]), + .INIT_32(INIT['hb2*320+:320]), + .INIT_33(INIT['hb3*320+:320]), + .INIT_34(INIT['hb4*320+:320]), + .INIT_35(INIT['hb5*320+:320]), + .INIT_36(INIT['hb6*320+:320]), + .INIT_37(INIT['hb7*320+:320]), + .INIT_38(INIT['hb8*320+:320]), + .INIT_39(INIT['hb9*320+:320]), + .INIT_3A(INIT['hba*320+:320]), + .INIT_3B(INIT['hbb*320+:320]), + .INIT_3C(INIT['hbc*320+:320]), + .INIT_3D(INIT['hbd*320+:320]), + .INIT_3E(INIT['hbe*320+:320]), + .INIT_3F(INIT['hbf*320+:320]), + .INIT_40(INIT['hc0*320+:320]), + .INIT_41(INIT['hc1*320+:320]), + .INIT_42(INIT['hc2*320+:320]), + .INIT_43(INIT['hc3*320+:320]), + .INIT_44(INIT['hc4*320+:320]), + .INIT_45(INIT['hc5*320+:320]), + .INIT_46(INIT['hc6*320+:320]), + .INIT_47(INIT['hc7*320+:320]), + .INIT_48(INIT['hc8*320+:320]), + .INIT_49(INIT['hc9*320+:320]), + .INIT_4A(INIT['hca*320+:320]), + .INIT_4B(INIT['hcb*320+:320]), + .INIT_4C(INIT['hcc*320+:320]), + .INIT_4D(INIT['hcd*320+:320]), + .INIT_4E(INIT['hce*320+:320]), + .INIT_4F(INIT['hcf*320+:320]), + .INIT_50(INIT['hd0*320+:320]), + .INIT_51(INIT['hd1*320+:320]), + .INIT_52(INIT['hd2*320+:320]), + .INIT_53(INIT['hd3*320+:320]), + .INIT_54(INIT['hd4*320+:320]), + .INIT_55(INIT['hd5*320+:320]), + .INIT_56(INIT['hd6*320+:320]), + .INIT_57(INIT['hd7*320+:320]), + .INIT_58(INIT['hd8*320+:320]), + .INIT_59(INIT['hd9*320+:320]), + .INIT_5A(INIT['hda*320+:320]), + .INIT_5B(INIT['hdb*320+:320]), + .INIT_5C(INIT['hdc*320+:320]), + .INIT_5D(INIT['hdd*320+:320]), + .INIT_5E(INIT['hde*320+:320]), + .INIT_5F(INIT['hdf*320+:320]), + .INIT_60(INIT['he0*320+:320]), + .INIT_61(INIT['he1*320+:320]), + .INIT_62(INIT['he2*320+:320]), + .INIT_63(INIT['he3*320+:320]), + .INIT_64(INIT['he4*320+:320]), + .INIT_65(INIT['he5*320+:320]), + .INIT_66(INIT['he6*320+:320]), + .INIT_67(INIT['he7*320+:320]), + .INIT_68(INIT['he8*320+:320]), + .INIT_69(INIT['he9*320+:320]), + .INIT_6A(INIT['hea*320+:320]), + .INIT_6B(INIT['heb*320+:320]), + .INIT_6C(INIT['hec*320+:320]), + .INIT_6D(INIT['hed*320+:320]), + .INIT_6E(INIT['hee*320+:320]), + .INIT_6F(INIT['hef*320+:320]), + .INIT_70(INIT['hf0*320+:320]), + .INIT_71(INIT['hf1*320+:320]), + .INIT_72(INIT['hf2*320+:320]), + .INIT_73(INIT['hf3*320+:320]), + .INIT_74(INIT['hf4*320+:320]), + .INIT_75(INIT['hf5*320+:320]), + .INIT_76(INIT['hf6*320+:320]), + .INIT_77(INIT['hf7*320+:320]), + .INIT_78(INIT['hf8*320+:320]), + .INIT_79(INIT['hf9*320+:320]), + .INIT_7A(INIT['hfa*320+:320]), + .INIT_7B(INIT['hfb*320+:320]), + .INIT_7C(INIT['hfc*320+:320]), + .INIT_7D(INIT['hfd*320+:320]), + .INIT_7E(INIT['hfe*320+:320]), + .INIT_7F(INIT['hff*320+:320]), + .A_RD_WIDTH(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), + .A_WR_WIDTH(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), + .B_RD_WIDTH(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), + .B_WR_WIDTH(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), + .RAM_MODE("TDP"), + .A_WR_MODE(PORT_A_OPTION_WR_MODE), + .B_WR_MODE(PORT_B_OPTION_WR_MODE), + .A_CLK_INV(!PORT_A_CLK_POL), + .B_CLK_INV(!PORT_B_CLK_POL), + .CAS("UPPER"), + ) upper ( + .A_CI(CAS_A), + .B_CI(CAS_B), + .A_CLK(PORT_A_CLK), + .A_EN(PORT_A_CLK_EN), + .A_WE(PORT_A_WR_EN), + .A_BM(PORT_A_WR_BE), + .A_DI(PORT_A_WR_DATA), + .A_DO(PORT_A_RD_DATA), + .A_ADDR({PORT_A_ADDR[14:0], PORT_A_ADDR[15]}), + .B_CLK(PORT_B_CLK), + .B_EN(PORT_B_CLK_EN), + .B_WE(PORT_B_WR_EN), + .B_BM(PORT_B_WR_BE), + .B_DI(PORT_B_WR_DATA), + .B_DO(PORT_B_RD_DATA), + .B_ADDR({PORT_B_ADDR[14:0], PORT_B_ADDR[15]}), + ); + end +endgenerate + +endmodule + + +module $__CC_BRAM_SDP_(...); + +parameter INIT = 0; +parameter OPTION_MODE = "20K"; +parameter OPTION_WR_MODE = "NO_CHANGE"; + +parameter PORT_W_CLK_POL = 1; +parameter PORT_W_USED = 1; +parameter PORT_W_WIDTH = 40; +parameter PORT_W_WR_BE_WIDTH = 40; + +parameter PORT_R_CLK_POL = 1; +parameter PORT_R_USED = 1; +parameter PORT_R_WIDTH = 40; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input PORT_W_WR_EN; +input [15:0] PORT_W_ADDR; +input [PORT_W_WR_BE_WIDTH-1:0] PORT_W_WR_BE; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input [15:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +generate + if (OPTION_MODE == "20K") begin + CC_BRAM_20K #( + .INIT_00(INIT['h00*320+:320]), + .INIT_01(INIT['h01*320+:320]), + .INIT_02(INIT['h02*320+:320]), + .INIT_03(INIT['h03*320+:320]), + .INIT_04(INIT['h04*320+:320]), + .INIT_05(INIT['h05*320+:320]), + .INIT_06(INIT['h06*320+:320]), + .INIT_07(INIT['h07*320+:320]), + .INIT_08(INIT['h08*320+:320]), + .INIT_09(INIT['h09*320+:320]), + .INIT_0A(INIT['h0a*320+:320]), + .INIT_0B(INIT['h0b*320+:320]), + .INIT_0C(INIT['h0c*320+:320]), + .INIT_0D(INIT['h0d*320+:320]), + .INIT_0E(INIT['h0e*320+:320]), + .INIT_0F(INIT['h0f*320+:320]), + .INIT_10(INIT['h10*320+:320]), + .INIT_11(INIT['h11*320+:320]), + .INIT_12(INIT['h12*320+:320]), + .INIT_13(INIT['h13*320+:320]), + .INIT_14(INIT['h14*320+:320]), + .INIT_15(INIT['h15*320+:320]), + .INIT_16(INIT['h16*320+:320]), + .INIT_17(INIT['h17*320+:320]), + .INIT_18(INIT['h18*320+:320]), + .INIT_19(INIT['h19*320+:320]), + .INIT_1A(INIT['h1a*320+:320]), + .INIT_1B(INIT['h1b*320+:320]), + .INIT_1C(INIT['h1c*320+:320]), + .INIT_1D(INIT['h1d*320+:320]), + .INIT_1E(INIT['h1e*320+:320]), + .INIT_1F(INIT['h1f*320+:320]), + .INIT_20(INIT['h20*320+:320]), + .INIT_21(INIT['h21*320+:320]), + .INIT_22(INIT['h22*320+:320]), + .INIT_23(INIT['h23*320+:320]), + .INIT_24(INIT['h24*320+:320]), + .INIT_25(INIT['h25*320+:320]), + .INIT_26(INIT['h26*320+:320]), + .INIT_27(INIT['h27*320+:320]), + .INIT_28(INIT['h28*320+:320]), + .INIT_29(INIT['h29*320+:320]), + .INIT_2A(INIT['h2a*320+:320]), + .INIT_2B(INIT['h2b*320+:320]), + .INIT_2C(INIT['h2c*320+:320]), + .INIT_2D(INIT['h2d*320+:320]), + .INIT_2E(INIT['h2e*320+:320]), + .INIT_2F(INIT['h2f*320+:320]), + .INIT_30(INIT['h30*320+:320]), + .INIT_31(INIT['h31*320+:320]), + .INIT_32(INIT['h32*320+:320]), + .INIT_33(INIT['h33*320+:320]), + .INIT_34(INIT['h34*320+:320]), + .INIT_35(INIT['h35*320+:320]), + .INIT_36(INIT['h36*320+:320]), + .INIT_37(INIT['h37*320+:320]), + .INIT_38(INIT['h38*320+:320]), + .INIT_39(INIT['h39*320+:320]), + .INIT_3A(INIT['h3a*320+:320]), + .INIT_3B(INIT['h3b*320+:320]), + .INIT_3C(INIT['h3c*320+:320]), + .INIT_3D(INIT['h3d*320+:320]), + .INIT_3E(INIT['h3e*320+:320]), + .INIT_3F(INIT['h3f*320+:320]), + .A_RD_WIDTH(0), + .A_WR_WIDTH(PORT_W_USED ? PORT_W_WIDTH : 0), + .B_RD_WIDTH(PORT_R_USED ? PORT_R_WIDTH : 0), + .B_WR_WIDTH(0), + .RAM_MODE("SDP"), + .A_WR_MODE(OPTION_WR_MODE), + .B_WR_MODE(OPTION_WR_MODE), + .A_CLK_INV(!PORT_W_CLK_POL), + .B_CLK_INV(!PORT_R_CLK_POL), + ) _TECHMAP_REPLACE_ ( + .A_CLK(PORT_W_CLK), + .A_EN(PORT_W_CLK_EN), + .A_WE(PORT_W_WR_EN), + .A_BM(PORT_W_WR_BE[19:0]), + .B_BM(PORT_W_WR_BE[39:20]), + .A_DI(PORT_W_WR_DATA[19:0]), + .B_DI(PORT_W_WR_DATA[39:20]), + .A_ADDR({PORT_W_ADDR[13:5], 1'b0, PORT_W_ADDR[4:0], 1'b0}), + .B_CLK(PORT_R_CLK), + .B_EN(PORT_R_CLK_EN), + .B_WE(1'b0), + .B_ADDR({PORT_R_ADDR[13:5], 1'b0, PORT_R_ADDR[4:0], 1'b0}), + .A_DO(PORT_R_RD_DATA[19:0]), + .B_DO(PORT_R_RD_DATA[39:20]), + ); + end else if (OPTION_MODE == "40K") begin + CC_BRAM_40K #( + .INIT_00(INIT['h00*320+:320]), + .INIT_01(INIT['h01*320+:320]), + .INIT_02(INIT['h02*320+:320]), + .INIT_03(INIT['h03*320+:320]), + .INIT_04(INIT['h04*320+:320]), + .INIT_05(INIT['h05*320+:320]), + .INIT_06(INIT['h06*320+:320]), + .INIT_07(INIT['h07*320+:320]), + .INIT_08(INIT['h08*320+:320]), + .INIT_09(INIT['h09*320+:320]), + .INIT_0A(INIT['h0a*320+:320]), + .INIT_0B(INIT['h0b*320+:320]), + .INIT_0C(INIT['h0c*320+:320]), + .INIT_0D(INIT['h0d*320+:320]), + .INIT_0E(INIT['h0e*320+:320]), + .INIT_0F(INIT['h0f*320+:320]), + .INIT_10(INIT['h10*320+:320]), + .INIT_11(INIT['h11*320+:320]), + .INIT_12(INIT['h12*320+:320]), + .INIT_13(INIT['h13*320+:320]), + .INIT_14(INIT['h14*320+:320]), + .INIT_15(INIT['h15*320+:320]), + .INIT_16(INIT['h16*320+:320]), + .INIT_17(INIT['h17*320+:320]), + .INIT_18(INIT['h18*320+:320]), + .INIT_19(INIT['h19*320+:320]), + .INIT_1A(INIT['h1a*320+:320]), + .INIT_1B(INIT['h1b*320+:320]), + .INIT_1C(INIT['h1c*320+:320]), + .INIT_1D(INIT['h1d*320+:320]), + .INIT_1E(INIT['h1e*320+:320]), + .INIT_1F(INIT['h1f*320+:320]), + .INIT_20(INIT['h20*320+:320]), + .INIT_21(INIT['h21*320+:320]), + .INIT_22(INIT['h22*320+:320]), + .INIT_23(INIT['h23*320+:320]), + .INIT_24(INIT['h24*320+:320]), + .INIT_25(INIT['h25*320+:320]), + .INIT_26(INIT['h26*320+:320]), + .INIT_27(INIT['h27*320+:320]), + .INIT_28(INIT['h28*320+:320]), + .INIT_29(INIT['h29*320+:320]), + .INIT_2A(INIT['h2a*320+:320]), + .INIT_2B(INIT['h2b*320+:320]), + .INIT_2C(INIT['h2c*320+:320]), + .INIT_2D(INIT['h2d*320+:320]), + .INIT_2E(INIT['h2e*320+:320]), + .INIT_2F(INIT['h2f*320+:320]), + .INIT_30(INIT['h30*320+:320]), + .INIT_31(INIT['h31*320+:320]), + .INIT_32(INIT['h32*320+:320]), + .INIT_33(INIT['h33*320+:320]), + .INIT_34(INIT['h34*320+:320]), + .INIT_35(INIT['h35*320+:320]), + .INIT_36(INIT['h36*320+:320]), + .INIT_37(INIT['h37*320+:320]), + .INIT_38(INIT['h38*320+:320]), + .INIT_39(INIT['h39*320+:320]), + .INIT_3A(INIT['h3a*320+:320]), + .INIT_3B(INIT['h3b*320+:320]), + .INIT_3C(INIT['h3c*320+:320]), + .INIT_3D(INIT['h3d*320+:320]), + .INIT_3E(INIT['h3e*320+:320]), + .INIT_3F(INIT['h3f*320+:320]), + .INIT_40(INIT['h40*320+:320]), + .INIT_41(INIT['h41*320+:320]), + .INIT_42(INIT['h42*320+:320]), + .INIT_43(INIT['h43*320+:320]), + .INIT_44(INIT['h44*320+:320]), + .INIT_45(INIT['h45*320+:320]), + .INIT_46(INIT['h46*320+:320]), + .INIT_47(INIT['h47*320+:320]), + .INIT_48(INIT['h48*320+:320]), + .INIT_49(INIT['h49*320+:320]), + .INIT_4A(INIT['h4a*320+:320]), + .INIT_4B(INIT['h4b*320+:320]), + .INIT_4C(INIT['h4c*320+:320]), + .INIT_4D(INIT['h4d*320+:320]), + .INIT_4E(INIT['h4e*320+:320]), + .INIT_4F(INIT['h4f*320+:320]), + .INIT_50(INIT['h50*320+:320]), + .INIT_51(INIT['h51*320+:320]), + .INIT_52(INIT['h52*320+:320]), + .INIT_53(INIT['h53*320+:320]), + .INIT_54(INIT['h54*320+:320]), + .INIT_55(INIT['h55*320+:320]), + .INIT_56(INIT['h56*320+:320]), + .INIT_57(INIT['h57*320+:320]), + .INIT_58(INIT['h58*320+:320]), + .INIT_59(INIT['h59*320+:320]), + .INIT_5A(INIT['h5a*320+:320]), + .INIT_5B(INIT['h5b*320+:320]), + .INIT_5C(INIT['h5c*320+:320]), + .INIT_5D(INIT['h5d*320+:320]), + .INIT_5E(INIT['h5e*320+:320]), + .INIT_5F(INIT['h5f*320+:320]), + .INIT_60(INIT['h60*320+:320]), + .INIT_61(INIT['h61*320+:320]), + .INIT_62(INIT['h62*320+:320]), + .INIT_63(INIT['h63*320+:320]), + .INIT_64(INIT['h64*320+:320]), + .INIT_65(INIT['h65*320+:320]), + .INIT_66(INIT['h66*320+:320]), + .INIT_67(INIT['h67*320+:320]), + .INIT_68(INIT['h68*320+:320]), + .INIT_69(INIT['h69*320+:320]), + .INIT_6A(INIT['h6a*320+:320]), + .INIT_6B(INIT['h6b*320+:320]), + .INIT_6C(INIT['h6c*320+:320]), + .INIT_6D(INIT['h6d*320+:320]), + .INIT_6E(INIT['h6e*320+:320]), + .INIT_6F(INIT['h6f*320+:320]), + .INIT_70(INIT['h70*320+:320]), + .INIT_71(INIT['h71*320+:320]), + .INIT_72(INIT['h72*320+:320]), + .INIT_73(INIT['h73*320+:320]), + .INIT_74(INIT['h74*320+:320]), + .INIT_75(INIT['h75*320+:320]), + .INIT_76(INIT['h76*320+:320]), + .INIT_77(INIT['h77*320+:320]), + .INIT_78(INIT['h78*320+:320]), + .INIT_79(INIT['h79*320+:320]), + .INIT_7A(INIT['h7a*320+:320]), + .INIT_7B(INIT['h7b*320+:320]), + .INIT_7C(INIT['h7c*320+:320]), + .INIT_7D(INIT['h7d*320+:320]), + .INIT_7E(INIT['h7e*320+:320]), + .INIT_7F(INIT['h7f*320+:320]), + .A_RD_WIDTH(0), + .A_WR_WIDTH(PORT_W_USED ? PORT_W_WIDTH : 0), + .B_RD_WIDTH(PORT_R_USED ? PORT_R_WIDTH : 0), + .B_WR_WIDTH(0), + .RAM_MODE("SDP"), + .A_WR_MODE(OPTION_WR_MODE), + .B_WR_MODE(OPTION_WR_MODE), + .A_CLK_INV(!PORT_W_CLK_POL), + .B_CLK_INV(!PORT_R_CLK_POL), + ) _TECHMAP_REPLACE_ ( + .A_CLK(PORT_W_CLK), + .A_EN(PORT_W_CLK_EN), + .A_WE(PORT_W_WR_EN), + .A_BM(PORT_W_WR_BE[39:0]), + .B_BM(PORT_W_WR_BE[79:40]), + .A_DI(PORT_W_WR_DATA[39:0]), + .B_DI(PORT_W_WR_DATA[79:40]), + .A_ADDR({PORT_W_ADDR[14:0], 1'b0}), + .B_CLK(PORT_R_CLK), + .B_EN(PORT_R_CLK_EN), + .B_WE(1'b0), + .B_ADDR({PORT_R_ADDR[14:0], 1'b0}), + .A_DO(PORT_R_RD_DATA[39:0]), + .B_DO(PORT_R_RD_DATA[79:40]), + ); + end +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/cells_bb.v b/resources/netlist/resources/kernel/share/gatemate/cells_bb.v new file mode 100644 index 0000000..2bb8154 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/cells_bb.v @@ -0,0 +1,191 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* blackbox *) +module CC_PLL #( + parameter REF_CLK = "", // e.g. "10.0" + parameter OUT_CLK = "", // e.g. "50.0" + parameter PERF_MD = "", // LOWPOWER, ECONOMY, SPEED + parameter LOW_JITTER = 1, + parameter CI_FILTER_CONST = 2, + parameter CP_FILTER_CONST = 4 +)( + input CLK_REF, CLK_FEEDBACK, USR_CLK_REF, + input USR_LOCKED_STDY_RST, + output USR_PLL_LOCKED_STDY, USR_PLL_LOCKED, + output CLK270, CLK180, CLK90, CLK0, CLK_REF_OUT +); +endmodule + +(* blackbox *) +module CC_PLL_ADV #( + parameter [95:0] PLL_CFG_A = 96'bx, + parameter [95:0] PLL_CFG_B = 96'bx +)( + input CLK_REF, CLK_FEEDBACK, USR_CLK_REF, + input USR_LOCKED_STDY_RST, USR_SEL_A_B, + output USR_PLL_LOCKED_STDY, USR_PLL_LOCKED, + output CLK270, CLK180, CLK90, CLK0, CLK_REF_OUT +); +endmodule + +(* blackbox *) (* keep *) +module CC_SERDES #( + parameter SERDES_CFG = "" +)( + input [63:0] TX_DATA_I, + input TX_RESET_I, + input TX_PCS_RESET_I, + input TX_PMA_RESET_I, + input PLL_RESET_I, + input TX_POWERDOWN_N_I, + input TX_POLARITY_I, + input [2:0] TX_PRBS_SEL_I, + input TX_PRBS_FORCE_ERR_I, + input TX_8B10B_EN_I, + input [7:0] TX_8B10B_BYPASS_I, + input [7:0] TX_CHAR_IS_K_I, + input [7:0] TX_CHAR_DISPMODE_I, + input [7:0] TX_CHAR_DISPVAL_I, + input TX_ELEC_IDLE_I, + input TX_DETECT_RX_I, + input [2:0] LOOPBACK_I, + input CLK_CORE_TX_I, + input CLK_CORE_RX_I, + input RX_RESET_I, + input RX_PMA_RESET_I, + input RX_EQA_RESET_I, + input RX_CDR_RESET_I, + input RX_PCS_RESET_I, + input RX_BUF_RESET_I, + input RX_POWERDOWN_N_I, + input RX_POLARITY_I, + input [2:0] RX_PRBS_SEL_I, + input RX_PRBS_CNT_RESET_I, + input RX_8B10B_EN_I, + input [7:0] RX_8B10B_BYPASS_I, + input RX_EN_EI_DETECTOR_I, + input RX_COMMA_DETECT_EN_I, + input RX_SLIDE_I, + input RX_MCOMMA_ALIGN_I, + input RX_PCOMMA_ALIGN_I, + input CLK_REG_I, + input REGFILE_WE_I, + input REGFILE_EN_I, + input [7:0] REGFILE_ADDR_I, + input [15:0] REGFILE_DI_I, + input [15:0] REGFILE_MASK_I, + output [63:0] RX_DATA_O, + output [7:0] RX_NOT_IN_TABLE_O, + output [7:0] RX_CHAR_IS_COMMA_O, + output [7:0] RX_CHAR_IS_K_O, + output [7:0] RX_DISP_ERR_O, + output RX_DETECT_DONE_O, + output RX_PRESENT_O, + output TX_BUF_ERR_O, + output TX_RESETDONE_O, + output RX_PRBS_ERR_O, + output RX_BUF_ERR_O, + output RX_BYTE_IS_ALIGNED_O, + output RX_BYTE_REALIGN_O, + output RX_RESETDONE_O, + output RX_EI_EN_O, + output CLK_CORE_RX_O, + output CLK_CORE_PLL_O, + output [15:0] REGFILE_DO_O, + output REGFILE_RDY_O +); +endmodule + +(* blackbox *) (* keep *) +module CC_CFG_CTRL( + input [7:0] DATA, + input CLK, + input EN, + input RECFG, + input VALID +); +endmodule + +(* blackbox *) +module CC_FIFO_40K ( + output A_ECC_1B_ERR, + output B_ECC_1B_ERR, + output A_ECC_2B_ERR, + output B_ECC_2B_ERR, + // FIFO pop port + output [39:0] A_DO, + output [39:0] B_DO, + (* clkbuf_sink *) + input A_CLK, + input A_EN, + // FIFO push port + input [39:0] A_DI, + input [39:0] B_DI, + input [39:0] A_BM, + input [39:0] B_BM, + (* clkbuf_sink *) + input B_CLK, + input B_EN, + input B_WE, + // FIFO control + input F_RST_N, + input [12:0] F_ALMOST_FULL_OFFSET, + input [12:0] F_ALMOST_EMPTY_OFFSET, + // FIFO status signals + output F_FULL, + output F_EMPTY, + output F_ALMOST_FULL, + output F_ALMOST_EMPTY, + output F_RD_ERROR, + output F_WR_ERROR, + output [15:0] F_RD_PTR, + output [15:0] F_WR_PTR +); + // Location format: D(0..N-1)X(0..3)Y(0..7) or UNPLACED + parameter LOC = "UNPLACED"; + + // Offset configuration + parameter [12:0] ALMOST_FULL_OFFSET = 12'b0; + parameter [12:0] ALMOST_EMPTY_OFFSET = 12'b0; + + // Port Widths + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + + // RAM and Write Modes + parameter RAM_MODE = "SDP"; // "TPD" or "SDP" + parameter FIFO_MODE = "SYNC"; // "ASYNC" or "SYNC" + + // Inverting Control Pins + parameter A_CLK_INV = 1'b0; + parameter B_CLK_INV = 1'b0; + parameter A_EN_INV = 1'b0; + parameter B_EN_INV = 1'b0; + parameter A_WE_INV = 1'b0; + parameter B_WE_INV = 1'b0; + + // Output Register + parameter A_DO_REG = 1'b0; + parameter B_DO_REG = 1'b0; + + // Error Checking and Correction + parameter A_ECC_EN = 1'b0; + parameter B_ECC_EN = 1'b0; +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/cells_sim.v b/resources/netlist/resources/kernel/share/gatemate/cells_sim.v new file mode 100644 index 0000000..3f00989 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/cells_sim.v @@ -0,0 +1,1455 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +`timescale 1ps/1ps + +module CC_IBUF #( + parameter PIN_NAME = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter [0:0] PULLUP = 1'bx, + parameter [0:0] PULLDOWN = 1'bx, + parameter [0:0] KEEPER = 1'bx, + parameter [0:0] SCHMITT_TRIGGER = 1'bx, + // IOSEL + parameter [3:0] DELAY_IBF = 1'bx, + parameter [0:0] FF_IBF = 1'bx +)( + (* iopad_external_pin *) + input I, + output Y +); + assign Y = I; + +endmodule + + +module CC_OBUF #( + parameter PIN_NAME = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter DRIVE = "UNDEFINED", + parameter SLEW = "UNDEFINED", + // IOSEL + parameter [3:0] DELAY_OBF = 1'bx, + parameter [0:0] FF_OBF = 1'bx +)( + input A, + (* iopad_external_pin *) + output O +); + assign O = A; + +endmodule + + +module CC_TOBUF #( + parameter PIN_NAME = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter DRIVE = "UNDEFINED", + parameter SLEW = "UNDEFINED", + parameter [0:0] PULLUP = 1'bx, + parameter [0:0] PULLDOWN = 1'bx, + parameter [0:0] KEEPER = 1'bx, + // IOSEL + parameter [3:0] DELAY_OBF = 1'bx, + parameter [0:0] FF_OBF = 1'bx +)( + input A, T, + (* iopad_external_pin *) + output O +); + assign O = T ? 1'bz : A; + +endmodule + + +module CC_IOBUF #( + parameter PIN_NAME = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter DRIVE = "UNDEFINED", + parameter SLEW = "UNDEFINED", + parameter [0:0] PULLUP = 1'bx, + parameter [0:0] PULLDOWN = 1'bx, + parameter [0:0] KEEPER = 1'bx, + parameter [0:0] SCHMITT_TRIGGER = 1'bx, + // IOSEL + parameter [3:0] DELAY_IBF = 1'bx, + parameter [3:0] DELAY_OBF = 1'bx, + parameter [0:0] FF_IBF = 1'bx, + parameter [0:0] FF_OBF = 1'bx +)( + input A, T, + output Y, + (* iopad_external_pin *) + inout IO +); + assign IO = T ? 1'bz : A; + assign Y = IO; + +endmodule + + +module CC_LVDS_IBUF #( + parameter PIN_NAME_P = "UNPLACED", + parameter PIN_NAME_N = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter [0:0] LVDS_RTERM = 1'bx, + // IOSEL + parameter [3:0] DELAY_IBF = 1'bx, + parameter [0:0] FF_IBF = 1'bx +)( + (* iopad_external_pin *) + input IP, IN, + output Y +); + assign Y = IP; + +endmodule + + +module CC_LVDS_OBUF #( + parameter PIN_NAME_P = "UNPLACED", + parameter PIN_NAME_N = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter [0:0] LVDS_BOOST = 1'bx, + // IOSEL + parameter [3:0] DELAY_OBF = 1'bx, + parameter [0:0] FF_OBF = 1'bx +)( + input A, + (* iopad_external_pin *) + output OP, ON +); + assign OP = A; + assign ON = ~A; + +endmodule + + +module CC_LVDS_TOBUF #( + parameter PIN_NAME_P = "UNPLACED", + parameter PIN_NAME_N = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter [0:0] LVDS_BOOST = 1'bx, + // IOSEL + parameter [3:0] DELAY_OBF = 1'bx, + parameter [0:0] FF_OBF = 1'bx +)( + input A, T, + (* iopad_external_pin *) + output OP, ON +); + assign OP = T ? 1'bz : A; + assign ON = T ? 1'bz : ~A; + +endmodule + + +module CC_LVDS_IOBUF #( + parameter PIN_NAME_P = "UNPLACED", + parameter PIN_NAME_N = "UNPLACED", + parameter V_IO = "UNDEFINED", + parameter [0:0] LVDS_RTERM = 1'bx, + parameter [0:0] LVDS_BOOST = 1'bx, + // IOSEL + parameter [3:0] DELAY_IBF = 1'bx, + parameter [3:0] DELAY_OBF = 1'bx, + parameter [0:0] FF_IBF = 1'bx, + parameter [0:0] FF_OBF = 1'bx +)( + input A, T, + (* iopad_external_pin *) + inout IOP, ION, + output Y +); + assign IOP = T ? 1'bz : A; + assign ION = T ? 1'bz : ~A; + assign Y = IOP; + +endmodule + + +module CC_IDDR #( + parameter [0:0] CLK_INV = 1'b0 +)( + input D, + (* clkbuf_sink *) + input CLK, + output reg Q0, Q1 +); + wire clk; + assign clk = (CLK_INV) ? ~CLK : CLK; + + always @(posedge clk) + begin + Q0 <= D; + end + + always @(negedge clk) + begin + Q1 <= D; + end + +endmodule + + +module CC_ODDR #( + parameter [0:0] CLK_INV = 1'b0 +)( + input D0, + input D1, + (* clkbuf_sink *) + input CLK, + (* clkbuf_sink *) + input DDR, + output Q +); + wire clk; + assign clk = (CLK_INV) ? ~CLK : CLK; + + reg q0, q1; + assign Q = (DDR) ? q0 : q1; + + always @(posedge clk) + begin + q0 <= D0; + end + + always @(negedge clk) + begin + q1 <= D1; + end + +endmodule + + +module CC_DFF #( + parameter [0:0] CLK_INV = 1'b0, + parameter [0:0] EN_INV = 1'b0, + parameter [0:0] SR_INV = 1'b0, + parameter [0:0] SR_VAL = 1'b0 +)( + input D, + (* clkbuf_sink *) + input CLK, + input EN, + input SR, + output reg Q +); + wire clk, en, sr; + assign clk = (CLK_INV) ? ~CLK : CLK; + assign en = (EN_INV) ? ~EN : EN; + assign sr = (SR_INV) ? ~SR : SR; + + initial Q = 1'bX; + + always @(posedge clk or posedge sr) + begin + if (sr) begin + Q <= SR_VAL; + end + else if (en) begin + Q <= D; + end + end + +endmodule + + +module CC_DLT #( + parameter [0:0] G_INV = 1'b0, + parameter [0:0] SR_INV = 1'b0, + parameter [0:0] SR_VAL = 1'b0 +)( + input D, + input G, + input SR, + output reg Q +); + wire en, sr; + assign en = (G_INV) ? ~G : G; + assign sr = (SR_INV) ? ~SR : SR; + + initial Q = 1'bX; + + always @(*) + begin + if (sr) begin + Q <= SR_VAL; + end + else if (en) begin + Q <= D; + end + end + +endmodule + + +module CC_LUT1 ( + output O, + input I0 +); + parameter [1:0] INIT = 0; + + assign O = I0 ? INIT[1] : INIT[0]; + +endmodule + + +module CC_LUT2 ( + output O, + input I0, I1 +); + parameter [3:0] INIT = 0; + + wire [1:0] s1 = I1 ? INIT[3:2] : INIT[1:0]; + assign O = I0 ? s1[1] : s1[0]; + +endmodule + + +module CC_LUT3 ( + output O, + input I0, I1, I2 +); + parameter [7:0] INIT = 0; + + wire [3:0] s2 = I2 ? INIT[7:4] : INIT[3:0]; + wire [1:0] s1 = I1 ? s2[3:2] : s2[1:0]; + assign O = I0 ? s1[1] : s1[0]; + +endmodule + + +module CC_LUT4 ( + output O, + input I0, I1, I2, I3 +); + parameter [15:0] INIT = 0; + + wire [7:0] s3 = I3 ? INIT[15:8] : INIT[7:0]; + wire [3:0] s2 = I2 ? s3[7:4] : s3[3:0]; + wire [1:0] s1 = I1 ? s2[3:2] : s2[1:0]; + assign O = I0 ? s1[1] : s1[0]; + +endmodule + + +module CC_MX2 ( + input D0, D1, + input S0, + output Y +); + assign Y = S0 ? D1 : D0; + +endmodule + + +module CC_MX4 ( + input D0, D1, D2, D3, + input S0, S1, + output Y +); + assign Y = S1 ? (S0 ? D3 : D2) : + (S0 ? D1 : D0); + +endmodule + + +module CC_MX8 ( + input D0, D1, D2, D3, + input D4, D5, D6, D7, + input S0, S1, S2, + output Y +); + assign Y = S2 ? (S1 ? (S0 ? D7 : D6) : + (S0 ? D5 : D4)) : + (S1 ? (S0 ? D3 : D2) : + (S0 ? D1 : D0)); + +endmodule + + +module CC_ADDF ( + input A, B, CI, + output CO, S +); + assign {CO, S} = A + B + CI; + +endmodule + + +module CC_MULT #( + parameter A_WIDTH = 0, + parameter B_WIDTH = 0, + parameter P_WIDTH = 0 +)( + input signed [A_WIDTH-1:0] A, + input signed [B_WIDTH-1:0] B, + output reg signed [P_WIDTH-1:0] P +); + always @(*) + begin + P <= A * B; + end +endmodule + + +module CC_BUFG ( + input I, + (* clkbuf_driver *) + output O +); + assign O = I; + +endmodule + + +module CC_BRAM_20K ( + output [19:0] A_DO, + output [19:0] B_DO, + output ECC_1B_ERR, + output ECC_2B_ERR, + (* clkbuf_sink *) + input A_CLK, + (* clkbuf_sink *) + input B_CLK, + input A_EN, + input B_EN, + input A_WE, + input B_WE, + input [15:0] A_ADDR, + input [15:0] B_ADDR, + input [19:0] A_DI, + input [19:0] B_DI, + input [19:0] A_BM, + input [19:0] B_BM +); + // Location format: D(0..N-1)(0..N-1)X(0..3)Y(0..7)Z(0..1) or UNPLACED + parameter LOC = "UNPLACED"; + + // Port Widths + parameter A_RD_WIDTH = 0; + parameter B_RD_WIDTH = 0; + parameter A_WR_WIDTH = 0; + parameter B_WR_WIDTH = 0; + + // RAM and Write Modes + parameter RAM_MODE = "SDP"; + parameter A_WR_MODE = "NO_CHANGE"; + parameter B_WR_MODE = "NO_CHANGE"; + + // Inverting Control Pins + parameter A_CLK_INV = 1'b0; + parameter B_CLK_INV = 1'b0; + parameter A_EN_INV = 1'b0; + parameter B_EN_INV = 1'b0; + parameter A_WE_INV = 1'b0; + parameter B_WE_INV = 1'b0; + + // Output Register + parameter A_DO_REG = 1'b0; + parameter B_DO_REG = 1'b0; + + // Error Checking and Correction + parameter ECC_EN = 1'b0; + + // RAM Contents + parameter INIT_00 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_14 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_15 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_16 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_17 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_18 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_19 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_20 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_21 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_22 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_23 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_24 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_25 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_26 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_27 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_28 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_29 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_30 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_31 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_32 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_33 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_34 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_35 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_36 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_37 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_38 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_39 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + + localparam WIDTH_MODE_A = (A_RD_WIDTH > A_WR_WIDTH) ? A_RD_WIDTH : A_WR_WIDTH; + localparam WIDTH_MODE_B = (B_RD_WIDTH > B_WR_WIDTH) ? B_RD_WIDTH : B_WR_WIDTH; + + integer i, k; + + // 512 x 40 bit + reg [20479:0] memory = 20480'b0; + + initial begin + // Check parameters + if ((RAM_MODE != "SDP") && (RAM_MODE != "TDP")) begin + $display("ERROR: Illegal RAM MODE %d.", RAM_MODE); + $finish(); + end + if ((A_WR_MODE != "WRITE_THROUGH") && (A_WR_MODE != "NO_CHANGE")) begin + $display("ERROR: Illegal RAM MODE %d.", RAM_MODE); + $finish(); + end + if ((RAM_MODE == "SDP") && (A_WR_MODE == "WRITE_THROUGH")) begin + $display("ERROR: %s is not supported in %s mode.", A_WR_MODE, RAM_MODE); + $finish(); + end + if (ECC_EN != 1'b0) begin + $display("WARNING: ECC feature not supported in simulation."); + end + if ((ECC_EN == 1'b1) && (RAM_MODE != "SDP") && (WIDTH_MODE_A != 40)) begin + $display("ERROR: Illegal ECC Port configuration. Must be SDP 40 bit, but is %s %d.", RAM_MODE, WIDTH_MODE_A); + $finish(); + end + if ((WIDTH_MODE_A == 40) && (RAM_MODE == "TDP")) begin + $display("ERROR: Port A width of 40 bits is only supported in SDP mode."); + $finish(); + end + if ((WIDTH_MODE_B == 40) && (RAM_MODE == "TDP")) begin + $display("ERROR: Port B width of 40 bits is only supported in SDP mode."); + $finish(); + end + if ((WIDTH_MODE_A != 40) && (WIDTH_MODE_A != 20) && (WIDTH_MODE_A != 10) && + (WIDTH_MODE_A != 5) && (WIDTH_MODE_A != 2) && (WIDTH_MODE_A != 1) && (WIDTH_MODE_A != 0)) begin + $display("ERROR: Illegal %s Port A width configuration %d.", RAM_MODE, WIDTH_MODE_A); + $finish(); + end + if ((WIDTH_MODE_B != 40) && (WIDTH_MODE_B != 20) && (WIDTH_MODE_B != 10) && + (WIDTH_MODE_B != 5) && (WIDTH_MODE_B != 2) && (WIDTH_MODE_B != 1) && (WIDTH_MODE_B != 0)) begin + $display("ERROR: Illegal %s Port B width configuration %d.", RAM_MODE, WIDTH_MODE_B); + $finish(); + end + // RAM initialization + memory[320*0+319:320*0] = INIT_00; + memory[320*1+319:320*1] = INIT_01; + memory[320*2+319:320*2] = INIT_02; + memory[320*3+319:320*3] = INIT_03; + memory[320*4+319:320*4] = INIT_04; + memory[320*5+319:320*5] = INIT_05; + memory[320*6+319:320*6] = INIT_06; + memory[320*7+319:320*7] = INIT_07; + memory[320*8+319:320*8] = INIT_08; + memory[320*9+319:320*9] = INIT_09; + memory[320*10+319:320*10] = INIT_0A; + memory[320*11+319:320*11] = INIT_0B; + memory[320*12+319:320*12] = INIT_0C; + memory[320*13+319:320*13] = INIT_0D; + memory[320*14+319:320*14] = INIT_0E; + memory[320*15+319:320*15] = INIT_0F; + memory[320*16+319:320*16] = INIT_10; + memory[320*17+319:320*17] = INIT_11; + memory[320*18+319:320*18] = INIT_12; + memory[320*19+319:320*19] = INIT_13; + memory[320*20+319:320*20] = INIT_14; + memory[320*21+319:320*21] = INIT_15; + memory[320*22+319:320*22] = INIT_16; + memory[320*23+319:320*23] = INIT_17; + memory[320*24+319:320*24] = INIT_18; + memory[320*25+319:320*25] = INIT_19; + memory[320*26+319:320*26] = INIT_1A; + memory[320*27+319:320*27] = INIT_1B; + memory[320*28+319:320*28] = INIT_1C; + memory[320*29+319:320*29] = INIT_1D; + memory[320*30+319:320*30] = INIT_1E; + memory[320*31+319:320*31] = INIT_1F; + memory[320*32+319:320*32] = INIT_20; + memory[320*33+319:320*33] = INIT_21; + memory[320*34+319:320*34] = INIT_22; + memory[320*35+319:320*35] = INIT_23; + memory[320*36+319:320*36] = INIT_24; + memory[320*37+319:320*37] = INIT_25; + memory[320*38+319:320*38] = INIT_26; + memory[320*39+319:320*39] = INIT_27; + memory[320*40+319:320*40] = INIT_28; + memory[320*41+319:320*41] = INIT_29; + memory[320*42+319:320*42] = INIT_2A; + memory[320*43+319:320*43] = INIT_2B; + memory[320*44+319:320*44] = INIT_2C; + memory[320*45+319:320*45] = INIT_2D; + memory[320*46+319:320*46] = INIT_2E; + memory[320*47+319:320*47] = INIT_2F; + memory[320*48+319:320*48] = INIT_30; + memory[320*49+319:320*49] = INIT_31; + memory[320*50+319:320*50] = INIT_32; + memory[320*51+319:320*51] = INIT_33; + memory[320*52+319:320*52] = INIT_34; + memory[320*53+319:320*53] = INIT_35; + memory[320*54+319:320*54] = INIT_36; + memory[320*55+319:320*55] = INIT_37; + memory[320*56+319:320*56] = INIT_38; + memory[320*57+319:320*57] = INIT_39; + memory[320*58+319:320*58] = INIT_3A; + memory[320*59+319:320*59] = INIT_3B; + memory[320*60+319:320*60] = INIT_3C; + memory[320*61+319:320*61] = INIT_3D; + memory[320*62+319:320*62] = INIT_3E; + memory[320*63+319:320*63] = INIT_3F; + end + + // Signal inversion + wire clka = A_CLK_INV ^ A_CLK; + wire clkb = B_CLK_INV ^ B_CLK; + wire ena = A_EN_INV ^ A_EN; + wire enb = B_EN_INV ^ B_EN; + wire wea = A_WE_INV ^ A_WE; + wire web = B_WE_INV ^ B_WE; + + // Internal signals + wire [15:0] addra; + wire [15:0] addrb; + reg [19:0] A_DO_out = 0, A_DO_reg = 0; + reg [19:0] B_DO_out = 0, B_DO_reg = 0; + + generate + if (RAM_MODE == "SDP") begin + // Port A (write) + if (A_WR_WIDTH == 40) begin + assign addra = A_ADDR[15:7]*40; + end + // Port B (read) + if (B_RD_WIDTH == 40) begin + assign addrb = B_ADDR[15:7]*40; + end + end + else if (RAM_MODE == "TDP") begin + // Port A + if (WIDTH_MODE_A <= 1) begin + wire [15:0] tmpa = {2'b0, A_ADDR[15:7], A_ADDR[5:1]}; + assign addra = tmpa + (tmpa/4); + end + else if (WIDTH_MODE_A <= 2) begin + wire [15:0] tmpa = {3'b0, A_ADDR[15:7], A_ADDR[5:2]}; + assign addra = tmpa*2 + (tmpa/2); + end + else if (WIDTH_MODE_A <= 5) begin + assign addra = {4'b0, A_ADDR[15:7], A_ADDR[5:3]}*5; + end + else if (WIDTH_MODE_A <= 10) begin + assign addra = {5'b0, A_ADDR[15:7], A_ADDR[5:4]}*10; + end + else if (WIDTH_MODE_A <= 20) begin + assign addra = {6'b0, A_ADDR[15:7], A_ADDR[5]}*20; + end + // Port B + if (WIDTH_MODE_B <= 1) begin + wire [15:0] tmpb = {2'b0, B_ADDR[15:7], B_ADDR[5:1]}; + assign addrb = tmpb + (tmpb/4); + end + else if (WIDTH_MODE_B <= 2) begin + wire [15:0] tmpb = {3'b0, B_ADDR[15:7], B_ADDR[5:2]}; + assign addrb = tmpb*2 + (tmpb/2); + end + else if (WIDTH_MODE_B <= 5) begin + assign addrb = {4'b0, B_ADDR[15:7], B_ADDR[5:3]}*5; + end + else if (WIDTH_MODE_B <= 10) begin + assign addrb = {5'b0, B_ADDR[15:7], B_ADDR[5:4]}*10; + end + else if (WIDTH_MODE_B <= 20) begin + assign addrb = {6'b0, B_ADDR[15:7], B_ADDR[5]}*20; + end + end + endgenerate + + generate + if (RAM_MODE == "SDP") begin + // SDP write port + always @(posedge clka) + begin + for (k=0; k < A_WR_WIDTH; k=k+1) begin + if (k < 20) begin + if (ena && wea && A_BM[k]) memory[addra+k] <= A_DI[k]; + end + else begin // use both ports + if (ena && wea && B_BM[k-20]) memory[addra+k] <= B_DI[k-20]; + end + end + end + // SDP read port + always @(posedge clkb) + begin + // "NO_CHANGE" only + for (k=0; k < B_RD_WIDTH; k=k+1) begin + if (k < 20) begin + if (enb && !wea) A_DO_out[k] <= memory[addrb+k]; + end + else begin // use both ports + if (enb && !wea) B_DO_out[k-20] <= memory[addrb+k]; + end + end + end + end + else if (RAM_MODE == "TDP") begin + // TDP port A + always @(posedge clka) + begin + for (i=0; i < WIDTH_MODE_A; i=i+1) begin + if (ena && wea && A_BM[i]) memory[addra+i] <= A_DI[i]; + + if (A_WR_MODE == "NO_CHANGE") begin + if (ena && !wea) A_DO_out[i] <= memory[addra+i]; + end + else if (A_WR_MODE == "WRITE_THROUGH") begin + if (ena) begin + if (wea && A_BM[i]) begin + A_DO_out[i] <= A_DI[i]; + end + else begin + A_DO_out[i] <= memory[addra+i]; + end + end + end + end + end + // TDP port B + always @(posedge clkb) + begin + for (i=0; i < WIDTH_MODE_B; i=i+1) begin + if (enb && web && B_BM[i]) memory[addrb+i] <= B_DI[i]; + + if (B_WR_MODE == "NO_CHANGE") begin + if (enb && !web) B_DO_out[i] <= memory[addrb+i]; + end + else if (B_WR_MODE == "WRITE_THROUGH") begin + if (enb) begin + if (web && B_BM[i]) begin + B_DO_out[i] <= B_DI[i]; + end + else begin + B_DO_out[i] <= memory[addrb+i]; + end + end + end + end + end + end + endgenerate + + // Optional output register + generate + if (A_DO_REG) begin + always @(posedge clka) begin + A_DO_reg <= A_DO_out; + end + assign A_DO = A_DO_reg; + end + else begin + assign A_DO = A_DO_out; + end + if (B_DO_REG) begin + always @(posedge clkb) begin + B_DO_reg <= B_DO_out; + end + assign B_DO = B_DO_reg; + end + else begin + assign B_DO = B_DO_out; + end + endgenerate +endmodule + + +module CC_BRAM_40K ( + output [39:0] A_DO, + output [39:0] B_DO, + output A_ECC_1B_ERR, + output B_ECC_1B_ERR, + output A_ECC_2B_ERR, + output B_ECC_2B_ERR, + output reg A_CO = 0, + output reg B_CO = 0, + (* clkbuf_sink *) + input A_CLK, + (* clkbuf_sink *) + input B_CLK, + input A_EN, + input B_EN, + input A_WE, + input B_WE, + input [15:0] A_ADDR, + input [15:0] B_ADDR, + input [39:0] A_DI, + input [39:0] B_DI, + input [39:0] A_BM, + input [39:0] B_BM, + input A_CI, + input B_CI +); + // Location format: D(0..N-1)X(0..3)Y(0..7) or UNPLACED + parameter LOC = "UNPLACED"; + parameter CAS = "NONE"; // NONE, UPPER, LOWER + + // Port Widths + parameter A_RD_WIDTH = 0; + parameter B_RD_WIDTH = 0; + parameter A_WR_WIDTH = 0; + parameter B_WR_WIDTH = 0; + + // RAM and Write Modes + parameter RAM_MODE = "SDP"; + parameter A_WR_MODE = "NO_CHANGE"; + parameter B_WR_MODE = "NO_CHANGE"; + + // Inverting Control Pins + parameter A_CLK_INV = 1'b0; + parameter B_CLK_INV = 1'b0; + parameter A_EN_INV = 1'b0; + parameter B_EN_INV = 1'b0; + parameter A_WE_INV = 1'b0; + parameter B_WE_INV = 1'b0; + + // Output Register + parameter A_DO_REG = 1'b0; + parameter B_DO_REG = 1'b0; + + // Error Checking and Correction + parameter A_ECC_EN = 1'b0; + parameter B_ECC_EN = 1'b0; + + parameter INIT_00 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_14 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_15 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_16 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_17 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_18 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_19 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_20 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_21 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_22 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_23 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_24 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_25 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_26 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_27 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_28 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_29 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_30 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_31 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_32 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_33 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_34 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_35 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_36 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_37 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_38 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_39 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_40 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_41 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_42 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_43 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_44 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_45 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_46 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_47 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_48 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_49 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_50 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_51 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_52 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_53 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_54 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_55 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_56 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_57 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_58 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_59 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_60 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_61 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_62 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_63 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_64 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_65 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_66 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_67 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_68 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_69 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_70 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_71 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_72 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_73 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_74 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_75 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_76 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_77 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_78 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_79 = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7A = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7B = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7C = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7D = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7E = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7F = 320'h00000000000000000000000000000000000000000000000000000000000000000000000000000000; + + localparam WIDTH_MODE_A = (A_RD_WIDTH > A_WR_WIDTH) ? A_RD_WIDTH : A_WR_WIDTH; + localparam WIDTH_MODE_B = (B_RD_WIDTH > B_WR_WIDTH) ? B_RD_WIDTH : B_WR_WIDTH; + + integer i, k; + + // 512 x 80 bit + reg [40959:0] memory = 40960'b0; + + initial begin + // Check parameters + if ((RAM_MODE != "SDP") && (RAM_MODE != "TDP")) begin + $display("ERROR: Illegal RAM MODE %d.", RAM_MODE); + $finish(); + end + if ((A_WR_MODE != "WRITE_THROUGH") && (A_WR_MODE != "NO_CHANGE")) begin + $display("ERROR: Illegal RAM MODE %d.", RAM_MODE); + $finish(); + end + if ((RAM_MODE == "SDP") && (A_WR_MODE == "WRITE_THROUGH")) begin + $display("ERROR: %s is not supported in %s mode.", A_WR_MODE, RAM_MODE); + $finish(); + end + if ((A_ECC_EN != 1'b0) || (B_ECC_EN != 1'b0)) begin + $display("WARNING: ECC feature not supported in simulation."); + end + if ((A_ECC_EN == 1'b1) && (RAM_MODE != "SDP") && (WIDTH_MODE_A != 40)) begin + $display("ERROR: Illegal ECC Port A configuration. Must be SDP 40 bit, but is %s %d.", RAM_MODE, WIDTH_MODE_A); + $finish(); + end + if ((WIDTH_MODE_A == 80) && (RAM_MODE == "TDP")) begin + $display("ERROR: Port A width of 80 bits is only supported in SDP mode."); + $finish(); + end + if ((WIDTH_MODE_B == 80) && (RAM_MODE == "TDP")) begin + $display("ERROR: Port B width of 80 bits is only supported in SDP mode."); + $finish(); + end + if ((WIDTH_MODE_A != 80) && (WIDTH_MODE_A != 40) && (WIDTH_MODE_A != 20) && (WIDTH_MODE_A != 10) && + (WIDTH_MODE_A != 5) && (WIDTH_MODE_A != 2) && (WIDTH_MODE_A != 1) && (WIDTH_MODE_A != 0)) begin + $display("ERROR: Illegal %s Port A width configuration %d.", RAM_MODE, WIDTH_MODE_A); + $finish(); + end + if ((WIDTH_MODE_B != 80) && (WIDTH_MODE_B != 40) && (WIDTH_MODE_B != 20) && (WIDTH_MODE_B != 10) && + (WIDTH_MODE_B != 5) && (WIDTH_MODE_B != 2) && (WIDTH_MODE_B != 1) && (WIDTH_MODE_B != 0)) begin + $display("ERROR: Illegal %s Port B width configuration %d.", RAM_MODE, WIDTH_MODE_B); + $finish(); + end + if ((CAS != "NONE") && ((WIDTH_MODE_A > 1) || (WIDTH_MODE_B > 1))) begin + $display("ERROR: Cascade feature only supported in 1 bit data width mode."); + $finish(); + end + if ((CAS != "NONE") && (RAM_MODE != "TDP")) begin + $display("ERROR: Cascade feature only supported in TDP mode."); + $finish(); + end + // RAM initialization + memory[320*0+319:320*0] = INIT_00; + memory[320*1+319:320*1] = INIT_01; + memory[320*2+319:320*2] = INIT_02; + memory[320*3+319:320*3] = INIT_03; + memory[320*4+319:320*4] = INIT_04; + memory[320*5+319:320*5] = INIT_05; + memory[320*6+319:320*6] = INIT_06; + memory[320*7+319:320*7] = INIT_07; + memory[320*8+319:320*8] = INIT_08; + memory[320*9+319:320*9] = INIT_09; + memory[320*10+319:320*10] = INIT_0A; + memory[320*11+319:320*11] = INIT_0B; + memory[320*12+319:320*12] = INIT_0C; + memory[320*13+319:320*13] = INIT_0D; + memory[320*14+319:320*14] = INIT_0E; + memory[320*15+319:320*15] = INIT_0F; + memory[320*16+319:320*16] = INIT_10; + memory[320*17+319:320*17] = INIT_11; + memory[320*18+319:320*18] = INIT_12; + memory[320*19+319:320*19] = INIT_13; + memory[320*20+319:320*20] = INIT_14; + memory[320*21+319:320*21] = INIT_15; + memory[320*22+319:320*22] = INIT_16; + memory[320*23+319:320*23] = INIT_17; + memory[320*24+319:320*24] = INIT_18; + memory[320*25+319:320*25] = INIT_19; + memory[320*26+319:320*26] = INIT_1A; + memory[320*27+319:320*27] = INIT_1B; + memory[320*28+319:320*28] = INIT_1C; + memory[320*29+319:320*29] = INIT_1D; + memory[320*30+319:320*30] = INIT_1E; + memory[320*31+319:320*31] = INIT_1F; + memory[320*32+319:320*32] = INIT_20; + memory[320*33+319:320*33] = INIT_21; + memory[320*34+319:320*34] = INIT_22; + memory[320*35+319:320*35] = INIT_23; + memory[320*36+319:320*36] = INIT_24; + memory[320*37+319:320*37] = INIT_25; + memory[320*38+319:320*38] = INIT_26; + memory[320*39+319:320*39] = INIT_27; + memory[320*40+319:320*40] = INIT_28; + memory[320*41+319:320*41] = INIT_29; + memory[320*42+319:320*42] = INIT_2A; + memory[320*43+319:320*43] = INIT_2B; + memory[320*44+319:320*44] = INIT_2C; + memory[320*45+319:320*45] = INIT_2D; + memory[320*46+319:320*46] = INIT_2E; + memory[320*47+319:320*47] = INIT_2F; + memory[320*48+319:320*48] = INIT_30; + memory[320*49+319:320*49] = INIT_31; + memory[320*50+319:320*50] = INIT_32; + memory[320*51+319:320*51] = INIT_33; + memory[320*52+319:320*52] = INIT_34; + memory[320*53+319:320*53] = INIT_35; + memory[320*54+319:320*54] = INIT_36; + memory[320*55+319:320*55] = INIT_37; + memory[320*56+319:320*56] = INIT_38; + memory[320*57+319:320*57] = INIT_39; + memory[320*58+319:320*58] = INIT_3A; + memory[320*59+319:320*59] = INIT_3B; + memory[320*60+319:320*60] = INIT_3C; + memory[320*61+319:320*61] = INIT_3D; + memory[320*62+319:320*62] = INIT_3E; + memory[320*63+319:320*63] = INIT_3F; + memory[320*64+319:320*64] = INIT_40; + memory[320*65+319:320*65] = INIT_41; + memory[320*66+319:320*66] = INIT_42; + memory[320*67+319:320*67] = INIT_43; + memory[320*68+319:320*68] = INIT_44; + memory[320*69+319:320*69] = INIT_45; + memory[320*70+319:320*70] = INIT_46; + memory[320*71+319:320*71] = INIT_47; + memory[320*72+319:320*72] = INIT_48; + memory[320*73+319:320*73] = INIT_49; + memory[320*74+319:320*74] = INIT_4A; + memory[320*75+319:320*75] = INIT_4B; + memory[320*76+319:320*76] = INIT_4C; + memory[320*77+319:320*77] = INIT_4D; + memory[320*78+319:320*78] = INIT_4E; + memory[320*79+319:320*79] = INIT_4F; + memory[320*80+319:320*80] = INIT_50; + memory[320*81+319:320*81] = INIT_51; + memory[320*82+319:320*82] = INIT_52; + memory[320*83+319:320*83] = INIT_53; + memory[320*84+319:320*84] = INIT_54; + memory[320*85+319:320*85] = INIT_55; + memory[320*86+319:320*86] = INIT_56; + memory[320*87+319:320*87] = INIT_57; + memory[320*88+319:320*88] = INIT_58; + memory[320*89+319:320*89] = INIT_59; + memory[320*90+319:320*90] = INIT_5A; + memory[320*91+319:320*91] = INIT_5B; + memory[320*92+319:320*92] = INIT_5C; + memory[320*93+319:320*93] = INIT_5D; + memory[320*94+319:320*94] = INIT_5E; + memory[320*95+319:320*95] = INIT_5F; + memory[320*96+319:320*96] = INIT_60; + memory[320*97+319:320*97] = INIT_61; + memory[320*98+319:320*98] = INIT_62; + memory[320*99+319:320*99] = INIT_63; + memory[320*100+319:320*100] = INIT_64; + memory[320*101+319:320*101] = INIT_65; + memory[320*102+319:320*102] = INIT_66; + memory[320*103+319:320*103] = INIT_67; + memory[320*104+319:320*104] = INIT_68; + memory[320*105+319:320*105] = INIT_69; + memory[320*106+319:320*106] = INIT_6A; + memory[320*107+319:320*107] = INIT_6B; + memory[320*108+319:320*108] = INIT_6C; + memory[320*109+319:320*109] = INIT_6D; + memory[320*110+319:320*110] = INIT_6E; + memory[320*111+319:320*111] = INIT_6F; + memory[320*112+319:320*112] = INIT_70; + memory[320*113+319:320*113] = INIT_71; + memory[320*114+319:320*114] = INIT_72; + memory[320*115+319:320*115] = INIT_73; + memory[320*116+319:320*116] = INIT_74; + memory[320*117+319:320*117] = INIT_75; + memory[320*118+319:320*118] = INIT_76; + memory[320*119+319:320*119] = INIT_77; + memory[320*120+319:320*120] = INIT_78; + memory[320*121+319:320*121] = INIT_79; + memory[320*122+319:320*122] = INIT_7A; + memory[320*123+319:320*123] = INIT_7B; + memory[320*124+319:320*124] = INIT_7C; + memory[320*125+319:320*125] = INIT_7D; + memory[320*126+319:320*126] = INIT_7E; + memory[320*127+319:320*127] = INIT_7F; + end + + // Signal inversion + wire clka = A_CLK_INV ^ A_CLK; + wire clkb = B_CLK_INV ^ B_CLK; + wire ena = A_EN_INV ^ A_EN; + wire enb = B_EN_INV ^ B_EN; + wire wea = A_WE_INV ^ A_WE; + wire web = B_WE_INV ^ B_WE; + + // Internal signals + wire [15:0] addra; + wire [15:0] addrb; + reg [39:0] A_DO_out = 0, A_DO_reg = 0; + reg [39:0] B_DO_out = 0, B_DO_reg = 0; + + generate + if (RAM_MODE == "SDP") begin + // Port A (write) + if (A_WR_WIDTH == 80) begin + assign addra = A_ADDR[15:7]*80; + end + // Port B (read) + if (B_RD_WIDTH == 80) begin + assign addrb = B_ADDR[15:7]*80; + end + end + else if (RAM_MODE == "TDP") begin + // Port A + if (WIDTH_MODE_A <= 1) begin + wire [15:0] tmpa = {1'b0, A_ADDR[15:1]}; + assign addra = tmpa + (tmpa/4); + end + else if (WIDTH_MODE_A <= 2) begin + wire [15:0] tmpa = {2'b0, A_ADDR[15:2]}; + assign addra = tmpa*2 + (tmpa/2); + end + else if (WIDTH_MODE_A <= 5) begin + assign addra = {3'b0, A_ADDR[15:3]}*5; + end + else if (WIDTH_MODE_A <= 10) begin + assign addra = {4'b0, A_ADDR[15:4]}*10; + end + else if (WIDTH_MODE_A <= 20) begin + assign addra = {5'b0, A_ADDR[15:5]}*20; + end + else if (WIDTH_MODE_A <= 40) begin + assign addra = {6'b0, A_ADDR[15:6]}*40; + end + // Port B + if (WIDTH_MODE_B <= 1) begin + wire [15:0] tmpb = {1'b0, B_ADDR[15:1]}; + assign addrb = tmpb + (tmpb/4); + end + else if (WIDTH_MODE_B <= 2) begin + wire [15:0] tmpb = {2'b0, B_ADDR[15:2]}; + assign addrb = tmpb*2 + (tmpb/2); + end + else if (WIDTH_MODE_B <= 5) begin + assign addrb = {3'b0, B_ADDR[15:3]}*5; + end + else if (WIDTH_MODE_B <= 10) begin + assign addrb = {4'b0, B_ADDR[15:4]}*10; + end + else if (WIDTH_MODE_B <= 20) begin + assign addrb = {5'b0, B_ADDR[15:5]}*20; + end + else if (WIDTH_MODE_B <= 40) begin + assign addrb = {6'b0, B_ADDR[15:6]}*40; + end + end + endgenerate + + generate + if (RAM_MODE == "SDP") begin + // SDP write port + always @(posedge clka) + begin + for (k=0; k < A_WR_WIDTH; k=k+1) begin + if (k < 40) begin + if (ena && wea && A_BM[k]) memory[addra+k] <= A_DI[k]; + end + else begin // use both ports + if (ena && wea && B_BM[k-40]) memory[addra+k] <= B_DI[k-40]; + end + end + end + // SDP read port + always @(posedge clkb) + begin + // "NO_CHANGE" only + for (k=0; k < B_RD_WIDTH; k=k+1) begin + if (k < 40) begin + if (enb && !wea) A_DO_out[k] <= memory[addrb+k]; + end + else begin // use both ports + if (enb && !wea) B_DO_out[k-40] <= memory[addrb+k]; + end + end + end + end + else if (RAM_MODE == "TDP") begin + // {A,B}_ADDR[0]=0 selects lower, {A,B}_ADDR[0]=1 selects upper cascade memory + wire upper_sel_a = ((CAS == "UPPER") && (A_ADDR[0] == 1)); + wire lower_sel_a = ((CAS == "LOWER") && (A_ADDR[0] == 0)); + wire upper_sel_b = ((CAS == "UPPER") && (B_ADDR[0] == 1)); + wire lower_sel_b = ((CAS == "LOWER") && (B_ADDR[0] == 0)); + + reg dumm; + + // Cascade output port A + always @(*) + begin + if ((A_WR_MODE == "NO_CHANGE") && lower_sel_a) begin + A_CO = memory[addra]; + end + else if ((A_WR_MODE == "WRITE_THROUGH") && lower_sel_a) begin + A_CO = ((wea && A_BM[0]) ? (A_DI[0]) : (memory[addra])); + end + end + + // Cascade output port B + always @(*) + begin + if ((B_WR_MODE == "NO_CHANGE") && lower_sel_b) begin + B_CO = memory[addrb]; + end + else if ((B_WR_MODE == "WRITE_THROUGH") && lower_sel_b) begin + B_CO = ((web && B_BM[0]) ? (B_DI[0]) : (memory[addrb])); + end + end + + // TDP port A + always @(posedge clka) + begin + for (i=0; i < WIDTH_MODE_A; i=i+1) begin + if (upper_sel_a || lower_sel_a || (CAS == "NONE")) begin + if (ena && wea && A_BM[i]) + memory[addra+i] <= A_DI[i]; + end + + if (A_WR_MODE == "NO_CHANGE") begin + if (ena && !wea) begin + if (CAS == "UPPER") begin + A_DO_out[i] <= ((A_ADDR[0] == 1) ? (memory[addra+i]) : (A_CI)); + end + else if (CAS == "NONE") begin + A_DO_out[i] <= memory[addra+i]; + end + end + end + else if (A_WR_MODE == "WRITE_THROUGH") begin + if (ena) begin + if (CAS == "UPPER") begin + if (A_ADDR[0] == 1) begin + A_DO_out[i] <= ((wea && A_BM[i]) ? (A_DI[i]) : (memory[addra+i])); + end else begin + A_DO_out[i] <= A_CI; + end + end + else if (CAS == "NONE") begin + A_DO_out[i] <= ((wea && A_BM[i]) ? (A_DI[i]) : (memory[addra+i])); + end + end + end + end + end + // TDP port B + always @(posedge clkb) + begin + for (i=0; i < WIDTH_MODE_B; i=i+1) begin + if (upper_sel_b || lower_sel_b || (CAS == "NONE")) begin + if (enb && web && B_BM[i]) + memory[addrb+i] <= B_DI[i]; + end + + if (B_WR_MODE == "NO_CHANGE") begin + if (enb && !web) begin + if (CAS == "UPPER") begin + B_DO_out[i] <= ((B_ADDR[0] == 1) ? (memory[addrb+i]) : (B_CI)); + end + else if (CAS == "NONE") begin + B_DO_out[i] <= memory[addrb+i]; + end + end + end + else if (B_WR_MODE == "WRITE_THROUGH") begin + if (enb) begin + if (CAS == "UPPER") begin + if (B_ADDR[0] == 1) begin + B_DO_out[i] <= ((web && B_BM[i]) ? (B_DI[i]) : (memory[addrb+i])); + end else begin + B_DO_out[i] <= B_CI; + end + end + else if (CAS == "NONE") begin + B_DO_out[i] <= ((web && B_BM[i]) ? (B_DI[i]) : (memory[addrb+i])); + end + end + end + end + end + end + endgenerate + + // Optional output register + generate + if (A_DO_REG) begin + always @(posedge clka) begin + A_DO_reg <= A_DO_out; + end + assign A_DO = A_DO_reg; + end + else begin + assign A_DO = A_DO_out; + end + if (B_DO_REG) begin + always @(posedge clkb) begin + B_DO_reg <= B_DO_out; + end + assign B_DO = B_DO_reg; + end + else begin + assign B_DO = B_DO_out; + end + endgenerate +endmodule + +// Models of the LUT2 tree primitives +module CC_L2T4( + output O, + input I0, I1, I2, I3 +); + parameter [3:0] INIT_L00 = 4'b0000; + parameter [3:0] INIT_L01 = 4'b0000; + parameter [3:0] INIT_L10 = 4'b0000; + + wire [1:0] l00_s1 = I1 ? INIT_L00[3:2] : INIT_L00[1:0]; + wire l00 = I0 ? l00_s1[1] : l00_s1[0]; + + wire [1:0] l01_s1 = I3 ? INIT_L01[3:2] : INIT_L01[1:0]; + wire l01 = I2 ? l01_s1[1] : l01_s1[0]; + + wire [1:0] l10_s1 = l01 ? INIT_L10[3:2] : INIT_L10[1:0]; + assign O = l00 ? l10_s1[1] : l10_s1[0]; + +endmodule + + +module CC_L2T5( + output O, + input I0, I1, I2, I3, I4 +); + parameter [3:0] INIT_L02 = 4'b0000; + parameter [3:0] INIT_L03 = 4'b0000; + parameter [3:0] INIT_L11 = 4'b0000; + parameter [3:0] INIT_L20 = 4'b0000; + + wire [1:0] l02_s1 = I1 ? INIT_L02[3:2] : INIT_L02[1:0]; + wire l02 = I0 ? l02_s1[1] : l02_s1[0]; + + wire [1:0] l03_s1 = I3 ? INIT_L03[3:2] : INIT_L03[1:0]; + wire l03 = I2 ? l03_s1[1] : l03_s1[0]; + + wire [1:0] l11_s1 = l03 ? INIT_L11[3:2] : INIT_L11[1:0]; + wire l11 = l02 ? l11_s1[1] : l11_s1[0]; + + wire [1:0] l20_s1 = l11 ? INIT_L20[3:2] : INIT_L20[1:0]; + assign O = I4 ? l20_s1[1] : l20_s1[0]; + +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/inv_map.v b/resources/netlist/resources/kernel/share/gatemate/inv_map.v new file mode 100644 index 0000000..8a50517 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/inv_map.v @@ -0,0 +1,4 @@ +// Any inverters not folded into LUTs are mapped to a LUT of their own +module \$__CC_NOT (input A, output Y); + CC_LUT1 #(.INIT(2'b01)) _TECHMAP_REPLACE_ (.I0(A), .O(Y)); +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/lut_map.v b/resources/netlist/resources/kernel/share/gatemate/lut_map.v new file mode 100644 index 0000000..c522e4c --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/lut_map.v @@ -0,0 +1,45 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + CC_LUT1 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0])); + end + else if (WIDTH == 2) begin + CC_LUT2 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(A[1])); + end + else if (WIDTH == 3) begin + CC_LUT3 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(A[1]), .I2(A[2])); + end + else if (WIDTH == 4) begin + CC_LUT4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), .I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(A[3])); + end + else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/lut_tree_cells.genlib b/resources/netlist/resources/kernel/share/gatemate/lut_tree_cells.genlib new file mode 100644 index 0000000..bbc3be0 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/lut_tree_cells.genlib @@ -0,0 +1,221 @@ +GATE $__ZERO 0 Y=CONST0; +GATE $__ONE 0 Y=CONST1; + +GATE $__CC_BUF 5 Y=A; +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC_NOT 0 Y=!A; +PIN * INV 1 9999 10 5 10 5 + +GATE $__CC_MUX 5 Y=((A*!C)+(B*C)); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC2_A 10 Y=(A*B); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC3_A_O 12 Y=(E+(A*B)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC3_A_X 12 Y=((E*(!A+!B))+(!E*(A*B))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC2_O 10 Y=(A+B); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC3_O_A 12 Y=(E*(A+B)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC3_O_X 12 Y=((E*(!A*!B))+(!E*(A+B))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC2_X 10 Y=((A*!B)+(!A*B)); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_X_A 12 Y=(E*((A*!B)+(!A*B))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_X_O 12 Y=(E+((A*!B)+(!A*B))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_AA 10 Y=((A*B)*C); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_AA_O 12 Y=(E+((A*B)*C)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_AA_X 12 Y=((E*((!A+!B)+!C))+(!E*((A*B)*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_OO 10 Y=((A+B)+C); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_OO_A 12 Y=(E*((A+B)+C)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_OO_X 12 Y=((E*((!A*!B)*!C))+(!E*((A+B)+C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_XX 10 Y=((((A*!B)+(!A*B))*!C)+(((!A+B)*(A+!B))*C)); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XX_A 12 Y=(E*((((A*!B)+(!A*B))*!C)+(((!A+B)*(A+!B))*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XX_O 12 Y=(E+((((A*!B)+(!A*B))*!C)+(((!A+B)*(A+!B))*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_AO 10 Y=((A*B)+C); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_AO_A 12 Y=(E*((A*B)+C)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_AO_O 12 Y=(E+((A*B)+C)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_AO_X 12 Y=((E*((!A+!B)*!C))+(!E*((A*B)+C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_OA 10 Y=((A+B)*C); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_OA_A 12 Y=(E*((A+B)*C)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_OA_O 12 Y=(E+((A+B)*C)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC4_OA_X 12 Y=((E*((!A*!B)+!C))+(!E*((A+B)*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_AX 10 Y=(((A*B)*!C)+((!A+!B)*C)); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AX_A 12 Y=(E*(((A*B)*!C)+((!A+!B)*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AX_O 12 Y=(E+(((A*B)*!C)+((!A+!B)*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AX_X 12 Y=((E*(((!A+!B)+C)*((A*B)+!C)))+(!E*(((A*B)*!C)+((!A+!B)*C)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC3_XA 10 Y=(((A*!B)+(!A*B))*C); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XA_A 12 Y=(E*(((A*!B)+(!A*B))*C)); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XA_O 12 Y=(E+(((A*!B)+(!A*B))*C)); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XA_X 12 Y=((E*(((!A+B)*(A+!B))+!C))+(!E*(((A*!B)+(!A*B))*C))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AAA 10 Y=((A*B)*(C*D)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AAA_A 12 Y=(E*((A*B)*(C*D))); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AAA_O 12 Y=(E+((A*B)*(C*D))); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AAA_X 12 Y=((E*((!A+!B)+(!C+!D)))+(!E*((A*B)*(C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AXA 10 Y=(((A*B)*(!C+!D))+((!A+!B)*(C*D))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AXA_A 12 Y=(E*(((A*B)*(!C+!D))+((!A+!B)*(C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AXA_O 12 Y=(E+(((A*B)*(!C+!D))+((!A+!B)*(C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AXA_X 12 Y=((E*(((!A+!B)+(C*D))*((A*B)+(!C+!D))))+(!E*(((A*B)*(!C+!D))+((!A+!B)*(C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XAX 10 Y=(((A*!B)+(!A*B))*((C*!D)+(!C*D))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_XAX_A 12 Y=(E*(((A*!B)+(!A*B))*((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_XAX_O 12 Y=(E+(((A*!B)+(!A*B))*((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_XAX_X 12 Y=((E*(((!A+B)*(A+!B))+((!C+D)*(C+!D))))+(!E*(((A*!B)+(!A*B))*((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AAX 10 Y=((A*B)*((C*!D)+(!C*D))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AAX_A 12 Y=(E*((A*B)*((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AAX_O 12 Y=(E+((A*B)*((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AAX_X 12 Y=((E*((!A+!B)+((!C+D)*(C+!D))))+(!E*((A*B)*((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AXX 10 Y=(((A*B)*((!C+D)*(C+!D)))+((!A+!B)*((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AXX_A 12 Y=(E*(((A*B)*((!C+D)*(C+!D)))+((!A+!B)*((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AXX_O 12 Y=(E+(((A*B)*((!C+D)*(C+!D)))+((!A+!B)*((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AXX_X 12 Y=((E*(((!A+!B)+((C*!D)+(!C*D)))*((A*B)+((!C+D)*(C+!D)))))+(!E*(((A*B)*((!C+D)*(C+!D)))+((!A+!B)*((C*!D)+(!C*D)))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_XXX 10 Y=((((A*!B)+(!A*B))*((!C+D)*(C+!D)))+(((!A+B)*(A+!B))*((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_XXX_A 12 Y=(E*((((A*!B)+(!A*B))*((!C+D)*(C+!D)))+(((!A+B)*(A+!B))*((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_XXX_O 12 Y=(E+((((A*!B)+(!A*B))*((!C+D)*(C+!D)))+(((!A+B)*(A+!B))*((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_XXX_X 12 Y=((E*((((!A+B)*(A+!B))+((C*!D)+(!C*D)))*(((A*!B)+(!A*B))+((!C+D)*(C+!D)))))+(!E*((((A*!B)+(!A*B))*((!C+D)*(C+!D)))+(((!A+B)*(A+!B))*((C*!D)+(!C*D)))))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AAO 10 Y=((A*B)*(C+D)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AAO_A 12 Y=(E*((A*B)*(C+D))); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AAO_O 12 Y=(E+((A*B)*(C+D))); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AAO_X 12 Y=((E*((!A+!B)+(!C*!D)))+(!E*((A*B)*(C+D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AOA 10 Y=((A*B)+(C*D)); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AOA_A 12 Y=(E*((A*B)+(C*D))); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AOA_O 12 Y=(E+((A*B)+(C*D))); +PIN * NONINV 1 9999 10 5 10 5 + +GATE $__CC5_AOA_X 12 Y=((E*((!A+!B)*(!C+!D)))+(!E*((A*B)+(C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC4_AOX 10 Y=((A*B)+((C*!D)+(!C*D))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AOX_A 12 Y=(E*((A*B)+((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AOX_O 12 Y=(E+((A*B)+((C*!D)+(!C*D)))); +PIN * UNKNOWN 1 9999 10 5 10 5 + +GATE $__CC5_AOX_X 12 Y=((E*((!A+!B)*((!C+D)*(C+!D))))+(!E*((A*B)+((C*!D)+(!C*D))))); +PIN * UNKNOWN 1 9999 10 5 10 5 diff --git a/resources/netlist/resources/kernel/share/gatemate/lut_tree_map.v b/resources/netlist/resources/kernel/share/gatemate/lut_tree_map.v new file mode 100644 index 0000000..9eef3a5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/lut_tree_map.v @@ -0,0 +1,822 @@ + +module \$__ZERO (output Y); assign Y = 1'b0; endmodule +module \$__ONE (output Y); assign Y = 1'b1; endmodule + +module \$__CC_BUF (input A, output Y); assign Y = A; endmodule + +module \$__CC_MUX (input A, B, C, output Y); + CC_MX2 _TECHMAP_REPLACE_ ( + .D0(A), .D1(B), .S0(C), + .Y(Y) + ); +endmodule + + +module \$__CC2_A (input A, B, output Y); + CC_LUT2 #( + .INIT(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), + .O(Y) + ); +endmodule + +module \$__CC3_A_O (input A, B, E, output Y); + CC_L2T4 #( + .INIT_L00(4'b1010), + .INIT_L01(4'b1000), + .INIT_L10(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(E), .I1(), .I2(A), .I3(B), + .O(Y) + ); +endmodule + +module \$__CC3_A_X (input A, B, E, output Y); + CC_L2T4 #( + .INIT_L00(4'b1010), + .INIT_L01(4'b1000), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(E), .I1(), .I2(A), .I3(B), + .O(Y) + ); +endmodule + +module \$__CC2_O (input A, B, output Y); + CC_LUT2 #( + .INIT(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), + .O(Y) + ); +endmodule + +module \$__CC3_O_A (input A, B, E, output Y); + CC_L2T4 #( + .INIT_L00(4'b1010), + .INIT_L01(4'b1110), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(E), .I1(), .I2(A), .I3(B), + .O(Y) + ); +endmodule + +module \$__CC3_O_X (input A, B, E, output Y); + CC_L2T4 #( + .INIT_L00(4'b1010), + .INIT_L01(4'b1110), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(E), .I1(), .I2(A), .I3(B), + .O(Y) + ); +endmodule + +module \$__CC2_X (input A, B, output Y); + CC_LUT2 #( + .INIT(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), + .O(Y) + ); +endmodule + +module \$__CC3_X_A (input A, B, E, output Y); + CC_L2T4 #( + .INIT_L00(4'b1010), + .INIT_L01(4'b0110), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(E), .I1(), .I2(A), .I3(B), + .O(Y) + ); +endmodule + +module \$__CC3_X_O (input A, B, E, output Y); + CC_L2T4 #( + .INIT_L00(4'b1010), + .INIT_L01(4'b0110), + .INIT_L10(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(E), .I1(), .I2(A), .I3(B), + .O(Y) + ); +endmodule + +module \$__CC3_AA (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1010), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_AA_O (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AA_X (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC3_OO (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b1110), + .INIT_L01(4'b1010), + .INIT_L10(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_OO_A (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_OO_X (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC3_XX (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b0110), + .INIT_L01(4'b1010), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_XX_A (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b1010), + .INIT_L11(4'b0110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_XX_O (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b1010), + .INIT_L11(4'b0110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC3_AO (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1010), + .INIT_L10(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_AO_A (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b1110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AO_O (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b1110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AO_X (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b1110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC3_OA (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b1110), + .INIT_L01(4'b1010), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_OA_A (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_OA_O (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_OA_X (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC3_AX (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1010), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_AX_A (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b0110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AX_O (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b0110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AX_X (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1010), + .INIT_L11(4'b0110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC3_XA (input A, B, C, output Y); + CC_L2T4 #( + .INIT_L00(4'b0110), + .INIT_L01(4'b1010), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), + .O(Y) + ); +endmodule + +module \$__CC4_XA_A (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_XA_O (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_XA_X (input A, B, C, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b1010), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AAA (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1000), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AAA_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b1000), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AAA_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AAA_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AXA (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1000), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AXA_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b0110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AXA_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b0110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AXA_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b0110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_XAX (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b0110), + .INIT_L01(4'b0110), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_XAX_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b0110), + .INIT_L11(4'b1000), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_XAX_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b0110), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_XAX_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b0110), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AAX (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b0110), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AAX_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b1000), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AAX_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AAX_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AXX (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b0110), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AXX_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b0110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AXX_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b0110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AXX_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b0110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_XXX (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b0110), + .INIT_L01(4'b0110), + .INIT_L10(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_XXX_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b0110), + .INIT_L11(4'b0110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_XXX_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b0110), + .INIT_L11(4'b0110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_XXX_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b0110), + .INIT_L03(4'b0110), + .INIT_L11(4'b0110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AAO (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1110), + .INIT_L10(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AAO_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1110), + .INIT_L11(4'b1000), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AAO_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1110), + .INIT_L11(4'b1000), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AAO_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1110), + .INIT_L11(4'b1000), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AOA (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b1000), + .INIT_L10(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AOA_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b1110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AOA_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b1110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AOA_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b1000), + .INIT_L11(4'b1110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC4_AOX (input A, B, C, D, output Y); + CC_L2T4 #( + .INIT_L00(4'b1000), + .INIT_L01(4'b0110), + .INIT_L10(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), + .O(Y) + ); +endmodule + +module \$__CC5_AOX_A (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b1110), + .INIT_L20(4'b1000), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AOX_O (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b1110), + .INIT_L20(4'b1110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule + +module \$__CC5_AOX_X (input A, B, C, D, E, output Y); + CC_L2T5 #( + .INIT_L02(4'b1000), + .INIT_L03(4'b0110), + .INIT_L11(4'b1110), + .INIT_L20(4'b0110), + ) _TECHMAP_REPLACE_ ( + .I0(A), .I1(B), .I2(C), .I3(D), .I4(E), + .O(Y) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/mul_map.v b/resources/netlist/resources/kernel/share/gatemate/mul_map.v new file mode 100644 index 0000000..c2dd0a9 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/mul_map.v @@ -0,0 +1,77 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$mul $__mul" *) +module \$__MULMXN (A, B, Y); + + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + localparam A_ADJWIDTH = A_WIDTH + (A_SIGNED ? 0 : 1); + localparam B_ADJWIDTH = B_WIDTH + (B_SIGNED ? 0 : 1); + + generate + if (A_SIGNED) begin: blkA + wire signed [A_ADJWIDTH-1:0] Aext = $signed(A); + end + else begin: blkA + wire [A_ADJWIDTH-1:0] Aext = A; + end + if (B_SIGNED) begin: blkB + wire signed [B_ADJWIDTH-1:0] Bext = $signed(B); + end + else begin: blkB + wire [B_ADJWIDTH-1:0] Bext = B; + end + + if (A_WIDTH >= B_WIDTH) begin + CC_MULT #( + .A_WIDTH(A_ADJWIDTH), + .B_WIDTH(B_ADJWIDTH), + .P_WIDTH(Y_WIDTH), + ) _TECHMAP_REPLACE_ ( + .A(blkA.Aext), + .B(blkB.Bext), + .P(Y) + ); + end + else begin // swap A,B + CC_MULT #( + .A_WIDTH(B_ADJWIDTH), + .B_WIDTH(A_ADJWIDTH), + .P_WIDTH(Y_WIDTH), + ) _TECHMAP_REPLACE_ ( + .A(blkB.Bext), + .B(blkA.Aext), + .P(Y) + ); + end + endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/gatemate/mux_map.v b/resources/netlist/resources/kernel/share/gatemate/mux_map.v new file mode 100644 index 0000000..bcc8480 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/mux_map.v @@ -0,0 +1,56 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +module \$_MUX8_ (A, B, C, D, E, F, G, H, S, T, U, Y); + input A, B, C, D, E, F, G, H, S, T, U; + output Y; + + CC_MX8 _TECHMAP_REPLACE_ ( + .D0(A), .D1(B), .D2(C), .D3(D), + .D4(E), .D5(F), .D6(G), .D7(H), + .S0(S), .S1(T), .S2(U), + .Y(Y) + ); + +endmodule + +module \$_MUX4_ (A, B, C, D, S, T, Y); + input A, B, C, D, S, T; + output Y; + + CC_MX4 _TECHMAP_REPLACE_ ( + .D0(A), .D1(B), .D2(C), .D3(D), + .S0(S), .S1(T), + .Y(Y) + ); + +endmodule + +/* +module \$_MUX_ (A, B, S, Y); + input A, B, S; + output Y; + + CC_MX2 _TECHMAP_REPLACE_ ( + .D0(A), .D1(B), .S0(S), + .Y(Y) + ); + +endmodule +*/ diff --git a/resources/netlist/resources/kernel/share/gatemate/reg_map.v b/resources/netlist/resources/kernel/share/gatemate/reg_map.v new file mode 100644 index 0000000..26cfb71 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gatemate/reg_map.v @@ -0,0 +1,45 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Cologne Chip AG + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$_DFFE_[NP][NP][01][NP]_" *) +module \$_DFFE_xxxx_ (input D, C, R, E, output Q); + + parameter _TECHMAP_CELLTYPE_ = ""; + + CC_DFF #( + .CLK_INV(_TECHMAP_CELLTYPE_[39:32] == "N"), + .EN_INV(_TECHMAP_CELLTYPE_[15:8] == "N"), + .SR_INV(_TECHMAP_CELLTYPE_[31:24] == "N"), + .SR_VAL(_TECHMAP_CELLTYPE_[23:16] == "1") + ) _TECHMAP_REPLACE_ (.D(D), .EN(E), .CLK(C), .SR(R), .Q(Q)); + +endmodule + +(* techmap_celltype = "$_DLATCH_[NP][NP][01]_" *) +module \$_DLATCH_xxx_ (input E, R, D, output Q); + + parameter _TECHMAP_CELLTYPE_ = ""; + + CC_DLT #( + .G_INV(_TECHMAP_CELLTYPE_[31:24] == "N"), + .SR_INV(_TECHMAP_CELLTYPE_[23:16] == "N"), + .SR_VAL(_TECHMAP_CELLTYPE_[15:8] == "1") + ) _TECHMAP_REPLACE_ (.D(D), .G(E), .SR(R), .Q(Q)); + +endmodule diff --git a/resources/netlist/resources/kernel/share/gowin/arith_map.v b/resources/netlist/resources/kernel/share/gowin/arith_map.v new file mode 100644 index 0000000..2d48fa7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/arith_map.v @@ -0,0 +1,67 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * Copyright (C) 2018 gatecat + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_gw1n_alu(A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = B_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] C = {CO, CI}; + + genvar i; + generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice + ALU #(.ALU_MODE(2)) // ADDSUB I3 ? add : sub + alu(.I0(AA[i]), + .I1(BB[i]), + .I3(~BI), + .CIN(C[i]), + .COUT(CO[i]), + .SUM(Y[i]) + ); + end endgenerate + assign X = AA ^ BB; +endmodule + diff --git a/resources/netlist/resources/kernel/share/gowin/brams.txt b/resources/netlist/resources/kernel/share/gowin/brams.txt new file mode 100644 index 0000000..0c0d8fa --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/brams.txt @@ -0,0 +1,81 @@ +ram block $__GOWIN_SP_ { + abits 14; + widths 1 2 4 9 18 36 per_port; + byte 9; + cost 128; + init no_undef; + port srsw "A" { + clock posedge; + clken; + wrbe_separate; + option "RESET_MODE" "SYNC" { + rdsrst zero ungated; + } + option "RESET_MODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + portoption "WRITE_MODE" 0 { + rdwr no_change; + } + portoption "WRITE_MODE" 1 { + rdwr new; + } + portoption "WRITE_MODE" 2 { + rdwr old; + } + } +} + +ram block $__GOWIN_DP_ { + abits 14; + widths 1 2 4 9 18 per_port; + byte 9; + cost 128; + init no_undef; + port srsw "A" "B" { + clock posedge; + clken; + wrbe_separate; + option "RESET_MODE" "SYNC" { + rdsrst zero ungated; + } + option "RESET_MODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + portoption "WRITE_MODE" 0 { + rdwr no_change; + } + portoption "WRITE_MODE" 1 { + rdwr new; + } + portoption "WRITE_MODE" 2 { + rdwr old; + } + } +} + +ram block $__GOWIN_SDP_ { + abits 14; + widths 1 2 4 9 18 36 per_port; + byte 9; + cost 128; + init no_undef; + port sr "R" { + clock posedge; + clken; + option "RESET_MODE" "SYNC" { + rdsrst zero ungated; + } + option "RESET_MODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } + port sw "W" { + clock posedge; + clken; + wrbe_separate; + } +} diff --git a/resources/netlist/resources/kernel/share/gowin/brams_map.v b/resources/netlist/resources/kernel/share/gowin/brams_map.v new file mode 100644 index 0000000..7ffc91b --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/brams_map.v @@ -0,0 +1,410 @@ +`define DEF_FUNCS \ + function [255:0] init_slice_x8; \ + input integer idx; \ + integer i; \ + for (i = 0; i < 32; i = i + 1) begin \ + init_slice_x8[i*8+:8] = INIT[(idx * 32 + i) * 9+:8]; \ + end \ + endfunction \ + function [287:0] init_slice_x9; \ + input integer idx; \ + init_slice_x9 = INIT[idx * 288+:288]; \ + endfunction \ + +`define x8_width(width) (width / 9 * 8 + width % 9) +`define x8_rd_data(data) {1'bx, data[31:24], 1'bx, data[23:16], 1'bx, data[15:8], 1'bx, data[7:0]} +`define x8_wr_data(data) {data[34:27], data[25:18], data[16:9], data[7:0]} +`define wre(width, wr_en, wr_be) (width < 18 ? wr_en | wr_be[0] : wr_en) +`define addrbe(width, addr, wr_be) (width < 18 ? addr : {addr[13:4], wr_be}) + + +`define INIT(func) \ + .INIT_RAM_00(func('h00)), \ + .INIT_RAM_01(func('h01)), \ + .INIT_RAM_02(func('h02)), \ + .INIT_RAM_03(func('h03)), \ + .INIT_RAM_04(func('h04)), \ + .INIT_RAM_05(func('h05)), \ + .INIT_RAM_06(func('h06)), \ + .INIT_RAM_07(func('h07)), \ + .INIT_RAM_08(func('h08)), \ + .INIT_RAM_09(func('h09)), \ + .INIT_RAM_0A(func('h0a)), \ + .INIT_RAM_0B(func('h0b)), \ + .INIT_RAM_0C(func('h0c)), \ + .INIT_RAM_0D(func('h0d)), \ + .INIT_RAM_0E(func('h0e)), \ + .INIT_RAM_0F(func('h0f)), \ + .INIT_RAM_10(func('h10)), \ + .INIT_RAM_11(func('h11)), \ + .INIT_RAM_12(func('h12)), \ + .INIT_RAM_13(func('h13)), \ + .INIT_RAM_14(func('h14)), \ + .INIT_RAM_15(func('h15)), \ + .INIT_RAM_16(func('h16)), \ + .INIT_RAM_17(func('h17)), \ + .INIT_RAM_18(func('h18)), \ + .INIT_RAM_19(func('h19)), \ + .INIT_RAM_1A(func('h1a)), \ + .INIT_RAM_1B(func('h1b)), \ + .INIT_RAM_1C(func('h1c)), \ + .INIT_RAM_1D(func('h1d)), \ + .INIT_RAM_1E(func('h1e)), \ + .INIT_RAM_1F(func('h1f)), \ + .INIT_RAM_20(func('h20)), \ + .INIT_RAM_21(func('h21)), \ + .INIT_RAM_22(func('h22)), \ + .INIT_RAM_23(func('h23)), \ + .INIT_RAM_24(func('h24)), \ + .INIT_RAM_25(func('h25)), \ + .INIT_RAM_26(func('h26)), \ + .INIT_RAM_27(func('h27)), \ + .INIT_RAM_28(func('h28)), \ + .INIT_RAM_29(func('h29)), \ + .INIT_RAM_2A(func('h2a)), \ + .INIT_RAM_2B(func('h2b)), \ + .INIT_RAM_2C(func('h2c)), \ + .INIT_RAM_2D(func('h2d)), \ + .INIT_RAM_2E(func('h2e)), \ + .INIT_RAM_2F(func('h2f)), \ + .INIT_RAM_30(func('h30)), \ + .INIT_RAM_31(func('h31)), \ + .INIT_RAM_32(func('h32)), \ + .INIT_RAM_33(func('h33)), \ + .INIT_RAM_34(func('h34)), \ + .INIT_RAM_35(func('h35)), \ + .INIT_RAM_36(func('h36)), \ + .INIT_RAM_37(func('h37)), \ + .INIT_RAM_38(func('h38)), \ + .INIT_RAM_39(func('h39)), \ + .INIT_RAM_3A(func('h3a)), \ + .INIT_RAM_3B(func('h3b)), \ + .INIT_RAM_3C(func('h3c)), \ + .INIT_RAM_3D(func('h3d)), \ + .INIT_RAM_3E(func('h3e)), \ + .INIT_RAM_3F(func('h3f)), + +module $__GOWIN_SP_ (...); + +parameter INIT = 0; +parameter OPTION_RESET_MODE = "SYNC"; + +parameter PORT_A_WIDTH = 36; +parameter PORT_A_WR_BE_WIDTH = 4; +parameter PORT_A_OPTION_WRITE_MODE = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [13:0] PORT_A_ADDR; +input [PORT_A_WR_BE_WIDTH-1:0] PORT_A_WR_BE; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +`DEF_FUNCS + +wire RST = OPTION_RESET_MODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST; +wire WRE = `wre(PORT_A_WIDTH, PORT_A_WR_EN, PORT_A_WR_BE); +wire [13:0] AD = `addrbe(PORT_A_WIDTH, PORT_A_ADDR, PORT_A_WR_BE); + +generate + +if (PORT_A_WIDTH < 9) begin + + wire [31:0] DI = `x8_wr_data(PORT_A_WR_DATA); + wire [31:0] DO; + + assign PORT_A_RD_DATA = `x8_rd_data(DO); + + SP #( + `INIT(init_slice_x8) + .READ_MODE(1'b0), + .WRITE_MODE(PORT_A_OPTION_WRITE_MODE), + .BIT_WIDTH(`x8_width(PORT_A_WIDTH)), + .BLK_SEL(3'b000), + .RESET_MODE(OPTION_RESET_MODE), + ) _TECHMAP_REPLACE_ ( + .BLKSEL(3'b000), + .CLK(PORT_A_CLK), + .CE(PORT_A_CLK_EN), + .WRE(WRE), + .RESET(RST), + .OCE(1'b0), + .AD(AD), + .DI(DI), + .DO(DO), + ); + +end else begin + + wire [35:0] DI = PORT_A_WR_DATA; + wire [35:0] DO; + + assign PORT_A_RD_DATA = DO; + + SPX9 #( + `INIT(init_slice_x9) + .READ_MODE(1'b0), + .WRITE_MODE(PORT_A_OPTION_WRITE_MODE), + .BIT_WIDTH(PORT_A_WIDTH), + .BLK_SEL(3'b000), + .RESET_MODE(OPTION_RESET_MODE), + ) _TECHMAP_REPLACE_ ( + .BLKSEL(3'b000), + .CLK(PORT_A_CLK), + .CE(PORT_A_CLK_EN), + .WRE(WRE), + .RESET(RST), + .OCE(1'b0), + .AD(AD), + .DI(DI), + .DO(DO), + ); + +end + +endgenerate + +endmodule + + +module $__GOWIN_DP_ (...); + +parameter INIT = 0; +parameter OPTION_RESET_MODE = "SYNC"; + +parameter PORT_A_WIDTH = 18; +parameter PORT_A_WR_BE_WIDTH = 2; +parameter PORT_A_OPTION_WRITE_MODE = 0; + +parameter PORT_B_WIDTH = 18; +parameter PORT_B_WR_BE_WIDTH = 2; +parameter PORT_B_OPTION_WRITE_MODE = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [13:0] PORT_A_ADDR; +input [PORT_A_WR_BE_WIDTH-1:0] PORT_A_WR_BE; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; +input [13:0] PORT_B_ADDR; +input [PORT_A_WR_BE_WIDTH-1:0] PORT_B_WR_BE; +input [PORT_A_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_B_RD_DATA; + +`DEF_FUNCS + +wire RSTA = OPTION_RESET_MODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST; +wire RSTB = OPTION_RESET_MODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST; +wire WREA = `wre(PORT_A_WIDTH, PORT_A_WR_EN, PORT_A_WR_BE); +wire WREB = `wre(PORT_B_WIDTH, PORT_B_WR_EN, PORT_B_WR_BE); +wire [13:0] ADA = `addrbe(PORT_A_WIDTH, PORT_A_ADDR, PORT_A_WR_BE); +wire [13:0] ADB = `addrbe(PORT_B_WIDTH, PORT_B_ADDR, PORT_B_WR_BE); + +generate + +if (PORT_A_WIDTH < 9 || PORT_B_WIDTH < 9) begin + + wire [15:0] DIA = `x8_wr_data(PORT_A_WR_DATA); + wire [15:0] DIB = `x8_wr_data(PORT_B_WR_DATA); + wire [15:0] DOA; + wire [15:0] DOB; + + assign PORT_A_RD_DATA = `x8_rd_data(DOA); + assign PORT_B_RD_DATA = `x8_rd_data(DOB); + + DP #( + `INIT(init_slice_x8) + .READ_MODE0(1'b0), + .READ_MODE1(1'b0), + .WRITE_MODE0(PORT_A_OPTION_WRITE_MODE), + .WRITE_MODE1(PORT_B_OPTION_WRITE_MODE), + .BIT_WIDTH_0(`x8_width(PORT_A_WIDTH)), + .BIT_WIDTH_1(`x8_width(PORT_B_WIDTH)), + .BLK_SEL(3'b000), + .RESET_MODE(OPTION_RESET_MODE), + ) _TECHMAP_REPLACE_ ( + .BLKSEL(3'b000), + + .CLKA(PORT_A_CLK), + .CEA(PORT_A_CLK_EN), + .WREA(WREA), + .RESETA(RSTA), + .OCEA(1'b0), + .ADA(ADA), + .DIA(DIA), + .DOA(DOA), + + .CLKB(PORT_B_CLK), + .CEB(PORT_B_CLK_EN), + .WREB(WREB), + .RESETB(RSTB), + .OCEB(1'b0), + .ADB(ADB), + .DIB(DIB), + .DOB(DOB), + ); + +end else begin + + wire [17:0] DIA = PORT_A_WR_DATA; + wire [17:0] DIB = PORT_B_WR_DATA; + wire [17:0] DOA; + wire [17:0] DOB; + + assign PORT_A_RD_DATA = DOA; + assign PORT_B_RD_DATA = DOB; + + DPX9 #( + `INIT(init_slice_x9) + .READ_MODE0(1'b0), + .READ_MODE1(1'b0), + .WRITE_MODE0(PORT_A_OPTION_WRITE_MODE), + .WRITE_MODE1(PORT_B_OPTION_WRITE_MODE), + .BIT_WIDTH_0(PORT_A_WIDTH), + .BIT_WIDTH_1(PORT_B_WIDTH), + .BLK_SEL(3'b000), + .RESET_MODE(OPTION_RESET_MODE), + ) _TECHMAP_REPLACE_ ( + .BLKSEL(3'b000), + + .CLKA(PORT_A_CLK), + .CEA(PORT_A_CLK_EN), + .WREA(WREA), + .RESETA(RSTA), + .OCEA(1'b0), + .ADA(ADA), + .DIA(DIA), + .DOA(DOA), + + .CLKB(PORT_B_CLK), + .CEB(PORT_B_CLK_EN), + .WREB(WREB), + .RESETB(RSTB), + .OCEB(1'b0), + .ADB(ADB), + .DIB(DIB), + .DOB(DOB), + ); + +end + +endgenerate + +endmodule + + +module $__GOWIN_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_RESET_MODE = "SYNC"; + +parameter PORT_R_WIDTH = 18; + +parameter PORT_W_WIDTH = 18; +parameter PORT_W_WR_BE_WIDTH = 2; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input PORT_R_RD_SRST; +input PORT_R_RD_ARST; +input [13:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input PORT_W_WR_EN; +input [13:0] PORT_W_ADDR; +input [PORT_W_WR_BE_WIDTH-1:0] PORT_W_WR_BE; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +`DEF_FUNCS + +wire RST = OPTION_RESET_MODE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST; +wire WRE = `wre(PORT_W_WIDTH, PORT_W_WR_EN, PORT_W_WR_BE); +wire [13:0] ADW = `addrbe(PORT_W_WIDTH, PORT_W_ADDR, PORT_W_WR_BE); + +generate + +if (PORT_W_WIDTH < 9 || PORT_R_WIDTH < 9) begin + + wire [31:0] DI = `x8_wr_data(PORT_W_WR_DATA); + wire [31:0] DO; + + assign PORT_R_RD_DATA = `x8_rd_data(DO); + + SDP #( + `INIT(init_slice_x8) + .READ_MODE(1'b0), + .BIT_WIDTH_0(`x8_width(PORT_W_WIDTH)), + .BIT_WIDTH_1(`x8_width(PORT_R_WIDTH)), + .BLK_SEL(3'b000), + .RESET_MODE(OPTION_RESET_MODE), + ) _TECHMAP_REPLACE_ ( + .BLKSEL(3'b000), + + .CLKA(PORT_W_CLK), + .CEA(PORT_W_CLK_EN), + .WREA(WRE), + .RESETA(1'b0), + .ADA(ADW), + .DI(DI), + + .CLKB(PORT_R_CLK), + .CEB(PORT_R_CLK_EN), + .WREB(1'b0), + .RESETB(RST), + .OCE(1'b0), + .ADB(PORT_R_ADDR), + .DO(DO), + ); + +end else begin + + wire [35:0] DI = PORT_W_WR_DATA; + wire [35:0] DO; + + assign PORT_R_RD_DATA = DO; + + SDPX9 #( + `INIT(init_slice_x9) + .READ_MODE(1'b0), + .BIT_WIDTH_0(PORT_W_WIDTH), + .BIT_WIDTH_1(PORT_R_WIDTH), + .BLK_SEL(3'b000), + .RESET_MODE(OPTION_RESET_MODE), + ) _TECHMAP_REPLACE_ ( + .BLKSEL(3'b000), + + .CLKA(PORT_W_CLK), + .CEA(PORT_W_CLK_EN), + .WREA(WRE), + .RESETA(1'b0), + .ADA(ADW), + .DI(DI), + + .CLKB(PORT_R_CLK), + .CEB(PORT_R_CLK_EN), + .WREB(1'b0), + .RESETB(RST), + .OCE(1'b0), + .ADB(PORT_R_ADDR), + .DO(DO), + ); + +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/gowin/cells_map.v b/resources/netlist/resources/kernel/share/gowin/cells_map.v new file mode 100644 index 0000000..5978a00 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/cells_map.v @@ -0,0 +1,177 @@ +`default_nettype none +//All DFF* have INIT, but the hardware is always initialised to the reset +//value regardless. The parameter is ignored. + +// DFFN D Flip-Flop with Negative-Edge Clock +module \$_DFF_N_ (input D, C, output Q); + DFFN _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFF D Flip-Flop +module \$_DFF_P_ (input D, C, output Q); + DFF _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFE D Flip-Flop with Clock Enable +module \$_DFFE_PP_ (input D, C, E, output Q); + DFFE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNE D Flip-Flop with Negative-Edge Clock and Clock Enable +module \$_DFFE_NP_ (input D, C, E, output Q); + DFFNE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFR D Flip-Flop with Synchronous Reset +module \$_SDFF_PP0_ (input D, C, R, output Q); + DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNR D Flip-Flop with Negative-Edge Clock and Synchronous Reset +module \$_SDFF_NP0_ (input D, C, R, output Q); + DFFNR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFRE D Flip-Flop with Clock Enable and Synchronous Reset +module \$_SDFFE_PP0P_ (input D, C, R, E, output Q); + DFFRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNRE D Flip-Flop with Negative-Edge Clock,Clock Enable, and Synchronous Reset +module \$_SDFFE_NP0P_ (input D, C, R, E, output Q); + DFFNRE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFS D Flip-Flop with Synchronous Set +module \$_SDFF_PP1_ (input D, C, R, output Q); + DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNS D Flip-Flop with Negative-Edge Clock and Synchronous Set +module \$_SDFF_NP1_ (input D, C, R, output Q); + DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFSE D Flip-Flop with Clock Enable and Synchronous Set +module \$_SDFFE_PP1P_ (input D, C, R, E, output Q); + DFFSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNSE D Flip-Flop with Negative-Edge Clock,Clock Enable,and Synchronous Set +module \$_SDFFE_NP1P_ (input D, C, R, E, output Q); + DFFNSE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .SET(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFP D Flip-Flop with Asynchronous Preset +module \$_DFF_PP1_ (input D, C, R, output Q); + DFFP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNP D Flip-Flop with Negative-Edge Clock and Asynchronous Preset +module \$_DFF_NP1_ (input D, C, R, output Q); + DFFNP _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFC D Flip-Flop with Asynchronous Clear +module \$_DFF_PP0_ (input D, C, R, output Q); + DFFC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNC D Flip-Flop with Negative-Edge Clock and Asynchronous Clear +module \$_DFF_NP0_ (input D, C, R, output Q); + DFFNC _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFPE D Flip-Flop with Clock Enable and Asynchronous Preset +module \$_DFFE_PP1P_ (input D, C, R, E, output Q); + DFFPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNPE D Flip-Flop with Negative-Edge Clock,Clock Enable, and Asynchronous Preset +module \$_DFFE_NP1P_ (input D, C, R, E, output Q); + DFFNPE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .PRESET(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFCE D Flip-Flop with Clock Enable and Asynchronous Clear +module \$_DFFE_PP0P_ (input D, C, R, E, output Q); + DFFCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// DFFNCE D Flip-Flop with Negative-Edge Clock,Clock Enable and Asynchronous Clear +module \$_DFFE_NP0P_ (input D, C, R, E, output Q); + DFFNCE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .CLEAR(R), .CE(E)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + LUT1 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y), + .I0(A[0])); + end else + if (WIDTH == 2) begin + LUT2 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y), + .I0(A[0]), .I1(A[1])); + end else + if (WIDTH == 3) begin + LUT3 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2])); + end else + if (WIDTH == 4) begin + LUT4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.F(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(A[3])); + end else + if (WIDTH == 5) begin + wire f0, f1; + \$lut #(.LUT(LUT[15: 0]), .WIDTH(4)) lut0 (.A(A[3:0]), .Y(f0)); + \$lut #(.LUT(LUT[31:16]), .WIDTH(4)) lut1 (.A(A[3:0]), .Y(f1)); + MUX2_LUT5 mux5(.I0(f0), .I1(f1), .S0(A[4]), .O(Y)); + end else + if (WIDTH == 6) begin + wire f0, f1; + \$lut #(.LUT(LUT[31: 0]), .WIDTH(5)) lut0 (.A(A[4:0]), .Y(f0)); + \$lut #(.LUT(LUT[63:32]), .WIDTH(5)) lut1 (.A(A[4:0]), .Y(f1)); + MUX2_LUT6 mux6(.I0(f0), .I1(f1), .S0(A[5]), .O(Y)); + end else + if (WIDTH == 7) begin + wire f0, f1; + \$lut #(.LUT(LUT[63: 0]), .WIDTH(6)) lut0 (.A(A[5:0]), .Y(f0)); + \$lut #(.LUT(LUT[127:64]), .WIDTH(6)) lut1 (.A(A[5:0]), .Y(f1)); + MUX2_LUT7 mux7(.I0(f0), .I1(f1), .S0(A[6]), .O(Y)); + end else + if (WIDTH == 8) begin + wire f0, f1; + \$lut #(.LUT(LUT[127: 0]), .WIDTH(7)) lut0 (.A(A[6:0]), .Y(f0)); + \$lut #(.LUT(LUT[255:128]), .WIDTH(7)) lut1 (.A(A[6:0]), .Y(f1)); + MUX2_LUT8 mux8(.I0(f0), .I1(f1), .S0(A[7]), .O(Y)); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/gowin/cells_sim.v b/resources/netlist/resources/kernel/share/gowin/cells_sim.v new file mode 100644 index 0000000..736aa07 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/cells_sim.v @@ -0,0 +1,1587 @@ +(* abc9_lut=1 *) +module LUT1(output F, input I0); + parameter [1:0] INIT = 0; + specify + (I0 => F) = (555, 902); + endspecify + assign F = I0 ? INIT[1] : INIT[0]; +endmodule + +(* abc9_lut=1 *) +module LUT2(output F, input I0, I1); + parameter [3:0] INIT = 0; + specify + (I0 => F) = (867, 1184); + (I1 => F) = (555, 902); + endspecify + wire [ 1: 0] s1 = I1 ? INIT[ 3: 2] : INIT[ 1: 0]; + assign F = I0 ? s1[1] : s1[0]; +endmodule + +(* abc9_lut=1 *) +module LUT3(output F, input I0, I1, I2); + parameter [7:0] INIT = 0; + specify + (I0 => F) = (1054, 1486); + (I1 => F) = (867, 1184); + (I2 => F) = (555, 902); + endspecify + wire [ 3: 0] s2 = I2 ? INIT[ 7: 4] : INIT[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign F = I0 ? s1[1] : s1[0]; +endmodule + +(* abc9_lut=1 *) +module LUT4(output F, input I0, I1, I2, I3); + parameter [15:0] INIT = 0; + specify + (I0 => F) = (1054, 1486); + (I1 => F) = (1053, 1583); + (I2 => F) = (867, 1184); + (I3 => F) = (555, 902); + endspecify + wire [ 7: 0] s3 = I3 ? INIT[15: 8] : INIT[ 7: 0]; + wire [ 3: 0] s2 = I2 ? s3[ 7: 4] : s3[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign F = I0 ? s1[1] : s1[0]; +endmodule + +(* abc9_lut=2 *) +module __APICULA_LUT5(output F, input I0, I1, I2, I3, M0); + specify + (I0 => F) = (1187, 1638); + (I1 => F) = (1184, 1638); + (I2 => F) = (995, 1371); + (I3 => F) = (808, 1116); + (M0 => F) = (486, 680); + endspecify +endmodule + +(* abc9_lut=4 *) +module __APICULA_LUT6(output F, input I0, I1, I2, I3, M0, M1); + specify + (I0 => F) = (1187 + 136, 1638 + 255); + (I1 => F) = (1184 + 136, 1638 + 255); + (I2 => F) = (995 + 136, 1371 + 255); + (I3 => F) = (808 + 136, 1116 + 255); + (M0 => F) = (486 + 136, 680 + 255); + (M1 => F) = (478, 723); + endspecify +endmodule + +(* abc9_lut=8 *) +module __APICULA_LUT7(output F, input I0, I1, I2, I3, M0, M1, M2); + specify + (I0 => F) = (1187 + 136 + 136, 1638 + 255 + 255); + (I1 => F) = (1184 + 136 + 136, 1638 + 255 + 255); + (I2 => F) = (995 + 136 + 136, 1371 + 255 + 255); + (I3 => F) = (808 + 136 + 136, 1116 + 255 + 255); + (M0 => F) = (486 + 136 + 136, 680 + 255 + 255); + (M1 => F) = (478 + 136, 723 + 255); + (M2 => F) = (478, 723); + endspecify +endmodule + +(* abc9_lut=16 *) +module __APICULA_LUT8(output F, input I0, I1, I2, I3, M0, M1, M2, M3); + specify + (I0 => F) = (1187 + 136 + 136 + 136, 1638 + 255 + 255 + 255); + (I1 => F) = (1184 + 136 + 136 + 136, 1638 + 255 + 255 + 255); + (I2 => F) = (995 + 136 + 136 + 136, 1371 + 255 + 255 + 255); + (I3 => F) = (808 + 136 + 136 + 136, 1116 + 255 + 255 + 255); + (M0 => F) = (486 + 136 + 136 + 136, 680 + 255 + 255 + 255); + (M1 => F) = (478 + 136 + 136, 723 + 255 + 255); + (M2 => F) = (478 + 136, 723 + 255); + (M3 => F) = (478, 723); + endspecify + endmodule + +module MUX2 (O, I0, I1, S0); + input I0,I1; + input S0; + output O; + + specify + (I0 => O) = (141, 160); + (I1 => O) = (141, 160); + (S0 => O) = (486, 680); + endspecify + + assign O = S0 ? I1 : I0; +endmodule + +module MUX2_LUT5 (O, I0, I1, S0); + input I0,I1; + input S0; + output O; + + specify + (I0 => O) = (141, 160); + (I1 => O) = (141, 160); + (S0 => O) = (486, 680); + endspecify + + MUX2 mux2_lut5 (O, I0, I1, S0); +endmodule + +module MUX2_LUT6 (O, I0, I1, S0); + input I0,I1; + input S0; + output O; + + specify + (I0 => O) = (136, 255); + (I1 => O) = (136, 255); + (S0 => O) = (478, 723); + endspecify + + MUX2 mux2_lut6 (O, I0, I1, S0); +endmodule + +module MUX2_LUT7 (O, I0, I1, S0); + input I0,I1; + input S0; + output O; + + specify + (I0 => O) = (136, 255); + (I1 => O) = (136, 255); + (S0 => O) = (478, 723); + endspecify + + MUX2 mux2_lut7 (O, I0, I1, S0); +endmodule + +module MUX2_LUT8 (O, I0, I1, S0); + input I0,I1; + input S0; + output O; + + specify + (I0 => O) = (136, 255); + (I1 => O) = (136, 255); + (S0 => O) = (478, 723); + endspecify + + MUX2 mux2_lut8 (O, I0, I1, S0); +endmodule + +(* abc9_flop, lib_whitebox *) +module DFF (output reg Q, input CLK, D); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + (posedge CLK => (Q : D)) = (480, 660); + $setup(D, posedge CLK, 576); + endspecify + + always @(posedge CLK) + Q <= D; +endmodule + +(* abc9_flop, lib_whitebox *) +module DFFE (output reg Q, input D, CLK, CE); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + if (CE) (posedge CLK => (Q : D)) = (480, 660); + $setup(D, posedge CLK &&& CE, 576); + $setup(CE, posedge CLK, 63); + endspecify + + always @(posedge CLK) begin + if (CE) + Q <= D; + end +endmodule // DFFE (positive clock edge; clock enable) + +(* abc9_box, lib_whitebox *) +module DFFS (output reg Q, input D, CLK, SET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + (posedge CLK => (Q : D)) = (480, 660); + $setup(D, posedge CLK, 576); + $setup(SET, posedge CLK, 63); + endspecify + + always @(posedge CLK) begin + if (SET) + Q <= 1'b1; + else + Q <= D; + end +endmodule // DFFS (positive clock edge; synchronous set) + +(* abc9_box, lib_whitebox *) +module DFFSE (output reg Q, input D, CLK, CE, SET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + if (CE) (posedge CLK => (Q : D)) = (480, 660); + $setup(D, posedge CLK &&& CE, 576); + $setup(CE, posedge CLK, 63); + $setup(SET, posedge CLK, 63); + endspecify + + always @(posedge CLK) begin + if (SET) + Q <= 1'b1; + else if (CE) + Q <= D; +end +endmodule // DFFSE (positive clock edge; synchronous set takes precedence over clock enable) + +(* abc9_flop, lib_whitebox *) +module DFFR (output reg Q, input D, CLK, RESET); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + (posedge CLK => (Q : D)) = (480, 660); + $setup(D, posedge CLK, 576); + $setup(RESET, posedge CLK, 63); + endspecify + + always @(posedge CLK) begin + if (RESET) + Q <= 1'b0; + else + Q <= D; + end +endmodule // DFFR (positive clock edge; synchronous reset) + +(* abc9_flop, lib_whitebox *) +module DFFRE (output reg Q, input D, CLK, CE, RESET); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + if (CE) (posedge CLK => (Q : D)) = (480, 660); + $setup(D, posedge CLK &&& CE, 576); + $setup(CE, posedge CLK, 63); + $setup(RESET, posedge CLK, 63); + endspecify + + always @(posedge CLK) begin + if (RESET) + Q <= 1'b0; + else if (CE) + Q <= D; + end +endmodule // DFFRE (positive clock edge; synchronous reset takes precedence over clock enable) + +(* abc9_box, lib_whitebox *) +module DFFP (output reg Q, input D, CLK, PRESET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + (posedge CLK => (Q : D)) = (480, 660); + (posedge PRESET => (Q : 1'b1)) = (1800, 2679); + $setup(D, posedge CLK, 576); + endspecify + + always @(posedge CLK or posedge PRESET) begin + if(PRESET) + Q <= 1'b1; + else + Q <= D; + end +endmodule // DFFP (positive clock edge; asynchronous preset) + +(* abc9_box, lib_whitebox *) +module DFFPE (output reg Q, input D, CLK, CE, PRESET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + if (CE) (posedge CLK => (Q : D)) = (480, 660); + (posedge PRESET => (Q : 1'b1)) = (1800, 2679); + $setup(D, posedge CLK &&& CE, 576); + $setup(CE, posedge CLK, 63); + endspecify + + always @(posedge CLK or posedge PRESET) begin + if(PRESET) + Q <= 1'b1; + else if (CE) + Q <= D; + end +endmodule // DFFPE (positive clock edge; asynchronous preset; clock enable) + +(* abc9_box, lib_whitebox *) +module DFFC (output reg Q, input D, CLK, CLEAR); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + (posedge CLK => (Q : D)) = (480, 660); + (posedge CLEAR => (Q : 1'b0)) = (1800, 2679); + $setup(D, posedge CLK, 576); + endspecify + + always @(posedge CLK or posedge CLEAR) begin + if(CLEAR) + Q <= 1'b0; + else + Q <= D; + end +endmodule // DFFC (positive clock edge; asynchronous clear) + +(* abc9_box, lib_whitebox *) +module DFFCE (output reg Q, input D, CLK, CE, CLEAR); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + if (CE) (posedge CLK => (Q : D)) = (480, 660); + (posedge CLEAR => (Q : 1'b0)) = (1800, 2679); + $setup(D, posedge CLK &&& CE, 576); + $setup(CE, posedge CLK, 63); + endspecify + + always @(posedge CLK or posedge CLEAR) begin + if(CLEAR) + Q <= 1'b0; + else if (CE) + Q <= D; + end +endmodule // DFFCE (positive clock edge; asynchronous clear; clock enable) + +(* abc9_flop, lib_whitebox *) +module DFFN (output reg Q, input CLK, D); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + (negedge CLK => (Q : D)) = (480, 660); + $setup(D, negedge CLK, 576); + endspecify + + always @(negedge CLK) + Q <= D; +endmodule + +(* abc9_flop, lib_whitebox *) +module DFFNE (output reg Q, input D, CLK, CE); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + if (CE) (negedge CLK => (Q : D)) = (480, 660); + $setup(D, negedge CLK &&& CE, 576); + $setup(CE, negedge CLK, 63); + endspecify + + always @(negedge CLK) begin + if (CE) + Q <= D; + end +endmodule // DFFNE (negative clock edge; clock enable) + +(* abc9_box, lib_whitebox *) +module DFFNS (output reg Q, input D, CLK, SET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + (negedge CLK => (Q : D)) = (480, 660); + $setup(D, negedge CLK, 576); + $setup(SET, negedge CLK, 63); + endspecify + + always @(negedge CLK) begin + if (SET) + Q <= 1'b1; + else + Q <= D; + end +endmodule // DFFNS (negative clock edge; synchronous set) + +(* abc9_box, lib_whitebox *) +module DFFNSE (output reg Q, input D, CLK, CE, SET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + if (CE) (negedge CLK => (Q : D)) = (480, 660); + $setup(D, negedge CLK &&& CE, 576); + $setup(CE, negedge CLK, 63); + $setup(SET, negedge CLK, 63); + endspecify + + always @(negedge CLK) begin + if (SET) + Q <= 1'b1; + else if (CE) + Q <= D; +end +endmodule // DFFNSE (negative clock edge; synchronous set takes precedence over clock enable) + +(* abc9_flop, lib_whitebox *) +module DFFNR (output reg Q, input D, CLK, RESET); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + (negedge CLK => (Q : D)) = (480, 660); + $setup(D, negedge CLK, 576); + $setup(RESET, negedge CLK, 63); + endspecify + + always @(negedge CLK) begin + if (RESET) + Q <= 1'b0; + else + Q <= D; + end +endmodule // DFFNR (negative clock edge; synchronous reset) + +(* abc9_flop, lib_whitebox *) +module DFFNRE (output reg Q, input D, CLK, CE, RESET); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + if (CE) (negedge CLK => (Q : D)) = (480, 660); + $setup(D, negedge CLK &&& CE, 576); + $setup(CE, negedge CLK, 63); + $setup(RESET, negedge CLK, 63); + endspecify + + always @(negedge CLK) begin + if (RESET) + Q <= 1'b0; + else if (CE) + Q <= D; + end +endmodule // DFFNRE (negative clock edge; synchronous reset takes precedence over clock enable) + +(* abc9_box, lib_whitebox *) +module DFFNP (output reg Q, input D, CLK, PRESET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + (negedge CLK => (Q : D)) = (480, 660); + (posedge PRESET => (Q : 1'b1)) = (1800, 2679); + $setup(D, negedge CLK, 576); + endspecify + + always @(negedge CLK or posedge PRESET) begin + if(PRESET) + Q <= 1'b1; + else + Q <= D; + end +endmodule // DFFNP (negative clock edge; asynchronous preset) + +(* abc9_box, lib_whitebox *) +module DFFNPE (output reg Q, input D, CLK, CE, PRESET); + parameter [0:0] INIT = 1'b1; + initial Q = INIT; + + specify + if (CE) (negedge CLK => (Q : D)) = (480, 660); + (posedge PRESET => (Q : 1'b1)) = (1800, 2679); + $setup(D, negedge CLK &&& CE, 576); + $setup(CE, negedge CLK, 63); + endspecify + + always @(negedge CLK or posedge PRESET) begin + if(PRESET) + Q <= 1'b1; + else if (CE) + Q <= D; + end +endmodule // DFFNPE (negative clock edge; asynchronous preset; clock enable) + +(* abc9_box, lib_whitebox *) +module DFFNC (output reg Q, input D, CLK, CLEAR); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + (negedge CLK => (Q : D)) = (480, 660); + (posedge CLEAR => (Q : 1'b0)) = (1800, 2679); + $setup(D, negedge CLK, 576); + endspecify + + always @(negedge CLK or posedge CLEAR) begin + if(CLEAR) + Q <= 1'b0; + else + Q <= D; + end +endmodule // DFFNC (negative clock edge; asynchronous clear) + +(* abc9_box, lib_whitebox *) +module DFFNCE (output reg Q, input D, CLK, CE, CLEAR); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + specify + if (CE) (negedge CLK => (Q : D)) = (480, 660); + (posedge CLEAR => (Q : 1'b0)) = (1800, 2679); + $setup(D, negedge CLK &&& CE, 576); + $setup(CE, negedge CLK, 63); + endspecify + + always @(negedge CLK or posedge CLEAR) begin + if(CLEAR) + Q <= 1'b0; + else if (CE) + Q <= D; + end +endmodule // DFFNCE (negative clock edge; asynchronous clear; clock enable) + +// TODO add more DFF sim cells + +module VCC(output V); + assign V = 1; +endmodule + +module GND(output G); + assign G = 0; +endmodule + +module IBUF(output O, input I); + + specify + (I => O) = 0; + endspecify + + assign O = I; +endmodule + +module OBUF(output O, input I); + + specify + (I => O) = 0; + endspecify + + assign O = I; +endmodule + +module TBUF (O, I, OEN); + input I, OEN; + output O; + assign O = OEN ? 1'bz : I; +endmodule + +module IOBUF (O, IO, I, OEN); + input I,OEN; + output O; + inout IO; + assign IO = OEN ? 1'bz : I; + assign I = IO; +endmodule + +module TLVDS_OBUF (I, O, OB); + input I; + output O; + output OB; + assign O = I; + assign OB = ~I; +endmodule + +(* blackbox *) +module ODDR(D0, D1, TX, CLK, Q0, Q1); + input D0; + input D1; + input TX; + input CLK; + output Q0; + output Q1; + parameter TXCLK_POL = 0; + parameter INIT = 0; +endmodule + +(* blackbox *) +module ODDRC(D0, D1, CLEAR, TX, CLK, Q0, Q1); + input D0; + input D1; + input CLEAR; + input TX; + input CLK; + output Q0; + output Q1; + parameter TXCLK_POL = 0; + parameter INIT = 0; +endmodule + +module GSR (input GSRI); + wire GSRO = GSRI; +endmodule + +(* abc9_box, lib_whitebox *) +module ALU (SUM, COUT, I0, I1, I3, CIN); + +input I0; +input I1; +input I3; +(* abc9_carry *) input CIN; +output SUM; +(* abc9_carry *) output COUT; + +localparam ADD = 0; +localparam SUB = 1; +localparam ADDSUB = 2; +localparam NE = 3; +localparam GE = 4; +localparam LE = 5; +localparam CUP = 6; +localparam CDN = 7; +localparam CUPCDN = 8; +localparam MULT = 9; + +parameter ALU_MODE = 0; + +reg S, C; + +specify + (I0 => SUM) = (1043, 1432); + (I1 => SUM) = (775, 1049); + (I3 => SUM) = (751, 1010); + (CIN => SUM) = (694, 811); + (I0 => COUT) = (1010, 1380); + (I1 => COUT) = (1021, 1505); + (I3 => COUT) = (483, 792); + (CIN => COUT) = (49, 82); +endspecify + +assign SUM = S ^ CIN; +assign COUT = S? CIN : C; + +always @* begin + case (ALU_MODE) + ADD: begin + S = I0 ^ I1; + C = I0; + end + SUB: begin + S = I0 ^ ~I1; + C = I0; + end + ADDSUB: begin + S = I3? I0 ^ I1 : I0 ^ ~I1; + C = I0; + end + NE: begin + S = I0 ^ ~I1; + C = 1'b1; + end + GE: begin + S = I0 ^ ~I1; + C = I0; + end + LE: begin + S = ~I0 ^ I1; + C = I1; + end + CUP: begin + S = I0; + C = 1'b0; + end + CDN: begin + S = ~I0; + C = 1'b1; + end + CUPCDN: begin + S = I3? I0 : ~I0; + C = I0; + end + MULT: begin + S = I0 & I1; + C = I0 & I1; + end + endcase +end + +endmodule + + +module RAM16S1 (DO, DI, AD, WRE, CLK); + +parameter INIT_0 = 16'h0000; + +input [3:0] AD; +input DI; +output DO; +input CLK; +input WRE; + +specify + (AD *> DO) = (270, 405); + $setup(DI, posedge CLK, 62); + $setup(WRE, posedge CLK, 62); + $setup(AD, posedge CLK, 62); + (posedge CLK => (DO : 1'bx)) = (474, 565); +endspecify + +reg [15:0] mem; + +initial begin + mem = INIT_0; +end + +assign DO = mem[AD]; + +always @(posedge CLK) begin + if (WRE) begin + mem[AD] <= DI; + end +end + +endmodule + + +module RAM16S2 (DO, DI, AD, WRE, CLK); + +parameter INIT_0 = 16'h0000; +parameter INIT_1 = 16'h0000; + +input [3:0] AD; +input [1:0] DI; +output [1:0] DO; +input CLK; +input WRE; + +specify + (AD *> DO) = (270, 405); + $setup(DI, posedge CLK, 62); + $setup(WRE, posedge CLK, 62); + $setup(AD, posedge CLK, 62); + (posedge CLK => (DO : 2'bx)) = (474, 565); +endspecify + +reg [15:0] mem0, mem1; + +initial begin + mem0 = INIT_0; + mem1 = INIT_1; +end + +assign DO[0] = mem0[AD]; +assign DO[1] = mem1[AD]; + +always @(posedge CLK) begin + if (WRE) begin + mem0[AD] <= DI[0]; + mem1[AD] <= DI[1]; + end +end + +endmodule + + +module RAM16S4 (DO, DI, AD, WRE, CLK); + +parameter INIT_0 = 16'h0000; +parameter INIT_1 = 16'h0000; +parameter INIT_2 = 16'h0000; +parameter INIT_3 = 16'h0000; + +input [3:0] AD; +input [3:0] DI; +output [3:0] DO; +input CLK; +input WRE; + +specify + (AD *> DO) = (270, 405); + $setup(DI, posedge CLK, 62); + $setup(WRE, posedge CLK, 62); + $setup(AD, posedge CLK, 62); + (posedge CLK => (DO : 4'bx)) = (474, 565); +endspecify + +reg [15:0] mem0, mem1, mem2, mem3; + +initial begin + mem0 = INIT_0; + mem1 = INIT_1; + mem2 = INIT_2; + mem3 = INIT_3; +end + +assign DO[0] = mem0[AD]; +assign DO[1] = mem1[AD]; +assign DO[2] = mem2[AD]; +assign DO[3] = mem3[AD]; + +always @(posedge CLK) begin + if (WRE) begin + mem0[AD] <= DI[0]; + mem1[AD] <= DI[1]; + mem2[AD] <= DI[2]; + mem3[AD] <= DI[3]; + end +end + +endmodule + + +module RAM16SDP1 (DO, DI, WAD, RAD, WRE, CLK); + +parameter INIT_0 = 16'h0000; + +input [3:0] WAD; +input [3:0] RAD; +input DI; +output DO; +input CLK; +input WRE; + +specify + (RAD *> DO) = (270, 405); + $setup(DI, posedge CLK, 62); + $setup(WRE, posedge CLK, 62); + $setup(WAD, posedge CLK, 62); + (posedge CLK => (DO : 1'bx)) = (474, 565); +endspecify + +reg [15:0] mem; + +initial begin + mem = INIT_0; +end + +assign DO = mem[RAD]; + +always @(posedge CLK) begin + if (WRE) begin + mem[WAD] <= DI; + end +end + +endmodule + + +module RAM16SDP2 (DO, DI, WAD, RAD, WRE, CLK); + +parameter INIT_0 = 16'h0000; +parameter INIT_1 = 16'h0000; + +input [3:0] WAD; +input [3:0] RAD; +input [1:0] DI; +output [1:0] DO; +input CLK; +input WRE; + +specify + (RAD *> DO) = (270, 405); + $setup(DI, posedge CLK, 62); + $setup(WRE, posedge CLK, 62); + $setup(WAD, posedge CLK, 62); + (posedge CLK => (DO : 2'bx)) = (474, 565); +endspecify + +reg [15:0] mem0, mem1; + +initial begin + mem0 = INIT_0; + mem1 = INIT_1; +end + +assign DO[0] = mem0[RAD]; +assign DO[1] = mem1[RAD]; + +always @(posedge CLK) begin + if (WRE) begin + mem0[WAD] <= DI[0]; + mem1[WAD] <= DI[1]; + end +end + +endmodule + + +module RAM16SDP4 (DO, DI, WAD, RAD, WRE, CLK); + +parameter INIT_0 = 16'h0000; +parameter INIT_1 = 16'h0000; +parameter INIT_2 = 16'h0000; +parameter INIT_3 = 16'h0000; + +input [3:0] WAD; +input [3:0] RAD; +input [3:0] DI; +output [3:0] DO; +input CLK; +input WRE; + +specify + (RAD *> DO) = (270, 405); + $setup(DI, posedge CLK, 62); + $setup(WRE, posedge CLK, 62); + $setup(WAD, posedge CLK, 62); + (posedge CLK => (DO : 4'bx)) = (474, 565); +endspecify + +reg [15:0] mem0, mem1, mem2, mem3; + +initial begin + mem0 = INIT_0; + mem1 = INIT_1; + mem2 = INIT_2; + mem3 = INIT_3; +end + +assign DO[0] = mem0[RAD]; +assign DO[1] = mem1[RAD]; +assign DO[2] = mem2[RAD]; +assign DO[3] = mem3[RAD]; + +always @(posedge CLK) begin + if (WRE) begin + mem0[WAD] <= DI[0]; + mem1[WAD] <= DI[1]; + mem2[WAD] <= DI[2]; + mem3[WAD] <= DI[3]; + end +end + +endmodule + + +(* blackbox *) +module SP (DO, DI, BLKSEL, AD, WRE, CLK, CE, OCE, RESET); + +// 1 Enables output pipeline registers. +parameter READ_MODE = 1'b0; +// 0: no read on write, 1: transparent, 2: read-before-write +parameter WRITE_MODE = 2'b00; +parameter BIT_WIDTH = 32; // 1, 2, 4, 8, 16, 32 +parameter BLK_SEL = 3'b000; +parameter RESET_MODE = "SYNC"; +parameter INIT_RAM_00 = 256'h0; +parameter INIT_RAM_01 = 256'h0; +parameter INIT_RAM_02 = 256'h0; +parameter INIT_RAM_03 = 256'h0; +parameter INIT_RAM_04 = 256'h0; +parameter INIT_RAM_05 = 256'h0; +parameter INIT_RAM_06 = 256'h0; +parameter INIT_RAM_07 = 256'h0; +parameter INIT_RAM_08 = 256'h0; +parameter INIT_RAM_09 = 256'h0; +parameter INIT_RAM_0A = 256'h0; +parameter INIT_RAM_0B = 256'h0; +parameter INIT_RAM_0C = 256'h0; +parameter INIT_RAM_0D = 256'h0; +parameter INIT_RAM_0E = 256'h0; +parameter INIT_RAM_0F = 256'h0; +parameter INIT_RAM_10 = 256'h0; +parameter INIT_RAM_11 = 256'h0; +parameter INIT_RAM_12 = 256'h0; +parameter INIT_RAM_13 = 256'h0; +parameter INIT_RAM_14 = 256'h0; +parameter INIT_RAM_15 = 256'h0; +parameter INIT_RAM_16 = 256'h0; +parameter INIT_RAM_17 = 256'h0; +parameter INIT_RAM_18 = 256'h0; +parameter INIT_RAM_19 = 256'h0; +parameter INIT_RAM_1A = 256'h0; +parameter INIT_RAM_1B = 256'h0; +parameter INIT_RAM_1C = 256'h0; +parameter INIT_RAM_1D = 256'h0; +parameter INIT_RAM_1E = 256'h0; +parameter INIT_RAM_1F = 256'h0; +parameter INIT_RAM_20 = 256'h0; +parameter INIT_RAM_21 = 256'h0; +parameter INIT_RAM_22 = 256'h0; +parameter INIT_RAM_23 = 256'h0; +parameter INIT_RAM_24 = 256'h0; +parameter INIT_RAM_25 = 256'h0; +parameter INIT_RAM_26 = 256'h0; +parameter INIT_RAM_27 = 256'h0; +parameter INIT_RAM_28 = 256'h0; +parameter INIT_RAM_29 = 256'h0; +parameter INIT_RAM_2A = 256'h0; +parameter INIT_RAM_2B = 256'h0; +parameter INIT_RAM_2C = 256'h0; +parameter INIT_RAM_2D = 256'h0; +parameter INIT_RAM_2E = 256'h0; +parameter INIT_RAM_2F = 256'h0; +parameter INIT_RAM_30 = 256'h0; +parameter INIT_RAM_31 = 256'h0; +parameter INIT_RAM_32 = 256'h0; +parameter INIT_RAM_33 = 256'h0; +parameter INIT_RAM_34 = 256'h0; +parameter INIT_RAM_35 = 256'h0; +parameter INIT_RAM_36 = 256'h0; +parameter INIT_RAM_37 = 256'h0; +parameter INIT_RAM_38 = 256'h0; +parameter INIT_RAM_39 = 256'h0; +parameter INIT_RAM_3A = 256'h0; +parameter INIT_RAM_3B = 256'h0; +parameter INIT_RAM_3C = 256'h0; +parameter INIT_RAM_3D = 256'h0; +parameter INIT_RAM_3E = 256'h0; +parameter INIT_RAM_3F = 256'h0; + +output [31:0] DO; +input [31:0] DI; +input [2:0] BLKSEL; +input [13:0] AD; +input WRE; +input CLK; +input CE; +input OCE; +input RESET; + +endmodule + +(* blackbox *) +module SPX9 (DO, DI, BLKSEL, AD, WRE, CLK, CE, OCE, RESET); + +// 1 Enables output pipeline registers. +parameter READ_MODE = 1'b0; +// 0: no read on write, 1: transparent, 2: read-before-write +parameter WRITE_MODE = 2'b00; +parameter BIT_WIDTH = 36; // 9, 18, 36 +parameter BLK_SEL = 3'b000; +parameter RESET_MODE = "SYNC"; +parameter INIT_RAM_00 = 288'h0; +parameter INIT_RAM_01 = 288'h0; +parameter INIT_RAM_02 = 288'h0; +parameter INIT_RAM_03 = 288'h0; +parameter INIT_RAM_04 = 288'h0; +parameter INIT_RAM_05 = 288'h0; +parameter INIT_RAM_06 = 288'h0; +parameter INIT_RAM_07 = 288'h0; +parameter INIT_RAM_08 = 288'h0; +parameter INIT_RAM_09 = 288'h0; +parameter INIT_RAM_0A = 288'h0; +parameter INIT_RAM_0B = 288'h0; +parameter INIT_RAM_0C = 288'h0; +parameter INIT_RAM_0D = 288'h0; +parameter INIT_RAM_0E = 288'h0; +parameter INIT_RAM_0F = 288'h0; +parameter INIT_RAM_10 = 288'h0; +parameter INIT_RAM_11 = 288'h0; +parameter INIT_RAM_12 = 288'h0; +parameter INIT_RAM_13 = 288'h0; +parameter INIT_RAM_14 = 288'h0; +parameter INIT_RAM_15 = 288'h0; +parameter INIT_RAM_16 = 288'h0; +parameter INIT_RAM_17 = 288'h0; +parameter INIT_RAM_18 = 288'h0; +parameter INIT_RAM_19 = 288'h0; +parameter INIT_RAM_1A = 288'h0; +parameter INIT_RAM_1B = 288'h0; +parameter INIT_RAM_1C = 288'h0; +parameter INIT_RAM_1D = 288'h0; +parameter INIT_RAM_1E = 288'h0; +parameter INIT_RAM_1F = 288'h0; +parameter INIT_RAM_20 = 288'h0; +parameter INIT_RAM_21 = 288'h0; +parameter INIT_RAM_22 = 288'h0; +parameter INIT_RAM_23 = 288'h0; +parameter INIT_RAM_24 = 288'h0; +parameter INIT_RAM_25 = 288'h0; +parameter INIT_RAM_26 = 288'h0; +parameter INIT_RAM_27 = 288'h0; +parameter INIT_RAM_28 = 288'h0; +parameter INIT_RAM_29 = 288'h0; +parameter INIT_RAM_2A = 288'h0; +parameter INIT_RAM_2B = 288'h0; +parameter INIT_RAM_2C = 288'h0; +parameter INIT_RAM_2D = 288'h0; +parameter INIT_RAM_2E = 288'h0; +parameter INIT_RAM_2F = 288'h0; +parameter INIT_RAM_30 = 288'h0; +parameter INIT_RAM_31 = 288'h0; +parameter INIT_RAM_32 = 288'h0; +parameter INIT_RAM_33 = 288'h0; +parameter INIT_RAM_34 = 288'h0; +parameter INIT_RAM_35 = 288'h0; +parameter INIT_RAM_36 = 288'h0; +parameter INIT_RAM_37 = 288'h0; +parameter INIT_RAM_38 = 288'h0; +parameter INIT_RAM_39 = 288'h0; +parameter INIT_RAM_3A = 288'h0; +parameter INIT_RAM_3B = 288'h0; +parameter INIT_RAM_3C = 288'h0; +parameter INIT_RAM_3D = 288'h0; +parameter INIT_RAM_3E = 288'h0; +parameter INIT_RAM_3F = 288'h0; + +output [35:0] DO; +input [35:0] DI; +input [2:0] BLKSEL; +input [13:0] AD; +input WRE; +input CLK; +input CE; +input OCE; +input RESET; + +endmodule + + +(* blackbox *) +module SDP (DO, DI, BLKSEL, ADA, ADB, WREA, WREB, CLKA, CLKB, CEA, CEB, OCE, RESETA, RESETB); + +parameter READ_MODE = 1'b0; +parameter BIT_WIDTH_0 = 32; // 1, 2, 4, 8, 16, 32 +parameter BIT_WIDTH_1 = 32; // 1, 2, 4, 8, 16, 32 +parameter BLK_SEL = 3'b000; +parameter RESET_MODE = "SYNC"; +parameter INIT_RAM_00 = 256'h0; +parameter INIT_RAM_01 = 256'h0; +parameter INIT_RAM_02 = 256'h0; +parameter INIT_RAM_03 = 256'h0; +parameter INIT_RAM_04 = 256'h0; +parameter INIT_RAM_05 = 256'h0; +parameter INIT_RAM_06 = 256'h0; +parameter INIT_RAM_07 = 256'h0; +parameter INIT_RAM_08 = 256'h0; +parameter INIT_RAM_09 = 256'h0; +parameter INIT_RAM_0A = 256'h0; +parameter INIT_RAM_0B = 256'h0; +parameter INIT_RAM_0C = 256'h0; +parameter INIT_RAM_0D = 256'h0; +parameter INIT_RAM_0E = 256'h0; +parameter INIT_RAM_0F = 256'h0; +parameter INIT_RAM_10 = 256'h0; +parameter INIT_RAM_11 = 256'h0; +parameter INIT_RAM_12 = 256'h0; +parameter INIT_RAM_13 = 256'h0; +parameter INIT_RAM_14 = 256'h0; +parameter INIT_RAM_15 = 256'h0; +parameter INIT_RAM_16 = 256'h0; +parameter INIT_RAM_17 = 256'h0; +parameter INIT_RAM_18 = 256'h0; +parameter INIT_RAM_19 = 256'h0; +parameter INIT_RAM_1A = 256'h0; +parameter INIT_RAM_1B = 256'h0; +parameter INIT_RAM_1C = 256'h0; +parameter INIT_RAM_1D = 256'h0; +parameter INIT_RAM_1E = 256'h0; +parameter INIT_RAM_1F = 256'h0; +parameter INIT_RAM_20 = 256'h0; +parameter INIT_RAM_21 = 256'h0; +parameter INIT_RAM_22 = 256'h0; +parameter INIT_RAM_23 = 256'h0; +parameter INIT_RAM_24 = 256'h0; +parameter INIT_RAM_25 = 256'h0; +parameter INIT_RAM_26 = 256'h0; +parameter INIT_RAM_27 = 256'h0; +parameter INIT_RAM_28 = 256'h0; +parameter INIT_RAM_29 = 256'h0; +parameter INIT_RAM_2A = 256'h0; +parameter INIT_RAM_2B = 256'h0; +parameter INIT_RAM_2C = 256'h0; +parameter INIT_RAM_2D = 256'h0; +parameter INIT_RAM_2E = 256'h0; +parameter INIT_RAM_2F = 256'h0; +parameter INIT_RAM_30 = 256'h0; +parameter INIT_RAM_31 = 256'h0; +parameter INIT_RAM_32 = 256'h0; +parameter INIT_RAM_33 = 256'h0; +parameter INIT_RAM_34 = 256'h0; +parameter INIT_RAM_35 = 256'h0; +parameter INIT_RAM_36 = 256'h0; +parameter INIT_RAM_37 = 256'h0; +parameter INIT_RAM_38 = 256'h0; +parameter INIT_RAM_39 = 256'h0; +parameter INIT_RAM_3A = 256'h0; +parameter INIT_RAM_3B = 256'h0; +parameter INIT_RAM_3C = 256'h0; +parameter INIT_RAM_3D = 256'h0; +parameter INIT_RAM_3E = 256'h0; +parameter INIT_RAM_3F = 256'h0; + +output [31:0] DO; +input [31:0] DI; +input [2:0] BLKSEL; +input [13:0] ADA, ADB; +input WREA, WREB; +input CLKA, CLKB; +input CEA, CEB; +input OCE; +input RESETA, RESETB; + +specify + (posedge CLKB => (DO : DI)) = (419, 493); + $setup(RESETA, posedge CLKA, 62); + $setup(RESETB, posedge CLKB, 62); + $setup(OCE, posedge CLKB, 62); + $setup(CEA, posedge CLKA, 62); + $setup(CEB, posedge CLKB, 62); + $setup(OCE, posedge CLKB, 62); + $setup(WREA, posedge CLKA, 62); + $setup(WREB, posedge CLKB, 62); + $setup(DI, posedge CLKA, 62); + $setup(ADA, posedge CLKA, 62); + $setup(ADB, posedge CLKB, 62); + $setup(BLKSEL, posedge CLKA, 62); +endspecify + +endmodule + +(* blackbox *) +module SDPX9 (DO, DI, BLKSEL, ADA, ADB, WREA, WREB, CLKA, CLKB, CEA, CEB, OCE, RESETA, RESETB); + +parameter READ_MODE = 1'b0; +parameter BIT_WIDTH_0 = 36; // 9, 18, 36 +parameter BIT_WIDTH_1 = 36; // 9, 18, 36 +parameter BLK_SEL = 3'b000; +parameter RESET_MODE = "SYNC"; +parameter INIT_RAM_00 = 288'h0; +parameter INIT_RAM_01 = 288'h0; +parameter INIT_RAM_02 = 288'h0; +parameter INIT_RAM_03 = 288'h0; +parameter INIT_RAM_04 = 288'h0; +parameter INIT_RAM_05 = 288'h0; +parameter INIT_RAM_06 = 288'h0; +parameter INIT_RAM_07 = 288'h0; +parameter INIT_RAM_08 = 288'h0; +parameter INIT_RAM_09 = 288'h0; +parameter INIT_RAM_0A = 288'h0; +parameter INIT_RAM_0B = 288'h0; +parameter INIT_RAM_0C = 288'h0; +parameter INIT_RAM_0D = 288'h0; +parameter INIT_RAM_0E = 288'h0; +parameter INIT_RAM_0F = 288'h0; +parameter INIT_RAM_10 = 288'h0; +parameter INIT_RAM_11 = 288'h0; +parameter INIT_RAM_12 = 288'h0; +parameter INIT_RAM_13 = 288'h0; +parameter INIT_RAM_14 = 288'h0; +parameter INIT_RAM_15 = 288'h0; +parameter INIT_RAM_16 = 288'h0; +parameter INIT_RAM_17 = 288'h0; +parameter INIT_RAM_18 = 288'h0; +parameter INIT_RAM_19 = 288'h0; +parameter INIT_RAM_1A = 288'h0; +parameter INIT_RAM_1B = 288'h0; +parameter INIT_RAM_1C = 288'h0; +parameter INIT_RAM_1D = 288'h0; +parameter INIT_RAM_1E = 288'h0; +parameter INIT_RAM_1F = 288'h0; +parameter INIT_RAM_20 = 288'h0; +parameter INIT_RAM_21 = 288'h0; +parameter INIT_RAM_22 = 288'h0; +parameter INIT_RAM_23 = 288'h0; +parameter INIT_RAM_24 = 288'h0; +parameter INIT_RAM_25 = 288'h0; +parameter INIT_RAM_26 = 288'h0; +parameter INIT_RAM_27 = 288'h0; +parameter INIT_RAM_28 = 288'h0; +parameter INIT_RAM_29 = 288'h0; +parameter INIT_RAM_2A = 288'h0; +parameter INIT_RAM_2B = 288'h0; +parameter INIT_RAM_2C = 288'h0; +parameter INIT_RAM_2D = 288'h0; +parameter INIT_RAM_2E = 288'h0; +parameter INIT_RAM_2F = 288'h0; +parameter INIT_RAM_30 = 288'h0; +parameter INIT_RAM_31 = 288'h0; +parameter INIT_RAM_32 = 288'h0; +parameter INIT_RAM_33 = 288'h0; +parameter INIT_RAM_34 = 288'h0; +parameter INIT_RAM_35 = 288'h0; +parameter INIT_RAM_36 = 288'h0; +parameter INIT_RAM_37 = 288'h0; +parameter INIT_RAM_38 = 288'h0; +parameter INIT_RAM_39 = 288'h0; +parameter INIT_RAM_3A = 288'h0; +parameter INIT_RAM_3B = 288'h0; +parameter INIT_RAM_3C = 288'h0; +parameter INIT_RAM_3D = 288'h0; +parameter INIT_RAM_3E = 288'h0; +parameter INIT_RAM_3F = 288'h0; + +output [35:0] DO; +input [35:0] DI; +input [2:0] BLKSEL; +input [13:0] ADA, ADB; +input WREA, WREB; +input CLKA, CLKB; +input CEA, CEB; +input OCE; +input RESETA, RESETB; + +specify + (posedge CLKB => (DO : DI)) = (419, 493); + $setup(RESETA, posedge CLKA, 62); + $setup(RESETB, posedge CLKB, 62); + $setup(OCE, posedge CLKB, 62); + $setup(CEA, posedge CLKA, 62); + $setup(CEB, posedge CLKB, 62); + $setup(OCE, posedge CLKB, 62); + $setup(WREA, posedge CLKA, 62); + $setup(WREB, posedge CLKB, 62); + $setup(DI, posedge CLKA, 62); + $setup(ADA, posedge CLKA, 62); + $setup(ADB, posedge CLKB, 62); + $setup(BLKSEL, posedge CLKA, 62); +endspecify + +endmodule + + +(* blackbox *) +module DP (DOA, DOB, DIA, DIB, BLKSEL, ADA, ADB, WREA, WREB, CLKA, CLKB, CEA, CEB, OCEA, OCEB, RESETA, RESETB); + +parameter READ_MODE0 = 1'b0; +parameter READ_MODE1 = 1'b0; +parameter WRITE_MODE0 = 2'b00; +parameter WRITE_MODE1 = 2'b00; +parameter BIT_WIDTH_0 = 16; // 1, 2, 4, 8, 16 +parameter BIT_WIDTH_1 = 16; // 1, 2, 4, 8, 16 +parameter BLK_SEL = 3'b000; +parameter RESET_MODE = "SYNC"; +parameter INIT_RAM_00 = 256'h0; +parameter INIT_RAM_01 = 256'h0; +parameter INIT_RAM_02 = 256'h0; +parameter INIT_RAM_03 = 256'h0; +parameter INIT_RAM_04 = 256'h0; +parameter INIT_RAM_05 = 256'h0; +parameter INIT_RAM_06 = 256'h0; +parameter INIT_RAM_07 = 256'h0; +parameter INIT_RAM_08 = 256'h0; +parameter INIT_RAM_09 = 256'h0; +parameter INIT_RAM_0A = 256'h0; +parameter INIT_RAM_0B = 256'h0; +parameter INIT_RAM_0C = 256'h0; +parameter INIT_RAM_0D = 256'h0; +parameter INIT_RAM_0E = 256'h0; +parameter INIT_RAM_0F = 256'h0; +parameter INIT_RAM_10 = 256'h0; +parameter INIT_RAM_11 = 256'h0; +parameter INIT_RAM_12 = 256'h0; +parameter INIT_RAM_13 = 256'h0; +parameter INIT_RAM_14 = 256'h0; +parameter INIT_RAM_15 = 256'h0; +parameter INIT_RAM_16 = 256'h0; +parameter INIT_RAM_17 = 256'h0; +parameter INIT_RAM_18 = 256'h0; +parameter INIT_RAM_19 = 256'h0; +parameter INIT_RAM_1A = 256'h0; +parameter INIT_RAM_1B = 256'h0; +parameter INIT_RAM_1C = 256'h0; +parameter INIT_RAM_1D = 256'h0; +parameter INIT_RAM_1E = 256'h0; +parameter INIT_RAM_1F = 256'h0; +parameter INIT_RAM_20 = 256'h0; +parameter INIT_RAM_21 = 256'h0; +parameter INIT_RAM_22 = 256'h0; +parameter INIT_RAM_23 = 256'h0; +parameter INIT_RAM_24 = 256'h0; +parameter INIT_RAM_25 = 256'h0; +parameter INIT_RAM_26 = 256'h0; +parameter INIT_RAM_27 = 256'h0; +parameter INIT_RAM_28 = 256'h0; +parameter INIT_RAM_29 = 256'h0; +parameter INIT_RAM_2A = 256'h0; +parameter INIT_RAM_2B = 256'h0; +parameter INIT_RAM_2C = 256'h0; +parameter INIT_RAM_2D = 256'h0; +parameter INIT_RAM_2E = 256'h0; +parameter INIT_RAM_2F = 256'h0; +parameter INIT_RAM_30 = 256'h0; +parameter INIT_RAM_31 = 256'h0; +parameter INIT_RAM_32 = 256'h0; +parameter INIT_RAM_33 = 256'h0; +parameter INIT_RAM_34 = 256'h0; +parameter INIT_RAM_35 = 256'h0; +parameter INIT_RAM_36 = 256'h0; +parameter INIT_RAM_37 = 256'h0; +parameter INIT_RAM_38 = 256'h0; +parameter INIT_RAM_39 = 256'h0; +parameter INIT_RAM_3A = 256'h0; +parameter INIT_RAM_3B = 256'h0; +parameter INIT_RAM_3C = 256'h0; +parameter INIT_RAM_3D = 256'h0; +parameter INIT_RAM_3E = 256'h0; +parameter INIT_RAM_3F = 256'h0; + +output [15:0] DOA, DOB; +input [15:0] DIA, DIB; +input [2:0] BLKSEL; +input [13:0] ADA, ADB; +input WREA, WREB; +input CLKA, CLKB; +input CEA, CEB; +input OCEA, OCEB; +input RESETA, RESETB; + +endmodule + +(* blackbox *) +module DPX9 (DOA, DOB, DIA, DIB, BLKSEL, ADA, ADB, WREA, WREB, CLKA, CLKB, CEA, CEB, OCEA, OCEB, RESETA, RESETB); + +parameter READ_MODE0 = 1'b0; +parameter READ_MODE1 = 1'b0; +parameter WRITE_MODE0 = 2'b00; +parameter WRITE_MODE1 = 2'b00; +parameter BIT_WIDTH_0 = 18; // 9, 18 +parameter BIT_WIDTH_1 = 18; // 9, 18 +parameter BLK_SEL = 3'b000; +parameter RESET_MODE = "SYNC"; +parameter INIT_RAM_00 = 288'h0; +parameter INIT_RAM_01 = 288'h0; +parameter INIT_RAM_02 = 288'h0; +parameter INIT_RAM_03 = 288'h0; +parameter INIT_RAM_04 = 288'h0; +parameter INIT_RAM_05 = 288'h0; +parameter INIT_RAM_06 = 288'h0; +parameter INIT_RAM_07 = 288'h0; +parameter INIT_RAM_08 = 288'h0; +parameter INIT_RAM_09 = 288'h0; +parameter INIT_RAM_0A = 288'h0; +parameter INIT_RAM_0B = 288'h0; +parameter INIT_RAM_0C = 288'h0; +parameter INIT_RAM_0D = 288'h0; +parameter INIT_RAM_0E = 288'h0; +parameter INIT_RAM_0F = 288'h0; +parameter INIT_RAM_10 = 288'h0; +parameter INIT_RAM_11 = 288'h0; +parameter INIT_RAM_12 = 288'h0; +parameter INIT_RAM_13 = 288'h0; +parameter INIT_RAM_14 = 288'h0; +parameter INIT_RAM_15 = 288'h0; +parameter INIT_RAM_16 = 288'h0; +parameter INIT_RAM_17 = 288'h0; +parameter INIT_RAM_18 = 288'h0; +parameter INIT_RAM_19 = 288'h0; +parameter INIT_RAM_1A = 288'h0; +parameter INIT_RAM_1B = 288'h0; +parameter INIT_RAM_1C = 288'h0; +parameter INIT_RAM_1D = 288'h0; +parameter INIT_RAM_1E = 288'h0; +parameter INIT_RAM_1F = 288'h0; +parameter INIT_RAM_20 = 288'h0; +parameter INIT_RAM_21 = 288'h0; +parameter INIT_RAM_22 = 288'h0; +parameter INIT_RAM_23 = 288'h0; +parameter INIT_RAM_24 = 288'h0; +parameter INIT_RAM_25 = 288'h0; +parameter INIT_RAM_26 = 288'h0; +parameter INIT_RAM_27 = 288'h0; +parameter INIT_RAM_28 = 288'h0; +parameter INIT_RAM_29 = 288'h0; +parameter INIT_RAM_2A = 288'h0; +parameter INIT_RAM_2B = 288'h0; +parameter INIT_RAM_2C = 288'h0; +parameter INIT_RAM_2D = 288'h0; +parameter INIT_RAM_2E = 288'h0; +parameter INIT_RAM_2F = 288'h0; +parameter INIT_RAM_30 = 288'h0; +parameter INIT_RAM_31 = 288'h0; +parameter INIT_RAM_32 = 288'h0; +parameter INIT_RAM_33 = 288'h0; +parameter INIT_RAM_34 = 288'h0; +parameter INIT_RAM_35 = 288'h0; +parameter INIT_RAM_36 = 288'h0; +parameter INIT_RAM_37 = 288'h0; +parameter INIT_RAM_38 = 288'h0; +parameter INIT_RAM_39 = 288'h0; +parameter INIT_RAM_3A = 288'h0; +parameter INIT_RAM_3B = 288'h0; +parameter INIT_RAM_3C = 288'h0; +parameter INIT_RAM_3D = 288'h0; +parameter INIT_RAM_3E = 288'h0; +parameter INIT_RAM_3F = 288'h0; + +output [17:0] DOA, DOB; +input [17:0] DIA, DIB; +input [2:0] BLKSEL; +input [13:0] ADA, ADB; +input WREA, WREB; +input CLKA, CLKB; +input CEA, CEB; +input OCEA, OCEB; +input RESETA, RESETB; + +endmodule + + +(* blackbox *) +module rPLL (CLKOUT, CLKOUTP, CLKOUTD, CLKOUTD3, LOCK, CLKIN, CLKFB, FBDSEL, IDSEL, ODSEL, DUTYDA, PSDA, FDLY, RESET, RESET_P); +input CLKIN; +input CLKFB; +input RESET; +input RESET_P; +input [5:0] FBDSEL; +input [5:0] IDSEL; +input [5:0] ODSEL; +input [3:0] PSDA,FDLY; +input [3:0] DUTYDA; + +output CLKOUT; +output LOCK; +output CLKOUTP; +output CLKOUTD; +output CLKOUTD3; + +parameter FCLKIN = "100.0"; // frequency of CLKIN +parameter DYN_IDIV_SEL= "false"; // true:IDSEL, false:IDIV_SEL +parameter IDIV_SEL = 0; // 0:1, 1:2 ... 63:64 +parameter DYN_FBDIV_SEL= "false"; // true:FBDSEL, false:FBDIV_SEL +parameter FBDIV_SEL = 0; // 0:1, 1:2 ... 63:64 +parameter DYN_ODIV_SEL= "false"; // true:ODSEL, false:ODIV_SEL +parameter ODIV_SEL = 8; // 2/4/8/16/32/48/64/80/96/112/128 + +parameter PSDA_SEL= "0000"; +parameter DYN_DA_EN = "false"; // true:PSDA or DUTYDA or FDA, false: DA_SEL +parameter DUTYDA_SEL= "1000"; + +parameter CLKOUT_FT_DIR = 1'b1; // CLKOUT fine tuning direction. 1'b1 only +parameter CLKOUTP_FT_DIR = 1'b1; // 1'b1 only +parameter CLKOUT_DLY_STEP = 0; // 0, 1, 2, 4 +parameter CLKOUTP_DLY_STEP = 0; // 0, 1, 2 + +parameter CLKFB_SEL = "internal"; // "internal", "external" +parameter CLKOUT_BYPASS = "false"; // "true", "false" +parameter CLKOUTP_BYPASS = "false"; // "true", "false" +parameter CLKOUTD_BYPASS = "false"; // "true", "false" +parameter DYN_SDIV_SEL = 2; // 2~128, only even numbers +parameter CLKOUTD_SRC = "CLKOUT"; // CLKOUT, CLKOUTP +parameter CLKOUTD3_SRC = "CLKOUT"; // CLKOUT, CLKOUTP +parameter DEVICE = "GW1N-1"; // "GW1N-1", "GW1N-4", "GW1N-9", "GW1NR-4", "GW1NR-9", "GW1N-4B", "GW1NR-4B", "GW1NS-2", "GW1NS-2C", "GW1NZ-1", "GW1NSR-2", "GW1NSR-2C", "GW1N-1S", "GW1NSE-2C", "GW1NRF-4B", "GW1N-9C", "GW1NR-9C", "GW1N-4C", "GW1NR-4C" + +endmodule + +(* blackbox *) +module OSC(OSCOUT); +output OSCOUT; + +parameter FREQ_DIV = 100; +parameter DEVICE = "GW1N-4"; +endmodule + +(* blackbox *) +module OSCZ(OSCOUT, OSCEN); +input OSCEN; + +output OSCOUT; + +parameter FREQ_DIV = 100; +endmodule + +(* blackbox *) +module OSCF(OSCOUT, OSCOUT30M, OSCEN); +input OSCEN; + +output OSCOUT; +output OSCOUT30M; + +parameter FREQ_DIV = 100; +endmodule + +(* blackbox *) +module OSCH(OSCOUT); +output OSCOUT; + +parameter FREQ_DIV = 96; +endmodule diff --git a/resources/netlist/resources/kernel/share/gowin/lutrams.txt b/resources/netlist/resources/kernel/share/gowin/lutrams.txt new file mode 100644 index 0000000..76c4cd5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/lutrams.txt @@ -0,0 +1,13 @@ +ram distributed $__GOWIN_LUTRAM_ { + abits 4; + width 4; + cost 4; + widthscale; + init no_undef; + prune_rom; + port sw "W" { + clock posedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/gowin/lutrams_map.v b/resources/netlist/resources/kernel/share/gowin/lutrams_map.v new file mode 100644 index 0000000..6396ef7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/gowin/lutrams_map.v @@ -0,0 +1,65 @@ +module $__GOWIN_LUTRAM_(...); + +parameter INIT = 64'bx; +parameter BITS_USED = 0; + +input PORT_W_CLK; +input [3:0] PORT_W_ADDR; +input PORT_W_WR_EN; +input [3:0] PORT_W_WR_DATA; + +input [3:0] PORT_R_ADDR; +output [3:0] PORT_R_RD_DATA; + +function [15:0] init_slice; +input integer idx; +integer i; +for (i = 0; i < 16; i = i + 1) + init_slice[i] = INIT[4*i+idx]; +endfunction + +generate + +casez(BITS_USED) +4'b000z: +RAM16SDP1 #( + .INIT_0(init_slice(0)), +) _TECHMAP_REPLACE_ ( + .WAD(PORT_W_ADDR), + .RAD(PORT_R_ADDR), + .DI(PORT_W_WR_DATA[0]), + .DO(PORT_R_RD_DATA[0]), + .CLK(PORT_W_CLK), + .WRE(PORT_W_WR_EN) +); +4'b00zz: +RAM16SDP2 #( + .INIT_0(init_slice(0)), + .INIT_1(init_slice(1)), +) _TECHMAP_REPLACE_ ( + .WAD(PORT_W_ADDR), + .RAD(PORT_R_ADDR), + .DI(PORT_W_WR_DATA[1:0]), + .DO(PORT_R_RD_DATA[1:0]), + .CLK(PORT_W_CLK), + .WRE(PORT_W_WR_EN) +); +default: +RAM16SDP4 #( + .INIT_0(init_slice(0)), + .INIT_1(init_slice(1)), + .INIT_2(init_slice(2)), + .INIT_3(init_slice(3)), +) _TECHMAP_REPLACE_ ( + .WAD(PORT_W_ADDR), + .RAD(PORT_R_ADDR), + .DI(PORT_W_WR_DATA), + .DO(PORT_R_RD_DATA), + .CLK(PORT_W_CLK), + .WRE(PORT_W_WR_EN) +); +endcase + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_blackbox.v b/resources/netlist/resources/kernel/share/greenpak4/cells_blackbox.v new file mode 100644 index 0000000..1895b90 --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_blackbox.v @@ -0,0 +1,18 @@ +module \$__COUNT_ (CE, CLK, OUT, POUT, RST, UP); + + input wire CE; + input wire CLK; + output reg OUT; + output reg[WIDTH-1:0] POUT; + input wire RST; + input wire UP; + + parameter COUNT_TO = 1; + parameter RESET_MODE = "RISING"; + parameter RESET_TO_MAX = "1"; + parameter HAS_POUT = 0; + parameter HAS_CE = 0; + parameter WIDTH = 8; + parameter DIRECTION = "DOWN"; + +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_latch.v b/resources/netlist/resources/kernel/share/greenpak4/cells_latch.v new file mode 100644 index 0000000..2ccdd20 --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_latch.v @@ -0,0 +1,15 @@ +module $_DLATCH_P_(input E, input D, output Q); + GP_DLATCH _TECHMAP_REPLACE_ ( + .D(D), + .nCLK(!E), + .Q(Q) + ); +endmodule + +module $_DLATCH_N_(input E, input D, output Q); + GP_DLATCH _TECHMAP_REPLACE_ ( + .D(D), + .nCLK(E), + .Q(Q) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_map.v b/resources/netlist/resources/kernel/share/greenpak4/cells_map.v new file mode 100644 index 0000000..316be3f --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_map.v @@ -0,0 +1,261 @@ +module GP_DFFS(input D, CLK, nSET, output reg Q); + parameter [0:0] INIT = 1'bx; + GP_DFFSR #( + .INIT(INIT), + .SRMODE(1'b1), + ) _TECHMAP_REPLACE_ ( + .D(D), + .CLK(CLK), + .nSR(nSET), + .Q(Q) + ); +endmodule + +module GP_DFFR(input D, CLK, nRST, output reg Q); + parameter [0:0] INIT = 1'bx; + GP_DFFSR #( + .INIT(INIT), + .SRMODE(1'b0), + ) _TECHMAP_REPLACE_ ( + .D(D), + .CLK(CLK), + .nSR(nRST), + .Q(Q) + ); +endmodule + +module GP_DFFSI(input D, CLK, nSET, output reg nQ); + parameter [0:0] INIT = 1'bx; + GP_DFFSRI #( + .INIT(INIT), + .SRMODE(1'b1), + ) _TECHMAP_REPLACE_ ( + .D(D), + .CLK(CLK), + .nSR(nSET), + .nQ(nQ) + ); +endmodule + +module GP_DFFRI(input D, CLK, nRST, output reg nQ); + parameter [0:0] INIT = 1'bx; + GP_DFFSRI #( + .INIT(INIT), + .SRMODE(1'b0), + ) _TECHMAP_REPLACE_ ( + .D(D), + .CLK(CLK), + .nSR(nRST), + .nQ(nQ) + ); +endmodule + +module GP_DLATCHS(input D, nCLK, nSET, output reg Q); + parameter [0:0] INIT = 1'bx; + GP_DLATCHSR #( + .INIT(INIT), + .SRMODE(1'b1), + ) _TECHMAP_REPLACE_ ( + .D(D), + .nCLK(nCLK), + .nSR(nSET), + .Q(Q) + ); +endmodule + +module GP_DLATCHR(input D, nCLK, nRST, output reg Q); + parameter [0:0] INIT = 1'bx; + GP_DLATCHSR #( + .INIT(INIT), + .SRMODE(1'b0), + ) _TECHMAP_REPLACE_ ( + .D(D), + .nCLK(nCLK), + .nSR(nRST), + .Q(Q) + ); +endmodule + +module GP_DLATCHSI(input D, nCLK, nSET, output reg nQ); + parameter [0:0] INIT = 1'bx; + GP_DLATCHSRI #( + .INIT(INIT), + .SRMODE(1'b1), + ) _TECHMAP_REPLACE_ ( + .D(D), + .nCLK(nCLK), + .nSR(nSET), + .nQ(nQ) + ); +endmodule + +module GP_DLATCHRI(input D, nCLK, nRST, output reg nQ); + parameter [0:0] INIT = 1'bx; + GP_DLATCHSRI #( + .INIT(INIT), + .SRMODE(1'b0), + ) _TECHMAP_REPLACE_ ( + .D(D), + .nCLK(nCLK), + .nSR(nRST), + .nQ(nQ) + ); +endmodule + +module GP_OBUFT(input IN, input OE, output OUT); + GP_IOBUF _TECHMAP_REPLACE_ ( + .IN(IN), + .OE(OE), + .IO(OUT), + .OUT() + ); +endmodule + +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + if(LUT == 2'b01) begin + GP_INV _TECHMAP_REPLACE_ (.OUT(Y), .IN(A[0]) ); + end + else begin + GP_2LUT #(.INIT({2'b00, LUT})) _TECHMAP_REPLACE_ (.OUT(Y), + .IN0(A[0]), .IN1(1'b0)); + end + end else + if (WIDTH == 2) begin + GP_2LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), + .IN0(A[0]), .IN1(A[1])); + end else + if (WIDTH == 3) begin + GP_3LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), + .IN0(A[0]), .IN1(A[1]), .IN2(A[2])); + end else + if (WIDTH == 4) begin + GP_4LUT #(.INIT(LUT)) _TECHMAP_REPLACE_ (.OUT(Y), + .IN0(A[0]), .IN1(A[1]), .IN2(A[2]), .IN3(A[3])); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule + +module \$__COUNT_ (CE, CLK, OUT, POUT, RST, UP); + + input wire CE; + input wire CLK; + output reg OUT; + (* force_downto *) + output reg[WIDTH-1:0] POUT; + input wire RST; + input wire UP; + + parameter COUNT_TO = 1; + parameter RESET_MODE = "RISING"; + parameter RESET_TO_MAX = 0; + parameter HAS_POUT = 0; + parameter HAS_CE = 0; + parameter WIDTH = 8; + parameter DIRECTION = "DOWN"; + + //If we have a DIRECTION other than DOWN fail... GP_COUNTx_ADV is not supported yet + if(DIRECTION != "DOWN") begin + initial begin + $display("ERROR: \$__COUNT_ support for GP_COUNTx_ADV is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); + $finish; + end + end + + //If counter is more than 14 bits wide, complain (also shouldn't happen) + else if(WIDTH > 14) begin + initial begin + $display("ERROR: \$__COUNT_ support for cascaded counters is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); + $finish; + end + end + + //If counter is more than 8 bits wide and has parallel output, we have a problem + else if(WIDTH > 8 && HAS_POUT) begin + initial begin + $display("ERROR: \$__COUNT_ support for 9-14 bit counters with parallel output is not yet implemented. This counter should never have been extracted (bug in extract_counter pass?)."); + $finish; + end + end + + //Looks like a legal counter! Do something with it + else if(WIDTH <= 8) begin + if(HAS_CE) begin + wire ce_not; + GP_INV ceinv( + .IN(CE), + .OUT(ce_not) + ); + GP_COUNT8_ADV #( + .COUNT_TO(COUNT_TO), + .RESET_MODE(RESET_MODE), + .RESET_VALUE(RESET_TO_MAX ? "COUNT_TO" : "ZERO"), + .CLKIN_DIVIDE(1) + ) _TECHMAP_REPLACE_ ( + .CLK(CLK), + .RST(RST), + .OUT(OUT), + .UP(1'b0), //always count down for now + .KEEP(ce_not), + .POUT(POUT) + ); + end + else begin + GP_COUNT8 #( + .COUNT_TO(COUNT_TO), + .RESET_MODE(RESET_MODE), + .CLKIN_DIVIDE(1) + ) _TECHMAP_REPLACE_ ( + .CLK(CLK), + .RST(RST), + .OUT(OUT), + .POUT(POUT) + ); + end + end + + else begin + if(HAS_CE) begin + wire ce_not; + GP_INV ceinv( + .IN(CE), + .OUT(ce_not) + ); + GP_COUNT14_ADV #( + .COUNT_TO(COUNT_TO), + .RESET_MODE(RESET_TO_MAX ? "COUNT_TO" : "ZERO"), + .RESET_VALUE("COUNT_TO"), + .CLKIN_DIVIDE(1) + ) _TECHMAP_REPLACE_ ( + .CLK(CLK), + .RST(RST), + .OUT(OUT), + .UP(1'b0), //always count down for now + .KEEP(ce_not), + .POUT(POUT) + ); + end + else begin + GP_COUNT14 #( + .COUNT_TO(COUNT_TO), + .RESET_MODE(RESET_MODE), + .CLKIN_DIVIDE(1) + ) _TECHMAP_REPLACE_ ( + .CLK(CLK), + .RST(RST), + .OUT(OUT) + ); + end + end + +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_sim.v b/resources/netlist/resources/kernel/share/greenpak4/cells_sim.v new file mode 100644 index 0000000..221bee6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_sim.v @@ -0,0 +1,5 @@ +`timescale 1ns/1ps + +`include "cells_sim_ams.v" +`include "cells_sim_digital.v" +`include "cells_sim_wip.v" diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_sim_ams.v b/resources/netlist/resources/kernel/share/greenpak4/cells_sim_ams.v new file mode 100644 index 0000000..7f8b3de --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_sim_ams.v @@ -0,0 +1,110 @@ +`timescale 1ns/1ps + +/* + This file contains analog / mixed signal cells, or other things that are not possible to fully model + in behavioral Verilog. + + It also contains some stuff like oscillators that use non-synthesizeable constructs such as delays. + TODO: do we want a third file for those cells? + */ + +module GP_ABUF(input wire IN, output wire OUT); + + assign OUT = IN; + + //must be 1, 5, 20, 50 + //values >1 only available with Vdd > 2.7V + parameter BANDWIDTH_KHZ = 1; + +endmodule + +module GP_ACMP(input wire PWREN, input wire VIN, input wire VREF, output reg OUT); + + parameter BANDWIDTH = "HIGH"; + parameter VIN_ATTEN = 1; + parameter VIN_ISRC_EN = 0; + parameter HYSTERESIS = 0; + + initial OUT = 0; + +endmodule + +module GP_BANDGAP(output reg OK); + parameter AUTO_PWRDN = 1; + parameter CHOPPER_EN = 1; + parameter OUT_DELAY = 100; + +endmodule + +module GP_DAC(input[7:0] DIN, input wire VREF, output reg VOUT); + + initial VOUT = 0; + + //analog hard IP is not supported for simulation + +endmodule + +module GP_LFOSC(input PWRDN, output reg CLKOUT); + + parameter PWRDN_EN = 0; + parameter AUTO_PWRDN = 0; + parameter OUT_DIV = 1; + + initial CLKOUT = 0; + + //auto powerdown not implemented for simulation + //output dividers not implemented for simulation + + always begin + if(PWRDN) + CLKOUT = 0; + else begin + //half period of 1730 Hz + #289017; + CLKOUT = ~CLKOUT; + end + end + +endmodule + +module GP_PGA(input wire VIN_P, input wire VIN_N, input wire VIN_SEL, output reg VOUT); + + parameter GAIN = 1; + parameter INPUT_MODE = "SINGLE"; + + initial VOUT = 0; + + //cannot simulate mixed signal IP + +endmodule + +module GP_PWRDET(output reg VDD_LOW); + initial VDD_LOW = 0; +endmodule + +module GP_VREF(input VIN, output reg VOUT); + parameter VIN_DIV = 1; + parameter VREF = 0; + //cannot simulate mixed signal IP +endmodule + +module GP_POR(output reg RST_DONE); + parameter POR_TIME = 500; + + initial begin + RST_DONE = 0; + + if(POR_TIME == 4) + #4000; + else if(POR_TIME == 500) + #500000; + else begin + $display("ERROR: bad POR_TIME for GP_POR cell"); + $finish; + end + + RST_DONE = 1; + + end + +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_sim_digital.v b/resources/netlist/resources/kernel/share/greenpak4/cells_sim_digital.v new file mode 100644 index 0000000..43d35d0 --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_sim_digital.v @@ -0,0 +1,794 @@ +`timescale 1ns/1ps + +/* + This file contains simulation models for GreenPAK cells which are possible to fully model using synthesizeable + behavioral Verilog constructs only. + */ + +module GP_2LUT(input IN0, IN1, output OUT); + parameter [3:0] INIT = 0; + assign OUT = INIT[{IN1, IN0}]; +endmodule + +module GP_3LUT(input IN0, IN1, IN2, output OUT); + parameter [7:0] INIT = 0; + assign OUT = INIT[{IN2, IN1, IN0}]; +endmodule + +module GP_4LUT( + input wire IN0, + input wire IN1, + input wire IN2, + input wire IN3, + output wire OUT); + + parameter [15:0] INIT = 0; + assign OUT = INIT[{IN3, IN2, IN1, IN0}]; +endmodule + +module GP_CLKBUF(input wire IN, output wire OUT); + assign OUT = IN; +endmodule + +module GP_COUNT14(input CLK, input wire RST, output reg OUT); + + parameter RESET_MODE = "RISING"; + + parameter COUNT_TO = 14'h1; + parameter CLKIN_DIVIDE = 1; + + reg[13:0] count = COUNT_TO; + + initial begin + if(CLKIN_DIVIDE != 1) begin + $display("ERROR: CLKIN_DIVIDE values other than 1 not implemented"); + $finish; + end + end + + //Combinatorially output underflow flag whenever we wrap low + always @(*) begin + OUT <= (count == 14'h0); + end + + //POR or SYSRST reset value is COUNT_TO. Datasheet is unclear but conversations w/ Silego confirm. + //Runtime reset value is clearly 0 except in count/FSM cells where it's configurable but we leave at 0 for now. + generate + case(RESET_MODE) + + "RISING": begin + always @(posedge CLK, posedge RST) begin + if(RST) + count <= 0; + else begin + count <= count - 1'd1; + if(count == 0) + count <= COUNT_TO; + end + end + end + + "FALLING": begin + always @(posedge CLK, negedge RST) begin + if(!RST) + count <= 0; + else begin + count <= count - 1'd1; + if(count == 0) + count <= COUNT_TO; + end + end + end + + "BOTH": begin + initial begin + $display("Both-edge reset mode for GP_COUNT14 not implemented"); + $finish; + end + end + + "LEVEL": begin + always @(posedge CLK, posedge RST) begin + if(RST) + count <= 0; + + else begin + count <= count - 1'd1; + if(count == 0) + count <= COUNT_TO; + end + end + end + + default: begin + initial begin + $display("Invalid RESET_MODE on GP_COUNT14"); + $finish; + end + end + + endcase + endgenerate + +endmodule + +module GP_COUNT14_ADV(input CLK, input RST, output reg OUT, + input UP, input KEEP, output reg[7:0] POUT); + + parameter RESET_MODE = "RISING"; + parameter RESET_VALUE = "ZERO"; + + parameter COUNT_TO = 14'h1; + parameter CLKIN_DIVIDE = 1; + + initial begin + if(CLKIN_DIVIDE != 1) begin + $display("ERROR: CLKIN_DIVIDE values other than 1 not implemented"); + $finish; + end + end + + reg[13:0] count = COUNT_TO; + + //Combinatorially output underflow flag whenever we wrap low + always @(*) begin + if(UP) + OUT <= (count == 14'h3fff); + else + OUT <= (count == 14'h0); + POUT <= count[7:0]; + end + + //POR or SYSRST reset value is COUNT_TO. Datasheet is unclear but conversations w/ Silego confirm. + //Runtime reset value is clearly 0 except in count/FSM cells where it's configurable but we leave at 0 for now. + generate + case(RESET_MODE) + + "RISING": begin + always @(posedge CLK, posedge RST) begin + + //Resets + if(RST) begin + if(RESET_VALUE == "ZERO") + count <= 0; + else + count <= COUNT_TO; + end + + else if(KEEP) begin + end + else if(UP) begin + count <= count + 1'd1; + if(count == 14'h3fff) + count <= COUNT_TO; + end + else begin + count <= count - 1'd1; + + if(count == 0) + count <= COUNT_TO; + end + + end + end + + "FALLING": begin + always @(posedge CLK, negedge RST) begin + + //Resets + if(!RST) begin + if(RESET_VALUE == "ZERO") + count <= 0; + else + count <= COUNT_TO; + end + + else if(KEEP) begin + end + else if(UP) begin + count <= count + 1'd1; + if(count == 14'h3fff) + count <= COUNT_TO; + end + else begin + count <= count - 1'd1; + + if(count == 0) + count <= COUNT_TO; + end + + end + end + + "BOTH": begin + initial begin + $display("Both-edge reset mode for GP_COUNT14_ADV not implemented"); + $finish; + end + end + + "LEVEL": begin + always @(posedge CLK, posedge RST) begin + + //Resets + if(RST) begin + if(RESET_VALUE == "ZERO") + count <= 0; + else + count <= COUNT_TO; + end + + else begin + + if(KEEP) begin + end + else if(UP) begin + count <= count + 1'd1; + if(count == 14'h3fff) + count <= COUNT_TO; + end + else begin + count <= count - 1'd1; + + if(count == 0) + count <= COUNT_TO; + end + + end + + end + end + + default: begin + initial begin + $display("Invalid RESET_MODE on GP_COUNT14_ADV"); + $finish; + end + end + + endcase + endgenerate + +endmodule + +module GP_COUNT8_ADV(input CLK, input RST, output reg OUT, + input UP, input KEEP, output reg[7:0] POUT); + + parameter RESET_MODE = "RISING"; + parameter RESET_VALUE = "ZERO"; + + parameter COUNT_TO = 8'h1; + parameter CLKIN_DIVIDE = 1; + + reg[7:0] count = COUNT_TO; + + initial begin + if(CLKIN_DIVIDE != 1) begin + $display("ERROR: CLKIN_DIVIDE values other than 1 not implemented"); + $finish; + end + end + + //Combinatorially output underflow flag whenever we wrap low + always @(*) begin + if(UP) + OUT <= (count == 8'hff); + else + OUT <= (count == 8'h0); + POUT <= count; + end + + //POR or SYSRST reset value is COUNT_TO. Datasheet is unclear but conversations w/ Silego confirm. + //Runtime reset value is clearly 0 except in count/FSM cells where it's configurable but we leave at 0 for now. + generate + case(RESET_MODE) + + "RISING": begin + always @(posedge CLK, posedge RST) begin + + //Resets + if(RST) begin + if(RESET_VALUE == "ZERO") + count <= 0; + else + count <= COUNT_TO; + end + + //Main counter + else if(KEEP) begin + end + else if(UP) begin + count <= count + 1'd1; + if(count == 8'hff) + count <= COUNT_TO; + end + else begin + count <= count - 1'd1; + + if(count == 0) + count <= COUNT_TO; + end + + end + end + + "FALLING": begin + always @(posedge CLK, negedge RST) begin + + //Resets + if(!RST) begin + if(RESET_VALUE == "ZERO") + count <= 0; + else + count <= COUNT_TO; + end + + //Main counter + else if(KEEP) begin + end + else if(UP) begin + count <= count + 1'd1; + if(count == 8'hff) + count <= COUNT_TO; + end + else begin + count <= count - 1'd1; + + if(count == 0) + count <= COUNT_TO; + end + + end + end + + "BOTH": begin + initial begin + $display("Both-edge reset mode for GP_COUNT8_ADV not implemented"); + $finish; + end + end + + "LEVEL": begin + always @(posedge CLK, posedge RST) begin + + //Resets + if(RST) begin + if(RESET_VALUE == "ZERO") + count <= 0; + else + count <= COUNT_TO; + end + + else begin + + if(KEEP) begin + end + else if(UP) begin + count <= count + 1'd1; + if(count == 8'hff) + count <= COUNT_TO; + end + else begin + count <= count - 1'd1; + + if(count == 0) + count <= COUNT_TO; + end + end + + end + end + + default: begin + initial begin + $display("Invalid RESET_MODE on GP_COUNT8_ADV"); + $finish; + end + end + + endcase + endgenerate + +endmodule + +module GP_COUNT8( + input wire CLK, + input wire RST, + output reg OUT, + output reg[7:0] POUT); + + parameter RESET_MODE = "RISING"; + + parameter COUNT_TO = 8'h1; + parameter CLKIN_DIVIDE = 1; + + initial begin + if(CLKIN_DIVIDE != 1) begin + $display("ERROR: CLKIN_DIVIDE values other than 1 not implemented"); + $finish; + end + end + + reg[7:0] count = COUNT_TO; + + //Combinatorially output underflow flag whenever we wrap low + always @(*) begin + OUT <= (count == 8'h0); + POUT <= count; + end + + //POR or SYSRST reset value is COUNT_TO. Datasheet is unclear but conversations w/ Silego confirm. + //Runtime reset value is clearly 0 except in count/FSM cells where it's configurable but we leave at 0 for now. + generate + case(RESET_MODE) + + "RISING": begin + always @(posedge CLK, posedge RST) begin + if(RST) + count <= 0; + else begin + count <= count - 1'd1; + if(count == 0) + count <= COUNT_TO; + end + end + end + + "FALLING": begin + always @(posedge CLK, negedge RST) begin + if(!RST) + count <= 0; + else begin + count <= count - 1'd1; + if(count == 0) + count <= COUNT_TO; + end + end + end + + "BOTH": begin + initial begin + $display("Both-edge reset mode for GP_COUNT8 not implemented"); + $finish; + end + end + + "LEVEL": begin + always @(posedge CLK, posedge RST) begin + if(RST) + count <= 0; + + else begin + count <= count - 1'd1; + if(count == 0) + count <= COUNT_TO; + end + end + end + + default: begin + initial begin + $display("Invalid RESET_MODE on GP_COUNT8"); + $finish; + end + end + + endcase + endgenerate + +endmodule + +module GP_DCMPREF(output reg[7:0]OUT); + parameter[7:0] REF_VAL = 8'h00; + initial OUT = REF_VAL; +endmodule + +module GP_DCMPMUX(input[1:0] SEL, input[7:0] IN0, input[7:0] IN1, input[7:0] IN2, input[7:0] IN3, output reg[7:0] OUTA, output reg[7:0] OUTB); + + always @(*) begin + case(SEL) + 2'd00: begin + OUTA <= IN0; + OUTB <= IN3; + end + + 2'd01: begin + OUTA <= IN1; + OUTB <= IN2; + end + + 2'd02: begin + OUTA <= IN2; + OUTB <= IN1; + end + + 2'd03: begin + OUTA <= IN3; + OUTB <= IN0; + end + + endcase + end +endmodule + +module GP_DELAY(input IN, output reg OUT); + + parameter DELAY_STEPS = 1; + parameter GLITCH_FILTER = 0; + + initial OUT = 0; + + generate + + if(GLITCH_FILTER) begin + initial begin + $display("ERROR: GP_DELAY glitch filter mode not implemented"); + $finish; + end + end + + //TODO: These delays are PTV dependent! For now, hard code 3v3 timing + //Change simulation-mode delay depending on global Vdd range (how to specify this?) + always @(*) begin + case(DELAY_STEPS) + 1: #166 OUT = IN; + 2: #318 OUT = IN; + 2: #471 OUT = IN; + 3: #622 OUT = IN; + default: begin + $display("ERROR: GP_DELAY must have DELAY_STEPS in range [1,4]"); + $finish; + end + endcase + end + + endgenerate + +endmodule + +module GP_DFF(input D, CLK, output reg Q); + parameter [0:0] INIT = 1'bx; + initial Q = INIT; + always @(posedge CLK) begin + Q <= D; + end +endmodule + +module GP_DFFI(input D, CLK, output reg nQ); + parameter [0:0] INIT = 1'bx; + initial nQ = INIT; + always @(posedge CLK) begin + nQ <= ~D; + end +endmodule + +module GP_DFFR(input D, CLK, nRST, output reg Q); + parameter [0:0] INIT = 1'bx; + initial Q = INIT; + always @(posedge CLK, negedge nRST) begin + if (!nRST) + Q <= 1'b0; + else + Q <= D; + end +endmodule + +module GP_DFFRI(input D, CLK, nRST, output reg nQ); + parameter [0:0] INIT = 1'bx; + initial nQ = INIT; + always @(posedge CLK, negedge nRST) begin + if (!nRST) + nQ <= 1'b1; + else + nQ <= ~D; + end +endmodule + +module GP_DFFS(input D, CLK, nSET, output reg Q); + parameter [0:0] INIT = 1'bx; + initial Q = INIT; + always @(posedge CLK, negedge nSET) begin + if (!nSET) + Q <= 1'b1; + else + Q <= D; + end +endmodule + +module GP_DFFSI(input D, CLK, nSET, output reg nQ); + parameter [0:0] INIT = 1'bx; + initial nQ = INIT; + always @(posedge CLK, negedge nSET) begin + if (!nSET) + nQ <= 1'b0; + else + nQ <= ~D; + end +endmodule + +module GP_DFFSR(input D, CLK, nSR, output reg Q); + parameter [0:0] INIT = 1'bx; + parameter [0:0] SRMODE = 1'bx; + initial Q = INIT; + always @(posedge CLK, negedge nSR) begin + if (!nSR) + Q <= SRMODE; + else + Q <= D; + end +endmodule + +module GP_DFFSRI(input D, CLK, nSR, output reg nQ); + parameter [0:0] INIT = 1'bx; + parameter [0:0] SRMODE = 1'bx; + initial nQ = INIT; + always @(posedge CLK, negedge nSR) begin + if (!nSR) + nQ <= ~SRMODE; + else + nQ <= ~D; + end +endmodule + +module GP_DLATCH(input D, input nCLK, output reg Q); + parameter [0:0] INIT = 1'bx; + initial Q = INIT; + always @(*) begin + if(!nCLK) + Q <= D; + end +endmodule + +module GP_DLATCHI(input D, input nCLK, output reg nQ); + parameter [0:0] INIT = 1'bx; + initial nQ = INIT; + always @(*) begin + if(!nCLK) + nQ <= ~D; + end +endmodule + +module GP_DLATCHR(input D, input nCLK, input nRST, output reg Q); + parameter [0:0] INIT = 1'bx; + initial Q = INIT; + always @(*) begin + if(!nRST) + Q <= 1'b0; + else if(!nCLK) + Q <= D; + end +endmodule + +module GP_DLATCHRI(input D, input nCLK, input nRST, output reg nQ); + parameter [0:0] INIT = 1'bx; + initial nQ = INIT; + always @(*) begin + if(!nRST) + nQ <= 1'b1; + else if(!nCLK) + nQ <= ~D; + end +endmodule + +module GP_DLATCHS(input D, input nCLK, input nSET, output reg Q); + parameter [0:0] INIT = 1'bx; + initial Q = INIT; + always @(*) begin + if(!nSET) + Q <= 1'b1; + else if(!nCLK) + Q <= D; + end +endmodule + +module GP_DLATCHSI(input D, input nCLK, input nSET, output reg nQ); + parameter [0:0] INIT = 1'bx; + initial nQ = INIT; + always @(*) begin + if(!nSET) + nQ <= 1'b0; + else if(!nCLK) + nQ <= ~D; + end +endmodule + +module GP_DLATCHSR(input D, input nCLK, input nSR, output reg Q); + parameter [0:0] INIT = 1'bx; + parameter[0:0] SRMODE = 1'bx; + initial Q = INIT; + always @(*) begin + if(!nSR) + Q <= SRMODE; + else if(!nCLK) + Q <= D; + end +endmodule + +module GP_DLATCHSRI(input D, input nCLK, input nSR, output reg nQ); + parameter [0:0] INIT = 1'bx; + parameter[0:0] SRMODE = 1'bx; + initial nQ = INIT; + always @(*) begin + if(!nSR) + nQ <= ~SRMODE; + else if(!nCLK) + nQ <= ~D; + end +endmodule + +module GP_IBUF(input IN, output OUT); + assign OUT = IN; +endmodule + +module GP_IOBUF(input IN, input OE, output OUT, inout IO); + assign OUT = IO; + assign IO = OE ? IN : 1'bz; +endmodule + +module GP_INV(input IN, output OUT); + assign OUT = ~IN; +endmodule + +module GP_OBUF(input IN, output OUT); + assign OUT = IN; +endmodule + +module GP_OBUFT(input IN, input OE, output OUT); + assign OUT = OE ? IN : 1'bz; +endmodule + +module GP_PGEN(input wire nRST, input wire CLK, output reg OUT); + initial OUT = 0; + parameter PATTERN_DATA = 16'h0; + parameter PATTERN_LEN = 5'd16; + + localparam COUNT_MAX = PATTERN_LEN - 1'h1; + + reg[3:0] count = 0; + always @(posedge CLK, negedge nRST) begin + + if(!nRST) + count <= 0; + + else begin + count <= count - 1'h1; + if(count == 0) + count <= COUNT_MAX; + end + end + + always @(*) + OUT = PATTERN_DATA[count]; + +endmodule + +module GP_SHREG(input nRST, input CLK, input IN, output OUTA, output OUTB); + + parameter OUTA_TAP = 1; + parameter OUTA_INVERT = 0; + parameter OUTB_TAP = 1; + + reg[15:0] shreg = 0; + + always @(posedge CLK, negedge nRST) begin + + if(!nRST) + shreg = 0; + + else + shreg <= {shreg[14:0], IN}; + + end + + assign OUTA = (OUTA_INVERT) ? ~shreg[OUTA_TAP - 1] : shreg[OUTA_TAP - 1]; + assign OUTB = shreg[OUTB_TAP - 1]; + +endmodule + +module GP_VDD(output OUT); + assign OUT = 1; +endmodule + +module GP_VSS(output OUT); + assign OUT = 0; +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/cells_sim_wip.v b/resources/netlist/resources/kernel/share/greenpak4/cells_sim_wip.v new file mode 100644 index 0000000..5261b12 --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/cells_sim_wip.v @@ -0,0 +1,136 @@ + +//Cells still in this file have INCOMPLETE simulation models, need to finish them + +module GP_DCMP(input[7:0] INP, input[7:0] INN, input CLK, input PWRDN, output reg GREATER, output reg EQUAL); + parameter PWRDN_SYNC = 1'b0; + parameter CLK_EDGE = "RISING"; + parameter GREATER_OR_EQUAL = 1'b0; + + //TODO implement power-down mode + + initial GREATER = 0; + initial EQUAL = 0; + + wire clk_minv = (CLK_EDGE == "RISING") ? CLK : ~CLK; + always @(posedge clk_minv) begin + if(GREATER_OR_EQUAL) + GREATER <= (INP >= INN); + else + GREATER <= (INP > INN); + + EQUAL <= (INP == INN); + end + +endmodule + +module GP_EDGEDET(input IN, output reg OUT); + + parameter EDGE_DIRECTION = "RISING"; + parameter DELAY_STEPS = 1; + parameter GLITCH_FILTER = 0; + + //not implemented for simulation + +endmodule + +module GP_RCOSC(input PWRDN, output reg CLKOUT_HARDIP, output reg CLKOUT_FABRIC); + + parameter PWRDN_EN = 0; + parameter AUTO_PWRDN = 0; + parameter HARDIP_DIV = 1; + parameter FABRIC_DIV = 1; + parameter OSC_FREQ = "25k"; + + initial CLKOUT_HARDIP = 0; + initial CLKOUT_FABRIC = 0; + + //output dividers not implemented for simulation + //auto powerdown not implemented for simulation + + always begin + if(PWRDN) begin + CLKOUT_HARDIP = 0; + CLKOUT_FABRIC = 0; + end + else begin + + if(OSC_FREQ == "25k") begin + //half period of 25 kHz + #20000; + end + + else begin + //half period of 2 MHz + #250; + end + + CLKOUT_HARDIP = ~CLKOUT_HARDIP; + CLKOUT_FABRIC = ~CLKOUT_FABRIC; + end + end + +endmodule + +module GP_RINGOSC(input PWRDN, output reg CLKOUT_HARDIP, output reg CLKOUT_FABRIC); + + parameter PWRDN_EN = 0; + parameter AUTO_PWRDN = 0; + parameter HARDIP_DIV = 1; + parameter FABRIC_DIV = 1; + + initial CLKOUT_HARDIP = 0; + initial CLKOUT_FABRIC = 0; + + //output dividers not implemented for simulation + //auto powerdown not implemented for simulation + + always begin + if(PWRDN) begin + CLKOUT_HARDIP = 0; + CLKOUT_FABRIC = 0; + end + else begin + //half period of 27 MHz + #18.518; + CLKOUT_HARDIP = ~CLKOUT_HARDIP; + CLKOUT_FABRIC = ~CLKOUT_FABRIC; + end + end + +endmodule + +module GP_SPI( + input SCK, + inout SDAT, + input CSN, + input[7:0] TXD_HIGH, + input[7:0] TXD_LOW, + output reg[7:0] RXD_HIGH, + output reg[7:0] RXD_LOW, + output reg INT); + + initial RXD_HIGH = 0; + initial RXD_LOW = 0; + initial INT = 0; + + parameter DATA_WIDTH = 8; //byte or word width + parameter SPI_CPHA = 0; //SPI clock phase + parameter SPI_CPOL = 0; //SPI clock polarity + parameter DIRECTION = "INPUT"; //SPI data direction (either input to chip or output to host) + //parallel output to fabric not yet implemented + + //TODO: write sim model + //TODO: SPI SDIO control... can we use ADC output while SPI is input?? + //TODO: clock sync + +endmodule + +//keep constraint needed to prevent optimization since we have no outputs +(* keep *) +module GP_SYSRESET(input RST); + parameter RESET_MODE = "EDGE"; + parameter EDGE_SPEED = 4; + + //cannot simulate whole system reset + +endmodule diff --git a/resources/netlist/resources/kernel/share/greenpak4/gp_dff.lib b/resources/netlist/resources/kernel/share/greenpak4/gp_dff.lib new file mode 100644 index 0000000..b4b8c10 --- /dev/null +++ b/resources/netlist/resources/kernel/share/greenpak4/gp_dff.lib @@ -0,0 +1,36 @@ +library(gp_dff) { + cell(GP_DFF) { + area: 1; + ff("IQ", "IQN") { clocked_on: CLK; + next_state: D; } + pin(CLK) { direction: input; + clock: true; } + pin(D) { direction: input; } + pin(Q) { direction: output; + function: "IQ"; } + } + cell(GP_DFFS) { + area: 1; + ff("IQ", "IQN") { clocked_on: CLK; + next_state: D; + preset: "nSET'"; } + pin(CLK) { direction: input; + clock: true; } + pin(D) { direction: input; } + pin(Q) { direction: output; + function: "IQ"; } + pin(nSET) { direction: input; } + } + cell(GP_DFFR) { + area: 1; + ff("IQ", "IQN") { clocked_on: CLK; + next_state: D; + clear: "nRST'"; } + pin(CLK) { direction: input; + clock: true; } + pin(D) { direction: input; } + pin(Q) { direction: output; + function: "IQ"; } + pin(nRST) { direction: input; } + } +} diff --git a/resources/netlist/resources/kernel/share/ice40/abc9_model.v b/resources/netlist/resources/kernel/share/ice40/abc9_model.v new file mode 100644 index 0000000..3e3ca94 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/abc9_model.v @@ -0,0 +1,86 @@ +(* abc9_box, lib_whitebox *) +module \$__ICE40_CARRY_WRAPPER ( + (* abc9_carry *) + output CO, + output O, + input A, B, + (* abc9_carry *) + input CI, + input I0, I3 +); + parameter LUT = 0; + parameter I3_IS_CI = 0; + wire I3_OR_CI = I3_IS_CI ? CI : I3; + SB_CARRY carry ( + .I0(A), + .I1(B), + .CI(CI), + .CO(CO) + ); + SB_LUT4 #( + .LUT_INIT(LUT) + ) adder ( + .I0(I0), + .I1(A), + .I2(B), + .I3(I3_OR_CI), + .O(O) + ); +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L79 + (CI => CO) = (126, 105); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L80 + (I0 => O) = (449, 386); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L82 + (A => CO) = (259, 245); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L83 + (A => O) = (400, 379); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L85 + (B => CO) = (231, 133); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L86 + (B => O) = (379, 351); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L88 + (I3 => O) = (316, 288); + (CI => O) = (316, 288); + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L79 + (CI => CO) = (186, 155); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L80 + (I0 => O) = (662, 569); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L82 + (A => CO) = (382, 362); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L83 + (A => O) = (589, 558); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L85 + (B => CO) = (341, 196); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L86 + (B => O) = (558, 517); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L88 + (I3 => O) = (465, 423); + (CI => O) = (465, 423); + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L91 + (CI => CO) = (278, 278); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L92 + (I0 => O) = (1245, 1285); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L94 + (A => CO) = (675, 662); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L95 + (A => O) = (1179, 1232); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L97 + (B => CO) = (609, 358); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L98 + (B => O) = (1179, 1205); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L100 + (I3 => O) = (861, 874); + (CI => O) = (861, 874); + endspecify +`endif +endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/arith_map.v b/resources/netlist/resources/kernel/share/ice40/arith_map.v new file mode 100644 index 0000000..087220e --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/arith_map.v @@ -0,0 +1,75 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_ice40_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] C = {CO, CI}; + + genvar i; + generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice + \$__ICE40_CARRY_WRAPPER #( + // A[0]: 1010 1010 1010 1010 + // A[1]: 1100 1100 1100 1100 + // A[2]: 1111 0000 1111 0000 + // A[3]: 1111 1111 0000 0000 + .LUT(16'b 0110_1001_1001_0110), + .I3_IS_CI(1'b1) + ) carry ( + .A(AA[i]), + .B(BB[i]), + .CI(C[i]), + .I0(1'b0), + .I3(1'bx), + .CO(CO[i]), + .O(Y[i]) + ); + end endgenerate + + assign X = AA ^ BB; +endmodule + diff --git a/resources/netlist/resources/kernel/share/ice40/brams.txt b/resources/netlist/resources/kernel/share/ice40/brams.txt new file mode 100644 index 0000000..518972c --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/brams.txt @@ -0,0 +1,23 @@ +ram block $__ICE40_RAM4K_ { + abits 11; + widths 2 4 8 16 per_port; + cost 64; + option "HAS_BE" 1 { + byte 1; + } + init any; + port sw "W" { + option "HAS_BE" 0 { + width 2 4 8; + } + option "HAS_BE" 1 { + width 16; + wrbe_separate; + } + clock anyedge; + } + port sr "R" { + clock anyedge; + rden; + } +} diff --git a/resources/netlist/resources/kernel/share/ice40/brams_map.v b/resources/netlist/resources/kernel/share/ice40/brams_map.v new file mode 100644 index 0000000..9d7b793 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/brams_map.v @@ -0,0 +1,218 @@ +module $__ICE40_RAM4K_ (...); + +parameter INIT = 0; +parameter OPTION_HAS_BE = 1; +parameter PORT_R_WIDTH = 16; +parameter PORT_W_WIDTH = 16; +parameter PORT_W_WR_BE_WIDTH = 16; +parameter PORT_R_CLK_POL = 1; +parameter PORT_W_CLK_POL = 1; + +input PORT_R_CLK; +input PORT_R_RD_EN; +input [10:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +input PORT_W_CLK; +input PORT_W_WR_EN; +input [15:0] PORT_W_WR_BE; +input [10:0] PORT_W_ADDR; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +wire [15:0] RDATA; +wire [15:0] WDATA; +wire [15:0] MASK; +wire [10:0] RADDR = {PORT_R_ADDR[0], PORT_R_ADDR[1], PORT_R_ADDR[2], PORT_R_ADDR[10:3]}; +wire [10:0] WADDR = {PORT_W_ADDR[0], PORT_W_ADDR[1], PORT_W_ADDR[2], PORT_W_ADDR[10:3]}; + +function [1:0] mode; + input integer width; + case (width) + 16: mode = 0; + 8: mode = 1; + 4: mode = 2; + 2: mode = 3; + endcase +endfunction + +function [255:0] slice_init; + input [3:0] idx; + integer i; + reg [7:0] ri; + reg [11:0] a; + for (i = 0; i < 256; i = i + 1) begin + ri = i; + a = {idx, ri[7:4], ri[0], ri[1], ri[2], ri[3]}; + slice_init[i] = INIT[a]; + end +endfunction + +`define INSTANCE(type, rclk, wclk) \ + type #( \ + .INIT_0(slice_init(0)), \ + .INIT_1(slice_init(1)), \ + .INIT_2(slice_init(2)), \ + .INIT_3(slice_init(3)), \ + .INIT_4(slice_init(4)), \ + .INIT_5(slice_init(5)), \ + .INIT_6(slice_init(6)), \ + .INIT_7(slice_init(7)), \ + .INIT_8(slice_init(8)), \ + .INIT_9(slice_init(9)), \ + .INIT_A(slice_init(10)), \ + .INIT_B(slice_init(11)), \ + .INIT_C(slice_init(12)), \ + .INIT_D(slice_init(13)), \ + .INIT_E(slice_init(14)), \ + .INIT_F(slice_init(15)), \ + .READ_MODE(mode(PORT_R_WIDTH)), \ + .WRITE_MODE(mode(PORT_W_WIDTH)) \ + ) _TECHMAP_REPLACE_ ( \ + .RDATA(RDATA), \ + .rclk(PORT_R_CLK), \ + .RCLKE(PORT_R_RD_EN), \ + .RE(1'b1), \ + .RADDR(RADDR), \ + .WDATA(WDATA), \ + .wclk(PORT_W_CLK), \ + .WCLKE(PORT_W_WR_EN), \ + .WE(1'b1), \ + .WADDR(WADDR), \ + .MASK(MASK), \ + ); + +generate + +case(PORT_R_WIDTH) + 2: begin + assign PORT_R_RD_DATA = { + RDATA[11], + RDATA[3] + }; + end + 4: begin + assign PORT_R_RD_DATA = { + RDATA[13], + RDATA[5], + RDATA[9], + RDATA[1] + }; + end + 8: begin + assign PORT_R_RD_DATA = { + RDATA[14], + RDATA[6], + RDATA[10], + RDATA[2], + RDATA[12], + RDATA[4], + RDATA[8], + RDATA[0] + }; + end + 16: begin + assign PORT_R_RD_DATA = { + RDATA[15], + RDATA[7], + RDATA[11], + RDATA[3], + RDATA[13], + RDATA[5], + RDATA[9], + RDATA[1], + RDATA[14], + RDATA[6], + RDATA[10], + RDATA[2], + RDATA[12], + RDATA[4], + RDATA[8], + RDATA[0] + }; + end +endcase + +case(PORT_W_WIDTH) + 2: begin + assign { + WDATA[11], + WDATA[3] + } = PORT_W_WR_DATA; + end + 4: begin + assign { + WDATA[13], + WDATA[5], + WDATA[9], + WDATA[1] + } = PORT_W_WR_DATA; + end + 8: begin + assign { + WDATA[14], + WDATA[6], + WDATA[10], + WDATA[2], + WDATA[12], + WDATA[4], + WDATA[8], + WDATA[0] + } = PORT_W_WR_DATA; + end + 16: begin + assign WDATA = { + PORT_W_WR_DATA[15], + PORT_W_WR_DATA[7], + PORT_W_WR_DATA[11], + PORT_W_WR_DATA[3], + PORT_W_WR_DATA[13], + PORT_W_WR_DATA[5], + PORT_W_WR_DATA[9], + PORT_W_WR_DATA[1], + PORT_W_WR_DATA[14], + PORT_W_WR_DATA[6], + PORT_W_WR_DATA[10], + PORT_W_WR_DATA[2], + PORT_W_WR_DATA[12], + PORT_W_WR_DATA[4], + PORT_W_WR_DATA[8], + PORT_W_WR_DATA[0] + }; + assign MASK = ~{ + PORT_W_WR_BE[15], + PORT_W_WR_BE[7], + PORT_W_WR_BE[11], + PORT_W_WR_BE[3], + PORT_W_WR_BE[13], + PORT_W_WR_BE[5], + PORT_W_WR_BE[9], + PORT_W_WR_BE[1], + PORT_W_WR_BE[14], + PORT_W_WR_BE[6], + PORT_W_WR_BE[10], + PORT_W_WR_BE[2], + PORT_W_WR_BE[12], + PORT_W_WR_BE[4], + PORT_W_WR_BE[8], + PORT_W_WR_BE[0] + }; + end +endcase + +if (PORT_R_CLK_POL) begin + if (PORT_W_CLK_POL) begin + `INSTANCE(SB_RAM40_4K, RCLK, WCLK) + end else begin + `INSTANCE(SB_RAM40_4KNW, RCLK, WCLKN) + end +end else begin + if (PORT_W_CLK_POL) begin + `INSTANCE(SB_RAM40_4KNR, RCLKN, WCLK) + end else begin + `INSTANCE(SB_RAM40_4KNRNW, RCLKN, WCLKN) + end +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/cells_map.v b/resources/netlist/resources/kernel/share/ice40/cells_map.v new file mode 100644 index 0000000..7e5c078 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/cells_map.v @@ -0,0 +1,32 @@ +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + localparam [15:0] INIT = {{8{LUT[1]}}, {8{LUT[0]}}}; + SB_LUT4 #(.LUT_INIT(INIT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(1'b0), .I1(1'b0), .I2(1'b0), .I3(A[0])); + end else + if (WIDTH == 2) begin + localparam [15:0] INIT = {{4{LUT[3]}}, {4{LUT[2]}}, {4{LUT[1]}}, {4{LUT[0]}}}; + SB_LUT4 #(.LUT_INIT(INIT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(1'b0), .I1(1'b0), .I2(A[0]), .I3(A[1])); + end else + if (WIDTH == 3) begin + localparam [15:0] INIT = {{2{LUT[7]}}, {2{LUT[6]}}, {2{LUT[5]}}, {2{LUT[4]}}, {2{LUT[3]}}, {2{LUT[2]}}, {2{LUT[1]}}, {2{LUT[0]}}}; + SB_LUT4 #(.LUT_INIT(INIT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(1'b0), .I1(A[0]), .I2(A[1]), .I3(A[2])); + end else + if (WIDTH == 4) begin + SB_LUT4 #(.LUT_INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2]), .I3(A[3])); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/cells_sim.v b/resources/netlist/resources/kernel/share/ice40/cells_sim.v new file mode 100644 index 0000000..52e8e2e --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/cells_sim.v @@ -0,0 +1,3502 @@ +`timescale 1ps / 1ps +`define SB_DFF_INIT initial Q = 0; +// `define SB_DFF_INIT + +`ifndef NO_ICE40_DEFAULT_ASSIGNMENTS +`define ICE40_DEFAULT_ASSIGNMENT_V(v) = v +`define ICE40_DEFAULT_ASSIGNMENT_0 = 1'b0 +`define ICE40_DEFAULT_ASSIGNMENT_1 = 1'b1 +`else +`define ICE40_DEFAULT_ASSIGNMENT_V(v) +`define ICE40_DEFAULT_ASSIGNMENT_0 +`define ICE40_DEFAULT_ASSIGNMENT_1 +`endif + +// SiliconBlue IO Cells + +module SB_IO ( + inout PACKAGE_PIN, + input LATCH_INPUT_VALUE, + input CLOCK_ENABLE `ICE40_DEFAULT_ASSIGNMENT_1, + input INPUT_CLK, + input OUTPUT_CLK, + input OUTPUT_ENABLE, + input D_OUT_0, + input D_OUT_1, + output D_IN_0, + output D_IN_1 +); + parameter [5:0] PIN_TYPE = 6'b000000; + parameter [0:0] PULLUP = 1'b0; + parameter [0:0] NEG_TRIGGER = 1'b0; + parameter IO_STANDARD = "SB_LVCMOS"; + +`ifndef BLACKBOX + reg dout, din_0, din_1; + reg din_q_0, din_q_1; + reg dout_q_0, dout_q_1; + reg outena_q; + + // IO tile generates a constant 1'b1 internally if global_cen is not connected + wire clken_pulled = CLOCK_ENABLE || CLOCK_ENABLE === 1'bz; + reg clken_pulled_ri; + reg clken_pulled_ro; + + generate if (!NEG_TRIGGER) begin + always @(posedge INPUT_CLK) clken_pulled_ri <= clken_pulled; + always @(posedge INPUT_CLK) if (clken_pulled) din_q_0 <= PACKAGE_PIN; + always @(negedge INPUT_CLK) if (clken_pulled_ri) din_q_1 <= PACKAGE_PIN; + always @(posedge OUTPUT_CLK) clken_pulled_ro <= clken_pulled; + always @(posedge OUTPUT_CLK) if (clken_pulled) dout_q_0 <= D_OUT_0; + always @(negedge OUTPUT_CLK) if (clken_pulled_ro) dout_q_1 <= D_OUT_1; + always @(posedge OUTPUT_CLK) if (clken_pulled) outena_q <= OUTPUT_ENABLE; + end else begin + always @(negedge INPUT_CLK) clken_pulled_ri <= clken_pulled; + always @(negedge INPUT_CLK) if (clken_pulled) din_q_0 <= PACKAGE_PIN; + always @(posedge INPUT_CLK) if (clken_pulled_ri) din_q_1 <= PACKAGE_PIN; + always @(negedge OUTPUT_CLK) clken_pulled_ro <= clken_pulled; + always @(negedge OUTPUT_CLK) if (clken_pulled) dout_q_0 <= D_OUT_0; + always @(posedge OUTPUT_CLK) if (clken_pulled_ro) dout_q_1 <= D_OUT_1; + always @(negedge OUTPUT_CLK) if (clken_pulled) outena_q <= OUTPUT_ENABLE; + end endgenerate + + always @* begin + if (!PIN_TYPE[1] || !LATCH_INPUT_VALUE) + din_0 = PIN_TYPE[0] ? PACKAGE_PIN : din_q_0; + din_1 = din_q_1; + end + + // work around simulation glitches on dout in DDR mode + reg outclk_delayed_1; + reg outclk_delayed_2; + always @* outclk_delayed_1 <= OUTPUT_CLK; + always @* outclk_delayed_2 <= outclk_delayed_1; + + always @* begin + if (PIN_TYPE[3]) + dout = PIN_TYPE[2] ? !dout_q_0 : D_OUT_0; + else + dout = (outclk_delayed_2 ^ NEG_TRIGGER) || PIN_TYPE[2] ? dout_q_0 : dout_q_1; + end + + assign D_IN_0 = din_0, D_IN_1 = din_1; + + generate + if (PIN_TYPE[5:4] == 2'b01) assign PACKAGE_PIN = dout; + if (PIN_TYPE[5:4] == 2'b10) assign PACKAGE_PIN = OUTPUT_ENABLE ? dout : 1'bz; + if (PIN_TYPE[5:4] == 2'b11) assign PACKAGE_PIN = outena_q ? dout : 1'bz; + endgenerate +`endif +`ifdef TIMING +specify + (INPUT_CLK => D_IN_0) = (0:0:0, 0:0:0); + (INPUT_CLK => D_IN_1) = (0:0:0, 0:0:0); + (PACKAGE_PIN => D_IN_0) = (0:0:0, 0:0:0); + (OUTPUT_CLK => PACKAGE_PIN) = (0:0:0, 0:0:0); + (D_OUT_0 => PACKAGE_PIN) = (0:0:0, 0:0:0); + (OUTPUT_ENABLE => PACKAGE_PIN) = (0:0:0, 0:0:0); + + $setuphold(posedge OUTPUT_CLK, posedge D_OUT_0, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, negedge D_OUT_0, 0:0:0, 0:0:0); + $setuphold(negedge OUTPUT_CLK, posedge D_OUT_1, 0:0:0, 0:0:0); + $setuphold(negedge OUTPUT_CLK, negedge D_OUT_1, 0:0:0, 0:0:0); + $setuphold(negedge OUTPUT_CLK, posedge D_OUT_0, 0:0:0, 0:0:0); + $setuphold(negedge OUTPUT_CLK, negedge D_OUT_0, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, posedge D_OUT_1, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, negedge D_OUT_1, 0:0:0, 0:0:0); + $setuphold(posedge INPUT_CLK, posedge CLOCK_ENABLE, 0:0:0, 0:0:0); + $setuphold(posedge INPUT_CLK, negedge CLOCK_ENABLE, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, posedge CLOCK_ENABLE, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, negedge CLOCK_ENABLE, 0:0:0, 0:0:0); + $setuphold(posedge INPUT_CLK, posedge PACKAGE_PIN, 0:0:0, 0:0:0); + $setuphold(posedge INPUT_CLK, negedge PACKAGE_PIN, 0:0:0, 0:0:0); + $setuphold(negedge INPUT_CLK, posedge PACKAGE_PIN, 0:0:0, 0:0:0); + $setuphold(negedge INPUT_CLK, negedge PACKAGE_PIN, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, posedge OUTPUT_ENABLE, 0:0:0, 0:0:0); + $setuphold(posedge OUTPUT_CLK, negedge OUTPUT_ENABLE, 0:0:0, 0:0:0); + $setuphold(negedge OUTPUT_CLK, posedge OUTPUT_ENABLE, 0:0:0, 0:0:0); + $setuphold(negedge OUTPUT_CLK, negedge OUTPUT_ENABLE, 0:0:0, 0:0:0); +endspecify +`endif +endmodule + +module SB_GB_IO ( + inout PACKAGE_PIN, + output GLOBAL_BUFFER_OUTPUT, + input LATCH_INPUT_VALUE, + input CLOCK_ENABLE `ICE40_DEFAULT_ASSIGNMENT_1, + input INPUT_CLK, + input OUTPUT_CLK, + input OUTPUT_ENABLE, + input D_OUT_0, + input D_OUT_1, + output D_IN_0, + output D_IN_1 +); + parameter [5:0] PIN_TYPE = 6'b000000; + parameter [0:0] PULLUP = 1'b0; + parameter [0:0] NEG_TRIGGER = 1'b0; + parameter IO_STANDARD = "SB_LVCMOS"; + + assign GLOBAL_BUFFER_OUTPUT = PACKAGE_PIN; + + SB_IO #( + .PIN_TYPE(PIN_TYPE), + .PULLUP(PULLUP), + .NEG_TRIGGER(NEG_TRIGGER), + .IO_STANDARD(IO_STANDARD) + ) IO ( + .PACKAGE_PIN(PACKAGE_PIN), + .LATCH_INPUT_VALUE(LATCH_INPUT_VALUE), + .CLOCK_ENABLE(CLOCK_ENABLE), + .INPUT_CLK(INPUT_CLK), + .OUTPUT_CLK(OUTPUT_CLK), + .OUTPUT_ENABLE(OUTPUT_ENABLE), + .D_OUT_0(D_OUT_0), + .D_OUT_1(D_OUT_1), + .D_IN_0(D_IN_0), + .D_IN_1(D_IN_1) + ); +endmodule + +module SB_GB ( + input USER_SIGNAL_TO_GLOBAL_BUFFER, + output GLOBAL_BUFFER_OUTPUT +); + assign GLOBAL_BUFFER_OUTPUT = USER_SIGNAL_TO_GLOBAL_BUFFER; +`ifdef TIMING +specify + (USER_SIGNAL_TO_GLOBAL_BUFFER => GLOBAL_BUFFER_OUTPUT) = (0:0:0, 0:0:0); +endspecify +`endif +endmodule + +// SiliconBlue Logic Cells + +(* abc9_lut=1, lib_whitebox *) +module SB_LUT4 ( + output O, + input I0 `ICE40_DEFAULT_ASSIGNMENT_0, + input I1 `ICE40_DEFAULT_ASSIGNMENT_0, + input I2 `ICE40_DEFAULT_ASSIGNMENT_0, + input I3 `ICE40_DEFAULT_ASSIGNMENT_0 +); + parameter [15:0] LUT_INIT = 0; + wire [7:0] s3 = I3 ? LUT_INIT[15:8] : LUT_INIT[7:0]; + wire [3:0] s2 = I2 ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = I1 ? s2[ 3:2] : s2[1:0]; + assign O = I0 ? s1[1] : s1[0]; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L80 + (I0 => O) = (449, 386); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L83 + (I1 => O) = (400, 379); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L86 + (I2 => O) = (379, 351); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L88 + (I3 => O) = (316, 288); + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L80 + (I0 => O) = (662, 569); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L83 + (I1 => O) = (589, 558); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L86 + (I2 => O) = (558, 517); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L88 + (I3 => O) = (465, 423); + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L92 + (I0 => O) = (1245, 1285); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L95 + (I1 => O) = (1179, 1232); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L98 + (I2 => O) = (1179, 1205); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L100 + (I3 => O) = (861, 874); + endspecify +`endif +endmodule + +(* lib_whitebox *) +module SB_CARRY (output CO, input I0, I1, CI); + assign CO = (I0 && I1) || ((I0 || I1) && CI); +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L79 + (CI => CO) = (126, 105); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L82 + (I0 => CO) = (259, 245); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_hx1k.txt#L85 + (I1 => CO) = (231, 133); + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L79 + (CI => CO) = (186, 155); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L82 + (I0 => CO) = (382, 362); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_lp1k.txt#L85 + (I1 => CO) = (341, 196); + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L91 + (CI => CO) = (278, 278); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L94 + (I0 => CO) = (675, 662); + // https://github.com/YosysHQ/icestorm/blob/be0bca0230d6fe1102e0a360b953fbb0d273a39f/icefuzz/timings_up5k.txt#L97 + (I1 => CO) = (609, 358); + endspecify +`endif +endmodule + +// Positive Edge SiliconBlue FF Cells + +(* abc9_flop, lib_whitebox *) +module SB_DFF ( + output reg Q, + input C, D +); + `SB_DFF_INIT + + always @(posedge C) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFE ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input D +); + `SB_DFF_INIT + + always @(posedge C) + if (E) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C &&& E, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFSR ( + output reg Q, + input C, R, D +); + `SB_DFF_INIT + + always @(posedge C) + if (R) + Q <= 0; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setup(R, posedge C, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if ( R) (posedge C => (Q : 1'b0)) = 540; + if (!R) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(R, posedge C, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if ( R) (posedge C => (Q : 1'b0)) = 796; + if (!R) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(R, posedge C, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if ( R) (posedge C => (Q : 1'b0)) = 1391; + if (!R) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFR ( + output reg Q, + input C, R, D +); + `SB_DFF_INIT + + always @(posedge C, posedge R) + if (R) + Q <= 0; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(negedge R, posedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 599; +`else + if (R) (R => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (!R) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(negedge R, posedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 883; +`else + if (R) (R => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (!R) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge R, posedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 1589; +`else + if (R) (R => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (!R) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFSS ( + output reg Q, + input C, S, D +); + `SB_DFF_INIT + + always @(posedge C) + if (S) + Q <= 1; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setup(S, posedge C, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if ( S) (posedge C => (Q : 1'b1)) = 540; + if (!S) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(S, posedge C, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if ( S) (posedge C => (Q : 1'b1)) = 796; + if (!S) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(S, posedge C, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if ( S) (posedge C => (Q : 1'b1)) = 1391; + if (!S) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFS ( + output reg Q, + input C, S, D +); + `SB_DFF_INIT + + always @(posedge C, posedge S) + if (S) + Q <= 1; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(negedge S, posedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 599; +`else + if (S) (S => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (!S) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(negedge S, posedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 883; +`else + if (S) (S => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (!S) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge S, posedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 1589; +`else + if (S) (S => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (!S) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFESR ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input R, + input D +); + `SB_DFF_INIT + + always @(posedge C) + if (E) begin + if (R) + Q <= 0; + else + Q <= D; + end +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C &&& E && !R, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setup(R, posedge C &&& E, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && R) (posedge C => (Q : 1'b0)) = 540; + if (E && !R) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E && !R, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(R, posedge C &&& E, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && R) (posedge C => (Q : 1'b0)) = 796; + if (E && !R) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(R, posedge C &&& E, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && R) (posedge C => (Q : 1'b0)) = 1391; + if (E && !R) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFER ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input R, + input D +); + `SB_DFF_INIT + + always @(posedge C, posedge R) + if (R) + Q <= 0; + else if (E) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C &&& E, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(negedge R, posedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 599; +`else + if (R) (R => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && !R) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(negedge R, posedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 883; +`else + if (R) (R => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && !R) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge R, posedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 1589; +`else + if (R) (R => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && !R) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFESS ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input S, + input D +); + `SB_DFF_INIT + + always @(posedge C) + if (E) begin + if (S) + Q <= 1; + else + Q <= D; + end +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C &&& E && !S, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setup(S, posedge C &&& E, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && S) (posedge C => (Q : 1'b1)) = 540; + if (E && !S) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E && !S, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(S, posedge C &&& E, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && S) (posedge C => (Q : 1'b1)) = 796; + if (E && !S) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(S, posedge C &&& E, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && S) (posedge C => (Q : 1'b1)) = 1391; + if (E && !S) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFES ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input S, + input D +); + `SB_DFF_INIT + + always @(posedge C, posedge S) + if (S) + Q <= 1; + else if (E) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, posedge C &&& E, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(posedge S, posedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 599; +`else + if (S) (S => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && !S) (posedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(posedge S, posedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 883; +`else + if (S) (S => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && !S) (posedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, posedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, posedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(posedge S, posedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 1589; +`else + if (S) (S => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && !S) (posedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +// Negative Edge SiliconBlue FF Cells + +(* abc9_flop, lib_whitebox *) +module SB_DFFN ( + output reg Q, + input C, D +); + `SB_DFF_INIT + + always @(negedge C) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFNE ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input D +); + `SB_DFF_INIT + + always @(negedge C) + if (E) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C &&& E, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFNSR ( + output reg Q, + input C, R, D +); + `SB_DFF_INIT + + always @(negedge C) + if (R) + Q <= 0; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(R, negedge C, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if ( R) (negedge C => (Q : 1'b0)) = 540; + if (!R) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(R, negedge C, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if ( R) (negedge C => (Q : 1'b0)) = 796; + if (!R) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(R, negedge C, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if ( R) (negedge C => (Q : 1'b0)) = 1391; + if (!R) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFNR ( + output reg Q, + input C, R, D +); + `SB_DFF_INIT + + always @(negedge C, posedge R) + if (R) + Q <= 0; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(negedge R, negedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 599; +`else + if (R) (R => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (!R) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(negedge R, negedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 883; +`else + if (R) (R => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (!R) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge R, negedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 1589; +`else + if (R) (R => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (!R) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFNSS ( + output reg Q, + input C, S, D +); + `SB_DFF_INIT + + always @(negedge C) + if (S) + Q <= 1; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(S, negedge C, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if ( S) (negedge C => (Q : 1'b1)) = 540; + if (!S) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(S, negedge C, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if ( S) (negedge C => (Q : 1'b1)) = 796; + if (!S) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(S, negedge C, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if ( S) (negedge C => (Q : 1'b1)) = 1391; + if (!S) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFNS ( + output reg Q, + input C, S, D +); + `SB_DFF_INIT + + always @(negedge C, posedge S) + if (S) + Q <= 1; + else + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(negedge S, negedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 599; +`else + if (S) (S => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (!S) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(negedge S, negedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 883; +`else + if (S) (S => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (!S) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge S, negedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 1589; +`else + if (S) (S => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (!S) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFNESR ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input R, + input D +); + `SB_DFF_INIT + + always @(negedge C) + if (E) begin + if (R) + Q <= 0; + else + Q <= D; + end +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C &&& E && !R, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setup(R, negedge C &&& E, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && R) (negedge C => (Q : 1'b0)) = 540; + if (E && !R) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E && !R, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(R, negedge C &&& E, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && R) (negedge C => (Q : 1'b0)) = 796; + if (E && !R) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(R, negedge C &&& E, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && R) (negedge C => (Q : 1'b0)) = 1391; + if (E && !R) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFNER ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input R, + input D +); + `SB_DFF_INIT + + always @(negedge C, posedge R) + if (R) + Q <= 0; + else if (E) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C &&& E, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(R, negedge C, 2160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 599; +`else + if (R) (R => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && !R) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(R, negedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 883; +`else + if (R) (R => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && !R) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge R, negedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge R => (Q : 1'b0)) = 1589; +`else + if (R) (R => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && !R) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_flop, lib_whitebox *) +module SB_DFFNESS ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input S, + input D +); + `SB_DFF_INIT + + always @(negedge C) + if (E) begin + if (S) + Q <= 1; + else + Q <= D; + end +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C &&& E && !S, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setup(S, negedge C &&& E, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && S) (negedge C => (Q : 1'b1)) = 540; + if (E && !S) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E && !S, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setup(S, negedge C &&& E, 299); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && S) (negedge C => (Q : 1'b1)) = 796; + if (E && !S) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setup(S, negedge C &&& E, 530); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && S) (negedge C => (Q : 1'b1)) = 1391; + if (E && !S) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +(* abc9_box, lib_whitebox *) +module SB_DFFNES ( + output reg Q, + input C, + input E `ICE40_DEFAULT_ASSIGNMENT_1, + input S, + input D +); + `SB_DFF_INIT + + always @(negedge C, posedge S) + if (S) + Q <= 1; + else if (E) + Q <= D; +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + $setup(D, negedge C &&& E, 470 - 449); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L63 + $setup(negedge S, negedge C, 160); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 599; +`else + if (S) (S => Q) = 599; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + if (E && !S) (negedge C => (Q : D)) = 540; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, 693 - 662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L63 + $setup(negedge S, negedge C, 235); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 883; +`else + if (S) (S => Q) = 883; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + if (E && !S) (negedge C => (Q : D)) = 796; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + // minus https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + $setup(D, negedge C &&& E, /*1232 - 1285*/ 0); // Negative times not currently supported + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setup(E, negedge C, 0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L75 + $setup(negedge S, negedge C, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103 +`ifndef YOSYS + (posedge S => (Q : 1'b1)) = 1589; +`else + if (S) (S => Q) = 1589; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + if (E && !S) (negedge C => (Q : D)) = 1391; + endspecify +`endif +endmodule + +// SiliconBlue RAM Cells + +module SB_RAM40_4K ( + output [15:0] RDATA, + input RCLK, + input RCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input RE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] RADDR, + input WCLK, + input WCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input WE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] WADDR, + input [15:0] MASK `ICE40_DEFAULT_ASSIGNMENT_V(16'h 0000), + input [15:0] WDATA +); + // MODE 0: 256 x 16 + // MODE 1: 512 x 8 + // MODE 2: 1024 x 4 + // MODE 3: 2048 x 2 + parameter WRITE_MODE = 0; + parameter READ_MODE = 0; + + parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + + parameter INIT_FILE = ""; + +`ifndef BLACKBOX + wire [15:0] WMASK_I; + wire [15:0] RMASK_I; + + reg [15:0] RDATA_I; + wire [15:0] WDATA_I; + + generate + case (WRITE_MODE) + 0: assign WMASK_I = MASK; + + 1: assign WMASK_I = WADDR[ 8] == 0 ? 16'b 1010_1010_1010_1010 : + WADDR[ 8] == 1 ? 16'b 0101_0101_0101_0101 : 16'bx; + + 2: assign WMASK_I = WADDR[ 9:8] == 0 ? 16'b 1110_1110_1110_1110 : + WADDR[ 9:8] == 1 ? 16'b 1101_1101_1101_1101 : + WADDR[ 9:8] == 2 ? 16'b 1011_1011_1011_1011 : + WADDR[ 9:8] == 3 ? 16'b 0111_0111_0111_0111 : 16'bx; + + 3: assign WMASK_I = WADDR[10:8] == 0 ? 16'b 1111_1110_1111_1110 : + WADDR[10:8] == 1 ? 16'b 1111_1101_1111_1101 : + WADDR[10:8] == 2 ? 16'b 1111_1011_1111_1011 : + WADDR[10:8] == 3 ? 16'b 1111_0111_1111_0111 : + WADDR[10:8] == 4 ? 16'b 1110_1111_1110_1111 : + WADDR[10:8] == 5 ? 16'b 1101_1111_1101_1111 : + WADDR[10:8] == 6 ? 16'b 1011_1111_1011_1111 : + WADDR[10:8] == 7 ? 16'b 0111_1111_0111_1111 : 16'bx; + endcase + + case (READ_MODE) + 0: assign RMASK_I = 16'b 0000_0000_0000_0000; + + 1: assign RMASK_I = RADDR[ 8] == 0 ? 16'b 1010_1010_1010_1010 : + RADDR[ 8] == 1 ? 16'b 0101_0101_0101_0101 : 16'bx; + + 2: assign RMASK_I = RADDR[ 9:8] == 0 ? 16'b 1110_1110_1110_1110 : + RADDR[ 9:8] == 1 ? 16'b 1101_1101_1101_1101 : + RADDR[ 9:8] == 2 ? 16'b 1011_1011_1011_1011 : + RADDR[ 9:8] == 3 ? 16'b 0111_0111_0111_0111 : 16'bx; + + 3: assign RMASK_I = RADDR[10:8] == 0 ? 16'b 1111_1110_1111_1110 : + RADDR[10:8] == 1 ? 16'b 1111_1101_1111_1101 : + RADDR[10:8] == 2 ? 16'b 1111_1011_1111_1011 : + RADDR[10:8] == 3 ? 16'b 1111_0111_1111_0111 : + RADDR[10:8] == 4 ? 16'b 1110_1111_1110_1111 : + RADDR[10:8] == 5 ? 16'b 1101_1111_1101_1111 : + RADDR[10:8] == 6 ? 16'b 1011_1111_1011_1111 : + RADDR[10:8] == 7 ? 16'b 0111_1111_0111_1111 : 16'bx; + endcase + + case (WRITE_MODE) + 0: assign WDATA_I = WDATA; + + 1: assign WDATA_I = {WDATA[14], WDATA[14], WDATA[12], WDATA[12], + WDATA[10], WDATA[10], WDATA[ 8], WDATA[ 8], + WDATA[ 6], WDATA[ 6], WDATA[ 4], WDATA[ 4], + WDATA[ 2], WDATA[ 2], WDATA[ 0], WDATA[ 0]}; + + 2: assign WDATA_I = {WDATA[13], WDATA[13], WDATA[13], WDATA[13], + WDATA[ 9], WDATA[ 9], WDATA[ 9], WDATA[ 9], + WDATA[ 5], WDATA[ 5], WDATA[ 5], WDATA[ 5], + WDATA[ 1], WDATA[ 1], WDATA[ 1], WDATA[ 1]}; + + 3: assign WDATA_I = {WDATA[11], WDATA[11], WDATA[11], WDATA[11], + WDATA[11], WDATA[11], WDATA[11], WDATA[11], + WDATA[ 3], WDATA[ 3], WDATA[ 3], WDATA[ 3], + WDATA[ 3], WDATA[ 3], WDATA[ 3], WDATA[ 3]}; + endcase + + case (READ_MODE) + 0: assign RDATA = RDATA_I; + 1: assign RDATA = {1'b0, |RDATA_I[15:14], 1'b0, |RDATA_I[13:12], 1'b0, |RDATA_I[11:10], 1'b0, |RDATA_I[ 9: 8], + 1'b0, |RDATA_I[ 7: 6], 1'b0, |RDATA_I[ 5: 4], 1'b0, |RDATA_I[ 3: 2], 1'b0, |RDATA_I[ 1: 0]}; + 2: assign RDATA = {2'b0, |RDATA_I[15:12], 3'b0, |RDATA_I[11: 8], 3'b0, |RDATA_I[ 7: 4], 3'b0, |RDATA_I[ 3: 0], 1'b0}; + 3: assign RDATA = {4'b0, |RDATA_I[15: 8], 7'b0, |RDATA_I[ 7: 0], 3'b0}; + endcase + endgenerate + + integer i; + reg [15:0] memory [0:255]; + + initial begin + if (INIT_FILE != "") + $readmemh(INIT_FILE, memory); + else + for (i=0; i<16; i=i+1) begin + memory[ 0*16 + i] = INIT_0[16*i +: 16]; + memory[ 1*16 + i] = INIT_1[16*i +: 16]; + memory[ 2*16 + i] = INIT_2[16*i +: 16]; + memory[ 3*16 + i] = INIT_3[16*i +: 16]; + memory[ 4*16 + i] = INIT_4[16*i +: 16]; + memory[ 5*16 + i] = INIT_5[16*i +: 16]; + memory[ 6*16 + i] = INIT_6[16*i +: 16]; + memory[ 7*16 + i] = INIT_7[16*i +: 16]; + memory[ 8*16 + i] = INIT_8[16*i +: 16]; + memory[ 9*16 + i] = INIT_9[16*i +: 16]; + memory[10*16 + i] = INIT_A[16*i +: 16]; + memory[11*16 + i] = INIT_B[16*i +: 16]; + memory[12*16 + i] = INIT_C[16*i +: 16]; + memory[13*16 + i] = INIT_D[16*i +: 16]; + memory[14*16 + i] = INIT_E[16*i +: 16]; + memory[15*16 + i] = INIT_F[16*i +: 16]; + end + end + + always @(posedge WCLK) begin + if (WE && WCLKE) begin + if (!WMASK_I[ 0]) memory[WADDR[7:0]][ 0] <= WDATA_I[ 0]; + if (!WMASK_I[ 1]) memory[WADDR[7:0]][ 1] <= WDATA_I[ 1]; + if (!WMASK_I[ 2]) memory[WADDR[7:0]][ 2] <= WDATA_I[ 2]; + if (!WMASK_I[ 3]) memory[WADDR[7:0]][ 3] <= WDATA_I[ 3]; + if (!WMASK_I[ 4]) memory[WADDR[7:0]][ 4] <= WDATA_I[ 4]; + if (!WMASK_I[ 5]) memory[WADDR[7:0]][ 5] <= WDATA_I[ 5]; + if (!WMASK_I[ 6]) memory[WADDR[7:0]][ 6] <= WDATA_I[ 6]; + if (!WMASK_I[ 7]) memory[WADDR[7:0]][ 7] <= WDATA_I[ 7]; + if (!WMASK_I[ 8]) memory[WADDR[7:0]][ 8] <= WDATA_I[ 8]; + if (!WMASK_I[ 9]) memory[WADDR[7:0]][ 9] <= WDATA_I[ 9]; + if (!WMASK_I[10]) memory[WADDR[7:0]][10] <= WDATA_I[10]; + if (!WMASK_I[11]) memory[WADDR[7:0]][11] <= WDATA_I[11]; + if (!WMASK_I[12]) memory[WADDR[7:0]][12] <= WDATA_I[12]; + if (!WMASK_I[13]) memory[WADDR[7:0]][13] <= WDATA_I[13]; + if (!WMASK_I[14]) memory[WADDR[7:0]][14] <= WDATA_I[14]; + if (!WMASK_I[15]) memory[WADDR[7:0]][15] <= WDATA_I[15]; + end + end + + always @(posedge RCLK) begin + if (RE && RCLKE) begin + RDATA_I <= memory[RADDR[7:0]] & ~RMASK_I; + end + end +`endif +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L343-L358 + $setup(MASK, posedge WCLK &&& WE && WCLKE, 274); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L359-L369 + $setup(RADDR, posedge RCLK &&& RE && RCLKE, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L370 + $setup(RCLKE, posedge RCLK, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L371 + $setup(RE, posedge RCLK, 98); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L372-L382 + $setup(WADDR, posedge WCLK &&& WE && WCLKE, 224); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L383 + $setup(WCLKE, posedge WCLK, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L384-L399 + $setup(WDATA, posedge WCLK &&& WE && WCLKE, 161); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L400 + $setup(WE, posedge WCLK, 133); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401 + (posedge RCLK => (RDATA : 16'bx)) = 2146; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L343-L358 + $setup(MASK, posedge WCLK &&& WE && WCLKE, 403); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L359-L369 + $setup(RADDR, posedge RCLK &&& RE && RCLKE, 300); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L370 + $setup(RCLKE, posedge RCLK, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L371 + $setup(RE, posedge RCLK, 145); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L372-L382 + $setup(WADDR, posedge WCLK &&& WE && WCLKE, 331); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L383 + $setup(WCLKE, posedge WCLK, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L384-L399 + $setup(WDATA, posedge WCLK &&& WE && WCLKE, 238); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L400 + $setup(WE, posedge WCLK, 196); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401 + (posedge RCLK => (RDATA : 16'bx)) = 3163; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12968-12983 + $setup(MASK, posedge WCLK &&& WE && WCLKE, 517); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12984-12994 + $setup(RADDR, posedge RCLK &&& RE && RCLKE, 384); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12995 + $setup(RCLKE, posedge RCLK, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12996 + $setup(RE, posedge RCLK, 185); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12997-13007 + $setup(WADDR, posedge WCLK &&& WE && WCLKE, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13008 + $setup(WCLKE, posedge WCLK, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13009-13024 + $setup(WDATA, posedge WCLK &&& WE && WCLKE, 305); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13025 + $setup(WE, posedge WCLK, 252); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026 + (posedge RCLK => (RDATA : 16'bx)) = 1179; + endspecify +`endif +endmodule + +module SB_RAM40_4KNR ( + output [15:0] RDATA, + input RCLKN, + input RCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input RE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] RADDR, + input WCLK, + input WCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input WE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] WADDR, + input [15:0] MASK `ICE40_DEFAULT_ASSIGNMENT_V(16'h 0000), + input [15:0] WDATA +); + parameter WRITE_MODE = 0; + parameter READ_MODE = 0; + + parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + + parameter INIT_FILE = ""; + + SB_RAM40_4K #( + .WRITE_MODE(WRITE_MODE), + .READ_MODE (READ_MODE ), + .INIT_0 (INIT_0 ), + .INIT_1 (INIT_1 ), + .INIT_2 (INIT_2 ), + .INIT_3 (INIT_3 ), + .INIT_4 (INIT_4 ), + .INIT_5 (INIT_5 ), + .INIT_6 (INIT_6 ), + .INIT_7 (INIT_7 ), + .INIT_8 (INIT_8 ), + .INIT_9 (INIT_9 ), + .INIT_A (INIT_A ), + .INIT_B (INIT_B ), + .INIT_C (INIT_C ), + .INIT_D (INIT_D ), + .INIT_E (INIT_E ), + .INIT_F (INIT_F ), + .INIT_FILE (INIT_FILE ) + ) RAM ( + .RDATA(RDATA), + .RCLK (~RCLKN), + .RCLKE(RCLKE), + .RE (RE ), + .RADDR(RADDR), + .WCLK (WCLK ), + .WCLKE(WCLKE), + .WE (WE ), + .WADDR(WADDR), + .MASK (MASK ), + .WDATA(WDATA) + ); +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L343-L358 + $setup(MASK, posedge WCLK &&& WE && WCLKE, 274); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L359-L369 + $setup(RADDR, posedge RCLKN &&& RE && RCLKE, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L370 + $setup(RCLKE, posedge RCLKN, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L371 + $setup(RE, posedge RCLKN, 98); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L372-L382 + $setup(WADDR, posedge WCLK &&& WE && WCLKE, 224); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L383 + $setup(WCLKE, posedge WCLK, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L384-L399 + $setup(WDATA, posedge WCLK &&& WE && WCLKE, 161); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L400 + $setup(WE, posedge WCLK, 133); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401 + (posedge RCLKN => (RDATA : 16'bx)) = 2146; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L343-L358 + $setup(MASK, posedge WCLK &&& WE && WCLKE, 403); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L359-L369 + $setup(RADDR, posedge RCLKN &&& RE && RCLKE, 300); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L370 + $setup(RCLKE, posedge RCLKN, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L371 + $setup(RE, posedge RCLKN, 145); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L372-L382 + $setup(WADDR, posedge WCLK &&& WE && WCLKE, 331); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L383 + $setup(WCLKE, posedge WCLK, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L384-L399 + $setup(WDATA, posedge WCLK &&& WE && WCLKE, 238); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L400 + $setup(WE, posedge WCLK, 196); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401 + (posedge RCLKN => (RDATA : 16'bx)) = 3163; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12968-12983 + $setup(MASK, posedge WCLK &&& WE && WCLKE, 517); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12984-12994 + $setup(RADDR, posedge RCLKN &&& RE && RCLKE, 384); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12995 + $setup(RCLKE, posedge RCLKN, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12996 + $setup(RE, posedge RCLKN, 185); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12997-13007 + $setup(WADDR, posedge WCLK &&& WE && WCLKE, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13008 + $setup(WCLKE, posedge WCLK, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13009-13024 + $setup(WDATA, posedge WCLK &&& WE && WCLKE, 305); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13025 + $setup(WE, posedge WCLK, 252); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026 + (posedge RCLKN => (RDATA : 16'bx)) = 1179; + endspecify +`endif +endmodule + +module SB_RAM40_4KNW ( + output [15:0] RDATA, + input RCLK, + input RCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input RE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] RADDR, + input WCLKN, + input WCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input WE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] WADDR, + input [15:0] MASK `ICE40_DEFAULT_ASSIGNMENT_V(16'h 0000), + input [15:0] WDATA +); + parameter WRITE_MODE = 0; + parameter READ_MODE = 0; + + parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + + parameter INIT_FILE = ""; + + SB_RAM40_4K #( + .WRITE_MODE(WRITE_MODE), + .READ_MODE (READ_MODE ), + .INIT_0 (INIT_0 ), + .INIT_1 (INIT_1 ), + .INIT_2 (INIT_2 ), + .INIT_3 (INIT_3 ), + .INIT_4 (INIT_4 ), + .INIT_5 (INIT_5 ), + .INIT_6 (INIT_6 ), + .INIT_7 (INIT_7 ), + .INIT_8 (INIT_8 ), + .INIT_9 (INIT_9 ), + .INIT_A (INIT_A ), + .INIT_B (INIT_B ), + .INIT_C (INIT_C ), + .INIT_D (INIT_D ), + .INIT_E (INIT_E ), + .INIT_F (INIT_F ), + .INIT_FILE (INIT_FILE ) + ) RAM ( + .RDATA(RDATA), + .RCLK (RCLK ), + .RCLKE(RCLKE), + .RE (RE ), + .RADDR(RADDR), + .WCLK (~WCLKN), + .WCLKE(WCLKE), + .WE (WE ), + .WADDR(WADDR), + .MASK (MASK ), + .WDATA(WDATA) + ); +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L343-L358 + $setup(MASK, posedge WCLKN &&& WE && WCLKE, 274); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L359-L369 + $setup(RADDR, posedge RCLK &&& RE && RCLKE, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L370 + $setup(RCLKE, posedge RCLK, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L371 + $setup(RE, posedge RCLK, 98); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L372-L382 + $setup(WADDR, posedge WCLKN &&& WE && WCLKE, 224); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L383 + $setup(WCLKE, posedge WCLKN, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L384-L399 + $setup(WDATA, posedge WCLKN &&& WE && WCLKE, 161); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L400 + $setup(WE, posedge WCLKN, 133); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401 + (posedge RCLK => (RDATA : 16'bx)) = 2146; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L343-L358 + $setup(MASK, posedge WCLKN &&& WE && WCLKE, 403); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L359-L369 + $setup(RADDR, posedge RCLK &&& RE && RCLKE, 300); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L370 + $setup(RCLKE, posedge RCLK, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L371 + $setup(RE, posedge RCLK, 145); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L372-L382 + $setup(WADDR, posedge WCLKN &&& WE && WCLKE, 331); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L383 + $setup(WCLKE, posedge WCLKN, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L384-L399 + $setup(WDATA, posedge WCLKN &&& WE && WCLKE, 238); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L400 + $setup(WE, posedge WCLKN, 196); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401 + (posedge RCLK => (RDATA : 16'bx)) = 3163; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12968-12983 + $setup(MASK, posedge WCLKN &&& WE && WCLKE, 517); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12984-12994 + $setup(RADDR, posedge RCLK &&& RE && RCLKE, 384); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12995 + $setup(RCLKE, posedge RCLK, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12996 + $setup(RE, posedge RCLK, 185); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12997-13007 + $setup(WADDR, posedge WCLKN &&& WE && WCLKE, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13008 + $setup(WCLKE, posedge WCLKN, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13009-13024 + $setup(WDATA, posedge WCLKN &&& WE && WCLKE, 305); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13025 + $setup(WE, posedge WCLKN, 252); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026 + (posedge RCLK => (RDATA : 16'bx)) = 1179; + endspecify +`endif +endmodule + +module SB_RAM40_4KNRNW ( + output [15:0] RDATA, + input RCLKN, + input RCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input RE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] RADDR, + input WCLKN, + input WCLKE `ICE40_DEFAULT_ASSIGNMENT_1, + input WE `ICE40_DEFAULT_ASSIGNMENT_0, + input [10:0] WADDR, + input [15:0] MASK `ICE40_DEFAULT_ASSIGNMENT_V(16'h 0000), + input [15:0] WDATA +); + parameter WRITE_MODE = 0; + parameter READ_MODE = 0; + + parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + + parameter INIT_FILE = ""; + + SB_RAM40_4K #( + .WRITE_MODE(WRITE_MODE), + .READ_MODE (READ_MODE ), + .INIT_0 (INIT_0 ), + .INIT_1 (INIT_1 ), + .INIT_2 (INIT_2 ), + .INIT_3 (INIT_3 ), + .INIT_4 (INIT_4 ), + .INIT_5 (INIT_5 ), + .INIT_6 (INIT_6 ), + .INIT_7 (INIT_7 ), + .INIT_8 (INIT_8 ), + .INIT_9 (INIT_9 ), + .INIT_A (INIT_A ), + .INIT_B (INIT_B ), + .INIT_C (INIT_C ), + .INIT_D (INIT_D ), + .INIT_E (INIT_E ), + .INIT_F (INIT_F ), + .INIT_FILE (INIT_FILE ) + ) RAM ( + .RDATA(RDATA), + .RCLK (~RCLKN), + .RCLKE(RCLKE), + .RE (RE ), + .RADDR(RADDR), + .WCLK (~WCLKN), + .WCLKE(WCLKE), + .WE (WE ), + .WADDR(WADDR), + .MASK (MASK ), + .WDATA(WDATA) + ); +`ifdef ICE40_HX + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L343-L358 + $setup(MASK, posedge WCLKN &&& WE && WCLKE, 274); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L359-L369 + $setup(RADDR, posedge RCLKN &&& RE && RCLKE, 203); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L370 + $setup(RCLKE, posedge RCLKN, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L371 + $setup(RE, posedge RCLKN, 98); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L372-L382 + $setup(WADDR, posedge WCLKN &&& WE && WCLKE, 224); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L383 + $setup(WCLKE, posedge WCLKN, 267); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L384-L399 + $setup(WDATA, posedge WCLKN &&& WE && WCLKE, 161); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L400 + $setup(WE, posedge WCLKN, 133); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401 + (posedge RCLKN => (RDATA : 16'bx)) = 2146; + endspecify +`endif +`ifdef ICE40_LP + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L343-L358 + $setup(MASK, posedge WCLKN &&& WE && WCLKE, 403); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L359-L369 + $setup(RADDR, posedge RCLKN &&& RE && RCLKE, 300); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L370 + $setup(RCLKE, posedge RCLKN, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L371 + $setup(RE, posedge RCLKN, 145); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L372-L382 + $setup(WADDR, posedge WCLKN &&& WE && WCLKE, 331); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L383 + $setup(WCLKE, posedge WCLKN, 393); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L384-L399 + $setup(WDATA, posedge WCLKN &&& WE && WCLKE, 238); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L400 + $setup(WE, posedge WCLKN, 196); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401 + (posedge RCLKN => (RDATA : 16'bx)) = 3163; + endspecify +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12968-12983 + $setup(MASK, posedge WCLKN &&& WE && WCLKE, 517); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12984-12994 + $setup(RADDR, posedge RCLKN &&& RE && RCLKE, 384); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12995 + $setup(RCLKE, posedge RCLKN, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12996 + $setup(RE, posedge RCLKN, 185); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L12997-13007 + $setup(WADDR, posedge WCLKN &&& WE && WCLKE, 424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13008 + $setup(WCLKE, posedge WCLKN, 503); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13009-13024 + $setup(WDATA, posedge WCLKN &&& WE && WCLKE, 305); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13025 + $setup(WE, posedge WCLKN, 252); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026 + (posedge RCLKN => (RDATA : 16'bx)) = 1179; + endspecify +`endif +endmodule + +// Packed IceStorm Logic Cells + +module ICESTORM_LC ( + input I0, I1, I2, I3, CIN, CLK, CEN, SR, + output LO, + output O, + output COUT +); + parameter [15:0] LUT_INIT = 0; + + parameter [0:0] NEG_CLK = 0; + parameter [0:0] CARRY_ENABLE = 0; + parameter [0:0] DFF_ENABLE = 0; + parameter [0:0] SET_NORESET = 0; + parameter [0:0] ASYNC_SR = 0; + + parameter [0:0] CIN_CONST = 0; + parameter [0:0] CIN_SET = 0; + + wire I0_pd = (I0 === 1'bz) ? 1'b0 : I0; + wire I1_pd = (I1 === 1'bz) ? 1'b0 : I1; + wire I2_pd = (I2 === 1'bz) ? 1'b0 : I2; + wire I3_pd = (I3 === 1'bz) ? 1'b0 : I3; + wire SR_pd = (SR === 1'bz) ? 1'b0 : SR; + wire CEN_pu = (CEN === 1'bz) ? 1'b1 : CEN; + + wire mux_cin = CIN_CONST ? CIN_SET : CIN; + + assign COUT = CARRY_ENABLE ? (I1_pd && I2_pd) || ((I1_pd || I2_pd) && mux_cin) : 1'bx; + + wire [7:0] lut_s3 = I3_pd ? LUT_INIT[15:8] : LUT_INIT[7:0]; + wire [3:0] lut_s2 = I2_pd ? lut_s3[ 7:4] : lut_s3[3:0]; + wire [1:0] lut_s1 = I1_pd ? lut_s2[ 3:2] : lut_s2[1:0]; + wire lut_o = I0_pd ? lut_s1[ 1] : lut_s1[ 0]; + + assign LO = lut_o; + + wire polarized_clk; + assign polarized_clk = CLK ^ NEG_CLK; + + reg o_reg = 1'b0; + always @(posedge polarized_clk) + if (CEN_pu) + o_reg <= SR_pd ? SET_NORESET : lut_o; + + reg o_reg_async = 1'b0; + always @(posedge polarized_clk, posedge SR_pd) + if (SR_pd) + o_reg_async <= SET_NORESET; + else if (CEN_pu) + o_reg_async <= lut_o; + + assign O = DFF_ENABLE ? ASYNC_SR ? o_reg_async : o_reg : lut_o; +`ifdef TIMING +specify + (I0 => O) = (0:0:0, 0:0:0); + (I1 => O) = (0:0:0, 0:0:0); + (I2 => O) = (0:0:0, 0:0:0); + (I3 => O) = (0:0:0, 0:0:0); + (I0 => LO) = (0:0:0, 0:0:0); + (I1 => LO) = (0:0:0, 0:0:0); + (I2 => LO) = (0:0:0, 0:0:0); + (I3 => LO) = (0:0:0, 0:0:0); + (I1 => COUT) = (0:0:0, 0:0:0); + (I2 => COUT) = (0:0:0, 0:0:0); + (CIN => COUT) = (0:0:0, 0:0:0); + (CLK => O) = (0:0:0, 0:0:0); + (SR => O) = (0:0:0, 0:0:0); + $setuphold(posedge CLK, posedge I0, 0:0:0, 0:0:0); + $setuphold(posedge CLK, negedge I0, 0:0:0, 0:0:0); + $setuphold(negedge CLK, posedge I0, 0:0:0, 0:0:0); + $setuphold(negedge CLK, negedge I0, 0:0:0, 0:0:0); + $setuphold(posedge CLK, posedge I1, 0:0:0, 0:0:0); + $setuphold(posedge CLK, negedge I1, 0:0:0, 0:0:0); + $setuphold(negedge CLK, posedge I1, 0:0:0, 0:0:0); + $setuphold(negedge CLK, negedge I1, 0:0:0, 0:0:0); + $setuphold(posedge CLK, posedge I2, 0:0:0, 0:0:0); + $setuphold(posedge CLK, negedge I2, 0:0:0, 0:0:0); + $setuphold(negedge CLK, posedge I2, 0:0:0, 0:0:0); + $setuphold(negedge CLK, negedge I2, 0:0:0, 0:0:0); + $setuphold(posedge CLK, posedge I3, 0:0:0, 0:0:0); + $setuphold(posedge CLK, negedge I3, 0:0:0, 0:0:0); + $setuphold(negedge CLK, posedge I3, 0:0:0, 0:0:0); + $setuphold(negedge CLK, negedge I3, 0:0:0, 0:0:0); + $setuphold(posedge CLK, posedge CEN, 0:0:0, 0:0:0); + $setuphold(posedge CLK, negedge CEN, 0:0:0, 0:0:0); + $setuphold(negedge CLK, posedge CEN, 0:0:0, 0:0:0); + $setuphold(negedge CLK, negedge CEN, 0:0:0, 0:0:0); + $setuphold(posedge CLK, posedge SR, 0:0:0, 0:0:0); + $setuphold(posedge CLK, negedge SR, 0:0:0, 0:0:0); + $setuphold(negedge CLK, posedge SR, 0:0:0, 0:0:0); + $setuphold(negedge CLK, negedge SR, 0:0:0, 0:0:0); +endspecify +`endif +`ifdef ICE40_HX +specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L79 + (CIN => COUT) = (101:112:126, 85:94:105); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L80 + (I0 => O) = (361:399:449, 310:343:386); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L81 + (I0 => LO) = (293:324:365, 310:343:386); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L82 + (I1 => COUT) = (209:231:259, 197:218:245); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L83 + (I1 => O) = (321:355:400, 304:337:379); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L84 + (I1 => LO) = (259:287:323, 304:337:379); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L85 + (I2 => COUT) = (186:206:231, 107:118:133); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L86 + (I2 => O) = (304:337:379, 282:312:351); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L87 + (I2 => LO) = (254:281:316, 231:256:288); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L88 + (I3 => O) = (254:281:316, 231:256:288); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L89 + (I3 => LO) = (214:237:267, 220:243:274); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90 + (posedge CLK => (O : 1'bx)) = (434:480:540, 434:480:540); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L91-L92 + (SR => O) = (482:535:599, 482:533:599); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L74 + $setuphold(posedge CLK, posedge I0, 378:418:470, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L68 + $setuphold(posedge CLK, negedge I0, 321:355:400, 0:0:0); + $setuphold(negedge CLK, posedge I0, 378:418:470, 0:0:0); + $setuphold(negedge CLK, negedge I0, 321:355:400, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L75 + $setuphold(posedge CLK, posedge I1, 321:355:400, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L69 + $setuphold(posedge CLK, negedge I1, 304:337:379, 0:0:0); + $setuphold(negedge CLK, posedge I1, 321:355:400, 0:0:0); + $setuphold(negedge CLK, negedge I1, 304:337:379, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L76 + $setuphold(posedge CLK, posedge I2, 299:330:372, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L70 + $setuphold(posedge CLK, negedge I2, 259:287:323, 0:0:0); + $setuphold(negedge CLK, posedge I2, 299:330:372, 0:0:0); + $setuphold(negedge CLK, negedge I2, 259:287:323, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L77 + $setuphold(posedge CLK, posedge I3, 220:243:274, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L71 + $setuphold(posedge CLK, negedge I3, 175:183:217, 0:0:0); + $setuphold(negedge CLK, posedge I3, 220:243:274, 0:0:0); + $setuphold(negedge CLK, negedge I3, 175:183:217, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L73 + $setuphold(posedge CLK, negedge CEN, 0:0:0, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L67 + $setuphold(posedge CLK, posedge CEN, 0:0:0, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L78 + $setuphold(posedge CLK, posedge SR, 163:181:203, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L72 + $setuphold(posedge CLK, negedge SR, 113:125:140, 0:0:0); + $setuphold(negedge CLK, posedge SR, 163:181:203, 0:0:0); + $setuphold(negedge CLK, negedge SR, 113:125:140, 0:0:0); +endspecify +`endif +`ifdef ICE40_LP +specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L79 + (CIN => COUT) = (118:153:186, 98:128:155); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L80 + (I0 => O) = (419:545:662, 360:468:569); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L81 + (I0 => LO) = (340:442:538, 360:468:569); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L82 + (I1 => COUT) = (242:315:382, 229:298:362); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L83 + (I1 => O) = (372:485:589, 353:459:558); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L84 + (I1 => LO) = (301:391:475, 353:459:558); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L85 + (I2 => COUT) = (216:281:341, 124:162:196); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L86 + (I2 => O) = (353:459:558, 327:425:517); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L87 + (I2 => LO) = (288:374:455, 321:417:507); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L88 + (I3 => O) = (294:383:465, 268:349:424); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L89 + (I3 => LO) = (249:323:393, 255:332:403); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90 + (posedge CLK => (O : 1'bx)) = (504:655:796, 504:655:796); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L91-L92 + (SR => O) = (559:726:883, 559:726:883); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L74 + $setuphold(posedge CLK, posedge I0, 438:570:693, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L68 + $setuphold(posedge CLK, negedge I0, 373:485:589, 0:0:0); + $setuphold(negedge CLK, posedge I0, 438:570:693, 0:0:0); + $setuphold(negedge CLK, negedge I0, 373:485:589, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L75 + $setuphold(posedge CLK, posedge I1, 373:485:589, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L69 + $setuphold(posedge CLK, negedge I1, 353:459:558, 0:0:0); + $setuphold(negedge CLK, posedge I1, 373:485:589, 0:0:0); + $setuphold(negedge CLK, negedge I1, 353:459:558, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L76 + $setuphold(posedge CLK, posedge I2, 347:451:548, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L70 + $setuphold(posedge CLK, negedge I2, 301:391:475, 0:0:0); + $setuphold(negedge CLK, posedge I2, 347:451:548, 0:0:0); + $setuphold(negedge CLK, negedge I2, 301:391:475, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L77 + $setuphold(posedge CLK, posedge I3, 255:332:403, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L71 + $setuphold(posedge CLK, negedge I3, 203:264:320, 0:0:0); + $setuphold(negedge CLK, posedge I3, 255:332:403, 0:0:0); + $setuphold(negedge CLK, negedge I3, 203:264:320, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L73 + $setuphold(posedge CLK, negedge CEN, 0:0:0, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L67 + $setuphold(posedge CLK, posedge CEN, 0:0:0, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L78 + $setuphold(posedge CLK, posedge SR, 190:247:300, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L72 + $setuphold(posedge CLK, negedge SR, 131:170:207, 0:0:0); + $setuphold(negedge CLK, posedge SR, 190:247:300, 0:0:0); + $setuphold(negedge CLK, negedge SR, 131:170:207, 0:0:0); +endspecify +`endif +`ifdef ICE40_U +specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L91 + (CIN => COUT) = (103:181:278, 103:181:278); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L92 + (I0 => O) = (462:808:1255, 477:834:1285); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L93 + (I0 => LO) = (315:550:848, 334:585:901); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L94 + (I1 => COUT) = (251:438:675, 246:430:662); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L95 + (I1 => O) = (438:765:1179, 457:799:1232); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L96 + (I1 => LO) = (275:481:742, 329:576:887); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L97 + (I2 => COUT) = (226:395:609, 133:232:358); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L98 + (I2 => O) = (438:765:1179, 447:782:1205); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L99 + (I2 => LO) = (261:456:702, 290:507:781); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L100 + (I3 => O) = (320:559:861, 226:370:874); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L101 + (I3 => LO) = (216:378:583, 226:395:609); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102 + (posedge CLK => (O : 1'bx)) = (516:903:1391, 516:903:1391); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L103-104 + (SR => O) = (420:734:1131, 590:1032:1589); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L86 + $setuphold(posedge CLK, posedge I0, 457:799:1232, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L80 + $setuphold(posedge CLK, negedge I0, 393:688:1060, 0:0:0); + $setuphold(negedge CLK, posedge I0, 457:799:1232, 0:0:0); + $setuphold(negedge CLK, negedge I0, 393:688:1060, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L87 + $setuphold(posedge CLK, posedge I1, 393:688:1060, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L81 + $setuphold(posedge CLK, negedge I1, 373:653:1007, 0:0:0); + $setuphold(negedge CLK, posedge I1, 393:688:1060, 0:0:0); + $setuphold(negedge CLK, negedge I1, 373:653:1007, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L88 + $setuphold(posedge CLK, posedge I2, 364:636:980, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L82 + $setuphold(posedge CLK, negedge I2, 320:559:861, 0:0:0); + $setuphold(negedge CLK, posedge I2, 364:636:980, 0:0:0); + $setuphold(negedge CLK, negedge I2, 320:559:861, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L89 + $setuphold(posedge CLK, posedge I3, 279:473:728, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L83 + $setuphold(posedge CLK, negedge I3, 216:378:583, 0:0:0); + $setuphold(negedge CLK, posedge I3, 279:473:728, 0:0:0); + $setuphold(negedge CLK, negedge I3, 216:378:583, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L85 + $setuphold(posedge CLK, negedge CEN, 0:0:0, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L79 + $setuphold(posedge CLK, posedge CEN, 0:0:0, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L90 + $setuphold(posedge CLK, posedge SR, 197:344:530, 0:0:0); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L84 + $setuphold(posedge CLK, negedge SR, 143:249:384, 0:0:0); + $setuphold(negedge CLK, posedge SR, 197:344:530, 0:0:0); + $setuphold(negedge CLK, negedge SR, 131:170:207, 0:0:0); +endspecify +`endif +endmodule + +// SiliconBlue PLL Cells + +(* blackbox *) +module SB_PLL40_CORE ( + input REFERENCECLK, + output PLLOUTCORE, + output PLLOUTGLOBAL, + input EXTFEEDBACK, + input [7:0] DYNAMICDELAY, + output LOCK, + input BYPASS, + input RESETB, + input LATCHINPUTVALUE, + output SDO, + input SDI, + input SCLK +); + parameter FEEDBACK_PATH = "SIMPLE"; + parameter DELAY_ADJUSTMENT_MODE_FEEDBACK = "FIXED"; + parameter DELAY_ADJUSTMENT_MODE_RELATIVE = "FIXED"; + parameter SHIFTREG_DIV_MODE = 1'b0; + parameter FDA_FEEDBACK = 4'b0000; + parameter FDA_RELATIVE = 4'b0000; + parameter PLLOUT_SELECT = "GENCLK"; + parameter DIVR = 4'b0000; + parameter DIVF = 7'b0000000; + parameter DIVQ = 3'b000; + parameter FILTER_RANGE = 3'b000; + parameter ENABLE_ICEGATE = 1'b0; + parameter TEST_MODE = 1'b0; + parameter EXTERNAL_DIVIDE_FACTOR = 1; +endmodule + +(* blackbox *) +module SB_PLL40_PAD ( + input PACKAGEPIN, + output PLLOUTCORE, + output PLLOUTGLOBAL, + input EXTFEEDBACK, + input [7:0] DYNAMICDELAY, + output LOCK, + input BYPASS, + input RESETB, + input LATCHINPUTVALUE, + output SDO, + input SDI, + input SCLK +); + parameter FEEDBACK_PATH = "SIMPLE"; + parameter DELAY_ADJUSTMENT_MODE_FEEDBACK = "FIXED"; + parameter DELAY_ADJUSTMENT_MODE_RELATIVE = "FIXED"; + parameter SHIFTREG_DIV_MODE = 1'b0; + parameter FDA_FEEDBACK = 4'b0000; + parameter FDA_RELATIVE = 4'b0000; + parameter PLLOUT_SELECT = "GENCLK"; + parameter DIVR = 4'b0000; + parameter DIVF = 7'b0000000; + parameter DIVQ = 3'b000; + parameter FILTER_RANGE = 3'b000; + parameter ENABLE_ICEGATE = 1'b0; + parameter TEST_MODE = 1'b0; + parameter EXTERNAL_DIVIDE_FACTOR = 1; +endmodule + +(* blackbox *) +module SB_PLL40_2_PAD ( + input PACKAGEPIN, + output PLLOUTCOREA, + output PLLOUTGLOBALA, + output PLLOUTCOREB, + output PLLOUTGLOBALB, + input EXTFEEDBACK, + input [7:0] DYNAMICDELAY, + output LOCK, + input BYPASS, + input RESETB, + input LATCHINPUTVALUE, + output SDO, + input SDI, + input SCLK +); + parameter FEEDBACK_PATH = "SIMPLE"; + parameter DELAY_ADJUSTMENT_MODE_FEEDBACK = "FIXED"; + parameter DELAY_ADJUSTMENT_MODE_RELATIVE = "FIXED"; + parameter SHIFTREG_DIV_MODE = 1'b0; + parameter FDA_FEEDBACK = 4'b0000; + parameter FDA_RELATIVE = 4'b0000; + parameter PLLOUT_SELECT_PORTB = "GENCLK"; + parameter DIVR = 4'b0000; + parameter DIVF = 7'b0000000; + parameter DIVQ = 3'b000; + parameter FILTER_RANGE = 3'b000; + parameter ENABLE_ICEGATE_PORTA = 1'b0; + parameter ENABLE_ICEGATE_PORTB = 1'b0; + parameter TEST_MODE = 1'b0; + parameter EXTERNAL_DIVIDE_FACTOR = 1; +endmodule + +(* blackbox *) +module SB_PLL40_2F_CORE ( + input REFERENCECLK, + output PLLOUTCOREA, + output PLLOUTGLOBALA, + output PLLOUTCOREB, + output PLLOUTGLOBALB, + input EXTFEEDBACK, + input [7:0] DYNAMICDELAY, + output LOCK, + input BYPASS, + input RESETB, + input LATCHINPUTVALUE, + output SDO, + input SDI, + input SCLK +); + parameter FEEDBACK_PATH = "SIMPLE"; + parameter DELAY_ADJUSTMENT_MODE_FEEDBACK = "FIXED"; + parameter DELAY_ADJUSTMENT_MODE_RELATIVE = "FIXED"; + parameter SHIFTREG_DIV_MODE = 1'b0; + parameter FDA_FEEDBACK = 4'b0000; + parameter FDA_RELATIVE = 4'b0000; + parameter PLLOUT_SELECT_PORTA = "GENCLK"; + parameter PLLOUT_SELECT_PORTB = "GENCLK"; + parameter DIVR = 4'b0000; + parameter DIVF = 7'b0000000; + parameter DIVQ = 3'b000; + parameter FILTER_RANGE = 3'b000; + parameter ENABLE_ICEGATE_PORTA = 1'b0; + parameter ENABLE_ICEGATE_PORTB = 1'b0; + parameter TEST_MODE = 1'b0; + parameter EXTERNAL_DIVIDE_FACTOR = 1; +endmodule + +(* blackbox *) +module SB_PLL40_2F_PAD ( + input PACKAGEPIN, + output PLLOUTCOREA, + output PLLOUTGLOBALA, + output PLLOUTCOREB, + output PLLOUTGLOBALB, + input EXTFEEDBACK, + input [7:0] DYNAMICDELAY, + output LOCK, + input BYPASS, + input RESETB, + input LATCHINPUTVALUE, + output SDO, + input SDI, + input SCLK +); + parameter FEEDBACK_PATH = "SIMPLE"; + parameter DELAY_ADJUSTMENT_MODE_FEEDBACK = "FIXED"; + parameter DELAY_ADJUSTMENT_MODE_RELATIVE = "FIXED"; + parameter SHIFTREG_DIV_MODE = 2'b00; + parameter FDA_FEEDBACK = 4'b0000; + parameter FDA_RELATIVE = 4'b0000; + parameter PLLOUT_SELECT_PORTA = "GENCLK"; + parameter PLLOUT_SELECT_PORTB = "GENCLK"; + parameter DIVR = 4'b0000; + parameter DIVF = 7'b0000000; + parameter DIVQ = 3'b000; + parameter FILTER_RANGE = 3'b000; + parameter ENABLE_ICEGATE_PORTA = 1'b0; + parameter ENABLE_ICEGATE_PORTB = 1'b0; + parameter TEST_MODE = 1'b0; + parameter EXTERNAL_DIVIDE_FACTOR = 1; +endmodule + +// SiliconBlue Device Configuration Cells + +(* blackbox, keep *) +module SB_WARMBOOT ( + input BOOT, + input S1, + input S0 +); +endmodule + +module SB_SPRAM256KA ( + input [13:0] ADDRESS, + input [15:0] DATAIN, + input [3:0] MASKWREN, + input WREN, CHIPSELECT, CLOCK, STANDBY, SLEEP, POWEROFF, + output reg [15:0] DATAOUT +); +`ifndef BLACKBOX +`ifndef EQUIV + reg [15:0] mem [0:16383]; + wire off = SLEEP || !POWEROFF; + integer i; + + always @(negedge POWEROFF) begin + for (i = 0; i <= 16383; i = i+1) + mem[i] = 16'bx; + end + + always @(posedge CLOCK, posedge off) begin + if (off) begin + DATAOUT <= 0; + end else + if (STANDBY) begin + DATAOUT <= 16'bx; + end else + if (CHIPSELECT) begin + if (!WREN) begin + DATAOUT <= mem[ADDRESS]; + end else begin + if (MASKWREN[0]) mem[ADDRESS][ 3: 0] <= DATAIN[ 3: 0]; + if (MASKWREN[1]) mem[ADDRESS][ 7: 4] <= DATAIN[ 7: 4]; + if (MASKWREN[2]) mem[ADDRESS][11: 8] <= DATAIN[11: 8]; + if (MASKWREN[3]) mem[ADDRESS][15:12] <= DATAIN[15:12]; + DATAOUT <= 16'bx; + end + end + end +`endif +`endif +`ifdef ICE40_U + specify + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13169-L13182 + $setup(posedge ADDRESS, posedge CLOCK, 268); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13183 + $setup(CHIPSELECT, posedge CLOCK, 404); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13184-L13199 + $setup(DATAIN, posedge CLOCK, 143); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13200-L13203 + $setup(MASKWREN, posedge CLOCK, 143); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13167 + //$setup(negedge SLEEP, posedge CLOCK, 41505); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13167 + //$setup(negedge STANDBY, posedge CLOCK, 1715); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13206 + $setup(WREN, posedge CLOCK, 289); + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13207-L13222 + (posedge CLOCK => (DATAOUT : 16'bx)) = 1821; + // https://github.com/YosysHQ/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13223-L13238 + (posedge SLEEP => (DATAOUT : 16'b0)) = 1099; + endspecify +`endif +endmodule + +(* blackbox *) +module SB_HFOSC( + input TRIM0, + input TRIM1, + input TRIM2, + input TRIM3, + input TRIM4, + input TRIM5, + input TRIM6, + input TRIM7, + input TRIM8, + input TRIM9, + input CLKHFPU, + input CLKHFEN, + output CLKHF +); +parameter TRIM_EN = "0b0"; +parameter CLKHF_DIV = "0b00"; +endmodule + +(* blackbox *) +module SB_LFOSC( + input CLKLFPU, + input CLKLFEN, + output CLKLF +); +endmodule + +(* blackbox *) +module SB_RGBA_DRV( + input CURREN, + input RGBLEDEN, + input RGB0PWM, + input RGB1PWM, + input RGB2PWM, + output RGB0, + output RGB1, + output RGB2 +); +parameter CURRENT_MODE = "0b0"; +parameter RGB0_CURRENT = "0b000000"; +parameter RGB1_CURRENT = "0b000000"; +parameter RGB2_CURRENT = "0b000000"; +endmodule + +(* blackbox *) +module SB_LED_DRV_CUR( + input EN, + output LEDPU +); +endmodule + +(* blackbox *) +module SB_RGB_DRV( + input RGBLEDEN, + input RGB0PWM, + input RGB1PWM, + input RGB2PWM, + input RGBPU, + output RGB0, + output RGB1, + output RGB2 +); +parameter CURRENT_MODE = "0b0"; +parameter RGB0_CURRENT = "0b000000"; +parameter RGB1_CURRENT = "0b000000"; +parameter RGB2_CURRENT = "0b000000"; +endmodule + +(* blackbox *) +module SB_I2C( + input SBCLKI, + input SBRWI, + input SBSTBI, + input SBADRI7, + input SBADRI6, + input SBADRI5, + input SBADRI4, + input SBADRI3, + input SBADRI2, + input SBADRI1, + input SBADRI0, + input SBDATI7, + input SBDATI6, + input SBDATI5, + input SBDATI4, + input SBDATI3, + input SBDATI2, + input SBDATI1, + input SBDATI0, + input SCLI, + input SDAI, + output SBDATO7, + output SBDATO6, + output SBDATO5, + output SBDATO4, + output SBDATO3, + output SBDATO2, + output SBDATO1, + output SBDATO0, + output SBACKO, + output I2CIRQ, + output I2CWKUP, + output SCLO, //inout in the SB verilog library, but output in the VHDL and PDF libs and seemingly in the HW itself + output SCLOE, + output SDAO, + output SDAOE +); +parameter I2C_SLAVE_INIT_ADDR = "0b1111100001"; +parameter BUS_ADDR74 = "0b0001"; +endmodule + +(* blackbox *) +module SB_SPI ( + input SBCLKI, + input SBRWI, + input SBSTBI, + input SBADRI7, + input SBADRI6, + input SBADRI5, + input SBADRI4, + input SBADRI3, + input SBADRI2, + input SBADRI1, + input SBADRI0, + input SBDATI7, + input SBDATI6, + input SBDATI5, + input SBDATI4, + input SBDATI3, + input SBDATI2, + input SBDATI1, + input SBDATI0, + input MI, + input SI, + input SCKI, + input SCSNI, + output SBDATO7, + output SBDATO6, + output SBDATO5, + output SBDATO4, + output SBDATO3, + output SBDATO2, + output SBDATO1, + output SBDATO0, + output SBACKO, + output SPIIRQ, + output SPIWKUP, + output SO, + output SOE, + output MO, + output MOE, + output SCKO, //inout in the SB verilog library, but output in the VHDL and PDF libs and seemingly in the HW itself + output SCKOE, + output MCSNO3, + output MCSNO2, + output MCSNO1, + output MCSNO0, + output MCSNOE3, + output MCSNOE2, + output MCSNOE1, + output MCSNOE0 +); +parameter BUS_ADDR74 = "0b0000"; +endmodule + +(* blackbox *) +module SB_LEDDA_IP( + input LEDDCS, + input LEDDCLK, + input LEDDDAT7, + input LEDDDAT6, + input LEDDDAT5, + input LEDDDAT4, + input LEDDDAT3, + input LEDDDAT2, + input LEDDDAT1, + input LEDDDAT0, + input LEDDADDR3, + input LEDDADDR2, + input LEDDADDR1, + input LEDDADDR0, + input LEDDDEN, + input LEDDEXE, + input LEDDRST, + output PWMOUT0, + output PWMOUT1, + output PWMOUT2, + output LEDDON +); +endmodule + +(* blackbox *) +module SB_FILTER_50NS( + input FILTERIN, + output FILTEROUT +); +endmodule + +module SB_IO_I3C ( + inout PACKAGE_PIN, + input LATCH_INPUT_VALUE, + input CLOCK_ENABLE, + input INPUT_CLK, + input OUTPUT_CLK, + input OUTPUT_ENABLE, + input D_OUT_0, + input D_OUT_1, + output D_IN_0, + output D_IN_1, + input PU_ENB, + input WEAK_PU_ENB +); + parameter [5:0] PIN_TYPE = 6'b000000; + parameter [0:0] PULLUP = 1'b0; + parameter [0:0] WEAK_PULLUP = 1'b0; + parameter [0:0] NEG_TRIGGER = 1'b0; + parameter IO_STANDARD = "SB_LVCMOS"; + +`ifndef BLACKBOX + reg dout, din_0, din_1; + reg din_q_0, din_q_1; + reg dout_q_0, dout_q_1; + reg outena_q; + + generate if (!NEG_TRIGGER) begin + always @(posedge INPUT_CLK) if (CLOCK_ENABLE) din_q_0 <= PACKAGE_PIN; + always @(negedge INPUT_CLK) if (CLOCK_ENABLE) din_q_1 <= PACKAGE_PIN; + always @(posedge OUTPUT_CLK) if (CLOCK_ENABLE) dout_q_0 <= D_OUT_0; + always @(negedge OUTPUT_CLK) if (CLOCK_ENABLE) dout_q_1 <= D_OUT_1; + always @(posedge OUTPUT_CLK) if (CLOCK_ENABLE) outena_q <= OUTPUT_ENABLE; + end else begin + always @(negedge INPUT_CLK) if (CLOCK_ENABLE) din_q_0 <= PACKAGE_PIN; + always @(posedge INPUT_CLK) if (CLOCK_ENABLE) din_q_1 <= PACKAGE_PIN; + always @(negedge OUTPUT_CLK) if (CLOCK_ENABLE) dout_q_0 <= D_OUT_0; + always @(posedge OUTPUT_CLK) if (CLOCK_ENABLE) dout_q_1 <= D_OUT_1; + always @(negedge OUTPUT_CLK) if (CLOCK_ENABLE) outena_q <= OUTPUT_ENABLE; + end endgenerate + + always @* begin + if (!PIN_TYPE[1] || !LATCH_INPUT_VALUE) + din_0 = PIN_TYPE[0] ? PACKAGE_PIN : din_q_0; + din_1 = din_q_1; + end + + // work around simulation glitches on dout in DDR mode + reg outclk_delayed_1; + reg outclk_delayed_2; + always @* outclk_delayed_1 <= OUTPUT_CLK; + always @* outclk_delayed_2 <= outclk_delayed_1; + + always @* begin + if (PIN_TYPE[3]) + dout = PIN_TYPE[2] ? !dout_q_0 : D_OUT_0; + else + dout = (outclk_delayed_2 ^ NEG_TRIGGER) || PIN_TYPE[2] ? dout_q_0 : dout_q_1; + end + + assign D_IN_0 = din_0, D_IN_1 = din_1; + + generate + if (PIN_TYPE[5:4] == 2'b01) assign PACKAGE_PIN = dout; + if (PIN_TYPE[5:4] == 2'b10) assign PACKAGE_PIN = OUTPUT_ENABLE ? dout : 1'bz; + if (PIN_TYPE[5:4] == 2'b11) assign PACKAGE_PIN = outena_q ? dout : 1'bz; + endgenerate +`endif +endmodule + +module SB_IO_OD ( + inout PACKAGEPIN, + input LATCHINPUTVALUE, + input CLOCKENABLE, + input INPUTCLK, + input OUTPUTCLK, + input OUTPUTENABLE, + input DOUT1, + input DOUT0, + output DIN1, + output DIN0 +); + parameter [5:0] PIN_TYPE = 6'b000000; + parameter [0:0] NEG_TRIGGER = 1'b0; + +`ifndef BLACKBOX + reg dout, din_0, din_1; + reg din_q_0, din_q_1; + reg dout_q_0, dout_q_1; + reg outena_q; + + generate if (!NEG_TRIGGER) begin + always @(posedge INPUTCLK) if (CLOCKENABLE) din_q_0 <= PACKAGEPIN; + always @(negedge INPUTCLK) if (CLOCKENABLE) din_q_1 <= PACKAGEPIN; + always @(posedge OUTPUTCLK) if (CLOCKENABLE) dout_q_0 <= DOUT0; + always @(negedge OUTPUTCLK) if (CLOCKENABLE) dout_q_1 <= DOUT1; + always @(posedge OUTPUTCLK) if (CLOCKENABLE) outena_q <= OUTPUTENABLE; + end else begin + always @(negedge INPUTCLK) if (CLOCKENABLE) din_q_0 <= PACKAGEPIN; + always @(posedge INPUTCLK) if (CLOCKENABLE) din_q_1 <= PACKAGEPIN; + always @(negedge OUTPUTCLK) if (CLOCKENABLE) dout_q_0 <= DOUT0; + always @(posedge OUTPUTCLK) if (CLOCKENABLE) dout_q_1 <= DOUT1; + always @(negedge OUTPUTCLK) if (CLOCKENABLE) outena_q <= OUTPUTENABLE; + end endgenerate + + always @* begin + if (!PIN_TYPE[1] || !LATCHINPUTVALUE) + din_0 = PIN_TYPE[0] ? PACKAGEPIN : din_q_0; + din_1 = din_q_1; + end + + // work around simulation glitches on dout in DDR mode + reg outclk_delayed_1; + reg outclk_delayed_2; + always @* outclk_delayed_1 <= OUTPUTCLK; + always @* outclk_delayed_2 <= outclk_delayed_1; + + always @* begin + if (PIN_TYPE[3]) + dout = PIN_TYPE[2] ? !dout_q_0 : DOUT0; + else + dout = (outclk_delayed_2 ^ NEG_TRIGGER) || PIN_TYPE[2] ? dout_q_0 : dout_q_1; + end + + assign DIN0 = din_0, DIN1 = din_1; + + generate + if (PIN_TYPE[5:4] == 2'b01) assign PACKAGEPIN = dout ? 1'bz : 1'b0; + if (PIN_TYPE[5:4] == 2'b10) assign PACKAGEPIN = OUTPUTENABLE ? (dout ? 1'bz : 1'b0) : 1'bz; + if (PIN_TYPE[5:4] == 2'b11) assign PACKAGEPIN = outena_q ? (dout ? 1'bz : 1'b0) : 1'bz; + endgenerate +`endif +endmodule + +//(* abc9_box, lib_whitebox *) // TODO +module SB_MAC16 ( + input CLK, CE, + input [15:0] C, A, B, D, + input AHOLD, BHOLD, CHOLD, DHOLD, + input IRSTTOP, IRSTBOT, + input ORSTTOP, ORSTBOT, + input OLOADTOP, OLOADBOT, + input ADDSUBTOP, ADDSUBBOT, + input OHOLDTOP, OHOLDBOT, + input CI, ACCUMCI, SIGNEXTIN, + output [31:0] O, + output CO, ACCUMCO, SIGNEXTOUT +); + parameter [0:0] NEG_TRIGGER = 0; + parameter [0:0] C_REG = 0; + parameter [0:0] A_REG = 0; + parameter [0:0] B_REG = 0; + parameter [0:0] D_REG = 0; + parameter [0:0] TOP_8x8_MULT_REG = 0; + parameter [0:0] BOT_8x8_MULT_REG = 0; + parameter [0:0] PIPELINE_16x16_MULT_REG1 = 0; + parameter [0:0] PIPELINE_16x16_MULT_REG2 = 0; + parameter [1:0] TOPOUTPUT_SELECT = 0; + parameter [1:0] TOPADDSUB_LOWERINPUT = 0; + parameter [0:0] TOPADDSUB_UPPERINPUT = 0; + parameter [1:0] TOPADDSUB_CARRYSELECT = 0; + parameter [1:0] BOTOUTPUT_SELECT = 0; + parameter [1:0] BOTADDSUB_LOWERINPUT = 0; + parameter [0:0] BOTADDSUB_UPPERINPUT = 0; + parameter [1:0] BOTADDSUB_CARRYSELECT = 0; + parameter [0:0] MODE_8x8 = 0; + parameter [0:0] A_SIGNED = 0; + parameter [0:0] B_SIGNED = 0; + + wire clock = CLK ^ NEG_TRIGGER; + + // internal wires, compare Figure on page 133 of ICE Technology Library 3.0 and Fig 2 on page 2 of Lattice TN1295-DSP + // http://www.latticesemi.com/~/media/LatticeSemi/Documents/TechnicalBriefs/SBTICETechnologyLibrary201608.pdf + // https://www.latticesemi.com/-/media/LatticeSemi/Documents/ApplicationNotes/AD/DSPFunctionUsageGuideforICE40Devices.ashx + wire [15:0] iA, iB, iC, iD; + wire [15:0] iF, iJ, iK, iG; + wire [31:0] iL, iH; + wire [15:0] iW, iX, iP, iQ; + wire [15:0] iY, iZ, iR, iS; + wire HCI, LCI, LCO; + + // Regs C and A + reg [15:0] rC, rA; + always @(posedge clock, posedge IRSTTOP) begin + if (IRSTTOP) begin + rC <= 0; + rA <= 0; + end else if (CE) begin + if (!CHOLD) rC <= C; + if (!AHOLD) rA <= A; + end + end + assign iC = C_REG ? rC : C; + assign iA = A_REG ? rA : A; + + // Regs B and D + reg [15:0] rB, rD; + always @(posedge clock, posedge IRSTBOT) begin + if (IRSTBOT) begin + rB <= 0; + rD <= 0; + end else if (CE) begin + if (!BHOLD) rB <= B; + if (!DHOLD) rD <= D; + end + end + assign iB = B_REG ? rB : B; + assign iD = D_REG ? rD : D; + + // Multiplier Stage + wire [15:0] p_Ah_Bh, p_Al_Bh, p_Ah_Bl, p_Al_Bl; + wire [15:0] Ah, Al, Bh, Bl; + assign Ah = {A_SIGNED ? {8{iA[15]}} : 8'b0, iA[15: 8]}; + assign Al = {A_SIGNED && MODE_8x8 ? {8{iA[ 7]}} : 8'b0, iA[ 7: 0]}; + assign Bh = {B_SIGNED ? {8{iB[15]}} : 8'b0, iB[15: 8]}; + assign Bl = {B_SIGNED && MODE_8x8 ? {8{iB[ 7]}} : 8'b0, iB[ 7: 0]}; + assign p_Ah_Bh = Ah * Bh; // F + assign p_Al_Bh = {8'b0, Al[7:0]} * Bh; // J + assign p_Ah_Bl = Ah * {8'b0, Bl[7:0]}; // K + assign p_Al_Bl = Al * Bl; // G + + // Regs F and J + reg [15:0] rF, rJ; + always @(posedge clock, posedge IRSTTOP) begin + if (IRSTTOP) begin + rF <= 0; + rJ <= 0; + end else if (CE) begin + rF <= p_Ah_Bh; + if (!MODE_8x8) rJ <= p_Al_Bh; + end + end + assign iF = TOP_8x8_MULT_REG ? rF : p_Ah_Bh; + assign iJ = PIPELINE_16x16_MULT_REG1 ? rJ : p_Al_Bh; + + // Regs K and G + reg [15:0] rK, rG; + always @(posedge clock, posedge IRSTBOT) begin + if (IRSTBOT) begin + rK <= 0; + rG <= 0; + end else if (CE) begin + if (!MODE_8x8) rK <= p_Ah_Bl; + rG <= p_Al_Bl; + end + end + assign iK = PIPELINE_16x16_MULT_REG1 ? rK : p_Ah_Bl; + assign iG = BOT_8x8_MULT_REG ? rG : p_Al_Bl; + + // Adder Stage + wire [23:0] iK_e = {A_SIGNED ? {8{iK[15]}} : 8'b0, iK}; + wire [23:0] iJ_e = {B_SIGNED ? {8{iJ[15]}} : 8'b0, iJ}; + assign iL = iG + (iK_e << 8) + (iJ_e << 8) + (iF << 16); + + // Reg H + reg [31:0] rH; + always @(posedge clock, posedge IRSTBOT) begin + if (IRSTBOT) begin + rH <= 0; + end else if (CE) begin + if (!MODE_8x8) rH <= iL; + end + end + assign iH = PIPELINE_16x16_MULT_REG2 ? rH : iL; + + // Hi Output Stage + wire [15:0] XW, Oh; + reg [15:0] rQ; + assign iW = TOPADDSUB_UPPERINPUT ? iC : iQ; + assign iX = (TOPADDSUB_LOWERINPUT == 0) ? iA : (TOPADDSUB_LOWERINPUT == 1) ? iF : (TOPADDSUB_LOWERINPUT == 2) ? iH[31:16] : {16{iZ[15]}}; + assign {ACCUMCO, XW} = iX + (iW ^ {16{ADDSUBTOP}}) + HCI; + assign CO = ACCUMCO ^ ADDSUBTOP; + assign iP = OLOADTOP ? iC : XW ^ {16{ADDSUBTOP}}; + always @(posedge clock, posedge ORSTTOP) begin + if (ORSTTOP) begin + rQ <= 0; + end else if (CE) begin + if (!OHOLDTOP) rQ <= iP; + end + end + assign iQ = rQ; + assign Oh = (TOPOUTPUT_SELECT == 0) ? iP : (TOPOUTPUT_SELECT == 1) ? iQ : (TOPOUTPUT_SELECT == 2) ? iF : iH[31:16]; + assign HCI = (TOPADDSUB_CARRYSELECT == 0) ? 1'b0 : (TOPADDSUB_CARRYSELECT == 1) ? 1'b1 : (TOPADDSUB_CARRYSELECT == 2) ? LCO : LCO ^ ADDSUBBOT; + assign SIGNEXTOUT = iX[15]; + + // Lo Output Stage + wire [15:0] YZ, Ol; + reg [15:0] rS; + assign iY = BOTADDSUB_UPPERINPUT ? iD : iS; + assign iZ = (BOTADDSUB_LOWERINPUT == 0) ? iB : (BOTADDSUB_LOWERINPUT == 1) ? iG : (BOTADDSUB_LOWERINPUT == 2) ? iH[15:0] : {16{SIGNEXTIN}}; + assign {LCO, YZ} = iZ + (iY ^ {16{ADDSUBBOT}}) + LCI; + assign iR = OLOADBOT ? iD : YZ ^ {16{ADDSUBBOT}}; + always @(posedge clock, posedge ORSTBOT) begin + if (ORSTBOT) begin + rS <= 0; + end else if (CE) begin + if (!OHOLDBOT) rS <= iR; + end + end + assign iS = rS; + assign Ol = (BOTOUTPUT_SELECT == 0) ? iR : (BOTOUTPUT_SELECT == 1) ? iS : (BOTOUTPUT_SELECT == 2) ? iG : iH[15:0]; + assign LCI = (BOTADDSUB_CARRYSELECT == 0) ? 1'b0 : (BOTADDSUB_CARRYSELECT == 1) ? 1'b1 : (BOTADDSUB_CARRYSELECT == 2) ? ACCUMCI : CI; + assign O = {Oh, Ol}; +endmodule + +// Post-place-and-route RAM model +module ICESTORM_RAM( + output RDATA_15, RDATA_14, RDATA_13, RDATA_12, RDATA_11, RDATA_10, RDATA_9, RDATA_8, RDATA_7, RDATA_6, RDATA_5, RDATA_4, RDATA_3, RDATA_2, RDATA_1, RDATA_0, + input RCLK, RCLKE, RE, + input RADDR_10, RADDR_9, RADDR_8, RADDR_7, RADDR_6, RADDR_5, RADDR_4, RADDR_3, RADDR_2, RADDR_1, RADDR_0, + input WCLK, WCLKE, WE, + input WADDR_10, WADDR_9, WADDR_8, WADDR_7, WADDR_6, WADDR_5, WADDR_4, WADDR_3, WADDR_2, WADDR_1, WADDR_0, + input MASK_15, MASK_14, MASK_13, MASK_12, MASK_11, MASK_10, MASK_9, MASK_8, MASK_7, MASK_6, MASK_5, MASK_4, MASK_3, MASK_2, MASK_1, MASK_0, + input WDATA_15, WDATA_14, WDATA_13, WDATA_12, WDATA_11, WDATA_10, WDATA_9, WDATA_8, WDATA_7, WDATA_6, WDATA_5, WDATA_4, WDATA_3, WDATA_2, WDATA_1, WDATA_0 +); + parameter WRITE_MODE = 0; + parameter READ_MODE = 0; + + parameter NEG_CLK_R = 1'b0; + parameter NEG_CLK_W = 1'b0; + + parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + + // Pull-down and pull-up functions + function pd; + input x; + begin + pd = (x === 1'bz) ? 1'b0 : x; + end + endfunction + + function pu; + input x; + begin + pu = (x === 1'bz) ? 1'b1 : x; + end + endfunction + + SB_RAM40_4K #( + .WRITE_MODE(WRITE_MODE), + .READ_MODE (READ_MODE ), + .INIT_0 (INIT_0 ), + .INIT_1 (INIT_1 ), + .INIT_2 (INIT_2 ), + .INIT_3 (INIT_3 ), + .INIT_4 (INIT_4 ), + .INIT_5 (INIT_5 ), + .INIT_6 (INIT_6 ), + .INIT_7 (INIT_7 ), + .INIT_8 (INIT_8 ), + .INIT_9 (INIT_9 ), + .INIT_A (INIT_A ), + .INIT_B (INIT_B ), + .INIT_C (INIT_C ), + .INIT_D (INIT_D ), + .INIT_E (INIT_E ), + .INIT_F (INIT_F ) + ) RAM ( + .RDATA({RDATA_15, RDATA_14, RDATA_13, RDATA_12, RDATA_11, RDATA_10, RDATA_9, RDATA_8, RDATA_7, RDATA_6, RDATA_5, RDATA_4, RDATA_3, RDATA_2, RDATA_1, RDATA_0}), + .RCLK (pd(RCLK) ^ NEG_CLK_R), + .RCLKE(pu(RCLKE)), + .RE (pd(RE)), + .RADDR({pd(RADDR_10), pd(RADDR_9), pd(RADDR_8), pd(RADDR_7), pd(RADDR_6), pd(RADDR_5), pd(RADDR_4), pd(RADDR_3), pd(RADDR_2), pd(RADDR_1), pd(RADDR_0)}), + .WCLK (pd(WCLK) ^ NEG_CLK_W), + .WCLKE(pu(WCLKE)), + .WE (pd(WE)), + .WADDR({pd(WADDR_10), pd(WADDR_9), pd(WADDR_8), pd(WADDR_7), pd(WADDR_6), pd(WADDR_5), pd(WADDR_4), pd(WADDR_3), pd(WADDR_2), pd(WADDR_1), pd(WADDR_0)}), + .MASK ({pd(MASK_15), pd(MASK_14), pd(MASK_13), pd(MASK_12), pd(MASK_11), pd(MASK_10), pd(MASK_9), pd(MASK_8), + pd(MASK_7), pd(MASK_6), pd(MASK_5), pd(MASK_4), pd(MASK_3), pd(MASK_2), pd(MASK_1), pd(MASK_0)}), + .WDATA({pd(WDATA_15), pd(WDATA_14), pd(WDATA_13), pd(WDATA_12), pd(WDATA_11), pd(WDATA_10), pd(WDATA_9), pd(WDATA_8), + pd(WDATA_7), pd(WDATA_6), pd(WDATA_5), pd(WDATA_4), pd(WDATA_3), pd(WDATA_2), pd(WDATA_1), pd(WDATA_0)}) + ); + +`ifdef TIMING +specify + (RCLK => RDATA_15) = (0:0:0, 0:0:0); + (RCLK => RDATA_14) = (0:0:0, 0:0:0); + (RCLK => RDATA_13) = (0:0:0, 0:0:0); + (RCLK => RDATA_12) = (0:0:0, 0:0:0); + (RCLK => RDATA_11) = (0:0:0, 0:0:0); + (RCLK => RDATA_10) = (0:0:0, 0:0:0); + (RCLK => RDATA_9) = (0:0:0, 0:0:0); + (RCLK => RDATA_8) = (0:0:0, 0:0:0); + (RCLK => RDATA_7) = (0:0:0, 0:0:0); + (RCLK => RDATA_6) = (0:0:0, 0:0:0); + (RCLK => RDATA_5) = (0:0:0, 0:0:0); + (RCLK => RDATA_4) = (0:0:0, 0:0:0); + (RCLK => RDATA_3) = (0:0:0, 0:0:0); + (RCLK => RDATA_2) = (0:0:0, 0:0:0); + (RCLK => RDATA_1) = (0:0:0, 0:0:0); + (RCLK => RDATA_0) = (0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RCLKE, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RCLKE, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RCLKE, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RCLKE, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RE, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RE, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RE, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RE, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_10, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_10, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_10, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_10, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_9, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_9, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_9, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_9, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_8, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_8, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_8, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_8, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_7, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_7, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_7, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_7, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_6, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_6, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_6, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_6, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_5, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_5, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_5, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_5, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_4, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_4, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_4, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_4, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_3, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_3, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_3, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_3, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_2, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_2, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_2, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_2, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_1, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_1, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_1, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_1, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, posedge RADDR_0, 0:0:0, 0:0:0); + $setuphold(posedge RCLK, negedge RADDR_0, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, posedge RADDR_0, 0:0:0, 0:0:0); + $setuphold(negedge RCLK, negedge RADDR_0, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WCLKE, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WCLKE, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WCLKE, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WCLKE, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WE, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WE, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WE, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WE, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_10, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_10, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_10, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_10, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_9, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_9, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_9, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_9, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_8, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_8, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_8, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_8, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_7, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_7, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_7, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_7, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_6, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_6, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_6, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_6, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_5, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_5, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_5, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_5, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_4, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_4, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_4, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_4, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_3, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_3, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_3, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_3, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_2, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_2, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_2, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_2, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_1, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_1, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_1, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_1, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WADDR_0, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WADDR_0, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WADDR_0, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WADDR_0, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_15, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_15, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_15, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_15, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_14, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_14, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_14, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_14, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_13, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_13, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_13, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_13, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_12, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_12, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_12, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_12, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_11, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_11, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_11, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_11, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_10, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_10, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_10, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_10, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_9, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_9, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_9, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_9, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_8, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_8, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_8, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_8, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_7, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_7, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_7, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_7, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_6, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_6, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_6, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_6, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_5, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_5, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_5, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_5, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_4, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_4, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_4, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_4, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_3, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_3, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_3, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_3, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_2, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_2, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_2, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_2, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_1, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_1, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_1, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_1, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge MASK_0, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge MASK_0, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge MASK_0, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge MASK_0, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_15, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_15, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_15, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_15, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_14, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_14, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_14, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_14, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_13, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_13, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_13, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_13, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_12, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_12, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_12, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_12, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_11, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_11, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_11, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_11, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_10, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_10, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_10, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_10, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_9, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_9, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_9, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_9, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_8, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_8, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_8, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_8, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_7, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_7, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_7, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_7, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_6, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_6, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_6, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_6, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_5, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_5, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_5, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_5, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_4, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_4, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_4, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_4, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_3, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_3, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_3, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_3, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_2, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_2, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_2, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_2, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_1, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_1, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_1, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_1, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, posedge WDATA_0, 0:0:0, 0:0:0); + $setuphold(posedge WCLK, negedge WDATA_0, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, posedge WDATA_0, 0:0:0, 0:0:0); + $setuphold(negedge WCLK, negedge WDATA_0, 0:0:0, 0:0:0); + +endspecify +`endif +endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/dsp_map.v b/resources/netlist/resources/kernel/share/ice40/dsp_map.v new file mode 100644 index 0000000..06fa739 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/dsp_map.v @@ -0,0 +1,34 @@ +module \$__MUL16X16 (input [15:0] A, input [15:0] B, output [31:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + SB_MAC16 #( + .NEG_TRIGGER(1'b0), + .C_REG(1'b0), + .A_REG(1'b0), + .B_REG(1'b0), + .D_REG(1'b0), + .TOP_8x8_MULT_REG(1'b0), + .BOT_8x8_MULT_REG(1'b0), + .PIPELINE_16x16_MULT_REG1(1'b0), + .PIPELINE_16x16_MULT_REG2(1'b0), + .TOPOUTPUT_SELECT(2'b11), + .TOPADDSUB_LOWERINPUT(2'b0), + .TOPADDSUB_UPPERINPUT(1'b0), + .TOPADDSUB_CARRYSELECT(2'b0), + .BOTOUTPUT_SELECT(2'b11), + .BOTADDSUB_LOWERINPUT(2'b0), + .BOTADDSUB_UPPERINPUT(1'b0), + .BOTADDSUB_CARRYSELECT(2'b0), + .MODE_8x8(1'b0), + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED) + ) _TECHMAP_REPLACE_ ( + .A(A), + .B(B), + .O(Y), + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/ff_map.v b/resources/netlist/resources/kernel/share/ice40/ff_map.v new file mode 100644 index 0000000..8174323 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/ff_map.v @@ -0,0 +1,25 @@ +module \$_DFF_N_ (input D, C, output Q); SB_DFFN _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFF_P_ (input D, C, output Q); SB_DFF _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule + +module \$_DFFE_NP_ (input D, C, E, output Q); SB_DFFNE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFFE_PP_ (input D, C, E, output Q); SB_DFFE _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule + +module \$_DFF_NP0_ (input D, C, R, output Q); SB_DFFNR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFF_NP1_ (input D, C, R, output Q); SB_DFFNS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFF_PP0_ (input D, C, R, output Q); SB_DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFF_PP1_ (input D, C, R, output Q); SB_DFFS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule + +module \$_DFFE_NP0P_ (input D, C, E, R, output Q); SB_DFFNER _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFFE_NP1P_ (input D, C, E, R, output Q); SB_DFFNES _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFFE_PP0P_ (input D, C, E, R, output Q); SB_DFFER _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_DFFE_PP1P_ (input D, C, E, R, output Q); SB_DFFES _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule + +module \$_SDFF_NP0_ (input D, C, R, output Q); SB_DFFNSR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_SDFF_NP1_ (input D, C, R, output Q); SB_DFFNSS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_SDFF_PP0_ (input D, C, R, output Q); SB_DFFSR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_SDFF_PP1_ (input D, C, R, output Q); SB_DFFSS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule + +module \$_SDFFCE_NP0P_ (input D, C, E, R, output Q); SB_DFFNESR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_SDFFCE_NP1P_ (input D, C, E, R, output Q); SB_DFFNESS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_SDFFCE_PP0P_ (input D, C, E, R, output Q); SB_DFFESR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .R(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule +module \$_SDFFCE_PP1P_ (input D, C, E, R, output Q); SB_DFFESS _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .E(E), .S(R)); wire _TECHMAP_REMOVEINIT_Q_ = 1; endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/latches_map.v b/resources/netlist/resources/kernel/share/ice40/latches_map.v new file mode 100644 index 0000000..c28f88c --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/latches_map.v @@ -0,0 +1,11 @@ +module \$_DLATCH_N_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = !E ? D : Q; +endmodule + +module \$_DLATCH_P_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = E ? D : Q; +endmodule diff --git a/resources/netlist/resources/kernel/share/ice40/spram.txt b/resources/netlist/resources/kernel/share/ice40/spram.txt new file mode 100644 index 0000000..ed0699f --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/spram.txt @@ -0,0 +1,12 @@ +ram huge $__ICE40_SPRAM_ { + abits 14; + width 16; + cost 2048; + byte 4; + port srsw "A" { + clock posedge; + clken; + wrbe_separate; + rdwr no_change; + } +} diff --git a/resources/netlist/resources/kernel/share/ice40/spram_map.v b/resources/netlist/resources/kernel/share/ice40/spram_map.v new file mode 100644 index 0000000..ae89195 --- /dev/null +++ b/resources/netlist/resources/kernel/share/ice40/spram_map.v @@ -0,0 +1,24 @@ +module $__ICE40_SPRAM_ (...); + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input [3:0] PORT_A_WR_BE; +input [13:0] PORT_A_ADDR; +input [15:0] PORT_A_WR_DATA; +output [15:0] PORT_A_RD_DATA; + +SB_SPRAM256KA _TECHMAP_REPLACE_ ( + .ADDRESS(PORT_A_ADDR), + .DATAIN(PORT_A_WR_DATA), + .MASKWREN(PORT_A_WR_BE), + .WREN(PORT_A_WR_EN), + .CHIPSELECT(PORT_A_CLK_EN), + .CLOCK(PORT_A_CLK), + .STANDBY(1'b0), + .SLEEP(1'b0), + .POWEROFF(1'b1), + .DATAOUT(PORT_A_RD_DATA), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl.h b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl.h new file mode 100644 index 0000000..073921c --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl.h @@ -0,0 +1,1616 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2019-2020 whitequark + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// This file is included by the designs generated with `write_cxxrtl`. It is not used in Yosys itself. +// +// The CXXRTL support library implements compile time specialized arbitrary width arithmetics, as well as provides +// composite lvalues made out of bit slices and concatenations of lvalues. This allows the `write_cxxrtl` pass +// to perform a straightforward translation of RTLIL structures to readable C++, relying on the C++ compiler +// to unwrap the abstraction and generate efficient code. + +#ifndef CXXRTL_H +#define CXXRTL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifndef __has_attribute +# define __has_attribute(x) 0 +#endif + +// CXXRTL essentially uses the C++ compiler as a hygienic macro engine that feeds an instruction selector. +// It generates a lot of specialized template functions with relatively large bodies that, when inlined +// into the caller and (for those with loops) unrolled, often expose many new optimization opportunities. +// Because of this, most of the CXXRTL runtime must be always inlined for best performance. +#if __has_attribute(always_inline) +#define CXXRTL_ALWAYS_INLINE inline __attribute__((__always_inline__)) +#else +#define CXXRTL_ALWAYS_INLINE inline +#endif +// Conversely, some functions in the generated code are extremely large yet very cold, with both of these +// properties being extreme enough to confuse C++ compilers into spending pathological amounts of time +// on a futile (the code becomes worse) attempt to optimize the least important parts of code. +#if __has_attribute(optnone) +#define CXXRTL_EXTREMELY_COLD __attribute__((__optnone__)) +#elif __has_attribute(optimize) +#define CXXRTL_EXTREMELY_COLD __attribute__((__optimize__(0))) +#else +#define CXXRTL_EXTREMELY_COLD +#endif + +// CXXRTL uses assert() to check for C++ contract violations (which may result in e.g. undefined behavior +// of the simulation code itself), and CXXRTL_ASSERT to check for RTL contract violations (which may at +// most result in undefined simulation results). +// +// Though by default, CXXRTL_ASSERT() expands to assert(), it may be overridden e.g. when integrating +// the simulation into another process that should survive violating RTL contracts. +#ifndef CXXRTL_ASSERT +#ifndef CXXRTL_NDEBUG +#define CXXRTL_ASSERT(x) assert(x) +#else +#define CXXRTL_ASSERT(x) +#endif +#endif + +namespace cxxrtl { + +// All arbitrary-width values in CXXRTL are backed by arrays of unsigned integers called chunks. The chunk size +// is the same regardless of the value width to simplify manipulating values via FFI interfaces, e.g. driving +// and introspecting the simulation in Python. +// +// It is practical to use chunk sizes between 32 bits and platform register size because when arithmetics on +// narrower integer types is legalized by the C++ compiler, it inserts code to clear the high bits of the register. +// However, (a) most of our operations do not change those bits in the first place because of invariants that are +// invisible to the compiler, (b) we often operate on non-power-of-2 values and have to clear the high bits anyway. +// Therefore, using relatively wide chunks and clearing the high bits explicitly and only when we know they may be +// clobbered results in simpler generated code. +typedef uint32_t chunk_t; +typedef uint64_t wide_chunk_t; + +template +struct chunk_traits { + static_assert(std::is_integral::value && std::is_unsigned::value, + "chunk type must be an unsigned integral type"); + using type = T; + static constexpr size_t bits = std::numeric_limits::digits; + static constexpr T mask = std::numeric_limits::max(); +}; + +template +struct expr_base; + +template +struct value : public expr_base> { + static constexpr size_t bits = Bits; + + using chunk = chunk_traits; + static constexpr chunk::type msb_mask = (Bits % chunk::bits == 0) ? chunk::mask + : chunk::mask >> (chunk::bits - (Bits % chunk::bits)); + + static constexpr size_t chunks = (Bits + chunk::bits - 1) / chunk::bits; + chunk::type data[chunks] = {}; + + value() = default; + template + explicit constexpr value(Init ...init) : data{init...} {} + + value(const value &) = default; + value &operator=(const value &) = default; + + value(value &&) = default; + value &operator=(value &&) = default; + + // A (no-op) helper that forces the cast to value<>. + CXXRTL_ALWAYS_INLINE + const value &val() const { + return *this; + } + + std::string str() const { + std::stringstream ss; + ss << *this; + return ss.str(); + } + + // Conversion operations. + // + // These functions ensure that a conversion is never out of range, and should be always used, if at all + // possible, instead of direct manipulation of the `data` member. For very large types, .slice() and + // .concat() can be used to split them into more manageable parts. + template + CXXRTL_ALWAYS_INLINE + IntegerT get() const { + static_assert(std::numeric_limits::is_integer && !std::numeric_limits::is_signed, + "get() requires T to be an unsigned integral type"); + static_assert(std::numeric_limits::digits >= Bits, + "get() requires T to be at least as wide as the value is"); + IntegerT result = 0; + for (size_t n = 0; n < chunks; n++) + result |= IntegerT(data[n]) << (n * chunk::bits); + return result; + } + + template + CXXRTL_ALWAYS_INLINE + void set(IntegerT other) { + static_assert(std::numeric_limits::is_integer && !std::numeric_limits::is_signed, + "set() requires T to be an unsigned integral type"); + static_assert(std::numeric_limits::digits >= Bits, + "set() requires the value to be at least as wide as T is"); + for (size_t n = 0; n < chunks; n++) + data[n] = (other >> (n * chunk::bits)) & chunk::mask; + } + + // Operations with compile-time parameters. + // + // These operations are used to implement slicing, concatenation, and blitting. + // The trunc, zext and sext operations add or remove most significant bits (i.e. on the left); + // the rtrunc and rzext operations add or remove least significant bits (i.e. on the right). + template + CXXRTL_ALWAYS_INLINE + value trunc() const { + static_assert(NewBits <= Bits, "trunc() may not increase width"); + value result; + for (size_t n = 0; n < result.chunks; n++) + result.data[n] = data[n]; + result.data[result.chunks - 1] &= result.msb_mask; + return result; + } + + template + CXXRTL_ALWAYS_INLINE + value zext() const { + static_assert(NewBits >= Bits, "zext() may not decrease width"); + value result; + for (size_t n = 0; n < chunks; n++) + result.data[n] = data[n]; + return result; + } + + template + CXXRTL_ALWAYS_INLINE + value sext() const { + static_assert(NewBits >= Bits, "sext() may not decrease width"); + value result; + for (size_t n = 0; n < chunks; n++) + result.data[n] = data[n]; + if (is_neg()) { + result.data[chunks - 1] |= ~msb_mask; + for (size_t n = chunks; n < result.chunks; n++) + result.data[n] = chunk::mask; + result.data[result.chunks - 1] &= result.msb_mask; + } + return result; + } + + template + CXXRTL_ALWAYS_INLINE + value rtrunc() const { + static_assert(NewBits <= Bits, "rtrunc() may not increase width"); + value result; + constexpr size_t shift_chunks = (Bits - NewBits) / chunk::bits; + constexpr size_t shift_bits = (Bits - NewBits) % chunk::bits; + chunk::type carry = 0; + if (shift_chunks + result.chunks < chunks) { + carry = (shift_bits == 0) ? 0 + : data[shift_chunks + result.chunks] << (chunk::bits - shift_bits); + } + for (size_t n = result.chunks; n > 0; n--) { + result.data[n - 1] = carry | (data[shift_chunks + n - 1] >> shift_bits); + carry = (shift_bits == 0) ? 0 + : data[shift_chunks + n - 1] << (chunk::bits - shift_bits); + } + return result; + } + + template + CXXRTL_ALWAYS_INLINE + value rzext() const { + static_assert(NewBits >= Bits, "rzext() may not decrease width"); + value result; + constexpr size_t shift_chunks = (NewBits - Bits) / chunk::bits; + constexpr size_t shift_bits = (NewBits - Bits) % chunk::bits; + chunk::type carry = 0; + for (size_t n = 0; n < chunks; n++) { + result.data[shift_chunks + n] = (data[n] << shift_bits) | carry; + carry = (shift_bits == 0) ? 0 + : data[n] >> (chunk::bits - shift_bits); + } + if (shift_chunks + chunks < result.chunks) + result.data[shift_chunks + chunks] = carry; + return result; + } + + // Bit blit operation, i.e. a partial read-modify-write. + template + CXXRTL_ALWAYS_INLINE + value blit(const value &source) const { + static_assert(Stop >= Start, "blit() may not reverse bit order"); + constexpr chunk::type start_mask = ~(chunk::mask << (Start % chunk::bits)); + constexpr chunk::type stop_mask = (Stop % chunk::bits + 1 == chunk::bits) ? 0 + : (chunk::mask << (Stop % chunk::bits + 1)); + value masked = *this; + if (Start / chunk::bits == Stop / chunk::bits) { + masked.data[Start / chunk::bits] &= stop_mask | start_mask; + } else { + masked.data[Start / chunk::bits] &= start_mask; + for (size_t n = Start / chunk::bits + 1; n < Stop / chunk::bits; n++) + masked.data[n] = 0; + masked.data[Stop / chunk::bits] &= stop_mask; + } + value shifted = source + .template rzext() + .template zext(); + return masked.bit_or(shifted); + } + + // Helpers for selecting extending or truncating operation depending on whether the result is wider or narrower + // than the operand. In C++17 these can be replaced with `if constexpr`. + template + struct zext_cast { + CXXRTL_ALWAYS_INLINE + value operator()(const value &val) { + return val.template zext(); + } + }; + + template + struct zext_cast::type> { + CXXRTL_ALWAYS_INLINE + value operator()(const value &val) { + return val.template trunc(); + } + }; + + template + struct sext_cast { + CXXRTL_ALWAYS_INLINE + value operator()(const value &val) { + return val.template sext(); + } + }; + + template + struct sext_cast::type> { + CXXRTL_ALWAYS_INLINE + value operator()(const value &val) { + return val.template trunc(); + } + }; + + template + CXXRTL_ALWAYS_INLINE + value zcast() const { + return zext_cast()(*this); + } + + template + CXXRTL_ALWAYS_INLINE + value scast() const { + return sext_cast()(*this); + } + + // Bit replication is far more efficient than the equivalent concatenation. + template + CXXRTL_ALWAYS_INLINE + value repeat() const { + static_assert(Bits == 1, "repeat() is implemented only for 1-bit values"); + return *this ? value().bit_not() : value(); + } + + // Operations with run-time parameters (offsets, amounts, etc). + // + // These operations are used for computations. + bool bit(size_t offset) const { + return data[offset / chunk::bits] & (1 << (offset % chunk::bits)); + } + + void set_bit(size_t offset, bool value = true) { + size_t offset_chunks = offset / chunk::bits; + size_t offset_bits = offset % chunk::bits; + data[offset_chunks] &= ~(1 << offset_bits); + data[offset_chunks] |= value ? 1 << offset_bits : 0; + } + + explicit operator bool() const { + return !is_zero(); + } + + bool is_zero() const { + for (size_t n = 0; n < chunks; n++) + if (data[n] != 0) + return false; + return true; + } + + bool is_neg() const { + return data[chunks - 1] & (1 << ((Bits - 1) % chunk::bits)); + } + + bool operator ==(const value &other) const { + for (size_t n = 0; n < chunks; n++) + if (data[n] != other.data[n]) + return false; + return true; + } + + bool operator !=(const value &other) const { + return !(*this == other); + } + + value bit_not() const { + value result; + for (size_t n = 0; n < chunks; n++) + result.data[n] = ~data[n]; + result.data[chunks - 1] &= msb_mask; + return result; + } + + value bit_and(const value &other) const { + value result; + for (size_t n = 0; n < chunks; n++) + result.data[n] = data[n] & other.data[n]; + return result; + } + + value bit_or(const value &other) const { + value result; + for (size_t n = 0; n < chunks; n++) + result.data[n] = data[n] | other.data[n]; + return result; + } + + value bit_xor(const value &other) const { + value result; + for (size_t n = 0; n < chunks; n++) + result.data[n] = data[n] ^ other.data[n]; + return result; + } + + value update(const value &val, const value &mask) const { + return bit_and(mask.bit_not()).bit_or(val.bit_and(mask)); + } + + template + value shl(const value &amount) const { + // Ensure our early return is correct by prohibiting values larger than 4 Gbit. + static_assert(Bits <= chunk::mask, "shl() of unreasonably large values is not supported"); + // Detect shifts definitely large than Bits early. + for (size_t n = 1; n < amount.chunks; n++) + if (amount.data[n] != 0) + return {}; + // Past this point we can use the least significant chunk as the shift size. + size_t shift_chunks = amount.data[0] / chunk::bits; + size_t shift_bits = amount.data[0] % chunk::bits; + if (shift_chunks >= chunks) + return {}; + value result; + chunk::type carry = 0; + for (size_t n = 0; n < chunks - shift_chunks; n++) { + result.data[shift_chunks + n] = (data[n] << shift_bits) | carry; + carry = (shift_bits == 0) ? 0 + : data[n] >> (chunk::bits - shift_bits); + } + return result; + } + + template + value shr(const value &amount) const { + // Ensure our early return is correct by prohibiting values larger than 4 Gbit. + static_assert(Bits <= chunk::mask, "shr() of unreasonably large values is not supported"); + // Detect shifts definitely large than Bits early. + for (size_t n = 1; n < amount.chunks; n++) + if (amount.data[n] != 0) + return {}; + // Past this point we can use the least significant chunk as the shift size. + size_t shift_chunks = amount.data[0] / chunk::bits; + size_t shift_bits = amount.data[0] % chunk::bits; + if (shift_chunks >= chunks) + return {}; + value result; + chunk::type carry = 0; + for (size_t n = 0; n < chunks - shift_chunks; n++) { + result.data[chunks - shift_chunks - 1 - n] = carry | (data[chunks - 1 - n] >> shift_bits); + carry = (shift_bits == 0) ? 0 + : data[chunks - 1 - n] << (chunk::bits - shift_bits); + } + if (Signed && is_neg()) { + size_t top_chunk_idx = (Bits - shift_bits) / chunk::bits; + size_t top_chunk_bits = (Bits - shift_bits) % chunk::bits; + for (size_t n = top_chunk_idx + 1; n < chunks; n++) + result.data[n] = chunk::mask; + if (shift_bits != 0) + result.data[top_chunk_idx] |= chunk::mask << top_chunk_bits; + } + return result; + } + + template + value sshr(const value &amount) const { + return shr(amount); + } + + template + value bmux(const value &sel) const { + static_assert(ResultBits << SelBits == Bits, "invalid sizes used in bmux()"); + size_t amount = sel.data[0] * ResultBits; + size_t shift_chunks = amount / chunk::bits; + size_t shift_bits = amount % chunk::bits; + value result; + chunk::type carry = 0; + if (ResultBits % chunk::bits + shift_bits > chunk::bits) + carry = data[result.chunks + shift_chunks] << (chunk::bits - shift_bits); + for (size_t n = 0; n < result.chunks; n++) { + result.data[result.chunks - 1 - n] = carry | (data[result.chunks + shift_chunks - 1 - n] >> shift_bits); + carry = (shift_bits == 0) ? 0 + : data[result.chunks + shift_chunks - 1 - n] << (chunk::bits - shift_bits); + } + return result; + } + + template + value demux(const value &sel) const { + static_assert(Bits << SelBits == ResultBits, "invalid sizes used in demux()"); + size_t amount = sel.data[0] * Bits; + size_t shift_chunks = amount / chunk::bits; + size_t shift_bits = amount % chunk::bits; + value result; + chunk::type carry = 0; + for (size_t n = 0; n < chunks; n++) { + result.data[shift_chunks + n] = (data[n] << shift_bits) | carry; + carry = (shift_bits == 0) ? 0 + : data[n] >> (chunk::bits - shift_bits); + } + if (Bits % chunk::bits + shift_bits > chunk::bits) + result.data[shift_chunks + chunks] = carry; + return result; + } + + size_t ctpop() const { + size_t count = 0; + for (size_t n = 0; n < chunks; n++) { + // This loop implements the population count idiom as recognized by LLVM and GCC. + for (chunk::type x = data[n]; x != 0; count++) + x = x & (x - 1); + } + return count; + } + + size_t ctlz() const { + size_t count = 0; + for (size_t n = 0; n < chunks; n++) { + chunk::type x = data[chunks - 1 - n]; + if (x == 0) { + count += (n == 0 ? Bits % chunk::bits : chunk::bits); + } else { + // This loop implements the find first set idiom as recognized by LLVM. + for (; x != 0; count++) + x >>= 1; + } + } + return count; + } + + template + std::pair, bool /*CarryOut*/> alu(const value &other) const { + value result; + bool carry = CarryIn; + for (size_t n = 0; n < result.chunks; n++) { + result.data[n] = data[n] + (Invert ? ~other.data[n] : other.data[n]) + carry; + if (result.chunks - 1 == n) + result.data[result.chunks - 1] &= result.msb_mask; + carry = (result.data[n] < data[n]) || + (result.data[n] == data[n] && carry); + } + return {result, carry}; + } + + value add(const value &other) const { + return alu(other).first; + } + + value sub(const value &other) const { + return alu(other).first; + } + + value neg() const { + return value { 0u }.sub(*this); + } + + bool ucmp(const value &other) const { + bool carry; + std::tie(std::ignore, carry) = alu(other); + return !carry; // a.ucmp(b) ≡ a u< b + } + + bool scmp(const value &other) const { + value result; + bool carry; + std::tie(result, carry) = alu(other); + bool overflow = (is_neg() == !other.is_neg()) && (is_neg() != result.is_neg()); + return result.is_neg() ^ overflow; // a.scmp(b) ≡ a s< b + } + + template + value mul(const value &other) const { + value result; + wide_chunk_t wide_result[result.chunks + 1] = {}; + for (size_t n = 0; n < chunks; n++) { + for (size_t m = 0; m < chunks && n + m < result.chunks; m++) { + wide_result[n + m] += wide_chunk_t(data[n]) * wide_chunk_t(other.data[m]); + wide_result[n + m + 1] += wide_result[n + m] >> chunk::bits; + wide_result[n + m] &= chunk::mask; + } + } + for (size_t n = 0; n < result.chunks; n++) { + result.data[n] = wide_result[n]; + } + result.data[result.chunks - 1] &= result.msb_mask; + return result; + } +}; + +// Expression template for a slice, usable as lvalue or rvalue, and composable with other expression templates here. +template +struct slice_expr : public expr_base> { + static_assert(Stop >= Start, "slice_expr() may not reverse bit order"); + static_assert(Start < T::bits && Stop < T::bits, "slice_expr() must be within bounds"); + static constexpr size_t bits = Stop - Start + 1; + + T &expr; + + slice_expr(T &expr) : expr(expr) {} + slice_expr(const slice_expr &) = delete; + + CXXRTL_ALWAYS_INLINE + operator value() const { + return static_cast &>(expr) + .template rtrunc() + .template trunc(); + } + + CXXRTL_ALWAYS_INLINE + slice_expr &operator=(const value &rhs) { + // Generic partial assignment implemented using a read-modify-write operation on the sliced expression. + expr = static_cast &>(expr) + .template blit(rhs); + return *this; + } + + // A helper that forces the cast to value<>, which allows deduction to work. + CXXRTL_ALWAYS_INLINE + value val() const { + return static_cast &>(*this); + } +}; + +// Expression template for a concatenation, usable as lvalue or rvalue, and composable with other expression templates here. +template +struct concat_expr : public expr_base> { + static constexpr size_t bits = T::bits + U::bits; + + T &ms_expr; + U &ls_expr; + + concat_expr(T &ms_expr, U &ls_expr) : ms_expr(ms_expr), ls_expr(ls_expr) {} + concat_expr(const concat_expr &) = delete; + + CXXRTL_ALWAYS_INLINE + operator value() const { + value ms_shifted = static_cast &>(ms_expr) + .template rzext(); + value ls_extended = static_cast &>(ls_expr) + .template zext(); + return ms_shifted.bit_or(ls_extended); + } + + CXXRTL_ALWAYS_INLINE + concat_expr &operator=(const value &rhs) { + ms_expr = rhs.template rtrunc(); + ls_expr = rhs.template trunc(); + return *this; + } + + // A helper that forces the cast to value<>, which allows deduction to work. + CXXRTL_ALWAYS_INLINE + value val() const { + return static_cast &>(*this); + } +}; + +// Base class for expression templates, providing helper methods for operations that are valid on both rvalues and lvalues. +// +// Note that expression objects (slices and concatenations) constructed in this way should NEVER be captured because +// they refer to temporaries that will, in general, only live until the end of the statement. For example, both of +// these snippets perform use-after-free: +// +// const auto &a = val.slice<7,0>().slice<1>(); +// value<1> b = a; +// +// auto &&c = val.slice<7,0>().slice<1>(); +// c = value<1>{1u}; +// +// An easy way to write code using slices and concatenations safely is to follow two simple rules: +// * Never explicitly name any type except `value` or `const value &`. +// * Never use a `const auto &` or `auto &&` in any such expression. +// Then, any code that compiles will be well-defined. +template +struct expr_base { + template + CXXRTL_ALWAYS_INLINE + slice_expr slice() const { + return {*static_cast(this)}; + } + + template + CXXRTL_ALWAYS_INLINE + slice_expr slice() { + return {*static_cast(this)}; + } + + template + CXXRTL_ALWAYS_INLINE + concat_expr::type> concat(const U &other) const { + return {*static_cast(this), other}; + } + + template + CXXRTL_ALWAYS_INLINE + concat_expr::type> concat(U &&other) { + return {*static_cast(this), other}; + } +}; + +template +std::ostream &operator<<(std::ostream &os, const value &val) { + auto old_flags = os.flags(std::ios::right); + auto old_width = os.width(0); + auto old_fill = os.fill('0'); + os << val.bits << '\'' << std::hex; + for (size_t n = val.chunks - 1; n != (size_t)-1; n--) { + if (n == val.chunks - 1 && Bits % value::chunk::bits != 0) + os.width((Bits % value::chunk::bits + 3) / 4); + else + os.width((value::chunk::bits + 3) / 4); + os << val.data[n]; + } + os.fill(old_fill); + os.width(old_width); + os.flags(old_flags); + return os; +} + +template +struct wire { + static constexpr size_t bits = Bits; + + value curr; + value next; + + wire() = default; + explicit constexpr wire(const value &init) : curr(init), next(init) {} + template + explicit constexpr wire(Init ...init) : curr{init...}, next{init...} {} + + // Copying and copy-assigning values is natural. If, however, a value is replaced with a wire, + // e.g. because a module is built with a different optimization level, then existing code could + // unintentionally copy a wire instead, which would create a subtle but serious bug. To make sure + // this doesn't happen, prohibit copying and copy-assigning wires. + wire(const wire &) = delete; + wire &operator=(const wire &) = delete; + + wire(wire &&) = default; + wire &operator=(wire &&) = default; + + template + CXXRTL_ALWAYS_INLINE + IntegerT get() const { + return curr.template get(); + } + + template + CXXRTL_ALWAYS_INLINE + void set(IntegerT other) { + next.template set(other); + } + + bool commit() { + if (curr != next) { + curr = next; + return true; + } + return false; + } +}; + +template +std::ostream &operator<<(std::ostream &os, const wire &val) { + os << val.curr; + return os; +} + +template +struct memory { + const size_t depth; + std::unique_ptr[]> data; + + explicit memory(size_t depth) : depth(depth), data(new value[depth]) {} + + memory(const memory &) = delete; + memory &operator=(const memory &) = delete; + + memory(memory &&) = default; + memory &operator=(memory &&other) { + assert(depth == other.depth); + data = std::move(other.data); + write_queue = std::move(other.write_queue); + return *this; + } + + // An operator for direct memory reads. May be used at any time during the simulation. + const value &operator [](size_t index) const { + assert(index < depth); + return data[index]; + } + + // An operator for direct memory writes. May only be used before the simulation is started. If used + // after the simulation is started, the design may malfunction. + value &operator [](size_t index) { + assert(index < depth); + return data[index]; + } + + // A simple way to make a writable memory would be to use an array of wires instead of an array of values. + // However, there are two significant downsides to this approach: first, it has large overhead (2× space + // overhead, and O(depth) time overhead during commit); second, it does not simplify handling write port + // priorities. Although in principle write ports could be ordered or conditionally enabled in generated + // code based on their priorities and selected addresses, the feedback arc set problem is computationally + // expensive, and the heuristic based algorithms are not easily modified to guarantee (rather than prefer) + // a particular write port evaluation order. + // + // The approach used here instead is to queue writes into a buffer during the eval phase, then perform + // the writes during the commit phase in the priority order. This approach has low overhead, with both space + // and time proportional to the amount of write ports. Because virtually every memory in a practical design + // has at most two write ports, linear search is used on every write, being the fastest and simplest approach. + struct write { + size_t index; + value val; + value mask; + int priority; + }; + std::vector write_queue; + + void update(size_t index, const value &val, const value &mask, int priority = 0) { + assert(index < depth); + // Queue up the write while keeping the queue sorted by priority. + write_queue.insert( + std::upper_bound(write_queue.begin(), write_queue.end(), priority, + [](const int a, const write& b) { return a < b.priority; }), + write { index, val, mask, priority }); + } + + bool commit() { + bool changed = false; + for (const write &entry : write_queue) { + value elem = data[entry.index]; + elem = elem.update(entry.val, entry.mask); + changed |= (data[entry.index] != elem); + data[entry.index] = elem; + } + write_queue.clear(); + return changed; + } +}; + +struct metadata { + const enum { + MISSING = 0, + UINT = 1, + SINT = 2, + STRING = 3, + DOUBLE = 4, + } value_type; + + // In debug mode, using the wrong .as_*() function will assert. + // In release mode, using the wrong .as_*() function will safely return a default value. + const unsigned uint_value = 0; + const signed sint_value = 0; + const std::string string_value = ""; + const double double_value = 0.0; + + metadata() : value_type(MISSING) {} + metadata(unsigned value) : value_type(UINT), uint_value(value) {} + metadata(signed value) : value_type(SINT), sint_value(value) {} + metadata(const std::string &value) : value_type(STRING), string_value(value) {} + metadata(const char *value) : value_type(STRING), string_value(value) {} + metadata(double value) : value_type(DOUBLE), double_value(value) {} + + metadata(const metadata &) = default; + metadata &operator=(const metadata &) = delete; + + unsigned as_uint() const { + assert(value_type == UINT); + return uint_value; + } + + signed as_sint() const { + assert(value_type == SINT); + return sint_value; + } + + const std::string &as_string() const { + assert(value_type == STRING); + return string_value; + } + + double as_double() const { + assert(value_type == DOUBLE); + return double_value; + } +}; + +typedef std::map metadata_map; + +// Tag class to disambiguate values/wires and their aliases. +struct debug_alias {}; + +// Tag declaration to disambiguate values and debug outlines. +using debug_outline = ::_cxxrtl_outline; + +// This structure is intended for consumption via foreign function interfaces, like Python's ctypes. +// Because of this it uses a C-style layout that is easy to parse rather than more idiomatic C++. +// +// To avoid violating strict aliasing rules, this structure has to be a subclass of the one used +// in the C API, or it would not be possible to cast between the pointers to these. +struct debug_item : ::cxxrtl_object { + // Object types. + enum : uint32_t { + VALUE = CXXRTL_VALUE, + WIRE = CXXRTL_WIRE, + MEMORY = CXXRTL_MEMORY, + ALIAS = CXXRTL_ALIAS, + OUTLINE = CXXRTL_OUTLINE, + }; + + // Object flags. + enum : uint32_t { + INPUT = CXXRTL_INPUT, + OUTPUT = CXXRTL_OUTPUT, + INOUT = CXXRTL_INOUT, + DRIVEN_SYNC = CXXRTL_DRIVEN_SYNC, + DRIVEN_COMB = CXXRTL_DRIVEN_COMB, + UNDRIVEN = CXXRTL_UNDRIVEN, + }; + + debug_item(const ::cxxrtl_object &object) : cxxrtl_object(object) {} + + template + debug_item(value &item, size_t lsb_offset = 0, uint32_t flags_ = 0) { + static_assert(sizeof(item) == value::chunks * sizeof(chunk_t), + "value is not compatible with C layout"); + type = VALUE; + flags = flags_; + width = Bits; + lsb_at = lsb_offset; + depth = 1; + zero_at = 0; + curr = item.data; + next = item.data; + outline = nullptr; + } + + template + debug_item(const value &item, size_t lsb_offset = 0) { + static_assert(sizeof(item) == value::chunks * sizeof(chunk_t), + "value is not compatible with C layout"); + type = VALUE; + flags = DRIVEN_COMB; + width = Bits; + lsb_at = lsb_offset; + depth = 1; + zero_at = 0; + curr = const_cast(item.data); + next = nullptr; + outline = nullptr; + } + + template + debug_item(wire &item, size_t lsb_offset = 0, uint32_t flags_ = 0) { + static_assert(sizeof(item.curr) == value::chunks * sizeof(chunk_t) && + sizeof(item.next) == value::chunks * sizeof(chunk_t), + "wire is not compatible with C layout"); + type = WIRE; + flags = flags_; + width = Bits; + lsb_at = lsb_offset; + depth = 1; + zero_at = 0; + curr = item.curr.data; + next = item.next.data; + outline = nullptr; + } + + template + debug_item(memory &item, size_t zero_offset = 0) { + static_assert(sizeof(item.data[0]) == value::chunks * sizeof(chunk_t), + "memory is not compatible with C layout"); + type = MEMORY; + flags = 0; + width = Width; + lsb_at = 0; + depth = item.depth; + zero_at = zero_offset; + curr = item.data ? item.data[0].data : nullptr; + next = nullptr; + outline = nullptr; + } + + template + debug_item(debug_alias, const value &item, size_t lsb_offset = 0) { + static_assert(sizeof(item) == value::chunks * sizeof(chunk_t), + "value is not compatible with C layout"); + type = ALIAS; + flags = DRIVEN_COMB; + width = Bits; + lsb_at = lsb_offset; + depth = 1; + zero_at = 0; + curr = const_cast(item.data); + next = nullptr; + outline = nullptr; + } + + template + debug_item(debug_alias, const wire &item, size_t lsb_offset = 0) { + static_assert(sizeof(item.curr) == value::chunks * sizeof(chunk_t) && + sizeof(item.next) == value::chunks * sizeof(chunk_t), + "wire is not compatible with C layout"); + type = ALIAS; + flags = DRIVEN_COMB; + width = Bits; + lsb_at = lsb_offset; + depth = 1; + zero_at = 0; + curr = const_cast(item.curr.data); + next = nullptr; + outline = nullptr; + } + + template + debug_item(debug_outline &group, const value &item, size_t lsb_offset = 0) { + static_assert(sizeof(item) == value::chunks * sizeof(chunk_t), + "value is not compatible with C layout"); + type = OUTLINE; + flags = DRIVEN_COMB; + width = Bits; + lsb_at = lsb_offset; + depth = 1; + zero_at = 0; + curr = const_cast(item.data); + next = nullptr; + outline = &group; + } + + template + IntegerT get() const { + assert(width == Bits && depth == 1); + value item; + std::copy(curr, curr + value::chunks, item.data); + return item.template get(); + } + + template + void set(IntegerT other) const { + assert(width == Bits && depth == 1); + value item; + item.template set(other); + std::copy(item.data, item.data + value::chunks, next); + } +}; +static_assert(std::is_standard_layout::value, "debug_item is not compatible with C layout"); + +struct debug_items { + std::map> table; + + void add(const std::string &name, debug_item &&item) { + std::vector &parts = table[name]; + parts.emplace_back(item); + std::sort(parts.begin(), parts.end(), + [](const debug_item &a, const debug_item &b) { + return a.lsb_at < b.lsb_at; + }); + } + + size_t count(const std::string &name) const { + if (table.count(name) == 0) + return 0; + return table.at(name).size(); + } + + const std::vector &parts_at(const std::string &name) const { + return table.at(name); + } + + const debug_item &at(const std::string &name) const { + const std::vector &parts = table.at(name); + assert(parts.size() == 1); + return parts.at(0); + } + + const debug_item &operator [](const std::string &name) const { + return at(name); + } +}; + +// Tag class to disambiguate the default constructor used by the toplevel module that calls reset(), +// and the constructor of interior modules that should not call it. +struct interior {}; + +struct module { + module() {} + virtual ~module() {} + + // Modules with black boxes cannot be copied. Although not all designs include black boxes, + // delete the copy constructor and copy assignment operator to make sure that any downstream + // code that manipulates modules doesn't accidentally depend on their availability. + module(const module &) = delete; + module &operator=(const module &) = delete; + + module(module &&) = default; + module &operator=(module &&) = default; + + virtual void reset() = 0; + + virtual bool eval() = 0; + virtual bool commit() = 0; + + size_t step() { + size_t deltas = 0; + bool converged = false; + do { + converged = eval(); + deltas++; + } while (commit() && !converged); + return deltas; + } + + virtual void debug_info(debug_items &items, std::string path = "") { + (void)items, (void)path; + } +}; + +} // namespace cxxrtl + +// Internal structures used to communicate with the implementation of the C interface. + +typedef struct _cxxrtl_toplevel { + std::unique_ptr module; +} *cxxrtl_toplevel; + +typedef struct _cxxrtl_outline { + std::function eval; +} *cxxrtl_outline; + +// Definitions of internal Yosys cells. Other than the functions in this namespace, CXXRTL is fully generic +// and indepenent of Yosys implementation details. +// +// The `write_cxxrtl` pass translates internal cells (cells with names that start with `$`) to calls of these +// functions. All of Yosys arithmetic and logical cells perform sign or zero extension on their operands, +// whereas basic operations on arbitrary width values require operands to be of the same width. These functions +// bridge the gap by performing the necessary casts. They are named similar to `cell_A[B]`, where A and B are `u` +// if the corresponding operand is unsigned, and `s` if it is signed. +namespace cxxrtl_yosys { + +using namespace cxxrtl; + +// std::max isn't constexpr until C++14 for no particular reason (it's an oversight), so we define our own. +template +CXXRTL_ALWAYS_INLINE +constexpr T max(const T &a, const T &b) { + return a > b ? a : b; +} + +// Logic operations +template +CXXRTL_ALWAYS_INLINE +value logic_not(const value &a) { + return value { a ? 0u : 1u }; +} + +template +CXXRTL_ALWAYS_INLINE +value logic_and(const value &a, const value &b) { + return value { (bool(a) && bool(b)) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value logic_or(const value &a, const value &b) { + return value { (bool(a) || bool(b)) ? 1u : 0u }; +} + +// Reduction operations +template +CXXRTL_ALWAYS_INLINE +value reduce_and(const value &a) { + return value { a.bit_not().is_zero() ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value reduce_or(const value &a) { + return value { a ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value reduce_xor(const value &a) { + return value { (a.ctpop() % 2) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value reduce_xnor(const value &a) { + return value { (a.ctpop() % 2) ? 0u : 1u }; +} + +template +CXXRTL_ALWAYS_INLINE +value reduce_bool(const value &a) { + return value { a ? 1u : 0u }; +} + +// Bitwise operations +template +CXXRTL_ALWAYS_INLINE +value not_u(const value &a) { + return a.template zcast().bit_not(); +} + +template +CXXRTL_ALWAYS_INLINE +value not_s(const value &a) { + return a.template scast().bit_not(); +} + +template +CXXRTL_ALWAYS_INLINE +value and_uu(const value &a, const value &b) { + return a.template zcast().bit_and(b.template zcast()); +} + +template +CXXRTL_ALWAYS_INLINE +value and_ss(const value &a, const value &b) { + return a.template scast().bit_and(b.template scast()); +} + +template +CXXRTL_ALWAYS_INLINE +value or_uu(const value &a, const value &b) { + return a.template zcast().bit_or(b.template zcast()); +} + +template +CXXRTL_ALWAYS_INLINE +value or_ss(const value &a, const value &b) { + return a.template scast().bit_or(b.template scast()); +} + +template +CXXRTL_ALWAYS_INLINE +value xor_uu(const value &a, const value &b) { + return a.template zcast().bit_xor(b.template zcast()); +} + +template +CXXRTL_ALWAYS_INLINE +value xor_ss(const value &a, const value &b) { + return a.template scast().bit_xor(b.template scast()); +} + +template +CXXRTL_ALWAYS_INLINE +value xnor_uu(const value &a, const value &b) { + return a.template zcast().bit_xor(b.template zcast()).bit_not(); +} + +template +CXXRTL_ALWAYS_INLINE +value xnor_ss(const value &a, const value &b) { + return a.template scast().bit_xor(b.template scast()).bit_not(); +} + +template +CXXRTL_ALWAYS_INLINE +value shl_uu(const value &a, const value &b) { + return a.template zcast().shl(b); +} + +template +CXXRTL_ALWAYS_INLINE +value shl_su(const value &a, const value &b) { + return a.template scast().shl(b); +} + +template +CXXRTL_ALWAYS_INLINE +value sshl_uu(const value &a, const value &b) { + return a.template zcast().shl(b); +} + +template +CXXRTL_ALWAYS_INLINE +value sshl_su(const value &a, const value &b) { + return a.template scast().shl(b); +} + +template +CXXRTL_ALWAYS_INLINE +value shr_uu(const value &a, const value &b) { + return a.shr(b).template zcast(); +} + +template +CXXRTL_ALWAYS_INLINE +value shr_su(const value &a, const value &b) { + return a.shr(b).template scast(); +} + +template +CXXRTL_ALWAYS_INLINE +value sshr_uu(const value &a, const value &b) { + return a.shr(b).template zcast(); +} + +template +CXXRTL_ALWAYS_INLINE +value sshr_su(const value &a, const value &b) { + return a.sshr(b).template scast(); +} + +template +CXXRTL_ALWAYS_INLINE +value shift_uu(const value &a, const value &b) { + return shr_uu(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shift_su(const value &a, const value &b) { + return shr_su(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shift_us(const value &a, const value &b) { + return b.is_neg() ? shl_uu(a, b.template sext().neg()) : shr_uu(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shift_ss(const value &a, const value &b) { + return b.is_neg() ? shl_su(a, b.template sext().neg()) : shr_su(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shiftx_uu(const value &a, const value &b) { + return shift_uu(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shiftx_su(const value &a, const value &b) { + return shift_su(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shiftx_us(const value &a, const value &b) { + return shift_us(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value shiftx_ss(const value &a, const value &b) { + return shift_ss(a, b); +} + +// Comparison operations +template +CXXRTL_ALWAYS_INLINE +value eq_uu(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value{ a.template zext() == b.template zext() ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value eq_ss(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value{ a.template sext() == b.template sext() ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value ne_uu(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value{ a.template zext() != b.template zext() ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value ne_ss(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value{ a.template sext() != b.template sext() ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value eqx_uu(const value &a, const value &b) { + return eq_uu(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value eqx_ss(const value &a, const value &b) { + return eq_ss(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value nex_uu(const value &a, const value &b) { + return ne_uu(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value nex_ss(const value &a, const value &b) { + return ne_ss(a, b); +} + +template +CXXRTL_ALWAYS_INLINE +value gt_uu(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { b.template zext().ucmp(a.template zext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value gt_ss(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { b.template sext().scmp(a.template sext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value ge_uu(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { !a.template zext().ucmp(b.template zext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value ge_ss(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { !a.template sext().scmp(b.template sext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value lt_uu(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { a.template zext().ucmp(b.template zext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value lt_ss(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { a.template sext().scmp(b.template sext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value le_uu(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { !b.template zext().ucmp(a.template zext()) ? 1u : 0u }; +} + +template +CXXRTL_ALWAYS_INLINE +value le_ss(const value &a, const value &b) { + constexpr size_t BitsExt = max(BitsA, BitsB); + return value { !b.template sext().scmp(a.template sext()) ? 1u : 0u }; +} + +// Arithmetic operations +template +CXXRTL_ALWAYS_INLINE +value pos_u(const value &a) { + return a.template zcast(); +} + +template +CXXRTL_ALWAYS_INLINE +value pos_s(const value &a) { + return a.template scast(); +} + +template +CXXRTL_ALWAYS_INLINE +value neg_u(const value &a) { + return a.template zcast().neg(); +} + +template +CXXRTL_ALWAYS_INLINE +value neg_s(const value &a) { + return a.template scast().neg(); +} + +template +CXXRTL_ALWAYS_INLINE +value add_uu(const value &a, const value &b) { + return a.template zcast().add(b.template zcast()); +} + +template +CXXRTL_ALWAYS_INLINE +value add_ss(const value &a, const value &b) { + return a.template scast().add(b.template scast()); +} + +template +CXXRTL_ALWAYS_INLINE +value sub_uu(const value &a, const value &b) { + return a.template zcast().sub(b.template zcast()); +} + +template +CXXRTL_ALWAYS_INLINE +value sub_ss(const value &a, const value &b) { + return a.template scast().sub(b.template scast()); +} + +template +CXXRTL_ALWAYS_INLINE +value mul_uu(const value &a, const value &b) { + constexpr size_t BitsM = BitsA >= BitsB ? BitsA : BitsB; + return a.template zcast().template mul(b.template zcast()); +} + +template +CXXRTL_ALWAYS_INLINE +value mul_ss(const value &a, const value &b) { + return a.template scast().template mul(b.template scast()); +} + +template +CXXRTL_ALWAYS_INLINE +std::pair, value> divmod_uu(const value &a, const value &b) { + constexpr size_t Bits = max(BitsY, max(BitsA, BitsB)); + value quotient; + value dividend = a.template zext(); + value divisor = b.template zext(); + if (dividend.ucmp(divisor)) + return {/*quotient=*/value { 0u }, /*remainder=*/dividend.template trunc()}; + uint32_t divisor_shift = dividend.ctlz() - divisor.ctlz(); + divisor = divisor.shl(value<32> { divisor_shift }); + for (size_t step = 0; step <= divisor_shift; step++) { + quotient = quotient.shl(value<1> { 1u }); + if (!dividend.ucmp(divisor)) { + dividend = dividend.sub(divisor); + quotient.set_bit(0, true); + } + divisor = divisor.shr(value<1> { 1u }); + } + return {quotient.template trunc(), /*remainder=*/dividend.template trunc()}; +} + +template +CXXRTL_ALWAYS_INLINE +std::pair, value> divmod_ss(const value &a, const value &b) { + value ua = a.template sext(); + value ub = b.template sext(); + if (ua.is_neg()) ua = ua.neg(); + if (ub.is_neg()) ub = ub.neg(); + value y, r; + std::tie(y, r) = divmod_uu(ua, ub); + if (a.is_neg() != b.is_neg()) y = y.neg(); + if (a.is_neg()) r = r.neg(); + return {y, r}; +} + +template +CXXRTL_ALWAYS_INLINE +value div_uu(const value &a, const value &b) { + return divmod_uu(a, b).first; +} + +template +CXXRTL_ALWAYS_INLINE +value div_ss(const value &a, const value &b) { + return divmod_ss(a, b).first; +} + +template +CXXRTL_ALWAYS_INLINE +value mod_uu(const value &a, const value &b) { + return divmod_uu(a, b).second; +} + +template +CXXRTL_ALWAYS_INLINE +value mod_ss(const value &a, const value &b) { + return divmod_ss(a, b).second; +} + +template +CXXRTL_ALWAYS_INLINE +value modfloor_uu(const value &a, const value &b) { + return divmod_uu(a, b).second; +} + +// GHDL Modfloor operator. Returns r=a mod b, such that r has the same sign as b and +// a=b*N+r where N is some integer +// In practical terms, when a and b have different signs and the remainder returned by divmod_ss is not 0 +// then return the remainder + b +template +CXXRTL_ALWAYS_INLINE +value modfloor_ss(const value &a, const value &b) { + value r; + r = divmod_ss(a, b).second; + if((b.is_neg() != a.is_neg()) && !r.is_zero()) + return add_ss(b, r); + return r; +} + + +// Memory helper +struct memory_index { + bool valid; + size_t index; + + template + memory_index(const value &addr, size_t offset, size_t depth) { + static_assert(value::chunks <= 1, "memory address is too wide"); + size_t offset_index = addr.data[0]; + + valid = (offset_index >= offset && offset_index < offset + depth); + index = offset_index - offset; + } +}; + +} // namespace cxxrtl_yosys + +#endif diff --git a/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_capi.cc b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_capi.cc new file mode 100644 index 0000000..227173b --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_capi.cc @@ -0,0 +1,92 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 whitequark + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// This file is a part of the CXXRTL C API. It should be used together with `cxxrtl_capi.h`. + +#include +#include + +struct _cxxrtl_handle { + std::unique_ptr module; + cxxrtl::debug_items objects; +}; + +// Private function for use by other units of the C API. +const cxxrtl::debug_items &cxxrtl_debug_items_from_handle(cxxrtl_handle handle) { + return handle->objects; +} + +cxxrtl_handle cxxrtl_create(cxxrtl_toplevel design) { + return cxxrtl_create_at(design, ""); +} + +cxxrtl_handle cxxrtl_create_at(cxxrtl_toplevel design, const char *root) { + std::string path = root; + if (!path.empty()) { + // module::debug_info() accepts either an empty path, or a path ending in space to simplify + // the logic in generated code. While this is sketchy at best to expose in the C++ API, this + // would be a lot worse in the C API, so don't expose it here. + assert(path.back() != ' '); + path += ' '; + } + + cxxrtl_handle handle = new _cxxrtl_handle; + handle->module = std::move(design->module); + handle->module->debug_info(handle->objects, path); + delete design; + return handle; +} + +void cxxrtl_destroy(cxxrtl_handle handle) { + delete handle; +} + +void cxxrtl_reset(cxxrtl_handle handle) { + handle->module->reset(); +} + +int cxxrtl_eval(cxxrtl_handle handle) { + return handle->module->eval(); +} + +int cxxrtl_commit(cxxrtl_handle handle) { + return handle->module->commit(); +} + +size_t cxxrtl_step(cxxrtl_handle handle) { + return handle->module->step(); +} + +struct cxxrtl_object *cxxrtl_get_parts(cxxrtl_handle handle, const char *name, size_t *parts) { + auto it = handle->objects.table.find(name); + if (it == handle->objects.table.end()) + return nullptr; + *parts = it->second.size(); + return static_cast(&it->second[0]); +} + +void cxxrtl_enum(cxxrtl_handle handle, void *data, + void (*callback)(void *data, const char *name, + cxxrtl_object *object, size_t parts)) { + for (auto &it : handle->objects.table) + callback(data, it.first.c_str(), static_cast(&it.second[0]), it.second.size()); +} + +void cxxrtl_outline_eval(cxxrtl_outline outline) { + outline->eval(); +} diff --git a/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_capi.h b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_capi.h new file mode 100644 index 0000000..2df2b72 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_capi.h @@ -0,0 +1,311 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 whitequark + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef CXXRTL_CAPI_H +#define CXXRTL_CAPI_H + +// This file is a part of the CXXRTL C API. It should be used together with `cxxrtl_capi.cc`. +// +// The CXXRTL C API makes it possible to drive CXXRTL designs using C or any other language that +// supports the C ABI, for example, Python. It does not provide a way to implement black boxes. + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// Opaque reference to a design toplevel. +// +// A design toplevel can only be used to create a design handle. +typedef struct _cxxrtl_toplevel *cxxrtl_toplevel; + +// The constructor for a design toplevel is provided as a part of generated code for that design. +// Its prototype matches: +// +// cxxrtl_toplevel _create(); + +// Opaque reference to a design handle. +// +// A design handle is required by all operations in the C API. +typedef struct _cxxrtl_handle *cxxrtl_handle; + +// Create a design handle from a design toplevel. +// +// The `design` is consumed by this operation and cannot be used afterwards. +cxxrtl_handle cxxrtl_create(cxxrtl_toplevel design); + +// Create a design handle at a given hierarchy position from a design toplevel. +// +// This operation is similar to `cxxrtl_create`, except the full hierarchical name of every object +// is prepended with `root`. +cxxrtl_handle cxxrtl_create_at(cxxrtl_toplevel design, const char *root); + +// Release all resources used by a design and its handle. +void cxxrtl_destroy(cxxrtl_handle handle); + +// Reinitialize the design, replacing the internal state with the reset values while preserving +// black boxes. +// +// This operation is essentially equivalent to a power-on reset. Values, wires, and memories are +// returned to their reset state while preserving the state of black boxes and keeping all of +// the interior pointers obtained with e.g. `cxxrtl_get` valid. +void cxxrtl_reset(cxxrtl_handle handle); + +// Evaluate the design, propagating changes on inputs to the `next` value of internal state and +// output wires. +// +// Returns 1 if the design is known to immediately converge, 0 otherwise. +int cxxrtl_eval(cxxrtl_handle handle); + +// Commit the design, replacing the `curr` value of internal state and output wires with the `next` +// value. +// +// Return 1 if any of the `curr` values were updated, 0 otherwise. +int cxxrtl_commit(cxxrtl_handle handle); + +// Simulate the design to a fixed point. +// +// Returns the number of delta cycles. +size_t cxxrtl_step(cxxrtl_handle handle); + +// Type of a simulated object. +// +// The type of a simulated object indicates the way it is stored and the operations that are legal +// to perform on it (i.e. won't crash the simulation). It says very little about object semantics, +// which is specified through flags. +enum cxxrtl_type { + // Values correspond to singly buffered netlist nodes, i.e. nodes driven exclusively by + // combinatorial cells, or toplevel input nodes. + // + // Values can be inspected via the `curr` pointer. If the `next` pointer is NULL, the value is + // driven by a constant and can never be modified. Otherwise, the value can be modified through + // the `next` pointer (which is equal to `curr` if not NULL). Note that changes to the bits + // driven by combinatorial cells will be ignored. + // + // Values always have depth 1. + CXXRTL_VALUE = 0, + + // Wires correspond to doubly buffered netlist nodes, i.e. nodes driven, at least in part, by + // storage cells, or by combinatorial cells that are a part of a feedback path. They are also + // present in non-optimized builds. + // + // Wires can be inspected via the `curr` pointer and modified via the `next` pointer (which are + // distinct for wires). Note that changes to the bits driven by combinatorial cells will be + // ignored. + // + // Wires always have depth 1. + CXXRTL_WIRE = 1, + + // Memories correspond to memory cells. + // + // Memories can be inspected and modified via the `curr` pointer. Due to a limitation of this + // API, memories cannot yet be modified in a guaranteed race-free way, and the `next` pointer is + // always NULL. + CXXRTL_MEMORY = 2, + + // Aliases correspond to netlist nodes driven by another node such that their value is always + // exactly equal. + // + // Aliases can be inspected via the `curr` pointer. They cannot be modified, and the `next` + // pointer is always NULL. + CXXRTL_ALIAS = 3, + + // Outlines correspond to netlist nodes that were optimized in a way that makes them inaccessible + // outside of a module's `eval()` function. At the highest debug information level, every inlined + // node has a corresponding outline object. + // + // Outlines can be inspected via the `curr` pointer and can never be modified; the `next` pointer + // is always NULL. Unlike all other objects, the bits of an outline object are meaningful only + // after a call to `cxxrtl_outline_eval` and until any subsequent modification to the netlist. + // Observing this requirement is the responsibility of the caller; it is not enforced. + // + // Outlines always correspond to combinatorial netlist nodes that are not ports. + CXXRTL_OUTLINE = 4, + + // More object types may be added in the future, but the existing ones will never change. +}; + +// Flags of a simulated object. +// +// The flags of a simulated object indicate its role in the netlist: +// * The flags `CXXRTL_INPUT` and `CXXRTL_OUTPUT` designate module ports. +// * The flags `CXXRTL_DRIVEN_SYNC`, `CXXRTL_DRIVEN_COMB`, and `CXXRTL_UNDRIVEN` specify +// the semantics of node state. An object with several of these flags set has different bits +// follow different semantics. +enum cxxrtl_flag { + // Node is a module input port. + // + // This flag can be set on objects of type `CXXRTL_VALUE` and `CXXRTL_WIRE`. It may be combined + // with `CXXRTL_OUTPUT`, as well as other flags. + CXXRTL_INPUT = 1 << 0, + + // Node is a module output port. + // + // This flag can be set on objects of type `CXXRTL_WIRE`. It may be combined with `CXXRTL_INPUT`, + // as well as other flags. + CXXRTL_OUTPUT = 1 << 1, + + // Node is a module inout port. + // + // This flag can be set on objects of type `CXXRTL_WIRE`. It may be combined with other flags. + CXXRTL_INOUT = (CXXRTL_INPUT|CXXRTL_OUTPUT), + + // Node has bits that are driven by a storage cell. + // + // This flag can be set on objects of type `CXXRTL_WIRE`. It may be combined with + // `CXXRTL_DRIVEN_COMB` and `CXXRTL_UNDRIVEN`, as well as other flags. + // + // This flag is set on wires that have bits connected directly to the output of a flip-flop or + // a latch, and hold its state. Many `CXXRTL_WIRE` objects may not have the `CXXRTL_DRIVEN_SYNC` + // flag set; for example, output ports and feedback wires generally won't. Writing to the `next` + // pointer of these wires updates stored state, and for designs without combinatorial loops, + // capturing the value from every of these wires through the `curr` pointer creates a complete + // snapshot of the design state. + CXXRTL_DRIVEN_SYNC = 1 << 2, + + // Node has bits that are driven by a combinatorial cell or another node. + // + // This flag can be set on objects of type `CXXRTL_VALUE`, `CXXRTL_WIRE`, and `CXXRTL_OUTLINE`. + // It may be combined with `CXXRTL_DRIVEN_SYNC` and `CXXRTL_UNDRIVEN`, as well as other flags. + // + // This flag is set on objects that have bits connected to the output of a combinatorial cell, + // or directly to another node. For designs without combinatorial loops, writing to such bits + // through the `next` pointer (if it is not NULL) has no effect. + CXXRTL_DRIVEN_COMB = 1 << 3, + + // Node has bits that are not driven. + // + // This flag can be set on objects of type `CXXRTL_VALUE` and `CXXRTL_WIRE`. It may be combined + // with `CXXRTL_DRIVEN_SYNC` and `CXXRTL_DRIVEN_COMB`, as well as other flags. + // + // This flag is set on objects that have bits not driven by an output of any cell or by another + // node, such as inputs and dangling wires. + CXXRTL_UNDRIVEN = 1 << 4, + + // More object flags may be added in the future, but the existing ones will never change. +}; + +// Description of a simulated object. +// +// The `curr` and `next` arrays can be accessed directly to inspect and, if applicable, modify +// the bits stored in the object. +struct cxxrtl_object { + // Type of the object. + // + // All objects have the same memory layout determined by `width` and `depth`, but the type + // determines all other properties of the object. + uint32_t type; // actually `enum cxxrtl_type` + + // Flags of the object. + uint32_t flags; // actually bit mask of `enum cxxrtl_flags` + + // Width of the object in bits. + size_t width; + + // Index of the least significant bit. + size_t lsb_at; + + // Depth of the object. Only meaningful for memories; for other objects, always 1. + size_t depth; + + // Index of the first word. Only meaningful for memories; for other objects, always 0; + size_t zero_at; + + // Bits stored in the object, as 32-bit chunks, least significant bits first. + // + // The width is rounded up to a multiple of 32; the padding bits are always set to 0 by + // the simulation code, and must be always written as 0 when modified by user code. + // In memories, every element is stored contiguously. Therefore, the total number of chunks + // in any object is `((width + 31) / 32) * depth`. + // + // To allow the simulation to be partitioned into multiple independent units communicating + // through wires, the bits are double buffered. To avoid race conditions, user code should + // always read from `curr` and write to `next`. The `curr` pointer is always valid; for objects + // that cannot be modified, or cannot be modified in a race-free way, `next` is NULL. + uint32_t *curr; + uint32_t *next; + + // Opaque reference to an outline. Only meaningful for outline objects. + // + // See the documentation of `cxxrtl_outline` for details. When creating a `cxxrtl_object`, set + // this field to NULL. + struct _cxxrtl_outline *outline; + + // More description fields may be added in the future, but the existing ones will never change. +}; + +// Retrieve description of a simulated object. +// +// The `name` is the full hierarchical name of the object in the Yosys notation, where public names +// have a `\` prefix and hierarchy levels are separated by single spaces. For example, if +// the top-level module instantiates a module `foo`, which in turn contains a wire `bar`, the full +// hierarchical name is `\foo \bar`. +// +// The storage of a single abstract object may be split (usually with the `splitnets` pass) into +// many physical parts, all of which correspond to the same hierarchical name. To handle such cases, +// this function returns an array and writes its length to `parts`. The array is sorted by `lsb_at`. +// +// Returns the object parts if it was found, NULL otherwise. The returned parts are valid until +// the design is destroyed. +struct cxxrtl_object *cxxrtl_get_parts(cxxrtl_handle handle, const char *name, size_t *parts); + +// Retrieve description of a single part simulated object. +// +// This function is a shortcut for the most common use of `cxxrtl_get_parts`. It asserts that, +// if the object exists, it consists of a single part. If assertions are disabled, it returns NULL +// for multi-part objects. +static inline struct cxxrtl_object *cxxrtl_get(cxxrtl_handle handle, const char *name) { + size_t parts = 0; + struct cxxrtl_object *object = cxxrtl_get_parts(handle, name, &parts); + assert(object == NULL || parts == 1); + if (object == NULL || parts == 1) + return object; + return NULL; +} + +// Enumerate simulated objects. +// +// For every object in the simulation, `callback` is called with the provided `data`, the full +// hierarchical name of the object (see `cxxrtl_get` for details), and the object parts. +// The provided `name` and `object` values are valid until the design is destroyed. +void cxxrtl_enum(cxxrtl_handle handle, void *data, + void (*callback)(void *data, const char *name, + struct cxxrtl_object *object, size_t parts)); + +// Opaque reference to an outline. +// +// An outline is a group of outline objects that are evaluated simultaneously. The identity of +// an outline can be compared to determine whether any two objects belong to the same outline. +typedef struct _cxxrtl_outline *cxxrtl_outline; + +// Evaluate an outline. +// +// After evaluating an outline, the bits of every outline object contained in it are consistent +// with the current state of the netlist. In general, any further modification to the netlist +// causes every outline object to become stale, after which the corresponding outline must be +// re-evaluated, otherwise the bits read from that object are meaningless. +void cxxrtl_outline_eval(cxxrtl_outline outline); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd.h b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd.h new file mode 100644 index 0000000..b76922b --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd.h @@ -0,0 +1,275 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 whitequark + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef CXXRTL_VCD_H +#define CXXRTL_VCD_H + +#include + +namespace cxxrtl { + +class vcd_writer { + struct variable { + size_t ident; + size_t width; + chunk_t *curr; + size_t cache_offset; + debug_outline *outline; + bool *outline_warm; + }; + + std::vector current_scope; + std::map outlines; + std::vector variables; + std::vector cache; + std::map aliases; + bool streaming = false; + + void emit_timescale(unsigned number, const std::string &unit) { + assert(!streaming); + assert(number == 1 || number == 10 || number == 100); + assert(unit == "s" || unit == "ms" || unit == "us" || + unit == "ns" || unit == "ps" || unit == "fs"); + buffer += "$timescale " + std::to_string(number) + " " + unit + " $end\n"; + } + + void emit_scope(const std::vector &scope) { + assert(!streaming); + while (current_scope.size() > scope.size() || + (current_scope.size() > 0 && + current_scope[current_scope.size() - 1] != scope[current_scope.size() - 1])) { + buffer += "$upscope $end\n"; + current_scope.pop_back(); + } + while (current_scope.size() < scope.size()) { + buffer += "$scope module " + scope[current_scope.size()] + " $end\n"; + current_scope.push_back(scope[current_scope.size()]); + } + } + + void emit_ident(size_t ident) { + do { + buffer += '!' + ident % 94; // "base94" + ident /= 94; + } while (ident != 0); + } + + void emit_name(const std::string &name) { + for (char c : name) { + if (c == ':') { + // Due to a bug, GTKWave cannot parse a colon in the variable name, causing the VCD file + // to be unreadable. It cannot be escaped either, so replace it with the sideways colon. + buffer += ".."; + } else { + buffer += c; + } + } + } + + void emit_var(const variable &var, const std::string &type, const std::string &name, + size_t lsb_at, bool multipart) { + assert(!streaming); + buffer += "$var " + type + " " + std::to_string(var.width) + " "; + emit_ident(var.ident); + buffer += " "; + emit_name(name); + if (multipart || name.back() == ']' || lsb_at != 0) { + if (var.width == 1) + buffer += " [" + std::to_string(lsb_at) + "]"; + else + buffer += " [" + std::to_string(lsb_at + var.width - 1) + ":" + std::to_string(lsb_at) + "]"; + } + buffer += " $end\n"; + } + + void emit_enddefinitions() { + assert(!streaming); + buffer += "$enddefinitions $end\n"; + streaming = true; + } + + void emit_time(uint64_t timestamp) { + assert(streaming); + buffer += "#" + std::to_string(timestamp) + "\n"; + } + + void emit_scalar(const variable &var) { + assert(streaming); + assert(var.width == 1); + buffer += (*var.curr ? '1' : '0'); + emit_ident(var.ident); + buffer += '\n'; + } + + void emit_vector(const variable &var) { + assert(streaming); + buffer += 'b'; + for (size_t bit = var.width - 1; bit != (size_t)-1; bit--) { + bool bit_curr = var.curr[bit / (8 * sizeof(chunk_t))] & (1 << (bit % (8 * sizeof(chunk_t)))); + buffer += (bit_curr ? '1' : '0'); + } + buffer += ' '; + emit_ident(var.ident); + buffer += '\n'; + } + + void reset_outlines() { + for (auto &outline_it : outlines) + outline_it.second = /*warm=*/(outline_it.first == nullptr); + } + + variable ®ister_variable(size_t width, chunk_t *curr, bool constant = false, debug_outline *outline = nullptr) { + if (aliases.count(curr)) { + return variables[aliases[curr]]; + } else { + auto outline_it = outlines.emplace(outline, /*warm=*/(outline == nullptr)).first; + const size_t chunks = (width + (sizeof(chunk_t) * 8 - 1)) / (sizeof(chunk_t) * 8); + aliases[curr] = variables.size(); + if (constant) { + variables.emplace_back(variable { variables.size(), width, curr, (size_t)-1, outline_it->first, &outline_it->second }); + } else { + variables.emplace_back(variable { variables.size(), width, curr, cache.size(), outline_it->first, &outline_it->second }); + cache.insert(cache.end(), &curr[0], &curr[chunks]); + } + return variables.back(); + } + } + + bool test_variable(const variable &var) { + if (var.cache_offset == (size_t)-1) + return false; // constant + if (!*var.outline_warm) { + var.outline->eval(); + *var.outline_warm = true; + } + const size_t chunks = (var.width + (sizeof(chunk_t) * 8 - 1)) / (sizeof(chunk_t) * 8); + if (std::equal(&var.curr[0], &var.curr[chunks], &cache[var.cache_offset])) { + return false; + } else { + std::copy(&var.curr[0], &var.curr[chunks], &cache[var.cache_offset]); + return true; + } + } + + static std::vector split_hierarchy(const std::string &hier_name) { + std::vector hierarchy; + size_t prev = 0; + while (true) { + size_t curr = hier_name.find_first_of(' ', prev); + if (curr == std::string::npos) { + hierarchy.push_back(hier_name.substr(prev)); + break; + } else { + hierarchy.push_back(hier_name.substr(prev, curr - prev)); + prev = curr + 1; + } + } + return hierarchy; + } + +public: + std::string buffer; + + void timescale(unsigned number, const std::string &unit) { + emit_timescale(number, unit); + } + + void add(const std::string &hier_name, const debug_item &item, bool multipart = false) { + std::vector scope = split_hierarchy(hier_name); + std::string name = scope.back(); + scope.pop_back(); + + emit_scope(scope); + switch (item.type) { + // Not the best naming but oh well... + case debug_item::VALUE: + emit_var(register_variable(item.width, item.curr, /*constant=*/item.next == nullptr), + "wire", name, item.lsb_at, multipart); + break; + case debug_item::WIRE: + emit_var(register_variable(item.width, item.curr), + "reg", name, item.lsb_at, multipart); + break; + case debug_item::MEMORY: { + const size_t stride = (item.width + (sizeof(chunk_t) * 8 - 1)) / (sizeof(chunk_t) * 8); + for (size_t index = 0; index < item.depth; index++) { + chunk_t *nth_curr = &item.curr[stride * index]; + std::string nth_name = name + '[' + std::to_string(index) + ']'; + emit_var(register_variable(item.width, nth_curr), + "reg", nth_name, item.lsb_at, multipart); + } + break; + } + case debug_item::ALIAS: + // Like VALUE, but, even though `item.next == nullptr` always holds, the underlying value + // can actually change, and must be tracked. In most cases the VCD identifier will be + // unified with the aliased reg, but we should handle the case where only the alias is + // added to the VCD writer, too. + emit_var(register_variable(item.width, item.curr), + "wire", name, item.lsb_at, multipart); + break; + case debug_item::OUTLINE: + emit_var(register_variable(item.width, item.curr, /*constant=*/false, item.outline), + "wire", name, item.lsb_at, multipart); + break; + } + } + + template + void add(const debug_items &items, const Filter &filter) { + // `debug_items` is a map, so the items are already sorted in an order optimal for emitting + // VCD scope sections. + for (auto &it : items.table) + for (auto &part : it.second) + if (filter(it.first, part)) + add(it.first, part, it.second.size() > 1); + } + + void add(const debug_items &items) { + this->add(items, [](const std::string &, const debug_item &) { + return true; + }); + } + + void add_without_memories(const debug_items &items) { + this->add(items, [](const std::string &, const debug_item &item) { + return item.type != debug_item::MEMORY; + }); + } + + void sample(uint64_t timestamp) { + bool first_sample = !streaming; + if (first_sample) { + emit_scope({}); + emit_enddefinitions(); + } + reset_outlines(); + emit_time(timestamp); + for (auto var : variables) + if (test_variable(var) || first_sample) { + if (var.width == 1) + emit_scalar(var); + else + emit_vector(var); + } + } +}; + +} + +#endif diff --git a/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd_capi.cc b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd_capi.cc new file mode 100644 index 0000000..52a9198 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd_capi.cc @@ -0,0 +1,83 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 whitequark + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// This file is a part of the CXXRTL C API. It should be used together with `cxxrtl_vcd_capi.h`. + +#include +#include + +extern const cxxrtl::debug_items &cxxrtl_debug_items_from_handle(cxxrtl_handle handle); + +struct _cxxrtl_vcd { + cxxrtl::vcd_writer writer; + bool flush = false; +}; + +cxxrtl_vcd cxxrtl_vcd_create() { + return new _cxxrtl_vcd; +} + +void cxxrtl_vcd_destroy(cxxrtl_vcd vcd) { + delete vcd; +} + +void cxxrtl_vcd_timescale(cxxrtl_vcd vcd, int number, const char *unit) { + vcd->writer.timescale(number, unit); +} + +void cxxrtl_vcd_add(cxxrtl_vcd vcd, const char *name, cxxrtl_object *object) { + // Note the copy. We don't know whether `object` came from a design (in which case it is + // an instance of `debug_item`), or from user code (in which case it is an instance of + // `cxxrtl_object`), so casting the pointer wouldn't be safe. + vcd->writer.add(name, cxxrtl::debug_item(*object)); +} + +void cxxrtl_vcd_add_from(cxxrtl_vcd vcd, cxxrtl_handle handle) { + vcd->writer.add(cxxrtl_debug_items_from_handle(handle)); +} + +void cxxrtl_vcd_add_from_if(cxxrtl_vcd vcd, cxxrtl_handle handle, void *data, + int (*filter)(void *data, const char *name, + const cxxrtl_object *object)) { + vcd->writer.add(cxxrtl_debug_items_from_handle(handle), + [=](const std::string &name, const cxxrtl::debug_item &item) { + return filter(data, name.c_str(), static_cast(&item)); + }); +} + +void cxxrtl_vcd_add_from_without_memories(cxxrtl_vcd vcd, cxxrtl_handle handle) { + vcd->writer.add_without_memories(cxxrtl_debug_items_from_handle(handle)); +} + +void cxxrtl_vcd_sample(cxxrtl_vcd vcd, uint64_t time) { + if (vcd->flush) { + vcd->writer.buffer.clear(); + vcd->flush = false; + } + vcd->writer.sample(time); +} + +void cxxrtl_vcd_read(cxxrtl_vcd vcd, const char **data, size_t *size) { + if (vcd->flush) { + vcd->writer.buffer.clear(); + vcd->flush = false; + } + *data = vcd->writer.buffer.c_str(); + *size = vcd->writer.buffer.size(); + vcd->flush = true; +} diff --git a/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd_capi.h b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd_capi.h new file mode 100644 index 0000000..d55afe2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/cxxrtl/cxxrtl_vcd_capi.h @@ -0,0 +1,107 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 whitequark + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef CXXRTL_VCD_CAPI_H +#define CXXRTL_VCD_CAPI_H + +// This file is a part of the CXXRTL C API. It should be used together with `cxxrtl_vcd_capi.cc`. +// +// The CXXRTL C API for VCD writing makes it possible to insert virtual probes into designs and +// dump waveforms to Value Change Dump files. + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// Opaque reference to a VCD writer. +typedef struct _cxxrtl_vcd *cxxrtl_vcd; + +// Create a VCD writer. +cxxrtl_vcd cxxrtl_vcd_create(); + +// Release all resources used by a VCD writer. +void cxxrtl_vcd_destroy(cxxrtl_vcd vcd); + +// Set VCD timescale. +// +// The `number` must be 1, 10, or 100, and the `unit` must be one of `"s"`, `"ms"`, `"us"`, `"ns"`, +// `"ps"`, or `"fs"`. +// +// Timescale can only be set before the first call to `cxxrtl_vcd_sample`. +void cxxrtl_vcd_timescale(cxxrtl_vcd vcd, int number, const char *unit); + +// Schedule a specific CXXRTL object to be sampled. +// +// The `name` is a full hierarchical name as described for `cxxrtl_get`; it does not need to match +// the original name of `object`, if any. The `object` must outlive the VCD writer, but there are +// no other requirements; if desired, it can be provided by user code, rather than come from +// a design. +// +// Objects can only be scheduled before the first call to `cxxrtl_vcd_sample`. +void cxxrtl_vcd_add(cxxrtl_vcd vcd, const char *name, struct cxxrtl_object *object); + +// Schedule all CXXRTL objects in a simulation. +// +// The design `handle` must outlive the VCD writer. +// +// Objects can only be scheduled before the first call to `cxxrtl_vcd_sample`. +void cxxrtl_vcd_add_from(cxxrtl_vcd vcd, cxxrtl_handle handle); + +// Schedule CXXRTL objects in a simulation that match a given predicate. +// +// For every object in the simulation, `filter` is called with the provided `data`, the full +// hierarchical name of the object (see `cxxrtl_get` for details), and the object description. +// The object will be sampled if the predicate returns a non-zero value. +// +// Objects can only be scheduled before the first call to `cxxrtl_vcd_sample`. +void cxxrtl_vcd_add_from_if(cxxrtl_vcd vcd, cxxrtl_handle handle, void *data, + int (*filter)(void *data, const char *name, + const struct cxxrtl_object *object)); + +// Schedule all CXXRTL objects in a simulation except for memories. +// +// The design `handle` must outlive the VCD writer. +// +// Objects can only be scheduled before the first call to `cxxrtl_vcd_sample`. +void cxxrtl_vcd_add_from_without_memories(cxxrtl_vcd vcd, cxxrtl_handle handle); + +// Sample all scheduled objects. +// +// First, `time` is written to the internal buffer. Second, the values of every signal changed since +// the previous call to `cxxrtl_vcd_sample` (all values if this is the first call) are written to +// the internal buffer. The contents of the buffer can be retrieved with `cxxrtl_vcd_read`. +void cxxrtl_vcd_sample(cxxrtl_vcd vcd, uint64_t time); + +// Retrieve buffered VCD data. +// +// The pointer to the start of the next chunk of VCD data is assigned to `*data`, and the length +// of that chunk is assigned to `*size`. The pointer to the data is valid until the next call to +// `cxxrtl_vcd_sample` or `cxxrtl_vcd_read`. Once all of the buffered data has been retrieved, +// this function will always return zero sized chunks. +void cxxrtl_vcd_read(cxxrtl_vcd vcd, const char **data, size_t *size); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/resources/netlist/resources/kernel/share/include/backends/rtlil/rtlil_backend.h b/resources/netlist/resources/kernel/share/include/backends/rtlil/rtlil_backend.h new file mode 100644 index 0000000..3582972 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/backends/rtlil/rtlil_backend.h @@ -0,0 +1,51 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * A very simple and straightforward backend for the RTLIL text + * representation. + * + */ + +#ifndef RTLIL_BACKEND_H +#define RTLIL_BACKEND_H + +#include "kernel/yosys.h" +#include + +YOSYS_NAMESPACE_BEGIN + +namespace RTLIL_BACKEND { + void dump_const(std::ostream &f, const RTLIL::Const &data, int width = -1, int offset = 0, bool autoint = true); + void dump_sigchunk(std::ostream &f, const RTLIL::SigChunk &chunk, bool autoint = true); + void dump_sigspec(std::ostream &f, const RTLIL::SigSpec &sig, bool autoint = true); + void dump_wire(std::ostream &f, std::string indent, const RTLIL::Wire *wire); + void dump_memory(std::ostream &f, std::string indent, const RTLIL::Memory *memory); + void dump_cell(std::ostream &f, std::string indent, const RTLIL::Cell *cell); + void dump_proc_case_body(std::ostream &f, std::string indent, const RTLIL::CaseRule *cs); + void dump_proc_switch(std::ostream &f, std::string indent, const RTLIL::SwitchRule *sw); + void dump_proc_sync(std::ostream &f, std::string indent, const RTLIL::SyncRule *sy); + void dump_proc(std::ostream &f, std::string indent, const RTLIL::Process *proc); + void dump_conn(std::ostream &f, std::string indent, const RTLIL::SigSpec &left, const RTLIL::SigSpec &right); + void dump_module(std::ostream &f, std::string indent, RTLIL::Module *module, RTLIL::Design *design, bool only_selected, bool flag_m = true, bool flag_n = false); + void dump_design(std::ostream &f, RTLIL::Design *design, bool only_selected, bool flag_m = true, bool flag_n = false); +} + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/frontends/ast/ast.h b/resources/netlist/resources/kernel/share/include/frontends/ast/ast.h new file mode 100644 index 0000000..80497c1 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/frontends/ast/ast.h @@ -0,0 +1,425 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * This is the AST frontend library. + * + * The AST frontend library is not a frontend on it's own but provides a + * generic abstract syntax tree (AST) abstraction for HDL code and can be + * used by HDL frontends. See "ast.h" for an overview of the API and the + * Verilog frontend for an usage example. + * + */ + +#ifndef AST_H +#define AST_H + +#include "kernel/rtlil.h" +#include +#include + +YOSYS_NAMESPACE_BEGIN + +namespace AST +{ + // all node types, type2str() must be extended + // whenever a new node type is added here + enum AstNodeType + { + AST_NONE, + AST_DESIGN, + AST_MODULE, + AST_TASK, + AST_FUNCTION, + AST_DPI_FUNCTION, + + AST_WIRE, + AST_MEMORY, + AST_AUTOWIRE, + AST_PARAMETER, + AST_LOCALPARAM, + AST_DEFPARAM, + AST_PARASET, + AST_ARGUMENT, + AST_RANGE, + AST_MULTIRANGE, + AST_CONSTANT, + AST_REALVALUE, + AST_CELLTYPE, + AST_IDENTIFIER, + AST_PREFIX, + AST_ASSERT, + AST_ASSUME, + AST_LIVE, + AST_FAIR, + AST_COVER, + AST_ENUM, + AST_ENUM_ITEM, + + AST_FCALL, + AST_TO_BITS, + AST_TO_SIGNED, + AST_TO_UNSIGNED, + AST_SELFSZ, + AST_CAST_SIZE, + AST_CONCAT, + AST_REPLICATE, + AST_BIT_NOT, + AST_BIT_AND, + AST_BIT_OR, + AST_BIT_XOR, + AST_BIT_XNOR, + AST_REDUCE_AND, + AST_REDUCE_OR, + AST_REDUCE_XOR, + AST_REDUCE_XNOR, + AST_REDUCE_BOOL, + AST_SHIFT_LEFT, + AST_SHIFT_RIGHT, + AST_SHIFT_SLEFT, + AST_SHIFT_SRIGHT, + AST_SHIFTX, + AST_SHIFT, + AST_LT, + AST_LE, + AST_EQ, + AST_NE, + AST_EQX, + AST_NEX, + AST_GE, + AST_GT, + AST_ADD, + AST_SUB, + AST_MUL, + AST_DIV, + AST_MOD, + AST_POW, + AST_POS, + AST_NEG, + AST_LOGIC_AND, + AST_LOGIC_OR, + AST_LOGIC_NOT, + AST_TERNARY, + AST_MEMRD, + AST_MEMWR, + AST_MEMINIT, + + AST_TCALL, + AST_ASSIGN, + AST_CELL, + AST_PRIMITIVE, + AST_CELLARRAY, + AST_ALWAYS, + AST_INITIAL, + AST_BLOCK, + AST_ASSIGN_EQ, + AST_ASSIGN_LE, + AST_CASE, + AST_COND, + AST_CONDX, + AST_CONDZ, + AST_DEFAULT, + AST_FOR, + AST_WHILE, + AST_REPEAT, + + AST_GENVAR, + AST_GENFOR, + AST_GENIF, + AST_GENCASE, + AST_GENBLOCK, + AST_TECALL, + + AST_POSEDGE, + AST_NEGEDGE, + AST_EDGE, + + AST_INTERFACE, + AST_INTERFACEPORT, + AST_INTERFACEPORTTYPE, + AST_MODPORT, + AST_MODPORTMEMBER, + AST_PACKAGE, + + AST_WIRETYPE, + AST_TYPEDEF, + AST_STRUCT, + AST_UNION, + AST_STRUCT_ITEM, + AST_BIND + }; + + struct AstSrcLocType { + unsigned int first_line, last_line; + unsigned int first_column, last_column; + AstSrcLocType() : first_line(0), last_line(0), first_column(0), last_column(0) {} + AstSrcLocType(int _first_line, int _first_column, int _last_line, int _last_column) : first_line(_first_line), last_line(_last_line), first_column(_first_column), last_column(_last_column) {} + }; + + // convert an node type to a string (e.g. for debug output) + std::string type2str(AstNodeType type); + + // The AST is built using instances of this struct + struct AstNode + { + // for dict<> and pool<> + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + + // this nodes type + AstNodeType type; + + // the list of child nodes for this node + std::vector children; + + // the list of attributes assigned to this node + std::map attributes; + bool get_bool_attribute(RTLIL::IdString id); + + // node content - most of it is unused in most node types + std::string str; + std::vector bits; + bool is_input, is_output, is_reg, is_logic, is_signed, is_string, is_wand, is_wor, range_valid, range_swapped, was_checked, is_unsized, is_custom_type; + int port_id, range_left, range_right; + uint32_t integer; + double realvalue; + // set for IDs typed to an enumeration, not used + bool is_enum; + + // if this is a multirange memory then this vector contains offset and length of each dimension + std::vector multirange_dimensions; + std::vector multirange_swapped; // true if range is swapped, not used for structs + + // this is set by simplify and used during RTLIL generation + AstNode *id2ast; + + // this is used by simplify to detect if basic analysis has been performed already on the node + bool basic_prep; + + // this is used for ID references in RHS expressions that should use the "new" value for non-blocking assignments + bool lookahead; + + // this is the original sourcecode location that resulted in this AST node + // it is automatically set by the constructor using AST::current_filename and + // the AST::get_line_num() callback function. + std::string filename; + AstSrcLocType location; + + // creating and deleting nodes + AstNode(AstNodeType type = AST_NONE, AstNode *child1 = nullptr, AstNode *child2 = nullptr, AstNode *child3 = nullptr, AstNode *child4 = nullptr); + AstNode *clone() const; + void cloneInto(AstNode *other) const; + void delete_children(); + ~AstNode(); + + enum mem2reg_flags + { + /* status flags */ + MEM2REG_FL_ALL = 0x00000001, + MEM2REG_FL_ASYNC = 0x00000002, + MEM2REG_FL_INIT = 0x00000004, + + /* candidate flags */ + MEM2REG_FL_FORCED = 0x00000100, + MEM2REG_FL_SET_INIT = 0x00000200, + MEM2REG_FL_SET_ELSE = 0x00000400, + MEM2REG_FL_SET_ASYNC = 0x00000800, + MEM2REG_FL_EQ2 = 0x00001000, + MEM2REG_FL_CMPLX_LHS = 0x00002000, + MEM2REG_FL_CONST_LHS = 0x00004000, + MEM2REG_FL_VAR_LHS = 0x00008000, + + /* proc flags */ + MEM2REG_FL_EQ1 = 0x01000000, + }; + + // simplify() creates a simpler AST by unrolling for-loops, expanding generate blocks, etc. + // it also sets the id2ast pointers so that identifier lookups are fast in genRTLIL() + bool simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage, int width_hint, bool sign_hint, bool in_param); + void replace_result_wire_name_in_function(const std::string &from, const std::string &to); + AstNode *readmem(bool is_readmemh, std::string mem_filename, AstNode *memory, int start_addr, int finish_addr, bool unconditional_init); + void expand_genblock(const std::string &prefix); + void label_genblks(std::set& existing, int &counter); + void mem2reg_as_needed_pass1(dict> &mem2reg_places, + dict &mem2reg_flags, dict &proc_flags, uint32_t &status_flags); + bool mem2reg_as_needed_pass2(pool &mem2reg_set, AstNode *mod, AstNode *block, AstNode *&async_block); + bool mem2reg_check(pool &mem2reg_set); + void mem2reg_remove(pool &mem2reg_set, vector &delnodes); + void meminfo(int &mem_width, int &mem_size, int &addr_bits); + bool detect_latch(const std::string &var); + const RTLIL::Module* lookup_cell_module(); + + // additional functionality for evaluating constant functions + struct varinfo_t { + RTLIL::Const val; + int offset; + bool range_swapped; + bool is_signed; + AstNode *arg = nullptr; + bool explicitly_sized; + }; + bool has_const_only_constructs(); + bool replace_variables(std::map &variables, AstNode *fcall, bool must_succeed); + AstNode *eval_const_function(AstNode *fcall, bool must_succeed); + bool is_simple_const_expr(); + std::string process_format_str(const std::string &sformat, int next_arg, int stage, int width_hint, bool sign_hint); + + bool is_recursive_function() const; + std::pair get_tern_choice(); + + // create a human-readable text representation of the AST (for debugging) + void dumpAst(FILE *f, std::string indent) const; + void dumpVlog(FILE *f, std::string indent) const; + + // Generate RTLIL for a bind construct + std::vector genBindings() const; + + // used by genRTLIL() for detecting expression width and sign + void detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *found_real = NULL); + void detectSignWidth(int &width_hint, bool &sign_hint, bool *found_real = NULL); + + // create RTLIL code for this AST node + // for expressions the resulting signal vector is returned + // all generated cell instances, etc. are written to the RTLIL::Module pointed to by AST_INTERNAL::current_module + RTLIL::SigSpec genRTLIL(int width_hint = -1, bool sign_hint = false); + RTLIL::SigSpec genWidthRTLIL(int width, bool sgn, const dict *new_subst_ptr = NULL); + + // compare AST nodes + bool operator==(const AstNode &other) const; + bool operator!=(const AstNode &other) const; + bool contains(const AstNode *other) const; + + // helper functions for creating AST nodes for constants + static AstNode *mkconst_int(uint32_t v, bool is_signed, int width = 32); + static AstNode *mkconst_bits(const std::vector &v, bool is_signed, bool is_unsized); + static AstNode *mkconst_bits(const std::vector &v, bool is_signed); + static AstNode *mkconst_str(const std::vector &v); + static AstNode *mkconst_str(const std::string &str); + + // helper function for creating sign-extended const objects + RTLIL::Const bitsAsConst(int width, bool is_signed); + RTLIL::Const bitsAsConst(int width = -1); + RTLIL::Const bitsAsUnsizedConst(int width); + RTLIL::Const asAttrConst() const; + RTLIL::Const asParaConst() const; + uint64_t asInt(bool is_signed); + bool bits_only_01() const; + bool asBool() const; + + // helper functions for real valued const eval + int isConst() const; // return '1' for AST_CONSTANT and '2' for AST_REALVALUE + double asReal(bool is_signed); + RTLIL::Const realAsConst(int width); + + // helpers for enum + void allocateDefaultEnumValues(); + void annotateTypedEnums(AstNode *template_node); + + // helpers for locations + std::string loc_string() const; + + // Helper for looking up identifiers which are prefixed with the current module name + std::string try_pop_module_prefix() const; + }; + + // process an AST tree (ast must point to an AST_DESIGN node) and generate RTLIL code + void process(RTLIL::Design *design, AstNode *ast, bool dump_ast1, bool dump_ast2, bool no_dump_ptr, bool dump_vlog1, bool dump_vlog2, bool dump_rtlil, bool nolatches, bool nomeminit, + bool nomem2reg, bool mem2reg, bool noblackbox, bool lib, bool nowb, bool noopt, bool icells, bool pwires, bool nooverwrite, bool overwrite, bool defer, bool autowire); + + // parametric modules are supported directly by the AST library + // therefore we need our own derivate of RTLIL::Module with overloaded virtual functions + struct AstModule : RTLIL::Module { + AstNode *ast; + bool nolatches, nomeminit, nomem2reg, mem2reg, noblackbox, lib, nowb, noopt, icells, pwires, autowire; + ~AstModule() override; + RTLIL::IdString derive(RTLIL::Design *design, const dict ¶meters, bool mayfail) override; + RTLIL::IdString derive(RTLIL::Design *design, const dict ¶meters, const dict &interfaces, const dict &modports, bool mayfail) override; + std::string derive_common(RTLIL::Design *design, const dict ¶meters, AstNode **new_ast_out, bool quiet = false); + void expand_interfaces(RTLIL::Design *design, const dict &local_interfaces) override; + bool reprocess_if_necessary(RTLIL::Design *design) override; + RTLIL::Module *clone() const override; + void loadconfig() const; + }; + + // this must be set by the language frontend before parsing the sources + // the AstNode constructor then uses current_filename and get_line_num() + // to initialize the filename and linenum properties of new nodes + extern std::string current_filename; + extern void (*set_line_num)(int); + extern int (*get_line_num)(); + + // set set_line_num and get_line_num to internal dummy functions (done by simplify() and AstModule::derive + // to control the filename and linenum properties of new nodes not generated by a frontend parser) + void use_internal_line_num(); + + // call a DPI function + AstNode *dpi_call(const std::string &rtype, const std::string &fname, const std::vector &argtypes, const std::vector &args); + + // Helper functions related to handling SystemVerilog interfaces + std::pair split_modport_from_type(std::string name_type); + AstNode * find_modport(AstNode *intf, std::string name); + void explode_interface_port(AstNode *module_ast, RTLIL::Module * intfmodule, std::string intfname, AstNode *modport); + + // Helper for setting the src attribute. + void set_src_attr(RTLIL::AttrObject *obj, const AstNode *ast); + + // struct helper exposed from simplify for genrtlil + AstNode *make_struct_member_range(AstNode *node, AstNode *member_node); + + // generate standard $paramod... derived module name; parameters should be + // in the order they are declared in the instantiated module + std::string derived_module_name(std::string stripped_name, const std::vector> ¶meters); + + // used to provide simplify() access to the current design for looking up + // modules, ports, wires, etc. + void set_simplify_design_context(const RTLIL::Design *design); +} + +namespace AST_INTERNAL +{ + // internal state variables + extern bool flag_dump_ast1, flag_dump_ast2, flag_no_dump_ptr, flag_dump_rtlil, flag_nolatches, flag_nomeminit; + extern bool flag_nomem2reg, flag_mem2reg, flag_lib, flag_noopt, flag_icells, flag_pwires, flag_autowire; + extern AST::AstNode *current_ast, *current_ast_mod; + extern std::map current_scope; + extern const dict *genRTLIL_subst_ptr; + extern RTLIL::SigSpec ignoreThisSignalsInInitial; + extern AST::AstNode *current_always, *current_top_block, *current_block, *current_block_child; + extern RTLIL::Module *current_module; + extern bool current_always_clocked; + extern dict current_memwr_count; + extern dict> current_memwr_visible; + struct LookaheadRewriter; + struct ProcessGenerator; + + // Create and add a new AstModule from new_ast, then use it to replace + // old_module in design, renaming old_module to move it out of the way. + // Return the new module. + // + // If original_ast is not null, it will be used as the AST node for the + // new module. Otherwise, new_ast will be used. + RTLIL::Module * + process_and_replace_module(RTLIL::Design *design, + RTLIL::Module *old_module, + AST::AstNode *new_ast, + AST::AstNode *original_ast = nullptr); +} + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/frontends/ast/ast_binding.h b/resources/netlist/resources/kernel/share/include/frontends/ast/ast_binding.h new file mode 100644 index 0000000..641497d --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/frontends/ast/ast_binding.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * This header declares the AST::Binding class + * + * This is used to support the bind directive and is to RTLIL::Binding as + * AST::AstModule is to RTLIL::Module, holding a syntax-level representation of + * cells until we get to a stage where they make sense. In the case of a bind + * directive, this is when we elaborate the design in the hierarchy pass. + * + */ + +#ifndef AST_BINDING_H +#define AST_BINDING_H + +#include "kernel/rtlil.h" +#include "kernel/binding.h" + +#include + +YOSYS_NAMESPACE_BEGIN + +namespace AST +{ + class Binding : public RTLIL::Binding + { + public: + Binding(RTLIL::IdString target_type, + RTLIL::IdString target_name, + const AstNode &cell); + + std::string describe() const override; + + private: + // The syntax-level representation of the cell to be bound. + std::unique_ptr ast_node; + }; +} + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/frontends/blif/blifparse.h b/resources/netlist/resources/kernel/share/include/frontends/blif/blifparse.h new file mode 100644 index 0000000..d7a3c96 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/frontends/blif/blifparse.h @@ -0,0 +1,32 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef ABC_BLIFPARSE +#define ABC_BLIFPARSE + +#include "kernel/yosys.h" + +YOSYS_NAMESPACE_BEGIN + +extern void parse_blif(RTLIL::Design *design, std::istream &f, IdString dff_name, + bool run_clean = false, bool sop_mode = false, bool wideports = false); + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/binding.h b/resources/netlist/resources/kernel/share/include/kernel/binding.h new file mode 100644 index 0000000..3b64e76 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/binding.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef BINDING_H +#define BINDING_H + +#include "kernel/rtlil.h" + +YOSYS_NAMESPACE_BEGIN + +struct RTLIL::Binding +{ + // Represents a bind construct. + // + // The target of the binding is represented by target_type and + // target_name (see comments above the fields). + + Binding(RTLIL::IdString target_type, + RTLIL::IdString target_name); + + virtual ~Binding() {} + + // Return a string describing the binding + virtual std::string describe() const = 0; + +protected: + // May be empty. If not, it's the name of the module or interface to + // bind to. + RTLIL::IdString target_type; + + // If target_type is nonempty (the usual case), this is a hierarchical + // reference to the bind target. If target_type is empty, we have to + // wait until the hierarchy pass to figure out whether this was the name + // of a module/interface type or an instance. + RTLIL::IdString target_name; + + // An attribute name which contains an ID that's unique across binding + // instances (used to ensure we don't apply a binding twice to a module) + RTLIL::IdString attr_name; +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/celledges.h b/resources/netlist/resources/kernel/share/include/kernel/celledges.h new file mode 100644 index 0000000..d5e374f --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/celledges.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef CELLEDGES_H +#define CELLEDGES_H + +#include "kernel/yosys.h" +#include "kernel/sigtools.h" + +YOSYS_NAMESPACE_BEGIN + +struct AbstractCellEdgesDatabase +{ + virtual ~AbstractCellEdgesDatabase() { } + virtual void add_edge(RTLIL::Cell *cell, RTLIL::IdString from_port, int from_bit, RTLIL::IdString to_port, int to_bit, int delay) = 0; + bool add_edges_from_cell(RTLIL::Cell *cell); +}; + +struct FwdCellEdgesDatabase : AbstractCellEdgesDatabase +{ + SigMap &sigmap; + dict> db; + FwdCellEdgesDatabase(SigMap &sigmap) : sigmap(sigmap) { } + + void add_edge(RTLIL::Cell *cell, RTLIL::IdString from_port, int from_bit, RTLIL::IdString to_port, int to_bit, int) override { + SigBit from_sigbit = sigmap(cell->getPort(from_port)[from_bit]); + SigBit to_sigbit = sigmap(cell->getPort(to_port)[to_bit]); + db[from_sigbit].insert(to_sigbit); + } +}; + +struct RevCellEdgesDatabase : AbstractCellEdgesDatabase +{ + SigMap &sigmap; + dict> db; + RevCellEdgesDatabase(SigMap &sigmap) : sigmap(sigmap) { } + + void add_edge(RTLIL::Cell *cell, RTLIL::IdString from_port, int from_bit, RTLIL::IdString to_port, int to_bit, int) override { + SigBit from_sigbit = sigmap(cell->getPort(from_port)[from_bit]); + SigBit to_sigbit = sigmap(cell->getPort(to_port)[to_bit]); + db[to_sigbit].insert(from_sigbit); + } +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/celltypes.h b/resources/netlist/resources/kernel/share/include/kernel/celltypes.h new file mode 100644 index 0000000..d62ba15 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/celltypes.h @@ -0,0 +1,527 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef CELLTYPES_H +#define CELLTYPES_H + +#include "kernel/yosys.h" + +YOSYS_NAMESPACE_BEGIN + +struct CellType +{ + RTLIL::IdString type; + pool inputs, outputs; + bool is_evaluable; +}; + +struct CellTypes +{ + dict cell_types; + + CellTypes() + { + } + + CellTypes(RTLIL::Design *design) + { + setup(design); + } + + void setup(RTLIL::Design *design = NULL) + { + if (design) + setup_design(design); + + setup_internals(); + setup_internals_mem(); + setup_internals_anyinit(); + setup_stdcells(); + setup_stdcells_mem(); + } + + void setup_type(RTLIL::IdString type, const pool &inputs, const pool &outputs, bool is_evaluable = false) + { + CellType ct = {type, inputs, outputs, is_evaluable}; + cell_types[ct.type] = ct; + } + + void setup_module(RTLIL::Module *module) + { + pool inputs, outputs; + for (RTLIL::IdString wire_name : module->ports) { + RTLIL::Wire *wire = module->wire(wire_name); + if (wire->port_input) + inputs.insert(wire->name); + if (wire->port_output) + outputs.insert(wire->name); + } + setup_type(module->name, inputs, outputs); + } + + void setup_design(RTLIL::Design *design) + { + for (auto module : design->modules()) + setup_module(module); + } + + void setup_internals() + { + setup_internals_eval(); + + setup_type(ID($tribuf), {ID::A, ID::EN}, {ID::Y}, true); + + setup_type(ID($assert), {ID::A, ID::EN}, pool(), true); + setup_type(ID($assume), {ID::A, ID::EN}, pool(), true); + setup_type(ID($live), {ID::A, ID::EN}, pool(), true); + setup_type(ID($fair), {ID::A, ID::EN}, pool(), true); + setup_type(ID($cover), {ID::A, ID::EN}, pool(), true); + setup_type(ID($initstate), pool(), {ID::Y}, true); + setup_type(ID($anyconst), pool(), {ID::Y}, true); + setup_type(ID($anyseq), pool(), {ID::Y}, true); + setup_type(ID($allconst), pool(), {ID::Y}, true); + setup_type(ID($allseq), pool(), {ID::Y}, true); + setup_type(ID($equiv), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($specify2), {ID::EN, ID::SRC, ID::DST}, pool(), true); + setup_type(ID($specify3), {ID::EN, ID::SRC, ID::DST, ID::DAT}, pool(), true); + setup_type(ID($specrule), {ID::EN_SRC, ID::EN_DST, ID::SRC, ID::DST}, pool(), true); + } + + void setup_internals_eval() + { + std::vector unary_ops = { + ID($not), ID($pos), ID($neg), + ID($reduce_and), ID($reduce_or), ID($reduce_xor), ID($reduce_xnor), ID($reduce_bool), + ID($logic_not), ID($slice), ID($lut), ID($sop) + }; + + std::vector binary_ops = { + ID($and), ID($or), ID($xor), ID($xnor), + ID($shl), ID($shr), ID($sshl), ID($sshr), ID($shift), ID($shiftx), + ID($lt), ID($le), ID($eq), ID($ne), ID($eqx), ID($nex), ID($ge), ID($gt), + ID($add), ID($sub), ID($mul), ID($div), ID($mod), ID($divfloor), ID($modfloor), ID($pow), + ID($logic_and), ID($logic_or), ID($concat), ID($macc) + }; + + for (auto type : unary_ops) + setup_type(type, {ID::A}, {ID::Y}, true); + + for (auto type : binary_ops) + setup_type(type, {ID::A, ID::B}, {ID::Y}, true); + + for (auto type : std::vector({ID($mux), ID($pmux)})) + setup_type(type, {ID::A, ID::B, ID::S}, {ID::Y}, true); + + for (auto type : std::vector({ID($bmux), ID($demux)})) + setup_type(type, {ID::A, ID::S}, {ID::Y}, true); + + setup_type(ID($lcu), {ID::P, ID::G, ID::CI}, {ID::CO}, true); + setup_type(ID($alu), {ID::A, ID::B, ID::CI, ID::BI}, {ID::X, ID::Y, ID::CO}, true); + setup_type(ID($fa), {ID::A, ID::B, ID::C}, {ID::X, ID::Y}, true); + } + + void setup_internals_ff() + { + setup_type(ID($sr), {ID::SET, ID::CLR}, {ID::Q}); + setup_type(ID($ff), {ID::D}, {ID::Q}); + setup_type(ID($dff), {ID::CLK, ID::D}, {ID::Q}); + setup_type(ID($dffe), {ID::CLK, ID::EN, ID::D}, {ID::Q}); + setup_type(ID($dffsr), {ID::CLK, ID::SET, ID::CLR, ID::D}, {ID::Q}); + setup_type(ID($dffsre), {ID::CLK, ID::SET, ID::CLR, ID::D, ID::EN}, {ID::Q}); + setup_type(ID($adff), {ID::CLK, ID::ARST, ID::D}, {ID::Q}); + setup_type(ID($adffe), {ID::CLK, ID::ARST, ID::D, ID::EN}, {ID::Q}); + setup_type(ID($aldff), {ID::CLK, ID::ALOAD, ID::AD, ID::D}, {ID::Q}); + setup_type(ID($aldffe), {ID::CLK, ID::ALOAD, ID::AD, ID::D, ID::EN}, {ID::Q}); + setup_type(ID($sdff), {ID::CLK, ID::SRST, ID::D}, {ID::Q}); + setup_type(ID($sdffe), {ID::CLK, ID::SRST, ID::D, ID::EN}, {ID::Q}); + setup_type(ID($sdffce), {ID::CLK, ID::SRST, ID::D, ID::EN}, {ID::Q}); + setup_type(ID($dlatch), {ID::EN, ID::D}, {ID::Q}); + setup_type(ID($adlatch), {ID::EN, ID::D, ID::ARST}, {ID::Q}); + setup_type(ID($dlatchsr), {ID::EN, ID::SET, ID::CLR, ID::D}, {ID::Q}); + } + + void setup_internals_anyinit() + { + setup_type(ID($anyinit), {ID::D}, {ID::Q}); + } + + void setup_internals_mem() + { + setup_internals_ff(); + + setup_type(ID($memrd), {ID::CLK, ID::EN, ID::ADDR}, {ID::DATA}); + setup_type(ID($memrd_v2), {ID::CLK, ID::EN, ID::ARST, ID::SRST, ID::ADDR}, {ID::DATA}); + setup_type(ID($memwr), {ID::CLK, ID::EN, ID::ADDR, ID::DATA}, pool()); + setup_type(ID($memwr_v2), {ID::CLK, ID::EN, ID::ADDR, ID::DATA}, pool()); + setup_type(ID($meminit), {ID::ADDR, ID::DATA}, pool()); + setup_type(ID($meminit_v2), {ID::ADDR, ID::DATA, ID::EN}, pool()); + setup_type(ID($mem), {ID::RD_CLK, ID::RD_EN, ID::RD_ADDR, ID::WR_CLK, ID::WR_EN, ID::WR_ADDR, ID::WR_DATA}, {ID::RD_DATA}); + setup_type(ID($mem_v2), {ID::RD_CLK, ID::RD_EN, ID::RD_ARST, ID::RD_SRST, ID::RD_ADDR, ID::WR_CLK, ID::WR_EN, ID::WR_ADDR, ID::WR_DATA}, {ID::RD_DATA}); + + setup_type(ID($fsm), {ID::CLK, ID::ARST, ID::CTRL_IN}, {ID::CTRL_OUT}); + } + + void setup_stdcells() + { + setup_stdcells_eval(); + + setup_type(ID($_TBUF_), {ID::A, ID::E}, {ID::Y}, true); + } + + void setup_stdcells_eval() + { + setup_type(ID($_BUF_), {ID::A}, {ID::Y}, true); + setup_type(ID($_NOT_), {ID::A}, {ID::Y}, true); + setup_type(ID($_AND_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_NAND_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_OR_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_NOR_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_XOR_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_XNOR_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_ANDNOT_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_ORNOT_), {ID::A, ID::B}, {ID::Y}, true); + setup_type(ID($_MUX_), {ID::A, ID::B, ID::S}, {ID::Y}, true); + setup_type(ID($_NMUX_), {ID::A, ID::B, ID::S}, {ID::Y}, true); + setup_type(ID($_MUX4_), {ID::A, ID::B, ID::C, ID::D, ID::S, ID::T}, {ID::Y}, true); + setup_type(ID($_MUX8_), {ID::A, ID::B, ID::C, ID::D, ID::E, ID::F, ID::G, ID::H, ID::S, ID::T, ID::U}, {ID::Y}, true); + setup_type(ID($_MUX16_), {ID::A, ID::B, ID::C, ID::D, ID::E, ID::F, ID::G, ID::H, ID::I, ID::J, ID::K, ID::L, ID::M, ID::N, ID::O, ID::P, ID::S, ID::T, ID::U, ID::V}, {ID::Y}, true); + setup_type(ID($_AOI3_), {ID::A, ID::B, ID::C}, {ID::Y}, true); + setup_type(ID($_OAI3_), {ID::A, ID::B, ID::C}, {ID::Y}, true); + setup_type(ID($_AOI4_), {ID::A, ID::B, ID::C, ID::D}, {ID::Y}, true); + setup_type(ID($_OAI4_), {ID::A, ID::B, ID::C, ID::D}, {ID::Y}, true); + } + + void setup_stdcells_mem() + { + std::vector list_np = {'N', 'P'}, list_01 = {'0', '1'}; + + for (auto c1 : list_np) + for (auto c2 : list_np) + setup_type(stringf("$_SR_%c%c_", c1, c2), {ID::S, ID::R}, {ID::Q}); + + setup_type(ID($_FF_), {ID::D}, {ID::Q}); + + for (auto c1 : list_np) + setup_type(stringf("$_DFF_%c_", c1), {ID::C, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + setup_type(stringf("$_DFFE_%c%c_", c1, c2), {ID::C, ID::D, ID::E}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_01) + setup_type(stringf("$_DFF_%c%c%c_", c1, c2, c3), {ID::C, ID::R, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_01) + for (auto c4 : list_np) + setup_type(stringf("$_DFFE_%c%c%c%c_", c1, c2, c3, c4), {ID::C, ID::R, ID::D, ID::E}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + setup_type(stringf("$_ALDFF_%c%c_", c1, c2), {ID::C, ID::L, ID::AD, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_np) + setup_type(stringf("$_ALDFFE_%c%c%c_", c1, c2, c3), {ID::C, ID::L, ID::AD, ID::D, ID::E}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_np) + setup_type(stringf("$_DFFSR_%c%c%c_", c1, c2, c3), {ID::C, ID::S, ID::R, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_np) + for (auto c4 : list_np) + setup_type(stringf("$_DFFSRE_%c%c%c%c_", c1, c2, c3, c4), {ID::C, ID::S, ID::R, ID::D, ID::E}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_01) + setup_type(stringf("$_SDFF_%c%c%c_", c1, c2, c3), {ID::C, ID::R, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_01) + for (auto c4 : list_np) + setup_type(stringf("$_SDFFE_%c%c%c%c_", c1, c2, c3, c4), {ID::C, ID::R, ID::D, ID::E}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_01) + for (auto c4 : list_np) + setup_type(stringf("$_SDFFCE_%c%c%c%c_", c1, c2, c3, c4), {ID::C, ID::R, ID::D, ID::E}, {ID::Q}); + + for (auto c1 : list_np) + setup_type(stringf("$_DLATCH_%c_", c1), {ID::E, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_01) + setup_type(stringf("$_DLATCH_%c%c%c_", c1, c2, c3), {ID::E, ID::R, ID::D}, {ID::Q}); + + for (auto c1 : list_np) + for (auto c2 : list_np) + for (auto c3 : list_np) + setup_type(stringf("$_DLATCHSR_%c%c%c_", c1, c2, c3), {ID::E, ID::S, ID::R, ID::D}, {ID::Q}); + } + + void clear() + { + cell_types.clear(); + } + + bool cell_known(RTLIL::IdString type) const + { + return cell_types.count(type) != 0; + } + + bool cell_output(RTLIL::IdString type, RTLIL::IdString port) const + { + auto it = cell_types.find(type); + return it != cell_types.end() && it->second.outputs.count(port) != 0; + } + + bool cell_input(RTLIL::IdString type, RTLIL::IdString port) const + { + auto it = cell_types.find(type); + return it != cell_types.end() && it->second.inputs.count(port) != 0; + } + + bool cell_evaluable(RTLIL::IdString type) const + { + auto it = cell_types.find(type); + return it != cell_types.end() && it->second.is_evaluable; + } + + static RTLIL::Const eval_not(RTLIL::Const v) + { + for (auto &bit : v.bits) + if (bit == State::S0) bit = State::S1; + else if (bit == State::S1) bit = State::S0; + return v; + } + + static RTLIL::Const eval(RTLIL::IdString type, const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len, bool *errp = nullptr) + { + if (type == ID($sshr) && !signed1) + type = ID($shr); + if (type == ID($sshl) && !signed1) + type = ID($shl); + + if (type != ID($sshr) && type != ID($sshl) && type != ID($shr) && type != ID($shl) && type != ID($shift) && type != ID($shiftx) && + type != ID($pos) && type != ID($neg) && type != ID($not)) { + if (!signed1 || !signed2) + signed1 = false, signed2 = false; + } + +#define HANDLE_CELL_TYPE(_t) if (type == ID($##_t)) return const_ ## _t(arg1, arg2, signed1, signed2, result_len); + HANDLE_CELL_TYPE(not) + HANDLE_CELL_TYPE(and) + HANDLE_CELL_TYPE(or) + HANDLE_CELL_TYPE(xor) + HANDLE_CELL_TYPE(xnor) + HANDLE_CELL_TYPE(reduce_and) + HANDLE_CELL_TYPE(reduce_or) + HANDLE_CELL_TYPE(reduce_xor) + HANDLE_CELL_TYPE(reduce_xnor) + HANDLE_CELL_TYPE(reduce_bool) + HANDLE_CELL_TYPE(logic_not) + HANDLE_CELL_TYPE(logic_and) + HANDLE_CELL_TYPE(logic_or) + HANDLE_CELL_TYPE(shl) + HANDLE_CELL_TYPE(shr) + HANDLE_CELL_TYPE(sshl) + HANDLE_CELL_TYPE(sshr) + HANDLE_CELL_TYPE(shift) + HANDLE_CELL_TYPE(shiftx) + HANDLE_CELL_TYPE(lt) + HANDLE_CELL_TYPE(le) + HANDLE_CELL_TYPE(eq) + HANDLE_CELL_TYPE(ne) + HANDLE_CELL_TYPE(eqx) + HANDLE_CELL_TYPE(nex) + HANDLE_CELL_TYPE(ge) + HANDLE_CELL_TYPE(gt) + HANDLE_CELL_TYPE(add) + HANDLE_CELL_TYPE(sub) + HANDLE_CELL_TYPE(mul) + HANDLE_CELL_TYPE(div) + HANDLE_CELL_TYPE(mod) + HANDLE_CELL_TYPE(divfloor) + HANDLE_CELL_TYPE(modfloor) + HANDLE_CELL_TYPE(pow) + HANDLE_CELL_TYPE(pos) + HANDLE_CELL_TYPE(neg) +#undef HANDLE_CELL_TYPE + + if (type == ID($_BUF_)) + return arg1; + if (type == ID($_NOT_)) + return eval_not(arg1); + if (type == ID($_AND_)) + return const_and(arg1, arg2, false, false, 1); + if (type == ID($_NAND_)) + return eval_not(const_and(arg1, arg2, false, false, 1)); + if (type == ID($_OR_)) + return const_or(arg1, arg2, false, false, 1); + if (type == ID($_NOR_)) + return eval_not(const_or(arg1, arg2, false, false, 1)); + if (type == ID($_XOR_)) + return const_xor(arg1, arg2, false, false, 1); + if (type == ID($_XNOR_)) + return const_xnor(arg1, arg2, false, false, 1); + if (type == ID($_ANDNOT_)) + return const_and(arg1, eval_not(arg2), false, false, 1); + if (type == ID($_ORNOT_)) + return const_or(arg1, eval_not(arg2), false, false, 1); + + if (errp != nullptr) { + *errp = true; + return State::Sm; + } + + log_abort(); + } + + static RTLIL::Const eval(RTLIL::Cell *cell, const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool *errp = nullptr) + { + if (cell->type == ID($slice)) { + RTLIL::Const ret; + int width = cell->parameters.at(ID::Y_WIDTH).as_int(); + int offset = cell->parameters.at(ID::OFFSET).as_int(); + ret.bits.insert(ret.bits.end(), arg1.bits.begin()+offset, arg1.bits.begin()+offset+width); + return ret; + } + + if (cell->type == ID($concat)) { + RTLIL::Const ret = arg1; + ret.bits.insert(ret.bits.end(), arg2.bits.begin(), arg2.bits.end()); + return ret; + } + + if (cell->type == ID($bmux)) + { + return const_bmux(arg1, arg2); + } + + if (cell->type == ID($demux)) + { + return const_demux(arg1, arg2); + } + + if (cell->type == ID($lut)) + { + int width = cell->parameters.at(ID::WIDTH).as_int(); + + std::vector t = cell->parameters.at(ID::LUT).bits; + while (GetSize(t) < (1 << width)) + t.push_back(State::S0); + t.resize(1 << width); + + return const_bmux(t, arg1); + } + + if (cell->type == ID($sop)) + { + int width = cell->parameters.at(ID::WIDTH).as_int(); + int depth = cell->parameters.at(ID::DEPTH).as_int(); + std::vector t = cell->parameters.at(ID::TABLE).bits; + + while (GetSize(t) < width*depth*2) + t.push_back(State::S0); + + RTLIL::State default_ret = State::S0; + + for (int i = 0; i < depth; i++) + { + bool match = true; + bool match_x = true; + + for (int j = 0; j < width; j++) { + RTLIL::State a = arg1.bits.at(j); + if (t.at(2*width*i + 2*j + 0) == State::S1) { + if (a == State::S1) match_x = false; + if (a != State::S0) match = false; + } + if (t.at(2*width*i + 2*j + 1) == State::S1) { + if (a == State::S0) match_x = false; + if (a != State::S1) match = false; + } + } + + if (match) + return State::S1; + + if (match_x) + default_ret = State::Sx; + } + + return default_ret; + } + + bool signed_a = cell->parameters.count(ID::A_SIGNED) > 0 && cell->parameters[ID::A_SIGNED].as_bool(); + bool signed_b = cell->parameters.count(ID::B_SIGNED) > 0 && cell->parameters[ID::B_SIGNED].as_bool(); + int result_len = cell->parameters.count(ID::Y_WIDTH) > 0 ? cell->parameters[ID::Y_WIDTH].as_int() : -1; + return eval(cell->type, arg1, arg2, signed_a, signed_b, result_len, errp); + } + + static RTLIL::Const eval(RTLIL::Cell *cell, const RTLIL::Const &arg1, const RTLIL::Const &arg2, const RTLIL::Const &arg3, bool *errp = nullptr) + { + if (cell->type.in(ID($mux), ID($pmux), ID($_MUX_))) { + RTLIL::Const ret = arg1; + for (size_t i = 0; i < arg3.bits.size(); i++) + if (arg3.bits[i] == RTLIL::State::S1) { + std::vector bits(arg2.bits.begin() + i*arg1.bits.size(), arg2.bits.begin() + (i+1)*arg1.bits.size()); + ret = RTLIL::Const(bits); + } + return ret; + } + + if (cell->type == ID($_AOI3_)) + return eval_not(const_or(const_and(arg1, arg2, false, false, 1), arg3, false, false, 1)); + if (cell->type == ID($_OAI3_)) + return eval_not(const_and(const_or(arg1, arg2, false, false, 1), arg3, false, false, 1)); + + log_assert(arg3.bits.size() == 0); + return eval(cell, arg1, arg2, errp); + } + + static RTLIL::Const eval(RTLIL::Cell *cell, const RTLIL::Const &arg1, const RTLIL::Const &arg2, const RTLIL::Const &arg3, const RTLIL::Const &arg4, bool *errp = nullptr) + { + if (cell->type == ID($_AOI4_)) + return eval_not(const_or(const_and(arg1, arg2, false, false, 1), const_and(arg3, arg4, false, false, 1), false, false, 1)); + if (cell->type == ID($_OAI4_)) + return eval_not(const_and(const_or(arg1, arg2, false, false, 1), const_or(arg3, arg4, false, false, 1), false, false, 1)); + + log_assert(arg4.bits.size() == 0); + return eval(cell, arg1, arg2, arg3, errp); + } +}; + +// initialized by yosys_setup() +extern CellTypes yosys_celltypes; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/consteval.h b/resources/netlist/resources/kernel/share/include/kernel/consteval.h new file mode 100644 index 0000000..4c0c260 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/consteval.h @@ -0,0 +1,425 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef CONSTEVAL_H +#define CONSTEVAL_H + +#include "kernel/rtlil.h" +#include "kernel/sigtools.h" +#include "kernel/celltypes.h" +#include "kernel/macc.h" + +YOSYS_NAMESPACE_BEGIN + +struct ConstEval +{ + RTLIL::Module *module; + SigMap assign_map; + SigMap values_map; + SigPool stop_signals; + SigSet sig2driver; + std::set busy; + std::vector stack; + RTLIL::State defaultval; + + ConstEval(RTLIL::Module *module, RTLIL::State defaultval = RTLIL::State::Sm) : module(module), assign_map(module), defaultval(defaultval) + { + CellTypes ct; + ct.setup_internals(); + ct.setup_stdcells(); + + for (auto &it : module->cells_) { + if (!ct.cell_known(it.second->type)) + continue; + for (auto &it2 : it.second->connections()) + if (ct.cell_output(it.second->type, it2.first)) + sig2driver.insert(assign_map(it2.second), it.second); + } + } + + void clear() + { + values_map.clear(); + stop_signals.clear(); + } + + void push() + { + stack.push_back(values_map); + } + + void pop() + { + values_map.swap(stack.back()); + stack.pop_back(); + } + + void set(RTLIL::SigSpec sig, RTLIL::Const value) + { + assign_map.apply(sig); +#ifndef NDEBUG + RTLIL::SigSpec current_val = values_map(sig); + for (int i = 0; i < GetSize(current_val); i++) + log_assert(current_val[i].wire != NULL || current_val[i] == value.bits[i]); +#endif + values_map.add(sig, RTLIL::SigSpec(value)); + } + + void stop(RTLIL::SigSpec sig) + { + assign_map.apply(sig); + stop_signals.add(sig); + } + + bool eval(RTLIL::Cell *cell, RTLIL::SigSpec &undef) + { + if (cell->type == ID($lcu)) + { + RTLIL::SigSpec sig_p = cell->getPort(ID::P); + RTLIL::SigSpec sig_g = cell->getPort(ID::G); + RTLIL::SigSpec sig_ci = cell->getPort(ID::CI); + RTLIL::SigSpec sig_co = values_map(assign_map(cell->getPort(ID::CO))); + + if (sig_co.is_fully_const()) + return true; + + if (!eval(sig_p, undef, cell)) + return false; + + if (!eval(sig_g, undef, cell)) + return false; + + if (!eval(sig_ci, undef, cell)) + return false; + + if (sig_p.is_fully_def() && sig_g.is_fully_def() && sig_ci.is_fully_def()) + { + RTLIL::Const coval(RTLIL::Sx, GetSize(sig_co)); + bool carry = sig_ci.as_bool(); + + for (int i = 0; i < GetSize(coval); i++) { + carry = (sig_g[i] == State::S1) || (sig_p[i] == RTLIL::S1 && carry); + coval.bits[i] = carry ? State::S1 : State::S0; + } + + set(sig_co, coval); + } + else + set(sig_co, RTLIL::Const(RTLIL::Sx, GetSize(sig_co))); + + return true; + } + + RTLIL::SigSpec sig_a, sig_b, sig_s, sig_y; + + log_assert(cell->hasPort(ID::Y)); + sig_y = values_map(assign_map(cell->getPort(ID::Y))); + if (sig_y.is_fully_const()) + return true; + + if (cell->hasPort(ID::S)) { + sig_s = cell->getPort(ID::S); + } + + if (cell->hasPort(ID::A)) + sig_a = cell->getPort(ID::A); + + if (cell->hasPort(ID::B)) + sig_b = cell->getPort(ID::B); + + if (cell->type.in(ID($mux), ID($pmux), ID($_MUX_), ID($_NMUX_))) + { + std::vector y_candidates; + int count_set_s_bits = 0; + + if (!eval(sig_s, undef, cell)) + return false; + + for (int i = 0; i < sig_s.size(); i++) + { + RTLIL::State s_bit = sig_s.extract(i, 1).as_const().bits.at(0); + RTLIL::SigSpec b_slice = sig_b.extract(sig_y.size()*i, sig_y.size()); + + if (s_bit == RTLIL::State::Sx || s_bit == RTLIL::State::S1) + y_candidates.push_back(b_slice); + + if (s_bit == RTLIL::State::S1) + count_set_s_bits++; + } + + if (count_set_s_bits == 0) + y_candidates.push_back(sig_a); + + std::vector y_values; + + log_assert(y_candidates.size() > 0); + for (auto &yc : y_candidates) { + if (!eval(yc, undef, cell)) + return false; + if (cell->type == ID($_NMUX_)) + y_values.push_back(RTLIL::const_not(yc.as_const(), Const(), false, false, GetSize(yc))); + else + y_values.push_back(yc.as_const()); + } + + if (y_values.size() > 1) + { + std::vector master_bits = y_values.at(0).bits; + + for (size_t i = 1; i < y_values.size(); i++) { + std::vector &slave_bits = y_values.at(i).bits; + log_assert(master_bits.size() == slave_bits.size()); + for (size_t j = 0; j < master_bits.size(); j++) + if (master_bits[j] != slave_bits[j]) + master_bits[j] = RTLIL::State::Sx; + } + + set(sig_y, RTLIL::Const(master_bits)); + } + else + set(sig_y, y_values.front()); + } + else if (cell->type == ID($bmux)) + { + if (!eval(sig_s, undef, cell)) + return false; + + if (sig_s.is_fully_def()) { + int sel = sig_s.as_int(); + int width = GetSize(sig_y); + SigSpec res = sig_a.extract(sel * width, width); + if (!eval(res, undef, cell)) + return false; + set(sig_y, res.as_const()); + } else { + if (!eval(sig_a, undef, cell)) + return false; + set(sig_y, const_bmux(sig_a.as_const(), sig_s.as_const())); + } + } + else if (cell->type == ID($demux)) + { + if (!eval(sig_a, undef, cell)) + return false; + if (sig_a.is_fully_zero()) { + set(sig_y, Const(0, GetSize(sig_y))); + } else { + if (!eval(sig_s, undef, cell)) + return false; + set(sig_y, const_demux(sig_a.as_const(), sig_s.as_const())); + } + } + else if (cell->type == ID($fa)) + { + RTLIL::SigSpec sig_c = cell->getPort(ID::C); + RTLIL::SigSpec sig_x = cell->getPort(ID::X); + int width = GetSize(sig_c); + + if (!eval(sig_a, undef, cell)) + return false; + + if (!eval(sig_b, undef, cell)) + return false; + + if (!eval(sig_c, undef, cell)) + return false; + + RTLIL::Const t1 = const_xor(sig_a.as_const(), sig_b.as_const(), false, false, width); + RTLIL::Const val_y = const_xor(t1, sig_c.as_const(), false, false, width); + + RTLIL::Const t2 = const_and(sig_a.as_const(), sig_b.as_const(), false, false, width); + RTLIL::Const t3 = const_and(sig_c.as_const(), t1, false, false, width); + RTLIL::Const val_x = const_or(t2, t3, false, false, width); + + for (int i = 0; i < GetSize(val_y); i++) + if (val_y.bits[i] == RTLIL::Sx) + val_x.bits[i] = RTLIL::Sx; + + set(sig_y, val_y); + set(sig_x, val_x); + } + else if (cell->type == ID($alu)) + { + bool signed_a = cell->parameters.count(ID::A_SIGNED) > 0 && cell->parameters[ID::A_SIGNED].as_bool(); + bool signed_b = cell->parameters.count(ID::B_SIGNED) > 0 && cell->parameters[ID::B_SIGNED].as_bool(); + + RTLIL::SigSpec sig_ci = cell->getPort(ID::CI); + RTLIL::SigSpec sig_bi = cell->getPort(ID::BI); + + if (!eval(sig_a, undef, cell)) + return false; + + if (!eval(sig_b, undef, cell)) + return false; + + if (!eval(sig_ci, undef, cell)) + return false; + + if (!eval(sig_bi, undef, cell)) + return false; + + RTLIL::SigSpec sig_x = cell->getPort(ID::X); + RTLIL::SigSpec sig_co = cell->getPort(ID::CO); + + bool any_input_undef = !(sig_a.is_fully_def() && sig_b.is_fully_def() && sig_ci.is_fully_def() && sig_bi.is_fully_def()); + sig_a.extend_u0(GetSize(sig_y), signed_a); + sig_b.extend_u0(GetSize(sig_y), signed_b); + + bool carry = sig_ci[0] == State::S1; + bool b_inv = sig_bi[0] == State::S1; + + for (int i = 0; i < GetSize(sig_y); i++) + { + RTLIL::SigSpec x_inputs = { sig_a[i], sig_b[i], sig_bi[0] }; + + if (!x_inputs.is_fully_def()) { + set(sig_x[i], RTLIL::Sx); + } else { + bool bit_a = sig_a[i] == State::S1; + bool bit_b = (sig_b[i] == State::S1) != b_inv; + bool bit_x = bit_a != bit_b; + set(sig_x[i], bit_x ? State::S1 : State::S0); + } + + if (any_input_undef) { + set(sig_y[i], RTLIL::Sx); + set(sig_co[i], RTLIL::Sx); + } else { + bool bit_a = sig_a[i] == State::S1; + bool bit_b = (sig_b[i] == State::S1) != b_inv; + bool bit_y = (bit_a != bit_b) != carry; + carry = (bit_a && bit_b) || (bit_a && carry) || (bit_b && carry); + set(sig_y[i], bit_y ? State::S1 : State::S0); + set(sig_co[i], carry ? State::S1 : State::S0); + } + } + } + else if (cell->type == ID($macc)) + { + Macc macc; + macc.from_cell(cell); + + if (!eval(macc.bit_ports, undef, cell)) + return false; + + for (auto &port : macc.ports) { + if (!eval(port.in_a, undef, cell)) + return false; + if (!eval(port.in_b, undef, cell)) + return false; + } + + RTLIL::Const result(0, GetSize(cell->getPort(ID::Y))); + if (!macc.eval(result)) + log_abort(); + + set(cell->getPort(ID::Y), result); + } + else + { + RTLIL::SigSpec sig_c, sig_d; + + if (cell->type.in(ID($_AOI3_), ID($_OAI3_), ID($_AOI4_), ID($_OAI4_))) { + if (cell->hasPort(ID::C)) + sig_c = cell->getPort(ID::C); + if (cell->hasPort(ID::D)) + sig_d = cell->getPort(ID::D); + } + + if (sig_a.size() > 0 && !eval(sig_a, undef, cell)) + return false; + if (sig_b.size() > 0 && !eval(sig_b, undef, cell)) + return false; + if (sig_c.size() > 0 && !eval(sig_c, undef, cell)) + return false; + if (sig_d.size() > 0 && !eval(sig_d, undef, cell)) + return false; + + bool eval_err = false; + RTLIL::Const eval_ret = CellTypes::eval(cell, sig_a.as_const(), sig_b.as_const(), sig_c.as_const(), sig_d.as_const(), &eval_err); + + if (eval_err) + return false; + + set(sig_y, eval_ret); + } + + return true; + } + + bool eval(RTLIL::SigSpec &sig, RTLIL::SigSpec &undef, RTLIL::Cell *busy_cell = NULL) + { + assign_map.apply(sig); + values_map.apply(sig); + + if (sig.is_fully_const()) + return true; + + if (stop_signals.check_any(sig)) { + undef = stop_signals.extract(sig); + return false; + } + + if (busy_cell) { + if (busy.count(busy_cell) > 0) { + undef = sig; + return false; + } + busy.insert(busy_cell); + } + + std::set driver_cells; + sig2driver.find(sig, driver_cells); + for (auto cell : driver_cells) { + if (!eval(cell, undef)) { + if (busy_cell) + busy.erase(busy_cell); + return false; + } + } + + if (busy_cell) + busy.erase(busy_cell); + + values_map.apply(sig); + if (sig.is_fully_const()) + return true; + + if (defaultval != RTLIL::State::Sm) { + for (auto &bit : sig) + if (bit.wire) bit = defaultval; + return true; + } + + for (auto &c : sig.chunks()) + if (c.wire != NULL) + undef.append(c); + return false; + } + + bool eval(RTLIL::SigSpec &sig) + { + RTLIL::SigSpec undef; + return eval(sig, undef); + } +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/constids.inc b/resources/netlist/resources/kernel/share/include/kernel/constids.inc new file mode 100644 index 0000000..239381f --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/constids.inc @@ -0,0 +1,263 @@ +X(A) +X(abc9_box) +X(abc9_box_id) +X(abc9_box_seq) +X(abc9_bypass) +X(abc9_carry) +X(abc9_flop) +X(abc9_keep) +X(abc9_lut) +X(abc9_mergeability) +X(abc9_scc_id) +X(abcgroup) +X(ABITS) +X(AD) +X(ADDR) +X(allconst) +X(allseq) +X(ALOAD) +X(ALOAD_POLARITY) +X(always_comb) +X(always_ff) +X(always_latch) +X(anyconst) +X(anyseq) +X(ARST) +X(ARST_POLARITY) +X(ARST_VALUE) +X(A_SIGNED) +X(A_WIDTH) +X(B) +X(BI) +X(BITS_USED) +X(blackbox) +X(B_SIGNED) +X(bugpoint_keep) +X(B_WIDTH) +X(BYTE) +X(C) +X(cells_not_processed) +X(CE_OVER_SRST) +X(CFG_ABITS) +X(CFG_DBITS) +X(CFG_INIT) +X(CI) +X(CLK) +X(clkbuf_driver) +X(clkbuf_inhibit) +X(clkbuf_inv) +X(clkbuf_sink) +X(CLK_ENABLE) +X(CLK_POLARITY) +X(CLR) +X(CLR_POLARITY) +X(CO) +X(COLLISION_X_MASK) +X(CONFIG) +X(CONFIG_WIDTH) +X(CTRL_IN) +X(CTRL_IN_WIDTH) +X(CTRL_OUT) +X(CTRL_OUT_WIDTH) +X(D) +X(DAT) +X(DATA) +X(DAT_DST_PEN) +X(DAT_DST_POL) +X(defaultvalue) +X(DELAY) +X(DEPTH) +X(DST) +X(DST_EN) +X(DST_PEN) +X(DST_POL) +X(DST_WIDTH) +X(dynports) +X(E) +X(EDGE_EN) +X(EDGE_POL) +X(EN) +X(EN_DST) +X(EN_POLARITY) +X(EN_SRC) +X(enum_base_type) +X(enum_type) +X(equiv_merged) +X(equiv_region) +X(extract_order) +X(F) +X(force_downto) +X(force_upto) +X(fsm_encoding) +X(fsm_export) +X(FULL) +X(full_case) +X(G) +X(gclk) +X(gentb_clock) +X(gentb_constant) +X(gentb_skip) +X(H) +X(hdlname) +X(hierconn) +X(I) +X(INIT) +X(INIT_VALUE) +X(init) +X(initial_top) +X(interface_modport) +X(interfaces_replaced_in_module) +X(interface_type) +X(invertible_pin) +X(iopad_external_pin) +X(is_interface) +X(J) +X(K) +X(keep) +X(keep_hierarchy) +X(L) +X(lib_whitebox) +X(localparam) +X(logic_block) +X(lram) +X(LUT) +X(lut_keep) +X(M) +X(maximize) +X(mem2reg) +X(MEMID) +X(minimize) +X(module_not_derived) +X(N) +X(NAME) +X(noblackbox) +X(nolatches) +X(nomem2init) +X(nomem2reg) +X(nomeminit) +X(nosync) +X(nowrshmsk) +X(no_rw_check) +X(O) +X(OFFSET) +X(onehot) +X(P) +X(parallel_case) +X(parameter) +X(PORTID) +X(PRIORITY) +X(PRIORITY_MASK) +X(Q) +X(qwp_position) +X(R) +X(ram_block) +X(ram_style) +X(ramstyle) +X(RD_ADDR) +X(RD_ARST) +X(RD_ARST_VALUE) +X(RD_CE_OVER_SRST) +X(RD_CLK) +X(RD_CLK_ENABLE) +X(RD_CLK_POLARITY) +X(RD_COLLISION_X_MASK) +X(RD_DATA) +X(RD_EN) +X(RD_INIT_VALUE) +X(RD_PORTS) +X(RD_SRST) +X(RD_SRST_VALUE) +X(RD_TRANSPARENCY_MASK) +X(RD_TRANSPARENT) +X(RD_WIDE_CONTINUATION) +X(reg) +X(replaced_by_gclk) +X(reprocess_after) +X(rom_block) +X(rom_style) +X(romstyle) +X(S) +X(SET) +X(SET_POLARITY) +X(SIZE) +X(SRC) +X(src) +X(SRC_DST_PEN) +X(SRC_DST_POL) +X(SRC_EN) +X(SRC_PEN) +X(SRC_POL) +X(SRC_WIDTH) +X(SRST) +X(SRST_POLARITY) +X(SRST_VALUE) +X(sta_arrival) +X(STATE_BITS) +X(STATE_NUM) +X(STATE_NUM_LOG2) +X(STATE_RST) +X(STATE_TABLE) +X(smtlib2_module) +X(smtlib2_comb_expr) +X(submod) +X(syn_ramstyle) +X(syn_romstyle) +X(S_WIDTH) +X(T) +X(TABLE) +X(techmap_autopurge) +X(_TECHMAP_BITS_CONNMAP_) +X(_TECHMAP_CELLNAME_) +X(_TECHMAP_CELLTYPE_) +X(techmap_celltype) +X(_TECHMAP_FAIL_) +X(techmap_maccmap) +X(_TECHMAP_REPLACE_) +X(techmap_simplemap) +X(_techmap_special_) +X(techmap_wrap) +X(T_FALL_MAX) +X(T_FALL_MIN) +X(T_FALL_TYP) +X(T_LIMIT) +X(T_LIMIT2) +X(T_LIMIT2_MAX) +X(T_LIMIT2_MIN) +X(T_LIMIT2_TYP) +X(T_LIMIT_MAX) +X(T_LIMIT_MIN) +X(T_LIMIT_TYP) +X(to_delete) +X(top) +X(TRANS_NUM) +X(TRANSPARENCY_MASK) +X(TRANSPARENT) +X(TRANS_TABLE) +X(T_RISE_MAX) +X(T_RISE_MIN) +X(T_RISE_TYP) +X(TYPE) +X(U) +X(unique) +X(unused_bits) +X(V) +X(via_celltype) +X(wand) +X(whitebox) +X(WIDTH) +X(wildcard_port_conns) +X(wiretype) +X(wor) +X(WORDS) +X(WR_ADDR) +X(WR_CLK) +X(WR_CLK_ENABLE) +X(WR_CLK_POLARITY) +X(WR_DATA) +X(WR_EN) +X(WR_PORTS) +X(WR_PRIORITY_MASK) +X(WR_WIDE_CONTINUATION) +X(X) +X(Y) +X(Y_WIDTH) diff --git a/resources/netlist/resources/kernel/share/include/kernel/ff.h b/resources/netlist/resources/kernel/share/include/kernel/ff.h new file mode 100644 index 0000000..e684d3c --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/ff.h @@ -0,0 +1,224 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 Marcelina Kościelnicka + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef FF_H +#define FF_H + +#include "kernel/yosys.h" +#include "kernel/ffinit.h" + +YOSYS_NAMESPACE_BEGIN + +// Describes a flip-flop or a latch. +// +// If has_gclk, this is a formal verification FF with implicit global clock: +// Q is simply previous cycle's D. Additionally if is_anyinit is true, this is +// an $anyinit cell which always has an undefined initialization value. Note +// that $anyinit is not considered to be among the FF celltypes, so a pass has +// to explicitly opt-in to process $anyinit cells with FfData. +// +// Otherwise, the FF/latch can have any number of features selected by has_* +// attributes that determine Q's value (in order of decreasing priority): +// +// - on start, register is initialized to val_init +// - if has_sr is present: +// - sig_clr is per-bit async clear, and sets the corresponding bit to 0 +// if active +// - sig_set is per-bit async set, and sets the corresponding bit to 1 +// if active +// - if has_arst is present: +// - sig_arst is whole-reg async reset, and sets the whole register to val_arst +// - if has_aload is present: +// - sig_aload is whole-reg async load (aka latch gate enable), and sets the whole +// register to sig_ad +// - if has_clk is present, and we're currently on a clock edge: +// - if has_ce is present and ce_over_srst is true: +// - ignore clock edge (don't change value) unless sig_ce is active +// - if has_srst is present: +// - sig_srst is whole-reg sync reset and sets the register to val_srst +// - if has_ce is present and ce_over_srst is false: +// - ignore clock edge (don't change value) unless sig_ce is active +// - set whole reg to sig_d +// - if nothing of the above applies, the reg value remains unchanged +// +// Since the yosys FF cell library isn't fully generic, not all combinations +// of the features above can be supported: +// +// - only one of has_srst, has_arst, has_sr can be used +// - if has_clk is used together with has_aload, then has_srst, has_arst, +// has_sr cannot be used +// +// The valid feature combinations are thus: +// +// - has_clk + optional has_ce [dff/dffe] +// - has_clk + optional has_ce + has_arst [adff/adffe] +// - has_clk + optional has_ce + has_aload [aldff/aldffe] +// - has_clk + optional has_ce + has_sr [dffsr/dffsre] +// - has_clk + optional has_ce + has_srst [sdff/sdffe/sdffce] +// - has_aload [dlatch] +// - has_aload + has_arst [adlatch] +// - has_aload + has_sr [dlatchsr] +// - has_sr [sr] +// - has_arst [does not correspond to a native cell, represented as dlatch with const D input] +// - empty set [not a cell — will be emitted as a simple direct connection] + +struct FfData { + Module *module; + FfInitVals *initvals; + Cell *cell; + IdString name; + // The FF output. + SigSpec sig_q; + // The sync data input, present if has_clk or has_gclk. + SigSpec sig_d; + // The async data input, present if has_aload. + SigSpec sig_ad; + // The sync clock, present if has_clk. + SigSpec sig_clk; + // The clock enable, present if has_ce. + SigSpec sig_ce; + // The async load enable, present if has_aload. + SigSpec sig_aload; + // The async reset, preset if has_arst. + SigSpec sig_arst; + // The sync reset, preset if has_srst. + SigSpec sig_srst; + // The async clear (per-lane), present if has_sr. + SigSpec sig_clr; + // The async set (per-lane), present if has_sr. + SigSpec sig_set; + // True if this is a clocked (edge-sensitive) flip-flop. + bool has_clk; + // True if this is a $ff, exclusive with every other has_*. + bool has_gclk; + // True if this FF has a clock enable. Depends on has_clk. + bool has_ce; + // True if this FF has async load function — this includes D latches. + // If this and has_clk are both set, has_arst and has_sr cannot be set. + bool has_aload; + // True if this FF has sync set/reset. Depends on has_clk, exclusive + // with has_arst, has_sr, has_aload. + bool has_srst; + // True if this FF has async set/reset. Exclusive with has_srst, + // has_sr. If this and has_clk are both set, has_aload cannot be set. + bool has_arst; + // True if this FF has per-bit async set + clear. Exclusive with + // has_srst, has_arst. If this and has_clk are both set, has_aload + // cannot be set. + bool has_sr; + // If has_ce and has_srst are both set, determines their relative + // priorities: if true, inactive ce disables srst; if false, srst + // operates independent of ce. + bool ce_over_srst; + // True if this FF is a fine cell, false if it is a coarse cell. + // If true, width must be 1. + bool is_fine; + // True if this FF is an $anyinit cell. Depends on has_gclk. + bool is_anyinit; + // Polarities, corresponding to sig_*. True means active-high, false + // means active-low. + bool pol_clk; + bool pol_ce; + bool pol_aload; + bool pol_arst; + bool pol_srst; + bool pol_clr; + bool pol_set; + // The value loaded by sig_arst. + Const val_arst; + // The value loaded by sig_srst. + Const val_srst; + // The initial value at power-up. + Const val_init; + // The FF data width in bits. + int width; + dict attributes; + + FfData(Module *module = nullptr, FfInitVals *initvals = nullptr, IdString name = IdString()) : module(module), initvals(initvals), cell(nullptr), name(name) { + width = 0; + has_clk = false; + has_gclk = false; + has_ce = false; + has_aload = false; + has_srst = false; + has_arst = false; + has_sr = false; + ce_over_srst = false; + is_fine = false; + is_anyinit = false; + pol_clk = false; + pol_aload = false; + pol_ce = false; + pol_arst = false; + pol_srst = false; + pol_clr = false; + pol_set = false; + } + + FfData(FfInitVals *initvals, Cell *cell_); + + // Returns a FF identical to this one, but only keeping bit indices from the argument. + FfData slice(const std::vector &bits); + + void add_dummy_ce(); + void add_dummy_srst(); + void add_dummy_arst(); + void add_dummy_aload(); + void add_dummy_sr(); + void add_dummy_clk(); + + void arst_to_aload(); + void arst_to_sr(); + + void aload_to_sr(); + + // Given a FF with both has_ce and has_srst, sets ce_over_srst to the given value and + // fixes up control signals appropriately to preserve semantics. + void convert_ce_over_srst(bool val); + + void unmap_ce(); + void unmap_srst(); + + void unmap_ce_srst() { + unmap_ce(); + unmap_srst(); + } + + Cell *emit(); + + // Removes init attribute from the Q output, but keeps val_init unchanged. + // It will be automatically reattached on emit. Use this before changing sig_q. + void remove_init() { + if (initvals) + initvals->remove_init(sig_q); + } + + void remove(); + + // Flip the sense of the given bit slices of the FF: insert inverters on data + // inputs and output, flip the corresponding init/reset bits, swap clr/set + // inputs with proper priority fix. + void flip_bits(const pool &bits); + + void flip_rst_bits(const pool &bits); +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/ffinit.h b/resources/netlist/resources/kernel/share/include/kernel/ffinit.h new file mode 100644 index 0000000..9d33ac5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/ffinit.h @@ -0,0 +1,140 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 Marcelina Kościelnicka + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef FFINIT_H +#define FFINIT_H + +#include "kernel/yosys.h" +#include "kernel/sigtools.h" + +YOSYS_NAMESPACE_BEGIN + +struct FfInitVals +{ + const SigMap *sigmap; + dict> initbits; + + void set(const SigMap *sigmap_, RTLIL::Module *module) + { + sigmap = sigmap_; + initbits.clear(); + for (auto wire : module->wires()) + { + if (wire->attributes.count(ID::init) == 0) + continue; + + SigSpec wirebits = (*sigmap)(wire); + Const initval = wire->attributes.at(ID::init); + + for (int i = 0; i < GetSize(wirebits) && i < GetSize(initval); i++) + { + SigBit bit = wirebits[i]; + State val = initval[i]; + + if (val != State::S0 && val != State::S1 && bit.wire != nullptr) + continue; + + if (initbits.count(bit)) { + if (initbits.at(bit).first != val) + log_error("Conflicting init values for signal %s (%s = %s != %s).\n", + log_signal(bit), log_signal(SigBit(wire, i)), + log_signal(val), log_signal(initbits.at(bit).first)); + continue; + } + + initbits[bit] = std::make_pair(val,SigBit(wire,i)); + } + } + } + + RTLIL::State operator()(RTLIL::SigBit bit) const + { + auto it = initbits.find((*sigmap)(bit)); + if (it != initbits.end()) + return it->second.first; + else + return State::Sx; + } + + RTLIL::Const operator()(const RTLIL::SigSpec &sig) const + { + RTLIL::Const res; + for (auto bit : sig) + res.bits.push_back((*this)(bit)); + return res; + } + + void set_init(RTLIL::SigBit bit, RTLIL::State val) + { + SigBit mbit = (*sigmap)(bit); + SigBit abit = bit; + auto it = initbits.find(mbit); + if (it != initbits.end()) + abit = it->second.second; + else if (val == State::Sx) + return; + log_assert(abit.wire); + initbits[mbit] = std::make_pair(val,abit); + auto it2 = abit.wire->attributes.find(ID::init); + if (it2 != abit.wire->attributes.end()) { + it2->second[abit.offset] = val; + if (it2->second.is_fully_undef()) + abit.wire->attributes.erase(it2); + } else if (val != State::Sx) { + Const cval(State::Sx, GetSize(abit.wire)); + cval[abit.offset] = val; + abit.wire->attributes[ID::init] = cval; + } + } + + void set_init(const RTLIL::SigSpec &sig, RTLIL::Const val) + { + log_assert(GetSize(sig) == GetSize(val)); + for (int i = 0; i < GetSize(sig); i++) + set_init(sig[i], val[i]); + } + + void remove_init(RTLIL::SigBit bit) + { + set_init(bit, State::Sx); + } + + void remove_init(const RTLIL::SigSpec &sig) + { + for (auto bit : sig) + remove_init(bit); + } + + void clear() + { + initbits.clear(); + } + + FfInitVals (const SigMap *sigmap, RTLIL::Module *module) + { + set(sigmap, module); + } + + FfInitVals () {} +}; + + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/hashlib.h b/resources/netlist/resources/kernel/share/include/kernel/hashlib.h new file mode 100644 index 0000000..af28271 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/hashlib.h @@ -0,0 +1,1191 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. + +// ------------------------------------------------------- +// Written by Claire Xenia Wolf in 2014 +// ------------------------------------------------------- + +#ifndef HASHLIB_H +#define HASHLIB_H + +#include +#include +#include +#include + +namespace hashlib { + +const int hashtable_size_trigger = 2; +const int hashtable_size_factor = 3; + +// The XOR version of DJB2 +inline unsigned int mkhash(unsigned int a, unsigned int b) { + return ((a << 5) + a) ^ b; +} + +// traditionally 5381 is used as starting value for the djb2 hash +const unsigned int mkhash_init = 5381; + +// The ADD version of DJB2 +// (use this version for cache locality in b) +inline unsigned int mkhash_add(unsigned int a, unsigned int b) { + return ((a << 5) + a) + b; +} + +inline unsigned int mkhash_xorshift(unsigned int a) { + if (sizeof(a) == 4) { + a ^= a << 13; + a ^= a >> 17; + a ^= a << 5; + } else if (sizeof(a) == 8) { + a ^= a << 13; + a ^= a >> 7; + a ^= a << 17; + } else + throw std::runtime_error("mkhash_xorshift() only implemented for 32 bit and 64 bit ints"); + return a; +} + +template struct hash_ops { + static inline bool cmp(const T &a, const T &b) { + return a == b; + } + static inline unsigned int hash(const T &a) { + return a.hash(); + } +}; + +struct hash_int_ops { + template + static inline bool cmp(T a, T b) { + return a == b; + } +}; + +template<> struct hash_ops : hash_int_ops +{ + static inline unsigned int hash(bool a) { + return a ? 1 : 0; + } +}; +template<> struct hash_ops : hash_int_ops +{ + static inline unsigned int hash(int32_t a) { + return a; + } +}; +template<> struct hash_ops : hash_int_ops +{ + static inline unsigned int hash(int64_t a) { + return mkhash((unsigned int)(a), (unsigned int)(a >> 32)); + } +}; + +template<> struct hash_ops { + static inline bool cmp(const std::string &a, const std::string &b) { + return a == b; + } + static inline unsigned int hash(const std::string &a) { + unsigned int v = 0; + for (auto c : a) + v = mkhash(v, c); + return v; + } +}; + +template struct hash_ops> { + static inline bool cmp(std::pair a, std::pair b) { + return a == b; + } + static inline unsigned int hash(std::pair a) { + return mkhash(hash_ops

::hash(a.first), hash_ops::hash(a.second)); + } +}; + +template struct hash_ops> { + static inline bool cmp(std::tuple a, std::tuple b) { + return a == b; + } + template + static inline typename std::enable_if::type hash(std::tuple) { + return mkhash_init; + } + template + static inline typename std::enable_if::type hash(std::tuple a) { + typedef hash_ops>::type> element_ops_t; + return mkhash(hash(a), element_ops_t::hash(std::get(a))); + } +}; + +template struct hash_ops> { + static inline bool cmp(std::vector a, std::vector b) { + return a == b; + } + static inline unsigned int hash(std::vector a) { + unsigned int h = mkhash_init; + for (auto k : a) + h = mkhash(h, hash_ops::hash(k)); + return h; + } +}; + +struct hash_cstr_ops { + static inline bool cmp(const char *a, const char *b) { + for (int i = 0; a[i] || b[i]; i++) + if (a[i] != b[i]) + return false; + return true; + } + static inline unsigned int hash(const char *a) { + unsigned int hash = mkhash_init; + while (*a) + hash = mkhash(hash, *(a++)); + return hash; + } +}; + +struct hash_ptr_ops { + static inline bool cmp(const void *a, const void *b) { + return a == b; + } + static inline unsigned int hash(const void *a) { + return (uintptr_t)a; + } +}; + +struct hash_obj_ops { + static inline bool cmp(const void *a, const void *b) { + return a == b; + } + template + static inline unsigned int hash(const T *a) { + return a ? a->hash() : 0; + } +}; + +template +inline unsigned int mkhash(const T &v) { + return hash_ops().hash(v); +} + +inline int hashtable_size(int min_size) +{ + static std::vector zero_and_some_primes = { + 0, 23, 29, 37, 47, 59, 79, 101, 127, 163, 211, 269, 337, 431, 541, 677, + 853, 1069, 1361, 1709, 2137, 2677, 3347, 4201, 5261, 6577, 8231, 10289, + 12889, 16127, 20161, 25219, 31531, 39419, 49277, 61603, 77017, 96281, + 120371, 150473, 188107, 235159, 293957, 367453, 459317, 574157, 717697, + 897133, 1121423, 1401791, 1752239, 2190299, 2737937, 3422429, 4278037, + 5347553, 6684443, 8355563, 10444457, 13055587, 16319519, 20399411, + 25499291, 31874149, 39842687, 49803361, 62254207, 77817767, 97272239, + 121590311, 151987889, 189984863, 237481091, 296851369, 371064217 + }; + + for (auto p : zero_and_some_primes) + if (p >= min_size) return p; + + if (sizeof(int) == 4) + throw std::length_error("hash table exceeded maximum size.\nDesign is likely too large for yosys to handle, if possible try not to flatten the design."); + + for (auto p : zero_and_some_primes) + if (100129 * p > min_size) return 100129 * p; + + throw std::length_error("hash table exceeded maximum size."); +} + +template> class dict; +template> class idict; +template> class pool; +template> class mfp; + +template +class dict +{ + struct entry_t + { + std::pair udata; + int next; + + entry_t() { } + entry_t(const std::pair &udata, int next) : udata(udata), next(next) { } + entry_t(std::pair &&udata, int next) : udata(std::move(udata)), next(next) { } + bool operator<(const entry_t &other) const { return udata.first < other.udata.first; } + }; + + std::vector hashtable; + std::vector entries; + OPS ops; + +#ifdef NDEBUG + static inline void do_assert(bool) { } +#else + static inline void do_assert(bool cond) { + if (!cond) throw std::runtime_error("dict<> assert failed."); + } +#endif + + int do_hash(const K &key) const + { + unsigned int hash = 0; + if (!hashtable.empty()) + hash = ops.hash(key) % (unsigned int)(hashtable.size()); + return hash; + } + + void do_rehash() + { + hashtable.clear(); + hashtable.resize(hashtable_size(entries.capacity() * hashtable_size_factor), -1); + + for (int i = 0; i < int(entries.size()); i++) { + do_assert(-1 <= entries[i].next && entries[i].next < int(entries.size())); + int hash = do_hash(entries[i].udata.first); + entries[i].next = hashtable[hash]; + hashtable[hash] = i; + } + } + + int do_erase(int index, int hash) + { + do_assert(index < int(entries.size())); + if (hashtable.empty() || index < 0) + return 0; + + int k = hashtable[hash]; + do_assert(0 <= k && k < int(entries.size())); + + if (k == index) { + hashtable[hash] = entries[index].next; + } else { + while (entries[k].next != index) { + k = entries[k].next; + do_assert(0 <= k && k < int(entries.size())); + } + entries[k].next = entries[index].next; + } + + int back_idx = entries.size()-1; + + if (index != back_idx) + { + int back_hash = do_hash(entries[back_idx].udata.first); + + k = hashtable[back_hash]; + do_assert(0 <= k && k < int(entries.size())); + + if (k == back_idx) { + hashtable[back_hash] = index; + } else { + while (entries[k].next != back_idx) { + k = entries[k].next; + do_assert(0 <= k && k < int(entries.size())); + } + entries[k].next = index; + } + + entries[index] = std::move(entries[back_idx]); + } + + entries.pop_back(); + + if (entries.empty()) + hashtable.clear(); + + return 1; + } + + int do_lookup(const K &key, int &hash) const + { + if (hashtable.empty()) + return -1; + + if (entries.size() * hashtable_size_trigger > hashtable.size()) { + ((dict*)this)->do_rehash(); + hash = do_hash(key); + } + + int index = hashtable[hash]; + + while (index >= 0 && !ops.cmp(entries[index].udata.first, key)) { + index = entries[index].next; + do_assert(-1 <= index && index < int(entries.size())); + } + + return index; + } + + int do_insert(const K &key, int &hash) + { + if (hashtable.empty()) { + entries.emplace_back(std::pair(key, T()), -1); + do_rehash(); + hash = do_hash(key); + } else { + entries.emplace_back(std::pair(key, T()), hashtable[hash]); + hashtable[hash] = entries.size() - 1; + } + return entries.size() - 1; + } + + int do_insert(const std::pair &value, int &hash) + { + if (hashtable.empty()) { + entries.emplace_back(value, -1); + do_rehash(); + hash = do_hash(value.first); + } else { + entries.emplace_back(value, hashtable[hash]); + hashtable[hash] = entries.size() - 1; + } + return entries.size() - 1; + } + + int do_insert(std::pair &&rvalue, int &hash) + { + if (hashtable.empty()) { + auto key = rvalue.first; + entries.emplace_back(std::forward>(rvalue), -1); + do_rehash(); + hash = do_hash(key); + } else { + entries.emplace_back(std::forward>(rvalue), hashtable[hash]); + hashtable[hash] = entries.size() - 1; + } + return entries.size() - 1; + } + +public: + class const_iterator : public std::iterator> + { + friend class dict; + protected: + const dict *ptr; + int index; + const_iterator(const dict *ptr, int index) : ptr(ptr), index(index) { } + public: + const_iterator() { } + const_iterator operator++() { index--; return *this; } + const_iterator operator+=(int amt) { index -= amt; return *this; } + bool operator<(const const_iterator &other) const { return index > other.index; } + bool operator==(const const_iterator &other) const { return index == other.index; } + bool operator!=(const const_iterator &other) const { return index != other.index; } + const std::pair &operator*() const { return ptr->entries[index].udata; } + const std::pair *operator->() const { return &ptr->entries[index].udata; } + }; + + class iterator : public std::iterator> + { + friend class dict; + protected: + dict *ptr; + int index; + iterator(dict *ptr, int index) : ptr(ptr), index(index) { } + public: + iterator() { } + iterator operator++() { index--; return *this; } + iterator operator+=(int amt) { index -= amt; return *this; } + bool operator<(const iterator &other) const { return index > other.index; } + bool operator==(const iterator &other) const { return index == other.index; } + bool operator!=(const iterator &other) const { return index != other.index; } + std::pair &operator*() { return ptr->entries[index].udata; } + std::pair *operator->() { return &ptr->entries[index].udata; } + const std::pair &operator*() const { return ptr->entries[index].udata; } + const std::pair *operator->() const { return &ptr->entries[index].udata; } + operator const_iterator() const { return const_iterator(ptr, index); } + }; + + dict() + { + } + + dict(const dict &other) + { + entries = other.entries; + do_rehash(); + } + + dict(dict &&other) + { + swap(other); + } + + dict &operator=(const dict &other) { + entries = other.entries; + do_rehash(); + return *this; + } + + dict &operator=(dict &&other) { + clear(); + swap(other); + return *this; + } + + dict(const std::initializer_list> &list) + { + for (auto &it : list) + insert(it); + } + + template + dict(InputIterator first, InputIterator last) + { + insert(first, last); + } + + template + void insert(InputIterator first, InputIterator last) + { + for (; first != last; ++first) + insert(*first); + } + + std::pair insert(const K &key) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(key, hash); + return std::pair(iterator(this, i), true); + } + + std::pair insert(const std::pair &value) + { + int hash = do_hash(value.first); + int i = do_lookup(value.first, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(value, hash); + return std::pair(iterator(this, i), true); + } + + std::pair insert(std::pair &&rvalue) + { + int hash = do_hash(rvalue.first); + int i = do_lookup(rvalue.first, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(std::forward>(rvalue), hash); + return std::pair(iterator(this, i), true); + } + + std::pair emplace(K const &key, T const &value) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(std::make_pair(key, value), hash); + return std::pair(iterator(this, i), true); + } + + std::pair emplace(K const &key, T &&rvalue) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(std::make_pair(key, std::forward(rvalue)), hash); + return std::pair(iterator(this, i), true); + } + + std::pair emplace(K &&rkey, T const &value) + { + int hash = do_hash(rkey); + int i = do_lookup(rkey, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(std::make_pair(std::forward(rkey), value), hash); + return std::pair(iterator(this, i), true); + } + + std::pair emplace(K &&rkey, T &&rvalue) + { + int hash = do_hash(rkey); + int i = do_lookup(rkey, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(std::make_pair(std::forward(rkey), std::forward(rvalue)), hash); + return std::pair(iterator(this, i), true); + } + + int erase(const K &key) + { + int hash = do_hash(key); + int index = do_lookup(key, hash); + return do_erase(index, hash); + } + + iterator erase(iterator it) + { + int hash = do_hash(it->first); + do_erase(it.index, hash); + return ++it; + } + + int count(const K &key) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + return i < 0 ? 0 : 1; + } + + int count(const K &key, const_iterator it) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + return i < 0 || i > it.index ? 0 : 1; + } + + iterator find(const K &key) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + return end(); + return iterator(this, i); + } + + const_iterator find(const K &key) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + return end(); + return const_iterator(this, i); + } + + T& at(const K &key) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + throw std::out_of_range("dict::at()"); + return entries[i].udata.second; + } + + const T& at(const K &key) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + throw std::out_of_range("dict::at()"); + return entries[i].udata.second; + } + + const T& at(const K &key, const T &defval) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + return defval; + return entries[i].udata.second; + } + + T& operator[](const K &key) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + i = do_insert(std::pair(key, T()), hash); + return entries[i].udata.second; + } + + template> + void sort(Compare comp = Compare()) + { + std::sort(entries.begin(), entries.end(), [comp](const entry_t &a, const entry_t &b){ return comp(b.udata.first, a.udata.first); }); + do_rehash(); + } + + void swap(dict &other) + { + hashtable.swap(other.hashtable); + entries.swap(other.entries); + } + + bool operator==(const dict &other) const { + if (size() != other.size()) + return false; + for (auto &it : entries) { + auto oit = other.find(it.udata.first); + if (oit == other.end() || !(oit->second == it.udata.second)) + return false; + } + return true; + } + + bool operator!=(const dict &other) const { + return !operator==(other); + } + + unsigned int hash() const { + unsigned int h = mkhash_init; + for (auto &entry : entries) { + h ^= hash_ops::hash(entry.udata.first); + h ^= hash_ops::hash(entry.udata.second); + } + return h; + } + + void reserve(size_t n) { entries.reserve(n); } + size_t size() const { return entries.size(); } + bool empty() const { return entries.empty(); } + void clear() { hashtable.clear(); entries.clear(); } + + iterator begin() { return iterator(this, int(entries.size())-1); } + iterator element(int n) { return iterator(this, int(entries.size())-1-n); } + iterator end() { return iterator(nullptr, -1); } + + const_iterator begin() const { return const_iterator(this, int(entries.size())-1); } + const_iterator element(int n) const { return const_iterator(this, int(entries.size())-1-n); } + const_iterator end() const { return const_iterator(nullptr, -1); } +}; + +template +class pool +{ + template friend class idict; + +protected: + struct entry_t + { + K udata; + int next; + + entry_t() { } + entry_t(const K &udata, int next) : udata(udata), next(next) { } + entry_t(K &&udata, int next) : udata(std::move(udata)), next(next) { } + }; + + std::vector hashtable; + std::vector entries; + OPS ops; + +#ifdef NDEBUG + static inline void do_assert(bool) { } +#else + static inline void do_assert(bool cond) { + if (!cond) throw std::runtime_error("pool<> assert failed."); + } +#endif + + int do_hash(const K &key) const + { + unsigned int hash = 0; + if (!hashtable.empty()) + hash = ops.hash(key) % (unsigned int)(hashtable.size()); + return hash; + } + + void do_rehash() + { + hashtable.clear(); + hashtable.resize(hashtable_size(entries.capacity() * hashtable_size_factor), -1); + + for (int i = 0; i < int(entries.size()); i++) { + do_assert(-1 <= entries[i].next && entries[i].next < int(entries.size())); + int hash = do_hash(entries[i].udata); + entries[i].next = hashtable[hash]; + hashtable[hash] = i; + } + } + + int do_erase(int index, int hash) + { + do_assert(index < int(entries.size())); + if (hashtable.empty() || index < 0) + return 0; + + int k = hashtable[hash]; + if (k == index) { + hashtable[hash] = entries[index].next; + } else { + while (entries[k].next != index) { + k = entries[k].next; + do_assert(0 <= k && k < int(entries.size())); + } + entries[k].next = entries[index].next; + } + + int back_idx = entries.size()-1; + + if (index != back_idx) + { + int back_hash = do_hash(entries[back_idx].udata); + + k = hashtable[back_hash]; + if (k == back_idx) { + hashtable[back_hash] = index; + } else { + while (entries[k].next != back_idx) { + k = entries[k].next; + do_assert(0 <= k && k < int(entries.size())); + } + entries[k].next = index; + } + + entries[index] = std::move(entries[back_idx]); + } + + entries.pop_back(); + + if (entries.empty()) + hashtable.clear(); + + return 1; + } + + int do_lookup(const K &key, int &hash) const + { + if (hashtable.empty()) + return -1; + + if (entries.size() * hashtable_size_trigger > hashtable.size()) { + ((pool*)this)->do_rehash(); + hash = do_hash(key); + } + + int index = hashtable[hash]; + + while (index >= 0 && !ops.cmp(entries[index].udata, key)) { + index = entries[index].next; + do_assert(-1 <= index && index < int(entries.size())); + } + + return index; + } + + int do_insert(const K &value, int &hash) + { + if (hashtable.empty()) { + entries.emplace_back(value, -1); + do_rehash(); + hash = do_hash(value); + } else { + entries.emplace_back(value, hashtable[hash]); + hashtable[hash] = entries.size() - 1; + } + return entries.size() - 1; + } + + int do_insert(K &&rvalue, int &hash) + { + if (hashtable.empty()) { + entries.emplace_back(std::forward(rvalue), -1); + do_rehash(); + hash = do_hash(rvalue); + } else { + entries.emplace_back(std::forward(rvalue), hashtable[hash]); + hashtable[hash] = entries.size() - 1; + } + return entries.size() - 1; + } + +public: + class const_iterator : public std::iterator + { + friend class pool; + protected: + const pool *ptr; + int index; + const_iterator(const pool *ptr, int index) : ptr(ptr), index(index) { } + public: + const_iterator() { } + const_iterator operator++() { index--; return *this; } + bool operator==(const const_iterator &other) const { return index == other.index; } + bool operator!=(const const_iterator &other) const { return index != other.index; } + const K &operator*() const { return ptr->entries[index].udata; } + const K *operator->() const { return &ptr->entries[index].udata; } + }; + + class iterator : public std::iterator + { + friend class pool; + protected: + pool *ptr; + int index; + iterator(pool *ptr, int index) : ptr(ptr), index(index) { } + public: + iterator() { } + iterator operator++() { index--; return *this; } + bool operator==(const iterator &other) const { return index == other.index; } + bool operator!=(const iterator &other) const { return index != other.index; } + K &operator*() { return ptr->entries[index].udata; } + K *operator->() { return &ptr->entries[index].udata; } + const K &operator*() const { return ptr->entries[index].udata; } + const K *operator->() const { return &ptr->entries[index].udata; } + operator const_iterator() const { return const_iterator(ptr, index); } + }; + + pool() + { + } + + pool(const pool &other) + { + entries = other.entries; + do_rehash(); + } + + pool(pool &&other) + { + swap(other); + } + + pool &operator=(const pool &other) { + entries = other.entries; + do_rehash(); + return *this; + } + + pool &operator=(pool &&other) { + clear(); + swap(other); + return *this; + } + + pool(const std::initializer_list &list) + { + for (auto &it : list) + insert(it); + } + + template + pool(InputIterator first, InputIterator last) + { + insert(first, last); + } + + template + void insert(InputIterator first, InputIterator last) + { + for (; first != last; ++first) + insert(*first); + } + + std::pair insert(const K &value) + { + int hash = do_hash(value); + int i = do_lookup(value, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(value, hash); + return std::pair(iterator(this, i), true); + } + + std::pair insert(K &&rvalue) + { + int hash = do_hash(rvalue); + int i = do_lookup(rvalue, hash); + if (i >= 0) + return std::pair(iterator(this, i), false); + i = do_insert(std::forward(rvalue), hash); + return std::pair(iterator(this, i), true); + } + + template + std::pair emplace(Args&&... args) + { + return insert(K(std::forward(args)...)); + } + + int erase(const K &key) + { + int hash = do_hash(key); + int index = do_lookup(key, hash); + return do_erase(index, hash); + } + + iterator erase(iterator it) + { + int hash = do_hash(*it); + do_erase(it.index, hash); + return ++it; + } + + int count(const K &key) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + return i < 0 ? 0 : 1; + } + + int count(const K &key, const_iterator it) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + return i < 0 || i > it.index ? 0 : 1; + } + + iterator find(const K &key) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + return end(); + return iterator(this, i); + } + + const_iterator find(const K &key) const + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + if (i < 0) + return end(); + return const_iterator(this, i); + } + + bool operator[](const K &key) + { + int hash = do_hash(key); + int i = do_lookup(key, hash); + return i >= 0; + } + + template> + void sort(Compare comp = Compare()) + { + std::sort(entries.begin(), entries.end(), [comp](const entry_t &a, const entry_t &b){ return comp(b.udata, a.udata); }); + do_rehash(); + } + + K pop() + { + iterator it = begin(); + K ret = *it; + erase(it); + return ret; + } + + void swap(pool &other) + { + hashtable.swap(other.hashtable); + entries.swap(other.entries); + } + + bool operator==(const pool &other) const { + if (size() != other.size()) + return false; + for (auto &it : entries) + if (!other.count(it.udata)) + return false; + return true; + } + + bool operator!=(const pool &other) const { + return !operator==(other); + } + + bool hash() const { + unsigned int hashval = mkhash_init; + for (auto &it : entries) + hashval ^= ops.hash(it.udata); + return hashval; + } + + void reserve(size_t n) { entries.reserve(n); } + size_t size() const { return entries.size(); } + bool empty() const { return entries.empty(); } + void clear() { hashtable.clear(); entries.clear(); } + + iterator begin() { return iterator(this, int(entries.size())-1); } + iterator element(int n) { return iterator(this, int(entries.size())-1-n); } + iterator end() { return iterator(nullptr, -1); } + + const_iterator begin() const { return const_iterator(this, int(entries.size())-1); } + const_iterator element(int n) const { return const_iterator(this, int(entries.size())-1-n); } + const_iterator end() const { return const_iterator(nullptr, -1); } +}; + +template +class idict +{ + pool database; + +public: + class const_iterator : public std::iterator + { + friend class idict; + protected: + const idict &container; + int index; + const_iterator(const idict &container, int index) : container(container), index(index) { } + public: + const_iterator() { } + const_iterator operator++() { index++; return *this; } + bool operator==(const const_iterator &other) const { return index == other.index; } + bool operator!=(const const_iterator &other) const { return index != other.index; } + const K &operator*() const { return container[index]; } + const K *operator->() const { return &container[index]; } + }; + + int operator()(const K &key) + { + int hash = database.do_hash(key); + int i = database.do_lookup(key, hash); + if (i < 0) + i = database.do_insert(key, hash); + return i + offset; + } + + int at(const K &key) const + { + int hash = database.do_hash(key); + int i = database.do_lookup(key, hash); + if (i < 0) + throw std::out_of_range("idict::at()"); + return i + offset; + } + + int at(const K &key, int defval) const + { + int hash = database.do_hash(key); + int i = database.do_lookup(key, hash); + if (i < 0) + return defval; + return i + offset; + } + + int count(const K &key) const + { + int hash = database.do_hash(key); + int i = database.do_lookup(key, hash); + return i < 0 ? 0 : 1; + } + + void expect(const K &key, int i) + { + int j = (*this)(key); + if (i != j) + throw std::out_of_range("idict::expect()"); + } + + const K &operator[](int index) const + { + return database.entries.at(index - offset).udata; + } + + void swap(idict &other) + { + database.swap(other.database); + } + + void reserve(size_t n) { database.reserve(n); } + size_t size() const { return database.size(); } + bool empty() const { return database.empty(); } + void clear() { database.clear(); } + + const_iterator begin() const { return const_iterator(*this, offset); } + const_iterator element(int n) const { return const_iterator(*this, n); } + const_iterator end() const { return const_iterator(*this, offset + size()); } +}; + +template +class mfp +{ + mutable idict database; + mutable std::vector parents; + +public: + typedef typename idict::const_iterator const_iterator; + + int operator()(const K &key) const + { + int i = database(key); + parents.resize(database.size(), -1); + return i; + } + + const K &operator[](int index) const + { + return database[index]; + } + + int ifind(int i) const + { + int p = i, k = i; + + while (parents[p] != -1) + p = parents[p]; + + while (k != p) { + int next_k = parents[k]; + parents[k] = p; + k = next_k; + } + + return p; + } + + void imerge(int i, int j) + { + i = ifind(i); + j = ifind(j); + + if (i != j) + parents[i] = j; + } + + void ipromote(int i) + { + int k = i; + + while (k != -1) { + int next_k = parents[k]; + parents[k] = i; + k = next_k; + } + + parents[i] = -1; + } + + int lookup(const K &a) const + { + return ifind((*this)(a)); + } + + const K &find(const K &a) const + { + int i = database.at(a, -1); + if (i < 0) + return a; + return (*this)[ifind(i)]; + } + + void merge(const K &a, const K &b) + { + imerge((*this)(a), (*this)(b)); + } + + void promote(const K &a) + { + int i = database.at(a, -1); + if (i >= 0) + ipromote(i); + } + + void swap(mfp &other) + { + database.swap(other.database); + parents.swap(other.parents); + } + + void reserve(size_t n) { database.reserve(n); } + size_t size() const { return database.size(); } + bool empty() const { return database.empty(); } + void clear() { database.clear(); parents.clear(); } + + const_iterator begin() const { return database.begin(); } + const_iterator element(int n) const { return database.element(n); } + const_iterator end() const { return database.end(); } +}; + +} /* namespace hashlib */ + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/log.h b/resources/netlist/resources/kernel/share/include/kernel/log.h new file mode 100644 index 0000000..3bc9fd9 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/log.h @@ -0,0 +1,467 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "kernel/yosys.h" + +#ifndef LOG_H +#define LOG_H + +#include + +// In the libstdc++ headers that are provided by GCC 4.8, std::regex is not +// working correctly. In order to make features using regular expressions +// work, a replacement regex library is used. Just checking for GCC version +// is not enough though, because at least on RHEL7/CentOS7 even when compiling +// with Clang instead of GCC, the GCC 4.8 headers are still used for std::regex. +// We have to check the version of the libstdc++ headers specifically, not the +// compiler version. GCC headers of libstdc++ before version 3.4 define +// __GLIBCPP__, later versions define __GLIBCXX__. GCC 7 and newer additionaly +// define _GLIBCXX_RELEASE with a version number. +// Include limits std C++ header, so we get the version macros defined: +#if defined(__cplusplus) +# include +#endif +// Check if libstdc++ is from GCC +#if defined(__GLIBCPP__) || defined(__GLIBCXX__) +// Check if version could be 4.8 or lower (this also matches for some 4.9 and +// 5.0 releases). See: +// https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html#abi.versioning +# if !defined(_GLIBCXX_RELEASE) && (defined(__GLIBCPP__) || __GLIBCXX__ <= 20150623) +# define YS_HAS_BAD_STD_REGEX +# endif +#endif +#if defined(YS_HAS_BAD_STD_REGEX) + #include + #define YS_REGEX_TYPE boost::xpressive::sregex + #define YS_REGEX_MATCH_TYPE boost::xpressive::smatch + #define YS_REGEX_NS boost::xpressive + #define YS_REGEX_COMPILE(param) boost::xpressive::sregex::compile(param, \ + boost::xpressive::regex_constants::nosubs | \ + boost::xpressive::regex_constants::optimize) + #define YS_REGEX_COMPILE_WITH_SUBS(param) boost::xpressive::sregex::compile(param, \ + boost::xpressive::regex_constants::optimize) +# else + #include + #define YS_REGEX_TYPE std::regex + #define YS_REGEX_MATCH_TYPE std::smatch + #define YS_REGEX_NS std + #define YS_REGEX_COMPILE(param) std::regex(param, \ + std::regex_constants::nosubs | \ + std::regex_constants::optimize | \ + std::regex_constants::egrep) + #define YS_REGEX_COMPILE_WITH_SUBS(param) std::regex(param, \ + std::regex_constants::optimize | \ + std::regex_constants::egrep) +#endif + +#if defined(_WIN32) +# include +#else +# include +# include +# if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) +# include +# endif +#endif + +#if defined(_MSC_VER) +// At least this is not in MSVC++ 2013. +# define __PRETTY_FUNCTION__ __FUNCTION__ +#endif + +// from libs/sha1/sha1.h +class SHA1; + +YOSYS_NAMESPACE_BEGIN + +#define S__LINE__sub2(x) #x +#define S__LINE__sub1(x) S__LINE__sub2(x) +#define S__LINE__ S__LINE__sub1(__LINE__) + +// YS_DEBUGTRAP is a macro that is functionally equivalent to a breakpoint +// if the platform provides such functionality, and does nothing otherwise. +// If no debugger is attached, it starts a just-in-time debugger if available, +// and crashes the process otherwise. +#if defined(_WIN32) +# define YS_DEBUGTRAP __debugbreak() +#else +# ifndef __has_builtin +// __has_builtin is a GCC/Clang extension; on a different compiler (or old enough GCC/Clang) +// that does not have it, using __has_builtin(...) is a syntax error. +# define __has_builtin(x) 0 +# endif +# if __has_builtin(__builtin_debugtrap) +# define YS_DEBUGTRAP __builtin_debugtrap() +# elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) +# define YS_DEBUGTRAP raise(SIGTRAP) +# else +# define YS_DEBUGTRAP do {} while(0) +# endif +#endif + +// YS_DEBUGTRAP_IF_DEBUGGING is a macro that is functionally equivalent to a breakpoint +// if a debugger is attached, and does nothing otherwise. +#if defined(_WIN32) +# define YS_DEBUGTRAP_IF_DEBUGGING do { if (IsDebuggerPresent()) DebugBreak(); } while(0) +# elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) +// There is no reliable (or portable) *nix equivalent of IsDebuggerPresent(). However, +// debuggers will stop when SIGTRAP is raised, even if the action is set to ignore. +# define YS_DEBUGTRAP_IF_DEBUGGING do { \ + auto old = signal(SIGTRAP, SIG_IGN); raise(SIGTRAP); signal(SIGTRAP, old); \ + } while(0) +#else +# define YS_DEBUGTRAP_IF_DEBUGGING do {} while(0) +#endif + +struct log_cmd_error_exception { }; + +extern std::vector log_files; +extern std::vector log_streams; +extern std::map> log_hdump; +extern std::vector log_warn_regexes, log_nowarn_regexes, log_werror_regexes; +extern std::set log_warnings, log_experimentals, log_experimentals_ignored; +extern int log_warnings_count; +extern int log_warnings_count_noexpect; +extern bool log_expect_no_warnings; +extern bool log_hdump_all; +extern FILE *log_errfile; +extern SHA1 *log_hasher; + +extern bool log_time; +extern bool log_error_stderr; +extern bool log_cmd_error_throw; +extern bool log_quiet_warnings; +extern int log_verbose_level; +extern string log_last_error; +extern void (*log_error_atexit)(); + +extern int log_make_debug; +extern int log_force_debug; +extern int log_debug_suppressed; + +void logv(const char *format, va_list ap); +void logv_header(RTLIL::Design *design, const char *format, va_list ap); +void logv_warning(const char *format, va_list ap); +void logv_warning_noprefix(const char *format, va_list ap); +[[noreturn]] void logv_error(const char *format, va_list ap); + +void log(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); +void log_header(RTLIL::Design *design, const char *format, ...) YS_ATTRIBUTE(format(printf, 2, 3)); +void log_warning(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); +void log_experimental(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); + +// Log with filename to report a problem in a source file. +void log_file_warning(const std::string &filename, int lineno, const char *format, ...) YS_ATTRIBUTE(format(printf, 3, 4)); +void log_file_info(const std::string &filename, int lineno, const char *format, ...) YS_ATTRIBUTE(format(printf, 3, 4)); + +void log_warning_noprefix(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); +[[noreturn]] void log_error(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); +[[noreturn]] void log_file_error(const string &filename, int lineno, const char *format, ...) YS_ATTRIBUTE(format(printf, 3, 4)); +[[noreturn]] void log_cmd_error(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); + +#ifndef NDEBUG +static inline bool ys_debug(int n = 0) { if (log_force_debug) return true; log_debug_suppressed += n; return false; } +#else +static inline bool ys_debug(int = 0) { return false; } +#endif +# define log_debug(...) do { if (ys_debug(1)) log(__VA_ARGS__); } while (0) + +static inline void log_suppressed() { + if (log_debug_suppressed && !log_make_debug) { + log("\n", log_debug_suppressed); + log_debug_suppressed = 0; + } +} + +struct LogMakeDebugHdl { + bool status = false; + LogMakeDebugHdl(bool start_on = false) { + if (start_on) + on(); + } + ~LogMakeDebugHdl() { + off(); + } + void on() { + if (status) return; + status=true; + log_make_debug++; + } + void off_silent() { + if (!status) return; + status=false; + log_make_debug--; + } + void off() { + off_silent(); + } +}; + +void log_spacer(); +void log_push(); +void log_pop(); + +void log_backtrace(const char *prefix, int levels); +void log_reset_stack(); +void log_flush(); + +struct LogExpectedItem +{ + LogExpectedItem(const YS_REGEX_TYPE &pat, int expected) : + pattern(pat), expected_count(expected), current_count(0) {} + LogExpectedItem() : expected_count(0), current_count(0) {} + + YS_REGEX_TYPE pattern; + int expected_count; + int current_count; +}; + +extern dict log_expect_log, log_expect_warning, log_expect_error; +void log_check_expected(); + +const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true); +const char *log_const(const RTLIL::Const &value, bool autoint = true); +const char *log_id(const RTLIL::IdString &id); + +template static inline const char *log_id(T *obj, const char *nullstr = nullptr) { + if (nullstr && obj == nullptr) + return nullstr; + return log_id(obj->name); +} + +void log_module(RTLIL::Module *module, std::string indent = ""); +void log_cell(RTLIL::Cell *cell, std::string indent = ""); +void log_wire(RTLIL::Wire *wire, std::string indent = ""); + +#ifndef NDEBUG +static inline void log_assert_worker(bool cond, const char *expr, const char *file, int line) { + if (!cond) log_error("Assert `%s' failed in %s:%d.\n", expr, file, line); +} +# define log_assert(_assert_expr_) YOSYS_NAMESPACE_PREFIX log_assert_worker(_assert_expr_, #_assert_expr_, __FILE__, __LINE__) +#else +# define log_assert(_assert_expr_) do { if (0) { (void)(_assert_expr_); } } while(0) +#endif + +#define log_abort() YOSYS_NAMESPACE_PREFIX log_error("Abort in %s:%d.\n", __FILE__, __LINE__) +#define log_ping() YOSYS_NAMESPACE_PREFIX log("-- %s:%d %s --\n", __FILE__, __LINE__, __PRETTY_FUNCTION__) + + +// --------------------------------------------------- +// This is the magic behind the code coverage counters +// --------------------------------------------------- + +#if defined(YOSYS_ENABLE_COVER) && (defined(__linux__) || defined(__FreeBSD__)) + +#define cover(_id) do { \ + static CoverData __d __attribute__((section("yosys_cover_list"), aligned(1), used)) = { __FILE__, __FUNCTION__, _id, __LINE__, 0 }; \ + __d.counter++; \ +} while (0) + +struct CoverData { + const char *file, *func, *id; + int line, counter; +} YS_ATTRIBUTE(packed); + +// this two symbols are created by the linker for the "yosys_cover_list" ELF section +extern "C" struct CoverData __start_yosys_cover_list[]; +extern "C" struct CoverData __stop_yosys_cover_list[]; + +extern dict> extra_coverage_data; + +void cover_extra(std::string parent, std::string id, bool increment = true); +dict> get_coverage_data(); + +#define cover_list(_id, ...) do { cover(_id); \ + std::string r = cover_list_worker(_id, __VA_ARGS__); \ + log_assert(r.empty()); \ +} while (0) + +static inline std::string cover_list_worker(std::string, std::string last) { + return last; +} + +template +std::string cover_list_worker(std::string prefix, std::string first, T... rest) { + std::string selected = cover_list_worker(prefix, rest...); + cover_extra(prefix, prefix + "." + first, first == selected); + return first == selected ? "" : selected; +} + +#else +# define cover(...) do { } while (0) +# define cover_list(...) do { } while (0) +#endif + + +// ------------------------------------------------------------ +// everything below this line are utilities for troubleshooting +// ------------------------------------------------------------ + +// simple timer for performance measurements +// toggle the '#if 1' to get a baseline for the performance penalty added by the measurement +struct PerformanceTimer +{ +#if 1 + int64_t total_ns; + + PerformanceTimer() { + total_ns = 0; + } + + static int64_t query() { +# ifdef _WIN32 + return 0; +# elif defined(RUSAGE_SELF) + struct rusage rusage; + int64_t t = 0; + for (int who : {RUSAGE_SELF, RUSAGE_CHILDREN}) { + if (getrusage(who, &rusage) == -1) { + log_cmd_error("getrusage failed!\n"); + log_abort(); + } + t += 1000000000ULL * (int64_t) rusage.ru_utime.tv_sec + (int64_t) rusage.ru_utime.tv_usec * 1000ULL; + t += 1000000000ULL * (int64_t) rusage.ru_stime.tv_sec + (int64_t) rusage.ru_stime.tv_usec * 1000ULL; + } + return t; +# else +# error "Don't know how to measure per-process CPU time. Need alternative method (times()/clocks()/gettimeofday()?)." +# endif + } + + void reset() { + total_ns = 0; + } + + void begin() { + total_ns -= query(); + } + + void end() { + total_ns += query(); + } + + float sec() const { + return total_ns * 1e-9f; + } +#else + static int64_t query() { return 0; } + void reset() { } + void begin() { } + void end() { } + float sec() const { return 0; } +#endif +}; + +// simple API for quickly dumping values when debugging + +static inline void log_dump_val_worker(short v) { log("%d", v); } +static inline void log_dump_val_worker(unsigned short v) { log("%u", v); } +static inline void log_dump_val_worker(int v) { log("%d", v); } +static inline void log_dump_val_worker(unsigned int v) { log("%u", v); } +static inline void log_dump_val_worker(long int v) { log("%ld", v); } +static inline void log_dump_val_worker(unsigned long int v) { log("%lu", v); } +#ifndef _WIN32 +static inline void log_dump_val_worker(long long int v) { log("%lld", v); } +static inline void log_dump_val_worker(unsigned long long int v) { log("%lld", v); } +#endif +static inline void log_dump_val_worker(char c) { log(c >= 32 && c < 127 ? "'%c'" : "'\\x%02x'", c); } +static inline void log_dump_val_worker(unsigned char c) { log(c >= 32 && c < 127 ? "'%c'" : "'\\x%02x'", c); } +static inline void log_dump_val_worker(bool v) { log("%s", v ? "true" : "false"); } +static inline void log_dump_val_worker(double v) { log("%f", v); } +static inline void log_dump_val_worker(char *v) { log("%s", v); } +static inline void log_dump_val_worker(const char *v) { log("%s", v); } +static inline void log_dump_val_worker(std::string v) { log("%s", v.c_str()); } +static inline void log_dump_val_worker(PerformanceTimer p) { log("%f seconds", p.sec()); } +static inline void log_dump_args_worker(const char *p) { log_assert(*p == 0); } +void log_dump_val_worker(RTLIL::IdString v); +void log_dump_val_worker(RTLIL::SigSpec v); +void log_dump_val_worker(RTLIL::State v); + +template +static inline void log_dump_val_worker(dict &v) { + log("{"); + bool first = true; + for (auto &it : v) { + log(first ? " " : ", "); + log_dump_val_worker(it.first); + log(": "); + log_dump_val_worker(it.second); + first = false; + } + log(" }"); +} + +template +static inline void log_dump_val_worker(pool &v) { + log("{"); + bool first = true; + for (auto &it : v) { + log(first ? " " : ", "); + log_dump_val_worker(it); + first = false; + } + log(" }"); +} + +template +static inline void log_dump_val_worker(T *ptr) { log("%p", ptr); } + +template +void log_dump_args_worker(const char *p, T first, Args ... args) +{ + int next_p_state = 0; + const char *next_p = p; + while (*next_p && (next_p_state != 0 || *next_p != ',')) { + if (*next_p == '"') + do { + next_p++; + while (*next_p == '\\' && *(next_p + 1)) + next_p += 2; + } while (*next_p && *next_p != '"'); + if (*next_p == '\'') { + next_p++; + if (*next_p == '\\') + next_p++; + if (*next_p) + next_p++; + } + if (*next_p == '(' || *next_p == '[' || *next_p == '{') + next_p_state++; + if ((*next_p == ')' || *next_p == ']' || *next_p == '}') && next_p_state > 0) + next_p_state--; + next_p++; + } + log("\n\t%.*s => ", int(next_p - p), p); + if (*next_p == ',') + next_p++; + while (*next_p == ' ' || *next_p == '\t' || *next_p == '\r' || *next_p == '\n') + next_p++; + log_dump_val_worker(first); + log_dump_args_worker(next_p, args ...); +} + +#define log_dump(...) do { \ + log("DEBUG DUMP IN %s AT %s:%d:", __PRETTY_FUNCTION__, __FILE__, __LINE__); \ + log_dump_args_worker(#__VA_ARGS__, __VA_ARGS__); \ + log("\n"); \ +} while (0) + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/macc.h b/resources/netlist/resources/kernel/share/include/kernel/macc.h new file mode 100644 index 0000000..e4e1ebf --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/macc.h @@ -0,0 +1,240 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef MACC_H +#define MACC_H + +#include "kernel/yosys.h" + +YOSYS_NAMESPACE_BEGIN + +struct Macc +{ + struct port_t { + RTLIL::SigSpec in_a, in_b; + bool is_signed, do_subtract; + }; + + std::vector ports; + RTLIL::SigSpec bit_ports; + + void optimize(int width) + { + std::vector new_ports; + RTLIL::SigSpec new_bit_ports; + RTLIL::Const off(0, width); + + for (auto &port : ports) + { + if (GetSize(port.in_a) == 0 && GetSize(port.in_b) == 0) + continue; + + if (GetSize(port.in_a) < GetSize(port.in_b)) + std::swap(port.in_a, port.in_b); + + if (GetSize(port.in_a) == 1 && GetSize(port.in_b) == 0 && !port.is_signed && !port.do_subtract) { + bit_ports.append(port.in_a); + continue; + } + + if (port.in_a.is_fully_const() && port.in_b.is_fully_const()) { + RTLIL::Const v = port.in_a.as_const(); + if (GetSize(port.in_b)) + v = const_mul(v, port.in_b.as_const(), port.is_signed, port.is_signed, width); + if (port.do_subtract) + off = const_sub(off, v, port.is_signed, port.is_signed, width); + else + off = const_add(off, v, port.is_signed, port.is_signed, width); + continue; + } + + if (port.is_signed) { + while (GetSize(port.in_a) > 1 && port.in_a[GetSize(port.in_a)-1] == port.in_a[GetSize(port.in_a)-2]) + port.in_a.remove(GetSize(port.in_a)-1); + while (GetSize(port.in_b) > 1 && port.in_b[GetSize(port.in_b)-1] == port.in_b[GetSize(port.in_b)-2]) + port.in_b.remove(GetSize(port.in_b)-1); + } else { + while (GetSize(port.in_a) > 1 && port.in_a[GetSize(port.in_a)-1] == State::S0) + port.in_a.remove(GetSize(port.in_a)-1); + while (GetSize(port.in_b) > 1 && port.in_b[GetSize(port.in_b)-1] == State::S0) + port.in_b.remove(GetSize(port.in_b)-1); + } + + new_ports.push_back(port); + } + + for (auto &bit : bit_ports) + if (bit == State::S1) + off = const_add(off, RTLIL::Const(1, width), false, false, width); + else if (bit != State::S0) + new_bit_ports.append(bit); + + if (off.as_bool()) { + port_t port; + port.in_a = off; + port.is_signed = false; + port.do_subtract = false; + new_ports.push_back(port); + } + + new_ports.swap(ports); + bit_ports = new_bit_ports; + } + + void from_cell(RTLIL::Cell *cell) + { + RTLIL::SigSpec port_a = cell->getPort(ID::A); + + ports.clear(); + bit_ports = cell->getPort(ID::B); + + std::vector config_bits = cell->getParam(ID::CONFIG).bits; + int config_cursor = 0; + + int config_width = cell->getParam(ID::CONFIG_WIDTH).as_int(); + log_assert(GetSize(config_bits) >= config_width); + + int num_bits = 0; + if (config_bits[config_cursor++] == State::S1) num_bits |= 1; + if (config_bits[config_cursor++] == State::S1) num_bits |= 2; + if (config_bits[config_cursor++] == State::S1) num_bits |= 4; + if (config_bits[config_cursor++] == State::S1) num_bits |= 8; + + int port_a_cursor = 0; + while (port_a_cursor < GetSize(port_a)) + { + log_assert(config_cursor + 2 + 2*num_bits <= config_width); + + port_t this_port; + this_port.is_signed = config_bits[config_cursor++] == State::S1; + this_port.do_subtract = config_bits[config_cursor++] == State::S1; + + int size_a = 0; + for (int i = 0; i < num_bits; i++) + if (config_bits[config_cursor++] == State::S1) + size_a |= 1 << i; + + this_port.in_a = port_a.extract(port_a_cursor, size_a); + port_a_cursor += size_a; + + int size_b = 0; + for (int i = 0; i < num_bits; i++) + if (config_bits[config_cursor++] == State::S1) + size_b |= 1 << i; + + this_port.in_b = port_a.extract(port_a_cursor, size_b); + port_a_cursor += size_b; + + if (size_a || size_b) + ports.push_back(this_port); + } + + log_assert(config_cursor == config_width); + log_assert(port_a_cursor == GetSize(port_a)); + } + + void to_cell(RTLIL::Cell *cell) const + { + RTLIL::SigSpec port_a; + std::vector config_bits; + int max_size = 0, num_bits = 0; + + for (auto &port : ports) { + max_size = max(max_size, GetSize(port.in_a)); + max_size = max(max_size, GetSize(port.in_b)); + } + + while (max_size) + num_bits++, max_size /= 2; + + log_assert(num_bits < 16); + config_bits.push_back(num_bits & 1 ? State::S1 : State::S0); + config_bits.push_back(num_bits & 2 ? State::S1 : State::S0); + config_bits.push_back(num_bits & 4 ? State::S1 : State::S0); + config_bits.push_back(num_bits & 8 ? State::S1 : State::S0); + + for (auto &port : ports) + { + if (GetSize(port.in_a) == 0) + continue; + + config_bits.push_back(port.is_signed ? State::S1 : State::S0); + config_bits.push_back(port.do_subtract ? State::S1 : State::S0); + + int size_a = GetSize(port.in_a); + for (int i = 0; i < num_bits; i++) + config_bits.push_back(size_a & (1 << i) ? State::S1 : State::S0); + + int size_b = GetSize(port.in_b); + for (int i = 0; i < num_bits; i++) + config_bits.push_back(size_b & (1 << i) ? State::S1 : State::S0); + + port_a.append(port.in_a); + port_a.append(port.in_b); + } + + cell->setPort(ID::A, port_a); + cell->setPort(ID::B, bit_ports); + cell->setParam(ID::CONFIG, config_bits); + cell->setParam(ID::CONFIG_WIDTH, GetSize(config_bits)); + cell->setParam(ID::A_WIDTH, GetSize(port_a)); + cell->setParam(ID::B_WIDTH, GetSize(bit_ports)); + } + + bool eval(RTLIL::Const &result) const + { + for (auto &bit : result.bits) + bit = State::S0; + + for (auto &port : ports) + { + if (!port.in_a.is_fully_const() || !port.in_b.is_fully_const()) + return false; + + RTLIL::Const summand; + if (GetSize(port.in_b) == 0) + summand = const_pos(port.in_a.as_const(), port.in_b.as_const(), port.is_signed, port.is_signed, GetSize(result)); + else + summand = const_mul(port.in_a.as_const(), port.in_b.as_const(), port.is_signed, port.is_signed, GetSize(result)); + + if (port.do_subtract) + result = const_sub(result, summand, port.is_signed, port.is_signed, GetSize(result)); + else + result = const_add(result, summand, port.is_signed, port.is_signed, GetSize(result)); + } + + for (auto bit : bit_ports) { + if (bit.wire) + return false; + result = const_add(result, bit.data, false, false, GetSize(result)); + } + + return true; + } + + Macc(RTLIL::Cell *cell = nullptr) + { + if (cell != nullptr) + from_cell(cell); + } +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/mem.h b/resources/netlist/resources/kernel/share/include/kernel/mem.h new file mode 100644 index 0000000..8c48427 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/mem.h @@ -0,0 +1,229 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2020 Marcelina Kościelnicka + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef MEM_H +#define MEM_H + +#include "kernel/yosys.h" +#include "kernel/ffinit.h" + +YOSYS_NAMESPACE_BEGIN + +struct MemRd : RTLIL::AttrObject { + bool removed; + Cell *cell; + int wide_log2; + bool clk_enable, clk_polarity, ce_over_srst; + Const arst_value, srst_value, init_value; + // One bit for every write port, true iff simultanous read on this + // port and write on the other port will bypass the written data + // to this port's output (default behavior is to read old value). + // Can only be set for write ports that have the same clock domain. + std::vector transparency_mask; + // One bit for every write port, true iff simultanous read on this + // port and write on the other port will return an all-X (don't care) + // value. Mutually exclusive with transparency_mask. + // Can only be set for write ports that have the same clock domain. + // For optimization purposes, this will also be set if we can + // determine that the two ports can never be active simultanously + // (making the above vacuously true). + std::vector collision_x_mask; + SigSpec clk, en, arst, srst, addr, data; + + MemRd() : removed(false), cell(nullptr), wide_log2(0), clk_enable(false), clk_polarity(true), ce_over_srst(false), clk(State::Sx), en(State::S1), arst(State::S0), srst(State::S0) {} + + // Returns the address of given subword index accessed by this port. + SigSpec sub_addr(int sub) { + SigSpec res = addr; + for (int i = 0; i < wide_log2; i++) + res[i] = State(sub >> i & 1); + return res; + } +}; + +struct MemWr : RTLIL::AttrObject { + bool removed; + Cell *cell; + int wide_log2; + bool clk_enable, clk_polarity; + std::vector priority_mask; + SigSpec clk, en, addr, data; + + MemWr() : removed(false), cell(nullptr) {} + + // Returns the address of given subword index accessed by this port. + SigSpec sub_addr(int sub) { + SigSpec res = addr; + for (int i = 0; i < wide_log2; i++) + res[i] = State(sub >> i & 1); + return res; + } + + std::pair> compress_en(); + SigSpec decompress_en(const std::vector &swizzle, SigSpec sig); +}; + +struct MemInit : RTLIL::AttrObject { + bool removed; + Cell *cell; + Const addr; + Const data; + Const en; + MemInit() : removed(false), cell(nullptr) {} +}; + +struct Mem : RTLIL::AttrObject { + Module *module; + IdString memid; + bool packed; + RTLIL::Memory *mem; + Cell *cell; + int width, start_offset, size; + std::vector inits; + std::vector rd_ports; + std::vector wr_ports; + + // Removes this memory from the module. The data in helper structures + // is unaffected except for the cell/mem fields. + void remove(); + + // Commits all changes in helper structures into the module — ports and + // inits marked as removed are actually removed, new ports/inits create + // new cells, modified port/inits are commited into their existing + // cells. Note that this reindexes the ports and inits array (actually + // removing the ports/inits marked as removed). + void emit(); + + // Marks all inits as removed. + void clear_inits(); + + // Coalesces inits: whenever two inits have overlapping or touching + // address ranges, they are combined into one, with the higher-priority + // one's data overwriting the other. Running this results in + // an inits list equivalent to the original, in which all entries + // cover disjoint (and non-touching) address ranges, and all enable + // masks are all-1. + void coalesce_inits(); + + // Checks consistency of this memory and all its ports/inits, using + // log_assert. + void check(); + + // Gathers all initialization data into a single big const covering + // the whole memory. For all non-initialized bits, Sx will be returned. + Const get_init_data() const; + + // Constructs and returns the helper structures for all memories + // in a module. + static std::vector get_all_memories(Module *module); + + // Constructs and returns the helper structures for all selected + // memories in a module. + static std::vector get_selected_memories(Module *module); + + // Converts a synchronous read port into an asynchronous one by + // extracting the data (or, in some rare cases, address) register + // into a separate cell, together with any soft-transparency + // logic necessary to preserve its semantics. Returns the created + // register cell, if any. Note that in some rare cases this function + // may succeed and perform a conversion without creating a new + // register — a nullptr result doesn't imply nothing was done. + Cell *extract_rdff(int idx, FfInitVals *initvals); + + // Splits all wide ports in this memory into equivalent narrow ones. + // This function performs no modifications at all to the actual + // netlist unless and until emit() is called. + void narrow(); + + // If write port idx2 currently has priority over write port idx1, + // inserts extra logic on idx1's enable signal to disable writes + // when idx2 is writing to the same address, then removes the priority + // from the priority mask. If there is a memory port that is + // transparent with idx1, but not with idx2, that port is converted + // to use soft transparency logic. + void emulate_priority(int idx1, int idx2, FfInitVals *initvals); + + // Creates soft-transparency logic on read port ridx, bypassing the + // data from write port widx. Should only be called when ridx is + // transparent wrt widx in the first place. Once we're done, the + // transparency_mask bit will be cleared, and the collision_x_mask + // bit will be set instead (since whatever value is read will be + // replaced by the soft transparency logic). + void emulate_transparency(int widx, int ridx, FfInitVals *initvals); + + // Prepares for merging write port idx2 into idx1 (where idx1 < idx2). + // Specifically, takes care of priority masks: any priority relations + // that idx2 had are replicated onto idx1, unless they conflict with + // priorities already present on idx1, in which case emulate_priority + // is called. Likewise, ensures transparency and undefined collision + // masks of all read ports have the same values for both ports, + // calling emulate_transparency if necessary. + void prepare_wr_merge(int idx1, int idx2, FfInitVals *initvals); + + // Prepares for merging read port idx2 into idx1. + // Specifically, makes sure the transparency and undefined collision + // masks of both ports are equal, by changing undefined behavior + // of one port to the other's defined behavior, or by calling + // emulate_transparency if necessary. + void prepare_rd_merge(int idx1, int idx2, FfInitVals *initvals); + + // Prepares the memory for widening a port to a given width. This + // involves ensuring that start_offset and size are aligned to the + // target width. + void widen_prep(int wide_log2); + + // Widens a write port up to a given width. The newly port is + // equivalent to the original, made by replicating enable/data bits + // and masking enable bits with decoders on the low part of the + // original address. + void widen_wr_port(int idx, int wide_log2); + + // Emulates a sync read port's enable functionality in soft logic, + // changing the actual read port's enable to be always-on. + void emulate_rden(int idx, FfInitVals *initvals); + + // Emulates a sync read port's initial/reset value functionality in + // soft logic, removing it from the actual read port. + void emulate_reset(int idx, bool emu_init, bool emu_arst, bool emu_srst, FfInitVals *initvals); + + // Given a read port with ce_over_srst set, converts it to a port + // with ce_over_srst unset without changing its behavior by adding + // emulation logic. + void emulate_rd_ce_over_srst(int idx); + + // Given a read port with ce_over_srst unset, converts it to a port + // with ce_over_srst set without changing its behavior by adding + // emulation logic. + void emulate_rd_srst_over_ce(int idx); + + // Returns true iff emulate_read_first makes sense to call. + bool emulate_read_first_ok(); + + // Emulates all read-first read-write port relationships in terms of + // all-transparent ports, by delaying all write ports by one cycle. + // This can only be used when all read ports and all write ports are + // in the same clock domain. + void emulate_read_first(FfInitVals *initvals); + + Mem(Module *module, IdString memid, int width, int start_offset, int size) : module(module), memid(memid), packed(false), mem(nullptr), cell(nullptr), width(width), start_offset(start_offset), size(size) {} +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/modtools.h b/resources/netlist/resources/kernel/share/include/kernel/modtools.h new file mode 100644 index 0000000..4cbaf78 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/modtools.h @@ -0,0 +1,579 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef MODTOOLS_H +#define MODTOOLS_H + +#include "kernel/yosys.h" +#include "kernel/sigtools.h" +#include "kernel/celltypes.h" + +YOSYS_NAMESPACE_BEGIN + +struct ModIndex : public RTLIL::Monitor +{ + struct PortInfo { + RTLIL::Cell* cell; + RTLIL::IdString port; + int offset; + + PortInfo() : cell(), port(), offset() { } + PortInfo(RTLIL::Cell* _c, RTLIL::IdString _p, int _o) : cell(_c), port(_p), offset(_o) { } + + bool operator<(const PortInfo &other) const { + if (cell != other.cell) + return cell < other.cell; + if (offset != other.offset) + return offset < other.offset; + return port < other.port; + } + + bool operator==(const PortInfo &other) const { + return cell == other.cell && port == other.port && offset == other.offset; + } + + unsigned int hash() const { + return mkhash_add(mkhash(cell->name.hash(), port.hash()), offset); + } + }; + + struct SigBitInfo + { + bool is_input, is_output; + pool ports; + + SigBitInfo() : is_input(false), is_output(false) { } + + bool operator==(const SigBitInfo &other) const { + return is_input == other.is_input && is_output == other.is_output && ports == other.ports; + } + + void merge(const SigBitInfo &other) + { + is_input = is_input || other.is_input; + is_output = is_output || other.is_output; + ports.insert(other.ports.begin(), other.ports.end()); + } + }; + + SigMap sigmap; + RTLIL::Module *module; + std::map database; + int auto_reload_counter; + bool auto_reload_module; + + void port_add(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig) + { + for (int i = 0; i < GetSize(sig); i++) { + RTLIL::SigBit bit = sigmap(sig[i]); + if (bit.wire) + database[bit].ports.insert(PortInfo(cell, port, i)); + } + } + + void port_del(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &sig) + { + for (int i = 0; i < GetSize(sig); i++) { + RTLIL::SigBit bit = sigmap(sig[i]); + if (bit.wire) + database[bit].ports.erase(PortInfo(cell, port, i)); + } + } + + const SigBitInfo &info(RTLIL::SigBit bit) + { + return database[sigmap(bit)]; + } + + void reload_module(bool reset_sigmap = true) + { + if (reset_sigmap) { + sigmap.clear(); + sigmap.set(module); + } + + database.clear(); + for (auto wire : module->wires()) + if (wire->port_input || wire->port_output) + for (int i = 0; i < GetSize(wire); i++) { + RTLIL::SigBit bit = sigmap(RTLIL::SigBit(wire, i)); + if (bit.wire && wire->port_input) + database[bit].is_input = true; + if (bit.wire && wire->port_output) + database[bit].is_output = true; + } + for (auto cell : module->cells()) + for (auto &conn : cell->connections()) + port_add(cell, conn.first, conn.second); + + if (auto_reload_module) { + if (++auto_reload_counter > 2) + log_warning("Auto-reload in ModIndex -- possible performance bug!\n"); + auto_reload_module = false; + } + } + + void check() + { +#ifndef NDEBUG + if (auto_reload_module) + return; + + for (auto it : database) + log_assert(it.first == sigmap(it.first)); + + auto database_bak = std::move(database); + reload_module(false); + + if (!(database == database_bak)) + { + for (auto &it : database_bak) + if (!database.count(it.first)) + log("ModuleIndex::check(): Only in database_bak, not database: %s\n", log_signal(it.first)); + + for (auto &it : database) + if (!database_bak.count(it.first)) + log("ModuleIndex::check(): Only in database, not database_bak: %s\n", log_signal(it.first)); + else if (!(it.second == database_bak.at(it.first))) + log("ModuleIndex::check(): Different content for database[%s].\n", log_signal(it.first)); + + log_assert(database == database_bak); + } +#endif + } + + void notify_connect(RTLIL::Cell *cell, const RTLIL::IdString &port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) override + { + log_assert(module == cell->module); + + if (auto_reload_module) + return; + + port_del(cell, port, old_sig); + port_add(cell, port, sig); + } + + void notify_connect(RTLIL::Module *mod, const RTLIL::SigSig &sigsig) override + { + log_assert(module == mod); + + if (auto_reload_module) + return; + + for (int i = 0; i < GetSize(sigsig.first); i++) + { + RTLIL::SigBit lhs = sigmap(sigsig.first[i]); + RTLIL::SigBit rhs = sigmap(sigsig.second[i]); + bool has_lhs = database.count(lhs) != 0; + bool has_rhs = database.count(rhs) != 0; + + if (!has_lhs && !has_rhs) { + sigmap.add(lhs, rhs); + } else + if (!has_rhs) { + SigBitInfo new_info = database.at(lhs); + database.erase(lhs); + sigmap.add(lhs, rhs); + lhs = sigmap(lhs); + if (lhs.wire) + database[lhs] = new_info; + } else + if (!has_lhs) { + SigBitInfo new_info = database.at(rhs); + database.erase(rhs); + sigmap.add(lhs, rhs); + rhs = sigmap(rhs); + if (rhs.wire) + database[rhs] = new_info; + } else { + SigBitInfo new_info = database.at(lhs); + new_info.merge(database.at(rhs)); + database.erase(lhs); + database.erase(rhs); + sigmap.add(lhs, rhs); + rhs = sigmap(rhs); + if (rhs.wire) + database[rhs] = new_info; + } + } + } + + void notify_connect(RTLIL::Module *mod, const std::vector&) override + { + log_assert(module == mod); + auto_reload_module = true; + } + + void notify_blackout(RTLIL::Module *mod) override + { + log_assert(module == mod); + auto_reload_module = true; + } + + ModIndex(RTLIL::Module *_m) : sigmap(_m), module(_m) + { + auto_reload_counter = 0; + auto_reload_module = true; + module->monitors.insert(this); + } + + ~ModIndex() + { + module->monitors.erase(this); + } + + SigBitInfo *query(RTLIL::SigBit bit) + { + if (auto_reload_module) + reload_module(); + + auto it = database.find(sigmap(bit)); + if (it == database.end()) + return nullptr; + else + return &it->second; + } + + bool query_is_input(RTLIL::SigBit bit) + { + const SigBitInfo *info = query(bit); + if (info == nullptr) + return false; + return info->is_input; + } + + bool query_is_output(RTLIL::SigBit bit) + { + const SigBitInfo *info = query(bit); + if (info == nullptr) + return false; + return info->is_output; + } + + pool &query_ports(RTLIL::SigBit bit) + { + static pool empty_result_set; + SigBitInfo *info = query(bit); + if (info == nullptr) + return empty_result_set; + return info->ports; + } + + void dump_db() + { + log("--- ModIndex Dump ---\n"); + + if (auto_reload_module) { + log("AUTO-RELOAD\n"); + reload_module(); + } + + for (auto &it : database) { + log("BIT %s:\n", log_signal(it.first)); + if (it.second.is_input) + log(" PRIMARY INPUT\n"); + if (it.second.is_output) + log(" PRIMARY OUTPUT\n"); + for (auto &port : it.second.ports) + log(" PORT: %s.%s[%d] (%s)\n", log_id(port.cell), + log_id(port.port), port.offset, log_id(port.cell->type)); + } + } +}; + +struct ModWalker +{ + struct PortBit + { + RTLIL::Cell *cell; + RTLIL::IdString port; + int offset; + + bool operator<(const PortBit &other) const { + if (cell != other.cell) + return cell < other.cell; + if (port != other.port) + return port < other.port; + return offset < other.offset; + } + + bool operator==(const PortBit &other) const { + return cell == other.cell && port == other.port && offset == other.offset; + } + + unsigned int hash() const { + return mkhash_add(mkhash(cell->name.hash(), port.hash()), offset); + } + }; + + RTLIL::Design *design; + RTLIL::Module *module; + + CellTypes ct; + SigMap sigmap; + + dict> signal_drivers; + dict> signal_consumers; + pool signal_inputs, signal_outputs; + + dict> cell_outputs, cell_inputs; + + void add_wire(RTLIL::Wire *wire) + { + if (wire->port_input) { + std::vector bits = sigmap(wire); + for (auto bit : bits) + if (bit.wire != NULL) + signal_inputs.insert(bit); + } + + if (wire->port_output) { + std::vector bits = sigmap(wire); + for (auto bit : bits) + if (bit.wire != NULL) + signal_outputs.insert(bit); + } + } + + void add_cell_port(RTLIL::Cell *cell, RTLIL::IdString port, std::vector bits, bool is_output, bool is_input) + { + for (int i = 0; i < int(bits.size()); i++) + if (bits[i].wire != NULL) { + PortBit pbit = { cell, port, i }; + if (is_output) { + signal_drivers[bits[i]].insert(pbit); + cell_outputs[cell].insert(bits[i]); + } + if (is_input) { + signal_consumers[bits[i]].insert(pbit); + cell_inputs[cell].insert(bits[i]); + } + } + } + + void add_cell(RTLIL::Cell *cell) + { + if (ct.cell_known(cell->type)) { + for (auto &conn : cell->connections()) + add_cell_port(cell, conn.first, sigmap(conn.second), + ct.cell_output(cell->type, conn.first), + ct.cell_input(cell->type, conn.first)); + } else { + for (auto &conn : cell->connections()) + add_cell_port(cell, conn.first, sigmap(conn.second), true, true); + } + } + + ModWalker(RTLIL::Design *design, RTLIL::Module *module = nullptr) : design(design), module(NULL) + { + ct.setup(design); + if (module) + setup(module); + } + + void setup(RTLIL::Module *module, CellTypes *filter_ct = NULL) + { + this->module = module; + + sigmap.set(module); + + signal_drivers.clear(); + signal_consumers.clear(); + signal_inputs.clear(); + signal_outputs.clear(); + cell_inputs.clear(); + cell_outputs.clear(); + + for (auto &it : module->wires_) + add_wire(it.second); + for (auto &it : module->cells_) + if (filter_ct == NULL || filter_ct->cell_known(it.second->type)) + add_cell(it.second); + } + + // get_* methods -- single RTLIL::SigBit + + template + inline bool get_drivers(pool &result, RTLIL::SigBit bit) const + { + bool found = false; + if (signal_drivers.count(bit)) { + const pool &r = signal_drivers.at(bit); + result.insert(r.begin(), r.end()); + found = true; + } + return found; + } + + template + inline bool get_consumers(pool &result, RTLIL::SigBit bit) const + { + bool found = false; + if (signal_consumers.count(bit)) { + const pool &r = signal_consumers.at(bit); + result.insert(r.begin(), r.end()); + found = true; + } + return found; + } + + template + inline bool get_inputs(pool &result, RTLIL::SigBit bit) const + { + bool found = false; + if (signal_inputs.count(bit)) + result.insert(bit), found = true; + return found; + } + + template + inline bool get_outputs(pool &result, RTLIL::SigBit bit) const + { + bool found = false; + if (signal_outputs.count(bit)) + result.insert(bit), found = true; + return found; + } + + // get_* methods -- container of RTLIL::SigBit's (always by reference) + + template + inline bool get_drivers(pool &result, const T &bits) const + { + bool found = false; + for (RTLIL::SigBit bit : bits) + if (signal_drivers.count(bit)) { + const pool &r = signal_drivers.at(bit); + result.insert(r.begin(), r.end()); + found = true; + } + return found; + } + + template + inline bool get_consumers(pool &result, const T &bits) const + { + bool found = false; + for (RTLIL::SigBit bit : bits) + if (signal_consumers.count(bit)) { + const pool &r = signal_consumers.at(bit); + result.insert(r.begin(), r.end()); + found = true; + } + return found; + } + + template + inline bool get_inputs(pool &result, const T &bits) const + { + bool found = false; + for (RTLIL::SigBit bit : bits) + if (signal_inputs.count(bit)) + result.insert(bit), found = true; + return found; + } + + template + inline bool get_outputs(pool &result, const T &bits) const + { + bool found = false; + for (RTLIL::SigBit bit : bits) + if (signal_outputs.count(bit)) + result.insert(bit), found = true; + return found; + } + + // get_* methods -- call by RTLIL::SigSpec (always by value) + + bool get_drivers(pool &result, RTLIL::SigSpec signal) const + { + std::vector bits = sigmap(signal); + return get_drivers(result, bits); + } + + bool get_consumers(pool &result, RTLIL::SigSpec signal) const + { + std::vector bits = sigmap(signal); + return get_consumers(result, bits); + } + + bool get_inputs(pool &result, RTLIL::SigSpec signal) const + { + std::vector bits = sigmap(signal); + return get_inputs(result, bits); + } + + bool get_outputs(pool &result, RTLIL::SigSpec signal) const + { + std::vector bits = sigmap(signal); + return get_outputs(result, bits); + } + + // has_* methods -- call by reference + + template + inline bool has_drivers(const T &sig) const { + pool result; + return get_drivers(result, sig); + } + + template + inline bool has_consumers(const T &sig) const { + pool result; + return get_consumers(result, sig); + } + + template + inline bool has_inputs(const T &sig) const { + pool result; + return get_inputs(result, sig); + } + + template + inline bool has_outputs(const T &sig) const { + pool result; + return get_outputs(result, sig); + } + + // has_* methods -- call by value + + inline bool has_drivers(RTLIL::SigSpec sig) const { + pool result; + return get_drivers(result, sig); + } + + inline bool has_consumers(RTLIL::SigSpec sig) const { + pool result; + return get_consumers(result, sig); + } + + inline bool has_inputs(RTLIL::SigSpec sig) const { + pool result; + return get_inputs(result, sig); + } + + inline bool has_outputs(RTLIL::SigSpec sig) const { + pool result; + return get_outputs(result, sig); + } +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/qcsat.h b/resources/netlist/resources/kernel/share/include/kernel/qcsat.h new file mode 100644 index 0000000..e4d3c3c --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/qcsat.h @@ -0,0 +1,76 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2021 Marcelina Kościelnicka + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef QCSAT_H +#define QCSAT_H + +#include "kernel/satgen.h" +#include "kernel/modtools.h" + +YOSYS_NAMESPACE_BEGIN + +// This is a helper class meant for easy construction of quick SAT queries +// to a combinatorial input cone of some set of signals, meant for SAT-based +// optimizations. Various knobs are provided to set just how much of the +// cone should be included in the model — since this class is meant for +// optimization, it should not be a correctness problem when some cells are +// skipped and the solver spuriously returns SAT with a solution that +// cannot exist in reality due to skipped constraints (ie. only UNSAT results +// from this class should be considered binding). +struct QuickConeSat { + ModWalker &modwalker; + ezSatPtr ez; + SatGen satgen; + + // The effort level knobs. + + // The maximum "complexity level" of cells that will be imported. + // - 1: bitwise operations, muxes, equality comparisons, lut, sop, fa + // - 2: addition, subtraction, greater/less than comparisons, lcu + // - 3: shifts + // - 4: multiplication, division, power + int max_cell_complexity = 2; + // The maximum number of cells to import, or 0 for no limit. + int max_cell_count = 0; + // If non-0, skip importing cells with more than this number of output bits. + int max_cell_outs = 0; + + // Internal state. + pool imported_cells; + pool imported_onehot; + pool bits_queue; + + QuickConeSat(ModWalker &modwalker) : modwalker(modwalker), ez(), satgen(ez.get(), &modwalker.sigmap) {} + + // Imports a signal into the SAT solver, queues its input cone to be + // imported in the next prepare() call. + std::vector importSig(SigSpec sig); + int importSigBit(SigBit bit); + + // Imports the input cones of all previously importSig'd signals into + // the SAT solver. + void prepare(); + + // Returns the "complexity level" of a given cell. + static int cell_complexity(RTLIL::Cell *cell); +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/register.h b/resources/netlist/resources/kernel/share/include/kernel/register.h new file mode 100644 index 0000000..15750af --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/register.h @@ -0,0 +1,138 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "kernel/yosys.h" + +#ifndef REGISTER_H +#define REGISTER_H + +YOSYS_NAMESPACE_BEGIN + +struct Pass +{ + std::string pass_name, short_help; + Pass(std::string name, std::string short_help = "** document me **"); + virtual ~Pass(); + + virtual void help(); + virtual void clear_flags(); + virtual void execute(std::vector args, RTLIL::Design *design) = 0; + + int call_counter; + int64_t runtime_ns; + bool experimental_flag = false; + + void experimental() { + experimental_flag = true; + } + + struct pre_post_exec_state_t { + Pass *parent_pass; + int64_t begin_ns; + }; + + pre_post_exec_state_t pre_execute(); + void post_execute(pre_post_exec_state_t state); + + void cmd_log_args(const std::vector &args); + void cmd_error(const std::vector &args, size_t argidx, std::string msg); + void extra_args(std::vector args, size_t argidx, RTLIL::Design *design, bool select = true); + + static void call(RTLIL::Design *design, std::string command); + static void call(RTLIL::Design *design, std::vector args); + + static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command); + static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector args); + + static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command); + static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector args); + + Pass *next_queued_pass; + virtual void run_register(); + static void init_register(); + static void done_register(); + + virtual void on_register(); + virtual void on_shutdown(); +}; + +struct ScriptPass : Pass +{ + bool block_active, help_mode; + RTLIL::Design *active_design; + std::string active_run_from, active_run_to; + + ScriptPass(std::string name, std::string short_help = "** document me **") : Pass(name, short_help) { } + + virtual void script() = 0; + + bool check_label(std::string label, std::string info = std::string()); + void run(std::string command, std::string info = std::string()); + void run_nocheck(std::string command, std::string info = std::string()); + void run_script(RTLIL::Design *design, std::string run_from = std::string(), std::string run_to = std::string()); + void help_script(); +}; + +struct Frontend : Pass +{ + // for reading of here documents + static FILE *current_script_file; + static std::string last_here_document; + + std::string frontend_name; + Frontend(std::string name, std::string short_help = "** document me **"); + void run_register() override; + ~Frontend() override; + void execute(std::vector args, RTLIL::Design *design) override final; + virtual void execute(std::istream *&f, std::string filename, std::vector args, RTLIL::Design *design) = 0; + + static std::vector next_args; + void extra_args(std::istream *&f, std::string &filename, std::vector args, size_t argidx, bool bin_input = false); + + static void frontend_call(RTLIL::Design *design, std::istream *f, std::string filename, std::string command); + static void frontend_call(RTLIL::Design *design, std::istream *f, std::string filename, std::vector args); +}; + +struct Backend : Pass +{ + std::string backend_name; + Backend(std::string name, std::string short_help = "** document me **"); + void run_register() override; + ~Backend() override; + void execute(std::vector args, RTLIL::Design *design) override final; + virtual void execute(std::ostream *&f, std::string filename, std::vector args, RTLIL::Design *design) = 0; + + void extra_args(std::ostream *&f, std::string &filename, std::vector args, size_t argidx, bool bin_output = false); + + static void backend_call(RTLIL::Design *design, std::ostream *f, std::string filename, std::string command); + static void backend_call(RTLIL::Design *design, std::ostream *f, std::string filename, std::vector args); +}; + +// implemented in passes/cmds/select.cc +extern void handle_extra_select_args(Pass *pass, const std::vector &args, size_t argidx, size_t args_size, RTLIL::Design *design); +extern RTLIL::Selection eval_select_args(const vector &args, RTLIL::Design *design); +extern void eval_select_op(vector &work, const string &op, RTLIL::Design *design); + +extern std::map pass_register; +extern std::map frontend_register; +extern std::map backend_register; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/rtlil.h b/resources/netlist/resources/kernel/share/include/kernel/rtlil.h new file mode 100644 index 0000000..27ffdff --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/rtlil.h @@ -0,0 +1,1805 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "kernel/yosys.h" + +#ifndef RTLIL_H +#define RTLIL_H + +YOSYS_NAMESPACE_BEGIN + +namespace RTLIL +{ + enum State : unsigned char { + S0 = 0, + S1 = 1, + Sx = 2, // undefined value or conflict + Sz = 3, // high-impedance / not-connected + Sa = 4, // don't care (used only in cases) + Sm = 5 // marker (used internally by some passes) + }; + + enum SyncType : unsigned char { + ST0 = 0, // level sensitive: 0 + ST1 = 1, // level sensitive: 1 + STp = 2, // edge sensitive: posedge + STn = 3, // edge sensitive: negedge + STe = 4, // edge sensitive: both edges + STa = 5, // always active + STg = 6, // global clock + STi = 7 // init + }; + + enum ConstFlags : unsigned char { + CONST_FLAG_NONE = 0, + CONST_FLAG_STRING = 1, + CONST_FLAG_SIGNED = 2, // only used for parameters + CONST_FLAG_REAL = 4 // only used for parameters + }; + + struct Const; + struct AttrObject; + struct Selection; + struct Monitor; + struct Design; + struct Module; + struct Wire; + struct Memory; + struct Cell; + struct SigChunk; + struct SigBit; + struct SigSpecIterator; + struct SigSpecConstIterator; + struct SigSpec; + struct CaseRule; + struct SwitchRule; + struct MemWriteAction; + struct SyncRule; + struct Process; + struct Binding; + + typedef std::pair SigSig; + + struct IdString + { + #undef YOSYS_XTRACE_GET_PUT + #undef YOSYS_SORT_ID_FREE_LIST + #undef YOSYS_USE_STICKY_IDS + #undef YOSYS_NO_IDS_REFCNT + + // the global id string cache + + static struct destruct_guard_t { + bool ok; // POD, will be initialized to zero + destruct_guard_t() { ok = true; } + ~destruct_guard_t() { ok = false; } + } destruct_guard; + + static std::vector global_id_storage_; + static dict global_id_index_; + #ifndef YOSYS_NO_IDS_REFCNT + static std::vector global_refcount_storage_; + static std::vector global_free_idx_list_; + #endif + + #ifdef YOSYS_USE_STICKY_IDS + static int last_created_idx_ptr_; + static int last_created_idx_[8]; + #endif + + static inline void xtrace_db_dump() + { + #ifdef YOSYS_XTRACE_GET_PUT + for (int idx = 0; idx < GetSize(global_id_storage_); idx++) + { + if (global_id_storage_.at(idx) == nullptr) + log("#X# DB-DUMP index %d: FREE\n", idx); + else + log("#X# DB-DUMP index %d: '%s' (ref %d)\n", idx, global_id_storage_.at(idx), global_refcount_storage_.at(idx)); + } + #endif + } + + static inline void checkpoint() + { + #ifdef YOSYS_USE_STICKY_IDS + last_created_idx_ptr_ = 0; + for (int i = 0; i < 8; i++) { + if (last_created_idx_[i]) + put_reference(last_created_idx_[i]); + last_created_idx_[i] = 0; + } + #endif + #ifdef YOSYS_SORT_ID_FREE_LIST + std::sort(global_free_idx_list_.begin(), global_free_idx_list_.end(), std::greater()); + #endif + } + + static inline int get_reference(int idx) + { + if (idx) { + #ifndef YOSYS_NO_IDS_REFCNT + global_refcount_storage_[idx]++; + #endif + #ifdef YOSYS_XTRACE_GET_PUT + if (yosys_xtrace) + log("#X# GET-BY-INDEX '%s' (index %d, refcount %d)\n", global_id_storage_.at(idx), idx, global_refcount_storage_.at(idx)); + #endif + } + return idx; + } + + static int get_reference(const char *p) + { + log_assert(destruct_guard.ok); + + if (!p[0]) + return 0; + + auto it = global_id_index_.find((char*)p); + if (it != global_id_index_.end()) { + #ifndef YOSYS_NO_IDS_REFCNT + global_refcount_storage_.at(it->second)++; + #endif + #ifdef YOSYS_XTRACE_GET_PUT + if (yosys_xtrace) + log("#X# GET-BY-NAME '%s' (index %d, refcount %d)\n", global_id_storage_.at(it->second), it->second, global_refcount_storage_.at(it->second)); + #endif + return it->second; + } + + log_assert(p[0] == '$' || p[0] == '\\'); + log_assert(p[1] != 0); + for (const char *c = p; *c; c++) + if ((unsigned)*c <= (unsigned)' ') + log_error("Found control character or space (0x%02x) in string '%s' which is not allowed in RTLIL identifiers\n", *c, p); + + #ifndef YOSYS_NO_IDS_REFCNT + if (global_free_idx_list_.empty()) { + if (global_id_storage_.empty()) { + global_refcount_storage_.push_back(0); + global_id_storage_.push_back((char*)""); + global_id_index_[global_id_storage_.back()] = 0; + } + log_assert(global_id_storage_.size() < 0x40000000); + global_free_idx_list_.push_back(global_id_storage_.size()); + global_id_storage_.push_back(nullptr); + global_refcount_storage_.push_back(0); + } + + int idx = global_free_idx_list_.back(); + global_free_idx_list_.pop_back(); + global_id_storage_.at(idx) = strdup(p); + global_id_index_[global_id_storage_.at(idx)] = idx; + global_refcount_storage_.at(idx)++; + #else + if (global_id_storage_.empty()) { + global_id_storage_.push_back((char*)""); + global_id_index_[global_id_storage_.back()] = 0; + } + int idx = global_id_storage_.size(); + global_id_storage_.push_back(strdup(p)); + global_id_index_[global_id_storage_.back()] = idx; + #endif + + if (yosys_xtrace) { + log("#X# New IdString '%s' with index %d.\n", p, idx); + log_backtrace("-X- ", yosys_xtrace-1); + } + + #ifdef YOSYS_XTRACE_GET_PUT + if (yosys_xtrace) + log("#X# GET-BY-NAME '%s' (index %d, refcount %d)\n", global_id_storage_.at(idx), idx, global_refcount_storage_.at(idx)); + #endif + + #ifdef YOSYS_USE_STICKY_IDS + // Avoid Create->Delete->Create pattern + if (last_created_idx_[last_created_idx_ptr_]) + put_reference(last_created_idx_[last_created_idx_ptr_]); + last_created_idx_[last_created_idx_ptr_] = idx; + get_reference(last_created_idx_[last_created_idx_ptr_]); + last_created_idx_ptr_ = (last_created_idx_ptr_ + 1) & 7; + #endif + + return idx; + } + + #ifndef YOSYS_NO_IDS_REFCNT + static inline void put_reference(int idx) + { + // put_reference() may be called from destructors after the destructor of + // global_refcount_storage_ has been run. in this case we simply do nothing. + if (!destruct_guard.ok || !idx) + return; + + #ifdef YOSYS_XTRACE_GET_PUT + if (yosys_xtrace) { + log("#X# PUT '%s' (index %d, refcount %d)\n", global_id_storage_.at(idx), idx, global_refcount_storage_.at(idx)); + } + #endif + + int &refcount = global_refcount_storage_[idx]; + + if (--refcount > 0) + return; + + log_assert(refcount == 0); + free_reference(idx); + } + static inline void free_reference(int idx) + { + if (yosys_xtrace) { + log("#X# Removed IdString '%s' with index %d.\n", global_id_storage_.at(idx), idx); + log_backtrace("-X- ", yosys_xtrace-1); + } + + global_id_index_.erase(global_id_storage_.at(idx)); + free(global_id_storage_.at(idx)); + global_id_storage_.at(idx) = nullptr; + global_free_idx_list_.push_back(idx); + } + #else + static inline void put_reference(int) { } + #endif + + // the actual IdString object is just is a single int + + int index_; + + inline IdString() : index_(0) { } + inline IdString(const char *str) : index_(get_reference(str)) { } + inline IdString(const IdString &str) : index_(get_reference(str.index_)) { } + inline IdString(IdString &&str) : index_(str.index_) { str.index_ = 0; } + inline IdString(const std::string &str) : index_(get_reference(str.c_str())) { } + inline ~IdString() { put_reference(index_); } + + inline void operator=(const IdString &rhs) { + put_reference(index_); + index_ = get_reference(rhs.index_); + } + + inline void operator=(const char *rhs) { + IdString id(rhs); + *this = id; + } + + inline void operator=(const std::string &rhs) { + IdString id(rhs); + *this = id; + } + + inline const char *c_str() const { + return global_id_storage_.at(index_); + } + + inline std::string str() const { + return std::string(global_id_storage_.at(index_)); + } + + inline bool operator<(const IdString &rhs) const { + return index_ < rhs.index_; + } + + inline bool operator==(const IdString &rhs) const { return index_ == rhs.index_; } + inline bool operator!=(const IdString &rhs) const { return index_ != rhs.index_; } + + // The methods below are just convenience functions for better compatibility with std::string. + + bool operator==(const std::string &rhs) const { return c_str() == rhs; } + bool operator!=(const std::string &rhs) const { return c_str() != rhs; } + + bool operator==(const char *rhs) const { return strcmp(c_str(), rhs) == 0; } + bool operator!=(const char *rhs) const { return strcmp(c_str(), rhs) != 0; } + + char operator[](size_t i) const { + const char *p = c_str(); + for (; i != 0; i--, p++) + log_assert(*p != 0); + return *p; + } + + std::string substr(size_t pos = 0, size_t len = std::string::npos) const { + if (len == std::string::npos || len >= strlen(c_str() + pos)) + return std::string(c_str() + pos); + else + return std::string(c_str() + pos, len); + } + + int compare(size_t pos, size_t len, const char* s) const { + return strncmp(c_str()+pos, s, len); + } + + bool begins_with(const char* prefix) const { + size_t len = strlen(prefix); + if (size() < len) return false; + return compare(0, len, prefix) == 0; + } + + bool ends_with(const char* suffix) const { + size_t len = strlen(suffix); + if (size() < len) return false; + return compare(size()-len, len, suffix) == 0; + } + + bool contains(const char* str) const { + return strstr(c_str(), str); + } + + size_t size() const { + return strlen(c_str()); + } + + bool empty() const { + return c_str()[0] == 0; + } + + void clear() { + *this = IdString(); + } + + unsigned int hash() const { + return index_; + } + + // The following is a helper key_compare class. Instead of for example std::set + // use std::set> if the order of cells in the + // set has an influence on the algorithm. + + template struct compare_ptr_by_name { + bool operator()(const T *a, const T *b) const { + return (a == nullptr || b == nullptr) ? (a < b) : (a->name < b->name); + } + }; + + // often one needs to check if a given IdString is part of a list (for example a list + // of cell types). the following functions helps with that. + + template + bool in(Args... args) const { + // Credit: https://articles.emptycrate.com/2016/05/14/folds_in_cpp11_ish.html + bool result = false; + (void) std::initializer_list{ (result = result || in(args), 0)... }; + return result; + } + + bool in(const IdString &rhs) const { return *this == rhs; } + bool in(const char *rhs) const { return *this == rhs; } + bool in(const std::string &rhs) const { return *this == rhs; } + bool in(const pool &rhs) const { return rhs.count(*this) != 0; } + + bool isPublic() const { return begins_with("\\"); } + }; + + namespace ID { +#define X(_id) extern IdString _id; +#include "kernel/constids.inc" +#undef X + }; + + extern dict constpad; + + const pool &builtin_ff_cell_types(); + + static inline std::string escape_id(const std::string &str) { + if (str.size() > 0 && str[0] != '\\' && str[0] != '$') + return "\\" + str; + return str; + } + + static inline std::string unescape_id(const std::string &str) { + if (str.size() < 2) + return str; + if (str[0] != '\\') + return str; + if (str[1] == '$' || str[1] == '\\') + return str; + if (str[1] >= '0' && str[1] <= '9') + return str; + return str.substr(1); + } + + static inline std::string unescape_id(const RTLIL::IdString &str) { + return unescape_id(str.str()); + } + + static inline const char *id2cstr(const RTLIL::IdString &str) { + return log_id(str); + } + + template struct sort_by_name_id { + bool operator()(T *a, T *b) const { + return a->name < b->name; + } + }; + + template struct sort_by_name_str { + bool operator()(T *a, T *b) const { + return strcmp(a->name.c_str(), b->name.c_str()) < 0; + } + }; + + struct sort_by_id_str { + bool operator()(const RTLIL::IdString &a, const RTLIL::IdString &b) const { + return strcmp(a.c_str(), b.c_str()) < 0; + } + }; + + static inline std::string encode_filename(const std::string &filename) + { + std::stringstream val; + if (!std::any_of(filename.begin(), filename.end(), [](char c) { + return static_cast(c) < 33 || static_cast(c) > 126; + })) return filename; + for (unsigned char const c : filename) { + if (c < 33 || c > 126) + val << stringf("$%02x", c); + else + val << c; + } + return val.str(); + } + + // see calc.cc for the implementation of this functions + RTLIL::Const const_not (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_and (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_or (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_xor (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_xnor (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_reduce_and (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_reduce_or (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_reduce_xor (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_reduce_xnor (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_reduce_bool (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_logic_not (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_logic_and (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_logic_or (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_shl (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_shr (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_sshl (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_sshr (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_shift (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_shiftx (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_lt (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_le (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_eq (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_ne (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_eqx (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_nex (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_ge (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_gt (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_add (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_sub (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_mul (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_div (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_divfloor (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_modfloor (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_mod (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_pow (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_pos (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + RTLIL::Const const_neg (const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len); + + RTLIL::Const const_bmux (const RTLIL::Const &arg1, const RTLIL::Const &arg2); + RTLIL::Const const_demux (const RTLIL::Const &arg1, const RTLIL::Const &arg2); + + + // This iterator-range-pair is used for Design::modules(), Module::wires() and Module::cells(). + // It maintains a reference counter that is used to make sure that the container is not modified while being iterated over. + + template + struct ObjIterator { + using iterator_category = std::forward_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; + typename dict::iterator it; + dict *list_p; + int *refcount_p; + + ObjIterator() : list_p(nullptr), refcount_p(nullptr) { + } + + ObjIterator(decltype(list_p) list_p, int *refcount_p) : list_p(list_p), refcount_p(refcount_p) { + if (list_p->empty()) { + this->list_p = nullptr; + this->refcount_p = nullptr; + } else { + it = list_p->begin(); + (*refcount_p)++; + } + } + + ObjIterator(const RTLIL::ObjIterator &other) { + it = other.it; + list_p = other.list_p; + refcount_p = other.refcount_p; + if (refcount_p) + (*refcount_p)++; + } + + ObjIterator &operator=(const RTLIL::ObjIterator &other) { + if (refcount_p) + (*refcount_p)--; + it = other.it; + list_p = other.list_p; + refcount_p = other.refcount_p; + if (refcount_p) + (*refcount_p)++; + return *this; + } + + ~ObjIterator() { + if (refcount_p) + (*refcount_p)--; + } + + inline T operator*() const { + log_assert(list_p != nullptr); + return it->second; + } + + inline bool operator!=(const RTLIL::ObjIterator &other) const { + if (list_p == nullptr || other.list_p == nullptr) + return list_p != other.list_p; + return it != other.it; + } + + + inline bool operator==(const RTLIL::ObjIterator &other) const { + return !(*this != other); + } + + inline ObjIterator& operator++() { + log_assert(list_p != nullptr); + if (++it == list_p->end()) { + (*refcount_p)--; + list_p = nullptr; + refcount_p = nullptr; + } + return *this; + } + + inline ObjIterator& operator+=(int amt) { + log_assert(list_p != nullptr); + it += amt; + if (it == list_p->end()) { + (*refcount_p)--; + list_p = nullptr; + refcount_p = nullptr; + } + return *this; + } + + inline ObjIterator operator+(int amt) { + log_assert(list_p != nullptr); + ObjIterator new_obj(*this); + new_obj.it += amt; + if (new_obj.it == list_p->end()) { + (*(new_obj.refcount_p))--; + new_obj.list_p = nullptr; + new_obj.refcount_p = nullptr; + } + return new_obj; + } + + inline const ObjIterator operator++(int) { + ObjIterator result(*this); + ++(*this); + return result; + } + }; + + template + struct ObjRange + { + dict *list_p; + int *refcount_p; + + ObjRange(decltype(list_p) list_p, int *refcount_p) : list_p(list_p), refcount_p(refcount_p) { } + RTLIL::ObjIterator begin() { return RTLIL::ObjIterator(list_p, refcount_p); } + RTLIL::ObjIterator end() { return RTLIL::ObjIterator(); } + + size_t size() const { + return list_p->size(); + } + + operator pool() const { + pool result; + for (auto &it : *list_p) + result.insert(it.second); + return result; + } + + operator std::vector() const { + std::vector result; + result.reserve(list_p->size()); + for (auto &it : *list_p) + result.push_back(it.second); + return result; + } + + pool to_pool() const { return *this; } + std::vector to_vector() const { return *this; } + }; +}; + +struct RTLIL::Const +{ + int flags; + std::vector bits; + + Const() : flags(RTLIL::CONST_FLAG_NONE) {} + Const(const std::string &str); + Const(int val, int width = 32); + Const(RTLIL::State bit, int width = 1); + Const(const std::vector &bits) : bits(bits) { flags = CONST_FLAG_NONE; } + Const(const std::vector &bits); + Const(const RTLIL::Const &c) = default; + RTLIL::Const &operator =(const RTLIL::Const &other) = default; + + bool operator <(const RTLIL::Const &other) const; + bool operator ==(const RTLIL::Const &other) const; + bool operator !=(const RTLIL::Const &other) const; + + bool as_bool() const; + int as_int(bool is_signed = false) const; + std::string as_string() const; + static Const from_string(const std::string &str); + + std::string decode_string() const; + + inline int size() const { return bits.size(); } + inline bool empty() const { return bits.empty(); } + inline RTLIL::State &operator[](int index) { return bits.at(index); } + inline const RTLIL::State &operator[](int index) const { return bits.at(index); } + inline decltype(bits)::iterator begin() { return bits.begin(); } + inline decltype(bits)::iterator end() { return bits.end(); } + + bool is_fully_zero() const; + bool is_fully_ones() const; + bool is_fully_def() const; + bool is_fully_undef() const; + bool is_onehot(int *pos = nullptr) const; + + inline RTLIL::Const extract(int offset, int len = 1, RTLIL::State padding = RTLIL::State::S0) const { + RTLIL::Const ret; + ret.bits.reserve(len); + for (int i = offset; i < offset + len; i++) + ret.bits.push_back(i < GetSize(bits) ? bits[i] : padding); + return ret; + } + + void extu(int width) { + bits.resize(width, RTLIL::State::S0); + } + + void exts(int width) { + bits.resize(width, bits.empty() ? RTLIL::State::Sx : bits.back()); + } + + inline unsigned int hash() const { + unsigned int h = mkhash_init; + for (auto b : bits) + mkhash(h, b); + return h; + } +}; + +struct RTLIL::AttrObject +{ + dict attributes; + + bool has_attribute(const RTLIL::IdString &id) const; + + void set_bool_attribute(const RTLIL::IdString &id, bool value=true); + bool get_bool_attribute(const RTLIL::IdString &id) const; + + bool get_blackbox_attribute(bool ignore_wb=false) const { + return get_bool_attribute(ID::blackbox) || (!ignore_wb && get_bool_attribute(ID::whitebox)); + } + + void set_string_attribute(const RTLIL::IdString& id, string value); + string get_string_attribute(const RTLIL::IdString &id) const; + + void set_strpool_attribute(const RTLIL::IdString& id, const pool &data); + void add_strpool_attribute(const RTLIL::IdString& id, const pool &data); + pool get_strpool_attribute(const RTLIL::IdString &id) const; + + void set_src_attribute(const std::string &src) { + set_string_attribute(ID::src, src); + } + std::string get_src_attribute() const { + return get_string_attribute(ID::src); + } + + void set_hdlname_attribute(const vector &hierarchy); + vector get_hdlname_attribute() const; + + void set_intvec_attribute(const RTLIL::IdString& id, const vector &data); + vector get_intvec_attribute(const RTLIL::IdString &id) const; +}; + +struct RTLIL::SigChunk +{ + RTLIL::Wire *wire; + std::vector data; // only used if wire == NULL, LSB at index 0 + int width, offset; + + SigChunk() : wire(nullptr), width(0), offset(0) {} + SigChunk(const RTLIL::Const &value) : wire(nullptr), data(value.bits), width(GetSize(data)), offset(0) {} + SigChunk(RTLIL::Const &&value) : wire(nullptr), data(std::move(value.bits)), width(GetSize(data)), offset(0) {} + SigChunk(RTLIL::Wire *wire) : wire(wire), width(GetSize(wire)), offset(0) {} + SigChunk(RTLIL::Wire *wire, int offset, int width = 1) : wire(wire), width(width), offset(offset) {} + SigChunk(const std::string &str) : SigChunk(RTLIL::Const(str)) {} + SigChunk(int val, int width = 32) : SigChunk(RTLIL::Const(val, width)) {} + SigChunk(RTLIL::State bit, int width = 1) : SigChunk(RTLIL::Const(bit, width)) {} + SigChunk(const RTLIL::SigBit &bit); + + RTLIL::SigChunk extract(int offset, int length) const; + inline int size() const { return width; } + inline bool is_wire() const { return wire != NULL; } + + bool operator <(const RTLIL::SigChunk &other) const; + bool operator ==(const RTLIL::SigChunk &other) const; + bool operator !=(const RTLIL::SigChunk &other) const; +}; + +struct RTLIL::SigBit +{ + RTLIL::Wire *wire; + union { + RTLIL::State data; // used if wire == NULL + int offset; // used if wire != NULL + }; + + SigBit(); + SigBit(RTLIL::State bit); + explicit SigBit(bool bit); + SigBit(RTLIL::Wire *wire); + SigBit(RTLIL::Wire *wire, int offset); + SigBit(const RTLIL::SigChunk &chunk); + SigBit(const RTLIL::SigChunk &chunk, int index); + SigBit(const RTLIL::SigSpec &sig); + SigBit(const RTLIL::SigBit &sigbit) = default; + RTLIL::SigBit &operator =(const RTLIL::SigBit &other) = default; + + inline bool is_wire() const { return wire != NULL; } + + bool operator <(const RTLIL::SigBit &other) const; + bool operator ==(const RTLIL::SigBit &other) const; + bool operator !=(const RTLIL::SigBit &other) const; + unsigned int hash() const; +}; + +struct RTLIL::SigSpecIterator : public std::iterator +{ + RTLIL::SigSpec *sig_p; + int index; + + inline RTLIL::SigBit &operator*() const; + inline bool operator!=(const RTLIL::SigSpecIterator &other) const { return index != other.index; } + inline bool operator==(const RTLIL::SigSpecIterator &other) const { return index == other.index; } + inline void operator++() { index++; } +}; + +struct RTLIL::SigSpecConstIterator : public std::iterator +{ + const RTLIL::SigSpec *sig_p; + int index; + + inline const RTLIL::SigBit &operator*() const; + inline bool operator!=(const RTLIL::SigSpecConstIterator &other) const { return index != other.index; } + inline bool operator==(const RTLIL::SigSpecIterator &other) const { return index == other.index; } + inline void operator++() { index++; } +}; + +struct RTLIL::SigSpec +{ +private: + int width_; + unsigned long hash_; + std::vector chunks_; // LSB at index 0 + std::vector bits_; // LSB at index 0 + + void pack() const; + void unpack() const; + void updhash() const; + + inline bool packed() const { + return bits_.empty(); + } + + inline void inline_unpack() const { + if (!chunks_.empty()) + unpack(); + } + + // Only used by Module::remove(const pool &wires) + // but cannot be more specific as it isn't yet declared + friend struct RTLIL::Module; + +public: + SigSpec() : width_(0), hash_(0) {} + SigSpec(std::initializer_list parts); + + SigSpec(const RTLIL::Const &value); + SigSpec(RTLIL::Const &&value); + SigSpec(const RTLIL::SigChunk &chunk); + SigSpec(RTLIL::SigChunk &&chunk); + SigSpec(RTLIL::Wire *wire); + SigSpec(RTLIL::Wire *wire, int offset, int width = 1); + SigSpec(const std::string &str); + SigSpec(int val, int width = 32); + SigSpec(RTLIL::State bit, int width = 1); + SigSpec(const RTLIL::SigBit &bit, int width = 1); + SigSpec(const std::vector &chunks); + SigSpec(const std::vector &bits); + SigSpec(const pool &bits); + SigSpec(const std::set &bits); + explicit SigSpec(bool bit); + + size_t get_hash() const { + if (!hash_) hash(); + return hash_; + } + + inline const std::vector &chunks() const { pack(); return chunks_; } + inline const std::vector &bits() const { inline_unpack(); return bits_; } + + inline int size() const { return width_; } + inline bool empty() const { return width_ == 0; } + + inline RTLIL::SigBit &operator[](int index) { inline_unpack(); return bits_.at(index); } + inline const RTLIL::SigBit &operator[](int index) const { inline_unpack(); return bits_.at(index); } + + inline RTLIL::SigSpecIterator begin() { RTLIL::SigSpecIterator it; it.sig_p = this; it.index = 0; return it; } + inline RTLIL::SigSpecIterator end() { RTLIL::SigSpecIterator it; it.sig_p = this; it.index = width_; return it; } + + inline RTLIL::SigSpecConstIterator begin() const { RTLIL::SigSpecConstIterator it; it.sig_p = this; it.index = 0; return it; } + inline RTLIL::SigSpecConstIterator end() const { RTLIL::SigSpecConstIterator it; it.sig_p = this; it.index = width_; return it; } + + void sort(); + void sort_and_unify(); + + void replace(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec &with); + void replace(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec &with, RTLIL::SigSpec *other) const; + + void replace(const dict &rules); + void replace(const dict &rules, RTLIL::SigSpec *other) const; + + void replace(const std::map &rules); + void replace(const std::map &rules, RTLIL::SigSpec *other) const; + + void replace(int offset, const RTLIL::SigSpec &with); + + void remove(const RTLIL::SigSpec &pattern); + void remove(const RTLIL::SigSpec &pattern, RTLIL::SigSpec *other) const; + void remove2(const RTLIL::SigSpec &pattern, RTLIL::SigSpec *other); + + void remove(const pool &pattern); + void remove(const pool &pattern, RTLIL::SigSpec *other) const; + void remove2(const pool &pattern, RTLIL::SigSpec *other); + void remove2(const std::set &pattern, RTLIL::SigSpec *other); + + void remove(int offset, int length = 1); + void remove_const(); + + RTLIL::SigSpec extract(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec *other = NULL) const; + RTLIL::SigSpec extract(const pool &pattern, const RTLIL::SigSpec *other = NULL) const; + RTLIL::SigSpec extract(int offset, int length = 1) const; + RTLIL::SigSpec extract_end(int offset) const { return extract(offset, width_ - offset); } + + void append(const RTLIL::SigSpec &signal); + inline void append(Wire *wire) { append(RTLIL::SigSpec(wire)); } + inline void append(const RTLIL::SigChunk &chunk) { append(RTLIL::SigSpec(chunk)); } + inline void append(const RTLIL::Const &const_) { append(RTLIL::SigSpec(const_)); } + + void append(const RTLIL::SigBit &bit); + inline void append(RTLIL::State state) { append(RTLIL::SigBit(state)); } + inline void append(bool bool_) { append(RTLIL::SigBit(bool_)); } + + void extend_u0(int width, bool is_signed = false); + + RTLIL::SigSpec repeat(int num) const; + + void reverse() { inline_unpack(); std::reverse(bits_.begin(), bits_.end()); } + + bool operator <(const RTLIL::SigSpec &other) const; + bool operator ==(const RTLIL::SigSpec &other) const; + inline bool operator !=(const RTLIL::SigSpec &other) const { return !(*this == other); } + + bool is_wire() const; + bool is_chunk() const; + inline bool is_bit() const { return width_ == 1; } + + bool is_fully_const() const; + bool is_fully_zero() const; + bool is_fully_ones() const; + bool is_fully_def() const; + bool is_fully_undef() const; + bool has_const() const; + bool has_marked_bits() const; + bool is_onehot(int *pos = nullptr) const; + + bool as_bool() const; + int as_int(bool is_signed = false) const; + std::string as_string() const; + RTLIL::Const as_const() const; + RTLIL::Wire *as_wire() const; + RTLIL::SigChunk as_chunk() const; + RTLIL::SigBit as_bit() const; + + bool match(const char* pattern) const; + + std::set to_sigbit_set() const; + pool to_sigbit_pool() const; + std::vector to_sigbit_vector() const; + std::map to_sigbit_map(const RTLIL::SigSpec &other) const; + dict to_sigbit_dict(const RTLIL::SigSpec &other) const; + + static bool parse(RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str); + static bool parse_sel(RTLIL::SigSpec &sig, RTLIL::Design *design, RTLIL::Module *module, std::string str); + static bool parse_rhs(const RTLIL::SigSpec &lhs, RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str); + + operator std::vector() const { return chunks(); } + operator std::vector() const { return bits(); } + const RTLIL::SigBit &at(int offset, const RTLIL::SigBit &defval) { return offset < width_ ? (*this)[offset] : defval; } + + unsigned int hash() const { if (!hash_) updhash(); return hash_; }; + +#ifndef NDEBUG + void check(Module *mod = nullptr) const; +#else + void check(Module *mod = nullptr) const { (void)mod; } +#endif +}; + +struct RTLIL::Selection +{ + bool full_selection; + pool selected_modules; + dict> selected_members; + + Selection(bool full = true) : full_selection(full) { } + + bool selected_module(const RTLIL::IdString &mod_name) const; + bool selected_whole_module(const RTLIL::IdString &mod_name) const; + bool selected_member(const RTLIL::IdString &mod_name, const RTLIL::IdString &memb_name) const; + void optimize(RTLIL::Design *design); + + template void select(T1 *module) { + if (!full_selection && selected_modules.count(module->name) == 0) { + selected_modules.insert(module->name); + selected_members.erase(module->name); + } + } + + template void select(T1 *module, T2 *member) { + if (!full_selection && selected_modules.count(module->name) == 0) + selected_members[module->name].insert(member->name); + } + + bool empty() const { + return !full_selection && selected_modules.empty() && selected_members.empty(); + } +}; + +struct RTLIL::Monitor +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + + Monitor() { + static unsigned int hashidx_count = 123456789; + hashidx_count = mkhash_xorshift(hashidx_count); + hashidx_ = hashidx_count; + } + + virtual ~Monitor() { } + virtual void notify_module_add(RTLIL::Module*) { } + virtual void notify_module_del(RTLIL::Module*) { } + virtual void notify_connect(RTLIL::Cell*, const RTLIL::IdString&, const RTLIL::SigSpec&, const RTLIL::SigSpec&) { } + virtual void notify_connect(RTLIL::Module*, const RTLIL::SigSig&) { } + virtual void notify_connect(RTLIL::Module*, const std::vector&) { } + virtual void notify_blackout(RTLIL::Module*) { } +}; + +// Forward declaration; defined in preproc.h. +struct define_map_t; + +struct RTLIL::Design +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + + pool monitors; + dict scratchpad; + + int refcount_modules_; + dict modules_; + std::vector bindings_; + + std::vector verilog_packages, verilog_globals; + std::unique_ptr verilog_defines; + + std::vector selection_stack; + dict selection_vars; + std::string selected_active_module; + + Design(); + ~Design(); + + RTLIL::ObjRange modules(); + RTLIL::Module *module(const RTLIL::IdString &name); + const RTLIL::Module *module(const RTLIL::IdString &name) const; + RTLIL::Module *top_module(); + + bool has(const RTLIL::IdString &id) const { + return modules_.count(id) != 0; + } + + void add(RTLIL::Module *module); + void add(RTLIL::Binding *binding); + + RTLIL::Module *addModule(RTLIL::IdString name); + void remove(RTLIL::Module *module); + void rename(RTLIL::Module *module, RTLIL::IdString new_name); + + void scratchpad_unset(const std::string &varname); + + void scratchpad_set_int(const std::string &varname, int value); + void scratchpad_set_bool(const std::string &varname, bool value); + void scratchpad_set_string(const std::string &varname, std::string value); + + int scratchpad_get_int(const std::string &varname, int default_value = 0) const; + bool scratchpad_get_bool(const std::string &varname, bool default_value = false) const; + std::string scratchpad_get_string(const std::string &varname, const std::string &default_value = std::string()) const; + + void sort(); + void check(); + void optimize(); + + bool selected_module(const RTLIL::IdString &mod_name) const; + bool selected_whole_module(const RTLIL::IdString &mod_name) const; + bool selected_member(const RTLIL::IdString &mod_name, const RTLIL::IdString &memb_name) const; + + bool selected_module(RTLIL::Module *mod) const; + bool selected_whole_module(RTLIL::Module *mod) const; + + RTLIL::Selection &selection() { + return selection_stack.back(); + } + + const RTLIL::Selection &selection() const { + return selection_stack.back(); + } + + bool full_selection() const { + return selection_stack.back().full_selection; + } + + template bool selected(T1 *module) const { + return selected_module(module->name); + } + + template bool selected(T1 *module, T2 *member) const { + return selected_member(module->name, member->name); + } + + template void select(T1 *module) { + if (selection_stack.size() > 0) { + RTLIL::Selection &sel = selection_stack.back(); + sel.select(module); + } + } + + template void select(T1 *module, T2 *member) { + if (selection_stack.size() > 0) { + RTLIL::Selection &sel = selection_stack.back(); + sel.select(module, member); + } + } + + + std::vector selected_modules() const; + std::vector selected_whole_modules() const; + std::vector selected_whole_modules_warn(bool include_wb = false) const; +#ifdef WITH_PYTHON + static std::map *get_all_designs(void); +#endif +}; + +struct RTLIL::Module : public RTLIL::AttrObject +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + +protected: + void add(RTLIL::Wire *wire); + void add(RTLIL::Cell *cell); + void add(RTLIL::Process *process); + +public: + RTLIL::Design *design; + pool monitors; + + int refcount_wires_; + int refcount_cells_; + + dict wires_; + dict cells_; + + std::vector connections_; + std::vector bindings_; + + RTLIL::IdString name; + idict avail_parameters; + dict parameter_default_values; + dict memories; + dict processes; + + Module(); + virtual ~Module(); + virtual RTLIL::IdString derive(RTLIL::Design *design, const dict ¶meters, bool mayfail = false); + virtual RTLIL::IdString derive(RTLIL::Design *design, const dict ¶meters, const dict &interfaces, const dict &modports, bool mayfail = false); + virtual size_t count_id(const RTLIL::IdString& id); + virtual void expand_interfaces(RTLIL::Design *design, const dict &local_interfaces); + virtual bool reprocess_if_necessary(RTLIL::Design *design); + + virtual void sort(); + virtual void check(); + virtual void optimize(); + virtual void makeblackbox(); + + void connect(const RTLIL::SigSig &conn); + void connect(const RTLIL::SigSpec &lhs, const RTLIL::SigSpec &rhs); + void new_connections(const std::vector &new_conn); + const std::vector &connections() const; + + std::vector ports; + void fixup_ports(); + + template void rewrite_sigspecs(T &functor); + template void rewrite_sigspecs2(T &functor); + void cloneInto(RTLIL::Module *new_mod) const; + virtual RTLIL::Module *clone() const; + + bool has_memories() const; + bool has_processes() const; + + bool has_memories_warn() const; + bool has_processes_warn() const; + + std::vector selected_wires() const; + std::vector selected_cells() const; + + template bool selected(T *member) const { + return design->selected_member(name, member->name); + } + + RTLIL::Wire* wire(const RTLIL::IdString &id) { + auto it = wires_.find(id); + return it == wires_.end() ? nullptr : it->second; + } + RTLIL::Cell* cell(const RTLIL::IdString &id) { + auto it = cells_.find(id); + return it == cells_.end() ? nullptr : it->second; + } + + const RTLIL::Wire* wire(const RTLIL::IdString &id) const{ + auto it = wires_.find(id); + return it == wires_.end() ? nullptr : it->second; + } + const RTLIL::Cell* cell(const RTLIL::IdString &id) const { + auto it = cells_.find(id); + return it == cells_.end() ? nullptr : it->second; + } + + RTLIL::ObjRange wires() { return RTLIL::ObjRange(&wires_, &refcount_wires_); } + RTLIL::ObjRange cells() { return RTLIL::ObjRange(&cells_, &refcount_cells_); } + + void add(RTLIL::Binding *binding); + + // Removing wires is expensive. If you have to remove wires, remove them all at once. + void remove(const pool &wires); + void remove(RTLIL::Cell *cell); + void remove(RTLIL::Process *process); + + void rename(RTLIL::Wire *wire, RTLIL::IdString new_name); + void rename(RTLIL::Cell *cell, RTLIL::IdString new_name); + void rename(RTLIL::IdString old_name, RTLIL::IdString new_name); + + void swap_names(RTLIL::Wire *w1, RTLIL::Wire *w2); + void swap_names(RTLIL::Cell *c1, RTLIL::Cell *c2); + + RTLIL::IdString uniquify(RTLIL::IdString name); + RTLIL::IdString uniquify(RTLIL::IdString name, int &index); + + RTLIL::Wire *addWire(RTLIL::IdString name, int width = 1); + RTLIL::Wire *addWire(RTLIL::IdString name, const RTLIL::Wire *other); + + RTLIL::Cell *addCell(RTLIL::IdString name, RTLIL::IdString type); + RTLIL::Cell *addCell(RTLIL::IdString name, const RTLIL::Cell *other); + + RTLIL::Memory *addMemory(RTLIL::IdString name, const RTLIL::Memory *other); + + RTLIL::Process *addProcess(RTLIL::IdString name); + RTLIL::Process *addProcess(RTLIL::IdString name, const RTLIL::Process *other); + + // The add* methods create a cell and return the created cell. All signals must exist in advance. + + RTLIL::Cell* addNot (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addPos (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addNeg (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + + RTLIL::Cell* addAnd (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addOr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addXor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addXnor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + + RTLIL::Cell* addReduceAnd (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addReduceOr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addReduceXor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addReduceXnor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addReduceBool (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + + RTLIL::Cell* addShl (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addShr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addSshl (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addSshr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addShift (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addShiftx (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + + RTLIL::Cell* addLt (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addLe (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addEq (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addNe (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addEqx (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addNex (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addGe (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addGt (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + + RTLIL::Cell* addAdd (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addSub (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addMul (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + // truncating division + RTLIL::Cell* addDiv (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + // truncating modulo + RTLIL::Cell* addMod (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addDivFloor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addModFloor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addPow (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool a_signed = false, bool b_signed = false, const std::string &src = ""); + + RTLIL::Cell* addLogicNot (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addLogicAnd (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + RTLIL::Cell* addLogicOr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, bool is_signed = false, const std::string &src = ""); + + RTLIL::Cell* addMux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_s, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + RTLIL::Cell* addPmux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_s, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + RTLIL::Cell* addBmux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_s, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + RTLIL::Cell* addDemux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_s, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + + RTLIL::Cell* addSlice (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, RTLIL::Const offset, const std::string &src = ""); + RTLIL::Cell* addConcat (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + RTLIL::Cell* addLut (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_y, RTLIL::Const lut, const std::string &src = ""); + RTLIL::Cell* addTribuf (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + RTLIL::Cell* addAssert (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_en, const std::string &src = ""); + RTLIL::Cell* addAssume (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_en, const std::string &src = ""); + RTLIL::Cell* addLive (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_en, const std::string &src = ""); + RTLIL::Cell* addFair (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_en, const std::string &src = ""); + RTLIL::Cell* addCover (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_en, const std::string &src = ""); + RTLIL::Cell* addEquiv (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_y, const std::string &src = ""); + + RTLIL::Cell* addSr (RTLIL::IdString name, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, const RTLIL::SigSpec &sig_q, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + RTLIL::Cell* addFf (RTLIL::IdString name, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, const std::string &src = ""); + RTLIL::Cell* addDff (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDffe (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, bool en_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDffsr (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, RTLIL::SigSpec sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDffsre (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, RTLIL::SigSpec sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, bool en_polarity = true, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAdff (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_arst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, RTLIL::Const arst_value, bool clk_polarity = true, bool arst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAdffe (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_arst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, RTLIL::Const arst_value, bool clk_polarity = true, bool en_polarity = true, bool arst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAldff (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_aload, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, const RTLIL::SigSpec &sig_ad, bool clk_polarity = true, bool aload_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAldffe (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_aload, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, const RTLIL::SigSpec &sig_ad, bool clk_polarity = true, bool en_polarity = true, bool aload_polarity = true, const std::string &src = ""); + RTLIL::Cell* addSdff (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_srst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, RTLIL::Const srst_value, bool clk_polarity = true, bool srst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addSdffe (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_srst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, RTLIL::Const srst_value, bool clk_polarity = true, bool en_polarity = true, bool srst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addSdffce (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_srst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, RTLIL::Const srst_value, bool clk_polarity = true, bool en_polarity = true, bool srst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDlatch (RTLIL::IdString name, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, bool en_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAdlatch (RTLIL::IdString name, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_arst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, RTLIL::Const arst_value, bool en_polarity = true, bool arst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDlatchsr (RTLIL::IdString name, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, RTLIL::SigSpec sig_d, const RTLIL::SigSpec &sig_q, bool en_polarity = true, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + + RTLIL::Cell* addBufGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addNotGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addAndGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addNandGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addOrGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addNorGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addXorGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addXnorGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addAndnotGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addOrnotGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addMuxGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_s, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addNmuxGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_s, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addAoi3Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addOai3Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addAoi4Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const RTLIL::SigBit &sig_d, const RTLIL::SigBit &sig_y, const std::string &src = ""); + RTLIL::Cell* addOai4Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const RTLIL::SigBit &sig_d, const RTLIL::SigBit &sig_y, const std::string &src = ""); + + RTLIL::Cell* addSrGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, + const RTLIL::SigSpec &sig_q, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + RTLIL::Cell* addFfGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, const std::string &src = ""); + RTLIL::Cell* addDffGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDffeGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, bool en_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDffsrGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, + RTLIL::SigSpec sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDffsreGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, + RTLIL::SigSpec sig_d, const RTLIL::SigSpec &sig_q, bool clk_polarity = true, bool en_polarity = true, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAdffGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_arst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + bool arst_value = false, bool clk_polarity = true, bool arst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAdffeGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_arst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + bool arst_value = false, bool clk_polarity = true, bool en_polarity = true, bool arst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAldffGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_aload, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + const RTLIL::SigSpec &sig_ad, bool clk_polarity = true, bool aload_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAldffeGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_aload, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + const RTLIL::SigSpec &sig_ad, bool clk_polarity = true, bool en_polarity = true, bool aload_polarity = true, const std::string &src = ""); + RTLIL::Cell* addSdffGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_srst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + bool srst_value = false, bool clk_polarity = true, bool srst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addSdffeGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_srst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + bool srst_value = false, bool clk_polarity = true, bool en_polarity = true, bool srst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addSdffceGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_clk, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_srst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + bool srst_value = false, bool clk_polarity = true, bool en_polarity = true, bool srst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDlatchGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, bool en_polarity = true, const std::string &src = ""); + RTLIL::Cell* addAdlatchGate(RTLIL::IdString name, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_arst, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, + bool arst_value = false, bool en_polarity = true, bool arst_polarity = true, const std::string &src = ""); + RTLIL::Cell* addDlatchsrGate (RTLIL::IdString name, const RTLIL::SigSpec &sig_en, const RTLIL::SigSpec &sig_set, const RTLIL::SigSpec &sig_clr, + RTLIL::SigSpec sig_d, const RTLIL::SigSpec &sig_q, bool en_polarity = true, bool set_polarity = true, bool clr_polarity = true, const std::string &src = ""); + + RTLIL::Cell* addAnyinit(RTLIL::IdString name, const RTLIL::SigSpec &sig_d, const RTLIL::SigSpec &sig_q, const std::string &src = ""); + + // The methods without the add* prefix create a cell and an output signal. They return the newly created output signal. + + RTLIL::SigSpec Not (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Pos (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Neg (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + + RTLIL::SigSpec And (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Or (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Xor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Xnor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + + RTLIL::SigSpec ReduceAnd (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec ReduceOr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec ReduceXor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec ReduceXnor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec ReduceBool (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + + RTLIL::SigSpec Shl (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Shr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Sshl (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Sshr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Shift (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Shiftx (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + + RTLIL::SigSpec Lt (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Le (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Eq (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Ne (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Eqx (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Nex (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Ge (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Gt (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + + RTLIL::SigSpec Add (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Sub (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Mul (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + // truncating division + RTLIL::SigSpec Div (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + // truncating modulo + RTLIL::SigSpec Mod (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec DivFloor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec ModFloor (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec Pow (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool a_signed = false, bool b_signed = false, const std::string &src = ""); + + RTLIL::SigSpec LogicNot (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec LogicAnd (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + RTLIL::SigSpec LogicOr (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, bool is_signed = false, const std::string &src = ""); + + RTLIL::SigSpec Mux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_s, const std::string &src = ""); + RTLIL::SigSpec Pmux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_b, const RTLIL::SigSpec &sig_s, const std::string &src = ""); + RTLIL::SigSpec Bmux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_s, const std::string &src = ""); + RTLIL::SigSpec Demux (RTLIL::IdString name, const RTLIL::SigSpec &sig_a, const RTLIL::SigSpec &sig_s, const std::string &src = ""); + + RTLIL::SigBit BufGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const std::string &src = ""); + RTLIL::SigBit NotGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const std::string &src = ""); + RTLIL::SigBit AndGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit NandGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit OrGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit NorGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit XorGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit XnorGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit AndnotGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit OrnotGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const std::string &src = ""); + RTLIL::SigBit MuxGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_s, const std::string &src = ""); + RTLIL::SigBit NmuxGate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_s, const std::string &src = ""); + RTLIL::SigBit Aoi3Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const std::string &src = ""); + RTLIL::SigBit Oai3Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const std::string &src = ""); + RTLIL::SigBit Aoi4Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const RTLIL::SigBit &sig_d, const std::string &src = ""); + RTLIL::SigBit Oai4Gate (RTLIL::IdString name, const RTLIL::SigBit &sig_a, const RTLIL::SigBit &sig_b, const RTLIL::SigBit &sig_c, const RTLIL::SigBit &sig_d, const std::string &src = ""); + + RTLIL::SigSpec Anyconst (RTLIL::IdString name, int width = 1, const std::string &src = ""); + RTLIL::SigSpec Anyseq (RTLIL::IdString name, int width = 1, const std::string &src = ""); + RTLIL::SigSpec Allconst (RTLIL::IdString name, int width = 1, const std::string &src = ""); + RTLIL::SigSpec Allseq (RTLIL::IdString name, int width = 1, const std::string &src = ""); + RTLIL::SigSpec Initstate (RTLIL::IdString name, const std::string &src = ""); + +#ifdef WITH_PYTHON + static std::map *get_all_modules(void); +#endif +}; + +struct RTLIL::Wire : public RTLIL::AttrObject +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + +protected: + // use module->addWire() and module->remove() to create or destroy wires + friend struct RTLIL::Module; + Wire(); + ~Wire(); + +public: + // do not simply copy wires + Wire(RTLIL::Wire &other) = delete; + void operator=(RTLIL::Wire &other) = delete; + + RTLIL::Module *module; + RTLIL::IdString name; + int width, start_offset, port_id; + bool port_input, port_output, upto, is_signed; + +#ifdef WITH_PYTHON + static std::map *get_all_wires(void); +#endif +}; + +inline int GetSize(RTLIL::Wire *wire) { + return wire->width; +} + +struct RTLIL::Memory : public RTLIL::AttrObject +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + + Memory(); + + RTLIL::IdString name; + int width, start_offset, size; +#ifdef WITH_PYTHON + ~Memory(); + static std::map *get_all_memorys(void); +#endif +}; + +struct RTLIL::Cell : public RTLIL::AttrObject +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + +protected: + // use module->addCell() and module->remove() to create or destroy cells + friend struct RTLIL::Module; + Cell(); + ~Cell(); + +public: + // do not simply copy cells + Cell(RTLIL::Cell &other) = delete; + void operator=(RTLIL::Cell &other) = delete; + + RTLIL::Module *module; + RTLIL::IdString name; + RTLIL::IdString type; + dict connections_; + dict parameters; + + // access cell ports + bool hasPort(const RTLIL::IdString &portname) const; + void unsetPort(const RTLIL::IdString &portname); + void setPort(const RTLIL::IdString &portname, RTLIL::SigSpec signal); + const RTLIL::SigSpec &getPort(const RTLIL::IdString &portname) const; + const dict &connections() const; + + // information about cell ports + bool known() const; + bool input(const RTLIL::IdString &portname) const; + bool output(const RTLIL::IdString &portname) const; + + // access cell parameters + bool hasParam(const RTLIL::IdString ¶mname) const; + void unsetParam(const RTLIL::IdString ¶mname); + void setParam(const RTLIL::IdString ¶mname, RTLIL::Const value); + const RTLIL::Const &getParam(const RTLIL::IdString ¶mname) const; + + void sort(); + void check(); + void fixup_parameters(bool set_a_signed = false, bool set_b_signed = false); + + bool has_keep_attr() const { + return get_bool_attribute(ID::keep) || (module && module->design && module->design->module(type) && + module->design->module(type)->get_bool_attribute(ID::keep)); + } + + template void rewrite_sigspecs(T &functor); + template void rewrite_sigspecs2(T &functor); + +#ifdef WITH_PYTHON + static std::map *get_all_cells(void); +#endif + + bool has_memid() const; + bool is_mem_cell() const; +}; + +struct RTLIL::CaseRule : public RTLIL::AttrObject +{ + std::vector compare; + std::vector actions; + std::vector switches; + + ~CaseRule(); + + bool empty() const; + + template void rewrite_sigspecs(T &functor); + template void rewrite_sigspecs2(T &functor); + RTLIL::CaseRule *clone() const; +}; + +struct RTLIL::SwitchRule : public RTLIL::AttrObject +{ + RTLIL::SigSpec signal; + std::vector cases; + + ~SwitchRule(); + + bool empty() const; + + template void rewrite_sigspecs(T &functor); + template void rewrite_sigspecs2(T &functor); + RTLIL::SwitchRule *clone() const; +}; + +struct RTLIL::MemWriteAction : RTLIL::AttrObject +{ + RTLIL::IdString memid; + RTLIL::SigSpec address; + RTLIL::SigSpec data; + RTLIL::SigSpec enable; + RTLIL::Const priority_mask; +}; + +struct RTLIL::SyncRule +{ + RTLIL::SyncType type; + RTLIL::SigSpec signal; + std::vector actions; + std::vector mem_write_actions; + + template void rewrite_sigspecs(T &functor); + template void rewrite_sigspecs2(T &functor); + RTLIL::SyncRule *clone() const; +}; + +struct RTLIL::Process : public RTLIL::AttrObject +{ + unsigned int hashidx_; + unsigned int hash() const { return hashidx_; } + +protected: + // use module->addProcess() and module->remove() to create or destroy processes + friend struct RTLIL::Module; + Process(); + ~Process(); + +public: + RTLIL::IdString name; + RTLIL::Module *module; + RTLIL::CaseRule root_case; + std::vector syncs; + + template void rewrite_sigspecs(T &functor); + template void rewrite_sigspecs2(T &functor); + RTLIL::Process *clone() const; +}; + + +inline RTLIL::SigBit::SigBit() : wire(NULL), data(RTLIL::State::S0) { } +inline RTLIL::SigBit::SigBit(RTLIL::State bit) : wire(NULL), data(bit) { } +inline RTLIL::SigBit::SigBit(bool bit) : wire(NULL), data(bit ? State::S1 : State::S0) { } +inline RTLIL::SigBit::SigBit(RTLIL::Wire *wire) : wire(wire), offset(0) { log_assert(wire && wire->width == 1); } +inline RTLIL::SigBit::SigBit(RTLIL::Wire *wire, int offset) : wire(wire), offset(offset) { log_assert(wire != nullptr); } +inline RTLIL::SigBit::SigBit(const RTLIL::SigChunk &chunk) : wire(chunk.wire) { log_assert(chunk.width == 1); if (wire) offset = chunk.offset; else data = chunk.data[0]; } +inline RTLIL::SigBit::SigBit(const RTLIL::SigChunk &chunk, int index) : wire(chunk.wire) { if (wire) offset = chunk.offset + index; else data = chunk.data[index]; } + +inline bool RTLIL::SigBit::operator<(const RTLIL::SigBit &other) const { + if (wire == other.wire) + return wire ? (offset < other.offset) : (data < other.data); + if (wire != nullptr && other.wire != nullptr) + return wire->name < other.wire->name; + return (wire != nullptr) < (other.wire != nullptr); +} + +inline bool RTLIL::SigBit::operator==(const RTLIL::SigBit &other) const { + return (wire == other.wire) && (wire ? (offset == other.offset) : (data == other.data)); +} + +inline bool RTLIL::SigBit::operator!=(const RTLIL::SigBit &other) const { + return (wire != other.wire) || (wire ? (offset != other.offset) : (data != other.data)); +} + +inline unsigned int RTLIL::SigBit::hash() const { + if (wire) + return mkhash_add(wire->name.hash(), offset); + return data; +} + +inline RTLIL::SigBit &RTLIL::SigSpecIterator::operator*() const { + return (*sig_p)[index]; +} + +inline const RTLIL::SigBit &RTLIL::SigSpecConstIterator::operator*() const { + return (*sig_p)[index]; +} + +inline RTLIL::SigBit::SigBit(const RTLIL::SigSpec &sig) { + log_assert(sig.size() == 1 && sig.chunks().size() == 1); + *this = SigBit(sig.chunks().front()); +} + +template +void RTLIL::Module::rewrite_sigspecs(T &functor) +{ + for (auto &it : cells_) + it.second->rewrite_sigspecs(functor); + for (auto &it : processes) + it.second->rewrite_sigspecs(functor); + for (auto &it : connections_) { + functor(it.first); + functor(it.second); + } +} + +template +void RTLIL::Module::rewrite_sigspecs2(T &functor) +{ + for (auto &it : cells_) + it.second->rewrite_sigspecs2(functor); + for (auto &it : processes) + it.second->rewrite_sigspecs2(functor); + for (auto &it : connections_) { + functor(it.first, it.second); + } +} + +template +void RTLIL::Cell::rewrite_sigspecs(T &functor) { + for (auto &it : connections_) + functor(it.second); +} + +template +void RTLIL::Cell::rewrite_sigspecs2(T &functor) { + for (auto &it : connections_) + functor(it.second); +} + +template +void RTLIL::CaseRule::rewrite_sigspecs(T &functor) { + for (auto &it : compare) + functor(it); + for (auto &it : actions) { + functor(it.first); + functor(it.second); + } + for (auto it : switches) + it->rewrite_sigspecs(functor); +} + +template +void RTLIL::CaseRule::rewrite_sigspecs2(T &functor) { + for (auto &it : compare) + functor(it); + for (auto &it : actions) { + functor(it.first, it.second); + } + for (auto it : switches) + it->rewrite_sigspecs2(functor); +} + +template +void RTLIL::SwitchRule::rewrite_sigspecs(T &functor) +{ + functor(signal); + for (auto it : cases) + it->rewrite_sigspecs(functor); +} + +template +void RTLIL::SwitchRule::rewrite_sigspecs2(T &functor) +{ + functor(signal); + for (auto it : cases) + it->rewrite_sigspecs2(functor); +} + +template +void RTLIL::SyncRule::rewrite_sigspecs(T &functor) +{ + functor(signal); + for (auto &it : actions) { + functor(it.first); + functor(it.second); + } + for (auto &it : mem_write_actions) { + functor(it.address); + functor(it.data); + functor(it.enable); + } +} + +template +void RTLIL::SyncRule::rewrite_sigspecs2(T &functor) +{ + functor(signal); + for (auto &it : actions) { + functor(it.first, it.second); + } + for (auto &it : mem_write_actions) { + functor(it.address); + functor(it.data); + functor(it.enable); + } +} + +template +void RTLIL::Process::rewrite_sigspecs(T &functor) +{ + root_case.rewrite_sigspecs(functor); + for (auto it : syncs) + it->rewrite_sigspecs(functor); +} + +template +void RTLIL::Process::rewrite_sigspecs2(T &functor) +{ + root_case.rewrite_sigspecs2(functor); + for (auto it : syncs) + it->rewrite_sigspecs2(functor); +} + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/satgen.h b/resources/netlist/resources/kernel/share/include/kernel/satgen.h new file mode 100644 index 0000000..da2cec2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/satgen.h @@ -0,0 +1,294 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef SATGEN_H +#define SATGEN_H + +#include "kernel/rtlil.h" +#include "kernel/sigtools.h" +#include "kernel/celltypes.h" +#include "kernel/macc.h" + +#include "libs/ezsat/ezminisat.h" + +YOSYS_NAMESPACE_BEGIN + +// defined in kernel/register.cc +extern struct SatSolver *yosys_satsolver_list; +extern struct SatSolver *yosys_satsolver; + +struct SatSolver +{ + string name; + SatSolver *next; + virtual ezSAT *create() = 0; + + SatSolver(string name) : name(name) { + next = yosys_satsolver_list; + yosys_satsolver_list = this; + } + + virtual ~SatSolver() { + auto p = &yosys_satsolver_list; + while (*p) { + if (*p == this) + *p = next; + else + p = &(*p)->next; + } + if (yosys_satsolver == this) + yosys_satsolver = yosys_satsolver_list; + } +}; + +struct ezSatPtr : public std::unique_ptr { + ezSatPtr() : unique_ptr(yosys_satsolver->create()) { } +}; + +struct SatGen +{ + ezSAT *ez; + SigMap *sigmap; + std::string prefix; + SigPool initial_state; + std::map asserts_a, asserts_en; + std::map assumes_a, assumes_en; + std::map> imported_signals; + std::map, bool> initstates; + bool ignore_div_by_zero; + bool model_undef; + + SatGen(ezSAT *ez, SigMap *sigmap, std::string prefix = std::string()) : + ez(ez), sigmap(sigmap), prefix(prefix), ignore_div_by_zero(false), model_undef(false) + { + } + + void setContext(SigMap *sigmap, std::string prefix = std::string()) + { + this->sigmap = sigmap; + this->prefix = prefix; + } + + std::vector importSigSpecWorker(RTLIL::SigSpec sig, std::string &pf, bool undef_mode, bool dup_undef) + { + log_assert(!undef_mode || model_undef); + sigmap->apply(sig); + + std::vector vec; + vec.reserve(GetSize(sig)); + + for (auto &bit : sig) + if (bit.wire == NULL) { + if (model_undef && dup_undef && bit == RTLIL::State::Sx) + vec.push_back(ez->frozen_literal()); + else + vec.push_back(bit == (undef_mode ? RTLIL::State::Sx : RTLIL::State::S1) ? ez->CONST_TRUE : ez->CONST_FALSE); + } else { + std::string name = pf + (bit.wire->width == 1 ? stringf("%s", log_id(bit.wire)) : stringf("%s [%d]", log_id(bit.wire->name), bit.offset)); + vec.push_back(ez->frozen_literal(name)); + imported_signals[pf][bit] = vec.back(); + } + return vec; + } + + std::vector importSigSpec(RTLIL::SigSpec sig, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return importSigSpecWorker(sig, pf, false, false); + } + + std::vector importDefSigSpec(RTLIL::SigSpec sig, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return importSigSpecWorker(sig, pf, false, true); + } + + std::vector importUndefSigSpec(RTLIL::SigSpec sig, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = "undef:" + prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return importSigSpecWorker(sig, pf, true, false); + } + + int importSigBit(RTLIL::SigBit bit, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return importSigSpecWorker(bit, pf, false, false).front(); + } + + int importDefSigBit(RTLIL::SigBit bit, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return importSigSpecWorker(bit, pf, false, true).front(); + } + + int importUndefSigBit(RTLIL::SigBit bit, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = "undef:" + prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return importSigSpecWorker(bit, pf, true, false).front(); + } + + bool importedSigBit(RTLIL::SigBit bit, int timestep = -1) + { + log_assert(timestep != 0); + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + return imported_signals[pf].count(bit) != 0; + } + + void getAsserts(RTLIL::SigSpec &sig_a, RTLIL::SigSpec &sig_en, int timestep = -1) + { + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + sig_a = asserts_a[pf]; + sig_en = asserts_en[pf]; + } + + void getAssumes(RTLIL::SigSpec &sig_a, RTLIL::SigSpec &sig_en, int timestep = -1) + { + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + sig_a = assumes_a[pf]; + sig_en = assumes_en[pf]; + } + + int importAsserts(int timestep = -1) + { + std::vector check_bits, enable_bits; + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + if (model_undef) { + check_bits = ez->vec_and(ez->vec_not(importUndefSigSpec(asserts_a[pf], timestep)), importDefSigSpec(asserts_a[pf], timestep)); + enable_bits = ez->vec_and(ez->vec_not(importUndefSigSpec(asserts_en[pf], timestep)), importDefSigSpec(asserts_en[pf], timestep)); + } else { + check_bits = importDefSigSpec(asserts_a[pf], timestep); + enable_bits = importDefSigSpec(asserts_en[pf], timestep); + } + return ez->vec_reduce_and(ez->vec_or(check_bits, ez->vec_not(enable_bits))); + } + + int importAssumes(int timestep = -1) + { + std::vector check_bits, enable_bits; + std::string pf = prefix + (timestep == -1 ? "" : stringf("@%d:", timestep)); + if (model_undef) { + check_bits = ez->vec_and(ez->vec_not(importUndefSigSpec(assumes_a[pf], timestep)), importDefSigSpec(assumes_a[pf], timestep)); + enable_bits = ez->vec_and(ez->vec_not(importUndefSigSpec(assumes_en[pf], timestep)), importDefSigSpec(assumes_en[pf], timestep)); + } else { + check_bits = importDefSigSpec(assumes_a[pf], timestep); + enable_bits = importDefSigSpec(assumes_en[pf], timestep); + } + return ez->vec_reduce_and(ez->vec_or(check_bits, ez->vec_not(enable_bits))); + } + + int signals_eq(RTLIL::SigSpec lhs, RTLIL::SigSpec rhs, int timestep_lhs = -1, int timestep_rhs = -1) + { + if (timestep_rhs < 0) + timestep_rhs = timestep_lhs; + + log_assert(lhs.size() == rhs.size()); + + std::vector vec_lhs = importSigSpec(lhs, timestep_lhs); + std::vector vec_rhs = importSigSpec(rhs, timestep_rhs); + + if (!model_undef) + return ez->vec_eq(vec_lhs, vec_rhs); + + std::vector undef_lhs = importUndefSigSpec(lhs, timestep_lhs); + std::vector undef_rhs = importUndefSigSpec(rhs, timestep_rhs); + + std::vector eq_bits; + for (int i = 0; i < lhs.size(); i++) + eq_bits.push_back(ez->AND(ez->IFF(undef_lhs.at(i), undef_rhs.at(i)), + ez->IFF(ez->OR(vec_lhs.at(i), undef_lhs.at(i)), ez->OR(vec_rhs.at(i), undef_rhs.at(i))))); + return ez->expression(ezSAT::OpAnd, eq_bits); + } + + void extendSignalWidth(std::vector &vec_a, std::vector &vec_b, RTLIL::Cell *cell, size_t y_width = 0, bool forced_signed = false) + { + bool is_signed = forced_signed; + if (!forced_signed && cell->parameters.count(ID::A_SIGNED) > 0 && cell->parameters.count(ID::B_SIGNED) > 0) + is_signed = cell->parameters[ID::A_SIGNED].as_bool() && cell->parameters[ID::B_SIGNED].as_bool(); + while (vec_a.size() < vec_b.size() || vec_a.size() < y_width) + vec_a.push_back(is_signed && vec_a.size() > 0 ? vec_a.back() : ez->CONST_FALSE); + while (vec_b.size() < vec_a.size() || vec_b.size() < y_width) + vec_b.push_back(is_signed && vec_b.size() > 0 ? vec_b.back() : ez->CONST_FALSE); + } + + void extendSignalWidth(std::vector &vec_a, std::vector &vec_b, std::vector &vec_y, RTLIL::Cell *cell, bool forced_signed = false) + { + extendSignalWidth(vec_a, vec_b, cell, vec_y.size(), forced_signed); + while (vec_y.size() < vec_a.size()) + vec_y.push_back(ez->literal()); + } + + void extendSignalWidthUnary(std::vector &vec_a, std::vector &vec_y, RTLIL::Cell *cell, bool forced_signed = false) + { + bool is_signed = forced_signed || (cell->parameters.count(ID::A_SIGNED) > 0 && cell->parameters[ID::A_SIGNED].as_bool()); + while (vec_a.size() < vec_y.size()) + vec_a.push_back(is_signed && vec_a.size() > 0 ? vec_a.back() : ez->CONST_FALSE); + while (vec_y.size() < vec_a.size()) + vec_y.push_back(ez->literal()); + } + + void undefGating(std::vector &vec_y, std::vector &vec_yy, std::vector &vec_undef) + { + log_assert(model_undef); + log_assert(vec_y.size() == vec_yy.size()); + if (vec_y.size() > vec_undef.size()) { + std::vector trunc_y(vec_y.begin(), vec_y.begin() + vec_undef.size()); + std::vector trunc_yy(vec_yy.begin(), vec_yy.begin() + vec_undef.size()); + ez->assume(ez->expression(ezSAT::OpAnd, ez->vec_or(vec_undef, ez->vec_iff(trunc_y, trunc_yy)))); + } else { + log_assert(vec_y.size() == vec_undef.size()); + ez->assume(ez->expression(ezSAT::OpAnd, ez->vec_or(vec_undef, ez->vec_iff(vec_y, vec_yy)))); + } + } + + std::pair, std::vector> mux(int s, int undef_s, const std::vector &a, const std::vector &undef_a, const std::vector &b, const std::vector &undef_b) { + std::vector res; + std::vector undef_res; + res = ez->vec_ite(s, b, a); + if (model_undef) { + std::vector unequal_ab = ez->vec_not(ez->vec_iff(a, b)); + std::vector undef_ab = ez->vec_or(unequal_ab, ez->vec_or(undef_a, undef_b)); + undef_res = ez->vec_ite(undef_s, undef_ab, ez->vec_ite(s, undef_b, undef_a)); + } + return std::make_pair(res, undef_res); + } + + void undefGating(int y, int yy, int undef) + { + ez->assume(ez->OR(undef, ez->IFF(y, yy))); + } + + void setInitState(int timestep) + { + auto key = make_pair(prefix, timestep); + log_assert(initstates.count(key) == 0 || initstates.at(key) == true); + initstates[key] = true; + } + + bool importCell(RTLIL::Cell *cell, int timestep = -1); +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/sigtools.h b/resources/netlist/resources/kernel/share/include/kernel/sigtools.h new file mode 100644 index 0000000..4ea43d7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/sigtools.h @@ -0,0 +1,347 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef SIGTOOLS_H +#define SIGTOOLS_H + +#include "kernel/yosys.h" + +YOSYS_NAMESPACE_BEGIN + +struct SigPool +{ + struct bitDef_t : public std::pair { + bitDef_t() : std::pair(NULL, 0) { } + bitDef_t(const RTLIL::SigBit &bit) : std::pair(bit.wire, bit.offset) { } + unsigned int hash() const { return first->name.hash() + second; } + }; + + pool bits; + + void clear() + { + bits.clear(); + } + + void add(const RTLIL::SigSpec &sig) + { + for (auto &bit : sig) + if (bit.wire != NULL) + bits.insert(bit); + } + + void add(const SigPool &other) + { + for (auto &bit : other.bits) + bits.insert(bit); + } + + void del(const RTLIL::SigSpec &sig) + { + for (auto &bit : sig) + if (bit.wire != NULL) + bits.erase(bit); + } + + void del(const SigPool &other) + { + for (auto &bit : other.bits) + bits.erase(bit); + } + + void expand(const RTLIL::SigSpec &from, const RTLIL::SigSpec &to) + { + log_assert(GetSize(from) == GetSize(to)); + for (int i = 0; i < GetSize(from); i++) { + bitDef_t bit_from(from[i]), bit_to(to[i]); + if (bit_from.first != NULL && bit_to.first != NULL && bits.count(bit_from) > 0) + bits.insert(bit_to); + } + } + + RTLIL::SigSpec extract(const RTLIL::SigSpec &sig) const + { + RTLIL::SigSpec result; + for (auto &bit : sig) + if (bit.wire != NULL && bits.count(bit)) + result.append(bit); + return result; + } + + RTLIL::SigSpec remove(const RTLIL::SigSpec &sig) const + { + RTLIL::SigSpec result; + for (auto &bit : sig) + if (bit.wire != NULL && bits.count(bit) == 0) + result.append(bit); + return result; + } + + bool check(const RTLIL::SigBit &bit) const + { + return bit.wire != NULL && bits.count(bit); + } + + bool check_any(const RTLIL::SigSpec &sig) const + { + for (auto &bit : sig) + if (bit.wire != NULL && bits.count(bit)) + return true; + return false; + } + + bool check_all(const RTLIL::SigSpec &sig) const + { + for (auto &bit : sig) + if (bit.wire != NULL && bits.count(bit) == 0) + return false; + return true; + } + + RTLIL::SigSpec export_one() const + { + for (auto &bit : bits) + return RTLIL::SigSpec(bit.first, bit.second); + return RTLIL::SigSpec(); + } + + RTLIL::SigSpec export_all() const + { + pool sig; + for (auto &bit : bits) + sig.insert(RTLIL::SigBit(bit.first, bit.second)); + return sig; + } + + size_t size() const + { + return bits.size(); + } +}; + +template +struct SigSet +{ + static_assert(!std::is_same::value, "Default value for `Compare' class not found for SigSet. Please specify."); + + struct bitDef_t : public std::pair { + bitDef_t() : std::pair(NULL, 0) { } + bitDef_t(const RTLIL::SigBit &bit) : std::pair(bit.wire, bit.offset) { } + unsigned int hash() const { return first->name.hash() + second; } + }; + + dict> bits; + + void clear() + { + bits.clear(); + } + + void insert(const RTLIL::SigSpec &sig, T data) + { + for (const auto &bit : sig) + if (bit.wire != NULL) + bits[bit].insert(data); + } + + void insert(const RTLIL::SigSpec& sig, const std::set &data) + { + for (const auto &bit : sig) + if (bit.wire != NULL) + bits[bit].insert(data.begin(), data.end()); + } + + void erase(const RTLIL::SigSpec& sig) + { + for (const auto &bit : sig) + if (bit.wire != NULL) + bits[bit].clear(); + } + + void erase(const RTLIL::SigSpec &sig, T data) + { + for (const auto &bit : sig) + if (bit.wire != NULL) + bits[bit].erase(data); + } + + void erase(const RTLIL::SigSpec &sig, const std::set &data) + { + for (const auto &bit : sig) + if (bit.wire != NULL) + bits[bit].erase(data.begin(), data.end()); + } + + void find(const RTLIL::SigSpec &sig, std::set &result) + { + for (const auto &bit : sig) + if (bit.wire != NULL) { + auto &data = bits[bit]; + result.insert(data.begin(), data.end()); + } + } + + void find(const RTLIL::SigSpec &sig, pool &result) + { + for (const auto &bit : sig) + if (bit.wire != NULL) { + auto &data = bits[bit]; + result.insert(data.begin(), data.end()); + } + } + + std::set find(const RTLIL::SigSpec &sig) + { + std::set result; + find(sig, result); + return result; + } + + bool has(const RTLIL::SigSpec &sig) + { + for (auto &bit : sig) + if (bit.wire != NULL && bits.count(bit)) + return true; + return false; + } +}; + +template +class SigSet::value>::type> : public SigSet> {}; +template +using sort_by_name_id_guard = typename std::enable_if::value>::type; +template +class SigSet> : public SigSet::type>> {}; + +struct SigMap +{ + mfp database; + + SigMap(RTLIL::Module *module = NULL) + { + if (module != NULL) + set(module); + } + + void swap(SigMap &other) + { + database.swap(other.database); + } + + void clear() + { + database.clear(); + } + + void set(RTLIL::Module *module) + { + int bitcount = 0; + for (auto &it : module->connections()) + bitcount += it.first.size(); + + database.clear(); + database.reserve(bitcount); + + for (auto &it : module->connections()) + add(it.first, it.second); + } + + void add(const RTLIL::SigSpec& from, const RTLIL::SigSpec& to) + { + log_assert(GetSize(from) == GetSize(to)); + + for (int i = 0; i < GetSize(from); i++) + { + int bfi = database.lookup(from[i]); + int bti = database.lookup(to[i]); + + const RTLIL::SigBit &bf = database[bfi]; + const RTLIL::SigBit &bt = database[bti]; + + if (bf.wire || bt.wire) + { + database.imerge(bfi, bti); + + if (bf.wire == nullptr) + database.ipromote(bfi); + + if (bt.wire == nullptr) + database.ipromote(bti); + } + } + } + + void add(const RTLIL::SigBit &bit) + { + const auto &b = database.find(bit); + if (b.wire != nullptr) + database.promote(bit); + } + + void add(const RTLIL::SigSpec &sig) + { + for (const auto &bit : sig) + add(bit); + } + + inline void add(Wire *wire) { return add(RTLIL::SigSpec(wire)); } + + void apply(RTLIL::SigBit &bit) const + { + bit = database.find(bit); + } + + void apply(RTLIL::SigSpec &sig) const + { + for (auto &bit : sig) + apply(bit); + } + + RTLIL::SigBit operator()(RTLIL::SigBit bit) const + { + apply(bit); + return bit; + } + + RTLIL::SigSpec operator()(RTLIL::SigSpec sig) const + { + apply(sig); + return sig; + } + + RTLIL::SigSpec operator()(RTLIL::Wire *wire) const + { + SigSpec sig(wire); + apply(sig); + return sig; + } + + RTLIL::SigSpec allbits() const + { + RTLIL::SigSpec sig; + for (const auto &bit : database) + if (bit.wire != nullptr) + sig.append(bit); + return sig; + } +}; + +YOSYS_NAMESPACE_END + +#endif /* SIGTOOLS_H */ diff --git a/resources/netlist/resources/kernel/share/include/kernel/utils.h b/resources/netlist/resources/kernel/share/include/kernel/utils.h new file mode 100644 index 0000000..d37f045 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/utils.h @@ -0,0 +1,214 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// This file contains various c++ utility routines and helper classes that +// do not depend on any other components of yosys (except stuff like log_*). + +#include "kernel/yosys.h" + +#ifndef UTILS_H +#define UTILS_H + +YOSYS_NAMESPACE_BEGIN + +// ------------------------------------------------ +// A map-like container, but you can save and restore the state +// ------------------------------------------------ + +template> +struct stackmap +{ +private: + std::vector> backup_state; + dict current_state; + static T empty_tuple; + +public: + stackmap() { } + stackmap(const dict &other) : current_state(other) { } + + template + void operator=(const Other &other) + { + for (auto &it : current_state) + if (!backup_state.empty() && backup_state.back().count(it.first) == 0) + backup_state.back()[it.first] = new T(it.second); + current_state.clear(); + + for (auto &it : other) + set(it.first, it.second); + } + + bool has(const Key &k) + { + return current_state.count(k) != 0; + } + + void set(const Key &k, const T &v) + { + if (!backup_state.empty() && backup_state.back().count(k) == 0) + backup_state.back()[k] = current_state.count(k) ? new T(current_state.at(k)) : nullptr; + current_state[k] = v; + } + + void unset(const Key &k) + { + if (!backup_state.empty() && backup_state.back().count(k) == 0) + backup_state.back()[k] = current_state.count(k) ? new T(current_state.at(k)) : nullptr; + current_state.erase(k); + } + + const T &get(const Key &k) + { + if (current_state.count(k) == 0) + return empty_tuple; + return current_state.at(k); + } + + void reset(const Key &k) + { + for (int i = GetSize(backup_state)-1; i >= 0; i--) + if (backup_state[i].count(k) != 0) { + if (backup_state[i].at(k) == nullptr) + current_state.erase(k); + else + current_state[k] = *backup_state[i].at(k); + return; + } + current_state.erase(k); + } + + const dict &stdmap() + { + return current_state; + } + + void save() + { + backup_state.resize(backup_state.size()+1); + } + + void restore() + { + log_assert(!backup_state.empty()); + for (auto &it : backup_state.back()) + if (it.second != nullptr) { + current_state[it.first] = *it.second; + delete it.second; + } else + current_state.erase(it.first); + backup_state.pop_back(); + } + + ~stackmap() + { + while (!backup_state.empty()) + restore(); + } +}; + + +// ------------------------------------------------ +// A simple class for topological sorting +// ------------------------------------------------ + +template> +struct TopoSort +{ + bool analyze_loops, found_loops; + std::map, C> database; + std::set> loops; + std::vector sorted; + + TopoSort() + { + analyze_loops = true; + found_loops = false; + } + + void node(T n) + { + if (database.count(n) == 0) + database[n] = std::set(); + } + + void edge(T left, T right) + { + node(left); + database[right].insert(left); + } + + void sort_worker(const T &n, std::set &marked_cells, std::set &active_cells, std::vector &active_stack) + { + if (active_cells.count(n)) { + found_loops = true; + if (analyze_loops) { + std::set loop; + for (int i = GetSize(active_stack)-1; i >= 0; i--) { + loop.insert(active_stack[i]); + if (active_stack[i] == n) + break; + } + loops.insert(loop); + } + return; + } + + if (marked_cells.count(n)) + return; + + if (!database.at(n).empty()) + { + if (analyze_loops) + active_stack.push_back(n); + active_cells.insert(n); + + for (auto &left_n : database.at(n)) + sort_worker(left_n, marked_cells, active_cells, active_stack); + + if (analyze_loops) + active_stack.pop_back(); + active_cells.erase(n); + } + + marked_cells.insert(n); + sorted.push_back(n); + } + + bool sort() + { + loops.clear(); + sorted.clear(); + found_loops = false; + + std::set marked_cells; + std::set active_cells; + std::vector active_stack; + + for (auto &it : database) + sort_worker(it.first, marked_cells, active_cells, active_stack); + + log_assert(GetSize(sorted) == GetSize(database)); + return !found_loops; + } +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/kernel/yosys.h b/resources/netlist/resources/kernel/share/include/kernel/yosys.h new file mode 100644 index 0000000..b5b1553 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/kernel/yosys.h @@ -0,0 +1,381 @@ +/* -*- c++ -*- + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + + +// *** NOTE TO THE READER *** +// +// Maybe you have just opened this file in the hope to learn more about the +// Yosys API. Let me congratulate you on this great decision! ;) +// +// If you want to know how the design is represented by Yosys in the memory, +// you should read "kernel/rtlil.h". +// +// If you want to know how to register a command with Yosys, you could read +// "kernel/register.h", but it would be easier to just look at a simple +// example instead. A simple one would be "passes/cmds/log.cc". +// +// This header is very boring. It just defines some general things that +// belong nowhere else and includes the interesting headers. +// +// Find more information in the "guidelines/GettingStarted" file. + + +#ifndef YOSYS_H +#define YOSYS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifdef WITH_PYTHON +#include +#endif + +#ifndef _YOSYS_ +# error It looks like you are trying to build Yosys without the config defines set. \ + When building Yosys with a custom make system, make sure you set all the \ + defines the Yosys Makefile would set for your build configuration. +#endif + +#ifdef YOSYS_ENABLE_TCL +# include +# ifdef YOSYS_MXE_HACKS +extern Tcl_Command Tcl_CreateCommand(Tcl_Interp *interp, const char *cmdName, Tcl_CmdProc *proc, ClientData clientData, Tcl_CmdDeleteProc *deleteProc); +extern Tcl_Interp *Tcl_CreateInterp(void); +extern void Tcl_DeleteInterp(Tcl_Interp *interp); +extern int Tcl_Eval(Tcl_Interp *interp, const char *script); +extern int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName); +extern void Tcl_Finalize(void); +extern int Tcl_GetCommandInfo(Tcl_Interp *interp, const char *cmdName, Tcl_CmdInfo *infoPtr); +extern const char *Tcl_GetStringResult(Tcl_Interp *interp); +extern Tcl_Obj *Tcl_NewStringObj(const char *bytes, int length); +extern Tcl_Obj *Tcl_NewIntObj(int intValue); +extern Tcl_Obj *Tcl_NewListObj(int objc, Tcl_Obj *const objv[]); +extern Tcl_Obj *Tcl_ObjSetVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, Tcl_Obj *newValuePtr, int flags); +# endif +# undef CONST +# undef INLINE +#endif + +#ifdef _WIN32 +# undef NOMINMAX +# define NOMINMAX 1 +# undef YY_NO_UNISTD_H +# define YY_NO_UNISTD_H 1 + +# include +# include +# include + +# define strtok_r strtok_s +# define strdup _strdup +# define snprintf _snprintf +# define getcwd _getcwd +# define mkdir _mkdir +# define popen _popen +# define pclose _pclose + +# ifndef __MINGW32__ +# define PATH_MAX MAX_PATH +# define isatty _isatty +# define fileno _fileno +# endif + +// The following defines conflict with our identifiers: +# undef CONST +// `wingdi.h` defines a TRANSPARENT macro that conflicts with X(TRANSPARENT) entry in kernel/constids.inc +# undef TRANSPARENT +#endif + +#ifndef PATH_MAX +# define PATH_MAX 4096 +#endif + +#define YOSYS_NAMESPACE Yosys +#define PRIVATE_NAMESPACE_BEGIN namespace { +#define PRIVATE_NAMESPACE_END } +#define YOSYS_NAMESPACE_BEGIN namespace Yosys { +#define YOSYS_NAMESPACE_END } +#define YOSYS_NAMESPACE_PREFIX Yosys:: +#define USING_YOSYS_NAMESPACE using namespace Yosys; + +#if defined(__GNUC__) || defined(__clang__) +# define YS_ATTRIBUTE(...) __attribute__((__VA_ARGS__)) +#elif defined(_MSC_VER) +# define YS_ATTRIBUTE(...) +#else +# define YS_ATTRIBUTE(...) +#endif + +#if defined(__GNUC__) || defined(__clang__) +# define YS_MAYBE_UNUSED __attribute__((__unused__)) +#else +# define YS_MAYBE_UNUSED +#endif + +#if __cplusplus >= 201703L +# define YS_FALLTHROUGH [[fallthrough]]; +#elif defined(__clang__) +# define YS_FALLTHROUGH [[clang::fallthrough]]; +#elif defined(__GNUC__) +# define YS_FALLTHROUGH [[gnu::fallthrough]]; +#else +# define YS_FALLTHROUGH +#endif + +YOSYS_NAMESPACE_BEGIN + +// Note: All headers included in hashlib.h must be included +// outside of YOSYS_NAMESPACE before this or bad things will happen. +#ifdef HASHLIB_H +# undef HASHLIB_H +# include "kernel/hashlib.h" +#else +# include "kernel/hashlib.h" +# undef HASHLIB_H +#endif + +using std::vector; +using std::string; +using std::tuple; +using std::pair; + +using std::make_tuple; +using std::make_pair; +using std::get; +using std::min; +using std::max; + +// A primitive shared string implementation that does not +// move its .c_str() when the object is copied or moved. +struct shared_str { + std::shared_ptr content; + shared_str() { } + shared_str(string s) { content = std::shared_ptr(new string(s)); } + shared_str(const char *s) { content = std::shared_ptr(new string(s)); } + const char *c_str() const { return content->c_str(); } + const string &str() const { return *content; } + bool operator==(const shared_str &other) const { return *content == *other.content; } + unsigned int hash() const { return hashlib::hash_ops::hash(*content); } +}; + +using hashlib::mkhash; +using hashlib::mkhash_init; +using hashlib::mkhash_add; +using hashlib::mkhash_xorshift; +using hashlib::hash_ops; +using hashlib::hash_cstr_ops; +using hashlib::hash_ptr_ops; +using hashlib::hash_obj_ops; +using hashlib::dict; +using hashlib::idict; +using hashlib::pool; +using hashlib::mfp; + +namespace RTLIL { + struct IdString; + struct Const; + struct SigBit; + struct SigSpec; + struct Wire; + struct Cell; + struct Memory; + struct Process; + struct Module; + struct Design; + struct Monitor; + enum State : unsigned char; +} + +namespace AST { + struct AstNode; +} + +using RTLIL::IdString; +using RTLIL::Const; +using RTLIL::SigBit; +using RTLIL::SigSpec; +using RTLIL::Wire; +using RTLIL::Cell; +using RTLIL::Module; +using RTLIL::Design; + +namespace hashlib { + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; + template<> struct hash_ops : hash_obj_ops {}; +} + +void memhasher_on(); +void memhasher_off(); +void memhasher_do(); + +extern bool memhasher_active; +inline void memhasher() { if (memhasher_active) memhasher_do(); } + +void yosys_banner(); +int ceil_log2(int x) YS_ATTRIBUTE(const); +std::string stringf(const char *fmt, ...) YS_ATTRIBUTE(format(printf, 1, 2)); +std::string vstringf(const char *fmt, va_list ap); +int readsome(std::istream &f, char *s, int n); +std::string next_token(std::string &text, const char *sep = " \t\r\n", bool long_strings = false); +std::vector split_tokens(const std::string &text, const char *sep = " \t\r\n"); +bool patmatch(const char *pattern, const char *string); +#if !defined(YOSYS_DISABLE_SPAWN) +int run_command(const std::string &command, std::function process_line = std::function()); +#endif +std::string get_base_tmpdir(); +std::string make_temp_file(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX"); +std::string make_temp_dir(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX"); +bool check_file_exists(std::string filename, bool is_exec = false); +bool is_absolute_path(std::string filename); +void remove_directory(std::string dirname); +std::string escape_filename_spaces(const std::string& filename); + +template int GetSize(const T &obj) { return obj.size(); } +inline int GetSize(RTLIL::Wire *wire); + +extern int autoidx; +extern int yosys_xtrace; + +YOSYS_NAMESPACE_END + +#include "kernel/log.h" +#include "kernel/rtlil.h" +#include "kernel/register.h" + +YOSYS_NAMESPACE_BEGIN + +using RTLIL::State; +using RTLIL::SigChunk; +using RTLIL::SigSig; + +namespace hashlib { + template<> struct hash_ops : hash_ops {}; +} + +void yosys_setup(); + +#ifdef WITH_PYTHON +bool yosys_already_setup(); +#endif + +void yosys_shutdown(); + +#ifdef YOSYS_ENABLE_TCL +Tcl_Interp *yosys_get_tcl_interp(); +#endif + +extern RTLIL::Design *yosys_design; + +RTLIL::IdString new_id(std::string file, int line, std::string func); +RTLIL::IdString new_id_suffix(std::string file, int line, std::string func, std::string suffix); + +#define NEW_ID \ + YOSYS_NAMESPACE_PREFIX new_id(__FILE__, __LINE__, __FUNCTION__) +#define NEW_ID_SUFFIX(suffix) \ + YOSYS_NAMESPACE_PREFIX new_id_suffix(__FILE__, __LINE__, __FUNCTION__, suffix) + +// Create a statically allocated IdString object, using for example ID::A or ID($add). +// +// Recipe for Converting old code that is using conversion of strings like ID::A and +// "$add" for creating IdStrings: Run below SED command on the .cc file and then use for +// example "meld foo.cc foo.cc.orig" to manually compile errors, if necessary. +// +// sed -i.orig -r 's/"\\\\([a-zA-Z0-9_]+)"/ID(\1)/g; s/"(\$[a-zA-Z0-9_]+)"/ID(\1)/g;' +// +#define ID(_id) ([]() { const char *p = "\\" #_id, *q = p[1] == '$' ? p+1 : p; \ + static const YOSYS_NAMESPACE_PREFIX RTLIL::IdString id(q); return id; })() +namespace ID = RTLIL::ID; + +RTLIL::Design *yosys_get_design(); +std::string proc_self_dirname(); +std::string proc_share_dirname(); +std::string proc_program_prefix(); +const char *create_prompt(RTLIL::Design *design, int recursion_counter); +std::vector glob_filename(const std::string &filename_pattern); +void rewrite_filename(std::string &filename); + +void run_pass(std::string command, RTLIL::Design *design = nullptr); +bool run_frontend(std::string filename, std::string command, RTLIL::Design *design = nullptr, std::string *from_to_label = nullptr); +void run_backend(std::string filename, std::string command, RTLIL::Design *design = nullptr); +void shell(RTLIL::Design *design); + +// journal of all input and output files read (for "yosys -E") +extern std::set yosys_input_files, yosys_output_files; + +// from kernel/version_*.o (cc source generated from Makefile) +extern const char *yosys_version_str; + +// from passes/cmds/design.cc +extern std::map saved_designs; +extern std::vector pushed_designs; + +// from passes/cmds/pluginc.cc +extern std::map loaded_plugins; +#ifdef WITH_PYTHON +extern std::map loaded_python_plugins; +#endif +extern std::map loaded_plugin_aliases; +void load_plugin(std::string filename, std::vector aliases); + +extern std::string yosys_share_dirname; +extern std::string yosys_abc_executable; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/include/libs/ezsat/ezminisat.h b/resources/netlist/resources/kernel/share/include/libs/ezsat/ezminisat.h new file mode 100644 index 0000000..92a91d7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/libs/ezsat/ezminisat.h @@ -0,0 +1,71 @@ +/* + * ezSAT -- A simple and easy to use CNF generator for SAT solvers + * + * Copyright (C) 2013 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef EZMINISAT_H +#define EZMINISAT_H + +#define EZMINISAT_SIMPSOLVER 1 +#define EZMINISAT_VERBOSITY 0 +#define EZMINISAT_INCREMENTAL 1 + +#include "ezsat.h" +#include + +// minisat is using limit macros and format macros in their headers that +// can be the source of some troubles when used from c++11. therefore we +// don't force ezSAT users to use minisat headers.. +namespace Minisat { + class Solver; + class SimpSolver; +} + +class ezMiniSAT : public ezSAT +{ +private: +#if EZMINISAT_SIMPSOLVER + typedef Minisat::SimpSolver Solver; +#else + typedef Minisat::Solver Solver; +#endif + Solver *minisatSolver; + std::vector minisatVars; + bool foundContradiction; + +#if EZMINISAT_SIMPSOLVER && EZMINISAT_INCREMENTAL + std::set cnfFrozenVars; +#endif + +#ifndef _WIN32 + static ezMiniSAT *alarmHandlerThis; + static clock_t alarmHandlerTimeout; + static void alarmHandler(int); +#endif + +public: + ezMiniSAT(); + virtual ~ezMiniSAT(); + virtual void clear(); +#if EZMINISAT_SIMPSOLVER && EZMINISAT_INCREMENTAL + virtual void freeze(int id); + virtual bool eliminated(int idx); +#endif + virtual bool solver(const std::vector &modelExpressions, std::vector &modelValues, const std::vector &assumptions); +}; + +#endif diff --git a/resources/netlist/resources/kernel/share/include/libs/ezsat/ezsat.h b/resources/netlist/resources/kernel/share/include/libs/ezsat/ezsat.h new file mode 100644 index 0000000..7f3bdf6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/libs/ezsat/ezsat.h @@ -0,0 +1,359 @@ +/* + * ezSAT -- A simple and easy to use CNF generator for SAT solvers + * + * Copyright (C) 2013 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef EZSAT_H +#define EZSAT_H + +#include +#include +#include +#include +#include +#include + +class ezSAT +{ + // each token (terminal or non-terminal) is represented by an integer number + // + // the zero token: + // the number zero is not used as valid token number and is used to encode + // unused parameters for the functions. + // + // positive numbers are literals, with 1 = CONST_TRUE and 2 = CONST_FALSE; + // + // negative numbers are non-literal expressions. each expression is represented + // by an operator id and a list of expressions (literals or non-literals). + +public: + enum OpId { + OpNot, OpAnd, OpOr, OpXor, OpIFF, OpITE + }; + + static const int CONST_TRUE; + static const int CONST_FALSE; + +private: + bool flag_keep_cnf; + bool flag_non_incremental; + + bool non_incremental_solve_used_up; + + std::map literalsCache; + std::vector literals; + + std::map>, int> expressionsCache; + std::vector>> expressions; + + bool cnfConsumed; + int cnfVariableCount, cnfClausesCount; + std::vector cnfLiteralVariables, cnfExpressionVariables; + std::vector> cnfClauses, cnfClausesBackup; + + void add_clause(const std::vector &args); + void add_clause(const std::vector &args, bool argsPolarity, int a = 0, int b = 0, int c = 0); + void add_clause(int a, int b = 0, int c = 0); + + int bind_cnf_not(const std::vector &args); + int bind_cnf_and(const std::vector &args); + int bind_cnf_or(const std::vector &args); + +protected: + void preSolverCallback(); + +public: + int solverTimeout; + bool solverTimoutStatus; + + ezSAT(); + virtual ~ezSAT(); + + unsigned int statehash; + void addhash(unsigned int); + + void keep_cnf() { flag_keep_cnf = true; } + void non_incremental() { flag_non_incremental = true; } + + bool mode_keep_cnf() const { return flag_keep_cnf; } + bool mode_non_incremental() const { return flag_non_incremental; } + + // manage expressions + + int value(bool val); + int literal(); + int literal(const std::string &name); + int frozen_literal(); + int frozen_literal(const std::string &name); + int expression(OpId op, int a = 0, int b = 0, int c = 0, int d = 0, int e = 0, int f = 0); + int expression(OpId op, const std::vector &args); + + void lookup_literal(int id, std::string &name) const; + const std::string &lookup_literal(int id) const; + + void lookup_expression(int id, OpId &op, std::vector &args) const; + const std::vector &lookup_expression(int id, OpId &op) const; + + int parse_string(const std::string &text); + std::string to_string(int id) const; + + int numLiterals() const { return literals.size(); } + int numExpressions() const { return expressions.size(); } + + int eval(int id, const std::vector &values) const; + + // SAT solver interface + // If you are planning on using the solver API (and not simply create a CNF) you must use a child class + // of ezSAT that actually implements a solver backend, such as ezMiniSAT (see ezminisat.h). + + virtual bool solver(const std::vector &modelExpressions, std::vector &modelValues, const std::vector &assumptions); + + bool solve(const std::vector &modelExpressions, std::vector &modelValues, const std::vector &assumptions) { + return solver(modelExpressions, modelValues, assumptions); + } + + bool solve(const std::vector &modelExpressions, std::vector &modelValues, int a = 0, int b = 0, int c = 0, int d = 0, int e = 0, int f = 0) { + std::vector assumptions; + if (a != 0) assumptions.push_back(a); + if (b != 0) assumptions.push_back(b); + if (c != 0) assumptions.push_back(c); + if (d != 0) assumptions.push_back(d); + if (e != 0) assumptions.push_back(e); + if (f != 0) assumptions.push_back(f); + return solver(modelExpressions, modelValues, assumptions); + } + + bool solve(int a = 0, int b = 0, int c = 0, int d = 0, int e = 0, int f = 0) { + std::vector assumptions, modelExpressions; + std::vector modelValues; + if (a != 0) assumptions.push_back(a); + if (b != 0) assumptions.push_back(b); + if (c != 0) assumptions.push_back(c); + if (d != 0) assumptions.push_back(d); + if (e != 0) assumptions.push_back(e); + if (f != 0) assumptions.push_back(f); + return solver(modelExpressions, modelValues, assumptions); + } + + void setSolverTimeout(int newTimeoutSeconds) { + solverTimeout = newTimeoutSeconds; + } + + bool getSolverTimoutStatus() { + return solverTimoutStatus; + } + + // manage CNF (usually only accessed by SAT solvers) + + virtual void clear(); + virtual void freeze(int id); + virtual bool eliminated(int idx); + void assume(int id); + void assume(int id, int context_id) { assume(OR(id, NOT(context_id))); } + int bind(int id, bool auto_freeze = true); + int bound(int id) const; + + int numCnfVariables() const { return cnfVariableCount; } + int numCnfClauses() const { return cnfClausesCount; } + const std::vector> &cnf() const { return cnfClauses; } + + void consumeCnf(); + void consumeCnf(std::vector> &cnf); + + // use this function to get the full CNF in keep_cnf mode + void getFullCnf(std::vector> &full_cnf) const; + + std::string cnfLiteralInfo(int idx) const; + + // simple helpers for build expressions easily + + struct _V { + int id; + std::string name; + _V(int id) : id(id) { } + _V(const char *name) : id(0), name(name) { } + _V(const std::string &name) : id(0), name(name) { } + int get(ezSAT *that) { + if (name.empty()) + return id; + return that->frozen_literal(name); + } + }; + + int VAR(_V a) { + return a.get(this); + } + + int NOT(_V a) { + return expression(OpNot, a.get(this)); + } + + int AND(_V a = 0, _V b = 0, _V c = 0, _V d = 0, _V e = 0, _V f = 0) { + return expression(OpAnd, a.get(this), b.get(this), c.get(this), d.get(this), e.get(this), f.get(this)); + } + + int OR(_V a = 0, _V b = 0, _V c = 0, _V d = 0, _V e = 0, _V f = 0) { + return expression(OpOr, a.get(this), b.get(this), c.get(this), d.get(this), e.get(this), f.get(this)); + } + + int XOR(_V a = 0, _V b = 0, _V c = 0, _V d = 0, _V e = 0, _V f = 0) { + return expression(OpXor, a.get(this), b.get(this), c.get(this), d.get(this), e.get(this), f.get(this)); + } + + int IFF(_V a, _V b = 0, _V c = 0, _V d = 0, _V e = 0, _V f = 0) { + return expression(OpIFF, a.get(this), b.get(this), c.get(this), d.get(this), e.get(this), f.get(this)); + } + + int ITE(_V a, _V b, _V c) { + return expression(OpITE, a.get(this), b.get(this), c.get(this)); + } + + void SET(_V a, _V b) { + assume(IFF(a.get(this), b.get(this))); + } + + // simple helpers for building expressions with bit vectors + + std::vector vec_const(const std::vector &bits); + std::vector vec_const_signed(int64_t value, int numBits); + std::vector vec_const_unsigned(uint64_t value, int numBits); + std::vector vec_var(int numBits); + std::vector vec_var(std::string name, int numBits); + std::vector vec_cast(const std::vector &vec1, int toBits, bool signExtend = false); + + std::vector vec_not(const std::vector &vec1); + std::vector vec_and(const std::vector &vec1, const std::vector &vec2); + std::vector vec_or(const std::vector &vec1, const std::vector &vec2); + std::vector vec_xor(const std::vector &vec1, const std::vector &vec2); + + std::vector vec_iff(const std::vector &vec1, const std::vector &vec2); + std::vector vec_ite(const std::vector &vec1, const std::vector &vec2, const std::vector &vec3); + std::vector vec_ite(int sel, const std::vector &vec1, const std::vector &vec2); + + std::vector vec_count(const std::vector &vec, int numBits, bool clip = true); + std::vector vec_add(const std::vector &vec1, const std::vector &vec2); + std::vector vec_sub(const std::vector &vec1, const std::vector &vec2); + std::vector vec_neg(const std::vector &vec); + + void vec_cmp(const std::vector &vec1, const std::vector &vec2, int &carry, int &overflow, int &sign, int &zero); + + int vec_lt_signed(const std::vector &vec1, const std::vector &vec2); + int vec_le_signed(const std::vector &vec1, const std::vector &vec2); + int vec_ge_signed(const std::vector &vec1, const std::vector &vec2); + int vec_gt_signed(const std::vector &vec1, const std::vector &vec2); + + int vec_lt_unsigned(const std::vector &vec1, const std::vector &vec2); + int vec_le_unsigned(const std::vector &vec1, const std::vector &vec2); + int vec_ge_unsigned(const std::vector &vec1, const std::vector &vec2); + int vec_gt_unsigned(const std::vector &vec1, const std::vector &vec2); + + int vec_eq(const std::vector &vec1, const std::vector &vec2); + int vec_ne(const std::vector &vec1, const std::vector &vec2); + + std::vector vec_shl(const std::vector &vec1, int shift, bool signExtend = false); + std::vector vec_srl(const std::vector &vec1, int shift); + + std::vector vec_shr(const std::vector &vec1, int shift, bool signExtend = false) { return vec_shl(vec1, -shift, signExtend); } + std::vector vec_srr(const std::vector &vec1, int shift) { return vec_srl(vec1, -shift); } + + std::vector vec_shift(const std::vector &vec1, int shift, int extend_left, int extend_right); + std::vector vec_shift_right(const std::vector &vec1, const std::vector &vec2, bool vec2_signed, int extend_left, int extend_right); + std::vector vec_shift_left(const std::vector &vec1, const std::vector &vec2, bool vec2_signed, int extend_left, int extend_right); + + void vec_append(std::vector &vec, const std::vector &vec1) const; + void vec_append_signed(std::vector &vec, const std::vector &vec1, int64_t value); + void vec_append_unsigned(std::vector &vec, const std::vector &vec1, uint64_t value); + + int64_t vec_model_get_signed(const std::vector &modelExpressions, const std::vector &modelValues, const std::vector &vec1) const; + uint64_t vec_model_get_unsigned(const std::vector &modelExpressions, const std::vector &modelValues, const std::vector &vec1) const; + + int vec_reduce_and(const std::vector &vec1); + int vec_reduce_or(const std::vector &vec1); + + void vec_set(const std::vector &vec1, const std::vector &vec2); + void vec_set_signed(const std::vector &vec1, int64_t value); + void vec_set_unsigned(const std::vector &vec1, uint64_t value); + + // helpers for generating ezSATbit and ezSATvec objects + + struct ezSATbit bit(_V a); + struct ezSATvec vec(const std::vector &vec); + + // printing CNF and internal state + + void printDIMACS(FILE *f, bool verbose = false) const; + void printInternalState(FILE *f) const; + + // more sophisticated constraints (designed to be used directly with assume(..)) + + int onehot(const std::vector &vec, bool max_only = false); + int manyhot(const std::vector &vec, int min_hot, int max_hot = -1); + int ordered(const std::vector &vec1, const std::vector &vec2, bool allow_equal = true); +}; + +// helper classes for using operator overloading when generating complex expressions + +struct ezSATbit +{ + ezSAT &sat; + int id; + + ezSATbit(ezSAT &sat, ezSAT::_V a) : sat(sat), id(sat.VAR(a)) { } + + ezSATbit operator ~() { return ezSATbit(sat, sat.NOT(id)); } + ezSATbit operator &(const ezSATbit &other) { return ezSATbit(sat, sat.AND(id, other.id)); } + ezSATbit operator |(const ezSATbit &other) { return ezSATbit(sat, sat.OR(id, other.id)); } + ezSATbit operator ^(const ezSATbit &other) { return ezSATbit(sat, sat.XOR(id, other.id)); } + ezSATbit operator ==(const ezSATbit &other) { return ezSATbit(sat, sat.IFF(id, other.id)); } + ezSATbit operator !=(const ezSATbit &other) { return ezSATbit(sat, sat.NOT(sat.IFF(id, other.id))); } + + operator int() const { return id; } + operator ezSAT::_V() const { return ezSAT::_V(id); } + operator std::vector() const { return std::vector(1, id); } +}; + +struct ezSATvec +{ + ezSAT &sat; + std::vector vec; + + ezSATvec(ezSAT &sat, const std::vector &vec) : sat(sat), vec(vec) { } + + ezSATvec operator ~() { return ezSATvec(sat, sat.vec_not(vec)); } + ezSATvec operator -() { return ezSATvec(sat, sat.vec_neg(vec)); } + + ezSATvec operator &(const ezSATvec &other) { return ezSATvec(sat, sat.vec_and(vec, other.vec)); } + ezSATvec operator |(const ezSATvec &other) { return ezSATvec(sat, sat.vec_or(vec, other.vec)); } + ezSATvec operator ^(const ezSATvec &other) { return ezSATvec(sat, sat.vec_xor(vec, other.vec)); } + + ezSATvec operator +(const ezSATvec &other) { return ezSATvec(sat, sat.vec_add(vec, other.vec)); } + ezSATvec operator -(const ezSATvec &other) { return ezSATvec(sat, sat.vec_sub(vec, other.vec)); } + + ezSATbit operator < (const ezSATvec &other) { return ezSATbit(sat, sat.vec_lt_unsigned(vec, other.vec)); } + ezSATbit operator <=(const ezSATvec &other) { return ezSATbit(sat, sat.vec_le_unsigned(vec, other.vec)); } + ezSATbit operator ==(const ezSATvec &other) { return ezSATbit(sat, sat.vec_eq(vec, other.vec)); } + ezSATbit operator !=(const ezSATvec &other) { return ezSATbit(sat, sat.vec_ne(vec, other.vec)); } + ezSATbit operator >=(const ezSATvec &other) { return ezSATbit(sat, sat.vec_ge_unsigned(vec, other.vec)); } + ezSATbit operator > (const ezSATvec &other) { return ezSATbit(sat, sat.vec_gt_unsigned(vec, other.vec)); } + + ezSATvec operator <<(int shift) { return ezSATvec(sat, sat.vec_shl(vec, shift)); } + ezSATvec operator >>(int shift) { return ezSATvec(sat, sat.vec_shr(vec, shift)); } + + operator std::vector() const { return vec; } +}; + +#endif diff --git a/resources/netlist/resources/kernel/share/include/libs/json11/json11.hpp b/resources/netlist/resources/kernel/share/include/libs/json11/json11.hpp new file mode 100644 index 0000000..0c47d05 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/libs/json11/json11.hpp @@ -0,0 +1,232 @@ +/* json11 + * + * json11 is a tiny JSON library for C++11, providing JSON parsing and serialization. + * + * The core object provided by the library is json11::Json. A Json object represents any JSON + * value: null, bool, number (int or double), string (std::string), array (std::vector), or + * object (std::map). + * + * Json objects act like values: they can be assigned, copied, moved, compared for equality or + * order, etc. There are also helper methods Json::dump, to serialize a Json to a string, and + * Json::parse (static) to parse a std::string as a Json object. + * + * Internally, the various types of Json object are represented by the JsonValue class + * hierarchy. + * + * A note on numbers - JSON specifies the syntax of number formatting but not its semantics, + * so some JSON implementations distinguish between integers and floating-point numbers, while + * some don't. In json11, we choose the latter. Because some JSON implementations (namely + * Javascript itself) treat all numbers as the same type, distinguishing the two leads + * to JSON that will be *silently* changed by a round-trip through those implementations. + * Dangerous! To avoid that risk, json11 stores all numbers as double internally, but also + * provides integer helpers. + * + * Fortunately, double-precision IEEE754 ('double') can precisely store any integer in the + * range +/-2^53, which includes every 'int' on most systems. (Timestamps often use int64 + * or long long to avoid the Y2038K problem; a double storing microseconds since some epoch + * will be exact for +/- 275 years.) + */ + +/* Copyright (c) 2013 Dropbox, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include +#include +#include +#include +#include + +#ifdef _MSC_VER + #if _MSC_VER <= 1800 // VS 2013 + #ifndef noexcept + #define noexcept throw() + #endif + + #ifndef snprintf + #define snprintf _snprintf_s + #endif + #endif +#endif + +namespace json11 { + +enum JsonParse { + STANDARD, COMMENTS +}; + +class JsonValue; + +class Json final { +public: + // Types + enum Type { + NUL, NUMBER, BOOL, STRING, ARRAY, OBJECT + }; + + // Array and object typedefs + typedef std::vector array; + typedef std::map object; + + // Constructors for the various types of JSON value. + Json() noexcept; // NUL + Json(std::nullptr_t) noexcept; // NUL + Json(double value); // NUMBER + Json(int value); // NUMBER + Json(bool value); // BOOL + Json(const std::string &value); // STRING + Json(std::string &&value); // STRING + Json(const char * value); // STRING + Json(const array &values); // ARRAY + Json(array &&values); // ARRAY + Json(const object &values); // OBJECT + Json(object &&values); // OBJECT + + // Implicit constructor: anything with a to_json() function. + template + Json(const T & t) : Json(t.to_json()) {} + + // Implicit constructor: map-like objects (std::map, std::unordered_map, etc) + template ().begin()->first)>::value + && std::is_constructible().begin()->second)>::value, + int>::type = 0> + Json(const M & m) : Json(object(m.begin(), m.end())) {} + + // Implicit constructor: vector-like objects (std::list, std::vector, std::set, etc) + template ().begin())>::value, + int>::type = 0> + Json(const V & v) : Json(array(v.begin(), v.end())) {} + + // This prevents Json(some_pointer) from accidentally producing a bool. Use + // Json(bool(some_pointer)) if that behavior is desired. + Json(void *) = delete; + + // Accessors + Type type() const; + + bool is_null() const { return type() == NUL; } + bool is_number() const { return type() == NUMBER; } + bool is_bool() const { return type() == BOOL; } + bool is_string() const { return type() == STRING; } + bool is_array() const { return type() == ARRAY; } + bool is_object() const { return type() == OBJECT; } + + // Return the enclosed value if this is a number, 0 otherwise. Note that json11 does not + // distinguish between integer and non-integer numbers - number_value() and int_value() + // can both be applied to a NUMBER-typed object. + double number_value() const; + int int_value() const; + + // Return the enclosed value if this is a boolean, false otherwise. + bool bool_value() const; + // Return the enclosed string if this is a string, "" otherwise. + const std::string &string_value() const; + // Return the enclosed std::vector if this is an array, or an empty vector otherwise. + const array &array_items() const; + // Return the enclosed std::map if this is an object, or an empty map otherwise. + const object &object_items() const; + + // Return a reference to arr[i] if this is an array, Json() otherwise. + const Json & operator[](size_t i) const; + // Return a reference to obj[key] if this is an object, Json() otherwise. + const Json & operator[](const std::string &key) const; + + // Serialize. + void dump(std::string &out) const; + std::string dump() const { + std::string out; + dump(out); + return out; + } + + // Parse. If parse fails, return Json() and assign an error message to err. + static Json parse(const std::string & in, + std::string & err, + JsonParse strategy = JsonParse::STANDARD); + static Json parse(const char * in, + std::string & err, + JsonParse strategy = JsonParse::STANDARD) { + if (in) { + return parse(std::string(in), err, strategy); + } else { + err = "null input"; + return nullptr; + } + } + // Parse multiple objects, concatenated or separated by whitespace + static std::vector parse_multi( + const std::string & in, + std::string::size_type & parser_stop_pos, + std::string & err, + JsonParse strategy = JsonParse::STANDARD); + + static inline std::vector parse_multi( + const std::string & in, + std::string & err, + JsonParse strategy = JsonParse::STANDARD) { + std::string::size_type parser_stop_pos; + return parse_multi(in, parser_stop_pos, err, strategy); + } + + bool operator== (const Json &rhs) const; + bool operator< (const Json &rhs) const; + bool operator!= (const Json &rhs) const { return !(*this == rhs); } + bool operator<= (const Json &rhs) const { return !(rhs < *this); } + bool operator> (const Json &rhs) const { return (rhs < *this); } + bool operator>= (const Json &rhs) const { return !(*this < rhs); } + + /* has_shape(types, err) + * + * Return true if this is a JSON object and, for each item in types, has a field of + * the given type. If not, return false and set err to a descriptive message. + */ + typedef std::initializer_list> shape; + bool has_shape(const shape & types, std::string & err) const; + +private: + std::shared_ptr m_ptr; +}; + +// Internal class hierarchy - JsonValue objects are not exposed to users of this API. +class JsonValue { +protected: + friend class Json; + friend class JsonInt; + friend class JsonDouble; + virtual Json::Type type() const = 0; + virtual bool equals(const JsonValue * other) const = 0; + virtual bool less(const JsonValue * other) const = 0; + virtual void dump(std::string &out) const = 0; + virtual double number_value() const; + virtual int int_value() const; + virtual bool bool_value() const; + virtual const std::string &string_value() const; + virtual const Json::array &array_items() const; + virtual const Json &operator[](size_t i) const; + virtual const Json::object &object_items() const; + virtual const Json &operator[](const std::string &key) const; + virtual ~JsonValue() {} +}; + +} // namespace json11 diff --git a/resources/netlist/resources/kernel/share/include/libs/sha1/sha1.h b/resources/netlist/resources/kernel/share/include/libs/sha1/sha1.h new file mode 100644 index 0000000..b1346b5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/libs/sha1/sha1.h @@ -0,0 +1,57 @@ +/* + sha1.h - header of + + ============ + SHA-1 in C++ + ============ + + 100% Public Domain. + + Original C Code + -- Steve Reid + Small changes to fit into bglibs + -- Bruce Guenter + Translation to simpler C++ Code + -- Volker Grabsch + Fixing bugs and improving style + -- Eugene Hopkinson +*/ + +#ifndef SHA1_HPP +#define SHA1_HPP + + +#include +#include +#include + +class SHA1 +{ +public: + SHA1(); + void update(const std::string &s); + void update(std::istream &is); + std::string final(); + static std::string from_file(const std::string &filename); + +private: + static constexpr unsigned int DIGEST_INTS = 5; /* number of 32bit integers per SHA1 digest */ + static constexpr unsigned int BLOCK_INTS = 16; /* number of 32bit integers per SHA1 block */ + static constexpr unsigned int BLOCK_BYTES = BLOCK_INTS * 4; + + uint32_t digest[DIGEST_INTS]; + std::string buffer; + uint64_t transforms; + + void reset(); + void transform(uint32_t block[BLOCK_BYTES]); + + static void read(std::istream &is, std::string &s, size_t max); + static void buffer_to_block(const std::string &buffer, uint32_t block[BLOCK_INTS]); +}; + +std::string sha1(const std::string &string); + + + +#endif /* SHA1_HPP */ diff --git a/resources/netlist/resources/kernel/share/include/passes/fsm/fsmdata.h b/resources/netlist/resources/kernel/share/include/passes/fsm/fsmdata.h new file mode 100644 index 0000000..97371ef --- /dev/null +++ b/resources/netlist/resources/kernel/share/include/passes/fsm/fsmdata.h @@ -0,0 +1,178 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef FSMDATA_H +#define FSMDATA_H + +#include "kernel/yosys.h" + +YOSYS_NAMESPACE_BEGIN + +struct FsmData +{ + int num_inputs, num_outputs, state_bits, reset_state; + struct transition_t { int state_in, state_out; RTLIL::Const ctrl_in, ctrl_out; }; + std::vector transition_table; + std::vector state_table; + + void copy_to_cell(RTLIL::Cell *cell) + { + cell->parameters[ID::CTRL_IN_WIDTH] = RTLIL::Const(num_inputs); + cell->parameters[ID::CTRL_OUT_WIDTH] = RTLIL::Const(num_outputs); + + int state_num_log2 = 0; + for (int i = state_table.size(); i > 0; i = i >> 1) + state_num_log2++; + state_num_log2 = max(state_num_log2, 1); + + cell->parameters[ID::STATE_BITS] = RTLIL::Const(state_bits); + cell->parameters[ID::STATE_NUM] = RTLIL::Const(state_table.size()); + cell->parameters[ID::STATE_NUM_LOG2] = RTLIL::Const(state_num_log2); + cell->parameters[ID::STATE_RST] = RTLIL::Const(reset_state); + cell->parameters[ID::STATE_TABLE] = RTLIL::Const(); + + for (int i = 0; i < int(state_table.size()); i++) { + std::vector &bits_table = cell->parameters[ID::STATE_TABLE].bits; + std::vector &bits_state = state_table[i].bits; + bits_table.insert(bits_table.end(), bits_state.begin(), bits_state.end()); + } + + cell->parameters[ID::TRANS_NUM] = RTLIL::Const(transition_table.size()); + cell->parameters[ID::TRANS_TABLE] = RTLIL::Const(); + for (int i = 0; i < int(transition_table.size()); i++) + { + std::vector &bits_table = cell->parameters[ID::TRANS_TABLE].bits; + transition_t &tr = transition_table[i]; + + RTLIL::Const const_state_in = RTLIL::Const(tr.state_in, state_num_log2); + RTLIL::Const const_state_out = RTLIL::Const(tr.state_out, state_num_log2); + std::vector &bits_state_in = const_state_in.bits; + std::vector &bits_state_out = const_state_out.bits; + + std::vector &bits_ctrl_in = tr.ctrl_in.bits; + std::vector &bits_ctrl_out = tr.ctrl_out.bits; + + // append lsb first + bits_table.insert(bits_table.end(), bits_ctrl_out.begin(), bits_ctrl_out.end()); + bits_table.insert(bits_table.end(), bits_state_out.begin(), bits_state_out.end()); + bits_table.insert(bits_table.end(), bits_ctrl_in.begin(), bits_ctrl_in.end()); + bits_table.insert(bits_table.end(), bits_state_in.begin(), bits_state_in.end()); + } + } + + void copy_from_cell(RTLIL::Cell *cell) + { + num_inputs = cell->parameters[ID::CTRL_IN_WIDTH].as_int(); + num_outputs = cell->parameters[ID::CTRL_OUT_WIDTH].as_int(); + + state_bits = cell->parameters[ID::STATE_BITS].as_int(); + reset_state = cell->parameters[ID::STATE_RST].as_int(); + + int state_num = cell->parameters[ID::STATE_NUM].as_int(); + int state_num_log2 = cell->parameters[ID::STATE_NUM_LOG2].as_int(); + int trans_num = cell->parameters[ID::TRANS_NUM].as_int(); + + if (reset_state < 0 || reset_state >= state_num) + reset_state = -1; + + const RTLIL::Const &state_table = cell->parameters[ID::STATE_TABLE]; + const RTLIL::Const &trans_table = cell->parameters[ID::TRANS_TABLE]; + + for (int i = 0; i < state_num; i++) { + RTLIL::Const state_code; + int off_begin = i*state_bits, off_end = off_begin + state_bits; + state_code.bits.insert(state_code.bits.begin(), state_table.bits.begin()+off_begin, state_table.bits.begin()+off_end); + this->state_table.push_back(state_code); + } + + for (int i = 0; i < trans_num; i++) + { + auto off_ctrl_out = trans_table.bits.begin() + i*(num_inputs+num_outputs+2*state_num_log2); + auto off_state_out = off_ctrl_out + num_outputs; + auto off_ctrl_in = off_state_out + state_num_log2; + auto off_state_in = off_ctrl_in + num_inputs; + auto off_end = off_state_in + state_num_log2; + + RTLIL::Const state_in, state_out, ctrl_in, ctrl_out; + ctrl_out.bits.insert(state_in.bits.begin(), off_ctrl_out, off_state_out); + state_out.bits.insert(state_out.bits.begin(), off_state_out, off_ctrl_in); + ctrl_in.bits.insert(ctrl_in.bits.begin(), off_ctrl_in, off_state_in); + state_in.bits.insert(state_in.bits.begin(), off_state_in, off_end); + + transition_t tr; + tr.state_in = state_in.as_int(); + tr.state_out = state_out.as_int(); + tr.ctrl_in = ctrl_in; + tr.ctrl_out = ctrl_out; + + if (tr.state_in < 0 || tr.state_in >= state_num) + tr.state_in = -1; + if (tr.state_out < 0 || tr.state_out >= state_num) + tr.state_out = -1; + + transition_table.push_back(tr); + } + } + + void log_info(RTLIL::Cell *cell) + { + log("-------------------------------------\n"); + log("\n"); + log(" Information on FSM %s (%s):\n", cell->name.c_str(), cell->parameters[ID::NAME].decode_string().c_str()); + log("\n"); + log(" Number of input signals: %3d\n", num_inputs); + log(" Number of output signals: %3d\n", num_outputs); + log(" Number of state bits: %3d\n", state_bits); + + log("\n"); + log(" Input signals:\n"); + RTLIL::SigSpec sig_in = cell->getPort(ID::CTRL_IN); + for (int i = 0; i < GetSize(sig_in); i++) + log(" %3d: %s\n", i, log_signal(sig_in[i])); + + log("\n"); + log(" Output signals:\n"); + RTLIL::SigSpec sig_out = cell->getPort(ID::CTRL_OUT); + for (int i = 0; i < GetSize(sig_out); i++) + log(" %3d: %s\n", i, log_signal(sig_out[i])); + + log("\n"); + log(" State encoding:\n"); + for (int i = 0; i < GetSize(state_table); i++) + log(" %3d: %10s%s\n", i, log_signal(state_table[i], false), + int(i) == reset_state ? " " : ""); + + log("\n"); + log(" Transition Table (state_in, ctrl_in, state_out, ctrl_out):\n"); + for (int i = 0; i < GetSize(transition_table); i++) { + transition_t &tr = transition_table[i]; + log(" %5d: %5d %s -> %5d %s\n", i, tr.state_in, log_signal(tr.ctrl_in), tr.state_out, log_signal(tr.ctrl_out)); + } + + log("\n"); + log("-------------------------------------\n"); + } + + // implemented in fsm_opt.cc + static void optimize_fsm(RTLIL::Cell *cell, RTLIL::Module *module); +}; + +YOSYS_NAMESPACE_END + +#endif diff --git a/resources/netlist/resources/kernel/share/intel/common/altpll_bb.v b/resources/netlist/resources/kernel/share/intel/common/altpll_bb.v new file mode 100644 index 0000000..d649e06 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/common/altpll_bb.v @@ -0,0 +1,366 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +/* No clearbox model */ +`ifdef NO_CLEARBOX +(* blackbox *) +module altpll + ( inclk, + fbin, + pllena, + clkswitch, + areset, + pfdena, + clkena, + extclkena, + scanclk, + scanaclr, + scanclkena, + scanread, + scanwrite, + scandata, + phasecounterselect, + phaseupdown, + phasestep, + configupdate, + fbmimicbidir, + clk, + extclk, + clkbad, + enable0, + enable1, + activeclock, + clkloss, + locked, + scandataout, + scandone, + sclkout0, + sclkout1, + phasedone, + vcooverrange, + vcounderrange, + fbout, + fref, + icdrclk, + c0, + c1, + c2, + c3, + c4); + + parameter intended_device_family = "MAX 10"; + parameter operation_mode = "NORMAL"; + parameter pll_type = "AUTO"; + parameter qualify_conf_done = "OFF"; + parameter compensate_clock = "CLK0"; + parameter scan_chain = "LONG"; + parameter primary_clock = "inclk0"; + parameter inclk0_input_frequency = 1000; + parameter inclk1_input_frequency = 0; + parameter gate_lock_signal = "NO"; + parameter gate_lock_counter = 0; + parameter lock_high = 1; + parameter lock_low = 0; + parameter valid_lock_multiplier = 1; + parameter invalid_lock_multiplier = 5; + parameter switch_over_type = "AUTO"; + parameter switch_over_on_lossclk = "OFF" ; + parameter switch_over_on_gated_lock = "OFF" ; + parameter enable_switch_over_counter = "OFF"; + parameter switch_over_counter = 0; + parameter feedback_source = "EXTCLK0" ; + parameter bandwidth = 0; + parameter bandwidth_type = "UNUSED"; + parameter lpm_hint = "UNUSED"; + parameter spread_frequency = 0; + parameter down_spread = "0.0"; + parameter self_reset_on_gated_loss_lock = "OFF"; + parameter self_reset_on_loss_lock = "OFF"; + parameter lock_window_ui = "0.05"; + parameter width_clock = 6; + parameter width_phasecounterselect = 4; + parameter charge_pump_current_bits = 9999; + parameter loop_filter_c_bits = 9999; + parameter loop_filter_r_bits = 9999; + parameter scan_chain_mif_file = "UNUSED"; + parameter clk9_multiply_by = 1; + parameter clk8_multiply_by = 1; + parameter clk7_multiply_by = 1; + parameter clk6_multiply_by = 1; + parameter clk5_multiply_by = 1; + parameter clk4_multiply_by = 1; + parameter clk3_multiply_by = 1; + parameter clk2_multiply_by = 1; + parameter clk1_multiply_by = 1; + parameter clk0_multiply_by = 1; + parameter clk9_divide_by = 1; + parameter clk8_divide_by = 1; + parameter clk7_divide_by = 1; + parameter clk6_divide_by = 1; + parameter clk5_divide_by = 1; + parameter clk4_divide_by = 1; + parameter clk3_divide_by = 1; + parameter clk2_divide_by = 1; + parameter clk1_divide_by = 1; + parameter clk0_divide_by = 1; + parameter clk9_phase_shift = "0"; + parameter clk8_phase_shift = "0"; + parameter clk7_phase_shift = "0"; + parameter clk6_phase_shift = "0"; + parameter clk5_phase_shift = "0"; + parameter clk4_phase_shift = "0"; + parameter clk3_phase_shift = "0"; + parameter clk2_phase_shift = "0"; + parameter clk1_phase_shift = "0"; + parameter clk0_phase_shift = "0"; + + parameter clk9_duty_cycle = 50; + parameter clk8_duty_cycle = 50; + parameter clk7_duty_cycle = 50; + parameter clk6_duty_cycle = 50; + parameter clk5_duty_cycle = 50; + parameter clk4_duty_cycle = 50; + parameter clk3_duty_cycle = 50; + parameter clk2_duty_cycle = 50; + parameter clk1_duty_cycle = 50; + parameter clk0_duty_cycle = 50; + + parameter clk9_use_even_counter_mode = "OFF"; + parameter clk8_use_even_counter_mode = "OFF"; + parameter clk7_use_even_counter_mode = "OFF"; + parameter clk6_use_even_counter_mode = "OFF"; + parameter clk5_use_even_counter_mode = "OFF"; + parameter clk4_use_even_counter_mode = "OFF"; + parameter clk3_use_even_counter_mode = "OFF"; + parameter clk2_use_even_counter_mode = "OFF"; + parameter clk1_use_even_counter_mode = "OFF"; + parameter clk0_use_even_counter_mode = "OFF"; + parameter clk9_use_even_counter_value = "OFF"; + parameter clk8_use_even_counter_value = "OFF"; + parameter clk7_use_even_counter_value = "OFF"; + parameter clk6_use_even_counter_value = "OFF"; + parameter clk5_use_even_counter_value = "OFF"; + parameter clk4_use_even_counter_value = "OFF"; + parameter clk3_use_even_counter_value = "OFF"; + parameter clk2_use_even_counter_value = "OFF"; + parameter clk1_use_even_counter_value = "OFF"; + parameter clk0_use_even_counter_value = "OFF"; + + parameter clk2_output_frequency = 0; + parameter clk1_output_frequency = 0; + parameter clk0_output_frequency = 0; + + parameter vco_min = 0; + parameter vco_max = 0; + parameter vco_center = 0; + parameter pfd_min = 0; + parameter pfd_max = 0; + parameter m_initial = 1; + parameter m = 0; + parameter n = 1; + parameter m2 = 1; + parameter n2 = 1; + parameter ss = 0; + parameter l0_high = 1; + parameter l1_high = 1; + parameter g0_high = 1; + parameter g1_high = 1; + parameter g2_high = 1; + parameter g3_high = 1; + parameter e0_high = 1; + parameter e1_high = 1; + parameter e2_high = 1; + parameter e3_high = 1; + parameter l0_low = 1; + parameter l1_low = 1; + parameter g0_low = 1; + parameter g1_low = 1; + parameter g2_low = 1; + parameter g3_low = 1; + parameter e0_low = 1; + parameter e1_low = 1; + parameter e2_low = 1; + parameter e3_low = 1; + parameter l0_initial = 1; + parameter l1_initial = 1; + parameter g0_initial = 1; + parameter g1_initial = 1; + parameter g2_initial = 1; + parameter g3_initial = 1; + parameter e0_initial = 1; + parameter e1_initial = 1; + parameter e2_initial = 1; + parameter e3_initial = 1; + parameter l0_mode = "bypass"; + parameter l1_mode = "bypass"; + parameter g0_mode = "bypass"; + parameter g1_mode = "bypass"; + parameter g2_mode = "bypass"; + parameter g3_mode = "bypass"; + parameter e0_mode = "bypass"; + parameter e1_mode = "bypass"; + parameter e2_mode = "bypass"; + parameter e3_mode = "bypass"; + parameter l0_ph = 0; + parameter l1_ph = 0; + parameter g0_ph = 0; + parameter g1_ph = 0; + parameter g2_ph = 0; + parameter g3_ph = 0; + parameter e0_ph = 0; + parameter e1_ph = 0; + parameter e2_ph = 0; + parameter e3_ph = 0; + parameter m_ph = 0; + parameter l0_time_delay = 0; + parameter l1_time_delay = 0; + parameter g0_time_delay = 0; + parameter g1_time_delay = 0; + parameter g2_time_delay = 0; + parameter g3_time_delay = 0; + parameter e0_time_delay = 0; + parameter e1_time_delay = 0; + parameter e2_time_delay = 0; + parameter e3_time_delay = 0; + parameter m_time_delay = 0; + parameter n_time_delay = 0; + parameter extclk3_counter = "e3" ; + parameter extclk2_counter = "e2" ; + parameter extclk1_counter = "e1" ; + parameter extclk0_counter = "e0" ; + parameter clk9_counter = "c9" ; + parameter clk8_counter = "c8" ; + parameter clk7_counter = "c7" ; + parameter clk6_counter = "c6" ; + parameter clk5_counter = "l1" ; + parameter clk4_counter = "l0" ; + parameter clk3_counter = "g3" ; + parameter clk2_counter = "g2" ; + parameter clk1_counter = "g1" ; + parameter clk0_counter = "g0" ; + parameter enable0_counter = "l0"; + parameter enable1_counter = "l0"; + parameter charge_pump_current = 2; + parameter loop_filter_r = "1.0"; + parameter loop_filter_c = 5; + parameter vco_post_scale = 0; + parameter vco_frequency_control = "AUTO"; + parameter vco_phase_shift_step = 0; + parameter lpm_type = "altpll"; + + parameter port_clkena0 = "PORT_CONNECTIVITY"; + parameter port_clkena1 = "PORT_CONNECTIVITY"; + parameter port_clkena2 = "PORT_CONNECTIVITY"; + parameter port_clkena3 = "PORT_CONNECTIVITY"; + parameter port_clkena4 = "PORT_CONNECTIVITY"; + parameter port_clkena5 = "PORT_CONNECTIVITY"; + parameter port_extclkena0 = "PORT_CONNECTIVITY"; + parameter port_extclkena1 = "PORT_CONNECTIVITY"; + parameter port_extclkena2 = "PORT_CONNECTIVITY"; + parameter port_extclkena3 = "PORT_CONNECTIVITY"; + parameter port_extclk0 = "PORT_CONNECTIVITY"; + parameter port_extclk1 = "PORT_CONNECTIVITY"; + parameter port_extclk2 = "PORT_CONNECTIVITY"; + parameter port_extclk3 = "PORT_CONNECTIVITY"; + parameter port_clk0 = "PORT_CONNECTIVITY"; + parameter port_clk1 = "PORT_CONNECTIVITY"; + parameter port_clk2 = "PORT_CONNECTIVITY"; + parameter port_clk3 = "PORT_CONNECTIVITY"; + parameter port_clk4 = "PORT_CONNECTIVITY"; + parameter port_clk5 = "PORT_CONNECTIVITY"; + parameter port_clk6 = "PORT_CONNECTIVITY"; + parameter port_clk7 = "PORT_CONNECTIVITY"; + parameter port_clk8 = "PORT_CONNECTIVITY"; + parameter port_clk9 = "PORT_CONNECTIVITY"; + parameter port_scandata = "PORT_CONNECTIVITY"; + parameter port_scandataout = "PORT_CONNECTIVITY"; + parameter port_scandone = "PORT_CONNECTIVITY"; + parameter port_sclkout1 = "PORT_CONNECTIVITY"; + parameter port_sclkout0 = "PORT_CONNECTIVITY"; + parameter port_clkbad0 = "PORT_CONNECTIVITY"; + parameter port_clkbad1 = "PORT_CONNECTIVITY"; + parameter port_activeclock = "PORT_CONNECTIVITY"; + parameter port_clkloss = "PORT_CONNECTIVITY"; + parameter port_inclk1 = "PORT_CONNECTIVITY"; + parameter port_inclk0 = "PORT_CONNECTIVITY"; + parameter port_fbin = "PORT_CONNECTIVITY"; + parameter port_fbout = "PORT_CONNECTIVITY"; + parameter port_pllena = "PORT_CONNECTIVITY"; + parameter port_clkswitch = "PORT_CONNECTIVITY"; + parameter port_areset = "PORT_CONNECTIVITY"; + parameter port_pfdena = "PORT_CONNECTIVITY"; + parameter port_scanclk = "PORT_CONNECTIVITY"; + parameter port_scanaclr = "PORT_CONNECTIVITY"; + parameter port_scanread = "PORT_CONNECTIVITY"; + parameter port_scanwrite = "PORT_CONNECTIVITY"; + parameter port_enable0 = "PORT_CONNECTIVITY"; + parameter port_enable1 = "PORT_CONNECTIVITY"; + parameter port_locked = "PORT_CONNECTIVITY"; + parameter port_configupdate = "PORT_CONNECTIVITY"; + parameter port_phasecounterselect = "PORT_CONNECTIVITY"; + parameter port_phasedone = "PORT_CONNECTIVITY"; + parameter port_phasestep = "PORT_CONNECTIVITY"; + parameter port_phaseupdown = "PORT_CONNECTIVITY"; + parameter port_vcooverrange = "PORT_CONNECTIVITY"; + parameter port_vcounderrange = "PORT_CONNECTIVITY"; + parameter port_scanclkena = "PORT_CONNECTIVITY"; + parameter using_fbmimicbidir_port = "ON"; + + input [1:0] inclk; + input fbin; + input pllena; + input clkswitch; + input areset; + input pfdena; + input clkena; + input extclkena; + input scanclk; + input scanaclr; + input scanclkena; + input scanread; + input scanwrite; + input scandata; + input phasecounterselect; + input phaseupdown; + input phasestep; + input configupdate; + inout fbmimicbidir; + + + output [width_clock-1:0] clk; + output [3:0] extclk; + output [1:0] clkbad; + output enable0; + output enable1; + output activeclock; + output clkloss; + output locked; + output scandataout; + output scandone; + output sclkout0; + output sclkout1; + output phasedone; + output vcooverrange; + output vcounderrange; + output fbout; + output fref; + output icdrclk; + output c0, c1, c2, c3, c4; + +endmodule // altpll +`endif diff --git a/resources/netlist/resources/kernel/share/intel/common/brams_m9k.txt b/resources/netlist/resources/kernel/share/intel/common/brams_m9k.txt new file mode 100644 index 0000000..3bf21af --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/common/brams_m9k.txt @@ -0,0 +1,33 @@ +bram $__M9K_ALTSYNCRAM_SINGLEPORT_FULL + init 1 + abits 13 @M1 + dbits 1 @M1 + abits 12 @M2 + dbits 2 @M2 + abits 11 @M3 + dbits 4 @M3 + abits 10 @M4 + dbits 8 @M4 + abits 10 @M5 + dbits 9 @M5 + abits 9 @M6 + dbits 16 @M6 + abits 9 @M7 + dbits 18 @M7 + abits 8 @M8 + dbits 32 @M8 + abits 8 @M9 + dbits 36 @M9 + groups 2 + ports 1 1 + wrmode 0 1 + enable 1 1 + transp 0 0 + clocks 2 3 + clkpol 2 3 +endbram + +match $__M9K_ALTSYNCRAM_SINGLEPORT_FULL + min efficiency 2 + make_transp +endmatch diff --git a/resources/netlist/resources/kernel/share/intel/common/brams_map_m9k.v b/resources/netlist/resources/kernel/share/intel/common/brams_map_m9k.v new file mode 100644 index 0000000..d0f07c1 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/common/brams_map_m9k.v @@ -0,0 +1,93 @@ +module \$__M9K_ALTSYNCRAM_SINGLEPORT_FULL (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); + + parameter CFG_ABITS = 8; + parameter CFG_DBITS = 36; + parameter ABITS = 1; + parameter DBITS = 1; + parameter CLKPOL2 = 1; + parameter CLKPOL3 = 1; + + input CLK2; + input CLK3; + //Read data + output [CFG_DBITS-1:0] A1DATA; + input [CFG_ABITS-1:0] A1ADDR; + input A1EN; + //Write data + output [CFG_DBITS-1:0] B1DATA; + input [CFG_ABITS-1:0] B1ADDR; + input B1EN; + + wire [CFG_DBITS-1:0] B1DATA_t; + + localparam MODE = CFG_DBITS == 1 ? 1: + CFG_DBITS == 2 ? 2: + CFG_DBITS == 4 ? 3: + CFG_DBITS == 8 ? 4: + CFG_DBITS == 9 ? 5: + CFG_DBITS == 16 ? 6: + CFG_DBITS == 18 ? 7: + CFG_DBITS == 32 ? 8: + CFG_DBITS == 36 ? 9: + 'bx; + + localparam NUMWORDS = CFG_DBITS == 1 ? 8192: + CFG_DBITS == 2 ? 4096: + CFG_DBITS == 4 ? 2048: + CFG_DBITS == 8 ? 1024: + CFG_DBITS == 9 ? 1024: + CFG_DBITS == 16 ? 512: + CFG_DBITS == 18 ? 512: + CFG_DBITS == 32 ? 256: + CFG_DBITS == 36 ? 256: + 'bx; + + altsyncram #(.clock_enable_input_b ("ALTERNATE" ), + .clock_enable_input_a ("ALTERNATE" ), + .clock_enable_output_b ("NORMAL" ), + .clock_enable_output_a ("NORMAL" ), + .wrcontrol_aclr_a ("NONE" ), + .indata_aclr_a ("NONE" ), + .address_aclr_a ("NONE" ), + .outdata_aclr_a ("NONE" ), + .outdata_reg_a ("UNREGISTERED"), + .operation_mode ("SINGLE_PORT" ), + .intended_device_family ("CYCLONE IVE" ), + .outdata_reg_a ("UNREGISTERED"), + .lpm_type ("altsyncram" ), + .init_type ("unused" ), + .ram_block_type ("AUTO" ), + .lpm_hint ("ENABLE_RUNTIME_MOD=NO"), // Forced value + .power_up_uninitialized ("FALSE"), + .read_during_write_mode_port_a ("NEW_DATA_NO_NBE_READ"), // Forced value + .width_byteena_a (1), // Forced value + .numwords_b ( NUMWORDS ), + .numwords_a ( NUMWORDS ), + .widthad_b ( CFG_DBITS ), + .width_b ( CFG_ABITS ), + .widthad_a ( CFG_DBITS ), + .width_a ( CFG_ABITS ) + ) _TECHMAP_REPLACE_ ( + .data_a(B1DATA), + .address_a(B1ADDR), + .wren_a(B1EN), + .rden_a(A1EN), + .q_a(A1DATA), + .data_b(B1DATA), + .address_b(0), + .wren_b(1'b0), + .rden_b(1'b0), + .q_b(), + .clock0(CLK2), + .clock1(1'b1), // Unused in single port mode + .clocken0(1'b1), + .clocken1(1'b1), + .clocken2(1'b1), + .clocken3(1'b1), + .aclr0(1'b0), + .aclr1(1'b0), + .addressstall_a(1'b0), + .addressstall_b(1'b0)); + +endmodule + diff --git a/resources/netlist/resources/kernel/share/intel/common/ff_map.v b/resources/netlist/resources/kernel/share/intel/common/ff_map.v new file mode 100644 index 0000000..e3f92ad --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/common/ff_map.v @@ -0,0 +1,11 @@ +// Async Active Low Reset DFF +module \$_DFFE_PN0P_ (input D, C, R, E, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + generate if (_TECHMAP_WIREINIT_Q_ === 1'b1) begin + dffeas #(.is_wysiwyg("TRUE"), .power_up("high")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(R), .prn(1'b1), .ena(E), .asdata(1'b0), .aload(1'b0), .sclr(1'b0), .sload(1'b0)); + end else begin + dffeas #(.is_wysiwyg("TRUE"), .power_up("low")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .clrn(R), .prn(1'b1), .ena(E), .asdata(1'b0), .aload(1'b0), .sclr(1'b0), .sload(1'b0)); + end + endgenerate + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule diff --git a/resources/netlist/resources/kernel/share/intel/common/m9k_bb.v b/resources/netlist/resources/kernel/share/intel/common/m9k_bb.v new file mode 100644 index 0000000..551d5cc --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/common/m9k_bb.v @@ -0,0 +1,70 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +(* blackbox *) +module altsyncram(data_a, address_a, wren_a, rden_a, q_a, data_b, address_b, wren_b, rden_b, + q_b, clock0, clock1, clocken0, clocken1, clocken2, clocken3, aclr0, aclr1, + addressstall_a, addressstall_b); + + parameter clock_enable_input_b = "ALTERNATE"; + parameter clock_enable_input_a = "ALTERNATE"; + parameter clock_enable_output_b = "NORMAL"; + parameter clock_enable_output_a = "NORMAL"; + parameter wrcontrol_aclr_a = "NONE"; + parameter indata_aclr_a = "NONE"; + parameter address_aclr_a = "NONE"; + parameter outdata_aclr_a = "NONE"; + parameter outdata_reg_a = "UNREGISTERED"; + parameter operation_mode = "SINGLE_PORT"; + parameter intended_device_family = "MAX 10 FPGA"; + parameter outdata_reg_b = "UNREGISTERED"; + parameter lpm_type = "altsyncram"; + parameter init_type = "unused"; + parameter ram_block_type = "AUTO"; + parameter lpm_hint = "ENABLE_RUNTIME_MOD=NO"; + parameter power_up_uninitialized = "FALSE"; + parameter read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ"; + parameter width_byteena_a = 1; + parameter numwords_b = 0; + parameter numwords_a = 0; + parameter widthad_b = 1; + parameter width_b = 1; + parameter widthad_a = 1; + parameter width_a = 1; + + // Port A declarations + output [35:0] q_a; + input [35:0] data_a; + input [7:0] address_a; + input wren_a; + input rden_a; + // Port B declarations + output [35:0] q_b; + input [35:0] data_b; + input [7:0] address_b; + input wren_b; + input rden_b; + // Control signals + input clock0, clock1; + input clocken0, clocken1, clocken2, clocken3; + input aclr0, aclr1; + input addressstall_a; + input addressstall_b; + // TODO: Implement the correct simulation model + +endmodule // altsyncram diff --git a/resources/netlist/resources/kernel/share/intel/cyclone10lp/cells_map.v b/resources/netlist/resources/kernel/share/intel/cyclone10lp/cells_map.v new file mode 100644 index 0000000..1341793 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/cyclone10lp/cells_map.v @@ -0,0 +1,75 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +// > c60k28 (Viacheslav, VT) [at] yandex [dot] com +// > Intel FPGA technology mapping. User must first simulate the generated \ +// > netlist before going to test it on board. + +// Input buffer map +module \$__inpad (input I, output O); + cyclone10lp_io_ibuf _TECHMAP_REPLACE_ (.o(O), .i(I), .ibar(1'b0)); +endmodule + +// Output buffer map +module \$__outpad (input I, output O); + cyclone10lp_io_obuf _TECHMAP_REPLACE_ (.o(O), .i(I), .oe(1'b1)); +endmodule + +// LUT Map +/* 0 -> datac + 1 -> cin */ +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + generate + if (WIDTH == 1) begin + assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function + end else + if (WIDTH == 2) begin + cyclone10lp_lcell_comb #(.lut_mask({4{LUT}}), + .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), + .dataa(A[0]), + .datab(A[1]), + .datac(1'b1), + .datad(1'b1)); + end else + if(WIDTH == 3) begin + cyclone10lp_lcell_comb #(.lut_mask({2{LUT}}), + .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), + .dataa(A[0]), + .datab(A[1]), + .datac(A[2]), + .datad(1'b1)); + end else + if(WIDTH == 4) begin + cyclone10lp_lcell_comb #(.lut_mask(LUT), + .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), + .dataa(A[0]), + .datab(A[1]), + .datac(A[2]), + .datad(A[3])); + end else + wire _TECHMAP_FAIL_ = 1; + endgenerate + +endmodule + + diff --git a/resources/netlist/resources/kernel/share/intel/cyclone10lp/cells_sim.v b/resources/netlist/resources/kernel/share/intel/cyclone10lp/cells_sim.v new file mode 100644 index 0000000..ab99589 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/cyclone10lp/cells_sim.v @@ -0,0 +1,137 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +module VCC (output V); + assign V = 1'b1; +endmodule // VCC + +module GND (output G); + assign G = 1'b0; +endmodule // GND + +/* Altera Cyclone 10 LP devices Input Buffer Primitive */ +module cyclone10lp_io_ibuf + (output o, input i, input ibar); + assign ibar = ibar; + assign o = i; +endmodule // cyclone10lp_io_ibuf + +/* Altera Cyclone 10 LP devices Output Buffer Primitive */ +module cyclone10lp_io_obuf + (output o, input i, input oe); + assign o = i; + assign oe = oe; +endmodule // cyclone10lp_io_obuf + +/* Altera Cyclone IV (E) 4-input non-fracturable LUT Primitive */ +module cyclone10lp_lcell_comb + (output combout, cout, + input dataa, datab, datac, datad, cin); + + /* Internal parameters which define the behaviour + of the LUT primitive. + lut_mask define the lut function, can be expressed in 16-digit bin or hex. + sum_lutc_input define the type of LUT (combinational | arithmetic). + dont_touch for retiming || carry options. + lpm_type for WYSIWYG */ + + parameter lut_mask = 16'hFFFF; + parameter dont_touch = "off"; + parameter lpm_type = "cyclone10lp_lcell_comb"; + parameter sum_lutc_input = "datac"; + + reg [1:0] lut_type; + reg cout_rt; + reg combout_rt; + wire dataa_w; + wire datab_w; + wire datac_w; + wire datad_w; + wire cin_w; + + assign dataa_w = dataa; + assign datab_w = datab; + assign datac_w = datac; + assign datad_w = datad; + + function lut_data; + input [15:0] mask; + input dataa, datab, datac, datad; + reg [7:0] s3; + reg [3:0] s2; + reg [1:0] s1; + begin + s3 = datad ? mask[15:8] : mask[7:0]; + s2 = datac ? s3[7:4] : s3[3:0]; + s1 = datab ? s2[3:2] : s2[1:0]; + lut_data = dataa ? s1[1] : s1[0]; + end + + endfunction + + initial begin + if (sum_lutc_input == "datac") lut_type = 0; + else + if (sum_lutc_input == "cin") lut_type = 1; + else begin + $error("Error in sum_lutc_input. Parameter %s is not a valid value.\n", sum_lutc_input); + $finish(); + end + end + + always @(dataa_w or datab_w or datac_w or datad_w or cin_w) begin + if (lut_type == 0) begin // logic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + datac_w, datad_w); + end + else if (lut_type == 1) begin // arithmetic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + cin_w, datad_w); + end + cout_rt = lut_data(lut_mask, dataa_w, datab_w, cin_w, 'b0); + end + + assign combout = combout_rt & 1'b1; + assign cout = cout_rt & 1'b1; + +endmodule // cyclone10lp_lcell_comb + +/* Altera D Flip-Flop Primitive */ +module dffeas + (output q, + input d, clk, clrn, prn, ena, + input asdata, aload, sclr, sload); + + // Timing simulation is not covered + parameter power_up="dontcare"; + parameter is_wysiwyg="false"; + + reg q_tmp; + wire reset; + reg [7:0] debug_net; + + assign reset = (prn && sclr && ~clrn && ena); + assign q = q_tmp & 1'b1; + + always @(posedge clk, posedge aload) begin + if(reset) q_tmp <= 0; + else q_tmp <= d; + end + assign q = q_tmp; + +endmodule // dffeas diff --git a/resources/netlist/resources/kernel/share/intel/cycloneiv/cells_map.v b/resources/netlist/resources/kernel/share/intel/cycloneiv/cells_map.v new file mode 100644 index 0000000..59f50bd --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/cycloneiv/cells_map.v @@ -0,0 +1,59 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +// > c60k28 (Viacheslav, VT) [at] yandex [dot] com +// > Intel FPGA technology mapping. User must first simulate the generated \ +// > netlist before going to test it on board. + +// Input buffer map +module \$__inpad (input I, output O); + cycloneiv_io_ibuf _TECHMAP_REPLACE_ (.o(O), .i(I), .ibar(1'b0)); +endmodule + +// Output buffer map +module \$__outpad (input I, output O); + cycloneiv_io_obuf _TECHMAP_REPLACE_ (.o(O), .i(I), .oe(1'b1)); +endmodule + +// LUT Map +/* 0 -> datac + 1 -> cin */ +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + generate + if (WIDTH == 1) begin + assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function + end else + if (WIDTH == 2) begin + cycloneiv_lcell_comb #(.lut_mask({4{LUT}}), .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), .dataa(A[0]), .datab(A[1]), .datac(1'b1),.datad(1'b1)); + end else + if(WIDTH == 3) begin + cycloneiv_lcell_comb #(.lut_mask({2{LUT}}), .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), .dataa(A[0]), .datab(A[1]), .datac(A[2]),.datad(1'b1)); + end else + if(WIDTH == 4) begin + cycloneiv_lcell_comb #(.lut_mask(LUT), .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), .dataa(A[0]), .datab(A[1]), .datac(A[2]),.datad(A[3])); + end else + wire _TECHMAP_FAIL_ = 1; + endgenerate +endmodule // + + diff --git a/resources/netlist/resources/kernel/share/intel/cycloneiv/cells_sim.v b/resources/netlist/resources/kernel/share/intel/cycloneiv/cells_sim.v new file mode 100644 index 0000000..f3c8fbe --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/cycloneiv/cells_sim.v @@ -0,0 +1,299 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +module VCC (output V); + assign V = 1'b1; +endmodule // VCC + +module GND (output G); + assign G = 1'b0; +endmodule // GND + +/* Altera Cyclone IV (GX) devices Input Buffer Primitive */ +module cycloneiv_io_ibuf + (output o, input i, input ibar); + assign ibar = ibar; + assign o = i; +endmodule // fiftyfivenm_io_ibuf + +/* Altera Cyclone IV (GX) devices Output Buffer Primitive */ +module cycloneiv_io_obuf + (output o, input i, input oe); + assign o = i; + assign oe = oe; +endmodule // fiftyfivenm_io_obuf + +/* Altera Cyclone IV (GX) 4-input non-fracturable LUT Primitive */ +module cycloneiv_lcell_comb + (output combout, cout, + input dataa, datab, datac, datad, cin); + + /* Internal parameters which define the behaviour + of the LUT primitive. + lut_mask define the lut function, can be expressed in 16-digit bin or hex. + sum_lutc_input define the type of LUT (combinational | arithmetic). + dont_touch for retiming || carry options. + lpm_type for WYSIWYG */ + + parameter lut_mask = 16'hFFFF; + parameter dont_touch = "off"; + parameter lpm_type = "cycloneiv_lcell_comb"; + parameter sum_lutc_input = "datac"; + + reg [1:0] lut_type; + reg cout_rt; + reg combout_rt; + wire dataa_w; + wire datab_w; + wire datac_w; + wire datad_w; + wire cin_w; + + assign dataa_w = dataa; + assign datab_w = datab; + assign datac_w = datac; + assign datad_w = datad; + + function lut_data; + input [15:0] mask; + input dataa, datab, datac, datad; + reg [7:0] s3; + reg [3:0] s2; + reg [1:0] s1; + begin + s3 = datad ? mask[15:8] : mask[7:0]; + s2 = datac ? s3[7:4] : s3[3:0]; + s1 = datab ? s2[3:2] : s2[1:0]; + lut_data = dataa ? s1[1] : s1[0]; + end + + endfunction + + initial begin + if (sum_lutc_input == "datac") lut_type = 0; + else + if (sum_lutc_input == "cin") lut_type = 1; + else begin + $error("Error in sum_lutc_input. Parameter %s is not a valid value.\n", sum_lutc_input); + $finish(); + end + end + + always @(dataa_w or datab_w or datac_w or datad_w or cin_w) begin + if (lut_type == 0) begin // logic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + datac_w, datad_w); + end + else if (lut_type == 1) begin // arithmetic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + cin_w, datad_w); + end + cout_rt = lut_data(lut_mask, dataa_w, datab_w, cin_w, 'b0); + end + + assign combout = combout_rt & 1'b1; + assign cout = cout_rt & 1'b1; + +endmodule // cycloneiv_lcell_comb + +/* Altera D Flip-Flop Primitive */ +module dffeas + (output q, + input d, clk, clrn, prn, ena, + input asdata, aload, sclr, sload); + + // Timing simulation is not covered + parameter power_up="dontcare"; + parameter is_wysiwyg="false"; + + reg q_tmp; + wire reset; + reg [7:0] debug_net; + + assign reset = (prn && sclr && ~clrn && ena); + assign q = q_tmp & 1'b1; + + always @(posedge clk, posedge aload) begin + if(reset) q_tmp <= 0; + else q_tmp <= d; + end + assign q = q_tmp; + +endmodule // dffeas + +/* Cyclone IV GX altpll clearbox model */ +(* blackbox *) +module cycloneiv_pll + (inclk, + fbin, + fbout, + clkswitch, + areset, + pfdena, + scanclk, + scandata, + scanclkena, + configupdate, + clk, + phasecounterselect, + phaseupdown, + phasestep, + clkbad, + activeclock, + locked, + scandataout, + scandone, + phasedone, + vcooverrange, + vcounderrange, + fref, + icdrclk); + + parameter operation_mode = "normal"; + parameter pll_type = "auto"; + parameter compensate_clock = "clock0"; + parameter inclk0_input_frequency = 0; + parameter inclk1_input_frequency = 0; + parameter self_reset_on_loss_lock = "off"; + parameter switch_over_type = "auto"; + parameter switch_over_counter = 1; + parameter enable_switch_over_counter = "off"; + parameter bandwidth = 0; + parameter bandwidth_type = "auto"; + parameter use_dc_coupling = "false"; + parameter lock_high = 0; + parameter lock_low = 0; + parameter lock_window_ui = "0.05"; + parameter test_bypass_lock_detect = "off"; + parameter clk0_output_frequency = 0; + parameter clk0_multiply_by = 0; + parameter clk0_divide_by = 0; + parameter clk0_phase_shift = "0"; + parameter clk0_duty_cycle = 50; + parameter clk1_output_frequency = 0; + parameter clk1_multiply_by = 0; + parameter clk1_divide_by = 0; + parameter clk1_phase_shift = "0"; + parameter clk1_duty_cycle = 50; + parameter clk2_output_frequency = 0; + parameter clk2_multiply_by = 0; + parameter clk2_divide_by = 0; + parameter clk2_phase_shift = "0"; + parameter clk2_duty_cycle = 50; + parameter clk3_output_frequency = 0; + parameter clk3_multiply_by = 0; + parameter clk3_divide_by = 0; + parameter clk3_phase_shift = "0"; + parameter clk3_duty_cycle = 50; + parameter clk4_output_frequency = 0; + parameter clk4_multiply_by = 0; + parameter clk4_divide_by = 0; + parameter clk4_phase_shift = "0"; + parameter clk4_duty_cycle = 50; + parameter pfd_min = 0; + parameter pfd_max = 0; + parameter vco_min = 0; + parameter vco_max = 0; + parameter vco_center = 0; + // Advanced user parameters + parameter m_initial = 1; + parameter m = 0; + parameter n = 1; + parameter c0_high = 1; + parameter c0_low = 1; + parameter c0_initial = 1; + parameter c0_mode = "bypass"; + parameter c0_ph = 0; + parameter c1_high = 1; + parameter c1_low = 1; + parameter c1_initial = 1; + parameter c1_mode = "bypass"; + parameter c1_ph = 0; + parameter c2_high = 1; + parameter c2_low = 1; + parameter c2_initial = 1; + parameter c2_mode = "bypass"; + parameter c2_ph = 0; + parameter c3_high = 1; + parameter c3_low = 1; + parameter c3_initial = 1; + parameter c3_mode = "bypass"; + parameter c3_ph = 0; + parameter c4_high = 1; + parameter c4_low = 1; + parameter c4_initial = 1; + parameter c4_mode = "bypass"; + parameter c4_ph = 0; + parameter m_ph = 0; + parameter clk0_counter = "unused"; + parameter clk1_counter = "unused"; + parameter clk2_counter = "unused"; + parameter clk3_counter = "unused"; + parameter clk4_counter = "unused"; + parameter c1_use_casc_in = "off"; + parameter c2_use_casc_in = "off"; + parameter c3_use_casc_in = "off"; + parameter c4_use_casc_in = "off"; + parameter m_test_source = -1; + parameter c0_test_source = -1; + parameter c1_test_source = -1; + parameter c2_test_source = -1; + parameter c3_test_source = -1; + parameter c4_test_source = -1; + parameter vco_multiply_by = 0; + parameter vco_divide_by = 0; + parameter vco_post_scale = 1; + parameter vco_frequency_control = "auto"; + parameter vco_phase_shift_step = 0; + parameter charge_pump_current = 10; + parameter loop_filter_r = "1.0"; + parameter loop_filter_c = 0; + parameter pll_compensation_delay = 0; + parameter lpm_type = "cycloneiv_pll"; + parameter phase_counter_select_width = 3; + + input [1:0] inclk; + input fbin; + input clkswitch; + input areset; + input pfdena; + input [phase_counter_select_width - 1:0] phasecounterselect; + input phaseupdown; + input phasestep; + input scanclk; + input scanclkena; + input scandata; + input configupdate; + + output [4:0] clk; + output [1:0] clkbad; + output activeclock; + output locked; + output scandataout; + output scandone; + output fbout; + output phasedone; + output vcooverrange; + output vcounderrange; + output fref; + output icdrclk; + +endmodule // cycloneive_pll + + diff --git a/resources/netlist/resources/kernel/share/intel/cycloneive/cells_map.v b/resources/netlist/resources/kernel/share/intel/cycloneive/cells_map.v new file mode 100644 index 0000000..646530d --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/cycloneive/cells_map.v @@ -0,0 +1,75 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +// > c60k28 (Viacheslav, VT) [at] yandex [dot] com +// > Intel FPGA technology mapping. User must first simulate the generated \ +// > netlist before going to test it on board. + +// Input buffer map +module \$__inpad (input I, output O); + cycloneive_io_ibuf _TECHMAP_REPLACE_ (.o(O), .i(I), .ibar(1'b0)); +endmodule + +// Output buffer map +module \$__outpad (input I, output O); + cycloneive_io_obuf _TECHMAP_REPLACE_ (.o(O), .i(I), .oe(1'b1)); +endmodule + +// LUT Map +/* 0 -> datac + 1 -> cin */ +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + generate + if (WIDTH == 1) begin + assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function + end else + if (WIDTH == 2) begin + cycloneive_lcell_comb #(.lut_mask({4{LUT}}), + .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), + .dataa(A[0]), + .datab(A[1]), + .datac(1'b1), + .datad(1'b1)); + end else + if(WIDTH == 3) begin + cycloneive_lcell_comb #(.lut_mask({2{LUT}}), + .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), + .dataa(A[0]), + .datab(A[1]), + .datac(A[2]), + .datad(1'b1)); + end else + if(WIDTH == 4) begin + cycloneive_lcell_comb #(.lut_mask(LUT), + .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), + .dataa(A[0]), + .datab(A[1]), + .datac(A[2]), + .datad(A[3])); + end else + wire _TECHMAP_FAIL_ = 1; + endgenerate + +endmodule + + diff --git a/resources/netlist/resources/kernel/share/intel/cycloneive/cells_sim.v b/resources/netlist/resources/kernel/share/intel/cycloneive/cells_sim.v new file mode 100644 index 0000000..9f4cb9a --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/cycloneive/cells_sim.v @@ -0,0 +1,292 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +module VCC (output V); + assign V = 1'b1; +endmodule // VCC + +module GND (output G); + assign G = 1'b0; +endmodule // GND + +/* Altera Cyclone IV (E) devices Input Buffer Primitive */ +module cycloneive_io_ibuf + (output o, input i, input ibar); + assign ibar = ibar; + assign o = i; +endmodule // fiftyfivenm_io_ibuf + +/* Altera Cyclone IV (E) devices Output Buffer Primitive */ +module cycloneive_io_obuf + (output o, input i, input oe); + assign o = i; + assign oe = oe; +endmodule // fiftyfivenm_io_obuf + +/* Altera Cyclone IV (E) 4-input non-fracturable LUT Primitive */ +module cycloneive_lcell_comb + (output combout, cout, + input dataa, datab, datac, datad, cin); + + /* Internal parameters which define the behaviour + of the LUT primitive. + lut_mask define the lut function, can be expressed in 16-digit bin or hex. + sum_lutc_input define the type of LUT (combinational | arithmetic). + dont_touch for retiming || carry options. + lpm_type for WYSIWYG */ + + parameter lut_mask = 16'hFFFF; + parameter dont_touch = "off"; + parameter lpm_type = "cycloneive_lcell_comb"; + parameter sum_lutc_input = "datac"; + + reg [1:0] lut_type; + reg cout_rt; + reg combout_rt; + wire dataa_w; + wire datab_w; + wire datac_w; + wire datad_w; + wire cin_w; + + assign dataa_w = dataa; + assign datab_w = datab; + assign datac_w = datac; + assign datad_w = datad; + + function lut_data; + input [15:0] mask; + input dataa, datab, datac, datad; + reg [7:0] s3; + reg [3:0] s2; + reg [1:0] s1; + begin + s3 = datad ? mask[15:8] : mask[7:0]; + s2 = datac ? s3[7:4] : s3[3:0]; + s1 = datab ? s2[3:2] : s2[1:0]; + lut_data = dataa ? s1[1] : s1[0]; + end + + endfunction + + initial begin + if (sum_lutc_input == "datac") lut_type = 0; + else + if (sum_lutc_input == "cin") lut_type = 1; + else begin + $error("Error in sum_lutc_input. Parameter %s is not a valid value.\n", sum_lutc_input); + $finish(); + end + end + + always @(dataa_w or datab_w or datac_w or datad_w or cin_w) begin + if (lut_type == 0) begin // logic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + datac_w, datad_w); + end + else if (lut_type == 1) begin // arithmetic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + cin_w, datad_w); + end + cout_rt = lut_data(lut_mask, dataa_w, datab_w, cin_w, 'b0); + end + + assign combout = combout_rt & 1'b1; + assign cout = cout_rt & 1'b1; + +endmodule // cycloneive_lcell_comb + +/* Altera D Flip-Flop Primitive */ +module dffeas + (output q, + input d, clk, clrn, prn, ena, + input asdata, aload, sclr, sload); + + // Timing simulation is not covered + parameter power_up="dontcare"; + parameter is_wysiwyg="false"; + + reg q_tmp; + wire reset; + reg [7:0] debug_net; + + assign reset = (prn && sclr && ~clrn && ena); + assign q = q_tmp & 1'b1; + + always @(posedge clk, posedge aload) begin + if(reset) q_tmp <= 0; + else q_tmp <= d; + end + assign q = q_tmp; + +endmodule // dffeas + +/* Cyclone IV E altpll clearbox model */ +(* blackbox *) +module cycloneive_pll + (inclk, + fbin, + fbout, + clkswitch, + areset, + pfdena, + scanclk, + scandata, + scanclkena, + configupdate, + clk, + phasecounterselect, + phaseupdown, + phasestep, + clkbad, + activeclock, + locked, + scandataout, + scandone, + phasedone, + vcooverrange, + vcounderrange); + + parameter operation_mode = "normal"; + parameter pll_type = "auto"; + parameter compensate_clock = "clock0"; + parameter inclk0_input_frequency = 0; + parameter inclk1_input_frequency = 0; + parameter self_reset_on_loss_lock = "off"; + parameter switch_over_type = "auto"; + parameter switch_over_counter = 1; + parameter enable_switch_over_counter = "off"; + parameter bandwidth = 0; + parameter bandwidth_type = "auto"; + parameter use_dc_coupling = "false"; + parameter lock_high = 0; + parameter lock_low = 0; + parameter lock_window_ui = "0.05"; + parameter test_bypass_lock_detect = "off"; + parameter clk0_output_frequency = 0; + parameter clk0_multiply_by = 0; + parameter clk0_divide_by = 0; + parameter clk0_phase_shift = "0"; + parameter clk0_duty_cycle = 50; + parameter clk1_output_frequency = 0; + parameter clk1_multiply_by = 0; + parameter clk1_divide_by = 0; + parameter clk1_phase_shift = "0"; + parameter clk1_duty_cycle = 50; + parameter clk2_output_frequency = 0; + parameter clk2_multiply_by = 0; + parameter clk2_divide_by = 0; + parameter clk2_phase_shift = "0"; + parameter clk2_duty_cycle = 50; + parameter clk3_output_frequency = 0; + parameter clk3_multiply_by = 0; + parameter clk3_divide_by = 0; + parameter clk3_phase_shift = "0"; + parameter clk3_duty_cycle = 50; + parameter clk4_output_frequency = 0; + parameter clk4_multiply_by = 0; + parameter clk4_divide_by = 0; + parameter clk4_phase_shift = "0"; + parameter clk4_duty_cycle = 50; + parameter pfd_min = 0; + parameter pfd_max = 0; + parameter vco_min = 0; + parameter vco_max = 0; + parameter vco_center = 0; + // Advanced user parameters + parameter m_initial = 1; + parameter m = 0; + parameter n = 1; + parameter c0_high = 1; + parameter c0_low = 1; + parameter c0_initial = 1; + parameter c0_mode = "bypass"; + parameter c0_ph = 0; + parameter c1_high = 1; + parameter c1_low = 1; + parameter c1_initial = 1; + parameter c1_mode = "bypass"; + parameter c1_ph = 0; + parameter c2_high = 1; + parameter c2_low = 1; + parameter c2_initial = 1; + parameter c2_mode = "bypass"; + parameter c2_ph = 0; + parameter c3_high = 1; + parameter c3_low = 1; + parameter c3_initial = 1; + parameter c3_mode = "bypass"; + parameter c3_ph = 0; + parameter c4_high = 1; + parameter c4_low = 1; + parameter c4_initial = 1; + parameter c4_mode = "bypass"; + parameter c4_ph = 0; + parameter m_ph = 0; + parameter clk0_counter = "unused"; + parameter clk1_counter = "unused"; + parameter clk2_counter = "unused"; + parameter clk3_counter = "unused"; + parameter clk4_counter = "unused"; + parameter c1_use_casc_in = "off"; + parameter c2_use_casc_in = "off"; + parameter c3_use_casc_in = "off"; + parameter c4_use_casc_in = "off"; + parameter m_test_source = -1; + parameter c0_test_source = -1; + parameter c1_test_source = -1; + parameter c2_test_source = -1; + parameter c3_test_source = -1; + parameter c4_test_source = -1; + parameter vco_multiply_by = 0; + parameter vco_divide_by = 0; + parameter vco_post_scale = 1; + parameter vco_frequency_control = "auto"; + parameter vco_phase_shift_step = 0; + parameter charge_pump_current = 10; + parameter loop_filter_r = "1.0"; + parameter loop_filter_c = 0; + parameter pll_compensation_delay = 0; + parameter lpm_type = "cycloneive_pll"; + parameter phase_counter_select_width = 3; + + input [1:0] inclk; + input fbin; + input clkswitch; + input areset; + input pfdena; + input [phase_counter_select_width - 1:0] phasecounterselect; + input phaseupdown; + input phasestep; + input scanclk; + input scanclkena; + input scandata; + input configupdate; + + output [4:0] clk; + output [1:0] clkbad; + output activeclock; + output locked; + output scandataout; + output scandone; + output fbout; + output phasedone; + output vcooverrange; + output vcounderrange; + +endmodule // cycloneive_pll diff --git a/resources/netlist/resources/kernel/share/intel/max10/cells_map.v b/resources/netlist/resources/kernel/share/intel/max10/cells_map.v new file mode 100644 index 0000000..6fefcd5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/max10/cells_map.v @@ -0,0 +1,59 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +// > c60k28 (Viacheslav, VT) [at] yandex [dot] com +// > Intel FPGA technology mapping. User must first simulate the generated \ +// > netlist before going to test it on board. + +// Input buffer map +module \$__inpad (input I, output O); + fiftyfivenm_io_ibuf _TECHMAP_REPLACE_ (.o(O), .i(I), .ibar(1'b0)); +endmodule + +// Output buffer map +module \$__outpad (input I, output O); + fiftyfivenm_io_obuf _TECHMAP_REPLACE_ (.o(O), .i(I), .oe(1'b1)); +endmodule + +// LUT Map +/* 0 -> datac + 1 -> cin */ +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + generate + if (WIDTH == 1) begin + assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function + end else + if (WIDTH == 2) begin + fiftyfivenm_lcell_comb #(.lut_mask({4{LUT}}), .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), .dataa(A[0]), .datab(A[1]), .datac(1'b1),.datad(1'b1)); + end else + if(WIDTH == 3) begin + fiftyfivenm_lcell_comb #(.lut_mask({2{LUT}}), .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), .dataa(A[0]), .datab(A[1]), .datac(A[2]),.datad(1'b1)); + end else + if(WIDTH == 4) begin + fiftyfivenm_lcell_comb #(.lut_mask(LUT), .sum_lutc_input("datac")) _TECHMAP_REPLACE_ (.combout(Y), .dataa(A[0]), .datab(A[1]), .datac(A[2]),.datad(A[3])); + end else + wire _TECHMAP_FAIL_ = 1; + endgenerate +endmodule // + + diff --git a/resources/netlist/resources/kernel/share/intel/max10/cells_sim.v b/resources/netlist/resources/kernel/share/intel/max10/cells_sim.v new file mode 100644 index 0000000..7705fa2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel/max10/cells_sim.v @@ -0,0 +1,292 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +module VCC (output V); + assign V = 1'b1; +endmodule // VCC + +module GND (output G); + assign G = 1'b0; +endmodule // GND + +/* Altera MAX10 devices Input Buffer Primitive */ +module fiftyfivenm_io_ibuf + (output o, input i, input ibar); + assign ibar = ibar; + assign o = i; +endmodule // fiftyfivenm_io_ibuf + +/* Altera MAX10 devices Output Buffer Primitive */ +module fiftyfivenm_io_obuf + (output o, input i, input oe); + assign o = i; + assign oe = oe; +endmodule // fiftyfivenm_io_obuf + +/* Altera MAX10 4-input non-fracturable LUT Primitive */ +module fiftyfivenm_lcell_comb + (output combout, cout, + input dataa, datab, datac, datad, cin); + + /* Internal parameters which define the behaviour + of the LUT primitive. + lut_mask define the lut function, can be expressed in 16-digit bin or hex. + sum_lutc_input define the type of LUT (combinational | arithmetic). + dont_touch for retiming || carry options. + lpm_type for WYSIWYG */ + + parameter lut_mask = 16'hFFFF; + parameter dont_touch = "off"; + parameter lpm_type = "fiftyfivenm_lcell_comb"; + parameter sum_lutc_input = "datac"; + + reg [1:0] lut_type; + reg cout_rt; + reg combout_rt; + wire dataa_w; + wire datab_w; + wire datac_w; + wire datad_w; + wire cin_w; + + assign dataa_w = dataa; + assign datab_w = datab; + assign datac_w = datac; + assign datad_w = datad; + + function lut_data; + input [15:0] mask; + input dataa, datab, datac, datad; + reg [7:0] s3; + reg [3:0] s2; + reg [1:0] s1; + begin + s3 = datad ? mask[15:8] : mask[7:0]; + s2 = datac ? s3[7:4] : s3[3:0]; + s1 = datab ? s2[3:2] : s2[1:0]; + lut_data = dataa ? s1[1] : s1[0]; + end + + endfunction + + initial begin + if (sum_lutc_input == "datac") lut_type = 0; + else + if (sum_lutc_input == "cin") lut_type = 1; + else begin + $error("Error in sum_lutc_input. Parameter %s is not a valid value.\n", sum_lutc_input); + $finish(); + end + end + + always @(dataa_w or datab_w or datac_w or datad_w or cin_w) begin + if (lut_type == 0) begin // logic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + datac_w, datad_w); + end + else if (lut_type == 1) begin // arithmetic function + combout_rt = lut_data(lut_mask, dataa_w, datab_w, + cin_w, datad_w); + end + cout_rt = lut_data(lut_mask, dataa_w, datab_w, cin_w, 'b0); + end + + assign combout = combout_rt & 1'b1; + assign cout = cout_rt & 1'b1; + +endmodule // fiftyfivenm_lcell_comb + +/* Altera D Flip-Flop Primitive */ +module dffeas + (output q, + input d, clk, clrn, prn, ena, + input asdata, aload, sclr, sload); + + // Timing simulation is not covered + parameter power_up="dontcare"; + parameter is_wysiwyg="false"; + + reg q_tmp; + wire reset; + reg [7:0] debug_net; + + assign reset = (prn && sclr && ~clrn && ena); + assign q = q_tmp & 1'b1; + + always @(posedge clk, posedge aload) begin + if(reset) q_tmp <= 0; + else q_tmp <= d; + end + assign q = q_tmp; + +endmodule // dffeas + +/* MAX10 altpll clearbox model */ +(* blackbox *) +module fiftyfivenm_pll + (inclk, + fbin, + fbout, + clkswitch, + areset, + pfdena, + scanclk, + scandata, + scanclkena, + configupdate, + clk, + phasecounterselect, + phaseupdown, + phasestep, + clkbad, + activeclock, + locked, + scandataout, + scandone, + phasedone, + vcooverrange, + vcounderrange); + + parameter operation_mode = "normal"; + parameter pll_type = "auto"; + parameter compensate_clock = "clock0"; + parameter inclk0_input_frequency = 0; + parameter inclk1_input_frequency = 0; + parameter self_reset_on_loss_lock = "off"; + parameter switch_over_type = "auto"; + parameter switch_over_counter = 1; + parameter enable_switch_over_counter = "off"; + parameter bandwidth = 0; + parameter bandwidth_type = "auto"; + parameter use_dc_coupling = "false"; + parameter lock_high = 0; + parameter lock_low = 0; + parameter lock_window_ui = "0.05"; + parameter test_bypass_lock_detect = "off"; + parameter clk0_output_frequency = 0; + parameter clk0_multiply_by = 0; + parameter clk0_divide_by = 0; + parameter clk0_phase_shift = "0"; + parameter clk0_duty_cycle = 50; + parameter clk1_output_frequency = 0; + parameter clk1_multiply_by = 0; + parameter clk1_divide_by = 0; + parameter clk1_phase_shift = "0"; + parameter clk1_duty_cycle = 50; + parameter clk2_output_frequency = 0; + parameter clk2_multiply_by = 0; + parameter clk2_divide_by = 0; + parameter clk2_phase_shift = "0"; + parameter clk2_duty_cycle = 50; + parameter clk3_output_frequency = 0; + parameter clk3_multiply_by = 0; + parameter clk3_divide_by = 0; + parameter clk3_phase_shift = "0"; + parameter clk3_duty_cycle = 50; + parameter clk4_output_frequency = 0; + parameter clk4_multiply_by = 0; + parameter clk4_divide_by = 0; + parameter clk4_phase_shift = "0"; + parameter clk4_duty_cycle = 50; + parameter pfd_min = 0; + parameter pfd_max = 0; + parameter vco_min = 0; + parameter vco_max = 0; + parameter vco_center = 0; + // Advanced user parameters + parameter m_initial = 1; + parameter m = 0; + parameter n = 1; + parameter c0_high = 1; + parameter c0_low = 1; + parameter c0_initial = 1; + parameter c0_mode = "bypass"; + parameter c0_ph = 0; + parameter c1_high = 1; + parameter c1_low = 1; + parameter c1_initial = 1; + parameter c1_mode = "bypass"; + parameter c1_ph = 0; + parameter c2_high = 1; + parameter c2_low = 1; + parameter c2_initial = 1; + parameter c2_mode = "bypass"; + parameter c2_ph = 0; + parameter c3_high = 1; + parameter c3_low = 1; + parameter c3_initial = 1; + parameter c3_mode = "bypass"; + parameter c3_ph = 0; + parameter c4_high = 1; + parameter c4_low = 1; + parameter c4_initial = 1; + parameter c4_mode = "bypass"; + parameter c4_ph = 0; + parameter m_ph = 0; + parameter clk0_counter = "unused"; + parameter clk1_counter = "unused"; + parameter clk2_counter = "unused"; + parameter clk3_counter = "unused"; + parameter clk4_counter = "unused"; + parameter c1_use_casc_in = "off"; + parameter c2_use_casc_in = "off"; + parameter c3_use_casc_in = "off"; + parameter c4_use_casc_in = "off"; + parameter m_test_source = -1; + parameter c0_test_source = -1; + parameter c1_test_source = -1; + parameter c2_test_source = -1; + parameter c3_test_source = -1; + parameter c4_test_source = -1; + parameter vco_multiply_by = 0; + parameter vco_divide_by = 0; + parameter vco_post_scale = 1; + parameter vco_frequency_control = "auto"; + parameter vco_phase_shift_step = 0; + parameter charge_pump_current = 10; + parameter loop_filter_r = "1.0"; + parameter loop_filter_c = 0; + parameter pll_compensation_delay = 0; + parameter lpm_type = "fiftyfivenm_pll"; + parameter phase_counter_select_width = 3; + + input [1:0] inclk; + input fbin; + input clkswitch; + input areset; + input pfdena; + input [phase_counter_select_width - 1:0] phasecounterselect; + input phaseupdown; + input phasestep; + input scanclk; + input scanclkena; + input scandata; + input configupdate; + output [4:0] clk; + output [1:0] clkbad; + output activeclock; + output locked; + output scandataout; + output scandone; + output fbout; + output phasedone; + output vcooverrange; + output vcounderrange; + +endmodule // cycloneive_pll diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/abc9_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/abc9_map.v new file mode 100644 index 0000000..9d11bb2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/abc9_map.v @@ -0,0 +1,18 @@ +// This file exists to map purely-synchronous flops to ABC9 flops, while +// mapping flops with asynchronous-clear as boxes, this is because ABC9 +// doesn't support asynchronous-clear flops in sequential synthesis. + +module MISTRAL_FF( + input DATAIN, CLK, ACLR, ENA, SCLR, SLOAD, SDATA, + output reg Q +); + +parameter _TECHMAP_CONSTMSK_ACLR_ = 1'b0; + +// If the async-clear is constant, we assume it's disabled. +if (_TECHMAP_CONSTMSK_ACLR_ != 1'b0) + $__MISTRAL_FF_SYNCONLY _TECHMAP_REPLACE_ (.DATAIN(DATAIN), .CLK(CLK), .ENA(ENA), .SCLR(SCLR), .SLOAD(SLOAD), .SDATA(SDATA), .Q(Q)); +else + wire _TECHMAP_FAIL_ = 1; + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/abc9_model.v b/resources/netlist/resources/kernel/share/intel_alm/common/abc9_model.v new file mode 100644 index 0000000..8f06d38 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/abc9_model.v @@ -0,0 +1,10 @@ +// This is a purely-synchronous flop, that ABC9 can use for sequential synthesis. +(* abc9_flop, lib_whitebox *) +module $__MISTRAL_FF_SYNCONLY ( + input DATAIN, CLK, ENA, SCLR, SLOAD, SDATA, + output reg Q +); + +MISTRAL_FF ff (.DATAIN(DATAIN), .CLK(CLK), .ENA(ENA), .ACLR(1'b1), .SCLR(SCLR), .SLOAD(SLOAD), .SDATA(SDATA), .Q(Q)); + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/abc9_unmap.v b/resources/netlist/resources/kernel/share/intel_alm/common/abc9_unmap.v new file mode 100644 index 0000000..4b28866 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/abc9_unmap.v @@ -0,0 +1,11 @@ +// After performing sequential synthesis, map the synchronous flops back to +// standard MISTRAL_FF flops. + +module $__MISTRAL_FF_SYNCONLY ( + input DATAIN, CLK, ENA, SCLR, SLOAD, SDATA, + output reg Q +); + +MISTRAL_FF _TECHMAP_REPLACE_ (.DATAIN(DATAIN), .CLK(CLK), .ACLR(1'b1), .ENA(ENA), .SCLR(SCLR), .SLOAD(SLOAD), .SDATA(SDATA), .Q(Q)); + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/alm_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/alm_map.v new file mode 100644 index 0000000..6697b2e --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/alm_map.v @@ -0,0 +1,57 @@ +module \$lut (A, Y); + +parameter WIDTH = 1; +parameter LUT = 0; + +(* force_downto *) +input [WIDTH-1:0] A; +output Y; + +generate + if (WIDTH == 1) begin + generate + if (LUT == 2'b00) begin + assign Y = 1'b0; + end + else if (LUT == 2'b01) begin + MISTRAL_NOT _TECHMAP_REPLACE_( + .A(A[0]), .Q(Y) + ); + end + else if (LUT == 2'b10) begin + assign Y = A; + end + else if (LUT == 2'b11) begin + assign Y = 1'b1; + end + endgenerate + end else + if (WIDTH == 2) begin + MISTRAL_ALUT2 #(.LUT(LUT)) _TECHMAP_REPLACE_( + .A(A[0]), .B(A[1]), .Q(Y) + ); + end else + if (WIDTH == 3) begin + MISTRAL_ALUT3 #(.LUT(LUT)) _TECHMAP_REPLACE_( + .A(A[0]), .B(A[1]), .C(A[2]), .Q(Y) + ); + end else + if (WIDTH == 4) begin + MISTRAL_ALUT4 #(.LUT(LUT)) _TECHMAP_REPLACE_( + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3]), .Q(Y) + ); + end else + if (WIDTH == 5) begin + MISTRAL_ALUT5 #(.LUT(LUT)) _TECHMAP_REPLACE_ ( + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3]), .E(A[4]), .Q(Y) + ); + end else + if (WIDTH == 6) begin + MISTRAL_ALUT6 #(.LUT(LUT)) _TECHMAP_REPLACE_ ( + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3]), .E(A[4]), .F(A[5]), .Q(Y) + ); + end else begin + wire _TECHMAP_FAIL_ = 1'b1; + end +endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/alm_sim.v b/resources/netlist/resources/kernel/share/intel_alm/common/alm_sim.v new file mode 100644 index 0000000..242f100 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/alm_sim.v @@ -0,0 +1,633 @@ +// The core logic primitive of the Cyclone V/10GX is the Adaptive Logic Module +// (ALM). Each ALM is made up of an 8-input, 2-output look-up table, covered +// in this file, connected to combinational outputs, a carry chain, and four +// D flip-flops (which are covered as MISTRAL_FF in dff_sim.v). +// +// The ALM is vertically symmetric, so I find it helps to think in terms of +// half-ALMs, as that's predominantly the unit that synth_intel_alm uses. +// +// ALMs are quite flexible, having multiple modes. +// +// Normal (combinational) mode +// --------------------------- +// The ALM can implement: +// - a single 6-input function (with the other inputs usable for flip-flop access) +// - two 5-input functions that share two inputs +// - a 5-input and a 4-input function that share one input +// - a 5-input and a 3-or-less-input function that share no inputs +// - two 4-or-less-input functions that share no inputs +// +// Normal-mode functions are represented as MISTRAL_ALUTN cells with N inputs. +// It would be possible to represent a normal mode function as a single cell - +// the vendor cyclone{v,10gx}_lcell_comb cell does exactly that - but I felt +// it was more user-friendly to print out the specific function sizes +// separately. +// +// With the exception of MISTRAL_ALUT6, you can think of two normal-mode cells +// fitting inside a single ALM. +// +// Extended (7-input) mode +// ----------------------- +// The ALM can also fit a 7-input function made of two 5-input functions that +// share four inputs, multiplexed by another input. +// +// Because this can't accept arbitrary 7-input functions, Yosys can't handle +// it, so it doesn't have a cell, but I would likely call it MISTRAL_ALUT7(E?) +// if it did, and it would take up a full ALM. +// +// It might be possible to add an extraction pass to examine all ALUT5 cells +// that feed into ALUT3 cells to see if they can be combined into an extended +// ALM, but I don't think it will be worth it. +// +// Arithmetic mode +// --------------- +// In arithmetic mode, each half-ALM uses its carry chain to perform fast addition +// of two four-input functions that share three inputs. Oddly, the result of +// one of the functions is inverted before being added (you can see this as +// the dot on a full-adder input of Figure 1-8 in the Handbook). +// +// The cell for an arithmetic-mode half-ALM is MISTRAL_ALM_ARITH. One idea +// I've had (or rather was suggested by mwk) is that functions that feed into +// arithmetic-mode cells could be packed directly into the arithmetic-mode +// cell as a function, which reduces the number of ALMs needed. +// +// Shared arithmetic mode +// ---------------------- +// Shared arithmetic mode looks a lot like arithmetic mode, but here the +// output of every other four-input function goes to the input of the adder +// the next bit along. What this means is that adding three bits together can +// be done in an ALM, because functions can be used to implement addition that +// then feeds into the carry chain. This means that three bits can be added per +// ALM, as opposed to two in the arithmetic mode. +// +// Shared arithmetic mode doesn't currently have a cell, but I intend to add +// it as MISTRAL_ALM_SHARED, and have it occupy a full ALM. Because it adds +// three bits per cell, it makes addition shorter and use less ALMs, but +// I don't know enough to tell whether it's more efficient to use shared +// arithmetic mode to shorten the carry chain, or plain arithmetic mode with +// the functions packed in. + +`default_nettype none + +// Cyclone V LUT output timings (picoseconds): +// +// CARRY A B C D E F G +// COMBOUT - 605 583 510 512 - 97 400 (LUT6) +// COMBOUT - 602 583 457 510 302 93 483 (LUT7) +// SUMOUT 368 1342 1323 887 927 - 785 - +// CARRYOUT 71 1082 1062 866 813 - 1198 - + +// Arria V LUT output timings (picoseconds): +// +// CARRY A B C D E F G +// COMBOUT - 387 375 316 317 - 76 319 (LUT6) +// COMBOUT - 387 375 316 317 218 76 319 (LUT7) +// SUMOUT 249 744 732 562 576 - 511 - +// CARRYOUT 19 629 623 530 514 - 696 - + +(* abc9_lut=2, lib_whitebox *) +module MISTRAL_ALUT6(input A, B, C, D, E, F, output Q); + +parameter [63:0] LUT = 64'h0000_0000_0000_0000; + +`ifdef cyclonev +specify + (A => Q) = 605; + (B => Q) = 583; + (C => Q) = 510; + (D => Q) = 512; + (E => Q) = 400; + (F => Q) = 97; +endspecify +`endif +`ifdef arriav +specify + (A => Q) = 387; + (B => Q) = 375; + (C => Q) = 316; + (D => Q) = 317; + (E => Q) = 319; + (F => Q) = 76; +endspecify +`endif +`ifdef cyclone10gx +specify + (A => Q) = 275; + (B => Q) = 272; + (C => Q) = 175; + (D => Q) = 165; + (E => Q) = 162; + (F => Q) = 53; +endspecify +`endif + +assign Q = LUT >> {F, E, D, C, B, A}; + +endmodule + + +(* abc9_lut=1, lib_whitebox *) +module MISTRAL_ALUT5(input A, B, C, D, E, output Q); + +parameter [31:0] LUT = 32'h0000_0000; + +`ifdef cyclonev +specify + (A => Q) = 583; + (B => Q) = 510; + (C => Q) = 512; + (D => Q) = 400; + (E => Q) = 97; +endspecify +`endif +`ifdef arriav +specify + (A => Q) = 375; + (B => Q) = 316; + (C => Q) = 317; + (D => Q) = 319; + (E => Q) = 76; +endspecify +`endif +`ifdef cyclone10gx +specify + (A => Q) = 272; + (B => Q) = 175; + (C => Q) = 165; + (D => Q) = 162; + (E => Q) = 53; +endspecify +`endif + +assign Q = LUT >> {E, D, C, B, A}; + +endmodule + + +(* abc9_lut=1, lib_whitebox *) +module MISTRAL_ALUT4(input A, B, C, D, output Q); + +parameter [15:0] LUT = 16'h0000; + +`ifdef cyclonev +specify + (A => Q) = 510; + (B => Q) = 512; + (C => Q) = 400; + (D => Q) = 97; +endspecify +`endif +`ifdef arriav +specify + (A => Q) = 316; + (B => Q) = 317; + (C => Q) = 319; + (D => Q) = 76; +endspecify +`endif +`ifdef cyclone10gx +specify + (A => Q) = 175; + (B => Q) = 165; + (C => Q) = 162; + (D => Q) = 53; +endspecify +`endif + +assign Q = LUT >> {D, C, B, A}; + +endmodule + + +(* abc9_lut=1, lib_whitebox *) +module MISTRAL_ALUT3(input A, B, C, output Q); + +parameter [7:0] LUT = 8'h00; + +`ifdef cyclonev +specify + (A => Q) = 510; + (B => Q) = 400; + (C => Q) = 97; +endspecify +`endif +`ifdef arriav +specify + (A => Q) = 316; + (B => Q) = 317; + (C => Q) = 76; +endspecify +`endif +`ifdef cyclone10gx +specify + (A => Q) = 165; + (B => Q) = 162; + (C => Q) = 53; +endspecify +`endif + +assign Q = LUT >> {C, B, A}; + +endmodule + + +(* abc9_lut=1, lib_whitebox *) +module MISTRAL_ALUT2(input A, B, output Q); + +parameter [3:0] LUT = 4'h0; + +`ifdef cyclonev +specify + (A => Q) = 400; + (B => Q) = 97; +endspecify +`endif +`ifdef arriav +specify + (A => Q) = 316; + (B => Q) = 76; +endspecify +`endif +`ifdef cyclone10gx +specify + (A => Q) = 162; + (B => Q) = 53; +endspecify +`endif + +assign Q = LUT >> {B, A}; + +endmodule + + +(* abc9_lut=1, lib_whitebox *) +module MISTRAL_NOT(input A, output Q); + +`ifdef cyclonev +specify + (A => Q) = 97; +endspecify +`endif +`ifdef arriav +specify + (A => Q) = 76; +endspecify +`endif +`ifdef cyclone10gx +specify + (A => Q) = 53; +endspecify +`endif + +assign Q = ~A; + +endmodule + +// Despite the abc9_carry attributes, this doesn't seem to stop ABC9 adding illegal fanout to the carry chain that nextpnr cannot handle. +// So we treat it as a total blackbox from ABC9's perspective for now. +// (* abc9_box, lib_whitebox *) +module MISTRAL_ALUT_ARITH(input A, B, C, D0, D1, /* (* abc9_carry *) */ input CI, output SO, /* (* abc9_carry *) */ output CO); + +parameter LUT0 = 16'h0000; +parameter LUT1 = 16'h0000; + +`ifdef cyclonev +specify + (A => SO) = 1342; + (B => SO) = 1323; + (C => SO) = 927; + (D0 => SO) = 887; + (D1 => SO) = 785; + (CI => SO) = 368; + + (A => CO) = 1082; + (B => CO) = 1062; + (C => CO) = 813; + (D0 => CO) = 866; + (D1 => CO) = 1198; + (CI => CO) = 36; // Divided by 2 to account for there being two ALUT_ARITHs in an ALM) +endspecify +`endif +`ifdef arriav +specify + (A => SO) = 744; + (B => SO) = 732; + (C => SO) = 562; + (D0 => SO) = 576; + (D1 => SO) = 511; + (CI => SO) = 249; + + (A => CO) = 629; + (B => CO) = 623; + (C => CO) = 530; + (D0 => CO) = 514; + (D1 => CO) = 696; + (CI => CO) = 10; // Divided by 2 to account for there being two ALUT_ARITHs in an ALM) +endspecify +`endif +`ifdef cyclone10gx +specify + (A => SO) = 644; + (B => SO) = 477; + (C => SO) = 416; + (D0 => SO) = 380; + (D1 => SO) = 431; + (CI => SO) = 276; + + (A => CO) = 525; + (B => CO) = 433; + (C => CO) = 712; + (D0 => CO) = 653; + (D1 => CO) = 593; + (CI => CO) = 16; +endspecify +`endif + +wire q0, q1; + +assign q0 = LUT0 >> {D0, C, B, A}; +assign q1 = LUT1 >> {D1, C, B, A}; + +assign {CO, SO} = q0 + !q1 + CI; + +endmodule + + +/* +// A, B, C0, C1, E0, E1, F0, F1: data inputs +// CARRYIN: carry input +// SHAREIN: shared-arithmetic input +// CLK0, CLK1, CLK2: clock inputs +// +// COMB0, COMB1: combinational outputs +// FF0, FF1, FF2, FF3: DFF outputs +// SUM0, SUM1: adder outputs +// CARRYOUT: carry output +// SHAREOUT: shared-arithmetic output +module MISTRAL_ALM( + input A, B, C0, C1, E0, E1, F0, F1, CARRYIN, SHAREIN, // LUT path + input CLK0, CLK1, CLK2, AC0, AC1, // FF path + output COMB0, COMB1, SUM0, SUM1, CARRYOUT, SHAREOUT, + output FF0, FF1, FF2, FF3 +); + +parameter LUT0 = 16'b0000; +parameter LUT1 = 16'b0000; +parameter LUT2 = 16'b0000; +parameter LUT3 = 16'b0000; + +parameter INIT0 = 1'b0; +parameter INIT1 = 1'b0; +parameter INIT2 = 1'b0; +parameter INIT3 = 1'b0; + +parameter C0_MUX = "C0"; +parameter C1_MUX = "C1"; + +parameter F0_MUX = "VCC"; +parameter F1_MUX = "GND"; + +parameter FEEDBACK0 = "FF0"; +parameter FEEDBACK1 = "FF2"; + +parameter ADD_MUX = "LUT"; + +parameter DFF01_DATA_MUX = "COMB"; +parameter DFF23_DATA_MUX = "COMB"; + +parameter DFF0_CLK = "CLK0"; +parameter DFF1_CLK = "CLK0"; +parameter DFF2_CLK = "CLK0"; +parameter DFF3_CLK = "CLK0"; + +parameter DFF0_AC = "AC0"; +parameter DFF1_AC = "AC0"; +parameter DFF2_AC = "AC0"; +parameter DFF3_AC = "AC0"; + +// Feedback muxes from the flip-flop outputs. +wire ff_feedback_mux0, ff_feedback_mux1; + +// C-input muxes which can be set to also use the F-input. +wire c0_input_mux, c1_input_mux; + +// F-input muxes which can be set to a constant to allow LUT5 use. +wire f0_input_mux, f1_input_mux; + +// Adder input muxes to select between shared-arithmetic mode and arithmetic mode. +wire add0_input_mux, add1_input_mux; + +// Combinational-output muxes for LUT #1 and LUT #3 +wire lut1_comb_mux, lut3_comb_mux; + +// Sum-output muxes for LUT #1 and LUT #3 +wire lut1_sum_mux, lut3_sum_mux; + +// DFF data-input muxes +wire dff01_data_mux, dff23_data_mux; + +// DFF clock selectors +wire dff0_clk, dff1_clk, dff2_clk, dff3_clk; + +// DFF asynchronous-clear selectors +wire dff0_ac, dff1_ac, dff2_ac, dff3_ac; + +// LUT, DFF and adder output wires for routing. +wire lut0_out, lut1a_out, lut1b_out, lut2_out, lut3a_out, lut3b_out; +wire dff0_out, dff1_out, dff2_out, dff3_out; +wire add0_sum, add1_sum, add0_carry, add1_carry; + +generate + if (FEEDBACK0 === "FF0") + assign ff_feedback_mux0 = dff0_out; + else if (FEEDBACK0 === "FF1") + assign ff_feedback_mux0 = dff1_out; + else + $error("Invalid FEEDBACK0 setting!"); + + if (FEEDBACK1 == "FF2") + assign ff_feedback_mux1 = dff2_out; + else if (FEEDBACK1 == "FF3") + assign ff_feedback_mux1 = dff3_out; + else + $error("Invalid FEEDBACK1 setting!"); + + if (C0_MUX === "C0") + assign c0_input_mux = C0; + else if (C0_MUX === "F1") + assign c0_input_mux = F1; + else if (C0_MUX === "FEEDBACK1") + assign c0_input_mux = ff_feedback_mux1; + else + $error("Invalid C0_MUX setting!"); + + if (C1_MUX === "C1") + assign c1_input_mux = C1; + else if (C1_MUX === "F0") + assign c1_input_mux = F0; + else if (C1_MUX === "FEEDBACK0") + assign c1_input_mux = ff_feedback_mux0; + else + $error("Invalid C1_MUX setting!"); + + // F0 == VCC is LUT5 + // F0 == F0 is LUT6 + // F0 == FEEDBACK is unknown + if (F0_MUX === "VCC") + assign f0_input_mux = 1'b1; + else if (F0_MUX === "F0") + assign f0_input_mux = F0; + else if (F0_MUX === "FEEDBACK0") + assign f0_input_mux = ff_feedback_mux0; + else + $error("Invalid F0_MUX setting!"); + + // F1 == GND is LUT5 + // F1 == F1 is LUT6 + // F1 == FEEDBACK is unknown + if (F1_MUX === "GND") + assign f1_input_mux = 1'b0; + else if (F1_MUX === "F1") + assign f1_input_mux = F1; + else if (F1_MUX === "FEEDBACK1") + assign f1_input_mux = ff_feedback_mux1; + else + $error("Invalid F1_MUX setting!"); + + if (ADD_MUX === "LUT") begin + assign add0_input_mux = ~lut1_sum_mux; + assign add1_input_mux = ~lut3_sum_mux; + end else if (ADD_MUX === "SHARE") begin + assign add0_input_mux = SHAREIN; + assign add1_input_mux = lut1_comb_mux; + end else + $error("Invalid ADD_MUX setting!"); + + if (DFF01_DATA_MUX === "COMB") + assign dff01_data_mux = COMB0; + else if (DFF01_DATA_MUX === "SUM") + assign dff01_data_mux = SUM0; + else + $error("Invalid DFF01_DATA_MUX setting!"); + + if (DFF23_DATA_MUX === "COMB") + assign dff23_data_mux = COMB0; + else if (DFF23_DATA_MUX === "SUM") + assign dff23_data_mux = SUM0; + else + $error("Invalid DFF23_DATA_MUX setting!"); + + if (DFF0_CLK === "CLK0") + assign dff0_clk = CLK0; + else if (DFF0_CLK === "CLK1") + assign dff0_clk = CLK1; + else if (DFF0_CLK === "CLK2") + assign dff0_clk = CLK2; + else + $error("Invalid DFF0_CLK setting!"); + + if (DFF1_CLK === "CLK0") + assign dff1_clk = CLK0; + else if (DFF1_CLK === "CLK1") + assign dff1_clk = CLK1; + else if (DFF1_CLK === "CLK2") + assign dff1_clk = CLK2; + else + $error("Invalid DFF1_CLK setting!"); + + if (DFF2_CLK === "CLK0") + assign dff2_clk = CLK0; + else if (DFF2_CLK === "CLK1") + assign dff2_clk = CLK1; + else if (DFF2_CLK === "CLK2") + assign dff2_clk = CLK2; + else + $error("Invalid DFF2_CLK setting!"); + + if (DFF3_CLK === "CLK0") + assign dff3_clk = CLK0; + else if (DFF3_CLK === "CLK1") + assign dff3_clk = CLK1; + else if (DFF3_CLK === "CLK2") + assign dff3_clk = CLK2; + else + $error("Invalid DFF3_CLK setting!"); + + if (DFF0_AC === "AC0") + assign dff0_ac = AC0; + else if (DFF0_AC === "AC1") + assign dff0_ac = AC1; + else + $error("Invalid DFF0_AC setting!"); + + if (DFF1_AC === "AC0") + assign dff1_ac = AC0; + else if (DFF1_AC === "AC1") + assign dff1_ac = AC1; + else + $error("Invalid DFF1_AC setting!"); + + if (DFF2_AC === "AC0") + assign dff2_ac = AC0; + else if (DFF2_AC === "AC1") + assign dff2_ac = AC1; + else + $error("Invalid DFF2_AC setting!"); + + if (DFF3_AC === "AC0") + assign dff3_ac = AC0; + else if (DFF3_AC === "AC1") + assign dff3_ac = AC1; + else + $error("Invalid DFF3_AC setting!"); + +endgenerate + +// F0 on the Quartus diagram +MISTRAL_ALUT4 #(.LUT(LUT0)) lut0 (.A(A), .B(B), .C(C0), .D(c1_input_mux), .Q(lut0_out)); + +// F2 on the Quartus diagram +MISTRAL_ALUT4 #(.LUT(LUT1)) lut1_comb (.A(A), .B(B), .C(C0), .D(c1_input_mux), .Q(lut1_comb_mux)); +MISTRAL_ALUT4 #(.LUT(LUT1)) lut1_sum (.A(A), .B(B), .C(C0), .D(E0), .Q(lut1_sum_mux)); + +// F1 on the Quartus diagram +MISTRAL_ALUT4 #(.LUT(LUT2)) lut2 (.A(A), .B(B), .C(C1), .D(c0_input_mux), .Q(lut2_out)); + +// F3 on the Quartus diagram +MISTRAL_ALUT4 #(.LUT(LUT3)) lut3_comb (.A(A), .B(B), .C(C1), .D(c0_input_mux), .Q(lut3_comb_mux)); +MISTRAL_ALUT4 #(.LUT(LUT3)) lut3_sum (.A(A), .B(B), .C(C1), .D(E1), .Q(lut3_sum_mux)); + +MISTRAL_FF #(.INIT(INIT0)) dff0 (.D(dff01_data_mux), .CLK(dff0_clk), .ACn(dff0_ac), .Q(dff0_out)); +MISTRAL_FF #(.INIT(INIT1)) dff1 (.D(dff01_data_mux), .CLK(dff1_clk), .ACn(dff1_ac), .Q(dff1_out)); +MISTRAL_FF #(.INIT(INIT2)) dff2 (.D(dff23_data_mux), .CLK(dff2_clk), .ACn(dff2_ac), .Q(dff2_out)); +MISTRAL_FF #(.INIT(INIT3)) dff3 (.D(dff23_data_mux), .CLK(dff3_clk), .ACn(dff3_ac), .Q(dff3_out)); + +// Adders +assign {add0_carry, add0_sum} = CARRYIN + lut0_out + lut1_sum_mux; +assign {add1_carry, add1_sum} = add0_carry + lut2_out + lut3_sum_mux; + +// COMBOUT outputs on the Quartus diagram +assign COMB0 = E0 ? (f0_input_mux ? lut3_comb_mux : lut1_comb_mux) + : (f0_input_mux ? lut2_out : lut0_out); + +assign COMB1 = E1 ? (f1_input_mux ? lut3_comb_mux : lut1_comb_mux) + : (f1_input_mux ? lut2_out : lut0_out); + +// SUMOUT output on the Quartus diagram +assign SUM0 = add0_sum; +assign SUM1 = add1_sum; + +// COUT output on the Quartus diagram +assign CARRYOUT = add1_carry; + +// SHAREOUT output on the Quartus diagram +assign SHAREOUT = lut3_comb_mux; + +// REGOUT outputs on the Quartus diagram +assign FF0 = dff0_out; +assign FF1 = dff1_out; +assign FF2 = dff2_out; +assign FF3 = dff3_out; + +endmodule +*/ diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/arith_alm_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/arith_alm_map.v new file mode 100644 index 0000000..7cbf02e --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/arith_alm_map.v @@ -0,0 +1,71 @@ +`default_nettype none + +module \$alu (A, B, CI, BI, X, Y, CO); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 1; +parameter B_WIDTH = 1; +parameter Y_WIDTH = 1; + +parameter _TECHMAP_CONSTMSK_CI_ = 0; +parameter _TECHMAP_CONSTVAL_CI_ = 0; + +(* force_downto *) +input [A_WIDTH-1:0] A; +(* force_downto *) +input [B_WIDTH-1:0] B; +input CI, BI; +(* force_downto *) +output [Y_WIDTH-1:0] X, Y, CO; + +(* force_downto *) +wire [Y_WIDTH-1:0] A_buf, B_buf; +\$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); +\$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + +(* force_downto *) +wire [Y_WIDTH-1:0] AA = A_buf; +(* force_downto *) +wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; +(* force_downto *) +wire [Y_WIDTH-1:0] BX = B_buf; +wire [Y_WIDTH:0] ALM_CARRY; + +// Start of carry chain +generate + if (_TECHMAP_CONSTMSK_CI_ == 1 && _TECHMAP_CONSTVAL_CI_ == 1'b0) begin + assign ALM_CARRY[0] = _TECHMAP_CONSTVAL_CI_; + end else begin + MISTRAL_ALUT_ARITH #( + .LUT0(16'b1010_1010_1010_1010), // Q = A + .LUT1(16'b0000_0000_0000_0000), // Q = 0 (LUT1's input to the adder is inverted) + ) alm_start ( + .A(CI), .B(1'b1), .C(1'b1), .D0(1'b1), .D1(1'b1), + .CI(1'b0), + .CO(ALM_CARRY[0]) + ); + end +endgenerate + +// Carry chain +genvar i; +generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice + // TODO: mwk suggests that a pass could merge pre-adder logic into this. + MISTRAL_ALUT_ARITH #( + .LUT0(16'b1010_1010_1010_1010), // Q = A + .LUT1(16'b1100_0011_1100_0011), // Q = C ? B : ~B (LUT1's input to the adder is inverted) + ) alm_i ( + .A(AA[i]), .B(BX[i]), .C(BI), .D0(1'b1), .D1(1'b1), + .CI(ALM_CARRY[i]), + .SO(Y[i]), + .CO(ALM_CARRY[i+1]) + ); + + // ALM carry chain is not directly accessible, so calculate the carry through soft logic if really needed. + assign CO[i] = (AA[i] && BB[i]) || ((Y[i] ^ AA[i] ^ BB[i]) && (AA[i] || BB[i])); +end endgenerate + +assign X = AA ^ BB; + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/bram_m10k.txt b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m10k.txt new file mode 100644 index 0000000..560711b --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m10k.txt @@ -0,0 +1,27 @@ +bram $__MISTRAL_M10K + init 0 # TODO: Re-enable when I figure out how BRAM init works + abits 13 @D8192x1 + dbits 1 @D8192x1 + abits 12 @D4096x2 + dbits 2 @D4096x2 + abits 11 @D2048x5 + dbits 5 @D2048x5 + abits 10 @D1024x10 + dbits 10 @D1024x10 + abits 9 @D512x20 + dbits 20 @D512x20 + groups 2 + ports 1 1 + wrmode 1 0 + # read enable; write enable + byte enables (only for multiples of 8) + enable 1 1 + transp 0 0 + clocks 1 1 + clkpol 1 1 +endbram + + +match $__MISTRAL_M10K + min efficiency 5 + make_transp +endmatch diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/bram_m10k_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m10k_map.v new file mode 100644 index 0000000..8f9d4a3 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m10k_map.v @@ -0,0 +1,16 @@ +// Stub to invert M10K write-enable. + +module \$__MISTRAL_M10K (CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); + +parameter CFG_ABITS = 10; +parameter CFG_DBITS = 10; + +input CLK1; +input [CFG_ABITS-1:0] A1ADDR, B1ADDR; +input [CFG_DBITS-1:0] A1DATA; +input A1EN, B1EN; +output reg [CFG_DBITS-1:0] B1DATA; + +MISTRAL_M10K #(.CFG_ABITS(CFG_ABITS), .CFG_DBITS(CFG_DBITS)) _TECHMAP_REPLACE_ (.CLK1(CLK1), .A1ADDR(A1ADDR), .A1DATA(A1DATA), .A1EN(!A1EN), .B1ADDR(B1ADDR), .B1DATA(B1DATA), .B1EN(B1EN)); + +endmodule \ No newline at end of file diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/bram_m20k.txt b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m20k.txt new file mode 100644 index 0000000..b4c5a53 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m20k.txt @@ -0,0 +1,33 @@ +bram __MISTRAL_M20K_SDP + init 1 # TODO: Re-enable when I figure out how BRAM init works + abits 14 @D16384x1 + dbits 1 @D16384x1 + abits 13 @D8192x2 + dbits 2 @D8192x2 + abits 12 @D4096x4 @D4096x5 + dbits 4 @D4096x4 + dbits 5 @D4096x5 + abits 11 @D2048x8 @D2048x10 + dbits 8 @D2048x8 + dbits 10 @D2048x10 + abits 10 @D1024x16 @D1024x20 + dbits 16 @D1024x16 + dbits 20 @D1024x20 + abits 9 @D512x32 @D512x40 + dbits 32 @D512x32 + dbits 40 @D512x40 + groups 2 + ports 1 1 + wrmode 1 0 + # read enable; write enable + byte enables (only for multiples of 8) + enable 1 1 + transp 0 0 + clocks 1 1 + clkpol 1 1 +endbram + + +match __MISTRAL_M20K_SDP + min efficiency 5 + make_transp +endmatch diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/bram_m20k_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m20k_map.v new file mode 100644 index 0000000..15739d6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/bram_m20k_map.v @@ -0,0 +1,31 @@ +module __MISTRAL_M20K_SDP(CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); + +parameter CFG_ABITS = 10; +parameter CFG_DBITS = 20; +parameter CFG_ENABLE_A = 1; +parameter CFG_ENABLE_B = 1; + +input CLK1; +input [CFG_ABITS-1:0] A1ADDR, B1ADDR; +input [CFG_DBITS-1:0] A1DATA; +output [CFG_DBITS-1:0] B1DATA; +input [CFG_ENABLE_A-1:0] A1EN, B1EN; + +altsyncram #( + .operation_mode("dual_port"), + .ram_block_type("m20k"), + .widthad_a(CFG_ABITS), + .width_a(CFG_DBITS), + .widthad_b(CFG_ABITS), + .width_b(CFG_DBITS), +) _TECHMAP_REPLACE_ ( + .address_a(A1ADDR), + .data_a(A1DATA), + .wren_a(A1EN), + .address_b(B1ADDR), + .q_b(B1DATA), + .clock0(CLK1), + .clock1(CLK1) +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/dff_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/dff_map.v new file mode 100644 index 0000000..1a4b5d6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/dff_map.v @@ -0,0 +1,13 @@ +`default_nettype none + +// D flip-flop with async reset and enable +module \$_DFFE_PN0P_ (input D, C, R, E, output Q); + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + MISTRAL_FF _TECHMAP_REPLACE_(.DATAIN(D), .CLK(C), .ACLR(R), .ENA(E), .SCLR(1'b0), .SLOAD(1'b0), .SDATA(1'b0), .Q(Q)); +endmodule + +// D flip-flop with sync reset and enable (enable has priority) +module \$_SDFFCE_PP0P_ (input D, C, R, E, output Q); + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + MISTRAL_FF _TECHMAP_REPLACE_(.DATAIN(D), .CLK(C), .ACLR(1'b1), .ENA(E), .SCLR(R), .SLOAD(1'b0), .SDATA(1'b0), .Q(Q)); +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/dff_sim.v b/resources/netlist/resources/kernel/share/intel_alm/common/dff_sim.v new file mode 100644 index 0000000..8d58bf6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/dff_sim.v @@ -0,0 +1,131 @@ +// The four D flip-flops (DFFs) in a Cyclone V/10GX Adaptive Logic Module (ALM) +// act as one-bit memory cells that can be placed very flexibly (wherever there's +// an ALM); each flop is represented by a MISTRAL_FF cell. +// +// The flops in these chips are rather flexible in some ways, but in practice +// quite crippled by FPGA standards. +// +// What the flops can do +// --------------------- +// The core flop acts as a single-bit memory that initialises to zero at chip +// reset. It takes in data on the rising edge of CLK if ENA is high, +// and outputs it to Q. The ENA (clock enable) pin can therefore be used to +// capture the input only if a condition is true. +// +// The data itself is zero if SCLR (synchronous clear) is high, else it comes +// from SDATA (synchronous data) if SLOAD (synchronous load) is high, or DATAIN +// if SLOAD is low. +// +// If ACLR (asynchronous clear) is low then Q is forced to zero, regardless of +// the synchronous inputs or CLK edge. This is most often used for an FPGA-wide +// power-on reset. +// +// An asynchronous set that sets Q to one can be emulated by inverting the input +// and output of the flop, resulting in ACLR forcing Q to zero, which then gets +// inverted to produce one. Likewise, logic can operate on the falling edge of +// CLK if CLK is inverted before being passed as an input. +// +// What the flops *can't* do +// ------------------------- +// The trickiest part of the above capabilities is the lack of configurable +// initialisation state. For example, it isn't possible to implement a flop with +// asynchronous clear that initialises to one, because the hardware initialises +// to zero. Likewise, you can't emulate a flop with asynchronous set that +// initialises to zero, because the inverters mean the flop initialises to one. +// +// If the input design requires one of these cells (which appears to be rare +// in practice) then synth_intel_alm will fail to synthesize the design where +// other Yosys synthesis scripts might succeed. +// +// This stands in notable contrast to e.g. Xilinx flip-flops, which have +// configurable initialisation state and native synchronous/asynchronous +// set/clear (although not at the same time), which means they can generally +// implement a much wider variety of logic. + +// DATAIN: synchronous data input +// CLK: clock input (positive edge) +// ACLR: asynchronous clear (negative-true) +// ENA: clock-enable +// SCLR: synchronous clear +// SLOAD: synchronous load +// SDATA: synchronous load data +// +// Q: data output +// +// Note: the DFFEAS primitive is mostly emulated; it does not reflect what the hardware implements. + +(* abc9_box, lib_whitebox *) +module MISTRAL_FF( + input DATAIN, + (* clkbuf_sink *) input CLK, + input ACLR, ENA, SCLR, SLOAD, SDATA, + output reg Q +); + +`ifdef cyclonev +specify + if (ENA && ACLR !== 1'b0 && !SCLR && !SLOAD) (posedge CLK => (Q : DATAIN)) = 731; + if (ENA && SCLR) (posedge CLK => (Q : 1'b0)) = 890; + if (ENA && !SCLR && SLOAD) (posedge CLK => (Q : SDATA)) = 618; + + $setup(DATAIN, posedge CLK, /* -196 */ 0); + $setup(ENA, posedge CLK, /* -196 */ 0); + $setup(SCLR, posedge CLK, /* -196 */ 0); + $setup(SLOAD, posedge CLK, /* -196 */ 0); + $setup(SDATA, posedge CLK, /* -196 */ 0); + + if (ACLR === 1'b0) (ACLR => Q) = 282; +endspecify +`endif +`ifdef arriav +specify + if (ENA && ACLR !== 1'b0 && !SCLR && !SLOAD) (posedge CLK => (Q : DATAIN)) = 470; + if (ENA && SCLR) (posedge CLK => (Q : 1'b0)) = 633; + if (ENA && !SCLR && SLOAD) (posedge CLK => (Q : SDATA)) = 439; + + $setup(DATAIN, posedge CLK, /* -170 */ 0); + $setup(ENA, posedge CLK, /* -170 */ 0); + $setup(SCLR, posedge CLK, /* -170 */ 0); + $setup(SLOAD, posedge CLK, /* -170 */ 0); + $setup(SDATA, posedge CLK, /* -170 */ 0); + + if (ACLR === 1'b0) (ACLR => Q) = 215; +endspecify +`endif +`ifdef cyclone10gx +specify + // TODO (long-term): investigate these numbers. + // It seems relying on the Quartus Timing Analyzer was not the best idea; it's too fiddly. + if (ENA && ACLR !== 1'b0 && !SCLR && !SLOAD) (posedge CLK => (Q : DATAIN)) = 219; + if (ENA && SCLR) (posedge CLK => (Q : 1'b0)) = 219; + if (ENA && !SCLR && SLOAD) (posedge CLK => (Q : SDATA)) = 219; + + $setup(DATAIN, posedge CLK, 268); + $setup(ENA, posedge CLK, 268); + $setup(SCLR, posedge CLK, 268); + $setup(SLOAD, posedge CLK, 268); + $setup(SDATA, posedge CLK, 268); + + if (ACLR === 1'b0) (ACLR => Q) = 0; +endspecify +`endif + +initial begin + // Altera flops initialise to zero. + Q = 0; +end + +always @(posedge CLK, negedge ACLR) begin + // Asynchronous clear + if (!ACLR) Q <= 0; + // Clock-enable + else if (ENA) begin + // Synchronous clear + if (SCLR) Q <= 0; + // Synchronous load + else if (SLOAD) Q <= SDATA; + else Q <= DATAIN; + end +end + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/dsp_map.v b/resources/netlist/resources/kernel/share/intel_alm/common/dsp_map.v new file mode 100644 index 0000000..e12e777 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/dsp_map.v @@ -0,0 +1,51 @@ +`default_nettype none + +module __MUL27X27(A, B, Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; +parameter A_WIDTH = 27; +parameter B_WIDTH = 27; +parameter Y_WIDTH = 54; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +MISTRAL_MUL27X27 _TECHMAP_REPLACE_ (.A(A), .B(B), .Y(Y)); + +endmodule + + +module __MUL18X18(A, B, Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; +parameter A_WIDTH = 18; +parameter B_WIDTH = 18; +parameter Y_WIDTH = 36; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +MISTRAL_MUL18X18 _TECHMAP_REPLACE_ (.A(A), .B(B), .Y(Y)); + +endmodule + + +module __MUL9X9(A, B, Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; +parameter A_WIDTH = 9; +parameter B_WIDTH = 9; +parameter Y_WIDTH = 18; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +MISTRAL_MUL9X9 _TECHMAP_REPLACE_ (.A(A), .B(B), .Y(Y)); + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/dsp_sim.v b/resources/netlist/resources/kernel/share/intel_alm/common/dsp_sim.v new file mode 100644 index 0000000..3d4b559 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/dsp_sim.v @@ -0,0 +1,130 @@ +`default_nettype none + +(* abc9_box *) +module MISTRAL_MUL27X27(input [26:0] A, input [26:0] B, output [53:0] Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; + +`ifdef cyclonev +specify + (A *> Y) = 3732; + (B *> Y) = 3928; +endspecify +`endif +`ifdef arriav +// NOTE: Arria V appears to have only one set of timings for all DSP modes... +specify + (A *> Y) = 1895; + (B *> Y) = 2053; +endspecify +`endif +`ifdef cyclone10gx +// TODO: Cyclone 10 GX timings; the below are for Cyclone V +specify + (A *> Y) = 3732; + (B *> Y) = 3928; +endspecify +`endif + +wire [53:0] A_, B_; + +if (A_SIGNED) + assign A_ = $signed(A); +else + assign A_ = $unsigned(A); + +if (B_SIGNED) + assign B_ = $signed(B); +else + assign B_ = $unsigned(B); + +assign Y = A_ * B_; + +endmodule + +(* abc9_box *) +module MISTRAL_MUL18X18(input [17:0] A, input [17:0] B, output [35:0] Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; + +`ifdef cyclonev +specify + (A *> Y) = 3180; + (B *> Y) = 3982; +endspecify +`endif +`ifdef arriav +// NOTE: Arria V appears to have only one set of timings for all DSP modes... +specify + (A *> Y) = 1895; + (B *> Y) = 2053; +endspecify +`endif +`ifdef cyclone10gx +// TODO: Cyclone 10 GX timings; the below are for Cyclone V +specify + (A *> Y) = 3180; + (B *> Y) = 3982; +endspecify +`endif + +wire [35:0] A_, B_; + +if (A_SIGNED) + assign A_ = $signed(A); +else + assign A_ = $unsigned(A); + +if (B_SIGNED) + assign B_ = $signed(B); +else + assign B_ = $unsigned(B); + +assign Y = A_ * B_; + +endmodule + +(* abc9_box *) +module MISTRAL_MUL9X9(input [8:0] A, input [8:0] B, output [17:0] Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; + +`ifdef cyclonev +specify + (A *> Y) = 2818; + (B *> Y) = 3051; +endspecify +`endif +`ifdef arriav +// NOTE: Arria V appears to have only one set of timings for all DSP modes... +specify + (A *> Y) = 1895; + (B *> Y) = 2053; +endspecify +`endif +`ifdef cyclone10gx +// TODO: Cyclone 10 GX timings; the below are for Cyclone V +specify + (A *> Y) = 2818; + (B *> Y) = 3051; +endspecify +`endif + +wire [17:0] A_, B_; + +if (A_SIGNED) + assign A_ = $signed(A); +else + assign A_ = $unsigned(A); + +if (B_SIGNED) + assign B_ = $signed(B); +else + assign B_ = $unsigned(B); + +assign Y = A_ * B_; + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/lutram_mlab.txt b/resources/netlist/resources/kernel/share/intel_alm/common/lutram_mlab.txt new file mode 100644 index 0000000..3cc6939 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/lutram_mlab.txt @@ -0,0 +1,18 @@ +bram MISTRAL_MLAB + init 0 # TODO: Re-enable when Yosys remembers the original filename. + abits 5 + dbits 1 + groups 2 + ports 1 1 + wrmode 1 0 + # write enable + enable 1 0 + transp 0 0 + clocks 1 0 + clkpol 1 1 +endbram + +match MISTRAL_MLAB + min efficiency 5 + make_outreg +endmatch \ No newline at end of file diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/megafunction_bb.v b/resources/netlist/resources/kernel/share/intel_alm/common/megafunction_bb.v new file mode 100644 index 0000000..d4ed951 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/megafunction_bb.v @@ -0,0 +1,717 @@ +// Intel megafunction declarations, to avoid Yosys complaining. +`default_nettype none + +(* blackbox *) +module altera_pll +#( + parameter reference_clock_frequency = "0 ps", + parameter fractional_vco_multiplier = "false", + parameter pll_type = "General", + parameter pll_subtype = "General", + parameter number_of_clocks = 1, + parameter operation_mode = "internal feedback", + parameter deserialization_factor = 4, + parameter data_rate = 0, + + parameter sim_additional_refclk_cycles_to_lock = 0, + parameter output_clock_frequency0 = "0 ps", + parameter phase_shift0 = "0 ps", + parameter duty_cycle0 = 50, + + parameter output_clock_frequency1 = "0 ps", + parameter phase_shift1 = "0 ps", + parameter duty_cycle1 = 50, + + parameter output_clock_frequency2 = "0 ps", + parameter phase_shift2 = "0 ps", + parameter duty_cycle2 = 50, + + parameter output_clock_frequency3 = "0 ps", + parameter phase_shift3 = "0 ps", + parameter duty_cycle3 = 50, + + parameter output_clock_frequency4 = "0 ps", + parameter phase_shift4 = "0 ps", + parameter duty_cycle4 = 50, + + parameter output_clock_frequency5 = "0 ps", + parameter phase_shift5 = "0 ps", + parameter duty_cycle5 = 50, + + parameter output_clock_frequency6 = "0 ps", + parameter phase_shift6 = "0 ps", + parameter duty_cycle6 = 50, + + parameter output_clock_frequency7 = "0 ps", + parameter phase_shift7 = "0 ps", + parameter duty_cycle7 = 50, + + parameter output_clock_frequency8 = "0 ps", + parameter phase_shift8 = "0 ps", + parameter duty_cycle8 = 50, + + parameter output_clock_frequency9 = "0 ps", + parameter phase_shift9 = "0 ps", + parameter duty_cycle9 = 50, + + + parameter output_clock_frequency10 = "0 ps", + parameter phase_shift10 = "0 ps", + parameter duty_cycle10 = 50, + + parameter output_clock_frequency11 = "0 ps", + parameter phase_shift11 = "0 ps", + parameter duty_cycle11 = 50, + + parameter output_clock_frequency12 = "0 ps", + parameter phase_shift12 = "0 ps", + parameter duty_cycle12 = 50, + + parameter output_clock_frequency13 = "0 ps", + parameter phase_shift13 = "0 ps", + parameter duty_cycle13 = 50, + + parameter output_clock_frequency14 = "0 ps", + parameter phase_shift14 = "0 ps", + parameter duty_cycle14 = 50, + + parameter output_clock_frequency15 = "0 ps", + parameter phase_shift15 = "0 ps", + parameter duty_cycle15 = 50, + + parameter output_clock_frequency16 = "0 ps", + parameter phase_shift16 = "0 ps", + parameter duty_cycle16 = 50, + + parameter output_clock_frequency17 = "0 ps", + parameter phase_shift17 = "0 ps", + parameter duty_cycle17 = 50, + + parameter clock_name_0 = "", + parameter clock_name_1 = "", + parameter clock_name_2 = "", + parameter clock_name_3 = "", + parameter clock_name_4 = "", + parameter clock_name_5 = "", + parameter clock_name_6 = "", + parameter clock_name_7 = "", + parameter clock_name_8 = "", + + parameter clock_name_global_0 = "false", + parameter clock_name_global_1 = "false", + parameter clock_name_global_2 = "false", + parameter clock_name_global_3 = "false", + parameter clock_name_global_4 = "false", + parameter clock_name_global_5 = "false", + parameter clock_name_global_6 = "false", + parameter clock_name_global_7 = "false", + parameter clock_name_global_8 = "false", + + parameter m_cnt_hi_div = 1, + parameter m_cnt_lo_div = 1, + parameter m_cnt_bypass_en = "false", + parameter m_cnt_odd_div_duty_en = "false", + parameter n_cnt_hi_div = 1, + parameter n_cnt_lo_div = 1, + parameter n_cnt_bypass_en = "false", + parameter n_cnt_odd_div_duty_en = "false", + parameter c_cnt_hi_div0 = 1, + parameter c_cnt_lo_div0 = 1, + parameter c_cnt_bypass_en0 = "false", + parameter c_cnt_in_src0 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en0 = "false", + parameter c_cnt_prst0 = 1, + parameter c_cnt_ph_mux_prst0 = 0, + parameter c_cnt_hi_div1 = 1, + parameter c_cnt_lo_div1 = 1, + parameter c_cnt_bypass_en1 = "false", + parameter c_cnt_in_src1 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en1 = "false", + parameter c_cnt_prst1 = 1, + parameter c_cnt_ph_mux_prst1 = 0, + parameter c_cnt_hi_div2 = 1, + parameter c_cnt_lo_div2 = 1, + parameter c_cnt_bypass_en2 = "false", + parameter c_cnt_in_src2 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en2 = "false", + parameter c_cnt_prst2 = 1, + parameter c_cnt_ph_mux_prst2 = 0, + parameter c_cnt_hi_div3 = 1, + parameter c_cnt_lo_div3 = 1, + parameter c_cnt_bypass_en3 = "false", + parameter c_cnt_in_src3 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en3 = "false", + parameter c_cnt_prst3 = 1, + parameter c_cnt_ph_mux_prst3 = 0, + parameter c_cnt_hi_div4 = 1, + parameter c_cnt_lo_div4 = 1, + parameter c_cnt_bypass_en4 = "false", + parameter c_cnt_in_src4 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en4 = "false", + parameter c_cnt_prst4 = 1, + parameter c_cnt_ph_mux_prst4 = 0, + parameter c_cnt_hi_div5 = 1, + parameter c_cnt_lo_div5 = 1, + parameter c_cnt_bypass_en5 = "false", + parameter c_cnt_in_src5 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en5 = "false", + parameter c_cnt_prst5 = 1, + parameter c_cnt_ph_mux_prst5 = 0, + parameter c_cnt_hi_div6 = 1, + parameter c_cnt_lo_div6 = 1, + parameter c_cnt_bypass_en6 = "false", + parameter c_cnt_in_src6 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en6 = "false", + parameter c_cnt_prst6 = 1, + parameter c_cnt_ph_mux_prst6 = 0, + parameter c_cnt_hi_div7 = 1, + parameter c_cnt_lo_div7 = 1, + parameter c_cnt_bypass_en7 = "false", + parameter c_cnt_in_src7 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en7 = "false", + parameter c_cnt_prst7 = 1, + parameter c_cnt_ph_mux_prst7 = 0, + parameter c_cnt_hi_div8 = 1, + parameter c_cnt_lo_div8 = 1, + parameter c_cnt_bypass_en8 = "false", + parameter c_cnt_in_src8 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en8 = "false", + parameter c_cnt_prst8 = 1, + parameter c_cnt_ph_mux_prst8 = 0, + parameter c_cnt_hi_div9 = 1, + parameter c_cnt_lo_div9 = 1, + parameter c_cnt_bypass_en9 = "false", + parameter c_cnt_in_src9 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en9 = "false", + parameter c_cnt_prst9 = 1, + parameter c_cnt_ph_mux_prst9 = 0, + parameter c_cnt_hi_div10 = 1, + parameter c_cnt_lo_div10 = 1, + parameter c_cnt_bypass_en10 = "false", + parameter c_cnt_in_src10 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en10 = "false", + parameter c_cnt_prst10 = 1, + parameter c_cnt_ph_mux_prst10 = 0, + parameter c_cnt_hi_div11 = 1, + parameter c_cnt_lo_div11 = 1, + parameter c_cnt_bypass_en11 = "false", + parameter c_cnt_in_src11 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en11 = "false", + parameter c_cnt_prst11 = 1, + parameter c_cnt_ph_mux_prst11 = 0, + parameter c_cnt_hi_div12 = 1, + parameter c_cnt_lo_div12 = 1, + parameter c_cnt_bypass_en12 = "false", + parameter c_cnt_in_src12 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en12 = "false", + parameter c_cnt_prst12 = 1, + parameter c_cnt_ph_mux_prst12 = 0, + parameter c_cnt_hi_div13 = 1, + parameter c_cnt_lo_div13 = 1, + parameter c_cnt_bypass_en13 = "false", + parameter c_cnt_in_src13 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en13 = "false", + parameter c_cnt_prst13 = 1, + parameter c_cnt_ph_mux_prst13 = 0, + parameter c_cnt_hi_div14 = 1, + parameter c_cnt_lo_div14 = 1, + parameter c_cnt_bypass_en14 = "false", + parameter c_cnt_in_src14 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en14 = "false", + parameter c_cnt_prst14 = 1, + parameter c_cnt_ph_mux_prst14 = 0, + parameter c_cnt_hi_div15 = 1, + parameter c_cnt_lo_div15 = 1, + parameter c_cnt_bypass_en15 = "false", + parameter c_cnt_in_src15 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en15 = "false", + parameter c_cnt_prst15 = 1, + parameter c_cnt_ph_mux_prst15 = 0, + parameter c_cnt_hi_div16 = 1, + parameter c_cnt_lo_div16 = 1, + parameter c_cnt_bypass_en16 = "false", + parameter c_cnt_in_src16 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en16 = "false", + parameter c_cnt_prst16 = 1, + parameter c_cnt_ph_mux_prst16 = 0, + parameter c_cnt_hi_div17 = 1, + parameter c_cnt_lo_div17 = 1, + parameter c_cnt_bypass_en17 = "false", + parameter c_cnt_in_src17 = "ph_mux_clk", + parameter c_cnt_odd_div_duty_en17 = "false", + parameter c_cnt_prst17 = 1, + parameter c_cnt_ph_mux_prst17 = 0, + parameter pll_vco_div = 1, + parameter pll_slf_rst = "false", + parameter pll_bw_sel = "low", + parameter pll_output_clk_frequency = "0 MHz", + parameter pll_cp_current = 0, + parameter pll_bwctrl = 0, + parameter pll_fractional_division = 1, + parameter pll_fractional_cout = 24, + parameter pll_dsm_out_sel = "1st_order", + parameter mimic_fbclk_type = "gclk", + parameter pll_fbclk_mux_1 = "glb", + parameter pll_fbclk_mux_2 = "fb_1", + parameter pll_m_cnt_in_src = "ph_mux_clk", + parameter pll_vcoph_div = 1, + parameter refclk1_frequency = "0 MHz", + parameter pll_clkin_0_src = "clk_0", + parameter pll_clkin_1_src = "clk_0", + parameter pll_clk_loss_sw_en = "false", + parameter pll_auto_clk_sw_en = "false", + parameter pll_manu_clk_sw_en = "false", + parameter pll_clk_sw_dly = 0, + parameter pll_extclk_0_cnt_src = "pll_extclk_cnt_src_vss", + parameter pll_extclk_1_cnt_src = "pll_extclk_cnt_src_vss" +) ( + //input + input refclk, + input refclk1, + input fbclk, + input rst, + input phase_en, + input updn, + input [2:0] num_phase_shifts, + input scanclk, + input [4:0] cntsel, + input [63:0] reconfig_to_pll, + input extswitch, + input adjpllin, + input cclk, + + //output + output [ number_of_clocks -1 : 0] outclk, + output fboutclk, + output locked, + output phase_done, + output [63:0] reconfig_from_pll, + output activeclk, + output [1:0] clkbad, + output [7:0] phout, + output [1:0] lvds_clk, + output [1:0] loaden, + output [1:0] extclk_out, + output [ number_of_clocks -1 : 0] cascade_out, + + //inout + inout zdbfbclk +); + +endmodule + + +(* blackbox *) +module altera_std_synchronizer(clk, din, dout, reset_n); + +parameter depth = 2; + +input clk; +input reset_n; +input din; +output dout; + +endmodule + +(* blackbox *) +module altddio_in ( + datain, // required port, DDR input data + inclock, // required port, input reference clock to sample data by + inclocken, // enable data clock + aset, // asynchronous set + aclr, // asynchronous clear + sset, // synchronous set + sclr, // synchronous clear + dataout_h, // data sampled at the rising edge of inclock + dataout_l // data sampled at the falling edge of inclock +); + +parameter width = 1; +parameter power_up_high = "OFF"; +parameter invert_input_clocks = "OFF"; +parameter intended_device_family = "Stratix"; +parameter lpm_type = "altddio_in"; +parameter lpm_hint = "UNUSED"; + +input [width-1:0] datain; +input inclock; +input inclocken; +input aset; +input aclr; +input sset; +input sclr; + +output [width-1:0] dataout_h; +output [width-1:0] dataout_l; + +endmodule + + +(* blackbox *) +module altddio_out ( + datain_h, + datain_l, + outclock, + outclocken, + aset, + aclr, + sset, + sclr, + oe, + dataout, + oe_out +); + +parameter width = 1; +parameter power_up_high = "OFF"; +parameter oe_reg = "UNUSED"; +parameter extend_oe_disable = "UNUSED"; +parameter intended_device_family = "Stratix"; +parameter invert_output = "OFF"; +parameter lpm_type = "altddio_out"; +parameter lpm_hint = "UNUSED"; + +input [width-1:0] datain_h; +input [width-1:0] datain_l; +input outclock; +input outclocken; +input aset; +input aclr; +input sset; +input sclr; +input oe; + +output [width-1:0] dataout; +output [width-1:0] oe_out; + +endmodule + + +(* blackbox *) +module altddio_bidir ( + datain_h, + datain_l, + inclock, + inclocken, + outclock, + outclocken, + aset, + aclr, + sset, + sclr, + oe, + dataout_h, + dataout_l, + combout, + oe_out, + dqsundelayedout, + padio +); + +// GLOBAL PARAMETER DECLARATION +parameter width = 1; // required parameter +parameter power_up_high = "OFF"; +parameter oe_reg = "UNUSED"; +parameter extend_oe_disable = "UNUSED"; +parameter implement_input_in_lcell = "UNUSED"; +parameter invert_output = "OFF"; +parameter intended_device_family = "Stratix"; +parameter lpm_type = "altddio_bidir"; +parameter lpm_hint = "UNUSED"; + +// INPUT PORT DECLARATION +input [width-1:0] datain_h; +input [width-1:0] datain_l; +input inclock; +input inclocken; +input outclock; +input outclocken; +input aset; +input aclr; +input sset; +input sclr; +input oe; + +// OUTPUT PORT DECLARATION +output [width-1:0] dataout_h; +output [width-1:0] dataout_l; +output [width-1:0] combout; +output [width-1:0] oe_out; +output [width-1:0] dqsundelayedout; +// BIDIRECTIONAL PORT DECLARATION +inout [width-1:0] padio; + +endmodule + + +(* blackbox *) +module altiobuf_in(datain, dataout); + +parameter enable_bus_hold = "FALSE"; +parameter use_differential_mode = "FALSE"; +parameter number_of_channels = 1; + +input [number_of_channels-1:0] datain; +output [number_of_channels-1:0] dataout; + +endmodule + +(* blackbox *) +module altiobuf_out(datain, dataout); + +parameter enable_bus_hold = "FALSE"; +parameter use_differential_mode = "FALSE"; +parameter use_oe = "FALSE"; +parameter number_of_channels = 1; + +input [number_of_channels-1:0] datain; +output [number_of_channels-1:0] dataout; + +endmodule + +(* blackbox *) +module altiobuf_bidir(dataio, oe, datain, dataout); + +parameter number_of_channels = 1; +parameter enable_bus_hold = "OFF"; + +inout [number_of_channels-1:0] dataio; +input [number_of_channels-1:0] datain; +output [number_of_channels-1:0] dataout; +input [number_of_channels-1:0] oe; + +endmodule + +(* blackbox *) +module altsyncram(clock0, clock1, address_a, data_a, rden_a, wren_a, byteena_a, q_a, addressstall_a, address_b, data_b, rden_b, wren_b, byteena_b, q_b, addressstall_b, clocken0, clocken1, clocken2, clocken3, aclr0, aclr1, eccstatus); + +parameter lpm_type = "altsyncram"; +parameter operation_mode = "dual_port"; +parameter ram_block_type = "auto"; +parameter intended_device_family = "auto"; +parameter power_up_uninitialized = "false"; +parameter read_during_write_mode_mixed_ports = "dontcare"; +parameter byte_size = 8; +parameter widthad_a = 1; +parameter width_a = 1; +parameter width_byteena_a = 1; +parameter numwords_a = 1; +parameter clock_enable_input_a = "clocken0"; +parameter widthad_b = 1; +parameter width_b = 1; +parameter numwords_b = 1; +parameter address_aclr_b = "aclr0"; +parameter address_reg_b = ""; +parameter outdata_aclr_b = "aclr0"; +parameter outdata_reg_b = ""; +parameter clock_enable_input_b = "clocken0"; +parameter clock_enable_output_b = "clocken0"; + +input clock0, clock1; +input [widthad_a-1:0] address_a; +input [width_a-1:0] data_a; +input rden_a; +input wren_a; +input [(width_a/8)-1:0] byteena_a; +input addressstall_a; + +output [width_a-1:0] q_a; + +input wren_b; +input rden_b; +input [widthad_b-1:0] address_b; +input [width_b-1:0] data_b; +input [(width_b/8)-1:0] byteena_b; +input addressstall_b; + +output [width_b-1:0] q_b; + +input clocken0; +input clocken1; +input clocken2; +input clocken3; + +input aclr0; +input aclr1; + +output eccstatus; + +endmodule + +(* blackbox *) +module cyclonev_mlab_cell(portaaddr, portadatain, portbaddr, portbdataout, ena0, clk0, clk1); + +parameter logical_ram_name = ""; +parameter logical_ram_depth = 32; +parameter logical_ram_width = 20; +parameter mixed_port_feed_through_mode = "new"; +parameter first_bit_number = 0; +parameter first_address = 0; +parameter last_address = 31; +parameter address_width = 5; +parameter data_width = 1; +parameter byte_enable_mask_width = 1; +parameter port_b_data_out_clock = "NONE"; +parameter [639:0] mem_init0 = 640'b0; + +input [address_width-1:0] portaaddr, portbaddr; +input [data_width-1:0] portadatain; +output [data_width-1:0] portbdataout; +input ena0, clk0, clk1; + +endmodule + +(* blackbox *) +module cyclonev_mac(ax, ay, resulta); + +parameter ax_width = 9; +parameter signed_max = "true"; +parameter ay_scan_in_width = 9; +parameter signed_may = "true"; +parameter result_a_width = 18; +parameter operation_mode = "M9x9"; + +input [ax_width-1:0] ax; +input [ay_scan_in_width-1:0] ay; +output [result_a_width-1:0] resulta; + +endmodule + +(* blackbox *) +module cyclone10gx_mac(ax, ay, resulta); + +parameter ax_width = 18; +parameter signed_max = "true"; +parameter ay_scan_in_width = 18; +parameter signed_may = "true"; +parameter result_a_width = 36; +parameter operation_mode = "M18X18_FULL"; + +input [ax_width-1:0] ax; +input [ay_scan_in_width-1:0] ay; +output [result_a_width-1:0] resulta; + +endmodule + +(* blackbox *) +module cyclonev_ram_block(portaaddr, portadatain, portawe, portbaddr, portbdataout, portbre, clk0); + +parameter operation_mode = "dual_port"; +parameter logical_ram_name = ""; +parameter port_a_address_width = 10; +parameter port_a_data_width = 10; +parameter port_a_logical_ram_depth = 1024; +parameter port_a_logical_ram_width = 10; +parameter port_a_first_address = 0; +parameter port_a_last_address = 1023; +parameter port_a_first_bit_number = 0; +parameter port_b_address_width = 10; +parameter port_b_data_width = 10; +parameter port_b_logical_ram_depth = 1024; +parameter port_b_logical_ram_width = 10; +parameter port_b_first_address = 0; +parameter port_b_last_address = 1023; +parameter port_b_first_bit_number = 0; +parameter port_b_address_clock = "clock0"; +parameter port_b_read_enable_clock = "clock0"; +parameter mem_init0 = ""; +parameter mem_init1 = ""; +parameter mem_init2 = ""; +parameter mem_init3 = ""; +parameter mem_init4 = ""; + +input [port_a_address_width-1:0] portaaddr; +input [port_b_address_width-1:0] portbaddr; +input [port_a_data_width-1:0] portadatain; +output [port_b_data_width-1:0] portbdataout; +input clk0, portawe, portbre; + +endmodule + +(* blackbox *) +module cyclone10gx_io_ibuf(i, ibar, dynamicterminationcontrol, o); + +parameter differential_mode ="false"; +parameter bus_hold = "false"; +parameter simulate_z_as = "Z"; +parameter lpm_type = "cyclone10gx_io_ibuf"; + +(* iopad_external_pin *) input i; +(* iopad_external_pin *) input ibar; +input dynamicterminationcontrol; +output o; + +endmodule + +(* blackbox *) +module cyclone10gx_io_obuf(i, oe, dynamicterminationcontrol, seriesterminationcontrol, parallelterminationcontrol, devoe, o, obar); + +parameter open_drain_output = "false"; +parameter bus_hold = "false"; +parameter shift_series_termination_control = "false"; +parameter sim_dynamic_termination_control_is_connected = "false"; +parameter lpm_type = "cyclone10gx_io_obuf"; + +input i; +input oe; +input devoe; +input dynamicterminationcontrol; +input [15:0] seriesterminationcontrol; +input [15:0] parallelterminationcontrol; +(* iopad_external_pin *) output o; +(* iopad_external_pin *) output obar; + +endmodule + +(* blackbox *) +module cyclonev_clkena(inclk, ena, enaout, outclk); + +parameter clock_type = "auto"; +parameter ena_register_mode = "always enabled"; +parameter lpm_type = "cyclonev_clkena"; +parameter ena_register_power_up = "high"; +parameter disable_mode = "low"; +parameter test_syn = "high"; + +input inclk; +input ena; +output enaout; +output outclk; + +endmodule + +(* blackbox *) +module cyclone10gx_clkena(inclk, ena, enaout, outclk); + +parameter clock_type = "auto"; +parameter ena_register_mode = "always enabled"; +parameter lpm_type = "cyclone10gx_clkena"; +parameter ena_register_power_up = "high"; +parameter disable_mode = "low"; +parameter test_syn = "high"; + +input inclk; +input ena; +output enaout; +output outclk; + +endmodule + +// Internal interfaces +(* keep *) +module cyclonev_oscillator(oscena, clkout, clkout1); + +input oscena; +output clkout; +output clkout1; + +endmodule + +// HPS interfaces +(* keep *) +module cyclonev_hps_interface_mpu_general_purpose(gp_in, gp_out); + +input [31:0] gp_in; +output [31:0] gp_out; + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/mem_sim.v b/resources/netlist/resources/kernel/share/intel_alm/common/mem_sim.v new file mode 100644 index 0000000..c9ba8c7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/mem_sim.v @@ -0,0 +1,155 @@ +// The MLAB +// -------- +// In addition to Logic Array Blocks (LABs) that contain ten Adaptive Logic +// Modules (ALMs, see alm_sim.v), the Cyclone V/10GX also contain +// Memory/Logic Array Blocks (MLABs) that can act as either ten ALMs, or utilise +// the memory the ALM uses to store the look-up table data for general usage, +// producing a 32 address by 20-bit block of memory. MLABs are spread out +// around the chip, so they can be placed near where they are needed, rather than +// being comparatively limited in placement for a deep but narrow memory such as +// the M10K memory block. +// +// MLABs are used mainly for shallow but wide memories, such as CPU register +// files (which have perhaps 32 registers that are comparatively wide (16/32-bit)) +// or shift registers (by using the output of the Nth bit as input for the N+1th +// bit). +// +// Oddly, instead of providing a block 32 address by 20-bit cell, Quartus asks +// synthesis tools to build MLABs out of 32 address by 1-bit cells, and tries +// to put these cells in the same MLAB during cell placement. Because of this +// a MISTRAL_MLAB cell represents one of these 32 address by 1-bit cells, and +// 20 of them represent a physical MLAB. +// +// How the MLAB works +// ------------------ +// MLABs are poorly documented, so the following information is based mainly +// on the simulation model and my knowledge of how memories like these work. +// Additionally, note that the ports of MISTRAL_MLAB are the ones auto-generated +// by the Yosys `memory_bram` pass, and it doesn't make sense to me to use +// `techmap` just for the sake of renaming the cell ports. +// +// The MLAB can be initialised to any value, but unfortunately Quartus only +// allows memory initialisation from a file. Since Yosys doesn't preserve input +// file information, or write the contents of an `initial` block to a file, +// Yosys can't currently initialise the MLAB in a way Quartus will accept. +// +// The MLAB takes in data from A1DATA at the rising edge of CLK1, and if A1EN +// is high, writes it to the address in A1ADDR. A1EN can therefore be used to +// conditionally write data to the MLAB. +// +// Simultaneously, the MLAB reads data from B1ADDR, and outputs it to B1DATA, +// asynchronous to CLK1 and ignoring A1EN. If a synchronous read is needed +// then the output can be fed to embedded flops. Presently, Yosys assumes +// Quartus will pack external flops into the MLAB, but this is an assumption +// that needs testing. + +// The vendor sim model outputs 'x for a very short period (a few +// combinational delta cycles) after each write. This has been omitted from +// the following model because it's very difficult to trigger this in practice +// as clock cycles will be much longer than any potential blip of 'x, so the +// model can be treated as always returning a defined result. + +(* abc9_box, lib_whitebox *) +module MISTRAL_MLAB(input [4:0] A1ADDR, input A1DATA, A1EN, + (* clkbuf_sink *) input CLK1, + input [4:0] B1ADDR, output B1DATA); + +reg [31:0] mem = 32'b0; + +`ifdef cyclonev +specify + $setup(A1ADDR, posedge CLK1, 86); + $setup(A1DATA, posedge CLK1, 86); + $setup(A1EN, posedge CLK1, 86); + + (B1ADDR[0] => B1DATA) = 487; + (B1ADDR[1] => B1DATA) = 475; + (B1ADDR[2] => B1DATA) = 382; + (B1ADDR[3] => B1DATA) = 284; + (B1ADDR[4] => B1DATA) = 96; +endspecify +`endif +`ifdef arriav +specify + $setup(A1ADDR, posedge CLK1, 62); + $setup(A1DATA, posedge CLK1, 62); + $setup(A1EN, posedge CLK1, 62); + + (B1ADDR[0] => B1DATA) = 370; + (B1ADDR[1] => B1DATA) = 292; + (B1ADDR[2] => B1DATA) = 218; + (B1ADDR[3] => B1DATA) = 74; + (B1ADDR[4] => B1DATA) = 177; +endspecify +`endif +`ifdef cyclone10gx +// TODO: Cyclone 10 GX timings; the below timings are for Cyclone V +specify + $setup(A1ADDR, posedge CLK1, 86); + $setup(A1DATA, posedge CLK1, 86); + $setup(A1EN, posedge CLK1, 86); + + (B1ADDR[0] => B1DATA) = 487; + (B1ADDR[1] => B1DATA) = 475; + (B1ADDR[2] => B1DATA) = 382; + (B1ADDR[3] => B1DATA) = 284; + (B1ADDR[4] => B1DATA) = 96; +endspecify +`endif + +always @(posedge CLK1) + if (A1EN) mem[A1ADDR] <= A1DATA; + +assign B1DATA = mem[B1ADDR]; + +endmodule + +// The M10K +// -------- +// TODO + +module MISTRAL_M10K(CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); + +parameter CFG_ABITS = 10; +parameter CFG_DBITS = 10; + +(* clkbuf_sink *) input CLK1; +input [CFG_ABITS-1:0] A1ADDR, B1ADDR; +input [CFG_DBITS-1:0] A1DATA; +input A1EN, B1EN; +output reg [CFG_DBITS-1:0] B1DATA; + +reg [2**CFG_ABITS * CFG_DBITS - 1 : 0] mem = 0; + +`ifdef cyclonev +specify + $setup(A1ADDR, posedge CLK1, 125); + $setup(A1DATA, posedge CLK1, 97); + $setup(A1EN, posedge CLK1, 140); + $setup(B1ADDR, posedge CLK1, 125); + $setup(B1EN, posedge CLK1, 161); + + if (B1EN) (posedge CLK1 => (B1DATA : A1DATA)) = 1004; +endspecify +`endif +`ifdef arriav +specify + $setup(A1ADDR, posedge CLK1, 97); + $setup(A1DATA, posedge CLK1, 74); + $setup(A1EN, posedge CLK1, 109); + $setup(B1ADDR, posedge CLK1, 97); + $setup(B1EN, posedge CLK1, 126); + + if (B1EN) (posedge CLK1 => (B1DATA : A1DATA)) = 787; +endspecify +`endif + +always @(posedge CLK1) begin + if (!A1EN) + mem[(A1ADDR + 1) * CFG_DBITS - 1 : A1ADDR * CFG_DBITS] <= A1DATA; + + if (B1EN) + B1DATA <= mem[(B1ADDR + 1) * CFG_DBITS - 1 : B1ADDR * CFG_DBITS]; +end + +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/misc_sim.v b/resources/netlist/resources/kernel/share/intel_alm/common/misc_sim.v new file mode 100644 index 0000000..b1f970a --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/misc_sim.v @@ -0,0 +1,21 @@ +module MISTRAL_IB((* iopad_external_pin *) input PAD, output O); + assign O = PAD; +endmodule + +module MISTRAL_OB((* iopad_external_pin *) output PAD, input I); + assign PAD = I; +endmodule + +module MISTRAL_IO((* iopad_external_pin *) inout PAD, input I, input OE, output O); + assign PAD = OE ? I : 1'bz; + assign O = PAD; +endmodule + +// Eventually, we should support clock enables and model them here too. +// For now, CLKENA is used as a basic entry point to global routing. +module MISTRAL_CLKBUF ( + input A, + (* clkbuf_driver *) output Q +); + assign Q = A; +endmodule \ No newline at end of file diff --git a/resources/netlist/resources/kernel/share/intel_alm/common/quartus_rename.v b/resources/netlist/resources/kernel/share/intel_alm/common/quartus_rename.v new file mode 100644 index 0000000..217dc5d --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/common/quartus_rename.v @@ -0,0 +1,311 @@ +`ifdef cyclonev +`define LCELL cyclonev_lcell_comb +`define MAC cyclonev_mac +`define MLAB cyclonev_mlab_cell +`define RAM_BLOCK cyclonev_ram_block +`define IBUF cyclonev_io_ibuf +`define OBUF cyclonev_io_obuf +`define CLKENA cyclonev_clkena +`endif +`ifdef arriav +`define LCELL arriav_lcell_comb +`define MAC arriav_mac +`define MLAB arriav_mlab_cell +`define RAM_BLOCK arriav_ram_block +`define IBUF arriav_io_ibuf +`define OBUF arriav_io_obuf +`define CLKENA arriav_clkena +`endif +`ifdef cyclone10gx +`define LCELL cyclone10gx_lcell_comb +`define MAC cyclone10gx_mac +`define MLAB cyclone10gx_mlab_cell +`define RAM_BLOCK cyclone10gx_ram_block +`define IBUF cyclone10gx_io_ibuf +`define OBUF cyclone10gx_io_obuf +`define CLKENA cyclone10gx_clkena +`endif + +module __MISTRAL_VCC(output Q); + +MISTRAL_ALUT2 #(.LUT(4'b1111)) _TECHMAP_REPLACE_ (.A(1'b1), .B(1'b1), .Q(Q)); + +endmodule + + +module __MISTRAL_GND(output Q); + +MISTRAL_ALUT2 #(.LUT(4'b0000)) _TECHMAP_REPLACE_ (.A(1'b1), .B(1'b1), .Q(Q)); + +endmodule + + +module MISTRAL_FF(input DATAIN, CLK, ACLR, ENA, SCLR, SLOAD, SDATA, output reg Q); + +dffeas #(.power_up("low"), .is_wysiwyg("true")) _TECHMAP_REPLACE_ (.d(DATAIN), .clk(CLK), .clrn(ACLR), .ena(ENA), .sclr(SCLR), .sload(SLOAD), .asdata(SDATA), .q(Q)); + +endmodule + + +module MISTRAL_ALUT6(input A, B, C, D, E, F, output Q); +parameter [63:0] LUT = 64'h0000_0000_0000_0000; + +`LCELL #(.lut_mask(LUT)) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D), .datae(E), .dataf(F), .combout(Q)); + +endmodule + + +module MISTRAL_ALUT5(input A, B, C, D, E, output Q); +parameter [31:0] LUT = 32'h0000_0000; + +`LCELL #(.lut_mask({2{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D), .datae(E), .combout(Q)); + +endmodule + + +module MISTRAL_ALUT4(input A, B, C, D, output Q); +parameter [15:0] LUT = 16'h0000; + +`LCELL #(.lut_mask({4{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D), .combout(Q)); + +endmodule + + +module MISTRAL_ALUT3(input A, B, C, output Q); +parameter [7:0] LUT = 8'h00; + +`LCELL #(.lut_mask({8{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .combout(Q)); + +endmodule + + +module MISTRAL_ALUT2(input A, B, output Q); +parameter [3:0] LUT = 4'h0; + +`LCELL #(.lut_mask({16{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .combout(Q)); + +endmodule + + +module MISTRAL_NOT(input A, output Q); + +NOT _TECHMAP_REPLACE_ (.IN(A), .OUT(Q)); + +endmodule + + +module MISTRAL_ALUT_ARITH(input A, B, C, D0, D1, CI, output SO, CO); +parameter LUT0 = 16'h0000; +parameter LUT1 = 16'h0000; + +`LCELL #(.lut_mask({16'h0, LUT1, 16'h0, LUT0})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D0), .dataf(D1), .cin(CI), .sumout(SO), .cout(CO)); + +endmodule + + +module MISTRAL_MLAB(input [4:0] A1ADDR, input A1DATA, A1EN, CLK1, input [4:0] B1ADDR, output B1DATA); + +parameter _TECHMAP_CELLNAME_ = ""; + +// Here we get to an unfortunate situation. The cell has a mem_init0 parameter, +// which takes in a hexadecimal string that could be used to initialise RAM. +// In the vendor simulation models, this appears to work fine, but Quartus, +// either intentionally or not, forgets about this parameter and initialises the +// RAM to zero. +// +// Because of this, RAM initialisation is presently disabled, but the source +// used to generate mem_init0 is kept (commented out) in case this gets fixed +// or an undocumented way to get Quartus to initialise from mem_init0 is found. + +`MLAB #( + .logical_ram_name(_TECHMAP_CELLNAME_), + .logical_ram_depth(32), + .logical_ram_width(1), + .mixed_port_feed_through_mode("Dont Care"), + .first_bit_number(0), + .first_address(0), + .last_address(31), + .address_width(5), + .data_width(1), + .byte_enable_mask_width(1), + .port_b_data_out_clock("NONE"), + // .mem_init0($sformatf("%08x", INIT)) +) _TECHMAP_REPLACE_ ( + .portaaddr(A1ADDR), + .portadatain(A1DATA), + .portbaddr(B1ADDR), + .portbdataout(B1DATA), + .ena0(A1EN), + .clk0(CLK1) +); + +endmodule + + +module MISTRAL_M10K(A1ADDR, A1DATA, A1EN, CLK1, B1ADDR, B1DATA, B1EN); + +parameter CFG_ABITS = 10; +parameter CFG_DBITS = 10; + +parameter _TECHMAP_CELLNAME_ = ""; + +input [CFG_ABITS-1:0] A1ADDR, B1ADDR; +input [CFG_DBITS-1:0] A1DATA; +input CLK1, A1EN, B1EN; +output [CFG_DBITS-1:0] B1DATA; + +// Much like the MLAB, the M10K has mem_init[01234] parameters which would let +// you initialise the RAM cell via hex literals. If they were implemented. + +// Since the MISTRAL_M10K block has an inverted write-enable (like the real hardware) +// but the Quartus primitive expects a normal write-enable, we add an inverter. +wire A1EN_N; +NOT wren_inv (.IN(A1EN), .OUT(A1EN_N)); + +`RAM_BLOCK #( + .operation_mode("dual_port"), + .logical_ram_name(_TECHMAP_CELLNAME_), + .port_a_address_width(CFG_ABITS), + .port_a_data_width(CFG_DBITS), + .port_a_logical_ram_depth(2**CFG_ABITS), + .port_a_logical_ram_width(CFG_DBITS), + .port_a_first_address(0), + .port_a_last_address(2**CFG_ABITS - 1), + .port_a_first_bit_number(0), + .port_b_address_width(CFG_ABITS), + .port_b_data_width(CFG_DBITS), + .port_b_logical_ram_depth(2**CFG_ABITS), + .port_b_logical_ram_width(CFG_DBITS), + .port_b_first_address(0), + .port_b_last_address(2**CFG_ABITS - 1), + .port_b_first_bit_number(0), + .port_b_address_clock("clock0"), + .port_b_read_enable_clock("clock0") +) ram_block ( + .portaaddr(A1ADDR), + .portadatain(A1DATA), + .portawe(A1EN_N), + .portbaddr(B1ADDR), + .portbdataout(B1DATA), + .portbre(B1EN), + .clk0(CLK1) +); + +endmodule + + +module MISTRAL_MUL27X27(input [26:0] A, B, output [53:0] Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; + +`MAC #( + .ax_width(27), + .signed_max(A_SIGNED ? "true" : "false"), + .ay_scan_in_width(27), + .signed_may(B_SIGNED ? "true" : "false"), + .result_a_width(54), + .operation_mode("M27x27") +) _TECHMAP_REPLACE_ ( + .ax(A), + .ay(B), + .resulta(Y) +); + +endmodule + + +module MISTRAL_MUL18X18(input [17:0] A, B, output [35:0] Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; + +`MAC #( + .ax_width(18), + .signed_max(A_SIGNED ? "true" : "false"), + .ay_scan_in_width(18), + .signed_may(B_SIGNED ? "true" : "false"), + .result_a_width(36), + .operation_mode("M18x18_FULL") +) _TECHMAP_REPLACE_ ( + .ax(A), + .ay(B), + .resulta(Y) +); + +endmodule + + +module MISTRAL_MUL9X9(input [8:0] A, B, output [17:0] Y); + +parameter A_SIGNED = 1; +parameter B_SIGNED = 1; + +`MAC #( + .ax_width(9), + .signed_max(A_SIGNED ? "true" : "false"), + .ay_scan_in_width(9), + .signed_may(B_SIGNED ? "true" : "false"), + .result_a_width(18), + .operation_mode("M9x9") +) _TECHMAP_REPLACE_ ( + .ax(A), + .ay(B), + .resulta(Y) +); + +endmodule + +module MISTRAL_IB(input PAD, output O); +`IBUF #( + .bus_hold("false"), + .differential_mode("false") +) _TECHMAP_REPLACE_ ( + .i(PAD), + .o(O) +); +endmodule + +module MISTRAL_OB(output PAD, input I, OE); +`OBUF #( + .bus_hold("false"), + .differential_mode("false") +) _TECHMAP_REPLACE_ ( + .i(I), + .o(PAD), + .oe(OE) +); +endmodule + +module MISTRAL_IO(output PAD, input I, OE, output O); +`IBUF #( + .bus_hold("false"), + .differential_mode("false") +) ibuf ( + .i(PAD), + .o(O) +); + +`OBUF #( + .bus_hold("false"), + .differential_mode("false") +) obuf ( + .i(I), + .o(PAD), + .oe(OE) +); +endmodule + +module MISTRAL_CLKBUF (input A, output Q); +`CLKENA #( + .clock_type("auto"), + .ena_register_mode("always enabled"), + .ena_register_power_up("high"), + .disable_mode("low"), + .test_syn("high") +) _TECHMAP_REPLACE_ ( + .inclk(A), + .ena(1'b1), + .outclk(Q) +); +endmodule diff --git a/resources/netlist/resources/kernel/share/intel_alm/cyclonev/cells_sim.v b/resources/netlist/resources/kernel/share/intel_alm/cyclonev/cells_sim.v new file mode 100644 index 0000000..14bb756 --- /dev/null +++ b/resources/netlist/resources/kernel/share/intel_alm/cyclonev/cells_sim.v @@ -0,0 +1,168 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +module VCC (output V); + assign V = 1'b1; +endmodule // VCC + +module GND (output G); + assign G = 1'b0; +endmodule // GND + +/* Altera Cyclone V devices Input Buffer Primitive */ +module cyclonev_io_ibuf + (output o, + (* iopad_external_pin *) input i, + (* iopad_external_pin *) input ibar, + input dynamicterminationcontrol); + + parameter differential_mode = "false"; + parameter bus_hold = "false"; + parameter simulate_z_as = "Z"; + parameter lpm_type = "cyclonev_io_ibuf"; + + assign o = i; +endmodule // cyclonev_io_ibuf + +/* Altera Cyclone V devices Output Buffer Primitive */ +module cyclonev_io_obuf + ((* iopad_external_pin *) output o, + input i, oe, dynamicterminationcontrol, + input [15:0] seriesterminationcontrol, parallelterminationcontrol, + input devoe, + (* iopad_external_pin *) output obar); + + parameter open_drain_output = "false"; + parameter bus_hold = "false"; + parameter shift_series_termination_control = "false"; + parameter sim_dynamic_termination_control_is_connected = "false"; + parameter lpm_type = "cyclonev_io_obuf"; + + assign o = oe ? i : 1'bz; +endmodule // cyclonev_io_obuf + +/* Altera Cyclone V LUT Primitive */ +module cyclonev_lcell_comb + (output combout, cout, sumout, shareout, + input dataa, datab, datac, datad, + input datae, dataf, datag, cin, + input sharein); + + parameter lut_mask = 64'hFFFFFFFFFFFFFFFF; + parameter dont_touch = "off"; + parameter lpm_type = "cyclonev_lcell_comb"; + parameter shared_arith = "off"; + parameter extended_lut = "off"; + + // Internal variables + // Sub mask for fragmented LUTs + wire [15:0] mask_a, mask_b, mask_c, mask_d; + // Independent output for fragmented LUTs + wire output_0, output_1, output_2, output_3; + // Extended mode uses mux to define the output + wire mux_0, mux_1; + // Input for hold the shared LUT mode value + wire shared_lut_alm; + + // Simulation model of 4-input LUT + function lut4; + input [15:0] mask; + input dataa, datab, datac, datad; + reg [7:0] s3; + reg [3:0] s2; + reg [1:0] s1; + begin + s3 = datad ? mask[15:8] : mask[7:0]; + s2 = datac ? s3[7:4] : s3[3:0]; + s1 = datab ? s2[3:2] : s2[1:0]; + lut4 = dataa ? s1[1] : s1[0]; + end + endfunction // lut4 + + // Simulation model of 5-input LUT + function lut5; + input [31:0] mask; // wp-01003.pdf, page 3: "a 5-LUT can be built with two 4-LUTs and a multiplexer. + input dataa, datab, datac, datad, datae; + reg upper_lut_value; + reg lower_lut_value; + begin + upper_lut_value = lut4(mask[31:16], dataa, datab, datac, datad); + lower_lut_value = lut4(mask[15:0], dataa, datab, datac, datad); + lut5 = (datae) ? upper_lut_value : lower_lut_value; + end + endfunction // lut5 + + // Simulation model of 6-input LUT + function lut6; + input [63:0] mask; + input dataa, datab, datac, datad, datae, dataf; + reg upper_lut_value; + reg lower_lut_value; + reg out_0, out_1, out_2, out_3; + begin + upper_lut_value = lut5(mask[63:32], dataa, datab, datac, datad, datae); + lower_lut_value = lut5(mask[31:0], dataa, datab, datac, datad, datae); + lut6 = (dataf) ? upper_lut_value : lower_lut_value; + end + endfunction // lut6 + + assign {mask_a, mask_b, mask_c, mask_d} = {lut_mask[15:0], lut_mask[31:16], lut_mask[47:32], lut_mask[63:48]}; +`ifdef ADVANCED_ALM + always @(*) begin + if(extended_lut == "on") + shared_lut_alm = datag; + else + shared_lut_alm = datac; + // Build the ALM behaviour + out_0 = lut4(mask_a, dataa, datab, datac, datad); + out_1 = lut4(mask_b, dataa, datab, shared_lut_alm, datad); + out_2 = lut4(mask_c, dataa, datab, datac, datad); + out_3 = lut4(mask_d, dataa, datab, shared_lut_alm, datad); + end +`else + `ifdef DEBUG + initial $display("Advanced ALM lut combine is not implemented yet"); + `endif +`endif +endmodule // cyclonev_lcell_comb + + +/* Altera D Flip-Flop Primitive */ +module dffeas + (output q, + input d, clk, clrn, prn, ena, + input asdata, aload, sclr, sload); + + // Timing simulation is not covered + parameter power_up="dontcare"; + parameter is_wysiwyg="false"; + + reg q_tmp; + wire reset; + reg [7:0] debug_net; + + assign reset = (prn && sclr && ~clrn && ena); + assign q = q_tmp & 1'b1; + + always @(posedge clk, posedge aload) begin + if(reset) q_tmp <= 0; + else q_tmp <= d; + end + assign q = q_tmp; + +endmodule // dffeas diff --git a/resources/netlist/resources/kernel/share/machxo2/brams.txt b/resources/netlist/resources/kernel/share/machxo2/brams.txt new file mode 100644 index 0000000..3afbeda --- /dev/null +++ b/resources/netlist/resources/kernel/share/machxo2/brams.txt @@ -0,0 +1,50 @@ +ram block $__DP8KC_ { + abits 13; + widths 1 2 4 9 per_port; + cost 64; + init no_undef; + port srsw "A" "B" { + clock posedge; + clken; + portoption "WRITEMODE" "NORMAL" { + rdwr no_change; + } + portoption "WRITEMODE" "WRITETHROUGH" { + rdwr new; + } + portoption "WRITEMODE" "READBEFOREWRITE" { + rdwr old; + } + option "RESETMODE" "SYNC" { + rdsrst zero ungated block_wr; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } +} + +ram block $__PDPW8KC_ { + abits 13; + widths 1 2 4 9 18 per_port; + byte 9; + cost 64; + init no_undef; + port sr "R" { + clock posedge; + clken; + option "RESETMODE" "SYNC" { + rdsrst zero ungated; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } + port sw "W" { + width 18; + clock posedge; + clken; + } +} diff --git a/resources/netlist/resources/kernel/share/machxo2/brams_map.v b/resources/netlist/resources/kernel/share/machxo2/brams_map.v new file mode 100644 index 0000000..05a8e8a --- /dev/null +++ b/resources/netlist/resources/kernel/share/machxo2/brams_map.v @@ -0,0 +1,337 @@ +module $__DP8KC_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +parameter PORT_A_WIDTH = 18; +parameter PORT_A_OPTION_WRITEMODE = "NORMAL"; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [12:0] PORT_A_ADDR; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +parameter PORT_B_WIDTH = 18; +parameter PORT_B_OPTION_WRITEMODE = "NORMAL"; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; +input [12:0] PORT_B_ADDR; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; + +function [319:0] init_slice; + input integer idx; + integer i, j; + init_slice = 0; + for (i = 0; i < 16; i = i + 1) begin + init_slice[i*20+:18] = INIT[(idx * 16 + i) * 18+:18]; + end +endfunction + +wire [8:0] DOA; +wire [8:0] DOB; +wire [8:0] DIA = PORT_A_WR_DATA; +wire [8:0] DIB = PORT_B_WR_DATA; + +assign PORT_A_RD_DATA = DOA; +assign PORT_B_RD_DATA = DOB; + +DP8KC #( + .INITVAL_00($sformatf("0x%080x", init_slice('h00))), + .INITVAL_01($sformatf("0x%080x", init_slice('h01))), + .INITVAL_02($sformatf("0x%080x", init_slice('h02))), + .INITVAL_03($sformatf("0x%080x", init_slice('h03))), + .INITVAL_04($sformatf("0x%080x", init_slice('h04))), + .INITVAL_05($sformatf("0x%080x", init_slice('h05))), + .INITVAL_06($sformatf("0x%080x", init_slice('h06))), + .INITVAL_07($sformatf("0x%080x", init_slice('h07))), + .INITVAL_08($sformatf("0x%080x", init_slice('h08))), + .INITVAL_09($sformatf("0x%080x", init_slice('h09))), + .INITVAL_0A($sformatf("0x%080x", init_slice('h0a))), + .INITVAL_0B($sformatf("0x%080x", init_slice('h0b))), + .INITVAL_0C($sformatf("0x%080x", init_slice('h0c))), + .INITVAL_0D($sformatf("0x%080x", init_slice('h0d))), + .INITVAL_0E($sformatf("0x%080x", init_slice('h0e))), + .INITVAL_0F($sformatf("0x%080x", init_slice('h0f))), + .INITVAL_10($sformatf("0x%080x", init_slice('h10))), + .INITVAL_11($sformatf("0x%080x", init_slice('h11))), + .INITVAL_12($sformatf("0x%080x", init_slice('h12))), + .INITVAL_13($sformatf("0x%080x", init_slice('h13))), + .INITVAL_14($sformatf("0x%080x", init_slice('h14))), + .INITVAL_15($sformatf("0x%080x", init_slice('h15))), + .INITVAL_16($sformatf("0x%080x", init_slice('h16))), + .INITVAL_17($sformatf("0x%080x", init_slice('h17))), + .INITVAL_18($sformatf("0x%080x", init_slice('h18))), + .INITVAL_19($sformatf("0x%080x", init_slice('h19))), + .INITVAL_1A($sformatf("0x%080x", init_slice('h1a))), + .INITVAL_1B($sformatf("0x%080x", init_slice('h1b))), + .INITVAL_1C($sformatf("0x%080x", init_slice('h1c))), + .INITVAL_1D($sformatf("0x%080x", init_slice('h1d))), + .INITVAL_1E($sformatf("0x%080x", init_slice('h1e))), + .INITVAL_1F($sformatf("0x%080x", init_slice('h1f))), + .DATA_WIDTH_A(PORT_A_WIDTH), + .DATA_WIDTH_B(PORT_B_WIDTH), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), + .CSDECODE_A("0b000"), + .CSDECODE_B("0b000"), + .WRITEMODE_A(PORT_A_OPTION_WRITEMODE), + .WRITEMODE_B(PORT_B_OPTION_WRITEMODE), + .GSR("AUTO") +) _TECHMAP_REPLACE_ ( + .CLKA(PORT_A_CLK), + .WEA(PORT_A_WR_EN), + .CEA(PORT_A_CLK_EN), + .OCEA(1'b1), + .RSTA(OPTION_RESETMODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST), + .CSA0(1'b0), + .CSA1(1'b0), + .CSA2(1'b0), + .ADA0(PORT_A_WIDTH == 9 ? 1'b1 : PORT_A_ADDR[0]), + .ADA1(PORT_A_ADDR[1]), + .ADA2(PORT_A_ADDR[2]), + .ADA3(PORT_A_ADDR[3]), + .ADA4(PORT_A_ADDR[4]), + .ADA5(PORT_A_ADDR[5]), + .ADA6(PORT_A_ADDR[6]), + .ADA7(PORT_A_ADDR[7]), + .ADA8(PORT_A_ADDR[8]), + .ADA9(PORT_A_ADDR[9]), + .ADA10(PORT_A_ADDR[10]), + .ADA11(PORT_A_ADDR[11]), + .ADA12(PORT_A_ADDR[12]), + .DIA0(DIA[0]), + .DIA1(DIA[1]), + .DIA2(DIA[2]), + .DIA3(DIA[3]), + .DIA4(DIA[4]), + .DIA5(DIA[5]), + .DIA6(DIA[6]), + .DIA7(DIA[7]), + .DIA8(DIA[8]), + .DOA0(DOA[0]), + .DOA1(DOA[1]), + .DOA2(DOA[2]), + .DOA3(DOA[3]), + .DOA4(DOA[4]), + .DOA5(DOA[5]), + .DOA6(DOA[6]), + .DOA7(DOA[7]), + .DOA8(DOA[8]), + + .CLKB(PORT_B_CLK), + .WEB(PORT_B_WR_EN), + .CEB(PORT_B_CLK_EN), + .OCEB(1'b1), + .RSTB(OPTION_RESETMODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST), + .CSB0(1'b0), + .CSB1(1'b0), + .CSB2(1'b0), + .ADB0(PORT_B_WIDTH == 9 ? 1'b1 : PORT_B_ADDR[0]), + .ADB1(PORT_B_ADDR[1]), + .ADB2(PORT_B_ADDR[2]), + .ADB3(PORT_B_ADDR[3]), + .ADB4(PORT_B_ADDR[4]), + .ADB5(PORT_B_ADDR[5]), + .ADB6(PORT_B_ADDR[6]), + .ADB7(PORT_B_ADDR[7]), + .ADB8(PORT_B_ADDR[8]), + .ADB9(PORT_B_ADDR[9]), + .ADB10(PORT_B_ADDR[10]), + .ADB11(PORT_B_ADDR[11]), + .ADB12(PORT_B_ADDR[12]), + .DIB0(DIB[0]), + .DIB1(DIB[1]), + .DIB2(DIB[2]), + .DIB3(DIB[3]), + .DIB4(DIB[4]), + .DIB5(DIB[5]), + .DIB6(DIB[6]), + .DIB7(DIB[7]), + .DIB8(DIB[8]), + .DOB0(DOB[0]), + .DOB1(DOB[1]), + .DOB2(DOB[2]), + .DOB3(DOB[3]), + .DOB4(DOB[4]), + .DOB5(DOB[5]), + .DOB6(DOB[6]), + .DOB7(DOB[7]), + .DOB8(DOB[8]), +); + +endmodule + + +module $__PDPW8KC_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +parameter PORT_R_WIDTH = 18; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input PORT_R_RD_SRST; +input PORT_R_RD_ARST; +input [12:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +parameter PORT_W_WIDTH = 18; +parameter PORT_W_WR_EN_WIDTH = 2; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [12:0] PORT_W_ADDR; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +function [319:0] init_slice; + input integer idx; + integer i, j; + init_slice = 0; + for (i = 0; i < 16; i = i + 1) begin + init_slice[i*20+:18] = INIT[(idx * 16 + i) * 18+:18]; + end +endfunction + +wire [17:0] DI = PORT_W_WR_DATA; +wire [17:0] DO; + +assign PORT_R_RD_DATA = PORT_R_WIDTH == 18 ? DO : DO[17:9]; + +DP8KC #( + .INITVAL_00($sformatf("0x%080x", init_slice('h00))), + .INITVAL_01($sformatf("0x%080x", init_slice('h01))), + .INITVAL_02($sformatf("0x%080x", init_slice('h02))), + .INITVAL_03($sformatf("0x%080x", init_slice('h03))), + .INITVAL_04($sformatf("0x%080x", init_slice('h04))), + .INITVAL_05($sformatf("0x%080x", init_slice('h05))), + .INITVAL_06($sformatf("0x%080x", init_slice('h06))), + .INITVAL_07($sformatf("0x%080x", init_slice('h07))), + .INITVAL_08($sformatf("0x%080x", init_slice('h08))), + .INITVAL_09($sformatf("0x%080x", init_slice('h09))), + .INITVAL_0A($sformatf("0x%080x", init_slice('h0a))), + .INITVAL_0B($sformatf("0x%080x", init_slice('h0b))), + .INITVAL_0C($sformatf("0x%080x", init_slice('h0c))), + .INITVAL_0D($sformatf("0x%080x", init_slice('h0d))), + .INITVAL_0E($sformatf("0x%080x", init_slice('h0e))), + .INITVAL_0F($sformatf("0x%080x", init_slice('h0f))), + .INITVAL_10($sformatf("0x%080x", init_slice('h10))), + .INITVAL_11($sformatf("0x%080x", init_slice('h11))), + .INITVAL_12($sformatf("0x%080x", init_slice('h12))), + .INITVAL_13($sformatf("0x%080x", init_slice('h13))), + .INITVAL_14($sformatf("0x%080x", init_slice('h14))), + .INITVAL_15($sformatf("0x%080x", init_slice('h15))), + .INITVAL_16($sformatf("0x%080x", init_slice('h16))), + .INITVAL_17($sformatf("0x%080x", init_slice('h17))), + .INITVAL_18($sformatf("0x%080x", init_slice('h18))), + .INITVAL_19($sformatf("0x%080x", init_slice('h19))), + .INITVAL_1A($sformatf("0x%080x", init_slice('h1a))), + .INITVAL_1B($sformatf("0x%080x", init_slice('h1b))), + .INITVAL_1C($sformatf("0x%080x", init_slice('h1c))), + .INITVAL_1D($sformatf("0x%080x", init_slice('h1d))), + .INITVAL_1E($sformatf("0x%080x", init_slice('h1e))), + .INITVAL_1F($sformatf("0x%080x", init_slice('h1f))), + .DATA_WIDTH_A(PORT_W_WIDTH), + .DATA_WIDTH_B(PORT_R_WIDTH), + .REGMODE_A("NOREG"), + .REGMODE_B("NOREG"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), + .CSDECODE_A("0b000"), + .CSDECODE_B("0b000"), + .GSR("AUTO") +) _TECHMAP_REPLACE_ ( + .CLKA(PORT_W_CLK), + .WEA(PORT_W_WIDTH >= 9 ? 1'b1 : PORT_W_WR_EN[0]), + .CEA(PORT_W_CLK_EN), + .OCEA(1'b0), + .RSTA(1'b0), + .CSA0(1'b0), + .CSA1(1'b0), + .CSA2(1'b0), + .ADA0(PORT_W_WIDTH >= 9 ? PORT_W_WR_EN[0] : PORT_W_ADDR[0]), + .ADA1(PORT_W_WIDTH >= 18 ? PORT_W_WR_EN[1] : PORT_W_ADDR[1]), + .ADA2(PORT_W_ADDR[2]), + .ADA3(PORT_W_ADDR[3]), + .ADA4(PORT_W_ADDR[4]), + .ADA5(PORT_W_ADDR[5]), + .ADA6(PORT_W_ADDR[6]), + .ADA7(PORT_W_ADDR[7]), + .ADA8(PORT_W_ADDR[8]), + .ADA9(PORT_W_ADDR[9]), + .ADA10(PORT_W_ADDR[10]), + .ADA11(PORT_W_ADDR[11]), + .ADA12(PORT_W_ADDR[12]), + .DIA0(DI[0]), + .DIA1(DI[1]), + .DIA2(DI[2]), + .DIA3(DI[3]), + .DIA4(DI[4]), + .DIA5(DI[5]), + .DIA6(DI[6]), + .DIA7(DI[7]), + .DIA8(DI[8]), + .DIB0(DI[9]), + .DIB1(DI[10]), + .DIB2(DI[11]), + .DIB3(DI[12]), + .DIB4(DI[13]), + .DIB5(DI[14]), + .DIB6(DI[15]), + .DIB7(DI[16]), + .DIB8(DI[17]), + + .CLKB(PORT_R_CLK), + .WEB(1'b0), + .CEB(PORT_R_CLK_EN), + .OCEB(1'b1), + .RSTB(OPTION_RESETMODE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST), + .CSB0(1'b0), + .CSB1(1'b0), + .CSB2(1'b0), + .ADB0(PORT_R_ADDR[0]), + .ADB1(PORT_R_ADDR[1]), + .ADB2(PORT_R_ADDR[2]), + .ADB3(PORT_R_ADDR[3]), + .ADB4(PORT_R_ADDR[4]), + .ADB5(PORT_R_ADDR[5]), + .ADB6(PORT_R_ADDR[6]), + .ADB7(PORT_R_ADDR[7]), + .ADB8(PORT_R_ADDR[8]), + .ADB9(PORT_R_ADDR[9]), + .ADB10(PORT_R_ADDR[10]), + .ADB11(PORT_R_ADDR[11]), + .ADB12(PORT_R_ADDR[12]), + .DOA0(DO[0]), + .DOA1(DO[1]), + .DOA2(DO[2]), + .DOA3(DO[3]), + .DOA4(DO[4]), + .DOA5(DO[5]), + .DOA6(DO[6]), + .DOA7(DO[7]), + .DOA8(DO[8]), + .DOB0(DO[9]), + .DOB1(DO[10]), + .DOB2(DO[11]), + .DOB3(DO[12]), + .DOB4(DO[13]), + .DOB5(DO[14]), + .DOB6(DO[15]), + .DOB7(DO[16]), + .DOB8(DO[17]), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/machxo2/cells_map.v b/resources/netlist/resources/kernel/share/machxo2/cells_map.v new file mode 100644 index 0000000..9c370f2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/machxo2/cells_map.v @@ -0,0 +1,34 @@ +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + input [WIDTH-1:0] A; + output Y; + + localparam rep = 1<<(4-WIDTH); + wire [3:0] I; + + generate + if(WIDTH == 1) begin + assign I = {1'b0, 1'b0, 1'b0, A[0]}; + end else if(WIDTH == 2) begin + assign I = {1'b0, 1'b0, A[1], A[0]}; + end else if(WIDTH == 3) begin + assign I = {1'b0, A[2], A[1], A[0]}; + end else if(WIDTH == 4) begin + assign I = {A[3], A[2], A[1], A[0]}; + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate + + LUT4 #(.INIT({rep{LUT}})) _TECHMAP_REPLACE_ (.A(I[0]), .B(I[1]), .C(I[2]), .D(I[3]), .Z(Y)); +endmodule + +// DFFs +module \$_DFF_P_ (input D, C, output Q); FACADE_FF #(.CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(1'b0), .DI(D), .Q(Q)); endmodule + +// IO- "$__" cells for the iopadmap pass. +module \$__FACADE_OUTPAD (input I, output O); FACADE_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.PAD(O), .I(I), .T(1'b0)); endmodule +module \$__FACADE_INPAD (input I, output O); FACADE_IO #(.DIR("INPUT")) _TECHMAP_REPLACE_ (.PAD(I), .O(O)); endmodule +module \$__FACADE_TOUTPAD (input I, T, output O); FACADE_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.PAD(O), .I(I), .T(T)); endmodule +module \$__FACADE_TINOUTPAD (input I, T, output O, inout B); FACADE_IO #(.DIR("BIDIR")) _TECHMAP_REPLACE_ (.PAD(B), .I(I), .O(O), .T(T)); endmodule diff --git a/resources/netlist/resources/kernel/share/machxo2/cells_sim.v b/resources/netlist/resources/kernel/share/machxo2/cells_sim.v new file mode 100644 index 0000000..82c9d8c --- /dev/null +++ b/resources/netlist/resources/kernel/share/machxo2/cells_sim.v @@ -0,0 +1,333 @@ +module LUT4 #( + parameter [15:0] INIT = 0 +) ( + input A, B, C, D, + output Z +); + // This form of LUT propagates as few x's as possible. + wire [7:0] s3 = D ? INIT[15:8] : INIT[7:0]; + wire [3:0] s2 = C ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = B ? s2[ 3:2] : s2[1:0]; + assign Z = A ? s1[1] : s1[0]; +endmodule + +module FACADE_FF #( + parameter GSR = "ENABLED", + parameter CEMUX = "1", + parameter CLKMUX = "0", + parameter LSRMUX = "LSR", + parameter LSRONMUX = "LSRMUX", + parameter SRMODE = "LSR_OVER_CE", + parameter REGSET = "SET", + parameter REGMODE = "FF" +) ( + input CLK, DI, LSR, CE, + output reg Q +); + + wire muxce; + generate + case (CEMUX) + "1": assign muxce = 1'b1; + "0": assign muxce = 1'b0; + "INV": assign muxce = ~CE; + default: assign muxce = CE; + endcase + endgenerate + + wire muxlsr = (LSRMUX == "INV") ? ~LSR : LSR; + wire muxlsron = (LSRONMUX == "LSRMUX") ? muxlsr : 1'b0; + wire muxclk = (CLKMUX == "INV") ? ~CLK : CLK; + wire srval = (REGSET == "SET") ? 1'b1 : 1'b0; + + initial Q = srval; + + generate + if (REGMODE == "FF") begin + if (SRMODE == "ASYNC") begin + always @(posedge muxclk, posedge muxlsron) + if (muxlsron) + Q <= srval; + else if (muxce) + Q <= DI; + end else begin + always @(posedge muxclk) + if (muxlsron) + Q <= srval; + else if (muxce) + Q <= DI; + end + end else if (REGMODE == "LATCH") begin + ERROR_UNSUPPORTED_FF_MODE error(); + end else begin + ERROR_UNKNOWN_FF_MODE error(); + end + endgenerate +endmodule + +/* For consistency with ECP5; represents F0/F1 => OFX0 mux in a slice. */ +module PFUMX (input ALUT, BLUT, C0, output Z); + assign Z = C0 ? ALUT : BLUT; +endmodule + +/* For consistency with ECP5; represents FXA/FXB => OFX1 mux in a slice. */ +module L6MUX21 (input D0, D1, SD, output Z); + assign Z = SD ? D1 : D0; +endmodule + +/* For consistency, input order matches TRELLIS_SLICE even though the BELs in +prjtrellis were filled in clockwise order from bottom left. */ +module FACADE_SLICE #( + parameter MODE = "LOGIC", + parameter GSR = "ENABLED", + parameter SRMODE = "LSR_OVER_CE", + parameter CEMUX = "1", + parameter CLKMUX = "0", + parameter LSRMUX = "LSR", + parameter LSRONMUX = "LSRMUX", + parameter LUT0_INITVAL = 16'hFFFF, + parameter LUT1_INITVAL = 16'hFFFF, + parameter REGMODE = "FF", + parameter REG0_SD = "1", + parameter REG1_SD = "1", + parameter REG0_REGSET = "SET", + parameter REG1_REGSET = "SET", + parameter CCU2_INJECT1_0 = "YES", + parameter CCU2_INJECT1_1 = "YES", + parameter WREMUX = "INV" +) ( + input A0, B0, C0, D0, + input A1, B1, C1, D1, + input M0, M1, + input FCI, FXA, FXB, + + input CLK, LSR, CE, + input DI0, DI1, + + input WD0, WD1, + input WAD0, WAD1, WAD2, WAD3, + input WRE, WCK, + + output F0, Q0, + output F1, Q1, + output FCO, OFX0, OFX1, + + output WDO0, WDO1, WDO2, WDO3, + output WADO0, WADO1, WADO2, WADO3 +); + + generate + if (MODE == "LOGIC") begin + L6MUX21 FXMUX (.D0(FXA), .D1(FXB), .SD(M1), .Z(OFX1)); + + wire k0; + wire k1; + PFUMX K0K1MUX (.ALUT(k1), .BLUT(k0), .C0(M0), .Z(OFX0)); + + LUT4 #(.INIT(LUT0_INITVAL)) LUT_0 (.A(A0), .B(B0), .C(C0), .D(D0), .Z(k0)); + LUT4 #(.INIT(LUT1_INITVAL)) LUT_1 (.A(A0), .B(B0), .C(C0), .D(D0), .Z(k1)); + + assign F0 = k0; + assign F1 = k1; + end else if (MODE == "CCU2") begin + ERROR_UNSUPPORTED_SLICE_MODE error(); + end else if (MODE == "DPRAM") begin + ERROR_UNSUPPORTED_SLICE_MODE error(); + end else begin + ERROR_UNKNOWN_SLICE_MODE error(); + end + endgenerate + + /* Reg can be fed either by M, or DI inputs; DI inputs muxes OFX and F + outputs (in other words, feeds back into FACADE_SLICE). */ + wire di0 = (REG0_SD == "1") ? DI0 : M0; + wire di1 = (REG1_SD == "1") ? DI1 : M1; + + FACADE_FF#(.GSR(GSR), .CEMUX(CEMUX), .CLKMUX(CLKMUX), .LSRMUX(LSRMUX), + .LSRONMUX(LSRONMUX), .SRMODE(SRMODE), .REGSET(REG0_REGSET), + .REGMODE(REGMODE)) REG_0 (.CLK(CLK), .DI(di0), .LSR(LSR), .CE(CE), .Q(Q0)); + FACADE_FF#(.GSR(GSR), .CEMUX(CEMUX), .CLKMUX(CLKMUX), .LSRMUX(LSRMUX), + .LSRONMUX(LSRONMUX), .SRMODE(SRMODE), .REGSET(REG1_REGSET), + .REGMODE(REGMODE)) REG_1 (.CLK(CLK), .DI(di1), .LSR(LSR), .CE(CE), .Q(Q1)); +endmodule + +module FACADE_IO #( + parameter DIR = "INPUT" +) ( + inout PAD, + input I, T, + output O +); + generate + if (DIR == "INPUT") begin + assign O = PAD; + end else if (DIR == "OUTPUT") begin + assign PAD = T ? 1'bz : I; + end else if (DIR == "BIDIR") begin + assign PAD = T ? 1'bz : I; + assign O = PAD; + end else begin + ERROR_UNKNOWN_IO_MODE error(); + end + endgenerate +endmodule + +(* blackbox *) +module OSCH #( + parameter NOM_FREQ = "2.08" +) ( + input STDBY, + output OSC, + output SEDSTDBY +); +endmodule + +(* blackbox *) +module DCCA ( + input CLKI, + input CE, + output CLKO +); +endmodule + +(* blackbox *) +module DCMA ( + input CLK0, + input CLK1, + input SEL, + output DCMOUT +); +endmodule + +(* abc9_box, lib_whitebox *) +module DPR16X4C ( + input [3:0] DI, + input WCK, WRE, + input [3:0] RAD, + input [3:0] WAD, + output [3:0] DO +); + parameter INITVAL = "0x0000000000000000"; + + function [63:0] convert_initval; + input [143:0] hex_initval; + reg done; + reg [63:0] temp; + reg [7:0] char; + integer i; + begin + done = 1'b0; + temp = 0; + for (i = 0; i < 16; i = i + 1) begin + if (!done) begin + char = hex_initval[8*i +: 8]; + if (char == "x") begin + done = 1'b1; + end else begin + if (char >= "0" && char <= "9") + temp[4*i +: 4] = char - "0"; + else if (char >= "A" && char <= "F") + temp[4*i +: 4] = 10 + char - "A"; + else if (char >= "a" && char <= "f") + temp[4*i +: 4] = 10 + char - "a"; + end + end + end + convert_initval = temp; + end + endfunction + + localparam conv_initval = convert_initval(INITVAL); + + reg [3:0] ram[0:15]; + integer i; + initial begin + for (i = 0; i < 15; i = i + 1) begin + ram[i] <= conv_initval[4*i +: 4]; + end + end + + always @(posedge WCK) + if (WRE) + ram[WAD] <= DI; + + assign DO = ram[RAD]; +endmodule + +(* blackbox *) +module DP8KC( + input DIA8, DIA7, DIA6, DIA5, DIA4, DIA3, DIA2, DIA1, DIA0, + input ADA12, ADA11, ADA10, ADA9, ADA8, ADA7, ADA6, ADA5, ADA4, ADA3, ADA2, ADA1, ADA0, + input CEA, OCEA, CLKA, WEA, RSTA, + input CSA2, CSA1, CSA0, + output DOA8, DOA7, DOA6, DOA5, DOA4, DOA3, DOA2, DOA1, DOA0, + + input DIB8, DIB7, DIB6, DIB5, DIB4, DIB3, DIB2, DIB1, DIB0, + input ADB12, ADB11, ADB10, ADB9, ADB8, ADB7, ADB6, ADB5, ADB4, ADB3, ADB2, ADB1, ADB0, + input CEB, OCEB, CLKB, WEB, RSTB, + input CSB2, CSB1, CSB0, + output DOB8, DOB7, DOB6, DOB5, DOB4, DOB3, DOB2, DOB1, DOB0 +); + parameter DATA_WIDTH_A = 9; + parameter DATA_WIDTH_B = 9; + + parameter REGMODE_A = "NOREG"; + parameter REGMODE_B = "NOREG"; + + parameter RESETMODE = "SYNC"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + + parameter CSDECODE_A = "0b000"; + parameter CSDECODE_B = "0b000"; + + parameter WRITEMODE_A = "NORMAL"; + parameter WRITEMODE_B = "NORMAL"; + + parameter GSR = "ENABLED"; + parameter INIT_DATA = "STATIC"; + + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; +endmodule + +// IO- "$__" cells for the iopadmap pass. These are temporary cells not meant +// to be instantiated by the end user. They are required in this file for +// attrmvcp to work. +(* blackbox *) +module \$__FACADE_OUTPAD (input I, output O); endmodule +(* blackbox *) +module \$__FACADE_INPAD (input I, output O); endmodule +(* blackbox *) +module \$__FACADE_TOUTPAD (input I, T, output O); endmodule +(* blackbox *) +module \$__FACADE_TINOUTPAD (input I, T, output O, inout B); endmodule diff --git a/resources/netlist/resources/kernel/share/machxo2/lutrams.txt b/resources/netlist/resources/kernel/share/machxo2/lutrams.txt new file mode 100644 index 0000000..c6b0b6c --- /dev/null +++ b/resources/netlist/resources/kernel/share/machxo2/lutrams.txt @@ -0,0 +1,12 @@ +ram distributed $__DPR16X4C_ { + abits 4; + width 4; + cost 4; + init no_undef; + prune_rom; + port sw "W" { + clock posedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/machxo2/lutrams_map.v b/resources/netlist/resources/kernel/share/machxo2/lutrams_map.v new file mode 100644 index 0000000..b55253f --- /dev/null +++ b/resources/netlist/resources/kernel/share/machxo2/lutrams_map.v @@ -0,0 +1,23 @@ +module $__DPR16X4C_ (...); + parameter INIT = 64'b0; + + input PORT_W_CLK; + input [3:0] PORT_W_ADDR; + input [3:0] PORT_W_WR_DATA; + input PORT_W_WR_EN; + + input [3:0] PORT_R_ADDR; + output [3:0] PORT_R_RD_DATA; + + DPR16X4C #( + .INITVAL($sformatf("0x%08x", INIT)) + ) _TECHMAP_REPLACE_ ( + .RAD(PORT_R_ADDR), + .DO(PORT_R_RD_DATA), + + .WAD(PORT_W_ADDR), + .DI(PORT_W_WR_DATA), + .WCK(PORT_W_CLK), + .WRE(PORT_W_WR_EN) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/mul2dsp.v b/resources/netlist/resources/kernel/share/mul2dsp.v new file mode 100644 index 0000000..ca2b3c5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/mul2dsp.v @@ -0,0 +1,318 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * 2019 Eddie Hung + * 2019 gatecat + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * Tech-mapping rules for decomposing arbitrarily-sized $mul cells + * into an equivalent collection of smaller `DSP_NAME cells (with the + * same interface as $mul) no larger than `DSP_[AB]_MAXWIDTH, attached + * to $shl and $add cells. + * + */ + +`ifndef DSP_A_MAXWIDTH +$fatal(1, "Macro DSP_A_MAXWIDTH must be defined"); +`endif +`ifndef DSP_B_MAXWIDTH +$fatal(1, "Macro DSP_B_MAXWIDTH must be defined"); +`endif +`ifndef DSP_B_MAXWIDTH +$fatal(1, "Macro DSP_B_MAXWIDTH must be defined"); +`endif +`ifndef DSP_A_MAXWIDTH_PARTIAL +`define DSP_A_MAXWIDTH_PARTIAL `DSP_A_MAXWIDTH +`endif +`ifndef DSP_B_MAXWIDTH_PARTIAL +`define DSP_B_MAXWIDTH_PARTIAL `DSP_B_MAXWIDTH +`endif + +`ifndef DSP_NAME +$fatal(1, "Macro DSP_NAME must be defined"); +`endif + +`define MAX(a,b) (a > b ? a : b) +`define MIN(a,b) (a < b ? a : b) + +(* techmap_celltype = "$mul $__mul" *) +module _80_mul (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + parameter _TECHMAP_CELLTYPE_ = ""; + + generate + if (0) begin end +`ifdef DSP_A_MINWIDTH + else if (A_WIDTH < `DSP_A_MINWIDTH) + wire _TECHMAP_FAIL_ = 1; +`endif +`ifdef DSP_B_MINWIDTH + else if (B_WIDTH < `DSP_B_MINWIDTH) + wire _TECHMAP_FAIL_ = 1; +`endif +`ifdef DSP_Y_MINWIDTH + else if (Y_WIDTH < `DSP_Y_MINWIDTH) + wire _TECHMAP_FAIL_ = 1; +`endif +`ifdef DSP_SIGNEDONLY + else if (_TECHMAP_CELLTYPE_ == "$mul" && !A_SIGNED && !B_SIGNED) + \$mul #( + .A_SIGNED(1), + .B_SIGNED(1), + .A_WIDTH(A_WIDTH + 1), + .B_WIDTH(B_WIDTH + 1), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A({1'b0, A}), + .B({1'b0, B}), + .Y(Y) + ); +`endif + else if (_TECHMAP_CELLTYPE_ == "$mul" && A_WIDTH < B_WIDTH) + \$mul #( + .A_SIGNED(B_SIGNED), + .B_SIGNED(A_SIGNED), + .A_WIDTH(B_WIDTH), + .B_WIDTH(A_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A(B), + .B(A), + .Y(Y) + ); + else begin + wire [1023:0] _TECHMAP_DO_ = "proc; clean"; + +`ifdef DSP_SIGNEDONLY + localparam sign_headroom = 1; +`else + localparam sign_headroom = 0; +`endif + + genvar i; + if (A_WIDTH > `DSP_A_MAXWIDTH) begin + localparam n = (A_WIDTH-`DSP_A_MAXWIDTH+`DSP_A_MAXWIDTH_PARTIAL-sign_headroom-1) / (`DSP_A_MAXWIDTH_PARTIAL-sign_headroom); + localparam partial_Y_WIDTH = `MIN(Y_WIDTH, B_WIDTH+`DSP_A_MAXWIDTH_PARTIAL); + localparam last_A_WIDTH = A_WIDTH-n*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom); + localparam last_Y_WIDTH = B_WIDTH+last_A_WIDTH; + if (A_SIGNED && B_SIGNED) begin : blk + (* force_downto *) + wire signed [partial_Y_WIDTH-1:0] partial [n-1:0]; + (* force_downto *) + wire signed [last_Y_WIDTH-1:0] last_partial; + (* force_downto *) + wire signed [Y_WIDTH-1:0] partial_sum [n:0]; + end + else begin : blk + (* force_downto *) + wire [partial_Y_WIDTH-1:0] partial [n-1:0]; + (* force_downto *) + wire [last_Y_WIDTH-1:0] last_partial; + (* force_downto *) + wire [Y_WIDTH-1:0] partial_sum [n:0]; + end + + for (i = 0; i < n; i=i+1) begin:sliceA + \$__mul #( + .A_SIGNED(sign_headroom), + .B_SIGNED(B_SIGNED), + .A_WIDTH(`DSP_A_MAXWIDTH_PARTIAL), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(partial_Y_WIDTH) + ) mul ( + .A({{sign_headroom{1'b0}}, A[i*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom) +: `DSP_A_MAXWIDTH_PARTIAL-sign_headroom]}), + .B(B), + .Y(blk.partial[i]) + ); + // TODO: Currently a 'cascade' approach to summing the partial + // products is taken here, but a more efficient 'binary + // reduction' approach also exists... + if (i == 0) + assign blk.partial_sum[i] = blk.partial[i]; + else + assign blk.partial_sum[i] = (blk.partial[i] << (* mul2dsp *) i*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) blk.partial_sum[i-1]; + end + + \$__mul #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(last_A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(last_Y_WIDTH) + ) sliceA.last ( + .A(A[A_WIDTH-1 -: last_A_WIDTH]), + .B(B), + .Y(blk.last_partial) + ); + assign blk.partial_sum[n] = (blk.last_partial << (* mul2dsp *) n*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) blk.partial_sum[n-1]; + assign Y = blk.partial_sum[n]; + end + else if (B_WIDTH > `DSP_B_MAXWIDTH) begin + localparam n = (B_WIDTH-`DSP_B_MAXWIDTH+`DSP_B_MAXWIDTH_PARTIAL-sign_headroom-1) / (`DSP_B_MAXWIDTH_PARTIAL-sign_headroom); + localparam partial_Y_WIDTH = `MIN(Y_WIDTH, A_WIDTH+`DSP_B_MAXWIDTH_PARTIAL); + localparam last_B_WIDTH = B_WIDTH-n*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom); + localparam last_Y_WIDTH = A_WIDTH+last_B_WIDTH; + if (A_SIGNED && B_SIGNED) begin : blk + (* force_downto *) + wire signed [partial_Y_WIDTH-1:0] partial [n-1:0]; + (* force_downto *) + wire signed [last_Y_WIDTH-1:0] last_partial; + (* force_downto *) + wire signed [Y_WIDTH-1:0] partial_sum [n:0]; + end + else begin : blk + (* force_downto *) + wire [partial_Y_WIDTH-1:0] partial [n-1:0]; + (* force_downto *) + wire [last_Y_WIDTH-1:0] last_partial; + (* force_downto *) + wire [Y_WIDTH-1:0] partial_sum [n:0]; + end + + for (i = 0; i < n; i=i+1) begin:sliceB + \$__mul #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(sign_headroom), + .A_WIDTH(A_WIDTH), + .B_WIDTH(`DSP_B_MAXWIDTH_PARTIAL), + .Y_WIDTH(partial_Y_WIDTH) + ) mul ( + .A(A), + .B({{sign_headroom{1'b0}}, B[i*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom) +: `DSP_B_MAXWIDTH_PARTIAL-sign_headroom]}), + .Y(blk.partial[i]) + ); + // TODO: Currently a 'cascade' approach to summing the partial + // products is taken here, but a more efficient 'binary + // reduction' approach also exists... + if (i == 0) + assign blk.partial_sum[i] = blk.partial[i]; + else + assign blk.partial_sum[i] = (blk.partial[i] << (* mul2dsp *) i*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) blk.partial_sum[i-1]; + end + + \$__mul #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(last_B_WIDTH), + .Y_WIDTH(last_Y_WIDTH) + ) mul_sliceB_last ( + .A(A), + .B(B[B_WIDTH-1 -: last_B_WIDTH]), + .Y(blk.last_partial) + ); + assign blk.partial_sum[n] = (blk.last_partial << (* mul2dsp *) n*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) blk.partial_sum[n-1]; + assign Y = blk.partial_sum[n]; + end + else begin + if (A_SIGNED) begin : blkA + wire signed [`DSP_A_MAXWIDTH-1:0] Aext = $signed(A); + end + else begin : blkA + wire [`DSP_A_MAXWIDTH-1:0] Aext = A; + end + if (B_SIGNED) begin : blkB + wire signed [`DSP_B_MAXWIDTH-1:0] Bext = $signed(B); + end + else begin : blkB + wire [`DSP_B_MAXWIDTH-1:0] Bext = B; + end + + `DSP_NAME #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(`DSP_A_MAXWIDTH), + .B_WIDTH(`DSP_B_MAXWIDTH), + .Y_WIDTH(`MIN(Y_WIDTH,`DSP_A_MAXWIDTH+`DSP_B_MAXWIDTH)), + ) _TECHMAP_REPLACE_ ( + .A(blkA.Aext), + .B(blkB.Bext), + .Y(Y) + ); + end + end + endgenerate +endmodule + +(* techmap_celltype = "$mul $__mul" *) +module _90_soft_mul (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + // Indirection necessary since mapping + // back to $mul will cause recursion + generate + if (A_SIGNED && !B_SIGNED) + \$__soft_mul #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(1), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH+1), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A(A), + .B({1'b0,B}), + .Y(Y) + ); + else if (!A_SIGNED && B_SIGNED) + \$__soft_mul #( + .A_SIGNED(1), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH+1), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A({1'b0,A}), + .B(B), + .Y(Y) + ); + else + \$__soft_mul #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A(A), + .B(B), + .Y(Y) + ); + endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/arith_map.v b/resources/netlist/resources/kernel/share/nexus/arith_map.v new file mode 100644 index 0000000..81ab7ba --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/arith_map.v @@ -0,0 +1,99 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * Copyright (C) 2018 gatecat + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module _80_nexus_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 4; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + function integer round_up2; + input integer N; + begin + round_up2 = ((N + 1) / 2) * 2; + end + endfunction + + localparam Y_WIDTH2 = round_up2(Y_WIDTH); + + (* force_downto *) + wire [Y_WIDTH2-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH2-1:0] BB = BI ? ~B_buf : B_buf; + (* force_downto *) + wire [Y_WIDTH2-1:0] BX = B_buf; + (* force_downto *) + wire [Y_WIDTH2+1:0] FCO, Y1; + + genvar i; + + // Carry feed-in + CCU2 #( + .INIT0("0xFFFF"), + .INIT1("0x00AA"), + .INJECT("NO") + ) ccu2c_i ( + .A0(1'b1), .B0(1'b1), .C0(1'b1), .D0(1'b1), + .A1(CI), .B1(1'b1), .C1(1'b1), .D1(1'b1), + .COUT(FCO[0]) + ); + + generate for (i = 0; i < Y_WIDTH2; i = i + 2) begin:slice + CCU2 #( + .INIT0("0x96AA"), + .INIT1("0x96AA"), + .INJECT("NO") + ) ccu2c_i ( + .CIN(FCO[i]), + .A0(AA[i]), .B0(BX[i]), .C0(BI), .D0(1'b1), + .A1(AA[i+1]), .B1(BX[i+1]), .C1(BI), .D1(1'b1), + .S0(Y[i]), .S1(Y1[i]), + .COUT(FCO[i+2]) + ); + + assign CO[i] = (AA[i] && BB[i]) || ((Y[i] ^ AA[i] ^ BB[i]) && (AA[i] || BB[i])); + if (i+1 < Y_WIDTH) begin + assign CO[i + 1] = (AA[i + 1] && BB[i + 1]) || ((Y[i + 1] ^ AA[i + 1] ^ BB[i + 1]) && (AA[i + 1] || BB[i + 1])); + assign Y[i+1] = Y1[i]; + end + end endgenerate + + assign X = AA ^ BB; +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/brams.txt b/resources/netlist/resources/kernel/share/nexus/brams.txt new file mode 100644 index 0000000..975a8d2 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/brams.txt @@ -0,0 +1,47 @@ +ram block $__NX_DP16K_ { + abits 14; + widths 1 2 4 9 18 per_port; + byte 9; + cost 129; + init no_undef; + port srsw "A" "B" { + clock posedge; + clken; + wrbe_separate; + rdwr no_change; + portoption "RESETMODE" "SYNC" { + rdsrst zero gated_clken; + } + portoption "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } +} + +ram block $__NX_PDP16K_ { + abits 14; + widths 1 2 4 9 18 36 per_port; + byte 9; + option "SAME_CLOCK" 1 cost 128; + option "SAME_CLOCK" 0 cost 129; + init no_undef; + port sr "R" { + option "SAME_CLOCK" 1 clock posedge "C"; + option "SAME_CLOCK" 0 clock posedge; + clken; + portoption "RESETMODE" "SYNC" { + rdsrst zero gated_clken; + } + portoption "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + } + port sw "W" { + option "SAME_CLOCK" 1 clock posedge "C"; + option "SAME_CLOCK" 0 clock posedge; + clken; + option "SAME_CLOCK" 1 wrtrans all old; + } +} diff --git a/resources/netlist/resources/kernel/share/nexus/brams_map.v b/resources/netlist/resources/kernel/share/nexus/brams_map.v new file mode 100644 index 0000000..17306cd --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/brams_map.v @@ -0,0 +1,420 @@ +module $__NX_DP16K_ (...); + +parameter INIT = 0; + +parameter PORT_A_OPTION_RESETMODE = "SYNC"; +parameter PORT_A_WIDTH = 18; +parameter PORT_A_WR_BE_WIDTH = 2; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [13:0] PORT_A_ADDR; +input [PORT_A_WR_BE_WIDTH-1:0] PORT_A_WR_BE; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; + +parameter PORT_B_OPTION_RESETMODE = "SYNC"; +parameter PORT_B_WIDTH = 18; +parameter PORT_B_WR_BE_WIDTH = 2; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; +input [13:0] PORT_B_ADDR; +input [PORT_B_WR_BE_WIDTH-1:0] PORT_B_WR_BE; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; + +function [319:0] init_slice; + input integer idx; + integer i; + init_slice = 0; + for (i = 0; i < 32; i = i + 1) begin + init_slice[i*10+:9] = INIT[(idx * 32 + i) * 9+:9]; + end +endfunction + +wire [17:0] DOA; +wire [17:0] DOB; +wire [17:0] DIA = PORT_A_WR_DATA; +wire [17:0] DIB = PORT_B_WR_DATA; +wire [13:0] ADA; +wire [13:0] ADB; + +generate + +case(PORT_A_WIDTH) +1: assign ADA = PORT_A_ADDR; +2: assign ADA = {PORT_A_ADDR[13:1], 1'b1}; +4: assign ADA = {PORT_A_ADDR[13:2], 2'b11}; +9: assign ADA = {PORT_A_ADDR[13:3], 3'b111}; +18: assign ADA = {PORT_A_ADDR[13:4], 2'b11, PORT_A_WR_BE}; +endcase + +case(PORT_B_WIDTH) +1: assign ADB = PORT_B_ADDR; +2: assign ADB = {PORT_B_ADDR[13:1], 1'b1}; +4: assign ADB = {PORT_B_ADDR[13:2], 2'b11}; +9: assign ADB = {PORT_B_ADDR[13:3], 3'b111}; +18: assign ADB = {PORT_B_ADDR[13:4], 2'b11, PORT_B_WR_BE}; +endcase + +endgenerate + +assign PORT_A_RD_DATA = DOA; +assign PORT_B_RD_DATA = DOB; + +DP16K #( + .INITVAL_00($sformatf("0x%080x", init_slice('h00))), + .INITVAL_01($sformatf("0x%080x", init_slice('h01))), + .INITVAL_02($sformatf("0x%080x", init_slice('h02))), + .INITVAL_03($sformatf("0x%080x", init_slice('h03))), + .INITVAL_04($sformatf("0x%080x", init_slice('h04))), + .INITVAL_05($sformatf("0x%080x", init_slice('h05))), + .INITVAL_06($sformatf("0x%080x", init_slice('h06))), + .INITVAL_07($sformatf("0x%080x", init_slice('h07))), + .INITVAL_08($sformatf("0x%080x", init_slice('h08))), + .INITVAL_09($sformatf("0x%080x", init_slice('h09))), + .INITVAL_0A($sformatf("0x%080x", init_slice('h0a))), + .INITVAL_0B($sformatf("0x%080x", init_slice('h0b))), + .INITVAL_0C($sformatf("0x%080x", init_slice('h0c))), + .INITVAL_0D($sformatf("0x%080x", init_slice('h0d))), + .INITVAL_0E($sformatf("0x%080x", init_slice('h0e))), + .INITVAL_0F($sformatf("0x%080x", init_slice('h0f))), + .INITVAL_10($sformatf("0x%080x", init_slice('h10))), + .INITVAL_11($sformatf("0x%080x", init_slice('h11))), + .INITVAL_12($sformatf("0x%080x", init_slice('h12))), + .INITVAL_13($sformatf("0x%080x", init_slice('h13))), + .INITVAL_14($sformatf("0x%080x", init_slice('h14))), + .INITVAL_15($sformatf("0x%080x", init_slice('h15))), + .INITVAL_16($sformatf("0x%080x", init_slice('h16))), + .INITVAL_17($sformatf("0x%080x", init_slice('h17))), + .INITVAL_18($sformatf("0x%080x", init_slice('h18))), + .INITVAL_19($sformatf("0x%080x", init_slice('h19))), + .INITVAL_1A($sformatf("0x%080x", init_slice('h1a))), + .INITVAL_1B($sformatf("0x%080x", init_slice('h1b))), + .INITVAL_1C($sformatf("0x%080x", init_slice('h1c))), + .INITVAL_1D($sformatf("0x%080x", init_slice('h1d))), + .INITVAL_1E($sformatf("0x%080x", init_slice('h1e))), + .INITVAL_1F($sformatf("0x%080x", init_slice('h1f))), + .INITVAL_20($sformatf("0x%080x", init_slice('h20))), + .INITVAL_21($sformatf("0x%080x", init_slice('h21))), + .INITVAL_22($sformatf("0x%080x", init_slice('h22))), + .INITVAL_23($sformatf("0x%080x", init_slice('h23))), + .INITVAL_24($sformatf("0x%080x", init_slice('h24))), + .INITVAL_25($sformatf("0x%080x", init_slice('h25))), + .INITVAL_26($sformatf("0x%080x", init_slice('h26))), + .INITVAL_27($sformatf("0x%080x", init_slice('h27))), + .INITVAL_28($sformatf("0x%080x", init_slice('h28))), + .INITVAL_29($sformatf("0x%080x", init_slice('h29))), + .INITVAL_2A($sformatf("0x%080x", init_slice('h2a))), + .INITVAL_2B($sformatf("0x%080x", init_slice('h2b))), + .INITVAL_2C($sformatf("0x%080x", init_slice('h2c))), + .INITVAL_2D($sformatf("0x%080x", init_slice('h2d))), + .INITVAL_2E($sformatf("0x%080x", init_slice('h2e))), + .INITVAL_2F($sformatf("0x%080x", init_slice('h2f))), + .INITVAL_30($sformatf("0x%080x", init_slice('h30))), + .INITVAL_31($sformatf("0x%080x", init_slice('h31))), + .INITVAL_32($sformatf("0x%080x", init_slice('h32))), + .INITVAL_33($sformatf("0x%080x", init_slice('h33))), + .INITVAL_34($sformatf("0x%080x", init_slice('h34))), + .INITVAL_35($sformatf("0x%080x", init_slice('h35))), + .INITVAL_36($sformatf("0x%080x", init_slice('h36))), + .INITVAL_37($sformatf("0x%080x", init_slice('h37))), + .INITVAL_38($sformatf("0x%080x", init_slice('h38))), + .INITVAL_39($sformatf("0x%080x", init_slice('h39))), + .INITVAL_3A($sformatf("0x%080x", init_slice('h3a))), + .INITVAL_3B($sformatf("0x%080x", init_slice('h3b))), + .INITVAL_3C($sformatf("0x%080x", init_slice('h3c))), + .INITVAL_3D($sformatf("0x%080x", init_slice('h3d))), + .INITVAL_3E($sformatf("0x%080x", init_slice('h3e))), + .INITVAL_3F($sformatf("0x%080x", init_slice('h3f))), + .DATA_WIDTH_A($sformatf("X%d", PORT_A_WIDTH)), + .DATA_WIDTH_B($sformatf("X%d", PORT_B_WIDTH)), + .OUTREG_A("BYPASSED"), + .OUTREG_B("BYPASSED"), + .RESETMODE_A(PORT_A_OPTION_RESETMODE), + .RESETMODE_B(PORT_B_OPTION_RESETMODE), + .ASYNC_RST_RELEASE_A(PORT_A_OPTION_RESETMODE), + .ASYNC_RST_RELEASE_B(PORT_B_OPTION_RESETMODE), + .CSDECODE_A("111"), + .CSDECODE_B("111"), + .GSR("DISABLED"), +) _TECHMAP_REPLACE_ ( + .CLKA(PORT_A_CLK), + .WEA(PORT_A_WIDTH == 18 ? PORT_A_WR_EN : (PORT_A_WR_EN | PORT_A_WR_BE[0])), + .CEA(PORT_A_CLK_EN), + .RSTA(PORT_A_OPTION_RESETMODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST), + .CSA(3'b111), + .DIA(DIA), + .DOA(DOA), + .ADA(ADA), + + .CLKB(PORT_B_CLK), + .WEB(PORT_B_WIDTH == 18 ? PORT_B_WR_EN : (PORT_B_WR_EN | PORT_B_WR_BE[0])), + .CEB(PORT_B_CLK_EN), + .RSTB(PORT_B_OPTION_RESETMODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST), + .CSB(3'b111), + .ADB(ADB), + .DIB(DIB), + .DOB(DOB), +); + +endmodule + + +module $__NX_PDP16K_ (...); + +parameter INIT = 0; +parameter OPTION_SAME_CLOCK = 1; + +parameter PORT_R_WIDTH = 36; +parameter PORT_R_OPTION_RESETMODE = "SYNC"; + +input CLK_C; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input PORT_R_RD_SRST; +input PORT_R_RD_ARST; +input [13:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; + +parameter PORT_W_WIDTH = 36; +parameter PORT_W_WR_EN_WIDTH = 4; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [13:0] PORT_W_ADDR; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; + +function [319:0] init_slice; + input integer idx; + integer i; + init_slice = 0; + for (i = 0; i < 32; i = i + 1) begin + init_slice[i*10+:9] = INIT[(idx * 32 + i) * 9+:9]; + end +endfunction + +wire [35:0] DI = PORT_W_WR_DATA; +wire [35:0] DO; + +assign PORT_R_RD_DATA = DO; + +wire [13:0] ADW; +wire [13:0] ADR; + +generate + +case (PORT_W_WIDTH) +1: assign ADW = PORT_W_ADDR; +2: assign ADW = {PORT_W_ADDR[13:1], 1'b1}; +4: assign ADW = {PORT_W_ADDR[13:2], 2'b11}; +9: assign ADW = {PORT_W_ADDR[13:3], 3'b111}; +18: assign ADW = {PORT_W_ADDR[13:4], 2'b11, PORT_W_WR_EN}; +36: assign ADW = {PORT_W_ADDR[13:5], 1'b1, PORT_W_WR_EN}; +endcase + +case (PORT_R_WIDTH) +1: assign ADR = PORT_R_ADDR; +2: assign ADR = {PORT_R_ADDR[13:1], 1'b1}; +4: assign ADR = {PORT_R_ADDR[13:2], 2'b11}; +9: assign ADR = {PORT_R_ADDR[13:3], 3'b111}; +18: assign ADR = {PORT_R_ADDR[13:4], 4'b1111}; +36: assign ADR = {PORT_R_ADDR[13:5], 5'b11111}; +endcase + +if (OPTION_SAME_CLOCK) begin + +PDPSC16K #( + .INITVAL_00($sformatf("0x%080x", init_slice('h00))), + .INITVAL_01($sformatf("0x%080x", init_slice('h01))), + .INITVAL_02($sformatf("0x%080x", init_slice('h02))), + .INITVAL_03($sformatf("0x%080x", init_slice('h03))), + .INITVAL_04($sformatf("0x%080x", init_slice('h04))), + .INITVAL_05($sformatf("0x%080x", init_slice('h05))), + .INITVAL_06($sformatf("0x%080x", init_slice('h06))), + .INITVAL_07($sformatf("0x%080x", init_slice('h07))), + .INITVAL_08($sformatf("0x%080x", init_slice('h08))), + .INITVAL_09($sformatf("0x%080x", init_slice('h09))), + .INITVAL_0A($sformatf("0x%080x", init_slice('h0a))), + .INITVAL_0B($sformatf("0x%080x", init_slice('h0b))), + .INITVAL_0C($sformatf("0x%080x", init_slice('h0c))), + .INITVAL_0D($sformatf("0x%080x", init_slice('h0d))), + .INITVAL_0E($sformatf("0x%080x", init_slice('h0e))), + .INITVAL_0F($sformatf("0x%080x", init_slice('h0f))), + .INITVAL_10($sformatf("0x%080x", init_slice('h10))), + .INITVAL_11($sformatf("0x%080x", init_slice('h11))), + .INITVAL_12($sformatf("0x%080x", init_slice('h12))), + .INITVAL_13($sformatf("0x%080x", init_slice('h13))), + .INITVAL_14($sformatf("0x%080x", init_slice('h14))), + .INITVAL_15($sformatf("0x%080x", init_slice('h15))), + .INITVAL_16($sformatf("0x%080x", init_slice('h16))), + .INITVAL_17($sformatf("0x%080x", init_slice('h17))), + .INITVAL_18($sformatf("0x%080x", init_slice('h18))), + .INITVAL_19($sformatf("0x%080x", init_slice('h19))), + .INITVAL_1A($sformatf("0x%080x", init_slice('h1a))), + .INITVAL_1B($sformatf("0x%080x", init_slice('h1b))), + .INITVAL_1C($sformatf("0x%080x", init_slice('h1c))), + .INITVAL_1D($sformatf("0x%080x", init_slice('h1d))), + .INITVAL_1E($sformatf("0x%080x", init_slice('h1e))), + .INITVAL_1F($sformatf("0x%080x", init_slice('h1f))), + .INITVAL_20($sformatf("0x%080x", init_slice('h20))), + .INITVAL_21($sformatf("0x%080x", init_slice('h21))), + .INITVAL_22($sformatf("0x%080x", init_slice('h22))), + .INITVAL_23($sformatf("0x%080x", init_slice('h23))), + .INITVAL_24($sformatf("0x%080x", init_slice('h24))), + .INITVAL_25($sformatf("0x%080x", init_slice('h25))), + .INITVAL_26($sformatf("0x%080x", init_slice('h26))), + .INITVAL_27($sformatf("0x%080x", init_slice('h27))), + .INITVAL_28($sformatf("0x%080x", init_slice('h28))), + .INITVAL_29($sformatf("0x%080x", init_slice('h29))), + .INITVAL_2A($sformatf("0x%080x", init_slice('h2a))), + .INITVAL_2B($sformatf("0x%080x", init_slice('h2b))), + .INITVAL_2C($sformatf("0x%080x", init_slice('h2c))), + .INITVAL_2D($sformatf("0x%080x", init_slice('h2d))), + .INITVAL_2E($sformatf("0x%080x", init_slice('h2e))), + .INITVAL_2F($sformatf("0x%080x", init_slice('h2f))), + .INITVAL_30($sformatf("0x%080x", init_slice('h30))), + .INITVAL_31($sformatf("0x%080x", init_slice('h31))), + .INITVAL_32($sformatf("0x%080x", init_slice('h32))), + .INITVAL_33($sformatf("0x%080x", init_slice('h33))), + .INITVAL_34($sformatf("0x%080x", init_slice('h34))), + .INITVAL_35($sformatf("0x%080x", init_slice('h35))), + .INITVAL_36($sformatf("0x%080x", init_slice('h36))), + .INITVAL_37($sformatf("0x%080x", init_slice('h37))), + .INITVAL_38($sformatf("0x%080x", init_slice('h38))), + .INITVAL_39($sformatf("0x%080x", init_slice('h39))), + .INITVAL_3A($sformatf("0x%080x", init_slice('h3a))), + .INITVAL_3B($sformatf("0x%080x", init_slice('h3b))), + .INITVAL_3C($sformatf("0x%080x", init_slice('h3c))), + .INITVAL_3D($sformatf("0x%080x", init_slice('h3d))), + .INITVAL_3E($sformatf("0x%080x", init_slice('h3e))), + .INITVAL_3F($sformatf("0x%080x", init_slice('h3f))), + .DATA_WIDTH_W($sformatf("X%d", PORT_W_WIDTH)), + .DATA_WIDTH_R($sformatf("X%d", PORT_R_WIDTH)), + .OUTREG("BYPASSED"), + .RESETMODE(PORT_R_OPTION_RESETMODE), + .ASYNC_RST_RELEASE(PORT_R_OPTION_RESETMODE), + .CSDECODE_W("111"), + .CSDECODE_R("111"), + .ECC("DISABLED"), + .GSR("DISABLED"), +) _TECHMAP_REPLACE_ ( + .CLK(CLK_C), + + .CEW(PORT_W_CLK_EN), + .CSW(3'b111), + .ADW(ADW), + .DI(DI), + + .CER(PORT_R_CLK_EN), + .RST(PORT_R_OPTION_RESETMODE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST), + .CSR(3'b111), + .ADR(ADR), + .DO(DO), +); + +end else begin + +PDP16K #( + .INITVAL_00($sformatf("0x%080x", init_slice('h00))), + .INITVAL_01($sformatf("0x%080x", init_slice('h01))), + .INITVAL_02($sformatf("0x%080x", init_slice('h02))), + .INITVAL_03($sformatf("0x%080x", init_slice('h03))), + .INITVAL_04($sformatf("0x%080x", init_slice('h04))), + .INITVAL_05($sformatf("0x%080x", init_slice('h05))), + .INITVAL_06($sformatf("0x%080x", init_slice('h06))), + .INITVAL_07($sformatf("0x%080x", init_slice('h07))), + .INITVAL_08($sformatf("0x%080x", init_slice('h08))), + .INITVAL_09($sformatf("0x%080x", init_slice('h09))), + .INITVAL_0A($sformatf("0x%080x", init_slice('h0a))), + .INITVAL_0B($sformatf("0x%080x", init_slice('h0b))), + .INITVAL_0C($sformatf("0x%080x", init_slice('h0c))), + .INITVAL_0D($sformatf("0x%080x", init_slice('h0d))), + .INITVAL_0E($sformatf("0x%080x", init_slice('h0e))), + .INITVAL_0F($sformatf("0x%080x", init_slice('h0f))), + .INITVAL_10($sformatf("0x%080x", init_slice('h10))), + .INITVAL_11($sformatf("0x%080x", init_slice('h11))), + .INITVAL_12($sformatf("0x%080x", init_slice('h12))), + .INITVAL_13($sformatf("0x%080x", init_slice('h13))), + .INITVAL_14($sformatf("0x%080x", init_slice('h14))), + .INITVAL_15($sformatf("0x%080x", init_slice('h15))), + .INITVAL_16($sformatf("0x%080x", init_slice('h16))), + .INITVAL_17($sformatf("0x%080x", init_slice('h17))), + .INITVAL_18($sformatf("0x%080x", init_slice('h18))), + .INITVAL_19($sformatf("0x%080x", init_slice('h19))), + .INITVAL_1A($sformatf("0x%080x", init_slice('h1a))), + .INITVAL_1B($sformatf("0x%080x", init_slice('h1b))), + .INITVAL_1C($sformatf("0x%080x", init_slice('h1c))), + .INITVAL_1D($sformatf("0x%080x", init_slice('h1d))), + .INITVAL_1E($sformatf("0x%080x", init_slice('h1e))), + .INITVAL_1F($sformatf("0x%080x", init_slice('h1f))), + .INITVAL_20($sformatf("0x%080x", init_slice('h20))), + .INITVAL_21($sformatf("0x%080x", init_slice('h21))), + .INITVAL_22($sformatf("0x%080x", init_slice('h22))), + .INITVAL_23($sformatf("0x%080x", init_slice('h23))), + .INITVAL_24($sformatf("0x%080x", init_slice('h24))), + .INITVAL_25($sformatf("0x%080x", init_slice('h25))), + .INITVAL_26($sformatf("0x%080x", init_slice('h26))), + .INITVAL_27($sformatf("0x%080x", init_slice('h27))), + .INITVAL_28($sformatf("0x%080x", init_slice('h28))), + .INITVAL_29($sformatf("0x%080x", init_slice('h29))), + .INITVAL_2A($sformatf("0x%080x", init_slice('h2a))), + .INITVAL_2B($sformatf("0x%080x", init_slice('h2b))), + .INITVAL_2C($sformatf("0x%080x", init_slice('h2c))), + .INITVAL_2D($sformatf("0x%080x", init_slice('h2d))), + .INITVAL_2E($sformatf("0x%080x", init_slice('h2e))), + .INITVAL_2F($sformatf("0x%080x", init_slice('h2f))), + .INITVAL_30($sformatf("0x%080x", init_slice('h30))), + .INITVAL_31($sformatf("0x%080x", init_slice('h31))), + .INITVAL_32($sformatf("0x%080x", init_slice('h32))), + .INITVAL_33($sformatf("0x%080x", init_slice('h33))), + .INITVAL_34($sformatf("0x%080x", init_slice('h34))), + .INITVAL_35($sformatf("0x%080x", init_slice('h35))), + .INITVAL_36($sformatf("0x%080x", init_slice('h36))), + .INITVAL_37($sformatf("0x%080x", init_slice('h37))), + .INITVAL_38($sformatf("0x%080x", init_slice('h38))), + .INITVAL_39($sformatf("0x%080x", init_slice('h39))), + .INITVAL_3A($sformatf("0x%080x", init_slice('h3a))), + .INITVAL_3B($sformatf("0x%080x", init_slice('h3b))), + .INITVAL_3C($sformatf("0x%080x", init_slice('h3c))), + .INITVAL_3D($sformatf("0x%080x", init_slice('h3d))), + .INITVAL_3E($sformatf("0x%080x", init_slice('h3e))), + .INITVAL_3F($sformatf("0x%080x", init_slice('h3f))), + .DATA_WIDTH_W($sformatf("X%d", PORT_W_WIDTH)), + .DATA_WIDTH_R($sformatf("X%d", PORT_R_WIDTH)), + .OUTREG("BYPASSED"), + .RESETMODE(PORT_R_OPTION_RESETMODE), + .ASYNC_RST_RELEASE(PORT_R_OPTION_RESETMODE), + .CSDECODE_W("111"), + .CSDECODE_R("111"), + .ECC("DISABLED"), + .GSR("DISABLED"), +) _TECHMAP_REPLACE_ ( + .CLKW(PORT_W_CLK), + .CEW(PORT_W_CLK_EN), + .CSW(3'b111), + .ADW(ADW), + .DI(DI), + + .CLKR(PORT_R_CLK), + .CER(PORT_R_CLK_EN), + .RST(PORT_R_OPTION_RESETMODE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST), + .CSR(3'b111), + .ADR(ADR), + .DO(DO), +); + +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/cells_map.v b/resources/netlist/resources/kernel/share/nexus/cells_map.v new file mode 100644 index 0000000..b70edbc --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/cells_map.v @@ -0,0 +1,98 @@ +// Flipflop intermediate map level +module \$__FF_NOLSR (input D, C, E, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + generate + if (_TECHMAP_WIREINIT_Q_ === 1'b1) + FD1P3JX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .PD(1'b0), .Q(Q)); + else + FD1P3IX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .CD(1'b0), .Q(Q)); + endgenerate +endmodule + +module \$__FF_SYNCLSR (input D, C, E, R, output Q); + parameter SR_VAL = 1'b0; + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + wire _TECHMAP_REMOVEINIT_Q_ = 1'b1; + wire Ci, Ei, Ri, Rg, Dd; + generate + if (SR_VAL) + FD1P3JX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .PD(R), .Q(Q)); + else + FD1P3IX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .CD(R), .Q(Q)); + endgenerate +endmodule + +module \$__FF_ASYNCLSR (input D, C, E, R, output Q); + parameter SR_VAL = 1'b0; + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + wire _TECHMAP_REMOVEINIT_Q_ = (_TECHMAP_WIREINIT_Q_ === 1'bx || _TECHMAP_WIREINIT_Q_ === SR_VAL); + wire Ci, Ei, Ri, Rg, Dd; + generate + if (SR_VAL) + FD1P3BX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .PD(R), .Q(Q)); + else + FD1P3DX #(.GSR("DISABLED")) _TECHMAP_REPLACE_ (.D(D), .CK(C), .SP(E), .CD(R), .Q(Q)); + endgenerate +endmodule + + +module \$_DFF_P_ (input D, C, output Q); \$__FF_NOLSR _TECHMAP_REPLACE_ (.D(D), .C(C), .E(1'b1), .Q(Q)); endmodule + +module \$_DFFE_PP_ (input D, C, E, output Q); \$__FF_NOLSR _TECHMAP_REPLACE_ (.D(D), .C(C), .E(E), .Q(Q)); endmodule + +module \$_DFF_PP0_ (input D, C, R, output Q); \$__FF_ASYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule +module \$_DFF_PP1_ (input D, C, R, output Q); \$__FF_ASYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule + +module \$_SDFF_PP0_ (input D, C, R, output Q); \$__FF_SYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule +module \$_SDFF_PP1_ (input D, C, R, output Q); \$__FF_SYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(1'b1), .Q(Q)); endmodule + +module \$_DFFE_PP0P_ (input D, C, E, R, output Q); \$__FF_ASYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule +module \$_DFFE_PP1P_ (input D, C, E, R, output Q); \$__FF_ASYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule + +module \$_SDFFE_PP0P_ (input D, C, E, R, output Q); \$__FF_SYNCLSR #(0) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule +module \$_SDFFE_PP1P_ (input D, C, E, R, output Q); \$__FF_SYNCLSR #(1) _TECHMAP_REPLACE_ (.D(D), .C(C), .R(R), .E(E), .Q(Q)); endmodule + +`ifndef NO_LUT +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + if (LUT == 2'b01) + INV _TECHMAP_REPLACE_ (.A(A[0]), .Z(Y)); + else + LUT4 #(.INIT($sformatf("0x%04x", {{8{LUT[1]}}, {8{LUT[0]}}}))) _TECHMAP_REPLACE_ (.Z(Y), + .D(A[0])); + end else + if (WIDTH == 2) begin + localparam [15:0] INIT = {{4{LUT[3]}}, {4{LUT[2]}}, {4{LUT[1]}}, {4{LUT[0]}}}; + LUT4 #(.INIT($sformatf("0x%04x", INIT))) _TECHMAP_REPLACE_ (.Z(Y), + .C(A[0]), .D(A[1])); + end else + if (WIDTH == 3) begin + localparam [15:0] INIT = {{2{LUT[7]}}, {2{LUT[6]}}, {2{LUT[5]}}, {2{LUT[4]}}, {2{LUT[3]}}, {2{LUT[2]}}, {2{LUT[1]}}, {2{LUT[0]}}}; + LUT4 #(.INIT($sformatf("0x%04x", INIT))) _TECHMAP_REPLACE_ (.Z(Y), + .B(A[0]), .C(A[1]), .D(A[2])); + end else + if (WIDTH == 4) begin + LUT4 #(.INIT($sformatf("0x%04x", LUT))) _TECHMAP_REPLACE_ (.Z(Y), + .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + end else + if (WIDTH == 5) begin + WIDEFN9 #( + .INIT0($sformatf("0x%04x", LUT[15:0 ])), + .INIT1($sformatf("0x%04x", LUT[31:16])), + ) _TECHMAP_REPLACE_ ( + .A0(A[0]), .B0(A[1]), .C0(A[2]), .D0(A[3]), + .A1(A[0]), .B1(A[1]), .C1(A[2]), .D1(A[3]), + .SEL(A[4]), .Z(Y) + ); + end + endgenerate +endmodule +`endif diff --git a/resources/netlist/resources/kernel/share/nexus/cells_sim.v b/resources/netlist/resources/kernel/share/nexus/cells_sim.v new file mode 100644 index 0000000..d1c8bf0 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/cells_sim.v @@ -0,0 +1,1058 @@ +(* abc9_lut=1, lib_whitebox *) +module LUT4(input A, B, C, D, output Z); + parameter INIT = "0x0000"; +`include "parse_init.vh" + localparam initp = parse_init(INIT); + wire [7:0] s3 = D ? initp[15:8] : initp[7:0]; + wire [3:0] s2 = C ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = B ? s2[ 3:2] : s2[1:0]; + assign Z = A ? s1[1] : s1[0]; + + // Per-input delay differences are considered 'interconnect' + // so not known yet + specify + (A => Z) = 233; + (B => Z) = 233; + (C => Z) = 233; + (D => Z) = 233; + endspecify + +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// cost of 5-input LUTs and is not intended to be instantiated +(* abc9_lut=2 *) +module \$__ABC9_LUT5 (input SEL, D, C, B, A, output Z); + specify + (SEL => Z) = 171; + (D => Z) = 303; + (C => Z) = 311; + (B => Z) = 309; + (A => Z) = 306; + endspecify +endmodule + +// Two LUT4s and MUX2 +module WIDEFN9(input A0, B0, C0, D0, A1, B1, C1, D1, SEL, output Z); + parameter INIT0 = "0x0000"; + parameter INIT1 = "0x0000"; + wire z0, z1; + LUT4 #(.INIT(INIT0)) lut4_0 (.A(A0), .B(B0), .C(C0), .D(D0), .Z(z0)); + LUT4 #(.INIT(INIT1)) lut4_1 (.A(A1), .B(B1), .C(C1), .D(D1), .Z(z1)); + assign Z = SEL ? z1 : z0; +endmodule + +(* abc9_box, lib_whitebox *) +module INV(input A, output Z); + assign Z = !A; + + specify + (A => Z) = 10; + endspecify +endmodule + +// Bidirectional IO buffer +module BB(input T, I, output O, + (* iopad_external_pin *) inout B); + assign B = T ? 1'bz : I; + assign O = B; +endmodule + +// Input buffer +module IB( + (* iopad_external_pin *) input I, + output O); + assign O = I; +endmodule + +// Output buffer +module OB(input I, + (* iopad_external_pin *) output O); + assign O = I; +endmodule + +// Output buffer with tristate +module OBZ(input I, T, + (* iopad_external_pin *) output O); + assign O = T ? 1'bz : I; +endmodule + +// Constants +module VLO(output Z); + assign Z = 1'b0; +endmodule + +module VHI(output Z); + assign Z = 1'b1; +endmodule + +// Vendor flipflops +// (all have active high clock, enable and set/reset - use INV to invert) + +// Async preset +(* abc9_box, lib_whitebox *) +module FD1P3BX(input D, CK, SP, PD, output reg Q); + parameter GSR = "DISABLED"; + initial Q = 1'b1; + always @(posedge CK or posedge PD) + if (PD) + Q <= 1'b1; + else if (SP) + Q <= D; + specify + $setup(D, posedge CK, 0); + $setup(SP, posedge CK, 212); + $setup(PD, posedge CK, 224); +`ifndef YOSYS + if (PD) (posedge CLK => (Q : 1)) = 0; +`else + if (PD) (PD => Q) = 0; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!PD && SP) (posedge CK => (Q : D)) = 336; + endspecify +endmodule + +// Async clear +(* abc9_box, lib_whitebox *) +module FD1P3DX(input D, CK, SP, CD, output reg Q); + parameter GSR = "DISABLED"; + initial Q = 1'b0; + always @(posedge CK or posedge CD) + if (CD) + Q <= 1'b0; + else if (SP) + Q <= D; + specify + $setup(D, posedge CK, 0); + $setup(SP, posedge CK, 212); + $setup(CD, posedge CK, 224); +`ifndef YOSYS + if (CD) (posedge CLK => (Q : 0)) = 0; +`else + if (CD) (CD => Q) = 0; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!CD && SP) (posedge CK => (Q : D)) = 336; + endspecify +endmodule + +// Sync clear +(* abc9_flop, lib_whitebox *) +module FD1P3IX(input D, CK, SP, CD, output reg Q); + parameter GSR = "DISABLED"; + initial Q = 1'b0; + always @(posedge CK) + if (CD) + Q <= 1'b0; + else if (SP) + Q <= D; + specify + $setup(D, posedge CK, 0); + $setup(SP, posedge CK, 212); + $setup(CD, posedge CK, 224); + if (!CD && SP) (posedge CK => (Q : D)) = 336; + endspecify +endmodule + +// Sync preset +(* abc9_flop, lib_whitebox *) +module FD1P3JX(input D, CK, SP, PD, output reg Q); + parameter GSR = "DISABLED"; + initial Q = 1'b1; + always @(posedge CK) + if (PD) + Q <= 1'b1; + else if (SP) + Q <= D; + specify + $setup(D, posedge CK, 0); + $setup(SP, posedge CK, 212); + $setup(PD, posedge CK, 224); + if (!PD && SP) (posedge CK => (Q : D)) = 336; + endspecify +endmodule + +// LUT4 with LUT3 tap for CCU2 use only +(* lib_whitebox *) +module LUT4_3(input A, B, C, D, output Z, Z3); + parameter INIT = "0x0000"; +`include "parse_init.vh" + localparam initp = parse_init(INIT); + wire [7:0] s3 = D ? initp[15:8] : initp[7:0]; + wire [3:0] s2 = C ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = B ? s2[ 3:2] : s2[1:0]; + assign Z = A ? s1[1] : s1[0]; + + wire [3:0] s2_3 = C ? initp[ 7:4] : initp[3:0]; + wire [1:0] s1_3 = B ? s2_3[ 3:2] : s2_3[1:0]; + assign Z3 = A ? s1_3[1] : s1_3[0]; + +endmodule + +// Carry primitive (incoporating two LUTs) +(* abc9_box, lib_whitebox *) +module CCU2( + (* abc9_carry *) input CIN, + input A1, B1, C1, D1, A0, B0, C0, D0, + output S1, S0, + (* abc9_carry *) output COUT); + parameter INJECT = "YES"; + parameter INIT0 = "0x0000"; + parameter INIT1 = "0x1111"; + + localparam inject_p = (INJECT == "YES") ? 1'b1 : 1'b0; + + wire LUT3_0, LUT4_0, LUT3_1, LUT4_1, carry_0; + LUT4_3 #(.INIT(INIT0)) lut0 (.A(A0), .B(B0), .C(C0), .D(D0), .Z(LUT4_0), .Z3(LUT3_0)); + LUT4_3 #(.INIT(INIT1)) lut1 (.A(A1), .B(B1), .C(C1), .D(D1), .Z(LUT4_1), .Z3(LUT3_1)); + + assign S0 = LUT4_0 ^ (CIN & ~inject_p); + assign carry_0 = LUT4_0 ? CIN : (LUT3_0 & ~inject_p); + assign S1 = LUT4_1 ^ (carry_0 & ~inject_p); + assign COUT = LUT4_1 ? carry_0 : (LUT3_1 & ~inject_p); + + specify + (A0 => S0) = 233; + (B0 => S0) = 233; + (C0 => S0) = 233; + (D0 => S0) = 233; + (CIN => S0) = 228; + (A0 => S1) = 481; + (B0 => S1) = 481; + (C0 => S1) = 481; + (D0 => S1) = 481; + (A1 => S1) = 233; + (B1 => S1) = 233; + (C1 => S1) = 233; + (D1 => S1) = 233; + (CIN => S1) = 307; + (A0 => COUT) = 347; + (B0 => COUT) = 347; + (C0 => COUT) = 347; + (D0 => COUT) = 347; + (A1 => COUT) = 347; + (B1 => COUT) = 347; + (C1 => COUT) = 347; + (D1 => COUT) = 347; + (CIN => COUT) = 59; + endspecify + +endmodule + +// Packed flipflop +module OXIDE_FF(input CLK, LSR, CE, DI, M, output reg Q); + parameter GSR = "ENABLED"; + parameter [127:0] CEMUX = "1"; + parameter CLKMUX = "CLK"; + parameter LSRMUX = "LSR"; + parameter REGDDR = "DISABLED"; + parameter SRMODE = "LSR_OVER_CE"; + parameter REGSET = "RESET"; + parameter [127:0] LSRMODE = "LSR"; + + wire muxce; + generate + case (CEMUX) + "1": assign muxce = 1'b1; + "0": assign muxce = 1'b0; + "INV": assign muxce = ~CE; + default: assign muxce = CE; + endcase + endgenerate + + wire muxlsr = (LSRMUX == "INV") ? ~LSR : LSR; + wire muxclk = (CLKMUX == "INV") ? ~CLK : CLK; + wire srval; + generate + if (LSRMODE == "PRLD") + assign srval = M; + else + assign srval = (REGSET == "SET") ? 1'b1 : 1'b0; + endgenerate + + initial Q = srval; + + generate + if (REGDDR == "ENABLED") begin + if (SRMODE == "ASYNC") begin + always @(posedge muxclk, negedge muxclk, posedge muxlsr) + if (muxlsr) + Q <= srval; + else if (muxce) + Q <= DI; + end else begin + always @(posedge muxclk, negedge muxclk) + if (muxlsr) + Q <= srval; + else if (muxce) + Q <= DI; + end + end else begin + if (SRMODE == "ASYNC") begin + always @(posedge muxclk, posedge muxlsr) + if (muxlsr) + Q <= srval; + else if (muxce) + Q <= DI; + end else begin + always @(posedge muxclk) + if (muxlsr) + Q <= srval; + else if (muxce) + Q <= DI; + end + end + endgenerate +endmodule + +// Packed combinational logic (for post-pnr sim) +module OXIDE_COMB( + input A, B, C, D, // LUT inputs + input SEL, // mux select input + input F1, // output from LUT 1 for mux + input FCI, // carry input + input WAD0, WAD1, WAD2, WAD3, // LUTRAM write address inputs + input WD, // LUTRAM write data input + input WCK, WRE, // LUTRAM write clock and enable + output F, // LUT/carry output + output OFX // mux output +); + parameter MODE = "LOGIC"; // LOGIC, CCU2, DPRAM + parameter [15:0] INIT = 16'h0000; + parameter INJECT = "YES"; + + localparam inject_p = (INJECT == "YES") ? 1'b1 : 1'b0; + + reg [15:0] lut = INIT; + + wire [7:0] s3 = D ? INIT[15:8] : INIT[7:0]; + wire [3:0] s2 = C ? s3[ 7:4] : s3[3:0]; + wire [1:0] s1 = B ? s2[ 3:2] : s2[1:0]; + wire Z = A ? s1[1] : s1[0]; + + wire [3:0] s2_3 = C ? INIT[ 7:4] : INIT[3:0]; + wire [1:0] s1_3 = B ? s2_3[ 3:2] : s2_3[1:0]; + wire Z3 = A ? s1_3[1] : s1_3[0]; + + generate + if (MODE == "DPRAM") begin + always @(posedge WCK) + if (WRE) + lut[{WAD3, WAD2, WAD1, WAD0}] <= WD; + end + if (MODE == "CCU2") begin + assign F = Z ^ (FCI & ~inject_p); + assign FCO = Z ? FCI : (Z3 & ~inject_p); + end else begin + assign F = Z; + end + endgenerate + + assign OFX = SEL ? F1 : F; + +endmodule + +// LUTRAM +module DPR16X4( + input [3:0] RAD, DI, WAD, + input WRE, WCK, + output [3:0] DO +); + parameter INITVAL = "0x0000000000000000"; +`include "parse_init.vh" + localparam [63:0] parsed_init = parse_init_64(INITVAL); + + reg [3:0] mem[0:15]; + integer i; + initial begin + for (i = 0; i < 15; i++) + mem[i] = parsed_init[i * 4 +: 4]; + end + + always @(posedge WCK) + if (WRE) + mem[WAD] <= DI; + assign DO = mem[RAD]; +endmodule + +// Used for all the DSP models to reduce duplication +module OXIDE_DSP_REG #( + parameter W = 18, + parameter USED = "REGISTER", + parameter RESETMODE = "SYNC" +) ( + input CLK, CE, RST, + input [W-1:0] D, + output reg [W-1:0] Q +); + generate + if (USED == "BYPASS") + always @* Q = D; + else if (USED == "REGISTER") begin + initial Q = 0; + if (RESETMODE == "ASYNC") + always @(posedge CLK, posedge RST) begin + if (RST) + Q <= 0; + else if (CE) + Q <= D; + end + else if (RESETMODE == "SYNC") + always @(posedge CLK) begin + if (RST) + Q <= 0; + else if (CE) + Q <= D; + end + end + endgenerate +endmodule + +module OXIDE_DSP_SIM #( + // User facing parameters + parameter REGINPUTA = "BYPASS", + parameter REGINPUTB = "BYPASS", + parameter REGINPUTC = "BYPASS", + parameter REGADDSUB = "BYPASS", + parameter REGLOADC = "BYPASS", + parameter REGLOADC2 = "BYPASS", + parameter REGCIN = "BYPASS", + parameter REGPIPELINE = "BYPASS", + parameter REGOUTPUT = "BYPASS", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC", + // Internally used parameters + parameter A_WIDTH = 36, + parameter B_WIDTH = 36, + parameter C_WIDTH = 36, + parameter Z_WIDTH = 72, + parameter PREADD_USED = 0, + parameter ADDSUB_USED = 0 +) ( + input [A_WIDTH-1:0] A, + input [B_WIDTH-1:0] B, + input [C_WIDTH-1:0] C, + input SIGNEDA, + input SIGNEDB, + input SIGNEDC, + input CIN, + input LOADC, + input ADDSUB, + input CLK, + input CEA, CEB, CEC, CEPIPE, CECTRL, CECIN, CEOUT, + input RSTA, RSTB, RSTC, RSTPIPE, RSTCTRL, RSTCIN, RSTOUT, + output wire [Z_WIDTH-1:0] Z +); + + localparam M_WIDTH = (A_WIDTH+B_WIDTH); + + /******** REGISTERS ********/ + + wire [M_WIDTH-1:0] pipe_d, pipe_q; + wire [Z_WIDTH-1:0] z_d; + + wire [A_WIDTH-1:0] a_r; + wire [B_WIDTH-1:0] b_r; + wire [C_WIDTH-1:0] c_r, c_r2; + wire asgd_r, bsgd_r, csgd_r, csgd_r2; + + wire addsub_r, addsub_r2, cin_r, cin_r2, sgd_r, sgd_r2; + wire loadc_r, loadc_r2; + + OXIDE_DSP_REG #(A_WIDTH+1, REGINPUTA, RESETMODE) a_reg(CLK, CEA, RSTA, {SIGNEDA, A}, {asgd_r, a_r}); + OXIDE_DSP_REG #(B_WIDTH+1, REGINPUTB, RESETMODE) b_reg(CLK, CEB, RSTB, {SIGNEDB, B}, {bsgd_r, b_r}); + OXIDE_DSP_REG #(C_WIDTH+1, REGINPUTC, RESETMODE) c_reg(CLK, CEC, RSTC, {SIGNEDC, C}, {csgd_r, c_r}); + + OXIDE_DSP_REG #(M_WIDTH, REGPIPELINE, RESETMODE) pipe_reg(CLK, CEPIPE, RSTPIPE, pipe_d, pipe_q); + + OXIDE_DSP_REG #(2, REGADDSUB, RESETMODE) addsub_reg(CLK, CECTRL, RSTCTRL, {SIGNEDA, ADDSUB}, {sgd_r, addsub_r}); + OXIDE_DSP_REG #(1, REGLOADC, RESETMODE) loadc_reg(CLK, CECTRL, RSTCTRL, LOADC, loadc_r); + OXIDE_DSP_REG #(2, REGPIPELINE, RESETMODE) addsub2_reg(CLK, CECTRL, RSTCTRL, {sgd_r, addsub_r}, {sgd_r2, addsub_r2}); + OXIDE_DSP_REG #(1, REGLOADC2, RESETMODE) loadc2_reg(CLK, CECTRL, RSTCTRL, loadc_r, loadc_r2); + + OXIDE_DSP_REG #(1, REGCIN, RESETMODE) cin_reg(CLK, CECIN, RSTCIN, CIN, cin_r); + OXIDE_DSP_REG #(1, REGPIPELINE, RESETMODE) cin2_reg(CLK, CECIN, RSTCIN, cin_r, cin_r2); + + OXIDE_DSP_REG #(C_WIDTH+1, REGPIPELINE, RESETMODE) c2_reg(CLK, CEC, RSTC, {csgd_r, c_r}, {csgd_r2, c_r2}); + + OXIDE_DSP_REG #(Z_WIDTH, REGOUTPUT, RESETMODE) z_reg(CLK, CEOUT, RSTOUT, z_d, Z); + + /******** PREADDER ********/ + + wire [B_WIDTH-1:0] mult_b; + wire mult_b_sgd; + + generate + if (PREADD_USED) begin + assign mult_b = (b_r + c_r); + assign mult_b_sgd = (bsgd_r | csgd_r); + end else begin + assign mult_b = b_r; + assign mult_b_sgd = bsgd_r; + end + endgenerate + + /******** MULTIPLIER ********/ + + // sign extend operands if needed + wire [M_WIDTH-1:0] mult_a_ext = {{(M_WIDTH-A_WIDTH){asgd_r ? a_r[A_WIDTH-1] : 1'b0}}, a_r}; + wire [M_WIDTH-1:0] mult_b_ext = {{(M_WIDTH-B_WIDTH){mult_b_sgd ? mult_b[B_WIDTH-1] : 1'b0}}, mult_b}; + + wire [M_WIDTH-1:0] mult_m = mult_a_ext * mult_b_ext; + + /******** ACCUMULATOR ********/ + + wire [Z_WIDTH-1:0] m_ext; + + generate + if (ADDSUB_USED) begin + assign pipe_d = mult_m; + assign m_ext = {{(Z_WIDTH-M_WIDTH){sgd_r2 ? pipe_q[M_WIDTH-1] : 1'b0}}, pipe_q}; + assign z_d = (loadc_r2 ? c_r2 : Z) + cin_r2 + (addsub_r2 ? -m_ext : m_ext); + end else begin + assign z_d = mult_m; + end + endgenerate + + +endmodule + +module MULT9X9 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [8:0] A, + input [8:0] B, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input SIGNEDA, + input SIGNEDB, + input RSTOUT, + input CEOUT, + output [17:0] Z +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(9), + .B_WIDTH(9), + .Z_WIDTH(18), + .PREADD_USED(0), + .ADDSUB_USED(0) + ) dsp_i ( + .A(A), .B(B), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + +module MULT18X18 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [17:0] A, + input [17:0] B, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input SIGNEDA, + input SIGNEDB, + input RSTOUT, + input CEOUT, + output [35:0] Z +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(18), + .B_WIDTH(18), + .Z_WIDTH(36), + .PREADD_USED(0), + .ADDSUB_USED(0) + ) dsp_i ( + .A(A), .B(B), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + +module MULT18X36 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [17:0] A, + input [35:0] B, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input SIGNEDA, + input SIGNEDB, + input RSTOUT, + input CEOUT, + output [53:0] Z +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(18), + .B_WIDTH(36), + .Z_WIDTH(54), + .PREADD_USED(0), + .ADDSUB_USED(0) + ) dsp_i ( + .A(A), .B(B), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + +module MULT36X36 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [35:0] A, + input [35:0] B, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input SIGNEDA, + input SIGNEDB, + input RSTOUT, + input CEOUT, + output [71:0] Z +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(36), + .B_WIDTH(36), + .Z_WIDTH(72), + .PREADD_USED(0), + .ADDSUB_USED(0) + ) dsp_i ( + .A(A), .B(B), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + + +module MULTPREADD9X9 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGINPUTC = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [8:0] A, + input [8:0] B, + input [8:0] C, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input CEC, + input RSTC, + input SIGNEDA, + input SIGNEDB, + input SIGNEDC, + input RSTOUT, + input CEOUT, + output [17:0] Z +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGINPUTC(REGINPUTC), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(9), + .B_WIDTH(9), + .C_WIDTH(9), + .Z_WIDTH(18), + .PREADD_USED(1), + .ADDSUB_USED(0) + ) dsp_i ( + .A(A), .B(B), .C(C), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .CEC(CEC), .RSTC(RSTC), + .SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), .SIGNEDC(SIGNEDC), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + + +module MULTPREADD18X18 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGINPUTC = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [17:0] A, + input [17:0] B, + input [17:0] C, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input CEC, + input RSTC, + input SIGNEDA, + input SIGNEDB, + input SIGNEDC, + input RSTOUT, + input CEOUT, + output [35:0] Z +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGINPUTC(REGINPUTC), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(18), + .B_WIDTH(18), + .C_WIDTH(18), + .Z_WIDTH(36), + .PREADD_USED(1), + .ADDSUB_USED(0) + ) dsp_i ( + .A(A), .B(B), .C(C), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .CEC(CEC), .RSTC(RSTC), + .SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), .SIGNEDC(SIGNEDC), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + + +module MULTADDSUB18X18 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGINPUTC = "REGISTER", + parameter REGADDSUB = "REGISTER", + parameter REGLOADC = "REGISTER", + parameter REGLOADC2 = "REGISTER", + parameter REGCIN = "REGISTER", + parameter REGPIPELINE = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [17:0] A, + input [17:0] B, + input [53:0] C, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input CEC, + input RSTC, + input SIGNED, + input RSTPIPE, + input CEPIPE, + input RSTCTRL, + input CECTRL, + input RSTCIN, + input CECIN, + input LOADC, + input ADDSUB, + output [53:0] Z, + input RSTOUT, + input CEOUT, + input CIN +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGINPUTC(REGINPUTC), + .REGADDSUB(REGADDSUB), + .REGLOADC(REGLOADC), + .REGLOADC2(REGLOADC2), + .REGCIN(REGCIN), + .REGPIPELINE(REGPIPELINE), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(18), + .B_WIDTH(18), + .C_WIDTH(54), + .Z_WIDTH(54), + .PREADD_USED(0), + .ADDSUB_USED(1) + ) dsp_i ( + .A(A), .B(B), .C(C), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .CEC(CEC), .RSTC(RSTC), + .CEPIPE(CEPIPE), .RSTPIPE(RSTPIPE), + .CECTRL(CECTRL), .RSTCTRL(RSTCTRL), + .CECIN(CECIN), .RSTCIN(RSTCIN), + .CIN(CIN), .LOADC(LOADC), .ADDSUB(ADDSUB), + .SIGNEDA(SIGNED), .SIGNEDB(SIGNED), .SIGNEDC(SIGNED), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + + +module MULTADDSUB36X36 #( + parameter REGINPUTA = "REGISTER", + parameter REGINPUTB = "REGISTER", + parameter REGINPUTC = "REGISTER", + parameter REGADDSUB = "REGISTER", + parameter REGLOADC = "REGISTER", + parameter REGLOADC2 = "REGISTER", + parameter REGCIN = "REGISTER", + parameter REGPIPELINE = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [35:0] A, + input [35:0] B, + input [107:0] C, + input CLK, + input CEA, + input RSTA, + input CEB, + input RSTB, + input CEC, + input RSTC, + input SIGNED, + input RSTPIPE, + input CEPIPE, + input RSTCTRL, + input CECTRL, + input RSTCIN, + input CECIN, + input LOADC, + input ADDSUB, + output [107:0] Z, + input RSTOUT, + input CEOUT, + input CIN +); + OXIDE_DSP_SIM #( + .REGINPUTA(REGINPUTA), + .REGINPUTB(REGINPUTB), + .REGINPUTC(REGINPUTC), + .REGADDSUB(REGADDSUB), + .REGLOADC(REGLOADC), + .REGLOADC2(REGLOADC2), + .REGCIN(REGCIN), + .REGPIPELINE(REGPIPELINE), + .REGOUTPUT(REGOUTPUT), + .GSR(GSR), + .RESETMODE(RESETMODE), + + .A_WIDTH(36), + .B_WIDTH(36), + .C_WIDTH(108), + .Z_WIDTH(108), + .PREADD_USED(0), + .ADDSUB_USED(1) + ) dsp_i ( + .A(A), .B(B), .C(C), + .CLK(CLK), + .CEA(CEA), .RSTA(RSTA), + .CEB(CEB), .RSTB(RSTB), + .CEC(CEC), .RSTC(RSTC), + .CEPIPE(CEPIPE), .RSTPIPE(RSTPIPE), + .CECTRL(CECTRL), .RSTCTRL(RSTCTRL), + .CECIN(CECIN), .RSTCIN(RSTCIN), + .CIN(CIN), .LOADC(LOADC), .ADDSUB(ADDSUB), + .SIGNEDA(SIGNED), .SIGNEDB(SIGNED), .SIGNEDC(SIGNED), + .RSTOUT(RSTOUT), .CEOUT(CEOUT), + .Z(Z) + ); +endmodule + +module MULTADDSUB9X9WIDE #( + parameter REGINPUTAB0 = "REGISTER", + parameter REGINPUTAB1 = "REGISTER", + parameter REGINPUTAB2 = "REGISTER", + parameter REGINPUTAB3 = "REGISTER", + parameter REGINPUTC = "REGISTER", + parameter REGADDSUB = "REGISTER", + parameter REGLOADC = "REGISTER", + parameter REGLOADC2 = "REGISTER", + parameter REGPIPELINE = "REGISTER", + parameter REGOUTPUT = "REGISTER", + parameter GSR = "ENABLED", + parameter RESETMODE = "SYNC" +) ( + input [8:0] A0, B0, A1, B1, A2, B2, A3, B3, + input [53:0] C, + input CLK, + input CEA0A1, CEA2A3, + input RSTA0A1, RSTA2A3, + input CEB0B1, CEB2B3, + input RSTB0B1, RSTB2B3, + input CEC, RSTC, + input CECTRL, RSTCTRL, + input SIGNED, + input RSTPIPE, CEPIPE, + input RSTOUT, CEOUT, + input LOADC, + input [3:0] ADDSUB, + output [53:0] Z +); + wire [17:0] m0, m1, m2, m3; + + localparam M_WIDTH = 18; + localparam Z_WIDTH = 54; + + MULT9X9 #( + .REGINPUTA(REGINPUTAB0), .REGINPUTB(REGINPUTAB0), .REGOUTPUT(REGPIPELINE), .GSR(GSR), .RESETMODE(RESETMODE) + ) m9_0 ( + .A(A0), .B(B0), .SIGNEDA(SIGNED), .SIGNEDB(SIGNED), + .CLK(CLK), + .CEA(CEA0A1), .RSTA(RSTA0A1), + .CEB(CEB0B1), .RSTB(RSTB0B1), + .CEOUT(CEPIPE), .RSTOUT(RSTPIPE), + .Z(m0) + ); + MULT9X9 #( + .REGINPUTA(REGINPUTAB1), .REGINPUTB(REGINPUTAB1), .REGOUTPUT(REGPIPELINE), .GSR(GSR), .RESETMODE(RESETMODE) + ) m9_1 ( + .A(A1), .B(B1), .SIGNEDA(SIGNED), .SIGNEDB(SIGNED), + .CLK(CLK), + .CEA(CEA0A1), .RSTA(RSTA0A1), + .CEB(CEB0B1), .RSTB(RSTB0B1), + .CEOUT(CEPIPE), .RSTOUT(RSTPIPE), + .Z(m1) + ); + MULT9X9 #( + .REGINPUTA(REGINPUTAB2), .REGINPUTB(REGINPUTAB2), .REGOUTPUT(REGPIPELINE), .GSR(GSR), .RESETMODE(RESETMODE) + ) m9_2 ( + .A(A2), .B(B2), .SIGNEDA(SIGNED), .SIGNEDB(SIGNED), + .CLK(CLK), + .CEA(CEA2A3), .RSTA(RSTA2A3), + .CEB(CEB2B3), .RSTB(RSTB2B3), + .CEOUT(CEPIPE), .RSTOUT(RSTPIPE), + .Z(m2) + ); + MULT9X9 #( + .REGINPUTA(REGINPUTAB3), .REGINPUTB(REGINPUTAB3), .REGOUTPUT(REGPIPELINE), .GSR(GSR), .RESETMODE(RESETMODE) + ) m9_3 ( + .A(A3), .B(B3), .SIGNEDA(SIGNED), .SIGNEDB(SIGNED), + .CLK(CLK), + .CEA(CEA2A3), .RSTA(RSTA2A3), + .CEB(CEB2B3), .RSTB(RSTB2B3), + .CEOUT(CEPIPE), .RSTOUT(RSTPIPE), + .Z(m3) + ); + + wire [53:0] c_r, c_r2; + wire [3:0] addsub_r, addsub_r2; + wire sgd_r, sgd_r2, csgd_r, csgd_r2; + wire loadc_r, loadc_r2; + + OXIDE_DSP_REG #(5, REGADDSUB, RESETMODE) addsub_reg(CLK, CECTRL, RSTCTRL, {SIGNED, ADDSUB}, {sgd_r, addsub_r}); + OXIDE_DSP_REG #(5, REGADDSUB, RESETMODE) addsub2_reg(CLK, CECTRL, RSTCTRL, {sgd_r, addsub_r}, {sgd_r2, addsub_r2}); + + OXIDE_DSP_REG #(1, REGLOADC, RESETMODE) loadc_reg(CLK, CECTRL, RSTCTRL, LOADC, loadc_r); + OXIDE_DSP_REG #(1, REGLOADC2, RESETMODE) loadc2_reg(CLK, CECTRL, RSTCTRL, loadc_r, loadc_r2); + + OXIDE_DSP_REG #(55, REGINPUTC, RESETMODE) c_reg(CLK, CEC, RSTC, {SIGNED, C}, {csgd_r, c_r}); + OXIDE_DSP_REG #(55, REGPIPELINE, RESETMODE) c2_reg(CLK, CEC, RSTC, {csgd_r, c_r}, {csgd_r2, c_r2}); + + + wire [18:0] m0_ext, m1_ext, m2_ext, m3_ext; + + assign m0_ext = {sgd_r2 ? m0[M_WIDTH-1] : 1'b0, m0}; + assign m1_ext = {sgd_r2 ? m1[M_WIDTH-1] : 1'b0, m1}; + assign m2_ext = {sgd_r2 ? m2[M_WIDTH-1] : 1'b0, m2}; + assign m3_ext = {sgd_r2 ? m3[M_WIDTH-1] : 1'b0, m3}; + + wire [18:0] s0 = addsub_r2[2] ? (m0_ext - m1_ext) : (m0_ext + m1_ext); + wire [18:0] s1 = addsub_r2[3] ? (m2_ext - m3_ext) : (m2_ext + m3_ext); + + wire [53:0] s0_ext = {{(54-19){sgd_r2 ? s0[18] : 1'b0}}, s0}; + wire [53:0] s1_ext = {{(54-19){sgd_r2 ? s1[18] : 1'b0}}, s1}; + + wire [53:0] c_op = loadc_r2 ? c_r2 : Z; + + // The diagram in the docs is wrong! It is not two cascaded 2-input add/subs as shown, + // but a three-input unit with negation controls on two inputs (i.e. addsub_r2[0] + // negates s1 not (s1 +/- s0)) + wire [53:0] z_d = c_op + (addsub_r2[0] ? -s1_ext : s1_ext) + (addsub_r2[1] ? -s0_ext : s0_ext); + + OXIDE_DSP_REG #(Z_WIDTH, REGOUTPUT, RESETMODE) z_reg(CLK, CEOUT, RSTOUT, z_d, Z); + +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/cells_xtra.v b/resources/netlist/resources/kernel/share/nexus/cells_xtra.v new file mode 100644 index 0000000..6cf3a64 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/cells_xtra.v @@ -0,0 +1,10389 @@ +// Created by cells_xtra.py from Lattice models + +module ACC54 (...); + parameter SIGN = "DISABLED"; + parameter M9ADDSUB_CTRL = "ADDITION"; + parameter ADDSUB_CTRL = "ADD_ADD_CTRL_54_BIT_ADDER"; + parameter STATICOPCODE_EN = "DISABLED"; + parameter OUTREGBYPS = "REGISTER"; + parameter GSR = "ENABLED"; + parameter PROGCONST = "0b000000000000000000000000000000000000000000000000000000"; + parameter CONSTSEL = "BYPASS"; + parameter DSPCASCADE = "DISABLED"; + parameter ACC108CASCADE = "BYPASSCASCADE"; + parameter ACCUMODE = "MODE0"; + parameter ACCUBYPS = "USED"; + parameter CREGBYPS1 = "REGISTER"; + parameter CREGBYPS2 = "REGISTER"; + parameter CREGBYPS3 = "REGISTER"; + parameter CINREGBYPS1 = "REGISTER"; + parameter CINREGBYPS2 = "REGISTER"; + parameter CINREGBYPS3 = "REGISTER"; + parameter LOADREGBYPS1 = "REGISTER"; + parameter LOADREGBYPS2 = "REGISTER"; + parameter LOADREGBYPS3 = "REGISTER"; + parameter M9ADDSUBREGBYPS1 = "REGISTER"; + parameter M9ADDSUBREGBYPS2 = "REGISTER"; + parameter M9ADDSUBREGBYPS3 = "REGISTER"; + parameter ADDSUBSIGNREGBYPS1 = "REGISTER"; + parameter ADDSUBSIGNREGBYPS2 = "REGISTER"; + parameter ADDSUBSIGNREGBYPS3 = "REGISTER"; + parameter ROUNDHALFUP = "DISABLED"; + parameter ROUNDRTZI = "ROUND_TO_ZERO"; + parameter ROUNDBIT = "ROUND_TO_BIT0"; + parameter CASCOUTREGBYPS = "REGISTER"; + parameter SFTEN = "DISABLED"; + parameter RESET = "SYNC"; + input [3:0] SFTCTRL; + input [53:0] DSPIN; + input [71:0] PP; + input [53:0] CINPUT; + input LOAD; + input [1:0] M9ADDSUB; + input [1:0] ADDSUB; + input CIN; + input [1:0] CASIN; + input CEO; + input RSTO; + input CEC; + input RSTC; + input CLK; + input SIGNEDI; + output [35:0] SUM1; + output [35:0] SUM0; + output [53:0] DSPOUT; + output [1:0] CASCOUT; + input ROUNDEN; + input CECIN; + input CECTRL; + input RSTCIN; + input RSTCTRL; +endmodule + +module ADC (...); + parameter ADC_ENP = "ENABLED"; + parameter CLK_DIV = "2"; + parameter CTLCOMPSW1 = "DISABLED"; + parameter CTLCOMPSW2 = "DISABLED"; + parameter CTLCOMPSW3 = "DISABLED"; + parameter DF = "STRAIGHT_BINARY"; + parameter EN_COMP1 = "ENABLED"; + parameter EN_COMP2 = "ENABLED"; + parameter EN_COMP3 = "ENABLED"; + parameter OMA = "BIPOLAR"; + parameter OMB = "BIPOLAR"; + parameter REFBUFAEN = "ENABLED"; + parameter REFBUFBEN = "ENABLED"; + parameter SLEEP = "DISABLED"; + parameter VREFACFG = "1P0_TO_1P2"; + parameter VREFASEL = "INTERNAL"; + parameter VREFBCFG = "1P0_TO_1P2"; + parameter VREFBSEL = "INTERNAL"; + (* iopad_external_pin *) + input DN0; + (* iopad_external_pin *) + input DN1; + (* iopad_external_pin *) + input DP0; + (* iopad_external_pin *) + input DP1; + input ADCEN; + input CAL; + output CALRDY; + input CHAEN; + input [3:0] CHASEL; + input CHBEN; + input [3:0] CHBSEL; + input CLKDCLK; + input CLKFAB; + output COG; + input COMP1IN; + input COMP1IP; + output COMP1OL; + input COMP2IN; + input COMP2IP; + output COMP2OL; + input COMP3IN; + input COMP3IP; + output COMP3OL; + input CONVSTOP; + output [11:0] DA; + output [11:0] DB; + output EOC; + input [15:0] GPION; + input [15:0] GPIOP; + input RESETN; + input RSTN; + input SOC; + output COMP1O; + output COMP2O; + output COMP3O; +endmodule + +module ALUREG (...); + parameter ALURST_ACTIVELOW = "DISABLE"; + parameter GSR = "ENABLED"; + parameter INREG = "DISABLE"; + parameter MULFXP_ROUND = "ENABLE"; + parameter OUTREG = "DISABLE"; + parameter REGRST_ACTIVELOW = "DISABLE"; + parameter RETAIN = "ENABLE"; + parameter RFASYNC_RD = "SYNC_RD"; + parameter RFR0_RO = "R0READONLY"; + parameter RFUNALIA_WR = "DISABLE"; + parameter RFWCLK_INV = "SIG"; + input ALUCLK; + output ALUFLAGC; + output ALUFLAGV; + output ALUFLAGZ; + input ALUFORWARDA; + input ALUFORWARDB; + input ALUIREGEN; + input ALUOREGEN; + input ALURST; + input [31:0] DATAA; + input [31:0] DATAB; + input [4:0] DATAC; + input [6:0] OPC; + input OPCCUSTOM; + input [4:0] RADDRA; + input [4:0] RADDRB; + output [31:0] RDATAA; + output [31:0] RDATAB; + input REGCLK; + input REGCLKEN; + input REGRST; + output [31:0] RESULT; + input [4:0] WADDR; + input [1:0] WDROTATE; + input WDSIGNEXT; + input [1:0] WDSIZE; + input [31:0] WDATA; + input WREN; +endmodule + +(* keep *) +module BB_ADC (...); + (* iopad_external_pin *) + inout IOPAD; + output INADC; +endmodule + +(* keep *) +module BB_CDR (...); + (* iopad_external_pin *) + inout IOPAD; + output INADC; +endmodule + +(* keep *) +module BB_I3C_A (...); + (* iopad_external_pin *) + inout IOPAD; + output PADDI; + input PADDO; + input PADDT; + input I3CRESEN; + input I3CWKPU; +endmodule + +module BFD1P3KX (...); + parameter GSR = "ENABLED"; + parameter OUTSET = "RESET"; + parameter INSET = "RESET"; + parameter TSSET = "RESET"; + input DOUT; + input DIN; + input DT; + input CEOUT; + input CLKOUT; + input SROUT; + input CEIN; + input CLKIN; + input SRIN; + output QOUT; + output QIN; + output QT; +endmodule + +module BFD1P3LX (...); + parameter GSR = "ENABLED"; + parameter OUTSET = "RESET"; + parameter INSET = "RESET"; + parameter TSSET = "RESET"; + input DOUT; + input DIN; + input DT; + input CEOUT; + input CLKOUT; + input SROUT; + input CEIN; + input CLKIN; + input SRIN; + output QOUT; + output QIN; + output QT; +endmodule + +(* keep *) +module BNKREF18 (...); + parameter BANK = "0b0000"; + parameter STANDBY_DIFFIO = "DISABLED"; + parameter STANDBY_INR = "DISABLED"; + input STDBYINR; + input STDBYDIF; + output [6:0] PVTCODE; +endmodule + +(* keep *) +module CONFIG_LMMI (...); + parameter LMMI_EN = "DIS"; + input LMMICLK; + input LMMIREQUEST; + input LMMIWRRD_N; + input [7:0] LMMIOFFSET; + input [7:0] LMMIWDATA; + output [7:0] LMMIRDATA; + output LMMIREADY; + output LMMIRDATAVALID; + input LMMIRESETN; + input RSTSMCLK; + input SMCLK; +endmodule + +module DDRDLL (...); + parameter GSR = "ENABLED"; + parameter ENA_ROUNDOFF = "ENABLED"; + parameter FORCE_MAX_DELAY = "CODE_OR_LOCK_FROM_DLL_LOOP"; + output [8:0] CODE; + input FREEZE; + output LOCK; + input CLKIN; + input RST; + output [8:0] DCNTL; + input UDDCNTL_N; +endmodule + +module DELAYA (...); + parameter DEL_MODE = "USER_DEFINED"; + parameter DEL_VALUE = "0"; + parameter COARSE_DELAY_MODE = "STATIC"; + parameter COARSE_DELAY = "0NS"; + parameter EDGE_MONITOR = "DISABLED"; + parameter WAIT_FOR_EDGE = "DISABLED"; + input A; + input LOAD_N; + input MOVE; + input DIRECTION; + input COARSE0; + input COARSE1; + input RANKSELECT; + input RANKENABLE; + input RANK0UPDATE; + input RANK1UPDATE; + output Z; + output EDETERR; + output CFLAG; +endmodule + +module DELAYB (...); + parameter DEL_VALUE = "0"; + parameter COARSE_DELAY = "0NS"; + parameter DEL_MODE = "USER_DEFINED"; + input A; + output Z; +endmodule + +(* keep *) +module DIFFIO18 (...); + parameter PULLMODE = "DOWN"; + parameter ENADC_IN = "DISABLED"; + parameter MIPI = "DISABLED"; + input PADDO; + input DOLP; + (* iopad_external_pin *) + inout IOPAD; + output PADDI; + output INLP; + input PADDT; + output INADC; + input HSRXEN; + input HSTXEN; +endmodule + +module DLLDEL (...); + parameter ADJUST = "0"; + parameter DEL_ADJUST = "PLUS"; + parameter ENABLE = "ENABLED"; + input CLKIN; + output CLKOUT; + input [8:0] CODE; + output COUT; + input DIR; + input LOAD_N; + input MOVE; +endmodule + +module DP16K_MODE (...); + parameter DATA_WIDTH_A = "X18"; + parameter DATA_WIDTH_B = "X18"; + parameter OUTREG_A = "BYPASSED"; + parameter OUTREG_B = "BYPASSED"; + parameter GSR = "ENABLED"; + parameter RESETMODE_A = "SYNC"; + parameter RESETMODE_B = "SYNC"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE_A = "000"; + parameter CSDECODE_B = "000"; + parameter ASYNC_RST_RELEASE_A = "SYNC"; + parameter ASYNC_RST_RELEASE_B = "SYNC"; + parameter INIT_DATA = "STATIC"; + input DIA0; + input DIA1; + input DIA2; + input DIA3; + input DIA4; + input DIA5; + input DIA6; + input DIA7; + input DIA8; + input DIA9; + input DIA10; + input DIA11; + input DIA12; + input DIA13; + input DIA14; + input DIA15; + input DIA16; + input DIA17; + input DIB0; + input DIB1; + input DIB2; + input DIB3; + input DIB4; + input DIB5; + input DIB6; + input DIB7; + input DIB8; + input DIB9; + input DIB10; + input DIB11; + input DIB12; + input DIB13; + input DIB14; + input DIB15; + input DIB16; + input DIB17; + input ADA0; + input ADA1; + input ADA2; + input ADA3; + input ADA4; + input ADA5; + input ADA6; + input ADA7; + input ADA8; + input ADA9; + input ADA10; + input ADA11; + input ADA12; + input ADA13; + input ADB0; + input ADB1; + input ADB2; + input ADB3; + input ADB4; + input ADB5; + input ADB6; + input ADB7; + input ADB8; + input ADB9; + input ADB10; + input ADB11; + input ADB12; + input ADB13; + input CLKA; + input CLKB; + input CEA; + input CEB; + input WEA; + input WEB; + input CSA0; + input CSA1; + input CSA2; + input CSB0; + input CSB1; + input CSB2; + input RSTA; + input RSTB; + output DOA0; + output DOA1; + output DOA2; + output DOA3; + output DOA4; + output DOA5; + output DOA6; + output DOA7; + output DOA8; + output DOA9; + output DOA10; + output DOA11; + output DOA12; + output DOA13; + output DOA14; + output DOA15; + output DOA16; + output DOA17; + output DOB0; + output DOB1; + output DOB2; + output DOB3; + output DOB4; + output DOB5; + output DOB6; + output DOB7; + output DOB8; + output DOB9; + output DOB10; + output DOB11; + output DOB12; + output DOB13; + output DOB14; + output DOB15; + output DOB16; + output DOB17; +endmodule + +module DP16K (...); + parameter DATA_WIDTH_A = "X18"; + parameter DATA_WIDTH_B = "X18"; + parameter OUTREG_A = "BYPASSED"; + parameter OUTREG_B = "BYPASSED"; + parameter GSR = "ENABLED"; + parameter RESETMODE_A = "SYNC"; + parameter RESETMODE_B = "SYNC"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE_A = "000"; + parameter CSDECODE_B = "000"; + parameter ASYNC_RST_RELEASE_A = "SYNC"; + parameter ASYNC_RST_RELEASE_B = "SYNC"; + parameter INIT_DATA = "STATIC"; + input [17:0] DIA; + input [17:0] DIB; + input [13:0] ADA; + input [13:0] ADB; + input CLKA; + input CLKB; + input CEA; + input CEB; + input WEA; + input WEB; + input [2:0] CSA; + input [2:0] CSB; + input RSTA; + input RSTB; + output [17:0] DOA; + output [17:0] DOB; +endmodule + +(* keep *) +module DPHY (...); + parameter GSR = "ENABLED"; + parameter AUTO_PD_EN = "POWERED_UP"; + parameter CFG_NUM_LANES = "ONE_LANE"; + parameter CM = "0b00000000"; + parameter CN = "0b00000"; + parameter CO = "0b000"; + parameter CONT_CLK_MODE = "DISABLED"; + parameter DESKEW_EN = "DISABLED"; + parameter DSI_CSI = "CSI2_APP"; + parameter EN_CIL = "CIL_ENABLED"; + parameter HSEL = "DISABLED"; + parameter LANE0_SEL = "LANE_0"; + parameter LOCK_BYP = "GATE_TXBYTECLKHS"; + parameter MASTER_SLAVE = "SLAVE"; + parameter PLLCLKBYPASS = "REGISTERED"; + parameter RSEL = "0b00"; + parameter RXCDRP = "0b00"; + parameter RXDATAWIDTHHS = "0b00"; + parameter RXLPRP = "0b000"; + parameter TEST_ENBL = "0b000000"; + parameter TEST_PATTERN = "0b00000000000000000000000000000000"; + parameter TST = "0b1001"; + parameter TXDATAWIDTHHS = "0b00"; + parameter U_PRG_HS_PREPARE = "0b00"; + parameter U_PRG_HS_TRAIL = "0b000000"; + parameter U_PRG_HS_ZERO = "0b000000"; + parameter U_PRG_RXHS_SETTLE = "0b000000"; + parameter UC_PRG_HS_PREPARE = "1P0_TXCLKESC"; + parameter UC_PRG_HS_TRAIL = "0b00000"; + parameter UC_PRG_HS_ZERO = "0b0000000"; + parameter UC_PRG_RXHS_SETTLE = "0b000000"; + input LMMICLK; + input LMMIRESET_N; + input LMMIREQUEST; + input LMMIWRRD_N; + input [4:0] LMMIOFFSET; + input [3:0] LMMIWDATA; + output [3:0] LMMIRDATA; + output LMMIRDATAVALID; + output LMMIREADY; + input BITCKEXT; + (* iopad_external_pin *) + inout CKN; + (* iopad_external_pin *) + inout CKP; + input CLKREF; + output [1:0] D0ACTIVE; + output [9:0] D0BYTCNT; + output [9:0] D0ERRCNT; + output [1:0] D0PASS; + output [1:0] D0VALID; + output [1:0] D1ACTIVE; + output [9:0] D1BYTCNT; + output [9:0] D1ERRCNT; + output [1:0] D1PASS; + output [1:0] D1VALID; + output [1:0] D2ACTIVE; + output [9:0] D2BYTCNT; + output [9:0] D2ERRCNT; + output [1:0] D2PASS; + output [1:0] D2VALID; + output [1:0] D3ACTIVE; + output [9:0] D3BYTCNT; + output [9:0] D3ERRCNT; + output [1:0] D3PASS; + output [1:0] D3VALID; + output [9:0] DCTSTOUT; + (* iopad_external_pin *) + inout DN0; + (* iopad_external_pin *) + inout DN1; + (* iopad_external_pin *) + inout DN2; + (* iopad_external_pin *) + inout DN3; + (* iopad_external_pin *) + inout DP0; + (* iopad_external_pin *) + inout DP1; + (* iopad_external_pin *) + inout DP2; + (* iopad_external_pin *) + inout DP3; + output LOCK; + input PDDPHY; + input PDPLL; + input SCCLKIN; + output UDIR; + input UED0THEN; + output UERCLP0; + output UERCLP1; + output UERCTRL; + output UERE; + output UERSTHS; + output UERSSHS; + output UERSE; + input UFRXMODE; + input UTXMDTX; + output URXACTHS; + output URXCKE; + input URXCKINE; + output [7:0] URXDE; + output [15:0] URXDHS; + output URXLPDTE; + output URXSKCHS; + output URXDRX; + output [3:0] URXSHS; + output URE0D3DP; + output URE1D3DN; + output URE2CKDP; + output URE3CKDN; + output URXULPSE; + output URXVDE; + output [3:0] URXVDHS; + output USSTT; + input UTDIS; + input UTXCKE; + input UDE0D0TN; + input UDE1D1TN; + input UDE2D2TN; + input UDE3D3TN; + input UDE4CKTN; + input UDE5D0RN; + input UDE6D1RN; + input UDE7D2RN; + input [31:0] UTXDHS; + input UTXENER; + output UTXRRS; + output UTXRYP; + output UTXRYSK; + input UTXRD0EN; + input UTRD0SEN; + input UTXSKD0N; + input UTXTGE0; + input UTXTGE1; + input UTXTGE2; + input UTXTGE3; + input UTXULPSE; + input UTXUPSEX; + input UTXVDE; + input [3:0] UTXWVDHS; + output UUSAN; + output U1DIR; + input U1ENTHEN; + output U1ERCLP0; + output U1ERCLP1; + output U1ERCTRL; + output U1ERE; + output U1ERSTHS; + output U1ERSSHS; + output U1ERSE; + input U1FRXMD; + input U1FTXST; + output U1RXATHS; + output U1RXCKE; + output [7:0] U1RXDE; + output [15:0] U1RXDHS; + output U1RXDTE; + output U1RXSKS; + output U1RXSK; + output [3:0] U1RXSHS; + output U1RE0D; + output U1RE1CN; + output U1RE2D; + output U1RE3N; + output U1RXUPSE; + output U1RXVDE; + output [3:0] U1RXVDHS; + output U1SSTT; + input U1TDIS; + input U1TREQ; + input U1TDE0D3; + input U1TDE1CK; + input U1TDE2D0; + input U1TDE3D1; + input U1TDE4D2; + input U1TDE5D3; + input U1TDE6; + input U1TDE7; + input [31:0] U1TXDHS; + input U1TXLPD; + output U1TXRYE; + output U1TXRY; + output U1TXRYSK; + input U1TXREQ; + input U1TXREQH; + input U1TXSK; + input U1TXTGE0; + input U1TXTGE1; + input U1TXTGE2; + input U1TXTGE3; + input U1TXUPSE; + input U1TXUPSX; + input U1TXVDE; + input [3:0] U1TXWVHS; + output U1USAN; + output U2DIR; + input U2END2; + output U2ERCLP0; + output U2ERCLP1; + output U2ERCTRL; + output U2ERE; + output U2ERSTHS; + output U2ERSSHS; + output U2ERSE; + input U2FRXMD; + input U2FTXST; + output U2RXACHS; + output U2RXCKE; + output [7:0] U2RXDE; + output [15:0] U2RXDHS; + output U2RPDTE; + output U2RXSK; + output U2RXSKC; + output [3:0] U2RXSHS; + output U2RE0D2; + output U2RE1D2; + output U2RE2D3; + output U2RE3D3; + output U2RXUPSE; + output U2RXVDE; + output [3:0] U2RXVDHS; + output U2SSTT; + input U2TDIS; + input U2TREQ; + input U2TDE0D0; + input U2TDE1D1; + input U2TDE2D2; + input U2TDE3D3; + input U2TDE4CK; + input U2TDE5D0; + input U2TDE6D1; + input U2TDE7D2; + input [31:0] U2TXDHS; + input U2TPDTE; + output U2TXRYE; + output U2TXRYH; + output U2TXRYSK; + input U2TXREQ; + input U2TXREQH; + input U2TXSKC; + input U2TXTGE0; + input U2TXTGE1; + input U2TXTGE2; + input U2TXTGE3; + input U2TXUPSE; + input U2TXUPSX; + input U2TXVDE; + input [3:0] U2TXWVHS; + output U2USAN; + output U3DIR; + input U3END3; + output U3ERCLP0; + output U3ERCLP1; + output U3ERCTRL; + output U3ERE; + output U3ERSTHS; + output U3ERSSHS; + output U3ERSE; + input U3FRXMD; + input U3FTXST; + output U3RXATHS; + output U3RXCKE; + output [7:0] U3RXDE; + output [15:0] U3RXDHS; + output U3RPDTE; + output U3RXSK; + output U3RXSKC; + output [3:0] U3RXSHS; + output U3RE0CK; + output U3RE1CK; + output U3RE2; + output U3RE3; + output U3RXUPSE; + output U3RXVDE; + output [3:0] U3RXVDHS; + output U3SSTT; + input U3TDISD2; + input U3TREQD2; + input U3TDE0D3; + input U3TDE1D0; + input U3TDE2D1; + input U3TDE3D2; + input U3TDE4D3; + input U3TDE5CK; + input U3TDE6; + input U3TDE7; + input [31:0] U3TXDHS; + input U3TXLPDT; + output U3TXRY; + output U3TXRYHS; + output U3TXRYSK; + input U3TXREQ; + input U3TXREQH; + input U3TXSKC; + input U3TXTGE0; + input U3TXTGE1; + input U3TXTGE2; + input U3TXTGE3; + input U3TXULPS; + input U3TXUPSX; + input U3TXVD3; + input [3:0] U3TXWVHS; + output U3USAN; + input UCENCK; + output UCRXCKAT; + output UCRXUCKN; + output UCSSTT; + input UCTXREQH; + input UCTXUPSC; + input UCTXUPSX; + output UCUSAN; + input LTSTEN; + input [1:0] LTSTLANE; + output URWDCKHS; + input UTRNREQ; + output UTWDCKHS; + output UCRXWCHS; + output CLKLBACT; +endmodule + +module DPSC512K (...); + parameter OUTREG_A = "NO_REG"; + parameter OUTREG_B = "NO_REG"; + parameter GSR = "ENABLED"; + parameter RESETMODE = "SYNC"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_40 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_41 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_42 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_43 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_44 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_45 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_46 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_47 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_48 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_49 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_50 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_51 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_52 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_53 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_54 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_55 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_56 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_57 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_58 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_59 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_60 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_61 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_62 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_63 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_64 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_65 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_66 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_67 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_68 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_69 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_70 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_71 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_72 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_73 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_74 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_75 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_76 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_77 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_78 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_79 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + parameter ECC_BYTE_SEL = "ECC_EN"; + input [31:0] DIA; + input [31:0] DIB; + input [13:0] ADA; + input [13:0] ADB; + input CLK; + input CEA; + input CEB; + input WEA; + input WEB; + input CSA; + input CSB; + input RSTA; + input RSTB; + input [3:0] BENA_N; + input [3:0] BENB_N; + input CEOUTA; + input CEOUTB; + output [31:0] DOA; + output [31:0] DOB; + output [1:0] ERRDECA; + output [1:0] ERRDECB; +endmodule + +module DQSBUF (...); + parameter GSR = "ENABLED"; + parameter ENABLE_FIFO = "DISABLED"; + parameter FORCE_READ = "DISABLED"; + parameter FREE_WHEEL = "DDR"; + parameter MODX = "NOT_USED"; + parameter MT_EN_READ = "DISABLED"; + parameter MT_EN_WRITE = "DISABLED"; + parameter MT_EN_WRITE_LEVELING = "DISABLED"; + parameter RD_PNTR = "0b000"; + parameter READ_ENABLE = "DISABLED"; + parameter RX_CENTERED = "ENABLED"; + parameter S_READ = "0"; + parameter S_WRITE = "0"; + parameter SIGN_READ = "POSITIVE"; + parameter SIGN_WRITE = "POSITIVE"; + parameter UPDATE_QU = "UP1_AND_UP0_SAME"; + parameter WRITE_ENABLE = "DISABLED"; + parameter SEL_READ_BIT_ENABLE_CYCLES = "NORMAL"; + parameter BYPASS_WR_LEVEL_SMTH_LATCH = "SMOOTHING_PATH"; + parameter BYPASS_WR_SMTH_LATCH = "SMOOTHING_PATH"; + parameter BYPASS_READ_SMTH_LATCH = "SMOOTHING_PATH"; + output BTDETECT; + output BURSTDETECT; + output DATAVALID; + input DQSI; + output DQSW; + output DQSWRD; + input PAUSE; + input [3:0] RDCLKSEL; + input RDDIR; + input RDLOADN; + output [2:0] RDPNTR; + input [3:0] READ; + output READCOUT; + input READMOVE; + input RST; + input SCLK; + input SELCLK; + output DQSR90; + output DQSW270; + output WRCOUT; + input WRDIR; + input WRLOAD_N; + output WRLVCOUT; + input WRLVDIR; + input WRLVLOAD_N; + input WRLVMOVE; + input WRMOVE; + output [2:0] WRPNTR; + input ECLKIN; + input RSTSMCNT; + input [8:0] DLLCODE; +endmodule + +module EBR_CORE (...); + parameter INIT_DATA = "STATIC"; + parameter DATA_WIDTH_A = "X36"; + parameter DATA_WIDTH_B = "X36"; + parameter REGMODE_A = "BYPASSED"; + parameter REGMODE_B = "BYPASSED"; + parameter GSR = "ENABLED"; + parameter CSDECODE_A = "000"; + parameter CSDECODE_B = "000"; + parameter WID = "0b00000000000"; + parameter RESETMODE_A = "SYNC"; + parameter ASYNC_RESET_RELEASE_A = "SYNC"; + parameter RESETMODE_B = "SYNC"; + parameter ASYNC_RESET_RELEASE_B = "SYNC"; + parameter ECC = "DISABLED"; + parameter EBR_MODE = "DP"; + parameter FULL = "0b11111111100000"; + parameter ALMOST_FULL = "0b00000000000000"; + parameter EMPTY = "0b11111"; + parameter ALMOST_EMPTY = "0b00000000000000"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + input DIA0; + input DIA1; + input DIA2; + input DIA3; + input DIA4; + input DIA5; + input DIA6; + input DIA7; + input DIA8; + input DIA9; + input DIA10; + input DIA11; + input DIA12; + input DIA13; + input DIA14; + input DIA15; + input DIA16; + input DIA17; + input DIB0; + input DIB1; + input DIB2; + input DIB3; + input DIB4; + input DIB5; + input DIB6; + input DIB7; + input DIB8; + input DIB9; + input DIB10; + input DIB11; + input DIB12; + input DIB13; + input DIB14; + input DIB15; + input DIB16; + input DIB17; + input ADA0; + input ADA1; + input ADA2; + input ADA3; + input ADA4; + input ADA5; + input ADA6; + input ADA7; + input ADA8; + input ADA9; + input ADA10; + input ADA11; + input ADA12; + input ADA13; + input ADB0; + input ADB1; + input ADB2; + input ADB3; + input ADB4; + input ADB5; + input ADB6; + input ADB7; + input ADB8; + input ADB9; + input ADB10; + input ADB11; + input ADB12; + input ADB13; + input CLKA; + input CLKB; + input WEA; + input WEB; + input CEA; + input CEB; + input RSTA; + input RSTB; + input CSA0; + input CSA1; + input CSA2; + input CSB0; + input CSB1; + input CSB2; + output FULLF; + output AFULL; + output EMPTYF; + output AEMPTY; + output DOA0; + output DOA1; + output DOA2; + output DOA3; + output DOA4; + output DOA5; + output DOA6; + output DOA7; + output DOA8; + output DOA9; + output DOA10; + output DOA11; + output DOA12; + output DOA13; + output DOA14; + output DOA15; + output DOA16; + output DOA17; + output DOB0; + output DOB1; + output DOB2; + output DOB3; + output DOB4; + output DOB5; + output DOB6; + output DOB7; + output DOB8; + output DOB9; + output DOB10; + output DOB11; + output DOB12; + output DOB13; + output DOB14; + output DOB15; + output DOB16; + output DOB17; + output ONEERR; + output TWOERR; +endmodule + +module EBR (...); + parameter INIT_DATA = "STATIC"; + parameter DATA_WIDTH_A = "X36"; + parameter DATA_WIDTH_B = "X36"; + parameter REGMODE_A = "BYPASSED"; + parameter REGMODE_B = "BYPASSED"; + parameter GSR = "ENABLED"; + parameter CSDECODE_A = "000"; + parameter CSDECODE_B = "000"; + parameter WID = "0b00000000000"; + parameter RESETMODE_A = "SYNC"; + parameter ASYNC_RESET_RELEASE_A = "SYNC"; + parameter RESETMODE_B = "SYNC"; + parameter ASYNC_RESET_RELEASE_B = "SYNC"; + parameter ECC = "DISABLED"; + parameter EBR_MODE = "DP"; + parameter FULL = "0b11111111100000"; + parameter ALMOST_FULL = "0b00000000000000"; + parameter ALMOST_EMPTY = "0b00000000000000"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + input [17:0] DIA; + input [17:0] DIB; + input [13:0] ADA; + input [13:0] ADB; + input CLKA; + input CLKB; + input WEA; + input WEB; + input CEA; + input CEB; + input RSTA; + input RSTB; + input [2:0] CSA; + input [2:0] CSB; + output FULLF; + output AFULL; + output EMPTYF; + output AEMPTY; + output [17:0] DOA; + output [17:0] DOB; + output ONEERR; + output TWOERR; +endmodule + +module ECLKDIV (...); + parameter ECLK_DIV = "DISABLE"; + parameter GSR = "ENABLED"; + output DIVOUT; + input DIVRST; + input ECLKIN; + input SLIP; +endmodule + +module ECLKSYNC (...); + parameter STOP_EN = "DISABLE"; + input ECLKIN; + output ECLKOUT; + input STOP; +endmodule + +module FBMUX (...); + parameter INTFB = "IGNORED"; + parameter SEL_FBK = "DIVA"; + parameter CLKMUX_FB = "CMUX_CLKOP"; + parameter INTFBKDEL_SEL = "DISABLED"; + output ENEXT; + output FBKCK; + input LGYRDYN; + input INTLOCK; + input WKUPSYNC; + input [15:0] FBKCLK; +endmodule + +module FIFO16K_MODE (...); + parameter DATA_WIDTH_A = "X18"; + parameter DATA_WIDTH_B = "X18"; + parameter OUTREG_A = "BYPASSED"; + parameter OUTREG_B = "BYPASSED"; + parameter GSR = "ENABLED"; + parameter RESETMODE_A = "SYNC"; + parameter RESETMODE_B = "SYNC"; + parameter ASYNC_RST_RELEASE_A = "SYNC"; + parameter ASYNC_RST_RELEASE_B = "SYNC"; + parameter ALMOST_FULL = "0b00000000000000"; + parameter ALMOST_EMPTY = "0b00000000000000"; + parameter ECC = "DISABLED"; + parameter FULLBITS = "0b11111111100000"; + input DIA0; + input DIA1; + input DIA2; + input DIA3; + input DIA4; + input DIA5; + input DIA6; + input DIA7; + input DIA8; + input DIA9; + input DIA10; + input DIA11; + input DIA12; + input DIA13; + input DIA14; + input DIA15; + input DIA16; + input DIA17; + input DIB0; + input DIB1; + input DIB2; + input DIB3; + input DIB4; + input DIB5; + input DIB6; + input DIB7; + input DIB8; + input DIB9; + input DIB10; + input DIB11; + input DIB12; + input DIB13; + input DIB14; + input DIB15; + input DIB16; + input DIB17; + input CKA; + input CKB; + input CEA; + input CEB; + input CSA0; + input CSA1; + input CSA2; + input CSB0; + input CSB1; + input CSB2; + input RSTA; + input RSTB; + output DOA0; + output DOA1; + output DOA2; + output DOA3; + output DOA4; + output DOA5; + output DOA6; + output DOA7; + output DOA8; + output DOA9; + output DOA10; + output DOA11; + output DOA12; + output DOA13; + output DOA14; + output DOA15; + output DOA16; + output DOA17; + output DOB0; + output DOB1; + output DOB2; + output DOB3; + output DOB4; + output DOB5; + output DOB6; + output DOB7; + output DOB8; + output DOB9; + output DOB10; + output DOB11; + output DOB12; + output DOB13; + output DOB14; + output DOB15; + output DOB16; + output DOB17; + output ALMOSTFULL; + output FULL; + output ALMOSTEMPTY; + output EMPTY; + output ONEBITERR; + output TWOBITERR; +endmodule + +module FIFO16K (...); + parameter DATA_WIDTH_A = "X18"; + parameter DATA_WIDTH_B = "X18"; + parameter OUTREG_A = "BYPASSED"; + parameter OUTREG_B = "BYPASSED"; + parameter GSR = "ENABLED"; + parameter RESETMODE_A = "SYNC"; + parameter RESETMODE_B = "SYNC"; + parameter ASYNC_RST_RELEASE_A = "SYNC"; + parameter ASYNC_RST_RELEASE_B = "SYNC"; + parameter ALMOST_FULL = "0b00000000000000"; + parameter ALMOST_EMPTY = "0b00000000000000"; + parameter ECC = "DISABLED"; + parameter FULLBITS = "0b11111111100000"; + input [17:0] DIA; + input [17:0] DIB; + input CKA; + input CKB; + input CEA; + input CEB; + input [2:0] CSA; + input [2:0] CSB; + input RSTA; + input RSTB; + output [17:0] DOA; + output [17:0] DOB; + output ALMOSTFULL; + output FULL; + output ALMOSTEMPTY; + output EMPTY; + output ONEBITERR; + output TWOBITERR; +endmodule + +module HSE (...); + parameter MCGLBGSRNDIS = "EN"; + parameter MCHSEDISABLE = "EN"; + parameter MCHSEOTPEN = "DIS"; + input LMMICLK; + input LMMIRESET_N; + input LMMIREQUEST; + input LMMIWRRD_N; + input [17:0] LMMIOFFSET; + input [31:0] LMMIWDATA; + output [31:0] LMMIRDATA; + output LMMIRDATAVALID; + output LMMIREADY; + input ASFCLKI; + output ASFEMPTYO; + output ASFFULLO; + input ASFRDI; + input ASFRESETI; + input ASFWRI; + input CFG_CLK; + input HSE_CLK; + input HSELRSTN; +endmodule + +module I2CFIFO (...); + parameter BRNBASEDELAY = "0b0000"; + parameter CR1CKDIS = "EN"; + parameter CR1FIFOMODE = "REG"; + parameter CR1GCEN = "DIS"; + parameter CR1I2CEN = "DIS"; + parameter CR1SDADELSEL = "NDLY0"; + parameter CR1SLPCLKEN = "DIS"; + parameter CR2CORERSTN = "DIS"; + parameter CR2HARDTIE = "TIE"; + parameter CR2INTCLREN = "DIS"; + parameter CR2MRDCMPLWKUP = "DIS"; + parameter CR2RXFIFOAFWKUP = "DIS"; + parameter CR2SLVADDRWKUP = "DIS"; + parameter GSR = "ENABLED"; + parameter I2CRXFIFOAFVAL = "0b00000"; + parameter I2CSLVADDRA = "0b0000000000"; + parameter I2CTXFIFOAEVAL = "0b0000"; + parameter INTARBLIE = "DIS"; + parameter INTBUSFREEIE = "DIS"; + parameter INTHGCIE = "DIS"; + parameter INTMRDCMPLIE = "DIS"; + parameter INTRNACKIEORRSVD = "DIS"; + parameter INTRSVDORTROEIE = "DIS"; + parameter INTRSVDORTRRDYIE = "DIS"; + parameter INTRXOVERFIEORRSVD = "DIS"; + parameter INTRXUNDERFIE = "DIS"; + parameter INTTXOVERFIE = "DIS"; + parameter INTTXSERRIEORRSVD = "DIS"; + parameter LMMI_EXTRA_ONE = "DIS"; + parameter LMMI_EXTRA_TWO = "DIS"; + parameter NCRALTIOEN = "FABRIC"; + parameter NCRFILTERDIS = "EN"; + parameter NCRSDAINDLYEN = "DIS"; + parameter NCRSDAOUTDLYEN = "DIS"; + parameter NONUSRTESTSOFTTRIMEN = "DIS"; + parameter NONUSRTSTSOFTTRIMVALUE = "0b000"; + parameter REGI2CBR = "0b0000000000"; + parameter TSPTIMERVALUE = "0b10010010111"; + input LMMICLK; + input LMMIRESET_N; + input LMMIREQUEST; + input LMMIWRRD_N; + input [5:0] LMMIOFFSET; + input [7:0] LMMIWDATA; + output [7:0] LMMIRDATA; + output LMMIRDATAVALID; + output LMMIREADY; + input ALTSCLIN; + output ALTSCLOEN; + output ALTSCLOUT; + input ALTSDAIN; + output ALTSDAOEN; + output ALTSDAOUT; + output BUSBUSY; + input FIFORESET; + input I2CLSRRSTN; + output INSLEEP; + output IRQ; + output MRDCMPL; + output RXFIFOAF; + output RXFIFOE; + output RXFIFOF; + input SCLIN; + output SCLOE; + output SCLOEN; + output SCLOUT; + input SDAIN; + output SDAOE; + output SDAOEN; + output SDAOUT; + output SLVADDRMATCH; + output SLVADDRMATCHSCL; + output SRDWR; + output TXFIFOAE; + output TXFIFOE; + output TXFIFOF; +endmodule + +module IDDR71 (...); + parameter GSR = "ENABLED"; + input D; + input SCLK; + input RST; + input ECLK; + input ALIGNWD; + output Q0; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; +endmodule + +module IDDRX1 (...); + parameter GSR = "ENABLED"; + input D; + input SCLK; + input RST; + output Q0; + output Q1; +endmodule + +module IDDRX2DQ (...); + parameter GSR = "ENABLED"; + input D; + input DQSR90; + input ECLK; + input SCLK; + input RST; + input RDPNTR0; + input RDPNTR1; + input RDPNTR2; + input WRPNTR0; + input WRPNTR1; + input WRPNTR2; + output Q0; + output Q1; + output Q2; + output Q3; +endmodule + +module IDDRX2 (...); + parameter GSR = "ENABLED"; + input D; + input SCLK; + input RST; + input ECLK; + input ALIGNWD; + output Q0; + output Q1; + output Q2; + output Q3; +endmodule + +module IDDRX4DQ (...); + parameter GSR = "ENABLED"; + input D; + input DQSR90; + input ECLK; + input SCLK; + input RST; + input RDPNTR0; + input RDPNTR1; + input RDPNTR2; + input WRPNTR0; + input WRPNTR1; + input WRPNTR2; + output Q0; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output Q7; +endmodule + +module IDDRX4 (...); + parameter GSR = "ENABLED"; + input D; + input SCLK; + input RST; + input ECLK; + input ALIGNWD; + output Q0; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output Q7; +endmodule + +module IDDRX5 (...); + parameter GSR = "ENABLED"; + input D; + input SCLK; + input RST; + input ECLK; + input ALIGNWD; + output Q0; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output Q7; + output Q8; + output Q9; +endmodule + +module IFD1P3BX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input PD; + output Q; +endmodule + +module IFD1P3DX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input CD; + output Q; +endmodule + +module IFD1P3IX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input CD; + output Q; +endmodule + +module IFD1P3JX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input PD; + output Q; +endmodule + +(* keep *) +module JTAG (...); + parameter MCER1EXIST = "NEXIST"; + parameter MCER2EXIST = "NEXIST"; + output JCE1; + output JCE2; + output JRSTN; + output JRTI1; + output JRTI2; + output JSHIFT; + output JTDI; + output JUPDATE; + input JTDO1; + input JTDO2; + input SMCLK; + input TCK; + output JTCK; + input TDI; + output TDO_OEN; + output TDO; + input TMS; +endmodule + +module LRAM (...); + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_40 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_41 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_42 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_43 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_44 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_45 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_46 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_47 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_48 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_49 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_50 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_51 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_52 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_53 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_54 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_55 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_56 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_57 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_58 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_59 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_60 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_61 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_62 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_63 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_64 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_65 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_66 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_67 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_68 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_69 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_70 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_71 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_72 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_73 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_74 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_75 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_76 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_77 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_78 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_79 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter CFG_INIT_ID = "0b00000000000"; + parameter DATA_PRESERVE = "DISABLE"; + parameter EBR_SP_EN = "DISABLE"; + parameter ECC_BYTE_SEL = "ECC_EN"; + parameter GSR = "ENABLED"; + parameter OUT_REGMODE_A = "NO_REG"; + parameter OUT_REGMODE_B = "NO_REG"; + parameter RESETMODE = "SYNC"; + parameter RST_AB_EN = "RESET_AB_DISABLE"; + parameter SP_EN = "DISABLE"; + parameter UNALIGNED_READ = "DISABLE"; + input [13:0] ADA; + input [13:0] ADB; + input [3:0] BENA_N; + input [3:0] BENB_N; + input CEA; + input CEB; + input CLK; + input CSA; + input CSB; + input [31:0] DIA; + input [31:0] DIB; + output [31:0] DOA; + output [31:0] DOB; + input DPS; + output [1:0] ERRDECA; + output [1:0] ERRDECB; + input OCEA; + input OCEB; + output OEA; + output OEB; + input RSTA; + input RSTB; + input WEA; + input WEB; + output ERRDET; + output LRAMREADY; +endmodule + +module M18X36 (...); + parameter SFTEN = "DISABLED"; + parameter MULT18X36 = "ENABLED"; + parameter MULT36 = "DISABLED"; + parameter MULT36X36H = "USED_AS_LOWER_BIT_GENERATION"; + parameter ROUNDHALFUP = "DISABLED"; + parameter ROUNDRTZI = "ROUND_TO_ZERO"; + parameter ROUNDBIT = "ROUND_TO_BIT0"; + input [3:0] SFTCTRL; + input [37:0] PH36; + input [37:0] PL36; + input SGNED18H; + input SGNED18L; + output [72:0] P72; + input ROUNDEN; +endmodule + +module MULT18 (...); + parameter SFTEN = "DISABLED"; + parameter MULT18X18 = "ENABLED"; + parameter ROUNDHALFUP = "DISABLED"; + parameter ROUNDRTZI = "ROUND_TO_ZERO"; + parameter ROUNDBIT = "ROUND_TO_BIT0"; + input [3:0] SFTCTRL; + input ARHSIGN; + input BRHSIGN; + input [8:0] ARH; + input [8:0] BRH; + input [8:0] ARL; + input [8:0] BRL; + input [19:0] PL18; + input [19:0] PH18; + output SIGNED18; + output [37:0] P36; + input ROUNDEN; +endmodule + +module MULT36 (...); + parameter MULT36X36 = "ENABLED"; + input [72:0] PH72; + input [72:0] PL72; + output [71:0] PML72; + output [71:0] PMH72; +endmodule + +module MULT9 (...); + parameter SIGNEDSTATIC_EN = "DISABLED"; + parameter ASIGNED_OPERAND_EN = "DISABLED"; + parameter BYPASS_MULT9 = "USED"; + parameter REGBYPSB = "REGISTER"; + parameter REGBYPSA1 = "REGISTER"; + parameter REGBYPSA2 = "REGISTER"; + parameter SHIFTA = "DISABLED"; + parameter SR_18BITSHIFT_EN = "DISABLED"; + parameter GSR = "ENABLED"; + parameter RESET = "SYNC"; + input [8:0] A; + input ASIGNED; + input [8:0] BR; + input [8:0] AS1; + input [8:0] AS2; + input ASSIGNED1; + input ASSIGNED2; + input BRSIGNED; + input CLK; + input CEA; + input RSTA; + output [8:0] AO; + output [8:0] BO; + output AOSIGNED; + output BOSIGNED; + output [8:0] AR; + output ARSIGNED; + output [19:0] P18; + input CEP; + input RSTP; +endmodule + +module MULTADDSUB18X18WIDE (...); + parameter REGINPUTAB0 = "REGISTER"; + parameter REGINPUTAB1 = "REGISTER"; + parameter REGINPUTC = "REGISTER"; + parameter REGADDSUB = "REGISTER"; + parameter REGLOADC = "REGISTER"; + parameter REGLOADC2 = "REGISTER"; + parameter REGPIPELINE = "REGISTER"; + parameter REGOUTPUT = "REGISTER"; + parameter GSR = "ENABLED"; + parameter RESETMODE = "SYNC"; + input [17:0] A0; + input [17:0] B0; + input [17:0] A1; + input [17:0] B1; + input [53:0] C; + input CLK; + input CEA0; + input CEA1; + input RSTA0; + input RSTA1; + input CEB0; + input CEB1; + input RSTB0; + input RSTB1; + input CEC; + input RSTC; + input RSTCTRL; + input CECTRL; + input SIGNED; + input RSTPIPE; + input CEPIPE; + output [53:0] Z; + input RSTOUT; + input CEOUT; + input LOADC; + input [1:0] ADDSUB; +endmodule + +module MULTADDSUB9X9WIDE (...); + parameter REGINPUTAB0 = "REGISTER"; + parameter REGINPUTAB1 = "REGISTER"; + parameter REGINPUTAB2 = "REGISTER"; + parameter REGINPUTAB3 = "REGISTER"; + parameter REGINPUTC = "REGISTER"; + parameter REGADDSUB = "REGISTER"; + parameter REGLOADC = "REGISTER"; + parameter REGLOADC2 = "REGISTER"; + parameter REGPIPELINE = "REGISTER"; + parameter REGOUTPUT = "REGISTER"; + parameter GSR = "ENABLED"; + parameter RESETMODE = "SYNC"; + input [8:0] A0; + input [8:0] B0; + input [8:0] A1; + input [8:0] B1; + input [8:0] A2; + input [8:0] B2; + input [8:0] A3; + input [8:0] B3; + input [53:0] C; + input CLK; + input CEA0A1; + input CEA2A3; + input RSTA0A1; + input RSTA2A3; + input CEB0B1; + input CEB2B3; + input RSTB0B1; + input RSTB2B3; + input CEC; + input RSTC; + input RSTCTRL; + input CECTRL; + input SIGNED; + input RSTPIPE; + input CEPIPE; + input RSTOUT; + input CEOUT; + input LOADC; + input [3:0] ADDSUB; + output [53:0] Z; +endmodule + +(* keep *) +module MULTIBOOT (...); + parameter MSPIADDR = "0b00000000000000000000000000000000"; + parameter SOURCESEL = "DIS"; + input AUTOREBOOT; + input [31:0] MSPIMADDR; +endmodule + +module ODDR71 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input SCLK; + input RST; + input ECLK; + output Q; +endmodule + +module ODDRX1 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input SCLK; + input RST; + output Q; +endmodule + +module ODDRX2DQS (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input DQSW; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module ODDRX2DQ (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input DQSW270; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module ODDRX2 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input SCLK; + input RST; + input ECLK; + output Q; +endmodule + +module ODDRX4DQS (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input D7; + input DQSW; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module ODDRX4DQ (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input D7; + input DQSW270; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module ODDRX4 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input D7; + input SCLK; + input RST; + input ECLK; + output Q; +endmodule + +module ODDRX5 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input D7; + input D8; + input D9; + input SCLK; + input RST; + input ECLK; + output Q; +endmodule + +module OFD1P3BX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input PD; + output Q; +endmodule + +module OFD1P3DX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input CD; + output Q; +endmodule + +module OFD1P3IX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input CD; + output Q; +endmodule + +module OFD1P3JX (...); + parameter GSR = "ENABLED"; + input D; + input SP; + input CK; + input PD; + output Q; +endmodule + +module OSHX2 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module OSHX4 (...); + parameter GSR = "ENABLED"; + input D0; + input D1; + input D2; + input D3; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module PCIE (...); + parameter ENABLE_USER_CFG = "DISABLED"; + parameter PWDN_N = "DISABLED"; + parameter GSR = "ENABLED"; + parameter IDDQ_PCS = "DISABLED"; + parameter PHY_MODE = "0b0000"; + parameter ALT_CLK_SEL_VCC = "PAD"; + parameter L0S_ADJ = "0b00000110000000"; + parameter L0S_EXIT_LATENCY = "MORE_4_US"; + parameter L1_EXIT_LATENCY = "MORE_64_US"; + parameter CALIB_3DB = "ENABLED"; + parameter DB_UPSTREAM = "6DB"; + parameter ERR_REC_ENTRY_SEL = "RCVRY_AFTER"; + parameter A_CHNGD_MAX = "0b100"; + parameter A0_FORCE = "DISABLED"; + parameter A0_FREEZE = "DISABLED"; + parameter A0_INIT = "0b000000"; + parameter A0DIR_VAL = "DISABLED"; + parameter A1_FORCE = "DISABLED"; + parameter A1_FREEZE = "DISABLED"; + parameter A1_INIT = "0b000000"; + parameter A1DIR_VAL = "DISABLED"; + parameter A2_FORCE = "DISABLED"; + parameter A2_FREEZE = "DISABLED"; + parameter A2_INIT = "0b000000"; + parameter A2GAIN_CALIB = "0b100110"; + parameter ACJTAG_REG = "0b00"; + parameter ADDR_LIMIT_PRE_MTHD_CTRL = "0b0100"; + parameter ADDR_LIMIT_TABLE_MTHD_CTRL = "0b00101"; + parameter ADIR_OVR = "DISABLED"; + parameter ADV_CH_CD_SEL = "IMPLEMENT_CH"; + parameter ADV_TARGET_LINK_SPEED_USPORT_A = "DISABLED"; + parameter ADV_TARGET_LINK_SPEED_USPORT_B = "DISABLED"; + parameter ADV_TARGET_LINK_SPEED_USPORT_C = "DISABLED"; + parameter ADV_TARGET_LINK_SPEED_USPORT_D = "DISABLED"; + parameter ADVANCE = "DISABLED"; + parameter ALERT_ENABLE = "0b000"; + parameter ALMOST_EMPTY_10B = "0b001110"; + parameter MID_VALUE_10B = "0b011110"; + parameter ALMOST_EMPTY_20B = "0b001111"; + parameter ALMOST_EMPTY_GEN3 = "0b001100"; + parameter ALMOST_FULL_10B = "0b110000"; + parameter ALMOST_FULL_20B = "0b011000"; + parameter ALMOST_FULL_GEN3 = "0b010110"; + parameter ARRAY_DA = "0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ARRAY_MT = "0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000010000000000000001001000000000000011000000000000001010000000000000100"; + parameter ARXCDRICP_RATE0 = "0b011"; + parameter ARXCDRICP_RATE1 = "0b011"; + parameter ARXCDRICP_RATE2 = "0b011"; + parameter ARXDMPWRDWN = "DISABLED"; + parameter ARXDPPWRDN = "DISABLED"; + parameter ARXEOM_PWRDN = "POWERED_DOWN"; + parameter ARXICP_RATE0 = "0b011"; + parameter ARXICP_RATE1 = "0b011"; + parameter ARXICP_RATE2 = "0b011"; + parameter ARXOVR_OUT = "DISABLED"; + parameter ARXRSACTAT = "0b0001"; + parameter ARXRSAPTAT = "0b1000"; + parameter ARXRSVCTL = "0b00000000"; + parameter ARXSEL_OUT = "DISABLED"; + parameter ASPM_L1_1_SUPPORTED = "SUPPORTED"; + parameter ASPM_L1_2_SUPPORTED = "SUPPORTED"; + parameter ASPM_SUPPORT = "L0S_AND_L1_SUPPORTED"; + parameter ATTENTION_BUTTON_PRESENT = "NOT_SUPPORTED"; + parameter ATTENTION_INDICATOR_PRESENT = "NOT_SUPPORTED"; + parameter ATXICP_RATE0 = "0b101"; + parameter ATXICP_RATE1 = "0b101"; + parameter AUTO_SHIFT = "ENABLED"; + parameter AUX_CURRENT = "SELF_POWERED"; + parameter AUXCLK1US_MAX = "0b00001001"; + parameter AUXIDL_MAX = "0b00000100"; + parameter BAR_INDEX_CFG0_A = "0b000"; + parameter BAR_INDEX_CFG0_B = "0b000"; + parameter BAR_INDEX_CFG0_C = "0b000"; + parameter BAR_INDEX_CFG0_D = "0b000"; + parameter BAR_INDEX_CFG1_A = "0b001"; + parameter BAR_INDEX_CFG1_B = "0b001"; + parameter BAR_INDEX_CFG1_C = "0b001"; + parameter BAR_INDEX_CFG1_D = "0b001"; + parameter BAR_INDEX_CFG2_A = "0b010"; + parameter BAR_INDEX_CFG2_B = "0b010"; + parameter BAR_INDEX_CFG2_C = "0b010"; + parameter BAR_INDEX_CFG2_D = "0b010"; + parameter BAR_INDEX_CFG3_A = "0b011"; + parameter BAR_INDEX_CFG3_B = "0b011"; + parameter BAR_INDEX_CFG3_C = "0b011"; + parameter BAR_INDEX_CFG3_D = "0b011"; + parameter BAR_INDEX_CFG4_A = "0b100"; + parameter BAR_INDEX_CFG4_B = "0b100"; + parameter BAR_INDEX_CFG4_C = "0b100"; + parameter BAR_INDEX_CFG4_D = "0b100"; + parameter BAR_INDEX_CFG5_A = "0b101"; + parameter BAR_INDEX_CFG5_B = "0b101"; + parameter BAR_INDEX_CFG5_C = "0b101"; + parameter BAR_INDEX_CFG5_D = "0b101"; + parameter BIR_MSIX_PBA_A = "BAR0"; + parameter BIR_MSIX_PBA_B = "BAR0"; + parameter BIR_MSIX_PBA_C = "BAR0"; + parameter BIR_MSIX_PBA_D = "BAR0"; + parameter BIR_MSIX_TABLE_A = "BAR0"; + parameter BIR_MSIX_TABLE_B = "BAR0"; + parameter BIR_MSIX_TABLE_C = "BAR0"; + parameter BIR_MSIX_TABLE_D = "BAR0"; + parameter BYP_AVG = "USED"; + parameter BYPASS = "PERFORM_RECEIVER_DETECTION"; + parameter BYPASS_ADDR_DEC = "NORMAL"; + parameter CALIB_SETTLE_MAX = "0b001"; + parameter CALIB_STABLE_MAX = "0b11000"; + parameter CAPABILITY_VERSION = "0b0010"; + parameter CDR_ERR = "DISABLED"; + parameter CDR_P1 = "CDR_PLL_RESET"; + parameter CDR_PLL_DELTA = "0P4_PERCENT"; + parameter CDR_REFERENCE = "0b00"; + parameter CDRPLL_CMP_MAX = "0b00010100"; + parameter CDRPLL_CNT_MAX = "0b00000100"; + parameter CDRPLL_PRE_RXEQ_COARSE_TIMER = "0b01010000"; + parameter CDRPLL_PRE_RXEQ_FINE_TIMER = "0b10110100"; + parameter CDRPLL_PST_RXEQ_COARSE_TIMER = "0b01000000"; + parameter CDRPLL_PST_RXEQ_FINE_TIMER = "0b01000010"; + parameter CFG_A_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_A_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_A_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_A_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_A_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_A_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_B_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_B_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_B_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_B_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_B_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_B_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_C_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_C_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_C_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_C_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_C_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_C_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_D_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_D_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_D_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_D_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_D_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_D_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_EXP_ROM_A = "0b00000000000000000000000000000000"; + parameter CFG_EXP_ROM_B = "0b00000000000000000000000000000000"; + parameter CFG_EXP_ROM_C = "0b00000000000000000000000000000000"; + parameter CFG_EXP_ROM_D = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_A = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_B = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_C = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_D = "0b00000000000000000000000000000000"; + parameter CLASS_CODE_ID3A = "0b000100011000000000000000"; + parameter CLASS_CODE_ID3B = "0b000100011000000000000000"; + parameter CLASS_CODE_ID3C = "0b000100011000000000000000"; + parameter CLASS_CODE_ID3D = "0b000100011000000000000000"; + parameter CM_RESTORE_TIME = "0b00000000"; + parameter CNT250NS_MAX = "0b001111100"; + parameter COARSE_GAIN = "DISABLED"; + parameter COEF_EN_LPBK_MASTER = "OTHERWISE"; + parameter COEF_EN_LPBK_SLAVE = "OTHERWISE"; + parameter COEF_ENABLE = "DETERMINE_LOCAL_PHY"; + parameter COEF_EQTX_FORCE = "0b000000000000000000"; + parameter COEF_LPBK_MASTER = "0b000000000000000000"; + parameter COEF_LPBK_SLAVE = "0b000000000000000000"; + parameter COEF0_POST = "0b000101"; + parameter COEF0_POST_CURSOR = "0b000000"; + parameter COEF0_PRE = "0b000000"; + parameter COEF0_PRE_CURSOR = "0b000000"; + parameter COEF1_POST = "0b000011"; + parameter COEF1_POST_CURSOR = "0b000000"; + parameter COEF1_PRE = "0b000000"; + parameter COEF1_PRE_CURSOR = "0b000000"; + parameter COEF10_POST = "0b000111"; + parameter COEF10_PRE = "0b000000"; + parameter COEF2_POST = "0b000100"; + parameter COEF2_POST_CURSOR = "0b000000"; + parameter COEF2_PRE = "0b000000"; + parameter COEF2_PRE_CURSOR = "0b000000"; + parameter COEF3_POST = "0b000010"; + parameter COEF3_POST_CURSOR = "0b000000"; + parameter COEF3_PRE = "0b000000"; + parameter COEF3_PRE_CURSOR = "0b000000"; + parameter COEF4_POST = "0b000000"; + parameter COEF4_PRE = "0b000000"; + parameter COEF5_POST = "0b000000"; + parameter COEF5_PRE = "0b000001"; + parameter COEF6_POST = "0b000000"; + parameter COEF6_PRE = "0b000010"; + parameter COEF7_POST = "0b000100"; + parameter COEF7_PRE = "0b000011"; + parameter COEF8_POST = "0b000011"; + parameter COEF8_PRE = "0b000010"; + parameter COEF9_POST = "0b000000"; + parameter COEF9_PRE = "0b000011"; + parameter COMP_128_SUPPORTED = "ENABLED"; + parameter COMP_32_SUPPORTED = "ENABLED"; + parameter COMP_64_SUPPORTED = "ENABLED"; + parameter COMPLETE = "DISABLED"; + parameter CONV_METHOD = "COMPUTE_PCIE_SPEC"; + parameter CORE_BYPASS = "NORMAL"; + parameter CORE_EN = "ENABLED"; + parameter COUNT_ACK_TO_NAK = "0b00000000"; + parameter CPL_TIMEOUT_DISABLE_SUPPORTED = "SUPPORTED"; + parameter CPL_TIMEOUT_RANGES_SUPPORTED = "NOT_SUPPORTED"; + parameter CRS_ENABLE = "DISABLED"; + parameter CSTAT_DATA_SCALE = "UNKNOWN_SCALE"; + parameter CSTAT_DATA_SELECT = "D0_POWER_CONSUMED"; + parameter CTLE_SETTLE = "0b100"; + parameter CTLEBIAS_1 = "0b1000"; + parameter ATXICP_RATE2 = "0b100"; + parameter CTLEBYPASS = "DISABLED"; + parameter CUR_FOM = "NUMBER_OF_CLOCK"; + parameter CUR_FOM_AVG = "0b101"; + parameter CUST_AUTO = "DISABLED"; + parameter CUST_CHK = "SET"; + parameter CUST_SEL = "DISABLED"; + parameter CUST_SKIP = "DISABLED"; + parameter CUST_TYP = "0b000"; + parameter CUSTOM_PATTERN = "0b00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter D1_SUPPORT = "SUPPORTED"; + parameter D2_SUPPORT = "SUPPORTED"; + parameter DATA_INJECT = "0b00000000000000000000000000000000"; + parameter DATA_PM = "0b00000000"; + parameter DEEMPH_5G_3_5DB_6DB_N = "6DB"; + parameter DEEMPH_5G_ENABLE = "DISABLED"; + parameter DEEMPH_LPBK_MASTER = "6P0DB"; + parameter DEEMPH_LPBK_SLAVE = "6P0DB"; + parameter DEVICE_ID_ID1A = "0b1110000000000100"; + parameter DEVICE_ID_ID1B = "0b1110000000000100"; + parameter DEVICE_ID_ID1C = "0b1110000000000100"; + parameter DEVICE_ID_ID1D = "0b1110000000000100"; + parameter DEVICE_PORT_TYPE = "PCIE_ENDPOINT"; + parameter DFE_BIAS = "0b0001"; + parameter DFE_PWDN = "DISABLED"; + parameter DIR_PRE_GAIN = "0b00"; + parameter DIR_PST_GAIN = "0b01"; + parameter DIS_ARI_CAP = "ENABLED"; + parameter DIS_CSR_RST = "DISABLED"; + parameter DIS_INTERRUPT = "ENABLED"; + parameter DIS_INTERRUPT_B = "ENABLED"; + parameter DIS_INTERRUPT_C = "ENABLED"; + parameter DIS_INTERRUPT_D = "ENABLED"; + parameter DIS_MSI_CAP = "ENABLED"; + parameter DIS_MSI_CAP_B = "ENABLED"; + parameter DIS_MSI_CAP_C = "ENABLED"; + parameter DIS_MSI_CAP_D = "ENABLED"; + parameter DIS_MSIX_CAP = "ENABLED"; + parameter DIS_MSIX_CAP_B = "ENABLED"; + parameter DIS_MSIX_CAP_C = "ENABLED"; + parameter DIS_MSIX_CAP_D = "ENABLED"; + parameter DISABLE_FLR_CAPABILITY = "ENABLED"; + parameter DLLP_CRC_ERR_ENABLE = "DISABLED"; + parameter DLLP_CRC_ERR_RATE = "0b000000000000"; + parameter DLLP_INJECT_ENABLE = "DISABLED"; + parameter DOUBLE_TX_DATA_VALID = "ONE_CLK_EVERY_64_CLKS"; + parameter DOWNSTREAM_EQ_SKIP_PHASE_2_3 = "NORMAL_OPERATION"; + parameter DS_DRIVE_CLKREQ = "ENABLED"; + parameter DS_PORT_RX_PRESET_HINT = "0b001"; + parameter DS_PORT_TX_PRESET = "0b0011"; + parameter DS_US_N_PORTTYPE = "UPSTREAM"; + parameter DSI = "NO_DSI_NECESSARY"; + parameter DSP_DIR = "ANALYSIS_OF_DATA_BY_DSP"; + parameter DSPDIR_PRESGN = "0b11110000"; + parameter DSPDIR_PREVAL = "0b00011000"; + parameter DSPDIR_PSTSGN0 = "0b11111111"; + parameter DSPDIR_PSTSGN1 = "0b00000000"; + parameter DSPDIR_PSTVAL0 = "0b00000010"; + parameter DSPDIR_PSTVAL1 = "0b01000000"; + parameter EARLY_RX_EVAL = "RX_SIGNAL_AFTER_TS1"; + parameter ECRC_GEN_CHK_CAPABLE = "SUPPORTED"; + parameter EFF_LPBK = "PASSED"; + parameter EI4 = "EI_IV"; + parameter EM_INTERLOCK_PRESENT = "NOT_SUPPORTED"; + parameter EN = "DISABLED"; + parameter EN_ACK_TO_DIV = "ACK_SPEC"; + parameter EN_ACK_TO_NAK = "DO_NOTHING"; + parameter EN_ACS_VIOLATION = "DISABLED"; + parameter EN_ASPM_L0S = "ENABLED"; + parameter EN_ASPM_L1 = "ENABLED"; + parameter EN_ATOMIC_OP_CAP = "ENABLED"; + parameter EN_ATOMICOP_EGRESS_BLOCKED = "DISABLED"; + parameter EN_ATS_CAP = "ENABLED"; + parameter EN_BDGT_CAP = "DISABLED"; + parameter EN_CAP = "ENABLED"; + parameter EN_CAP_B = "ENABLED"; + parameter EN_CAP_C = "ENABLED"; + parameter EN_CAP_D = "ENABLED"; + parameter EN_COMPLETER_ABORT = "DISABLED"; + parameter EN_COMPLETION_TIMEOUT = "ENABLED"; + parameter EN_CORR_INTERNAL_ERROR = "DISABLED"; + parameter EN_DPA_CAP = "DISABLED"; + parameter EN_DRCT_SCR_OFF = "OTHERWISE"; + parameter EN_DRCT_TO_LPBK = "OTHERWISE"; + parameter EN_EQTX_OVERRIDE = "PIPE_LOCAL_FS_AND_PIPE_LOCAL_LF"; + parameter EN_FORCE_SCR_OFF_FAST = "OTHERWISE"; + parameter EN_L1 = "ENABLED"; + parameter EN_L1PMSS_CAP = "ENABLED"; + parameter EN_L2 = "ENABLED"; + parameter EN_LPBK_ERR_RST = "MASTER_LPBK_INCREMENT"; + parameter EN_LTR_CAP = "ENABLED"; + parameter EN_MC_BLOCKED_TLP = "DISABLED"; + parameter EN_NWL_VSEC_CAP = "ENABLED"; + parameter EN_PORT_DIS = "DISABLED"; + parameter EN_PORT_INTLEG = "ENABLED"; + parameter EN_RBAR_CAP_A = "ENABLED"; + parameter EN_RBAR_CAP_B = "ENABLED"; + parameter EN_RBAR_CAP_C = "ENABLED"; + parameter EN_RBAR_CAP_D = "ENABLED"; + parameter EN_RECEIVER_OVERFLOW = "DISABLED"; + parameter EN_SELF_XLINK = "OTHERWISE"; + parameter EN_SURPRISE_DOWN_ERROR = "DISABLED"; + parameter EN_TLP_PREFIX_BLOCKED = "DISABLED"; + parameter EN_UCORR_INTERNAL_ERROR = "DISABLED"; + parameter EN_USER_WRITE = "READ_WRITE_ACCESS"; + parameter END_END_PREFIXES_SUPPORTED = "NOT_SUPPORTED"; + parameter END_ON_HOLD = "YES_EXIT_ON_HOLD"; + parameter ENDCALIB_MAX = "0b10000100"; + parameter ENDPOINT_L0S_ACCEPTABLE_LATENCY = "MAX_64_NS"; + parameter ENDPOINT_L1_ACCEPTABLE_LATENCY = "MAX_1_US"; + parameter ENTRY_TIME_ASPM_L0S = "0b0000000000000000"; + parameter ENTRY_TIME_ASPM_L1 = "0b0000000000000000"; + parameter EOM_TIME = "0b0000000000000000"; + parameter EOM0DIR = "SELECT_DIR_1"; + parameter EOM1DIR = "SELECT_DIR_0"; + parameter EOMCTRL0_LOW = "DISABLED"; + parameter EOMDIVDIS = "DISABLED"; + parameter EOMMODE = "0b00"; + parameter EOMRDSEL = "DISABLED"; + parameter EOMSTART = "DISABLED"; + parameter EOMX = "0b000000"; + parameter EOMX_UPDATE_CNT_VALUE = "0b0011111"; + parameter EOMY = "0b00000000"; + parameter ERRCNT_DEC = "0b00100000"; + parameter ERRCNT_THR = "0b1000"; + parameter ES_PWDN = "DISABLED"; + parameter EVAL_RST = "DISABLED"; + parameter EXCLUDE_L0 = "INCLUDE"; + parameter EXCLUDE_CFG_COMPLETE = "INCLUDE"; + parameter EXCLUDE_CFG_IDLE = "INCLUDE"; + parameter EXCLUDE_LOOPBACK_MASTER = "INCLUDE"; + parameter EXCLUDE_REC_IDLE = "INCLUDE"; + parameter EXCLUDE_REC_RCVR_CFG = "INCLUDE"; + parameter EXIT_DIRECT_TO_DETECT = "DO_NOT_EXIT_TO_DETECT"; + parameter EXT_CONTROL = "DISABLED"; + parameter EXTENDED_TAG_FIELD_EN_DEFAULT = "EIGHT_BIT"; + parameter EXTENDED_TAG_FIELD_SUPPORTED = "EIGHT_BIT"; + parameter F_ARXCTLEDIR = "IGNORED"; + parameter F_ARXCTLENULL = "0b0000"; + parameter F_ARXDMDIR = "DISABLED"; + parameter F_ARXDMNULL = "0b00000"; + parameter F_ARXEOMDIR = "IGNORED"; + parameter F_ARXEOMNULL = "0b00000"; + parameter F_ARXESDIR = "IGNORED"; + parameter F_ARXESNULL = "0b00000"; + parameter F_ARXTDIR = "IGNORED"; + parameter F_ARXTNULL = "0b00000"; + parameter F_ASCHCAL = "IGNORED"; + parameter F_ASCHDIR = "IGNORED"; + parameter F_ASCHNULL = "0b0000"; + parameter FAIL_LIMIT_ERR = "RXEQ_NOT_FAIL"; + parameter FAST = "L0"; + parameter FC_UPDATE_TIMER_DISABLE = "ENABLED"; + parameter FC_UPDATE_TIMER_DIV = "PCIE_REC_VALUES"; + parameter FILTER = "0b1001"; + parameter FINE_GAIN = "DISABLED"; + parameter FOM_COMPARE = "0b00000000"; + parameter FOM_HIRES = "DISABLED"; + parameter FOM_ITERCNT = "0b101"; + parameter FOM_THR = "0b0100"; + parameter FORCE_ATXDRA = "0b000000000000000000000"; + parameter FORCE_ATXDRP = "0b000000000000000000000"; + parameter FORCE_ATXDRR = "0b000000000000000000000"; + parameter FORCE_ATXDRT = "0b000000000000000000000"; + parameter FORCE_DIR_RSLT = "0b000000"; + parameter FORCE_FOM_RSLT = "0b00000000"; + parameter FORCE_IDLE = "DISABLED"; + parameter FORCE_RX_DETECT = "DISABLED"; + parameter FORCE_SIGNAL = "DISABLED"; + parameter FREQ_LOCK = "DISABLED"; + parameter FS = "0b110000"; + parameter GAIN_TIMER1 = "0b0101"; + parameter GEN12_ENA_POST_A0 = "DISABLED"; + parameter GEN12_ENA_POST_A1A2 = "DISABLED"; + parameter GEN12_ENA_PREA0 = "DISABLED"; + parameter GEN3_ENA_POST_A0 = "ENABLED"; + parameter GEN3_ENA_POST_A1A2 = "ENABLED"; + parameter GEN3_ENA_PREA0 = "ENABLED"; + parameter GLOBAL_INVAL_SUPPORT = "ENABLED"; + parameter HINT = "0b000"; + parameter HINT0_3DB = "ENABLED"; + parameter HINT0_A0GAIN = "0b111"; + parameter HINT0_A2GAIN = "0b111"; + parameter HINT1_3DB = "ENABLED"; + parameter HINT1_A0GAIN = "0b011"; + parameter HINT1_A2GAIN = "0b101"; + parameter HINT2_3DB = "ENABLED"; + parameter HINT2_A0GAIN = "0b011"; + parameter HINT2_A2GAIN = "0b111"; + parameter HINT3_3DB = "ENABLED"; + parameter HINT3_A0GAIN = "0b000"; + parameter HINT3_A2GAIN = "0b111"; + parameter HINT4_3DB = "DISABLED"; + parameter HINT4_A0GAIN = "0b111"; + parameter HINT4_A2GAIN = "0b111"; + parameter HINT5_3DB = "DISABLED"; + parameter HINT5_A0GAIN = "0b011"; + parameter HINT5_A2GAIN = "0b101"; + parameter HINT6_3DB = "DISABLED"; + parameter HINT6_A0GAIN = "0b011"; + parameter HINT6_A2GAIN = "0b111"; + parameter HINT7_3DB = "DISABLED"; + parameter HINT7_A0GAIN = "0b000"; + parameter HINT7_A2GAIN = "0b111"; + parameter HINT7_OVR = "DISABLED"; + parameter HLD_RST = "WRITE_1"; + parameter HOT_PLUG_CAPABLE = "NOT_SUPPORTED"; + parameter HOT_PLUG_SURPRISE = "NOT_POSSIBLE"; + parameter ID_DS_PORT = "0b0000000000000000"; + parameter ID_NWL_VSEC_CAP = "0b0000000000000001"; + parameter IGNORE_ECRC = "DISABLED"; + parameter IGNORE_POISON = "ENABLED"; + parameter INDICATOR = "0b00000000000000000000000000000000"; + parameter INHIBIT = "PERFORM_RECEIVER_DETECTION"; + parameter INJECT_DATA_ERROR_0 = "DISABLED"; + parameter INJECT_DATA_ERROR_1 = "DISABLED"; + parameter INJECT_DATA_ERROR_2 = "DISABLED"; + parameter INJECT_DATA_ERROR_3 = "DISABLED"; + parameter INJECT_DATA_ERROR_EN = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_0 = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_1 = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_2 = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_3 = "DISABLED"; + parameter INJECT_RX_1BIT_DATA_ERR = "DISABLED"; + parameter INJECT_RX_2BIT_DATA_ERR = "DISABLED"; + parameter INJECT_RX_SKP_ERR = "DISABLED"; + parameter INJECT_RX_VALID_ERR = "DISABLED"; + parameter INT_CLR = "DISABLED"; + parameter INT_EN = "DISABLED"; + parameter INTERRUPT_MESSAGE_NUMBER = "0b00000"; + parameter INVAL_Q_DEPTH = "0b00000"; + parameter ITERATION_MAX = "0b000000"; + parameter L1_ENTER_PLL_RESET_TIME = "0b100"; + parameter L1_EXIT_PLL_LOCK_TIME = "0b01110"; + parameter L1PM_SUPPORTED = "SUPPORTED"; + parameter L2_D3HOT_ENABLE = "DISABLED"; + parameter LANE_SELECT = "0b0000"; + parameter LF = "0b001000"; + parameter LF_PHY = "0b001010"; + parameter LINK_LANE = "ENABLED"; + parameter LPBK_EN = "DISABLED"; + parameter LW_START_UPDN_ACK_EN = "DISABLED"; + parameter LW_START_UPDN_COUNT = "0b000011111010"; + parameter LW_START_UPDN_EIE_EN = "DISABLED"; + parameter LW_START_UPDN_EN_DIR_DS = "DO_NOT_ASSERT"; + parameter LW_START_UPDN_END_DELAY = "0b1001"; + parameter LW_START_UPDN_RATE_EN_16G = "DISABLED"; + parameter LW_START_UPDN_RATE_EN_2P5G = "ENABLED"; + parameter LW_START_UPDN_RATE_EN_5G = "ENABLED"; + parameter LW_START_UPDN_RATE_EN_8G = "ENABLED"; + parameter LW_START_UPDN_START_DELAY = "0b1000"; + parameter LW_START_UPDN_TIMER_EN = "DISABLED"; + parameter MARGIN_ENABLE = "PCIE_SPEC"; + parameter MARGIN_VALUE = "0b000"; + parameter MASK_0 = "SKIP_RCVR_DETECTION"; + parameter MASK_1 = "SKIP_RCVR_DETECTION"; + parameter MASK_2 = "SKIP_RCVR_DETECTION"; + parameter MASK_3 = "SKIP_RCVR_DETECTION"; + parameter MAX_LINK_WIDTH = "1_LANE"; + parameter MAX_SPEED = "8G"; + parameter MAX_VAR = "0b00100"; + parameter MERGE_LMMI_RDATA = "DISABLED"; + parameter METHOD_FMERIT_CTRL = "STEP_PCIE_TX_PRESETS"; + parameter METHOD_TX_CRED_CLEANUP = "HEADER"; + parameter MGMT_INTLEG = "0b0000"; + parameter MGMT_LTSSM_DIS = "DISABLED"; + parameter MID_VALUE_20B = "0b010100"; + parameter MID_VALUE_GEN3 = "0b001110"; + parameter MIN_SPEED = "2P5G"; + parameter MIN_TIME = "0_MS"; + parameter MIN_TIME_CFG = "4US"; + parameter MIX_DIR = "DISABLED"; + parameter MODE_BFF = "RESTART"; + parameter MRL_SENSOR_PRESENT = "NOT_SUPPORTED"; + parameter MULT_ENABLE = "RECOMMENDED_VALUES"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_A = "EIGHT"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_B = "EIGHT"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_C = "EIGHT"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_D = "EIGHT"; + parameter NFTS = "0b11111111"; + parameter NO_COMMAND_COMPLETED_SUPPORT = "SW_NOTIF_PROVIDED"; + parameter NO_FCMP = "DISABLED"; + parameter NO_REMOTE_CHANGE = "DISABLED"; + parameter NO_TX_IDLE_DELAY = "DATA_VALID_GAP"; + parameter NUM_LANES = "1_LANE"; + parameter NUMBER_DSLINK = "0b00000"; + parameter NUMHI_A = "0b00000000000000000000000000000000"; + parameter NUMHI_B = "0b00000000000000000000000000000000"; + parameter NUMHI_C = "0b00000000000000000000000000000000"; + parameter NUMHI_D = "0b00000000000000000000000000000000"; + parameter NUMHOLD = "SINGLE_HOLD_RESPONSE"; + parameter NUMLO_A = "0b00000000000000000000000000000000"; + parameter NUMLO_B = "0b00000000000000000000000000000000"; + parameter NUMLO_C = "0b00000000000000000000000000000000"; + parameter NUMLO_D = "0b00000000000000000000000000000000"; + parameter OBFF_SUPPORTED = "NOT_SUPPORTED"; + parameter OFFSET_MSIX_PBA_A = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_PBA_B = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_PBA_C = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_PBA_D = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_TABLE_A = "0b00000000000000000110000000000"; + parameter OFFSET_MSIX_TABLE_B = "0b00000000000000000110000000000"; + parameter OFFSET_MSIX_TABLE_C = "0b00000000000000000110000000000"; + parameter OFFSET_MSIX_TABLE_D = "0b00000000000000000110000000000"; + parameter OVER_CTLE = "DISABLED"; + parameter OVER_RX = "DISABLED"; + parameter OVER_RXDM = "DISABLED"; + parameter OVER_RXDP = "DISABLED"; + parameter OVER_RXES = "DISABLED"; + parameter OVER_RXT = "DISABLED"; + parameter OVER_SCH = "DISABLED"; + parameter OVER_TX = "DISABLED"; + parameter OVERRIDE = "DISABLED"; + parameter OVR_CDR = "DISABLED"; + parameter OVR_DIR = "DISABLED"; + parameter OVR_FOM = "DISABLED"; + parameter OVR_GAIN3DB = "ENABLED"; + parameter OVR_HINT3DB = "ENABLED"; + parameter P_CLK_PERIOD = "0b0000111110100000"; + parameter PAR_LPBK = "DISABLED"; + parameter PAS = "10X"; + parameter PATTERN_0 = "UNSCRAMBLED"; + parameter PATTERN_1 = "UNSCRAMBLED"; + parameter PATTERN_2 = "UNSCRAMBLED"; + parameter PCIPM_L1_1_SUPPORTED = "SUPPORTED"; + parameter PCIPM_L1_2_SUPPORTED = "SUPPORTED"; + parameter PERIOD_SRIS_128B130B = "0b000000"; + parameter PERIOD_SRIS_8B10B = "0b00000000"; + parameter PERIOD_SRNS_128B130B = "0b00000000"; + parameter PERIOD_SRNS_8B10B = "0b00000000"; + parameter PHANTOM_FUNCTIONS_SUPPORTED = "NO_FUNCTION_BITS"; + parameter PHYSICAL_SLOT_NUMBER = "0b0000000000001"; + parameter PIN_INTERRUPT_A = "INTA"; + parameter PIN_INTERRUPT_B = "INTA"; + parameter PIN_INTERRUPT_C = "INTA"; + parameter PIN_INTERRUPT_D = "INTA"; + parameter PIPE_TX_SWING = "FULL_SWING"; + parameter PLESIO_LPBK = "DISABLED"; + parameter PM_REDUCE_TIMEOUTS = "DISABLED"; + parameter PMA_DRIVEN_MODE = "PCS_DRIVEN"; + parameter PMCSR_B2_B3_SUPPORT = "DISABLED"; + parameter PMCSR_BUS_P_C_EN = "DISABLED"; + parameter PME_CLOCK = "DISABLED"; + parameter PME_SUPPORT = "0b11111"; + parameter PMFF_ALL = "DISABLED"; + parameter PORT_CM_RESTORE_TIME = "0b00000000"; + parameter PORT_NUMBER = "0b00000000"; + parameter PORT_TPOWER_ON_SCALE = "2_US"; + parameter PORT_TPOWER_ON_VALUE = "0b00000"; + parameter POST = "0b000000"; + parameter POST_A0COEF = "0b001"; + parameter POST_A1COEF = "0b001"; + parameter POST_A2COEF = "0b001"; + parameter POST_CURSOR_LIMIT = "0b100000"; + parameter POST_CURSOR_STEP_SIZE = "0b001000"; + parameter POST_ITERCNT = "0b100"; + parameter POST_STEP = "STEP_SIZE_4"; + parameter POWER_CONTROLLER_PRESENT = "NOT_SUPPORTED"; + parameter POWER_INDICATOR_PRESENT = "NOT_SUPPORTED"; + parameter POWER_REQUIRED = "AUX_POWER_NOT_REQUIRED"; + parameter PRBS_CHK = "DISABLED"; + parameter PRBS_GEN = "DISABLED"; + parameter PRBS_TYP = "PRBS7"; + parameter PRE = "0b000000"; + parameter PRE_A0COEF = "0b101"; + parameter PRE_A1COEF = "0b101"; + parameter PRE_A2COEF = "0b101"; + parameter PRE_CURSOR_LIMIT = "0b010000"; + parameter PRE_CURSOR_STEP_SIZE = "0b000100"; + parameter PRE_FOM = "ENABLED"; + parameter PRE_FOM_AVG = "0b100"; + parameter PRE_ITERCNT = "0b100"; + parameter PRE_RXEQ_TIMER = "0b00010100"; + parameter PRE_STEP = "STEP_SIZE_2"; + parameter PRESET_COUNT_INI = "0b0000"; + parameter PRESET_EN_LPBK_MASTER = "OTHERWISE"; + parameter PRESET_EN_LPBK_SLAVE = "OTHERWISE"; + parameter PRESET_ENABLE = "NORMAL_OP"; + parameter PRESET_EQTX_FORCE = "0b0000"; + parameter PRESET_LPBK_MASTER = "0b0000"; + parameter PRESET_LPBK_SLAVE_0 = "OTHERWISE"; + parameter PRESET_LPBK_SLAVE_1 = "OTHERWISE"; + parameter PRESET_LPBK_SLAVE_2 = "OTHERWISE"; + parameter PRESET_LPBK_SLAVE_3 = "OTHERWISE"; + parameter PRESET_REJECT = "0b00000000000"; + parameter PRESET0_POSTCURSOR = "0b1000"; + parameter PRESET0_PRECURSOR = "0b0000"; + parameter PRESET1_POSTCURSOR = "0b0101"; + parameter PRESET1_PRECURSOR = "0b0000"; + parameter PRESET10_POSTCURSOR = "0b1010"; + parameter PRESET10_PRECURSOR = "0b0000"; + parameter PRESET2_POSTCURSOR = "0b0110"; + parameter PRESET2_PRECURSOR = "0b0000"; + parameter PRESET3_POSTCURSOR = "0b0100"; + parameter PRESET3_PRECURSOR = "0b0000"; + parameter PRESET4_POSTCURSOR = "0b0000"; + parameter PRESET4_PRECURSOR = "0b0000"; + parameter PRESET5_POSTCURSOR = "0b0000"; + parameter PRESET5_PRECURSOR = "0b0011"; + parameter PRESET6_POSTCURSOR = "0b0000"; + parameter PRESET6_PRECURSOR = "0b0100"; + parameter PRESET7_POSTCURSOR = "0b0110"; + parameter PRESET7_PRECURSOR = "0b0011"; + parameter PRESET8_POSTCURSOR = "0b0100"; + parameter PRESET8_PRECURSOR = "0b0100"; + parameter PRESET9_POSTCURSOR = "0b0000"; + parameter PRESET9_PRECURSOR = "0b0101"; + parameter PS_REENTRY_TIME = "0b00000000"; + parameter RATE = "2P5G"; + parameter RATE_ENABLE = "INITIAL_SPEED_CHANGES"; + parameter RCB = "DISABLED"; + parameter REC_SPD_INFER_EQ_PH0123 = "EXCLUDE_TIME_SPENT"; + parameter REC_SPD_INFER_RCVR_CFG = "EXCLUDE_TIME_SPENT"; + parameter REC_SPD_INFER_RCVR_LOCK = "EXCLUDE_TIME_SPENT"; + parameter DIS_FUNC_B = "ENABLED"; + parameter DIS_FUNC_C = "ENABLED"; + parameter DIS_FUNC_D = "ENABLED"; + parameter REDUCE_TIMEOUTS_LTSSMSIM = "DISABLED"; + parameter REDUCE_TIMEOUTS_SIM = "DISABLED"; + parameter REDUCE_TS1 = "DISABLED"; + parameter REENTRY_DISABLE = "ENABLED"; + parameter REENTRY_TIME = "0b00000000000000"; + parameter REQ_FEEDBACK = "0b00000000"; + parameter RESET_EIEOS_INTERVAL_COUNT = "DISABLED"; + parameter REVISION_ID_ID3A = "0b00000100"; + parameter REVISION_ID_ID3B = "0b00000100"; + parameter REVISION_ID_ID3C = "0b00000100"; + parameter REVISION_ID_ID3D = "0b00000100"; + parameter RL1 = "0b0011"; + parameter RL2 = "0b0101"; + parameter RL3 = "0b0011"; + parameter ROUTING_SUPPORTED = "DISABLED"; + parameter RP_COMPLETER_EN = "DISABLED"; + parameter RSTCDR_ERR = "ENABLED"; + parameter RSTCDR_FRQ = "ENABLED"; + parameter RSTCDR_IDL = "DISABLED"; + parameter RX_BYPASS_DECODE_EN = "ENABLED"; + parameter RX_BYPASS_MSG_DEC = "NORMAL_OPERATION"; + parameter RX_CONVERT_UR_TO_CA = "NORMAL_OPERATION"; + parameter RX_D_ALLOC_C = "0b0000000001100000"; + parameter RX_D_ALLOC_N = "0b0000000000000110"; + parameter RX_D_ALLOC_P = "0b0000000001101100"; + parameter RX_DIV_MODE1 = "0b10"; + parameter RX_DIV_MODE0 = "DIV_2"; + parameter RX_DIV_MODE2 = "0b00"; + parameter RX_DL_ACTIVE_DISABLE = "BLOCK_RECEPTION_TLP"; + parameter RX_EARLY_FORWARD_DISABLE = "FWD_RX_DATA_LL"; + parameter RX_ERR_COR = "DISABLED"; + parameter RX_ERR_UCOR = "DISABLED"; + parameter RX_FORCE_RO = "DISABLED"; + parameter RX_H_ALLOC_C = "0b000000100000"; + parameter RX_H_ALLOC_N = "0b000000001000"; + parameter RX_H_ALLOC_P = "0b000000010000"; + parameter RX_HIZ = "IGNORED"; + parameter RX_IMPED_RATIO = "0b10000000"; + parameter RX_INHIBIT_ACK_NAK = "PROCESS_RCVD_ACK"; + parameter RX_INHIBIT_TLP = "PROCESS_RCVD_TLP"; + parameter RX_LCRC_INJECT_EN = "DO_NOT_INJECT_ERROR"; + parameter RX_MALF_INJECT_EN = "DO_NOT_INJECT_ERROR"; + parameter RX_POLINV = "NORMAL"; + parameter RX_PRIORITY = "DISABLED"; + parameter RX_PRIORITY_N_STARVE_THRESH = "0b00010000"; + parameter RX_PRIORITY_P_STARVE_THRESH = "0b00010000"; + parameter RX_PWRDN = "IGNORED"; + parameter RX_TLP_VALID = "DISABLED"; + parameter RXEQ_ALGO = "0b111"; + parameter RXEQ_ENABLE = "0b100"; + parameter RXEQ_EVAL_MAX = "0b11111111"; + parameter RXEQ_MANUAL = "DISABLED"; + parameter RXEQ_STATE = "0b0000"; + parameter RXF_A = "0b0100"; + parameter RXF_B = "0b0100"; + parameter RXF_C = "0b0100"; + parameter RXHF_CLKDN = "ENABLED"; + parameter RXIDLE_MAX = "0b1111"; + parameter RXIDLE_MAX2 = "0b0000010000000000"; + parameter RXIDLE_MSB = "0b11"; + parameter RXM_A = "0b10"; + parameter RXM_B = "0b01"; + parameter RXM_C = "0b00"; + parameter RXN_A = "0b00100"; + parameter RXN_B = "0b01001"; + parameter RXN_C = "0b01111"; + parameter RXOFF_SETTLE_MAX = "0b011"; + parameter RXOFF_STABLE_MAX = "0b10000"; + parameter RXPLLINIT = "DISABLED"; + parameter RXPLLRST = "SET"; + parameter SELECT_DIR_FOM_N = "FME_METHOD"; + parameter SELECTABLE_DEEMPHASIS = "6P0DB"; + parameter SEQ_NUM = "0b000000000000"; + parameter SIGNAL_DETECT_THRESHOLD = "125_MV"; + parameter SIZE_CFG0_A = "0b00000"; + parameter SIZE_CFG0_B = "0b00000"; + parameter SIZE_CFG0_C = "0b00000"; + parameter SIZE_CFG0_D = "0b00000"; + parameter SIZE_CFG1_A = "0b00000"; + parameter SIZE_CFG1_B = "0b00000"; + parameter SIZE_CFG1_C = "0b00000"; + parameter SIZE_CFG1_D = "0b00000"; + parameter SIZE_CFG2_A = "0b00000"; + parameter SIZE_CFG2_B = "0b00000"; + parameter SIZE_CFG2_C = "0b00000"; + parameter SIZE_CFG2_D = "0b00000"; + parameter SIZE_CFG3_A = "0b00000"; + parameter SIZE_CFG3_B = "0b00000"; + parameter SIZE_CFG3_C = "0b00000"; + parameter SIZE_CFG3_D = "0b00000"; + parameter SIZE_CFG4_A = "0b00000"; + parameter SIZE_CFG4_B = "0b00000"; + parameter SIZE_CFG4_C = "0b00000"; + parameter SIZE_CFG4_D = "0b00000"; + parameter SIZE_CFG5_A = "0b00000"; + parameter SIZE_CFG5_B = "0b00000"; + parameter SIZE_CFG5_C = "0b00000"; + parameter SIZE_CFG5_D = "0b00000"; + parameter SKIP_FINAL_COEF_CHECK = "DISABLED"; + parameter SLOT_CLOCK_CONFIGURATION = "REFCLK_BY_SLOT"; + parameter SLOT_IMPLEMENTED = "UNCONNECTED"; + parameter SLOT_POWER_LIMIT_SCALE = "0b00"; + parameter SLOT_POWER_LIMIT_VALUE = "0b00001010"; + parameter SPEED_LPBK_CTRL = "2P5G"; + parameter START_PRESET = "PRESET_VALUE"; + parameter START_REMOTE_ADV = "OTHERWISE"; + parameter STATE_DATA_N = "USE_RX_DATA_OBSERVATION"; + parameter STEP_SELECT = "0b00000"; + parameter STP_OVERRIDE_EN = "DISABLED"; + parameter STP_OVERRIDE_LEN = "0b00000000000"; + parameter STP_OVERRIDE_NEW_LEN = "0b00000000000"; + parameter SUBSTATE_MAX = "0b00000"; + parameter SUBSYSTEM_ID_ID2A = "0b1110000000000100"; + parameter SUBSYSTEM_ID_ID2B = "0b1110000000000100"; + parameter SUBSYSTEM_ID_ID2C = "0b1110000000000100"; + parameter SUBSYSTEM_ID_ID2D = "0b1110000000000100"; + parameter SUBSYSTEM_VENDOR_ID_ID2A = "0b0001100110101010"; + parameter SUBSYSTEM_VENDOR_ID_ID2B = "0b0001100110101010"; + parameter SUBSYSTEM_VENDOR_ID_ID2C = "0b0001100110101010"; + parameter SUBSYSTEM_VENDOR_ID_ID2D = "0b0001100110101010"; + parameter SUPP_SIZE_CFG0_A = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG0_B = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG0_C = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG0_D = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG1_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG1_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG1_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG1_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_D = "0b00000000000000000000"; + parameter SYS_ALLOC = "PWR_BUDGET_CAP_VALUES"; + parameter T0_RX_BYPASS_MSG_DEC = "NORMAL_OPERATION"; + parameter TABLE_SIZE_MSIXCAP_A = "0b00000000111"; + parameter TABLE_SIZE_MSIXCAP_B = "0b00000000111"; + parameter TABLE_SIZE_MSIXCAP_C = "0b00000000111"; + parameter TABLE_SIZE_MSIXCAP_D = "0b00000000111"; + parameter TARGET_LINK_SPEED = "8G"; + parameter TARGET_ONLY = "DISABLED"; + parameter TD1_MEANS_ADD_HAS_N = "ECRC_CONTAINED"; + parameter TIMEOUT_THRESHOLD_PME = "0b000000000000"; + parameter TIMEOUT_THRESHOLD_PME_TO_ACK_DS = "0b00000000"; + parameter TIMER = "0b00000000"; + parameter TLP_LCRC_ERR_ENABLE = "DISABLED"; + parameter TLP_LCRC_ERR_RATE = "0b000"; + parameter TLP_SEQ_ERR_ENABLE = "DISABLED"; + parameter TLUNIT = "1_MS"; + parameter TO_EXTEND = "0b01111111"; + parameter TRNG_A0COEF = "0b101"; + parameter TRNG_A1COEF = "0b101"; + parameter TRNG_A2COEF = "0b101"; + parameter TRNG_FAST = "DISABLED"; + parameter TRNG_ITERCNT = "0b100"; + parameter TRNG_RXEQ_TIMER = "0b00100000"; + parameter TS1_ACK_BLOCK_USE_PRESET = "FORCED_TO_ZERO"; + parameter TS1_ACK_DELAY = "0b00011111"; + parameter TS1_ACK_MASK_USE_PRESET = "IGNORES_USE_PRESET"; + parameter TX_AMP_RATIO_MARGIN0_FULL = "0b10000000"; + parameter TX_AMP_RATIO_MARGIN0_HALF = "0b01010000"; + parameter TX_AMP_RATIO_MARGIN1_FULL = "0b01111000"; + parameter TX_AMP_RATIO_MARGIN1_HALF = "0b01011000"; + parameter TX_AMP_RATIO_MARGIN2_FULL = "0b01101000"; + parameter TX_AMP_RATIO_MARGIN2_HALF = "0b01001000"; + parameter TX_AMP_RATIO_MARGIN3_FULL = "0b01100000"; + parameter TX_AMP_RATIO_MARGIN3_HALF = "0b01000000"; + parameter TX_AMP_RATIO_MARGIN4_FULL = "0b01011000"; + parameter TX_AMP_RATIO_MARGIN4_HALF = "0b00111000"; + parameter TX_AMP_RATIO_MARGIN5_FULL = "0b01010000"; + parameter TX_AMP_RATIO_MARGIN5_HALF = "0b00110000"; + parameter TX_AMP_RATIO_MARGIN6_FULL = "0b01001000"; + parameter TX_AMP_RATIO_MARGIN6_HALF = "0b00101000"; + parameter TX_AMP_RATIO_MARGIN7_FULL = "0b01000000"; + parameter TX_AMP_RATIO_MARGIN7_HALF = "0b00100000"; + parameter TX_BYPASS_DECODE_EN = "ENABLED"; + parameter TX_BYPASS_MSG_DEC = "NORMAL_OPERATION"; + parameter TX_COMP_RECEIVE = "DOES_NOT_ASSERT"; + parameter TX_CONVERT_UR_TO_CA = "NORMAL_OPERATION"; + parameter TX_D_ALLOC_C = "0b0000000001100000"; + parameter TX_D_ALLOC_N = "0b0000000000000110"; + parameter TX_D_ALLOC_P = "0b0000000001101100"; + parameter TX_DIV_MODE0 = "0b10"; + parameter TX_DIV_MODE1 = "0b10"; + parameter TX_DIV_MODE2 = "0b10"; + parameter TX_EQ_EVAL_CNT_SEL = "WAIT_8_CLKS"; + parameter TX_ERR_COR = "DISABLED"; + parameter TX_ERR_UCOR = "DISABLED"; + parameter TX_FORCE_RO = "DISABLED"; + parameter TX_GAP_INJECT_EN = "DO_NOT_INJECT_GAP"; + parameter TX_H_ALLOC_C = "0b000000100000"; + parameter TX_H_ALLOC_N = "0b000000001000"; + parameter TX_H_ALLOC_P = "0b000000010000"; + parameter TX_HIZ = "IGNORED"; + parameter TX_IMPED_RATIO = "0b10000000"; + parameter TX_PAR1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_PAR2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_PAR2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_PAR2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_POLINV = "NORMAL"; + parameter TX_PRE_RATIO = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP0_FULL = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP0_HALF = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP1_FULL = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP1_HALF = "0b00000000"; + parameter TX_PRIORITY = "DISABLED"; + parameter TX_PRIORITY_N_STARVE_THRESH = "0b00010000"; + parameter TX_PRIORITY_P_STARVE_THRESH = "0b00010000"; + parameter TX_PST_RATIO = "0b00010101"; + parameter TX_PST_RATIO_DEEMP0_FULL = "0b00100000"; + parameter TX_PST_RATIO_DEEMP0_HALF = "0b00100000"; + parameter TX_PST_RATIO_DEEMP1_FULL = "0b00010101"; + parameter TX_PST_RATIO_DEEMP1_HALF = "0b00010101"; + parameter TX_QUIESCE = "DISABLED"; + parameter TX_REPLAY_ECC1_HANDLE_DISABLE = "ENABLE_CORRECTION"; + parameter TX_REPLAY_ECC1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_REPLAY_ECC1_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_REPLAY_ECC2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_REPLAY_ECC2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_REPLAY_ECC2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_REQ_EQ = "DISABLED"; + parameter TX_SELECT_RX_FEEDBACK = "REFCLK"; + parameter TX_TLP_VALID = "DISABLED"; + parameter TXF_A = "0b0100"; + parameter TXF_B = "0b0100"; + parameter TXF_C = "0b0100"; + parameter TXHF_CLKDN = "ENABLED"; + parameter TXM_A = "0b10"; + parameter TXM_B = "0b01"; + parameter TXM_C = "0b00"; + parameter TXN_A = "0b00100"; + parameter TXN_B = "0b01001"; + parameter TXN_C = "0b01111"; + parameter TXPLL_INIT = "DISABLED"; + parameter TXPLLRST = "DISABLED"; + parameter TYPE1_TYPE0_N = "ENDPOINT"; + parameter U_CLK_PERIOD = "0b0001111101000000"; + parameter US_PORT_PS_ENTRY_TIME = "0b0000000000000000"; + parameter US_PORT_RX_PRESET_HINT = "0b010"; + parameter US_PORT_TX_PRESET = "0b0100"; + parameter USE_COEF_PRE_MTHD_CTRL = "PRESET_VALUE"; + parameter USE_COEF_UPDN_CTRL = "PRESET_VALUE"; + parameter USER_AUTO_N = "AUTOMATIC_ON_RECEPTION"; + parameter VEC_MASK_CAPABLE_MSICAP_A = "ENABLED"; + parameter VEC_MASK_CAPABLE_MSICAP_B = "ENABLED"; + parameter VEC_MASK_CAPABLE_MSICAP_C = "ENABLED"; + parameter VEC_MASK_CAPABLE_MSICAP_D = "ENABLED"; + parameter VENDOR_ID_ID1A = "0b0001100110101010"; + parameter VENDOR_ID_ID1B = "0b0001100110101010"; + parameter VENDOR_ID_ID1C = "0b0001100110101010"; + parameter VENDOR_ID_ID1D = "0b0001100110101010"; + parameter VENDOR0_UR = "REPORT"; + parameter VERSION_AER_CAP = "VER_0X2"; + parameter VERSION_PM_CAP = "0b011"; + parameter XLCY0 = "0b00000000"; + parameter XLCY1 = "0b00000000"; + parameter RX_ESP_RESP_WAIT = "0b01000000"; + parameter SEL_PCLK_DIV2 = "PCLK_DIV2"; + parameter COMPLIANCE = "ENABLED"; + parameter LOOPBACK = "ENABLED"; + parameter HOT_RESET = "ENABLED"; + parameter DIS_PREVENT = "ENABLED"; + parameter MPS_VIOLATION_RX = "DISABLED"; + parameter MPS_VIOLATION_TX = "DISABLED"; + parameter EN_RX_ALLOC_SEL = "HW"; + parameter EN_TX_ALLOC_SEL = "HW"; + parameter AUX_CLK_PERIOD = "0b1111010000100100"; + parameter EN_PIPE_IF_CTRL = "DISABLED"; + parameter PIPE_PWRDN = "P1"; + parameter TX_CM_DIS = "DEASSERTED"; + parameter RX_EI_DIS = "DEASSERTED"; + parameter PCLKREQ_N = "DEASSERTED"; + parameter STS_PHY_STATUS = "DEASSERTED"; + parameter STS_PIPE_RSTN = "DEASSERTED"; + parameter LEGACY_MODE = "MATCH_TS"; + parameter OVERFLOW = "DISABLED"; + parameter DIR = "RECEIVE"; + parameter SPEED = "8G"; + parameter LANE = "0"; + parameter COEF_ENABLE_8G = "DISABLED"; + parameter PRESET_ENABLE_8G = "DISABLED"; + parameter VALUE_8G_PRE = "0b000000"; + parameter VALUE_8G_POST = "0b000000"; + parameter REQ_EQ_MAX_COUNT = "0b10"; + parameter MESO_LPBK = "DISABLED"; + parameter TX_REPLAY_ECC2_INJECT_M_1_N = "INJECT_1_ERR"; + parameter TX_REPLAY_ECC1_INJECT_M_1_N = "INJECT_1_ERR"; + parameter REDO = "DISABLED"; + parameter RX_PAR_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter RX_PAR_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter RX_ECC2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter RX_ECC2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter RX_ECC2_INJECT_M_1_N = "INJECT_1_ERR"; + parameter RX_ECC2_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter RX_ECC2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter RX_ECC1_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter RX_ECC1_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter RX_ECC1_INJECT_M_1_N = "INJECT_1_ERR"; + parameter RX_ECC1_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter RX_ECC1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter RX_ERR_PAR = "OTHERWISE"; + parameter RX_ERR_ECC2 = "OTHERWISE"; + parameter RX_ERR_ECC1 = "OTHERWISE"; + parameter TX_PAR_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_PAR_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_ECC2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_ECC2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_ECC2_INJECT_M_1_N = "INJECT_1_ERR"; + parameter TX_ECC2_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter TX_ECC2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_ECC1_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_ECC1_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_ECC1_INJECT_M_1_N = "INJECT_1_ERR"; + parameter TX_ECC1_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter TX_ECC1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_ERR_PAR = "OTHERWISE"; + parameter TX_ERR_ECC2 = "OTHERWISE"; + parameter TX_ERR_ECC1 = "OTHERWISE"; + parameter MAX_PAYLOAD_SIZE_SUPPORTED = "256_BYTES"; + parameter ARXCAL_OUT = "DISABLED"; + parameter F_ARXDPDIR = "IGNORED"; + parameter IDLE_INFER_REC_RCVR_CFG = "OTHERWISE"; + parameter IDLE_INFER_LPBK_SLAVE = "OTHERWISE"; + parameter IDLE_INFER_REC_SPEED2_SUCCESS = "OTHERWISE"; + parameter IDLE_INFER_REC_SPEED2_UNSUCCESS = "OTHERWISE"; + parameter IDLE_INFER_L0_TO_REC_RCVR_LOCK = "OTHERWISE"; + parameter SPEED_CHANGE_FAIL = "OTHERWISE"; + parameter DIRECT_TO_DETECT_FAST = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_CH_BOND = "OTHERWISE"; + parameter DIRECT_TO_LPBK_ENTRY = "OTHERWISE"; + parameter DIRECT_SPEED_CHANGE = "OTHERWISE"; + parameter L0_TO_REC_RCVR_LOCK_RX_TS12 = "OTHERWISE"; + parameter L0_TO_REC_RCVR_LOCK_RX_8G_EIE = "OTHERWISE"; + parameter L0_TO_REC_RCVR_LOCK_RX_INFER = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_PHY = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_FRAME = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_REPLAY = "OTHERWISE"; + parameter DIRECT_TO_HOT_RESET = "OTHERWISE"; + parameter DIRECT_TO_DISABLE = "OTHERWISE"; + parameter RX_L0S_DIRECT_TO_RCVRY = "OTHERWISE"; + parameter AUTONOMOUS_WIDTH_CHANGE = "OTHERWISE"; + parameter DIRECTED_RETRAIN_LINK = "OTHERWISE"; + parameter ERR_TX_PIPE_UNDERFLOW = "OTHERWISE"; + parameter TS2_DETECT3 = "OTHERWISE"; + parameter TS2_DETECT2 = "OTHERWISE"; + parameter TS2_DETECT1 = "OTHERWISE"; + parameter TS2_DETECT0 = "OTHERWISE"; + parameter TS1_DETECT3 = "OTHERWISE"; + parameter TS1_DETECT2 = "OTHERWISE"; + parameter TS1_DETECT1 = "OTHERWISE"; + parameter TS1_DETECT0 = "OTHERWISE"; + parameter TS2I_DETECT3 = "OTHERWISE"; + parameter TS2I_DETECT2 = "OTHERWISE"; + parameter TS2I_DETECT1 = "OTHERWISE"; + parameter TS2I_DETECT0 = "OTHERWISE"; + parameter TS1I_DETECT3 = "OTHERWISE"; + parameter TS1I_DETECT2 = "OTHERWISE"; + parameter TS1I_DETECT1 = "OTHERWISE"; + parameter TS1I_DETECT0 = "OTHERWISE"; + parameter FTS_DETECT3 = "OTHERWISE"; + parameter FTS_DETECT2 = "OTHERWISE"; + parameter FTS_DETECT1 = "OTHERWISE"; + parameter FTS_DETECT0 = "OTHERWISE"; + parameter SKP_DETECT3 = "OTHERWISE"; + parameter SKP_DETECT2 = "OTHERWISE"; + parameter SKP_DETECT1 = "OTHERWISE"; + parameter SKP_DETECT0 = "OTHERWISE"; + parameter EIE_DETECT3 = "OTHERWISE"; + parameter EIE_DETECT2 = "OTHERWISE"; + parameter EIE_DETECT1 = "OTHERWISE"; + parameter EIE_DETECT0 = "OTHERWISE"; + parameter EIOS_DETECT3 = "OTHERWISE"; + parameter EIOS_DETECT2 = "OTHERWISE"; + parameter EIOS_DETECT1 = "OTHERWISE"; + parameter EIOS_DETECT0 = "OTHERWISE"; + parameter DATA_DETECT3 = "OTHERWISE"; + parameter DATA_DETECT2 = "OTHERWISE"; + parameter DATA_DETECT1 = "OTHERWISE"; + parameter DATA_DETECT0 = "OTHERWISE"; + parameter SDS_DETECT3 = "OTHERWISE"; + parameter SDS_DETECT2 = "OTHERWISE"; + parameter SDS_DETECT1 = "OTHERWISE"; + parameter SDS_DETECT0 = "OTHERWISE"; + parameter INFO_BAD_TLP_NULL_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_PHY_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_MALF_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_ECRC_ERR = "OTHERWISE"; + parameter INFO_SCHEDULE_DUPL_ACK = "OTHERWISE"; + parameter INFO_BAD_TLP_SEQ_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_CRC_ERR = "OTHERWISE"; + parameter INFO_NAK_RECEIVED = "OTHERWISE"; + parameter INFO_DESKEW_OVERFLOW_ERROR = "OTHERWISE"; + parameter INFO_TX_DATA_UNDERFLOW = "OTHERWISE"; + parameter INFO_REPLAY_STARTED = "OTHERWISE"; + parameter ERR_AER_TX_PAR2 = "OTHERWISE"; + parameter ERR_AER_TX_REPLAY_ECC2 = "OTHERWISE"; + parameter ERR_AER_TX_REPLAY_ECC1 = "OTHERWISE"; + parameter ERR_AER_SURPRISE_DOWN = "OTHERWISE"; + parameter ERR_AER_DL_PROTOCOL_ERROR = "OTHERWISE"; + parameter ERR_AER_REPLAY_TIMER_TIMEOUT = "OTHERWISE"; + parameter ERR_AER_REPLAY_NUM_ROLLOVER = "OTHERWISE"; + parameter ERR_AER_BAD_DLLP = "OTHERWISE"; + parameter ERR_AER_BAD_TLP = "OTHERWISE"; + parameter ERR_AER_RECEIVER_ERROR = "OTHERWISE"; + parameter P_RX_LIM_H = "DISABLED"; + parameter P_RX_LIM_D = "DISABLED"; + parameter N_RX_LIM_H = "DISABLED"; + parameter N_RX_LIM_D = "DISABLED"; + parameter C_RX_LIM_H = "DISABLED"; + parameter C_RX_LIM_D = "DISABLED"; + parameter P_TX_LIM_H = "DISABLED"; + parameter P_TX_LIM_D = "DISABLED"; + parameter N_TX_LIM_H = "DISABLED"; + parameter N_TX_LIM_D = "DISABLED"; + parameter C_TX_LIM_H = "DISABLED"; + parameter C_TX_LIM_D = "DISABLED"; + parameter MAX_RSA_WAIT = "0b00101000"; + parameter F_ARXDPNULL = "0b00000"; + input LMMICLK; + input LMMIRESET_N; + input LMMIREQUEST; + input LMMIWRRD_N; + input [14:0] LMMIOFFSET; + input [31:0] LMMIWDATA; + output [31:0] LMMIRDATA; + output LMMIRDATAVALID; + output LMMIREADY; + output ACJNOUT; + output ACJPOUT; + input AUXCK; + input CKUSRI; + output CKUSRO; + input ECKIN; + input ECKIND2; + output ECKINDO; + input ERSTN; + input ERSTND2; + input ERXCKD2; + output ERXCKDO; + input ERXRSND2; + input ETXCKD2; + output ETXCKDO; + input ETXRSND2; + output [3:0] FLR; + input [3:0] FLRACK; + input [3:0] MINTLEG; + output MINTO; + input PERSTN; + output [4:0] PMCTRL; + output PMCTRLEN; + input [4:0] PMDPAST; + input PRMSGSD; + input [12:0] PRNOSNP; + input PRNSNPRE; + input [12:0] PRSNOOP; + input PRSNPRE; + input [31:0] PPBDREG; + output [7:0] PPBDSEL; + input REXTCK; + input REXTRST; + input RSTUSRN; + output UDLLKUP; + input ULTSDIS; + output UPLLKUP; + output UTLLKUP; + input [9:0] UCFGADDR; + input [2:0] UCFGF; + output [31:0] UCFGRDD; + output UCFGRDE; + output UCFGRDY; + input UCFGSERD; + input UCFGVD; + input [3:0] UCFGWRBE; + input [31:0] UCFGWRD; + input UCFGWRDN; + input USERAUPD; + input [3:0] USERTRS; + output [12:0] VRXCMDD; + input VRXCINIT; + input [11:0] VRXCNH; + input VRXCNINF; + input VRXCRRE; + output [31:0] VRXD; + output [3:0] VRXDP; + output VRXEOP; + output VRXERR; + output [1:0] VRXF; + input VRXRDY; + output [1:0] VRXSEL; + output VRXSOP; + output VRXVD; + output VXCDINIT; + output [11:0] VXCDNH; + output VTXCRRE; + input [31:0] VXD; + input [3:0] VXDP; + input VXEOP; + input VXEOPN; + output VXRDY; + input VXSOP; + input VXVD; + output [7:0] TESTOUT; + (* iopad_external_pin *) + input S0REFCKN; + (* iopad_external_pin *) + input S0REFCKP; + (* iopad_external_pin *) + input S0REFRET; + (* iopad_external_pin *) + input S0REXT; + (* iopad_external_pin *) + input S0RXN; + (* iopad_external_pin *) + input S0RXP; + (* iopad_external_pin *) + output S0TXN; + (* iopad_external_pin *) + output S0TXP; + input CLKREQI; + output CLKREQO; + output CLKREQOE; +endmodule + +module PDP16K_MODE (...); + parameter DATA_WIDTH_W = "X36"; + parameter DATA_WIDTH_R = "X36"; + parameter OUTREG = "BYPASSED"; + parameter RESETMODE = "SYNC"; + parameter GSR = "ENABLED"; + parameter ECC = "DISABLED"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE_W = "000"; + parameter CSDECODE_R = "000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter INIT_DATA = "STATIC"; + input DI0; + input DI1; + input DI2; + input DI3; + input DI4; + input DI5; + input DI6; + input DI7; + input DI8; + input DI9; + input DI10; + input DI11; + input DI12; + input DI13; + input DI14; + input DI15; + input DI16; + input DI17; + input DI18; + input DI19; + input DI20; + input DI21; + input DI22; + input DI23; + input DI24; + input DI25; + input DI26; + input DI27; + input DI28; + input DI29; + input DI30; + input DI31; + input DI32; + input DI33; + input DI34; + input DI35; + input ADW0; + input ADW1; + input ADW2; + input ADW3; + input ADW4; + input ADW5; + input ADW6; + input ADW7; + input ADW8; + input ADW9; + input ADW10; + input ADW11; + input ADW12; + input ADW13; + input ADR0; + input ADR1; + input ADR2; + input ADR3; + input ADR4; + input ADR5; + input ADR6; + input ADR7; + input ADR8; + input ADR9; + input ADR10; + input ADR11; + input ADR12; + input ADR13; + input CLKW; + input CLKR; + input CEW; + input CER; + input CSW0; + input CSW1; + input CSW2; + input CSR0; + input CSR1; + input CSR2; + input RST; + output DO0; + output DO1; + output DO2; + output DO3; + output DO4; + output DO5; + output DO6; + output DO7; + output DO8; + output DO9; + output DO10; + output DO11; + output DO12; + output DO13; + output DO14; + output DO15; + output DO16; + output DO17; + output DO18; + output DO19; + output DO20; + output DO21; + output DO22; + output DO23; + output DO24; + output DO25; + output DO26; + output DO27; + output DO28; + output DO29; + output DO30; + output DO31; + output DO32; + output DO33; + output DO34; + output DO35; + output ONEBITERR; + output TWOBITERR; +endmodule + +module PDP16K (...); + parameter DATA_WIDTH_W = "X36"; + parameter DATA_WIDTH_R = "X36"; + parameter OUTREG = "BYPASSED"; + parameter RESETMODE = "SYNC"; + parameter GSR = "ENABLED"; + parameter ECC = "DISABLED"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE_W = "000"; + parameter CSDECODE_R = "000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter INIT_DATA = "STATIC"; + input [35:0] DI; + input [13:0] ADW; + input [13:0] ADR; + input CLKW; + input CLKR; + input CEW; + input CER; + input [2:0] CSW; + input [2:0] CSR; + input RST; + output [35:0] DO; + output ONEBITERR; + output TWOBITERR; +endmodule + +module PDPSC16K_MODE (...); + parameter DATA_WIDTH_W = "X36"; + parameter DATA_WIDTH_R = "X36"; + parameter OUTREG = "BYPASSED"; + parameter RESETMODE = "SYNC"; + parameter GSR = "ENABLED"; + parameter ECC = "DISABLED"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE_W = "000"; + parameter CSDECODE_R = "000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter INIT_DATA = "STATIC"; + input DI0; + input DI1; + input DI2; + input DI3; + input DI4; + input DI5; + input DI6; + input DI7; + input DI8; + input DI9; + input DI10; + input DI11; + input DI12; + input DI13; + input DI14; + input DI15; + input DI16; + input DI17; + input DI18; + input DI19; + input DI20; + input DI21; + input DI22; + input DI23; + input DI24; + input DI25; + input DI26; + input DI27; + input DI28; + input DI29; + input DI30; + input DI31; + input DI32; + input DI33; + input DI34; + input DI35; + input ADW0; + input ADW1; + input ADW2; + input ADW3; + input ADW4; + input ADW5; + input ADW6; + input ADW7; + input ADW8; + input ADW9; + input ADW10; + input ADW11; + input ADW12; + input ADW13; + input ADR0; + input ADR1; + input ADR2; + input ADR3; + input ADR4; + input ADR5; + input ADR6; + input ADR7; + input ADR8; + input ADR9; + input ADR10; + input ADR11; + input ADR12; + input ADR13; + input CLK; + input CER; + input CEW; + input CSW0; + input CSW1; + input CSW2; + input CSR0; + input CSR1; + input CSR2; + input RST; + output DO0; + output DO1; + output DO2; + output DO3; + output DO4; + output DO5; + output DO6; + output DO7; + output DO8; + output DO9; + output DO10; + output DO11; + output DO12; + output DO13; + output DO14; + output DO15; + output DO16; + output DO17; + output DO18; + output DO19; + output DO20; + output DO21; + output DO22; + output DO23; + output DO24; + output DO25; + output DO26; + output DO27; + output DO28; + output DO29; + output DO30; + output DO31; + output DO32; + output DO33; + output DO34; + output DO35; + output ONEBITERR; + output TWOBITERR; +endmodule + +module PDPSC16K (...); + parameter DATA_WIDTH_W = "X36"; + parameter DATA_WIDTH_R = "X36"; + parameter OUTREG = "BYPASSED"; + parameter RESETMODE = "SYNC"; + parameter GSR = "ENABLED"; + parameter ECC = "DISABLED"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE_W = "000"; + parameter CSDECODE_R = "000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter INIT_DATA = "STATIC"; + input [35:0] DI; + input [13:0] ADW; + input [13:0] ADR; + input CLK; + input CER; + input CEW; + input [2:0] CSW; + input [2:0] CSR; + input RST; + output [35:0] DO; + output ONEBITERR; + output TWOBITERR; +endmodule + +module PDPSC512K (...); + parameter OUTREG = "NO_REG"; + parameter GSR = "ENABLED"; + parameter RESETMODE = "SYNC"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_40 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_41 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_42 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_43 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_44 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_45 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_46 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_47 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_48 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_49 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_50 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_51 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_52 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_53 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_54 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_55 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_56 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_57 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_58 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_59 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_60 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_61 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_62 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_63 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_64 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_65 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_66 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_67 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_68 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_69 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_70 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_71 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_72 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_73 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_74 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_75 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_76 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_77 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_78 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_79 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + parameter ECC_BYTE_SEL = "ECC_EN"; + input [31:0] DI; + input [13:0] ADW; + input [13:0] ADR; + input CLK; + input CEW; + input CER; + input WE; + input CSW; + input CSR; + input RSTR; + input [3:0] BYTEEN_N; + output [31:0] DO; + output [1:0] ERRDECA; + output [1:0] ERRDECB; +endmodule + +module PLL (...); + parameter BW_CTL_BIAS = "0b0101"; + parameter CLKOP_TRIM = "0b0000"; + parameter CLKOS_TRIM = "0b0000"; + parameter CLKOS2_TRIM = "0b0000"; + parameter CLKOS3_TRIM = "0b0000"; + parameter CLKOS4_TRIM = "0b0000"; + parameter CLKOS5_TRIM = "0b0000"; + parameter CRIPPLE = "5P"; + parameter CSET = "40P"; + parameter DELAY_CTRL = "200PS"; + parameter DELA = "0"; + parameter DELB = "0"; + parameter DELC = "0"; + parameter DELD = "0"; + parameter DELE = "0"; + parameter DELF = "0"; + parameter DIRECTION = "DISABLED"; + parameter DIVA = "0"; + parameter DIVB = "0"; + parameter DIVC = "0"; + parameter DIVD = "0"; + parameter DIVE = "0"; + parameter DIVF = "0"; + parameter DYN_SEL = "0b000"; + parameter DYN_SOURCE = "STATIC"; + parameter ENCLK_CLKOP = "DISABLED"; + parameter ENCLK_CLKOS = "DISABLED"; + parameter ENCLK_CLKOS2 = "DISABLED"; + parameter ENCLK_CLKOS3 = "DISABLED"; + parameter ENCLK_CLKOS4 = "DISABLED"; + parameter ENCLK_CLKOS5 = "DISABLED"; + parameter ENABLE_SYNC = "DISABLED"; + parameter FAST_LOCK_EN = "ENABLED"; + parameter V2I_1V_EN = "DISABLED"; + parameter FBK_CUR_BLE = "0b00000000"; + parameter FBK_EDGE_SEL = "POSITIVE"; + parameter FBK_IF_TIMING_CTL = "0b00"; + parameter FBK_INTEGER_MODE = "DISABLED"; + parameter FBK_MASK = "0b00001000"; + parameter FBK_MMD_DIG = "8"; + parameter FBK_MMD_PULS_CTL = "0b0000"; + parameter FBK_MODE = "0b00"; + parameter FBK_PI_BYPASS = "NOT_BYPASSED"; + parameter FBK_PI_RC = "0b1100"; + parameter FBK_PR_CC = "0b0000"; + parameter FBK_PR_IC = "0b1000"; + parameter FLOAT_CP = "DISABLED"; + parameter FLOCK_CTRL = "2X"; + parameter FLOCK_EN = "ENABLED"; + parameter FLOCK_SRC_SEL = "REFCLK"; + parameter FORCE_FILTER = "DISABLED"; + parameter I_CTRL = "10UA"; + parameter IPI_CMP = "0b1000"; + parameter IPI_CMPN = "0b0011"; + parameter IPI_COMP_EN = "DISABLED"; + parameter IPP_CTRL = "0b1000"; + parameter IPP_SEL = "0b1111"; + parameter KP_VCO = "0b11001"; + parameter LDT_INT_LOCK_STICKY = "DISABLED"; + parameter LDT_LOCK = "1536CYC"; + parameter LDT_LOCK_SEL = "U_FREQ"; + parameter LEGACY_ATT = "DISABLED"; + parameter LOAD_REG = "DISABLED"; + parameter OPENLOOP_EN = "DISABLED"; + parameter PHIA = "0"; + parameter PHIB = "0"; + parameter PHIC = "0"; + parameter PHID = "0"; + parameter PHIE = "0"; + parameter PHIF = "0"; + parameter PLLPDN_EN = "DISABLED"; + parameter PLLPD_N = "UNUSED"; + parameter PLLRESET_ENA = "DISABLED"; + parameter REF_INTEGER_MODE = "DISABLED"; + parameter REF_MASK = "0b00000000"; + parameter REF_MMD_DIG = "8"; + parameter REF_MMD_IN = "0b00001000"; + parameter REF_MMD_PULS_CTL = "0b0000"; + parameter REF_TIMING_CTL = "0b00"; + parameter REFIN_RESET = "SET"; + parameter RESET_LF = "DISABLED"; + parameter ROTATE = "DISABLED"; + parameter SEL_OUTA = "DISABLED"; + parameter SEL_OUTB = "DISABLED"; + parameter SEL_OUTC = "DISABLED"; + parameter SEL_OUTD = "DISABLED"; + parameter SEL_OUTE = "DISABLED"; + parameter SEL_OUTF = "DISABLED"; + parameter SLEEP = "DISABLED"; + parameter SSC_DITHER = "DISABLED"; + parameter SSC_EN_CENTER_IN = "DOWN_TRIANGLE"; + parameter SSC_EN_SDM = "DISABLED"; + parameter SSC_EN_SSC = "DISABLED"; + parameter SSC_F_CODE = "0b000000000000000"; + parameter SSC_N_CODE = "0b000010100"; + parameter SSC_ORDER = "SDM_ORDER2"; + parameter SSC_PI_BYPASS = "NOT_BYPASSED"; + parameter SSC_REG_WEIGHTING_SEL = "0b000"; + parameter SSC_SQUARE_MODE = "DISABLED"; + parameter SSC_STEP_IN = "0b0000000"; + parameter SSC_TBASE = "0b000000000000"; + parameter STDBY_ATT = "DISABLED"; + parameter TRIMOP_BYPASS_N = "BYPASSED"; + parameter TRIMOS_BYPASS_N = "BYPASSED"; + parameter TRIMOS2_BYPASS_N = "BYPASSED"; + parameter TRIMOS3_BYPASS_N = "BYPASSED"; + parameter TRIMOS4_BYPASS_N = "BYPASSED"; + parameter TRIMOS5_BYPASS_N = "BYPASSED"; + parameter V2I_KVCO_SEL = "85"; + parameter V2I_PP_ICTRL = "0b00110"; + parameter V2I_PP_RES = "10K"; + parameter CLKMUX_FB = "CMUX_CLKOP"; + parameter SEL_FBK = "DIVA"; + parameter DIV_DEL = "0b0000001"; + parameter PHASE_SEL_DEL = "0b000"; + parameter PHASE_SEL_DEL_P1 = "0b000"; + parameter EXTERNAL_DIVIDE_FACTOR = "0"; + output INTFBKOP; + output INTFBKOS; + output INTFBKOS2; + output INTFBKOS3; + output INTFBKOS4; + output INTFBKOS5; + input DIR; + input [2:0] DIRSEL; + input LOADREG; + input DYNROTATE; + input LMMICLK; + input LMMIRESET_N; + input LMMIREQUEST; + input LMMIWRRD_N; + input [6:0] LMMIOFFSET; + input [7:0] LMMIWDATA; + output [7:0] LMMIRDATA; + output LMMIRDATAVALID; + output LMMIREADY; + input PLLPOWERDOWN_N; + input REFCK; + output CLKOP; + output CLKOS; + output CLKOS2; + output CLKOS3; + output CLKOS4; + output CLKOS5; + input ENCLKOP; + input ENCLKOS; + input ENCLKOS2; + input ENCLKOS3; + input ENCLKOS4; + input ENCLKOS5; + input FBKCK; + output INTLOCK; + input LEGACY; + output LEGRDYN; + output LOCK; + output PFDDN; + output PFDUP; + input PLLRESET; + input STDBY; + output REFMUXCK; + output REGQA; + output REGQB; + output REGQB1; + output CLKOUTDL; + input ROTDEL; + input DIRDEL; + input ROTDELP1; + input [4:0] GRAYTEST; + input [1:0] BINTEST; + input DIRDELP1; + input [4:0] GRAYACT; + input [1:0] BINACT; +endmodule + +module PREADD9 (...); + parameter SIGNEDSTATIC_EN = "DISABLED"; + parameter SUBSTRACT_EN = "SUBTRACTION"; + parameter CSIGNED = "DISABLED"; + parameter BSIGNED_OPERAND_EN = "DISABLED"; + parameter BYPASS_PREADD9 = "USED"; + parameter REGBYPSBR0 = "REGISTER"; + parameter REGBYPSBR1 = "BYPASS"; + parameter REGBYPSBL = "REGISTER"; + parameter SHIFTBR = "REGISTER"; + parameter SHIFTBL = "REGISTER"; + parameter GSR = "ENABLED"; + parameter PREADDCAS_EN = "DISABLED"; + parameter SR_18BITSHIFT_EN = "DISABLED"; + parameter OPC = "INPUT_B_AS_PREADDER_OPERAND"; + parameter RESET = "SYNC"; + input [8:0] B; + input BSIGNED; + input [9:0] C; + input [8:0] BRS1; + input [8:0] BRS2; + input [8:0] BLS1; + input [8:0] BLS2; + input BRSS1; + input BRSS2; + input BLSS1; + input BLSS2; + input PRCASIN; + input CLK; + input RSTB; + input CEB; + input RSTCL; + input CECL; + output [8:0] BRSO; + output [8:0] BLSO; + output BRSOSGND; + output BLSOSGND; + output PRCASOUT; + output [8:0] BR; + output BRSIGNED; +endmodule + +module REFMUX (...); + parameter REFSEL_ATT = "MC1"; + parameter SEL1 = "SELECT_REFCLK1"; + parameter SEL_REF2 = "REFCLK2_0"; + parameter SEL_REF1 = "REFCLK1_0"; + output REFCK; + output ZRSEL3; + input REFSEL; + input [7:0] REFCLK1; + input [7:0] REFCLK2; +endmodule + +module REG18 (...); + parameter REGBYPS = "REGISTER"; + parameter GSR = "ENABLED"; + parameter RESET = "SYNC"; + input [17:0] PM; + output [17:0] PP; + input CEP; + input RSTP; + input CLK; +endmodule + +(* keep *) +module SEDC (...); + parameter SEDCEN = "DIS"; + input SEDENABLE; + input SEDCCOF; + input SEDCENABLE; + input SEDCMODE; + input SEDCSTART; + output SEDCBUSY; + output SEDCERR; + output SEDCERRC; + output SEDCERRCRC; + output SEDCERRM; + output [15:0] SEDCFRMERRLOC; + input OSCCLKSEDC; + input RSTSEDC; + output [12:0] SEDCDSRERRLOCCIB; +endmodule + +module SEIO18 (...); + parameter PULLMODE = "DOWN"; + parameter MIPI = "DISABLED"; + parameter ENADC_IN = "DISABLED"; + input PADDO; + input DOLP; + (* iopad_external_pin *) + inout IOPAD; + output PADDI; + output INLP; + input PADDT; + output INADC; +endmodule + +module SEIO33 (...); + parameter PULLMODE = "DOWN"; + (* iopad_external_pin *) + inout IOPAD; + output PADDI; + input PADDO; + input PADDT; + input I3CRESEN; + input I3CWKPU; +endmodule + +module SGMIICDR (...); + parameter GSR = "ENABLED"; + parameter DCOITUNE4LSB = "0_PERCENT"; + parameter DCOCTLGI = "0_PERCENT"; + parameter DCOSTEP = "100_PERCENT"; + parameter DCOCALDIV = "100_PERCENT"; + parameter DCOIOSTUNE = "0_PERCENT"; + parameter DCOFLTDAC = "80MHZ"; + parameter DCOSTARTVAL = "NOMINAL"; + parameter DCONUOFLSB = "NEG_60_PERCENT"; + parameter RPWDNB = "POWER_UP"; + parameter CDR_CNT4SEL = "BYPASSED"; + parameter DCOITUNE = "100_PERCENT"; + parameter BAND_THRESHOLD = "0b000000"; + parameter AUTO_FACQ_EN = "ENABLED"; + parameter AUTO_CALIB_EN = "ENABLED"; + parameter CDR_LOL_SET = "1000_PPM"; + parameter FC2DCO_FLOOP = "DISABLED"; + parameter FC2DCO_DLOOP = "DISABLED"; + parameter CALIB_TIME_SEL = "24_CYC"; + parameter CALIB_CK_MODE = "BY_2"; + parameter BAND_CALIB_MODE = "256_FDBK_CLK_CYC"; + parameter REG_BAND_SEL = "0b00000"; + parameter REG_BAND_OFFSET = "0b0000"; + parameter REG_IDAC_SEL = "0b00000000"; + parameter LB_CTL = "DISABLED"; + parameter REG_IDAC_EN = "DISABLED"; + parameter ATDCFG = "0_PS"; + parameter ATDDLY = "0_PS"; + parameter BDAVOID_ENB = "ENABLED"; + parameter BYPASSATD = "NOT_BYPASS"; + parameter DCOIUPDNX2 = "1X"; + parameter IDAC_EN = "DISABLED"; + parameter FB_CLK_DIV = "0b010"; + parameter EN_RECALIB = "ENABLED"; + input LMMICLK; + input LMMIRESET_N; + input LMMIREQUEST; + input LMMIWRRD_N; + input [3:0] LMMIOFFSET; + input [7:0] LMMIWDATA; + output [7:0] LMMIRDATA; + output LMMIRDATAVALID; + output LMMIREADY; + input DCALIRST; + input DFACQRST; + input RRST; + input SPCLK; + output SRCLK; + output [9:0] SRXD; + input RSTBFBW; + input RSTBRXF; + input SGMIIIN; + input SREFCLK; + output CDRLOL; +endmodule + +module SP16K_MODE (...); + parameter DATA_WIDTH = "X18"; + parameter OUTREG = "BYPASSED"; + parameter RESETMODE = "SYNC"; + parameter GSR = "ENABLED"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE = "000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter INIT_DATA = "STATIC"; + input DI0; + input DI1; + input DI2; + input DI3; + input DI4; + input DI5; + input DI6; + input DI7; + input DI8; + input DI9; + input DI10; + input DI11; + input DI12; + input DI13; + input DI14; + input DI15; + input DI16; + input DI17; + input AD0; + input AD1; + input AD2; + input AD3; + input AD4; + input AD5; + input AD6; + input AD7; + input AD8; + input AD9; + input AD10; + input AD11; + input AD12; + input AD13; + input CLK; + input CE; + input WE; + input CS0; + input CS1; + input CS2; + input RST; + output DO0; + output DO1; + output DO2; + output DO3; + output DO4; + output DO5; + output DO6; + output DO7; + output DO8; + output DO9; + output DO10; + output DO11; + output DO12; + output DO13; + output DO14; + output DO15; + output DO16; + output DO17; +endmodule + +module SP16K (...); + parameter DATA_WIDTH = "X18"; + parameter OUTREG = "BYPASSED"; + parameter RESETMODE = "SYNC"; + parameter GSR = "ENABLED"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter CSDECODE = "000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter INIT_DATA = "STATIC"; + input [17:0] DI; + input [13:0] AD; + input CLK; + input CE; + input WE; + input [2:0] CS; + input RST; + output [17:0] DO; +endmodule + +module SP512K (...); + parameter OUTREG = "NO_REG"; + parameter GSR = "ENABLED"; + parameter RESETMODE = "SYNC"; + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_40 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_41 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_42 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_43 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_44 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_45 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_46 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_47 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_48 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_49 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_50 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_51 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_52 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_53 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_54 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_55 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_56 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_57 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_58 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_59 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_60 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_61 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_62 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_63 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_64 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_65 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_66 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_67 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_68 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_69 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_70 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_71 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_72 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_73 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_74 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_75 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_76 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_77 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_78 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_79 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ASYNC_RESET_RELEASE = "SYNC"; + parameter ECC_BYTE_SEL = "ECC_EN"; + input [31:0] DI; + input [13:0] AD; + input CLK; + input CE; + input WE; + input CS; + input RSTOUT; + input CEOUT; + input [3:0] BYTEEN_N; + output [31:0] DO; + output [1:0] ERRDECA; + output [1:0] ERRDECB; +endmodule + +module TSHX2DQS (...); + parameter GSR = "ENABLED"; + input T0; + input T1; + input DQSW; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module TSHX2DQ (...); + parameter GSR = "ENABLED"; + input T0; + input T1; + input DQSW270; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module TSHX4DQS (...); + parameter GSR = "ENABLED"; + input T0; + input T1; + input T2; + input T3; + input DQSW; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +module TSHX4DQ (...); + parameter GSR = "ENABLED"; + input T0; + input T1; + input T2; + input T3; + input DQSW270; + input ECLK; + input SCLK; + input RST; + output Q; +endmodule + +(* keep *) +module WDT (...); + parameter WDTEN = "DIS"; + parameter WDTMODE = "SINGLE"; + parameter WDTVALUE = "0b000000000000000000"; + input WDTRELOAD; + input WDT_CLK; + input WDT_RST; +endmodule + +module MIPI (...); + parameter MIPI_ID = "0"; + (* iopad_external_pin *) + inout BP; + (* iopad_external_pin *) + inout BN; + input AP; + input AN; + input TP; + input TN; + input IHS; + input HSRXEN; + input HSTXEN; + output OHS; + output OLSP; + output OLSN; +endmodule + +(* keep *) +module CONFIG_IP_CORE (...); + parameter DONEPHASE = "DIS"; + parameter DSRFCTRL = "0b00"; + parameter ENTSALL = "DIS"; + parameter MCCFGUSEREN = "DIS"; + parameter MCCIBINT = "DIS"; + parameter MCHSEUSEREN = "DIS"; + parameter MCJTAGDISABLE = "EN"; + parameter MCPERSISTUI2C = "DIS"; + parameter MCSPARE = "0b00000"; + parameter MCUCLKSEL = "DIS"; + parameter MCUI2CAFWKUP = "DIS"; + parameter PERSISTI2C = "DIS"; + parameter PERSISTI3C = "DIS"; + parameter PERSISTMQUAD = "DIS"; + parameter PERSISTMSPI = "DIS"; + parameter PERSISTSHEXA = "DIS"; + parameter PERSISTSOCTA = "DIS"; + parameter PERSISTSQUAD = "DIS"; + parameter PERSISTSSPI = "DIS"; + parameter PERSISTWKUP = "DIS"; + parameter PPTQOUT = "0b0000"; + parameter SCANEN = "DIS"; + parameter SYNCEXTDONE = "DIS"; + parameter TRANECI = "DIS"; + parameter TRANHSE = "DIS"; + parameter TRANSBI = "DIS"; + parameter TSALLINV = "NINV"; + parameter WLSLEW = "DIS"; + output CFGDONECIB; + input CIBTSALL; + output FREEZEIOCIB; + output LASTADDRCIB15; + output LASTADDRCIB14; + output LASTADDRCIB13; + output LASTADDRCIB12; + output LASTADDRCIB11; + output LASTADDRCIB10; + output LASTADDRCIB9; + output LASTADDRCIB8; + output LASTADDRCIB7; + output LASTADDRCIB6; + output LASTADDRCIB5; + output LASTADDRCIB4; + output LASTADDRCIB3; + output LASTADDRCIB2; + output LASTADDRCIB1; + output LASTADDRCIB0; + input MBISTENABLEN; + output MBISTRRMATCH; + input MBISTTRRAEN; +endmodule + +module TSALLA (...); + input TSALL; +endmodule + +module OSCA (...); + parameter HF_CLK_DIV = "1"; + parameter HF_SED_SEC_DIV = "1"; + parameter HF_OSC_EN = "ENABLED"; + parameter LF_OUTPUT_EN = "DISABLED"; + input HFOUTEN; + input HFSDSCEN; + output HFCLKOUT; + output LFCLKOUT; + output HFCLKCFG; + output HFSDCOUT; +endmodule + +module OSC (...); + parameter DTR_EN = "ENABLED"; + parameter HF_CLK_DIV = "1"; + parameter HF_SED_SEC_DIV = "1"; + parameter HF_FABRIC_EN = "DISABLED"; + parameter HF_OSC_EN = "ENABLED"; + parameter HFDIV_FABRIC_EN = "ENABLED"; + parameter LF_FABRIC_EN = "DISABLED"; + parameter LF_OUTPUT_EN = "DISABLED"; + parameter DEBUG_N = "DISABLED"; + parameter MCJTAGGSRNDIS = "EN"; + parameter MCLMMIGSRNDIS = "EN"; + parameter MCSEDCGSRNDIS = "EN"; + parameter MCWDTGSRNDIS = "EN"; + parameter SMCLK_DIV = "3"; + output HFCLKOUT; + input HFSDSCEN; + output LFCLKOUT; + output HFSDCOUT; + output HSE_CLK; + input JTAG_LRST_N; + input LMMI_CLK; + output LMMI_CLK_O; + input LMMI_LRST_N; + output LMMI_RST; + input SEDC_CLK; + input SEDC_LRST_N; + output SEDC_RST; + output CFG_CLK; + output SMCLK_RST; + output WDT_CLK; + input WDT_LRST_N; + output WDT_RST; +endmodule + +module ACC54_CORE (...); + parameter SIGN = "DISABLED"; + parameter M9ADDSUB_CTRL = "ADDITION"; + parameter ADDSUB_CTRL = "ADD_ADD_CTRL_54_BIT_ADDER"; + parameter STATICOPCODE_EN = "DISABLED"; + parameter OUTREGBYPS = "REGISTER"; + parameter GSR = "ENABLED"; + parameter PROGCONST = "0b000000000000000000000000000000000000000000000000000000"; + parameter CONSTSEL = "BYPASS"; + parameter DSPCASCADE = "DISABLED"; + parameter ACC108CASCADE = "BYPASSCASCADE"; + parameter ACCUMODE = "MODE0"; + parameter ACCUBYPS = "USED"; + parameter CREGBYPS1 = "REGISTER"; + parameter CREGBYPS2 = "REGISTER"; + parameter CREGBYPS3 = "REGISTER"; + parameter CINREGBYPS1 = "REGISTER"; + parameter CINREGBYPS2 = "REGISTER"; + parameter CINREGBYPS3 = "REGISTER"; + parameter LOADREGBYPS1 = "REGISTER"; + parameter LOADREGBYPS2 = "REGISTER"; + parameter LOADREGBYPS3 = "REGISTER"; + parameter M9ADDSUBREGBYPS1 = "REGISTER"; + parameter M9ADDSUBREGBYPS2 = "REGISTER"; + parameter M9ADDSUBREGBYPS3 = "REGISTER"; + parameter ADDSUBSIGNREGBYPS1 = "REGISTER"; + parameter ADDSUBSIGNREGBYPS2 = "REGISTER"; + parameter ADDSUBSIGNREGBYPS3 = "REGISTER"; + parameter ROUNDHALFUP = "DISABLED"; + parameter ROUNDRTZI = "ROUND_TO_ZERO"; + parameter ROUNDBIT = "ROUND_TO_BIT0"; + parameter CASCOUTREGBYPS = "REGISTER"; + parameter SFTEN = "DISABLED"; + parameter RESET = "SYNC"; + input SFTCTRL3; + input SFTCTRL2; + input SFTCTRL1; + input SFTCTRL0; + input DSPIN53; + input DSPIN52; + input DSPIN51; + input DSPIN50; + input DSPIN49; + input DSPIN48; + input DSPIN47; + input DSPIN46; + input DSPIN45; + input DSPIN44; + input DSPIN43; + input DSPIN42; + input DSPIN41; + input DSPIN40; + input DSPIN39; + input DSPIN38; + input DSPIN37; + input DSPIN36; + input DSPIN35; + input DSPIN34; + input DSPIN33; + input DSPIN32; + input DSPIN31; + input DSPIN30; + input DSPIN29; + input DSPIN28; + input DSPIN27; + input DSPIN26; + input DSPIN25; + input DSPIN24; + input DSPIN23; + input DSPIN22; + input DSPIN21; + input DSPIN20; + input DSPIN19; + input DSPIN18; + input DSPIN17; + input DSPIN16; + input DSPIN15; + input DSPIN14; + input DSPIN13; + input DSPIN12; + input DSPIN11; + input DSPIN10; + input DSPIN9; + input DSPIN8; + input DSPIN7; + input DSPIN6; + input DSPIN5; + input DSPIN4; + input DSPIN3; + input DSPIN2; + input DSPIN1; + input DSPIN0; + input PP71; + input PP70; + input PP69; + input PP68; + input PP67; + input PP66; + input PP65; + input PP64; + input PP63; + input PP62; + input PP61; + input PP60; + input PP59; + input PP58; + input PP57; + input PP56; + input PP55; + input PP54; + input PP53; + input PP52; + input PP51; + input PP50; + input PP49; + input PP48; + input PP47; + input PP46; + input PP45; + input PP44; + input PP43; + input PP42; + input PP41; + input PP40; + input PP39; + input PP38; + input PP37; + input PP36; + input PP35; + input PP34; + input PP33; + input PP32; + input PP31; + input PP30; + input PP29; + input PP28; + input PP27; + input PP26; + input PP25; + input PP24; + input PP23; + input PP22; + input PP21; + input PP20; + input PP19; + input PP18; + input PP17; + input PP16; + input PP15; + input PP14; + input PP13; + input PP12; + input PP11; + input PP10; + input PP9; + input PP8; + input PP7; + input PP6; + input PP5; + input PP4; + input PP3; + input PP2; + input PP1; + input PP0; + input CINPUT53; + input CINPUT52; + input CINPUT51; + input CINPUT50; + input CINPUT49; + input CINPUT48; + input CINPUT47; + input CINPUT46; + input CINPUT45; + input CINPUT44; + input CINPUT43; + input CINPUT42; + input CINPUT41; + input CINPUT40; + input CINPUT39; + input CINPUT38; + input CINPUT37; + input CINPUT36; + input CINPUT35; + input CINPUT34; + input CINPUT33; + input CINPUT32; + input CINPUT31; + input CINPUT30; + input CINPUT29; + input CINPUT28; + input CINPUT27; + input CINPUT26; + input CINPUT25; + input CINPUT24; + input CINPUT23; + input CINPUT22; + input CINPUT21; + input CINPUT20; + input CINPUT19; + input CINPUT18; + input CINPUT17; + input CINPUT16; + input CINPUT15; + input CINPUT14; + input CINPUT13; + input CINPUT12; + input CINPUT11; + input CINPUT10; + input CINPUT9; + input CINPUT8; + input CINPUT7; + input CINPUT6; + input CINPUT5; + input CINPUT4; + input CINPUT3; + input CINPUT2; + input CINPUT1; + input CINPUT0; + input LOAD; + input M9ADDSUB1; + input M9ADDSUB0; + input ADDSUB1; + input ADDSUB0; + input CIN; + input CASIN1; + input CASIN0; + input CEO; + input RSTO; + input CEC; + input RSTC; + input CLK; + input SIGNEDI; + output SUM135; + output SUM134; + output SUM133; + output SUM132; + output SUM131; + output SUM130; + output SUM129; + output SUM128; + output SUM127; + output SUM126; + output SUM125; + output SUM124; + output SUM123; + output SUM122; + output SUM121; + output SUM120; + output SUM119; + output SUM118; + output SUM117; + output SUM116; + output SUM115; + output SUM114; + output SUM113; + output SUM112; + output SUM111; + output SUM110; + output SUM19; + output SUM18; + output SUM17; + output SUM16; + output SUM15; + output SUM14; + output SUM13; + output SUM12; + output SUM11; + output SUM10; + output SUM035; + output SUM034; + output SUM033; + output SUM032; + output SUM031; + output SUM030; + output SUM029; + output SUM028; + output SUM027; + output SUM026; + output SUM025; + output SUM024; + output SUM023; + output SUM022; + output SUM021; + output SUM020; + output SUM019; + output SUM018; + output SUM017; + output SUM016; + output SUM015; + output SUM014; + output SUM013; + output SUM012; + output SUM011; + output SUM010; + output SUM09; + output SUM08; + output SUM07; + output SUM06; + output SUM05; + output SUM04; + output SUM03; + output SUM02; + output SUM01; + output SUM00; + output DSPOUT53; + output DSPOUT52; + output DSPOUT51; + output DSPOUT50; + output DSPOUT49; + output DSPOUT48; + output DSPOUT47; + output DSPOUT46; + output DSPOUT45; + output DSPOUT44; + output DSPOUT43; + output DSPOUT42; + output DSPOUT41; + output DSPOUT40; + output DSPOUT39; + output DSPOUT38; + output DSPOUT37; + output DSPOUT36; + output DSPOUT35; + output DSPOUT34; + output DSPOUT33; + output DSPOUT32; + output DSPOUT31; + output DSPOUT30; + output DSPOUT29; + output DSPOUT28; + output DSPOUT27; + output DSPOUT26; + output DSPOUT25; + output DSPOUT24; + output DSPOUT23; + output DSPOUT22; + output DSPOUT21; + output DSPOUT20; + output DSPOUT19; + output DSPOUT18; + output DSPOUT17; + output DSPOUT16; + output DSPOUT15; + output DSPOUT14; + output DSPOUT13; + output DSPOUT12; + output DSPOUT11; + output DSPOUT10; + output DSPOUT9; + output DSPOUT8; + output DSPOUT7; + output DSPOUT6; + output DSPOUT5; + output DSPOUT4; + output DSPOUT3; + output DSPOUT2; + output DSPOUT1; + output DSPOUT0; + output CASCOUT1; + output CASCOUT0; + input ROUNDEN; + input CECIN; + input CECTRL; + input RSTCIN; + input RSTCTRL; +endmodule + +module ADC_CORE (...); + parameter ADC_ENP = "ENABLED"; + parameter CLK_DIV = "2"; + parameter CTLCOMPSW1 = "DISABLED"; + parameter CTLCOMPSW2 = "DISABLED"; + parameter CTLCOMPSW3 = "DISABLED"; + parameter DF = "STRAIGHT_BINARY"; + parameter EN_COMP1 = "ENABLED"; + parameter EN_COMP2 = "ENABLED"; + parameter EN_COMP3 = "ENABLED"; + parameter OMA = "BIPOLAR"; + parameter OMB = "BIPOLAR"; + parameter REFBUFAEN = "ENABLED"; + parameter REFBUFBEN = "ENABLED"; + parameter SLEEP = "DISABLED"; + parameter VREFACFG = "1P0_TO_1P2"; + parameter VREFASEL = "INTERNAL"; + parameter VREFBCFG = "1P0_TO_1P2"; + parameter VREFBSEL = "INTERNAL"; + input ADCEN; + input CAL; + output CALRDY; + input CHAEN; + input CHASEL3; + input CHASEL2; + input CHASEL1; + input CHASEL0; + input CHBEN; + input CHBSEL3; + input CHBSEL2; + input CHBSEL1; + input CHBSEL0; + input CLKDCLK; + input CLKFAB; + output COG; + input COMP1IN; + input COMP1IP; + output COMP1OL; + input COMP2IN; + input COMP2IP; + output COMP2OL; + input COMP3IN; + input COMP3IP; + output COMP3OL; + input CONVSTOP; + output DA11; + output DA10; + output DA9; + output DA8; + output DA7; + output DA6; + output DA5; + output DA4; + output DA3; + output DA2; + output DA1; + output DA0; + output DB11; + output DB10; + output DB9; + output DB8; + output DB7; + output DB6; + output DB5; + output DB4; + output DB3; + output DB2; + output DB1; + output DB0; + (* iopad_external_pin *) + input DN1; + (* iopad_external_pin *) + input DN0; + (* iopad_external_pin *) + input DP1; + (* iopad_external_pin *) + input DP0; + output EOC; + input GPION15; + input GPION14; + input GPION13; + input GPION12; + input GPION11; + input GPION10; + input GPION9; + input GPION8; + input GPION7; + input GPION6; + input GPION5; + input GPION4; + input GPION3; + input GPION2; + input GPION1; + input GPION0; + input GPIOP15; + input GPIOP14; + input GPIOP13; + input GPIOP12; + input GPIOP11; + input GPIOP10; + input GPIOP9; + input GPIOP8; + input GPIOP7; + input GPIOP6; + input GPIOP5; + input GPIOP4; + input GPIOP3; + input GPIOP2; + input GPIOP1; + input GPIOP0; + input RESETN; + input RSTN; + input RSVDH; + input RSVDL; + input SOC; + output COMP1O; + output COMP2O; + output COMP3O; +endmodule + +module ALUREG_CORE (...); + parameter ALURST_ACTIVELOW = "DISABLE"; + parameter GSR = "ENABLED"; + parameter INREG = "DISABLE"; + parameter MULFXP_ROUND = "ENABLE"; + parameter OUTREG = "DISABLE"; + parameter REGRST_ACTIVELOW = "DISABLE"; + parameter RETAIN = "ENABLE"; + parameter RFASYNC_RD = "SYNC_RD"; + parameter RFR0_RO = "R0READONLY"; + parameter RFUNALIA_WR = "DISABLE"; + parameter RFWCLK_INV = "SIG"; + input OPCGLOADCLK; + input ALUCLK; + output ALUFLAGC; + output ALUFLAGV; + output ALUFLAGZ; + input ALUFORWARDA; + input ALUFORWARDB; + input ALUIREGEN; + input ALUOREGEN; + input ALURST; + input DATAA31; + input DATAA30; + input DATAA29; + input DATAA28; + input DATAA27; + input DATAA26; + input DATAA25; + input DATAA24; + input DATAA23; + input DATAA22; + input DATAA21; + input DATAA20; + input DATAA19; + input DATAA18; + input DATAA17; + input DATAA16; + input DATAA15; + input DATAA14; + input DATAA13; + input DATAA12; + input DATAA11; + input DATAA10; + input DATAA9; + input DATAA8; + input DATAA7; + input DATAA6; + input DATAA5; + input DATAA4; + input DATAA3; + input DATAA2; + input DATAA1; + input DATAA0; + input DATAB31; + input DATAB30; + input DATAB29; + input DATAB28; + input DATAB27; + input DATAB26; + input DATAB25; + input DATAB24; + input DATAB23; + input DATAB22; + input DATAB21; + input DATAB20; + input DATAB19; + input DATAB18; + input DATAB17; + input DATAB16; + input DATAB15; + input DATAB14; + input DATAB13; + input DATAB12; + input DATAB11; + input DATAB10; + input DATAB9; + input DATAB8; + input DATAB7; + input DATAB6; + input DATAB5; + input DATAB4; + input DATAB3; + input DATAB2; + input DATAB1; + input DATAB0; + input DATAC4; + input DATAC3; + input DATAC2; + input DATAC1; + input DATAC0; + input OPC6; + input OPC5; + input OPC4; + input OPC3; + input OPC2; + input OPC1; + input OPC0; + input OPCCUSTOM; + input RADDRA4; + input RADDRA3; + input RADDRA2; + input RADDRA1; + input RADDRA0; + input RADDRB4; + input RADDRB3; + input RADDRB2; + input RADDRB1; + input RADDRB0; + output RDATAA31; + output RDATAA30; + output RDATAA29; + output RDATAA28; + output RDATAA27; + output RDATAA26; + output RDATAA25; + output RDATAA24; + output RDATAA23; + output RDATAA22; + output RDATAA21; + output RDATAA20; + output RDATAA19; + output RDATAA18; + output RDATAA17; + output RDATAA16; + output RDATAA15; + output RDATAA14; + output RDATAA13; + output RDATAA12; + output RDATAA11; + output RDATAA10; + output RDATAA9; + output RDATAA8; + output RDATAA7; + output RDATAA6; + output RDATAA5; + output RDATAA4; + output RDATAA3; + output RDATAA2; + output RDATAA1; + output RDATAA0; + output RDATAB31; + output RDATAB30; + output RDATAB29; + output RDATAB28; + output RDATAB27; + output RDATAB26; + output RDATAB25; + output RDATAB24; + output RDATAB23; + output RDATAB22; + output RDATAB21; + output RDATAB20; + output RDATAB19; + output RDATAB18; + output RDATAB17; + output RDATAB16; + output RDATAB15; + output RDATAB14; + output RDATAB13; + output RDATAB12; + output RDATAB11; + output RDATAB10; + output RDATAB9; + output RDATAB8; + output RDATAB7; + output RDATAB6; + output RDATAB5; + output RDATAB4; + output RDATAB3; + output RDATAB2; + output RDATAB1; + output RDATAB0; + input REGCLK; + input REGCLKEN; + input REGRST; + output RESULT31; + output RESULT30; + output RESULT29; + output RESULT28; + output RESULT27; + output RESULT26; + output RESULT25; + output RESULT24; + output RESULT23; + output RESULT22; + output RESULT21; + output RESULT20; + output RESULT19; + output RESULT18; + output RESULT17; + output RESULT16; + output RESULT15; + output RESULT14; + output RESULT13; + output RESULT12; + output RESULT11; + output RESULT10; + output RESULT9; + output RESULT8; + output RESULT7; + output RESULT6; + output RESULT5; + output RESULT4; + output RESULT3; + output RESULT2; + output RESULT1; + output RESULT0; + input SCANCLK; + input SCANRST; + input WADDR4; + input WADDR3; + input WADDR2; + input WADDR1; + input WADDR0; + input WDROTATE1; + input WDROTATE0; + input WDSIGNEXT; + input WDSIZE1; + input WDSIZE0; + input WDATA31; + input WDATA30; + input WDATA29; + input WDATA28; + input WDATA27; + input WDATA26; + input WDATA25; + input WDATA24; + input WDATA23; + input WDATA22; + input WDATA21; + input WDATA20; + input WDATA19; + input WDATA18; + input WDATA17; + input WDATA16; + input WDATA15; + input WDATA14; + input WDATA13; + input WDATA12; + input WDATA11; + input WDATA10; + input WDATA9; + input WDATA8; + input WDATA7; + input WDATA6; + input WDATA5; + input WDATA4; + input WDATA3; + input WDATA2; + input WDATA1; + input WDATA0; + input WREN; +endmodule + +module BNKREF18_CORE (...); + parameter BANK = "0b0000"; + parameter STANDBY_DIFFIO = "DISABLED"; + parameter STANDBY_INR = "DISABLED"; + input STDBYINR; + input STDBYDIF; + input PVTSNKI6; + input PVTSNKI5; + input PVTSNKI4; + input PVTSNKI3; + input PVTSNKI2; + input PVTSNKI1; + input PVTSNKI0; + input PVTSRCI6; + input PVTSRCI5; + input PVTSRCI4; + input PVTSRCI3; + input PVTSRCI2; + input PVTSRCI1; + input PVTSRCI0; + output PVTCODE6; + output PVTCODE5; + output PVTCODE4; + output PVTCODE3; + output PVTCODE2; + output PVTCODE1; + output PVTCODE0; + input PVTSEL; +endmodule + +module BNKREF33_CORE (...); + parameter BANK = "0b0000"; + input PVTSEL; + input PVTSNKI6; + input PVTSNKI5; + input PVTSNKI4; + input PVTSNKI3; + input PVTSNKI2; + input PVTSNKI1; + input PVTSNKI0; + input PVTSRCI6; + input PVTSRCI5; + input PVTSRCI4; + input PVTSRCI3; + input PVTSRCI2; + input PVTSRCI1; + input PVTSRCI0; + output PVTCODE6; + output PVTCODE5; + output PVTCODE4; + output PVTCODE3; + output PVTCODE2; + output PVTCODE1; + output PVTCODE0; +endmodule + +module DIFFIO18_CORE (...); + parameter MIPI_ID = "0"; + parameter PULLMODE = "DOWN"; + parameter ENADC_IN = "DISABLED"; + parameter MIPI = "DISABLED"; + input I; + input DOLP; + (* iopad_external_pin *) + inout B; + output O; + output INLP; + input T; + output INADC; + input HSRXEN; + input HSTXEN; +endmodule + +(* keep *) +module CONFIG_CLKRST_CORE (...); + parameter MCJTAGGSRNDIS = "EN"; + parameter MCLMMIGSRNDIS = "EN"; + parameter MCSEDCGSRNDIS = "EN"; + parameter MCWDTGSRNDIS = "EN"; + parameter SMCLK_DIV = "3"; + output HSE_CLK; + input JTAG_LRST_N; + input LMMI_CLK; + output LMMI_CLK_O; + input LMMI_LRST_N; + output LMMI_RST; + input OSCCLK; + input SEDC_CLK; + input SEDC_LRST_N; + output SEDC_RST; + output CFG_CLK; + output SMCLK_RST; + output WDT_CLK; + input WDT_LRST_N; + output WDT_RST; +endmodule + +(* keep *) +module CONFIG_HSE_CORE (...); + parameter MCGLBGSRNDIS = "EN"; + parameter MCHSEDISABLE = "EN"; + parameter MCHSEOTPEN = "DIS"; + input ASFCLKI; + output ASFEMPTYO; + output ASFFULLO; + input ASFRDI; + input ASFRESETI; + input ASFWRI; + input CFG_CLK; + input HSE_CLK; + input HSELRSTN; + input LMMICLK; + input LMMIOFFSET17; + input LMMIOFFSET16; + input LMMIOFFSET15; + input LMMIOFFSET14; + input LMMIOFFSET13; + input LMMIOFFSET12; + input LMMIOFFSET11; + input LMMIOFFSET10; + input LMMIOFFSET9; + input LMMIOFFSET8; + input LMMIOFFSET7; + input LMMIOFFSET6; + input LMMIOFFSET5; + input LMMIOFFSET4; + input LMMIOFFSET3; + input LMMIOFFSET2; + input LMMIOFFSET1; + input LMMIOFFSET0; + output LMMIRDATA31; + output LMMIRDATA30; + output LMMIRDATA29; + output LMMIRDATA28; + output LMMIRDATA27; + output LMMIRDATA26; + output LMMIRDATA25; + output LMMIRDATA24; + output LMMIRDATA23; + output LMMIRDATA22; + output LMMIRDATA21; + output LMMIRDATA20; + output LMMIRDATA19; + output LMMIRDATA18; + output LMMIRDATA17; + output LMMIRDATA16; + output LMMIRDATA15; + output LMMIRDATA14; + output LMMIRDATA13; + output LMMIRDATA12; + output LMMIRDATA11; + output LMMIRDATA10; + output LMMIRDATA9; + output LMMIRDATA8; + output LMMIRDATA7; + output LMMIRDATA6; + output LMMIRDATA5; + output LMMIRDATA4; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIREQUEST; + input LMMIRESETN; + input LMMIWDATA31; + input LMMIWDATA30; + input LMMIWDATA29; + input LMMIWDATA28; + input LMMIWDATA27; + input LMMIWDATA26; + input LMMIWDATA25; + input LMMIWDATA24; + input LMMIWDATA23; + input LMMIWDATA22; + input LMMIWDATA21; + input LMMIWDATA20; + input LMMIWDATA19; + input LMMIWDATA18; + input LMMIWDATA17; + input LMMIWDATA16; + input LMMIWDATA15; + input LMMIWDATA14; + input LMMIWDATA13; + input LMMIWDATA12; + input LMMIWDATA11; + input LMMIWDATA10; + input LMMIWDATA9; + input LMMIWDATA8; + input LMMIWDATA7; + input LMMIWDATA6; + input LMMIWDATA5; + input LMMIWDATA4; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + input LMMIWRRDN; + input OTM; +endmodule + +(* keep *) +module CONFIG_JTAG_CORE (...); + parameter MCER1EXIST = "NEXIST"; + parameter MCER2EXIST = "NEXIST"; + output JCE1; + output JCE2; + output JRSTN; + output JRTI1; + output JRTI2; + output JSHIFT; + output JTDI; + output JUPDATE; + input JTDO1; + input JTDO2; + input SMCLK; + input TCK; + output JTCK; + input TDI; + output TDO_OEN; + output TDO; + input TMS; +endmodule + +(* keep *) +module CONFIG_LMMI_CORE (...); + parameter LMMI_EN = "DIS"; + input LMMIOFFSET7; + input LMMIOFFSET6; + input LMMIOFFSET5; + input LMMIOFFSET4; + input LMMIOFFSET3; + input LMMIOFFSET2; + input LMMIOFFSET1; + input LMMIOFFSET0; + input LMMICLK; + output LMMIRDATA7; + output LMMIRDATA6; + output LMMIRDATA5; + output LMMIRDATA4; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIRESETN; + input LMMIREQUEST; + input LMMIWDATA7; + input LMMIWDATA6; + input LMMIWDATA5; + input LMMIWDATA4; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + input LMMIWRRDN; + input RSTSMCLK; + input SMCLK; +endmodule + +(* keep *) +module CONFIG_MULTIBOOT_CORE (...); + parameter MSPIADDR = "0b00000000000000000000000000000000"; + parameter SOURCESEL = "DIS"; + input CIBAUTOREBOOT; + input CIBMSPIMADDR31; + input CIBMSPIMADDR30; + input CIBMSPIMADDR29; + input CIBMSPIMADDR28; + input CIBMSPIMADDR27; + input CIBMSPIMADDR26; + input CIBMSPIMADDR25; + input CIBMSPIMADDR24; + input CIBMSPIMADDR23; + input CIBMSPIMADDR22; + input CIBMSPIMADDR21; + input CIBMSPIMADDR20; + input CIBMSPIMADDR19; + input CIBMSPIMADDR18; + input CIBMSPIMADDR17; + input CIBMSPIMADDR16; + input CIBMSPIMADDR15; + input CIBMSPIMADDR14; + input CIBMSPIMADDR13; + input CIBMSPIMADDR12; + input CIBMSPIMADDR11; + input CIBMSPIMADDR10; + input CIBMSPIMADDR9; + input CIBMSPIMADDR8; + input CIBMSPIMADDR7; + input CIBMSPIMADDR6; + input CIBMSPIMADDR5; + input CIBMSPIMADDR4; + input CIBMSPIMADDR3; + input CIBMSPIMADDR2; + input CIBMSPIMADDR1; + input CIBMSPIMADDR0; +endmodule + +(* keep *) +module CONFIG_SEDC_CORE (...); + parameter SEDCEN = "DIS"; + input CIBSED1ENABLE; + input CIBSEDCCOF; + input CIBSEDCENABLE; + input CIBSEDCMODE; + input CIBSEDCSTART; + input OSCCLKSEDC; + input RSTSEDC; + output SEDCBUSYCIB; + output SEDCDSRERRLOCCIB12; + output SEDCDSRERRLOCCIB11; + output SEDCDSRERRLOCCIB10; + output SEDCDSRERRLOCCIB9; + output SEDCDSRERRLOCCIB8; + output SEDCDSRERRLOCCIB7; + output SEDCDSRERRLOCCIB6; + output SEDCDSRERRLOCCIB5; + output SEDCDSRERRLOCCIB4; + output SEDCDSRERRLOCCIB3; + output SEDCDSRERRLOCCIB2; + output SEDCDSRERRLOCCIB1; + output SEDCDSRERRLOCCIB0; + output SEDCERR1CIB; + output SEDCERRCCIB; + output SEDCERRCRCCIB; + output SEDCERRMCIB; + output SEDCFRMERRLOCCIB15; + output SEDCFRMERRLOCCIB14; + output SEDCFRMERRLOCCIB13; + output SEDCFRMERRLOCCIB12; + output SEDCFRMERRLOCCIB11; + output SEDCFRMERRLOCCIB10; + output SEDCFRMERRLOCCIB9; + output SEDCFRMERRLOCCIB8; + output SEDCFRMERRLOCCIB7; + output SEDCFRMERRLOCCIB6; + output SEDCFRMERRLOCCIB5; + output SEDCFRMERRLOCCIB4; + output SEDCFRMERRLOCCIB3; + output SEDCFRMERRLOCCIB2; + output SEDCFRMERRLOCCIB1; + output SEDCFRMERRLOCCIB0; +endmodule + +(* keep *) +module CONFIG_WDT_CORE (...); + parameter WDTEN = "DIS"; + parameter WDTMODE = "SINGLE"; + parameter WDTVALUE = "0b000000000000000000"; + input CIBWDTRELOAD; + input WDT_CLK; + input WDT_RST; +endmodule + +module DDRDLL_CORE (...); + parameter GSR = "ENABLED"; + parameter ENA_ROUNDOFF = "ENABLED"; + parameter FORCE_MAX_DELAY = "CODE_OR_LOCK_FROM_DLL_LOOP"; + output CODE8; + output CODE7; + output CODE6; + output CODE5; + output CODE4; + output CODE3; + output CODE2; + output CODE1; + output CODE0; + input FREEZE; + output LOCK; + input CLKIN; + input RST; + output DCNTL8; + output DCNTL7; + output DCNTL6; + output DCNTL5; + output DCNTL4; + output DCNTL3; + output DCNTL2; + output DCNTL1; + output DCNTL0; + input UDDCNTL_N; +endmodule + +module DLLDEL_CORE (...); + parameter ADJUST = "0"; + parameter DEL_ADJUST = "PLUS"; + parameter ENABLE = "DISABLED"; + input CLKIN; + output CLKOUT; + input CODE8; + input CODE7; + input CODE6; + input CODE5; + input CODE4; + input CODE3; + input CODE2; + input CODE1; + input CODE0; + output COUT; + input DIR; + input LOAD_N; + input MOVE; +endmodule + +module DPHY_CORE (...); + parameter GSR = "ENABLED"; + parameter AUTO_PD_EN = "POWERED_UP"; + parameter CFG_NUM_LANES = "ONE_LANE"; + parameter CM = "0b00000000"; + parameter CN = "0b00000"; + parameter CO = "0b000"; + parameter CONT_CLK_MODE = "DISABLED"; + parameter DESKEW_EN = "DISABLED"; + parameter DSI_CSI = "CSI2_APP"; + parameter EN_CIL = "CIL_ENABLED"; + parameter HSEL = "DISABLED"; + parameter LANE0_SEL = "LANE_0"; + parameter LOCK_BYP = "GATE_TXBYTECLKHS"; + parameter MASTER_SLAVE = "SLAVE"; + parameter PLLCLKBYPASS = "REGISTERED"; + parameter RSEL = "0b00"; + parameter RXCDRP = "0b00"; + parameter RXDATAWIDTHHS = "0b00"; + parameter RXLPRP = "0b000"; + parameter TEST_ENBL = "0b000000"; + parameter TEST_PATTERN = "0b00000000000000000000000000000000"; + parameter TST = "0b1001"; + parameter TXDATAWIDTHHS = "0b00"; + parameter U_PRG_HS_PREPARE = "0b00"; + parameter U_PRG_HS_TRAIL = "0b000000"; + parameter U_PRG_HS_ZERO = "0b000000"; + parameter U_PRG_RXHS_SETTLE = "0b000000"; + parameter UC_PRG_HS_PREPARE = "1P0_TXCLKESC"; + parameter UC_PRG_HS_TRAIL = "0b00000"; + parameter UC_PRG_HS_ZERO = "0b0000000"; + parameter UC_PRG_RXHS_SETTLE = "0b000000"; + input BITCKEXT; + (* iopad_external_pin *) + inout CKN; + (* iopad_external_pin *) + inout CKP; + input CLKREF; + output D0ACTIVE1; + output D0ACTIVE0; + output D0BYTCNT9; + output D0BYTCNT8; + output D0BYTCNT7; + output D0BYTCNT6; + output D0BYTCNT5; + output D0BYTCNT4; + output D0BYTCNT3; + output D0BYTCNT2; + output D0BYTCNT1; + output D0BYTCNT0; + output D0ERRCNT9; + output D0ERRCNT8; + output D0ERRCNT7; + output D0ERRCNT6; + output D0ERRCNT5; + output D0ERRCNT4; + output D0ERRCNT3; + output D0ERRCNT2; + output D0ERRCNT1; + output D0ERRCNT0; + output D0PASS1; + output D0PASS0; + output D0VALID1; + output D0VALID0; + output D1ACTIVE1; + output D1ACTIVE0; + output D1BYTCNT9; + output D1BYTCNT8; + output D1BYTCNT7; + output D1BYTCNT6; + output D1BYTCNT5; + output D1BYTCNT4; + output D1BYTCNT3; + output D1BYTCNT2; + output D1BYTCNT1; + output D1BYTCNT0; + output D1ERRCNT9; + output D1ERRCNT8; + output D1ERRCNT7; + output D1ERRCNT6; + output D1ERRCNT5; + output D1ERRCNT4; + output D1ERRCNT3; + output D1ERRCNT2; + output D1ERRCNT1; + output D1ERRCNT0; + output D1PASS1; + output D1PASS0; + output D1VALID1; + output D1VALID0; + output D2ACTIVE1; + output D2ACTIVE0; + output D2BYTCNT9; + output D2BYTCNT8; + output D2BYTCNT7; + output D2BYTCNT6; + output D2BYTCNT5; + output D2BYTCNT4; + output D2BYTCNT3; + output D2BYTCNT2; + output D2BYTCNT1; + output D2BYTCNT0; + output D2ERRCNT9; + output D2ERRCNT8; + output D2ERRCNT7; + output D2ERRCNT6; + output D2ERRCNT5; + output D2ERRCNT4; + output D2ERRCNT3; + output D2ERRCNT2; + output D2ERRCNT1; + output D2ERRCNT0; + output D2PASS1; + output D2PASS0; + output D2VALID1; + output D2VALID0; + output D3ACTIVE1; + output D3ACTIVE0; + output D3BYTCNT9; + output D3BYTCNT8; + output D3BYTCNT7; + output D3BYTCNT6; + output D3BYTCNT5; + output D3BYTCNT4; + output D3BYTCNT3; + output D3BYTCNT2; + output D3BYTCNT1; + output D3BYTCNT0; + output D3ERRCNT9; + output D3ERRCNT8; + output D3ERRCNT7; + output D3ERRCNT6; + output D3ERRCNT5; + output D3ERRCNT4; + output D3ERRCNT3; + output D3ERRCNT2; + output D3ERRCNT1; + output D3ERRCNT0; + output D3PASS1; + output D3PASS0; + output D3VALID1; + output D3VALID0; + output DCTSTOUT9; + output DCTSTOUT8; + output DCTSTOUT7; + output DCTSTOUT6; + output DCTSTOUT5; + output DCTSTOUT4; + output DCTSTOUT3; + output DCTSTOUT2; + output DCTSTOUT1; + output DCTSTOUT0; + (* iopad_external_pin *) + inout DN0; + (* iopad_external_pin *) + inout DN1; + (* iopad_external_pin *) + inout DN2; + (* iopad_external_pin *) + inout DN3; + (* iopad_external_pin *) + inout DP0; + (* iopad_external_pin *) + inout DP1; + (* iopad_external_pin *) + inout DP2; + (* iopad_external_pin *) + inout DP3; + output LOCK; + input PDDPHY; + input PDPLL; + input SCCLKIN; + input SCRSTNIN; + output UDIR; + input UED0THEN; + output UERCLP0; + output UERCLP1; + output UERCTRL; + output UERE; + output UERSTHS; + output UERSSHS; + output UERSE; + input UFRXMODE; + input UTXMDTX; + output URXACTHS; + output URXCKE; + input URXCKINE; + output URXDE7; + output URXDE6; + output URXDE5; + output URXDE4; + output URXDE3; + output URXDE2; + output URXDE1; + output URXDE0; + output URXDHS15; + output URXDHS14; + output URXDHS13; + output URXDHS12; + output URXDHS11; + output URXDHS10; + output URXDHS9; + output URXDHS8; + output URXDHS7; + output URXDHS6; + output URXDHS5; + output URXDHS4; + output URXDHS3; + output URXDHS2; + output URXDHS1; + output URXDHS0; + output URXLPDTE; + output URXSKCHS; + output URXDRX; + output URXSHS3; + output URXSHS2; + output URXSHS1; + output URXSHS0; + output URE0D3DP; + output URE1D3DN; + output URE2CKDP; + output URE3CKDN; + output URXULPSE; + output URXVDE; + output URXVDHS3; + output URXVDHS2; + output URXVDHS1; + output URXVDHS0; + output USSTT; + input UTDIS; + input UTXCKE; + input UDE0D0TN; + input UDE1D1TN; + input UDE2D2TN; + input UDE3D3TN; + input UDE4CKTN; + input UDE5D0RN; + input UDE6D1RN; + input UDE7D2RN; + input UTXDHS31; + input UTXDHS30; + input UTXDHS29; + input UTXDHS28; + input UTXDHS27; + input UTXDHS26; + input UTXDHS25; + input UTXDHS24; + input UTXDHS23; + input UTXDHS22; + input UTXDHS21; + input UTXDHS20; + input UTXDHS19; + input UTXDHS18; + input UTXDHS17; + input UTXDHS16; + input UTXDHS15; + input UTXDHS14; + input UTXDHS13; + input UTXDHS12; + input UTXDHS11; + input UTXDHS10; + input UTXDHS9; + input UTXDHS8; + input UTXDHS7; + input UTXDHS6; + input UTXDHS5; + input UTXDHS4; + input UTXDHS3; + input UTXDHS2; + input UTXDHS1; + input UTXDHS0; + input UTXENER; + output UTXRRS; + output UTXRYP; + output UTXRYSK; + input UTXRD0EN; + input UTRD0SEN; + input UTXSKD0N; + input UTXTGE0; + input UTXTGE1; + input UTXTGE2; + input UTXTGE3; + input UTXULPSE; + input UTXUPSEX; + input UTXVDE; + input UTXWVDHS3; + input UTXWVDHS2; + input UTXWVDHS1; + input UTXWVDHS0; + output UUSAN; + output U1DIR; + input U1ENTHEN; + output U1ERCLP0; + output U1ERCLP1; + output U1ERCTRL; + output U1ERE; + output U1ERSTHS; + output U1ERSSHS; + output U1ERSE; + input U1FRXMD; + input U1FTXST; + output U1RXATHS; + output U1RXCKE; + output U1RXDE7; + output U1RXDE6; + output U1RXDE5; + output U1RXDE4; + output U1RXDE3; + output U1RXDE2; + output U1RXDE1; + output U1RXDE0; + output U1RXDHS15; + output U1RXDHS14; + output U1RXDHS13; + output U1RXDHS12; + output U1RXDHS11; + output U1RXDHS10; + output U1RXDHS9; + output U1RXDHS8; + output U1RXDHS7; + output U1RXDHS6; + output U1RXDHS5; + output U1RXDHS4; + output U1RXDHS3; + output U1RXDHS2; + output U1RXDHS1; + output U1RXDHS0; + output U1RXDTE; + output U1RXSKS; + output U1RXSK; + output U1RXSHS3; + output U1RXSHS2; + output U1RXSHS1; + output U1RXSHS0; + output U1RE0D; + output U1RE1CN; + output U1RE2D; + output U1RE3N; + output U1RXUPSE; + output U1RXVDE; + output U1RXVDHS3; + output U1RXVDHS2; + output U1RXVDHS1; + output U1RXVDHS0; + output U1SSTT; + input U1TDIS; + input U1TREQ; + input U1TDE0D3; + input U1TDE1CK; + input U1TDE2D0; + input U1TDE3D1; + input U1TDE4D2; + input U1TDE5D3; + input U1TDE6; + input U1TDE7; + input U1TXDHS31; + input U1TXDHS30; + input U1TXDHS29; + input U1TXDHS28; + input U1TXDHS27; + input U1TXDHS26; + input U1TXDHS25; + input U1TXDHS24; + input U1TXDHS23; + input U1TXDHS22; + input U1TXDHS21; + input U1TXDHS20; + input U1TXDHS19; + input U1TXDHS18; + input U1TXDHS17; + input U1TXDHS16; + input U1TXDHS15; + input U1TXDHS14; + input U1TXDHS13; + input U1TXDHS12; + input U1TXDHS11; + input U1TXDHS10; + input U1TXDHS9; + input U1TXDHS8; + input U1TXDHS7; + input U1TXDHS6; + input U1TXDHS5; + input U1TXDHS4; + input U1TXDHS3; + input U1TXDHS2; + input U1TXDHS1; + input U1TXDHS0; + input U1TXLPD; + output U1TXRYE; + output U1TXRY; + output U1TXRYSK; + input U1TXREQ; + input U1TXREQH; + input U1TXSK; + input U1TXTGE0; + input U1TXTGE1; + input U1TXTGE2; + input U1TXTGE3; + input U1TXUPSE; + input U1TXUPSX; + input U1TXVDE; + input U1TXWVHS3; + input U1TXWVHS2; + input U1TXWVHS1; + input U1TXWVHS0; + output U1USAN; + output U2DIR; + input U2END2; + output U2ERCLP0; + output U2ERCLP1; + output U2ERCTRL; + output U2ERE; + output U2ERSTHS; + output U2ERSSHS; + output U2ERSE; + input U2FRXMD; + input U2FTXST; + output U2RXACHS; + output U2RXCKE; + output U2RXDE7; + output U2RXDE6; + output U2RXDE5; + output U2RXDE4; + output U2RXDE3; + output U2RXDE2; + output U2RXDE1; + output U2RXDE0; + output U2RXDHS15; + output U2RXDHS14; + output U2RXDHS13; + output U2RXDHS12; + output U2RXDHS11; + output U2RXDHS10; + output U2RXDHS9; + output U2RXDHS8; + output U2RXDHS7; + output U2RXDHS6; + output U2RXDHS5; + output U2RXDHS4; + output U2RXDHS3; + output U2RXDHS2; + output U2RXDHS1; + output U2RXDHS0; + output U2RPDTE; + output U2RXSK; + output U2RXSKC; + output U2RXSHS3; + output U2RXSHS2; + output U2RXSHS1; + output U2RXSHS0; + output U2RE0D2; + output U2RE1D2; + output U2RE2D3; + output U2RE3D3; + output U2RXUPSE; + output U2RXVDE; + output U2RXVDHS3; + output U2RXVDHS2; + output U2RXVDHS1; + output U2RXVDHS0; + output U2SSTT; + input U2TDIS; + input U2TREQ; + input U2TDE0D0; + input U2TDE1D1; + input U2TDE2D2; + input U2TDE3D3; + input U2TDE4CK; + input U2TDE5D0; + input U2TDE6D1; + input U2TDE7D2; + input U2TXDHS31; + input U2TXDHS30; + input U2TXDHS29; + input U2TXDHS28; + input U2TXDHS27; + input U2TXDHS26; + input U2TXDHS25; + input U2TXDHS24; + input U2TXDHS23; + input U2TXDHS22; + input U2TXDHS21; + input U2TXDHS20; + input U2TXDHS19; + input U2TXDHS18; + input U2TXDHS17; + input U2TXDHS16; + input U2TXDHS15; + input U2TXDHS14; + input U2TXDHS13; + input U2TXDHS12; + input U2TXDHS11; + input U2TXDHS10; + input U2TXDHS9; + input U2TXDHS8; + input U2TXDHS7; + input U2TXDHS6; + input U2TXDHS5; + input U2TXDHS4; + input U2TXDHS3; + input U2TXDHS2; + input U2TXDHS1; + input U2TXDHS0; + input U2TPDTE; + output U2TXRYE; + output U2TXRYH; + output U2TXRYSK; + input U2TXREQ; + input U2TXREQH; + input U2TXSKC; + input U2TXTGE0; + input U2TXTGE1; + input U2TXTGE2; + input U2TXTGE3; + input U2TXUPSE; + input U2TXUPSX; + input U2TXVDE; + input U2TXWVHS3; + input U2TXWVHS2; + input U2TXWVHS1; + input U2TXWVHS0; + output U2USAN; + output U3DIR; + input U3END3; + output U3ERCLP0; + output U3ERCLP1; + output U3ERCTRL; + output U3ERE; + output U3ERSTHS; + output U3ERSSHS; + output U3ERSE; + input U3FRXMD; + input U3FTXST; + output U3RXATHS; + output U3RXCKE; + output U3RXDE7; + output U3RXDE6; + output U3RXDE5; + output U3RXDE4; + output U3RXDE3; + output U3RXDE2; + output U3RXDE1; + output U3RXDE0; + output U3RXDHS15; + output U3RXDHS14; + output U3RXDHS13; + output U3RXDHS12; + output U3RXDHS11; + output U3RXDHS10; + output U3RXDHS9; + output U3RXDHS8; + output U3RXDHS7; + output U3RXDHS6; + output U3RXDHS5; + output U3RXDHS4; + output U3RXDHS3; + output U3RXDHS2; + output U3RXDHS1; + output U3RXDHS0; + output U3RPDTE; + output U3RXSK; + output U3RXSKC; + output U3RXSHS3; + output U3RXSHS2; + output U3RXSHS1; + output U3RXSHS0; + output U3RE0CK; + output U3RE1CK; + output U3RE2; + output U3RE3; + output U3RXUPSE; + output U3RXVDE; + output U3RXVDHS3; + output U3RXVDHS2; + output U3RXVDHS1; + output U3RXVDHS0; + output U3SSTT; + input U3TDISD2; + input U3TREQD2; + input U3TDE0D3; + input U3TDE1D0; + input U3TDE2D1; + input U3TDE3D2; + input U3TDE4D3; + input U3TDE5CK; + input U3TDE6; + input U3TDE7; + input U3TXDHS31; + input U3TXDHS30; + input U3TXDHS29; + input U3TXDHS28; + input U3TXDHS27; + input U3TXDHS26; + input U3TXDHS25; + input U3TXDHS24; + input U3TXDHS23; + input U3TXDHS22; + input U3TXDHS21; + input U3TXDHS20; + input U3TXDHS19; + input U3TXDHS18; + input U3TXDHS17; + input U3TXDHS16; + input U3TXDHS15; + input U3TXDHS14; + input U3TXDHS13; + input U3TXDHS12; + input U3TXDHS11; + input U3TXDHS10; + input U3TXDHS9; + input U3TXDHS8; + input U3TXDHS7; + input U3TXDHS6; + input U3TXDHS5; + input U3TXDHS4; + input U3TXDHS3; + input U3TXDHS2; + input U3TXDHS1; + input U3TXDHS0; + input U3TXLPDT; + output U3TXRY; + output U3TXRYHS; + output U3TXRYSK; + input U3TXREQ; + input U3TXREQH; + input U3TXSKC; + input U3TXTGE0; + input U3TXTGE1; + input U3TXTGE2; + input U3TXTGE3; + input U3TXULPS; + input U3TXUPSX; + input U3TXVD3; + input U3TXWVHS3; + input U3TXWVHS2; + input U3TXWVHS1; + input U3TXWVHS0; + output U3USAN; + input UCENCK; + output UCRXCKAT; + output UCRXUCKN; + output UCSSTT; + input UCTXREQH; + input UCTXUPSC; + input UCTXUPSX; + output UCUSAN; + input SCANCLK; + input SCANRST; + input LMMICLK; + input LMMIOFFSET4; + input LMMIOFFSET3; + input LMMIOFFSET2; + input LMMIOFFSET1; + input LMMIOFFSET0; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIREQUEST; + input LMMIRESETN; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + input LMMIWRRDN; + input LTSTEN; + input LTSTLANE1; + input LTSTLANE0; + output URWDCKHS; + input UTRNREQ; + output UTWDCKHS; + output UCRXWCHS; + input OPCGLDCK; + output CLKLBACT; +endmodule + +module DQSBUF_CORE (...); + parameter GSR = "ENABLED"; + parameter ENABLE_FIFO = "DISABLED"; + parameter FORCE_READ = "DISABLED"; + parameter FREE_WHEEL = "DDR"; + parameter MODX = "NOT_USED"; + parameter MT_EN_READ = "DISABLED"; + parameter MT_EN_WRITE = "DISABLED"; + parameter MT_EN_WRITE_LEVELING = "DISABLED"; + parameter RD_PNTR = "0b000"; + parameter READ_ENABLE = "DISABLED"; + parameter RX_CENTERED = "ENABLED"; + parameter S_READ = "0"; + parameter S_WRITE = "0"; + parameter SIGN_READ = "POSITIVE"; + parameter SIGN_WRITE = "POSITIVE"; + parameter UPDATE_QU = "UP1_AND_UP0_SAME"; + parameter WRITE_ENABLE = "DISABLED"; + parameter SEL_READ_BIT_ENABLE_CYCLES = "NORMAL"; + parameter BYPASS_WR_LEVEL_SMTH_LATCH = "SMOOTHING_PATH"; + parameter BYPASS_WR_SMTH_LATCH = "SMOOTHING_PATH"; + parameter BYPASS_READ_SMTH_LATCH = "SMOOTHING_PATH"; + output BTDETECT; + output BURSTDETECT; + output DATAVALID; + input DQSI; + output DQSW; + output DQSWRD; + input PAUSE; + input RDCLKSEL3; + input RDCLKSEL2; + input RDCLKSEL1; + input RDCLKSEL0; + input RDDIR; + input RDLOADN; + output RDPNTR2; + output RDPNTR1; + output RDPNTR0; + input READ3; + input READ2; + input READ1; + input READ0; + output READCOUT; + input READMOVE; + input RST; + input SCLK; + input SELCLK; + output DQSR90; + output DQSW270; + output WRCOUT; + input WRDIR; + input WRLOAD_N; + output WRLVCOUT; + input WRLVDIR; + input WRLVLOAD_N; + input WRLVMOVE; + input WRMOVE; + output WRPNTR2; + output WRPNTR1; + output WRPNTR0; + input ECLKIN; + input RSTSMCNT; + input DLLCODE8; + input DLLCODE7; + input DLLCODE6; + input DLLCODE5; + input DLLCODE4; + input DLLCODE3; + input DLLCODE2; + input DLLCODE1; + input DLLCODE0; +endmodule + +module ECLKDIV_CORE (...); + parameter ECLK_DIV = "DISABLE"; + parameter GSR = "ENABLED"; + output DIVOUT; + input DIVRST; + input ECLKIN; + input SLIP; + input TESTINP3; + input TESTINP2; + input TESTINP1; + input TESTINP0; +endmodule + +module ECLKSYNC_CORE (...); + parameter STOP_EN = "DISABLE"; + input ECLKIN; + output ECLKOUT; + input STOP; +endmodule + +module FBMUX_CORE (...); + parameter INTFB = "IGNORED"; + parameter SEL_FBK = "DIVA"; + parameter CLKMUX_FB = "CMUX_CLKOP"; + parameter INTFBKDEL_SEL = "DISABLED"; + output ENEXT; + output FBKCK; + input LGYRDYN; + input INTLOCK; + input WKUPSYNC; + input FBKCLK15; + input FBKCLK14; + input FBKCLK13; + input FBKCLK12; + input FBKCLK11; + input FBKCLK10; + input FBKCLK9; + input FBKCLK8; + input FBKCLK7; + input FBKCLK6; + input FBKCLK5; + input FBKCLK4; + input FBKCLK3; + input FBKCLK2; + input FBKCLK1; + input FBKCLK0; +endmodule + +module I2CFIFO_CORE (...); + parameter BRNBASEDELAY = "0b0000"; + parameter CR1CKDIS = "EN"; + parameter CR1FIFOMODE = "REG"; + parameter CR1GCEN = "DIS"; + parameter CR1I2CEN = "DIS"; + parameter CR1SDADELSEL = "NDLY0"; + parameter CR1SLPCLKEN = "DIS"; + parameter CR2CORERSTN = "DIS"; + parameter CR2HARDTIE = "TIE"; + parameter CR2INTCLREN = "DIS"; + parameter CR2MRDCMPLWKUP = "DIS"; + parameter CR2RXFIFOAFWKUP = "DIS"; + parameter CR2SLVADDRWKUP = "DIS"; + parameter GSR = "ENABLED"; + parameter I2CRXFIFOAFVAL = "0b00000"; + parameter I2CSLVADDRA = "0b0000000000"; + parameter I2CTXFIFOAEVAL = "0b0000"; + parameter INTARBLIE = "DIS"; + parameter INTBUSFREEIE = "DIS"; + parameter INTHGCIE = "DIS"; + parameter INTMRDCMPLIE = "DIS"; + parameter INTRNACKIEORRSVD = "DIS"; + parameter INTRSVDORTROEIE = "DIS"; + parameter INTRSVDORTRRDYIE = "DIS"; + parameter INTRXOVERFIEORRSVD = "DIS"; + parameter INTRXUNDERFIE = "DIS"; + parameter INTTXOVERFIE = "DIS"; + parameter INTTXSERRIEORRSVD = "DIS"; + parameter LMMI_EXTRA_ONE = "DIS"; + parameter LMMI_EXTRA_TWO = "DIS"; + parameter NCRALTIOEN = "FABRIC"; + parameter NCRFILTERDIS = "EN"; + parameter NCRSDAINDLYEN = "DIS"; + parameter NCRSDAOUTDLYEN = "DIS"; + parameter NONUSRTESTSOFTTRIMEN = "DIS"; + parameter NONUSRTSTSOFTTRIMVALUE = "0b000"; + parameter REGI2CBR = "0b0000000000"; + parameter TSPTIMERVALUE = "0b10010010111"; + input ALTSCLIN; + output ALTSCLOEN; + output ALTSCLOUT; + input ALTSDAIN; + output ALTSDAOEN; + output ALTSDAOUT; + output BUSBUSY; + input FIFORESET; + input I2CLSRRSTN; + output INSLEEP; + output IRQ; + input LMMICLK; + input LMMIOFFSET5; + input LMMIOFFSET4; + input LMMIOFFSET3; + input LMMIOFFSET2; + input LMMIOFFSET1; + input LMMIOFFSET0; + output LMMIRDATA7; + output LMMIRDATA6; + output LMMIRDATA5; + output LMMIRDATA4; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIREQUEST; + input LMMIRESETN; + input LMMIWDATA7; + input LMMIWDATA6; + input LMMIWDATA5; + input LMMIWDATA4; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + input LMMIWRRDN; + output MRDCMPL; + input OPCGLOADCLK; + output RXFIFOAF; + output RXFIFOE; + output RXFIFOF; + input SCANCLK; + input SCANRST; + input SCLIN; + output SCLOE; + output SCLOEN; + output SCLOUT; + input SDAIN; + output SDAOE; + output SDAOEN; + output SDAOUT; + input SLEEPCLKSELN; + output SLVADDRMATCH; + output SLVADDRMATCHSCL; + output SRDWR; + output TXFIFOAE; + output TXFIFOE; + output TXFIFOF; +endmodule + +module LRAM_CORE (...); + parameter INITVAL_00 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_01 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_02 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_03 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_04 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_05 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_06 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_07 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_08 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_09 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_1F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_20 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_21 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_22 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_23 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_24 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_25 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_26 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_27 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_28 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_29 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_2F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_30 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_31 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_32 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_33 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_34 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_35 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_36 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_37 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_38 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_39 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_3F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_40 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_41 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_42 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_43 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_44 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_45 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_46 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_47 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_48 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_49 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_4F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_50 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_51 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_52 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_53 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_54 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_55 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_56 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_57 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_58 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_59 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_5F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_60 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_61 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_62 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_63 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_64 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_65 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_66 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_67 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_68 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_69 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_6F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_70 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_71 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_72 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_73 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_74 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_75 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_76 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_77 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_78 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_79 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter INITVAL_7F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ASYNC_RST_RELEASE = "SYNC"; + parameter CFG_INIT_ID = "0b00000000000"; + parameter DATA_PRESERVE = "DISABLE"; + parameter EBR_SP_EN = "DISABLE"; + parameter ECC_BYTE_SEL = "ECC_EN"; + parameter GSR = "ENABLED"; + parameter OUT_REGMODE_A = "NO_REG"; + parameter OUT_REGMODE_B = "NO_REG"; + parameter RESETMODE = "SYNC"; + parameter RST_AB_EN = "RESET_AB_DISABLE"; + parameter SP_EN = "DISABLE"; + parameter UNALIGNED_READ = "DISABLE"; + input ADA13; + input ADA12; + input ADA11; + input ADA10; + input ADA9; + input ADA8; + input ADA7; + input ADA6; + input ADA5; + input ADA4; + input ADA3; + input ADA2; + input ADA1; + input ADA0; + input ADB13; + input ADB12; + input ADB11; + input ADB10; + input ADB9; + input ADB8; + input ADB7; + input ADB6; + input ADB5; + input ADB4; + input ADB3; + input ADB2; + input ADB1; + input ADB0; + input BENA_N3; + input BENA_N2; + input BENA_N1; + input BENA_N0; + input BENB_N3; + input BENB_N2; + input BENB_N1; + input BENB_N0; + input CEA; + input CEB; + input CLK; + input CSA; + input CSB; + input DIA31; + input DIA30; + input DIA29; + input DIA28; + input DIA27; + input DIA26; + input DIA25; + input DIA24; + input DIA23; + input DIA22; + input DIA21; + input DIA20; + input DIA19; + input DIA18; + input DIA17; + input DIA16; + input DIA15; + input DIA14; + input DIA13; + input DIA12; + input DIA11; + input DIA10; + input DIA9; + input DIA8; + input DIA7; + input DIA6; + input DIA5; + input DIA4; + input DIA3; + input DIA2; + input DIA1; + input DIA0; + input DIB31; + input DIB30; + input DIB29; + input DIB28; + input DIB27; + input DIB26; + input DIB25; + input DIB24; + input DIB23; + input DIB22; + input DIB21; + input DIB20; + input DIB19; + input DIB18; + input DIB17; + input DIB16; + input DIB15; + input DIB14; + input DIB13; + input DIB12; + input DIB11; + input DIB10; + input DIB9; + input DIB8; + input DIB7; + input DIB6; + input DIB5; + input DIB4; + input DIB3; + input DIB2; + input DIB1; + input DIB0; + output DOA31; + output DOA30; + output DOA29; + output DOA28; + output DOA27; + output DOA26; + output DOA25; + output DOA24; + output DOA23; + output DOA22; + output DOA21; + output DOA20; + output DOA19; + output DOA18; + output DOA17; + output DOA16; + output DOA15; + output DOA14; + output DOA13; + output DOA12; + output DOA11; + output DOA10; + output DOA9; + output DOA8; + output DOA7; + output DOA6; + output DOA5; + output DOA4; + output DOA3; + output DOA2; + output DOA1; + output DOA0; + output DOB31; + output DOB30; + output DOB29; + output DOB28; + output DOB27; + output DOB26; + output DOB25; + output DOB24; + output DOB23; + output DOB22; + output DOB21; + output DOB20; + output DOB19; + output DOB18; + output DOB17; + output DOB16; + output DOB15; + output DOB14; + output DOB13; + output DOB12; + output DOB11; + output DOB10; + output DOB9; + output DOB8; + output DOB7; + output DOB6; + output DOB5; + output DOB4; + output DOB3; + output DOB2; + output DOB1; + output DOB0; + input DPS; + output ERRDECA1; + output ERRDECA0; + output ERRDECB1; + output ERRDECB0; + input IGN; + input INITN; + input OCEA; + input OCEB; + output OEA; + output OEB; + input RSTA; + input RSTB; + input STDBYN; + input TBISTN; + input WEA; + input WEB; + output ERRDET; + output LRAMREADY; + input OPCGLOADCLK; + input SCANCLK; + input SCANRST; +endmodule + +module MULT18_CORE (...); + parameter SFTEN = "DISABLED"; + parameter MULT18X18 = "ENABLED"; + parameter ROUNDHALFUP = "DISABLED"; + parameter ROUNDRTZI = "ROUND_TO_ZERO"; + parameter ROUNDBIT = "ROUND_TO_BIT0"; + input SFTCTRL3; + input SFTCTRL2; + input SFTCTRL1; + input SFTCTRL0; + input ARHSIGN; + input BRHSIGN; + input ARH8; + input ARH7; + input ARH6; + input ARH5; + input ARH4; + input ARH3; + input ARH2; + input ARH1; + input ARH0; + input BRH8; + input BRH7; + input BRH6; + input BRH5; + input BRH4; + input BRH3; + input BRH2; + input BRH1; + input BRH0; + input ARL8; + input ARL7; + input ARL6; + input ARL5; + input ARL4; + input ARL3; + input ARL2; + input ARL1; + input ARL0; + input BRL8; + input BRL7; + input BRL6; + input BRL5; + input BRL4; + input BRL3; + input BRL2; + input BRL1; + input BRL0; + input PL1819; + input PL1818; + input PL1817; + input PL1816; + input PL1815; + input PL1814; + input PL1813; + input PL1812; + input PL1811; + input PL1810; + input PL189; + input PL188; + input PL187; + input PL186; + input PL185; + input PL184; + input PL183; + input PL182; + input PL181; + input PL180; + input PH1819; + input PH1818; + input PH1817; + input PH1816; + input PH1815; + input PH1814; + input PH1813; + input PH1812; + input PH1811; + input PH1810; + input PH189; + input PH188; + input PH187; + input PH186; + input PH185; + input PH184; + input PH183; + input PH182; + input PH181; + input PH180; + output SIGNED18; + output P3637; + output P3636; + output P3635; + output P3634; + output P3633; + output P3632; + output P3631; + output P3630; + output P3629; + output P3628; + output P3627; + output P3626; + output P3625; + output P3624; + output P3623; + output P3622; + output P3621; + output P3620; + output P3619; + output P3618; + output P3617; + output P3616; + output P3615; + output P3614; + output P3613; + output P3612; + output P3611; + output P3610; + output P369; + output P368; + output P367; + output P366; + output P365; + output P364; + output P363; + output P362; + output P361; + output P360; + input ROUNDEN; +endmodule + +module MULT18X36_CORE (...); + parameter SFTEN = "DISABLED"; + parameter MULT18X36 = "ENABLED"; + parameter MULT36 = "DISABLED"; + parameter MULT36X36H = "USED_AS_LOWER_BIT_GENERATION"; + parameter ROUNDHALFUP = "DISABLED"; + parameter ROUNDRTZI = "ROUND_TO_ZERO"; + parameter ROUNDBIT = "ROUND_TO_BIT0"; + input SFTCTRL3; + input SFTCTRL2; + input SFTCTRL1; + input SFTCTRL0; + input PH3637; + input PH3636; + input PH3635; + input PH3634; + input PH3633; + input PH3632; + input PH3631; + input PH3630; + input PH3629; + input PH3628; + input PH3627; + input PH3626; + input PH3625; + input PH3624; + input PH3623; + input PH3622; + input PH3621; + input PH3620; + input PH3619; + input PH3618; + input PH3617; + input PH3616; + input PH3615; + input PH3614; + input PH3613; + input PH3612; + input PH3611; + input PH3610; + input PH369; + input PH368; + input PH367; + input PH366; + input PH365; + input PH364; + input PH363; + input PH362; + input PH361; + input PH360; + input PL3637; + input PL3636; + input PL3635; + input PL3634; + input PL3633; + input PL3632; + input PL3631; + input PL3630; + input PL3629; + input PL3628; + input PL3627; + input PL3626; + input PL3625; + input PL3624; + input PL3623; + input PL3622; + input PL3621; + input PL3620; + input PL3619; + input PL3618; + input PL3617; + input PL3616; + input PL3615; + input PL3614; + input PL3613; + input PL3612; + input PL3611; + input PL3610; + input PL369; + input PL368; + input PL367; + input PL366; + input PL365; + input PL364; + input PL363; + input PL362; + input PL361; + input PL360; + input SGNED18H; + input SGNED18L; + output P7272; + output P7271; + output P7270; + output P7269; + output P7268; + output P7267; + output P7266; + output P7265; + output P7264; + output P7263; + output P7262; + output P7261; + output P7260; + output P7259; + output P7258; + output P7257; + output P7256; + output P7255; + output P7254; + output P7253; + output P7252; + output P7251; + output P7250; + output P7249; + output P7248; + output P7247; + output P7246; + output P7245; + output P7244; + output P7243; + output P7242; + output P7241; + output P7240; + output P7239; + output P7238; + output P7237; + output P7236; + output P7235; + output P7234; + output P7233; + output P7232; + output P7231; + output P7230; + output P7229; + output P7228; + output P7227; + output P7226; + output P7225; + output P7224; + output P7223; + output P7222; + output P7221; + output P7220; + output P7219; + output P7218; + output P7217; + output P7216; + output P7215; + output P7214; + output P7213; + output P7212; + output P7211; + output P7210; + output P729; + output P728; + output P727; + output P726; + output P725; + output P724; + output P723; + output P722; + output P721; + output P720; + input ROUNDEN; +endmodule + +module MULT36_CORE (...); + parameter MULT36X36 = "ENABLED"; + input PH7272; + input PH7271; + input PH7270; + input PH7269; + input PH7268; + input PH7267; + input PH7266; + input PH7265; + input PH7264; + input PH7263; + input PH7262; + input PH7261; + input PH7260; + input PH7259; + input PH7258; + input PH7257; + input PH7256; + input PH7255; + input PH7254; + input PH7253; + input PH7252; + input PH7251; + input PH7250; + input PH7249; + input PH7248; + input PH7247; + input PH7246; + input PH7245; + input PH7244; + input PH7243; + input PH7242; + input PH7241; + input PH7240; + input PH7239; + input PH7238; + input PH7237; + input PH7236; + input PH7235; + input PH7234; + input PH7233; + input PH7232; + input PH7231; + input PH7230; + input PH7229; + input PH7228; + input PH7227; + input PH7226; + input PH7225; + input PH7224; + input PH7223; + input PH7222; + input PH7221; + input PH7220; + input PH7219; + input PH7218; + input PH7217; + input PH7216; + input PH7215; + input PH7214; + input PH7213; + input PH7212; + input PH7211; + input PH7210; + input PH729; + input PH728; + input PH727; + input PH726; + input PH725; + input PH724; + input PH723; + input PH722; + input PH721; + input PH720; + input PL7272; + input PL7271; + input PL7270; + input PL7269; + input PL7268; + input PL7267; + input PL7266; + input PL7265; + input PL7264; + input PL7263; + input PL7262; + input PL7261; + input PL7260; + input PL7259; + input PL7258; + input PL7257; + input PL7256; + input PL7255; + input PL7254; + input PL7253; + input PL7252; + input PL7251; + input PL7250; + input PL7249; + input PL7248; + input PL7247; + input PL7246; + input PL7245; + input PL7244; + input PL7243; + input PL7242; + input PL7241; + input PL7240; + input PL7239; + input PL7238; + input PL7237; + input PL7236; + input PL7235; + input PL7234; + input PL7233; + input PL7232; + input PL7231; + input PL7230; + input PL7229; + input PL7228; + input PL7227; + input PL7226; + input PL7225; + input PL7224; + input PL7223; + input PL7222; + input PL7221; + input PL7220; + input PL7219; + input PL7218; + input PL7217; + input PL7216; + input PL7215; + input PL7214; + input PL7213; + input PL7212; + input PL7211; + input PL7210; + input PL729; + input PL728; + input PL727; + input PL726; + input PL725; + input PL724; + input PL723; + input PL722; + input PL721; + input PL720; + output PML7271; + output PML7270; + output PML7269; + output PML7268; + output PML7267; + output PML7266; + output PML7265; + output PML7264; + output PML7263; + output PML7262; + output PML7261; + output PML7260; + output PML7259; + output PML7258; + output PML7257; + output PML7256; + output PML7255; + output PML7254; + output PML7253; + output PML7252; + output PML7251; + output PML7250; + output PML7249; + output PML7248; + output PML7247; + output PML7246; + output PML7245; + output PML7244; + output PML7243; + output PML7242; + output PML7241; + output PML7240; + output PML7239; + output PML7238; + output PML7237; + output PML7236; + output PML7235; + output PML7234; + output PML7233; + output PML7232; + output PML7231; + output PML7230; + output PML7229; + output PML7228; + output PML7227; + output PML7226; + output PML7225; + output PML7224; + output PML7223; + output PML7222; + output PML7221; + output PML7220; + output PML7219; + output PML7218; + output PML7217; + output PML7216; + output PML7215; + output PML7214; + output PML7213; + output PML7212; + output PML7211; + output PML7210; + output PML729; + output PML728; + output PML727; + output PML726; + output PML725; + output PML724; + output PML723; + output PML722; + output PML721; + output PML720; + output PMH7271; + output PMH7270; + output PMH7269; + output PMH7268; + output PMH7267; + output PMH7266; + output PMH7265; + output PMH7264; + output PMH7263; + output PMH7262; + output PMH7261; + output PMH7260; + output PMH7259; + output PMH7258; + output PMH7257; + output PMH7256; + output PMH7255; + output PMH7254; + output PMH7253; + output PMH7252; + output PMH7251; + output PMH7250; + output PMH7249; + output PMH7248; + output PMH7247; + output PMH7246; + output PMH7245; + output PMH7244; + output PMH7243; + output PMH7242; + output PMH7241; + output PMH7240; + output PMH7239; + output PMH7238; + output PMH7237; + output PMH7236; + output PMH7235; + output PMH7234; + output PMH7233; + output PMH7232; + output PMH7231; + output PMH7230; + output PMH7229; + output PMH7228; + output PMH7227; + output PMH7226; + output PMH7225; + output PMH7224; + output PMH7223; + output PMH7222; + output PMH7221; + output PMH7220; + output PMH7219; + output PMH7218; + output PMH7217; + output PMH7216; + output PMH7215; + output PMH7214; + output PMH7213; + output PMH7212; + output PMH7211; + output PMH7210; + output PMH729; + output PMH728; + output PMH727; + output PMH726; + output PMH725; + output PMH724; + output PMH723; + output PMH722; + output PMH721; + output PMH720; +endmodule + +module MULT9_CORE (...); + parameter SIGNEDSTATIC_EN = "DISABLED"; + parameter ASIGNED_OPERAND_EN = "DISABLED"; + parameter BYPASS_MULT9 = "USED"; + parameter REGBYPSB = "REGISTER"; + parameter REGBYPSA1 = "REGISTER"; + parameter REGBYPSA2 = "REGISTER"; + parameter SHIFTA = "DISABLED"; + parameter SR_18BITSHIFT_EN = "DISABLED"; + parameter GSR = "ENABLED"; + parameter RESET = "SYNC"; + input A8; + input A7; + input A6; + input A5; + input A4; + input A3; + input A2; + input A1; + input A0; + input ASIGNED; + input BR8; + input BR7; + input BR6; + input BR5; + input BR4; + input BR3; + input BR2; + input BR1; + input BR0; + input AS18; + input AS17; + input AS16; + input AS15; + input AS14; + input AS13; + input AS12; + input AS11; + input AS10; + input AS28; + input AS27; + input AS26; + input AS25; + input AS24; + input AS23; + input AS22; + input AS21; + input AS20; + input ASSIGNED1; + input ASSIGNED2; + input BRSIGNED; + input CLK; + input CEA; + input RSTA; + output AO8; + output AO7; + output AO6; + output AO5; + output AO4; + output AO3; + output AO2; + output AO1; + output AO0; + output BO8; + output BO7; + output BO6; + output BO5; + output BO4; + output BO3; + output BO2; + output BO1; + output BO0; + output AOSIGNED; + output BOSIGNED; + output AR8; + output AR7; + output AR6; + output AR5; + output AR4; + output AR3; + output AR2; + output AR1; + output AR0; + output ARSIGNED; + output P1819; + output P1818; + output P1817; + output P1816; + output P1815; + output P1814; + output P1813; + output P1812; + output P1811; + output P1810; + output P189; + output P188; + output P187; + output P186; + output P185; + output P184; + output P183; + output P182; + output P181; + output P180; + input CEP; + input RSTP; +endmodule + +module OSC_CORE (...); + parameter DTR_EN = "ENABLED"; + parameter HF_CLK_DIV = "1"; + parameter HF_SED_SEC_DIV = "1"; + parameter HF_FABRIC_EN = "DISABLED"; + parameter HF_OSC_EN = "ENABLED"; + parameter HFDIV_FABRIC_EN = "ENABLED"; + parameter LF_FABRIC_EN = "DISABLED"; + parameter LF_OUTPUT_EN = "DISABLED"; + parameter DEBUG_N = "DISABLED"; + output HFCLKOUT; + input HFOUTEN; + input HFSDSCEN; + input HFTRMFAB8; + input HFTRMFAB7; + input HFTRMFAB6; + input HFTRMFAB5; + input HFTRMFAB4; + input HFTRMFAB3; + input HFTRMFAB2; + input HFTRMFAB1; + input HFTRMFAB0; + output LFCLKOUT; + input LFTRMFAB8; + input LFTRMFAB7; + input LFTRMFAB6; + input LFTRMFAB5; + input LFTRMFAB4; + input LFTRMFAB3; + input LFTRMFAB2; + input LFTRMFAB1; + input LFTRMFAB0; + output HFCLKCFG; + output HFSDCOUT; +endmodule + +module PCIE_CORE (...); + parameter ENABLE_USER_CFG = "DISABLED"; + parameter PWDN_N = "DISABLED"; + parameter GSR = "ENABLED"; + parameter IDDQ_PCS = "DISABLED"; + parameter PHY_MODE = "0b0000"; + parameter ALT_CLK_SEL_VCC = "PAD"; + parameter L0S_ADJ = "0b00000110000000"; + parameter L0S_EXIT_LATENCY = "MORE_4_US"; + parameter L1_EXIT_LATENCY = "MORE_64_US"; + parameter CALIB_3DB = "ENABLED"; + parameter DB_UPSTREAM = "6DB"; + parameter ERR_REC_ENTRY_SEL = "RCVRY_AFTER"; + parameter A_CHNGD_MAX = "0b100"; + parameter A0_FORCE = "DISABLED"; + parameter A0_FREEZE = "DISABLED"; + parameter A0_INIT = "0b000000"; + parameter A0DIR_VAL = "DISABLED"; + parameter A1_FORCE = "DISABLED"; + parameter A1_FREEZE = "DISABLED"; + parameter A1_INIT = "0b000000"; + parameter A1DIR_VAL = "DISABLED"; + parameter A2_FORCE = "DISABLED"; + parameter A2_FREEZE = "DISABLED"; + parameter A2_INIT = "0b000000"; + parameter A2GAIN_CALIB = "0b100110"; + parameter ACJTAG_REG = "0b00"; + parameter ADDR_LIMIT_PRE_MTHD_CTRL = "0b0100"; + parameter ADDR_LIMIT_TABLE_MTHD_CTRL = "0b00101"; + parameter ADIR_OVR = "DISABLED"; + parameter ADV_CH_CD_SEL = "IMPLEMENT_CH"; + parameter ADV_TARGET_LINK_SPEED_USPORT_A = "DISABLED"; + parameter ADV_TARGET_LINK_SPEED_USPORT_B = "DISABLED"; + parameter ADV_TARGET_LINK_SPEED_USPORT_C = "DISABLED"; + parameter ADV_TARGET_LINK_SPEED_USPORT_D = "DISABLED"; + parameter ADVANCE = "DISABLED"; + parameter ALERT_ENABLE = "0b000"; + parameter ALMOST_EMPTY_10B = "0b001110"; + parameter MID_VALUE_10B = "0b011110"; + parameter ALMOST_EMPTY_20B = "0b001111"; + parameter ALMOST_EMPTY_GEN3 = "0b001100"; + parameter ALMOST_FULL_10B = "0b110000"; + parameter ALMOST_FULL_20B = "0b011000"; + parameter ALMOST_FULL_GEN3 = "0b010110"; + parameter ARRAY_DA = "0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter ARRAY_MT = "0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000011100000000000010000000000000001001000000000000011000000000000001010000000000000100"; + parameter ARXCDRICP_RATE0 = "0b011"; + parameter ARXCDRICP_RATE1 = "0b011"; + parameter ARXCDRICP_RATE2 = "0b011"; + parameter ARXDMPWRDWN = "DISABLED"; + parameter ARXDPPWRDN = "DISABLED"; + parameter ARXEOM_PWRDN = "POWERED_DOWN"; + parameter ARXICP_RATE0 = "0b011"; + parameter ARXICP_RATE1 = "0b011"; + parameter ARXICP_RATE2 = "0b011"; + parameter ARXOVR_OUT = "DISABLED"; + parameter ARXRSACTAT = "0b0001"; + parameter ARXRSAPTAT = "0b1000"; + parameter ARXRSVCTL = "0b00000000"; + parameter ARXSEL_OUT = "DISABLED"; + parameter ASPM_L1_1_SUPPORTED = "SUPPORTED"; + parameter ASPM_L1_2_SUPPORTED = "SUPPORTED"; + parameter ASPM_SUPPORT = "L0S_AND_L1_SUPPORTED"; + parameter ATTENTION_BUTTON_PRESENT = "NOT_SUPPORTED"; + parameter ATTENTION_INDICATOR_PRESENT = "NOT_SUPPORTED"; + parameter ATXICP_RATE0 = "0b101"; + parameter ATXICP_RATE1 = "0b101"; + parameter AUTO_SHIFT = "ENABLED"; + parameter AUX_CURRENT = "SELF_POWERED"; + parameter AUXCLK1US_MAX = "0b00001001"; + parameter AUXIDL_MAX = "0b00000100"; + parameter BAR_INDEX_CFG0_A = "0b000"; + parameter BAR_INDEX_CFG0_B = "0b000"; + parameter BAR_INDEX_CFG0_C = "0b000"; + parameter BAR_INDEX_CFG0_D = "0b000"; + parameter BAR_INDEX_CFG1_A = "0b001"; + parameter BAR_INDEX_CFG1_B = "0b001"; + parameter BAR_INDEX_CFG1_C = "0b001"; + parameter BAR_INDEX_CFG1_D = "0b001"; + parameter BAR_INDEX_CFG2_A = "0b010"; + parameter BAR_INDEX_CFG2_B = "0b010"; + parameter BAR_INDEX_CFG2_C = "0b010"; + parameter BAR_INDEX_CFG2_D = "0b010"; + parameter BAR_INDEX_CFG3_A = "0b011"; + parameter BAR_INDEX_CFG3_B = "0b011"; + parameter BAR_INDEX_CFG3_C = "0b011"; + parameter BAR_INDEX_CFG3_D = "0b011"; + parameter BAR_INDEX_CFG4_A = "0b100"; + parameter BAR_INDEX_CFG4_B = "0b100"; + parameter BAR_INDEX_CFG4_C = "0b100"; + parameter BAR_INDEX_CFG4_D = "0b100"; + parameter BAR_INDEX_CFG5_A = "0b101"; + parameter BAR_INDEX_CFG5_B = "0b101"; + parameter BAR_INDEX_CFG5_C = "0b101"; + parameter BAR_INDEX_CFG5_D = "0b101"; + parameter BIR_MSIX_PBA_A = "BAR0"; + parameter BIR_MSIX_PBA_B = "BAR0"; + parameter BIR_MSIX_PBA_C = "BAR0"; + parameter BIR_MSIX_PBA_D = "BAR0"; + parameter BIR_MSIX_TABLE_A = "BAR0"; + parameter BIR_MSIX_TABLE_B = "BAR0"; + parameter BIR_MSIX_TABLE_C = "BAR0"; + parameter BIR_MSIX_TABLE_D = "BAR0"; + parameter BYP_AVG = "USED"; + parameter BYPASS = "PERFORM_RECEIVER_DETECTION"; + parameter BYPASS_ADDR_DEC = "NORMAL"; + parameter CALIB_SETTLE_MAX = "0b001"; + parameter CALIB_STABLE_MAX = "0b11000"; + parameter CAPABILITY_VERSION = "0b0010"; + parameter CDR_ERR = "DISABLED"; + parameter CDR_P1 = "CDR_PLL_RESET"; + parameter CDR_PLL_DELTA = "0P4_PERCENT"; + parameter CDR_REFERENCE = "0b00"; + parameter CDRPLL_CMP_MAX = "0b00010100"; + parameter CDRPLL_CNT_MAX = "0b00000100"; + parameter CDRPLL_PRE_RXEQ_COARSE_TIMER = "0b01010000"; + parameter CDRPLL_PRE_RXEQ_FINE_TIMER = "0b10110100"; + parameter CDRPLL_PST_RXEQ_COARSE_TIMER = "0b01000000"; + parameter CDRPLL_PST_RXEQ_FINE_TIMER = "0b01000010"; + parameter CFG_A_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_A_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_A_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_A_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_A_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_A_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_B_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_B_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_B_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_B_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_B_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_B_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_C_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_C_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_C_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_C_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_C_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_C_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_D_BAR0 = "0b11111111111111110000000000001100"; + parameter CFG_D_BAR1 = "0b11111111111111111111111111111111"; + parameter CFG_D_BAR2 = "0b11111111111111111110000000001100"; + parameter CFG_D_BAR3 = "0b11111111111111111111111111111111"; + parameter CFG_D_BAR4 = "0b11111111111111111110000000001100"; + parameter CFG_D_BAR5 = "0b11111111111111111111111111111111"; + parameter CFG_EXP_ROM_A = "0b00000000000000000000000000000000"; + parameter CFG_EXP_ROM_B = "0b00000000000000000000000000000000"; + parameter CFG_EXP_ROM_C = "0b00000000000000000000000000000000"; + parameter CFG_EXP_ROM_D = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_A = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_B = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_C = "0b00000000000000000000000000000000"; + parameter CIS_POINTER_CARDBUS_D = "0b00000000000000000000000000000000"; + parameter CLASS_CODE_ID3A = "0b000100011000000000000000"; + parameter CLASS_CODE_ID3B = "0b000100011000000000000000"; + parameter CLASS_CODE_ID3C = "0b000100011000000000000000"; + parameter CLASS_CODE_ID3D = "0b000100011000000000000000"; + parameter CM_RESTORE_TIME = "0b00000000"; + parameter CNT250NS_MAX = "0b001111100"; + parameter COARSE_GAIN = "DISABLED"; + parameter COEF_EN_LPBK_MASTER = "OTHERWISE"; + parameter COEF_EN_LPBK_SLAVE = "OTHERWISE"; + parameter COEF_ENABLE = "DETERMINE_LOCAL_PHY"; + parameter COEF_EQTX_FORCE = "0b000000000000000000"; + parameter COEF_LPBK_MASTER = "0b000000000000000000"; + parameter COEF_LPBK_SLAVE = "0b000000000000000000"; + parameter COEF0_POST = "0b000101"; + parameter COEF0_POST_CURSOR = "0b000000"; + parameter COEF0_PRE = "0b000000"; + parameter COEF0_PRE_CURSOR = "0b000000"; + parameter COEF1_POST = "0b000011"; + parameter COEF1_POST_CURSOR = "0b000000"; + parameter COEF1_PRE = "0b000000"; + parameter COEF1_PRE_CURSOR = "0b000000"; + parameter COEF10_POST = "0b000111"; + parameter COEF10_PRE = "0b000000"; + parameter COEF2_POST = "0b000100"; + parameter COEF2_POST_CURSOR = "0b000000"; + parameter COEF2_PRE = "0b000000"; + parameter COEF2_PRE_CURSOR = "0b000000"; + parameter COEF3_POST = "0b000010"; + parameter COEF3_POST_CURSOR = "0b000000"; + parameter COEF3_PRE = "0b000000"; + parameter COEF3_PRE_CURSOR = "0b000000"; + parameter COEF4_POST = "0b000000"; + parameter COEF4_PRE = "0b000000"; + parameter COEF5_POST = "0b000000"; + parameter COEF5_PRE = "0b000001"; + parameter COEF6_POST = "0b000000"; + parameter COEF6_PRE = "0b000010"; + parameter COEF7_POST = "0b000100"; + parameter COEF7_PRE = "0b000011"; + parameter COEF8_POST = "0b000011"; + parameter COEF8_PRE = "0b000010"; + parameter COEF9_POST = "0b000000"; + parameter COEF9_PRE = "0b000011"; + parameter COMP_128_SUPPORTED = "ENABLED"; + parameter COMP_32_SUPPORTED = "ENABLED"; + parameter COMP_64_SUPPORTED = "ENABLED"; + parameter COMPLETE = "DISABLED"; + parameter CONV_METHOD = "COMPUTE_PCIE_SPEC"; + parameter CORE_BYPASS = "NORMAL"; + parameter CORE_EN = "ENABLED"; + parameter COUNT_ACK_TO_NAK = "0b00000000"; + parameter CPL_TIMEOUT_DISABLE_SUPPORTED = "SUPPORTED"; + parameter CPL_TIMEOUT_RANGES_SUPPORTED = "NOT_SUPPORTED"; + parameter CRS_ENABLE = "DISABLED"; + parameter CSTAT_DATA_SCALE = "UNKNOWN_SCALE"; + parameter CSTAT_DATA_SELECT = "D0_POWER_CONSUMED"; + parameter CTLE_SETTLE = "0b100"; + parameter CTLEBIAS_1 = "0b1000"; + parameter ATXICP_RATE2 = "0b100"; + parameter CTLEBYPASS = "DISABLED"; + parameter CUR_FOM = "NUMBER_OF_CLOCK"; + parameter CUR_FOM_AVG = "0b101"; + parameter CUST_AUTO = "DISABLED"; + parameter CUST_CHK = "SET"; + parameter CUST_SEL = "DISABLED"; + parameter CUST_SKIP = "DISABLED"; + parameter CUST_TYP = "0b000"; + parameter CUSTOM_PATTERN = "0b00000000000000000000000000000000000000000000000000000000000000000000000000000000"; + parameter D1_SUPPORT = "SUPPORTED"; + parameter D2_SUPPORT = "SUPPORTED"; + parameter DATA_INJECT = "0b00000000000000000000000000000000"; + parameter DATA_PM = "0b00000000"; + parameter DEEMPH_5G_3_5DB_6DB_N = "6DB"; + parameter DEEMPH_5G_ENABLE = "DISABLED"; + parameter DEEMPH_LPBK_MASTER = "6P0DB"; + parameter DEEMPH_LPBK_SLAVE = "6P0DB"; + parameter DEVICE_ID_ID1A = "0b1110000000000100"; + parameter DEVICE_ID_ID1B = "0b1110000000000100"; + parameter DEVICE_ID_ID1C = "0b1110000000000100"; + parameter DEVICE_ID_ID1D = "0b1110000000000100"; + parameter DEVICE_PORT_TYPE = "PCIE_ENDPOINT"; + parameter DFE_BIAS = "0b0001"; + parameter DFE_PWDN = "DISABLED"; + parameter DIR_PRE_GAIN = "0b00"; + parameter DIR_PST_GAIN = "0b01"; + parameter DIS_ARI_CAP = "ENABLED"; + parameter DIS_CSR_RST = "DISABLED"; + parameter DIS_INTERRUPT = "ENABLED"; + parameter DIS_INTERRUPT_B = "ENABLED"; + parameter DIS_INTERRUPT_C = "ENABLED"; + parameter DIS_INTERRUPT_D = "ENABLED"; + parameter DIS_MSI_CAP = "ENABLED"; + parameter DIS_MSI_CAP_B = "ENABLED"; + parameter DIS_MSI_CAP_C = "ENABLED"; + parameter DIS_MSI_CAP_D = "ENABLED"; + parameter DIS_MSIX_CAP = "ENABLED"; + parameter DIS_MSIX_CAP_B = "ENABLED"; + parameter DIS_MSIX_CAP_C = "ENABLED"; + parameter DIS_MSIX_CAP_D = "ENABLED"; + parameter DISABLE_FLR_CAPABILITY = "ENABLED"; + parameter DLLP_CRC_ERR_ENABLE = "DISABLED"; + parameter DLLP_CRC_ERR_RATE = "0b000000000000"; + parameter DLLP_INJECT_ENABLE = "DISABLED"; + parameter DOUBLE_TX_DATA_VALID = "ONE_CLK_EVERY_64_CLKS"; + parameter DOWNSTREAM_EQ_SKIP_PHASE_2_3 = "NORMAL_OPERATION"; + parameter DS_DRIVE_CLKREQ = "ENABLED"; + parameter DS_PORT_RX_PRESET_HINT = "0b001"; + parameter DS_PORT_TX_PRESET = "0b0011"; + parameter DS_US_N_PORTTYPE = "UPSTREAM"; + parameter DSI = "NO_DSI_NECESSARY"; + parameter DSP_DIR = "ANALYSIS_OF_DATA_BY_DSP"; + parameter DSPDIR_PRESGN = "0b11110000"; + parameter DSPDIR_PREVAL = "0b00011000"; + parameter DSPDIR_PSTSGN0 = "0b11111111"; + parameter DSPDIR_PSTSGN1 = "0b00000000"; + parameter DSPDIR_PSTVAL0 = "0b00000010"; + parameter DSPDIR_PSTVAL1 = "0b01000000"; + parameter EARLY_RX_EVAL = "RX_SIGNAL_AFTER_TS1"; + parameter ECRC_GEN_CHK_CAPABLE = "SUPPORTED"; + parameter EFF_LPBK = "PASSED"; + parameter EI4 = "EI_IV"; + parameter EM_INTERLOCK_PRESENT = "NOT_SUPPORTED"; + parameter EN = "DISABLED"; + parameter EN_ACK_TO_DIV = "ACK_SPEC"; + parameter EN_ACK_TO_NAK = "DO_NOTHING"; + parameter EN_ACS_VIOLATION = "DISABLED"; + parameter EN_ASPM_L0S = "ENABLED"; + parameter EN_ASPM_L1 = "ENABLED"; + parameter EN_ATOMIC_OP_CAP = "ENABLED"; + parameter EN_ATOMICOP_EGRESS_BLOCKED = "DISABLED"; + parameter EN_ATS_CAP = "ENABLED"; + parameter EN_BDGT_CAP = "DISABLED"; + parameter EN_CAP = "ENABLED"; + parameter EN_CAP_B = "ENABLED"; + parameter EN_CAP_C = "ENABLED"; + parameter EN_CAP_D = "ENABLED"; + parameter EN_COMPLETER_ABORT = "DISABLED"; + parameter EN_COMPLETION_TIMEOUT = "ENABLED"; + parameter EN_CORR_INTERNAL_ERROR = "DISABLED"; + parameter EN_DPA_CAP = "DISABLED"; + parameter EN_DRCT_SCR_OFF = "OTHERWISE"; + parameter EN_DRCT_TO_LPBK = "OTHERWISE"; + parameter EN_EQTX_OVERRIDE = "PIPE_LOCAL_FS_AND_PIPE_LOCAL_LF"; + parameter EN_FORCE_SCR_OFF_FAST = "OTHERWISE"; + parameter EN_L1 = "ENABLED"; + parameter EN_L1PMSS_CAP = "ENABLED"; + parameter EN_L2 = "ENABLED"; + parameter EN_LPBK_ERR_RST = "MASTER_LPBK_INCREMENT"; + parameter EN_LTR_CAP = "ENABLED"; + parameter EN_MC_BLOCKED_TLP = "DISABLED"; + parameter EN_NWL_VSEC_CAP = "ENABLED"; + parameter EN_PORT_DIS = "DISABLED"; + parameter EN_PORT_INTLEG = "ENABLED"; + parameter EN_RBAR_CAP_A = "ENABLED"; + parameter EN_RBAR_CAP_B = "ENABLED"; + parameter EN_RBAR_CAP_C = "ENABLED"; + parameter EN_RBAR_CAP_D = "ENABLED"; + parameter EN_RECEIVER_OVERFLOW = "DISABLED"; + parameter EN_SELF_XLINK = "OTHERWISE"; + parameter EN_SURPRISE_DOWN_ERROR = "DISABLED"; + parameter EN_TLP_PREFIX_BLOCKED = "DISABLED"; + parameter EN_UCORR_INTERNAL_ERROR = "DISABLED"; + parameter EN_USER_WRITE = "READ_WRITE_ACCESS"; + parameter END_END_PREFIXES_SUPPORTED = "NOT_SUPPORTED"; + parameter END_ON_HOLD = "YES_EXIT_ON_HOLD"; + parameter ENDCALIB_MAX = "0b10000100"; + parameter ENDPOINT_L0S_ACCEPTABLE_LATENCY = "MAX_64_NS"; + parameter ENDPOINT_L1_ACCEPTABLE_LATENCY = "MAX_1_US"; + parameter ENTRY_TIME_ASPM_L0S = "0b0000000000000000"; + parameter ENTRY_TIME_ASPM_L1 = "0b0000000000000000"; + parameter EOM_TIME = "0b0000000000000000"; + parameter EOM0DIR = "SELECT_DIR_1"; + parameter EOM1DIR = "SELECT_DIR_0"; + parameter EOMCTRL0_LOW = "DISABLED"; + parameter EOMDIVDIS = "DISABLED"; + parameter EOMMODE = "0b00"; + parameter EOMRDSEL = "DISABLED"; + parameter EOMSTART = "DISABLED"; + parameter EOMX = "0b000000"; + parameter EOMX_UPDATE_CNT_VALUE = "0b0011111"; + parameter EOMY = "0b00000000"; + parameter ERRCNT_DEC = "0b00100000"; + parameter ERRCNT_THR = "0b1000"; + parameter ES_PWDN = "DISABLED"; + parameter EVAL_RST = "DISABLED"; + parameter EXCLUDE_L0 = "INCLUDE"; + parameter EXCLUDE_CFG_COMPLETE = "INCLUDE"; + parameter EXCLUDE_CFG_IDLE = "INCLUDE"; + parameter EXCLUDE_LOOPBACK_MASTER = "INCLUDE"; + parameter EXCLUDE_REC_IDLE = "INCLUDE"; + parameter EXCLUDE_REC_RCVR_CFG = "INCLUDE"; + parameter EXIT_DIRECT_TO_DETECT = "DO_NOT_EXIT_TO_DETECT"; + parameter EXT_CONTROL = "DISABLED"; + parameter EXTENDED_TAG_FIELD_EN_DEFAULT = "EIGHT_BIT"; + parameter EXTENDED_TAG_FIELD_SUPPORTED = "EIGHT_BIT"; + parameter F_ARXCTLEDIR = "IGNORED"; + parameter F_ARXCTLENULL = "0b0000"; + parameter F_ARXDMDIR = "DISABLED"; + parameter F_ARXDMNULL = "0b00000"; + parameter F_ARXEOMDIR = "IGNORED"; + parameter F_ARXEOMNULL = "0b00000"; + parameter F_ARXESDIR = "IGNORED"; + parameter F_ARXESNULL = "0b00000"; + parameter F_ARXTDIR = "IGNORED"; + parameter F_ARXTNULL = "0b00000"; + parameter F_ASCHCAL = "IGNORED"; + parameter F_ASCHDIR = "IGNORED"; + parameter F_ASCHNULL = "0b0000"; + parameter FAIL_LIMIT_ERR = "RXEQ_NOT_FAIL"; + parameter FAST = "L0"; + parameter FC_UPDATE_TIMER_DISABLE = "ENABLED"; + parameter FC_UPDATE_TIMER_DIV = "PCIE_REC_VALUES"; + parameter FILTER = "0b1001"; + parameter FINE_GAIN = "DISABLED"; + parameter FOM_COMPARE = "0b00000000"; + parameter FOM_HIRES = "DISABLED"; + parameter FOM_ITERCNT = "0b101"; + parameter FOM_THR = "0b0100"; + parameter FORCE_ATXDRA = "0b000000000000000000000"; + parameter FORCE_ATXDRP = "0b000000000000000000000"; + parameter FORCE_ATXDRR = "0b000000000000000000000"; + parameter FORCE_ATXDRT = "0b000000000000000000000"; + parameter FORCE_DIR_RSLT = "0b000000"; + parameter FORCE_FOM_RSLT = "0b00000000"; + parameter FORCE_IDLE = "DISABLED"; + parameter FORCE_RX_DETECT = "DISABLED"; + parameter FORCE_SIGNAL = "DISABLED"; + parameter FREQ_LOCK = "DISABLED"; + parameter FS = "0b110000"; + parameter GAIN_TIMER1 = "0b0101"; + parameter GEN12_ENA_POST_A0 = "DISABLED"; + parameter GEN12_ENA_POST_A1A2 = "DISABLED"; + parameter GEN12_ENA_PREA0 = "DISABLED"; + parameter GEN3_ENA_POST_A0 = "ENABLED"; + parameter GEN3_ENA_POST_A1A2 = "ENABLED"; + parameter GEN3_ENA_PREA0 = "ENABLED"; + parameter GLOBAL_INVAL_SUPPORT = "ENABLED"; + parameter HINT = "0b000"; + parameter HINT0_3DB = "ENABLED"; + parameter HINT0_A0GAIN = "0b111"; + parameter HINT0_A2GAIN = "0b111"; + parameter HINT1_3DB = "ENABLED"; + parameter HINT1_A0GAIN = "0b011"; + parameter HINT1_A2GAIN = "0b101"; + parameter HINT2_3DB = "ENABLED"; + parameter HINT2_A0GAIN = "0b011"; + parameter HINT2_A2GAIN = "0b111"; + parameter HINT3_3DB = "ENABLED"; + parameter HINT3_A0GAIN = "0b000"; + parameter HINT3_A2GAIN = "0b111"; + parameter HINT4_3DB = "DISABLED"; + parameter HINT4_A0GAIN = "0b111"; + parameter HINT4_A2GAIN = "0b111"; + parameter HINT5_3DB = "DISABLED"; + parameter HINT5_A0GAIN = "0b011"; + parameter HINT5_A2GAIN = "0b101"; + parameter HINT6_3DB = "DISABLED"; + parameter HINT6_A0GAIN = "0b011"; + parameter HINT6_A2GAIN = "0b111"; + parameter HINT7_3DB = "DISABLED"; + parameter HINT7_A0GAIN = "0b000"; + parameter HINT7_A2GAIN = "0b111"; + parameter HINT7_OVR = "DISABLED"; + parameter HLD_RST = "WRITE_1"; + parameter HOT_PLUG_CAPABLE = "NOT_SUPPORTED"; + parameter HOT_PLUG_SURPRISE = "NOT_POSSIBLE"; + parameter ID_DS_PORT = "0b0000000000000000"; + parameter ID_NWL_VSEC_CAP = "0b0000000000000001"; + parameter IGNORE_ECRC = "DISABLED"; + parameter IGNORE_POISON = "ENABLED"; + parameter INDICATOR = "0b00000000000000000000000000000000"; + parameter INHIBIT = "PERFORM_RECEIVER_DETECTION"; + parameter INJECT_DATA_ERROR_0 = "DISABLED"; + parameter INJECT_DATA_ERROR_1 = "DISABLED"; + parameter INJECT_DATA_ERROR_2 = "DISABLED"; + parameter INJECT_DATA_ERROR_3 = "DISABLED"; + parameter INJECT_DATA_ERROR_EN = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_0 = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_1 = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_2 = "DISABLED"; + parameter INJECT_ERR_LANE_SELECT_3 = "DISABLED"; + parameter INJECT_RX_1BIT_DATA_ERR = "DISABLED"; + parameter INJECT_RX_2BIT_DATA_ERR = "DISABLED"; + parameter INJECT_RX_SKP_ERR = "DISABLED"; + parameter INJECT_RX_VALID_ERR = "DISABLED"; + parameter INT_CLR = "DISABLED"; + parameter INT_EN = "DISABLED"; + parameter INTERRUPT_MESSAGE_NUMBER = "0b00000"; + parameter INVAL_Q_DEPTH = "0b00000"; + parameter ITERATION_MAX = "0b000000"; + parameter L1_ENTER_PLL_RESET_TIME = "0b100"; + parameter L1_EXIT_PLL_LOCK_TIME = "0b01110"; + parameter L1PM_SUPPORTED = "SUPPORTED"; + parameter L2_D3HOT_ENABLE = "DISABLED"; + parameter LANE_SELECT = "0b0000"; + parameter LF = "0b001000"; + parameter LF_PHY = "0b001010"; + parameter LINK_LANE = "ENABLED"; + parameter LPBK_EN = "DISABLED"; + parameter LW_START_UPDN_ACK_EN = "DISABLED"; + parameter LW_START_UPDN_COUNT = "0b000011111010"; + parameter LW_START_UPDN_EIE_EN = "DISABLED"; + parameter LW_START_UPDN_EN_DIR_DS = "DO_NOT_ASSERT"; + parameter LW_START_UPDN_END_DELAY = "0b1001"; + parameter LW_START_UPDN_RATE_EN_16G = "DISABLED"; + parameter LW_START_UPDN_RATE_EN_2P5G = "ENABLED"; + parameter LW_START_UPDN_RATE_EN_5G = "ENABLED"; + parameter LW_START_UPDN_RATE_EN_8G = "ENABLED"; + parameter LW_START_UPDN_START_DELAY = "0b1000"; + parameter LW_START_UPDN_TIMER_EN = "DISABLED"; + parameter MARGIN_ENABLE = "PCIE_SPEC"; + parameter MARGIN_VALUE = "0b000"; + parameter MASK_0 = "SKIP_RCVR_DETECTION"; + parameter MASK_1 = "SKIP_RCVR_DETECTION"; + parameter MASK_2 = "SKIP_RCVR_DETECTION"; + parameter MASK_3 = "SKIP_RCVR_DETECTION"; + parameter MAX_LINK_WIDTH = "1_LANE"; + parameter MAX_SPEED = "8G"; + parameter MAX_VAR = "0b00100"; + parameter MERGE_LMMI_RDATA = "DISABLED"; + parameter METHOD_FMERIT_CTRL = "STEP_PCIE_TX_PRESETS"; + parameter METHOD_TX_CRED_CLEANUP = "HEADER"; + parameter MGMT_INTLEG = "0b0000"; + parameter MGMT_LTSSM_DIS = "DISABLED"; + parameter MID_VALUE_20B = "0b010100"; + parameter MID_VALUE_GEN3 = "0b001110"; + parameter MIN_SPEED = "2P5G"; + parameter MIN_TIME = "0_MS"; + parameter MIN_TIME_CFG = "4US"; + parameter MIX_DIR = "DISABLED"; + parameter MODE_BFF = "RESTART"; + parameter MRL_SENSOR_PRESENT = "NOT_SUPPORTED"; + parameter MULT_ENABLE = "RECOMMENDED_VALUES"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_A = "EIGHT"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_B = "EIGHT"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_C = "EIGHT"; + parameter MULT_MESSAGE_CAPABLE_MSICAP_D = "EIGHT"; + parameter NFTS = "0b11111111"; + parameter NO_COMMAND_COMPLETED_SUPPORT = "SW_NOTIF_PROVIDED"; + parameter NO_FCMP = "DISABLED"; + parameter NO_REMOTE_CHANGE = "DISABLED"; + parameter NO_TX_IDLE_DELAY = "DATA_VALID_GAP"; + parameter NUM_LANES = "1_LANE"; + parameter NUMBER_DSLINK = "0b00000"; + parameter NUMHI_A = "0b00000000000000000000000000000000"; + parameter NUMHI_B = "0b00000000000000000000000000000000"; + parameter NUMHI_C = "0b00000000000000000000000000000000"; + parameter NUMHI_D = "0b00000000000000000000000000000000"; + parameter NUMHOLD = "SINGLE_HOLD_RESPONSE"; + parameter NUMLO_A = "0b00000000000000000000000000000000"; + parameter NUMLO_B = "0b00000000000000000000000000000000"; + parameter NUMLO_C = "0b00000000000000000000000000000000"; + parameter NUMLO_D = "0b00000000000000000000000000000000"; + parameter OBFF_SUPPORTED = "NOT_SUPPORTED"; + parameter OFFSET_MSIX_PBA_A = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_PBA_B = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_PBA_C = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_PBA_D = "0b00000000000000000111000000000"; + parameter OFFSET_MSIX_TABLE_A = "0b00000000000000000110000000000"; + parameter OFFSET_MSIX_TABLE_B = "0b00000000000000000110000000000"; + parameter OFFSET_MSIX_TABLE_C = "0b00000000000000000110000000000"; + parameter OFFSET_MSIX_TABLE_D = "0b00000000000000000110000000000"; + parameter OVER_CTLE = "DISABLED"; + parameter OVER_RX = "DISABLED"; + parameter OVER_RXDM = "DISABLED"; + parameter OVER_RXDP = "DISABLED"; + parameter OVER_RXES = "DISABLED"; + parameter OVER_RXT = "DISABLED"; + parameter OVER_SCH = "DISABLED"; + parameter OVER_TX = "DISABLED"; + parameter OVERRIDE = "DISABLED"; + parameter OVR_CDR = "DISABLED"; + parameter OVR_DIR = "DISABLED"; + parameter OVR_FOM = "DISABLED"; + parameter OVR_GAIN3DB = "ENABLED"; + parameter OVR_HINT3DB = "ENABLED"; + parameter P_CLK_PERIOD = "0b0000111110100000"; + parameter PAR_LPBK = "DISABLED"; + parameter PAS = "10X"; + parameter PATTERN_0 = "UNSCRAMBLED"; + parameter PATTERN_1 = "UNSCRAMBLED"; + parameter PATTERN_2 = "UNSCRAMBLED"; + parameter PCIPM_L1_1_SUPPORTED = "SUPPORTED"; + parameter PCIPM_L1_2_SUPPORTED = "SUPPORTED"; + parameter PERIOD_SRIS_128B130B = "0b000000"; + parameter PERIOD_SRIS_8B10B = "0b00000000"; + parameter PERIOD_SRNS_128B130B = "0b00000000"; + parameter PERIOD_SRNS_8B10B = "0b00000000"; + parameter PHANTOM_FUNCTIONS_SUPPORTED = "NO_FUNCTION_BITS"; + parameter PHYSICAL_SLOT_NUMBER = "0b0000000000001"; + parameter PIN_INTERRUPT_A = "INTA"; + parameter PIN_INTERRUPT_B = "INTA"; + parameter PIN_INTERRUPT_C = "INTA"; + parameter PIN_INTERRUPT_D = "INTA"; + parameter PIPE_TX_SWING = "FULL_SWING"; + parameter PLESIO_LPBK = "DISABLED"; + parameter PM_REDUCE_TIMEOUTS = "DISABLED"; + parameter PMA_DRIVEN_MODE = "PCS_DRIVEN"; + parameter PMCSR_B2_B3_SUPPORT = "DISABLED"; + parameter PMCSR_BUS_P_C_EN = "DISABLED"; + parameter PME_CLOCK = "DISABLED"; + parameter PME_SUPPORT = "0b11111"; + parameter PMFF_ALL = "DISABLED"; + parameter PORT_CM_RESTORE_TIME = "0b00000000"; + parameter PORT_NUMBER = "0b00000000"; + parameter PORT_TPOWER_ON_SCALE = "2_US"; + parameter PORT_TPOWER_ON_VALUE = "0b00000"; + parameter POST = "0b000000"; + parameter POST_A0COEF = "0b001"; + parameter POST_A1COEF = "0b001"; + parameter POST_A2COEF = "0b001"; + parameter POST_CURSOR_LIMIT = "0b100000"; + parameter POST_CURSOR_STEP_SIZE = "0b001000"; + parameter POST_ITERCNT = "0b100"; + parameter POST_STEP = "STEP_SIZE_4"; + parameter POWER_CONTROLLER_PRESENT = "NOT_SUPPORTED"; + parameter POWER_INDICATOR_PRESENT = "NOT_SUPPORTED"; + parameter POWER_REQUIRED = "AUX_POWER_NOT_REQUIRED"; + parameter PRBS_CHK = "DISABLED"; + parameter PRBS_GEN = "DISABLED"; + parameter PRBS_TYP = "PRBS7"; + parameter PRE = "0b000000"; + parameter PRE_A0COEF = "0b101"; + parameter PRE_A1COEF = "0b101"; + parameter PRE_A2COEF = "0b101"; + parameter PRE_CURSOR_LIMIT = "0b010000"; + parameter PRE_CURSOR_STEP_SIZE = "0b000100"; + parameter PRE_FOM = "ENABLED"; + parameter PRE_FOM_AVG = "0b100"; + parameter PRE_ITERCNT = "0b100"; + parameter PRE_RXEQ_TIMER = "0b00010100"; + parameter PRE_STEP = "STEP_SIZE_2"; + parameter PRESET_COUNT_INI = "0b0000"; + parameter PRESET_EN_LPBK_MASTER = "OTHERWISE"; + parameter PRESET_EN_LPBK_SLAVE = "OTHERWISE"; + parameter PRESET_ENABLE = "NORMAL_OP"; + parameter PRESET_EQTX_FORCE = "0b0000"; + parameter PRESET_LPBK_MASTER = "0b0000"; + parameter PRESET_LPBK_SLAVE_0 = "OTHERWISE"; + parameter PRESET_LPBK_SLAVE_1 = "OTHERWISE"; + parameter PRESET_LPBK_SLAVE_2 = "OTHERWISE"; + parameter PRESET_LPBK_SLAVE_3 = "OTHERWISE"; + parameter PRESET_REJECT = "0b00000000000"; + parameter PRESET0_POSTCURSOR = "0b1000"; + parameter PRESET0_PRECURSOR = "0b0000"; + parameter PRESET1_POSTCURSOR = "0b0101"; + parameter PRESET1_PRECURSOR = "0b0000"; + parameter PRESET10_POSTCURSOR = "0b1010"; + parameter PRESET10_PRECURSOR = "0b0000"; + parameter PRESET2_POSTCURSOR = "0b0110"; + parameter PRESET2_PRECURSOR = "0b0000"; + parameter PRESET3_POSTCURSOR = "0b0100"; + parameter PRESET3_PRECURSOR = "0b0000"; + parameter PRESET4_POSTCURSOR = "0b0000"; + parameter PRESET4_PRECURSOR = "0b0000"; + parameter PRESET5_POSTCURSOR = "0b0000"; + parameter PRESET5_PRECURSOR = "0b0011"; + parameter PRESET6_POSTCURSOR = "0b0000"; + parameter PRESET6_PRECURSOR = "0b0100"; + parameter PRESET7_POSTCURSOR = "0b0110"; + parameter PRESET7_PRECURSOR = "0b0011"; + parameter PRESET8_POSTCURSOR = "0b0100"; + parameter PRESET8_PRECURSOR = "0b0100"; + parameter PRESET9_POSTCURSOR = "0b0000"; + parameter PRESET9_PRECURSOR = "0b0101"; + parameter PS_REENTRY_TIME = "0b00000000"; + parameter RATE = "2P5G"; + parameter RATE_ENABLE = "INITIAL_SPEED_CHANGES"; + parameter RCB = "DISABLED"; + parameter REC_SPD_INFER_EQ_PH0123 = "EXCLUDE_TIME_SPENT"; + parameter REC_SPD_INFER_RCVR_CFG = "EXCLUDE_TIME_SPENT"; + parameter REC_SPD_INFER_RCVR_LOCK = "EXCLUDE_TIME_SPENT"; + parameter DIS_FUNC_B = "ENABLED"; + parameter DIS_FUNC_C = "ENABLED"; + parameter DIS_FUNC_D = "ENABLED"; + parameter REDUCE_TIMEOUTS_LTSSMSIM = "DISABLED"; + parameter REDUCE_TIMEOUTS_SIM = "DISABLED"; + parameter REDUCE_TS1 = "DISABLED"; + parameter REENTRY_DISABLE = "ENABLED"; + parameter REENTRY_TIME = "0b00000000000000"; + parameter REQ_FEEDBACK = "0b00000000"; + parameter RESET_EIEOS_INTERVAL_COUNT = "DISABLED"; + parameter REVISION_ID_ID3A = "0b00000100"; + parameter REVISION_ID_ID3B = "0b00000100"; + parameter REVISION_ID_ID3C = "0b00000100"; + parameter REVISION_ID_ID3D = "0b00000100"; + parameter RL1 = "0b0011"; + parameter RL2 = "0b0101"; + parameter RL3 = "0b0011"; + parameter ROUTING_SUPPORTED = "DISABLED"; + parameter RP_COMPLETER_EN = "DISABLED"; + parameter RSTCDR_ERR = "ENABLED"; + parameter RSTCDR_FRQ = "ENABLED"; + parameter RSTCDR_IDL = "DISABLED"; + parameter RX_BYPASS_DECODE_EN = "ENABLED"; + parameter RX_BYPASS_MSG_DEC = "NORMAL_OPERATION"; + parameter RX_CONVERT_UR_TO_CA = "NORMAL_OPERATION"; + parameter RX_D_ALLOC_C = "0b0000000001100000"; + parameter RX_D_ALLOC_N = "0b0000000000000110"; + parameter RX_D_ALLOC_P = "0b0000000001101100"; + parameter RX_DIV_MODE1 = "0b10"; + parameter RX_DIV_MODE0 = "DIV_2"; + parameter RX_DIV_MODE2 = "0b00"; + parameter RX_DL_ACTIVE_DISABLE = "BLOCK_RECEPTION_TLP"; + parameter RX_EARLY_FORWARD_DISABLE = "FWD_RX_DATA_LL"; + parameter RX_ERR_COR = "DISABLED"; + parameter RX_ERR_UCOR = "DISABLED"; + parameter RX_FORCE_RO = "DISABLED"; + parameter RX_H_ALLOC_C = "0b000000100000"; + parameter RX_H_ALLOC_N = "0b000000001000"; + parameter RX_H_ALLOC_P = "0b000000010000"; + parameter RX_HIZ = "IGNORED"; + parameter RX_IMPED_RATIO = "0b10000000"; + parameter RX_INHIBIT_ACK_NAK = "PROCESS_RCVD_ACK"; + parameter RX_INHIBIT_TLP = "PROCESS_RCVD_TLP"; + parameter RX_LCRC_INJECT_EN = "DO_NOT_INJECT_ERROR"; + parameter RX_MALF_INJECT_EN = "DO_NOT_INJECT_ERROR"; + parameter RX_POLINV = "NORMAL"; + parameter RX_PRIORITY = "DISABLED"; + parameter RX_PRIORITY_N_STARVE_THRESH = "0b00010000"; + parameter RX_PRIORITY_P_STARVE_THRESH = "0b00010000"; + parameter RX_PWRDN = "IGNORED"; + parameter RX_TLP_VALID = "DISABLED"; + parameter RXEQ_ALGO = "0b111"; + parameter RXEQ_ENABLE = "0b100"; + parameter RXEQ_EVAL_MAX = "0b11111111"; + parameter RXEQ_MANUAL = "DISABLED"; + parameter RXEQ_STATE = "0b0000"; + parameter RXF_A = "0b0100"; + parameter RXF_B = "0b0100"; + parameter RXF_C = "0b0100"; + parameter RXHF_CLKDN = "ENABLED"; + parameter RXIDLE_MAX = "0b1111"; + parameter RXIDLE_MAX2 = "0b0000010000000000"; + parameter RXIDLE_MSB = "0b11"; + parameter RXM_A = "0b10"; + parameter RXM_B = "0b01"; + parameter RXM_C = "0b00"; + parameter RXN_A = "0b00100"; + parameter RXN_B = "0b01001"; + parameter RXN_C = "0b01111"; + parameter RXOFF_SETTLE_MAX = "0b011"; + parameter RXOFF_STABLE_MAX = "0b10000"; + parameter RXPLLINIT = "DISABLED"; + parameter RXPLLRST = "SET"; + parameter SELECT_DIR_FOM_N = "FME_METHOD"; + parameter SELECTABLE_DEEMPHASIS = "6P0DB"; + parameter SEQ_NUM = "0b000000000000"; + parameter SIGNAL_DETECT_THRESHOLD = "125_MV"; + parameter SIZE_CFG0_A = "0b00000"; + parameter SIZE_CFG0_B = "0b00000"; + parameter SIZE_CFG0_C = "0b00000"; + parameter SIZE_CFG0_D = "0b00000"; + parameter SIZE_CFG1_A = "0b00000"; + parameter SIZE_CFG1_B = "0b00000"; + parameter SIZE_CFG1_C = "0b00000"; + parameter SIZE_CFG1_D = "0b00000"; + parameter SIZE_CFG2_A = "0b00000"; + parameter SIZE_CFG2_B = "0b00000"; + parameter SIZE_CFG2_C = "0b00000"; + parameter SIZE_CFG2_D = "0b00000"; + parameter SIZE_CFG3_A = "0b00000"; + parameter SIZE_CFG3_B = "0b00000"; + parameter SIZE_CFG3_C = "0b00000"; + parameter SIZE_CFG3_D = "0b00000"; + parameter SIZE_CFG4_A = "0b00000"; + parameter SIZE_CFG4_B = "0b00000"; + parameter SIZE_CFG4_C = "0b00000"; + parameter SIZE_CFG4_D = "0b00000"; + parameter SIZE_CFG5_A = "0b00000"; + parameter SIZE_CFG5_B = "0b00000"; + parameter SIZE_CFG5_C = "0b00000"; + parameter SIZE_CFG5_D = "0b00000"; + parameter SKIP_FINAL_COEF_CHECK = "DISABLED"; + parameter SLOT_CLOCK_CONFIGURATION = "REFCLK_BY_SLOT"; + parameter SLOT_IMPLEMENTED = "UNCONNECTED"; + parameter SLOT_POWER_LIMIT_SCALE = "0b00"; + parameter SLOT_POWER_LIMIT_VALUE = "0b00001010"; + parameter SPEED_LPBK_CTRL = "2P5G"; + parameter START_PRESET = "PRESET_VALUE"; + parameter START_REMOTE_ADV = "OTHERWISE"; + parameter STATE_DATA_N = "USE_RX_DATA_OBSERVATION"; + parameter STEP_SELECT = "0b00000"; + parameter STP_OVERRIDE_EN = "DISABLED"; + parameter STP_OVERRIDE_LEN = "0b00000000000"; + parameter STP_OVERRIDE_NEW_LEN = "0b00000000000"; + parameter SUBSTATE_MAX = "0b00000"; + parameter SUBSYSTEM_ID_ID2A = "0b1110000000000100"; + parameter SUBSYSTEM_ID_ID2B = "0b1110000000000100"; + parameter SUBSYSTEM_ID_ID2C = "0b1110000000000100"; + parameter SUBSYSTEM_ID_ID2D = "0b1110000000000100"; + parameter SUBSYSTEM_VENDOR_ID_ID2A = "0b0001100110101010"; + parameter SUBSYSTEM_VENDOR_ID_ID2B = "0b0001100110101010"; + parameter SUBSYSTEM_VENDOR_ID_ID2C = "0b0001100110101010"; + parameter SUBSYSTEM_VENDOR_ID_ID2D = "0b0001100110101010"; + parameter SUPP_SIZE_CFG0_A = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG0_B = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG0_C = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG0_D = "0b00000000000000001111"; + parameter SUPP_SIZE_CFG1_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG1_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG1_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG1_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG2_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG3_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG4_D = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_A = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_B = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_C = "0b00000000000000000000"; + parameter SUPP_SIZE_CFG5_D = "0b00000000000000000000"; + parameter SYS_ALLOC = "PWR_BUDGET_CAP_VALUES"; + parameter T0_RX_BYPASS_MSG_DEC = "NORMAL_OPERATION"; + parameter TABLE_SIZE_MSIXCAP_A = "0b00000000111"; + parameter TABLE_SIZE_MSIXCAP_B = "0b00000000111"; + parameter TABLE_SIZE_MSIXCAP_C = "0b00000000111"; + parameter TABLE_SIZE_MSIXCAP_D = "0b00000000111"; + parameter TARGET_LINK_SPEED = "8G"; + parameter TARGET_ONLY = "DISABLED"; + parameter TD1_MEANS_ADD_HAS_N = "ECRC_CONTAINED"; + parameter TIMEOUT_THRESHOLD_PME = "0b000000000000"; + parameter TIMEOUT_THRESHOLD_PME_TO_ACK_DS = "0b00000000"; + parameter TIMER = "0b00000000"; + parameter TLP_LCRC_ERR_ENABLE = "DISABLED"; + parameter TLP_LCRC_ERR_RATE = "0b000"; + parameter TLP_SEQ_ERR_ENABLE = "DISABLED"; + parameter TLUNIT = "1_MS"; + parameter TO_EXTEND = "0b01111111"; + parameter TRNG_A0COEF = "0b101"; + parameter TRNG_A1COEF = "0b101"; + parameter TRNG_A2COEF = "0b101"; + parameter TRNG_FAST = "DISABLED"; + parameter TRNG_ITERCNT = "0b100"; + parameter TRNG_RXEQ_TIMER = "0b00100000"; + parameter TS1_ACK_BLOCK_USE_PRESET = "FORCED_TO_ZERO"; + parameter TS1_ACK_DELAY = "0b00011111"; + parameter TS1_ACK_MASK_USE_PRESET = "IGNORES_USE_PRESET"; + parameter TX_AMP_RATIO_MARGIN0_FULL = "0b10000000"; + parameter TX_AMP_RATIO_MARGIN0_HALF = "0b01010000"; + parameter TX_AMP_RATIO_MARGIN1_FULL = "0b01111000"; + parameter TX_AMP_RATIO_MARGIN1_HALF = "0b01011000"; + parameter TX_AMP_RATIO_MARGIN2_FULL = "0b01101000"; + parameter TX_AMP_RATIO_MARGIN2_HALF = "0b01001000"; + parameter TX_AMP_RATIO_MARGIN3_FULL = "0b01100000"; + parameter TX_AMP_RATIO_MARGIN3_HALF = "0b01000000"; + parameter TX_AMP_RATIO_MARGIN4_FULL = "0b01011000"; + parameter TX_AMP_RATIO_MARGIN4_HALF = "0b00111000"; + parameter TX_AMP_RATIO_MARGIN5_FULL = "0b01010000"; + parameter TX_AMP_RATIO_MARGIN5_HALF = "0b00110000"; + parameter TX_AMP_RATIO_MARGIN6_FULL = "0b01001000"; + parameter TX_AMP_RATIO_MARGIN6_HALF = "0b00101000"; + parameter TX_AMP_RATIO_MARGIN7_FULL = "0b01000000"; + parameter TX_AMP_RATIO_MARGIN7_HALF = "0b00100000"; + parameter TX_BYPASS_DECODE_EN = "ENABLED"; + parameter TX_BYPASS_MSG_DEC = "NORMAL_OPERATION"; + parameter TX_COMP_RECEIVE = "DOES_NOT_ASSERT"; + parameter TX_CONVERT_UR_TO_CA = "NORMAL_OPERATION"; + parameter TX_D_ALLOC_C = "0b0000000001100000"; + parameter TX_D_ALLOC_N = "0b0000000000000110"; + parameter TX_D_ALLOC_P = "0b0000000001101100"; + parameter TX_DIV_MODE0 = "0b10"; + parameter TX_DIV_MODE1 = "0b10"; + parameter TX_DIV_MODE2 = "0b10"; + parameter TX_EQ_EVAL_CNT_SEL = "WAIT_8_CLKS"; + parameter TX_ERR_COR = "DISABLED"; + parameter TX_ERR_UCOR = "DISABLED"; + parameter TX_FORCE_RO = "DISABLED"; + parameter TX_GAP_INJECT_EN = "DO_NOT_INJECT_GAP"; + parameter TX_H_ALLOC_C = "0b000000100000"; + parameter TX_H_ALLOC_N = "0b000000001000"; + parameter TX_H_ALLOC_P = "0b000000010000"; + parameter TX_HIZ = "IGNORED"; + parameter TX_IMPED_RATIO = "0b10000000"; + parameter TX_PAR1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_PAR2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_PAR2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_PAR2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_POLINV = "NORMAL"; + parameter TX_PRE_RATIO = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP0_FULL = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP0_HALF = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP1_FULL = "0b00000000"; + parameter TX_PRE_RATIO_DEEMP1_HALF = "0b00000000"; + parameter TX_PRIORITY = "DISABLED"; + parameter TX_PRIORITY_N_STARVE_THRESH = "0b00010000"; + parameter TX_PRIORITY_P_STARVE_THRESH = "0b00010000"; + parameter TX_PST_RATIO = "0b00010101"; + parameter TX_PST_RATIO_DEEMP0_FULL = "0b00100000"; + parameter TX_PST_RATIO_DEEMP0_HALF = "0b00100000"; + parameter TX_PST_RATIO_DEEMP1_FULL = "0b00010101"; + parameter TX_PST_RATIO_DEEMP1_HALF = "0b00010101"; + parameter TX_QUIESCE = "DISABLED"; + parameter TX_REPLAY_ECC1_HANDLE_DISABLE = "ENABLE_CORRECTION"; + parameter TX_REPLAY_ECC1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_REPLAY_ECC1_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_REPLAY_ECC2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_REPLAY_ECC2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_REPLAY_ECC2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_REQ_EQ = "DISABLED"; + parameter TX_SELECT_RX_FEEDBACK = "REFCLK"; + parameter TX_TLP_VALID = "DISABLED"; + parameter TXF_A = "0b0100"; + parameter TXF_B = "0b0100"; + parameter TXF_C = "0b0100"; + parameter TXHF_CLKDN = "ENABLED"; + parameter TXM_A = "0b10"; + parameter TXM_B = "0b01"; + parameter TXM_C = "0b00"; + parameter TXN_A = "0b00100"; + parameter TXN_B = "0b01001"; + parameter TXN_C = "0b01111"; + parameter TXPLL_INIT = "DISABLED"; + parameter TXPLLRST = "DISABLED"; + parameter TYPE1_TYPE0_N = "ENDPOINT"; + parameter U_CLK_PERIOD = "0b0001111101000000"; + parameter US_PORT_PS_ENTRY_TIME = "0b0000000000000000"; + parameter US_PORT_RX_PRESET_HINT = "0b010"; + parameter US_PORT_TX_PRESET = "0b0100"; + parameter USE_COEF_PRE_MTHD_CTRL = "PRESET_VALUE"; + parameter USE_COEF_UPDN_CTRL = "PRESET_VALUE"; + parameter USER_AUTO_N = "AUTOMATIC_ON_RECEPTION"; + parameter VEC_MASK_CAPABLE_MSICAP_A = "ENABLED"; + parameter VEC_MASK_CAPABLE_MSICAP_B = "ENABLED"; + parameter VEC_MASK_CAPABLE_MSICAP_C = "ENABLED"; + parameter VEC_MASK_CAPABLE_MSICAP_D = "ENABLED"; + parameter VENDOR_ID_ID1A = "0b0001100110101010"; + parameter VENDOR_ID_ID1B = "0b0001100110101010"; + parameter VENDOR_ID_ID1C = "0b0001100110101010"; + parameter VENDOR_ID_ID1D = "0b0001100110101010"; + parameter VENDOR0_UR = "REPORT"; + parameter VERSION_AER_CAP = "VER_0X2"; + parameter VERSION_PM_CAP = "0b011"; + parameter XLCY0 = "0b00000000"; + parameter XLCY1 = "0b00000000"; + parameter RX_ESP_RESP_WAIT = "0b01000000"; + parameter SEL_PCLK_DIV2 = "PCLK_DIV2"; + parameter COMPLIANCE = "ENABLED"; + parameter LOOPBACK = "ENABLED"; + parameter HOT_RESET = "ENABLED"; + parameter DIS_PREVENT = "ENABLED"; + parameter MPS_VIOLATION_RX = "DISABLED"; + parameter MPS_VIOLATION_TX = "DISABLED"; + parameter EN_RX_ALLOC_SEL = "HW"; + parameter EN_TX_ALLOC_SEL = "HW"; + parameter AUX_CLK_PERIOD = "0b1111010000100100"; + parameter EN_PIPE_IF_CTRL = "DISABLED"; + parameter PIPE_PWRDN = "P1"; + parameter TX_CM_DIS = "DEASSERTED"; + parameter RX_EI_DIS = "DEASSERTED"; + parameter PCLKREQ_N = "DEASSERTED"; + parameter STS_PHY_STATUS = "DEASSERTED"; + parameter STS_PIPE_RSTN = "DEASSERTED"; + parameter LEGACY_MODE = "MATCH_TS"; + parameter OVERFLOW = "DISABLED"; + parameter DIR = "RECEIVE"; + parameter SPEED = "8G"; + parameter LANE = "0"; + parameter COEF_ENABLE_8G = "DISABLED"; + parameter PRESET_ENABLE_8G = "DISABLED"; + parameter VALUE_8G_PRE = "0b000000"; + parameter VALUE_8G_POST = "0b000000"; + parameter REQ_EQ_MAX_COUNT = "0b10"; + parameter MESO_LPBK = "DISABLED"; + parameter TX_REPLAY_ECC2_INJECT_M_1_N = "INJECT_1_ERR"; + parameter TX_REPLAY_ECC1_INJECT_M_1_N = "INJECT_1_ERR"; + parameter REDO = "DISABLED"; + parameter RX_PAR_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter RX_PAR_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter RX_ECC2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter RX_ECC2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter RX_ECC2_INJECT_M_1_N = "INJECT_1_ERR"; + parameter RX_ECC2_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter RX_ECC2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter RX_ECC1_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter RX_ECC1_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter RX_ECC1_INJECT_M_1_N = "INJECT_1_ERR"; + parameter RX_ECC1_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter RX_ECC1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter RX_ERR_PAR = "OTHERWISE"; + parameter RX_ERR_ECC2 = "OTHERWISE"; + parameter RX_ERR_ECC1 = "OTHERWISE"; + parameter TX_PAR_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_PAR_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_ECC2_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_ECC2_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_ECC2_INJECT_M_1_N = "INJECT_1_ERR"; + parameter TX_ECC2_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter TX_ECC2_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_ECC1_REPORT_DISABLE = "ENABLE_REPORTING"; + parameter TX_ECC1_HANDLE_DISABLE = "ENABLE_HANDLING"; + parameter TX_ECC1_INJECT_M_1_N = "INJECT_1_ERR"; + parameter TX_ECC1_INJECT_TYPE = "POSTED_DATA_RAM"; + parameter TX_ECC1_INJECT_EN = "DO_NOT_INJECT_ERR"; + parameter TX_ERR_PAR = "OTHERWISE"; + parameter TX_ERR_ECC2 = "OTHERWISE"; + parameter TX_ERR_ECC1 = "OTHERWISE"; + parameter MAX_PAYLOAD_SIZE_SUPPORTED = "256_BYTES"; + parameter ARXCAL_OUT = "DISABLED"; + parameter F_ARXDPDIR = "IGNORED"; + parameter IDLE_INFER_REC_RCVR_CFG = "OTHERWISE"; + parameter IDLE_INFER_LPBK_SLAVE = "OTHERWISE"; + parameter IDLE_INFER_REC_SPEED2_SUCCESS = "OTHERWISE"; + parameter IDLE_INFER_REC_SPEED2_UNSUCCESS = "OTHERWISE"; + parameter IDLE_INFER_L0_TO_REC_RCVR_LOCK = "OTHERWISE"; + parameter SPEED_CHANGE_FAIL = "OTHERWISE"; + parameter DIRECT_TO_DETECT_FAST = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_CH_BOND = "OTHERWISE"; + parameter DIRECT_TO_LPBK_ENTRY = "OTHERWISE"; + parameter DIRECT_SPEED_CHANGE = "OTHERWISE"; + parameter L0_TO_REC_RCVR_LOCK_RX_TS12 = "OTHERWISE"; + parameter L0_TO_REC_RCVR_LOCK_RX_8G_EIE = "OTHERWISE"; + parameter L0_TO_REC_RCVR_LOCK_RX_INFER = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_PHY = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_FRAME = "OTHERWISE"; + parameter DIRECT_TO_RCVRY_REPLAY = "OTHERWISE"; + parameter DIRECT_TO_HOT_RESET = "OTHERWISE"; + parameter DIRECT_TO_DISABLE = "OTHERWISE"; + parameter RX_L0S_DIRECT_TO_RCVRY = "OTHERWISE"; + parameter AUTONOMOUS_WIDTH_CHANGE = "OTHERWISE"; + parameter DIRECTED_RETRAIN_LINK = "OTHERWISE"; + parameter ERR_TX_PIPE_UNDERFLOW = "OTHERWISE"; + parameter TS2_DETECT3 = "OTHERWISE"; + parameter TS2_DETECT2 = "OTHERWISE"; + parameter TS2_DETECT1 = "OTHERWISE"; + parameter TS2_DETECT0 = "OTHERWISE"; + parameter TS1_DETECT3 = "OTHERWISE"; + parameter TS1_DETECT2 = "OTHERWISE"; + parameter TS1_DETECT1 = "OTHERWISE"; + parameter TS1_DETECT0 = "OTHERWISE"; + parameter TS2I_DETECT3 = "OTHERWISE"; + parameter TS2I_DETECT2 = "OTHERWISE"; + parameter TS2I_DETECT1 = "OTHERWISE"; + parameter TS2I_DETECT0 = "OTHERWISE"; + parameter TS1I_DETECT3 = "OTHERWISE"; + parameter TS1I_DETECT2 = "OTHERWISE"; + parameter TS1I_DETECT1 = "OTHERWISE"; + parameter TS1I_DETECT0 = "OTHERWISE"; + parameter FTS_DETECT3 = "OTHERWISE"; + parameter FTS_DETECT2 = "OTHERWISE"; + parameter FTS_DETECT1 = "OTHERWISE"; + parameter FTS_DETECT0 = "OTHERWISE"; + parameter SKP_DETECT3 = "OTHERWISE"; + parameter SKP_DETECT2 = "OTHERWISE"; + parameter SKP_DETECT1 = "OTHERWISE"; + parameter SKP_DETECT0 = "OTHERWISE"; + parameter EIE_DETECT3 = "OTHERWISE"; + parameter EIE_DETECT2 = "OTHERWISE"; + parameter EIE_DETECT1 = "OTHERWISE"; + parameter EIE_DETECT0 = "OTHERWISE"; + parameter EIOS_DETECT3 = "OTHERWISE"; + parameter EIOS_DETECT2 = "OTHERWISE"; + parameter EIOS_DETECT1 = "OTHERWISE"; + parameter EIOS_DETECT0 = "OTHERWISE"; + parameter DATA_DETECT3 = "OTHERWISE"; + parameter DATA_DETECT2 = "OTHERWISE"; + parameter DATA_DETECT1 = "OTHERWISE"; + parameter DATA_DETECT0 = "OTHERWISE"; + parameter SDS_DETECT3 = "OTHERWISE"; + parameter SDS_DETECT2 = "OTHERWISE"; + parameter SDS_DETECT1 = "OTHERWISE"; + parameter SDS_DETECT0 = "OTHERWISE"; + parameter INFO_BAD_TLP_NULL_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_PHY_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_MALF_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_ECRC_ERR = "OTHERWISE"; + parameter INFO_SCHEDULE_DUPL_ACK = "OTHERWISE"; + parameter INFO_BAD_TLP_SEQ_ERR = "OTHERWISE"; + parameter INFO_BAD_TLP_CRC_ERR = "OTHERWISE"; + parameter INFO_NAK_RECEIVED = "OTHERWISE"; + parameter INFO_DESKEW_OVERFLOW_ERROR = "OTHERWISE"; + parameter INFO_TX_DATA_UNDERFLOW = "OTHERWISE"; + parameter INFO_REPLAY_STARTED = "OTHERWISE"; + parameter ERR_AER_TX_PAR2 = "OTHERWISE"; + parameter ERR_AER_TX_REPLAY_ECC2 = "OTHERWISE"; + parameter ERR_AER_TX_REPLAY_ECC1 = "OTHERWISE"; + parameter ERR_AER_SURPRISE_DOWN = "OTHERWISE"; + parameter ERR_AER_DL_PROTOCOL_ERROR = "OTHERWISE"; + parameter ERR_AER_REPLAY_TIMER_TIMEOUT = "OTHERWISE"; + parameter ERR_AER_REPLAY_NUM_ROLLOVER = "OTHERWISE"; + parameter ERR_AER_BAD_DLLP = "OTHERWISE"; + parameter ERR_AER_BAD_TLP = "OTHERWISE"; + parameter ERR_AER_RECEIVER_ERROR = "OTHERWISE"; + parameter P_RX_LIM_H = "DISABLED"; + parameter P_RX_LIM_D = "DISABLED"; + parameter N_RX_LIM_H = "DISABLED"; + parameter N_RX_LIM_D = "DISABLED"; + parameter C_RX_LIM_H = "DISABLED"; + parameter C_RX_LIM_D = "DISABLED"; + parameter P_TX_LIM_H = "DISABLED"; + parameter P_TX_LIM_D = "DISABLED"; + parameter N_TX_LIM_H = "DISABLED"; + parameter N_TX_LIM_D = "DISABLED"; + parameter C_TX_LIM_H = "DISABLED"; + parameter C_TX_LIM_D = "DISABLED"; + parameter MAX_RSA_WAIT = "0b00101000"; + parameter F_ARXDPNULL = "0b00000"; + input ACTACMD; + input ACTDR11; + input ACTEN; + input ACTHIGHZ; + input ACTMD; + output ACJNOUT; + output ACJPOUT; + input AUXCK; + input CKUSRI; + output CKUSRO; + input ECKIN; + input ECKIND2; + output ECKINDO; + input ERSTN; + input ERSTND2; + input ERXCKD2; + output ERXCKDO; + input ERXRSND2; + input ETXCKD2; + output ETXCKDO; + input ETXRSND2; + output FLR3; + output FLR2; + output FLR1; + output FLR0; + input FLRACK3; + input FLRACK2; + input FLRACK1; + input FLRACK0; + input MINTLEG3; + input MINTLEG2; + input MINTLEG1; + input MINTLEG0; + output MINTO; + input PERSTN; + output PMCTRL4; + output PMCTRL3; + output PMCTRL2; + output PMCTRL1; + output PMCTRL0; + output PMCTRLEN; + input PMDPAST4; + input PMDPAST3; + input PMDPAST2; + input PMDPAST1; + input PMDPAST0; + input PRMSGSD; + input PRNOSNP12; + input PRNOSNP11; + input PRNOSNP10; + input PRNOSNP9; + input PRNOSNP8; + input PRNOSNP7; + input PRNOSNP6; + input PRNOSNP5; + input PRNOSNP4; + input PRNOSNP3; + input PRNOSNP2; + input PRNOSNP1; + input PRNOSNP0; + input PRNSNPRE; + input PRSNOOP12; + input PRSNOOP11; + input PRSNOOP10; + input PRSNOOP9; + input PRSNOOP8; + input PRSNOOP7; + input PRSNOOP6; + input PRSNOOP5; + input PRSNOOP4; + input PRSNOOP3; + input PRSNOOP2; + input PRSNOOP1; + input PRSNOOP0; + input PRSNPRE; + input PPBDREG31; + input PPBDREG30; + input PPBDREG29; + input PPBDREG28; + input PPBDREG27; + input PPBDREG26; + input PPBDREG25; + input PPBDREG24; + input PPBDREG23; + input PPBDREG22; + input PPBDREG21; + input PPBDREG20; + input PPBDREG19; + input PPBDREG18; + input PPBDREG17; + input PPBDREG16; + input PPBDREG15; + input PPBDREG14; + input PPBDREG13; + input PPBDREG12; + input PPBDREG11; + input PPBDREG10; + input PPBDREG9; + input PPBDREG8; + input PPBDREG7; + input PPBDREG6; + input PPBDREG5; + input PPBDREG4; + input PPBDREG3; + input PPBDREG2; + input PPBDREG1; + input PPBDREG0; + output PPBDSEL7; + output PPBDSEL6; + output PPBDSEL5; + output PPBDSEL4; + output PPBDSEL3; + output PPBDSEL2; + output PPBDSEL1; + output PPBDSEL0; + input REXTCK; + input REXTRST; + input RSTUSRN; + output UDLLKUP; + input ULTSDIS; + output UPLLKUP; + output UTLLKUP; + input UCFGADDR11; + input UCFGADDR10; + input UCFGADDR9; + input UCFGADDR8; + input UCFGADDR7; + input UCFGADDR6; + input UCFGADDR5; + input UCFGADDR4; + input UCFGADDR3; + input UCFGADDR2; + input UCFGF2; + input UCFGF1; + input UCFGF0; + output UCFGRDD31; + output UCFGRDD30; + output UCFGRDD29; + output UCFGRDD28; + output UCFGRDD27; + output UCFGRDD26; + output UCFGRDD25; + output UCFGRDD24; + output UCFGRDD23; + output UCFGRDD22; + output UCFGRDD21; + output UCFGRDD20; + output UCFGRDD19; + output UCFGRDD18; + output UCFGRDD17; + output UCFGRDD16; + output UCFGRDD15; + output UCFGRDD14; + output UCFGRDD13; + output UCFGRDD12; + output UCFGRDD11; + output UCFGRDD10; + output UCFGRDD9; + output UCFGRDD8; + output UCFGRDD7; + output UCFGRDD6; + output UCFGRDD5; + output UCFGRDD4; + output UCFGRDD3; + output UCFGRDD2; + output UCFGRDD1; + output UCFGRDD0; + output UCFGRDE; + output UCFGRDY; + input UCFGSERD; + input UCFGVD; + input UCFGWRBE3; + input UCFGWRBE2; + input UCFGWRBE1; + input UCFGWRBE0; + input UCFGWRD31; + input UCFGWRD30; + input UCFGWRD29; + input UCFGWRD28; + input UCFGWRD27; + input UCFGWRD26; + input UCFGWRD25; + input UCFGWRD24; + input UCFGWRD23; + input UCFGWRD22; + input UCFGWRD21; + input UCFGWRD20; + input UCFGWRD19; + input UCFGWRD18; + input UCFGWRD17; + input UCFGWRD16; + input UCFGWRD15; + input UCFGWRD14; + input UCFGWRD13; + input UCFGWRD12; + input UCFGWRD11; + input UCFGWRD10; + input UCFGWRD9; + input UCFGWRD8; + input UCFGWRD7; + input UCFGWRD6; + input UCFGWRD5; + input UCFGWRD4; + input UCFGWRD3; + input UCFGWRD2; + input UCFGWRD1; + input UCFGWRD0; + input UCFGWRDN; + input USERAUPD; + input USERTRS3; + input USERTRS2; + input USERTRS1; + input USERTRS0; + input LMMICLK; + input LMMIOFFSET16; + input LMMIOFFSET15; + input LMMIOFFSET14; + input LMMIOFFSET13; + input LMMIOFFSET12; + input LMMIOFFSET11; + input LMMIOFFSET10; + input LMMIOFFSET9; + input LMMIOFFSET8; + input LMMIOFFSET7; + input LMMIOFFSET6; + input LMMIOFFSET5; + input LMMIOFFSET4; + input LMMIOFFSET3; + input LMMIOFFSET2; + output LMMIRDATA31; + output LMMIRDATA30; + output LMMIRDATA29; + output LMMIRDATA28; + output LMMIRDATA27; + output LMMIRDATA26; + output LMMIRDATA25; + output LMMIRDATA24; + output LMMIRDATA23; + output LMMIRDATA22; + output LMMIRDATA21; + output LMMIRDATA20; + output LMMIRDATA19; + output LMMIRDATA18; + output LMMIRDATA17; + output LMMIRDATA16; + output LMMIRDATA15; + output LMMIRDATA14; + output LMMIRDATA13; + output LMMIRDATA12; + output LMMIRDATA11; + output LMMIRDATA10; + output LMMIRDATA9; + output LMMIRDATA8; + output LMMIRDATA7; + output LMMIRDATA6; + output LMMIRDATA5; + output LMMIRDATA4; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIREQUEST; + input LMMIRESETN; + input LMMIWDATA31; + input LMMIWDATA30; + input LMMIWDATA29; + input LMMIWDATA28; + input LMMIWDATA27; + input LMMIWDATA26; + input LMMIWDATA25; + input LMMIWDATA24; + input LMMIWDATA23; + input LMMIWDATA22; + input LMMIWDATA21; + input LMMIWDATA20; + input LMMIWDATA19; + input LMMIWDATA18; + input LMMIWDATA17; + input LMMIWDATA16; + input LMMIWDATA15; + input LMMIWDATA14; + input LMMIWDATA13; + input LMMIWDATA12; + input LMMIWDATA11; + input LMMIWDATA10; + input LMMIWDATA9; + input LMMIWDATA8; + input LMMIWDATA7; + input LMMIWDATA6; + input LMMIWDATA5; + input LMMIWDATA4; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + input LMMIWRRDN; + output VRXCMDD12; + output VRXCMDD11; + output VRXCMDD10; + output VRXCMDD9; + output VRXCMDD8; + output VRXCMDD7; + output VRXCMDD6; + output VRXCMDD5; + output VRXCMDD4; + output VRXCMDD3; + output VRXCMDD2; + output VRXCMDD1; + output VRXCMDD0; + input VRXCINIT; + input VRXCNH11; + input VRXCNH10; + input VRXCNH9; + input VRXCNH8; + input VRXCNH7; + input VRXCNH6; + input VRXCNH5; + input VRXCNH4; + input VRXCNH3; + input VRXCNH2; + input VRXCNH1; + input VRXCNH0; + input VRXCNINF; + input VRXCRRE; + output VRXD31; + output VRXD30; + output VRXD29; + output VRXD28; + output VRXD27; + output VRXD26; + output VRXD25; + output VRXD24; + output VRXD23; + output VRXD22; + output VRXD21; + output VRXD20; + output VRXD19; + output VRXD18; + output VRXD17; + output VRXD16; + output VRXD15; + output VRXD14; + output VRXD13; + output VRXD12; + output VRXD11; + output VRXD10; + output VRXD9; + output VRXD8; + output VRXD7; + output VRXD6; + output VRXD5; + output VRXD4; + output VRXD3; + output VRXD2; + output VRXD1; + output VRXD0; + output VRXDP3; + output VRXDP2; + output VRXDP1; + output VRXDP0; + output VRXEOP; + output VRXERR; + output VRXF1; + output VRXF0; + input VRXRDY; + output VRXSEL1; + output VRXSEL0; + output VRXSOP; + output VRXVD; + output VXCDINIT; + output VXCDNH11; + output VXCDNH10; + output VXCDNH9; + output VXCDNH8; + output VXCDNH7; + output VXCDNH6; + output VXCDNH5; + output VXCDNH4; + output VXCDNH3; + output VXCDNH2; + output VXCDNH1; + output VXCDNH0; + output VTXCRRE; + input VXD31; + input VXD30; + input VXD29; + input VXD28; + input VXD27; + input VXD26; + input VXD25; + input VXD24; + input VXD23; + input VXD22; + input VXD21; + input VXD20; + input VXD19; + input VXD18; + input VXD17; + input VXD16; + input VXD15; + input VXD14; + input VXD13; + input VXD12; + input VXD11; + input VXD10; + input VXD9; + input VXD8; + input VXD7; + input VXD6; + input VXD5; + input VXD4; + input VXD3; + input VXD2; + input VXD1; + input VXD0; + input VXDP3; + input VXDP2; + input VXDP1; + input VXDP0; + input VXEOP; + input VXEOPN; + output VXRDY; + input VXSOP; + input VXVD; + output TESTOUT7; + output TESTOUT6; + output TESTOUT5; + output TESTOUT4; + output TESTOUT3; + output TESTOUT2; + output TESTOUT1; + output TESTOUT0; + input REFCLKNA; + (* iopad_external_pin *) + input S0REFCKN; + (* iopad_external_pin *) + input S0REFCKP; + (* iopad_external_pin *) + input S0REFRET; + (* iopad_external_pin *) + input S0REXT; + (* iopad_external_pin *) + input S0RXN; + (* iopad_external_pin *) + input S0RXP; + (* iopad_external_pin *) + output S0TXN; + (* iopad_external_pin *) + output S0TXP; + input CLKREQI; + output CLKREQO; + output CLKREQOE; + input SCANCLK; + input SCANRST; + input OPCGLDCK; + input ALTCLKIN; +endmodule + +module PLL_CORE (...); + parameter BW_CTL_BIAS = "0b0101"; + parameter CLKOP_TRIM = "0b0000"; + parameter CLKOS_TRIM = "0b0000"; + parameter CLKOS2_TRIM = "0b0000"; + parameter CLKOS3_TRIM = "0b0000"; + parameter CLKOS4_TRIM = "0b0000"; + parameter CLKOS5_TRIM = "0b0000"; + parameter CRIPPLE = "5P"; + parameter CSET = "40P"; + parameter DELAY_CTRL = "200PS"; + parameter DELA = "0"; + parameter DELB = "0"; + parameter DELC = "0"; + parameter DELD = "0"; + parameter DELE = "0"; + parameter DELF = "0"; + parameter DIRECTION = "DISABLED"; + parameter DIVA = "0"; + parameter DIVB = "0"; + parameter DIVC = "0"; + parameter DIVD = "0"; + parameter DIVE = "0"; + parameter DIVF = "0"; + parameter DYN_SEL = "0b000"; + parameter DYN_SOURCE = "STATIC"; + parameter ENCLK_CLKOP = "DISABLED"; + parameter ENCLK_CLKOS = "DISABLED"; + parameter ENCLK_CLKOS2 = "DISABLED"; + parameter ENCLK_CLKOS3 = "DISABLED"; + parameter ENCLK_CLKOS4 = "DISABLED"; + parameter ENCLK_CLKOS5 = "DISABLED"; + parameter ENABLE_SYNC = "DISABLED"; + parameter FAST_LOCK_EN = "ENABLED"; + parameter V2I_1V_EN = "DISABLED"; + parameter FBK_CUR_BLE = "0b00000000"; + parameter FBK_EDGE_SEL = "POSITIVE"; + parameter FBK_IF_TIMING_CTL = "0b00"; + parameter FBK_INTEGER_MODE = "DISABLED"; + parameter FBK_MASK = "0b00001000"; + parameter FBK_MMD_DIG = "8"; + parameter FBK_MMD_PULS_CTL = "0b0000"; + parameter FBK_MODE = "0b00"; + parameter FBK_PI_BYPASS = "NOT_BYPASSED"; + parameter FBK_PI_RC = "0b1100"; + parameter FBK_PR_CC = "0b0000"; + parameter FBK_PR_IC = "0b1000"; + parameter FLOAT_CP = "DISABLED"; + parameter FLOCK_CTRL = "2X"; + parameter FLOCK_EN = "ENABLED"; + parameter FLOCK_SRC_SEL = "REFCLK"; + parameter FORCE_FILTER = "DISABLED"; + parameter I_CTRL = "10UA"; + parameter IPI_CMP = "0b1000"; + parameter IPI_CMPN = "0b0011"; + parameter IPI_COMP_EN = "DISABLED"; + parameter IPP_CTRL = "0b1000"; + parameter IPP_SEL = "0b1111"; + parameter KP_VCO = "0b11001"; + parameter LDT_INT_LOCK_STICKY = "DISABLED"; + parameter LDT_LOCK = "1536CYC"; + parameter LDT_LOCK_SEL = "U_FREQ"; + parameter LEGACY_ATT = "DISABLED"; + parameter LOAD_REG = "DISABLED"; + parameter OPENLOOP_EN = "DISABLED"; + parameter PHIA = "0"; + parameter PHIB = "0"; + parameter PHIC = "0"; + parameter PHID = "0"; + parameter PHIE = "0"; + parameter PHIF = "0"; + parameter PLLPDN_EN = "DISABLED"; + parameter PLLPD_N = "UNUSED"; + parameter PLLRESET_ENA = "DISABLED"; + parameter REF_INTEGER_MODE = "DISABLED"; + parameter REF_MASK = "0b00000000"; + parameter REF_MMD_DIG = "8"; + parameter REF_MMD_IN = "0b00001000"; + parameter REF_MMD_PULS_CTL = "0b0000"; + parameter REF_TIMING_CTL = "0b00"; + parameter REFIN_RESET = "SET"; + parameter RESET_LF = "DISABLED"; + parameter ROTATE = "DISABLED"; + parameter SEL_OUTA = "DISABLED"; + parameter SEL_OUTB = "DISABLED"; + parameter SEL_OUTC = "DISABLED"; + parameter SEL_OUTD = "DISABLED"; + parameter SEL_OUTE = "DISABLED"; + parameter SEL_OUTF = "DISABLED"; + parameter SLEEP = "DISABLED"; + parameter SSC_DITHER = "DISABLED"; + parameter SSC_EN_CENTER_IN = "DOWN_TRIANGLE"; + parameter SSC_EN_SDM = "DISABLED"; + parameter SSC_EN_SSC = "DISABLED"; + parameter SSC_F_CODE = "0b000000000000000"; + parameter SSC_N_CODE = "0b000010100"; + parameter SSC_ORDER = "SDM_ORDER2"; + parameter SSC_PI_BYPASS = "NOT_BYPASSED"; + parameter SSC_REG_WEIGHTING_SEL = "0b000"; + parameter SSC_SQUARE_MODE = "DISABLED"; + parameter SSC_STEP_IN = "0b0000000"; + parameter SSC_TBASE = "0b000000000000"; + parameter STDBY_ATT = "DISABLED"; + parameter TRIMOP_BYPASS_N = "BYPASSED"; + parameter TRIMOS_BYPASS_N = "BYPASSED"; + parameter TRIMOS2_BYPASS_N = "BYPASSED"; + parameter TRIMOS3_BYPASS_N = "BYPASSED"; + parameter TRIMOS4_BYPASS_N = "BYPASSED"; + parameter TRIMOS5_BYPASS_N = "BYPASSED"; + parameter V2I_KVCO_SEL = "85"; + parameter V2I_PP_ICTRL = "0b00110"; + parameter V2I_PP_RES = "10K"; + parameter CLKMUX_FB = "CMUX_CLKOP"; + parameter SEL_FBK = "DIVA"; + parameter DIV_DEL = "0b0000001"; + parameter PHASE_SEL_DEL = "0b000"; + parameter PHASE_SEL_DEL_P1 = "0b000"; + parameter EXTERNAL_DIVIDE_FACTOR = "0"; + input CIBDIR; + input CIBDSEL2; + input CIBDSEL1; + input CIBDSEL0; + input CIBLDREG; + input CIBROT; + output CLKOP; + output CLKOS; + output CLKOS2; + output CLKOS3; + output CLKOS4; + output CLKOS5; + input ENEXT; + input ENCLKOP; + input ENCLKOS; + input ENCLKOS2; + input ENCLKOS3; + input ENCLKOS4; + input ENCLKOS5; + input FBKCK; + output INTFBK5; + output INTFBK4; + output INTFBK3; + output INTFBK2; + output INTFBK1; + output INTFBK0; + output INTLOCK; + input LEGACY; + output LEGRDYN; + input LMMICLK; + input LMMIOFFSET6; + input LMMIOFFSET5; + input LMMIOFFSET4; + input LMMIOFFSET3; + input LMMIOFFSET2; + input LMMIOFFSET1; + input LMMIOFFSET0; + output LMMIRDATA7; + output LMMIRDATA6; + output LMMIRDATA5; + output LMMIRDATA4; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIREQUEST; + input LMMIRESETN; + input LMMIWDATA7; + input LMMIWDATA6; + input LMMIWDATA5; + input LMMIWDATA4; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + input LMMIWRRDN; + output LOCK; + output PFDDN; + output PFDUP; + input PLLRESET; + input REFCK; + input STDBY; + input ZRSEL3; + output REFMUXCK; + input PLLPDN; + output REGQA; + output REGQB; + output REGQB1; + output CLKOUTDL; + input ROTDEL; + input DIRDEL; + input ROTDELP1; + input GRAYTEST4; + input GRAYTEST3; + input GRAYTEST2; + input GRAYTEST1; + input GRAYTEST0; + input BINTEST1; + input BINTEST0; + input DIRDELP1; + input GRAYACT4; + input GRAYACT3; + input GRAYACT2; + input GRAYACT1; + input GRAYACT0; + input BINACT1; + input BINACT0; + input OPCGLDCK; + input SCANRST; + input SCANCLK; +endmodule + +module PREADD9_CORE (...); + parameter SIGNEDSTATIC_EN = "DISABLED"; + parameter SUBSTRACT_EN = "SUBTRACTION"; + parameter CSIGNED = "DISABLED"; + parameter BSIGNED_OPERAND_EN = "DISABLED"; + parameter BYPASS_PREADD9 = "USED"; + parameter REGBYPSBR0 = "REGISTER"; + parameter REGBYPSBR1 = "BYPASS"; + parameter REGBYPSBL = "REGISTER"; + parameter SHIFTBR = "REGISTER"; + parameter SHIFTBL = "REGISTER"; + parameter GSR = "ENABLED"; + parameter PREADDCAS_EN = "DISABLED"; + parameter SR_18BITSHIFT_EN = "DISABLED"; + parameter OPC = "INPUT_B_AS_PREADDER_OPERAND"; + parameter RESET = "SYNC"; + input B8; + input B7; + input B6; + input B5; + input B4; + input B3; + input B2; + input B1; + input B0; + input BSIGNED; + input C9; + input C8; + input C7; + input C6; + input C5; + input C4; + input C3; + input C2; + input C1; + input C0; + input BRS18; + input BRS17; + input BRS16; + input BRS15; + input BRS14; + input BRS13; + input BRS12; + input BRS11; + input BRS10; + input BRS28; + input BRS27; + input BRS26; + input BRS25; + input BRS24; + input BRS23; + input BRS22; + input BRS21; + input BRS20; + input BLS18; + input BLS17; + input BLS16; + input BLS15; + input BLS14; + input BLS13; + input BLS12; + input BLS11; + input BLS10; + input BLS28; + input BLS27; + input BLS26; + input BLS25; + input BLS24; + input BLS23; + input BLS22; + input BLS21; + input BLS20; + input BRSS1; + input BRSS2; + input BLSS1; + input BLSS2; + input PRCASIN; + input CLK; + input RSTB; + input CEB; + input RSTCL; + input CECL; + output BRSO8; + output BRSO7; + output BRSO6; + output BRSO5; + output BRSO4; + output BRSO3; + output BRSO2; + output BRSO1; + output BRSO0; + output BLSO8; + output BLSO7; + output BLSO6; + output BLSO5; + output BLSO4; + output BLSO3; + output BLSO2; + output BLSO1; + output BLSO0; + output BRSOSGND; + output BLSOSGND; + output PRCASOUT; + output BR8; + output BR7; + output BR6; + output BR5; + output BR4; + output BR3; + output BR2; + output BR1; + output BR0; + output BRSIGNED; +endmodule + +module REFMUX_CORE (...); + parameter REFSEL_ATT = "MC1"; + parameter SEL1 = "SELECT_REFCLK1"; + parameter SEL_REF2 = "REFCLK2_0"; + parameter SEL_REF1 = "REFCLK1_0"; + output REFCK; + output ZRSEL3; + input REFSEL; + input REFCLK17; + input REFCLK16; + input REFCLK15; + input REFCLK14; + input REFCLK13; + input REFCLK12; + input REFCLK11; + input REFCLK10; + input REFCLK27; + input REFCLK26; + input REFCLK25; + input REFCLK24; + input REFCLK23; + input REFCLK22; + input REFCLK21; + input REFCLK20; +endmodule + +module REG18_CORE (...); + parameter REGBYPS = "REGISTER"; + parameter GSR = "ENABLED"; + parameter RESET = "SYNC"; + input PM17; + input PM16; + input PM15; + input PM14; + input PM13; + input PM12; + input PM11; + input PM10; + input PM9; + input PM8; + input PM7; + input PM6; + input PM5; + input PM4; + input PM3; + input PM2; + input PM1; + input PM0; + output PP17; + output PP16; + output PP15; + output PP14; + output PP13; + output PP12; + output PP11; + output PP10; + output PP9; + output PP8; + output PP7; + output PP6; + output PP5; + output PP4; + output PP3; + output PP2; + output PP1; + output PP0; + input CEP; + input RSTP; + input CLK; +endmodule + +module SEIO18_CORE (...); + parameter MIPI_ID = "0"; + parameter PULLMODE = "DOWN"; + parameter MIPI = "DISABLED"; + parameter ENADC_IN = "DISABLED"; + input I; + input DOLP; + (* iopad_external_pin *) + inout B; + output O; + output INLP; + input T; + output INADC; +endmodule + +module SEIO33_CORE (...); + parameter PULLMODE = "DOWN"; + (* iopad_external_pin *) + inout B; + output O; + input I; + input T; + input I3CRESEN; + input I3CWKPU; +endmodule + +module SGMIICDR_CORE (...); + parameter GSR = "ENABLED"; + parameter DCOITUNE4LSB = "0_PERCENT"; + parameter DCOCTLGI = "0_PERCENT"; + parameter DCOSTEP = "100_PERCENT"; + parameter DCOCALDIV = "100_PERCENT"; + parameter DCOIOSTUNE = "0_PERCENT"; + parameter DCOFLTDAC = "80MHZ"; + parameter DCOSTARTVAL = "NOMINAL"; + parameter DCONUOFLSB = "NEG_60_PERCENT"; + parameter RPWDNB = "POWER_UP"; + parameter CDR_CNT4SEL = "BYPASSED"; + parameter DCOITUNE = "100_PERCENT"; + parameter BAND_THRESHOLD = "0b000000"; + parameter AUTO_FACQ_EN = "ENABLED"; + parameter AUTO_CALIB_EN = "ENABLED"; + parameter CDR_LOL_SET = "1000_PPM"; + parameter FC2DCO_FLOOP = "DISABLED"; + parameter FC2DCO_DLOOP = "DISABLED"; + parameter CALIB_TIME_SEL = "24_CYC"; + parameter CALIB_CK_MODE = "BY_2"; + parameter BAND_CALIB_MODE = "256_FDBK_CLK_CYC"; + parameter REG_BAND_SEL = "0b00000"; + parameter REG_BAND_OFFSET = "0b0000"; + parameter REG_IDAC_SEL = "0b00000000"; + parameter LB_CTL = "DISABLED"; + parameter REG_IDAC_EN = "DISABLED"; + parameter ATDCFG = "0_PS"; + parameter ATDDLY = "0_PS"; + parameter BDAVOID_ENB = "ENABLED"; + parameter BYPASSATD = "NOT_BYPASS"; + parameter DCOIUPDNX2 = "1X"; + parameter IDAC_EN = "DISABLED"; + parameter FB_CLK_DIV = "0b010"; + parameter EN_RECALIB = "ENABLED"; + input DCALIRST; + input DFACQRST; + input RRST; + input SPCLK; + output SRCLK; + output SRXD9; + output SRXD8; + output SRXD7; + output SRXD6; + output SRXD5; + output SRXD4; + output SRXD3; + output SRXD2; + output SRXD1; + output SRXD0; + input LMMICLK; + input LMMIREQUEST; + input LMMIWRRDN; + input LMMIOFFSET3; + input LMMIOFFSET2; + input LMMIOFFSET1; + input LMMIOFFSET0; + input LMMIWDATA7; + input LMMIWDATA6; + input LMMIWDATA5; + input LMMIWDATA4; + input LMMIWDATA3; + input LMMIWDATA2; + input LMMIWDATA1; + input LMMIWDATA0; + output LMMIRDATA7; + output LMMIRDATA6; + output LMMIRDATA5; + output LMMIRDATA4; + output LMMIRDATA3; + output LMMIRDATA2; + output LMMIRDATA1; + output LMMIRDATA0; + output LMMIRDATAVALID; + output LMMIREADY; + input LMMIRESETN; + input RSTBFBW; + input RSTBRXF; + input SGMIIIN; + input SREFCLK; + output CDRLOL; + input OPCGLOADCLK; + input SCANCLK; + input SCANRST; +endmodule + +module GSR (...); + parameter SYNCMODE = "ASYNC"; + input GSR_N; + input CLK; +endmodule + +module DCC (...); + parameter DCCEN = "0"; + input CE; + input CLKI; + output CLKO; +endmodule + +module DCS (...); + parameter DCSMODE = "GND"; + input CLK0; + input CLK1; + output DCSOUT; + input SEL; + input SELFORCE; +endmodule + +module GSR_CORE (...); + parameter GSR = "ENABLED"; + parameter GSR_SYNC = "ASYNC"; + output GSROUT; + input CLK; + input GSR_N; +endmodule + +module PCLKDIV (...); + parameter DIV_PCLKDIV = "X1"; + parameter GSR = "ENABLED"; + parameter TESTEN_PCLKDIV = "0"; + parameter TESTMODE_PCLKDIV = "0"; + input CLKIN; + output CLKOUT; + input LSRPDIV; + input PCLKDIVTESTINP2; + input PCLKDIVTESTINP1; + input PCLKDIVTESTINP0; +endmodule + +(* keep *) +module PUR (...); + parameter RST_PULSE = "1"; + input PUR; +endmodule + +module PCLKDIVSP (...); + parameter DIV_PCLKDIV = "X1"; + parameter GSR = "ENABLED"; + input CLKIN; + output CLKOUT; + input LSRPDIV; +endmodule + diff --git a/resources/netlist/resources/kernel/share/nexus/dsp_map.v b/resources/netlist/resources/kernel/share/nexus/dsp_map.v new file mode 100644 index 0000000..b125283 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/dsp_map.v @@ -0,0 +1,79 @@ +module \$__NX_MUL36X36 (input [35:0] A, input [35:0] B, output [71:0] Y); + + parameter A_WIDTH = 36; + parameter B_WIDTH = 36; + parameter Y_WIDTH = 72; + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + + MULT36X36 #( + .REGINPUTA("BYPASS"), + .REGINPUTB("BYPASS"), + .REGOUTPUT("BYPASS") + ) _TECHMAP_REPLACE_ ( + .A(A), .B(B), + .SIGNEDA(A_SIGNED ? 1'b1 : 1'b0), + .SIGNEDB(B_SIGNED ? 1'b1 : 1'b0), + .Z(Y) + ); +endmodule + +module \$__NX_MUL36X18 (input [35:0] A, input [17:0] B, output [53:0] Y); + + parameter A_WIDTH = 36; + parameter B_WIDTH = 18; + parameter Y_WIDTH = 54; + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + + MULT18X36 #( + .REGINPUTA("BYPASS"), + .REGINPUTB("BYPASS"), + .REGOUTPUT("BYPASS") + ) _TECHMAP_REPLACE_ ( + .A(B), .B(A), + .SIGNEDA(B_SIGNED ? 1'b1 : 1'b0), + .SIGNEDB(A_SIGNED ? 1'b1 : 1'b0), + .Z(Y) + ); +endmodule + +module \$__NX_MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y); + + parameter A_WIDTH = 18; + parameter B_WIDTH = 18; + parameter Y_WIDTH = 36; + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + + MULT18X18 #( + .REGINPUTA("BYPASS"), + .REGINPUTB("BYPASS"), + .REGOUTPUT("BYPASS") + ) _TECHMAP_REPLACE_ ( + .A(A), .B(B), + .SIGNEDA(A_SIGNED ? 1'b1 : 1'b0), + .SIGNEDB(B_SIGNED ? 1'b1 : 1'b0), + .Z(Y) + ); +endmodule + +module \$__NX_MUL9X9 (input [8:0] A, input [8:0] B, output [17:0] Y); + + parameter A_WIDTH = 9; + parameter B_WIDTH = 9; + parameter Y_WIDTH = 18; + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + + MULT9X9 #( + .REGINPUTA("BYPASS"), + .REGINPUTB("BYPASS"), + .REGOUTPUT("BYPASS") + ) _TECHMAP_REPLACE_ ( + .A(A), .B(B), + .SIGNEDA(A_SIGNED ? 1'b1 : 1'b0), + .SIGNEDB(B_SIGNED ? 1'b1 : 1'b0), + .Z(Y) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/latches_map.v b/resources/netlist/resources/kernel/share/nexus/latches_map.v new file mode 100644 index 0000000..c28f88c --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/latches_map.v @@ -0,0 +1,11 @@ +module \$_DLATCH_N_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = !E ? D : Q; +endmodule + +module \$_DLATCH_P_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = E ? D : Q; +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/lrams.txt b/resources/netlist/resources/kernel/share/nexus/lrams.txt new file mode 100644 index 0000000..ad28457 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/lrams.txt @@ -0,0 +1,21 @@ +ram huge $__NX_DPSC512K_ { + abits 14; + width 32; + byte 8; + cost 2048; + init no_undef; + port srsw "A" "B" { + clock posedge "C"; + clken; + wrbe_separate; + rdwr no_change; + option "RESETMODE" "SYNC" { + rdsrst zero gated_clken; + } + option "RESETMODE" "ASYNC" { + rdarst zero; + } + rdinit zero; + wrtrans all old; + } +} diff --git a/resources/netlist/resources/kernel/share/nexus/lrams_map.v b/resources/netlist/resources/kernel/share/nexus/lrams_map.v new file mode 100644 index 0000000..5db5ae8 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/lrams_map.v @@ -0,0 +1,194 @@ +module $__NX_DPSC512K_ (...); + +parameter INIT = 0; +parameter OPTION_RESETMODE = "SYNC"; + +input CLK_C; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input PORT_A_WR_EN; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; +input [13:0] PORT_A_ADDR; +input [3:0] PORT_A_WR_BE; +input [31:0] PORT_A_WR_DATA; +output [31:0] PORT_A_RD_DATA; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input PORT_B_WR_EN; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; +input [13:0] PORT_B_ADDR; +input [3:0] PORT_B_WR_BE; +input [31:0] PORT_B_WR_DATA; +output [31:0] PORT_B_RD_DATA; + +function [5119:0] init_slice; + input integer idx; + integer i, j; + init_slice = 0; + for (i = 0; i < 128; i = i + 1) begin + init_slice[i*40+:32] = INIT[(idx * 128 + i) * 32+:32]; + end +endfunction + +DPSC512K #( + .INITVAL_00($sformatf("0x%01280x", init_slice('h00))), + .INITVAL_01($sformatf("0x%01280x", init_slice('h01))), + .INITVAL_02($sformatf("0x%01280x", init_slice('h02))), + .INITVAL_03($sformatf("0x%01280x", init_slice('h03))), + .INITVAL_04($sformatf("0x%01280x", init_slice('h04))), + .INITVAL_05($sformatf("0x%01280x", init_slice('h05))), + .INITVAL_06($sformatf("0x%01280x", init_slice('h06))), + .INITVAL_07($sformatf("0x%01280x", init_slice('h07))), + .INITVAL_08($sformatf("0x%01280x", init_slice('h08))), + .INITVAL_09($sformatf("0x%01280x", init_slice('h09))), + .INITVAL_0A($sformatf("0x%01280x", init_slice('h0a))), + .INITVAL_0B($sformatf("0x%01280x", init_slice('h0b))), + .INITVAL_0C($sformatf("0x%01280x", init_slice('h0c))), + .INITVAL_0D($sformatf("0x%01280x", init_slice('h0d))), + .INITVAL_0E($sformatf("0x%01280x", init_slice('h0e))), + .INITVAL_0F($sformatf("0x%01280x", init_slice('h0f))), + .INITVAL_10($sformatf("0x%01280x", init_slice('h10))), + .INITVAL_11($sformatf("0x%01280x", init_slice('h11))), + .INITVAL_12($sformatf("0x%01280x", init_slice('h12))), + .INITVAL_13($sformatf("0x%01280x", init_slice('h13))), + .INITVAL_14($sformatf("0x%01280x", init_slice('h14))), + .INITVAL_15($sformatf("0x%01280x", init_slice('h15))), + .INITVAL_16($sformatf("0x%01280x", init_slice('h16))), + .INITVAL_17($sformatf("0x%01280x", init_slice('h17))), + .INITVAL_18($sformatf("0x%01280x", init_slice('h18))), + .INITVAL_19($sformatf("0x%01280x", init_slice('h19))), + .INITVAL_1A($sformatf("0x%01280x", init_slice('h1a))), + .INITVAL_1B($sformatf("0x%01280x", init_slice('h1b))), + .INITVAL_1C($sformatf("0x%01280x", init_slice('h1c))), + .INITVAL_1D($sformatf("0x%01280x", init_slice('h1d))), + .INITVAL_1E($sformatf("0x%01280x", init_slice('h1e))), + .INITVAL_1F($sformatf("0x%01280x", init_slice('h1f))), + .INITVAL_20($sformatf("0x%01280x", init_slice('h20))), + .INITVAL_21($sformatf("0x%01280x", init_slice('h21))), + .INITVAL_22($sformatf("0x%01280x", init_slice('h22))), + .INITVAL_23($sformatf("0x%01280x", init_slice('h23))), + .INITVAL_24($sformatf("0x%01280x", init_slice('h24))), + .INITVAL_25($sformatf("0x%01280x", init_slice('h25))), + .INITVAL_26($sformatf("0x%01280x", init_slice('h26))), + .INITVAL_27($sformatf("0x%01280x", init_slice('h27))), + .INITVAL_28($sformatf("0x%01280x", init_slice('h28))), + .INITVAL_29($sformatf("0x%01280x", init_slice('h29))), + .INITVAL_2A($sformatf("0x%01280x", init_slice('h2a))), + .INITVAL_2B($sformatf("0x%01280x", init_slice('h2b))), + .INITVAL_2C($sformatf("0x%01280x", init_slice('h2c))), + .INITVAL_2D($sformatf("0x%01280x", init_slice('h2d))), + .INITVAL_2E($sformatf("0x%01280x", init_slice('h2e))), + .INITVAL_2F($sformatf("0x%01280x", init_slice('h2f))), + .INITVAL_30($sformatf("0x%01280x", init_slice('h30))), + .INITVAL_31($sformatf("0x%01280x", init_slice('h31))), + .INITVAL_32($sformatf("0x%01280x", init_slice('h32))), + .INITVAL_33($sformatf("0x%01280x", init_slice('h33))), + .INITVAL_34($sformatf("0x%01280x", init_slice('h34))), + .INITVAL_35($sformatf("0x%01280x", init_slice('h35))), + .INITVAL_36($sformatf("0x%01280x", init_slice('h36))), + .INITVAL_37($sformatf("0x%01280x", init_slice('h37))), + .INITVAL_38($sformatf("0x%01280x", init_slice('h38))), + .INITVAL_39($sformatf("0x%01280x", init_slice('h39))), + .INITVAL_3A($sformatf("0x%01280x", init_slice('h3a))), + .INITVAL_3B($sformatf("0x%01280x", init_slice('h3b))), + .INITVAL_3C($sformatf("0x%01280x", init_slice('h3c))), + .INITVAL_3D($sformatf("0x%01280x", init_slice('h3d))), + .INITVAL_3E($sformatf("0x%01280x", init_slice('h3e))), + .INITVAL_3F($sformatf("0x%01280x", init_slice('h3f))), + .INITVAL_40($sformatf("0x%01280x", init_slice('h40))), + .INITVAL_41($sformatf("0x%01280x", init_slice('h41))), + .INITVAL_42($sformatf("0x%01280x", init_slice('h42))), + .INITVAL_43($sformatf("0x%01280x", init_slice('h43))), + .INITVAL_44($sformatf("0x%01280x", init_slice('h44))), + .INITVAL_45($sformatf("0x%01280x", init_slice('h45))), + .INITVAL_46($sformatf("0x%01280x", init_slice('h46))), + .INITVAL_47($sformatf("0x%01280x", init_slice('h47))), + .INITVAL_48($sformatf("0x%01280x", init_slice('h48))), + .INITVAL_49($sformatf("0x%01280x", init_slice('h49))), + .INITVAL_4A($sformatf("0x%01280x", init_slice('h4a))), + .INITVAL_4B($sformatf("0x%01280x", init_slice('h4b))), + .INITVAL_4C($sformatf("0x%01280x", init_slice('h4c))), + .INITVAL_4D($sformatf("0x%01280x", init_slice('h4d))), + .INITVAL_4E($sformatf("0x%01280x", init_slice('h4e))), + .INITVAL_4F($sformatf("0x%01280x", init_slice('h4f))), + .INITVAL_50($sformatf("0x%01280x", init_slice('h50))), + .INITVAL_51($sformatf("0x%01280x", init_slice('h51))), + .INITVAL_52($sformatf("0x%01280x", init_slice('h52))), + .INITVAL_53($sformatf("0x%01280x", init_slice('h53))), + .INITVAL_54($sformatf("0x%01280x", init_slice('h54))), + .INITVAL_55($sformatf("0x%01280x", init_slice('h55))), + .INITVAL_56($sformatf("0x%01280x", init_slice('h56))), + .INITVAL_57($sformatf("0x%01280x", init_slice('h57))), + .INITVAL_58($sformatf("0x%01280x", init_slice('h58))), + .INITVAL_59($sformatf("0x%01280x", init_slice('h59))), + .INITVAL_5A($sformatf("0x%01280x", init_slice('h5a))), + .INITVAL_5B($sformatf("0x%01280x", init_slice('h5b))), + .INITVAL_5C($sformatf("0x%01280x", init_slice('h5c))), + .INITVAL_5D($sformatf("0x%01280x", init_slice('h5d))), + .INITVAL_5E($sformatf("0x%01280x", init_slice('h5e))), + .INITVAL_5F($sformatf("0x%01280x", init_slice('h5f))), + .INITVAL_60($sformatf("0x%01280x", init_slice('h60))), + .INITVAL_61($sformatf("0x%01280x", init_slice('h61))), + .INITVAL_62($sformatf("0x%01280x", init_slice('h62))), + .INITVAL_63($sformatf("0x%01280x", init_slice('h63))), + .INITVAL_64($sformatf("0x%01280x", init_slice('h64))), + .INITVAL_65($sformatf("0x%01280x", init_slice('h65))), + .INITVAL_66($sformatf("0x%01280x", init_slice('h66))), + .INITVAL_67($sformatf("0x%01280x", init_slice('h67))), + .INITVAL_68($sformatf("0x%01280x", init_slice('h68))), + .INITVAL_69($sformatf("0x%01280x", init_slice('h69))), + .INITVAL_6A($sformatf("0x%01280x", init_slice('h6a))), + .INITVAL_6B($sformatf("0x%01280x", init_slice('h6b))), + .INITVAL_6C($sformatf("0x%01280x", init_slice('h6c))), + .INITVAL_6D($sformatf("0x%01280x", init_slice('h6d))), + .INITVAL_6E($sformatf("0x%01280x", init_slice('h6e))), + .INITVAL_6F($sformatf("0x%01280x", init_slice('h6f))), + .INITVAL_70($sformatf("0x%01280x", init_slice('h70))), + .INITVAL_71($sformatf("0x%01280x", init_slice('h71))), + .INITVAL_72($sformatf("0x%01280x", init_slice('h72))), + .INITVAL_73($sformatf("0x%01280x", init_slice('h73))), + .INITVAL_74($sformatf("0x%01280x", init_slice('h74))), + .INITVAL_75($sformatf("0x%01280x", init_slice('h75))), + .INITVAL_76($sformatf("0x%01280x", init_slice('h76))), + .INITVAL_77($sformatf("0x%01280x", init_slice('h77))), + .INITVAL_78($sformatf("0x%01280x", init_slice('h78))), + .INITVAL_79($sformatf("0x%01280x", init_slice('h79))), + .INITVAL_7A($sformatf("0x%01280x", init_slice('h7a))), + .INITVAL_7B($sformatf("0x%01280x", init_slice('h7b))), + .INITVAL_7C($sformatf("0x%01280x", init_slice('h7c))), + .INITVAL_7D($sformatf("0x%01280x", init_slice('h7d))), + .INITVAL_7E($sformatf("0x%01280x", init_slice('h7e))), + .INITVAL_7F($sformatf("0x%01280x", init_slice('h7f))), + .OUTREG_A("NO_REG"), + .OUTREG_B("NO_REG"), + .ECC_BYTE_SEL("BYTE_EN"), + .GSR("DISABLED"), + .RESETMODE(OPTION_RESETMODE), + .ASYNC_RESET_RELEASE(OPTION_RESETMODE), +) _TECHMAP_REPLACE_ ( + .CLK(CLK_C), + + .WEA(PORT_A_WR_EN), + .CEA(PORT_A_CLK_EN), + .RSTA(OPTION_RESETMODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST), + .CSA(1'b1), + .ADA(PORT_A_ADDR), + .BENA_N(~PORT_A_WR_BE), + .DIA(PORT_A_WR_DATA), + .DOA(PORT_A_RD_DATA), + + .WEB(PORT_B_WR_EN), + .CEB(PORT_B_CLK_EN), + .RSTB(OPTION_RESETMODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST), + .CSB(1'b1), + .BENB_N(~PORT_B_WR_BE), + .ADB(PORT_B_ADDR), + .DIB(PORT_B_WR_DATA), + .DOB(PORT_B_RD_DATA), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/lutrams.txt b/resources/netlist/resources/kernel/share/nexus/lutrams.txt new file mode 100644 index 0000000..90e1e7b --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/lutrams.txt @@ -0,0 +1,12 @@ +ram distributed $__NEXUS_DPR16X4_ { + abits 4; + width 4; + cost 4; + init no_undef; + prune_rom; + port sw "W" { + clock posedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/nexus/lutrams_map.v b/resources/netlist/resources/kernel/share/nexus/lutrams_map.v new file mode 100644 index 0000000..d12b490 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/lutrams_map.v @@ -0,0 +1,23 @@ +module $__NEXUS_DPR16X4_ (...); + parameter INIT = 64'b0; + + input PORT_W_CLK; + input [3:0] PORT_W_ADDR; + input [3:0] PORT_W_WR_DATA; + input PORT_W_WR_EN; + + input [3:0] PORT_R_ADDR; + output [3:0] PORT_R_RD_DATA; + + DPR16X4 #( + .INITVAL($sformatf("0x%08x", INIT)) + ) _TECHMAP_REPLACE_ ( + .RAD(PORT_R_ADDR), + .DO(PORT_R_RD_DATA), + + .WAD(PORT_W_ADDR), + .DI(PORT_W_WR_DATA), + .WCK(PORT_W_CLK), + .WRE(PORT_W_WR_EN) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/nexus/parse_init.vh b/resources/netlist/resources/kernel/share/nexus/parse_init.vh new file mode 100644 index 0000000..0f9ab78 --- /dev/null +++ b/resources/netlist/resources/kernel/share/nexus/parse_init.vh @@ -0,0 +1,33 @@ +function [15:0] parse_init; + input [((2+(16/4))*8)-1:0] init; + reg [7:0] c; + integer i; + begin + for (i = 0; i < (16/4); i = i + 1) begin + c = init[(i * 8) +: 8]; + if (c >= "0" && c <= "9") + parse_init[(i * 4) +: 4] = (c - "0"); + else if (c >= "A" && c <= "F") + parse_init[(i * 4) +: 4] = (c - "A") + 10; + else if (c >= "a" && c <= "f") + parse_init[(i * 4) +: 4] = (c - "a") + 10; + end + end +endfunction + +function [63:0] parse_init_64; + input [((2+(64/4))*8)-1:0] init; + reg [7:0] c; + integer i; + begin + for (i = 0; i < (64/4); i = i + 1) begin + c = init[(i * 8) +: 8]; + if (c >= "0" && c <= "9") + parse_init_64[(i * 4) +: 4] = (c - "0"); + else if (c >= "A" && c <= "F") + parse_init_64[(i * 4) +: 4] = (c - "A") + 10; + else if (c >= "a" && c <= "f") + parse_init_64[(i * 4) +: 4] = (c - "a") + 10; + end + end +endfunction diff --git a/resources/netlist/resources/kernel/share/pmux2mux.v b/resources/netlist/resources/kernel/share/pmux2mux.v new file mode 100644 index 0000000..9c97245 --- /dev/null +++ b/resources/netlist/resources/kernel/share/pmux2mux.v @@ -0,0 +1,21 @@ +module \$pmux (A, B, S, Y); + +wire [1023:0] _TECHMAP_DO_ = "proc; clean"; + +parameter WIDTH = 1; +parameter S_WIDTH = 1; + +input [WIDTH-1:0] A; +input [WIDTH*S_WIDTH-1:0] B; +input [S_WIDTH-1:0] S; +output reg [WIDTH-1:0] Y; + +integer i; + +always @* begin + Y <= A; + for (i = 0; i < S_WIDTH; i=i+1) + if (S[i]) Y <= B[WIDTH*i +: WIDTH]; +end + +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/abc9_map.v b/resources/netlist/resources/kernel/share/quicklogic/abc9_map.v new file mode 100644 index 0000000..46c11d6 --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/abc9_map.v @@ -0,0 +1,26 @@ +// This file exists to map purely-synchronous flops to ABC9 flops, while +// mapping flops with asynchronous-set/clear as boxes, this is because ABC9 +// doesn't support asynchronous-set/clear flops in sequential synthesis. + +module dffepc ( + output Q, + input D, + input CLK, + input EN, + input CLR, + input PRE +); + +parameter INIT = 1'b0; + +parameter _TECHMAP_CONSTMSK_CLR_ = 1'b0; +parameter _TECHMAP_CONSTMSK_PRE_ = 1'b0; +parameter _TECHMAP_CONSTVAL_CLR_ = 1'b0; +parameter _TECHMAP_CONSTVAL_PRE_ = 1'b0; + +if (_TECHMAP_CONSTMSK_CLR_ != 1'b0 && _TECHMAP_CONSTMSK_PRE_ != 1'b0 && _TECHMAP_CONSTVAL_CLR_ == 1'b0 && _TECHMAP_CONSTVAL_PRE_ == 1'b0) + $__PP3_DFFEPC_SYNCONLY _TECHMAP_REPLACE_ (.Q(Q), .D(D), .CLK(CLK), .EN(EN)); +else + wire _TECHMAP_FAIL_ = 1; + +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/abc9_model.v b/resources/netlist/resources/kernel/share/quicklogic/abc9_model.v new file mode 100644 index 0000000..06d4a2a --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/abc9_model.v @@ -0,0 +1,11 @@ +(* abc9_flop, lib_whitebox *) +module $__PP3_DFFEPC_SYNCONLY ( + output Q, + input D, + input CLK, + input EN, +); + + dffepc ff (.Q(Q), .D(D), .CLK(CLK), .EN(EN), .PRE(1'b0), .CLR(1'b0)); + +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/abc9_unmap.v b/resources/netlist/resources/kernel/share/quicklogic/abc9_unmap.v new file mode 100644 index 0000000..1681e01 --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/abc9_unmap.v @@ -0,0 +1,14 @@ +module $__PP3_DFFEPC_SYNCONLY ( + output Q, + input D, + input CLK, + input EN, +); + +// For some reason ABC9 adds init attributes to wires even though they were removed before mapping. +// As a workaround, remove any init attributes that get reintroduced. +wire _TECHMAP_REMOVEINIT_Q_ = 1; + +dffepc _TECHMAP_REPLACE_ (.Q(Q), .D(D), .CLK(CLK), .EN(EN), .PRE(1'b0), .CLR(1'b0)); + +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/cells_sim.v b/resources/netlist/resources/kernel/share/quicklogic/cells_sim.v new file mode 100644 index 0000000..f24782e --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/cells_sim.v @@ -0,0 +1,36 @@ +module inv ( + output Q, + input A +); + assign Q = A ? 0 : 1; +endmodule + +module buff ( + output Q, + input A +); + assign Q = A; +endmodule + +module logic_0 ( + output A +); + assign A = 0; +endmodule + +module logic_1 ( + output A +); + assign A = 1; +endmodule + +module gclkbuff ( + input A, + output Z +); + specify + (A => Z) = 0; + endspecify + + assign Z = A; +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/lut_sim.v b/resources/netlist/resources/kernel/share/quicklogic/lut_sim.v new file mode 100644 index 0000000..851ce4d --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/lut_sim.v @@ -0,0 +1,76 @@ +(* abc9_lut=1, lib_whitebox *) +module LUT1 ( + output O, + input I0 +); + parameter [1:0] INIT = 0; + parameter EQN = "(I0)"; + + // These timings are for PolarPro 3E; other families will need updating. + specify + (I0 => O) = 698; // FS -> FZ + endspecify + + assign O = I0 ? INIT[1] : INIT[0]; +endmodule + +// TZ TSL TAB +(* abc9_lut=2, lib_whitebox *) +module LUT2 ( + output O, + input I0, I1 +); + parameter [3:0] INIT = 4'h0; + parameter EQN = "(I0)"; + + // These timings are for PolarPro 3E; other families will need updating. + specify + (I0 => O) = 1251; // TAB -> TZ + (I1 => O) = 1406; // TSL -> TZ + endspecify + + wire [1:0] s1 = I1 ? INIT[3:2] : INIT[1:0]; + assign O = I0 ? s1[1] : s1[0]; +endmodule + +(* abc9_lut=2, lib_whitebox *) +module LUT3 ( + output O, + input I0, I1, I2 +); + parameter [7:0] INIT = 8'h0; + parameter EQN = "(I0)"; + + // These timings are for PolarPro 3E; other families will need updating. + specify + (I0 => O) = 1251; // TAB -> TZ + (I1 => O) = 1406; // TSL -> TZ + (I2 => O) = 1699; // ('TA1', 'TA2', 'TB1', 'TB2') -> TZ + endspecify + + wire [3:0] s2 = I2 ? INIT[7:4] : INIT[3:0]; + wire [1:0] s1 = I1 ? s2[3:2] : s2[1:0]; + assign O = I0 ? s1[1] : s1[0]; +endmodule + +(* abc9_lut=4, lib_whitebox *) +module LUT4 ( + output O, + input I0, I1, I2, I3 +); + parameter [15:0] INIT = 16'h0; + parameter EQN = "(I0)"; + + // These timings are for PolarPro 3E; other families will need updating. + specify + (I0 => O) = 995; // TBS -> CZ + (I1 => O) = 1437; // ('TAB', 'BAB') -> CZ + (I2 => O) = 1593; // ('TSL', 'BSL') -> CZ + (I3 => O) = 1887; // ('TA1', 'TA2', 'TB1', 'TB2', 'BA1', 'BA2', 'BB1', 'BB2') -> CZ + endspecify + + wire [7:0] s3 = I3 ? INIT[15:8] : INIT[7:0]; + wire [3:0] s2 = I2 ? s3[7:4] : s3[3:0]; + wire [1:0] s1 = I1 ? s2[3:2] : s2[1:0]; + assign O = I0 ? s1[1] : s1[0]; +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/pp3_cells_map.v b/resources/netlist/resources/kernel/share/quicklogic/pp3_cells_map.v new file mode 100644 index 0000000..10e270d --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/pp3_cells_map.v @@ -0,0 +1,36 @@ +module \$_MUX8_ ( + A, B, C, D, E, F, G, H, S, T, U, Y +); + input A, B, C, D, E, F, G, H, S, T, U; + output Y; + mux8x0 _TECHMAP_REPLACE_ ( + .A(A), + .B(B), + .C(C), + .D(D), + .E(E), + .F(F), + .G(G), + .H(H), + .S0(S), + .S1(T), + .S2(U), + .Q(Y) + ); +endmodule + +module \$_MUX4_ ( + A, B, C, D, S, T, U, Y +); + input A, B, C, D, S, T, U; + output Y; + mux4x0 _TECHMAP_REPLACE_ ( + .A(A), + .B(B), + .C(C), + .D(D), + .S0(S), + .S1(T), + .Q(Y) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/pp3_cells_sim.v b/resources/netlist/resources/kernel/share/quicklogic/pp3_cells_sim.v new file mode 100644 index 0000000..5820d7a --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/pp3_cells_sim.v @@ -0,0 +1,329 @@ +module inpad ( + output Q, + (* iopad_external_pin *) + input P +); + specify + (P => Q) = 0; + endspecify + assign Q = P; +endmodule + +module outpad ( + (* iopad_external_pin *) + output P, + input A +); + specify + (A => P) = 0; + endspecify + assign P = A; +endmodule + +module ckpad ( + output Q, + (* iopad_external_pin *) + input P +); + specify + (P => Q) = 0; + endspecify + assign Q = P; +endmodule + +module bipad ( + input A, + input EN, + output Q, + (* iopad_external_pin *) + inout P +); + assign Q = P; + assign P = EN ? A : 1'bz; +endmodule + +module dff ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK +); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + always @(posedge CLK) Q <= D; +endmodule + +module dffc ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK, + (* clkbuf_sink *) + input CLR +); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + always @(posedge CLK or posedge CLR) + if (CLR) Q <= 1'b0; + else Q <= D; +endmodule + +module dffp ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK, + (* clkbuf_sink *) + input PRE +); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + always @(posedge CLK or posedge PRE) + if (PRE) Q <= 1'b1; + else Q <= D; +endmodule + +module dffpc ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK, + (* clkbuf_sink *) + input CLR, + (* clkbuf_sink *) + input PRE +); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + always @(posedge CLK or posedge CLR or posedge PRE) + if (CLR) Q <= 1'b0; + else if (PRE) Q <= 1'b1; + else Q <= D; +endmodule + +module dffe ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK, + input EN +); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + always @(posedge CLK) if (EN) Q <= D; +endmodule + +module dffec ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK, + input EN, + (* clkbuf_sink *) + input CLR +); + parameter [0:0] INIT = 1'b0; + initial Q = INIT; + + always @(posedge CLK or posedge CLR) + if (CLR) Q <= 1'b0; + else if (EN) Q <= D; +endmodule + +(* lib_whitebox *) +module dffepc ( + output reg Q, + input D, + (* clkbuf_sink *) + input CLK, + input EN, + (* clkbuf_sink *) + input CLR, + (* clkbuf_sink *) + input PRE +); + parameter [0:0] INIT = 1'b0; + + specify + if (EN) (posedge CLK => (Q : D)) = 1701; // QCK -> QZ + if (CLR) (CLR => Q) = 967; // QRT -> QZ + if (PRE) (PRE => Q) = 1252; // QST -> QZ + $setup(D, posedge CLK, 216); // QCK -> QDS + $setup(EN, posedge CLK, 590); // QCK -> QEN + endspecify + + initial Q = INIT; + always @(posedge CLK or posedge CLR or posedge PRE) + if (CLR) Q <= 1'b0; + else if (PRE) Q <= 1'b1; + else if (EN) Q <= D; +endmodule + +// FZ FS F2 (F1 TO 0) +(* abc9_box, lib_whitebox *) +module AND2I0 ( + output Q, + input A, B +); + specify + (A => Q) = 698; // FS -> FZ + (B => Q) = 639; // F2 -> FZ + endspecify + + assign Q = A ? B : 0; +endmodule + +(* abc9_box, lib_whitebox *) +module mux2x0 ( + output Q, + input S, A, B +); + specify + (S => Q) = 698; // FS -> FZ + (A => Q) = 639; // F1 -> FZ + (B => Q) = 639; // F2 -> FZ + endspecify + + assign Q = S ? B : A; +endmodule + +(* abc9_box, lib_whitebox *) +module mux2x1 ( + output Q, + input S, A, B +); + specify + (S => Q) = 698; // FS -> FZ + (A => Q) = 639; // F1 -> FZ + (B => Q) = 639; // F2 -> FZ + endspecify + + assign Q = S ? B : A; +endmodule + +(* abc9_box, lib_whitebox *) +module mux4x0 ( + output Q, + input S0, S1, A, B, C, D +); + specify + (S0 => Q) = 1251; // TAB -> TZ + (S1 => Q) = 1406; // TSL -> TZ + (A => Q) = 1699; // TA1 -> TZ + (B => Q) = 1687; // TA2 -> TZ + (C => Q) = 1669; // TB1 -> TZ + (D => Q) = 1679; // TB2 -> TZ + endspecify + + assign Q = S1 ? (S0 ? D : C) : (S0 ? B : A); +endmodule + +// S0 BSL TSL +// S1 BAB TAB +// S2 TBS +// A TA1 +// B TA2 +// C TB1 +// D TB2 +// E BA1 +// F BA2 +// G BB1 +// H BB2 +// Q CZ +(* abc9_box, lib_whitebox *) +module mux8x0 ( + output Q, + input S0, S1, S2, A, B, C, D, E, F, G, H +); + specify + (S0 => Q) = 1593; // ('TSL', 'BSL') -> CZ + (S1 => Q) = 1437; // ('TAB', 'BAB') -> CZ + (S2 => Q) = 995; // TBS -> CZ + (A => Q) = 1887; // TA1 -> CZ + (B => Q) = 1873; // TA2 -> CZ + (C => Q) = 1856; // TB1 -> CZ + (D => Q) = 1860; // TB2 -> CZ + (E => Q) = 1714; // BA1 -> CZ + (F => Q) = 1773; // BA2 -> CZ + (G => Q) = 1749; // BB1 -> CZ + (H => Q) = 1723; // BB2 -> CZ + endspecify + + assign Q = S2 ? (S1 ? (S0 ? H : G) : (S0 ? F : E)) : (S1 ? (S0 ? D : C) : (S0 ? B : A)); +endmodule + +(* blackbox *) +(* keep *) +module qlal4s3b_cell_macro ( + input WB_CLK, + input WBs_ACK, + input [31:0] WBs_RD_DAT, + output [3:0] WBs_BYTE_STB, + output WBs_CYC, + output WBs_WE, + output WBs_RD, + output WBs_STB, + output [16:0] WBs_ADR, + input [3:0] SDMA_Req, + input [3:0] SDMA_Sreq, + output [3:0] SDMA_Done, + output [3:0] SDMA_Active, + input [3:0] FB_msg_out, + input [7:0] FB_Int_Clr, + output FB_Start, + input FB_Busy, + output WB_RST, + output Sys_PKfb_Rst, + output Clk16, + output Clk16_Rst, + output Clk21, + output Clk21_Rst, + output Sys_Pclk, + output Sys_Pclk_Rst, + input Sys_PKfb_Clk, + input [31:0] FB_PKfbData, + output [31:0] WBs_WR_DAT, + input [3:0] FB_PKfbPush, + input FB_PKfbSOF, + input FB_PKfbEOF, + output [7:0] Sensor_Int, + output FB_PKfbOverflow, + output [23:0] TimeStamp, + input Sys_PSel, + input [15:0] SPIm_Paddr, + input SPIm_PEnable, + input SPIm_PWrite, + input [31:0] SPIm_PWdata, + output SPIm_PReady, + output SPIm_PSlvErr, + output [31:0] SPIm_Prdata, + input [15:0] Device_ID, + input [13:0] FBIO_In_En, + input [13:0] FBIO_Out, + input [13:0] FBIO_Out_En, + output [13:0] FBIO_In, + inout [13:0] SFBIO, + input Device_ID_6S, + input Device_ID_4S, + input SPIm_PWdata_26S, + input SPIm_PWdata_24S, + input SPIm_PWdata_14S, + input SPIm_PWdata_11S, + input SPIm_PWdata_0S, + input SPIm_Paddr_8S, + input SPIm_Paddr_6S, + input FB_PKfbPush_1S, + input FB_PKfbData_31S, + input FB_PKfbData_21S, + input FB_PKfbData_19S, + input FB_PKfbData_9S, + input FB_PKfbData_6S, + input Sys_PKfb_ClkS, + input FB_BusyS, + input WB_CLKS +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/pp3_ffs_map.v b/resources/netlist/resources/kernel/share/quicklogic/pp3_ffs_map.v new file mode 100644 index 0000000..73ba6c9 --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/pp3_ffs_map.v @@ -0,0 +1,4 @@ +module \$_DFFSRE_PPPP_ (input C, S, R, E, D, output Q); + wire _TECHMAP_REMOVEINIT_Q_ = 1; + dffepc #(.INIT(1'b0)) _TECHMAP_REPLACE_ (.CLK(C), .PRE(S), .CLR(R), .EN(E), .D(D), .Q(Q)); +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/pp3_latches_map.v b/resources/netlist/resources/kernel/share/quicklogic/pp3_latches_map.v new file mode 100644 index 0000000..240a3fb --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/pp3_latches_map.v @@ -0,0 +1,11 @@ +module \$_DLATCH_P_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = E ? D : Q; +endmodule + +module \$_DLATCH_N_ (E, D, Q); + wire [1023:0] _TECHMAP_DO_ = "simplemap; opt"; + input E, D; + output Q = !E ? D : Q; +endmodule diff --git a/resources/netlist/resources/kernel/share/quicklogic/pp3_lut_map.v b/resources/netlist/resources/kernel/share/quicklogic/pp3_lut_map.v new file mode 100644 index 0000000..4c375c9 --- /dev/null +++ b/resources/netlist/resources/kernel/share/quicklogic/pp3_lut_map.v @@ -0,0 +1,53 @@ +module \$lut ( + A, Y +); + parameter WIDTH = 0; + parameter LUT = 0; + + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + LUT1 #( + .EQN(""), + .INIT(LUT) + ) _TECHMAP_REPLACE_ ( + .O(Y), + .I0(A[0]) + ); + end else if (WIDTH == 2) begin + LUT2 #( + .EQN(""), + .INIT(LUT) + ) _TECHMAP_REPLACE_ ( + .O(Y), + .I0(A[0]), + .I1(A[1]) + ); + end else if (WIDTH == 3) begin + LUT3 #( + .EQN(""), + .INIT(LUT) + ) _TECHMAP_REPLACE_ ( + .O(Y), + .I0(A[0]), + .I1(A[1]), + .I2(A[2]) + ); + end else if (WIDTH == 4) begin + LUT4 #( + .EQN(""), + .INIT(LUT) + ) _TECHMAP_REPLACE_ ( + .O(Y), + .I0(A[0]), + .I1(A[1]), + .I2(A[2]), + .I3(A[3]) + ); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/sf2/arith_map.v b/resources/netlist/resources/kernel/share/sf2/arith_map.v new file mode 100644 index 0000000..eb36779 --- /dev/null +++ b/resources/netlist/resources/kernel/share/sf2/arith_map.v @@ -0,0 +1,69 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +(* techmap_celltype = "$alu" *) +module \$__SF2_ALU (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] AA, BB; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(AA)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(BB)); + + (* force_downto *) + wire [Y_WIDTH-1:0] C = {CO, CI}; + + genvar i; + generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice + ARI1 #( + // G = F1 = A[i] & (B[i]^BI) + // Y = F0 = A[i]^B[i]^BI + // P = Y + // ADCB + .INIT(20'b 01_11_0010_1000_1001_0110) + ) carry ( + .A(1'b0), + .B(AA[i]), + .C(BB[i]), + .D(BI), + .FCI(C[i]), + .Y(X[i]), + .S(Y[i]), + .FCO(CO[i]) + ); + end endgenerate +endmodule + diff --git a/resources/netlist/resources/kernel/share/sf2/cells_map.v b/resources/netlist/resources/kernel/share/sf2/cells_map.v new file mode 100644 index 0000000..8878299 --- /dev/null +++ b/resources/netlist/resources/kernel/share/sf2/cells_map.v @@ -0,0 +1,51 @@ +module \$_DFFE_PN0P_ (input D, C, R, E, output Q); + SLE _TECHMAP_REPLACE_ (.D(D), .CLK(C), .EN(E), .ALn(R), .ADn(1'b1), .SLn(1'b1), .SD(1'b0), .LAT(1'b0), .Q(Q)); +endmodule + +module \$_DFFE_PN1P_ (input D, C, R, E, output Q); + SLE _TECHMAP_REPLACE_ (.D(D), .CLK(C), .EN(E), .ALn(R), .ADn(1'b0), .SLn(1'b1), .SD(1'b0), .LAT(1'b0), .Q(Q)); +endmodule + +module \$_SDFFCE_PN0P_ (input D, C, R, E, output Q); + SLE _TECHMAP_REPLACE_ (.D(D), .CLK(C), .EN(E), .ALn(1'b1), .ADn(1'b0), .SLn(R), .SD(1'b0), .LAT(1'b0), .Q(Q)); +endmodule + +module \$_SDFFCE_PN1P_ (input D, C, R, E, output Q); + SLE _TECHMAP_REPLACE_ (.D(D), .CLK(C), .EN(E), .ALn(1'b1), .ADn(1'b0), .SLn(R), .SD(1'b1), .LAT(1'b0), .Q(Q)); +endmodule + +module \$_DLATCH_PN0_ (input D, R, E, output Q); + SLE _TECHMAP_REPLACE_ (.D(D), .CLK(E), .EN(1'b1), .ALn(R), .ADn(1'b1), .SLn(1'b1), .SD(1'b0), .LAT(1'b1), .Q(Q)); +endmodule + +module \$_DLATCH_PN1_ (input D, R, E, output Q); + SLE _TECHMAP_REPLACE_ (.D(D), .CLK(E), .EN(1'b1), .ALn(R), .ADn(1'b0), .SLn(1'b1), .SD(1'b0), .LAT(1'b1), .Q(Q)); +endmodule + +`ifndef NO_LUT +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + CFG1 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.Y(Y), .A(A[0])); + end else + if (WIDTH == 2) begin + CFG2 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.Y(Y), .A(A[0]), .B(A[1])); + end else + if (WIDTH == 3) begin + CFG3 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.Y(Y), .A(A[0]), .B(A[1]), .C(A[2])); + end else + if (WIDTH == 4) begin + CFG4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.Y(Y), .A(A[0]), .B(A[1]), .C(A[2]), .D(A[3])); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule +`endif diff --git a/resources/netlist/resources/kernel/share/sf2/cells_sim.v b/resources/netlist/resources/kernel/share/sf2/cells_sim.v new file mode 100644 index 0000000..b5438e4 --- /dev/null +++ b/resources/netlist/resources/kernel/share/sf2/cells_sim.v @@ -0,0 +1,579 @@ +// https://coredocs.s3.amazonaws.com/Libero/12_0_0/Tool/sf2_mlg.pdf + +module AND2 ( + input A, B, + output Y +); + assign Y = A & B; +endmodule + +module AND3 ( + input A, B, C, + output Y +); + assign Y = A & B & C; +endmodule + +module AND4 ( + input A, B, C, D, + output Y +); + assign Y = A & B & C & D; +endmodule + +module CFG1 ( + output Y, + input A +); + parameter [1:0] INIT = 2'h0; + assign Y = INIT >> A; +endmodule + +module CFG2 ( + output Y, + input A, + input B +); + parameter [3:0] INIT = 4'h0; + assign Y = INIT >> {B, A}; +endmodule + +module CFG3 ( + output Y, + input A, + input B, + input C +); + parameter [7:0] INIT = 8'h0; + assign Y = INIT >> {C, B, A}; +endmodule + +module CFG4 ( + output Y, + input A, + input B, + input C, + input D +); + parameter [15:0] INIT = 16'h0; + assign Y = INIT >> {D, C, B, A}; +endmodule + +module BUFF ( + input A, + output Y +); + assign Y = A; +endmodule + +module BUFD ( + input A, + output Y +); + assign Y = A; +endmodule + +module CLKINT ( + input A, + (* clkbuf_driver *) + output Y +); + assign Y = A; +endmodule + +module CLKINT_PRESERVE ( + input A, + (* clkbuf_driver *) + output Y +); + assign Y = A; +endmodule + +module GCLKINT ( + input A, EN, + (* clkbuf_driver *) + output Y +); + assign Y = A & EN; +endmodule + +module RCLKINT ( + input A, + (* clkbuf_driver *) + output Y +); + assign Y = A; +endmodule + +module RGCLKINT ( + input A, EN, + (* clkbuf_driver *) + output Y +); + assign Y = A & EN; +endmodule + +module SLE ( + output Q, + input ADn, + input ALn, + (* clkbuf_sink *) + input CLK, + input D, + input LAT, + input SD, + input EN, + input SLn +); + reg q_latch, q_ff; + + always @(posedge CLK, negedge ALn) begin + if (!ALn) begin + q_ff <= !ADn; + end else if (EN) begin + if (!SLn) + q_ff <= SD; + else + q_ff <= D; + end + end + + always @* begin + if (!ALn) begin + q_latch <= !ADn; + end else if (CLK && EN) begin + if (!SLn) + q_ff <= SD; + else + q_ff <= D; + end + end + + assign Q = LAT ? q_latch : q_ff; +endmodule + +module ARI1 ( + input A, B, C, D, FCI, + output Y, S, FCO +); + parameter [19:0] INIT = 20'h0; + wire [2:0] Fsel = {D, C, B}; + wire F0 = INIT[Fsel]; + wire F1 = INIT[8 + Fsel]; + wire Yout = A ? F1 : F0; + assign Y = Yout; + assign S = FCI ^ Yout; + wire G = INIT[16] ? (INIT[17] ? F1 : F0) : INIT[17]; + wire P = INIT[19] ? 1'b1 : (INIT[18] ? Yout : 1'b0); + assign FCO = P ? FCI : G; +endmodule + +// module FCEND_BUFF +// module FCINIT_BUFF +// module FLASH_FREEZE +// module OSCILLATOR +// module SYSCTRL_RESET_STATUS +// module LIVE_PROBE_FB + +(* blackbox *) +module GCLKBUF ( + (* iopad_external_pin *) + input PAD, + input EN, + (* clkbuf_driver *) + output Y +); +endmodule + +(* blackbox *) +module GCLKBUF_DIFF ( + (* iopad_external_pin *) + input PADP, + (* iopad_external_pin *) + input PADN, + input EN, + (* clkbuf_driver *) + output Y +); +endmodule + +(* blackbox *) +module GCLKBIBUF ( + input D, + input E, + input EN, + (* iopad_external_pin *) + inout PAD, + (* clkbuf_driver *) + output Y +); +endmodule + +// module DFN1 +// module DFN1C0 +// module DFN1E1 +// module DFN1E1C0 +// module DFN1E1P0 +// module DFN1P0 +// module DLN1 +// module DLN1C0 +// module DLN1P0 + +module INV ( + input A, + output Y +); + assign Y = !A; +endmodule + +module INVD ( + input A, + output Y +); + assign Y = !A; +endmodule + +module MX2 ( + input A, B, S, + output Y +); + assign Y = S ? B : A; +endmodule + +module MX4 ( + input D0, D1, D2, D3, S0, S1, + output Y +); + assign Y = S1 ? (S0 ? D3 : D2) : (S0 ? D1 : D0); +endmodule + +module NAND2 ( + input A, B, + output Y +); + assign Y = !(A & B); +endmodule + +module NAND3 ( + input A, B, C, + output Y +); + assign Y = !(A & B & C); +endmodule + +module NAND4 ( + input A, B, C, D, + output Y +); + assign Y = !(A & B & C & D); +endmodule + +module NOR2 ( + input A, B, + output Y +); + assign Y = !(A | B); +endmodule + +module NOR3 ( + input A, B, C, + output Y +); + assign Y = !(A | B | C); +endmodule + +module NOR4 ( + input A, B, C, D, + output Y +); + assign Y = !(A | B | C | D); +endmodule + +module OR2 ( + input A, B, + output Y +); + assign Y = A | B; +endmodule + +module OR3 ( + input A, B, C, + output Y +); + assign Y = A | B | C; +endmodule + +module OR4 ( + input A, B, C, D, + output Y +); + assign Y = A | B | C | D; +endmodule + +module XOR2 ( + input A, B, + output Y +); + assign Y = A ^ B; +endmodule + +module XOR3 ( + input A, B, C, + output Y +); + assign Y = A ^ B ^ C; +endmodule + +module XOR4 ( + input A, B, C, D, + output Y +); + assign Y = A ^ B ^ C ^ D; +endmodule + +module XOR8 ( + input A, B, C, D, E, F, G, H, + output Y +); + assign Y = A ^ B ^ C ^ D ^ E ^ F ^ G ^ H; +endmodule + +// module UJTAG + +module BIBUF ( + input D, + input E, + (* iopad_external_pin *) + inout PAD, + output Y +); + parameter IOSTD = ""; + assign PAD = E ? D : 1'bz; + assign Y = PAD; +endmodule + +(* blackbox *) +module BIBUF_DIFF ( + input D, + input E, + (* iopad_external_pin *) + inout PADP, + (* iopad_external_pin *) + inout PADN, + output Y +); + parameter IOSTD = ""; +endmodule + +module CLKBIBUF ( + input D, + input E, + (* iopad_external_pin *) + inout PAD, + (* clkbuf_driver *) + output Y +); + parameter IOSTD = ""; + assign PAD = E ? D : 1'bz; + assign Y = PAD; +endmodule + +module CLKBUF ( + (* iopad_external_pin *) + input PAD, + (* clkbuf_driver *) + output Y +); + parameter IOSTD = ""; + assign Y = PAD; +endmodule + +(* blackbox *) +module CLKBUF_DIFF ( + (* iopad_external_pin *) + input PADP, + (* iopad_external_pin *) + input PADN, + (* clkbuf_driver *) + output Y +); + parameter IOSTD = ""; +endmodule + +module INBUF ( + (* iopad_external_pin *) + input PAD, + output Y +); + parameter IOSTD = ""; + assign Y = PAD; +endmodule + +(* blackbox *) +module INBUF_DIFF ( + (* iopad_external_pin *) + input PADP, + (* iopad_external_pin *) + input PADN, + output Y +); + parameter IOSTD = ""; +endmodule + +module OUTBUF ( + input D, + (* iopad_external_pin *) + output PAD +); + parameter IOSTD = ""; + assign PAD = D; +endmodule + +(* blackbox *) +module OUTBUF_DIFF ( + input D, + (* iopad_external_pin *) + output PADP, + (* iopad_external_pin *) + output PADN +); + parameter IOSTD = ""; +endmodule + +module TRIBUFF ( + input D, + input E, + (* iopad_external_pin *) + output PAD +); + parameter IOSTD = ""; + assign PAD = E ? D : 1'bz; +endmodule + +(* blackbox *) +module TRIBUFF_DIFF ( + input D, + input E, + (* iopad_external_pin *) + output PADP, + (* iopad_external_pin *) + output PADN +); + parameter IOSTD = ""; +endmodule + +// module DDR_IN +// module DDR_OUT +// module RAM1K18 +// module RAM64x18 +// module MACC + +(* blackbox *) +module SYSRESET ( + (* iopad_external_pin *) + input DEVRST_N, + output POWER_ON_RESET_N); +endmodule + + +(* blackbox *) +module XTLOSC ( + (* iopad_external_pin *) + input XTL, + output CLKOUT); + parameter [1:0] MODE = 2'h3; + parameter real FREQUENCY = 20.0; +endmodule + +(* blackbox *) +module RAM1K18 ( + input [13:0] A_ADDR, + input [2:0] A_BLK, + (* clkbuf_sink *) + input A_CLK, + input [17:0] A_DIN, + output [17:0] A_DOUT, + input [1:0] A_WEN, + input [2:0] A_WIDTH, + input A_WMODE, + input A_ARST_N, + input A_DOUT_LAT, + input A_DOUT_ARST_N, + (* clkbuf_sink *) + input A_DOUT_CLK, + input A_DOUT_EN, + input A_DOUT_SRST_N, + + input [13:0] B_ADDR, + input [2:0] B_BLK, + (* clkbuf_sink *) + input B_CLK, + input [17:0] B_DIN, + output [17:0] B_DOUT, + input [1:0] B_WEN, + input [2:0] B_WIDTH, + input B_WMODE, + input B_ARST_N, + input B_DOUT_LAT, + input B_DOUT_ARST_N, + (* clkbuf_sink *) + input B_DOUT_CLK, + input B_DOUT_EN, + input B_DOUT_SRST_N, + + input A_EN, + input B_EN, + input SII_LOCK, + output BUSY); +endmodule + +(* blackbox *) +module RAM64x18 ( + input [9:0] A_ADDR, + input [1:0] A_BLK, + input [2:0] A_WIDTH, + output [17:0] A_DOUT, + input A_DOUT_ARST_N, + (* clkbuf_sink *) + input A_DOUT_CLK, + input A_DOUT_EN, + input A_DOUT_LAT, + input A_DOUT_SRST_N, + (* clkbuf_sink *) + input A_ADDR_CLK, + input A_ADDR_EN, + input A_ADDR_LAT, + input A_ADDR_SRST_N, + input A_ADDR_ARST_N, + + input [9:0] B_ADDR, + input [1:0] B_BLK, + input [2:0] B_WIDTH, + output [17:0] B_DOUT, + input B_DOUT_ARST_N, + (* clkbuf_sink *) + input B_DOUT_CLK, + input B_DOUT_EN, + input B_DOUT_LAT, + input B_DOUT_SRST_N, + (* clkbuf_sink *) + input B_ADDR_CLK, + input B_ADDR_EN, + input B_ADDR_LAT, + input B_ADDR_SRST_N, + input B_ADDR_ARST_N, + + input [9:0] C_ADDR, + (* clkbuf_sink *) + input C_CLK, + input [17:0] C_DIN, + input C_WEN, + input [1:0] C_BLK, + input [2:0] C_WIDTH, + + input A_EN, + input B_EN, + input C_EN, + input SII_LOCK, + output BUSY); +endmodule diff --git a/resources/netlist/resources/kernel/share/simcells.v b/resources/netlist/resources/kernel/share/simcells.v new file mode 100644 index 0000000..ad1fdc8 --- /dev/null +++ b/resources/netlist/resources/kernel/share/simcells.v @@ -0,0 +1,3609 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * The internal logic cell simulation library. + * + * This Verilog library contains simple simulation models for the internal + * logic cells ($_NOT_ , $_AND_ , ...) that are generated by the default technology + * mapper (see "techmap.v" in this directory) and expected by the "abc" pass. + * + */ + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_BUF_ (A, Y) +//- +//- A buffer. This cell type is always optimized away by the opt_clean pass. +//- +//- Truth table: A | Y +//- ---+--- +//- 0 | 0 +//- 1 | 1 +//- +module \$_BUF_ (A, Y); +input A; +output Y; +assign Y = A; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_NOT_ (A, Y) +//- +//- An inverter gate. +//- +//- Truth table: A | Y +//- ---+--- +//- 0 | 1 +//- 1 | 0 +//- +module \$_NOT_ (A, Y); +input A; +output Y; +assign Y = ~A; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_AND_ (A, B, Y) +//- +//- A 2-input AND gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 0 +//- 0 1 | 0 +//- 1 0 | 0 +//- 1 1 | 1 +//- +module \$_AND_ (A, B, Y); +input A, B; +output Y; +assign Y = A & B; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_NAND_ (A, B, Y) +//- +//- A 2-input NAND gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 1 +//- 0 1 | 1 +//- 1 0 | 1 +//- 1 1 | 0 +//- +module \$_NAND_ (A, B, Y); +input A, B; +output Y; +assign Y = ~(A & B); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_OR_ (A, B, Y) +//- +//- A 2-input OR gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 0 +//- 0 1 | 1 +//- 1 0 | 1 +//- 1 1 | 1 +//- +module \$_OR_ (A, B, Y); +input A, B; +output Y; +assign Y = A | B; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_NOR_ (A, B, Y) +//- +//- A 2-input NOR gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 1 +//- 0 1 | 0 +//- 1 0 | 0 +//- 1 1 | 0 +//- +module \$_NOR_ (A, B, Y); +input A, B; +output Y; +assign Y = ~(A | B); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_XOR_ (A, B, Y) +//- +//- A 2-input XOR gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 0 +//- 0 1 | 1 +//- 1 0 | 1 +//- 1 1 | 0 +//- +module \$_XOR_ (A, B, Y); +input A, B; +output Y; +assign Y = A ^ B; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_XNOR_ (A, B, Y) +//- +//- A 2-input XNOR gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 1 +//- 0 1 | 0 +//- 1 0 | 0 +//- 1 1 | 1 +//- +module \$_XNOR_ (A, B, Y); +input A, B; +output Y; +assign Y = ~(A ^ B); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ANDNOT_ (A, B, Y) +//- +//- A 2-input AND-NOT gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 0 +//- 0 1 | 0 +//- 1 0 | 1 +//- 1 1 | 0 +//- +module \$_ANDNOT_ (A, B, Y); +input A, B; +output Y; +assign Y = A & (~B); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ORNOT_ (A, B, Y) +//- +//- A 2-input OR-NOT gate. +//- +//- Truth table: A B | Y +//- -----+--- +//- 0 0 | 1 +//- 0 1 | 0 +//- 1 0 | 1 +//- 1 1 | 1 +//- +module \$_ORNOT_ (A, B, Y); +input A, B; +output Y; +assign Y = A | (~B); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_MUX_ (A, B, S, Y) +//- +//- A 2-input MUX gate. +//- +//- Truth table: A B S | Y +//- -------+--- +//- a - 0 | a +//- - b 1 | b +//- +module \$_MUX_ (A, B, S, Y); +input A, B, S; +output Y; +assign Y = S ? B : A; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_NMUX_ (A, B, S, Y) +//- +//- A 2-input inverting MUX gate. +//- +//- Truth table: A B S | Y +//- -------+--- +//- 0 - 0 | 1 +//- 1 - 0 | 0 +//- - 0 1 | 1 +//- - 1 1 | 0 +//- +module \$_NMUX_ (A, B, S, Y); +input A, B, S; +output Y; +assign Y = S ? !B : !A; +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_MUX4_ (A, B, C, D, S, T, Y) +//- +//- A 4-input MUX gate. +//- +//- Truth table: A B C D S T | Y +//- -------------+--- +//- a - - - 0 0 | a +//- - b - - 1 0 | b +//- - - c - 0 1 | c +//- - - - d 1 1 | d +//- +module \$_MUX4_ (A, B, C, D, S, T, Y); +input A, B, C, D, S, T; +output Y; +assign Y = T ? (S ? D : C) : + (S ? B : A); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_MUX8_ (A, B, C, D, E, F, G, H, S, T, U, Y) +//- +//- An 8-input MUX gate. +//- +//- Truth table: A B C D E F G H S T U | Y +//- -----------------------+--- +//- a - - - - - - - 0 0 0 | a +//- - b - - - - - - 1 0 0 | b +//- - - c - - - - - 0 1 0 | c +//- - - - d - - - - 1 1 0 | d +//- - - - - e - - - 0 0 1 | e +//- - - - - - f - - 1 0 1 | f +//- - - - - - - g - 0 1 1 | g +//- - - - - - - - h 1 1 1 | h +//- +module \$_MUX8_ (A, B, C, D, E, F, G, H, S, T, U, Y); +input A, B, C, D, E, F, G, H, S, T, U; +output Y; +assign Y = U ? T ? (S ? H : G) : + (S ? F : E) : + T ? (S ? D : C) : + (S ? B : A); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_MUX16_ (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, S, T, U, V, Y) +//- +//- A 16-input MUX gate. +//- +//- Truth table: A B C D E F G H I J K L M N O P S T U V | Y +//- -----------------------------------------+--- +//- a - - - - - - - - - - - - - - - 0 0 0 0 | a +//- - b - - - - - - - - - - - - - - 1 0 0 0 | b +//- - - c - - - - - - - - - - - - - 0 1 0 0 | c +//- - - - d - - - - - - - - - - - - 1 1 0 0 | d +//- - - - - e - - - - - - - - - - - 0 0 1 0 | e +//- - - - - - f - - - - - - - - - - 1 0 1 0 | f +//- - - - - - - g - - - - - - - - - 0 1 1 0 | g +//- - - - - - - - h - - - - - - - - 1 1 1 0 | h +//- - - - - - - - - i - - - - - - - 0 0 0 1 | i +//- - - - - - - - - - j - - - - - - 1 0 0 1 | j +//- - - - - - - - - - - k - - - - - 0 1 0 1 | k +//- - - - - - - - - - - - l - - - - 1 1 0 1 | l +//- - - - - - - - - - - - - m - - - 0 0 1 1 | m +//- - - - - - - - - - - - - - n - - 1 0 1 1 | n +//- - - - - - - - - - - - - - - o - 0 1 1 1 | o +//- - - - - - - - - - - - - - - - p 1 1 1 1 | p +//- +module \$_MUX16_ (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, S, T, U, V, Y); +input A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, S, T, U, V; +output Y; +assign Y = V ? U ? T ? (S ? P : O) : + (S ? N : M) : + T ? (S ? L : K) : + (S ? J : I) : + U ? T ? (S ? H : G) : + (S ? F : E) : + T ? (S ? D : C) : + (S ? B : A); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_AOI3_ (A, B, C, Y) +//- +//- A 3-input And-Or-Invert gate. +//- +//- Truth table: A B C | Y +//- -------+--- +//- 0 0 0 | 1 +//- 0 0 1 | 0 +//- 0 1 0 | 1 +//- 0 1 1 | 0 +//- 1 0 0 | 1 +//- 1 0 1 | 0 +//- 1 1 0 | 0 +//- 1 1 1 | 0 +//- +module \$_AOI3_ (A, B, C, Y); +input A, B, C; +output Y; +assign Y = ~((A & B) | C); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_OAI3_ (A, B, C, Y) +//- +//- A 3-input Or-And-Invert gate. +//- +//- Truth table: A B C | Y +//- -------+--- +//- 0 0 0 | 1 +//- 0 0 1 | 1 +//- 0 1 0 | 1 +//- 0 1 1 | 0 +//- 1 0 0 | 1 +//- 1 0 1 | 0 +//- 1 1 0 | 1 +//- 1 1 1 | 0 +//- +module \$_OAI3_ (A, B, C, Y); +input A, B, C; +output Y; +assign Y = ~((A | B) & C); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_AOI4_ (A, B, C, Y) +//- +//- A 4-input And-Or-Invert gate. +//- +//- Truth table: A B C D | Y +//- ---------+--- +//- 0 0 0 0 | 1 +//- 0 0 0 1 | 1 +//- 0 0 1 0 | 1 +//- 0 0 1 1 | 0 +//- 0 1 0 0 | 1 +//- 0 1 0 1 | 1 +//- 0 1 1 0 | 1 +//- 0 1 1 1 | 0 +//- 1 0 0 0 | 1 +//- 1 0 0 1 | 1 +//- 1 0 1 0 | 1 +//- 1 0 1 1 | 0 +//- 1 1 0 0 | 0 +//- 1 1 0 1 | 0 +//- 1 1 1 0 | 0 +//- 1 1 1 1 | 0 +//- +module \$_AOI4_ (A, B, C, D, Y); +input A, B, C, D; +output Y; +assign Y = ~((A & B) | (C & D)); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_OAI4_ (A, B, C, Y) +//- +//- A 4-input Or-And-Invert gate. +//- +//- Truth table: A B C D | Y +//- ---------+--- +//- 0 0 0 0 | 1 +//- 0 0 0 1 | 1 +//- 0 0 1 0 | 1 +//- 0 0 1 1 | 1 +//- 0 1 0 0 | 1 +//- 0 1 0 1 | 0 +//- 0 1 1 0 | 0 +//- 0 1 1 1 | 0 +//- 1 0 0 0 | 1 +//- 1 0 0 1 | 0 +//- 1 0 1 0 | 0 +//- 1 0 1 1 | 0 +//- 1 1 0 0 | 1 +//- 1 1 0 1 | 0 +//- 1 1 1 0 | 0 +//- 1 1 1 1 | 0 +//- +module \$_OAI4_ (A, B, C, D, Y); +input A, B, C, D; +output Y; +assign Y = ~((A | B) & (C | D)); +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_TBUF_ (A, E, Y) +//- +//- A tri-state buffer. +//- +//- Truth table: A E | Y +//- -----+--- +//- a 1 | a +//- - 0 | z +//- +module \$_TBUF_ (A, E, Y); +input A, E; +output Y; +assign Y = E ? A : 1'bz; +endmodule + +// NOTE: the following cell types are autogenerated. DO NOT EDIT them manually, +// instead edit the templates in gen_ff_types.py and rerun it. + +// START AUTOGENERATED CELL TYPES + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SR_NN_ (S, R, Q) +//- +//- A set-reset latch with negative polarity SET and negative polarity RESET. +//- +//- Truth table: S R | Q +//- -----+--- +//- - 0 | 0 +//- 0 - | 1 +//- - - | q +//- +module \$_SR_NN_ (S, R, Q); +input S, R; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SR_NP_ (S, R, Q) +//- +//- A set-reset latch with negative polarity SET and positive polarity RESET. +//- +//- Truth table: S R | Q +//- -----+--- +//- - 1 | 0 +//- 0 - | 1 +//- - - | q +//- +module \$_SR_NP_ (S, R, Q); +input S, R; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SR_PN_ (S, R, Q) +//- +//- A set-reset latch with positive polarity SET and negative polarity RESET. +//- +//- Truth table: S R | Q +//- -----+--- +//- - 0 | 0 +//- 1 - | 1 +//- - - | q +//- +module \$_SR_PN_ (S, R, Q); +input S, R; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SR_PP_ (S, R, Q) +//- +//- A set-reset latch with positive polarity SET and positive polarity RESET. +//- +//- Truth table: S R | Q +//- -----+--- +//- - 1 | 0 +//- 1 - | 1 +//- - - | q +//- +module \$_SR_PP_ (S, R, Q); +input S, R; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; +end +endmodule + +`ifdef SIMCELLS_FF +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_FF_ (D, Q) +//- +//- A D-type flip-flop that is clocked from the implicit global clock. (This cell +//- type is usually only used in netlists for formal verification.) +//- +module \$_FF_ (D, Q); +input D; +output reg Q; +always @($global_clock) begin + Q <= D; +end +endmodule +`endif + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_N_ (D, C, Q) +//- +//- A negative edge D-type flip-flop. +//- +//- Truth table: D C | Q +//- -----+--- +//- d \ | d +//- - - | q +//- +module \$_DFF_N_ (D, C, Q); +input D, C; +output reg Q; +always @(negedge C) begin + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_P_ (D, C, Q) +//- +//- A positive edge D-type flip-flop. +//- +//- Truth table: D C | Q +//- -----+--- +//- d / | d +//- - - | q +//- +module \$_DFF_P_ (D, C, Q); +input D, C; +output reg Q; +always @(posedge C) begin + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NN_ (D, C, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity enable. +//- +//- Truth table: D C E | Q +//- -------+--- +//- d \ 0 | d +//- - - - | q +//- +module \$_DFFE_NN_ (D, C, E, Q); +input D, C, E; +output reg Q; +always @(negedge C) begin + if (!E) Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NP_ (D, C, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity enable. +//- +//- Truth table: D C E | Q +//- -------+--- +//- d \ 1 | d +//- - - - | q +//- +module \$_DFFE_NP_ (D, C, E, Q); +input D, C, E; +output reg Q; +always @(negedge C) begin + if (E) Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PN_ (D, C, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity enable. +//- +//- Truth table: D C E | Q +//- -------+--- +//- d / 0 | d +//- - - - | q +//- +module \$_DFFE_PN_ (D, C, E, Q); +input D, C, E; +output reg Q; +always @(posedge C) begin + if (!E) Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PP_ (D, C, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity enable. +//- +//- Truth table: D C E | Q +//- -------+--- +//- d / 1 | d +//- - - - | q +//- +module \$_DFFE_PP_ (D, C, E, Q); +input D, C, E; +output reg Q; +always @(posedge C) begin + if (E) Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_NN0_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with negative polarity reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 0 | 0 +//- d \ - | d +//- - - - | q +//- +module \$_DFF_NN0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C or negedge R) begin + if (R == 0) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_NN1_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 0 | 1 +//- d \ - | d +//- - - - | q +//- +module \$_DFF_NN1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C or negedge R) begin + if (R == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_NP0_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with positive polarity reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 1 | 0 +//- d \ - | d +//- - - - | q +//- +module \$_DFF_NP0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C or posedge R) begin + if (R == 1) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_NP1_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 1 | 1 +//- d \ - | d +//- - - - | q +//- +module \$_DFF_NP1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C or posedge R) begin + if (R == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_PN0_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with negative polarity reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 0 | 0 +//- d / - | d +//- - - - | q +//- +module \$_DFF_PN0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C or negedge R) begin + if (R == 0) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_PN1_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 0 | 1 +//- d / - | d +//- - - - | q +//- +module \$_DFF_PN1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C or negedge R) begin + if (R == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_PP0_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with positive polarity reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 1 | 0 +//- d / - | d +//- - - - | q +//- +module \$_DFF_PP0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C or posedge R) begin + if (R == 1) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFF_PP1_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - - 1 | 1 +//- d / - | d +//- - - - | q +//- +module \$_DFF_PP1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C or posedge R) begin + if (R == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NN0N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity reset and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 0 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_DFFE_NN0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or negedge R) begin + if (R == 0) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NN0P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity reset and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 0 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_DFFE_NN0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or negedge R) begin + if (R == 0) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NN1N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 1 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_DFFE_NN1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or negedge R) begin + if (R == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NN1P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 1 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_DFFE_NN1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or negedge R) begin + if (R == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NP0N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity reset and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 0 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_DFFE_NP0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or posedge R) begin + if (R == 1) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NP0P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity reset and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 0 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_DFFE_NP0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or posedge R) begin + if (R == 1) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NP1N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 1 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_DFFE_NP1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or posedge R) begin + if (R == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_NP1P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 1 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_DFFE_NP1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C or posedge R) begin + if (R == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PN0N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity reset and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 0 +//- d / - 0 | d +//- - - - - | q +//- +module \$_DFFE_PN0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or negedge R) begin + if (R == 0) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PN0P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity reset and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 0 +//- d / - 1 | d +//- - - - - | q +//- +module \$_DFFE_PN0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or negedge R) begin + if (R == 0) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PN1N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 1 +//- d / - 0 | d +//- - - - - | q +//- +module \$_DFFE_PN1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or negedge R) begin + if (R == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PN1P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 0 - | 1 +//- d / - 1 | d +//- - - - - | q +//- +module \$_DFFE_PN1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or negedge R) begin + if (R == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PP0N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity reset and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 0 +//- d / - 0 | d +//- - - - - | q +//- +module \$_DFFE_PP0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or posedge R) begin + if (R == 1) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PP0P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity reset and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 0 +//- d / - 1 | d +//- - - - - | q +//- +module \$_DFFE_PP0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or posedge R) begin + if (R == 1) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PP1N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set and negative +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 1 +//- d / - 0 | d +//- - - - - | q +//- +module \$_DFFE_PP1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or posedge R) begin + if (R == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFE_PP1P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set and positive +//- polarity clock enable. +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - - 1 - | 1 +//- d / - 1 | d +//- - - - - | q +//- +module \$_DFFE_PP1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C or posedge R) begin + if (R == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFF_NN_ (D, C, L, AD, Q) +//- +//- A negative edge D-type flip-flop with negative polarity async load. +//- +//- Truth table: D C L AD | Q +//- ----------+--- +//- - - 0 a | a +//- d \ - - | d +//- - - - - | q +//- +module \$_ALDFF_NN_ (D, C, L, AD, Q); +input D, C, L, AD; +output reg Q; +always @(negedge C or negedge L) begin + if (L == 0) + Q <= AD; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFF_NP_ (D, C, L, AD, Q) +//- +//- A negative edge D-type flip-flop with positive polarity async load. +//- +//- Truth table: D C L AD | Q +//- ----------+--- +//- - - 1 a | a +//- d \ - - | d +//- - - - - | q +//- +module \$_ALDFF_NP_ (D, C, L, AD, Q); +input D, C, L, AD; +output reg Q; +always @(negedge C or posedge L) begin + if (L == 1) + Q <= AD; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFF_PN_ (D, C, L, AD, Q) +//- +//- A positive edge D-type flip-flop with negative polarity async load. +//- +//- Truth table: D C L AD | Q +//- ----------+--- +//- - - 0 a | a +//- d / - - | d +//- - - - - | q +//- +module \$_ALDFF_PN_ (D, C, L, AD, Q); +input D, C, L, AD; +output reg Q; +always @(posedge C or negedge L) begin + if (L == 0) + Q <= AD; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFF_PP_ (D, C, L, AD, Q) +//- +//- A positive edge D-type flip-flop with positive polarity async load. +//- +//- Truth table: D C L AD | Q +//- ----------+--- +//- - - 1 a | a +//- d / - - | d +//- - - - - | q +//- +module \$_ALDFF_PP_ (D, C, L, AD, Q); +input D, C, L, AD; +output reg Q; +always @(posedge C or posedge L) begin + if (L == 1) + Q <= AD; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_NNN_ (D, C, L, AD, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity async load and negative +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 0 a - | a +//- d \ - - 0 | d +//- - - - - - | q +//- +module \$_ALDFFE_NNN_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(negedge C or negedge L) begin + if (L == 0) + Q <= AD; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_NNP_ (D, C, L, AD, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity async load and positive +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 0 a - | a +//- d \ - - 1 | d +//- - - - - - | q +//- +module \$_ALDFFE_NNP_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(negedge C or negedge L) begin + if (L == 0) + Q <= AD; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_NPN_ (D, C, L, AD, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity async load and negative +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 1 a - | a +//- d \ - - 0 | d +//- - - - - - | q +//- +module \$_ALDFFE_NPN_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(negedge C or posedge L) begin + if (L == 1) + Q <= AD; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_NPP_ (D, C, L, AD, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity async load and positive +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 1 a - | a +//- d \ - - 1 | d +//- - - - - - | q +//- +module \$_ALDFFE_NPP_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(negedge C or posedge L) begin + if (L == 1) + Q <= AD; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_PNN_ (D, C, L, AD, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity async load and negative +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 0 a - | a +//- d / - - 0 | d +//- - - - - - | q +//- +module \$_ALDFFE_PNN_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(posedge C or negedge L) begin + if (L == 0) + Q <= AD; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_PNP_ (D, C, L, AD, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity async load and positive +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 0 a - | a +//- d / - - 1 | d +//- - - - - - | q +//- +module \$_ALDFFE_PNP_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(posedge C or negedge L) begin + if (L == 0) + Q <= AD; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_PPN_ (D, C, L, AD, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity async load and negative +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 1 a - | a +//- d / - - 0 | d +//- - - - - - | q +//- +module \$_ALDFFE_PPN_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(posedge C or posedge L) begin + if (L == 1) + Q <= AD; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_ALDFFE_PPP_ (D, C, L, AD, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity async load and positive +//- polarity clock enable. +//- +//- Truth table: D C L AD E | Q +//- ------------+--- +//- - - 1 a - | a +//- d / - - 1 | d +//- - - - - - | q +//- +module \$_ALDFFE_PPP_ (D, C, L, AD, E, Q); +input D, C, L, AD, E; +output reg Q; +always @(posedge C or posedge L) begin + if (L == 1) + Q <= AD; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_NNN_ (C, S, R, D, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set and negative +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 0 - - | 1 +//- \ - - d | d +//- - - - - | q +//- +module \$_DFFSR_NNN_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(negedge C, negedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_NNP_ (C, S, R, D, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set and positive +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 0 - - | 1 +//- \ - - d | d +//- - - - - | q +//- +module \$_DFFSR_NNP_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(negedge C, negedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_NPN_ (C, S, R, D, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set and negative +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 1 - - | 1 +//- \ - - d | d +//- - - - - | q +//- +module \$_DFFSR_NPN_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(negedge C, posedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_NPP_ (C, S, R, D, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set and positive +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 1 - - | 1 +//- \ - - d | d +//- - - - - | q +//- +module \$_DFFSR_NPP_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(negedge C, posedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_PNN_ (C, S, R, D, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set and negative +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 0 - - | 1 +//- / - - d | d +//- - - - - | q +//- +module \$_DFFSR_PNN_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(posedge C, negedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_PNP_ (C, S, R, D, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set and positive +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 0 - - | 1 +//- / - - d | d +//- - - - - | q +//- +module \$_DFFSR_PNP_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(posedge C, negedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_PPN_ (C, S, R, D, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set and negative +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 1 - - | 1 +//- / - - d | d +//- - - - - | q +//- +module \$_DFFSR_PPN_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(posedge C, posedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSR_PPP_ (C, S, R, D, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set and positive +//- polarity reset. +//- +//- Truth table: C S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 1 - - | 1 +//- / - - d | d +//- - - - - | q +//- +module \$_DFFSR_PPP_ (C, S, R, D, Q); +input C, S, R, D; +output reg Q; +always @(posedge C, posedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NNNN_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set, negative +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 0 - - - | 1 +//- \ - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NNNN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, negedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NNNP_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set, negative +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 0 - - - | 1 +//- \ - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NNNP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, negedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NNPN_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set, positive +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 0 - - - | 1 +//- \ - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NNPN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, negedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NNPP_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with negative polarity set, positive +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 0 - - - | 1 +//- \ - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NNPP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, negedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NPNN_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set, negative +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 1 - - - | 1 +//- \ - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NPNN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, posedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NPNP_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set, negative +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 1 - - - | 1 +//- \ - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NPNP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, posedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NPPN_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set, positive +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 1 - - - | 1 +//- \ - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NPPN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, posedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_NPPP_ (C, S, R, E, D, Q) +//- +//- A negative edge D-type flip-flop with positive polarity set, positive +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 1 - - - | 1 +//- \ - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_NPPP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(negedge C, posedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PNNN_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set, negative +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 0 - - - | 1 +//- / - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PNNN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, negedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PNNP_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set, negative +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 0 - - - | 1 +//- / - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PNNP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, negedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PNPN_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set, positive +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 0 - - - | 1 +//- / - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PNPN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, negedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PNPP_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with negative polarity set, positive +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 0 - - - | 1 +//- / - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PNPP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, negedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PPNN_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set, negative +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 1 - - - | 1 +//- / - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PPNN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, posedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PPNP_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set, negative +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 0 - - | 0 +//- - 1 - - - | 1 +//- / - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PPNP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, posedge S, negedge R) begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PPPN_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set, positive +//- polarity reset and negative polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 1 - - - | 1 +//- / - - 0 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PPPN_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, posedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DFFSRE_PPPP_ (C, S, R, E, D, Q) +//- +//- A positive edge D-type flip-flop with positive polarity set, positive +//- polarity reset and positive polarity clock enable. +//- +//- Truth table: C S R E D | Q +//- -----------+--- +//- - - 1 - - | 0 +//- - 1 - - - | 1 +//- / - - 1 d | d +//- - - - - - | q +//- +module \$_DFFSRE_PPPP_ (C, S, R, E, D, Q); +input C, S, R, E, D; +output reg Q; +always @(posedge C, posedge S, posedge R) begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_NN0_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - \ 0 | 0 +//- d \ - | d +//- - - - | q +//- +module \$_SDFF_NN0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C) begin + if (R == 0) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_NN1_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - \ 0 | 1 +//- d \ - | d +//- - - - | q +//- +module \$_SDFF_NN1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C) begin + if (R == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_NP0_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - \ 1 | 0 +//- d \ - | d +//- - - - | q +//- +module \$_SDFF_NP0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C) begin + if (R == 1) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_NP1_ (D, C, R, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - \ 1 | 1 +//- d \ - | d +//- - - - | q +//- +module \$_SDFF_NP1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(negedge C) begin + if (R == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_PN0_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - / 0 | 0 +//- d / - | d +//- - - - | q +//- +module \$_SDFF_PN0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C) begin + if (R == 0) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_PN1_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - / 0 | 1 +//- d / - | d +//- - - - | q +//- +module \$_SDFF_PN1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C) begin + if (R == 0) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_PP0_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous reset. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - / 1 | 0 +//- d / - | d +//- - - - | q +//- +module \$_SDFF_PP0_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C) begin + if (R == 1) + Q <= 0; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFF_PP1_ (D, C, R, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous set. +//- +//- Truth table: D C R | Q +//- -------+--- +//- - / 1 | 1 +//- d / - | d +//- - - - | q +//- +module \$_SDFF_PP1_ (D, C, R, Q); +input D, C, R; +output reg Q; +always @(posedge C) begin + if (R == 1) + Q <= 1; + else + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NN0N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous reset and negative +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 - | 0 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFE_NN0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 0) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NN0P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous reset and positive +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 - | 0 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFE_NN0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 0) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NN1N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous set and negative +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 - | 1 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFE_NN1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NN1P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous set and positive +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 - | 1 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFE_NN1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NP0N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous reset and negative +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 - | 0 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFE_NP0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 1) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NP0P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous reset and positive +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 - | 0 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFE_NP0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 1) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NP1N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous set and negative +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 - | 1 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFE_NP1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_NP1P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous set and positive +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 - | 1 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFE_NP1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (R == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PN0N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous reset and negative +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 - | 0 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFE_PN0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 0) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PN0P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous reset and positive +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 - | 0 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFE_PN0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 0) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PN1N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous set and negative +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 - | 1 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFE_PN1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PN1P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous set and positive +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 - | 1 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFE_PN1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PP0N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous reset and negative +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 - | 0 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFE_PP0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 1) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PP0P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous reset and positive +//- polarity clock enable (with reset having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 - | 0 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFE_PP0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 1) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PP1N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous set and negative +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 - | 1 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFE_PP1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFE_PP1P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous set and positive +//- polarity clock enable (with set having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 - | 1 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFE_PP1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (R == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NN0N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous reset and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 0 | 0 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_NN0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 0) begin + if (R == 0) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NN0P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous reset and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 1 | 0 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_NN0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 1) begin + if (R == 0) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NN1N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous set and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 0 | 1 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_NN1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 0) begin + if (R == 0) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NN1P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with negative polarity synchronous set and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 0 1 | 1 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_NN1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 1) begin + if (R == 0) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NP0N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous reset and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 0 | 0 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_NP0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 0) begin + if (R == 1) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NP0P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous reset and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 1 | 0 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_NP0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 1) begin + if (R == 1) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NP1N_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous set and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 0 | 1 +//- d \ - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_NP1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 0) begin + if (R == 1) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_NP1P_ (D, C, R, E, Q) +//- +//- A negative edge D-type flip-flop with positive polarity synchronous set and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - \ 1 1 | 1 +//- d \ - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_NP1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(negedge C) begin + if (E == 1) begin + if (R == 1) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PN0N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous reset and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 0 | 0 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_PN0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 0) begin + if (R == 0) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PN0P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous reset and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 1 | 0 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_PN0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 1) begin + if (R == 0) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PN1N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous set and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 0 | 1 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_PN1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 0) begin + if (R == 0) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PN1P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with negative polarity synchronous set and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 0 1 | 1 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_PN1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 1) begin + if (R == 0) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PP0N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous reset and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 0 | 0 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_PP0N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 0) begin + if (R == 1) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PP0P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous reset and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 1 | 0 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_PP0P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 1) begin + if (R == 1) + Q <= 0; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PP1N_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous set and negative +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 0 | 1 +//- d / - 0 | d +//- - - - - | q +//- +module \$_SDFFCE_PP1N_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 0) begin + if (R == 1) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_SDFFCE_PP1P_ (D, C, R, E, Q) +//- +//- A positive edge D-type flip-flop with positive polarity synchronous set and positive +//- polarity clock enable (with clock enable having priority). +//- +//- Truth table: D C R E | Q +//- ---------+--- +//- - / 1 1 | 1 +//- d / - 1 | d +//- - - - - | q +//- +module \$_SDFFCE_PP1P_ (D, C, R, E, Q); +input D, C, R, E; +output reg Q; +always @(posedge C) begin + if (E == 1) begin + if (R == 1) + Q <= 1; + else + Q <= D; + end +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_N_ (E, D, Q) +//- +//- A negative enable D-type latch. +//- +//- Truth table: E D | Q +//- -----+--- +//- 0 d | d +//- - - | q +//- +module \$_DLATCH_N_ (E, D, Q); +input E, D; +output reg Q; +always @* begin + if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_P_ (E, D, Q) +//- +//- A positive enable D-type latch. +//- +//- Truth table: E D | Q +//- -----+--- +//- 1 d | d +//- - - | q +//- +module \$_DLATCH_P_ (E, D, Q); +input E, D; +output reg Q; +always @* begin + if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_NN0_ (E, R, D, Q) +//- +//- A negative enable D-type latch with negative polarity reset. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 0 - | 0 +//- 0 - d | d +//- - - - | q +//- +module \$_DLATCH_NN0_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_NN1_ (E, R, D, Q) +//- +//- A negative enable D-type latch with negative polarity set. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 0 - | 1 +//- 0 - d | d +//- - - - | q +//- +module \$_DLATCH_NN1_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_NP0_ (E, R, D, Q) +//- +//- A negative enable D-type latch with positive polarity reset. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 1 - | 0 +//- 0 - d | d +//- - - - | q +//- +module \$_DLATCH_NP0_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_NP1_ (E, R, D, Q) +//- +//- A negative enable D-type latch with positive polarity set. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 1 - | 1 +//- 0 - d | d +//- - - - | q +//- +module \$_DLATCH_NP1_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_PN0_ (E, R, D, Q) +//- +//- A positive enable D-type latch with negative polarity reset. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 0 - | 0 +//- 1 - d | d +//- - - - | q +//- +module \$_DLATCH_PN0_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_PN1_ (E, R, D, Q) +//- +//- A positive enable D-type latch with negative polarity set. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 0 - | 1 +//- 1 - d | d +//- - - - | q +//- +module \$_DLATCH_PN1_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_PP0_ (E, R, D, Q) +//- +//- A positive enable D-type latch with positive polarity reset. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 1 - | 0 +//- 1 - d | d +//- - - - | q +//- +module \$_DLATCH_PP0_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCH_PP1_ (E, R, D, Q) +//- +//- A positive enable D-type latch with positive polarity set. +//- +//- Truth table: E R D | Q +//- -------+--- +//- - 1 - | 1 +//- 1 - d | d +//- - - - | q +//- +module \$_DLATCH_PP1_ (E, R, D, Q); +input E, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_NNN_ (E, S, R, D, Q) +//- +//- A negative enable D-type latch with negative polarity set and negative +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 0 - - | 1 +//- 0 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_NNN_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_NNP_ (E, S, R, D, Q) +//- +//- A negative enable D-type latch with negative polarity set and positive +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 0 - - | 1 +//- 0 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_NNP_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_NPN_ (E, S, R, D, Q) +//- +//- A negative enable D-type latch with positive polarity set and negative +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 1 - - | 1 +//- 0 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_NPN_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_NPP_ (E, S, R, D, Q) +//- +//- A negative enable D-type latch with positive polarity set and positive +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 1 - - | 1 +//- 0 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_NPP_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 0) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_PNN_ (E, S, R, D, Q) +//- +//- A positive enable D-type latch with negative polarity set and negative +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 0 - - | 1 +//- 1 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_PNN_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_PNP_ (E, S, R, D, Q) +//- +//- A positive enable D-type latch with negative polarity set and positive +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 0 - - | 1 +//- 1 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_PNP_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (S == 0) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_PPN_ (E, S, R, D, Q) +//- +//- A positive enable D-type latch with positive polarity set and negative +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 0 - | 0 +//- - 1 - - | 1 +//- 1 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_PPN_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 0) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $_DLATCHSR_PPP_ (E, S, R, D, Q) +//- +//- A positive enable D-type latch with positive polarity set and positive +//- polarity reset. +//- +//- Truth table: E S R D | Q +//- ---------+--- +//- - - 1 - | 0 +//- - 1 - - | 1 +//- 1 - - d | d +//- - - - - | q +//- +module \$_DLATCHSR_PPP_ (E, S, R, D, Q); +input E, S, R, D; +output reg Q; +always @* begin + if (R == 1) + Q <= 0; + else if (S == 1) + Q <= 1; + else if (E == 1) + Q <= D; +end +endmodule diff --git a/resources/netlist/resources/kernel/share/simlib.v b/resources/netlist/resources/kernel/share/simlib.v new file mode 100644 index 0000000..ab9bd7e --- /dev/null +++ b/resources/netlist/resources/kernel/share/simlib.v @@ -0,0 +1,2610 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * The Simulation Library. + * + * This Verilog library contains simple simulation models for the internal + * cells ($not, ...) generated by the frontends and used in most passes. + * + * This library can be used to verify the internal netlists as generated + * by the different frontends and passes. + * + * Note that memory can only be simulated when all $memrd and $memwr cells + * have been merged to stand-alone $mem cells (this is what the "memory_collect" + * pass is doing). + * + */ + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $not (A, Y) +//- +//- A bit-wise inverter. This corresponds to the Verilog unary prefix '~' operator. +//- +module \$not (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = ~$signed(A); + end else begin:BLOCK2 + assign Y = ~A; + end +endgenerate + +endmodule + + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $pos (A, Y) +//- +//- A buffer. This corresponds to the Verilog unary prefix '+' operator. +//- +module \$pos (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = $signed(A); + end else begin:BLOCK2 + assign Y = A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $neg (A, Y) +//- +//- An arithmetic inverter. This corresponds to the Verilog unary prefix '-' operator. +//- +module \$neg (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = -$signed(A); + end else begin:BLOCK2 + assign Y = -A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $and (A, B, Y) +//- +//- A bit-wise AND. This corresponds to the Verilog '&' operator. +//- +module \$and (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) & $signed(B); + end else begin:BLOCK2 + assign Y = A & B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $or (A, B, Y) +//- +//- A bit-wise OR. This corresponds to the Verilog '|' operator. +//- +module \$or (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) | $signed(B); + end else begin:BLOCK2 + assign Y = A | B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $xor (A, B, Y) +//- +//- A bit-wise XOR. This corresponds to the Verilog '^' operator. +//- +module \$xor (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) ^ $signed(B); + end else begin:BLOCK2 + assign Y = A ^ B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $xnor (A, B, Y) +//- +//- A bit-wise XNOR. This corresponds to the Verilog '~^' operator. +//- +module \$xnor (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) ~^ $signed(B); + end else begin:BLOCK2 + assign Y = A ~^ B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $reduce_and (A, Y) +//- +//- An AND reduction. This corresponds to the Verilog unary prefix '&' operator. +//- +module \$reduce_and (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = &$signed(A); + end else begin:BLOCK2 + assign Y = &A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $reduce_or (A, Y) +//- +//- An OR reduction. This corresponds to the Verilog unary prefix '|' operator. +//- +module \$reduce_or (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = |$signed(A); + end else begin:BLOCK2 + assign Y = |A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $reduce_xor (A, Y) +//- +//- A XOR reduction. This corresponds to the Verilog unary prefix '^' operator. +//- +module \$reduce_xor (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = ^$signed(A); + end else begin:BLOCK2 + assign Y = ^A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $reduce_xnor (A, Y) +//- +//- A XNOR reduction. This corresponds to the Verilog unary prefix '~^' operator. +//- +module \$reduce_xnor (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = ~^$signed(A); + end else begin:BLOCK2 + assign Y = ~^A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $reduce_bool (A, Y) +//- +//- An OR reduction. This cell type is used instead of $reduce_or when a signal is +//- implicitly converted to a boolean signal, e.g. for operands of '&&' and '||'. +//- +module \$reduce_bool (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = !(!$signed(A)); + end else begin:BLOCK2 + assign Y = !(!A); + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$shl (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = $signed(A) << B; + end else begin:BLOCK2 + assign Y = A << B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$shr (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = $signed(A) >> B; + end else begin:BLOCK2 + assign Y = A >> B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$sshl (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = $signed(A) <<< B; + end else begin:BLOCK2 + assign Y = A <<< B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$sshr (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = $signed(A) >>> B; + end else begin:BLOCK2 + assign Y = A >>> B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$shift (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + if (B_SIGNED) begin:BLOCK2 + assign Y = $signed(B) < 0 ? $signed(A) << -B : $signed(A) >> B; + end else begin:BLOCK3 + assign Y = $signed(A) >> B; + end + end else begin:BLOCK4 + if (B_SIGNED) begin:BLOCK5 + assign Y = $signed(B) < 0 ? A << -B : A >> B; + end else begin:BLOCK6 + assign Y = A >> B; + end + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$shiftx (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (Y_WIDTH > 0) + if (B_SIGNED) begin:BLOCK1 + assign Y = A[$signed(B) +: Y_WIDTH]; + end else begin:BLOCK2 + assign Y = A[B +: Y_WIDTH]; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$fa (A, B, C, X, Y); + +parameter WIDTH = 1; + +input [WIDTH-1:0] A, B, C; +output [WIDTH-1:0] X, Y; + +wire [WIDTH-1:0] t1, t2, t3; + +assign t1 = A ^ B, t2 = A & B, t3 = C & t1; +assign Y = t1 ^ C, X = (t2 | t3) ^ (Y ^ Y); + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $lcu (P, G, CI, CO) +//- +//- Lookahead carry unit +//- A building block dedicated to fast computation of carry-bits used in binary +//- arithmetic operations. By replacing the ripple carry structure used in full-adder +//- blocks, the more significant bits of the sum can be expected to be computed more +//- quickly. +//- Typically created during `techmap` of $alu cells (see the "_90_alu" rule in +//- +/techmap.v). +module \$lcu (P, G, CI, CO); + +parameter WIDTH = 1; + +input [WIDTH-1:0] P; // Propagate +input [WIDTH-1:0] G; // Generate +input CI; // Carry-in + +output reg [WIDTH-1:0] CO; // Carry-out + +integer i; +always @* begin + CO = 'bx; + if (^{P, G, CI} !== 1'bx) begin + CO[0] = G[0] || (P[0] && CI); + for (i = 1; i < WIDTH; i = i+1) + CO[i] = G[i] || (P[i] && CO[i-1]); + end +end + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $alu (A, B, CI, BI, X, Y, CO) +//- +//- Arithmetic logic unit. +//- A building block supporting both binary addition/subtraction operations, and +//- indirectly, comparison operations. +//- Typically created by the `alumacc` pass, which transforms: +//- $add, $sub, $lt, $le, $ge, $gt, $eq, $eqx, $ne, $nex +//- cells into this $alu cell. +//- +module \$alu (A, B, CI, BI, X, Y, CO); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 1; +parameter B_WIDTH = 1; +parameter Y_WIDTH = 1; + +input [A_WIDTH-1:0] A; // Input operand +input [B_WIDTH-1:0] B; // Input operand +output [Y_WIDTH-1:0] X; // A xor B (sign-extended, optional B inversion, + // used in combination with + // reduction-AND for $eq/$ne ops) +output [Y_WIDTH-1:0] Y; // Sum + +input CI; // Carry-in (set for $sub) +input BI; // Invert-B (set for $sub) +output [Y_WIDTH-1:0] CO; // Carry-out + +wire [Y_WIDTH-1:0] AA, BB; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign AA = $signed(A), BB = BI ? ~$signed(B) : $signed(B); + end else begin:BLOCK2 + assign AA = $unsigned(A), BB = BI ? ~$unsigned(B) : $unsigned(B); + end +endgenerate + +// this is 'x' if Y and CO should be all 'x', and '0' otherwise +wire y_co_undef = ^{A, A, B, B, CI, CI, BI, BI}; + +assign X = AA ^ BB; +// Full adder +assign Y = (AA + BB + CI) ^ {Y_WIDTH{y_co_undef}}; + +function get_carry; + input a, b, c; + get_carry = (a&b) | (a&c) | (b&c); +endfunction + +genvar i; +generate + assign CO[0] = get_carry(AA[0], BB[0], CI) ^ y_co_undef; + for (i = 1; i < Y_WIDTH; i = i+1) begin:BLOCK3 + assign CO[i] = get_carry(AA[i], BB[i], CO[i-1]) ^ y_co_undef; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$lt (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) < $signed(B); + end else begin:BLOCK2 + assign Y = A < B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$le (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) <= $signed(B); + end else begin:BLOCK2 + assign Y = A <= B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$eq (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) == $signed(B); + end else begin:BLOCK2 + assign Y = A == B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$ne (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) != $signed(B); + end else begin:BLOCK2 + assign Y = A != B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$eqx (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) === $signed(B); + end else begin:BLOCK2 + assign Y = A === B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$nex (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) !== $signed(B); + end else begin:BLOCK2 + assign Y = A !== B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$ge (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) >= $signed(B); + end else begin:BLOCK2 + assign Y = A >= B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$gt (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) > $signed(B); + end else begin:BLOCK2 + assign Y = A > B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$add (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) + $signed(B); + end else begin:BLOCK2 + assign Y = A + B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$sub (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) - $signed(B); + end else begin:BLOCK2 + assign Y = A - B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$mul (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) * $signed(B); + end else begin:BLOCK2 + assign Y = A * B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$macc (A, B, Y); + +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; +parameter CONFIG = 4'b0000; +parameter CONFIG_WIDTH = 4; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output reg [Y_WIDTH-1:0] Y; + +// Xilinx XSIM does not like $clog2() below.. +function integer my_clog2; + input integer v; + begin + if (v > 0) + v = v - 1; + my_clog2 = 0; + while (v) begin + v = v >> 1; + my_clog2 = my_clog2 + 1; + end + end +endfunction + +localparam integer num_bits = CONFIG[3:0] > 0 ? CONFIG[3:0] : 1; +localparam integer num_ports = (CONFIG_WIDTH-4) / (2 + 2*num_bits); +localparam integer num_abits = my_clog2(A_WIDTH) > 0 ? my_clog2(A_WIDTH) : 1; + +function [2*num_ports*num_abits-1:0] get_port_offsets; + input [CONFIG_WIDTH-1:0] cfg; + integer i, cursor; + begin + cursor = 0; + get_port_offsets = 0; + for (i = 0; i < num_ports; i = i+1) begin + get_port_offsets[(2*i + 0)*num_abits +: num_abits] = cursor; + cursor = cursor + cfg[4 + i*(2 + 2*num_bits) + 2 +: num_bits]; + get_port_offsets[(2*i + 1)*num_abits +: num_abits] = cursor; + cursor = cursor + cfg[4 + i*(2 + 2*num_bits) + 2 + num_bits +: num_bits]; + end + end +endfunction + +localparam [2*num_ports*num_abits-1:0] port_offsets = get_port_offsets(CONFIG); + +`define PORT_IS_SIGNED (0 + CONFIG[4 + i*(2 + 2*num_bits)]) +`define PORT_DO_SUBTRACT (0 + CONFIG[4 + i*(2 + 2*num_bits) + 1]) +`define PORT_SIZE_A (0 + CONFIG[4 + i*(2 + 2*num_bits) + 2 +: num_bits]) +`define PORT_SIZE_B (0 + CONFIG[4 + i*(2 + 2*num_bits) + 2 + num_bits +: num_bits]) +`define PORT_OFFSET_A (0 + port_offsets[2*i*num_abits +: num_abits]) +`define PORT_OFFSET_B (0 + port_offsets[2*i*num_abits + num_abits +: num_abits]) + +integer i, j; +reg [Y_WIDTH-1:0] tmp_a, tmp_b; + +always @* begin + Y = 0; + for (i = 0; i < num_ports; i = i+1) + begin + tmp_a = 0; + tmp_b = 0; + + for (j = 0; j < `PORT_SIZE_A; j = j+1) + tmp_a[j] = A[`PORT_OFFSET_A + j]; + + if (`PORT_IS_SIGNED && `PORT_SIZE_A > 0) + for (j = `PORT_SIZE_A; j < Y_WIDTH; j = j+1) + tmp_a[j] = tmp_a[`PORT_SIZE_A-1]; + + for (j = 0; j < `PORT_SIZE_B; j = j+1) + tmp_b[j] = A[`PORT_OFFSET_B + j]; + + if (`PORT_IS_SIGNED && `PORT_SIZE_B > 0) + for (j = `PORT_SIZE_B; j < Y_WIDTH; j = j+1) + tmp_b[j] = tmp_b[`PORT_SIZE_B-1]; + + if (`PORT_SIZE_B > 0) + tmp_a = tmp_a * tmp_b; + + if (`PORT_DO_SUBTRACT) + Y = Y - tmp_a; + else + Y = Y + tmp_a; + end + for (i = 0; i < B_WIDTH; i = i+1) begin + Y = Y + B[i]; + end +end + +`undef PORT_IS_SIGNED +`undef PORT_DO_SUBTRACT +`undef PORT_SIZE_A +`undef PORT_SIZE_B +`undef PORT_OFFSET_A +`undef PORT_OFFSET_B + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $div (A, B, Y) +//- +//- Division with truncated result (rounded towards 0). +//- +module \$div (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) / $signed(B); + end else begin:BLOCK2 + assign Y = A / B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $mod (A, B, Y) +//- +//- Modulo/remainder of division with truncated result (rounded towards 0). +//- +//- Invariant: $div(A, B) * B + $mod(A, B) == A +//- +module \$mod (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) % $signed(B); + end else begin:BLOCK2 + assign Y = A % B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $divfloor (A, B, Y) +//- +//- Division with floored result (rounded towards negative infinity). +//- +module \$divfloor (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + localparam WIDTH = + A_WIDTH >= B_WIDTH && A_WIDTH >= Y_WIDTH ? A_WIDTH : + B_WIDTH >= A_WIDTH && B_WIDTH >= Y_WIDTH ? B_WIDTH : Y_WIDTH; + wire [WIDTH:0] A_buf, B_buf, N_buf; + assign A_buf = $signed(A); + assign B_buf = $signed(B); + assign N_buf = (A[A_WIDTH-1] == B[B_WIDTH-1]) || A == 0 ? A_buf : $signed(A_buf - (B[B_WIDTH-1] ? B_buf+1 : B_buf-1)); + assign Y = $signed(N_buf) / $signed(B_buf); + end else begin:BLOCK2 + assign Y = A / B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| +//- +//- $modfloor (A, B, Y) +//- +//- Modulo/remainder of division with floored result (rounded towards negative infinity). +//- +//- Invariant: $divfloor(A, B) * B + $modfloor(A, B) == A +//- +module \$modfloor (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + localparam WIDTH = B_WIDTH >= Y_WIDTH ? B_WIDTH : Y_WIDTH; + wire [WIDTH-1:0] B_buf, Y_trunc; + assign B_buf = $signed(B); + assign Y_trunc = $signed(A) % $signed(B); + // flooring mod is the same as truncating mod for positive division results (A and B have + // the same sign), as well as when there's no remainder. + // For all other cases, they behave as `floor - trunc = B` + assign Y = (A[A_WIDTH-1] == B[B_WIDTH-1]) || Y_trunc == 0 ? Y_trunc : $signed(B_buf) + $signed(Y_trunc); + end else begin:BLOCK2 + // no difference between truncating and flooring for unsigned + assign Y = A % B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- +`ifndef SIMLIB_NOPOW + +module \$pow (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) ** $signed(B); + end else if (A_SIGNED) begin:BLOCK2 + assign Y = $signed(A) ** B; + end else if (B_SIGNED) begin:BLOCK3 + assign Y = A ** $signed(B); + end else begin:BLOCK4 + assign Y = A ** B; + end +endgenerate + +endmodule + +`endif +// -------------------------------------------------------- + +module \$logic_not (A, Y); + +parameter A_SIGNED = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED) begin:BLOCK1 + assign Y = !$signed(A); + end else begin:BLOCK2 + assign Y = !A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$logic_and (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) && $signed(B); + end else begin:BLOCK2 + assign Y = A && B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$logic_or (A, B, Y); + +parameter A_SIGNED = 0; +parameter B_SIGNED = 0; +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [Y_WIDTH-1:0] Y; + +generate + if (A_SIGNED && B_SIGNED) begin:BLOCK1 + assign Y = $signed(A) || $signed(B); + end else begin:BLOCK2 + assign Y = A || B; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$slice (A, Y); + +parameter OFFSET = 0; +parameter A_WIDTH = 0; +parameter Y_WIDTH = 0; + +input [A_WIDTH-1:0] A; +output [Y_WIDTH-1:0] Y; + +assign Y = A >> OFFSET; + +endmodule + +// -------------------------------------------------------- + +module \$concat (A, B, Y); + +parameter A_WIDTH = 0; +parameter B_WIDTH = 0; + +input [A_WIDTH-1:0] A; +input [B_WIDTH-1:0] B; +output [A_WIDTH+B_WIDTH-1:0] Y; + +assign Y = {B, A}; + +endmodule + +// -------------------------------------------------------- + +module \$mux (A, B, S, Y); + +parameter WIDTH = 0; + +input [WIDTH-1:0] A, B; +input S; +output reg [WIDTH-1:0] Y; + +always @* begin + if (S) + Y = B; + else + Y = A; +end + +endmodule + +// -------------------------------------------------------- + +module \$bmux (A, S, Y); + +parameter WIDTH = 0; +parameter S_WIDTH = 0; + +input [(WIDTH << S_WIDTH)-1:0] A; +input [S_WIDTH-1:0] S; +output [WIDTH-1:0] Y; + +wire [WIDTH-1:0] bm0_out, bm1_out; + +generate + if (S_WIDTH > 1) begin:muxlogic + \$bmux #(.WIDTH(WIDTH), .S_WIDTH(S_WIDTH-1)) bm0 (.A(A), .S(S[S_WIDTH-2:0]), .Y(bm0_out)); + \$bmux #(.WIDTH(WIDTH), .S_WIDTH(S_WIDTH-1)) bm1 (.A(A[(WIDTH << S_WIDTH)-1:WIDTH << (S_WIDTH - 1)]), .S(S[S_WIDTH-2:0]), .Y(bm1_out)); + assign Y = S[S_WIDTH-1] ? bm1_out : bm0_out; + end else if (S_WIDTH == 1) begin:simple + assign Y = S ? A[1] : A[0]; + end else begin:passthru + assign Y = A; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$pmux (A, B, S, Y); + +parameter WIDTH = 0; +parameter S_WIDTH = 0; + +input [WIDTH-1:0] A; +input [WIDTH*S_WIDTH-1:0] B; +input [S_WIDTH-1:0] S; +output reg [WIDTH-1:0] Y; + +integer i; +reg found_active_sel_bit; + +always @* begin + Y = A; + found_active_sel_bit = 0; + for (i = 0; i < S_WIDTH; i = i+1) + if (S[i]) begin + Y = found_active_sel_bit ? 'bx : B >> (WIDTH*i); + found_active_sel_bit = 1; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$demux (A, S, Y); + +parameter WIDTH = 1; +parameter S_WIDTH = 1; + +input [WIDTH-1:0] A; +input [S_WIDTH-1:0] S; +output [(WIDTH << S_WIDTH)-1:0] Y; + +genvar i; +generate + for (i = 0; i < (1 << S_WIDTH); i = i + 1) begin:slices + assign Y[i*WIDTH+:WIDTH] = (S == i) ? A : 0; + end +endgenerate + +endmodule + +// -------------------------------------------------------- +`ifndef SIMLIB_NOLUT + +module \$lut (A, Y); + +parameter WIDTH = 0; +parameter LUT = 0; + +input [WIDTH-1:0] A; +output Y; + +\$bmux #(.WIDTH(1), .S_WIDTH(WIDTH)) mux(.A(LUT), .S(A), .Y(Y)); + +endmodule + +`endif +// -------------------------------------------------------- + +module \$sop (A, Y); + +parameter WIDTH = 0; +parameter DEPTH = 0; +parameter TABLE = 0; + +input [WIDTH-1:0] A; +output reg Y; + +integer i, j; +reg match; + +always @* begin + Y = 0; + for (i = 0; i < DEPTH; i=i+1) begin + match = 1; + for (j = 0; j < WIDTH; j=j+1) begin + if (TABLE[2*WIDTH*i + 2*j + 0] && A[j]) match = 0; + if (TABLE[2*WIDTH*i + 2*j + 1] && !A[j]) match = 0; + end + if (match) Y = 1; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$tribuf (A, EN, Y); + +parameter WIDTH = 0; + +input [WIDTH-1:0] A; +input EN; +output [WIDTH-1:0] Y; + +assign Y = EN ? A : 'bz; + +endmodule + +// -------------------------------------------------------- + +module \$specify2 (EN, SRC, DST); + +parameter FULL = 0; +parameter SRC_WIDTH = 1; +parameter DST_WIDTH = 1; + +parameter SRC_DST_PEN = 0; +parameter SRC_DST_POL = 0; + +parameter T_RISE_MIN = 0; +parameter T_RISE_TYP = 0; +parameter T_RISE_MAX = 0; + +parameter T_FALL_MIN = 0; +parameter T_FALL_TYP = 0; +parameter T_FALL_MAX = 0; + +input EN; +input [SRC_WIDTH-1:0] SRC; +input [DST_WIDTH-1:0] DST; + +localparam SD = SRC_DST_PEN ? (SRC_DST_POL ? 1 : 2) : 0; + +`ifdef SIMLIB_SPECIFY +specify + if (EN && SD==0 && !FULL) (SRC => DST) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && SD==0 && FULL) (SRC *> DST) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && SD==1 && !FULL) (SRC +=> DST) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && SD==1 && FULL) (SRC +*> DST) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && SD==2 && !FULL) (SRC -=> DST) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && SD==2 && FULL) (SRC -*> DST) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); +endspecify +`endif + +endmodule + +// -------------------------------------------------------- + +module \$specify3 (EN, SRC, DST, DAT); + +parameter FULL = 0; +parameter SRC_WIDTH = 1; +parameter DST_WIDTH = 1; + +parameter EDGE_EN = 0; +parameter EDGE_POL = 0; + +parameter SRC_DST_PEN = 0; +parameter SRC_DST_POL = 0; + +parameter DAT_DST_PEN = 0; +parameter DAT_DST_POL = 0; + +parameter T_RISE_MIN = 0; +parameter T_RISE_TYP = 0; +parameter T_RISE_MAX = 0; + +parameter T_FALL_MIN = 0; +parameter T_FALL_TYP = 0; +parameter T_FALL_MAX = 0; + +input EN; +input [SRC_WIDTH-1:0] SRC; +input [DST_WIDTH-1:0] DST, DAT; + +localparam ED = EDGE_EN ? (EDGE_POL ? 1 : 2) : 0; +localparam SD = SRC_DST_PEN ? (SRC_DST_POL ? 1 : 2) : 0; +localparam DD = DAT_DST_PEN ? (DAT_DST_POL ? 1 : 2) : 0; + +`ifdef SIMLIB_SPECIFY +specify + // DD=0 + + if (EN && DD==0 && SD==0 && ED==0 && !FULL) ( SRC => (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==0 && ED==0 && FULL) ( SRC *> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==0 && ED==1 && !FULL) (posedge SRC => (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==0 && ED==1 && FULL) (posedge SRC *> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==0 && ED==2 && !FULL) (negedge SRC => (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==0 && ED==2 && FULL) (negedge SRC *> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + if (EN && DD==0 && SD==1 && ED==0 && !FULL) ( SRC +=> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==1 && ED==0 && FULL) ( SRC +*> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==1 && ED==1 && !FULL) (posedge SRC +=> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==1 && ED==1 && FULL) (posedge SRC +*> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==1 && ED==2 && !FULL) (negedge SRC +=> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==1 && ED==2 && FULL) (negedge SRC +*> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + if (EN && DD==0 && SD==2 && ED==0 && !FULL) ( SRC -=> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==2 && ED==0 && FULL) ( SRC -*> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==2 && ED==1 && !FULL) (posedge SRC -=> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==2 && ED==1 && FULL) (posedge SRC -*> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==2 && ED==2 && !FULL) (negedge SRC -=> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==0 && SD==2 && ED==2 && FULL) (negedge SRC -*> (DST : DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + // DD=1 + + if (EN && DD==1 && SD==0 && ED==0 && !FULL) ( SRC => (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==0 && ED==0 && FULL) ( SRC *> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==0 && ED==1 && !FULL) (posedge SRC => (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==0 && ED==1 && FULL) (posedge SRC *> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==0 && ED==2 && !FULL) (negedge SRC => (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==0 && ED==2 && FULL) (negedge SRC *> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + if (EN && DD==1 && SD==1 && ED==0 && !FULL) ( SRC +=> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==1 && ED==0 && FULL) ( SRC +*> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==1 && ED==1 && !FULL) (posedge SRC +=> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==1 && ED==1 && FULL) (posedge SRC +*> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==1 && ED==2 && !FULL) (negedge SRC +=> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==1 && ED==2 && FULL) (negedge SRC +*> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + if (EN && DD==1 && SD==2 && ED==0 && !FULL) ( SRC -=> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==2 && ED==0 && FULL) ( SRC -*> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==2 && ED==1 && !FULL) (posedge SRC -=> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==2 && ED==1 && FULL) (posedge SRC -*> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==2 && ED==2 && !FULL) (negedge SRC -=> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==1 && SD==2 && ED==2 && FULL) (negedge SRC -*> (DST +: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + // DD=2 + + if (EN && DD==2 && SD==0 && ED==0 && !FULL) ( SRC => (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==0 && ED==0 && FULL) ( SRC *> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==0 && ED==1 && !FULL) (posedge SRC => (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==0 && ED==1 && FULL) (posedge SRC *> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==0 && ED==2 && !FULL) (negedge SRC => (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==0 && ED==2 && FULL) (negedge SRC *> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + if (EN && DD==2 && SD==1 && ED==0 && !FULL) ( SRC +=> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==1 && ED==0 && FULL) ( SRC +*> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==1 && ED==1 && !FULL) (posedge SRC +=> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==1 && ED==1 && FULL) (posedge SRC +*> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==1 && ED==2 && !FULL) (negedge SRC +=> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==1 && ED==2 && FULL) (negedge SRC +*> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + + if (EN && DD==2 && SD==2 && ED==0 && !FULL) ( SRC -=> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==2 && ED==0 && FULL) ( SRC -*> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==2 && ED==1 && !FULL) (posedge SRC -=> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==2 && ED==1 && FULL) (posedge SRC -*> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==2 && ED==2 && !FULL) (negedge SRC -=> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); + if (EN && DD==2 && SD==2 && ED==2 && FULL) (negedge SRC -*> (DST -: DAT)) = (T_RISE_MIN:T_RISE_TYP:T_RISE_MAX, T_FALL_MIN:T_FALL_TYP:T_FALL_MAX); +endspecify +`endif + +endmodule + +// -------------------------------------------------------- + +module \$specrule (EN_SRC, EN_DST, SRC, DST); + +parameter TYPE = ""; +parameter T_LIMIT = 0; +parameter T_LIMIT2 = 0; + +parameter SRC_WIDTH = 1; +parameter DST_WIDTH = 1; + +parameter SRC_PEN = 0; +parameter SRC_POL = 0; + +parameter DST_PEN = 0; +parameter DST_POL = 0; + +input EN_SRC, EN_DST; +input [SRC_WIDTH-1:0] SRC; +input [DST_WIDTH-1:0] DST; + +`ifdef SIMLIB_SPECIFY +specify + // TBD +endspecify +`endif + +endmodule + +// -------------------------------------------------------- + +module \$assert (A, EN); + +input A, EN; + +`ifndef SIMLIB_NOCHECKS +always @* begin + if (A !== 1'b1 && EN === 1'b1) begin + $display("Assertion %m failed!"); + $stop; + end +end +`endif + +endmodule + +// -------------------------------------------------------- + +module \$assume (A, EN); + +input A, EN; + +`ifndef SIMLIB_NOCHECKS +always @* begin + if (A !== 1'b1 && EN === 1'b1) begin + $display("Assumption %m failed!"); + $stop; + end +end +`endif + +endmodule + +// -------------------------------------------------------- + +module \$live (A, EN); + +input A, EN; + +endmodule + +// -------------------------------------------------------- + +module \$fair (A, EN); + +input A, EN; + +endmodule + +// -------------------------------------------------------- + +module \$cover (A, EN); + +input A, EN; + +endmodule + +// -------------------------------------------------------- + +module \$initstate (Y); + +output reg Y = 1; +reg [3:0] cnt = 1; +reg trig = 0; + +initial trig <= 1; + +always @(cnt, trig) begin + Y <= |cnt; + cnt <= cnt + |cnt; +end + +endmodule + +// -------------------------------------------------------- + +module \$anyconst (Y); + +parameter WIDTH = 0; + +output [WIDTH-1:0] Y; + +assign Y = 'bx; + +endmodule + +// -------------------------------------------------------- + +module \$anyseq (Y); + +parameter WIDTH = 0; + +output [WIDTH-1:0] Y; + +assign Y = 'bx; + +endmodule + +// -------------------------------------------------------- +`ifdef SIMLIB_FF +module \$anyinit (D, Q); + +parameter WIDTH = 0; + +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; + +initial Q <= 'bx; + +always @($global_clk) begin + Q <= D; +end + +endmodule +`endif +// -------------------------------------------------------- + +module \$allconst (Y); + +parameter WIDTH = 0; + +output [WIDTH-1:0] Y; + +assign Y = 'bx; + +endmodule + +// -------------------------------------------------------- + +module \$allseq (Y); + +parameter WIDTH = 0; + +output [WIDTH-1:0] Y; + +assign Y = 'bx; + +endmodule + +// -------------------------------------------------------- + +module \$equiv (A, B, Y); + +input A, B; +output Y; + +assign Y = (A !== 1'bx && A !== B) ? 1'bx : A; + +`ifndef SIMLIB_NOCHECKS +always @* begin + if (A !== 1'bx && A !== B) begin + $display("Equivalence failed!"); + $stop; + end +end +`endif + +endmodule + +// -------------------------------------------------------- +`ifndef SIMLIB_NOSR + +module \$sr (SET, CLR, Q); + +parameter WIDTH = 0; +parameter SET_POLARITY = 1'b1; +parameter CLR_POLARITY = 1'b1; + +input [WIDTH-1:0] SET, CLR; +output reg [WIDTH-1:0] Q; + +wire [WIDTH-1:0] pos_set = SET_POLARITY ? SET : ~SET; +wire [WIDTH-1:0] pos_clr = CLR_POLARITY ? CLR : ~CLR; + +genvar i; +generate + for (i = 0; i < WIDTH; i = i+1) begin:bitslices + always @* + if (pos_clr[i]) + Q[i] <= 0; + else if (pos_set[i]) + Q[i] <= 1; + end +endgenerate + +endmodule + +`endif +// -------------------------------------------------------- +`ifdef SIMLIB_FF + +module \$ff (D, Q); + +parameter WIDTH = 0; + +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; + +always @($global_clk) begin + Q <= D; +end + +endmodule + +`endif +// -------------------------------------------------------- + +module \$dff (CLK, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; + +input CLK; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; + +always @(posedge pos_clk) begin + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$dffe (CLK, EN, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter EN_POLARITY = 1'b1; + +input CLK, EN; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; + +always @(posedge pos_clk) begin + if (EN == EN_POLARITY) Q <= D; +end + +endmodule + +// -------------------------------------------------------- +`ifndef SIMLIB_NOSR + +module \$dffsr (CLK, SET, CLR, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter SET_POLARITY = 1'b1; +parameter CLR_POLARITY = 1'b1; + +input CLK; +input [WIDTH-1:0] SET, CLR, D; +output reg [WIDTH-1:0] Q; + +wire pos_clk = CLK == CLK_POLARITY; +wire [WIDTH-1:0] pos_set = SET_POLARITY ? SET : ~SET; +wire [WIDTH-1:0] pos_clr = CLR_POLARITY ? CLR : ~CLR; + +genvar i; +generate + for (i = 0; i < WIDTH; i = i+1) begin:bitslices + always @(posedge pos_set[i], posedge pos_clr[i], posedge pos_clk) + if (pos_clr[i]) + Q[i] <= 0; + else if (pos_set[i]) + Q[i] <= 1; + else + Q[i] <= D[i]; + end +endgenerate + +endmodule + +// -------------------------------------------------------- + +module \$dffsre (CLK, SET, CLR, EN, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter SET_POLARITY = 1'b1; +parameter CLR_POLARITY = 1'b1; +parameter EN_POLARITY = 1'b1; + +input CLK, EN; +input [WIDTH-1:0] SET, CLR, D; +output reg [WIDTH-1:0] Q; + +wire pos_clk = CLK == CLK_POLARITY; +wire [WIDTH-1:0] pos_set = SET_POLARITY ? SET : ~SET; +wire [WIDTH-1:0] pos_clr = CLR_POLARITY ? CLR : ~CLR; + +genvar i; +generate + for (i = 0; i < WIDTH; i = i+1) begin:bitslices + always @(posedge pos_set[i], posedge pos_clr[i], posedge pos_clk) + if (pos_clr[i]) + Q[i] <= 0; + else if (pos_set[i]) + Q[i] <= 1; + else if (EN == EN_POLARITY) + Q[i] <= D[i]; + end +endgenerate + +endmodule + +`endif +// -------------------------------------------------------- + +module \$adff (CLK, ARST, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter ARST_POLARITY = 1'b1; +parameter ARST_VALUE = 0; + +input CLK, ARST; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_arst = ARST == ARST_POLARITY; + +always @(posedge pos_clk, posedge pos_arst) begin + if (pos_arst) + Q <= ARST_VALUE; + else + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$aldff (CLK, ALOAD, AD, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter ALOAD_POLARITY = 1'b1; + +input CLK, ALOAD; +input [WIDTH-1:0] AD; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_aload = ALOAD == ALOAD_POLARITY; + +always @(posedge pos_clk, posedge pos_aload) begin + if (pos_aload) + Q <= AD; + else + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$sdff (CLK, SRST, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter SRST_POLARITY = 1'b1; +parameter SRST_VALUE = 0; + +input CLK, SRST; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_srst = SRST == SRST_POLARITY; + +always @(posedge pos_clk) begin + if (pos_srst) + Q <= SRST_VALUE; + else + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$adffe (CLK, ARST, EN, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter EN_POLARITY = 1'b1; +parameter ARST_POLARITY = 1'b1; +parameter ARST_VALUE = 0; + +input CLK, ARST, EN; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_arst = ARST == ARST_POLARITY; + +always @(posedge pos_clk, posedge pos_arst) begin + if (pos_arst) + Q <= ARST_VALUE; + else if (EN == EN_POLARITY) + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$aldffe (CLK, ALOAD, AD, EN, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter EN_POLARITY = 1'b1; +parameter ALOAD_POLARITY = 1'b1; + +input CLK, ALOAD, EN; +input [WIDTH-1:0] D; +input [WIDTH-1:0] AD; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_aload = ALOAD == ALOAD_POLARITY; + +always @(posedge pos_clk, posedge pos_aload) begin + if (pos_aload) + Q <= AD; + else if (EN == EN_POLARITY) + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$sdffe (CLK, SRST, EN, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter EN_POLARITY = 1'b1; +parameter SRST_POLARITY = 1'b1; +parameter SRST_VALUE = 0; + +input CLK, SRST, EN; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_srst = SRST == SRST_POLARITY; + +always @(posedge pos_clk) begin + if (pos_srst) + Q <= SRST_VALUE; + else if (EN == EN_POLARITY) + Q <= D; +end + +endmodule + +// -------------------------------------------------------- + +module \$sdffce (CLK, SRST, EN, D, Q); + +parameter WIDTH = 0; +parameter CLK_POLARITY = 1'b1; +parameter EN_POLARITY = 1'b1; +parameter SRST_POLARITY = 1'b1; +parameter SRST_VALUE = 0; + +input CLK, SRST, EN; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; +wire pos_clk = CLK == CLK_POLARITY; +wire pos_srst = SRST == SRST_POLARITY; + +always @(posedge pos_clk) begin + if (EN == EN_POLARITY) begin + if (pos_srst) + Q <= SRST_VALUE; + else + Q <= D; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$dlatch (EN, D, Q); + +parameter WIDTH = 0; +parameter EN_POLARITY = 1'b1; + +input EN; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; + +always @* begin + if (EN == EN_POLARITY) + Q = D; +end + +endmodule + +// -------------------------------------------------------- + +module \$adlatch (EN, ARST, D, Q); + +parameter WIDTH = 0; +parameter EN_POLARITY = 1'b1; +parameter ARST_POLARITY = 1'b1; +parameter ARST_VALUE = 0; + +input EN, ARST; +input [WIDTH-1:0] D; +output reg [WIDTH-1:0] Q; + +always @* begin + if (ARST == ARST_POLARITY) + Q = ARST_VALUE; + else if (EN == EN_POLARITY) + Q = D; +end + +endmodule + +// -------------------------------------------------------- +`ifndef SIMLIB_NOSR + +module \$dlatchsr (EN, SET, CLR, D, Q); + +parameter WIDTH = 0; +parameter EN_POLARITY = 1'b1; +parameter SET_POLARITY = 1'b1; +parameter CLR_POLARITY = 1'b1; + +input EN; +input [WIDTH-1:0] SET, CLR, D; +output reg [WIDTH-1:0] Q; + +wire pos_en = EN == EN_POLARITY; +wire [WIDTH-1:0] pos_set = SET_POLARITY ? SET : ~SET; +wire [WIDTH-1:0] pos_clr = CLR_POLARITY ? CLR : ~CLR; + +genvar i; +generate + for (i = 0; i < WIDTH; i = i+1) begin:bitslices + always @* + if (pos_clr[i]) + Q[i] = 0; + else if (pos_set[i]) + Q[i] = 1; + else if (pos_en) + Q[i] = D[i]; + end +endgenerate + +endmodule + +`endif +// -------------------------------------------------------- + +module \$fsm (CLK, ARST, CTRL_IN, CTRL_OUT); + +parameter NAME = ""; + +parameter CLK_POLARITY = 1'b1; +parameter ARST_POLARITY = 1'b1; + +parameter CTRL_IN_WIDTH = 1; +parameter CTRL_OUT_WIDTH = 1; + +parameter STATE_BITS = 1; +parameter STATE_NUM = 1; +parameter STATE_NUM_LOG2 = 1; +parameter STATE_RST = 0; +parameter STATE_TABLE = 1'b0; + +parameter TRANS_NUM = 1; +parameter TRANS_TABLE = 4'b0x0x; + +input CLK, ARST; +input [CTRL_IN_WIDTH-1:0] CTRL_IN; +output reg [CTRL_OUT_WIDTH-1:0] CTRL_OUT; + +wire pos_clk = CLK == CLK_POLARITY; +wire pos_arst = ARST == ARST_POLARITY; + +reg [STATE_BITS-1:0] state; +reg [STATE_BITS-1:0] state_tmp; +reg [STATE_BITS-1:0] next_state; + +reg [STATE_BITS-1:0] tr_state_in; +reg [STATE_BITS-1:0] tr_state_out; +reg [CTRL_IN_WIDTH-1:0] tr_ctrl_in; +reg [CTRL_OUT_WIDTH-1:0] tr_ctrl_out; + +integer i; + +task tr_fetch; + input [31:0] tr_num; + reg [31:0] tr_pos; + reg [STATE_NUM_LOG2-1:0] state_num; + begin + tr_pos = (2*STATE_NUM_LOG2+CTRL_IN_WIDTH+CTRL_OUT_WIDTH)*tr_num; + tr_ctrl_out = TRANS_TABLE >> tr_pos; + tr_pos = tr_pos + CTRL_OUT_WIDTH; + state_num = TRANS_TABLE >> tr_pos; + tr_state_out = STATE_TABLE >> (STATE_BITS*state_num); + tr_pos = tr_pos + STATE_NUM_LOG2; + tr_ctrl_in = TRANS_TABLE >> tr_pos; + tr_pos = tr_pos + CTRL_IN_WIDTH; + state_num = TRANS_TABLE >> tr_pos; + tr_state_in = STATE_TABLE >> (STATE_BITS*state_num); + tr_pos = tr_pos + STATE_NUM_LOG2; + end +endtask + +always @(posedge pos_clk, posedge pos_arst) begin + if (pos_arst) begin + state_tmp = STATE_TABLE[STATE_BITS*(STATE_RST+1)-1:STATE_BITS*STATE_RST]; + for (i = 0; i < STATE_BITS; i = i+1) + if (state_tmp[i] === 1'bz) + state_tmp[i] = 0; + state <= state_tmp; + end else begin + state_tmp = next_state; + for (i = 0; i < STATE_BITS; i = i+1) + if (state_tmp[i] === 1'bz) + state_tmp[i] = 0; + state <= state_tmp; + end +end + +always @(state, CTRL_IN) begin + next_state <= STATE_TABLE[STATE_BITS*(STATE_RST+1)-1:STATE_BITS*STATE_RST]; + CTRL_OUT <= 'bx; + // $display("---"); + // $display("Q: %b %b", state, CTRL_IN); + for (i = 0; i < TRANS_NUM; i = i+1) begin + tr_fetch(i); + // $display("T: %b %b -> %b %b [%d]", tr_state_in, tr_ctrl_in, tr_state_out, tr_ctrl_out, i); + casez ({state, CTRL_IN}) + {tr_state_in, tr_ctrl_in}: begin + // $display("-> %b %b <- MATCH", state, CTRL_IN); + {next_state, CTRL_OUT} <= {tr_state_out, tr_ctrl_out}; + end + endcase + end +end + +endmodule + +// -------------------------------------------------------- +`ifndef SIMLIB_NOMEM + +module \$memrd (CLK, EN, ADDR, DATA); + +parameter MEMID = ""; +parameter ABITS = 8; +parameter WIDTH = 8; + +parameter CLK_ENABLE = 0; +parameter CLK_POLARITY = 0; +parameter TRANSPARENT = 0; + +input CLK, EN; +input [ABITS-1:0] ADDR; +output [WIDTH-1:0] DATA; + +initial begin + if (MEMID != "") begin + $display("ERROR: Found non-simulatable instance of $memrd!"); + $finish; + end +end + +endmodule + +module \$memrd_v2 (CLK, EN, ARST, SRST, ADDR, DATA); + +parameter MEMID = ""; +parameter ABITS = 8; +parameter WIDTH = 8; + +parameter CLK_ENABLE = 0; +parameter CLK_POLARITY = 0; +parameter TRANSPARENCY_MASK = 0; +parameter COLLISION_X_MASK = 0; +parameter ARST_VALUE = 0; +parameter SRST_VALUE = 0; +parameter INIT_VALUE = 0; +parameter CE_OVER_SRST = 0; + +input CLK, EN, ARST, SRST; +input [ABITS-1:0] ADDR; +output [WIDTH-1:0] DATA; + +initial begin + if (MEMID != "") begin + $display("ERROR: Found non-simulatable instance of $memrd_v2!"); + $finish; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$memwr (CLK, EN, ADDR, DATA); + +parameter MEMID = ""; +parameter ABITS = 8; +parameter WIDTH = 8; + +parameter CLK_ENABLE = 0; +parameter CLK_POLARITY = 0; +parameter PRIORITY = 0; + +input CLK; +input [WIDTH-1:0] EN; +input [ABITS-1:0] ADDR; +input [WIDTH-1:0] DATA; + +initial begin + if (MEMID != "") begin + $display("ERROR: Found non-simulatable instance of $memwr!"); + $finish; + end +end + +endmodule + +module \$memwr_v2 (CLK, EN, ADDR, DATA); + +parameter MEMID = ""; +parameter ABITS = 8; +parameter WIDTH = 8; + +parameter CLK_ENABLE = 0; +parameter CLK_POLARITY = 0; +parameter PORTID = 0; +parameter PRIORITY_MASK = 0; + +input CLK; +input [WIDTH-1:0] EN; +input [ABITS-1:0] ADDR; +input [WIDTH-1:0] DATA; + +initial begin + if (MEMID != "") begin + $display("ERROR: Found non-simulatable instance of $memwr_v2!"); + $finish; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$meminit (ADDR, DATA); + +parameter MEMID = ""; +parameter ABITS = 8; +parameter WIDTH = 8; +parameter WORDS = 1; + +parameter PRIORITY = 0; + +input [ABITS-1:0] ADDR; +input [WORDS*WIDTH-1:0] DATA; + +initial begin + if (MEMID != "") begin + $display("ERROR: Found non-simulatable instance of $meminit!"); + $finish; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$meminit_v2 (ADDR, DATA, EN); + +parameter MEMID = ""; +parameter ABITS = 8; +parameter WIDTH = 8; +parameter WORDS = 1; + +parameter PRIORITY = 0; + +input [ABITS-1:0] ADDR; +input [WORDS*WIDTH-1:0] DATA; +input [WIDTH-1:0] EN; + +initial begin + if (MEMID != "") begin + $display("ERROR: Found non-simulatable instance of $meminit_v2!"); + $finish; + end +end + +endmodule + +// -------------------------------------------------------- + +module \$mem (RD_CLK, RD_EN, RD_ADDR, RD_DATA, WR_CLK, WR_EN, WR_ADDR, WR_DATA); + +parameter MEMID = ""; +parameter signed SIZE = 4; +parameter signed OFFSET = 0; +parameter signed ABITS = 2; +parameter signed WIDTH = 8; +parameter signed INIT = 1'bx; + +parameter signed RD_PORTS = 1; +parameter RD_CLK_ENABLE = 1'b1; +parameter RD_CLK_POLARITY = 1'b1; +parameter RD_TRANSPARENT = 1'b1; + +parameter signed WR_PORTS = 1; +parameter WR_CLK_ENABLE = 1'b1; +parameter WR_CLK_POLARITY = 1'b1; + +input [RD_PORTS-1:0] RD_CLK; +input [RD_PORTS-1:0] RD_EN; +input [RD_PORTS*ABITS-1:0] RD_ADDR; +output reg [RD_PORTS*WIDTH-1:0] RD_DATA; + +input [WR_PORTS-1:0] WR_CLK; +input [WR_PORTS*WIDTH-1:0] WR_EN; +input [WR_PORTS*ABITS-1:0] WR_ADDR; +input [WR_PORTS*WIDTH-1:0] WR_DATA; + +reg [WIDTH-1:0] memory [SIZE-1:0]; + +integer i, j; +reg [WR_PORTS-1:0] LAST_WR_CLK; +reg [RD_PORTS-1:0] LAST_RD_CLK; + +function port_active; + input clk_enable; + input clk_polarity; + input last_clk; + input this_clk; + begin + casez ({clk_enable, clk_polarity, last_clk, this_clk}) + 4'b0???: port_active = 1; + 4'b1101: port_active = 1; + 4'b1010: port_active = 1; + default: port_active = 0; + endcase + end +endfunction + +initial begin + for (i = 0; i < SIZE; i = i+1) + memory[i] = INIT >>> (i*WIDTH); +end + +always @(RD_CLK, RD_ADDR, RD_DATA, WR_CLK, WR_EN, WR_ADDR, WR_DATA) begin +`ifdef SIMLIB_MEMDELAY + #`SIMLIB_MEMDELAY; +`endif + for (i = 0; i < RD_PORTS; i = i+1) begin + if (!RD_TRANSPARENT[i] && RD_CLK_ENABLE[i] && RD_EN[i] && port_active(RD_CLK_ENABLE[i], RD_CLK_POLARITY[i], LAST_RD_CLK[i], RD_CLK[i])) begin + // $display("Read from %s: addr=%b data=%b", MEMID, RD_ADDR[i*ABITS +: ABITS], memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]); + RD_DATA[i*WIDTH +: WIDTH] <= memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]; + end + end + + for (i = 0; i < WR_PORTS; i = i+1) begin + if (port_active(WR_CLK_ENABLE[i], WR_CLK_POLARITY[i], LAST_WR_CLK[i], WR_CLK[i])) + for (j = 0; j < WIDTH; j = j+1) + if (WR_EN[i*WIDTH+j]) begin + // $display("Write to %s: addr=%b data=%b", MEMID, WR_ADDR[i*ABITS +: ABITS], WR_DATA[i*WIDTH+j]); + memory[WR_ADDR[i*ABITS +: ABITS] - OFFSET][j] = WR_DATA[i*WIDTH+j]; + end + end + + for (i = 0; i < RD_PORTS; i = i+1) begin + if ((RD_TRANSPARENT[i] || !RD_CLK_ENABLE[i]) && port_active(RD_CLK_ENABLE[i], RD_CLK_POLARITY[i], LAST_RD_CLK[i], RD_CLK[i])) begin + // $display("Transparent read from %s: addr=%b data=%b", MEMID, RD_ADDR[i*ABITS +: ABITS], memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]); + RD_DATA[i*WIDTH +: WIDTH] <= memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]; + end + end + + LAST_RD_CLK <= RD_CLK; + LAST_WR_CLK <= WR_CLK; +end + +endmodule + +module \$mem_v2 (RD_CLK, RD_EN, RD_ARST, RD_SRST, RD_ADDR, RD_DATA, WR_CLK, WR_EN, WR_ADDR, WR_DATA); + +parameter MEMID = ""; +parameter signed SIZE = 4; +parameter signed OFFSET = 0; +parameter signed ABITS = 2; +parameter signed WIDTH = 8; +parameter signed INIT = 1'bx; + +parameter signed RD_PORTS = 1; +parameter RD_CLK_ENABLE = 1'b1; +parameter RD_CLK_POLARITY = 1'b1; +parameter RD_TRANSPARENCY_MASK = 1'b0; +parameter RD_COLLISION_X_MASK = 1'b0; +parameter RD_WIDE_CONTINUATION = 1'b0; +parameter RD_CE_OVER_SRST = 1'b0; +parameter RD_ARST_VALUE = 1'b0; +parameter RD_SRST_VALUE = 1'b0; +parameter RD_INIT_VALUE = 1'b0; + +parameter signed WR_PORTS = 1; +parameter WR_CLK_ENABLE = 1'b1; +parameter WR_CLK_POLARITY = 1'b1; +parameter WR_PRIORITY_MASK = 1'b0; +parameter WR_WIDE_CONTINUATION = 1'b0; + +input [RD_PORTS-1:0] RD_CLK; +input [RD_PORTS-1:0] RD_EN; +input [RD_PORTS-1:0] RD_ARST; +input [RD_PORTS-1:0] RD_SRST; +input [RD_PORTS*ABITS-1:0] RD_ADDR; +output reg [RD_PORTS*WIDTH-1:0] RD_DATA; + +input [WR_PORTS-1:0] WR_CLK; +input [WR_PORTS*WIDTH-1:0] WR_EN; +input [WR_PORTS*ABITS-1:0] WR_ADDR; +input [WR_PORTS*WIDTH-1:0] WR_DATA; + +reg [WIDTH-1:0] memory [SIZE-1:0]; + +integer i, j, k; +reg [WR_PORTS-1:0] LAST_WR_CLK; +reg [RD_PORTS-1:0] LAST_RD_CLK; + +function port_active; + input clk_enable; + input clk_polarity; + input last_clk; + input this_clk; + begin + casez ({clk_enable, clk_polarity, last_clk, this_clk}) + 4'b0???: port_active = 1; + 4'b1101: port_active = 1; + 4'b1010: port_active = 1; + default: port_active = 0; + endcase + end +endfunction + +initial begin + for (i = 0; i < SIZE; i = i+1) + memory[i] = INIT >>> (i*WIDTH); + RD_DATA = RD_INIT_VALUE; +end + +always @(RD_CLK, RD_ARST, RD_ADDR, RD_DATA, WR_CLK, WR_EN, WR_ADDR, WR_DATA) begin +`ifdef SIMLIB_MEMDELAY + #`SIMLIB_MEMDELAY; +`endif + for (i = 0; i < RD_PORTS; i = i+1) begin + if (RD_CLK_ENABLE[i] && RD_EN[i] && port_active(RD_CLK_ENABLE[i], RD_CLK_POLARITY[i], LAST_RD_CLK[i], RD_CLK[i])) begin + // $display("Read from %s: addr=%b data=%b", MEMID, RD_ADDR[i*ABITS +: ABITS], memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]); + RD_DATA[i*WIDTH +: WIDTH] <= memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]; + + for (j = 0; j < WR_PORTS; j = j+1) begin + if (RD_TRANSPARENCY_MASK[i*WR_PORTS + j] && port_active(WR_CLK_ENABLE[j], WR_CLK_POLARITY[j], LAST_WR_CLK[j], WR_CLK[j]) && RD_ADDR[i*ABITS +: ABITS] == WR_ADDR[j*ABITS +: ABITS]) + for (k = 0; k < WIDTH; k = k+1) + if (WR_EN[j*WIDTH+k]) + RD_DATA[i*WIDTH+k] <= WR_DATA[j*WIDTH+k]; + if (RD_COLLISION_X_MASK[i*WR_PORTS + j] && port_active(WR_CLK_ENABLE[j], WR_CLK_POLARITY[j], LAST_WR_CLK[j], WR_CLK[j]) && RD_ADDR[i*ABITS +: ABITS] == WR_ADDR[j*ABITS +: ABITS]) + for (k = 0; k < WIDTH; k = k+1) + if (WR_EN[j*WIDTH+k]) + RD_DATA[i*WIDTH+k] <= 1'bx; + end + end + end + + for (i = 0; i < WR_PORTS; i = i+1) begin + if (port_active(WR_CLK_ENABLE[i], WR_CLK_POLARITY[i], LAST_WR_CLK[i], WR_CLK[i])) + for (j = 0; j < WIDTH; j = j+1) + if (WR_EN[i*WIDTH+j]) begin + // $display("Write to %s: addr=%b data=%b", MEMID, WR_ADDR[i*ABITS +: ABITS], WR_DATA[i*WIDTH+j]); + memory[WR_ADDR[i*ABITS +: ABITS] - OFFSET][j] = WR_DATA[i*WIDTH+j]; + end + end + + for (i = 0; i < RD_PORTS; i = i+1) begin + if (!RD_CLK_ENABLE[i]) begin + // $display("Combinatorial read from %s: addr=%b data=%b", MEMID, RD_ADDR[i*ABITS +: ABITS], memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]); + RD_DATA[i*WIDTH +: WIDTH] <= memory[RD_ADDR[i*ABITS +: ABITS] - OFFSET]; + end + end + + for (i = 0; i < RD_PORTS; i = i+1) begin + if (RD_SRST[i] && port_active(RD_CLK_ENABLE[i], RD_CLK_POLARITY[i], LAST_RD_CLK[i], RD_CLK[i]) && (RD_EN[i] || !RD_CE_OVER_SRST[i])) + RD_DATA[i*WIDTH +: WIDTH] <= RD_SRST_VALUE[i*WIDTH +: WIDTH]; + if (RD_ARST[i]) + RD_DATA[i*WIDTH +: WIDTH] <= RD_ARST_VALUE[i*WIDTH +: WIDTH]; + end + + LAST_RD_CLK <= RD_CLK; + LAST_WR_CLK <= WR_CLK; +end + +endmodule + +`endif + +// -------------------------------------------------------- diff --git a/resources/netlist/resources/kernel/share/techmap.v b/resources/netlist/resources/kernel/share/techmap.v new file mode 100644 index 0000000..91d385b --- /dev/null +++ b/resources/netlist/resources/kernel/share/techmap.v @@ -0,0 +1,648 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * --- + * + * The internal logic cell technology mapper. + * + * This Verilog library contains the mapping of internal cells (e.g. $not with + * variable bit width) to the internal logic cells (such as the single bit $_NOT_ + * gate). Usually this logic network is then mapped to the actual technology + * using e.g. the "abc" pass. + * + * Note that this library does not map $mem cells. They must be mapped to logic + * and $dff cells using the "memory_map" pass first. (Or map it to custom cells, + * which is of course highly recommended for larger memories.) + * + */ + +`define MIN(_a, _b) ((_a) < (_b) ? (_a) : (_b)) +`define MAX(_a, _b) ((_a) > (_b) ? (_a) : (_b)) + + +// -------------------------------------------------------- +// Use simplemap for trivial cell types +// -------------------------------------------------------- + +(* techmap_simplemap *) +(* techmap_celltype = "$not $and $or $xor $xnor" *) +module _90_simplemap_bool_ops; +endmodule + +(* techmap_simplemap *) +(* techmap_celltype = "$reduce_and $reduce_or $reduce_xor $reduce_xnor $reduce_bool" *) +module _90_simplemap_reduce_ops; +endmodule + +(* techmap_simplemap *) +(* techmap_celltype = "$logic_not $logic_and $logic_or" *) +module _90_simplemap_logic_ops; +endmodule + +(* techmap_simplemap *) +(* techmap_celltype = "$eq $eqx $ne $nex" *) +module _90_simplemap_compare_ops; +endmodule + +(* techmap_simplemap *) +(* techmap_celltype = "$pos $slice $concat $mux $tribuf $bmux" *) +module _90_simplemap_various; +endmodule + +(* techmap_simplemap *) +(* techmap_celltype = "$sr $ff $dff $dffe $adff $adffe $aldff $aldffe $sdff $sdffe $sdffce $dffsr $dffsre $dlatch $adlatch $dlatchsr" *) +module _90_simplemap_registers; +endmodule + + +// -------------------------------------------------------- +// Shift operators +// -------------------------------------------------------- + +(* techmap_celltype = "$shr $shl $sshl $sshr" *) +module _90_shift_ops_shr_shl_sshl_sshr (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + parameter _TECHMAP_CELLTYPE_ = ""; + localparam shift_left = _TECHMAP_CELLTYPE_ == "$shl" || _TECHMAP_CELLTYPE_ == "$sshl"; + localparam sign_extend = A_SIGNED && _TECHMAP_CELLTYPE_ == "$sshr"; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + localparam WIDTH = `MAX(A_WIDTH, Y_WIDTH); + localparam BB_WIDTH = `MIN($clog2(shift_left ? Y_WIDTH : A_SIGNED ? WIDTH : A_WIDTH) + 1, B_WIDTH); + + wire [1023:0] _TECHMAP_DO_00_ = "proc;;"; + wire [1023:0] _TECHMAP_DO_01_ = "RECURSION; CONSTMAP; opt_muxtree; opt_expr -mux_undef -mux_bool -fine;;;"; + + integer i; + (* force_downto *) + reg [WIDTH-1:0] buffer; + reg overflow; + + always @* begin + overflow = B_WIDTH > BB_WIDTH ? |B[B_WIDTH-1:BB_WIDTH] : 1'b0; + buffer = overflow ? {WIDTH{sign_extend ? A[A_WIDTH-1] : 1'b0}} : {{WIDTH-A_WIDTH{A_SIGNED ? A[A_WIDTH-1] : 1'b0}}, A}; + + for (i = 0; i < BB_WIDTH; i = i+1) + if (B[i]) begin + if (shift_left) + buffer = {buffer, (2**i)'b0}; + else if (2**i < WIDTH) + buffer = {{2**i{sign_extend ? buffer[WIDTH-1] : 1'b0}}, buffer[WIDTH-1 : 2**i]}; + else + buffer = {WIDTH{sign_extend ? buffer[WIDTH-1] : 1'b0}}; + end + end + + assign Y = buffer; +endmodule + +(* techmap_celltype = "$shift $shiftx" *) +module _90_shift_shiftx (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + parameter _TECHMAP_CELLTYPE_ = ""; + parameter [B_WIDTH-1:0] _TECHMAP_CONSTMSK_B_ = 0; + parameter [B_WIDTH-1:0] _TECHMAP_CONSTVAL_B_ = 0; + + localparam extbit = _TECHMAP_CELLTYPE_ == "$shift" ? 1'b0 : 1'bx; + wire a_padding = _TECHMAP_CELLTYPE_ == "$shiftx" ? extbit : (A_SIGNED ? A[A_WIDTH-1] : 1'b0); + + localparam BB_WIDTH = `MIN($clog2(`MAX(A_WIDTH, Y_WIDTH)) + (B_SIGNED ? 2 : 1), B_WIDTH); + localparam WIDTH = `MAX(A_WIDTH, Y_WIDTH) + (B_SIGNED ? 2**(BB_WIDTH-1) : 0); + + wire [1023:0] _TECHMAP_DO_00_ = "proc;;"; + wire [1023:0] _TECHMAP_DO_01_ = "CONSTMAP; opt_muxtree; opt_expr -mux_undef -mux_bool -fine;;;"; + + integer i; + (* force_downto *) + reg [WIDTH-1:0] buffer; + reg overflow; + + always @* begin + overflow = 0; + buffer = {WIDTH{extbit}}; + buffer[Y_WIDTH-1:0] = {Y_WIDTH{a_padding}}; + buffer[A_WIDTH-1:0] = A; + + if (B_WIDTH > BB_WIDTH) begin + if (B_SIGNED) begin + for (i = BB_WIDTH; i < B_WIDTH; i = i+1) + if (B[i] != B[BB_WIDTH-1]) + overflow = 1; + end else + overflow = |B[B_WIDTH-1:BB_WIDTH]; + if (overflow) + buffer = {WIDTH{extbit}}; + end + + if (B_SIGNED && B[BB_WIDTH-1]) + buffer = {buffer, {2**(BB_WIDTH-1){extbit}}}; + + for (i = 0; i < (B_SIGNED ? BB_WIDTH-1 : BB_WIDTH); i = i+1) + if (B[i]) begin + if (2**i < WIDTH) + buffer = {{2**i{extbit}}, buffer[WIDTH-1 : 2**i]}; + else + buffer = {WIDTH{extbit}}; + end + end + assign Y = buffer; +endmodule + + +// -------------------------------------------------------- +// Arithmetic operators +// -------------------------------------------------------- + +(* techmap_celltype = "$fa" *) +module _90_fa (A, B, C, X, Y); + parameter WIDTH = 1; + + (* force_downto *) + input [WIDTH-1:0] A, B, C; + (* force_downto *) + output [WIDTH-1:0] X, Y; + + (* force_downto *) + wire [WIDTH-1:0] t1, t2, t3; + + assign t1 = A ^ B, t2 = A & B, t3 = C & t1; + assign Y = t1 ^ C, X = t2 | t3; +endmodule + +(* techmap_celltype = "$lcu" *) +module _90_lcu (P, G, CI, CO); + parameter WIDTH = 2; + + (* force_downto *) + input [WIDTH-1:0] P, G; + input CI; + + (* force_downto *) + output [WIDTH-1:0] CO; + + integer i, j; + (* force_downto *) + reg [WIDTH-1:0] p, g; + + wire [1023:0] _TECHMAP_DO_ = "proc; opt -fast"; + + always @* begin + p = P; + g = G; + + // in almost all cases CI will be constant zero + g[0] = g[0] | (p[0] & CI); + + // [[CITE]] Brent Kung Adder + // R. P. Brent and H. T. Kung, "A Regular Layout for Parallel Adders", + // IEEE Transaction on Computers, Vol. C-31, No. 3, p. 260-264, March, 1982 + + // Main tree + for (i = 1; i <= $clog2(WIDTH); i = i+1) begin + for (j = 2**i - 1; j < WIDTH; j = j + 2**i) begin + g[j] = g[j] | p[j] & g[j - 2**(i-1)]; + p[j] = p[j] & p[j - 2**(i-1)]; + end + end + + // Inverse tree + for (i = $clog2(WIDTH); i > 0; i = i-1) begin + for (j = 2**i + 2**(i-1) - 1; j < WIDTH; j = j + 2**i) begin + g[j] = g[j] | p[j] & g[j - 2**(i-1)]; + p[j] = p[j] & p[j - 2**(i-1)]; + end + end + end + + assign CO = g; +endmodule + +(* techmap_celltype = "$alu" *) +module _90_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + \$lcu #(.WIDTH(Y_WIDTH)) lcu (.P(X), .G(AA & BB), .CI(CI), .CO(CO)); + + assign X = AA ^ BB; + assign Y = X ^ {CO, CI}; +endmodule + +(* techmap_maccmap *) +(* techmap_celltype = "$macc" *) +module _90_macc; +endmodule + +(* techmap_wrap = "alumacc" *) +(* techmap_celltype = "$lt $le $ge $gt $add $sub $neg $mul" *) +module _90_alumacc; +endmodule + + +// -------------------------------------------------------- +// Divide and Modulo +// -------------------------------------------------------- + +module \$__div_mod_u (A, B, Y, R); + parameter WIDTH = 1; + + (* force_downto *) + input [WIDTH-1:0] A, B; + (* force_downto *) + output [WIDTH-1:0] Y, R; + + (* force_downto *) + wire [WIDTH*WIDTH-1:0] chaindata; + assign R = chaindata[WIDTH*WIDTH-1:WIDTH*(WIDTH-1)]; + + genvar i; + generate begin + for (i = 0; i < WIDTH; i=i+1) begin:stage + (* force_downto *) + wire [WIDTH-1:0] stage_in; + + if (i == 0) begin:cp + assign stage_in = A; + end else begin:cp + assign stage_in = chaindata[i*WIDTH-1:(i-1)*WIDTH]; + end + + assign Y[WIDTH-(i+1)] = stage_in >= {B, {WIDTH-(i+1){1'b0}}}; + assign chaindata[(i+1)*WIDTH-1:i*WIDTH] = Y[WIDTH-(i+1)] ? stage_in - {B, {WIDTH-(i+1){1'b0}}} : stage_in; + end + end endgenerate +endmodule + +// truncating signed division/modulo +module \$__div_mod_trunc (A, B, Y, R); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + localparam WIDTH = + A_WIDTH >= B_WIDTH && A_WIDTH >= Y_WIDTH ? A_WIDTH : + B_WIDTH >= A_WIDTH && B_WIDTH >= Y_WIDTH ? B_WIDTH : Y_WIDTH; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y, R; + + (* force_downto *) + wire [WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [WIDTH-1:0] A_buf_u, B_buf_u, Y_u, R_u; + assign A_buf_u = A_SIGNED && A_buf[WIDTH-1] ? -A_buf : A_buf; + assign B_buf_u = B_SIGNED && B_buf[WIDTH-1] ? -B_buf : B_buf; + + \$__div_mod_u #( + .WIDTH(WIDTH) + ) div_mod_u ( + .A(A_buf_u), + .B(B_buf_u), + .Y(Y_u), + .R(R_u) + ); + + assign Y = A_SIGNED && B_SIGNED && (A_buf[WIDTH-1] != B_buf[WIDTH-1]) ? -Y_u : Y_u; + assign R = A_SIGNED && B_SIGNED && A_buf[WIDTH-1] ? -R_u : R_u; +endmodule + +(* techmap_celltype = "$div" *) +module _90_div (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + \$__div_mod_trunc #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) div_mod ( + .A(A), + .B(B), + .Y(Y) + ); +endmodule + +(* techmap_celltype = "$mod" *) +module _90_mod (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + \$__div_mod_trunc #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) div_mod ( + .A(A), + .B(B), + .R(Y) + ); +endmodule + +// flooring signed division/modulo +module \$__div_mod_floor (A, B, Y, R); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + localparam WIDTH = + A_WIDTH >= B_WIDTH && A_WIDTH >= Y_WIDTH ? A_WIDTH : + B_WIDTH >= A_WIDTH && B_WIDTH >= Y_WIDTH ? B_WIDTH : Y_WIDTH; + + input [A_WIDTH-1:0] A; + input [B_WIDTH-1:0] B; + output [Y_WIDTH-1:0] Y, R; + + wire [WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(WIDTH)) B_conv (.A(B), .Y(B_buf)); + + wire [WIDTH-1:0] A_buf_u, B_buf_u, Y_u, R_u, R_s; + assign A_buf_u = A_SIGNED && A_buf[WIDTH-1] ? -A_buf : A_buf; + assign B_buf_u = B_SIGNED && B_buf[WIDTH-1] ? -B_buf : B_buf; + + \$__div_mod_u #( + .WIDTH(WIDTH) + ) div_mod_u ( + .A(A_buf_u), + .B(B_buf_u), + .Y(Y_u), + .R(R_u) + ); + + // For negative results, if there was a remainder, subtract one to turn + // the round towards 0 into a round towards -inf + assign Y = A_SIGNED && B_SIGNED && (A_buf[WIDTH-1] != B_buf[WIDTH-1]) ? (R_u == 0 ? -Y_u : -Y_u-1) : Y_u; + + // truncating modulo + assign R_s = A_SIGNED && B_SIGNED && A_buf[WIDTH-1] ? -R_u : R_u; + // Flooring modulo differs from truncating modulo only if it is nonzero and + // A and B have different signs - then `floor - trunc = B` + assign R = (R_s != 0) && A_SIGNED && B_SIGNED && (A_buf[WIDTH-1] != B_buf[WIDTH-1]) ? $signed(B_buf) + $signed(R_s) : R_s; +endmodule + +(* techmap_celltype = "$divfloor" *) +module _90_divfloor (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + \$__div_mod_floor #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) div_mod ( + .A(A), + .B(B), + .Y(Y) + ); +endmodule + +(* techmap_celltype = "$modfloor" *) +module _90_modfloor (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + \$__div_mod_floor #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) div_mod ( + .A(A), + .B(B), + .R(Y) + ); +endmodule + + +// -------------------------------------------------------- +// Power +// -------------------------------------------------------- + +(* techmap_celltype = "$pow" *) +module _90_pow (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + wire _TECHMAP_FAIL_ = 1; +endmodule + + +// -------------------------------------------------------- +// Parallel Multiplexers +// -------------------------------------------------------- + +(* techmap_celltype = "$pmux" *) +module _90_pmux (A, B, S, Y); + parameter WIDTH = 1; + parameter S_WIDTH = 1; + + (* force_downto *) + input [WIDTH-1:0] A; + (* force_downto *) + input [WIDTH*S_WIDTH-1:0] B; + (* force_downto *) + input [S_WIDTH-1:0] S; + (* force_downto *) + output [WIDTH-1:0] Y; + + (* force_downto *) + wire [WIDTH-1:0] Y_B; + + genvar i, j; + generate + (* force_downto *) + wire [WIDTH*S_WIDTH-1:0] B_AND_S; + for (i = 0; i < S_WIDTH; i = i + 1) begin:B_AND + assign B_AND_S[WIDTH*(i+1)-1:WIDTH*i] = B[WIDTH*(i+1)-1:WIDTH*i] & {WIDTH{S[i]}}; + end:B_AND + for (i = 0; i < WIDTH; i = i + 1) begin:B_OR + (* force_downto *) + wire [S_WIDTH-1:0] B_AND_BITS; + for (j = 0; j < S_WIDTH; j = j + 1) begin:B_AND_BITS_COLLECT + assign B_AND_BITS[j] = B_AND_S[WIDTH*j+i]; + end:B_AND_BITS_COLLECT + assign Y_B[i] = |B_AND_BITS; + end:B_OR + endgenerate + + assign Y = |S ? Y_B : A; +endmodule + +// -------------------------------------------------------- +// Demultiplexers +// -------------------------------------------------------- + +(* techmap_celltype = "$demux" *) +module _90_demux (A, S, Y); + parameter WIDTH = 1; + parameter S_WIDTH = 1; + + (* force_downto *) + input [WIDTH-1:0] A; + (* force_downto *) + input [S_WIDTH-1:0] S; + (* force_downto *) + output [(WIDTH << S_WIDTH)-1:0] Y; + + generate + if (S_WIDTH == 0) begin + assign Y = A; + end else if (S_WIDTH == 1) begin + assign Y[0+:WIDTH] = S ? 0 : A; + assign Y[WIDTH+:WIDTH] = S ? A : 0; + end else begin + localparam SPLIT = S_WIDTH / 2; + wire [(1 << (S_WIDTH-SPLIT))-1:0] YH; + wire [(1 << SPLIT)-1:0] YL; + $demux #(.WIDTH(1), .S_WIDTH(SPLIT)) lo (.A(1'b1), .S(S[SPLIT-1:0]), .Y(YL)); + $demux #(.WIDTH(1), .S_WIDTH(S_WIDTH-SPLIT)) hi (.A(1'b1), .S(S[S_WIDTH-1:SPLIT]), .Y(YH)); + genvar i; + for (i = 0; i < (1 << S_WIDTH); i = i + 1) begin + localparam [S_WIDTH-1:0] IDX = i; + assign Y[i*WIDTH+:WIDTH] = (YL[IDX[SPLIT-1:0]] & YH[IDX[S_WIDTH-1:SPLIT]]) ? A : 0; + end + end + endgenerate +endmodule + + +// -------------------------------------------------------- +// LUTs +// -------------------------------------------------------- + +`ifndef NOLUT +(* techmap_simplemap *) +(* techmap_celltype = "$lut $sop" *) +module _90_lut; +endmodule +`endif + diff --git a/resources/netlist/resources/kernel/share/xilinx/abc9_model.v b/resources/netlist/resources/kernel/share/xilinx/abc9_model.v new file mode 100644 index 0000000..3958a2b --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/abc9_model.v @@ -0,0 +1,39 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * 2019 Eddie Hung + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// ============================================================================ + +// Box containing MUXF7.[AB] + MUXF8, +// Necessary to make these an atomic unit so that +// ABC cannot optimise just one of the MUXF7 away +// and expect to save on its delay +(* abc9_box, lib_whitebox *) +module \$__XILINX_MUXF78 (output O, input I0, I1, I2, I3, S0, S1); + assign O = S1 ? (S0 ? I3 : I2) + : (S0 ? I1 : I0); + specify + (I0 => O) = 294; + (I1 => O) = 297; + (I2 => O) = 311; + (I3 => O) = 317; + (S0 => O) = 390; + (S1 => O) = 273; + endspecify +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/arith_map.v b/resources/netlist/resources/kernel/share/xilinx/arith_map.v new file mode 100644 index 0000000..1282f56 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/arith_map.v @@ -0,0 +1,202 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// ============================================================================ +// LCU + +(* techmap_celltype = "$lcu" *) +module _80_xilinx_lcu (P, G, CI, CO); + parameter WIDTH = 2; + + (* force_downto *) + input [WIDTH-1:0] P, G; + input CI; + + (* force_downto *) + output [WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = WIDTH <= 2; + + genvar i; + +generate if (`LUT_SIZE == 4) begin + + (* force_downto *) + wire [WIDTH-1:0] C = {CO, CI}; + (* force_downto *) + wire [WIDTH-1:0] S = P & ~G; + + generate for (i = 0; i < WIDTH; i = i + 1) begin:slice + MUXCY muxcy ( + .CI(C[i]), + .DI(G[i]), + .S(S[i]), + .O(CO[i]) + ); + end endgenerate + +end else begin + + localparam CARRY4_COUNT = (WIDTH + 3) / 4; + localparam MAX_WIDTH = CARRY4_COUNT * 4; + localparam PAD_WIDTH = MAX_WIDTH - WIDTH; + + (* force_downto *) + wire [MAX_WIDTH-1:0] S = {{PAD_WIDTH{1'b0}}, P & ~G}; + (* force_downto *) + wire [MAX_WIDTH-1:0] GG = {{PAD_WIDTH{1'b0}}, G}; + (* force_downto *) + wire [MAX_WIDTH-1:0] C; + assign CO = C; + + generate for (i = 0; i < CARRY4_COUNT; i = i + 1) begin:slice + if (i == 0) begin + CARRY4 carry4 + ( + .CYINIT(CI), + .CI (1'd0), + .DI (GG[i*4 +: 4]), + .S (S [i*4 +: 4]), + .CO (C [i*4 +: 4]), + ); + end else begin + CARRY4 carry4 + ( + .CYINIT(1'd0), + .CI (C [i*4 - 1]), + .DI (GG[i*4 +: 4]), + .S (S [i*4 +: 4]), + .CO (C [i*4 +: 4]), + ); + end + end endgenerate +end endgenerate + +endmodule + + +// ============================================================================ +// ALU + +(* techmap_celltype = "$alu" *) +module _80_xilinx_alu (A, B, CI, BI, X, Y, CO); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + parameter _TECHMAP_CONSTVAL_CI_ = 0; + parameter _TECHMAP_CONSTMSK_CI_ = 0; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] X, Y; + + input CI, BI; + (* force_downto *) + output [Y_WIDTH-1:0] CO; + + wire _TECHMAP_FAIL_ = Y_WIDTH <= 2; + + (* force_downto *) + wire [Y_WIDTH-1:0] A_buf, B_buf; + \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf)); + \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf)); + + (* force_downto *) + wire [Y_WIDTH-1:0] AA = A_buf; + (* force_downto *) + wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf; + + genvar i; + +generate if (`LUT_SIZE == 4) begin + + (* force_downto *) + wire [Y_WIDTH-1:0] C = {CO, CI}; + (* force_downto *) + wire [Y_WIDTH-1:0] S = {AA ^ BB}; + + genvar i; + generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice + MUXCY muxcy ( + .CI(C[i]), + .DI(AA[i]), + .S(S[i]), + .O(CO[i]) + ); + XORCY xorcy ( + .CI(C[i]), + .LI(S[i]), + .O(Y[i]) + ); + end endgenerate + + assign X = S; + +end else begin + + localparam CARRY4_COUNT = (Y_WIDTH + 3) / 4; + localparam MAX_WIDTH = CARRY4_COUNT * 4; + localparam PAD_WIDTH = MAX_WIDTH - Y_WIDTH; + + (* force_downto *) + wire [MAX_WIDTH-1:0] S = {{PAD_WIDTH{1'b0}}, AA ^ BB}; + (* force_downto *) + wire [MAX_WIDTH-1:0] DI = {{PAD_WIDTH{1'b0}}, AA}; + + (* force_downto *) + wire [MAX_WIDTH-1:0] O; + (* force_downto *) + wire [MAX_WIDTH-1:0] C; + assign Y = O, CO = C; + + genvar i; + generate for (i = 0; i < CARRY4_COUNT; i = i + 1) begin:slice + if (i == 0) begin + CARRY4 carry4 + ( + .CYINIT(CI), + .CI (1'd0), + .DI (DI[i*4 +: 4]), + .S (S [i*4 +: 4]), + .O (O [i*4 +: 4]), + .CO (C [i*4 +: 4]) + ); + end else begin + CARRY4 carry4 + ( + .CYINIT(1'd0), + .CI (C [i*4 - 1]), + .DI (DI[i*4 +: 4]), + .S (S [i*4 +: 4]), + .O (O [i*4 +: 4]), + .CO (C [i*4 +: 4]) + ); + end + end endgenerate + + assign X = S; + +end endgenerate +endmodule + diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_defs.vh b/resources/netlist/resources/kernel/share/xilinx/brams_defs.vh new file mode 100644 index 0000000..69fe5d7 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_defs.vh @@ -0,0 +1,561 @@ +`define PARAMS_INIT_9 \ + .INIT_00(slice_init('h00)), \ + .INIT_01(slice_init('h01)), \ + .INIT_02(slice_init('h02)), \ + .INIT_03(slice_init('h03)), \ + .INIT_04(slice_init('h04)), \ + .INIT_05(slice_init('h05)), \ + .INIT_06(slice_init('h06)), \ + .INIT_07(slice_init('h07)), \ + .INIT_08(slice_init('h08)), \ + .INIT_09(slice_init('h09)), \ + .INIT_0A(slice_init('h0a)), \ + .INIT_0B(slice_init('h0b)), \ + .INIT_0C(slice_init('h0c)), \ + .INIT_0D(slice_init('h0d)), \ + .INIT_0E(slice_init('h0e)), \ + .INIT_0F(slice_init('h0f)), \ + .INIT_10(slice_init('h10)), \ + .INIT_11(slice_init('h11)), \ + .INIT_12(slice_init('h12)), \ + .INIT_13(slice_init('h13)), \ + .INIT_14(slice_init('h14)), \ + .INIT_15(slice_init('h15)), \ + .INIT_16(slice_init('h16)), \ + .INIT_17(slice_init('h17)), \ + .INIT_18(slice_init('h18)), \ + .INIT_19(slice_init('h19)), \ + .INIT_1A(slice_init('h1a)), \ + .INIT_1B(slice_init('h1b)), \ + .INIT_1C(slice_init('h1c)), \ + .INIT_1D(slice_init('h1d)), \ + .INIT_1E(slice_init('h1e)), \ + .INIT_1F(slice_init('h1f)), + +`define PARAMS_INITP_9 \ + .INITP_00(slice_initp('h00)), \ + .INITP_01(slice_initp('h01)), \ + .INITP_02(slice_initp('h02)), \ + .INITP_03(slice_initp('h03)), + +`define PARAMS_INIT_18 \ + .INIT_00(slice_init('h00)), \ + .INIT_01(slice_init('h01)), \ + .INIT_02(slice_init('h02)), \ + .INIT_03(slice_init('h03)), \ + .INIT_04(slice_init('h04)), \ + .INIT_05(slice_init('h05)), \ + .INIT_06(slice_init('h06)), \ + .INIT_07(slice_init('h07)), \ + .INIT_08(slice_init('h08)), \ + .INIT_09(slice_init('h09)), \ + .INIT_0A(slice_init('h0a)), \ + .INIT_0B(slice_init('h0b)), \ + .INIT_0C(slice_init('h0c)), \ + .INIT_0D(slice_init('h0d)), \ + .INIT_0E(slice_init('h0e)), \ + .INIT_0F(slice_init('h0f)), \ + .INIT_10(slice_init('h10)), \ + .INIT_11(slice_init('h11)), \ + .INIT_12(slice_init('h12)), \ + .INIT_13(slice_init('h13)), \ + .INIT_14(slice_init('h14)), \ + .INIT_15(slice_init('h15)), \ + .INIT_16(slice_init('h16)), \ + .INIT_17(slice_init('h17)), \ + .INIT_18(slice_init('h18)), \ + .INIT_19(slice_init('h19)), \ + .INIT_1A(slice_init('h1a)), \ + .INIT_1B(slice_init('h1b)), \ + .INIT_1C(slice_init('h1c)), \ + .INIT_1D(slice_init('h1d)), \ + .INIT_1E(slice_init('h1e)), \ + .INIT_1F(slice_init('h1f)), \ + .INIT_20(slice_init('h20)), \ + .INIT_21(slice_init('h21)), \ + .INIT_22(slice_init('h22)), \ + .INIT_23(slice_init('h23)), \ + .INIT_24(slice_init('h24)), \ + .INIT_25(slice_init('h25)), \ + .INIT_26(slice_init('h26)), \ + .INIT_27(slice_init('h27)), \ + .INIT_28(slice_init('h28)), \ + .INIT_29(slice_init('h29)), \ + .INIT_2A(slice_init('h2a)), \ + .INIT_2B(slice_init('h2b)), \ + .INIT_2C(slice_init('h2c)), \ + .INIT_2D(slice_init('h2d)), \ + .INIT_2E(slice_init('h2e)), \ + .INIT_2F(slice_init('h2f)), \ + .INIT_30(slice_init('h30)), \ + .INIT_31(slice_init('h31)), \ + .INIT_32(slice_init('h32)), \ + .INIT_33(slice_init('h33)), \ + .INIT_34(slice_init('h34)), \ + .INIT_35(slice_init('h35)), \ + .INIT_36(slice_init('h36)), \ + .INIT_37(slice_init('h37)), \ + .INIT_38(slice_init('h38)), \ + .INIT_39(slice_init('h39)), \ + .INIT_3A(slice_init('h3a)), \ + .INIT_3B(slice_init('h3b)), \ + .INIT_3C(slice_init('h3c)), \ + .INIT_3D(slice_init('h3d)), \ + .INIT_3E(slice_init('h3e)), \ + .INIT_3F(slice_init('h3f)), + +`define PARAMS_INIT_18_U \ + .INIT_00(slice_init('h40)), \ + .INIT_01(slice_init('h41)), \ + .INIT_02(slice_init('h42)), \ + .INIT_03(slice_init('h43)), \ + .INIT_04(slice_init('h44)), \ + .INIT_05(slice_init('h45)), \ + .INIT_06(slice_init('h46)), \ + .INIT_07(slice_init('h47)), \ + .INIT_08(slice_init('h48)), \ + .INIT_09(slice_init('h49)), \ + .INIT_0A(slice_init('h4a)), \ + .INIT_0B(slice_init('h4b)), \ + .INIT_0C(slice_init('h4c)), \ + .INIT_0D(slice_init('h4d)), \ + .INIT_0E(slice_init('h4e)), \ + .INIT_0F(slice_init('h4f)), \ + .INIT_10(slice_init('h50)), \ + .INIT_11(slice_init('h51)), \ + .INIT_12(slice_init('h52)), \ + .INIT_13(slice_init('h53)), \ + .INIT_14(slice_init('h54)), \ + .INIT_15(slice_init('h55)), \ + .INIT_16(slice_init('h56)), \ + .INIT_17(slice_init('h57)), \ + .INIT_18(slice_init('h58)), \ + .INIT_19(slice_init('h59)), \ + .INIT_1A(slice_init('h5a)), \ + .INIT_1B(slice_init('h5b)), \ + .INIT_1C(slice_init('h5c)), \ + .INIT_1D(slice_init('h5d)), \ + .INIT_1E(slice_init('h5e)), \ + .INIT_1F(slice_init('h5f)), \ + .INIT_20(slice_init('h60)), \ + .INIT_21(slice_init('h61)), \ + .INIT_22(slice_init('h62)), \ + .INIT_23(slice_init('h63)), \ + .INIT_24(slice_init('h64)), \ + .INIT_25(slice_init('h65)), \ + .INIT_26(slice_init('h66)), \ + .INIT_27(slice_init('h67)), \ + .INIT_28(slice_init('h68)), \ + .INIT_29(slice_init('h69)), \ + .INIT_2A(slice_init('h6a)), \ + .INIT_2B(slice_init('h6b)), \ + .INIT_2C(slice_init('h6c)), \ + .INIT_2D(slice_init('h6d)), \ + .INIT_2E(slice_init('h6e)), \ + .INIT_2F(slice_init('h6f)), \ + .INIT_30(slice_init('h70)), \ + .INIT_31(slice_init('h71)), \ + .INIT_32(slice_init('h72)), \ + .INIT_33(slice_init('h73)), \ + .INIT_34(slice_init('h74)), \ + .INIT_35(slice_init('h75)), \ + .INIT_36(slice_init('h76)), \ + .INIT_37(slice_init('h77)), \ + .INIT_38(slice_init('h78)), \ + .INIT_39(slice_init('h79)), \ + .INIT_3A(slice_init('h7a)), \ + .INIT_3B(slice_init('h7b)), \ + .INIT_3C(slice_init('h7c)), \ + .INIT_3D(slice_init('h7d)), \ + .INIT_3E(slice_init('h7e)), \ + .INIT_3F(slice_init('h7f)), + +`define PARAMS_INITP_18 \ + .INITP_00(slice_initp('h00)), \ + .INITP_01(slice_initp('h01)), \ + .INITP_02(slice_initp('h02)), \ + .INITP_03(slice_initp('h03)), \ + .INITP_04(slice_initp('h04)), \ + .INITP_05(slice_initp('h05)), \ + .INITP_06(slice_initp('h06)), \ + .INITP_07(slice_initp('h07)), + +`define PARAMS_INIT_36 \ + .INIT_00(slice_init('h00)), \ + .INIT_01(slice_init('h01)), \ + .INIT_02(slice_init('h02)), \ + .INIT_03(slice_init('h03)), \ + .INIT_04(slice_init('h04)), \ + .INIT_05(slice_init('h05)), \ + .INIT_06(slice_init('h06)), \ + .INIT_07(slice_init('h07)), \ + .INIT_08(slice_init('h08)), \ + .INIT_09(slice_init('h09)), \ + .INIT_0A(slice_init('h0a)), \ + .INIT_0B(slice_init('h0b)), \ + .INIT_0C(slice_init('h0c)), \ + .INIT_0D(slice_init('h0d)), \ + .INIT_0E(slice_init('h0e)), \ + .INIT_0F(slice_init('h0f)), \ + .INIT_10(slice_init('h10)), \ + .INIT_11(slice_init('h11)), \ + .INIT_12(slice_init('h12)), \ + .INIT_13(slice_init('h13)), \ + .INIT_14(slice_init('h14)), \ + .INIT_15(slice_init('h15)), \ + .INIT_16(slice_init('h16)), \ + .INIT_17(slice_init('h17)), \ + .INIT_18(slice_init('h18)), \ + .INIT_19(slice_init('h19)), \ + .INIT_1A(slice_init('h1a)), \ + .INIT_1B(slice_init('h1b)), \ + .INIT_1C(slice_init('h1c)), \ + .INIT_1D(slice_init('h1d)), \ + .INIT_1E(slice_init('h1e)), \ + .INIT_1F(slice_init('h1f)), \ + .INIT_20(slice_init('h20)), \ + .INIT_21(slice_init('h21)), \ + .INIT_22(slice_init('h22)), \ + .INIT_23(slice_init('h23)), \ + .INIT_24(slice_init('h24)), \ + .INIT_25(slice_init('h25)), \ + .INIT_26(slice_init('h26)), \ + .INIT_27(slice_init('h27)), \ + .INIT_28(slice_init('h28)), \ + .INIT_29(slice_init('h29)), \ + .INIT_2A(slice_init('h2a)), \ + .INIT_2B(slice_init('h2b)), \ + .INIT_2C(slice_init('h2c)), \ + .INIT_2D(slice_init('h2d)), \ + .INIT_2E(slice_init('h2e)), \ + .INIT_2F(slice_init('h2f)), \ + .INIT_30(slice_init('h30)), \ + .INIT_31(slice_init('h31)), \ + .INIT_32(slice_init('h32)), \ + .INIT_33(slice_init('h33)), \ + .INIT_34(slice_init('h34)), \ + .INIT_35(slice_init('h35)), \ + .INIT_36(slice_init('h36)), \ + .INIT_37(slice_init('h37)), \ + .INIT_38(slice_init('h38)), \ + .INIT_39(slice_init('h39)), \ + .INIT_3A(slice_init('h3a)), \ + .INIT_3B(slice_init('h3b)), \ + .INIT_3C(slice_init('h3c)), \ + .INIT_3D(slice_init('h3d)), \ + .INIT_3E(slice_init('h3e)), \ + .INIT_3F(slice_init('h3f)), \ + .INIT_40(slice_init('h40)), \ + .INIT_41(slice_init('h41)), \ + .INIT_42(slice_init('h42)), \ + .INIT_43(slice_init('h43)), \ + .INIT_44(slice_init('h44)), \ + .INIT_45(slice_init('h45)), \ + .INIT_46(slice_init('h46)), \ + .INIT_47(slice_init('h47)), \ + .INIT_48(slice_init('h48)), \ + .INIT_49(slice_init('h49)), \ + .INIT_4A(slice_init('h4a)), \ + .INIT_4B(slice_init('h4b)), \ + .INIT_4C(slice_init('h4c)), \ + .INIT_4D(slice_init('h4d)), \ + .INIT_4E(slice_init('h4e)), \ + .INIT_4F(slice_init('h4f)), \ + .INIT_50(slice_init('h50)), \ + .INIT_51(slice_init('h51)), \ + .INIT_52(slice_init('h52)), \ + .INIT_53(slice_init('h53)), \ + .INIT_54(slice_init('h54)), \ + .INIT_55(slice_init('h55)), \ + .INIT_56(slice_init('h56)), \ + .INIT_57(slice_init('h57)), \ + .INIT_58(slice_init('h58)), \ + .INIT_59(slice_init('h59)), \ + .INIT_5A(slice_init('h5a)), \ + .INIT_5B(slice_init('h5b)), \ + .INIT_5C(slice_init('h5c)), \ + .INIT_5D(slice_init('h5d)), \ + .INIT_5E(slice_init('h5e)), \ + .INIT_5F(slice_init('h5f)), \ + .INIT_60(slice_init('h60)), \ + .INIT_61(slice_init('h61)), \ + .INIT_62(slice_init('h62)), \ + .INIT_63(slice_init('h63)), \ + .INIT_64(slice_init('h64)), \ + .INIT_65(slice_init('h65)), \ + .INIT_66(slice_init('h66)), \ + .INIT_67(slice_init('h67)), \ + .INIT_68(slice_init('h68)), \ + .INIT_69(slice_init('h69)), \ + .INIT_6A(slice_init('h6a)), \ + .INIT_6B(slice_init('h6b)), \ + .INIT_6C(slice_init('h6c)), \ + .INIT_6D(slice_init('h6d)), \ + .INIT_6E(slice_init('h6e)), \ + .INIT_6F(slice_init('h6f)), \ + .INIT_70(slice_init('h70)), \ + .INIT_71(slice_init('h71)), \ + .INIT_72(slice_init('h72)), \ + .INIT_73(slice_init('h73)), \ + .INIT_74(slice_init('h74)), \ + .INIT_75(slice_init('h75)), \ + .INIT_76(slice_init('h76)), \ + .INIT_77(slice_init('h77)), \ + .INIT_78(slice_init('h78)), \ + .INIT_79(slice_init('h79)), \ + .INIT_7A(slice_init('h7a)), \ + .INIT_7B(slice_init('h7b)), \ + .INIT_7C(slice_init('h7c)), \ + .INIT_7D(slice_init('h7d)), \ + .INIT_7E(slice_init('h7e)), \ + .INIT_7F(slice_init('h7f)), + +`define PARAMS_INIT_36_U \ + .INIT_00(slice_init('h80)), \ + .INIT_01(slice_init('h81)), \ + .INIT_02(slice_init('h82)), \ + .INIT_03(slice_init('h83)), \ + .INIT_04(slice_init('h84)), \ + .INIT_05(slice_init('h85)), \ + .INIT_06(slice_init('h86)), \ + .INIT_07(slice_init('h87)), \ + .INIT_08(slice_init('h88)), \ + .INIT_09(slice_init('h89)), \ + .INIT_0A(slice_init('h8a)), \ + .INIT_0B(slice_init('h8b)), \ + .INIT_0C(slice_init('h8c)), \ + .INIT_0D(slice_init('h8d)), \ + .INIT_0E(slice_init('h8e)), \ + .INIT_0F(slice_init('h8f)), \ + .INIT_10(slice_init('h90)), \ + .INIT_11(slice_init('h91)), \ + .INIT_12(slice_init('h92)), \ + .INIT_13(slice_init('h93)), \ + .INIT_14(slice_init('h94)), \ + .INIT_15(slice_init('h95)), \ + .INIT_16(slice_init('h96)), \ + .INIT_17(slice_init('h97)), \ + .INIT_18(slice_init('h98)), \ + .INIT_19(slice_init('h99)), \ + .INIT_1A(slice_init('h9a)), \ + .INIT_1B(slice_init('h9b)), \ + .INIT_1C(slice_init('h9c)), \ + .INIT_1D(slice_init('h9d)), \ + .INIT_1E(slice_init('h9e)), \ + .INIT_1F(slice_init('h9f)), \ + .INIT_20(slice_init('ha0)), \ + .INIT_21(slice_init('ha1)), \ + .INIT_22(slice_init('ha2)), \ + .INIT_23(slice_init('ha3)), \ + .INIT_24(slice_init('ha4)), \ + .INIT_25(slice_init('ha5)), \ + .INIT_26(slice_init('ha6)), \ + .INIT_27(slice_init('ha7)), \ + .INIT_28(slice_init('ha8)), \ + .INIT_29(slice_init('ha9)), \ + .INIT_2A(slice_init('haa)), \ + .INIT_2B(slice_init('hab)), \ + .INIT_2C(slice_init('hac)), \ + .INIT_2D(slice_init('had)), \ + .INIT_2E(slice_init('hae)), \ + .INIT_2F(slice_init('haf)), \ + .INIT_30(slice_init('hb0)), \ + .INIT_31(slice_init('hb1)), \ + .INIT_32(slice_init('hb2)), \ + .INIT_33(slice_init('hb3)), \ + .INIT_34(slice_init('hb4)), \ + .INIT_35(slice_init('hb5)), \ + .INIT_36(slice_init('hb6)), \ + .INIT_37(slice_init('hb7)), \ + .INIT_38(slice_init('hb8)), \ + .INIT_39(slice_init('hb9)), \ + .INIT_3A(slice_init('hba)), \ + .INIT_3B(slice_init('hbb)), \ + .INIT_3C(slice_init('hbc)), \ + .INIT_3D(slice_init('hbd)), \ + .INIT_3E(slice_init('hbe)), \ + .INIT_3F(slice_init('hbf)), \ + .INIT_40(slice_init('hc0)), \ + .INIT_41(slice_init('hc1)), \ + .INIT_42(slice_init('hc2)), \ + .INIT_43(slice_init('hc3)), \ + .INIT_44(slice_init('hc4)), \ + .INIT_45(slice_init('hc5)), \ + .INIT_46(slice_init('hc6)), \ + .INIT_47(slice_init('hc7)), \ + .INIT_48(slice_init('hc8)), \ + .INIT_49(slice_init('hc9)), \ + .INIT_4A(slice_init('hca)), \ + .INIT_4B(slice_init('hcb)), \ + .INIT_4C(slice_init('hcc)), \ + .INIT_4D(slice_init('hcd)), \ + .INIT_4E(slice_init('hce)), \ + .INIT_4F(slice_init('hcf)), \ + .INIT_50(slice_init('hd0)), \ + .INIT_51(slice_init('hd1)), \ + .INIT_52(slice_init('hd2)), \ + .INIT_53(slice_init('hd3)), \ + .INIT_54(slice_init('hd4)), \ + .INIT_55(slice_init('hd5)), \ + .INIT_56(slice_init('hd6)), \ + .INIT_57(slice_init('hd7)), \ + .INIT_58(slice_init('hd8)), \ + .INIT_59(slice_init('hd9)), \ + .INIT_5A(slice_init('hda)), \ + .INIT_5B(slice_init('hdb)), \ + .INIT_5C(slice_init('hdc)), \ + .INIT_5D(slice_init('hdd)), \ + .INIT_5E(slice_init('hde)), \ + .INIT_5F(slice_init('hdf)), \ + .INIT_60(slice_init('he0)), \ + .INIT_61(slice_init('he1)), \ + .INIT_62(slice_init('he2)), \ + .INIT_63(slice_init('he3)), \ + .INIT_64(slice_init('he4)), \ + .INIT_65(slice_init('he5)), \ + .INIT_66(slice_init('he6)), \ + .INIT_67(slice_init('he7)), \ + .INIT_68(slice_init('he8)), \ + .INIT_69(slice_init('he9)), \ + .INIT_6A(slice_init('hea)), \ + .INIT_6B(slice_init('heb)), \ + .INIT_6C(slice_init('hec)), \ + .INIT_6D(slice_init('hed)), \ + .INIT_6E(slice_init('hee)), \ + .INIT_6F(slice_init('hef)), \ + .INIT_70(slice_init('hf0)), \ + .INIT_71(slice_init('hf1)), \ + .INIT_72(slice_init('hf2)), \ + .INIT_73(slice_init('hf3)), \ + .INIT_74(slice_init('hf4)), \ + .INIT_75(slice_init('hf5)), \ + .INIT_76(slice_init('hf6)), \ + .INIT_77(slice_init('hf7)), \ + .INIT_78(slice_init('hf8)), \ + .INIT_79(slice_init('hf9)), \ + .INIT_7A(slice_init('hfa)), \ + .INIT_7B(slice_init('hfb)), \ + .INIT_7C(slice_init('hfc)), \ + .INIT_7D(slice_init('hfd)), \ + .INIT_7E(slice_init('hfe)), \ + .INIT_7F(slice_init('hff)), + +`define PARAMS_INITP_36 \ + .INITP_00(slice_initp('h00)), \ + .INITP_01(slice_initp('h01)), \ + .INITP_02(slice_initp('h02)), \ + .INITP_03(slice_initp('h03)), \ + .INITP_04(slice_initp('h04)), \ + .INITP_05(slice_initp('h05)), \ + .INITP_06(slice_initp('h06)), \ + .INITP_07(slice_initp('h07)), \ + .INITP_08(slice_initp('h08)), \ + .INITP_09(slice_initp('h09)), \ + .INITP_0A(slice_initp('h0a)), \ + .INITP_0B(slice_initp('h0b)), \ + .INITP_0C(slice_initp('h0c)), \ + .INITP_0D(slice_initp('h0d)), \ + .INITP_0E(slice_initp('h0e)), \ + .INITP_0F(slice_initp('h0f)), + +`define MAKE_DO(do, dop, rdata) \ + wire [63:0] do; \ + wire [7:0] dop; \ + assign rdata = { \ + dop[7], \ + do[63:56], \ + dop[6], \ + do[55:48], \ + dop[5], \ + do[47:40], \ + dop[4], \ + do[39:32], \ + dop[3], \ + do[31:24], \ + dop[2], \ + do[23:16], \ + dop[1], \ + do[15:8], \ + dop[0], \ + do[7:0] \ + }; + +`define MAKE_DI(di, dip, wdata) \ + wire [63:0] di; \ + wire [7:0] dip; \ + assign { \ + dip[7], \ + di[63:56], \ + dip[6], \ + di[55:48], \ + dip[5], \ + di[47:40], \ + dip[4], \ + di[39:32], \ + dip[3], \ + di[31:24], \ + dip[2], \ + di[23:16], \ + dip[1], \ + di[15:8], \ + dip[0], \ + di[7:0] \ + } = wdata; + +function [71:0] ival; + input integer width; + input [71:0] val; + if (width == 72) + ival = { + val[71], + val[62], + val[53], + val[44], + val[35], + val[26], + val[17], + val[8], + val[70:63], + val[61:54], + val[52:45], + val[43:36], + val[34:27], + val[25:18], + val[16:9], + val[7:0] + }; + else if (width == 36) + ival = { + val[35], + val[26], + val[17], + val[8], + val[34:27], + val[25:18], + val[16:9], + val[7:0] + }; + else if (width == 18) + ival = { + val[17], + val[8], + val[16:9], + val[7:0] + }; + else + ival = val; +endfunction + +function [255:0] slice_init; + input integer idx; + integer i; + for (i = 0; i < 32; i = i + 1) + slice_init[i*8+:8] = INIT[(idx * 32 + i)*9+:8]; +endfunction + +function [255:0] slice_initp; + input integer idx; + integer i; + for (i = 0; i < 256; i = i + 1) + slice_initp[i] = INIT[(idx * 256 + i)*9+8]; +endfunction diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc2v.txt b/resources/netlist/resources/kernel/share/xilinx/brams_xc2v.txt new file mode 100644 index 0000000..562148c --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc2v.txt @@ -0,0 +1,33 @@ +# Block RAMs for Virtex 2, Spartan 3, Spartan 3E, Spartan 3A(N) +# The corresponding mapping file is brams_xc2v_map.v + +ram block $__XILINX_BLOCKRAM_ { + abits 14; + widths 1 2 4 9 18 36 per_port; + ifdef HAS_BE { + option "USE_BE" 1 byte 9; + } + cost 129; + init any; + port srsw "A" "B" { + option "USE_BE" 0 width tied; + ifdef HAS_BE { + option "USE_BE" 1 width tied 9 18 36; + } + clock posedge; + clken; + rdsrst any gated_clken; + rdinit any; + portoption "WRITE_MODE" "NO_CHANGE" { + rdwr no_change; + } + portoption "WRITE_MODE" "WRITE_FIRST" { + rdwr new_only; + } + portoption "WRITE_MODE" "READ_FIRST" { + rdwr old; + wrtrans all old; + } + optional; + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc2v_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xc2v_map.v new file mode 100644 index 0000000..a82feff --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc2v_map.v @@ -0,0 +1,532 @@ +module $__XILINX_BLOCKRAM_ (...); + +parameter INIT = 0; +parameter OPTION_USE_BE = 0; + +parameter PORT_A_WIDTH = 1; +parameter PORT_A_WR_EN_WIDTH = 1; +parameter PORT_A_USED = 1; +parameter PORT_A_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_A_RD_INIT_VALUE = 0; +parameter PORT_A_RD_SRST_VALUE = 0; + +parameter PORT_B_WIDTH = 1; +parameter PORT_B_WR_EN_WIDTH = 1; +parameter PORT_B_USED = 0; +parameter PORT_B_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_B_RD_INIT_VALUE = 0; +parameter PORT_B_RD_SRST_VALUE = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [13:0] PORT_A_ADDR; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [13:0] PORT_B_ADDR; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_DP \ + `PARAMS_INIT_18 \ + .WRITE_MODE_A(PORT_A_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_B_OPTION_WRITE_MODE), \ + .SRVAL_A(SRVAL_A), \ + .SRVAL_B(SRVAL_B), \ + .INIT_A(INIT_A), \ + .INIT_B(INIT_B), + +`define PARAMS_DP_SWAP \ + `PARAMS_INIT_18 \ + .WRITE_MODE_A(PORT_B_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_A_OPTION_WRITE_MODE), \ + .SRVAL_A(SRVAL_B), \ + .SRVAL_B(SRVAL_A), \ + .INIT_A(INIT_B), \ + .INIT_B(INIT_A), + +`define PARAMS_SP \ + `PARAMS_INIT_18 \ + .WRITE_MODE(PORT_A_OPTION_WRITE_MODE), \ + .SRVAL(SRVAL_A), \ + .INIT(INIT_A), + +`define PORTS_DP(addr_slice_a, addr_slice_b) \ + .CLKA(PORT_A_CLK), \ + .ENA(PORT_A_CLK_EN), \ + .WEA(PORT_A_WR_EN), \ + .SSRA(PORT_A_RD_SRST), \ + .ADDRA(PORT_A_ADDR addr_slice_a), \ + .DOA(DO_A), \ + .DIA(DI_A), \ + .CLKB(PORT_B_CLK), \ + .ENB(PORT_B_CLK_EN), \ + .WEB(PORT_B_WR_EN), \ + .SSRB(PORT_B_RD_SRST), \ + .ADDRB(PORT_B_ADDR addr_slice_b), \ + .DOB(DO_B), \ + .DIB(DI_B), + +`define PORTS_DP_SWAP(addr_slice_a, addr_slice_b) \ + .CLKB(PORT_A_CLK), \ + .ENB(PORT_A_CLK_EN), \ + .WEB(PORT_A_WR_EN), \ + .SSRB(PORT_A_RD_SRST), \ + .ADDRB(PORT_A_ADDR addr_slice_a), \ + .DOB(DO_A), \ + .DIB(DI_A), \ + .CLKA(PORT_B_CLK), \ + .ENA(PORT_B_CLK_EN), \ + .WEA(PORT_B_WR_EN), \ + .SSRA(PORT_B_RD_SRST), \ + .ADDRA(PORT_B_ADDR addr_slice_b), \ + .DOA(DO_B), \ + .DIA(DI_B), + +`define PORTS_SP(addr_slice) \ + .CLK(PORT_A_CLK), \ + .EN(PORT_A_CLK_EN), \ + .WE(PORT_A_WR_EN), \ + .SSR(PORT_A_RD_SRST), \ + .ADDR(PORT_A_ADDR addr_slice), \ + .DO(DO_A), \ + .DI(DI_A), + +localparam [PORT_A_WIDTH-1:0] SRVAL_A = ival(PORT_A_WIDTH, PORT_A_RD_SRST_VALUE); +localparam [PORT_B_WIDTH-1:0] SRVAL_B = ival(PORT_B_WIDTH, PORT_B_RD_SRST_VALUE); +localparam [PORT_A_WIDTH-1:0] INIT_A = ival(PORT_A_WIDTH, PORT_A_RD_INIT_VALUE); +localparam [PORT_B_WIDTH-1:0] INIT_B = ival(PORT_B_WIDTH, PORT_B_RD_INIT_VALUE); + +`MAKE_DI(DI_A, DIP_A, PORT_A_WR_DATA) +`MAKE_DI(DI_B, DIP_B, PORT_B_WR_DATA) +`MAKE_DO(DO_A, DOP_A, PORT_A_RD_DATA) +`MAKE_DO(DO_B, DOP_B, PORT_B_RD_DATA) + +generate + +if (OPTION_USE_BE) begin + if (!PORT_B_USED) begin + case (PORT_A_WIDTH) + 9: RAMB16_S9 #( + `PARAMS_SP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:3]) + .DIP(DIP_A), + .DOP(DOP_A), + ); + 18: RAMB16BWE_S18 #( + `PARAMS_SP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:4]) + .DIP(DIP_A), + .DOP(DOP_A), + ); + 36: RAMB16BWE_S36 #( + `PARAMS_SP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:5]) + .DIP(DIP_A), + .DOP(DOP_A), + ); + endcase + end else begin + case (PORT_A_WIDTH) + 9: case(PORT_B_WIDTH) + 9: RAMB16_S9_S9 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:3], [13:3]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 18: RAMB16BWE_S9_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:3], [13:4]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16BWE_S9_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:3], [13:5]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 18: case(PORT_B_WIDTH) + 9: RAMB16BWE_S9_S18 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:4], [13:3]) + .DIPA(DIP_B), .DOPA(DOP_B), + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 18: RAMB16BWE_S18_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:4], [13:4]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16BWE_S18_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:4], [13:5]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 36: case(PORT_B_WIDTH) + 9: RAMB16BWE_S9_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:3]) + .DIPA(DIP_B), .DOPA(DOP_B), + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 18: RAMB16BWE_S18_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:4]) + .DIPA(DIP_B), .DOPA(DOP_B), + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 36: RAMB16BWE_S36_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:5], [13:5]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + endcase + end +end else begin + if (!PORT_B_USED) begin + case (PORT_A_WIDTH) + 1: RAMB16_S1 #( + `PARAMS_SP + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:0]) + ); + 2: RAMB16_S2 #( + `PARAMS_SP + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:1]) + ); + 4: RAMB16_S4 #( + `PARAMS_SP + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:2]) + ); + 9: RAMB16_S9 #( + `PARAMS_SP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:3]) + .DIP(DIP_A), + .DOP(DOP_A), + ); + 18: RAMB16_S18 #( + `PARAMS_SP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:4]) + .DIP(DIP_A), + .DOP(DOP_A), + ); + 36: RAMB16_S36 #( + `PARAMS_SP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([13:5]) + .DIP(DIP_A), + .DOP(DOP_A), + ); + endcase + end else begin + case (PORT_A_WIDTH) + 1: case(PORT_B_WIDTH) + 1: RAMB16_S1_S1 #( + `PARAMS_DP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:0], [13:0]) + ); + 2: RAMB16_S1_S2 #( + `PARAMS_DP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:0], [13:1]) + ); + 4: RAMB16_S1_S4 #( + `PARAMS_DP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:0], [13:2]) + ); + 9: RAMB16_S1_S9 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:0], [13:3]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 18: RAMB16_S1_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:0], [13:4]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16_S1_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:0], [13:5]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 2: case(PORT_B_WIDTH) + 1: RAMB16_S1_S2 #( + `PARAMS_DP_SWAP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:1], [13:0]) + ); + 2: RAMB16_S2_S2 #( + `PARAMS_DP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:1], [13:1]) + ); + 4: RAMB16_S2_S4 #( + `PARAMS_DP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:1], [13:2]) + ); + 9: RAMB16_S2_S9 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:1], [13:3]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 18: RAMB16_S2_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:1], [13:4]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16_S2_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:1], [13:5]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 4: case(PORT_B_WIDTH) + 1: RAMB16_S1_S4 #( + `PARAMS_DP_SWAP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:2], [13:0]) + ); + 2: RAMB16_S2_S4 #( + `PARAMS_DP_SWAP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:2], [13:1]) + ); + 4: RAMB16_S4_S4 #( + `PARAMS_DP + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:2], [13:2]) + ); + 9: RAMB16_S4_S9 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:2], [13:3]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 18: RAMB16_S4_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:2], [13:4]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16_S4_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:2], [13:5]) + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 9: case(PORT_B_WIDTH) + 1: RAMB16_S1_S9 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:3], [13:0]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 2: RAMB16_S2_S9 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:3], [13:1]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 4: RAMB16_S4_S9 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:3], [13:2]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 9: RAMB16_S9_S9 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:3], [13:3]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 18: RAMB16_S9_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:3], [13:4]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16_S9_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:3], [13:5]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 18: case(PORT_B_WIDTH) + 1: RAMB16_S1_S18 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:4], [13:0]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 2: RAMB16_S2_S18 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:4], [13:1]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 4: RAMB16_S4_S18 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:4], [13:2]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 9: RAMB16_S9_S18 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:4], [13:3]) + .DIPA(DIP_B), .DOPA(DOP_B), + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 18: RAMB16_S18_S18 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:4], [13:4]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + 36: RAMB16_S18_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:4], [13:5]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + 36: case(PORT_B_WIDTH) + 1: RAMB16_S1_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:0]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 2: RAMB16_S2_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:1]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 4: RAMB16_S4_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:2]) + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 9: RAMB16_S9_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:3]) + .DIPA(DIP_B), .DOPA(DOP_B), + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 18: RAMB16_S18_S36 #( + `PARAMS_DP_SWAP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([13:5], [13:4]) + .DIPA(DIP_B), .DOPA(DOP_B), + .DIPB(DIP_A), .DOPB(DOP_A), + ); + 36: RAMB16_S36_S36 #( + `PARAMS_DP + `PARAMS_INITP_18 + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([13:5], [13:5]) + .DIPA(DIP_A), .DOPA(DOP_A), + .DIPB(DIP_B), .DOPB(DOP_B), + ); + endcase + endcase + end +end + +endgenerate + + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc3sda.txt b/resources/netlist/resources/kernel/share/xilinx/brams_xc3sda.txt new file mode 100644 index 0000000..4519991 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc3sda.txt @@ -0,0 +1,120 @@ +# Block RAMs for Spartan 3A DSP and Spartan 6. +# The corresponding mapping file is brams_xc3sda_map.v + +ram block $__XILINX_BLOCKRAM_TDP_ { + byte 9; + ifdef IS_SPARTAN6 { + option "MODE" "HALF" { + abits 13; + widths 1 2 4 9 18 per_port; + cost 65; + } + } + option "MODE" "FULL" { + abits 14; + widths 1 2 4 9 18 36 per_port; + cost 129; + } + init any; + port srsw "A" "B" { + # Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks. + ifdef IS_SPARTAN6 { + option "HAS_RDFIRST" 1 { + clock posedge "C"; + } + option "HAS_RDFIRST" 0 { + clock posedge; + } + } else { + clock posedge; + } + clken; + option "RSTTYPE" "SYNC" { + portoption "RST_PRIORITY" "CE" { + rdsrst any gated_clken; + } + ifdef IS_SPARTAN6 { + portoption "RST_PRIORITY" "SR" { + rdsrst any ungated; + } + } + } + ifdef IS_SPARTAN6 { + option "RSTTYPE" "ASYNC" { + portoption "RST_PRIORITY" "SR" { + rdarst any; + } + } + } + rdinit any; + portoption "WRITE_MODE" "NO_CHANGE" { + rdwr no_change; + } + portoption "WRITE_MODE" "WRITE_FIRST" { + rdwr new; + } + ifdef IS_SPARTAN6 { + option "HAS_RDFIRST" 1 { + portoption "WRITE_MODE" "READ_FIRST" { + rdwr old; + wrtrans all old; + } + } + } else { + portoption "WRITE_MODE" "READ_FIRST" { + rdwr old; + wrtrans all old; + } + } + optional; + } +} + +ifdef IS_SPARTAN6 { + ram block $__XILINX_BLOCKRAM_SDP_ { + byte 9; + abits 13; + widths 1 2 4 9 18 36 per_port; + cost 65; + init any; + port sw "W" { + width 36; + # Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks. + option "WRITE_MODE" "READ_FIRST" { + clock posedge "C"; + wrtrans all old; + } + option "WRITE_MODE" "WRITE_FIRST" { + clock posedge; + } + clken; + optional; + } + port sr "R" { + width 36; + # Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks. + option "WRITE_MODE" "READ_FIRST" { + clock posedge "C"; + } + option "WRITE_MODE" "WRITE_FIRST" { + clock posedge; + } + clken; + option "RSTTYPE" "SYNC" { + portoption "RST_PRIORITY" "CE" { + rdsrst any gated_clken; + } + portoption "RST_PRIORITY" "SR" { + rdsrst any ungated; + } + } + option "RSTTYPE" "ASYNC" { + portoption "RST_PRIORITY" "SR" { + rdarst any; + } + } + rdinit any; + optional; + } + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc3sda_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xc3sda_map.v new file mode 100644 index 0000000..f5f0e5a --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc3sda_map.v @@ -0,0 +1,224 @@ +module $__XILINX_BLOCKRAM_TDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; +parameter OPTION_RSTTYPE = "SYNC"; +parameter OPTION_HAS_RDFIRST = 0; + +parameter PORT_A_WIDTH = 1; +parameter PORT_A_WR_EN_WIDTH = 1; +parameter PORT_A_USED = 1; +parameter PORT_A_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_A_RD_INIT_VALUE = 0; +parameter PORT_A_RD_SRST_VALUE = 0; +parameter PORT_A_RD_ARST_VALUE = 0; +parameter PORT_A_OPTION_RST_PRIORITY = "CE"; + +parameter PORT_B_WIDTH = 1; +parameter PORT_B_WR_EN_WIDTH = 1; +parameter PORT_B_USED = 0; +parameter PORT_B_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_B_RD_INIT_VALUE = 0; +parameter PORT_B_RD_SRST_VALUE = 0; +parameter PORT_B_RD_ARST_VALUE = 0; +parameter PORT_B_OPTION_RST_PRIORITY = "CE"; + +input CLK_C; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [13:0] PORT_A_ADDR; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; +input PORT_A_RD_ARST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [13:0] PORT_B_ADDR; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; +input PORT_B_RD_ARST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(PORT_A_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_B_OPTION_WRITE_MODE), \ + .DATA_WIDTH_A(PORT_A_USED ? PORT_A_WIDTH : 0), \ + .DATA_WIDTH_B(PORT_B_USED ? PORT_B_WIDTH : 0), \ + .EN_RSTRAM_A("TRUE"), \ + .EN_RSTRAM_B("TRUE"), \ + .DOA_REG(0), \ + .DOB_REG(0), \ + .RST_PRIORITY_A(PORT_A_OPTION_RST_PRIORITY), \ + .RST_PRIORITY_B(PORT_B_OPTION_RST_PRIORITY), \ + .RSTTYPE(OPTION_RSTTYPE), \ + .INIT_A(ival(PORT_A_WIDTH, PORT_A_RD_INIT_VALUE)), \ + .INIT_B(ival(PORT_B_WIDTH, PORT_B_RD_INIT_VALUE)), \ + .SRVAL_A(ival(PORT_A_WIDTH, OPTION_RSTTYPE == "SYNC" ? PORT_A_RD_SRST_VALUE : PORT_A_RD_ARST_VALUE)), \ + .SRVAL_B(ival(PORT_B_WIDTH, OPTION_RSTTYPE == "SYNC" ? PORT_B_RD_SRST_VALUE : PORT_B_RD_ARST_VALUE)), + +wire RST_A = OPTION_RSTTYPE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST; +wire RST_B = OPTION_RSTTYPE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST; + +`MAKE_DI(DI_A, DIP_A, PORT_A_WR_DATA) +`MAKE_DI(DI_B, DIP_B, PORT_B_WR_DATA) +`MAKE_DO(DO_A, DOP_A, PORT_A_RD_DATA) +`MAKE_DO(DO_B, DOP_B, PORT_B_RD_DATA) + +generate + +if (OPTION_MODE == "FULL") begin + wire [3:0] WE_A = {4{PORT_A_WR_EN}}; + wire [3:0] WE_B = {4{PORT_B_WR_EN}}; + RAMB16BWER #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + .DOA(DO_A), + .DOPA(DOP_A), + .DIA(DI_A), + .DIPA(DIP_A), + .DOB(DO_B), + .DOPB(DOP_B), + .DIB(DI_B), + .DIPB(DIP_B), + .ADDRA(PORT_A_ADDR), + .ADDRB(PORT_B_ADDR), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .RSTA(RST_A), + .RSTB(RST_B), + .WEA(WE_A), + .WEB(WE_B), + ); +end else begin + wire [1:0] WE_A = {2{PORT_A_WR_EN}}; + wire [1:0] WE_B = {2{PORT_B_WR_EN}}; + RAMB8BWER #( + `PARAMS_INIT_9 + `PARAMS_INITP_9 + `PARAMS_COMMON + .RAM_MODE("TDP"), + ) _TECHMAP_REPLACE_ ( + .DOADO(DO_A), + .DOPADOP(DOP_A), + .DIADI(DI_A), + .DIPADIP(DIP_A), + .DOBDO(DO_B), + .DOPBDOP(DOP_B), + .DIBDI(DI_B), + .DIPBDIP(DIP_B), + .ADDRAWRADDR(PORT_A_ADDR), + .ADDRBRDADDR(PORT_B_ADDR), + .CLKAWRCLK(PORT_A_CLK), + .CLKBRDCLK(PORT_B_CLK), + .ENAWREN(PORT_A_CLK_EN), + .ENBRDEN(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEBREGCE(1'b0), + .RSTA(RST_A), + .RSTBRST(RST_B), + .WEAWEL(WE_A), + .WEBWEU(WE_B), + ); +end + +endgenerate + +endmodule + + +module $__XILINX_BLOCKRAM_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_RSTTYPE = "SYNC"; +parameter OPTION_WRITE_MODE = "READ_FIRST"; + +parameter PORT_W_WIDTH = 1; +parameter PORT_W_WR_EN_WIDTH = 1; +parameter PORT_W_USED = 1; + +parameter PORT_R_WIDTH = 1; +parameter PORT_R_USED = 0; +parameter PORT_R_RD_INIT_VALUE = 0; +parameter PORT_R_RD_SRST_VALUE = 0; +parameter PORT_R_RD_ARST_VALUE = 0; +parameter PORT_R_OPTION_RST_PRIORITY = "CE"; + +input CLK_C; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [13:0] PORT_W_ADDR; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input [13:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; +input PORT_R_RD_SRST; +input PORT_R_RD_ARST; + +`include "brams_defs.vh" + +wire RST = OPTION_RSTTYPE == "SYNC" ? PORT_R_RD_SRST : PORT_R_RD_ARST; + +`MAKE_DI(DI, DIP, PORT_W_WR_DATA) +`MAKE_DO(DO, DOP, PORT_R_RD_DATA) + +localparam [35:0] RST_VALUE = OPTION_RSTTYPE == "SYNC" ? PORT_R_RD_SRST_VALUE : PORT_R_RD_ARST_VALUE; + +RAMB8BWER #( + `PARAMS_INIT_9 + `PARAMS_INITP_9 + .WRITE_MODE_A(OPTION_WRITE_MODE), + .WRITE_MODE_B(OPTION_WRITE_MODE), + .DATA_WIDTH_A(PORT_W_USED ? PORT_W_WIDTH : 0), + .DATA_WIDTH_B(PORT_R_USED ? PORT_R_WIDTH : 0), + .EN_RSTRAM_A("TRUE"), + .EN_RSTRAM_B("TRUE"), + .DOA_REG(0), + .DOB_REG(0), + .RST_PRIORITY_A("CE"), + .RST_PRIORITY_B(PORT_R_OPTION_RST_PRIORITY), + .RSTTYPE(OPTION_RSTTYPE), + .INIT_A(ival(18, PORT_R_RD_INIT_VALUE[17:0])), + .INIT_B(ival(18, PORT_R_RD_INIT_VALUE[35:18])), + .SRVAL_A(ival(18, RST_VALUE[17:0])), + .SRVAL_B(ival(18, RST_VALUE[35:18])), + .RAM_MODE("SDP"), +) _TECHMAP_REPLACE_ ( + .DOADO(DO[15:0]), + .DOPADOP(DOP[1:0]), + .DIADI(DI[15:0]), + .DIPADIP(DIP[1:0]), + .DOBDO(DO[31:16]), + .DOPBDOP(DOP[3:2]), + .DIBDI(DI[31:16]), + .DIPBDIP(DIP[3:2]), + .ADDRAWRADDR(PORT_W_ADDR), + .ADDRBRDADDR(PORT_R_ADDR), + .CLKAWRCLK(PORT_W_CLK), + .CLKBRDCLK(PORT_R_CLK), + .ENAWREN(PORT_W_CLK_EN), + .ENBRDEN(PORT_R_CLK_EN), + .REGCEA(1'b0), + .REGCEBREGCE(1'b0), + .RSTA(1'b0), + .RSTBRST(RST), + .WEAWEL(PORT_W_WR_EN[1:0]), + .WEBWEU(PORT_W_WR_EN[3:2]), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc4v.txt b/resources/netlist/resources/kernel/share/xilinx/brams_xc4v.txt new file mode 100644 index 0000000..2301835 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc4v.txt @@ -0,0 +1,169 @@ +# Block RAMs for Virtex 4+. +# The corresponding mapping files are: +# - brams_xc3sda_map.v: Spartan 3A DSP, Spartan 6 +# - brams_xc4v_map.v: Virtex 4 +# - brams_xc5v_map.v: Virtex 5 +# - brams_xc6v_map.v: Virtex 6, Series 7 +# - brams_xcu_map.v: Ultrascale + +ram block $__XILINX_BLOCKRAM_TDP_ { + byte 9; + ifdef HAS_SIZE_36 { + option "MODE" "HALF" { + abits 14; + widths 1 2 4 9 18 per_port; + cost 129; + } + option "MODE" "FULL" { + abits 15; + widths 1 2 4 9 18 36 per_port; + cost 257; + } + ifdef HAS_CASCADE { + option "MODE" "CASCADE" { + abits 16; + # hack to enforce same INIT layout as in the other modes + widths 1 2 4 9 per_port; + cost 513; + } + } + } else { + option "MODE" "FULL" { + abits 14; + widths 1 2 4 9 18 36 per_port; + cost 129; + } + ifdef HAS_CASCADE { + option "MODE" "CASCADE" { + abits 15; + widths 1 2 4 9 per_port; + cost 257; + } + } + } + init any; + port srsw "A" "B" { + option "MODE" "HALF" { + width mix; + } + option "MODE" "FULL" { + width mix; + } + option "MODE" "CASCADE" { + width mix 1; + } + ifdef HAS_ADDRCE { + # TODO + # addrce; + } + # Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks. + ifdef HAS_CONFLICT_BUG { + option "HAS_RDFIRST" 1 { + clock posedge "C"; + } + option "HAS_RDFIRST" 0 { + clock posedge; + } + } else { + clock posedge; + } + clken; + rdsrst any gated_clken; + rdinit any; + portoption "WRITE_MODE" "NO_CHANGE" { + rdwr no_change; + option "MODE" "CASCADE" { + forbid; + } + } + portoption "WRITE_MODE" "WRITE_FIRST" { + ifdef HAS_SIZE_36 { + rdwr new; + } else { + rdwr new_only; + } + } + ifdef HAS_CONFLICT_BUG { + option "HAS_RDFIRST" 1 { + portoption "WRITE_MODE" "READ_FIRST" { + rdwr old; + wrtrans all old; + } + } + } else { + portoption "WRITE_MODE" "READ_FIRST" { + rdwr old; + wrtrans all old; + } + } + optional_rw; + } +} + +ifdef HAS_SIZE_36 { + ram block $__XILINX_BLOCKRAM_SDP_ { + byte 9; + option "MODE" "HALF" { + abits 14; + widths 1 2 4 9 18 36 per_port; + cost 129; + } + option "MODE" "FULL" { + abits 15; + widths 1 2 4 9 18 36 72 per_port; + cost 257; + } + init any; + port sw "W" { + ifndef HAS_MIXWIDTH_SDP { + option "MODE" "HALF" width 36; + option "MODE" "FULL" width 72; + } + ifdef HAS_ADDRCE { + # TODO + # addrce; + } + # Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks. + ifdef HAS_CONFLICT_BUG { + option "WRITE_MODE" "READ_FIRST" { + clock posedge "C"; + } + option "WRITE_MODE" "WRITE_FIRST" { + clock posedge; + } + } else { + clock posedge; + } + clken; + option "WRITE_MODE" "READ_FIRST" { + wrtrans all old; + } + optional; + } + port sr "R" { + ifndef HAS_MIXWIDTH_SDP { + option "MODE" "HALF" width 36; + option "MODE" "FULL" width 72; + } + ifdef HAS_ADDRCE { + # TODO + # addrce; + } + # Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks. + ifdef HAS_CONFLICT_BUG { + option "WRITE_MODE" "READ_FIRST" { + clock posedge "C"; + } + option "WRITE_MODE" "WRITE_FIRST" { + clock posedge; + } + } else { + clock posedge; + } + clken; + rdsrst any gated_clken; + rdinit any; + optional; + } + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc4v_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xc4v_map.v new file mode 100644 index 0000000..a1747d4 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc4v_map.v @@ -0,0 +1,149 @@ +module $__XILINX_BLOCKRAM_TDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; + +parameter PORT_A_RD_WIDTH = 1; +parameter PORT_A_WR_WIDTH = 1; +parameter PORT_A_WR_EN_WIDTH = 1; +parameter PORT_A_RD_USED = 1; +parameter PORT_A_WR_USED = 1; +parameter PORT_A_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_A_RD_INIT_VALUE = 0; +parameter PORT_A_RD_SRST_VALUE = 0; + +parameter PORT_B_RD_WIDTH = 1; +parameter PORT_B_WR_WIDTH = 1; +parameter PORT_B_WR_EN_WIDTH = 1; +parameter PORT_B_RD_USED = 0; +parameter PORT_B_WR_USED = 0; +parameter PORT_B_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_B_RD_INIT_VALUE = 0; +parameter PORT_B_RD_SRST_VALUE = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [14:0] PORT_A_ADDR; +input [PORT_A_WR_WIDTH-1:0] PORT_A_WR_DATA; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +output [PORT_A_RD_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [14:0] PORT_B_ADDR; +input [PORT_B_WR_WIDTH-1:0] PORT_B_WR_DATA; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +output [PORT_B_RD_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(PORT_A_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_B_OPTION_WRITE_MODE), \ + .READ_WIDTH_A(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), \ + .READ_WIDTH_B(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), \ + .WRITE_WIDTH_A(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), \ + .WRITE_WIDTH_B(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), \ + .DOA_REG(0), \ + .DOB_REG(0), \ + .INIT_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_INIT_VALUE)), \ + .INIT_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_INIT_VALUE)), \ + .SRVAL_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_SRST_VALUE)), \ + .SRVAL_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_SRST_VALUE)), + +`MAKE_DI(DI_A, DIP_A, PORT_A_WR_DATA) +`MAKE_DI(DI_B, DIP_B, PORT_B_WR_DATA) +`MAKE_DO(DO_A, DOP_A, PORT_A_RD_DATA) +`MAKE_DO(DO_B, DOP_B, PORT_B_RD_DATA) + +wire [3:0] WE_A = {4{PORT_A_WR_EN}}; +wire [3:0] WE_B = {4{PORT_B_WR_EN}}; + +generate + +if (OPTION_MODE == "FULL") begin + RAMB16 #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + .RAM_EXTENSION_A("NONE"), + .RAM_EXTENSION_B("NONE"), + ) _TECHMAP_REPLACE_ ( + .DOA(DO_A), + .DOPA(DOP_A), + .DIA(DI_A), + .DIPA(DIP_A), + .DOB(DO_B), + .DOPB(DOP_B), + .DIB(DI_B), + .DIPB(DIP_B), + .ADDRA({1'b1, PORT_A_ADDR[13:0]}), + .ADDRB({1'b1, PORT_B_ADDR[13:0]}), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + ); +end else begin + wire CAS_A, CAS_B; + RAMB16 #( + `PARAMS_INIT_18 + `PARAMS_COMMON + .RAM_EXTENSION_A("LOWER"), + .RAM_EXTENSION_B("LOWER"), + ) lower ( + .DIA(DI_A), + .DIB(DI_B), + .ADDRA(PORT_A_ADDR), + .ADDRB(PORT_B_ADDR), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + .CASCADEOUTA(CAS_A), + .CASCADEOUTB(CAS_B), + ); + RAMB16 #( + `PARAMS_INIT_18_U + `PARAMS_COMMON + .RAM_EXTENSION_A("UPPER"), + .RAM_EXTENSION_B("UPPER"), + ) upper ( + .DOA(DO_A), + .DIA(DI_A), + .DOB(DO_B), + .DIB(DI_B), + .ADDRA(PORT_A_ADDR), + .ADDRB(PORT_B_ADDR), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + .CASCADEINA(CAS_A), + .CASCADEINB(CAS_B), + ); +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc5v_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xc5v_map.v new file mode 100644 index 0000000..6349af3 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc5v_map.v @@ -0,0 +1,255 @@ +module $__XILINX_BLOCKRAM_TDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; + +parameter PORT_A_RD_WIDTH = 1; +parameter PORT_A_WR_WIDTH = 1; +parameter PORT_A_WR_EN_WIDTH = 1; +parameter PORT_A_RD_USED = 1; +parameter PORT_A_WR_USED = 1; +parameter PORT_A_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_A_RD_INIT_VALUE = 0; +parameter PORT_A_RD_SRST_VALUE = 0; + +parameter PORT_B_RD_WIDTH = 1; +parameter PORT_B_WR_WIDTH = 1; +parameter PORT_B_WR_EN_WIDTH = 1; +parameter PORT_B_RD_USED = 0; +parameter PORT_B_WR_USED = 0; +parameter PORT_B_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_B_RD_INIT_VALUE = 0; +parameter PORT_B_RD_SRST_VALUE = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [15:0] PORT_A_ADDR; +input [PORT_A_WR_WIDTH-1:0] PORT_A_WR_DATA; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +output [PORT_A_RD_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [15:0] PORT_B_ADDR; +input [PORT_B_WR_WIDTH-1:0] PORT_B_WR_DATA; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +output [PORT_B_RD_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(PORT_A_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_B_OPTION_WRITE_MODE), \ + .READ_WIDTH_A(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), \ + .READ_WIDTH_B(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), \ + .WRITE_WIDTH_A(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), \ + .WRITE_WIDTH_B(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), \ + .DOA_REG(0), \ + .DOB_REG(0), \ + .INIT_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_INIT_VALUE)), \ + .INIT_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_INIT_VALUE)), \ + .SRVAL_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_SRST_VALUE)), \ + .SRVAL_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_SRST_VALUE)), + +`MAKE_DI(DI_A, DIP_A, PORT_A_WR_DATA) +`MAKE_DI(DI_B, DIP_B, PORT_B_WR_DATA) +`MAKE_DO(DO_A, DOP_A, PORT_A_RD_DATA) +`MAKE_DO(DO_B, DOP_B, PORT_B_RD_DATA) + +wire [3:0] WE_A = {4{PORT_A_WR_EN}}; +wire [3:0] WE_B = {4{PORT_B_WR_EN}}; + +generate + +if (OPTION_MODE == "HALF") begin + RAMB18 #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + .DOA(DO_A), + .DOPA(DOP_A), + .DIA(DI_A), + .DIPA(DIP_A), + .DOB(DO_B), + .DOPB(DOP_B), + .DIB(DI_B), + .DIPB(DIP_B), + .ADDRA(PORT_A_ADDR[13:0]), + .ADDRB(PORT_B_ADDR[13:0]), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + ); +end else if (OPTION_MODE == "FULL") begin + RAMB36 #( + `PARAMS_INIT_36 + `PARAMS_INITP_36 + `PARAMS_COMMON + .RAM_EXTENSION_A("NONE"), + .RAM_EXTENSION_B("NONE"), + ) _TECHMAP_REPLACE_ ( + .DOA(DO_A), + .DOPA(DOP_A), + .DIA(DI_A), + .DIPA(DIP_A), + .DOB(DO_B), + .DOPB(DOP_B), + .DIB(DI_B), + .DIPB(DIP_B), + .ADDRA({1'b1, PORT_A_ADDR[14:0]}), + .ADDRB({1'b1, PORT_B_ADDR[14:0]}), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + ); +end else begin + wire CAS_A, CAS_B; + RAMB36 #( + `PARAMS_INIT_36 + `PARAMS_COMMON + .RAM_EXTENSION_A("LOWER"), + .RAM_EXTENSION_B("LOWER"), + ) lower ( + .DIA(DI_A), + .DIB(DI_B), + .ADDRA(PORT_A_ADDR), + .ADDRB(PORT_B_ADDR), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + .CASCADEOUTLATA(CAS_A), + .CASCADEOUTLATB(CAS_B), + ); + RAMB36 #( + `PARAMS_INIT_36_U + `PARAMS_COMMON + .RAM_EXTENSION_A("UPPER"), + .RAM_EXTENSION_B("UPPER"), + ) upper ( + .DOA(DO_A), + .DIA(DI_A), + .DOB(DO_B), + .DIB(DI_B), + .ADDRA(PORT_A_ADDR), + .ADDRB(PORT_B_ADDR), + .CLKA(PORT_A_CLK), + .CLKB(PORT_B_CLK), + .ENA(PORT_A_CLK_EN), + .ENB(PORT_B_CLK_EN), + .REGCEA(1'b0), + .REGCEB(1'b0), + .SSRA(PORT_A_RD_SRST), + .SSRB(PORT_B_RD_SRST), + .WEA(WE_A), + .WEB(WE_B), + .CASCADEINLATA(CAS_A), + .CASCADEINLATB(CAS_B), + ); +end + +endgenerate + +endmodule + + +module $__XILINX_BLOCKRAM_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; +parameter OPTION_WRITE_MODE = "READ_FIRST"; + +parameter PORT_W_WIDTH = 1; +parameter PORT_W_WR_EN_WIDTH = 1; +parameter PORT_W_USED = 1; + +parameter PORT_R_WIDTH = 1; +parameter PORT_R_USED = 0; +parameter PORT_R_RD_INIT_VALUE = 0; +parameter PORT_R_RD_SRST_VALUE = 0; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [15:0] PORT_W_ADDR; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input [15:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; +input PORT_R_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .DO_REG(0), \ + .INIT(ival(PORT_R_WIDTH, PORT_R_RD_INIT_VALUE)), \ + .SRVAL(ival(PORT_R_WIDTH, PORT_R_RD_SRST_VALUE)), + +`define PORTS_COMMON \ + .DO(DO), \ + .DOP(DOP), \ + .DI(DI), \ + .DIP(DIP), \ + .WRCLK(PORT_W_CLK), \ + .RDCLK(PORT_R_CLK), \ + .WREN(PORT_W_CLK_EN), \ + .RDEN(PORT_R_CLK_EN), \ + .REGCE(1'b0), \ + .SSR(PORT_R_RD_SRST), \ + .WE(PORT_W_WR_EN), + +`MAKE_DI(DI, DIP, PORT_W_WR_DATA) +`MAKE_DO(DO, DOP, PORT_R_RD_DATA) + +generate + +if (OPTION_MODE == "HALF") begin + RAMB18SDP #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .WRADDR(PORT_W_ADDR[13:5]), + .RDADDR(PORT_R_ADDR[13:5]), + ); +end else if (OPTION_MODE == "FULL") begin + RAMB36SDP #( + `PARAMS_INIT_36 + `PARAMS_INITP_36 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .WRADDR(PORT_W_ADDR[14:6]), + .RDADDR(PORT_R_ADDR[14:6]), + ); +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xc6v_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xc6v_map.v new file mode 100644 index 0000000..b2698a3 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xc6v_map.v @@ -0,0 +1,284 @@ +module $__XILINX_BLOCKRAM_TDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; +parameter OPTION_HAS_RDFIRST = 0; + +parameter PORT_A_RD_WIDTH = 1; +parameter PORT_A_WR_WIDTH = 1; +parameter PORT_A_WR_EN_WIDTH = 1; +parameter PORT_A_RD_USED = 1; +parameter PORT_A_WR_USED = 1; +parameter PORT_A_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_A_RD_INIT_VALUE = 0; +parameter PORT_A_RD_SRST_VALUE = 1; + +parameter PORT_B_RD_WIDTH = 1; +parameter PORT_B_WR_WIDTH = 1; +parameter PORT_B_WR_EN_WIDTH = 1; +parameter PORT_B_RD_USED = 0; +parameter PORT_B_WR_USED = 0; +parameter PORT_B_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_B_RD_INIT_VALUE = 0; +parameter PORT_B_RD_SRST_VALUE = 0; + +input CLK_C; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [15:0] PORT_A_ADDR; +input [PORT_A_WR_WIDTH-1:0] PORT_A_WR_DATA; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +output [PORT_A_RD_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [15:0] PORT_B_ADDR; +input [PORT_B_WR_WIDTH-1:0] PORT_B_WR_DATA; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +output [PORT_B_RD_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(PORT_A_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_B_OPTION_WRITE_MODE), \ + .READ_WIDTH_A(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), \ + .READ_WIDTH_B(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), \ + .WRITE_WIDTH_A(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), \ + .WRITE_WIDTH_B(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), \ + .DOA_REG(0), \ + .DOB_REG(0), \ + .INIT_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_INIT_VALUE)), \ + .INIT_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_INIT_VALUE)), \ + .SRVAL_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_SRST_VALUE)), \ + .SRVAL_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_SRST_VALUE)), \ + .RAM_MODE("TDP"), + +`define PORTS_COMMON \ + .DOADO(DO_A), \ + .DOPADOP(DOP_A), \ + .DIADI(DI_A), \ + .DIPADIP(DIP_A), \ + .DOBDO(DO_B), \ + .DOPBDOP(DOP_B), \ + .DIBDI(DI_B), \ + .DIPBDIP(DIP_B), \ + .CLKARDCLK(PORT_A_CLK), \ + .CLKBWRCLK(PORT_B_CLK), \ + .ENARDEN(PORT_A_CLK_EN), \ + .ENBWREN(PORT_B_CLK_EN), \ + .REGCEAREGCE(1'b0), \ + .REGCEB(1'b0), \ + .RSTRAMARSTRAM(PORT_A_RD_SRST), \ + .RSTRAMB(PORT_B_RD_SRST), \ + .RSTREGARSTREG(1'b0), \ + .RSTREGB(1'b0), \ + .WEA(WE_A), \ + .WEBWE(WE_B), + +`MAKE_DI(DI_A, DIP_A, PORT_A_WR_DATA) +`MAKE_DI(DI_B, DIP_B, PORT_B_WR_DATA) +`MAKE_DO(DO_A, DOP_A, PORT_A_RD_DATA) +`MAKE_DO(DO_B, DOP_B, PORT_B_RD_DATA) + +wire [3:0] WE_A = {4{PORT_A_WR_EN}}; +wire [3:0] WE_B = {4{PORT_B_WR_EN}}; + +generate + +if (OPTION_MODE == "HALF") begin + RAMB18E1 #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .ADDRARDADDR(PORT_A_ADDR[13:0]), + .ADDRBWRADDR(PORT_B_ADDR[13:0]), + ); +end else if (OPTION_MODE == "FULL") begin + RAMB36E1 #( + `PARAMS_INIT_36 + `PARAMS_INITP_36 + `PARAMS_COMMON + .RAM_EXTENSION_A("NONE"), + .RAM_EXTENSION_B("NONE"), + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .ADDRARDADDR({1'b1, PORT_A_ADDR[14:0]}), + .ADDRBWRADDR({1'b1, PORT_B_ADDR[14:0]}), + ); +end else begin + wire CAS_A, CAS_B; + RAMB36E1 #( + `PARAMS_INIT_36 + `PARAMS_COMMON + .RAM_EXTENSION_A("LOWER"), + .RAM_EXTENSION_B("LOWER"), + ) lower ( + .DIADI(DI_A), + .DIBDI(DI_B), + .CLKARDCLK(PORT_A_CLK), + .CLKBWRCLK(PORT_B_CLK), + .ENARDEN(PORT_A_CLK_EN), + .ENBWREN(PORT_B_CLK_EN), + .REGCEAREGCE(1'b0), + .REGCEB(1'b0), + .RSTRAMARSTRAM(PORT_A_RD_SRST), + .RSTRAMB(PORT_B_RD_SRST), + .RSTREGARSTREG(1'b0), + .RSTREGB(1'b0), + .WEA(WE_A), + .WEBWE(WE_B), + .ADDRARDADDR(PORT_A_ADDR), + .ADDRBWRADDR(PORT_B_ADDR), + .CASCADEOUTA(CAS_A), + .CASCADEOUTB(CAS_B), + ); + RAMB36E1 #( + `PARAMS_INIT_36_U + `PARAMS_COMMON + .RAM_EXTENSION_A("UPPER"), + .RAM_EXTENSION_B("UPPER"), + ) upper ( + .DOADO(DO_A), + .DIADI(DI_A), + .DOBDO(DO_B), + .DIBDI(DI_B), + .CLKARDCLK(PORT_A_CLK), + .CLKBWRCLK(PORT_B_CLK), + .ENARDEN(PORT_A_CLK_EN), + .ENBWREN(PORT_B_CLK_EN), + .REGCEAREGCE(1'b0), + .REGCEB(1'b0), + .RSTRAMARSTRAM(PORT_A_RD_SRST), + .RSTRAMB(PORT_B_RD_SRST), + .RSTREGARSTREG(1'b0), + .RSTREGB(1'b0), + .WEA(WE_A), + .WEBWE(WE_B), + .ADDRARDADDR(PORT_A_ADDR), + .ADDRBWRADDR(PORT_B_ADDR), + .CASCADEINA(CAS_A), + .CASCADEINB(CAS_B), + ); +end + +endgenerate + +endmodule + + +module $__XILINX_BLOCKRAM_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; +parameter OPTION_WRITE_MODE = "READ_FIRST"; + +parameter PORT_W_WIDTH = 1; +parameter PORT_W_WR_EN_WIDTH = 1; +parameter PORT_W_USED = 1; + +parameter PORT_R_WIDTH = 1; +parameter PORT_R_USED = 0; +parameter PORT_R_RD_INIT_VALUE = 0; +parameter PORT_R_RD_SRST_VALUE = 0; + +input CLK_C; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [15:0] PORT_W_ADDR; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input [15:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; +input PORT_R_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(OPTION_WRITE_MODE), \ + .WRITE_MODE_B(OPTION_WRITE_MODE), \ + .READ_WIDTH_A(PORT_R_USED ? PORT_R_WIDTH : 0), \ + .READ_WIDTH_B(0), \ + .WRITE_WIDTH_A(0), \ + .WRITE_WIDTH_B(PORT_W_USED ? PORT_W_WIDTH : 0), \ + .DOA_REG(0), \ + .DOB_REG(0), \ + .RAM_MODE("SDP"), + +`define PORTS_COMMON \ + .CLKBWRCLK(PORT_W_CLK), \ + .CLKARDCLK(PORT_R_CLK), \ + .ENBWREN(PORT_W_CLK_EN), \ + .ENARDEN(PORT_R_CLK_EN), \ + .REGCEAREGCE(1'b0), \ + .REGCEB(1'b0), \ + .RSTRAMARSTRAM(PORT_R_RD_SRST), \ + .RSTRAMB(1'b0), \ + .RSTREGARSTREG(1'b0), \ + .RSTREGB(1'b0), \ + .WEA(0), \ + .WEBWE(PORT_W_WR_EN), + +`MAKE_DI(DI, DIP, PORT_W_WR_DATA) +`MAKE_DO(DO, DOP, PORT_R_RD_DATA) + +generate + +if (OPTION_MODE == "HALF") begin + RAMB18E1 #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + .INIT_A(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_INIT_VALUE[17:0]) : ival(PORT_R_WIDTH, PORT_R_RD_INIT_VALUE)), + .INIT_B(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_INIT_VALUE[35:18]) : 0), + .SRVAL_A(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_SRST_VALUE[17:0]) : ival(PORT_R_WIDTH, PORT_R_RD_SRST_VALUE)), + .SRVAL_B(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_SRST_VALUE[35:18]) : 0), + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .ADDRARDADDR(PORT_R_ADDR[13:0]), + .ADDRBWRADDR(PORT_W_ADDR[13:0]), + .DOADO(DO[15:0]), + .DOBDO(DO[31:16]), + .DOPADOP(DOP[1:0]), + .DOPBDOP(DOP[3:2]), + .DIADI(DI[15:0]), + .DIBDI(PORT_W_WIDTH == 36 ? DI[31:16] : DI[15:0]), + .DIPADIP(DIP[1:0]), + .DIPBDIP(PORT_W_WIDTH == 36 ? DIP[3:2] : DIP[1:0]), + ); +end else if (OPTION_MODE == "FULL") begin + RAMB36E1 #( + `PARAMS_INIT_36 + `PARAMS_INITP_36 + `PARAMS_COMMON + .INIT_A(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_INIT_VALUE[35:0]) : ival(PORT_R_WIDTH, PORT_R_RD_INIT_VALUE)), + .INIT_B(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_INIT_VALUE[71:36]) : 0), + .SRVAL_A(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_SRST_VALUE[35:0]) : ival(PORT_R_WIDTH, PORT_R_RD_SRST_VALUE)), + .SRVAL_B(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_SRST_VALUE[71:36]) : 0), + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .ADDRARDADDR({1'b1, PORT_R_ADDR}), + .ADDRBWRADDR({1'b1, PORT_W_ADDR}), + .DOADO(DO[31:0]), + .DOBDO(DO[63:32]), + .DOPADOP(DOP[3:0]), + .DOPBDOP(DOP[7:4]), + .DIADI(DI[31:0]), + .DIBDI(PORT_W_WIDTH == 72 ? DI[63:32] : DI[31:0]), + .DIPADIP(DIP[3:0]), + .DIPBDIP(PORT_W_WIDTH == 71 ? DIP[7:4] : DIP[3:0]), + ); +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xcu_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xcu_map.v new file mode 100644 index 0000000..d48c21a --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xcu_map.v @@ -0,0 +1,225 @@ +module $__XILINX_BLOCKRAM_TDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; +parameter OPTION_HAS_RDFIRST = 0; + +parameter PORT_A_RD_WIDTH = 1; +parameter PORT_A_WR_WIDTH = 1; +parameter PORT_A_WR_EN_WIDTH = 1; +parameter PORT_A_RD_USED = 1; +parameter PORT_A_WR_USED = 1; +parameter PORT_A_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_A_RD_INIT_VALUE = 0; +parameter PORT_A_RD_SRST_VALUE = 1; + +parameter PORT_B_RD_WIDTH = 1; +parameter PORT_B_WR_WIDTH = 1; +parameter PORT_B_WR_EN_WIDTH = 1; +parameter PORT_B_RD_USED = 0; +parameter PORT_B_WR_USED = 0; +parameter PORT_B_OPTION_WRITE_MODE = "NO_CHANGE"; +parameter PORT_B_RD_INIT_VALUE = 0; +parameter PORT_B_RD_SRST_VALUE = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [15:0] PORT_A_ADDR; +input [PORT_A_WR_WIDTH-1:0] PORT_A_WR_DATA; +input [PORT_A_WR_EN_WIDTH-1:0] PORT_A_WR_EN; +output [PORT_A_RD_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [15:0] PORT_B_ADDR; +input [PORT_B_WR_WIDTH-1:0] PORT_B_WR_DATA; +input [PORT_B_WR_EN_WIDTH-1:0] PORT_B_WR_EN; +output [PORT_B_RD_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(PORT_A_OPTION_WRITE_MODE), \ + .WRITE_MODE_B(PORT_B_OPTION_WRITE_MODE), \ + .READ_WIDTH_A(PORT_A_RD_USED ? PORT_A_RD_WIDTH : 0), \ + .READ_WIDTH_B(PORT_B_RD_USED ? PORT_B_RD_WIDTH : 0), \ + .WRITE_WIDTH_A(PORT_A_WR_USED ? PORT_A_WR_WIDTH : 0), \ + .WRITE_WIDTH_B(PORT_B_WR_USED ? PORT_B_WR_WIDTH : 0), \ + .DOA_REG(0), \ + .DOB_REG(0), \ + .INIT_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_INIT_VALUE)), \ + .INIT_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_INIT_VALUE)), \ + .SRVAL_A(ival(PORT_A_RD_WIDTH, PORT_A_RD_SRST_VALUE)), \ + .SRVAL_B(ival(PORT_B_RD_WIDTH, PORT_B_RD_SRST_VALUE)), + +`define PORTS_COMMON \ + .DOUTADOUT(DO_A), \ + .DOUTPADOUTP(DOP_A), \ + .DINADIN(DI_A), \ + .DINPADINP(DIP_A), \ + .DOUTBDOUT(DO_B), \ + .DOUTPBDOUTP(DOP_B), \ + .DINBDIN(DI_B), \ + .DINPBDINP(DIP_B), \ + .CLKARDCLK(PORT_A_CLK), \ + .CLKBWRCLK(PORT_B_CLK), \ + .ENARDEN(PORT_A_CLK_EN), \ + .ENBWREN(PORT_B_CLK_EN), \ + .REGCEAREGCE(1'b0), \ + .REGCEB(1'b0), \ + .ADDRENA(1'b1), \ + .ADDRENB(1'b1), \ + .RSTRAMARSTRAM(PORT_A_RD_SRST), \ + .RSTRAMB(PORT_B_RD_SRST), \ + .RSTREGARSTREG(1'b0), \ + .RSTREGB(1'b0), \ + .WEA(WE_A), \ + .WEBWE(WE_B), \ + .ADDRARDADDR(PORT_A_ADDR), \ + .ADDRBWRADDR(PORT_B_ADDR), \ + .SLEEP(1'b0), + +`MAKE_DI(DI_A, DIP_A, PORT_A_WR_DATA) +`MAKE_DI(DI_B, DIP_B, PORT_B_WR_DATA) +`MAKE_DO(DO_A, DOP_A, PORT_A_RD_DATA) +`MAKE_DO(DO_B, DOP_B, PORT_B_RD_DATA) + +wire [3:0] WE_A = {4{PORT_A_WR_EN}}; +wire [3:0] WE_B = {4{PORT_B_WR_EN}}; + +generate + +if (OPTION_MODE == "HALF") begin + RAMB18E2 #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + ); +end else if (OPTION_MODE == "FULL") begin + RAMB36E2 #( + `PARAMS_INIT_36 + `PARAMS_INITP_36 + `PARAMS_COMMON + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + ); +end + +endgenerate + +endmodule + + +module $__XILINX_BLOCKRAM_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_MODE = "FULL"; +parameter OPTION_WRITE_MODE = "READ_FIRST"; + +parameter PORT_W_WIDTH = 1; +parameter PORT_W_WR_EN_WIDTH = 1; +parameter PORT_W_USED = 1; + +parameter PORT_R_WIDTH = 1; +parameter PORT_R_USED = 0; +parameter PORT_R_RD_INIT_VALUE = 0; +parameter PORT_R_RD_SRST_VALUE = 0; + +input PORT_W_CLK; +input PORT_W_CLK_EN; +input [15:0] PORT_W_ADDR; +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; +input [PORT_W_WR_EN_WIDTH-1:0] PORT_W_WR_EN; + +input PORT_R_CLK; +input PORT_R_CLK_EN; +input [15:0] PORT_R_ADDR; +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; +input PORT_R_RD_SRST; + +`include "brams_defs.vh" + +`define PARAMS_COMMON \ + .WRITE_MODE_A(OPTION_WRITE_MODE), \ + .WRITE_MODE_B(OPTION_WRITE_MODE), \ + .READ_WIDTH_A(PORT_R_USED ? PORT_R_WIDTH : 0), \ + .READ_WIDTH_B(0), \ + .WRITE_WIDTH_A(0), \ + .WRITE_WIDTH_B(PORT_W_USED ? PORT_W_WIDTH : 0), \ + .DOA_REG(0), \ + .DOB_REG(0), + +`define PORTS_COMMON \ + .CLKBWRCLK(PORT_W_CLK), \ + .CLKARDCLK(PORT_R_CLK), \ + .ENBWREN(PORT_W_CLK_EN), \ + .ENARDEN(PORT_R_CLK_EN), \ + .REGCEAREGCE(1'b0), \ + .REGCEB(1'b0), \ + .ADDRENA(1'b1), \ + .ADDRENB(1'b1), \ + .RSTRAMARSTRAM(PORT_R_RD_SRST), \ + .RSTRAMB(1'b0), \ + .RSTREGARSTREG(1'b0), \ + .RSTREGB(1'b0), \ + .WEA(0), \ + .WEBWE(PORT_W_WR_EN), \ + .ADDRARDADDR(PORT_R_ADDR), \ + .ADDRBWRADDR(PORT_W_ADDR), \ + .SLEEP(1'b0), + +`MAKE_DI(DI, DIP, PORT_W_WR_DATA) +`MAKE_DO(DO, DOP, PORT_R_RD_DATA) + +generate + +if (OPTION_MODE == "HALF") begin + RAMB18E2 #( + `PARAMS_INIT_18 + `PARAMS_INITP_18 + `PARAMS_COMMON + .INIT_A(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_INIT_VALUE[17:0]) : ival(PORT_R_WIDTH, PORT_R_RD_INIT_VALUE)), + .INIT_B(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_INIT_VALUE[35:18]) : 0), + .SRVAL_A(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_SRST_VALUE[17:0]) : ival(PORT_R_WIDTH, PORT_R_RD_SRST_VALUE)), + .SRVAL_B(PORT_R_WIDTH == 36 ? ival(18, PORT_R_RD_SRST_VALUE[35:18]) : 0), + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .DOUTADOUT(DO[15:0]), + .DOUTBDOUT(DO[31:16]), + .DOUTPADOUTP(DOP[1:0]), + .DOUTPBDOUTP(DOP[3:2]), + .DINADIN(DI[15:0]), + .DINBDIN(PORT_W_WIDTH == 36 ? DI[31:16] : DI[15:0]), + .DINPADINP(DIP[1:0]), + .DINPBDINP(PORT_W_WIDTH == 36 ? DIP[3:2] : DIP[1:0]), + ); +end else if (OPTION_MODE == "FULL") begin + RAMB36E2 #( + `PARAMS_INIT_36 + `PARAMS_INITP_36 + `PARAMS_COMMON + .INIT_A(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_INIT_VALUE[35:0]) : ival(PORT_R_WIDTH, PORT_R_RD_INIT_VALUE)), + .INIT_B(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_INIT_VALUE[71:36]) : 0), + .SRVAL_A(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_SRST_VALUE[35:0]) : ival(PORT_R_WIDTH, PORT_R_RD_SRST_VALUE)), + .SRVAL_B(PORT_R_WIDTH == 72 ? ival(36, PORT_R_RD_SRST_VALUE[71:36]) : 0), + ) _TECHMAP_REPLACE_ ( + `PORTS_COMMON + .DOUTADOUT(DO[31:0]), + .DOUTBDOUT(DO[63:32]), + .DOUTPADOUTP(DOP[3:0]), + .DOUTPBDOUTP(DOP[7:4]), + .DINADIN(DI[31:0]), + .DINBDIN(PORT_W_WIDTH == 72 ? DI[63:32] : DI[31:0]), + .DINPADINP(DIP[3:0]), + .DINPBDINP(PORT_W_WIDTH == 71 ? DIP[7:4] : DIP[3:0]), + ); +end + +endgenerate + +endmodule + diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xcv.txt b/resources/netlist/resources/kernel/share/xilinx/brams_xcv.txt new file mode 100644 index 0000000..294e903 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xcv.txt @@ -0,0 +1,17 @@ +# Block RAMs for the original Virtex. +# The corresponding mapping file is brams_xcv_map.v + +ram block $__XILINX_BLOCKRAM_ { + abits 12; + widths 1 2 4 8 16 per_port; + cost 32; + init any; + port srsw "A" "B" { + clock posedge; + clken; + rdwr new; + rdinit zero; + rdsrst zero gated_clken; + optional; + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/brams_xcv_map.v b/resources/netlist/resources/kernel/share/xilinx/brams_xcv_map.v new file mode 100644 index 0000000..408cc67 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/brams_xcv_map.v @@ -0,0 +1,257 @@ +module $__XILINX_BLOCKRAM_ (...); + +parameter INIT = 0; + +parameter PORT_A_WIDTH = 1; +parameter PORT_B_WIDTH = 1; +parameter PORT_A_USED = 1; +parameter PORT_B_USED = 0; + +input PORT_A_CLK; +input PORT_A_CLK_EN; +input [11:0] PORT_A_ADDR; +input [PORT_A_WIDTH-1:0] PORT_A_WR_DATA; +input PORT_A_WR_EN; +output [PORT_A_WIDTH-1:0] PORT_A_RD_DATA; +input PORT_A_RD_SRST; + +input PORT_B_CLK; +input PORT_B_CLK_EN; +input [11:0] PORT_B_ADDR; +input [PORT_B_WIDTH-1:0] PORT_B_WR_DATA; +input PORT_B_WR_EN; +output [PORT_B_WIDTH-1:0] PORT_B_RD_DATA; +input PORT_B_RD_SRST; + +`define PARAMS_INIT \ + .INIT_00(INIT[0*256+:256]), \ + .INIT_01(INIT[1*256+:256]), \ + .INIT_02(INIT[2*256+:256]), \ + .INIT_03(INIT[3*256+:256]), \ + .INIT_04(INIT[4*256+:256]), \ + .INIT_05(INIT[5*256+:256]), \ + .INIT_06(INIT[6*256+:256]), \ + .INIT_07(INIT[7*256+:256]), \ + .INIT_08(INIT[8*256+:256]), \ + .INIT_09(INIT[9*256+:256]), \ + .INIT_0A(INIT[10*256+:256]), \ + .INIT_0B(INIT[11*256+:256]), \ + .INIT_0C(INIT[12*256+:256]), \ + .INIT_0D(INIT[13*256+:256]), \ + .INIT_0E(INIT[14*256+:256]), \ + .INIT_0F(INIT[15*256+:256]), + +`define PORTS_DP(addr_slice_a, addr_slice_b) \ + .CLKA(PORT_A_CLK), \ + .ENA(PORT_A_CLK_EN), \ + .WEA(PORT_A_WR_EN), \ + .RSTA(PORT_A_RD_SRST), \ + .ADDRA(PORT_A_ADDR addr_slice_a), \ + .DOA(PORT_A_RD_DATA), \ + .DIA(PORT_A_WR_DATA), \ + .CLKB(PORT_B_CLK), \ + .ENB(PORT_B_CLK_EN), \ + .WEB(PORT_B_WR_EN), \ + .RSTB(PORT_B_RD_SRST), \ + .ADDRB(PORT_B_ADDR addr_slice_b), \ + .DOB(PORT_B_RD_DATA), \ + .DIB(PORT_B_WR_DATA), + +`define PORTS_DP_SWAP(addr_slice_a, addr_slice_b) \ + .CLKB(PORT_A_CLK), \ + .ENB(PORT_A_CLK_EN), \ + .WEB(PORT_A_WR_EN), \ + .RSTB(PORT_A_RD_SRST), \ + .ADDRB(PORT_A_ADDR addr_slice_a), \ + .DOB(PORT_A_RD_DATA), \ + .DIB(PORT_A_WR_DATA), \ + .CLKA(PORT_B_CLK), \ + .ENA(PORT_B_CLK_EN), \ + .WEA(PORT_B_WR_EN), \ + .RSTA(PORT_B_RD_SRST), \ + .ADDRA(PORT_B_ADDR addr_slice_b), \ + .DOA(PORT_B_RD_DATA), \ + .DIA(PORT_B_WR_DATA), + +`define PORTS_SP(addr_slice) \ + .CLK(PORT_A_CLK), \ + .EN(PORT_A_CLK_EN), \ + .WE(PORT_A_WR_EN), \ + .RST(PORT_A_RD_SRST), \ + .ADDR(PORT_A_ADDR addr_slice), \ + .DO(PORT_A_RD_DATA), \ + .DI(PORT_A_WR_DATA), + +generate + +if (!PORT_B_USED) begin + case (PORT_A_WIDTH) + 1: RAMB4_S1 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([11:0]) + ); + 2: RAMB4_S2 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([11:1]) + ); + 4: RAMB4_S4 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([11:2]) + ); + 8: RAMB4_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([11:3]) + ); + 16: RAMB4_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_SP([11:4]) + ); + endcase +end else begin + case (PORT_A_WIDTH) + 1: case(PORT_B_WIDTH) + 1: RAMB4_S1_S1 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:0], [11:0]) + ); + 2: RAMB4_S1_S2 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:0], [11:1]) + ); + 4: RAMB4_S1_S4 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:0], [11:2]) + ); + 8: RAMB4_S1_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:0], [11:3]) + ); + 16: RAMB4_S1_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:0], [11:4]) + ); + endcase + 2: case(PORT_B_WIDTH) + 1: RAMB4_S1_S2 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:1], [11:0]) + ); + 2: RAMB4_S2_S2 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:1], [11:1]) + ); + 4: RAMB4_S2_S4 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:1], [11:2]) + ); + 8: RAMB4_S2_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:1], [11:3]) + ); + 16: RAMB4_S2_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:1], [11:4]) + ); + endcase + 4: case(PORT_B_WIDTH) + 1: RAMB4_S1_S4 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:2], [11:0]) + ); + 2: RAMB4_S2_S4 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:2], [11:1]) + ); + 4: RAMB4_S4_S4 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:2], [11:2]) + ); + 8: RAMB4_S4_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:2], [11:3]) + ); + 16: RAMB4_S4_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:2], [11:4]) + ); + endcase + 8: case(PORT_B_WIDTH) + 1: RAMB4_S1_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:3], [11:0]) + ); + 2: RAMB4_S2_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:3], [11:1]) + ); + 4: RAMB4_S4_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:3], [11:2]) + ); + 8: RAMB4_S8_S8 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:3], [11:3]) + ); + 16: RAMB4_S8_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:3], [11:4]) + ); + endcase + 16: case(PORT_B_WIDTH) + 1: RAMB4_S1_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:4], [11:0]) + ); + 2: RAMB4_S2_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:4], [11:1]) + ); + 4: RAMB4_S4_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:4], [11:2]) + ); + 8: RAMB4_S8_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP_SWAP([11:4], [11:3]) + ); + 16: RAMB4_S16_S16 #( + `PARAMS_INIT + ) _TECHMAP_REPLACE_ ( + `PORTS_DP([11:4], [11:4]) + ); + endcase + endcase +end + +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/cells_map.v b/resources/netlist/resources/kernel/share/xilinx/cells_map.v new file mode 100644 index 0000000..2b8eade --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/cells_map.v @@ -0,0 +1,361 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * 2019 Eddie Hung + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +module \$__SHREG_ (input C, input D, input E, output Q); + parameter DEPTH = 0; + parameter [DEPTH-1:0] INIT = 0; + parameter CLKPOL = 1; + parameter ENPOL = 2; + + \$__XILINX_SHREG_ #(.DEPTH(DEPTH), .INIT(INIT), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) _TECHMAP_REPLACE_ (.C(C), .D(D), .L(DEPTH-1), .E(E), .Q(Q)); +endmodule + +module \$__XILINX_SHREG_ (input C, input D, input [31:0] L, input E, output Q, output SO); + parameter DEPTH = 0; + parameter [DEPTH-1:0] INIT = 0; + parameter CLKPOL = 1; + parameter ENPOL = 2; + + // shregmap's INIT parameter shifts out LSB first; + // however Xilinx expects MSB first + function [DEPTH-1:0] brev; + input [DEPTH-1:0] din; + integer i; + begin + for (i = 0; i < DEPTH; i=i+1) + brev[i] = din[DEPTH-1-i]; + end + endfunction + localparam [DEPTH-1:0] INIT_R = brev(INIT); + + parameter _TECHMAP_CONSTMSK_L_ = 0; + + wire CE; + generate + if (ENPOL == 0) + assign CE = ~E; + else if (ENPOL == 1) + assign CE = E; + else + assign CE = 1'b1; + if (DEPTH == 1) begin + if (CLKPOL) + FDRE #(.INIT(INIT_R)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(CE), .R(1'b0)); + else + FDRE_1 #(.INIT(INIT_R)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(CE), .R(1'b0)); + end else + if (DEPTH <= 16) begin + SRL16E #(.INIT(INIT_R), .IS_CLK_INVERTED(~CLKPOL[0])) _TECHMAP_REPLACE_ (.A0(L[0]), .A1(L[1]), .A2(L[2]), .A3(L[3]), .CE(CE), .CLK(C), .D(D), .Q(Q)); + end else + if (DEPTH > 17 && DEPTH <= 32) begin + SRLC32E #(.INIT(INIT_R), .IS_CLK_INVERTED(~CLKPOL[0])) _TECHMAP_REPLACE_ (.A(L[4:0]), .CE(CE), .CLK(C), .D(D), .Q(Q)); + end else + if (DEPTH > 33 && DEPTH <= 64) begin + wire T0, T1, T2; + SRLC32E #(.INIT(INIT_R[32-1:0]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_0 (.A(L[4:0]), .CE(CE), .CLK(C), .D(D), .Q(T0), .Q31(T1)); + \$__XILINX_SHREG_ #(.DEPTH(DEPTH-32), .INIT(INIT[DEPTH-32-1:0]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl_1 (.C(C), .D(T1), .L(L), .E(E), .Q(T2)); + if (&_TECHMAP_CONSTMSK_L_) + assign Q = T2; + else + MUXF7 fpga_mux_0 (.O(Q), .I0(T0), .I1(T2), .S(L[5])); + end else + if (DEPTH > 65 && DEPTH <= 96) begin + wire T0, T1, T2, T3, T4, T5, T6; + SRLC32E #(.INIT(INIT_R[32-1: 0]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_0 (.A(L[4:0]), .CE(CE), .CLK(C), .D( D), .Q(T0), .Q31(T1)); + SRLC32E #(.INIT(INIT_R[64-1:32]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_1 (.A(L[4:0]), .CE(CE), .CLK(C), .D(T1), .Q(T2), .Q31(T3)); + \$__XILINX_SHREG_ #(.DEPTH(DEPTH-64), .INIT(INIT[DEPTH-64-1:0]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl_2 (.C(C), .D(T3), .L(L[4:0]), .E(E), .Q(T4)); + if (&_TECHMAP_CONSTMSK_L_) + assign Q = T4; + else + \$__XILINX_MUXF78 fpga_hard_mux (.I0(T0), .I1(T2), .I2(T4), .I3(1'bx), .S0(L[5]), .S1(L[6]), .O(Q)); + end else + if (DEPTH > 97 && DEPTH < 128) begin + wire T0, T1, T2, T3, T4, T5, T6, T7, T8; + SRLC32E #(.INIT(INIT_R[32-1: 0]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_0 (.A(L[4:0]), .CE(CE), .CLK(C), .D( D), .Q(T0), .Q31(T1)); + SRLC32E #(.INIT(INIT_R[64-1:32]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_1 (.A(L[4:0]), .CE(CE), .CLK(C), .D(T1), .Q(T2), .Q31(T3)); + SRLC32E #(.INIT(INIT_R[96-1:64]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_2 (.A(L[4:0]), .CE(CE), .CLK(C), .D(T3), .Q(T4), .Q31(T5)); + \$__XILINX_SHREG_ #(.DEPTH(DEPTH-96), .INIT(INIT[DEPTH-96-1:0]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl_3 (.C(C), .D(T5), .L(L[4:0]), .E(E), .Q(T6)); + if (&_TECHMAP_CONSTMSK_L_) + assign Q = T6; + else + \$__XILINX_MUXF78 fpga_hard_mux (.I0(T0), .I1(T2), .I2(T4), .I3(T6), .S0(L[5]), .S1(L[6]), .O(Q)); + end + else if (DEPTH == 128) begin + wire T0, T1, T2, T3, T4, T5, T6; + SRLC32E #(.INIT(INIT_R[ 32-1: 0]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_0 (.A(L[4:0]), .CE(CE), .CLK(C), .D( D), .Q(T0), .Q31(T1)); + SRLC32E #(.INIT(INIT_R[ 64-1:32]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_1 (.A(L[4:0]), .CE(CE), .CLK(C), .D(T1), .Q(T2), .Q31(T3)); + SRLC32E #(.INIT(INIT_R[ 96-1:64]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_2 (.A(L[4:0]), .CE(CE), .CLK(C), .D(T3), .Q(T4), .Q31(T5)); + SRLC32E #(.INIT(INIT_R[128-1:96]), .IS_CLK_INVERTED(~CLKPOL[0])) fpga_srl_3 (.A(L[4:0]), .CE(CE), .CLK(C), .D(T5), .Q(T6), .Q31(SO)); + if (&_TECHMAP_CONSTMSK_L_) + assign Q = T6; + else + \$__XILINX_MUXF78 fpga_hard_mux (.I0(T0), .I1(T2), .I2(T4), .I3(T6), .S0(L[5]), .S1(L[6]), .O(Q)); + end + // For fixed length, if just 1 over a convenient value, decompose + else if (DEPTH <= 129 && &_TECHMAP_CONSTMSK_L_) begin + wire T; + \$__XILINX_SHREG_ #(.DEPTH(DEPTH-1), .INIT(INIT[DEPTH-1:1]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl (.C(C), .D(D), .L({32{1'b1}}), .E(E), .Q(T)); + \$__XILINX_SHREG_ #(.DEPTH(1), .INIT(INIT[0]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl_last (.C(C), .D(T), .L(L), .E(E), .Q(Q)); + end + // For variable length, if just 1 over a convenient value, then bump up one more + else if (DEPTH < 129 && ~&_TECHMAP_CONSTMSK_L_) + \$__XILINX_SHREG_ #(.DEPTH(DEPTH+1), .INIT({INIT,1'b0}), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) _TECHMAP_REPLACE_ (.C(C), .D(D), .L(L), .E(E), .Q(Q)); + else begin + localparam depth0 = 128; + localparam num_srl128 = DEPTH / depth0; + localparam depthN = DEPTH % depth0; + wire [num_srl128 + (depthN > 0 ? 1 : 0) - 1:0] T; + wire [num_srl128 + (depthN > 0 ? 1 : 0) :0] S; + assign S[0] = D; + genvar i; + for (i = 0; i < num_srl128; i++) + \$__XILINX_SHREG_ #(.DEPTH(depth0), .INIT(INIT[DEPTH-1-i*depth0-:depth0]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl (.C(C), .D(S[i]), .L(L[$clog2(depth0)-1:0]), .E(E), .Q(T[i]), .SO(S[i+1])); + + if (depthN > 0) + \$__XILINX_SHREG_ #(.DEPTH(depthN), .INIT(INIT[depthN-1:0]), .CLKPOL(CLKPOL), .ENPOL(ENPOL)) fpga_srl_last (.C(C), .D(S[num_srl128]), .L(L[$clog2(depth0)-1:0]), .E(E), .Q(T[num_srl128])); + + if (&_TECHMAP_CONSTMSK_L_) + assign Q = T[num_srl128 + (depthN > 0 ? 1 : 0) - 1]; + else + assign Q = T[L[DEPTH-1:$clog2(depth0)]]; + end + endgenerate +endmodule + +`ifdef MIN_MUX_INPUTS +module \$__XILINX_SHIFTX (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + parameter [A_WIDTH-1:0] _TECHMAP_CONSTMSK_A_ = 0; + parameter [A_WIDTH-1:0] _TECHMAP_CONSTVAL_A_ = 0; + parameter [B_WIDTH-1:0] _TECHMAP_CONSTMSK_B_ = 0; + parameter [B_WIDTH-1:0] _TECHMAP_CONSTVAL_B_ = 0; + + function integer A_WIDTH_trimmed; + input integer start; + begin + A_WIDTH_trimmed = start; + while (A_WIDTH_trimmed > 0 && _TECHMAP_CONSTMSK_A_[A_WIDTH_trimmed-1] && _TECHMAP_CONSTVAL_A_[A_WIDTH_trimmed-1] === 1'bx) + A_WIDTH_trimmed = A_WIDTH_trimmed - 1; + end + endfunction + + generate + genvar i, j; + // Bit-blast + if (Y_WIDTH > 1) begin + for (i = 0; i < Y_WIDTH; i++) + \$__XILINX_SHIFTX #(.A_SIGNED(A_SIGNED), .B_SIGNED(B_SIGNED), .A_WIDTH(A_WIDTH-Y_WIDTH+1), .B_WIDTH(B_WIDTH), .Y_WIDTH(1'd1)) bitblast (.A(A[A_WIDTH-Y_WIDTH+i:i]), .B(B), .Y(Y[i])); + end + // If the LSB of B is constant zero (and Y_WIDTH is 1) then + // we can optimise by removing every other entry from A + // and popping the constant zero from B + else if (_TECHMAP_CONSTMSK_B_[0] && !_TECHMAP_CONSTVAL_B_[0]) begin + wire [(A_WIDTH+1)/2-1:0] A_i; + for (i = 0; i < (A_WIDTH+1)/2; i++) + assign A_i[i] = A[i*2]; + \$__XILINX_SHIFTX #(.A_SIGNED(A_SIGNED), .B_SIGNED(B_SIGNED), .A_WIDTH((A_WIDTH+1'd1)/2'd2), .B_WIDTH(B_WIDTH-1'd1), .Y_WIDTH(Y_WIDTH)) _TECHMAP_REPLACE_ (.A(A_i), .B(B[B_WIDTH-1:1]), .Y(Y)); + end + // Trim off any leading 1'bx -es in A + else if (_TECHMAP_CONSTMSK_A_[A_WIDTH-1] && _TECHMAP_CONSTVAL_A_[A_WIDTH-1] === 1'bx) begin + localparam A_WIDTH_new = A_WIDTH_trimmed(A_WIDTH-1); + \$__XILINX_SHIFTX #(.A_SIGNED(A_SIGNED), .B_SIGNED(B_SIGNED), .A_WIDTH(A_WIDTH_new), .B_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) _TECHMAP_REPLACE_ (.A(A[A_WIDTH_new-1:0]), .B(B), .Y(Y)); + end + else if (A_WIDTH < `MIN_MUX_INPUTS) begin + wire _TECHMAP_FAIL_ = 1; + end + else if (A_WIDTH == 2) begin + MUXF7 fpga_hard_mux (.I0(A[0]), .I1(A[1]), .S(B[0]), .O(Y)); + end + else if (A_WIDTH <= 4) begin + wire [4-1:0] Ax; + if (A_WIDTH == 4) + assign Ax = A; + else + // Rather than extend with 1'bx which gets flattened to 1'b0 + // causing the "don't care" status to get lost, extend with + // the same driver of F7B.I0 so that we can optimise F7B away + // later + assign Ax = {A[1], A}; + \$__XILINX_MUXF78 fpga_hard_mux (.I0(Ax[0]), .I1(Ax[2]), .I2(Ax[1]), .I3(Ax[3]), .S0(B[1]), .S1(B[0]), .O(Y)); + end + // Note that the following decompositions are 'backwards' in that + // the LSBs are placed on the hard resources, and the soft resources + // are used for MSBs. + // This has the effect of more effectively utilising the hard mux; + // take for example a 5:1 multiplexer, currently this would map as: + // + // A[0] \___ __ A[0] \__ __ + // A[4] / \| \ whereas the more A[1] / \| \ + // A[1] _____| | obvious mapping A[2] \___| | + // A[2] _____| |-- of MSBs to hard A[3] / | |__ + // A[3]______| | resources would A[4] ____| | + // |__/ lead to: 1'bx ____| | + // || |__/ + // || || + // B[1:0] B[1:2] + // + // Expectation would be that the 'forward' mapping (right) is more + // area efficient (consider a 9:1 multiplexer using 2x4:1 multiplexers + // on its I0 and I1 inputs, and A[8] and 1'bx on its I2 and I3 inputs) + // but that the 'backwards' mapping (left) is more delay efficient + // since smaller LUTs are faster than wider ones. + else if (A_WIDTH <= 8) begin + wire [8-1:0] Ax = {{{8-A_WIDTH}{1'bx}}, A}; + wire T0 = B[2] ? Ax[4] : Ax[0]; + wire T1 = B[2] ? Ax[5] : Ax[1]; + wire T2 = B[2] ? Ax[6] : Ax[2]; + wire T3 = B[2] ? Ax[7] : Ax[3]; + \$__XILINX_MUXF78 fpga_hard_mux (.I0(T0), .I1(T2), .I2(T1), .I3(T3), .S0(B[1]), .S1(B[0]), .O(Y)); + end + else if (A_WIDTH <= 16) begin + wire [16-1:0] Ax = {{{16-A_WIDTH}{1'bx}}, A}; + wire T0 = B[2] ? B[3] ? Ax[12] : Ax[4] + : B[3] ? Ax[ 8] : Ax[0]; + wire T1 = B[2] ? B[3] ? Ax[13] : Ax[5] + : B[3] ? Ax[ 9] : Ax[1]; + wire T2 = B[2] ? B[3] ? Ax[14] : Ax[6] + : B[3] ? Ax[10] : Ax[2]; + wire T3 = B[2] ? B[3] ? Ax[15] : Ax[7] + : B[3] ? Ax[11] : Ax[3]; + \$__XILINX_MUXF78 fpga_hard_mux (.I0(T0), .I1(T2), .I2(T1), .I3(T3), .S0(B[1]), .S1(B[0]), .O(Y)); + end + else begin + localparam num_mux16 = (A_WIDTH+15) / 16; + localparam clog2_num_mux16 = $clog2(num_mux16); + wire [num_mux16-1:0] T; + wire [num_mux16*16-1:0] Ax = {{(num_mux16*16-A_WIDTH){1'bx}}, A}; + for (i = 0; i < num_mux16; i++) + \$__XILINX_SHIFTX #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(16), + .B_WIDTH(4), + .Y_WIDTH(Y_WIDTH) + ) fpga_mux ( + .A(Ax[i*16+:16]), + .B(B[3:0]), + .Y(T[i]) + ); + \$__XILINX_SHIFTX #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(num_mux16), + .B_WIDTH(clog2_num_mux16), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A(T), + .B(B[B_WIDTH-1-:clog2_num_mux16]), + .Y(Y)); + end + endgenerate +endmodule + +(* techmap_celltype = "$__XILINX_SHIFTX" *) +module _90__XILINX_SHIFTX (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + \$shiftx #(.A_SIGNED(A_SIGNED), .B_SIGNED(B_SIGNED), .A_WIDTH(A_WIDTH), .B_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) _TECHMAP_REPLACE_ (.A(A), .B(B), .Y(Y)); +endmodule + +module \$_MUX_ (A, B, S, Y); + input A, B, S; + output Y; + generate + if (`MIN_MUX_INPUTS == 2) + \$__XILINX_SHIFTX #(.A_SIGNED(0), .B_SIGNED(0), .A_WIDTH(2), .B_WIDTH(1), .Y_WIDTH(1)) _TECHMAP_REPLACE_ (.A({B,A}), .B(S), .Y(Y)); + else + wire _TECHMAP_FAIL_ = 1; + endgenerate +endmodule + +module \$_MUX4_ (A, B, C, D, S, T, Y); + input A, B, C, D, S, T; + output Y; + \$__XILINX_SHIFTX #(.A_SIGNED(0), .B_SIGNED(0), .A_WIDTH(4), .B_WIDTH(2), .Y_WIDTH(1)) _TECHMAP_REPLACE_ (.A({D,C,B,A}), .B({T,S}), .Y(Y)); +endmodule + +module \$_MUX8_ (A, B, C, D, E, F, G, H, S, T, U, Y); + input A, B, C, D, E, F, G, H, S, T, U; + output Y; + \$__XILINX_SHIFTX #(.A_SIGNED(0), .B_SIGNED(0), .A_WIDTH(8), .B_WIDTH(3), .Y_WIDTH(1)) _TECHMAP_REPLACE_ (.A({H,G,F,E,D,C,B,A}), .B({U,T,S}), .Y(Y)); +endmodule + +module \$_MUX16_ (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, S, T, U, V, Y); + input A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, S, T, U, V; + output Y; + \$__XILINX_SHIFTX #(.A_SIGNED(0), .B_SIGNED(0), .A_WIDTH(16), .B_WIDTH(4), .Y_WIDTH(1)) _TECHMAP_REPLACE_ (.A({P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A}), .B({V,U,T,S}), .Y(Y)); +endmodule +`endif + +module \$__XILINX_MUXF78 (O, I0, I1, I2, I3, S0, S1); + output O; + input I0, I1, I2, I3, S0, S1; + wire T0, T1; + parameter _TECHMAP_BITS_CONNMAP_ = 0; + parameter [_TECHMAP_BITS_CONNMAP_-1:0] _TECHMAP_CONNMAP_I0_ = 0; + parameter [_TECHMAP_BITS_CONNMAP_-1:0] _TECHMAP_CONNMAP_I1_ = 0; + parameter [_TECHMAP_BITS_CONNMAP_-1:0] _TECHMAP_CONNMAP_I2_ = 0; + parameter [_TECHMAP_BITS_CONNMAP_-1:0] _TECHMAP_CONNMAP_I3_ = 0; + parameter _TECHMAP_CONSTMSK_S0_ = 0; + parameter _TECHMAP_CONSTVAL_S0_ = 0; + parameter _TECHMAP_CONSTMSK_S1_ = 0; + parameter _TECHMAP_CONSTVAL_S1_ = 0; + if (_TECHMAP_CONSTMSK_S0_ && _TECHMAP_CONSTVAL_S0_ === 1'b1) + assign T0 = I1; + else if (_TECHMAP_CONSTMSK_S0_ || _TECHMAP_CONNMAP_I0_ === _TECHMAP_CONNMAP_I1_) + assign T0 = I0; + else + MUXF7 mux7a (.I0(I0), .I1(I1), .S(S0), .O(T0)); + if (_TECHMAP_CONSTMSK_S0_ && _TECHMAP_CONSTVAL_S0_ === 1'b1) + assign T1 = I3; + else if (_TECHMAP_CONSTMSK_S0_ || _TECHMAP_CONNMAP_I2_ === _TECHMAP_CONNMAP_I3_) + assign T1 = I2; + else + MUXF7 mux7b (.I0(I2), .I1(I3), .S(S0), .O(T1)); + if (_TECHMAP_CONSTMSK_S1_ && _TECHMAP_CONSTVAL_S1_ === 1'b1) + assign O = T1; + else if (_TECHMAP_CONSTMSK_S1_ || (_TECHMAP_CONNMAP_I0_ === _TECHMAP_CONNMAP_I1_ && _TECHMAP_CONNMAP_I1_ === _TECHMAP_CONNMAP_I2_ && _TECHMAP_CONNMAP_I2_ === _TECHMAP_CONNMAP_I3_)) + assign O = T0; + else + MUXF8 mux8 (.I0(T0), .I1(T1), .S(S1), .O(O)); +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/cells_sim.v b/resources/netlist/resources/kernel/share/xilinx/cells_sim.v new file mode 100644 index 0000000..ee5a89e --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/cells_sim.v @@ -0,0 +1,4392 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// See Xilinx UG953 and UG474 for a description of the cell types below. +// http://www.xilinx.com/support/documentation/user_guides/ug474_7Series_CLB.pdf +// http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_4/ug953-vivado-7series-libraries.pdf + +module VCC(output P); + assign P = 1; +endmodule + +module GND(output G); + assign G = 0; +endmodule + +module IBUF( + output O, + (* iopad_external_pin *) + input I); + parameter IOSTANDARD = "default"; + parameter IBUF_LOW_PWR = 0; + assign O = I; + specify + (I => O) = 0; + endspecify +endmodule + +module IBUFG( + output O, + (* iopad_external_pin *) + input I); + parameter CAPACITANCE = "DONT_CARE"; + parameter IBUF_DELAY_VALUE = "0"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + assign O = I; +endmodule + +module OBUF( + (* iopad_external_pin *) + output O, + input I); + parameter IOSTANDARD = "default"; + parameter DRIVE = 12; + parameter SLEW = "SLOW"; + assign O = I; + specify + (I => O) = 0; + endspecify +endmodule + +module IOBUF ( + (* iopad_external_pin *) + inout IO, + output O, + input I, + input T +); + parameter integer DRIVE = 12; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SLEW = "SLOW"; + assign IO = T ? 1'bz : I; + assign O = IO; + specify + (I => IO) = 0; + (IO => O) = 0; + endspecify +endmodule + +module OBUFT ( + (* iopad_external_pin *) + output O, + input I, + input T +); + parameter CAPACITANCE = "DONT_CARE"; + parameter integer DRIVE = 12; + parameter IOSTANDARD = "DEFAULT"; + parameter SLEW = "SLOW"; + assign O = T ? 1'bz : I; + specify + (I => O) = 0; + endspecify +endmodule + +module BUFG( + (* clkbuf_driver *) + output O, + input I); + assign O = I; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/CLK_BUFG_TOP_R.sdf#L11 + (I => O) = 96; + endspecify +endmodule + +module BUFGCTRL( + (* clkbuf_driver *) + output O, + input I0, input I1, + (* invertible_pin = "IS_S0_INVERTED" *) + input S0, + (* invertible_pin = "IS_S1_INVERTED" *) + input S1, + (* invertible_pin = "IS_CE0_INVERTED" *) + input CE0, + (* invertible_pin = "IS_CE1_INVERTED" *) + input CE1, + (* invertible_pin = "IS_IGNORE0_INVERTED" *) + input IGNORE0, + (* invertible_pin = "IS_IGNORE1_INVERTED" *) + input IGNORE1); + +parameter [0:0] INIT_OUT = 1'b0; +parameter PRESELECT_I0 = "FALSE"; +parameter PRESELECT_I1 = "FALSE"; +parameter [0:0] IS_CE0_INVERTED = 1'b0; +parameter [0:0] IS_CE1_INVERTED = 1'b0; +parameter [0:0] IS_S0_INVERTED = 1'b0; +parameter [0:0] IS_S1_INVERTED = 1'b0; +parameter [0:0] IS_IGNORE0_INVERTED = 1'b0; +parameter [0:0] IS_IGNORE1_INVERTED = 1'b0; + +wire I0_internal = ((CE0 ^ IS_CE0_INVERTED) ? I0 : INIT_OUT); +wire I1_internal = ((CE1 ^ IS_CE1_INVERTED) ? I1 : INIT_OUT); +wire S0_true = (S0 ^ IS_S0_INVERTED); +wire S1_true = (S1 ^ IS_S1_INVERTED); + +assign O = S0_true ? I0_internal : (S1_true ? I1_internal : INIT_OUT); + +endmodule + +module BUFHCE( + (* clkbuf_driver *) + output O, + input I, + (* invertible_pin = "IS_CE_INVERTED" *) + input CE); + +parameter [0:0] INIT_OUT = 1'b0; +parameter CE_TYPE = "SYNC"; +parameter [0:0] IS_CE_INVERTED = 1'b0; + +assign O = ((CE ^ IS_CE_INVERTED) ? I : INIT_OUT); + +endmodule + +// module OBUFT(output O, input I, T); +// assign O = T ? 1'bz : I; +// endmodule + +// module IOBUF(inout IO, output O, input I, T); +// assign O = IO, IO = T ? 1'bz : I; +// endmodule + +module INV( + (* clkbuf_inv = "I" *) + output O, + input I +); + assign O = !I; + specify + (I => O) = 127; + endspecify +endmodule + +(* abc9_lut=1 *) +module LUT1(output O, input I0); + parameter [1:0] INIT = 0; + assign O = I0 ? INIT[1] : INIT[0]; + specify + (I0 => O) = 127; + endspecify +endmodule + +(* abc9_lut=2 *) +module LUT2(output O, input I0, I1); + parameter [3:0] INIT = 0; + wire [ 1: 0] s1 = I1 ? INIT[ 3: 2] : INIT[ 1: 0]; + assign O = I0 ? s1[1] : s1[0]; + specify + (I0 => O) = 238; + (I1 => O) = 127; + endspecify +endmodule + +(* abc9_lut=3 *) +module LUT3(output O, input I0, I1, I2); + parameter [7:0] INIT = 0; + wire [ 3: 0] s2 = I2 ? INIT[ 7: 4] : INIT[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign O = I0 ? s1[1] : s1[0]; + specify + (I0 => O) = 407; + (I1 => O) = 238; + (I2 => O) = 127; + endspecify +endmodule + +(* abc9_lut=3 *) +module LUT4(output O, input I0, I1, I2, I3); + parameter [15:0] INIT = 0; + wire [ 7: 0] s3 = I3 ? INIT[15: 8] : INIT[ 7: 0]; + wire [ 3: 0] s2 = I2 ? s3[ 7: 4] : s3[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign O = I0 ? s1[1] : s1[0]; + specify + (I0 => O) = 472; + (I1 => O) = 407; + (I2 => O) = 238; + (I3 => O) = 127; + endspecify +endmodule + +(* abc9_lut=3 *) +module LUT5(output O, input I0, I1, I2, I3, I4); + parameter [31:0] INIT = 0; + wire [15: 0] s4 = I4 ? INIT[31:16] : INIT[15: 0]; + wire [ 7: 0] s3 = I3 ? s4[15: 8] : s4[ 7: 0]; + wire [ 3: 0] s2 = I2 ? s3[ 7: 4] : s3[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign O = I0 ? s1[1] : s1[0]; + specify + (I0 => O) = 631; + (I1 => O) = 472; + (I2 => O) = 407; + (I3 => O) = 238; + (I4 => O) = 127; + endspecify +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// cost of 3-input LUTs and is not intended to be instantiated + +(* abc9_lut=5 *) +module LUT6(output O, input I0, I1, I2, I3, I4, I5); + parameter [63:0] INIT = 0; + wire [31: 0] s5 = I5 ? INIT[63:32] : INIT[31: 0]; + wire [15: 0] s4 = I4 ? s5[31:16] : s5[15: 0]; + wire [ 7: 0] s3 = I3 ? s4[15: 8] : s4[ 7: 0]; + wire [ 3: 0] s2 = I2 ? s3[ 7: 4] : s3[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign O = I0 ? s1[1] : s1[0]; + specify + (I0 => O) = 642; + (I1 => O) = 631; + (I2 => O) = 472; + (I3 => O) = 407; + (I4 => O) = 238; + (I5 => O) = 127; + endspecify +endmodule + +module LUT6_2(output O6, output O5, input I0, I1, I2, I3, I4, I5); + parameter [63:0] INIT = 0; + wire [31: 0] s5 = I5 ? INIT[63:32] : INIT[31: 0]; + wire [15: 0] s4 = I4 ? s5[31:16] : s5[15: 0]; + wire [ 7: 0] s3 = I3 ? s4[15: 8] : s4[ 7: 0]; + wire [ 3: 0] s2 = I2 ? s3[ 7: 4] : s3[ 3: 0]; + wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0]; + assign O6 = I0 ? s1[1] : s1[0]; + + wire [15: 0] s5_4 = I4 ? INIT[31:16] : INIT[15: 0]; + wire [ 7: 0] s5_3 = I3 ? s5_4[15: 8] : s5_4[ 7: 0]; + wire [ 3: 0] s5_2 = I2 ? s5_3[ 7: 4] : s5_3[ 3: 0]; + wire [ 1: 0] s5_1 = I1 ? s5_2[ 3: 2] : s5_2[ 1: 0]; + assign O5 = I0 ? s5_1[1] : s5_1[0]; +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// cost of 3-input LUTs and is not intended to be instantiated +(* abc9_lut=10 *) +module \$__ABC9_LUT7 (output O, input I0, I1, I2, I3, I4, I5, I6); +`ifndef __ICARUS__ + specify + // https://github.com/SymbiFlow/prjxray-db/blob/1c85daf1b115da4d27ca83c6b89f53a94de39748/artix7/timings/slicel.sdf#L867 + (I0 => O) = 642 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (I1 => O) = 631 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (I2 => O) = 472 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (I3 => O) = 407 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (I4 => O) = 238 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (I5 => O) = 127 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (I6 => O) = 0 + 296 /* to select F7BMUX */ + 174 /* CMUX */; + endspecify +`endif +endmodule + +// This is a placeholder for ABC9 to extract the area/delay +// cost of 3-input LUTs and is not intended to be instantiated +(* abc9_lut=20 *) +module \$__ABC9_LUT8 (output O, input I0, I1, I2, I3, I4, I5, I6, I7); +`ifndef __ICARUS__ + specify + // https://github.com/SymbiFlow/prjxray-db/blob/1c85daf1b115da4d27ca83c6b89f53a94de39748/artix7/timings/slicel.sdf#L716 + (I0 => O) = 642 + 223 /* to cross F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I1 => O) = 631 + 223 /* to cross F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I2 => O) = 472 + 223 /* to cross F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I3 => O) = 407 + 223 /* to cross F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I4 => O) = 238 + 223 /* to cross F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I5 => O) = 127 + 223 /* to cross F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I6 => O) = 0 + 296 /* to select F7BMUX */ + 104 /* to cross F8MUX */ + 192 /* BMUX */; + (I7 => O) = 0 + 0 + 273 /* to select F8MUX */ + 192 /* BMUX */; + endspecify +`endif +endmodule + +module MUXCY(output O, input CI, DI, S); + assign O = S ? CI : DI; +endmodule + +module MUXF5(output O, input I0, I1, S); + assign O = S ? I1 : I0; +endmodule + +module MUXF6(output O, input I0, I1, S); + assign O = S ? I1 : I0; +endmodule + +(* abc9_box, lib_whitebox *) +module MUXF7(output O, input I0, I1, S); + assign O = S ? I1 : I0; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L451-L453 + (I0 => O) = 217; + (I1 => O) = 223; + (S => O) = 296; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module MUXF8(output O, input I0, I1, S); + assign O = S ? I1 : I0; + specify + // Max delays from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L462-L464 + (I0 => O) = 104; + (I1 => O) = 94; + (S => O) = 273; + endspecify +endmodule + +module MUXF9(output O, input I0, I1, S); + assign O = S ? I1 : I0; +endmodule + +module XORCY(output O, input CI, LI); + assign O = CI ^ LI; +endmodule + +(* abc9_box, lib_whitebox *) +module CARRY4( + (* abc9_carry *) + output [3:0] CO, + output [3:0] O, + (* abc9_carry *) + input CI, + input CYINIT, + input [3:0] DI, S +); + assign O = S ^ {CO[2:0], CI | CYINIT}; + assign CO[0] = S[0] ? CI | CYINIT : DI[0]; + assign CO[1] = S[1] ? CO[0] : DI[1]; + assign CO[2] = S[2] ? CO[1] : DI[2]; + assign CO[3] = S[3] ? CO[2] : DI[3]; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L11-L46 + (CYINIT => O[0]) = 482; + (S[0] => O[0]) = 223; + (CI => O[0]) = 222; + (CYINIT => O[1]) = 598; + (DI[0] => O[1]) = 407; + (S[0] => O[1]) = 400; + (S[1] => O[1]) = 205; + (CI => O[1]) = 334; + (CYINIT => O[2]) = 584; + (DI[0] => O[2]) = 556; + (DI[1] => O[2]) = 537; + (S[0] => O[2]) = 523; + (S[1] => O[2]) = 558; + (S[2] => O[2]) = 226; + (CI => O[2]) = 239; + (CYINIT => O[3]) = 642; + (DI[0] => O[3]) = 615; + (DI[1] => O[3]) = 596; + (DI[2] => O[3]) = 438; + (S[0] => O[3]) = 582; + (S[1] => O[3]) = 618; + (S[2] => O[3]) = 330; + (S[3] => O[3]) = 227; + (CI => O[3]) = 313; + (CYINIT => CO[0]) = 536; + (DI[0] => CO[0]) = 379; + (S[0] => CO[0]) = 340; + (CI => CO[0]) = 271; + (CYINIT => CO[1]) = 494; + (DI[0] => CO[1]) = 465; + (DI[1] => CO[1]) = 445; + (S[0] => CO[1]) = 433; + (S[1] => CO[1]) = 469; + (CI => CO[1]) = 157; + (CYINIT => CO[2]) = 592; + (DI[0] => CO[2]) = 540; + (DI[1] => CO[2]) = 520; + (DI[2] => CO[2]) = 356; + (S[0] => CO[2]) = 512; + (S[1] => CO[2]) = 548; + (S[2] => CO[2]) = 292; + (CI => CO[2]) = 228; + (CYINIT => CO[3]) = 580; + (DI[0] => CO[3]) = 526; + (DI[1] => CO[3]) = 507; + (DI[2] => CO[3]) = 398; + (DI[3] => CO[3]) = 385; + (S[0] => CO[3]) = 508; + (S[1] => CO[3]) = 528; + (S[2] => CO[3]) = 378; + (S[3] => CO[3]) = 380; + (CI => CO[3]) = 114; + endspecify +endmodule + +module CARRY8( + output [7:0] CO, + output [7:0] O, + input CI, + input CI_TOP, + input [7:0] DI, S +); + parameter CARRY_TYPE = "SINGLE_CY8"; + wire CI4 = (CARRY_TYPE == "DUAL_CY4" ? CI_TOP : CO[3]); + assign O = S ^ {CO[6:4], CI4, CO[2:0], CI}; + assign CO[0] = S[0] ? CI : DI[0]; + assign CO[1] = S[1] ? CO[0] : DI[1]; + assign CO[2] = S[2] ? CO[1] : DI[2]; + assign CO[3] = S[3] ? CO[2] : DI[3]; + assign CO[4] = S[4] ? CI4 : DI[4]; + assign CO[5] = S[5] ? CO[4] : DI[5]; + assign CO[6] = S[6] ? CO[5] : DI[6]; + assign CO[7] = S[7] ? CO[6] : DI[7]; +endmodule + +module ORCY (output O, input CI, I); + assign O = CI | I; +endmodule + +module MULT_AND (output LO, input I0, I1); + assign LO = I0 & I1; +endmodule + +// Flip-flops and latches. + +// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L238-L250 + +(* abc9_flop, lib_whitebox *) +module FDRE ( + output reg Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + input CE, + (* invertible_pin = "IS_D_INVERTED" *) + input D, + (* invertible_pin = "IS_R_INVERTED" *) + input R +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_R_INVERTED = 1'b0; + initial Q <= INIT; + generate + case (|IS_C_INVERTED) + 1'b0: always @(posedge C) if (R == !IS_R_INVERTED) Q <= 1'b0; else if (CE) Q <= D ^ IS_D_INVERTED; + 1'b1: always @(negedge C) if (R == !IS_R_INVERTED) Q <= 1'b0; else if (CE) Q <= D ^ IS_D_INVERTED; + endcase + endgenerate + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , posedge C &&& CE && !IS_C_INVERTED , /*-46*/ 0); // Negative times not currently supported + $setup(D , negedge C &&& CE && IS_C_INVERTED , /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE, posedge C &&& !IS_C_INVERTED, 109); + $setup(CE, negedge C &&& IS_C_INVERTED, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(R , posedge C &&& !IS_C_INVERTED, 404); + $setup(R , negedge C &&& IS_C_INVERTED, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L243 + if (!IS_C_INVERTED && R != IS_R_INVERTED) (posedge C => (Q : 1'b0)) = 303; + if ( IS_C_INVERTED && R != IS_R_INVERTED) (negedge C => (Q : 1'b0)) = 303; + if (!IS_C_INVERTED && R == IS_R_INVERTED && CE) (posedge C => (Q : D ^ IS_D_INVERTED)) = 303; + if ( IS_C_INVERTED && R == IS_R_INVERTED && CE) (negedge C => (Q : D ^ IS_D_INVERTED)) = 303; + endspecify +endmodule + +(* abc9_flop, lib_whitebox *) +module FDRE_1 ( + output reg Q, + (* clkbuf_sink *) + input C, + input CE, + input D, + input R +); + parameter [0:0] INIT = 1'b0; + initial Q <= INIT; + always @(negedge C) if (R) Q <= 1'b0; else if (CE) Q <= D; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , negedge C &&& CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE, negedge C, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(R , negedge C, 404); // https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L243 + if (R) (negedge C => (Q : 1'b0)) = 303; + if (!R && CE) (negedge C => (Q : D)) = 303; + endspecify +endmodule + +(* abc9_flop, lib_whitebox *) +module FDSE ( + output reg Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + input CE, + (* invertible_pin = "IS_D_INVERTED" *) + input D, + (* invertible_pin = "IS_S_INVERTED" *) + input S +); + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_S_INVERTED = 1'b0; + initial Q <= INIT; + generate + case (|IS_C_INVERTED) + 1'b0: always @(posedge C) if (S == !IS_S_INVERTED) Q <= 1'b1; else if (CE) Q <= D ^ IS_D_INVERTED; + 1'b1: always @(negedge C) if (S == !IS_S_INVERTED) Q <= 1'b1; else if (CE) Q <= D ^ IS_D_INVERTED; + endcase + endgenerate + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , posedge C &&& !IS_C_INVERTED && CE, /*-46*/ 0); // Negative times not currently supported + $setup(D , negedge C &&& IS_C_INVERTED && CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE, posedge C &&& !IS_C_INVERTED, 109); + $setup(CE, negedge C &&& IS_C_INVERTED, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(S , posedge C &&& !IS_C_INVERTED, 404); + $setup(S , negedge C &&& IS_C_INVERTED, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L243 + if (!IS_C_INVERTED && S != IS_S_INVERTED) (posedge C => (Q : 1'b1)) = 303; + if ( IS_C_INVERTED && S != IS_S_INVERTED) (negedge C => (Q : 1'b1)) = 303; + if (!IS_C_INVERTED && S == IS_S_INVERTED && CE) (posedge C => (Q : D ^ IS_D_INVERTED)) = 303; + if ( IS_C_INVERTED && S == IS_S_INVERTED && CE) (negedge C => (Q : D ^ IS_D_INVERTED)) = 303; + endspecify +endmodule + +(* abc9_flop, lib_whitebox *) +module FDSE_1 ( + output reg Q, + (* clkbuf_sink *) + input C, + input CE, + input D, + input S +); + parameter [0:0] INIT = 1'b1; + initial Q <= INIT; + always @(negedge C) if (S) Q <= 1'b1; else if (CE) Q <= D; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , negedge C &&& CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE, negedge C, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(S , negedge C, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L243 + if (S) (negedge C => (Q : 1'b1)) = 303; + if (!S && CE) (negedge C => (Q : D)) = 303; + endspecify +endmodule + +module FDRSE ( + output reg Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + (* invertible_pin = "IS_CE_INVERTED" *) + input CE, + (* invertible_pin = "IS_D_INVERTED" *) + input D, + (* invertible_pin = "IS_R_INVERTED" *) + input R, + (* invertible_pin = "IS_S_INVERTED" *) + input S +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_CE_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_R_INVERTED = 1'b0; + parameter [0:0] IS_S_INVERTED = 1'b0; + initial Q <= INIT; + wire c = C ^ IS_C_INVERTED; + wire ce = CE ^ IS_CE_INVERTED; + wire d = D ^ IS_D_INVERTED; + wire r = R ^ IS_R_INVERTED; + wire s = S ^ IS_S_INVERTED; + always @(posedge c) + if (r) + Q <= 0; + else if (s) + Q <= 1; + else if (ce) + Q <= d; +endmodule + +module FDRSE_1 ( + output reg Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + (* invertible_pin = "IS_CE_INVERTED" *) + input CE, + (* invertible_pin = "IS_D_INVERTED" *) + input D, + (* invertible_pin = "IS_R_INVERTED" *) + input R, + (* invertible_pin = "IS_S_INVERTED" *) + input S +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_CE_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_R_INVERTED = 1'b0; + parameter [0:0] IS_S_INVERTED = 1'b0; + initial Q <= INIT; + wire c = C ^ IS_C_INVERTED; + wire ce = CE ^ IS_CE_INVERTED; + wire d = D ^ IS_D_INVERTED; + wire r = R ^ IS_R_INVERTED; + wire s = S ^ IS_S_INVERTED; + always @(negedge c) + if (r) + Q <= 0; + else if (s) + Q <= 1; + else if (ce) + Q <= d; +endmodule + +(* abc9_box, lib_whitebox *) +module FDCE ( + output reg Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + input CE, + (* invertible_pin = "IS_CLR_INVERTED" *) + input CLR, + (* invertible_pin = "IS_D_INVERTED" *) + input D +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_CLR_INVERTED = 1'b0; + initial Q <= INIT; + generate + case ({|IS_C_INVERTED, |IS_CLR_INVERTED}) + 2'b00: always @(posedge C, posedge CLR) if ( CLR) Q <= 1'b0; else if (CE) Q <= D ^ IS_D_INVERTED; + 2'b01: always @(posedge C, negedge CLR) if (!CLR) Q <= 1'b0; else if (CE) Q <= D ^ IS_D_INVERTED; + 2'b10: always @(negedge C, posedge CLR) if ( CLR) Q <= 1'b0; else if (CE) Q <= D ^ IS_D_INVERTED; + 2'b11: always @(negedge C, negedge CLR) if (!CLR) Q <= 1'b0; else if (CE) Q <= D ^ IS_D_INVERTED; + endcase + endgenerate + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , posedge C &&& !IS_C_INVERTED && CE, /*-46*/ 0); // Negative times not currently supported + $setup(D , negedge C &&& IS_C_INVERTED && CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE , posedge C &&& !IS_C_INVERTED, 109); + $setup(CE , negedge C &&& IS_C_INVERTED, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(CLR, posedge C &&& !IS_C_INVERTED, 404); + $setup(CLR, negedge C &&& IS_C_INVERTED, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L270 +`ifndef YOSYS + if (!IS_CLR_INVERTED) (posedge CLR => (Q : 1'b0)) = 764; + if ( IS_CLR_INVERTED) (negedge CLR => (Q : 1'b0)) = 764; +`else + if (IS_CLR_INVERTED != CLR) (CLR => Q) = 764; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!IS_C_INVERTED && CLR == IS_CLR_INVERTED && CE) (posedge C => (Q : D ^ IS_D_INVERTED)) = 303; + if ( IS_C_INVERTED && CLR == IS_CLR_INVERTED && CE) (negedge C => (Q : D ^ IS_D_INVERTED)) = 303; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module FDCE_1 ( + output reg Q, + (* clkbuf_sink *) + input C, + input CE, + input CLR, + input D +); + parameter [0:0] INIT = 1'b0; + initial Q <= INIT; + always @(negedge C, posedge CLR) if (CLR) Q <= 1'b0; else if (CE) Q <= D; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , negedge C &&& CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE , negedge C, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(CLR, negedge C, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L270 +`ifndef YOSYS + (posedge CLR => (Q : 1'b0)) = 764; +`else + if (CLR) (CLR => Q) = 764; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!CLR && CE) (negedge C => (Q : D)) = 303; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module FDPE ( + output reg Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + input CE, + (* invertible_pin = "IS_D_INVERTED" *) + input D, + (* invertible_pin = "IS_PRE_INVERTED" *) + input PRE +); + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_PRE_INVERTED = 1'b0; + initial Q <= INIT; + generate case ({|IS_C_INVERTED, |IS_PRE_INVERTED}) + 2'b00: always @(posedge C, posedge PRE) if ( PRE) Q <= 1'b1; else if (CE) Q <= D ^ IS_D_INVERTED; + 2'b01: always @(posedge C, negedge PRE) if (!PRE) Q <= 1'b1; else if (CE) Q <= D ^ IS_D_INVERTED; + 2'b10: always @(negedge C, posedge PRE) if ( PRE) Q <= 1'b1; else if (CE) Q <= D ^ IS_D_INVERTED; + 2'b11: always @(negedge C, negedge PRE) if (!PRE) Q <= 1'b1; else if (CE) Q <= D ^ IS_D_INVERTED; + endcase + endgenerate + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , posedge C &&& !IS_C_INVERTED && CE, /*-46*/ 0); // Negative times not currently supported + $setup(D , negedge C &&& IS_C_INVERTED && CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE , posedge C &&& !IS_C_INVERTED, 109); + $setup(CE , negedge C &&& IS_C_INVERTED, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(PRE, posedge C &&& !IS_C_INVERTED, 404); + $setup(PRE, negedge C &&& IS_C_INVERTED, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L270 +`ifndef YOSYS + if (!IS_PRE_INVERTED) (posedge PRE => (Q : 1'b1)) = 764; + if ( IS_PRE_INVERTED) (negedge PRE => (Q : 1'b1)) = 764; +`else + if (IS_PRE_INVERTED != PRE) (PRE => Q) = 764; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!IS_C_INVERTED && PRE == IS_PRE_INVERTED && CE) (posedge C => (Q : D ^ IS_D_INVERTED)) = 303; + if ( IS_C_INVERTED && PRE == IS_PRE_INVERTED && CE) (negedge C => (Q : D ^ IS_D_INVERTED)) = 303; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module FDPE_1 ( + output reg Q, + (* clkbuf_sink *) + input C, + input CE, + input D, + input PRE +); + parameter [0:0] INIT = 1'b1; + initial Q <= INIT; + always @(negedge C, posedge PRE) if (PRE) Q <= 1'b1; else if (CE) Q <= D; + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L249 + $setup(D , negedge C &&& CE, /*-46*/ 0); // Negative times not currently supported + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE , negedge C, 109); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L274 + $setup(PRE, negedge C, 404); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L270 +`ifndef YOSYS + (posedge PRE => (Q : 1'b1)) = 764; +`else + if (PRE) (PRE => Q) = 764; // Technically, this should be an edge sensitive path + // but for facilitating a bypass box, let's pretend it's + // a simple path +`endif + if (!PRE && CE) (negedge C => (Q : D)) = 303; + endspecify +endmodule + +module FDCPE ( + output wire Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + input CE, + (* invertible_pin = "IS_CLR_INVERTED" *) + input CLR, + input D, + (* invertible_pin = "IS_PRE_INVERTED" *) + input PRE +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_CLR_INVERTED = 1'b0; + parameter [0:0] IS_PRE_INVERTED = 1'b0; + wire c = C ^ IS_C_INVERTED; + wire clr = CLR ^ IS_CLR_INVERTED; + wire pre = PRE ^ IS_PRE_INVERTED; + // Hacky model to avoid simulation-synthesis mismatches. + reg qc, qp, qs; + initial qc = INIT; + initial qp = INIT; + initial qs = 0; + always @(posedge c, posedge clr) begin + if (clr) + qc <= 0; + else if (CE) + qc <= D; + end + always @(posedge c, posedge pre) begin + if (pre) + qp <= 1; + else if (CE) + qp <= D; + end + always @* begin + if (clr) + qs <= 0; + else if (pre) + qs <= 1; + end + assign Q = qs ? qp : qc; +endmodule + +module FDCPE_1 ( + output wire Q, + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C, + input CE, + (* invertible_pin = "IS_CLR_INVERTED" *) + input CLR, + input D, + (* invertible_pin = "IS_PRE_INVERTED" *) + input PRE +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_CLR_INVERTED = 1'b0; + parameter [0:0] IS_PRE_INVERTED = 1'b0; + wire c = C ^ IS_C_INVERTED; + wire clr = CLR ^ IS_CLR_INVERTED; + wire pre = PRE ^ IS_PRE_INVERTED; + // Hacky model to avoid simulation-synthesis mismatches. + reg qc, qp, qs; + initial qc = INIT; + initial qp = INIT; + initial qs = 0; + always @(negedge c, posedge clr) begin + if (clr) + qc <= 0; + else if (CE) + qc <= D; + end + always @(negedge c, posedge pre) begin + if (pre) + qp <= 1; + else if (CE) + qp <= D; + end + always @* begin + if (clr) + qs <= 0; + else if (pre) + qs <= 1; + end + assign Q = qs ? qp : qc; +endmodule + +module LDCE ( + output reg Q, + (* invertible_pin = "IS_CLR_INVERTED" *) + input CLR, + input D, + (* invertible_pin = "IS_G_INVERTED" *) + input G, + input GE +); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_CLR_INVERTED = 1'b0; + parameter [0:0] IS_G_INVERTED = 1'b0; + parameter MSGON = "TRUE"; + parameter XON = "TRUE"; + initial Q = INIT; + wire clr = CLR ^ IS_CLR_INVERTED; + wire g = G ^ IS_G_INVERTED; + always @* + if (clr) Q <= 1'b0; + else if (GE && g) Q <= D; +endmodule + +module LDPE ( + output reg Q, + input D, + (* invertible_pin = "IS_G_INVERTED" *) + input G, + input GE, + (* invertible_pin = "IS_PRE_INVERTED" *) + input PRE +); + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_G_INVERTED = 1'b0; + parameter [0:0] IS_PRE_INVERTED = 1'b0; + parameter MSGON = "TRUE"; + parameter XON = "TRUE"; + initial Q = INIT; + wire g = G ^ IS_G_INVERTED; + wire pre = PRE ^ IS_PRE_INVERTED; + always @* + if (pre) Q <= 1'b1; + else if (GE && g) Q <= D; +endmodule + +module LDCPE ( + output reg Q, + (* invertible_pin = "IS_CLR_INVERTED" *) + input CLR, + (* invertible_pin = "IS_D_INVERTED" *) + input D, + (* invertible_pin = "IS_G_INVERTED" *) + input G, + (* invertible_pin = "IS_GE_INVERTED" *) + input GE, + (* invertible_pin = "IS_PRE_INVERTED" *) + input PRE +); + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_CLR_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_G_INVERTED = 1'b0; + parameter [0:0] IS_GE_INVERTED = 1'b0; + parameter [0:0] IS_PRE_INVERTED = 1'b0; + initial Q = INIT; + wire d = D ^ IS_D_INVERTED; + wire g = G ^ IS_G_INVERTED; + wire ge = GE ^ IS_GE_INVERTED; + wire clr = CLR ^ IS_CLR_INVERTED; + wire pre = PRE ^ IS_PRE_INVERTED; + always @* + if (clr) Q <= 1'b0; + else if (pre) Q <= 1'b1; + else if (ge && g) Q <= d; +endmodule + +module AND2B1L ( + output O, + input DI, + (* invertible_pin = "IS_SRI_INVERTED" *) + input SRI +); + parameter [0:0] IS_SRI_INVERTED = 1'b0; + assign O = DI & ~(SRI ^ IS_SRI_INVERTED); +endmodule + +module OR2L ( + output O, + input DI, + (* invertible_pin = "IS_SRI_INVERTED" *) + input SRI +); + parameter [0:0] IS_SRI_INVERTED = 1'b0; + assign O = DI | (SRI ^ IS_SRI_INVERTED); +endmodule + +// LUTRAM. + +// Single port. + +module RAM16X1S ( + output O, + input A0, A1, A2, A3, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [15:0] INIT = 16'h0000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + reg [15:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM16X1S_1 ( + output O, + input A0, A1, A2, A3, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [15:0] INIT = 16'h0000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + reg [15:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM32X1S ( + output O, + input A0, A1, A2, A3, A4, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [31:0] INIT = 32'h00000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + reg [31:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM32X1S_1 ( + output O, + input A0, A1, A2, A3, A4, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [31:0] INIT = 32'h00000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + reg [31:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM64X1S ( + output O, + input A0, A1, A2, A3, A4, A5, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [5:0] a = {A5, A4, A3, A2, A1, A0}; + reg [63:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM64X1S_1 ( + output O, + input A0, A1, A2, A3, A4, A5, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [5:0] a = {A5, A4, A3, A2, A1, A0}; + reg [63:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM128X1S ( + output O, + input A0, A1, A2, A3, A4, A5, A6, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [127:0] INIT = 128'h00000000000000000000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [6:0] a = {A6, A5, A4, A3, A2, A1, A0}; + reg [127:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM128X1S_1 ( + output O, + input A0, A1, A2, A3, A4, A5, A6, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [127:0] INIT = 128'h00000000000000000000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [6:0] a = {A6, A5, A4, A3, A2, A1, A0}; + reg [127:0] mem = INIT; + assign O = mem[a]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM256X1S ( + output O, + input [7:0] A, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [255:0] INIT = 256'h0; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [255:0] mem = INIT; + assign O = mem[A]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[A] <= D; +endmodule + +module RAM512X1S ( + output O, + input [8:0] A, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [511:0] INIT = 512'h0; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [511:0] mem = INIT; + assign O = mem[A]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[A] <= D; +endmodule + +// Single port, wide. + +module RAM16X2S ( + output O0, O1, + input A0, A1, A2, A3, + input D0, D1, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [15:0] INIT_00 = 16'h0000; + parameter [15:0] INIT_01 = 16'h0000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [15:0] mem0 = INIT_00; + reg [15:0] mem1 = INIT_01; + assign O0 = mem0[a]; + assign O1 = mem1[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D0; + mem1[a] <= D1; + end +endmodule + +module RAM32X2S ( + output O0, O1, + input A0, A1, A2, A3, A4, + input D0, D1, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [31:0] INIT_00 = 32'h00000000; + parameter [31:0] INIT_01 = 32'h00000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [31:0] mem0 = INIT_00; + reg [31:0] mem1 = INIT_01; + assign O0 = mem0[a]; + assign O1 = mem1[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D0; + mem1[a] <= D1; + end +endmodule + +module RAM64X2S ( + output O0, O1, + input A0, A1, A2, A3, A4, A5, + input D0, D1, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT_00 = 64'h0000000000000000; + parameter [63:0] INIT_01 = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [5:0] a = {A5, A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [63:0] mem0 = INIT_00; + reg [63:0] mem1 = INIT_01; + assign O0 = mem0[a]; + assign O1 = mem1[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D0; + mem1[a] <= D1; + end +endmodule + +module RAM16X4S ( + output O0, O1, O2, O3, + input A0, A1, A2, A3, + input D0, D1, D2, D3, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [15:0] INIT_00 = 16'h0000; + parameter [15:0] INIT_01 = 16'h0000; + parameter [15:0] INIT_02 = 16'h0000; + parameter [15:0] INIT_03 = 16'h0000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [15:0] mem0 = INIT_00; + reg [15:0] mem1 = INIT_01; + reg [15:0] mem2 = INIT_02; + reg [15:0] mem3 = INIT_03; + assign O0 = mem0[a]; + assign O1 = mem1[a]; + assign O2 = mem2[a]; + assign O3 = mem3[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D0; + mem1[a] <= D1; + mem2[a] <= D2; + mem3[a] <= D3; + end +endmodule + +module RAM32X4S ( + output O0, O1, O2, O3, + input A0, A1, A2, A3, A4, + input D0, D1, D2, D3, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [31:0] INIT_00 = 32'h00000000; + parameter [31:0] INIT_01 = 32'h00000000; + parameter [31:0] INIT_02 = 32'h00000000; + parameter [31:0] INIT_03 = 32'h00000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [31:0] mem0 = INIT_00; + reg [31:0] mem1 = INIT_01; + reg [31:0] mem2 = INIT_02; + reg [31:0] mem3 = INIT_03; + assign O0 = mem0[a]; + assign O1 = mem1[a]; + assign O2 = mem2[a]; + assign O3 = mem3[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D0; + mem1[a] <= D1; + mem2[a] <= D2; + mem3[a] <= D3; + end +endmodule + +module RAM16X8S ( + output [7:0] O, + input A0, A1, A2, A3, + input [7:0] D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [15:0] INIT_00 = 16'h0000; + parameter [15:0] INIT_01 = 16'h0000; + parameter [15:0] INIT_02 = 16'h0000; + parameter [15:0] INIT_03 = 16'h0000; + parameter [15:0] INIT_04 = 16'h0000; + parameter [15:0] INIT_05 = 16'h0000; + parameter [15:0] INIT_06 = 16'h0000; + parameter [15:0] INIT_07 = 16'h0000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [15:0] mem0 = INIT_00; + reg [15:0] mem1 = INIT_01; + reg [15:0] mem2 = INIT_02; + reg [15:0] mem3 = INIT_03; + reg [15:0] mem4 = INIT_04; + reg [15:0] mem5 = INIT_05; + reg [15:0] mem6 = INIT_06; + reg [15:0] mem7 = INIT_07; + assign O[0] = mem0[a]; + assign O[1] = mem1[a]; + assign O[2] = mem2[a]; + assign O[3] = mem3[a]; + assign O[4] = mem4[a]; + assign O[5] = mem5[a]; + assign O[6] = mem6[a]; + assign O[7] = mem7[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D[0]; + mem1[a] <= D[1]; + mem2[a] <= D[2]; + mem3[a] <= D[3]; + mem4[a] <= D[4]; + mem5[a] <= D[5]; + mem6[a] <= D[6]; + mem7[a] <= D[7]; + end +endmodule + +module RAM32X8S ( + output [7:0] O, + input A0, A1, A2, A3, A4, + input [7:0] D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [31:0] INIT_00 = 32'h00000000; + parameter [31:0] INIT_01 = 32'h00000000; + parameter [31:0] INIT_02 = 32'h00000000; + parameter [31:0] INIT_03 = 32'h00000000; + parameter [31:0] INIT_04 = 32'h00000000; + parameter [31:0] INIT_05 = 32'h00000000; + parameter [31:0] INIT_06 = 32'h00000000; + parameter [31:0] INIT_07 = 32'h00000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + wire clk = WCLK ^ IS_WCLK_INVERTED; + reg [31:0] mem0 = INIT_00; + reg [31:0] mem1 = INIT_01; + reg [31:0] mem2 = INIT_02; + reg [31:0] mem3 = INIT_03; + reg [31:0] mem4 = INIT_04; + reg [31:0] mem5 = INIT_05; + reg [31:0] mem6 = INIT_06; + reg [31:0] mem7 = INIT_07; + assign O[0] = mem0[a]; + assign O[1] = mem1[a]; + assign O[2] = mem2[a]; + assign O[3] = mem3[a]; + assign O[4] = mem4[a]; + assign O[5] = mem5[a]; + assign O[6] = mem6[a]; + assign O[7] = mem7[a]; + always @(posedge clk) + if (WE) begin + mem0[a] <= D[0]; + mem1[a] <= D[1]; + mem2[a] <= D[2]; + mem3[a] <= D[3]; + mem4[a] <= D[4]; + mem5[a] <= D[5]; + mem6[a] <= D[6]; + mem7[a] <= D[7]; + end +endmodule + +// Dual port. + +module RAM16X1D ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input A0, A1, A2, A3, + input DPRA0, DPRA1, DPRA2, DPRA3 +); + parameter INIT = 16'h0; + parameter IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + wire [3:0] dpra = {DPRA3, DPRA2, DPRA1, DPRA0}; + reg [15:0] mem = INIT; + assign SPO = mem[a]; + assign DPO = mem[dpra]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; +endmodule + +module RAM16X1D_1 ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input A0, A1, A2, A3, + input DPRA0, DPRA1, DPRA2, DPRA3 +); + parameter INIT = 16'h0; + parameter IS_WCLK_INVERTED = 1'b0; + wire [3:0] a = {A3, A2, A1, A0}; + wire [3:0] dpra = {DPRA3, DPRA2, DPRA1, DPRA0}; + reg [15:0] mem = INIT; + assign SPO = mem[a]; + assign DPO = mem[dpra]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; +endmodule + +(* abc9_box, lib_whitebox *) +module RAM32X1D ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input A0, A1, A2, A3, A4, + input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4 +); + parameter INIT = 32'h0; + parameter IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + wire [4:0] dpra = {DPRA4, DPRA3, DPRA2, DPRA1, DPRA0}; + reg [31:0] mem = INIT; + assign SPO = mem[a]; + assign DPO = mem[dpra]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986 + $setup(D , posedge WCLK &&& !IS_WCLK_INVERTED && WE, 453); + $setup(D , negedge WCLK &&& IS_WCLK_INVERTED && WE, 453); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, posedge WCLK &&& !IS_WCLK_INVERTED, 654); + $setup(WE, negedge WCLK &&& IS_WCLK_INVERTED, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L800 + $setup(A0, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 245); + $setup(A0, negedge WCLK &&& IS_WCLK_INVERTED && WE, 245); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L798 + $setup(A1, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 208); + $setup(A1, negedge WCLK &&& IS_WCLK_INVERTED && WE, 208); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L796 + $setup(A2, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 147); + $setup(A2, negedge WCLK &&& IS_WCLK_INVERTED && WE, 147); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L794 + $setup(A3, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 68); + $setup(A3, negedge WCLK &&& IS_WCLK_INVERTED && WE, 68); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L792 + $setup(A4, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 66); + $setup(A4, posedge WCLK &&& IS_WCLK_INVERTED && WE, 66); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L981 + if (!IS_WCLK_INVERTED) (posedge WCLK => (SPO : D)) = 1153; + if (!IS_WCLK_INVERTED) (posedge WCLK => (DPO : 1'bx)) = 1153; + if ( IS_WCLK_INVERTED) (posedge WCLK => (SPO : D)) = 1153; + if ( IS_WCLK_INVERTED) (negedge WCLK => (DPO : 1'bx)) = 1153; + (A0 => SPO) = 642; (DPRA0 => DPO) = 642; + (A1 => SPO) = 632; (DPRA1 => DPO) = 631; + (A2 => SPO) = 472; (DPRA2 => DPO) = 472; + (A3 => SPO) = 407; (DPRA3 => DPO) = 407; + (A4 => SPO) = 238; (DPRA4 => DPO) = 238; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module RAM32X1D_1 ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input A0, + input A1, + input A2, + input A3, + input A4, + input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4 +); + parameter INIT = 32'h0; + parameter IS_WCLK_INVERTED = 1'b0; + wire [4:0] a = {A4, A3, A2, A1, A0}; + wire [4:0] dpra = {DPRA4, DPRA3, DPRA2, DPRA1, DPRA0}; + reg [31:0] mem = INIT; + assign SPO = mem[a]; + assign DPO = mem[dpra]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986 + $setup(D , negedge WCLK &&& WE, 453); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, negedge WCLK, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L800 + $setup(A0, negedge WCLK &&& WE, 245); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L798 + $setup(A1, negedge WCLK &&& WE, 208); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L796 + $setup(A2, negedge WCLK &&& WE, 147); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L794 + $setup(A3, negedge WCLK &&& WE, 68); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L792 + $setup(A4, negedge WCLK &&& WE, 66); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L981 + if (WE) (negedge WCLK => (SPO : D)) = 1153; + if (WE) (negedge WCLK => (DPO : 1'bx)) = 1153; + (A0 => SPO) = 642; (DPRA0 => DPO) = 642; + (A1 => SPO) = 632; (DPRA1 => DPO) = 631; + (A2 => SPO) = 472; (DPRA2 => DPO) = 472; + (A3 => SPO) = 407; (DPRA3 => DPO) = 407; + (A4 => SPO) = 238; (DPRA4 => DPO) = 238; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module RAM64X1D ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input A0, A1, A2, A3, A4, A5, + input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5 +); + parameter INIT = 64'h0; + parameter IS_WCLK_INVERTED = 1'b0; + wire [5:0] a = {A5, A4, A3, A2, A1, A0}; + wire [5:0] dpra = {DPRA5, DPRA4, DPRA3, DPRA2, DPRA1, DPRA0}; + reg [63:0] mem = INIT; + assign SPO = mem[a]; + assign DPO = mem[dpra]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[a] <= D; + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986 + $setup(D , posedge WCLK &&& !IS_WCLK_INVERTED && WE, 453); + $setup(D , negedge WCLK &&& IS_WCLK_INVERTED && WE, 453); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, posedge WCLK &&& !IS_WCLK_INVERTED, 654); + $setup(WE, negedge WCLK &&& IS_WCLK_INVERTED, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L828 + $setup(A0, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 362); + $setup(A0, negedge WCLK &&& IS_WCLK_INVERTED && WE, 362); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L826 + $setup(A1, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 245); + $setup(A1, negedge WCLK &&& IS_WCLK_INVERTED && WE, 245); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L824 + $setup(A2, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 208); + $setup(A2, negedge WCLK &&& IS_WCLK_INVERTED && WE, 208); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L822 + $setup(A3, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 147); + $setup(A3, negedge WCLK &&& IS_WCLK_INVERTED && WE, 147); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L820 + $setup(A4, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 68); + $setup(A4, negedge WCLK &&& IS_WCLK_INVERTED && WE, 68); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L818 + $setup(A5, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 66); + $setup(A5, negedge WCLK &&& IS_WCLK_INVERTED && WE, 66); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L981 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (SPO : D)) = 1153; + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DPO : 1'bx)) = 1153; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (SPO : D)) = 1153; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DPO : 1'bx)) = 1153; + (A0 => SPO) = 642; (DPRA0 => DPO) = 642; + (A1 => SPO) = 632; (DPRA1 => DPO) = 631; + (A2 => SPO) = 472; (DPRA2 => DPO) = 472; + (A3 => SPO) = 407; (DPRA3 => DPO) = 407; + (A4 => SPO) = 238; (DPRA4 => DPO) = 238; + (A5 => SPO) = 127; (DPRA5 => DPO) = 127; + endspecify +endmodule + +module RAM64X1D_1 ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input A0, A1, A2, A3, A4, A5, + input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5 +); + parameter INIT = 64'h0; + parameter IS_WCLK_INVERTED = 1'b0; + wire [5:0] a = {A5, A4, A3, A2, A1, A0}; + wire [5:0] dpra = {DPRA5, DPRA4, DPRA3, DPRA2, DPRA1, DPRA0}; + reg [63:0] mem = INIT; + assign SPO = mem[a]; + assign DPO = mem[dpra]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(negedge clk) if (WE) mem[a] <= D; + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986 + $setup(D , negedge WCLK &&& WE, 453); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, negedge WCLK, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L828 + $setup(A0, negedge WCLK &&& WE, 362); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L826 + $setup(A1, negedge WCLK &&& WE, 245); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L824 + $setup(A2, negedge WCLK &&& WE, 208); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L822 + $setup(A3, negedge WCLK &&& WE, 147); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L820 + $setup(A4, negedge WCLK &&& WE, 68); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L818 + $setup(A5, negedge WCLK &&& WE, 66); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L981 + if (WE) (negedge WCLK => (SPO : D)) = 1153; + if (WE) (negedge WCLK => (DPO : 1'bx)) = 1153; + (A0 => SPO) = 642; (DPRA0 => DPO) = 642; + (A1 => SPO) = 632; (DPRA1 => DPO) = 631; + (A2 => SPO) = 472; (DPRA2 => DPO) = 472; + (A3 => SPO) = 407; (DPRA3 => DPO) = 407; + (A4 => SPO) = 238; (DPRA4 => DPO) = 238; + (A5 => SPO) = 127; (DPRA5 => DPO) = 127; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module RAM128X1D ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input [6:0] A, + input [6:0] DPRA +); + parameter INIT = 128'h0; + parameter IS_WCLK_INVERTED = 1'b0; + reg [127:0] mem = INIT; + assign SPO = mem[A]; + assign DPO = mem[DPRA]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[A] <= D; + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986 + $setup(D , posedge WCLK &&& !IS_WCLK_INVERTED && WE, 453); + $setup(D , negedge WCLK &&& IS_WCLK_INVERTED && WE, 453); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, posedge WCLK &&& !IS_WCLK_INVERTED, 654); + $setup(WE, negedge WCLK &&& IS_WCLK_INVERTED, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L818-830 + $setup(A[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 616); + $setup(A[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 616); + $setup(A[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 362); + $setup(A[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 362); + $setup(A[2], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 245); + $setup(A[2], negedge WCLK &&& IS_WCLK_INVERTED && WE, 245); + $setup(A[3], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 208); + $setup(A[3], negedge WCLK &&& IS_WCLK_INVERTED && WE, 208); + $setup(A[4], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 147); + $setup(A[4], negedge WCLK &&& IS_WCLK_INVERTED && WE, 147); + $setup(A[5], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 68); + $setup(A[5], negedge WCLK &&& IS_WCLK_INVERTED && WE, 68); + $setup(A[6], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 66); + $setup(A[6], negedge WCLK &&& IS_WCLK_INVERTED && WE, 66); +`ifndef __ICARUS__ + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L981 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (SPO : D)) = 1153 + 217 /* to cross F7AMUX */ + 175 /* AMUX */; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DPO : 1'bx)) = 1153 + 223 /* to cross F7BMUX */ + 174 /* CMUX */; + (A[0] => SPO) = 642 + 193 /* to cross F7AMUX */ + 175 /* AMUX */; + (A[1] => SPO) = 631 + 193 /* to cross F7AMUX */ + 175 /* AMUX */; + (A[2] => SPO) = 472 + 193 /* to cross F7AMUX */ + 175 /* AMUX */; + (A[3] => SPO) = 407 + 193 /* to cross F7AMUX */ + 175 /* AMUX */; + (A[4] => SPO) = 238 + 193 /* to cross F7AMUX */ + 175 /* AMUX */; + (A[5] => SPO) = 127 + 193 /* to cross F7AMUX */ + 175 /* AMUX */; + (A[6] => SPO) = 0 + 276 /* to select F7AMUX */ + 175 /* AMUX */; + (DPRA[0] => DPO) = 642 + 223 /* to cross MUXF7 */ + 174 /* CMUX */; + (DPRA[1] => DPO) = 631 + 223 /* to cross MUXF7 */ + 174 /* CMUX */; + (DPRA[2] => DPO) = 472 + 223 /* to cross MUXF7 */ + 174 /* CMUX */; + (DPRA[3] => DPO) = 407 + 223 /* to cross MUXF7 */ + 174 /* CMUX */; + (DPRA[4] => DPO) = 238 + 223 /* to cross MUXF7 */ + 174 /* CMUX */; + (DPRA[5] => DPO) = 127 + 223 /* to cross MUXF7 */ + 174 /* CMUX */; + (DPRA[6] => DPO) = 0 + 296 /* to select MUXF7 */ + 174 /* CMUX */; +`endif + endspecify +endmodule + +module RAM256X1D ( + output DPO, SPO, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input [7:0] A, DPRA +); + parameter INIT = 256'h0; + parameter IS_WCLK_INVERTED = 1'b0; + reg [255:0] mem = INIT; + assign SPO = mem[A]; + assign DPO = mem[DPRA]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) if (WE) mem[A] <= D; +endmodule + +// Multi port. + +(* abc9_box, lib_whitebox *) +module RAM32M ( + output [1:0] DOA, + output [1:0] DOB, + output [1:0] DOC, + output [1:0] DOD, + input [4:0] ADDRA, ADDRB, ADDRC, + input [4:0] ADDRD, + input [1:0] DIA, + input [1:0] DIB, + input [1:0] DIC, + input [1:0] DID, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT_A = 64'h0000000000000000; + parameter [63:0] INIT_B = 64'h0000000000000000; + parameter [63:0] INIT_C = 64'h0000000000000000; + parameter [63:0] INIT_D = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [63:0] mem_a = INIT_A; + reg [63:0] mem_b = INIT_B; + reg [63:0] mem_c = INIT_C; + reg [63:0] mem_d = INIT_D; + assign DOA = mem_a[2*ADDRA+:2]; + assign DOB = mem_b[2*ADDRB+:2]; + assign DOC = mem_c[2*ADDRC+:2]; + assign DOD = mem_d[2*ADDRD+:2]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) + if (WE) begin + mem_a[2*ADDRD+:2] <= DIA; + mem_b[2*ADDRD+:2] <= DIB; + mem_c[2*ADDRD+:2] <= DIC; + mem_d[2*ADDRD+:2] <= DID; + end + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986 + $setup(ADDRD[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 245); + $setup(ADDRD[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 245); + $setup(ADDRD[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 208); + $setup(ADDRD[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 208); + $setup(ADDRD[2], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 147); + $setup(ADDRD[2], negedge WCLK &&& IS_WCLK_INVERTED && WE, 147); + $setup(ADDRD[3], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 68); + $setup(ADDRD[3], negedge WCLK &&& IS_WCLK_INVERTED && WE, 68); + $setup(ADDRD[4], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 66); + $setup(ADDRD[4], negedge WCLK &&& IS_WCLK_INVERTED && WE, 66); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986-L988 + $setup(DIA[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 453); + $setup(DIA[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 453); + $setup(DIA[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 384); + $setup(DIA[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 384); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L1054-L1056 + $setup(DIB[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 461); + $setup(DIB[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 461); + $setup(DIB[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 354); + $setup(DIB[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 354); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L1122-L1124 + $setup(DIC[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 457); + $setup(DIC[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 457); + $setup(DIC[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 375); + $setup(DIC[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 375); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L1190-L1192 + $setup(DID[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 310); + $setup(DID[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 310); + $setup(DID[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 334); + $setup(DID[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 334); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, posedge WCLK &&& !IS_WCLK_INVERTED, 654); + $setup(WE, negedge WCLK &&& IS_WCLK_INVERTED, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L889 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOA[0] : DIA[0])) = 1153; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOA[0] : DIA[0])) = 1153; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L857 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOA[1] : DIA[1])) = 1188; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOA[1] : DIA[1])) = 1188; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOB[0] : DIB[0])) = 1161; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOB[0] : DIB[0])) = 1161; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L925 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOB[1] : DIB[1])) = 1187; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOB[1] : DIB[1])) = 1187; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L993 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOC[0] : DIC[0])) = 1158; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOC[0] : DIC[0])) = 1158; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L1025 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOC[1] : DIC[1])) = 1180; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOC[1] : DIC[1])) = 1180; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L1093 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOD[0] : DID[0])) = 1163; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOD[0] : DID[0])) = 1163; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L1061 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOD[1] : DID[1])) = 1190; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOD[1] : DID[1])) = 1190; + (ADDRA[0] *> DOA) = 642; (ADDRB[0] *> DOB) = 642; (ADDRC[0] *> DOC) = 642; (ADDRD[0] *> DOD) = 642; + (ADDRA[1] *> DOA) = 631; (ADDRB[1] *> DOB) = 631; (ADDRC[1] *> DOC) = 631; (ADDRD[1] *> DOD) = 631; + (ADDRA[2] *> DOA) = 472; (ADDRB[2] *> DOB) = 472; (ADDRC[2] *> DOC) = 472; (ADDRD[2] *> DOD) = 472; + (ADDRA[3] *> DOA) = 407; (ADDRB[3] *> DOB) = 407; (ADDRC[3] *> DOC) = 407; (ADDRD[3] *> DOD) = 407; + (ADDRA[4] *> DOA) = 238; (ADDRB[4] *> DOB) = 238; (ADDRC[4] *> DOC) = 238; (ADDRD[4] *> DOD) = 238; + endspecify +endmodule + +module RAM32M16 ( + output [1:0] DOA, + output [1:0] DOB, + output [1:0] DOC, + output [1:0] DOD, + output [1:0] DOE, + output [1:0] DOF, + output [1:0] DOG, + output [1:0] DOH, + input [4:0] ADDRA, + input [4:0] ADDRB, + input [4:0] ADDRC, + input [4:0] ADDRD, + input [4:0] ADDRE, + input [4:0] ADDRF, + input [4:0] ADDRG, + input [4:0] ADDRH, + input [1:0] DIA, + input [1:0] DIB, + input [1:0] DIC, + input [1:0] DID, + input [1:0] DIE, + input [1:0] DIF, + input [1:0] DIG, + input [1:0] DIH, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT_A = 64'h0000000000000000; + parameter [63:0] INIT_B = 64'h0000000000000000; + parameter [63:0] INIT_C = 64'h0000000000000000; + parameter [63:0] INIT_D = 64'h0000000000000000; + parameter [63:0] INIT_E = 64'h0000000000000000; + parameter [63:0] INIT_F = 64'h0000000000000000; + parameter [63:0] INIT_G = 64'h0000000000000000; + parameter [63:0] INIT_H = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [63:0] mem_a = INIT_A; + reg [63:0] mem_b = INIT_B; + reg [63:0] mem_c = INIT_C; + reg [63:0] mem_d = INIT_D; + reg [63:0] mem_e = INIT_E; + reg [63:0] mem_f = INIT_F; + reg [63:0] mem_g = INIT_G; + reg [63:0] mem_h = INIT_H; + assign DOA = mem_a[2*ADDRA+:2]; + assign DOB = mem_b[2*ADDRB+:2]; + assign DOC = mem_c[2*ADDRC+:2]; + assign DOD = mem_d[2*ADDRD+:2]; + assign DOE = mem_e[2*ADDRE+:2]; + assign DOF = mem_f[2*ADDRF+:2]; + assign DOG = mem_g[2*ADDRG+:2]; + assign DOH = mem_h[2*ADDRH+:2]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) + if (WE) begin + mem_a[2*ADDRH+:2] <= DIA; + mem_b[2*ADDRH+:2] <= DIB; + mem_c[2*ADDRH+:2] <= DIC; + mem_d[2*ADDRH+:2] <= DID; + mem_e[2*ADDRH+:2] <= DIE; + mem_f[2*ADDRH+:2] <= DIF; + mem_g[2*ADDRH+:2] <= DIG; + mem_h[2*ADDRH+:2] <= DIH; + end +endmodule + +(* abc9_box, lib_whitebox *) +module RAM64M ( + output DOA, + output DOB, + output DOC, + output DOD, + input [5:0] ADDRA, ADDRB, ADDRC, + input [5:0] ADDRD, + input DIA, + input DIB, + input DIC, + input DID, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT_A = 64'h0000000000000000; + parameter [63:0] INIT_B = 64'h0000000000000000; + parameter [63:0] INIT_C = 64'h0000000000000000; + parameter [63:0] INIT_D = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [63:0] mem_a = INIT_A; + reg [63:0] mem_b = INIT_B; + reg [63:0] mem_c = INIT_C; + reg [63:0] mem_d = INIT_D; + assign DOA = mem_a[ADDRA]; + assign DOB = mem_b[ADDRB]; + assign DOC = mem_c[ADDRC]; + assign DOD = mem_d[ADDRD]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) + if (WE) begin + mem_a[ADDRD] <= DIA; + mem_b[ADDRD] <= DIB; + mem_c[ADDRD] <= DIC; + mem_d[ADDRD] <= DID; + end + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L818-L830 + $setup(ADDRD[0], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 362); + $setup(ADDRD[0], negedge WCLK &&& IS_WCLK_INVERTED && WE, 362); + $setup(ADDRD[1], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 245); + $setup(ADDRD[1], negedge WCLK &&& IS_WCLK_INVERTED && WE, 245); + $setup(ADDRD[2], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 208); + $setup(ADDRD[2], negedge WCLK &&& IS_WCLK_INVERTED && WE, 208); + $setup(ADDRD[3], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 147); + $setup(ADDRD[3], negedge WCLK &&& IS_WCLK_INVERTED && WE, 147); + $setup(ADDRD[4], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 68); + $setup(ADDRD[4], negedge WCLK &&& IS_WCLK_INVERTED && WE, 68); + $setup(ADDRD[5], posedge WCLK &&& !IS_WCLK_INVERTED && WE, 66); + $setup(ADDRD[5], negedge WCLK &&& IS_WCLK_INVERTED && WE, 66); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L986-L988 + $setup(DIA, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 384); + $setup(DIA, negedge WCLK &&& IS_WCLK_INVERTED && WE, 384); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L1054-L1056 + $setup(DIB, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 354); + $setup(DIB, negedge WCLK &&& IS_WCLK_INVERTED && WE, 354); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L1122-L1124 + $setup(DIC, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 375); + $setup(DIC, negedge WCLK &&& IS_WCLK_INVERTED && WE, 375); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L1190-L1192 + $setup(DID, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 310); + $setup(DID, negedge WCLK &&& IS_WCLK_INVERTED && WE, 310); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/31f51ac5ec7448dd6f79a8267f147123e4413c21/artix7/timings/CLBLM_R.sdf#L834 + $setup(WE, posedge WCLK &&& !IS_WCLK_INVERTED && WE, 654); + $setup(WE, negedge WCLK &&& IS_WCLK_INVERTED && WE, 654); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L889 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOA : DIA)) = 1153; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOA : DIA)) = 1153; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOB : DIB)) = 1161; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOB : DIB)) = 1161; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L1025 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOC : DIC)) = 1158; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOC : DIC)) = 1158; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L1093 + if (!IS_WCLK_INVERTED && WE) (posedge WCLK => (DOD : DID)) = 1163; + if ( IS_WCLK_INVERTED && WE) (negedge WCLK => (DOD : DID)) = 1163; + (ADDRA[0] => DOA) = 642; (ADDRB[0] => DOB) = 642; (ADDRC[0] => DOC) = 642; (ADDRD[0] => DOD) = 642; + (ADDRA[1] => DOA) = 631; (ADDRB[1] => DOB) = 631; (ADDRC[1] => DOC) = 631; (ADDRD[1] => DOD) = 631; + (ADDRA[2] => DOA) = 472; (ADDRB[2] => DOB) = 472; (ADDRC[2] => DOC) = 472; (ADDRD[2] => DOD) = 472; + (ADDRA[3] => DOA) = 407; (ADDRB[3] => DOB) = 407; (ADDRC[3] => DOC) = 407; (ADDRD[3] => DOD) = 407; + (ADDRA[4] => DOA) = 238; (ADDRB[4] => DOB) = 238; (ADDRC[4] => DOC) = 238; (ADDRD[4] => DOD) = 238; + endspecify +endmodule + +module RAM64M8 ( + output DOA, + output DOB, + output DOC, + output DOD, + output DOE, + output DOF, + output DOG, + output DOH, + input [5:0] ADDRA, + input [5:0] ADDRB, + input [5:0] ADDRC, + input [5:0] ADDRD, + input [5:0] ADDRE, + input [5:0] ADDRF, + input [5:0] ADDRG, + input [5:0] ADDRH, + input DIA, + input DIB, + input DIC, + input DID, + input DIE, + input DIF, + input DIG, + input DIH, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [63:0] INIT_A = 64'h0000000000000000; + parameter [63:0] INIT_B = 64'h0000000000000000; + parameter [63:0] INIT_C = 64'h0000000000000000; + parameter [63:0] INIT_D = 64'h0000000000000000; + parameter [63:0] INIT_E = 64'h0000000000000000; + parameter [63:0] INIT_F = 64'h0000000000000000; + parameter [63:0] INIT_G = 64'h0000000000000000; + parameter [63:0] INIT_H = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [63:0] mem_a = INIT_A; + reg [63:0] mem_b = INIT_B; + reg [63:0] mem_c = INIT_C; + reg [63:0] mem_d = INIT_D; + reg [63:0] mem_e = INIT_E; + reg [63:0] mem_f = INIT_F; + reg [63:0] mem_g = INIT_G; + reg [63:0] mem_h = INIT_H; + assign DOA = mem_a[ADDRA]; + assign DOB = mem_b[ADDRB]; + assign DOC = mem_c[ADDRC]; + assign DOD = mem_d[ADDRD]; + assign DOE = mem_e[ADDRE]; + assign DOF = mem_f[ADDRF]; + assign DOG = mem_g[ADDRG]; + assign DOH = mem_h[ADDRH]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) + if (WE) begin + mem_a[ADDRH] <= DIA; + mem_b[ADDRH] <= DIB; + mem_c[ADDRH] <= DIC; + mem_d[ADDRH] <= DID; + mem_e[ADDRH] <= DIE; + mem_f[ADDRH] <= DIF; + mem_g[ADDRH] <= DIG; + mem_h[ADDRH] <= DIH; + end +endmodule + +module RAM32X16DR8 ( + output DOA, + output DOB, + output DOC, + output DOD, + output DOE, + output DOF, + output DOG, + output [1:0] DOH, + input [5:0] ADDRA, ADDRB, ADDRC, ADDRD, ADDRE, ADDRF, ADDRG, + input [4:0] ADDRH, + input [1:0] DIA, + input [1:0] DIB, + input [1:0] DIC, + input [1:0] DID, + input [1:0] DIE, + input [1:0] DIF, + input [1:0] DIG, + input [1:0] DIH, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE +); + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [63:0] mem_a, mem_b, mem_c, mem_d, mem_e, mem_f, mem_g, mem_h; + assign DOA = mem_a[ADDRA]; + assign DOB = mem_b[ADDRB]; + assign DOC = mem_c[ADDRC]; + assign DOD = mem_d[ADDRD]; + assign DOE = mem_e[ADDRE]; + assign DOF = mem_f[ADDRF]; + assign DOG = mem_g[ADDRG]; + assign DOH = mem_h[2*ADDRH+:2]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) + if (WE) begin + mem_a[2*ADDRH+:2] <= DIA; + mem_b[2*ADDRH+:2] <= DIB; + mem_c[2*ADDRH+:2] <= DIC; + mem_d[2*ADDRH+:2] <= DID; + mem_e[2*ADDRH+:2] <= DIE; + mem_f[2*ADDRH+:2] <= DIF; + mem_g[2*ADDRH+:2] <= DIG; + mem_h[2*ADDRH+:2] <= DIH; + end +endmodule + +module RAM64X8SW ( + output [7:0] O, + input [5:0] A, + input D, + (* clkbuf_sink *) + (* invertible_pin = "IS_WCLK_INVERTED" *) + input WCLK, + input WE, + input [2:0] WSEL +); + parameter [63:0] INIT_A = 64'h0000000000000000; + parameter [63:0] INIT_B = 64'h0000000000000000; + parameter [63:0] INIT_C = 64'h0000000000000000; + parameter [63:0] INIT_D = 64'h0000000000000000; + parameter [63:0] INIT_E = 64'h0000000000000000; + parameter [63:0] INIT_F = 64'h0000000000000000; + parameter [63:0] INIT_G = 64'h0000000000000000; + parameter [63:0] INIT_H = 64'h0000000000000000; + parameter [0:0] IS_WCLK_INVERTED = 1'b0; + reg [63:0] mem_a = INIT_A; + reg [63:0] mem_b = INIT_B; + reg [63:0] mem_c = INIT_C; + reg [63:0] mem_d = INIT_D; + reg [63:0] mem_e = INIT_E; + reg [63:0] mem_f = INIT_F; + reg [63:0] mem_g = INIT_G; + reg [63:0] mem_h = INIT_H; + assign O[7] = mem_a[A]; + assign O[6] = mem_b[A]; + assign O[5] = mem_c[A]; + assign O[4] = mem_d[A]; + assign O[3] = mem_e[A]; + assign O[2] = mem_f[A]; + assign O[1] = mem_g[A]; + assign O[0] = mem_h[A]; + wire clk = WCLK ^ IS_WCLK_INVERTED; + always @(posedge clk) + if (WE) begin + case (WSEL) + 3'b111: mem_a[A] <= D; + 3'b110: mem_b[A] <= D; + 3'b101: mem_c[A] <= D; + 3'b100: mem_d[A] <= D; + 3'b011: mem_e[A] <= D; + 3'b010: mem_f[A] <= D; + 3'b001: mem_g[A] <= D; + 3'b000: mem_h[A] <= D; + endcase + end +endmodule + +// ROM. + +module ROM16X1 ( + output O, + input A0, A1, A2, A3 +); + parameter [15:0] INIT = 16'h0; + assign O = INIT[{A3, A2, A1, A0}]; +endmodule + +module ROM32X1 ( + output O, + input A0, A1, A2, A3, A4 +); + parameter [31:0] INIT = 32'h0; + assign O = INIT[{A4, A3, A2, A1, A0}]; +endmodule + +module ROM64X1 ( + output O, + input A0, A1, A2, A3, A4, A5 +); + parameter [63:0] INIT = 64'h0; + assign O = INIT[{A5, A4, A3, A2, A1, A0}]; +endmodule + +module ROM128X1 ( + output O, + input A0, A1, A2, A3, A4, A5, A6 +); + parameter [127:0] INIT = 128'h0; + assign O = INIT[{A6, A5, A4, A3, A2, A1, A0}]; +endmodule + +module ROM256X1 ( + output O, + input A0, A1, A2, A3, A4, A5, A6, A7 +); + parameter [255:0] INIT = 256'h0; + assign O = INIT[{A7, A6, A5, A4, A3, A2, A1, A0}]; +endmodule + +// Shift registers. + +(* abc9_box, lib_whitebox *) +module SRL16 ( + output Q, + input A0, A1, A2, A3, + (* clkbuf_sink *) + input CLK, + input D +); + parameter [15:0] INIT = 16'h0000; + + reg [15:0] r = INIT; + assign Q = r[{A3,A2,A1,A0}]; + always @(posedge CLK) r <= { r[14:0], D }; + + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L905 + (posedge CLK => (Q : 1'bx)) = 1472; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L912 + $setup(D , posedge CLK, 173); + (A0 => Q) = 631; + (A1 => Q) = 472; + (A2 => Q) = 407; + (A3 => Q) = 238; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module SRL16E ( + output Q, + input A0, A1, A2, A3, CE, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK, + input D +); + parameter [15:0] INIT = 16'h0000; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + + reg [15:0] r = INIT; + assign Q = r[{A3,A2,A1,A0}]; + generate + if (IS_CLK_INVERTED) begin + always @(negedge CLK) if (CE) r <= { r[14:0], D }; + end + else + always @(posedge CLK) if (CE) r <= { r[14:0], D }; + endgenerate + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L912 + $setup(D , posedge CLK &&& !IS_CLK_INVERTED, 173); + $setup(D , negedge CLK &&& IS_CLK_INVERTED, 173); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L905 + if (!IS_CLK_INVERTED && CE) (posedge CLK => (Q : D)) = 1472; + if ( IS_CLK_INVERTED && CE) (negedge CLK => (Q : D)) = 1472; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L905 + if (!IS_CLK_INVERTED && CE) (posedge CLK => (Q : 1'bx)) = 1472; + if ( IS_CLK_INVERTED && CE) (negedge CLK => (Q : 1'bx)) = 1472; + (A0 => Q) = 631; + (A1 => Q) = 472; + (A2 => Q) = 407; + (A3 => Q) = 238; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module SRLC16 ( + output Q, + output Q15, + input A0, A1, A2, A3, + (* clkbuf_sink *) + input CLK, + input D +); + parameter [15:0] INIT = 16'h0000; + + reg [15:0] r = INIT; + assign Q15 = r[15]; + assign Q = r[{A3,A2,A1,A0}]; + always @(posedge CLK) r <= { r[14:0], D }; + + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L912 + $setup(D , posedge CLK, 173); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L905 + (posedge CLK => (Q : 1'bx)) = 1472; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L904 + (posedge CLK => (Q15 : 1'bx)) = 1114; + (A0 => Q) = 631; + (A1 => Q) = 472; + (A2 => Q) = 407; + (A3 => Q) = 238; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module SRLC16E ( + output Q, + output Q15, + input A0, A1, A2, A3, CE, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK, + input D +); + parameter [15:0] INIT = 16'h0000; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + + reg [15:0] r = INIT; + assign Q15 = r[15]; + assign Q = r[{A3,A2,A1,A0}]; + generate + if (IS_CLK_INVERTED) begin + always @(negedge CLK) if (CE) r <= { r[14:0], D }; + end + else + always @(posedge CLK) if (CE) r <= { r[14:0], D }; + endgenerate + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L912 + $setup(D , posedge CLK &&& !IS_CLK_INVERTED, 173); + $setup(D , negedge CLK &&& IS_CLK_INVERTED, 173); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE, posedge CLK &&& !IS_CLK_INVERTED, 109); + $setup(CE, negedge CLK &&& IS_CLK_INVERTED, 109); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L905 + if (!IS_CLK_INVERTED && CE) (posedge CLK => (Q : D)) = 1472; + if ( IS_CLK_INVERTED && CE) (negedge CLK => (Q : D)) = 1472; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L904 + if (!IS_CLK_INVERTED && CE) (posedge CLK => (Q15 : 1'bx)) = 1114; + if ( IS_CLK_INVERTED && CE) (negedge CLK => (Q15 : 1'bx)) = 1114; + (A0 => Q) = 631; + (A1 => Q) = 472; + (A2 => Q) = 407; + (A3 => Q) = 238; + endspecify +endmodule + +(* abc9_box, lib_whitebox *) +module SRLC32E ( + output Q, + output Q31, + input [4:0] A, + input CE, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK, + input D +); + parameter [31:0] INIT = 32'h00000000; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + + reg [31:0] r = INIT; + assign Q31 = r[31]; + assign Q = r[A]; + generate + if (IS_CLK_INVERTED) begin + always @(negedge CLK) if (CE) r <= { r[30:0], D }; + end + else + always @(posedge CLK) if (CE) r <= { r[30:0], D }; + endgenerate + specify + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L912 + $setup(D , posedge CLK &&& !IS_CLK_INVERTED, 173); + $setup(D , negedge CLK &&& IS_CLK_INVERTED, 173); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf#L248 + $setup(CE, posedge CLK &&& !IS_CLK_INVERTED, 109); + $setup(CE, negedge CLK &&& IS_CLK_INVERTED, 109); + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L905 + if (!IS_CLK_INVERTED && CE) (posedge CLK => (Q : 1'bx)) = 1472; + if ( IS_CLK_INVERTED && CE) (negedge CLK => (Q : 1'bx)) = 1472; + // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L904 + if (!IS_CLK_INVERTED && CE) (posedge CLK => (Q31 : 1'bx)) = 1114; + if ( IS_CLK_INVERTED && CE) (negedge CLK => (Q31 : 1'bx)) = 1114; + (A[0] => Q) = 642; + (A[1] => Q) = 631; + (A[2] => Q) = 472; + (A[3] => Q) = 407; + (A[4] => Q) = 238; + endspecify +endmodule + +module CFGLUT5 ( + output CDO, + output O5, + output O6, + input I4, + input I3, + input I2, + input I1, + input I0, + input CDI, + input CE, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK +); + parameter [31:0] INIT = 32'h00000000; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + wire clk = CLK ^ IS_CLK_INVERTED; + reg [31:0] r = INIT; + assign CDO = r[31]; + assign O5 = r[{1'b0, I3, I2, I1, I0}]; + assign O6 = r[{I4, I3, I2, I1, I0}]; + always @(posedge clk) if (CE) r <= {r[30:0], CDI}; +endmodule + +// DSP + +// Virtex 2, Virtex 2 Pro, Spartan 3. + +// Asynchronous mode. + +module MULT18X18 ( + input signed [17:0] A, + input signed [17:0] B, + output signed [35:0] P +); + +assign P = A * B; + +endmodule + +// Synchronous mode. + +module MULT18X18S ( + input signed [17:0] A, + input signed [17:0] B, + output reg signed [35:0] P, + (* clkbuf_sink *) + input C, + input CE, + input R +); + +always @(posedge C) + if (R) + P <= 0; + else if (CE) + P <= A * B; + +endmodule + +// Spartan 3E, Spartan 3A. + +module MULT18X18SIO ( + input signed [17:0] A, + input signed [17:0] B, + output signed [35:0] P, + (* clkbuf_sink *) + input CLK, + input CEA, + input CEB, + input CEP, + input RSTA, + input RSTB, + input RSTP, + input signed [17:0] BCIN, + output signed [17:0] BCOUT +); + +parameter integer AREG = 1; +parameter integer BREG = 1; +parameter B_INPUT = "DIRECT"; +parameter integer PREG = 1; + +// The multiplier. +wire signed [35:0] P_MULT; +wire signed [17:0] A_MULT; +wire signed [17:0] B_MULT; +assign P_MULT = A_MULT * B_MULT; + +// The cascade output. +assign BCOUT = B_MULT; + +// The B input multiplexer. +wire signed [17:0] B_MUX; +assign B_MUX = (B_INPUT == "DIRECT") ? B : BCIN; + +// The registers. +reg signed [17:0] A_REG; +reg signed [17:0] B_REG; +reg signed [35:0] P_REG; + +initial begin + A_REG = 0; + B_REG = 0; + P_REG = 0; +end + +always @(posedge CLK) begin + if (RSTA) + A_REG <= 0; + else if (CEA) + A_REG <= A; + + if (RSTB) + B_REG <= 0; + else if (CEB) + B_REG <= B_MUX; + + if (RSTP) + P_REG <= 0; + else if (CEP) + P_REG <= P_MULT; +end + +// The register enables. +assign A_MULT = (AREG == 1) ? A_REG : A; +assign B_MULT = (BREG == 1) ? B_REG : B_MUX; +assign P = (PREG == 1) ? P_REG : P_MULT; + +endmodule + +// Spartan 3A DSP. + +module DSP48A ( + input signed [17:0] A, + input signed [17:0] B, + input signed [47:0] C, + input signed [17:0] D, + input signed [47:0] PCIN, + input CARRYIN, + input [7:0] OPMODE, + output signed [47:0] P, + output signed [17:0] BCOUT, + output signed [47:0] PCOUT, + output CARRYOUT, + (* clkbuf_sink *) + input CLK, + input CEA, + input CEB, + input CEC, + input CED, + input CEM, + input CECARRYIN, + input CEOPMODE, + input CEP, + input RSTA, + input RSTB, + input RSTC, + input RSTD, + input RSTM, + input RSTCARRYIN, + input RSTOPMODE, + input RSTP +); + +parameter integer A0REG = 0; +parameter integer A1REG = 1; +parameter integer B0REG = 0; +parameter integer B1REG = 1; +parameter integer CREG = 1; +parameter integer DREG = 1; +parameter integer MREG = 1; +parameter integer CARRYINREG = 1; +parameter integer OPMODEREG = 1; +parameter integer PREG = 1; +parameter CARRYINSEL = "CARRYIN"; +parameter RSTTYPE = "SYNC"; + +// This is a strict subset of Spartan 6 -- reuse its model. + +/* verilator lint_off PINMISSING */ +DSP48A1 #( + .A0REG(A0REG), + .A1REG(A1REG), + .B0REG(B0REG), + .B1REG(B1REG), + .CREG(CREG), + .DREG(DREG), + .MREG(MREG), + .CARRYINREG(CARRYINREG), + .CARRYOUTREG(0), + .OPMODEREG(OPMODEREG), + .PREG(PREG), + .CARRYINSEL(CARRYINSEL), + .RSTTYPE(RSTTYPE) +) upgrade ( + .A(A), + .B(B), + .C(C), + .D(D), + .PCIN(PCIN), + .CARRYIN(CARRYIN), + .OPMODE(OPMODE), + // M unconnected + .P(P), + .BCOUT(BCOUT), + .PCOUT(PCOUT), + .CARRYOUT(CARRYOUT), + // CARRYOUTF unconnected + .CLK(CLK), + .CEA(CEA), + .CEB(CEB), + .CEC(CEC), + .CED(CED), + .CEM(CEM), + .CECARRYIN(CECARRYIN), + .CEOPMODE(CEOPMODE), + .CEP(CEP), + .RSTA(RSTA), + .RSTB(RSTB), + .RSTC(RSTC), + .RSTD(RSTD), + .RSTM(RSTM), + .RSTCARRYIN(RSTCARRYIN), + .RSTOPMODE(RSTOPMODE), + .RSTP(RSTP) +); +/* verilator lint_on PINMISSING */ + +endmodule + +// Spartan 6. + +module DSP48A1 ( + input signed [17:0] A, + input signed [17:0] B, + input signed [47:0] C, + input signed [17:0] D, + input signed [47:0] PCIN, + input CARRYIN, + input [7:0] OPMODE, + output signed [35:0] M, + output signed [47:0] P, + output signed [17:0] BCOUT, + output signed [47:0] PCOUT, + output CARRYOUT, + output CARRYOUTF, + (* clkbuf_sink *) + input CLK, + input CEA, + input CEB, + input CEC, + input CED, + input CEM, + input CECARRYIN, + input CEOPMODE, + input CEP, + input RSTA, + input RSTB, + input RSTC, + input RSTD, + input RSTM, + input RSTCARRYIN, + input RSTOPMODE, + input RSTP +); + +parameter integer A0REG = 0; +parameter integer A1REG = 1; +parameter integer B0REG = 0; +parameter integer B1REG = 1; +parameter integer CREG = 1; +parameter integer DREG = 1; +parameter integer MREG = 1; +parameter integer CARRYINREG = 1; +parameter integer CARRYOUTREG = 1; +parameter integer OPMODEREG = 1; +parameter integer PREG = 1; +parameter CARRYINSEL = "OPMODE5"; +parameter RSTTYPE = "SYNC"; + +wire signed [35:0] M_MULT; +wire signed [47:0] P_IN; +wire signed [17:0] A0_OUT; +wire signed [17:0] B0_OUT; +wire signed [17:0] A1_OUT; +wire signed [17:0] B1_OUT; +wire signed [17:0] B1_IN; +wire signed [47:0] C_OUT; +wire signed [17:0] D_OUT; +wire signed [7:0] OPMODE_OUT; +wire CARRYIN_OUT; +wire CARRYOUT_IN; +wire CARRYIN_IN; +reg signed [47:0] XMUX; +reg signed [47:0] ZMUX; + +// The registers. +reg signed [17:0] A0_REG; +reg signed [17:0] A1_REG; +reg signed [17:0] B0_REG; +reg signed [17:0] B1_REG; +reg signed [47:0] C_REG; +reg signed [17:0] D_REG; +reg signed [35:0] M_REG; +reg signed [47:0] P_REG; +reg [7:0] OPMODE_REG; +reg CARRYIN_REG; +reg CARRYOUT_REG; + +initial begin + A0_REG = 0; + A1_REG = 0; + B0_REG = 0; + B1_REG = 0; + C_REG = 0; + D_REG = 0; + M_REG = 0; + P_REG = 0; + OPMODE_REG = 0; + CARRYIN_REG = 0; + CARRYOUT_REG = 0; +end + +generate + +if (RSTTYPE == "SYNC") begin + always @(posedge CLK) begin + if (RSTA) begin + A0_REG <= 0; + A1_REG <= 0; + end else if (CEA) begin + A0_REG <= A; + A1_REG <= A0_OUT; + end + end + + always @(posedge CLK) begin + if (RSTB) begin + B0_REG <= 0; + B1_REG <= 0; + end else if (CEB) begin + B0_REG <= B; + B1_REG <= B1_IN; + end + end + + always @(posedge CLK) begin + if (RSTC) begin + C_REG <= 0; + end else if (CEC) begin + C_REG <= C; + end + end + + always @(posedge CLK) begin + if (RSTD) begin + D_REG <= 0; + end else if (CED) begin + D_REG <= D; + end + end + + always @(posedge CLK) begin + if (RSTM) begin + M_REG <= 0; + end else if (CEM) begin + M_REG <= M_MULT; + end + end + + always @(posedge CLK) begin + if (RSTP) begin + P_REG <= 0; + end else if (CEP) begin + P_REG <= P_IN; + end + end + + always @(posedge CLK) begin + if (RSTOPMODE) begin + OPMODE_REG <= 0; + end else if (CEOPMODE) begin + OPMODE_REG <= OPMODE; + end + end + + always @(posedge CLK) begin + if (RSTCARRYIN) begin + CARRYIN_REG <= 0; + CARRYOUT_REG <= 0; + end else if (CECARRYIN) begin + CARRYIN_REG <= CARRYIN_IN; + CARRYOUT_REG <= CARRYOUT_IN; + end + end +end else begin + always @(posedge CLK, posedge RSTA) begin + if (RSTA) begin + A0_REG <= 0; + A1_REG <= 0; + end else if (CEA) begin + A0_REG <= A; + A1_REG <= A0_OUT; + end + end + + always @(posedge CLK, posedge RSTB) begin + if (RSTB) begin + B0_REG <= 0; + B1_REG <= 0; + end else if (CEB) begin + B0_REG <= B; + B1_REG <= B1_IN; + end + end + + always @(posedge CLK, posedge RSTC) begin + if (RSTC) begin + C_REG <= 0; + end else if (CEC) begin + C_REG <= C; + end + end + + always @(posedge CLK, posedge RSTD) begin + if (RSTD) begin + D_REG <= 0; + end else if (CED) begin + D_REG <= D; + end + end + + always @(posedge CLK, posedge RSTM) begin + if (RSTM) begin + M_REG <= 0; + end else if (CEM) begin + M_REG <= M_MULT; + end + end + + always @(posedge CLK, posedge RSTP) begin + if (RSTP) begin + P_REG <= 0; + end else if (CEP) begin + P_REG <= P_IN; + end + end + + always @(posedge CLK, posedge RSTOPMODE) begin + if (RSTOPMODE) begin + OPMODE_REG <= 0; + end else if (CEOPMODE) begin + OPMODE_REG <= OPMODE; + end + end + + always @(posedge CLK, posedge RSTCARRYIN) begin + if (RSTCARRYIN) begin + CARRYIN_REG <= 0; + CARRYOUT_REG <= 0; + end else if (CECARRYIN) begin + CARRYIN_REG <= CARRYIN_IN; + CARRYOUT_REG <= CARRYOUT_IN; + end + end +end + +endgenerate + +// The register enables. +assign A0_OUT = (A0REG == 1) ? A0_REG : A; +assign A1_OUT = (A1REG == 1) ? A1_REG : A0_OUT; +assign B0_OUT = (B0REG == 1) ? B0_REG : B; +assign B1_OUT = (B1REG == 1) ? B1_REG : B1_IN; +assign C_OUT = (CREG == 1) ? C_REG : C; +assign D_OUT = (DREG == 1) ? D_REG : D; +assign M = (MREG == 1) ? M_REG : M_MULT; +assign P = (PREG == 1) ? P_REG : P_IN; +assign OPMODE_OUT = (OPMODEREG == 1) ? OPMODE_REG : OPMODE; +assign CARRYIN_OUT = (CARRYINREG == 1) ? CARRYIN_REG : CARRYIN_IN; +assign CARRYOUT = (CARRYOUTREG == 1) ? CARRYOUT_REG : CARRYOUT_IN; +assign CARRYOUTF = CARRYOUT; + +// The pre-adder. +wire signed [17:0] PREADDER; +assign B1_IN = OPMODE_OUT[4] ? PREADDER : B0_OUT; +assign PREADDER = OPMODE_OUT[6] ? D_OUT - B0_OUT : D_OUT + B0_OUT; + +// The multiplier. +assign M_MULT = A1_OUT * B1_OUT; + +// The carry in selection. +assign CARRYIN_IN = (CARRYINSEL == "OPMODE5") ? OPMODE_OUT[5] : CARRYIN; + +// The post-adder inputs. +always @* begin + case (OPMODE_OUT[1:0]) + 2'b00: XMUX <= 0; + 2'b01: XMUX <= M; + 2'b10: XMUX <= P; + 2'b11: XMUX <= {D_OUT[11:0], A1_OUT, B1_OUT}; + default: XMUX <= 48'hxxxxxxxxxxxx; + endcase +end + +always @* begin + case (OPMODE_OUT[3:2]) + 2'b00: ZMUX <= 0; + 2'b01: ZMUX <= PCIN; + 2'b10: ZMUX <= P; + 2'b11: ZMUX <= C_OUT; + default: ZMUX <= 48'hxxxxxxxxxxxx; + endcase +end + +// The post-adder. +wire signed [48:0] X_EXT; +wire signed [48:0] Z_EXT; +assign X_EXT = {1'b0, XMUX}; +assign Z_EXT = {1'b0, ZMUX}; +assign {CARRYOUT_IN, P_IN} = OPMODE_OUT[7] ? (Z_EXT - (X_EXT + CARRYIN_OUT)) : (Z_EXT + X_EXT + CARRYIN_OUT); + +// Cascade outputs. +assign BCOUT = B1_OUT; +assign PCOUT = P; + +endmodule + +module DSP48 ( + input signed [17:0] A, + input signed [17:0] B, + input signed [47:0] C, + input signed [17:0] BCIN, + input signed [47:0] PCIN, + input CARRYIN, + input [6:0] OPMODE, + input SUBTRACT, + input [1:0] CARRYINSEL, + output signed [47:0] P, + output signed [17:0] BCOUT, + output signed [47:0] PCOUT, + (* clkbuf_sink *) + input CLK, + input CEA, + input CEB, + input CEC, + input CEM, + input CECARRYIN, + input CECINSUB, + input CECTRL, + input CEP, + input RSTA, + input RSTB, + input RSTC, + input RSTM, + input RSTCARRYIN, + input RSTCTRL, + input RSTP +); + +parameter integer AREG = 1; +parameter integer BREG = 1; +parameter integer CREG = 1; +parameter integer MREG = 1; +parameter integer PREG = 1; +parameter integer CARRYINREG = 1; +parameter integer CARRYINSELREG = 1; +parameter integer OPMODEREG = 1; +parameter integer SUBTRACTREG = 1; +parameter B_INPUT = "DIRECT"; +parameter LEGACY_MODE = "MULT18X18S"; + +wire signed [17:0] A_OUT; +wire signed [17:0] B_OUT; +wire signed [47:0] C_OUT; +wire signed [35:0] M_MULT; +wire signed [35:0] M_OUT; +wire signed [47:0] P_IN; +wire [6:0] OPMODE_OUT; +wire [1:0] CARRYINSEL_OUT; +wire CARRYIN_OUT; +wire SUBTRACT_OUT; +reg INT_CARRYIN_XY; +reg INT_CARRYIN_Z; +reg signed [47:0] XMUX; +reg signed [47:0] YMUX; +wire signed [47:0] XYMUX; +reg signed [47:0] ZMUX; +reg CIN; + +// The B input multiplexer. +wire signed [17:0] B_MUX; +assign B_MUX = (B_INPUT == "DIRECT") ? B : BCIN; + +// The cascade output. +assign BCOUT = B_OUT; +assign PCOUT = P; + +// The registers. +reg signed [17:0] A0_REG; +reg signed [17:0] A1_REG; +reg signed [17:0] B0_REG; +reg signed [17:0] B1_REG; +reg signed [47:0] C_REG; +reg signed [35:0] M_REG; +reg signed [47:0] P_REG; +reg [6:0] OPMODE_REG; +reg [1:0] CARRYINSEL_REG; +reg SUBTRACT_REG; +reg CARRYIN_REG; +reg INT_CARRYIN_XY_REG; + +initial begin + A0_REG = 0; + A1_REG = 0; + B0_REG = 0; + B1_REG = 0; + C_REG = 0; + M_REG = 0; + P_REG = 0; + OPMODE_REG = 0; + CARRYINSEL_REG = 0; + SUBTRACT_REG = 0; + CARRYIN_REG = 0; + INT_CARRYIN_XY_REG = 0; +end + +always @(posedge CLK) begin + if (RSTA) begin + A0_REG <= 0; + A1_REG <= 0; + end else if (CEA) begin + A0_REG <= A; + A1_REG <= A0_REG; + end + if (RSTB) begin + B0_REG <= 0; + B1_REG <= 0; + end else if (CEB) begin + B0_REG <= B_MUX; + B1_REG <= B0_REG; + end + if (RSTC) begin + C_REG <= 0; + end else if (CEC) begin + C_REG <= C; + end + if (RSTM) begin + M_REG <= 0; + end else if (CEM) begin + M_REG <= M_MULT; + end + if (RSTP) begin + P_REG <= 0; + end else if (CEP) begin + P_REG <= P_IN; + end + if (RSTCTRL) begin + OPMODE_REG <= 0; + CARRYINSEL_REG <= 0; + SUBTRACT_REG <= 0; + end else begin + if (CECTRL) begin + OPMODE_REG <= OPMODE; + CARRYINSEL_REG <= CARRYINSEL; + end + if (CECINSUB) + SUBTRACT_REG <= SUBTRACT; + end + if (RSTCARRYIN) begin + CARRYIN_REG <= 0; + INT_CARRYIN_XY_REG <= 0; + end else begin + if (CECINSUB) + CARRYIN_REG <= CARRYIN; + if (CECARRYIN) + INT_CARRYIN_XY_REG <= INT_CARRYIN_XY; + end +end + +// The register enables. +assign A_OUT = (AREG == 2) ? A1_REG : (AREG == 1) ? A0_REG : A; +assign B_OUT = (BREG == 2) ? B1_REG : (BREG == 1) ? B0_REG : B_MUX; +assign C_OUT = (CREG == 1) ? C_REG : C; +assign M_OUT = (MREG == 1) ? M_REG : M_MULT; +assign P = (PREG == 1) ? P_REG : P_IN; +assign OPMODE_OUT = (OPMODEREG == 1) ? OPMODE_REG : OPMODE; +assign SUBTRACT_OUT = (SUBTRACTREG == 1) ? SUBTRACT_REG : SUBTRACT; +assign CARRYINSEL_OUT = (CARRYINSELREG == 1) ? CARRYINSEL_REG : CARRYINSEL; +assign CARRYIN_OUT = (CARRYINREG == 1) ? CARRYIN_REG : CARRYIN; + +// The multiplier. +assign M_MULT = A_OUT * B_OUT; + +// The post-adder inputs. +always @* begin + case (OPMODE_OUT[1:0]) + 2'b00: XMUX <= 0; + 2'b10: XMUX <= P; + 2'b11: XMUX <= {{12{A_OUT[17]}}, A_OUT, B_OUT}; + default: XMUX <= 48'hxxxxxxxxxxxx; + endcase + case (OPMODE_OUT[1:0]) + 2'b01: INT_CARRYIN_XY <= A_OUT[17] ~^ B_OUT[17]; + 2'b11: INT_CARRYIN_XY <= ~A_OUT[17]; + // TODO: not tested in hardware. + default: INT_CARRYIN_XY <= A_OUT[17] ~^ B_OUT[17]; + endcase +end + +always @* begin + case (OPMODE_OUT[3:2]) + 2'b00: YMUX <= 0; + 2'b11: YMUX <= C_OUT; + default: YMUX <= 48'hxxxxxxxxxxxx; + endcase +end + +assign XYMUX = (OPMODE_OUT[3:0] == 4'b0101) ? M_OUT : (XMUX + YMUX); + +always @* begin + case (OPMODE_OUT[6:4]) + 3'b000: ZMUX <= 0; + 3'b001: ZMUX <= PCIN; + 3'b010: ZMUX <= P; + 3'b011: ZMUX <= C_OUT; + 3'b101: ZMUX <= {{17{PCIN[47]}}, PCIN[47:17]}; + 3'b110: ZMUX <= {{17{P[47]}}, P[47:17]}; + default: ZMUX <= 48'hxxxxxxxxxxxx; + endcase + // TODO: check how all this works on actual hw. + if (OPMODE_OUT[1:0] == 2'b10) + INT_CARRYIN_Z <= ~P[47]; + else + case (OPMODE_OUT[6:4]) + 3'b001: INT_CARRYIN_Z <= ~PCIN[47]; + 3'b010: INT_CARRYIN_Z <= ~P[47]; + 3'b101: INT_CARRYIN_Z <= ~PCIN[47]; + 3'b110: INT_CARRYIN_Z <= ~P[47]; + default: INT_CARRYIN_Z <= 1'bx; + endcase +end + +always @* begin + case (CARRYINSEL_OUT) + 2'b00: CIN <= CARRYIN_OUT; + 2'b01: CIN <= INT_CARRYIN_Z; + 2'b10: CIN <= INT_CARRYIN_XY; + 2'b11: CIN <= INT_CARRYIN_XY_REG; + default: CIN <= 1'bx; + endcase +end + +// The post-adder. +assign P_IN = SUBTRACT_OUT ? (ZMUX - (XYMUX + CIN)) : (ZMUX + XYMUX + CIN); + +endmodule + +// TODO: DSP48E (Virtex 5). + +// Virtex 6, Series 7. + +`ifdef YOSYS +(* abc9_box=!(PREG || AREG || ADREG || BREG || CREG || DREG || MREG) +`ifdef ALLOW_WHITEBOX_DSP48E1 + // Do not make DSP48E1 a whitebox for ABC9 even if fully combinatorial, since it is a big complex block + , lib_whitebox=!(PREG || AREG || ADREG || BREG || CREG || DREG || MREG || INMODEREG || OPMODEREG || ALUMODEREG || CARRYINREG || CARRYINSELREG) +`endif +*) +`endif +module DSP48E1 ( + output [29:0] ACOUT, + output [17:0] BCOUT, + output reg CARRYCASCOUT, + output reg [3:0] CARRYOUT, + output reg MULTSIGNOUT, + output OVERFLOW, + output reg signed [47:0] P, + output reg PATTERNBDETECT, + output reg PATTERNDETECT, + output [47:0] PCOUT, + output UNDERFLOW, + input signed [29:0] A, + input [29:0] ACIN, + input [3:0] ALUMODE, + input signed [17:0] B, + input [17:0] BCIN, + input [47:0] C, + input CARRYCASCIN, + input CARRYIN, + input [2:0] CARRYINSEL, + input CEA1, + input CEA2, + input CEAD, + input CEALUMODE, + input CEB1, + input CEB2, + input CEC, + input CECARRYIN, + input CECTRL, + input CED, + input CEINMODE, + input CEM, + input CEP, + (* clkbuf_sink *) input CLK, + input [24:0] D, + input [4:0] INMODE, + input MULTSIGNIN, + input [6:0] OPMODE, + input [47:0] PCIN, + input RSTA, + input RSTALLCARRYIN, + input RSTALUMODE, + input RSTB, + input RSTC, + input RSTCTRL, + input RSTD, + input RSTINMODE, + input RSTM, + input RSTP +); + parameter integer ACASCREG = 1; + parameter integer ADREG = 1; + parameter integer ALUMODEREG = 1; + parameter integer AREG = 1; + parameter AUTORESET_PATDET = "NO_RESET"; + parameter A_INPUT = "DIRECT"; + parameter integer BCASCREG = 1; + parameter integer BREG = 1; + parameter B_INPUT = "DIRECT"; + parameter integer CARRYINREG = 1; + parameter integer CARRYINSELREG = 1; + parameter integer CREG = 1; + parameter integer DREG = 1; + parameter integer INMODEREG = 1; + parameter integer MREG = 1; + parameter integer OPMODEREG = 1; + parameter integer PREG = 1; + parameter SEL_MASK = "MASK"; + parameter SEL_PATTERN = "PATTERN"; + parameter USE_DPORT = "FALSE"; + parameter USE_MULT = "MULTIPLY"; + parameter USE_PATTERN_DETECT = "NO_PATDET"; + parameter USE_SIMD = "ONE48"; + parameter [47:0] MASK = 48'h3FFFFFFFFFFF; + parameter [47:0] PATTERN = 48'h000000000000; + parameter [3:0] IS_ALUMODE_INVERTED = 4'b0; + parameter [0:0] IS_CARRYIN_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [4:0] IS_INMODE_INVERTED = 5'b0; + parameter [6:0] IS_OPMODE_INVERTED = 7'b0; + +`ifdef YOSYS + function integer \A.required ; + begin + if (AREG != 0) \A.required = 254; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin + if (MREG != 0) \A.required = 1416; + else if (PREG != 0) \A.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 3030 : 2739) ; + end + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin + // Worst-case from ADREG and MREG + if (MREG != 0) \A.required = 2400; + else if (ADREG != 0) \A.required = 1283; + else if (PREG != 0) \A.required = 3723; + else if (PREG != 0) \A.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 4014 : 3723) ; + end + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin + if (PREG != 0) \A.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1730 : 1441) ; + end + end + endfunction + function integer \B.required ; + begin + if (BREG != 0) \B.required = 324; + else if (MREG != 0) \B.required = 1285; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin + if (PREG != 0) \B.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 2898 : 2608) ; + end + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin + if (PREG != 0) \B.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 2898 : 2608) ; + end + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin + if (PREG != 0) \B.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1718 : 1428) ; + end + end + endfunction + function integer \C.required ; + begin + if (CREG != 0) \C.required = 168; + else if (PREG != 0) \C.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1534 : 1244) ; + end + endfunction + function integer \D.required ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin + end + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin + if (DREG != 0) \D.required = 248; + else if (ADREG != 0) \D.required = 1195; + else if (MREG != 0) \D.required = 2310; + else if (PREG != 0) \D.required = (USE_PATTERN_DETECT != "NO_PATDET" ? 3925 : 3635) ; + end + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin + end + end + endfunction + function integer \P.arrival ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin + if (PREG != 0) \P.arrival = 329; + // Worst-case from CREG and MREG + else if (CREG != 0) \P.arrival = 1687; + else if (MREG != 0) \P.arrival = 1671; + // Worst-case from AREG and BREG + else if (AREG != 0) \P.arrival = 2952; + else if (BREG != 0) \P.arrival = 2813; + end + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin + if (PREG != 0) \P.arrival = 329; + // Worst-case from CREG and MREG + else if (CREG != 0) \P.arrival = 1687; + else if (MREG != 0) \P.arrival = 1671; + // Worst-case from AREG, ADREG, BREG, DREG + else if (AREG != 0) \P.arrival = 3935; + else if (DREG != 0) \P.arrival = 3908; + else if (ADREG != 0) \P.arrival = 2958; + else if (BREG != 0) \P.arrival = 2813; + end + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin + if (PREG != 0) \P.arrival = 329; + // Worst-case from AREG, BREG, CREG + else if (CREG != 0) \P.arrival = 1687; + else if (AREG != 0) \P.arrival = 1632; + else if (BREG != 0) \P.arrival = 1616; + end + end + endfunction + function integer \PCOUT.arrival ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin + if (PREG != 0) \PCOUT.arrival = 435; + // Worst-case from CREG and MREG + else if (CREG != 0) \PCOUT.arrival = 1835; + else if (MREG != 0) \PCOUT.arrival = 1819; + // Worst-case from AREG and BREG + else if (AREG != 0) \PCOUT.arrival = 3098; + else if (BREG != 0) \PCOUT.arrival = 2960; + end + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin + if (PREG != 0) \PCOUT.arrival = 435; + // Worst-case from CREG and MREG + else if (CREG != 0) \PCOUT.arrival = 1835; + else if (MREG != 0) \PCOUT.arrival = 1819; + // Worst-case from AREG, ADREG, BREG, DREG + else if (AREG != 0) \PCOUT.arrival = 4083; + else if (DREG != 0) \PCOUT.arrival = 4056; + else if (BREG != 0) \PCOUT.arrival = 2960; + else if (ADREG != 0) \PCOUT.arrival = 2859; + end + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin + if (PREG != 0) \PCOUT.arrival = 435; + // Worst-case from AREG, BREG, CREG + else if (CREG != 0) \PCOUT.arrival = 1835; + else if (AREG != 0) \PCOUT.arrival = 1780; + else if (BREG != 0) \PCOUT.arrival = 1765; + end + end + endfunction + function integer \A.P.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") \A.P.comb = 2823; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \A.P.comb = 3806; + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") \A.P.comb = 1523; + end + endfunction + function integer \A.PCOUT.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") \A.PCOUT.comb = 2970; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \A.PCOUT.comb = 3954; + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") \A.PCOUT.comb = 1671; + end + endfunction + function integer \B.P.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") \B.P.comb = 2690; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \B.P.comb = 2690; + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") \B.P.comb = 1509; + end + endfunction + function integer \B.PCOUT.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") \B.PCOUT.comb = 2838; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \B.PCOUT.comb = 2838; + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") \B.PCOUT.comb = 1658; + end + endfunction + function integer \C.P.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") \C.P.comb = 1325; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \C.P.comb = 1325; + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") \C.P.comb = 1325; + end + endfunction + function integer \C.PCOUT.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") \C.PCOUT.comb = 1474; + else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \C.PCOUT.comb = 1474; + else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") \C.PCOUT.comb = 1474; + end + endfunction + function integer \D.P.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \D.P.comb = 3717; + end + endfunction + function integer \D.PCOUT.comb ; + begin + if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") \D.PCOUT.comb = 3700; + end + endfunction + + generate + if (PREG == 0 && MREG == 0 && AREG == 0 && ADREG == 0) + specify + (A *> P) = \A.P.comb (); + (A *> PCOUT) = \A.PCOUT.comb (); + endspecify + else + specify + $setup(A, posedge CLK &&& !IS_CLK_INVERTED, \A.required () ); + $setup(A, negedge CLK &&& IS_CLK_INVERTED, \A.required () ); + endspecify + + if (PREG == 0 && MREG == 0 && BREG == 0) + specify + (B *> P) = \B.P.comb (); + (B *> PCOUT) = \B.PCOUT.comb (); + endspecify + else + specify + $setup(B, posedge CLK &&& !IS_CLK_INVERTED, \B.required () ); + $setup(B, negedge CLK &&& IS_CLK_INVERTED, \B.required () ); + endspecify + + if (PREG == 0 && CREG == 0) + specify + (C *> P) = \C.P.comb (); + (C *> PCOUT) = \C.PCOUT.comb (); + endspecify + else + specify + $setup(C, posedge CLK &&& !IS_CLK_INVERTED, \C.required () ); + $setup(C, negedge CLK &&& IS_CLK_INVERTED, \C.required () ); + endspecify + + if (PREG == 0 && MREG == 0 && ADREG == 0 && DREG == 0) + specify + (D *> P) = \D.P.comb (); + (D *> PCOUT) = \D.PCOUT.comb (); + endspecify + else + specify + $setup(D, posedge CLK &&& !IS_CLK_INVERTED, \D.required () ); + $setup(D, negedge CLK &&& IS_CLK_INVERTED, \D.required () ); + endspecify + + if (PREG == 0) + specify + (PCIN *> P) = 1107; + (PCIN *> PCOUT) = 1255; + endspecify + else + specify + $setup(PCIN, posedge CLK &&& !IS_CLK_INVERTED, USE_PATTERN_DETECT != "NO_PATDET" ? 1315 : 1025); + $setup(PCIN, negedge CLK &&& IS_CLK_INVERTED, USE_PATTERN_DETECT != "NO_PATDET" ? 1315 : 1025); + endspecify + + if (PREG || AREG || ADREG || BREG || CREG || DREG || MREG) + specify + if (!IS_CLK_INVERTED && CEP) (posedge CLK => (P : 48'bx)) = \P.arrival () ; + if ( IS_CLK_INVERTED && CEP) (negedge CLK => (P : 48'bx)) = \P.arrival () ; + if (!IS_CLK_INVERTED && CEP) (posedge CLK => (PCOUT : 48'bx)) = \PCOUT.arrival () ; + if ( IS_CLK_INVERTED && CEP) (negedge CLK => (PCOUT : 48'bx)) = \PCOUT.arrival () ; + endspecify + endgenerate +`endif + + initial begin +`ifndef YOSYS + if (AUTORESET_PATDET != "NO_RESET") $fatal(1, "Unsupported AUTORESET_PATDET value"); + if (SEL_MASK != "MASK") $fatal(1, "Unsupported SEL_MASK value"); + if (SEL_PATTERN != "PATTERN") $fatal(1, "Unsupported SEL_PATTERN value"); + if (USE_SIMD != "ONE48" && USE_SIMD != "TWO24" && USE_SIMD != "FOUR12") $fatal(1, "Unsupported USE_SIMD value"); + if (IS_ALUMODE_INVERTED != 4'b0) $fatal(1, "Unsupported IS_ALUMODE_INVERTED value"); + if (IS_CARRYIN_INVERTED != 1'b0) $fatal(1, "Unsupported IS_CARRYIN_INVERTED value"); + if (IS_CLK_INVERTED != 1'b0) $fatal(1, "Unsupported IS_CLK_INVERTED value"); + if (IS_INMODE_INVERTED != 5'b0) $fatal(1, "Unsupported IS_INMODE_INVERTED value"); + if (IS_OPMODE_INVERTED != 7'b0) $fatal(1, "Unsupported IS_OPMODE_INVERTED value"); +`endif + end + + wire signed [29:0] A_muxed; + wire signed [17:0] B_muxed; + + generate + if (A_INPUT == "CASCADE") assign A_muxed = ACIN; + else assign A_muxed = A; + + if (B_INPUT == "CASCADE") assign B_muxed = BCIN; + else assign B_muxed = B; + endgenerate + + reg signed [29:0] Ar1, Ar2; + reg signed [24:0] Dr; + reg signed [17:0] Br1, Br2; + reg signed [47:0] Cr; + reg [4:0] INMODEr; + reg [6:0] OPMODEr; + reg [3:0] ALUMODEr; + reg [2:0] CARRYINSELr; + + generate + // Configurable A register + if (AREG == 2) begin + initial Ar1 = 30'b0; + initial Ar2 = 30'b0; + always @(posedge CLK) + if (RSTA) begin + Ar1 <= 30'b0; + Ar2 <= 30'b0; + end else begin + if (CEA1) Ar1 <= A_muxed; + if (CEA2) Ar2 <= Ar1; + end + end else if (AREG == 1) begin + //initial Ar1 = 30'b0; + initial Ar2 = 30'b0; + always @(posedge CLK) + if (RSTA) begin + Ar1 <= 30'b0; + Ar2 <= 30'b0; + end else begin + if (CEA1) Ar1 <= A_muxed; + if (CEA2) Ar2 <= A_muxed; + end + end else begin + always @* Ar1 <= A_muxed; + always @* Ar2 <= A_muxed; + end + + // Configurable B register + if (BREG == 2) begin + initial Br1 = 25'b0; + initial Br2 = 25'b0; + always @(posedge CLK) + if (RSTB) begin + Br1 <= 18'b0; + Br2 <= 18'b0; + end else begin + if (CEB1) Br1 <= B_muxed; + if (CEB2) Br2 <= Br1; + end + end else if (BREG == 1) begin + //initial Br1 = 18'b0; + initial Br2 = 18'b0; + always @(posedge CLK) + if (RSTB) begin + Br1 <= 18'b0; + Br2 <= 18'b0; + end else begin + if (CEB1) Br1 <= B_muxed; + if (CEB2) Br2 <= B_muxed; + end + end else begin + always @* Br1 <= B_muxed; + always @* Br2 <= B_muxed; + end + + // C and D registers + if (CREG == 1) initial Cr = 48'b0; + if (CREG == 1) begin always @(posedge CLK) if (RSTC) Cr <= 48'b0; else if (CEC) Cr <= C; end + else always @* Cr <= C; + + if (CREG == 1) initial Dr = 25'b0; + if (DREG == 1) begin always @(posedge CLK) if (RSTD) Dr <= 25'b0; else if (CED) Dr <= D; end + else always @* Dr <= D; + + // Control registers + if (INMODEREG == 1) initial INMODEr = 5'b0; + if (INMODEREG == 1) begin always @(posedge CLK) if (RSTINMODE) INMODEr <= 5'b0; else if (CEINMODE) INMODEr <= INMODE; end + else always @* INMODEr <= INMODE; + if (OPMODEREG == 1) initial OPMODEr = 7'b0; + if (OPMODEREG == 1) begin always @(posedge CLK) if (RSTCTRL) OPMODEr <= 7'b0; else if (CECTRL) OPMODEr <= OPMODE; end + else always @* OPMODEr <= OPMODE; + if (ALUMODEREG == 1) initial ALUMODEr = 4'b0; + if (ALUMODEREG == 1) begin always @(posedge CLK) if (RSTALUMODE) ALUMODEr <= 4'b0; else if (CEALUMODE) ALUMODEr <= ALUMODE; end + else always @* ALUMODEr <= ALUMODE; + if (CARRYINSELREG == 1) initial CARRYINSELr = 3'b0; + if (CARRYINSELREG == 1) begin always @(posedge CLK) if (RSTCTRL) CARRYINSELr <= 3'b0; else if (CECTRL) CARRYINSELr <= CARRYINSEL; end + else always @* CARRYINSELr <= CARRYINSEL; + endgenerate + + // A and B cascade + generate + if (ACASCREG == 1 && AREG == 2) assign ACOUT = Ar1; + else assign ACOUT = Ar2; + if (BCASCREG == 1 && BREG == 2) assign BCOUT = Br1; + else assign BCOUT = Br2; + endgenerate + + // A/D input selection and pre-adder + wire signed [24:0] Ar12_muxed = INMODEr[0] ? Ar1 : Ar2; + wire signed [24:0] Ar12_gated = INMODEr[1] ? 25'b0 : Ar12_muxed; + wire signed [24:0] Dr_gated = INMODEr[2] ? Dr : 25'b0; + wire signed [24:0] AD_result = INMODEr[3] ? (Dr_gated - Ar12_gated) : (Dr_gated + Ar12_gated); + reg signed [24:0] ADr; + + generate + if (ADREG == 1) initial ADr = 25'b0; + if (ADREG == 1) begin always @(posedge CLK) if (RSTD) ADr <= 25'b0; else if (CEAD) ADr <= AD_result; end + else always @* ADr <= AD_result; + endgenerate + + // 25x18 multiplier + wire signed [24:0] A_MULT; + wire signed [17:0] B_MULT = INMODEr[4] ? Br1 : Br2; + generate + if (USE_DPORT == "TRUE") assign A_MULT = ADr; + else assign A_MULT = Ar12_gated; + endgenerate + + wire signed [42:0] M = A_MULT * B_MULT; + wire signed [42:0] Mx = (CARRYINSEL == 3'b010) ? 43'bx : M; + reg signed [42:0] Mr = 43'b0; + + // Multiplier result register + generate + if (MREG == 1) begin always @(posedge CLK) if (RSTM) Mr <= 43'b0; else if (CEM) Mr <= Mx; end + else always @* Mr <= Mx; + endgenerate + + wire signed [42:0] Mrx = (CARRYINSELr == 3'b010) ? 43'bx : Mr; + + // X, Y and Z ALU inputs + reg signed [47:0] X, Y, Z; + + always @* begin + // X multiplexer + case (OPMODEr[1:0]) + 2'b00: X = 48'b0; + 2'b01: begin X = $signed(Mrx); +`ifndef YOSYS + if (OPMODEr[3:2] != 2'b01) $fatal(1, "OPMODEr[3:2] must be 2'b01 when OPMODEr[1:0] is 2'b01"); +`endif + end + 2'b10: + if (PREG == 1) + X = P; + else begin + X = 48'bx; +`ifndef YOSYS + $fatal(1, "PREG must be 1 when OPMODEr[1:0] is 2'b10"); +`endif + end + 2'b11: X = $signed({Ar2, Br2}); + default: X = 48'bx; + endcase + + // Y multiplexer + case (OPMODEr[3:2]) + 2'b00: Y = 48'b0; + 2'b01: begin Y = 48'b0; // FIXME: more accurate partial product modelling? +`ifndef YOSYS + if (OPMODEr[1:0] != 2'b01) $fatal(1, "OPMODEr[1:0] must be 2'b01 when OPMODEr[3:2] is 2'b01"); +`endif + end + 2'b10: Y = {48{1'b1}}; + 2'b11: Y = Cr; + default: Y = 48'bx; + endcase + + // Z multiplexer + case (OPMODEr[6:4]) + 3'b000: Z = 48'b0; + 3'b001: Z = PCIN; + 3'b010: + if (PREG == 1) + Z = P; + else begin + Z = 48'bx; +`ifndef YOSYS + $fatal(1, "PREG must be 1 when OPMODEr[6:4] is 3'b010"); +`endif + end + 3'b011: Z = Cr; + 3'b100: + if (PREG == 1 && OPMODEr[3:0] === 4'b1000) + Z = P; + else begin + Z = 48'bx; +`ifndef YOSYS + if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] is 3'b100"); + if (OPMODEr[3:0] != 4'b1000) $fatal(1, "OPMODEr[3:0] must be 4'b1000 when OPMODEr[6:4] i0s 3'b100"); +`endif + end + 3'b101: Z = $signed(PCIN[47:17]); + 3'b110: + if (PREG == 1) + Z = $signed(P[47:17]); + else begin + Z = 48'bx; +`ifndef YOSYS + $fatal(1, "PREG must be 1 when OPMODEr[6:4] is 3'b110"); +`endif + end + default: Z = 48'bx; + endcase + end + + // Carry in + wire A24_xnor_B17d = A_MULT[24] ~^ B_MULT[17]; + reg CARRYINr, A24_xnor_B17; + generate + if (CARRYINREG == 1) initial CARRYINr = 1'b0; + if (CARRYINREG == 1) begin always @(posedge CLK) if (RSTALLCARRYIN) CARRYINr <= 1'b0; else if (CECARRYIN) CARRYINr <= CARRYIN; end + else always @* CARRYINr = CARRYIN; + + if (MREG == 1) initial A24_xnor_B17 = 1'b0; + if (MREG == 1) begin always @(posedge CLK) if (RSTALLCARRYIN) A24_xnor_B17 <= 1'b0; else if (CEM) A24_xnor_B17 <= A24_xnor_B17d; end + else always @* A24_xnor_B17 = A24_xnor_B17d; + endgenerate + + reg cin_muxed; + + always @(*) begin + case (CARRYINSELr) + 3'b000: cin_muxed = CARRYINr; + 3'b001: cin_muxed = ~PCIN[47]; + 3'b010: cin_muxed = CARRYCASCIN; + 3'b011: cin_muxed = PCIN[47]; + 3'b100: + if (PREG == 1) + cin_muxed = CARRYCASCOUT; + else begin + cin_muxed = 1'bx; +`ifndef YOSYS + $fatal(1, "PREG must be 1 when CARRYINSEL is 3'b100"); +`endif + end + 3'b101: + if (PREG == 1) + cin_muxed = ~P[47]; + else begin + cin_muxed = 1'bx; +`ifndef YOSYS + $fatal(1, "PREG must be 1 when CARRYINSEL is 3'b101"); +`endif + end + 3'b110: cin_muxed = A24_xnor_B17; + 3'b111: + if (PREG == 1) + cin_muxed = P[47]; + else begin + cin_muxed = 1'bx; +`ifndef YOSYS + $fatal(1, "PREG must be 1 when CARRYINSEL is 3'b111"); +`endif + end + default: cin_muxed = 1'bx; + endcase + end + + wire alu_cin = (ALUMODEr[3] || ALUMODEr[2]) ? 1'b0 : cin_muxed; + + // ALU core + wire [47:0] Z_muxinv = ALUMODEr[0] ? ~Z : Z; + wire [47:0] xor_xyz = X ^ Y ^ Z_muxinv; + wire [47:0] maj_xyz = (X & Y) | (X & Z_muxinv) | (Y & Z_muxinv); + + wire [47:0] xor_xyz_muxed = ALUMODEr[3] ? maj_xyz : xor_xyz; + wire [47:0] maj_xyz_gated = ALUMODEr[2] ? 48'b0 : maj_xyz; + + wire [48:0] maj_xyz_simd_gated; + wire [3:0] int_carry_in, int_carry_out, ext_carry_out; + wire [47:0] alu_sum; + assign int_carry_in[0] = 1'b0; + wire [3:0] carryout_reset; + + generate + if (USE_SIMD == "FOUR12") begin + assign maj_xyz_simd_gated = { + maj_xyz_gated[47:36], + 1'b0, maj_xyz_gated[34:24], + 1'b0, maj_xyz_gated[22:12], + 1'b0, maj_xyz_gated[10:0], + alu_cin + }; + assign int_carry_in[3:1] = 3'b000; + assign ext_carry_out = { + int_carry_out[3], + maj_xyz_gated[35] ^ int_carry_out[2], + maj_xyz_gated[23] ^ int_carry_out[1], + maj_xyz_gated[11] ^ int_carry_out[0] + }; + assign carryout_reset = 4'b0000; + end else if (USE_SIMD == "TWO24") begin + assign maj_xyz_simd_gated = { + maj_xyz_gated[47:24], + 1'b0, maj_xyz_gated[22:0], + alu_cin + }; + assign int_carry_in[3:1] = {int_carry_out[2], 1'b0, int_carry_out[0]}; + assign ext_carry_out = { + int_carry_out[3], + 1'bx, + maj_xyz_gated[23] ^ int_carry_out[1], + 1'bx + }; + assign carryout_reset = 4'b0x0x; + end else begin + assign maj_xyz_simd_gated = {maj_xyz_gated, alu_cin}; + assign int_carry_in[3:1] = int_carry_out[2:0]; + assign ext_carry_out = { + int_carry_out[3], + 3'bxxx + }; + assign carryout_reset = 4'b0xxx; + end + + genvar i; + for (i = 0; i < 4; i = i + 1) + assign {int_carry_out[i], alu_sum[i*12 +: 12]} = {1'b0, maj_xyz_simd_gated[i*12 +: ((i == 3) ? 13 : 12)]} + + xor_xyz_muxed[i*12 +: 12] + int_carry_in[i]; + endgenerate + + wire signed [47:0] Pd = ALUMODEr[1] ? ~alu_sum : alu_sum; + wire [3:0] CARRYOUTd = (OPMODEr[3:0] == 4'b0101 || ALUMODEr[3:2] != 2'b00) ? 4'bxxxx : + ((ALUMODEr[0] & ALUMODEr[1]) ? ~ext_carry_out : ext_carry_out); + wire CARRYCASCOUTd = ext_carry_out[3]; + wire MULTSIGNOUTd = Mrx[42]; + + generate + if (PREG == 1) begin + initial P = 48'b0; + initial CARRYOUT = carryout_reset; + initial CARRYCASCOUT = 1'b0; + initial MULTSIGNOUT = 1'b0; + always @(posedge CLK) + if (RSTP) begin + P <= 48'b0; + CARRYOUT <= carryout_reset; + CARRYCASCOUT <= 1'b0; + MULTSIGNOUT <= 1'b0; + end else if (CEP) begin + P <= Pd; + CARRYOUT <= CARRYOUTd; + CARRYCASCOUT <= CARRYCASCOUTd; + MULTSIGNOUT <= MULTSIGNOUTd; + end + end else begin + always @* begin + P = Pd; + CARRYOUT = CARRYOUTd; + CARRYCASCOUT = CARRYCASCOUTd; + MULTSIGNOUT = MULTSIGNOUTd; + end + end + endgenerate + + assign PCOUT = P; + + generate + wire PATTERNDETECTd, PATTERNBDETECTd; + + if (USE_PATTERN_DETECT == "PATDET") begin + // TODO: Support SEL_PATTERN != "PATTERN" and SEL_MASK != "MASK + assign PATTERNDETECTd = &(~(Pd ^ PATTERN) | MASK); + assign PATTERNBDETECTd = &((Pd ^ PATTERN) | MASK); + end else begin + assign PATTERNDETECTd = 1'b1; + assign PATTERNBDETECTd = 1'b1; + end + + if (PREG == 1) begin + reg PATTERNDETECTPAST, PATTERNBDETECTPAST; + initial PATTERNDETECT = 1'b0; + initial PATTERNBDETECT = 1'b0; + initial PATTERNDETECTPAST = 1'b0; + initial PATTERNBDETECTPAST = 1'b0; + always @(posedge CLK) + if (RSTP) begin + PATTERNDETECT <= 1'b0; + PATTERNBDETECT <= 1'b0; + PATTERNDETECTPAST <= 1'b0; + PATTERNBDETECTPAST <= 1'b0; + end else if (CEP) begin + PATTERNDETECT <= PATTERNDETECTd; + PATTERNBDETECT <= PATTERNBDETECTd; + PATTERNDETECTPAST <= PATTERNDETECT; + PATTERNBDETECTPAST <= PATTERNBDETECT; + end + assign OVERFLOW = &{PATTERNDETECTPAST, ~PATTERNBDETECT, ~PATTERNDETECT}; + assign UNDERFLOW = &{PATTERNBDETECTPAST, ~PATTERNBDETECT, ~PATTERNDETECT}; + end else begin + always @* begin + PATTERNDETECT = PATTERNDETECTd; + PATTERNBDETECT = PATTERNBDETECTd; + end + assign OVERFLOW = 1'bx, UNDERFLOW = 1'bx; + end + endgenerate + +endmodule + +// TODO: DSP48E2 (Ultrascale). + +// Block RAM + +module RAMB18E1 ( + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKARDCLK_INVERTED" *) + input CLKARDCLK, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *) + input CLKBWRCLK, + (* invertible_pin = "IS_ENARDEN_INVERTED" *) + input ENARDEN, + (* invertible_pin = "IS_ENBWREN_INVERTED" *) + input ENBWREN, + input REGCEAREGCE, + input REGCEB, + (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *) + input RSTRAMARSTRAM, + (* invertible_pin = "IS_RSTRAMB_INVERTED" *) + input RSTRAMB, + (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *) + input RSTREGARSTREG, + (* invertible_pin = "IS_RSTREGB_INVERTED" *) + input RSTREGB, + input [13:0] ADDRARDADDR, + input [13:0] ADDRBWRADDR, + input [15:0] DIADI, + input [15:0] DIBDI, + input [1:0] DIPADIP, + input [1:0] DIPBDIP, + input [1:0] WEA, + input [3:0] WEBWE, + output [15:0] DOADO, + output [15:0] DOBDO, + output [1:0] DOPADOP, + output [1:0] DOPBDOP +); + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 18'h0; + parameter INIT_B = 18'h0; + parameter INIT_FILE = "NONE"; + parameter RAM_MODE = "TDP"; + parameter RDADDR_COLLISION_HWCONFIG = "DELAYED_WRITE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter RSTREG_PRIORITY_A = "RSTREG"; + parameter RSTREG_PRIORITY_B = "RSTREG"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SIM_DEVICE = "VIRTEX6"; + parameter SRVAL_A = 18'h0; + parameter SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + parameter IS_CLKARDCLK_INVERTED = 1'b0; + parameter IS_CLKBWRCLK_INVERTED = 1'b0; + parameter IS_ENARDEN_INVERTED = 1'b0; + parameter IS_ENBWREN_INVERTED = 1'b0; + parameter IS_RSTRAMARSTRAM_INVERTED = 1'b0; + parameter IS_RSTRAMB_INVERTED = 1'b0; + parameter IS_RSTREGARSTREG_INVERTED = 1'b0; + parameter IS_RSTREGB_INVERTED = 1'b0; + + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L13 + $setup(ADDRARDADDR, posedge CLKARDCLK, 566); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L17 + $setup(ADDRBWRADDR, posedge CLKBWRCLK, 566); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L19 + $setup(WEA, posedge CLKARDCLK, 532); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L21 + $setup(WEBWE, posedge CLKBWRCLK, 532); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L29 + $setup(REGCEAREGCE, posedge CLKARDCLK, 360); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L31 + $setup(RSTREGARSTREG, posedge CLKARDCLK, 342); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L49 + $setup(REGCEB, posedge CLKBWRCLK, 360); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L59 + $setup(RSTREGB, posedge CLKBWRCLK, 342); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L123 + $setup(DIADI, posedge CLKARDCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L133 + $setup(DIBDI, posedge CLKBWRCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L125 + $setup(DIPADIP, posedge CLKARDCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L135 + $setup(DIPBDIP, posedge CLKBWRCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L143 + if (&DOA_REG) (posedge CLKARDCLK => (DOADO : 16'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L144 + if (&DOA_REG) (posedge CLKARDCLK => (DOPADOP : 2'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L153 + if (|DOA_REG) (posedge CLKARDCLK => (DOADO : 16'bx)) = 882; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L154 + if (|DOA_REG) (posedge CLKARDCLK => (DOPADOP : 2'bx)) = 882; + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L163 + if (&DOB_REG) (posedge CLKBWRCLK => (DOBDO : 16'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L164 + if (&DOB_REG) (posedge CLKBWRCLK => (DOPBDOP : 2'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L173 + if (|DOB_REG) (posedge CLKBWRCLK => (DOBDO : 16'bx)) = 882; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L174 + if (|DOB_REG) (posedge CLKBWRCLK => (DOPBDOP : 2'bx)) = 882; + endspecify +endmodule + +module RAMB36E1 ( + output CASCADEOUTA, + output CASCADEOUTB, + output [31:0] DOADO, + output [31:0] DOBDO, + output [3:0] DOPADOP, + output [3:0] DOPBDOP, + output [7:0] ECCPARITY, + output [8:0] RDADDRECC, + output SBITERR, + output DBITERR, + (* invertible_pin = "IS_ENARDEN_INVERTED" *) + input ENARDEN, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKARDCLK_INVERTED" *) + input CLKARDCLK, + (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *) + input RSTRAMARSTRAM, + (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *) + input RSTREGARSTREG, + input CASCADEINA, + input REGCEAREGCE, + (* invertible_pin = "IS_ENBWREN_INVERTED" *) + input ENBWREN, + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *) + input CLKBWRCLK, + (* invertible_pin = "IS_RSTRAMB_INVERTED" *) + input RSTRAMB, + (* invertible_pin = "IS_RSTREGB_INVERTED" *) + input RSTREGB, + input CASCADEINB, + input REGCEB, + input INJECTDBITERR, + input INJECTSBITERR, + input [15:0] ADDRARDADDR, + input [15:0] ADDRBWRADDR, + input [31:0] DIADI, + input [31:0] DIBDI, + input [3:0] DIPADIP, + input [3:0] DIPBDIP, + input [3:0] WEA, + input [7:0] WEBWE +); + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter EN_ECC_READ = "FALSE"; + parameter EN_ECC_WRITE = "FALSE"; + parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_A = 36'h0; + parameter INIT_B = 36'h0; + parameter INIT_FILE = "NONE"; + parameter RAM_EXTENSION_A = "NONE"; + parameter RAM_EXTENSION_B = "NONE"; + parameter RAM_MODE = "TDP"; + parameter RDADDR_COLLISION_HWCONFIG = "DELAYED_WRITE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter RSTREG_PRIORITY_A = "RSTREG"; + parameter RSTREG_PRIORITY_B = "RSTREG"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SIM_DEVICE = "VIRTEX6"; + parameter SRVAL_A = 36'h0; + parameter SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + parameter IS_CLKARDCLK_INVERTED = 1'b0; + parameter IS_CLKBWRCLK_INVERTED = 1'b0; + parameter IS_ENARDEN_INVERTED = 1'b0; + parameter IS_ENBWREN_INVERTED = 1'b0; + parameter IS_RSTRAMARSTRAM_INVERTED = 1'b0; + parameter IS_RSTRAMB_INVERTED = 1'b0; + parameter IS_RSTREGARSTREG_INVERTED = 1'b0; + parameter IS_RSTREGB_INVERTED = 1'b0; + + specify + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L13 + $setup(ADDRARDADDR, posedge CLKARDCLK, 566); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L17 + $setup(ADDRBWRADDR, posedge CLKBWRCLK, 566); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L19 + $setup(WEA, posedge CLKARDCLK, 532); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L21 + $setup(WEBWE, posedge CLKBWRCLK, 532); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L29 + $setup(REGCEAREGCE, posedge CLKARDCLK, 360); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L31 + $setup(RSTREGARSTREG, posedge CLKARDCLK, 342); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L49 + $setup(REGCEB, posedge CLKBWRCLK, 360); + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L59 + $setup(RSTREGB, posedge CLKBWRCLK, 342); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L123 + $setup(DIADI, posedge CLKARDCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L133 + $setup(DIBDI, posedge CLKBWRCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L125 + $setup(DIPADIP, posedge CLKARDCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L135 + $setup(DIPBDIP, posedge CLKBWRCLK, 737); + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L143 + if (&DOA_REG) (posedge CLKARDCLK => (DOADO : 32'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L144 + if (&DOA_REG) (posedge CLKARDCLK => (DOPADOP : 4'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L153 + if (|DOA_REG) (posedge CLKARDCLK => (DOADO : 32'bx)) = 882; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L154 + if (|DOA_REG) (posedge CLKARDCLK => (DOPADOP : 4'bx)) = 882; + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L163 + if (&DOB_REG) (posedge CLKBWRCLK => (DOBDO : 32'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/BRAM_L.sdf#L164 + if (&DOB_REG) (posedge CLKBWRCLK => (DOPBDOP : 4'bx)) = 2454; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L173 + if (|DOB_REG) (posedge CLKBWRCLK => (DOBDO : 32'bx)) = 882; + // https://github.com/SymbiFlow/prjxray-db/blob/4bc6385ab300b1819848371f508185f57b649a0e/artix7/timings/BRAM_L.sdf#L174 + if (|DOB_REG) (posedge CLKBWRCLK => (DOPBDOP : 4'bx)) = 882; + endspecify +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/cells_xtra.v b/resources/netlist/resources/kernel/share/xilinx/cells_xtra.v new file mode 100644 index 0000000..aae0d3e --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/cells_xtra.v @@ -0,0 +1,34115 @@ +// Created by cells_xtra.py from Xilinx models + +module RAMB4_S1 (...); + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DO; + input [11:0] ADDR; + input [0:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input RST; +endmodule + +module RAMB4_S2 (...); + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DO; + input [10:0] ADDR; + input [1:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input RST; +endmodule + +module RAMB4_S4 (...); + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DO; + input [9:0] ADDR; + input [3:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input RST; +endmodule + +module RAMB4_S8 (...); + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DO; + input [8:0] ADDR; + input [7:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input RST; +endmodule + +module RAMB4_S16 (...); + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [15:0] DO; + input [7:0] ADDR; + input [15:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input RST; +endmodule + +module RAMB4_S1_S1 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [11:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [0:0] DOB; + input [11:0] ADDRB; + input [0:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S1_S2 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [11:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [1:0] DOB; + input [10:0] ADDRB; + input [1:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S1_S4 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [11:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [3:0] DOB; + input [9:0] ADDRB; + input [3:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S1_S8 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [11:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [7:0] DOB; + input [8:0] ADDRB; + input [7:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S1_S16 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [11:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [15:0] DOB; + input [7:0] ADDRB; + input [15:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S2_S2 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [10:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [1:0] DOB; + input [10:0] ADDRB; + input [1:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S2_S4 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [10:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [3:0] DOB; + input [9:0] ADDRB; + input [3:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S2_S8 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [10:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [7:0] DOB; + input [8:0] ADDRB; + input [7:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S2_S16 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [10:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [15:0] DOB; + input [7:0] ADDRB; + input [15:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S4_S4 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [9:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [3:0] DOB; + input [9:0] ADDRB; + input [3:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S4_S8 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [9:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [7:0] DOB; + input [8:0] ADDRB; + input [7:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S4_S16 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [9:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [15:0] DOB; + input [7:0] ADDRB; + input [15:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S8_S8 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DOA; + input [8:0] ADDRA; + input [7:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [7:0] DOB; + input [8:0] ADDRB; + input [7:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S8_S16 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DOA; + input [8:0] ADDRA; + input [7:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [15:0] DOB; + input [7:0] ADDRB; + input [15:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB4_S16_S16 (...); + parameter SIM_COLLISION_CHECK = "ALL"; + parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [15:0] DOA; + input [7:0] ADDRA; + input [15:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input RSTA; + output [15:0] DOB; + input [7:0] ADDRB; + input [15:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input RSTB; +endmodule + +module RAMB16_S1 (...); + parameter [0:0] INIT = 1'h0; + parameter [0:0] SRVAL = 1'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DO; + input [13:0] ADDR; + input [0:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input SSR; +endmodule + +module RAMB16_S2 (...); + parameter [1:0] INIT = 2'h0; + parameter [1:0] SRVAL = 2'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DO; + input [12:0] ADDR; + input [1:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input SSR; +endmodule + +module RAMB16_S4 (...); + parameter [3:0] INIT = 4'h0; + parameter [3:0] SRVAL = 4'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DO; + input [11:0] ADDR; + input [3:0] DI; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input SSR; +endmodule + +module RAMB16_S9 (...); + parameter [8:0] INIT = 9'h0; + parameter [8:0] SRVAL = 9'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DO; + output [0:0] DOP; + input [10:0] ADDR; + input [7:0] DI; + input [0:0] DIP; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input SSR; +endmodule + +module RAMB16_S18 (...); + parameter [17:0] INIT = 18'h0; + parameter [17:0] SRVAL = 18'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [15:0] DO; + output [1:0] DOP; + input [9:0] ADDR; + input [15:0] DI; + input [1:0] DIP; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input SSR; +endmodule + +module RAMB16_S36 (...); + parameter [35:0] INIT = 36'h0; + parameter [35:0] SRVAL = 36'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [31:0] DO; + output [3:0] DOP; + input [8:0] ADDR; + input [31:0] DI; + input [3:0] DIP; + input EN; + (* clkbuf_sink *) + input CLK; + input WE; + input SSR; +endmodule + +module RAMB16_S1_S1 (...); + parameter [0:0] INIT_A = 1'h0; + parameter [0:0] INIT_B = 1'h0; + parameter [0:0] SRVAL_A = 1'h0; + parameter [0:0] SRVAL_B = 1'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [13:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [0:0] DOB; + input [13:0] ADDRB; + input [0:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S1_S2 (...); + parameter [0:0] INIT_A = 1'h0; + parameter [1:0] INIT_B = 2'h0; + parameter [0:0] SRVAL_A = 1'h0; + parameter [1:0] SRVAL_B = 2'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [13:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [1:0] DOB; + input [12:0] ADDRB; + input [1:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S1_S4 (...); + parameter [0:0] INIT_A = 1'h0; + parameter [3:0] INIT_B = 4'h0; + parameter [0:0] SRVAL_A = 1'h0; + parameter [3:0] SRVAL_B = 4'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [13:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [3:0] DOB; + input [11:0] ADDRB; + input [3:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S1_S9 (...); + parameter [0:0] INIT_A = 1'h0; + parameter [8:0] INIT_B = 9'h0; + parameter [0:0] SRVAL_A = 1'h0; + parameter [8:0] SRVAL_B = 9'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [13:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [7:0] DOB; + output [0:0] DOPB; + input [10:0] ADDRB; + input [7:0] DIB; + input [0:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S1_S18 (...); + parameter [0:0] INIT_A = 1'h0; + parameter [17:0] INIT_B = 18'h0; + parameter [0:0] SRVAL_A = 1'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [13:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [15:0] DOB; + output [1:0] DOPB; + input [9:0] ADDRB; + input [15:0] DIB; + input [1:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S1_S36 (...); + parameter [0:0] INIT_A = 1'h0; + parameter [35:0] INIT_B = 36'h0; + parameter [0:0] SRVAL_A = 1'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [0:0] DOA; + input [13:0] ADDRA; + input [0:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [31:0] DOB; + output [3:0] DOPB; + input [8:0] ADDRB; + input [31:0] DIB; + input [3:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S2_S2 (...); + parameter [1:0] INIT_A = 2'h0; + parameter [1:0] INIT_B = 2'h0; + parameter [1:0] SRVAL_A = 2'h0; + parameter [1:0] SRVAL_B = 2'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [12:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [1:0] DOB; + input [12:0] ADDRB; + input [1:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S2_S4 (...); + parameter [1:0] INIT_A = 2'h0; + parameter [3:0] INIT_B = 4'h0; + parameter [1:0] SRVAL_A = 2'h0; + parameter [3:0] SRVAL_B = 4'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [12:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [3:0] DOB; + input [11:0] ADDRB; + input [3:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S2_S9 (...); + parameter [1:0] INIT_A = 2'h0; + parameter [8:0] INIT_B = 9'h0; + parameter [1:0] SRVAL_A = 2'h0; + parameter [8:0] SRVAL_B = 9'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [12:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [7:0] DOB; + output [0:0] DOPB; + input [10:0] ADDRB; + input [7:0] DIB; + input [0:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S2_S18 (...); + parameter [1:0] INIT_A = 2'h0; + parameter [17:0] INIT_B = 18'h0; + parameter [1:0] SRVAL_A = 2'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [12:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [15:0] DOB; + output [1:0] DOPB; + input [9:0] ADDRB; + input [15:0] DIB; + input [1:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S2_S36 (...); + parameter [1:0] INIT_A = 2'h0; + parameter [35:0] INIT_B = 36'h0; + parameter [1:0] SRVAL_A = 2'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [1:0] DOA; + input [12:0] ADDRA; + input [1:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [31:0] DOB; + output [3:0] DOPB; + input [8:0] ADDRB; + input [31:0] DIB; + input [3:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S4_S4 (...); + parameter [3:0] INIT_A = 4'h0; + parameter [3:0] INIT_B = 4'h0; + parameter [3:0] SRVAL_A = 4'h0; + parameter [3:0] SRVAL_B = 4'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [11:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [3:0] DOB; + input [11:0] ADDRB; + input [3:0] DIB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S4_S9 (...); + parameter [3:0] INIT_A = 4'h0; + parameter [8:0] INIT_B = 9'h0; + parameter [3:0] SRVAL_A = 4'h0; + parameter [8:0] SRVAL_B = 9'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [11:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [7:0] DOB; + output [0:0] DOPB; + input [10:0] ADDRB; + input [7:0] DIB; + input [0:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S4_S18 (...); + parameter [3:0] INIT_A = 4'h0; + parameter [17:0] INIT_B = 18'h0; + parameter [3:0] SRVAL_A = 4'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [11:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [15:0] DOB; + output [1:0] DOPB; + input [9:0] ADDRB; + input [15:0] DIB; + input [1:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S4_S36 (...); + parameter [3:0] INIT_A = 4'h0; + parameter [35:0] INIT_B = 36'h0; + parameter [3:0] SRVAL_A = 4'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [3:0] DOA; + input [11:0] ADDRA; + input [3:0] DIA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [31:0] DOB; + output [3:0] DOPB; + input [8:0] ADDRB; + input [31:0] DIB; + input [3:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S9_S9 (...); + parameter [8:0] INIT_A = 9'h0; + parameter [8:0] INIT_B = 9'h0; + parameter [8:0] SRVAL_A = 9'h0; + parameter [8:0] SRVAL_B = 9'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DOA; + output [0:0] DOPA; + input [10:0] ADDRA; + input [7:0] DIA; + input [0:0] DIPA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [7:0] DOB; + output [0:0] DOPB; + input [10:0] ADDRB; + input [7:0] DIB; + input [0:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S9_S18 (...); + parameter [8:0] INIT_A = 9'h0; + parameter [17:0] INIT_B = 18'h0; + parameter [8:0] SRVAL_A = 9'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DOA; + output [0:0] DOPA; + input [10:0] ADDRA; + input [7:0] DIA; + input [0:0] DIPA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [15:0] DOB; + output [1:0] DOPB; + input [9:0] ADDRB; + input [15:0] DIB; + input [1:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S9_S36 (...); + parameter [8:0] INIT_A = 9'h0; + parameter [35:0] INIT_B = 36'h0; + parameter [8:0] SRVAL_A = 9'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [7:0] DOA; + output [0:0] DOPA; + input [10:0] ADDRA; + input [7:0] DIA; + input [0:0] DIPA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [31:0] DOB; + output [3:0] DOPB; + input [8:0] ADDRB; + input [31:0] DIB; + input [3:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S18_S18 (...); + parameter [17:0] INIT_A = 18'h0; + parameter [17:0] INIT_B = 18'h0; + parameter [17:0] SRVAL_A = 18'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [15:0] DOA; + output [1:0] DOPA; + input [9:0] ADDRA; + input [15:0] DIA; + input [1:0] DIPA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [15:0] DOB; + output [1:0] DOPB; + input [9:0] ADDRB; + input [15:0] DIB; + input [1:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S18_S36 (...); + parameter [17:0] INIT_A = 18'h0; + parameter [35:0] INIT_B = 36'h0; + parameter [17:0] SRVAL_A = 18'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [15:0] DOA; + output [1:0] DOPA; + input [9:0] ADDRA; + input [15:0] DIA; + input [1:0] DIPA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [31:0] DOB; + output [3:0] DOPB; + input [8:0] ADDRB; + input [31:0] DIB; + input [3:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16_S36_S36 (...); + parameter [35:0] INIT_A = 36'h0; + parameter [35:0] INIT_B = 36'h0; + parameter [35:0] SRVAL_A = 36'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + output [31:0] DOA; + output [3:0] DOPA; + input [8:0] ADDRA; + input [31:0] DIA; + input [3:0] DIPA; + input ENA; + (* clkbuf_sink *) + input CLKA; + input WEA; + input SSRA; + output [31:0] DOB; + output [3:0] DOPB; + input [8:0] ADDRB; + input [31:0] DIB; + input [3:0] DIPB; + input ENB; + (* clkbuf_sink *) + input CLKB; + input WEB; + input SSRB; +endmodule + +module RAMB16BWE_S18 (...); + parameter [17:0] INIT = 18'h0; + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [17:0] SRVAL = 18'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + output [15:0] DO; + output [1:0] DOP; + (* clkbuf_sink *) + input CLK; + input EN; + input SSR; + input [1:0] WE; + input [15:0] DI; + input [1:0] DIP; + input [9:0] ADDR; +endmodule + +module RAMB16BWE_S36 (...); + parameter [35:0] INIT = 36'h0; + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [35:0] SRVAL = 36'h0; + parameter WRITE_MODE = "WRITE_FIRST"; + output [31:0] DO; + output [3:0] DOP; + (* clkbuf_sink *) + input CLK; + input EN; + input SSR; + input [3:0] WE; + input [31:0] DI; + input [3:0] DIP; + input [8:0] ADDR; +endmodule + +module RAMB16BWE_S18_S9 (...); + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [17:0] INIT_A = 18'h0; + parameter [8:0] INIT_B = 9'h0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [17:0] SRVAL_A = 18'h0; + parameter [8:0] SRVAL_B = 9'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [15:0] DOA; + output [7:0] DOB; + output [1:0] DOPA; + output [0:0] DOPB; + (* clkbuf_sink *) + input CLKA; + (* clkbuf_sink *) + input CLKB; + input ENA; + input ENB; + input SSRA; + input SSRB; + input WEB; + input [1:0] WEA; + input [15:0] DIA; + input [7:0] DIB; + input [1:0] DIPA; + input [0:0] DIPB; + input [9:0] ADDRA; + input [10:0] ADDRB; +endmodule + +module RAMB16BWE_S18_S18 (...); + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [17:0] INIT_A = 18'h0; + parameter [17:0] INIT_B = 18'h0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [17:0] SRVAL_A = 18'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [15:0] DOA; + output [15:0] DOB; + output [1:0] DOPA; + output [1:0] DOPB; + (* clkbuf_sink *) + input CLKA; + (* clkbuf_sink *) + input CLKB; + input ENA; + input ENB; + input SSRA; + input SSRB; + input [1:0] WEB; + input [1:0] WEA; + input [15:0] DIA; + input [15:0] DIB; + input [1:0] DIPA; + input [1:0] DIPB; + input [9:0] ADDRA; + input [9:0] ADDRB; +endmodule + +module RAMB16BWE_S36_S9 (...); + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [35:0] INIT_A = 36'h0; + parameter [8:0] INIT_B = 9'h0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [35:0] SRVAL_A = 36'h0; + parameter [8:0] SRVAL_B = 9'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [31:0] DOA; + output [3:0] DOPA; + output [7:0] DOB; + output [0:0] DOPB; + (* clkbuf_sink *) + input CLKA; + (* clkbuf_sink *) + input CLKB; + input ENA; + input ENB; + input SSRA; + input SSRB; + input [3:0] WEA; + input WEB; + input [31:0] DIA; + input [3:0] DIPA; + input [7:0] DIB; + input [0:0] DIPB; + input [8:0] ADDRA; + input [10:0] ADDRB; +endmodule + +module RAMB16BWE_S36_S18 (...); + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [35:0] INIT_A = 36'h0; + parameter [17:0] INIT_B = 18'h0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [35:0] SRVAL_A = 36'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [31:0] DOA; + output [3:0] DOPA; + output [15:0] DOB; + output [1:0] DOPB; + (* clkbuf_sink *) + input CLKA; + (* clkbuf_sink *) + input CLKB; + input ENA; + input ENB; + input SSRA; + input SSRB; + input [3:0] WEA; + input [1:0] WEB; + input [31:0] DIA; + input [3:0] DIPA; + input [15:0] DIB; + input [1:0] DIPB; + input [8:0] ADDRA; + input [9:0] ADDRB; +endmodule + +module RAMB16BWE_S36_S36 (...); + parameter [255:0] INITP_00 = 256'h0; + parameter [255:0] INITP_01 = 256'h0; + parameter [255:0] INITP_02 = 256'h0; + parameter [255:0] INITP_03 = 256'h0; + parameter [255:0] INITP_04 = 256'h0; + parameter [255:0] INITP_05 = 256'h0; + parameter [255:0] INITP_06 = 256'h0; + parameter [255:0] INITP_07 = 256'h0; + parameter [255:0] INIT_00 = 256'h0; + parameter [255:0] INIT_01 = 256'h0; + parameter [255:0] INIT_02 = 256'h0; + parameter [255:0] INIT_03 = 256'h0; + parameter [255:0] INIT_04 = 256'h0; + parameter [255:0] INIT_05 = 256'h0; + parameter [255:0] INIT_06 = 256'h0; + parameter [255:0] INIT_07 = 256'h0; + parameter [255:0] INIT_08 = 256'h0; + parameter [255:0] INIT_09 = 256'h0; + parameter [255:0] INIT_0A = 256'h0; + parameter [255:0] INIT_0B = 256'h0; + parameter [255:0] INIT_0C = 256'h0; + parameter [255:0] INIT_0D = 256'h0; + parameter [255:0] INIT_0E = 256'h0; + parameter [255:0] INIT_0F = 256'h0; + parameter [255:0] INIT_10 = 256'h0; + parameter [255:0] INIT_11 = 256'h0; + parameter [255:0] INIT_12 = 256'h0; + parameter [255:0] INIT_13 = 256'h0; + parameter [255:0] INIT_14 = 256'h0; + parameter [255:0] INIT_15 = 256'h0; + parameter [255:0] INIT_16 = 256'h0; + parameter [255:0] INIT_17 = 256'h0; + parameter [255:0] INIT_18 = 256'h0; + parameter [255:0] INIT_19 = 256'h0; + parameter [255:0] INIT_1A = 256'h0; + parameter [255:0] INIT_1B = 256'h0; + parameter [255:0] INIT_1C = 256'h0; + parameter [255:0] INIT_1D = 256'h0; + parameter [255:0] INIT_1E = 256'h0; + parameter [255:0] INIT_1F = 256'h0; + parameter [255:0] INIT_20 = 256'h0; + parameter [255:0] INIT_21 = 256'h0; + parameter [255:0] INIT_22 = 256'h0; + parameter [255:0] INIT_23 = 256'h0; + parameter [255:0] INIT_24 = 256'h0; + parameter [255:0] INIT_25 = 256'h0; + parameter [255:0] INIT_26 = 256'h0; + parameter [255:0] INIT_27 = 256'h0; + parameter [255:0] INIT_28 = 256'h0; + parameter [255:0] INIT_29 = 256'h0; + parameter [255:0] INIT_2A = 256'h0; + parameter [255:0] INIT_2B = 256'h0; + parameter [255:0] INIT_2C = 256'h0; + parameter [255:0] INIT_2D = 256'h0; + parameter [255:0] INIT_2E = 256'h0; + parameter [255:0] INIT_2F = 256'h0; + parameter [255:0] INIT_30 = 256'h0; + parameter [255:0] INIT_31 = 256'h0; + parameter [255:0] INIT_32 = 256'h0; + parameter [255:0] INIT_33 = 256'h0; + parameter [255:0] INIT_34 = 256'h0; + parameter [255:0] INIT_35 = 256'h0; + parameter [255:0] INIT_36 = 256'h0; + parameter [255:0] INIT_37 = 256'h0; + parameter [255:0] INIT_38 = 256'h0; + parameter [255:0] INIT_39 = 256'h0; + parameter [255:0] INIT_3A = 256'h0; + parameter [255:0] INIT_3B = 256'h0; + parameter [255:0] INIT_3C = 256'h0; + parameter [255:0] INIT_3D = 256'h0; + parameter [255:0] INIT_3E = 256'h0; + parameter [255:0] INIT_3F = 256'h0; + parameter [35:0] INIT_A = 36'h0; + parameter [35:0] INIT_B = 36'h0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [35:0] SRVAL_A = 36'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [31:0] DOA; + output [3:0] DOPA; + output [31:0] DOB; + output [3:0] DOPB; + (* clkbuf_sink *) + input CLKA; + (* clkbuf_sink *) + input CLKB; + input ENA; + input ENB; + input SSRA; + input SSRB; + input [3:0] WEA; + input [3:0] WEB; + input [31:0] DIA; + input [3:0] DIPA; + input [31:0] DIB; + input [3:0] DIPB; + input [8:0] ADDRA; + input [8:0] ADDRB; +endmodule + +module RAMB16BWER (...); + parameter integer DATA_WIDTH_A = 0; + parameter integer DATA_WIDTH_B = 0; + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter EN_RSTRAM_A = "TRUE"; + parameter EN_RSTRAM_B = "TRUE"; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [35:0] INIT_A = 36'h0; + parameter [35:0] INIT_B = 36'h0; + parameter INIT_FILE = "NONE"; + parameter RSTTYPE = "SYNC"; + parameter RST_PRIORITY_A = "CE"; + parameter RST_PRIORITY_B = "CE"; + parameter SETUP_ALL = 1000; + parameter SETUP_READ_FIRST = 3000; + parameter SIM_DEVICE = "SPARTAN3ADSP"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [35:0] SRVAL_A = 36'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [31:0] DOA; + output [31:0] DOB; + output [3:0] DOPA; + output [3:0] DOPB; + input [13:0] ADDRA; + input [13:0] ADDRB; + (* clkbuf_sink *) + input CLKA; + (* clkbuf_sink *) + input CLKB; + input [31:0] DIA; + input [31:0] DIB; + input [3:0] DIPA; + input [3:0] DIPB; + input ENA; + input ENB; + input REGCEA; + input REGCEB; + input RSTA; + input RSTB; + input [3:0] WEA; + input [3:0] WEB; +endmodule + +module RAMB8BWER (...); + parameter integer DATA_WIDTH_A = 0; + parameter integer DATA_WIDTH_B = 0; + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter EN_RSTRAM_A = "TRUE"; + parameter EN_RSTRAM_B = "TRUE"; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [17:0] INIT_A = 18'h0; + parameter [17:0] INIT_B = 18'h0; + parameter INIT_FILE = "NONE"; + parameter RAM_MODE = "TDP"; + parameter RSTTYPE = "SYNC"; + parameter RST_PRIORITY_A = "CE"; + parameter RST_PRIORITY_B = "CE"; + parameter SETUP_ALL = 1000; + parameter SETUP_READ_FIRST = 3000; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [17:0] SRVAL_A = 18'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + output [15:0] DOADO; + output [15:0] DOBDO; + output [1:0] DOPADOP; + output [1:0] DOPBDOP; + input [12:0] ADDRAWRADDR; + input [12:0] ADDRBRDADDR; + (* clkbuf_sink *) + input CLKAWRCLK; + (* clkbuf_sink *) + input CLKBRDCLK; + input [15:0] DIADI; + input [15:0] DIBDI; + input [1:0] DIPADIP; + input [1:0] DIPBDIP; + input ENAWREN; + input ENBRDEN; + input REGCEA; + input REGCEBREGCE; + input RSTA; + input RSTBRST; + input [1:0] WEAWEL; + input [1:0] WEBWEU; +endmodule + +module FIFO16 (...); + parameter [11:0] ALMOST_FULL_OFFSET = 12'h080; + parameter [11:0] ALMOST_EMPTY_OFFSET = 12'h080; + parameter integer DATA_WIDTH = 36; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output [31:0] DO; + output [3:0] DOP; + output EMPTY; + output FULL; + output [11:0] RDCOUNT; + output RDERR; + output [11:0] WRCOUNT; + output WRERR; + input [31:0] DI; + input [3:0] DIP; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RST; + (* clkbuf_sink *) + input WRCLK; + input WREN; +endmodule + +module RAMB16 (...); + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [35:0] INIT_A = 36'h0; + parameter [35:0] INIT_B = 36'h0; + parameter INIT_FILE = "NONE"; + parameter INVERT_CLK_DOA_REG = "FALSE"; + parameter INVERT_CLK_DOB_REG = "FALSE"; + parameter RAM_EXTENSION_A = "NONE"; + parameter RAM_EXTENSION_B = "NONE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter [35:0] SRVAL_A = 36'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + output CASCADEOUTA; + output CASCADEOUTB; + output [31:0] DOA; + output [31:0] DOB; + output [3:0] DOPA; + output [3:0] DOPB; + input ENA; + (* clkbuf_sink *) + input CLKA; + input SSRA; + input CASCADEINA; + input REGCEA; + input ENB; + (* clkbuf_sink *) + input CLKB; + input SSRB; + input CASCADEINB; + input REGCEB; + input [14:0] ADDRA; + input [14:0] ADDRB; + input [31:0] DIA; + input [31:0] DIB; + input [3:0] DIPA; + input [3:0] DIPB; + input [3:0] WEA; + input [3:0] WEB; +endmodule + +module RAMB32_S64_ECC (...); + parameter DO_REG = 0; + parameter SIM_COLLISION_CHECK = "ALL"; + output [1:0] STATUS; + output [63:0] DO; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input SSR; + (* clkbuf_sink *) + input WRCLK; + input WREN; + input [63:0] DI; + input [8:0] RDADDR; + input [8:0] WRADDR; +endmodule + +module FIFO18 (...); + parameter [11:0] ALMOST_EMPTY_OFFSET = 12'h080; + parameter [11:0] ALMOST_FULL_OFFSET = 12'h080; + parameter integer DATA_WIDTH = 4; + parameter integer DO_REG = 1; + parameter EN_SYN = "FALSE"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter SIM_MODE = "SAFE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output [15:0] DO; + output [1:0] DOP; + output EMPTY; + output FULL; + output [11:0] RDCOUNT; + output RDERR; + output [11:0] WRCOUNT; + output WRERR; + input [15:0] DI; + input [1:0] DIP; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RST; + (* clkbuf_sink *) + input WRCLK; + input WREN; +endmodule + +module FIFO18_36 (...); + parameter [8:0] ALMOST_EMPTY_OFFSET = 9'h080; + parameter [8:0] ALMOST_FULL_OFFSET = 9'h080; + parameter integer DO_REG = 1; + parameter EN_SYN = "FALSE"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter SIM_MODE = "SAFE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output [31:0] DO; + output [3:0] DOP; + output EMPTY; + output FULL; + output [8:0] RDCOUNT; + output RDERR; + output [8:0] WRCOUNT; + output WRERR; + input [31:0] DI; + input [3:0] DIP; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RST; + (* clkbuf_sink *) + input WRCLK; + input WREN; +endmodule + +module FIFO36 (...); + parameter [12:0] ALMOST_EMPTY_OFFSET = 13'h080; + parameter [12:0] ALMOST_FULL_OFFSET = 13'h080; + parameter integer DATA_WIDTH = 4; + parameter integer DO_REG = 1; + parameter EN_SYN = "FALSE"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter SIM_MODE = "SAFE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output [31:0] DO; + output [3:0] DOP; + output EMPTY; + output FULL; + output [12:0] RDCOUNT; + output RDERR; + output [12:0] WRCOUNT; + output WRERR; + input [31:0] DI; + input [3:0] DIP; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RST; + (* clkbuf_sink *) + input WRCLK; + input WREN; +endmodule + +module FIFO36_72 (...); + parameter [8:0] ALMOST_EMPTY_OFFSET = 9'h080; + parameter [8:0] ALMOST_FULL_OFFSET = 9'h080; + parameter integer DO_REG = 1; + parameter EN_ECC_WRITE = "FALSE"; + parameter EN_ECC_READ = "FALSE"; + parameter EN_SYN = "FALSE"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter SIM_MODE = "SAFE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output DBITERR; + output [63:0] DO; + output [7:0] DOP; + output [7:0] ECCPARITY; + output EMPTY; + output FULL; + output [8:0] RDCOUNT; + output RDERR; + output SBITERR; + output [8:0] WRCOUNT; + output WRERR; + input [63:0] DI; + input [7:0] DIP; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RST; + (* clkbuf_sink *) + input WRCLK; + input WREN; +endmodule + +module RAMB18 (...); + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [17:0] INIT_A = 18'h0; + parameter [17:0] INIT_B = 18'h0; + parameter INIT_FILE = "NONE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SIM_MODE = "SAFE"; + parameter [17:0] SRVAL_A = 18'h0; + parameter [17:0] SRVAL_B = 18'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + output [15:0] DOA; + output [15:0] DOB; + output [1:0] DOPA; + output [1:0] DOPB; + input ENA; + (* clkbuf_sink *) + input CLKA; + input SSRA; + input REGCEA; + input ENB; + (* clkbuf_sink *) + input CLKB; + input SSRB; + input REGCEB; + input [13:0] ADDRA; + input [13:0] ADDRB; + input [15:0] DIA; + input [15:0] DIB; + input [1:0] DIPA; + input [1:0] DIPB; + input [1:0] WEA; + input [1:0] WEB; +endmodule + +module RAMB36 (...); + parameter integer DOA_REG = 0; + parameter integer DOB_REG = 0; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [35:0] INIT_A = 36'h0; + parameter [35:0] INIT_B = 36'h0; + parameter INIT_FILE = "NONE"; + parameter RAM_EXTENSION_A = "NONE"; + parameter RAM_EXTENSION_B = "NONE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SIM_MODE = "SAFE"; + parameter [35:0] SRVAL_A = 36'h0; + parameter [35:0] SRVAL_B = 36'h0; + parameter WRITE_MODE_A = "WRITE_FIRST"; + parameter WRITE_MODE_B = "WRITE_FIRST"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + output CASCADEOUTLATA; + output CASCADEOUTREGA; + output CASCADEOUTLATB; + output CASCADEOUTREGB; + output [31:0] DOA; + output [31:0] DOB; + output [3:0] DOPA; + output [3:0] DOPB; + input ENA; + (* clkbuf_sink *) + input CLKA; + input SSRA; + input CASCADEINLATA; + input CASCADEINREGA; + input REGCEA; + input ENB; + (* clkbuf_sink *) + input CLKB; + input SSRB; + input CASCADEINLATB; + input CASCADEINREGB; + input REGCEB; + input [15:0] ADDRA; + input [15:0] ADDRB; + input [31:0] DIA; + input [31:0] DIB; + input [3:0] DIPA; + input [3:0] DIPB; + input [3:0] WEA; + input [3:0] WEB; +endmodule + +module RAMB18SDP (...); + parameter integer DO_REG = 0; + parameter [35:0] INIT = 36'h0; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_FILE = "NONE"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SIM_MODE = "SAFE"; + parameter [35:0] SRVAL = 36'h0; + output [31:0] DO; + output [3:0] DOP; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input REGCE; + input SSR; + (* clkbuf_sink *) + input WRCLK; + input WREN; + input [8:0] WRADDR; + input [8:0] RDADDR; + input [31:0] DI; + input [3:0] DIP; + input [3:0] WE; +endmodule + +module RAMB36SDP (...); + parameter integer DO_REG = 0; + parameter EN_ECC_READ = "FALSE"; + parameter EN_ECC_SCRUB = "FALSE"; + parameter EN_ECC_WRITE = "FALSE"; + parameter [71:0] INIT = 72'h0; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter INIT_FILE = "NONE"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SIM_MODE = "SAFE"; + parameter [71:0] SRVAL = 72'h0; + output DBITERR; + output SBITERR; + output [63:0] DO; + output [7:0] DOP; + output [7:0] ECCPARITY; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input REGCE; + input SSR; + (* clkbuf_sink *) + input WRCLK; + input WREN; + input [8:0] WRADDR; + input [8:0] RDADDR; + input [63:0] DI; + input [7:0] DIP; + input [7:0] WE; +endmodule + +module FIFO18E1 (...); + parameter ALMOST_EMPTY_OFFSET = 13'h0080; + parameter ALMOST_FULL_OFFSET = 13'h0080; + parameter integer DATA_WIDTH = 4; + parameter integer DO_REG = 1; + parameter EN_SYN = "FALSE"; + parameter FIFO_MODE = "FIFO18"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter INIT = 36'h0; + parameter SIM_DEVICE = "VIRTEX6"; + parameter SRVAL = 36'h0; + parameter IS_RDCLK_INVERTED = 1'b0; + parameter IS_RDEN_INVERTED = 1'b0; + parameter IS_RSTREG_INVERTED = 1'b0; + parameter IS_RST_INVERTED = 1'b0; + parameter IS_WRCLK_INVERTED = 1'b0; + parameter IS_WREN_INVERTED = 1'b0; + output ALMOSTEMPTY; + output ALMOSTFULL; + output [31:0] DO; + output [3:0] DOP; + output EMPTY; + output FULL; + output [11:0] RDCOUNT; + output RDERR; + output [11:0] WRCOUNT; + output WRERR; + input [31:0] DI; + input [3:0] DIP; + (* clkbuf_sink *) + (* invertible_pin = "IS_RDCLK_INVERTED" *) + input RDCLK; + (* invertible_pin = "IS_RDEN_INVERTED" *) + input RDEN; + input REGCE; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RSTREG_INVERTED" *) + input RSTREG; + (* clkbuf_sink *) + (* invertible_pin = "IS_WRCLK_INVERTED" *) + input WRCLK; + (* invertible_pin = "IS_WREN_INVERTED" *) + input WREN; +endmodule + +module FIFO36E1 (...); + parameter ALMOST_EMPTY_OFFSET = 13'h0080; + parameter ALMOST_FULL_OFFSET = 13'h0080; + parameter integer DATA_WIDTH = 4; + parameter integer DO_REG = 1; + parameter EN_ECC_READ = "FALSE"; + parameter EN_ECC_WRITE = "FALSE"; + parameter EN_SYN = "FALSE"; + parameter FIFO_MODE = "FIFO36"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter INIT = 72'h0; + parameter SIM_DEVICE = "VIRTEX6"; + parameter SRVAL = 72'h0; + parameter IS_RDCLK_INVERTED = 1'b0; + parameter IS_RDEN_INVERTED = 1'b0; + parameter IS_RSTREG_INVERTED = 1'b0; + parameter IS_RST_INVERTED = 1'b0; + parameter IS_WRCLK_INVERTED = 1'b0; + parameter IS_WREN_INVERTED = 1'b0; + output ALMOSTEMPTY; + output ALMOSTFULL; + output DBITERR; + output [63:0] DO; + output [7:0] DOP; + output [7:0] ECCPARITY; + output EMPTY; + output FULL; + output [12:0] RDCOUNT; + output RDERR; + output SBITERR; + output [12:0] WRCOUNT; + output WRERR; + input [63:0] DI; + input [7:0] DIP; + input INJECTDBITERR; + input INJECTSBITERR; + (* clkbuf_sink *) + (* invertible_pin = "IS_RDCLK_INVERTED" *) + input RDCLK; + (* invertible_pin = "IS_RDEN_INVERTED" *) + input RDEN; + input REGCE; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RSTREG_INVERTED" *) + input RSTREG; + (* clkbuf_sink *) + (* invertible_pin = "IS_WRCLK_INVERTED" *) + input WRCLK; + (* invertible_pin = "IS_WREN_INVERTED" *) + input WREN; +endmodule + +module FIFO18E2 (...); + parameter CASCADE_ORDER = "NONE"; + parameter CLOCK_DOMAINS = "INDEPENDENT"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter [35:0] INIT = 36'h000000000; + parameter [0:0] IS_RDCLK_INVERTED = 1'b0; + parameter [0:0] IS_RDEN_INVERTED = 1'b0; + parameter [0:0] IS_RSTREG_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter [0:0] IS_WRCLK_INVERTED = 1'b0; + parameter [0:0] IS_WREN_INVERTED = 1'b0; + parameter integer PROG_EMPTY_THRESH = 256; + parameter integer PROG_FULL_THRESH = 256; + parameter RDCOUNT_TYPE = "RAW_PNTR"; + parameter integer READ_WIDTH = 4; + parameter REGISTER_MODE = "UNREGISTERED"; + parameter RSTREG_PRIORITY = "RSTREG"; + parameter SLEEP_ASYNC = "FALSE"; + parameter [35:0] SRVAL = 36'h000000000; + parameter WRCOUNT_TYPE = "RAW_PNTR"; + parameter integer WRITE_WIDTH = 4; + output [31:0] CASDOUT; + output [3:0] CASDOUTP; + output CASNXTEMPTY; + output CASPRVRDEN; + output [31:0] DOUT; + output [3:0] DOUTP; + output EMPTY; + output FULL; + output PROGEMPTY; + output PROGFULL; + output [12:0] RDCOUNT; + output RDERR; + output RDRSTBUSY; + output [12:0] WRCOUNT; + output WRERR; + output WRRSTBUSY; + input [31:0] CASDIN; + input [3:0] CASDINP; + input CASDOMUX; + input CASDOMUXEN; + input CASNXTRDEN; + input CASOREGIMUX; + input CASOREGIMUXEN; + input CASPRVEMPTY; + input [31:0] DIN; + input [3:0] DINP; + (* clkbuf_sink *) + (* invertible_pin = "IS_RDCLK_INVERTED" *) + input RDCLK; + (* invertible_pin = "IS_RDEN_INVERTED" *) + input RDEN; + input REGCE; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RSTREG_INVERTED" *) + input RSTREG; + input SLEEP; + (* clkbuf_sink *) + (* invertible_pin = "IS_WRCLK_INVERTED" *) + input WRCLK; + (* invertible_pin = "IS_WREN_INVERTED" *) + input WREN; +endmodule + +module FIFO36E2 (...); + parameter CASCADE_ORDER = "NONE"; + parameter CLOCK_DOMAINS = "INDEPENDENT"; + parameter EN_ECC_PIPE = "FALSE"; + parameter EN_ECC_READ = "FALSE"; + parameter EN_ECC_WRITE = "FALSE"; + parameter FIRST_WORD_FALL_THROUGH = "FALSE"; + parameter [71:0] INIT = 72'h000000000000000000; + parameter [0:0] IS_RDCLK_INVERTED = 1'b0; + parameter [0:0] IS_RDEN_INVERTED = 1'b0; + parameter [0:0] IS_RSTREG_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter [0:0] IS_WRCLK_INVERTED = 1'b0; + parameter [0:0] IS_WREN_INVERTED = 1'b0; + parameter integer PROG_EMPTY_THRESH = 256; + parameter integer PROG_FULL_THRESH = 256; + parameter RDCOUNT_TYPE = "RAW_PNTR"; + parameter integer READ_WIDTH = 4; + parameter REGISTER_MODE = "UNREGISTERED"; + parameter RSTREG_PRIORITY = "RSTREG"; + parameter SLEEP_ASYNC = "FALSE"; + parameter [71:0] SRVAL = 72'h000000000000000000; + parameter WRCOUNT_TYPE = "RAW_PNTR"; + parameter integer WRITE_WIDTH = 4; + output [63:0] CASDOUT; + output [7:0] CASDOUTP; + output CASNXTEMPTY; + output CASPRVRDEN; + output DBITERR; + output [63:0] DOUT; + output [7:0] DOUTP; + output [7:0] ECCPARITY; + output EMPTY; + output FULL; + output PROGEMPTY; + output PROGFULL; + output [13:0] RDCOUNT; + output RDERR; + output RDRSTBUSY; + output SBITERR; + output [13:0] WRCOUNT; + output WRERR; + output WRRSTBUSY; + input [63:0] CASDIN; + input [7:0] CASDINP; + input CASDOMUX; + input CASDOMUXEN; + input CASNXTRDEN; + input CASOREGIMUX; + input CASOREGIMUXEN; + input CASPRVEMPTY; + input [63:0] DIN; + input [7:0] DINP; + input INJECTDBITERR; + input INJECTSBITERR; + (* clkbuf_sink *) + (* invertible_pin = "IS_RDCLK_INVERTED" *) + input RDCLK; + (* invertible_pin = "IS_RDEN_INVERTED" *) + input RDEN; + input REGCE; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RSTREG_INVERTED" *) + input RSTREG; + input SLEEP; + (* clkbuf_sink *) + (* invertible_pin = "IS_WRCLK_INVERTED" *) + input WRCLK; + (* invertible_pin = "IS_WREN_INVERTED" *) + input WREN; +endmodule + +module RAMB18E2 (...); + parameter CASCADE_ORDER_A = "NONE"; + parameter CASCADE_ORDER_B = "NONE"; + parameter CLOCK_DOMAINS = "INDEPENDENT"; + parameter integer DOA_REG = 1; + parameter integer DOB_REG = 1; + parameter ENADDRENA = "FALSE"; + parameter ENADDRENB = "FALSE"; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [17:0] INIT_A = 18'h00000; + parameter [17:0] INIT_B = 18'h00000; + parameter INIT_FILE = "NONE"; + parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0; + parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0; + parameter [0:0] IS_ENARDEN_INVERTED = 1'b0; + parameter [0:0] IS_ENBWREN_INVERTED = 1'b0; + parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0; + parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0; + parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0; + parameter [0:0] IS_RSTREGB_INVERTED = 1'b0; + parameter RDADDRCHANGEA = "FALSE"; + parameter RDADDRCHANGEB = "FALSE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter RSTREG_PRIORITY_A = "RSTREG"; + parameter RSTREG_PRIORITY_B = "RSTREG"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SLEEP_ASYNC = "FALSE"; + parameter [17:0] SRVAL_A = 18'h00000; + parameter [17:0] SRVAL_B = 18'h00000; + parameter WRITE_MODE_A = "NO_CHANGE"; + parameter WRITE_MODE_B = "NO_CHANGE"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + output [15:0] CASDOUTA; + output [15:0] CASDOUTB; + output [1:0] CASDOUTPA; + output [1:0] CASDOUTPB; + output [15:0] DOUTADOUT; + output [15:0] DOUTBDOUT; + output [1:0] DOUTPADOUTP; + output [1:0] DOUTPBDOUTP; + input [13:0] ADDRARDADDR; + input [13:0] ADDRBWRADDR; + input ADDRENA; + input ADDRENB; + input CASDIMUXA; + input CASDIMUXB; + input [15:0] CASDINA; + input [15:0] CASDINB; + input [1:0] CASDINPA; + input [1:0] CASDINPB; + input CASDOMUXA; + input CASDOMUXB; + input CASDOMUXEN_A; + input CASDOMUXEN_B; + input CASOREGIMUXA; + input CASOREGIMUXB; + input CASOREGIMUXEN_A; + input CASOREGIMUXEN_B; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKARDCLK_INVERTED" *) + input CLKARDCLK; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *) + input CLKBWRCLK; + input [15:0] DINADIN; + input [15:0] DINBDIN; + input [1:0] DINPADINP; + input [1:0] DINPBDINP; + (* invertible_pin = "IS_ENARDEN_INVERTED" *) + input ENARDEN; + (* invertible_pin = "IS_ENBWREN_INVERTED" *) + input ENBWREN; + input REGCEAREGCE; + input REGCEB; + (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *) + input RSTRAMARSTRAM; + (* invertible_pin = "IS_RSTRAMB_INVERTED" *) + input RSTRAMB; + (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *) + input RSTREGARSTREG; + (* invertible_pin = "IS_RSTREGB_INVERTED" *) + input RSTREGB; + input SLEEP; + input [1:0] WEA; + input [3:0] WEBWE; +endmodule + +module RAMB36E2 (...); + parameter CASCADE_ORDER_A = "NONE"; + parameter CASCADE_ORDER_B = "NONE"; + parameter CLOCK_DOMAINS = "INDEPENDENT"; + parameter integer DOA_REG = 1; + parameter integer DOB_REG = 1; + parameter ENADDRENA = "FALSE"; + parameter ENADDRENB = "FALSE"; + parameter EN_ECC_PIPE = "FALSE"; + parameter EN_ECC_READ = "FALSE"; + parameter EN_ECC_WRITE = "FALSE"; + parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [255:0] INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000; + parameter [35:0] INIT_A = 36'h000000000; + parameter [35:0] INIT_B = 36'h000000000; + parameter INIT_FILE = "NONE"; + parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0; + parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0; + parameter [0:0] IS_ENARDEN_INVERTED = 1'b0; + parameter [0:0] IS_ENBWREN_INVERTED = 1'b0; + parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0; + parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0; + parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0; + parameter [0:0] IS_RSTREGB_INVERTED = 1'b0; + parameter RDADDRCHANGEA = "FALSE"; + parameter RDADDRCHANGEB = "FALSE"; + parameter integer READ_WIDTH_A = 0; + parameter integer READ_WIDTH_B = 0; + parameter RSTREG_PRIORITY_A = "RSTREG"; + parameter RSTREG_PRIORITY_B = "RSTREG"; + parameter SIM_COLLISION_CHECK = "ALL"; + parameter SLEEP_ASYNC = "FALSE"; + parameter [35:0] SRVAL_A = 36'h000000000; + parameter [35:0] SRVAL_B = 36'h000000000; + parameter WRITE_MODE_A = "NO_CHANGE"; + parameter WRITE_MODE_B = "NO_CHANGE"; + parameter integer WRITE_WIDTH_A = 0; + parameter integer WRITE_WIDTH_B = 0; + output [31:0] CASDOUTA; + output [31:0] CASDOUTB; + output [3:0] CASDOUTPA; + output [3:0] CASDOUTPB; + output CASOUTDBITERR; + output CASOUTSBITERR; + output DBITERR; + output [31:0] DOUTADOUT; + output [31:0] DOUTBDOUT; + output [3:0] DOUTPADOUTP; + output [3:0] DOUTPBDOUTP; + output [7:0] ECCPARITY; + output [8:0] RDADDRECC; + output SBITERR; + input [14:0] ADDRARDADDR; + input [14:0] ADDRBWRADDR; + input ADDRENA; + input ADDRENB; + input CASDIMUXA; + input CASDIMUXB; + input [31:0] CASDINA; + input [31:0] CASDINB; + input [3:0] CASDINPA; + input [3:0] CASDINPB; + input CASDOMUXA; + input CASDOMUXB; + input CASDOMUXEN_A; + input CASDOMUXEN_B; + input CASINDBITERR; + input CASINSBITERR; + input CASOREGIMUXA; + input CASOREGIMUXB; + input CASOREGIMUXEN_A; + input CASOREGIMUXEN_B; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKARDCLK_INVERTED" *) + input CLKARDCLK; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *) + input CLKBWRCLK; + input [31:0] DINADIN; + input [31:0] DINBDIN; + input [3:0] DINPADINP; + input [3:0] DINPBDINP; + input ECCPIPECE; + (* invertible_pin = "IS_ENARDEN_INVERTED" *) + input ENARDEN; + (* invertible_pin = "IS_ENBWREN_INVERTED" *) + input ENBWREN; + input INJECTDBITERR; + input INJECTSBITERR; + input REGCEAREGCE; + input REGCEB; + (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *) + input RSTRAMARSTRAM; + (* invertible_pin = "IS_RSTRAMB_INVERTED" *) + input RSTRAMB; + (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *) + input RSTREGARSTREG; + (* invertible_pin = "IS_RSTREGB_INVERTED" *) + input RSTREGB; + input SLEEP; + input [3:0] WEA; + input [7:0] WEBWE; +endmodule + +module URAM288 (...); + parameter integer AUTO_SLEEP_LATENCY = 8; + parameter integer AVG_CONS_INACTIVE_CYCLES = 10; + parameter BWE_MODE_A = "PARITY_INTERLEAVED"; + parameter BWE_MODE_B = "PARITY_INTERLEAVED"; + parameter CASCADE_ORDER_A = "NONE"; + parameter CASCADE_ORDER_B = "NONE"; + parameter EN_AUTO_SLEEP_MODE = "FALSE"; + parameter EN_ECC_RD_A = "FALSE"; + parameter EN_ECC_RD_B = "FALSE"; + parameter EN_ECC_WR_A = "FALSE"; + parameter EN_ECC_WR_B = "FALSE"; + parameter IREG_PRE_A = "FALSE"; + parameter IREG_PRE_B = "FALSE"; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_EN_A_INVERTED = 1'b0; + parameter [0:0] IS_EN_B_INVERTED = 1'b0; + parameter [0:0] IS_RDB_WR_A_INVERTED = 1'b0; + parameter [0:0] IS_RDB_WR_B_INVERTED = 1'b0; + parameter [0:0] IS_RST_A_INVERTED = 1'b0; + parameter [0:0] IS_RST_B_INVERTED = 1'b0; + parameter MATRIX_ID = "NONE"; + parameter integer NUM_UNIQUE_SELF_ADDR_A = 1; + parameter integer NUM_UNIQUE_SELF_ADDR_B = 1; + parameter integer NUM_URAM_IN_MATRIX = 1; + parameter OREG_A = "FALSE"; + parameter OREG_B = "FALSE"; + parameter OREG_ECC_A = "FALSE"; + parameter OREG_ECC_B = "FALSE"; + parameter REG_CAS_A = "FALSE"; + parameter REG_CAS_B = "FALSE"; + parameter RST_MODE_A = "SYNC"; + parameter RST_MODE_B = "SYNC"; + parameter [10:0] SELF_ADDR_A = 11'h000; + parameter [10:0] SELF_ADDR_B = 11'h000; + parameter [10:0] SELF_MASK_A = 11'h7FF; + parameter [10:0] SELF_MASK_B = 11'h7FF; + parameter USE_EXT_CE_A = "FALSE"; + parameter USE_EXT_CE_B = "FALSE"; + output [22:0] CAS_OUT_ADDR_A; + output [22:0] CAS_OUT_ADDR_B; + output [8:0] CAS_OUT_BWE_A; + output [8:0] CAS_OUT_BWE_B; + output CAS_OUT_DBITERR_A; + output CAS_OUT_DBITERR_B; + output [71:0] CAS_OUT_DIN_A; + output [71:0] CAS_OUT_DIN_B; + output [71:0] CAS_OUT_DOUT_A; + output [71:0] CAS_OUT_DOUT_B; + output CAS_OUT_EN_A; + output CAS_OUT_EN_B; + output CAS_OUT_RDACCESS_A; + output CAS_OUT_RDACCESS_B; + output CAS_OUT_RDB_WR_A; + output CAS_OUT_RDB_WR_B; + output CAS_OUT_SBITERR_A; + output CAS_OUT_SBITERR_B; + output DBITERR_A; + output DBITERR_B; + output [71:0] DOUT_A; + output [71:0] DOUT_B; + output RDACCESS_A; + output RDACCESS_B; + output SBITERR_A; + output SBITERR_B; + input [22:0] ADDR_A; + input [22:0] ADDR_B; + input [8:0] BWE_A; + input [8:0] BWE_B; + input [22:0] CAS_IN_ADDR_A; + input [22:0] CAS_IN_ADDR_B; + input [8:0] CAS_IN_BWE_A; + input [8:0] CAS_IN_BWE_B; + input CAS_IN_DBITERR_A; + input CAS_IN_DBITERR_B; + input [71:0] CAS_IN_DIN_A; + input [71:0] CAS_IN_DIN_B; + input [71:0] CAS_IN_DOUT_A; + input [71:0] CAS_IN_DOUT_B; + input CAS_IN_EN_A; + input CAS_IN_EN_B; + input CAS_IN_RDACCESS_A; + input CAS_IN_RDACCESS_B; + input CAS_IN_RDB_WR_A; + input CAS_IN_RDB_WR_B; + input CAS_IN_SBITERR_A; + input CAS_IN_SBITERR_B; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [71:0] DIN_A; + input [71:0] DIN_B; + (* invertible_pin = "IS_EN_A_INVERTED" *) + input EN_A; + (* invertible_pin = "IS_EN_B_INVERTED" *) + input EN_B; + input INJECT_DBITERR_A; + input INJECT_DBITERR_B; + input INJECT_SBITERR_A; + input INJECT_SBITERR_B; + input OREG_CE_A; + input OREG_CE_B; + input OREG_ECC_CE_A; + input OREG_ECC_CE_B; + (* invertible_pin = "IS_RDB_WR_A_INVERTED" *) + input RDB_WR_A; + (* invertible_pin = "IS_RDB_WR_B_INVERTED" *) + input RDB_WR_B; + (* invertible_pin = "IS_RST_A_INVERTED" *) + input RST_A; + (* invertible_pin = "IS_RST_B_INVERTED" *) + input RST_B; + input SLEEP; +endmodule + +module URAM288_BASE (...); + parameter integer AUTO_SLEEP_LATENCY = 8; + parameter integer AVG_CONS_INACTIVE_CYCLES = 10; + parameter BWE_MODE_A = "PARITY_INTERLEAVED"; + parameter BWE_MODE_B = "PARITY_INTERLEAVED"; + parameter EN_AUTO_SLEEP_MODE = "FALSE"; + parameter EN_ECC_RD_A = "FALSE"; + parameter EN_ECC_RD_B = "FALSE"; + parameter EN_ECC_WR_A = "FALSE"; + parameter EN_ECC_WR_B = "FALSE"; + parameter IREG_PRE_A = "FALSE"; + parameter IREG_PRE_B = "FALSE"; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_EN_A_INVERTED = 1'b0; + parameter [0:0] IS_EN_B_INVERTED = 1'b0; + parameter [0:0] IS_RDB_WR_A_INVERTED = 1'b0; + parameter [0:0] IS_RDB_WR_B_INVERTED = 1'b0; + parameter [0:0] IS_RST_A_INVERTED = 1'b0; + parameter [0:0] IS_RST_B_INVERTED = 1'b0; + parameter OREG_A = "FALSE"; + parameter OREG_B = "FALSE"; + parameter OREG_ECC_A = "FALSE"; + parameter OREG_ECC_B = "FALSE"; + parameter RST_MODE_A = "SYNC"; + parameter RST_MODE_B = "SYNC"; + parameter USE_EXT_CE_A = "FALSE"; + parameter USE_EXT_CE_B = "FALSE"; + output DBITERR_A; + output DBITERR_B; + output [71:0] DOUT_A; + output [71:0] DOUT_B; + output SBITERR_A; + output SBITERR_B; + input [22:0] ADDR_A; + input [22:0] ADDR_B; + input [8:0] BWE_A; + input [8:0] BWE_B; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [71:0] DIN_A; + input [71:0] DIN_B; + (* invertible_pin = "IS_EN_A_INVERTED" *) + input EN_A; + (* invertible_pin = "IS_EN_B_INVERTED" *) + input EN_B; + input INJECT_DBITERR_A; + input INJECT_DBITERR_B; + input INJECT_SBITERR_A; + input INJECT_SBITERR_B; + input OREG_CE_A; + input OREG_CE_B; + input OREG_ECC_CE_A; + input OREG_ECC_CE_B; + (* invertible_pin = "IS_RDB_WR_A_INVERTED" *) + input RDB_WR_A; + (* invertible_pin = "IS_RDB_WR_B_INVERTED" *) + input RDB_WR_B; + (* invertible_pin = "IS_RST_A_INVERTED" *) + input RST_A; + (* invertible_pin = "IS_RST_B_INVERTED" *) + input RST_B; + input SLEEP; +endmodule + +module DSP48E (...); + parameter SIM_MODE = "SAFE"; + parameter integer ACASCREG = 1; + parameter integer ALUMODEREG = 1; + parameter integer AREG = 1; + parameter AUTORESET_PATTERN_DETECT = "FALSE"; + parameter AUTORESET_PATTERN_DETECT_OPTINV = "MATCH"; + parameter A_INPUT = "DIRECT"; + parameter integer BCASCREG = 1; + parameter integer BREG = 1; + parameter B_INPUT = "DIRECT"; + parameter integer CARRYINREG = 1; + parameter integer CARRYINSELREG = 1; + parameter integer CREG = 1; + parameter [47:0] MASK = 48'h3FFFFFFFFFFF; + parameter integer MREG = 1; + parameter integer MULTCARRYINREG = 1; + parameter integer OPMODEREG = 1; + parameter [47:0] PATTERN = 48'h000000000000; + parameter integer PREG = 1; + parameter SEL_MASK = "MASK"; + parameter SEL_PATTERN = "PATTERN"; + parameter SEL_ROUNDING_MASK = "SEL_MASK"; + parameter USE_MULT = "MULT_S"; + parameter USE_PATTERN_DETECT = "NO_PATDET"; + parameter USE_SIMD = "ONE48"; + output [29:0] ACOUT; + output [17:0] BCOUT; + output CARRYCASCOUT; + output [3:0] CARRYOUT; + output MULTSIGNOUT; + output OVERFLOW; + output [47:0] P; + output PATTERNBDETECT; + output PATTERNDETECT; + output [47:0] PCOUT; + output UNDERFLOW; + input [29:0] A; + input [29:0] ACIN; + input [3:0] ALUMODE; + input [17:0] B; + input [17:0] BCIN; + input [47:0] C; + input CARRYCASCIN; + input CARRYIN; + input [2:0] CARRYINSEL; + input CEA1; + input CEA2; + input CEALUMODE; + input CEB1; + input CEB2; + input CEC; + input CECARRYIN; + input CECTRL; + input CEM; + input CEMULTCARRYIN; + input CEP; + (* clkbuf_sink *) + input CLK; + input MULTSIGNIN; + input [6:0] OPMODE; + input [47:0] PCIN; + input RSTA; + input RSTALLCARRYIN; + input RSTALUMODE; + input RSTB; + input RSTC; + input RSTCTRL; + input RSTM; + input RSTP; +endmodule + +module DSP48E2 (...); + parameter integer ACASCREG = 1; + parameter integer ADREG = 1; + parameter integer ALUMODEREG = 1; + parameter AMULTSEL = "A"; + parameter integer AREG = 1; + parameter AUTORESET_PATDET = "NO_RESET"; + parameter AUTORESET_PRIORITY = "RESET"; + parameter A_INPUT = "DIRECT"; + parameter integer BCASCREG = 1; + parameter BMULTSEL = "B"; + parameter integer BREG = 1; + parameter B_INPUT = "DIRECT"; + parameter integer CARRYINREG = 1; + parameter integer CARRYINSELREG = 1; + parameter integer CREG = 1; + parameter integer DREG = 1; + parameter integer INMODEREG = 1; + parameter [3:0] IS_ALUMODE_INVERTED = 4'b0000; + parameter [0:0] IS_CARRYIN_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [4:0] IS_INMODE_INVERTED = 5'b00000; + parameter [8:0] IS_OPMODE_INVERTED = 9'b000000000; + parameter [0:0] IS_RSTALLCARRYIN_INVERTED = 1'b0; + parameter [0:0] IS_RSTALUMODE_INVERTED = 1'b0; + parameter [0:0] IS_RSTA_INVERTED = 1'b0; + parameter [0:0] IS_RSTB_INVERTED = 1'b0; + parameter [0:0] IS_RSTCTRL_INVERTED = 1'b0; + parameter [0:0] IS_RSTC_INVERTED = 1'b0; + parameter [0:0] IS_RSTD_INVERTED = 1'b0; + parameter [0:0] IS_RSTINMODE_INVERTED = 1'b0; + parameter [0:0] IS_RSTM_INVERTED = 1'b0; + parameter [0:0] IS_RSTP_INVERTED = 1'b0; + parameter [47:0] MASK = 48'h3FFFFFFFFFFF; + parameter integer MREG = 1; + parameter integer OPMODEREG = 1; + parameter [47:0] PATTERN = 48'h000000000000; + parameter PREADDINSEL = "A"; + parameter integer PREG = 1; + parameter [47:0] RND = 48'h000000000000; + parameter SEL_MASK = "MASK"; + parameter SEL_PATTERN = "PATTERN"; + parameter USE_MULT = "MULTIPLY"; + parameter USE_PATTERN_DETECT = "NO_PATDET"; + parameter USE_SIMD = "ONE48"; + parameter USE_WIDEXOR = "FALSE"; + parameter XORSIMD = "XOR24_48_96"; + output [29:0] ACOUT; + output [17:0] BCOUT; + output CARRYCASCOUT; + output [3:0] CARRYOUT; + output MULTSIGNOUT; + output OVERFLOW; + output [47:0] P; + output PATTERNBDETECT; + output PATTERNDETECT; + output [47:0] PCOUT; + output UNDERFLOW; + output [7:0] XOROUT; + input [29:0] A; + input [29:0] ACIN; + (* invertible_pin = "IS_ALUMODE_INVERTED" *) + input [3:0] ALUMODE; + input [17:0] B; + input [17:0] BCIN; + input [47:0] C; + input CARRYCASCIN; + (* invertible_pin = "IS_CARRYIN_INVERTED" *) + input CARRYIN; + input [2:0] CARRYINSEL; + input CEA1; + input CEA2; + input CEAD; + input CEALUMODE; + input CEB1; + input CEB2; + input CEC; + input CECARRYIN; + input CECTRL; + input CED; + input CEINMODE; + input CEM; + input CEP; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [26:0] D; + (* invertible_pin = "IS_INMODE_INVERTED" *) + input [4:0] INMODE; + input MULTSIGNIN; + (* invertible_pin = "IS_OPMODE_INVERTED" *) + input [8:0] OPMODE; + input [47:0] PCIN; + (* invertible_pin = "IS_RSTA_INVERTED" *) + input RSTA; + (* invertible_pin = "IS_RSTALLCARRYIN_INVERTED" *) + input RSTALLCARRYIN; + (* invertible_pin = "IS_RSTALUMODE_INVERTED" *) + input RSTALUMODE; + (* invertible_pin = "IS_RSTB_INVERTED" *) + input RSTB; + (* invertible_pin = "IS_RSTC_INVERTED" *) + input RSTC; + (* invertible_pin = "IS_RSTCTRL_INVERTED" *) + input RSTCTRL; + (* invertible_pin = "IS_RSTD_INVERTED" *) + input RSTD; + (* invertible_pin = "IS_RSTINMODE_INVERTED" *) + input RSTINMODE; + (* invertible_pin = "IS_RSTM_INVERTED" *) + input RSTM; + (* invertible_pin = "IS_RSTP_INVERTED" *) + input RSTP; +endmodule + +module FDDRCPE (...); + parameter INIT = 1'b0; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input D0; + input D1; + input CLR; + input PRE; + output Q; +endmodule + +module FDDRRSE (...); + parameter INIT = 1'b0; + output Q; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input D0; + input D1; + input R; + input S; +endmodule + +module IFDDRCPE (...); + output Q0; + output Q1; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input CLR; + (* iopad_external_pin *) + input D; + input PRE; +endmodule + +module IFDDRRSE (...); + output Q0; + output Q1; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + (* iopad_external_pin *) + input D; + input R; + input S; +endmodule + +module OFDDRCPE (...); + (* iopad_external_pin *) + output Q; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input CLR; + input D0; + input D1; + input PRE; +endmodule + +module OFDDRRSE (...); + (* iopad_external_pin *) + output Q; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input D0; + input D1; + input R; + input S; +endmodule + +module OFDDRTCPE (...); + (* iopad_external_pin *) + output O; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input CLR; + input D0; + input D1; + input PRE; + input T; +endmodule + +module OFDDRTRSE (...); + (* iopad_external_pin *) + output O; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input D0; + input D1; + input R; + input S; + input T; +endmodule + +module IDDR2 (...); + parameter DDR_ALIGNMENT = "NONE"; + parameter [0:0] INIT_Q0 = 1'b0; + parameter [0:0] INIT_Q1 = 1'b0; + parameter SRTYPE = "SYNC"; + output Q0; + output Q1; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input D; + input R; + input S; +endmodule + +module ODDR2 (...); + parameter DDR_ALIGNMENT = "NONE"; + parameter [0:0] INIT = 1'b0; + parameter SRTYPE = "SYNC"; + output Q; + (* clkbuf_sink *) + input C0; + (* clkbuf_sink *) + input C1; + input CE; + input D0; + input D1; + input R; + input S; +endmodule + +module IDDR (...); + parameter DDR_CLK_EDGE = "OPPOSITE_EDGE"; + parameter INIT_Q1 = 1'b0; + parameter INIT_Q2 = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter SRTYPE = "SYNC"; + parameter MSGON = "TRUE"; + parameter XON = "TRUE"; + output Q1; + output Q2; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + input CE; + (* invertible_pin = "IS_D_INVERTED" *) + input D; + input R; + input S; +endmodule + +module IDDR_2CLK (...); + parameter DDR_CLK_EDGE = "OPPOSITE_EDGE"; + parameter INIT_Q1 = 1'b0; + parameter INIT_Q2 = 1'b0; + parameter [0:0] IS_CB_INVERTED = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter SRTYPE = "SYNC"; + output Q1; + output Q2; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + (* clkbuf_sink *) + (* invertible_pin = "IS_CB_INVERTED" *) + input CB; + input CE; + (* invertible_pin = "IS_D_INVERTED" *) + input D; + input R; + input S; +endmodule + +module ODDR (...); + parameter DDR_CLK_EDGE = "OPPOSITE_EDGE"; + parameter INIT = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D1_INVERTED = 1'b0; + parameter [0:0] IS_D2_INVERTED = 1'b0; + parameter SRTYPE = "SYNC"; + parameter MSGON = "TRUE"; + parameter XON = "TRUE"; + output Q; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + input CE; + (* invertible_pin = "IS_D1_INVERTED" *) + input D1; + (* invertible_pin = "IS_D2_INVERTED" *) + input D2; + input R; + input S; +endmodule + +(* keep *) +module IDELAYCTRL (...); + parameter SIM_DEVICE = "7SERIES"; + output RDY; + (* clkbuf_sink *) + input REFCLK; + input RST; +endmodule + +module IDELAY (...); + parameter IOBDELAY_TYPE = "DEFAULT"; + parameter integer IOBDELAY_VALUE = 0; + output O; + (* clkbuf_sink *) + input C; + input CE; + input I; + input INC; + input RST; +endmodule + +module ISERDES (...); + parameter BITSLIP_ENABLE = "FALSE"; + parameter DATA_RATE = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter [0:0] INIT_Q1 = 1'b0; + parameter [0:0] INIT_Q2 = 1'b0; + parameter [0:0] INIT_Q3 = 1'b0; + parameter [0:0] INIT_Q4 = 1'b0; + parameter INTERFACE_TYPE = "MEMORY"; + parameter IOBDELAY = "NONE"; + parameter IOBDELAY_TYPE = "DEFAULT"; + parameter integer IOBDELAY_VALUE = 0; + parameter integer NUM_CE = 2; + parameter SERDES_MODE = "MASTER"; + parameter integer SIM_DELAY_D = 0; + parameter integer SIM_SETUP_D_CLK = 0; + parameter integer SIM_HOLD_D_CLK = 0; + parameter [0:0] SRVAL_Q1 = 1'b0; + parameter [0:0] SRVAL_Q2 = 1'b0; + parameter [0:0] SRVAL_Q3 = 1'b0; + parameter [0:0] SRVAL_Q4 = 1'b0; + output O; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output SHIFTOUT1; + output SHIFTOUT2; + input BITSLIP; + input CE1; + input CE2; + (* clkbuf_sink *) + input CLK; + (* clkbuf_sink *) + input CLKDIV; + input D; + input DLYCE; + input DLYINC; + input DLYRST; + (* clkbuf_sink *) + input OCLK; + input REV; + input SHIFTIN1; + input SHIFTIN2; + input SR; +endmodule + +module OSERDES (...); + parameter DATA_RATE_OQ = "DDR"; + parameter DATA_RATE_TQ = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter [0:0] INIT_OQ = 1'b0; + parameter [0:0] INIT_TQ = 1'b0; + parameter SERDES_MODE = "MASTER"; + parameter [0:0] SRVAL_OQ = 1'b0; + parameter [0:0] SRVAL_TQ = 1'b0; + parameter integer TRISTATE_WIDTH = 4; + output OQ; + output SHIFTOUT1; + output SHIFTOUT2; + output TQ; + (* clkbuf_sink *) + input CLK; + (* clkbuf_sink *) + input CLKDIV; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input OCE; + input REV; + input SHIFTIN1; + input SHIFTIN2; + input SR; + input T1; + input T2; + input T3; + input T4; + input TCE; +endmodule + +module IODELAY (...); + parameter DELAY_SRC = "I"; + parameter HIGH_PERFORMANCE_MODE = "TRUE"; + parameter IDELAY_TYPE = "DEFAULT"; + parameter integer IDELAY_VALUE = 0; + parameter integer ODELAY_VALUE = 0; + parameter real REFCLK_FREQUENCY = 200.0; + parameter SIGNAL_PATTERN = "DATA"; + output DATAOUT; + (* clkbuf_sink *) + input C; + input CE; + input DATAIN; + input IDATAIN; + input INC; + input ODATAIN; + input RST; + input T; +endmodule + +module ISERDES_NODELAY (...); + parameter BITSLIP_ENABLE = "FALSE"; + parameter DATA_RATE = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter INIT_Q1 = 1'b0; + parameter INIT_Q2 = 1'b0; + parameter INIT_Q3 = 1'b0; + parameter INIT_Q4 = 1'b0; + parameter INTERFACE_TYPE = "MEMORY"; + parameter integer NUM_CE = 2; + parameter SERDES_MODE = "MASTER"; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output SHIFTOUT1; + output SHIFTOUT2; + input BITSLIP; + input CE1; + input CE2; + (* clkbuf_sink *) + input CLK; + (* clkbuf_sink *) + input CLKB; + (* clkbuf_sink *) + input CLKDIV; + input D; + (* clkbuf_sink *) + input OCLK; + input RST; + input SHIFTIN1; + input SHIFTIN2; +endmodule + +module IODELAYE1 (...); + parameter CINVCTRL_SEL = "FALSE"; + parameter DELAY_SRC = "I"; + parameter HIGH_PERFORMANCE_MODE = "FALSE"; + parameter IDELAY_TYPE = "DEFAULT"; + parameter integer IDELAY_VALUE = 0; + parameter ODELAY_TYPE = "FIXED"; + parameter integer ODELAY_VALUE = 0; + parameter real REFCLK_FREQUENCY = 200.0; + parameter SIGNAL_PATTERN = "DATA"; + output [4:0] CNTVALUEOUT; + output DATAOUT; + (* clkbuf_sink *) + input C; + input CE; + input CINVCTRL; + input CLKIN; + input [4:0] CNTVALUEIN; + input DATAIN; + input IDATAIN; + input INC; + input ODATAIN; + input RST; + input T; +endmodule + +module ISERDESE1 (...); + parameter DATA_RATE = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter DYN_CLKDIV_INV_EN = "FALSE"; + parameter DYN_CLK_INV_EN = "FALSE"; + parameter [0:0] INIT_Q1 = 1'b0; + parameter [0:0] INIT_Q2 = 1'b0; + parameter [0:0] INIT_Q3 = 1'b0; + parameter [0:0] INIT_Q4 = 1'b0; + parameter INTERFACE_TYPE = "MEMORY"; + parameter integer NUM_CE = 2; + parameter IOBDELAY = "NONE"; + parameter OFB_USED = "FALSE"; + parameter SERDES_MODE = "MASTER"; + parameter [0:0] SRVAL_Q1 = 1'b0; + parameter [0:0] SRVAL_Q2 = 1'b0; + parameter [0:0] SRVAL_Q3 = 1'b0; + parameter [0:0] SRVAL_Q4 = 1'b0; + output O; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output SHIFTOUT1; + output SHIFTOUT2; + input BITSLIP; + input CE1; + input CE2; + (* clkbuf_sink *) + input CLK; + (* clkbuf_sink *) + input CLKB; + (* clkbuf_sink *) + input CLKDIV; + input D; + input DDLY; + input DYNCLKDIVSEL; + input DYNCLKSEL; + (* clkbuf_sink *) + input OCLK; + input OFB; + input RST; + input SHIFTIN1; + input SHIFTIN2; +endmodule + +module OSERDESE1 (...); + parameter DATA_RATE_OQ = "DDR"; + parameter DATA_RATE_TQ = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter integer DDR3_DATA = 1; + parameter [0:0] INIT_OQ = 1'b0; + parameter [0:0] INIT_TQ = 1'b0; + parameter INTERFACE_TYPE = "DEFAULT"; + parameter integer ODELAY_USED = 0; + parameter SERDES_MODE = "MASTER"; + parameter [0:0] SRVAL_OQ = 1'b0; + parameter [0:0] SRVAL_TQ = 1'b0; + parameter integer TRISTATE_WIDTH = 4; + output OCBEXTEND; + output OFB; + output OQ; + output SHIFTOUT1; + output SHIFTOUT2; + output TFB; + output TQ; + (* clkbuf_sink *) + input CLK; + (* clkbuf_sink *) + input CLKDIV; + input CLKPERF; + input CLKPERFDELAY; + input D1; + input D2; + input D3; + input D4; + input D5; + input D6; + input OCE; + input ODV; + input RST; + input SHIFTIN1; + input SHIFTIN2; + input T1; + input T2; + input T3; + input T4; + input TCE; + input WC; +endmodule + +module IDELAYE2 (...); + parameter CINVCTRL_SEL = "FALSE"; + parameter DELAY_SRC = "IDATAIN"; + parameter HIGH_PERFORMANCE_MODE = "FALSE"; + parameter IDELAY_TYPE = "FIXED"; + parameter integer IDELAY_VALUE = 0; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_DATAIN_INVERTED = 1'b0; + parameter [0:0] IS_IDATAIN_INVERTED = 1'b0; + parameter PIPE_SEL = "FALSE"; + parameter real REFCLK_FREQUENCY = 200.0; + parameter SIGNAL_PATTERN = "DATA"; + parameter integer SIM_DELAY_D = 0; + output [4:0] CNTVALUEOUT; + output DATAOUT; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + input CE; + input CINVCTRL; + input [4:0] CNTVALUEIN; + (* invertible_pin = "IS_DATAIN_INVERTED" *) + input DATAIN; + (* invertible_pin = "IS_IDATAIN_INVERTED" *) + input IDATAIN; + input INC; + input LD; + input LDPIPEEN; + input REGRST; +endmodule + +module ODELAYE2 (...); + parameter CINVCTRL_SEL = "FALSE"; + parameter DELAY_SRC = "ODATAIN"; + parameter HIGH_PERFORMANCE_MODE = "FALSE"; + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_ODATAIN_INVERTED = 1'b0; + parameter ODELAY_TYPE = "FIXED"; + parameter integer ODELAY_VALUE = 0; + parameter PIPE_SEL = "FALSE"; + parameter real REFCLK_FREQUENCY = 200.0; + parameter SIGNAL_PATTERN = "DATA"; + parameter integer SIM_DELAY_D = 0; + output [4:0] CNTVALUEOUT; + output DATAOUT; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + input CE; + input CINVCTRL; + input CLKIN; + input [4:0] CNTVALUEIN; + input INC; + input LD; + input LDPIPEEN; + (* invertible_pin = "IS_ODATAIN_INVERTED" *) + input ODATAIN; + input REGRST; +endmodule + +module ISERDESE2 (...); + parameter DATA_RATE = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter DYN_CLKDIV_INV_EN = "FALSE"; + parameter DYN_CLK_INV_EN = "FALSE"; + parameter [0:0] INIT_Q1 = 1'b0; + parameter [0:0] INIT_Q2 = 1'b0; + parameter [0:0] INIT_Q3 = 1'b0; + parameter [0:0] INIT_Q4 = 1'b0; + parameter INTERFACE_TYPE = "MEMORY"; + parameter IOBDELAY = "NONE"; + parameter [0:0] IS_CLKB_INVERTED = 1'b0; + parameter [0:0] IS_CLKDIVP_INVERTED = 1'b0; + parameter [0:0] IS_CLKDIV_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_D_INVERTED = 1'b0; + parameter [0:0] IS_OCLKB_INVERTED = 1'b0; + parameter [0:0] IS_OCLK_INVERTED = 1'b0; + parameter integer NUM_CE = 2; + parameter OFB_USED = "FALSE"; + parameter SERDES_MODE = "MASTER"; + parameter [0:0] SRVAL_Q1 = 1'b0; + parameter [0:0] SRVAL_Q2 = 1'b0; + parameter [0:0] SRVAL_Q3 = 1'b0; + parameter [0:0] SRVAL_Q4 = 1'b0; + output O; + output Q1; + output Q2; + output Q3; + output Q4; + output Q5; + output Q6; + output Q7; + output Q8; + output SHIFTOUT1; + output SHIFTOUT2; + input BITSLIP; + input CE1; + input CE2; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKB_INVERTED" *) + input CLKB; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKDIV_INVERTED" *) + input CLKDIV; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKDIVP_INVERTED" *) + input CLKDIVP; + (* invertible_pin = "IS_D_INVERTED" *) + input D; + input DDLY; + input DYNCLKDIVSEL; + input DYNCLKSEL; + (* clkbuf_sink *) + (* invertible_pin = "IS_OCLK_INVERTED" *) + input OCLK; + (* clkbuf_sink *) + (* invertible_pin = "IS_OCLKB_INVERTED" *) + input OCLKB; + input OFB; + input RST; + input SHIFTIN1; + input SHIFTIN2; +endmodule + +module OSERDESE2 (...); + parameter DATA_RATE_OQ = "DDR"; + parameter DATA_RATE_TQ = "DDR"; + parameter integer DATA_WIDTH = 4; + parameter [0:0] INIT_OQ = 1'b0; + parameter [0:0] INIT_TQ = 1'b0; + parameter [0:0] IS_CLKDIV_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_D1_INVERTED = 1'b0; + parameter [0:0] IS_D2_INVERTED = 1'b0; + parameter [0:0] IS_D3_INVERTED = 1'b0; + parameter [0:0] IS_D4_INVERTED = 1'b0; + parameter [0:0] IS_D5_INVERTED = 1'b0; + parameter [0:0] IS_D6_INVERTED = 1'b0; + parameter [0:0] IS_D7_INVERTED = 1'b0; + parameter [0:0] IS_D8_INVERTED = 1'b0; + parameter [0:0] IS_T1_INVERTED = 1'b0; + parameter [0:0] IS_T2_INVERTED = 1'b0; + parameter [0:0] IS_T3_INVERTED = 1'b0; + parameter [0:0] IS_T4_INVERTED = 1'b0; + parameter SERDES_MODE = "MASTER"; + parameter [0:0] SRVAL_OQ = 1'b0; + parameter [0:0] SRVAL_TQ = 1'b0; + parameter TBYTE_CTL = "FALSE"; + parameter TBYTE_SRC = "FALSE"; + parameter integer TRISTATE_WIDTH = 4; + output OFB; + output OQ; + output SHIFTOUT1; + output SHIFTOUT2; + output TBYTEOUT; + output TFB; + output TQ; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKDIV_INVERTED" *) + input CLKDIV; + (* invertible_pin = "IS_D1_INVERTED" *) + input D1; + (* invertible_pin = "IS_D2_INVERTED" *) + input D2; + (* invertible_pin = "IS_D3_INVERTED" *) + input D3; + (* invertible_pin = "IS_D4_INVERTED" *) + input D4; + (* invertible_pin = "IS_D5_INVERTED" *) + input D5; + (* invertible_pin = "IS_D6_INVERTED" *) + input D6; + (* invertible_pin = "IS_D7_INVERTED" *) + input D7; + (* invertible_pin = "IS_D8_INVERTED" *) + input D8; + input OCE; + input RST; + input SHIFTIN1; + input SHIFTIN2; + (* invertible_pin = "IS_T1_INVERTED" *) + input T1; + (* invertible_pin = "IS_T2_INVERTED" *) + input T2; + (* invertible_pin = "IS_T3_INVERTED" *) + input T3; + (* invertible_pin = "IS_T4_INVERTED" *) + input T4; + input TBYTEIN; + input TCE; +endmodule + +(* keep *) +module PHASER_IN (...); + parameter integer CLKOUT_DIV = 4; + parameter DQS_BIAS_MODE = "FALSE"; + parameter EN_ISERDES_RST = "FALSE"; + parameter integer FINE_DELAY = 0; + parameter FREQ_REF_DIV = "NONE"; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real MEMREFCLK_PERIOD = 0.000; + parameter OUTPUT_CLK_SRC = "PHASE_REF"; + parameter real PHASEREFCLK_PERIOD = 0.000; + parameter real REFCLK_PERIOD = 0.000; + parameter integer SEL_CLK_OFFSET = 5; + parameter SYNC_IN_DIV_RST = "FALSE"; + output FINEOVERFLOW; + output ICLK; + output ICLKDIV; + output ISERDESRST; + output RCLK; + output [5:0] COUNTERREADVAL; + input COUNTERLOADEN; + input COUNTERREADEN; + input DIVIDERST; + input EDGEADV; + input FINEENABLE; + input FINEINC; + input FREQREFCLK; + input MEMREFCLK; + input PHASEREFCLK; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + input SYNCIN; + input SYSCLK; + input [1:0] RANKSEL; + input [5:0] COUNTERLOADVAL; +endmodule + +(* keep *) +module PHASER_IN_PHY (...); + parameter BURST_MODE = "FALSE"; + parameter integer CLKOUT_DIV = 4; + parameter [0:0] DQS_AUTO_RECAL = 1'b1; + parameter DQS_BIAS_MODE = "FALSE"; + parameter [2:0] DQS_FIND_PATTERN = 3'b001; + parameter integer FINE_DELAY = 0; + parameter FREQ_REF_DIV = "NONE"; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real MEMREFCLK_PERIOD = 0.000; + parameter OUTPUT_CLK_SRC = "PHASE_REF"; + parameter real PHASEREFCLK_PERIOD = 0.000; + parameter real REFCLK_PERIOD = 0.000; + parameter integer SEL_CLK_OFFSET = 5; + parameter SYNC_IN_DIV_RST = "FALSE"; + parameter WR_CYCLES = "FALSE"; + output DQSFOUND; + output DQSOUTOFRANGE; + output FINEOVERFLOW; + output ICLK; + output ICLKDIV; + output ISERDESRST; + output PHASELOCKED; + output RCLK; + output WRENABLE; + output [5:0] COUNTERREADVAL; + input BURSTPENDINGPHY; + input COUNTERLOADEN; + input COUNTERREADEN; + input FINEENABLE; + input FINEINC; + input FREQREFCLK; + input MEMREFCLK; + input PHASEREFCLK; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + input RSTDQSFIND; + input SYNCIN; + input SYSCLK; + input [1:0] ENCALIBPHY; + input [1:0] RANKSELPHY; + input [5:0] COUNTERLOADVAL; +endmodule + +(* keep *) +module PHASER_OUT (...); + parameter integer CLKOUT_DIV = 4; + parameter COARSE_BYPASS = "FALSE"; + parameter integer COARSE_DELAY = 0; + parameter EN_OSERDES_RST = "FALSE"; + parameter integer FINE_DELAY = 0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real MEMREFCLK_PERIOD = 0.000; + parameter OCLKDELAY_INV = "FALSE"; + parameter integer OCLK_DELAY = 0; + parameter OUTPUT_CLK_SRC = "PHASE_REF"; + parameter real PHASEREFCLK_PERIOD = 0.000; + parameter [2:0] PO = 3'b000; + parameter real REFCLK_PERIOD = 0.000; + parameter SYNC_IN_DIV_RST = "FALSE"; + output COARSEOVERFLOW; + output FINEOVERFLOW; + output OCLK; + output OCLKDELAYED; + output OCLKDIV; + output OSERDESRST; + output [8:0] COUNTERREADVAL; + input COARSEENABLE; + input COARSEINC; + input COUNTERLOADEN; + input COUNTERREADEN; + input DIVIDERST; + input EDGEADV; + input FINEENABLE; + input FINEINC; + input FREQREFCLK; + input MEMREFCLK; + input PHASEREFCLK; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + input SELFINEOCLKDELAY; + input SYNCIN; + input SYSCLK; + input [8:0] COUNTERLOADVAL; +endmodule + +(* keep *) +module PHASER_OUT_PHY (...); + parameter integer CLKOUT_DIV = 4; + parameter COARSE_BYPASS = "FALSE"; + parameter integer COARSE_DELAY = 0; + parameter DATA_CTL_N = "FALSE"; + parameter DATA_RD_CYCLES = "FALSE"; + parameter integer FINE_DELAY = 0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real MEMREFCLK_PERIOD = 0.000; + parameter OCLKDELAY_INV = "FALSE"; + parameter integer OCLK_DELAY = 0; + parameter OUTPUT_CLK_SRC = "PHASE_REF"; + parameter real PHASEREFCLK_PERIOD = 0.000; + parameter [2:0] PO = 3'b000; + parameter real REFCLK_PERIOD = 0.000; + parameter SYNC_IN_DIV_RST = "FALSE"; + output COARSEOVERFLOW; + output FINEOVERFLOW; + output OCLK; + output OCLKDELAYED; + output OCLKDIV; + output OSERDESRST; + output RDENABLE; + output [1:0] CTSBUS; + output [1:0] DQSBUS; + output [1:0] DTSBUS; + output [8:0] COUNTERREADVAL; + input BURSTPENDINGPHY; + input COARSEENABLE; + input COARSEINC; + input COUNTERLOADEN; + input COUNTERREADEN; + input FINEENABLE; + input FINEINC; + input FREQREFCLK; + input MEMREFCLK; + input PHASEREFCLK; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + input SELFINEOCLKDELAY; + input SYNCIN; + input SYSCLK; + input [1:0] ENCALIBPHY; + input [8:0] COUNTERLOADVAL; +endmodule + +(* keep *) +module PHASER_REF (...); + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + output LOCKED; + input CLKIN; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +(* keep *) +module PHY_CONTROL (...); + parameter integer AO_TOGGLE = 0; + parameter [3:0] AO_WRLVL_EN = 4'b0000; + parameter BURST_MODE = "FALSE"; + parameter integer CLK_RATIO = 1; + parameter integer CMD_OFFSET = 0; + parameter integer CO_DURATION = 0; + parameter DATA_CTL_A_N = "FALSE"; + parameter DATA_CTL_B_N = "FALSE"; + parameter DATA_CTL_C_N = "FALSE"; + parameter DATA_CTL_D_N = "FALSE"; + parameter DISABLE_SEQ_MATCH = "TRUE"; + parameter integer DI_DURATION = 0; + parameter integer DO_DURATION = 0; + parameter integer EVENTS_DELAY = 63; + parameter integer FOUR_WINDOW_CLOCKS = 63; + parameter MULTI_REGION = "FALSE"; + parameter PHY_COUNT_ENABLE = "FALSE"; + parameter integer RD_CMD_OFFSET_0 = 0; + parameter integer RD_CMD_OFFSET_1 = 00; + parameter integer RD_CMD_OFFSET_2 = 0; + parameter integer RD_CMD_OFFSET_3 = 0; + parameter integer RD_DURATION_0 = 0; + parameter integer RD_DURATION_1 = 0; + parameter integer RD_DURATION_2 = 0; + parameter integer RD_DURATION_3 = 0; + parameter SYNC_MODE = "FALSE"; + parameter integer WR_CMD_OFFSET_0 = 0; + parameter integer WR_CMD_OFFSET_1 = 0; + parameter integer WR_CMD_OFFSET_2 = 0; + parameter integer WR_CMD_OFFSET_3 = 0; + parameter integer WR_DURATION_0 = 0; + parameter integer WR_DURATION_1 = 0; + parameter integer WR_DURATION_2 = 0; + parameter integer WR_DURATION_3 = 0; + output PHYCTLALMOSTFULL; + output PHYCTLEMPTY; + output PHYCTLFULL; + output PHYCTLREADY; + output [1:0] INRANKA; + output [1:0] INRANKB; + output [1:0] INRANKC; + output [1:0] INRANKD; + output [1:0] PCENABLECALIB; + output [3:0] AUXOUTPUT; + output [3:0] INBURSTPENDING; + output [3:0] OUTBURSTPENDING; + input MEMREFCLK; + input PHYCLK; + input PHYCTLMSTREMPTY; + input PHYCTLWRENABLE; + input PLLLOCK; + input READCALIBENABLE; + input REFDLLLOCK; + input RESET; + input SYNCIN; + input WRITECALIBENABLE; + input [31:0] PHYCTLWD; +endmodule + +module IDDRE1 (...); + parameter DDR_CLK_EDGE = "OPPOSITE_EDGE"; + parameter [0:0] IS_CB_INVERTED = 1'b0; + parameter [0:0] IS_C_INVERTED = 1'b0; + output Q1; + output Q2; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + (* clkbuf_sink *) + (* invertible_pin = "IS_CB_INVERTED" *) + input CB; + input D; + input R; +endmodule + +module ODDRE1 (...); + parameter [0:0] IS_C_INVERTED = 1'b0; + parameter [0:0] IS_D1_INVERTED = 1'b0; + parameter [0:0] IS_D2_INVERTED = 1'b0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter [0:0] SRVAL = 1'b0; + output Q; + (* clkbuf_sink *) + (* invertible_pin = "IS_C_INVERTED" *) + input C; + (* invertible_pin = "IS_D1_INVERTED" *) + input D1; + (* invertible_pin = "IS_D2_INVERTED" *) + input D2; + input SR; +endmodule + +module IDELAYE3 (...); + parameter CASCADE = "NONE"; + parameter DELAY_FORMAT = "TIME"; + parameter DELAY_SRC = "IDATAIN"; + parameter DELAY_TYPE = "FIXED"; + parameter integer DELAY_VALUE = 0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter LOOPBACK = "FALSE"; + parameter real REFCLK_FREQUENCY = 300.0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + parameter UPDATE_MODE = "ASYNC"; + output CASC_OUT; + output [8:0] CNTVALUEOUT; + output DATAOUT; + input CASC_IN; + input CASC_RETURN; + input CE; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [8:0] CNTVALUEIN; + input DATAIN; + input EN_VTC; + input IDATAIN; + input INC; + input LOAD; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module ODELAYE3 (...); + parameter CASCADE = "NONE"; + parameter DELAY_FORMAT = "TIME"; + parameter DELAY_TYPE = "FIXED"; + parameter integer DELAY_VALUE = 0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REFCLK_FREQUENCY = 300.0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + parameter UPDATE_MODE = "ASYNC"; + output CASC_OUT; + output [8:0] CNTVALUEOUT; + output DATAOUT; + input CASC_IN; + input CASC_RETURN; + input CE; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [8:0] CNTVALUEIN; + input EN_VTC; + input INC; + input LOAD; + input ODATAIN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module ISERDESE3 (...); + parameter integer DATA_WIDTH = 8; + parameter DDR_CLK_EDGE = "OPPOSITE_EDGE"; + parameter FIFO_ENABLE = "FALSE"; + parameter FIFO_SYNC_MODE = "FALSE"; + parameter IDDR_MODE = "FALSE"; + parameter [0:0] IS_CLK_B_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + output FIFO_EMPTY; + output INTERNAL_DIVCLK; + output [7:0] Q; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + (* clkbuf_sink *) + input CLKDIV; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_B_INVERTED" *) + input CLK_B; + input D; + (* clkbuf_sink *) + input FIFO_RD_CLK; + input FIFO_RD_EN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module OSERDESE3 (...); + parameter integer DATA_WIDTH = 8; + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_CLKDIV_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter ODDR_MODE = "FALSE"; + parameter OSERDES_D_BYPASS = "FALSE"; + parameter OSERDES_T_BYPASS = "FALSE"; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + output OQ; + output T_OUT; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLKDIV_INVERTED" *) + input CLKDIV; + input [7:0] D; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + input T; +endmodule + +(* keep *) +module BITSLICE_CONTROL (...); + parameter CTRL_CLK = "EXTERNAL"; + parameter DIV_MODE = "DIV2"; + parameter EN_CLK_TO_EXT_NORTH = "DISABLE"; + parameter EN_CLK_TO_EXT_SOUTH = "DISABLE"; + parameter EN_DYN_ODLY_MODE = "FALSE"; + parameter EN_OTHER_NCLK = "FALSE"; + parameter EN_OTHER_PCLK = "FALSE"; + parameter IDLY_VT_TRACK = "TRUE"; + parameter INV_RXCLK = "FALSE"; + parameter ODLY_VT_TRACK = "TRUE"; + parameter QDLY_VT_TRACK = "TRUE"; + parameter [5:0] READ_IDLE_COUNT = 6'h00; + parameter REFCLK_SRC = "PLLCLK"; + parameter integer ROUNDING_FACTOR = 16; + parameter RXGATE_EXTEND = "FALSE"; + parameter RX_CLK_PHASE_N = "SHIFT_0"; + parameter RX_CLK_PHASE_P = "SHIFT_0"; + parameter RX_GATING = "DISABLE"; + parameter SELF_CALIBRATE = "ENABLE"; + parameter SERIAL_MODE = "FALSE"; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter SIM_SPEEDUP = "FAST"; + parameter real SIM_VERSION = 2.0; + parameter TX_GATING = "DISABLE"; + output CLK_TO_EXT_NORTH; + output CLK_TO_EXT_SOUTH; + output DLY_RDY; + output [6:0] DYN_DCI; + output NCLK_NIBBLE_OUT; + output PCLK_NIBBLE_OUT; + output [15:0] RIU_RD_DATA; + output RIU_VALID; + output [39:0] RX_BIT_CTRL_OUT0; + output [39:0] RX_BIT_CTRL_OUT1; + output [39:0] RX_BIT_CTRL_OUT2; + output [39:0] RX_BIT_CTRL_OUT3; + output [39:0] RX_BIT_CTRL_OUT4; + output [39:0] RX_BIT_CTRL_OUT5; + output [39:0] RX_BIT_CTRL_OUT6; + output [39:0] TX_BIT_CTRL_OUT0; + output [39:0] TX_BIT_CTRL_OUT1; + output [39:0] TX_BIT_CTRL_OUT2; + output [39:0] TX_BIT_CTRL_OUT3; + output [39:0] TX_BIT_CTRL_OUT4; + output [39:0] TX_BIT_CTRL_OUT5; + output [39:0] TX_BIT_CTRL_OUT6; + output [39:0] TX_BIT_CTRL_OUT_TRI; + output VTC_RDY; + input CLK_FROM_EXT; + input EN_VTC; + input NCLK_NIBBLE_IN; + input PCLK_NIBBLE_IN; + input [3:0] PHY_RDCS0; + input [3:0] PHY_RDCS1; + input [3:0] PHY_RDEN; + input [3:0] PHY_WRCS0; + input [3:0] PHY_WRCS1; + input PLL_CLK; + input REFCLK; + input [5:0] RIU_ADDR; + input RIU_CLK; + input RIU_NIBBLE_SEL; + input [15:0] RIU_WR_DATA; + input RIU_WR_EN; + input RST; + input [39:0] RX_BIT_CTRL_IN0; + input [39:0] RX_BIT_CTRL_IN1; + input [39:0] RX_BIT_CTRL_IN2; + input [39:0] RX_BIT_CTRL_IN3; + input [39:0] RX_BIT_CTRL_IN4; + input [39:0] RX_BIT_CTRL_IN5; + input [39:0] RX_BIT_CTRL_IN6; + input [3:0] TBYTE_IN; + input [39:0] TX_BIT_CTRL_IN0; + input [39:0] TX_BIT_CTRL_IN1; + input [39:0] TX_BIT_CTRL_IN2; + input [39:0] TX_BIT_CTRL_IN3; + input [39:0] TX_BIT_CTRL_IN4; + input [39:0] TX_BIT_CTRL_IN5; + input [39:0] TX_BIT_CTRL_IN6; + input [39:0] TX_BIT_CTRL_IN_TRI; +endmodule + +(* keep *) +module RIU_OR (...); + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + output [15:0] RIU_RD_DATA; + output RIU_RD_VALID; + input [15:0] RIU_RD_DATA_LOW; + input [15:0] RIU_RD_DATA_UPP; + input RIU_RD_VALID_LOW; + input RIU_RD_VALID_UPP; +endmodule + +module RX_BITSLICE (...); + parameter CASCADE = "TRUE"; + parameter DATA_TYPE = "NONE"; + parameter integer DATA_WIDTH = 8; + parameter DELAY_FORMAT = "TIME"; + parameter DELAY_TYPE = "FIXED"; + parameter integer DELAY_VALUE = 0; + parameter integer DELAY_VALUE_EXT = 0; + parameter FIFO_SYNC_MODE = "FALSE"; + parameter [0:0] IS_CLK_EXT_INVERTED = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_DLY_EXT_INVERTED = 1'b0; + parameter [0:0] IS_RST_DLY_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REFCLK_FREQUENCY = 300.0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + parameter UPDATE_MODE = "ASYNC"; + parameter UPDATE_MODE_EXT = "ASYNC"; + output [8:0] CNTVALUEOUT; + output [8:0] CNTVALUEOUT_EXT; + output FIFO_EMPTY; + output FIFO_WRCLK_OUT; + output [7:0] Q; + output [39:0] RX_BIT_CTRL_OUT; + output [39:0] TX_BIT_CTRL_OUT; + input CE; + input CE_EXT; + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + (* invertible_pin = "IS_CLK_EXT_INVERTED" *) + input CLK_EXT; + input [8:0] CNTVALUEIN; + input [8:0] CNTVALUEIN_EXT; + input DATAIN; + input EN_VTC; + input EN_VTC_EXT; + input FIFO_RD_CLK; + input FIFO_RD_EN; + input INC; + input INC_EXT; + input LOAD; + input LOAD_EXT; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RST_DLY_INVERTED" *) + input RST_DLY; + (* invertible_pin = "IS_RST_DLY_EXT_INVERTED" *) + input RST_DLY_EXT; + input [39:0] RX_BIT_CTRL_IN; + input [39:0] TX_BIT_CTRL_IN; +endmodule + +module RXTX_BITSLICE (...); + parameter FIFO_SYNC_MODE = "FALSE"; + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_RX_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RX_RST_DLY_INVERTED = 1'b0; + parameter [0:0] IS_RX_RST_INVERTED = 1'b0; + parameter [0:0] IS_TX_CLK_INVERTED = 1'b0; + parameter [0:0] IS_TX_RST_DLY_INVERTED = 1'b0; + parameter [0:0] IS_TX_RST_INVERTED = 1'b0; + parameter LOOPBACK = "FALSE"; + parameter NATIVE_ODELAY_BYPASS = "FALSE"; + parameter ENABLE_PRE_EMPHASIS = "FALSE"; + parameter RX_DATA_TYPE = "NONE"; + parameter integer RX_DATA_WIDTH = 8; + parameter RX_DELAY_FORMAT = "TIME"; + parameter RX_DELAY_TYPE = "FIXED"; + parameter integer RX_DELAY_VALUE = 0; + parameter real RX_REFCLK_FREQUENCY = 300.0; + parameter RX_UPDATE_MODE = "ASYNC"; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + parameter TBYTE_CTL = "TBYTE_IN"; + parameter integer TX_DATA_WIDTH = 8; + parameter TX_DELAY_FORMAT = "TIME"; + parameter TX_DELAY_TYPE = "FIXED"; + parameter integer TX_DELAY_VALUE = 0; + parameter TX_OUTPUT_PHASE_90 = "FALSE"; + parameter real TX_REFCLK_FREQUENCY = 300.0; + parameter TX_UPDATE_MODE = "ASYNC"; + output FIFO_EMPTY; + output FIFO_WRCLK_OUT; + output O; + output [7:0] Q; + output [39:0] RX_BIT_CTRL_OUT; + output [8:0] RX_CNTVALUEOUT; + output [39:0] TX_BIT_CTRL_OUT; + output [8:0] TX_CNTVALUEOUT; + output T_OUT; + input [7:0] D; + input DATAIN; + input FIFO_RD_CLK; + input FIFO_RD_EN; + input [39:0] RX_BIT_CTRL_IN; + input RX_CE; + (* invertible_pin = "IS_RX_CLK_INVERTED" *) + input RX_CLK; + input [8:0] RX_CNTVALUEIN; + input RX_EN_VTC; + input RX_INC; + input RX_LOAD; + (* invertible_pin = "IS_RX_RST_INVERTED" *) + input RX_RST; + (* invertible_pin = "IS_RX_RST_DLY_INVERTED" *) + input RX_RST_DLY; + input T; + input TBYTE_IN; + input [39:0] TX_BIT_CTRL_IN; + input TX_CE; + (* invertible_pin = "IS_TX_CLK_INVERTED" *) + input TX_CLK; + input [8:0] TX_CNTVALUEIN; + input TX_EN_VTC; + input TX_INC; + input TX_LOAD; + (* invertible_pin = "IS_TX_RST_INVERTED" *) + input TX_RST; + (* invertible_pin = "IS_TX_RST_DLY_INVERTED" *) + input TX_RST_DLY; +endmodule + +module TX_BITSLICE (...); + parameter integer DATA_WIDTH = 8; + parameter DELAY_FORMAT = "TIME"; + parameter DELAY_TYPE = "FIXED"; + parameter integer DELAY_VALUE = 0; + parameter ENABLE_PRE_EMPHASIS = "FALSE"; + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_DLY_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter NATIVE_ODELAY_BYPASS = "FALSE"; + parameter OUTPUT_PHASE_90 = "FALSE"; + parameter real REFCLK_FREQUENCY = 300.0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + parameter TBYTE_CTL = "TBYTE_IN"; + parameter UPDATE_MODE = "ASYNC"; + output [8:0] CNTVALUEOUT; + output O; + output [39:0] RX_BIT_CTRL_OUT; + output [39:0] TX_BIT_CTRL_OUT; + output T_OUT; + input CE; + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [8:0] CNTVALUEIN; + input [7:0] D; + input EN_VTC; + input INC; + input LOAD; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RST_DLY_INVERTED" *) + input RST_DLY; + input [39:0] RX_BIT_CTRL_IN; + input T; + input TBYTE_IN; + input [39:0] TX_BIT_CTRL_IN; +endmodule + +module TX_BITSLICE_TRI (...); + parameter integer DATA_WIDTH = 8; + parameter DELAY_FORMAT = "TIME"; + parameter DELAY_TYPE = "FIXED"; + parameter integer DELAY_VALUE = 0; + parameter [0:0] INIT = 1'b1; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter [0:0] IS_RST_DLY_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter NATIVE_ODELAY_BYPASS = "FALSE"; + parameter OUTPUT_PHASE_90 = "FALSE"; + parameter real REFCLK_FREQUENCY = 300.0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter real SIM_VERSION = 2.0; + parameter UPDATE_MODE = "ASYNC"; + output [39:0] BIT_CTRL_OUT; + output [8:0] CNTVALUEOUT; + output TRI_OUT; + input [39:0] BIT_CTRL_IN; + input CE; + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input [8:0] CNTVALUEIN; + input EN_VTC; + input INC; + input LOAD; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + (* invertible_pin = "IS_RST_DLY_INVERTED" *) + input RST_DLY; +endmodule + +module IODELAY2 (...); + parameter COUNTER_WRAPAROUND = "WRAPAROUND"; + parameter DATA_RATE = "SDR"; + parameter DELAY_SRC = "IO"; + parameter integer IDELAY2_VALUE = 0; + parameter IDELAY_MODE = "NORMAL"; + parameter IDELAY_TYPE = "DEFAULT"; + parameter integer IDELAY_VALUE = 0; + parameter integer ODELAY_VALUE = 0; + parameter SERDES_MODE = "NONE"; + parameter integer SIM_TAPDELAY_VALUE = 75; + output BUSY; + output DATAOUT2; + output DATAOUT; + output DOUT; + output TOUT; + input CAL; + input CE; + (* clkbuf_sink *) + input CLK; + input IDATAIN; + input INC; + (* clkbuf_sink *) + input IOCLK0; + (* clkbuf_sink *) + input IOCLK1; + input ODATAIN; + input RST; + input T; +endmodule + +module IODRP2 (...); + parameter DATA_RATE = "SDR"; + parameter integer SIM_TAPDELAY_VALUE = 75; + output DATAOUT2; + output DATAOUT; + output DOUT; + output SDO; + output TOUT; + input ADD; + input BKST; + (* clkbuf_sink *) + input CLK; + input CS; + input IDATAIN; + (* clkbuf_sink *) + input IOCLK0; + (* clkbuf_sink *) + input IOCLK1; + input ODATAIN; + input SDI; + input T; +endmodule + +module IODRP2_MCB (...); + parameter DATA_RATE = "SDR"; + parameter integer IDELAY_VALUE = 0; + parameter integer MCB_ADDRESS = 0; + parameter integer ODELAY_VALUE = 0; + parameter SERDES_MODE = "NONE"; + parameter integer SIM_TAPDELAY_VALUE = 75; + output AUXSDO; + output DATAOUT2; + output DATAOUT; + output DOUT; + output DQSOUTN; + output DQSOUTP; + output SDO; + output TOUT; + input ADD; + input AUXSDOIN; + input BKST; + (* clkbuf_sink *) + input CLK; + input CS; + input IDATAIN; + (* clkbuf_sink *) + input IOCLK0; + (* clkbuf_sink *) + input IOCLK1; + input MEMUPDATE; + input ODATAIN; + input SDI; + input T; + input [4:0] AUXADDR; +endmodule + +module ISERDES2 (...); + parameter BITSLIP_ENABLE = "FALSE"; + parameter DATA_RATE = "SDR"; + parameter integer DATA_WIDTH = 1; + parameter INTERFACE_TYPE = "NETWORKING"; + parameter SERDES_MODE = "NONE"; + output CFB0; + output CFB1; + output DFB; + output FABRICOUT; + output INCDEC; + output Q1; + output Q2; + output Q3; + output Q4; + output SHIFTOUT; + output VALID; + input BITSLIP; + input CE0; + (* clkbuf_sink *) + input CLK0; + (* clkbuf_sink *) + input CLK1; + (* clkbuf_sink *) + input CLKDIV; + input D; + input IOCE; + input RST; + input SHIFTIN; +endmodule + +module OSERDES2 (...); + parameter BYPASS_GCLK_FF = "FALSE"; + parameter DATA_RATE_OQ = "DDR"; + parameter DATA_RATE_OT = "DDR"; + parameter integer DATA_WIDTH = 2; + parameter OUTPUT_MODE = "SINGLE_ENDED"; + parameter SERDES_MODE = "NONE"; + parameter integer TRAIN_PATTERN = 0; + output OQ; + output SHIFTOUT1; + output SHIFTOUT2; + output SHIFTOUT3; + output SHIFTOUT4; + output TQ; + (* clkbuf_sink *) + input CLK0; + (* clkbuf_sink *) + input CLK1; + (* clkbuf_sink *) + input CLKDIV; + input D1; + input D2; + input D3; + input D4; + input IOCE; + input OCE; + input RST; + input SHIFTIN1; + input SHIFTIN2; + input SHIFTIN3; + input SHIFTIN4; + input T1; + input T2; + input T3; + input T4; + input TCE; + input TRAIN; +endmodule + +module IBUF_DLY_ADJ (...); + parameter DELAY_OFFSET = "OFF"; + parameter IOSTANDARD = "DEFAULT"; + output O; + (* iopad_external_pin *) + input I; + input [2:0] S; +endmodule + +module IBUF_IBUFDISABLE (...); + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + input I; + input IBUFDISABLE; +endmodule + +module IBUF_INTERMDISABLE (...); + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + input I; + input IBUFDISABLE; + input INTERMDISABLE; +endmodule + +module IBUF_ANALOG (...); + output O; + (* iopad_external_pin *) + input I; +endmodule + +module IBUFE3 (...); + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter USE_IBUFDISABLE = "FALSE"; + parameter integer SIM_INPUT_BUFFER_OFFSET = 0; + output O; + (* iopad_external_pin *) + input I; + input IBUFDISABLE; + input [3:0] OSC; + input OSC_EN; + input VREF; +endmodule + +module IBUFDS (...); + parameter CAPACITANCE = "DONT_CARE"; + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_DELAY_VALUE = "0"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IFD_DELAY_VALUE = "AUTO"; + parameter IOSTANDARD = "DEFAULT"; + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module IBUFDS_DLY_ADJ (...); + parameter DELAY_OFFSET = "OFF"; + parameter DIFF_TERM = "FALSE"; + parameter IOSTANDARD = "DEFAULT"; + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input [2:0] S; +endmodule + +module IBUFDS_IBUFDISABLE (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input IBUFDISABLE; +endmodule + +module IBUFDS_INTERMDISABLE (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input IBUFDISABLE; + input INTERMDISABLE; +endmodule + +module IBUFDS_DIFF_OUT (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + output O; + output OB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module IBUFDS_DIFF_OUT_IBUFDISABLE (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + output OB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input IBUFDISABLE; +endmodule + +module IBUFDS_DIFF_OUT_INTERMDISABLE (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + output OB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input IBUFDISABLE; + input INTERMDISABLE; +endmodule + +module IBUFDSE3 (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter USE_IBUFDISABLE = "FALSE"; + parameter integer SIM_INPUT_BUFFER_OFFSET = 0; + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input IBUFDISABLE; + input [3:0] OSC; + input [1:0] OSC_EN; +endmodule + +module IBUFDS_DPHY (...); + parameter DIFF_TERM = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + output HSRX_O; + output LPRX_O_N; + output LPRX_O_P; + input HSRX_DISABLE; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; + input LPRX_DISABLE; +endmodule + +module IBUFGDS (...); + parameter CAPACITANCE = "DONT_CARE"; + parameter DIFF_TERM = "FALSE"; + parameter IBUF_DELAY_VALUE = "0"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module IBUFGDS_DIFF_OUT (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + output O; + output OB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module IOBUF_DCIEN (...); + parameter integer DRIVE = 12; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter SLEW = "SLOW"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + inout IO; + input DCITERMDISABLE; + input I; + input IBUFDISABLE; + input T; +endmodule + +module IOBUF_INTERMDISABLE (...); + parameter integer DRIVE = 12; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter SLEW = "SLOW"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + inout IO; + input I; + input IBUFDISABLE; + input INTERMDISABLE; + input T; +endmodule + +module IOBUFE3 (...); + parameter integer DRIVE = 12; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter USE_IBUFDISABLE = "FALSE"; + parameter integer SIM_INPUT_BUFFER_OFFSET = 0; + output O; + (* iopad_external_pin *) + inout IO; + input DCITERMDISABLE; + input I; + input IBUFDISABLE; + input [3:0] OSC; + input OSC_EN; + input T; + input VREF; +endmodule + +module IOBUFDS (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SLEW = "SLOW"; + output O; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input I; + input T; +endmodule + +module IOBUFDS_DCIEN (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter SLEW = "SLOW"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input DCITERMDISABLE; + input I; + input IBUFDISABLE; + input T; +endmodule + +module IOBUFDS_INTERMDISABLE (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter SLEW = "SLOW"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input I; + input IBUFDISABLE; + input INTERMDISABLE; + input T; +endmodule + +module IOBUFDS_DIFF_OUT (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + output O; + output OB; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input I; + input TM; + input TS; +endmodule + +module IOBUFDS_DIFF_OUT_DCIEN (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + output OB; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input DCITERMDISABLE; + input I; + input IBUFDISABLE; + input TM; + input TS; +endmodule + +module IOBUFDS_DIFF_OUT_INTERMDISABLE (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SIM_DEVICE = "7SERIES"; + parameter USE_IBUFDISABLE = "TRUE"; + output O; + output OB; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input I; + input IBUFDISABLE; + input INTERMDISABLE; + input TM; + input TS; +endmodule + +module IOBUFDSE3 (...); + parameter DIFF_TERM = "FALSE"; + parameter DQS_BIAS = "FALSE"; + parameter IBUF_LOW_PWR = "TRUE"; + parameter IOSTANDARD = "DEFAULT"; + parameter integer SIM_INPUT_BUFFER_OFFSET = 0; + parameter USE_IBUFDISABLE = "FALSE"; + output O; + (* iopad_external_pin *) + inout IO; + (* iopad_external_pin *) + inout IOB; + input DCITERMDISABLE; + input I; + input IBUFDISABLE; + input [3:0] OSC; + input [1:0] OSC_EN; + input T; +endmodule + +module OBUFDS (...); + parameter CAPACITANCE = "DONT_CARE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SLEW = "SLOW"; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input I; +endmodule + +module OBUFDS_DPHY (...); + parameter IOSTANDARD = "DEFAULT"; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input HSTX_I; + input HSTX_T; + input LPTX_I_N; + input LPTX_I_P; + input LPTX_T; +endmodule + +module OBUFTDS (...); + parameter CAPACITANCE = "DONT_CARE"; + parameter IOSTANDARD = "DEFAULT"; + parameter SLEW = "SLOW"; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input I; + input T; +endmodule + +module KEEPER (...); + inout O; +endmodule + +module PULLDOWN (...); + output O; +endmodule + +module PULLUP (...); + output O; +endmodule + +(* keep *) +module DCIRESET (...); + output LOCKED; + input RST; +endmodule + +(* keep *) +module HPIO_VREF (...); + parameter VREF_CNTR = "OFF"; + output VREF; + input [6:0] FABRIC_VREF_TUNE; +endmodule + +module BUFGCE (...); + parameter CE_TYPE = "SYNC"; + parameter [0:0] IS_CE_INVERTED = 1'b0; + parameter [0:0] IS_I_INVERTED = 1'b0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter STARTUP_SYNC = "FALSE"; + (* clkbuf_driver *) + output O; + (* invertible_pin = "IS_CE_INVERTED" *) + input CE; + (* invertible_pin = "IS_I_INVERTED" *) + input I; +endmodule + +module BUFGCE_1 (...); + (* clkbuf_driver *) + output O; + input CE; + input I; +endmodule + +module BUFGMUX (...); + parameter CLK_SEL_TYPE = "SYNC"; + (* clkbuf_driver *) + output O; + input I0; + input I1; + input S; +endmodule + +module BUFGMUX_1 (...); + parameter CLK_SEL_TYPE = "SYNC"; + (* clkbuf_driver *) + output O; + input I0; + input I1; + input S; +endmodule + +module BUFGMUX_CTRL (...); + (* clkbuf_driver *) + output O; + input I0; + input I1; + input S; +endmodule + +module BUFGMUX_VIRTEX4 (...); + (* clkbuf_driver *) + output O; + input I0; + input I1; + input S; +endmodule + +module BUFG_GT (...); + parameter SIM_DEVICE = "ULTRASCALE"; + parameter STARTUP_SYNC = "FALSE"; + (* clkbuf_driver *) + output O; + input CE; + input CEMASK; + input CLR; + input CLRMASK; + input [2:0] DIV; + input I; +endmodule + +module BUFG_GT_SYNC (...); + output CESYNC; + output CLRSYNC; + input CE; + input CLK; + input CLR; +endmodule + +module BUFG_PS (...); + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter STARTUP_SYNC = "FALSE"; + (* clkbuf_driver *) + output O; + input I; +endmodule + +module BUFGCE_DIV (...); + parameter integer BUFGCE_DIVIDE = 1; + parameter CE_TYPE = "SYNC"; + parameter HARDSYNC_CLR = "FALSE"; + parameter [0:0] IS_CE_INVERTED = 1'b0; + parameter [0:0] IS_CLR_INVERTED = 1'b0; + parameter [0:0] IS_I_INVERTED = 1'b0; + parameter SIM_DEVICE = "ULTRASCALE"; + parameter STARTUP_SYNC = "FALSE"; + (* clkbuf_driver *) + output O; + (* invertible_pin = "IS_CE_INVERTED" *) + input CE; + (* invertible_pin = "IS_CLR_INVERTED" *) + input CLR; + (* invertible_pin = "IS_I_INVERTED" *) + input I; +endmodule + +module BUFH (...); + (* clkbuf_driver *) + output O; + input I; +endmodule + +module BUFIO2 (...); + parameter DIVIDE_BYPASS = "TRUE"; + parameter integer DIVIDE = 1; + parameter I_INVERT = "FALSE"; + parameter USE_DOUBLER = "FALSE"; + (* clkbuf_driver *) + output DIVCLK; + (* clkbuf_driver *) + output IOCLK; + output SERDESSTROBE; + input I; +endmodule + +module BUFIO2_2CLK (...); + parameter integer DIVIDE = 2; + (* clkbuf_driver *) + output DIVCLK; + (* clkbuf_driver *) + output IOCLK; + output SERDESSTROBE; + input I; + input IB; +endmodule + +module BUFIO2FB (...); + parameter DIVIDE_BYPASS = "TRUE"; + (* clkbuf_driver *) + output O; + input I; +endmodule + +module BUFPLL (...); + parameter integer DIVIDE = 1; + parameter ENABLE_SYNC = "TRUE"; + (* clkbuf_driver *) + output IOCLK; + output LOCK; + output SERDESSTROBE; + input GCLK; + input LOCKED; + input PLLIN; +endmodule + +module BUFPLL_MCB (...); + parameter integer DIVIDE = 2; + parameter LOCK_SRC = "LOCK_TO_0"; + (* clkbuf_driver *) + output IOCLK0; + (* clkbuf_driver *) + output IOCLK1; + output LOCK; + output SERDESSTROBE0; + output SERDESSTROBE1; + input GCLK; + input LOCKED; + input PLLIN0; + input PLLIN1; +endmodule + +module BUFIO (...); + (* clkbuf_driver *) + output O; + input I; +endmodule + +module BUFIODQS (...); + parameter DQSMASK_ENABLE = "FALSE"; + (* clkbuf_driver *) + output O; + input DQSMASK; + input I; +endmodule + +module BUFR (...); + parameter BUFR_DIVIDE = "BYPASS"; + parameter SIM_DEVICE = "7SERIES"; + (* clkbuf_driver *) + output O; + input CE; + input CLR; + input I; +endmodule + +module BUFMR (...); + (* clkbuf_driver *) + output O; + input I; +endmodule + +module BUFMRCE (...); + parameter CE_TYPE = "SYNC"; + parameter integer INIT_OUT = 0; + parameter [0:0] IS_CE_INVERTED = 1'b0; + (* clkbuf_driver *) + output O; + (* invertible_pin = "IS_CE_INVERTED" *) + input CE; + input I; +endmodule + +module DCM (...); + parameter real CLKDV_DIVIDE = 2.0; + parameter integer CLKFX_DIVIDE = 1; + parameter integer CLKFX_MULTIPLY = 4; + parameter CLKIN_DIVIDE_BY_2 = "FALSE"; + parameter real CLKIN_PERIOD = 10.0; + parameter CLKOUT_PHASE_SHIFT = "NONE"; + parameter CLK_FEEDBACK = "1X"; + parameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + parameter DFS_FREQUENCY_MODE = "LOW"; + parameter DLL_FREQUENCY_MODE = "LOW"; + parameter DSS_MODE = "NONE"; + parameter DUTY_CYCLE_CORRECTION = "TRUE"; + parameter [15:0] FACTORY_JF = 16'hC080; + parameter integer PHASE_SHIFT = 0; + parameter SIM_MODE = "SAFE"; + parameter STARTUP_WAIT = "FALSE"; + input CLKFB; + input CLKIN; + input DSSEN; + input PSCLK; + input PSEN; + input PSINCDEC; + input RST; + output CLK0; + output CLK180; + output CLK270; + output CLK2X; + output CLK2X180; + output CLK90; + output CLKDV; + output CLKFX; + output CLKFX180; + output LOCKED; + output PSDONE; + output [7:0] STATUS; +endmodule + +module DCM_SP (...); + parameter real CLKDV_DIVIDE = 2.0; + parameter integer CLKFX_DIVIDE = 1; + parameter integer CLKFX_MULTIPLY = 4; + parameter CLKIN_DIVIDE_BY_2 = "FALSE"; + parameter real CLKIN_PERIOD = 10.0; + parameter CLKOUT_PHASE_SHIFT = "NONE"; + parameter CLK_FEEDBACK = "1X"; + parameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + parameter DFS_FREQUENCY_MODE = "LOW"; + parameter DLL_FREQUENCY_MODE = "LOW"; + parameter DSS_MODE = "NONE"; + parameter DUTY_CYCLE_CORRECTION = "TRUE"; + parameter FACTORY_JF = 16'hC080; + parameter integer PHASE_SHIFT = 0; + parameter STARTUP_WAIT = "FALSE"; + input CLKFB; + input CLKIN; + input DSSEN; + input PSCLK; + input PSEN; + input PSINCDEC; + input RST; + output CLK0; + output CLK180; + output CLK270; + output CLK2X; + output CLK2X180; + output CLK90; + output CLKDV; + output CLKFX; + output CLKFX180; + output LOCKED; + output PSDONE; + output [7:0] STATUS; +endmodule + +module DCM_CLKGEN (...); + parameter SPREAD_SPECTRUM = "NONE"; + parameter STARTUP_WAIT = "FALSE"; + parameter integer CLKFXDV_DIVIDE = 2; + parameter integer CLKFX_DIVIDE = 1; + parameter integer CLKFX_MULTIPLY = 4; + parameter real CLKFX_MD_MAX = 0.0; + parameter real CLKIN_PERIOD = 0.0; + output CLKFX180; + output CLKFX; + output CLKFXDV; + output LOCKED; + output PROGDONE; + output [2:1] STATUS; + input CLKIN; + input FREEZEDCM; + input PROGCLK; + input PROGDATA; + input PROGEN; + input RST; +endmodule + +module DCM_ADV (...); + parameter real CLKDV_DIVIDE = 2.0; + parameter integer CLKFX_DIVIDE = 1; + parameter integer CLKFX_MULTIPLY = 4; + parameter CLKIN_DIVIDE_BY_2 = "FALSE"; + parameter real CLKIN_PERIOD = 10.0; + parameter CLKOUT_PHASE_SHIFT = "NONE"; + parameter CLK_FEEDBACK = "1X"; + parameter DCM_AUTOCALIBRATION = "TRUE"; + parameter DCM_PERFORMANCE_MODE = "MAX_SPEED"; + parameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + parameter DFS_FREQUENCY_MODE = "LOW"; + parameter DLL_FREQUENCY_MODE = "LOW"; + parameter DUTY_CYCLE_CORRECTION = "TRUE"; + parameter FACTORY_JF = 16'hF0F0; + parameter integer PHASE_SHIFT = 0; + parameter SIM_DEVICE ="VIRTEX4"; + parameter STARTUP_WAIT = "FALSE"; + output CLK0; + output CLK180; + output CLK270; + output CLK2X180; + output CLK2X; + output CLK90; + output CLKDV; + output CLKFX180; + output CLKFX; + output DRDY; + output LOCKED; + output PSDONE; + output [15:0] DO; + input CLKFB; + input CLKIN; + input DCLK; + input DEN; + input DWE; + input PSCLK; + input PSEN; + input PSINCDEC; + input RST; + input [15:0] DI; + input [6:0] DADDR; +endmodule + +module DCM_BASE (...); + parameter real CLKDV_DIVIDE = 2.0; + parameter integer CLKFX_DIVIDE = 1; + parameter integer CLKFX_MULTIPLY = 4; + parameter CLKIN_DIVIDE_BY_2 = "FALSE"; + parameter real CLKIN_PERIOD = 10.0; + parameter CLKOUT_PHASE_SHIFT = "NONE"; + parameter CLK_FEEDBACK = "1X"; + parameter DCM_AUTOCALIBRATION = "TRUE"; + parameter DCM_PERFORMANCE_MODE = "MAX_SPEED"; + parameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + parameter DFS_FREQUENCY_MODE = "LOW"; + parameter DLL_FREQUENCY_MODE = "LOW"; + parameter DUTY_CYCLE_CORRECTION = "TRUE"; + parameter [15:0] FACTORY_JF = 16'hF0F0; + parameter integer PHASE_SHIFT = 0; + parameter STARTUP_WAIT = "FALSE"; + output CLK0; + output CLK180; + output CLK270; + output CLK2X180; + output CLK2X; + output CLK90; + output CLKDV; + output CLKFX180; + output CLKFX; + output LOCKED; + input CLKFB; + input CLKIN; + input RST; +endmodule + +module DCM_PS (...); + parameter real CLKDV_DIVIDE = 2.0; + parameter integer CLKFX_DIVIDE = 1; + parameter integer CLKFX_MULTIPLY = 4; + parameter CLKIN_DIVIDE_BY_2 = "FALSE"; + parameter real CLKIN_PERIOD = 10.0; + parameter CLKOUT_PHASE_SHIFT = "NONE"; + parameter CLK_FEEDBACK = "1X"; + parameter DCM_AUTOCALIBRATION = "TRUE"; + parameter DCM_PERFORMANCE_MODE = "MAX_SPEED"; + parameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + parameter DFS_FREQUENCY_MODE = "LOW"; + parameter DLL_FREQUENCY_MODE = "LOW"; + parameter DUTY_CYCLE_CORRECTION = "TRUE"; + parameter [15:0] FACTORY_JF = 16'hF0F0; + parameter integer PHASE_SHIFT = 0; + parameter STARTUP_WAIT = "FALSE"; + output CLK0; + output CLK180; + output CLK270; + output CLK2X180; + output CLK2X; + output CLK90; + output CLKDV; + output CLKFX180; + output CLKFX; + output LOCKED; + output PSDONE; + output [15:0] DO; + input CLKFB; + input CLKIN; + input PSCLK; + input PSEN; + input PSINCDEC; + input RST; +endmodule + +module PMCD (...); + parameter EN_REL = "FALSE"; + parameter RST_DEASSERT_CLK = "CLKA"; + output CLKA1; + output CLKA1D2; + output CLKA1D4; + output CLKA1D8; + output CLKB1; + output CLKC1; + output CLKD1; + input CLKA; + input CLKB; + input CLKC; + input CLKD; + input REL; + input RST; +endmodule + +module PLL_ADV (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter CLK_FEEDBACK = "CLKFBOUT"; + parameter CLKFBOUT_DESKEW_ADJUST = "NONE"; + parameter CLKOUT0_DESKEW_ADJUST = "NONE"; + parameter CLKOUT1_DESKEW_ADJUST = "NONE"; + parameter CLKOUT2_DESKEW_ADJUST = "NONE"; + parameter CLKOUT3_DESKEW_ADJUST = "NONE"; + parameter CLKOUT4_DESKEW_ADJUST = "NONE"; + parameter CLKOUT5_DESKEW_ADJUST = "NONE"; + parameter integer CLKFBOUT_MULT = 1; + parameter real CLKFBOUT_PHASE = 0.0; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKIN2_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.5; + parameter real CLKOUT0_PHASE = 0.0; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.5; + parameter real CLKOUT1_PHASE = 0.0; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.5; + parameter real CLKOUT2_PHASE = 0.0; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.5; + parameter real CLKOUT3_PHASE = 0.0; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.5; + parameter real CLKOUT4_PHASE = 0.0; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.5; + parameter real CLKOUT5_PHASE = 0.0; + parameter COMPENSATION = "SYSTEM_SYNCHRONOUS"; + parameter integer DIVCLK_DIVIDE = 1; + parameter EN_REL = "FALSE"; + parameter PLL_PMCD_MODE = "FALSE"; + parameter real REF_JITTER = 0.100; + parameter RESET_ON_LOSS_OF_LOCK = "FALSE"; + parameter RST_DEASSERT_CLK = "CLKIN1"; + parameter SIM_DEVICE = "VIRTEX5"; + parameter real VCOCLK_FREQ_MAX = 1440.0; + parameter real VCOCLK_FREQ_MIN = 400.0; + parameter real CLKIN_FREQ_MAX = 710.0; + parameter real CLKIN_FREQ_MIN = 19.0; + parameter real CLKPFD_FREQ_MAX = 550.0; + parameter real CLKPFD_FREQ_MIN = 19.0; + output CLKFBDCM; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT1; + output CLKOUT2; + output CLKOUT3; + output CLKOUT4; + output CLKOUT5; + output CLKOUTDCM0; + output CLKOUTDCM1; + output CLKOUTDCM2; + output CLKOUTDCM3; + output CLKOUTDCM4; + output CLKOUTDCM5; + output DRDY; + output LOCKED; + output [15:0] DO; + input CLKFBIN; + input CLKIN1; + input CLKIN2; + input CLKINSEL; + input DCLK; + input DEN; + input DWE; + input REL; + input RST; + input [15:0] DI; + input [4:0] DADDR; +endmodule + +module PLL_BASE (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter integer CLKFBOUT_MULT = 1; + parameter real CLKFBOUT_PHASE = 0.0; + parameter real CLKIN_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.5; + parameter real CLKOUT0_PHASE = 0.0; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.5; + parameter real CLKOUT1_PHASE = 0.0; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.5; + parameter real CLKOUT2_PHASE = 0.0; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.5; + parameter real CLKOUT3_PHASE = 0.0; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.5; + parameter real CLKOUT4_PHASE = 0.0; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.5; + parameter real CLKOUT5_PHASE = 0.0; + parameter CLK_FEEDBACK = "CLKFBOUT"; + parameter COMPENSATION = "SYSTEM_SYNCHRONOUS"; + parameter integer DIVCLK_DIVIDE = 1; + parameter real REF_JITTER = 0.100; + parameter RESET_ON_LOSS_OF_LOCK = "FALSE"; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT1; + output CLKOUT2; + output CLKOUT3; + output CLKOUT4; + output CLKOUT5; + output LOCKED; + input CLKFBIN; + input CLKIN; + input RST; +endmodule + +module MMCM_ADV (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter CLKFBOUT_USE_FINE_PS = "FALSE"; + parameter CLKOUT0_USE_FINE_PS = "FALSE"; + parameter CLKOUT1_USE_FINE_PS = "FALSE"; + parameter CLKOUT2_USE_FINE_PS = "FALSE"; + parameter CLKOUT3_USE_FINE_PS = "FALSE"; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter CLKOUT4_USE_FINE_PS = "FALSE"; + parameter CLKOUT5_USE_FINE_PS = "FALSE"; + parameter CLKOUT6_USE_FINE_PS = "FALSE"; + parameter CLOCK_HOLD = "FALSE"; + parameter COMPENSATION = "ZHOLD"; + parameter STARTUP_WAIT = "FALSE"; + parameter integer CLKOUT1_DIVIDE = 1; + parameter integer CLKOUT2_DIVIDE = 1; + parameter integer CLKOUT3_DIVIDE = 1; + parameter integer CLKOUT4_DIVIDE = 1; + parameter integer CLKOUT5_DIVIDE = 1; + parameter integer CLKOUT6_DIVIDE = 1; + parameter integer DIVCLK_DIVIDE = 1; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKIN2_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter real REF_JITTER1 = 0.010; + parameter real REF_JITTER2 = 0.010; + parameter real VCOCLK_FREQ_MAX = 1600.0; + parameter real VCOCLK_FREQ_MIN = 600.0; + parameter real CLKIN_FREQ_MAX = 800.0; + parameter real CLKIN_FREQ_MIN = 10.0; + parameter real CLKPFD_FREQ_MAX = 550.0; + parameter real CLKPFD_FREQ_MIN = 10.0; + output CLKFBOUT; + output CLKFBOUTB; + output CLKFBSTOPPED; + output CLKINSTOPPED; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output DRDY; + output LOCKED; + output PSDONE; + output [15:0] DO; + input CLKFBIN; + input CLKIN1; + input CLKIN2; + input CLKINSEL; + input DCLK; + input DEN; + input DWE; + input PSCLK; + input PSEN; + input PSINCDEC; + input PWRDWN; + input RST; + input [15:0] DI; + input [6:0] DADDR; +endmodule + +module MMCM_BASE (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter CLOCK_HOLD = "FALSE"; + parameter integer DIVCLK_DIVIDE = 1; + parameter real REF_JITTER1 = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKFBOUTB; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output LOCKED; + input CLKFBIN; + input CLKIN1; + input PWRDWN; + input RST; +endmodule + +module MMCME2_ADV (...); + parameter real CLKIN_FREQ_MAX = 1066.000; + parameter real CLKIN_FREQ_MIN = 10.000; + parameter real CLKPFD_FREQ_MAX = 550.000; + parameter real CLKPFD_FREQ_MIN = 10.000; + parameter real VCOCLK_FREQ_MAX = 1600.000; + parameter real VCOCLK_FREQ_MIN = 600.000; + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter CLKFBOUT_USE_FINE_PS = "FALSE"; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKIN2_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter CLKOUT0_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUT1_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter CLKOUT2_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT3_USE_FINE_PS = "FALSE"; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter CLKOUT4_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter CLKOUT5_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter CLKOUT6_USE_FINE_PS = "FALSE"; + parameter COMPENSATION = "ZHOLD"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0; + parameter [0:0] IS_PSEN_INVERTED = 1'b0; + parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER1 = 0.010; + parameter real REF_JITTER2 = 0.010; + parameter SS_EN = "FALSE"; + parameter SS_MODE = "CENTER_HIGH"; + parameter integer SS_MOD_PERIOD = 10000; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKFBOUTB; + output CLKFBSTOPPED; + output CLKINSTOPPED; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output [15:0] DO; + output DRDY; + output LOCKED; + output PSDONE; + input CLKFBIN; + input CLKIN1; + input CLKIN2; + (* invertible_pin = "IS_CLKINSEL_INVERTED" *) + input CLKINSEL; + input [6:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input PSCLK; + (* invertible_pin = "IS_PSEN_INVERTED" *) + input PSEN; + (* invertible_pin = "IS_PSINCDEC_INVERTED" *) + input PSINCDEC; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module MMCME2_BASE (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter integer DIVCLK_DIVIDE = 1; + parameter real REF_JITTER1 = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKFBOUTB; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output LOCKED; + input CLKFBIN; + input CLKIN1; + input PWRDWN; + input RST; +endmodule + +module PLLE2_ADV (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter COMPENSATION = "ZHOLD"; + parameter STARTUP_WAIT = "FALSE"; + parameter integer CLKOUT0_DIVIDE = 1; + parameter integer CLKOUT1_DIVIDE = 1; + parameter integer CLKOUT2_DIVIDE = 1; + parameter integer CLKOUT3_DIVIDE = 1; + parameter integer CLKOUT4_DIVIDE = 1; + parameter integer CLKOUT5_DIVIDE = 1; + parameter integer DIVCLK_DIVIDE = 1; + parameter integer CLKFBOUT_MULT = 5; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKIN2_PERIOD = 0.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER1 = 0.010; + parameter real REF_JITTER2 = 0.010; + parameter real VCOCLK_FREQ_MAX = 2133.000; + parameter real VCOCLK_FREQ_MIN = 800.000; + parameter real CLKIN_FREQ_MAX = 1066.000; + parameter real CLKIN_FREQ_MIN = 19.000; + parameter real CLKPFD_FREQ_MAX = 550.0; + parameter real CLKPFD_FREQ_MIN = 19.0; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT1; + output CLKOUT2; + output CLKOUT3; + output CLKOUT4; + output CLKOUT5; + output DRDY; + output LOCKED; + output [15:0] DO; + input CLKFBIN; + input CLKIN1; + input CLKIN2; + (* invertible_pin = "IS_CLKINSEL_INVERTED" *) + input CLKINSEL; + input DCLK; + input DEN; + input DWE; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; + input [15:0] DI; + input [6:0] DADDR; +endmodule + +module PLLE2_BASE (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter integer CLKFBOUT_MULT = 5; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter integer DIVCLK_DIVIDE = 1; + parameter real REF_JITTER1 = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT1; + output CLKOUT2; + output CLKOUT3; + output CLKOUT4; + output CLKOUT5; + output LOCKED; + input CLKFBIN; + input CLKIN1; + input PWRDWN; + input RST; +endmodule + +module MMCME3_ADV (...); + parameter real CLKIN_FREQ_MAX = 1066.000; + parameter real CLKIN_FREQ_MIN = 10.000; + parameter real CLKPFD_FREQ_MAX = 550.000; + parameter real CLKPFD_FREQ_MIN = 10.000; + parameter real VCOCLK_FREQ_MAX = 1600.000; + parameter real VCOCLK_FREQ_MIN = 600.000; + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter CLKFBOUT_USE_FINE_PS = "FALSE"; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKIN2_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter CLKOUT0_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUT1_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter CLKOUT2_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT3_USE_FINE_PS = "FALSE"; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter CLKOUT4_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter CLKOUT5_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter CLKOUT6_USE_FINE_PS = "FALSE"; + parameter COMPENSATION = "AUTO"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN1_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN2_INVERTED = 1'b0; + parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0; + parameter [0:0] IS_PSEN_INVERTED = 1'b0; + parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER1 = 0.010; + parameter real REF_JITTER2 = 0.010; + parameter SS_EN = "FALSE"; + parameter SS_MODE = "CENTER_HIGH"; + parameter integer SS_MOD_PERIOD = 10000; + parameter STARTUP_WAIT = "FALSE"; + output CDDCDONE; + output CLKFBOUT; + output CLKFBOUTB; + output CLKFBSTOPPED; + output CLKINSTOPPED; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output [15:0] DO; + output DRDY; + output LOCKED; + output PSDONE; + input CDDCREQ; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN1_INVERTED" *) + input CLKIN1; + (* invertible_pin = "IS_CLKIN2_INVERTED" *) + input CLKIN2; + (* invertible_pin = "IS_CLKINSEL_INVERTED" *) + input CLKINSEL; + input [6:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input PSCLK; + (* invertible_pin = "IS_PSEN_INVERTED" *) + input PSEN; + (* invertible_pin = "IS_PSINCDEC_INVERTED" *) + input PSINCDEC; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module MMCME3_BASE (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN1_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER1 = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKFBOUTB; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output LOCKED; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN1_INVERTED" *) + input CLKIN1; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module PLLE3_ADV (...); + parameter real CLKIN_FREQ_MAX = 1066.000; + parameter real CLKIN_FREQ_MIN = 70.000; + parameter real CLKPFD_FREQ_MAX = 667.500; + parameter real CLKPFD_FREQ_MIN = 70.000; + parameter real VCOCLK_FREQ_MAX = 1335.000; + parameter real VCOCLK_FREQ_MIN = 600.000; + parameter integer CLKFBOUT_MULT = 5; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUTPHY_MODE = "VCO_2X"; + parameter COMPENSATION = "AUTO"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUTPHY; + output [15:0] DO; + output DRDY; + output LOCKED; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN_INVERTED" *) + input CLKIN; + input CLKOUTPHYEN; + input [6:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module PLLE3_BASE (...); + parameter integer CLKFBOUT_MULT = 5; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUTPHY_MODE = "VCO_2X"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUTPHY; + output LOCKED; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN_INVERTED" *) + input CLKIN; + input CLKOUTPHYEN; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module MMCME4_ADV (...); + parameter real CLKIN_FREQ_MAX = 1066.000; + parameter real CLKIN_FREQ_MIN = 10.000; + parameter real CLKPFD_FREQ_MAX = 550.000; + parameter real CLKPFD_FREQ_MIN = 10.000; + parameter real VCOCLK_FREQ_MAX = 1600.000; + parameter real VCOCLK_FREQ_MIN = 800.000; + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter CLKFBOUT_USE_FINE_PS = "FALSE"; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKIN2_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter CLKOUT0_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUT1_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter CLKOUT2_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT3_USE_FINE_PS = "FALSE"; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter CLKOUT4_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter CLKOUT5_USE_FINE_PS = "FALSE"; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter CLKOUT6_USE_FINE_PS = "FALSE"; + parameter COMPENSATION = "AUTO"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN1_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN2_INVERTED = 1'b0; + parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0; + parameter [0:0] IS_PSEN_INVERTED = 1'b0; + parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER1 = 0.010; + parameter real REF_JITTER2 = 0.010; + parameter SS_EN = "FALSE"; + parameter SS_MODE = "CENTER_HIGH"; + parameter integer SS_MOD_PERIOD = 10000; + parameter STARTUP_WAIT = "FALSE"; + output CDDCDONE; + output CLKFBOUT; + output CLKFBOUTB; + output CLKFBSTOPPED; + output CLKINSTOPPED; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output [15:0] DO; + output DRDY; + output LOCKED; + output PSDONE; + input CDDCREQ; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN1_INVERTED" *) + input CLKIN1; + (* invertible_pin = "IS_CLKIN2_INVERTED" *) + input CLKIN2; + (* invertible_pin = "IS_CLKINSEL_INVERTED" *) + input CLKINSEL; + input [6:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input PSCLK; + (* invertible_pin = "IS_PSEN_INVERTED" *) + input PSEN; + (* invertible_pin = "IS_PSINCDEC_INVERTED" *) + input PSINCDEC; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module MMCME4_BASE (...); + parameter BANDWIDTH = "OPTIMIZED"; + parameter real CLKFBOUT_MULT_F = 5.000; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN1_PERIOD = 0.000; + parameter real CLKOUT0_DIVIDE_F = 1.000; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter integer CLKOUT2_DIVIDE = 1; + parameter real CLKOUT2_DUTY_CYCLE = 0.500; + parameter real CLKOUT2_PHASE = 0.000; + parameter integer CLKOUT3_DIVIDE = 1; + parameter real CLKOUT3_DUTY_CYCLE = 0.500; + parameter real CLKOUT3_PHASE = 0.000; + parameter CLKOUT4_CASCADE = "FALSE"; + parameter integer CLKOUT4_DIVIDE = 1; + parameter real CLKOUT4_DUTY_CYCLE = 0.500; + parameter real CLKOUT4_PHASE = 0.000; + parameter integer CLKOUT5_DIVIDE = 1; + parameter real CLKOUT5_DUTY_CYCLE = 0.500; + parameter real CLKOUT5_PHASE = 0.000; + parameter integer CLKOUT6_DIVIDE = 1; + parameter real CLKOUT6_DUTY_CYCLE = 0.500; + parameter real CLKOUT6_PHASE = 0.000; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN1_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER1 = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKFBOUTB; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUT2; + output CLKOUT2B; + output CLKOUT3; + output CLKOUT3B; + output CLKOUT4; + output CLKOUT5; + output CLKOUT6; + output LOCKED; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN1_INVERTED" *) + input CLKIN1; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module PLLE4_ADV (...); + parameter real CLKIN_FREQ_MAX = 1066.000; + parameter real CLKIN_FREQ_MIN = 70.000; + parameter real CLKPFD_FREQ_MAX = 667.500; + parameter real CLKPFD_FREQ_MIN = 70.000; + parameter real VCOCLK_FREQ_MAX = 1500.000; + parameter real VCOCLK_FREQ_MIN = 750.000; + parameter integer CLKFBOUT_MULT = 5; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUTPHY_MODE = "VCO_2X"; + parameter COMPENSATION = "AUTO"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUTPHY; + output [15:0] DO; + output DRDY; + output LOCKED; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN_INVERTED" *) + input CLKIN; + input CLKOUTPHYEN; + input [6:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module PLLE4_BASE (...); + parameter integer CLKFBOUT_MULT = 5; + parameter real CLKFBOUT_PHASE = 0.000; + parameter real CLKIN_PERIOD = 0.000; + parameter integer CLKOUT0_DIVIDE = 1; + parameter real CLKOUT0_DUTY_CYCLE = 0.500; + parameter real CLKOUT0_PHASE = 0.000; + parameter integer CLKOUT1_DIVIDE = 1; + parameter real CLKOUT1_DUTY_CYCLE = 0.500; + parameter real CLKOUT1_PHASE = 0.000; + parameter CLKOUTPHY_MODE = "VCO_2X"; + parameter integer DIVCLK_DIVIDE = 1; + parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0; + parameter [0:0] IS_CLKIN_INVERTED = 1'b0; + parameter [0:0] IS_PWRDWN_INVERTED = 1'b0; + parameter [0:0] IS_RST_INVERTED = 1'b0; + parameter real REF_JITTER = 0.010; + parameter STARTUP_WAIT = "FALSE"; + output CLKFBOUT; + output CLKOUT0; + output CLKOUT0B; + output CLKOUT1; + output CLKOUT1B; + output CLKOUTPHY; + output LOCKED; + (* invertible_pin = "IS_CLKFBIN_INVERTED" *) + input CLKFBIN; + (* invertible_pin = "IS_CLKIN_INVERTED" *) + input CLKIN; + input CLKOUTPHYEN; + (* invertible_pin = "IS_PWRDWN_INVERTED" *) + input PWRDWN; + (* invertible_pin = "IS_RST_INVERTED" *) + input RST; +endmodule + +module BUFT (...); + output O; + input I; + input T; +endmodule + +module IN_FIFO (...); + parameter integer ALMOST_EMPTY_VALUE = 1; + parameter integer ALMOST_FULL_VALUE = 1; + parameter ARRAY_MODE = "ARRAY_MODE_4_X_8"; + parameter SYNCHRONOUS_MODE = "FALSE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output EMPTY; + output FULL; + output [7:0] Q0; + output [7:0] Q1; + output [7:0] Q2; + output [7:0] Q3; + output [7:0] Q4; + output [7:0] Q5; + output [7:0] Q6; + output [7:0] Q7; + output [7:0] Q8; + output [7:0] Q9; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RESET; + (* clkbuf_sink *) + input WRCLK; + input WREN; + input [3:0] D0; + input [3:0] D1; + input [3:0] D2; + input [3:0] D3; + input [3:0] D4; + input [3:0] D7; + input [3:0] D8; + input [3:0] D9; + input [7:0] D5; + input [7:0] D6; +endmodule + +module OUT_FIFO (...); + parameter integer ALMOST_EMPTY_VALUE = 1; + parameter integer ALMOST_FULL_VALUE = 1; + parameter ARRAY_MODE = "ARRAY_MODE_8_X_4"; + parameter OUTPUT_DISABLE = "FALSE"; + parameter SYNCHRONOUS_MODE = "FALSE"; + output ALMOSTEMPTY; + output ALMOSTFULL; + output EMPTY; + output FULL; + output [3:0] Q0; + output [3:0] Q1; + output [3:0] Q2; + output [3:0] Q3; + output [3:0] Q4; + output [3:0] Q7; + output [3:0] Q8; + output [3:0] Q9; + output [7:0] Q5; + output [7:0] Q6; + (* clkbuf_sink *) + input RDCLK; + input RDEN; + input RESET; + (* clkbuf_sink *) + input WRCLK; + input WREN; + input [7:0] D0; + input [7:0] D1; + input [7:0] D2; + input [7:0] D3; + input [7:0] D4; + input [7:0] D5; + input [7:0] D6; + input [7:0] D7; + input [7:0] D8; + input [7:0] D9; +endmodule + +module HARD_SYNC (...); + parameter [0:0] INIT = 1'b0; + parameter [0:0] IS_CLK_INVERTED = 1'b0; + parameter integer LATENCY = 2; + output DOUT; + (* clkbuf_sink *) + (* invertible_pin = "IS_CLK_INVERTED" *) + input CLK; + input DIN; +endmodule + +(* keep *) +module STARTUP_SPARTAN3 (...); + input CLK; + input GSR; + input GTS; +endmodule + +(* keep *) +module STARTUP_SPARTAN3E (...); + input CLK; + input GSR; + input GTS; + input MBT; +endmodule + +(* keep *) +module STARTUP_SPARTAN3A (...); + input CLK; + input GSR; + input GTS; +endmodule + +(* keep *) +module STARTUP_SPARTAN6 (...); + output CFGCLK; + output CFGMCLK; + output EOS; + input CLK; + input GSR; + input GTS; + input KEYCLEARB; +endmodule + +(* keep *) +module STARTUP_VIRTEX4 (...); + output EOS; + input CLK; + input GSR; + input GTS; + input USRCCLKO; + input USRCCLKTS; + input USRDONEO; + input USRDONETS; +endmodule + +(* keep *) +module STARTUP_VIRTEX5 (...); + output CFGCLK; + output CFGMCLK; + output DINSPI; + output EOS; + output TCKSPI; + input CLK; + input GSR; + input GTS; + input USRCCLKO; + input USRCCLKTS; + input USRDONEO; + input USRDONETS; +endmodule + +(* keep *) +module STARTUP_VIRTEX6 (...); + parameter PROG_USR = "FALSE"; + output CFGCLK; + output CFGMCLK; + output DINSPI; + output EOS; + output PREQ; + output TCKSPI; + input CLK; + input GSR; + input GTS; + input KEYCLEARB; + input PACK; + input USRCCLKO; + input USRCCLKTS; + input USRDONEO; + input USRDONETS; +endmodule + +(* keep *) +module STARTUPE2 (...); + parameter PROG_USR = "FALSE"; + parameter real SIM_CCLK_FREQ = 0.0; + output CFGCLK; + output CFGMCLK; + output EOS; + output PREQ; + input CLK; + input GSR; + input GTS; + input KEYCLEARB; + input PACK; + input USRCCLKO; + input USRCCLKTS; + input USRDONEO; + input USRDONETS; +endmodule + +(* keep *) +module STARTUPE3 (...); + parameter PROG_USR = "FALSE"; + parameter real SIM_CCLK_FREQ = 0.0; + output CFGCLK; + output CFGMCLK; + output [3:0] DI; + output EOS; + output PREQ; + input [3:0] DO; + input [3:0] DTS; + input FCSBO; + input FCSBTS; + input GSR; + input GTS; + input KEYCLEARB; + input PACK; + input USRCCLKO; + input USRCCLKTS; + input USRDONEO; + input USRDONETS; +endmodule + +(* keep *) +module CAPTURE_SPARTAN3 (...); + parameter ONESHOT = "FALSE"; + input CAP; + input CLK; +endmodule + +(* keep *) +module CAPTURE_SPARTAN3A (...); + parameter ONESHOT = "TRUE"; + input CAP; + input CLK; +endmodule + +(* keep *) +module CAPTURE_VIRTEX4 (...); + parameter ONESHOT = "TRUE"; + input CAP; + input CLK; +endmodule + +(* keep *) +module CAPTURE_VIRTEX5 (...); + parameter ONESHOT = "TRUE"; + input CAP; + input CLK; +endmodule + +(* keep *) +module CAPTURE_VIRTEX6 (...); + parameter ONESHOT = "TRUE"; + input CAP; + input CLK; +endmodule + +(* keep *) +module CAPTUREE2 (...); + parameter ONESHOT = "TRUE"; + input CAP; + input CLK; +endmodule + +(* keep *) +module ICAP_SPARTAN3A (...); + output BUSY; + output [7:0] O; + input CE; + input CLK; + input WRITE; + input [7:0] I; +endmodule + +(* keep *) +module ICAP_SPARTAN6 (...); + parameter DEVICE_ID = 32'h04000093; + parameter SIM_CFG_FILE_NAME = "NONE"; + output BUSY; + output [15:0] O; + input CLK; + input CE; + input WRITE; + input [15:0] I; +endmodule + +(* keep *) +module ICAP_VIRTEX4 (...); + parameter ICAP_WIDTH = "X8"; + output BUSY; + output [31:0] O; + input CE; + input CLK; + input WRITE; + input [31:0] I; +endmodule + +(* keep *) +module ICAP_VIRTEX5 (...); + parameter ICAP_WIDTH = "X8"; + output BUSY; + output [31:0] O; + input CE; + input CLK; + input WRITE; + input [31:0] I; +endmodule + +(* keep *) +module ICAP_VIRTEX6 (...); + parameter [31:0] DEVICE_ID = 32'h04244093; + parameter ICAP_WIDTH = "X8"; + parameter SIM_CFG_FILE_NAME = "NONE"; + output BUSY; + output [31:0] O; + input CLK; + input CSB; + input RDWRB; + input [31:0] I; +endmodule + +(* keep *) +module ICAPE2 (...); + parameter [31:0] DEVICE_ID = 32'h04244093; + parameter ICAP_WIDTH = "X32"; + parameter SIM_CFG_FILE_NAME = "NONE"; + output [31:0] O; + input CLK; + input CSIB; + input RDWRB; + input [31:0] I; +endmodule + +(* keep *) +module ICAPE3 (...); + parameter [31:0] DEVICE_ID = 32'h03628093; + parameter ICAP_AUTO_SWITCH = "DISABLE"; + parameter SIM_CFG_FILE_NAME = "NONE"; + output AVAIL; + output [31:0] O; + output PRDONE; + output PRERROR; + input CLK; + input CSIB; + input RDWRB; + input [31:0] I; +endmodule + +(* keep *) +module BSCAN_SPARTAN3 (...); + output CAPTURE; + output DRCK1; + output DRCK2; + output RESET; + output SEL1; + output SEL2; + output SHIFT; + output TDI; + output UPDATE; + input TDO1; + input TDO2; +endmodule + +(* keep *) +module BSCAN_SPARTAN3A (...); + output CAPTURE; + output DRCK1; + output DRCK2; + output RESET; + output SEL1; + output SEL2; + output SHIFT; + output TCK; + output TDI; + output TMS; + output UPDATE; + input TDO1; + input TDO2; +endmodule + +(* keep *) +module BSCAN_SPARTAN6 (...); + parameter integer JTAG_CHAIN = 1; + output CAPTURE; + output DRCK; + output RESET; + output RUNTEST; + output SEL; + output SHIFT; + output TCK; + output TDI; + output TMS; + output UPDATE; + input TDO; +endmodule + +(* keep *) +module BSCAN_VIRTEX4 (...); + parameter integer JTAG_CHAIN = 1; + output CAPTURE; + output DRCK; + output RESET; + output SEL; + output SHIFT; + output TDI; + output UPDATE; + input TDO; +endmodule + +(* keep *) +module BSCAN_VIRTEX5 (...); + parameter integer JTAG_CHAIN = 1; + output CAPTURE; + output DRCK; + output RESET; + output SEL; + output SHIFT; + output TDI; + output UPDATE; + input TDO; +endmodule + +(* keep *) +module BSCAN_VIRTEX6 (...); + parameter DISABLE_JTAG = "FALSE"; + parameter integer JTAG_CHAIN = 1; + output CAPTURE; + output DRCK; + output RESET; + output RUNTEST; + output SEL; + output SHIFT; + output TCK; + output TDI; + output TMS; + output UPDATE; + input TDO; +endmodule + +(* keep *) +module BSCANE2 (...); + parameter DISABLE_JTAG = "FALSE"; + parameter integer JTAG_CHAIN = 1; + output CAPTURE; + output DRCK; + output RESET; + output RUNTEST; + output SEL; + output SHIFT; + output TCK; + output TDI; + output TMS; + output UPDATE; + input TDO; +endmodule + +module DNA_PORT (...); + parameter [56:0] SIM_DNA_VALUE = 57'h0; + output DOUT; + input CLK; + input DIN; + input READ; + input SHIFT; +endmodule + +module DNA_PORTE2 (...); + parameter [95:0] SIM_DNA_VALUE = 96'h000000000000000000000000; + output DOUT; + input CLK; + input DIN; + input READ; + input SHIFT; +endmodule + +module FRAME_ECC_VIRTEX4 (...); + output ERROR; + output [11:0] SYNDROME; + output SYNDROMEVALID; +endmodule + +module FRAME_ECC_VIRTEX5 (...); + output CRCERROR; + output ECCERROR; + output SYNDROMEVALID; + output [11:0] SYNDROME; +endmodule + +module FRAME_ECC_VIRTEX6 (...); + parameter FARSRC = "EFAR"; + parameter FRAME_RBT_IN_FILENAME = "NONE"; + output CRCERROR; + output ECCERROR; + output ECCERRORSINGLE; + output SYNDROMEVALID; + output [12:0] SYNDROME; + output [23:0] FAR; + output [4:0] SYNBIT; + output [6:0] SYNWORD; +endmodule + +module FRAME_ECCE2 (...); + parameter FARSRC = "EFAR"; + parameter FRAME_RBT_IN_FILENAME = "NONE"; + output CRCERROR; + output ECCERROR; + output ECCERRORSINGLE; + output SYNDROMEVALID; + output [12:0] SYNDROME; + output [25:0] FAR; + output [4:0] SYNBIT; + output [6:0] SYNWORD; +endmodule + +module FRAME_ECCE3 (...); + output CRCERROR; + output ECCERRORNOTSINGLE; + output ECCERRORSINGLE; + output ENDOFFRAME; + output ENDOFSCAN; + output [25:0] FAR; + input [1:0] FARSEL; + input ICAPBOTCLK; + input ICAPTOPCLK; +endmodule + +module FRAME_ECCE4 (...); + output CRCERROR; + output ECCERRORNOTSINGLE; + output ECCERRORSINGLE; + output ENDOFFRAME; + output ENDOFSCAN; + output [26:0] FAR; + input [1:0] FARSEL; + input ICAPBOTCLK; + input ICAPTOPCLK; +endmodule + +module USR_ACCESS_VIRTEX4 (...); + output [31:0] DATA; + output DATAVALID; +endmodule + +module USR_ACCESS_VIRTEX5 (...); + output CFGCLK; + output [31:0] DATA; + output DATAVALID; +endmodule + +module USR_ACCESS_VIRTEX6 (...); + output CFGCLK; + output [31:0] DATA; + output DATAVALID; +endmodule + +module USR_ACCESSE2 (...); + output CFGCLK; + output DATAVALID; + output [31:0] DATA; +endmodule + +module POST_CRC_INTERNAL (...); + output CRCERROR; +endmodule + +(* keep *) +module SUSPEND_SYNC (...); + output SREQ; + input CLK; + input SACK; +endmodule + +(* keep *) +module KEY_CLEAR (...); + input KEYCLEARB; +endmodule + +(* keep *) +module MASTER_JTAG (...); + output TDO; + input TCK; + input TDI; + input TMS; +endmodule + +(* keep *) +module SPI_ACCESS (...); + parameter SIM_DELAY_TYPE = "SCALED"; + parameter SIM_DEVICE = "3S1400AN"; + parameter SIM_FACTORY_ID = 512'h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; + parameter SIM_MEM_FILE = "NONE"; + parameter SIM_USER_ID = 512'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; + output MISO; + input CLK; + input CSB; + input MOSI; +endmodule + +module EFUSE_USR (...); + parameter [31:0] SIM_EFUSE_VALUE = 32'h00000000; + output [31:0] EFUSEUSR; +endmodule + +(* keep *) +module SYSMON (...); + parameter [15:0] INIT_40 = 16'h0; + parameter [15:0] INIT_41 = 16'h0; + parameter [15:0] INIT_42 = 16'h0800; + parameter [15:0] INIT_43 = 16'h0; + parameter [15:0] INIT_44 = 16'h0; + parameter [15:0] INIT_45 = 16'h0; + parameter [15:0] INIT_46 = 16'h0; + parameter [15:0] INIT_47 = 16'h0; + parameter [15:0] INIT_48 = 16'h0; + parameter [15:0] INIT_49 = 16'h0; + parameter [15:0] INIT_4A = 16'h0; + parameter [15:0] INIT_4B = 16'h0; + parameter [15:0] INIT_4C = 16'h0; + parameter [15:0] INIT_4D = 16'h0; + parameter [15:0] INIT_4E = 16'h0; + parameter [15:0] INIT_4F = 16'h0; + parameter [15:0] INIT_50 = 16'h0; + parameter [15:0] INIT_51 = 16'h0; + parameter [15:0] INIT_52 = 16'h0; + parameter [15:0] INIT_53 = 16'h0; + parameter [15:0] INIT_54 = 16'h0; + parameter [15:0] INIT_55 = 16'h0; + parameter [15:0] INIT_56 = 16'h0; + parameter [15:0] INIT_57 = 16'h0; + parameter SIM_DEVICE = "VIRTEX5"; + parameter SIM_MONITOR_FILE = "design.txt"; + output BUSY; + output DRDY; + output EOC; + output EOS; + output JTAGBUSY; + output JTAGLOCKED; + output JTAGMODIFIED; + output OT; + output [15:0] DO; + output [2:0] ALM; + output [4:0] CHANNEL; + input CONVST; + input CONVSTCLK; + input DCLK; + input DEN; + input DWE; + input RESET; + input VN; + input VP; + input [15:0] DI; + input [15:0] VAUXN; + input [15:0] VAUXP; + input [6:0] DADDR; +endmodule + +(* keep *) +module XADC (...); + parameter [15:0] INIT_40 = 16'h0; + parameter [15:0] INIT_41 = 16'h0; + parameter [15:0] INIT_42 = 16'h0800; + parameter [15:0] INIT_43 = 16'h0; + parameter [15:0] INIT_44 = 16'h0; + parameter [15:0] INIT_45 = 16'h0; + parameter [15:0] INIT_46 = 16'h0; + parameter [15:0] INIT_47 = 16'h0; + parameter [15:0] INIT_48 = 16'h0; + parameter [15:0] INIT_49 = 16'h0; + parameter [15:0] INIT_4A = 16'h0; + parameter [15:0] INIT_4B = 16'h0; + parameter [15:0] INIT_4C = 16'h0; + parameter [15:0] INIT_4D = 16'h0; + parameter [15:0] INIT_4E = 16'h0; + parameter [15:0] INIT_4F = 16'h0; + parameter [15:0] INIT_50 = 16'h0; + parameter [15:0] INIT_51 = 16'h0; + parameter [15:0] INIT_52 = 16'h0; + parameter [15:0] INIT_53 = 16'h0; + parameter [15:0] INIT_54 = 16'h0; + parameter [15:0] INIT_55 = 16'h0; + parameter [15:0] INIT_56 = 16'h0; + parameter [15:0] INIT_57 = 16'h0; + parameter [15:0] INIT_58 = 16'h0; + parameter [15:0] INIT_59 = 16'h0; + parameter [15:0] INIT_5A = 16'h0; + parameter [15:0] INIT_5B = 16'h0; + parameter [15:0] INIT_5C = 16'h0; + parameter [15:0] INIT_5D = 16'h0; + parameter [15:0] INIT_5E = 16'h0; + parameter [15:0] INIT_5F = 16'h0; + parameter IS_CONVSTCLK_INVERTED = 1'b0; + parameter IS_DCLK_INVERTED = 1'b0; + parameter SIM_DEVICE = "7SERIES"; + parameter SIM_MONITOR_FILE = "design.txt"; + output BUSY; + output DRDY; + output EOC; + output EOS; + output JTAGBUSY; + output JTAGLOCKED; + output JTAGMODIFIED; + output OT; + output [15:0] DO; + output [7:0] ALM; + output [4:0] CHANNEL; + output [4:0] MUXADDR; + input CONVST; + (* invertible_pin = "IS_CONVSTCLK_INVERTED" *) + input CONVSTCLK; + (* invertible_pin = "IS_DCLK_INVERTED" *) + input DCLK; + input DEN; + input DWE; + input RESET; + input VN; + input VP; + input [15:0] DI; + input [15:0] VAUXN; + input [15:0] VAUXP; + input [6:0] DADDR; +endmodule + +(* keep *) +module SYSMONE1 (...); + parameter [15:0] INIT_40 = 16'h0; + parameter [15:0] INIT_41 = 16'h0; + parameter [15:0] INIT_42 = 16'h0; + parameter [15:0] INIT_43 = 16'h0; + parameter [15:0] INIT_44 = 16'h0; + parameter [15:0] INIT_45 = 16'h0; + parameter [15:0] INIT_46 = 16'h0; + parameter [15:0] INIT_47 = 16'h0; + parameter [15:0] INIT_48 = 16'h0; + parameter [15:0] INIT_49 = 16'h0; + parameter [15:0] INIT_4A = 16'h0; + parameter [15:0] INIT_4B = 16'h0; + parameter [15:0] INIT_4C = 16'h0; + parameter [15:0] INIT_4D = 16'h0; + parameter [15:0] INIT_4E = 16'h0; + parameter [15:0] INIT_4F = 16'h0; + parameter [15:0] INIT_50 = 16'h0; + parameter [15:0] INIT_51 = 16'h0; + parameter [15:0] INIT_52 = 16'h0; + parameter [15:0] INIT_53 = 16'h0; + parameter [15:0] INIT_54 = 16'h0; + parameter [15:0] INIT_55 = 16'h0; + parameter [15:0] INIT_56 = 16'h0; + parameter [15:0] INIT_57 = 16'h0; + parameter [15:0] INIT_58 = 16'h0; + parameter [15:0] INIT_59 = 16'h0; + parameter [15:0] INIT_5A = 16'h0; + parameter [15:0] INIT_5B = 16'h0; + parameter [15:0] INIT_5C = 16'h0; + parameter [15:0] INIT_5D = 16'h0; + parameter [15:0] INIT_5E = 16'h0; + parameter [15:0] INIT_5F = 16'h0; + parameter [15:0] INIT_60 = 16'h0; + parameter [15:0] INIT_61 = 16'h0; + parameter [15:0] INIT_62 = 16'h0; + parameter [15:0] INIT_63 = 16'h0; + parameter [15:0] INIT_64 = 16'h0; + parameter [15:0] INIT_65 = 16'h0; + parameter [15:0] INIT_66 = 16'h0; + parameter [15:0] INIT_67 = 16'h0; + parameter [15:0] INIT_68 = 16'h0; + parameter [15:0] INIT_69 = 16'h0; + parameter [15:0] INIT_6A = 16'h0; + parameter [15:0] INIT_6B = 16'h0; + parameter [15:0] INIT_6C = 16'h0; + parameter [15:0] INIT_6D = 16'h0; + parameter [15:0] INIT_6E = 16'h0; + parameter [15:0] INIT_6F = 16'h0; + parameter [15:0] INIT_70 = 16'h0; + parameter [15:0] INIT_71 = 16'h0; + parameter [15:0] INIT_72 = 16'h0; + parameter [15:0] INIT_73 = 16'h0; + parameter [15:0] INIT_74 = 16'h0; + parameter [15:0] INIT_75 = 16'h0; + parameter [15:0] INIT_76 = 16'h0; + parameter [15:0] INIT_77 = 16'h0; + parameter [15:0] INIT_78 = 16'h0; + parameter [15:0] INIT_79 = 16'h0; + parameter [15:0] INIT_7A = 16'h0; + parameter [15:0] INIT_7B = 16'h0; + parameter [15:0] INIT_7C = 16'h0; + parameter [15:0] INIT_7D = 16'h0; + parameter [15:0] INIT_7E = 16'h0; + parameter [15:0] INIT_7F = 16'h0; + parameter [0:0] IS_CONVSTCLK_INVERTED = 1'b0; + parameter [0:0] IS_DCLK_INVERTED = 1'b0; + parameter SIM_MONITOR_FILE = "design.txt"; + parameter integer SYSMON_VUSER0_BANK = 0; + parameter SYSMON_VUSER0_MONITOR = "NONE"; + parameter integer SYSMON_VUSER1_BANK = 0; + parameter SYSMON_VUSER1_MONITOR = "NONE"; + parameter integer SYSMON_VUSER2_BANK = 0; + parameter SYSMON_VUSER2_MONITOR = "NONE"; + parameter integer SYSMON_VUSER3_BANK = 0; + parameter SYSMON_VUSER3_MONITOR = "NONE"; + output [15:0] ALM; + output BUSY; + output [5:0] CHANNEL; + output [15:0] DO; + output DRDY; + output EOC; + output EOS; + output I2C_SCLK_TS; + output I2C_SDA_TS; + output JTAGBUSY; + output JTAGLOCKED; + output JTAGMODIFIED; + output [4:0] MUXADDR; + output OT; + input CONVST; + (* invertible_pin = "IS_CONVSTCLK_INVERTED" *) + input CONVSTCLK; + input [7:0] DADDR; + (* invertible_pin = "IS_DCLK_INVERTED" *) + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input I2C_SCLK; + input I2C_SDA; + input RESET; + input [15:0] VAUXN; + input [15:0] VAUXP; + input VN; + input VP; +endmodule + +(* keep *) +module SYSMONE4 (...); + parameter [15:0] COMMON_N_SOURCE = 16'hFFFF; + parameter [15:0] INIT_40 = 16'h0000; + parameter [15:0] INIT_41 = 16'h0000; + parameter [15:0] INIT_42 = 16'h0000; + parameter [15:0] INIT_43 = 16'h0000; + parameter [15:0] INIT_44 = 16'h0000; + parameter [15:0] INIT_45 = 16'h0000; + parameter [15:0] INIT_46 = 16'h0000; + parameter [15:0] INIT_47 = 16'h0000; + parameter [15:0] INIT_48 = 16'h0000; + parameter [15:0] INIT_49 = 16'h0000; + parameter [15:0] INIT_4A = 16'h0000; + parameter [15:0] INIT_4B = 16'h0000; + parameter [15:0] INIT_4C = 16'h0000; + parameter [15:0] INIT_4D = 16'h0000; + parameter [15:0] INIT_4E = 16'h0000; + parameter [15:0] INIT_4F = 16'h0000; + parameter [15:0] INIT_50 = 16'h0000; + parameter [15:0] INIT_51 = 16'h0000; + parameter [15:0] INIT_52 = 16'h0000; + parameter [15:0] INIT_53 = 16'h0000; + parameter [15:0] INIT_54 = 16'h0000; + parameter [15:0] INIT_55 = 16'h0000; + parameter [15:0] INIT_56 = 16'h0000; + parameter [15:0] INIT_57 = 16'h0000; + parameter [15:0] INIT_58 = 16'h0000; + parameter [15:0] INIT_59 = 16'h0000; + parameter [15:0] INIT_5A = 16'h0000; + parameter [15:0] INIT_5B = 16'h0000; + parameter [15:0] INIT_5C = 16'h0000; + parameter [15:0] INIT_5D = 16'h0000; + parameter [15:0] INIT_5E = 16'h0000; + parameter [15:0] INIT_5F = 16'h0000; + parameter [15:0] INIT_60 = 16'h0000; + parameter [15:0] INIT_61 = 16'h0000; + parameter [15:0] INIT_62 = 16'h0000; + parameter [15:0] INIT_63 = 16'h0000; + parameter [15:0] INIT_64 = 16'h0000; + parameter [15:0] INIT_65 = 16'h0000; + parameter [15:0] INIT_66 = 16'h0000; + parameter [15:0] INIT_67 = 16'h0000; + parameter [15:0] INIT_68 = 16'h0000; + parameter [15:0] INIT_69 = 16'h0000; + parameter [15:0] INIT_6A = 16'h0000; + parameter [15:0] INIT_6B = 16'h0000; + parameter [15:0] INIT_6C = 16'h0000; + parameter [15:0] INIT_6D = 16'h0000; + parameter [15:0] INIT_6E = 16'h0000; + parameter [15:0] INIT_6F = 16'h0000; + parameter [15:0] INIT_70 = 16'h0000; + parameter [15:0] INIT_71 = 16'h0000; + parameter [15:0] INIT_72 = 16'h0000; + parameter [15:0] INIT_73 = 16'h0000; + parameter [15:0] INIT_74 = 16'h0000; + parameter [15:0] INIT_75 = 16'h0000; + parameter [15:0] INIT_76 = 16'h0000; + parameter [15:0] INIT_77 = 16'h0000; + parameter [15:0] INIT_78 = 16'h0000; + parameter [15:0] INIT_79 = 16'h0000; + parameter [15:0] INIT_7A = 16'h0000; + parameter [15:0] INIT_7B = 16'h0000; + parameter [15:0] INIT_7C = 16'h0000; + parameter [15:0] INIT_7D = 16'h0000; + parameter [15:0] INIT_7E = 16'h0000; + parameter [15:0] INIT_7F = 16'h0000; + parameter [0:0] IS_CONVSTCLK_INVERTED = 1'b0; + parameter [0:0] IS_DCLK_INVERTED = 1'b0; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter SIM_MONITOR_FILE = "design.txt"; + parameter integer SYSMON_VUSER0_BANK = 0; + parameter SYSMON_VUSER0_MONITOR = "NONE"; + parameter integer SYSMON_VUSER1_BANK = 0; + parameter SYSMON_VUSER1_MONITOR = "NONE"; + parameter integer SYSMON_VUSER2_BANK = 0; + parameter SYSMON_VUSER2_MONITOR = "NONE"; + parameter integer SYSMON_VUSER3_BANK = 0; + parameter SYSMON_VUSER3_MONITOR = "NONE"; + output [15:0] ADC_DATA; + output [15:0] ALM; + output BUSY; + output [5:0] CHANNEL; + output [15:0] DO; + output DRDY; + output EOC; + output EOS; + output I2C_SCLK_TS; + output I2C_SDA_TS; + output JTAGBUSY; + output JTAGLOCKED; + output JTAGMODIFIED; + output [4:0] MUXADDR; + output OT; + output SMBALERT_TS; + input CONVST; + (* invertible_pin = "IS_CONVSTCLK_INVERTED" *) + input CONVSTCLK; + input [7:0] DADDR; + (* invertible_pin = "IS_DCLK_INVERTED" *) + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input I2C_SCLK; + input I2C_SDA; + input RESET; + input [15:0] VAUXN; + input [15:0] VAUXP; + input VN; + input VP; +endmodule + +module GTPA1_DUAL (...); + parameter AC_CAP_DIS_0 = "TRUE"; + parameter AC_CAP_DIS_1 = "TRUE"; + parameter integer ALIGN_COMMA_WORD_0 = 1; + parameter integer ALIGN_COMMA_WORD_1 = 1; + parameter integer CB2_INH_CC_PERIOD_0 = 8; + parameter integer CB2_INH_CC_PERIOD_1 = 8; + parameter [4:0] CDR_PH_ADJ_TIME_0 = 5'b01010; + parameter [4:0] CDR_PH_ADJ_TIME_1 = 5'b01010; + parameter integer CHAN_BOND_1_MAX_SKEW_0 = 7; + parameter integer CHAN_BOND_1_MAX_SKEW_1 = 7; + parameter integer CHAN_BOND_2_MAX_SKEW_0 = 1; + parameter integer CHAN_BOND_2_MAX_SKEW_1 = 1; + parameter CHAN_BOND_KEEP_ALIGN_0 = "FALSE"; + parameter CHAN_BOND_KEEP_ALIGN_1 = "FALSE"; + parameter [9:0] CHAN_BOND_SEQ_1_1_0 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_2_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_4_0 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_1_4_1 = 10'b0110111100; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_0 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_1 = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1_0 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_1_1 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_2_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_2_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_4_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_4_1 = 10'b0100111100; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_0 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_1 = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE_0 = "FALSE"; + parameter CHAN_BOND_SEQ_2_USE_1 = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN_0 = 1; + parameter integer CHAN_BOND_SEQ_LEN_1 = 1; + parameter integer CLK25_DIVIDER_0 = 4; + parameter integer CLK25_DIVIDER_1 = 4; + parameter CLKINDC_B_0 = "TRUE"; + parameter CLKINDC_B_1 = "TRUE"; + parameter CLKRCV_TRST_0 = "TRUE"; + parameter CLKRCV_TRST_1 = "TRUE"; + parameter CLK_CORRECT_USE_0 = "TRUE"; + parameter CLK_CORRECT_USE_1 = "TRUE"; + parameter integer CLK_COR_ADJ_LEN_0 = 1; + parameter integer CLK_COR_ADJ_LEN_1 = 1; + parameter integer CLK_COR_DET_LEN_0 = 1; + parameter integer CLK_COR_DET_LEN_1 = 1; + parameter CLK_COR_INSERT_IDLE_FLAG_0 = "FALSE"; + parameter CLK_COR_INSERT_IDLE_FLAG_1 = "FALSE"; + parameter CLK_COR_KEEP_IDLE_0 = "FALSE"; + parameter CLK_COR_KEEP_IDLE_1 = "FALSE"; + parameter integer CLK_COR_MAX_LAT_0 = 20; + parameter integer CLK_COR_MAX_LAT_1 = 20; + parameter integer CLK_COR_MIN_LAT_0 = 18; + parameter integer CLK_COR_MIN_LAT_1 = 18; + parameter CLK_COR_PRECEDENCE_0 = "TRUE"; + parameter CLK_COR_PRECEDENCE_1 = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT_0 = 0; + parameter integer CLK_COR_REPEAT_WAIT_1 = 0; + parameter [9:0] CLK_COR_SEQ_1_1_0 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_2_1 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3_1 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4_1 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE_0 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_1_ENABLE_1 = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_1_1 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_2_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_2_1 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_3_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_3_1 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_4_0 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_4_1 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE_0 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_2_ENABLE_1 = 4'b1111; + parameter CLK_COR_SEQ_2_USE_0 = "FALSE"; + parameter CLK_COR_SEQ_2_USE_1 = "FALSE"; + parameter CLK_OUT_GTP_SEL_0 = "REFCLKPLL0"; + parameter CLK_OUT_GTP_SEL_1 = "REFCLKPLL1"; + parameter [1:0] CM_TRIM_0 = 2'b00; + parameter [1:0] CM_TRIM_1 = 2'b00; + parameter [9:0] COMMA_10B_ENABLE_0 = 10'b1111111111; + parameter [9:0] COMMA_10B_ENABLE_1 = 10'b1111111111; + parameter [3:0] COM_BURST_VAL_0 = 4'b1111; + parameter [3:0] COM_BURST_VAL_1 = 4'b1111; + parameter DEC_MCOMMA_DETECT_0 = "TRUE"; + parameter DEC_MCOMMA_DETECT_1 = "TRUE"; + parameter DEC_PCOMMA_DETECT_0 = "TRUE"; + parameter DEC_PCOMMA_DETECT_1 = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_0 = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_1 = "TRUE"; + parameter GTP_CFG_PWRUP_0 = "TRUE"; + parameter GTP_CFG_PWRUP_1 = "TRUE"; + parameter [9:0] MCOMMA_10B_VALUE_0 = 10'b1010000011; + parameter [9:0] MCOMMA_10B_VALUE_1 = 10'b1010000011; + parameter MCOMMA_DETECT_0 = "TRUE"; + parameter MCOMMA_DETECT_1 = "TRUE"; + parameter [2:0] OOBDETECT_THRESHOLD_0 = 3'b110; + parameter [2:0] OOBDETECT_THRESHOLD_1 = 3'b110; + parameter integer OOB_CLK_DIVIDER_0 = 4; + parameter integer OOB_CLK_DIVIDER_1 = 4; + parameter PCI_EXPRESS_MODE_0 = "FALSE"; + parameter PCI_EXPRESS_MODE_1 = "FALSE"; + parameter [9:0] PCOMMA_10B_VALUE_0 = 10'b0101111100; + parameter [9:0] PCOMMA_10B_VALUE_1 = 10'b0101111100; + parameter PCOMMA_DETECT_0 = "TRUE"; + parameter PCOMMA_DETECT_1 = "TRUE"; + parameter [2:0] PLLLKDET_CFG_0 = 3'b101; + parameter [2:0] PLLLKDET_CFG_1 = 3'b101; + parameter [23:0] PLL_COM_CFG_0 = 24'h21680A; + parameter [23:0] PLL_COM_CFG_1 = 24'h21680A; + parameter [7:0] PLL_CP_CFG_0 = 8'h00; + parameter [7:0] PLL_CP_CFG_1 = 8'h00; + parameter integer PLL_DIVSEL_FB_0 = 5; + parameter integer PLL_DIVSEL_FB_1 = 5; + parameter integer PLL_DIVSEL_REF_0 = 2; + parameter integer PLL_DIVSEL_REF_1 = 2; + parameter integer PLL_RXDIVSEL_OUT_0 = 1; + parameter integer PLL_RXDIVSEL_OUT_1 = 1; + parameter PLL_SATA_0 = "FALSE"; + parameter PLL_SATA_1 = "FALSE"; + parameter PLL_SOURCE_0 = "PLL0"; + parameter PLL_SOURCE_1 = "PLL0"; + parameter integer PLL_TXDIVSEL_OUT_0 = 1; + parameter integer PLL_TXDIVSEL_OUT_1 = 1; + parameter [26:0] PMA_CDR_SCAN_0 = 27'h6404040; + parameter [26:0] PMA_CDR_SCAN_1 = 27'h6404040; + parameter [35:0] PMA_COM_CFG_EAST = 36'h000008000; + parameter [35:0] PMA_COM_CFG_WEST = 36'h00000A000; + parameter [6:0] PMA_RXSYNC_CFG_0 = 7'h00; + parameter [6:0] PMA_RXSYNC_CFG_1 = 7'h00; + parameter [24:0] PMA_RX_CFG_0 = 25'h05CE048; + parameter [24:0] PMA_RX_CFG_1 = 25'h05CE048; + parameter [19:0] PMA_TX_CFG_0 = 20'h00082; + parameter [19:0] PMA_TX_CFG_1 = 20'h00082; + parameter RCV_TERM_GND_0 = "FALSE"; + parameter RCV_TERM_GND_1 = "FALSE"; + parameter RCV_TERM_VTTRX_0 = "TRUE"; + parameter RCV_TERM_VTTRX_1 = "TRUE"; + parameter [7:0] RXEQ_CFG_0 = 8'b01111011; + parameter [7:0] RXEQ_CFG_1 = 8'b01111011; + parameter [0:0] RXPRBSERR_LOOPBACK_0 = 1'b0; + parameter [0:0] RXPRBSERR_LOOPBACK_1 = 1'b0; + parameter RX_BUFFER_USE_0 = "TRUE"; + parameter RX_BUFFER_USE_1 = "TRUE"; + parameter RX_DECODE_SEQ_MATCH_0 = "TRUE"; + parameter RX_DECODE_SEQ_MATCH_1 = "TRUE"; + parameter RX_EN_IDLE_HOLD_CDR_0 = "FALSE"; + parameter RX_EN_IDLE_HOLD_CDR_1 = "FALSE"; + parameter RX_EN_IDLE_RESET_BUF_0 = "TRUE"; + parameter RX_EN_IDLE_RESET_BUF_1 = "TRUE"; + parameter RX_EN_IDLE_RESET_FR_0 = "TRUE"; + parameter RX_EN_IDLE_RESET_FR_1 = "TRUE"; + parameter RX_EN_IDLE_RESET_PH_0 = "TRUE"; + parameter RX_EN_IDLE_RESET_PH_1 = "TRUE"; + parameter RX_EN_MODE_RESET_BUF_0 = "TRUE"; + parameter RX_EN_MODE_RESET_BUF_1 = "TRUE"; + parameter [3:0] RX_IDLE_HI_CNT_0 = 4'b1000; + parameter [3:0] RX_IDLE_HI_CNT_1 = 4'b1000; + parameter [3:0] RX_IDLE_LO_CNT_0 = 4'b0000; + parameter [3:0] RX_IDLE_LO_CNT_1 = 4'b0000; + parameter RX_LOSS_OF_SYNC_FSM_0 = "FALSE"; + parameter RX_LOSS_OF_SYNC_FSM_1 = "FALSE"; + parameter integer RX_LOS_INVALID_INCR_0 = 1; + parameter integer RX_LOS_INVALID_INCR_1 = 1; + parameter integer RX_LOS_THRESHOLD_0 = 4; + parameter integer RX_LOS_THRESHOLD_1 = 4; + parameter RX_SLIDE_MODE_0 = "PCS"; + parameter RX_SLIDE_MODE_1 = "PCS"; + parameter RX_STATUS_FMT_0 = "PCIE"; + parameter RX_STATUS_FMT_1 = "PCIE"; + parameter RX_XCLK_SEL_0 = "RXREC"; + parameter RX_XCLK_SEL_1 = "RXREC"; + parameter [2:0] SATA_BURST_VAL_0 = 3'b100; + parameter [2:0] SATA_BURST_VAL_1 = 3'b100; + parameter [2:0] SATA_IDLE_VAL_0 = 3'b011; + parameter [2:0] SATA_IDLE_VAL_1 = 3'b011; + parameter integer SATA_MAX_BURST_0 = 7; + parameter integer SATA_MAX_BURST_1 = 7; + parameter integer SATA_MAX_INIT_0 = 22; + parameter integer SATA_MAX_INIT_1 = 22; + parameter integer SATA_MAX_WAKE_0 = 7; + parameter integer SATA_MAX_WAKE_1 = 7; + parameter integer SATA_MIN_BURST_0 = 4; + parameter integer SATA_MIN_BURST_1 = 4; + parameter integer SATA_MIN_INIT_0 = 12; + parameter integer SATA_MIN_INIT_1 = 12; + parameter integer SATA_MIN_WAKE_0 = 4; + parameter integer SATA_MIN_WAKE_1 = 4; + parameter integer SIM_GTPRESET_SPEEDUP = 0; + parameter SIM_RECEIVER_DETECT_PASS = "FALSE"; + parameter [2:0] SIM_REFCLK0_SOURCE = 3'b000; + parameter [2:0] SIM_REFCLK1_SOURCE = 3'b000; + parameter SIM_TX_ELEC_IDLE_LEVEL = "X"; + parameter SIM_VERSION = "2.0"; + parameter [4:0] TERMINATION_CTRL_0 = 5'b10100; + parameter [4:0] TERMINATION_CTRL_1 = 5'b10100; + parameter TERMINATION_OVRD_0 = "FALSE"; + parameter TERMINATION_OVRD_1 = "FALSE"; + parameter [11:0] TRANS_TIME_FROM_P2_0 = 12'h03C; + parameter [11:0] TRANS_TIME_FROM_P2_1 = 12'h03C; + parameter [7:0] TRANS_TIME_NON_P2_0 = 8'h19; + parameter [7:0] TRANS_TIME_NON_P2_1 = 8'h19; + parameter [9:0] TRANS_TIME_TO_P2_0 = 10'h064; + parameter [9:0] TRANS_TIME_TO_P2_1 = 10'h064; + parameter [31:0] TST_ATTR_0 = 32'h00000000; + parameter [31:0] TST_ATTR_1 = 32'h00000000; + parameter [2:0] TXRX_INVERT_0 = 3'b011; + parameter [2:0] TXRX_INVERT_1 = 3'b011; + parameter TX_BUFFER_USE_0 = "FALSE"; + parameter TX_BUFFER_USE_1 = "FALSE"; + parameter [13:0] TX_DETECT_RX_CFG_0 = 14'h1832; + parameter [13:0] TX_DETECT_RX_CFG_1 = 14'h1832; + parameter [2:0] TX_IDLE_DELAY_0 = 3'b011; + parameter [2:0] TX_IDLE_DELAY_1 = 3'b011; + parameter [1:0] TX_TDCC_CFG_0 = 2'b00; + parameter [1:0] TX_TDCC_CFG_1 = 2'b00; + parameter TX_XCLK_SEL_0 = "TXUSR"; + parameter TX_XCLK_SEL_1 = "TXUSR"; + output DRDY; + output PHYSTATUS0; + output PHYSTATUS1; + output PLLLKDET0; + output PLLLKDET1; + output REFCLKOUT0; + output REFCLKOUT1; + output REFCLKPLL0; + output REFCLKPLL1; + output RESETDONE0; + output RESETDONE1; + output RXBYTEISALIGNED0; + output RXBYTEISALIGNED1; + output RXBYTEREALIGN0; + output RXBYTEREALIGN1; + output RXCHANBONDSEQ0; + output RXCHANBONDSEQ1; + output RXCHANISALIGNED0; + output RXCHANISALIGNED1; + output RXCHANREALIGN0; + output RXCHANREALIGN1; + output RXCOMMADET0; + output RXCOMMADET1; + output RXELECIDLE0; + output RXELECIDLE1; + output RXPRBSERR0; + output RXPRBSERR1; + output RXRECCLK0; + output RXRECCLK1; + output RXVALID0; + output RXVALID1; + output TXN0; + output TXN1; + output TXOUTCLK0; + output TXOUTCLK1; + output TXP0; + output TXP1; + output [15:0] DRPDO; + output [1:0] GTPCLKFBEAST; + output [1:0] GTPCLKFBWEST; + output [1:0] GTPCLKOUT0; + output [1:0] GTPCLKOUT1; + output [1:0] RXLOSSOFSYNC0; + output [1:0] RXLOSSOFSYNC1; + output [1:0] TXBUFSTATUS0; + output [1:0] TXBUFSTATUS1; + output [2:0] RXBUFSTATUS0; + output [2:0] RXBUFSTATUS1; + output [2:0] RXCHBONDO; + output [2:0] RXCLKCORCNT0; + output [2:0] RXCLKCORCNT1; + output [2:0] RXSTATUS0; + output [2:0] RXSTATUS1; + output [31:0] RXDATA0; + output [31:0] RXDATA1; + output [3:0] RXCHARISCOMMA0; + output [3:0] RXCHARISCOMMA1; + output [3:0] RXCHARISK0; + output [3:0] RXCHARISK1; + output [3:0] RXDISPERR0; + output [3:0] RXDISPERR1; + output [3:0] RXNOTINTABLE0; + output [3:0] RXNOTINTABLE1; + output [3:0] RXRUNDISP0; + output [3:0] RXRUNDISP1; + output [3:0] TXKERR0; + output [3:0] TXKERR1; + output [3:0] TXRUNDISP0; + output [3:0] TXRUNDISP1; + output [4:0] RCALOUTEAST; + output [4:0] RCALOUTWEST; + output [4:0] TSTOUT0; + output [4:0] TSTOUT1; + input CLK00; + input CLK01; + input CLK10; + input CLK11; + input CLKINEAST0; + input CLKINEAST1; + input CLKINWEST0; + input CLKINWEST1; + input DCLK; + input DEN; + input DWE; + input GATERXELECIDLE0; + input GATERXELECIDLE1; + input GCLK00; + input GCLK01; + input GCLK10; + input GCLK11; + input GTPRESET0; + input GTPRESET1; + input IGNORESIGDET0; + input IGNORESIGDET1; + input INTDATAWIDTH0; + input INTDATAWIDTH1; + input PLLCLK00; + input PLLCLK01; + input PLLCLK10; + input PLLCLK11; + input PLLLKDETEN0; + input PLLLKDETEN1; + input PLLPOWERDOWN0; + input PLLPOWERDOWN1; + input PRBSCNTRESET0; + input PRBSCNTRESET1; + input REFCLKPWRDNB0; + input REFCLKPWRDNB1; + input RXBUFRESET0; + input RXBUFRESET1; + input RXCDRRESET0; + input RXCDRRESET1; + input RXCHBONDMASTER0; + input RXCHBONDMASTER1; + input RXCHBONDSLAVE0; + input RXCHBONDSLAVE1; + input RXCOMMADETUSE0; + input RXCOMMADETUSE1; + input RXDEC8B10BUSE0; + input RXDEC8B10BUSE1; + input RXENCHANSYNC0; + input RXENCHANSYNC1; + input RXENMCOMMAALIGN0; + input RXENMCOMMAALIGN1; + input RXENPCOMMAALIGN0; + input RXENPCOMMAALIGN1; + input RXENPMAPHASEALIGN0; + input RXENPMAPHASEALIGN1; + input RXN0; + input RXN1; + input RXP0; + input RXP1; + input RXPMASETPHASE0; + input RXPMASETPHASE1; + input RXPOLARITY0; + input RXPOLARITY1; + input RXRESET0; + input RXRESET1; + input RXSLIDE0; + input RXSLIDE1; + input RXUSRCLK0; + input RXUSRCLK1; + input RXUSRCLK20; + input RXUSRCLK21; + input TSTCLK0; + input TSTCLK1; + input TXCOMSTART0; + input TXCOMSTART1; + input TXCOMTYPE0; + input TXCOMTYPE1; + input TXDETECTRX0; + input TXDETECTRX1; + input TXELECIDLE0; + input TXELECIDLE1; + input TXENC8B10BUSE0; + input TXENC8B10BUSE1; + input TXENPMAPHASEALIGN0; + input TXENPMAPHASEALIGN1; + input TXINHIBIT0; + input TXINHIBIT1; + input TXPDOWNASYNCH0; + input TXPDOWNASYNCH1; + input TXPMASETPHASE0; + input TXPMASETPHASE1; + input TXPOLARITY0; + input TXPOLARITY1; + input TXPRBSFORCEERR0; + input TXPRBSFORCEERR1; + input TXRESET0; + input TXRESET1; + input TXUSRCLK0; + input TXUSRCLK1; + input TXUSRCLK20; + input TXUSRCLK21; + input USRCODEERR0; + input USRCODEERR1; + input [11:0] TSTIN0; + input [11:0] TSTIN1; + input [15:0] DI; + input [1:0] GTPCLKFBSEL0EAST; + input [1:0] GTPCLKFBSEL0WEST; + input [1:0] GTPCLKFBSEL1EAST; + input [1:0] GTPCLKFBSEL1WEST; + input [1:0] RXDATAWIDTH0; + input [1:0] RXDATAWIDTH1; + input [1:0] RXEQMIX0; + input [1:0] RXEQMIX1; + input [1:0] RXPOWERDOWN0; + input [1:0] RXPOWERDOWN1; + input [1:0] TXDATAWIDTH0; + input [1:0] TXDATAWIDTH1; + input [1:0] TXPOWERDOWN0; + input [1:0] TXPOWERDOWN1; + input [2:0] LOOPBACK0; + input [2:0] LOOPBACK1; + input [2:0] REFSELDYPLL0; + input [2:0] REFSELDYPLL1; + input [2:0] RXCHBONDI; + input [2:0] RXENPRBSTST0; + input [2:0] RXENPRBSTST1; + input [2:0] TXBUFDIFFCTRL0; + input [2:0] TXBUFDIFFCTRL1; + input [2:0] TXENPRBSTST0; + input [2:0] TXENPRBSTST1; + input [2:0] TXPREEMPHASIS0; + input [2:0] TXPREEMPHASIS1; + input [31:0] TXDATA0; + input [31:0] TXDATA1; + input [3:0] TXBYPASS8B10B0; + input [3:0] TXBYPASS8B10B1; + input [3:0] TXCHARDISPMODE0; + input [3:0] TXCHARDISPMODE1; + input [3:0] TXCHARDISPVAL0; + input [3:0] TXCHARDISPVAL1; + input [3:0] TXCHARISK0; + input [3:0] TXCHARISK1; + input [3:0] TXDIFFCTRL0; + input [3:0] TXDIFFCTRL1; + input [4:0] RCALINEAST; + input [4:0] RCALINWEST; + input [7:0] DADDR; + input [7:0] GTPTEST0; + input [7:0] GTPTEST1; +endmodule + +module GT11_CUSTOM (...); + parameter ALIGN_COMMA_WORD = 1; + parameter BANDGAPSEL = "FALSE"; + parameter BIASRESSEL = "TRUE"; + parameter CCCB_ARBITRATOR_DISABLE = "FALSE"; + parameter CHAN_BOND_LIMIT = 16; + parameter CHAN_BOND_MODE = "NONE"; + parameter CHAN_BOND_ONE_SHOT = "FALSE"; + parameter CHAN_BOND_SEQ_1_1 = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_2 = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_3 = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_4 = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_MASK = 4'b0000; + parameter CHAN_BOND_SEQ_2_1 = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_2 = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_3 = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_4 = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_MASK = 4'b0000; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter CHAN_BOND_SEQ_LEN = 1; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_8B10B_DE = "FALSE"; + parameter CLK_COR_MAX_LAT = 36; + parameter CLK_COR_MIN_LAT = 28; + parameter CLK_COR_SEQ_1_1 = 11'b00000000000; + parameter CLK_COR_SEQ_1_2 = 11'b00000000000; + parameter CLK_COR_SEQ_1_3 = 11'b00000000000; + parameter CLK_COR_SEQ_1_4 = 11'b00000000000; + parameter CLK_COR_SEQ_1_MASK = 4'b0000; + parameter CLK_COR_SEQ_2_1 = 11'b00000000000; + parameter CLK_COR_SEQ_2_2 = 11'b00000000000; + parameter CLK_COR_SEQ_2_3 = 11'b00000000000; + parameter CLK_COR_SEQ_2_4 = 11'b00000000000; + parameter CLK_COR_SEQ_2_MASK = 4'b0000; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter CLK_COR_SEQ_DROP = "FALSE"; + parameter CLK_COR_SEQ_LEN = 1; + parameter COMMA32 = "FALSE"; + parameter COMMA_10B_MASK = 10'h3FF; + parameter CYCLE_LIMIT_SEL = 2'b00; + parameter DCDR_FILTER = 3'b010; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter DIGRX_FWDCLK = 2'b00; + parameter DIGRX_SYNC_MODE = "FALSE"; + parameter ENABLE_DCDR = "FALSE"; + parameter FDET_HYS_CAL = 3'b110; + parameter FDET_HYS_SEL = 3'b110; + parameter FDET_LCK_CAL = 3'b101; + parameter FDET_LCK_SEL = 3'b101; + parameter GT11_MODE = "SINGLE"; + parameter IREFBIASMODE = 2'b11; + parameter LOOPCAL_WAIT = 2'b00; + parameter MCOMMA_32B_VALUE = 32'h000000F6; + parameter MCOMMA_DETECT = "TRUE"; + parameter OPPOSITE_SELECT = "FALSE"; + parameter PCOMMA_32B_VALUE = 32'hF6F62828; + parameter PCOMMA_DETECT = "TRUE"; + parameter PCS_BIT_SLIP = "FALSE"; + parameter PMACLKENABLE = "TRUE"; + parameter PMACOREPWRENABLE = "TRUE"; + parameter PMAIREFTRIM = 4'b0111; + parameter PMAVBGCTRL = 5'b00000; + parameter PMAVREFTRIM = 4'b0111; + parameter PMA_BIT_SLIP = "FALSE"; + parameter REPEATER = "FALSE"; + parameter RXACTST = "FALSE"; + parameter RXAFEEQ = 9'b000000000; + parameter RXAFEPD = "FALSE"; + parameter RXAFETST = "FALSE"; + parameter RXAPD = "FALSE"; + parameter RXASYNCDIVIDE = 2'b11; + parameter RXBY_32 = "TRUE"; + parameter RXCDRLOS = 6'b000000; + parameter RXCLK0_FORCE_PMACLK = "FALSE"; + parameter RXCLKMODE = 6'b110001; + parameter RXCMADJ = 2'b10; + parameter RXCPSEL = "TRUE"; + parameter RXCPTST = "FALSE"; + parameter RXCRCCLOCKDOUBLE = "FALSE"; + parameter RXCRCENABLE = "FALSE"; + parameter RXCRCINITVAL = 32'h00000000; + parameter RXCRCINVERTGEN = "FALSE"; + parameter RXCRCSAMECLOCK = "FALSE"; + parameter RXCTRL1 = 10'h200; + parameter RXCYCLE_LIMIT_SEL = 2'b00; + parameter RXDATA_SEL = 2'b00; + parameter RXDCCOUPLE = "FALSE"; + parameter RXDIGRESET = "FALSE"; + parameter RXDIGRX = "FALSE"; + parameter RXEQ = 64'h4000000000000000; + parameter RXFDCAL_CLOCK_DIVIDE = "NONE"; + parameter RXFDET_HYS_CAL = 3'b110; + parameter RXFDET_HYS_SEL = 3'b110; + parameter RXFDET_LCK_CAL = 3'b101; + parameter RXFDET_LCK_SEL = 3'b101; + parameter RXFECONTROL1 = 2'b00; + parameter RXFECONTROL2 = 3'b000; + parameter RXFETUNE = 2'b01; + parameter RXLB = "FALSE"; + parameter RXLKADJ = 5'b00000; + parameter RXLKAPD = "FALSE"; + parameter RXLOOPCAL_WAIT = 2'b00; + parameter RXLOOPFILT = 4'b0111; + parameter RXOUTDIV2SEL = 1; + parameter RXPD = "FALSE"; + parameter RXPDDTST = "FALSE"; + parameter RXPLLNDIVSEL = 8; + parameter RXPMACLKSEL = "REFCLK1"; + parameter RXRCPADJ = 3'b011; + parameter RXRCPPD = "FALSE"; + parameter RXRECCLK1_USE_SYNC = "FALSE"; + parameter RXRIBADJ = 2'b11; + parameter RXRPDPD = "FALSE"; + parameter RXRSDPD = "FALSE"; + parameter RXSLOWDOWN_CAL = 2'b00; + parameter RXUSRDIVISOR = 1; + parameter RXVCODAC_INIT = 10'b1010000000; + parameter RXVCO_CTRL_ENABLE = "TRUE"; + parameter RX_BUFFER_USE = "TRUE"; + parameter RX_CLOCK_DIVIDER = 2'b00; + parameter RX_LOS_INVALID_INCR = 1; + parameter RX_LOS_THRESHOLD = 4; + parameter SAMPLE_8X = "FALSE"; + parameter SH_CNT_MAX = 64; + parameter SH_INVALID_CNT_MAX = 16; + parameter SLOWDOWN_CAL = 2'b00; + parameter TXABPMACLKSEL = "REFCLK1"; + parameter TXAPD = "FALSE"; + parameter TXAREFBIASSEL = "FALSE"; + parameter TXASYNCDIVIDE = 2'b11; + parameter TXCLK0_FORCE_PMACLK = "FALSE"; + parameter TXCLKMODE = 4'b1001; + parameter TXCPSEL = "TRUE"; + parameter TXCRCCLOCKDOUBLE = "FALSE"; + parameter TXCRCENABLE = "FALSE"; + parameter TXCRCINITVAL = 32'h00000000; + parameter TXCRCINVERTGEN = "FALSE"; + parameter TXCRCSAMECLOCK = "FALSE"; + parameter TXCTRL1 = 10'h200; + parameter TXDATA_SEL = 2'b00; + parameter TXDAT_PRDRV_DAC = 3'b111; + parameter TXDAT_TAP_DAC = 5'b10110; + parameter TXDIGPD = "FALSE"; + parameter TXFDCAL_CLOCK_DIVIDE = "NONE"; + parameter TXHIGHSIGNALEN = "TRUE"; + parameter TXLOOPFILT = 4'b0111; + parameter TXLVLSHFTPD = "FALSE"; + parameter TXOUTCLK1_USE_SYNC = "FALSE"; + parameter TXOUTDIV2SEL = 1; + parameter TXPD = "FALSE"; + parameter TXPHASESEL = "FALSE"; + parameter TXPLLNDIVSEL = 8; + parameter TXPOST_PRDRV_DAC = 3'b111; + parameter TXPOST_TAP_DAC = 5'b01110; + parameter TXPOST_TAP_PD = "TRUE"; + parameter TXPRE_PRDRV_DAC = 3'b111; + parameter TXPRE_TAP_DAC = 5'b00000; + parameter TXPRE_TAP_PD = "TRUE"; + parameter TXSLEWRATE = "FALSE"; + parameter TXTERMTRIM = 4'b1100; + parameter TX_BUFFER_USE = "TRUE"; + parameter TX_CLOCK_DIVIDER = 2'b00; + parameter VCODAC_INIT = 10'b1010000000; + parameter VCO_CTRL_ENABLE = "TRUE"; + parameter VREFBIASMODE = 2'b11; + output DRDY; + output RXBUFERR; + output RXCALFAIL; + output RXCOMMADET; + output RXCYCLELIMIT; + output RXLOCK; + output RXMCLK; + output RXPCSHCLKOUT; + output RXREALIGN; + output RXRECCLK1; + output RXRECCLK2; + output RXSIGDET; + output TX1N; + output TX1P; + output TXBUFERR; + output TXCALFAIL; + output TXCYCLELIMIT; + output TXLOCK; + output TXOUTCLK1; + output TXOUTCLK2; + output TXPCSHCLKOUT; + output [15:0] DO; + output [1:0] RXLOSSOFSYNC; + output [31:0] RXCRCOUT; + output [31:0] TXCRCOUT; + output [4:0] CHBONDO; + output [5:0] RXSTATUS; + output [63:0] RXDATA; + output [7:0] RXCHARISCOMMA; + output [7:0] RXCHARISK; + output [7:0] RXDISPERR; + output [7:0] RXNOTINTABLE; + output [7:0] RXRUNDISP; + output [7:0] TXKERR; + output [7:0] TXRUNDISP; + input DCLK; + input DEN; + input DWE; + input ENCHANSYNC; + input ENMCOMMAALIGN; + input ENPCOMMAALIGN; + input GREFCLK; + input POWERDOWN; + input REFCLK1; + input REFCLK2; + input RX1N; + input RX1P; + input RXBLOCKSYNC64B66BUSE; + input RXCLKSTABLE; + input RXCOMMADETUSE; + input RXCRCCLK; + input RXCRCDATAVALID; + input RXCRCINIT; + input RXCRCINTCLK; + input RXCRCPD; + input RXCRCRESET; + input RXDEC64B66BUSE; + input RXDEC8B10BUSE; + input RXDESCRAM64B66BUSE; + input RXIGNOREBTF; + input RXPMARESET; + input RXPOLARITY; + input RXRESET; + input RXSLIDE; + input RXSYNC; + input RXUSRCLK2; + input RXUSRCLK; + input TXCLKSTABLE; + input TXCRCCLK; + input TXCRCDATAVALID; + input TXCRCINIT; + input TXCRCINTCLK; + input TXCRCPD; + input TXCRCRESET; + input TXENC64B66BUSE; + input TXENC8B10BUSE; + input TXENOOB; + input TXGEARBOX64B66BUSE; + input TXINHIBIT; + input TXPMARESET; + input TXPOLARITY; + input TXRESET; + input TXSCRAM64B66BUSE; + input TXSYNC; + input TXUSRCLK2; + input TXUSRCLK; + input [15:0] DI; + input [1:0] LOOPBACK; + input [1:0] RXDATAWIDTH; + input [1:0] RXINTDATAWIDTH; + input [1:0] TXDATAWIDTH; + input [1:0] TXINTDATAWIDTH; + input [2:0] RXCRCDATAWIDTH; + input [2:0] TXCRCDATAWIDTH; + input [4:0] CHBONDI; + input [63:0] RXCRCIN; + input [63:0] TXCRCIN; + input [63:0] TXDATA; + input [7:0] DADDR; + input [7:0] TXBYPASS8B10B; + input [7:0] TXCHARDISPMODE; + input [7:0] TXCHARDISPVAL; + input [7:0] TXCHARISK; +endmodule + +module GT11_DUAL (...); + parameter ALIGN_COMMA_WORD_A = 1; + parameter ALIGN_COMMA_WORD_B = 1; + parameter BANDGAPSEL_A = "FALSE"; + parameter BANDGAPSEL_B = "FALSE"; + parameter BIASRESSEL_A = "TRUE"; + parameter BIASRESSEL_B = "TRUE"; + parameter CCCB_ARBITRATOR_DISABLE_A = "FALSE"; + parameter CCCB_ARBITRATOR_DISABLE_B = "FALSE"; + parameter CHAN_BOND_LIMIT_A = 16; + parameter CHAN_BOND_LIMIT_B = 16; + parameter CHAN_BOND_MODE_A = "NONE"; + parameter CHAN_BOND_MODE_B = "NONE"; + parameter CHAN_BOND_ONE_SHOT_A = "FALSE"; + parameter CHAN_BOND_ONE_SHOT_B = "FALSE"; + parameter CHAN_BOND_SEQ_1_1_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_1_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_2_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_2_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_3_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_3_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_4_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_4_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_1_MASK_A = 4'b0000; + parameter CHAN_BOND_SEQ_1_MASK_B = 4'b0000; + parameter CHAN_BOND_SEQ_2_1_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_1_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_2_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_2_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_3_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_3_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_4_A = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_4_B = 11'b00000000000; + parameter CHAN_BOND_SEQ_2_MASK_A = 4'b0000; + parameter CHAN_BOND_SEQ_2_MASK_B = 4'b0000; + parameter CHAN_BOND_SEQ_2_USE_A = "FALSE"; + parameter CHAN_BOND_SEQ_2_USE_B = "FALSE"; + parameter CHAN_BOND_SEQ_LEN_A = 1; + parameter CHAN_BOND_SEQ_LEN_B = 1; + parameter CLK_CORRECT_USE_A = "TRUE"; + parameter CLK_CORRECT_USE_B = "TRUE"; + parameter CLK_COR_8B10B_DE_A = "FALSE"; + parameter CLK_COR_8B10B_DE_B = "FALSE"; + parameter CLK_COR_MAX_LAT_A = 36; + parameter CLK_COR_MAX_LAT_B = 36; + parameter CLK_COR_MIN_LAT_A = 28; + parameter CLK_COR_MIN_LAT_B = 28; + parameter CLK_COR_SEQ_1_1_A = 11'b00000000000; + parameter CLK_COR_SEQ_1_1_B = 11'b00000000000; + parameter CLK_COR_SEQ_1_2_A = 11'b00000000000; + parameter CLK_COR_SEQ_1_2_B = 11'b00000000000; + parameter CLK_COR_SEQ_1_3_A = 11'b00000000000; + parameter CLK_COR_SEQ_1_3_B = 11'b00000000000; + parameter CLK_COR_SEQ_1_4_A = 11'b00000000000; + parameter CLK_COR_SEQ_1_4_B = 11'b00000000000; + parameter CLK_COR_SEQ_1_MASK_A = 4'b0000; + parameter CLK_COR_SEQ_1_MASK_B = 4'b0000; + parameter CLK_COR_SEQ_2_1_A = 11'b00000000000; + parameter CLK_COR_SEQ_2_1_B = 11'b00000000000; + parameter CLK_COR_SEQ_2_2_A = 11'b00000000000; + parameter CLK_COR_SEQ_2_2_B = 11'b00000000000; + parameter CLK_COR_SEQ_2_3_A = 11'b00000000000; + parameter CLK_COR_SEQ_2_3_B = 11'b00000000000; + parameter CLK_COR_SEQ_2_4_A = 11'b00000000000; + parameter CLK_COR_SEQ_2_4_B = 11'b00000000000; + parameter CLK_COR_SEQ_2_MASK_A = 4'b0000; + parameter CLK_COR_SEQ_2_MASK_B = 4'b0000; + parameter CLK_COR_SEQ_2_USE_A = "FALSE"; + parameter CLK_COR_SEQ_2_USE_B = "FALSE"; + parameter CLK_COR_SEQ_DROP_A = "FALSE"; + parameter CLK_COR_SEQ_DROP_B = "FALSE"; + parameter CLK_COR_SEQ_LEN_A = 1; + parameter CLK_COR_SEQ_LEN_B = 1; + parameter COMMA32_A = "FALSE"; + parameter COMMA32_B = "FALSE"; + parameter COMMA_10B_MASK_A = 10'h3FF; + parameter COMMA_10B_MASK_B = 10'h3FF; + parameter CYCLE_LIMIT_SEL_A = 2'b00; + parameter CYCLE_LIMIT_SEL_B = 2'b00; + parameter DCDR_FILTER_A = 3'b010; + parameter DCDR_FILTER_B = 3'b010; + parameter DEC_MCOMMA_DETECT_A = "TRUE"; + parameter DEC_MCOMMA_DETECT_B = "TRUE"; + parameter DEC_PCOMMA_DETECT_A = "TRUE"; + parameter DEC_PCOMMA_DETECT_B = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_A = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_B = "TRUE"; + parameter DIGRX_FWDCLK_A = 2'b00; + parameter DIGRX_FWDCLK_B = 2'b00; + parameter DIGRX_SYNC_MODE_A = "FALSE"; + parameter DIGRX_SYNC_MODE_B = "FALSE"; + parameter ENABLE_DCDR_A = "FALSE"; + parameter ENABLE_DCDR_B = "FALSE"; + parameter FDET_HYS_CAL_A = 3'b110; + parameter FDET_HYS_CAL_B = 3'b110; + parameter FDET_HYS_SEL_A = 3'b110; + parameter FDET_HYS_SEL_B = 3'b110; + parameter FDET_LCK_CAL_A = 3'b101; + parameter FDET_LCK_CAL_B = 3'b101; + parameter FDET_LCK_SEL_A = 3'b101; + parameter FDET_LCK_SEL_B = 3'b101; + parameter IREFBIASMODE_A = 2'b11; + parameter IREFBIASMODE_B = 2'b11; + parameter LOOPCAL_WAIT_A = 2'b00; + parameter LOOPCAL_WAIT_B = 2'b00; + parameter MCOMMA_32B_VALUE_A = 32'hA1A1A2A2; + parameter MCOMMA_32B_VALUE_B = 32'hA1A1A2A2; + parameter MCOMMA_DETECT_A = "TRUE"; + parameter MCOMMA_DETECT_B = "TRUE"; + parameter OPPOSITE_SELECT_A = "FALSE"; + parameter OPPOSITE_SELECT_B = "FALSE"; + parameter PCOMMA_32B_VALUE_A = 32'hA1A1A2A2; + parameter PCOMMA_32B_VALUE_B = 32'hA1A1A2A2; + parameter PCOMMA_DETECT_A = "TRUE"; + parameter PCOMMA_DETECT_B = "TRUE"; + parameter PCS_BIT_SLIP_A = "FALSE"; + parameter PCS_BIT_SLIP_B = "FALSE"; + parameter PMACLKENABLE_A = "TRUE"; + parameter PMACLKENABLE_B = "TRUE"; + parameter PMACOREPWRENABLE_A = "TRUE"; + parameter PMACOREPWRENABLE_B = "TRUE"; + parameter PMAIREFTRIM_A = 4'b0111; + parameter PMAIREFTRIM_B = 4'b0111; + parameter PMAVBGCTRL_A = 5'b00000; + parameter PMAVBGCTRL_B = 5'b00000; + parameter PMAVREFTRIM_A = 4'b0111; + parameter PMAVREFTRIM_B = 4'b0111; + parameter PMA_BIT_SLIP_A = "FALSE"; + parameter PMA_BIT_SLIP_B = "FALSE"; + parameter POWER_ENABLE_A = "TRUE"; + parameter POWER_ENABLE_B = "TRUE"; + parameter REPEATER_A = "FALSE"; + parameter REPEATER_B = "FALSE"; + parameter RXACTST_A = "FALSE"; + parameter RXACTST_B = "FALSE"; + parameter RXAFEEQ_A = 9'b000000000; + parameter RXAFEEQ_B = 9'b000000000; + parameter RXAFEPD_A = "FALSE"; + parameter RXAFEPD_B = "FALSE"; + parameter RXAFETST_A = "FALSE"; + parameter RXAFETST_B = "FALSE"; + parameter RXAPD_A = "FALSE"; + parameter RXAPD_B = "FALSE"; + parameter RXASYNCDIVIDE_A = 2'b00; + parameter RXASYNCDIVIDE_B = 2'b00; + parameter RXBY_32_A = "TRUE"; + parameter RXBY_32_B = "TRUE"; + parameter RXCDRLOS_A = 6'b000000; + parameter RXCDRLOS_B = 6'b000000; + parameter RXCLK0_FORCE_PMACLK_A = "FALSE"; + parameter RXCLK0_FORCE_PMACLK_B = "FALSE"; + parameter RXCLKMODE_A = 6'b110001; + parameter RXCLKMODE_B = 6'b110001; + parameter RXCMADJ_A = 2'b10; + parameter RXCMADJ_B = 2'b10; + parameter RXCPSEL_A = "TRUE"; + parameter RXCPSEL_B = "TRUE"; + parameter RXCPTST_A = "FALSE"; + parameter RXCPTST_B = "FALSE"; + parameter RXCRCCLOCKDOUBLE_A = "FALSE"; + parameter RXCRCCLOCKDOUBLE_B = "FALSE"; + parameter RXCRCENABLE_A = "FALSE"; + parameter RXCRCENABLE_B = "FALSE"; + parameter RXCRCINITVAL_A = 32'h00000000; + parameter RXCRCINITVAL_B = 32'h00000000; + parameter RXCRCINVERTGEN_A = "FALSE"; + parameter RXCRCINVERTGEN_B = "FALSE"; + parameter RXCRCSAMECLOCK_A = "FALSE"; + parameter RXCRCSAMECLOCK_B = "FALSE"; + parameter RXCTRL1_A = 10'h006; + parameter RXCTRL1_B = 10'h006; + parameter RXCYCLE_LIMIT_SEL_A = 2'b00; + parameter RXCYCLE_LIMIT_SEL_B = 2'b00; + parameter RXDATA_SEL_A = 2'b00; + parameter RXDATA_SEL_B = 2'b00; + parameter RXDCCOUPLE_A = "FALSE"; + parameter RXDCCOUPLE_B = "FALSE"; + parameter RXDIGRESET_A = "FALSE"; + parameter RXDIGRESET_B = "FALSE"; + parameter RXDIGRX_A = "FALSE"; + parameter RXDIGRX_B = "FALSE"; + parameter RXEQ_A = 64'h4000000000000000; + parameter RXEQ_B = 64'h4000000000000000; + parameter RXFDCAL_CLOCK_DIVIDE_A = "NONE"; + parameter RXFDCAL_CLOCK_DIVIDE_B = "NONE"; + parameter RXFDET_HYS_CAL_A = 3'b110; + parameter RXFDET_HYS_CAL_B = 3'b110; + parameter RXFDET_HYS_SEL_A = 3'b110; + parameter RXFDET_HYS_SEL_B = 3'b110; + parameter RXFDET_LCK_CAL_A = 3'b101; + parameter RXFDET_LCK_CAL_B = 3'b101; + parameter RXFDET_LCK_SEL_A = 3'b101; + parameter RXFDET_LCK_SEL_B = 3'b101; + parameter RXFECONTROL1_A = 2'b00; + parameter RXFECONTROL1_B = 2'b00; + parameter RXFECONTROL2_A = 3'b000; + parameter RXFECONTROL2_B = 3'b000; + parameter RXFETUNE_A = 2'b01; + parameter RXFETUNE_B = 2'b01; + parameter RXLB_A = "FALSE"; + parameter RXLB_B = "FALSE"; + parameter RXLKADJ_A = 5'b00000; + parameter RXLKADJ_B = 5'b00000; + parameter RXLKAPD_A = "FALSE"; + parameter RXLKAPD_B = "FALSE"; + parameter RXLOOPCAL_WAIT_A = 2'b00; + parameter RXLOOPCAL_WAIT_B = 2'b00; + parameter RXLOOPFILT_A = 4'b0111; + parameter RXLOOPFILT_B = 4'b0111; + parameter RXOUTDIV2SEL_A = 1; + parameter RXOUTDIV2SEL_B = 1; + parameter RXPDDTST_A = "FALSE"; + parameter RXPDDTST_B = "FALSE"; + parameter RXPD_A = "FALSE"; + parameter RXPD_B = "FALSE"; + parameter RXPLLNDIVSEL_A = 8; + parameter RXPLLNDIVSEL_B = 8; + parameter RXPMACLKSEL_A = "REFCLK1"; + parameter RXPMACLKSEL_B = "REFCLK1"; + parameter RXRCPADJ_A = 3'b011; + parameter RXRCPADJ_B = 3'b011; + parameter RXRCPPD_A = "FALSE"; + parameter RXRCPPD_B = "FALSE"; + parameter RXRECCLK1_USE_SYNC_A = "FALSE"; + parameter RXRECCLK1_USE_SYNC_B = "FALSE"; + parameter RXRIBADJ_A = 2'b11; + parameter RXRIBADJ_B = 2'b11; + parameter RXRPDPD_A = "FALSE"; + parameter RXRPDPD_B = "FALSE"; + parameter RXRSDPD_A = "FALSE"; + parameter RXRSDPD_B = "FALSE"; + parameter RXSLOWDOWN_CAL_A = 2'b00; + parameter RXSLOWDOWN_CAL_B = 2'b00; + parameter RXUSRDIVISOR_A = 1; + parameter RXUSRDIVISOR_B = 1; + parameter RXVCODAC_INIT_A = 10'b1010000000; + parameter RXVCODAC_INIT_B = 10'b1010000000; + parameter RXVCO_CTRL_ENABLE_A = "TRUE"; + parameter RXVCO_CTRL_ENABLE_B = "TRUE"; + parameter RX_BUFFER_USE_A = "TRUE"; + parameter RX_BUFFER_USE_B = "TRUE"; + parameter RX_CLOCK_DIVIDER_A = 2'b00; + parameter RX_CLOCK_DIVIDER_B = 2'b00; + parameter RX_LOS_INVALID_INCR_A = 1; + parameter RX_LOS_INVALID_INCR_B = 1; + parameter RX_LOS_THRESHOLD_A = 4; + parameter RX_LOS_THRESHOLD_B = 4; + parameter SAMPLE_8X_A = "FALSE"; + parameter SAMPLE_8X_B = "FALSE"; + parameter SH_CNT_MAX_A = 64; + parameter SH_CNT_MAX_B = 64; + parameter SH_INVALID_CNT_MAX_A = 16; + parameter SH_INVALID_CNT_MAX_B = 16; + parameter SLOWDOWN_CAL_A = 2'b00; + parameter SLOWDOWN_CAL_B = 2'b00; + parameter TXABPMACLKSEL_A = "REFCLK1"; + parameter TXABPMACLKSEL_B = "REFCLK1"; + parameter TXAPD_A = "FALSE"; + parameter TXAPD_B = "FALSE"; + parameter TXAREFBIASSEL_A = "FALSE"; + parameter TXAREFBIASSEL_B = "FALSE"; + parameter TXASYNCDIVIDE_A = 2'b00; + parameter TXASYNCDIVIDE_B = 2'b00; + parameter TXCLK0_FORCE_PMACLK_A = "FALSE"; + parameter TXCLK0_FORCE_PMACLK_B = "FALSE"; + parameter TXCLKMODE_A = 4'b1001; + parameter TXCLKMODE_B = 4'b1001; + parameter TXCPSEL_A = "TRUE"; + parameter TXCPSEL_B = "TRUE"; + parameter TXCRCCLOCKDOUBLE_A = "FALSE"; + parameter TXCRCCLOCKDOUBLE_B = "FALSE"; + parameter TXCRCENABLE_A = "FALSE"; + parameter TXCRCENABLE_B = "FALSE"; + parameter TXCRCINITVAL_A = 32'h00000000; + parameter TXCRCINITVAL_B = 32'h00000000; + parameter TXCRCINVERTGEN_A = "FALSE"; + parameter TXCRCINVERTGEN_B = "FALSE"; + parameter TXCRCSAMECLOCK_A = "FALSE"; + parameter TXCRCSAMECLOCK_B = "FALSE"; + parameter TXCTRL1_A = 10'h006; + parameter TXCTRL1_B = 10'h006; + parameter TXDATA_SEL_A = 2'b00; + parameter TXDATA_SEL_B = 2'b00; + parameter TXDAT_PRDRV_DAC_A = 3'b111; + parameter TXDAT_PRDRV_DAC_B = 3'b111; + parameter TXDAT_TAP_DAC_A = 5'b10110; + parameter TXDAT_TAP_DAC_B = 5'b10110; + parameter TXDIGPD_A = "FALSE"; + parameter TXDIGPD_B = "FALSE"; + parameter TXFDCAL_CLOCK_DIVIDE_A = "NONE"; + parameter TXFDCAL_CLOCK_DIVIDE_B = "NONE"; + parameter TXHIGHSIGNALEN_A = "TRUE"; + parameter TXHIGHSIGNALEN_B = "TRUE"; + parameter TXLOOPFILT_A = 4'b0111; + parameter TXLOOPFILT_B = 4'b0111; + parameter TXLVLSHFTPD_A = "FALSE"; + parameter TXLVLSHFTPD_B = "FALSE"; + parameter TXOUTCLK1_USE_SYNC_A = "FALSE"; + parameter TXOUTCLK1_USE_SYNC_B = "FALSE"; + parameter TXOUTDIV2SEL_A = 1; + parameter TXOUTDIV2SEL_B = 1; + parameter TXPD_A = "FALSE"; + parameter TXPD_B = "FALSE"; + parameter TXPHASESEL_A = "FALSE"; + parameter TXPHASESEL_B = "FALSE"; + parameter TXPLLNDIVSEL_A = 8; + parameter TXPLLNDIVSEL_B = 8; + parameter TXPOST_PRDRV_DAC_A = 3'b111; + parameter TXPOST_PRDRV_DAC_B = 3'b111; + parameter TXPOST_TAP_DAC_A = 5'b01110; + parameter TXPOST_TAP_DAC_B = 5'b01110; + parameter TXPOST_TAP_PD_A = "TRUE"; + parameter TXPOST_TAP_PD_B = "TRUE"; + parameter TXPRE_PRDRV_DAC_A = 3'b111; + parameter TXPRE_PRDRV_DAC_B = 3'b111; + parameter TXPRE_TAP_DAC_A = 5'b00000; + parameter TXPRE_TAP_DAC_B = 5'b00000; + parameter TXPRE_TAP_PD_A = "TRUE"; + parameter TXPRE_TAP_PD_B = "TRUE"; + parameter TXSLEWRATE_A = "FALSE"; + parameter TXSLEWRATE_B = "FALSE"; + parameter TXTERMTRIM_A = 4'b1100; + parameter TXTERMTRIM_B = 4'b1100; + parameter TX_BUFFER_USE_A = "TRUE"; + parameter TX_BUFFER_USE_B = "TRUE"; + parameter TX_CLOCK_DIVIDER_A = 2'b00; + parameter TX_CLOCK_DIVIDER_B = 2'b00; + parameter VCODAC_INIT_A = 10'b1010000000; + parameter VCODAC_INIT_B = 10'b1010000000; + parameter VCO_CTRL_ENABLE_A = "TRUE"; + parameter VCO_CTRL_ENABLE_B = "TRUE"; + parameter VREFBIASMODE_A = 2'b11; + parameter VREFBIASMODE_B = 2'b11; + output DRDYA; + output DRDYB; + output RXBUFERRA; + output RXBUFERRB; + output RXCALFAILA; + output RXCALFAILB; + output RXCOMMADETA; + output RXCOMMADETB; + output RXCYCLELIMITA; + output RXCYCLELIMITB; + output RXLOCKA; + output RXLOCKB; + output RXMCLKA; + output RXMCLKB; + output RXPCSHCLKOUTA; + output RXPCSHCLKOUTB; + output RXREALIGNA; + output RXREALIGNB; + output RXRECCLK1A; + output RXRECCLK1B; + output RXRECCLK2A; + output RXRECCLK2B; + output RXSIGDETA; + output RXSIGDETB; + output TX1NA; + output TX1NB; + output TX1PA; + output TX1PB; + output TXBUFERRA; + output TXBUFERRB; + output TXCALFAILA; + output TXCALFAILB; + output TXCYCLELIMITA; + output TXCYCLELIMITB; + output TXLOCKA; + output TXLOCKB; + output TXOUTCLK1A; + output TXOUTCLK1B; + output TXOUTCLK2A; + output TXOUTCLK2B; + output TXPCSHCLKOUTA; + output TXPCSHCLKOUTB; + output [15:0] DOA; + output [15:0] DOB; + output [1:0] RXLOSSOFSYNCA; + output [1:0] RXLOSSOFSYNCB; + output [31:0] RXCRCOUTA; + output [31:0] RXCRCOUTB; + output [31:0] TXCRCOUTA; + output [31:0] TXCRCOUTB; + output [4:0] CHBONDOA; + output [4:0] CHBONDOB; + output [5:0] RXSTATUSA; + output [5:0] RXSTATUSB; + output [63:0] RXDATAA; + output [63:0] RXDATAB; + output [7:0] RXCHARISCOMMAA; + output [7:0] RXCHARISCOMMAB; + output [7:0] RXCHARISKA; + output [7:0] RXCHARISKB; + output [7:0] RXDISPERRA; + output [7:0] RXDISPERRB; + output [7:0] RXNOTINTABLEA; + output [7:0] RXNOTINTABLEB; + output [7:0] RXRUNDISPA; + output [7:0] RXRUNDISPB; + output [7:0] TXKERRA; + output [7:0] TXKERRB; + output [7:0] TXRUNDISPA; + output [7:0] TXRUNDISPB; + input DCLKA; + input DCLKB; + input DENA; + input DENB; + input DWEA; + input DWEB; + input ENCHANSYNCA; + input ENCHANSYNCB; + input ENMCOMMAALIGNA; + input ENMCOMMAALIGNB; + input ENPCOMMAALIGNA; + input ENPCOMMAALIGNB; + input GREFCLKA; + input GREFCLKB; + input POWERDOWNA; + input POWERDOWNB; + input REFCLK1A; + input REFCLK1B; + input REFCLK2A; + input REFCLK2B; + input RX1NA; + input RX1NB; + input RX1PA; + input RX1PB; + input RXBLOCKSYNC64B66BUSEA; + input RXBLOCKSYNC64B66BUSEB; + input RXCLKSTABLEA; + input RXCLKSTABLEB; + input RXCOMMADETUSEA; + input RXCOMMADETUSEB; + input RXCRCCLKA; + input RXCRCCLKB; + input RXCRCDATAVALIDA; + input RXCRCDATAVALIDB; + input RXCRCINITA; + input RXCRCINITB; + input RXCRCINTCLKA; + input RXCRCINTCLKB; + input RXCRCPDA; + input RXCRCPDB; + input RXCRCRESETA; + input RXCRCRESETB; + input RXDEC64B66BUSEA; + input RXDEC64B66BUSEB; + input RXDEC8B10BUSEA; + input RXDEC8B10BUSEB; + input RXDESCRAM64B66BUSEA; + input RXDESCRAM64B66BUSEB; + input RXIGNOREBTFA; + input RXIGNOREBTFB; + input RXPMARESETA; + input RXPMARESETB; + input RXPOLARITYA; + input RXPOLARITYB; + input RXRESETA; + input RXRESETB; + input RXSLIDEA; + input RXSLIDEB; + input RXSYNCA; + input RXSYNCB; + input RXUSRCLK2A; + input RXUSRCLK2B; + input RXUSRCLKA; + input RXUSRCLKB; + input TXCLKSTABLEA; + input TXCLKSTABLEB; + input TXCRCCLKA; + input TXCRCCLKB; + input TXCRCDATAVALIDA; + input TXCRCDATAVALIDB; + input TXCRCINITA; + input TXCRCINITB; + input TXCRCINTCLKA; + input TXCRCINTCLKB; + input TXCRCPDA; + input TXCRCPDB; + input TXCRCRESETA; + input TXCRCRESETB; + input TXENC64B66BUSEA; + input TXENC64B66BUSEB; + input TXENC8B10BUSEA; + input TXENC8B10BUSEB; + input TXENOOBA; + input TXENOOBB; + input TXGEARBOX64B66BUSEA; + input TXGEARBOX64B66BUSEB; + input TXINHIBITA; + input TXINHIBITB; + input TXPMARESETA; + input TXPMARESETB; + input TXPOLARITYA; + input TXPOLARITYB; + input TXRESETA; + input TXRESETB; + input TXSCRAM64B66BUSEA; + input TXSCRAM64B66BUSEB; + input TXSYNCA; + input TXSYNCB; + input TXUSRCLK2A; + input TXUSRCLK2B; + input TXUSRCLKA; + input TXUSRCLKB; + input [15:0] DIA; + input [15:0] DIB; + input [1:0] LOOPBACKA; + input [1:0] LOOPBACKB; + input [1:0] RXDATAWIDTHA; + input [1:0] RXDATAWIDTHB; + input [1:0] RXINTDATAWIDTHA; + input [1:0] RXINTDATAWIDTHB; + input [1:0] TXDATAWIDTHA; + input [1:0] TXDATAWIDTHB; + input [1:0] TXINTDATAWIDTHA; + input [1:0] TXINTDATAWIDTHB; + input [2:0] RXCRCDATAWIDTHA; + input [2:0] RXCRCDATAWIDTHB; + input [2:0] TXCRCDATAWIDTHA; + input [2:0] TXCRCDATAWIDTHB; + input [4:0] CHBONDIA; + input [4:0] CHBONDIB; + input [63:0] RXCRCINA; + input [63:0] RXCRCINB; + input [63:0] TXCRCINA; + input [63:0] TXCRCINB; + input [63:0] TXDATAA; + input [63:0] TXDATAB; + input [7:0] DADDRA; + input [7:0] DADDRB; + input [7:0] TXBYPASS8B10BA; + input [7:0] TXBYPASS8B10BB; + input [7:0] TXCHARDISPMODEA; + input [7:0] TXCHARDISPMODEB; + input [7:0] TXCHARDISPVALA; + input [7:0] TXCHARDISPVALB; + input [7:0] TXCHARISKA; + input [7:0] TXCHARISKB; +endmodule + +module GT11CLK (...); + parameter REFCLKSEL = "MGTCLK"; + parameter SYNCLK1OUTEN = "ENABLE"; + parameter SYNCLK2OUTEN = "DISABLE"; + output SYNCLK1OUT; + output SYNCLK2OUT; + input MGTCLKN; + input MGTCLKP; + input REFCLK; + input RXBCLK; + input SYNCLK1IN; + input SYNCLK2IN; +endmodule + +module GT11CLK_MGT (...); + parameter SYNCLK1OUTEN = "ENABLE"; + parameter SYNCLK2OUTEN = "DISABLE"; + output SYNCLK1OUT; + output SYNCLK2OUT; + input MGTCLKN; + input MGTCLKP; +endmodule + +module GTP_DUAL (...); + parameter AC_CAP_DIS_0 = "TRUE"; + parameter AC_CAP_DIS_1 = "TRUE"; + parameter CHAN_BOND_MODE_0 = "OFF"; + parameter CHAN_BOND_MODE_1 = "OFF"; + parameter CHAN_BOND_SEQ_2_USE_0 = "TRUE"; + parameter CHAN_BOND_SEQ_2_USE_1 = "TRUE"; + parameter CLKINDC_B = "TRUE"; + parameter CLK_CORRECT_USE_0 = "TRUE"; + parameter CLK_CORRECT_USE_1 = "TRUE"; + parameter CLK_COR_INSERT_IDLE_FLAG_0 = "FALSE"; + parameter CLK_COR_INSERT_IDLE_FLAG_1 = "FALSE"; + parameter CLK_COR_KEEP_IDLE_0 = "FALSE"; + parameter CLK_COR_KEEP_IDLE_1 = "FALSE"; + parameter CLK_COR_PRECEDENCE_0 = "TRUE"; + parameter CLK_COR_PRECEDENCE_1 = "TRUE"; + parameter CLK_COR_SEQ_2_USE_0 = "FALSE"; + parameter CLK_COR_SEQ_2_USE_1 = "FALSE"; + parameter COMMA_DOUBLE_0 = "FALSE"; + parameter COMMA_DOUBLE_1 = "FALSE"; + parameter DEC_MCOMMA_DETECT_0 = "TRUE"; + parameter DEC_MCOMMA_DETECT_1 = "TRUE"; + parameter DEC_PCOMMA_DETECT_0 = "TRUE"; + parameter DEC_PCOMMA_DETECT_1 = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_0 = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_1 = "TRUE"; + parameter MCOMMA_DETECT_0 = "TRUE"; + parameter MCOMMA_DETECT_1 = "TRUE"; + parameter OVERSAMPLE_MODE = "FALSE"; + parameter PCI_EXPRESS_MODE_0 = "TRUE"; + parameter PCI_EXPRESS_MODE_1 = "TRUE"; + parameter PCOMMA_DETECT_0 = "TRUE"; + parameter PCOMMA_DETECT_1 = "TRUE"; + parameter PLL_SATA_0 = "FALSE"; + parameter PLL_SATA_1 = "FALSE"; + parameter RCV_TERM_GND_0 = "TRUE"; + parameter RCV_TERM_GND_1 = "TRUE"; + parameter RCV_TERM_MID_0 = "FALSE"; + parameter RCV_TERM_MID_1 = "FALSE"; + parameter RCV_TERM_VTTRX_0 = "FALSE"; + parameter RCV_TERM_VTTRX_1 = "FALSE"; + parameter RX_BUFFER_USE_0 = "TRUE"; + parameter RX_BUFFER_USE_1 = "TRUE"; + parameter RX_DECODE_SEQ_MATCH_0 = "TRUE"; + parameter RX_DECODE_SEQ_MATCH_1 = "TRUE"; + parameter RX_LOSS_OF_SYNC_FSM_0 = "FALSE"; + parameter RX_LOSS_OF_SYNC_FSM_1 = "FALSE"; + parameter RX_SLIDE_MODE_0 = "PCS"; + parameter RX_SLIDE_MODE_1 = "PCS"; + parameter RX_STATUS_FMT_0 = "PCIE"; + parameter RX_STATUS_FMT_1 = "PCIE"; + parameter RX_XCLK_SEL_0 = "RXREC"; + parameter RX_XCLK_SEL_1 = "RXREC"; + parameter SIM_PLL_PERDIV2 = 9'h190; + parameter SIM_RECEIVER_DETECT_PASS0 = "FALSE"; + parameter SIM_RECEIVER_DETECT_PASS1 = "FALSE"; + parameter TERMINATION_OVRD = "FALSE"; + parameter TX_BUFFER_USE_0 = "TRUE"; + parameter TX_BUFFER_USE_1 = "TRUE"; + parameter TX_DIFF_BOOST_0 = "TRUE"; + parameter TX_DIFF_BOOST_1 = "TRUE"; + parameter TX_XCLK_SEL_0 = "TXUSR"; + parameter TX_XCLK_SEL_1 = "TXUSR"; + parameter [15:0] TRANS_TIME_FROM_P2_0 = 16'h003c; + parameter [15:0] TRANS_TIME_FROM_P2_1 = 16'h003c; + parameter [15:0] TRANS_TIME_NON_P2_0 = 16'h0019; + parameter [15:0] TRANS_TIME_NON_P2_1 = 16'h0019; + parameter [15:0] TRANS_TIME_TO_P2_0 = 16'h0064; + parameter [15:0] TRANS_TIME_TO_P2_1 = 16'h0064; + parameter [24:0] PMA_RX_CFG_0 = 25'h09f0089; + parameter [24:0] PMA_RX_CFG_1 = 25'h09f0089; + parameter [26:0] PMA_CDR_SCAN_0 = 27'h6c07640; + parameter [26:0] PMA_CDR_SCAN_1 = 27'h6c07640; + parameter [27:0] PCS_COM_CFG = 28'h1680a0e; + parameter [2:0] OOBDETECT_THRESHOLD_0 = 3'b001; + parameter [2:0] OOBDETECT_THRESHOLD_1 = 3'b001; + parameter [2:0] SATA_BURST_VAL_0 = 3'b100; + parameter [2:0] SATA_BURST_VAL_1 = 3'b100; + parameter [2:0] SATA_IDLE_VAL_0 = 3'b011; + parameter [2:0] SATA_IDLE_VAL_1 = 3'b011; + parameter [31:0] PRBS_ERR_THRESHOLD_0 = 32'h1; + parameter [31:0] PRBS_ERR_THRESHOLD_1 = 32'h1; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_0 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_1 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_0 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_1 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_1_ENABLE_0 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_1_ENABLE_1 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_2_ENABLE_0 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_2_ENABLE_1 = 4'b1111; + parameter [3:0] COM_BURST_VAL_0 = 4'b1111; + parameter [3:0] COM_BURST_VAL_1 = 4'b1111; + parameter [4:0] TERMINATION_CTRL = 5'b10100; + parameter [4:0] TXRX_INVERT_0 = 5'b00000; + parameter [4:0] TXRX_INVERT_1 = 5'b00000; + parameter [9:0] CHAN_BOND_SEQ_1_1_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_1_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_2_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_2_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_4_0 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_1_4_1 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_1_0 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_1_1 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_2_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_2_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_4_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_4_1 = 10'b0100111100; + parameter [9:0] CLK_COR_SEQ_1_1_0 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_2_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_3_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_3_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_4_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_4_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_1_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_1_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_2_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_2_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_3_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_3_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_4_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_4_1 = 10'b0; + parameter [9:0] COMMA_10B_ENABLE_0 = 10'b1111111111; + parameter [9:0] COMMA_10B_ENABLE_1 = 10'b1111111111; + parameter [9:0] MCOMMA_10B_VALUE_0 = 10'b1010000011; + parameter [9:0] MCOMMA_10B_VALUE_1 = 10'b1010000011; + parameter [9:0] PCOMMA_10B_VALUE_0 = 10'b0101111100; + parameter [9:0] PCOMMA_10B_VALUE_1 = 10'b0101111100; + parameter ALIGN_COMMA_WORD_0 = 1; + parameter ALIGN_COMMA_WORD_1 = 1; + parameter CHAN_BOND_1_MAX_SKEW_0 = 7; + parameter CHAN_BOND_1_MAX_SKEW_1 = 7; + parameter CHAN_BOND_2_MAX_SKEW_0 = 1; + parameter CHAN_BOND_2_MAX_SKEW_1 = 1; + parameter CHAN_BOND_LEVEL_0 = 0; + parameter CHAN_BOND_LEVEL_1 = 0; + parameter CHAN_BOND_SEQ_LEN_0 = 4; + parameter CHAN_BOND_SEQ_LEN_1 = 4; + parameter CLK25_DIVIDER = 4; + parameter CLK_COR_ADJ_LEN_0 = 1; + parameter CLK_COR_ADJ_LEN_1 = 1; + parameter CLK_COR_DET_LEN_0 = 1; + parameter CLK_COR_DET_LEN_1 = 1; + parameter CLK_COR_MAX_LAT_0 = 18; + parameter CLK_COR_MAX_LAT_1 = 18; + parameter CLK_COR_MIN_LAT_0 = 16; + parameter CLK_COR_MIN_LAT_1 = 16; + parameter CLK_COR_REPEAT_WAIT_0 = 5; + parameter CLK_COR_REPEAT_WAIT_1 = 5; + parameter OOB_CLK_DIVIDER = 4; + parameter PLL_DIVSEL_FB = 5; + parameter PLL_DIVSEL_REF = 2; + parameter PLL_RXDIVSEL_OUT_0 = 1; + parameter PLL_RXDIVSEL_OUT_1 = 1; + parameter PLL_TXDIVSEL_COMM_OUT = 1; + parameter PLL_TXDIVSEL_OUT_0 = 1; + parameter PLL_TXDIVSEL_OUT_1 = 1; + parameter RX_LOS_INVALID_INCR_0 = 8; + parameter RX_LOS_INVALID_INCR_1 = 8; + parameter RX_LOS_THRESHOLD_0 = 128; + parameter RX_LOS_THRESHOLD_1 = 128; + parameter SATA_MAX_BURST_0 = 7; + parameter SATA_MAX_BURST_1 = 7; + parameter SATA_MAX_INIT_0 = 22; + parameter SATA_MAX_INIT_1 = 22; + parameter SATA_MAX_WAKE_0 = 7; + parameter SATA_MAX_WAKE_1 = 7; + parameter SATA_MIN_BURST_0 = 4; + parameter SATA_MIN_BURST_1 = 4; + parameter SATA_MIN_INIT_0 = 12; + parameter SATA_MIN_INIT_1 = 12; + parameter SATA_MIN_WAKE_0 = 4; + parameter SATA_MIN_WAKE_1 = 4; + parameter SIM_GTPRESET_SPEEDUP = 0; + parameter TERMINATION_IMP_0 = 50; + parameter TERMINATION_IMP_1 = 50; + parameter TX_SYNC_FILTERB = 1; + output DRDY; + output PHYSTATUS0; + output PHYSTATUS1; + output PLLLKDET; + output REFCLKOUT; + output RESETDONE0; + output RESETDONE1; + output RXBYTEISALIGNED0; + output RXBYTEISALIGNED1; + output RXBYTEREALIGN0; + output RXBYTEREALIGN1; + output RXCHANBONDSEQ0; + output RXCHANBONDSEQ1; + output RXCHANISALIGNED0; + output RXCHANISALIGNED1; + output RXCHANREALIGN0; + output RXCHANREALIGN1; + output RXCOMMADET0; + output RXCOMMADET1; + output RXELECIDLE0; + output RXELECIDLE1; + output RXOVERSAMPLEERR0; + output RXOVERSAMPLEERR1; + output RXPRBSERR0; + output RXPRBSERR1; + output RXRECCLK0; + output RXRECCLK1; + output RXVALID0; + output RXVALID1; + output TXN0; + output TXN1; + output TXOUTCLK0; + output TXOUTCLK1; + output TXP0; + output TXP1; + output [15:0] DO; + output [15:0] RXDATA0; + output [15:0] RXDATA1; + output [1:0] RXCHARISCOMMA0; + output [1:0] RXCHARISCOMMA1; + output [1:0] RXCHARISK0; + output [1:0] RXCHARISK1; + output [1:0] RXDISPERR0; + output [1:0] RXDISPERR1; + output [1:0] RXLOSSOFSYNC0; + output [1:0] RXLOSSOFSYNC1; + output [1:0] RXNOTINTABLE0; + output [1:0] RXNOTINTABLE1; + output [1:0] RXRUNDISP0; + output [1:0] RXRUNDISP1; + output [1:0] TXBUFSTATUS0; + output [1:0] TXBUFSTATUS1; + output [1:0] TXKERR0; + output [1:0] TXKERR1; + output [1:0] TXRUNDISP0; + output [1:0] TXRUNDISP1; + output [2:0] RXBUFSTATUS0; + output [2:0] RXBUFSTATUS1; + output [2:0] RXCHBONDO0; + output [2:0] RXCHBONDO1; + output [2:0] RXCLKCORCNT0; + output [2:0] RXCLKCORCNT1; + output [2:0] RXSTATUS0; + output [2:0] RXSTATUS1; + input CLKIN; + input DCLK; + input DEN; + input DWE; + input GTPRESET; + input INTDATAWIDTH; + input PLLLKDETEN; + input PLLPOWERDOWN; + input PRBSCNTRESET0; + input PRBSCNTRESET1; + input REFCLKPWRDNB; + input RXBUFRESET0; + input RXBUFRESET1; + input RXCDRRESET0; + input RXCDRRESET1; + input RXCOMMADETUSE0; + input RXCOMMADETUSE1; + input RXDATAWIDTH0; + input RXDATAWIDTH1; + input RXDEC8B10BUSE0; + input RXDEC8B10BUSE1; + input RXELECIDLERESET0; + input RXELECIDLERESET1; + input RXENCHANSYNC0; + input RXENCHANSYNC1; + input RXENELECIDLERESETB; + input RXENEQB0; + input RXENEQB1; + input RXENMCOMMAALIGN0; + input RXENMCOMMAALIGN1; + input RXENPCOMMAALIGN0; + input RXENPCOMMAALIGN1; + input RXENSAMPLEALIGN0; + input RXENSAMPLEALIGN1; + input RXN0; + input RXN1; + input RXP0; + input RXP1; + input RXPMASETPHASE0; + input RXPMASETPHASE1; + input RXPOLARITY0; + input RXPOLARITY1; + input RXRESET0; + input RXRESET1; + input RXSLIDE0; + input RXSLIDE1; + input RXUSRCLK0; + input RXUSRCLK1; + input RXUSRCLK20; + input RXUSRCLK21; + input TXCOMSTART0; + input TXCOMSTART1; + input TXCOMTYPE0; + input TXCOMTYPE1; + input TXDATAWIDTH0; + input TXDATAWIDTH1; + input TXDETECTRX0; + input TXDETECTRX1; + input TXELECIDLE0; + input TXELECIDLE1; + input TXENC8B10BUSE0; + input TXENC8B10BUSE1; + input TXENPMAPHASEALIGN; + input TXINHIBIT0; + input TXINHIBIT1; + input TXPMASETPHASE; + input TXPOLARITY0; + input TXPOLARITY1; + input TXRESET0; + input TXRESET1; + input TXUSRCLK0; + input TXUSRCLK1; + input TXUSRCLK20; + input TXUSRCLK21; + input [15:0] DI; + input [15:0] TXDATA0; + input [15:0] TXDATA1; + input [1:0] RXENPRBSTST0; + input [1:0] RXENPRBSTST1; + input [1:0] RXEQMIX0; + input [1:0] RXEQMIX1; + input [1:0] RXPOWERDOWN0; + input [1:0] RXPOWERDOWN1; + input [1:0] TXBYPASS8B10B0; + input [1:0] TXBYPASS8B10B1; + input [1:0] TXCHARDISPMODE0; + input [1:0] TXCHARDISPMODE1; + input [1:0] TXCHARDISPVAL0; + input [1:0] TXCHARDISPVAL1; + input [1:0] TXCHARISK0; + input [1:0] TXCHARISK1; + input [1:0] TXENPRBSTST0; + input [1:0] TXENPRBSTST1; + input [1:0] TXPOWERDOWN0; + input [1:0] TXPOWERDOWN1; + input [2:0] LOOPBACK0; + input [2:0] LOOPBACK1; + input [2:0] RXCHBONDI0; + input [2:0] RXCHBONDI1; + input [2:0] TXBUFDIFFCTRL0; + input [2:0] TXBUFDIFFCTRL1; + input [2:0] TXDIFFCTRL0; + input [2:0] TXDIFFCTRL1; + input [2:0] TXPREEMPHASIS0; + input [2:0] TXPREEMPHASIS1; + input [3:0] GTPTEST; + input [3:0] RXEQPOLE0; + input [3:0] RXEQPOLE1; + input [6:0] DADDR; +endmodule + +module GTX_DUAL (...); + parameter STEPPING = "0"; + parameter AC_CAP_DIS_0 = "TRUE"; + parameter AC_CAP_DIS_1 = "TRUE"; + parameter CHAN_BOND_KEEP_ALIGN_0 = "FALSE"; + parameter CHAN_BOND_KEEP_ALIGN_1 = "FALSE"; + parameter CHAN_BOND_MODE_0 = "OFF"; + parameter CHAN_BOND_MODE_1 = "OFF"; + parameter CHAN_BOND_SEQ_2_USE_0 = "TRUE"; + parameter CHAN_BOND_SEQ_2_USE_1 = "TRUE"; + parameter CLKINDC_B = "TRUE"; + parameter CLKRCV_TRST = "FALSE"; + parameter CLK_CORRECT_USE_0 = "TRUE"; + parameter CLK_CORRECT_USE_1 = "TRUE"; + parameter CLK_COR_INSERT_IDLE_FLAG_0 = "FALSE"; + parameter CLK_COR_INSERT_IDLE_FLAG_1 = "FALSE"; + parameter CLK_COR_KEEP_IDLE_0 = "FALSE"; + parameter CLK_COR_KEEP_IDLE_1 = "FALSE"; + parameter CLK_COR_PRECEDENCE_0 = "TRUE"; + parameter CLK_COR_PRECEDENCE_1 = "TRUE"; + parameter CLK_COR_SEQ_2_USE_0 = "FALSE"; + parameter CLK_COR_SEQ_2_USE_1 = "FALSE"; + parameter COMMA_DOUBLE_0 = "FALSE"; + parameter COMMA_DOUBLE_1 = "FALSE"; + parameter DEC_MCOMMA_DETECT_0 = "TRUE"; + parameter DEC_MCOMMA_DETECT_1 = "TRUE"; + parameter DEC_PCOMMA_DETECT_0 = "TRUE"; + parameter DEC_PCOMMA_DETECT_1 = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_0 = "TRUE"; + parameter DEC_VALID_COMMA_ONLY_1 = "TRUE"; + parameter MCOMMA_DETECT_0 = "TRUE"; + parameter MCOMMA_DETECT_1 = "TRUE"; + parameter OVERSAMPLE_MODE = "FALSE"; + parameter PCI_EXPRESS_MODE_0 = "TRUE"; + parameter PCI_EXPRESS_MODE_1 = "TRUE"; + parameter PCOMMA_DETECT_0 = "TRUE"; + parameter PCOMMA_DETECT_1 = "TRUE"; + parameter PLL_FB_DCCEN = "FALSE"; + parameter PLL_SATA_0 = "FALSE"; + parameter PLL_SATA_1 = "FALSE"; + parameter RCV_TERM_GND_0 = "TRUE"; + parameter RCV_TERM_GND_1 = "TRUE"; + parameter RCV_TERM_VTTRX_0 = "FALSE"; + parameter RCV_TERM_VTTRX_1 = "FALSE"; + parameter RXGEARBOX_USE_0 = "FALSE"; + parameter RXGEARBOX_USE_1 = "FALSE"; + parameter RX_BUFFER_USE_0 = "TRUE"; + parameter RX_BUFFER_USE_1 = "TRUE"; + parameter RX_DECODE_SEQ_MATCH_0 = "TRUE"; + parameter RX_DECODE_SEQ_MATCH_1 = "TRUE"; + parameter RX_EN_IDLE_HOLD_CDR = "FALSE"; + parameter RX_EN_IDLE_HOLD_DFE_0 = "TRUE"; + parameter RX_EN_IDLE_HOLD_DFE_1 = "TRUE"; + parameter RX_EN_IDLE_RESET_BUF_0 = "TRUE"; + parameter RX_EN_IDLE_RESET_BUF_1 = "TRUE"; + parameter RX_EN_IDLE_RESET_FR = "TRUE"; + parameter RX_EN_IDLE_RESET_PH = "TRUE"; + parameter RX_LOSS_OF_SYNC_FSM_0 = "FALSE"; + parameter RX_LOSS_OF_SYNC_FSM_1 = "FALSE"; + parameter RX_SLIDE_MODE_0 = "PCS"; + parameter RX_SLIDE_MODE_1 = "PCS"; + parameter RX_STATUS_FMT_0 = "PCIE"; + parameter RX_STATUS_FMT_1 = "PCIE"; + parameter RX_XCLK_SEL_0 = "RXREC"; + parameter RX_XCLK_SEL_1 = "RXREC"; + parameter SIM_PLL_PERDIV2 = 9'h190; + parameter SIM_RECEIVER_DETECT_PASS_0 = "FALSE"; + parameter SIM_RECEIVER_DETECT_PASS_1 = "FALSE"; + parameter TERMINATION_OVRD = "FALSE"; + parameter TXGEARBOX_USE_0 = "FALSE"; + parameter TXGEARBOX_USE_1 = "FALSE"; + parameter TX_BUFFER_USE_0 = "TRUE"; + parameter TX_BUFFER_USE_1 = "TRUE"; + parameter TX_XCLK_SEL_0 = "TXUSR"; + parameter TX_XCLK_SEL_1 = "TXUSR"; + parameter [11:0] TRANS_TIME_FROM_P2_0 = 12'h03c; + parameter [11:0] TRANS_TIME_FROM_P2_1 = 12'h03c; + parameter [13:0] TX_DETECT_RX_CFG_0 = 14'h1832; + parameter [13:0] TX_DETECT_RX_CFG_1 = 14'h1832; + parameter [19:0] PMA_TX_CFG_0 = 20'h00082; + parameter [19:0] PMA_TX_CFG_1 = 20'h00082; + parameter [1:0] CM_TRIM_0 = 2'b10; + parameter [1:0] CM_TRIM_1 = 2'b10; + parameter [23:0] PLL_COM_CFG = 24'h21680a; + parameter [24:0] PMA_RX_CFG_0 = 25'h05ce109; + parameter [24:0] PMA_RX_CFG_1 = 25'h05ce109; + parameter [26:0] PMA_CDR_SCAN_0 = 27'h6c08040; + parameter [26:0] PMA_CDR_SCAN_1 = 27'h6c08040; + parameter [2:0] GEARBOX_ENDEC_0 = 3'b000; + parameter [2:0] GEARBOX_ENDEC_1 = 3'b000; + parameter [2:0] OOBDETECT_THRESHOLD_0 = 3'b111; + parameter [2:0] OOBDETECT_THRESHOLD_1 = 3'b111; + parameter [2:0] PLL_LKDET_CFG = 3'b111; + parameter [2:0] PLL_TDCC_CFG = 3'b000; + parameter [2:0] SATA_BURST_VAL_0 = 3'b100; + parameter [2:0] SATA_BURST_VAL_1 = 3'b100; + parameter [2:0] SATA_IDLE_VAL_0 = 3'b011; + parameter [2:0] SATA_IDLE_VAL_1 = 3'b011; + parameter [2:0] TXRX_INVERT_0 = 3'b000; + parameter [2:0] TXRX_INVERT_1 = 3'b000; + parameter [2:0] TX_IDLE_DELAY_0 = 3'b010; + parameter [2:0] TX_IDLE_DELAY_1 = 3'b010; + parameter [31:0] PRBS_ERR_THRESHOLD_0 = 32'h1; + parameter [31:0] PRBS_ERR_THRESHOLD_1 = 32'h1; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_0 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_1 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_0 = 4'b1111; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_1 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_1_ENABLE_0 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_1_ENABLE_1 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_2_ENABLE_0 = 4'b1111; + parameter [3:0] CLK_COR_SEQ_2_ENABLE_1 = 4'b1111; + parameter [3:0] COM_BURST_VAL_0 = 4'b1111; + parameter [3:0] COM_BURST_VAL_1 = 4'b1111; + parameter [3:0] RX_IDLE_HI_CNT_0 = 4'b1000; + parameter [3:0] RX_IDLE_HI_CNT_1 = 4'b1000; + parameter [3:0] RX_IDLE_LO_CNT_0 = 4'b0000; + parameter [3:0] RX_IDLE_LO_CNT_1 = 4'b0000; + parameter [4:0] CDR_PH_ADJ_TIME = 5'b01010; + parameter [4:0] DFE_CAL_TIME = 5'b00110; + parameter [4:0] TERMINATION_CTRL = 5'b10100; + parameter [68:0] PMA_COM_CFG = 69'h0; + parameter [6:0] PMA_RXSYNC_CFG_0 = 7'h0; + parameter [6:0] PMA_RXSYNC_CFG_1 = 7'h0; + parameter [7:0] PLL_CP_CFG = 8'h00; + parameter [7:0] TRANS_TIME_NON_P2_0 = 8'h19; + parameter [7:0] TRANS_TIME_NON_P2_1 = 8'h19; + parameter [9:0] CHAN_BOND_SEQ_1_1_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_1_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_2_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_2_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3_0 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3_1 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_4_0 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_1_4_1 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_1_0 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_1_1 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_2_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_2_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_4_0 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_4_1 = 10'b0100111100; + parameter [9:0] CLK_COR_SEQ_1_1_0 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_2_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_3_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_3_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_4_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_1_4_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_1_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_1_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_2_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_2_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_3_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_3_1 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_4_0 = 10'b0; + parameter [9:0] CLK_COR_SEQ_2_4_1 = 10'b0; + parameter [9:0] COMMA_10B_ENABLE_0 = 10'b1111111111; + parameter [9:0] COMMA_10B_ENABLE_1 = 10'b1111111111; + parameter [9:0] DFE_CFG_0 = 10'b0001111011; + parameter [9:0] DFE_CFG_1 = 10'b0001111011; + parameter [9:0] MCOMMA_10B_VALUE_0 = 10'b1010000011; + parameter [9:0] MCOMMA_10B_VALUE_1 = 10'b1010000011; + parameter [9:0] PCOMMA_10B_VALUE_0 = 10'b0101111100; + parameter [9:0] PCOMMA_10B_VALUE_1 = 10'b0101111100; + parameter [9:0] TRANS_TIME_TO_P2_0 = 10'h064; + parameter [9:0] TRANS_TIME_TO_P2_1 = 10'h064; + parameter ALIGN_COMMA_WORD_0 = 1; + parameter ALIGN_COMMA_WORD_1 = 1; + parameter CB2_INH_CC_PERIOD_0 = 8; + parameter CB2_INH_CC_PERIOD_1 = 8; + parameter CHAN_BOND_1_MAX_SKEW_0 = 7; + parameter CHAN_BOND_1_MAX_SKEW_1 = 7; + parameter CHAN_BOND_2_MAX_SKEW_0 = 1; + parameter CHAN_BOND_2_MAX_SKEW_1 = 1; + parameter CHAN_BOND_LEVEL_0 = 0; + parameter CHAN_BOND_LEVEL_1 = 0; + parameter CHAN_BOND_SEQ_LEN_0 = 4; + parameter CHAN_BOND_SEQ_LEN_1 = 4; + parameter CLK25_DIVIDER = 4; + parameter CLK_COR_ADJ_LEN_0 = 1; + parameter CLK_COR_ADJ_LEN_1 = 1; + parameter CLK_COR_DET_LEN_0 = 1; + parameter CLK_COR_DET_LEN_1 = 1; + parameter CLK_COR_MAX_LAT_0 = 18; + parameter CLK_COR_MAX_LAT_1 = 18; + parameter CLK_COR_MIN_LAT_0 = 16; + parameter CLK_COR_MIN_LAT_1 = 16; + parameter CLK_COR_REPEAT_WAIT_0 = 5; + parameter CLK_COR_REPEAT_WAIT_1 = 5; + parameter OOB_CLK_DIVIDER = 4; + parameter PLL_DIVSEL_FB = 5; + parameter PLL_DIVSEL_REF = 2; + parameter PLL_RXDIVSEL_OUT_0 = 1; + parameter PLL_RXDIVSEL_OUT_1 = 1; + parameter PLL_TXDIVSEL_OUT_0 = 1; + parameter PLL_TXDIVSEL_OUT_1 = 1; + parameter RX_LOS_INVALID_INCR_0 = 8; + parameter RX_LOS_INVALID_INCR_1 = 8; + parameter RX_LOS_THRESHOLD_0 = 128; + parameter RX_LOS_THRESHOLD_1 = 128; + parameter SATA_MAX_BURST_0 = 7; + parameter SATA_MAX_BURST_1 = 7; + parameter SATA_MAX_INIT_0 = 22; + parameter SATA_MAX_INIT_1 = 22; + parameter SATA_MAX_WAKE_0 = 7; + parameter SATA_MAX_WAKE_1 = 7; + parameter SATA_MIN_BURST_0 = 4; + parameter SATA_MIN_BURST_1 = 4; + parameter SATA_MIN_INIT_0 = 12; + parameter SATA_MIN_INIT_1 = 12; + parameter SATA_MIN_WAKE_0 = 4; + parameter SATA_MIN_WAKE_1 = 4; + parameter SIM_GTXRESET_SPEEDUP = 0; + parameter TERMINATION_IMP_0 = 50; + parameter TERMINATION_IMP_1 = 50; + output DRDY; + output PHYSTATUS0; + output PHYSTATUS1; + output PLLLKDET; + output REFCLKOUT; + output RESETDONE0; + output RESETDONE1; + output RXBYTEISALIGNED0; + output RXBYTEISALIGNED1; + output RXBYTEREALIGN0; + output RXBYTEREALIGN1; + output RXCHANBONDSEQ0; + output RXCHANBONDSEQ1; + output RXCHANISALIGNED0; + output RXCHANISALIGNED1; + output RXCHANREALIGN0; + output RXCHANREALIGN1; + output RXCOMMADET0; + output RXCOMMADET1; + output RXDATAVALID0; + output RXDATAVALID1; + output RXELECIDLE0; + output RXELECIDLE1; + output RXHEADERVALID0; + output RXHEADERVALID1; + output RXOVERSAMPLEERR0; + output RXOVERSAMPLEERR1; + output RXPRBSERR0; + output RXPRBSERR1; + output RXRECCLK0; + output RXRECCLK1; + output RXSTARTOFSEQ0; + output RXSTARTOFSEQ1; + output RXVALID0; + output RXVALID1; + output TXGEARBOXREADY0; + output TXGEARBOXREADY1; + output TXN0; + output TXN1; + output TXOUTCLK0; + output TXOUTCLK1; + output TXP0; + output TXP1; + output [15:0] DO; + output [1:0] RXLOSSOFSYNC0; + output [1:0] RXLOSSOFSYNC1; + output [1:0] TXBUFSTATUS0; + output [1:0] TXBUFSTATUS1; + output [2:0] DFESENSCAL0; + output [2:0] DFESENSCAL1; + output [2:0] RXBUFSTATUS0; + output [2:0] RXBUFSTATUS1; + output [2:0] RXCLKCORCNT0; + output [2:0] RXCLKCORCNT1; + output [2:0] RXHEADER0; + output [2:0] RXHEADER1; + output [2:0] RXSTATUS0; + output [2:0] RXSTATUS1; + output [31:0] RXDATA0; + output [31:0] RXDATA1; + output [3:0] DFETAP3MONITOR0; + output [3:0] DFETAP3MONITOR1; + output [3:0] DFETAP4MONITOR0; + output [3:0] DFETAP4MONITOR1; + output [3:0] RXCHARISCOMMA0; + output [3:0] RXCHARISCOMMA1; + output [3:0] RXCHARISK0; + output [3:0] RXCHARISK1; + output [3:0] RXCHBONDO0; + output [3:0] RXCHBONDO1; + output [3:0] RXDISPERR0; + output [3:0] RXDISPERR1; + output [3:0] RXNOTINTABLE0; + output [3:0] RXNOTINTABLE1; + output [3:0] RXRUNDISP0; + output [3:0] RXRUNDISP1; + output [3:0] TXKERR0; + output [3:0] TXKERR1; + output [3:0] TXRUNDISP0; + output [3:0] TXRUNDISP1; + output [4:0] DFEEYEDACMONITOR0; + output [4:0] DFEEYEDACMONITOR1; + output [4:0] DFETAP1MONITOR0; + output [4:0] DFETAP1MONITOR1; + output [4:0] DFETAP2MONITOR0; + output [4:0] DFETAP2MONITOR1; + output [5:0] DFECLKDLYADJMONITOR0; + output [5:0] DFECLKDLYADJMONITOR1; + input CLKIN; + input DCLK; + input DEN; + input DWE; + input GTXRESET; + input INTDATAWIDTH; + input PLLLKDETEN; + input PLLPOWERDOWN; + input PRBSCNTRESET0; + input PRBSCNTRESET1; + input REFCLKPWRDNB; + input RXBUFRESET0; + input RXBUFRESET1; + input RXCDRRESET0; + input RXCDRRESET1; + input RXCOMMADETUSE0; + input RXCOMMADETUSE1; + input RXDEC8B10BUSE0; + input RXDEC8B10BUSE1; + input RXENCHANSYNC0; + input RXENCHANSYNC1; + input RXENEQB0; + input RXENEQB1; + input RXENMCOMMAALIGN0; + input RXENMCOMMAALIGN1; + input RXENPCOMMAALIGN0; + input RXENPCOMMAALIGN1; + input RXENPMAPHASEALIGN0; + input RXENPMAPHASEALIGN1; + input RXENSAMPLEALIGN0; + input RXENSAMPLEALIGN1; + input RXGEARBOXSLIP0; + input RXGEARBOXSLIP1; + input RXN0; + input RXN1; + input RXP0; + input RXP1; + input RXPMASETPHASE0; + input RXPMASETPHASE1; + input RXPOLARITY0; + input RXPOLARITY1; + input RXRESET0; + input RXRESET1; + input RXSLIDE0; + input RXSLIDE1; + input RXUSRCLK0; + input RXUSRCLK1; + input RXUSRCLK20; + input RXUSRCLK21; + input TXCOMSTART0; + input TXCOMSTART1; + input TXCOMTYPE0; + input TXCOMTYPE1; + input TXDETECTRX0; + input TXDETECTRX1; + input TXELECIDLE0; + input TXELECIDLE1; + input TXENC8B10BUSE0; + input TXENC8B10BUSE1; + input TXENPMAPHASEALIGN0; + input TXENPMAPHASEALIGN1; + input TXINHIBIT0; + input TXINHIBIT1; + input TXPMASETPHASE0; + input TXPMASETPHASE1; + input TXPOLARITY0; + input TXPOLARITY1; + input TXRESET0; + input TXRESET1; + input TXSTARTSEQ0; + input TXSTARTSEQ1; + input TXUSRCLK0; + input TXUSRCLK1; + input TXUSRCLK20; + input TXUSRCLK21; + input [13:0] GTXTEST; + input [15:0] DI; + input [1:0] RXDATAWIDTH0; + input [1:0] RXDATAWIDTH1; + input [1:0] RXENPRBSTST0; + input [1:0] RXENPRBSTST1; + input [1:0] RXEQMIX0; + input [1:0] RXEQMIX1; + input [1:0] RXPOWERDOWN0; + input [1:0] RXPOWERDOWN1; + input [1:0] TXDATAWIDTH0; + input [1:0] TXDATAWIDTH1; + input [1:0] TXENPRBSTST0; + input [1:0] TXENPRBSTST1; + input [1:0] TXPOWERDOWN0; + input [1:0] TXPOWERDOWN1; + input [2:0] LOOPBACK0; + input [2:0] LOOPBACK1; + input [2:0] TXBUFDIFFCTRL0; + input [2:0] TXBUFDIFFCTRL1; + input [2:0] TXDIFFCTRL0; + input [2:0] TXDIFFCTRL1; + input [2:0] TXHEADER0; + input [2:0] TXHEADER1; + input [31:0] TXDATA0; + input [31:0] TXDATA1; + input [3:0] DFETAP30; + input [3:0] DFETAP31; + input [3:0] DFETAP40; + input [3:0] DFETAP41; + input [3:0] RXCHBONDI0; + input [3:0] RXCHBONDI1; + input [3:0] RXEQPOLE0; + input [3:0] RXEQPOLE1; + input [3:0] TXBYPASS8B10B0; + input [3:0] TXBYPASS8B10B1; + input [3:0] TXCHARDISPMODE0; + input [3:0] TXCHARDISPMODE1; + input [3:0] TXCHARDISPVAL0; + input [3:0] TXCHARDISPVAL1; + input [3:0] TXCHARISK0; + input [3:0] TXCHARISK1; + input [3:0] TXPREEMPHASIS0; + input [3:0] TXPREEMPHASIS1; + input [4:0] DFETAP10; + input [4:0] DFETAP11; + input [4:0] DFETAP20; + input [4:0] DFETAP21; + input [5:0] DFECLKDLYADJ0; + input [5:0] DFECLKDLYADJ1; + input [6:0] DADDR; + input [6:0] TXSEQUENCE0; + input [6:0] TXSEQUENCE1; +endmodule + +module CRC32 (...); + parameter CRC_INIT = 32'hFFFFFFFF; + output [31:0] CRCOUT; + (* clkbuf_sink *) + input CRCCLK; + input CRCDATAVALID; + input [2:0] CRCDATAWIDTH; + input [31:0] CRCIN; + input CRCRESET; +endmodule + +module CRC64 (...); + parameter CRC_INIT = 32'hFFFFFFFF; + output [31:0] CRCOUT; + (* clkbuf_sink *) + input CRCCLK; + input CRCDATAVALID; + input [2:0] CRCDATAWIDTH; + input [63:0] CRCIN; + input CRCRESET; +endmodule + +module GTHE1_QUAD (...); + parameter [15:0] BER_CONST_PTRN0 = 16'h0000; + parameter [15:0] BER_CONST_PTRN1 = 16'h0000; + parameter [15:0] BUFFER_CONFIG_LANE0 = 16'h4004; + parameter [15:0] BUFFER_CONFIG_LANE1 = 16'h4004; + parameter [15:0] BUFFER_CONFIG_LANE2 = 16'h4004; + parameter [15:0] BUFFER_CONFIG_LANE3 = 16'h4004; + parameter [15:0] DFE_TRAIN_CTRL_LANE0 = 16'h0000; + parameter [15:0] DFE_TRAIN_CTRL_LANE1 = 16'h0000; + parameter [15:0] DFE_TRAIN_CTRL_LANE2 = 16'h0000; + parameter [15:0] DFE_TRAIN_CTRL_LANE3 = 16'h0000; + parameter [15:0] DLL_CFG0 = 16'h8202; + parameter [15:0] DLL_CFG1 = 16'h0000; + parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE0 = 16'h0000; + parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE1 = 16'h0000; + parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE2 = 16'h0000; + parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE3 = 16'h0000; + parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE0 = 16'h0000; + parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE1 = 16'h0000; + parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE2 = 16'h0000; + parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE3 = 16'h0000; + parameter [15:0] E10GBASEKR_PMA_CTRL_LANE0 = 16'h0002; + parameter [15:0] E10GBASEKR_PMA_CTRL_LANE1 = 16'h0002; + parameter [15:0] E10GBASEKR_PMA_CTRL_LANE2 = 16'h0002; + parameter [15:0] E10GBASEKR_PMA_CTRL_LANE3 = 16'h0002; + parameter [15:0] E10GBASEKX_CTRL_LANE0 = 16'h0000; + parameter [15:0] E10GBASEKX_CTRL_LANE1 = 16'h0000; + parameter [15:0] E10GBASEKX_CTRL_LANE2 = 16'h0000; + parameter [15:0] E10GBASEKX_CTRL_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_CFG_LANE0 = 16'h070C; + parameter [15:0] E10GBASER_PCS_CFG_LANE1 = 16'h070C; + parameter [15:0] E10GBASER_PCS_CFG_LANE2 = 16'h070C; + parameter [15:0] E10GBASER_PCS_CFG_LANE3 = 16'h070C; + parameter [15:0] E10GBASER_PCS_SEEDA0_LANE0 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDA0_LANE1 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDA0_LANE2 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDA0_LANE3 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDA1_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA1_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA1_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA1_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA2_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA2_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA2_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA2_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA3_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA3_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA3_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDA3_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB0_LANE0 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDB0_LANE1 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDB0_LANE2 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDB0_LANE3 = 16'h0001; + parameter [15:0] E10GBASER_PCS_SEEDB1_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB1_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB1_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB1_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB2_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB2_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB2_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB2_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB3_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB3_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB3_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_SEEDB3_LANE3 = 16'h0000; + parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE0 = 16'h0000; + parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE1 = 16'h0000; + parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE2 = 16'h0000; + parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE3 = 16'h0000; + parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE0 = 16'h0000; + parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE1 = 16'h0000; + parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE2 = 16'h0000; + parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE3 = 16'h0000; + parameter [15:0] GLBL0_NOISE_CTRL = 16'hF0B8; + parameter [15:0] GLBL_AMON_SEL = 16'h0000; + parameter [15:0] GLBL_DMON_SEL = 16'h0200; + parameter [15:0] GLBL_PWR_CTRL = 16'h0000; + parameter [0:0] GTH_CFG_PWRUP_LANE0 = 1'b1; + parameter [0:0] GTH_CFG_PWRUP_LANE1 = 1'b1; + parameter [0:0] GTH_CFG_PWRUP_LANE2 = 1'b1; + parameter [0:0] GTH_CFG_PWRUP_LANE3 = 1'b1; + parameter [15:0] LANE_AMON_SEL = 16'h00F0; + parameter [15:0] LANE_DMON_SEL = 16'h0000; + parameter [15:0] LANE_LNK_CFGOVRD = 16'h0000; + parameter [15:0] LANE_PWR_CTRL_LANE0 = 16'h0400; + parameter [15:0] LANE_PWR_CTRL_LANE1 = 16'h0400; + parameter [15:0] LANE_PWR_CTRL_LANE2 = 16'h0400; + parameter [15:0] LANE_PWR_CTRL_LANE3 = 16'h0400; + parameter [15:0] LNK_TRN_CFG_LANE0 = 16'h0000; + parameter [15:0] LNK_TRN_CFG_LANE1 = 16'h0000; + parameter [15:0] LNK_TRN_CFG_LANE2 = 16'h0000; + parameter [15:0] LNK_TRN_CFG_LANE3 = 16'h0000; + parameter [15:0] LNK_TRN_COEFF_REQ_LANE0 = 16'h0000; + parameter [15:0] LNK_TRN_COEFF_REQ_LANE1 = 16'h0000; + parameter [15:0] LNK_TRN_COEFF_REQ_LANE2 = 16'h0000; + parameter [15:0] LNK_TRN_COEFF_REQ_LANE3 = 16'h0000; + parameter [15:0] MISC_CFG = 16'h0008; + parameter [15:0] MODE_CFG1 = 16'h0000; + parameter [15:0] MODE_CFG2 = 16'h0000; + parameter [15:0] MODE_CFG3 = 16'h0000; + parameter [15:0] MODE_CFG4 = 16'h0000; + parameter [15:0] MODE_CFG5 = 16'h0000; + parameter [15:0] MODE_CFG6 = 16'h0000; + parameter [15:0] MODE_CFG7 = 16'h0000; + parameter [15:0] PCS_ABILITY_LANE0 = 16'h0010; + parameter [15:0] PCS_ABILITY_LANE1 = 16'h0010; + parameter [15:0] PCS_ABILITY_LANE2 = 16'h0010; + parameter [15:0] PCS_ABILITY_LANE3 = 16'h0010; + parameter [15:0] PCS_CTRL1_LANE0 = 16'h2040; + parameter [15:0] PCS_CTRL1_LANE1 = 16'h2040; + parameter [15:0] PCS_CTRL1_LANE2 = 16'h2040; + parameter [15:0] PCS_CTRL1_LANE3 = 16'h2040; + parameter [15:0] PCS_CTRL2_LANE0 = 16'h0000; + parameter [15:0] PCS_CTRL2_LANE1 = 16'h0000; + parameter [15:0] PCS_CTRL2_LANE2 = 16'h0000; + parameter [15:0] PCS_CTRL2_LANE3 = 16'h0000; + parameter [15:0] PCS_MISC_CFG_0_LANE0 = 16'h1116; + parameter [15:0] PCS_MISC_CFG_0_LANE1 = 16'h1116; + parameter [15:0] PCS_MISC_CFG_0_LANE2 = 16'h1116; + parameter [15:0] PCS_MISC_CFG_0_LANE3 = 16'h1116; + parameter [15:0] PCS_MISC_CFG_1_LANE0 = 16'h0000; + parameter [15:0] PCS_MISC_CFG_1_LANE1 = 16'h0000; + parameter [15:0] PCS_MISC_CFG_1_LANE2 = 16'h0000; + parameter [15:0] PCS_MISC_CFG_1_LANE3 = 16'h0000; + parameter [15:0] PCS_MODE_LANE0 = 16'h0000; + parameter [15:0] PCS_MODE_LANE1 = 16'h0000; + parameter [15:0] PCS_MODE_LANE2 = 16'h0000; + parameter [15:0] PCS_MODE_LANE3 = 16'h0000; + parameter [15:0] PCS_RESET_1_LANE0 = 16'h0002; + parameter [15:0] PCS_RESET_1_LANE1 = 16'h0002; + parameter [15:0] PCS_RESET_1_LANE2 = 16'h0002; + parameter [15:0] PCS_RESET_1_LANE3 = 16'h0002; + parameter [15:0] PCS_RESET_LANE0 = 16'h0000; + parameter [15:0] PCS_RESET_LANE1 = 16'h0000; + parameter [15:0] PCS_RESET_LANE2 = 16'h0000; + parameter [15:0] PCS_RESET_LANE3 = 16'h0000; + parameter [15:0] PCS_TYPE_LANE0 = 16'h002C; + parameter [15:0] PCS_TYPE_LANE1 = 16'h002C; + parameter [15:0] PCS_TYPE_LANE2 = 16'h002C; + parameter [15:0] PCS_TYPE_LANE3 = 16'h002C; + parameter [15:0] PLL_CFG0 = 16'h95DF; + parameter [15:0] PLL_CFG1 = 16'h81C0; + parameter [15:0] PLL_CFG2 = 16'h0424; + parameter [15:0] PMA_CTRL1_LANE0 = 16'h0000; + parameter [15:0] PMA_CTRL1_LANE1 = 16'h0000; + parameter [15:0] PMA_CTRL1_LANE2 = 16'h0000; + parameter [15:0] PMA_CTRL1_LANE3 = 16'h0000; + parameter [15:0] PMA_CTRL2_LANE0 = 16'h000B; + parameter [15:0] PMA_CTRL2_LANE1 = 16'h000B; + parameter [15:0] PMA_CTRL2_LANE2 = 16'h000B; + parameter [15:0] PMA_CTRL2_LANE3 = 16'h000B; + parameter [15:0] PMA_LPBK_CTRL_LANE0 = 16'h0004; + parameter [15:0] PMA_LPBK_CTRL_LANE1 = 16'h0004; + parameter [15:0] PMA_LPBK_CTRL_LANE2 = 16'h0004; + parameter [15:0] PMA_LPBK_CTRL_LANE3 = 16'h0004; + parameter [15:0] PRBS_BER_CFG0_LANE0 = 16'h0000; + parameter [15:0] PRBS_BER_CFG0_LANE1 = 16'h0000; + parameter [15:0] PRBS_BER_CFG0_LANE2 = 16'h0000; + parameter [15:0] PRBS_BER_CFG0_LANE3 = 16'h0000; + parameter [15:0] PRBS_BER_CFG1_LANE0 = 16'h0000; + parameter [15:0] PRBS_BER_CFG1_LANE1 = 16'h0000; + parameter [15:0] PRBS_BER_CFG1_LANE2 = 16'h0000; + parameter [15:0] PRBS_BER_CFG1_LANE3 = 16'h0000; + parameter [15:0] PRBS_CFG_LANE0 = 16'h000A; + parameter [15:0] PRBS_CFG_LANE1 = 16'h000A; + parameter [15:0] PRBS_CFG_LANE2 = 16'h000A; + parameter [15:0] PRBS_CFG_LANE3 = 16'h000A; + parameter [15:0] PTRN_CFG0_LSB = 16'h5555; + parameter [15:0] PTRN_CFG0_MSB = 16'h5555; + parameter [15:0] PTRN_LEN_CFG = 16'h001F; + parameter [15:0] PWRUP_DLY = 16'h0000; + parameter [15:0] RX_AEQ_VAL0_LANE0 = 16'h03C0; + parameter [15:0] RX_AEQ_VAL0_LANE1 = 16'h03C0; + parameter [15:0] RX_AEQ_VAL0_LANE2 = 16'h03C0; + parameter [15:0] RX_AEQ_VAL0_LANE3 = 16'h03C0; + parameter [15:0] RX_AEQ_VAL1_LANE0 = 16'h0000; + parameter [15:0] RX_AEQ_VAL1_LANE1 = 16'h0000; + parameter [15:0] RX_AEQ_VAL1_LANE2 = 16'h0000; + parameter [15:0] RX_AEQ_VAL1_LANE3 = 16'h0000; + parameter [15:0] RX_AGC_CTRL_LANE0 = 16'h0000; + parameter [15:0] RX_AGC_CTRL_LANE1 = 16'h0000; + parameter [15:0] RX_AGC_CTRL_LANE2 = 16'h0000; + parameter [15:0] RX_AGC_CTRL_LANE3 = 16'h0000; + parameter [15:0] RX_CDR_CTRL0_LANE0 = 16'h0005; + parameter [15:0] RX_CDR_CTRL0_LANE1 = 16'h0005; + parameter [15:0] RX_CDR_CTRL0_LANE2 = 16'h0005; + parameter [15:0] RX_CDR_CTRL0_LANE3 = 16'h0005; + parameter [15:0] RX_CDR_CTRL1_LANE0 = 16'h4200; + parameter [15:0] RX_CDR_CTRL1_LANE1 = 16'h4200; + parameter [15:0] RX_CDR_CTRL1_LANE2 = 16'h4200; + parameter [15:0] RX_CDR_CTRL1_LANE3 = 16'h4200; + parameter [15:0] RX_CDR_CTRL2_LANE0 = 16'h2000; + parameter [15:0] RX_CDR_CTRL2_LANE1 = 16'h2000; + parameter [15:0] RX_CDR_CTRL2_LANE2 = 16'h2000; + parameter [15:0] RX_CDR_CTRL2_LANE3 = 16'h2000; + parameter [15:0] RX_CFG0_LANE0 = 16'h0500; + parameter [15:0] RX_CFG0_LANE1 = 16'h0500; + parameter [15:0] RX_CFG0_LANE2 = 16'h0500; + parameter [15:0] RX_CFG0_LANE3 = 16'h0500; + parameter [15:0] RX_CFG1_LANE0 = 16'h821F; + parameter [15:0] RX_CFG1_LANE1 = 16'h821F; + parameter [15:0] RX_CFG1_LANE2 = 16'h821F; + parameter [15:0] RX_CFG1_LANE3 = 16'h821F; + parameter [15:0] RX_CFG2_LANE0 = 16'h1001; + parameter [15:0] RX_CFG2_LANE1 = 16'h1001; + parameter [15:0] RX_CFG2_LANE2 = 16'h1001; + parameter [15:0] RX_CFG2_LANE3 = 16'h1001; + parameter [15:0] RX_CTLE_CTRL_LANE0 = 16'h008F; + parameter [15:0] RX_CTLE_CTRL_LANE1 = 16'h008F; + parameter [15:0] RX_CTLE_CTRL_LANE2 = 16'h008F; + parameter [15:0] RX_CTLE_CTRL_LANE3 = 16'h008F; + parameter [15:0] RX_CTRL_OVRD_LANE0 = 16'h000C; + parameter [15:0] RX_CTRL_OVRD_LANE1 = 16'h000C; + parameter [15:0] RX_CTRL_OVRD_LANE2 = 16'h000C; + parameter [15:0] RX_CTRL_OVRD_LANE3 = 16'h000C; + parameter integer RX_FABRIC_WIDTH0 = 6466; + parameter integer RX_FABRIC_WIDTH1 = 6466; + parameter integer RX_FABRIC_WIDTH2 = 6466; + parameter integer RX_FABRIC_WIDTH3 = 6466; + parameter [15:0] RX_LOOP_CTRL_LANE0 = 16'h007F; + parameter [15:0] RX_LOOP_CTRL_LANE1 = 16'h007F; + parameter [15:0] RX_LOOP_CTRL_LANE2 = 16'h007F; + parameter [15:0] RX_LOOP_CTRL_LANE3 = 16'h007F; + parameter [15:0] RX_MVAL0_LANE0 = 16'h0000; + parameter [15:0] RX_MVAL0_LANE1 = 16'h0000; + parameter [15:0] RX_MVAL0_LANE2 = 16'h0000; + parameter [15:0] RX_MVAL0_LANE3 = 16'h0000; + parameter [15:0] RX_MVAL1_LANE0 = 16'h0000; + parameter [15:0] RX_MVAL1_LANE1 = 16'h0000; + parameter [15:0] RX_MVAL1_LANE2 = 16'h0000; + parameter [15:0] RX_MVAL1_LANE3 = 16'h0000; + parameter [15:0] RX_P0S_CTRL = 16'h1206; + parameter [15:0] RX_P0_CTRL = 16'h11F0; + parameter [15:0] RX_P1_CTRL = 16'h120F; + parameter [15:0] RX_P2_CTRL = 16'h0E0F; + parameter [15:0] RX_PI_CTRL0 = 16'hD2F0; + parameter [15:0] RX_PI_CTRL1 = 16'h0080; + parameter integer SIM_GTHRESET_SPEEDUP = 1; + parameter SIM_VERSION = "1.0"; + parameter [15:0] SLICE_CFG = 16'h0000; + parameter [15:0] SLICE_NOISE_CTRL_0_LANE01 = 16'h0000; + parameter [15:0] SLICE_NOISE_CTRL_0_LANE23 = 16'h0000; + parameter [15:0] SLICE_NOISE_CTRL_1_LANE01 = 16'h0000; + parameter [15:0] SLICE_NOISE_CTRL_1_LANE23 = 16'h0000; + parameter [15:0] SLICE_NOISE_CTRL_2_LANE01 = 16'h7FFF; + parameter [15:0] SLICE_NOISE_CTRL_2_LANE23 = 16'h7FFF; + parameter [15:0] SLICE_TX_RESET_LANE01 = 16'h0000; + parameter [15:0] SLICE_TX_RESET_LANE23 = 16'h0000; + parameter [15:0] TERM_CTRL_LANE0 = 16'h5007; + parameter [15:0] TERM_CTRL_LANE1 = 16'h5007; + parameter [15:0] TERM_CTRL_LANE2 = 16'h5007; + parameter [15:0] TERM_CTRL_LANE3 = 16'h5007; + parameter [15:0] TX_CFG0_LANE0 = 16'h203D; + parameter [15:0] TX_CFG0_LANE1 = 16'h203D; + parameter [15:0] TX_CFG0_LANE2 = 16'h203D; + parameter [15:0] TX_CFG0_LANE3 = 16'h203D; + parameter [15:0] TX_CFG1_LANE0 = 16'h0F00; + parameter [15:0] TX_CFG1_LANE1 = 16'h0F00; + parameter [15:0] TX_CFG1_LANE2 = 16'h0F00; + parameter [15:0] TX_CFG1_LANE3 = 16'h0F00; + parameter [15:0] TX_CFG2_LANE0 = 16'h0081; + parameter [15:0] TX_CFG2_LANE1 = 16'h0081; + parameter [15:0] TX_CFG2_LANE2 = 16'h0081; + parameter [15:0] TX_CFG2_LANE3 = 16'h0081; + parameter [15:0] TX_CLK_SEL0_LANE0 = 16'h2121; + parameter [15:0] TX_CLK_SEL0_LANE1 = 16'h2121; + parameter [15:0] TX_CLK_SEL0_LANE2 = 16'h2121; + parameter [15:0] TX_CLK_SEL0_LANE3 = 16'h2121; + parameter [15:0] TX_CLK_SEL1_LANE0 = 16'h2121; + parameter [15:0] TX_CLK_SEL1_LANE1 = 16'h2121; + parameter [15:0] TX_CLK_SEL1_LANE2 = 16'h2121; + parameter [15:0] TX_CLK_SEL1_LANE3 = 16'h2121; + parameter [15:0] TX_DISABLE_LANE0 = 16'h0000; + parameter [15:0] TX_DISABLE_LANE1 = 16'h0000; + parameter [15:0] TX_DISABLE_LANE2 = 16'h0000; + parameter [15:0] TX_DISABLE_LANE3 = 16'h0000; + parameter integer TX_FABRIC_WIDTH0 = 6466; + parameter integer TX_FABRIC_WIDTH1 = 6466; + parameter integer TX_FABRIC_WIDTH2 = 6466; + parameter integer TX_FABRIC_WIDTH3 = 6466; + parameter [15:0] TX_P0P0S_CTRL = 16'h060C; + parameter [15:0] TX_P1P2_CTRL = 16'h0C39; + parameter [15:0] TX_PREEMPH_LANE0 = 16'h00A1; + parameter [15:0] TX_PREEMPH_LANE1 = 16'h00A1; + parameter [15:0] TX_PREEMPH_LANE2 = 16'h00A1; + parameter [15:0] TX_PREEMPH_LANE3 = 16'h00A1; + parameter [15:0] TX_PWR_RATE_OVRD_LANE0 = 16'h0060; + parameter [15:0] TX_PWR_RATE_OVRD_LANE1 = 16'h0060; + parameter [15:0] TX_PWR_RATE_OVRD_LANE2 = 16'h0060; + parameter [15:0] TX_PWR_RATE_OVRD_LANE3 = 16'h0060; + output DRDY; + output GTHINITDONE; + output MGMTPCSRDACK; + output RXCTRLACK0; + output RXCTRLACK1; + output RXCTRLACK2; + output RXCTRLACK3; + output RXDATATAP0; + output RXDATATAP1; + output RXDATATAP2; + output RXDATATAP3; + output RXPCSCLKSMPL0; + output RXPCSCLKSMPL1; + output RXPCSCLKSMPL2; + output RXPCSCLKSMPL3; + output RXUSERCLKOUT0; + output RXUSERCLKOUT1; + output RXUSERCLKOUT2; + output RXUSERCLKOUT3; + output TSTPATH; + output TSTREFCLKFAB; + output TSTREFCLKOUT; + output TXCTRLACK0; + output TXCTRLACK1; + output TXCTRLACK2; + output TXCTRLACK3; + output TXDATATAP10; + output TXDATATAP11; + output TXDATATAP12; + output TXDATATAP13; + output TXDATATAP20; + output TXDATATAP21; + output TXDATATAP22; + output TXDATATAP23; + output TXN0; + output TXN1; + output TXN2; + output TXN3; + output TXP0; + output TXP1; + output TXP2; + output TXP3; + output TXPCSCLKSMPL0; + output TXPCSCLKSMPL1; + output TXPCSCLKSMPL2; + output TXPCSCLKSMPL3; + output TXUSERCLKOUT0; + output TXUSERCLKOUT1; + output TXUSERCLKOUT2; + output TXUSERCLKOUT3; + output [15:0] DRPDO; + output [15:0] MGMTPCSRDDATA; + output [63:0] RXDATA0; + output [63:0] RXDATA1; + output [63:0] RXDATA2; + output [63:0] RXDATA3; + output [7:0] RXCODEERR0; + output [7:0] RXCODEERR1; + output [7:0] RXCODEERR2; + output [7:0] RXCODEERR3; + output [7:0] RXCTRL0; + output [7:0] RXCTRL1; + output [7:0] RXCTRL2; + output [7:0] RXCTRL3; + output [7:0] RXDISPERR0; + output [7:0] RXDISPERR1; + output [7:0] RXDISPERR2; + output [7:0] RXDISPERR3; + output [7:0] RXVALID0; + output [7:0] RXVALID1; + output [7:0] RXVALID2; + output [7:0] RXVALID3; + input DCLK; + input DEN; + input DFETRAINCTRL0; + input DFETRAINCTRL1; + input DFETRAINCTRL2; + input DFETRAINCTRL3; + input DISABLEDRP; + input DWE; + input GTHINIT; + input GTHRESET; + input GTHX2LANE01; + input GTHX2LANE23; + input GTHX4LANE; + input MGMTPCSREGRD; + input MGMTPCSREGWR; + input POWERDOWN0; + input POWERDOWN1; + input POWERDOWN2; + input POWERDOWN3; + input REFCLK; + input RXBUFRESET0; + input RXBUFRESET1; + input RXBUFRESET2; + input RXBUFRESET3; + input RXENCOMMADET0; + input RXENCOMMADET1; + input RXENCOMMADET2; + input RXENCOMMADET3; + input RXN0; + input RXN1; + input RXN2; + input RXN3; + input RXP0; + input RXP1; + input RXP2; + input RXP3; + input RXPOLARITY0; + input RXPOLARITY1; + input RXPOLARITY2; + input RXPOLARITY3; + input RXSLIP0; + input RXSLIP1; + input RXSLIP2; + input RXSLIP3; + input RXUSERCLKIN0; + input RXUSERCLKIN1; + input RXUSERCLKIN2; + input RXUSERCLKIN3; + input TXBUFRESET0; + input TXBUFRESET1; + input TXBUFRESET2; + input TXBUFRESET3; + input TXDEEMPH0; + input TXDEEMPH1; + input TXDEEMPH2; + input TXDEEMPH3; + input TXUSERCLKIN0; + input TXUSERCLKIN1; + input TXUSERCLKIN2; + input TXUSERCLKIN3; + input [15:0] DADDR; + input [15:0] DI; + input [15:0] MGMTPCSREGADDR; + input [15:0] MGMTPCSWRDATA; + input [1:0] RXPOWERDOWN0; + input [1:0] RXPOWERDOWN1; + input [1:0] RXPOWERDOWN2; + input [1:0] RXPOWERDOWN3; + input [1:0] RXRATE0; + input [1:0] RXRATE1; + input [1:0] RXRATE2; + input [1:0] RXRATE3; + input [1:0] TXPOWERDOWN0; + input [1:0] TXPOWERDOWN1; + input [1:0] TXPOWERDOWN2; + input [1:0] TXPOWERDOWN3; + input [1:0] TXRATE0; + input [1:0] TXRATE1; + input [1:0] TXRATE2; + input [1:0] TXRATE3; + input [2:0] PLLREFCLKSEL; + input [2:0] SAMPLERATE0; + input [2:0] SAMPLERATE1; + input [2:0] SAMPLERATE2; + input [2:0] SAMPLERATE3; + input [2:0] TXMARGIN0; + input [2:0] TXMARGIN1; + input [2:0] TXMARGIN2; + input [2:0] TXMARGIN3; + input [3:0] MGMTPCSLANESEL; + input [4:0] MGMTPCSMMDADDR; + input [5:0] PLLPCSCLKDIV; + input [63:0] TXDATA0; + input [63:0] TXDATA1; + input [63:0] TXDATA2; + input [63:0] TXDATA3; + input [7:0] TXCTRL0; + input [7:0] TXCTRL1; + input [7:0] TXCTRL2; + input [7:0] TXCTRL3; + input [7:0] TXDATAMSB0; + input [7:0] TXDATAMSB1; + input [7:0] TXDATAMSB2; + input [7:0] TXDATAMSB3; +endmodule + +module GTXE1 (...); + parameter AC_CAP_DIS = "TRUE"; + parameter integer ALIGN_COMMA_WORD = 1; + parameter [1:0] BGTEST_CFG = 2'b00; + parameter [16:0] BIAS_CFG = 17'h00000; + parameter [4:0] CDR_PH_ADJ_TIME = 5'b10100; + parameter integer CHAN_BOND_1_MAX_SKEW = 7; + parameter integer CHAN_BOND_2_MAX_SKEW = 1; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0001001010; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0110111100; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100111100; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0110111100; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100111100; + parameter [4:0] CHAN_BOND_SEQ_2_CFG = 5'b00000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 1; + parameter CLK_CORRECT_USE = "TRUE"; + parameter integer CLK_COR_ADJ_LEN = 1; + parameter integer CLK_COR_DET_LEN = 1; + parameter CLK_COR_INSERT_IDLE_FLAG = "FALSE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter [1:0] CM_TRIM = 2'b01; + parameter [9:0] COMMA_10B_ENABLE = 10'b1111111111; + parameter COMMA_DOUBLE = "FALSE"; + parameter [3:0] COM_BURST_VAL = 4'b1111; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [4:0] DFE_CAL_TIME = 5'b01100; + parameter [7:0] DFE_CFG = 8'b00011011; + parameter [2:0] GEARBOX_ENDEC = 3'b000; + parameter GEN_RXUSRCLK = "TRUE"; + parameter GEN_TXUSRCLK = "TRUE"; + parameter GTX_CFG_PWRUP = "TRUE"; + parameter [9:0] MCOMMA_10B_VALUE = 10'b1010000011; + parameter MCOMMA_DETECT = "TRUE"; + parameter [2:0] OOBDETECT_THRESHOLD = 3'b011; + parameter PCI_EXPRESS_MODE = "FALSE"; + parameter [9:0] PCOMMA_10B_VALUE = 10'b0101111100; + parameter PCOMMA_DETECT = "TRUE"; + parameter PMA_CAS_CLK_EN = "FALSE"; + parameter [26:0] PMA_CDR_SCAN = 27'h640404C; + parameter [75:0] PMA_CFG = 76'h0040000040000000003; + parameter [6:0] PMA_RXSYNC_CFG = 7'h00; + parameter [24:0] PMA_RX_CFG = 25'h05CE048; + parameter [19:0] PMA_TX_CFG = 20'h00082; + parameter [9:0] POWER_SAVE = 10'b0000110100; + parameter RCV_TERM_GND = "FALSE"; + parameter RCV_TERM_VTTRX = "TRUE"; + parameter RXGEARBOX_USE = "FALSE"; + parameter [23:0] RXPLL_COM_CFG = 24'h21680A; + parameter [7:0] RXPLL_CP_CFG = 8'h00; + parameter integer RXPLL_DIVSEL45_FB = 5; + parameter integer RXPLL_DIVSEL_FB = 2; + parameter integer RXPLL_DIVSEL_OUT = 1; + parameter integer RXPLL_DIVSEL_REF = 1; + parameter [2:0] RXPLL_LKDET_CFG = 3'b111; + parameter [0:0] RXPRBSERR_LOOPBACK = 1'b0; + parameter RXRECCLK_CTRL = "RXRECCLKPCS"; + parameter [9:0] RXRECCLK_DLY = 10'b0000000000; + parameter [15:0] RXUSRCLK_DLY = 16'h0000; + parameter RX_BUFFER_USE = "TRUE"; + parameter integer RX_CLK25_DIVIDER = 6; + parameter integer RX_DATA_WIDTH = 20; + parameter RX_DECODE_SEQ_MATCH = "TRUE"; + parameter [3:0] RX_DLYALIGN_CTRINC = 4'b0100; + parameter [4:0] RX_DLYALIGN_EDGESET = 5'b00110; + parameter [3:0] RX_DLYALIGN_LPFINC = 4'b0111; + parameter [2:0] RX_DLYALIGN_MONSEL = 3'b000; + parameter [7:0] RX_DLYALIGN_OVRDSETTING = 8'b00000000; + parameter RX_EN_IDLE_HOLD_CDR = "FALSE"; + parameter RX_EN_IDLE_HOLD_DFE = "TRUE"; + parameter RX_EN_IDLE_RESET_BUF = "TRUE"; + parameter RX_EN_IDLE_RESET_FR = "TRUE"; + parameter RX_EN_IDLE_RESET_PH = "TRUE"; + parameter RX_EN_MODE_RESET_BUF = "TRUE"; + parameter RX_EN_RATE_RESET_BUF = "TRUE"; + parameter RX_EN_REALIGN_RESET_BUF = "FALSE"; + parameter RX_EN_REALIGN_RESET_BUF2 = "FALSE"; + parameter [7:0] RX_EYE_OFFSET = 8'h4C; + parameter [1:0] RX_EYE_SCANMODE = 2'b00; + parameter RX_FIFO_ADDR_MODE = "FULL"; + parameter [3:0] RX_IDLE_HI_CNT = 4'b1000; + parameter [3:0] RX_IDLE_LO_CNT = 4'b0000; + parameter RX_LOSS_OF_SYNC_FSM = "FALSE"; + parameter integer RX_LOS_INVALID_INCR = 1; + parameter integer RX_LOS_THRESHOLD = 4; + parameter RX_OVERSAMPLE_MODE = "FALSE"; + parameter integer RX_SLIDE_AUTO_WAIT = 5; + parameter RX_SLIDE_MODE = "OFF"; + parameter RX_XCLK_SEL = "RXREC"; + parameter integer SAS_MAX_COMSAS = 52; + parameter integer SAS_MIN_COMSAS = 40; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter [2:0] SATA_IDLE_VAL = 3'b100; + parameter integer SATA_MAX_BURST = 7; + parameter integer SATA_MAX_INIT = 22; + parameter integer SATA_MAX_WAKE = 7; + parameter integer SATA_MIN_BURST = 4; + parameter integer SATA_MIN_INIT = 12; + parameter integer SATA_MIN_WAKE = 4; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter integer SIM_GTXRESET_SPEEDUP = 1; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter [2:0] SIM_RXREFCLK_SOURCE = 3'b000; + parameter [2:0] SIM_TXREFCLK_SOURCE = 3'b000; + parameter SIM_TX_ELEC_IDLE_LEVEL = "X"; + parameter SIM_VERSION = "2.0"; + parameter [4:0] TERMINATION_CTRL = 5'b10100; + parameter TERMINATION_OVRD = "FALSE"; + parameter [11:0] TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] TRANS_TIME_NON_P2 = 8'h19; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [9:0] TRANS_TIME_TO_P2 = 10'h064; + parameter [31:0] TST_ATTR = 32'h00000000; + parameter TXDRIVE_LOOPBACK_HIZ = "FALSE"; + parameter TXDRIVE_LOOPBACK_PD = "FALSE"; + parameter TXGEARBOX_USE = "FALSE"; + parameter TXOUTCLK_CTRL = "TXOUTCLKPCS"; + parameter [9:0] TXOUTCLK_DLY = 10'b0000000000; + parameter [23:0] TXPLL_COM_CFG = 24'h21680A; + parameter [7:0] TXPLL_CP_CFG = 8'h00; + parameter integer TXPLL_DIVSEL45_FB = 5; + parameter integer TXPLL_DIVSEL_FB = 2; + parameter integer TXPLL_DIVSEL_OUT = 1; + parameter integer TXPLL_DIVSEL_REF = 1; + parameter [2:0] TXPLL_LKDET_CFG = 3'b111; + parameter [1:0] TXPLL_SATA = 2'b00; + parameter TX_BUFFER_USE = "TRUE"; + parameter [5:0] TX_BYTECLK_CFG = 6'h00; + parameter integer TX_CLK25_DIVIDER = 6; + parameter TX_CLK_SOURCE = "RXPLL"; + parameter integer TX_DATA_WIDTH = 20; + parameter [4:0] TX_DEEMPH_0 = 5'b11010; + parameter [4:0] TX_DEEMPH_1 = 5'b10000; + parameter [13:0] TX_DETECT_RX_CFG = 14'h1832; + parameter [3:0] TX_DLYALIGN_CTRINC = 4'b0100; + parameter [3:0] TX_DLYALIGN_LPFINC = 4'b0110; + parameter [2:0] TX_DLYALIGN_MONSEL = 3'b000; + parameter [7:0] TX_DLYALIGN_OVRDSETTING = 8'b10000000; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter TX_EN_RATE_RESET_BUF = "TRUE"; + parameter [2:0] TX_IDLE_ASSERT_DELAY = 3'b100; + parameter [2:0] TX_IDLE_DEASSERT_DELAY = 3'b010; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter TX_OVERSAMPLE_MODE = "FALSE"; + parameter [0:0] TX_PMADATA_OPT = 1'b0; + parameter [1:0] TX_TDCC_CFG = 2'b11; + parameter [5:0] TX_USRCLK_CFG = 6'h00; + parameter TX_XCLK_SEL = "TXUSR"; + output COMFINISH; + output COMINITDET; + output COMSASDET; + output COMWAKEDET; + output DRDY; + output PHYSTATUS; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output RXCOMMADET; + output RXDATAVALID; + output RXELECIDLE; + output RXHEADERVALID; + output RXOVERSAMPLEERR; + output RXPLLLKDET; + output RXPRBSERR; + output RXRATEDONE; + output RXRECCLK; + output RXRECCLKPCS; + output RXRESETDONE; + output RXSTARTOFSEQ; + output RXVALID; + output TXGEARBOXREADY; + output TXN; + output TXOUTCLK; + output TXOUTCLKPCS; + output TXP; + output TXPLLLKDET; + output TXRATEDONE; + output TXRESETDONE; + output [15:0] DRPDO; + output [1:0] MGTREFCLKFAB; + output [1:0] RXLOSSOFSYNC; + output [1:0] TXBUFSTATUS; + output [2:0] DFESENSCAL; + output [2:0] RXBUFSTATUS; + output [2:0] RXCLKCORCNT; + output [2:0] RXHEADER; + output [2:0] RXSTATUS; + output [31:0] RXDATA; + output [3:0] DFETAP3MONITOR; + output [3:0] DFETAP4MONITOR; + output [3:0] RXCHARISCOMMA; + output [3:0] RXCHARISK; + output [3:0] RXCHBONDO; + output [3:0] RXDISPERR; + output [3:0] RXNOTINTABLE; + output [3:0] RXRUNDISP; + output [3:0] TXKERR; + output [3:0] TXRUNDISP; + output [4:0] DFEEYEDACMON; + output [4:0] DFETAP1MONITOR; + output [4:0] DFETAP2MONITOR; + output [5:0] DFECLKDLYADJMON; + output [7:0] RXDLYALIGNMONITOR; + output [7:0] TXDLYALIGNMONITOR; + output [9:0] TSTOUT; + input DCLK; + input DEN; + input DFEDLYOVRD; + input DFETAPOVRD; + input DWE; + input GATERXELECIDLE; + input GREFCLKRX; + input GREFCLKTX; + input GTXRXRESET; + input GTXTXRESET; + input IGNORESIGDET; + input PERFCLKRX; + input PERFCLKTX; + input PLLRXRESET; + input PLLTXRESET; + input PRBSCNTRESET; + input RXBUFRESET; + input RXCDRRESET; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCOMMADETUSE; + input RXDEC8B10BUSE; + input RXDLYALIGNDISABLE; + input RXDLYALIGNMONENB; + input RXDLYALIGNOVERRIDE; + input RXDLYALIGNRESET; + input RXDLYALIGNSWPPRECURB; + input RXDLYALIGNUPDSW; + input RXENCHANSYNC; + input RXENMCOMMAALIGN; + input RXENPCOMMAALIGN; + input RXENPMAPHASEALIGN; + input RXENSAMPLEALIGN; + input RXGEARBOXSLIP; + input RXN; + input RXP; + input RXPLLLKDETEN; + input RXPLLPOWERDOWN; + input RXPMASETPHASE; + input RXPOLARITY; + input RXRESET; + input RXSLIDE; + input RXUSRCLK2; + input RXUSRCLK; + input TSTCLK0; + input TSTCLK1; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input TXDEEMPH; + input TXDETECTRX; + input TXDLYALIGNDISABLE; + input TXDLYALIGNMONENB; + input TXDLYALIGNOVERRIDE; + input TXDLYALIGNRESET; + input TXDLYALIGNUPDSW; + input TXELECIDLE; + input TXENC8B10BUSE; + input TXENPMAPHASEALIGN; + input TXINHIBIT; + input TXPDOWNASYNCH; + input TXPLLLKDETEN; + input TXPLLPOWERDOWN; + input TXPMASETPHASE; + input TXPOLARITY; + input TXPRBSFORCEERR; + input TXRESET; + input TXSTARTSEQ; + input TXSWING; + input TXUSRCLK2; + input TXUSRCLK; + input USRCODEERR; + input [12:0] GTXTEST; + input [15:0] DI; + input [19:0] TSTIN; + input [1:0] MGTREFCLKRX; + input [1:0] MGTREFCLKTX; + input [1:0] NORTHREFCLKRX; + input [1:0] NORTHREFCLKTX; + input [1:0] RXPOWERDOWN; + input [1:0] RXRATE; + input [1:0] SOUTHREFCLKRX; + input [1:0] SOUTHREFCLKTX; + input [1:0] TXPOWERDOWN; + input [1:0] TXRATE; + input [2:0] LOOPBACK; + input [2:0] RXCHBONDLEVEL; + input [2:0] RXENPRBSTST; + input [2:0] RXPLLREFSELDY; + input [2:0] TXBUFDIFFCTRL; + input [2:0] TXENPRBSTST; + input [2:0] TXHEADER; + input [2:0] TXMARGIN; + input [2:0] TXPLLREFSELDY; + input [31:0] TXDATA; + input [3:0] DFETAP3; + input [3:0] DFETAP4; + input [3:0] RXCHBONDI; + input [3:0] TXBYPASS8B10B; + input [3:0] TXCHARDISPMODE; + input [3:0] TXCHARDISPVAL; + input [3:0] TXCHARISK; + input [3:0] TXDIFFCTRL; + input [3:0] TXPREEMPHASIS; + input [4:0] DFETAP1; + input [4:0] DFETAP2; + input [4:0] TXPOSTEMPHASIS; + input [5:0] DFECLKDLYADJ; + input [6:0] TXSEQUENCE; + input [7:0] DADDR; + input [9:0] RXEQMIX; +endmodule + +module IBUFDS_GTXE1 (...); + parameter CLKCM_CFG = "TRUE"; + parameter CLKRCV_TRST = "TRUE"; + parameter [9:0] REFCLKOUT_DLY = 10'b0000000000; + output O; + output ODIV2; + input CEB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module IBUFDS_GTHE1 (...); + output O; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module GTHE2_CHANNEL (...); + parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0; + parameter [0:0] ACJTAG_MODE = 1'b0; + parameter [0:0] ACJTAG_RESET = 1'b0; + parameter [19:0] ADAPT_CFG0 = 20'h00C10; + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter [0:0] A_RXOSCALRESET = 1'b0; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter [41:0] CFOK_CFG = 42'h24800040E80; + parameter [5:0] CFOK_CFG2 = 6'b100000; + parameter [5:0] CFOK_CFG3 = 6'b100000; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 1; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 1; + parameter [28:0] CPLL_CFG = 29'h00BC07DC; + parameter integer CPLL_FBDIV = 4; + parameter integer CPLL_FBDIV_45 = 5; + parameter [23:0] CPLL_INIT_CFG = 24'h00001E; + parameter [15:0] CPLL_LOCK_CFG = 16'h01E8; + parameter integer CPLL_REFCLK_DIV = 1; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [23:0] DMONITOR_CFG = 24'h000A00; + parameter [0:0] ES_CLK_PHASE_SEL = 1'b0; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "TRUE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h000; + parameter [9:0] ES_PMA_CFG = 10'b0000000000; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [79:0] ES_QUALIFIER = 80'h00000000000000000000; + parameter [79:0] ES_QUAL_MASK = 80'h00000000000000000000; + parameter [79:0] ES_SDATA_MASK = 80'h00000000000000000000; + parameter [8:0] ES_VERT_OFFSET = 9'b000000000; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [2:0] GEARBOX_MODE = 3'b000; + parameter [0:0] IS_CLKRSVD0_INVERTED = 1'b0; + parameter [0:0] IS_CLKRSVD1_INVERTED = 1'b0; + parameter [0:0] IS_CPLLLOCKDETCLK_INVERTED = 1'b0; + parameter [0:0] IS_DMONITORCLK_INVERTED = 1'b0; + parameter [0:0] IS_DRPCLK_INVERTED = 1'b0; + parameter [0:0] IS_GTGREFCLK_INVERTED = 1'b0; + parameter [0:0] IS_RXUSRCLK2_INVERTED = 1'b0; + parameter [0:0] IS_RXUSRCLK_INVERTED = 1'b0; + parameter [0:0] IS_SIGVALIDCLK_INVERTED = 1'b0; + parameter [0:0] IS_TXPHDLYTSTCLK_INVERTED = 1'b0; + parameter [0:0] IS_TXUSRCLK2_INVERTED = 1'b0; + parameter [0:0] IS_TXUSRCLK_INVERTED = 1'b0; + parameter [0:0] LOOPBACK_CFG = 1'b0; + parameter [1:0] OUTREFCLK_SEL_INV = 2'b11; + parameter PCS_PCIE_EN = "FALSE"; + parameter [47:0] PCS_RSVD_ATTR = 48'h000000000000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter [31:0] PMA_RSV = 32'b00000000000000000000000010000000; + parameter [31:0] PMA_RSV2 = 32'b00011100000000000000000000001010; + parameter [1:0] PMA_RSV3 = 2'b00; + parameter [14:0] PMA_RSV4 = 15'b000000000001000; + parameter [3:0] PMA_RSV5 = 4'b0000; + parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 61; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [82:0] RXCDR_CFG = 83'h0002007FE2000C208001A; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [5:0] RXCDR_LOCK_CFG = 6'b001001; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111; + parameter [15:0] RXDLY_CFG = 16'h001F; + parameter [8:0] RXDLY_LCFG = 9'h030; + parameter [15:0] RXDLY_TAP_CFG = 16'h0000; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [13:0] RXLPM_HF_CFG = 14'b00001000000000; + parameter [17:0] RXLPM_LF_CFG = 18'b001001000000000000; + parameter [6:0] RXOOB_CFG = 7'b0000110; + parameter RXOOB_CLK_CFG = "PMA"; + parameter [4:0] RXOSCALRESET_TIME = 5'b00011; + parameter [4:0] RXOSCALRESET_TIMEOUT = 5'b00000; + parameter integer RXOUT_DIV = 2; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [23:0] RXPHDLY_CFG = 24'h084020; + parameter [23:0] RXPH_CFG = 24'hC00002; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [1:0] RXPI_CFG0 = 2'b00; + parameter [1:0] RXPI_CFG1 = 2'b00; + parameter [1:0] RXPI_CFG2 = 2'b00; + parameter [1:0] RXPI_CFG3 = 2'b00; + parameter [0:0] RXPI_CFG4 = 1'b0; + parameter [0:0] RXPI_CFG5 = 1'b0; + parameter [2:0] RXPI_CFG6 = 3'b100; + parameter [4:0] RXPMARESET_TIME = 5'b00011; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [0:0] RXSYNC_MULTILANE = 1'b0; + parameter [0:0] RXSYNC_OVRD = 1'b0; + parameter [0:0] RXSYNC_SKIP_DA = 1'b0; + parameter [23:0] RX_BIAS_CFG = 24'b000011000000000000010000; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter integer RX_CLK25_DIV = 7; + parameter [0:0] RX_CLKMUX_PD = 1'b1; + parameter [1:0] RX_CM_SEL = 2'b11; + parameter [3:0] RX_CM_TRIM = 4'b0100; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter [13:0] RX_DEBUG_CFG = 14'b00000000000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter [3:0] RX_DFELPM_CFG0 = 4'b0110; + parameter [0:0] RX_DFELPM_CFG1 = 1'b0; + parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1; + parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00; + parameter [2:0] RX_DFE_AGC_CFG1 = 3'b010; + parameter [3:0] RX_DFE_AGC_CFG2 = 4'b0000; + parameter [0:0] RX_DFE_AGC_OVRDEN = 1'b1; + parameter [22:0] RX_DFE_GAIN_CFG = 23'h0020C0; + parameter [11:0] RX_DFE_H2_CFG = 12'b000000000000; + parameter [11:0] RX_DFE_H3_CFG = 12'b000001000000; + parameter [10:0] RX_DFE_H4_CFG = 11'b00011100000; + parameter [10:0] RX_DFE_H5_CFG = 11'b00011100000; + parameter [10:0] RX_DFE_H6_CFG = 11'b00000100000; + parameter [10:0] RX_DFE_H7_CFG = 11'b00000100000; + parameter [32:0] RX_DFE_KL_CFG = 33'b000000000000000000000001100010000; + parameter [1:0] RX_DFE_KL_LPM_KH_CFG0 = 2'b01; + parameter [2:0] RX_DFE_KL_LPM_KH_CFG1 = 3'b010; + parameter [3:0] RX_DFE_KL_LPM_KH_CFG2 = 4'b0010; + parameter [0:0] RX_DFE_KL_LPM_KH_OVRDEN = 1'b1; + parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b10; + parameter [2:0] RX_DFE_KL_LPM_KL_CFG1 = 3'b010; + parameter [3:0] RX_DFE_KL_LPM_KL_CFG2 = 4'b0010; + parameter [0:0] RX_DFE_KL_LPM_KL_OVRDEN = 1'b1; + parameter [15:0] RX_DFE_LPM_CFG = 16'h0080; + parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0; + parameter [53:0] RX_DFE_ST_CFG = 54'h00E100000C003F; + parameter [16:0] RX_DFE_UT_CFG = 17'b00011100000000000; + parameter [16:0] RX_DFE_VP_CFG = 17'b00011101010100011; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter integer RX_INT_DATAWIDTH = 0; + parameter [12:0] RX_OS_CFG = 13'b0000010000000; + parameter integer RX_SIG_VALID_DLY = 10; + parameter RX_XCLK_SEL = "RXREC"; + parameter integer SAS_MAX_COM = 64; + parameter integer SAS_MIN_COM = 36; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter SATA_CPLL_CFG = "VCO_3000MHZ"; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter integer SATA_MAX_BURST = 8; + parameter integer SATA_MAX_INIT = 21; + parameter integer SATA_MAX_WAKE = 7; + parameter integer SATA_MIN_BURST = 4; + parameter integer SATA_MIN_INIT = 12; + parameter integer SATA_MIN_WAKE = 4; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter [2:0] SIM_CPLLREFCLK_SEL = 3'b001; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_TX_EIDLE_DRIVE_LEVEL = "X"; + parameter SIM_VERSION = "1.1"; + parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000; + parameter [2:0] TERM_RCAL_OVRD = 3'b000; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [31:0] TST_RSV = 32'h00000000; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h001F; + parameter [8:0] TXDLY_LCFG = 9'h030; + parameter [15:0] TXDLY_TAP_CFG = 16'h0000; + parameter TXGEARBOX_EN = "FALSE"; + parameter [0:0] TXOOB_CFG = 1'b0; + parameter integer TXOUT_DIV = 2; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [23:0] TXPHDLY_CFG = 24'h084020; + parameter [15:0] TXPH_CFG = 16'h0780; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [1:0] TXPI_CFG0 = 2'b00; + parameter [1:0] TXPI_CFG1 = 2'b00; + parameter [1:0] TXPI_CFG2 = 2'b00; + parameter [0:0] TXPI_CFG3 = 1'b0; + parameter [0:0] TXPI_CFG4 = 1'b0; + parameter [2:0] TXPI_CFG5 = 3'b100; + parameter [0:0] TXPI_GREY_SEL = 1'b0; + parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0; + parameter TXPI_PPMCLK_SEL = "TXUSRCLK2"; + parameter [7:0] TXPI_PPM_CFG = 8'b00000000; + parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter [0:0] TXSYNC_MULTILANE = 1'b0; + parameter [0:0] TXSYNC_OVRD = 1'b0; + parameter [0:0] TXSYNC_SKIP_DA = 1'b0; + parameter integer TX_CLK25_DIV = 7; + parameter [0:0] TX_CLKMUX_PD = 1'b1; + parameter integer TX_DATA_WIDTH = 20; + parameter [5:0] TX_DEEMPH0 = 6'b000000; + parameter [5:0] TX_DEEMPH1 = 6'b000000; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter integer TX_INT_DATAWIDTH = 0; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [0:0] TX_QPI_STATUS_EN = 1'b0; + parameter [13:0] TX_RXDETECT_CFG = 14'h1832; + parameter [16:0] TX_RXDETECT_PRECHARGE_TIME = 17'h00000; + parameter [2:0] TX_RXDETECT_REF = 3'b100; + parameter TX_XCLK_SEL = "TXUSR"; + parameter [0:0] UCODEER_CLR = 1'b0; + parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0; + output CPLLFBCLKLOST; + output CPLLLOCK; + output CPLLREFCLKLOST; + output DRPRDY; + output EYESCANDATAERROR; + output GTHTXN; + output GTHTXP; + output GTREFCLKMONITOR; + output PHYSTATUS; + output RSOSINTDONE; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output RXDFESLIDETAPSTARTED; + output RXDFESLIDETAPSTROBEDONE; + output RXDFESLIDETAPSTROBESTARTED; + output RXDFESTADAPTDONE; + output RXDLYSRESETDONE; + output RXELECIDLE; + output RXOSINTSTARTED; + output RXOSINTSTROBEDONE; + output RXOSINTSTROBESTARTED; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPMARESETDONE; + output RXPRBSERR; + output RXQPISENN; + output RXQPISENP; + output RXRATEDONE; + output RXRESETDONE; + output RXSYNCDONE; + output RXSYNCOUT; + output RXVALID; + output TXCOMFINISH; + output TXDLYSRESETDONE; + output TXGEARBOXREADY; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXPMARESETDONE; + output TXQPISENN; + output TXQPISENP; + output TXRATEDONE; + output TXRESETDONE; + output TXSYNCDONE; + output TXSYNCOUT; + output [14:0] DMONITOROUT; + output [15:0] DRPDO; + output [15:0] PCSRSVDOUT; + output [1:0] RXCLKCORCNT; + output [1:0] RXDATAVALID; + output [1:0] RXHEADERVALID; + output [1:0] RXSTARTOFSEQ; + output [1:0] TXBUFSTATUS; + output [2:0] RXBUFSTATUS; + output [2:0] RXSTATUS; + output [4:0] RXCHBONDO; + output [4:0] RXPHMONITOR; + output [4:0] RXPHSLIPMONITOR; + output [5:0] RXHEADER; + output [63:0] RXDATA; + output [6:0] RXMONITOROUT; + output [7:0] RXCHARISCOMMA; + output [7:0] RXCHARISK; + output [7:0] RXDISPERR; + output [7:0] RXNOTINTABLE; + input CFGRESET; + (* invertible_pin = "IS_CLKRSVD0_INVERTED" *) + input CLKRSVD0; + (* invertible_pin = "IS_CLKRSVD1_INVERTED" *) + input CLKRSVD1; + (* invertible_pin = "IS_CPLLLOCKDETCLK_INVERTED" *) + input CPLLLOCKDETCLK; + input CPLLLOCKEN; + input CPLLPD; + input CPLLRESET; + input DMONFIFORESET; + (* invertible_pin = "IS_DMONITORCLK_INVERTED" *) + input DMONITORCLK; + (* invertible_pin = "IS_DRPCLK_INVERTED" *) + input DRPCLK; + input DRPEN; + input DRPWE; + input EYESCANMODE; + input EYESCANRESET; + input EYESCANTRIGGER; + (* invertible_pin = "IS_GTGREFCLK_INVERTED" *) + input GTGREFCLK; + input GTHRXN; + input GTHRXP; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTRESETSEL; + input GTRXRESET; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + input GTTXRESET; + input QPLLCLK; + input QPLLREFCLK; + input RESETOVRD; + input RX8B10BEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCDRRESETRSV; + input RXCHBONDEN; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCOMMADETEN; + input RXDDIEN; + input RXDFEAGCHOLD; + input RXDFEAGCOVRDEN; + input RXDFECM1EN; + input RXDFELFHOLD; + input RXDFELFOVRDEN; + input RXDFELPMRESET; + input RXDFESLIDETAPADAPTEN; + input RXDFESLIDETAPHOLD; + input RXDFESLIDETAPINITOVRDEN; + input RXDFESLIDETAPONLYADAPTEN; + input RXDFESLIDETAPOVRDEN; + input RXDFESLIDETAPSTROBE; + input RXDFETAP2HOLD; + input RXDFETAP2OVRDEN; + input RXDFETAP3HOLD; + input RXDFETAP3OVRDEN; + input RXDFETAP4HOLD; + input RXDFETAP4OVRDEN; + input RXDFETAP5HOLD; + input RXDFETAP5OVRDEN; + input RXDFETAP6HOLD; + input RXDFETAP6OVRDEN; + input RXDFETAP7HOLD; + input RXDFETAP7OVRDEN; + input RXDFEUTHOLD; + input RXDFEUTOVRDEN; + input RXDFEVPHOLD; + input RXDFEVPOVRDEN; + input RXDFEVSEN; + input RXDFEXYDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input RXGEARBOXSLIP; + input RXLPMEN; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFKLOVRDEN; + input RXMCOMMAALIGNEN; + input RXOOBRESET; + input RXOSCALRESET; + input RXOSHOLD; + input RXOSINTEN; + input RXOSINTHOLD; + input RXOSINTNTRLEN; + input RXOSINTOVRDEN; + input RXOSINTSTROBE; + input RXOSINTTESTOVRDEN; + input RXOSOVRDEN; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input RXPHOVRDEN; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input RXQPIEN; + input RXRATEMODE; + input RXSLIDE; + input RXSYNCALLIN; + input RXSYNCIN; + input RXSYNCMODE; + input RXUSERRDY; + (* invertible_pin = "IS_RXUSRCLK2_INVERTED" *) + input RXUSRCLK2; + (* invertible_pin = "IS_RXUSRCLK_INVERTED" *) + input RXUSRCLK; + input SETERRSTATUS; + (* invertible_pin = "IS_SIGVALIDCLK_INVERTED" *) + input SIGVALIDCLK; + input TX8B10BEN; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input TXDEEMPH; + input TXDETECTRX; + input TXDIFFPD; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input TXINHIBIT; + input TXPCSRESET; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + (* invertible_pin = "IS_TXPHDLYTSTCLK_INVERTED" *) + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPIPPMEN; + input TXPIPPMOVRDEN; + input TXPIPPMPD; + input TXPIPPMSEL; + input TXPISOPD; + input TXPMARESET; + input TXPOLARITY; + input TXPOSTCURSORINV; + input TXPRBSFORCEERR; + input TXPRECURSORINV; + input TXQPIBIASEN; + input TXQPISTRONGPDOWN; + input TXQPIWEAKPUP; + input TXRATEMODE; + input TXSTARTSEQ; + input TXSWING; + input TXSYNCALLIN; + input TXSYNCIN; + input TXSYNCMODE; + input TXUSERRDY; + (* invertible_pin = "IS_TXUSRCLK2_INVERTED" *) + input TXUSRCLK2; + (* invertible_pin = "IS_TXUSRCLK_INVERTED" *) + input TXUSRCLK; + input [13:0] RXADAPTSELTEST; + input [15:0] DRPDI; + input [15:0] GTRSVD; + input [15:0] PCSRSVDIN; + input [19:0] TSTIN; + input [1:0] RXELECIDLEMODE; + input [1:0] RXMONITORSEL; + input [1:0] RXPD; + input [1:0] RXSYSCLKSEL; + input [1:0] TXPD; + input [1:0] TXSYSCLKSEL; + input [2:0] CPLLREFCLKSEL; + input [2:0] LOOPBACK; + input [2:0] RXCHBONDLEVEL; + input [2:0] RXOUTCLKSEL; + input [2:0] RXPRBSSEL; + input [2:0] RXRATE; + input [2:0] TXBUFDIFFCTRL; + input [2:0] TXHEADER; + input [2:0] TXMARGIN; + input [2:0] TXOUTCLKSEL; + input [2:0] TXPRBSSEL; + input [2:0] TXRATE; + input [3:0] RXOSINTCFG; + input [3:0] RXOSINTID0; + input [3:0] TXDIFFCTRL; + input [4:0] PCSRSVDIN2; + input [4:0] PMARSVDIN; + input [4:0] RXCHBONDI; + input [4:0] RXDFEAGCTRL; + input [4:0] RXDFESLIDETAP; + input [4:0] TXPIPPMSTEPSIZE; + input [4:0] TXPOSTCURSOR; + input [4:0] TXPRECURSOR; + input [5:0] RXDFESLIDETAPID; + input [63:0] TXDATA; + input [6:0] TXMAINCURSOR; + input [6:0] TXSEQUENCE; + input [7:0] TX8B10BBYPASS; + input [7:0] TXCHARDISPMODE; + input [7:0] TXCHARDISPVAL; + input [7:0] TXCHARISK; + input [8:0] DRPADDR; +endmodule + +module GTHE2_COMMON (...); + parameter [63:0] BIAS_CFG = 64'h0000040000001000; + parameter [31:0] COMMON_CFG = 32'h0000001C; + parameter [0:0] IS_DRPCLK_INVERTED = 1'b0; + parameter [0:0] IS_GTGREFCLK_INVERTED = 1'b0; + parameter [0:0] IS_QPLLLOCKDETCLK_INVERTED = 1'b0; + parameter [26:0] QPLL_CFG = 27'h0480181; + parameter [3:0] QPLL_CLKOUT_CFG = 4'b0000; + parameter [5:0] QPLL_COARSE_FREQ_OVRD = 6'b010000; + parameter [0:0] QPLL_COARSE_FREQ_OVRD_EN = 1'b0; + parameter [9:0] QPLL_CP = 10'b0000011111; + parameter [0:0] QPLL_CP_MONITOR_EN = 1'b0; + parameter [0:0] QPLL_DMONITOR_SEL = 1'b0; + parameter [9:0] QPLL_FBDIV = 10'b0000000000; + parameter [0:0] QPLL_FBDIV_MONITOR_EN = 1'b0; + parameter [0:0] QPLL_FBDIV_RATIO = 1'b0; + parameter [23:0] QPLL_INIT_CFG = 24'h000006; + parameter [15:0] QPLL_LOCK_CFG = 16'h01E8; + parameter [3:0] QPLL_LPF = 4'b1111; + parameter integer QPLL_REFCLK_DIV = 2; + parameter [0:0] QPLL_RP_COMP = 1'b0; + parameter [1:0] QPLL_VTRL_RESET = 2'b00; + parameter [1:0] RCAL_CFG = 2'b00; + parameter [15:0] RSVD_ATTR0 = 16'h0000; + parameter [15:0] RSVD_ATTR1 = 16'h0000; + parameter [2:0] SIM_QPLLREFCLK_SEL = 3'b001; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_VERSION = "1.1"; + output DRPRDY; + output QPLLFBCLKLOST; + output QPLLLOCK; + output QPLLOUTCLK; + output QPLLOUTREFCLK; + output QPLLREFCLKLOST; + output REFCLKOUTMONITOR; + output [15:0] DRPDO; + output [15:0] PMARSVDOUT; + output [7:0] QPLLDMONITOR; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input BGRCALOVRDENB; + (* invertible_pin = "IS_DRPCLK_INVERTED" *) + input DRPCLK; + input DRPEN; + input DRPWE; + (* invertible_pin = "IS_GTGREFCLK_INVERTED" *) + input GTGREFCLK; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + (* invertible_pin = "IS_QPLLLOCKDETCLK_INVERTED" *) + input QPLLLOCKDETCLK; + input QPLLLOCKEN; + input QPLLOUTRESET; + input QPLLPD; + input QPLLRESET; + input RCALENB; + input [15:0] DRPDI; + input [15:0] QPLLRSVD1; + input [2:0] QPLLREFCLKSEL; + input [4:0] BGRCALOVRD; + input [4:0] QPLLRSVD2; + input [7:0] DRPADDR; + input [7:0] PMARSVD; +endmodule + +module GTPE2_CHANNEL (...); + parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0; + parameter [0:0] ACJTAG_MODE = 1'b0; + parameter [0:0] ACJTAG_RESET = 1'b0; + parameter [19:0] ADAPT_CFG0 = 20'b00000000000000000000; + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter [42:0] CFOK_CFG = 43'b1001001000000000000000001000000111010000000; + parameter [6:0] CFOK_CFG2 = 7'b0100000; + parameter [6:0] CFOK_CFG3 = 7'b0100000; + parameter [0:0] CFOK_CFG4 = 1'b0; + parameter [1:0] CFOK_CFG5 = 2'b00; + parameter [3:0] CFOK_CFG6 = 4'b0000; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 1; + parameter [0:0] CLK_COMMON_SWING = 1'b0; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 1; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [23:0] DMONITOR_CFG = 24'h000A00; + parameter [0:0] ES_CLK_PHASE_SEL = 1'b0; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "FALSE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h010; + parameter [9:0] ES_PMA_CFG = 10'b0000000000; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [79:0] ES_QUALIFIER = 80'h00000000000000000000; + parameter [79:0] ES_QUAL_MASK = 80'h00000000000000000000; + parameter [79:0] ES_SDATA_MASK = 80'h00000000000000000000; + parameter [8:0] ES_VERT_OFFSET = 9'b000000000; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [2:0] GEARBOX_MODE = 3'b000; + parameter [0:0] IS_CLKRSVD0_INVERTED = 1'b0; + parameter [0:0] IS_CLKRSVD1_INVERTED = 1'b0; + parameter [0:0] IS_DMONITORCLK_INVERTED = 1'b0; + parameter [0:0] IS_DRPCLK_INVERTED = 1'b0; + parameter [0:0] IS_RXUSRCLK2_INVERTED = 1'b0; + parameter [0:0] IS_RXUSRCLK_INVERTED = 1'b0; + parameter [0:0] IS_SIGVALIDCLK_INVERTED = 1'b0; + parameter [0:0] IS_TXPHDLYTSTCLK_INVERTED = 1'b0; + parameter [0:0] IS_TXUSRCLK2_INVERTED = 1'b0; + parameter [0:0] IS_TXUSRCLK_INVERTED = 1'b0; + parameter [0:0] LOOPBACK_CFG = 1'b0; + parameter [1:0] OUTREFCLK_SEL_INV = 2'b11; + parameter PCS_PCIE_EN = "FALSE"; + parameter [47:0] PCS_RSVD_ATTR = 48'h000000000000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter [0:0] PMA_LOOPBACK_CFG = 1'b0; + parameter [31:0] PMA_RSV = 32'h00000333; + parameter [31:0] PMA_RSV2 = 32'h00002050; + parameter [1:0] PMA_RSV3 = 2'b00; + parameter [3:0] PMA_RSV4 = 4'b0000; + parameter [0:0] PMA_RSV5 = 1'b0; + parameter [0:0] PMA_RSV6 = 1'b0; + parameter [0:0] PMA_RSV7 = 1'b0; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 61; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [82:0] RXCDR_CFG = 83'h0000107FE406001041010; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [5:0] RXCDR_LOCK_CFG = 6'b001001; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [15:0] RXDLY_CFG = 16'h0010; + parameter [8:0] RXDLY_LCFG = 9'h020; + parameter [15:0] RXDLY_TAP_CFG = 16'h0000; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [6:0] RXLPMRESET_TIME = 7'b0001111; + parameter [0:0] RXLPM_BIAS_STARTUP_DISABLE = 1'b0; + parameter [3:0] RXLPM_CFG = 4'b0110; + parameter [0:0] RXLPM_CFG1 = 1'b0; + parameter [0:0] RXLPM_CM_CFG = 1'b0; + parameter [8:0] RXLPM_GC_CFG = 9'b111100010; + parameter [2:0] RXLPM_GC_CFG2 = 3'b001; + parameter [13:0] RXLPM_HF_CFG = 14'b00001111110000; + parameter [4:0] RXLPM_HF_CFG2 = 5'b01010; + parameter [3:0] RXLPM_HF_CFG3 = 4'b0000; + parameter [0:0] RXLPM_HOLD_DURING_EIDLE = 1'b0; + parameter [0:0] RXLPM_INCM_CFG = 1'b0; + parameter [0:0] RXLPM_IPCM_CFG = 1'b0; + parameter [17:0] RXLPM_LF_CFG = 18'b000000001111110000; + parameter [4:0] RXLPM_LF_CFG2 = 5'b01010; + parameter [2:0] RXLPM_OSINT_CFG = 3'b100; + parameter [6:0] RXOOB_CFG = 7'b0000110; + parameter RXOOB_CLK_CFG = "PMA"; + parameter [4:0] RXOSCALRESET_TIME = 5'b00011; + parameter [4:0] RXOSCALRESET_TIMEOUT = 5'b00000; + parameter integer RXOUT_DIV = 2; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [23:0] RXPHDLY_CFG = 24'h084000; + parameter [23:0] RXPH_CFG = 24'hC00002; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [2:0] RXPI_CFG0 = 3'b000; + parameter [0:0] RXPI_CFG1 = 1'b0; + parameter [0:0] RXPI_CFG2 = 1'b0; + parameter [4:0] RXPMARESET_TIME = 5'b00011; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [0:0] RXSYNC_MULTILANE = 1'b0; + parameter [0:0] RXSYNC_OVRD = 1'b0; + parameter [0:0] RXSYNC_SKIP_DA = 1'b0; + parameter [15:0] RX_BIAS_CFG = 16'b0000111100110011; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter integer RX_CLK25_DIV = 7; + parameter [0:0] RX_CLKMUX_EN = 1'b1; + parameter [1:0] RX_CM_SEL = 2'b11; + parameter [3:0] RX_CM_TRIM = 4'b0100; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter [13:0] RX_DEBUG_CFG = 14'b00000000000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter [12:0] RX_OS_CFG = 13'b0001111110000; + parameter integer RX_SIG_VALID_DLY = 10; + parameter RX_XCLK_SEL = "RXREC"; + parameter integer SAS_MAX_COM = 64; + parameter integer SAS_MIN_COM = 36; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter integer SATA_MAX_BURST = 8; + parameter integer SATA_MAX_INIT = 21; + parameter integer SATA_MAX_WAKE = 7; + parameter integer SATA_MIN_BURST = 4; + parameter integer SATA_MIN_INIT = 12; + parameter integer SATA_MIN_WAKE = 4; + parameter SATA_PLL_CFG = "VCO_3000MHZ"; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_TX_EIDLE_DRIVE_LEVEL = "X"; + parameter SIM_VERSION = "1.0"; + parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000; + parameter [2:0] TERM_RCAL_OVRD = 3'b000; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [31:0] TST_RSV = 32'h00000000; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h0010; + parameter [8:0] TXDLY_LCFG = 9'h020; + parameter [15:0] TXDLY_TAP_CFG = 16'h0000; + parameter TXGEARBOX_EN = "FALSE"; + parameter [0:0] TXOOB_CFG = 1'b0; + parameter integer TXOUT_DIV = 2; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [23:0] TXPHDLY_CFG = 24'h084000; + parameter [15:0] TXPH_CFG = 16'h0400; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [1:0] TXPI_CFG0 = 2'b00; + parameter [1:0] TXPI_CFG1 = 2'b00; + parameter [1:0] TXPI_CFG2 = 2'b00; + parameter [0:0] TXPI_CFG3 = 1'b0; + parameter [0:0] TXPI_CFG4 = 1'b0; + parameter [2:0] TXPI_CFG5 = 3'b000; + parameter [0:0] TXPI_GREY_SEL = 1'b0; + parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0; + parameter TXPI_PPMCLK_SEL = "TXUSRCLK2"; + parameter [7:0] TXPI_PPM_CFG = 8'b00000000; + parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter [0:0] TXSYNC_MULTILANE = 1'b0; + parameter [0:0] TXSYNC_OVRD = 1'b0; + parameter [0:0] TXSYNC_SKIP_DA = 1'b0; + parameter integer TX_CLK25_DIV = 7; + parameter [0:0] TX_CLKMUX_EN = 1'b1; + parameter integer TX_DATA_WIDTH = 20; + parameter [5:0] TX_DEEMPH0 = 6'b000000; + parameter [5:0] TX_DEEMPH1 = 6'b000000; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [0:0] TX_PREDRIVER_MODE = 1'b0; + parameter [13:0] TX_RXDETECT_CFG = 14'h1832; + parameter [2:0] TX_RXDETECT_REF = 3'b100; + parameter TX_XCLK_SEL = "TXUSR"; + parameter [0:0] UCODEER_CLR = 1'b0; + parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0; + output DRPRDY; + output EYESCANDATAERROR; + output GTPTXN; + output GTPTXP; + output PHYSTATUS; + output PMARSVDOUT0; + output PMARSVDOUT1; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output RXDLYSRESETDONE; + output RXELECIDLE; + output RXHEADERVALID; + output RXOSINTDONE; + output RXOSINTSTARTED; + output RXOSINTSTROBEDONE; + output RXOSINTSTROBESTARTED; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPMARESETDONE; + output RXPRBSERR; + output RXRATEDONE; + output RXRESETDONE; + output RXSYNCDONE; + output RXSYNCOUT; + output RXVALID; + output TXCOMFINISH; + output TXDLYSRESETDONE; + output TXGEARBOXREADY; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXPMARESETDONE; + output TXRATEDONE; + output TXRESETDONE; + output TXSYNCDONE; + output TXSYNCOUT; + output [14:0] DMONITOROUT; + output [15:0] DRPDO; + output [15:0] PCSRSVDOUT; + output [1:0] RXCLKCORCNT; + output [1:0] RXDATAVALID; + output [1:0] RXSTARTOFSEQ; + output [1:0] TXBUFSTATUS; + output [2:0] RXBUFSTATUS; + output [2:0] RXHEADER; + output [2:0] RXSTATUS; + output [31:0] RXDATA; + output [3:0] RXCHARISCOMMA; + output [3:0] RXCHARISK; + output [3:0] RXCHBONDO; + output [3:0] RXDISPERR; + output [3:0] RXNOTINTABLE; + output [4:0] RXPHMONITOR; + output [4:0] RXPHSLIPMONITOR; + input CFGRESET; + (* invertible_pin = "IS_CLKRSVD0_INVERTED" *) + input CLKRSVD0; + (* invertible_pin = "IS_CLKRSVD1_INVERTED" *) + input CLKRSVD1; + input DMONFIFORESET; + (* invertible_pin = "IS_DMONITORCLK_INVERTED" *) + input DMONITORCLK; + (* invertible_pin = "IS_DRPCLK_INVERTED" *) + input DRPCLK; + input DRPEN; + input DRPWE; + input EYESCANMODE; + input EYESCANRESET; + input EYESCANTRIGGER; + input GTPRXN; + input GTPRXP; + input GTRESETSEL; + input GTRXRESET; + input GTTXRESET; + input PLL0CLK; + input PLL0REFCLK; + input PLL1CLK; + input PLL1REFCLK; + input PMARSVDIN0; + input PMARSVDIN1; + input PMARSVDIN2; + input PMARSVDIN3; + input PMARSVDIN4; + input RESETOVRD; + input RX8B10BEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCDRRESETRSV; + input RXCHBONDEN; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCOMMADETEN; + input RXDDIEN; + input RXDFEXYDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input RXGEARBOXSLIP; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFOVRDEN; + input RXLPMOSINTNTRLEN; + input RXLPMRESET; + input RXMCOMMAALIGNEN; + input RXOOBRESET; + input RXOSCALRESET; + input RXOSHOLD; + input RXOSINTEN; + input RXOSINTHOLD; + input RXOSINTNTRLEN; + input RXOSINTOVRDEN; + input RXOSINTPD; + input RXOSINTSTROBE; + input RXOSINTTESTOVRDEN; + input RXOSOVRDEN; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input RXPHOVRDEN; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input RXRATEMODE; + input RXSLIDE; + input RXSYNCALLIN; + input RXSYNCIN; + input RXSYNCMODE; + input RXUSERRDY; + (* invertible_pin = "IS_RXUSRCLK2_INVERTED" *) + input RXUSRCLK2; + (* invertible_pin = "IS_RXUSRCLK_INVERTED" *) + input RXUSRCLK; + input SETERRSTATUS; + (* invertible_pin = "IS_SIGVALIDCLK_INVERTED" *) + input SIGVALIDCLK; + input TX8B10BEN; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input TXDEEMPH; + input TXDETECTRX; + input TXDIFFPD; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input TXINHIBIT; + input TXPCSRESET; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + (* invertible_pin = "IS_TXPHDLYTSTCLK_INVERTED" *) + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPIPPMEN; + input TXPIPPMOVRDEN; + input TXPIPPMPD; + input TXPIPPMSEL; + input TXPISOPD; + input TXPMARESET; + input TXPOLARITY; + input TXPOSTCURSORINV; + input TXPRBSFORCEERR; + input TXPRECURSORINV; + input TXRATEMODE; + input TXSTARTSEQ; + input TXSWING; + input TXSYNCALLIN; + input TXSYNCIN; + input TXSYNCMODE; + input TXUSERRDY; + (* invertible_pin = "IS_TXUSRCLK2_INVERTED" *) + input TXUSRCLK2; + (* invertible_pin = "IS_TXUSRCLK_INVERTED" *) + input TXUSRCLK; + input [13:0] RXADAPTSELTEST; + input [15:0] DRPDI; + input [15:0] GTRSVD; + input [15:0] PCSRSVDIN; + input [19:0] TSTIN; + input [1:0] RXELECIDLEMODE; + input [1:0] RXPD; + input [1:0] RXSYSCLKSEL; + input [1:0] TXPD; + input [1:0] TXSYSCLKSEL; + input [2:0] LOOPBACK; + input [2:0] RXCHBONDLEVEL; + input [2:0] RXOUTCLKSEL; + input [2:0] RXPRBSSEL; + input [2:0] RXRATE; + input [2:0] TXBUFDIFFCTRL; + input [2:0] TXHEADER; + input [2:0] TXMARGIN; + input [2:0] TXOUTCLKSEL; + input [2:0] TXPRBSSEL; + input [2:0] TXRATE; + input [31:0] TXDATA; + input [3:0] RXCHBONDI; + input [3:0] RXOSINTCFG; + input [3:0] RXOSINTID0; + input [3:0] TX8B10BBYPASS; + input [3:0] TXCHARDISPMODE; + input [3:0] TXCHARDISPVAL; + input [3:0] TXCHARISK; + input [3:0] TXDIFFCTRL; + input [4:0] TXPIPPMSTEPSIZE; + input [4:0] TXPOSTCURSOR; + input [4:0] TXPRECURSOR; + input [6:0] TXMAINCURSOR; + input [6:0] TXSEQUENCE; + input [8:0] DRPADDR; +endmodule + +module GTPE2_COMMON (...); + parameter [63:0] BIAS_CFG = 64'h0000000000000000; + parameter [31:0] COMMON_CFG = 32'h00000000; + parameter [0:0] IS_DRPCLK_INVERTED = 1'b0; + parameter [0:0] IS_GTGREFCLK0_INVERTED = 1'b0; + parameter [0:0] IS_GTGREFCLK1_INVERTED = 1'b0; + parameter [0:0] IS_PLL0LOCKDETCLK_INVERTED = 1'b0; + parameter [0:0] IS_PLL1LOCKDETCLK_INVERTED = 1'b0; + parameter [26:0] PLL0_CFG = 27'h01F03DC; + parameter [0:0] PLL0_DMON_CFG = 1'b0; + parameter integer PLL0_FBDIV = 4; + parameter integer PLL0_FBDIV_45 = 5; + parameter [23:0] PLL0_INIT_CFG = 24'h00001E; + parameter [8:0] PLL0_LOCK_CFG = 9'h1E8; + parameter integer PLL0_REFCLK_DIV = 1; + parameter [26:0] PLL1_CFG = 27'h01F03DC; + parameter [0:0] PLL1_DMON_CFG = 1'b0; + parameter integer PLL1_FBDIV = 4; + parameter integer PLL1_FBDIV_45 = 5; + parameter [23:0] PLL1_INIT_CFG = 24'h00001E; + parameter [8:0] PLL1_LOCK_CFG = 9'h1E8; + parameter integer PLL1_REFCLK_DIV = 1; + parameter [7:0] PLL_CLKOUT_CFG = 8'b00000000; + parameter [15:0] RSVD_ATTR0 = 16'h0000; + parameter [15:0] RSVD_ATTR1 = 16'h0000; + parameter [2:0] SIM_PLL0REFCLK_SEL = 3'b001; + parameter [2:0] SIM_PLL1REFCLK_SEL = 3'b001; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_VERSION = "1.0"; + output DRPRDY; + output PLL0FBCLKLOST; + output PLL0LOCK; + output PLL0OUTCLK; + output PLL0OUTREFCLK; + output PLL0REFCLKLOST; + output PLL1FBCLKLOST; + output PLL1LOCK; + output PLL1OUTCLK; + output PLL1OUTREFCLK; + output PLL1REFCLKLOST; + output REFCLKOUTMONITOR0; + output REFCLKOUTMONITOR1; + output [15:0] DRPDO; + output [15:0] PMARSVDOUT; + output [7:0] DMONITOROUT; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input BGRCALOVRDENB; + (* invertible_pin = "IS_DRPCLK_INVERTED" *) + input DRPCLK; + input DRPEN; + input DRPWE; + input GTEASTREFCLK0; + input GTEASTREFCLK1; + (* invertible_pin = "IS_GTGREFCLK0_INVERTED" *) + input GTGREFCLK0; + (* invertible_pin = "IS_GTGREFCLK1_INVERTED" *) + input GTGREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTWESTREFCLK0; + input GTWESTREFCLK1; + (* invertible_pin = "IS_PLL0LOCKDETCLK_INVERTED" *) + input PLL0LOCKDETCLK; + input PLL0LOCKEN; + input PLL0PD; + input PLL0RESET; + (* invertible_pin = "IS_PLL1LOCKDETCLK_INVERTED" *) + input PLL1LOCKDETCLK; + input PLL1LOCKEN; + input PLL1PD; + input PLL1RESET; + input RCALENB; + input [15:0] DRPDI; + input [15:0] PLLRSVD1; + input [2:0] PLL0REFCLKSEL; + input [2:0] PLL1REFCLKSEL; + input [4:0] BGRCALOVRD; + input [4:0] PLLRSVD2; + input [7:0] DRPADDR; + input [7:0] PMARSVD; +endmodule + +module GTXE2_CHANNEL (...); + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 1; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 1; + parameter [23:0] CPLL_CFG = 24'hB007D8; + parameter integer CPLL_FBDIV = 4; + parameter integer CPLL_FBDIV_45 = 5; + parameter [23:0] CPLL_INIT_CFG = 24'h00001E; + parameter [15:0] CPLL_LOCK_CFG = 16'h01E8; + parameter integer CPLL_REFCLK_DIV = 1; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [23:0] DMONITOR_CFG = 24'h000A00; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "FALSE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h000; + parameter [9:0] ES_PMA_CFG = 10'b0000000000; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [79:0] ES_QUALIFIER = 80'h00000000000000000000; + parameter [79:0] ES_QUAL_MASK = 80'h00000000000000000000; + parameter [79:0] ES_SDATA_MASK = 80'h00000000000000000000; + parameter [8:0] ES_VERT_OFFSET = 9'b000000000; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [2:0] GEARBOX_MODE = 3'b000; + parameter [0:0] IS_CPLLLOCKDETCLK_INVERTED = 1'b0; + parameter [0:0] IS_DRPCLK_INVERTED = 1'b0; + parameter [0:0] IS_GTGREFCLK_INVERTED = 1'b0; + parameter [0:0] IS_RXUSRCLK2_INVERTED = 1'b0; + parameter [0:0] IS_RXUSRCLK_INVERTED = 1'b0; + parameter [0:0] IS_TXPHDLYTSTCLK_INVERTED = 1'b0; + parameter [0:0] IS_TXUSRCLK2_INVERTED = 1'b0; + parameter [0:0] IS_TXUSRCLK_INVERTED = 1'b0; + parameter [1:0] OUTREFCLK_SEL_INV = 2'b11; + parameter PCS_PCIE_EN = "FALSE"; + parameter [47:0] PCS_RSVD_ATTR = 48'h000000000000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter [31:0] PMA_RSV = 32'h00000000; + parameter [15:0] PMA_RSV2 = 16'h2050; + parameter [1:0] PMA_RSV3 = 2'b00; + parameter [31:0] PMA_RSV4 = 32'h00000000; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 61; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [71:0] RXCDR_CFG = 72'h0B000023FF20400020; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [5:0] RXCDR_LOCK_CFG = 6'b010101; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111; + parameter [15:0] RXDLY_CFG = 16'h001F; + parameter [8:0] RXDLY_LCFG = 9'h030; + parameter [15:0] RXDLY_TAP_CFG = 16'h0000; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [13:0] RXLPM_HF_CFG = 14'b00000011110000; + parameter [13:0] RXLPM_LF_CFG = 14'b00000011110000; + parameter [6:0] RXOOB_CFG = 7'b0000110; + parameter integer RXOUT_DIV = 2; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [23:0] RXPHDLY_CFG = 24'h084020; + parameter [23:0] RXPH_CFG = 24'h000000; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [4:0] RXPMARESET_TIME = 5'b00011; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [11:0] RX_BIAS_CFG = 12'b000000000000; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter integer RX_CLK25_DIV = 7; + parameter [0:0] RX_CLKMUX_PD = 1'b1; + parameter [1:0] RX_CM_SEL = 2'b11; + parameter [2:0] RX_CM_TRIM = 3'b100; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter [11:0] RX_DEBUG_CFG = 12'b000000000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter [22:0] RX_DFE_GAIN_CFG = 23'h180E0F; + parameter [11:0] RX_DFE_H2_CFG = 12'b000111100000; + parameter [11:0] RX_DFE_H3_CFG = 12'b000111100000; + parameter [10:0] RX_DFE_H4_CFG = 11'b00011110000; + parameter [10:0] RX_DFE_H5_CFG = 11'b00011110000; + parameter [12:0] RX_DFE_KL_CFG = 13'b0001111110000; + parameter [31:0] RX_DFE_KL_CFG2 = 32'h3008E56A; + parameter [15:0] RX_DFE_LPM_CFG = 16'h0904; + parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0; + parameter [16:0] RX_DFE_UT_CFG = 17'b00111111000000000; + parameter [16:0] RX_DFE_VP_CFG = 17'b00011111100000000; + parameter [12:0] RX_DFE_XYD_CFG = 13'b0000000010000; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter integer RX_INT_DATAWIDTH = 0; + parameter [12:0] RX_OS_CFG = 13'b0001111110000; + parameter integer RX_SIG_VALID_DLY = 10; + parameter RX_XCLK_SEL = "RXREC"; + parameter integer SAS_MAX_COM = 64; + parameter integer SAS_MIN_COM = 36; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter SATA_CPLL_CFG = "VCO_3000MHZ"; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter integer SATA_MAX_BURST = 8; + parameter integer SATA_MAX_INIT = 21; + parameter integer SATA_MAX_WAKE = 7; + parameter integer SATA_MIN_BURST = 4; + parameter integer SATA_MIN_INIT = 12; + parameter integer SATA_MIN_WAKE = 4; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter [2:0] SIM_CPLLREFCLK_SEL = 3'b001; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_TX_EIDLE_DRIVE_LEVEL = "X"; + parameter SIM_VERSION = "4.0"; + parameter [4:0] TERM_RCAL_CFG = 5'b10000; + parameter [0:0] TERM_RCAL_OVRD = 1'b0; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [31:0] TST_RSV = 32'h00000000; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h001F; + parameter [8:0] TXDLY_LCFG = 9'h030; + parameter [15:0] TXDLY_TAP_CFG = 16'h0000; + parameter TXGEARBOX_EN = "FALSE"; + parameter integer TXOUT_DIV = 2; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [23:0] TXPHDLY_CFG = 24'h084020; + parameter [15:0] TXPH_CFG = 16'h0780; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter integer TX_CLK25_DIV = 7; + parameter [0:0] TX_CLKMUX_PD = 1'b1; + parameter integer TX_DATA_WIDTH = 20; + parameter [4:0] TX_DEEMPH0 = 5'b00000; + parameter [4:0] TX_DEEMPH1 = 5'b00000; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter integer TX_INT_DATAWIDTH = 0; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [0:0] TX_PREDRIVER_MODE = 1'b0; + parameter [0:0] TX_QPI_STATUS_EN = 1'b0; + parameter [13:0] TX_RXDETECT_CFG = 14'h1832; + parameter [2:0] TX_RXDETECT_REF = 3'b100; + parameter TX_XCLK_SEL = "TXUSR"; + parameter [0:0] UCODEER_CLR = 1'b0; + output CPLLFBCLKLOST; + output CPLLLOCK; + output CPLLREFCLKLOST; + output DRPRDY; + output EYESCANDATAERROR; + output GTREFCLKMONITOR; + output GTXTXN; + output GTXTXP; + output PHYSTATUS; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output RXDATAVALID; + output RXDLYSRESETDONE; + output RXELECIDLE; + output RXHEADERVALID; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPRBSERR; + output RXQPISENN; + output RXQPISENP; + output RXRATEDONE; + output RXRESETDONE; + output RXSTARTOFSEQ; + output RXVALID; + output TXCOMFINISH; + output TXDLYSRESETDONE; + output TXGEARBOXREADY; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXQPISENN; + output TXQPISENP; + output TXRATEDONE; + output TXRESETDONE; + output [15:0] DRPDO; + output [15:0] PCSRSVDOUT; + output [1:0] RXCLKCORCNT; + output [1:0] TXBUFSTATUS; + output [2:0] RXBUFSTATUS; + output [2:0] RXHEADER; + output [2:0] RXSTATUS; + output [4:0] RXCHBONDO; + output [4:0] RXPHMONITOR; + output [4:0] RXPHSLIPMONITOR; + output [63:0] RXDATA; + output [6:0] RXMONITOROUT; + output [7:0] DMONITOROUT; + output [7:0] RXCHARISCOMMA; + output [7:0] RXCHARISK; + output [7:0] RXDISPERR; + output [7:0] RXNOTINTABLE; + output [9:0] TSTOUT; + input CFGRESET; + (* invertible_pin = "IS_CPLLLOCKDETCLK_INVERTED" *) + input CPLLLOCKDETCLK; + input CPLLLOCKEN; + input CPLLPD; + input CPLLRESET; + (* invertible_pin = "IS_DRPCLK_INVERTED" *) + input DRPCLK; + input DRPEN; + input DRPWE; + input EYESCANMODE; + input EYESCANRESET; + input EYESCANTRIGGER; + (* invertible_pin = "IS_GTGREFCLK_INVERTED" *) + input GTGREFCLK; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTRESETSEL; + input GTRXRESET; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + input GTTXRESET; + input GTXRXN; + input GTXRXP; + input QPLLCLK; + input QPLLREFCLK; + input RESETOVRD; + input RX8B10BEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCDRRESETRSV; + input RXCHBONDEN; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCOMMADETEN; + input RXDDIEN; + input RXDFEAGCHOLD; + input RXDFEAGCOVRDEN; + input RXDFECM1EN; + input RXDFELFHOLD; + input RXDFELFOVRDEN; + input RXDFELPMRESET; + input RXDFETAP2HOLD; + input RXDFETAP2OVRDEN; + input RXDFETAP3HOLD; + input RXDFETAP3OVRDEN; + input RXDFETAP4HOLD; + input RXDFETAP4OVRDEN; + input RXDFETAP5HOLD; + input RXDFETAP5OVRDEN; + input RXDFEUTHOLD; + input RXDFEUTOVRDEN; + input RXDFEVPHOLD; + input RXDFEVPOVRDEN; + input RXDFEVSEN; + input RXDFEXYDEN; + input RXDFEXYDHOLD; + input RXDFEXYDOVRDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input RXGEARBOXSLIP; + input RXLPMEN; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFKLOVRDEN; + input RXMCOMMAALIGNEN; + input RXOOBRESET; + input RXOSHOLD; + input RXOSOVRDEN; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input RXPHOVRDEN; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input RXQPIEN; + input RXSLIDE; + input RXUSERRDY; + (* invertible_pin = "IS_RXUSRCLK2_INVERTED" *) + input RXUSRCLK2; + (* invertible_pin = "IS_RXUSRCLK_INVERTED" *) + input RXUSRCLK; + input SETERRSTATUS; + input TX8B10BEN; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input TXDEEMPH; + input TXDETECTRX; + input TXDIFFPD; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input TXINHIBIT; + input TXPCSRESET; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + (* invertible_pin = "IS_TXPHDLYTSTCLK_INVERTED" *) + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPISOPD; + input TXPMARESET; + input TXPOLARITY; + input TXPOSTCURSORINV; + input TXPRBSFORCEERR; + input TXPRECURSORINV; + input TXQPIBIASEN; + input TXQPISTRONGPDOWN; + input TXQPIWEAKPUP; + input TXSTARTSEQ; + input TXSWING; + input TXUSERRDY; + (* invertible_pin = "IS_TXUSRCLK2_INVERTED" *) + input TXUSRCLK2; + (* invertible_pin = "IS_TXUSRCLK_INVERTED" *) + input TXUSRCLK; + input [15:0] DRPDI; + input [15:0] GTRSVD; + input [15:0] PCSRSVDIN; + input [19:0] TSTIN; + input [1:0] RXELECIDLEMODE; + input [1:0] RXMONITORSEL; + input [1:0] RXPD; + input [1:0] RXSYSCLKSEL; + input [1:0] TXPD; + input [1:0] TXSYSCLKSEL; + input [2:0] CPLLREFCLKSEL; + input [2:0] LOOPBACK; + input [2:0] RXCHBONDLEVEL; + input [2:0] RXOUTCLKSEL; + input [2:0] RXPRBSSEL; + input [2:0] RXRATE; + input [2:0] TXBUFDIFFCTRL; + input [2:0] TXHEADER; + input [2:0] TXMARGIN; + input [2:0] TXOUTCLKSEL; + input [2:0] TXPRBSSEL; + input [2:0] TXRATE; + input [3:0] CLKRSVD; + input [3:0] TXDIFFCTRL; + input [4:0] PCSRSVDIN2; + input [4:0] PMARSVDIN2; + input [4:0] PMARSVDIN; + input [4:0] RXCHBONDI; + input [4:0] TXPOSTCURSOR; + input [4:0] TXPRECURSOR; + input [63:0] TXDATA; + input [6:0] TXMAINCURSOR; + input [6:0] TXSEQUENCE; + input [7:0] TX8B10BBYPASS; + input [7:0] TXCHARDISPMODE; + input [7:0] TXCHARDISPVAL; + input [7:0] TXCHARISK; + input [8:0] DRPADDR; +endmodule + +module GTXE2_COMMON (...); + parameter [63:0] BIAS_CFG = 64'h0000040000001000; + parameter [31:0] COMMON_CFG = 32'h00000000; + parameter [0:0] IS_DRPCLK_INVERTED = 1'b0; + parameter [0:0] IS_GTGREFCLK_INVERTED = 1'b0; + parameter [0:0] IS_QPLLLOCKDETCLK_INVERTED = 1'b0; + parameter [26:0] QPLL_CFG = 27'h0680181; + parameter [3:0] QPLL_CLKOUT_CFG = 4'b0000; + parameter [5:0] QPLL_COARSE_FREQ_OVRD = 6'b010000; + parameter [0:0] QPLL_COARSE_FREQ_OVRD_EN = 1'b0; + parameter [9:0] QPLL_CP = 10'b0000011111; + parameter [0:0] QPLL_CP_MONITOR_EN = 1'b0; + parameter [0:0] QPLL_DMONITOR_SEL = 1'b0; + parameter [9:0] QPLL_FBDIV = 10'b0000000000; + parameter [0:0] QPLL_FBDIV_MONITOR_EN = 1'b0; + parameter [0:0] QPLL_FBDIV_RATIO = 1'b0; + parameter [23:0] QPLL_INIT_CFG = 24'h000006; + parameter [15:0] QPLL_LOCK_CFG = 16'h21E8; + parameter [3:0] QPLL_LPF = 4'b1111; + parameter integer QPLL_REFCLK_DIV = 2; + parameter [2:0] SIM_QPLLREFCLK_SEL = 3'b001; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_VERSION = "4.0"; + output DRPRDY; + output QPLLFBCLKLOST; + output QPLLLOCK; + output QPLLOUTCLK; + output QPLLOUTREFCLK; + output QPLLREFCLKLOST; + output REFCLKOUTMONITOR; + output [15:0] DRPDO; + output [7:0] QPLLDMONITOR; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + (* invertible_pin = "IS_DRPCLK_INVERTED" *) + input DRPCLK; + input DRPEN; + input DRPWE; + (* invertible_pin = "IS_GTGREFCLK_INVERTED" *) + input GTGREFCLK; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + (* invertible_pin = "IS_QPLLLOCKDETCLK_INVERTED" *) + input QPLLLOCKDETCLK; + input QPLLLOCKEN; + input QPLLOUTRESET; + input QPLLPD; + input QPLLRESET; + input RCALENB; + input [15:0] DRPDI; + input [15:0] QPLLRSVD1; + input [2:0] QPLLREFCLKSEL; + input [4:0] BGRCALOVRD; + input [4:0] QPLLRSVD2; + input [7:0] DRPADDR; + input [7:0] PMARSVD; +endmodule + +module IBUFDS_GTE2 (...); + parameter CLKCM_CFG = "TRUE"; + parameter CLKRCV_TRST = "TRUE"; + parameter CLKSWING_CFG = "TRUE"; + output O; + output ODIV2; + input CEB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module GTHE3_CHANNEL (...); + parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0; + parameter [0:0] ACJTAG_MODE = 1'b0; + parameter [0:0] ACJTAG_RESET = 1'b0; + parameter [15:0] ADAPT_CFG0 = 16'hF800; + parameter [15:0] ADAPT_CFG1 = 16'h0000; + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter [0:0] A_RXOSCALRESET = 1'b0; + parameter [0:0] A_RXPROGDIVRESET = 1'b0; + parameter [0:0] A_TXPROGDIVRESET = 1'b0; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter [0:0] CDR_SWAP_MODE_EN = 1'b0; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 2; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 2; + parameter [15:0] CPLL_CFG0 = 16'h20F8; + parameter [15:0] CPLL_CFG1 = 16'hA494; + parameter [15:0] CPLL_CFG2 = 16'hF001; + parameter [5:0] CPLL_CFG3 = 6'h00; + parameter integer CPLL_FBDIV = 4; + parameter integer CPLL_FBDIV_45 = 4; + parameter [15:0] CPLL_INIT_CFG0 = 16'h001E; + parameter [7:0] CPLL_INIT_CFG1 = 8'h00; + parameter [15:0] CPLL_LOCK_CFG = 16'h01E8; + parameter integer CPLL_REFCLK_DIV = 1; + parameter [1:0] DDI_CTRL = 2'b00; + parameter integer DDI_REALIGN_WAIT = 15; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [0:0] DFE_D_X_REL_POS = 1'b0; + parameter [0:0] DFE_VCM_COMP_EN = 1'b0; + parameter [9:0] DMONITOR_CFG0 = 10'h000; + parameter [7:0] DMONITOR_CFG1 = 8'h00; + parameter [0:0] ES_CLK_PHASE_SEL = 1'b0; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "FALSE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h000; + parameter [9:0] ES_PMA_CFG = 10'b0000000000; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [15:0] ES_QUALIFIER0 = 16'h0000; + parameter [15:0] ES_QUALIFIER1 = 16'h0000; + parameter [15:0] ES_QUALIFIER2 = 16'h0000; + parameter [15:0] ES_QUALIFIER3 = 16'h0000; + parameter [15:0] ES_QUALIFIER4 = 16'h0000; + parameter [15:0] ES_QUAL_MASK0 = 16'h0000; + parameter [15:0] ES_QUAL_MASK1 = 16'h0000; + parameter [15:0] ES_QUAL_MASK2 = 16'h0000; + parameter [15:0] ES_QUAL_MASK3 = 16'h0000; + parameter [15:0] ES_QUAL_MASK4 = 16'h0000; + parameter [15:0] ES_SDATA_MASK0 = 16'h0000; + parameter [15:0] ES_SDATA_MASK1 = 16'h0000; + parameter [15:0] ES_SDATA_MASK2 = 16'h0000; + parameter [15:0] ES_SDATA_MASK3 = 16'h0000; + parameter [15:0] ES_SDATA_MASK4 = 16'h0000; + parameter [10:0] EVODD_PHI_CFG = 11'b00000000000; + parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [4:0] GEARBOX_MODE = 5'b00000; + parameter [0:0] GM_BIAS_SELECT = 1'b0; + parameter [0:0] LOCAL_MASTER = 1'b0; + parameter [1:0] OOBDIVCTL = 2'b00; + parameter [0:0] OOB_PWRUP = 1'b0; + parameter PCI3_AUTO_REALIGN = "FRST_SMPL"; + parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1; + parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00; + parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0; + parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000; + parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000; + parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000; + parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0; + parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0; + parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000; + parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_RXPMA_CFG = 16'h0000; + parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_TXPMA_CFG = 16'h0000; + parameter PCS_PCIE_EN = "FALSE"; + parameter [15:0] PCS_RSVD0 = 16'b0000000000000000; + parameter [2:0] PCS_RSVD1 = 3'b000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter [1:0] PLL_SEL_MODE_GEN12 = 2'h0; + parameter [1:0] PLL_SEL_MODE_GEN3 = 2'h0; + parameter [15:0] PMA_RSV1 = 16'h0000; + parameter [2:0] PROCESS_PAR = 3'b010; + parameter [0:0] RATE_SW_USE_DRP = 1'b0; + parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 0; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [15:0] RXCDR_CFG0 = 16'h0000; + parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG1 = 16'h0080; + parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG2 = 16'h07E6; + parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG3 = 16'h0000; + parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG4 = 16'h0000; + parameter [15:0] RXCDR_CFG4_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG5 = 16'h0000; + parameter [15:0] RXCDR_CFG5_GEN3 = 16'h0000; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [15:0] RXCDR_LOCK_CFG0 = 16'h5080; + parameter [15:0] RXCDR_LOCK_CFG1 = 16'h07E0; + parameter [15:0] RXCDR_LOCK_CFG2 = 16'h7C42; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [15:0] RXCFOK_CFG0 = 16'h4000; + parameter [15:0] RXCFOK_CFG1 = 16'h0060; + parameter [15:0] RXCFOK_CFG2 = 16'h000E; + parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111; + parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000; + parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0032; + parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0000; + parameter [15:0] RXDFE_CFG0 = 16'h0A00; + parameter [15:0] RXDFE_CFG1 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG1 = 16'h7840; + parameter [15:0] RXDFE_GC_CFG2 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG1 = 16'h0000; + parameter [15:0] RXDFE_H3_CFG0 = 16'h4000; + parameter [15:0] RXDFE_H3_CFG1 = 16'h0000; + parameter [15:0] RXDFE_H4_CFG0 = 16'h2000; + parameter [15:0] RXDFE_H4_CFG1 = 16'h0003; + parameter [15:0] RXDFE_H5_CFG0 = 16'h2000; + parameter [15:0] RXDFE_H5_CFG1 = 16'h0003; + parameter [15:0] RXDFE_H6_CFG0 = 16'h2000; + parameter [15:0] RXDFE_H6_CFG1 = 16'h0000; + parameter [15:0] RXDFE_H7_CFG0 = 16'h2000; + parameter [15:0] RXDFE_H7_CFG1 = 16'h0000; + parameter [15:0] RXDFE_H8_CFG0 = 16'h2000; + parameter [15:0] RXDFE_H8_CFG1 = 16'h0000; + parameter [15:0] RXDFE_H9_CFG0 = 16'h2000; + parameter [15:0] RXDFE_H9_CFG1 = 16'h0000; + parameter [15:0] RXDFE_HA_CFG0 = 16'h2000; + parameter [15:0] RXDFE_HA_CFG1 = 16'h0000; + parameter [15:0] RXDFE_HB_CFG0 = 16'h2000; + parameter [15:0] RXDFE_HB_CFG1 = 16'h0000; + parameter [15:0] RXDFE_HC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HC_CFG1 = 16'h0000; + parameter [15:0] RXDFE_HD_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HD_CFG1 = 16'h0000; + parameter [15:0] RXDFE_HE_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HE_CFG1 = 16'h0000; + parameter [15:0] RXDFE_HF_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HF_CFG1 = 16'h0000; + parameter [15:0] RXDFE_OS_CFG0 = 16'h8000; + parameter [15:0] RXDFE_OS_CFG1 = 16'h0000; + parameter [15:0] RXDFE_UT_CFG0 = 16'h8000; + parameter [15:0] RXDFE_UT_CFG1 = 16'h0003; + parameter [15:0] RXDFE_VP_CFG0 = 16'hAA00; + parameter [15:0] RXDFE_VP_CFG1 = 16'h0033; + parameter [15:0] RXDLY_CFG = 16'h001F; + parameter [15:0] RXDLY_LCFG = 16'h0030; + parameter RXELECIDLE_CFG = "Sigcfg_4"; + parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [15:0] RXLPM_CFG = 16'h0000; + parameter [15:0] RXLPM_GC_CFG = 16'h0000; + parameter [15:0] RXLPM_KH_CFG0 = 16'h0000; + parameter [15:0] RXLPM_KH_CFG1 = 16'h0002; + parameter [15:0] RXLPM_OS_CFG0 = 16'h8000; + parameter [15:0] RXLPM_OS_CFG1 = 16'h0002; + parameter [8:0] RXOOB_CFG = 9'b000000110; + parameter RXOOB_CLK_CFG = "PMA"; + parameter [4:0] RXOSCALRESET_TIME = 5'b00011; + parameter integer RXOUT_DIV = 4; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [15:0] RXPHBEACON_CFG = 16'h0000; + parameter [15:0] RXPHDLY_CFG = 16'h2020; + parameter [15:0] RXPHSAMP_CFG = 16'h2100; + parameter [15:0] RXPHSLIP_CFG = 16'h6622; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [1:0] RXPI_CFG0 = 2'b00; + parameter [1:0] RXPI_CFG1 = 2'b00; + parameter [1:0] RXPI_CFG2 = 2'b00; + parameter [1:0] RXPI_CFG3 = 2'b00; + parameter [0:0] RXPI_CFG4 = 1'b0; + parameter [0:0] RXPI_CFG5 = 1'b1; + parameter [2:0] RXPI_CFG6 = 3'b000; + parameter [0:0] RXPI_LPM = 1'b0; + parameter [0:0] RXPI_VREFSEL = 1'b0; + parameter RXPMACLK_SEL = "DATA"; + parameter [4:0] RXPMARESET_TIME = 5'b00001; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXPRBS_LINKACQ_CNT = 15; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [0:0] RXSYNC_MULTILANE = 1'b0; + parameter [0:0] RXSYNC_OVRD = 1'b0; + parameter [0:0] RXSYNC_SKIP_DA = 1'b0; + parameter [0:0] RX_AFE_CM_EN = 1'b0; + parameter [15:0] RX_BIAS_CFG0 = 16'h0AD4; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0; + parameter integer RX_CLK25_DIV = 8; + parameter [0:0] RX_CLKMUX_EN = 1'b1; + parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000; + parameter [3:0] RX_CM_BUF_CFG = 4'b1010; + parameter [0:0] RX_CM_BUF_PD = 1'b0; + parameter [1:0] RX_CM_SEL = 2'b11; + parameter [3:0] RX_CM_TRIM = 4'b0100; + parameter [7:0] RX_CTLE3_LPF = 8'b00000000; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter [3:0] RX_DFELPM_CFG0 = 4'b0110; + parameter [0:0] RX_DFELPM_CFG1 = 1'b0; + parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1; + parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00; + parameter [2:0] RX_DFE_AGC_CFG1 = 3'b100; + parameter [1:0] RX_DFE_KL_LPM_KH_CFG0 = 2'b01; + parameter [2:0] RX_DFE_KL_LPM_KH_CFG1 = 3'b010; + parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01; + parameter [2:0] RX_DFE_KL_LPM_KL_CFG1 = 3'b010; + parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter [4:0] RX_DIVRESET_TIME = 5'b00001; + parameter [0:0] RX_EN_HI_LR = 1'b0; + parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000; + parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0; + parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b00; + parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0; + parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0; + parameter integer RX_INT_DATAWIDTH = 1; + parameter [0:0] RX_PMA_POWER_SAVE = 1'b0; + parameter real RX_PROGDIV_CFG = 4.0; + parameter [2:0] RX_SAMPLE_PERIOD = 3'b101; + parameter integer RX_SIG_VALID_DLY = 11; + parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0; + parameter [3:0] RX_SUM_IREF_TUNE = 4'b0000; + parameter [1:0] RX_SUM_RES_CTRL = 2'b00; + parameter [3:0] RX_SUM_VCMTUNE = 4'b0000; + parameter [0:0] RX_SUM_VCM_OVWR = 1'b0; + parameter [2:0] RX_SUM_VREF_TUNE = 3'b000; + parameter [1:0] RX_TUNE_AFE_OS = 2'b00; + parameter [0:0] RX_WIDEMODE_CDR = 1'b0; + parameter RX_XCLK_SEL = "RXDES"; + parameter integer SAS_MAX_COM = 64; + parameter integer SAS_MIN_COM = 36; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter SATA_CPLL_CFG = "VCO_3000MHZ"; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter integer SATA_MAX_BURST = 8; + parameter integer SATA_MAX_INIT = 21; + parameter integer SATA_MAX_WAKE = 7; + parameter integer SATA_MIN_BURST = 4; + parameter integer SATA_MIN_INIT = 12; + parameter integer SATA_MIN_WAKE = 4; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter SIM_MODE = "FAST"; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter [0:0] SIM_TX_EIDLE_DRIVE_LEVEL = 1'b0; + parameter integer SIM_VERSION = 2; + parameter [1:0] TAPDLY_SET_TX = 2'h0; + parameter [3:0] TEMPERATUR_PAR = 4'b0010; + parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000; + parameter [2:0] TERM_RCAL_OVRD = 3'b000; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [7:0] TST_RSV0 = 8'h00; + parameter [7:0] TST_RSV1 = 8'h00; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h001F; + parameter [15:0] TXDLY_LCFG = 16'h0030; + parameter [3:0] TXDRVBIAS_N = 4'b1010; + parameter [3:0] TXDRVBIAS_P = 4'b1100; + parameter TXFIFO_ADDR_CFG = "LOW"; + parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter TXGEARBOX_EN = "FALSE"; + parameter integer TXOUT_DIV = 4; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [15:0] TXPHDLY_CFG0 = 16'h2020; + parameter [15:0] TXPHDLY_CFG1 = 16'h0001; + parameter [15:0] TXPH_CFG = 16'h0980; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [1:0] TXPI_CFG0 = 2'b00; + parameter [1:0] TXPI_CFG1 = 2'b00; + parameter [1:0] TXPI_CFG2 = 2'b00; + parameter [0:0] TXPI_CFG3 = 1'b0; + parameter [0:0] TXPI_CFG4 = 1'b1; + parameter [2:0] TXPI_CFG5 = 3'b000; + parameter [0:0] TXPI_GRAY_SEL = 1'b0; + parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0; + parameter [0:0] TXPI_LPM = 1'b0; + parameter TXPI_PPMCLK_SEL = "TXUSRCLK2"; + parameter [7:0] TXPI_PPM_CFG = 8'b00000000; + parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000; + parameter [0:0] TXPI_VREFSEL = 1'b0; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter [0:0] TXSYNC_MULTILANE = 1'b0; + parameter [0:0] TXSYNC_OVRD = 1'b0; + parameter [0:0] TXSYNC_SKIP_DA = 1'b0; + parameter integer TX_CLK25_DIV = 8; + parameter [0:0] TX_CLKMUX_EN = 1'b1; + parameter integer TX_DATA_WIDTH = 20; + parameter [5:0] TX_DCD_CFG = 6'b000010; + parameter [0:0] TX_DCD_EN = 1'b0; + parameter [5:0] TX_DEEMPH0 = 6'b000000; + parameter [5:0] TX_DEEMPH1 = 6'b000000; + parameter [4:0] TX_DIVRESET_TIME = 5'b00001; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter [0:0] TX_EML_PHI_TUNE = 1'b0; + parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0; + parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0; + parameter integer TX_INT_DATAWIDTH = 1; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [2:0] TX_MODE_SEL = 3'b000; + parameter [0:0] TX_PMADATA_OPT = 1'b0; + parameter [0:0] TX_PMA_POWER_SAVE = 1'b0; + parameter TX_PROGCLK_SEL = "POSTPI"; + parameter real TX_PROGDIV_CFG = 4.0; + parameter [0:0] TX_QPI_STATUS_EN = 1'b0; + parameter [13:0] TX_RXDETECT_CFG = 14'h0032; + parameter [2:0] TX_RXDETECT_REF = 3'b100; + parameter [2:0] TX_SAMPLE_PERIOD = 3'b101; + parameter [0:0] TX_SARC_LPBK_ENB = 1'b0; + parameter TX_XCLK_SEL = "TXOUT"; + parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0; + parameter [1:0] WB_MODE = 2'b00; + output [2:0] BUFGTCE; + output [2:0] BUFGTCEMASK; + output [8:0] BUFGTDIV; + output [2:0] BUFGTRESET; + output [2:0] BUFGTRSTMASK; + output CPLLFBCLKLOST; + output CPLLLOCK; + output CPLLREFCLKLOST; + output [16:0] DMONITOROUT; + output [15:0] DRPDO; + output DRPRDY; + output EYESCANDATAERROR; + output GTHTXN; + output GTHTXP; + output GTPOWERGOOD; + output GTREFCLKMONITOR; + output PCIERATEGEN3; + output PCIERATEIDLE; + output [1:0] PCIERATEQPLLPD; + output [1:0] PCIERATEQPLLRESET; + output PCIESYNCTXSYNCDONE; + output PCIEUSERGEN3RDY; + output PCIEUSERPHYSTATUSRST; + output PCIEUSERRATESTART; + output [11:0] PCSRSVDOUT; + output PHYSTATUS; + output [7:0] PINRSRVDAS; + output RESETEXCEPTION; + output [2:0] RXBUFSTATUS; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCDRPHDONE; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output [4:0] RXCHBONDO; + output [1:0] RXCLKCORCNT; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output [15:0] RXCTRL0; + output [15:0] RXCTRL1; + output [7:0] RXCTRL2; + output [7:0] RXCTRL3; + output [127:0] RXDATA; + output [7:0] RXDATAEXTENDRSVD; + output [1:0] RXDATAVALID; + output RXDLYSRESETDONE; + output RXELECIDLE; + output [5:0] RXHEADER; + output [1:0] RXHEADERVALID; + output [6:0] RXMONITOROUT; + output RXOSINTDONE; + output RXOSINTSTARTED; + output RXOSINTSTROBEDONE; + output RXOSINTSTROBESTARTED; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPHALIGNERR; + output RXPMARESETDONE; + output RXPRBSERR; + output RXPRBSLOCKED; + output RXPRGDIVRESETDONE; + output RXQPISENN; + output RXQPISENP; + output RXRATEDONE; + output RXRECCLKOUT; + output RXRESETDONE; + output RXSLIDERDY; + output RXSLIPDONE; + output RXSLIPOUTCLKRDY; + output RXSLIPPMARDY; + output [1:0] RXSTARTOFSEQ; + output [2:0] RXSTATUS; + output RXSYNCDONE; + output RXSYNCOUT; + output RXVALID; + output [1:0] TXBUFSTATUS; + output TXCOMFINISH; + output TXDLYSRESETDONE; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXPMARESETDONE; + output TXPRGDIVRESETDONE; + output TXQPISENN; + output TXQPISENP; + output TXRATEDONE; + output TXRESETDONE; + output TXSYNCDONE; + output TXSYNCOUT; + input CFGRESET; + input CLKRSVD0; + input CLKRSVD1; + input CPLLLOCKDETCLK; + input CPLLLOCKEN; + input CPLLPD; + input [2:0] CPLLREFCLKSEL; + input CPLLRESET; + input DMONFIFORESET; + input DMONITORCLK; + input [8:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input EVODDPHICALDONE; + input EVODDPHICALSTART; + input EVODDPHIDRDEN; + input EVODDPHIDWREN; + input EVODDPHIXRDEN; + input EVODDPHIXWREN; + input EYESCANMODE; + input EYESCANRESET; + input EYESCANTRIGGER; + input GTGREFCLK; + input GTHRXN; + input GTHRXP; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTRESETSEL; + input [15:0] GTRSVD; + input GTRXRESET; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + input GTTXRESET; + input [2:0] LOOPBACK; + input LPBKRXTXSEREN; + input LPBKTXRXSEREN; + input PCIEEQRXEQADAPTDONE; + input PCIERSTIDLE; + input PCIERSTTXSYNCSTART; + input PCIEUSERRATEDONE; + input [15:0] PCSRSVDIN; + input [4:0] PCSRSVDIN2; + input [4:0] PMARSVDIN; + input QPLL0CLK; + input QPLL0REFCLK; + input QPLL1CLK; + input QPLL1REFCLK; + input RESETOVRD; + input RSTCLKENTX; + input RX8B10BEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCDRRESETRSV; + input RXCHBONDEN; + input [4:0] RXCHBONDI; + input [2:0] RXCHBONDLEVEL; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCOMMADETEN; + input [1:0] RXDFEAGCCTRL; + input RXDFEAGCHOLD; + input RXDFEAGCOVRDEN; + input RXDFELFHOLD; + input RXDFELFOVRDEN; + input RXDFELPMRESET; + input RXDFETAP10HOLD; + input RXDFETAP10OVRDEN; + input RXDFETAP11HOLD; + input RXDFETAP11OVRDEN; + input RXDFETAP12HOLD; + input RXDFETAP12OVRDEN; + input RXDFETAP13HOLD; + input RXDFETAP13OVRDEN; + input RXDFETAP14HOLD; + input RXDFETAP14OVRDEN; + input RXDFETAP15HOLD; + input RXDFETAP15OVRDEN; + input RXDFETAP2HOLD; + input RXDFETAP2OVRDEN; + input RXDFETAP3HOLD; + input RXDFETAP3OVRDEN; + input RXDFETAP4HOLD; + input RXDFETAP4OVRDEN; + input RXDFETAP5HOLD; + input RXDFETAP5OVRDEN; + input RXDFETAP6HOLD; + input RXDFETAP6OVRDEN; + input RXDFETAP7HOLD; + input RXDFETAP7OVRDEN; + input RXDFETAP8HOLD; + input RXDFETAP8OVRDEN; + input RXDFETAP9HOLD; + input RXDFETAP9OVRDEN; + input RXDFEUTHOLD; + input RXDFEUTOVRDEN; + input RXDFEVPHOLD; + input RXDFEVPOVRDEN; + input RXDFEVSEN; + input RXDFEXYDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input [1:0] RXELECIDLEMODE; + input RXGEARBOXSLIP; + input RXLATCLK; + input RXLPMEN; + input RXLPMGCHOLD; + input RXLPMGCOVRDEN; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFKLOVRDEN; + input RXLPMOSHOLD; + input RXLPMOSOVRDEN; + input RXMCOMMAALIGNEN; + input [1:0] RXMONITORSEL; + input RXOOBRESET; + input RXOSCALRESET; + input RXOSHOLD; + input [3:0] RXOSINTCFG; + input RXOSINTEN; + input RXOSINTHOLD; + input RXOSINTOVRDEN; + input RXOSINTSTROBE; + input RXOSINTTESTOVRDEN; + input RXOSOVRDEN; + input [2:0] RXOUTCLKSEL; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input [1:0] RXPD; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input RXPHOVRDEN; + input [1:0] RXPLLCLKSEL; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input [3:0] RXPRBSSEL; + input RXPROGDIVRESET; + input RXQPIEN; + input [2:0] RXRATE; + input RXRATEMODE; + input RXSLIDE; + input RXSLIPOUTCLK; + input RXSLIPPMA; + input RXSYNCALLIN; + input RXSYNCIN; + input RXSYNCMODE; + input [1:0] RXSYSCLKSEL; + input RXUSERRDY; + input RXUSRCLK; + input RXUSRCLK2; + input SIGVALIDCLK; + input [19:0] TSTIN; + input [7:0] TX8B10BBYPASS; + input TX8B10BEN; + input [2:0] TXBUFDIFFCTRL; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input [15:0] TXCTRL0; + input [15:0] TXCTRL1; + input [7:0] TXCTRL2; + input [127:0] TXDATA; + input [7:0] TXDATAEXTENDRSVD; + input TXDEEMPH; + input TXDETECTRX; + input [3:0] TXDIFFCTRL; + input TXDIFFPD; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input [5:0] TXHEADER; + input TXINHIBIT; + input TXLATCLK; + input [6:0] TXMAINCURSOR; + input [2:0] TXMARGIN; + input [2:0] TXOUTCLKSEL; + input TXPCSRESET; + input [1:0] TXPD; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPIPPMEN; + input TXPIPPMOVRDEN; + input TXPIPPMPD; + input TXPIPPMSEL; + input [4:0] TXPIPPMSTEPSIZE; + input TXPISOPD; + input [1:0] TXPLLCLKSEL; + input TXPMARESET; + input TXPOLARITY; + input [4:0] TXPOSTCURSOR; + input TXPOSTCURSORINV; + input TXPRBSFORCEERR; + input [3:0] TXPRBSSEL; + input [4:0] TXPRECURSOR; + input TXPRECURSORINV; + input TXPROGDIVRESET; + input TXQPIBIASEN; + input TXQPISTRONGPDOWN; + input TXQPIWEAKPUP; + input [2:0] TXRATE; + input TXRATEMODE; + input [6:0] TXSEQUENCE; + input TXSWING; + input TXSYNCALLIN; + input TXSYNCIN; + input TXSYNCMODE; + input [1:0] TXSYSCLKSEL; + input TXUSERRDY; + input TXUSRCLK; + input TXUSRCLK2; +endmodule + +module GTHE3_COMMON (...); + parameter [15:0] BIAS_CFG0 = 16'h0000; + parameter [15:0] BIAS_CFG1 = 16'h0000; + parameter [15:0] BIAS_CFG2 = 16'h0000; + parameter [15:0] BIAS_CFG3 = 16'h0000; + parameter [15:0] BIAS_CFG4 = 16'h0000; + parameter [9:0] BIAS_CFG_RSVD = 10'b0000000000; + parameter [15:0] COMMON_CFG0 = 16'h0000; + parameter [15:0] COMMON_CFG1 = 16'h0000; + parameter [15:0] POR_CFG = 16'h0004; + parameter [15:0] QPLL0_CFG0 = 16'h3018; + parameter [15:0] QPLL0_CFG1 = 16'h0000; + parameter [15:0] QPLL0_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL0_CFG2 = 16'h0000; + parameter [15:0] QPLL0_CFG2_G3 = 16'h0000; + parameter [15:0] QPLL0_CFG3 = 16'h0120; + parameter [15:0] QPLL0_CFG4 = 16'h0009; + parameter [9:0] QPLL0_CP = 10'b0000011111; + parameter [9:0] QPLL0_CP_G3 = 10'b0000011111; + parameter integer QPLL0_FBDIV = 66; + parameter integer QPLL0_FBDIV_G3 = 80; + parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL0_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h01E8; + parameter [9:0] QPLL0_LPF = 10'b1111111111; + parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111; + parameter integer QPLL0_REFCLK_DIV = 2; + parameter [15:0] QPLL0_SDM_CFG0 = 16'b0000000000000000; + parameter [15:0] QPLL0_SDM_CFG1 = 16'b0000000000000000; + parameter [15:0] QPLL0_SDM_CFG2 = 16'b0000000000000000; + parameter [15:0] QPLL1_CFG0 = 16'h3018; + parameter [15:0] QPLL1_CFG1 = 16'h0000; + parameter [15:0] QPLL1_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL1_CFG2 = 16'h0000; + parameter [15:0] QPLL1_CFG2_G3 = 16'h0000; + parameter [15:0] QPLL1_CFG3 = 16'h0120; + parameter [15:0] QPLL1_CFG4 = 16'h0009; + parameter [9:0] QPLL1_CP = 10'b0000011111; + parameter [9:0] QPLL1_CP_G3 = 10'b0000011111; + parameter integer QPLL1_FBDIV = 66; + parameter integer QPLL1_FBDIV_G3 = 80; + parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL1_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL1_LPF = 10'b1111111111; + parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111; + parameter integer QPLL1_REFCLK_DIV = 2; + parameter [15:0] QPLL1_SDM_CFG0 = 16'b0000000000000000; + parameter [15:0] QPLL1_SDM_CFG1 = 16'b0000000000000000; + parameter [15:0] QPLL1_SDM_CFG2 = 16'b0000000000000000; + parameter [15:0] RSVD_ATTR0 = 16'h0000; + parameter [15:0] RSVD_ATTR1 = 16'h0000; + parameter [15:0] RSVD_ATTR2 = 16'h0000; + parameter [15:0] RSVD_ATTR3 = 16'h0000; + parameter [1:0] RXRECCLKOUT0_SEL = 2'b00; + parameter [1:0] RXRECCLKOUT1_SEL = 2'b00; + parameter [0:0] SARC_EN = 1'b1; + parameter [0:0] SARC_SEL = 1'b0; + parameter [15:0] SDM0DATA1_0 = 16'b0000000000000000; + parameter [8:0] SDM0DATA1_1 = 9'b000000000; + parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM0INITSEED0_1 = 9'b000000000; + parameter [0:0] SDM0_DATA_PIN_SEL = 1'b0; + parameter [0:0] SDM0_WIDTH_PIN_SEL = 1'b0; + parameter [15:0] SDM1DATA1_0 = 16'b0000000000000000; + parameter [8:0] SDM1DATA1_1 = 9'b000000000; + parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM1INITSEED0_1 = 9'b000000000; + parameter [0:0] SDM1_DATA_PIN_SEL = 1'b0; + parameter [0:0] SDM1_WIDTH_PIN_SEL = 1'b0; + parameter SIM_MODE = "FAST"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter integer SIM_VERSION = 2; + output [15:0] DRPDO; + output DRPRDY; + output [7:0] PMARSVDOUT0; + output [7:0] PMARSVDOUT1; + output QPLL0FBCLKLOST; + output QPLL0LOCK; + output QPLL0OUTCLK; + output QPLL0OUTREFCLK; + output QPLL0REFCLKLOST; + output QPLL1FBCLKLOST; + output QPLL1LOCK; + output QPLL1OUTCLK; + output QPLL1OUTREFCLK; + output QPLL1REFCLKLOST; + output [7:0] QPLLDMONITOR0; + output [7:0] QPLLDMONITOR1; + output REFCLKOUTMONITOR0; + output REFCLKOUTMONITOR1; + output [1:0] RXRECCLK0_SEL; + output [1:0] RXRECCLK1_SEL; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input [4:0] BGRCALOVRD; + input BGRCALOVRDENB; + input [8:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input GTGREFCLK0; + input GTGREFCLK1; + input GTNORTHREFCLK00; + input GTNORTHREFCLK01; + input GTNORTHREFCLK10; + input GTNORTHREFCLK11; + input GTREFCLK00; + input GTREFCLK01; + input GTREFCLK10; + input GTREFCLK11; + input GTSOUTHREFCLK00; + input GTSOUTHREFCLK01; + input GTSOUTHREFCLK10; + input GTSOUTHREFCLK11; + input [7:0] PMARSVD0; + input [7:0] PMARSVD1; + input QPLL0CLKRSVD0; + input QPLL0CLKRSVD1; + input QPLL0LOCKDETCLK; + input QPLL0LOCKEN; + input QPLL0PD; + input [2:0] QPLL0REFCLKSEL; + input QPLL0RESET; + input QPLL1CLKRSVD0; + input QPLL1CLKRSVD1; + input QPLL1LOCKDETCLK; + input QPLL1LOCKEN; + input QPLL1PD; + input [2:0] QPLL1REFCLKSEL; + input QPLL1RESET; + input [7:0] QPLLRSVD1; + input [4:0] QPLLRSVD2; + input [4:0] QPLLRSVD3; + input [7:0] QPLLRSVD4; + input RCALENB; +endmodule + +module GTYE3_CHANNEL (...); + parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0; + parameter [0:0] ACJTAG_MODE = 1'b0; + parameter [0:0] ACJTAG_RESET = 1'b0; + parameter [15:0] ADAPT_CFG0 = 16'h9200; + parameter [15:0] ADAPT_CFG1 = 16'h801C; + parameter [15:0] ADAPT_CFG2 = 16'b0000000000000000; + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter [0:0] AUTO_BW_SEL_BYPASS = 1'b0; + parameter [0:0] A_RXOSCALRESET = 1'b0; + parameter [0:0] A_RXPROGDIVRESET = 1'b0; + parameter [4:0] A_TXDIFFCTRL = 5'b01100; + parameter [0:0] A_TXPROGDIVRESET = 1'b0; + parameter [0:0] CAPBYPASS_FORCE = 1'b0; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter [0:0] CDR_SWAP_MODE_EN = 1'b0; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 2; + parameter [15:0] CH_HSPMUX = 16'h0000; + parameter [15:0] CKCAL1_CFG_0 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_1 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_2 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_3 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_0 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_1 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_2 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_3 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_4 = 16'b0000000000000000; + parameter [15:0] CKCAL_RSVD0 = 16'h0000; + parameter [15:0] CKCAL_RSVD1 = 16'h0000; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 2; + parameter [15:0] CPLL_CFG0 = 16'h20F8; + parameter [15:0] CPLL_CFG1 = 16'hA494; + parameter [15:0] CPLL_CFG2 = 16'hF001; + parameter [5:0] CPLL_CFG3 = 6'h00; + parameter integer CPLL_FBDIV = 4; + parameter integer CPLL_FBDIV_45 = 4; + parameter [15:0] CPLL_INIT_CFG0 = 16'h001E; + parameter [7:0] CPLL_INIT_CFG1 = 8'h00; + parameter [15:0] CPLL_LOCK_CFG = 16'h01E8; + parameter integer CPLL_REFCLK_DIV = 1; + parameter [2:0] CTLE3_OCAP_EXT_CTRL = 3'b000; + parameter [0:0] CTLE3_OCAP_EXT_EN = 1'b0; + parameter [1:0] DDI_CTRL = 2'b00; + parameter integer DDI_REALIGN_WAIT = 15; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [0:0] DFE_D_X_REL_POS = 1'b0; + parameter [0:0] DFE_VCM_COMP_EN = 1'b0; + parameter [9:0] DMONITOR_CFG0 = 10'h000; + parameter [7:0] DMONITOR_CFG1 = 8'h00; + parameter [0:0] ES_CLK_PHASE_SEL = 1'b0; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "FALSE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h000; + parameter [9:0] ES_PMA_CFG = 10'b0000000000; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [15:0] ES_QUALIFIER0 = 16'h0000; + parameter [15:0] ES_QUALIFIER1 = 16'h0000; + parameter [15:0] ES_QUALIFIER2 = 16'h0000; + parameter [15:0] ES_QUALIFIER3 = 16'h0000; + parameter [15:0] ES_QUALIFIER4 = 16'h0000; + parameter [15:0] ES_QUALIFIER5 = 16'h0000; + parameter [15:0] ES_QUALIFIER6 = 16'h0000; + parameter [15:0] ES_QUALIFIER7 = 16'h0000; + parameter [15:0] ES_QUALIFIER8 = 16'h0000; + parameter [15:0] ES_QUALIFIER9 = 16'h0000; + parameter [15:0] ES_QUAL_MASK0 = 16'h0000; + parameter [15:0] ES_QUAL_MASK1 = 16'h0000; + parameter [15:0] ES_QUAL_MASK2 = 16'h0000; + parameter [15:0] ES_QUAL_MASK3 = 16'h0000; + parameter [15:0] ES_QUAL_MASK4 = 16'h0000; + parameter [15:0] ES_QUAL_MASK5 = 16'h0000; + parameter [15:0] ES_QUAL_MASK6 = 16'h0000; + parameter [15:0] ES_QUAL_MASK7 = 16'h0000; + parameter [15:0] ES_QUAL_MASK8 = 16'h0000; + parameter [15:0] ES_QUAL_MASK9 = 16'h0000; + parameter [15:0] ES_SDATA_MASK0 = 16'h0000; + parameter [15:0] ES_SDATA_MASK1 = 16'h0000; + parameter [15:0] ES_SDATA_MASK2 = 16'h0000; + parameter [15:0] ES_SDATA_MASK3 = 16'h0000; + parameter [15:0] ES_SDATA_MASK4 = 16'h0000; + parameter [15:0] ES_SDATA_MASK5 = 16'h0000; + parameter [15:0] ES_SDATA_MASK6 = 16'h0000; + parameter [15:0] ES_SDATA_MASK7 = 16'h0000; + parameter [15:0] ES_SDATA_MASK8 = 16'h0000; + parameter [15:0] ES_SDATA_MASK9 = 16'h0000; + parameter [10:0] EVODD_PHI_CFG = 11'b00000000000; + parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [4:0] GEARBOX_MODE = 5'b00000; + parameter [0:0] GM_BIAS_SELECT = 1'b0; + parameter [0:0] ISCAN_CK_PH_SEL2 = 1'b0; + parameter [0:0] LOCAL_MASTER = 1'b0; + parameter [15:0] LOOP0_CFG = 16'h0000; + parameter [15:0] LOOP10_CFG = 16'h0000; + parameter [15:0] LOOP11_CFG = 16'h0000; + parameter [15:0] LOOP12_CFG = 16'h0000; + parameter [15:0] LOOP13_CFG = 16'h0000; + parameter [15:0] LOOP1_CFG = 16'h0000; + parameter [15:0] LOOP2_CFG = 16'h0000; + parameter [15:0] LOOP3_CFG = 16'h0000; + parameter [15:0] LOOP4_CFG = 16'h0000; + parameter [15:0] LOOP5_CFG = 16'h0000; + parameter [15:0] LOOP6_CFG = 16'h0000; + parameter [15:0] LOOP7_CFG = 16'h0000; + parameter [15:0] LOOP8_CFG = 16'h0000; + parameter [15:0] LOOP9_CFG = 16'h0000; + parameter [2:0] LPBK_BIAS_CTRL = 3'b000; + parameter [0:0] LPBK_EN_RCAL_B = 1'b0; + parameter [3:0] LPBK_EXT_RCAL = 4'b0000; + parameter [3:0] LPBK_RG_CTRL = 4'b0000; + parameter [1:0] OOBDIVCTL = 2'b00; + parameter [0:0] OOB_PWRUP = 1'b0; + parameter PCI3_AUTO_REALIGN = "FRST_SMPL"; + parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1; + parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00; + parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0; + parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000; + parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000; + parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000; + parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0; + parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0; + parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000; + parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_RXPMA_CFG = 16'h0000; + parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_TXPMA_CFG = 16'h0000; + parameter PCS_PCIE_EN = "FALSE"; + parameter [15:0] PCS_RSVD0 = 16'b0000000000000000; + parameter [2:0] PCS_RSVD1 = 3'b000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter [1:0] PLL_SEL_MODE_GEN12 = 2'h0; + parameter [1:0] PLL_SEL_MODE_GEN3 = 2'h0; + parameter [15:0] PMA_RSV0 = 16'h0000; + parameter [15:0] PMA_RSV1 = 16'h0000; + parameter integer PREIQ_FREQ_BST = 0; + parameter [2:0] PROCESS_PAR = 3'b010; + parameter [0:0] RATE_SW_USE_DRP = 1'b0; + parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 0; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [15:0] RXCDR_CFG0 = 16'h0000; + parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG1 = 16'h0300; + parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0300; + parameter [15:0] RXCDR_CFG2 = 16'h0060; + parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0060; + parameter [15:0] RXCDR_CFG3 = 16'h0000; + parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG4 = 16'h0002; + parameter [15:0] RXCDR_CFG4_GEN3 = 16'h0002; + parameter [15:0] RXCDR_CFG5 = 16'h0000; + parameter [15:0] RXCDR_CFG5_GEN3 = 16'h0000; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [15:0] RXCDR_LOCK_CFG0 = 16'h0001; + parameter [15:0] RXCDR_LOCK_CFG1 = 16'h0000; + parameter [15:0] RXCDR_LOCK_CFG2 = 16'h0000; + parameter [15:0] RXCDR_LOCK_CFG3 = 16'h0000; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [1:0] RXCFOKDONE_SRC = 2'b00; + parameter [15:0] RXCFOK_CFG0 = 16'h3E00; + parameter [15:0] RXCFOK_CFG1 = 16'h0042; + parameter [15:0] RXCFOK_CFG2 = 16'h002D; + parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111; + parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000; + parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0022; + parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0100; + parameter [15:0] RXDFE_CFG0 = 16'h4C00; + parameter [15:0] RXDFE_CFG1 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG0 = 16'h1E00; + parameter [15:0] RXDFE_GC_CFG1 = 16'h1900; + parameter [15:0] RXDFE_GC_CFG2 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H3_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H3_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H4_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H4_CFG1 = 16'h0003; + parameter [15:0] RXDFE_H5_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H5_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H6_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H6_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H7_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H7_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H8_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H8_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H9_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H9_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HA_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HA_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HB_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HB_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HC_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HD_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HD_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HE_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HE_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HF_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HF_CFG1 = 16'h0002; + parameter [15:0] RXDFE_OS_CFG0 = 16'h0000; + parameter [15:0] RXDFE_OS_CFG1 = 16'h0200; + parameter [0:0] RXDFE_PWR_SAVING = 1'b0; + parameter [15:0] RXDFE_UT_CFG0 = 16'h0000; + parameter [15:0] RXDFE_UT_CFG1 = 16'h0002; + parameter [15:0] RXDFE_VP_CFG0 = 16'h0000; + parameter [15:0] RXDFE_VP_CFG1 = 16'h0022; + parameter [15:0] RXDLY_CFG = 16'h001F; + parameter [15:0] RXDLY_LCFG = 16'h0030; + parameter RXELECIDLE_CFG = "SIGCFG_4"; + parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [15:0] RXLPM_CFG = 16'h0000; + parameter [15:0] RXLPM_GC_CFG = 16'h0200; + parameter [15:0] RXLPM_KH_CFG0 = 16'h0000; + parameter [15:0] RXLPM_KH_CFG1 = 16'h0002; + parameter [15:0] RXLPM_OS_CFG0 = 16'h0400; + parameter [15:0] RXLPM_OS_CFG1 = 16'h0000; + parameter [8:0] RXOOB_CFG = 9'b000000110; + parameter RXOOB_CLK_CFG = "PMA"; + parameter [4:0] RXOSCALRESET_TIME = 5'b00011; + parameter integer RXOUT_DIV = 4; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [15:0] RXPHBEACON_CFG = 16'h0000; + parameter [15:0] RXPHDLY_CFG = 16'h2020; + parameter [15:0] RXPHSAMP_CFG = 16'h2100; + parameter [15:0] RXPHSLIP_CFG = 16'h9933; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [0:0] RXPI_AUTO_BW_SEL_BYPASS = 1'b0; + parameter [15:0] RXPI_CFG = 16'h0100; + parameter [0:0] RXPI_LPM = 1'b0; + parameter [15:0] RXPI_RSV0 = 16'h0000; + parameter [1:0] RXPI_SEL_LC = 2'b00; + parameter [1:0] RXPI_STARTCODE = 2'b00; + parameter [0:0] RXPI_VREFSEL = 1'b0; + parameter RXPMACLK_SEL = "DATA"; + parameter [4:0] RXPMARESET_TIME = 5'b00001; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXPRBS_LINKACQ_CNT = 15; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [0:0] RXSYNC_MULTILANE = 1'b0; + parameter [0:0] RXSYNC_OVRD = 1'b0; + parameter [0:0] RXSYNC_SKIP_DA = 1'b0; + parameter [0:0] RX_AFE_CM_EN = 1'b0; + parameter [15:0] RX_BIAS_CFG0 = 16'h1534; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0; + parameter integer RX_CLK25_DIV = 8; + parameter [0:0] RX_CLKMUX_EN = 1'b1; + parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000; + parameter [3:0] RX_CM_BUF_CFG = 4'b1010; + parameter [0:0] RX_CM_BUF_PD = 1'b0; + parameter integer RX_CM_SEL = 3; + parameter integer RX_CM_TRIM = 10; + parameter [0:0] RX_CTLE1_KHKL = 1'b0; + parameter [0:0] RX_CTLE2_KHKL = 1'b0; + parameter [0:0] RX_CTLE3_AGC = 1'b0; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter [2:0] RX_DEGEN_CTRL = 3'b010; + parameter integer RX_DFELPM_CFG0 = 6; + parameter [0:0] RX_DFELPM_CFG1 = 1'b0; + parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1; + parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00; + parameter integer RX_DFE_AGC_CFG1 = 4; + parameter integer RX_DFE_KL_LPM_KH_CFG0 = 1; + parameter integer RX_DFE_KL_LPM_KH_CFG1 = 2; + parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01; + parameter [2:0] RX_DFE_KL_LPM_KL_CFG1 = 3'b010; + parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter [0:0] RX_DIV2_MODE_B = 1'b0; + parameter [4:0] RX_DIVRESET_TIME = 5'b00001; + parameter [0:0] RX_EN_CTLE_RCAL_B = 1'b0; + parameter [0:0] RX_EN_HI_LR = 1'b0; + parameter [8:0] RX_EXT_RL_CTRL = 9'b000000000; + parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000; + parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0; + parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b00; + parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0; + parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0; + parameter integer RX_INT_DATAWIDTH = 1; + parameter [0:0] RX_PMA_POWER_SAVE = 1'b0; + parameter real RX_PROGDIV_CFG = 0.0; + parameter [15:0] RX_PROGDIV_RATE = 16'h0001; + parameter [3:0] RX_RESLOAD_CTRL = 4'b0000; + parameter [0:0] RX_RESLOAD_OVRD = 1'b0; + parameter [2:0] RX_SAMPLE_PERIOD = 3'b101; + parameter integer RX_SIG_VALID_DLY = 11; + parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0; + parameter [3:0] RX_SUM_IREF_TUNE = 4'b0000; + parameter [3:0] RX_SUM_VCMTUNE = 4'b1000; + parameter [0:0] RX_SUM_VCM_OVWR = 1'b0; + parameter [2:0] RX_SUM_VREF_TUNE = 3'b100; + parameter [1:0] RX_TUNE_AFE_OS = 2'b00; + parameter [2:0] RX_VREG_CTRL = 3'b101; + parameter [0:0] RX_VREG_PDB = 1'b1; + parameter [1:0] RX_WIDEMODE_CDR = 2'b01; + parameter RX_XCLK_SEL = "RXDES"; + parameter [0:0] RX_XMODE_SEL = 1'b0; + parameter integer SAS_MAX_COM = 64; + parameter integer SAS_MIN_COM = 36; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter SATA_CPLL_CFG = "VCO_3000MHZ"; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter integer SATA_MAX_BURST = 8; + parameter integer SATA_MAX_INIT = 21; + parameter integer SATA_MAX_WAKE = 7; + parameter integer SATA_MIN_BURST = 4; + parameter integer SATA_MIN_INIT = 12; + parameter integer SATA_MIN_WAKE = 4; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter SIM_MODE = "FAST"; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter [0:0] SIM_TX_EIDLE_DRIVE_LEVEL = 1'b0; + parameter integer SIM_VERSION = 2; + parameter [1:0] TAPDLY_SET_TX = 2'h0; + parameter [3:0] TEMPERATURE_PAR = 4'b0010; + parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000; + parameter [2:0] TERM_RCAL_OVRD = 3'b000; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [7:0] TST_RSV0 = 8'h00; + parameter [7:0] TST_RSV1 = 8'h00; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h001F; + parameter [15:0] TXDLY_LCFG = 16'h0030; + parameter TXFIFO_ADDR_CFG = "LOW"; + parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter TXGEARBOX_EN = "FALSE"; + parameter integer TXOUT_DIV = 4; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [15:0] TXPHDLY_CFG0 = 16'h2020; + parameter [15:0] TXPHDLY_CFG1 = 16'h0001; + parameter [15:0] TXPH_CFG = 16'h0123; + parameter [15:0] TXPH_CFG2 = 16'h0000; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [1:0] TXPI_CFG0 = 2'b00; + parameter [1:0] TXPI_CFG1 = 2'b00; + parameter [1:0] TXPI_CFG2 = 2'b00; + parameter [0:0] TXPI_CFG3 = 1'b0; + parameter [0:0] TXPI_CFG4 = 1'b1; + parameter [2:0] TXPI_CFG5 = 3'b000; + parameter [0:0] TXPI_GRAY_SEL = 1'b0; + parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0; + parameter [0:0] TXPI_LPM = 1'b0; + parameter TXPI_PPMCLK_SEL = "TXUSRCLK2"; + parameter [7:0] TXPI_PPM_CFG = 8'b00000000; + parameter [15:0] TXPI_RSV0 = 16'h0000; + parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000; + parameter [0:0] TXPI_VREFSEL = 1'b0; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter [0:0] TXSYNC_MULTILANE = 1'b0; + parameter [0:0] TXSYNC_OVRD = 1'b0; + parameter [0:0] TXSYNC_SKIP_DA = 1'b0; + parameter integer TX_CLK25_DIV = 8; + parameter [0:0] TX_CLKMUX_EN = 1'b1; + parameter [0:0] TX_CLKREG_PDB = 1'b0; + parameter [2:0] TX_CLKREG_SET = 3'b000; + parameter integer TX_DATA_WIDTH = 20; + parameter [5:0] TX_DCD_CFG = 6'b000010; + parameter [0:0] TX_DCD_EN = 1'b0; + parameter [5:0] TX_DEEMPH0 = 6'b000000; + parameter [5:0] TX_DEEMPH1 = 6'b000000; + parameter [4:0] TX_DIVRESET_TIME = 5'b00001; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter integer TX_DRVMUX_CTRL = 2; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter [0:0] TX_EML_PHI_TUNE = 1'b0; + parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0; + parameter [0:0] TX_FIFO_BYP_EN = 1'b0; + parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0; + parameter integer TX_INT_DATAWIDTH = 1; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [2:0] TX_MODE_SEL = 3'b000; + parameter [15:0] TX_PHICAL_CFG0 = 16'h0000; + parameter [15:0] TX_PHICAL_CFG1 = 16'h7E00; + parameter [15:0] TX_PHICAL_CFG2 = 16'h0000; + parameter integer TX_PI_BIASSET = 0; + parameter [15:0] TX_PI_CFG0 = 16'h0000; + parameter [15:0] TX_PI_CFG1 = 16'h0000; + parameter [0:0] TX_PI_DIV2_MODE_B = 1'b0; + parameter [0:0] TX_PI_SEL_QPLL0 = 1'b0; + parameter [0:0] TX_PI_SEL_QPLL1 = 1'b0; + parameter [0:0] TX_PMADATA_OPT = 1'b0; + parameter [0:0] TX_PMA_POWER_SAVE = 1'b0; + parameter integer TX_PREDRV_CTRL = 2; + parameter TX_PROGCLK_SEL = "POSTPI"; + parameter real TX_PROGDIV_CFG = 0.0; + parameter [15:0] TX_PROGDIV_RATE = 16'h0001; + parameter [13:0] TX_RXDETECT_CFG = 14'h0032; + parameter integer TX_RXDETECT_REF = 4; + parameter [2:0] TX_SAMPLE_PERIOD = 3'b101; + parameter [0:0] TX_SARC_LPBK_ENB = 1'b0; + parameter TX_XCLK_SEL = "TXOUT"; + parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0; + output [2:0] BUFGTCE; + output [2:0] BUFGTCEMASK; + output [8:0] BUFGTDIV; + output [2:0] BUFGTRESET; + output [2:0] BUFGTRSTMASK; + output CPLLFBCLKLOST; + output CPLLLOCK; + output CPLLREFCLKLOST; + output [16:0] DMONITOROUT; + output [15:0] DRPDO; + output DRPRDY; + output EYESCANDATAERROR; + output GTPOWERGOOD; + output GTREFCLKMONITOR; + output GTYTXN; + output GTYTXP; + output PCIERATEGEN3; + output PCIERATEIDLE; + output [1:0] PCIERATEQPLLPD; + output [1:0] PCIERATEQPLLRESET; + output PCIESYNCTXSYNCDONE; + output PCIEUSERGEN3RDY; + output PCIEUSERPHYSTATUSRST; + output PCIEUSERRATESTART; + output [15:0] PCSRSVDOUT; + output PHYSTATUS; + output [7:0] PINRSRVDAS; + output RESETEXCEPTION; + output [2:0] RXBUFSTATUS; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCDRPHDONE; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output [4:0] RXCHBONDO; + output RXCKCALDONE; + output [1:0] RXCLKCORCNT; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output [15:0] RXCTRL0; + output [15:0] RXCTRL1; + output [7:0] RXCTRL2; + output [7:0] RXCTRL3; + output [127:0] RXDATA; + output [7:0] RXDATAEXTENDRSVD; + output [1:0] RXDATAVALID; + output RXDLYSRESETDONE; + output RXELECIDLE; + output [5:0] RXHEADER; + output [1:0] RXHEADERVALID; + output [6:0] RXMONITOROUT; + output RXOSINTDONE; + output RXOSINTSTARTED; + output RXOSINTSTROBEDONE; + output RXOSINTSTROBESTARTED; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPHALIGNERR; + output RXPMARESETDONE; + output RXPRBSERR; + output RXPRBSLOCKED; + output RXPRGDIVRESETDONE; + output RXRATEDONE; + output RXRECCLKOUT; + output RXRESETDONE; + output RXSLIDERDY; + output RXSLIPDONE; + output RXSLIPOUTCLKRDY; + output RXSLIPPMARDY; + output [1:0] RXSTARTOFSEQ; + output [2:0] RXSTATUS; + output RXSYNCDONE; + output RXSYNCOUT; + output RXVALID; + output [1:0] TXBUFSTATUS; + output TXCOMFINISH; + output TXDCCDONE; + output TXDLYSRESETDONE; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXPMARESETDONE; + output TXPRGDIVRESETDONE; + output TXRATEDONE; + output TXRESETDONE; + output TXSYNCDONE; + output TXSYNCOUT; + input CDRSTEPDIR; + input CDRSTEPSQ; + input CDRSTEPSX; + input CFGRESET; + input CLKRSVD0; + input CLKRSVD1; + input CPLLLOCKDETCLK; + input CPLLLOCKEN; + input CPLLPD; + input [2:0] CPLLREFCLKSEL; + input CPLLRESET; + input DMONFIFORESET; + input DMONITORCLK; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input ELPCALDVORWREN; + input ELPCALPAORWREN; + input EVODDPHICALDONE; + input EVODDPHICALSTART; + input EVODDPHIDRDEN; + input EVODDPHIDWREN; + input EVODDPHIXRDEN; + input EVODDPHIXWREN; + input EYESCANMODE; + input EYESCANRESET; + input EYESCANTRIGGER; + input GTGREFCLK; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input GTRESETSEL; + input [15:0] GTRSVD; + input GTRXRESET; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + input GTTXRESET; + input GTYRXN; + input GTYRXP; + input [2:0] LOOPBACK; + input [15:0] LOOPRSVD; + input LPBKRXTXSEREN; + input LPBKTXRXSEREN; + input PCIEEQRXEQADAPTDONE; + input PCIERSTIDLE; + input PCIERSTTXSYNCSTART; + input PCIEUSERRATEDONE; + input [15:0] PCSRSVDIN; + input [4:0] PCSRSVDIN2; + input [4:0] PMARSVDIN; + input QPLL0CLK; + input QPLL0REFCLK; + input QPLL1CLK; + input QPLL1REFCLK; + input RESETOVRD; + input RSTCLKENTX; + input RX8B10BEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCDRRESETRSV; + input RXCHBONDEN; + input [4:0] RXCHBONDI; + input [2:0] RXCHBONDLEVEL; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCKCALRESET; + input RXCOMMADETEN; + input RXDCCFORCESTART; + input RXDFEAGCHOLD; + input RXDFEAGCOVRDEN; + input RXDFELFHOLD; + input RXDFELFOVRDEN; + input RXDFELPMRESET; + input RXDFETAP10HOLD; + input RXDFETAP10OVRDEN; + input RXDFETAP11HOLD; + input RXDFETAP11OVRDEN; + input RXDFETAP12HOLD; + input RXDFETAP12OVRDEN; + input RXDFETAP13HOLD; + input RXDFETAP13OVRDEN; + input RXDFETAP14HOLD; + input RXDFETAP14OVRDEN; + input RXDFETAP15HOLD; + input RXDFETAP15OVRDEN; + input RXDFETAP2HOLD; + input RXDFETAP2OVRDEN; + input RXDFETAP3HOLD; + input RXDFETAP3OVRDEN; + input RXDFETAP4HOLD; + input RXDFETAP4OVRDEN; + input RXDFETAP5HOLD; + input RXDFETAP5OVRDEN; + input RXDFETAP6HOLD; + input RXDFETAP6OVRDEN; + input RXDFETAP7HOLD; + input RXDFETAP7OVRDEN; + input RXDFETAP8HOLD; + input RXDFETAP8OVRDEN; + input RXDFETAP9HOLD; + input RXDFETAP9OVRDEN; + input RXDFEUTHOLD; + input RXDFEUTOVRDEN; + input RXDFEVPHOLD; + input RXDFEVPOVRDEN; + input RXDFEVSEN; + input RXDFEXYDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input [1:0] RXELECIDLEMODE; + input RXGEARBOXSLIP; + input RXLATCLK; + input RXLPMEN; + input RXLPMGCHOLD; + input RXLPMGCOVRDEN; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFKLOVRDEN; + input RXLPMOSHOLD; + input RXLPMOSOVRDEN; + input RXMCOMMAALIGNEN; + input [1:0] RXMONITORSEL; + input RXOOBRESET; + input RXOSCALRESET; + input RXOSHOLD; + input [3:0] RXOSINTCFG; + input RXOSINTEN; + input RXOSINTHOLD; + input RXOSINTOVRDEN; + input RXOSINTSTROBE; + input RXOSINTTESTOVRDEN; + input RXOSOVRDEN; + input [2:0] RXOUTCLKSEL; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input [1:0] RXPD; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input RXPHOVRDEN; + input [1:0] RXPLLCLKSEL; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input [3:0] RXPRBSSEL; + input RXPROGDIVRESET; + input [2:0] RXRATE; + input RXRATEMODE; + input RXSLIDE; + input RXSLIPOUTCLK; + input RXSLIPPMA; + input RXSYNCALLIN; + input RXSYNCIN; + input RXSYNCMODE; + input [1:0] RXSYSCLKSEL; + input RXUSERRDY; + input RXUSRCLK; + input RXUSRCLK2; + input SIGVALIDCLK; + input [19:0] TSTIN; + input [7:0] TX8B10BBYPASS; + input TX8B10BEN; + input [2:0] TXBUFDIFFCTRL; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input [15:0] TXCTRL0; + input [15:0] TXCTRL1; + input [7:0] TXCTRL2; + input [127:0] TXDATA; + input [7:0] TXDATAEXTENDRSVD; + input TXDCCFORCESTART; + input TXDCCRESET; + input TXDEEMPH; + input TXDETECTRX; + input [4:0] TXDIFFCTRL; + input TXDIFFPD; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input TXELFORCESTART; + input [5:0] TXHEADER; + input TXINHIBIT; + input TXLATCLK; + input [6:0] TXMAINCURSOR; + input [2:0] TXMARGIN; + input [2:0] TXOUTCLKSEL; + input TXPCSRESET; + input [1:0] TXPD; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPIPPMEN; + input TXPIPPMOVRDEN; + input TXPIPPMPD; + input TXPIPPMSEL; + input [4:0] TXPIPPMSTEPSIZE; + input TXPISOPD; + input [1:0] TXPLLCLKSEL; + input TXPMARESET; + input TXPOLARITY; + input [4:0] TXPOSTCURSOR; + input TXPRBSFORCEERR; + input [3:0] TXPRBSSEL; + input [4:0] TXPRECURSOR; + input TXPROGDIVRESET; + input [2:0] TXRATE; + input TXRATEMODE; + input [6:0] TXSEQUENCE; + input TXSWING; + input TXSYNCALLIN; + input TXSYNCIN; + input TXSYNCMODE; + input [1:0] TXSYSCLKSEL; + input TXUSERRDY; + input TXUSRCLK; + input TXUSRCLK2; +endmodule + +module GTYE3_COMMON (...); + parameter [15:0] A_SDM1DATA1_0 = 16'b0000000000000000; + parameter [8:0] A_SDM1DATA1_1 = 9'b000000000; + parameter [15:0] BIAS_CFG0 = 16'h0000; + parameter [15:0] BIAS_CFG1 = 16'h0000; + parameter [15:0] BIAS_CFG2 = 16'h0000; + parameter [15:0] BIAS_CFG3 = 16'h0000; + parameter [15:0] BIAS_CFG4 = 16'h0000; + parameter [9:0] BIAS_CFG_RSVD = 10'b0000000000; + parameter [15:0] COMMON_CFG0 = 16'h0000; + parameter [15:0] COMMON_CFG1 = 16'h0000; + parameter [15:0] POR_CFG = 16'h0004; + parameter [15:0] PPF0_CFG = 16'h0FFF; + parameter [15:0] PPF1_CFG = 16'h0FFF; + parameter QPLL0CLKOUT_RATE = "FULL"; + parameter [15:0] QPLL0_CFG0 = 16'h301C; + parameter [15:0] QPLL0_CFG1 = 16'h0000; + parameter [15:0] QPLL0_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL0_CFG2 = 16'h0780; + parameter [15:0] QPLL0_CFG2_G3 = 16'h0780; + parameter [15:0] QPLL0_CFG3 = 16'h0120; + parameter [15:0] QPLL0_CFG4 = 16'h0021; + parameter [9:0] QPLL0_CP = 10'b0000011111; + parameter [9:0] QPLL0_CP_G3 = 10'b0000011111; + parameter integer QPLL0_FBDIV = 66; + parameter integer QPLL0_FBDIV_G3 = 80; + parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL0_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL0_LPF = 10'b1111111111; + parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111; + parameter integer QPLL0_REFCLK_DIV = 2; + parameter [15:0] QPLL0_SDM_CFG0 = 16'h0040; + parameter [15:0] QPLL0_SDM_CFG1 = 16'h0000; + parameter [15:0] QPLL0_SDM_CFG2 = 16'h0000; + parameter QPLL1CLKOUT_RATE = "FULL"; + parameter [15:0] QPLL1_CFG0 = 16'h301C; + parameter [15:0] QPLL1_CFG1 = 16'h0000; + parameter [15:0] QPLL1_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL1_CFG2 = 16'h0780; + parameter [15:0] QPLL1_CFG2_G3 = 16'h0780; + parameter [15:0] QPLL1_CFG3 = 16'h0120; + parameter [15:0] QPLL1_CFG4 = 16'h0021; + parameter [9:0] QPLL1_CP = 10'b0000011111; + parameter [9:0] QPLL1_CP_G3 = 10'b0000011111; + parameter integer QPLL1_FBDIV = 66; + parameter integer QPLL1_FBDIV_G3 = 80; + parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL1_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL1_LPF = 10'b1111111111; + parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111; + parameter integer QPLL1_REFCLK_DIV = 2; + parameter [15:0] QPLL1_SDM_CFG0 = 16'h0040; + parameter [15:0] QPLL1_SDM_CFG1 = 16'h0000; + parameter [15:0] QPLL1_SDM_CFG2 = 16'h0000; + parameter [15:0] RSVD_ATTR0 = 16'h0000; + parameter [15:0] RSVD_ATTR1 = 16'h0000; + parameter [15:0] RSVD_ATTR2 = 16'h0000; + parameter [15:0] RSVD_ATTR3 = 16'h0000; + parameter [1:0] RXRECCLKOUT0_SEL = 2'b00; + parameter [1:0] RXRECCLKOUT1_SEL = 2'b00; + parameter [0:0] SARC_EN = 1'b1; + parameter [0:0] SARC_SEL = 1'b0; + parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM0INITSEED0_1 = 9'b000000000; + parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM1INITSEED0_1 = 9'b000000000; + parameter SIM_MODE = "FAST"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter integer SIM_VERSION = 2; + output [15:0] DRPDO; + output DRPRDY; + output [7:0] PMARSVDOUT0; + output [7:0] PMARSVDOUT1; + output QPLL0FBCLKLOST; + output QPLL0LOCK; + output QPLL0OUTCLK; + output QPLL0OUTREFCLK; + output QPLL0REFCLKLOST; + output QPLL1FBCLKLOST; + output QPLL1LOCK; + output QPLL1OUTCLK; + output QPLL1OUTREFCLK; + output QPLL1REFCLKLOST; + output [7:0] QPLLDMONITOR0; + output [7:0] QPLLDMONITOR1; + output REFCLKOUTMONITOR0; + output REFCLKOUTMONITOR1; + output [1:0] RXRECCLK0_SEL; + output [1:0] RXRECCLK1_SEL; + output [3:0] SDM0FINALOUT; + output [14:0] SDM0TESTDATA; + output [3:0] SDM1FINALOUT; + output [14:0] SDM1TESTDATA; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input [4:0] BGRCALOVRD; + input BGRCALOVRDENB; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input GTGREFCLK0; + input GTGREFCLK1; + input GTNORTHREFCLK00; + input GTNORTHREFCLK01; + input GTNORTHREFCLK10; + input GTNORTHREFCLK11; + input GTREFCLK00; + input GTREFCLK01; + input GTREFCLK10; + input GTREFCLK11; + input GTSOUTHREFCLK00; + input GTSOUTHREFCLK01; + input GTSOUTHREFCLK10; + input GTSOUTHREFCLK11; + input [7:0] PMARSVD0; + input [7:0] PMARSVD1; + input QPLL0CLKRSVD0; + input QPLL0LOCKDETCLK; + input QPLL0LOCKEN; + input QPLL0PD; + input [2:0] QPLL0REFCLKSEL; + input QPLL0RESET; + input QPLL1CLKRSVD0; + input QPLL1LOCKDETCLK; + input QPLL1LOCKEN; + input QPLL1PD; + input [2:0] QPLL1REFCLKSEL; + input QPLL1RESET; + input [7:0] QPLLRSVD1; + input [4:0] QPLLRSVD2; + input [4:0] QPLLRSVD3; + input [7:0] QPLLRSVD4; + input RCALENB; + input [24:0] SDM0DATA; + input SDM0RESET; + input [1:0] SDM0WIDTH; + input [24:0] SDM1DATA; + input SDM1RESET; + input [1:0] SDM1WIDTH; +endmodule + +module IBUFDS_GTE3 (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter [1:0] REFCLK_HROW_CK_SEL = 2'b00; + parameter [1:0] REFCLK_ICNTL_RX = 2'b00; + output O; + output ODIV2; + input CEB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module OBUFDS_GTE3 (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter [4:0] REFCLK_ICNTL_TX = 5'b00000; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input CEB; + input I; +endmodule + +module OBUFDS_GTE3_ADV (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter [4:0] REFCLK_ICNTL_TX = 5'b00000; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input CEB; + input [3:0] I; + input [1:0] RXRECCLK_SEL; +endmodule + +module GTHE4_CHANNEL (...); + parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0; + parameter [0:0] ACJTAG_MODE = 1'b0; + parameter [0:0] ACJTAG_RESET = 1'b0; + parameter [15:0] ADAPT_CFG0 = 16'h9200; + parameter [15:0] ADAPT_CFG1 = 16'h801C; + parameter [15:0] ADAPT_CFG2 = 16'h0000; + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter [0:0] A_RXOSCALRESET = 1'b0; + parameter [0:0] A_RXPROGDIVRESET = 1'b0; + parameter [0:0] A_RXTERMINATION = 1'b1; + parameter [4:0] A_TXDIFFCTRL = 5'b01100; + parameter [0:0] A_TXPROGDIVRESET = 1'b0; + parameter [0:0] CAPBYPASS_FORCE = 1'b0; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter [0:0] CDR_SWAP_MODE_EN = 1'b0; + parameter [0:0] CFOK_PWRSVE_EN = 1'b1; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 2; + parameter [15:0] CH_HSPMUX = 16'h2424; + parameter [15:0] CKCAL1_CFG_0 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_1 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_2 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_3 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_0 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_1 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_2 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_3 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_4 = 16'b0000000000000000; + parameter [15:0] CKCAL_RSVD0 = 16'h4000; + parameter [15:0] CKCAL_RSVD1 = 16'h0000; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 2; + parameter [15:0] CPLL_CFG0 = 16'h01FA; + parameter [15:0] CPLL_CFG1 = 16'h24A9; + parameter [15:0] CPLL_CFG2 = 16'h6807; + parameter [15:0] CPLL_CFG3 = 16'h0000; + parameter integer CPLL_FBDIV = 4; + parameter integer CPLL_FBDIV_45 = 4; + parameter [15:0] CPLL_INIT_CFG0 = 16'h001E; + parameter [15:0] CPLL_LOCK_CFG = 16'h01E8; + parameter integer CPLL_REFCLK_DIV = 1; + parameter [2:0] CTLE3_OCAP_EXT_CTRL = 3'b000; + parameter [0:0] CTLE3_OCAP_EXT_EN = 1'b0; + parameter [1:0] DDI_CTRL = 2'b00; + parameter integer DDI_REALIGN_WAIT = 15; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [0:0] DELAY_ELEC = 1'b0; + parameter [9:0] DMONITOR_CFG0 = 10'h000; + parameter [7:0] DMONITOR_CFG1 = 8'h00; + parameter [0:0] ES_CLK_PHASE_SEL = 1'b0; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "FALSE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h800; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [15:0] ES_QUALIFIER0 = 16'h0000; + parameter [15:0] ES_QUALIFIER1 = 16'h0000; + parameter [15:0] ES_QUALIFIER2 = 16'h0000; + parameter [15:0] ES_QUALIFIER3 = 16'h0000; + parameter [15:0] ES_QUALIFIER4 = 16'h0000; + parameter [15:0] ES_QUALIFIER5 = 16'h0000; + parameter [15:0] ES_QUALIFIER6 = 16'h0000; + parameter [15:0] ES_QUALIFIER7 = 16'h0000; + parameter [15:0] ES_QUALIFIER8 = 16'h0000; + parameter [15:0] ES_QUALIFIER9 = 16'h0000; + parameter [15:0] ES_QUAL_MASK0 = 16'h0000; + parameter [15:0] ES_QUAL_MASK1 = 16'h0000; + parameter [15:0] ES_QUAL_MASK2 = 16'h0000; + parameter [15:0] ES_QUAL_MASK3 = 16'h0000; + parameter [15:0] ES_QUAL_MASK4 = 16'h0000; + parameter [15:0] ES_QUAL_MASK5 = 16'h0000; + parameter [15:0] ES_QUAL_MASK6 = 16'h0000; + parameter [15:0] ES_QUAL_MASK7 = 16'h0000; + parameter [15:0] ES_QUAL_MASK8 = 16'h0000; + parameter [15:0] ES_QUAL_MASK9 = 16'h0000; + parameter [15:0] ES_SDATA_MASK0 = 16'h0000; + parameter [15:0] ES_SDATA_MASK1 = 16'h0000; + parameter [15:0] ES_SDATA_MASK2 = 16'h0000; + parameter [15:0] ES_SDATA_MASK3 = 16'h0000; + parameter [15:0] ES_SDATA_MASK4 = 16'h0000; + parameter [15:0] ES_SDATA_MASK5 = 16'h0000; + parameter [15:0] ES_SDATA_MASK6 = 16'h0000; + parameter [15:0] ES_SDATA_MASK7 = 16'h0000; + parameter [15:0] ES_SDATA_MASK8 = 16'h0000; + parameter [15:0] ES_SDATA_MASK9 = 16'h0000; + parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [4:0] GEARBOX_MODE = 5'b00000; + parameter [0:0] ISCAN_CK_PH_SEL2 = 1'b0; + parameter [0:0] LOCAL_MASTER = 1'b0; + parameter [2:0] LPBK_BIAS_CTRL = 3'b000; + parameter [0:0] LPBK_EN_RCAL_B = 1'b0; + parameter [3:0] LPBK_EXT_RCAL = 4'b0000; + parameter [2:0] LPBK_IND_CTRL0 = 3'b000; + parameter [2:0] LPBK_IND_CTRL1 = 3'b000; + parameter [2:0] LPBK_IND_CTRL2 = 3'b000; + parameter [3:0] LPBK_RG_CTRL = 4'b0000; + parameter [1:0] OOBDIVCTL = 2'b00; + parameter [0:0] OOB_PWRUP = 1'b0; + parameter PCI3_AUTO_REALIGN = "FRST_SMPL"; + parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1; + parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00; + parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0; + parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000; + parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000; + parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000; + parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0; + parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0; + parameter [4:0] PCIE3_CLK_COR_EMPTY_THRSH = 5'b00000; + parameter [5:0] PCIE3_CLK_COR_FULL_THRSH = 6'b010000; + parameter [4:0] PCIE3_CLK_COR_MAX_LAT = 5'b01000; + parameter [4:0] PCIE3_CLK_COR_MIN_LAT = 5'b00100; + parameter [5:0] PCIE3_CLK_COR_THRSH_TIMER = 6'b001000; + parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000; + parameter [1:0] PCIE_PLL_SEL_MODE_GEN12 = 2'h0; + parameter [1:0] PCIE_PLL_SEL_MODE_GEN3 = 2'h0; + parameter [1:0] PCIE_PLL_SEL_MODE_GEN4 = 2'h0; + parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_RXPMA_CFG = 16'h0000; + parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_TXPMA_CFG = 16'h0000; + parameter PCS_PCIE_EN = "FALSE"; + parameter [15:0] PCS_RSVD0 = 16'b0000000000000000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter integer PREIQ_FREQ_BST = 0; + parameter [2:0] PROCESS_PAR = 3'b010; + parameter [0:0] RATE_SW_USE_DRP = 1'b0; + parameter [0:0] RCLK_SIPO_DLY_ENB = 1'b0; + parameter [0:0] RCLK_SIPO_INV_EN = 1'b0; + parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0; + parameter [2:0] RTX_BUF_CML_CTRL = 3'b010; + parameter [1:0] RTX_BUF_TERM_CTRL = 2'b00; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 0; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [15:0] RXCDR_CFG0 = 16'h0003; + parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0003; + parameter [15:0] RXCDR_CFG1 = 16'h0000; + parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG2 = 16'h0164; + parameter [9:0] RXCDR_CFG2_GEN2 = 10'h164; + parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0034; + parameter [15:0] RXCDR_CFG2_GEN4 = 16'h0034; + parameter [15:0] RXCDR_CFG3 = 16'h0024; + parameter [5:0] RXCDR_CFG3_GEN2 = 6'h24; + parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0024; + parameter [15:0] RXCDR_CFG3_GEN4 = 16'h0024; + parameter [15:0] RXCDR_CFG4 = 16'h5CF6; + parameter [15:0] RXCDR_CFG4_GEN3 = 16'h5CF6; + parameter [15:0] RXCDR_CFG5 = 16'hB46B; + parameter [15:0] RXCDR_CFG5_GEN3 = 16'h146B; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [15:0] RXCDR_LOCK_CFG0 = 16'h0040; + parameter [15:0] RXCDR_LOCK_CFG1 = 16'h8000; + parameter [15:0] RXCDR_LOCK_CFG2 = 16'h0000; + parameter [15:0] RXCDR_LOCK_CFG3 = 16'h0000; + parameter [15:0] RXCDR_LOCK_CFG4 = 16'h0000; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [15:0] RXCFOK_CFG0 = 16'h0000; + parameter [15:0] RXCFOK_CFG1 = 16'h0002; + parameter [15:0] RXCFOK_CFG2 = 16'h002D; + parameter [15:0] RXCKCAL1_IQ_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL1_I_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL1_Q_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_DX_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_D_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_S_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_X_LOOP_RST_CFG = 16'h0000; + parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111; + parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000; + parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0022; + parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0100; + parameter [15:0] RXDFE_CFG0 = 16'h4000; + parameter [15:0] RXDFE_CFG1 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG1 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG2 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H3_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H3_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H4_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H4_CFG1 = 16'h0003; + parameter [15:0] RXDFE_H5_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H5_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H6_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H6_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H7_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H7_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H8_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H8_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H9_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H9_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HA_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HA_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HB_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HB_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HC_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HD_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HD_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HE_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HE_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HF_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HF_CFG1 = 16'h0002; + parameter [15:0] RXDFE_KH_CFG0 = 16'h0000; + parameter [15:0] RXDFE_KH_CFG1 = 16'h0000; + parameter [15:0] RXDFE_KH_CFG2 = 16'h0000; + parameter [15:0] RXDFE_KH_CFG3 = 16'h0000; + parameter [15:0] RXDFE_OS_CFG0 = 16'h0000; + parameter [15:0] RXDFE_OS_CFG1 = 16'h0002; + parameter [0:0] RXDFE_PWR_SAVING = 1'b0; + parameter [15:0] RXDFE_UT_CFG0 = 16'h0000; + parameter [15:0] RXDFE_UT_CFG1 = 16'h0002; + parameter [15:0] RXDFE_UT_CFG2 = 16'h0000; + parameter [15:0] RXDFE_VP_CFG0 = 16'h0000; + parameter [15:0] RXDFE_VP_CFG1 = 16'h0022; + parameter [15:0] RXDLY_CFG = 16'h0010; + parameter [15:0] RXDLY_LCFG = 16'h0030; + parameter RXELECIDLE_CFG = "SIGCFG_4"; + parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [15:0] RXLPM_CFG = 16'h0000; + parameter [15:0] RXLPM_GC_CFG = 16'h1000; + parameter [15:0] RXLPM_KH_CFG0 = 16'h0000; + parameter [15:0] RXLPM_KH_CFG1 = 16'h0002; + parameter [15:0] RXLPM_OS_CFG0 = 16'h0000; + parameter [15:0] RXLPM_OS_CFG1 = 16'h0000; + parameter [8:0] RXOOB_CFG = 9'b000110000; + parameter RXOOB_CLK_CFG = "PMA"; + parameter [4:0] RXOSCALRESET_TIME = 5'b00011; + parameter integer RXOUT_DIV = 4; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [15:0] RXPHBEACON_CFG = 16'h0000; + parameter [15:0] RXPHDLY_CFG = 16'h2020; + parameter [15:0] RXPHSAMP_CFG = 16'h2100; + parameter [15:0] RXPHSLIP_CFG = 16'h9933; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [0:0] RXPI_AUTO_BW_SEL_BYPASS = 1'b0; + parameter [15:0] RXPI_CFG0 = 16'h0002; + parameter [15:0] RXPI_CFG1 = 16'b0000000000000000; + parameter [0:0] RXPI_LPM = 1'b0; + parameter [1:0] RXPI_SEL_LC = 2'b00; + parameter [1:0] RXPI_STARTCODE = 2'b00; + parameter [0:0] RXPI_VREFSEL = 1'b0; + parameter RXPMACLK_SEL = "DATA"; + parameter [4:0] RXPMARESET_TIME = 5'b00001; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXPRBS_LINKACQ_CNT = 15; + parameter [0:0] RXREFCLKDIV2_SEL = 1'b0; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [0:0] RXSYNC_MULTILANE = 1'b0; + parameter [0:0] RXSYNC_OVRD = 1'b0; + parameter [0:0] RXSYNC_SKIP_DA = 1'b0; + parameter [0:0] RX_AFE_CM_EN = 1'b0; + parameter [15:0] RX_BIAS_CFG0 = 16'h12B0; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0; + parameter integer RX_CLK25_DIV = 8; + parameter [0:0] RX_CLKMUX_EN = 1'b1; + parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000; + parameter [3:0] RX_CM_BUF_CFG = 4'b1010; + parameter [0:0] RX_CM_BUF_PD = 1'b0; + parameter integer RX_CM_SEL = 3; + parameter integer RX_CM_TRIM = 12; + parameter [7:0] RX_CTLE3_LPF = 8'b00000000; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter [2:0] RX_DEGEN_CTRL = 3'b011; + parameter integer RX_DFELPM_CFG0 = 0; + parameter [0:0] RX_DFELPM_CFG1 = 1'b1; + parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1; + parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00; + parameter integer RX_DFE_AGC_CFG1 = 4; + parameter integer RX_DFE_KL_LPM_KH_CFG0 = 1; + parameter integer RX_DFE_KL_LPM_KH_CFG1 = 4; + parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01; + parameter integer RX_DFE_KL_LPM_KL_CFG1 = 4; + parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter [0:0] RX_DIV2_MODE_B = 1'b0; + parameter [4:0] RX_DIVRESET_TIME = 5'b00001; + parameter [0:0] RX_EN_CTLE_RCAL_B = 1'b0; + parameter [0:0] RX_EN_HI_LR = 1'b1; + parameter [8:0] RX_EXT_RL_CTRL = 9'b000000000; + parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000; + parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0; + parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b00; + parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0; + parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0; + parameter integer RX_INT_DATAWIDTH = 1; + parameter [0:0] RX_PMA_POWER_SAVE = 1'b0; + parameter [15:0] RX_PMA_RSV0 = 16'h0000; + parameter real RX_PROGDIV_CFG = 0.0; + parameter [15:0] RX_PROGDIV_RATE = 16'h0001; + parameter [3:0] RX_RESLOAD_CTRL = 4'b0000; + parameter [0:0] RX_RESLOAD_OVRD = 1'b0; + parameter [2:0] RX_SAMPLE_PERIOD = 3'b101; + parameter integer RX_SIG_VALID_DLY = 11; + parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0; + parameter [3:0] RX_SUM_IREF_TUNE = 4'b1001; + parameter [3:0] RX_SUM_RESLOAD_CTRL = 4'b0000; + parameter [3:0] RX_SUM_VCMTUNE = 4'b1010; + parameter [0:0] RX_SUM_VCM_OVWR = 1'b0; + parameter [2:0] RX_SUM_VREF_TUNE = 3'b100; + parameter [1:0] RX_TUNE_AFE_OS = 2'b00; + parameter [2:0] RX_VREG_CTRL = 3'b101; + parameter [0:0] RX_VREG_PDB = 1'b1; + parameter [1:0] RX_WIDEMODE_CDR = 2'b01; + parameter [1:0] RX_WIDEMODE_CDR_GEN3 = 2'b01; + parameter [1:0] RX_WIDEMODE_CDR_GEN4 = 2'b01; + parameter RX_XCLK_SEL = "RXDES"; + parameter [0:0] RX_XMODE_SEL = 1'b0; + parameter [0:0] SAMPLE_CLK_PHASE = 1'b0; + parameter [0:0] SAS_12G_MODE = 1'b0; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter SATA_CPLL_CFG = "VCO_3000MHZ"; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter SIM_MODE = "FAST"; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_TX_EIDLE_DRIVE_LEVEL = "Z"; + parameter [0:0] SRSTMODE = 1'b0; + parameter [1:0] TAPDLY_SET_TX = 2'h0; + parameter [3:0] TEMPERATURE_PAR = 4'b0010; + parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000; + parameter [2:0] TERM_RCAL_OVRD = 3'b000; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [7:0] TST_RSV0 = 8'h00; + parameter [7:0] TST_RSV1 = 8'h00; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h0010; + parameter [15:0] TXDLY_LCFG = 16'h0030; + parameter [3:0] TXDRVBIAS_N = 4'b1010; + parameter TXFIFO_ADDR_CFG = "LOW"; + parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter TXGEARBOX_EN = "FALSE"; + parameter integer TXOUT_DIV = 4; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [15:0] TXPHDLY_CFG0 = 16'h6020; + parameter [15:0] TXPHDLY_CFG1 = 16'h0002; + parameter [15:0] TXPH_CFG = 16'h0123; + parameter [15:0] TXPH_CFG2 = 16'h0000; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [15:0] TXPI_CFG = 16'h0000; + parameter [1:0] TXPI_CFG0 = 2'b00; + parameter [1:0] TXPI_CFG1 = 2'b00; + parameter [1:0] TXPI_CFG2 = 2'b00; + parameter [0:0] TXPI_CFG3 = 1'b0; + parameter [0:0] TXPI_CFG4 = 1'b1; + parameter [2:0] TXPI_CFG5 = 3'b000; + parameter [0:0] TXPI_GRAY_SEL = 1'b0; + parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0; + parameter [0:0] TXPI_LPM = 1'b0; + parameter [0:0] TXPI_PPM = 1'b0; + parameter TXPI_PPMCLK_SEL = "TXUSRCLK2"; + parameter [7:0] TXPI_PPM_CFG = 8'b00000000; + parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000; + parameter [0:0] TXPI_VREFSEL = 1'b0; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter [0:0] TXREFCLKDIV2_SEL = 1'b0; + parameter [0:0] TXSYNC_MULTILANE = 1'b0; + parameter [0:0] TXSYNC_OVRD = 1'b0; + parameter [0:0] TXSYNC_SKIP_DA = 1'b0; + parameter integer TX_CLK25_DIV = 8; + parameter [0:0] TX_CLKMUX_EN = 1'b1; + parameter integer TX_DATA_WIDTH = 20; + parameter [15:0] TX_DCC_LOOP_RST_CFG = 16'h0000; + parameter [5:0] TX_DEEMPH0 = 6'b000000; + parameter [5:0] TX_DEEMPH1 = 6'b000000; + parameter [5:0] TX_DEEMPH2 = 6'b000000; + parameter [5:0] TX_DEEMPH3 = 6'b000000; + parameter [4:0] TX_DIVRESET_TIME = 5'b00001; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter integer TX_DRVMUX_CTRL = 2; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0; + parameter [0:0] TX_FIFO_BYP_EN = 1'b0; + parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0; + parameter integer TX_INT_DATAWIDTH = 1; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [15:0] TX_PHICAL_CFG0 = 16'h0000; + parameter [15:0] TX_PHICAL_CFG1 = 16'h003F; + parameter [15:0] TX_PHICAL_CFG2 = 16'h0000; + parameter integer TX_PI_BIASSET = 0; + parameter [1:0] TX_PI_IBIAS_MID = 2'b00; + parameter [0:0] TX_PMADATA_OPT = 1'b0; + parameter [0:0] TX_PMA_POWER_SAVE = 1'b0; + parameter [15:0] TX_PMA_RSV0 = 16'h0008; + parameter integer TX_PREDRV_CTRL = 2; + parameter TX_PROGCLK_SEL = "POSTPI"; + parameter real TX_PROGDIV_CFG = 0.0; + parameter [15:0] TX_PROGDIV_RATE = 16'h0001; + parameter [0:0] TX_QPI_STATUS_EN = 1'b0; + parameter [13:0] TX_RXDETECT_CFG = 14'h0032; + parameter integer TX_RXDETECT_REF = 3; + parameter [2:0] TX_SAMPLE_PERIOD = 3'b101; + parameter [0:0] TX_SARC_LPBK_ENB = 1'b0; + parameter [1:0] TX_SW_MEAS = 2'b00; + parameter [2:0] TX_VREG_CTRL = 3'b000; + parameter [0:0] TX_VREG_PDB = 1'b0; + parameter [1:0] TX_VREG_VREFSEL = 2'b00; + parameter TX_XCLK_SEL = "TXOUT"; + parameter [0:0] USB_BOTH_BURST_IDLE = 1'b0; + parameter [6:0] USB_BURSTMAX_U3WAKE = 7'b1111111; + parameter [6:0] USB_BURSTMIN_U3WAKE = 7'b1100011; + parameter [0:0] USB_CLK_COR_EQ_EN = 1'b0; + parameter [0:0] USB_EXT_CNTL = 1'b1; + parameter [9:0] USB_IDLEMAX_POLLING = 10'b1010111011; + parameter [9:0] USB_IDLEMIN_POLLING = 10'b0100101011; + parameter [8:0] USB_LFPSPING_BURST = 9'b000000101; + parameter [8:0] USB_LFPSPOLLING_BURST = 9'b000110001; + parameter [8:0] USB_LFPSPOLLING_IDLE_MS = 9'b000000100; + parameter [8:0] USB_LFPSU1EXIT_BURST = 9'b000011101; + parameter [8:0] USB_LFPSU2LPEXIT_BURST_MS = 9'b001100011; + parameter [8:0] USB_LFPSU3WAKE_BURST_MS = 9'b111110011; + parameter [3:0] USB_LFPS_TPERIOD = 4'b0011; + parameter [0:0] USB_LFPS_TPERIOD_ACCURATE = 1'b1; + parameter [0:0] USB_MODE = 1'b0; + parameter [0:0] USB_PCIE_ERR_REP_DIS = 1'b0; + parameter integer USB_PING_SATA_MAX_INIT = 21; + parameter integer USB_PING_SATA_MIN_INIT = 12; + parameter integer USB_POLL_SATA_MAX_BURST = 8; + parameter integer USB_POLL_SATA_MIN_BURST = 4; + parameter [0:0] USB_RAW_ELEC = 1'b0; + parameter [0:0] USB_RXIDLE_P0_CTRL = 1'b1; + parameter [0:0] USB_TXIDLE_TUNE_ENABLE = 1'b1; + parameter integer USB_U1_SATA_MAX_WAKE = 7; + parameter integer USB_U1_SATA_MIN_WAKE = 4; + parameter integer USB_U2_SAS_MAX_COM = 64; + parameter integer USB_U2_SAS_MIN_COM = 36; + parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0; + parameter [0:0] Y_ALL_MODE = 1'b0; + output BUFGTCE; + output [2:0] BUFGTCEMASK; + output [8:0] BUFGTDIV; + output BUFGTRESET; + output [2:0] BUFGTRSTMASK; + output CPLLFBCLKLOST; + output CPLLLOCK; + output CPLLREFCLKLOST; + output [15:0] DMONITOROUT; + output DMONITOROUTCLK; + output [15:0] DRPDO; + output DRPRDY; + output EYESCANDATAERROR; + output GTHTXN; + output GTHTXP; + output GTPOWERGOOD; + output GTREFCLKMONITOR; + output PCIERATEGEN3; + output PCIERATEIDLE; + output [1:0] PCIERATEQPLLPD; + output [1:0] PCIERATEQPLLRESET; + output PCIESYNCTXSYNCDONE; + output PCIEUSERGEN3RDY; + output PCIEUSERPHYSTATUSRST; + output PCIEUSERRATESTART; + output [15:0] PCSRSVDOUT; + output PHYSTATUS; + output [15:0] PINRSRVDAS; + output POWERPRESENT; + output RESETEXCEPTION; + output [2:0] RXBUFSTATUS; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCDRPHDONE; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output [4:0] RXCHBONDO; + output RXCKCALDONE; + output [1:0] RXCLKCORCNT; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output [15:0] RXCTRL0; + output [15:0] RXCTRL1; + output [7:0] RXCTRL2; + output [7:0] RXCTRL3; + output [127:0] RXDATA; + output [7:0] RXDATAEXTENDRSVD; + output [1:0] RXDATAVALID; + output RXDLYSRESETDONE; + output RXELECIDLE; + output [5:0] RXHEADER; + output [1:0] RXHEADERVALID; + output RXLFPSTRESETDET; + output RXLFPSU2LPEXITDET; + output RXLFPSU3WAKEDET; + output [7:0] RXMONITOROUT; + output RXOSINTDONE; + output RXOSINTSTARTED; + output RXOSINTSTROBEDONE; + output RXOSINTSTROBESTARTED; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPHALIGNERR; + output RXPMARESETDONE; + output RXPRBSERR; + output RXPRBSLOCKED; + output RXPRGDIVRESETDONE; + output RXQPISENN; + output RXQPISENP; + output RXRATEDONE; + output RXRECCLKOUT; + output RXRESETDONE; + output RXSLIDERDY; + output RXSLIPDONE; + output RXSLIPOUTCLKRDY; + output RXSLIPPMARDY; + output [1:0] RXSTARTOFSEQ; + output [2:0] RXSTATUS; + output RXSYNCDONE; + output RXSYNCOUT; + output RXVALID; + output [1:0] TXBUFSTATUS; + output TXCOMFINISH; + output TXDCCDONE; + output TXDLYSRESETDONE; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXPMARESETDONE; + output TXPRGDIVRESETDONE; + output TXQPISENN; + output TXQPISENP; + output TXRATEDONE; + output TXRESETDONE; + output TXSYNCDONE; + output TXSYNCOUT; + input CDRSTEPDIR; + input CDRSTEPSQ; + input CDRSTEPSX; + input CFGRESET; + input CLKRSVD0; + input CLKRSVD1; + input CPLLFREQLOCK; + input CPLLLOCKDETCLK; + input CPLLLOCKEN; + input CPLLPD; + input [2:0] CPLLREFCLKSEL; + input CPLLRESET; + input DMONFIFORESET; + input DMONITORCLK; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPRST; + input DRPWE; + input EYESCANRESET; + input EYESCANTRIGGER; + input FREQOS; + input GTGREFCLK; + input GTHRXN; + input GTHRXP; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input [15:0] GTRSVD; + input GTRXRESET; + input GTRXRESETSEL; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + input GTTXRESET; + input GTTXRESETSEL; + input INCPCTRL; + input [2:0] LOOPBACK; + input PCIEEQRXEQADAPTDONE; + input PCIERSTIDLE; + input PCIERSTTXSYNCSTART; + input PCIEUSERRATEDONE; + input [15:0] PCSRSVDIN; + input QPLL0CLK; + input QPLL0FREQLOCK; + input QPLL0REFCLK; + input QPLL1CLK; + input QPLL1FREQLOCK; + input QPLL1REFCLK; + input RESETOVRD; + input RX8B10BEN; + input RXAFECFOKEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCHBONDEN; + input [4:0] RXCHBONDI; + input [2:0] RXCHBONDLEVEL; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCKCALRESET; + input [6:0] RXCKCALSTART; + input RXCOMMADETEN; + input [1:0] RXDFEAGCCTRL; + input RXDFEAGCHOLD; + input RXDFEAGCOVRDEN; + input [3:0] RXDFECFOKFCNUM; + input RXDFECFOKFEN; + input RXDFECFOKFPULSE; + input RXDFECFOKHOLD; + input RXDFECFOKOVREN; + input RXDFEKHHOLD; + input RXDFEKHOVRDEN; + input RXDFELFHOLD; + input RXDFELFOVRDEN; + input RXDFELPMRESET; + input RXDFETAP10HOLD; + input RXDFETAP10OVRDEN; + input RXDFETAP11HOLD; + input RXDFETAP11OVRDEN; + input RXDFETAP12HOLD; + input RXDFETAP12OVRDEN; + input RXDFETAP13HOLD; + input RXDFETAP13OVRDEN; + input RXDFETAP14HOLD; + input RXDFETAP14OVRDEN; + input RXDFETAP15HOLD; + input RXDFETAP15OVRDEN; + input RXDFETAP2HOLD; + input RXDFETAP2OVRDEN; + input RXDFETAP3HOLD; + input RXDFETAP3OVRDEN; + input RXDFETAP4HOLD; + input RXDFETAP4OVRDEN; + input RXDFETAP5HOLD; + input RXDFETAP5OVRDEN; + input RXDFETAP6HOLD; + input RXDFETAP6OVRDEN; + input RXDFETAP7HOLD; + input RXDFETAP7OVRDEN; + input RXDFETAP8HOLD; + input RXDFETAP8OVRDEN; + input RXDFETAP9HOLD; + input RXDFETAP9OVRDEN; + input RXDFEUTHOLD; + input RXDFEUTOVRDEN; + input RXDFEVPHOLD; + input RXDFEVPOVRDEN; + input RXDFEXYDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input [1:0] RXELECIDLEMODE; + input RXEQTRAINING; + input RXGEARBOXSLIP; + input RXLATCLK; + input RXLPMEN; + input RXLPMGCHOLD; + input RXLPMGCOVRDEN; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFKLOVRDEN; + input RXLPMOSHOLD; + input RXLPMOSOVRDEN; + input RXMCOMMAALIGNEN; + input [1:0] RXMONITORSEL; + input RXOOBRESET; + input RXOSCALRESET; + input RXOSHOLD; + input RXOSOVRDEN; + input [2:0] RXOUTCLKSEL; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input [1:0] RXPD; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input RXPHOVRDEN; + input [1:0] RXPLLCLKSEL; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input [3:0] RXPRBSSEL; + input RXPROGDIVRESET; + input RXQPIEN; + input [2:0] RXRATE; + input RXRATEMODE; + input RXSLIDE; + input RXSLIPOUTCLK; + input RXSLIPPMA; + input RXSYNCALLIN; + input RXSYNCIN; + input RXSYNCMODE; + input [1:0] RXSYSCLKSEL; + input RXTERMINATION; + input RXUSERRDY; + input RXUSRCLK; + input RXUSRCLK2; + input SIGVALIDCLK; + input [19:0] TSTIN; + input [7:0] TX8B10BBYPASS; + input TX8B10BEN; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input [15:0] TXCTRL0; + input [15:0] TXCTRL1; + input [7:0] TXCTRL2; + input [127:0] TXDATA; + input [7:0] TXDATAEXTENDRSVD; + input TXDCCFORCESTART; + input TXDCCRESET; + input [1:0] TXDEEMPH; + input TXDETECTRX; + input [4:0] TXDIFFCTRL; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input [5:0] TXHEADER; + input TXINHIBIT; + input TXLATCLK; + input TXLFPSTRESET; + input TXLFPSU2LPEXIT; + input TXLFPSU3WAKE; + input [6:0] TXMAINCURSOR; + input [2:0] TXMARGIN; + input TXMUXDCDEXHOLD; + input TXMUXDCDORWREN; + input TXONESZEROS; + input [2:0] TXOUTCLKSEL; + input TXPCSRESET; + input [1:0] TXPD; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPIPPMEN; + input TXPIPPMOVRDEN; + input TXPIPPMPD; + input TXPIPPMSEL; + input [4:0] TXPIPPMSTEPSIZE; + input TXPISOPD; + input [1:0] TXPLLCLKSEL; + input TXPMARESET; + input TXPOLARITY; + input [4:0] TXPOSTCURSOR; + input TXPRBSFORCEERR; + input [3:0] TXPRBSSEL; + input [4:0] TXPRECURSOR; + input TXPROGDIVRESET; + input TXQPIBIASEN; + input TXQPIWEAKPUP; + input [2:0] TXRATE; + input TXRATEMODE; + input [6:0] TXSEQUENCE; + input TXSWING; + input TXSYNCALLIN; + input TXSYNCIN; + input TXSYNCMODE; + input [1:0] TXSYSCLKSEL; + input TXUSERRDY; + input TXUSRCLK; + input TXUSRCLK2; +endmodule + +module GTHE4_COMMON (...); + parameter [0:0] AEN_QPLL0_FBDIV = 1'b1; + parameter [0:0] AEN_QPLL1_FBDIV = 1'b1; + parameter [0:0] AEN_SDM0TOGGLE = 1'b0; + parameter [0:0] AEN_SDM1TOGGLE = 1'b0; + parameter [0:0] A_SDM0TOGGLE = 1'b0; + parameter [8:0] A_SDM1DATA_HIGH = 9'b000000000; + parameter [15:0] A_SDM1DATA_LOW = 16'b0000000000000000; + parameter [0:0] A_SDM1TOGGLE = 1'b0; + parameter [15:0] BIAS_CFG0 = 16'h0000; + parameter [15:0] BIAS_CFG1 = 16'h0000; + parameter [15:0] BIAS_CFG2 = 16'h0000; + parameter [15:0] BIAS_CFG3 = 16'h0000; + parameter [15:0] BIAS_CFG4 = 16'h0000; + parameter [15:0] BIAS_CFG_RSVD = 16'h0000; + parameter [15:0] COMMON_CFG0 = 16'h0000; + parameter [15:0] COMMON_CFG1 = 16'h0000; + parameter [15:0] POR_CFG = 16'h0000; + parameter [15:0] PPF0_CFG = 16'h0F00; + parameter [15:0] PPF1_CFG = 16'h0F00; + parameter QPLL0CLKOUT_RATE = "FULL"; + parameter [15:0] QPLL0_CFG0 = 16'h391C; + parameter [15:0] QPLL0_CFG1 = 16'h0000; + parameter [15:0] QPLL0_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL0_CFG2 = 16'h0F80; + parameter [15:0] QPLL0_CFG2_G3 = 16'h0F80; + parameter [15:0] QPLL0_CFG3 = 16'h0120; + parameter [15:0] QPLL0_CFG4 = 16'h0002; + parameter [9:0] QPLL0_CP = 10'b0000011111; + parameter [9:0] QPLL0_CP_G3 = 10'b0000011111; + parameter integer QPLL0_FBDIV = 66; + parameter integer QPLL0_FBDIV_G3 = 80; + parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL0_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL0_LPF = 10'b1011111111; + parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111; + parameter [0:0] QPLL0_PCI_EN = 1'b0; + parameter [0:0] QPLL0_RATE_SW_USE_DRP = 1'b0; + parameter integer QPLL0_REFCLK_DIV = 1; + parameter [15:0] QPLL0_SDM_CFG0 = 16'h0040; + parameter [15:0] QPLL0_SDM_CFG1 = 16'h0000; + parameter [15:0] QPLL0_SDM_CFG2 = 16'h0000; + parameter QPLL1CLKOUT_RATE = "FULL"; + parameter [15:0] QPLL1_CFG0 = 16'h691C; + parameter [15:0] QPLL1_CFG1 = 16'h0020; + parameter [15:0] QPLL1_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL1_CFG2 = 16'h0F80; + parameter [15:0] QPLL1_CFG2_G3 = 16'h0F80; + parameter [15:0] QPLL1_CFG3 = 16'h0120; + parameter [15:0] QPLL1_CFG4 = 16'h0002; + parameter [9:0] QPLL1_CP = 10'b0000011111; + parameter [9:0] QPLL1_CP_G3 = 10'b0000011111; + parameter integer QPLL1_FBDIV = 66; + parameter integer QPLL1_FBDIV_G3 = 80; + parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL1_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL1_LPF = 10'b1011111111; + parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111; + parameter [0:0] QPLL1_PCI_EN = 1'b0; + parameter [0:0] QPLL1_RATE_SW_USE_DRP = 1'b0; + parameter integer QPLL1_REFCLK_DIV = 1; + parameter [15:0] QPLL1_SDM_CFG0 = 16'h0000; + parameter [15:0] QPLL1_SDM_CFG1 = 16'h0000; + parameter [15:0] QPLL1_SDM_CFG2 = 16'h0000; + parameter [15:0] RSVD_ATTR0 = 16'h0000; + parameter [15:0] RSVD_ATTR1 = 16'h0000; + parameter [15:0] RSVD_ATTR2 = 16'h0000; + parameter [15:0] RSVD_ATTR3 = 16'h0000; + parameter [1:0] RXRECCLKOUT0_SEL = 2'b00; + parameter [1:0] RXRECCLKOUT1_SEL = 2'b00; + parameter [0:0] SARC_ENB = 1'b0; + parameter [0:0] SARC_SEL = 1'b0; + parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM0INITSEED0_1 = 9'b000000000; + parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM1INITSEED0_1 = 9'b000000000; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter SIM_MODE = "FAST"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + output [15:0] DRPDO; + output DRPRDY; + output [7:0] PMARSVDOUT0; + output [7:0] PMARSVDOUT1; + output QPLL0FBCLKLOST; + output QPLL0LOCK; + output QPLL0OUTCLK; + output QPLL0OUTREFCLK; + output QPLL0REFCLKLOST; + output QPLL1FBCLKLOST; + output QPLL1LOCK; + output QPLL1OUTCLK; + output QPLL1OUTREFCLK; + output QPLL1REFCLKLOST; + output [7:0] QPLLDMONITOR0; + output [7:0] QPLLDMONITOR1; + output REFCLKOUTMONITOR0; + output REFCLKOUTMONITOR1; + output [1:0] RXRECCLK0SEL; + output [1:0] RXRECCLK1SEL; + output [3:0] SDM0FINALOUT; + output [14:0] SDM0TESTDATA; + output [3:0] SDM1FINALOUT; + output [14:0] SDM1TESTDATA; + output [9:0] TCONGPO; + output TCONRSVDOUT0; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input [4:0] BGRCALOVRD; + input BGRCALOVRDENB; + input [15:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input GTGREFCLK0; + input GTGREFCLK1; + input GTNORTHREFCLK00; + input GTNORTHREFCLK01; + input GTNORTHREFCLK10; + input GTNORTHREFCLK11; + input GTREFCLK00; + input GTREFCLK01; + input GTREFCLK10; + input GTREFCLK11; + input GTSOUTHREFCLK00; + input GTSOUTHREFCLK01; + input GTSOUTHREFCLK10; + input GTSOUTHREFCLK11; + input [2:0] PCIERATEQPLL0; + input [2:0] PCIERATEQPLL1; + input [7:0] PMARSVD0; + input [7:0] PMARSVD1; + input QPLL0CLKRSVD0; + input QPLL0CLKRSVD1; + input [7:0] QPLL0FBDIV; + input QPLL0LOCKDETCLK; + input QPLL0LOCKEN; + input QPLL0PD; + input [2:0] QPLL0REFCLKSEL; + input QPLL0RESET; + input QPLL1CLKRSVD0; + input QPLL1CLKRSVD1; + input [7:0] QPLL1FBDIV; + input QPLL1LOCKDETCLK; + input QPLL1LOCKEN; + input QPLL1PD; + input [2:0] QPLL1REFCLKSEL; + input QPLL1RESET; + input [7:0] QPLLRSVD1; + input [4:0] QPLLRSVD2; + input [4:0] QPLLRSVD3; + input [7:0] QPLLRSVD4; + input RCALENB; + input [24:0] SDM0DATA; + input SDM0RESET; + input SDM0TOGGLE; + input [1:0] SDM0WIDTH; + input [24:0] SDM1DATA; + input SDM1RESET; + input SDM1TOGGLE; + input [1:0] SDM1WIDTH; + input [9:0] TCONGPI; + input TCONPOWERUP; + input [1:0] TCONRESET; + input [1:0] TCONRSVDIN1; +endmodule + +module GTYE4_CHANNEL (...); + parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0; + parameter [0:0] ACJTAG_MODE = 1'b0; + parameter [0:0] ACJTAG_RESET = 1'b0; + parameter [15:0] ADAPT_CFG0 = 16'h9200; + parameter [15:0] ADAPT_CFG1 = 16'h801C; + parameter [15:0] ADAPT_CFG2 = 16'h0000; + parameter ALIGN_COMMA_DOUBLE = "FALSE"; + parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111; + parameter integer ALIGN_COMMA_WORD = 1; + parameter ALIGN_MCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011; + parameter ALIGN_PCOMMA_DET = "TRUE"; + parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100; + parameter [0:0] A_RXOSCALRESET = 1'b0; + parameter [0:0] A_RXPROGDIVRESET = 1'b0; + parameter [0:0] A_RXTERMINATION = 1'b1; + parameter [4:0] A_TXDIFFCTRL = 5'b01100; + parameter [0:0] A_TXPROGDIVRESET = 1'b0; + parameter CBCC_DATA_SOURCE_SEL = "DECODED"; + parameter [0:0] CDR_SWAP_MODE_EN = 1'b0; + parameter [0:0] CFOK_PWRSVE_EN = 1'b1; + parameter CHAN_BOND_KEEP_ALIGN = "FALSE"; + parameter integer CHAN_BOND_MAX_SKEW = 7; + parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100; + parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111; + parameter CHAN_BOND_SEQ_2_USE = "FALSE"; + parameter integer CHAN_BOND_SEQ_LEN = 2; + parameter [15:0] CH_HSPMUX = 16'h2424; + parameter [15:0] CKCAL1_CFG_0 = 16'b1100000011000000; + parameter [15:0] CKCAL1_CFG_1 = 16'b0101000011000000; + parameter [15:0] CKCAL1_CFG_2 = 16'b0000000000000000; + parameter [15:0] CKCAL1_CFG_3 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_0 = 16'b1100000011000000; + parameter [15:0] CKCAL2_CFG_1 = 16'b1000000011000000; + parameter [15:0] CKCAL2_CFG_2 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_3 = 16'b0000000000000000; + parameter [15:0] CKCAL2_CFG_4 = 16'b0000000000000000; + parameter CLK_CORRECT_USE = "TRUE"; + parameter CLK_COR_KEEP_IDLE = "FALSE"; + parameter integer CLK_COR_MAX_LAT = 20; + parameter integer CLK_COR_MIN_LAT = 18; + parameter CLK_COR_PRECEDENCE = "TRUE"; + parameter integer CLK_COR_REPEAT_WAIT = 0; + parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100; + parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000; + parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000; + parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111; + parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000; + parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000; + parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111; + parameter CLK_COR_SEQ_2_USE = "FALSE"; + parameter integer CLK_COR_SEQ_LEN = 2; + parameter [15:0] CPLL_CFG0 = 16'h01FA; + parameter [15:0] CPLL_CFG1 = 16'h24A9; + parameter [15:0] CPLL_CFG2 = 16'h6807; + parameter [15:0] CPLL_CFG3 = 16'h0000; + parameter integer CPLL_FBDIV = 4; + parameter integer CPLL_FBDIV_45 = 4; + parameter [15:0] CPLL_INIT_CFG0 = 16'h001E; + parameter [15:0] CPLL_LOCK_CFG = 16'h01E8; + parameter integer CPLL_REFCLK_DIV = 1; + parameter [2:0] CTLE3_OCAP_EXT_CTRL = 3'b000; + parameter [0:0] CTLE3_OCAP_EXT_EN = 1'b0; + parameter [1:0] DDI_CTRL = 2'b00; + parameter integer DDI_REALIGN_WAIT = 15; + parameter DEC_MCOMMA_DETECT = "TRUE"; + parameter DEC_PCOMMA_DETECT = "TRUE"; + parameter DEC_VALID_COMMA_ONLY = "TRUE"; + parameter [0:0] DELAY_ELEC = 1'b0; + parameter [9:0] DMONITOR_CFG0 = 10'h000; + parameter [7:0] DMONITOR_CFG1 = 8'h00; + parameter [0:0] ES_CLK_PHASE_SEL = 1'b0; + parameter [5:0] ES_CONTROL = 6'b000000; + parameter ES_ERRDET_EN = "FALSE"; + parameter ES_EYE_SCAN_EN = "FALSE"; + parameter [11:0] ES_HORZ_OFFSET = 12'h800; + parameter [4:0] ES_PRESCALE = 5'b00000; + parameter [15:0] ES_QUALIFIER0 = 16'h0000; + parameter [15:0] ES_QUALIFIER1 = 16'h0000; + parameter [15:0] ES_QUALIFIER2 = 16'h0000; + parameter [15:0] ES_QUALIFIER3 = 16'h0000; + parameter [15:0] ES_QUALIFIER4 = 16'h0000; + parameter [15:0] ES_QUALIFIER5 = 16'h0000; + parameter [15:0] ES_QUALIFIER6 = 16'h0000; + parameter [15:0] ES_QUALIFIER7 = 16'h0000; + parameter [15:0] ES_QUALIFIER8 = 16'h0000; + parameter [15:0] ES_QUALIFIER9 = 16'h0000; + parameter [15:0] ES_QUAL_MASK0 = 16'h0000; + parameter [15:0] ES_QUAL_MASK1 = 16'h0000; + parameter [15:0] ES_QUAL_MASK2 = 16'h0000; + parameter [15:0] ES_QUAL_MASK3 = 16'h0000; + parameter [15:0] ES_QUAL_MASK4 = 16'h0000; + parameter [15:0] ES_QUAL_MASK5 = 16'h0000; + parameter [15:0] ES_QUAL_MASK6 = 16'h0000; + parameter [15:0] ES_QUAL_MASK7 = 16'h0000; + parameter [15:0] ES_QUAL_MASK8 = 16'h0000; + parameter [15:0] ES_QUAL_MASK9 = 16'h0000; + parameter [15:0] ES_SDATA_MASK0 = 16'h0000; + parameter [15:0] ES_SDATA_MASK1 = 16'h0000; + parameter [15:0] ES_SDATA_MASK2 = 16'h0000; + parameter [15:0] ES_SDATA_MASK3 = 16'h0000; + parameter [15:0] ES_SDATA_MASK4 = 16'h0000; + parameter [15:0] ES_SDATA_MASK5 = 16'h0000; + parameter [15:0] ES_SDATA_MASK6 = 16'h0000; + parameter [15:0] ES_SDATA_MASK7 = 16'h0000; + parameter [15:0] ES_SDATA_MASK8 = 16'h0000; + parameter [15:0] ES_SDATA_MASK9 = 16'h0000; + parameter integer EYESCAN_VP_RANGE = 0; + parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0; + parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111; + parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111; + parameter FTS_LANE_DESKEW_EN = "FALSE"; + parameter [4:0] GEARBOX_MODE = 5'b00000; + parameter [0:0] ISCAN_CK_PH_SEL2 = 1'b0; + parameter [0:0] LOCAL_MASTER = 1'b0; + parameter integer LPBK_BIAS_CTRL = 4; + parameter [0:0] LPBK_EN_RCAL_B = 1'b0; + parameter [3:0] LPBK_EXT_RCAL = 4'b0000; + parameter integer LPBK_IND_CTRL0 = 5; + parameter integer LPBK_IND_CTRL1 = 5; + parameter integer LPBK_IND_CTRL2 = 5; + parameter integer LPBK_RG_CTRL = 2; + parameter [1:0] OOBDIVCTL = 2'b00; + parameter [0:0] OOB_PWRUP = 1'b0; + parameter PCI3_AUTO_REALIGN = "FRST_SMPL"; + parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1; + parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00; + parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0; + parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000; + parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000; + parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000; + parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0; + parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0; + parameter [4:0] PCIE3_CLK_COR_EMPTY_THRSH = 5'b00000; + parameter [5:0] PCIE3_CLK_COR_FULL_THRSH = 6'b010000; + parameter [4:0] PCIE3_CLK_COR_MAX_LAT = 5'b01000; + parameter [4:0] PCIE3_CLK_COR_MIN_LAT = 5'b00100; + parameter [5:0] PCIE3_CLK_COR_THRSH_TIMER = 6'b001000; + parameter PCIE_64B_DYN_CLKSW_DIS = "FALSE"; + parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000; + parameter PCIE_GEN4_64BIT_INT_EN = "FALSE"; + parameter [1:0] PCIE_PLL_SEL_MODE_GEN12 = 2'h0; + parameter [1:0] PCIE_PLL_SEL_MODE_GEN3 = 2'h0; + parameter [1:0] PCIE_PLL_SEL_MODE_GEN4 = 2'h0; + parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_RXPMA_CFG = 16'h0000; + parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000; + parameter [15:0] PCIE_TXPMA_CFG = 16'h0000; + parameter PCS_PCIE_EN = "FALSE"; + parameter [15:0] PCS_RSVD0 = 16'h0000; + parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C; + parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19; + parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64; + parameter integer PREIQ_FREQ_BST = 0; + parameter [0:0] RATE_SW_USE_DRP = 1'b0; + parameter [0:0] RCLK_SIPO_DLY_ENB = 1'b0; + parameter [0:0] RCLK_SIPO_INV_EN = 1'b0; + parameter [2:0] RTX_BUF_CML_CTRL = 3'b010; + parameter [1:0] RTX_BUF_TERM_CTRL = 2'b00; + parameter [4:0] RXBUFRESET_TIME = 5'b00001; + parameter RXBUF_ADDR_MODE = "FULL"; + parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000; + parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000; + parameter RXBUF_EN = "TRUE"; + parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE"; + parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE"; + parameter RXBUF_RESET_ON_EIDLE = "FALSE"; + parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE"; + parameter integer RXBUF_THRESH_OVFLW = 0; + parameter RXBUF_THRESH_OVRD = "FALSE"; + parameter integer RXBUF_THRESH_UNDFLW = 4; + parameter [4:0] RXCDRFREQRESET_TIME = 5'b10000; + parameter [4:0] RXCDRPHRESET_TIME = 5'b00001; + parameter [15:0] RXCDR_CFG0 = 16'h0003; + parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0003; + parameter [15:0] RXCDR_CFG1 = 16'h0000; + parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0000; + parameter [15:0] RXCDR_CFG2 = 16'h0164; + parameter [9:0] RXCDR_CFG2_GEN2 = 10'h164; + parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0034; + parameter [15:0] RXCDR_CFG2_GEN4 = 16'h0034; + parameter [15:0] RXCDR_CFG3 = 16'h0024; + parameter [5:0] RXCDR_CFG3_GEN2 = 6'h24; + parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0024; + parameter [15:0] RXCDR_CFG3_GEN4 = 16'h0024; + parameter [15:0] RXCDR_CFG4 = 16'h5CF6; + parameter [15:0] RXCDR_CFG4_GEN3 = 16'h5CF6; + parameter [15:0] RXCDR_CFG5 = 16'hB46B; + parameter [15:0] RXCDR_CFG5_GEN3 = 16'h146B; + parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0; + parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0; + parameter [15:0] RXCDR_LOCK_CFG0 = 16'h0040; + parameter [15:0] RXCDR_LOCK_CFG1 = 16'h8000; + parameter [15:0] RXCDR_LOCK_CFG2 = 16'h0000; + parameter [15:0] RXCDR_LOCK_CFG3 = 16'h0000; + parameter [15:0] RXCDR_LOCK_CFG4 = 16'h0000; + parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0; + parameter [15:0] RXCFOK_CFG0 = 16'h0000; + parameter [15:0] RXCFOK_CFG1 = 16'h0002; + parameter [15:0] RXCFOK_CFG2 = 16'h002D; + parameter [15:0] RXCKCAL1_IQ_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL1_I_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL1_Q_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_DX_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_D_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_S_LOOP_RST_CFG = 16'h0000; + parameter [15:0] RXCKCAL2_X_LOOP_RST_CFG = 16'h0000; + parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111; + parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000; + parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0022; + parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0100; + parameter [15:0] RXDFE_CFG0 = 16'h4000; + parameter [15:0] RXDFE_CFG1 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG1 = 16'h0000; + parameter [15:0] RXDFE_GC_CFG2 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H2_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H3_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H3_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H4_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H4_CFG1 = 16'h0003; + parameter [15:0] RXDFE_H5_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H5_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H6_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H6_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H7_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H7_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H8_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H8_CFG1 = 16'h0002; + parameter [15:0] RXDFE_H9_CFG0 = 16'h0000; + parameter [15:0] RXDFE_H9_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HA_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HA_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HB_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HB_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HC_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HC_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HD_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HD_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HE_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HE_CFG1 = 16'h0002; + parameter [15:0] RXDFE_HF_CFG0 = 16'h0000; + parameter [15:0] RXDFE_HF_CFG1 = 16'h0002; + parameter [15:0] RXDFE_KH_CFG0 = 16'h0000; + parameter [15:0] RXDFE_KH_CFG1 = 16'h0000; + parameter [15:0] RXDFE_KH_CFG2 = 16'h0000; + parameter [15:0] RXDFE_KH_CFG3 = 16'h2000; + parameter [15:0] RXDFE_OS_CFG0 = 16'h0000; + parameter [15:0] RXDFE_OS_CFG1 = 16'h0000; + parameter [15:0] RXDFE_UT_CFG0 = 16'h0000; + parameter [15:0] RXDFE_UT_CFG1 = 16'h0002; + parameter [15:0] RXDFE_UT_CFG2 = 16'h0000; + parameter [15:0] RXDFE_VP_CFG0 = 16'h0000; + parameter [15:0] RXDFE_VP_CFG1 = 16'h0022; + parameter [15:0] RXDLY_CFG = 16'h0010; + parameter [15:0] RXDLY_LCFG = 16'h0030; + parameter RXELECIDLE_CFG = "SIGCFG_4"; + parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter RXGEARBOX_EN = "FALSE"; + parameter [4:0] RXISCANRESET_TIME = 5'b00001; + parameter [15:0] RXLPM_CFG = 16'h0000; + parameter [15:0] RXLPM_GC_CFG = 16'h1000; + parameter [15:0] RXLPM_KH_CFG0 = 16'h0000; + parameter [15:0] RXLPM_KH_CFG1 = 16'h0002; + parameter [15:0] RXLPM_OS_CFG0 = 16'h0000; + parameter [15:0] RXLPM_OS_CFG1 = 16'h0000; + parameter [8:0] RXOOB_CFG = 9'b000110000; + parameter RXOOB_CLK_CFG = "PMA"; + parameter [4:0] RXOSCALRESET_TIME = 5'b00011; + parameter integer RXOUT_DIV = 4; + parameter [4:0] RXPCSRESET_TIME = 5'b00001; + parameter [15:0] RXPHBEACON_CFG = 16'h0000; + parameter [15:0] RXPHDLY_CFG = 16'h2020; + parameter [15:0] RXPHSAMP_CFG = 16'h2100; + parameter [15:0] RXPHSLIP_CFG = 16'h9933; + parameter [4:0] RXPH_MONITOR_SEL = 5'b00000; + parameter [15:0] RXPI_CFG0 = 16'h0102; + parameter [15:0] RXPI_CFG1 = 16'b0000000001010100; + parameter RXPMACLK_SEL = "DATA"; + parameter [4:0] RXPMARESET_TIME = 5'b00001; + parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0; + parameter integer RXPRBS_LINKACQ_CNT = 15; + parameter [0:0] RXREFCLKDIV2_SEL = 1'b0; + parameter integer RXSLIDE_AUTO_WAIT = 7; + parameter RXSLIDE_MODE = "OFF"; + parameter [0:0] RXSYNC_MULTILANE = 1'b0; + parameter [0:0] RXSYNC_OVRD = 1'b0; + parameter [0:0] RXSYNC_SKIP_DA = 1'b0; + parameter [0:0] RX_AFE_CM_EN = 1'b0; + parameter [15:0] RX_BIAS_CFG0 = 16'h12B0; + parameter [5:0] RX_BUFFER_CFG = 6'b000000; + parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0; + parameter integer RX_CLK25_DIV = 8; + parameter [0:0] RX_CLKMUX_EN = 1'b1; + parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000; + parameter [3:0] RX_CM_BUF_CFG = 4'b1010; + parameter [0:0] RX_CM_BUF_PD = 1'b0; + parameter integer RX_CM_SEL = 2; + parameter integer RX_CM_TRIM = 12; + parameter [0:0] RX_CTLE_PWR_SAVING = 1'b0; + parameter [3:0] RX_CTLE_RES_CTRL = 4'b0000; + parameter integer RX_DATA_WIDTH = 20; + parameter [5:0] RX_DDI_SEL = 6'b000000; + parameter RX_DEFER_RESET_BUF_EN = "TRUE"; + parameter [2:0] RX_DEGEN_CTRL = 3'b100; + parameter integer RX_DFELPM_CFG0 = 10; + parameter [0:0] RX_DFELPM_CFG1 = 1'b1; + parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1; + parameter integer RX_DFE_AGC_CFG1 = 4; + parameter integer RX_DFE_KL_LPM_KH_CFG0 = 1; + parameter integer RX_DFE_KL_LPM_KH_CFG1 = 2; + parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01; + parameter integer RX_DFE_KL_LPM_KL_CFG1 = 4; + parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0; + parameter RX_DISPERR_SEQ_MATCH = "TRUE"; + parameter [4:0] RX_DIVRESET_TIME = 5'b00001; + parameter [0:0] RX_EN_CTLE_RCAL_B = 1'b0; + parameter integer RX_EN_SUM_RCAL_B = 0; + parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000; + parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0; + parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b10; + parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0; + parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0; + parameter [0:0] RX_I2V_FILTER_EN = 1'b1; + parameter integer RX_INT_DATAWIDTH = 1; + parameter [0:0] RX_PMA_POWER_SAVE = 1'b0; + parameter [15:0] RX_PMA_RSV0 = 16'h002F; + parameter real RX_PROGDIV_CFG = 0.0; + parameter [15:0] RX_PROGDIV_RATE = 16'h0001; + parameter [3:0] RX_RESLOAD_CTRL = 4'b0000; + parameter [0:0] RX_RESLOAD_OVRD = 1'b0; + parameter [2:0] RX_SAMPLE_PERIOD = 3'b101; + parameter integer RX_SIG_VALID_DLY = 11; + parameter integer RX_SUM_DEGEN_AVTT_OVERITE = 0; + parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0; + parameter [3:0] RX_SUM_IREF_TUNE = 4'b0000; + parameter integer RX_SUM_PWR_SAVING = 0; + parameter [3:0] RX_SUM_RES_CTRL = 4'b0000; + parameter [3:0] RX_SUM_VCMTUNE = 4'b0011; + parameter [0:0] RX_SUM_VCM_BIAS_TUNE_EN = 1'b1; + parameter [0:0] RX_SUM_VCM_OVWR = 1'b0; + parameter [2:0] RX_SUM_VREF_TUNE = 3'b100; + parameter [1:0] RX_TUNE_AFE_OS = 2'b00; + parameter [2:0] RX_VREG_CTRL = 3'b010; + parameter [0:0] RX_VREG_PDB = 1'b1; + parameter [1:0] RX_WIDEMODE_CDR = 2'b01; + parameter [1:0] RX_WIDEMODE_CDR_GEN3 = 2'b01; + parameter [1:0] RX_WIDEMODE_CDR_GEN4 = 2'b01; + parameter RX_XCLK_SEL = "RXDES"; + parameter [0:0] RX_XMODE_SEL = 1'b0; + parameter [0:0] SAMPLE_CLK_PHASE = 1'b0; + parameter [0:0] SAS_12G_MODE = 1'b0; + parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111; + parameter [2:0] SATA_BURST_VAL = 3'b100; + parameter SATA_CPLL_CFG = "VCO_3000MHZ"; + parameter [2:0] SATA_EIDLE_VAL = 3'b100; + parameter SHOW_REALIGN_COMMA = "TRUE"; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter SIM_MODE = "FAST"; + parameter SIM_RECEIVER_DETECT_PASS = "TRUE"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter SIM_TX_EIDLE_DRIVE_LEVEL = "Z"; + parameter [0:0] SRSTMODE = 1'b0; + parameter [1:0] TAPDLY_SET_TX = 2'h0; + parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000; + parameter [2:0] TERM_RCAL_OVRD = 3'b000; + parameter [7:0] TRANS_TIME_RATE = 8'h0E; + parameter [7:0] TST_RSV0 = 8'h00; + parameter [7:0] TST_RSV1 = 8'h00; + parameter TXBUF_EN = "TRUE"; + parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE"; + parameter [15:0] TXDLY_CFG = 16'h0010; + parameter [15:0] TXDLY_LCFG = 16'h0030; + parameter integer TXDRV_FREQBAND = 0; + parameter [15:0] TXFE_CFG0 = 16'b0000000000000000; + parameter [15:0] TXFE_CFG1 = 16'b0000000000000000; + parameter [15:0] TXFE_CFG2 = 16'b0000000000000000; + parameter [15:0] TXFE_CFG3 = 16'b0000000000000000; + parameter TXFIFO_ADDR_CFG = "LOW"; + parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4; + parameter TXGEARBOX_EN = "FALSE"; + parameter integer TXOUT_DIV = 4; + parameter [4:0] TXPCSRESET_TIME = 5'b00001; + parameter [15:0] TXPHDLY_CFG0 = 16'h6020; + parameter [15:0] TXPHDLY_CFG1 = 16'h0002; + parameter [15:0] TXPH_CFG = 16'h0123; + parameter [15:0] TXPH_CFG2 = 16'h0000; + parameter [4:0] TXPH_MONITOR_SEL = 5'b00000; + parameter [15:0] TXPI_CFG0 = 16'b0000000100000000; + parameter [15:0] TXPI_CFG1 = 16'b0000000000000000; + parameter [0:0] TXPI_GRAY_SEL = 1'b0; + parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0; + parameter [0:0] TXPI_PPM = 1'b0; + parameter [7:0] TXPI_PPM_CFG = 8'b00000000; + parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000; + parameter [4:0] TXPMARESET_TIME = 5'b00001; + parameter [0:0] TXREFCLKDIV2_SEL = 1'b0; + parameter integer TXSWBST_BST = 1; + parameter integer TXSWBST_EN = 0; + parameter integer TXSWBST_MAG = 6; + parameter [0:0] TXSYNC_MULTILANE = 1'b0; + parameter [0:0] TXSYNC_OVRD = 1'b0; + parameter [0:0] TXSYNC_SKIP_DA = 1'b0; + parameter integer TX_CLK25_DIV = 8; + parameter [0:0] TX_CLKMUX_EN = 1'b1; + parameter integer TX_DATA_WIDTH = 20; + parameter [15:0] TX_DCC_LOOP_RST_CFG = 16'h0000; + parameter [5:0] TX_DEEMPH0 = 6'b000000; + parameter [5:0] TX_DEEMPH1 = 6'b000000; + parameter [5:0] TX_DEEMPH2 = 6'b000000; + parameter [5:0] TX_DEEMPH3 = 6'b000000; + parameter [4:0] TX_DIVRESET_TIME = 5'b00001; + parameter TX_DRIVE_MODE = "DIRECT"; + parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110; + parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100; + parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0; + parameter [0:0] TX_FIFO_BYP_EN = 1'b0; + parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0; + parameter integer TX_INT_DATAWIDTH = 1; + parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE"; + parameter [0:0] TX_MAINCURSOR_SEL = 1'b0; + parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110; + parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001; + parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101; + parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010; + parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110; + parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100; + parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010; + parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000; + parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000; + parameter [15:0] TX_PHICAL_CFG0 = 16'h0000; + parameter [15:0] TX_PHICAL_CFG1 = 16'h003F; + parameter integer TX_PI_BIASSET = 0; + parameter [0:0] TX_PMADATA_OPT = 1'b0; + parameter [0:0] TX_PMA_POWER_SAVE = 1'b0; + parameter [15:0] TX_PMA_RSV0 = 16'h0000; + parameter [15:0] TX_PMA_RSV1 = 16'h0000; + parameter TX_PROGCLK_SEL = "POSTPI"; + parameter real TX_PROGDIV_CFG = 0.0; + parameter [15:0] TX_PROGDIV_RATE = 16'h0001; + parameter [13:0] TX_RXDETECT_CFG = 14'h0032; + parameter integer TX_RXDETECT_REF = 3; + parameter [2:0] TX_SAMPLE_PERIOD = 3'b101; + parameter [1:0] TX_SW_MEAS = 2'b00; + parameter [2:0] TX_VREG_CTRL = 3'b000; + parameter [0:0] TX_VREG_PDB = 1'b0; + parameter [1:0] TX_VREG_VREFSEL = 2'b00; + parameter TX_XCLK_SEL = "TXOUT"; + parameter [0:0] USB_BOTH_BURST_IDLE = 1'b0; + parameter [6:0] USB_BURSTMAX_U3WAKE = 7'b1111111; + parameter [6:0] USB_BURSTMIN_U3WAKE = 7'b1100011; + parameter [0:0] USB_CLK_COR_EQ_EN = 1'b0; + parameter [0:0] USB_EXT_CNTL = 1'b1; + parameter [9:0] USB_IDLEMAX_POLLING = 10'b1010111011; + parameter [9:0] USB_IDLEMIN_POLLING = 10'b0100101011; + parameter [8:0] USB_LFPSPING_BURST = 9'b000000101; + parameter [8:0] USB_LFPSPOLLING_BURST = 9'b000110001; + parameter [8:0] USB_LFPSPOLLING_IDLE_MS = 9'b000000100; + parameter [8:0] USB_LFPSU1EXIT_BURST = 9'b000011101; + parameter [8:0] USB_LFPSU2LPEXIT_BURST_MS = 9'b001100011; + parameter [8:0] USB_LFPSU3WAKE_BURST_MS = 9'b111110011; + parameter [3:0] USB_LFPS_TPERIOD = 4'b0011; + parameter [0:0] USB_LFPS_TPERIOD_ACCURATE = 1'b1; + parameter [0:0] USB_MODE = 1'b0; + parameter [0:0] USB_PCIE_ERR_REP_DIS = 1'b0; + parameter integer USB_PING_SATA_MAX_INIT = 21; + parameter integer USB_PING_SATA_MIN_INIT = 12; + parameter integer USB_POLL_SATA_MAX_BURST = 8; + parameter integer USB_POLL_SATA_MIN_BURST = 4; + parameter [0:0] USB_RAW_ELEC = 1'b0; + parameter [0:0] USB_RXIDLE_P0_CTRL = 1'b1; + parameter [0:0] USB_TXIDLE_TUNE_ENABLE = 1'b1; + parameter integer USB_U1_SATA_MAX_WAKE = 7; + parameter integer USB_U1_SATA_MIN_WAKE = 4; + parameter integer USB_U2_SAS_MAX_COM = 64; + parameter integer USB_U2_SAS_MIN_COM = 36; + parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0; + parameter [0:0] Y_ALL_MODE = 1'b0; + output BUFGTCE; + output [2:0] BUFGTCEMASK; + output [8:0] BUFGTDIV; + output BUFGTRESET; + output [2:0] BUFGTRSTMASK; + output CPLLFBCLKLOST; + output CPLLLOCK; + output CPLLREFCLKLOST; + output [15:0] DMONITOROUT; + output DMONITOROUTCLK; + output [15:0] DRPDO; + output DRPRDY; + output EYESCANDATAERROR; + output GTPOWERGOOD; + output GTREFCLKMONITOR; + output GTYTXN; + output GTYTXP; + output PCIERATEGEN3; + output PCIERATEIDLE; + output [1:0] PCIERATEQPLLPD; + output [1:0] PCIERATEQPLLRESET; + output PCIESYNCTXSYNCDONE; + output PCIEUSERGEN3RDY; + output PCIEUSERPHYSTATUSRST; + output PCIEUSERRATESTART; + output [15:0] PCSRSVDOUT; + output PHYSTATUS; + output [15:0] PINRSRVDAS; + output POWERPRESENT; + output RESETEXCEPTION; + output [2:0] RXBUFSTATUS; + output RXBYTEISALIGNED; + output RXBYTEREALIGN; + output RXCDRLOCK; + output RXCDRPHDONE; + output RXCHANBONDSEQ; + output RXCHANISALIGNED; + output RXCHANREALIGN; + output [4:0] RXCHBONDO; + output RXCKCALDONE; + output [1:0] RXCLKCORCNT; + output RXCOMINITDET; + output RXCOMMADET; + output RXCOMSASDET; + output RXCOMWAKEDET; + output [15:0] RXCTRL0; + output [15:0] RXCTRL1; + output [7:0] RXCTRL2; + output [7:0] RXCTRL3; + output [127:0] RXDATA; + output [7:0] RXDATAEXTENDRSVD; + output [1:0] RXDATAVALID; + output RXDLYSRESETDONE; + output RXELECIDLE; + output [5:0] RXHEADER; + output [1:0] RXHEADERVALID; + output RXLFPSTRESETDET; + output RXLFPSU2LPEXITDET; + output RXLFPSU3WAKEDET; + output [7:0] RXMONITOROUT; + output RXOSINTDONE; + output RXOSINTSTARTED; + output RXOSINTSTROBEDONE; + output RXOSINTSTROBESTARTED; + output RXOUTCLK; + output RXOUTCLKFABRIC; + output RXOUTCLKPCS; + output RXPHALIGNDONE; + output RXPHALIGNERR; + output RXPMARESETDONE; + output RXPRBSERR; + output RXPRBSLOCKED; + output RXPRGDIVRESETDONE; + output RXRATEDONE; + output RXRECCLKOUT; + output RXRESETDONE; + output RXSLIDERDY; + output RXSLIPDONE; + output RXSLIPOUTCLKRDY; + output RXSLIPPMARDY; + output [1:0] RXSTARTOFSEQ; + output [2:0] RXSTATUS; + output RXSYNCDONE; + output RXSYNCOUT; + output RXVALID; + output [1:0] TXBUFSTATUS; + output TXCOMFINISH; + output TXDCCDONE; + output TXDLYSRESETDONE; + output TXOUTCLK; + output TXOUTCLKFABRIC; + output TXOUTCLKPCS; + output TXPHALIGNDONE; + output TXPHINITDONE; + output TXPMARESETDONE; + output TXPRGDIVRESETDONE; + output TXRATEDONE; + output TXRESETDONE; + output TXSYNCDONE; + output TXSYNCOUT; + input CDRSTEPDIR; + input CDRSTEPSQ; + input CDRSTEPSX; + input CFGRESET; + input CLKRSVD0; + input CLKRSVD1; + input CPLLFREQLOCK; + input CPLLLOCKDETCLK; + input CPLLLOCKEN; + input CPLLPD; + input [2:0] CPLLREFCLKSEL; + input CPLLRESET; + input DMONFIFORESET; + input DMONITORCLK; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPRST; + input DRPWE; + input EYESCANRESET; + input EYESCANTRIGGER; + input FREQOS; + input GTGREFCLK; + input GTNORTHREFCLK0; + input GTNORTHREFCLK1; + input GTREFCLK0; + input GTREFCLK1; + input [15:0] GTRSVD; + input GTRXRESET; + input GTRXRESETSEL; + input GTSOUTHREFCLK0; + input GTSOUTHREFCLK1; + input GTTXRESET; + input GTTXRESETSEL; + input GTYRXN; + input GTYRXP; + input INCPCTRL; + input [2:0] LOOPBACK; + input PCIEEQRXEQADAPTDONE; + input PCIERSTIDLE; + input PCIERSTTXSYNCSTART; + input PCIEUSERRATEDONE; + input [15:0] PCSRSVDIN; + input QPLL0CLK; + input QPLL0FREQLOCK; + input QPLL0REFCLK; + input QPLL1CLK; + input QPLL1FREQLOCK; + input QPLL1REFCLK; + input RESETOVRD; + input RX8B10BEN; + input RXAFECFOKEN; + input RXBUFRESET; + input RXCDRFREQRESET; + input RXCDRHOLD; + input RXCDROVRDEN; + input RXCDRRESET; + input RXCHBONDEN; + input [4:0] RXCHBONDI; + input [2:0] RXCHBONDLEVEL; + input RXCHBONDMASTER; + input RXCHBONDSLAVE; + input RXCKCALRESET; + input [6:0] RXCKCALSTART; + input RXCOMMADETEN; + input RXDFEAGCHOLD; + input RXDFEAGCOVRDEN; + input [3:0] RXDFECFOKFCNUM; + input RXDFECFOKFEN; + input RXDFECFOKFPULSE; + input RXDFECFOKHOLD; + input RXDFECFOKOVREN; + input RXDFEKHHOLD; + input RXDFEKHOVRDEN; + input RXDFELFHOLD; + input RXDFELFOVRDEN; + input RXDFELPMRESET; + input RXDFETAP10HOLD; + input RXDFETAP10OVRDEN; + input RXDFETAP11HOLD; + input RXDFETAP11OVRDEN; + input RXDFETAP12HOLD; + input RXDFETAP12OVRDEN; + input RXDFETAP13HOLD; + input RXDFETAP13OVRDEN; + input RXDFETAP14HOLD; + input RXDFETAP14OVRDEN; + input RXDFETAP15HOLD; + input RXDFETAP15OVRDEN; + input RXDFETAP2HOLD; + input RXDFETAP2OVRDEN; + input RXDFETAP3HOLD; + input RXDFETAP3OVRDEN; + input RXDFETAP4HOLD; + input RXDFETAP4OVRDEN; + input RXDFETAP5HOLD; + input RXDFETAP5OVRDEN; + input RXDFETAP6HOLD; + input RXDFETAP6OVRDEN; + input RXDFETAP7HOLD; + input RXDFETAP7OVRDEN; + input RXDFETAP8HOLD; + input RXDFETAP8OVRDEN; + input RXDFETAP9HOLD; + input RXDFETAP9OVRDEN; + input RXDFEUTHOLD; + input RXDFEUTOVRDEN; + input RXDFEVPHOLD; + input RXDFEVPOVRDEN; + input RXDFEXYDEN; + input RXDLYBYPASS; + input RXDLYEN; + input RXDLYOVRDEN; + input RXDLYSRESET; + input [1:0] RXELECIDLEMODE; + input RXEQTRAINING; + input RXGEARBOXSLIP; + input RXLATCLK; + input RXLPMEN; + input RXLPMGCHOLD; + input RXLPMGCOVRDEN; + input RXLPMHFHOLD; + input RXLPMHFOVRDEN; + input RXLPMLFHOLD; + input RXLPMLFKLOVRDEN; + input RXLPMOSHOLD; + input RXLPMOSOVRDEN; + input RXMCOMMAALIGNEN; + input [1:0] RXMONITORSEL; + input RXOOBRESET; + input RXOSCALRESET; + input RXOSHOLD; + input RXOSOVRDEN; + input [2:0] RXOUTCLKSEL; + input RXPCOMMAALIGNEN; + input RXPCSRESET; + input [1:0] RXPD; + input RXPHALIGN; + input RXPHALIGNEN; + input RXPHDLYPD; + input RXPHDLYRESET; + input [1:0] RXPLLCLKSEL; + input RXPMARESET; + input RXPOLARITY; + input RXPRBSCNTRESET; + input [3:0] RXPRBSSEL; + input RXPROGDIVRESET; + input [2:0] RXRATE; + input RXRATEMODE; + input RXSLIDE; + input RXSLIPOUTCLK; + input RXSLIPPMA; + input RXSYNCALLIN; + input RXSYNCIN; + input RXSYNCMODE; + input [1:0] RXSYSCLKSEL; + input RXTERMINATION; + input RXUSERRDY; + input RXUSRCLK; + input RXUSRCLK2; + input SIGVALIDCLK; + input [19:0] TSTIN; + input [7:0] TX8B10BBYPASS; + input TX8B10BEN; + input TXCOMINIT; + input TXCOMSAS; + input TXCOMWAKE; + input [15:0] TXCTRL0; + input [15:0] TXCTRL1; + input [7:0] TXCTRL2; + input [127:0] TXDATA; + input [7:0] TXDATAEXTENDRSVD; + input TXDCCFORCESTART; + input TXDCCRESET; + input [1:0] TXDEEMPH; + input TXDETECTRX; + input [4:0] TXDIFFCTRL; + input TXDLYBYPASS; + input TXDLYEN; + input TXDLYHOLD; + input TXDLYOVRDEN; + input TXDLYSRESET; + input TXDLYUPDOWN; + input TXELECIDLE; + input [5:0] TXHEADER; + input TXINHIBIT; + input TXLATCLK; + input TXLFPSTRESET; + input TXLFPSU2LPEXIT; + input TXLFPSU3WAKE; + input [6:0] TXMAINCURSOR; + input [2:0] TXMARGIN; + input TXMUXDCDEXHOLD; + input TXMUXDCDORWREN; + input TXONESZEROS; + input [2:0] TXOUTCLKSEL; + input TXPCSRESET; + input [1:0] TXPD; + input TXPDELECIDLEMODE; + input TXPHALIGN; + input TXPHALIGNEN; + input TXPHDLYPD; + input TXPHDLYRESET; + input TXPHDLYTSTCLK; + input TXPHINIT; + input TXPHOVRDEN; + input TXPIPPMEN; + input TXPIPPMOVRDEN; + input TXPIPPMPD; + input TXPIPPMSEL; + input [4:0] TXPIPPMSTEPSIZE; + input TXPISOPD; + input [1:0] TXPLLCLKSEL; + input TXPMARESET; + input TXPOLARITY; + input [4:0] TXPOSTCURSOR; + input TXPRBSFORCEERR; + input [3:0] TXPRBSSEL; + input [4:0] TXPRECURSOR; + input TXPROGDIVRESET; + input [2:0] TXRATE; + input TXRATEMODE; + input [6:0] TXSEQUENCE; + input TXSWING; + input TXSYNCALLIN; + input TXSYNCIN; + input TXSYNCMODE; + input [1:0] TXSYSCLKSEL; + input TXUSERRDY; + input TXUSRCLK; + input TXUSRCLK2; +endmodule + +module GTYE4_COMMON (...); + parameter [0:0] AEN_QPLL0_FBDIV = 1'b1; + parameter [0:0] AEN_QPLL1_FBDIV = 1'b1; + parameter [0:0] AEN_SDM0TOGGLE = 1'b0; + parameter [0:0] AEN_SDM1TOGGLE = 1'b0; + parameter [0:0] A_SDM0TOGGLE = 1'b0; + parameter [8:0] A_SDM1DATA_HIGH = 9'b000000000; + parameter [15:0] A_SDM1DATA_LOW = 16'b0000000000000000; + parameter [0:0] A_SDM1TOGGLE = 1'b0; + parameter [15:0] BIAS_CFG0 = 16'h0000; + parameter [15:0] BIAS_CFG1 = 16'h0000; + parameter [15:0] BIAS_CFG2 = 16'h0000; + parameter [15:0] BIAS_CFG3 = 16'h0000; + parameter [15:0] BIAS_CFG4 = 16'h0000; + parameter [15:0] BIAS_CFG_RSVD = 16'h0000; + parameter [15:0] COMMON_CFG0 = 16'h0000; + parameter [15:0] COMMON_CFG1 = 16'h0000; + parameter [15:0] POR_CFG = 16'h0000; + parameter [15:0] PPF0_CFG = 16'h0F00; + parameter [15:0] PPF1_CFG = 16'h0F00; + parameter QPLL0CLKOUT_RATE = "FULL"; + parameter [15:0] QPLL0_CFG0 = 16'h391C; + parameter [15:0] QPLL0_CFG1 = 16'h0000; + parameter [15:0] QPLL0_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL0_CFG2 = 16'h0F80; + parameter [15:0] QPLL0_CFG2_G3 = 16'h0F80; + parameter [15:0] QPLL0_CFG3 = 16'h0120; + parameter [15:0] QPLL0_CFG4 = 16'h0002; + parameter [9:0] QPLL0_CP = 10'b0000011111; + parameter [9:0] QPLL0_CP_G3 = 10'b0000011111; + parameter integer QPLL0_FBDIV = 66; + parameter integer QPLL0_FBDIV_G3 = 80; + parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL0_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL0_LPF = 10'b1011111111; + parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111; + parameter [0:0] QPLL0_PCI_EN = 1'b0; + parameter [0:0] QPLL0_RATE_SW_USE_DRP = 1'b0; + parameter integer QPLL0_REFCLK_DIV = 1; + parameter [15:0] QPLL0_SDM_CFG0 = 16'h0040; + parameter [15:0] QPLL0_SDM_CFG1 = 16'h0000; + parameter [15:0] QPLL0_SDM_CFG2 = 16'h0000; + parameter QPLL1CLKOUT_RATE = "FULL"; + parameter [15:0] QPLL1_CFG0 = 16'h691C; + parameter [15:0] QPLL1_CFG1 = 16'h0020; + parameter [15:0] QPLL1_CFG1_G3 = 16'h0020; + parameter [15:0] QPLL1_CFG2 = 16'h0F80; + parameter [15:0] QPLL1_CFG2_G3 = 16'h0F80; + parameter [15:0] QPLL1_CFG3 = 16'h0120; + parameter [15:0] QPLL1_CFG4 = 16'h0002; + parameter [9:0] QPLL1_CP = 10'b0000011111; + parameter [9:0] QPLL1_CP_G3 = 10'b0000011111; + parameter integer QPLL1_FBDIV = 66; + parameter integer QPLL1_FBDIV_G3 = 80; + parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000; + parameter [7:0] QPLL1_INIT_CFG1 = 8'h00; + parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8; + parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8; + parameter [9:0] QPLL1_LPF = 10'b1011111111; + parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111; + parameter [0:0] QPLL1_PCI_EN = 1'b0; + parameter [0:0] QPLL1_RATE_SW_USE_DRP = 1'b0; + parameter integer QPLL1_REFCLK_DIV = 1; + parameter [15:0] QPLL1_SDM_CFG0 = 16'h0000; + parameter [15:0] QPLL1_SDM_CFG1 = 16'h0000; + parameter [15:0] QPLL1_SDM_CFG2 = 16'h0000; + parameter [15:0] RSVD_ATTR0 = 16'h0000; + parameter [15:0] RSVD_ATTR1 = 16'h0000; + parameter [15:0] RSVD_ATTR2 = 16'h0000; + parameter [15:0] RSVD_ATTR3 = 16'h0000; + parameter [1:0] RXRECCLKOUT0_SEL = 2'b00; + parameter [1:0] RXRECCLKOUT1_SEL = 2'b00; + parameter [0:0] SARC_ENB = 1'b0; + parameter [0:0] SARC_SEL = 1'b0; + parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM0INITSEED0_1 = 9'b000000000; + parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000; + parameter [8:0] SDM1INITSEED0_1 = 9'b000000000; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter SIM_MODE = "FAST"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter [15:0] UB_CFG0 = 16'h0000; + parameter [15:0] UB_CFG1 = 16'h0000; + parameter [15:0] UB_CFG2 = 16'h0000; + parameter [15:0] UB_CFG3 = 16'h0000; + parameter [15:0] UB_CFG4 = 16'h0000; + parameter [15:0] UB_CFG5 = 16'h0400; + parameter [15:0] UB_CFG6 = 16'h0000; + output [15:0] DRPDO; + output DRPRDY; + output [7:0] PMARSVDOUT0; + output [7:0] PMARSVDOUT1; + output QPLL0FBCLKLOST; + output QPLL0LOCK; + output QPLL0OUTCLK; + output QPLL0OUTREFCLK; + output QPLL0REFCLKLOST; + output QPLL1FBCLKLOST; + output QPLL1LOCK; + output QPLL1OUTCLK; + output QPLL1OUTREFCLK; + output QPLL1REFCLKLOST; + output [7:0] QPLLDMONITOR0; + output [7:0] QPLLDMONITOR1; + output REFCLKOUTMONITOR0; + output REFCLKOUTMONITOR1; + output [1:0] RXRECCLK0SEL; + output [1:0] RXRECCLK1SEL; + output [3:0] SDM0FINALOUT; + output [14:0] SDM0TESTDATA; + output [3:0] SDM1FINALOUT; + output [14:0] SDM1TESTDATA; + output [15:0] UBDADDR; + output UBDEN; + output [15:0] UBDI; + output UBDWE; + output UBMDMTDO; + output UBRSVDOUT; + output UBTXUART; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input [4:0] BGRCALOVRD; + input BGRCALOVRDENB; + input [15:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input GTGREFCLK0; + input GTGREFCLK1; + input GTNORTHREFCLK00; + input GTNORTHREFCLK01; + input GTNORTHREFCLK10; + input GTNORTHREFCLK11; + input GTREFCLK00; + input GTREFCLK01; + input GTREFCLK10; + input GTREFCLK11; + input GTSOUTHREFCLK00; + input GTSOUTHREFCLK01; + input GTSOUTHREFCLK10; + input GTSOUTHREFCLK11; + input [2:0] PCIERATEQPLL0; + input [2:0] PCIERATEQPLL1; + input [7:0] PMARSVD0; + input [7:0] PMARSVD1; + input QPLL0CLKRSVD0; + input QPLL0CLKRSVD1; + input [7:0] QPLL0FBDIV; + input QPLL0LOCKDETCLK; + input QPLL0LOCKEN; + input QPLL0PD; + input [2:0] QPLL0REFCLKSEL; + input QPLL0RESET; + input QPLL1CLKRSVD0; + input QPLL1CLKRSVD1; + input [7:0] QPLL1FBDIV; + input QPLL1LOCKDETCLK; + input QPLL1LOCKEN; + input QPLL1PD; + input [2:0] QPLL1REFCLKSEL; + input QPLL1RESET; + input [7:0] QPLLRSVD1; + input [4:0] QPLLRSVD2; + input [4:0] QPLLRSVD3; + input [7:0] QPLLRSVD4; + input RCALENB; + input [24:0] SDM0DATA; + input SDM0RESET; + input SDM0TOGGLE; + input [1:0] SDM0WIDTH; + input [24:0] SDM1DATA; + input SDM1RESET; + input SDM1TOGGLE; + input [1:0] SDM1WIDTH; + input UBCFGSTREAMEN; + input [15:0] UBDO; + input UBDRDY; + input UBENABLE; + input [1:0] UBGPI; + input [1:0] UBINTR; + input UBIOLMBRST; + input UBMBRST; + input UBMDMCAPTURE; + input UBMDMDBGRST; + input UBMDMDBGUPDATE; + input [3:0] UBMDMREGEN; + input UBMDMSHIFT; + input UBMDMSYSRST; + input UBMDMTCK; + input UBMDMTDI; +endmodule + +module IBUFDS_GTE4 (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter [1:0] REFCLK_HROW_CK_SEL = 2'b00; + parameter [1:0] REFCLK_ICNTL_RX = 2'b00; + output O; + output ODIV2; + input CEB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module OBUFDS_GTE4 (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter [4:0] REFCLK_ICNTL_TX = 5'b00000; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input CEB; + input I; +endmodule + +module OBUFDS_GTE4_ADV (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter [4:0] REFCLK_ICNTL_TX = 5'b00000; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input CEB; + input [3:0] I; + input [1:0] RXRECCLK_SEL; +endmodule + +module GTM_DUAL (...); + parameter [15:0] A_CFG = 16'b0000100001000000; + parameter [15:0] A_SDM_DATA_CFG0 = 16'b0000000011010000; + parameter [15:0] A_SDM_DATA_CFG1 = 16'b0000000011010000; + parameter [15:0] BIAS_CFG0 = 16'b0000000000000000; + parameter [15:0] BIAS_CFG1 = 16'b0000000000000000; + parameter [15:0] BIAS_CFG2 = 16'b0001000000000000; + parameter [15:0] BIAS_CFG3 = 16'b0000000000000001; + parameter [15:0] BIAS_CFG4 = 16'b0000000000000000; + parameter [15:0] BIAS_CFG5 = 16'b0000000000000000; + parameter [15:0] BIAS_CFG6 = 16'b0000000010000000; + parameter [15:0] BIAS_CFG7 = 16'b0000000000000000; + parameter [15:0] CH0_A_CH_CFG0 = 16'b0000000000000011; + parameter [15:0] CH0_A_CH_CFG1 = 16'b0000000000000000; + parameter [15:0] CH0_A_CH_CFG2 = 16'b0111101111110000; + parameter [15:0] CH0_A_CH_CFG3 = 16'b0000000000000000; + parameter [15:0] CH0_A_CH_CFG4 = 16'b0000000000000000; + parameter [15:0] CH0_A_CH_CFG5 = 16'b0000000000000000; + parameter [15:0] CH0_A_CH_CFG6 = 16'b0000000000000000; + parameter [15:0] CH0_RST_LP_CFG0 = 16'b0001000000010000; + parameter [15:0] CH0_RST_LP_CFG1 = 16'b0011001000010000; + parameter [15:0] CH0_RST_LP_CFG2 = 16'b0110010100000100; + parameter [15:0] CH0_RST_LP_CFG3 = 16'b0011001000010000; + parameter [15:0] CH0_RST_LP_CFG4 = 16'b0000000001000100; + parameter [15:0] CH0_RST_LP_ID_CFG0 = 16'b0011000001110000; + parameter [15:0] CH0_RST_LP_ID_CFG1 = 16'b0001000000010000; + parameter [15:0] CH0_RST_TIME_CFG0 = 16'b0000010000100001; + parameter [15:0] CH0_RST_TIME_CFG1 = 16'b0000010000100001; + parameter [15:0] CH0_RST_TIME_CFG2 = 16'b0000010000100001; + parameter [15:0] CH0_RST_TIME_CFG3 = 16'b0000010000100000; + parameter [15:0] CH0_RST_TIME_CFG4 = 16'b0000010000100001; + parameter [15:0] CH0_RST_TIME_CFG5 = 16'b0000000000000001; + parameter [15:0] CH0_RST_TIME_CFG6 = 16'b0000000000100001; + parameter [15:0] CH0_RX_ADC_CFG0 = 16'b0011010010001111; + parameter [15:0] CH0_RX_ADC_CFG1 = 16'b0011111001010101; + parameter [15:0] CH0_RX_ANA_CFG0 = 16'b1000000000011101; + parameter [15:0] CH0_RX_ANA_CFG1 = 16'b1110100010000000; + parameter [15:0] CH0_RX_ANA_CFG2 = 16'b0000000010001010; + parameter [15:0] CH0_RX_APT_CFG0A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG0B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG10A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG10B = 16'b0000000001010000; + parameter [15:0] CH0_RX_APT_CFG11A = 16'b0000000001000000; + parameter [15:0] CH0_RX_APT_CFG11B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG12A = 16'b0000000001010000; + parameter [15:0] CH0_RX_APT_CFG12B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG13A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG13B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG14A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG14B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG15A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG15B = 16'b0000100000000000; + parameter [15:0] CH0_RX_APT_CFG16A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG16B = 16'b0010000000000000; + parameter [15:0] CH0_RX_APT_CFG17A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG17B = 16'b0001000001000000; + parameter [15:0] CH0_RX_APT_CFG18A = 16'b0000100000100000; + parameter [15:0] CH0_RX_APT_CFG18B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG19A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG19B = 16'b0000100000000000; + parameter [15:0] CH0_RX_APT_CFG1A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG1B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG20A = 16'b1110000000100000; + parameter [15:0] CH0_RX_APT_CFG20B = 16'b0000000001000000; + parameter [15:0] CH0_RX_APT_CFG21A = 16'b0001000000000100; + parameter [15:0] CH0_RX_APT_CFG21B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG22A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG22B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG23A = 16'b0000100000000000; + parameter [15:0] CH0_RX_APT_CFG23B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG24A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG24B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG25A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG25B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG26A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG26B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG27A = 16'b0100000000000000; + parameter [15:0] CH0_RX_APT_CFG27B = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG28A = 16'b0000000000000000; + parameter [15:0] CH0_RX_APT_CFG28B = 16'b1000000000000000; + parameter [15:0] CH0_RX_APT_CFG2A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG2B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG3A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG3B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG4A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG4B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG5A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG5B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG6A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG6B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG7A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG7B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG8A = 16'b0000100000000000; + parameter [15:0] CH0_RX_APT_CFG8B = 16'b0000100000000000; + parameter [15:0] CH0_RX_APT_CFG9A = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CFG9B = 16'b0000000001110000; + parameter [15:0] CH0_RX_APT_CTRL_CFG2 = 16'b0000000000000100; + parameter [15:0] CH0_RX_APT_CTRL_CFG3 = 16'b0000000000000000; + parameter [15:0] CH0_RX_CAL_CFG0A = 16'b0000000000000000; + parameter [15:0] CH0_RX_CAL_CFG0B = 16'b0011001100110000; + parameter [15:0] CH0_RX_CAL_CFG1A = 16'b1110111011100001; + parameter [15:0] CH0_RX_CAL_CFG1B = 16'b1111111100000100; + parameter [15:0] CH0_RX_CAL_CFG2A = 16'b0000000000000000; + parameter [15:0] CH0_RX_CAL_CFG2B = 16'b0011000000000000; + parameter [15:0] CH0_RX_CDR_CFG0A = 16'b0000000000000011; + parameter [15:0] CH0_RX_CDR_CFG0B = 16'b0000000000000000; + parameter [15:0] CH0_RX_CDR_CFG1A = 16'b0000000000000000; + parameter [15:0] CH0_RX_CDR_CFG1B = 16'b0000000000000000; + parameter [15:0] CH0_RX_CDR_CFG2A = 16'b1001000101100100; + parameter [15:0] CH0_RX_CDR_CFG2B = 16'b0000000100100100; + parameter [15:0] CH0_RX_CDR_CFG3A = 16'b0101110011110110; + parameter [15:0] CH0_RX_CDR_CFG3B = 16'b0000000000001011; + parameter [15:0] CH0_RX_CDR_CFG4A = 16'b0000000000000110; + parameter [15:0] CH0_RX_CDR_CFG4B = 16'b0000000000000000; + parameter [15:0] CH0_RX_CLKGN_CFG0 = 16'b1100000000000000; + parameter [15:0] CH0_RX_CLKGN_CFG1 = 16'b0000000110000000; + parameter [15:0] CH0_RX_CTLE_CFG0 = 16'b0011010010001000; + parameter [15:0] CH0_RX_CTLE_CFG1 = 16'b0010000000100010; + parameter [15:0] CH0_RX_CTLE_CFG2 = 16'b0000101000000000; + parameter [15:0] CH0_RX_CTLE_CFG3 = 16'b1111001001000000; + parameter [15:0] CH0_RX_DSP_CFG = 16'b0000000000000000; + parameter [15:0] CH0_RX_MON_CFG = 16'b0000000000000000; + parameter [15:0] CH0_RX_PAD_CFG0 = 16'b0001111000000000; + parameter [15:0] CH0_RX_PAD_CFG1 = 16'b0001100000001010; + parameter [15:0] CH0_RX_PCS_CFG0 = 16'b0000000100000000; + parameter [15:0] CH0_RX_PCS_CFG1 = 16'b0000000000000000; + parameter [15:0] CH0_TX_ANA_CFG0 = 16'b0000001010101111; + parameter [15:0] CH0_TX_ANA_CFG1 = 16'b0000000100000000; + parameter [15:0] CH0_TX_ANA_CFG2 = 16'b1000000000010100; + parameter [15:0] CH0_TX_ANA_CFG3 = 16'b0000101000100010; + parameter [15:0] CH0_TX_ANA_CFG4 = 16'b0000000000000000; + parameter [15:0] CH0_TX_CAL_CFG0 = 16'b0000000000100000; + parameter [15:0] CH0_TX_CAL_CFG1 = 16'b0000000001000000; + parameter [15:0] CH0_TX_DRV_CFG0 = 16'b0000000000000000; + parameter [15:0] CH0_TX_DRV_CFG1 = 16'b0000000000100111; + parameter [15:0] CH0_TX_DRV_CFG2 = 16'b0000000000000000; + parameter [15:0] CH0_TX_DRV_CFG3 = 16'b0110110000000000; + parameter [15:0] CH0_TX_DRV_CFG4 = 16'b0000000011000101; + parameter [15:0] CH0_TX_DRV_CFG5 = 16'b0000000000000000; + parameter [15:0] CH0_TX_LPBK_CFG0 = 16'b0000000000000011; + parameter [15:0] CH0_TX_LPBK_CFG1 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG0 = 16'b0000000101100000; + parameter [15:0] CH0_TX_PCS_CFG1 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG10 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG11 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG12 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG13 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG14 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG15 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG16 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG17 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG2 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG3 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG4 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG5 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG6 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG7 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG8 = 16'b0000000000000000; + parameter [15:0] CH0_TX_PCS_CFG9 = 16'b0000000000000000; + parameter [15:0] CH1_A_CH_CFG0 = 16'b0000000000000011; + parameter [15:0] CH1_A_CH_CFG1 = 16'b0000000000000000; + parameter [15:0] CH1_A_CH_CFG2 = 16'b0111101111110000; + parameter [15:0] CH1_A_CH_CFG3 = 16'b0000000000000000; + parameter [15:0] CH1_A_CH_CFG4 = 16'b0000000000000000; + parameter [15:0] CH1_A_CH_CFG5 = 16'b0000000000000000; + parameter [15:0] CH1_A_CH_CFG6 = 16'b0000000000000000; + parameter [15:0] CH1_RST_LP_CFG0 = 16'b0001000000010000; + parameter [15:0] CH1_RST_LP_CFG1 = 16'b0011001000010000; + parameter [15:0] CH1_RST_LP_CFG2 = 16'b0110010100000100; + parameter [15:0] CH1_RST_LP_CFG3 = 16'b0011001000010000; + parameter [15:0] CH1_RST_LP_CFG4 = 16'b0000000001000100; + parameter [15:0] CH1_RST_LP_ID_CFG0 = 16'b0011000001110000; + parameter [15:0] CH1_RST_LP_ID_CFG1 = 16'b0001000000010000; + parameter [15:0] CH1_RST_TIME_CFG0 = 16'b0000010000100001; + parameter [15:0] CH1_RST_TIME_CFG1 = 16'b0000010000100001; + parameter [15:0] CH1_RST_TIME_CFG2 = 16'b0000010000100001; + parameter [15:0] CH1_RST_TIME_CFG3 = 16'b0000010000100000; + parameter [15:0] CH1_RST_TIME_CFG4 = 16'b0000010000100001; + parameter [15:0] CH1_RST_TIME_CFG5 = 16'b0000000000000001; + parameter [15:0] CH1_RST_TIME_CFG6 = 16'b0000000000100001; + parameter [15:0] CH1_RX_ADC_CFG0 = 16'b0011010010001111; + parameter [15:0] CH1_RX_ADC_CFG1 = 16'b0011111001010101; + parameter [15:0] CH1_RX_ANA_CFG0 = 16'b1000000000011101; + parameter [15:0] CH1_RX_ANA_CFG1 = 16'b1110100010000000; + parameter [15:0] CH1_RX_ANA_CFG2 = 16'b0000000010001010; + parameter [15:0] CH1_RX_APT_CFG0A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG0B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG10A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG10B = 16'b0000000001010000; + parameter [15:0] CH1_RX_APT_CFG11A = 16'b0000000001000000; + parameter [15:0] CH1_RX_APT_CFG11B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG12A = 16'b0000000001010000; + parameter [15:0] CH1_RX_APT_CFG12B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG13A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG13B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG14A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG14B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG15A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG15B = 16'b0000100000000000; + parameter [15:0] CH1_RX_APT_CFG16A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG16B = 16'b0010000000000000; + parameter [15:0] CH1_RX_APT_CFG17A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG17B = 16'b0001000001000000; + parameter [15:0] CH1_RX_APT_CFG18A = 16'b0000100000100000; + parameter [15:0] CH1_RX_APT_CFG18B = 16'b0000100010000000; + parameter [15:0] CH1_RX_APT_CFG19A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG19B = 16'b0000100000000000; + parameter [15:0] CH1_RX_APT_CFG1A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG1B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG20A = 16'b1110000000100000; + parameter [15:0] CH1_RX_APT_CFG20B = 16'b0000000001000000; + parameter [15:0] CH1_RX_APT_CFG21A = 16'b0001000000000100; + parameter [15:0] CH1_RX_APT_CFG21B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG22A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG22B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG23A = 16'b0000100000000000; + parameter [15:0] CH1_RX_APT_CFG23B = 16'b0000100000000000; + parameter [15:0] CH1_RX_APT_CFG24A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG24B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG25A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG25B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG26A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG26B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG27A = 16'b0100000000000000; + parameter [15:0] CH1_RX_APT_CFG27B = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG28A = 16'b0000000000000000; + parameter [15:0] CH1_RX_APT_CFG28B = 16'b1000000000000000; + parameter [15:0] CH1_RX_APT_CFG2A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG2B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG3A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG3B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG4A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG4B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG5A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG5B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG6A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG6B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG7A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG7B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG8A = 16'b0000100000000000; + parameter [15:0] CH1_RX_APT_CFG8B = 16'b0000100000000000; + parameter [15:0] CH1_RX_APT_CFG9A = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CFG9B = 16'b0000000001110000; + parameter [15:0] CH1_RX_APT_CTRL_CFG2 = 16'b0000000000000100; + parameter [15:0] CH1_RX_APT_CTRL_CFG3 = 16'b0000000000000000; + parameter [15:0] CH1_RX_CAL_CFG0A = 16'b0000000000000000; + parameter [15:0] CH1_RX_CAL_CFG0B = 16'b0011001100110000; + parameter [15:0] CH1_RX_CAL_CFG1A = 16'b1110111011100001; + parameter [15:0] CH1_RX_CAL_CFG1B = 16'b1111111100000100; + parameter [15:0] CH1_RX_CAL_CFG2A = 16'b0000000000000000; + parameter [15:0] CH1_RX_CAL_CFG2B = 16'b0011000000000000; + parameter [15:0] CH1_RX_CDR_CFG0A = 16'b0000000000000011; + parameter [15:0] CH1_RX_CDR_CFG0B = 16'b0000000000000000; + parameter [15:0] CH1_RX_CDR_CFG1A = 16'b0000000000000000; + parameter [15:0] CH1_RX_CDR_CFG1B = 16'b0000000000000000; + parameter [15:0] CH1_RX_CDR_CFG2A = 16'b1001000101100100; + parameter [15:0] CH1_RX_CDR_CFG2B = 16'b0000000100100100; + parameter [15:0] CH1_RX_CDR_CFG3A = 16'b0101110011110110; + parameter [15:0] CH1_RX_CDR_CFG3B = 16'b0000000000001011; + parameter [15:0] CH1_RX_CDR_CFG4A = 16'b0000000000000110; + parameter [15:0] CH1_RX_CDR_CFG4B = 16'b0000000000000000; + parameter [15:0] CH1_RX_CLKGN_CFG0 = 16'b1100000000000000; + parameter [15:0] CH1_RX_CLKGN_CFG1 = 16'b0000000110000000; + parameter [15:0] CH1_RX_CTLE_CFG0 = 16'b0011010010001000; + parameter [15:0] CH1_RX_CTLE_CFG1 = 16'b0010000000100010; + parameter [15:0] CH1_RX_CTLE_CFG2 = 16'b0000101000000000; + parameter [15:0] CH1_RX_CTLE_CFG3 = 16'b1111001001000000; + parameter [15:0] CH1_RX_DSP_CFG = 16'b0000000000000000; + parameter [15:0] CH1_RX_MON_CFG = 16'b0000000000000000; + parameter [15:0] CH1_RX_PAD_CFG0 = 16'b0001111000000000; + parameter [15:0] CH1_RX_PAD_CFG1 = 16'b0001100000001010; + parameter [15:0] CH1_RX_PCS_CFG0 = 16'b0000000100000000; + parameter [15:0] CH1_RX_PCS_CFG1 = 16'b0000000000000000; + parameter [15:0] CH1_TX_ANA_CFG0 = 16'b0000001010101111; + parameter [15:0] CH1_TX_ANA_CFG1 = 16'b0000000100000000; + parameter [15:0] CH1_TX_ANA_CFG2 = 16'b1000000000010100; + parameter [15:0] CH1_TX_ANA_CFG3 = 16'b0000101000100010; + parameter [15:0] CH1_TX_ANA_CFG4 = 16'b0000000000000000; + parameter [15:0] CH1_TX_CAL_CFG0 = 16'b0000000000100000; + parameter [15:0] CH1_TX_CAL_CFG1 = 16'b0000000001000000; + parameter [15:0] CH1_TX_DRV_CFG0 = 16'b0000000000000000; + parameter [15:0] CH1_TX_DRV_CFG1 = 16'b0000000000100111; + parameter [15:0] CH1_TX_DRV_CFG2 = 16'b0000000000000000; + parameter [15:0] CH1_TX_DRV_CFG3 = 16'b0110110000000000; + parameter [15:0] CH1_TX_DRV_CFG4 = 16'b0000000011000101; + parameter [15:0] CH1_TX_DRV_CFG5 = 16'b0000000000000000; + parameter [15:0] CH1_TX_LPBK_CFG0 = 16'b0000000000000011; + parameter [15:0] CH1_TX_LPBK_CFG1 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG0 = 16'b0000000101100000; + parameter [15:0] CH1_TX_PCS_CFG1 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG10 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG11 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG12 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG13 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG14 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG15 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG16 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG17 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG2 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG3 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG4 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG5 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG6 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG7 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG8 = 16'b0000000000000000; + parameter [15:0] CH1_TX_PCS_CFG9 = 16'b0000000000000000; + parameter real DATARATE = 10.000; + parameter [15:0] DRPEN_CFG = 16'b0000000000000000; + parameter [15:0] FEC_CFG0 = 16'b0000000000000000; + parameter [15:0] FEC_CFG1 = 16'b0000000000000000; + parameter [15:0] FEC_CFG10 = 16'b0000000000000000; + parameter [15:0] FEC_CFG11 = 16'b0000000000000000; + parameter [15:0] FEC_CFG12 = 16'b0000000000000000; + parameter [15:0] FEC_CFG13 = 16'b0000000000000000; + parameter [15:0] FEC_CFG14 = 16'b0000000000000000; + parameter [15:0] FEC_CFG15 = 16'b0000000000000000; + parameter [15:0] FEC_CFG16 = 16'b0000000000000000; + parameter [15:0] FEC_CFG17 = 16'b0000000000000000; + parameter [15:0] FEC_CFG18 = 16'b0000000000000000; + parameter [15:0] FEC_CFG19 = 16'b0000000000000000; + parameter [15:0] FEC_CFG2 = 16'b0000000000000000; + parameter [15:0] FEC_CFG20 = 16'b0000000000000000; + parameter [15:0] FEC_CFG21 = 16'b0000000000000000; + parameter [15:0] FEC_CFG22 = 16'b0000000000000000; + parameter [15:0] FEC_CFG23 = 16'b0000000000000000; + parameter [15:0] FEC_CFG24 = 16'b0000000000000000; + parameter [15:0] FEC_CFG25 = 16'b0000000000000000; + parameter [15:0] FEC_CFG26 = 16'b0000000000000000; + parameter [15:0] FEC_CFG27 = 16'b0000000000000000; + parameter [15:0] FEC_CFG3 = 16'b0000000000000000; + parameter [15:0] FEC_CFG4 = 16'b0000000000000000; + parameter [15:0] FEC_CFG5 = 16'b0000000000000000; + parameter [15:0] FEC_CFG6 = 16'b0000000000000000; + parameter [15:0] FEC_CFG7 = 16'b0000000000000000; + parameter [15:0] FEC_CFG8 = 16'b0000000000000000; + parameter [15:0] FEC_CFG9 = 16'b0000000000000000; + parameter FEC_MODE = "BYPASS"; + parameter real INS_LOSS_NYQ = 20.000; + parameter integer INTERFACE_WIDTH = 64; + parameter MODULATION_MODE = "NRZ"; + parameter [15:0] PLL_CFG0 = 16'b0001100111110000; + parameter [15:0] PLL_CFG1 = 16'b0000111101110000; + parameter [15:0] PLL_CFG2 = 16'b1000000111101000; + parameter [15:0] PLL_CFG3 = 16'b0100000000000000; + parameter [15:0] PLL_CFG4 = 16'b0111111111101010; + parameter [15:0] PLL_CFG5 = 16'b0100101100111000; + parameter [15:0] PLL_CFG6 = 16'b0000000000100101; + parameter [15:0] PLL_CRS_CTRL_CFG0 = 16'b0000101100100000; + parameter [15:0] PLL_CRS_CTRL_CFG1 = 16'b1100010111010100; + parameter [0:0] PLL_IPS_PIN_EN = 1'b1; + parameter integer PLL_IPS_REFCLK_SEL = 0; + parameter [0:0] RCALSAP_TESTEN = 1'b0; + parameter [0:0] RCAL_APROBE = 1'b0; + parameter [15:0] RST_CFG = 16'b0000000000000010; + parameter [15:0] RST_PLL_CFG0 = 16'b0111011000010100; + parameter [15:0] SAP_CFG0 = 16'b0000000000000000; + parameter [15:0] SDM_CFG0 = 16'b0001100001000000; + parameter [15:0] SDM_CFG1 = 16'b0000000000000000; + parameter [15:0] SDM_CFG2 = 16'b0000000000000000; + parameter [15:0] SDM_SEED_CFG0 = 16'b0000000000000000; + parameter [15:0] SDM_SEED_CFG1 = 16'b0000000000000000; + parameter SIM_DEVICE = "ULTRASCALE_PLUS_ES1"; + parameter SIM_RESET_SPEEDUP = "TRUE"; + parameter integer TX_AMPLITUDE_SWING = 250; + output [27:0] CH0_AXISTDATA; + output CH0_AXISTLAST; + output CH0_AXISTVALID; + output [31:0] CH0_DMONITOROUT; + output CH0_DMONITOROUTCLK; + output CH0_GTMTXN; + output CH0_GTMTXP; + output [15:0] CH0_PCSRSVDOUT; + output [15:0] CH0_PMARSVDOUT; + output CH0_RESETEXCEPTION; + output [2:0] CH0_RXBUFSTATUS; + output [255:0] CH0_RXDATA; + output [3:0] CH0_RXDATAFLAGS; + output CH0_RXDATAISAM; + output CH0_RXDATASTART; + output CH0_RXOUTCLK; + output CH0_RXPMARESETDONE; + output CH0_RXPRBSERR; + output CH0_RXPRBSLOCKED; + output CH0_RXPRGDIVRESETDONE; + output CH0_RXPROGDIVCLK; + output CH0_RXRESETDONE; + output [1:0] CH0_TXBUFSTATUS; + output CH0_TXOUTCLK; + output CH0_TXPMARESETDONE; + output CH0_TXPRGDIVRESETDONE; + output CH0_TXPROGDIVCLK; + output CH0_TXRESETDONE; + output [27:0] CH1_AXISTDATA; + output CH1_AXISTLAST; + output CH1_AXISTVALID; + output [31:0] CH1_DMONITOROUT; + output CH1_DMONITOROUTCLK; + output CH1_GTMTXN; + output CH1_GTMTXP; + output [15:0] CH1_PCSRSVDOUT; + output [15:0] CH1_PMARSVDOUT; + output CH1_RESETEXCEPTION; + output [2:0] CH1_RXBUFSTATUS; + output [255:0] CH1_RXDATA; + output [3:0] CH1_RXDATAFLAGS; + output CH1_RXDATAISAM; + output CH1_RXDATASTART; + output CH1_RXOUTCLK; + output CH1_RXPMARESETDONE; + output CH1_RXPRBSERR; + output CH1_RXPRBSLOCKED; + output CH1_RXPRGDIVRESETDONE; + output CH1_RXPROGDIVCLK; + output CH1_RXRESETDONE; + output [1:0] CH1_TXBUFSTATUS; + output CH1_TXOUTCLK; + output CH1_TXPMARESETDONE; + output CH1_TXPRGDIVRESETDONE; + output CH1_TXPROGDIVCLK; + output CH1_TXRESETDONE; + output CLKTESTSIG2PAD; + output DMONITOROUTPLLCLK; + output [15:0] DRPDO; + output DRPRDY; + output FECRX0ALIGNED; + output FECRX0CORRCWINC; + output FECRX0CWINC; + output FECRX0UNCORRCWINC; + output FECRX1ALIGNED; + output FECRX1CORRCWINC; + output FECRX1CWINC; + output FECRX1UNCORRCWINC; + output [7:0] FECRXLN0BITERR0TO1INC; + output [7:0] FECRXLN0BITERR1TO0INC; + output [14:0] FECRXLN0DLY; + output [3:0] FECRXLN0ERRCNTINC; + output [1:0] FECRXLN0MAPPING; + output [7:0] FECRXLN1BITERR0TO1INC; + output [7:0] FECRXLN1BITERR1TO0INC; + output [14:0] FECRXLN1DLY; + output [3:0] FECRXLN1ERRCNTINC; + output [1:0] FECRXLN1MAPPING; + output [7:0] FECRXLN2BITERR0TO1INC; + output [7:0] FECRXLN2BITERR1TO0INC; + output [14:0] FECRXLN2DLY; + output [3:0] FECRXLN2ERRCNTINC; + output [1:0] FECRXLN2MAPPING; + output [7:0] FECRXLN3BITERR0TO1INC; + output [7:0] FECRXLN3BITERR1TO0INC; + output [14:0] FECRXLN3DLY; + output [3:0] FECRXLN3ERRCNTINC; + output [1:0] FECRXLN3MAPPING; + output FECTRXLN0LOCK; + output FECTRXLN1LOCK; + output FECTRXLN2LOCK; + output FECTRXLN3LOCK; + output GTPOWERGOOD; + output PLLFBCLKLOST; + output PLLLOCK; + output PLLREFCLKLOST; + output PLLREFCLKMONITOR; + output PLLRESETDONE; + output [15:0] PLLRSVDOUT; + output RCALCMP; + output [4:0] RCALOUT; + output RXRECCLK0; + output RXRECCLK1; + input BGBYPASSB; + input BGMONITORENB; + input BGPDB; + input [4:0] BGRCALOVRD; + input BGRCALOVRDENB; + input CH0_AXISEN; + input CH0_AXISRST; + input CH0_AXISTRDY; + input CH0_CFGRESET; + input CH0_DMONFIFORESET; + input CH0_DMONITORCLK; + input CH0_GTMRXN; + input CH0_GTMRXP; + input CH0_GTRXRESET; + input CH0_GTTXRESET; + input [2:0] CH0_LOOPBACK; + input [15:0] CH0_PCSRSVDIN; + input [15:0] CH0_PMARSVDIN; + input CH0_RESETOVRD; + input CH0_RXADAPTRESET; + input CH0_RXADCCALRESET; + input CH0_RXADCCLKGENRESET; + input CH0_RXBUFRESET; + input CH0_RXCDRFREQOS; + input CH0_RXCDRFRRESET; + input CH0_RXCDRHOLD; + input CH0_RXCDRINCPCTRL; + input CH0_RXCDROVRDEN; + input CH0_RXCDRPHRESET; + input CH0_RXDFERESET; + input CH0_RXDSPRESET; + input CH0_RXEQTRAINING; + input CH0_RXEYESCANRESET; + input CH0_RXFECRESET; + input [2:0] CH0_RXOUTCLKSEL; + input CH0_RXPCSRESET; + input [3:0] CH0_RXPCSRESETMASK; + input CH0_RXPMARESET; + input [7:0] CH0_RXPMARESETMASK; + input CH0_RXPOLARITY; + input CH0_RXPRBSCNTSTOP; + input CH0_RXPRBSCSCNTRST; + input [3:0] CH0_RXPRBSPTN; + input CH0_RXPROGDIVRESET; + input CH0_RXQPRBSEN; + input [1:0] CH0_RXRESETMODE; + input CH0_RXSPCSEQADV; + input CH0_RXUSRCLK; + input CH0_RXUSRCLK2; + input CH0_RXUSRRDY; + input CH0_RXUSRSTART; + input CH0_RXUSRSTOP; + input CH0_TXCKALRESET; + input [5:0] CH0_TXCTLFIRDAT; + input [255:0] CH0_TXDATA; + input CH0_TXDATASTART; + input [4:0] CH0_TXDRVAMP; + input [5:0] CH0_TXEMPMAIN; + input [4:0] CH0_TXEMPPOST; + input [4:0] CH0_TXEMPPRE; + input [3:0] CH0_TXEMPPRE2; + input CH0_TXFECRESET; + input CH0_TXINHIBIT; + input CH0_TXMUXDCDEXHOLD; + input CH0_TXMUXDCDORWREN; + input [2:0] CH0_TXOUTCLKSEL; + input CH0_TXPCSRESET; + input [1:0] CH0_TXPCSRESETMASK; + input CH0_TXPMARESET; + input [1:0] CH0_TXPMARESETMASK; + input CH0_TXPOLARITY; + input CH0_TXPRBSINERR; + input [3:0] CH0_TXPRBSPTN; + input CH0_TXPROGDIVRESET; + input CH0_TXQPRBSEN; + input [1:0] CH0_TXRESETMODE; + input CH0_TXSPCSEQADV; + input CH0_TXUSRCLK; + input CH0_TXUSRCLK2; + input CH0_TXUSRRDY; + input CH1_AXISEN; + input CH1_AXISRST; + input CH1_AXISTRDY; + input CH1_CFGRESET; + input CH1_DMONFIFORESET; + input CH1_DMONITORCLK; + input CH1_GTMRXN; + input CH1_GTMRXP; + input CH1_GTRXRESET; + input CH1_GTTXRESET; + input [2:0] CH1_LOOPBACK; + input [15:0] CH1_PCSRSVDIN; + input [15:0] CH1_PMARSVDIN; + input CH1_RESETOVRD; + input CH1_RXADAPTRESET; + input CH1_RXADCCALRESET; + input CH1_RXADCCLKGENRESET; + input CH1_RXBUFRESET; + input CH1_RXCDRFREQOS; + input CH1_RXCDRFRRESET; + input CH1_RXCDRHOLD; + input CH1_RXCDRINCPCTRL; + input CH1_RXCDROVRDEN; + input CH1_RXCDRPHRESET; + input CH1_RXDFERESET; + input CH1_RXDSPRESET; + input CH1_RXEQTRAINING; + input CH1_RXEYESCANRESET; + input CH1_RXFECRESET; + input [2:0] CH1_RXOUTCLKSEL; + input CH1_RXPCSRESET; + input [3:0] CH1_RXPCSRESETMASK; + input CH1_RXPMARESET; + input [7:0] CH1_RXPMARESETMASK; + input CH1_RXPOLARITY; + input CH1_RXPRBSCNTSTOP; + input CH1_RXPRBSCSCNTRST; + input [3:0] CH1_RXPRBSPTN; + input CH1_RXPROGDIVRESET; + input CH1_RXQPRBSEN; + input [1:0] CH1_RXRESETMODE; + input CH1_RXSPCSEQADV; + input CH1_RXUSRCLK; + input CH1_RXUSRCLK2; + input CH1_RXUSRRDY; + input CH1_RXUSRSTART; + input CH1_RXUSRSTOP; + input CH1_TXCKALRESET; + input [5:0] CH1_TXCTLFIRDAT; + input [255:0] CH1_TXDATA; + input CH1_TXDATASTART; + input [4:0] CH1_TXDRVAMP; + input [5:0] CH1_TXEMPMAIN; + input [4:0] CH1_TXEMPPOST; + input [4:0] CH1_TXEMPPRE; + input [3:0] CH1_TXEMPPRE2; + input CH1_TXFECRESET; + input CH1_TXINHIBIT; + input CH1_TXMUXDCDEXHOLD; + input CH1_TXMUXDCDORWREN; + input [2:0] CH1_TXOUTCLKSEL; + input CH1_TXPCSRESET; + input [1:0] CH1_TXPCSRESETMASK; + input CH1_TXPMARESET; + input [1:0] CH1_TXPMARESETMASK; + input CH1_TXPOLARITY; + input CH1_TXPRBSINERR; + input [3:0] CH1_TXPRBSPTN; + input CH1_TXPROGDIVRESET; + input CH1_TXQPRBSEN; + input [1:0] CH1_TXRESETMODE; + input CH1_TXSPCSEQADV; + input CH1_TXUSRCLK; + input CH1_TXUSRCLK2; + input CH1_TXUSRRDY; + input [10:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPRST; + input DRPWE; + input FECCTRLRX0BITSLIPFS; + input FECCTRLRX1BITSLIPFS; + input GTGREFCLK2PLL; + input GTNORTHREFCLK; + input GTREFCLK; + input GTSOUTHREFCLK; + input [7:0] PLLFBDIV; + input PLLMONCLK; + input PLLPD; + input [2:0] PLLREFCLKSEL; + input PLLRESET; + input PLLRESETBYPASSMODE; + input [1:0] PLLRESETMASK; + input [15:0] PLLRSVDIN; + input RCALENB; + input [25:0] SDMDATA; + input SDMTOGGLE; +endmodule + +module IBUFDS_GTM (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter integer REFCLK_HROW_CK_SEL = 0; + parameter integer REFCLK_ICNTL_RX = 0; + output O; + output ODIV2; + input CEB; + (* iopad_external_pin *) + input I; + (* iopad_external_pin *) + input IB; +endmodule + +module OBUFDS_GTM (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter integer REFCLK_ICNTL_TX = 0; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input CEB; + input I; +endmodule + +module OBUFDS_GTM_ADV (...); + parameter [0:0] REFCLK_EN_TX_PATH = 1'b0; + parameter integer REFCLK_ICNTL_TX = 0; + parameter [1:0] RXRECCLK_SEL = 2'b00; + (* iopad_external_pin *) + output O; + (* iopad_external_pin *) + output OB; + input CEB; + input [3:0] I; +endmodule + +module HSDAC (...); + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter integer XPA_CFG0 = 0; + parameter integer XPA_CFG1 = 0; + parameter integer XPA_NUM_DACS = 0; + parameter integer XPA_NUM_DUCS = 0; + parameter XPA_PLL_USED = "No"; + parameter integer XPA_SAMPLE_RATE_MSPS = 0; + output CLK_DAC; + output [15:0] DOUT; + output DRDY; + output PLL_DMON_OUT; + output PLL_REFCLK_OUT; + output [15:0] STATUS_COMMON; + output [15:0] STATUS_DAC0; + output [15:0] STATUS_DAC1; + output [15:0] STATUS_DAC2; + output [15:0] STATUS_DAC3; + output SYSREF_OUT_NORTH; + output SYSREF_OUT_SOUTH; + output VOUT0_N; + output VOUT0_P; + output VOUT1_N; + output VOUT1_P; + output VOUT2_N; + output VOUT2_P; + output VOUT3_N; + output VOUT3_P; + input CLK_FIFO_LM; + input [15:0] CONTROL_COMMON; + input [15:0] CONTROL_DAC0; + input [15:0] CONTROL_DAC1; + input [15:0] CONTROL_DAC2; + input [15:0] CONTROL_DAC3; + input DAC_CLK_N; + input DAC_CLK_P; + input [11:0] DADDR; + input [255:0] DATA_DAC0; + input [255:0] DATA_DAC1; + input [255:0] DATA_DAC2; + input [255:0] DATA_DAC3; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input FABRIC_CLK; + input PLL_MONCLK; + input PLL_REFCLK_IN; + input SYSREF_IN_NORTH; + input SYSREF_IN_SOUTH; + input SYSREF_N; + input SYSREF_P; +endmodule + +module HSADC (...); + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter integer XPA_CFG0 = 0; + parameter integer XPA_CFG1 = 0; + parameter XPA_NUM_ADCS = "0"; + parameter integer XPA_NUM_DDCS = 0; + parameter XPA_PLL_USED = "No"; + parameter integer XPA_SAMPLE_RATE_MSPS = 0; + output CLK_ADC; + output [127:0] DATA_ADC0; + output [127:0] DATA_ADC1; + output [127:0] DATA_ADC2; + output [127:0] DATA_ADC3; + output [15:0] DOUT; + output DRDY; + output PLL_DMON_OUT; + output PLL_REFCLK_OUT; + output [15:0] STATUS_ADC0; + output [15:0] STATUS_ADC1; + output [15:0] STATUS_ADC2; + output [15:0] STATUS_ADC3; + output [15:0] STATUS_COMMON; + output SYSREF_OUT_NORTH; + output SYSREF_OUT_SOUTH; + input ADC_CLK_N; + input ADC_CLK_P; + input CLK_FIFO_LM; + input [15:0] CONTROL_ADC0; + input [15:0] CONTROL_ADC1; + input [15:0] CONTROL_ADC2; + input [15:0] CONTROL_ADC3; + input [15:0] CONTROL_COMMON; + input [11:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input FABRIC_CLK; + input PLL_MONCLK; + input PLL_REFCLK_IN; + input SYSREF_IN_NORTH; + input SYSREF_IN_SOUTH; + input SYSREF_N; + input SYSREF_P; + input VIN0_N; + input VIN0_P; + input VIN1_N; + input VIN1_P; + input VIN2_N; + input VIN2_P; + input VIN3_N; + input VIN3_P; + input VIN_I01_N; + input VIN_I01_P; + input VIN_I23_N; + input VIN_I23_P; +endmodule + +module RFDAC (...); + parameter integer OPT_CLK_DIST = 0; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter integer XPA_ACTIVE_DUTYCYCLE = 100; + parameter integer XPA_CFG0 = 0; + parameter integer XPA_CFG1 = 0; + parameter integer XPA_CFG2 = 0; + parameter integer XPA_NUM_DACS = 0; + parameter integer XPA_NUM_DUCS = 0; + parameter XPA_PLL_USED = "EXTERNAL"; + parameter integer XPA_SAMPLE_RATE_MSPS = 0; + output CLK_DAC; + output CLK_DIST_OUT_NORTH; + output CLK_DIST_OUT_SOUTH; + output [15:0] DOUT; + output DRDY; + output PLL_DMON_OUT; + output PLL_REFCLK_OUT; + output [23:0] STATUS_COMMON; + output [23:0] STATUS_DAC0; + output [23:0] STATUS_DAC1; + output [23:0] STATUS_DAC2; + output [23:0] STATUS_DAC3; + output SYSREF_OUT_NORTH; + output SYSREF_OUT_SOUTH; + output T1_ALLOWED_SOUTH; + output VOUT0_N; + output VOUT0_P; + output VOUT1_N; + output VOUT1_P; + output VOUT2_N; + output VOUT2_P; + output VOUT3_N; + output VOUT3_P; + input CLK_DIST_IN_NORTH; + input CLK_DIST_IN_SOUTH; + input CLK_FIFO_LM; + input [15:0] CONTROL_COMMON; + input [15:0] CONTROL_DAC0; + input [15:0] CONTROL_DAC1; + input [15:0] CONTROL_DAC2; + input [15:0] CONTROL_DAC3; + input DAC_CLK_N; + input DAC_CLK_P; + input [11:0] DADDR; + input [255:0] DATA_DAC0; + input [255:0] DATA_DAC1; + input [255:0] DATA_DAC2; + input [255:0] DATA_DAC3; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input FABRIC_CLK; + input PLL_MONCLK; + input PLL_REFCLK_IN; + input SYSREF_IN_NORTH; + input SYSREF_IN_SOUTH; + input SYSREF_N; + input SYSREF_P; + input T1_ALLOWED_NORTH; +endmodule + +module RFADC (...); + parameter integer OPT_ANALOG = 0; + parameter integer OPT_CLK_DIST = 0; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter integer XPA_ACTIVE_DUTYCYCLE = 100; + parameter integer XPA_CFG0 = 0; + parameter integer XPA_CFG1 = 0; + parameter integer XPA_CFG2 = 0; + parameter XPA_NUM_ADCS = "0"; + parameter integer XPA_NUM_DDCS = 0; + parameter XPA_PLL_USED = "EXTERNAL"; + parameter integer XPA_SAMPLE_RATE_MSPS = 0; + output CLK_ADC; + output CLK_DIST_OUT_NORTH; + output CLK_DIST_OUT_SOUTH; + output [191:0] DATA_ADC0; + output [191:0] DATA_ADC1; + output [191:0] DATA_ADC2; + output [191:0] DATA_ADC3; + output [15:0] DOUT; + output DRDY; + output PLL_DMON_OUT; + output PLL_REFCLK_OUT; + output [23:0] STATUS_ADC0; + output [23:0] STATUS_ADC1; + output [23:0] STATUS_ADC2; + output [23:0] STATUS_ADC3; + output [23:0] STATUS_COMMON; + output SYSREF_OUT_NORTH; + output SYSREF_OUT_SOUTH; + output T1_ALLOWED_SOUTH; + input ADC_CLK_N; + input ADC_CLK_P; + input CLK_DIST_IN_NORTH; + input CLK_DIST_IN_SOUTH; + input CLK_FIFO_LM; + input [15:0] CONTROL_ADC0; + input [15:0] CONTROL_ADC1; + input [15:0] CONTROL_ADC2; + input [15:0] CONTROL_ADC3; + input [15:0] CONTROL_COMMON; + input [11:0] DADDR; + input DCLK; + input DEN; + input [15:0] DI; + input DWE; + input FABRIC_CLK; + input PLL_MONCLK; + input PLL_REFCLK_IN; + input SYSREF_IN_NORTH; + input SYSREF_IN_SOUTH; + input SYSREF_N; + input SYSREF_P; + input T1_ALLOWED_NORTH; + input VIN0_N; + input VIN0_P; + input VIN1_N; + input VIN1_P; + input VIN2_N; + input VIN2_P; + input VIN3_N; + input VIN3_P; + input VIN_I01_N; + input VIN_I01_P; + input VIN_I23_N; + input VIN_I23_P; +endmodule + +module PCIE_A1 (...); + parameter [31:0] BAR0 = 32'h00000000; + parameter [31:0] BAR1 = 32'h00000000; + parameter [31:0] BAR2 = 32'h00000000; + parameter [31:0] BAR3 = 32'h00000000; + parameter [31:0] BAR4 = 32'h00000000; + parameter [31:0] BAR5 = 32'h00000000; + parameter [31:0] CARDBUS_CIS_POINTER = 32'h00000000; + parameter [23:0] CLASS_CODE = 24'h000000; + parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 7; + parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 7; + parameter DEV_CAP_EXT_TAG_SUPPORTED = "FALSE"; + parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2; + parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0; + parameter DEV_CAP_ROLE_BASED_ERROR = "TRUE"; + parameter DISABLE_BAR_FILTERING = "FALSE"; + parameter DISABLE_ID_CHECK = "FALSE"; + parameter DISABLE_SCRAMBLING = "FALSE"; + parameter ENABLE_RX_TD_ECRC_TRIM = "FALSE"; + parameter [21:0] EXPANSION_ROM = 22'h000000; + parameter FAST_TRAIN = "FALSE"; + parameter integer GTP_SEL = 0; + parameter integer LINK_CAP_ASPM_SUPPORT = 1; + parameter integer LINK_CAP_L0S_EXIT_LATENCY = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY = 7; + parameter LINK_STATUS_SLOT_CLOCK_CONFIG = "FALSE"; + parameter [14:0] LL_ACK_TIMEOUT = 15'h0204; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter [14:0] LL_REPLAY_TIMEOUT = 15'h060D; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer MSI_CAP_MULTIMSGCAP = 0; + parameter integer MSI_CAP_MULTIMSG_EXTENSION = 0; + parameter [3:0] PCIE_CAP_CAPABILITY_VERSION = 4'h1; + parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0; + parameter [4:0] PCIE_CAP_INT_MSG_NUM = 5'b00000; + parameter PCIE_CAP_SLOT_IMPLEMENTED = "FALSE"; + parameter [11:0] PCIE_GENERIC = 12'h000; + parameter PLM_AUTO_CONFIG = "FALSE"; + parameter integer PM_CAP_AUXCURRENT = 0; + parameter PM_CAP_D1SUPPORT = "TRUE"; + parameter PM_CAP_D2SUPPORT = "TRUE"; + parameter PM_CAP_DSI = "FALSE"; + parameter [4:0] PM_CAP_PMESUPPORT = 5'b01111; + parameter PM_CAP_PME_CLOCK = "FALSE"; + parameter integer PM_CAP_VERSION = 3; + parameter [7:0] PM_DATA0 = 8'h1E; + parameter [7:0] PM_DATA1 = 8'h1E; + parameter [7:0] PM_DATA2 = 8'h1E; + parameter [7:0] PM_DATA3 = 8'h1E; + parameter [7:0] PM_DATA4 = 8'h1E; + parameter [7:0] PM_DATA5 = 8'h1E; + parameter [7:0] PM_DATA6 = 8'h1E; + parameter [7:0] PM_DATA7 = 8'h1E; + parameter [1:0] PM_DATA_SCALE0 = 2'b01; + parameter [1:0] PM_DATA_SCALE1 = 2'b01; + parameter [1:0] PM_DATA_SCALE2 = 2'b01; + parameter [1:0] PM_DATA_SCALE3 = 2'b01; + parameter [1:0] PM_DATA_SCALE4 = 2'b01; + parameter [1:0] PM_DATA_SCALE5 = 2'b01; + parameter [1:0] PM_DATA_SCALE6 = 2'b01; + parameter [1:0] PM_DATA_SCALE7 = 2'b01; + parameter SIM_VERSION = "1.0"; + parameter SLOT_CAP_ATT_BUTTON_PRESENT = "FALSE"; + parameter SLOT_CAP_ATT_INDICATOR_PRESENT = "FALSE"; + parameter SLOT_CAP_POWER_INDICATOR_PRESENT = "FALSE"; + parameter integer TL_RX_RAM_RADDR_LATENCY = 1; + parameter integer TL_RX_RAM_RDATA_LATENCY = 2; + parameter integer TL_RX_RAM_WRITE_LATENCY = 0; + parameter TL_TFC_DISABLE = "FALSE"; + parameter TL_TX_CHECKS_DISABLE = "FALSE"; + parameter integer TL_TX_RAM_RADDR_LATENCY = 0; + parameter integer TL_TX_RAM_RDATA_LATENCY = 2; + parameter USR_CFG = "FALSE"; + parameter USR_EXT_CFG = "FALSE"; + parameter VC0_CPL_INFINITE = "TRUE"; + parameter [11:0] VC0_RX_RAM_LIMIT = 12'h01E; + parameter integer VC0_TOTAL_CREDITS_CD = 104; + parameter integer VC0_TOTAL_CREDITS_CH = 36; + parameter integer VC0_TOTAL_CREDITS_NPH = 8; + parameter integer VC0_TOTAL_CREDITS_PD = 288; + parameter integer VC0_TOTAL_CREDITS_PH = 32; + parameter integer VC0_TX_LASTPACKET = 31; + output CFGCOMMANDBUSMASTERENABLE; + output CFGCOMMANDINTERRUPTDISABLE; + output CFGCOMMANDIOENABLE; + output CFGCOMMANDMEMENABLE; + output CFGCOMMANDSERREN; + output CFGDEVCONTROLAUXPOWEREN; + output CFGDEVCONTROLCORRERRREPORTINGEN; + output CFGDEVCONTROLENABLERO; + output CFGDEVCONTROLEXTTAGEN; + output CFGDEVCONTROLFATALERRREPORTINGEN; + output CFGDEVCONTROLNONFATALREPORTINGEN; + output CFGDEVCONTROLNOSNOOPEN; + output CFGDEVCONTROLPHANTOMEN; + output CFGDEVCONTROLURERRREPORTINGEN; + output CFGDEVSTATUSCORRERRDETECTED; + output CFGDEVSTATUSFATALERRDETECTED; + output CFGDEVSTATUSNONFATALERRDETECTED; + output CFGDEVSTATUSURDETECTED; + output CFGERRCPLRDYN; + output CFGINTERRUPTMSIENABLE; + output CFGINTERRUPTRDYN; + output CFGLINKCONTOLRCB; + output CFGLINKCONTROLCOMMONCLOCK; + output CFGLINKCONTROLEXTENDEDSYNC; + output CFGRDWRDONEN; + output CFGTOTURNOFFN; + output DBGBADDLLPSTATUS; + output DBGBADTLPLCRC; + output DBGBADTLPSEQNUM; + output DBGBADTLPSTATUS; + output DBGDLPROTOCOLSTATUS; + output DBGFCPROTOCOLERRSTATUS; + output DBGMLFRMDLENGTH; + output DBGMLFRMDMPS; + output DBGMLFRMDTCVC; + output DBGMLFRMDTLPSTATUS; + output DBGMLFRMDUNRECTYPE; + output DBGPOISTLPSTATUS; + output DBGRCVROVERFLOWSTATUS; + output DBGREGDETECTEDCORRECTABLE; + output DBGREGDETECTEDFATAL; + output DBGREGDETECTEDNONFATAL; + output DBGREGDETECTEDUNSUPPORTED; + output DBGRPLYROLLOVERSTATUS; + output DBGRPLYTIMEOUTSTATUS; + output DBGURNOBARHIT; + output DBGURPOISCFGWR; + output DBGURSTATUS; + output DBGURUNSUPMSG; + output MIMRXREN; + output MIMRXWEN; + output MIMTXREN; + output MIMTXWEN; + output PIPEGTTXELECIDLEA; + output PIPEGTTXELECIDLEB; + output PIPERXPOLARITYA; + output PIPERXPOLARITYB; + output PIPERXRESETA; + output PIPERXRESETB; + output PIPETXRCVRDETA; + output PIPETXRCVRDETB; + output RECEIVEDHOTRESET; + output TRNLNKUPN; + output TRNREOFN; + output TRNRERRFWDN; + output TRNRSOFN; + output TRNRSRCDSCN; + output TRNRSRCRDYN; + output TRNTCFGREQN; + output TRNTDSTRDYN; + output TRNTERRDROPN; + output USERRSTN; + output [11:0] MIMRXRADDR; + output [11:0] MIMRXWADDR; + output [11:0] MIMTXRADDR; + output [11:0] MIMTXWADDR; + output [11:0] TRNFCCPLD; + output [11:0] TRNFCNPD; + output [11:0] TRNFCPD; + output [15:0] PIPETXDATAA; + output [15:0] PIPETXDATAB; + output [1:0] CFGLINKCONTROLASPMCONTROL; + output [1:0] PIPEGTPOWERDOWNA; + output [1:0] PIPEGTPOWERDOWNB; + output [1:0] PIPETXCHARDISPMODEA; + output [1:0] PIPETXCHARDISPMODEB; + output [1:0] PIPETXCHARDISPVALA; + output [1:0] PIPETXCHARDISPVALB; + output [1:0] PIPETXCHARISKA; + output [1:0] PIPETXCHARISKB; + output [2:0] CFGDEVCONTROLMAXPAYLOAD; + output [2:0] CFGDEVCONTROLMAXREADREQ; + output [2:0] CFGFUNCTIONNUMBER; + output [2:0] CFGINTERRUPTMMENABLE; + output [2:0] CFGPCIELINKSTATEN; + output [31:0] CFGDO; + output [31:0] TRNRD; + output [34:0] MIMRXWDATA; + output [35:0] MIMTXWDATA; + output [4:0] CFGDEVICENUMBER; + output [4:0] CFGLTSSMSTATE; + output [5:0] TRNTBUFAV; + output [6:0] TRNRBARHITN; + output [7:0] CFGBUSNUMBER; + output [7:0] CFGINTERRUPTDO; + output [7:0] TRNFCCPLH; + output [7:0] TRNFCNPH; + output [7:0] TRNFCPH; + input CFGERRCORN; + input CFGERRCPLABORTN; + input CFGERRCPLTIMEOUTN; + input CFGERRECRCN; + input CFGERRLOCKEDN; + input CFGERRPOSTEDN; + input CFGERRURN; + input CFGINTERRUPTASSERTN; + input CFGINTERRUPTN; + input CFGPMWAKEN; + input CFGRDENN; + input CFGTRNPENDINGN; + input CFGTURNOFFOKN; + input CLOCKLOCKED; + input MGTCLK; + input PIPEGTRESETDONEA; + input PIPEGTRESETDONEB; + input PIPEPHYSTATUSA; + input PIPEPHYSTATUSB; + input PIPERXENTERELECIDLEA; + input PIPERXENTERELECIDLEB; + input SYSRESETN; + input TRNRDSTRDYN; + input TRNRNPOKN; + input TRNTCFGGNTN; + input TRNTEOFN; + input TRNTERRFWDN; + input TRNTSOFN; + input TRNTSRCDSCN; + input TRNTSRCRDYN; + input TRNTSTRN; + input USERCLK; + input [15:0] CFGDEVID; + input [15:0] CFGSUBSYSID; + input [15:0] CFGSUBSYSVENID; + input [15:0] CFGVENID; + input [15:0] PIPERXDATAA; + input [15:0] PIPERXDATAB; + input [1:0] PIPERXCHARISKA; + input [1:0] PIPERXCHARISKB; + input [2:0] PIPERXSTATUSA; + input [2:0] PIPERXSTATUSB; + input [2:0] TRNFCSEL; + input [31:0] TRNTD; + input [34:0] MIMRXRDATA; + input [35:0] MIMTXRDATA; + input [47:0] CFGERRTLPCPLHEADER; + input [63:0] CFGDSN; + input [7:0] CFGINTERRUPTDI; + input [7:0] CFGREVID; + input [9:0] CFGDWADDR; +endmodule + +module PCIE_EP (...); + parameter BAR0EXIST = "TRUE"; + parameter BAR0PREFETCHABLE = "TRUE"; + parameter BAR1EXIST = "FALSE"; + parameter BAR1PREFETCHABLE = "FALSE"; + parameter BAR2EXIST = "FALSE"; + parameter BAR2PREFETCHABLE = "FALSE"; + parameter BAR3EXIST = "FALSE"; + parameter BAR3PREFETCHABLE = "FALSE"; + parameter BAR4EXIST = "FALSE"; + parameter BAR4PREFETCHABLE = "FALSE"; + parameter BAR5EXIST = "FALSE"; + parameter BAR5PREFETCHABLE = "FALSE"; + parameter CLKDIVIDED = "FALSE"; + parameter INFINITECOMPLETIONS = "TRUE"; + parameter LINKSTATUSSLOTCLOCKCONFIG = "FALSE"; + parameter PBCAPABILITYSYSTEMALLOCATED = "FALSE"; + parameter PMCAPABILITYD1SUPPORT = "FALSE"; + parameter PMCAPABILITYD2SUPPORT = "FALSE"; + parameter PMCAPABILITYDSI = "TRUE"; + parameter RESETMODE = "FALSE"; + parameter [10:0] VC0TOTALCREDITSCD = 11'h0; + parameter [10:0] VC0TOTALCREDITSPD = 11'h34; + parameter [10:0] VC1TOTALCREDITSCD = 11'h0; + parameter [10:0] VC1TOTALCREDITSPD = 11'h0; + parameter [11:0] AERBASEPTR = 12'h110; + parameter [11:0] AERCAPABILITYNEXTPTR = 12'h138; + parameter [11:0] DSNBASEPTR = 12'h148; + parameter [11:0] DSNCAPABILITYNEXTPTR = 12'h154; + parameter [11:0] MSIBASEPTR = 12'h48; + parameter [11:0] PBBASEPTR = 12'h138; + parameter [11:0] PBCAPABILITYNEXTPTR = 12'h148; + parameter [11:0] PMBASEPTR = 12'h40; + parameter [11:0] RETRYRAMSIZE = 12'h9; + parameter [11:0] VCBASEPTR = 12'h154; + parameter [11:0] VCCAPABILITYNEXTPTR = 12'h0; + parameter [12:0] VC0RXFIFOBASEC = 13'h98; + parameter [12:0] VC0RXFIFOBASENP = 13'h80; + parameter [12:0] VC0RXFIFOBASEP = 13'h0; + parameter [12:0] VC0RXFIFOLIMITC = 13'h117; + parameter [12:0] VC0RXFIFOLIMITNP = 13'h97; + parameter [12:0] VC0RXFIFOLIMITP = 13'h7f; + parameter [12:0] VC0TXFIFOBASEC = 13'h98; + parameter [12:0] VC0TXFIFOBASENP = 13'h80; + parameter [12:0] VC0TXFIFOBASEP = 13'h0; + parameter [12:0] VC0TXFIFOLIMITC = 13'h117; + parameter [12:0] VC0TXFIFOLIMITNP = 13'h97; + parameter [12:0] VC0TXFIFOLIMITP = 13'h7f; + parameter [12:0] VC1RXFIFOBASEC = 13'h118; + parameter [12:0] VC1RXFIFOBASENP = 13'h118; + parameter [12:0] VC1RXFIFOBASEP = 13'h118; + parameter [12:0] VC1RXFIFOLIMITC = 13'h118; + parameter [12:0] VC1RXFIFOLIMITNP = 13'h118; + parameter [12:0] VC1RXFIFOLIMITP = 13'h118; + parameter [12:0] VC1TXFIFOBASEC = 13'h118; + parameter [12:0] VC1TXFIFOBASENP = 13'h118; + parameter [12:0] VC1TXFIFOBASEP = 13'h118; + parameter [12:0] VC1TXFIFOLIMITC = 13'h118; + parameter [12:0] VC1TXFIFOLIMITNP = 13'h118; + parameter [12:0] VC1TXFIFOLIMITP = 13'h118; + parameter [15:0] DEVICEID = 16'h5050; + parameter [15:0] SUBSYSTEMID = 16'h5050; + parameter [15:0] SUBSYSTEMVENDORID = 16'h10EE; + parameter [15:0] VENDORID = 16'h10EE; + parameter [1:0] LINKCAPABILITYASPMSUPPORT = 2'h1; + parameter [1:0] PBCAPABILITYDW0DATASCALE = 2'h0; + parameter [1:0] PBCAPABILITYDW0PMSTATE = 2'h0; + parameter [1:0] PBCAPABILITYDW1DATASCALE = 2'h0; + parameter [1:0] PBCAPABILITYDW1PMSTATE = 2'h0; + parameter [1:0] PBCAPABILITYDW2DATASCALE = 2'h0; + parameter [1:0] PBCAPABILITYDW2PMSTATE = 2'h0; + parameter [1:0] PBCAPABILITYDW3DATASCALE = 2'h0; + parameter [1:0] PBCAPABILITYDW3PMSTATE = 2'h0; + parameter [23:0] CLASSCODE = 24'h058000; + parameter [2:0] DEVICECAPABILITYENDPOINTL0SLATENCY = 3'h0; + parameter [2:0] DEVICECAPABILITYENDPOINTL1LATENCY = 3'h0; + parameter [2:0] MSICAPABILITYMULTIMSGCAP = 3'h0; + parameter [2:0] PBCAPABILITYDW0PMSUBSTATE = 3'h0; + parameter [2:0] PBCAPABILITYDW0POWERRAIL = 3'h0; + parameter [2:0] PBCAPABILITYDW0TYPE = 3'h0; + parameter [2:0] PBCAPABILITYDW1PMSUBSTATE = 3'h0; + parameter [2:0] PBCAPABILITYDW1POWERRAIL = 3'h0; + parameter [2:0] PBCAPABILITYDW1TYPE = 3'h0; + parameter [2:0] PBCAPABILITYDW2PMSUBSTATE = 3'h0; + parameter [2:0] PBCAPABILITYDW2POWERRAIL = 3'h0; + parameter [2:0] PBCAPABILITYDW2TYPE = 3'h0; + parameter [2:0] PBCAPABILITYDW3PMSUBSTATE = 3'h0; + parameter [2:0] PBCAPABILITYDW3POWERRAIL = 3'h0; + parameter [2:0] PBCAPABILITYDW3TYPE = 3'h0; + parameter [2:0] PMCAPABILITYAUXCURRENT = 3'h0; + parameter [2:0] PORTVCCAPABILITYEXTENDEDVCCOUNT = 3'h0; + parameter [31:0] CARDBUSCISPOINTER = 32'h0; + parameter [3:0] XPDEVICEPORTTYPE = 4'h0; + parameter [4:0] PMCAPABILITYPMESUPPORT = 5'h0; + parameter [5:0] BAR0MASKWIDTH = 6'h14; + parameter [5:0] BAR1MASKWIDTH = 6'h0; + parameter [5:0] BAR2MASKWIDTH = 6'h0; + parameter [5:0] BAR3MASKWIDTH = 6'h0; + parameter [5:0] BAR4MASKWIDTH = 6'h0; + parameter [5:0] BAR5MASKWIDTH = 6'h0; + parameter [5:0] LINKCAPABILITYMAXLINKWIDTH = 6'h01; + parameter [63:0] DEVICESERIALNUMBER = 64'hE000000001000A35; + parameter [6:0] VC0TOTALCREDITSCH = 7'h0; + parameter [6:0] VC0TOTALCREDITSNPH = 7'h08; + parameter [6:0] VC0TOTALCREDITSPH = 7'h08; + parameter [6:0] VC1TOTALCREDITSCH = 7'h0; + parameter [6:0] VC1TOTALCREDITSNPH = 7'h0; + parameter [6:0] VC1TOTALCREDITSPH = 7'h0; + parameter [7:0] ACTIVELANESIN = 8'h1; + parameter [7:0] CAPABILITIESPOINTER = 8'h40; + parameter [7:0] INTERRUPTPIN = 8'h0; + parameter [7:0] MSICAPABILITYNEXTPTR = 8'h60; + parameter [7:0] PBCAPABILITYDW0BASEPOWER = 8'h0; + parameter [7:0] PBCAPABILITYDW1BASEPOWER = 8'h0; + parameter [7:0] PBCAPABILITYDW2BASEPOWER = 8'h0; + parameter [7:0] PBCAPABILITYDW3BASEPOWER = 8'h0; + parameter [7:0] PCIECAPABILITYNEXTPTR = 8'h0; + parameter [7:0] PMCAPABILITYNEXTPTR = 8'h60; + parameter [7:0] PMDATA0 = 8'h0; + parameter [7:0] PMDATA1 = 8'h0; + parameter [7:0] PMDATA2 = 8'h0; + parameter [7:0] PMDATA3 = 8'h0; + parameter [7:0] PMDATA4 = 8'h0; + parameter [7:0] PMDATA5 = 8'h0; + parameter [7:0] PMDATA6 = 8'h0; + parameter [7:0] PMDATA7 = 8'h0; + parameter [7:0] PORTVCCAPABILITYVCARBCAP = 8'h0; + parameter [7:0] PORTVCCAPABILITYVCARBTABLEOFFSET = 8'h0; + parameter [7:0] REVISIONID = 8'h0; + parameter [7:0] XPBASEPTR = 8'h60; + parameter BAR0ADDRWIDTH = 0; + parameter BAR0IOMEMN = 0; + parameter BAR1ADDRWIDTH = 0; + parameter BAR1IOMEMN = 0; + parameter BAR2ADDRWIDTH = 0; + parameter BAR2IOMEMN = 0; + parameter BAR3ADDRWIDTH = 0; + parameter BAR3IOMEMN = 0; + parameter BAR4ADDRWIDTH = 0; + parameter BAR4IOMEMN = 0; + parameter BAR5IOMEMN = 0; + parameter L0SEXITLATENCY = 7; + parameter L0SEXITLATENCYCOMCLK = 7; + parameter L1EXITLATENCY = 7; + parameter L1EXITLATENCYCOMCLK = 7; + parameter LOWPRIORITYVCCOUNT = 0; + parameter PMDATASCALE0 = 0; + parameter PMDATASCALE1 = 0; + parameter PMDATASCALE2 = 0; + parameter PMDATASCALE3 = 0; + parameter PMDATASCALE4 = 0; + parameter PMDATASCALE5 = 0; + parameter PMDATASCALE6 = 0; + parameter PMDATASCALE7 = 0; + parameter RETRYRAMREADLATENCY = 3; + parameter RETRYRAMWRITELATENCY = 1; + parameter TLRAMREADLATENCY = 3; + parameter TLRAMWRITELATENCY = 1; + parameter TXTSNFTS = 255; + parameter TXTSNFTSCOMCLK = 255; + parameter XPMAXPAYLOAD = 0; + output BUSMASTERENABLE; + output CRMDOHOTRESETN; + output CRMPWRSOFTRESETN; + output DLLTXPMDLLPOUTSTANDING; + output INTERRUPTDISABLE; + output IOSPACEENABLE; + output L0CFGLOOPBACKACK; + output L0DLLRXACKOUTSTANDING; + output L0DLLTXNONFCOUTSTANDING; + output L0DLLTXOUTSTANDING; + output L0FIRSTCFGWRITEOCCURRED; + output L0MACENTEREDL0; + output L0MACLINKTRAINING; + output L0MACLINKUP; + output L0MACNEWSTATEACK; + output L0MACRXL0SSTATE; + output L0MSIENABLE0; + output L0PMEACK; + output L0PMEEN; + output L0PMEREQOUT; + output L0PWRL1STATE; + output L0PWRL23READYSTATE; + output L0PWRTURNOFFREQ; + output L0PWRTXL0SSTATE; + output L0RXDLLPM; + output L0STATSCFGOTHERRECEIVED; + output L0STATSCFGOTHERTRANSMITTED; + output L0STATSCFGRECEIVED; + output L0STATSCFGTRANSMITTED; + output L0STATSDLLPRECEIVED; + output L0STATSDLLPTRANSMITTED; + output L0STATSOSRECEIVED; + output L0STATSOSTRANSMITTED; + output L0STATSTLPRECEIVED; + output L0STATSTLPTRANSMITTED; + output L0UNLOCKRECEIVED; + output LLKRXEOFN; + output LLKRXEOPN; + output LLKRXSOFN; + output LLKRXSOPN; + output LLKRXSRCLASTREQN; + output LLKRXSRCRDYN; + output LLKTXCONFIGREADYN; + output LLKTXDSTRDYN; + output MEMSPACEENABLE; + output MIMDLLBREN; + output MIMDLLBWEN; + output MIMRXBREN; + output MIMRXBWEN; + output MIMTXBREN; + output MIMTXBWEN; + output PARITYERRORRESPONSE; + output PIPEDESKEWLANESL0; + output PIPEDESKEWLANESL1; + output PIPEDESKEWLANESL2; + output PIPEDESKEWLANESL3; + output PIPEDESKEWLANESL4; + output PIPEDESKEWLANESL5; + output PIPEDESKEWLANESL6; + output PIPEDESKEWLANESL7; + output PIPERESETL0; + output PIPERESETL1; + output PIPERESETL2; + output PIPERESETL3; + output PIPERESETL4; + output PIPERESETL5; + output PIPERESETL6; + output PIPERESETL7; + output PIPERXPOLARITYL0; + output PIPERXPOLARITYL1; + output PIPERXPOLARITYL2; + output PIPERXPOLARITYL3; + output PIPERXPOLARITYL4; + output PIPERXPOLARITYL5; + output PIPERXPOLARITYL6; + output PIPERXPOLARITYL7; + output PIPETXCOMPLIANCEL0; + output PIPETXCOMPLIANCEL1; + output PIPETXCOMPLIANCEL2; + output PIPETXCOMPLIANCEL3; + output PIPETXCOMPLIANCEL4; + output PIPETXCOMPLIANCEL5; + output PIPETXCOMPLIANCEL6; + output PIPETXCOMPLIANCEL7; + output PIPETXDATAKL0; + output PIPETXDATAKL1; + output PIPETXDATAKL2; + output PIPETXDATAKL3; + output PIPETXDATAKL4; + output PIPETXDATAKL5; + output PIPETXDATAKL6; + output PIPETXDATAKL7; + output PIPETXDETECTRXLOOPBACKL0; + output PIPETXDETECTRXLOOPBACKL1; + output PIPETXDETECTRXLOOPBACKL2; + output PIPETXDETECTRXLOOPBACKL3; + output PIPETXDETECTRXLOOPBACKL4; + output PIPETXDETECTRXLOOPBACKL5; + output PIPETXDETECTRXLOOPBACKL6; + output PIPETXDETECTRXLOOPBACKL7; + output PIPETXELECIDLEL0; + output PIPETXELECIDLEL1; + output PIPETXELECIDLEL2; + output PIPETXELECIDLEL3; + output PIPETXELECIDLEL4; + output PIPETXELECIDLEL5; + output PIPETXELECIDLEL6; + output PIPETXELECIDLEL7; + output SERRENABLE; + output URREPORTINGENABLE; + output [11:0] MGMTSTATSCREDIT; + output [11:0] MIMDLLBRADD; + output [11:0] MIMDLLBWADD; + output [12:0] L0COMPLETERID; + output [12:0] MIMRXBRADD; + output [12:0] MIMRXBWADD; + output [12:0] MIMTXBRADD; + output [12:0] MIMTXBWADD; + output [15:0] LLKRXPREFERREDTYPE; + output [16:0] MGMTPSO; + output [1:0] L0PWRSTATE0; + output [1:0] L0RXMACLINKERROR; + output [1:0] LLKRXVALIDN; + output [1:0] PIPEPOWERDOWNL0; + output [1:0] PIPEPOWERDOWNL1; + output [1:0] PIPEPOWERDOWNL2; + output [1:0] PIPEPOWERDOWNL3; + output [1:0] PIPEPOWERDOWNL4; + output [1:0] PIPEPOWERDOWNL5; + output [1:0] PIPEPOWERDOWNL6; + output [1:0] PIPEPOWERDOWNL7; + output [2:0] L0MULTIMSGEN0; + output [2:0] L0RXDLLPMTYPE; + output [2:0] MAXPAYLOADSIZE; + output [2:0] MAXREADREQUESTSIZE; + output [31:0] MGMTRDATA; + output [3:0] L0LTSSMSTATE; + output [3:0] L0MACNEGOTIATEDLINKWIDTH; + output [63:0] LLKRXDATA; + output [63:0] MIMDLLBWDATA; + output [63:0] MIMRXBWDATA; + output [63:0] MIMTXBWDATA; + output [6:0] L0DLLERRORVECTOR; + output [7:0] L0DLLVCSTATUS; + output [7:0] L0DLUPDOWN; + output [7:0] LLKRXCHCOMPLETIONAVAILABLEN; + output [7:0] LLKRXCHNONPOSTEDAVAILABLEN; + output [7:0] LLKRXCHPOSTEDAVAILABLEN; + output [7:0] LLKTCSTATUS; + output [7:0] LLKTXCHCOMPLETIONREADYN; + output [7:0] LLKTXCHNONPOSTEDREADYN; + output [7:0] LLKTXCHPOSTEDREADYN; + output [7:0] PIPETXDATAL0; + output [7:0] PIPETXDATAL1; + output [7:0] PIPETXDATAL2; + output [7:0] PIPETXDATAL3; + output [7:0] PIPETXDATAL4; + output [7:0] PIPETXDATAL5; + output [7:0] PIPETXDATAL6; + output [7:0] PIPETXDATAL7; + output [9:0] LLKTXCHANSPACE; + input AUXPOWER; + input COMPLIANCEAVOID; + input CRMCORECLK; + input CRMCORECLKDLO; + input CRMCORECLKRXO; + input CRMCORECLKTXO; + input CRMLINKRSTN; + input CRMMACRSTN; + input CRMMGMTRSTN; + input CRMNVRSTN; + input CRMURSTN; + input CRMUSERCFGRSTN; + input CRMUSERCLK; + input CRMUSERCLKRXO; + input CRMUSERCLKTXO; + input L0CFGDISABLESCRAMBLE; + input L0CFGLOOPBACKMASTER; + input L0LEGACYINTFUNCT0; + input L0PMEREQIN; + input L0SETCOMPLETERABORTERROR; + input L0SETCOMPLETIONTIMEOUTCORRERROR; + input L0SETCOMPLETIONTIMEOUTUNCORRERROR; + input L0SETDETECTEDCORRERROR; + input L0SETDETECTEDFATALERROR; + input L0SETDETECTEDNONFATALERROR; + input L0SETUNEXPECTEDCOMPLETIONCORRERROR; + input L0SETUNEXPECTEDCOMPLETIONUNCORRERROR; + input L0SETUNSUPPORTEDREQUESTNONPOSTEDERROR; + input L0SETUNSUPPORTEDREQUESTOTHERERROR; + input L0SETUSERDETECTEDPARITYERROR; + input L0SETUSERMASTERDATAPARITY; + input L0SETUSERRECEIVEDMASTERABORT; + input L0SETUSERRECEIVEDTARGETABORT; + input L0SETUSERSIGNALLEDTARGETABORT; + input L0SETUSERSYSTEMERROR; + input L0TRANSACTIONSPENDING; + input LLKRXDSTCONTREQN; + input LLKRXDSTREQN; + input LLKTXEOFN; + input LLKTXEOPN; + input LLKTXSOFN; + input LLKTXSOPN; + input LLKTXSRCDSCN; + input LLKTXSRCRDYN; + input MGMTRDEN; + input MGMTWREN; + input PIPEPHYSTATUSL0; + input PIPEPHYSTATUSL1; + input PIPEPHYSTATUSL2; + input PIPEPHYSTATUSL3; + input PIPEPHYSTATUSL4; + input PIPEPHYSTATUSL5; + input PIPEPHYSTATUSL6; + input PIPEPHYSTATUSL7; + input PIPERXCHANISALIGNEDL0; + input PIPERXCHANISALIGNEDL1; + input PIPERXCHANISALIGNEDL2; + input PIPERXCHANISALIGNEDL3; + input PIPERXCHANISALIGNEDL4; + input PIPERXCHANISALIGNEDL5; + input PIPERXCHANISALIGNEDL6; + input PIPERXCHANISALIGNEDL7; + input PIPERXDATAKL0; + input PIPERXDATAKL1; + input PIPERXDATAKL2; + input PIPERXDATAKL3; + input PIPERXDATAKL4; + input PIPERXDATAKL5; + input PIPERXDATAKL6; + input PIPERXDATAKL7; + input PIPERXELECIDLEL0; + input PIPERXELECIDLEL1; + input PIPERXELECIDLEL2; + input PIPERXELECIDLEL3; + input PIPERXELECIDLEL4; + input PIPERXELECIDLEL5; + input PIPERXELECIDLEL6; + input PIPERXELECIDLEL7; + input PIPERXVALIDL0; + input PIPERXVALIDL1; + input PIPERXVALIDL2; + input PIPERXVALIDL3; + input PIPERXVALIDL4; + input PIPERXVALIDL5; + input PIPERXVALIDL6; + input PIPERXVALIDL7; + input [10:0] MGMTADDR; + input [127:0] L0PACKETHEADERFROMUSER; + input [1:0] LLKRXCHFIFO; + input [1:0] LLKTXCHFIFO; + input [1:0] LLKTXENABLEN; + input [2:0] LLKRXCHTC; + input [2:0] LLKTXCHTC; + input [2:0] PIPERXSTATUSL0; + input [2:0] PIPERXSTATUSL1; + input [2:0] PIPERXSTATUSL2; + input [2:0] PIPERXSTATUSL3; + input [2:0] PIPERXSTATUSL4; + input [2:0] PIPERXSTATUSL5; + input [2:0] PIPERXSTATUSL6; + input [2:0] PIPERXSTATUSL7; + input [31:0] MGMTWDATA; + input [3:0] L0MSIREQUEST0; + input [3:0] MGMTBWREN; + input [63:0] LLKTXDATA; + input [63:0] MIMDLLBRDATA; + input [63:0] MIMRXBRDATA; + input [63:0] MIMTXBRDATA; + input [6:0] MGMTSTATSCREDITSEL; + input [7:0] PIPERXDATAL0; + input [7:0] PIPERXDATAL1; + input [7:0] PIPERXDATAL2; + input [7:0] PIPERXDATAL3; + input [7:0] PIPERXDATAL4; + input [7:0] PIPERXDATAL5; + input [7:0] PIPERXDATAL6; + input [7:0] PIPERXDATAL7; +endmodule + +module PCIE_2_0 (...); + parameter [11:0] AER_BASE_PTR = 12'h128; + parameter AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [15:0] AER_CAP_ID = 16'h0001; + parameter [4:0] AER_CAP_INT_MSG_NUM_MSI = 5'h0A; + parameter [4:0] AER_CAP_INT_MSG_NUM_MSIX = 5'h15; + parameter [11:0] AER_CAP_NEXTPTR = 12'h160; + parameter AER_CAP_ON = "FALSE"; + parameter AER_CAP_PERMIT_ROOTERR_UPDATE = "TRUE"; + parameter [3:0] AER_CAP_VERSION = 4'h1; + parameter ALLOW_X8_GEN2 = "FALSE"; + parameter [31:0] BAR0 = 32'hFFFFFF00; + parameter [31:0] BAR1 = 32'hFFFF0000; + parameter [31:0] BAR2 = 32'hFFFF000C; + parameter [31:0] BAR3 = 32'hFFFFFFFF; + parameter [31:0] BAR4 = 32'h00000000; + parameter [31:0] BAR5 = 32'h00000000; + parameter [7:0] CAPABILITIES_PTR = 8'h40; + parameter [31:0] CARDBUS_CIS_POINTER = 32'h00000000; + parameter [23:0] CLASS_CODE = 24'h000000; + parameter CMD_INTX_IMPLEMENTED = "TRUE"; + parameter CPL_TIMEOUT_DISABLE_SUPPORTED = "FALSE"; + parameter [3:0] CPL_TIMEOUT_RANGES_SUPPORTED = 4'h0; + parameter [6:0] CRM_MODULE_RSTS = 7'h00; + parameter [15:0] DEVICE_ID = 16'h0007; + parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_SCALE = "TRUE"; + parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_VALUE = "TRUE"; + parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 0; + parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 0; + parameter DEV_CAP_EXT_TAG_SUPPORTED = "TRUE"; + parameter DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "FALSE"; + parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2; + parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0; + parameter DEV_CAP_ROLE_BASED_ERROR = "TRUE"; + parameter integer DEV_CAP_RSVD_14_12 = 0; + parameter integer DEV_CAP_RSVD_17_16 = 0; + parameter integer DEV_CAP_RSVD_31_29 = 0; + parameter DEV_CONTROL_AUX_POWER_SUPPORTED = "FALSE"; + parameter DISABLE_ASPM_L1_TIMER = "FALSE"; + parameter DISABLE_BAR_FILTERING = "FALSE"; + parameter DISABLE_ID_CHECK = "FALSE"; + parameter DISABLE_LANE_REVERSAL = "FALSE"; + parameter DISABLE_RX_TC_FILTER = "FALSE"; + parameter DISABLE_SCRAMBLING = "FALSE"; + parameter [7:0] DNSTREAM_LINK_NUM = 8'h00; + parameter [11:0] DSN_BASE_PTR = 12'h100; + parameter [15:0] DSN_CAP_ID = 16'h0003; + parameter [11:0] DSN_CAP_NEXTPTR = 12'h000; + parameter DSN_CAP_ON = "TRUE"; + parameter [3:0] DSN_CAP_VERSION = 4'h1; + parameter [10:0] ENABLE_MSG_ROUTE = 11'h000; + parameter ENABLE_RX_TD_ECRC_TRIM = "FALSE"; + parameter ENTER_RVRY_EI_L0 = "TRUE"; + parameter EXIT_LOOPBACK_ON_EI = "TRUE"; + parameter [31:0] EXPANSION_ROM = 32'hFFFFF001; + parameter [5:0] EXT_CFG_CAP_PTR = 6'h3F; + parameter [9:0] EXT_CFG_XP_CAP_PTR = 10'h3FF; + parameter [7:0] HEADER_TYPE = 8'h00; + parameter [4:0] INFER_EI = 5'h00; + parameter [7:0] INTERRUPT_PIN = 8'h01; + parameter IS_SWITCH = "FALSE"; + parameter [9:0] LAST_CONFIG_DWORD = 10'h042; + parameter integer LINK_CAP_ASPM_SUPPORT = 1; + parameter LINK_CAP_CLOCK_POWER_MANAGEMENT = "FALSE"; + parameter LINK_CAP_DLL_LINK_ACTIVE_REPORTING_CAP = "FALSE"; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7; + parameter LINK_CAP_LINK_BANDWIDTH_NOTIFICATION_CAP = "FALSE"; + parameter [3:0] LINK_CAP_MAX_LINK_SPEED = 4'h1; + parameter [5:0] LINK_CAP_MAX_LINK_WIDTH = 6'h08; + parameter integer LINK_CAP_RSVD_23_22 = 0; + parameter LINK_CAP_SURPRISE_DOWN_ERROR_CAPABLE = "FALSE"; + parameter integer LINK_CONTROL_RCB = 0; + parameter LINK_CTRL2_DEEMPHASIS = "FALSE"; + parameter LINK_CTRL2_HW_AUTONOMOUS_SPEED_DISABLE = "FALSE"; + parameter [3:0] LINK_CTRL2_TARGET_LINK_SPEED = 4'h2; + parameter LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE"; + parameter [14:0] LL_ACK_TIMEOUT = 15'h0000; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter integer LL_ACK_TIMEOUT_FUNC = 0; + parameter [14:0] LL_REPLAY_TIMEOUT = 15'h0000; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer LL_REPLAY_TIMEOUT_FUNC = 0; + parameter [5:0] LTSSM_MAX_LINK_WIDTH = 6'h01; + parameter [7:0] MSIX_BASE_PTR = 8'h9C; + parameter [7:0] MSIX_CAP_ID = 8'h11; + parameter [7:0] MSIX_CAP_NEXTPTR = 8'h00; + parameter MSIX_CAP_ON = "FALSE"; + parameter integer MSIX_CAP_PBA_BIR = 0; + parameter [28:0] MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] MSI_BASE_PTR = 8'h48; + parameter MSI_CAP_64_BIT_ADDR_CAPABLE = "TRUE"; + parameter [7:0] MSI_CAP_ID = 8'h05; + parameter integer MSI_CAP_MULTIMSGCAP = 0; + parameter integer MSI_CAP_MULTIMSG_EXTENSION = 0; + parameter [7:0] MSI_CAP_NEXTPTR = 8'h60; + parameter MSI_CAP_ON = "FALSE"; + parameter MSI_CAP_PER_VECTOR_MASKING_CAPABLE = "TRUE"; + parameter integer N_FTS_COMCLK_GEN1 = 255; + parameter integer N_FTS_COMCLK_GEN2 = 255; + parameter integer N_FTS_GEN1 = 255; + parameter integer N_FTS_GEN2 = 255; + parameter [7:0] PCIE_BASE_PTR = 8'h60; + parameter [7:0] PCIE_CAP_CAPABILITY_ID = 8'h10; + parameter [3:0] PCIE_CAP_CAPABILITY_VERSION = 4'h2; + parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0; + parameter [4:0] PCIE_CAP_INT_MSG_NUM = 5'h00; + parameter [7:0] PCIE_CAP_NEXTPTR = 8'h00; + parameter PCIE_CAP_ON = "TRUE"; + parameter integer PCIE_CAP_RSVD_15_14 = 0; + parameter PCIE_CAP_SLOT_IMPLEMENTED = "FALSE"; + parameter integer PCIE_REVISION = 2; + parameter integer PGL0_LANE = 0; + parameter integer PGL1_LANE = 1; + parameter integer PGL2_LANE = 2; + parameter integer PGL3_LANE = 3; + parameter integer PGL4_LANE = 4; + parameter integer PGL5_LANE = 5; + parameter integer PGL6_LANE = 6; + parameter integer PGL7_LANE = 7; + parameter integer PL_AUTO_CONFIG = 0; + parameter PL_FAST_TRAIN = "FALSE"; + parameter [7:0] PM_BASE_PTR = 8'h40; + parameter integer PM_CAP_AUXCURRENT = 0; + parameter PM_CAP_D1SUPPORT = "TRUE"; + parameter PM_CAP_D2SUPPORT = "TRUE"; + parameter PM_CAP_DSI = "FALSE"; + parameter [7:0] PM_CAP_ID = 8'h01; + parameter [7:0] PM_CAP_NEXTPTR = 8'h48; + parameter PM_CAP_ON = "TRUE"; + parameter [4:0] PM_CAP_PMESUPPORT = 5'h0F; + parameter PM_CAP_PME_CLOCK = "FALSE"; + parameter integer PM_CAP_RSVD_04 = 0; + parameter integer PM_CAP_VERSION = 3; + parameter PM_CSR_B2B3 = "FALSE"; + parameter PM_CSR_BPCCEN = "FALSE"; + parameter PM_CSR_NOSOFTRST = "TRUE"; + parameter [7:0] PM_DATA0 = 8'h01; + parameter [7:0] PM_DATA1 = 8'h01; + parameter [7:0] PM_DATA2 = 8'h01; + parameter [7:0] PM_DATA3 = 8'h01; + parameter [7:0] PM_DATA4 = 8'h01; + parameter [7:0] PM_DATA5 = 8'h01; + parameter [7:0] PM_DATA6 = 8'h01; + parameter [7:0] PM_DATA7 = 8'h01; + parameter [1:0] PM_DATA_SCALE0 = 2'h1; + parameter [1:0] PM_DATA_SCALE1 = 2'h1; + parameter [1:0] PM_DATA_SCALE2 = 2'h1; + parameter [1:0] PM_DATA_SCALE3 = 2'h1; + parameter [1:0] PM_DATA_SCALE4 = 2'h1; + parameter [1:0] PM_DATA_SCALE5 = 2'h1; + parameter [1:0] PM_DATA_SCALE6 = 2'h1; + parameter [1:0] PM_DATA_SCALE7 = 2'h1; + parameter integer RECRC_CHK = 0; + parameter RECRC_CHK_TRIM = "FALSE"; + parameter [7:0] REVISION_ID = 8'h00; + parameter ROOT_CAP_CRS_SW_VISIBILITY = "FALSE"; + parameter SELECT_DLL_IF = "FALSE"; + parameter SIM_VERSION = "1.0"; + parameter SLOT_CAP_ATT_BUTTON_PRESENT = "FALSE"; + parameter SLOT_CAP_ATT_INDICATOR_PRESENT = "FALSE"; + parameter SLOT_CAP_ELEC_INTERLOCK_PRESENT = "FALSE"; + parameter SLOT_CAP_HOTPLUG_CAPABLE = "FALSE"; + parameter SLOT_CAP_HOTPLUG_SURPRISE = "FALSE"; + parameter SLOT_CAP_MRL_SENSOR_PRESENT = "FALSE"; + parameter SLOT_CAP_NO_CMD_COMPLETED_SUPPORT = "FALSE"; + parameter [12:0] SLOT_CAP_PHYSICAL_SLOT_NUM = 13'h0000; + parameter SLOT_CAP_POWER_CONTROLLER_PRESENT = "FALSE"; + parameter SLOT_CAP_POWER_INDICATOR_PRESENT = "FALSE"; + parameter integer SLOT_CAP_SLOT_POWER_LIMIT_SCALE = 0; + parameter [7:0] SLOT_CAP_SLOT_POWER_LIMIT_VALUE = 8'h00; + parameter integer SPARE_BIT0 = 0; + parameter integer SPARE_BIT1 = 0; + parameter integer SPARE_BIT2 = 0; + parameter integer SPARE_BIT3 = 0; + parameter integer SPARE_BIT4 = 0; + parameter integer SPARE_BIT5 = 0; + parameter integer SPARE_BIT6 = 0; + parameter integer SPARE_BIT7 = 0; + parameter integer SPARE_BIT8 = 0; + parameter [7:0] SPARE_BYTE0 = 8'h00; + parameter [7:0] SPARE_BYTE1 = 8'h00; + parameter [7:0] SPARE_BYTE2 = 8'h00; + parameter [7:0] SPARE_BYTE3 = 8'h00; + parameter [31:0] SPARE_WORD0 = 32'h00000000; + parameter [31:0] SPARE_WORD1 = 32'h00000000; + parameter [31:0] SPARE_WORD2 = 32'h00000000; + parameter [31:0] SPARE_WORD3 = 32'h00000000; + parameter [15:0] SUBSYSTEM_ID = 16'h0007; + parameter [15:0] SUBSYSTEM_VENDOR_ID = 16'h10EE; + parameter TL_RBYPASS = "FALSE"; + parameter integer TL_RX_RAM_RADDR_LATENCY = 0; + parameter integer TL_RX_RAM_RDATA_LATENCY = 2; + parameter integer TL_RX_RAM_WRITE_LATENCY = 0; + parameter TL_TFC_DISABLE = "FALSE"; + parameter TL_TX_CHECKS_DISABLE = "FALSE"; + parameter integer TL_TX_RAM_RADDR_LATENCY = 0; + parameter integer TL_TX_RAM_RDATA_LATENCY = 2; + parameter integer TL_TX_RAM_WRITE_LATENCY = 0; + parameter UPCONFIG_CAPABLE = "TRUE"; + parameter UPSTREAM_FACING = "TRUE"; + parameter UR_INV_REQ = "TRUE"; + parameter integer USER_CLK_FREQ = 3; + parameter VC0_CPL_INFINITE = "TRUE"; + parameter [12:0] VC0_RX_RAM_LIMIT = 13'h03FF; + parameter integer VC0_TOTAL_CREDITS_CD = 127; + parameter integer VC0_TOTAL_CREDITS_CH = 31; + parameter integer VC0_TOTAL_CREDITS_NPH = 12; + parameter integer VC0_TOTAL_CREDITS_PD = 288; + parameter integer VC0_TOTAL_CREDITS_PH = 32; + parameter integer VC0_TX_LASTPACKET = 31; + parameter [11:0] VC_BASE_PTR = 12'h10C; + parameter [15:0] VC_CAP_ID = 16'h0002; + parameter [11:0] VC_CAP_NEXTPTR = 12'h000; + parameter VC_CAP_ON = "FALSE"; + parameter VC_CAP_REJECT_SNOOP_TRANSACTIONS = "FALSE"; + parameter [3:0] VC_CAP_VERSION = 4'h1; + parameter [15:0] VENDOR_ID = 16'h10EE; + parameter [11:0] VSEC_BASE_PTR = 12'h160; + parameter [15:0] VSEC_CAP_HDR_ID = 16'h1234; + parameter [11:0] VSEC_CAP_HDR_LENGTH = 12'h018; + parameter [3:0] VSEC_CAP_HDR_REVISION = 4'h1; + parameter [15:0] VSEC_CAP_ID = 16'h000B; + parameter VSEC_CAP_IS_LINK_VISIBLE = "TRUE"; + parameter [11:0] VSEC_CAP_NEXTPTR = 12'h000; + parameter VSEC_CAP_ON = "FALSE"; + parameter [3:0] VSEC_CAP_VERSION = 4'h1; + output CFGAERECRCCHECKEN; + output CFGAERECRCGENEN; + output CFGCOMMANDBUSMASTERENABLE; + output CFGCOMMANDINTERRUPTDISABLE; + output CFGCOMMANDIOENABLE; + output CFGCOMMANDMEMENABLE; + output CFGCOMMANDSERREN; + output CFGDEVCONTROL2CPLTIMEOUTDIS; + output CFGDEVCONTROLAUXPOWEREN; + output CFGDEVCONTROLCORRERRREPORTINGEN; + output CFGDEVCONTROLENABLERO; + output CFGDEVCONTROLEXTTAGEN; + output CFGDEVCONTROLFATALERRREPORTINGEN; + output CFGDEVCONTROLNONFATALREPORTINGEN; + output CFGDEVCONTROLNOSNOOPEN; + output CFGDEVCONTROLPHANTOMEN; + output CFGDEVCONTROLURERRREPORTINGEN; + output CFGDEVSTATUSCORRERRDETECTED; + output CFGDEVSTATUSFATALERRDETECTED; + output CFGDEVSTATUSNONFATALERRDETECTED; + output CFGDEVSTATUSURDETECTED; + output CFGERRAERHEADERLOGSETN; + output CFGERRCPLRDYN; + output CFGINTERRUPTMSIENABLE; + output CFGINTERRUPTMSIXENABLE; + output CFGINTERRUPTMSIXFM; + output CFGINTERRUPTRDYN; + output CFGLINKCONTROLAUTOBANDWIDTHINTEN; + output CFGLINKCONTROLBANDWIDTHINTEN; + output CFGLINKCONTROLCLOCKPMEN; + output CFGLINKCONTROLCOMMONCLOCK; + output CFGLINKCONTROLEXTENDEDSYNC; + output CFGLINKCONTROLHWAUTOWIDTHDIS; + output CFGLINKCONTROLLINKDISABLE; + output CFGLINKCONTROLRCB; + output CFGLINKCONTROLRETRAINLINK; + output CFGLINKSTATUSAUTOBANDWIDTHSTATUS; + output CFGLINKSTATUSBANDWITHSTATUS; + output CFGLINKSTATUSDLLACTIVE; + output CFGLINKSTATUSLINKTRAINING; + output CFGMSGRECEIVED; + output CFGMSGRECEIVEDASSERTINTA; + output CFGMSGRECEIVEDASSERTINTB; + output CFGMSGRECEIVEDASSERTINTC; + output CFGMSGRECEIVEDASSERTINTD; + output CFGMSGRECEIVEDDEASSERTINTA; + output CFGMSGRECEIVEDDEASSERTINTB; + output CFGMSGRECEIVEDDEASSERTINTC; + output CFGMSGRECEIVEDDEASSERTINTD; + output CFGMSGRECEIVEDERRCOR; + output CFGMSGRECEIVEDERRFATAL; + output CFGMSGRECEIVEDERRNONFATAL; + output CFGMSGRECEIVEDPMASNAK; + output CFGMSGRECEIVEDPMETO; + output CFGMSGRECEIVEDPMETOACK; + output CFGMSGRECEIVEDPMPME; + output CFGMSGRECEIVEDSETSLOTPOWERLIMIT; + output CFGMSGRECEIVEDUNLOCK; + output CFGPMCSRPMEEN; + output CFGPMCSRPMESTATUS; + output CFGPMRCVASREQL1N; + output CFGPMRCVENTERL1N; + output CFGPMRCVENTERL23N; + output CFGPMRCVREQACKN; + output CFGRDWRDONEN; + output CFGSLOTCONTROLELECTROMECHILCTLPULSE; + output CFGTRANSACTION; + output CFGTRANSACTIONTYPE; + output DBGSCLRA; + output DBGSCLRB; + output DBGSCLRC; + output DBGSCLRD; + output DBGSCLRE; + output DBGSCLRF; + output DBGSCLRG; + output DBGSCLRH; + output DBGSCLRI; + output DBGSCLRJ; + output DBGSCLRK; + output DRPDRDY; + output LL2BADDLLPERRN; + output LL2BADTLPERRN; + output LL2PROTOCOLERRN; + output LL2REPLAYROERRN; + output LL2REPLAYTOERRN; + output LL2SUSPENDOKN; + output LL2TFCINIT1SEQN; + output LL2TFCINIT2SEQN; + output LNKCLKEN; + output MIMRXRCE; + output MIMRXREN; + output MIMRXWEN; + output MIMTXRCE; + output MIMTXREN; + output MIMTXWEN; + output PIPERX0POLARITY; + output PIPERX1POLARITY; + output PIPERX2POLARITY; + output PIPERX3POLARITY; + output PIPERX4POLARITY; + output PIPERX5POLARITY; + output PIPERX6POLARITY; + output PIPERX7POLARITY; + output PIPETX0COMPLIANCE; + output PIPETX0ELECIDLE; + output PIPETX1COMPLIANCE; + output PIPETX1ELECIDLE; + output PIPETX2COMPLIANCE; + output PIPETX2ELECIDLE; + output PIPETX3COMPLIANCE; + output PIPETX3ELECIDLE; + output PIPETX4COMPLIANCE; + output PIPETX4ELECIDLE; + output PIPETX5COMPLIANCE; + output PIPETX5ELECIDLE; + output PIPETX6COMPLIANCE; + output PIPETX6ELECIDLE; + output PIPETX7COMPLIANCE; + output PIPETX7ELECIDLE; + output PIPETXDEEMPH; + output PIPETXRATE; + output PIPETXRCVRDET; + output PIPETXRESET; + output PL2LINKUPN; + output PL2RECEIVERERRN; + output PL2RECOVERYN; + output PL2RXELECIDLE; + output PL2SUSPENDOK; + output PLLINKGEN2CAP; + output PLLINKPARTNERGEN2SUPPORTED; + output PLLINKUPCFGCAP; + output PLPHYLNKUPN; + output PLRECEIVEDHOTRST; + output PLSELLNKRATE; + output RECEIVEDFUNCLVLRSTN; + output TL2ASPMSUSPENDCREDITCHECKOKN; + output TL2ASPMSUSPENDREQN; + output TL2PPMSUSPENDOKN; + output TRNLNKUPN; + output TRNRDLLPSRCRDYN; + output TRNRECRCERRN; + output TRNREOFN; + output TRNRERRFWDN; + output TRNRREMN; + output TRNRSOFN; + output TRNRSRCDSCN; + output TRNRSRCRDYN; + output TRNTCFGREQN; + output TRNTDLLPDSTRDYN; + output TRNTDSTRDYN; + output TRNTERRDROPN; + output USERRSTN; + output [11:0] DBGVECC; + output [11:0] PLDBGVEC; + output [11:0] TRNFCCPLD; + output [11:0] TRNFCNPD; + output [11:0] TRNFCPD; + output [12:0] MIMRXRADDR; + output [12:0] MIMRXWADDR; + output [12:0] MIMTXRADDR; + output [12:0] MIMTXWADDR; + output [15:0] CFGMSGDATA; + output [15:0] DRPDO; + output [15:0] PIPETX0DATA; + output [15:0] PIPETX1DATA; + output [15:0] PIPETX2DATA; + output [15:0] PIPETX3DATA; + output [15:0] PIPETX4DATA; + output [15:0] PIPETX5DATA; + output [15:0] PIPETX6DATA; + output [15:0] PIPETX7DATA; + output [1:0] CFGLINKCONTROLASPMCONTROL; + output [1:0] CFGLINKSTATUSCURRENTSPEED; + output [1:0] CFGPMCSRPOWERSTATE; + output [1:0] PIPETX0CHARISK; + output [1:0] PIPETX0POWERDOWN; + output [1:0] PIPETX1CHARISK; + output [1:0] PIPETX1POWERDOWN; + output [1:0] PIPETX2CHARISK; + output [1:0] PIPETX2POWERDOWN; + output [1:0] PIPETX3CHARISK; + output [1:0] PIPETX3POWERDOWN; + output [1:0] PIPETX4CHARISK; + output [1:0] PIPETX4POWERDOWN; + output [1:0] PIPETX5CHARISK; + output [1:0] PIPETX5POWERDOWN; + output [1:0] PIPETX6CHARISK; + output [1:0] PIPETX6POWERDOWN; + output [1:0] PIPETX7CHARISK; + output [1:0] PIPETX7POWERDOWN; + output [1:0] PLLANEREVERSALMODE; + output [1:0] PLRXPMSTATE; + output [1:0] PLSELLNKWIDTH; + output [2:0] CFGDEVCONTROLMAXPAYLOAD; + output [2:0] CFGDEVCONTROLMAXREADREQ; + output [2:0] CFGINTERRUPTMMENABLE; + output [2:0] CFGPCIELINKSTATE; + output [2:0] PIPETXMARGIN; + output [2:0] PLINITIALLINKWIDTH; + output [2:0] PLTXPMSTATE; + output [31:0] CFGDO; + output [31:0] TRNRDLLPDATA; + output [3:0] CFGDEVCONTROL2CPLTIMEOUTVAL; + output [3:0] CFGLINKSTATUSNEGOTIATEDWIDTH; + output [5:0] PLLTSSMSTATE; + output [5:0] TRNTBUFAV; + output [63:0] DBGVECA; + output [63:0] DBGVECB; + output [63:0] TRNRD; + output [67:0] MIMRXWDATA; + output [68:0] MIMTXWDATA; + output [6:0] CFGTRANSACTIONADDR; + output [6:0] CFGVCTCVCMAP; + output [6:0] TRNRBARHITN; + output [7:0] CFGINTERRUPTDO; + output [7:0] TRNFCCPLH; + output [7:0] TRNFCNPH; + output [7:0] TRNFCPH; + input CFGERRACSN; + input CFGERRCORN; + input CFGERRCPLABORTN; + input CFGERRCPLTIMEOUTN; + input CFGERRCPLUNEXPECTN; + input CFGERRECRCN; + input CFGERRLOCKEDN; + input CFGERRPOSTEDN; + input CFGERRURN; + input CFGINTERRUPTASSERTN; + input CFGINTERRUPTN; + input CFGPMDIRECTASPML1N; + input CFGPMSENDPMACKN; + input CFGPMSENDPMETON; + input CFGPMSENDPMNAKN; + input CFGPMTURNOFFOKN; + input CFGPMWAKEN; + input CFGRDENN; + input CFGTRNPENDINGN; + input CFGWRENN; + input CFGWRREADONLYN; + input CFGWRRW1CASRWN; + input CMRSTN; + input CMSTICKYRSTN; + input DBGSUBMODE; + input DLRSTN; + input DRPCLK; + input DRPDEN; + input DRPDWE; + input FUNCLVLRSTN; + input LL2SENDASREQL1N; + input LL2SENDENTERL1N; + input LL2SENDENTERL23N; + input LL2SUSPENDNOWN; + input LL2TLPRCVN; + input PIPECLK; + input PIPERX0CHANISALIGNED; + input PIPERX0ELECIDLE; + input PIPERX0PHYSTATUS; + input PIPERX0VALID; + input PIPERX1CHANISALIGNED; + input PIPERX1ELECIDLE; + input PIPERX1PHYSTATUS; + input PIPERX1VALID; + input PIPERX2CHANISALIGNED; + input PIPERX2ELECIDLE; + input PIPERX2PHYSTATUS; + input PIPERX2VALID; + input PIPERX3CHANISALIGNED; + input PIPERX3ELECIDLE; + input PIPERX3PHYSTATUS; + input PIPERX3VALID; + input PIPERX4CHANISALIGNED; + input PIPERX4ELECIDLE; + input PIPERX4PHYSTATUS; + input PIPERX4VALID; + input PIPERX5CHANISALIGNED; + input PIPERX5ELECIDLE; + input PIPERX5PHYSTATUS; + input PIPERX5VALID; + input PIPERX6CHANISALIGNED; + input PIPERX6ELECIDLE; + input PIPERX6PHYSTATUS; + input PIPERX6VALID; + input PIPERX7CHANISALIGNED; + input PIPERX7ELECIDLE; + input PIPERX7PHYSTATUS; + input PIPERX7VALID; + input PLDIRECTEDLINKAUTON; + input PLDIRECTEDLINKSPEED; + input PLDOWNSTREAMDEEMPHSOURCE; + input PLRSTN; + input PLTRANSMITHOTRST; + input PLUPSTREAMPREFERDEEMPH; + input SYSRSTN; + input TL2ASPMSUSPENDCREDITCHECKN; + input TL2PPMSUSPENDREQN; + input TLRSTN; + input TRNRDSTRDYN; + input TRNRNPOKN; + input TRNTCFGGNTN; + input TRNTDLLPSRCRDYN; + input TRNTECRCGENN; + input TRNTEOFN; + input TRNTERRFWDN; + input TRNTREMN; + input TRNTSOFN; + input TRNTSRCDSCN; + input TRNTSRCRDYN; + input TRNTSTRN; + input USERCLK; + input [127:0] CFGERRAERHEADERLOG; + input [15:0] DRPDI; + input [15:0] PIPERX0DATA; + input [15:0] PIPERX1DATA; + input [15:0] PIPERX2DATA; + input [15:0] PIPERX3DATA; + input [15:0] PIPERX4DATA; + input [15:0] PIPERX5DATA; + input [15:0] PIPERX6DATA; + input [15:0] PIPERX7DATA; + input [1:0] DBGMODE; + input [1:0] PIPERX0CHARISK; + input [1:0] PIPERX1CHARISK; + input [1:0] PIPERX2CHARISK; + input [1:0] PIPERX3CHARISK; + input [1:0] PIPERX4CHARISK; + input [1:0] PIPERX5CHARISK; + input [1:0] PIPERX6CHARISK; + input [1:0] PIPERX7CHARISK; + input [1:0] PLDIRECTEDLINKCHANGE; + input [1:0] PLDIRECTEDLINKWIDTH; + input [2:0] CFGDSFUNCTIONNUMBER; + input [2:0] PIPERX0STATUS; + input [2:0] PIPERX1STATUS; + input [2:0] PIPERX2STATUS; + input [2:0] PIPERX3STATUS; + input [2:0] PIPERX4STATUS; + input [2:0] PIPERX5STATUS; + input [2:0] PIPERX6STATUS; + input [2:0] PIPERX7STATUS; + input [2:0] PLDBGMODE; + input [2:0] TRNFCSEL; + input [31:0] CFGDI; + input [31:0] TRNTDLLPDATA; + input [3:0] CFGBYTEENN; + input [47:0] CFGERRTLPCPLHEADER; + input [4:0] CFGDSDEVICENUMBER; + input [4:0] PL2DIRECTEDLSTATE; + input [63:0] CFGDSN; + input [63:0] TRNTD; + input [67:0] MIMRXRDATA; + input [68:0] MIMTXRDATA; + input [7:0] CFGDSBUSNUMBER; + input [7:0] CFGINTERRUPTDI; + input [7:0] CFGPORTNUMBER; + input [8:0] DRPDADDR; + input [9:0] CFGDWADDR; +endmodule + +module PCIE_2_1 (...); + parameter [11:0] AER_BASE_PTR = 12'h140; + parameter AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [15:0] AER_CAP_ID = 16'h0001; + parameter AER_CAP_MULTIHEADER = "FALSE"; + parameter [11:0] AER_CAP_NEXTPTR = 12'h178; + parameter AER_CAP_ON = "FALSE"; + parameter [23:0] AER_CAP_OPTIONAL_ERR_SUPPORT = 24'h000000; + parameter AER_CAP_PERMIT_ROOTERR_UPDATE = "TRUE"; + parameter [3:0] AER_CAP_VERSION = 4'h2; + parameter ALLOW_X8_GEN2 = "FALSE"; + parameter [31:0] BAR0 = 32'hFFFFFF00; + parameter [31:0] BAR1 = 32'hFFFF0000; + parameter [31:0] BAR2 = 32'hFFFF000C; + parameter [31:0] BAR3 = 32'hFFFFFFFF; + parameter [31:0] BAR4 = 32'h00000000; + parameter [31:0] BAR5 = 32'h00000000; + parameter [7:0] CAPABILITIES_PTR = 8'h40; + parameter [31:0] CARDBUS_CIS_POINTER = 32'h00000000; + parameter integer CFG_ECRC_ERR_CPLSTAT = 0; + parameter [23:0] CLASS_CODE = 24'h000000; + parameter CMD_INTX_IMPLEMENTED = "TRUE"; + parameter CPL_TIMEOUT_DISABLE_SUPPORTED = "FALSE"; + parameter [3:0] CPL_TIMEOUT_RANGES_SUPPORTED = 4'h0; + parameter [6:0] CRM_MODULE_RSTS = 7'h00; + parameter DEV_CAP2_ARI_FORWARDING_SUPPORTED = "FALSE"; + parameter DEV_CAP2_ATOMICOP32_COMPLETER_SUPPORTED = "FALSE"; + parameter DEV_CAP2_ATOMICOP64_COMPLETER_SUPPORTED = "FALSE"; + parameter DEV_CAP2_ATOMICOP_ROUTING_SUPPORTED = "FALSE"; + parameter DEV_CAP2_CAS128_COMPLETER_SUPPORTED = "FALSE"; + parameter DEV_CAP2_ENDEND_TLP_PREFIX_SUPPORTED = "FALSE"; + parameter DEV_CAP2_EXTENDED_FMT_FIELD_SUPPORTED = "FALSE"; + parameter DEV_CAP2_LTR_MECHANISM_SUPPORTED = "FALSE"; + parameter [1:0] DEV_CAP2_MAX_ENDEND_TLP_PREFIXES = 2'h0; + parameter DEV_CAP2_NO_RO_ENABLED_PRPR_PASSING = "FALSE"; + parameter [1:0] DEV_CAP2_TPH_COMPLETER_SUPPORTED = 2'h0; + parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_SCALE = "TRUE"; + parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_VALUE = "TRUE"; + parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 0; + parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 0; + parameter DEV_CAP_EXT_TAG_SUPPORTED = "TRUE"; + parameter DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "FALSE"; + parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2; + parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0; + parameter DEV_CAP_ROLE_BASED_ERROR = "TRUE"; + parameter integer DEV_CAP_RSVD_14_12 = 0; + parameter integer DEV_CAP_RSVD_17_16 = 0; + parameter integer DEV_CAP_RSVD_31_29 = 0; + parameter DEV_CONTROL_AUX_POWER_SUPPORTED = "FALSE"; + parameter DEV_CONTROL_EXT_TAG_DEFAULT = "FALSE"; + parameter DISABLE_ASPM_L1_TIMER = "FALSE"; + parameter DISABLE_BAR_FILTERING = "FALSE"; + parameter DISABLE_ERR_MSG = "FALSE"; + parameter DISABLE_ID_CHECK = "FALSE"; + parameter DISABLE_LANE_REVERSAL = "FALSE"; + parameter DISABLE_LOCKED_FILTER = "FALSE"; + parameter DISABLE_PPM_FILTER = "FALSE"; + parameter DISABLE_RX_POISONED_RESP = "FALSE"; + parameter DISABLE_RX_TC_FILTER = "FALSE"; + parameter DISABLE_SCRAMBLING = "FALSE"; + parameter [7:0] DNSTREAM_LINK_NUM = 8'h00; + parameter [11:0] DSN_BASE_PTR = 12'h100; + parameter [15:0] DSN_CAP_ID = 16'h0003; + parameter [11:0] DSN_CAP_NEXTPTR = 12'h10C; + parameter DSN_CAP_ON = "TRUE"; + parameter [3:0] DSN_CAP_VERSION = 4'h1; + parameter [10:0] ENABLE_MSG_ROUTE = 11'h000; + parameter ENABLE_RX_TD_ECRC_TRIM = "FALSE"; + parameter ENDEND_TLP_PREFIX_FORWARDING_SUPPORTED = "FALSE"; + parameter ENTER_RVRY_EI_L0 = "TRUE"; + parameter EXIT_LOOPBACK_ON_EI = "TRUE"; + parameter [31:0] EXPANSION_ROM = 32'hFFFFF001; + parameter [5:0] EXT_CFG_CAP_PTR = 6'h3F; + parameter [9:0] EXT_CFG_XP_CAP_PTR = 10'h3FF; + parameter [7:0] HEADER_TYPE = 8'h00; + parameter [4:0] INFER_EI = 5'h00; + parameter [7:0] INTERRUPT_PIN = 8'h01; + parameter INTERRUPT_STAT_AUTO = "TRUE"; + parameter IS_SWITCH = "FALSE"; + parameter [9:0] LAST_CONFIG_DWORD = 10'h3FF; + parameter LINK_CAP_ASPM_OPTIONALITY = "TRUE"; + parameter integer LINK_CAP_ASPM_SUPPORT = 1; + parameter LINK_CAP_CLOCK_POWER_MANAGEMENT = "FALSE"; + parameter LINK_CAP_DLL_LINK_ACTIVE_REPORTING_CAP = "FALSE"; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7; + parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7; + parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7; + parameter LINK_CAP_LINK_BANDWIDTH_NOTIFICATION_CAP = "FALSE"; + parameter [3:0] LINK_CAP_MAX_LINK_SPEED = 4'h1; + parameter [5:0] LINK_CAP_MAX_LINK_WIDTH = 6'h08; + parameter integer LINK_CAP_RSVD_23 = 0; + parameter LINK_CAP_SURPRISE_DOWN_ERROR_CAPABLE = "FALSE"; + parameter integer LINK_CONTROL_RCB = 0; + parameter LINK_CTRL2_DEEMPHASIS = "FALSE"; + parameter LINK_CTRL2_HW_AUTONOMOUS_SPEED_DISABLE = "FALSE"; + parameter [3:0] LINK_CTRL2_TARGET_LINK_SPEED = 4'h2; + parameter LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE"; + parameter [14:0] LL_ACK_TIMEOUT = 15'h0000; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter integer LL_ACK_TIMEOUT_FUNC = 0; + parameter [14:0] LL_REPLAY_TIMEOUT = 15'h0000; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer LL_REPLAY_TIMEOUT_FUNC = 0; + parameter [5:0] LTSSM_MAX_LINK_WIDTH = 6'h01; + parameter MPS_FORCE = "FALSE"; + parameter [7:0] MSIX_BASE_PTR = 8'h9C; + parameter [7:0] MSIX_CAP_ID = 8'h11; + parameter [7:0] MSIX_CAP_NEXTPTR = 8'h00; + parameter MSIX_CAP_ON = "FALSE"; + parameter integer MSIX_CAP_PBA_BIR = 0; + parameter [28:0] MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] MSI_BASE_PTR = 8'h48; + parameter MSI_CAP_64_BIT_ADDR_CAPABLE = "TRUE"; + parameter [7:0] MSI_CAP_ID = 8'h05; + parameter integer MSI_CAP_MULTIMSGCAP = 0; + parameter integer MSI_CAP_MULTIMSG_EXTENSION = 0; + parameter [7:0] MSI_CAP_NEXTPTR = 8'h60; + parameter MSI_CAP_ON = "FALSE"; + parameter MSI_CAP_PER_VECTOR_MASKING_CAPABLE = "TRUE"; + parameter integer N_FTS_COMCLK_GEN1 = 255; + parameter integer N_FTS_COMCLK_GEN2 = 255; + parameter integer N_FTS_GEN1 = 255; + parameter integer N_FTS_GEN2 = 255; + parameter [7:0] PCIE_BASE_PTR = 8'h60; + parameter [7:0] PCIE_CAP_CAPABILITY_ID = 8'h10; + parameter [3:0] PCIE_CAP_CAPABILITY_VERSION = 4'h2; + parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0; + parameter [7:0] PCIE_CAP_NEXTPTR = 8'h9C; + parameter PCIE_CAP_ON = "TRUE"; + parameter integer PCIE_CAP_RSVD_15_14 = 0; + parameter PCIE_CAP_SLOT_IMPLEMENTED = "FALSE"; + parameter integer PCIE_REVISION = 2; + parameter integer PL_AUTO_CONFIG = 0; + parameter PL_FAST_TRAIN = "FALSE"; + parameter [14:0] PM_ASPML0S_TIMEOUT = 15'h0000; + parameter PM_ASPML0S_TIMEOUT_EN = "FALSE"; + parameter integer PM_ASPML0S_TIMEOUT_FUNC = 0; + parameter PM_ASPM_FASTEXIT = "FALSE"; + parameter [7:0] PM_BASE_PTR = 8'h40; + parameter integer PM_CAP_AUXCURRENT = 0; + parameter PM_CAP_D1SUPPORT = "TRUE"; + parameter PM_CAP_D2SUPPORT = "TRUE"; + parameter PM_CAP_DSI = "FALSE"; + parameter [7:0] PM_CAP_ID = 8'h01; + parameter [7:0] PM_CAP_NEXTPTR = 8'h48; + parameter PM_CAP_ON = "TRUE"; + parameter [4:0] PM_CAP_PMESUPPORT = 5'h0F; + parameter PM_CAP_PME_CLOCK = "FALSE"; + parameter integer PM_CAP_RSVD_04 = 0; + parameter integer PM_CAP_VERSION = 3; + parameter PM_CSR_B2B3 = "FALSE"; + parameter PM_CSR_BPCCEN = "FALSE"; + parameter PM_CSR_NOSOFTRST = "TRUE"; + parameter [7:0] PM_DATA0 = 8'h01; + parameter [7:0] PM_DATA1 = 8'h01; + parameter [7:0] PM_DATA2 = 8'h01; + parameter [7:0] PM_DATA3 = 8'h01; + parameter [7:0] PM_DATA4 = 8'h01; + parameter [7:0] PM_DATA5 = 8'h01; + parameter [7:0] PM_DATA6 = 8'h01; + parameter [7:0] PM_DATA7 = 8'h01; + parameter [1:0] PM_DATA_SCALE0 = 2'h1; + parameter [1:0] PM_DATA_SCALE1 = 2'h1; + parameter [1:0] PM_DATA_SCALE2 = 2'h1; + parameter [1:0] PM_DATA_SCALE3 = 2'h1; + parameter [1:0] PM_DATA_SCALE4 = 2'h1; + parameter [1:0] PM_DATA_SCALE5 = 2'h1; + parameter [1:0] PM_DATA_SCALE6 = 2'h1; + parameter [1:0] PM_DATA_SCALE7 = 2'h1; + parameter PM_MF = "FALSE"; + parameter [11:0] RBAR_BASE_PTR = 12'h178; + parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR0 = 5'h00; + parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR1 = 5'h00; + parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR2 = 5'h00; + parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR3 = 5'h00; + parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR4 = 5'h00; + parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR5 = 5'h00; + parameter [15:0] RBAR_CAP_ID = 16'h0015; + parameter [2:0] RBAR_CAP_INDEX0 = 3'h0; + parameter [2:0] RBAR_CAP_INDEX1 = 3'h0; + parameter [2:0] RBAR_CAP_INDEX2 = 3'h0; + parameter [2:0] RBAR_CAP_INDEX3 = 3'h0; + parameter [2:0] RBAR_CAP_INDEX4 = 3'h0; + parameter [2:0] RBAR_CAP_INDEX5 = 3'h0; + parameter [11:0] RBAR_CAP_NEXTPTR = 12'h000; + parameter RBAR_CAP_ON = "FALSE"; + parameter [31:0] RBAR_CAP_SUP0 = 32'h00000000; + parameter [31:0] RBAR_CAP_SUP1 = 32'h00000000; + parameter [31:0] RBAR_CAP_SUP2 = 32'h00000000; + parameter [31:0] RBAR_CAP_SUP3 = 32'h00000000; + parameter [31:0] RBAR_CAP_SUP4 = 32'h00000000; + parameter [31:0] RBAR_CAP_SUP5 = 32'h00000000; + parameter [3:0] RBAR_CAP_VERSION = 4'h1; + parameter [2:0] RBAR_NUM = 3'h1; + parameter integer RECRC_CHK = 0; + parameter RECRC_CHK_TRIM = "FALSE"; + parameter ROOT_CAP_CRS_SW_VISIBILITY = "FALSE"; + parameter [1:0] RP_AUTO_SPD = 2'h1; + parameter [4:0] RP_AUTO_SPD_LOOPCNT = 5'h1F; + parameter SELECT_DLL_IF = "FALSE"; + parameter SIM_VERSION = "1.0"; + parameter SLOT_CAP_ATT_BUTTON_PRESENT = "FALSE"; + parameter SLOT_CAP_ATT_INDICATOR_PRESENT = "FALSE"; + parameter SLOT_CAP_ELEC_INTERLOCK_PRESENT = "FALSE"; + parameter SLOT_CAP_HOTPLUG_CAPABLE = "FALSE"; + parameter SLOT_CAP_HOTPLUG_SURPRISE = "FALSE"; + parameter SLOT_CAP_MRL_SENSOR_PRESENT = "FALSE"; + parameter SLOT_CAP_NO_CMD_COMPLETED_SUPPORT = "FALSE"; + parameter [12:0] SLOT_CAP_PHYSICAL_SLOT_NUM = 13'h0000; + parameter SLOT_CAP_POWER_CONTROLLER_PRESENT = "FALSE"; + parameter SLOT_CAP_POWER_INDICATOR_PRESENT = "FALSE"; + parameter integer SLOT_CAP_SLOT_POWER_LIMIT_SCALE = 0; + parameter [7:0] SLOT_CAP_SLOT_POWER_LIMIT_VALUE = 8'h00; + parameter integer SPARE_BIT0 = 0; + parameter integer SPARE_BIT1 = 0; + parameter integer SPARE_BIT2 = 0; + parameter integer SPARE_BIT3 = 0; + parameter integer SPARE_BIT4 = 0; + parameter integer SPARE_BIT5 = 0; + parameter integer SPARE_BIT6 = 0; + parameter integer SPARE_BIT7 = 0; + parameter integer SPARE_BIT8 = 0; + parameter [7:0] SPARE_BYTE0 = 8'h00; + parameter [7:0] SPARE_BYTE1 = 8'h00; + parameter [7:0] SPARE_BYTE2 = 8'h00; + parameter [7:0] SPARE_BYTE3 = 8'h00; + parameter [31:0] SPARE_WORD0 = 32'h00000000; + parameter [31:0] SPARE_WORD1 = 32'h00000000; + parameter [31:0] SPARE_WORD2 = 32'h00000000; + parameter [31:0] SPARE_WORD3 = 32'h00000000; + parameter SSL_MESSAGE_AUTO = "FALSE"; + parameter TECRC_EP_INV = "FALSE"; + parameter TL_RBYPASS = "FALSE"; + parameter integer TL_RX_RAM_RADDR_LATENCY = 0; + parameter integer TL_RX_RAM_RDATA_LATENCY = 2; + parameter integer TL_RX_RAM_WRITE_LATENCY = 0; + parameter TL_TFC_DISABLE = "FALSE"; + parameter TL_TX_CHECKS_DISABLE = "FALSE"; + parameter integer TL_TX_RAM_RADDR_LATENCY = 0; + parameter integer TL_TX_RAM_RDATA_LATENCY = 2; + parameter integer TL_TX_RAM_WRITE_LATENCY = 0; + parameter TRN_DW = "FALSE"; + parameter TRN_NP_FC = "FALSE"; + parameter UPCONFIG_CAPABLE = "TRUE"; + parameter UPSTREAM_FACING = "TRUE"; + parameter UR_ATOMIC = "TRUE"; + parameter UR_CFG1 = "TRUE"; + parameter UR_INV_REQ = "TRUE"; + parameter UR_PRS_RESPONSE = "TRUE"; + parameter USER_CLK2_DIV2 = "FALSE"; + parameter integer USER_CLK_FREQ = 3; + parameter USE_RID_PINS = "FALSE"; + parameter VC0_CPL_INFINITE = "TRUE"; + parameter [12:0] VC0_RX_RAM_LIMIT = 13'h03FF; + parameter integer VC0_TOTAL_CREDITS_CD = 127; + parameter integer VC0_TOTAL_CREDITS_CH = 31; + parameter integer VC0_TOTAL_CREDITS_NPD = 24; + parameter integer VC0_TOTAL_CREDITS_NPH = 12; + parameter integer VC0_TOTAL_CREDITS_PD = 288; + parameter integer VC0_TOTAL_CREDITS_PH = 32; + parameter integer VC0_TX_LASTPACKET = 31; + parameter [11:0] VC_BASE_PTR = 12'h10C; + parameter [15:0] VC_CAP_ID = 16'h0002; + parameter [11:0] VC_CAP_NEXTPTR = 12'h000; + parameter VC_CAP_ON = "FALSE"; + parameter VC_CAP_REJECT_SNOOP_TRANSACTIONS = "FALSE"; + parameter [3:0] VC_CAP_VERSION = 4'h1; + parameter [11:0] VSEC_BASE_PTR = 12'h128; + parameter [15:0] VSEC_CAP_HDR_ID = 16'h1234; + parameter [11:0] VSEC_CAP_HDR_LENGTH = 12'h018; + parameter [3:0] VSEC_CAP_HDR_REVISION = 4'h1; + parameter [15:0] VSEC_CAP_ID = 16'h000B; + parameter VSEC_CAP_IS_LINK_VISIBLE = "TRUE"; + parameter [11:0] VSEC_CAP_NEXTPTR = 12'h140; + parameter VSEC_CAP_ON = "FALSE"; + parameter [3:0] VSEC_CAP_VERSION = 4'h1; + output CFGAERECRCCHECKEN; + output CFGAERECRCGENEN; + output CFGAERROOTERRCORRERRRECEIVED; + output CFGAERROOTERRCORRERRREPORTINGEN; + output CFGAERROOTERRFATALERRRECEIVED; + output CFGAERROOTERRFATALERRREPORTINGEN; + output CFGAERROOTERRNONFATALERRRECEIVED; + output CFGAERROOTERRNONFATALERRREPORTINGEN; + output CFGBRIDGESERREN; + output CFGCOMMANDBUSMASTERENABLE; + output CFGCOMMANDINTERRUPTDISABLE; + output CFGCOMMANDIOENABLE; + output CFGCOMMANDMEMENABLE; + output CFGCOMMANDSERREN; + output CFGDEVCONTROL2ARIFORWARDEN; + output CFGDEVCONTROL2ATOMICEGRESSBLOCK; + output CFGDEVCONTROL2ATOMICREQUESTEREN; + output CFGDEVCONTROL2CPLTIMEOUTDIS; + output CFGDEVCONTROL2IDOCPLEN; + output CFGDEVCONTROL2IDOREQEN; + output CFGDEVCONTROL2LTREN; + output CFGDEVCONTROL2TLPPREFIXBLOCK; + output CFGDEVCONTROLAUXPOWEREN; + output CFGDEVCONTROLCORRERRREPORTINGEN; + output CFGDEVCONTROLENABLERO; + output CFGDEVCONTROLEXTTAGEN; + output CFGDEVCONTROLFATALERRREPORTINGEN; + output CFGDEVCONTROLNONFATALREPORTINGEN; + output CFGDEVCONTROLNOSNOOPEN; + output CFGDEVCONTROLPHANTOMEN; + output CFGDEVCONTROLURERRREPORTINGEN; + output CFGDEVSTATUSCORRERRDETECTED; + output CFGDEVSTATUSFATALERRDETECTED; + output CFGDEVSTATUSNONFATALERRDETECTED; + output CFGDEVSTATUSURDETECTED; + output CFGERRAERHEADERLOGSETN; + output CFGERRCPLRDYN; + output CFGINTERRUPTMSIENABLE; + output CFGINTERRUPTMSIXENABLE; + output CFGINTERRUPTMSIXFM; + output CFGINTERRUPTRDYN; + output CFGLINKCONTROLAUTOBANDWIDTHINTEN; + output CFGLINKCONTROLBANDWIDTHINTEN; + output CFGLINKCONTROLCLOCKPMEN; + output CFGLINKCONTROLCOMMONCLOCK; + output CFGLINKCONTROLEXTENDEDSYNC; + output CFGLINKCONTROLHWAUTOWIDTHDIS; + output CFGLINKCONTROLLINKDISABLE; + output CFGLINKCONTROLRCB; + output CFGLINKCONTROLRETRAINLINK; + output CFGLINKSTATUSAUTOBANDWIDTHSTATUS; + output CFGLINKSTATUSBANDWIDTHSTATUS; + output CFGLINKSTATUSDLLACTIVE; + output CFGLINKSTATUSLINKTRAINING; + output CFGMGMTRDWRDONEN; + output CFGMSGRECEIVED; + output CFGMSGRECEIVEDASSERTINTA; + output CFGMSGRECEIVEDASSERTINTB; + output CFGMSGRECEIVEDASSERTINTC; + output CFGMSGRECEIVEDASSERTINTD; + output CFGMSGRECEIVEDDEASSERTINTA; + output CFGMSGRECEIVEDDEASSERTINTB; + output CFGMSGRECEIVEDDEASSERTINTC; + output CFGMSGRECEIVEDDEASSERTINTD; + output CFGMSGRECEIVEDERRCOR; + output CFGMSGRECEIVEDERRFATAL; + output CFGMSGRECEIVEDERRNONFATAL; + output CFGMSGRECEIVEDPMASNAK; + output CFGMSGRECEIVEDPMETO; + output CFGMSGRECEIVEDPMETOACK; + output CFGMSGRECEIVEDPMPME; + output CFGMSGRECEIVEDSETSLOTPOWERLIMIT; + output CFGMSGRECEIVEDUNLOCK; + output CFGPMCSRPMEEN; + output CFGPMCSRPMESTATUS; + output CFGPMRCVASREQL1N; + output CFGPMRCVENTERL1N; + output CFGPMRCVENTERL23N; + output CFGPMRCVREQACKN; + output CFGROOTCONTROLPMEINTEN; + output CFGROOTCONTROLSYSERRCORRERREN; + output CFGROOTCONTROLSYSERRFATALERREN; + output CFGROOTCONTROLSYSERRNONFATALERREN; + output CFGSLOTCONTROLELECTROMECHILCTLPULSE; + output CFGTRANSACTION; + output CFGTRANSACTIONTYPE; + output DBGSCLRA; + output DBGSCLRB; + output DBGSCLRC; + output DBGSCLRD; + output DBGSCLRE; + output DBGSCLRF; + output DBGSCLRG; + output DBGSCLRH; + output DBGSCLRI; + output DBGSCLRJ; + output DBGSCLRK; + output DRPRDY; + output LL2BADDLLPERR; + output LL2BADTLPERR; + output LL2PROTOCOLERR; + output LL2RECEIVERERR; + output LL2REPLAYROERR; + output LL2REPLAYTOERR; + output LL2SUSPENDOK; + output LL2TFCINIT1SEQ; + output LL2TFCINIT2SEQ; + output LL2TXIDLE; + output LNKCLKEN; + output MIMRXREN; + output MIMRXWEN; + output MIMTXREN; + output MIMTXWEN; + output PIPERX0POLARITY; + output PIPERX1POLARITY; + output PIPERX2POLARITY; + output PIPERX3POLARITY; + output PIPERX4POLARITY; + output PIPERX5POLARITY; + output PIPERX6POLARITY; + output PIPERX7POLARITY; + output PIPETX0COMPLIANCE; + output PIPETX0ELECIDLE; + output PIPETX1COMPLIANCE; + output PIPETX1ELECIDLE; + output PIPETX2COMPLIANCE; + output PIPETX2ELECIDLE; + output PIPETX3COMPLIANCE; + output PIPETX3ELECIDLE; + output PIPETX4COMPLIANCE; + output PIPETX4ELECIDLE; + output PIPETX5COMPLIANCE; + output PIPETX5ELECIDLE; + output PIPETX6COMPLIANCE; + output PIPETX6ELECIDLE; + output PIPETX7COMPLIANCE; + output PIPETX7ELECIDLE; + output PIPETXDEEMPH; + output PIPETXRATE; + output PIPETXRCVRDET; + output PIPETXRESET; + output PL2L0REQ; + output PL2LINKUP; + output PL2RECEIVERERR; + output PL2RECOVERY; + output PL2RXELECIDLE; + output PL2SUSPENDOK; + output PLDIRECTEDCHANGEDONE; + output PLLINKGEN2CAP; + output PLLINKPARTNERGEN2SUPPORTED; + output PLLINKUPCFGCAP; + output PLPHYLNKUPN; + output PLRECEIVEDHOTRST; + output PLSELLNKRATE; + output RECEIVEDFUNCLVLRSTN; + output TL2ASPMSUSPENDCREDITCHECKOK; + output TL2ASPMSUSPENDREQ; + output TL2ERRFCPE; + output TL2ERRMALFORMED; + output TL2ERRRXOVERFLOW; + output TL2PPMSUSPENDOK; + output TRNLNKUP; + output TRNRECRCERR; + output TRNREOF; + output TRNRERRFWD; + output TRNRSOF; + output TRNRSRCDSC; + output TRNRSRCRDY; + output TRNTCFGREQ; + output TRNTDLLPDSTRDY; + output TRNTERRDROP; + output USERRSTN; + output [11:0] DBGVECC; + output [11:0] PLDBGVEC; + output [11:0] TRNFCCPLD; + output [11:0] TRNFCNPD; + output [11:0] TRNFCPD; + output [127:0] TRNRD; + output [12:0] MIMRXRADDR; + output [12:0] MIMRXWADDR; + output [12:0] MIMTXRADDR; + output [12:0] MIMTXWADDR; + output [15:0] CFGMSGDATA; + output [15:0] DRPDO; + output [15:0] PIPETX0DATA; + output [15:0] PIPETX1DATA; + output [15:0] PIPETX2DATA; + output [15:0] PIPETX3DATA; + output [15:0] PIPETX4DATA; + output [15:0] PIPETX5DATA; + output [15:0] PIPETX6DATA; + output [15:0] PIPETX7DATA; + output [1:0] CFGLINKCONTROLASPMCONTROL; + output [1:0] CFGLINKSTATUSCURRENTSPEED; + output [1:0] CFGPMCSRPOWERSTATE; + output [1:0] PIPETX0CHARISK; + output [1:0] PIPETX0POWERDOWN; + output [1:0] PIPETX1CHARISK; + output [1:0] PIPETX1POWERDOWN; + output [1:0] PIPETX2CHARISK; + output [1:0] PIPETX2POWERDOWN; + output [1:0] PIPETX3CHARISK; + output [1:0] PIPETX3POWERDOWN; + output [1:0] PIPETX4CHARISK; + output [1:0] PIPETX4POWERDOWN; + output [1:0] PIPETX5CHARISK; + output [1:0] PIPETX5POWERDOWN; + output [1:0] PIPETX6CHARISK; + output [1:0] PIPETX6POWERDOWN; + output [1:0] PIPETX7CHARISK; + output [1:0] PIPETX7POWERDOWN; + output [1:0] PL2RXPMSTATE; + output [1:0] PLLANEREVERSALMODE; + output [1:0] PLRXPMSTATE; + output [1:0] PLSELLNKWIDTH; + output [1:0] TRNRDLLPSRCRDY; + output [1:0] TRNRREM; + output [2:0] CFGDEVCONTROLMAXPAYLOAD; + output [2:0] CFGDEVCONTROLMAXREADREQ; + output [2:0] CFGINTERRUPTMMENABLE; + output [2:0] CFGPCIELINKSTATE; + output [2:0] PIPETXMARGIN; + output [2:0] PLINITIALLINKWIDTH; + output [2:0] PLTXPMSTATE; + output [31:0] CFGMGMTDO; + output [3:0] CFGDEVCONTROL2CPLTIMEOUTVAL; + output [3:0] CFGLINKSTATUSNEGOTIATEDWIDTH; + output [3:0] TRNTDSTRDY; + output [4:0] LL2LINKSTATUS; + output [5:0] PLLTSSMSTATE; + output [5:0] TRNTBUFAV; + output [63:0] DBGVECA; + output [63:0] DBGVECB; + output [63:0] TL2ERRHDR; + output [63:0] TRNRDLLPDATA; + output [67:0] MIMRXWDATA; + output [68:0] MIMTXWDATA; + output [6:0] CFGTRANSACTIONADDR; + output [6:0] CFGVCTCVCMAP; + output [7:0] CFGINTERRUPTDO; + output [7:0] TRNFCCPLH; + output [7:0] TRNFCNPH; + output [7:0] TRNFCPH; + output [7:0] TRNRBARHIT; + input CFGERRACSN; + input CFGERRATOMICEGRESSBLOCKEDN; + input CFGERRCORN; + input CFGERRCPLABORTN; + input CFGERRCPLTIMEOUTN; + input CFGERRCPLUNEXPECTN; + input CFGERRECRCN; + input CFGERRINTERNALCORN; + input CFGERRINTERNALUNCORN; + input CFGERRLOCKEDN; + input CFGERRMALFORMEDN; + input CFGERRMCBLOCKEDN; + input CFGERRNORECOVERYN; + input CFGERRPOISONEDN; + input CFGERRPOSTEDN; + input CFGERRURN; + input CFGFORCECOMMONCLOCKOFF; + input CFGFORCEEXTENDEDSYNCON; + input CFGINTERRUPTASSERTN; + input CFGINTERRUPTN; + input CFGINTERRUPTSTATN; + input CFGMGMTRDENN; + input CFGMGMTWRENN; + input CFGMGMTWRREADONLYN; + input CFGMGMTWRRW1CASRWN; + input CFGPMFORCESTATEENN; + input CFGPMHALTASPML0SN; + input CFGPMHALTASPML1N; + input CFGPMSENDPMETON; + input CFGPMTURNOFFOKN; + input CFGPMWAKEN; + input CFGTRNPENDINGN; + input CMRSTN; + input CMSTICKYRSTN; + input DBGSUBMODE; + input DLRSTN; + input DRPCLK; + input DRPEN; + input DRPWE; + input FUNCLVLRSTN; + input LL2SENDASREQL1; + input LL2SENDENTERL1; + input LL2SENDENTERL23; + input LL2SENDPMACK; + input LL2SUSPENDNOW; + input LL2TLPRCV; + input PIPECLK; + input PIPERX0CHANISALIGNED; + input PIPERX0ELECIDLE; + input PIPERX0PHYSTATUS; + input PIPERX0VALID; + input PIPERX1CHANISALIGNED; + input PIPERX1ELECIDLE; + input PIPERX1PHYSTATUS; + input PIPERX1VALID; + input PIPERX2CHANISALIGNED; + input PIPERX2ELECIDLE; + input PIPERX2PHYSTATUS; + input PIPERX2VALID; + input PIPERX3CHANISALIGNED; + input PIPERX3ELECIDLE; + input PIPERX3PHYSTATUS; + input PIPERX3VALID; + input PIPERX4CHANISALIGNED; + input PIPERX4ELECIDLE; + input PIPERX4PHYSTATUS; + input PIPERX4VALID; + input PIPERX5CHANISALIGNED; + input PIPERX5ELECIDLE; + input PIPERX5PHYSTATUS; + input PIPERX5VALID; + input PIPERX6CHANISALIGNED; + input PIPERX6ELECIDLE; + input PIPERX6PHYSTATUS; + input PIPERX6VALID; + input PIPERX7CHANISALIGNED; + input PIPERX7ELECIDLE; + input PIPERX7PHYSTATUS; + input PIPERX7VALID; + input PLDIRECTEDLINKAUTON; + input PLDIRECTEDLINKSPEED; + input PLDIRECTEDLTSSMNEWVLD; + input PLDIRECTEDLTSSMSTALL; + input PLDOWNSTREAMDEEMPHSOURCE; + input PLRSTN; + input PLTRANSMITHOTRST; + input PLUPSTREAMPREFERDEEMPH; + input SYSRSTN; + input TL2ASPMSUSPENDCREDITCHECK; + input TL2PPMSUSPENDREQ; + input TLRSTN; + input TRNRDSTRDY; + input TRNRFCPRET; + input TRNRNPOK; + input TRNRNPREQ; + input TRNTCFGGNT; + input TRNTDLLPSRCRDY; + input TRNTECRCGEN; + input TRNTEOF; + input TRNTERRFWD; + input TRNTSOF; + input TRNTSRCDSC; + input TRNTSRCRDY; + input TRNTSTR; + input USERCLK2; + input USERCLK; + input [127:0] CFGERRAERHEADERLOG; + input [127:0] TRNTD; + input [15:0] CFGDEVID; + input [15:0] CFGSUBSYSID; + input [15:0] CFGSUBSYSVENDID; + input [15:0] CFGVENDID; + input [15:0] DRPDI; + input [15:0] PIPERX0DATA; + input [15:0] PIPERX1DATA; + input [15:0] PIPERX2DATA; + input [15:0] PIPERX3DATA; + input [15:0] PIPERX4DATA; + input [15:0] PIPERX5DATA; + input [15:0] PIPERX6DATA; + input [15:0] PIPERX7DATA; + input [1:0] CFGPMFORCESTATE; + input [1:0] DBGMODE; + input [1:0] PIPERX0CHARISK; + input [1:0] PIPERX1CHARISK; + input [1:0] PIPERX2CHARISK; + input [1:0] PIPERX3CHARISK; + input [1:0] PIPERX4CHARISK; + input [1:0] PIPERX5CHARISK; + input [1:0] PIPERX6CHARISK; + input [1:0] PIPERX7CHARISK; + input [1:0] PLDIRECTEDLINKCHANGE; + input [1:0] PLDIRECTEDLINKWIDTH; + input [1:0] TRNTREM; + input [2:0] CFGDSFUNCTIONNUMBER; + input [2:0] CFGFORCEMPS; + input [2:0] PIPERX0STATUS; + input [2:0] PIPERX1STATUS; + input [2:0] PIPERX2STATUS; + input [2:0] PIPERX3STATUS; + input [2:0] PIPERX4STATUS; + input [2:0] PIPERX5STATUS; + input [2:0] PIPERX6STATUS; + input [2:0] PIPERX7STATUS; + input [2:0] PLDBGMODE; + input [2:0] TRNFCSEL; + input [31:0] CFGMGMTDI; + input [31:0] TRNTDLLPDATA; + input [3:0] CFGMGMTBYTEENN; + input [47:0] CFGERRTLPCPLHEADER; + input [4:0] CFGAERINTERRUPTMSGNUM; + input [4:0] CFGDSDEVICENUMBER; + input [4:0] CFGPCIECAPINTERRUPTMSGNUM; + input [4:0] PL2DIRECTEDLSTATE; + input [5:0] PLDIRECTEDLTSSMNEW; + input [63:0] CFGDSN; + input [67:0] MIMRXRDATA; + input [68:0] MIMTXRDATA; + input [7:0] CFGDSBUSNUMBER; + input [7:0] CFGINTERRUPTDI; + input [7:0] CFGPORTNUMBER; + input [7:0] CFGREVID; + input [8:0] DRPADDR; + input [9:0] CFGMGMTDWADDR; +endmodule + +module PCIE_3_0 (...); + parameter ARI_CAP_ENABLE = "FALSE"; + parameter AXISTEN_IF_CC_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_CC_PARITY_CHK = "TRUE"; + parameter AXISTEN_IF_CQ_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE"; + parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000; + parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE"; + parameter AXISTEN_IF_RC_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_RC_STRADDLE = "FALSE"; + parameter AXISTEN_IF_RQ_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_RQ_PARITY_CHK = "TRUE"; + parameter [1:0] AXISTEN_IF_WIDTH = 2'h2; + parameter CRM_CORE_CLK_FREQ_500 = "TRUE"; + parameter [1:0] CRM_USER_CLK_FREQ = 2'h2; + parameter [7:0] DNSTREAM_LINK_NUM = 8'h00; + parameter [1:0] GEN3_PCS_AUTO_REALIGN = 2'h1; + parameter GEN3_PCS_RX_ELECIDLE_INTERNAL = "TRUE"; + parameter [8:0] LL_ACK_TIMEOUT = 9'h000; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter integer LL_ACK_TIMEOUT_FUNC = 0; + parameter [15:0] LL_CPL_FC_UPDATE_TIMER = 16'h0000; + parameter LL_CPL_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [15:0] LL_FC_UPDATE_TIMER = 16'h0000; + parameter LL_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [15:0] LL_NP_FC_UPDATE_TIMER = 16'h0000; + parameter LL_NP_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [15:0] LL_P_FC_UPDATE_TIMER = 16'h0000; + parameter LL_P_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer LL_REPLAY_TIMEOUT_FUNC = 0; + parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h0FA; + parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE"; + parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE"; + parameter PF0_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter PF0_AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [3:0] PF0_ARI_CAP_VER = 4'h1; + parameter [4:0] PF0_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_BAR1_CONTROL = 3'h0; + parameter [4:0] PF0_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR3_CONTROL = 3'h0; + parameter [4:0] PF0_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR5_CONTROL = 3'h0; + parameter [7:0] PF0_BIST_REGISTER = 8'h00; + parameter [7:0] PF0_CAPABILITY_POINTER = 8'h50; + parameter [23:0] PF0_CLASS_CODE = 24'h000000; + parameter [15:0] PF0_DEVICE_ID = 16'h0000; + parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE"; + parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE"; + parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0; + parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE"; + parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0; + parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0; + parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE"; + parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE"; + parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF0_DPA_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF0_DPA_CAP_SUB_STATE_CONTROL = 5'h00; + parameter PF0_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE"; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00; + parameter [3:0] PF0_DPA_CAP_VER = 4'h1; + parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF0_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [7:0] PF0_INTERRUPT_LINE = 8'h00; + parameter [2:0] PF0_INTERRUPT_PIN = 3'h1; + parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7; + parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE"; + parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000; + parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000; + parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_LTR_CAP_VER = 4'h1; + parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00; + parameter [11:0] PF0_PB_CAP_NEXTPTR = 12'h000; + parameter PF0_PB_CAP_SYSTEM_ALLOCATED = "FALSE"; + parameter [3:0] PF0_PB_CAP_VER = 4'h1; + parameter [7:0] PF0_PM_CAP_ID = 8'h01; + parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00; + parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE"; + parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE"; + parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3; + parameter PF0_PM_CSR_NOSOFTRESET = "TRUE"; + parameter PF0_RBAR_CAP_ENABLE = "FALSE"; + parameter [2:0] PF0_RBAR_CAP_INDEX0 = 3'h0; + parameter [2:0] PF0_RBAR_CAP_INDEX1 = 3'h0; + parameter [2:0] PF0_RBAR_CAP_INDEX2 = 3'h0; + parameter [11:0] PF0_RBAR_CAP_NEXTPTR = 12'h000; + parameter [19:0] PF0_RBAR_CAP_SIZE0 = 20'h00000; + parameter [19:0] PF0_RBAR_CAP_SIZE1 = 20'h00000; + parameter [19:0] PF0_RBAR_CAP_SIZE2 = 20'h00000; + parameter [3:0] PF0_RBAR_CAP_VER = 4'h1; + parameter [2:0] PF0_RBAR_NUM = 3'h1; + parameter [7:0] PF0_REVISION_ID = 8'h00; + parameter [4:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0; + parameter [4:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0; + parameter [4:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [15:0] PF0_SUBSYSTEM_ID = 16'h0000; + parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF0_TPHR_CAP_ENABLE = "FALSE"; + parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF0_TPHR_CAP_VER = 4'h1; + parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_VC_CAP_VER = 4'h1; + parameter PF1_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter PF1_AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [4:0] PF1_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_BAR1_CONTROL = 3'h0; + parameter [4:0] PF1_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR3_CONTROL = 3'h0; + parameter [4:0] PF1_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR5_CONTROL = 3'h0; + parameter [7:0] PF1_BIST_REGISTER = 8'h00; + parameter [7:0] PF1_CAPABILITY_POINTER = 8'h50; + parameter [23:0] PF1_CLASS_CODE = 24'h000000; + parameter [15:0] PF1_DEVICE_ID = 16'h0000; + parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF1_DPA_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF1_DPA_CAP_SUB_STATE_CONTROL = 5'h00; + parameter PF1_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE"; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00; + parameter [3:0] PF1_DPA_CAP_VER = 4'h1; + parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF1_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [7:0] PF1_INTERRUPT_LINE = 8'h00; + parameter [2:0] PF1_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00; + parameter [11:0] PF1_PB_CAP_NEXTPTR = 12'h000; + parameter PF1_PB_CAP_SYSTEM_ALLOCATED = "FALSE"; + parameter [3:0] PF1_PB_CAP_VER = 4'h1; + parameter [7:0] PF1_PM_CAP_ID = 8'h01; + parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] PF1_PM_CAP_VER_ID = 3'h3; + parameter PF1_RBAR_CAP_ENABLE = "FALSE"; + parameter [2:0] PF1_RBAR_CAP_INDEX0 = 3'h0; + parameter [2:0] PF1_RBAR_CAP_INDEX1 = 3'h0; + parameter [2:0] PF1_RBAR_CAP_INDEX2 = 3'h0; + parameter [11:0] PF1_RBAR_CAP_NEXTPTR = 12'h000; + parameter [19:0] PF1_RBAR_CAP_SIZE0 = 20'h00000; + parameter [19:0] PF1_RBAR_CAP_SIZE1 = 20'h00000; + parameter [19:0] PF1_RBAR_CAP_SIZE2 = 20'h00000; + parameter [3:0] PF1_RBAR_CAP_VER = 4'h1; + parameter [2:0] PF1_RBAR_NUM = 3'h1; + parameter [7:0] PF1_REVISION_ID = 8'h00; + parameter [4:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0; + parameter [4:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0; + parameter [4:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [15:0] PF1_SUBSYSTEM_ID = 16'h0000; + parameter PF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF1_TPHR_CAP_ENABLE = "FALSE"; + parameter PF1_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF1_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF1_TPHR_CAP_VER = 4'h1; + parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE"; + parameter PL_DISABLE_GEN3_DC_BALANCE = "FALSE"; + parameter PL_DISABLE_SCRAMBLING = "FALSE"; + parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE"; + parameter PL_EQ_ADAPT_DISABLE_COEFF_CHECK = "FALSE"; + parameter PL_EQ_ADAPT_DISABLE_PRESET_CHECK = "FALSE"; + parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02; + parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1; + parameter PL_EQ_BYPASS_PHASE23 = "FALSE"; + parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE"; + parameter [15:0] PL_LANE0_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE1_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE2_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE3_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE4_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE5_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE6_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE7_EQ_CONTROL = 16'h3F00; + parameter [2:0] PL_LINK_CAP_MAX_LINK_SPEED = 3'h4; + parameter [3:0] PL_LINK_CAP_MAX_LINK_WIDTH = 4'h8; + parameter integer PL_N_FTS_COMCLK_GEN1 = 255; + parameter integer PL_N_FTS_COMCLK_GEN2 = 255; + parameter integer PL_N_FTS_COMCLK_GEN3 = 255; + parameter integer PL_N_FTS_GEN1 = 255; + parameter integer PL_N_FTS_GEN2 = 255; + parameter integer PL_N_FTS_GEN3 = 255; + parameter PL_SIM_FAST_LINK_TRAINING = "FALSE"; + parameter PL_UPSTREAM_FACING = "TRUE"; + parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h05DC; + parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h00000; + parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE"; + parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000000; + parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h186A0; + parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0064; + parameter SIM_VERSION = "1.0"; + parameter integer SPARE_BIT0 = 0; + parameter integer SPARE_BIT1 = 0; + parameter integer SPARE_BIT2 = 0; + parameter integer SPARE_BIT3 = 0; + parameter integer SPARE_BIT4 = 0; + parameter integer SPARE_BIT5 = 0; + parameter integer SPARE_BIT6 = 0; + parameter integer SPARE_BIT7 = 0; + parameter integer SPARE_BIT8 = 0; + parameter [7:0] SPARE_BYTE0 = 8'h00; + parameter [7:0] SPARE_BYTE1 = 8'h00; + parameter [7:0] SPARE_BYTE2 = 8'h00; + parameter [7:0] SPARE_BYTE3 = 8'h00; + parameter [31:0] SPARE_WORD0 = 32'h00000000; + parameter [31:0] SPARE_WORD1 = 32'h00000000; + parameter [31:0] SPARE_WORD2 = 32'h00000000; + parameter [31:0] SPARE_WORD3 = 32'h00000000; + parameter SRIOV_CAP_ENABLE = "FALSE"; + parameter [23:0] TL_COMPL_TIMEOUT_REG0 = 24'hBEBC20; + parameter [27:0] TL_COMPL_TIMEOUT_REG1 = 28'h0000000; + parameter [11:0] TL_CREDITS_CD = 12'h3E0; + parameter [7:0] TL_CREDITS_CH = 8'h20; + parameter [11:0] TL_CREDITS_NPD = 12'h028; + parameter [7:0] TL_CREDITS_NPH = 8'h20; + parameter [11:0] TL_CREDITS_PD = 12'h198; + parameter [7:0] TL_CREDITS_PH = 8'h20; + parameter TL_ENABLE_MESSAGE_RID_CHECK_ENABLE = "TRUE"; + parameter TL_EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter TL_LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter TL_LEGACY_MODE_ENABLE = "FALSE"; + parameter TL_PF_ENABLE_REG = "FALSE"; + parameter TL_TAG_MGMT_ENABLE = "TRUE"; + parameter [11:0] VF0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] VF0_CAPABILITY_POINTER = 8'h50; + parameter integer VF0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF0_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF0_PM_CAP_ID = 8'h01; + parameter [7:0] VF0_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF0_PM_CAP_VER_ID = 3'h3; + parameter VF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF0_TPHR_CAP_ENABLE = "FALSE"; + parameter VF0_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF0_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF0_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF1_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF1_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF1_PM_CAP_ID = 8'h01; + parameter [7:0] VF1_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF1_PM_CAP_VER_ID = 3'h3; + parameter VF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF1_TPHR_CAP_ENABLE = "FALSE"; + parameter VF1_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF1_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF1_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF2_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF2_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF2_PM_CAP_ID = 8'h01; + parameter [7:0] VF2_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF2_PM_CAP_VER_ID = 3'h3; + parameter VF2_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF2_TPHR_CAP_ENABLE = "FALSE"; + parameter VF2_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF2_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF2_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF2_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF3_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF3_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF3_PM_CAP_ID = 8'h01; + parameter [7:0] VF3_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF3_PM_CAP_VER_ID = 3'h3; + parameter VF3_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF3_TPHR_CAP_ENABLE = "FALSE"; + parameter VF3_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF3_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF3_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF3_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF3_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF4_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF4_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF4_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF4_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF4_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF4_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF4_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF4_PM_CAP_ID = 8'h01; + parameter [7:0] VF4_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF4_PM_CAP_VER_ID = 3'h3; + parameter VF4_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF4_TPHR_CAP_ENABLE = "FALSE"; + parameter VF4_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF4_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF4_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF4_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF4_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF4_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF5_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF5_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF5_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF5_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF5_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF5_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF5_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF5_PM_CAP_ID = 8'h01; + parameter [7:0] VF5_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF5_PM_CAP_VER_ID = 3'h3; + parameter VF5_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF5_TPHR_CAP_ENABLE = "FALSE"; + parameter VF5_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF5_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF5_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF5_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF5_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF5_TPHR_CAP_VER = 4'h1; + output CFGERRCOROUT; + output CFGERRFATALOUT; + output CFGERRNONFATALOUT; + output CFGEXTREADRECEIVED; + output CFGEXTWRITERECEIVED; + output CFGHOTRESETOUT; + output CFGINPUTUPDATEDONE; + output CFGINTERRUPTAOUTPUT; + output CFGINTERRUPTBOUTPUT; + output CFGINTERRUPTCOUTPUT; + output CFGINTERRUPTDOUTPUT; + output CFGINTERRUPTMSIFAIL; + output CFGINTERRUPTMSIMASKUPDATE; + output CFGINTERRUPTMSISENT; + output CFGINTERRUPTMSIXFAIL; + output CFGINTERRUPTMSIXSENT; + output CFGINTERRUPTSENT; + output CFGLOCALERROR; + output CFGLTRENABLE; + output CFGMCUPDATEDONE; + output CFGMGMTREADWRITEDONE; + output CFGMSGRECEIVED; + output CFGMSGTRANSMITDONE; + output CFGPERFUNCTIONUPDATEDONE; + output CFGPHYLINKDOWN; + output CFGPLSTATUSCHANGE; + output CFGPOWERSTATECHANGEINTERRUPT; + output CFGTPHSTTREADENABLE; + output CFGTPHSTTWRITEENABLE; + output DRPRDY; + output MAXISCQTLAST; + output MAXISCQTVALID; + output MAXISRCTLAST; + output MAXISRCTVALID; + output PCIERQSEQNUMVLD; + output PCIERQTAGVLD; + output PIPERX0POLARITY; + output PIPERX1POLARITY; + output PIPERX2POLARITY; + output PIPERX3POLARITY; + output PIPERX4POLARITY; + output PIPERX5POLARITY; + output PIPERX6POLARITY; + output PIPERX7POLARITY; + output PIPETX0COMPLIANCE; + output PIPETX0DATAVALID; + output PIPETX0ELECIDLE; + output PIPETX0STARTBLOCK; + output PIPETX1COMPLIANCE; + output PIPETX1DATAVALID; + output PIPETX1ELECIDLE; + output PIPETX1STARTBLOCK; + output PIPETX2COMPLIANCE; + output PIPETX2DATAVALID; + output PIPETX2ELECIDLE; + output PIPETX2STARTBLOCK; + output PIPETX3COMPLIANCE; + output PIPETX3DATAVALID; + output PIPETX3ELECIDLE; + output PIPETX3STARTBLOCK; + output PIPETX4COMPLIANCE; + output PIPETX4DATAVALID; + output PIPETX4ELECIDLE; + output PIPETX4STARTBLOCK; + output PIPETX5COMPLIANCE; + output PIPETX5DATAVALID; + output PIPETX5ELECIDLE; + output PIPETX5STARTBLOCK; + output PIPETX6COMPLIANCE; + output PIPETX6DATAVALID; + output PIPETX6ELECIDLE; + output PIPETX6STARTBLOCK; + output PIPETX7COMPLIANCE; + output PIPETX7DATAVALID; + output PIPETX7ELECIDLE; + output PIPETX7STARTBLOCK; + output PIPETXDEEMPH; + output PIPETXRCVRDET; + output PIPETXRESET; + output PIPETXSWING; + output PLEQINPROGRESS; + output [11:0] CFGFCCPLD; + output [11:0] CFGFCNPD; + output [11:0] CFGFCPD; + output [11:0] CFGVFSTATUS; + output [143:0] MIREPLAYRAMWRITEDATA; + output [143:0] MIREQUESTRAMWRITEDATA; + output [15:0] CFGPERFUNCSTATUSDATA; + output [15:0] DBGDATAOUT; + output [15:0] DRPDO; + output [17:0] CFGVFPOWERSTATE; + output [17:0] CFGVFTPHSTMODE; + output [1:0] CFGDPASUBSTATECHANGE; + output [1:0] CFGFLRINPROCESS; + output [1:0] CFGINTERRUPTMSIENABLE; + output [1:0] CFGINTERRUPTMSIXENABLE; + output [1:0] CFGINTERRUPTMSIXMASK; + output [1:0] CFGLINKPOWERSTATE; + output [1:0] CFGOBFFENABLE; + output [1:0] CFGPHYLINKSTATUS; + output [1:0] CFGRCBSTATUS; + output [1:0] CFGTPHREQUESTERENABLE; + output [1:0] MIREPLAYRAMREADENABLE; + output [1:0] MIREPLAYRAMWRITEENABLE; + output [1:0] PCIERQTAGAV; + output [1:0] PCIETFCNPDAV; + output [1:0] PCIETFCNPHAV; + output [1:0] PIPERX0EQCONTROL; + output [1:0] PIPERX1EQCONTROL; + output [1:0] PIPERX2EQCONTROL; + output [1:0] PIPERX3EQCONTROL; + output [1:0] PIPERX4EQCONTROL; + output [1:0] PIPERX5EQCONTROL; + output [1:0] PIPERX6EQCONTROL; + output [1:0] PIPERX7EQCONTROL; + output [1:0] PIPETX0CHARISK; + output [1:0] PIPETX0EQCONTROL; + output [1:0] PIPETX0POWERDOWN; + output [1:0] PIPETX0SYNCHEADER; + output [1:0] PIPETX1CHARISK; + output [1:0] PIPETX1EQCONTROL; + output [1:0] PIPETX1POWERDOWN; + output [1:0] PIPETX1SYNCHEADER; + output [1:0] PIPETX2CHARISK; + output [1:0] PIPETX2EQCONTROL; + output [1:0] PIPETX2POWERDOWN; + output [1:0] PIPETX2SYNCHEADER; + output [1:0] PIPETX3CHARISK; + output [1:0] PIPETX3EQCONTROL; + output [1:0] PIPETX3POWERDOWN; + output [1:0] PIPETX3SYNCHEADER; + output [1:0] PIPETX4CHARISK; + output [1:0] PIPETX4EQCONTROL; + output [1:0] PIPETX4POWERDOWN; + output [1:0] PIPETX4SYNCHEADER; + output [1:0] PIPETX5CHARISK; + output [1:0] PIPETX5EQCONTROL; + output [1:0] PIPETX5POWERDOWN; + output [1:0] PIPETX5SYNCHEADER; + output [1:0] PIPETX6CHARISK; + output [1:0] PIPETX6EQCONTROL; + output [1:0] PIPETX6POWERDOWN; + output [1:0] PIPETX6SYNCHEADER; + output [1:0] PIPETX7CHARISK; + output [1:0] PIPETX7EQCONTROL; + output [1:0] PIPETX7POWERDOWN; + output [1:0] PIPETX7SYNCHEADER; + output [1:0] PIPETXRATE; + output [1:0] PLEQPHASE; + output [255:0] MAXISCQTDATA; + output [255:0] MAXISRCTDATA; + output [2:0] CFGCURRENTSPEED; + output [2:0] CFGMAXPAYLOAD; + output [2:0] CFGMAXREADREQ; + output [2:0] CFGTPHFUNCTIONNUM; + output [2:0] PIPERX0EQPRESET; + output [2:0] PIPERX1EQPRESET; + output [2:0] PIPERX2EQPRESET; + output [2:0] PIPERX3EQPRESET; + output [2:0] PIPERX4EQPRESET; + output [2:0] PIPERX5EQPRESET; + output [2:0] PIPERX6EQPRESET; + output [2:0] PIPERX7EQPRESET; + output [2:0] PIPETXMARGIN; + output [31:0] CFGEXTWRITEDATA; + output [31:0] CFGINTERRUPTMSIDATA; + output [31:0] CFGMGMTREADDATA; + output [31:0] CFGTPHSTTWRITEDATA; + output [31:0] PIPETX0DATA; + output [31:0] PIPETX1DATA; + output [31:0] PIPETX2DATA; + output [31:0] PIPETX3DATA; + output [31:0] PIPETX4DATA; + output [31:0] PIPETX5DATA; + output [31:0] PIPETX6DATA; + output [31:0] PIPETX7DATA; + output [3:0] CFGEXTWRITEBYTEENABLE; + output [3:0] CFGNEGOTIATEDWIDTH; + output [3:0] CFGTPHSTTWRITEBYTEVALID; + output [3:0] MICOMPLETIONRAMREADENABLEL; + output [3:0] MICOMPLETIONRAMREADENABLEU; + output [3:0] MICOMPLETIONRAMWRITEENABLEL; + output [3:0] MICOMPLETIONRAMWRITEENABLEU; + output [3:0] MIREQUESTRAMREADENABLE; + output [3:0] MIREQUESTRAMWRITEENABLE; + output [3:0] PCIERQSEQNUM; + output [3:0] PIPERX0EQLPTXPRESET; + output [3:0] PIPERX1EQLPTXPRESET; + output [3:0] PIPERX2EQLPTXPRESET; + output [3:0] PIPERX3EQLPTXPRESET; + output [3:0] PIPERX4EQLPTXPRESET; + output [3:0] PIPERX5EQLPTXPRESET; + output [3:0] PIPERX6EQLPTXPRESET; + output [3:0] PIPERX7EQLPTXPRESET; + output [3:0] PIPETX0EQPRESET; + output [3:0] PIPETX1EQPRESET; + output [3:0] PIPETX2EQPRESET; + output [3:0] PIPETX3EQPRESET; + output [3:0] PIPETX4EQPRESET; + output [3:0] PIPETX5EQPRESET; + output [3:0] PIPETX6EQPRESET; + output [3:0] PIPETX7EQPRESET; + output [3:0] SAXISCCTREADY; + output [3:0] SAXISRQTREADY; + output [4:0] CFGMSGRECEIVEDTYPE; + output [4:0] CFGTPHSTTADDRESS; + output [5:0] CFGFUNCTIONPOWERSTATE; + output [5:0] CFGINTERRUPTMSIMMENABLE; + output [5:0] CFGINTERRUPTMSIVFENABLE; + output [5:0] CFGINTERRUPTMSIXVFENABLE; + output [5:0] CFGINTERRUPTMSIXVFMASK; + output [5:0] CFGLTSSMSTATE; + output [5:0] CFGTPHSTMODE; + output [5:0] CFGVFFLRINPROCESS; + output [5:0] CFGVFTPHREQUESTERENABLE; + output [5:0] PCIECQNPREQCOUNT; + output [5:0] PCIERQTAG; + output [5:0] PIPERX0EQLPLFFS; + output [5:0] PIPERX1EQLPLFFS; + output [5:0] PIPERX2EQLPLFFS; + output [5:0] PIPERX3EQLPLFFS; + output [5:0] PIPERX4EQLPLFFS; + output [5:0] PIPERX5EQLPLFFS; + output [5:0] PIPERX6EQLPLFFS; + output [5:0] PIPERX7EQLPLFFS; + output [5:0] PIPETX0EQDEEMPH; + output [5:0] PIPETX1EQDEEMPH; + output [5:0] PIPETX2EQDEEMPH; + output [5:0] PIPETX3EQDEEMPH; + output [5:0] PIPETX4EQDEEMPH; + output [5:0] PIPETX5EQDEEMPH; + output [5:0] PIPETX6EQDEEMPH; + output [5:0] PIPETX7EQDEEMPH; + output [71:0] MICOMPLETIONRAMWRITEDATAL; + output [71:0] MICOMPLETIONRAMWRITEDATAU; + output [74:0] MAXISRCTUSER; + output [7:0] CFGEXTFUNCTIONNUMBER; + output [7:0] CFGFCCPLH; + output [7:0] CFGFCNPH; + output [7:0] CFGFCPH; + output [7:0] CFGFUNCTIONSTATUS; + output [7:0] CFGMSGRECEIVEDDATA; + output [7:0] MAXISCQTKEEP; + output [7:0] MAXISRCTKEEP; + output [7:0] PLGEN3PCSRXSLIDE; + output [84:0] MAXISCQTUSER; + output [8:0] MIREPLAYRAMADDRESS; + output [8:0] MIREQUESTRAMREADADDRESSA; + output [8:0] MIREQUESTRAMREADADDRESSB; + output [8:0] MIREQUESTRAMWRITEADDRESSA; + output [8:0] MIREQUESTRAMWRITEADDRESSB; + output [9:0] CFGEXTREGISTERNUMBER; + output [9:0] MICOMPLETIONRAMREADADDRESSAL; + output [9:0] MICOMPLETIONRAMREADADDRESSAU; + output [9:0] MICOMPLETIONRAMREADADDRESSBL; + output [9:0] MICOMPLETIONRAMREADADDRESSBU; + output [9:0] MICOMPLETIONRAMWRITEADDRESSAL; + output [9:0] MICOMPLETIONRAMWRITEADDRESSAU; + output [9:0] MICOMPLETIONRAMWRITEADDRESSBL; + output [9:0] MICOMPLETIONRAMWRITEADDRESSBU; + input CFGCONFIGSPACEENABLE; + input CFGERRCORIN; + input CFGERRUNCORIN; + input CFGEXTREADDATAVALID; + input CFGHOTRESETIN; + input CFGINPUTUPDATEREQUEST; + input CFGINTERRUPTMSITPHPRESENT; + input CFGINTERRUPTMSIXINT; + input CFGLINKTRAININGENABLE; + input CFGMCUPDATEREQUEST; + input CFGMGMTREAD; + input CFGMGMTTYPE1CFGREGACCESS; + input CFGMGMTWRITE; + input CFGMSGTRANSMIT; + input CFGPERFUNCTIONOUTPUTREQUEST; + input CFGPOWERSTATECHANGEACK; + input CFGREQPMTRANSITIONL23READY; + input CFGTPHSTTREADDATAVALID; + input CORECLK; + input CORECLKMICOMPLETIONRAML; + input CORECLKMICOMPLETIONRAMU; + input CORECLKMIREPLAYRAM; + input CORECLKMIREQUESTRAM; + input DRPCLK; + input DRPEN; + input DRPWE; + input MGMTRESETN; + input MGMTSTICKYRESETN; + input PCIECQNPREQ; + input PIPECLK; + input PIPERESETN; + input PIPERX0DATAVALID; + input PIPERX0ELECIDLE; + input PIPERX0EQDONE; + input PIPERX0EQLPADAPTDONE; + input PIPERX0EQLPLFFSSEL; + input PIPERX0PHYSTATUS; + input PIPERX0STARTBLOCK; + input PIPERX0VALID; + input PIPERX1DATAVALID; + input PIPERX1ELECIDLE; + input PIPERX1EQDONE; + input PIPERX1EQLPADAPTDONE; + input PIPERX1EQLPLFFSSEL; + input PIPERX1PHYSTATUS; + input PIPERX1STARTBLOCK; + input PIPERX1VALID; + input PIPERX2DATAVALID; + input PIPERX2ELECIDLE; + input PIPERX2EQDONE; + input PIPERX2EQLPADAPTDONE; + input PIPERX2EQLPLFFSSEL; + input PIPERX2PHYSTATUS; + input PIPERX2STARTBLOCK; + input PIPERX2VALID; + input PIPERX3DATAVALID; + input PIPERX3ELECIDLE; + input PIPERX3EQDONE; + input PIPERX3EQLPADAPTDONE; + input PIPERX3EQLPLFFSSEL; + input PIPERX3PHYSTATUS; + input PIPERX3STARTBLOCK; + input PIPERX3VALID; + input PIPERX4DATAVALID; + input PIPERX4ELECIDLE; + input PIPERX4EQDONE; + input PIPERX4EQLPADAPTDONE; + input PIPERX4EQLPLFFSSEL; + input PIPERX4PHYSTATUS; + input PIPERX4STARTBLOCK; + input PIPERX4VALID; + input PIPERX5DATAVALID; + input PIPERX5ELECIDLE; + input PIPERX5EQDONE; + input PIPERX5EQLPADAPTDONE; + input PIPERX5EQLPLFFSSEL; + input PIPERX5PHYSTATUS; + input PIPERX5STARTBLOCK; + input PIPERX5VALID; + input PIPERX6DATAVALID; + input PIPERX6ELECIDLE; + input PIPERX6EQDONE; + input PIPERX6EQLPADAPTDONE; + input PIPERX6EQLPLFFSSEL; + input PIPERX6PHYSTATUS; + input PIPERX6STARTBLOCK; + input PIPERX6VALID; + input PIPERX7DATAVALID; + input PIPERX7ELECIDLE; + input PIPERX7EQDONE; + input PIPERX7EQLPADAPTDONE; + input PIPERX7EQLPLFFSSEL; + input PIPERX7PHYSTATUS; + input PIPERX7STARTBLOCK; + input PIPERX7VALID; + input PIPETX0EQDONE; + input PIPETX1EQDONE; + input PIPETX2EQDONE; + input PIPETX3EQDONE; + input PIPETX4EQDONE; + input PIPETX5EQDONE; + input PIPETX6EQDONE; + input PIPETX7EQDONE; + input PLDISABLESCRAMBLER; + input PLEQRESETEIEOSCOUNT; + input PLGEN3PCSDISABLE; + input RECCLK; + input RESETN; + input SAXISCCTLAST; + input SAXISCCTVALID; + input SAXISRQTLAST; + input SAXISRQTVALID; + input USERCLK; + input [10:0] DRPADDR; + input [143:0] MICOMPLETIONRAMREADDATA; + input [143:0] MIREPLAYRAMREADDATA; + input [143:0] MIREQUESTRAMREADDATA; + input [15:0] CFGDEVID; + input [15:0] CFGSUBSYSID; + input [15:0] CFGSUBSYSVENDID; + input [15:0] CFGVENDID; + input [15:0] DRPDI; + input [17:0] PIPERX0EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX1EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX2EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX3EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX4EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX5EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX6EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPERX7EQLPNEWTXCOEFFORPRESET; + input [17:0] PIPETX0EQCOEFF; + input [17:0] PIPETX1EQCOEFF; + input [17:0] PIPETX2EQCOEFF; + input [17:0] PIPETX3EQCOEFF; + input [17:0] PIPETX4EQCOEFF; + input [17:0] PIPETX5EQCOEFF; + input [17:0] PIPETX6EQCOEFF; + input [17:0] PIPETX7EQCOEFF; + input [18:0] CFGMGMTADDR; + input [1:0] CFGFLRDONE; + input [1:0] CFGINTERRUPTMSITPHTYPE; + input [1:0] CFGINTERRUPTPENDING; + input [1:0] PIPERX0CHARISK; + input [1:0] PIPERX0SYNCHEADER; + input [1:0] PIPERX1CHARISK; + input [1:0] PIPERX1SYNCHEADER; + input [1:0] PIPERX2CHARISK; + input [1:0] PIPERX2SYNCHEADER; + input [1:0] PIPERX3CHARISK; + input [1:0] PIPERX3SYNCHEADER; + input [1:0] PIPERX4CHARISK; + input [1:0] PIPERX4SYNCHEADER; + input [1:0] PIPERX5CHARISK; + input [1:0] PIPERX5SYNCHEADER; + input [1:0] PIPERX6CHARISK; + input [1:0] PIPERX6SYNCHEADER; + input [1:0] PIPERX7CHARISK; + input [1:0] PIPERX7SYNCHEADER; + input [21:0] MAXISCQTREADY; + input [21:0] MAXISRCTREADY; + input [255:0] SAXISCCTDATA; + input [255:0] SAXISRQTDATA; + input [2:0] CFGDSFUNCTIONNUMBER; + input [2:0] CFGFCSEL; + input [2:0] CFGINTERRUPTMSIATTR; + input [2:0] CFGINTERRUPTMSIFUNCTIONNUMBER; + input [2:0] CFGMSGTRANSMITTYPE; + input [2:0] CFGPERFUNCSTATUSCONTROL; + input [2:0] CFGPERFUNCTIONNUMBER; + input [2:0] PIPERX0STATUS; + input [2:0] PIPERX1STATUS; + input [2:0] PIPERX2STATUS; + input [2:0] PIPERX3STATUS; + input [2:0] PIPERX4STATUS; + input [2:0] PIPERX5STATUS; + input [2:0] PIPERX6STATUS; + input [2:0] PIPERX7STATUS; + input [31:0] CFGEXTREADDATA; + input [31:0] CFGINTERRUPTMSIINT; + input [31:0] CFGINTERRUPTMSIXDATA; + input [31:0] CFGMGMTWRITEDATA; + input [31:0] CFGMSGTRANSMITDATA; + input [31:0] CFGTPHSTTREADDATA; + input [31:0] PIPERX0DATA; + input [31:0] PIPERX1DATA; + input [31:0] PIPERX2DATA; + input [31:0] PIPERX3DATA; + input [31:0] PIPERX4DATA; + input [31:0] PIPERX5DATA; + input [31:0] PIPERX6DATA; + input [31:0] PIPERX7DATA; + input [32:0] SAXISCCTUSER; + input [3:0] CFGINTERRUPTINT; + input [3:0] CFGINTERRUPTMSISELECT; + input [3:0] CFGMGMTBYTEENABLE; + input [4:0] CFGDSDEVICENUMBER; + input [59:0] SAXISRQTUSER; + input [5:0] CFGVFFLRDONE; + input [5:0] PIPEEQFS; + input [5:0] PIPEEQLF; + input [63:0] CFGDSN; + input [63:0] CFGINTERRUPTMSIPENDINGSTATUS; + input [63:0] CFGINTERRUPTMSIXADDRESS; + input [7:0] CFGDSBUSNUMBER; + input [7:0] CFGDSPORTNUMBER; + input [7:0] CFGREVID; + input [7:0] PLGEN3PCSRXSYNCDONE; + input [7:0] SAXISCCTKEEP; + input [7:0] SAXISRQTKEEP; + input [8:0] CFGINTERRUPTMSITPHSTTAG; +endmodule + +module PCIE_3_1 (...); + parameter ARI_CAP_ENABLE = "FALSE"; + parameter AXISTEN_IF_CC_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_CC_PARITY_CHK = "TRUE"; + parameter AXISTEN_IF_CQ_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE"; + parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000; + parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE"; + parameter AXISTEN_IF_RC_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_RC_STRADDLE = "FALSE"; + parameter AXISTEN_IF_RQ_ALIGNMENT_MODE = "FALSE"; + parameter AXISTEN_IF_RQ_PARITY_CHK = "TRUE"; + parameter [1:0] AXISTEN_IF_WIDTH = 2'h2; + parameter CRM_CORE_CLK_FREQ_500 = "TRUE"; + parameter [1:0] CRM_USER_CLK_FREQ = 2'h2; + parameter DEBUG_CFG_LOCAL_MGMT_REG_ACCESS_OVERRIDE = "FALSE"; + parameter DEBUG_PL_DISABLE_EI_INFER_IN_L0 = "FALSE"; + parameter DEBUG_TL_DISABLE_RX_TLP_ORDER_CHECKS = "FALSE"; + parameter [7:0] DNSTREAM_LINK_NUM = 8'h00; + parameter [8:0] LL_ACK_TIMEOUT = 9'h000; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter integer LL_ACK_TIMEOUT_FUNC = 0; + parameter [15:0] LL_CPL_FC_UPDATE_TIMER = 16'h0000; + parameter LL_CPL_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [15:0] LL_FC_UPDATE_TIMER = 16'h0000; + parameter LL_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [15:0] LL_NP_FC_UPDATE_TIMER = 16'h0000; + parameter LL_NP_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [15:0] LL_P_FC_UPDATE_TIMER = 16'h0000; + parameter LL_P_FC_UPDATE_TIMER_OVERRIDE = "FALSE"; + parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer LL_REPLAY_TIMEOUT_FUNC = 0; + parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h0FA; + parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE"; + parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE"; + parameter [11:0] MCAP_CAP_NEXTPTR = 12'h000; + parameter MCAP_CONFIGURE_OVERRIDE = "FALSE"; + parameter MCAP_ENABLE = "FALSE"; + parameter MCAP_EOS_DESIGN_SWITCH = "FALSE"; + parameter [31:0] MCAP_FPGA_BITSTREAM_VERSION = 32'h00000000; + parameter MCAP_GATE_IO_ENABLE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_GATE_MEM_ENABLE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_INPUT_GATE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_INTERRUPT_ON_MCAP_EOS = "FALSE"; + parameter MCAP_INTERRUPT_ON_MCAP_ERROR = "FALSE"; + parameter [15:0] MCAP_VSEC_ID = 16'h0000; + parameter [11:0] MCAP_VSEC_LEN = 12'h02C; + parameter [3:0] MCAP_VSEC_REV = 4'h0; + parameter PF0_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter PF0_AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [3:0] PF0_ARI_CAP_VER = 4'h1; + parameter [5:0] PF0_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR0_CONTROL = 3'h4; + parameter [5:0] PF0_BAR1_APERTURE_SIZE = 6'h00; + parameter [2:0] PF0_BAR1_CONTROL = 3'h0; + parameter [4:0] PF0_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR3_CONTROL = 3'h0; + parameter [4:0] PF0_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR5_CONTROL = 3'h0; + parameter [7:0] PF0_BIST_REGISTER = 8'h00; + parameter [7:0] PF0_CAPABILITY_POINTER = 8'h50; + parameter [23:0] PF0_CLASS_CODE = 24'h000000; + parameter [15:0] PF0_DEVICE_ID = 16'h0000; + parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_ARI_FORWARD_ENABLE = "FALSE"; + parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE"; + parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE"; + parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0; + parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE"; + parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0; + parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0; + parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE"; + parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE"; + parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF0_DPA_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF0_DPA_CAP_SUB_STATE_CONTROL = 5'h00; + parameter PF0_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE"; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00; + parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00; + parameter [3:0] PF0_DPA_CAP_VER = 4'h1; + parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF0_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [7:0] PF0_INTERRUPT_LINE = 8'h00; + parameter [2:0] PF0_INTERRUPT_PIN = 3'h1; + parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7; + parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE"; + parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000; + parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000; + parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_LTR_CAP_VER = 4'h1; + parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00; + parameter PF0_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [31:0] PF0_PB_CAP_DATA_REG_D0 = 32'h00000000; + parameter [31:0] PF0_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000; + parameter [31:0] PF0_PB_CAP_DATA_REG_D1 = 32'h00000000; + parameter [31:0] PF0_PB_CAP_DATA_REG_D3HOT = 32'h00000000; + parameter [11:0] PF0_PB_CAP_NEXTPTR = 12'h000; + parameter PF0_PB_CAP_SYSTEM_ALLOCATED = "FALSE"; + parameter [3:0] PF0_PB_CAP_VER = 4'h1; + parameter [7:0] PF0_PM_CAP_ID = 8'h01; + parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00; + parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE"; + parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE"; + parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3; + parameter PF0_PM_CSR_NOSOFTRESET = "TRUE"; + parameter PF0_RBAR_CAP_ENABLE = "FALSE"; + parameter [11:0] PF0_RBAR_CAP_NEXTPTR = 12'h000; + parameter [19:0] PF0_RBAR_CAP_SIZE0 = 20'h00000; + parameter [19:0] PF0_RBAR_CAP_SIZE1 = 20'h00000; + parameter [19:0] PF0_RBAR_CAP_SIZE2 = 20'h00000; + parameter [3:0] PF0_RBAR_CAP_VER = 4'h1; + parameter [2:0] PF0_RBAR_CONTROL_INDEX0 = 3'h0; + parameter [2:0] PF0_RBAR_CONTROL_INDEX1 = 3'h0; + parameter [2:0] PF0_RBAR_CONTROL_INDEX2 = 3'h0; + parameter [4:0] PF0_RBAR_CONTROL_SIZE0 = 5'h00; + parameter [4:0] PF0_RBAR_CONTROL_SIZE1 = 5'h00; + parameter [4:0] PF0_RBAR_CONTROL_SIZE2 = 5'h00; + parameter [2:0] PF0_RBAR_NUM = 3'h1; + parameter [7:0] PF0_REVISION_ID = 8'h00; + parameter [11:0] PF0_SECONDARY_PCIE_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0; + parameter [4:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0; + parameter [4:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [15:0] PF0_SUBSYSTEM_ID = 16'h0000; + parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF0_TPHR_CAP_ENABLE = "FALSE"; + parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF0_TPHR_CAP_VER = 4'h1; + parameter PF0_VC_CAP_ENABLE = "FALSE"; + parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_VC_CAP_VER = 4'h1; + parameter PF1_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter PF1_AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [5:0] PF1_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR0_CONTROL = 3'h4; + parameter [5:0] PF1_BAR1_APERTURE_SIZE = 6'h00; + parameter [2:0] PF1_BAR1_CONTROL = 3'h0; + parameter [4:0] PF1_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR3_CONTROL = 3'h0; + parameter [4:0] PF1_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR5_CONTROL = 3'h0; + parameter [7:0] PF1_BIST_REGISTER = 8'h00; + parameter [7:0] PF1_CAPABILITY_POINTER = 8'h50; + parameter [23:0] PF1_CLASS_CODE = 24'h000000; + parameter [15:0] PF1_DEVICE_ID = 16'h0000; + parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF1_DPA_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF1_DPA_CAP_SUB_STATE_CONTROL = 5'h00; + parameter PF1_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE"; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00; + parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00; + parameter [3:0] PF1_DPA_CAP_VER = 4'h1; + parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF1_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [7:0] PF1_INTERRUPT_LINE = 8'h00; + parameter [2:0] PF1_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00; + parameter PF1_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [31:0] PF1_PB_CAP_DATA_REG_D0 = 32'h00000000; + parameter [31:0] PF1_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000; + parameter [31:0] PF1_PB_CAP_DATA_REG_D1 = 32'h00000000; + parameter [31:0] PF1_PB_CAP_DATA_REG_D3HOT = 32'h00000000; + parameter [11:0] PF1_PB_CAP_NEXTPTR = 12'h000; + parameter PF1_PB_CAP_SYSTEM_ALLOCATED = "FALSE"; + parameter [3:0] PF1_PB_CAP_VER = 4'h1; + parameter [7:0] PF1_PM_CAP_ID = 8'h01; + parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] PF1_PM_CAP_VER_ID = 3'h3; + parameter PF1_RBAR_CAP_ENABLE = "FALSE"; + parameter [11:0] PF1_RBAR_CAP_NEXTPTR = 12'h000; + parameter [19:0] PF1_RBAR_CAP_SIZE0 = 20'h00000; + parameter [19:0] PF1_RBAR_CAP_SIZE1 = 20'h00000; + parameter [19:0] PF1_RBAR_CAP_SIZE2 = 20'h00000; + parameter [3:0] PF1_RBAR_CAP_VER = 4'h1; + parameter [2:0] PF1_RBAR_CONTROL_INDEX0 = 3'h0; + parameter [2:0] PF1_RBAR_CONTROL_INDEX1 = 3'h0; + parameter [2:0] PF1_RBAR_CONTROL_INDEX2 = 3'h0; + parameter [4:0] PF1_RBAR_CONTROL_SIZE0 = 5'h00; + parameter [4:0] PF1_RBAR_CONTROL_SIZE1 = 5'h00; + parameter [4:0] PF1_RBAR_CONTROL_SIZE2 = 5'h00; + parameter [2:0] PF1_RBAR_NUM = 3'h1; + parameter [7:0] PF1_REVISION_ID = 8'h00; + parameter [4:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0; + parameter [4:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0; + parameter [4:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [15:0] PF1_SUBSYSTEM_ID = 16'h0000; + parameter PF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF1_TPHR_CAP_ENABLE = "FALSE"; + parameter PF1_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF1_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF1_TPHR_CAP_VER = 4'h1; + parameter PF2_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter PF2_AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [11:0] PF2_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF2_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF2_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [5:0] PF2_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR0_CONTROL = 3'h4; + parameter [5:0] PF2_BAR1_APERTURE_SIZE = 6'h00; + parameter [2:0] PF2_BAR1_CONTROL = 3'h0; + parameter [4:0] PF2_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR2_CONTROL = 3'h4; + parameter [4:0] PF2_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR3_CONTROL = 3'h0; + parameter [4:0] PF2_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR4_CONTROL = 3'h4; + parameter [4:0] PF2_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR5_CONTROL = 3'h0; + parameter [7:0] PF2_BIST_REGISTER = 8'h00; + parameter [7:0] PF2_CAPABILITY_POINTER = 8'h50; + parameter [23:0] PF2_CLASS_CODE = 24'h000000; + parameter [15:0] PF2_DEVICE_ID = 16'h0000; + parameter [2:0] PF2_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF2_DPA_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF2_DPA_CAP_SUB_STATE_CONTROL = 5'h00; + parameter PF2_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE"; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00; + parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00; + parameter [3:0] PF2_DPA_CAP_VER = 4'h1; + parameter [11:0] PF2_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF2_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF2_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [7:0] PF2_INTERRUPT_LINE = 8'h00; + parameter [2:0] PF2_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF2_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF2_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF2_MSI_CAP_NEXTPTR = 8'h00; + parameter PF2_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [31:0] PF2_PB_CAP_DATA_REG_D0 = 32'h00000000; + parameter [31:0] PF2_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000; + parameter [31:0] PF2_PB_CAP_DATA_REG_D1 = 32'h00000000; + parameter [31:0] PF2_PB_CAP_DATA_REG_D3HOT = 32'h00000000; + parameter [11:0] PF2_PB_CAP_NEXTPTR = 12'h000; + parameter PF2_PB_CAP_SYSTEM_ALLOCATED = "FALSE"; + parameter [3:0] PF2_PB_CAP_VER = 4'h1; + parameter [7:0] PF2_PM_CAP_ID = 8'h01; + parameter [7:0] PF2_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] PF2_PM_CAP_VER_ID = 3'h3; + parameter PF2_RBAR_CAP_ENABLE = "FALSE"; + parameter [11:0] PF2_RBAR_CAP_NEXTPTR = 12'h000; + parameter [19:0] PF2_RBAR_CAP_SIZE0 = 20'h00000; + parameter [19:0] PF2_RBAR_CAP_SIZE1 = 20'h00000; + parameter [19:0] PF2_RBAR_CAP_SIZE2 = 20'h00000; + parameter [3:0] PF2_RBAR_CAP_VER = 4'h1; + parameter [2:0] PF2_RBAR_CONTROL_INDEX0 = 3'h0; + parameter [2:0] PF2_RBAR_CONTROL_INDEX1 = 3'h0; + parameter [2:0] PF2_RBAR_CONTROL_INDEX2 = 3'h0; + parameter [4:0] PF2_RBAR_CONTROL_SIZE0 = 5'h00; + parameter [4:0] PF2_RBAR_CONTROL_SIZE1 = 5'h00; + parameter [4:0] PF2_RBAR_CONTROL_SIZE2 = 5'h00; + parameter [2:0] PF2_RBAR_NUM = 3'h1; + parameter [7:0] PF2_REVISION_ID = 8'h00; + parameter [4:0] PF2_SRIOV_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF2_SRIOV_BAR1_CONTROL = 3'h0; + parameter [4:0] PF2_SRIOV_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR3_CONTROL = 3'h0; + parameter [4:0] PF2_SRIOV_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF2_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF2_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF2_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF2_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF2_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF2_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF2_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF2_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [15:0] PF2_SUBSYSTEM_ID = 16'h0000; + parameter PF2_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF2_TPHR_CAP_ENABLE = "FALSE"; + parameter PF2_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF2_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF2_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF2_TPHR_CAP_VER = 4'h1; + parameter PF3_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE"; + parameter PF3_AER_CAP_ECRC_GEN_CAPABLE = "FALSE"; + parameter [11:0] PF3_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF3_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF3_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [5:0] PF3_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR0_CONTROL = 3'h4; + parameter [5:0] PF3_BAR1_APERTURE_SIZE = 6'h00; + parameter [2:0] PF3_BAR1_CONTROL = 3'h0; + parameter [4:0] PF3_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR2_CONTROL = 3'h4; + parameter [4:0] PF3_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR3_CONTROL = 3'h0; + parameter [4:0] PF3_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR4_CONTROL = 3'h4; + parameter [4:0] PF3_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR5_CONTROL = 3'h0; + parameter [7:0] PF3_BIST_REGISTER = 8'h00; + parameter [7:0] PF3_CAPABILITY_POINTER = 8'h50; + parameter [23:0] PF3_CLASS_CODE = 24'h000000; + parameter [15:0] PF3_DEVICE_ID = 16'h0000; + parameter [2:0] PF3_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF3_DPA_CAP_NEXTPTR = 12'h000; + parameter [4:0] PF3_DPA_CAP_SUB_STATE_CONTROL = 5'h00; + parameter PF3_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE"; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00; + parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00; + parameter [3:0] PF3_DPA_CAP_VER = 4'h1; + parameter [11:0] PF3_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF3_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF3_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [7:0] PF3_INTERRUPT_LINE = 8'h00; + parameter [2:0] PF3_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF3_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF3_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF3_MSI_CAP_NEXTPTR = 8'h00; + parameter PF3_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [31:0] PF3_PB_CAP_DATA_REG_D0 = 32'h00000000; + parameter [31:0] PF3_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000; + parameter [31:0] PF3_PB_CAP_DATA_REG_D1 = 32'h00000000; + parameter [31:0] PF3_PB_CAP_DATA_REG_D3HOT = 32'h00000000; + parameter [11:0] PF3_PB_CAP_NEXTPTR = 12'h000; + parameter PF3_PB_CAP_SYSTEM_ALLOCATED = "FALSE"; + parameter [3:0] PF3_PB_CAP_VER = 4'h1; + parameter [7:0] PF3_PM_CAP_ID = 8'h01; + parameter [7:0] PF3_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] PF3_PM_CAP_VER_ID = 3'h3; + parameter PF3_RBAR_CAP_ENABLE = "FALSE"; + parameter [11:0] PF3_RBAR_CAP_NEXTPTR = 12'h000; + parameter [19:0] PF3_RBAR_CAP_SIZE0 = 20'h00000; + parameter [19:0] PF3_RBAR_CAP_SIZE1 = 20'h00000; + parameter [19:0] PF3_RBAR_CAP_SIZE2 = 20'h00000; + parameter [3:0] PF3_RBAR_CAP_VER = 4'h1; + parameter [2:0] PF3_RBAR_CONTROL_INDEX0 = 3'h0; + parameter [2:0] PF3_RBAR_CONTROL_INDEX1 = 3'h0; + parameter [2:0] PF3_RBAR_CONTROL_INDEX2 = 3'h0; + parameter [4:0] PF3_RBAR_CONTROL_SIZE0 = 5'h00; + parameter [4:0] PF3_RBAR_CONTROL_SIZE1 = 5'h00; + parameter [4:0] PF3_RBAR_CONTROL_SIZE2 = 5'h00; + parameter [2:0] PF3_RBAR_NUM = 3'h1; + parameter [7:0] PF3_REVISION_ID = 8'h00; + parameter [4:0] PF3_SRIOV_BAR0_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF3_SRIOV_BAR1_CONTROL = 3'h0; + parameter [4:0] PF3_SRIOV_BAR2_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR3_CONTROL = 3'h0; + parameter [4:0] PF3_SRIOV_BAR4_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF3_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF3_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF3_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF3_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF3_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF3_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF3_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF3_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [15:0] PF3_SUBSYSTEM_ID = 16'h0000; + parameter PF3_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF3_TPHR_CAP_ENABLE = "FALSE"; + parameter PF3_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF3_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF3_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF3_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF3_TPHR_CAP_VER = 4'h1; + parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN3 = "FALSE"; + parameter PL_DISABLE_AUTO_SPEED_CHANGE_TO_GEN2 = "FALSE"; + parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE"; + parameter PL_DISABLE_GEN3_DC_BALANCE = "FALSE"; + parameter PL_DISABLE_GEN3_LFSR_UPDATE_ON_SKP = "TRUE"; + parameter PL_DISABLE_RETRAIN_ON_FRAMING_ERROR = "FALSE"; + parameter PL_DISABLE_SCRAMBLING = "FALSE"; + parameter PL_DISABLE_SYNC_HEADER_FRAMING_ERROR = "FALSE"; + parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE"; + parameter PL_EQ_ADAPT_DISABLE_COEFF_CHECK = "FALSE"; + parameter PL_EQ_ADAPT_DISABLE_PRESET_CHECK = "FALSE"; + parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02; + parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1; + parameter PL_EQ_BYPASS_PHASE23 = "FALSE"; + parameter [2:0] PL_EQ_DEFAULT_GEN3_RX_PRESET_HINT = 3'h3; + parameter [3:0] PL_EQ_DEFAULT_GEN3_TX_PRESET = 4'h4; + parameter PL_EQ_PHASE01_RX_ADAPT = "FALSE"; + parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE"; + parameter [15:0] PL_LANE0_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE1_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE2_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE3_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE4_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE5_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE6_EQ_CONTROL = 16'h3F00; + parameter [15:0] PL_LANE7_EQ_CONTROL = 16'h3F00; + parameter [2:0] PL_LINK_CAP_MAX_LINK_SPEED = 3'h4; + parameter [3:0] PL_LINK_CAP_MAX_LINK_WIDTH = 4'h8; + parameter integer PL_N_FTS_COMCLK_GEN1 = 255; + parameter integer PL_N_FTS_COMCLK_GEN2 = 255; + parameter integer PL_N_FTS_COMCLK_GEN3 = 255; + parameter integer PL_N_FTS_GEN1 = 255; + parameter integer PL_N_FTS_GEN2 = 255; + parameter integer PL_N_FTS_GEN3 = 255; + parameter PL_REPORT_ALL_PHY_ERRORS = "TRUE"; + parameter PL_SIM_FAST_LINK_TRAINING = "FALSE"; + parameter PL_UPSTREAM_FACING = "TRUE"; + parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h05DC; + parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h00000; + parameter PM_ENABLE_L23_ENTRY = "FALSE"; + parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE"; + parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000000; + parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h186A0; + parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0064; + parameter [31:0] SIM_JTAG_IDCODE = 32'h00000000; + parameter SIM_VERSION = "1.0"; + parameter integer SPARE_BIT0 = 0; + parameter integer SPARE_BIT1 = 0; + parameter integer SPARE_BIT2 = 0; + parameter integer SPARE_BIT3 = 0; + parameter integer SPARE_BIT4 = 0; + parameter integer SPARE_BIT5 = 0; + parameter integer SPARE_BIT6 = 0; + parameter integer SPARE_BIT7 = 0; + parameter integer SPARE_BIT8 = 0; + parameter [7:0] SPARE_BYTE0 = 8'h00; + parameter [7:0] SPARE_BYTE1 = 8'h00; + parameter [7:0] SPARE_BYTE2 = 8'h00; + parameter [7:0] SPARE_BYTE3 = 8'h00; + parameter [31:0] SPARE_WORD0 = 32'h00000000; + parameter [31:0] SPARE_WORD1 = 32'h00000000; + parameter [31:0] SPARE_WORD2 = 32'h00000000; + parameter [31:0] SPARE_WORD3 = 32'h00000000; + parameter SRIOV_CAP_ENABLE = "FALSE"; + parameter TL_COMPLETION_RAM_SIZE_16K = "TRUE"; + parameter [23:0] TL_COMPL_TIMEOUT_REG0 = 24'hBEBC20; + parameter [27:0] TL_COMPL_TIMEOUT_REG1 = 28'h2FAF080; + parameter [11:0] TL_CREDITS_CD = 12'h3E0; + parameter [7:0] TL_CREDITS_CH = 8'h20; + parameter [11:0] TL_CREDITS_NPD = 12'h028; + parameter [7:0] TL_CREDITS_NPH = 8'h20; + parameter [11:0] TL_CREDITS_PD = 12'h198; + parameter [7:0] TL_CREDITS_PH = 8'h20; + parameter TL_ENABLE_MESSAGE_RID_CHECK_ENABLE = "TRUE"; + parameter TL_EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter TL_LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter TL_LEGACY_MODE_ENABLE = "FALSE"; + parameter [1:0] TL_PF_ENABLE_REG = 2'h0; + parameter TL_TX_MUX_STRICT_PRIORITY = "TRUE"; + parameter TWO_LAYER_MODE_DLCMSM_ENABLE = "TRUE"; + parameter TWO_LAYER_MODE_ENABLE = "FALSE"; + parameter TWO_LAYER_MODE_WIDTH_256 = "TRUE"; + parameter [11:0] VF0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] VF0_CAPABILITY_POINTER = 8'h50; + parameter integer VF0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF0_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF0_PM_CAP_ID = 8'h01; + parameter [7:0] VF0_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF0_PM_CAP_VER_ID = 3'h3; + parameter VF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF0_TPHR_CAP_ENABLE = "FALSE"; + parameter VF0_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF0_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF0_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF1_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF1_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF1_PM_CAP_ID = 8'h01; + parameter [7:0] VF1_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF1_PM_CAP_VER_ID = 3'h3; + parameter VF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF1_TPHR_CAP_ENABLE = "FALSE"; + parameter VF1_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF1_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF1_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF2_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF2_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF2_PM_CAP_ID = 8'h01; + parameter [7:0] VF2_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF2_PM_CAP_VER_ID = 3'h3; + parameter VF2_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF2_TPHR_CAP_ENABLE = "FALSE"; + parameter VF2_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF2_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF2_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF2_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF3_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF3_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF3_PM_CAP_ID = 8'h01; + parameter [7:0] VF3_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF3_PM_CAP_VER_ID = 3'h3; + parameter VF3_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF3_TPHR_CAP_ENABLE = "FALSE"; + parameter VF3_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF3_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF3_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF3_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF3_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF4_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF4_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF4_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF4_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF4_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF4_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF4_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF4_PM_CAP_ID = 8'h01; + parameter [7:0] VF4_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF4_PM_CAP_VER_ID = 3'h3; + parameter VF4_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF4_TPHR_CAP_ENABLE = "FALSE"; + parameter VF4_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF4_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF4_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF4_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF4_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF4_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF5_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF5_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF5_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF5_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF5_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF5_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF5_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF5_PM_CAP_ID = 8'h01; + parameter [7:0] VF5_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF5_PM_CAP_VER_ID = 3'h3; + parameter VF5_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF5_TPHR_CAP_ENABLE = "FALSE"; + parameter VF5_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF5_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF5_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF5_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF5_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF5_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF6_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF6_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF6_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF6_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF6_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF6_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF6_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF6_PM_CAP_ID = 8'h01; + parameter [7:0] VF6_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF6_PM_CAP_VER_ID = 3'h3; + parameter VF6_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF6_TPHR_CAP_ENABLE = "FALSE"; + parameter VF6_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF6_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF6_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF6_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF6_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF6_TPHR_CAP_VER = 4'h1; + parameter [11:0] VF7_ARI_CAP_NEXTPTR = 12'h000; + parameter integer VF7_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VF7_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VF7_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VF7_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VF7_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer VF7_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] VF7_PM_CAP_ID = 8'h01; + parameter [7:0] VF7_PM_CAP_NEXTPTR = 8'h00; + parameter [2:0] VF7_PM_CAP_VER_ID = 3'h3; + parameter VF7_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter VF7_TPHR_CAP_ENABLE = "FALSE"; + parameter VF7_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] VF7_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VF7_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] VF7_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] VF7_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] VF7_TPHR_CAP_VER = 4'h1; + output [2:0] CFGCURRENTSPEED; + output [3:0] CFGDPASUBSTATECHANGE; + output CFGERRCOROUT; + output CFGERRFATALOUT; + output CFGERRNONFATALOUT; + output [7:0] CFGEXTFUNCTIONNUMBER; + output CFGEXTREADRECEIVED; + output [9:0] CFGEXTREGISTERNUMBER; + output [3:0] CFGEXTWRITEBYTEENABLE; + output [31:0] CFGEXTWRITEDATA; + output CFGEXTWRITERECEIVED; + output [11:0] CFGFCCPLD; + output [7:0] CFGFCCPLH; + output [11:0] CFGFCNPD; + output [7:0] CFGFCNPH; + output [11:0] CFGFCPD; + output [7:0] CFGFCPH; + output [3:0] CFGFLRINPROCESS; + output [11:0] CFGFUNCTIONPOWERSTATE; + output [15:0] CFGFUNCTIONSTATUS; + output CFGHOTRESETOUT; + output [31:0] CFGINTERRUPTMSIDATA; + output [3:0] CFGINTERRUPTMSIENABLE; + output CFGINTERRUPTMSIFAIL; + output CFGINTERRUPTMSIMASKUPDATE; + output [11:0] CFGINTERRUPTMSIMMENABLE; + output CFGINTERRUPTMSISENT; + output [7:0] CFGINTERRUPTMSIVFENABLE; + output [3:0] CFGINTERRUPTMSIXENABLE; + output CFGINTERRUPTMSIXFAIL; + output [3:0] CFGINTERRUPTMSIXMASK; + output CFGINTERRUPTMSIXSENT; + output [7:0] CFGINTERRUPTMSIXVFENABLE; + output [7:0] CFGINTERRUPTMSIXVFMASK; + output CFGINTERRUPTSENT; + output [1:0] CFGLINKPOWERSTATE; + output CFGLOCALERROR; + output CFGLTRENABLE; + output [5:0] CFGLTSSMSTATE; + output [2:0] CFGMAXPAYLOAD; + output [2:0] CFGMAXREADREQ; + output [31:0] CFGMGMTREADDATA; + output CFGMGMTREADWRITEDONE; + output CFGMSGRECEIVED; + output [7:0] CFGMSGRECEIVEDDATA; + output [4:0] CFGMSGRECEIVEDTYPE; + output CFGMSGTRANSMITDONE; + output [3:0] CFGNEGOTIATEDWIDTH; + output [1:0] CFGOBFFENABLE; + output [15:0] CFGPERFUNCSTATUSDATA; + output CFGPERFUNCTIONUPDATEDONE; + output CFGPHYLINKDOWN; + output [1:0] CFGPHYLINKSTATUS; + output CFGPLSTATUSCHANGE; + output CFGPOWERSTATECHANGEINTERRUPT; + output [3:0] CFGRCBSTATUS; + output [3:0] CFGTPHFUNCTIONNUM; + output [3:0] CFGTPHREQUESTERENABLE; + output [11:0] CFGTPHSTMODE; + output [4:0] CFGTPHSTTADDRESS; + output CFGTPHSTTREADENABLE; + output [3:0] CFGTPHSTTWRITEBYTEVALID; + output [31:0] CFGTPHSTTWRITEDATA; + output CFGTPHSTTWRITEENABLE; + output [7:0] CFGVFFLRINPROCESS; + output [23:0] CFGVFPOWERSTATE; + output [15:0] CFGVFSTATUS; + output [7:0] CFGVFTPHREQUESTERENABLE; + output [23:0] CFGVFTPHSTMODE; + output CONFMCAPDESIGNSWITCH; + output CONFMCAPEOS; + output CONFMCAPINUSEBYPCIE; + output CONFREQREADY; + output [31:0] CONFRESPRDATA; + output CONFRESPVALID; + output [15:0] DBGDATAOUT; + output DBGMCAPCSB; + output [31:0] DBGMCAPDATA; + output DBGMCAPEOS; + output DBGMCAPERROR; + output DBGMCAPMODE; + output DBGMCAPRDATAVALID; + output DBGMCAPRDWRB; + output DBGMCAPRESET; + output DBGPLDATABLOCKRECEIVEDAFTEREDS; + output DBGPLGEN3FRAMINGERRORDETECTED; + output DBGPLGEN3SYNCHEADERERRORDETECTED; + output [7:0] DBGPLINFERREDRXELECTRICALIDLE; + output [15:0] DRPDO; + output DRPRDY; + output LL2LMMASTERTLPSENT0; + output LL2LMMASTERTLPSENT1; + output [3:0] LL2LMMASTERTLPSENTTLPID0; + output [3:0] LL2LMMASTERTLPSENTTLPID1; + output [255:0] LL2LMMAXISRXTDATA; + output [17:0] LL2LMMAXISRXTUSER; + output [7:0] LL2LMMAXISRXTVALID; + output [7:0] LL2LMSAXISTXTREADY; + output [255:0] MAXISCQTDATA; + output [7:0] MAXISCQTKEEP; + output MAXISCQTLAST; + output [84:0] MAXISCQTUSER; + output MAXISCQTVALID; + output [255:0] MAXISRCTDATA; + output [7:0] MAXISRCTKEEP; + output MAXISRCTLAST; + output [74:0] MAXISRCTUSER; + output MAXISRCTVALID; + output [9:0] MICOMPLETIONRAMREADADDRESSAL; + output [9:0] MICOMPLETIONRAMREADADDRESSAU; + output [9:0] MICOMPLETIONRAMREADADDRESSBL; + output [9:0] MICOMPLETIONRAMREADADDRESSBU; + output [3:0] MICOMPLETIONRAMREADENABLEL; + output [3:0] MICOMPLETIONRAMREADENABLEU; + output [9:0] MICOMPLETIONRAMWRITEADDRESSAL; + output [9:0] MICOMPLETIONRAMWRITEADDRESSAU; + output [9:0] MICOMPLETIONRAMWRITEADDRESSBL; + output [9:0] MICOMPLETIONRAMWRITEADDRESSBU; + output [71:0] MICOMPLETIONRAMWRITEDATAL; + output [71:0] MICOMPLETIONRAMWRITEDATAU; + output [3:0] MICOMPLETIONRAMWRITEENABLEL; + output [3:0] MICOMPLETIONRAMWRITEENABLEU; + output [8:0] MIREPLAYRAMADDRESS; + output [1:0] MIREPLAYRAMREADENABLE; + output [143:0] MIREPLAYRAMWRITEDATA; + output [1:0] MIREPLAYRAMWRITEENABLE; + output [8:0] MIREQUESTRAMREADADDRESSA; + output [8:0] MIREQUESTRAMREADADDRESSB; + output [3:0] MIREQUESTRAMREADENABLE; + output [8:0] MIREQUESTRAMWRITEADDRESSA; + output [8:0] MIREQUESTRAMWRITEADDRESSB; + output [143:0] MIREQUESTRAMWRITEDATA; + output [3:0] MIREQUESTRAMWRITEENABLE; + output [5:0] PCIECQNPREQCOUNT; + output PCIEPERST0B; + output PCIEPERST1B; + output [3:0] PCIERQSEQNUM; + output PCIERQSEQNUMVLD; + output [5:0] PCIERQTAG; + output [1:0] PCIERQTAGAV; + output PCIERQTAGVLD; + output [1:0] PCIETFCNPDAV; + output [1:0] PCIETFCNPHAV; + output [1:0] PIPERX0EQCONTROL; + output [5:0] PIPERX0EQLPLFFS; + output [3:0] PIPERX0EQLPTXPRESET; + output [2:0] PIPERX0EQPRESET; + output PIPERX0POLARITY; + output [1:0] PIPERX1EQCONTROL; + output [5:0] PIPERX1EQLPLFFS; + output [3:0] PIPERX1EQLPTXPRESET; + output [2:0] PIPERX1EQPRESET; + output PIPERX1POLARITY; + output [1:0] PIPERX2EQCONTROL; + output [5:0] PIPERX2EQLPLFFS; + output [3:0] PIPERX2EQLPTXPRESET; + output [2:0] PIPERX2EQPRESET; + output PIPERX2POLARITY; + output [1:0] PIPERX3EQCONTROL; + output [5:0] PIPERX3EQLPLFFS; + output [3:0] PIPERX3EQLPTXPRESET; + output [2:0] PIPERX3EQPRESET; + output PIPERX3POLARITY; + output [1:0] PIPERX4EQCONTROL; + output [5:0] PIPERX4EQLPLFFS; + output [3:0] PIPERX4EQLPTXPRESET; + output [2:0] PIPERX4EQPRESET; + output PIPERX4POLARITY; + output [1:0] PIPERX5EQCONTROL; + output [5:0] PIPERX5EQLPLFFS; + output [3:0] PIPERX5EQLPTXPRESET; + output [2:0] PIPERX5EQPRESET; + output PIPERX5POLARITY; + output [1:0] PIPERX6EQCONTROL; + output [5:0] PIPERX6EQLPLFFS; + output [3:0] PIPERX6EQLPTXPRESET; + output [2:0] PIPERX6EQPRESET; + output PIPERX6POLARITY; + output [1:0] PIPERX7EQCONTROL; + output [5:0] PIPERX7EQLPLFFS; + output [3:0] PIPERX7EQLPTXPRESET; + output [2:0] PIPERX7EQPRESET; + output PIPERX7POLARITY; + output [1:0] PIPETX0CHARISK; + output PIPETX0COMPLIANCE; + output [31:0] PIPETX0DATA; + output PIPETX0DATAVALID; + output PIPETX0DEEMPH; + output PIPETX0ELECIDLE; + output [1:0] PIPETX0EQCONTROL; + output [5:0] PIPETX0EQDEEMPH; + output [3:0] PIPETX0EQPRESET; + output [2:0] PIPETX0MARGIN; + output [1:0] PIPETX0POWERDOWN; + output [1:0] PIPETX0RATE; + output PIPETX0RCVRDET; + output PIPETX0RESET; + output PIPETX0STARTBLOCK; + output PIPETX0SWING; + output [1:0] PIPETX0SYNCHEADER; + output [1:0] PIPETX1CHARISK; + output PIPETX1COMPLIANCE; + output [31:0] PIPETX1DATA; + output PIPETX1DATAVALID; + output PIPETX1DEEMPH; + output PIPETX1ELECIDLE; + output [1:0] PIPETX1EQCONTROL; + output [5:0] PIPETX1EQDEEMPH; + output [3:0] PIPETX1EQPRESET; + output [2:0] PIPETX1MARGIN; + output [1:0] PIPETX1POWERDOWN; + output [1:0] PIPETX1RATE; + output PIPETX1RCVRDET; + output PIPETX1RESET; + output PIPETX1STARTBLOCK; + output PIPETX1SWING; + output [1:0] PIPETX1SYNCHEADER; + output [1:0] PIPETX2CHARISK; + output PIPETX2COMPLIANCE; + output [31:0] PIPETX2DATA; + output PIPETX2DATAVALID; + output PIPETX2DEEMPH; + output PIPETX2ELECIDLE; + output [1:0] PIPETX2EQCONTROL; + output [5:0] PIPETX2EQDEEMPH; + output [3:0] PIPETX2EQPRESET; + output [2:0] PIPETX2MARGIN; + output [1:0] PIPETX2POWERDOWN; + output [1:0] PIPETX2RATE; + output PIPETX2RCVRDET; + output PIPETX2RESET; + output PIPETX2STARTBLOCK; + output PIPETX2SWING; + output [1:0] PIPETX2SYNCHEADER; + output [1:0] PIPETX3CHARISK; + output PIPETX3COMPLIANCE; + output [31:0] PIPETX3DATA; + output PIPETX3DATAVALID; + output PIPETX3DEEMPH; + output PIPETX3ELECIDLE; + output [1:0] PIPETX3EQCONTROL; + output [5:0] PIPETX3EQDEEMPH; + output [3:0] PIPETX3EQPRESET; + output [2:0] PIPETX3MARGIN; + output [1:0] PIPETX3POWERDOWN; + output [1:0] PIPETX3RATE; + output PIPETX3RCVRDET; + output PIPETX3RESET; + output PIPETX3STARTBLOCK; + output PIPETX3SWING; + output [1:0] PIPETX3SYNCHEADER; + output [1:0] PIPETX4CHARISK; + output PIPETX4COMPLIANCE; + output [31:0] PIPETX4DATA; + output PIPETX4DATAVALID; + output PIPETX4DEEMPH; + output PIPETX4ELECIDLE; + output [1:0] PIPETX4EQCONTROL; + output [5:0] PIPETX4EQDEEMPH; + output [3:0] PIPETX4EQPRESET; + output [2:0] PIPETX4MARGIN; + output [1:0] PIPETX4POWERDOWN; + output [1:0] PIPETX4RATE; + output PIPETX4RCVRDET; + output PIPETX4RESET; + output PIPETX4STARTBLOCK; + output PIPETX4SWING; + output [1:0] PIPETX4SYNCHEADER; + output [1:0] PIPETX5CHARISK; + output PIPETX5COMPLIANCE; + output [31:0] PIPETX5DATA; + output PIPETX5DATAVALID; + output PIPETX5DEEMPH; + output PIPETX5ELECIDLE; + output [1:0] PIPETX5EQCONTROL; + output [5:0] PIPETX5EQDEEMPH; + output [3:0] PIPETX5EQPRESET; + output [2:0] PIPETX5MARGIN; + output [1:0] PIPETX5POWERDOWN; + output [1:0] PIPETX5RATE; + output PIPETX5RCVRDET; + output PIPETX5RESET; + output PIPETX5STARTBLOCK; + output PIPETX5SWING; + output [1:0] PIPETX5SYNCHEADER; + output [1:0] PIPETX6CHARISK; + output PIPETX6COMPLIANCE; + output [31:0] PIPETX6DATA; + output PIPETX6DATAVALID; + output PIPETX6DEEMPH; + output PIPETX6ELECIDLE; + output [1:0] PIPETX6EQCONTROL; + output [5:0] PIPETX6EQDEEMPH; + output [3:0] PIPETX6EQPRESET; + output [2:0] PIPETX6MARGIN; + output [1:0] PIPETX6POWERDOWN; + output [1:0] PIPETX6RATE; + output PIPETX6RCVRDET; + output PIPETX6RESET; + output PIPETX6STARTBLOCK; + output PIPETX6SWING; + output [1:0] PIPETX6SYNCHEADER; + output [1:0] PIPETX7CHARISK; + output PIPETX7COMPLIANCE; + output [31:0] PIPETX7DATA; + output PIPETX7DATAVALID; + output PIPETX7DEEMPH; + output PIPETX7ELECIDLE; + output [1:0] PIPETX7EQCONTROL; + output [5:0] PIPETX7EQDEEMPH; + output [3:0] PIPETX7EQPRESET; + output [2:0] PIPETX7MARGIN; + output [1:0] PIPETX7POWERDOWN; + output [1:0] PIPETX7RATE; + output PIPETX7RCVRDET; + output PIPETX7RESET; + output PIPETX7STARTBLOCK; + output PIPETX7SWING; + output [1:0] PIPETX7SYNCHEADER; + output PLEQINPROGRESS; + output [1:0] PLEQPHASE; + output [3:0] SAXISCCTREADY; + output [3:0] SAXISRQTREADY; + output [31:0] SPAREOUT; + input CFGCONFIGSPACEENABLE; + input [15:0] CFGDEVID; + input [7:0] CFGDSBUSNUMBER; + input [4:0] CFGDSDEVICENUMBER; + input [2:0] CFGDSFUNCTIONNUMBER; + input [63:0] CFGDSN; + input [7:0] CFGDSPORTNUMBER; + input CFGERRCORIN; + input CFGERRUNCORIN; + input [31:0] CFGEXTREADDATA; + input CFGEXTREADDATAVALID; + input [2:0] CFGFCSEL; + input [3:0] CFGFLRDONE; + input CFGHOTRESETIN; + input [3:0] CFGINTERRUPTINT; + input [2:0] CFGINTERRUPTMSIATTR; + input [3:0] CFGINTERRUPTMSIFUNCTIONNUMBER; + input [31:0] CFGINTERRUPTMSIINT; + input [31:0] CFGINTERRUPTMSIPENDINGSTATUS; + input CFGINTERRUPTMSIPENDINGSTATUSDATAENABLE; + input [3:0] CFGINTERRUPTMSIPENDINGSTATUSFUNCTIONNUM; + input [3:0] CFGINTERRUPTMSISELECT; + input CFGINTERRUPTMSITPHPRESENT; + input [8:0] CFGINTERRUPTMSITPHSTTAG; + input [1:0] CFGINTERRUPTMSITPHTYPE; + input [63:0] CFGINTERRUPTMSIXADDRESS; + input [31:0] CFGINTERRUPTMSIXDATA; + input CFGINTERRUPTMSIXINT; + input [3:0] CFGINTERRUPTPENDING; + input CFGLINKTRAININGENABLE; + input [18:0] CFGMGMTADDR; + input [3:0] CFGMGMTBYTEENABLE; + input CFGMGMTREAD; + input CFGMGMTTYPE1CFGREGACCESS; + input CFGMGMTWRITE; + input [31:0] CFGMGMTWRITEDATA; + input CFGMSGTRANSMIT; + input [31:0] CFGMSGTRANSMITDATA; + input [2:0] CFGMSGTRANSMITTYPE; + input [2:0] CFGPERFUNCSTATUSCONTROL; + input [3:0] CFGPERFUNCTIONNUMBER; + input CFGPERFUNCTIONOUTPUTREQUEST; + input CFGPOWERSTATECHANGEACK; + input CFGREQPMTRANSITIONL23READY; + input [7:0] CFGREVID; + input [15:0] CFGSUBSYSID; + input [15:0] CFGSUBSYSVENDID; + input [31:0] CFGTPHSTTREADDATA; + input CFGTPHSTTREADDATAVALID; + input [15:0] CFGVENDID; + input [7:0] CFGVFFLRDONE; + input CONFMCAPREQUESTBYCONF; + input [31:0] CONFREQDATA; + input [3:0] CONFREQREGNUM; + input [1:0] CONFREQTYPE; + input CONFREQVALID; + input CORECLK; + input CORECLKMICOMPLETIONRAML; + input CORECLKMICOMPLETIONRAMU; + input CORECLKMIREPLAYRAM; + input CORECLKMIREQUESTRAM; + input DBGCFGLOCALMGMTREGOVERRIDE; + input [3:0] DBGDATASEL; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input [13:0] LL2LMSAXISTXTUSER; + input LL2LMSAXISTXTVALID; + input [3:0] LL2LMTXTLPID0; + input [3:0] LL2LMTXTLPID1; + input [21:0] MAXISCQTREADY; + input [21:0] MAXISRCTREADY; + input MCAPCLK; + input MCAPPERST0B; + input MCAPPERST1B; + input MGMTRESETN; + input MGMTSTICKYRESETN; + input [143:0] MICOMPLETIONRAMREADDATA; + input [143:0] MIREPLAYRAMREADDATA; + input [143:0] MIREQUESTRAMREADDATA; + input PCIECQNPREQ; + input PIPECLK; + input [5:0] PIPEEQFS; + input [5:0] PIPEEQLF; + input PIPERESETN; + input [1:0] PIPERX0CHARISK; + input [31:0] PIPERX0DATA; + input PIPERX0DATAVALID; + input PIPERX0ELECIDLE; + input PIPERX0EQDONE; + input PIPERX0EQLPADAPTDONE; + input PIPERX0EQLPLFFSSEL; + input [17:0] PIPERX0EQLPNEWTXCOEFFORPRESET; + input PIPERX0PHYSTATUS; + input PIPERX0STARTBLOCK; + input [2:0] PIPERX0STATUS; + input [1:0] PIPERX0SYNCHEADER; + input PIPERX0VALID; + input [1:0] PIPERX1CHARISK; + input [31:0] PIPERX1DATA; + input PIPERX1DATAVALID; + input PIPERX1ELECIDLE; + input PIPERX1EQDONE; + input PIPERX1EQLPADAPTDONE; + input PIPERX1EQLPLFFSSEL; + input [17:0] PIPERX1EQLPNEWTXCOEFFORPRESET; + input PIPERX1PHYSTATUS; + input PIPERX1STARTBLOCK; + input [2:0] PIPERX1STATUS; + input [1:0] PIPERX1SYNCHEADER; + input PIPERX1VALID; + input [1:0] PIPERX2CHARISK; + input [31:0] PIPERX2DATA; + input PIPERX2DATAVALID; + input PIPERX2ELECIDLE; + input PIPERX2EQDONE; + input PIPERX2EQLPADAPTDONE; + input PIPERX2EQLPLFFSSEL; + input [17:0] PIPERX2EQLPNEWTXCOEFFORPRESET; + input PIPERX2PHYSTATUS; + input PIPERX2STARTBLOCK; + input [2:0] PIPERX2STATUS; + input [1:0] PIPERX2SYNCHEADER; + input PIPERX2VALID; + input [1:0] PIPERX3CHARISK; + input [31:0] PIPERX3DATA; + input PIPERX3DATAVALID; + input PIPERX3ELECIDLE; + input PIPERX3EQDONE; + input PIPERX3EQLPADAPTDONE; + input PIPERX3EQLPLFFSSEL; + input [17:0] PIPERX3EQLPNEWTXCOEFFORPRESET; + input PIPERX3PHYSTATUS; + input PIPERX3STARTBLOCK; + input [2:0] PIPERX3STATUS; + input [1:0] PIPERX3SYNCHEADER; + input PIPERX3VALID; + input [1:0] PIPERX4CHARISK; + input [31:0] PIPERX4DATA; + input PIPERX4DATAVALID; + input PIPERX4ELECIDLE; + input PIPERX4EQDONE; + input PIPERX4EQLPADAPTDONE; + input PIPERX4EQLPLFFSSEL; + input [17:0] PIPERX4EQLPNEWTXCOEFFORPRESET; + input PIPERX4PHYSTATUS; + input PIPERX4STARTBLOCK; + input [2:0] PIPERX4STATUS; + input [1:0] PIPERX4SYNCHEADER; + input PIPERX4VALID; + input [1:0] PIPERX5CHARISK; + input [31:0] PIPERX5DATA; + input PIPERX5DATAVALID; + input PIPERX5ELECIDLE; + input PIPERX5EQDONE; + input PIPERX5EQLPADAPTDONE; + input PIPERX5EQLPLFFSSEL; + input [17:0] PIPERX5EQLPNEWTXCOEFFORPRESET; + input PIPERX5PHYSTATUS; + input PIPERX5STARTBLOCK; + input [2:0] PIPERX5STATUS; + input [1:0] PIPERX5SYNCHEADER; + input PIPERX5VALID; + input [1:0] PIPERX6CHARISK; + input [31:0] PIPERX6DATA; + input PIPERX6DATAVALID; + input PIPERX6ELECIDLE; + input PIPERX6EQDONE; + input PIPERX6EQLPADAPTDONE; + input PIPERX6EQLPLFFSSEL; + input [17:0] PIPERX6EQLPNEWTXCOEFFORPRESET; + input PIPERX6PHYSTATUS; + input PIPERX6STARTBLOCK; + input [2:0] PIPERX6STATUS; + input [1:0] PIPERX6SYNCHEADER; + input PIPERX6VALID; + input [1:0] PIPERX7CHARISK; + input [31:0] PIPERX7DATA; + input PIPERX7DATAVALID; + input PIPERX7ELECIDLE; + input PIPERX7EQDONE; + input PIPERX7EQLPADAPTDONE; + input PIPERX7EQLPLFFSSEL; + input [17:0] PIPERX7EQLPNEWTXCOEFFORPRESET; + input PIPERX7PHYSTATUS; + input PIPERX7STARTBLOCK; + input [2:0] PIPERX7STATUS; + input [1:0] PIPERX7SYNCHEADER; + input PIPERX7VALID; + input [17:0] PIPETX0EQCOEFF; + input PIPETX0EQDONE; + input [17:0] PIPETX1EQCOEFF; + input PIPETX1EQDONE; + input [17:0] PIPETX2EQCOEFF; + input PIPETX2EQDONE; + input [17:0] PIPETX3EQCOEFF; + input PIPETX3EQDONE; + input [17:0] PIPETX4EQCOEFF; + input PIPETX4EQDONE; + input [17:0] PIPETX5EQCOEFF; + input PIPETX5EQDONE; + input [17:0] PIPETX6EQCOEFF; + input PIPETX6EQDONE; + input [17:0] PIPETX7EQCOEFF; + input PIPETX7EQDONE; + input PLEQRESETEIEOSCOUNT; + input PLGEN2UPSTREAMPREFERDEEMPH; + input RESETN; + input [255:0] SAXISCCTDATA; + input [7:0] SAXISCCTKEEP; + input SAXISCCTLAST; + input [32:0] SAXISCCTUSER; + input SAXISCCTVALID; + input [255:0] SAXISRQTDATA; + input [7:0] SAXISRQTKEEP; + input SAXISRQTLAST; + input [59:0] SAXISRQTUSER; + input SAXISRQTVALID; + input [31:0] SPAREIN; + input USERCLK; +endmodule + +module PCIE40E4 (...); + parameter ARI_CAP_ENABLE = "FALSE"; + parameter AUTO_FLR_RESPONSE = "FALSE"; + parameter [1:0] AXISTEN_IF_CC_ALIGNMENT_MODE = 2'h0; + parameter [23:0] AXISTEN_IF_COMPL_TIMEOUT_REG0 = 24'hBEBC20; + parameter [27:0] AXISTEN_IF_COMPL_TIMEOUT_REG1 = 28'h2FAF080; + parameter [1:0] AXISTEN_IF_CQ_ALIGNMENT_MODE = 2'h0; + parameter AXISTEN_IF_CQ_EN_POISONED_MEM_WR = "FALSE"; + parameter AXISTEN_IF_ENABLE_256_TAGS = "FALSE"; + parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE"; + parameter AXISTEN_IF_ENABLE_INTERNAL_MSIX_TABLE = "FALSE"; + parameter AXISTEN_IF_ENABLE_MESSAGE_RID_CHECK = "TRUE"; + parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000; + parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE"; + parameter AXISTEN_IF_EXT_512 = "FALSE"; + parameter AXISTEN_IF_EXT_512_CC_STRADDLE = "FALSE"; + parameter AXISTEN_IF_EXT_512_CQ_STRADDLE = "FALSE"; + parameter AXISTEN_IF_EXT_512_RC_STRADDLE = "FALSE"; + parameter AXISTEN_IF_EXT_512_RQ_STRADDLE = "FALSE"; + parameter AXISTEN_IF_LEGACY_MODE_ENABLE = "FALSE"; + parameter AXISTEN_IF_MSIX_FROM_RAM_PIPELINE = "FALSE"; + parameter AXISTEN_IF_MSIX_RX_PARITY_EN = "TRUE"; + parameter AXISTEN_IF_MSIX_TO_RAM_PIPELINE = "FALSE"; + parameter [1:0] AXISTEN_IF_RC_ALIGNMENT_MODE = 2'h0; + parameter AXISTEN_IF_RC_STRADDLE = "FALSE"; + parameter [1:0] AXISTEN_IF_RQ_ALIGNMENT_MODE = 2'h0; + parameter AXISTEN_IF_RX_PARITY_EN = "TRUE"; + parameter AXISTEN_IF_SIM_SHORT_CPL_TIMEOUT = "FALSE"; + parameter AXISTEN_IF_TX_PARITY_EN = "TRUE"; + parameter [1:0] AXISTEN_IF_WIDTH = 2'h2; + parameter CFG_BYPASS_MODE_ENABLE = "FALSE"; + parameter CRM_CORE_CLK_FREQ_500 = "TRUE"; + parameter [1:0] CRM_USER_CLK_FREQ = 2'h2; + parameter [15:0] DEBUG_AXI4ST_SPARE = 16'h0000; + parameter [7:0] DEBUG_AXIST_DISABLE_FEATURE_BIT = 8'h00; + parameter [3:0] DEBUG_CAR_SPARE = 4'h0; + parameter [15:0] DEBUG_CFG_SPARE = 16'h0000; + parameter [15:0] DEBUG_LL_SPARE = 16'h0000; + parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_DEFRAMER_ERROR = "FALSE"; + parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_SKP_ERROR = "FALSE"; + parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_SKP_PARITY_ERROR = "FALSE"; + parameter DEBUG_PL_DISABLE_REC_ENTRY_ON_DYNAMIC_DSKEW_FAIL = "FALSE"; + parameter DEBUG_PL_DISABLE_REC_ENTRY_ON_RX_BUFFER_UNDER_OVER_FLOW = "FALSE"; + parameter DEBUG_PL_DISABLE_SCRAMBLING = "FALSE"; + parameter DEBUG_PL_SIM_RESET_LFSR = "FALSE"; + parameter [15:0] DEBUG_PL_SPARE = 16'h0000; + parameter DEBUG_TL_DISABLE_FC_TIMEOUT = "FALSE"; + parameter DEBUG_TL_DISABLE_RX_TLP_ORDER_CHECKS = "FALSE"; + parameter [15:0] DEBUG_TL_SPARE = 16'h0000; + parameter [7:0] DNSTREAM_LINK_NUM = 8'h00; + parameter DSN_CAP_ENABLE = "FALSE"; + parameter EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter HEADER_TYPE_OVERRIDE = "FALSE"; + parameter IS_SWITCH_PORT = "FALSE"; + parameter LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter [8:0] LL_ACK_TIMEOUT = 9'h000; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter integer LL_ACK_TIMEOUT_FUNC = 0; + parameter LL_DISABLE_SCHED_TX_NAK = "FALSE"; + parameter LL_REPLAY_FROM_RAM_PIPELINE = "FALSE"; + parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer LL_REPLAY_TIMEOUT_FUNC = 0; + parameter LL_REPLAY_TO_RAM_PIPELINE = "FALSE"; + parameter LL_RX_TLP_PARITY_GEN = "TRUE"; + parameter LL_TX_TLP_PARITY_CHK = "TRUE"; + parameter [15:0] LL_USER_SPARE = 16'h0000; + parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h250; + parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE"; + parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE"; + parameter [11:0] MCAP_CAP_NEXTPTR = 12'h000; + parameter MCAP_CONFIGURE_OVERRIDE = "FALSE"; + parameter MCAP_ENABLE = "FALSE"; + parameter MCAP_EOS_DESIGN_SWITCH = "FALSE"; + parameter [31:0] MCAP_FPGA_BITSTREAM_VERSION = 32'h00000000; + parameter MCAP_GATE_IO_ENABLE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_GATE_MEM_ENABLE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_INPUT_GATE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_INTERRUPT_ON_MCAP_EOS = "FALSE"; + parameter MCAP_INTERRUPT_ON_MCAP_ERROR = "FALSE"; + parameter [15:0] MCAP_VSEC_ID = 16'h0000; + parameter [11:0] MCAP_VSEC_LEN = 12'h02C; + parameter [3:0] MCAP_VSEC_REV = 4'h0; + parameter PF0_AER_CAP_ECRC_GEN_AND_CHECK_CAPABLE = "FALSE"; + parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [3:0] PF0_ARI_CAP_VER = 4'h1; + parameter [5:0] PF0_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_BAR1_CONTROL = 3'h0; + parameter [5:0] PF0_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR3_CONTROL = 3'h0; + parameter [5:0] PF0_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR5_CONTROL = 3'h0; + parameter [7:0] PF0_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF0_CLASS_CODE = 24'h000000; + parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_ARI_FORWARD_ENABLE = "FALSE"; + parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE"; + parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE"; + parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0; + parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE"; + parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0; + parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0; + parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE"; + parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE"; + parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF0_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF0_INTERRUPT_PIN = 3'h1; + parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN4 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN4 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN4 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN4 = 7; + parameter [0:0] PF0_LINK_CONTROL_RCB = 1'h0; + parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE"; + parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000; + parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000; + parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_LTR_CAP_VER = 4'h1; + parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [5:0] PF0_MSIX_VECTOR_COUNT = 6'h04; + parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00; + parameter PF0_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF0_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF0_PM_CAP_ID = 8'h01; + parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00; + parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE"; + parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE"; + parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3; + parameter PF0_PM_CSR_NOSOFTRESET = "TRUE"; + parameter [11:0] PF0_SECONDARY_PCIE_CAP_NEXTPTR = 12'h000; + parameter PF0_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF0_TPHR_CAP_ENABLE = "FALSE"; + parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF0_TPHR_CAP_VER = 4'h1; + parameter PF0_VC_CAP_ENABLE = "FALSE"; + parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_VC_CAP_VER = 4'h1; + parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [5:0] PF1_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_BAR1_CONTROL = 3'h0; + parameter [5:0] PF1_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR3_CONTROL = 3'h0; + parameter [5:0] PF1_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR5_CONTROL = 3'h0; + parameter [7:0] PF1_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF1_CLASS_CODE = 24'h000000; + parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF1_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF1_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00; + parameter PF1_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF1_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00; + parameter PF1_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] PF2_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF2_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF2_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [5:0] PF2_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR0_CONTROL = 3'h4; + parameter [4:0] PF2_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF2_BAR1_CONTROL = 3'h0; + parameter [5:0] PF2_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR2_CONTROL = 3'h4; + parameter [4:0] PF2_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR3_CONTROL = 3'h0; + parameter [5:0] PF2_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR4_CONTROL = 3'h4; + parameter [4:0] PF2_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR5_CONTROL = 3'h0; + parameter [7:0] PF2_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF2_CLASS_CODE = 24'h000000; + parameter [2:0] PF2_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF2_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF2_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF2_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF2_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF2_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF2_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF2_MSI_CAP_NEXTPTR = 8'h00; + parameter PF2_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF2_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF2_PM_CAP_NEXTPTR = 8'h00; + parameter PF2_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF2_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF2_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF2_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF2_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF2_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF2_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF2_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF2_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF2_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF2_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF2_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF2_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [11:0] PF2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] PF3_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF3_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF3_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [5:0] PF3_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR0_CONTROL = 3'h4; + parameter [4:0] PF3_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF3_BAR1_CONTROL = 3'h0; + parameter [5:0] PF3_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR2_CONTROL = 3'h4; + parameter [4:0] PF3_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR3_CONTROL = 3'h0; + parameter [5:0] PF3_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR4_CONTROL = 3'h4; + parameter [4:0] PF3_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR5_CONTROL = 3'h0; + parameter [7:0] PF3_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF3_CLASS_CODE = 24'h000000; + parameter [2:0] PF3_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF3_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF3_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF3_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF3_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF3_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF3_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF3_MSI_CAP_NEXTPTR = 8'h00; + parameter PF3_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF3_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF3_PM_CAP_NEXTPTR = 8'h00; + parameter PF3_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF3_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF3_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF3_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF3_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF3_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF3_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF3_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF3_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF3_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF3_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF3_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF3_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [11:0] PF3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF3_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter PL_CFG_STATE_ROBUSTNESS_ENABLE = "TRUE"; + parameter PL_DEEMPH_SOURCE_SELECT = "TRUE"; + parameter PL_DESKEW_ON_SKIP_IN_GEN12 = "FALSE"; + parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN3 = "FALSE"; + parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN4 = "FALSE"; + parameter PL_DISABLE_AUTO_SPEED_CHANGE_TO_GEN2 = "FALSE"; + parameter PL_DISABLE_DC_BALANCE = "FALSE"; + parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE"; + parameter PL_DISABLE_LANE_REVERSAL = "FALSE"; + parameter [1:0] PL_DISABLE_LFSR_UPDATE_ON_SKP = 2'h0; + parameter PL_DISABLE_RETRAIN_ON_EB_ERROR = "FALSE"; + parameter PL_DISABLE_RETRAIN_ON_FRAMING_ERROR = "FALSE"; + parameter [15:0] PL_DISABLE_RETRAIN_ON_SPECIFIC_FRAMING_ERROR = 16'h0000; + parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE"; + parameter [1:0] PL_EQ_ADAPT_DISABLE_COEFF_CHECK = 2'h0; + parameter [1:0] PL_EQ_ADAPT_DISABLE_PRESET_CHECK = 2'h0; + parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02; + parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1; + parameter [1:0] PL_EQ_BYPASS_PHASE23 = 2'h0; + parameter [5:0] PL_EQ_DEFAULT_RX_PRESET_HINT = 6'h33; + parameter [7:0] PL_EQ_DEFAULT_TX_PRESET = 8'h44; + parameter PL_EQ_DISABLE_MISMATCH_CHECK = "TRUE"; + parameter [1:0] PL_EQ_RX_ADAPT_EQ_PHASE0 = 2'h0; + parameter [1:0] PL_EQ_RX_ADAPT_EQ_PHASE1 = 2'h0; + parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE"; + parameter PL_EQ_TX_8G_EQ_TS2_ENABLE = "FALSE"; + parameter PL_EXIT_LOOPBACK_ON_EI_ENTRY = "TRUE"; + parameter PL_INFER_EI_DISABLE_LPBK_ACTIVE = "TRUE"; + parameter PL_INFER_EI_DISABLE_REC_RC = "FALSE"; + parameter PL_INFER_EI_DISABLE_REC_SPD = "FALSE"; + parameter [31:0] PL_LANE0_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE10_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE11_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE12_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE13_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE14_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE15_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE1_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE2_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE3_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE4_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE5_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE6_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE7_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE8_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE9_EQ_CONTROL = 32'h00003F00; + parameter [3:0] PL_LINK_CAP_MAX_LINK_SPEED = 4'h4; + parameter [4:0] PL_LINK_CAP_MAX_LINK_WIDTH = 5'h08; + parameter integer PL_N_FTS = 255; + parameter PL_QUIESCE_GUARANTEE_DISABLE = "FALSE"; + parameter PL_REDO_EQ_SOURCE_SELECT = "TRUE"; + parameter [7:0] PL_REPORT_ALL_PHY_ERRORS = 8'h00; + parameter [1:0] PL_RX_ADAPT_TIMER_CLWS_CLOBBER_TX_TS = 2'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_CLWS_GEN3 = 4'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_CLWS_GEN4 = 4'h0; + parameter [1:0] PL_RX_ADAPT_TIMER_RRL_CLOBBER_TX_TS = 2'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_RRL_GEN3 = 4'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_RRL_GEN4 = 4'h0; + parameter [1:0] PL_RX_L0S_EXIT_TO_RECOVERY = 2'h0; + parameter [1:0] PL_SIM_FAST_LINK_TRAINING = 2'h0; + parameter PL_SRIS_ENABLE = "FALSE"; + parameter [6:0] PL_SRIS_SKPOS_GEN_SPD_VEC = 7'h00; + parameter [6:0] PL_SRIS_SKPOS_REC_SPD_VEC = 7'h00; + parameter PL_UPSTREAM_FACING = "TRUE"; + parameter [15:0] PL_USER_SPARE = 16'h0000; + parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h1500; + parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h003E8; + parameter PM_ENABLE_L23_ENTRY = "FALSE"; + parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE"; + parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000100; + parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h00000; + parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0100; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter [31:0] SIM_JTAG_IDCODE = 32'h00000000; + parameter SIM_VERSION = "1.0"; + parameter SPARE_BIT0 = "FALSE"; + parameter integer SPARE_BIT1 = 0; + parameter integer SPARE_BIT2 = 0; + parameter SPARE_BIT3 = "FALSE"; + parameter integer SPARE_BIT4 = 0; + parameter integer SPARE_BIT5 = 0; + parameter integer SPARE_BIT6 = 0; + parameter integer SPARE_BIT7 = 0; + parameter integer SPARE_BIT8 = 0; + parameter [7:0] SPARE_BYTE0 = 8'h00; + parameter [7:0] SPARE_BYTE1 = 8'h00; + parameter [7:0] SPARE_BYTE2 = 8'h00; + parameter [7:0] SPARE_BYTE3 = 8'h00; + parameter [31:0] SPARE_WORD0 = 32'h00000000; + parameter [31:0] SPARE_WORD1 = 32'h00000000; + parameter [31:0] SPARE_WORD2 = 32'h00000000; + parameter [31:0] SPARE_WORD3 = 32'h00000000; + parameter [3:0] SRIOV_CAP_ENABLE = 4'h0; + parameter TL2CFG_IF_PARITY_CHK = "TRUE"; + parameter [1:0] TL_COMPLETION_RAM_NUM_TLPS = 2'h0; + parameter [1:0] TL_COMPLETION_RAM_SIZE = 2'h1; + parameter [11:0] TL_CREDITS_CD = 12'h000; + parameter [7:0] TL_CREDITS_CH = 8'h00; + parameter [11:0] TL_CREDITS_NPD = 12'h004; + parameter [7:0] TL_CREDITS_NPH = 8'h20; + parameter [11:0] TL_CREDITS_PD = 12'h0E0; + parameter [7:0] TL_CREDITS_PH = 8'h20; + parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TIME = 5'h02; + parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TLP_COUNT = 5'h08; + parameter [1:0] TL_PF_ENABLE_REG = 2'h0; + parameter [0:0] TL_POSTED_RAM_SIZE = 1'h0; + parameter TL_RX_COMPLETION_FROM_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_COMPLETION_TO_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_COMPLETION_TO_RAM_WRITE_PIPELINE = "FALSE"; + parameter TL_RX_POSTED_FROM_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_POSTED_TO_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_POSTED_TO_RAM_WRITE_PIPELINE = "FALSE"; + parameter TL_TX_MUX_STRICT_PRIORITY = "TRUE"; + parameter TL_TX_TLP_STRADDLE_ENABLE = "FALSE"; + parameter TL_TX_TLP_TERMINATE_PARITY = "FALSE"; + parameter [15:0] TL_USER_SPARE = 16'h0000; + parameter TPH_FROM_RAM_PIPELINE = "FALSE"; + parameter TPH_TO_RAM_PIPELINE = "FALSE"; + parameter [7:0] VF0_CAPABILITY_POINTER = 8'h80; + parameter [11:0] VFG0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] VFG0_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG0_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] VFG1_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] VFG1_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG1_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] VFG2_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] VFG2_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG2_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] VFG3_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] VFG3_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG3_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG3_TPHR_CAP_ST_MODE_SEL = 3'h0; + output [7:0] AXIUSEROUT; + output [7:0] CFGBUSNUMBER; + output [1:0] CFGCURRENTSPEED; + output CFGERRCOROUT; + output CFGERRFATALOUT; + output CFGERRNONFATALOUT; + output [7:0] CFGEXTFUNCTIONNUMBER; + output CFGEXTREADRECEIVED; + output [9:0] CFGEXTREGISTERNUMBER; + output [3:0] CFGEXTWRITEBYTEENABLE; + output [31:0] CFGEXTWRITEDATA; + output CFGEXTWRITERECEIVED; + output [11:0] CFGFCCPLD; + output [7:0] CFGFCCPLH; + output [11:0] CFGFCNPD; + output [7:0] CFGFCNPH; + output [11:0] CFGFCPD; + output [7:0] CFGFCPH; + output [3:0] CFGFLRINPROCESS; + output [11:0] CFGFUNCTIONPOWERSTATE; + output [15:0] CFGFUNCTIONSTATUS; + output CFGHOTRESETOUT; + output [31:0] CFGINTERRUPTMSIDATA; + output [3:0] CFGINTERRUPTMSIENABLE; + output CFGINTERRUPTMSIFAIL; + output CFGINTERRUPTMSIMASKUPDATE; + output [11:0] CFGINTERRUPTMSIMMENABLE; + output CFGINTERRUPTMSISENT; + output [3:0] CFGINTERRUPTMSIXENABLE; + output [3:0] CFGINTERRUPTMSIXMASK; + output CFGINTERRUPTMSIXVECPENDINGSTATUS; + output CFGINTERRUPTSENT; + output [1:0] CFGLINKPOWERSTATE; + output [4:0] CFGLOCALERROROUT; + output CFGLOCALERRORVALID; + output CFGLTRENABLE; + output [5:0] CFGLTSSMSTATE; + output [1:0] CFGMAXPAYLOAD; + output [2:0] CFGMAXREADREQ; + output [31:0] CFGMGMTREADDATA; + output CFGMGMTREADWRITEDONE; + output CFGMSGRECEIVED; + output [7:0] CFGMSGRECEIVEDDATA; + output [4:0] CFGMSGRECEIVEDTYPE; + output CFGMSGTRANSMITDONE; + output [12:0] CFGMSIXRAMADDRESS; + output CFGMSIXRAMREADENABLE; + output [3:0] CFGMSIXRAMWRITEBYTEENABLE; + output [35:0] CFGMSIXRAMWRITEDATA; + output [2:0] CFGNEGOTIATEDWIDTH; + output [1:0] CFGOBFFENABLE; + output CFGPHYLINKDOWN; + output [1:0] CFGPHYLINKSTATUS; + output CFGPLSTATUSCHANGE; + output CFGPOWERSTATECHANGEINTERRUPT; + output [3:0] CFGRCBSTATUS; + output [1:0] CFGRXPMSTATE; + output [11:0] CFGTPHRAMADDRESS; + output CFGTPHRAMREADENABLE; + output [3:0] CFGTPHRAMWRITEBYTEENABLE; + output [35:0] CFGTPHRAMWRITEDATA; + output [3:0] CFGTPHREQUESTERENABLE; + output [11:0] CFGTPHSTMODE; + output [1:0] CFGTXPMSTATE; + output CONFMCAPDESIGNSWITCH; + output CONFMCAPEOS; + output CONFMCAPINUSEBYPCIE; + output CONFREQREADY; + output [31:0] CONFRESPRDATA; + output CONFRESPVALID; + output [31:0] DBGCTRL0OUT; + output [31:0] DBGCTRL1OUT; + output [255:0] DBGDATA0OUT; + output [255:0] DBGDATA1OUT; + output [15:0] DRPDO; + output DRPRDY; + output [255:0] MAXISCQTDATA; + output [7:0] MAXISCQTKEEP; + output MAXISCQTLAST; + output [87:0] MAXISCQTUSER; + output MAXISCQTVALID; + output [255:0] MAXISRCTDATA; + output [7:0] MAXISRCTKEEP; + output MAXISRCTLAST; + output [74:0] MAXISRCTUSER; + output MAXISRCTVALID; + output [8:0] MIREPLAYRAMADDRESS0; + output [8:0] MIREPLAYRAMADDRESS1; + output MIREPLAYRAMREADENABLE0; + output MIREPLAYRAMREADENABLE1; + output [127:0] MIREPLAYRAMWRITEDATA0; + output [127:0] MIREPLAYRAMWRITEDATA1; + output MIREPLAYRAMWRITEENABLE0; + output MIREPLAYRAMWRITEENABLE1; + output [8:0] MIRXCOMPLETIONRAMREADADDRESS0; + output [8:0] MIRXCOMPLETIONRAMREADADDRESS1; + output [1:0] MIRXCOMPLETIONRAMREADENABLE0; + output [1:0] MIRXCOMPLETIONRAMREADENABLE1; + output [8:0] MIRXCOMPLETIONRAMWRITEADDRESS0; + output [8:0] MIRXCOMPLETIONRAMWRITEADDRESS1; + output [143:0] MIRXCOMPLETIONRAMWRITEDATA0; + output [143:0] MIRXCOMPLETIONRAMWRITEDATA1; + output [1:0] MIRXCOMPLETIONRAMWRITEENABLE0; + output [1:0] MIRXCOMPLETIONRAMWRITEENABLE1; + output [8:0] MIRXPOSTEDREQUESTRAMREADADDRESS0; + output [8:0] MIRXPOSTEDREQUESTRAMREADADDRESS1; + output MIRXPOSTEDREQUESTRAMREADENABLE0; + output MIRXPOSTEDREQUESTRAMREADENABLE1; + output [8:0] MIRXPOSTEDREQUESTRAMWRITEADDRESS0; + output [8:0] MIRXPOSTEDREQUESTRAMWRITEADDRESS1; + output [143:0] MIRXPOSTEDREQUESTRAMWRITEDATA0; + output [143:0] MIRXPOSTEDREQUESTRAMWRITEDATA1; + output MIRXPOSTEDREQUESTRAMWRITEENABLE0; + output MIRXPOSTEDREQUESTRAMWRITEENABLE1; + output [5:0] PCIECQNPREQCOUNT; + output PCIEPERST0B; + output PCIEPERST1B; + output [5:0] PCIERQSEQNUM0; + output [5:0] PCIERQSEQNUM1; + output PCIERQSEQNUMVLD0; + output PCIERQSEQNUMVLD1; + output [7:0] PCIERQTAG0; + output [7:0] PCIERQTAG1; + output [3:0] PCIERQTAGAV; + output PCIERQTAGVLD0; + output PCIERQTAGVLD1; + output [3:0] PCIETFCNPDAV; + output [3:0] PCIETFCNPHAV; + output [1:0] PIPERX00EQCONTROL; + output PIPERX00POLARITY; + output [1:0] PIPERX01EQCONTROL; + output PIPERX01POLARITY; + output [1:0] PIPERX02EQCONTROL; + output PIPERX02POLARITY; + output [1:0] PIPERX03EQCONTROL; + output PIPERX03POLARITY; + output [1:0] PIPERX04EQCONTROL; + output PIPERX04POLARITY; + output [1:0] PIPERX05EQCONTROL; + output PIPERX05POLARITY; + output [1:0] PIPERX06EQCONTROL; + output PIPERX06POLARITY; + output [1:0] PIPERX07EQCONTROL; + output PIPERX07POLARITY; + output [1:0] PIPERX08EQCONTROL; + output PIPERX08POLARITY; + output [1:0] PIPERX09EQCONTROL; + output PIPERX09POLARITY; + output [1:0] PIPERX10EQCONTROL; + output PIPERX10POLARITY; + output [1:0] PIPERX11EQCONTROL; + output PIPERX11POLARITY; + output [1:0] PIPERX12EQCONTROL; + output PIPERX12POLARITY; + output [1:0] PIPERX13EQCONTROL; + output PIPERX13POLARITY; + output [1:0] PIPERX14EQCONTROL; + output PIPERX14POLARITY; + output [1:0] PIPERX15EQCONTROL; + output PIPERX15POLARITY; + output [5:0] PIPERXEQLPLFFS; + output [3:0] PIPERXEQLPTXPRESET; + output [1:0] PIPETX00CHARISK; + output PIPETX00COMPLIANCE; + output [31:0] PIPETX00DATA; + output PIPETX00DATAVALID; + output PIPETX00ELECIDLE; + output [1:0] PIPETX00EQCONTROL; + output [5:0] PIPETX00EQDEEMPH; + output [1:0] PIPETX00POWERDOWN; + output PIPETX00STARTBLOCK; + output [1:0] PIPETX00SYNCHEADER; + output [1:0] PIPETX01CHARISK; + output PIPETX01COMPLIANCE; + output [31:0] PIPETX01DATA; + output PIPETX01DATAVALID; + output PIPETX01ELECIDLE; + output [1:0] PIPETX01EQCONTROL; + output [5:0] PIPETX01EQDEEMPH; + output [1:0] PIPETX01POWERDOWN; + output PIPETX01STARTBLOCK; + output [1:0] PIPETX01SYNCHEADER; + output [1:0] PIPETX02CHARISK; + output PIPETX02COMPLIANCE; + output [31:0] PIPETX02DATA; + output PIPETX02DATAVALID; + output PIPETX02ELECIDLE; + output [1:0] PIPETX02EQCONTROL; + output [5:0] PIPETX02EQDEEMPH; + output [1:0] PIPETX02POWERDOWN; + output PIPETX02STARTBLOCK; + output [1:0] PIPETX02SYNCHEADER; + output [1:0] PIPETX03CHARISK; + output PIPETX03COMPLIANCE; + output [31:0] PIPETX03DATA; + output PIPETX03DATAVALID; + output PIPETX03ELECIDLE; + output [1:0] PIPETX03EQCONTROL; + output [5:0] PIPETX03EQDEEMPH; + output [1:0] PIPETX03POWERDOWN; + output PIPETX03STARTBLOCK; + output [1:0] PIPETX03SYNCHEADER; + output [1:0] PIPETX04CHARISK; + output PIPETX04COMPLIANCE; + output [31:0] PIPETX04DATA; + output PIPETX04DATAVALID; + output PIPETX04ELECIDLE; + output [1:0] PIPETX04EQCONTROL; + output [5:0] PIPETX04EQDEEMPH; + output [1:0] PIPETX04POWERDOWN; + output PIPETX04STARTBLOCK; + output [1:0] PIPETX04SYNCHEADER; + output [1:0] PIPETX05CHARISK; + output PIPETX05COMPLIANCE; + output [31:0] PIPETX05DATA; + output PIPETX05DATAVALID; + output PIPETX05ELECIDLE; + output [1:0] PIPETX05EQCONTROL; + output [5:0] PIPETX05EQDEEMPH; + output [1:0] PIPETX05POWERDOWN; + output PIPETX05STARTBLOCK; + output [1:0] PIPETX05SYNCHEADER; + output [1:0] PIPETX06CHARISK; + output PIPETX06COMPLIANCE; + output [31:0] PIPETX06DATA; + output PIPETX06DATAVALID; + output PIPETX06ELECIDLE; + output [1:0] PIPETX06EQCONTROL; + output [5:0] PIPETX06EQDEEMPH; + output [1:0] PIPETX06POWERDOWN; + output PIPETX06STARTBLOCK; + output [1:0] PIPETX06SYNCHEADER; + output [1:0] PIPETX07CHARISK; + output PIPETX07COMPLIANCE; + output [31:0] PIPETX07DATA; + output PIPETX07DATAVALID; + output PIPETX07ELECIDLE; + output [1:0] PIPETX07EQCONTROL; + output [5:0] PIPETX07EQDEEMPH; + output [1:0] PIPETX07POWERDOWN; + output PIPETX07STARTBLOCK; + output [1:0] PIPETX07SYNCHEADER; + output [1:0] PIPETX08CHARISK; + output PIPETX08COMPLIANCE; + output [31:0] PIPETX08DATA; + output PIPETX08DATAVALID; + output PIPETX08ELECIDLE; + output [1:0] PIPETX08EQCONTROL; + output [5:0] PIPETX08EQDEEMPH; + output [1:0] PIPETX08POWERDOWN; + output PIPETX08STARTBLOCK; + output [1:0] PIPETX08SYNCHEADER; + output [1:0] PIPETX09CHARISK; + output PIPETX09COMPLIANCE; + output [31:0] PIPETX09DATA; + output PIPETX09DATAVALID; + output PIPETX09ELECIDLE; + output [1:0] PIPETX09EQCONTROL; + output [5:0] PIPETX09EQDEEMPH; + output [1:0] PIPETX09POWERDOWN; + output PIPETX09STARTBLOCK; + output [1:0] PIPETX09SYNCHEADER; + output [1:0] PIPETX10CHARISK; + output PIPETX10COMPLIANCE; + output [31:0] PIPETX10DATA; + output PIPETX10DATAVALID; + output PIPETX10ELECIDLE; + output [1:0] PIPETX10EQCONTROL; + output [5:0] PIPETX10EQDEEMPH; + output [1:0] PIPETX10POWERDOWN; + output PIPETX10STARTBLOCK; + output [1:0] PIPETX10SYNCHEADER; + output [1:0] PIPETX11CHARISK; + output PIPETX11COMPLIANCE; + output [31:0] PIPETX11DATA; + output PIPETX11DATAVALID; + output PIPETX11ELECIDLE; + output [1:0] PIPETX11EQCONTROL; + output [5:0] PIPETX11EQDEEMPH; + output [1:0] PIPETX11POWERDOWN; + output PIPETX11STARTBLOCK; + output [1:0] PIPETX11SYNCHEADER; + output [1:0] PIPETX12CHARISK; + output PIPETX12COMPLIANCE; + output [31:0] PIPETX12DATA; + output PIPETX12DATAVALID; + output PIPETX12ELECIDLE; + output [1:0] PIPETX12EQCONTROL; + output [5:0] PIPETX12EQDEEMPH; + output [1:0] PIPETX12POWERDOWN; + output PIPETX12STARTBLOCK; + output [1:0] PIPETX12SYNCHEADER; + output [1:0] PIPETX13CHARISK; + output PIPETX13COMPLIANCE; + output [31:0] PIPETX13DATA; + output PIPETX13DATAVALID; + output PIPETX13ELECIDLE; + output [1:0] PIPETX13EQCONTROL; + output [5:0] PIPETX13EQDEEMPH; + output [1:0] PIPETX13POWERDOWN; + output PIPETX13STARTBLOCK; + output [1:0] PIPETX13SYNCHEADER; + output [1:0] PIPETX14CHARISK; + output PIPETX14COMPLIANCE; + output [31:0] PIPETX14DATA; + output PIPETX14DATAVALID; + output PIPETX14ELECIDLE; + output [1:0] PIPETX14EQCONTROL; + output [5:0] PIPETX14EQDEEMPH; + output [1:0] PIPETX14POWERDOWN; + output PIPETX14STARTBLOCK; + output [1:0] PIPETX14SYNCHEADER; + output [1:0] PIPETX15CHARISK; + output PIPETX15COMPLIANCE; + output [31:0] PIPETX15DATA; + output PIPETX15DATAVALID; + output PIPETX15ELECIDLE; + output [1:0] PIPETX15EQCONTROL; + output [5:0] PIPETX15EQDEEMPH; + output [1:0] PIPETX15POWERDOWN; + output PIPETX15STARTBLOCK; + output [1:0] PIPETX15SYNCHEADER; + output PIPETXDEEMPH; + output [2:0] PIPETXMARGIN; + output [1:0] PIPETXRATE; + output PIPETXRCVRDET; + output PIPETXRESET; + output PIPETXSWING; + output PLEQINPROGRESS; + output [1:0] PLEQPHASE; + output PLGEN34EQMISMATCH; + output [3:0] SAXISCCTREADY; + output [3:0] SAXISRQTREADY; + output [31:0] USERSPAREOUT; + input [7:0] AXIUSERIN; + input CFGCONFIGSPACEENABLE; + input [15:0] CFGDEVIDPF0; + input [15:0] CFGDEVIDPF1; + input [15:0] CFGDEVIDPF2; + input [15:0] CFGDEVIDPF3; + input [7:0] CFGDSBUSNUMBER; + input [4:0] CFGDSDEVICENUMBER; + input [2:0] CFGDSFUNCTIONNUMBER; + input [63:0] CFGDSN; + input [7:0] CFGDSPORTNUMBER; + input CFGERRCORIN; + input CFGERRUNCORIN; + input [31:0] CFGEXTREADDATA; + input CFGEXTREADDATAVALID; + input [2:0] CFGFCSEL; + input [3:0] CFGFLRDONE; + input CFGHOTRESETIN; + input [3:0] CFGINTERRUPTINT; + input [2:0] CFGINTERRUPTMSIATTR; + input [7:0] CFGINTERRUPTMSIFUNCTIONNUMBER; + input [31:0] CFGINTERRUPTMSIINT; + input [31:0] CFGINTERRUPTMSIPENDINGSTATUS; + input CFGINTERRUPTMSIPENDINGSTATUSDATAENABLE; + input [1:0] CFGINTERRUPTMSIPENDINGSTATUSFUNCTIONNUM; + input [1:0] CFGINTERRUPTMSISELECT; + input CFGINTERRUPTMSITPHPRESENT; + input [7:0] CFGINTERRUPTMSITPHSTTAG; + input [1:0] CFGINTERRUPTMSITPHTYPE; + input [63:0] CFGINTERRUPTMSIXADDRESS; + input [31:0] CFGINTERRUPTMSIXDATA; + input CFGINTERRUPTMSIXINT; + input [1:0] CFGINTERRUPTMSIXVECPENDING; + input [3:0] CFGINTERRUPTPENDING; + input CFGLINKTRAININGENABLE; + input [9:0] CFGMGMTADDR; + input [3:0] CFGMGMTBYTEENABLE; + input CFGMGMTDEBUGACCESS; + input [7:0] CFGMGMTFUNCTIONNUMBER; + input CFGMGMTREAD; + input CFGMGMTWRITE; + input [31:0] CFGMGMTWRITEDATA; + input CFGMSGTRANSMIT; + input [31:0] CFGMSGTRANSMITDATA; + input [2:0] CFGMSGTRANSMITTYPE; + input [35:0] CFGMSIXRAMREADDATA; + input CFGPMASPML1ENTRYREJECT; + input CFGPMASPMTXL0SENTRYDISABLE; + input CFGPOWERSTATECHANGEACK; + input CFGREQPMTRANSITIONL23READY; + input [7:0] CFGREVIDPF0; + input [7:0] CFGREVIDPF1; + input [7:0] CFGREVIDPF2; + input [7:0] CFGREVIDPF3; + input [15:0] CFGSUBSYSIDPF0; + input [15:0] CFGSUBSYSIDPF1; + input [15:0] CFGSUBSYSIDPF2; + input [15:0] CFGSUBSYSIDPF3; + input [15:0] CFGSUBSYSVENDID; + input [35:0] CFGTPHRAMREADDATA; + input [15:0] CFGVENDID; + input CFGVFFLRDONE; + input [7:0] CFGVFFLRFUNCNUM; + input CONFMCAPREQUESTBYCONF; + input [31:0] CONFREQDATA; + input [3:0] CONFREQREGNUM; + input [1:0] CONFREQTYPE; + input CONFREQVALID; + input CORECLK; + input CORECLKMIREPLAYRAM0; + input CORECLKMIREPLAYRAM1; + input CORECLKMIRXCOMPLETIONRAM0; + input CORECLKMIRXCOMPLETIONRAM1; + input CORECLKMIRXPOSTEDREQUESTRAM0; + input CORECLKMIRXPOSTEDREQUESTRAM1; + input [5:0] DBGSEL0; + input [5:0] DBGSEL1; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input [21:0] MAXISCQTREADY; + input [21:0] MAXISRCTREADY; + input MCAPCLK; + input MCAPPERST0B; + input MCAPPERST1B; + input MGMTRESETN; + input MGMTSTICKYRESETN; + input [5:0] MIREPLAYRAMERRCOR; + input [5:0] MIREPLAYRAMERRUNCOR; + input [127:0] MIREPLAYRAMREADDATA0; + input [127:0] MIREPLAYRAMREADDATA1; + input [11:0] MIRXCOMPLETIONRAMERRCOR; + input [11:0] MIRXCOMPLETIONRAMERRUNCOR; + input [143:0] MIRXCOMPLETIONRAMREADDATA0; + input [143:0] MIRXCOMPLETIONRAMREADDATA1; + input [5:0] MIRXPOSTEDREQUESTRAMERRCOR; + input [5:0] MIRXPOSTEDREQUESTRAMERRUNCOR; + input [143:0] MIRXPOSTEDREQUESTRAMREADDATA0; + input [143:0] MIRXPOSTEDREQUESTRAMREADDATA1; + input [1:0] PCIECOMPLDELIVERED; + input [7:0] PCIECOMPLDELIVEREDTAG0; + input [7:0] PCIECOMPLDELIVEREDTAG1; + input [1:0] PCIECQNPREQ; + input PCIECQNPUSERCREDITRCVD; + input PCIECQPIPELINEEMPTY; + input PCIEPOSTEDREQDELIVERED; + input PIPECLK; + input PIPECLKEN; + input [5:0] PIPEEQFS; + input [5:0] PIPEEQLF; + input PIPERESETN; + input [1:0] PIPERX00CHARISK; + input [31:0] PIPERX00DATA; + input PIPERX00DATAVALID; + input PIPERX00ELECIDLE; + input PIPERX00EQDONE; + input PIPERX00EQLPADAPTDONE; + input PIPERX00EQLPLFFSSEL; + input [17:0] PIPERX00EQLPNEWTXCOEFFORPRESET; + input PIPERX00PHYSTATUS; + input [1:0] PIPERX00STARTBLOCK; + input [2:0] PIPERX00STATUS; + input [1:0] PIPERX00SYNCHEADER; + input PIPERX00VALID; + input [1:0] PIPERX01CHARISK; + input [31:0] PIPERX01DATA; + input PIPERX01DATAVALID; + input PIPERX01ELECIDLE; + input PIPERX01EQDONE; + input PIPERX01EQLPADAPTDONE; + input PIPERX01EQLPLFFSSEL; + input [17:0] PIPERX01EQLPNEWTXCOEFFORPRESET; + input PIPERX01PHYSTATUS; + input [1:0] PIPERX01STARTBLOCK; + input [2:0] PIPERX01STATUS; + input [1:0] PIPERX01SYNCHEADER; + input PIPERX01VALID; + input [1:0] PIPERX02CHARISK; + input [31:0] PIPERX02DATA; + input PIPERX02DATAVALID; + input PIPERX02ELECIDLE; + input PIPERX02EQDONE; + input PIPERX02EQLPADAPTDONE; + input PIPERX02EQLPLFFSSEL; + input [17:0] PIPERX02EQLPNEWTXCOEFFORPRESET; + input PIPERX02PHYSTATUS; + input [1:0] PIPERX02STARTBLOCK; + input [2:0] PIPERX02STATUS; + input [1:0] PIPERX02SYNCHEADER; + input PIPERX02VALID; + input [1:0] PIPERX03CHARISK; + input [31:0] PIPERX03DATA; + input PIPERX03DATAVALID; + input PIPERX03ELECIDLE; + input PIPERX03EQDONE; + input PIPERX03EQLPADAPTDONE; + input PIPERX03EQLPLFFSSEL; + input [17:0] PIPERX03EQLPNEWTXCOEFFORPRESET; + input PIPERX03PHYSTATUS; + input [1:0] PIPERX03STARTBLOCK; + input [2:0] PIPERX03STATUS; + input [1:0] PIPERX03SYNCHEADER; + input PIPERX03VALID; + input [1:0] PIPERX04CHARISK; + input [31:0] PIPERX04DATA; + input PIPERX04DATAVALID; + input PIPERX04ELECIDLE; + input PIPERX04EQDONE; + input PIPERX04EQLPADAPTDONE; + input PIPERX04EQLPLFFSSEL; + input [17:0] PIPERX04EQLPNEWTXCOEFFORPRESET; + input PIPERX04PHYSTATUS; + input [1:0] PIPERX04STARTBLOCK; + input [2:0] PIPERX04STATUS; + input [1:0] PIPERX04SYNCHEADER; + input PIPERX04VALID; + input [1:0] PIPERX05CHARISK; + input [31:0] PIPERX05DATA; + input PIPERX05DATAVALID; + input PIPERX05ELECIDLE; + input PIPERX05EQDONE; + input PIPERX05EQLPADAPTDONE; + input PIPERX05EQLPLFFSSEL; + input [17:0] PIPERX05EQLPNEWTXCOEFFORPRESET; + input PIPERX05PHYSTATUS; + input [1:0] PIPERX05STARTBLOCK; + input [2:0] PIPERX05STATUS; + input [1:0] PIPERX05SYNCHEADER; + input PIPERX05VALID; + input [1:0] PIPERX06CHARISK; + input [31:0] PIPERX06DATA; + input PIPERX06DATAVALID; + input PIPERX06ELECIDLE; + input PIPERX06EQDONE; + input PIPERX06EQLPADAPTDONE; + input PIPERX06EQLPLFFSSEL; + input [17:0] PIPERX06EQLPNEWTXCOEFFORPRESET; + input PIPERX06PHYSTATUS; + input [1:0] PIPERX06STARTBLOCK; + input [2:0] PIPERX06STATUS; + input [1:0] PIPERX06SYNCHEADER; + input PIPERX06VALID; + input [1:0] PIPERX07CHARISK; + input [31:0] PIPERX07DATA; + input PIPERX07DATAVALID; + input PIPERX07ELECIDLE; + input PIPERX07EQDONE; + input PIPERX07EQLPADAPTDONE; + input PIPERX07EQLPLFFSSEL; + input [17:0] PIPERX07EQLPNEWTXCOEFFORPRESET; + input PIPERX07PHYSTATUS; + input [1:0] PIPERX07STARTBLOCK; + input [2:0] PIPERX07STATUS; + input [1:0] PIPERX07SYNCHEADER; + input PIPERX07VALID; + input [1:0] PIPERX08CHARISK; + input [31:0] PIPERX08DATA; + input PIPERX08DATAVALID; + input PIPERX08ELECIDLE; + input PIPERX08EQDONE; + input PIPERX08EQLPADAPTDONE; + input PIPERX08EQLPLFFSSEL; + input [17:0] PIPERX08EQLPNEWTXCOEFFORPRESET; + input PIPERX08PHYSTATUS; + input [1:0] PIPERX08STARTBLOCK; + input [2:0] PIPERX08STATUS; + input [1:0] PIPERX08SYNCHEADER; + input PIPERX08VALID; + input [1:0] PIPERX09CHARISK; + input [31:0] PIPERX09DATA; + input PIPERX09DATAVALID; + input PIPERX09ELECIDLE; + input PIPERX09EQDONE; + input PIPERX09EQLPADAPTDONE; + input PIPERX09EQLPLFFSSEL; + input [17:0] PIPERX09EQLPNEWTXCOEFFORPRESET; + input PIPERX09PHYSTATUS; + input [1:0] PIPERX09STARTBLOCK; + input [2:0] PIPERX09STATUS; + input [1:0] PIPERX09SYNCHEADER; + input PIPERX09VALID; + input [1:0] PIPERX10CHARISK; + input [31:0] PIPERX10DATA; + input PIPERX10DATAVALID; + input PIPERX10ELECIDLE; + input PIPERX10EQDONE; + input PIPERX10EQLPADAPTDONE; + input PIPERX10EQLPLFFSSEL; + input [17:0] PIPERX10EQLPNEWTXCOEFFORPRESET; + input PIPERX10PHYSTATUS; + input [1:0] PIPERX10STARTBLOCK; + input [2:0] PIPERX10STATUS; + input [1:0] PIPERX10SYNCHEADER; + input PIPERX10VALID; + input [1:0] PIPERX11CHARISK; + input [31:0] PIPERX11DATA; + input PIPERX11DATAVALID; + input PIPERX11ELECIDLE; + input PIPERX11EQDONE; + input PIPERX11EQLPADAPTDONE; + input PIPERX11EQLPLFFSSEL; + input [17:0] PIPERX11EQLPNEWTXCOEFFORPRESET; + input PIPERX11PHYSTATUS; + input [1:0] PIPERX11STARTBLOCK; + input [2:0] PIPERX11STATUS; + input [1:0] PIPERX11SYNCHEADER; + input PIPERX11VALID; + input [1:0] PIPERX12CHARISK; + input [31:0] PIPERX12DATA; + input PIPERX12DATAVALID; + input PIPERX12ELECIDLE; + input PIPERX12EQDONE; + input PIPERX12EQLPADAPTDONE; + input PIPERX12EQLPLFFSSEL; + input [17:0] PIPERX12EQLPNEWTXCOEFFORPRESET; + input PIPERX12PHYSTATUS; + input [1:0] PIPERX12STARTBLOCK; + input [2:0] PIPERX12STATUS; + input [1:0] PIPERX12SYNCHEADER; + input PIPERX12VALID; + input [1:0] PIPERX13CHARISK; + input [31:0] PIPERX13DATA; + input PIPERX13DATAVALID; + input PIPERX13ELECIDLE; + input PIPERX13EQDONE; + input PIPERX13EQLPADAPTDONE; + input PIPERX13EQLPLFFSSEL; + input [17:0] PIPERX13EQLPNEWTXCOEFFORPRESET; + input PIPERX13PHYSTATUS; + input [1:0] PIPERX13STARTBLOCK; + input [2:0] PIPERX13STATUS; + input [1:0] PIPERX13SYNCHEADER; + input PIPERX13VALID; + input [1:0] PIPERX14CHARISK; + input [31:0] PIPERX14DATA; + input PIPERX14DATAVALID; + input PIPERX14ELECIDLE; + input PIPERX14EQDONE; + input PIPERX14EQLPADAPTDONE; + input PIPERX14EQLPLFFSSEL; + input [17:0] PIPERX14EQLPNEWTXCOEFFORPRESET; + input PIPERX14PHYSTATUS; + input [1:0] PIPERX14STARTBLOCK; + input [2:0] PIPERX14STATUS; + input [1:0] PIPERX14SYNCHEADER; + input PIPERX14VALID; + input [1:0] PIPERX15CHARISK; + input [31:0] PIPERX15DATA; + input PIPERX15DATAVALID; + input PIPERX15ELECIDLE; + input PIPERX15EQDONE; + input PIPERX15EQLPADAPTDONE; + input PIPERX15EQLPLFFSSEL; + input [17:0] PIPERX15EQLPNEWTXCOEFFORPRESET; + input PIPERX15PHYSTATUS; + input [1:0] PIPERX15STARTBLOCK; + input [2:0] PIPERX15STATUS; + input [1:0] PIPERX15SYNCHEADER; + input PIPERX15VALID; + input [17:0] PIPETX00EQCOEFF; + input PIPETX00EQDONE; + input [17:0] PIPETX01EQCOEFF; + input PIPETX01EQDONE; + input [17:0] PIPETX02EQCOEFF; + input PIPETX02EQDONE; + input [17:0] PIPETX03EQCOEFF; + input PIPETX03EQDONE; + input [17:0] PIPETX04EQCOEFF; + input PIPETX04EQDONE; + input [17:0] PIPETX05EQCOEFF; + input PIPETX05EQDONE; + input [17:0] PIPETX06EQCOEFF; + input PIPETX06EQDONE; + input [17:0] PIPETX07EQCOEFF; + input PIPETX07EQDONE; + input [17:0] PIPETX08EQCOEFF; + input PIPETX08EQDONE; + input [17:0] PIPETX09EQCOEFF; + input PIPETX09EQDONE; + input [17:0] PIPETX10EQCOEFF; + input PIPETX10EQDONE; + input [17:0] PIPETX11EQCOEFF; + input PIPETX11EQDONE; + input [17:0] PIPETX12EQCOEFF; + input PIPETX12EQDONE; + input [17:0] PIPETX13EQCOEFF; + input PIPETX13EQDONE; + input [17:0] PIPETX14EQCOEFF; + input PIPETX14EQDONE; + input [17:0] PIPETX15EQCOEFF; + input PIPETX15EQDONE; + input PLEQRESETEIEOSCOUNT; + input PLGEN2UPSTREAMPREFERDEEMPH; + input PLGEN34REDOEQSPEED; + input PLGEN34REDOEQUALIZATION; + input RESETN; + input [255:0] SAXISCCTDATA; + input [7:0] SAXISCCTKEEP; + input SAXISCCTLAST; + input [32:0] SAXISCCTUSER; + input SAXISCCTVALID; + input [255:0] SAXISRQTDATA; + input [7:0] SAXISRQTKEEP; + input SAXISRQTLAST; + input [61:0] SAXISRQTUSER; + input SAXISRQTVALID; + input USERCLK; + input USERCLK2; + input USERCLKEN; + input [31:0] USERSPAREIN; +endmodule + +module PCIE4CE4 (...); + parameter ARI_CAP_ENABLE = "FALSE"; + parameter AUTO_FLR_RESPONSE = "FALSE"; + parameter [7:0] AXISTEN_IF_CCIX_RX_CREDIT_LIMIT = 8'h08; + parameter [7:0] AXISTEN_IF_CCIX_TX_CREDIT_LIMIT = 8'h08; + parameter AXISTEN_IF_CCIX_TX_REGISTERED_TREADY = "FALSE"; + parameter [1:0] AXISTEN_IF_CC_ALIGNMENT_MODE = 2'h0; + parameter [23:0] AXISTEN_IF_COMPL_TIMEOUT_REG0 = 24'hBEBC20; + parameter [27:0] AXISTEN_IF_COMPL_TIMEOUT_REG1 = 28'h2FAF080; + parameter [1:0] AXISTEN_IF_CQ_ALIGNMENT_MODE = 2'h0; + parameter AXISTEN_IF_CQ_EN_POISONED_MEM_WR = "FALSE"; + parameter AXISTEN_IF_ENABLE_256_TAGS = "FALSE"; + parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE"; + parameter AXISTEN_IF_ENABLE_INTERNAL_MSIX_TABLE = "FALSE"; + parameter AXISTEN_IF_ENABLE_MESSAGE_RID_CHECK = "TRUE"; + parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000; + parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE"; + parameter AXISTEN_IF_EXT_512 = "FALSE"; + parameter AXISTEN_IF_EXT_512_CC_STRADDLE = "FALSE"; + parameter AXISTEN_IF_EXT_512_CQ_STRADDLE = "FALSE"; + parameter AXISTEN_IF_EXT_512_RC_STRADDLE = "FALSE"; + parameter AXISTEN_IF_EXT_512_RQ_STRADDLE = "FALSE"; + parameter AXISTEN_IF_LEGACY_MODE_ENABLE = "FALSE"; + parameter AXISTEN_IF_MSIX_FROM_RAM_PIPELINE = "FALSE"; + parameter AXISTEN_IF_MSIX_RX_PARITY_EN = "TRUE"; + parameter AXISTEN_IF_MSIX_TO_RAM_PIPELINE = "FALSE"; + parameter [1:0] AXISTEN_IF_RC_ALIGNMENT_MODE = 2'h0; + parameter AXISTEN_IF_RC_STRADDLE = "FALSE"; + parameter [1:0] AXISTEN_IF_RQ_ALIGNMENT_MODE = 2'h0; + parameter AXISTEN_IF_RX_PARITY_EN = "TRUE"; + parameter AXISTEN_IF_SIM_SHORT_CPL_TIMEOUT = "FALSE"; + parameter AXISTEN_IF_TX_PARITY_EN = "TRUE"; + parameter [1:0] AXISTEN_IF_WIDTH = 2'h2; + parameter CCIX_DIRECT_ATTACH_MODE = "FALSE"; + parameter CCIX_ENABLE = "FALSE"; + parameter [15:0] CCIX_VENDOR_ID = 16'h0000; + parameter CFG_BYPASS_MODE_ENABLE = "FALSE"; + parameter CRM_CORE_CLK_FREQ_500 = "TRUE"; + parameter [1:0] CRM_USER_CLK_FREQ = 2'h2; + parameter [15:0] DEBUG_AXI4ST_SPARE = 16'h0000; + parameter [7:0] DEBUG_AXIST_DISABLE_FEATURE_BIT = 8'h00; + parameter [3:0] DEBUG_CAR_SPARE = 4'h0; + parameter [15:0] DEBUG_CFG_SPARE = 16'h0000; + parameter [15:0] DEBUG_LL_SPARE = 16'h0000; + parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_DEFRAMER_ERROR = "FALSE"; + parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_SKP_ERROR = "FALSE"; + parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_SKP_PARITY_ERROR = "FALSE"; + parameter DEBUG_PL_DISABLE_REC_ENTRY_ON_DYNAMIC_DSKEW_FAIL = "FALSE"; + parameter DEBUG_PL_DISABLE_REC_ENTRY_ON_RX_BUFFER_UNDER_OVER_FLOW = "FALSE"; + parameter DEBUG_PL_DISABLE_SCRAMBLING = "FALSE"; + parameter DEBUG_PL_SIM_RESET_LFSR = "FALSE"; + parameter [15:0] DEBUG_PL_SPARE = 16'h0000; + parameter DEBUG_TL_DISABLE_FC_TIMEOUT = "FALSE"; + parameter DEBUG_TL_DISABLE_RX_TLP_ORDER_CHECKS = "FALSE"; + parameter [15:0] DEBUG_TL_SPARE = 16'h0000; + parameter [7:0] DNSTREAM_LINK_NUM = 8'h00; + parameter DSN_CAP_ENABLE = "FALSE"; + parameter EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter HEADER_TYPE_OVERRIDE = "FALSE"; + parameter IS_SWITCH_PORT = "FALSE"; + parameter LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE"; + parameter [8:0] LL_ACK_TIMEOUT = 9'h000; + parameter LL_ACK_TIMEOUT_EN = "FALSE"; + parameter integer LL_ACK_TIMEOUT_FUNC = 0; + parameter LL_DISABLE_SCHED_TX_NAK = "FALSE"; + parameter LL_REPLAY_FROM_RAM_PIPELINE = "FALSE"; + parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000; + parameter LL_REPLAY_TIMEOUT_EN = "FALSE"; + parameter integer LL_REPLAY_TIMEOUT_FUNC = 0; + parameter LL_REPLAY_TO_RAM_PIPELINE = "FALSE"; + parameter LL_RX_TLP_PARITY_GEN = "TRUE"; + parameter LL_TX_TLP_PARITY_CHK = "TRUE"; + parameter [15:0] LL_USER_SPARE = 16'h0000; + parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h250; + parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE"; + parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE"; + parameter [11:0] MCAP_CAP_NEXTPTR = 12'h000; + parameter MCAP_CONFIGURE_OVERRIDE = "FALSE"; + parameter MCAP_ENABLE = "FALSE"; + parameter MCAP_EOS_DESIGN_SWITCH = "FALSE"; + parameter [31:0] MCAP_FPGA_BITSTREAM_VERSION = 32'h00000000; + parameter MCAP_GATE_IO_ENABLE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_GATE_MEM_ENABLE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_INPUT_GATE_DESIGN_SWITCH = "FALSE"; + parameter MCAP_INTERRUPT_ON_MCAP_EOS = "FALSE"; + parameter MCAP_INTERRUPT_ON_MCAP_ERROR = "FALSE"; + parameter [15:0] MCAP_VSEC_ID = 16'h0000; + parameter [11:0] MCAP_VSEC_LEN = 12'h02C; + parameter [3:0] MCAP_VSEC_REV = 4'h0; + parameter PF0_AER_CAP_ECRC_GEN_AND_CHECK_CAPABLE = "FALSE"; + parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [3:0] PF0_ARI_CAP_VER = 4'h1; + parameter [4:0] PF0_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] PF0_ATS_CAP_NEXTPTR = 12'h000; + parameter PF0_ATS_CAP_ON = "FALSE"; + parameter [5:0] PF0_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_BAR1_CONTROL = 3'h0; + parameter [5:0] PF0_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR3_CONTROL = 3'h0; + parameter [5:0] PF0_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_BAR5_CONTROL = 3'h0; + parameter [7:0] PF0_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF0_CLASS_CODE = 24'h000000; + parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE"; + parameter PF0_DEV_CAP2_ARI_FORWARD_ENABLE = "FALSE"; + parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE"; + parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE"; + parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0; + parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE"; + parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0; + parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0; + parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE"; + parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE"; + parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF0_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF0_INTERRUPT_PIN = 3'h1; + parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN4 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7; + parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN4 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN4 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7; + parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN4 = 7; + parameter [0:0] PF0_LINK_CONTROL_RCB = 1'h0; + parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE"; + parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000; + parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000; + parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_LTR_CAP_VER = 4'h1; + parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [5:0] PF0_MSIX_VECTOR_COUNT = 6'h04; + parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00; + parameter PF0_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF0_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF0_PM_CAP_ID = 8'h01; + parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00; + parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE"; + parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE"; + parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE"; + parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3; + parameter PF0_PM_CSR_NOSOFTRESET = "TRUE"; + parameter [11:0] PF0_PRI_CAP_NEXTPTR = 12'h000; + parameter PF0_PRI_CAP_ON = "FALSE"; + parameter [31:0] PF0_PRI_OST_PR_CAPACITY = 32'h00000000; + parameter [11:0] PF0_SECONDARY_PCIE_CAP_NEXTPTR = 12'h000; + parameter PF0_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE"; + parameter PF0_TPHR_CAP_ENABLE = "FALSE"; + parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE"; + parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0; + parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000; + parameter [3:0] PF0_TPHR_CAP_VER = 4'h1; + parameter [3:0] PF0_VC_ARB_CAPABILITY = 4'h0; + parameter [7:0] PF0_VC_ARB_TBL_OFFSET = 8'h00; + parameter PF0_VC_CAP_ENABLE = "FALSE"; + parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000; + parameter [3:0] PF0_VC_CAP_VER = 4'h1; + parameter PF0_VC_EXTENDED_COUNT = "FALSE"; + parameter PF0_VC_LOW_PRIORITY_EXTENDED_COUNT = "FALSE"; + parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [4:0] PF1_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] PF1_ATS_CAP_NEXTPTR = 12'h000; + parameter PF1_ATS_CAP_ON = "FALSE"; + parameter [5:0] PF1_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_BAR1_CONTROL = 3'h0; + parameter [5:0] PF1_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR3_CONTROL = 3'h0; + parameter [5:0] PF1_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_BAR5_CONTROL = 3'h0; + parameter [7:0] PF1_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF1_CLASS_CODE = 24'h000000; + parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF1_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF1_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00; + parameter PF1_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF1_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00; + parameter [11:0] PF1_PRI_CAP_NEXTPTR = 12'h000; + parameter PF1_PRI_CAP_ON = "FALSE"; + parameter [31:0] PF1_PRI_OST_PR_CAPACITY = 32'h00000000; + parameter PF1_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] PF2_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF2_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF2_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [4:0] PF2_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] PF2_ATS_CAP_NEXTPTR = 12'h000; + parameter PF2_ATS_CAP_ON = "FALSE"; + parameter [5:0] PF2_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR0_CONTROL = 3'h4; + parameter [4:0] PF2_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF2_BAR1_CONTROL = 3'h0; + parameter [5:0] PF2_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR2_CONTROL = 3'h4; + parameter [4:0] PF2_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR3_CONTROL = 3'h0; + parameter [5:0] PF2_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_BAR4_CONTROL = 3'h4; + parameter [4:0] PF2_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_BAR5_CONTROL = 3'h0; + parameter [7:0] PF2_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF2_CLASS_CODE = 24'h000000; + parameter [2:0] PF2_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF2_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF2_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF2_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF2_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF2_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF2_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF2_MSI_CAP_NEXTPTR = 8'h00; + parameter PF2_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF2_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF2_PM_CAP_NEXTPTR = 8'h00; + parameter [11:0] PF2_PRI_CAP_NEXTPTR = 12'h000; + parameter PF2_PRI_CAP_ON = "FALSE"; + parameter [31:0] PF2_PRI_OST_PR_CAPACITY = 32'h00000000; + parameter PF2_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF2_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF2_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF2_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF2_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF2_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF2_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF2_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF2_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF2_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF2_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF2_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF2_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF2_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF2_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF2_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [11:0] PF2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] PF3_AER_CAP_NEXTPTR = 12'h000; + parameter [11:0] PF3_ARI_CAP_NEXTPTR = 12'h000; + parameter [7:0] PF3_ARI_CAP_NEXT_FUNC = 8'h00; + parameter [4:0] PF3_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] PF3_ATS_CAP_NEXTPTR = 12'h000; + parameter PF3_ATS_CAP_ON = "FALSE"; + parameter [5:0] PF3_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR0_CONTROL = 3'h4; + parameter [4:0] PF3_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF3_BAR1_CONTROL = 3'h0; + parameter [5:0] PF3_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR2_CONTROL = 3'h4; + parameter [4:0] PF3_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR3_CONTROL = 3'h0; + parameter [5:0] PF3_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_BAR4_CONTROL = 3'h4; + parameter [4:0] PF3_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_BAR5_CONTROL = 3'h0; + parameter [7:0] PF3_CAPABILITY_POINTER = 8'h80; + parameter [23:0] PF3_CLASS_CODE = 24'h000000; + parameter [2:0] PF3_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3; + parameter [11:0] PF3_DSN_CAP_NEXTPTR = 12'h10C; + parameter [4:0] PF3_EXPANSION_ROM_APERTURE_SIZE = 5'h03; + parameter PF3_EXPANSION_ROM_ENABLE = "FALSE"; + parameter [2:0] PF3_INTERRUPT_PIN = 3'h1; + parameter [7:0] PF3_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer PF3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] PF3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer PF3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] PF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] PF3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter integer PF3_MSI_CAP_MULTIMSGCAP = 0; + parameter [7:0] PF3_MSI_CAP_NEXTPTR = 8'h00; + parameter PF3_MSI_CAP_PERVECMASKCAP = "FALSE"; + parameter [7:0] PF3_PCIE_CAP_NEXTPTR = 8'h00; + parameter [7:0] PF3_PM_CAP_NEXTPTR = 8'h00; + parameter [11:0] PF3_PRI_CAP_NEXTPTR = 12'h000; + parameter PF3_PRI_CAP_ON = "FALSE"; + parameter [31:0] PF3_PRI_OST_PR_CAPACITY = 32'h00000000; + parameter PF3_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE"; + parameter [5:0] PF3_SRIOV_BAR0_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_SRIOV_BAR0_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR1_APERTURE_SIZE = 5'h00; + parameter [2:0] PF3_SRIOV_BAR1_CONTROL = 3'h0; + parameter [5:0] PF3_SRIOV_BAR2_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_SRIOV_BAR2_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR3_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR3_CONTROL = 3'h0; + parameter [5:0] PF3_SRIOV_BAR4_APERTURE_SIZE = 6'h03; + parameter [2:0] PF3_SRIOV_BAR4_CONTROL = 3'h4; + parameter [4:0] PF3_SRIOV_BAR5_APERTURE_SIZE = 5'h03; + parameter [2:0] PF3_SRIOV_BAR5_CONTROL = 3'h0; + parameter [15:0] PF3_SRIOV_CAP_INITIAL_VF = 16'h0000; + parameter [11:0] PF3_SRIOV_CAP_NEXTPTR = 12'h000; + parameter [15:0] PF3_SRIOV_CAP_TOTAL_VF = 16'h0000; + parameter [3:0] PF3_SRIOV_CAP_VER = 4'h1; + parameter [15:0] PF3_SRIOV_FIRST_VF_OFFSET = 16'h0000; + parameter [15:0] PF3_SRIOV_FUNC_DEP_LINK = 16'h0000; + parameter [31:0] PF3_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000; + parameter [15:0] PF3_SRIOV_VF_DEVICE_ID = 16'h0000; + parameter [11:0] PF3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] PF3_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter PL_CFG_STATE_ROBUSTNESS_ENABLE = "TRUE"; + parameter PL_CTRL_SKP_GEN_ENABLE = "FALSE"; + parameter PL_CTRL_SKP_PARITY_AND_CRC_CHECK_DISABLE = "TRUE"; + parameter PL_DEEMPH_SOURCE_SELECT = "TRUE"; + parameter PL_DESKEW_ON_SKIP_IN_GEN12 = "FALSE"; + parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN3 = "FALSE"; + parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN4 = "FALSE"; + parameter PL_DISABLE_AUTO_SPEED_CHANGE_TO_GEN2 = "FALSE"; + parameter PL_DISABLE_DC_BALANCE = "FALSE"; + parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE"; + parameter PL_DISABLE_LANE_REVERSAL = "FALSE"; + parameter [1:0] PL_DISABLE_LFSR_UPDATE_ON_SKP = 2'h0; + parameter PL_DISABLE_RETRAIN_ON_EB_ERROR = "FALSE"; + parameter PL_DISABLE_RETRAIN_ON_FRAMING_ERROR = "FALSE"; + parameter [15:0] PL_DISABLE_RETRAIN_ON_SPECIFIC_FRAMING_ERROR = 16'h0000; + parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE"; + parameter [1:0] PL_EQ_ADAPT_DISABLE_COEFF_CHECK = 2'h0; + parameter [1:0] PL_EQ_ADAPT_DISABLE_PRESET_CHECK = 2'h0; + parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02; + parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1; + parameter [1:0] PL_EQ_BYPASS_PHASE23 = 2'h0; + parameter [5:0] PL_EQ_DEFAULT_RX_PRESET_HINT = 6'h33; + parameter [7:0] PL_EQ_DEFAULT_TX_PRESET = 8'h44; + parameter PL_EQ_DISABLE_MISMATCH_CHECK = "TRUE"; + parameter [1:0] PL_EQ_RX_ADAPT_EQ_PHASE0 = 2'h0; + parameter [1:0] PL_EQ_RX_ADAPT_EQ_PHASE1 = 2'h0; + parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE"; + parameter PL_EQ_TX_8G_EQ_TS2_ENABLE = "FALSE"; + parameter PL_EXIT_LOOPBACK_ON_EI_ENTRY = "TRUE"; + parameter PL_INFER_EI_DISABLE_LPBK_ACTIVE = "TRUE"; + parameter PL_INFER_EI_DISABLE_REC_RC = "FALSE"; + parameter PL_INFER_EI_DISABLE_REC_SPD = "FALSE"; + parameter [31:0] PL_LANE0_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE10_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE11_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE12_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE13_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE14_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE15_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE1_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE2_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE3_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE4_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE5_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE6_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE7_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE8_EQ_CONTROL = 32'h00003F00; + parameter [31:0] PL_LANE9_EQ_CONTROL = 32'h00003F00; + parameter [3:0] PL_LINK_CAP_MAX_LINK_SPEED = 4'h4; + parameter [4:0] PL_LINK_CAP_MAX_LINK_WIDTH = 5'h08; + parameter integer PL_N_FTS = 255; + parameter PL_QUIESCE_GUARANTEE_DISABLE = "FALSE"; + parameter PL_REDO_EQ_SOURCE_SELECT = "TRUE"; + parameter [7:0] PL_REPORT_ALL_PHY_ERRORS = 8'h00; + parameter [1:0] PL_RX_ADAPT_TIMER_CLWS_CLOBBER_TX_TS = 2'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_CLWS_GEN3 = 4'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_CLWS_GEN4 = 4'h0; + parameter [1:0] PL_RX_ADAPT_TIMER_RRL_CLOBBER_TX_TS = 2'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_RRL_GEN3 = 4'h0; + parameter [3:0] PL_RX_ADAPT_TIMER_RRL_GEN4 = 4'h0; + parameter [1:0] PL_RX_L0S_EXIT_TO_RECOVERY = 2'h0; + parameter [1:0] PL_SIM_FAST_LINK_TRAINING = 2'h0; + parameter PL_SRIS_ENABLE = "FALSE"; + parameter [6:0] PL_SRIS_SKPOS_GEN_SPD_VEC = 7'h00; + parameter [6:0] PL_SRIS_SKPOS_REC_SPD_VEC = 7'h00; + parameter PL_UPSTREAM_FACING = "TRUE"; + parameter [15:0] PL_USER_SPARE = 16'h0000; + parameter [15:0] PL_USER_SPARE2 = 16'h0000; + parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h1500; + parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h003E8; + parameter PM_ENABLE_L23_ENTRY = "FALSE"; + parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE"; + parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000100; + parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h00000; + parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0100; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter [31:0] SIM_JTAG_IDCODE = 32'h00000000; + parameter SIM_VERSION = "1.0"; + parameter SPARE_BIT0 = "FALSE"; + parameter integer SPARE_BIT1 = 0; + parameter integer SPARE_BIT2 = 0; + parameter SPARE_BIT3 = "FALSE"; + parameter integer SPARE_BIT4 = 0; + parameter integer SPARE_BIT5 = 0; + parameter integer SPARE_BIT6 = 0; + parameter integer SPARE_BIT7 = 0; + parameter integer SPARE_BIT8 = 0; + parameter [7:0] SPARE_BYTE0 = 8'h00; + parameter [7:0] SPARE_BYTE1 = 8'h00; + parameter [7:0] SPARE_BYTE2 = 8'h00; + parameter [7:0] SPARE_BYTE3 = 8'h00; + parameter [31:0] SPARE_WORD0 = 32'h00000000; + parameter [31:0] SPARE_WORD1 = 32'h00000000; + parameter [31:0] SPARE_WORD2 = 32'h00000000; + parameter [31:0] SPARE_WORD3 = 32'h00000000; + parameter [3:0] SRIOV_CAP_ENABLE = 4'h0; + parameter TL2CFG_IF_PARITY_CHK = "TRUE"; + parameter [1:0] TL_COMPLETION_RAM_NUM_TLPS = 2'h0; + parameter [1:0] TL_COMPLETION_RAM_SIZE = 2'h1; + parameter [11:0] TL_CREDITS_CD = 12'h000; + parameter [11:0] TL_CREDITS_CD_VC1 = 12'h000; + parameter [7:0] TL_CREDITS_CH = 8'h00; + parameter [7:0] TL_CREDITS_CH_VC1 = 8'h00; + parameter [11:0] TL_CREDITS_NPD = 12'h004; + parameter [11:0] TL_CREDITS_NPD_VC1 = 12'h000; + parameter [7:0] TL_CREDITS_NPH = 8'h20; + parameter [7:0] TL_CREDITS_NPH_VC1 = 8'h01; + parameter [11:0] TL_CREDITS_PD = 12'h0E0; + parameter [11:0] TL_CREDITS_PD_VC1 = 12'h3E0; + parameter [7:0] TL_CREDITS_PH = 8'h20; + parameter [7:0] TL_CREDITS_PH_VC1 = 8'h20; + parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TIME = 5'h02; + parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TIME_VC1 = 5'h02; + parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TLP_COUNT = 5'h08; + parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TLP_COUNT_VC1 = 5'h08; + parameter TL_FEATURE_ENABLE_FC_SCALING = "FALSE"; + parameter [1:0] TL_PF_ENABLE_REG = 2'h0; + parameter [0:0] TL_POSTED_RAM_SIZE = 1'h0; + parameter TL_RX_COMPLETION_FROM_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_COMPLETION_TO_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_COMPLETION_TO_RAM_WRITE_PIPELINE = "FALSE"; + parameter TL_RX_POSTED_FROM_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_POSTED_TO_RAM_READ_PIPELINE = "FALSE"; + parameter TL_RX_POSTED_TO_RAM_WRITE_PIPELINE = "FALSE"; + parameter TL_TX_MUX_STRICT_PRIORITY = "TRUE"; + parameter TL_TX_TLP_STRADDLE_ENABLE = "FALSE"; + parameter TL_TX_TLP_TERMINATE_PARITY = "FALSE"; + parameter [15:0] TL_USER_SPARE = 16'h0000; + parameter TPH_FROM_RAM_PIPELINE = "FALSE"; + parameter TPH_TO_RAM_PIPELINE = "FALSE"; + parameter [7:0] VF0_CAPABILITY_POINTER = 8'h80; + parameter [11:0] VFG0_ARI_CAP_NEXTPTR = 12'h000; + parameter [4:0] VFG0_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] VFG0_ATS_CAP_NEXTPTR = 12'h000; + parameter VFG0_ATS_CAP_ON = "FALSE"; + parameter [7:0] VFG0_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG0_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG0_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG0_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG0_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG0_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG0_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG0_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG0_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] VFG1_ARI_CAP_NEXTPTR = 12'h000; + parameter [4:0] VFG1_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] VFG1_ATS_CAP_NEXTPTR = 12'h000; + parameter VFG1_ATS_CAP_ON = "FALSE"; + parameter [7:0] VFG1_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG1_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG1_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG1_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG1_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG1_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG1_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG1_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG1_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] VFG2_ARI_CAP_NEXTPTR = 12'h000; + parameter [4:0] VFG2_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] VFG2_ATS_CAP_NEXTPTR = 12'h000; + parameter VFG2_ATS_CAP_ON = "FALSE"; + parameter [7:0] VFG2_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG2_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG2_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG2_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG2_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG2_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG2_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG2_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG2_TPHR_CAP_ST_MODE_SEL = 3'h0; + parameter [11:0] VFG3_ARI_CAP_NEXTPTR = 12'h000; + parameter [4:0] VFG3_ATS_CAP_INV_QUEUE_DEPTH = 5'h00; + parameter [11:0] VFG3_ATS_CAP_NEXTPTR = 12'h000; + parameter VFG3_ATS_CAP_ON = "FALSE"; + parameter [7:0] VFG3_MSIX_CAP_NEXTPTR = 8'h00; + parameter integer VFG3_MSIX_CAP_PBA_BIR = 0; + parameter [28:0] VFG3_MSIX_CAP_PBA_OFFSET = 29'h00000050; + parameter integer VFG3_MSIX_CAP_TABLE_BIR = 0; + parameter [28:0] VFG3_MSIX_CAP_TABLE_OFFSET = 29'h00000040; + parameter [10:0] VFG3_MSIX_CAP_TABLE_SIZE = 11'h000; + parameter [7:0] VFG3_PCIE_CAP_NEXTPTR = 8'h00; + parameter [11:0] VFG3_TPHR_CAP_NEXTPTR = 12'h000; + parameter [2:0] VFG3_TPHR_CAP_ST_MODE_SEL = 3'h0; + output [7:0] AXIUSEROUT; + output CCIXTXCREDIT; + output [7:0] CFGBUSNUMBER; + output [1:0] CFGCURRENTSPEED; + output CFGERRCOROUT; + output CFGERRFATALOUT; + output CFGERRNONFATALOUT; + output [7:0] CFGEXTFUNCTIONNUMBER; + output CFGEXTREADRECEIVED; + output [9:0] CFGEXTREGISTERNUMBER; + output [3:0] CFGEXTWRITEBYTEENABLE; + output [31:0] CFGEXTWRITEDATA; + output CFGEXTWRITERECEIVED; + output [11:0] CFGFCCPLD; + output [7:0] CFGFCCPLH; + output [11:0] CFGFCNPD; + output [7:0] CFGFCNPH; + output [11:0] CFGFCPD; + output [7:0] CFGFCPH; + output [3:0] CFGFLRINPROCESS; + output [11:0] CFGFUNCTIONPOWERSTATE; + output [15:0] CFGFUNCTIONSTATUS; + output CFGHOTRESETOUT; + output [31:0] CFGINTERRUPTMSIDATA; + output [3:0] CFGINTERRUPTMSIENABLE; + output CFGINTERRUPTMSIFAIL; + output CFGINTERRUPTMSIMASKUPDATE; + output [11:0] CFGINTERRUPTMSIMMENABLE; + output CFGINTERRUPTMSISENT; + output [3:0] CFGINTERRUPTMSIXENABLE; + output [3:0] CFGINTERRUPTMSIXMASK; + output CFGINTERRUPTMSIXVECPENDINGSTATUS; + output CFGINTERRUPTSENT; + output [1:0] CFGLINKPOWERSTATE; + output [4:0] CFGLOCALERROROUT; + output CFGLOCALERRORVALID; + output CFGLTRENABLE; + output [5:0] CFGLTSSMSTATE; + output [1:0] CFGMAXPAYLOAD; + output [2:0] CFGMAXREADREQ; + output [31:0] CFGMGMTREADDATA; + output CFGMGMTREADWRITEDONE; + output CFGMSGRECEIVED; + output [7:0] CFGMSGRECEIVEDDATA; + output [4:0] CFGMSGRECEIVEDTYPE; + output CFGMSGTRANSMITDONE; + output [12:0] CFGMSIXRAMADDRESS; + output CFGMSIXRAMREADENABLE; + output [3:0] CFGMSIXRAMWRITEBYTEENABLE; + output [35:0] CFGMSIXRAMWRITEDATA; + output [2:0] CFGNEGOTIATEDWIDTH; + output [1:0] CFGOBFFENABLE; + output CFGPHYLINKDOWN; + output [1:0] CFGPHYLINKSTATUS; + output CFGPLSTATUSCHANGE; + output CFGPOWERSTATECHANGEINTERRUPT; + output [3:0] CFGRCBSTATUS; + output [1:0] CFGRXPMSTATE; + output [11:0] CFGTPHRAMADDRESS; + output CFGTPHRAMREADENABLE; + output [3:0] CFGTPHRAMWRITEBYTEENABLE; + output [35:0] CFGTPHRAMWRITEDATA; + output [3:0] CFGTPHREQUESTERENABLE; + output [11:0] CFGTPHSTMODE; + output [1:0] CFGTXPMSTATE; + output CFGVC1ENABLE; + output CFGVC1NEGOTIATIONPENDING; + output CONFMCAPDESIGNSWITCH; + output CONFMCAPEOS; + output CONFMCAPINUSEBYPCIE; + output CONFREQREADY; + output [31:0] CONFRESPRDATA; + output CONFRESPVALID; + output [129:0] DBGCCIXOUT; + output [31:0] DBGCTRL0OUT; + output [31:0] DBGCTRL1OUT; + output [255:0] DBGDATA0OUT; + output [255:0] DBGDATA1OUT; + output [15:0] DRPDO; + output DRPRDY; + output [45:0] MAXISCCIXRXTUSER; + output MAXISCCIXRXTVALID; + output [255:0] MAXISCQTDATA; + output [7:0] MAXISCQTKEEP; + output MAXISCQTLAST; + output [87:0] MAXISCQTUSER; + output MAXISCQTVALID; + output [255:0] MAXISRCTDATA; + output [7:0] MAXISRCTKEEP; + output MAXISRCTLAST; + output [74:0] MAXISRCTUSER; + output MAXISRCTVALID; + output [8:0] MIREPLAYRAMADDRESS0; + output [8:0] MIREPLAYRAMADDRESS1; + output MIREPLAYRAMREADENABLE0; + output MIREPLAYRAMREADENABLE1; + output [127:0] MIREPLAYRAMWRITEDATA0; + output [127:0] MIREPLAYRAMWRITEDATA1; + output MIREPLAYRAMWRITEENABLE0; + output MIREPLAYRAMWRITEENABLE1; + output [8:0] MIRXCOMPLETIONRAMREADADDRESS0; + output [8:0] MIRXCOMPLETIONRAMREADADDRESS1; + output [1:0] MIRXCOMPLETIONRAMREADENABLE0; + output [1:0] MIRXCOMPLETIONRAMREADENABLE1; + output [8:0] MIRXCOMPLETIONRAMWRITEADDRESS0; + output [8:0] MIRXCOMPLETIONRAMWRITEADDRESS1; + output [143:0] MIRXCOMPLETIONRAMWRITEDATA0; + output [143:0] MIRXCOMPLETIONRAMWRITEDATA1; + output [1:0] MIRXCOMPLETIONRAMWRITEENABLE0; + output [1:0] MIRXCOMPLETIONRAMWRITEENABLE1; + output [8:0] MIRXPOSTEDREQUESTRAMREADADDRESS0; + output [8:0] MIRXPOSTEDREQUESTRAMREADADDRESS1; + output MIRXPOSTEDREQUESTRAMREADENABLE0; + output MIRXPOSTEDREQUESTRAMREADENABLE1; + output [8:0] MIRXPOSTEDREQUESTRAMWRITEADDRESS0; + output [8:0] MIRXPOSTEDREQUESTRAMWRITEADDRESS1; + output [143:0] MIRXPOSTEDREQUESTRAMWRITEDATA0; + output [143:0] MIRXPOSTEDREQUESTRAMWRITEDATA1; + output MIRXPOSTEDREQUESTRAMWRITEENABLE0; + output MIRXPOSTEDREQUESTRAMWRITEENABLE1; + output [5:0] PCIECQNPREQCOUNT; + output PCIEPERST0B; + output PCIEPERST1B; + output [5:0] PCIERQSEQNUM0; + output [5:0] PCIERQSEQNUM1; + output PCIERQSEQNUMVLD0; + output PCIERQSEQNUMVLD1; + output [7:0] PCIERQTAG0; + output [7:0] PCIERQTAG1; + output [3:0] PCIERQTAGAV; + output PCIERQTAGVLD0; + output PCIERQTAGVLD1; + output [3:0] PCIETFCNPDAV; + output [3:0] PCIETFCNPHAV; + output [1:0] PIPERX00EQCONTROL; + output PIPERX00POLARITY; + output [1:0] PIPERX01EQCONTROL; + output PIPERX01POLARITY; + output [1:0] PIPERX02EQCONTROL; + output PIPERX02POLARITY; + output [1:0] PIPERX03EQCONTROL; + output PIPERX03POLARITY; + output [1:0] PIPERX04EQCONTROL; + output PIPERX04POLARITY; + output [1:0] PIPERX05EQCONTROL; + output PIPERX05POLARITY; + output [1:0] PIPERX06EQCONTROL; + output PIPERX06POLARITY; + output [1:0] PIPERX07EQCONTROL; + output PIPERX07POLARITY; + output [1:0] PIPERX08EQCONTROL; + output PIPERX08POLARITY; + output [1:0] PIPERX09EQCONTROL; + output PIPERX09POLARITY; + output [1:0] PIPERX10EQCONTROL; + output PIPERX10POLARITY; + output [1:0] PIPERX11EQCONTROL; + output PIPERX11POLARITY; + output [1:0] PIPERX12EQCONTROL; + output PIPERX12POLARITY; + output [1:0] PIPERX13EQCONTROL; + output PIPERX13POLARITY; + output [1:0] PIPERX14EQCONTROL; + output PIPERX14POLARITY; + output [1:0] PIPERX15EQCONTROL; + output PIPERX15POLARITY; + output [5:0] PIPERXEQLPLFFS; + output [3:0] PIPERXEQLPTXPRESET; + output [1:0] PIPETX00CHARISK; + output PIPETX00COMPLIANCE; + output [31:0] PIPETX00DATA; + output PIPETX00DATAVALID; + output PIPETX00ELECIDLE; + output [1:0] PIPETX00EQCONTROL; + output [5:0] PIPETX00EQDEEMPH; + output [1:0] PIPETX00POWERDOWN; + output PIPETX00STARTBLOCK; + output [1:0] PIPETX00SYNCHEADER; + output [1:0] PIPETX01CHARISK; + output PIPETX01COMPLIANCE; + output [31:0] PIPETX01DATA; + output PIPETX01DATAVALID; + output PIPETX01ELECIDLE; + output [1:0] PIPETX01EQCONTROL; + output [5:0] PIPETX01EQDEEMPH; + output [1:0] PIPETX01POWERDOWN; + output PIPETX01STARTBLOCK; + output [1:0] PIPETX01SYNCHEADER; + output [1:0] PIPETX02CHARISK; + output PIPETX02COMPLIANCE; + output [31:0] PIPETX02DATA; + output PIPETX02DATAVALID; + output PIPETX02ELECIDLE; + output [1:0] PIPETX02EQCONTROL; + output [5:0] PIPETX02EQDEEMPH; + output [1:0] PIPETX02POWERDOWN; + output PIPETX02STARTBLOCK; + output [1:0] PIPETX02SYNCHEADER; + output [1:0] PIPETX03CHARISK; + output PIPETX03COMPLIANCE; + output [31:0] PIPETX03DATA; + output PIPETX03DATAVALID; + output PIPETX03ELECIDLE; + output [1:0] PIPETX03EQCONTROL; + output [5:0] PIPETX03EQDEEMPH; + output [1:0] PIPETX03POWERDOWN; + output PIPETX03STARTBLOCK; + output [1:0] PIPETX03SYNCHEADER; + output [1:0] PIPETX04CHARISK; + output PIPETX04COMPLIANCE; + output [31:0] PIPETX04DATA; + output PIPETX04DATAVALID; + output PIPETX04ELECIDLE; + output [1:0] PIPETX04EQCONTROL; + output [5:0] PIPETX04EQDEEMPH; + output [1:0] PIPETX04POWERDOWN; + output PIPETX04STARTBLOCK; + output [1:0] PIPETX04SYNCHEADER; + output [1:0] PIPETX05CHARISK; + output PIPETX05COMPLIANCE; + output [31:0] PIPETX05DATA; + output PIPETX05DATAVALID; + output PIPETX05ELECIDLE; + output [1:0] PIPETX05EQCONTROL; + output [5:0] PIPETX05EQDEEMPH; + output [1:0] PIPETX05POWERDOWN; + output PIPETX05STARTBLOCK; + output [1:0] PIPETX05SYNCHEADER; + output [1:0] PIPETX06CHARISK; + output PIPETX06COMPLIANCE; + output [31:0] PIPETX06DATA; + output PIPETX06DATAVALID; + output PIPETX06ELECIDLE; + output [1:0] PIPETX06EQCONTROL; + output [5:0] PIPETX06EQDEEMPH; + output [1:0] PIPETX06POWERDOWN; + output PIPETX06STARTBLOCK; + output [1:0] PIPETX06SYNCHEADER; + output [1:0] PIPETX07CHARISK; + output PIPETX07COMPLIANCE; + output [31:0] PIPETX07DATA; + output PIPETX07DATAVALID; + output PIPETX07ELECIDLE; + output [1:0] PIPETX07EQCONTROL; + output [5:0] PIPETX07EQDEEMPH; + output [1:0] PIPETX07POWERDOWN; + output PIPETX07STARTBLOCK; + output [1:0] PIPETX07SYNCHEADER; + output [1:0] PIPETX08CHARISK; + output PIPETX08COMPLIANCE; + output [31:0] PIPETX08DATA; + output PIPETX08DATAVALID; + output PIPETX08ELECIDLE; + output [1:0] PIPETX08EQCONTROL; + output [5:0] PIPETX08EQDEEMPH; + output [1:0] PIPETX08POWERDOWN; + output PIPETX08STARTBLOCK; + output [1:0] PIPETX08SYNCHEADER; + output [1:0] PIPETX09CHARISK; + output PIPETX09COMPLIANCE; + output [31:0] PIPETX09DATA; + output PIPETX09DATAVALID; + output PIPETX09ELECIDLE; + output [1:0] PIPETX09EQCONTROL; + output [5:0] PIPETX09EQDEEMPH; + output [1:0] PIPETX09POWERDOWN; + output PIPETX09STARTBLOCK; + output [1:0] PIPETX09SYNCHEADER; + output [1:0] PIPETX10CHARISK; + output PIPETX10COMPLIANCE; + output [31:0] PIPETX10DATA; + output PIPETX10DATAVALID; + output PIPETX10ELECIDLE; + output [1:0] PIPETX10EQCONTROL; + output [5:0] PIPETX10EQDEEMPH; + output [1:0] PIPETX10POWERDOWN; + output PIPETX10STARTBLOCK; + output [1:0] PIPETX10SYNCHEADER; + output [1:0] PIPETX11CHARISK; + output PIPETX11COMPLIANCE; + output [31:0] PIPETX11DATA; + output PIPETX11DATAVALID; + output PIPETX11ELECIDLE; + output [1:0] PIPETX11EQCONTROL; + output [5:0] PIPETX11EQDEEMPH; + output [1:0] PIPETX11POWERDOWN; + output PIPETX11STARTBLOCK; + output [1:0] PIPETX11SYNCHEADER; + output [1:0] PIPETX12CHARISK; + output PIPETX12COMPLIANCE; + output [31:0] PIPETX12DATA; + output PIPETX12DATAVALID; + output PIPETX12ELECIDLE; + output [1:0] PIPETX12EQCONTROL; + output [5:0] PIPETX12EQDEEMPH; + output [1:0] PIPETX12POWERDOWN; + output PIPETX12STARTBLOCK; + output [1:0] PIPETX12SYNCHEADER; + output [1:0] PIPETX13CHARISK; + output PIPETX13COMPLIANCE; + output [31:0] PIPETX13DATA; + output PIPETX13DATAVALID; + output PIPETX13ELECIDLE; + output [1:0] PIPETX13EQCONTROL; + output [5:0] PIPETX13EQDEEMPH; + output [1:0] PIPETX13POWERDOWN; + output PIPETX13STARTBLOCK; + output [1:0] PIPETX13SYNCHEADER; + output [1:0] PIPETX14CHARISK; + output PIPETX14COMPLIANCE; + output [31:0] PIPETX14DATA; + output PIPETX14DATAVALID; + output PIPETX14ELECIDLE; + output [1:0] PIPETX14EQCONTROL; + output [5:0] PIPETX14EQDEEMPH; + output [1:0] PIPETX14POWERDOWN; + output PIPETX14STARTBLOCK; + output [1:0] PIPETX14SYNCHEADER; + output [1:0] PIPETX15CHARISK; + output PIPETX15COMPLIANCE; + output [31:0] PIPETX15DATA; + output PIPETX15DATAVALID; + output PIPETX15ELECIDLE; + output [1:0] PIPETX15EQCONTROL; + output [5:0] PIPETX15EQDEEMPH; + output [1:0] PIPETX15POWERDOWN; + output PIPETX15STARTBLOCK; + output [1:0] PIPETX15SYNCHEADER; + output PIPETXDEEMPH; + output [2:0] PIPETXMARGIN; + output [1:0] PIPETXRATE; + output PIPETXRCVRDET; + output PIPETXRESET; + output PIPETXSWING; + output PLEQINPROGRESS; + output [1:0] PLEQPHASE; + output PLGEN34EQMISMATCH; + output [3:0] SAXISCCTREADY; + output [3:0] SAXISRQTREADY; + output [23:0] USERSPAREOUT; + input [7:0] AXIUSERIN; + input CCIXOPTIMIZEDTLPTXANDRXENABLE; + input CCIXRXCORRECTABLEERRORDETECTED; + input CCIXRXFIFOOVERFLOW; + input CCIXRXTLPFORWARDED0; + input CCIXRXTLPFORWARDED1; + input [5:0] CCIXRXTLPFORWARDEDLENGTH0; + input [5:0] CCIXRXTLPFORWARDEDLENGTH1; + input CCIXRXUNCORRECTABLEERRORDETECTED; + input CFGCONFIGSPACEENABLE; + input [15:0] CFGDEVIDPF0; + input [15:0] CFGDEVIDPF1; + input [15:0] CFGDEVIDPF2; + input [15:0] CFGDEVIDPF3; + input [7:0] CFGDSBUSNUMBER; + input [4:0] CFGDSDEVICENUMBER; + input [2:0] CFGDSFUNCTIONNUMBER; + input [63:0] CFGDSN; + input [7:0] CFGDSPORTNUMBER; + input CFGERRCORIN; + input CFGERRUNCORIN; + input [31:0] CFGEXTREADDATA; + input CFGEXTREADDATAVALID; + input [2:0] CFGFCSEL; + input CFGFCVCSEL; + input [3:0] CFGFLRDONE; + input CFGHOTRESETIN; + input [3:0] CFGINTERRUPTINT; + input [2:0] CFGINTERRUPTMSIATTR; + input [7:0] CFGINTERRUPTMSIFUNCTIONNUMBER; + input [31:0] CFGINTERRUPTMSIINT; + input [31:0] CFGINTERRUPTMSIPENDINGSTATUS; + input CFGINTERRUPTMSIPENDINGSTATUSDATAENABLE; + input [1:0] CFGINTERRUPTMSIPENDINGSTATUSFUNCTIONNUM; + input [1:0] CFGINTERRUPTMSISELECT; + input CFGINTERRUPTMSITPHPRESENT; + input [7:0] CFGINTERRUPTMSITPHSTTAG; + input [1:0] CFGINTERRUPTMSITPHTYPE; + input [63:0] CFGINTERRUPTMSIXADDRESS; + input [31:0] CFGINTERRUPTMSIXDATA; + input CFGINTERRUPTMSIXINT; + input [1:0] CFGINTERRUPTMSIXVECPENDING; + input [3:0] CFGINTERRUPTPENDING; + input CFGLINKTRAININGENABLE; + input [9:0] CFGMGMTADDR; + input [3:0] CFGMGMTBYTEENABLE; + input CFGMGMTDEBUGACCESS; + input [7:0] CFGMGMTFUNCTIONNUMBER; + input CFGMGMTREAD; + input CFGMGMTWRITE; + input [31:0] CFGMGMTWRITEDATA; + input CFGMSGTRANSMIT; + input [31:0] CFGMSGTRANSMITDATA; + input [2:0] CFGMSGTRANSMITTYPE; + input [35:0] CFGMSIXRAMREADDATA; + input CFGPMASPML1ENTRYREJECT; + input CFGPMASPMTXL0SENTRYDISABLE; + input CFGPOWERSTATECHANGEACK; + input CFGREQPMTRANSITIONL23READY; + input [7:0] CFGREVIDPF0; + input [7:0] CFGREVIDPF1; + input [7:0] CFGREVIDPF2; + input [7:0] CFGREVIDPF3; + input [15:0] CFGSUBSYSIDPF0; + input [15:0] CFGSUBSYSIDPF1; + input [15:0] CFGSUBSYSIDPF2; + input [15:0] CFGSUBSYSIDPF3; + input [15:0] CFGSUBSYSVENDID; + input [35:0] CFGTPHRAMREADDATA; + input [15:0] CFGVENDID; + input CFGVFFLRDONE; + input [7:0] CFGVFFLRFUNCNUM; + input CONFMCAPREQUESTBYCONF; + input [31:0] CONFREQDATA; + input [3:0] CONFREQREGNUM; + input [1:0] CONFREQTYPE; + input CONFREQVALID; + input CORECLK; + input CORECLKCCIX; + input CORECLKMIREPLAYRAM0; + input CORECLKMIREPLAYRAM1; + input CORECLKMIRXCOMPLETIONRAM0; + input CORECLKMIRXCOMPLETIONRAM1; + input CORECLKMIRXPOSTEDREQUESTRAM0; + input CORECLKMIRXPOSTEDREQUESTRAM1; + input [5:0] DBGSEL0; + input [5:0] DBGSEL1; + input [9:0] DRPADDR; + input DRPCLK; + input [15:0] DRPDI; + input DRPEN; + input DRPWE; + input [21:0] MAXISCQTREADY; + input [21:0] MAXISRCTREADY; + input MCAPCLK; + input MCAPPERST0B; + input MCAPPERST1B; + input MGMTRESETN; + input MGMTSTICKYRESETN; + input [5:0] MIREPLAYRAMERRCOR; + input [5:0] MIREPLAYRAMERRUNCOR; + input [127:0] MIREPLAYRAMREADDATA0; + input [127:0] MIREPLAYRAMREADDATA1; + input [11:0] MIRXCOMPLETIONRAMERRCOR; + input [11:0] MIRXCOMPLETIONRAMERRUNCOR; + input [143:0] MIRXCOMPLETIONRAMREADDATA0; + input [143:0] MIRXCOMPLETIONRAMREADDATA1; + input [5:0] MIRXPOSTEDREQUESTRAMERRCOR; + input [5:0] MIRXPOSTEDREQUESTRAMERRUNCOR; + input [143:0] MIRXPOSTEDREQUESTRAMREADDATA0; + input [143:0] MIRXPOSTEDREQUESTRAMREADDATA1; + input [1:0] PCIECOMPLDELIVERED; + input [7:0] PCIECOMPLDELIVEREDTAG0; + input [7:0] PCIECOMPLDELIVEREDTAG1; + input [1:0] PCIECQNPREQ; + input PCIECQNPUSERCREDITRCVD; + input PCIECQPIPELINEEMPTY; + input PCIEPOSTEDREQDELIVERED; + input PIPECLK; + input PIPECLKEN; + input [5:0] PIPEEQFS; + input [5:0] PIPEEQLF; + input PIPERESETN; + input [1:0] PIPERX00CHARISK; + input [31:0] PIPERX00DATA; + input PIPERX00DATAVALID; + input PIPERX00ELECIDLE; + input PIPERX00EQDONE; + input PIPERX00EQLPADAPTDONE; + input PIPERX00EQLPLFFSSEL; + input [17:0] PIPERX00EQLPNEWTXCOEFFORPRESET; + input PIPERX00PHYSTATUS; + input [1:0] PIPERX00STARTBLOCK; + input [2:0] PIPERX00STATUS; + input [1:0] PIPERX00SYNCHEADER; + input PIPERX00VALID; + input [1:0] PIPERX01CHARISK; + input [31:0] PIPERX01DATA; + input PIPERX01DATAVALID; + input PIPERX01ELECIDLE; + input PIPERX01EQDONE; + input PIPERX01EQLPADAPTDONE; + input PIPERX01EQLPLFFSSEL; + input [17:0] PIPERX01EQLPNEWTXCOEFFORPRESET; + input PIPERX01PHYSTATUS; + input [1:0] PIPERX01STARTBLOCK; + input [2:0] PIPERX01STATUS; + input [1:0] PIPERX01SYNCHEADER; + input PIPERX01VALID; + input [1:0] PIPERX02CHARISK; + input [31:0] PIPERX02DATA; + input PIPERX02DATAVALID; + input PIPERX02ELECIDLE; + input PIPERX02EQDONE; + input PIPERX02EQLPADAPTDONE; + input PIPERX02EQLPLFFSSEL; + input [17:0] PIPERX02EQLPNEWTXCOEFFORPRESET; + input PIPERX02PHYSTATUS; + input [1:0] PIPERX02STARTBLOCK; + input [2:0] PIPERX02STATUS; + input [1:0] PIPERX02SYNCHEADER; + input PIPERX02VALID; + input [1:0] PIPERX03CHARISK; + input [31:0] PIPERX03DATA; + input PIPERX03DATAVALID; + input PIPERX03ELECIDLE; + input PIPERX03EQDONE; + input PIPERX03EQLPADAPTDONE; + input PIPERX03EQLPLFFSSEL; + input [17:0] PIPERX03EQLPNEWTXCOEFFORPRESET; + input PIPERX03PHYSTATUS; + input [1:0] PIPERX03STARTBLOCK; + input [2:0] PIPERX03STATUS; + input [1:0] PIPERX03SYNCHEADER; + input PIPERX03VALID; + input [1:0] PIPERX04CHARISK; + input [31:0] PIPERX04DATA; + input PIPERX04DATAVALID; + input PIPERX04ELECIDLE; + input PIPERX04EQDONE; + input PIPERX04EQLPADAPTDONE; + input PIPERX04EQLPLFFSSEL; + input [17:0] PIPERX04EQLPNEWTXCOEFFORPRESET; + input PIPERX04PHYSTATUS; + input [1:0] PIPERX04STARTBLOCK; + input [2:0] PIPERX04STATUS; + input [1:0] PIPERX04SYNCHEADER; + input PIPERX04VALID; + input [1:0] PIPERX05CHARISK; + input [31:0] PIPERX05DATA; + input PIPERX05DATAVALID; + input PIPERX05ELECIDLE; + input PIPERX05EQDONE; + input PIPERX05EQLPADAPTDONE; + input PIPERX05EQLPLFFSSEL; + input [17:0] PIPERX05EQLPNEWTXCOEFFORPRESET; + input PIPERX05PHYSTATUS; + input [1:0] PIPERX05STARTBLOCK; + input [2:0] PIPERX05STATUS; + input [1:0] PIPERX05SYNCHEADER; + input PIPERX05VALID; + input [1:0] PIPERX06CHARISK; + input [31:0] PIPERX06DATA; + input PIPERX06DATAVALID; + input PIPERX06ELECIDLE; + input PIPERX06EQDONE; + input PIPERX06EQLPADAPTDONE; + input PIPERX06EQLPLFFSSEL; + input [17:0] PIPERX06EQLPNEWTXCOEFFORPRESET; + input PIPERX06PHYSTATUS; + input [1:0] PIPERX06STARTBLOCK; + input [2:0] PIPERX06STATUS; + input [1:0] PIPERX06SYNCHEADER; + input PIPERX06VALID; + input [1:0] PIPERX07CHARISK; + input [31:0] PIPERX07DATA; + input PIPERX07DATAVALID; + input PIPERX07ELECIDLE; + input PIPERX07EQDONE; + input PIPERX07EQLPADAPTDONE; + input PIPERX07EQLPLFFSSEL; + input [17:0] PIPERX07EQLPNEWTXCOEFFORPRESET; + input PIPERX07PHYSTATUS; + input [1:0] PIPERX07STARTBLOCK; + input [2:0] PIPERX07STATUS; + input [1:0] PIPERX07SYNCHEADER; + input PIPERX07VALID; + input [1:0] PIPERX08CHARISK; + input [31:0] PIPERX08DATA; + input PIPERX08DATAVALID; + input PIPERX08ELECIDLE; + input PIPERX08EQDONE; + input PIPERX08EQLPADAPTDONE; + input PIPERX08EQLPLFFSSEL; + input [17:0] PIPERX08EQLPNEWTXCOEFFORPRESET; + input PIPERX08PHYSTATUS; + input [1:0] PIPERX08STARTBLOCK; + input [2:0] PIPERX08STATUS; + input [1:0] PIPERX08SYNCHEADER; + input PIPERX08VALID; + input [1:0] PIPERX09CHARISK; + input [31:0] PIPERX09DATA; + input PIPERX09DATAVALID; + input PIPERX09ELECIDLE; + input PIPERX09EQDONE; + input PIPERX09EQLPADAPTDONE; + input PIPERX09EQLPLFFSSEL; + input [17:0] PIPERX09EQLPNEWTXCOEFFORPRESET; + input PIPERX09PHYSTATUS; + input [1:0] PIPERX09STARTBLOCK; + input [2:0] PIPERX09STATUS; + input [1:0] PIPERX09SYNCHEADER; + input PIPERX09VALID; + input [1:0] PIPERX10CHARISK; + input [31:0] PIPERX10DATA; + input PIPERX10DATAVALID; + input PIPERX10ELECIDLE; + input PIPERX10EQDONE; + input PIPERX10EQLPADAPTDONE; + input PIPERX10EQLPLFFSSEL; + input [17:0] PIPERX10EQLPNEWTXCOEFFORPRESET; + input PIPERX10PHYSTATUS; + input [1:0] PIPERX10STARTBLOCK; + input [2:0] PIPERX10STATUS; + input [1:0] PIPERX10SYNCHEADER; + input PIPERX10VALID; + input [1:0] PIPERX11CHARISK; + input [31:0] PIPERX11DATA; + input PIPERX11DATAVALID; + input PIPERX11ELECIDLE; + input PIPERX11EQDONE; + input PIPERX11EQLPADAPTDONE; + input PIPERX11EQLPLFFSSEL; + input [17:0] PIPERX11EQLPNEWTXCOEFFORPRESET; + input PIPERX11PHYSTATUS; + input [1:0] PIPERX11STARTBLOCK; + input [2:0] PIPERX11STATUS; + input [1:0] PIPERX11SYNCHEADER; + input PIPERX11VALID; + input [1:0] PIPERX12CHARISK; + input [31:0] PIPERX12DATA; + input PIPERX12DATAVALID; + input PIPERX12ELECIDLE; + input PIPERX12EQDONE; + input PIPERX12EQLPADAPTDONE; + input PIPERX12EQLPLFFSSEL; + input [17:0] PIPERX12EQLPNEWTXCOEFFORPRESET; + input PIPERX12PHYSTATUS; + input [1:0] PIPERX12STARTBLOCK; + input [2:0] PIPERX12STATUS; + input [1:0] PIPERX12SYNCHEADER; + input PIPERX12VALID; + input [1:0] PIPERX13CHARISK; + input [31:0] PIPERX13DATA; + input PIPERX13DATAVALID; + input PIPERX13ELECIDLE; + input PIPERX13EQDONE; + input PIPERX13EQLPADAPTDONE; + input PIPERX13EQLPLFFSSEL; + input [17:0] PIPERX13EQLPNEWTXCOEFFORPRESET; + input PIPERX13PHYSTATUS; + input [1:0] PIPERX13STARTBLOCK; + input [2:0] PIPERX13STATUS; + input [1:0] PIPERX13SYNCHEADER; + input PIPERX13VALID; + input [1:0] PIPERX14CHARISK; + input [31:0] PIPERX14DATA; + input PIPERX14DATAVALID; + input PIPERX14ELECIDLE; + input PIPERX14EQDONE; + input PIPERX14EQLPADAPTDONE; + input PIPERX14EQLPLFFSSEL; + input [17:0] PIPERX14EQLPNEWTXCOEFFORPRESET; + input PIPERX14PHYSTATUS; + input [1:0] PIPERX14STARTBLOCK; + input [2:0] PIPERX14STATUS; + input [1:0] PIPERX14SYNCHEADER; + input PIPERX14VALID; + input [1:0] PIPERX15CHARISK; + input [31:0] PIPERX15DATA; + input PIPERX15DATAVALID; + input PIPERX15ELECIDLE; + input PIPERX15EQDONE; + input PIPERX15EQLPADAPTDONE; + input PIPERX15EQLPLFFSSEL; + input [17:0] PIPERX15EQLPNEWTXCOEFFORPRESET; + input PIPERX15PHYSTATUS; + input [1:0] PIPERX15STARTBLOCK; + input [2:0] PIPERX15STATUS; + input [1:0] PIPERX15SYNCHEADER; + input PIPERX15VALID; + input [17:0] PIPETX00EQCOEFF; + input PIPETX00EQDONE; + input [17:0] PIPETX01EQCOEFF; + input PIPETX01EQDONE; + input [17:0] PIPETX02EQCOEFF; + input PIPETX02EQDONE; + input [17:0] PIPETX03EQCOEFF; + input PIPETX03EQDONE; + input [17:0] PIPETX04EQCOEFF; + input PIPETX04EQDONE; + input [17:0] PIPETX05EQCOEFF; + input PIPETX05EQDONE; + input [17:0] PIPETX06EQCOEFF; + input PIPETX06EQDONE; + input [17:0] PIPETX07EQCOEFF; + input PIPETX07EQDONE; + input [17:0] PIPETX08EQCOEFF; + input PIPETX08EQDONE; + input [17:0] PIPETX09EQCOEFF; + input PIPETX09EQDONE; + input [17:0] PIPETX10EQCOEFF; + input PIPETX10EQDONE; + input [17:0] PIPETX11EQCOEFF; + input PIPETX11EQDONE; + input [17:0] PIPETX12EQCOEFF; + input PIPETX12EQDONE; + input [17:0] PIPETX13EQCOEFF; + input PIPETX13EQDONE; + input [17:0] PIPETX14EQCOEFF; + input PIPETX14EQDONE; + input [17:0] PIPETX15EQCOEFF; + input PIPETX15EQDONE; + input PLEQRESETEIEOSCOUNT; + input PLGEN2UPSTREAMPREFERDEEMPH; + input PLGEN34REDOEQSPEED; + input PLGEN34REDOEQUALIZATION; + input RESETN; + input [255:0] SAXISCCIXTXTDATA; + input [45:0] SAXISCCIXTXTUSER; + input SAXISCCIXTXTVALID; + input [255:0] SAXISCCTDATA; + input [7:0] SAXISCCTKEEP; + input SAXISCCTLAST; + input [32:0] SAXISCCTUSER; + input SAXISCCTVALID; + input [255:0] SAXISRQTDATA; + input [7:0] SAXISRQTKEEP; + input SAXISRQTLAST; + input [61:0] SAXISRQTUSER; + input SAXISRQTVALID; + input USERCLK; + input USERCLK2; + input USERCLKEN; + input [31:0] USERSPAREIN; +endmodule + +module EMAC (...); + parameter EMAC0_MODE = "RGMII"; + parameter EMAC1_MODE = "RGMII"; + output DCRHOSTDONEIR; + output EMAC0CLIENTANINTERRUPT; + output EMAC0CLIENTRXBADFRAME; + output EMAC0CLIENTRXCLIENTCLKOUT; + output EMAC0CLIENTRXDVLD; + output EMAC0CLIENTRXDVLDMSW; + output EMAC0CLIENTRXDVREG6; + output EMAC0CLIENTRXFRAMEDROP; + output EMAC0CLIENTRXGOODFRAME; + output EMAC0CLIENTRXSTATSBYTEVLD; + output EMAC0CLIENTRXSTATSVLD; + output EMAC0CLIENTTXACK; + output EMAC0CLIENTTXCLIENTCLKOUT; + output EMAC0CLIENTTXCOLLISION; + output EMAC0CLIENTTXGMIIMIICLKOUT; + output EMAC0CLIENTTXRETRANSMIT; + output EMAC0CLIENTTXSTATS; + output EMAC0CLIENTTXSTATSBYTEVLD; + output EMAC0CLIENTTXSTATSVLD; + output EMAC0PHYENCOMMAALIGN; + output EMAC0PHYLOOPBACKMSB; + output EMAC0PHYMCLKOUT; + output EMAC0PHYMDOUT; + output EMAC0PHYMDTRI; + output EMAC0PHYMGTRXRESET; + output EMAC0PHYMGTTXRESET; + output EMAC0PHYPOWERDOWN; + output EMAC0PHYSYNCACQSTATUS; + output EMAC0PHYTXCHARDISPMODE; + output EMAC0PHYTXCHARDISPVAL; + output EMAC0PHYTXCHARISK; + output EMAC0PHYTXCLK; + output EMAC0PHYTXEN; + output EMAC0PHYTXER; + output EMAC1CLIENTANINTERRUPT; + output EMAC1CLIENTRXBADFRAME; + output EMAC1CLIENTRXCLIENTCLKOUT; + output EMAC1CLIENTRXDVLD; + output EMAC1CLIENTRXDVLDMSW; + output EMAC1CLIENTRXDVREG6; + output EMAC1CLIENTRXFRAMEDROP; + output EMAC1CLIENTRXGOODFRAME; + output EMAC1CLIENTRXSTATSBYTEVLD; + output EMAC1CLIENTRXSTATSVLD; + output EMAC1CLIENTTXACK; + output EMAC1CLIENTTXCLIENTCLKOUT; + output EMAC1CLIENTTXCOLLISION; + output EMAC1CLIENTTXGMIIMIICLKOUT; + output EMAC1CLIENTTXRETRANSMIT; + output EMAC1CLIENTTXSTATS; + output EMAC1CLIENTTXSTATSBYTEVLD; + output EMAC1CLIENTTXSTATSVLD; + output EMAC1PHYENCOMMAALIGN; + output EMAC1PHYLOOPBACKMSB; + output EMAC1PHYMCLKOUT; + output EMAC1PHYMDOUT; + output EMAC1PHYMDTRI; + output EMAC1PHYMGTRXRESET; + output EMAC1PHYMGTTXRESET; + output EMAC1PHYPOWERDOWN; + output EMAC1PHYSYNCACQSTATUS; + output EMAC1PHYTXCHARDISPMODE; + output EMAC1PHYTXCHARDISPVAL; + output EMAC1PHYTXCHARISK; + output EMAC1PHYTXCLK; + output EMAC1PHYTXEN; + output EMAC1PHYTXER; + output EMACDCRACK; + output HOSTMIIMRDY; + output [0:31] EMACDCRDBUS; + output [15:0] EMAC0CLIENTRXD; + output [15:0] EMAC1CLIENTRXD; + output [31:0] HOSTRDDATA; + output [6:0] EMAC0CLIENTRXSTATS; + output [6:0] EMAC1CLIENTRXSTATS; + output [7:0] EMAC0PHYTXD; + output [7:0] EMAC1PHYTXD; + input CLIENTEMAC0DCMLOCKED; + input CLIENTEMAC0PAUSEREQ; + input CLIENTEMAC0RXCLIENTCLKIN; + input CLIENTEMAC0TXCLIENTCLKIN; + input CLIENTEMAC0TXDVLD; + input CLIENTEMAC0TXDVLDMSW; + input CLIENTEMAC0TXFIRSTBYTE; + input CLIENTEMAC0TXGMIIMIICLKIN; + input CLIENTEMAC0TXUNDERRUN; + input CLIENTEMAC1DCMLOCKED; + input CLIENTEMAC1PAUSEREQ; + input CLIENTEMAC1RXCLIENTCLKIN; + input CLIENTEMAC1TXCLIENTCLKIN; + input CLIENTEMAC1TXDVLD; + input CLIENTEMAC1TXDVLDMSW; + input CLIENTEMAC1TXFIRSTBYTE; + input CLIENTEMAC1TXGMIIMIICLKIN; + input CLIENTEMAC1TXUNDERRUN; + input DCREMACCLK; + input DCREMACENABLE; + input DCREMACREAD; + input DCREMACWRITE; + input HOSTCLK; + input HOSTEMAC1SEL; + input HOSTMIIMSEL; + input HOSTREQ; + input PHYEMAC0COL; + input PHYEMAC0CRS; + input PHYEMAC0GTXCLK; + input PHYEMAC0MCLKIN; + input PHYEMAC0MDIN; + input PHYEMAC0MIITXCLK; + input PHYEMAC0RXBUFERR; + input PHYEMAC0RXCHARISCOMMA; + input PHYEMAC0RXCHARISK; + input PHYEMAC0RXCHECKINGCRC; + input PHYEMAC0RXCLK; + input PHYEMAC0RXCOMMADET; + input PHYEMAC0RXDISPERR; + input PHYEMAC0RXDV; + input PHYEMAC0RXER; + input PHYEMAC0RXNOTINTABLE; + input PHYEMAC0RXRUNDISP; + input PHYEMAC0SIGNALDET; + input PHYEMAC0TXBUFERR; + input PHYEMAC1COL; + input PHYEMAC1CRS; + input PHYEMAC1GTXCLK; + input PHYEMAC1MCLKIN; + input PHYEMAC1MDIN; + input PHYEMAC1MIITXCLK; + input PHYEMAC1RXBUFERR; + input PHYEMAC1RXCHARISCOMMA; + input PHYEMAC1RXCHARISK; + input PHYEMAC1RXCHECKINGCRC; + input PHYEMAC1RXCLK; + input PHYEMAC1RXCOMMADET; + input PHYEMAC1RXDISPERR; + input PHYEMAC1RXDV; + input PHYEMAC1RXER; + input PHYEMAC1RXNOTINTABLE; + input PHYEMAC1RXRUNDISP; + input PHYEMAC1SIGNALDET; + input PHYEMAC1TXBUFERR; + input RESET; + input [0:31] DCREMACDBUS; + input [15:0] CLIENTEMAC0PAUSEVAL; + input [15:0] CLIENTEMAC0TXD; + input [15:0] CLIENTEMAC1PAUSEVAL; + input [15:0] CLIENTEMAC1TXD; + input [1:0] HOSTOPCODE; + input [1:0] PHYEMAC0RXBUFSTATUS; + input [1:0] PHYEMAC0RXLOSSOFSYNC; + input [1:0] PHYEMAC1RXBUFSTATUS; + input [1:0] PHYEMAC1RXLOSSOFSYNC; + input [2:0] PHYEMAC0RXCLKCORCNT; + input [2:0] PHYEMAC1RXCLKCORCNT; + input [31:0] HOSTWRDATA; + input [47:0] TIEEMAC0UNICASTADDR; + input [47:0] TIEEMAC1UNICASTADDR; + input [4:0] PHYEMAC0PHYAD; + input [4:0] PHYEMAC1PHYAD; + input [79:0] TIEEMAC0CONFIGVEC; + input [79:0] TIEEMAC1CONFIGVEC; + input [7:0] CLIENTEMAC0TXIFGDELAY; + input [7:0] CLIENTEMAC1TXIFGDELAY; + input [7:0] PHYEMAC0RXD; + input [7:0] PHYEMAC1RXD; + input [8:9] DCREMACABUS; + input [9:0] HOSTADDR; +endmodule + +module TEMAC (...); + parameter EMAC0_1000BASEX_ENABLE = "FALSE"; + parameter EMAC0_ADDRFILTER_ENABLE = "FALSE"; + parameter EMAC0_BYTEPHY = "FALSE"; + parameter EMAC0_CONFIGVEC_79 = "FALSE"; + parameter EMAC0_GTLOOPBACK = "FALSE"; + parameter EMAC0_HOST_ENABLE = "FALSE"; + parameter EMAC0_LTCHECK_DISABLE = "FALSE"; + parameter EMAC0_MDIO_ENABLE = "FALSE"; + parameter EMAC0_PHYINITAUTONEG_ENABLE = "FALSE"; + parameter EMAC0_PHYISOLATE = "FALSE"; + parameter EMAC0_PHYLOOPBACKMSB = "FALSE"; + parameter EMAC0_PHYPOWERDOWN = "FALSE"; + parameter EMAC0_PHYRESET = "FALSE"; + parameter EMAC0_RGMII_ENABLE = "FALSE"; + parameter EMAC0_RX16BITCLIENT_ENABLE = "FALSE"; + parameter EMAC0_RXFLOWCTRL_ENABLE = "FALSE"; + parameter EMAC0_RXHALFDUPLEX = "FALSE"; + parameter EMAC0_RXINBANDFCS_ENABLE = "FALSE"; + parameter EMAC0_RXJUMBOFRAME_ENABLE = "FALSE"; + parameter EMAC0_RXRESET = "FALSE"; + parameter EMAC0_RXVLAN_ENABLE = "FALSE"; + parameter EMAC0_RX_ENABLE = "FALSE"; + parameter EMAC0_SGMII_ENABLE = "FALSE"; + parameter EMAC0_SPEED_LSB = "FALSE"; + parameter EMAC0_SPEED_MSB = "FALSE"; + parameter EMAC0_TX16BITCLIENT_ENABLE = "FALSE"; + parameter EMAC0_TXFLOWCTRL_ENABLE = "FALSE"; + parameter EMAC0_TXHALFDUPLEX = "FALSE"; + parameter EMAC0_TXIFGADJUST_ENABLE = "FALSE"; + parameter EMAC0_TXINBANDFCS_ENABLE = "FALSE"; + parameter EMAC0_TXJUMBOFRAME_ENABLE = "FALSE"; + parameter EMAC0_TXRESET = "FALSE"; + parameter EMAC0_TXVLAN_ENABLE = "FALSE"; + parameter EMAC0_TX_ENABLE = "FALSE"; + parameter EMAC0_UNIDIRECTION_ENABLE = "FALSE"; + parameter EMAC0_USECLKEN = "FALSE"; + parameter EMAC1_1000BASEX_ENABLE = "FALSE"; + parameter EMAC1_ADDRFILTER_ENABLE = "FALSE"; + parameter EMAC1_BYTEPHY = "FALSE"; + parameter EMAC1_CONFIGVEC_79 = "FALSE"; + parameter EMAC1_GTLOOPBACK = "FALSE"; + parameter EMAC1_HOST_ENABLE = "FALSE"; + parameter EMAC1_LTCHECK_DISABLE = "FALSE"; + parameter EMAC1_MDIO_ENABLE = "FALSE"; + parameter EMAC1_PHYINITAUTONEG_ENABLE = "FALSE"; + parameter EMAC1_PHYISOLATE = "FALSE"; + parameter EMAC1_PHYLOOPBACKMSB = "FALSE"; + parameter EMAC1_PHYPOWERDOWN = "FALSE"; + parameter EMAC1_PHYRESET = "FALSE"; + parameter EMAC1_RGMII_ENABLE = "FALSE"; + parameter EMAC1_RX16BITCLIENT_ENABLE = "FALSE"; + parameter EMAC1_RXFLOWCTRL_ENABLE = "FALSE"; + parameter EMAC1_RXHALFDUPLEX = "FALSE"; + parameter EMAC1_RXINBANDFCS_ENABLE = "FALSE"; + parameter EMAC1_RXJUMBOFRAME_ENABLE = "FALSE"; + parameter EMAC1_RXRESET = "FALSE"; + parameter EMAC1_RXVLAN_ENABLE = "FALSE"; + parameter EMAC1_RX_ENABLE = "FALSE"; + parameter EMAC1_SGMII_ENABLE = "FALSE"; + parameter EMAC1_SPEED_LSB = "FALSE"; + parameter EMAC1_SPEED_MSB = "FALSE"; + parameter EMAC1_TX16BITCLIENT_ENABLE = "FALSE"; + parameter EMAC1_TXFLOWCTRL_ENABLE = "FALSE"; + parameter EMAC1_TXHALFDUPLEX = "FALSE"; + parameter EMAC1_TXIFGADJUST_ENABLE = "FALSE"; + parameter EMAC1_TXINBANDFCS_ENABLE = "FALSE"; + parameter EMAC1_TXJUMBOFRAME_ENABLE = "FALSE"; + parameter EMAC1_TXRESET = "FALSE"; + parameter EMAC1_TXVLAN_ENABLE = "FALSE"; + parameter EMAC1_TX_ENABLE = "FALSE"; + parameter EMAC1_UNIDIRECTION_ENABLE = "FALSE"; + parameter EMAC1_USECLKEN = "FALSE"; + parameter [0:7] EMAC0_DCRBASEADDR = 8'h00; + parameter [0:7] EMAC1_DCRBASEADDR = 8'h00; + parameter [47:0] EMAC0_PAUSEADDR = 48'h000000000000; + parameter [47:0] EMAC0_UNICASTADDR = 48'h000000000000; + parameter [47:0] EMAC1_PAUSEADDR = 48'h000000000000; + parameter [47:0] EMAC1_UNICASTADDR = 48'h000000000000; + parameter [8:0] EMAC0_LINKTIMERVAL = 9'h000; + parameter [8:0] EMAC1_LINKTIMERVAL = 9'h000; + output DCRHOSTDONEIR; + output EMAC0CLIENTANINTERRUPT; + output EMAC0CLIENTRXBADFRAME; + output EMAC0CLIENTRXCLIENTCLKOUT; + output EMAC0CLIENTRXDVLD; + output EMAC0CLIENTRXDVLDMSW; + output EMAC0CLIENTRXFRAMEDROP; + output EMAC0CLIENTRXGOODFRAME; + output EMAC0CLIENTRXSTATSBYTEVLD; + output EMAC0CLIENTRXSTATSVLD; + output EMAC0CLIENTTXACK; + output EMAC0CLIENTTXCLIENTCLKOUT; + output EMAC0CLIENTTXCOLLISION; + output EMAC0CLIENTTXRETRANSMIT; + output EMAC0CLIENTTXSTATS; + output EMAC0CLIENTTXSTATSBYTEVLD; + output EMAC0CLIENTTXSTATSVLD; + output EMAC0PHYENCOMMAALIGN; + output EMAC0PHYLOOPBACKMSB; + output EMAC0PHYMCLKOUT; + output EMAC0PHYMDOUT; + output EMAC0PHYMDTRI; + output EMAC0PHYMGTRXRESET; + output EMAC0PHYMGTTXRESET; + output EMAC0PHYPOWERDOWN; + output EMAC0PHYSYNCACQSTATUS; + output EMAC0PHYTXCHARDISPMODE; + output EMAC0PHYTXCHARDISPVAL; + output EMAC0PHYTXCHARISK; + output EMAC0PHYTXCLK; + output EMAC0PHYTXEN; + output EMAC0PHYTXER; + output EMAC0PHYTXGMIIMIICLKOUT; + output EMAC0SPEEDIS10100; + output EMAC1CLIENTANINTERRUPT; + output EMAC1CLIENTRXBADFRAME; + output EMAC1CLIENTRXCLIENTCLKOUT; + output EMAC1CLIENTRXDVLD; + output EMAC1CLIENTRXDVLDMSW; + output EMAC1CLIENTRXFRAMEDROP; + output EMAC1CLIENTRXGOODFRAME; + output EMAC1CLIENTRXSTATSBYTEVLD; + output EMAC1CLIENTRXSTATSVLD; + output EMAC1CLIENTTXACK; + output EMAC1CLIENTTXCLIENTCLKOUT; + output EMAC1CLIENTTXCOLLISION; + output EMAC1CLIENTTXRETRANSMIT; + output EMAC1CLIENTTXSTATS; + output EMAC1CLIENTTXSTATSBYTEVLD; + output EMAC1CLIENTTXSTATSVLD; + output EMAC1PHYENCOMMAALIGN; + output EMAC1PHYLOOPBACKMSB; + output EMAC1PHYMCLKOUT; + output EMAC1PHYMDOUT; + output EMAC1PHYMDTRI; + output EMAC1PHYMGTRXRESET; + output EMAC1PHYMGTTXRESET; + output EMAC1PHYPOWERDOWN; + output EMAC1PHYSYNCACQSTATUS; + output EMAC1PHYTXCHARDISPMODE; + output EMAC1PHYTXCHARDISPVAL; + output EMAC1PHYTXCHARISK; + output EMAC1PHYTXCLK; + output EMAC1PHYTXEN; + output EMAC1PHYTXER; + output EMAC1PHYTXGMIIMIICLKOUT; + output EMAC1SPEEDIS10100; + output EMACDCRACK; + output HOSTMIIMRDY; + output [0:31] EMACDCRDBUS; + output [15:0] EMAC0CLIENTRXD; + output [15:0] EMAC1CLIENTRXD; + output [31:0] HOSTRDDATA; + output [6:0] EMAC0CLIENTRXSTATS; + output [6:0] EMAC1CLIENTRXSTATS; + output [7:0] EMAC0PHYTXD; + output [7:0] EMAC1PHYTXD; + input CLIENTEMAC0DCMLOCKED; + input CLIENTEMAC0PAUSEREQ; + input CLIENTEMAC0RXCLIENTCLKIN; + input CLIENTEMAC0TXCLIENTCLKIN; + input CLIENTEMAC0TXDVLD; + input CLIENTEMAC0TXDVLDMSW; + input CLIENTEMAC0TXFIRSTBYTE; + input CLIENTEMAC0TXUNDERRUN; + input CLIENTEMAC1DCMLOCKED; + input CLIENTEMAC1PAUSEREQ; + input CLIENTEMAC1RXCLIENTCLKIN; + input CLIENTEMAC1TXCLIENTCLKIN; + input CLIENTEMAC1TXDVLD; + input CLIENTEMAC1TXDVLDMSW; + input CLIENTEMAC1TXFIRSTBYTE; + input CLIENTEMAC1TXUNDERRUN; + input DCREMACCLK; + input DCREMACENABLE; + input DCREMACREAD; + input DCREMACWRITE; + input HOSTCLK; + input HOSTEMAC1SEL; + input HOSTMIIMSEL; + input HOSTREQ; + input PHYEMAC0COL; + input PHYEMAC0CRS; + input PHYEMAC0GTXCLK; + input PHYEMAC0MCLKIN; + input PHYEMAC0MDIN; + input PHYEMAC0MIITXCLK; + input PHYEMAC0RXBUFERR; + input PHYEMAC0RXCHARISCOMMA; + input PHYEMAC0RXCHARISK; + input PHYEMAC0RXCHECKINGCRC; + input PHYEMAC0RXCLK; + input PHYEMAC0RXCOMMADET; + input PHYEMAC0RXDISPERR; + input PHYEMAC0RXDV; + input PHYEMAC0RXER; + input PHYEMAC0RXNOTINTABLE; + input PHYEMAC0RXRUNDISP; + input PHYEMAC0SIGNALDET; + input PHYEMAC0TXBUFERR; + input PHYEMAC0TXGMIIMIICLKIN; + input PHYEMAC1COL; + input PHYEMAC1CRS; + input PHYEMAC1GTXCLK; + input PHYEMAC1MCLKIN; + input PHYEMAC1MDIN; + input PHYEMAC1MIITXCLK; + input PHYEMAC1RXBUFERR; + input PHYEMAC1RXCHARISCOMMA; + input PHYEMAC1RXCHARISK; + input PHYEMAC1RXCHECKINGCRC; + input PHYEMAC1RXCLK; + input PHYEMAC1RXCOMMADET; + input PHYEMAC1RXDISPERR; + input PHYEMAC1RXDV; + input PHYEMAC1RXER; + input PHYEMAC1RXNOTINTABLE; + input PHYEMAC1RXRUNDISP; + input PHYEMAC1SIGNALDET; + input PHYEMAC1TXBUFERR; + input PHYEMAC1TXGMIIMIICLKIN; + input RESET; + input [0:31] DCREMACDBUS; + input [0:9] DCREMACABUS; + input [15:0] CLIENTEMAC0PAUSEVAL; + input [15:0] CLIENTEMAC0TXD; + input [15:0] CLIENTEMAC1PAUSEVAL; + input [15:0] CLIENTEMAC1TXD; + input [1:0] HOSTOPCODE; + input [1:0] PHYEMAC0RXBUFSTATUS; + input [1:0] PHYEMAC0RXLOSSOFSYNC; + input [1:0] PHYEMAC1RXBUFSTATUS; + input [1:0] PHYEMAC1RXLOSSOFSYNC; + input [2:0] PHYEMAC0RXCLKCORCNT; + input [2:0] PHYEMAC1RXCLKCORCNT; + input [31:0] HOSTWRDATA; + input [4:0] PHYEMAC0PHYAD; + input [4:0] PHYEMAC1PHYAD; + input [7:0] CLIENTEMAC0TXIFGDELAY; + input [7:0] CLIENTEMAC1TXIFGDELAY; + input [7:0] PHYEMAC0RXD; + input [7:0] PHYEMAC1RXD; + input [9:0] HOSTADDR; +endmodule + +module TEMAC_SINGLE (...); + parameter EMAC_1000BASEX_ENABLE = "FALSE"; + parameter EMAC_ADDRFILTER_ENABLE = "FALSE"; + parameter EMAC_BYTEPHY = "FALSE"; + parameter EMAC_CTRLLENCHECK_DISABLE = "FALSE"; + parameter [0:7] EMAC_DCRBASEADDR = 8'h00; + parameter EMAC_GTLOOPBACK = "FALSE"; + parameter EMAC_HOST_ENABLE = "FALSE"; + parameter [8:0] EMAC_LINKTIMERVAL = 9'h000; + parameter EMAC_LTCHECK_DISABLE = "FALSE"; + parameter EMAC_MDIO_ENABLE = "FALSE"; + parameter EMAC_MDIO_IGNORE_PHYADZERO = "FALSE"; + parameter [47:0] EMAC_PAUSEADDR = 48'h000000000000; + parameter EMAC_PHYINITAUTONEG_ENABLE = "FALSE"; + parameter EMAC_PHYISOLATE = "FALSE"; + parameter EMAC_PHYLOOPBACKMSB = "FALSE"; + parameter EMAC_PHYPOWERDOWN = "FALSE"; + parameter EMAC_PHYRESET = "FALSE"; + parameter EMAC_RGMII_ENABLE = "FALSE"; + parameter EMAC_RX16BITCLIENT_ENABLE = "FALSE"; + parameter EMAC_RXFLOWCTRL_ENABLE = "FALSE"; + parameter EMAC_RXHALFDUPLEX = "FALSE"; + parameter EMAC_RXINBANDFCS_ENABLE = "FALSE"; + parameter EMAC_RXJUMBOFRAME_ENABLE = "FALSE"; + parameter EMAC_RXRESET = "FALSE"; + parameter EMAC_RXVLAN_ENABLE = "FALSE"; + parameter EMAC_RX_ENABLE = "TRUE"; + parameter EMAC_SGMII_ENABLE = "FALSE"; + parameter EMAC_SPEED_LSB = "FALSE"; + parameter EMAC_SPEED_MSB = "FALSE"; + parameter EMAC_TX16BITCLIENT_ENABLE = "FALSE"; + parameter EMAC_TXFLOWCTRL_ENABLE = "FALSE"; + parameter EMAC_TXHALFDUPLEX = "FALSE"; + parameter EMAC_TXIFGADJUST_ENABLE = "FALSE"; + parameter EMAC_TXINBANDFCS_ENABLE = "FALSE"; + parameter EMAC_TXJUMBOFRAME_ENABLE = "FALSE"; + parameter EMAC_TXRESET = "FALSE"; + parameter EMAC_TXVLAN_ENABLE = "FALSE"; + parameter EMAC_TX_ENABLE = "TRUE"; + parameter [47:0] EMAC_UNICASTADDR = 48'h000000000000; + parameter EMAC_UNIDIRECTION_ENABLE = "FALSE"; + parameter EMAC_USECLKEN = "FALSE"; + parameter SIM_VERSION = "1.0"; + output DCRHOSTDONEIR; + output EMACCLIENTANINTERRUPT; + output EMACCLIENTRXBADFRAME; + output EMACCLIENTRXCLIENTCLKOUT; + output EMACCLIENTRXDVLD; + output EMACCLIENTRXDVLDMSW; + output EMACCLIENTRXFRAMEDROP; + output EMACCLIENTRXGOODFRAME; + output EMACCLIENTRXSTATSBYTEVLD; + output EMACCLIENTRXSTATSVLD; + output EMACCLIENTTXACK; + output EMACCLIENTTXCLIENTCLKOUT; + output EMACCLIENTTXCOLLISION; + output EMACCLIENTTXRETRANSMIT; + output EMACCLIENTTXSTATS; + output EMACCLIENTTXSTATSBYTEVLD; + output EMACCLIENTTXSTATSVLD; + output EMACDCRACK; + output EMACPHYENCOMMAALIGN; + output EMACPHYLOOPBACKMSB; + output EMACPHYMCLKOUT; + output EMACPHYMDOUT; + output EMACPHYMDTRI; + output EMACPHYMGTRXRESET; + output EMACPHYMGTTXRESET; + output EMACPHYPOWERDOWN; + output EMACPHYSYNCACQSTATUS; + output EMACPHYTXCHARDISPMODE; + output EMACPHYTXCHARDISPVAL; + output EMACPHYTXCHARISK; + output EMACPHYTXCLK; + output EMACPHYTXEN; + output EMACPHYTXER; + output EMACPHYTXGMIIMIICLKOUT; + output EMACSPEEDIS10100; + output HOSTMIIMRDY; + output [0:31] EMACDCRDBUS; + output [15:0] EMACCLIENTRXD; + output [31:0] HOSTRDDATA; + output [6:0] EMACCLIENTRXSTATS; + output [7:0] EMACPHYTXD; + input CLIENTEMACDCMLOCKED; + input CLIENTEMACPAUSEREQ; + input CLIENTEMACRXCLIENTCLKIN; + input CLIENTEMACTXCLIENTCLKIN; + input CLIENTEMACTXDVLD; + input CLIENTEMACTXDVLDMSW; + input CLIENTEMACTXFIRSTBYTE; + input CLIENTEMACTXUNDERRUN; + input DCREMACCLK; + input DCREMACENABLE; + input DCREMACREAD; + input DCREMACWRITE; + input HOSTCLK; + input HOSTMIIMSEL; + input HOSTREQ; + input PHYEMACCOL; + input PHYEMACCRS; + input PHYEMACGTXCLK; + input PHYEMACMCLKIN; + input PHYEMACMDIN; + input PHYEMACMIITXCLK; + input PHYEMACRXCHARISCOMMA; + input PHYEMACRXCHARISK; + input PHYEMACRXCLK; + input PHYEMACRXDISPERR; + input PHYEMACRXDV; + input PHYEMACRXER; + input PHYEMACRXNOTINTABLE; + input PHYEMACRXRUNDISP; + input PHYEMACSIGNALDET; + input PHYEMACTXBUFERR; + input PHYEMACTXGMIIMIICLKIN; + input RESET; + input [0:31] DCREMACDBUS; + input [0:9] DCREMACABUS; + input [15:0] CLIENTEMACPAUSEVAL; + input [15:0] CLIENTEMACTXD; + input [1:0] HOSTOPCODE; + input [1:0] PHYEMACRXBUFSTATUS; + input [2:0] PHYEMACRXCLKCORCNT; + input [31:0] HOSTWRDATA; + input [4:0] PHYEMACPHYAD; + input [7:0] CLIENTEMACTXIFGDELAY; + input [7:0] PHYEMACRXD; + input [9:0] HOSTADDR; +endmodule + +module CMAC (...); + parameter CTL_PTP_TRANSPCLK_MODE = "FALSE"; + parameter CTL_RX_CHECK_ACK = "TRUE"; + parameter CTL_RX_CHECK_PREAMBLE = "FALSE"; + parameter CTL_RX_CHECK_SFD = "FALSE"; + parameter CTL_RX_DELETE_FCS = "TRUE"; + parameter [15:0] CTL_RX_ETYPE_GCP = 16'h8808; + parameter [15:0] CTL_RX_ETYPE_GPP = 16'h8808; + parameter [15:0] CTL_RX_ETYPE_PCP = 16'h8808; + parameter [15:0] CTL_RX_ETYPE_PPP = 16'h8808; + parameter CTL_RX_FORWARD_CONTROL = "FALSE"; + parameter CTL_RX_IGNORE_FCS = "FALSE"; + parameter [14:0] CTL_RX_MAX_PACKET_LEN = 15'h2580; + parameter [7:0] CTL_RX_MIN_PACKET_LEN = 8'h40; + parameter [15:0] CTL_RX_OPCODE_GPP = 16'h0001; + parameter [15:0] CTL_RX_OPCODE_MAX_GCP = 16'hFFFF; + parameter [15:0] CTL_RX_OPCODE_MAX_PCP = 16'hFFFF; + parameter [15:0] CTL_RX_OPCODE_MIN_GCP = 16'h0000; + parameter [15:0] CTL_RX_OPCODE_MIN_PCP = 16'h0000; + parameter [15:0] CTL_RX_OPCODE_PPP = 16'h0001; + parameter [47:0] CTL_RX_PAUSE_DA_MCAST = 48'h0180C2000001; + parameter [47:0] CTL_RX_PAUSE_DA_UCAST = 48'h000000000000; + parameter [47:0] CTL_RX_PAUSE_SA = 48'h000000000000; + parameter CTL_RX_PROCESS_LFI = "FALSE"; + parameter [15:0] CTL_RX_VL_LENGTH_MINUS1 = 16'h3FFF; + parameter [63:0] CTL_RX_VL_MARKER_ID0 = 64'hC16821003E97DE00; + parameter [63:0] CTL_RX_VL_MARKER_ID1 = 64'h9D718E00628E7100; + parameter [63:0] CTL_RX_VL_MARKER_ID10 = 64'hFD6C990002936600; + parameter [63:0] CTL_RX_VL_MARKER_ID11 = 64'hB9915500466EAA00; + parameter [63:0] CTL_RX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00; + parameter [63:0] CTL_RX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200; + parameter [63:0] CTL_RX_VL_MARKER_ID14 = 64'h83C7CA007C383500; + parameter [63:0] CTL_RX_VL_MARKER_ID15 = 64'h3536CD00CAC93200; + parameter [63:0] CTL_RX_VL_MARKER_ID16 = 64'hC4314C003BCEB300; + parameter [63:0] CTL_RX_VL_MARKER_ID17 = 64'hADD6B70052294800; + parameter [63:0] CTL_RX_VL_MARKER_ID18 = 64'h5F662A00A099D500; + parameter [63:0] CTL_RX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00; + parameter [63:0] CTL_RX_VL_MARKER_ID2 = 64'h594BE800A6B41700; + parameter [63:0] CTL_RX_VL_MARKER_ID3 = 64'h4D957B00B26A8400; + parameter [63:0] CTL_RX_VL_MARKER_ID4 = 64'hF50709000AF8F600; + parameter [63:0] CTL_RX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00; + parameter [63:0] CTL_RX_VL_MARKER_ID6 = 64'h9A4A260065B5D900; + parameter [63:0] CTL_RX_VL_MARKER_ID7 = 64'h7B45660084BA9900; + parameter [63:0] CTL_RX_VL_MARKER_ID8 = 64'hA02476005FDB8900; + parameter [63:0] CTL_RX_VL_MARKER_ID9 = 64'h68C9FB0097360400; + parameter CTL_TEST_MODE_PIN_CHAR = "FALSE"; + parameter [47:0] CTL_TX_DA_GPP = 48'h0180C2000001; + parameter [47:0] CTL_TX_DA_PPP = 48'h0180C2000001; + parameter [15:0] CTL_TX_ETHERTYPE_GPP = 16'h8808; + parameter [15:0] CTL_TX_ETHERTYPE_PPP = 16'h8808; + parameter CTL_TX_FCS_INS_ENABLE = "TRUE"; + parameter CTL_TX_IGNORE_FCS = "FALSE"; + parameter [15:0] CTL_TX_OPCODE_GPP = 16'h0001; + parameter [15:0] CTL_TX_OPCODE_PPP = 16'h0001; + parameter CTL_TX_PTP_1STEP_ENABLE = "FALSE"; + parameter [10:0] CTL_TX_PTP_LATENCY_ADJUST = 11'h2C1; + parameter [47:0] CTL_TX_SA_GPP = 48'h000000000000; + parameter [47:0] CTL_TX_SA_PPP = 48'h000000000000; + parameter [15:0] CTL_TX_VL_LENGTH_MINUS1 = 16'h3FFF; + parameter [63:0] CTL_TX_VL_MARKER_ID0 = 64'hC16821003E97DE00; + parameter [63:0] CTL_TX_VL_MARKER_ID1 = 64'h9D718E00628E7100; + parameter [63:0] CTL_TX_VL_MARKER_ID10 = 64'hFD6C990002936600; + parameter [63:0] CTL_TX_VL_MARKER_ID11 = 64'hB9915500466EAA00; + parameter [63:0] CTL_TX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00; + parameter [63:0] CTL_TX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200; + parameter [63:0] CTL_TX_VL_MARKER_ID14 = 64'h83C7CA007C383500; + parameter [63:0] CTL_TX_VL_MARKER_ID15 = 64'h3536CD00CAC93200; + parameter [63:0] CTL_TX_VL_MARKER_ID16 = 64'hC4314C003BCEB300; + parameter [63:0] CTL_TX_VL_MARKER_ID17 = 64'hADD6B70052294800; + parameter [63:0] CTL_TX_VL_MARKER_ID18 = 64'h5F662A00A099D500; + parameter [63:0] CTL_TX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00; + parameter [63:0] CTL_TX_VL_MARKER_ID2 = 64'h594BE800A6B41700; + parameter [63:0] CTL_TX_VL_MARKER_ID3 = 64'h4D957B00B26A8400; + parameter [63:0] CTL_TX_VL_MARKER_ID4 = 64'hF50709000AF8F600; + parameter [63:0] CTL_TX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00; + parameter [63:0] CTL_TX_VL_MARKER_ID6 = 64'h9A4A260065B5D900; + parameter [63:0] CTL_TX_VL_MARKER_ID7 = 64'h7B45660084BA9900; + parameter [63:0] CTL_TX_VL_MARKER_ID8 = 64'hA02476005FDB8900; + parameter [63:0] CTL_TX_VL_MARKER_ID9 = 64'h68C9FB0097360400; + parameter SIM_VERSION = "2.0"; + parameter TEST_MODE_PIN_CHAR = "FALSE"; + output [15:0] DRP_DO; + output DRP_RDY; + output [127:0] RX_DATAOUT0; + output [127:0] RX_DATAOUT1; + output [127:0] RX_DATAOUT2; + output [127:0] RX_DATAOUT3; + output RX_ENAOUT0; + output RX_ENAOUT1; + output RX_ENAOUT2; + output RX_ENAOUT3; + output RX_EOPOUT0; + output RX_EOPOUT1; + output RX_EOPOUT2; + output RX_EOPOUT3; + output RX_ERROUT0; + output RX_ERROUT1; + output RX_ERROUT2; + output RX_ERROUT3; + output [6:0] RX_LANE_ALIGNER_FILL_0; + output [6:0] RX_LANE_ALIGNER_FILL_1; + output [6:0] RX_LANE_ALIGNER_FILL_10; + output [6:0] RX_LANE_ALIGNER_FILL_11; + output [6:0] RX_LANE_ALIGNER_FILL_12; + output [6:0] RX_LANE_ALIGNER_FILL_13; + output [6:0] RX_LANE_ALIGNER_FILL_14; + output [6:0] RX_LANE_ALIGNER_FILL_15; + output [6:0] RX_LANE_ALIGNER_FILL_16; + output [6:0] RX_LANE_ALIGNER_FILL_17; + output [6:0] RX_LANE_ALIGNER_FILL_18; + output [6:0] RX_LANE_ALIGNER_FILL_19; + output [6:0] RX_LANE_ALIGNER_FILL_2; + output [6:0] RX_LANE_ALIGNER_FILL_3; + output [6:0] RX_LANE_ALIGNER_FILL_4; + output [6:0] RX_LANE_ALIGNER_FILL_5; + output [6:0] RX_LANE_ALIGNER_FILL_6; + output [6:0] RX_LANE_ALIGNER_FILL_7; + output [6:0] RX_LANE_ALIGNER_FILL_8; + output [6:0] RX_LANE_ALIGNER_FILL_9; + output [3:0] RX_MTYOUT0; + output [3:0] RX_MTYOUT1; + output [3:0] RX_MTYOUT2; + output [3:0] RX_MTYOUT3; + output [4:0] RX_PTP_PCSLANE_OUT; + output [79:0] RX_PTP_TSTAMP_OUT; + output RX_SOPOUT0; + output RX_SOPOUT1; + output RX_SOPOUT2; + output RX_SOPOUT3; + output STAT_RX_ALIGNED; + output STAT_RX_ALIGNED_ERR; + output [6:0] STAT_RX_BAD_CODE; + output [3:0] STAT_RX_BAD_FCS; + output STAT_RX_BAD_PREAMBLE; + output STAT_RX_BAD_SFD; + output STAT_RX_BIP_ERR_0; + output STAT_RX_BIP_ERR_1; + output STAT_RX_BIP_ERR_10; + output STAT_RX_BIP_ERR_11; + output STAT_RX_BIP_ERR_12; + output STAT_RX_BIP_ERR_13; + output STAT_RX_BIP_ERR_14; + output STAT_RX_BIP_ERR_15; + output STAT_RX_BIP_ERR_16; + output STAT_RX_BIP_ERR_17; + output STAT_RX_BIP_ERR_18; + output STAT_RX_BIP_ERR_19; + output STAT_RX_BIP_ERR_2; + output STAT_RX_BIP_ERR_3; + output STAT_RX_BIP_ERR_4; + output STAT_RX_BIP_ERR_5; + output STAT_RX_BIP_ERR_6; + output STAT_RX_BIP_ERR_7; + output STAT_RX_BIP_ERR_8; + output STAT_RX_BIP_ERR_9; + output [19:0] STAT_RX_BLOCK_LOCK; + output STAT_RX_BROADCAST; + output [3:0] STAT_RX_FRAGMENT; + output [3:0] STAT_RX_FRAMING_ERR_0; + output [3:0] STAT_RX_FRAMING_ERR_1; + output [3:0] STAT_RX_FRAMING_ERR_10; + output [3:0] STAT_RX_FRAMING_ERR_11; + output [3:0] STAT_RX_FRAMING_ERR_12; + output [3:0] STAT_RX_FRAMING_ERR_13; + output [3:0] STAT_RX_FRAMING_ERR_14; + output [3:0] STAT_RX_FRAMING_ERR_15; + output [3:0] STAT_RX_FRAMING_ERR_16; + output [3:0] STAT_RX_FRAMING_ERR_17; + output [3:0] STAT_RX_FRAMING_ERR_18; + output [3:0] STAT_RX_FRAMING_ERR_19; + output [3:0] STAT_RX_FRAMING_ERR_2; + output [3:0] STAT_RX_FRAMING_ERR_3; + output [3:0] STAT_RX_FRAMING_ERR_4; + output [3:0] STAT_RX_FRAMING_ERR_5; + output [3:0] STAT_RX_FRAMING_ERR_6; + output [3:0] STAT_RX_FRAMING_ERR_7; + output [3:0] STAT_RX_FRAMING_ERR_8; + output [3:0] STAT_RX_FRAMING_ERR_9; + output STAT_RX_FRAMING_ERR_VALID_0; + output STAT_RX_FRAMING_ERR_VALID_1; + output STAT_RX_FRAMING_ERR_VALID_10; + output STAT_RX_FRAMING_ERR_VALID_11; + output STAT_RX_FRAMING_ERR_VALID_12; + output STAT_RX_FRAMING_ERR_VALID_13; + output STAT_RX_FRAMING_ERR_VALID_14; + output STAT_RX_FRAMING_ERR_VALID_15; + output STAT_RX_FRAMING_ERR_VALID_16; + output STAT_RX_FRAMING_ERR_VALID_17; + output STAT_RX_FRAMING_ERR_VALID_18; + output STAT_RX_FRAMING_ERR_VALID_19; + output STAT_RX_FRAMING_ERR_VALID_2; + output STAT_RX_FRAMING_ERR_VALID_3; + output STAT_RX_FRAMING_ERR_VALID_4; + output STAT_RX_FRAMING_ERR_VALID_5; + output STAT_RX_FRAMING_ERR_VALID_6; + output STAT_RX_FRAMING_ERR_VALID_7; + output STAT_RX_FRAMING_ERR_VALID_8; + output STAT_RX_FRAMING_ERR_VALID_9; + output STAT_RX_GOT_SIGNAL_OS; + output STAT_RX_HI_BER; + output STAT_RX_INRANGEERR; + output STAT_RX_INTERNAL_LOCAL_FAULT; + output STAT_RX_JABBER; + output [7:0] STAT_RX_LANE0_VLM_BIP7; + output STAT_RX_LANE0_VLM_BIP7_VALID; + output STAT_RX_LOCAL_FAULT; + output [19:0] STAT_RX_MF_ERR; + output [19:0] STAT_RX_MF_LEN_ERR; + output [19:0] STAT_RX_MF_REPEAT_ERR; + output STAT_RX_MISALIGNED; + output STAT_RX_MULTICAST; + output STAT_RX_OVERSIZE; + output STAT_RX_PACKET_1024_1518_BYTES; + output STAT_RX_PACKET_128_255_BYTES; + output STAT_RX_PACKET_1519_1522_BYTES; + output STAT_RX_PACKET_1523_1548_BYTES; + output STAT_RX_PACKET_1549_2047_BYTES; + output STAT_RX_PACKET_2048_4095_BYTES; + output STAT_RX_PACKET_256_511_BYTES; + output STAT_RX_PACKET_4096_8191_BYTES; + output STAT_RX_PACKET_512_1023_BYTES; + output STAT_RX_PACKET_64_BYTES; + output STAT_RX_PACKET_65_127_BYTES; + output STAT_RX_PACKET_8192_9215_BYTES; + output STAT_RX_PACKET_BAD_FCS; + output STAT_RX_PACKET_LARGE; + output [3:0] STAT_RX_PACKET_SMALL; + output STAT_RX_PAUSE; + output [15:0] STAT_RX_PAUSE_QUANTA0; + output [15:0] STAT_RX_PAUSE_QUANTA1; + output [15:0] STAT_RX_PAUSE_QUANTA2; + output [15:0] STAT_RX_PAUSE_QUANTA3; + output [15:0] STAT_RX_PAUSE_QUANTA4; + output [15:0] STAT_RX_PAUSE_QUANTA5; + output [15:0] STAT_RX_PAUSE_QUANTA6; + output [15:0] STAT_RX_PAUSE_QUANTA7; + output [15:0] STAT_RX_PAUSE_QUANTA8; + output [8:0] STAT_RX_PAUSE_REQ; + output [8:0] STAT_RX_PAUSE_VALID; + output STAT_RX_RECEIVED_LOCAL_FAULT; + output STAT_RX_REMOTE_FAULT; + output STAT_RX_STATUS; + output [3:0] STAT_RX_STOMPED_FCS; + output [19:0] STAT_RX_SYNCED; + output [19:0] STAT_RX_SYNCED_ERR; + output [2:0] STAT_RX_TEST_PATTERN_MISMATCH; + output STAT_RX_TOOLONG; + output [7:0] STAT_RX_TOTAL_BYTES; + output [13:0] STAT_RX_TOTAL_GOOD_BYTES; + output STAT_RX_TOTAL_GOOD_PACKETS; + output [3:0] STAT_RX_TOTAL_PACKETS; + output STAT_RX_TRUNCATED; + output [3:0] STAT_RX_UNDERSIZE; + output STAT_RX_UNICAST; + output STAT_RX_USER_PAUSE; + output STAT_RX_VLAN; + output [19:0] STAT_RX_VL_DEMUXED; + output [4:0] STAT_RX_VL_NUMBER_0; + output [4:0] STAT_RX_VL_NUMBER_1; + output [4:0] STAT_RX_VL_NUMBER_10; + output [4:0] STAT_RX_VL_NUMBER_11; + output [4:0] STAT_RX_VL_NUMBER_12; + output [4:0] STAT_RX_VL_NUMBER_13; + output [4:0] STAT_RX_VL_NUMBER_14; + output [4:0] STAT_RX_VL_NUMBER_15; + output [4:0] STAT_RX_VL_NUMBER_16; + output [4:0] STAT_RX_VL_NUMBER_17; + output [4:0] STAT_RX_VL_NUMBER_18; + output [4:0] STAT_RX_VL_NUMBER_19; + output [4:0] STAT_RX_VL_NUMBER_2; + output [4:0] STAT_RX_VL_NUMBER_3; + output [4:0] STAT_RX_VL_NUMBER_4; + output [4:0] STAT_RX_VL_NUMBER_5; + output [4:0] STAT_RX_VL_NUMBER_6; + output [4:0] STAT_RX_VL_NUMBER_7; + output [4:0] STAT_RX_VL_NUMBER_8; + output [4:0] STAT_RX_VL_NUMBER_9; + output STAT_TX_BAD_FCS; + output STAT_TX_BROADCAST; + output STAT_TX_FRAME_ERROR; + output STAT_TX_LOCAL_FAULT; + output STAT_TX_MULTICAST; + output STAT_TX_PACKET_1024_1518_BYTES; + output STAT_TX_PACKET_128_255_BYTES; + output STAT_TX_PACKET_1519_1522_BYTES; + output STAT_TX_PACKET_1523_1548_BYTES; + output STAT_TX_PACKET_1549_2047_BYTES; + output STAT_TX_PACKET_2048_4095_BYTES; + output STAT_TX_PACKET_256_511_BYTES; + output STAT_TX_PACKET_4096_8191_BYTES; + output STAT_TX_PACKET_512_1023_BYTES; + output STAT_TX_PACKET_64_BYTES; + output STAT_TX_PACKET_65_127_BYTES; + output STAT_TX_PACKET_8192_9215_BYTES; + output STAT_TX_PACKET_LARGE; + output STAT_TX_PACKET_SMALL; + output STAT_TX_PAUSE; + output [8:0] STAT_TX_PAUSE_VALID; + output STAT_TX_PTP_FIFO_READ_ERROR; + output STAT_TX_PTP_FIFO_WRITE_ERROR; + output [6:0] STAT_TX_TOTAL_BYTES; + output [13:0] STAT_TX_TOTAL_GOOD_BYTES; + output STAT_TX_TOTAL_GOOD_PACKETS; + output STAT_TX_TOTAL_PACKETS; + output STAT_TX_UNICAST; + output STAT_TX_USER_PAUSE; + output STAT_TX_VLAN; + output TX_OVFOUT; + output [4:0] TX_PTP_PCSLANE_OUT; + output [79:0] TX_PTP_TSTAMP_OUT; + output [15:0] TX_PTP_TSTAMP_TAG_OUT; + output TX_PTP_TSTAMP_VALID_OUT; + output TX_RDYOUT; + output [15:0] TX_SERDES_ALT_DATA0; + output [15:0] TX_SERDES_ALT_DATA1; + output [15:0] TX_SERDES_ALT_DATA2; + output [15:0] TX_SERDES_ALT_DATA3; + output [63:0] TX_SERDES_DATA0; + output [63:0] TX_SERDES_DATA1; + output [63:0] TX_SERDES_DATA2; + output [63:0] TX_SERDES_DATA3; + output [31:0] TX_SERDES_DATA4; + output [31:0] TX_SERDES_DATA5; + output [31:0] TX_SERDES_DATA6; + output [31:0] TX_SERDES_DATA7; + output [31:0] TX_SERDES_DATA8; + output [31:0] TX_SERDES_DATA9; + output TX_UNFOUT; + input CTL_CAUI4_MODE; + input CTL_RX_CHECK_ETYPE_GCP; + input CTL_RX_CHECK_ETYPE_GPP; + input CTL_RX_CHECK_ETYPE_PCP; + input CTL_RX_CHECK_ETYPE_PPP; + input CTL_RX_CHECK_MCAST_GCP; + input CTL_RX_CHECK_MCAST_GPP; + input CTL_RX_CHECK_MCAST_PCP; + input CTL_RX_CHECK_MCAST_PPP; + input CTL_RX_CHECK_OPCODE_GCP; + input CTL_RX_CHECK_OPCODE_GPP; + input CTL_RX_CHECK_OPCODE_PCP; + input CTL_RX_CHECK_OPCODE_PPP; + input CTL_RX_CHECK_SA_GCP; + input CTL_RX_CHECK_SA_GPP; + input CTL_RX_CHECK_SA_PCP; + input CTL_RX_CHECK_SA_PPP; + input CTL_RX_CHECK_UCAST_GCP; + input CTL_RX_CHECK_UCAST_GPP; + input CTL_RX_CHECK_UCAST_PCP; + input CTL_RX_CHECK_UCAST_PPP; + input CTL_RX_ENABLE; + input CTL_RX_ENABLE_GCP; + input CTL_RX_ENABLE_GPP; + input CTL_RX_ENABLE_PCP; + input CTL_RX_ENABLE_PPP; + input CTL_RX_FORCE_RESYNC; + input [8:0] CTL_RX_PAUSE_ACK; + input [8:0] CTL_RX_PAUSE_ENABLE; + input [79:0] CTL_RX_SYSTEMTIMERIN; + input CTL_RX_TEST_PATTERN; + input CTL_TX_ENABLE; + input CTL_TX_LANE0_VLM_BIP7_OVERRIDE; + input [7:0] CTL_TX_LANE0_VLM_BIP7_OVERRIDE_VALUE; + input [8:0] CTL_TX_PAUSE_ENABLE; + input [15:0] CTL_TX_PAUSE_QUANTA0; + input [15:0] CTL_TX_PAUSE_QUANTA1; + input [15:0] CTL_TX_PAUSE_QUANTA2; + input [15:0] CTL_TX_PAUSE_QUANTA3; + input [15:0] CTL_TX_PAUSE_QUANTA4; + input [15:0] CTL_TX_PAUSE_QUANTA5; + input [15:0] CTL_TX_PAUSE_QUANTA6; + input [15:0] CTL_TX_PAUSE_QUANTA7; + input [15:0] CTL_TX_PAUSE_QUANTA8; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER0; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER1; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER2; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER3; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER4; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER5; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER6; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER7; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER8; + input [8:0] CTL_TX_PAUSE_REQ; + input CTL_TX_PTP_VLANE_ADJUST_MODE; + input CTL_TX_RESEND_PAUSE; + input CTL_TX_SEND_IDLE; + input CTL_TX_SEND_RFI; + input [79:0] CTL_TX_SYSTEMTIMERIN; + input CTL_TX_TEST_PATTERN; + input [9:0] DRP_ADDR; + input DRP_CLK; + input [15:0] DRP_DI; + input DRP_EN; + input DRP_WE; + input RX_CLK; + input RX_RESET; + input [15:0] RX_SERDES_ALT_DATA0; + input [15:0] RX_SERDES_ALT_DATA1; + input [15:0] RX_SERDES_ALT_DATA2; + input [15:0] RX_SERDES_ALT_DATA3; + input [9:0] RX_SERDES_CLK; + input [63:0] RX_SERDES_DATA0; + input [63:0] RX_SERDES_DATA1; + input [63:0] RX_SERDES_DATA2; + input [63:0] RX_SERDES_DATA3; + input [31:0] RX_SERDES_DATA4; + input [31:0] RX_SERDES_DATA5; + input [31:0] RX_SERDES_DATA6; + input [31:0] RX_SERDES_DATA7; + input [31:0] RX_SERDES_DATA8; + input [31:0] RX_SERDES_DATA9; + input [9:0] RX_SERDES_RESET; + input TX_CLK; + input [127:0] TX_DATAIN0; + input [127:0] TX_DATAIN1; + input [127:0] TX_DATAIN2; + input [127:0] TX_DATAIN3; + input TX_ENAIN0; + input TX_ENAIN1; + input TX_ENAIN2; + input TX_ENAIN3; + input TX_EOPIN0; + input TX_EOPIN1; + input TX_EOPIN2; + input TX_EOPIN3; + input TX_ERRIN0; + input TX_ERRIN1; + input TX_ERRIN2; + input TX_ERRIN3; + input [3:0] TX_MTYIN0; + input [3:0] TX_MTYIN1; + input [3:0] TX_MTYIN2; + input [3:0] TX_MTYIN3; + input [1:0] TX_PTP_1588OP_IN; + input [15:0] TX_PTP_CHKSUM_OFFSET_IN; + input [63:0] TX_PTP_RXTSTAMP_IN; + input [15:0] TX_PTP_TAG_FIELD_IN; + input [15:0] TX_PTP_TSTAMP_OFFSET_IN; + input TX_PTP_UPD_CHKSUM_IN; + input TX_RESET; + input TX_SOPIN0; + input TX_SOPIN1; + input TX_SOPIN2; + input TX_SOPIN3; +endmodule + +module CMACE4 (...); + parameter CTL_PTP_TRANSPCLK_MODE = "FALSE"; + parameter CTL_RX_CHECK_ACK = "TRUE"; + parameter CTL_RX_CHECK_PREAMBLE = "FALSE"; + parameter CTL_RX_CHECK_SFD = "FALSE"; + parameter CTL_RX_DELETE_FCS = "TRUE"; + parameter [15:0] CTL_RX_ETYPE_GCP = 16'h8808; + parameter [15:0] CTL_RX_ETYPE_GPP = 16'h8808; + parameter [15:0] CTL_RX_ETYPE_PCP = 16'h8808; + parameter [15:0] CTL_RX_ETYPE_PPP = 16'h8808; + parameter CTL_RX_FORWARD_CONTROL = "FALSE"; + parameter CTL_RX_IGNORE_FCS = "FALSE"; + parameter [14:0] CTL_RX_MAX_PACKET_LEN = 15'h2580; + parameter [7:0] CTL_RX_MIN_PACKET_LEN = 8'h40; + parameter [15:0] CTL_RX_OPCODE_GPP = 16'h0001; + parameter [15:0] CTL_RX_OPCODE_MAX_GCP = 16'hFFFF; + parameter [15:0] CTL_RX_OPCODE_MAX_PCP = 16'hFFFF; + parameter [15:0] CTL_RX_OPCODE_MIN_GCP = 16'h0000; + parameter [15:0] CTL_RX_OPCODE_MIN_PCP = 16'h0000; + parameter [15:0] CTL_RX_OPCODE_PPP = 16'h0001; + parameter [47:0] CTL_RX_PAUSE_DA_MCAST = 48'h0180C2000001; + parameter [47:0] CTL_RX_PAUSE_DA_UCAST = 48'h000000000000; + parameter [47:0] CTL_RX_PAUSE_SA = 48'h000000000000; + parameter CTL_RX_PROCESS_LFI = "FALSE"; + parameter [8:0] CTL_RX_RSFEC_AM_THRESHOLD = 9'h046; + parameter [1:0] CTL_RX_RSFEC_FILL_ADJUST = 2'h0; + parameter [15:0] CTL_RX_VL_LENGTH_MINUS1 = 16'h3FFF; + parameter [63:0] CTL_RX_VL_MARKER_ID0 = 64'hC16821003E97DE00; + parameter [63:0] CTL_RX_VL_MARKER_ID1 = 64'h9D718E00628E7100; + parameter [63:0] CTL_RX_VL_MARKER_ID10 = 64'hFD6C990002936600; + parameter [63:0] CTL_RX_VL_MARKER_ID11 = 64'hB9915500466EAA00; + parameter [63:0] CTL_RX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00; + parameter [63:0] CTL_RX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200; + parameter [63:0] CTL_RX_VL_MARKER_ID14 = 64'h83C7CA007C383500; + parameter [63:0] CTL_RX_VL_MARKER_ID15 = 64'h3536CD00CAC93200; + parameter [63:0] CTL_RX_VL_MARKER_ID16 = 64'hC4314C003BCEB300; + parameter [63:0] CTL_RX_VL_MARKER_ID17 = 64'hADD6B70052294800; + parameter [63:0] CTL_RX_VL_MARKER_ID18 = 64'h5F662A00A099D500; + parameter [63:0] CTL_RX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00; + parameter [63:0] CTL_RX_VL_MARKER_ID2 = 64'h594BE800A6B41700; + parameter [63:0] CTL_RX_VL_MARKER_ID3 = 64'h4D957B00B26A8400; + parameter [63:0] CTL_RX_VL_MARKER_ID4 = 64'hF50709000AF8F600; + parameter [63:0] CTL_RX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00; + parameter [63:0] CTL_RX_VL_MARKER_ID6 = 64'h9A4A260065B5D900; + parameter [63:0] CTL_RX_VL_MARKER_ID7 = 64'h7B45660084BA9900; + parameter [63:0] CTL_RX_VL_MARKER_ID8 = 64'hA02476005FDB8900; + parameter [63:0] CTL_RX_VL_MARKER_ID9 = 64'h68C9FB0097360400; + parameter CTL_TEST_MODE_PIN_CHAR = "FALSE"; + parameter CTL_TX_CUSTOM_PREAMBLE_ENABLE = "FALSE"; + parameter [47:0] CTL_TX_DA_GPP = 48'h0180C2000001; + parameter [47:0] CTL_TX_DA_PPP = 48'h0180C2000001; + parameter [15:0] CTL_TX_ETHERTYPE_GPP = 16'h8808; + parameter [15:0] CTL_TX_ETHERTYPE_PPP = 16'h8808; + parameter CTL_TX_FCS_INS_ENABLE = "TRUE"; + parameter CTL_TX_IGNORE_FCS = "FALSE"; + parameter [3:0] CTL_TX_IPG_VALUE = 4'hC; + parameter [15:0] CTL_TX_OPCODE_GPP = 16'h0001; + parameter [15:0] CTL_TX_OPCODE_PPP = 16'h0001; + parameter CTL_TX_PTP_1STEP_ENABLE = "FALSE"; + parameter [10:0] CTL_TX_PTP_LATENCY_ADJUST = 11'h2C1; + parameter [47:0] CTL_TX_SA_GPP = 48'h000000000000; + parameter [47:0] CTL_TX_SA_PPP = 48'h000000000000; + parameter [15:0] CTL_TX_VL_LENGTH_MINUS1 = 16'h3FFF; + parameter [63:0] CTL_TX_VL_MARKER_ID0 = 64'hC16821003E97DE00; + parameter [63:0] CTL_TX_VL_MARKER_ID1 = 64'h9D718E00628E7100; + parameter [63:0] CTL_TX_VL_MARKER_ID10 = 64'hFD6C990002936600; + parameter [63:0] CTL_TX_VL_MARKER_ID11 = 64'hB9915500466EAA00; + parameter [63:0] CTL_TX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00; + parameter [63:0] CTL_TX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200; + parameter [63:0] CTL_TX_VL_MARKER_ID14 = 64'h83C7CA007C383500; + parameter [63:0] CTL_TX_VL_MARKER_ID15 = 64'h3536CD00CAC93200; + parameter [63:0] CTL_TX_VL_MARKER_ID16 = 64'hC4314C003BCEB300; + parameter [63:0] CTL_TX_VL_MARKER_ID17 = 64'hADD6B70052294800; + parameter [63:0] CTL_TX_VL_MARKER_ID18 = 64'h5F662A00A099D500; + parameter [63:0] CTL_TX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00; + parameter [63:0] CTL_TX_VL_MARKER_ID2 = 64'h594BE800A6B41700; + parameter [63:0] CTL_TX_VL_MARKER_ID3 = 64'h4D957B00B26A8400; + parameter [63:0] CTL_TX_VL_MARKER_ID4 = 64'hF50709000AF8F600; + parameter [63:0] CTL_TX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00; + parameter [63:0] CTL_TX_VL_MARKER_ID6 = 64'h9A4A260065B5D900; + parameter [63:0] CTL_TX_VL_MARKER_ID7 = 64'h7B45660084BA9900; + parameter [63:0] CTL_TX_VL_MARKER_ID8 = 64'hA02476005FDB8900; + parameter [63:0] CTL_TX_VL_MARKER_ID9 = 64'h68C9FB0097360400; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter TEST_MODE_PIN_CHAR = "FALSE"; + output [15:0] DRP_DO; + output DRP_RDY; + output [329:0] RSFEC_BYPASS_RX_DOUT; + output RSFEC_BYPASS_RX_DOUT_CW_START; + output RSFEC_BYPASS_RX_DOUT_VALID; + output [329:0] RSFEC_BYPASS_TX_DOUT; + output RSFEC_BYPASS_TX_DOUT_CW_START; + output RSFEC_BYPASS_TX_DOUT_VALID; + output [127:0] RX_DATAOUT0; + output [127:0] RX_DATAOUT1; + output [127:0] RX_DATAOUT2; + output [127:0] RX_DATAOUT3; + output RX_ENAOUT0; + output RX_ENAOUT1; + output RX_ENAOUT2; + output RX_ENAOUT3; + output RX_EOPOUT0; + output RX_EOPOUT1; + output RX_EOPOUT2; + output RX_EOPOUT3; + output RX_ERROUT0; + output RX_ERROUT1; + output RX_ERROUT2; + output RX_ERROUT3; + output [6:0] RX_LANE_ALIGNER_FILL_0; + output [6:0] RX_LANE_ALIGNER_FILL_1; + output [6:0] RX_LANE_ALIGNER_FILL_10; + output [6:0] RX_LANE_ALIGNER_FILL_11; + output [6:0] RX_LANE_ALIGNER_FILL_12; + output [6:0] RX_LANE_ALIGNER_FILL_13; + output [6:0] RX_LANE_ALIGNER_FILL_14; + output [6:0] RX_LANE_ALIGNER_FILL_15; + output [6:0] RX_LANE_ALIGNER_FILL_16; + output [6:0] RX_LANE_ALIGNER_FILL_17; + output [6:0] RX_LANE_ALIGNER_FILL_18; + output [6:0] RX_LANE_ALIGNER_FILL_19; + output [6:0] RX_LANE_ALIGNER_FILL_2; + output [6:0] RX_LANE_ALIGNER_FILL_3; + output [6:0] RX_LANE_ALIGNER_FILL_4; + output [6:0] RX_LANE_ALIGNER_FILL_5; + output [6:0] RX_LANE_ALIGNER_FILL_6; + output [6:0] RX_LANE_ALIGNER_FILL_7; + output [6:0] RX_LANE_ALIGNER_FILL_8; + output [6:0] RX_LANE_ALIGNER_FILL_9; + output [3:0] RX_MTYOUT0; + output [3:0] RX_MTYOUT1; + output [3:0] RX_MTYOUT2; + output [3:0] RX_MTYOUT3; + output [7:0] RX_OTN_BIP8_0; + output [7:0] RX_OTN_BIP8_1; + output [7:0] RX_OTN_BIP8_2; + output [7:0] RX_OTN_BIP8_3; + output [7:0] RX_OTN_BIP8_4; + output [65:0] RX_OTN_DATA_0; + output [65:0] RX_OTN_DATA_1; + output [65:0] RX_OTN_DATA_2; + output [65:0] RX_OTN_DATA_3; + output [65:0] RX_OTN_DATA_4; + output RX_OTN_ENA; + output RX_OTN_LANE0; + output RX_OTN_VLMARKER; + output [55:0] RX_PREOUT; + output [4:0] RX_PTP_PCSLANE_OUT; + output [79:0] RX_PTP_TSTAMP_OUT; + output RX_SOPOUT0; + output RX_SOPOUT1; + output RX_SOPOUT2; + output RX_SOPOUT3; + output STAT_RX_ALIGNED; + output STAT_RX_ALIGNED_ERR; + output [2:0] STAT_RX_BAD_CODE; + output [2:0] STAT_RX_BAD_FCS; + output STAT_RX_BAD_PREAMBLE; + output STAT_RX_BAD_SFD; + output STAT_RX_BIP_ERR_0; + output STAT_RX_BIP_ERR_1; + output STAT_RX_BIP_ERR_10; + output STAT_RX_BIP_ERR_11; + output STAT_RX_BIP_ERR_12; + output STAT_RX_BIP_ERR_13; + output STAT_RX_BIP_ERR_14; + output STAT_RX_BIP_ERR_15; + output STAT_RX_BIP_ERR_16; + output STAT_RX_BIP_ERR_17; + output STAT_RX_BIP_ERR_18; + output STAT_RX_BIP_ERR_19; + output STAT_RX_BIP_ERR_2; + output STAT_RX_BIP_ERR_3; + output STAT_RX_BIP_ERR_4; + output STAT_RX_BIP_ERR_5; + output STAT_RX_BIP_ERR_6; + output STAT_RX_BIP_ERR_7; + output STAT_RX_BIP_ERR_8; + output STAT_RX_BIP_ERR_9; + output [19:0] STAT_RX_BLOCK_LOCK; + output STAT_RX_BROADCAST; + output [2:0] STAT_RX_FRAGMENT; + output [1:0] STAT_RX_FRAMING_ERR_0; + output [1:0] STAT_RX_FRAMING_ERR_1; + output [1:0] STAT_RX_FRAMING_ERR_10; + output [1:0] STAT_RX_FRAMING_ERR_11; + output [1:0] STAT_RX_FRAMING_ERR_12; + output [1:0] STAT_RX_FRAMING_ERR_13; + output [1:0] STAT_RX_FRAMING_ERR_14; + output [1:0] STAT_RX_FRAMING_ERR_15; + output [1:0] STAT_RX_FRAMING_ERR_16; + output [1:0] STAT_RX_FRAMING_ERR_17; + output [1:0] STAT_RX_FRAMING_ERR_18; + output [1:0] STAT_RX_FRAMING_ERR_19; + output [1:0] STAT_RX_FRAMING_ERR_2; + output [1:0] STAT_RX_FRAMING_ERR_3; + output [1:0] STAT_RX_FRAMING_ERR_4; + output [1:0] STAT_RX_FRAMING_ERR_5; + output [1:0] STAT_RX_FRAMING_ERR_6; + output [1:0] STAT_RX_FRAMING_ERR_7; + output [1:0] STAT_RX_FRAMING_ERR_8; + output [1:0] STAT_RX_FRAMING_ERR_9; + output STAT_RX_FRAMING_ERR_VALID_0; + output STAT_RX_FRAMING_ERR_VALID_1; + output STAT_RX_FRAMING_ERR_VALID_10; + output STAT_RX_FRAMING_ERR_VALID_11; + output STAT_RX_FRAMING_ERR_VALID_12; + output STAT_RX_FRAMING_ERR_VALID_13; + output STAT_RX_FRAMING_ERR_VALID_14; + output STAT_RX_FRAMING_ERR_VALID_15; + output STAT_RX_FRAMING_ERR_VALID_16; + output STAT_RX_FRAMING_ERR_VALID_17; + output STAT_RX_FRAMING_ERR_VALID_18; + output STAT_RX_FRAMING_ERR_VALID_19; + output STAT_RX_FRAMING_ERR_VALID_2; + output STAT_RX_FRAMING_ERR_VALID_3; + output STAT_RX_FRAMING_ERR_VALID_4; + output STAT_RX_FRAMING_ERR_VALID_5; + output STAT_RX_FRAMING_ERR_VALID_6; + output STAT_RX_FRAMING_ERR_VALID_7; + output STAT_RX_FRAMING_ERR_VALID_8; + output STAT_RX_FRAMING_ERR_VALID_9; + output STAT_RX_GOT_SIGNAL_OS; + output STAT_RX_HI_BER; + output STAT_RX_INRANGEERR; + output STAT_RX_INTERNAL_LOCAL_FAULT; + output STAT_RX_JABBER; + output [7:0] STAT_RX_LANE0_VLM_BIP7; + output STAT_RX_LANE0_VLM_BIP7_VALID; + output STAT_RX_LOCAL_FAULT; + output [19:0] STAT_RX_MF_ERR; + output [19:0] STAT_RX_MF_LEN_ERR; + output [19:0] STAT_RX_MF_REPEAT_ERR; + output STAT_RX_MISALIGNED; + output STAT_RX_MULTICAST; + output STAT_RX_OVERSIZE; + output STAT_RX_PACKET_1024_1518_BYTES; + output STAT_RX_PACKET_128_255_BYTES; + output STAT_RX_PACKET_1519_1522_BYTES; + output STAT_RX_PACKET_1523_1548_BYTES; + output STAT_RX_PACKET_1549_2047_BYTES; + output STAT_RX_PACKET_2048_4095_BYTES; + output STAT_RX_PACKET_256_511_BYTES; + output STAT_RX_PACKET_4096_8191_BYTES; + output STAT_RX_PACKET_512_1023_BYTES; + output STAT_RX_PACKET_64_BYTES; + output STAT_RX_PACKET_65_127_BYTES; + output STAT_RX_PACKET_8192_9215_BYTES; + output STAT_RX_PACKET_BAD_FCS; + output STAT_RX_PACKET_LARGE; + output [2:0] STAT_RX_PACKET_SMALL; + output STAT_RX_PAUSE; + output [15:0] STAT_RX_PAUSE_QUANTA0; + output [15:0] STAT_RX_PAUSE_QUANTA1; + output [15:0] STAT_RX_PAUSE_QUANTA2; + output [15:0] STAT_RX_PAUSE_QUANTA3; + output [15:0] STAT_RX_PAUSE_QUANTA4; + output [15:0] STAT_RX_PAUSE_QUANTA5; + output [15:0] STAT_RX_PAUSE_QUANTA6; + output [15:0] STAT_RX_PAUSE_QUANTA7; + output [15:0] STAT_RX_PAUSE_QUANTA8; + output [8:0] STAT_RX_PAUSE_REQ; + output [8:0] STAT_RX_PAUSE_VALID; + output STAT_RX_RECEIVED_LOCAL_FAULT; + output STAT_RX_REMOTE_FAULT; + output STAT_RX_RSFEC_AM_LOCK0; + output STAT_RX_RSFEC_AM_LOCK1; + output STAT_RX_RSFEC_AM_LOCK2; + output STAT_RX_RSFEC_AM_LOCK3; + output STAT_RX_RSFEC_CORRECTED_CW_INC; + output STAT_RX_RSFEC_CW_INC; + output [2:0] STAT_RX_RSFEC_ERR_COUNT0_INC; + output [2:0] STAT_RX_RSFEC_ERR_COUNT1_INC; + output [2:0] STAT_RX_RSFEC_ERR_COUNT2_INC; + output [2:0] STAT_RX_RSFEC_ERR_COUNT3_INC; + output STAT_RX_RSFEC_HI_SER; + output STAT_RX_RSFEC_LANE_ALIGNMENT_STATUS; + output [13:0] STAT_RX_RSFEC_LANE_FILL_0; + output [13:0] STAT_RX_RSFEC_LANE_FILL_1; + output [13:0] STAT_RX_RSFEC_LANE_FILL_2; + output [13:0] STAT_RX_RSFEC_LANE_FILL_3; + output [7:0] STAT_RX_RSFEC_LANE_MAPPING; + output [31:0] STAT_RX_RSFEC_RSVD; + output STAT_RX_RSFEC_UNCORRECTED_CW_INC; + output STAT_RX_STATUS; + output [2:0] STAT_RX_STOMPED_FCS; + output [19:0] STAT_RX_SYNCED; + output [19:0] STAT_RX_SYNCED_ERR; + output [2:0] STAT_RX_TEST_PATTERN_MISMATCH; + output STAT_RX_TOOLONG; + output [6:0] STAT_RX_TOTAL_BYTES; + output [13:0] STAT_RX_TOTAL_GOOD_BYTES; + output STAT_RX_TOTAL_GOOD_PACKETS; + output [2:0] STAT_RX_TOTAL_PACKETS; + output STAT_RX_TRUNCATED; + output [2:0] STAT_RX_UNDERSIZE; + output STAT_RX_UNICAST; + output STAT_RX_USER_PAUSE; + output STAT_RX_VLAN; + output [19:0] STAT_RX_VL_DEMUXED; + output [4:0] STAT_RX_VL_NUMBER_0; + output [4:0] STAT_RX_VL_NUMBER_1; + output [4:0] STAT_RX_VL_NUMBER_10; + output [4:0] STAT_RX_VL_NUMBER_11; + output [4:0] STAT_RX_VL_NUMBER_12; + output [4:0] STAT_RX_VL_NUMBER_13; + output [4:0] STAT_RX_VL_NUMBER_14; + output [4:0] STAT_RX_VL_NUMBER_15; + output [4:0] STAT_RX_VL_NUMBER_16; + output [4:0] STAT_RX_VL_NUMBER_17; + output [4:0] STAT_RX_VL_NUMBER_18; + output [4:0] STAT_RX_VL_NUMBER_19; + output [4:0] STAT_RX_VL_NUMBER_2; + output [4:0] STAT_RX_VL_NUMBER_3; + output [4:0] STAT_RX_VL_NUMBER_4; + output [4:0] STAT_RX_VL_NUMBER_5; + output [4:0] STAT_RX_VL_NUMBER_6; + output [4:0] STAT_RX_VL_NUMBER_7; + output [4:0] STAT_RX_VL_NUMBER_8; + output [4:0] STAT_RX_VL_NUMBER_9; + output STAT_TX_BAD_FCS; + output STAT_TX_BROADCAST; + output STAT_TX_FRAME_ERROR; + output STAT_TX_LOCAL_FAULT; + output STAT_TX_MULTICAST; + output STAT_TX_PACKET_1024_1518_BYTES; + output STAT_TX_PACKET_128_255_BYTES; + output STAT_TX_PACKET_1519_1522_BYTES; + output STAT_TX_PACKET_1523_1548_BYTES; + output STAT_TX_PACKET_1549_2047_BYTES; + output STAT_TX_PACKET_2048_4095_BYTES; + output STAT_TX_PACKET_256_511_BYTES; + output STAT_TX_PACKET_4096_8191_BYTES; + output STAT_TX_PACKET_512_1023_BYTES; + output STAT_TX_PACKET_64_BYTES; + output STAT_TX_PACKET_65_127_BYTES; + output STAT_TX_PACKET_8192_9215_BYTES; + output STAT_TX_PACKET_LARGE; + output STAT_TX_PACKET_SMALL; + output STAT_TX_PAUSE; + output [8:0] STAT_TX_PAUSE_VALID; + output STAT_TX_PTP_FIFO_READ_ERROR; + output STAT_TX_PTP_FIFO_WRITE_ERROR; + output [5:0] STAT_TX_TOTAL_BYTES; + output [13:0] STAT_TX_TOTAL_GOOD_BYTES; + output STAT_TX_TOTAL_GOOD_PACKETS; + output STAT_TX_TOTAL_PACKETS; + output STAT_TX_UNICAST; + output STAT_TX_USER_PAUSE; + output STAT_TX_VLAN; + output TX_OVFOUT; + output [4:0] TX_PTP_PCSLANE_OUT; + output [79:0] TX_PTP_TSTAMP_OUT; + output [15:0] TX_PTP_TSTAMP_TAG_OUT; + output TX_PTP_TSTAMP_VALID_OUT; + output TX_RDYOUT; + output [15:0] TX_SERDES_ALT_DATA0; + output [15:0] TX_SERDES_ALT_DATA1; + output [15:0] TX_SERDES_ALT_DATA2; + output [15:0] TX_SERDES_ALT_DATA3; + output [63:0] TX_SERDES_DATA0; + output [63:0] TX_SERDES_DATA1; + output [63:0] TX_SERDES_DATA2; + output [63:0] TX_SERDES_DATA3; + output [31:0] TX_SERDES_DATA4; + output [31:0] TX_SERDES_DATA5; + output [31:0] TX_SERDES_DATA6; + output [31:0] TX_SERDES_DATA7; + output [31:0] TX_SERDES_DATA8; + output [31:0] TX_SERDES_DATA9; + output TX_UNFOUT; + input CTL_CAUI4_MODE; + input CTL_RSFEC_ENABLE_TRANSCODER_BYPASS_MODE; + input CTL_RSFEC_IEEE_ERROR_INDICATION_MODE; + input CTL_RX_CHECK_ETYPE_GCP; + input CTL_RX_CHECK_ETYPE_GPP; + input CTL_RX_CHECK_ETYPE_PCP; + input CTL_RX_CHECK_ETYPE_PPP; + input CTL_RX_CHECK_MCAST_GCP; + input CTL_RX_CHECK_MCAST_GPP; + input CTL_RX_CHECK_MCAST_PCP; + input CTL_RX_CHECK_MCAST_PPP; + input CTL_RX_CHECK_OPCODE_GCP; + input CTL_RX_CHECK_OPCODE_GPP; + input CTL_RX_CHECK_OPCODE_PCP; + input CTL_RX_CHECK_OPCODE_PPP; + input CTL_RX_CHECK_SA_GCP; + input CTL_RX_CHECK_SA_GPP; + input CTL_RX_CHECK_SA_PCP; + input CTL_RX_CHECK_SA_PPP; + input CTL_RX_CHECK_UCAST_GCP; + input CTL_RX_CHECK_UCAST_GPP; + input CTL_RX_CHECK_UCAST_PCP; + input CTL_RX_CHECK_UCAST_PPP; + input CTL_RX_ENABLE; + input CTL_RX_ENABLE_GCP; + input CTL_RX_ENABLE_GPP; + input CTL_RX_ENABLE_PCP; + input CTL_RX_ENABLE_PPP; + input CTL_RX_FORCE_RESYNC; + input [8:0] CTL_RX_PAUSE_ACK; + input [8:0] CTL_RX_PAUSE_ENABLE; + input CTL_RX_RSFEC_ENABLE; + input CTL_RX_RSFEC_ENABLE_CORRECTION; + input CTL_RX_RSFEC_ENABLE_INDICATION; + input [79:0] CTL_RX_SYSTEMTIMERIN; + input CTL_RX_TEST_PATTERN; + input CTL_TX_ENABLE; + input CTL_TX_LANE0_VLM_BIP7_OVERRIDE; + input [7:0] CTL_TX_LANE0_VLM_BIP7_OVERRIDE_VALUE; + input [8:0] CTL_TX_PAUSE_ENABLE; + input [15:0] CTL_TX_PAUSE_QUANTA0; + input [15:0] CTL_TX_PAUSE_QUANTA1; + input [15:0] CTL_TX_PAUSE_QUANTA2; + input [15:0] CTL_TX_PAUSE_QUANTA3; + input [15:0] CTL_TX_PAUSE_QUANTA4; + input [15:0] CTL_TX_PAUSE_QUANTA5; + input [15:0] CTL_TX_PAUSE_QUANTA6; + input [15:0] CTL_TX_PAUSE_QUANTA7; + input [15:0] CTL_TX_PAUSE_QUANTA8; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER0; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER1; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER2; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER3; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER4; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER5; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER6; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER7; + input [15:0] CTL_TX_PAUSE_REFRESH_TIMER8; + input [8:0] CTL_TX_PAUSE_REQ; + input CTL_TX_PTP_VLANE_ADJUST_MODE; + input CTL_TX_RESEND_PAUSE; + input CTL_TX_RSFEC_ENABLE; + input CTL_TX_SEND_IDLE; + input CTL_TX_SEND_LFI; + input CTL_TX_SEND_RFI; + input [79:0] CTL_TX_SYSTEMTIMERIN; + input CTL_TX_TEST_PATTERN; + input [9:0] DRP_ADDR; + input DRP_CLK; + input [15:0] DRP_DI; + input DRP_EN; + input DRP_WE; + input [329:0] RSFEC_BYPASS_RX_DIN; + input RSFEC_BYPASS_RX_DIN_CW_START; + input [329:0] RSFEC_BYPASS_TX_DIN; + input RSFEC_BYPASS_TX_DIN_CW_START; + input RX_CLK; + input RX_RESET; + input [15:0] RX_SERDES_ALT_DATA0; + input [15:0] RX_SERDES_ALT_DATA1; + input [15:0] RX_SERDES_ALT_DATA2; + input [15:0] RX_SERDES_ALT_DATA3; + input [9:0] RX_SERDES_CLK; + input [63:0] RX_SERDES_DATA0; + input [63:0] RX_SERDES_DATA1; + input [63:0] RX_SERDES_DATA2; + input [63:0] RX_SERDES_DATA3; + input [31:0] RX_SERDES_DATA4; + input [31:0] RX_SERDES_DATA5; + input [31:0] RX_SERDES_DATA6; + input [31:0] RX_SERDES_DATA7; + input [31:0] RX_SERDES_DATA8; + input [31:0] RX_SERDES_DATA9; + input [9:0] RX_SERDES_RESET; + input TX_CLK; + input [127:0] TX_DATAIN0; + input [127:0] TX_DATAIN1; + input [127:0] TX_DATAIN2; + input [127:0] TX_DATAIN3; + input TX_ENAIN0; + input TX_ENAIN1; + input TX_ENAIN2; + input TX_ENAIN3; + input TX_EOPIN0; + input TX_EOPIN1; + input TX_EOPIN2; + input TX_EOPIN3; + input TX_ERRIN0; + input TX_ERRIN1; + input TX_ERRIN2; + input TX_ERRIN3; + input [3:0] TX_MTYIN0; + input [3:0] TX_MTYIN1; + input [3:0] TX_MTYIN2; + input [3:0] TX_MTYIN3; + input [55:0] TX_PREIN; + input [1:0] TX_PTP_1588OP_IN; + input [15:0] TX_PTP_CHKSUM_OFFSET_IN; + input [63:0] TX_PTP_RXTSTAMP_IN; + input [15:0] TX_PTP_TAG_FIELD_IN; + input [15:0] TX_PTP_TSTAMP_OFFSET_IN; + input TX_PTP_UPD_CHKSUM_IN; + input TX_RESET; + input TX_SOPIN0; + input TX_SOPIN1; + input TX_SOPIN2; + input TX_SOPIN3; +endmodule + +module MCB (...); + parameter integer ARB_NUM_TIME_SLOTS = 12; + parameter [17:0] ARB_TIME_SLOT_0 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_1 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_10 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_11 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_2 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_3 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_4 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_5 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_6 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_7 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_8 = 18'b111111111111111111; + parameter [17:0] ARB_TIME_SLOT_9 = 18'b111111111111111111; + parameter [2:0] CAL_BA = 3'h0; + parameter CAL_BYPASS = "YES"; + parameter [11:0] CAL_CA = 12'h000; + parameter CAL_CALIBRATION_MODE = "NOCALIBRATION"; + parameter integer CAL_CLK_DIV = 1; + parameter CAL_DELAY = "QUARTER"; + parameter [14:0] CAL_RA = 15'h0000; + parameter MEM_ADDR_ORDER = "BANK_ROW_COLUMN"; + parameter integer MEM_BA_SIZE = 3; + parameter integer MEM_BURST_LEN = 8; + parameter integer MEM_CAS_LATENCY = 4; + parameter integer MEM_CA_SIZE = 11; + parameter MEM_DDR1_2_ODS = "FULL"; + parameter MEM_DDR2_3_HIGH_TEMP_SR = "NORMAL"; + parameter MEM_DDR2_3_PA_SR = "FULL"; + parameter integer MEM_DDR2_ADD_LATENCY = 0; + parameter MEM_DDR2_DIFF_DQS_EN = "YES"; + parameter MEM_DDR2_RTT = "50OHMS"; + parameter integer MEM_DDR2_WRT_RECOVERY = 4; + parameter MEM_DDR3_ADD_LATENCY = "OFF"; + parameter MEM_DDR3_AUTO_SR = "ENABLED"; + parameter integer MEM_DDR3_CAS_LATENCY = 7; + parameter integer MEM_DDR3_CAS_WR_LATENCY = 5; + parameter MEM_DDR3_DYN_WRT_ODT = "OFF"; + parameter MEM_DDR3_ODS = "DIV7"; + parameter MEM_DDR3_RTT = "DIV2"; + parameter integer MEM_DDR3_WRT_RECOVERY = 7; + parameter MEM_MDDR_ODS = "FULL"; + parameter MEM_MOBILE_PA_SR = "FULL"; + parameter integer MEM_MOBILE_TC_SR = 0; + parameter integer MEM_RAS_VAL = 0; + parameter integer MEM_RA_SIZE = 13; + parameter integer MEM_RCD_VAL = 1; + parameter integer MEM_REFI_VAL = 0; + parameter integer MEM_RFC_VAL = 0; + parameter integer MEM_RP_VAL = 0; + parameter integer MEM_RTP_VAL = 0; + parameter MEM_TYPE = "DDR3"; + parameter integer MEM_WIDTH = 4; + parameter integer MEM_WR_VAL = 0; + parameter integer MEM_WTR_VAL = 3; + parameter PORT_CONFIG = "B32_B32_B32_B32"; + output CAS; + output CKE; + output DQIOWEN0; + output DQSIOWEN90N; + output DQSIOWEN90P; + output IOIDRPADD; + output IOIDRPBROADCAST; + output IOIDRPCLK; + output IOIDRPCS; + output IOIDRPSDO; + output IOIDRPTRAIN; + output IOIDRPUPDATE; + output LDMN; + output LDMP; + output ODT; + output P0CMDEMPTY; + output P0CMDFULL; + output P0RDEMPTY; + output P0RDERROR; + output P0RDFULL; + output P0RDOVERFLOW; + output P0WREMPTY; + output P0WRERROR; + output P0WRFULL; + output P0WRUNDERRUN; + output P1CMDEMPTY; + output P1CMDFULL; + output P1RDEMPTY; + output P1RDERROR; + output P1RDFULL; + output P1RDOVERFLOW; + output P1WREMPTY; + output P1WRERROR; + output P1WRFULL; + output P1WRUNDERRUN; + output P2CMDEMPTY; + output P2CMDFULL; + output P2EMPTY; + output P2ERROR; + output P2FULL; + output P2RDOVERFLOW; + output P2WRUNDERRUN; + output P3CMDEMPTY; + output P3CMDFULL; + output P3EMPTY; + output P3ERROR; + output P3FULL; + output P3RDOVERFLOW; + output P3WRUNDERRUN; + output P4CMDEMPTY; + output P4CMDFULL; + output P4EMPTY; + output P4ERROR; + output P4FULL; + output P4RDOVERFLOW; + output P4WRUNDERRUN; + output P5CMDEMPTY; + output P5CMDFULL; + output P5EMPTY; + output P5ERROR; + output P5FULL; + output P5RDOVERFLOW; + output P5WRUNDERRUN; + output RAS; + output RST; + output SELFREFRESHMODE; + output UDMN; + output UDMP; + output UOCALSTART; + output UOCMDREADYIN; + output UODATAVALID; + output UODONECAL; + output UOREFRSHFLAG; + output UOSDO; + output WE; + output [14:0] ADDR; + output [15:0] DQON; + output [15:0] DQOP; + output [2:0] BA; + output [31:0] P0RDDATA; + output [31:0] P1RDDATA; + output [31:0] P2RDDATA; + output [31:0] P3RDDATA; + output [31:0] P4RDDATA; + output [31:0] P5RDDATA; + output [31:0] STATUS; + output [4:0] IOIDRPADDR; + output [6:0] P0RDCOUNT; + output [6:0] P0WRCOUNT; + output [6:0] P1RDCOUNT; + output [6:0] P1WRCOUNT; + output [6:0] P2COUNT; + output [6:0] P3COUNT; + output [6:0] P4COUNT; + output [6:0] P5COUNT; + output [7:0] UODATA; + input DQSIOIN; + input DQSIOIP; + input IOIDRPSDI; + input P0ARBEN; + input P0CMDCLK; + input P0CMDEN; + input P0RDCLK; + input P0RDEN; + input P0WRCLK; + input P0WREN; + input P1ARBEN; + input P1CMDCLK; + input P1CMDEN; + input P1RDCLK; + input P1RDEN; + input P1WRCLK; + input P1WREN; + input P2ARBEN; + input P2CLK; + input P2CMDCLK; + input P2CMDEN; + input P2EN; + input P3ARBEN; + input P3CLK; + input P3CMDCLK; + input P3CMDEN; + input P3EN; + input P4ARBEN; + input P4CLK; + input P4CMDCLK; + input P4CMDEN; + input P4EN; + input P5ARBEN; + input P5CLK; + input P5CMDCLK; + input P5CMDEN; + input P5EN; + input PLLLOCK; + input RECAL; + input SELFREFRESHENTER; + input SYSRST; + input UDQSIOIN; + input UDQSIOIP; + input UIADD; + input UIBROADCAST; + input UICLK; + input UICMD; + input UICMDEN; + input UICMDIN; + input UICS; + input UIDONECAL; + input UIDQLOWERDEC; + input UIDQLOWERINC; + input UIDQUPPERDEC; + input UIDQUPPERINC; + input UIDRPUPDATE; + input UILDQSDEC; + input UILDQSINC; + input UIREAD; + input UISDI; + input UIUDQSDEC; + input UIUDQSINC; + input [11:0] P0CMDCA; + input [11:0] P1CMDCA; + input [11:0] P2CMDCA; + input [11:0] P3CMDCA; + input [11:0] P4CMDCA; + input [11:0] P5CMDCA; + input [14:0] P0CMDRA; + input [14:0] P1CMDRA; + input [14:0] P2CMDRA; + input [14:0] P3CMDRA; + input [14:0] P4CMDRA; + input [14:0] P5CMDRA; + input [15:0] DQI; + input [1:0] PLLCE; + input [1:0] PLLCLK; + input [2:0] P0CMDBA; + input [2:0] P0CMDINSTR; + input [2:0] P1CMDBA; + input [2:0] P1CMDINSTR; + input [2:0] P2CMDBA; + input [2:0] P2CMDINSTR; + input [2:0] P3CMDBA; + input [2:0] P3CMDINSTR; + input [2:0] P4CMDBA; + input [2:0] P4CMDINSTR; + input [2:0] P5CMDBA; + input [2:0] P5CMDINSTR; + input [31:0] P0WRDATA; + input [31:0] P1WRDATA; + input [31:0] P2WRDATA; + input [31:0] P3WRDATA; + input [31:0] P4WRDATA; + input [31:0] P5WRDATA; + input [3:0] P0RWRMASK; + input [3:0] P1RWRMASK; + input [3:0] P2WRMASK; + input [3:0] P3WRMASK; + input [3:0] P4WRMASK; + input [3:0] P5WRMASK; + input [3:0] UIDQCOUNT; + input [4:0] UIADDR; + input [5:0] P0CMDBL; + input [5:0] P1CMDBL; + input [5:0] P2CMDBL; + input [5:0] P3CMDBL; + input [5:0] P4CMDBL; + input [5:0] P5CMDBL; +endmodule + +(* keep *) +module HBM_REF_CLK (...); + input REF_CLK; +endmodule + +(* keep *) +module HBM_SNGLBLI_INTF_APB (...); + parameter CLK_SEL = "FALSE"; + parameter [0:0] IS_PCLK_INVERTED = 1'b0; + parameter [0:0] IS_PRESET_N_INVERTED = 1'b0; + parameter MC_ENABLE = "FALSE"; + parameter PHY_ENABLE = "FALSE"; + parameter PHY_PCLK_INVERT = "FALSE"; + parameter SWITCH_ENABLE = "FALSE"; + output CATTRIP_PIPE; + output [31:0] PRDATA_PIPE; + output PREADY_PIPE; + output PSLVERR_PIPE; + output [2:0] TEMP_PIPE; + input [21:0] PADDR; + (* invertible_pin = "IS_PCLK_INVERTED" *) + input PCLK; + input PENABLE; + (* invertible_pin = "IS_PRESET_N_INVERTED" *) + input PRESET_N; + input PSEL; + input [31:0] PWDATA; + input PWRITE; +endmodule + +(* keep *) +module HBM_SNGLBLI_INTF_AXI (...); + parameter CLK_SEL = "FALSE"; + parameter integer DATARATE = 1800; + parameter [0:0] IS_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_ARESET_N_INVERTED = 1'b0; + parameter MC_ENABLE = "FALSE"; + parameter integer PAGEHIT_PERCENT = 75; + parameter PHY_ENABLE = "FALSE"; + parameter integer READ_PERCENT = 50; + parameter SWITCH_ENABLE = "FALSE"; + parameter integer WRITE_PERCENT = 50; + output ARREADY_PIPE; + output AWREADY_PIPE; + output [5:0] BID_PIPE; + output [1:0] BRESP_PIPE; + output BVALID_PIPE; + output [1:0] DFI_AW_AERR_N_PIPE; + output DFI_CLK_BUF; + output DFI_CTRLUPD_ACK_PIPE; + output [7:0] DFI_DBI_BYTE_DISABLE_PIPE; + output [20:0] DFI_DW_RDDATA_DBI_PIPE; + output [7:0] DFI_DW_RDDATA_DERR_PIPE; + output [1:0] DFI_DW_RDDATA_PAR_VALID_PIPE; + output [1:0] DFI_DW_RDDATA_VALID_PIPE; + output DFI_INIT_COMPLETE_PIPE; + output DFI_PHYUPD_REQ_PIPE; + output DFI_PHYUPD_TYPE_PIPE; + output DFI_PHY_LP_STATE_PIPE; + output DFI_RST_N_BUF; + output [5:0] MC_STATUS; + output [7:0] PHY_STATUS; + output [31:0] RDATA_PARITY_PIPE; + output [255:0] RDATA_PIPE; + output [5:0] RID_PIPE; + output RLAST_PIPE; + output [1:0] RRESP_PIPE; + output RVALID_PIPE; + output [5:0] STATUS; + output WREADY_PIPE; + (* invertible_pin = "IS_ACLK_INVERTED" *) + input ACLK; + input [36:0] ARADDR; + input [1:0] ARBURST; + (* invertible_pin = "IS_ARESET_N_INVERTED" *) + input ARESET_N; + input [5:0] ARID; + input [3:0] ARLEN; + input [2:0] ARSIZE; + input ARVALID; + input [36:0] AWADDR; + input [1:0] AWBURST; + input [5:0] AWID; + input [3:0] AWLEN; + input [2:0] AWSIZE; + input AWVALID; + input BREADY; + input BSCAN_CK; + input DFI_LP_PWR_X_REQ; + input MBIST_EN; + input RREADY; + input [255:0] WDATA; + input [31:0] WDATA_PARITY; + input WLAST; + input [31:0] WSTRB; + input WVALID; +endmodule + +(* keep *) +module HBM_ONE_STACK_INTF (...); + parameter CLK_SEL_00 = "FALSE"; + parameter CLK_SEL_01 = "FALSE"; + parameter CLK_SEL_02 = "FALSE"; + parameter CLK_SEL_03 = "FALSE"; + parameter CLK_SEL_04 = "FALSE"; + parameter CLK_SEL_05 = "FALSE"; + parameter CLK_SEL_06 = "FALSE"; + parameter CLK_SEL_07 = "FALSE"; + parameter CLK_SEL_08 = "FALSE"; + parameter CLK_SEL_09 = "FALSE"; + parameter CLK_SEL_10 = "FALSE"; + parameter CLK_SEL_11 = "FALSE"; + parameter CLK_SEL_12 = "FALSE"; + parameter CLK_SEL_13 = "FALSE"; + parameter CLK_SEL_14 = "FALSE"; + parameter CLK_SEL_15 = "FALSE"; + parameter integer DATARATE_00 = 1800; + parameter integer DATARATE_01 = 1800; + parameter integer DATARATE_02 = 1800; + parameter integer DATARATE_03 = 1800; + parameter integer DATARATE_04 = 1800; + parameter integer DATARATE_05 = 1800; + parameter integer DATARATE_06 = 1800; + parameter integer DATARATE_07 = 1800; + parameter DA_LOCKOUT = "FALSE"; + parameter [0:0] IS_APB_0_PCLK_INVERTED = 1'b0; + parameter [0:0] IS_APB_0_PRESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_00_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_00_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_01_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_01_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_02_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_02_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_03_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_03_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_04_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_04_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_05_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_05_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_06_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_06_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_07_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_07_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_08_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_08_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_09_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_09_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_10_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_10_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_11_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_11_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_12_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_12_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_13_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_13_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_14_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_14_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_15_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_15_ARESET_N_INVERTED = 1'b0; + parameter MC_ENABLE_0 = "FALSE"; + parameter MC_ENABLE_1 = "FALSE"; + parameter MC_ENABLE_2 = "FALSE"; + parameter MC_ENABLE_3 = "FALSE"; + parameter MC_ENABLE_4 = "FALSE"; + parameter MC_ENABLE_5 = "FALSE"; + parameter MC_ENABLE_6 = "FALSE"; + parameter MC_ENABLE_7 = "FALSE"; + parameter MC_ENABLE_APB = "FALSE"; + parameter integer PAGEHIT_PERCENT_00 = 75; + parameter PHY_ENABLE_00 = "FALSE"; + parameter PHY_ENABLE_01 = "FALSE"; + parameter PHY_ENABLE_02 = "FALSE"; + parameter PHY_ENABLE_03 = "FALSE"; + parameter PHY_ENABLE_04 = "FALSE"; + parameter PHY_ENABLE_05 = "FALSE"; + parameter PHY_ENABLE_06 = "FALSE"; + parameter PHY_ENABLE_07 = "FALSE"; + parameter PHY_ENABLE_08 = "FALSE"; + parameter PHY_ENABLE_09 = "FALSE"; + parameter PHY_ENABLE_10 = "FALSE"; + parameter PHY_ENABLE_11 = "FALSE"; + parameter PHY_ENABLE_12 = "FALSE"; + parameter PHY_ENABLE_13 = "FALSE"; + parameter PHY_ENABLE_14 = "FALSE"; + parameter PHY_ENABLE_15 = "FALSE"; + parameter PHY_ENABLE_APB = "FALSE"; + parameter PHY_PCLK_INVERT_01 = "FALSE"; + parameter integer READ_PERCENT_00 = 50; + parameter integer READ_PERCENT_01 = 50; + parameter integer READ_PERCENT_02 = 50; + parameter integer READ_PERCENT_03 = 50; + parameter integer READ_PERCENT_04 = 50; + parameter integer READ_PERCENT_05 = 50; + parameter integer READ_PERCENT_06 = 50; + parameter integer READ_PERCENT_07 = 50; + parameter integer READ_PERCENT_08 = 50; + parameter integer READ_PERCENT_09 = 50; + parameter integer READ_PERCENT_10 = 50; + parameter integer READ_PERCENT_11 = 50; + parameter integer READ_PERCENT_12 = 50; + parameter integer READ_PERCENT_13 = 50; + parameter integer READ_PERCENT_14 = 50; + parameter integer READ_PERCENT_15 = 50; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter integer STACK_LOCATION = 0; + parameter SWITCH_ENABLE = "FALSE"; + parameter integer WRITE_PERCENT_00 = 50; + parameter integer WRITE_PERCENT_01 = 50; + parameter integer WRITE_PERCENT_02 = 50; + parameter integer WRITE_PERCENT_03 = 50; + parameter integer WRITE_PERCENT_04 = 50; + parameter integer WRITE_PERCENT_05 = 50; + parameter integer WRITE_PERCENT_06 = 50; + parameter integer WRITE_PERCENT_07 = 50; + parameter integer WRITE_PERCENT_08 = 50; + parameter integer WRITE_PERCENT_09 = 50; + parameter integer WRITE_PERCENT_10 = 50; + parameter integer WRITE_PERCENT_11 = 50; + parameter integer WRITE_PERCENT_12 = 50; + parameter integer WRITE_PERCENT_13 = 50; + parameter integer WRITE_PERCENT_14 = 50; + parameter integer WRITE_PERCENT_15 = 50; + output [31:0] APB_0_PRDATA; + output APB_0_PREADY; + output APB_0_PSLVERR; + output AXI_00_ARREADY; + output AXI_00_AWREADY; + output [5:0] AXI_00_BID; + output [1:0] AXI_00_BRESP; + output AXI_00_BVALID; + output [1:0] AXI_00_DFI_AW_AERR_N; + output AXI_00_DFI_CLK_BUF; + output [7:0] AXI_00_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_00_DFI_DW_RDDATA_DBI; + output [7:0] AXI_00_DFI_DW_RDDATA_DERR; + output [1:0] AXI_00_DFI_DW_RDDATA_VALID; + output AXI_00_DFI_INIT_COMPLETE; + output AXI_00_DFI_PHYUPD_REQ; + output AXI_00_DFI_PHY_LP_STATE; + output AXI_00_DFI_RST_N_BUF; + output [5:0] AXI_00_MC_STATUS; + output [7:0] AXI_00_PHY_STATUS; + output [255:0] AXI_00_RDATA; + output [31:0] AXI_00_RDATA_PARITY; + output [5:0] AXI_00_RID; + output AXI_00_RLAST; + output [1:0] AXI_00_RRESP; + output AXI_00_RVALID; + output AXI_00_WREADY; + output AXI_01_ARREADY; + output AXI_01_AWREADY; + output [5:0] AXI_01_BID; + output [1:0] AXI_01_BRESP; + output AXI_01_BVALID; + output [1:0] AXI_01_DFI_AW_AERR_N; + output AXI_01_DFI_CLK_BUF; + output [7:0] AXI_01_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_01_DFI_DW_RDDATA_DBI; + output [7:0] AXI_01_DFI_DW_RDDATA_DERR; + output [1:0] AXI_01_DFI_DW_RDDATA_VALID; + output AXI_01_DFI_INIT_COMPLETE; + output AXI_01_DFI_PHYUPD_REQ; + output AXI_01_DFI_PHY_LP_STATE; + output AXI_01_DFI_RST_N_BUF; + output [255:0] AXI_01_RDATA; + output [31:0] AXI_01_RDATA_PARITY; + output [5:0] AXI_01_RID; + output AXI_01_RLAST; + output [1:0] AXI_01_RRESP; + output AXI_01_RVALID; + output AXI_01_WREADY; + output AXI_02_ARREADY; + output AXI_02_AWREADY; + output [5:0] AXI_02_BID; + output [1:0] AXI_02_BRESP; + output AXI_02_BVALID; + output [1:0] AXI_02_DFI_AW_AERR_N; + output AXI_02_DFI_CLK_BUF; + output [7:0] AXI_02_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_02_DFI_DW_RDDATA_DBI; + output [7:0] AXI_02_DFI_DW_RDDATA_DERR; + output [1:0] AXI_02_DFI_DW_RDDATA_VALID; + output AXI_02_DFI_INIT_COMPLETE; + output AXI_02_DFI_PHYUPD_REQ; + output AXI_02_DFI_PHY_LP_STATE; + output AXI_02_DFI_RST_N_BUF; + output [5:0] AXI_02_MC_STATUS; + output [7:0] AXI_02_PHY_STATUS; + output [255:0] AXI_02_RDATA; + output [31:0] AXI_02_RDATA_PARITY; + output [5:0] AXI_02_RID; + output AXI_02_RLAST; + output [1:0] AXI_02_RRESP; + output AXI_02_RVALID; + output AXI_02_WREADY; + output AXI_03_ARREADY; + output AXI_03_AWREADY; + output [5:0] AXI_03_BID; + output [1:0] AXI_03_BRESP; + output AXI_03_BVALID; + output [1:0] AXI_03_DFI_AW_AERR_N; + output AXI_03_DFI_CLK_BUF; + output [7:0] AXI_03_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_03_DFI_DW_RDDATA_DBI; + output [7:0] AXI_03_DFI_DW_RDDATA_DERR; + output [1:0] AXI_03_DFI_DW_RDDATA_VALID; + output AXI_03_DFI_INIT_COMPLETE; + output AXI_03_DFI_PHYUPD_REQ; + output AXI_03_DFI_PHY_LP_STATE; + output AXI_03_DFI_RST_N_BUF; + output [255:0] AXI_03_RDATA; + output [31:0] AXI_03_RDATA_PARITY; + output [5:0] AXI_03_RID; + output AXI_03_RLAST; + output [1:0] AXI_03_RRESP; + output AXI_03_RVALID; + output AXI_03_WREADY; + output AXI_04_ARREADY; + output AXI_04_AWREADY; + output [5:0] AXI_04_BID; + output [1:0] AXI_04_BRESP; + output AXI_04_BVALID; + output [1:0] AXI_04_DFI_AW_AERR_N; + output AXI_04_DFI_CLK_BUF; + output [7:0] AXI_04_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_04_DFI_DW_RDDATA_DBI; + output [7:0] AXI_04_DFI_DW_RDDATA_DERR; + output [1:0] AXI_04_DFI_DW_RDDATA_VALID; + output AXI_04_DFI_INIT_COMPLETE; + output AXI_04_DFI_PHYUPD_REQ; + output AXI_04_DFI_PHY_LP_STATE; + output AXI_04_DFI_RST_N_BUF; + output [5:0] AXI_04_MC_STATUS; + output [7:0] AXI_04_PHY_STATUS; + output [255:0] AXI_04_RDATA; + output [31:0] AXI_04_RDATA_PARITY; + output [5:0] AXI_04_RID; + output AXI_04_RLAST; + output [1:0] AXI_04_RRESP; + output AXI_04_RVALID; + output AXI_04_WREADY; + output AXI_05_ARREADY; + output AXI_05_AWREADY; + output [5:0] AXI_05_BID; + output [1:0] AXI_05_BRESP; + output AXI_05_BVALID; + output [1:0] AXI_05_DFI_AW_AERR_N; + output AXI_05_DFI_CLK_BUF; + output [7:0] AXI_05_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_05_DFI_DW_RDDATA_DBI; + output [7:0] AXI_05_DFI_DW_RDDATA_DERR; + output [1:0] AXI_05_DFI_DW_RDDATA_VALID; + output AXI_05_DFI_INIT_COMPLETE; + output AXI_05_DFI_PHYUPD_REQ; + output AXI_05_DFI_PHY_LP_STATE; + output AXI_05_DFI_RST_N_BUF; + output [255:0] AXI_05_RDATA; + output [31:0] AXI_05_RDATA_PARITY; + output [5:0] AXI_05_RID; + output AXI_05_RLAST; + output [1:0] AXI_05_RRESP; + output AXI_05_RVALID; + output AXI_05_WREADY; + output AXI_06_ARREADY; + output AXI_06_AWREADY; + output [5:0] AXI_06_BID; + output [1:0] AXI_06_BRESP; + output AXI_06_BVALID; + output [1:0] AXI_06_DFI_AW_AERR_N; + output AXI_06_DFI_CLK_BUF; + output [7:0] AXI_06_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_06_DFI_DW_RDDATA_DBI; + output [7:0] AXI_06_DFI_DW_RDDATA_DERR; + output [1:0] AXI_06_DFI_DW_RDDATA_VALID; + output AXI_06_DFI_INIT_COMPLETE; + output AXI_06_DFI_PHYUPD_REQ; + output AXI_06_DFI_PHY_LP_STATE; + output AXI_06_DFI_RST_N_BUF; + output [5:0] AXI_06_MC_STATUS; + output [7:0] AXI_06_PHY_STATUS; + output [255:0] AXI_06_RDATA; + output [31:0] AXI_06_RDATA_PARITY; + output [5:0] AXI_06_RID; + output AXI_06_RLAST; + output [1:0] AXI_06_RRESP; + output AXI_06_RVALID; + output AXI_06_WREADY; + output AXI_07_ARREADY; + output AXI_07_AWREADY; + output [5:0] AXI_07_BID; + output [1:0] AXI_07_BRESP; + output AXI_07_BVALID; + output [1:0] AXI_07_DFI_AW_AERR_N; + output AXI_07_DFI_CLK_BUF; + output [7:0] AXI_07_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_07_DFI_DW_RDDATA_DBI; + output [7:0] AXI_07_DFI_DW_RDDATA_DERR; + output [1:0] AXI_07_DFI_DW_RDDATA_VALID; + output AXI_07_DFI_INIT_COMPLETE; + output AXI_07_DFI_PHYUPD_REQ; + output AXI_07_DFI_PHY_LP_STATE; + output AXI_07_DFI_RST_N_BUF; + output [255:0] AXI_07_RDATA; + output [31:0] AXI_07_RDATA_PARITY; + output [5:0] AXI_07_RID; + output AXI_07_RLAST; + output [1:0] AXI_07_RRESP; + output AXI_07_RVALID; + output AXI_07_WREADY; + output AXI_08_ARREADY; + output AXI_08_AWREADY; + output [5:0] AXI_08_BID; + output [1:0] AXI_08_BRESP; + output AXI_08_BVALID; + output [1:0] AXI_08_DFI_AW_AERR_N; + output AXI_08_DFI_CLK_BUF; + output [7:0] AXI_08_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_08_DFI_DW_RDDATA_DBI; + output [7:0] AXI_08_DFI_DW_RDDATA_DERR; + output [1:0] AXI_08_DFI_DW_RDDATA_VALID; + output AXI_08_DFI_INIT_COMPLETE; + output AXI_08_DFI_PHYUPD_REQ; + output AXI_08_DFI_PHY_LP_STATE; + output AXI_08_DFI_RST_N_BUF; + output [5:0] AXI_08_MC_STATUS; + output [7:0] AXI_08_PHY_STATUS; + output [255:0] AXI_08_RDATA; + output [31:0] AXI_08_RDATA_PARITY; + output [5:0] AXI_08_RID; + output AXI_08_RLAST; + output [1:0] AXI_08_RRESP; + output AXI_08_RVALID; + output AXI_08_WREADY; + output AXI_09_ARREADY; + output AXI_09_AWREADY; + output [5:0] AXI_09_BID; + output [1:0] AXI_09_BRESP; + output AXI_09_BVALID; + output [1:0] AXI_09_DFI_AW_AERR_N; + output AXI_09_DFI_CLK_BUF; + output [7:0] AXI_09_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_09_DFI_DW_RDDATA_DBI; + output [7:0] AXI_09_DFI_DW_RDDATA_DERR; + output [1:0] AXI_09_DFI_DW_RDDATA_VALID; + output AXI_09_DFI_INIT_COMPLETE; + output AXI_09_DFI_PHYUPD_REQ; + output AXI_09_DFI_PHY_LP_STATE; + output AXI_09_DFI_RST_N_BUF; + output [255:0] AXI_09_RDATA; + output [31:0] AXI_09_RDATA_PARITY; + output [5:0] AXI_09_RID; + output AXI_09_RLAST; + output [1:0] AXI_09_RRESP; + output AXI_09_RVALID; + output AXI_09_WREADY; + output AXI_10_ARREADY; + output AXI_10_AWREADY; + output [5:0] AXI_10_BID; + output [1:0] AXI_10_BRESP; + output AXI_10_BVALID; + output [1:0] AXI_10_DFI_AW_AERR_N; + output AXI_10_DFI_CLK_BUF; + output [7:0] AXI_10_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_10_DFI_DW_RDDATA_DBI; + output [7:0] AXI_10_DFI_DW_RDDATA_DERR; + output [1:0] AXI_10_DFI_DW_RDDATA_VALID; + output AXI_10_DFI_INIT_COMPLETE; + output AXI_10_DFI_PHYUPD_REQ; + output AXI_10_DFI_PHY_LP_STATE; + output AXI_10_DFI_RST_N_BUF; + output [5:0] AXI_10_MC_STATUS; + output [7:0] AXI_10_PHY_STATUS; + output [255:0] AXI_10_RDATA; + output [31:0] AXI_10_RDATA_PARITY; + output [5:0] AXI_10_RID; + output AXI_10_RLAST; + output [1:0] AXI_10_RRESP; + output AXI_10_RVALID; + output AXI_10_WREADY; + output AXI_11_ARREADY; + output AXI_11_AWREADY; + output [5:0] AXI_11_BID; + output [1:0] AXI_11_BRESP; + output AXI_11_BVALID; + output [1:0] AXI_11_DFI_AW_AERR_N; + output AXI_11_DFI_CLK_BUF; + output [7:0] AXI_11_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_11_DFI_DW_RDDATA_DBI; + output [7:0] AXI_11_DFI_DW_RDDATA_DERR; + output [1:0] AXI_11_DFI_DW_RDDATA_VALID; + output AXI_11_DFI_INIT_COMPLETE; + output AXI_11_DFI_PHYUPD_REQ; + output AXI_11_DFI_PHY_LP_STATE; + output AXI_11_DFI_RST_N_BUF; + output [255:0] AXI_11_RDATA; + output [31:0] AXI_11_RDATA_PARITY; + output [5:0] AXI_11_RID; + output AXI_11_RLAST; + output [1:0] AXI_11_RRESP; + output AXI_11_RVALID; + output AXI_11_WREADY; + output AXI_12_ARREADY; + output AXI_12_AWREADY; + output [5:0] AXI_12_BID; + output [1:0] AXI_12_BRESP; + output AXI_12_BVALID; + output [1:0] AXI_12_DFI_AW_AERR_N; + output AXI_12_DFI_CLK_BUF; + output [7:0] AXI_12_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_12_DFI_DW_RDDATA_DBI; + output [7:0] AXI_12_DFI_DW_RDDATA_DERR; + output [1:0] AXI_12_DFI_DW_RDDATA_VALID; + output AXI_12_DFI_INIT_COMPLETE; + output AXI_12_DFI_PHYUPD_REQ; + output AXI_12_DFI_PHY_LP_STATE; + output AXI_12_DFI_RST_N_BUF; + output [5:0] AXI_12_MC_STATUS; + output [7:0] AXI_12_PHY_STATUS; + output [255:0] AXI_12_RDATA; + output [31:0] AXI_12_RDATA_PARITY; + output [5:0] AXI_12_RID; + output AXI_12_RLAST; + output [1:0] AXI_12_RRESP; + output AXI_12_RVALID; + output AXI_12_WREADY; + output AXI_13_ARREADY; + output AXI_13_AWREADY; + output [5:0] AXI_13_BID; + output [1:0] AXI_13_BRESP; + output AXI_13_BVALID; + output [1:0] AXI_13_DFI_AW_AERR_N; + output AXI_13_DFI_CLK_BUF; + output [7:0] AXI_13_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_13_DFI_DW_RDDATA_DBI; + output [7:0] AXI_13_DFI_DW_RDDATA_DERR; + output [1:0] AXI_13_DFI_DW_RDDATA_VALID; + output AXI_13_DFI_INIT_COMPLETE; + output AXI_13_DFI_PHYUPD_REQ; + output AXI_13_DFI_PHY_LP_STATE; + output AXI_13_DFI_RST_N_BUF; + output [255:0] AXI_13_RDATA; + output [31:0] AXI_13_RDATA_PARITY; + output [5:0] AXI_13_RID; + output AXI_13_RLAST; + output [1:0] AXI_13_RRESP; + output AXI_13_RVALID; + output AXI_13_WREADY; + output AXI_14_ARREADY; + output AXI_14_AWREADY; + output [5:0] AXI_14_BID; + output [1:0] AXI_14_BRESP; + output AXI_14_BVALID; + output [1:0] AXI_14_DFI_AW_AERR_N; + output AXI_14_DFI_CLK_BUF; + output [7:0] AXI_14_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_14_DFI_DW_RDDATA_DBI; + output [7:0] AXI_14_DFI_DW_RDDATA_DERR; + output [1:0] AXI_14_DFI_DW_RDDATA_VALID; + output AXI_14_DFI_INIT_COMPLETE; + output AXI_14_DFI_PHYUPD_REQ; + output AXI_14_DFI_PHY_LP_STATE; + output AXI_14_DFI_RST_N_BUF; + output [5:0] AXI_14_MC_STATUS; + output [7:0] AXI_14_PHY_STATUS; + output [255:0] AXI_14_RDATA; + output [31:0] AXI_14_RDATA_PARITY; + output [5:0] AXI_14_RID; + output AXI_14_RLAST; + output [1:0] AXI_14_RRESP; + output AXI_14_RVALID; + output AXI_14_WREADY; + output AXI_15_ARREADY; + output AXI_15_AWREADY; + output [5:0] AXI_15_BID; + output [1:0] AXI_15_BRESP; + output AXI_15_BVALID; + output [1:0] AXI_15_DFI_AW_AERR_N; + output AXI_15_DFI_CLK_BUF; + output [7:0] AXI_15_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_15_DFI_DW_RDDATA_DBI; + output [7:0] AXI_15_DFI_DW_RDDATA_DERR; + output [1:0] AXI_15_DFI_DW_RDDATA_VALID; + output AXI_15_DFI_INIT_COMPLETE; + output AXI_15_DFI_PHYUPD_REQ; + output AXI_15_DFI_PHY_LP_STATE; + output AXI_15_DFI_RST_N_BUF; + output [255:0] AXI_15_RDATA; + output [31:0] AXI_15_RDATA_PARITY; + output [5:0] AXI_15_RID; + output AXI_15_RLAST; + output [1:0] AXI_15_RRESP; + output AXI_15_RVALID; + output AXI_15_WREADY; + output DRAM_0_STAT_CATTRIP; + output [2:0] DRAM_0_STAT_TEMP; + input [21:0] APB_0_PADDR; + (* invertible_pin = "IS_APB_0_PCLK_INVERTED" *) + input APB_0_PCLK; + input APB_0_PENABLE; + (* invertible_pin = "IS_APB_0_PRESET_N_INVERTED" *) + input APB_0_PRESET_N; + input APB_0_PSEL; + input [31:0] APB_0_PWDATA; + input APB_0_PWRITE; + (* invertible_pin = "IS_AXI_00_ACLK_INVERTED" *) + input AXI_00_ACLK; + input [36:0] AXI_00_ARADDR; + input [1:0] AXI_00_ARBURST; + (* invertible_pin = "IS_AXI_00_ARESET_N_INVERTED" *) + input AXI_00_ARESET_N; + input [5:0] AXI_00_ARID; + input [3:0] AXI_00_ARLEN; + input [2:0] AXI_00_ARSIZE; + input AXI_00_ARVALID; + input [36:0] AXI_00_AWADDR; + input [1:0] AXI_00_AWBURST; + input [5:0] AXI_00_AWID; + input [3:0] AXI_00_AWLEN; + input [2:0] AXI_00_AWSIZE; + input AXI_00_AWVALID; + input AXI_00_BREADY; + input AXI_00_DFI_LP_PWR_X_REQ; + input AXI_00_RREADY; + input [255:0] AXI_00_WDATA; + input [31:0] AXI_00_WDATA_PARITY; + input AXI_00_WLAST; + input [31:0] AXI_00_WSTRB; + input AXI_00_WVALID; + (* invertible_pin = "IS_AXI_01_ACLK_INVERTED" *) + input AXI_01_ACLK; + input [36:0] AXI_01_ARADDR; + input [1:0] AXI_01_ARBURST; + (* invertible_pin = "IS_AXI_01_ARESET_N_INVERTED" *) + input AXI_01_ARESET_N; + input [5:0] AXI_01_ARID; + input [3:0] AXI_01_ARLEN; + input [2:0] AXI_01_ARSIZE; + input AXI_01_ARVALID; + input [36:0] AXI_01_AWADDR; + input [1:0] AXI_01_AWBURST; + input [5:0] AXI_01_AWID; + input [3:0] AXI_01_AWLEN; + input [2:0] AXI_01_AWSIZE; + input AXI_01_AWVALID; + input AXI_01_BREADY; + input AXI_01_DFI_LP_PWR_X_REQ; + input AXI_01_RREADY; + input [255:0] AXI_01_WDATA; + input [31:0] AXI_01_WDATA_PARITY; + input AXI_01_WLAST; + input [31:0] AXI_01_WSTRB; + input AXI_01_WVALID; + (* invertible_pin = "IS_AXI_02_ACLK_INVERTED" *) + input AXI_02_ACLK; + input [36:0] AXI_02_ARADDR; + input [1:0] AXI_02_ARBURST; + (* invertible_pin = "IS_AXI_02_ARESET_N_INVERTED" *) + input AXI_02_ARESET_N; + input [5:0] AXI_02_ARID; + input [3:0] AXI_02_ARLEN; + input [2:0] AXI_02_ARSIZE; + input AXI_02_ARVALID; + input [36:0] AXI_02_AWADDR; + input [1:0] AXI_02_AWBURST; + input [5:0] AXI_02_AWID; + input [3:0] AXI_02_AWLEN; + input [2:0] AXI_02_AWSIZE; + input AXI_02_AWVALID; + input AXI_02_BREADY; + input AXI_02_DFI_LP_PWR_X_REQ; + input AXI_02_RREADY; + input [255:0] AXI_02_WDATA; + input [31:0] AXI_02_WDATA_PARITY; + input AXI_02_WLAST; + input [31:0] AXI_02_WSTRB; + input AXI_02_WVALID; + (* invertible_pin = "IS_AXI_03_ACLK_INVERTED" *) + input AXI_03_ACLK; + input [36:0] AXI_03_ARADDR; + input [1:0] AXI_03_ARBURST; + (* invertible_pin = "IS_AXI_03_ARESET_N_INVERTED" *) + input AXI_03_ARESET_N; + input [5:0] AXI_03_ARID; + input [3:0] AXI_03_ARLEN; + input [2:0] AXI_03_ARSIZE; + input AXI_03_ARVALID; + input [36:0] AXI_03_AWADDR; + input [1:0] AXI_03_AWBURST; + input [5:0] AXI_03_AWID; + input [3:0] AXI_03_AWLEN; + input [2:0] AXI_03_AWSIZE; + input AXI_03_AWVALID; + input AXI_03_BREADY; + input AXI_03_DFI_LP_PWR_X_REQ; + input AXI_03_RREADY; + input [255:0] AXI_03_WDATA; + input [31:0] AXI_03_WDATA_PARITY; + input AXI_03_WLAST; + input [31:0] AXI_03_WSTRB; + input AXI_03_WVALID; + (* invertible_pin = "IS_AXI_04_ACLK_INVERTED" *) + input AXI_04_ACLK; + input [36:0] AXI_04_ARADDR; + input [1:0] AXI_04_ARBURST; + (* invertible_pin = "IS_AXI_04_ARESET_N_INVERTED" *) + input AXI_04_ARESET_N; + input [5:0] AXI_04_ARID; + input [3:0] AXI_04_ARLEN; + input [2:0] AXI_04_ARSIZE; + input AXI_04_ARVALID; + input [36:0] AXI_04_AWADDR; + input [1:0] AXI_04_AWBURST; + input [5:0] AXI_04_AWID; + input [3:0] AXI_04_AWLEN; + input [2:0] AXI_04_AWSIZE; + input AXI_04_AWVALID; + input AXI_04_BREADY; + input AXI_04_DFI_LP_PWR_X_REQ; + input AXI_04_RREADY; + input [255:0] AXI_04_WDATA; + input [31:0] AXI_04_WDATA_PARITY; + input AXI_04_WLAST; + input [31:0] AXI_04_WSTRB; + input AXI_04_WVALID; + (* invertible_pin = "IS_AXI_05_ACLK_INVERTED" *) + input AXI_05_ACLK; + input [36:0] AXI_05_ARADDR; + input [1:0] AXI_05_ARBURST; + (* invertible_pin = "IS_AXI_05_ARESET_N_INVERTED" *) + input AXI_05_ARESET_N; + input [5:0] AXI_05_ARID; + input [3:0] AXI_05_ARLEN; + input [2:0] AXI_05_ARSIZE; + input AXI_05_ARVALID; + input [36:0] AXI_05_AWADDR; + input [1:0] AXI_05_AWBURST; + input [5:0] AXI_05_AWID; + input [3:0] AXI_05_AWLEN; + input [2:0] AXI_05_AWSIZE; + input AXI_05_AWVALID; + input AXI_05_BREADY; + input AXI_05_DFI_LP_PWR_X_REQ; + input AXI_05_RREADY; + input [255:0] AXI_05_WDATA; + input [31:0] AXI_05_WDATA_PARITY; + input AXI_05_WLAST; + input [31:0] AXI_05_WSTRB; + input AXI_05_WVALID; + (* invertible_pin = "IS_AXI_06_ACLK_INVERTED" *) + input AXI_06_ACLK; + input [36:0] AXI_06_ARADDR; + input [1:0] AXI_06_ARBURST; + (* invertible_pin = "IS_AXI_06_ARESET_N_INVERTED" *) + input AXI_06_ARESET_N; + input [5:0] AXI_06_ARID; + input [3:0] AXI_06_ARLEN; + input [2:0] AXI_06_ARSIZE; + input AXI_06_ARVALID; + input [36:0] AXI_06_AWADDR; + input [1:0] AXI_06_AWBURST; + input [5:0] AXI_06_AWID; + input [3:0] AXI_06_AWLEN; + input [2:0] AXI_06_AWSIZE; + input AXI_06_AWVALID; + input AXI_06_BREADY; + input AXI_06_DFI_LP_PWR_X_REQ; + input AXI_06_RREADY; + input [255:0] AXI_06_WDATA; + input [31:0] AXI_06_WDATA_PARITY; + input AXI_06_WLAST; + input [31:0] AXI_06_WSTRB; + input AXI_06_WVALID; + (* invertible_pin = "IS_AXI_07_ACLK_INVERTED" *) + input AXI_07_ACLK; + input [36:0] AXI_07_ARADDR; + input [1:0] AXI_07_ARBURST; + (* invertible_pin = "IS_AXI_07_ARESET_N_INVERTED" *) + input AXI_07_ARESET_N; + input [5:0] AXI_07_ARID; + input [3:0] AXI_07_ARLEN; + input [2:0] AXI_07_ARSIZE; + input AXI_07_ARVALID; + input [36:0] AXI_07_AWADDR; + input [1:0] AXI_07_AWBURST; + input [5:0] AXI_07_AWID; + input [3:0] AXI_07_AWLEN; + input [2:0] AXI_07_AWSIZE; + input AXI_07_AWVALID; + input AXI_07_BREADY; + input AXI_07_DFI_LP_PWR_X_REQ; + input AXI_07_RREADY; + input [255:0] AXI_07_WDATA; + input [31:0] AXI_07_WDATA_PARITY; + input AXI_07_WLAST; + input [31:0] AXI_07_WSTRB; + input AXI_07_WVALID; + (* invertible_pin = "IS_AXI_08_ACLK_INVERTED" *) + input AXI_08_ACLK; + input [36:0] AXI_08_ARADDR; + input [1:0] AXI_08_ARBURST; + (* invertible_pin = "IS_AXI_08_ARESET_N_INVERTED" *) + input AXI_08_ARESET_N; + input [5:0] AXI_08_ARID; + input [3:0] AXI_08_ARLEN; + input [2:0] AXI_08_ARSIZE; + input AXI_08_ARVALID; + input [36:0] AXI_08_AWADDR; + input [1:0] AXI_08_AWBURST; + input [5:0] AXI_08_AWID; + input [3:0] AXI_08_AWLEN; + input [2:0] AXI_08_AWSIZE; + input AXI_08_AWVALID; + input AXI_08_BREADY; + input AXI_08_DFI_LP_PWR_X_REQ; + input AXI_08_RREADY; + input [255:0] AXI_08_WDATA; + input [31:0] AXI_08_WDATA_PARITY; + input AXI_08_WLAST; + input [31:0] AXI_08_WSTRB; + input AXI_08_WVALID; + (* invertible_pin = "IS_AXI_09_ACLK_INVERTED" *) + input AXI_09_ACLK; + input [36:0] AXI_09_ARADDR; + input [1:0] AXI_09_ARBURST; + (* invertible_pin = "IS_AXI_09_ARESET_N_INVERTED" *) + input AXI_09_ARESET_N; + input [5:0] AXI_09_ARID; + input [3:0] AXI_09_ARLEN; + input [2:0] AXI_09_ARSIZE; + input AXI_09_ARVALID; + input [36:0] AXI_09_AWADDR; + input [1:0] AXI_09_AWBURST; + input [5:0] AXI_09_AWID; + input [3:0] AXI_09_AWLEN; + input [2:0] AXI_09_AWSIZE; + input AXI_09_AWVALID; + input AXI_09_BREADY; + input AXI_09_DFI_LP_PWR_X_REQ; + input AXI_09_RREADY; + input [255:0] AXI_09_WDATA; + input [31:0] AXI_09_WDATA_PARITY; + input AXI_09_WLAST; + input [31:0] AXI_09_WSTRB; + input AXI_09_WVALID; + (* invertible_pin = "IS_AXI_10_ACLK_INVERTED" *) + input AXI_10_ACLK; + input [36:0] AXI_10_ARADDR; + input [1:0] AXI_10_ARBURST; + (* invertible_pin = "IS_AXI_10_ARESET_N_INVERTED" *) + input AXI_10_ARESET_N; + input [5:0] AXI_10_ARID; + input [3:0] AXI_10_ARLEN; + input [2:0] AXI_10_ARSIZE; + input AXI_10_ARVALID; + input [36:0] AXI_10_AWADDR; + input [1:0] AXI_10_AWBURST; + input [5:0] AXI_10_AWID; + input [3:0] AXI_10_AWLEN; + input [2:0] AXI_10_AWSIZE; + input AXI_10_AWVALID; + input AXI_10_BREADY; + input AXI_10_DFI_LP_PWR_X_REQ; + input AXI_10_RREADY; + input [255:0] AXI_10_WDATA; + input [31:0] AXI_10_WDATA_PARITY; + input AXI_10_WLAST; + input [31:0] AXI_10_WSTRB; + input AXI_10_WVALID; + (* invertible_pin = "IS_AXI_11_ACLK_INVERTED" *) + input AXI_11_ACLK; + input [36:0] AXI_11_ARADDR; + input [1:0] AXI_11_ARBURST; + (* invertible_pin = "IS_AXI_11_ARESET_N_INVERTED" *) + input AXI_11_ARESET_N; + input [5:0] AXI_11_ARID; + input [3:0] AXI_11_ARLEN; + input [2:0] AXI_11_ARSIZE; + input AXI_11_ARVALID; + input [36:0] AXI_11_AWADDR; + input [1:0] AXI_11_AWBURST; + input [5:0] AXI_11_AWID; + input [3:0] AXI_11_AWLEN; + input [2:0] AXI_11_AWSIZE; + input AXI_11_AWVALID; + input AXI_11_BREADY; + input AXI_11_DFI_LP_PWR_X_REQ; + input AXI_11_RREADY; + input [255:0] AXI_11_WDATA; + input [31:0] AXI_11_WDATA_PARITY; + input AXI_11_WLAST; + input [31:0] AXI_11_WSTRB; + input AXI_11_WVALID; + (* invertible_pin = "IS_AXI_12_ACLK_INVERTED" *) + input AXI_12_ACLK; + input [36:0] AXI_12_ARADDR; + input [1:0] AXI_12_ARBURST; + (* invertible_pin = "IS_AXI_12_ARESET_N_INVERTED" *) + input AXI_12_ARESET_N; + input [5:0] AXI_12_ARID; + input [3:0] AXI_12_ARLEN; + input [2:0] AXI_12_ARSIZE; + input AXI_12_ARVALID; + input [36:0] AXI_12_AWADDR; + input [1:0] AXI_12_AWBURST; + input [5:0] AXI_12_AWID; + input [3:0] AXI_12_AWLEN; + input [2:0] AXI_12_AWSIZE; + input AXI_12_AWVALID; + input AXI_12_BREADY; + input AXI_12_DFI_LP_PWR_X_REQ; + input AXI_12_RREADY; + input [255:0] AXI_12_WDATA; + input [31:0] AXI_12_WDATA_PARITY; + input AXI_12_WLAST; + input [31:0] AXI_12_WSTRB; + input AXI_12_WVALID; + (* invertible_pin = "IS_AXI_13_ACLK_INVERTED" *) + input AXI_13_ACLK; + input [36:0] AXI_13_ARADDR; + input [1:0] AXI_13_ARBURST; + (* invertible_pin = "IS_AXI_13_ARESET_N_INVERTED" *) + input AXI_13_ARESET_N; + input [5:0] AXI_13_ARID; + input [3:0] AXI_13_ARLEN; + input [2:0] AXI_13_ARSIZE; + input AXI_13_ARVALID; + input [36:0] AXI_13_AWADDR; + input [1:0] AXI_13_AWBURST; + input [5:0] AXI_13_AWID; + input [3:0] AXI_13_AWLEN; + input [2:0] AXI_13_AWSIZE; + input AXI_13_AWVALID; + input AXI_13_BREADY; + input AXI_13_DFI_LP_PWR_X_REQ; + input AXI_13_RREADY; + input [255:0] AXI_13_WDATA; + input [31:0] AXI_13_WDATA_PARITY; + input AXI_13_WLAST; + input [31:0] AXI_13_WSTRB; + input AXI_13_WVALID; + (* invertible_pin = "IS_AXI_14_ACLK_INVERTED" *) + input AXI_14_ACLK; + input [36:0] AXI_14_ARADDR; + input [1:0] AXI_14_ARBURST; + (* invertible_pin = "IS_AXI_14_ARESET_N_INVERTED" *) + input AXI_14_ARESET_N; + input [5:0] AXI_14_ARID; + input [3:0] AXI_14_ARLEN; + input [2:0] AXI_14_ARSIZE; + input AXI_14_ARVALID; + input [36:0] AXI_14_AWADDR; + input [1:0] AXI_14_AWBURST; + input [5:0] AXI_14_AWID; + input [3:0] AXI_14_AWLEN; + input [2:0] AXI_14_AWSIZE; + input AXI_14_AWVALID; + input AXI_14_BREADY; + input AXI_14_DFI_LP_PWR_X_REQ; + input AXI_14_RREADY; + input [255:0] AXI_14_WDATA; + input [31:0] AXI_14_WDATA_PARITY; + input AXI_14_WLAST; + input [31:0] AXI_14_WSTRB; + input AXI_14_WVALID; + (* invertible_pin = "IS_AXI_15_ACLK_INVERTED" *) + input AXI_15_ACLK; + input [36:0] AXI_15_ARADDR; + input [1:0] AXI_15_ARBURST; + (* invertible_pin = "IS_AXI_15_ARESET_N_INVERTED" *) + input AXI_15_ARESET_N; + input [5:0] AXI_15_ARID; + input [3:0] AXI_15_ARLEN; + input [2:0] AXI_15_ARSIZE; + input AXI_15_ARVALID; + input [36:0] AXI_15_AWADDR; + input [1:0] AXI_15_AWBURST; + input [5:0] AXI_15_AWID; + input [3:0] AXI_15_AWLEN; + input [2:0] AXI_15_AWSIZE; + input AXI_15_AWVALID; + input AXI_15_BREADY; + input AXI_15_DFI_LP_PWR_X_REQ; + input AXI_15_RREADY; + input [255:0] AXI_15_WDATA; + input [31:0] AXI_15_WDATA_PARITY; + input AXI_15_WLAST; + input [31:0] AXI_15_WSTRB; + input AXI_15_WVALID; + input BSCAN_DRCK; + input BSCAN_TCK; + input HBM_REF_CLK; + input MBIST_EN_00; + input MBIST_EN_01; + input MBIST_EN_02; + input MBIST_EN_03; + input MBIST_EN_04; + input MBIST_EN_05; + input MBIST_EN_06; + input MBIST_EN_07; +endmodule + +(* keep *) +module HBM_TWO_STACK_INTF (...); + parameter CLK_SEL_00 = "FALSE"; + parameter CLK_SEL_01 = "FALSE"; + parameter CLK_SEL_02 = "FALSE"; + parameter CLK_SEL_03 = "FALSE"; + parameter CLK_SEL_04 = "FALSE"; + parameter CLK_SEL_05 = "FALSE"; + parameter CLK_SEL_06 = "FALSE"; + parameter CLK_SEL_07 = "FALSE"; + parameter CLK_SEL_08 = "FALSE"; + parameter CLK_SEL_09 = "FALSE"; + parameter CLK_SEL_10 = "FALSE"; + parameter CLK_SEL_11 = "FALSE"; + parameter CLK_SEL_12 = "FALSE"; + parameter CLK_SEL_13 = "FALSE"; + parameter CLK_SEL_14 = "FALSE"; + parameter CLK_SEL_15 = "FALSE"; + parameter CLK_SEL_16 = "FALSE"; + parameter CLK_SEL_17 = "FALSE"; + parameter CLK_SEL_18 = "FALSE"; + parameter CLK_SEL_19 = "FALSE"; + parameter CLK_SEL_20 = "FALSE"; + parameter CLK_SEL_21 = "FALSE"; + parameter CLK_SEL_22 = "FALSE"; + parameter CLK_SEL_23 = "FALSE"; + parameter CLK_SEL_24 = "FALSE"; + parameter CLK_SEL_25 = "FALSE"; + parameter CLK_SEL_26 = "FALSE"; + parameter CLK_SEL_27 = "FALSE"; + parameter CLK_SEL_28 = "FALSE"; + parameter CLK_SEL_29 = "FALSE"; + parameter CLK_SEL_30 = "FALSE"; + parameter CLK_SEL_31 = "FALSE"; + parameter integer DATARATE_00 = 1800; + parameter integer DATARATE_01 = 1800; + parameter integer DATARATE_02 = 1800; + parameter integer DATARATE_03 = 1800; + parameter integer DATARATE_04 = 1800; + parameter integer DATARATE_05 = 1800; + parameter integer DATARATE_06 = 1800; + parameter integer DATARATE_07 = 1800; + parameter integer DATARATE_08 = 1800; + parameter integer DATARATE_09 = 1800; + parameter integer DATARATE_10 = 1800; + parameter integer DATARATE_11 = 1800; + parameter integer DATARATE_12 = 1800; + parameter integer DATARATE_13 = 1800; + parameter integer DATARATE_14 = 1800; + parameter integer DATARATE_15 = 1800; + parameter DA_LOCKOUT_0 = "FALSE"; + parameter DA_LOCKOUT_1 = "FALSE"; + parameter [0:0] IS_APB_0_PCLK_INVERTED = 1'b0; + parameter [0:0] IS_APB_0_PRESET_N_INVERTED = 1'b0; + parameter [0:0] IS_APB_1_PCLK_INVERTED = 1'b0; + parameter [0:0] IS_APB_1_PRESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_00_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_00_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_01_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_01_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_02_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_02_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_03_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_03_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_04_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_04_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_05_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_05_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_06_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_06_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_07_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_07_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_08_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_08_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_09_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_09_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_10_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_10_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_11_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_11_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_12_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_12_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_13_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_13_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_14_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_14_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_15_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_15_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_16_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_16_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_17_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_17_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_18_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_18_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_19_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_19_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_20_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_20_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_21_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_21_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_22_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_22_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_23_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_23_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_24_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_24_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_25_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_25_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_26_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_26_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_27_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_27_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_28_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_28_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_29_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_29_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_30_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_30_ARESET_N_INVERTED = 1'b0; + parameter [0:0] IS_AXI_31_ACLK_INVERTED = 1'b0; + parameter [0:0] IS_AXI_31_ARESET_N_INVERTED = 1'b0; + parameter MC_ENABLE_00 = "FALSE"; + parameter MC_ENABLE_01 = "FALSE"; + parameter MC_ENABLE_02 = "FALSE"; + parameter MC_ENABLE_03 = "FALSE"; + parameter MC_ENABLE_04 = "FALSE"; + parameter MC_ENABLE_05 = "FALSE"; + parameter MC_ENABLE_06 = "FALSE"; + parameter MC_ENABLE_07 = "FALSE"; + parameter MC_ENABLE_08 = "FALSE"; + parameter MC_ENABLE_09 = "FALSE"; + parameter MC_ENABLE_10 = "FALSE"; + parameter MC_ENABLE_11 = "FALSE"; + parameter MC_ENABLE_12 = "FALSE"; + parameter MC_ENABLE_13 = "FALSE"; + parameter MC_ENABLE_14 = "FALSE"; + parameter MC_ENABLE_15 = "FALSE"; + parameter MC_ENABLE_APB_00 = "FALSE"; + parameter MC_ENABLE_APB_01 = "FALSE"; + parameter integer PAGEHIT_PERCENT_00 = 75; + parameter integer PAGEHIT_PERCENT_01 = 75; + parameter PHY_ENABLE_00 = "FALSE"; + parameter PHY_ENABLE_01 = "FALSE"; + parameter PHY_ENABLE_02 = "FALSE"; + parameter PHY_ENABLE_03 = "FALSE"; + parameter PHY_ENABLE_04 = "FALSE"; + parameter PHY_ENABLE_05 = "FALSE"; + parameter PHY_ENABLE_06 = "FALSE"; + parameter PHY_ENABLE_07 = "FALSE"; + parameter PHY_ENABLE_08 = "FALSE"; + parameter PHY_ENABLE_09 = "FALSE"; + parameter PHY_ENABLE_10 = "FALSE"; + parameter PHY_ENABLE_11 = "FALSE"; + parameter PHY_ENABLE_12 = "FALSE"; + parameter PHY_ENABLE_13 = "FALSE"; + parameter PHY_ENABLE_14 = "FALSE"; + parameter PHY_ENABLE_15 = "FALSE"; + parameter PHY_ENABLE_16 = "FALSE"; + parameter PHY_ENABLE_17 = "FALSE"; + parameter PHY_ENABLE_18 = "FALSE"; + parameter PHY_ENABLE_19 = "FALSE"; + parameter PHY_ENABLE_20 = "FALSE"; + parameter PHY_ENABLE_21 = "FALSE"; + parameter PHY_ENABLE_22 = "FALSE"; + parameter PHY_ENABLE_23 = "FALSE"; + parameter PHY_ENABLE_24 = "FALSE"; + parameter PHY_ENABLE_25 = "FALSE"; + parameter PHY_ENABLE_26 = "FALSE"; + parameter PHY_ENABLE_27 = "FALSE"; + parameter PHY_ENABLE_28 = "FALSE"; + parameter PHY_ENABLE_29 = "FALSE"; + parameter PHY_ENABLE_30 = "FALSE"; + parameter PHY_ENABLE_31 = "FALSE"; + parameter PHY_ENABLE_APB_00 = "FALSE"; + parameter PHY_ENABLE_APB_01 = "FALSE"; + parameter PHY_PCLK_INVERT_01 = "FALSE"; + parameter PHY_PCLK_INVERT_02 = "FALSE"; + parameter integer READ_PERCENT_00 = 50; + parameter integer READ_PERCENT_01 = 50; + parameter integer READ_PERCENT_02 = 50; + parameter integer READ_PERCENT_03 = 50; + parameter integer READ_PERCENT_04 = 50; + parameter integer READ_PERCENT_05 = 50; + parameter integer READ_PERCENT_06 = 50; + parameter integer READ_PERCENT_07 = 50; + parameter integer READ_PERCENT_08 = 50; + parameter integer READ_PERCENT_09 = 50; + parameter integer READ_PERCENT_10 = 50; + parameter integer READ_PERCENT_11 = 50; + parameter integer READ_PERCENT_12 = 50; + parameter integer READ_PERCENT_13 = 50; + parameter integer READ_PERCENT_14 = 50; + parameter integer READ_PERCENT_15 = 50; + parameter integer READ_PERCENT_16 = 50; + parameter integer READ_PERCENT_17 = 50; + parameter integer READ_PERCENT_18 = 50; + parameter integer READ_PERCENT_19 = 50; + parameter integer READ_PERCENT_20 = 50; + parameter integer READ_PERCENT_21 = 50; + parameter integer READ_PERCENT_22 = 50; + parameter integer READ_PERCENT_23 = 50; + parameter integer READ_PERCENT_24 = 50; + parameter integer READ_PERCENT_25 = 50; + parameter integer READ_PERCENT_26 = 50; + parameter integer READ_PERCENT_27 = 50; + parameter integer READ_PERCENT_28 = 50; + parameter integer READ_PERCENT_29 = 50; + parameter integer READ_PERCENT_30 = 50; + parameter integer READ_PERCENT_31 = 50; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter SWITCH_ENABLE_00 = "FALSE"; + parameter SWITCH_ENABLE_01 = "FALSE"; + parameter integer WRITE_PERCENT_00 = 50; + parameter integer WRITE_PERCENT_01 = 50; + parameter integer WRITE_PERCENT_02 = 50; + parameter integer WRITE_PERCENT_03 = 50; + parameter integer WRITE_PERCENT_04 = 50; + parameter integer WRITE_PERCENT_05 = 50; + parameter integer WRITE_PERCENT_06 = 50; + parameter integer WRITE_PERCENT_07 = 50; + parameter integer WRITE_PERCENT_08 = 50; + parameter integer WRITE_PERCENT_09 = 50; + parameter integer WRITE_PERCENT_10 = 50; + parameter integer WRITE_PERCENT_11 = 50; + parameter integer WRITE_PERCENT_12 = 50; + parameter integer WRITE_PERCENT_13 = 50; + parameter integer WRITE_PERCENT_14 = 50; + parameter integer WRITE_PERCENT_15 = 50; + parameter integer WRITE_PERCENT_16 = 50; + parameter integer WRITE_PERCENT_17 = 50; + parameter integer WRITE_PERCENT_18 = 50; + parameter integer WRITE_PERCENT_19 = 50; + parameter integer WRITE_PERCENT_20 = 50; + parameter integer WRITE_PERCENT_21 = 50; + parameter integer WRITE_PERCENT_22 = 50; + parameter integer WRITE_PERCENT_23 = 50; + parameter integer WRITE_PERCENT_24 = 50; + parameter integer WRITE_PERCENT_25 = 50; + parameter integer WRITE_PERCENT_26 = 50; + parameter integer WRITE_PERCENT_27 = 50; + parameter integer WRITE_PERCENT_28 = 50; + parameter integer WRITE_PERCENT_29 = 50; + parameter integer WRITE_PERCENT_30 = 50; + parameter integer WRITE_PERCENT_31 = 50; + output [31:0] APB_0_PRDATA; + output APB_0_PREADY; + output APB_0_PSLVERR; + output [31:0] APB_1_PRDATA; + output APB_1_PREADY; + output APB_1_PSLVERR; + output AXI_00_ARREADY; + output AXI_00_AWREADY; + output [5:0] AXI_00_BID; + output [1:0] AXI_00_BRESP; + output AXI_00_BVALID; + output [1:0] AXI_00_DFI_AW_AERR_N; + output AXI_00_DFI_CLK_BUF; + output [7:0] AXI_00_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_00_DFI_DW_RDDATA_DBI; + output [7:0] AXI_00_DFI_DW_RDDATA_DERR; + output [1:0] AXI_00_DFI_DW_RDDATA_VALID; + output AXI_00_DFI_INIT_COMPLETE; + output AXI_00_DFI_PHYUPD_REQ; + output AXI_00_DFI_PHY_LP_STATE; + output AXI_00_DFI_RST_N_BUF; + output [5:0] AXI_00_MC_STATUS; + output [7:0] AXI_00_PHY_STATUS; + output [255:0] AXI_00_RDATA; + output [31:0] AXI_00_RDATA_PARITY; + output [5:0] AXI_00_RID; + output AXI_00_RLAST; + output [1:0] AXI_00_RRESP; + output AXI_00_RVALID; + output AXI_00_WREADY; + output AXI_01_ARREADY; + output AXI_01_AWREADY; + output [5:0] AXI_01_BID; + output [1:0] AXI_01_BRESP; + output AXI_01_BVALID; + output [1:0] AXI_01_DFI_AW_AERR_N; + output AXI_01_DFI_CLK_BUF; + output [7:0] AXI_01_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_01_DFI_DW_RDDATA_DBI; + output [7:0] AXI_01_DFI_DW_RDDATA_DERR; + output [1:0] AXI_01_DFI_DW_RDDATA_VALID; + output AXI_01_DFI_INIT_COMPLETE; + output AXI_01_DFI_PHYUPD_REQ; + output AXI_01_DFI_PHY_LP_STATE; + output AXI_01_DFI_RST_N_BUF; + output [255:0] AXI_01_RDATA; + output [31:0] AXI_01_RDATA_PARITY; + output [5:0] AXI_01_RID; + output AXI_01_RLAST; + output [1:0] AXI_01_RRESP; + output AXI_01_RVALID; + output AXI_01_WREADY; + output AXI_02_ARREADY; + output AXI_02_AWREADY; + output [5:0] AXI_02_BID; + output [1:0] AXI_02_BRESP; + output AXI_02_BVALID; + output [1:0] AXI_02_DFI_AW_AERR_N; + output AXI_02_DFI_CLK_BUF; + output [7:0] AXI_02_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_02_DFI_DW_RDDATA_DBI; + output [7:0] AXI_02_DFI_DW_RDDATA_DERR; + output [1:0] AXI_02_DFI_DW_RDDATA_VALID; + output AXI_02_DFI_INIT_COMPLETE; + output AXI_02_DFI_PHYUPD_REQ; + output AXI_02_DFI_PHY_LP_STATE; + output AXI_02_DFI_RST_N_BUF; + output [5:0] AXI_02_MC_STATUS; + output [7:0] AXI_02_PHY_STATUS; + output [255:0] AXI_02_RDATA; + output [31:0] AXI_02_RDATA_PARITY; + output [5:0] AXI_02_RID; + output AXI_02_RLAST; + output [1:0] AXI_02_RRESP; + output AXI_02_RVALID; + output AXI_02_WREADY; + output AXI_03_ARREADY; + output AXI_03_AWREADY; + output [5:0] AXI_03_BID; + output [1:0] AXI_03_BRESP; + output AXI_03_BVALID; + output [1:0] AXI_03_DFI_AW_AERR_N; + output AXI_03_DFI_CLK_BUF; + output [7:0] AXI_03_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_03_DFI_DW_RDDATA_DBI; + output [7:0] AXI_03_DFI_DW_RDDATA_DERR; + output [1:0] AXI_03_DFI_DW_RDDATA_VALID; + output AXI_03_DFI_INIT_COMPLETE; + output AXI_03_DFI_PHYUPD_REQ; + output AXI_03_DFI_PHY_LP_STATE; + output AXI_03_DFI_RST_N_BUF; + output [255:0] AXI_03_RDATA; + output [31:0] AXI_03_RDATA_PARITY; + output [5:0] AXI_03_RID; + output AXI_03_RLAST; + output [1:0] AXI_03_RRESP; + output AXI_03_RVALID; + output AXI_03_WREADY; + output AXI_04_ARREADY; + output AXI_04_AWREADY; + output [5:0] AXI_04_BID; + output [1:0] AXI_04_BRESP; + output AXI_04_BVALID; + output [1:0] AXI_04_DFI_AW_AERR_N; + output AXI_04_DFI_CLK_BUF; + output [7:0] AXI_04_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_04_DFI_DW_RDDATA_DBI; + output [7:0] AXI_04_DFI_DW_RDDATA_DERR; + output [1:0] AXI_04_DFI_DW_RDDATA_VALID; + output AXI_04_DFI_INIT_COMPLETE; + output AXI_04_DFI_PHYUPD_REQ; + output AXI_04_DFI_PHY_LP_STATE; + output AXI_04_DFI_RST_N_BUF; + output [5:0] AXI_04_MC_STATUS; + output [7:0] AXI_04_PHY_STATUS; + output [255:0] AXI_04_RDATA; + output [31:0] AXI_04_RDATA_PARITY; + output [5:0] AXI_04_RID; + output AXI_04_RLAST; + output [1:0] AXI_04_RRESP; + output AXI_04_RVALID; + output AXI_04_WREADY; + output AXI_05_ARREADY; + output AXI_05_AWREADY; + output [5:0] AXI_05_BID; + output [1:0] AXI_05_BRESP; + output AXI_05_BVALID; + output [1:0] AXI_05_DFI_AW_AERR_N; + output AXI_05_DFI_CLK_BUF; + output [7:0] AXI_05_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_05_DFI_DW_RDDATA_DBI; + output [7:0] AXI_05_DFI_DW_RDDATA_DERR; + output [1:0] AXI_05_DFI_DW_RDDATA_VALID; + output AXI_05_DFI_INIT_COMPLETE; + output AXI_05_DFI_PHYUPD_REQ; + output AXI_05_DFI_PHY_LP_STATE; + output AXI_05_DFI_RST_N_BUF; + output [255:0] AXI_05_RDATA; + output [31:0] AXI_05_RDATA_PARITY; + output [5:0] AXI_05_RID; + output AXI_05_RLAST; + output [1:0] AXI_05_RRESP; + output AXI_05_RVALID; + output AXI_05_WREADY; + output AXI_06_ARREADY; + output AXI_06_AWREADY; + output [5:0] AXI_06_BID; + output [1:0] AXI_06_BRESP; + output AXI_06_BVALID; + output [1:0] AXI_06_DFI_AW_AERR_N; + output AXI_06_DFI_CLK_BUF; + output [7:0] AXI_06_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_06_DFI_DW_RDDATA_DBI; + output [7:0] AXI_06_DFI_DW_RDDATA_DERR; + output [1:0] AXI_06_DFI_DW_RDDATA_VALID; + output AXI_06_DFI_INIT_COMPLETE; + output AXI_06_DFI_PHYUPD_REQ; + output AXI_06_DFI_PHY_LP_STATE; + output AXI_06_DFI_RST_N_BUF; + output [5:0] AXI_06_MC_STATUS; + output [7:0] AXI_06_PHY_STATUS; + output [255:0] AXI_06_RDATA; + output [31:0] AXI_06_RDATA_PARITY; + output [5:0] AXI_06_RID; + output AXI_06_RLAST; + output [1:0] AXI_06_RRESP; + output AXI_06_RVALID; + output AXI_06_WREADY; + output AXI_07_ARREADY; + output AXI_07_AWREADY; + output [5:0] AXI_07_BID; + output [1:0] AXI_07_BRESP; + output AXI_07_BVALID; + output [1:0] AXI_07_DFI_AW_AERR_N; + output AXI_07_DFI_CLK_BUF; + output [7:0] AXI_07_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_07_DFI_DW_RDDATA_DBI; + output [7:0] AXI_07_DFI_DW_RDDATA_DERR; + output [1:0] AXI_07_DFI_DW_RDDATA_VALID; + output AXI_07_DFI_INIT_COMPLETE; + output AXI_07_DFI_PHYUPD_REQ; + output AXI_07_DFI_PHY_LP_STATE; + output AXI_07_DFI_RST_N_BUF; + output [255:0] AXI_07_RDATA; + output [31:0] AXI_07_RDATA_PARITY; + output [5:0] AXI_07_RID; + output AXI_07_RLAST; + output [1:0] AXI_07_RRESP; + output AXI_07_RVALID; + output AXI_07_WREADY; + output AXI_08_ARREADY; + output AXI_08_AWREADY; + output [5:0] AXI_08_BID; + output [1:0] AXI_08_BRESP; + output AXI_08_BVALID; + output [1:0] AXI_08_DFI_AW_AERR_N; + output AXI_08_DFI_CLK_BUF; + output [7:0] AXI_08_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_08_DFI_DW_RDDATA_DBI; + output [7:0] AXI_08_DFI_DW_RDDATA_DERR; + output [1:0] AXI_08_DFI_DW_RDDATA_VALID; + output AXI_08_DFI_INIT_COMPLETE; + output AXI_08_DFI_PHYUPD_REQ; + output AXI_08_DFI_PHY_LP_STATE; + output AXI_08_DFI_RST_N_BUF; + output [5:0] AXI_08_MC_STATUS; + output [7:0] AXI_08_PHY_STATUS; + output [255:0] AXI_08_RDATA; + output [31:0] AXI_08_RDATA_PARITY; + output [5:0] AXI_08_RID; + output AXI_08_RLAST; + output [1:0] AXI_08_RRESP; + output AXI_08_RVALID; + output AXI_08_WREADY; + output AXI_09_ARREADY; + output AXI_09_AWREADY; + output [5:0] AXI_09_BID; + output [1:0] AXI_09_BRESP; + output AXI_09_BVALID; + output [1:0] AXI_09_DFI_AW_AERR_N; + output AXI_09_DFI_CLK_BUF; + output [7:0] AXI_09_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_09_DFI_DW_RDDATA_DBI; + output [7:0] AXI_09_DFI_DW_RDDATA_DERR; + output [1:0] AXI_09_DFI_DW_RDDATA_VALID; + output AXI_09_DFI_INIT_COMPLETE; + output AXI_09_DFI_PHYUPD_REQ; + output AXI_09_DFI_PHY_LP_STATE; + output AXI_09_DFI_RST_N_BUF; + output [255:0] AXI_09_RDATA; + output [31:0] AXI_09_RDATA_PARITY; + output [5:0] AXI_09_RID; + output AXI_09_RLAST; + output [1:0] AXI_09_RRESP; + output AXI_09_RVALID; + output AXI_09_WREADY; + output AXI_10_ARREADY; + output AXI_10_AWREADY; + output [5:0] AXI_10_BID; + output [1:0] AXI_10_BRESP; + output AXI_10_BVALID; + output [1:0] AXI_10_DFI_AW_AERR_N; + output AXI_10_DFI_CLK_BUF; + output [7:0] AXI_10_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_10_DFI_DW_RDDATA_DBI; + output [7:0] AXI_10_DFI_DW_RDDATA_DERR; + output [1:0] AXI_10_DFI_DW_RDDATA_VALID; + output AXI_10_DFI_INIT_COMPLETE; + output AXI_10_DFI_PHYUPD_REQ; + output AXI_10_DFI_PHY_LP_STATE; + output AXI_10_DFI_RST_N_BUF; + output [5:0] AXI_10_MC_STATUS; + output [7:0] AXI_10_PHY_STATUS; + output [255:0] AXI_10_RDATA; + output [31:0] AXI_10_RDATA_PARITY; + output [5:0] AXI_10_RID; + output AXI_10_RLAST; + output [1:0] AXI_10_RRESP; + output AXI_10_RVALID; + output AXI_10_WREADY; + output AXI_11_ARREADY; + output AXI_11_AWREADY; + output [5:0] AXI_11_BID; + output [1:0] AXI_11_BRESP; + output AXI_11_BVALID; + output [1:0] AXI_11_DFI_AW_AERR_N; + output AXI_11_DFI_CLK_BUF; + output [7:0] AXI_11_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_11_DFI_DW_RDDATA_DBI; + output [7:0] AXI_11_DFI_DW_RDDATA_DERR; + output [1:0] AXI_11_DFI_DW_RDDATA_VALID; + output AXI_11_DFI_INIT_COMPLETE; + output AXI_11_DFI_PHYUPD_REQ; + output AXI_11_DFI_PHY_LP_STATE; + output AXI_11_DFI_RST_N_BUF; + output [255:0] AXI_11_RDATA; + output [31:0] AXI_11_RDATA_PARITY; + output [5:0] AXI_11_RID; + output AXI_11_RLAST; + output [1:0] AXI_11_RRESP; + output AXI_11_RVALID; + output AXI_11_WREADY; + output AXI_12_ARREADY; + output AXI_12_AWREADY; + output [5:0] AXI_12_BID; + output [1:0] AXI_12_BRESP; + output AXI_12_BVALID; + output [1:0] AXI_12_DFI_AW_AERR_N; + output AXI_12_DFI_CLK_BUF; + output [7:0] AXI_12_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_12_DFI_DW_RDDATA_DBI; + output [7:0] AXI_12_DFI_DW_RDDATA_DERR; + output [1:0] AXI_12_DFI_DW_RDDATA_VALID; + output AXI_12_DFI_INIT_COMPLETE; + output AXI_12_DFI_PHYUPD_REQ; + output AXI_12_DFI_PHY_LP_STATE; + output AXI_12_DFI_RST_N_BUF; + output [5:0] AXI_12_MC_STATUS; + output [7:0] AXI_12_PHY_STATUS; + output [255:0] AXI_12_RDATA; + output [31:0] AXI_12_RDATA_PARITY; + output [5:0] AXI_12_RID; + output AXI_12_RLAST; + output [1:0] AXI_12_RRESP; + output AXI_12_RVALID; + output AXI_12_WREADY; + output AXI_13_ARREADY; + output AXI_13_AWREADY; + output [5:0] AXI_13_BID; + output [1:0] AXI_13_BRESP; + output AXI_13_BVALID; + output [1:0] AXI_13_DFI_AW_AERR_N; + output AXI_13_DFI_CLK_BUF; + output [7:0] AXI_13_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_13_DFI_DW_RDDATA_DBI; + output [7:0] AXI_13_DFI_DW_RDDATA_DERR; + output [1:0] AXI_13_DFI_DW_RDDATA_VALID; + output AXI_13_DFI_INIT_COMPLETE; + output AXI_13_DFI_PHYUPD_REQ; + output AXI_13_DFI_PHY_LP_STATE; + output AXI_13_DFI_RST_N_BUF; + output [255:0] AXI_13_RDATA; + output [31:0] AXI_13_RDATA_PARITY; + output [5:0] AXI_13_RID; + output AXI_13_RLAST; + output [1:0] AXI_13_RRESP; + output AXI_13_RVALID; + output AXI_13_WREADY; + output AXI_14_ARREADY; + output AXI_14_AWREADY; + output [5:0] AXI_14_BID; + output [1:0] AXI_14_BRESP; + output AXI_14_BVALID; + output [1:0] AXI_14_DFI_AW_AERR_N; + output AXI_14_DFI_CLK_BUF; + output [7:0] AXI_14_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_14_DFI_DW_RDDATA_DBI; + output [7:0] AXI_14_DFI_DW_RDDATA_DERR; + output [1:0] AXI_14_DFI_DW_RDDATA_VALID; + output AXI_14_DFI_INIT_COMPLETE; + output AXI_14_DFI_PHYUPD_REQ; + output AXI_14_DFI_PHY_LP_STATE; + output AXI_14_DFI_RST_N_BUF; + output [5:0] AXI_14_MC_STATUS; + output [7:0] AXI_14_PHY_STATUS; + output [255:0] AXI_14_RDATA; + output [31:0] AXI_14_RDATA_PARITY; + output [5:0] AXI_14_RID; + output AXI_14_RLAST; + output [1:0] AXI_14_RRESP; + output AXI_14_RVALID; + output AXI_14_WREADY; + output AXI_15_ARREADY; + output AXI_15_AWREADY; + output [5:0] AXI_15_BID; + output [1:0] AXI_15_BRESP; + output AXI_15_BVALID; + output [1:0] AXI_15_DFI_AW_AERR_N; + output AXI_15_DFI_CLK_BUF; + output [7:0] AXI_15_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_15_DFI_DW_RDDATA_DBI; + output [7:0] AXI_15_DFI_DW_RDDATA_DERR; + output [1:0] AXI_15_DFI_DW_RDDATA_VALID; + output AXI_15_DFI_INIT_COMPLETE; + output AXI_15_DFI_PHYUPD_REQ; + output AXI_15_DFI_PHY_LP_STATE; + output AXI_15_DFI_RST_N_BUF; + output [255:0] AXI_15_RDATA; + output [31:0] AXI_15_RDATA_PARITY; + output [5:0] AXI_15_RID; + output AXI_15_RLAST; + output [1:0] AXI_15_RRESP; + output AXI_15_RVALID; + output AXI_15_WREADY; + output AXI_16_ARREADY; + output AXI_16_AWREADY; + output [5:0] AXI_16_BID; + output [1:0] AXI_16_BRESP; + output AXI_16_BVALID; + output [1:0] AXI_16_DFI_AW_AERR_N; + output AXI_16_DFI_CLK_BUF; + output [7:0] AXI_16_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_16_DFI_DW_RDDATA_DBI; + output [7:0] AXI_16_DFI_DW_RDDATA_DERR; + output [1:0] AXI_16_DFI_DW_RDDATA_VALID; + output AXI_16_DFI_INIT_COMPLETE; + output AXI_16_DFI_PHYUPD_REQ; + output AXI_16_DFI_PHY_LP_STATE; + output AXI_16_DFI_RST_N_BUF; + output [5:0] AXI_16_MC_STATUS; + output [7:0] AXI_16_PHY_STATUS; + output [255:0] AXI_16_RDATA; + output [31:0] AXI_16_RDATA_PARITY; + output [5:0] AXI_16_RID; + output AXI_16_RLAST; + output [1:0] AXI_16_RRESP; + output AXI_16_RVALID; + output AXI_16_WREADY; + output AXI_17_ARREADY; + output AXI_17_AWREADY; + output [5:0] AXI_17_BID; + output [1:0] AXI_17_BRESP; + output AXI_17_BVALID; + output [1:0] AXI_17_DFI_AW_AERR_N; + output AXI_17_DFI_CLK_BUF; + output [7:0] AXI_17_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_17_DFI_DW_RDDATA_DBI; + output [7:0] AXI_17_DFI_DW_RDDATA_DERR; + output [1:0] AXI_17_DFI_DW_RDDATA_VALID; + output AXI_17_DFI_INIT_COMPLETE; + output AXI_17_DFI_PHYUPD_REQ; + output AXI_17_DFI_PHY_LP_STATE; + output AXI_17_DFI_RST_N_BUF; + output [255:0] AXI_17_RDATA; + output [31:0] AXI_17_RDATA_PARITY; + output [5:0] AXI_17_RID; + output AXI_17_RLAST; + output [1:0] AXI_17_RRESP; + output AXI_17_RVALID; + output AXI_17_WREADY; + output AXI_18_ARREADY; + output AXI_18_AWREADY; + output [5:0] AXI_18_BID; + output [1:0] AXI_18_BRESP; + output AXI_18_BVALID; + output [1:0] AXI_18_DFI_AW_AERR_N; + output AXI_18_DFI_CLK_BUF; + output [7:0] AXI_18_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_18_DFI_DW_RDDATA_DBI; + output [7:0] AXI_18_DFI_DW_RDDATA_DERR; + output [1:0] AXI_18_DFI_DW_RDDATA_VALID; + output AXI_18_DFI_INIT_COMPLETE; + output AXI_18_DFI_PHYUPD_REQ; + output AXI_18_DFI_PHY_LP_STATE; + output AXI_18_DFI_RST_N_BUF; + output [5:0] AXI_18_MC_STATUS; + output [7:0] AXI_18_PHY_STATUS; + output [255:0] AXI_18_RDATA; + output [31:0] AXI_18_RDATA_PARITY; + output [5:0] AXI_18_RID; + output AXI_18_RLAST; + output [1:0] AXI_18_RRESP; + output AXI_18_RVALID; + output AXI_18_WREADY; + output AXI_19_ARREADY; + output AXI_19_AWREADY; + output [5:0] AXI_19_BID; + output [1:0] AXI_19_BRESP; + output AXI_19_BVALID; + output [1:0] AXI_19_DFI_AW_AERR_N; + output AXI_19_DFI_CLK_BUF; + output [7:0] AXI_19_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_19_DFI_DW_RDDATA_DBI; + output [7:0] AXI_19_DFI_DW_RDDATA_DERR; + output [1:0] AXI_19_DFI_DW_RDDATA_VALID; + output AXI_19_DFI_INIT_COMPLETE; + output AXI_19_DFI_PHYUPD_REQ; + output AXI_19_DFI_PHY_LP_STATE; + output AXI_19_DFI_RST_N_BUF; + output [255:0] AXI_19_RDATA; + output [31:0] AXI_19_RDATA_PARITY; + output [5:0] AXI_19_RID; + output AXI_19_RLAST; + output [1:0] AXI_19_RRESP; + output AXI_19_RVALID; + output AXI_19_WREADY; + output AXI_20_ARREADY; + output AXI_20_AWREADY; + output [5:0] AXI_20_BID; + output [1:0] AXI_20_BRESP; + output AXI_20_BVALID; + output [1:0] AXI_20_DFI_AW_AERR_N; + output AXI_20_DFI_CLK_BUF; + output [7:0] AXI_20_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_20_DFI_DW_RDDATA_DBI; + output [7:0] AXI_20_DFI_DW_RDDATA_DERR; + output [1:0] AXI_20_DFI_DW_RDDATA_VALID; + output AXI_20_DFI_INIT_COMPLETE; + output AXI_20_DFI_PHYUPD_REQ; + output AXI_20_DFI_PHY_LP_STATE; + output AXI_20_DFI_RST_N_BUF; + output [5:0] AXI_20_MC_STATUS; + output [7:0] AXI_20_PHY_STATUS; + output [255:0] AXI_20_RDATA; + output [31:0] AXI_20_RDATA_PARITY; + output [5:0] AXI_20_RID; + output AXI_20_RLAST; + output [1:0] AXI_20_RRESP; + output AXI_20_RVALID; + output AXI_20_WREADY; + output AXI_21_ARREADY; + output AXI_21_AWREADY; + output [5:0] AXI_21_BID; + output [1:0] AXI_21_BRESP; + output AXI_21_BVALID; + output [1:0] AXI_21_DFI_AW_AERR_N; + output AXI_21_DFI_CLK_BUF; + output [7:0] AXI_21_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_21_DFI_DW_RDDATA_DBI; + output [7:0] AXI_21_DFI_DW_RDDATA_DERR; + output [1:0] AXI_21_DFI_DW_RDDATA_VALID; + output AXI_21_DFI_INIT_COMPLETE; + output AXI_21_DFI_PHYUPD_REQ; + output AXI_21_DFI_PHY_LP_STATE; + output AXI_21_DFI_RST_N_BUF; + output [255:0] AXI_21_RDATA; + output [31:0] AXI_21_RDATA_PARITY; + output [5:0] AXI_21_RID; + output AXI_21_RLAST; + output [1:0] AXI_21_RRESP; + output AXI_21_RVALID; + output AXI_21_WREADY; + output AXI_22_ARREADY; + output AXI_22_AWREADY; + output [5:0] AXI_22_BID; + output [1:0] AXI_22_BRESP; + output AXI_22_BVALID; + output [1:0] AXI_22_DFI_AW_AERR_N; + output AXI_22_DFI_CLK_BUF; + output [7:0] AXI_22_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_22_DFI_DW_RDDATA_DBI; + output [7:0] AXI_22_DFI_DW_RDDATA_DERR; + output [1:0] AXI_22_DFI_DW_RDDATA_VALID; + output AXI_22_DFI_INIT_COMPLETE; + output AXI_22_DFI_PHYUPD_REQ; + output AXI_22_DFI_PHY_LP_STATE; + output AXI_22_DFI_RST_N_BUF; + output [5:0] AXI_22_MC_STATUS; + output [7:0] AXI_22_PHY_STATUS; + output [255:0] AXI_22_RDATA; + output [31:0] AXI_22_RDATA_PARITY; + output [5:0] AXI_22_RID; + output AXI_22_RLAST; + output [1:0] AXI_22_RRESP; + output AXI_22_RVALID; + output AXI_22_WREADY; + output AXI_23_ARREADY; + output AXI_23_AWREADY; + output [5:0] AXI_23_BID; + output [1:0] AXI_23_BRESP; + output AXI_23_BVALID; + output [1:0] AXI_23_DFI_AW_AERR_N; + output AXI_23_DFI_CLK_BUF; + output [7:0] AXI_23_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_23_DFI_DW_RDDATA_DBI; + output [7:0] AXI_23_DFI_DW_RDDATA_DERR; + output [1:0] AXI_23_DFI_DW_RDDATA_VALID; + output AXI_23_DFI_INIT_COMPLETE; + output AXI_23_DFI_PHYUPD_REQ; + output AXI_23_DFI_PHY_LP_STATE; + output AXI_23_DFI_RST_N_BUF; + output [255:0] AXI_23_RDATA; + output [31:0] AXI_23_RDATA_PARITY; + output [5:0] AXI_23_RID; + output AXI_23_RLAST; + output [1:0] AXI_23_RRESP; + output AXI_23_RVALID; + output AXI_23_WREADY; + output AXI_24_ARREADY; + output AXI_24_AWREADY; + output [5:0] AXI_24_BID; + output [1:0] AXI_24_BRESP; + output AXI_24_BVALID; + output [1:0] AXI_24_DFI_AW_AERR_N; + output AXI_24_DFI_CLK_BUF; + output [7:0] AXI_24_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_24_DFI_DW_RDDATA_DBI; + output [7:0] AXI_24_DFI_DW_RDDATA_DERR; + output [1:0] AXI_24_DFI_DW_RDDATA_VALID; + output AXI_24_DFI_INIT_COMPLETE; + output AXI_24_DFI_PHYUPD_REQ; + output AXI_24_DFI_PHY_LP_STATE; + output AXI_24_DFI_RST_N_BUF; + output [5:0] AXI_24_MC_STATUS; + output [7:0] AXI_24_PHY_STATUS; + output [255:0] AXI_24_RDATA; + output [31:0] AXI_24_RDATA_PARITY; + output [5:0] AXI_24_RID; + output AXI_24_RLAST; + output [1:0] AXI_24_RRESP; + output AXI_24_RVALID; + output AXI_24_WREADY; + output AXI_25_ARREADY; + output AXI_25_AWREADY; + output [5:0] AXI_25_BID; + output [1:0] AXI_25_BRESP; + output AXI_25_BVALID; + output [1:0] AXI_25_DFI_AW_AERR_N; + output AXI_25_DFI_CLK_BUF; + output [7:0] AXI_25_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_25_DFI_DW_RDDATA_DBI; + output [7:0] AXI_25_DFI_DW_RDDATA_DERR; + output [1:0] AXI_25_DFI_DW_RDDATA_VALID; + output AXI_25_DFI_INIT_COMPLETE; + output AXI_25_DFI_PHYUPD_REQ; + output AXI_25_DFI_PHY_LP_STATE; + output AXI_25_DFI_RST_N_BUF; + output [255:0] AXI_25_RDATA; + output [31:0] AXI_25_RDATA_PARITY; + output [5:0] AXI_25_RID; + output AXI_25_RLAST; + output [1:0] AXI_25_RRESP; + output AXI_25_RVALID; + output AXI_25_WREADY; + output AXI_26_ARREADY; + output AXI_26_AWREADY; + output [5:0] AXI_26_BID; + output [1:0] AXI_26_BRESP; + output AXI_26_BVALID; + output [1:0] AXI_26_DFI_AW_AERR_N; + output AXI_26_DFI_CLK_BUF; + output [7:0] AXI_26_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_26_DFI_DW_RDDATA_DBI; + output [7:0] AXI_26_DFI_DW_RDDATA_DERR; + output [1:0] AXI_26_DFI_DW_RDDATA_VALID; + output AXI_26_DFI_INIT_COMPLETE; + output AXI_26_DFI_PHYUPD_REQ; + output AXI_26_DFI_PHY_LP_STATE; + output AXI_26_DFI_RST_N_BUF; + output [5:0] AXI_26_MC_STATUS; + output [7:0] AXI_26_PHY_STATUS; + output [255:0] AXI_26_RDATA; + output [31:0] AXI_26_RDATA_PARITY; + output [5:0] AXI_26_RID; + output AXI_26_RLAST; + output [1:0] AXI_26_RRESP; + output AXI_26_RVALID; + output AXI_26_WREADY; + output AXI_27_ARREADY; + output AXI_27_AWREADY; + output [5:0] AXI_27_BID; + output [1:0] AXI_27_BRESP; + output AXI_27_BVALID; + output [1:0] AXI_27_DFI_AW_AERR_N; + output AXI_27_DFI_CLK_BUF; + output [7:0] AXI_27_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_27_DFI_DW_RDDATA_DBI; + output [7:0] AXI_27_DFI_DW_RDDATA_DERR; + output [1:0] AXI_27_DFI_DW_RDDATA_VALID; + output AXI_27_DFI_INIT_COMPLETE; + output AXI_27_DFI_PHYUPD_REQ; + output AXI_27_DFI_PHY_LP_STATE; + output AXI_27_DFI_RST_N_BUF; + output [255:0] AXI_27_RDATA; + output [31:0] AXI_27_RDATA_PARITY; + output [5:0] AXI_27_RID; + output AXI_27_RLAST; + output [1:0] AXI_27_RRESP; + output AXI_27_RVALID; + output AXI_27_WREADY; + output AXI_28_ARREADY; + output AXI_28_AWREADY; + output [5:0] AXI_28_BID; + output [1:0] AXI_28_BRESP; + output AXI_28_BVALID; + output [1:0] AXI_28_DFI_AW_AERR_N; + output AXI_28_DFI_CLK_BUF; + output [7:0] AXI_28_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_28_DFI_DW_RDDATA_DBI; + output [7:0] AXI_28_DFI_DW_RDDATA_DERR; + output [1:0] AXI_28_DFI_DW_RDDATA_VALID; + output AXI_28_DFI_INIT_COMPLETE; + output AXI_28_DFI_PHYUPD_REQ; + output AXI_28_DFI_PHY_LP_STATE; + output AXI_28_DFI_RST_N_BUF; + output [5:0] AXI_28_MC_STATUS; + output [7:0] AXI_28_PHY_STATUS; + output [255:0] AXI_28_RDATA; + output [31:0] AXI_28_RDATA_PARITY; + output [5:0] AXI_28_RID; + output AXI_28_RLAST; + output [1:0] AXI_28_RRESP; + output AXI_28_RVALID; + output AXI_28_WREADY; + output AXI_29_ARREADY; + output AXI_29_AWREADY; + output [5:0] AXI_29_BID; + output [1:0] AXI_29_BRESP; + output AXI_29_BVALID; + output [1:0] AXI_29_DFI_AW_AERR_N; + output AXI_29_DFI_CLK_BUF; + output [7:0] AXI_29_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_29_DFI_DW_RDDATA_DBI; + output [7:0] AXI_29_DFI_DW_RDDATA_DERR; + output [1:0] AXI_29_DFI_DW_RDDATA_VALID; + output AXI_29_DFI_INIT_COMPLETE; + output AXI_29_DFI_PHYUPD_REQ; + output AXI_29_DFI_PHY_LP_STATE; + output AXI_29_DFI_RST_N_BUF; + output [255:0] AXI_29_RDATA; + output [31:0] AXI_29_RDATA_PARITY; + output [5:0] AXI_29_RID; + output AXI_29_RLAST; + output [1:0] AXI_29_RRESP; + output AXI_29_RVALID; + output AXI_29_WREADY; + output AXI_30_ARREADY; + output AXI_30_AWREADY; + output [5:0] AXI_30_BID; + output [1:0] AXI_30_BRESP; + output AXI_30_BVALID; + output [1:0] AXI_30_DFI_AW_AERR_N; + output AXI_30_DFI_CLK_BUF; + output [7:0] AXI_30_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_30_DFI_DW_RDDATA_DBI; + output [7:0] AXI_30_DFI_DW_RDDATA_DERR; + output [1:0] AXI_30_DFI_DW_RDDATA_VALID; + output AXI_30_DFI_INIT_COMPLETE; + output AXI_30_DFI_PHYUPD_REQ; + output AXI_30_DFI_PHY_LP_STATE; + output AXI_30_DFI_RST_N_BUF; + output [5:0] AXI_30_MC_STATUS; + output [7:0] AXI_30_PHY_STATUS; + output [255:0] AXI_30_RDATA; + output [31:0] AXI_30_RDATA_PARITY; + output [5:0] AXI_30_RID; + output AXI_30_RLAST; + output [1:0] AXI_30_RRESP; + output AXI_30_RVALID; + output AXI_30_WREADY; + output AXI_31_ARREADY; + output AXI_31_AWREADY; + output [5:0] AXI_31_BID; + output [1:0] AXI_31_BRESP; + output AXI_31_BVALID; + output [1:0] AXI_31_DFI_AW_AERR_N; + output AXI_31_DFI_CLK_BUF; + output [7:0] AXI_31_DFI_DBI_BYTE_DISABLE; + output [20:0] AXI_31_DFI_DW_RDDATA_DBI; + output [7:0] AXI_31_DFI_DW_RDDATA_DERR; + output [1:0] AXI_31_DFI_DW_RDDATA_VALID; + output AXI_31_DFI_INIT_COMPLETE; + output AXI_31_DFI_PHYUPD_REQ; + output AXI_31_DFI_PHY_LP_STATE; + output AXI_31_DFI_RST_N_BUF; + output [255:0] AXI_31_RDATA; + output [31:0] AXI_31_RDATA_PARITY; + output [5:0] AXI_31_RID; + output AXI_31_RLAST; + output [1:0] AXI_31_RRESP; + output AXI_31_RVALID; + output AXI_31_WREADY; + output DRAM_0_STAT_CATTRIP; + output [2:0] DRAM_0_STAT_TEMP; + output DRAM_1_STAT_CATTRIP; + output [2:0] DRAM_1_STAT_TEMP; + input [21:0] APB_0_PADDR; + (* invertible_pin = "IS_APB_0_PCLK_INVERTED" *) + input APB_0_PCLK; + input APB_0_PENABLE; + (* invertible_pin = "IS_APB_0_PRESET_N_INVERTED" *) + input APB_0_PRESET_N; + input APB_0_PSEL; + input [31:0] APB_0_PWDATA; + input APB_0_PWRITE; + input [21:0] APB_1_PADDR; + (* invertible_pin = "IS_APB_1_PCLK_INVERTED" *) + input APB_1_PCLK; + input APB_1_PENABLE; + (* invertible_pin = "IS_APB_1_PRESET_N_INVERTED" *) + input APB_1_PRESET_N; + input APB_1_PSEL; + input [31:0] APB_1_PWDATA; + input APB_1_PWRITE; + (* invertible_pin = "IS_AXI_00_ACLK_INVERTED" *) + input AXI_00_ACLK; + input [36:0] AXI_00_ARADDR; + input [1:0] AXI_00_ARBURST; + (* invertible_pin = "IS_AXI_00_ARESET_N_INVERTED" *) + input AXI_00_ARESET_N; + input [5:0] AXI_00_ARID; + input [3:0] AXI_00_ARLEN; + input [2:0] AXI_00_ARSIZE; + input AXI_00_ARVALID; + input [36:0] AXI_00_AWADDR; + input [1:0] AXI_00_AWBURST; + input [5:0] AXI_00_AWID; + input [3:0] AXI_00_AWLEN; + input [2:0] AXI_00_AWSIZE; + input AXI_00_AWVALID; + input AXI_00_BREADY; + input AXI_00_DFI_LP_PWR_X_REQ; + input AXI_00_RREADY; + input [255:0] AXI_00_WDATA; + input [31:0] AXI_00_WDATA_PARITY; + input AXI_00_WLAST; + input [31:0] AXI_00_WSTRB; + input AXI_00_WVALID; + (* invertible_pin = "IS_AXI_01_ACLK_INVERTED" *) + input AXI_01_ACLK; + input [36:0] AXI_01_ARADDR; + input [1:0] AXI_01_ARBURST; + (* invertible_pin = "IS_AXI_01_ARESET_N_INVERTED" *) + input AXI_01_ARESET_N; + input [5:0] AXI_01_ARID; + input [3:0] AXI_01_ARLEN; + input [2:0] AXI_01_ARSIZE; + input AXI_01_ARVALID; + input [36:0] AXI_01_AWADDR; + input [1:0] AXI_01_AWBURST; + input [5:0] AXI_01_AWID; + input [3:0] AXI_01_AWLEN; + input [2:0] AXI_01_AWSIZE; + input AXI_01_AWVALID; + input AXI_01_BREADY; + input AXI_01_DFI_LP_PWR_X_REQ; + input AXI_01_RREADY; + input [255:0] AXI_01_WDATA; + input [31:0] AXI_01_WDATA_PARITY; + input AXI_01_WLAST; + input [31:0] AXI_01_WSTRB; + input AXI_01_WVALID; + (* invertible_pin = "IS_AXI_02_ACLK_INVERTED" *) + input AXI_02_ACLK; + input [36:0] AXI_02_ARADDR; + input [1:0] AXI_02_ARBURST; + (* invertible_pin = "IS_AXI_02_ARESET_N_INVERTED" *) + input AXI_02_ARESET_N; + input [5:0] AXI_02_ARID; + input [3:0] AXI_02_ARLEN; + input [2:0] AXI_02_ARSIZE; + input AXI_02_ARVALID; + input [36:0] AXI_02_AWADDR; + input [1:0] AXI_02_AWBURST; + input [5:0] AXI_02_AWID; + input [3:0] AXI_02_AWLEN; + input [2:0] AXI_02_AWSIZE; + input AXI_02_AWVALID; + input AXI_02_BREADY; + input AXI_02_DFI_LP_PWR_X_REQ; + input AXI_02_RREADY; + input [255:0] AXI_02_WDATA; + input [31:0] AXI_02_WDATA_PARITY; + input AXI_02_WLAST; + input [31:0] AXI_02_WSTRB; + input AXI_02_WVALID; + (* invertible_pin = "IS_AXI_03_ACLK_INVERTED" *) + input AXI_03_ACLK; + input [36:0] AXI_03_ARADDR; + input [1:0] AXI_03_ARBURST; + (* invertible_pin = "IS_AXI_03_ARESET_N_INVERTED" *) + input AXI_03_ARESET_N; + input [5:0] AXI_03_ARID; + input [3:0] AXI_03_ARLEN; + input [2:0] AXI_03_ARSIZE; + input AXI_03_ARVALID; + input [36:0] AXI_03_AWADDR; + input [1:0] AXI_03_AWBURST; + input [5:0] AXI_03_AWID; + input [3:0] AXI_03_AWLEN; + input [2:0] AXI_03_AWSIZE; + input AXI_03_AWVALID; + input AXI_03_BREADY; + input AXI_03_DFI_LP_PWR_X_REQ; + input AXI_03_RREADY; + input [255:0] AXI_03_WDATA; + input [31:0] AXI_03_WDATA_PARITY; + input AXI_03_WLAST; + input [31:0] AXI_03_WSTRB; + input AXI_03_WVALID; + (* invertible_pin = "IS_AXI_04_ACLK_INVERTED" *) + input AXI_04_ACLK; + input [36:0] AXI_04_ARADDR; + input [1:0] AXI_04_ARBURST; + (* invertible_pin = "IS_AXI_04_ARESET_N_INVERTED" *) + input AXI_04_ARESET_N; + input [5:0] AXI_04_ARID; + input [3:0] AXI_04_ARLEN; + input [2:0] AXI_04_ARSIZE; + input AXI_04_ARVALID; + input [36:0] AXI_04_AWADDR; + input [1:0] AXI_04_AWBURST; + input [5:0] AXI_04_AWID; + input [3:0] AXI_04_AWLEN; + input [2:0] AXI_04_AWSIZE; + input AXI_04_AWVALID; + input AXI_04_BREADY; + input AXI_04_DFI_LP_PWR_X_REQ; + input AXI_04_RREADY; + input [255:0] AXI_04_WDATA; + input [31:0] AXI_04_WDATA_PARITY; + input AXI_04_WLAST; + input [31:0] AXI_04_WSTRB; + input AXI_04_WVALID; + (* invertible_pin = "IS_AXI_05_ACLK_INVERTED" *) + input AXI_05_ACLK; + input [36:0] AXI_05_ARADDR; + input [1:0] AXI_05_ARBURST; + (* invertible_pin = "IS_AXI_05_ARESET_N_INVERTED" *) + input AXI_05_ARESET_N; + input [5:0] AXI_05_ARID; + input [3:0] AXI_05_ARLEN; + input [2:0] AXI_05_ARSIZE; + input AXI_05_ARVALID; + input [36:0] AXI_05_AWADDR; + input [1:0] AXI_05_AWBURST; + input [5:0] AXI_05_AWID; + input [3:0] AXI_05_AWLEN; + input [2:0] AXI_05_AWSIZE; + input AXI_05_AWVALID; + input AXI_05_BREADY; + input AXI_05_DFI_LP_PWR_X_REQ; + input AXI_05_RREADY; + input [255:0] AXI_05_WDATA; + input [31:0] AXI_05_WDATA_PARITY; + input AXI_05_WLAST; + input [31:0] AXI_05_WSTRB; + input AXI_05_WVALID; + (* invertible_pin = "IS_AXI_06_ACLK_INVERTED" *) + input AXI_06_ACLK; + input [36:0] AXI_06_ARADDR; + input [1:0] AXI_06_ARBURST; + (* invertible_pin = "IS_AXI_06_ARESET_N_INVERTED" *) + input AXI_06_ARESET_N; + input [5:0] AXI_06_ARID; + input [3:0] AXI_06_ARLEN; + input [2:0] AXI_06_ARSIZE; + input AXI_06_ARVALID; + input [36:0] AXI_06_AWADDR; + input [1:0] AXI_06_AWBURST; + input [5:0] AXI_06_AWID; + input [3:0] AXI_06_AWLEN; + input [2:0] AXI_06_AWSIZE; + input AXI_06_AWVALID; + input AXI_06_BREADY; + input AXI_06_DFI_LP_PWR_X_REQ; + input AXI_06_RREADY; + input [255:0] AXI_06_WDATA; + input [31:0] AXI_06_WDATA_PARITY; + input AXI_06_WLAST; + input [31:0] AXI_06_WSTRB; + input AXI_06_WVALID; + (* invertible_pin = "IS_AXI_07_ACLK_INVERTED" *) + input AXI_07_ACLK; + input [36:0] AXI_07_ARADDR; + input [1:0] AXI_07_ARBURST; + (* invertible_pin = "IS_AXI_07_ARESET_N_INVERTED" *) + input AXI_07_ARESET_N; + input [5:0] AXI_07_ARID; + input [3:0] AXI_07_ARLEN; + input [2:0] AXI_07_ARSIZE; + input AXI_07_ARVALID; + input [36:0] AXI_07_AWADDR; + input [1:0] AXI_07_AWBURST; + input [5:0] AXI_07_AWID; + input [3:0] AXI_07_AWLEN; + input [2:0] AXI_07_AWSIZE; + input AXI_07_AWVALID; + input AXI_07_BREADY; + input AXI_07_DFI_LP_PWR_X_REQ; + input AXI_07_RREADY; + input [255:0] AXI_07_WDATA; + input [31:0] AXI_07_WDATA_PARITY; + input AXI_07_WLAST; + input [31:0] AXI_07_WSTRB; + input AXI_07_WVALID; + (* invertible_pin = "IS_AXI_08_ACLK_INVERTED" *) + input AXI_08_ACLK; + input [36:0] AXI_08_ARADDR; + input [1:0] AXI_08_ARBURST; + (* invertible_pin = "IS_AXI_08_ARESET_N_INVERTED" *) + input AXI_08_ARESET_N; + input [5:0] AXI_08_ARID; + input [3:0] AXI_08_ARLEN; + input [2:0] AXI_08_ARSIZE; + input AXI_08_ARVALID; + input [36:0] AXI_08_AWADDR; + input [1:0] AXI_08_AWBURST; + input [5:0] AXI_08_AWID; + input [3:0] AXI_08_AWLEN; + input [2:0] AXI_08_AWSIZE; + input AXI_08_AWVALID; + input AXI_08_BREADY; + input AXI_08_DFI_LP_PWR_X_REQ; + input AXI_08_RREADY; + input [255:0] AXI_08_WDATA; + input [31:0] AXI_08_WDATA_PARITY; + input AXI_08_WLAST; + input [31:0] AXI_08_WSTRB; + input AXI_08_WVALID; + (* invertible_pin = "IS_AXI_09_ACLK_INVERTED" *) + input AXI_09_ACLK; + input [36:0] AXI_09_ARADDR; + input [1:0] AXI_09_ARBURST; + (* invertible_pin = "IS_AXI_09_ARESET_N_INVERTED" *) + input AXI_09_ARESET_N; + input [5:0] AXI_09_ARID; + input [3:0] AXI_09_ARLEN; + input [2:0] AXI_09_ARSIZE; + input AXI_09_ARVALID; + input [36:0] AXI_09_AWADDR; + input [1:0] AXI_09_AWBURST; + input [5:0] AXI_09_AWID; + input [3:0] AXI_09_AWLEN; + input [2:0] AXI_09_AWSIZE; + input AXI_09_AWVALID; + input AXI_09_BREADY; + input AXI_09_DFI_LP_PWR_X_REQ; + input AXI_09_RREADY; + input [255:0] AXI_09_WDATA; + input [31:0] AXI_09_WDATA_PARITY; + input AXI_09_WLAST; + input [31:0] AXI_09_WSTRB; + input AXI_09_WVALID; + (* invertible_pin = "IS_AXI_10_ACLK_INVERTED" *) + input AXI_10_ACLK; + input [36:0] AXI_10_ARADDR; + input [1:0] AXI_10_ARBURST; + (* invertible_pin = "IS_AXI_10_ARESET_N_INVERTED" *) + input AXI_10_ARESET_N; + input [5:0] AXI_10_ARID; + input [3:0] AXI_10_ARLEN; + input [2:0] AXI_10_ARSIZE; + input AXI_10_ARVALID; + input [36:0] AXI_10_AWADDR; + input [1:0] AXI_10_AWBURST; + input [5:0] AXI_10_AWID; + input [3:0] AXI_10_AWLEN; + input [2:0] AXI_10_AWSIZE; + input AXI_10_AWVALID; + input AXI_10_BREADY; + input AXI_10_DFI_LP_PWR_X_REQ; + input AXI_10_RREADY; + input [255:0] AXI_10_WDATA; + input [31:0] AXI_10_WDATA_PARITY; + input AXI_10_WLAST; + input [31:0] AXI_10_WSTRB; + input AXI_10_WVALID; + (* invertible_pin = "IS_AXI_11_ACLK_INVERTED" *) + input AXI_11_ACLK; + input [36:0] AXI_11_ARADDR; + input [1:0] AXI_11_ARBURST; + (* invertible_pin = "IS_AXI_11_ARESET_N_INVERTED" *) + input AXI_11_ARESET_N; + input [5:0] AXI_11_ARID; + input [3:0] AXI_11_ARLEN; + input [2:0] AXI_11_ARSIZE; + input AXI_11_ARVALID; + input [36:0] AXI_11_AWADDR; + input [1:0] AXI_11_AWBURST; + input [5:0] AXI_11_AWID; + input [3:0] AXI_11_AWLEN; + input [2:0] AXI_11_AWSIZE; + input AXI_11_AWVALID; + input AXI_11_BREADY; + input AXI_11_DFI_LP_PWR_X_REQ; + input AXI_11_RREADY; + input [255:0] AXI_11_WDATA; + input [31:0] AXI_11_WDATA_PARITY; + input AXI_11_WLAST; + input [31:0] AXI_11_WSTRB; + input AXI_11_WVALID; + (* invertible_pin = "IS_AXI_12_ACLK_INVERTED" *) + input AXI_12_ACLK; + input [36:0] AXI_12_ARADDR; + input [1:0] AXI_12_ARBURST; + (* invertible_pin = "IS_AXI_12_ARESET_N_INVERTED" *) + input AXI_12_ARESET_N; + input [5:0] AXI_12_ARID; + input [3:0] AXI_12_ARLEN; + input [2:0] AXI_12_ARSIZE; + input AXI_12_ARVALID; + input [36:0] AXI_12_AWADDR; + input [1:0] AXI_12_AWBURST; + input [5:0] AXI_12_AWID; + input [3:0] AXI_12_AWLEN; + input [2:0] AXI_12_AWSIZE; + input AXI_12_AWVALID; + input AXI_12_BREADY; + input AXI_12_DFI_LP_PWR_X_REQ; + input AXI_12_RREADY; + input [255:0] AXI_12_WDATA; + input [31:0] AXI_12_WDATA_PARITY; + input AXI_12_WLAST; + input [31:0] AXI_12_WSTRB; + input AXI_12_WVALID; + (* invertible_pin = "IS_AXI_13_ACLK_INVERTED" *) + input AXI_13_ACLK; + input [36:0] AXI_13_ARADDR; + input [1:0] AXI_13_ARBURST; + (* invertible_pin = "IS_AXI_13_ARESET_N_INVERTED" *) + input AXI_13_ARESET_N; + input [5:0] AXI_13_ARID; + input [3:0] AXI_13_ARLEN; + input [2:0] AXI_13_ARSIZE; + input AXI_13_ARVALID; + input [36:0] AXI_13_AWADDR; + input [1:0] AXI_13_AWBURST; + input [5:0] AXI_13_AWID; + input [3:0] AXI_13_AWLEN; + input [2:0] AXI_13_AWSIZE; + input AXI_13_AWVALID; + input AXI_13_BREADY; + input AXI_13_DFI_LP_PWR_X_REQ; + input AXI_13_RREADY; + input [255:0] AXI_13_WDATA; + input [31:0] AXI_13_WDATA_PARITY; + input AXI_13_WLAST; + input [31:0] AXI_13_WSTRB; + input AXI_13_WVALID; + (* invertible_pin = "IS_AXI_14_ACLK_INVERTED" *) + input AXI_14_ACLK; + input [36:0] AXI_14_ARADDR; + input [1:0] AXI_14_ARBURST; + (* invertible_pin = "IS_AXI_14_ARESET_N_INVERTED" *) + input AXI_14_ARESET_N; + input [5:0] AXI_14_ARID; + input [3:0] AXI_14_ARLEN; + input [2:0] AXI_14_ARSIZE; + input AXI_14_ARVALID; + input [36:0] AXI_14_AWADDR; + input [1:0] AXI_14_AWBURST; + input [5:0] AXI_14_AWID; + input [3:0] AXI_14_AWLEN; + input [2:0] AXI_14_AWSIZE; + input AXI_14_AWVALID; + input AXI_14_BREADY; + input AXI_14_DFI_LP_PWR_X_REQ; + input AXI_14_RREADY; + input [255:0] AXI_14_WDATA; + input [31:0] AXI_14_WDATA_PARITY; + input AXI_14_WLAST; + input [31:0] AXI_14_WSTRB; + input AXI_14_WVALID; + (* invertible_pin = "IS_AXI_15_ACLK_INVERTED" *) + input AXI_15_ACLK; + input [36:0] AXI_15_ARADDR; + input [1:0] AXI_15_ARBURST; + (* invertible_pin = "IS_AXI_15_ARESET_N_INVERTED" *) + input AXI_15_ARESET_N; + input [5:0] AXI_15_ARID; + input [3:0] AXI_15_ARLEN; + input [2:0] AXI_15_ARSIZE; + input AXI_15_ARVALID; + input [36:0] AXI_15_AWADDR; + input [1:0] AXI_15_AWBURST; + input [5:0] AXI_15_AWID; + input [3:0] AXI_15_AWLEN; + input [2:0] AXI_15_AWSIZE; + input AXI_15_AWVALID; + input AXI_15_BREADY; + input AXI_15_DFI_LP_PWR_X_REQ; + input AXI_15_RREADY; + input [255:0] AXI_15_WDATA; + input [31:0] AXI_15_WDATA_PARITY; + input AXI_15_WLAST; + input [31:0] AXI_15_WSTRB; + input AXI_15_WVALID; + (* invertible_pin = "IS_AXI_16_ACLK_INVERTED" *) + input AXI_16_ACLK; + input [36:0] AXI_16_ARADDR; + input [1:0] AXI_16_ARBURST; + (* invertible_pin = "IS_AXI_16_ARESET_N_INVERTED" *) + input AXI_16_ARESET_N; + input [5:0] AXI_16_ARID; + input [3:0] AXI_16_ARLEN; + input [2:0] AXI_16_ARSIZE; + input AXI_16_ARVALID; + input [36:0] AXI_16_AWADDR; + input [1:0] AXI_16_AWBURST; + input [5:0] AXI_16_AWID; + input [3:0] AXI_16_AWLEN; + input [2:0] AXI_16_AWSIZE; + input AXI_16_AWVALID; + input AXI_16_BREADY; + input AXI_16_DFI_LP_PWR_X_REQ; + input AXI_16_RREADY; + input [255:0] AXI_16_WDATA; + input [31:0] AXI_16_WDATA_PARITY; + input AXI_16_WLAST; + input [31:0] AXI_16_WSTRB; + input AXI_16_WVALID; + (* invertible_pin = "IS_AXI_17_ACLK_INVERTED" *) + input AXI_17_ACLK; + input [36:0] AXI_17_ARADDR; + input [1:0] AXI_17_ARBURST; + (* invertible_pin = "IS_AXI_17_ARESET_N_INVERTED" *) + input AXI_17_ARESET_N; + input [5:0] AXI_17_ARID; + input [3:0] AXI_17_ARLEN; + input [2:0] AXI_17_ARSIZE; + input AXI_17_ARVALID; + input [36:0] AXI_17_AWADDR; + input [1:0] AXI_17_AWBURST; + input [5:0] AXI_17_AWID; + input [3:0] AXI_17_AWLEN; + input [2:0] AXI_17_AWSIZE; + input AXI_17_AWVALID; + input AXI_17_BREADY; + input AXI_17_DFI_LP_PWR_X_REQ; + input AXI_17_RREADY; + input [255:0] AXI_17_WDATA; + input [31:0] AXI_17_WDATA_PARITY; + input AXI_17_WLAST; + input [31:0] AXI_17_WSTRB; + input AXI_17_WVALID; + (* invertible_pin = "IS_AXI_18_ACLK_INVERTED" *) + input AXI_18_ACLK; + input [36:0] AXI_18_ARADDR; + input [1:0] AXI_18_ARBURST; + (* invertible_pin = "IS_AXI_18_ARESET_N_INVERTED" *) + input AXI_18_ARESET_N; + input [5:0] AXI_18_ARID; + input [3:0] AXI_18_ARLEN; + input [2:0] AXI_18_ARSIZE; + input AXI_18_ARVALID; + input [36:0] AXI_18_AWADDR; + input [1:0] AXI_18_AWBURST; + input [5:0] AXI_18_AWID; + input [3:0] AXI_18_AWLEN; + input [2:0] AXI_18_AWSIZE; + input AXI_18_AWVALID; + input AXI_18_BREADY; + input AXI_18_DFI_LP_PWR_X_REQ; + input AXI_18_RREADY; + input [255:0] AXI_18_WDATA; + input [31:0] AXI_18_WDATA_PARITY; + input AXI_18_WLAST; + input [31:0] AXI_18_WSTRB; + input AXI_18_WVALID; + (* invertible_pin = "IS_AXI_19_ACLK_INVERTED" *) + input AXI_19_ACLK; + input [36:0] AXI_19_ARADDR; + input [1:0] AXI_19_ARBURST; + (* invertible_pin = "IS_AXI_19_ARESET_N_INVERTED" *) + input AXI_19_ARESET_N; + input [5:0] AXI_19_ARID; + input [3:0] AXI_19_ARLEN; + input [2:0] AXI_19_ARSIZE; + input AXI_19_ARVALID; + input [36:0] AXI_19_AWADDR; + input [1:0] AXI_19_AWBURST; + input [5:0] AXI_19_AWID; + input [3:0] AXI_19_AWLEN; + input [2:0] AXI_19_AWSIZE; + input AXI_19_AWVALID; + input AXI_19_BREADY; + input AXI_19_DFI_LP_PWR_X_REQ; + input AXI_19_RREADY; + input [255:0] AXI_19_WDATA; + input [31:0] AXI_19_WDATA_PARITY; + input AXI_19_WLAST; + input [31:0] AXI_19_WSTRB; + input AXI_19_WVALID; + (* invertible_pin = "IS_AXI_20_ACLK_INVERTED" *) + input AXI_20_ACLK; + input [36:0] AXI_20_ARADDR; + input [1:0] AXI_20_ARBURST; + (* invertible_pin = "IS_AXI_20_ARESET_N_INVERTED" *) + input AXI_20_ARESET_N; + input [5:0] AXI_20_ARID; + input [3:0] AXI_20_ARLEN; + input [2:0] AXI_20_ARSIZE; + input AXI_20_ARVALID; + input [36:0] AXI_20_AWADDR; + input [1:0] AXI_20_AWBURST; + input [5:0] AXI_20_AWID; + input [3:0] AXI_20_AWLEN; + input [2:0] AXI_20_AWSIZE; + input AXI_20_AWVALID; + input AXI_20_BREADY; + input AXI_20_DFI_LP_PWR_X_REQ; + input AXI_20_RREADY; + input [255:0] AXI_20_WDATA; + input [31:0] AXI_20_WDATA_PARITY; + input AXI_20_WLAST; + input [31:0] AXI_20_WSTRB; + input AXI_20_WVALID; + (* invertible_pin = "IS_AXI_21_ACLK_INVERTED" *) + input AXI_21_ACLK; + input [36:0] AXI_21_ARADDR; + input [1:0] AXI_21_ARBURST; + (* invertible_pin = "IS_AXI_21_ARESET_N_INVERTED" *) + input AXI_21_ARESET_N; + input [5:0] AXI_21_ARID; + input [3:0] AXI_21_ARLEN; + input [2:0] AXI_21_ARSIZE; + input AXI_21_ARVALID; + input [36:0] AXI_21_AWADDR; + input [1:0] AXI_21_AWBURST; + input [5:0] AXI_21_AWID; + input [3:0] AXI_21_AWLEN; + input [2:0] AXI_21_AWSIZE; + input AXI_21_AWVALID; + input AXI_21_BREADY; + input AXI_21_DFI_LP_PWR_X_REQ; + input AXI_21_RREADY; + input [255:0] AXI_21_WDATA; + input [31:0] AXI_21_WDATA_PARITY; + input AXI_21_WLAST; + input [31:0] AXI_21_WSTRB; + input AXI_21_WVALID; + (* invertible_pin = "IS_AXI_22_ACLK_INVERTED" *) + input AXI_22_ACLK; + input [36:0] AXI_22_ARADDR; + input [1:0] AXI_22_ARBURST; + (* invertible_pin = "IS_AXI_22_ARESET_N_INVERTED" *) + input AXI_22_ARESET_N; + input [5:0] AXI_22_ARID; + input [3:0] AXI_22_ARLEN; + input [2:0] AXI_22_ARSIZE; + input AXI_22_ARVALID; + input [36:0] AXI_22_AWADDR; + input [1:0] AXI_22_AWBURST; + input [5:0] AXI_22_AWID; + input [3:0] AXI_22_AWLEN; + input [2:0] AXI_22_AWSIZE; + input AXI_22_AWVALID; + input AXI_22_BREADY; + input AXI_22_DFI_LP_PWR_X_REQ; + input AXI_22_RREADY; + input [255:0] AXI_22_WDATA; + input [31:0] AXI_22_WDATA_PARITY; + input AXI_22_WLAST; + input [31:0] AXI_22_WSTRB; + input AXI_22_WVALID; + (* invertible_pin = "IS_AXI_23_ACLK_INVERTED" *) + input AXI_23_ACLK; + input [36:0] AXI_23_ARADDR; + input [1:0] AXI_23_ARBURST; + (* invertible_pin = "IS_AXI_23_ARESET_N_INVERTED" *) + input AXI_23_ARESET_N; + input [5:0] AXI_23_ARID; + input [3:0] AXI_23_ARLEN; + input [2:0] AXI_23_ARSIZE; + input AXI_23_ARVALID; + input [36:0] AXI_23_AWADDR; + input [1:0] AXI_23_AWBURST; + input [5:0] AXI_23_AWID; + input [3:0] AXI_23_AWLEN; + input [2:0] AXI_23_AWSIZE; + input AXI_23_AWVALID; + input AXI_23_BREADY; + input AXI_23_DFI_LP_PWR_X_REQ; + input AXI_23_RREADY; + input [255:0] AXI_23_WDATA; + input [31:0] AXI_23_WDATA_PARITY; + input AXI_23_WLAST; + input [31:0] AXI_23_WSTRB; + input AXI_23_WVALID; + (* invertible_pin = "IS_AXI_24_ACLK_INVERTED" *) + input AXI_24_ACLK; + input [36:0] AXI_24_ARADDR; + input [1:0] AXI_24_ARBURST; + (* invertible_pin = "IS_AXI_24_ARESET_N_INVERTED" *) + input AXI_24_ARESET_N; + input [5:0] AXI_24_ARID; + input [3:0] AXI_24_ARLEN; + input [2:0] AXI_24_ARSIZE; + input AXI_24_ARVALID; + input [36:0] AXI_24_AWADDR; + input [1:0] AXI_24_AWBURST; + input [5:0] AXI_24_AWID; + input [3:0] AXI_24_AWLEN; + input [2:0] AXI_24_AWSIZE; + input AXI_24_AWVALID; + input AXI_24_BREADY; + input AXI_24_DFI_LP_PWR_X_REQ; + input AXI_24_RREADY; + input [255:0] AXI_24_WDATA; + input [31:0] AXI_24_WDATA_PARITY; + input AXI_24_WLAST; + input [31:0] AXI_24_WSTRB; + input AXI_24_WVALID; + (* invertible_pin = "IS_AXI_25_ACLK_INVERTED" *) + input AXI_25_ACLK; + input [36:0] AXI_25_ARADDR; + input [1:0] AXI_25_ARBURST; + (* invertible_pin = "IS_AXI_25_ARESET_N_INVERTED" *) + input AXI_25_ARESET_N; + input [5:0] AXI_25_ARID; + input [3:0] AXI_25_ARLEN; + input [2:0] AXI_25_ARSIZE; + input AXI_25_ARVALID; + input [36:0] AXI_25_AWADDR; + input [1:0] AXI_25_AWBURST; + input [5:0] AXI_25_AWID; + input [3:0] AXI_25_AWLEN; + input [2:0] AXI_25_AWSIZE; + input AXI_25_AWVALID; + input AXI_25_BREADY; + input AXI_25_DFI_LP_PWR_X_REQ; + input AXI_25_RREADY; + input [255:0] AXI_25_WDATA; + input [31:0] AXI_25_WDATA_PARITY; + input AXI_25_WLAST; + input [31:0] AXI_25_WSTRB; + input AXI_25_WVALID; + (* invertible_pin = "IS_AXI_26_ACLK_INVERTED" *) + input AXI_26_ACLK; + input [36:0] AXI_26_ARADDR; + input [1:0] AXI_26_ARBURST; + (* invertible_pin = "IS_AXI_26_ARESET_N_INVERTED" *) + input AXI_26_ARESET_N; + input [5:0] AXI_26_ARID; + input [3:0] AXI_26_ARLEN; + input [2:0] AXI_26_ARSIZE; + input AXI_26_ARVALID; + input [36:0] AXI_26_AWADDR; + input [1:0] AXI_26_AWBURST; + input [5:0] AXI_26_AWID; + input [3:0] AXI_26_AWLEN; + input [2:0] AXI_26_AWSIZE; + input AXI_26_AWVALID; + input AXI_26_BREADY; + input AXI_26_DFI_LP_PWR_X_REQ; + input AXI_26_RREADY; + input [255:0] AXI_26_WDATA; + input [31:0] AXI_26_WDATA_PARITY; + input AXI_26_WLAST; + input [31:0] AXI_26_WSTRB; + input AXI_26_WVALID; + (* invertible_pin = "IS_AXI_27_ACLK_INVERTED" *) + input AXI_27_ACLK; + input [36:0] AXI_27_ARADDR; + input [1:0] AXI_27_ARBURST; + (* invertible_pin = "IS_AXI_27_ARESET_N_INVERTED" *) + input AXI_27_ARESET_N; + input [5:0] AXI_27_ARID; + input [3:0] AXI_27_ARLEN; + input [2:0] AXI_27_ARSIZE; + input AXI_27_ARVALID; + input [36:0] AXI_27_AWADDR; + input [1:0] AXI_27_AWBURST; + input [5:0] AXI_27_AWID; + input [3:0] AXI_27_AWLEN; + input [2:0] AXI_27_AWSIZE; + input AXI_27_AWVALID; + input AXI_27_BREADY; + input AXI_27_DFI_LP_PWR_X_REQ; + input AXI_27_RREADY; + input [255:0] AXI_27_WDATA; + input [31:0] AXI_27_WDATA_PARITY; + input AXI_27_WLAST; + input [31:0] AXI_27_WSTRB; + input AXI_27_WVALID; + (* invertible_pin = "IS_AXI_28_ACLK_INVERTED" *) + input AXI_28_ACLK; + input [36:0] AXI_28_ARADDR; + input [1:0] AXI_28_ARBURST; + (* invertible_pin = "IS_AXI_28_ARESET_N_INVERTED" *) + input AXI_28_ARESET_N; + input [5:0] AXI_28_ARID; + input [3:0] AXI_28_ARLEN; + input [2:0] AXI_28_ARSIZE; + input AXI_28_ARVALID; + input [36:0] AXI_28_AWADDR; + input [1:0] AXI_28_AWBURST; + input [5:0] AXI_28_AWID; + input [3:0] AXI_28_AWLEN; + input [2:0] AXI_28_AWSIZE; + input AXI_28_AWVALID; + input AXI_28_BREADY; + input AXI_28_DFI_LP_PWR_X_REQ; + input AXI_28_RREADY; + input [255:0] AXI_28_WDATA; + input [31:0] AXI_28_WDATA_PARITY; + input AXI_28_WLAST; + input [31:0] AXI_28_WSTRB; + input AXI_28_WVALID; + (* invertible_pin = "IS_AXI_29_ACLK_INVERTED" *) + input AXI_29_ACLK; + input [36:0] AXI_29_ARADDR; + input [1:0] AXI_29_ARBURST; + (* invertible_pin = "IS_AXI_29_ARESET_N_INVERTED" *) + input AXI_29_ARESET_N; + input [5:0] AXI_29_ARID; + input [3:0] AXI_29_ARLEN; + input [2:0] AXI_29_ARSIZE; + input AXI_29_ARVALID; + input [36:0] AXI_29_AWADDR; + input [1:0] AXI_29_AWBURST; + input [5:0] AXI_29_AWID; + input [3:0] AXI_29_AWLEN; + input [2:0] AXI_29_AWSIZE; + input AXI_29_AWVALID; + input AXI_29_BREADY; + input AXI_29_DFI_LP_PWR_X_REQ; + input AXI_29_RREADY; + input [255:0] AXI_29_WDATA; + input [31:0] AXI_29_WDATA_PARITY; + input AXI_29_WLAST; + input [31:0] AXI_29_WSTRB; + input AXI_29_WVALID; + (* invertible_pin = "IS_AXI_30_ACLK_INVERTED" *) + input AXI_30_ACLK; + input [36:0] AXI_30_ARADDR; + input [1:0] AXI_30_ARBURST; + (* invertible_pin = "IS_AXI_30_ARESET_N_INVERTED" *) + input AXI_30_ARESET_N; + input [5:0] AXI_30_ARID; + input [3:0] AXI_30_ARLEN; + input [2:0] AXI_30_ARSIZE; + input AXI_30_ARVALID; + input [36:0] AXI_30_AWADDR; + input [1:0] AXI_30_AWBURST; + input [5:0] AXI_30_AWID; + input [3:0] AXI_30_AWLEN; + input [2:0] AXI_30_AWSIZE; + input AXI_30_AWVALID; + input AXI_30_BREADY; + input AXI_30_DFI_LP_PWR_X_REQ; + input AXI_30_RREADY; + input [255:0] AXI_30_WDATA; + input [31:0] AXI_30_WDATA_PARITY; + input AXI_30_WLAST; + input [31:0] AXI_30_WSTRB; + input AXI_30_WVALID; + (* invertible_pin = "IS_AXI_31_ACLK_INVERTED" *) + input AXI_31_ACLK; + input [36:0] AXI_31_ARADDR; + input [1:0] AXI_31_ARBURST; + (* invertible_pin = "IS_AXI_31_ARESET_N_INVERTED" *) + input AXI_31_ARESET_N; + input [5:0] AXI_31_ARID; + input [3:0] AXI_31_ARLEN; + input [2:0] AXI_31_ARSIZE; + input AXI_31_ARVALID; + input [36:0] AXI_31_AWADDR; + input [1:0] AXI_31_AWBURST; + input [5:0] AXI_31_AWID; + input [3:0] AXI_31_AWLEN; + input [2:0] AXI_31_AWSIZE; + input AXI_31_AWVALID; + input AXI_31_BREADY; + input AXI_31_DFI_LP_PWR_X_REQ; + input AXI_31_RREADY; + input [255:0] AXI_31_WDATA; + input [31:0] AXI_31_WDATA_PARITY; + input AXI_31_WLAST; + input [31:0] AXI_31_WSTRB; + input AXI_31_WVALID; + input BSCAN_DRCK_0; + input BSCAN_DRCK_1; + input BSCAN_TCK_0; + input BSCAN_TCK_1; + input HBM_REF_CLK_0; + input HBM_REF_CLK_1; + input MBIST_EN_00; + input MBIST_EN_01; + input MBIST_EN_02; + input MBIST_EN_03; + input MBIST_EN_04; + input MBIST_EN_05; + input MBIST_EN_06; + input MBIST_EN_07; + input MBIST_EN_08; + input MBIST_EN_09; + input MBIST_EN_10; + input MBIST_EN_11; + input MBIST_EN_12; + input MBIST_EN_13; + input MBIST_EN_14; + input MBIST_EN_15; +endmodule + +module PPC405_ADV (...); + parameter in_delay=100; + parameter out_delay=100; + output APUFCMDECODED; + output APUFCMDECUDIVALID; + output APUFCMENDIAN; + output APUFCMFLUSH; + output APUFCMINSTRVALID; + output APUFCMLOADDVALID; + output APUFCMOPERANDVALID; + output APUFCMWRITEBACKOK; + output APUFCMXERCA; + output C405CPMCORESLEEPREQ; + output C405CPMMSRCE; + output C405CPMMSREE; + output C405CPMTIMERIRQ; + output C405CPMTIMERRESETREQ; + output C405DBGLOADDATAONAPUDBUS; + output C405DBGMSRWE; + output C405DBGSTOPACK; + output C405DBGWBCOMPLETE; + output C405DBGWBFULL; + output C405JTGCAPTUREDR; + output C405JTGEXTEST; + output C405JTGPGMOUT; + output C405JTGSHIFTDR; + output C405JTGTDO; + output C405JTGTDOEN; + output C405JTGUPDATEDR; + output C405PLBDCUABORT; + output C405PLBDCUCACHEABLE; + output C405PLBDCUGUARDED; + output C405PLBDCUREQUEST; + output C405PLBDCURNW; + output C405PLBDCUSIZE2; + output C405PLBDCUU0ATTR; + output C405PLBDCUWRITETHRU; + output C405PLBICUABORT; + output C405PLBICUCACHEABLE; + output C405PLBICUREQUEST; + output C405PLBICUU0ATTR; + output C405RSTCHIPRESETREQ; + output C405RSTCORERESETREQ; + output C405RSTSYSRESETREQ; + output C405TRCCYCLE; + output C405TRCTRIGGEREVENTOUT; + output C405XXXMACHINECHECK; + output DCREMACCLK; + output DCREMACENABLER; + output DCREMACREAD; + output DCREMACWRITE; + output DSOCMBRAMEN; + output DSOCMBUSY; + output DSOCMRDADDRVALID; + output DSOCMWRADDRVALID; + output EXTDCRREAD; + output EXTDCRWRITE; + output ISOCMBRAMEN; + output ISOCMBRAMEVENWRITEEN; + output ISOCMBRAMODDWRITEEN; + output ISOCMDCRBRAMEVENEN; + output ISOCMDCRBRAMODDEN; + output ISOCMDCRBRAMRDSELECT; + output [0:10] C405TRCTRIGGEREVENTTYPE; + output [0:1] C405PLBDCUPRIORITY; + output [0:1] C405PLBICUPRIORITY; + output [0:1] C405TRCEVENEXECUTIONSTATUS; + output [0:1] C405TRCODDEXECUTIONSTATUS; + output [0:29] C405DBGWBIAR; + output [0:29] C405PLBICUABUS; + output [0:2] APUFCMDECUDI; + output [0:31] APUFCMINSTRUCTION; + output [0:31] APUFCMLOADDATA; + output [0:31] APUFCMRADATA; + output [0:31] APUFCMRBDATA; + output [0:31] C405PLBDCUABUS; + output [0:31] DCREMACDBUS; + output [0:31] DSOCMBRAMWRDBUS; + output [0:31] EXTDCRDBUSOUT; + output [0:31] ISOCMBRAMWRDBUS; + output [0:3] APUFCMLOADBYTEEN; + output [0:3] C405TRCTRACESTATUS; + output [0:3] DSOCMBRAMBYTEWRITE; + output [0:63] C405PLBDCUWRDBUS; + output [0:7] C405PLBDCUBE; + output [0:9] EXTDCRABUS; + output [2:3] C405PLBICUSIZE; + output [8:28] ISOCMBRAMRDABUS; + output [8:28] ISOCMBRAMWRABUS; + output [8:29] DSOCMBRAMABUS; + output [8:9] DCREMACABUS; + input BRAMDSOCMCLK; + input BRAMISOCMCLK; + input CPMC405CLOCK; + input CPMC405CORECLKINACTIVE; + input CPMC405CPUCLKEN; + input CPMC405JTAGCLKEN; + input CPMC405SYNCBYPASS; + input CPMC405TIMERCLKEN; + input CPMC405TIMERTICK; + input CPMDCRCLK; + input CPMFCMCLK; + input DBGC405DEBUGHALT; + input DBGC405EXTBUSHOLDACK; + input DBGC405UNCONDDEBUGEVENT; + input DSOCMRWCOMPLETE; + input EICC405CRITINPUTIRQ; + input EICC405EXTINPUTIRQ; + input EMACDCRACK; + input EXTDCRACK; + input FCMAPUDCDCREN; + input FCMAPUDCDFORCEALIGN; + input FCMAPUDCDFORCEBESTEERING; + input FCMAPUDCDFPUOP; + input FCMAPUDCDGPRWRITE; + input FCMAPUDCDLDSTBYTE; + input FCMAPUDCDLDSTDW; + input FCMAPUDCDLDSTHW; + input FCMAPUDCDLDSTQW; + input FCMAPUDCDLDSTWD; + input FCMAPUDCDLOAD; + input FCMAPUDCDPRIVOP; + input FCMAPUDCDRAEN; + input FCMAPUDCDRBEN; + input FCMAPUDCDSTORE; + input FCMAPUDCDTRAPBE; + input FCMAPUDCDTRAPLE; + input FCMAPUDCDUPDATE; + input FCMAPUDCDXERCAEN; + input FCMAPUDCDXEROVEN; + input FCMAPUDECODEBUSY; + input FCMAPUDONE; + input FCMAPUEXCEPTION; + input FCMAPUEXEBLOCKINGMCO; + input FCMAPUEXENONBLOCKINGMCO; + input FCMAPUINSTRACK; + input FCMAPULOADWAIT; + input FCMAPURESULTVALID; + input FCMAPUSLEEPNOTREADY; + input FCMAPUXERCA; + input FCMAPUXEROV; + input JTGC405BNDSCANTDO; + input JTGC405TCK; + input JTGC405TDI; + input JTGC405TMS; + input JTGC405TRSTNEG; + input MCBCPUCLKEN; + input MCBJTAGEN; + input MCBTIMEREN; + input MCPPCRST; + input PLBC405DCUADDRACK; + input PLBC405DCUBUSY; + input PLBC405DCUERR; + input PLBC405DCURDDACK; + input PLBC405DCUSSIZE1; + input PLBC405DCUWRDACK; + input PLBC405ICUADDRACK; + input PLBC405ICUBUSY; + input PLBC405ICUERR; + input PLBC405ICURDDACK; + input PLBC405ICUSSIZE1; + input PLBCLK; + input RSTC405RESETCHIP; + input RSTC405RESETCORE; + input RSTC405RESETSYS; + input TIEC405DETERMINISTICMULT; + input TIEC405DISOPERANDFWD; + input TIEC405MMUEN; + input TIEPVRBIT10; + input TIEPVRBIT11; + input TIEPVRBIT28; + input TIEPVRBIT29; + input TIEPVRBIT30; + input TIEPVRBIT31; + input TIEPVRBIT8; + input TIEPVRBIT9; + input TRCC405TRACEDISABLE; + input TRCC405TRIGGEREVENTIN; + input [0:15] TIEAPUCONTROL; + input [0:23] TIEAPUUDI1; + input [0:23] TIEAPUUDI2; + input [0:23] TIEAPUUDI3; + input [0:23] TIEAPUUDI4; + input [0:23] TIEAPUUDI5; + input [0:23] TIEAPUUDI6; + input [0:23] TIEAPUUDI7; + input [0:23] TIEAPUUDI8; + input [0:2] FCMAPUEXECRFIELD; + input [0:31] BRAMDSOCMRDDBUS; + input [0:31] BRAMISOCMDCRRDDBUS; + input [0:31] EMACDCRDBUS; + input [0:31] EXTDCRDBUSIN; + input [0:31] FCMAPURESULT; + input [0:3] FCMAPUCR; + input [0:5] TIEDCRADDR; + input [0:63] BRAMISOCMRDDBUS; + input [0:63] PLBC405DCURDDBUS; + input [0:63] PLBC405ICURDDBUS; + input [0:7] DSARCVALUE; + input [0:7] DSCNTLVALUE; + input [0:7] ISARCVALUE; + input [0:7] ISCNTLVALUE; + input [1:3] PLBC405DCURDWDADDR; + input [1:3] PLBC405ICURDWDADDR; +endmodule + +module PPC440 (...); + parameter CLOCK_DELAY = "FALSE"; + parameter DCR_AUTOLOCK_ENABLE = "TRUE"; + parameter PPCDM_ASYNCMODE = "FALSE"; + parameter PPCDS_ASYNCMODE = "FALSE"; + parameter PPCS0_WIDTH_128N64 = "TRUE"; + parameter PPCS1_WIDTH_128N64 = "TRUE"; + parameter [0:16] APU_CONTROL = 17'h02000; + parameter [0:23] APU_UDI0 = 24'h000000; + parameter [0:23] APU_UDI1 = 24'h000000; + parameter [0:23] APU_UDI10 = 24'h000000; + parameter [0:23] APU_UDI11 = 24'h000000; + parameter [0:23] APU_UDI12 = 24'h000000; + parameter [0:23] APU_UDI13 = 24'h000000; + parameter [0:23] APU_UDI14 = 24'h000000; + parameter [0:23] APU_UDI15 = 24'h000000; + parameter [0:23] APU_UDI2 = 24'h000000; + parameter [0:23] APU_UDI3 = 24'h000000; + parameter [0:23] APU_UDI4 = 24'h000000; + parameter [0:23] APU_UDI5 = 24'h000000; + parameter [0:23] APU_UDI6 = 24'h000000; + parameter [0:23] APU_UDI7 = 24'h000000; + parameter [0:23] APU_UDI8 = 24'h000000; + parameter [0:23] APU_UDI9 = 24'h000000; + parameter [0:31] DMA0_RXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA0_TXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA1_RXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA1_TXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA2_RXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA2_TXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA3_RXCHANNELCTRL = 32'h01010000; + parameter [0:31] DMA3_TXCHANNELCTRL = 32'h01010000; + parameter [0:31] INTERCONNECT_IMASK = 32'hFFFFFFFF; + parameter [0:31] INTERCONNECT_TMPL_SEL = 32'h3FFFFFFF; + parameter [0:31] MI_ARBCONFIG = 32'h00432010; + parameter [0:31] MI_BANKCONFLICT_MASK = 32'h00000000; + parameter [0:31] MI_CONTROL = 32'h0000008F; + parameter [0:31] MI_ROWCONFLICT_MASK = 32'h00000000; + parameter [0:31] PPCM_ARBCONFIG = 32'h00432010; + parameter [0:31] PPCM_CONTROL = 32'h8000019F; + parameter [0:31] PPCM_COUNTER = 32'h00000500; + parameter [0:31] PPCS0_ADDRMAP_TMPL0 = 32'hFFFFFFFF; + parameter [0:31] PPCS0_ADDRMAP_TMPL1 = 32'hFFFFFFFF; + parameter [0:31] PPCS0_ADDRMAP_TMPL2 = 32'hFFFFFFFF; + parameter [0:31] PPCS0_ADDRMAP_TMPL3 = 32'hFFFFFFFF; + parameter [0:31] PPCS0_CONTROL = 32'h8033336C; + parameter [0:31] PPCS1_ADDRMAP_TMPL0 = 32'hFFFFFFFF; + parameter [0:31] PPCS1_ADDRMAP_TMPL1 = 32'hFFFFFFFF; + parameter [0:31] PPCS1_ADDRMAP_TMPL2 = 32'hFFFFFFFF; + parameter [0:31] PPCS1_ADDRMAP_TMPL3 = 32'hFFFFFFFF; + parameter [0:31] PPCS1_CONTROL = 32'h8033336C; + parameter [0:31] XBAR_ADDRMAP_TMPL0 = 32'hFFFF0000; + parameter [0:31] XBAR_ADDRMAP_TMPL1 = 32'h00000000; + parameter [0:31] XBAR_ADDRMAP_TMPL2 = 32'h00000000; + parameter [0:31] XBAR_ADDRMAP_TMPL3 = 32'h00000000; + parameter [0:7] DMA0_CONTROL = 8'h00; + parameter [0:7] DMA1_CONTROL = 8'h00; + parameter [0:7] DMA2_CONTROL = 8'h00; + parameter [0:7] DMA3_CONTROL = 8'h00; + parameter [0:9] DMA0_RXIRQTIMER = 10'h3FF; + parameter [0:9] DMA0_TXIRQTIMER = 10'h3FF; + parameter [0:9] DMA1_RXIRQTIMER = 10'h3FF; + parameter [0:9] DMA1_TXIRQTIMER = 10'h3FF; + parameter [0:9] DMA2_RXIRQTIMER = 10'h3FF; + parameter [0:9] DMA2_TXIRQTIMER = 10'h3FF; + parameter [0:9] DMA3_RXIRQTIMER = 10'h3FF; + parameter [0:9] DMA3_TXIRQTIMER = 10'h3FF; + output APUFCMDECFPUOP; + output APUFCMDECLOAD; + output APUFCMDECNONAUTON; + output APUFCMDECSTORE; + output APUFCMDECUDIVALID; + output APUFCMENDIAN; + output APUFCMFLUSH; + output APUFCMINSTRVALID; + output APUFCMLOADDVALID; + output APUFCMMSRFE0; + output APUFCMMSRFE1; + output APUFCMNEXTINSTRREADY; + output APUFCMOPERANDVALID; + output APUFCMWRITEBACKOK; + output C440CPMCORESLEEPREQ; + output C440CPMDECIRPTREQ; + output C440CPMFITIRPTREQ; + output C440CPMMSRCE; + output C440CPMMSREE; + output C440CPMTIMERRESETREQ; + output C440CPMWDIRPTREQ; + output C440JTGTDO; + output C440JTGTDOEN; + output C440MACHINECHECK; + output C440RSTCHIPRESETREQ; + output C440RSTCORERESETREQ; + output C440RSTSYSTEMRESETREQ; + output C440TRCCYCLE; + output C440TRCTRIGGEREVENTOUT; + output DMA0LLRSTENGINEACK; + output DMA0LLRXDSTRDYN; + output DMA0LLTXEOFN; + output DMA0LLTXEOPN; + output DMA0LLTXSOFN; + output DMA0LLTXSOPN; + output DMA0LLTXSRCRDYN; + output DMA0RXIRQ; + output DMA0TXIRQ; + output DMA1LLRSTENGINEACK; + output DMA1LLRXDSTRDYN; + output DMA1LLTXEOFN; + output DMA1LLTXEOPN; + output DMA1LLTXSOFN; + output DMA1LLTXSOPN; + output DMA1LLTXSRCRDYN; + output DMA1RXIRQ; + output DMA1TXIRQ; + output DMA2LLRSTENGINEACK; + output DMA2LLRXDSTRDYN; + output DMA2LLTXEOFN; + output DMA2LLTXEOPN; + output DMA2LLTXSOFN; + output DMA2LLTXSOPN; + output DMA2LLTXSRCRDYN; + output DMA2RXIRQ; + output DMA2TXIRQ; + output DMA3LLRSTENGINEACK; + output DMA3LLRXDSTRDYN; + output DMA3LLTXEOFN; + output DMA3LLTXEOPN; + output DMA3LLTXSOFN; + output DMA3LLTXSOPN; + output DMA3LLTXSRCRDYN; + output DMA3RXIRQ; + output DMA3TXIRQ; + output MIMCADDRESSVALID; + output MIMCBANKCONFLICT; + output MIMCREADNOTWRITE; + output MIMCROWCONFLICT; + output MIMCWRITEDATAVALID; + output PPCCPMINTERCONNECTBUSY; + output PPCDMDCRREAD; + output PPCDMDCRWRITE; + output PPCDSDCRACK; + output PPCDSDCRTIMEOUTWAIT; + output PPCEICINTERCONNECTIRQ; + output PPCMPLBABORT; + output PPCMPLBBUSLOCK; + output PPCMPLBLOCKERR; + output PPCMPLBRDBURST; + output PPCMPLBREQUEST; + output PPCMPLBRNW; + output PPCMPLBWRBURST; + output PPCS0PLBADDRACK; + output PPCS0PLBRDBTERM; + output PPCS0PLBRDCOMP; + output PPCS0PLBRDDACK; + output PPCS0PLBREARBITRATE; + output PPCS0PLBWAIT; + output PPCS0PLBWRBTERM; + output PPCS0PLBWRCOMP; + output PPCS0PLBWRDACK; + output PPCS1PLBADDRACK; + output PPCS1PLBRDBTERM; + output PPCS1PLBRDCOMP; + output PPCS1PLBRDDACK; + output PPCS1PLBREARBITRATE; + output PPCS1PLBWAIT; + output PPCS1PLBWRBTERM; + output PPCS1PLBWRCOMP; + output PPCS1PLBWRDACK; + output [0:127] APUFCMLOADDATA; + output [0:127] MIMCWRITEDATA; + output [0:127] PPCMPLBWRDBUS; + output [0:127] PPCS0PLBRDDBUS; + output [0:127] PPCS1PLBRDDBUS; + output [0:13] C440TRCTRIGGEREVENTTYPE; + output [0:15] MIMCBYTEENABLE; + output [0:15] PPCMPLBBE; + output [0:15] PPCMPLBTATTRIBUTE; + output [0:1] PPCMPLBPRIORITY; + output [0:1] PPCS0PLBSSIZE; + output [0:1] PPCS1PLBSSIZE; + output [0:2] APUFCMDECLDSTXFERSIZE; + output [0:2] C440TRCBRANCHSTATUS; + output [0:2] PPCMPLBTYPE; + output [0:31] APUFCMINSTRUCTION; + output [0:31] APUFCMRADATA; + output [0:31] APUFCMRBDATA; + output [0:31] DMA0LLTXD; + output [0:31] DMA1LLTXD; + output [0:31] DMA2LLTXD; + output [0:31] DMA3LLTXD; + output [0:31] PPCDMDCRDBUSOUT; + output [0:31] PPCDSDCRDBUSIN; + output [0:31] PPCMPLBABUS; + output [0:35] MIMCADDRESS; + output [0:3] APUFCMDECUDI; + output [0:3] APUFCMLOADBYTEADDR; + output [0:3] DMA0LLTXREM; + output [0:3] DMA1LLTXREM; + output [0:3] DMA2LLTXREM; + output [0:3] DMA3LLTXREM; + output [0:3] PPCMPLBSIZE; + output [0:3] PPCS0PLBMBUSY; + output [0:3] PPCS0PLBMIRQ; + output [0:3] PPCS0PLBMRDERR; + output [0:3] PPCS0PLBMWRERR; + output [0:3] PPCS0PLBRDWDADDR; + output [0:3] PPCS1PLBMBUSY; + output [0:3] PPCS1PLBMIRQ; + output [0:3] PPCS1PLBMRDERR; + output [0:3] PPCS1PLBMWRERR; + output [0:3] PPCS1PLBRDWDADDR; + output [0:4] C440TRCEXECUTIONSTATUS; + output [0:6] C440TRCTRACESTATUS; + output [0:7] C440DBGSYSTEMCONTROL; + output [0:9] PPCDMDCRABUS; + output [20:21] PPCDMDCRUABUS; + output [28:31] PPCMPLBUABUS; + input CPMC440CLK; + input CPMC440CLKEN; + input CPMC440CORECLOCKINACTIVE; + input CPMC440TIMERCLOCK; + input CPMDCRCLK; + input CPMDMA0LLCLK; + input CPMDMA1LLCLK; + input CPMDMA2LLCLK; + input CPMDMA3LLCLK; + input CPMFCMCLK; + input CPMINTERCONNECTCLK; + input CPMINTERCONNECTCLKEN; + input CPMINTERCONNECTCLKNTO1; + input CPMMCCLK; + input CPMPPCMPLBCLK; + input CPMPPCS0PLBCLK; + input CPMPPCS1PLBCLK; + input DBGC440DEBUGHALT; + input DBGC440UNCONDDEBUGEVENT; + input DCRPPCDMACK; + input DCRPPCDMTIMEOUTWAIT; + input DCRPPCDSREAD; + input DCRPPCDSWRITE; + input EICC440CRITIRQ; + input EICC440EXTIRQ; + input FCMAPUCONFIRMINSTR; + input FCMAPUDONE; + input FCMAPUEXCEPTION; + input FCMAPUFPSCRFEX; + input FCMAPURESULTVALID; + input FCMAPUSLEEPNOTREADY; + input JTGC440TCK; + input JTGC440TDI; + input JTGC440TMS; + input JTGC440TRSTNEG; + input LLDMA0RSTENGINEREQ; + input LLDMA0RXEOFN; + input LLDMA0RXEOPN; + input LLDMA0RXSOFN; + input LLDMA0RXSOPN; + input LLDMA0RXSRCRDYN; + input LLDMA0TXDSTRDYN; + input LLDMA1RSTENGINEREQ; + input LLDMA1RXEOFN; + input LLDMA1RXEOPN; + input LLDMA1RXSOFN; + input LLDMA1RXSOPN; + input LLDMA1RXSRCRDYN; + input LLDMA1TXDSTRDYN; + input LLDMA2RSTENGINEREQ; + input LLDMA2RXEOFN; + input LLDMA2RXEOPN; + input LLDMA2RXSOFN; + input LLDMA2RXSOPN; + input LLDMA2RXSRCRDYN; + input LLDMA2TXDSTRDYN; + input LLDMA3RSTENGINEREQ; + input LLDMA3RXEOFN; + input LLDMA3RXEOPN; + input LLDMA3RXSOFN; + input LLDMA3RXSOPN; + input LLDMA3RXSRCRDYN; + input LLDMA3TXDSTRDYN; + input MCMIADDRREADYTOACCEPT; + input MCMIREADDATAERR; + input MCMIREADDATAVALID; + input PLBPPCMADDRACK; + input PLBPPCMMBUSY; + input PLBPPCMMIRQ; + input PLBPPCMMRDERR; + input PLBPPCMMWRERR; + input PLBPPCMRDBTERM; + input PLBPPCMRDDACK; + input PLBPPCMRDPENDREQ; + input PLBPPCMREARBITRATE; + input PLBPPCMTIMEOUT; + input PLBPPCMWRBTERM; + input PLBPPCMWRDACK; + input PLBPPCMWRPENDREQ; + input PLBPPCS0ABORT; + input PLBPPCS0BUSLOCK; + input PLBPPCS0LOCKERR; + input PLBPPCS0PAVALID; + input PLBPPCS0RDBURST; + input PLBPPCS0RDPENDREQ; + input PLBPPCS0RDPRIM; + input PLBPPCS0RNW; + input PLBPPCS0SAVALID; + input PLBPPCS0WRBURST; + input PLBPPCS0WRPENDREQ; + input PLBPPCS0WRPRIM; + input PLBPPCS1ABORT; + input PLBPPCS1BUSLOCK; + input PLBPPCS1LOCKERR; + input PLBPPCS1PAVALID; + input PLBPPCS1RDBURST; + input PLBPPCS1RDPENDREQ; + input PLBPPCS1RDPRIM; + input PLBPPCS1RNW; + input PLBPPCS1SAVALID; + input PLBPPCS1WRBURST; + input PLBPPCS1WRPENDREQ; + input PLBPPCS1WRPRIM; + input RSTC440RESETCHIP; + input RSTC440RESETCORE; + input RSTC440RESETSYSTEM; + input TIEC440ENDIANRESET; + input TRCC440TRACEDISABLE; + input TRCC440TRIGGEREVENTIN; + input [0:127] FCMAPUSTOREDATA; + input [0:127] MCMIREADDATA; + input [0:127] PLBPPCMRDDBUS; + input [0:127] PLBPPCS0WRDBUS; + input [0:127] PLBPPCS1WRDBUS; + input [0:15] PLBPPCS0BE; + input [0:15] PLBPPCS0TATTRIBUTE; + input [0:15] PLBPPCS1BE; + input [0:15] PLBPPCS1TATTRIBUTE; + input [0:1] PLBPPCMRDPENDPRI; + input [0:1] PLBPPCMREQPRI; + input [0:1] PLBPPCMSSIZE; + input [0:1] PLBPPCMWRPENDPRI; + input [0:1] PLBPPCS0MASTERID; + input [0:1] PLBPPCS0MSIZE; + input [0:1] PLBPPCS0RDPENDPRI; + input [0:1] PLBPPCS0REQPRI; + input [0:1] PLBPPCS0WRPENDPRI; + input [0:1] PLBPPCS1MASTERID; + input [0:1] PLBPPCS1MSIZE; + input [0:1] PLBPPCS1RDPENDPRI; + input [0:1] PLBPPCS1REQPRI; + input [0:1] PLBPPCS1WRPENDPRI; + input [0:1] TIEC440DCURDLDCACHEPLBPRIO; + input [0:1] TIEC440DCURDNONCACHEPLBPRIO; + input [0:1] TIEC440DCURDTOUCHPLBPRIO; + input [0:1] TIEC440DCURDURGENTPLBPRIO; + input [0:1] TIEC440DCUWRFLUSHPLBPRIO; + input [0:1] TIEC440DCUWRSTOREPLBPRIO; + input [0:1] TIEC440DCUWRURGENTPLBPRIO; + input [0:1] TIEC440ICURDFETCHPLBPRIO; + input [0:1] TIEC440ICURDSPECPLBPRIO; + input [0:1] TIEC440ICURDTOUCHPLBPRIO; + input [0:1] TIEDCRBASEADDR; + input [0:2] PLBPPCS0TYPE; + input [0:2] PLBPPCS1TYPE; + input [0:31] DCRPPCDMDBUSIN; + input [0:31] DCRPPCDSDBUSOUT; + input [0:31] FCMAPURESULT; + input [0:31] LLDMA0RXD; + input [0:31] LLDMA1RXD; + input [0:31] LLDMA2RXD; + input [0:31] LLDMA3RXD; + input [0:31] PLBPPCS0ABUS; + input [0:31] PLBPPCS1ABUS; + input [0:3] FCMAPUCR; + input [0:3] LLDMA0RXREM; + input [0:3] LLDMA1RXREM; + input [0:3] LLDMA2RXREM; + input [0:3] LLDMA3RXREM; + input [0:3] PLBPPCMRDWDADDR; + input [0:3] PLBPPCS0SIZE; + input [0:3] PLBPPCS1SIZE; + input [0:3] TIEC440ERPNRESET; + input [0:3] TIEC440USERRESET; + input [0:4] DBGC440SYSTEMSTATUS; + input [0:9] DCRPPCDSABUS; + input [28:31] PLBPPCS0UABUS; + input [28:31] PLBPPCS1UABUS; + input [28:31] TIEC440PIR; + input [28:31] TIEC440PVR; +endmodule + +(* keep *) +module PS7 (...); + output DMA0DAVALID; + output DMA0DRREADY; + output DMA0RSTN; + output DMA1DAVALID; + output DMA1DRREADY; + output DMA1RSTN; + output DMA2DAVALID; + output DMA2DRREADY; + output DMA2RSTN; + output DMA3DAVALID; + output DMA3DRREADY; + output DMA3RSTN; + output EMIOCAN0PHYTX; + output EMIOCAN1PHYTX; + output EMIOENET0GMIITXEN; + output EMIOENET0GMIITXER; + output EMIOENET0MDIOMDC; + output EMIOENET0MDIOO; + output EMIOENET0MDIOTN; + output EMIOENET0PTPDELAYREQRX; + output EMIOENET0PTPDELAYREQTX; + output EMIOENET0PTPPDELAYREQRX; + output EMIOENET0PTPPDELAYREQTX; + output EMIOENET0PTPPDELAYRESPRX; + output EMIOENET0PTPPDELAYRESPTX; + output EMIOENET0PTPSYNCFRAMERX; + output EMIOENET0PTPSYNCFRAMETX; + output EMIOENET0SOFRX; + output EMIOENET0SOFTX; + output EMIOENET1GMIITXEN; + output EMIOENET1GMIITXER; + output EMIOENET1MDIOMDC; + output EMIOENET1MDIOO; + output EMIOENET1MDIOTN; + output EMIOENET1PTPDELAYREQRX; + output EMIOENET1PTPDELAYREQTX; + output EMIOENET1PTPPDELAYREQRX; + output EMIOENET1PTPPDELAYREQTX; + output EMIOENET1PTPPDELAYRESPRX; + output EMIOENET1PTPPDELAYRESPTX; + output EMIOENET1PTPSYNCFRAMERX; + output EMIOENET1PTPSYNCFRAMETX; + output EMIOENET1SOFRX; + output EMIOENET1SOFTX; + output EMIOI2C0SCLO; + output EMIOI2C0SCLTN; + output EMIOI2C0SDAO; + output EMIOI2C0SDATN; + output EMIOI2C1SCLO; + output EMIOI2C1SCLTN; + output EMIOI2C1SDAO; + output EMIOI2C1SDATN; + output EMIOPJTAGTDO; + output EMIOPJTAGTDTN; + output EMIOSDIO0BUSPOW; + output EMIOSDIO0CLK; + output EMIOSDIO0CMDO; + output EMIOSDIO0CMDTN; + output EMIOSDIO0LED; + output EMIOSDIO1BUSPOW; + output EMIOSDIO1CLK; + output EMIOSDIO1CMDO; + output EMIOSDIO1CMDTN; + output EMIOSDIO1LED; + output EMIOSPI0MO; + output EMIOSPI0MOTN; + output EMIOSPI0SCLKO; + output EMIOSPI0SCLKTN; + output EMIOSPI0SO; + output EMIOSPI0SSNTN; + output EMIOSPI0STN; + output EMIOSPI1MO; + output EMIOSPI1MOTN; + output EMIOSPI1SCLKO; + output EMIOSPI1SCLKTN; + output EMIOSPI1SO; + output EMIOSPI1SSNTN; + output EMIOSPI1STN; + output EMIOTRACECTL; + output EMIOUART0DTRN; + output EMIOUART0RTSN; + output EMIOUART0TX; + output EMIOUART1DTRN; + output EMIOUART1RTSN; + output EMIOUART1TX; + output EMIOUSB0VBUSPWRSELECT; + output EMIOUSB1VBUSPWRSELECT; + output EMIOWDTRSTO; + output EVENTEVENTO; + output MAXIGP0ARESETN; + output MAXIGP0ARVALID; + output MAXIGP0AWVALID; + output MAXIGP0BREADY; + output MAXIGP0RREADY; + output MAXIGP0WLAST; + output MAXIGP0WVALID; + output MAXIGP1ARESETN; + output MAXIGP1ARVALID; + output MAXIGP1AWVALID; + output MAXIGP1BREADY; + output MAXIGP1RREADY; + output MAXIGP1WLAST; + output MAXIGP1WVALID; + output SAXIACPARESETN; + output SAXIACPARREADY; + output SAXIACPAWREADY; + output SAXIACPBVALID; + output SAXIACPRLAST; + output SAXIACPRVALID; + output SAXIACPWREADY; + output SAXIGP0ARESETN; + output SAXIGP0ARREADY; + output SAXIGP0AWREADY; + output SAXIGP0BVALID; + output SAXIGP0RLAST; + output SAXIGP0RVALID; + output SAXIGP0WREADY; + output SAXIGP1ARESETN; + output SAXIGP1ARREADY; + output SAXIGP1AWREADY; + output SAXIGP1BVALID; + output SAXIGP1RLAST; + output SAXIGP1RVALID; + output SAXIGP1WREADY; + output SAXIHP0ARESETN; + output SAXIHP0ARREADY; + output SAXIHP0AWREADY; + output SAXIHP0BVALID; + output SAXIHP0RLAST; + output SAXIHP0RVALID; + output SAXIHP0WREADY; + output SAXIHP1ARESETN; + output SAXIHP1ARREADY; + output SAXIHP1AWREADY; + output SAXIHP1BVALID; + output SAXIHP1RLAST; + output SAXIHP1RVALID; + output SAXIHP1WREADY; + output SAXIHP2ARESETN; + output SAXIHP2ARREADY; + output SAXIHP2AWREADY; + output SAXIHP2BVALID; + output SAXIHP2RLAST; + output SAXIHP2RVALID; + output SAXIHP2WREADY; + output SAXIHP3ARESETN; + output SAXIHP3ARREADY; + output SAXIHP3AWREADY; + output SAXIHP3BVALID; + output SAXIHP3RLAST; + output SAXIHP3RVALID; + output SAXIHP3WREADY; + output [11:0] MAXIGP0ARID; + output [11:0] MAXIGP0AWID; + output [11:0] MAXIGP0WID; + output [11:0] MAXIGP1ARID; + output [11:0] MAXIGP1AWID; + output [11:0] MAXIGP1WID; + output [1:0] DMA0DATYPE; + output [1:0] DMA1DATYPE; + output [1:0] DMA2DATYPE; + output [1:0] DMA3DATYPE; + output [1:0] EMIOUSB0PORTINDCTL; + output [1:0] EMIOUSB1PORTINDCTL; + output [1:0] EVENTSTANDBYWFE; + output [1:0] EVENTSTANDBYWFI; + output [1:0] MAXIGP0ARBURST; + output [1:0] MAXIGP0ARLOCK; + output [1:0] MAXIGP0ARSIZE; + output [1:0] MAXIGP0AWBURST; + output [1:0] MAXIGP0AWLOCK; + output [1:0] MAXIGP0AWSIZE; + output [1:0] MAXIGP1ARBURST; + output [1:0] MAXIGP1ARLOCK; + output [1:0] MAXIGP1ARSIZE; + output [1:0] MAXIGP1AWBURST; + output [1:0] MAXIGP1AWLOCK; + output [1:0] MAXIGP1AWSIZE; + output [1:0] SAXIACPBRESP; + output [1:0] SAXIACPRRESP; + output [1:0] SAXIGP0BRESP; + output [1:0] SAXIGP0RRESP; + output [1:0] SAXIGP1BRESP; + output [1:0] SAXIGP1RRESP; + output [1:0] SAXIHP0BRESP; + output [1:0] SAXIHP0RRESP; + output [1:0] SAXIHP1BRESP; + output [1:0] SAXIHP1RRESP; + output [1:0] SAXIHP2BRESP; + output [1:0] SAXIHP2RRESP; + output [1:0] SAXIHP3BRESP; + output [1:0] SAXIHP3RRESP; + output [28:0] IRQP2F; + output [2:0] EMIOSDIO0BUSVOLT; + output [2:0] EMIOSDIO1BUSVOLT; + output [2:0] EMIOSPI0SSON; + output [2:0] EMIOSPI1SSON; + output [2:0] EMIOTTC0WAVEO; + output [2:0] EMIOTTC1WAVEO; + output [2:0] MAXIGP0ARPROT; + output [2:0] MAXIGP0AWPROT; + output [2:0] MAXIGP1ARPROT; + output [2:0] MAXIGP1AWPROT; + output [2:0] SAXIACPBID; + output [2:0] SAXIACPRID; + output [2:0] SAXIHP0RACOUNT; + output [2:0] SAXIHP1RACOUNT; + output [2:0] SAXIHP2RACOUNT; + output [2:0] SAXIHP3RACOUNT; + output [31:0] EMIOTRACEDATA; + output [31:0] FTMTP2FDEBUG; + output [31:0] MAXIGP0ARADDR; + output [31:0] MAXIGP0AWADDR; + output [31:0] MAXIGP0WDATA; + output [31:0] MAXIGP1ARADDR; + output [31:0] MAXIGP1AWADDR; + output [31:0] MAXIGP1WDATA; + output [31:0] SAXIGP0RDATA; + output [31:0] SAXIGP1RDATA; + output [3:0] EMIOSDIO0DATAO; + output [3:0] EMIOSDIO0DATATN; + output [3:0] EMIOSDIO1DATAO; + output [3:0] EMIOSDIO1DATATN; + output [3:0] FCLKCLK; + output [3:0] FCLKRESETN; + output [3:0] FTMTF2PTRIGACK; + output [3:0] FTMTP2FTRIG; + output [3:0] MAXIGP0ARCACHE; + output [3:0] MAXIGP0ARLEN; + output [3:0] MAXIGP0ARQOS; + output [3:0] MAXIGP0AWCACHE; + output [3:0] MAXIGP0AWLEN; + output [3:0] MAXIGP0AWQOS; + output [3:0] MAXIGP0WSTRB; + output [3:0] MAXIGP1ARCACHE; + output [3:0] MAXIGP1ARLEN; + output [3:0] MAXIGP1ARQOS; + output [3:0] MAXIGP1AWCACHE; + output [3:0] MAXIGP1AWLEN; + output [3:0] MAXIGP1AWQOS; + output [3:0] MAXIGP1WSTRB; + output [5:0] SAXIGP0BID; + output [5:0] SAXIGP0RID; + output [5:0] SAXIGP1BID; + output [5:0] SAXIGP1RID; + output [5:0] SAXIHP0BID; + output [5:0] SAXIHP0RID; + output [5:0] SAXIHP0WACOUNT; + output [5:0] SAXIHP1BID; + output [5:0] SAXIHP1RID; + output [5:0] SAXIHP1WACOUNT; + output [5:0] SAXIHP2BID; + output [5:0] SAXIHP2RID; + output [5:0] SAXIHP2WACOUNT; + output [5:0] SAXIHP3BID; + output [5:0] SAXIHP3RID; + output [5:0] SAXIHP3WACOUNT; + output [63:0] EMIOGPIOO; + output [63:0] EMIOGPIOTN; + output [63:0] SAXIACPRDATA; + output [63:0] SAXIHP0RDATA; + output [63:0] SAXIHP1RDATA; + output [63:0] SAXIHP2RDATA; + output [63:0] SAXIHP3RDATA; + output [7:0] EMIOENET0GMIITXD; + output [7:0] EMIOENET1GMIITXD; + output [7:0] SAXIHP0RCOUNT; + output [7:0] SAXIHP0WCOUNT; + output [7:0] SAXIHP1RCOUNT; + output [7:0] SAXIHP1WCOUNT; + output [7:0] SAXIHP2RCOUNT; + output [7:0] SAXIHP2WCOUNT; + output [7:0] SAXIHP3RCOUNT; + output [7:0] SAXIHP3WCOUNT; + inout DDRCASB; + inout DDRCKE; + inout DDRCKN; + inout DDRCKP; + inout DDRCSB; + inout DDRDRSTB; + inout DDRODT; + inout DDRRASB; + inout DDRVRN; + inout DDRVRP; + inout DDRWEB; + inout PSCLK; + inout PSPORB; + inout PSSRSTB; + inout [14:0] DDRA; + inout [2:0] DDRBA; + inout [31:0] DDRDQ; + inout [3:0] DDRDM; + inout [3:0] DDRDQSN; + inout [3:0] DDRDQSP; + inout [53:0] MIO; + input DMA0ACLK; + input DMA0DAREADY; + input DMA0DRLAST; + input DMA0DRVALID; + input DMA1ACLK; + input DMA1DAREADY; + input DMA1DRLAST; + input DMA1DRVALID; + input DMA2ACLK; + input DMA2DAREADY; + input DMA2DRLAST; + input DMA2DRVALID; + input DMA3ACLK; + input DMA3DAREADY; + input DMA3DRLAST; + input DMA3DRVALID; + input EMIOCAN0PHYRX; + input EMIOCAN1PHYRX; + input EMIOENET0EXTINTIN; + input EMIOENET0GMIICOL; + input EMIOENET0GMIICRS; + input EMIOENET0GMIIRXCLK; + input EMIOENET0GMIIRXDV; + input EMIOENET0GMIIRXER; + input EMIOENET0GMIITXCLK; + input EMIOENET0MDIOI; + input EMIOENET1EXTINTIN; + input EMIOENET1GMIICOL; + input EMIOENET1GMIICRS; + input EMIOENET1GMIIRXCLK; + input EMIOENET1GMIIRXDV; + input EMIOENET1GMIIRXER; + input EMIOENET1GMIITXCLK; + input EMIOENET1MDIOI; + input EMIOI2C0SCLI; + input EMIOI2C0SDAI; + input EMIOI2C1SCLI; + input EMIOI2C1SDAI; + input EMIOPJTAGTCK; + input EMIOPJTAGTDI; + input EMIOPJTAGTMS; + input EMIOSDIO0CDN; + input EMIOSDIO0CLKFB; + input EMIOSDIO0CMDI; + input EMIOSDIO0WP; + input EMIOSDIO1CDN; + input EMIOSDIO1CLKFB; + input EMIOSDIO1CMDI; + input EMIOSDIO1WP; + input EMIOSPI0MI; + input EMIOSPI0SCLKI; + input EMIOSPI0SI; + input EMIOSPI0SSIN; + input EMIOSPI1MI; + input EMIOSPI1SCLKI; + input EMIOSPI1SI; + input EMIOSPI1SSIN; + input EMIOSRAMINTIN; + input EMIOTRACECLK; + input EMIOUART0CTSN; + input EMIOUART0DCDN; + input EMIOUART0DSRN; + input EMIOUART0RIN; + input EMIOUART0RX; + input EMIOUART1CTSN; + input EMIOUART1DCDN; + input EMIOUART1DSRN; + input EMIOUART1RIN; + input EMIOUART1RX; + input EMIOUSB0VBUSPWRFAULT; + input EMIOUSB1VBUSPWRFAULT; + input EMIOWDTCLKI; + input EVENTEVENTI; + input FPGAIDLEN; + input FTMDTRACEINCLOCK; + input FTMDTRACEINVALID; + input MAXIGP0ACLK; + input MAXIGP0ARREADY; + input MAXIGP0AWREADY; + input MAXIGP0BVALID; + input MAXIGP0RLAST; + input MAXIGP0RVALID; + input MAXIGP0WREADY; + input MAXIGP1ACLK; + input MAXIGP1ARREADY; + input MAXIGP1AWREADY; + input MAXIGP1BVALID; + input MAXIGP1RLAST; + input MAXIGP1RVALID; + input MAXIGP1WREADY; + input SAXIACPACLK; + input SAXIACPARVALID; + input SAXIACPAWVALID; + input SAXIACPBREADY; + input SAXIACPRREADY; + input SAXIACPWLAST; + input SAXIACPWVALID; + input SAXIGP0ACLK; + input SAXIGP0ARVALID; + input SAXIGP0AWVALID; + input SAXIGP0BREADY; + input SAXIGP0RREADY; + input SAXIGP0WLAST; + input SAXIGP0WVALID; + input SAXIGP1ACLK; + input SAXIGP1ARVALID; + input SAXIGP1AWVALID; + input SAXIGP1BREADY; + input SAXIGP1RREADY; + input SAXIGP1WLAST; + input SAXIGP1WVALID; + input SAXIHP0ACLK; + input SAXIHP0ARVALID; + input SAXIHP0AWVALID; + input SAXIHP0BREADY; + input SAXIHP0RDISSUECAP1EN; + input SAXIHP0RREADY; + input SAXIHP0WLAST; + input SAXIHP0WRISSUECAP1EN; + input SAXIHP0WVALID; + input SAXIHP1ACLK; + input SAXIHP1ARVALID; + input SAXIHP1AWVALID; + input SAXIHP1BREADY; + input SAXIHP1RDISSUECAP1EN; + input SAXIHP1RREADY; + input SAXIHP1WLAST; + input SAXIHP1WRISSUECAP1EN; + input SAXIHP1WVALID; + input SAXIHP2ACLK; + input SAXIHP2ARVALID; + input SAXIHP2AWVALID; + input SAXIHP2BREADY; + input SAXIHP2RDISSUECAP1EN; + input SAXIHP2RREADY; + input SAXIHP2WLAST; + input SAXIHP2WRISSUECAP1EN; + input SAXIHP2WVALID; + input SAXIHP3ACLK; + input SAXIHP3ARVALID; + input SAXIHP3AWVALID; + input SAXIHP3BREADY; + input SAXIHP3RDISSUECAP1EN; + input SAXIHP3RREADY; + input SAXIHP3WLAST; + input SAXIHP3WRISSUECAP1EN; + input SAXIHP3WVALID; + input [11:0] MAXIGP0BID; + input [11:0] MAXIGP0RID; + input [11:0] MAXIGP1BID; + input [11:0] MAXIGP1RID; + input [19:0] IRQF2P; + input [1:0] DMA0DRTYPE; + input [1:0] DMA1DRTYPE; + input [1:0] DMA2DRTYPE; + input [1:0] DMA3DRTYPE; + input [1:0] MAXIGP0BRESP; + input [1:0] MAXIGP0RRESP; + input [1:0] MAXIGP1BRESP; + input [1:0] MAXIGP1RRESP; + input [1:0] SAXIACPARBURST; + input [1:0] SAXIACPARLOCK; + input [1:0] SAXIACPARSIZE; + input [1:0] SAXIACPAWBURST; + input [1:0] SAXIACPAWLOCK; + input [1:0] SAXIACPAWSIZE; + input [1:0] SAXIGP0ARBURST; + input [1:0] SAXIGP0ARLOCK; + input [1:0] SAXIGP0ARSIZE; + input [1:0] SAXIGP0AWBURST; + input [1:0] SAXIGP0AWLOCK; + input [1:0] SAXIGP0AWSIZE; + input [1:0] SAXIGP1ARBURST; + input [1:0] SAXIGP1ARLOCK; + input [1:0] SAXIGP1ARSIZE; + input [1:0] SAXIGP1AWBURST; + input [1:0] SAXIGP1AWLOCK; + input [1:0] SAXIGP1AWSIZE; + input [1:0] SAXIHP0ARBURST; + input [1:0] SAXIHP0ARLOCK; + input [1:0] SAXIHP0ARSIZE; + input [1:0] SAXIHP0AWBURST; + input [1:0] SAXIHP0AWLOCK; + input [1:0] SAXIHP0AWSIZE; + input [1:0] SAXIHP1ARBURST; + input [1:0] SAXIHP1ARLOCK; + input [1:0] SAXIHP1ARSIZE; + input [1:0] SAXIHP1AWBURST; + input [1:0] SAXIHP1AWLOCK; + input [1:0] SAXIHP1AWSIZE; + input [1:0] SAXIHP2ARBURST; + input [1:0] SAXIHP2ARLOCK; + input [1:0] SAXIHP2ARSIZE; + input [1:0] SAXIHP2AWBURST; + input [1:0] SAXIHP2AWLOCK; + input [1:0] SAXIHP2AWSIZE; + input [1:0] SAXIHP3ARBURST; + input [1:0] SAXIHP3ARLOCK; + input [1:0] SAXIHP3ARSIZE; + input [1:0] SAXIHP3AWBURST; + input [1:0] SAXIHP3AWLOCK; + input [1:0] SAXIHP3AWSIZE; + input [2:0] EMIOTTC0CLKI; + input [2:0] EMIOTTC1CLKI; + input [2:0] SAXIACPARID; + input [2:0] SAXIACPARPROT; + input [2:0] SAXIACPAWID; + input [2:0] SAXIACPAWPROT; + input [2:0] SAXIACPWID; + input [2:0] SAXIGP0ARPROT; + input [2:0] SAXIGP0AWPROT; + input [2:0] SAXIGP1ARPROT; + input [2:0] SAXIGP1AWPROT; + input [2:0] SAXIHP0ARPROT; + input [2:0] SAXIHP0AWPROT; + input [2:0] SAXIHP1ARPROT; + input [2:0] SAXIHP1AWPROT; + input [2:0] SAXIHP2ARPROT; + input [2:0] SAXIHP2AWPROT; + input [2:0] SAXIHP3ARPROT; + input [2:0] SAXIHP3AWPROT; + input [31:0] FTMDTRACEINDATA; + input [31:0] FTMTF2PDEBUG; + input [31:0] MAXIGP0RDATA; + input [31:0] MAXIGP1RDATA; + input [31:0] SAXIACPARADDR; + input [31:0] SAXIACPAWADDR; + input [31:0] SAXIGP0ARADDR; + input [31:0] SAXIGP0AWADDR; + input [31:0] SAXIGP0WDATA; + input [31:0] SAXIGP1ARADDR; + input [31:0] SAXIGP1AWADDR; + input [31:0] SAXIGP1WDATA; + input [31:0] SAXIHP0ARADDR; + input [31:0] SAXIHP0AWADDR; + input [31:0] SAXIHP1ARADDR; + input [31:0] SAXIHP1AWADDR; + input [31:0] SAXIHP2ARADDR; + input [31:0] SAXIHP2AWADDR; + input [31:0] SAXIHP3ARADDR; + input [31:0] SAXIHP3AWADDR; + input [3:0] DDRARB; + input [3:0] EMIOSDIO0DATAI; + input [3:0] EMIOSDIO1DATAI; + input [3:0] FCLKCLKTRIGN; + input [3:0] FTMDTRACEINATID; + input [3:0] FTMTF2PTRIG; + input [3:0] FTMTP2FTRIGACK; + input [3:0] SAXIACPARCACHE; + input [3:0] SAXIACPARLEN; + input [3:0] SAXIACPARQOS; + input [3:0] SAXIACPAWCACHE; + input [3:0] SAXIACPAWLEN; + input [3:0] SAXIACPAWQOS; + input [3:0] SAXIGP0ARCACHE; + input [3:0] SAXIGP0ARLEN; + input [3:0] SAXIGP0ARQOS; + input [3:0] SAXIGP0AWCACHE; + input [3:0] SAXIGP0AWLEN; + input [3:0] SAXIGP0AWQOS; + input [3:0] SAXIGP0WSTRB; + input [3:0] SAXIGP1ARCACHE; + input [3:0] SAXIGP1ARLEN; + input [3:0] SAXIGP1ARQOS; + input [3:0] SAXIGP1AWCACHE; + input [3:0] SAXIGP1AWLEN; + input [3:0] SAXIGP1AWQOS; + input [3:0] SAXIGP1WSTRB; + input [3:0] SAXIHP0ARCACHE; + input [3:0] SAXIHP0ARLEN; + input [3:0] SAXIHP0ARQOS; + input [3:0] SAXIHP0AWCACHE; + input [3:0] SAXIHP0AWLEN; + input [3:0] SAXIHP0AWQOS; + input [3:0] SAXIHP1ARCACHE; + input [3:0] SAXIHP1ARLEN; + input [3:0] SAXIHP1ARQOS; + input [3:0] SAXIHP1AWCACHE; + input [3:0] SAXIHP1AWLEN; + input [3:0] SAXIHP1AWQOS; + input [3:0] SAXIHP2ARCACHE; + input [3:0] SAXIHP2ARLEN; + input [3:0] SAXIHP2ARQOS; + input [3:0] SAXIHP2AWCACHE; + input [3:0] SAXIHP2AWLEN; + input [3:0] SAXIHP2AWQOS; + input [3:0] SAXIHP3ARCACHE; + input [3:0] SAXIHP3ARLEN; + input [3:0] SAXIHP3ARQOS; + input [3:0] SAXIHP3AWCACHE; + input [3:0] SAXIHP3AWLEN; + input [3:0] SAXIHP3AWQOS; + input [4:0] SAXIACPARUSER; + input [4:0] SAXIACPAWUSER; + input [5:0] SAXIGP0ARID; + input [5:0] SAXIGP0AWID; + input [5:0] SAXIGP0WID; + input [5:0] SAXIGP1ARID; + input [5:0] SAXIGP1AWID; + input [5:0] SAXIGP1WID; + input [5:0] SAXIHP0ARID; + input [5:0] SAXIHP0AWID; + input [5:0] SAXIHP0WID; + input [5:0] SAXIHP1ARID; + input [5:0] SAXIHP1AWID; + input [5:0] SAXIHP1WID; + input [5:0] SAXIHP2ARID; + input [5:0] SAXIHP2AWID; + input [5:0] SAXIHP2WID; + input [5:0] SAXIHP3ARID; + input [5:0] SAXIHP3AWID; + input [5:0] SAXIHP3WID; + input [63:0] EMIOGPIOI; + input [63:0] SAXIACPWDATA; + input [63:0] SAXIHP0WDATA; + input [63:0] SAXIHP1WDATA; + input [63:0] SAXIHP2WDATA; + input [63:0] SAXIHP3WDATA; + input [7:0] EMIOENET0GMIIRXD; + input [7:0] EMIOENET1GMIIRXD; + input [7:0] SAXIACPWSTRB; + input [7:0] SAXIHP0WSTRB; + input [7:0] SAXIHP1WSTRB; + input [7:0] SAXIHP2WSTRB; + input [7:0] SAXIHP3WSTRB; +endmodule + +(* keep *) +module PS8 (...); + output [7:0] ADMA2PLCACK; + output [7:0] ADMA2PLTVLD; + output DPAUDIOREFCLK; + output DPAUXDATAOEN; + output DPAUXDATAOUT; + output DPLIVEVIDEODEOUT; + output [31:0] DPMAXISMIXEDAUDIOTDATA; + output DPMAXISMIXEDAUDIOTID; + output DPMAXISMIXEDAUDIOTVALID; + output DPSAXISAUDIOTREADY; + output DPVIDEOOUTHSYNC; + output [35:0] DPVIDEOOUTPIXEL1; + output DPVIDEOOUTVSYNC; + output DPVIDEOREFCLK; + output EMIOCAN0PHYTX; + output EMIOCAN1PHYTX; + output [1:0] EMIOENET0DMABUSWIDTH; + output EMIOENET0DMATXENDTOG; + output [93:0] EMIOENET0GEMTSUTIMERCNT; + output [7:0] EMIOENET0GMIITXD; + output EMIOENET0GMIITXEN; + output EMIOENET0GMIITXER; + output EMIOENET0MDIOMDC; + output EMIOENET0MDIOO; + output EMIOENET0MDIOTN; + output [7:0] EMIOENET0RXWDATA; + output EMIOENET0RXWEOP; + output EMIOENET0RXWERR; + output EMIOENET0RXWFLUSH; + output EMIOENET0RXWSOP; + output [44:0] EMIOENET0RXWSTATUS; + output EMIOENET0RXWWR; + output [2:0] EMIOENET0SPEEDMODE; + output EMIOENET0TXRRD; + output [3:0] EMIOENET0TXRSTATUS; + output [1:0] EMIOENET1DMABUSWIDTH; + output EMIOENET1DMATXENDTOG; + output [7:0] EMIOENET1GMIITXD; + output EMIOENET1GMIITXEN; + output EMIOENET1GMIITXER; + output EMIOENET1MDIOMDC; + output EMIOENET1MDIOO; + output EMIOENET1MDIOTN; + output [7:0] EMIOENET1RXWDATA; + output EMIOENET1RXWEOP; + output EMIOENET1RXWERR; + output EMIOENET1RXWFLUSH; + output EMIOENET1RXWSOP; + output [44:0] EMIOENET1RXWSTATUS; + output EMIOENET1RXWWR; + output [2:0] EMIOENET1SPEEDMODE; + output EMIOENET1TXRRD; + output [3:0] EMIOENET1TXRSTATUS; + output [1:0] EMIOENET2DMABUSWIDTH; + output EMIOENET2DMATXENDTOG; + output [7:0] EMIOENET2GMIITXD; + output EMIOENET2GMIITXEN; + output EMIOENET2GMIITXER; + output EMIOENET2MDIOMDC; + output EMIOENET2MDIOO; + output EMIOENET2MDIOTN; + output [7:0] EMIOENET2RXWDATA; + output EMIOENET2RXWEOP; + output EMIOENET2RXWERR; + output EMIOENET2RXWFLUSH; + output EMIOENET2RXWSOP; + output [44:0] EMIOENET2RXWSTATUS; + output EMIOENET2RXWWR; + output [2:0] EMIOENET2SPEEDMODE; + output EMIOENET2TXRRD; + output [3:0] EMIOENET2TXRSTATUS; + output [1:0] EMIOENET3DMABUSWIDTH; + output EMIOENET3DMATXENDTOG; + output [7:0] EMIOENET3GMIITXD; + output EMIOENET3GMIITXEN; + output EMIOENET3GMIITXER; + output EMIOENET3MDIOMDC; + output EMIOENET3MDIOO; + output EMIOENET3MDIOTN; + output [7:0] EMIOENET3RXWDATA; + output EMIOENET3RXWEOP; + output EMIOENET3RXWERR; + output EMIOENET3RXWFLUSH; + output EMIOENET3RXWSOP; + output [44:0] EMIOENET3RXWSTATUS; + output EMIOENET3RXWWR; + output [2:0] EMIOENET3SPEEDMODE; + output EMIOENET3TXRRD; + output [3:0] EMIOENET3TXRSTATUS; + output EMIOGEM0DELAYREQRX; + output EMIOGEM0DELAYREQTX; + output EMIOGEM0PDELAYREQRX; + output EMIOGEM0PDELAYREQTX; + output EMIOGEM0PDELAYRESPRX; + output EMIOGEM0PDELAYRESPTX; + output EMIOGEM0RXSOF; + output EMIOGEM0SYNCFRAMERX; + output EMIOGEM0SYNCFRAMETX; + output EMIOGEM0TSUTIMERCMPVAL; + output EMIOGEM0TXRFIXEDLAT; + output EMIOGEM0TXSOF; + output EMIOGEM1DELAYREQRX; + output EMIOGEM1DELAYREQTX; + output EMIOGEM1PDELAYREQRX; + output EMIOGEM1PDELAYREQTX; + output EMIOGEM1PDELAYRESPRX; + output EMIOGEM1PDELAYRESPTX; + output EMIOGEM1RXSOF; + output EMIOGEM1SYNCFRAMERX; + output EMIOGEM1SYNCFRAMETX; + output EMIOGEM1TSUTIMERCMPVAL; + output EMIOGEM1TXRFIXEDLAT; + output EMIOGEM1TXSOF; + output EMIOGEM2DELAYREQRX; + output EMIOGEM2DELAYREQTX; + output EMIOGEM2PDELAYREQRX; + output EMIOGEM2PDELAYREQTX; + output EMIOGEM2PDELAYRESPRX; + output EMIOGEM2PDELAYRESPTX; + output EMIOGEM2RXSOF; + output EMIOGEM2SYNCFRAMERX; + output EMIOGEM2SYNCFRAMETX; + output EMIOGEM2TSUTIMERCMPVAL; + output EMIOGEM2TXRFIXEDLAT; + output EMIOGEM2TXSOF; + output EMIOGEM3DELAYREQRX; + output EMIOGEM3DELAYREQTX; + output EMIOGEM3PDELAYREQRX; + output EMIOGEM3PDELAYREQTX; + output EMIOGEM3PDELAYRESPRX; + output EMIOGEM3PDELAYRESPTX; + output EMIOGEM3RXSOF; + output EMIOGEM3SYNCFRAMERX; + output EMIOGEM3SYNCFRAMETX; + output EMIOGEM3TSUTIMERCMPVAL; + output EMIOGEM3TXRFIXEDLAT; + output EMIOGEM3TXSOF; + output [95:0] EMIOGPIOO; + output [95:0] EMIOGPIOTN; + output EMIOI2C0SCLO; + output EMIOI2C0SCLTN; + output EMIOI2C0SDAO; + output EMIOI2C0SDATN; + output EMIOI2C1SCLO; + output EMIOI2C1SCLTN; + output EMIOI2C1SDAO; + output EMIOI2C1SDATN; + output EMIOSDIO0BUSPOWER; + output [2:0] EMIOSDIO0BUSVOLT; + output EMIOSDIO0CLKOUT; + output EMIOSDIO0CMDENA; + output EMIOSDIO0CMDOUT; + output [7:0] EMIOSDIO0DATAENA; + output [7:0] EMIOSDIO0DATAOUT; + output EMIOSDIO0LEDCONTROL; + output EMIOSDIO1BUSPOWER; + output [2:0] EMIOSDIO1BUSVOLT; + output EMIOSDIO1CLKOUT; + output EMIOSDIO1CMDENA; + output EMIOSDIO1CMDOUT; + output [7:0] EMIOSDIO1DATAENA; + output [7:0] EMIOSDIO1DATAOUT; + output EMIOSDIO1LEDCONTROL; + output EMIOSPI0MO; + output EMIOSPI0MOTN; + output EMIOSPI0SCLKO; + output EMIOSPI0SCLKTN; + output EMIOSPI0SO; + output EMIOSPI0SSNTN; + output [2:0] EMIOSPI0SSON; + output EMIOSPI0STN; + output EMIOSPI1MO; + output EMIOSPI1MOTN; + output EMIOSPI1SCLKO; + output EMIOSPI1SCLKTN; + output EMIOSPI1SO; + output EMIOSPI1SSNTN; + output [2:0] EMIOSPI1SSON; + output EMIOSPI1STN; + output [2:0] EMIOTTC0WAVEO; + output [2:0] EMIOTTC1WAVEO; + output [2:0] EMIOTTC2WAVEO; + output [2:0] EMIOTTC3WAVEO; + output EMIOU2DSPORTVBUSCTRLUSB30; + output EMIOU2DSPORTVBUSCTRLUSB31; + output EMIOU3DSPORTVBUSCTRLUSB30; + output EMIOU3DSPORTVBUSCTRLUSB31; + output EMIOUART0DTRN; + output EMIOUART0RTSN; + output EMIOUART0TX; + output EMIOUART1DTRN; + output EMIOUART1RTSN; + output EMIOUART1TX; + output EMIOWDT0RSTO; + output EMIOWDT1RSTO; + output FMIOGEM0FIFORXCLKTOPLBUFG; + output FMIOGEM0FIFOTXCLKTOPLBUFG; + output FMIOGEM1FIFORXCLKTOPLBUFG; + output FMIOGEM1FIFOTXCLKTOPLBUFG; + output FMIOGEM2FIFORXCLKTOPLBUFG; + output FMIOGEM2FIFOTXCLKTOPLBUFG; + output FMIOGEM3FIFORXCLKTOPLBUFG; + output FMIOGEM3FIFOTXCLKTOPLBUFG; + output FMIOGEMTSUCLKTOPLBUFG; + output [31:0] FTMGPO; + output [7:0] GDMA2PLCACK; + output [7:0] GDMA2PLTVLD; + output [39:0] MAXIGP0ARADDR; + output [1:0] MAXIGP0ARBURST; + output [3:0] MAXIGP0ARCACHE; + output [15:0] MAXIGP0ARID; + output [7:0] MAXIGP0ARLEN; + output MAXIGP0ARLOCK; + output [2:0] MAXIGP0ARPROT; + output [3:0] MAXIGP0ARQOS; + output [2:0] MAXIGP0ARSIZE; + output [15:0] MAXIGP0ARUSER; + output MAXIGP0ARVALID; + output [39:0] MAXIGP0AWADDR; + output [1:0] MAXIGP0AWBURST; + output [3:0] MAXIGP0AWCACHE; + output [15:0] MAXIGP0AWID; + output [7:0] MAXIGP0AWLEN; + output MAXIGP0AWLOCK; + output [2:0] MAXIGP0AWPROT; + output [3:0] MAXIGP0AWQOS; + output [2:0] MAXIGP0AWSIZE; + output [15:0] MAXIGP0AWUSER; + output MAXIGP0AWVALID; + output MAXIGP0BREADY; + output MAXIGP0RREADY; + output [127:0] MAXIGP0WDATA; + output MAXIGP0WLAST; + output [15:0] MAXIGP0WSTRB; + output MAXIGP0WVALID; + output [39:0] MAXIGP1ARADDR; + output [1:0] MAXIGP1ARBURST; + output [3:0] MAXIGP1ARCACHE; + output [15:0] MAXIGP1ARID; + output [7:0] MAXIGP1ARLEN; + output MAXIGP1ARLOCK; + output [2:0] MAXIGP1ARPROT; + output [3:0] MAXIGP1ARQOS; + output [2:0] MAXIGP1ARSIZE; + output [15:0] MAXIGP1ARUSER; + output MAXIGP1ARVALID; + output [39:0] MAXIGP1AWADDR; + output [1:0] MAXIGP1AWBURST; + output [3:0] MAXIGP1AWCACHE; + output [15:0] MAXIGP1AWID; + output [7:0] MAXIGP1AWLEN; + output MAXIGP1AWLOCK; + output [2:0] MAXIGP1AWPROT; + output [3:0] MAXIGP1AWQOS; + output [2:0] MAXIGP1AWSIZE; + output [15:0] MAXIGP1AWUSER; + output MAXIGP1AWVALID; + output MAXIGP1BREADY; + output MAXIGP1RREADY; + output [127:0] MAXIGP1WDATA; + output MAXIGP1WLAST; + output [15:0] MAXIGP1WSTRB; + output MAXIGP1WVALID; + output [39:0] MAXIGP2ARADDR; + output [1:0] MAXIGP2ARBURST; + output [3:0] MAXIGP2ARCACHE; + output [15:0] MAXIGP2ARID; + output [7:0] MAXIGP2ARLEN; + output MAXIGP2ARLOCK; + output [2:0] MAXIGP2ARPROT; + output [3:0] MAXIGP2ARQOS; + output [2:0] MAXIGP2ARSIZE; + output [15:0] MAXIGP2ARUSER; + output MAXIGP2ARVALID; + output [39:0] MAXIGP2AWADDR; + output [1:0] MAXIGP2AWBURST; + output [3:0] MAXIGP2AWCACHE; + output [15:0] MAXIGP2AWID; + output [7:0] MAXIGP2AWLEN; + output MAXIGP2AWLOCK; + output [2:0] MAXIGP2AWPROT; + output [3:0] MAXIGP2AWQOS; + output [2:0] MAXIGP2AWSIZE; + output [15:0] MAXIGP2AWUSER; + output MAXIGP2AWVALID; + output MAXIGP2BREADY; + output MAXIGP2RREADY; + output [127:0] MAXIGP2WDATA; + output MAXIGP2WLAST; + output [15:0] MAXIGP2WSTRB; + output MAXIGP2WVALID; + output OSCRTCCLK; + output [3:0] PLCLK; + output PMUAIBAFIFMFPDREQ; + output PMUAIBAFIFMLPDREQ; + output [46:0] PMUERRORTOPL; + output [31:0] PMUPLGPO; + output PSPLEVENTO; + output [63:0] PSPLIRQFPD; + output [99:0] PSPLIRQLPD; + output [3:0] PSPLSTANDBYWFE; + output [3:0] PSPLSTANDBYWFI; + output PSPLTRACECTL; + output [31:0] PSPLTRACEDATA; + output [3:0] PSPLTRIGACK; + output [3:0] PSPLTRIGGER; + output PSS_ALTO_CORE_PAD_MGTTXN0OUT; + output PSS_ALTO_CORE_PAD_MGTTXN1OUT; + output PSS_ALTO_CORE_PAD_MGTTXN2OUT; + output PSS_ALTO_CORE_PAD_MGTTXN3OUT; + output PSS_ALTO_CORE_PAD_MGTTXP0OUT; + output PSS_ALTO_CORE_PAD_MGTTXP1OUT; + output PSS_ALTO_CORE_PAD_MGTTXP2OUT; + output PSS_ALTO_CORE_PAD_MGTTXP3OUT; + output PSS_ALTO_CORE_PAD_PADO; + output RPUEVENTO0; + output RPUEVENTO1; + output [43:0] SACEFPDACADDR; + output [2:0] SACEFPDACPROT; + output [3:0] SACEFPDACSNOOP; + output SACEFPDACVALID; + output SACEFPDARREADY; + output SACEFPDAWREADY; + output [5:0] SACEFPDBID; + output [1:0] SACEFPDBRESP; + output SACEFPDBUSER; + output SACEFPDBVALID; + output SACEFPDCDREADY; + output SACEFPDCRREADY; + output [127:0] SACEFPDRDATA; + output [5:0] SACEFPDRID; + output SACEFPDRLAST; + output [3:0] SACEFPDRRESP; + output SACEFPDRUSER; + output SACEFPDRVALID; + output SACEFPDWREADY; + output SAXIACPARREADY; + output SAXIACPAWREADY; + output [4:0] SAXIACPBID; + output [1:0] SAXIACPBRESP; + output SAXIACPBVALID; + output [127:0] SAXIACPRDATA; + output [4:0] SAXIACPRID; + output SAXIACPRLAST; + output [1:0] SAXIACPRRESP; + output SAXIACPRVALID; + output SAXIACPWREADY; + output SAXIGP0ARREADY; + output SAXIGP0AWREADY; + output [5:0] SAXIGP0BID; + output [1:0] SAXIGP0BRESP; + output SAXIGP0BVALID; + output [3:0] SAXIGP0RACOUNT; + output [7:0] SAXIGP0RCOUNT; + output [127:0] SAXIGP0RDATA; + output [5:0] SAXIGP0RID; + output SAXIGP0RLAST; + output [1:0] SAXIGP0RRESP; + output SAXIGP0RVALID; + output [3:0] SAXIGP0WACOUNT; + output [7:0] SAXIGP0WCOUNT; + output SAXIGP0WREADY; + output SAXIGP1ARREADY; + output SAXIGP1AWREADY; + output [5:0] SAXIGP1BID; + output [1:0] SAXIGP1BRESP; + output SAXIGP1BVALID; + output [3:0] SAXIGP1RACOUNT; + output [7:0] SAXIGP1RCOUNT; + output [127:0] SAXIGP1RDATA; + output [5:0] SAXIGP1RID; + output SAXIGP1RLAST; + output [1:0] SAXIGP1RRESP; + output SAXIGP1RVALID; + output [3:0] SAXIGP1WACOUNT; + output [7:0] SAXIGP1WCOUNT; + output SAXIGP1WREADY; + output SAXIGP2ARREADY; + output SAXIGP2AWREADY; + output [5:0] SAXIGP2BID; + output [1:0] SAXIGP2BRESP; + output SAXIGP2BVALID; + output [3:0] SAXIGP2RACOUNT; + output [7:0] SAXIGP2RCOUNT; + output [127:0] SAXIGP2RDATA; + output [5:0] SAXIGP2RID; + output SAXIGP2RLAST; + output [1:0] SAXIGP2RRESP; + output SAXIGP2RVALID; + output [3:0] SAXIGP2WACOUNT; + output [7:0] SAXIGP2WCOUNT; + output SAXIGP2WREADY; + output SAXIGP3ARREADY; + output SAXIGP3AWREADY; + output [5:0] SAXIGP3BID; + output [1:0] SAXIGP3BRESP; + output SAXIGP3BVALID; + output [3:0] SAXIGP3RACOUNT; + output [7:0] SAXIGP3RCOUNT; + output [127:0] SAXIGP3RDATA; + output [5:0] SAXIGP3RID; + output SAXIGP3RLAST; + output [1:0] SAXIGP3RRESP; + output SAXIGP3RVALID; + output [3:0] SAXIGP3WACOUNT; + output [7:0] SAXIGP3WCOUNT; + output SAXIGP3WREADY; + output SAXIGP4ARREADY; + output SAXIGP4AWREADY; + output [5:0] SAXIGP4BID; + output [1:0] SAXIGP4BRESP; + output SAXIGP4BVALID; + output [3:0] SAXIGP4RACOUNT; + output [7:0] SAXIGP4RCOUNT; + output [127:0] SAXIGP4RDATA; + output [5:0] SAXIGP4RID; + output SAXIGP4RLAST; + output [1:0] SAXIGP4RRESP; + output SAXIGP4RVALID; + output [3:0] SAXIGP4WACOUNT; + output [7:0] SAXIGP4WCOUNT; + output SAXIGP4WREADY; + output SAXIGP5ARREADY; + output SAXIGP5AWREADY; + output [5:0] SAXIGP5BID; + output [1:0] SAXIGP5BRESP; + output SAXIGP5BVALID; + output [3:0] SAXIGP5RACOUNT; + output [7:0] SAXIGP5RCOUNT; + output [127:0] SAXIGP5RDATA; + output [5:0] SAXIGP5RID; + output SAXIGP5RLAST; + output [1:0] SAXIGP5RRESP; + output SAXIGP5RVALID; + output [3:0] SAXIGP5WACOUNT; + output [7:0] SAXIGP5WCOUNT; + output SAXIGP5WREADY; + output SAXIGP6ARREADY; + output SAXIGP6AWREADY; + output [5:0] SAXIGP6BID; + output [1:0] SAXIGP6BRESP; + output SAXIGP6BVALID; + output [3:0] SAXIGP6RACOUNT; + output [7:0] SAXIGP6RCOUNT; + output [127:0] SAXIGP6RDATA; + output [5:0] SAXIGP6RID; + output SAXIGP6RLAST; + output [1:0] SAXIGP6RRESP; + output SAXIGP6RVALID; + output [3:0] SAXIGP6WACOUNT; + output [7:0] SAXIGP6WCOUNT; + output SAXIGP6WREADY; + inout [3:0] PSS_ALTO_CORE_PAD_BOOTMODE; + inout PSS_ALTO_CORE_PAD_CLK; + inout PSS_ALTO_CORE_PAD_DONEB; + inout [17:0] PSS_ALTO_CORE_PAD_DRAMA; + inout PSS_ALTO_CORE_PAD_DRAMACTN; + inout PSS_ALTO_CORE_PAD_DRAMALERTN; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMBA; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMBG; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMCK; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMCKE; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMCKN; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMCSN; + inout [8:0] PSS_ALTO_CORE_PAD_DRAMDM; + inout [71:0] PSS_ALTO_CORE_PAD_DRAMDQ; + inout [8:0] PSS_ALTO_CORE_PAD_DRAMDQS; + inout [8:0] PSS_ALTO_CORE_PAD_DRAMDQSN; + inout [1:0] PSS_ALTO_CORE_PAD_DRAMODT; + inout PSS_ALTO_CORE_PAD_DRAMPARITY; + inout PSS_ALTO_CORE_PAD_DRAMRAMRSTN; + inout PSS_ALTO_CORE_PAD_ERROROUT; + inout PSS_ALTO_CORE_PAD_ERRORSTATUS; + inout PSS_ALTO_CORE_PAD_INITB; + inout PSS_ALTO_CORE_PAD_JTAGTCK; + inout PSS_ALTO_CORE_PAD_JTAGTDI; + inout PSS_ALTO_CORE_PAD_JTAGTDO; + inout PSS_ALTO_CORE_PAD_JTAGTMS; + inout [77:0] PSS_ALTO_CORE_PAD_MIO; + inout PSS_ALTO_CORE_PAD_PORB; + inout PSS_ALTO_CORE_PAD_PROGB; + inout PSS_ALTO_CORE_PAD_RCALIBINOUT; + inout PSS_ALTO_CORE_PAD_SRSTB; + inout PSS_ALTO_CORE_PAD_ZQ; + input [7:0] ADMAFCICLK; + input AIBPMUAFIFMFPDACK; + input AIBPMUAFIFMLPDACK; + input DDRCEXTREFRESHRANK0REQ; + input DDRCEXTREFRESHRANK1REQ; + input DDRCREFRESHPLCLK; + input DPAUXDATAIN; + input DPEXTERNALCUSTOMEVENT1; + input DPEXTERNALCUSTOMEVENT2; + input DPEXTERNALVSYNCEVENT; + input DPHOTPLUGDETECT; + input [7:0] DPLIVEGFXALPHAIN; + input [35:0] DPLIVEGFXPIXEL1IN; + input DPLIVEVIDEOINDE; + input DPLIVEVIDEOINHSYNC; + input [35:0] DPLIVEVIDEOINPIXEL1; + input DPLIVEVIDEOINVSYNC; + input DPMAXISMIXEDAUDIOTREADY; + input DPSAXISAUDIOCLK; + input [31:0] DPSAXISAUDIOTDATA; + input DPSAXISAUDIOTID; + input DPSAXISAUDIOTVALID; + input DPVIDEOINCLK; + input EMIOCAN0PHYRX; + input EMIOCAN1PHYRX; + input EMIOENET0DMATXSTATUSTOG; + input EMIOENET0EXTINTIN; + input EMIOENET0GMIICOL; + input EMIOENET0GMIICRS; + input EMIOENET0GMIIRXCLK; + input [7:0] EMIOENET0GMIIRXD; + input EMIOENET0GMIIRXDV; + input EMIOENET0GMIIRXER; + input EMIOENET0GMIITXCLK; + input EMIOENET0MDIOI; + input EMIOENET0RXWOVERFLOW; + input EMIOENET0TXRCONTROL; + input [7:0] EMIOENET0TXRDATA; + input EMIOENET0TXRDATARDY; + input EMIOENET0TXREOP; + input EMIOENET0TXRERR; + input EMIOENET0TXRFLUSHED; + input EMIOENET0TXRSOP; + input EMIOENET0TXRUNDERFLOW; + input EMIOENET0TXRVALID; + input EMIOENET1DMATXSTATUSTOG; + input EMIOENET1EXTINTIN; + input EMIOENET1GMIICOL; + input EMIOENET1GMIICRS; + input EMIOENET1GMIIRXCLK; + input [7:0] EMIOENET1GMIIRXD; + input EMIOENET1GMIIRXDV; + input EMIOENET1GMIIRXER; + input EMIOENET1GMIITXCLK; + input EMIOENET1MDIOI; + input EMIOENET1RXWOVERFLOW; + input EMIOENET1TXRCONTROL; + input [7:0] EMIOENET1TXRDATA; + input EMIOENET1TXRDATARDY; + input EMIOENET1TXREOP; + input EMIOENET1TXRERR; + input EMIOENET1TXRFLUSHED; + input EMIOENET1TXRSOP; + input EMIOENET1TXRUNDERFLOW; + input EMIOENET1TXRVALID; + input EMIOENET2DMATXSTATUSTOG; + input EMIOENET2EXTINTIN; + input EMIOENET2GMIICOL; + input EMIOENET2GMIICRS; + input EMIOENET2GMIIRXCLK; + input [7:0] EMIOENET2GMIIRXD; + input EMIOENET2GMIIRXDV; + input EMIOENET2GMIIRXER; + input EMIOENET2GMIITXCLK; + input EMIOENET2MDIOI; + input EMIOENET2RXWOVERFLOW; + input EMIOENET2TXRCONTROL; + input [7:0] EMIOENET2TXRDATA; + input EMIOENET2TXRDATARDY; + input EMIOENET2TXREOP; + input EMIOENET2TXRERR; + input EMIOENET2TXRFLUSHED; + input EMIOENET2TXRSOP; + input EMIOENET2TXRUNDERFLOW; + input EMIOENET2TXRVALID; + input EMIOENET3DMATXSTATUSTOG; + input EMIOENET3EXTINTIN; + input EMIOENET3GMIICOL; + input EMIOENET3GMIICRS; + input EMIOENET3GMIIRXCLK; + input [7:0] EMIOENET3GMIIRXD; + input EMIOENET3GMIIRXDV; + input EMIOENET3GMIIRXER; + input EMIOENET3GMIITXCLK; + input EMIOENET3MDIOI; + input EMIOENET3RXWOVERFLOW; + input EMIOENET3TXRCONTROL; + input [7:0] EMIOENET3TXRDATA; + input EMIOENET3TXRDATARDY; + input EMIOENET3TXREOP; + input EMIOENET3TXRERR; + input EMIOENET3TXRFLUSHED; + input EMIOENET3TXRSOP; + input EMIOENET3TXRUNDERFLOW; + input EMIOENET3TXRVALID; + input EMIOENETTSUCLK; + input [1:0] EMIOGEM0TSUINCCTRL; + input [1:0] EMIOGEM1TSUINCCTRL; + input [1:0] EMIOGEM2TSUINCCTRL; + input [1:0] EMIOGEM3TSUINCCTRL; + input [95:0] EMIOGPIOI; + input EMIOHUBPORTOVERCRNTUSB20; + input EMIOHUBPORTOVERCRNTUSB21; + input EMIOHUBPORTOVERCRNTUSB30; + input EMIOHUBPORTOVERCRNTUSB31; + input EMIOI2C0SCLI; + input EMIOI2C0SDAI; + input EMIOI2C1SCLI; + input EMIOI2C1SDAI; + input EMIOSDIO0CDN; + input EMIOSDIO0CMDIN; + input [7:0] EMIOSDIO0DATAIN; + input EMIOSDIO0FBCLKIN; + input EMIOSDIO0WP; + input EMIOSDIO1CDN; + input EMIOSDIO1CMDIN; + input [7:0] EMIOSDIO1DATAIN; + input EMIOSDIO1FBCLKIN; + input EMIOSDIO1WP; + input EMIOSPI0MI; + input EMIOSPI0SCLKI; + input EMIOSPI0SI; + input EMIOSPI0SSIN; + input EMIOSPI1MI; + input EMIOSPI1SCLKI; + input EMIOSPI1SI; + input EMIOSPI1SSIN; + input [2:0] EMIOTTC0CLKI; + input [2:0] EMIOTTC1CLKI; + input [2:0] EMIOTTC2CLKI; + input [2:0] EMIOTTC3CLKI; + input EMIOUART0CTSN; + input EMIOUART0DCDN; + input EMIOUART0DSRN; + input EMIOUART0RIN; + input EMIOUART0RX; + input EMIOUART1CTSN; + input EMIOUART1DCDN; + input EMIOUART1DSRN; + input EMIOUART1RIN; + input EMIOUART1RX; + input EMIOWDT0CLKI; + input EMIOWDT1CLKI; + input FMIOGEM0FIFORXCLKFROMPL; + input FMIOGEM0FIFOTXCLKFROMPL; + input FMIOGEM0SIGNALDETECT; + input FMIOGEM1FIFORXCLKFROMPL; + input FMIOGEM1FIFOTXCLKFROMPL; + input FMIOGEM1SIGNALDETECT; + input FMIOGEM2FIFORXCLKFROMPL; + input FMIOGEM2FIFOTXCLKFROMPL; + input FMIOGEM2SIGNALDETECT; + input FMIOGEM3FIFORXCLKFROMPL; + input FMIOGEM3FIFOTXCLKFROMPL; + input FMIOGEM3SIGNALDETECT; + input FMIOGEMTSUCLKFROMPL; + input [31:0] FTMGPI; + input [7:0] GDMAFCICLK; + input MAXIGP0ACLK; + input MAXIGP0ARREADY; + input MAXIGP0AWREADY; + input [15:0] MAXIGP0BID; + input [1:0] MAXIGP0BRESP; + input MAXIGP0BVALID; + input [127:0] MAXIGP0RDATA; + input [15:0] MAXIGP0RID; + input MAXIGP0RLAST; + input [1:0] MAXIGP0RRESP; + input MAXIGP0RVALID; + input MAXIGP0WREADY; + input MAXIGP1ACLK; + input MAXIGP1ARREADY; + input MAXIGP1AWREADY; + input [15:0] MAXIGP1BID; + input [1:0] MAXIGP1BRESP; + input MAXIGP1BVALID; + input [127:0] MAXIGP1RDATA; + input [15:0] MAXIGP1RID; + input MAXIGP1RLAST; + input [1:0] MAXIGP1RRESP; + input MAXIGP1RVALID; + input MAXIGP1WREADY; + input MAXIGP2ACLK; + input MAXIGP2ARREADY; + input MAXIGP2AWREADY; + input [15:0] MAXIGP2BID; + input [1:0] MAXIGP2BRESP; + input MAXIGP2BVALID; + input [127:0] MAXIGP2RDATA; + input [15:0] MAXIGP2RID; + input MAXIGP2RLAST; + input [1:0] MAXIGP2RRESP; + input MAXIGP2RVALID; + input MAXIGP2WREADY; + input NFIQ0LPDRPU; + input NFIQ1LPDRPU; + input NIRQ0LPDRPU; + input NIRQ1LPDRPU; + input [7:0] PL2ADMACVLD; + input [7:0] PL2ADMATACK; + input [7:0] PL2GDMACVLD; + input [7:0] PL2GDMATACK; + input PLACECLK; + input PLACPINACT; + input [3:0] PLFPGASTOP; + input [2:0] PLLAUXREFCLKFPD; + input [1:0] PLLAUXREFCLKLPD; + input [31:0] PLPMUGPI; + input [3:0] PLPSAPUGICFIQ; + input [3:0] PLPSAPUGICIRQ; + input PLPSEVENTI; + input [7:0] PLPSIRQ0; + input [7:0] PLPSIRQ1; + input PLPSTRACECLK; + input [3:0] PLPSTRIGACK; + input [3:0] PLPSTRIGGER; + input [3:0] PMUERRORFROMPL; + input PSS_ALTO_CORE_PAD_MGTRXN0IN; + input PSS_ALTO_CORE_PAD_MGTRXN1IN; + input PSS_ALTO_CORE_PAD_MGTRXN2IN; + input PSS_ALTO_CORE_PAD_MGTRXN3IN; + input PSS_ALTO_CORE_PAD_MGTRXP0IN; + input PSS_ALTO_CORE_PAD_MGTRXP1IN; + input PSS_ALTO_CORE_PAD_MGTRXP2IN; + input PSS_ALTO_CORE_PAD_MGTRXP3IN; + input PSS_ALTO_CORE_PAD_PADI; + input PSS_ALTO_CORE_PAD_REFN0IN; + input PSS_ALTO_CORE_PAD_REFN1IN; + input PSS_ALTO_CORE_PAD_REFN2IN; + input PSS_ALTO_CORE_PAD_REFN3IN; + input PSS_ALTO_CORE_PAD_REFP0IN; + input PSS_ALTO_CORE_PAD_REFP1IN; + input PSS_ALTO_CORE_PAD_REFP2IN; + input PSS_ALTO_CORE_PAD_REFP3IN; + input RPUEVENTI0; + input RPUEVENTI1; + input SACEFPDACREADY; + input [43:0] SACEFPDARADDR; + input [1:0] SACEFPDARBAR; + input [1:0] SACEFPDARBURST; + input [3:0] SACEFPDARCACHE; + input [1:0] SACEFPDARDOMAIN; + input [5:0] SACEFPDARID; + input [7:0] SACEFPDARLEN; + input SACEFPDARLOCK; + input [2:0] SACEFPDARPROT; + input [3:0] SACEFPDARQOS; + input [3:0] SACEFPDARREGION; + input [2:0] SACEFPDARSIZE; + input [3:0] SACEFPDARSNOOP; + input [15:0] SACEFPDARUSER; + input SACEFPDARVALID; + input [43:0] SACEFPDAWADDR; + input [1:0] SACEFPDAWBAR; + input [1:0] SACEFPDAWBURST; + input [3:0] SACEFPDAWCACHE; + input [1:0] SACEFPDAWDOMAIN; + input [5:0] SACEFPDAWID; + input [7:0] SACEFPDAWLEN; + input SACEFPDAWLOCK; + input [2:0] SACEFPDAWPROT; + input [3:0] SACEFPDAWQOS; + input [3:0] SACEFPDAWREGION; + input [2:0] SACEFPDAWSIZE; + input [2:0] SACEFPDAWSNOOP; + input [15:0] SACEFPDAWUSER; + input SACEFPDAWVALID; + input SACEFPDBREADY; + input [127:0] SACEFPDCDDATA; + input SACEFPDCDLAST; + input SACEFPDCDVALID; + input [4:0] SACEFPDCRRESP; + input SACEFPDCRVALID; + input SACEFPDRACK; + input SACEFPDRREADY; + input SACEFPDWACK; + input [127:0] SACEFPDWDATA; + input SACEFPDWLAST; + input [15:0] SACEFPDWSTRB; + input SACEFPDWUSER; + input SACEFPDWVALID; + input SAXIACPACLK; + input [39:0] SAXIACPARADDR; + input [1:0] SAXIACPARBURST; + input [3:0] SAXIACPARCACHE; + input [4:0] SAXIACPARID; + input [7:0] SAXIACPARLEN; + input SAXIACPARLOCK; + input [2:0] SAXIACPARPROT; + input [3:0] SAXIACPARQOS; + input [2:0] SAXIACPARSIZE; + input [1:0] SAXIACPARUSER; + input SAXIACPARVALID; + input [39:0] SAXIACPAWADDR; + input [1:0] SAXIACPAWBURST; + input [3:0] SAXIACPAWCACHE; + input [4:0] SAXIACPAWID; + input [7:0] SAXIACPAWLEN; + input SAXIACPAWLOCK; + input [2:0] SAXIACPAWPROT; + input [3:0] SAXIACPAWQOS; + input [2:0] SAXIACPAWSIZE; + input [1:0] SAXIACPAWUSER; + input SAXIACPAWVALID; + input SAXIACPBREADY; + input SAXIACPRREADY; + input [127:0] SAXIACPWDATA; + input SAXIACPWLAST; + input [15:0] SAXIACPWSTRB; + input SAXIACPWVALID; + input [48:0] SAXIGP0ARADDR; + input [1:0] SAXIGP0ARBURST; + input [3:0] SAXIGP0ARCACHE; + input [5:0] SAXIGP0ARID; + input [7:0] SAXIGP0ARLEN; + input SAXIGP0ARLOCK; + input [2:0] SAXIGP0ARPROT; + input [3:0] SAXIGP0ARQOS; + input [2:0] SAXIGP0ARSIZE; + input SAXIGP0ARUSER; + input SAXIGP0ARVALID; + input [48:0] SAXIGP0AWADDR; + input [1:0] SAXIGP0AWBURST; + input [3:0] SAXIGP0AWCACHE; + input [5:0] SAXIGP0AWID; + input [7:0] SAXIGP0AWLEN; + input SAXIGP0AWLOCK; + input [2:0] SAXIGP0AWPROT; + input [3:0] SAXIGP0AWQOS; + input [2:0] SAXIGP0AWSIZE; + input SAXIGP0AWUSER; + input SAXIGP0AWVALID; + input SAXIGP0BREADY; + input SAXIGP0RCLK; + input SAXIGP0RREADY; + input SAXIGP0WCLK; + input [127:0] SAXIGP0WDATA; + input SAXIGP0WLAST; + input [15:0] SAXIGP0WSTRB; + input SAXIGP0WVALID; + input [48:0] SAXIGP1ARADDR; + input [1:0] SAXIGP1ARBURST; + input [3:0] SAXIGP1ARCACHE; + input [5:0] SAXIGP1ARID; + input [7:0] SAXIGP1ARLEN; + input SAXIGP1ARLOCK; + input [2:0] SAXIGP1ARPROT; + input [3:0] SAXIGP1ARQOS; + input [2:0] SAXIGP1ARSIZE; + input SAXIGP1ARUSER; + input SAXIGP1ARVALID; + input [48:0] SAXIGP1AWADDR; + input [1:0] SAXIGP1AWBURST; + input [3:0] SAXIGP1AWCACHE; + input [5:0] SAXIGP1AWID; + input [7:0] SAXIGP1AWLEN; + input SAXIGP1AWLOCK; + input [2:0] SAXIGP1AWPROT; + input [3:0] SAXIGP1AWQOS; + input [2:0] SAXIGP1AWSIZE; + input SAXIGP1AWUSER; + input SAXIGP1AWVALID; + input SAXIGP1BREADY; + input SAXIGP1RCLK; + input SAXIGP1RREADY; + input SAXIGP1WCLK; + input [127:0] SAXIGP1WDATA; + input SAXIGP1WLAST; + input [15:0] SAXIGP1WSTRB; + input SAXIGP1WVALID; + input [48:0] SAXIGP2ARADDR; + input [1:0] SAXIGP2ARBURST; + input [3:0] SAXIGP2ARCACHE; + input [5:0] SAXIGP2ARID; + input [7:0] SAXIGP2ARLEN; + input SAXIGP2ARLOCK; + input [2:0] SAXIGP2ARPROT; + input [3:0] SAXIGP2ARQOS; + input [2:0] SAXIGP2ARSIZE; + input SAXIGP2ARUSER; + input SAXIGP2ARVALID; + input [48:0] SAXIGP2AWADDR; + input [1:0] SAXIGP2AWBURST; + input [3:0] SAXIGP2AWCACHE; + input [5:0] SAXIGP2AWID; + input [7:0] SAXIGP2AWLEN; + input SAXIGP2AWLOCK; + input [2:0] SAXIGP2AWPROT; + input [3:0] SAXIGP2AWQOS; + input [2:0] SAXIGP2AWSIZE; + input SAXIGP2AWUSER; + input SAXIGP2AWVALID; + input SAXIGP2BREADY; + input SAXIGP2RCLK; + input SAXIGP2RREADY; + input SAXIGP2WCLK; + input [127:0] SAXIGP2WDATA; + input SAXIGP2WLAST; + input [15:0] SAXIGP2WSTRB; + input SAXIGP2WVALID; + input [48:0] SAXIGP3ARADDR; + input [1:0] SAXIGP3ARBURST; + input [3:0] SAXIGP3ARCACHE; + input [5:0] SAXIGP3ARID; + input [7:0] SAXIGP3ARLEN; + input SAXIGP3ARLOCK; + input [2:0] SAXIGP3ARPROT; + input [3:0] SAXIGP3ARQOS; + input [2:0] SAXIGP3ARSIZE; + input SAXIGP3ARUSER; + input SAXIGP3ARVALID; + input [48:0] SAXIGP3AWADDR; + input [1:0] SAXIGP3AWBURST; + input [3:0] SAXIGP3AWCACHE; + input [5:0] SAXIGP3AWID; + input [7:0] SAXIGP3AWLEN; + input SAXIGP3AWLOCK; + input [2:0] SAXIGP3AWPROT; + input [3:0] SAXIGP3AWQOS; + input [2:0] SAXIGP3AWSIZE; + input SAXIGP3AWUSER; + input SAXIGP3AWVALID; + input SAXIGP3BREADY; + input SAXIGP3RCLK; + input SAXIGP3RREADY; + input SAXIGP3WCLK; + input [127:0] SAXIGP3WDATA; + input SAXIGP3WLAST; + input [15:0] SAXIGP3WSTRB; + input SAXIGP3WVALID; + input [48:0] SAXIGP4ARADDR; + input [1:0] SAXIGP4ARBURST; + input [3:0] SAXIGP4ARCACHE; + input [5:0] SAXIGP4ARID; + input [7:0] SAXIGP4ARLEN; + input SAXIGP4ARLOCK; + input [2:0] SAXIGP4ARPROT; + input [3:0] SAXIGP4ARQOS; + input [2:0] SAXIGP4ARSIZE; + input SAXIGP4ARUSER; + input SAXIGP4ARVALID; + input [48:0] SAXIGP4AWADDR; + input [1:0] SAXIGP4AWBURST; + input [3:0] SAXIGP4AWCACHE; + input [5:0] SAXIGP4AWID; + input [7:0] SAXIGP4AWLEN; + input SAXIGP4AWLOCK; + input [2:0] SAXIGP4AWPROT; + input [3:0] SAXIGP4AWQOS; + input [2:0] SAXIGP4AWSIZE; + input SAXIGP4AWUSER; + input SAXIGP4AWVALID; + input SAXIGP4BREADY; + input SAXIGP4RCLK; + input SAXIGP4RREADY; + input SAXIGP4WCLK; + input [127:0] SAXIGP4WDATA; + input SAXIGP4WLAST; + input [15:0] SAXIGP4WSTRB; + input SAXIGP4WVALID; + input [48:0] SAXIGP5ARADDR; + input [1:0] SAXIGP5ARBURST; + input [3:0] SAXIGP5ARCACHE; + input [5:0] SAXIGP5ARID; + input [7:0] SAXIGP5ARLEN; + input SAXIGP5ARLOCK; + input [2:0] SAXIGP5ARPROT; + input [3:0] SAXIGP5ARQOS; + input [2:0] SAXIGP5ARSIZE; + input SAXIGP5ARUSER; + input SAXIGP5ARVALID; + input [48:0] SAXIGP5AWADDR; + input [1:0] SAXIGP5AWBURST; + input [3:0] SAXIGP5AWCACHE; + input [5:0] SAXIGP5AWID; + input [7:0] SAXIGP5AWLEN; + input SAXIGP5AWLOCK; + input [2:0] SAXIGP5AWPROT; + input [3:0] SAXIGP5AWQOS; + input [2:0] SAXIGP5AWSIZE; + input SAXIGP5AWUSER; + input SAXIGP5AWVALID; + input SAXIGP5BREADY; + input SAXIGP5RCLK; + input SAXIGP5RREADY; + input SAXIGP5WCLK; + input [127:0] SAXIGP5WDATA; + input SAXIGP5WLAST; + input [15:0] SAXIGP5WSTRB; + input SAXIGP5WVALID; + input [48:0] SAXIGP6ARADDR; + input [1:0] SAXIGP6ARBURST; + input [3:0] SAXIGP6ARCACHE; + input [5:0] SAXIGP6ARID; + input [7:0] SAXIGP6ARLEN; + input SAXIGP6ARLOCK; + input [2:0] SAXIGP6ARPROT; + input [3:0] SAXIGP6ARQOS; + input [2:0] SAXIGP6ARSIZE; + input SAXIGP6ARUSER; + input SAXIGP6ARVALID; + input [48:0] SAXIGP6AWADDR; + input [1:0] SAXIGP6AWBURST; + input [3:0] SAXIGP6AWCACHE; + input [5:0] SAXIGP6AWID; + input [7:0] SAXIGP6AWLEN; + input SAXIGP6AWLOCK; + input [2:0] SAXIGP6AWPROT; + input [3:0] SAXIGP6AWQOS; + input [2:0] SAXIGP6AWSIZE; + input SAXIGP6AWUSER; + input SAXIGP6AWVALID; + input SAXIGP6BREADY; + input SAXIGP6RCLK; + input SAXIGP6RREADY; + input SAXIGP6WCLK; + input [127:0] SAXIGP6WDATA; + input SAXIGP6WLAST; + input [15:0] SAXIGP6WSTRB; + input SAXIGP6WVALID; + input [59:0] STMEVENT; +endmodule + +module ILKN (...); + parameter BYPASS = "FALSE"; + parameter [1:0] CTL_RX_BURSTMAX = 2'h3; + parameter [1:0] CTL_RX_CHAN_EXT = 2'h0; + parameter [3:0] CTL_RX_LAST_LANE = 4'hB; + parameter [15:0] CTL_RX_MFRAMELEN_MINUS1 = 16'h07FF; + parameter CTL_RX_PACKET_MODE = "TRUE"; + parameter [2:0] CTL_RX_RETRANS_MULT = 3'h0; + parameter [3:0] CTL_RX_RETRANS_RETRY = 4'h2; + parameter [15:0] CTL_RX_RETRANS_TIMER1 = 16'h0000; + parameter [15:0] CTL_RX_RETRANS_TIMER2 = 16'h0008; + parameter [11:0] CTL_RX_RETRANS_WDOG = 12'h000; + parameter [7:0] CTL_RX_RETRANS_WRAP_TIMER = 8'h00; + parameter CTL_TEST_MODE_PIN_CHAR = "FALSE"; + parameter [1:0] CTL_TX_BURSTMAX = 2'h3; + parameter [2:0] CTL_TX_BURSTSHORT = 3'h1; + parameter [1:0] CTL_TX_CHAN_EXT = 2'h0; + parameter CTL_TX_DISABLE_SKIPWORD = "TRUE"; + parameter [6:0] CTL_TX_FC_CALLEN = 7'h00; + parameter [3:0] CTL_TX_LAST_LANE = 4'hB; + parameter [15:0] CTL_TX_MFRAMELEN_MINUS1 = 16'h07FF; + parameter [13:0] CTL_TX_RETRANS_DEPTH = 14'h0800; + parameter [2:0] CTL_TX_RETRANS_MULT = 3'h0; + parameter [1:0] CTL_TX_RETRANS_RAM_BANKS = 2'h3; + parameter MODE = "TRUE"; + parameter SIM_VERSION = "2.0"; + parameter TEST_MODE_PIN_CHAR = "FALSE"; + output [15:0] DRP_DO; + output DRP_RDY; + output [65:0] RX_BYPASS_DATAOUT00; + output [65:0] RX_BYPASS_DATAOUT01; + output [65:0] RX_BYPASS_DATAOUT02; + output [65:0] RX_BYPASS_DATAOUT03; + output [65:0] RX_BYPASS_DATAOUT04; + output [65:0] RX_BYPASS_DATAOUT05; + output [65:0] RX_BYPASS_DATAOUT06; + output [65:0] RX_BYPASS_DATAOUT07; + output [65:0] RX_BYPASS_DATAOUT08; + output [65:0] RX_BYPASS_DATAOUT09; + output [65:0] RX_BYPASS_DATAOUT10; + output [65:0] RX_BYPASS_DATAOUT11; + output [11:0] RX_BYPASS_ENAOUT; + output [11:0] RX_BYPASS_IS_AVAILOUT; + output [11:0] RX_BYPASS_IS_BADLYFRAMEDOUT; + output [11:0] RX_BYPASS_IS_OVERFLOWOUT; + output [11:0] RX_BYPASS_IS_SYNCEDOUT; + output [11:0] RX_BYPASS_IS_SYNCWORDOUT; + output [10:0] RX_CHANOUT0; + output [10:0] RX_CHANOUT1; + output [10:0] RX_CHANOUT2; + output [10:0] RX_CHANOUT3; + output [127:0] RX_DATAOUT0; + output [127:0] RX_DATAOUT1; + output [127:0] RX_DATAOUT2; + output [127:0] RX_DATAOUT3; + output RX_ENAOUT0; + output RX_ENAOUT1; + output RX_ENAOUT2; + output RX_ENAOUT3; + output RX_EOPOUT0; + output RX_EOPOUT1; + output RX_EOPOUT2; + output RX_EOPOUT3; + output RX_ERROUT0; + output RX_ERROUT1; + output RX_ERROUT2; + output RX_ERROUT3; + output [3:0] RX_MTYOUT0; + output [3:0] RX_MTYOUT1; + output [3:0] RX_MTYOUT2; + output [3:0] RX_MTYOUT3; + output RX_OVFOUT; + output RX_SOPOUT0; + output RX_SOPOUT1; + output RX_SOPOUT2; + output RX_SOPOUT3; + output STAT_RX_ALIGNED; + output STAT_RX_ALIGNED_ERR; + output [11:0] STAT_RX_BAD_TYPE_ERR; + output STAT_RX_BURSTMAX_ERR; + output STAT_RX_BURST_ERR; + output STAT_RX_CRC24_ERR; + output [11:0] STAT_RX_CRC32_ERR; + output [11:0] STAT_RX_CRC32_VALID; + output [11:0] STAT_RX_DESCRAM_ERR; + output [11:0] STAT_RX_DIAGWORD_INTFSTAT; + output [11:0] STAT_RX_DIAGWORD_LANESTAT; + output [255:0] STAT_RX_FC_STAT; + output [11:0] STAT_RX_FRAMING_ERR; + output STAT_RX_MEOP_ERR; + output [11:0] STAT_RX_MF_ERR; + output [11:0] STAT_RX_MF_LEN_ERR; + output [11:0] STAT_RX_MF_REPEAT_ERR; + output STAT_RX_MISALIGNED; + output STAT_RX_MSOP_ERR; + output [7:0] STAT_RX_MUBITS; + output STAT_RX_MUBITS_UPDATED; + output STAT_RX_OVERFLOW_ERR; + output STAT_RX_RETRANS_CRC24_ERR; + output STAT_RX_RETRANS_DISC; + output [15:0] STAT_RX_RETRANS_LATENCY; + output STAT_RX_RETRANS_REQ; + output STAT_RX_RETRANS_RETRY_ERR; + output [7:0] STAT_RX_RETRANS_SEQ; + output STAT_RX_RETRANS_SEQ_UPDATED; + output [2:0] STAT_RX_RETRANS_STATE; + output [4:0] STAT_RX_RETRANS_SUBSEQ; + output STAT_RX_RETRANS_WDOG_ERR; + output STAT_RX_RETRANS_WRAP_ERR; + output [11:0] STAT_RX_SYNCED; + output [11:0] STAT_RX_SYNCED_ERR; + output [11:0] STAT_RX_WORD_SYNC; + output STAT_TX_BURST_ERR; + output STAT_TX_ERRINJ_BITERR_DONE; + output STAT_TX_OVERFLOW_ERR; + output STAT_TX_RETRANS_BURST_ERR; + output STAT_TX_RETRANS_BUSY; + output STAT_TX_RETRANS_RAM_PERROUT; + output [8:0] STAT_TX_RETRANS_RAM_RADDR; + output STAT_TX_RETRANS_RAM_RD_B0; + output STAT_TX_RETRANS_RAM_RD_B1; + output STAT_TX_RETRANS_RAM_RD_B2; + output STAT_TX_RETRANS_RAM_RD_B3; + output [1:0] STAT_TX_RETRANS_RAM_RSEL; + output [8:0] STAT_TX_RETRANS_RAM_WADDR; + output [643:0] STAT_TX_RETRANS_RAM_WDATA; + output STAT_TX_RETRANS_RAM_WE_B0; + output STAT_TX_RETRANS_RAM_WE_B1; + output STAT_TX_RETRANS_RAM_WE_B2; + output STAT_TX_RETRANS_RAM_WE_B3; + output STAT_TX_UNDERFLOW_ERR; + output TX_OVFOUT; + output TX_RDYOUT; + output [63:0] TX_SERDES_DATA00; + output [63:0] TX_SERDES_DATA01; + output [63:0] TX_SERDES_DATA02; + output [63:0] TX_SERDES_DATA03; + output [63:0] TX_SERDES_DATA04; + output [63:0] TX_SERDES_DATA05; + output [63:0] TX_SERDES_DATA06; + output [63:0] TX_SERDES_DATA07; + output [63:0] TX_SERDES_DATA08; + output [63:0] TX_SERDES_DATA09; + output [63:0] TX_SERDES_DATA10; + output [63:0] TX_SERDES_DATA11; + input CORE_CLK; + input CTL_RX_FORCE_RESYNC; + input CTL_RX_RETRANS_ACK; + input CTL_RX_RETRANS_ENABLE; + input CTL_RX_RETRANS_ERRIN; + input CTL_RX_RETRANS_FORCE_REQ; + input CTL_RX_RETRANS_RESET; + input CTL_RX_RETRANS_RESET_MODE; + input CTL_TX_DIAGWORD_INTFSTAT; + input [11:0] CTL_TX_DIAGWORD_LANESTAT; + input CTL_TX_ENABLE; + input CTL_TX_ERRINJ_BITERR_GO; + input [3:0] CTL_TX_ERRINJ_BITERR_LANE; + input [255:0] CTL_TX_FC_STAT; + input [7:0] CTL_TX_MUBITS; + input CTL_TX_RETRANS_ENABLE; + input CTL_TX_RETRANS_RAM_PERRIN; + input [643:0] CTL_TX_RETRANS_RAM_RDATA; + input CTL_TX_RETRANS_REQ; + input CTL_TX_RETRANS_REQ_VALID; + input [11:0] CTL_TX_RLIM_DELTA; + input CTL_TX_RLIM_ENABLE; + input [7:0] CTL_TX_RLIM_INTV; + input [11:0] CTL_TX_RLIM_MAX; + input [9:0] DRP_ADDR; + input DRP_CLK; + input [15:0] DRP_DI; + input DRP_EN; + input DRP_WE; + input LBUS_CLK; + input RX_BYPASS_FORCE_REALIGNIN; + input RX_BYPASS_RDIN; + input RX_RESET; + input [11:0] RX_SERDES_CLK; + input [63:0] RX_SERDES_DATA00; + input [63:0] RX_SERDES_DATA01; + input [63:0] RX_SERDES_DATA02; + input [63:0] RX_SERDES_DATA03; + input [63:0] RX_SERDES_DATA04; + input [63:0] RX_SERDES_DATA05; + input [63:0] RX_SERDES_DATA06; + input [63:0] RX_SERDES_DATA07; + input [63:0] RX_SERDES_DATA08; + input [63:0] RX_SERDES_DATA09; + input [63:0] RX_SERDES_DATA10; + input [63:0] RX_SERDES_DATA11; + input [11:0] RX_SERDES_RESET; + input TX_BCTLIN0; + input TX_BCTLIN1; + input TX_BCTLIN2; + input TX_BCTLIN3; + input [11:0] TX_BYPASS_CTRLIN; + input [63:0] TX_BYPASS_DATAIN00; + input [63:0] TX_BYPASS_DATAIN01; + input [63:0] TX_BYPASS_DATAIN02; + input [63:0] TX_BYPASS_DATAIN03; + input [63:0] TX_BYPASS_DATAIN04; + input [63:0] TX_BYPASS_DATAIN05; + input [63:0] TX_BYPASS_DATAIN06; + input [63:0] TX_BYPASS_DATAIN07; + input [63:0] TX_BYPASS_DATAIN08; + input [63:0] TX_BYPASS_DATAIN09; + input [63:0] TX_BYPASS_DATAIN10; + input [63:0] TX_BYPASS_DATAIN11; + input TX_BYPASS_ENAIN; + input [7:0] TX_BYPASS_GEARBOX_SEQIN; + input [3:0] TX_BYPASS_MFRAMER_STATEIN; + input [10:0] TX_CHANIN0; + input [10:0] TX_CHANIN1; + input [10:0] TX_CHANIN2; + input [10:0] TX_CHANIN3; + input [127:0] TX_DATAIN0; + input [127:0] TX_DATAIN1; + input [127:0] TX_DATAIN2; + input [127:0] TX_DATAIN3; + input TX_ENAIN0; + input TX_ENAIN1; + input TX_ENAIN2; + input TX_ENAIN3; + input TX_EOPIN0; + input TX_EOPIN1; + input TX_EOPIN2; + input TX_EOPIN3; + input TX_ERRIN0; + input TX_ERRIN1; + input TX_ERRIN2; + input TX_ERRIN3; + input [3:0] TX_MTYIN0; + input [3:0] TX_MTYIN1; + input [3:0] TX_MTYIN2; + input [3:0] TX_MTYIN3; + input TX_RESET; + input TX_SERDES_REFCLK; + input TX_SERDES_REFCLK_RESET; + input TX_SOPIN0; + input TX_SOPIN1; + input TX_SOPIN2; + input TX_SOPIN3; +endmodule + +module ILKNE4 (...); + parameter BYPASS = "FALSE"; + parameter [1:0] CTL_RX_BURSTMAX = 2'h3; + parameter [1:0] CTL_RX_CHAN_EXT = 2'h0; + parameter [3:0] CTL_RX_LAST_LANE = 4'hB; + parameter [15:0] CTL_RX_MFRAMELEN_MINUS1 = 16'h07FF; + parameter CTL_RX_PACKET_MODE = "FALSE"; + parameter [2:0] CTL_RX_RETRANS_MULT = 3'h0; + parameter [3:0] CTL_RX_RETRANS_RETRY = 4'h2; + parameter [15:0] CTL_RX_RETRANS_TIMER1 = 16'h0009; + parameter [15:0] CTL_RX_RETRANS_TIMER2 = 16'h0000; + parameter [11:0] CTL_RX_RETRANS_WDOG = 12'h000; + parameter [7:0] CTL_RX_RETRANS_WRAP_TIMER = 8'h00; + parameter CTL_TEST_MODE_PIN_CHAR = "FALSE"; + parameter [1:0] CTL_TX_BURSTMAX = 2'h3; + parameter [2:0] CTL_TX_BURSTSHORT = 3'h1; + parameter [1:0] CTL_TX_CHAN_EXT = 2'h0; + parameter CTL_TX_DISABLE_SKIPWORD = "FALSE"; + parameter [3:0] CTL_TX_FC_CALLEN = 4'hF; + parameter [3:0] CTL_TX_LAST_LANE = 4'hB; + parameter [15:0] CTL_TX_MFRAMELEN_MINUS1 = 16'h07FF; + parameter [13:0] CTL_TX_RETRANS_DEPTH = 14'h0800; + parameter [2:0] CTL_TX_RETRANS_MULT = 3'h0; + parameter [1:0] CTL_TX_RETRANS_RAM_BANKS = 2'h3; + parameter MODE = "TRUE"; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter TEST_MODE_PIN_CHAR = "FALSE"; + output [15:0] DRP_DO; + output DRP_RDY; + output [65:0] RX_BYPASS_DATAOUT00; + output [65:0] RX_BYPASS_DATAOUT01; + output [65:0] RX_BYPASS_DATAOUT02; + output [65:0] RX_BYPASS_DATAOUT03; + output [65:0] RX_BYPASS_DATAOUT04; + output [65:0] RX_BYPASS_DATAOUT05; + output [65:0] RX_BYPASS_DATAOUT06; + output [65:0] RX_BYPASS_DATAOUT07; + output [65:0] RX_BYPASS_DATAOUT08; + output [65:0] RX_BYPASS_DATAOUT09; + output [65:0] RX_BYPASS_DATAOUT10; + output [65:0] RX_BYPASS_DATAOUT11; + output [11:0] RX_BYPASS_ENAOUT; + output [11:0] RX_BYPASS_IS_AVAILOUT; + output [11:0] RX_BYPASS_IS_BADLYFRAMEDOUT; + output [11:0] RX_BYPASS_IS_OVERFLOWOUT; + output [11:0] RX_BYPASS_IS_SYNCEDOUT; + output [11:0] RX_BYPASS_IS_SYNCWORDOUT; + output [10:0] RX_CHANOUT0; + output [10:0] RX_CHANOUT1; + output [10:0] RX_CHANOUT2; + output [10:0] RX_CHANOUT3; + output [127:0] RX_DATAOUT0; + output [127:0] RX_DATAOUT1; + output [127:0] RX_DATAOUT2; + output [127:0] RX_DATAOUT3; + output RX_ENAOUT0; + output RX_ENAOUT1; + output RX_ENAOUT2; + output RX_ENAOUT3; + output RX_EOPOUT0; + output RX_EOPOUT1; + output RX_EOPOUT2; + output RX_EOPOUT3; + output RX_ERROUT0; + output RX_ERROUT1; + output RX_ERROUT2; + output RX_ERROUT3; + output [3:0] RX_MTYOUT0; + output [3:0] RX_MTYOUT1; + output [3:0] RX_MTYOUT2; + output [3:0] RX_MTYOUT3; + output RX_OVFOUT; + output RX_SOPOUT0; + output RX_SOPOUT1; + output RX_SOPOUT2; + output RX_SOPOUT3; + output STAT_RX_ALIGNED; + output STAT_RX_ALIGNED_ERR; + output [11:0] STAT_RX_BAD_TYPE_ERR; + output STAT_RX_BURSTMAX_ERR; + output STAT_RX_BURST_ERR; + output STAT_RX_CRC24_ERR; + output [11:0] STAT_RX_CRC32_ERR; + output [11:0] STAT_RX_CRC32_VALID; + output [11:0] STAT_RX_DESCRAM_ERR; + output [11:0] STAT_RX_DIAGWORD_INTFSTAT; + output [11:0] STAT_RX_DIAGWORD_LANESTAT; + output [255:0] STAT_RX_FC_STAT; + output [11:0] STAT_RX_FRAMING_ERR; + output STAT_RX_MEOP_ERR; + output [11:0] STAT_RX_MF_ERR; + output [11:0] STAT_RX_MF_LEN_ERR; + output [11:0] STAT_RX_MF_REPEAT_ERR; + output STAT_RX_MISALIGNED; + output STAT_RX_MSOP_ERR; + output [7:0] STAT_RX_MUBITS; + output STAT_RX_MUBITS_UPDATED; + output STAT_RX_OVERFLOW_ERR; + output STAT_RX_RETRANS_CRC24_ERR; + output STAT_RX_RETRANS_DISC; + output [15:0] STAT_RX_RETRANS_LATENCY; + output STAT_RX_RETRANS_REQ; + output STAT_RX_RETRANS_RETRY_ERR; + output [7:0] STAT_RX_RETRANS_SEQ; + output STAT_RX_RETRANS_SEQ_UPDATED; + output [2:0] STAT_RX_RETRANS_STATE; + output [4:0] STAT_RX_RETRANS_SUBSEQ; + output STAT_RX_RETRANS_WDOG_ERR; + output STAT_RX_RETRANS_WRAP_ERR; + output [11:0] STAT_RX_SYNCED; + output [11:0] STAT_RX_SYNCED_ERR; + output [11:0] STAT_RX_WORD_SYNC; + output STAT_TX_BURST_ERR; + output STAT_TX_ERRINJ_BITERR_DONE; + output STAT_TX_OVERFLOW_ERR; + output STAT_TX_RETRANS_BURST_ERR; + output STAT_TX_RETRANS_BUSY; + output STAT_TX_RETRANS_RAM_PERROUT; + output [8:0] STAT_TX_RETRANS_RAM_RADDR; + output STAT_TX_RETRANS_RAM_RD_B0; + output STAT_TX_RETRANS_RAM_RD_B1; + output STAT_TX_RETRANS_RAM_RD_B2; + output STAT_TX_RETRANS_RAM_RD_B3; + output [1:0] STAT_TX_RETRANS_RAM_RSEL; + output [8:0] STAT_TX_RETRANS_RAM_WADDR; + output [643:0] STAT_TX_RETRANS_RAM_WDATA; + output STAT_TX_RETRANS_RAM_WE_B0; + output STAT_TX_RETRANS_RAM_WE_B1; + output STAT_TX_RETRANS_RAM_WE_B2; + output STAT_TX_RETRANS_RAM_WE_B3; + output STAT_TX_UNDERFLOW_ERR; + output TX_OVFOUT; + output TX_RDYOUT; + output [63:0] TX_SERDES_DATA00; + output [63:0] TX_SERDES_DATA01; + output [63:0] TX_SERDES_DATA02; + output [63:0] TX_SERDES_DATA03; + output [63:0] TX_SERDES_DATA04; + output [63:0] TX_SERDES_DATA05; + output [63:0] TX_SERDES_DATA06; + output [63:0] TX_SERDES_DATA07; + output [63:0] TX_SERDES_DATA08; + output [63:0] TX_SERDES_DATA09; + output [63:0] TX_SERDES_DATA10; + output [63:0] TX_SERDES_DATA11; + input CORE_CLK; + input CTL_RX_FORCE_RESYNC; + input CTL_RX_RETRANS_ACK; + input CTL_RX_RETRANS_ENABLE; + input CTL_RX_RETRANS_ERRIN; + input CTL_RX_RETRANS_FORCE_REQ; + input CTL_RX_RETRANS_RESET; + input CTL_RX_RETRANS_RESET_MODE; + input CTL_TX_DIAGWORD_INTFSTAT; + input [11:0] CTL_TX_DIAGWORD_LANESTAT; + input CTL_TX_ENABLE; + input CTL_TX_ERRINJ_BITERR_GO; + input [3:0] CTL_TX_ERRINJ_BITERR_LANE; + input [255:0] CTL_TX_FC_STAT; + input [7:0] CTL_TX_MUBITS; + input CTL_TX_RETRANS_ENABLE; + input CTL_TX_RETRANS_RAM_PERRIN; + input [643:0] CTL_TX_RETRANS_RAM_RDATA; + input CTL_TX_RETRANS_REQ; + input CTL_TX_RETRANS_REQ_VALID; + input [11:0] CTL_TX_RLIM_DELTA; + input CTL_TX_RLIM_ENABLE; + input [7:0] CTL_TX_RLIM_INTV; + input [11:0] CTL_TX_RLIM_MAX; + input [9:0] DRP_ADDR; + input DRP_CLK; + input [15:0] DRP_DI; + input DRP_EN; + input DRP_WE; + input LBUS_CLK; + input RX_BYPASS_FORCE_REALIGNIN; + input RX_BYPASS_RDIN; + input RX_RESET; + input [11:0] RX_SERDES_CLK; + input [63:0] RX_SERDES_DATA00; + input [63:0] RX_SERDES_DATA01; + input [63:0] RX_SERDES_DATA02; + input [63:0] RX_SERDES_DATA03; + input [63:0] RX_SERDES_DATA04; + input [63:0] RX_SERDES_DATA05; + input [63:0] RX_SERDES_DATA06; + input [63:0] RX_SERDES_DATA07; + input [63:0] RX_SERDES_DATA08; + input [63:0] RX_SERDES_DATA09; + input [63:0] RX_SERDES_DATA10; + input [63:0] RX_SERDES_DATA11; + input [11:0] RX_SERDES_RESET; + input TX_BCTLIN0; + input TX_BCTLIN1; + input TX_BCTLIN2; + input TX_BCTLIN3; + input [11:0] TX_BYPASS_CTRLIN; + input [63:0] TX_BYPASS_DATAIN00; + input [63:0] TX_BYPASS_DATAIN01; + input [63:0] TX_BYPASS_DATAIN02; + input [63:0] TX_BYPASS_DATAIN03; + input [63:0] TX_BYPASS_DATAIN04; + input [63:0] TX_BYPASS_DATAIN05; + input [63:0] TX_BYPASS_DATAIN06; + input [63:0] TX_BYPASS_DATAIN07; + input [63:0] TX_BYPASS_DATAIN08; + input [63:0] TX_BYPASS_DATAIN09; + input [63:0] TX_BYPASS_DATAIN10; + input [63:0] TX_BYPASS_DATAIN11; + input TX_BYPASS_ENAIN; + input [7:0] TX_BYPASS_GEARBOX_SEQIN; + input [3:0] TX_BYPASS_MFRAMER_STATEIN; + input [10:0] TX_CHANIN0; + input [10:0] TX_CHANIN1; + input [10:0] TX_CHANIN2; + input [10:0] TX_CHANIN3; + input [127:0] TX_DATAIN0; + input [127:0] TX_DATAIN1; + input [127:0] TX_DATAIN2; + input [127:0] TX_DATAIN3; + input TX_ENAIN0; + input TX_ENAIN1; + input TX_ENAIN2; + input TX_ENAIN3; + input TX_EOPIN0; + input TX_EOPIN1; + input TX_EOPIN2; + input TX_EOPIN3; + input TX_ERRIN0; + input TX_ERRIN1; + input TX_ERRIN2; + input TX_ERRIN3; + input [3:0] TX_MTYIN0; + input [3:0] TX_MTYIN1; + input [3:0] TX_MTYIN2; + input [3:0] TX_MTYIN3; + input TX_RESET; + input TX_SERDES_REFCLK; + input TX_SERDES_REFCLK_RESET; + input TX_SOPIN0; + input TX_SOPIN1; + input TX_SOPIN2; + input TX_SOPIN3; +endmodule + +(* keep *) +module VCU (...); + parameter integer CORECLKREQ = 667; + parameter integer DECHORRESOLUTION = 3840; + parameter DECODERCHROMAFORMAT = "4_2_2"; + parameter DECODERCODING = "H.265"; + parameter integer DECODERCOLORDEPTH = 10; + parameter integer DECODERNUMCORES = 2; + parameter integer DECVERTRESOLUTION = 2160; + parameter ENABLEDECODER = "TRUE"; + parameter ENABLEENCODER = "TRUE"; + parameter integer ENCHORRESOLUTION = 3840; + parameter ENCODERCHROMAFORMAT = "4_2_2"; + parameter ENCODERCODING = "H.265"; + parameter integer ENCODERCOLORDEPTH = 10; + parameter integer ENCODERNUMCORES = 4; + parameter integer ENCVERTRESOLUTION = 2160; + output VCUPLARREADYAXILITEAPB; + output VCUPLAWREADYAXILITEAPB; + output [1:0] VCUPLBRESPAXILITEAPB; + output VCUPLBVALIDAXILITEAPB; + output VCUPLCORESTATUSCLKPLL; + output [43:0] VCUPLDECARADDR0; + output [43:0] VCUPLDECARADDR1; + output [1:0] VCUPLDECARBURST0; + output [1:0] VCUPLDECARBURST1; + output [3:0] VCUPLDECARCACHE0; + output [3:0] VCUPLDECARCACHE1; + output [3:0] VCUPLDECARID0; + output [3:0] VCUPLDECARID1; + output [7:0] VCUPLDECARLEN0; + output [7:0] VCUPLDECARLEN1; + output VCUPLDECARPROT0; + output VCUPLDECARPROT1; + output [3:0] VCUPLDECARQOS0; + output [3:0] VCUPLDECARQOS1; + output [2:0] VCUPLDECARSIZE0; + output [2:0] VCUPLDECARSIZE1; + output VCUPLDECARVALID0; + output VCUPLDECARVALID1; + output [43:0] VCUPLDECAWADDR0; + output [43:0] VCUPLDECAWADDR1; + output [1:0] VCUPLDECAWBURST0; + output [1:0] VCUPLDECAWBURST1; + output [3:0] VCUPLDECAWCACHE0; + output [3:0] VCUPLDECAWCACHE1; + output [3:0] VCUPLDECAWID0; + output [3:0] VCUPLDECAWID1; + output [7:0] VCUPLDECAWLEN0; + output [7:0] VCUPLDECAWLEN1; + output VCUPLDECAWPROT0; + output VCUPLDECAWPROT1; + output [3:0] VCUPLDECAWQOS0; + output [3:0] VCUPLDECAWQOS1; + output [2:0] VCUPLDECAWSIZE0; + output [2:0] VCUPLDECAWSIZE1; + output VCUPLDECAWVALID0; + output VCUPLDECAWVALID1; + output VCUPLDECBREADY0; + output VCUPLDECBREADY1; + output VCUPLDECRREADY0; + output VCUPLDECRREADY1; + output [127:0] VCUPLDECWDATA0; + output [127:0] VCUPLDECWDATA1; + output VCUPLDECWLAST0; + output VCUPLDECWLAST1; + output VCUPLDECWVALID0; + output VCUPLDECWVALID1; + output [16:0] VCUPLENCALL2CADDR; + output VCUPLENCALL2CRVALID; + output [319:0] VCUPLENCALL2CWDATA; + output VCUPLENCALL2CWVALID; + output [43:0] VCUPLENCARADDR0; + output [43:0] VCUPLENCARADDR1; + output [1:0] VCUPLENCARBURST0; + output [1:0] VCUPLENCARBURST1; + output [3:0] VCUPLENCARCACHE0; + output [3:0] VCUPLENCARCACHE1; + output [3:0] VCUPLENCARID0; + output [3:0] VCUPLENCARID1; + output [7:0] VCUPLENCARLEN0; + output [7:0] VCUPLENCARLEN1; + output VCUPLENCARPROT0; + output VCUPLENCARPROT1; + output [3:0] VCUPLENCARQOS0; + output [3:0] VCUPLENCARQOS1; + output [2:0] VCUPLENCARSIZE0; + output [2:0] VCUPLENCARSIZE1; + output VCUPLENCARVALID0; + output VCUPLENCARVALID1; + output [43:0] VCUPLENCAWADDR0; + output [43:0] VCUPLENCAWADDR1; + output [1:0] VCUPLENCAWBURST0; + output [1:0] VCUPLENCAWBURST1; + output [3:0] VCUPLENCAWCACHE0; + output [3:0] VCUPLENCAWCACHE1; + output [3:0] VCUPLENCAWID0; + output [3:0] VCUPLENCAWID1; + output [7:0] VCUPLENCAWLEN0; + output [7:0] VCUPLENCAWLEN1; + output VCUPLENCAWPROT0; + output VCUPLENCAWPROT1; + output [3:0] VCUPLENCAWQOS0; + output [3:0] VCUPLENCAWQOS1; + output [2:0] VCUPLENCAWSIZE0; + output [2:0] VCUPLENCAWSIZE1; + output VCUPLENCAWVALID0; + output VCUPLENCAWVALID1; + output VCUPLENCBREADY0; + output VCUPLENCBREADY1; + output VCUPLENCRREADY0; + output VCUPLENCRREADY1; + output [127:0] VCUPLENCWDATA0; + output [127:0] VCUPLENCWDATA1; + output VCUPLENCWLAST0; + output VCUPLENCWLAST1; + output VCUPLENCWVALID0; + output VCUPLENCWVALID1; + output [43:0] VCUPLMCUMAXIICDCARADDR; + output [1:0] VCUPLMCUMAXIICDCARBURST; + output [3:0] VCUPLMCUMAXIICDCARCACHE; + output [2:0] VCUPLMCUMAXIICDCARID; + output [7:0] VCUPLMCUMAXIICDCARLEN; + output VCUPLMCUMAXIICDCARLOCK; + output [2:0] VCUPLMCUMAXIICDCARPROT; + output [3:0] VCUPLMCUMAXIICDCARQOS; + output [2:0] VCUPLMCUMAXIICDCARSIZE; + output VCUPLMCUMAXIICDCARVALID; + output [43:0] VCUPLMCUMAXIICDCAWADDR; + output [1:0] VCUPLMCUMAXIICDCAWBURST; + output [3:0] VCUPLMCUMAXIICDCAWCACHE; + output [2:0] VCUPLMCUMAXIICDCAWID; + output [7:0] VCUPLMCUMAXIICDCAWLEN; + output VCUPLMCUMAXIICDCAWLOCK; + output [2:0] VCUPLMCUMAXIICDCAWPROT; + output [3:0] VCUPLMCUMAXIICDCAWQOS; + output [2:0] VCUPLMCUMAXIICDCAWSIZE; + output VCUPLMCUMAXIICDCAWVALID; + output VCUPLMCUMAXIICDCBREADY; + output VCUPLMCUMAXIICDCRREADY; + output [31:0] VCUPLMCUMAXIICDCWDATA; + output VCUPLMCUMAXIICDCWLAST; + output [3:0] VCUPLMCUMAXIICDCWSTRB; + output VCUPLMCUMAXIICDCWVALID; + output VCUPLMCUSTATUSCLKPLL; + output VCUPLPINTREQ; + output VCUPLPLLSTATUSPLLLOCK; + output VCUPLPWRSUPPLYSTATUSVCCAUX; + output VCUPLPWRSUPPLYSTATUSVCUINT; + output [31:0] VCUPLRDATAAXILITEAPB; + output [1:0] VCUPLRRESPAXILITEAPB; + output VCUPLRVALIDAXILITEAPB; + output VCUPLWREADYAXILITEAPB; + input INITPLVCUGASKETCLAMPCONTROLLVLSHVCCINTD; + input [19:0] PLVCUARADDRAXILITEAPB; + input [2:0] PLVCUARPROTAXILITEAPB; + input PLVCUARVALIDAXILITEAPB; + input [19:0] PLVCUAWADDRAXILITEAPB; + input [2:0] PLVCUAWPROTAXILITEAPB; + input PLVCUAWVALIDAXILITEAPB; + input PLVCUAXIDECCLK; + input PLVCUAXIENCCLK; + input PLVCUAXILITECLK; + input PLVCUAXIMCUCLK; + input PLVCUBREADYAXILITEAPB; + input PLVCUCORECLK; + input PLVCUDECARREADY0; + input PLVCUDECARREADY1; + input PLVCUDECAWREADY0; + input PLVCUDECAWREADY1; + input [3:0] PLVCUDECBID0; + input [3:0] PLVCUDECBID1; + input [1:0] PLVCUDECBRESP0; + input [1:0] PLVCUDECBRESP1; + input PLVCUDECBVALID0; + input PLVCUDECBVALID1; + input [127:0] PLVCUDECRDATA0; + input [127:0] PLVCUDECRDATA1; + input [3:0] PLVCUDECRID0; + input [3:0] PLVCUDECRID1; + input PLVCUDECRLAST0; + input PLVCUDECRLAST1; + input [1:0] PLVCUDECRRESP0; + input [1:0] PLVCUDECRRESP1; + input PLVCUDECRVALID0; + input PLVCUDECRVALID1; + input PLVCUDECWREADY0; + input PLVCUDECWREADY1; + input [319:0] PLVCUENCALL2CRDATA; + input PLVCUENCALL2CRREADY; + input PLVCUENCARREADY0; + input PLVCUENCARREADY1; + input PLVCUENCAWREADY0; + input PLVCUENCAWREADY1; + input [3:0] PLVCUENCBID0; + input [3:0] PLVCUENCBID1; + input [1:0] PLVCUENCBRESP0; + input [1:0] PLVCUENCBRESP1; + input PLVCUENCBVALID0; + input PLVCUENCBVALID1; + input PLVCUENCL2CCLK; + input [127:0] PLVCUENCRDATA0; + input [127:0] PLVCUENCRDATA1; + input [3:0] PLVCUENCRID0; + input [3:0] PLVCUENCRID1; + input PLVCUENCRLAST0; + input PLVCUENCRLAST1; + input [1:0] PLVCUENCRRESP0; + input [1:0] PLVCUENCRRESP1; + input PLVCUENCRVALID0; + input PLVCUENCRVALID1; + input PLVCUENCWREADY0; + input PLVCUENCWREADY1; + input PLVCUMCUCLK; + input PLVCUMCUMAXIICDCARREADY; + input PLVCUMCUMAXIICDCAWREADY; + input [2:0] PLVCUMCUMAXIICDCBID; + input [1:0] PLVCUMCUMAXIICDCBRESP; + input PLVCUMCUMAXIICDCBVALID; + input [31:0] PLVCUMCUMAXIICDCRDATA; + input [2:0] PLVCUMCUMAXIICDCRID; + input PLVCUMCUMAXIICDCRLAST; + input [1:0] PLVCUMCUMAXIICDCRRESP; + input PLVCUMCUMAXIICDCRVALID; + input PLVCUMCUMAXIICDCWREADY; + input PLVCUPLLREFCLKPL; + input PLVCURAWRSTN; + input PLVCURREADYAXILITEAPB; + input [31:0] PLVCUWDATAAXILITEAPB; + input [3:0] PLVCUWSTRBAXILITEAPB; + input PLVCUWVALIDAXILITEAPB; +endmodule + +module FE (...); + parameter MODE = "TURBO_DECODE"; + parameter real PHYSICAL_UTILIZATION = 100.00; + parameter SIM_DEVICE = "ULTRASCALE_PLUS"; + parameter STANDARD = "LTE"; + parameter real THROUGHPUT_UTILIZATION = 100.00; + output [399:0] DEBUG_DOUT; + output DEBUG_PHASE; + output INTERRUPT; + output [511:0] M_AXIS_DOUT_TDATA; + output M_AXIS_DOUT_TLAST; + output M_AXIS_DOUT_TVALID; + output [31:0] M_AXIS_STATUS_TDATA; + output M_AXIS_STATUS_TVALID; + output [15:0] SPARE_OUT; + output S_AXIS_CTRL_TREADY; + output S_AXIS_DIN_TREADY; + output S_AXIS_DIN_WORDS_TREADY; + output S_AXIS_DOUT_WORDS_TREADY; + output S_AXI_ARREADY; + output S_AXI_AWREADY; + output S_AXI_BVALID; + output [31:0] S_AXI_RDATA; + output S_AXI_RVALID; + output S_AXI_WREADY; + input CORE_CLK; + input DEBUG_CLK_EN; + input DEBUG_EN; + input [3:0] DEBUG_SEL_IN; + input M_AXIS_DOUT_ACLK; + input M_AXIS_DOUT_TREADY; + input M_AXIS_STATUS_ACLK; + input M_AXIS_STATUS_TREADY; + input RESET_N; + input [15:0] SPARE_IN; + input S_AXIS_CTRL_ACLK; + input [31:0] S_AXIS_CTRL_TDATA; + input S_AXIS_CTRL_TVALID; + input S_AXIS_DIN_ACLK; + input [511:0] S_AXIS_DIN_TDATA; + input S_AXIS_DIN_TLAST; + input S_AXIS_DIN_TVALID; + input S_AXIS_DIN_WORDS_ACLK; + input [31:0] S_AXIS_DIN_WORDS_TDATA; + input S_AXIS_DIN_WORDS_TLAST; + input S_AXIS_DIN_WORDS_TVALID; + input S_AXIS_DOUT_WORDS_ACLK; + input [31:0] S_AXIS_DOUT_WORDS_TDATA; + input S_AXIS_DOUT_WORDS_TLAST; + input S_AXIS_DOUT_WORDS_TVALID; + input S_AXI_ACLK; + input [17:0] S_AXI_ARADDR; + input S_AXI_ARVALID; + input [17:0] S_AXI_AWADDR; + input S_AXI_AWVALID; + input S_AXI_BREADY; + input S_AXI_RREADY; + input [31:0] S_AXI_WDATA; + input S_AXI_WVALID; +endmodule + diff --git a/resources/netlist/resources/kernel/share/xilinx/ff_map.v b/resources/netlist/resources/kernel/share/xilinx/ff_map.v new file mode 100644 index 0000000..2079fd9 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/ff_map.v @@ -0,0 +1,120 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +`ifndef _NO_FFS + +// Async reset, enable. + +module \$_DFFE_NP0P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDCE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .CLR(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DFFE_PP0P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .CLR(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +module \$_DFFE_NP1P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDPE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .PRE(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DFFE_PP1P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .PRE(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// Async set and reset, enable. + +module \$_DFFSRE_NPPP_ (input D, C, E, S, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDCPE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_C_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .CLR(R), .PRE(S)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DFFSRE_PPPP_ (input D, C, E, S, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDCPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .CLR(R), .PRE(S)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// Sync reset, enable. + +module \$_SDFFE_NP0P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDRE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_SDFFE_PP0P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDRE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +module \$_SDFFE_NP1P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDSE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .S(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_SDFFE_PP1P_ (input D, C, E, R, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + FDSE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .S(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// Latches with reset. + +module \$_DLATCH_NP0_ (input E, R, D, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + LDCE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_G_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DLATCH_PP0_ (input E, R, D, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + LDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DLATCH_NP1_ (input E, R, D, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + LDPE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_G_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .PRE(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DLATCH_PP1_ (input E, R, D, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + LDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .PRE(R)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +// Latches with set and reset. + +module \$_DLATCH_NPP_ (input E, S, R, D, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + LDCPE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_G_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(R), .PRE(S)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule +module \$_DLATCH_PPP_ (input E, S, R, D, output Q); + parameter _TECHMAP_WIREINIT_Q_ = 1'bx; + LDCPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(R), .PRE(S)); + wire _TECHMAP_REMOVEINIT_Q_ = 1; +endmodule + +`endif + diff --git a/resources/netlist/resources/kernel/share/xilinx/lut_map.v b/resources/netlist/resources/kernel/share/xilinx/lut_map.v new file mode 100644 index 0000000..30d7d80 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/lut_map.v @@ -0,0 +1,101 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// ============================================================================ +// LUT mapping + +`ifndef _NO_LUTS + +module \$lut (A, Y); + parameter WIDTH = 0; + parameter LUT = 0; + + (* force_downto *) + input [WIDTH-1:0] A; + output Y; + + generate + if (WIDTH == 1) begin + if (LUT == 2'b01) begin + INV _TECHMAP_REPLACE_ (.O(Y), .I(A[0])); + end else begin + LUT1 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0])); + end + end else + if (WIDTH == 2) begin + LUT2 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0]), .I1(A[1])); + end else + if (WIDTH == 3) begin + LUT3 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2])); + end else + if (WIDTH == 4) begin + LUT4 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2]), + .I3(A[3])); + end else + if (WIDTH == 5 && WIDTH <= `LUT_WIDTH) begin + LUT5 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2]), + .I3(A[3]), .I4(A[4])); + end else + if (WIDTH == 6 && WIDTH <= `LUT_WIDTH) begin + LUT6 #(.INIT(LUT)) _TECHMAP_REPLACE_ (.O(Y), + .I0(A[0]), .I1(A[1]), .I2(A[2]), + .I3(A[3]), .I4(A[4]), .I5(A[5])); + end else + if (WIDTH == 5 && WIDTH > `LUT_WIDTH) begin + wire f0, f1; + \$lut #(.LUT(LUT[15: 0]), .WIDTH(4)) lut0 (.A(A[3:0]), .Y(f0)); + \$lut #(.LUT(LUT[31:16]), .WIDTH(4)) lut1 (.A(A[3:0]), .Y(f1)); + MUXF5 mux5(.I0(f0), .I1(f1), .S(A[4]), .O(Y)); + end else + if (WIDTH == 6 && WIDTH > `LUT_WIDTH) begin + wire f0, f1; + \$lut #(.LUT(LUT[31: 0]), .WIDTH(5)) lut0 (.A(A[4:0]), .Y(f0)); + \$lut #(.LUT(LUT[63:32]), .WIDTH(5)) lut1 (.A(A[4:0]), .Y(f1)); + MUXF6 mux6(.I0(f0), .I1(f1), .S(A[5]), .O(Y)); + end else + if (WIDTH == 7) begin + wire f0, f1; + \$lut #(.LUT(LUT[ 63: 0]), .WIDTH(6)) lut0 (.A(A[5:0]), .Y(f0)); + \$lut #(.LUT(LUT[127:64]), .WIDTH(6)) lut1 (.A(A[5:0]), .Y(f1)); + MUXF7 mux7(.I0(f0), .I1(f1), .S(A[6]), .O(Y)); + end else + if (WIDTH == 8) begin + wire f0, f1; + \$lut #(.LUT(LUT[127: 0]), .WIDTH(7)) lut0 (.A(A[6:0]), .Y(f0)); + \$lut #(.LUT(LUT[255:128]), .WIDTH(7)) lut1 (.A(A[6:0]), .Y(f1)); + MUXF8 mux8(.I0(f0), .I1(f1), .S(A[7]), .O(Y)); + end else + if (WIDTH == 9) begin + wire f0, f1; + \$lut #(.LUT(LUT[255: 0]), .WIDTH(8)) lut0 (.A(A[7:0]), .Y(f0)); + \$lut #(.LUT(LUT[511:256]), .WIDTH(8)) lut1 (.A(A[7:0]), .Y(f1)); + MUXF9 mux9(.I0(f0), .I1(f1), .S(A[8]), .O(Y)); + end else begin + wire _TECHMAP_FAIL_ = 1; + end + endgenerate +endmodule + +`endif + diff --git a/resources/netlist/resources/kernel/share/xilinx/lutrams_xc5v.txt b/resources/netlist/resources/kernel/share/xilinx/lutrams_xc5v.txt new file mode 100644 index 0000000..8ab8076 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/lutrams_xc5v.txt @@ -0,0 +1,100 @@ +# LUT RAMs for Virtex 5, Virtex 6, Spartan 6, Series 7. +# The corresponding mapping file is lutrams_xc5v_map.v + +# Single-port RAMs. + +ram distributed $__XILINX_LUTRAM_SP_ { + cost 8; + widthscale; + option "ABITS" 5 { + abits 5; + widths 8 global; + } + option "ABITS" 6 { + abits 6; + widths 4 global; + } + option "ABITS" 7 { + abits 7; + widths 2 global; + } + option "ABITS" 8 { + abits 8; + widths 1 global; + } + init no_undef; + prune_rom; + port arsw "RW" { + clock posedge; + } +} + +# Dual-port RAMs. + +ram distributed $__XILINX_LUTRAM_DP_ { + cost 8; + widthscale; + option "ABITS" 5 { + abits 5; + widths 4 global; + } + option "ABITS" 6 { + abits 6; + widths 2 global; + } + option "ABITS" 7 { + abits 7; + widths 1 global; + } + init no_undef; + prune_rom; + port arsw "RW" { + clock posedge; + } + port ar "R" { + } +} + +# Quad-port RAMs. + +ram distributed $__XILINX_LUTRAM_QP_ { + cost 7; + widthscale; + option "ABITS" 5 { + abits 5; + widths 2 global; + } + option "ABITS" 6 { + abits 6; + widths 1 global; + } + init no_undef; + prune_rom; + port arsw "RW" { + clock posedge; + } + port ar "R0" "R1" "R2" { + } +} + +# Simple dual port RAMs. + +ram distributed $__XILINX_LUTRAM_SDP_ { + cost 8; + widthscale 7; + option "ABITS" 5 { + abits 5; + widths 6 global; + } + option "ABITS" 6 { + abits 6; + widths 3 global; + } + init no_undef; + prune_rom; + port sw "W" { + clock posedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/lutrams_xc5v_map.v b/resources/netlist/resources/kernel/share/xilinx/lutrams_xc5v_map.v new file mode 100644 index 0000000..18ce3a5 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/lutrams_xc5v_map.v @@ -0,0 +1,901 @@ +// LUT RAMs for Virtex 5, Virtex 6, Spartan 6, Series 7, Ultrascale. +// The definitions are in lutrams_xc5v.txt (everything but Ultrascale) +// and lutrams_xcu.txt (Ultrascale). + + +module $__XILINX_LUTRAM_SP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 5; +parameter WIDTH = 8; +parameter BITS_USED = 0; + +output [WIDTH-1:0] PORT_RW_RD_DATA; +input [WIDTH-1:0] PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +function [(1 << OPTION_ABITS)-1:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice[i] = INIT[i * WIDTH + idx]; +endfunction + +function [(2 << OPTION_ABITS)-1:0] init_slice2; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice2[2 * i +: 2] = INIT[i * WIDTH + idx * 2 +: 2]; +endfunction + +generate +case(OPTION_ABITS) +5: if (WIDTH == 8) + RAM32M + #( + .INIT_D(init_slice2(0)), + .INIT_C(init_slice2(1)), + .INIT_B(init_slice2(2)), + .INIT_A(init_slice2(3)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_RW_RD_DATA[7:6]), + .DOB(PORT_RW_RD_DATA[5:4]), + .DOC(PORT_RW_RD_DATA[3:2]), + .DOD(PORT_RW_RD_DATA[1:0]), + .DIA(PORT_RW_WR_DATA[7:6]), + .DIB(PORT_RW_WR_DATA[5:4]), + .DIC(PORT_RW_WR_DATA[3:2]), + .DID(PORT_RW_WR_DATA[1:0]), + .ADDRA(PORT_RW_ADDR), + .ADDRB(PORT_RW_ADDR), + .ADDRC(PORT_RW_ADDR), + .ADDRD(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +else + RAM32M16 + #( + .INIT_H(init_slice2(0)), + .INIT_G(init_slice2(1)), + .INIT_F(init_slice2(2)), + .INIT_E(init_slice2(3)), + .INIT_D(init_slice2(4)), + .INIT_C(init_slice2(5)), + .INIT_B(init_slice2(6)), + .INIT_A(init_slice2(7)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_RW_RD_DATA[15:14]), + .DOB(PORT_RW_RD_DATA[13:12]), + .DOC(PORT_RW_RD_DATA[11:10]), + .DOD(PORT_RW_RD_DATA[9:8]), + .DOE(PORT_RW_RD_DATA[7:6]), + .DOF(PORT_RW_RD_DATA[5:4]), + .DOG(PORT_RW_RD_DATA[3:2]), + .DOH(PORT_RW_RD_DATA[1:0]), + .DIA(PORT_RW_WR_DATA[15:14]), + .DIB(PORT_RW_WR_DATA[13:12]), + .DIC(PORT_RW_WR_DATA[11:10]), + .DID(PORT_RW_WR_DATA[9:8]), + .DIE(PORT_RW_WR_DATA[7:6]), + .DIF(PORT_RW_WR_DATA[5:4]), + .DIG(PORT_RW_WR_DATA[3:2]), + .DIH(PORT_RW_WR_DATA[1:0]), + .ADDRA(PORT_RW_ADDR), + .ADDRB(PORT_RW_ADDR), + .ADDRC(PORT_RW_ADDR), + .ADDRD(PORT_RW_ADDR), + .ADDRE(PORT_RW_ADDR), + .ADDRF(PORT_RW_ADDR), + .ADDRG(PORT_RW_ADDR), + .ADDRH(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +6: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM64X1S + #( + .INIT(init_slice(i)), + ) + slice + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .A5(PORT_RW_ADDR[5]), + .D(PORT_RW_WR_DATA[i]), + .O(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +end +7: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM128X1S + #( + .INIT(init_slice(i)), + ) + slice + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .A5(PORT_RW_ADDR[5]), + .A6(PORT_RW_ADDR[6]), + .D(PORT_RW_WR_DATA[i]), + .O(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +end +8: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM256X1S + #( + .INIT(init_slice(i)), + ) + slice + ( + .A(PORT_RW_ADDR), + .D(PORT_RW_WR_DATA[i]), + .O(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +end +9: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM512X1S + #( + .INIT(init_slice(i)), + ) + slice + ( + .A(PORT_RW_ADDR), + .D(PORT_RW_WR_DATA[i]), + .O(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +end +default: + $error("invalid OPTION_ABITS/WIDTH combination"); +endcase +endgenerate + +endmodule + + +module $__XILINX_LUTRAM_DP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 5; +parameter WIDTH = 4; +parameter BITS_USED = 0; + +output [WIDTH-1:0] PORT_RW_RD_DATA; +input [WIDTH-1:0] PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +output [WIDTH-1:0] PORT_R_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R_ADDR; + +function [(1 << OPTION_ABITS)-1:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice[i] = INIT[i * WIDTH + idx]; +endfunction + +function [(2 << OPTION_ABITS)-1:0] init_slice2; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice2[2 * i +: 2] = INIT[i * WIDTH + idx * 2 +: 2]; +endfunction + +generate +case (OPTION_ABITS) +5: if (WIDTH == 4) + RAM32M + #( + .INIT_D(init_slice2(0)), + .INIT_C(init_slice2(0)), + .INIT_B(init_slice2(1)), + .INIT_A(init_slice2(1)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R_RD_DATA[3:2]), + .DOB(PORT_RW_RD_DATA[3:2]), + .DOC(PORT_R_RD_DATA[1:0]), + .DOD(PORT_RW_RD_DATA[1:0]), + .DIA(PORT_RW_WR_DATA[3:2]), + .DIB(PORT_RW_WR_DATA[3:2]), + .DIC(PORT_RW_WR_DATA[1:0]), + .DID(PORT_RW_WR_DATA[1:0]), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_RW_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +else + RAM32M16 + #( + .INIT_H(init_slice2(0)), + .INIT_G(init_slice2(0)), + .INIT_F(init_slice2(1)), + .INIT_E(init_slice2(1)), + .INIT_D(init_slice2(2)), + .INIT_C(init_slice2(2)), + .INIT_B(init_slice2(3)), + .INIT_A(init_slice2(3)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R_RD_DATA[7:6]), + .DOB(PORT_RW_RD_DATA[7:6]), + .DOC(PORT_R_RD_DATA[5:4]), + .DOD(PORT_RW_RD_DATA[5:4]), + .DOE(PORT_R_RD_DATA[3:2]), + .DOF(PORT_RW_RD_DATA[3:2]), + .DOG(PORT_R_RD_DATA[1:0]), + .DOH(PORT_RW_RD_DATA[1:0]), + .DIA(PORT_RW_WR_DATA[7:6]), + .DIB(PORT_RW_WR_DATA[7:6]), + .DIC(PORT_RW_WR_DATA[5:4]), + .DID(PORT_RW_WR_DATA[5:4]), + .DIE(PORT_RW_WR_DATA[3:2]), + .DIF(PORT_RW_WR_DATA[3:2]), + .DIG(PORT_RW_WR_DATA[1:0]), + .DIH(PORT_RW_WR_DATA[1:0]), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_RW_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_RW_ADDR), + .ADDRE(PORT_R_ADDR), + .ADDRF(PORT_RW_ADDR), + .ADDRG(PORT_R_ADDR), + .ADDRH(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +6: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM64X1D + #( + .INIT(init_slice(i)), + ) + slice + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .A5(PORT_RW_ADDR[5]), + .D(PORT_RW_WR_DATA[i]), + .SPO(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + .DPRA0(PORT_R_ADDR[0]), + .DPRA1(PORT_R_ADDR[1]), + .DPRA2(PORT_R_ADDR[2]), + .DPRA3(PORT_R_ADDR[3]), + .DPRA4(PORT_R_ADDR[4]), + .DPRA5(PORT_R_ADDR[5]), + .DPO(PORT_R_RD_DATA[i]), + ); +end +7: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM128X1D + #( + .INIT(init_slice(i)), + ) + slice + ( + .A(PORT_RW_ADDR), + .D(PORT_RW_WR_DATA[i]), + .SPO(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + .DPRA(PORT_R_ADDR), + .DPO(PORT_R_RD_DATA[i]), + ); +end +8: begin + genvar i; + for (i = 0; i < WIDTH; i = i + 1) + if (BITS_USED[i]) + RAM256X1D + #( + .INIT(init_slice(i)), + ) + slice + ( + .A(PORT_RW_ADDR), + .D(PORT_RW_WR_DATA[i]), + .SPO(PORT_RW_RD_DATA[i]), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + .DPRA(PORT_R_ADDR), + .DPO(PORT_R_RD_DATA[i]), + ); +end +default: + $error("invalid OPTION_ABITS/WIDTH combination"); +endcase +endgenerate + +endmodule + + +module $__XILINX_LUTRAM_QP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 5; +parameter WIDTH = 2; +parameter BITS_USED = 0; + +output [WIDTH-1:0] PORT_RW_RD_DATA; +input [WIDTH-1:0] PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +output [WIDTH-1:0] PORT_R0_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R0_ADDR; +output [WIDTH-1:0] PORT_R1_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R1_ADDR; +output [WIDTH-1:0] PORT_R2_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R2_ADDR; + +function [(1 << OPTION_ABITS)-1:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice[i] = INIT[i * WIDTH + idx]; +endfunction + +function [(2 << OPTION_ABITS)-1:0] init_slice2; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice2[2 * i +: 2] = INIT[i * WIDTH + idx * 2 +: 2]; +endfunction + +generate +case (OPTION_ABITS) +5: if (WIDTH == 2) + RAM32M + #( + .INIT_D(init_slice2(0)), + .INIT_C(init_slice2(0)), + .INIT_B(init_slice2(0)), + .INIT_A(init_slice2(0)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R2_RD_DATA[1:0]), + .DOB(PORT_R1_RD_DATA[1:0]), + .DOC(PORT_R0_RD_DATA[1:0]), + .DOD(PORT_RW_RD_DATA[1:0]), + .DIA(PORT_RW_WR_DATA[1:0]), + .DIB(PORT_RW_WR_DATA[1:0]), + .DIC(PORT_RW_WR_DATA[1:0]), + .DID(PORT_RW_WR_DATA[1:0]), + .ADDRA(PORT_R2_ADDR), + .ADDRB(PORT_R1_ADDR), + .ADDRC(PORT_R0_ADDR), + .ADDRD(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +else + RAM32M16 + #( + .INIT_H(init_slice2(0)), + .INIT_G(init_slice2(0)), + .INIT_F(init_slice2(0)), + .INIT_E(init_slice2(0)), + .INIT_D(init_slice2(1)), + .INIT_C(init_slice2(1)), + .INIT_B(init_slice2(1)), + .INIT_A(init_slice2(1)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R2_RD_DATA[3:2]), + .DOB(PORT_R1_RD_DATA[3:2]), + .DOC(PORT_R0_RD_DATA[3:2]), + .DOD(PORT_RW_RD_DATA[3:2]), + .DOE(PORT_R2_RD_DATA[1:0]), + .DOF(PORT_R1_RD_DATA[1:0]), + .DOG(PORT_R0_RD_DATA[1:0]), + .DOH(PORT_RW_RD_DATA[1:0]), + .DIA(PORT_RW_WR_DATA[3:2]), + .DIB(PORT_RW_WR_DATA[3:2]), + .DIC(PORT_RW_WR_DATA[3:2]), + .DID(PORT_RW_WR_DATA[3:2]), + .DIE(PORT_RW_WR_DATA[1:0]), + .DIF(PORT_RW_WR_DATA[1:0]), + .DIG(PORT_RW_WR_DATA[1:0]), + .DIH(PORT_RW_WR_DATA[1:0]), + .ADDRA(PORT_R2_ADDR), + .ADDRB(PORT_R1_ADDR), + .ADDRC(PORT_R0_ADDR), + .ADDRD(PORT_RW_ADDR), + .ADDRE(PORT_R2_ADDR), + .ADDRF(PORT_R1_ADDR), + .ADDRG(PORT_R0_ADDR), + .ADDRH(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +6: if (WIDTH == 1) + RAM64M + #( + .INIT_D(init_slice(0)), + .INIT_C(init_slice(0)), + .INIT_B(init_slice(0)), + .INIT_A(init_slice(0)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R2_RD_DATA[0]), + .DOB(PORT_R1_RD_DATA[0]), + .DOC(PORT_R0_RD_DATA[0]), + .DOD(PORT_RW_RD_DATA[0]), + .DIA(PORT_RW_WR_DATA[0]), + .DIB(PORT_RW_WR_DATA[0]), + .DIC(PORT_RW_WR_DATA[0]), + .DID(PORT_RW_WR_DATA[0]), + .ADDRA(PORT_R2_ADDR), + .ADDRB(PORT_R1_ADDR), + .ADDRC(PORT_R0_ADDR), + .ADDRD(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +else + RAM64M8 + #( + .INIT_H(init_slice(0)), + .INIT_G(init_slice(0)), + .INIT_F(init_slice(0)), + .INIT_E(init_slice(0)), + .INIT_D(init_slice(1)), + .INIT_C(init_slice(1)), + .INIT_B(init_slice(1)), + .INIT_A(init_slice(1)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R2_RD_DATA[1]), + .DOB(PORT_R1_RD_DATA[1]), + .DOC(PORT_R0_RD_DATA[1]), + .DOD(PORT_RW_RD_DATA[1]), + .DOE(PORT_R2_RD_DATA[0]), + .DOF(PORT_R1_RD_DATA[0]), + .DOG(PORT_R0_RD_DATA[0]), + .DOH(PORT_RW_RD_DATA[0]), + .DIA(PORT_RW_WR_DATA[1]), + .DIB(PORT_RW_WR_DATA[1]), + .DIC(PORT_RW_WR_DATA[1]), + .DID(PORT_RW_WR_DATA[1]), + .DIE(PORT_RW_WR_DATA[0]), + .DIF(PORT_RW_WR_DATA[0]), + .DIG(PORT_RW_WR_DATA[0]), + .DIH(PORT_RW_WR_DATA[0]), + .ADDRA(PORT_R2_ADDR), + .ADDRB(PORT_R1_ADDR), + .ADDRC(PORT_R0_ADDR), + .ADDRD(PORT_RW_ADDR), + .ADDRE(PORT_R2_ADDR), + .ADDRF(PORT_R1_ADDR), + .ADDRG(PORT_R0_ADDR), + .ADDRH(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +default: + $error("invalid OPTION_ABITS/WIDTH combination"); +endcase +endgenerate + +endmodule + + +module $__XILINX_LUTRAM_OP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 5; +parameter WIDTH = 2; +parameter BITS_USED = 0; + +output [WIDTH-1:0] PORT_RW_RD_DATA; +input [WIDTH-1:0] PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +output [WIDTH-1:0] PORT_R0_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R0_ADDR; +output [WIDTH-1:0] PORT_R1_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R1_ADDR; +output [WIDTH-1:0] PORT_R2_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R2_ADDR; +output [WIDTH-1:0] PORT_R3_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R3_ADDR; +output [WIDTH-1:0] PORT_R4_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R4_ADDR; +output [WIDTH-1:0] PORT_R5_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R5_ADDR; +output [WIDTH-1:0] PORT_R6_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R6_ADDR; + +generate +case (OPTION_ABITS) +5: RAM32M16 + #( + .INIT_H(INIT), + .INIT_G(INIT), + .INIT_F(INIT), + .INIT_E(INIT), + .INIT_D(INIT), + .INIT_C(INIT), + .INIT_B(INIT), + .INIT_A(INIT), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R6_RD_DATA), + .DOB(PORT_R5_RD_DATA), + .DOC(PORT_R4_RD_DATA), + .DOD(PORT_R3_RD_DATA), + .DOE(PORT_R2_RD_DATA), + .DOF(PORT_R1_RD_DATA), + .DOG(PORT_R0_RD_DATA), + .DOH(PORT_RW_RD_DATA), + .DIA(PORT_RW_WR_DATA), + .DIB(PORT_RW_WR_DATA), + .DIC(PORT_RW_WR_DATA), + .DID(PORT_RW_WR_DATA), + .DIE(PORT_RW_WR_DATA), + .DIF(PORT_RW_WR_DATA), + .DIG(PORT_RW_WR_DATA), + .DIH(PORT_RW_WR_DATA), + .ADDRA(PORT_R6_ADDR), + .ADDRB(PORT_R5_ADDR), + .ADDRC(PORT_R4_ADDR), + .ADDRD(PORT_R3_ADDR), + .ADDRE(PORT_R2_ADDR), + .ADDRF(PORT_R1_ADDR), + .ADDRG(PORT_R0_ADDR), + .ADDRH(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +6: RAM64M8 + #( + .INIT_H(INIT), + .INIT_G(INIT), + .INIT_F(INIT), + .INIT_E(INIT), + .INIT_D(INIT), + .INIT_C(INIT), + .INIT_B(INIT), + .INIT_A(INIT), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R6_RD_DATA), + .DOB(PORT_R5_RD_DATA), + .DOC(PORT_R4_RD_DATA), + .DOD(PORT_R3_RD_DATA), + .DOE(PORT_R2_RD_DATA), + .DOF(PORT_R1_RD_DATA), + .DOG(PORT_R0_RD_DATA), + .DOH(PORT_RW_RD_DATA), + .DIA(PORT_RW_WR_DATA), + .DIB(PORT_RW_WR_DATA), + .DIC(PORT_RW_WR_DATA), + .DID(PORT_RW_WR_DATA), + .DIE(PORT_RW_WR_DATA), + .DIF(PORT_RW_WR_DATA), + .DIG(PORT_RW_WR_DATA), + .DIH(PORT_RW_WR_DATA), + .ADDRA(PORT_R6_ADDR), + .ADDRB(PORT_R5_ADDR), + .ADDRC(PORT_R4_ADDR), + .ADDRD(PORT_R3_ADDR), + .ADDRE(PORT_R2_ADDR), + .ADDRF(PORT_R1_ADDR), + .ADDRG(PORT_R0_ADDR), + .ADDRH(PORT_RW_ADDR), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +default: + $error("invalid OPTION_ABITS/WIDTH combination"); +endcase +endgenerate + +endmodule + + +module $__XILINX_LUTRAM_SDP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 5; +parameter WIDTH = 6; +parameter BITS_USED = 0; + +input [WIDTH-1:0] PORT_W_WR_DATA; +input [OPTION_ABITS-1:0] PORT_W_ADDR; +input PORT_W_WR_EN; +input PORT_W_CLK; + +output [WIDTH-1:0] PORT_R_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R_ADDR; + +function [(1 << OPTION_ABITS)-1:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice[i] = INIT[i * WIDTH + idx]; +endfunction + +function [(2 << OPTION_ABITS)-1:0] init_slice2; + input integer idx; + integer i; + for (i = 0; i < (1 << OPTION_ABITS); i = i + 1) + init_slice2[2 * i +: 2] = INIT[i * WIDTH + idx * 2 +: 2]; +endfunction + +generate +case (OPTION_ABITS) +5: if (WIDTH == 6) + RAM32M + #( + .INIT_C(init_slice2(0)), + .INIT_B(init_slice2(1)), + .INIT_A(init_slice2(2)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R_RD_DATA[5:4]), + .DOB(PORT_R_RD_DATA[3:2]), + .DOC(PORT_R_RD_DATA[1:0]), + .DIA(PORT_W_WR_DATA[5:4]), + .DIB(PORT_W_WR_DATA[3:2]), + .DIC(PORT_W_WR_DATA[1:0]), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_R_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_W_ADDR), + .WE(PORT_W_WR_EN), + .WCLK(PORT_W_CLK), + ); +else + RAM32M16 + #( + .INIT_G(init_slice2(0)), + .INIT_F(init_slice2(1)), + .INIT_E(init_slice2(2)), + .INIT_D(init_slice2(3)), + .INIT_C(init_slice2(4)), + .INIT_B(init_slice2(5)), + .INIT_A(init_slice2(6)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R_RD_DATA[13:12]), + .DOB(PORT_R_RD_DATA[11:10]), + .DOC(PORT_R_RD_DATA[9:8]), + .DOD(PORT_R_RD_DATA[7:6]), + .DOE(PORT_R_RD_DATA[5:4]), + .DOF(PORT_R_RD_DATA[3:2]), + .DOG(PORT_R_RD_DATA[1:0]), + .DIA(PORT_W_WR_DATA[13:12]), + .DIB(PORT_W_WR_DATA[11:10]), + .DIC(PORT_W_WR_DATA[9:8]), + .DID(PORT_W_WR_DATA[7:6]), + .DIE(PORT_W_WR_DATA[5:4]), + .DIF(PORT_W_WR_DATA[3:2]), + .DIG(PORT_W_WR_DATA[1:0]), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_R_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_R_ADDR), + .ADDRE(PORT_R_ADDR), + .ADDRF(PORT_R_ADDR), + .ADDRG(PORT_R_ADDR), + .ADDRH(PORT_W_ADDR), + .WE(PORT_W_WR_EN), + .WCLK(PORT_W_CLK), + ); +6: if (WIDTH == 3) + RAM64M + #( + .INIT_C(init_slice(0)), + .INIT_B(init_slice(1)), + .INIT_A(init_slice(2)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R_RD_DATA[2]), + .DOB(PORT_R_RD_DATA[1]), + .DOC(PORT_R_RD_DATA[0]), + .DIA(PORT_W_WR_DATA[2]), + .DIB(PORT_W_WR_DATA[1]), + .DIC(PORT_W_WR_DATA[0]), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_R_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_W_ADDR), + .WE(PORT_W_WR_EN), + .WCLK(PORT_W_CLK), + ); +else + RAM64M8 + #( + .INIT_G(init_slice(0)), + .INIT_F(init_slice(1)), + .INIT_E(init_slice(2)), + .INIT_D(init_slice(3)), + .INIT_C(init_slice(4)), + .INIT_B(init_slice(5)), + .INIT_A(init_slice(6)), + ) + _TECHMAP_REPLACE_ + ( + .DOA(PORT_R_RD_DATA[6]), + .DOB(PORT_R_RD_DATA[5]), + .DOC(PORT_R_RD_DATA[4]), + .DOD(PORT_R_RD_DATA[3]), + .DOE(PORT_R_RD_DATA[2]), + .DOF(PORT_R_RD_DATA[1]), + .DOG(PORT_R_RD_DATA[0]), + .DIA(PORT_W_WR_DATA[6]), + .DIB(PORT_W_WR_DATA[5]), + .DIC(PORT_W_WR_DATA[4]), + .DID(PORT_W_WR_DATA[3]), + .DIE(PORT_W_WR_DATA[2]), + .DIF(PORT_W_WR_DATA[1]), + .DIG(PORT_W_WR_DATA[0]), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_R_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_R_ADDR), + .ADDRE(PORT_R_ADDR), + .ADDRF(PORT_R_ADDR), + .ADDRG(PORT_R_ADDR), + .ADDRH(PORT_W_ADDR), + .WE(PORT_W_WR_EN), + .WCLK(PORT_W_CLK), + ); +default: + $error("invalid OPTION_ABITS/WIDTH combination"); +endcase +endgenerate + +endmodule + + +module $__XILINX_LUTRAM_64X8SW_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 9; +parameter PORT_RW_WR_WIDTH = 1; +parameter PORT_RW_RD_WIDTH = 8; + +output [PORT_RW_RD_WIDTH-1:0] PORT_RW_RD_DATA; +input [PORT_RW_WR_WIDTH-1:0] PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +function [63:0] init_slice; + input integer idx; + integer i; + for (i = 0; i < 64; i = i + 1) + init_slice[i] = INIT[i * 8 + idx]; +endfunction + +RAM64X8SW +#( + .INIT_A(init_slice(7)), + .INIT_B(init_slice(6)), + .INIT_C(init_slice(5)), + .INIT_D(init_slice(4)), + .INIT_E(init_slice(3)), + .INIT_F(init_slice(2)), + .INIT_G(init_slice(1)), + .INIT_H(init_slice(0)), +) +_TECHMAP_REPLACE_ +( + .A(PORT_RW_ADDR[8:3]), + .WSEL(PORT_RW_ADDR[2:0]), + .D(PORT_RW_WR_DATA), + .O(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), +); + +endmodule + + +module $__XILINX_LUTRAM_32X16DR8_ (...); + +parameter OPTION_ABITS = 6; +parameter BITS_USED = 0; +parameter PORT_W_WIDTH = 14; +parameter PORT_R_WIDTH = 7; + +input [PORT_W_WIDTH-1:0] PORT_W_WR_DATA; +input [OPTION_ABITS-1:0] PORT_W_ADDR; +input PORT_W_WR_EN; +input PORT_W_CLK; + +output [PORT_R_WIDTH-1:0] PORT_R_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R_ADDR; + +RAM32X16DR8 _TECHMAP_REPLACE_ +( + .DOA(PORT_R_RD_DATA[6]), + .DOB(PORT_R_RD_DATA[5]), + .DOC(PORT_R_RD_DATA[4]), + .DOD(PORT_R_RD_DATA[3]), + .DOE(PORT_R_RD_DATA[2]), + .DOF(PORT_R_RD_DATA[1]), + .DOG(PORT_R_RD_DATA[0]), + .DIA({PORT_W_WR_DATA[13], PORT_W_WR_DATA[6]}), + .DIB({PORT_W_WR_DATA[12], PORT_W_WR_DATA[5]}), + .DIC({PORT_W_WR_DATA[11], PORT_W_WR_DATA[4]}), + .DID({PORT_W_WR_DATA[10], PORT_W_WR_DATA[3]}), + .DIE({PORT_W_WR_DATA[9], PORT_W_WR_DATA[2]}), + .DIF({PORT_W_WR_DATA[8], PORT_W_WR_DATA[1]}), + .DIG({PORT_W_WR_DATA[7], PORT_W_WR_DATA[0]}), + .ADDRA(PORT_R_ADDR), + .ADDRB(PORT_R_ADDR), + .ADDRC(PORT_R_ADDR), + .ADDRD(PORT_R_ADDR), + .ADDRE(PORT_R_ADDR), + .ADDRF(PORT_R_ADDR), + .ADDRG(PORT_R_ADDR), + .ADDRH(PORT_W_ADDR[5:1]), + .WE(PORT_W_WR_EN), + .WCLK(PORT_W_CLK), +); + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/lutrams_xcu.txt b/resources/netlist/resources/kernel/share/xilinx/lutrams_xcu.txt new file mode 100644 index 0000000..8062250 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/lutrams_xcu.txt @@ -0,0 +1,162 @@ +# LUT RAMs for Ultrascale. +# The corresponding mapping file is lutrams_xc5v_map.v + +# Single-port RAMs. + +ram distributed $__XILINX_LUTRAM_SP_ { + cost 16; + widthscale; + option "ABITS" 5 { + abits 5; + widths 16 global; + } + option "ABITS" 6 { + abits 6; + widths 8 global; + } + option "ABITS" 7 { + abits 7; + widths 4 global; + } + option "ABITS" 8 { + abits 8; + widths 2 global; + } + option "ABITS" 16 { + abits 16; + widths 1 global; + } + init any; + prune_rom; + port arsw "RW" { + clock posedge; + } +} + +# Dual-port RAMs. + +ram distributed $__XILINX_LUTRAM_DP_ { + cost 16; + widthscale; + option "ABITS" 5 { + abits 5; + widths 8 global; + } + option "ABITS" 6 { + abits 6; + widths 4 global; + } + option "ABITS" 7 { + abits 7; + widths 2 global; + } + option "ABITS" 8 { + abits 8; + widths 1 global; + } + init any; + prune_rom; + port arsw "RW" { + clock posedge; + } + port ar "R" { + } +} + +# Quad-port RAMs. + +ram distributed $__XILINX_LUTRAM_QP_ { + cost 16; + widthscale; + option "ABITS" 5 { + abits 5; + widths 4 global; + } + option "ABITS" 6 { + abits 6; + widths 2 global; + } + init any; + prune_rom; + port arsw "RW" { + clock posedge; + } + port ar "R0" "R1" "R2" { + } +} + +# Octal-port RAMs. + +ram distributed $__XILINX_LUTRAM_OP_ { + cost 16; + widthscale; + option "ABITS" 5 { + abits 5; + widths 2 global; + } + option "ABITS" 6 { + abits 6; + widths 1 global; + } + init any; + prune_rom; + port arsw "RW" { + clock posedge; + } + port ar "R0" "R1" "R2" "R3" "R4" "R5" "R6" { + } +} + +# Simple dual port RAMs. + +ram distributed $__XILINX_LUTRAM_SDP_ { + cost 16; + widthscale; + option "ABITS" 5 { + abits 5; + widths 14 global; + } + option "ABITS" 6 { + abits 6; + widths 7 global; + } + init any; + prune_rom; + port sw "W" { + clock posedge; + } + port ar "R" { + } +} + +# Wide-read RAM. + +ram distributed $__XILINX_LUTRAM_64X8SW_ { + cost 16; + abits 9; + widths 1 2 4 8 per_port; + init any; + prune_rom; + port arsw "RW" { + width rd 8 wr 1; + clock posedge; + } +} + +# Wide-write RAM. + +ram distributed $__XILINX_LUTRAM_32X16DR8_ { + cost 16; + widthscale; + abits 6; + widths 7 14 per_port; + # Yes, no initialization capability. + prune_rom; + port sw "W" { + width 14; + clock posedge; + } + port ar "R" { + width 7; + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/lutrams_xcv.txt b/resources/netlist/resources/kernel/share/xilinx/lutrams_xcv.txt new file mode 100644 index 0000000..0bf17ae --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/lutrams_xcv.txt @@ -0,0 +1,59 @@ +# LUT RAMs for Virtex, Virtex 2, Spartan 3, Virtex 4. +# The corresponding mapping file is lutrams_xcv_map.v + +ram distributed $__XILINX_LUTRAM_SP_ { + width 1; + option "ABITS" 4 { + abits 4; + cost 3; + } + option "ABITS" 5 { + abits 5; + cost 5; + } + ifndef IS_VIRTEX { + option "ABITS" 6 { + abits 6; + cost 9; + } + } + ifdef IS_VIRTEX2 { + # RAM128X1S + option "ABITS" 7 { + abits 7; + cost 17; + } + } + init no_undef; + prune_rom; + port arsw "RW" { + clock posedge; + } +} + +ram distributed $__XILINX_LUTRAM_DP_ { + width 1; + option "ABITS" 4 { + abits 4; + cost 5; + } + ifdef IS_VIRTEX2 { + # RAM32X1D + option "ABITS" 5 { + abits 5; + cost 9; + } + # RAM64X1D + option "ABITS" 6 { + abits 6; + cost 17; + } + } + init no_undef; + prune_rom; + port arsw "RW" { + clock posedge; + } + port ar "R" { + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/lutrams_xcv_map.v b/resources/netlist/resources/kernel/share/xilinx/lutrams_xcv_map.v new file mode 100644 index 0000000..91a9694 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/lutrams_xcv_map.v @@ -0,0 +1,177 @@ +// LUT RAMs for Virtex, Virtex 2, Spartan 3, Virtex 4. +// The corresponding definition file is lutrams_xcv.txt + +module $__XILINX_LUTRAM_SP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 4; + +output PORT_RW_RD_DATA; +input PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +generate +case(OPTION_ABITS) +4: RAM16X1S + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .D(PORT_RW_WR_DATA), + .O(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +5: RAM32X1S + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .D(PORT_RW_WR_DATA), + .O(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +6: RAM64X1S + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .A5(PORT_RW_ADDR[5]), + .D(PORT_RW_WR_DATA), + .O(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +7: RAM128X1S + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .A5(PORT_RW_ADDR[5]), + .A6(PORT_RW_ADDR[6]), + .D(PORT_RW_WR_DATA), + .O(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + ); +default: + $error("invalid OPTION_ABITS"); +endcase +endgenerate + +endmodule + +module $__XILINX_LUTRAM_DP_ (...); + +parameter INIT = 0; +parameter OPTION_ABITS = 4; + +output PORT_RW_RD_DATA; +input PORT_RW_WR_DATA; +input [OPTION_ABITS-1:0] PORT_RW_ADDR; +input PORT_RW_WR_EN; +input PORT_RW_CLK; + +output PORT_R_RD_DATA; +input [OPTION_ABITS-1:0] PORT_R_ADDR; + +generate +case (OPTION_ABITS) +4: RAM16X1D + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .D(PORT_RW_WR_DATA), + .SPO(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + .DPRA0(PORT_R_ADDR[0]), + .DPRA1(PORT_R_ADDR[1]), + .DPRA2(PORT_R_ADDR[2]), + .DPRA3(PORT_R_ADDR[3]), + .DPO(PORT_R_RD_DATA), + ); +5: RAM32X1D + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .D(PORT_RW_WR_DATA), + .SPO(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + .DPRA0(PORT_R_ADDR[0]), + .DPRA1(PORT_R_ADDR[1]), + .DPRA2(PORT_R_ADDR[2]), + .DPRA3(PORT_R_ADDR[3]), + .DPRA4(PORT_R_ADDR[4]), + .DPO(PORT_R_RD_DATA), + ); +6: RAM64X1D + #( + .INIT(INIT), + ) + _TECHMAP_REPLACE_ + ( + .A0(PORT_RW_ADDR[0]), + .A1(PORT_RW_ADDR[1]), + .A2(PORT_RW_ADDR[2]), + .A3(PORT_RW_ADDR[3]), + .A4(PORT_RW_ADDR[4]), + .A5(PORT_RW_ADDR[5]), + .D(PORT_RW_WR_DATA), + .SPO(PORT_RW_RD_DATA), + .WE(PORT_RW_WR_EN), + .WCLK(PORT_RW_CLK), + .DPRA0(PORT_R_ADDR[0]), + .DPRA1(PORT_R_ADDR[1]), + .DPRA2(PORT_R_ADDR[2]), + .DPRA3(PORT_R_ADDR[3]), + .DPRA4(PORT_R_ADDR[4]), + .DPRA5(PORT_R_ADDR[5]), + .DPO(PORT_R_RD_DATA), + ); +default: + $error("invalid OPTION_ABITS"); +endcase +endgenerate + +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/mux_map.v b/resources/netlist/resources/kernel/share/xilinx/mux_map.v new file mode 100644 index 0000000..f498344 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/mux_map.v @@ -0,0 +1,74 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * 2019 Eddie Hung + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +// The purpose of these mapping rules is to allow preserve all (sufficiently +// wide) $shiftx cells during 'techmap' so that they can be mapped to hard +// resources, rather than being bit-blasted to gates during 'techmap' +// execution + +module \$shiftx (A, B, Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 1; + parameter B_WIDTH = 1; + parameter Y_WIDTH = 1; + + (* force_downto *) + input [A_WIDTH-1:0] A; + (* force_downto *) + input [B_WIDTH-1:0] B; + (* force_downto *) + output [Y_WIDTH-1:0] Y; + + parameter [B_WIDTH-1:0] _TECHMAP_CONSTMSK_B_ = 0; + parameter [B_WIDTH-1:0] _TECHMAP_CONSTVAL_B_ = 0; + + generate + if (B_SIGNED) begin + if (_TECHMAP_CONSTMSK_B_[B_WIDTH-1] && (_TECHMAP_CONSTVAL_B_[B_WIDTH-1] == 1'b0 || _TECHMAP_CONSTVAL_B_[B_WIDTH-1] === 1'bx)) + // Optimisation to remove B_SIGNED if sign bit of B is constant-0 + \$shiftx #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(0), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH-1'd1), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A(A), .B(B[B_WIDTH-2:0]), .Y(Y) + ); + else + wire _TECHMAP_FAIL_ = 1; + end + else begin + if (((A_WIDTH + Y_WIDTH - 1) / Y_WIDTH) < `MIN_MUX_INPUTS) + wire _TECHMAP_FAIL_ = 1; + else + \$__XILINX_SHIFTX #( + .A_SIGNED(A_SIGNED), + .B_SIGNED(B_SIGNED), + .A_WIDTH(A_WIDTH), + .B_WIDTH(B_WIDTH), + .Y_WIDTH(Y_WIDTH) + ) _TECHMAP_REPLACE_ ( + .A(A), .B(B), .Y(Y) + ); + end + endgenerate +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/urams.txt b/resources/netlist/resources/kernel/share/xilinx/urams.txt new file mode 100644 index 0000000..6a59204 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/urams.txt @@ -0,0 +1,37 @@ +ram huge $__XILINX_URAM_ { + abits 12; + width 72; + cost 1024; + option "BYTEWIDTH" 8 byte 8; + option "BYTEWIDTH" 9 byte 9; + init zero; + port srsw "A" { + clock anyedge "C"; + clken; + rdwr no_change; + rdinit zero; + portoption "RST_MODE" "SYNC" { + rdsrst zero ungated; + } + portoption "RST_MODE" "ASYNC" { + rdarst zero; + } + wrtrans all new; + wrbe_separate; + } + port srsw "B" { + clock anyedge "C"; + clken; + rdwr no_change; + rdinit zero; + portoption "RST_MODE" "SYNC" { + rdsrst zero ungated; + } + portoption "RST_MODE" "ASYNC" { + rdarst zero; + } + wrtrans all old; + wrprio "A"; + wrbe_separate; + } +} diff --git a/resources/netlist/resources/kernel/share/xilinx/urams_map.v b/resources/netlist/resources/kernel/share/xilinx/urams_map.v new file mode 100644 index 0000000..3ecbe70 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/urams_map.v @@ -0,0 +1,152 @@ +module $__XILINX_URAM_ (...); + parameter OPTION_BYTEWIDTH = 8; + localparam WR_BE_WIDTH = 72 / OPTION_BYTEWIDTH; + + parameter CLK_C_POL = 1; + parameter PORT_A_CLK_POL = 1; + parameter PORT_A_OPTION_RST_MODE = "SYNC"; + parameter PORT_B_CLK_POL = 1; + parameter PORT_B_OPTION_RST_MODE = "SYNC"; + + input CLK_C; + + input PORT_A_CLK; + input PORT_A_CLK_EN; + input PORT_A_RD_SRST; + input PORT_A_RD_ARST; + input PORT_A_WR_EN; + input [WR_BE_WIDTH-1:0] PORT_A_WR_BE; + input [11:0] PORT_A_ADDR; + input [71:0] PORT_A_WR_DATA; + output [71:0] PORT_A_RD_DATA; + + input PORT_B_CLK; + input PORT_B_CLK_EN; + input PORT_B_RD_SRST; + input PORT_B_RD_ARST; + input PORT_B_WR_EN; + input [WR_BE_WIDTH-1:0] PORT_B_WR_BE; + input [11:0] PORT_B_ADDR; + input [71:0] PORT_B_WR_DATA; + output [71:0] PORT_B_RD_DATA; + + wire [71:0] DIN_A, DIN_B, DOUT_A, DOUT_B; + + generate + if (OPTION_BYTEWIDTH == 8) begin + assign DIN_A = PORT_A_WR_DATA; + assign DIN_B = PORT_B_WR_DATA; + assign PORT_A_RD_DATA = DOUT_A; + assign PORT_B_RD_DATA = DOUT_B; + end else begin + assign DIN_A = { + PORT_A_WR_DATA[71], + PORT_A_WR_DATA[62], + PORT_A_WR_DATA[53], + PORT_A_WR_DATA[44], + PORT_A_WR_DATA[35], + PORT_A_WR_DATA[26], + PORT_A_WR_DATA[17], + PORT_A_WR_DATA[8], + PORT_A_WR_DATA[70:63], + PORT_A_WR_DATA[61:54], + PORT_A_WR_DATA[52:45], + PORT_A_WR_DATA[43:36], + PORT_A_WR_DATA[34:27], + PORT_A_WR_DATA[25:18], + PORT_A_WR_DATA[16:9], + PORT_A_WR_DATA[7:0] + }; + assign DIN_B = { + PORT_B_WR_DATA[71], + PORT_B_WR_DATA[62], + PORT_B_WR_DATA[53], + PORT_B_WR_DATA[44], + PORT_B_WR_DATA[35], + PORT_B_WR_DATA[26], + PORT_B_WR_DATA[17], + PORT_B_WR_DATA[8], + PORT_B_WR_DATA[70:63], + PORT_B_WR_DATA[61:54], + PORT_B_WR_DATA[52:45], + PORT_B_WR_DATA[43:36], + PORT_B_WR_DATA[34:27], + PORT_B_WR_DATA[25:18], + PORT_B_WR_DATA[16:9], + PORT_B_WR_DATA[7:0] + }; + assign PORT_A_RD_DATA = { + DOUT_A[71], + DOUT_A[63:56], + DOUT_A[70], + DOUT_A[55:48], + DOUT_A[69], + DOUT_A[47:40], + DOUT_A[68], + DOUT_A[39:32], + DOUT_A[67], + DOUT_A[31:24], + DOUT_A[66], + DOUT_A[23:16], + DOUT_A[65], + DOUT_A[15:8], + DOUT_A[64], + DOUT_A[7:0] + }; + assign PORT_B_RD_DATA = { + DOUT_B[71], + DOUT_B[63:56], + DOUT_B[70], + DOUT_B[55:48], + DOUT_B[69], + DOUT_B[47:40], + DOUT_B[68], + DOUT_B[39:32], + DOUT_B[67], + DOUT_B[31:24], + DOUT_B[66], + DOUT_B[23:16], + DOUT_B[65], + DOUT_B[15:8], + DOUT_B[64], + DOUT_B[7:0] + }; + end + endgenerate + + URAM288 #( + .BWE_MODE_A(OPTION_BYTEWIDTH == 8 ? "PARITY_INDEPENDENT" : "PARITY_INTERLEAVED"), + .BWE_MODE_B(OPTION_BYTEWIDTH == 8 ? "PARITY_INDEPENDENT" : "PARITY_INTERLEAVED"), + .EN_AUTO_SLEEP_MODE("FALSE"), + .IREG_PRE_A("FALSE"), + .IREG_PRE_B("FALSE"), + .IS_CLK_INVERTED(!CLK_C_POL), + .OREG_A("FALSE"), + .OREG_B("FALSE"), + .RST_MODE_A(PORT_A_OPTION_RST_MODE), + .RST_MODE_B(PORT_B_OPTION_RST_MODE), + ) _TECHMAP_REPLACE_ ( + .ADDR_A({11'b0, PORT_A_ADDR}), + .BWE_A(PORT_A_WR_BE), + .EN_A(PORT_A_CLK_EN), + .RDB_WR_A(PORT_A_WR_EN), + .INJECT_DBITERR_A(1'b0), + .INJECT_SBITERR_A(1'b0), + .RST_A(PORT_A_OPTION_RST_MODE == "SYNC" ? PORT_A_RD_SRST : PORT_A_RD_ARST), + .DIN_A(DIN_A), + .DOUT_A(DOUT_A), + + .ADDR_B({11'b0, PORT_B_ADDR}), + .BWE_B(PORT_B_WR_BE), + .EN_B(PORT_B_CLK_EN), + .RDB_WR_B(PORT_B_WR_EN), + .INJECT_DBITERR_B(1'b0), + .INJECT_SBITERR_B(1'b0), + .RST_B(PORT_B_OPTION_RST_MODE == "SYNC" ? PORT_B_RD_SRST : PORT_B_RD_ARST), + .DIN_B(DIN_B), + .DOUT_B(DOUT_B), + + .CLK(CLK_C), + .SLEEP(1'b0) + ); +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/xc3s_mult_map.v b/resources/netlist/resources/kernel/share/xilinx/xc3s_mult_map.v new file mode 100644 index 0000000..67cd4ac --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xc3s_mult_map.v @@ -0,0 +1,14 @@ +module \$__MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + MULT18X18 _TECHMAP_REPLACE_ ( + .A(A), + .B(B), + .P(Y) + ); +endmodule + diff --git a/resources/netlist/resources/kernel/share/xilinx/xc3sda_dsp_map.v b/resources/netlist/resources/kernel/share/xilinx/xc3sda_dsp_map.v new file mode 100644 index 0000000..258f903 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xc3sda_dsp_map.v @@ -0,0 +1,34 @@ +module \$__MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + wire [47:0] P_48; + DSP48A #( + // Disable all registers + .A0REG(0), + .A1REG(0), + .B0REG(0), + .B1REG(0), + .CARRYINREG(0), + .CARRYINSEL("OPMODE5"), + .CREG(0), + .DREG(0), + .MREG(0), + .OPMODEREG(0), + .PREG(0) + ) _TECHMAP_REPLACE_ ( + //Data path + .A(A), + .B(B), + .C(48'b0), + .D(18'b0), + .P(P_48), + + .OPMODE(8'b0000001) + ); + assign Y = P_48; +endmodule + diff --git a/resources/netlist/resources/kernel/share/xilinx/xc4v_dsp_map.v b/resources/netlist/resources/kernel/share/xilinx/xc4v_dsp_map.v new file mode 100644 index 0000000..69c42f3 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xc4v_dsp_map.v @@ -0,0 +1,38 @@ +module \$__MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + wire [47:0] P_48; + DSP48 #( + // Disable all registers + .AREG(0), + .BREG(0), + .B_INPUT("DIRECT"), + .CARRYINREG(0), + .CARRYINSELREG(0), + .CREG(0), + .MREG(0), + .OPMODEREG(0), + .PREG(0), + .SUBTRACTREG(0), + .LEGACY_MODE("MULT18X18") + ) _TECHMAP_REPLACE_ ( + //Data path + .A(A), + .B(B), + .C(48'b0), + .P(P_48), + + .SUBTRACT(1'b0), + .OPMODE(7'b000101), + .CARRYINSEL(2'b00), + + .BCIN(18'b0), + .PCIN(48'b0), + .CARRYIN(1'b0) + ); + assign Y = P_48; +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/xc5v_dsp_map.v b/resources/netlist/resources/kernel/share/xilinx/xc5v_dsp_map.v new file mode 100644 index 0000000..fc7ba46 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xc5v_dsp_map.v @@ -0,0 +1,45 @@ +module \$__MUL25X18 (input [24:0] A, input [17:0] B, output [42:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + wire [47:0] P_48; + DSP48E #( + // Disable all registers + .ACASCREG(0), + .A_INPUT("DIRECT"), + .ALUMODEREG(0), + .AREG(0), + .BCASCREG(0), + .B_INPUT("DIRECT"), + .BREG(0), + .MULTCARRYINREG(0), + .CARRYINREG(0), + .CARRYINSELREG(0), + .CREG(0), + .MREG(0), + .OPMODEREG(0), + .PREG(0), + .USE_MULT("MULT"), + .USE_SIMD("ONE48") + ) _TECHMAP_REPLACE_ ( + //Data path + .A({{5{A[24]}}, A}), + .B(B), + .C(48'b0), + .P(P_48), + + .ALUMODE(4'b0000), + .OPMODE(7'b000101), + .CARRYINSEL(3'b000), + + .ACIN(30'b0), + .BCIN(18'b0), + .PCIN(48'b0), + .CARRYIN(1'b0) + ); + assign Y = P_48; +endmodule + diff --git a/resources/netlist/resources/kernel/share/xilinx/xc6s_dsp_map.v b/resources/netlist/resources/kernel/share/xilinx/xc6s_dsp_map.v new file mode 100644 index 0000000..bdce60c --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xc6s_dsp_map.v @@ -0,0 +1,35 @@ +module \$__MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + wire [47:0] P_48; + DSP48A1 #( + // Disable all registers + .A0REG(0), + .A1REG(0), + .B0REG(0), + .B1REG(0), + .CARRYINREG(0), + .CARRYINSEL("OPMODE5"), + .CREG(0), + .DREG(0), + .MREG(0), + .OPMODEREG(0), + .PREG(0) + ) _TECHMAP_REPLACE_ ( + //Data path + .A(A), + .B(B), + .C(48'b0), + .D(18'b0), + .P(P_48), + + .OPMODE(8'b0000001) + ); + assign Y = P_48; +endmodule + + diff --git a/resources/netlist/resources/kernel/share/xilinx/xc7_dsp_map.v b/resources/netlist/resources/kernel/share/xilinx/xc7_dsp_map.v new file mode 100644 index 0000000..58df977 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xc7_dsp_map.v @@ -0,0 +1,50 @@ +module \$__MUL25X18 (input [24:0] A, input [17:0] B, output [42:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + wire [47:0] P_48; + DSP48E1 #( + // Disable all registers + .ACASCREG(0), + .ADREG(0), + .A_INPUT("DIRECT"), + .ALUMODEREG(0), + .AREG(0), + .BCASCREG(0), + .B_INPUT("DIRECT"), + .BREG(0), + .CARRYINREG(0), + .CARRYINSELREG(0), + .CREG(0), + .DREG(0), + .INMODEREG(0), + .MREG(0), + .OPMODEREG(0), + .PREG(0), + .USE_MULT("MULTIPLY"), + .USE_SIMD("ONE48"), + .USE_DPORT("FALSE") + ) _TECHMAP_REPLACE_ ( + //Data path + .A({{5{A[24]}}, A}), + .B(B), + .C(48'b0), + .D(25'b0), + .CARRYIN(1'b0), + .P(P_48), + + .INMODE(5'b00000), + .ALUMODE(4'b0000), + .OPMODE(7'b000101), + .CARRYINSEL(3'b000), + + .ACIN(30'b0), + .BCIN(18'b0), + .PCIN(48'b0), + .CARRYIN(1'b0) + ); + assign Y = P_48; +endmodule diff --git a/resources/netlist/resources/kernel/share/xilinx/xcu_dsp_map.v b/resources/netlist/resources/kernel/share/xilinx/xcu_dsp_map.v new file mode 100644 index 0000000..fa95a57 --- /dev/null +++ b/resources/netlist/resources/kernel/share/xilinx/xcu_dsp_map.v @@ -0,0 +1,51 @@ +module \$__MUL27X18 (input [26:0] A, input [17:0] B, output [44:0] Y); + parameter A_SIGNED = 0; + parameter B_SIGNED = 0; + parameter A_WIDTH = 0; + parameter B_WIDTH = 0; + parameter Y_WIDTH = 0; + + wire [47:0] P_48; + DSP48E2 #( + // Disable all registers + .ACASCREG(0), + .ADREG(0), + .A_INPUT("DIRECT"), + .ALUMODEREG(0), + .AREG(0), + .BCASCREG(0), + .B_INPUT("DIRECT"), + .BREG(0), + .CARRYINREG(0), + .CARRYINSELREG(0), + .CREG(0), + .DREG(0), + .INMODEREG(0), + .MREG(0), + .OPMODEREG(0), + .PREG(0), + .USE_MULT("MULTIPLY"), + .USE_SIMD("ONE48"), + .AMULTSEL("A"), + .BMULTSEL("B") + ) _TECHMAP_REPLACE_ ( + //Data path + .A({{3{A[26]}}, A}), + .B(B), + .C(48'b0), + .D(27'b0), + .P(P_48), + + .INMODE(5'b00000), + .ALUMODE(4'b0000), + .OPMODE(9'b00000101), + .CARRYINSEL(3'b000), + + .ACIN(30'b0), + .BCIN(18'b0), + .PCIN(48'b0), + .CARRYIN(1'b0) + ); + assign Y = P_48; +endmodule + diff --git a/resources/netlist/utils/kernel.js b/resources/netlist/utils/kernel.js new file mode 100644 index 0000000..0978b01 --- /dev/null +++ b/resources/netlist/utils/kernel.js @@ -0,0 +1,53 @@ + +var Module = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(Module) { + Module = Module || {}; + +var Module=typeof Module!="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}};read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||536870912;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="../resources/kernel/kernel.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["_"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["ea"];addOnInit(Module["asm"]["$"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var ASM_CONSTS={773592:()=>{if(ENVIRONMENT_IS_NODE){FS.mkdir("/hostcwd");FS.mount(NODEFS,{root:"."},"/hostcwd");FS.mkdir("/hostfs");FS.mount(NODEFS,{root:"/"},"/hostfs")}}};function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function __ZN3abc12Abc_RealMainEiPPc(){err("missing function: _ZN3abc12Abc_RealMainEiPPc");abort(-1)}function __ZN5Yosys6FfData10arst_to_srEv(){err("missing function: _ZN5Yosys6FfData10arst_to_srEv");abort(-1)}function __ZN5Yosys6FfData10unmap_srstEv(){err("missing function: _ZN5Yosys6FfData10unmap_srstEv");abort(-1)}function __ZN5Yosys6FfData11aload_to_srEv(){err("missing function: _ZN5Yosys6FfData11aload_to_srEv");abort(-1)}function __ZN5Yosys6FfData12add_dummy_ceEv(){err("missing function: _ZN5Yosys6FfData12add_dummy_ceEv");abort(-1)}function __ZN5Yosys6FfData12add_dummy_srEv(){err("missing function: _ZN5Yosys6FfData12add_dummy_srEv");abort(-1)}function __ZN5Yosys6FfData13add_dummy_clkEv(){err("missing function: _ZN5Yosys6FfData13add_dummy_clkEv");abort(-1)}function __ZN5Yosys6FfData13arst_to_aloadEv(){err("missing function: _ZN5Yosys6FfData13arst_to_aloadEv");abort(-1)}function __ZN5Yosys6FfData13flip_rst_bitsERKNS_7hashlib4poolIiNS1_8hash_opsIiEEEE(){err("missing function: _ZN5Yosys6FfData13flip_rst_bitsERKNS_7hashlib4poolIiNS1_8hash_opsIiEEEE");abort(-1)}function __ZN5Yosys6FfData14add_dummy_arstEv(){err("missing function: _ZN5Yosys6FfData14add_dummy_arstEv");abort(-1)}function __ZN5Yosys6FfData14add_dummy_srstEv(){err("missing function: _ZN5Yosys6FfData14add_dummy_srstEv");abort(-1)}function __ZN5Yosys6FfData15add_dummy_aloadEv(){err("missing function: _ZN5Yosys6FfData15add_dummy_aloadEv");abort(-1)}function __ZN5Yosys6FfData20convert_ce_over_srstEb(){err("missing function: _ZN5Yosys6FfData20convert_ce_over_srstEb");abort(-1)}function __ZN5Yosys6FfData4emitEv(){err("missing function: _ZN5Yosys6FfData4emitEv");abort(-1)}function __ZN5Yosys6FfData5sliceERKNSt3__26vectorIiNS1_9allocatorIiEEEE(){err("missing function: _ZN5Yosys6FfData5sliceERKNSt3__26vectorIiNS1_9allocatorIiEEEE");abort(-1)}function __ZN5Yosys6FfData6removeEv(){err("missing function: _ZN5Yosys6FfData6removeEv");abort(-1)}function __ZN5Yosys6FfData8unmap_ceEv(){err("missing function: _ZN5Yosys6FfData8unmap_ceEv");abort(-1)}function __ZN5Yosys6FfData9flip_bitsERKNS_7hashlib4poolIiNS1_8hash_opsIiEEEE(){err("missing function: _ZN5Yosys6FfData9flip_bitsERKNS_7hashlib4poolIiNS1_8hash_opsIiEEEE");abort(-1)}function __ZN5Yosys6FfDataC1EPNS_10FfInitValsEPNS_5RTLIL4CellE(){err("missing function: _ZN5Yosys6FfDataC1EPNS_10FfInitValsEPNS_5RTLIL4CellE");abort(-1)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ___call_sighandler(fp,sig){getWasmTableEntry(fp)(sig)}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return()=>{crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return()=>crypto_module["randomBytes"](1)[0]}catch(e){}}return()=>abort("randomDevice")}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},callbackOutput : false,innerOutput : true,message : '',callback : function (log, mode) {},init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}, +put_char:function(tty,val){ + if(val===null||val===10){ + let log = UTF8ArrayToString(tty.output, 0); + if(TTY.callbackOutput) { + TTY.callback(log, "message"); + } + if(TTY.innerOutput) { + out(log); + } + TTY.message = TTY.message + log + "\n"; + tty.output = [] + }else{ + if(val!=0)tty.output.push(val) + } +} +,flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{ +put_char:function(tty,val){ + if(val===null||val===10){ + let error = UTF8ArrayToString(tty.output, 0); + if(TTY.callbackOutput) { + TTY.callback(error, "error"); + } + if(TTY.innerOutput) { + err(error); + } + TTY.message = TTY.message + error + "\n"; + tty.output = [] + }else{ + if(val!=0)tty.output.push(val) + } +} +,flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var ERRNO_CODES={};var NODEFS={isWindows:false,staticInit:()=>{NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"],131072:flags["O_NOFOLLOW"]}},convertNodeCode:e=>{var code=e.code;return ERRNO_CODES[code]},mount:mount=>{return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:(parent,name,mode,dev)=>{if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(28)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:path=>{var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return stat.mode},realPath:node=>{var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:flags=>{flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;flags&=~65536;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(flags){throw new FS.ErrnoError(28)}return newFlags},node_ops:{getattr:node=>{var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:(node,attr)=>{var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},lookup:(parent,name)=>{var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:(parent,name,mode,dev)=>{var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return node},rename:(oldNode,newDir,newName)=>{var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}oldNode.name=newName},unlink:(parent,name)=>{var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},rmdir:(parent,name)=>{var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readdir:node=>{var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},symlink:(parent,newName,oldPath)=>{var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readlink:node=>{var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=nodePath.relative(nodePath.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;if(e.code==="UNKNOWN")throw new FS.ErrnoError(28);throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}},stream_ops:{open:stream=>{var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},close:stream=>{try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},read:(stream,buffer,offset,length,position)=>{if(length===0)return 0;try{return fs.readSync(stream.nfd,Buffer.from(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},write:(stream,buffer,offset,length,position)=>{try{return fs.writeSync(stream.nfd,Buffer.from(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},llseek:(stream,offset,whence)=>{var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap:(stream,length,position,prot,flags)=>{if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"NODEFS":NODEFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;tempI64=[Math.floor(stat.atime.getTime()/1e3)>>>0,(tempDouble=Math.floor(stat.atime.getTime()/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAP32[buf+64>>2]=0;tempI64=[Math.floor(stat.mtime.getTime()/1e3)>>>0,(tempDouble=Math.floor(stat.mtime.getTime()/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAP32[buf+80>>2]=0;tempI64=[Math.floor(stat.ctime.getTime()/1e3)>>>0,(tempDouble=Math.floor(stat.ctime.getTime()/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAP32[buf+96>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);if(!stream.getdents){stream.getdents=FS.readdir(stream.path)}var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~4352;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __emscripten_date_now(){return Date.now()}function readI53FromI64(ptr){return HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296}function __localtime_js(time,tmPtr){var date=new Date(readI53FromI64(time)*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function _tzset_impl(timezone,daylight,tzname){var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAPU32[tzname+4>>2]=summerNamePtr}else{HEAPU32[tzname>>2]=summerNamePtr;HEAPU32[tzname+4>>2]=winterNamePtr}}function __tzset_js(timezone,daylight,tzname){if(__tzset_js.called)return;__tzset_js.called=true;_tzset_impl(timezone,daylight,tzname)}function _abort(){abort("")}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readAsmConstArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;itype==="number");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();if(ENVIRONMENT_IS_NODE){requireNodeFS();NODEFS.staticInit()}ERRNO_CODES={"EPERM":63,"ENOENT":44,"ESRCH":71,"EINTR":27,"EIO":29,"ENXIO":60,"E2BIG":1,"ENOEXEC":45,"EBADF":8,"ECHILD":12,"EAGAIN":6,"EWOULDBLOCK":6,"ENOMEM":48,"EACCES":2,"EFAULT":21,"ENOTBLK":105,"EBUSY":10,"EEXIST":20,"EXDEV":75,"ENODEV":43,"ENOTDIR":54,"EISDIR":31,"EINVAL":28,"ENFILE":41,"EMFILE":33,"ENOTTY":59,"ETXTBSY":74,"EFBIG":22,"ENOSPC":51,"ESPIPE":70,"EROFS":69,"EMLINK":34,"EPIPE":64,"EDOM":18,"ERANGE":68,"ENOMSG":49,"EIDRM":24,"ECHRNG":106,"EL2NSYNC":156,"EL3HLT":107,"EL3RST":108,"ELNRNG":109,"EUNATCH":110,"ENOCSI":111,"EL2HLT":112,"EDEADLK":16,"ENOLCK":46,"EBADE":113,"EBADR":114,"EXFULL":115,"ENOANO":104,"EBADRQC":103,"EBADSLT":102,"EDEADLOCK":16,"EBFONT":101,"ENOSTR":100,"ENODATA":116,"ETIME":117,"ENOSR":118,"ENONET":119,"ENOPKG":120,"EREMOTE":121,"ENOLINK":47,"EADV":122,"ESRMNT":123,"ECOMM":124,"EPROTO":65,"EMULTIHOP":36,"EDOTDOT":125,"EBADMSG":9,"ENOTUNIQ":126,"EBADFD":127,"EREMCHG":128,"ELIBACC":129,"ELIBBAD":130,"ELIBSCN":131,"ELIBMAX":132,"ELIBEXEC":133,"ENOSYS":52,"ENOTEMPTY":55,"ENAMETOOLONG":37,"ELOOP":32,"EOPNOTSUPP":138,"EPFNOSUPPORT":139,"ECONNRESET":15,"ENOBUFS":42,"EAFNOSUPPORT":5,"EPROTOTYPE":67,"ENOTSOCK":57,"ENOPROTOOPT":50,"ESHUTDOWN":140,"ECONNREFUSED":14,"EADDRINUSE":3,"ECONNABORTED":13,"ENETUNREACH":40,"ENETDOWN":38,"ETIMEDOUT":73,"EHOSTDOWN":142,"EHOSTUNREACH":23,"EINPROGRESS":26,"EALREADY":7,"EDESTADDRREQ":17,"EMSGSIZE":35,"EPROTONOSUPPORT":66,"ESOCKTNOSUPPORT":137,"EADDRNOTAVAIL":4,"ENETRESET":39,"EISCONN":30,"ENOTCONN":53,"ETOOMANYREFS":141,"EUSERS":136,"EDQUOT":19,"ESTALE":72,"ENOTSUP":138,"ENOMEDIUM":148,"EILSEQ":25,"EOVERFLOW":61,"ECANCELED":11,"ENOTRECOVERABLE":56,"EOWNERDEAD":62,"ESTRPIPE":135};var asmLibraryArg={"D":__ZN3abc12Abc_RealMainEiPPc,"r":__ZN5Yosys6FfData10arst_to_srEv,"i":__ZN5Yosys6FfData10unmap_srstEv,"s":__ZN5Yosys6FfData11aload_to_srEv,"k":__ZN5Yosys6FfData12add_dummy_ceEv,"z":__ZN5Yosys6FfData12add_dummy_srEv,"m":__ZN5Yosys6FfData13add_dummy_clkEv,"B":__ZN5Yosys6FfData13arst_to_aloadEv,"y":__ZN5Yosys6FfData13flip_rst_bitsERKNS_7hashlib4poolIiNS1_8hash_opsIiEEEE,"p":__ZN5Yosys6FfData14add_dummy_arstEv,"q":__ZN5Yosys6FfData14add_dummy_srstEv,"o":__ZN5Yosys6FfData15add_dummy_aloadEv,"A":__ZN5Yosys6FfData20convert_ce_over_srstEb,"d":__ZN5Yosys6FfData4emitEv,"j":__ZN5Yosys6FfData5sliceERKNSt3__26vectorIiNS1_9allocatorIiEEEE,"h":__ZN5Yosys6FfData6removeEv,"f":__ZN5Yosys6FfData8unmap_ceEv,"C":__ZN5Yosys6FfData9flip_bitsERKNS_7hashlib4poolIiNS1_8hash_opsIiEEEE,"e":__ZN5Yosys6FfDataC1EPNS_10FfInitValsEPNS_5RTLIL4CellE,"c":___assert_fail,"K":___call_sighandler,"b":___cxa_allocate_exception,"a":___cxa_throw,"X":___syscall_chdir,"Y":___syscall_faccessat,"v":___syscall_fcntl64,"J":___syscall_getdents64,"T":___syscall_ioctl,"M":___syscall_lstat64,"L":___syscall_mkdirat,"N":___syscall_newfstatat,"w":___syscall_openat,"t":___syscall_rmdir,"O":___syscall_stat64,"I":___syscall_unlinkat,"x":__emscripten_date_now,"U":__localtime_js,"V":__tzset_js,"g":_abort,"Z":_emscripten_asm_const_int,"W":_emscripten_memcpy_big,"H":_emscripten_resize_heap,"Q":_environ_get,"R":_environ_sizes_get,"l":_exit,"n":_fd_close,"P":_fd_fdstat_get,"S":_fd_read,"F":_fd_seek,"u":_fd_write,"E":_strftime,"G":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["aa"]).apply(null,arguments)};var _run=Module["_run"]=function(){return(_run=Module["_run"]=Module["asm"]["ba"]).apply(null,arguments)};var _errmsg=Module["_errmsg"]=function(){return(_errmsg=Module["_errmsg"]=Module["asm"]["ca"]).apply(null,arguments)};var _prompt=Module["_prompt"]=function(){return(_prompt=Module["_prompt"]=Module["asm"]["da"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["fa"]).apply(null,arguments)};var _memset=Module["_memset"]=function(){return(_memset=Module["_memset"]=Module["asm"]["ga"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ha"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["ia"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["ja"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ka"]).apply(null,arguments)};var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=function(){return(___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=Module["asm"]["la"]).apply(null,arguments)};Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["FS"]=FS;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["TTY"]=TTY;Module["NODEFS"]=NODEFS;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];args=args||[];args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv>>2;args.forEach(arg=>{HEAP32[argv_ptr++]=allocateUTF8OnStack(arg)});HEAP32[argv_ptr]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); + + + return Module.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = Module; +else if (typeof define === 'function' && define['amd']) + define([], function() { return Module; }); +else if (typeof exports === 'object') + exports["Module"] = Module; diff --git a/resources/netlist/utils/vrfs.js b/resources/netlist/utils/vrfs.js new file mode 100644 index 0000000..73cb1de --- /dev/null +++ b/resources/netlist/utils/vrfs.js @@ -0,0 +1,239 @@ +const fspath = require('path'); +const fs = require('fs'); + +const os = require('os'); +const exec = require("child_process").execSync; + +class Vrfs { + constructor(module) { + this.module = module; + } + + /** + * @descriptionCn 显示指定文件夹下的所有子目录, 并返回 + * @param {*} path 所要显示的文件夹的绝对路径 (省略对应root的\) + * @returns 返回所有子目录 + */ + readdir(path) { + let lists = this.module.FS.readdir(`/${path}`); + console.log(lists); + return lists; + } + + /** + * @descriptionCn 将本地路径挂载到虚拟文件系统下 + * @param {*} local 需要挂载的本地路径 + * @param {*} virtual 所要挂载到的虚拟文件系统的绝对路径 (省略对应root的/) + */ + mount(local, virtual) { + this.mkdir(virtual); + this.module.FS.mount(this.module.NODEFS, { root: local }, `/${virtual}`); + } + + /** + * @descriptionCn 将当前系统根目录进行挂在到虚拟文件系统下 + */ + diskMount() { + var aDrives = []; + var result = null; + var stdout = null; + switch (os.platform().toLowerCase()) { + case 'win32': + result = exec('wmic logicaldisk get Caption,FreeSpace,Size,VolumeSerialNumber,Description /format:list'); + stdout = result.toString(); + var aLines = stdout.split('\r\r\n'); + var bNew = false; + var sCaption = '', sDescription = '', sFreeSpace = '', sSize = '', sVolume = ''; + // For each line get information + // Format is Key=Value + for(var i = 0; i < aLines.length; i++) { + if (aLines[i] !== '') { + var aTokens = aLines[i].split('='); + switch (aTokens[0]) { + case 'Caption': + sCaption = aTokens[1]; + bNew = true; + break; + case 'Description': + sDescription = aTokens[1]; + break; + case 'FreeSpace': + sFreeSpace = aTokens[1]; + break; + case 'Size': + sSize = aTokens[1]; + break; + case 'VolumeSerialNumber': + sVolume = aTokens[1]; + break; + } + + } else { + // Empty line + // If we get an empty line and bNew is true then we have retrieved + // all information for one drive, add to array and reset variables + if (bNew) { + sSize = parseFloat(sSize); + if (isNaN(sSize)) { + sSize = 0; + } + sFreeSpace = parseFloat(sFreeSpace); + if (isNaN(sFreeSpace)) { + sFreeSpace = 0; + } + + var sUsed = (sSize - sFreeSpace); + var sPercent = '0%'; + if (sSize !== '' && parseFloat(sSize) > 0) { + sPercent = Math.round((parseFloat(sUsed) / parseFloat(sSize)) * 100) + '%'; + } + aDrives[aDrives.length] = { + filesystem: sDescription, + blocks: sSize, + used: sUsed, + available: sFreeSpace, + capacity: sPercent, + mounted: sCaption + }; + bNew = false; + sCaption = ''; + sDescription = ''; + sFreeSpace = ''; + sSize = ''; + sVolume = ''; + } + + } + } + for (var i = 0; i < aDrives.length; i++) { + let diskName = aDrives[i].mounted.toLowerCase(); + console.log(diskName); + this.mount(diskName, diskName); + } + break; + default: + this.mount('/', 'host'); + break; + } + } + + /** + * @state finish-test + * @descriptionCn 虚拟文件系统下创建文件夹 + * @param {*} path 虚拟文件系统内部的绝对路径 (省略对应root的\) + * 可越级创建,会自动生成父级文件夹 + */ + mkdir(path) { + if (this.module.FS.findObject(`/${path}`) !== null) { + return true; + } else { + let dirname = fspath.dirname(path); + if (dirname === path) { + this.module.FS.mkdir(`/${path}`); + return true; + } + if (this.mkdir(dirname)) { + this.module.FS.mkdir(`/${path}`); + } + return true; + } + } + + /** + * @descriptionCn 删除虚拟文件系统下的文件夹 + * @param {*} path 虚拟文件系统内部的绝对路径 (省略对应root的\) + * 可越级创建,会自动删除父级文件夹 + */ + rmdir(path) { + let files = []; + if (this.module.FS.findObject(`/${path}`) !== null) { + files = this.module.FS.readdir(`/${path}`); + for (let index = 2; index < files.length; index++) { + const element = files[index]; + let curPath = fspath.join(`/${path}`, element).replace(/\\/g, "\/"); + let value = this.module.FS.isDir(this.module.FS.stat(curPath).mode); + if (value) { + this.rmdir(curPath); + } else { + this.module.FS.unlink(curPath); + } + } + this.module.FS.rmdir(`/${path}`); //清除文件夹 + } + } + + /** + * @state finish-test + * @descriptionCn 删除虚拟文件系统下的指定文件 + * @param {*} path 虚拟文件系统内部的绝对路径 (省略对应root的\) + */ + rmfile(path) { + this.module.FS.unlink(`/${path}`); + } + + /** + * @state finish-test + * @descriptionCn 将本地路径下的文件写入虚拟文件系统 + * @param {*} src 文件的本地的绝对路径 + * @param {*} des 虚拟文件系统内部指定地址 (省略对应root的\) + * 可越级创建,会自动生成父级文件夹 + */ + writeFileFormPath(src, des) { + let desDir = fspath.dirname(des); + let content = fs.readFileSync(src); + if (this.module.FS.findObject(`/${desDir}`) !== null) { + this.module.FS.writeFile(`/${des}`, content, { encoding: 'utf8' }); + } else { + this.mkdir(`/${desDir}`); + this.module.FS.writeFile(`/${des}`, content, { encoding: 'utf8' }); + } + } + + /** + * @state finish-test + * @descriptionCn 将文件内容写入虚拟文件系统 + * @param {*} text 要写入的文件内容 + * @param {*} path 虚拟文件系统内部指定地址 (省略对应root的\) + * 可越级创建,会自动生成父级文件夹 + */ + writeFileFormText(text, path) { + let pathDir = fspath.dirname(path); + if (this.module.FS.findObject(`/${pathDir}`) !== null) { + this.module.FS.writeFile(`/${path}`, text, { encoding: 'utf8' }); + } else { + this.mkdir(`/${pathDir}`); + this.module.FS.writeFile(`/${path}`, text, { encoding: 'utf8' }); + } + } + + /** + * @state finish-test + * @descriptionCn 从虚拟文件系统中读出文件到本地 + * @param {*} src 虚拟文件系统内部指定地址 (省略对应root的\) + * @param {*} des 要写到的本地文件的绝对路径 + */ + readFileToPath(src, des) { + if (this.module.FS.findObject(`/${src}`) !== null) { + let content = this.module.FS.readFile(`/${src}`, { encoding: 'utf8' }); + fs.writeFileSync(des, content); + } else { + console.log(`ERROR: The ${src} is not at this virtual system.`); + } + } + + /** + * @state finish-test + * @descriptionCn 从虚拟文件系统中读出文件内容 + * @param {*} path 虚拟文件系统内部指定地址 (省略对应root的\) + * @returns 读出文件的内容 + */ + readFileToText(path) { + if (this.module.FS.findObject(`/${path}`) !== null) { + let content = this.module.FS.readFile(`/${path}`, { encoding: 'utf8' }); + return content; + } else { + console.log(`ERROR: The ${path} is not at this virtual system.`); + } + } +} +module.exports = Vrfs; \ No newline at end of file diff --git a/resources/netlist/view/netlist_view.js b/resources/netlist/view/netlist_view.js new file mode 100644 index 0000000..3bdba60 --- /dev/null +++ b/resources/netlist/view/netlist_view.js @@ -0,0 +1,36757 @@ +(function (f) { if (typeof exports === "object" && typeof module !== "undefined") { module.exports = f() } else if (typeof define === "function" && define.amd) { define([], f) } else { var g; if (typeof window !== "undefined") { g = window } else if (typeof global !== "undefined") { g = global } else if (typeof self !== "undefined") { g = self } else { g = this } g.netlistsvg = f() } })(function () { + var define, module, exports; return (function () { function r(e, n, t) { function o(i, f) { if (!n[i]) { if (!e[i]) { var c = "function" == typeof require && require; if (!f && c) return c(i, !0); if (u) return u(i, !0); var a = new Error("Cannot find module '" + i + "'"); throw a.code = "MODULE_NOT_FOUND", a } var p = n[i] = { exports: {} }; e[i][0].call(p.exports, function (r) { var n = e[i][1][r]; return o(n || r) }, p, p.exports, r, e, n, t) } return n[i].exports } for (var u = "function" == typeof require && require, i = 0; i < t.length; i++)o(t[i]); return o } return r })()({ + 1: [function (require, module, exports) { + 'use strict' + + exports.byteLength = byteLength + exports.toByteArray = toByteArray + exports.fromByteArray = fromByteArray + + var lookup = [] + var revLookup = [] + var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i + } + + // Support decoding URL-safe base64 strings, as Node.js does. + // See: https://en.wikipedia.org/wiki/Base64#URL_applications + revLookup['-'.charCodeAt(0)] = 62 + revLookup['_'.charCodeAt(0)] = 63 + + function getLens(b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] + } + + // base64 is 4/3 + up to two characters of the original data + function byteLength(b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen + } + + function _byteLength(b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen + } + + function toByteArray(b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr + } + + function tripletToBase64(num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] + } + + function encodeChunk(uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') + } + + function fromByteArray(uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') + } + + }, {}], 2: [function (require, module, exports) { + + }, {}], 3: [function (require, module, exports) { + (function (Buffer) { + (function () { + /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + /* eslint-disable no-proto */ + + 'use strict' + + var base64 = require('base64-js'); + var ieee754 = require('ieee754'); + + exports.Buffer = Buffer + exports.SlowBuffer = SlowBuffer + exports.INSPECT_MAX_BYTES = 50 + + var K_MAX_LENGTH = 0x7fffffff + exports.kMaxLength = K_MAX_LENGTH + + /** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ + Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + + if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) + } + + function typedArraySupport() { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } + return arr.foo() === 42 + } catch (e) { + return false + } + } + + Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } + }) + + Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } + }) + + function createBuffer(length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + buf.__proto__ = Buffer.prototype + return buf + } + + /** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + function Buffer(arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) + } + + // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 + if (typeof Symbol !== 'undefined' && Symbol.species != null && + Buffer[Symbol.species] === Buffer) { + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true, + enumerable: false, + writable: false + }) + } + + Buffer.poolSize = 8192 // not used by this implementation + + function from(value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value) + } + + if (value == null) { + throw TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + /** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) + } + + // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: + // https://github.com/feross/buffer/pull/148 + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array + + function assertSize(size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + } + + function alloc(size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) + } + + /** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) + } + + function allocUnsafe(size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) + } + + /** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) + } + /** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) + } + + function fromString(string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf + } + + function fromArrayLike(array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf + } + + function fromArrayBuffer(array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + buf.__proto__ = Buffer.prototype + return buf + } + + function fromObject(obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } + } + + function checked(length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 + } + + function SlowBuffer(length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) + } + + Buffer.isBuffer = function isBuffer(b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false + } + + Buffer.compare = function compare(a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + } + + Buffer.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } + } + + Buffer.concat = function concat(list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf) + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer + } + + function byteLength(string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (; ;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } + } + Buffer.byteLength = byteLength + + function slowToString(encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } + } + + // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) + // to detect a Buffer instance. It's not possible to use `instanceof Buffer` + // reliably in a browserify context because there could be multiple different + // copies of the 'buffer' package in use. This method works even for Buffer + // instances that were created from another copy of the `buffer` package. + // See: https://github.com/feross/buffer/issues/154 + Buffer.prototype._isBuffer = true + + function swap(b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i + } + + Buffer.prototype.swap16 = function swap16() { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this + } + + Buffer.prototype.swap32 = function swap32() { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this + } + + Buffer.prototype.swap64 = function swap64() { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this + } + + Buffer.prototype.toString = function toString() { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) + } + + Buffer.prototype.toLocaleString = Buffer.prototype.toString + + Buffer.prototype.equals = function equals(b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 + } + + Buffer.prototype.inspect = function inspect() { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' + } + + Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + } + + // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, + // OR the last index of `val` in `buffer` at offset <= `byteOffset`. + // + // Arguments: + // - buffer - a Buffer to search + // - val - a string, Buffer, or number + // - byteOffset - an index into `buffer`; will be clamped to an int32 + // - encoding - an optional encoding, relevant is val is a string + // - dir - true for indexOf, false for lastIndexOf + function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') + } + + function arrayIndexOf(arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read(buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 + } + + Buffer.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 + } + + Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) + } + + Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) + } + + function hexWrite(buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i + } + + function utf8Write(buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + } + + function asciiWrite(buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) + } + + function latin1Write(buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) + } + + function base64Write(buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) + } + + function ucs2Write(buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + } + + Buffer.prototype.write = function write(string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (; ;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } + } + + Buffer.prototype.toJSON = function toJSON() { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } + } + + function base64Slice(buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } + } + + function utf8Slice(buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) + } + + // Based on http://stackoverflow.com/a/22747272/680742, the browser with + // the lowest limit is Chrome, with 0x10000 args. + // We go 1 magnitude less, for safety + var MAX_ARGUMENTS_LENGTH = 0x1000 + + function decodeCodePointsArray(codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res + } + + function asciiSlice(buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret + } + + function latin1Slice(buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret + } + + function hexSlice(buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += toHex(buf[i]) + } + return out + } + + function utf16leSlice(buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res + } + + Buffer.prototype.slice = function slice(start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + newBuf.__proto__ = Buffer.prototype + return newBuf + } + + /* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + function checkOffset(offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') + } + + Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val + } + + Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val + } + + Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] + } + + Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) + } + + Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] + } + + Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) + } + + Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) + } + + Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val + } + + Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val + } + + Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) + } + + Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val + } + + Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val + } + + Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) + } + + Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) + } + + Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) + } + + Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) + } + + Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) + } + + Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) + } + + function checkInt(buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') + } + + Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 + } + + Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 + } + + Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 + } + + Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 + } + + Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 + } + + Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 + } + + Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 + } + + Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 + } + + Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 + } + + Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 + } + + function checkIEEE754(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') + } + + function writeFloat(buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 + } + + Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) + } + + Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) + } + + function writeDouble(buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 + } + + Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) + } + + Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) + } + + // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + Buffer.prototype.copy = function copy(target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len + } + + // Usage: + // buffer.fill(number[, offset[, end]]) + // buffer.fill(buffer[, offset[, end]]) + // buffer.fill(string[, offset[, end]][, encoding]) + Buffer.prototype.fill = function fill(val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this + } + + // HELPER FUNCTIONS + // ================ + + var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + + function base64clean(str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str + } + + function toHex(n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) + } + + function utf8ToBytes(string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes + } + + function asciiToBytes(str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray + } + + function utf16leToBytes(str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray + } + + function base64ToBytes(str) { + return base64.toByteArray(base64clean(str)) + } + + function blitBuffer(src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i + } + + // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass + // the `instanceof` check but they should be treated as of that type. + // See: https://github.com/feross/buffer/issues/166 + function isInstance(obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) + } + function numberIsNaN(obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare + } + + }).call(this) + }).call(this, require("buffer").Buffer) + }, { "base64-js": 1, "buffer": 3, "ieee754": 5 }], 4: [function (require, module, exports) { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + 'use strict'; + + var R = typeof Reflect === 'object' ? Reflect : null + var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + + var ReflectOwnKeys + if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys + } else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; + } else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; + } + + function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); + } + + var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; + } + + function EventEmitter() { + EventEmitter.init.call(this); + } + module.exports = EventEmitter; + module.exports.once = once; + + // Backwards-compat with node 0.10.x + EventEmitter.EventEmitter = EventEmitter; + + EventEmitter.prototype._events = undefined; + EventEmitter.prototype._eventsCount = 0; + EventEmitter.prototype._maxListeners = undefined; + + // By default EventEmitters will print a warning if more than 10 listeners are + // added to it. This is a useful default which helps finding memory leaks. + var defaultMaxListeners = 10; + + function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } + } + + Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function () { + return defaultMaxListeners; + }, + set: function (arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } + }); + + EventEmitter.init = function () { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; + }; + + // Obviously not all Emitters should be limited to 10. This function allows + // that to be increased. Set to zero for unlimited. + EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; + }; + + function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; + } + + EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); + }; + + EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; + }; + + function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; + } + + EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); + }; + + EventEmitter.prototype.on = EventEmitter.prototype.addListener; + + EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + + function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } + } + + function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; + } + + EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; + }; + + EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + + // Emits a 'removeListener' event if and only if the listener was removed. + EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + + EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + + EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + + function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); + } + + EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); + }; + + EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); + }; + + EventEmitter.listenerCount = function (emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } + }; + + EventEmitter.prototype.listenerCount = listenerCount; + function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; + } + + EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; + }; + + function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; + } + + function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); + } + + function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; + } + + function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); + } + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); + }; + + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); + } + + function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } + } + + function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } + } + + }, {}], 5: [function (require, module, exports) { + /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ + exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) { } + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) { } + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) + } + + exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) { } + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) { } + + buffer[offset + i - d] |= s * 128 + } + + }, {}], 6: [function (require, module, exports) { + if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; + } else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () { } + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } + } + + }, {}], 7: [function (require, module, exports) { + // shim for using process in browser + var process = module.exports = {}; + + // cached from whatever global is present so that test runners that stub it + // don't break things. But we need to wrap it in a try catch in case it is + // wrapped in strict mode code which doesn't define any globals. It's inside a + // function because try/catches deoptimize in certain engines. + + var cachedSetTimeout; + var cachedClearTimeout; + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); + } + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + }()) + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + + } + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + + } + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while (len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() { } + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + + process.listeners = function (name) { return [] } + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function () { return 0; }; + + }, {}], 8: [function (require, module, exports) { + /*! safe-buffer. MIT License. Feross Aboukhadijeh */ + /* eslint-disable node/no-deprecated-api */ + var buffer = require('buffer') + var Buffer = buffer.Buffer + + // alternative to using Object.keys for old browsers + function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key] + } + } + if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer + } else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer + } + + function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) + } + + SafeBuffer.prototype = Object.create(Buffer.prototype) + + // Copy static methods from Buffer + copyProps(Buffer, SafeBuffer) + + SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) + } + + SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf + } + + SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) + } + + SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) + } + + }, { "buffer": 3 }], 9: [function (require, module, exports) { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + module.exports = Stream; + + var EE = require('events').EventEmitter; + var inherits = require('inherits'); + + inherits(Stream, EE); + Stream.Readable = require('readable-stream/lib/_stream_readable.js'); + Stream.Writable = require('readable-stream/lib/_stream_writable.js'); + Stream.Duplex = require('readable-stream/lib/_stream_duplex.js'); + Stream.Transform = require('readable-stream/lib/_stream_transform.js'); + Stream.PassThrough = require('readable-stream/lib/_stream_passthrough.js'); + Stream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js') + Stream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js') + + // Backwards-compat with node 0.4.x + Stream.Stream = Stream; + + + + // old-style streams. Note that the pipe method (the only relevant + // part of this class) is overridden in the Readable class. + + function Stream() { + EE.call(this); + } + + Stream.prototype.pipe = function (dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + + source.on('data', ondata); + + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + + dest.end(); + } + + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + + source.removeListener('end', onend); + source.removeListener('close', onclose); + + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + + dest.removeListener('close', cleanup); + } + + source.on('end', cleanup); + source.on('close', cleanup); + + dest.on('close', cleanup); + + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; + }; + + }, { "events": 4, "inherits": 6, "readable-stream/lib/_stream_duplex.js": 11, "readable-stream/lib/_stream_passthrough.js": 12, "readable-stream/lib/_stream_readable.js": 13, "readable-stream/lib/_stream_transform.js": 14, "readable-stream/lib/_stream_writable.js": 15, "readable-stream/lib/internal/streams/end-of-stream.js": 19, "readable-stream/lib/internal/streams/pipeline.js": 21 }], 10: [function (require, module, exports) { + 'use strict'; + + function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } + + var codes = {}; + + function createErrorType(code, message, Base) { + if (!Base) { + Base = Error; + } + + function getMessage(arg1, arg2, arg3) { + if (typeof message === 'string') { + return message; + } else { + return message(arg1, arg2, arg3); + } + } + + var NodeError = + /*#__PURE__*/ + function (_Base) { + _inheritsLoose(NodeError, _Base); + + function NodeError(arg1, arg2, arg3) { + return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; + } + + return NodeError; + }(Base); + + NodeError.prototype.name = Base.name; + NodeError.prototype.code = code; + codes[code] = NodeError; + } // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js + + + function oneOf(expected, thing) { + if (Array.isArray(expected)) { + var len = expected.length; + expected = expected.map(function (i) { + return String(i); + }); + + if (len > 2) { + return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; + } else if (len === 2) { + return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); + } else { + return "of ".concat(thing, " ").concat(expected[0]); + } + } else { + return "of ".concat(thing, " ").concat(String(expected)); + } + } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + + + function startsWith(str, search, pos) { + return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith + + + function endsWith(str, search, this_len) { + if (this_len === undefined || this_len > str.length) { + this_len = str.length; + } + + return str.substring(this_len - search.length, this_len) === search; + } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes + + + function includes(str, search, start) { + if (typeof start !== 'number') { + start = 0; + } + + if (start + search.length > str.length) { + return false; + } else { + return str.indexOf(search, start) !== -1; + } + } + + createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { + return 'The value "' + value + '" is invalid for option "' + name + '"'; + }, TypeError); + createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { + // determiner: 'must be' or 'must not be' + var determiner; + + if (typeof expected === 'string' && startsWith(expected, 'not ')) { + determiner = 'must not be'; + expected = expected.replace(/^not /, ''); + } else { + determiner = 'must be'; + } + + var msg; + + if (endsWith(name, ' argument')) { + // For cases like 'first argument' + msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } else { + var type = includes(name, '.') ? 'property' : 'argument'; + msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } + + msg += ". Received type ".concat(typeof actual); + return msg; + }, TypeError); + createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); + createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { + return 'The ' + name + ' method is not implemented'; + }); + createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); + createErrorType('ERR_STREAM_DESTROYED', function (name) { + return 'Cannot call ' + name + ' after a stream was destroyed'; + }); + createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); + createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); + createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); + createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); + createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { + return 'Unknown encoding: ' + arg; + }, TypeError); + createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); + module.exports.codes = codes; + + }, {}], 11: [function (require, module, exports) { + (function (process) { + (function () { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + // a duplex stream is just a stream that is both readable and writable. + // Since JS doesn't have multiple prototypal inheritance, this class + // prototypally inherits from Readable, and then parasitically from + // Writable. + 'use strict'; + /**/ + + var objectKeys = Object.keys || function (obj) { + var keys = []; + + for (var key in obj) { + keys.push(key); + } + + return keys; + }; + /**/ + + + module.exports = Duplex; + + var Readable = require('./_stream_readable'); + + var Writable = require('./_stream_writable'); + + require('inherits')(Duplex, Readable); + + { + // Allow the keys array to be GC'ed. + var keys = objectKeys(Writable.prototype); + + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } + } + + function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + this.allowHalfOpen = true; + + if (options) { + if (options.readable === false) this.readable = false; + if (options.writable === false) this.writable = false; + + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once('end', onend); + } + } + } + + Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } + }); + Object.defineProperty(Duplex.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } + }); + Object.defineProperty(Duplex.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } + }); // the no-half-open enforcer + + function onend() { + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; // no more data can be written. + // But allow more writes to happen in this tick. + + process.nextTick(onEndNT, this); + } + + function onEndNT(self) { + self.end(); + } + + Object.defineProperty(Duplex.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } + }); + }).call(this) + }).call(this, require('_process')) + }, { "./_stream_readable": 13, "./_stream_writable": 15, "_process": 7, "inherits": 6 }], 12: [function (require, module, exports) { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + // a passthrough stream. + // basically just the most minimal sort of Transform stream. + // Every written chunk gets output as-is. + 'use strict'; + + module.exports = PassThrough; + + var Transform = require('./_stream_transform'); + + require('inherits')(PassThrough, Transform); + + function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); + } + + PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); + }; + }, { "./_stream_transform": 14, "inherits": 6 }], 13: [function (require, module, exports) { + (function (process, global) { + (function () { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + 'use strict'; + + module.exports = Readable; + /**/ + + var Duplex; + /**/ + + Readable.ReadableState = ReadableState; + /**/ + + var EE = require('events').EventEmitter; + + var EElistenerCount = function EElistenerCount(emitter, type) { + return emitter.listeners(type).length; + }; + /**/ + + /**/ + + + var Stream = require('./internal/streams/stream'); + /**/ + + + var Buffer = require('buffer').Buffer; + + var OurUint8Array = global.Uint8Array || function () { }; + + function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); + } + + function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; + } + /**/ + + + var debugUtil = require('util'); + + var debug; + + if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); + } else { + debug = function debug() { }; + } + /**/ + + + var BufferList = require('./internal/streams/buffer_list'); + + var destroyImpl = require('./internal/streams/destroy'); + + var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; + + var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. + + + var StringDecoder; + var createReadableStreamAsyncIterator; + var from; + + require('inherits')(Readable, Stream); + + var errorOrDestroy = destroyImpl.errorOrDestroy; + var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + + function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn); else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn); else emitter._events[event] = [fn, emitter._events[event]]; + } + + function ReadableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + + this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + + this.sync = true; // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + this.paused = true; // Should close be emitted on destroy. Defaults to true. + + this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') + + this.autoDestroy = !!options.autoDestroy; // has it been destroyed + + this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s + + this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled + + this.readingMore = false; + this.decoder = null; + this.encoding = null; + + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } + } + + function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside + // the ReadableState constructor, at least with V8 6.5 + + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); // legacy + + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); + } + + Object.defineProperty(Readable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined) { + return false; + } + + return this._readableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._readableState.destroyed = value; + } + }); + Readable.prototype.destroy = destroyImpl.destroy; + Readable.prototype._undestroy = destroyImpl.undestroy; + + Readable.prototype._destroy = function (err, cb) { + cb(err); + }; // Manually shove something into the read() buffer. + // This returns true if the highWaterMark has not been hit yet, + // similar to how Writable.write() returns true if you should + // write() some more. + + + Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); + }; // Unshift should *always* be something directly out of read() + + + Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); + }; + + function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug('readableAddChunk', chunk); + var state = stream._readableState; + + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + + if (er) { + errorOrDestroy(stream, er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT()); else addChunk(stream, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; + } else { + state.reading = false; + + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false); else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + maybeReadMore(stream, state); + } + } // We can push more data if we are below the highWaterMark. + // Also, if we have no data yet, we can stand some more bytes. + // This is to work around cases where hwm=0, such as the repl. + + + return !state.ended && (state.length < state.highWaterMark || state.length === 0); + } + + function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; + stream.emit('data', chunk); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk); else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + + maybeReadMore(stream, state); + } + + function chunkInvalid(state, chunk) { + var er; + + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); + } + + return er; + } + + Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; + }; // backwards compatibility. + + + Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 + + this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: + + var p = this._readableState.buffer.head; + var content = ''; + + while (p !== null) { + content += decoder.write(p.data); + p = p.next; + } + + this._readableState.buffer.clear(); + + if (content !== '') this._readableState.buffer.push(content); + this._readableState.length = content.length; + return this; + }; // Don't raise the hwm > 1GB + + + var MAX_HWM = 0x40000000; + + function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + + return n; + } // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + + function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length; else return state.length; + } // If we're asking for more than the current hwm, then raise the hwm. + + + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; // Don't have enough + + if (!state.ended) { + state.needReadable = true; + return 0; + } + + return state.length; + } // you can override either this method, or the async _read(n) below. + + + Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this); else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. + + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + // if we need a readable event, then we need to do some reading. + + + var doRead = state.needReadable; + debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some + + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + + + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; // if the length is currently zero, then we *need* a readable event. + + if (state.length === 0) state.needReadable = true; // call internal read method + + this._read(state.highWaterMark); + + state.sync = false; // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state); else ret = null; + + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + state.awaitDrain = 0; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. + + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + return ret; + }; + + function onEofChunk(stream, state) { + debug('onEofChunk'); + if (state.ended) return; + + if (state.decoder) { + var chunk = state.decoder.end(); + + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + + state.ended = true; + + if (state.sync) { + // if we are sync, wait until next tick to emit the data. + // Otherwise we risk emitting data in the flow() + // the readable code triggers during a read() call + emitReadable(stream); + } else { + // emit 'readable' now to make sure it gets picked up. + state.needReadable = false; + + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } + } // Don't emit readable right away in sync mode, because this can trigger + // another read() call => stack overflow. This way, it might trigger + // a nextTick recursion warning, but that's not so bad. + + + function emitReadable(stream) { + var state = stream._readableState; + debug('emitReadable', state.needReadable, state.emittedReadable); + state.needReadable = false; + + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + process.nextTick(emitReadable_, stream); + } + } + + function emitReadable_(stream) { + var state = stream._readableState; + debug('emitReadable_', state.destroyed, state.length, state.ended); + + if (!state.destroyed && (state.length || state.ended)) { + stream.emit('readable'); + state.emittedReadable = false; + } // The stream needs another readable event if + // 1. It is not flowing, as the flow mechanism will take + // care of it. + // 2. It is not ended. + // 3. It is below the highWaterMark, so we can schedule + // another readable later. + + + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); + } // at this point, the user has presumably seen the 'readable' event, + // and called read() to consume some data. that may have triggered + // in turn another _read(n) call, in which case reading = true if + // it's in progress. + // However, if we're not ended, or reading, and the length < hwm, + // then go ahead and try to read some more preemptively. + + + function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(maybeReadMore_, stream, state); + } + } + + function maybeReadMore_(stream, state) { + // Attempt to read more data if we should. + // + // The conditions for reading more data are (one of): + // - Not enough data buffered (state.length < state.highWaterMark). The loop + // is responsible for filling the buffer with enough data if such data + // is available. If highWaterMark is 0 and we are not in the flowing mode + // we should _not_ attempt to buffer any extra data. We'll get more data + // when the stream consumer calls read() instead. + // - No data in the buffer, and the stream is in flowing mode. In this mode + // the loop below is responsible for ensuring read() is called. Failing to + // call read here would abort the flow and there's no other mechanism for + // continuing the flow if the stream consumer has just subscribed to the + // 'data' event. + // + // In addition to the above conditions to keep reading data, the following + // conditions prevent the data from being read: + // - The stream has ended (state.ended). + // - There is already a pending 'read' operation (state.reading). This is a + // case where the the stream has called the implementation defined _read() + // method, but they are processing the call asynchronously and have _not_ + // called push() with new data. In this case we skip performing more + // read()s. The execution ends in this method again after the _read() ends + // up calling push() with more data. + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) // didn't get any data, stop spinning. + break; + } + + state.readingMore = false; + } // abstract method. to be overridden in specific implementation classes. + // call cb(er, data) where data is <= n in length. + // for virtual (non-string, non-buffer) streams, "length" is somewhat + // arbitrary, and perhaps not very meaningful. + + + Readable.prototype._read = function (n) { + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); + }; + + Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + + case 1: + state.pipes = [state.pipes, dest]; + break; + + default: + state.pipes.push(dest); + break; + } + + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) process.nextTick(endFn); else src.once('end', endFn); + dest.on('unpipe', onunpipe); + + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + + + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + + function cleanup() { + debug('cleanup'); // cleanup event handlers once the pipe is broken + + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + src.on('data', ondata); + + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + debug('dest.write', ret); + + if (ret === false) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + } + + src.pause(); + } + } // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + + + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); + } // Make sure our error handler is attached before userland ones. + + + prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. + + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + + dest.once('close', onclose); + + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } // tell the dest that it's being piped to + + + dest.emit('pipe', src); // start the flow if it hasn't been started already. + + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; + }; + + function pipeOnDrain(src) { + return function pipeOnDrainFunctionResult() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; + } + + Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; // if we're not piping anywhere, then do nothing. + + if (state.pipesCount === 0) return this; // just one destination. most common case. + + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; // got a match. + + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } // slow case. multiple pipe destinations. + + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + } + + return this; + } // try to find the right one. + + + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; + }; // set up data events if they are asked for + // Ensure readable listeners eventually get something + + + Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; + + if (ev === 'data') { + // update readableListening so that resume() may be a no-op + // a few lines down. This is needed to support once('readable'). + state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused + + if (state.flowing !== false) this.resume(); + } else if (ev === 'readable') { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug('on readable', state.length, state.reading); + + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); + } + } + } + + return res; + }; + + Readable.prototype.addListener = Readable.prototype.on; + + Readable.prototype.removeListener = function (ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); + + if (ev === 'readable') { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + + return res; + }; + + Readable.prototype.removeAllListeners = function (ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); + + if (ev === 'readable' || ev === undefined) { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + + return res; + }; + + function updateReadableListening(self) { + var state = self._readableState; + state.readableListening = self.listenerCount('readable') > 0; + + if (state.resumeScheduled && !state.paused) { + // flowing needs to be set to true now, otherwise + // the upcoming resume will not flow. + state.flowing = true; // crude way to check if we should resume + } else if (self.listenerCount('data') > 0) { + self.resume(); + } + } + + function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); + } // pause() and resume() are remnants of the legacy readable stream API + // If the user uses them, then switch into old mode. + + + Readable.prototype.resume = function () { + var state = this._readableState; + + if (!state.flowing) { + debug('resume'); // we flow only if there is no one listening + // for readable, but we still have to call + // resume() + + state.flowing = !state.readableListening; + resume(this, state); + } + + state.paused = false; + return this; + }; + + function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(resume_, stream, state); + } + } + + function resume_(stream, state) { + debug('resume', state.reading); + + if (!state.reading) { + stream.read(0); + } + + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); + } + + Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + + if (this._readableState.flowing !== false) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + + this._readableState.paused = true; + return this; + }; + + function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + + while (state.flowing && stream.read() !== null) { + ; + } + } // wrap an old-style stream as the async data source. + // This is *not* part of the readable stream interface. + // It is an ugly unfortunate mess of history. + + + Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode + + if (state.objectMode && (chunk === null || chunk === undefined)) return; else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + + if (!ret) { + paused = true; + stream.pause(); + } + }); // proxy all the other methods. + // important when wrapping filters and duplexes. + + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } // proxy certain important events. + + + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } // when we try to consume some more bytes, simply unpause the + // underlying stream. + + + this._read = function (n) { + debug('wrapped _read', n); + + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; + }; + + if (typeof Symbol === 'function') { + Readable.prototype[Symbol.asyncIterator] = function () { + if (createReadableStreamAsyncIterator === undefined) { + createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); + } + + return createReadableStreamAsyncIterator(this); + }; + } + + Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } + }); + Object.defineProperty(Readable.prototype, 'readableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } + }); + Object.defineProperty(Readable.prototype, 'readableFlowing', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } + }); // exposed for testing purposes only. + + Readable._fromList = fromList; + Object.defineProperty(Readable.prototype, 'readableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.length; + } + }); // Pluck off n bytes from an array of buffers. + // Length is the combined lengths of all the buffers in the list. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift(); else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join(''); else if (state.buffer.length === 1) ret = state.buffer.first(); else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = state.buffer.consume(n, state.decoder); + } + return ret; + } + + function endReadable(stream) { + var state = stream._readableState; + debug('endReadable', state.endEmitted); + + if (!state.endEmitted) { + state.ended = true; + process.nextTick(endReadableNT, state, stream); + } + } + + function endReadableNT(state, stream) { + debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. + + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the writable side is ready for autoDestroy as well + var wState = stream._writableState; + + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } + } + } + } + + if (typeof Symbol === 'function') { + Readable.from = function (iterable, opts) { + if (from === undefined) { + from = require('./internal/streams/from'); + } + + return from(Readable, iterable, opts); + }; + } + + function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + + return -1; + } + }).call(this) + }).call(this, require('_process'), typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + }, { "../errors": 10, "./_stream_duplex": 11, "./internal/streams/async_iterator": 16, "./internal/streams/buffer_list": 17, "./internal/streams/destroy": 18, "./internal/streams/from": 20, "./internal/streams/state": 22, "./internal/streams/stream": 23, "_process": 7, "buffer": 3, "events": 4, "inherits": 6, "string_decoder/": 24, "util": 2 }], 14: [function (require, module, exports) { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + // a transform stream is a readable/writable stream where you do + // something with the data. Sometimes it's called a "filter", + // but that's not a great name for it, since that implies a thing where + // some bits pass through, and others are simply ignored. (That would + // be a valid example of a transform, of course.) + // + // While the output is causally related to the input, it's not a + // necessarily symmetric or synchronous transformation. For example, + // a zlib stream might take multiple plain-text writes(), and then + // emit a single compressed chunk some time in the future. + // + // Here's how this works: + // + // The Transform stream has all the aspects of the readable and writable + // stream classes. When you write(chunk), that calls _write(chunk,cb) + // internally, and returns false if there's a lot of pending writes + // buffered up. When you call read(), that calls _read(n) until + // there's enough pending readable data buffered up. + // + // In a transform stream, the written data is placed in a buffer. When + // _read(n) is called, it transforms the queued up data, calling the + // buffered _write cb's as it consumes chunks. If consuming a single + // written chunk would result in multiple output chunks, then the first + // outputted bit calls the readcb, and subsequent chunks just go into + // the read buffer, and will cause it to emit 'readable' if necessary. + // + // This way, back-pressure is actually determined by the reading side, + // since _read has to be called to start processing a new chunk. However, + // a pathological inflate type of transform can cause excessive buffering + // here. For example, imagine a stream where every byte of input is + // interpreted as an integer from 0-255, and then results in that many + // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in + // 1kb of data being output. In this case, you could write a very small + // amount of input, and end up with a very large amount of output. In + // such a pathological inflating mechanism, there'd be no way to tell + // the system to stop doing the transform. A single 4MB write could + // cause the system to run out of memory. + // + // However, even in such a pathological case, only a single written chunk + // would be consumed, and then the rest would wait (un-transformed) until + // the results of the previous transformed chunk were consumed. + 'use strict'; + + module.exports = Transform; + + var _require$codes = require('../errors').codes, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, + ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; + + var Duplex = require('./_stream_duplex'); + + require('inherits')(Transform, Duplex); + + function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + + if (cb === null) { + return this.emit('error', new ERR_MULTIPLE_CALLBACK()); + } + + ts.writechunk = null; + ts.writecb = null; + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } + } + + function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; // start out asking for a readable event once data is transformed. + + this._readableState.needReadable = true; // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } // When the writable side finishes, then flush out anything remaining. + + + this.on('prefinish', prefinish); + } + + function prefinish() { + var _this = this; + + if (typeof this._flush === 'function' && !this._readableState.destroyed) { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } + } + + Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); + }; // This is the part where you do stuff! + // override this function in implementation classes. + // 'chunk' is an input chunk. + // + // Call `push(newChunk)` to pass along transformed output + // to the readable side. You may call 'push' zero or more times. + // + // Call `cb(err)` when you are done with this chunk. If you pass + // an error, then that'll put the hurt on the whole operation. If you + // never call cb(), then you'll never get another chunk. + + + Transform.prototype._transform = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); + }; + + Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } + }; // Doesn't matter what the args are here. + // _transform does all the work. + // That we got here means that the readable side wants more data. + + + Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && !ts.transforming) { + ts.transforming = true; + + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } + }; + + Transform.prototype._destroy = function (err, cb) { + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + }); + }; + + function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); // TODO(BridgeAR): Write a test for these two error cases + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + + if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); + if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); + return stream.push(null); + } + }, { "../errors": 10, "./_stream_duplex": 11, "inherits": 6 }], 15: [function (require, module, exports) { + (function (process, global) { + (function () { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + // A bit simpler than readable streams. + // Implement an async ._write(chunk, encoding, cb), and it'll handle all + // the drain event emission and buffering. + 'use strict'; + + module.exports = Writable; + /* */ + + function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; + } // It seems a linked list but it is not + // there will be only 2 of these for each stream + + + function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function () { + onCorkedFinish(_this, state); + }; + } + /* */ + + /**/ + + + var Duplex; + /**/ + + Writable.WritableState = WritableState; + /**/ + + var internalUtil = { + deprecate: require('util-deprecate') + }; + /**/ + + /**/ + + var Stream = require('./internal/streams/stream'); + /**/ + + + var Buffer = require('buffer').Buffer; + + var OurUint8Array = global.Uint8Array || function () { }; + + function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); + } + + function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; + } + + var destroyImpl = require('./internal/streams/destroy'); + + var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; + + var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, + ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; + + var errorOrDestroy = destroyImpl.errorOrDestroy; + + require('inherits')(Writable, Stream); + + function nop() { } + + function WritableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream, + // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. + + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream + // contains buffers or objects. + + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + + this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called + + this.finalCalled = false; // drain event flag. + + this.needDrain = false; // at the start of calling end() + + this.ending = false; // when end() has been called, and returned + + this.ended = false; // when 'finish' is emitted + + this.finished = false; // has it been destroyed + + this.destroyed = false; // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + + this.length = 0; // a flag to see when we're in the middle of a write. + + this.writing = false; // when true all writes will be buffered until .uncork() call + + this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + + this.sync = true; // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + + this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) + + this.onwrite = function (er) { + onwrite(stream, er); + }; // the callback that the user supplies to write(chunk,encoding,cb) + + + this.writecb = null; // the amount that is being written when _write is called. + + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + + this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + + this.prefinished = false; // True if the error was already emitted and should not be thrown again + + this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. + + this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') + + this.autoDestroy = !!options.autoDestroy; // count buffered requests + + this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + + this.corkedRequestsFree = new CorkedRequest(this); + } + + WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + + while (current) { + out.push(current); + current = current.next; + } + + return out; + }; + + (function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function writableStateBufferGetter() { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) { } + })(); // Test _writableState for inheritance to account for Duplex streams, + // whose prototype chain only points to Readable. + + + var realHasInstance; + + if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); + } else { + realHasInstance = function realHasInstance(object) { + return object instanceof this; + }; + } + + function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + // Checking for a Stream.Duplex instance is faster here instead of inside + // the WritableState constructor, at least with V8 6.5 + + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); // legacy. + + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); + } // Otherwise people can pipe Writable streams, which is just wrong. + + + Writable.prototype.pipe = function () { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); + }; + + function writeAfterEnd(stream, cb) { + var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb + + errorOrDestroy(stream, er); + process.nextTick(cb, er); + } // Checks that a user-supplied chunk is valid, especially for the particular + // mode the stream is in. Currently this means that `null` is never accepted + // and undefined/non-string values are only allowed in object mode. + + + function validChunk(stream, state, chunk, cb) { + var er; + + if (chunk === null) { + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== 'string' && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); + } + + if (er) { + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; + } + + return true; + } + + Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer'; else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ending) writeAfterEnd(this, cb); else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; + }; + + Writable.prototype.cork = function () { + this._writableState.corked++; + }; + + Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } + }; + + Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; + }; + + Object.defineProperty(Writable.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } + }); + + function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + + return chunk; + } + + Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } + }); // if we're already writing something, then just put this + // in the queue, and wait our turn. Otherwise, call _write + // If we return false, then we need a drain event, so set that flag. + + function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. + + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; + } + + function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write')); else if (writev) stream._writev(chunk, state.onwrite); else stream._write(chunk, encoding, state.onwrite); + state.sync = false; + } + + function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + process.nextTick(cb, er); // this can emit finish, and it will always happen + // after error + + process.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); // this can emit finish, but finish must + // always follow error + + finishMaybe(stream, state); + } + } + + function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; + } + + function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb); else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state) || stream.destroyed; + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + process.nextTick(afterWrite, stream, state, finished, cb); + } else { + afterWrite(stream, state, finished, cb); + } + } + } + + function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); + } // Must force callback to be called on nextTick, so that we don't + // emit 'drain' before the write() consumer gets the 'false' return + // value, and has a chance to attach a 'drain' listener. + + + function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } + } // if there's something in the buffer waiting, then process it + + + function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + + state.pendingcb++; + state.lastBufferedRequest = null; + + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; + } + + Writable.prototype._write = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); + }; + + Writable.prototype._writev = null; + + Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks + + if (state.corked) { + state.corked = 1; + this.uncork(); + } // ignore unnecessary end() calls. + + + if (!state.ending) endWritable(this, state, cb); + return this; + }; + + Object.defineProperty(Writable.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } + }); + + function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; + } + + function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + + if (err) { + errorOrDestroy(stream, err); + } + + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); + } + + function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function' && !state.destroyed) { + state.pendingcb++; + state.finalCalled = true; + process.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } + } + + function finishMaybe(stream, state) { + var need = needFinish(state); + + if (need) { + prefinish(stream, state); + + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the readable side is ready for autoDestroy as well + var rState = stream._readableState; + + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); + } + } + } + } + + return need; + } + + function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + + if (cb) { + if (state.finished) process.nextTick(cb); else stream.once('finish', cb); + } + + state.ended = true; + stream.writable = false; + } + + function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } // reuse the free corkReq. + + + state.corkedRequestsFree.next = corkReq; + } + + Object.defineProperty(Writable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._writableState === undefined) { + return false; + } + + return this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._writableState.destroyed = value; + } + }); + Writable.prototype.destroy = destroyImpl.destroy; + Writable.prototype._undestroy = destroyImpl.undestroy; + + Writable.prototype._destroy = function (err, cb) { + cb(err); + }; + }).call(this) + }).call(this, require('_process'), typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + }, { "../errors": 10, "./_stream_duplex": 11, "./internal/streams/destroy": 18, "./internal/streams/state": 22, "./internal/streams/stream": 23, "_process": 7, "buffer": 3, "inherits": 6, "util-deprecate": 25 }], 16: [function (require, module, exports) { + (function (process) { + (function () { + 'use strict'; + + var _Object$setPrototypeO; + + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + var finished = require('./end-of-stream'); + + var kLastResolve = Symbol('lastResolve'); + var kLastReject = Symbol('lastReject'); + var kError = Symbol('error'); + var kEnded = Symbol('ended'); + var kLastPromise = Symbol('lastPromise'); + var kHandlePromise = Symbol('handlePromise'); + var kStream = Symbol('stream'); + + function createIterResult(value, done) { + return { + value: value, + done: done + }; + } + + function readAndResolve(iter) { + var resolve = iter[kLastResolve]; + + if (resolve !== null) { + var data = iter[kStream].read(); // we defer if data is null + // we can be expecting either 'end' or + // 'error' + + if (data !== null) { + iter[kLastPromise] = null; + iter[kLastResolve] = null; + iter[kLastReject] = null; + resolve(createIterResult(data, false)); + } + } + } + + function onReadable(iter) { + // we wait for the next tick, because it might + // emit an error with process.nextTick + process.nextTick(readAndResolve, iter); + } + + function wrapForNext(lastPromise, iter) { + return function (resolve, reject) { + lastPromise.then(function () { + if (iter[kEnded]) { + resolve(createIterResult(undefined, true)); + return; + } + + iter[kHandlePromise](resolve, reject); + }, reject); + }; + } + + var AsyncIteratorPrototype = Object.getPrototypeOf(function () { }); + var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { + get stream() { + return this[kStream]; + }, + + next: function next() { + var _this = this; + + // if we have detected an error in the meanwhile + // reject straight away + var error = this[kError]; + + if (error !== null) { + return Promise.reject(error); + } + + if (this[kEnded]) { + return Promise.resolve(createIterResult(undefined, true)); + } + + if (this[kStream].destroyed) { + // We need to defer via nextTick because if .destroy(err) is + // called, the error will be emitted via nextTick, and + // we cannot guarantee that there is no error lingering around + // waiting to be emitted. + return new Promise(function (resolve, reject) { + process.nextTick(function () { + if (_this[kError]) { + reject(_this[kError]); + } else { + resolve(createIterResult(undefined, true)); + } + }); + }); + } // if we have multiple next() calls + // we will wait for the previous Promise to finish + // this logic is optimized to support for await loops, + // where next() is only called once at a time + + + var lastPromise = this[kLastPromise]; + var promise; + + if (lastPromise) { + promise = new Promise(wrapForNext(lastPromise, this)); + } else { + // fast path needed to support multiple this.push() + // without triggering the next() queue + var data = this[kStream].read(); + + if (data !== null) { + return Promise.resolve(createIterResult(data, false)); + } + + promise = new Promise(this[kHandlePromise]); + } + + this[kLastPromise] = promise; + return promise; + } + }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { + return this; + }), _defineProperty(_Object$setPrototypeO, "return", function _return() { + var _this2 = this; + + // destroy(err, cb) is a private API + // we can guarantee we have that here, because we control the + // Readable class this is attached to + return new Promise(function (resolve, reject) { + _this2[kStream].destroy(null, function (err) { + if (err) { + reject(err); + return; + } + + resolve(createIterResult(undefined, true)); + }); + }); + }), _Object$setPrototypeO), AsyncIteratorPrototype); + + var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { + var _Object$create; + + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { + value: stream, + writable: true + }), _defineProperty(_Object$create, kLastResolve, { + value: null, + writable: true + }), _defineProperty(_Object$create, kLastReject, { + value: null, + writable: true + }), _defineProperty(_Object$create, kError, { + value: null, + writable: true + }), _defineProperty(_Object$create, kEnded, { + value: stream._readableState.endEmitted, + writable: true + }), _defineProperty(_Object$create, kHandlePromise, { + value: function value(resolve, reject) { + var data = iterator[kStream].read(); + + if (data) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(data, false)); + } else { + iterator[kLastResolve] = resolve; + iterator[kLastReject] = reject; + } + }, + writable: true + }), _Object$create)); + iterator[kLastPromise] = null; + finished(stream, function (err) { + if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { + var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise + // returned by next() and store the error + + if (reject !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + reject(err); + } + + iterator[kError] = err; + return; + } + + var resolve = iterator[kLastResolve]; + + if (resolve !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(undefined, true)); + } + + iterator[kEnded] = true; + }); + stream.on('readable', onReadable.bind(null, iterator)); + return iterator; + }; + + module.exports = createReadableStreamAsyncIterator; + }).call(this) + }).call(this, require('_process')) + }, { "./end-of-stream": 19, "_process": 7 }], 17: [function (require, module, exports) { + 'use strict'; + + function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + + function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + + function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + + var _require = require('buffer'), + Buffer = _require.Buffer; + + var _require2 = require('util'), + inspect = _require2.inspect; + + var custom = inspect && inspect.custom || 'inspect'; + + function copyBuffer(src, target, offset) { + Buffer.prototype.copy.call(src, target, offset); + } + + module.exports = + /*#__PURE__*/ + function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + _createClass(BufferList, [{ + key: "push", + value: function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry; else this.head = entry; + this.tail = entry; + ++this.length; + } + }, { + key: "unshift", + value: function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + } + }, { + key: "shift", + value: function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null; else this.head = this.head.next; + --this.length; + return ret; + } + }, { + key: "clear", + value: function clear() { + this.head = this.tail = null; + this.length = 0; + } + }, { + key: "join", + value: function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + + while (p = p.next) { + ret += s + p.data; + } + + return ret; + } + }, { + key: "concat", + value: function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + + return ret; + } // Consumes a specified amount of bytes or characters from the buffered data. + + }, { + key: "consume", + value: function consume(n, hasStrings) { + var ret; + + if (n < this.head.data.length) { + // `slice` is the same for buffers and strings. + ret = this.head.data.slice(0, n); + this.head.data = this.head.data.slice(n); + } else if (n === this.head.data.length) { + // First chunk is a perfect match. + ret = this.shift(); + } else { + // Result spans more than one buffer. + ret = hasStrings ? this._getString(n) : this._getBuffer(n); + } + + return ret; + } + }, { + key: "first", + value: function first() { + return this.head.data; + } // Consumes a specified amount of characters from the buffered data. + + }, { + key: "_getString", + value: function _getString(n) { + var p = this.head; + var c = 1; + var ret = p.data; + n -= ret.length; + + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str; else ret += str.slice(0, n); + n -= nb; + + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) this.head = p.next; else this.head = this.tail = null; + } else { + this.head = p; + p.data = str.slice(nb); + } + + break; + } + + ++c; + } + + this.length -= c; + return ret; + } // Consumes a specified amount of bytes from the buffered data. + + }, { + key: "_getBuffer", + value: function _getBuffer(n) { + var ret = Buffer.allocUnsafe(n); + var p = this.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) this.head = p.next; else this.head = this.tail = null; + } else { + this.head = p; + p.data = buf.slice(nb); + } + + break; + } + + ++c; + } + + this.length -= c; + return ret; + } // Make sure the linked list only shows the minimal necessary information. + + }, { + key: custom, + value: function value(_, options) { + return inspect(this, _objectSpread({}, options, { + // Only inspect one level. + depth: 0, + // It should not recurse. + customInspect: false + })); + } + }]); + + return BufferList; + }(); + }, { "buffer": 3, "util": 2 }], 18: [function (require, module, exports) { + (function (process) { + (function () { + 'use strict'; // undocumented cb() API, needed for core, not for public API + + function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } + } + + return this; + } // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + + if (this._readableState) { + this._readableState.destroyed = true; + } // if this is a duplex stream mark the writable part as destroyed as well + + + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err); + } else { + process.nextTick(emitCloseNT, _this); + } + } else if (cb) { + process.nextTick(emitCloseNT, _this); + cb(err); + } else { + process.nextTick(emitCloseNT, _this); + } + }); + + return this; + } + + function emitErrorAndCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); + } + + function emitCloseNT(self) { + if (self._writableState && !self._writableState.emitClose) return; + if (self._readableState && !self._readableState.emitClose) return; + self.emit('close'); + } + + function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } + } + + function emitErrorNT(self, err) { + self.emit('error', err); + } + + function errorOrDestroy(stream, err) { + // We have tests that rely on errors being emitted + // in the same tick, so changing this is semver major. + // For now when you opt-in to autoDestroy we allow + // the error to be emitted nextTick. In a future + // semver major update we should change the default to this. + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err); else stream.emit('error', err); + } + + module.exports = { + destroy: destroy, + undestroy: undestroy, + errorOrDestroy: errorOrDestroy + }; + }).call(this) + }).call(this, require('_process')) + }, { "_process": 7 }], 19: [function (require, module, exports) { + // Ported from https://github.com/mafintosh/end-of-stream with + // permission from the author, Mathias Buus (@mafintosh). + 'use strict'; + + var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; + + function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + callback.apply(this, args); + }; + } + + function noop() { } + + function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; + } + + function eos(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + callback = once(callback || noop); + var readable = opts.readable || opts.readable !== false && stream.readable; + var writable = opts.writable || opts.writable !== false && stream.writable; + + var onlegacyfinish = function onlegacyfinish() { + if (!stream.writable) onfinish(); + }; + + var writableEnded = stream._writableState && stream._writableState.finished; + + var onfinish = function onfinish() { + writable = false; + writableEnded = true; + if (!readable) callback.call(stream); + }; + + var readableEnded = stream._readableState && stream._readableState.endEmitted; + + var onend = function onend() { + readable = false; + readableEnded = true; + if (!writable) callback.call(stream); + }; + + var onerror = function onerror(err) { + callback.call(stream, err); + }; + + var onclose = function onclose() { + var err; + + if (readable && !readableEnded) { + if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + + if (writable && !writableEnded) { + if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + }; + + var onrequest = function onrequest() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); else stream.on('request', onrequest); + } else if (writable && !stream._writableState) { + // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + return function () { + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; + } + + module.exports = eos; + }, { "../../../errors": 10 }], 20: [function (require, module, exports) { + module.exports = function () { + throw new Error('Readable.from is not available in the browser') + }; + + }, {}], 21: [function (require, module, exports) { + // Ported from https://github.com/mafintosh/pump with + // permission from the author, Mathias Buus (@mafintosh). + 'use strict'; + + var eos; + + function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + callback.apply(void 0, arguments); + }; + } + + var _require$codes = require('../../../errors').codes, + ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; + + function noop(err) { + // Rethrow the error if it exists to avoid swallowing it + if (err) throw err; + } + + function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; + } + + function destroyer(stream, reading, writing, callback) { + callback = once(callback); + var closed = false; + stream.on('close', function () { + closed = true; + }); + if (eos === undefined) eos = require('./end-of-stream'); + eos(stream, { + readable: reading, + writable: writing + }, function (err) { + if (err) return callback(err); + closed = true; + callback(); + }); + var destroyed = false; + return function (err) { + if (closed) return; + if (destroyed) return; + destroyed = true; // request.destroy just do .end - .abort is what we want + + if (isRequest(stream)) return stream.abort(); + if (typeof stream.destroy === 'function') return stream.destroy(); + callback(err || new ERR_STREAM_DESTROYED('pipe')); + }; + } + + function call(fn) { + fn(); + } + + function pipe(from, to) { + return from.pipe(to); + } + + function popCallback(streams) { + if (!streams.length) return noop; + if (typeof streams[streams.length - 1] !== 'function') return noop; + return streams.pop(); + } + + function pipeline() { + for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { + streams[_key] = arguments[_key]; + } + + var callback = popCallback(streams); + if (Array.isArray(streams[0])) streams = streams[0]; + + if (streams.length < 2) { + throw new ERR_MISSING_ARGS('streams'); + } + + var error; + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1; + var writing = i > 0; + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err; + if (err) destroys.forEach(call); + if (reading) return; + destroys.forEach(call); + callback(error); + }); + }); + return streams.reduce(pipe); + } + + module.exports = pipeline; + }, { "../../../errors": 10, "./end-of-stream": 19 }], 22: [function (require, module, exports) { + 'use strict'; + + var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; + + function highWaterMarkFrom(options, isDuplex, duplexKey) { + return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; + } + + function getHighWaterMark(state, options, duplexKey, isDuplex) { + var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); + + if (hwm != null) { + if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { + var name = isDuplex ? duplexKey : 'highWaterMark'; + throw new ERR_INVALID_OPT_VALUE(name, hwm); + } + + return Math.floor(hwm); + } // Default value + + + return state.objectMode ? 16 : 16 * 1024; + } + + module.exports = { + getHighWaterMark: getHighWaterMark + }; + }, { "../../../errors": 10 }], 23: [function (require, module, exports) { + module.exports = require('events').EventEmitter; + + }, { "events": 4 }], 24: [function (require, module, exports) { + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + 'use strict'; + + /**/ + + var Buffer = require('safe-buffer').Buffer; + /**/ + + var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': + return true; + default: + return false; + } + }; + + function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } + }; + + // Do not cache `Buffer.isEncoding` when checking encoding names as some + // modules monkey-patch it to support additional encodings + function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; + } + + // StringDecoder provides an interface for efficiently splitting a series of + // buffers into a series of JS strings without breaking apart multi-byte + // characters. + exports.StringDecoder = StringDecoder; + function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); + } + + StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; + }; + + StringDecoder.prototype.end = utf8End; + + // Returns only complete characters in a Buffer + StringDecoder.prototype.text = utf8Text; + + // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer + StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; + }; + + // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a + // continuation byte. If an invalid byte is detected, -2 is returned. + function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0; else if (byte >> 5 === 0x06) return 2; else if (byte >> 4 === 0x0E) return 3; else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; + } + + // Checks at most 3 bytes at the end of a Buffer in order to detect an + // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) + // needed to complete the UTF-8 character (if applicable) are returned. + function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0; else self.lastNeed = nb - 3; + } + return nb; + } + return 0; + } + + // Validates as many continuation bytes for a multi-byte UTF-8 character as + // needed or are available. If we see a non-continuation byte where we expect + // one, we "replace" the validated continuation bytes we've seen so far with + // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding + // behavior. The continuation byte check is included three times in the case + // where all of the continuation bytes for a character exist in the same buffer. + // It is also done this way as a slight performance increase instead of using a + // loop. + function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } + } + + // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. + function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; + } + + // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a + // partial character, the character's bytes are buffered until the required + // number of bytes are available. + function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); + } + + // For UTF-8, a replacement character is added when ending on a partial + // character. + function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; + } + + // UTF-16LE typically needs two bytes per character, but even if we have an even + // number of bytes available, we need to check if we end on a leading/high + // surrogate. In that case, we need to wait for the next two bytes in order to + // decode the last character properly. + function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); + } + + // For UTF-16LE we do not explicitly append special replacement characters if we + // end on a partial character, we simply let v8 handle that. + function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; + } + + function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); + } + + function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; + } + + // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) + function simpleWrite(buf) { + return buf.toString(this.encoding); + } + + function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; + } + }, { "safe-buffer": 8 }], 25: [function (require, module, exports) { + (function (global) { + (function () { + + /** + * Module exports. + */ + + module.exports = deprecate; + + /** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + + function deprecate(fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; + } + + /** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + + function config(name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; + } + + }).call(this) + }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + }, {}], 26: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var FlatModule_1 = require("./FlatModule"); + var YosysModel_1 = require("./YosysModel"); + var Skin_1 = require("./Skin"); + var Port_1 = require("./Port"); + var _ = require("lodash"); + var clone = require("clone"); + var onml = require("onml"); + var Cell = /** @class */ (function () { + function Cell(key, type, inputPorts, outputPorts, attributes) { + var _this = this; + this.key = key; + this.type = type; + this.inputPorts = inputPorts; + this.outputPorts = outputPorts; + this.attributes = attributes || {}; + inputPorts.forEach(function (ip) { + ip.parentNode = _this; + }); + outputPorts.forEach(function (op) { + op.parentNode = _this; + }); + } + /** + * creates a Cell from a Yosys Port + * @param yPort the Yosys Port with our port data + * @param name the name of the port + */ + Cell.fromPort = function (yPort, name) { + var isInput = yPort.direction === YosysModel_1.default.Direction.Input; + if (isInput) { + return new Cell(name, '$_inputExt_', [], [new Port_1.Port('Y', yPort.bits)], {}); + } + return new Cell(name, '$_outputExt_', [new Port_1.Port('A', yPort.bits)], [], {}); + }; + Cell.fromYosysCell = function (yCell, name) { + this.setAlternateCellType(yCell); + var template = Skin_1.default.findSkinType(yCell.type); + var templateInputPids = Skin_1.default.getInputPids(template); + var templateOutputPids = Skin_1.default.getOutputPids(template); + var ports = _.map(yCell.connections, function (conn, portName) { + return new Port_1.Port(portName, conn); + }); + var inputPorts = ports.filter(function (port) { return port.keyIn(templateInputPids); }); + var outputPorts = ports.filter(function (port) { return port.keyIn(templateOutputPids); }); + if (inputPorts.length + outputPorts.length !== ports.length) { + var inputPids_1 = YosysModel_1.default.getInputPortPids(yCell); + var outputPids_1 = YosysModel_1.default.getOutputPortPids(yCell); + inputPorts = ports.filter(function (port) { return port.keyIn(inputPids_1); }); + outputPorts = ports.filter(function (port) { return port.keyIn(outputPids_1); }); + } + return new Cell(name, yCell.type, inputPorts, outputPorts, yCell.attributes); + }; + Cell.fromConstantInfo = function (name, constants) { + return new Cell(name, '$_constant_', [], [new Port_1.Port('Y', constants)], {}); + }; + /** + * creates a join cell + * @param target string name of net (starts and ends with and delimited by commas) + * @param sources list of index strings (one number, or two numbers separated by a colon) + */ + Cell.fromJoinInfo = function (target, sources) { + var signalStrs = target.slice(1, -1).split(','); + var signals = signalStrs.map(function (ss) { return Number(ss); }); + var joinOutPorts = [new Port_1.Port('Y', signals)]; + var inPorts = sources.map(function (name) { + return new Port_1.Port(name, getBits(signals, name)); + }); + return new Cell('$join$' + target, '$_join_', inPorts, joinOutPorts, {}); + }; + /** + * creates a split cell + * @param source string name of net (starts and ends with and delimited by commas) + * @param targets list of index strings (one number, or two numbers separated by a colon) + */ + Cell.fromSplitInfo = function (source, targets) { + // turn string into array of signal names + var sigStrs = source.slice(1, -1).split(','); + // convert the signals into actual numbers + // after running constant pass, all signals should be numbers + var signals = sigStrs.map(function (s) { return Number(s); }); + var inPorts = [new Port_1.Port('A', signals)]; + var splitOutPorts = targets.map(function (name) { + var sigs = getBits(signals, name); + return new Port_1.Port(name, sigs); + }); + return new Cell('$split$' + source, '$_split_', inPorts, splitOutPorts, {}); + }; + // Set cells to alternate types/tags based on their parameters + Cell.setAlternateCellType = function (yCell) { + if ('parameters' in yCell) { + // if it has a WIDTH parameter greater than one + // and doesn't have an address parameter (not a memory cell) + if ('WIDTH' in yCell.parameters && + yCell.parameters.WIDTH > 1 && + !('ADDR' in yCell.parameters)) { + // turn into a bus version + yCell.type = yCell.type + '-bus'; + } + } + }; + Object.defineProperty(Cell.prototype, "Type", { + get: function () { + return this.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Cell.prototype, "Key", { + get: function () { + return this.key; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Cell.prototype, "InputPorts", { + get: function () { + return this.inputPorts; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Cell.prototype, "OutputPorts", { + get: function () { + return this.outputPorts; + }, + enumerable: false, + configurable: true + }); + Cell.prototype.maxOutVal = function (atLeast) { + var maxVal = _.max(this.outputPorts.map(function (op) { return op.maxVal(); })); + return _.max([maxVal, atLeast]); + }; + Cell.prototype.findConstants = function (sigsByConstantName, maxNum, constantCollector) { + this.inputPorts.forEach(function (ip) { + maxNum = ip.findConstants(sigsByConstantName, maxNum, constantCollector); + }); + return maxNum; + }; + Cell.prototype.inputPortVals = function () { + return this.inputPorts.map(function (port) { return port.valString(); }); + }; + Cell.prototype.outputPortVals = function () { + return this.outputPorts.map(function (port) { return port.valString(); }); + }; + Cell.prototype.collectPortsByDirection = function (ridersByNet, driversByNet, lateralsByNet, genericsLaterals) { + var template = Skin_1.default.findSkinType(this.type); + var lateralPids = Skin_1.default.getLateralPortPids(template); + // find all ports connected to the same net + this.inputPorts.forEach(function (port) { + var isLateral = port.keyIn(lateralPids); + if (isLateral || (template[1]['s:type'] === 'generic' && genericsLaterals)) { + FlatModule_1.addToDefaultDict(lateralsByNet, port.valString(), port); + } + else { + FlatModule_1.addToDefaultDict(ridersByNet, port.valString(), port); + } + }); + this.outputPorts.forEach(function (port) { + var isLateral = port.keyIn(lateralPids); + if (isLateral || (template[1]['s:type'] === 'generic' && genericsLaterals)) { + FlatModule_1.addToDefaultDict(lateralsByNet, port.valString(), port); + } + else { + FlatModule_1.addToDefaultDict(driversByNet, port.valString(), port); + } + }); + }; + Cell.prototype.getValueAttribute = function () { + if (this.attributes && this.attributes.value) { + return this.attributes.value; + } + return null; + }; + Cell.prototype.getTemplate = function () { + return Skin_1.default.findSkinType(this.type); + }; + Cell.prototype.buildElkChild = function () { + var _this = this; + var template = this.getTemplate(); + var type = template[1]['s:type']; + var layoutAttrs = { 'org.eclipse.elk.portConstraints': 'FIXED_POS' }; + var fixedPosX = null; + var fixedPosY = null; + for (var attr in this.attributes) { + if (attr.startsWith('org.eclipse.elk')) { + if (attr === 'org.eclipse.elk.x') { + fixedPosX = this.attributes[attr]; + continue; + } + if (attr === 'org.eclipse.elk.y') { + fixedPosY = this.attributes[attr]; + continue; + } + layoutAttrs[attr] = this.attributes[attr]; + } + } + if (type === 'join' || + type === 'split' || + type === 'generic') { + var inTemplates_1 = Skin_1.default.getPortsWithPrefix(template, 'in'); + var outTemplates_1 = Skin_1.default.getPortsWithPrefix(template, 'out'); + var inPorts = this.inputPorts.map(function (ip, i) { + return ip.getGenericElkPort(i, inTemplates_1, 'in'); + }); + var outPorts = this.outputPorts.map(function (op, i) { + return op.getGenericElkPort(i, outTemplates_1, 'out'); + }); + var cell = { + id: this.key, + width: Number(template[1]['s:width']), + height: Number(this.getGenericHeight()), + ports: inPorts.concat(outPorts), + layoutOptions: layoutAttrs, + labels: [], + }; + if (fixedPosX) { + cell.x = fixedPosX; + } + if (fixedPosY) { + cell.y = fixedPosY; + } + this.addLabels(template, cell); + return cell; + } + var ports = Skin_1.default.getPortsWithPrefix(template, '').map(function (tp) { + return { + id: _this.key + '.' + tp[1]['s:pid'], + width: 0, + height: 0, + x: Number(tp[1]['s:x']), + y: Number(tp[1]['s:y']), + }; + }); + var nodeWidth = Number(template[1]['s:width']); + var ret = { + id: this.key, + width: nodeWidth, + height: Number(template[1]['s:height']), + ports: ports, + layoutOptions: layoutAttrs, + labels: [], + }; + if (fixedPosX) { + ret.x = fixedPosX; + } + if (fixedPosY) { + ret.y = fixedPosY; + } + this.addLabels(template, ret); + return ret; + }; + Cell.prototype.render = function (cell) { + var template = this.getTemplate(); + var tempclone = clone(template); + for (var _i = 0, _a = cell.labels; _i < _a.length; _i++) { + var label = _a[_i]; + var labelIDSplit = label.id.split('.'); + var attrName = labelIDSplit[labelIDSplit.length - 1]; + setTextAttribute(tempclone, attrName, label.text); + } + for (var i = 2; i < tempclone.length; i++) { + var node = tempclone[i]; + if (node[0] === 'text' && node[1]['s:attribute']) { + var attrib = node[1]['s:attribute']; + if (!(attrib in this.attributes)) { + node[2] = ''; + } + } + } + tempclone[1].id = 'cell_' + this.key; + tempclone[1].transform = 'translate(' + cell.x + ',' + cell.y + ')'; + if (this.type === '$_split_') { + setGenericSize(tempclone, Number(this.getGenericHeight())); + var outPorts_1 = Skin_1.default.getPortsWithPrefix(template, 'out'); + var gap_1 = Number(outPorts_1[1][1]['s:y']) - Number(outPorts_1[0][1]['s:y']); + var startY_1 = Number(outPorts_1[0][1]['s:y']); + tempclone.pop(); + tempclone.pop(); + this.outputPorts.forEach(function (op, i) { + var portClone = clone(outPorts_1[0]); + portClone[portClone.length - 1][2] = op.Key; + portClone[1].transform = 'translate(' + outPorts_1[1][1]['s:x'] + ',' + + (startY_1 + i * gap_1) + ')'; + tempclone.push(portClone); + }); + } + else if (this.type === '$_join_') { + setGenericSize(tempclone, Number(this.getGenericHeight())); + var inPorts_1 = Skin_1.default.getPortsWithPrefix(template, 'in'); + var gap_2 = Number(inPorts_1[1][1]['s:y']) - Number(inPorts_1[0][1]['s:y']); + var startY_2 = Number(inPorts_1[0][1]['s:y']); + tempclone.pop(); + tempclone.pop(); + this.inputPorts.forEach(function (port, i) { + var portClone = clone(inPorts_1[0]); + portClone[portClone.length - 1][2] = port.Key; + portClone[1].transform = 'translate(' + inPorts_1[1][1]['s:x'] + ',' + + (startY_2 + i * gap_2) + ')'; + tempclone.push(portClone); + }); + } + else if (template[1]['s:type'] === 'generic') { + setGenericSize(tempclone, Number(this.getGenericHeight())); + var inPorts_2 = Skin_1.default.getPortsWithPrefix(template, 'in'); + var ingap_1 = Number(inPorts_2[1][1]['s:y']) - Number(inPorts_2[0][1]['s:y']); + var instartY_1 = Number(inPorts_2[0][1]['s:y']); + var outPorts_2 = Skin_1.default.getPortsWithPrefix(template, 'out'); + var outgap_1 = Number(outPorts_2[1][1]['s:y']) - Number(outPorts_2[0][1]['s:y']); + var outstartY_1 = Number(outPorts_2[0][1]['s:y']); + tempclone.pop(); + tempclone.pop(); + tempclone.pop(); + tempclone.pop(); + this.inputPorts.forEach(function (port, i) { + var portClone = clone(inPorts_2[0]); + portClone[portClone.length - 1][2] = port.Key; + portClone[1].transform = 'translate(' + inPorts_2[1][1]['s:x'] + ',' + + (instartY_1 + i * ingap_1) + ')'; + portClone[1].id = 'port_' + port.parentNode.Key + '~' + port.Key; + tempclone.push(portClone); + }); + this.outputPorts.forEach(function (port, i) { + var portClone = clone(outPorts_2[0]); + portClone[portClone.length - 1][2] = port.Key; + portClone[1].transform = 'translate(' + outPorts_2[1][1]['s:x'] + ',' + + (outstartY_1 + i * outgap_1) + ')'; + portClone[1].id = 'port_' + port.parentNode.Key + '~' + port.Key; + tempclone.push(portClone); + }); + // first child of generic must be a text node. + tempclone[2][2] = this.type; + } + setClass(tempclone, '$cell_id', 'cell_' + this.key); + return tempclone; + }; + Cell.prototype.addLabels = function (template, cell) { + var _this = this; + onml.traverse(template, { + enter: function (node) { + if (node.name === 'text' && node.attr['s:attribute']) { + var attrName = node.attr['s:attribute']; + var newString = void 0; + if (attrName === 'ref' || attrName === 'id') { + if (_this.type === '$_constant_' && _this.key.length > 3) { + var num = parseInt(_this.key, 2); + newString = '0x' + num.toString(16); + } + else { + newString = _this.key; + } + _this.attributes[attrName] = _this.key; + } + else if (attrName in _this.attributes) { + newString = _this.attributes[attrName]; + } + else { + return; + } + cell.labels.push({ + id: _this.key + '.label.' + attrName, + text: newString, + x: node.attr.x, + y: node.attr.y - 6, + height: 11, + width: (6 * newString.length), + }); + } + }, + }); + }; + Cell.prototype.getGenericHeight = function () { + var template = this.getTemplate(); + var inPorts = Skin_1.default.getPortsWithPrefix(template, 'in'); + var outPorts = Skin_1.default.getPortsWithPrefix(template, 'out'); + if (this.inputPorts.length > this.outputPorts.length) { + var gap = Number(inPorts[1][1]['s:y']) - Number(inPorts[0][1]['s:y']); + return Number(template[1]['s:height']) + gap * (this.inputPorts.length - 2); + } + if (outPorts.length > 1) { + var gap = Number(outPorts[1][1]['s:y']) - Number(outPorts[0][1]['s:y']); + return Number(template[1]['s:height']) + gap * (this.outputPorts.length - 2); + } + return Number(template[1]['s:height']); + }; + return Cell; + }()); + exports.default = Cell; + function setGenericSize(tempclone, height) { + onml.traverse(tempclone, { + enter: function (node) { + if (node.name === 'rect' && node.attr['s:generic'] === 'body') { + node.attr.height = height; + } + }, + }); + } + function setTextAttribute(tempclone, attribute, value) { + onml.traverse(tempclone, { + enter: function (node) { + if (node.name === 'text' && node.attr['s:attribute'] === attribute) { + node.full[2] = value; + } + }, + }); + } + function setClass(tempclone, searchKey, className) { + onml.traverse(tempclone, { + enter: function (node) { + var currentClass = node.attr.class; + if (currentClass && currentClass.includes(searchKey)) { + node.attr.class = currentClass.replace(searchKey, className); + } + }, + }); + } + function getBits(signals, indicesString) { + var index = indicesString.indexOf(':'); + // is it the whole thing? + if (index === -1) { + return [signals[Number(indicesString)]]; + } + else { + var start = indicesString.slice(0, index); + var end = indicesString.slice(index + 1); + var slice = signals.slice(Number(start), Number(end) + 1); + return slice; + } + } + + }, { "./FlatModule": 27, "./Port": 28, "./Skin": 29, "./YosysModel": 30, "clone": 98, "lodash": 102, "onml": 104 }], 27: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.removeDups = exports.addToDefaultDict = exports.arrayToBitstring = exports.FlatModule = void 0; + var Skin_1 = require("./Skin"); + var Cell_1 = require("./Cell"); + var _ = require("lodash"); + var FlatModule = /** @class */ (function () { + function FlatModule(netlist) { + var _this = this; + this.moduleName = null; + _.forEach(netlist.modules, function (mod, name) { + if (mod.attributes && Number(mod.attributes.top) === 1) { + _this.moduleName = name; + } + }); + // Otherwise default the first one in the file... + if (this.moduleName == null) { + + this.moduleName = Object.keys(netlist.modules)[0]; + } + var top = netlist.modules[this.moduleName]; + var ports = _.map(top.ports, Cell_1.default.fromPort); + var cells = _.map(top.cells, function (c, key) { return Cell_1.default.fromYosysCell(c, key); }); + this.nodes = cells.concat(ports); + // populated by createWires + this.wires = []; + } + // converts input ports with constant assignments to constant nodes + FlatModule.prototype.addConstants = function () { + // find the maximum signal number + var maxNum = this.nodes.reduce((function (acc, v) { return v.maxOutVal(acc); }), -1); + // add constants to nodes + var signalsByConstantName = {}; + var cells = []; + this.nodes.forEach(function (n) { + maxNum = n.findConstants(signalsByConstantName, maxNum, cells); + }); + this.nodes = this.nodes.concat(cells); + }; + // solves for minimal bus splits and joins and adds them to module + FlatModule.prototype.addSplitsJoins = function () { + var allInputs = _.flatMap(this.nodes, function (n) { return n.inputPortVals(); }); + var allOutputs = _.flatMap(this.nodes, function (n) { return n.outputPortVals(); }); + var allInputsCopy = allInputs.slice(); + var splits = {}; + var joins = {}; + allInputs.forEach(function (input) { + gather(allOutputs, allInputsCopy, input, 0, input.length, splits, joins); + }); + this.nodes = this.nodes.concat(_.map(joins, function (joinOutput, joinInputs) { + return Cell_1.default.fromJoinInfo(joinInputs, joinOutput); + })).concat(_.map(splits, function (splitOutputs, splitInput) { + return Cell_1.default.fromSplitInfo(splitInput, splitOutputs); + })); + }; + // search through all the ports to find all of the wires + FlatModule.prototype.createWires = function () { + var layoutProps = Skin_1.default.getProperties(); + var ridersByNet = {}; + var driversByNet = {}; + var lateralsByNet = {}; + this.nodes.forEach(function (n) { + n.collectPortsByDirection(ridersByNet, driversByNet, lateralsByNet, layoutProps.genericsLaterals); + }); + // list of unique nets + var nets = removeDups(_.keys(ridersByNet).concat(_.keys(driversByNet)).concat(_.keys(lateralsByNet))); + var wires = nets.map(function (net) { + var drivers = driversByNet[net] || []; + var riders = ridersByNet[net] || []; + var laterals = lateralsByNet[net] || []; + var wire = { netName: net, drivers: drivers, riders: riders, laterals: laterals }; + drivers.concat(riders).concat(laterals).forEach(function (port) { + port.wire = wire; + }); + return wire; + }); + this.wires = wires; + }; + return FlatModule; + }()); + exports.FlatModule = FlatModule; + // returns a string that represents the values of the array of integers + // [1, 2, 3] -> ',1,2,3,' + function arrayToBitstring(bitArray) { + var ret = ''; + bitArray.forEach(function (bit) { + var sbit = String(bit); + if (ret === '') { + ret = sbit; + } + else { + ret += ',' + sbit; + } + }); + return ',' + ret + ','; + } + exports.arrayToBitstring = arrayToBitstring; + // returns whether needle is a substring of haystack + function arrayContains(needle, haystack) { + return (haystack.indexOf(needle) > -1); + } + // returns the index of the string that contains a substring + // given arrhaystack, an array of strings + function indexOfContains(needle, arrhaystack) { + return _.findIndex(arrhaystack, function (haystack) { + return arrayContains(needle, haystack); + }); + } + function addToDefaultDict(dict, key, value) { + if (dict[key] === undefined) { + dict[key] = [value]; + } + else { + dict[key].push(value); + } + } + exports.addToDefaultDict = addToDefaultDict; + // string (for labels), that represents an index + // or range of indices. + function getIndicesString(bitstring, query, start) { + var splitStart = _.max([bitstring.indexOf(query), start]); + var startIndex = bitstring.substring(0, splitStart).split(',').length - 1; + var endIndex = startIndex + query.split(',').length - 3; + if (startIndex === endIndex) { + return String(startIndex); + } + else { + return String(startIndex) + ':' + String(endIndex); + } + } + // gather splits and joins + function gather(inputs, // all inputs + outputs, // all outputs + toSolve, // an input array we are trying to solve + start, // index of toSolve to start from + end, // index of toSolve to end at + splits, // container collecting the splits + joins) { + // remove myself from outputs list if present + var outputIndex = outputs.indexOf(toSolve); + if (outputIndex !== -1) { + outputs.splice(outputIndex, 1); + } + // This toSolve is compconste + if (start >= toSolve.length || end - start < 2) { + return; + } + var query = toSolve.slice(start, end); + // are there are perfect matches? + if (arrayContains(query, inputs)) { + if (query !== toSolve) { + addToDefaultDict(joins, toSolve, getIndicesString(toSolve, query, start)); + } + gather(inputs, outputs, toSolve, end - 1, toSolve.length, splits, joins); + return; + } + var index = indexOfContains(query, inputs); + // are there any partial matches? + if (index !== -1) { + if (query !== toSolve) { + addToDefaultDict(joins, toSolve, getIndicesString(toSolve, query, start)); + } + // found a split + addToDefaultDict(splits, inputs[index], getIndicesString(inputs[index], query, 0)); + // we can match to this now + inputs.push(query); + gather(inputs, outputs, toSolve, end - 1, toSolve.length, splits, joins); + return; + } + // are there any output matches? + if (indexOfContains(query, outputs) !== -1) { + if (query !== toSolve) { + // add to join + addToDefaultDict(joins, toSolve, getIndicesString(toSolve, query, start)); + } + // gather without outputs + gather(inputs, [], query, 0, query.length, splits, joins); + inputs.push(query); + return; + } + gather(inputs, outputs, toSolve, start, start + query.slice(0, -1).lastIndexOf(',') + 1, splits, joins); + } + function removeDups(inStrs) { + var map = {}; + inStrs.forEach(function (str) { + map[str] = true; + }); + return _.keys(map); + } + exports.removeDups = removeDups; + + }, { "./Cell": 26, "./Skin": 29, "lodash": 102 }], 28: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Port = void 0; + var Cell_1 = require("./Cell"); + var _ = require("lodash"); + var Port = /** @class */ (function () { + function Port(key, value) { + this.key = key; + this.value = value; + } + Object.defineProperty(Port.prototype, "Key", { + get: function () { + return this.key; + }, + enumerable: false, + configurable: true + }); + Port.prototype.keyIn = function (pids) { + return _.includes(pids, this.key); + }; + Port.prototype.maxVal = function () { + return _.max(_.map(this.value, function (v) { return Number(v); })); + }; + Port.prototype.valString = function () { + return ',' + this.value.join() + ','; + }; + Port.prototype.findConstants = function (sigsByConstantName, maxNum, constantCollector) { + var _this = this; + var constNameCollector = ''; + var constNumCollector = []; + var portSigs = this.value; + portSigs.forEach(function (portSig, portSigIndex) { + // is constant? + if (portSig === '0' || portSig === '1') { + maxNum += 1; + constNameCollector += portSig; + // replace the constant with new signal num + portSigs[portSigIndex] = maxNum; + constNumCollector.push(maxNum); + // string of constants ended before end of p.value + } + else if (constNumCollector.length > 0) { + _this.assignConstant(constNameCollector, constNumCollector, portSigIndex, sigsByConstantName, constantCollector); + // reset name and num collectors + constNameCollector = ''; + constNumCollector = []; + } + }); + if (constNumCollector.length > 0) { + this.assignConstant(constNameCollector, constNumCollector, portSigs.length, sigsByConstantName, constantCollector); + } + return maxNum; + }; + Port.prototype.getGenericElkPort = function (index, templatePorts, dir) { + var nkey = this.parentNode.Key; + var type = this.parentNode.getTemplate()[1]['s:type']; + if (index === 0) { + var ret = { + id: nkey + '.' + this.key, + width: 1, + height: 1, + x: Number(templatePorts[0][1]['s:x']), + y: Number(templatePorts[0][1]['s:y']), + }; + if ((type === 'generic' || type === 'join') && dir === 'in') { + ret.labels = [{ + id: nkey + '.' + this.key + '.label', + text: this.key, + x: Number(templatePorts[0][2][1].x) - 10, + y: Number(templatePorts[0][2][1].y) - 6, + width: (6 * this.key.length), + height: 11, + }]; + } + if ((type === 'generic' || type === 'split') && dir === 'out') { + ret.labels = [{ + id: nkey + '.' + this.key + '.label', + text: this.key, + x: Number(templatePorts[0][2][1].x) - 10, + y: Number(templatePorts[0][2][1].y) - 6, + width: (6 * this.key.length), + height: 11, + }]; + } + return ret; + } + else { + var gap = Number(templatePorts[1][1]['s:y']) - Number(templatePorts[0][1]['s:y']); + var ret = { + id: nkey + '.' + this.key, + width: 1, + height: 1, + x: Number(templatePorts[0][1]['s:x']), + y: (index) * gap + Number(templatePorts[0][1]['s:y']), + }; + if (type === 'generic') { + ret.labels = [{ + id: nkey + '.' + this.key + '.label', + text: this.key, + x: Number(templatePorts[0][2][1].x) - 10, + y: Number(templatePorts[0][2][1].y) - 6, + width: (6 * this.key.length), + height: 11, + }]; + } + return ret; + } + }; + Port.prototype.assignConstant = function (nameCollector, constants, currIndex, signalsByConstantName, constantCollector) { + var _this = this; + // we've been appending to nameCollector, so reverse to get const name + var constName = nameCollector.split('').reverse().join(''); + // if the constant has already been used + if (signalsByConstantName.hasOwnProperty(constName)) { + var constSigs = signalsByConstantName[constName]; + // go back and fix signal values + var constLength_1 = constSigs.length; + constSigs.forEach(function (constSig, constIndex) { + // i is where in port_signals we need to update + var i = currIndex - constLength_1 + constIndex; + _this.value[i] = constSig; + }); + } + else { + constantCollector.push(Cell_1.default.fromConstantInfo(constName, constants)); + signalsByConstantName[constName] = constants; + } + }; + return Port; + }()); + exports.Port = Port; + + }, { "./Cell": 26, "lodash": 102 }], 29: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Skin = void 0; + var onml = require("onml"); + var _ = require("lodash"); + var Skin; + (function (Skin) { + Skin.skin = null; + function getPortsWithPrefix(template, prefix) { + var ports = _.filter(template, function (e) { + try { + if (e instanceof Array && e[0] === 'g') { + return e[1]['s:pid'].startsWith(prefix); + } + } + catch (exception) { + // Do nothing if the SVG group doesn't have a pin id. + } + }); + return ports; + } + Skin.getPortsWithPrefix = getPortsWithPrefix; + function filterPortPids(template, filter) { + var ports = _.filter(template, function (element) { + var tag = element[0]; + if (element instanceof Array && tag === 'g') { + var attrs = element[1]; + return filter(attrs); + } + return false; + }); + return ports.map(function (port) { + return port[1]['s:pid']; + }); + } + function getInputPids(template) { + return filterPortPids(template, function (attrs) { + if (attrs['s:position']) { + return attrs['s:position'] === 'top'; + } + return false; + }); + } + Skin.getInputPids = getInputPids; + function getOutputPids(template) { + return filterPortPids(template, function (attrs) { + if (attrs['s:position']) { + return attrs['s:position'] === 'bottom'; + } + return false; + }); + } + Skin.getOutputPids = getOutputPids; + function getLateralPortPids(template) { + return filterPortPids(template, function (attrs) { + if (attrs['s:dir']) { + return attrs['s:dir'] === 'lateral'; + } + if (attrs['s:position']) { + return attrs['s:position'] === 'left' || + attrs['s:position'] === 'right'; + } + return false; + }); + } + Skin.getLateralPortPids = getLateralPortPids; + function findSkinType(type) { + var ret = null; + onml.traverse(Skin.skin, { + enter: function (node, parent) { + if (node.name === 's:alias' && node.attr.val === type) { + ret = parent; + } + }, + }); + if (ret == null) { + onml.traverse(Skin.skin, { + enter: function (node) { + if (node.attr['s:type'] === 'generic') { + ret = node; + } + }, + }); + } + return ret.full; + } + Skin.findSkinType = findSkinType; + function getLowPriorityAliases() { + var ret = []; + onml.t(Skin.skin, { + enter: function (node) { + if (node.name === 's:low_priority_alias') { + ret.push(node.attr.value); + } + }, + }); + return ret; + } + Skin.getLowPriorityAliases = getLowPriorityAliases; + function getProperties() { + var vals; + onml.t(Skin.skin, { + enter: function (node) { + if (node.name === 's:properties') { + vals = _.mapValues(node.attr, function (val) { + if (!isNaN(Number(val))) { + return Number(val); + } + if (val === 'true') { + return true; + } + if (val === 'false') { + return false; + } + return val; + }); + } + else if (node.name === 's:layoutEngine') { + vals.layoutEngine = node.attr; + } + }, + }); + if (!vals.layoutEngine) { + vals.layoutEngine = {}; + } + return vals; + } + Skin.getProperties = getProperties; + })(Skin = exports.Skin || (exports.Skin = {})); + exports.default = Skin; + + }, { "lodash": 102, "onml": 104 }], 30: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var Yosys; + (function (Yosys) { + var ConstantVal; + (function (ConstantVal) { + ConstantVal["Zero"] = "0"; + ConstantVal["One"] = "1"; + ConstantVal["X"] = "x"; + })(ConstantVal || (ConstantVal = {})); + var Direction; + (function (Direction) { + Direction["Input"] = "input"; + Direction["Output"] = "output"; + })(Direction = Yosys.Direction || (Yosys.Direction = {})); + function getInputPortPids(cell) { + if (cell.port_directions) { + return Object.keys(cell.port_directions).filter(function (k) { + return cell.port_directions[k] === Direction.Input; + }); + } + return []; + } + Yosys.getInputPortPids = getInputPortPids; + function getOutputPortPids(cell) { + if (cell.port_directions) { + return Object.keys(cell.port_directions).filter(function (k) { + return cell.port_directions[k] === Direction.Output; + }); + } + return []; + } + Yosys.getOutputPortPids = getOutputPortPids; + var HideName; + (function (HideName) { + HideName[HideName["Hide"] = 0] = "Hide"; + HideName[HideName["NoHide"] = 1] = "NoHide"; + })(HideName || (HideName = {})); + })(Yosys || (Yosys = {})); + exports.default = Yosys; + + }, {}], 31: [function (require, module, exports) { + "use strict"; + var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.removeDummyEdges = void 0; + var elkGraph_1 = require("./elkGraph"); + var Skin_1 = require("./Skin"); + var _ = require("lodash"); + var onml = require("onml"); + var WireDirection; + (function (WireDirection) { + WireDirection[WireDirection["Up"] = 0] = "Up"; + WireDirection[WireDirection["Down"] = 1] = "Down"; + WireDirection[WireDirection["Left"] = 2] = "Left"; + WireDirection[WireDirection["Right"] = 3] = "Right"; + })(WireDirection || (WireDirection = {})); + function drawModule(g, module) { + var nodes = module.nodes.map(function (n) { + var kchild = _.find(g.children, function (c) { return c.id === n.Key; }); + return n.render(kchild); + }); + removeDummyEdges(g); + var lines = _.flatMap(g.edges, function (e) { + var netId = elkGraph_1.ElkModel.wireNameLookup[e.id]; + var numWires = netId.split(',').length - 2; + var lineStyle = 'stroke-width: ' + (numWires > 1 ? 2 : 1); + var netName = 'net_' + netId.slice(1, netId.length - 1) + ' width_' + numWires; + return _.flatMap(e.sections, function (s) { + var startPoint = s.startPoint; + s.bendPoints = s.bendPoints || []; + var bends = s.bendPoints.map(function (b) { + var l = ['line', { + x1: startPoint.x, + x2: b.x, + y1: startPoint.y, + y2: b.y, + class: netName, + style: lineStyle, + }]; + startPoint = b; + return l; + }); + if (e.junctionPoints) { + var circles = e.junctionPoints.map(function (j) { + return ['circle', { + cx: j.x, + cy: j.y, + r: (numWires > 1 ? 3 : 2), + style: 'fill:#000', + class: netName, + }]; + }); + bends = bends.concat(circles); + } + var line = [['line', { + x1: startPoint.x, + x2: s.endPoint.x, + y1: startPoint.y, + y2: s.endPoint.y, + class: netName, + style: lineStyle, + }]]; + return bends.concat(line); + }); + }); + var labels; + for (var index in g.edges) { + if (g.edges.hasOwnProperty(index)) { + var e = g.edges[index]; + var netId = elkGraph_1.ElkModel.wireNameLookup[e.id]; + var numWires = netId.split(',').length - 2; + var netName = 'net_' + netId.slice(1, netId.length - 1) + + ' width_' + numWires + + ' busLabel_' + numWires; + if (e.labels !== undefined && + e.labels[0] !== undefined && + e.labels[0].text !== undefined) { + var label = [ + ['rect', + { + x: e.labels[0].x + 1, + y: e.labels[0].y - 1, + width: (e.labels[0].text.length + 2) * 6 - 2, + height: 9, + class: netName, + style: 'fill: white; stroke: none', + }, + ], ['text', + { + x: e.labels[0].x, + y: e.labels[0].y + 7, + class: netName, + }, + '/' + e.labels[0].text + '/', + ], + ]; + if (labels !== undefined) { + labels = labels.concat(label); + } + else { + labels = label; + } + } + } + } + if (labels !== undefined && labels.length > 0) { + lines = lines.concat(labels); + } + var svgAttrs = Skin_1.default.skin[1]; + svgAttrs.width = g.width.toString(); + svgAttrs.height = g.height.toString(); + var styles = ['style', {}, '']; + onml.t(Skin_1.default.skin, { + enter: function (node) { + if (node.name === 'style') { + styles[2] += node.full[2]; + } + }, + }); + var elements = __spreadArrays([styles], nodes, lines); + var ret = __spreadArrays(['svg', svgAttrs], elements); + return onml.s(ret); + } + exports.default = drawModule; + function which_dir(start, end) { + if (end.x === start.x && end.y === start.y) { + throw new Error('start and end are the same'); + } + if (end.x !== start.x && end.y !== start.y) { + throw new Error('start and end arent orthogonal'); + } + if (end.x > start.x) { + return WireDirection.Right; + } + if (end.x < start.x) { + return WireDirection.Left; + } + if (end.y > start.y) { + return WireDirection.Down; + } + if (end.y < start.y) { + return WireDirection.Up; + } + throw new Error('unexpected direction'); + } + function findBendNearDummy(net, dummyIsSource, dummyLoc) { + var candidates = net.map(function (edge) { + var bends = edge.sections[0].bendPoints || [null]; + if (dummyIsSource) { + return _.first(bends); + } + else { + return _.last(bends); + } + }).filter(function (p) { return p !== null; }); + return _.minBy(candidates, function (pt) { + return Math.abs(dummyLoc.x - pt.x) + Math.abs(dummyLoc.y - pt.y); + }); + } + function removeDummyEdges(g) { + // go through each edge group for each dummy + var dummyNum = 0; + var _loop_1 = function () { + var dummyId = '$d_' + String(dummyNum); + // find all edges connected to this dummy + var edgeGroup = _.filter(g.edges, function (e) { + return e.source === dummyId || e.target === dummyId; + }); + if (edgeGroup.length === 0) { + return "break"; + } + var dummyIsSource; + var dummyLoc = void 0; + var firstEdge = edgeGroup[0]; + if (firstEdge.source === dummyId) { + dummyIsSource = true; + dummyLoc = firstEdge.sections[0].startPoint; + } + else { + dummyIsSource = false; + dummyLoc = firstEdge.sections[0].endPoint; + } + var newEnd = findBendNearDummy(edgeGroup, dummyIsSource, dummyLoc); + for (var _i = 0, edgeGroup_1 = edgeGroup; _i < edgeGroup_1.length; _i++) { + var edge = edgeGroup_1[_i]; + var e = edge; + var section = e.sections[0]; + if (dummyIsSource) { + section.startPoint = newEnd; + if (section.bendPoints) { + section.bendPoints.shift(); + } + } + else { + section.endPoint = newEnd; + if (section.bendPoints) { + section.bendPoints.pop(); + } + } + } + // delete junction point if necessary + var directions = new Set(_.flatMap(edgeGroup, function (edge) { + var section = edge.sections[0]; + if (dummyIsSource) { + // get first bend or endPoint + if (section.bendPoints && section.bendPoints.length > 0) { + return [section.bendPoints[0]]; + } + return section.endPoint; + } + else { + if (section.bendPoints && section.bendPoints.length > 0) { + return [_.last(section.bendPoints)]; + } + return section.startPoint; + } + }).map(function (pt) { + if (pt.x > newEnd.x) { + return WireDirection.Right; + } + if (pt.x < newEnd.x) { + return WireDirection.Left; + } + if (pt.y > newEnd.y) { + return WireDirection.Down; + } + return WireDirection.Up; + })); + if (directions.size < 3) { + // remove junctions at newEnd + edgeGroup.forEach(function (edge) { + if (edge.junctionPoints) { + edge.junctionPoints = edge.junctionPoints.filter(function (junct) { + return !_.isEqual(junct, newEnd); + }); + } + }); + } + dummyNum += 1; + }; + // loop until we can't find an edge group or we hit 10,000 + while (dummyNum < 10000) { + var state_1 = _loop_1(); + if (state_1 === "break") + break; + } + } + exports.removeDummyEdges = removeDummyEdges; + + }, { "./Skin": 29, "./elkGraph": 32, "lodash": 102, "onml": 104 }], 32: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.buildElkGraph = exports.ElkModel = void 0; + var _ = require("lodash"); + var ElkModel; + (function (ElkModel) { + ElkModel.wireNameLookup = {}; + ElkModel.dummyNum = 0; + ElkModel.edgeIndex = 0; + })(ElkModel = exports.ElkModel || (exports.ElkModel = {})); + function buildElkGraph(module) { + var children = module.nodes.map(function (n) { + return n.buildElkChild(); + }); + ElkModel.edgeIndex = 0; + ElkModel.dummyNum = 0; + var edges = _.flatMap(module.wires, function (w) { + var numWires = w.netName.split(',').length - 2; + // at least one driver and at least one rider and no laterals + if (w.drivers.length > 0 && w.riders.length > 0 && w.laterals.length === 0) { + var ret = []; + route(w.drivers, w.riders, ret, numWires); + return ret; + // at least one driver or rider and at least one lateral + } + else if (w.drivers.concat(w.riders).length > 0 && w.laterals.length > 0) { + var ret = []; + route(w.drivers, w.laterals, ret, numWires); + route(w.laterals, w.riders, ret, numWires); + return ret; + // at least two drivers and no riders + } + else if (w.riders.length === 0 && w.drivers.length > 1) { + // create a dummy node and add it to children + var dummyId_1 = addDummy(children); + ElkModel.dummyNum += 1; + var dummyEdges = w.drivers.map(function (driver) { + var sourceParentKey = driver.parentNode.Key; + var id = 'e' + String(ElkModel.edgeIndex); + ElkModel.edgeIndex += 1; + var d = { + id: id, + source: sourceParentKey, + sourcePort: sourceParentKey + '.' + driver.key, + target: dummyId_1, + targetPort: dummyId_1 + '.p', + }; + ElkModel.wireNameLookup[id] = driver.wire.netName; + return d; + }); + return dummyEdges; + // at least one rider and no drivers + } + else if (w.riders.length > 1 && w.drivers.length === 0) { + // create a dummy node and add it to children + var dummyId_2 = addDummy(children); + ElkModel.dummyNum += 1; + var dummyEdges = w.riders.map(function (rider) { + var sourceParentKey = rider.parentNode.Key; + var id = 'e' + String(ElkModel.edgeIndex); + ElkModel.edgeIndex += 1; + var edge = { + id: id, + source: dummyId_2, + sourcePort: dummyId_2 + '.p', + target: sourceParentKey, + targetPort: sourceParentKey + '.' + rider.key, + }; + ElkModel.wireNameLookup[id] = rider.wire.netName; + return edge; + }); + return dummyEdges; + } + else if (w.laterals.length > 1) { + var source_1 = w.laterals[0]; + var sourceParentKey_1 = source_1.parentNode.Key; + var lateralEdges = w.laterals.slice(1).map(function (lateral) { + var lateralParentKey = lateral.parentNode.Key; + var id = 'e' + String(ElkModel.edgeIndex); + ElkModel.edgeIndex += 1; + var edge = { + id: id, + source: sourceParentKey_1, + sourcePort: sourceParentKey_1 + '.' + source_1.key, + target: lateralParentKey, + targetPort: lateralParentKey + '.' + lateral.key, + }; + ElkModel.wireNameLookup[id] = lateral.wire.netName; + return edge; + }); + return lateralEdges; + } + // for only one driver or only one rider, don't create any edges + return []; + }); + return { + id: module.moduleName, + children: children, + edges: edges, + }; + } + exports.buildElkGraph = buildElkGraph; + function addDummy(children) { + var dummyId = '$d_' + String(ElkModel.dummyNum); + var child = { + id: dummyId, + width: 0, + height: 0, + ports: [{ + id: dummyId + '.p', + width: 0, + height: 0, + }], + layoutOptions: { 'org.eclipse.elk.portConstraints': 'FIXED_SIDE' }, + }; + children.push(child); + return dummyId; + } + function route(sourcePorts, targetPorts, edges, numWires) { + var newEdges = (_.flatMap(sourcePorts, function (sourcePort) { + var sourceParentKey = sourcePort.parentNode.key; + var sourceKey = sourceParentKey + '.' + sourcePort.key; + var edgeLabel; + if (numWires > 1) { + edgeLabel = [{ + id: '', + text: String(numWires), + width: 4, + height: 6, + x: 0, + y: 0, + layoutOptions: { + 'org.eclipse.elk.edgeLabels.inline': true, + }, + }]; + } + return targetPorts.map(function (targetPort) { + var targetParentKey = targetPort.parentNode.key; + var targetKey = targetParentKey + '.' + targetPort.key; + var id = 'e' + ElkModel.edgeIndex; + var edge = { + id: id, + labels: edgeLabel, + sources: [sourceKey], + targets: [targetKey], + }; + ElkModel.wireNameLookup[id] = targetPort.wire.netName; + if (sourcePort.parentNode.type !== '$dff') { + edge.layoutOptions = { + 'org.eclipse.elk.layered.priority.direction': 10, + 'org.eclipse.elk.edge.thickness': (numWires > 1 ? 2 : 1) + }; + } + else { + edge.layoutOptions = { 'org.eclipse.elk.edge.thickness': (numWires > 1 ? 2 : 1) }; + } + ElkModel.edgeIndex += 1; + return edge; + }); + })); + edges.push.apply(edges, newEdges); + } + + }, { "lodash": 102 }], 33: [function (require, module, exports) { + (function (global) { + (function () { + 'use strict'; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.render = exports.dumpLayout = void 0; + var ELK = (typeof window !== "undefined" ? window['ELK'] : typeof global !== "undefined" ? global['ELK'] : null); + var onml = require("onml"); + var FlatModule_1 = require("./FlatModule"); + var Skin_1 = require("./Skin"); + var elkGraph_1 = require("./elkGraph"); + var drawModule_1 = require("./drawModule"); + var elk = new ELK(); + + function createFlatModule(skinData, yosysNetlist) { + Skin_1.default.skin = onml.p(skinData); + var layoutProps = Skin_1.default.getProperties(); + var flatModule = new FlatModule_1.FlatModule(yosysNetlist); + // this can be skipped if there are no 0's or 1's + if (layoutProps.constants !== false) { + flatModule.addConstants(); + } + // this can be skipped if there are no splits or joins + if (layoutProps.splitsAndJoins !== false) { + flatModule.addSplitsJoins(); + } + flatModule.createWires(); + return flatModule; + } + exports.createFlatModule = createFlatModule; + + function dumpLayout(skinData, yosysNetlist, prelayout, done) { + var flatModule = createFlatModule(skinData, yosysNetlist); + var kgraph = elkGraph_1.buildElkGraph(flatModule); + if (prelayout) { + done(null, JSON.stringify(kgraph, null, 2)); + return; + } + var layoutProps = Skin_1.default.getProperties(); + var promise = elk.layout(kgraph, { layoutOptions: layoutProps.layoutEngine }); + promise.then(function (graph) { + done(null, JSON.stringify(graph, null, 2)); + }).catch(function (reason) { + throw Error(reason); + }); + } + exports.dumpLayout = dumpLayout; + + function render(skinData, yosysNetlist, done, elkData) { + var flatModule = createFlatModule(skinData, yosysNetlist); + var kgraph = elkGraph_1.buildElkGraph(flatModule); + var layoutProps = Skin_1.default.getProperties(); + var promise; + // if we already have a layout then use it + if (elkData) { + promise = new Promise(function (resolve) { + drawModule_1.default(elkData, flatModule); + resolve(); + }); + } + else { + // otherwise use ELK to generate the layout + promise = elk.layout(kgraph, { layoutOptions: layoutProps.layoutEngine }) + .then(function (g) { return drawModule_1.default(g, flatModule); }) + // tslint:disable-next-line:no-console + .catch(function (e) { console.error(e); }); + } + // support legacy callback style + if (typeof done === 'function') { + promise.then(function (output) { + done(null, output); + return output; + }).catch(function (reason) { + throw Error(reason); + }); + } + return promise; + } + exports.render = render; + + }).call(this) + }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + }, { "./FlatModule": 27, "./Skin": 29, "./drawModule": 31, "./elkGraph": 32, "onml": 104 }], 34: [function (require, module, exports) { + (function (Buffer) { + (function () { + const lib = require('../built'); + + const json5 = require('json5'); + const Ajv = require('ajv'); + var ajv = new Ajv({ allErrors: true }); + require('ajv-errors')(ajv); + + const schema = Buffer("ewogICJkZXNjcmlwdGlvbiI6ICJKU09OIFNjaGVtYSBZb3N5cyBuZXRsaXN0cyBKU09OIGZvcm1hdCIsCiAgInR5cGUiOiAib2JqZWN0IiwKICAvLyBhbiBlbXB0eSBvYmplY3QgaXMgaW52YWxpZAogICJyZXF1aXJlZCI6IFsibW9kdWxlcyJdLAogICJlcnJvck1lc3NhZ2UiOiB7CiAgICAidHlwZSI6ICJuZXRsaXN0IG11c3QgYmUgYSBKU09OIG9iamVjdCIsCiAgICAicmVxdWlyZWQiOiAibmV0bGlzdCBtdXN0IGhhdmUgYSBtb2R1bGVzIHByb3BlcnR5IgogIH0sCiAgInByb3BlcnRpZXMiOiB7CiAgICAibW9kdWxlcyI6IHsKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgLy8gdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgbW9kdWxlCiAgICAgICJtaW5Qcm9wZXJ0aWVzIjogMSwKICAgICAgICAiZXJyb3JNZXNzYWdlIjogewogICAgICAgICAgInR5cGUiOiAibmV0bGlzdCBtb2R1bGVzIG11c3QgYmUgb2JqZWN0cyIsCiAgICAgICAgICAibWluUHJvcGVydGllcyI6ICJuZXRsaXN0IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbW9kdWxlIgogICAgICAgIH0sCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IHsKICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgInBvcnRzIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAvLyBhbGwgcG9ydHMgbXVzdCBoYXZlIGJpdHMgYW5kIGEgZGlyZWN0aW9uCiAgICAgICAgICAgICAgInJlcXVpcmVkIjogWyJkaXJlY3Rpb24iLCAiYml0cyJdLAogICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAgImRpcmVjdGlvbiI6IHsKICAgICAgICAgICAgICAgICAgImVudW0iOiBbImlucHV0IiwgIm91dHB1dCIsICJpbm91dCJdCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImJpdHMiOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAgICAgLy8gYml0cyBjYW4gYmUgdGhlIHN0cmluZyAiMCIsICIxIiwgIngiLCAieiIsIG9yIGEgbnVtYmVyLgogICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAgICAgIm9uZU9mIjpbeyJ0eXBlIjoibnVtYmVyIn0sIHsiZW51bSI6WyIwIiwiMSIsIngiLCJ6Il19XQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImNlbGxzIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAvLyBhbGwgY2VsbHMgbXVzdCBoYXZlIGEgdHlwZSBhbmQgY29ubmVjdGlvbnMKICAgICAgICAgICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgICAgICAgICAidHlwZSIsCiAgICAgICAgICAgICAgICAiY29ubmVjdGlvbnMiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjp7InR5cGUiOiJzdHJpbmcifSwKICAgICAgICAgICAgICAgICJjb25uZWN0aW9ucyI6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjoiYXJyYXkiLAogICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICAgICAgICJvbmVPZiI6W3sidHlwZSI6Im51bWJlciJ9LCB7ImVudW0iOlsiMCIsIjEiLCJ4IiwieiJdfV0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAvLyBwb3J0IGRpcmVjdGlvbnMgYXJlIG9wdGlvbmFsCiAgICAgICAgICAgICAgICAicG9ydF9kaXJlY3Rpb25zIjp7CiAgICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsiaW5wdXQiLCAib3V0cHV0IiwgImlub3V0Il0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIC8vIG5ldGxpc3RzdmcgZG9lc24ndCB1c2UgdGhlc2UgeWV0CiAgICAgICAgICAgICAgICAiaGlkZV9uYW1lIjogeyJlbnVtIjpbMCwgMV19LAogICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiB7InR5cGUiOiAib2JqZWN0In0sCiAgICAgICAgICAgICAgICAiYXR0cmlidXRlcyI6IHsidHlwZSI6ICJvYmplY3QifQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIC8vIG5vdCB5ZXQgdXNlZCBieSBuZXRsaXN0c3ZnCiAgICAgICAgICAibmV0bmFtZXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAgImJpdHMiOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAgICAgLy8gYml0cyBjYW4gYmUgdGhlIHN0cmluZyAiMCIsICIxIiwgIngiLCAieiIsIG9yIGEgbnVtYmVyLgogICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAgICAgIm9uZU9mIjogW3sidHlwZSI6ICJudW1iZXIifSwgeyJlbnVtIjogWyIwIiwgIjEiLCAieCIsICJ6Il19XQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImhpZGVfbmFtZSI6IHsiZW51bSI6IFswLCAxXX0sCiAgICAgICAgICAgICAgICAiYXR0cmlidXRlcyI6IHsidHlwZSI6ICJvYmplY3QifQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJhdHRyaWJ1dGVzIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAidG9wIjogeyJlbnVtIjogWzAsIDEsICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSJdfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvLyB0aGVyZSBtdXN0IGVpdGhlciBiZSBwb3J0cyBvciBjZWxscyBhdHRyaWJ1dGUKICAgICAgICAiYW55T2YiOiBbeyJyZXF1aXJlZCI6IFsicG9ydHMiXX0seyJyZXF1aXJlZCI6IFsiY2VsbHMiXX1dCiAgICAgIH0KICAgIH0KICB9Cn0K", "base64"); + const analog = "\n \n \n \n\n\n\n\n \n name\n \n \n\n\n\n\t \n\t name\n\t \n\t \n\t\n\n\n \n name\n \n \n\n\n\n\n\n input\n \n \n \n\n\n\n output\n \n \n \n\n\n\n\n\n \n X1\n Xk\n \n \n \n \n\n\n\n \n X1\n Xk\n \n \n \n \n\n\n\n \n X1\n Xu\n \n \n \n \n\n\n\n \n X1\n Xu\n \n \n \n \n\n\n\n \n X1\n XpF\n \n \n \n \n\n\n\n \n X1\n XpF\n \n \n \n \n\n\n\n\n\n \n X1\n XV\n \n \n \n \n \n\n\n\n \n X1\n XA\n \n \n \n \n \n\n\n\n\n\n \n X1\n \n \n \n \n\n\n\n \n X1\n \n \n \n \n\n\n\n \n X1\n \n \n \n \n \n \n\n\n\n \n X1\n \n \n \n \n \n \n\n\n\n \n X1\n \n \n \n \n \n \n \n \n \n\n\n\n \n X1\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n \n X1\n \n \n \n \n \n \n \n \n \n\n\n\n \n X1\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n generic\n \n \n out0\n \n \n out1\n \n \n in0\n \n \n in1\n \n\n\n\n\n\n \n X1\n \n \n \n \n \n \n \n \n \n\n\n\n \n X1\n \n \n \n \n\n\n\n \n X1\n \n \n \n \n \n \n \n \n\n\n\n"; + const digital = "\n\n \n \n\n\n\n \n \n \n\n \n\n 0\n 1\n \n \n \n \n\n\n\n \n \n \n\n \n \n \n\n A\n B\n \n \n \n \n\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n and\n\n\n\n \n \n \n \n\n \n \n\n \n \n \n\n nand\n\n\n\n\n \n \n \n \n \n\n \n \n\n \n \n \n\n or\n\n\n\n \n \n \n \n\n \n \n \n\n \n \n \n\n nor\n\n\n\n\n \n \n \n\n \n \n\n \n \n \n\n xor\n\n\n \n \n \n\n \n \n \n\n \n \n \n\n nxor\n\n\n\n\n \n \n \n\n \n \n\n \n \n\n\n\n \n \n\n \n \n \n\n \n\n \n \n \n\n\n\n\n \n\n \n \n \n\n \n \n \n\n\n\n \n\n \n \n \n\n \n \n\n\n\n \n\n \n \n\n \n \n \n\n\n \n\n \n \n\n \n \n\n\n \n \n\n \n \n \n\n \n \n \n\n\n \n \n\n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n\n \n \n \n\n\n \n\n \n \n\n \n \n \n\n\n \n\n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n\n \n \n \n\n\n\n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n\n \n \n \n \n \n \n\n D\n Q\n CLK\n dff\n\n\n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n\n D\n Q\n CLK\n dffs\n\n\n \n \n\n \n \n \n\n \n \n \n \n\n D\n Q\n CLK\n dffn\n\n\n \n \n\n \n \n \n \n \n\n \n \n \n \n\n D\n Q\n CLK\n dffns\n\n\n\n\n \n \n \n \n\n \n\n \n\n \n \n \n \n\n D\n Q\n EN\n dla\n\n\n \n \n \n \n\n \n\n \n \n \n\n \n \n \n \n\n D\n Q\n EN\n dlas\n\n\n \n \n\n \n\n \n\n \n \n \n\n D\n Q\n EN\n dlan\n\n\n \n \n\n \n\n \n \n \n\n \n \n \n\n D\n Q\n EN\n dlans\n\n\n\n\n \n\n \n \n \n\n \n \n \n \n\n\n \n\n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n\n \n \n \n\n\n\n\n \n\n \n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n \n \n \n \n\n \n \n \n\n\n \n\n \n \n \n \n \n \n \n\n \n \n \n\n\n\n\n input\n \n \n \n\n\n output\n \n \n\n \n\n\n constant\n\n \n \n\n \n\n\n\n \n \n\n \n \n hi:lo\n \n \n hi:lo\n \n\n\n\n \n \n \n \n hi:lo\n \n \n hi:lo\n \n\n\n\n\n\n\n generic\n \n \n \n\n \n out0\n \n \n out1\n \n \n in0\n \n \n in1\n \n\n\n"; + + function render(skinData, netlistData, cb) { + // 检测输入的json数据是否合法 + var valid = ajv.validate(json5.parse(schema), netlistData); + if (!valid) { + throw Error(JSON.stringify(ajv.errors, null, 2)); + } + return lib.render(skinData, netlistData, cb); + } + + var example = { + "creator": "Yosys 0.10.0 (git sha1 be9d50d, clang 6.0.0-1ubuntu2 -fPIC -Os)", + "modules": { + "Main": { + "attributes": { + "cells_not_processed": "00000000000000000000000000000001", + "src": "./example.v:25.1-44.10" + }, + "ports": { + "a": { + "direction": "input", + "bits": [2] + }, + "b": { + "direction": "input", + "bits": [3] + }, + "c": { + "direction": "input", + "bits": [4] + }, + "Qus": { + "direction": "output", + "bits": [5] + }, + "Qs": { + "direction": "output", + "bits": [6] + } + }, + "cells": { + "simplified": { + "hide_name": 0, + "type": "Simplified", + "parameters": { + }, + "attributes": { + "module_not_derived": "00000000000000000000000000000001", + "src": "./example.v:37.14-42.4" + }, + "port_directions": { + "Q": "output", + "a": "input", + "b": "input", + "c": "input" + }, + "connections": { + "Q": [6], + "a": [2], + "b": [3], + "c": [4] + } + }, + "unsimplified": { + "hide_name": 0, + "type": "Unsimplified", + "parameters": { + }, + "attributes": { + "module_not_derived": "00000000000000000000000000000001", + "src": "./example.v:30.16-35.4" + }, + "port_directions": { + "Q": "output", + "a": "input", + "b": "input", + "c": "input" + }, + "connections": { + "Q": [5], + "a": [2], + "b": [3], + "c": [4] + } + } + }, + "netnames": { + "Qs": { + "hide_name": 0, + "bits": [6], + "attributes": { + "src": "./example.v:27.15-27.17" + } + }, + "Qus": { + "hide_name": 0, + "bits": [5], + "attributes": { + "src": "./example.v:27.10-27.13" + } + }, + "a": { + "hide_name": 0, + "bits": [2], + "attributes": { + "src": "./example.v:26.9-26.10" + } + }, + "b": { + "hide_name": 0, + "bits": [3], + "attributes": { + "src": "./example.v:26.12-26.13" + } + }, + "c": { + "hide_name": 0, + "bits": [4], + "attributes": { + "src": "./example.v:26.15-26.16" + } + } + } + }, + "Simplified": { + "attributes": { + "cells_not_processed": "00000000000000000000000000000001", + "src": "./example.v:11.1-23.10" + }, + "ports": { + "a": { + "direction": "input", + "bits": [2] + }, + "b": { + "direction": "input", + "bits": [3] + }, + "c": { + "direction": "input", + "bits": [4] + }, + "Q": { + "direction": "output", + "bits": [5] + } + }, + "cells": { + "$and$./example.v:22$7": { + "hide_name": 1, + "type": "$and", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:22.14-22.25" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [3], + "B": [6], + "Y": [5] + } + }, + "$or$./example.v:22$6": { + "hide_name": 1, + "type": "$or", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:22.19-22.24" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [2], + "B": [4], + "Y": [6] + } + } + }, + "netnames": { + "$or$./example.v:22$6_Y": { + "hide_name": 1, + "bits": [6], + "attributes": { + "src": "./example.v:22.19-22.24" + } + }, + "Q": { + "hide_name": 0, + "bits": [5], + "attributes": { + "src": "./example.v:13.10-13.11" + } + }, + "a": { + "hide_name": 0, + "bits": [2], + "attributes": { + "src": "./example.v:12.9-12.10" + } + }, + "b": { + "hide_name": 0, + "bits": [3], + "attributes": { + "src": "./example.v:12.12-12.13" + } + }, + "c": { + "hide_name": 0, + "bits": [4], + "attributes": { + "src": "./example.v:12.15-12.16" + } + } + } + }, + "Unsimplified": { + "attributes": { + "cells_not_processed": "00000000000000000000000000000001", + "src": "./example.v:4.1-9.10" + }, + "ports": { + "a": { + "direction": "input", + "bits": [2] + }, + "b": { + "direction": "input", + "bits": [3] + }, + "c": { + "direction": "input", + "bits": [4] + }, + "Q": { + "direction": "output", + "bits": [5] + } + }, + "cells": { + "$and$./example.v:8$1": { + "hide_name": 1, + "type": "$and", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:8.14-8.19" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [2], + "B": [3], + "Y": [6] + } + }, + "$and$./example.v:8$2": { + "hide_name": 1, + "type": "$and", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:8.24-8.29" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [3], + "B": [4], + "Y": [7] + } + }, + "$and$./example.v:8$4": { + "hide_name": 1, + "type": "$and", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:8.23-8.40" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [7], + "B": [8], + "Y": [9] + } + }, + "$or$./example.v:8$3": { + "hide_name": 1, + "type": "$or", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:8.34-8.39" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [3], + "B": [4], + "Y": [8] + } + }, + "$or$./example.v:8$5": { + "hide_name": 1, + "type": "$or", + "parameters": { + "A_SIGNED": "00000000000000000000000000000000", + "A_WIDTH": "00000000000000000000000000000001", + "B_SIGNED": "00000000000000000000000000000000", + "B_WIDTH": "00000000000000000000000000000001", + "Y_WIDTH": "00000000000000000000000000000001" + }, + "attributes": { + "src": "./example.v:8.14-8.41" + }, + "port_directions": { + "A": "input", + "B": "input", + "Y": "output" + }, + "connections": { + "A": [6], + "B": [9], + "Y": [5] + } + } + }, + "netnames": { + "$and$./example.v:8$1_Y": { + "hide_name": 1, + "bits": [6], + "attributes": { + "src": "./example.v:8.14-8.19" + } + }, + "$and$./example.v:8$2_Y": { + "hide_name": 1, + "bits": [7], + "attributes": { + "src": "./example.v:8.24-8.29" + } + }, + "$and$./example.v:8$4_Y": { + "hide_name": 1, + "bits": [9], + "attributes": { + "src": "./example.v:8.23-8.40" + } + }, + "$or$./example.v:8$3_Y": { + "hide_name": 1, + "bits": [8], + "attributes": { + "src": "./example.v:8.34-8.39" + } + }, + "Q": { + "hide_name": 0, + "bits": [5], + "attributes": { + "src": "./example.v:6.10-6.11" + } + }, + "a": { + "hide_name": 0, + "bits": [2], + "attributes": { + "src": "./example.v:5.9-5.10" + } + }, + "b": { + "hide_name": 0, + "bits": [3], + "attributes": { + "src": "./example.v:5.12-5.13" + } + }, + "c": { + "hide_name": 0, + "bits": [4], + "attributes": { + "src": "./example.v:5.15-5.16" + } + } + } + } + } + }; + + module.exports = { + render: render, + parser: lib.createFlatModule, + example: example, + digitalSkin: digital, + analogSkin: analog + }; + }).call(this) + }).call(this, require("buffer").Buffer) + }, { "../built": 33, "ajv": 36, "ajv-errors": 35, "buffer": 3, "json5": 101 }], 35: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const ajv_1 = require("ajv"); + const codegen_1 = require("ajv/dist/compile/codegen"); + const code_1 = require("ajv/dist/compile/codegen/code"); + const validate_1 = require("ajv/dist/compile/validate"); + const errors_1 = require("ajv/dist/compile/errors"); + const names_1 = require("ajv/dist/compile/names"); + const keyword = "errorMessage"; + const used = new ajv_1.Name("emUsed"); + const KEYWORD_PROPERTY_PARAMS = { + required: "missingProperty", + dependencies: "property", + dependentRequired: "property", + }; + const INTERPOLATION = /\$\{[^}]+\}/; + const INTERPOLATION_REPLACE = /\$\{([^}]+)\}/g; + const EMPTY_STR = /^""\s*\+\s*|\s*\+\s*""$/g; + function errorMessage(options) { + return { + keyword, + schemaType: ["string", "object"], + post: true, + code(cxt) { + const { gen, data, schema, schemaValue, it } = cxt; + if (it.createErrors === false) + return; + const sch = schema; + const instancePath = codegen_1.strConcat(names_1.default.instancePath, it.errorPath); + gen.if(ajv_1._`${names_1.default.errors} > 0`, () => { + if (typeof sch == "object") { + const [kwdPropErrors, kwdErrors] = keywordErrorsConfig(sch); + if (kwdErrors) + processKeywordErrors(kwdErrors); + if (kwdPropErrors) + processKeywordPropErrors(kwdPropErrors); + processChildErrors(childErrorsConfig(sch)); + } + const schMessage = typeof sch == "string" ? sch : sch._; + if (schMessage) + processAllErrors(schMessage); + if (!options.keepErrors) + removeUsedErrors(); + }); + function childErrorsConfig({ properties, items }) { + const errors = {}; + if (properties) { + errors.props = {}; + for (const p in properties) + errors.props[p] = []; + } + if (items) { + errors.items = {}; + for (let i = 0; i < items.length; i++) + errors.items[i] = []; + } + return errors; + } + function keywordErrorsConfig(emSchema) { + let propErrors; + let errors; + for (const k in emSchema) { + if (k === "properties" || k === "items") + continue; + const kwdSch = emSchema[k]; + if (typeof kwdSch == "object") { + propErrors || (propErrors = {}); + const errMap = (propErrors[k] = {}); + for (const p in kwdSch) + errMap[p] = []; + } + else { + errors || (errors = {}); + errors[k] = []; + } + } + return [propErrors, errors]; + } + function processKeywordErrors(kwdErrors) { + const kwdErrs = gen.const("emErrors", ajv_1.stringify(kwdErrors)); + const templates = gen.const("templates", getTemplatesCode(kwdErrors, schema)); + gen.forOf("err", names_1.default.vErrors, (err) => gen.if(matchKeywordError(err, kwdErrs), () => gen.code(ajv_1._`${kwdErrs}[${err}.keyword].push(${err})`).assign(ajv_1._`${err}.${used}`, true))); + const { singleError } = options; + if (singleError) { + const message = gen.let("message", ajv_1._`""`); + const paramsErrors = gen.let("paramsErrors", ajv_1._`[]`); + loopErrors((key) => { + gen.if(message, () => gen.code(ajv_1._`${message} += ${typeof singleError == "string" ? singleError : ";"}`)); + gen.code(ajv_1._`${message} += ${errMessage(key)}`); + gen.assign(paramsErrors, ajv_1._`${paramsErrors}.concat(${kwdErrs}[${key}])`); + }); + errors_1.reportError(cxt, { message, params: ajv_1._`{errors: ${paramsErrors}}` }); + } + else { + loopErrors((key) => errors_1.reportError(cxt, { + message: errMessage(key), + params: ajv_1._`{errors: ${kwdErrs}[${key}]}`, + })); + } + function loopErrors(body) { + gen.forIn("key", kwdErrs, (key) => gen.if(ajv_1._`${kwdErrs}[${key}].length`, () => body(key))); + } + function errMessage(key) { + return ajv_1._`${key} in ${templates} ? ${templates}[${key}]() : ${schemaValue}[${key}]`; + } + } + function processKeywordPropErrors(kwdPropErrors) { + const kwdErrs = gen.const("emErrors", ajv_1.stringify(kwdPropErrors)); + const templatesCode = []; + for (const k in kwdPropErrors) { + templatesCode.push([ + k, + getTemplatesCode(kwdPropErrors[k], schema[k]), + ]); + } + const templates = gen.const("templates", gen.object(...templatesCode)); + const kwdPropParams = gen.scopeValue("obj", { + ref: KEYWORD_PROPERTY_PARAMS, + code: ajv_1.stringify(KEYWORD_PROPERTY_PARAMS), + }); + const propParam = gen.let("emPropParams"); + const paramsErrors = gen.let("emParamsErrors"); + gen.forOf("err", names_1.default.vErrors, (err) => gen.if(matchKeywordError(err, kwdErrs), () => { + gen.assign(propParam, ajv_1._`${kwdPropParams}[${err}.keyword]`); + gen.assign(paramsErrors, ajv_1._`${kwdErrs}[${err}.keyword][${err}.params[${propParam}]]`); + gen.if(paramsErrors, () => gen.code(ajv_1._`${paramsErrors}.push(${err})`).assign(ajv_1._`${err}.${used}`, true)); + })); + gen.forIn("key", kwdErrs, (key) => gen.forIn("keyProp", ajv_1._`${kwdErrs}[${key}]`, (keyProp) => { + gen.assign(paramsErrors, ajv_1._`${kwdErrs}[${key}][${keyProp}]`); + gen.if(ajv_1._`${paramsErrors}.length`, () => { + const tmpl = gen.const("tmpl", ajv_1._`${templates}[${key}] && ${templates}[${key}][${keyProp}]`); + errors_1.reportError(cxt, { + message: ajv_1._`${tmpl} ? ${tmpl}() : ${schemaValue}[${key}][${keyProp}]`, + params: ajv_1._`{errors: ${paramsErrors}}`, + }); + }); + })); + } + function processChildErrors(childErrors) { + const { props, items } = childErrors; + if (!props && !items) + return; + const isObj = ajv_1._`typeof ${data} == "object"`; + const isArr = ajv_1._`Array.isArray(${data})`; + const childErrs = gen.let("emErrors"); + let childKwd; + let childProp; + const templates = gen.let("templates"); + if (props && items) { + childKwd = gen.let("emChildKwd"); + gen.if(isObj); + gen.if(isArr, () => { + init(items, schema.items); + gen.assign(childKwd, ajv_1.str`items`); + }, () => { + init(props, schema.properties); + gen.assign(childKwd, ajv_1.str`properties`); + }); + childProp = ajv_1._`[${childKwd}]`; + } + else if (items) { + gen.if(isArr); + init(items, schema.items); + childProp = ajv_1._`.items`; + } + else if (props) { + gen.if(codegen_1.and(isObj, codegen_1.not(isArr))); + init(props, schema.properties); + childProp = ajv_1._`.properties`; + } + gen.forOf("err", names_1.default.vErrors, (err) => ifMatchesChildError(err, childErrs, (child) => gen.code(ajv_1._`${childErrs}[${child}].push(${err})`).assign(ajv_1._`${err}.${used}`, true))); + gen.forIn("key", childErrs, (key) => gen.if(ajv_1._`${childErrs}[${key}].length`, () => { + errors_1.reportError(cxt, { + message: ajv_1._`${key} in ${templates} ? ${templates}[${key}]() : ${schemaValue}${childProp}[${key}]`, + params: ajv_1._`{errors: ${childErrs}[${key}]}`, + }); + gen.assign(ajv_1._`${names_1.default.vErrors}[${names_1.default.errors}-1].instancePath`, ajv_1._`${instancePath} + "/" + ${key}.replace(/~/g, "~0").replace(/\\//g, "~1")`); + })); + gen.endIf(); + function init(children, msgs) { + gen.assign(childErrs, ajv_1.stringify(children)); + gen.assign(templates, getTemplatesCode(children, msgs)); + } + } + function processAllErrors(schMessage) { + const errs = gen.const("emErrs", ajv_1._`[]`); + gen.forOf("err", names_1.default.vErrors, (err) => gen.if(matchAnyError(err), () => gen.code(ajv_1._`${errs}.push(${err})`).assign(ajv_1._`${err}.${used}`, true))); + gen.if(ajv_1._`${errs}.length`, () => errors_1.reportError(cxt, { + message: templateExpr(schMessage), + params: ajv_1._`{errors: ${errs}}`, + })); + } + function removeUsedErrors() { + const errs = gen.const("emErrs", ajv_1._`[]`); + gen.forOf("err", names_1.default.vErrors, (err) => gen.if(ajv_1._`!${err}.${used}`, () => gen.code(ajv_1._`${errs}.push(${err})`))); + gen.assign(names_1.default.vErrors, errs).assign(names_1.default.errors, ajv_1._`${errs}.length`); + } + function matchKeywordError(err, kwdErrs) { + return codegen_1.and(ajv_1._`${err}.keyword !== ${keyword}`, ajv_1._`!${err}.${used}`, ajv_1._`${err}.instancePath === ${instancePath}`, ajv_1._`${err}.keyword in ${kwdErrs}`, + // TODO match the end of the string? + ajv_1._`${err}.schemaPath.indexOf(${it.errSchemaPath}) === 0`, ajv_1._`/^\\/[^\\/]*$/.test(${err}.schemaPath.slice(${it.errSchemaPath.length}))`); + } + function ifMatchesChildError(err, childErrs, thenBody) { + gen.if(codegen_1.and(ajv_1._`${err}.keyword !== ${keyword}`, ajv_1._`!${err}.${used}`, ajv_1._`${err}.instancePath.indexOf(${instancePath}) === 0`), () => { + const childRegex = gen.scopeValue("pattern", { + ref: /^\/([^/]*)(?:\/|$)/, + code: ajv_1._`new RegExp("^\\\/([^/]*)(?:\\\/|$)")`, + }); + const matches = gen.const("emMatches", ajv_1._`${childRegex}.exec(${err}.instancePath.slice(${instancePath}.length))`); + const child = gen.const("emChild", ajv_1._`${matches} && ${matches}[1].replace(/~1/g, "/").replace(/~0/g, "~")`); + gen.if(ajv_1._`${child} !== undefined && ${child} in ${childErrs}`, () => thenBody(child)); + }); + } + function matchAnyError(err) { + return codegen_1.and(ajv_1._`${err}.keyword !== ${keyword}`, ajv_1._`!${err}.${used}`, codegen_1.or(ajv_1._`${err}.instancePath === ${instancePath}`, codegen_1.and(ajv_1._`${err}.instancePath.indexOf(${instancePath}) === 0`, ajv_1._`${err}.instancePath[${instancePath}.length] === "/"`)), ajv_1._`${err}.schemaPath.indexOf(${it.errSchemaPath}) === 0`, ajv_1._`${err}.schemaPath[${it.errSchemaPath}.length] === "/"`); + } + function getTemplatesCode(keys, msgs) { + const templatesCode = []; + for (const k in keys) { + const msg = msgs[k]; + if (INTERPOLATION.test(msg)) + templatesCode.push([k, templateFunc(msg)]); + } + return gen.object(...templatesCode); + } + function templateExpr(msg) { + if (!INTERPOLATION.test(msg)) + return ajv_1.stringify(msg); + return new code_1._Code(code_1.safeStringify(msg) + .replace(INTERPOLATION_REPLACE, (_s, ptr) => `" + JSON.stringify(${validate_1.getData(ptr, it)}) + "`) + .replace(EMPTY_STR, "")); + } + function templateFunc(msg) { + return ajv_1._`function(){return ${templateExpr(msg)}}`; + } + }, + metaSchema: { + anyOf: [ + { type: "string" }, + { + type: "object", + properties: { + properties: { $ref: "#/$defs/stringMap" }, + items: { $ref: "#/$defs/stringList" }, + required: { $ref: "#/$defs/stringOrMap" }, + dependencies: { $ref: "#/$defs/stringOrMap" }, + }, + additionalProperties: { type: "string" }, + }, + ], + $defs: { + stringMap: { + type: "object", + additionalProperties: { type: "string" }, + }, + stringOrMap: { + anyOf: [{ type: "string" }, { $ref: "#/$defs/stringMap" }], + }, + stringList: { type: "array", items: { type: "string" } }, + }, + }, + }; + } + const ajvErrors = (ajv, options = {}) => { + if (!ajv.opts.allErrors) + throw new Error("ajv-errors: Ajv option allErrors must be true"); + if (ajv.opts.jsPropertySyntax) { + throw new Error("ajv-errors: ajv option jsPropertySyntax is not supported"); + } + return ajv.addKeyword(errorMessage(options)); + }; + exports.default = ajvErrors; + module.exports = ajvErrors; + module.exports.default = ajvErrors; + + }, { "ajv": 36, "ajv/dist/compile/codegen": 38, "ajv/dist/compile/codegen/code": 37, "ajv/dist/compile/errors": 40, "ajv/dist/compile/names": 42, "ajv/dist/compile/validate": 51 }], 36: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0; + const core_1 = require("./core"); + const draft7_1 = require("./vocabularies/draft7"); + const discriminator_1 = require("./vocabularies/discriminator"); + const draft7MetaSchema = require("./refs/json-schema-draft-07.json"); + const META_SUPPORT_DATA = ["/properties"]; + const META_SCHEMA_ID = "http://json-schema.org/draft-07/schema"; + class Ajv extends core_1.default { + _addVocabularies() { + super._addVocabularies(); + draft7_1.default.forEach((v) => this.addVocabulary(v)); + if (this.opts.discriminator) + this.addKeyword(discriminator_1.default); + } + _addDefaultMetaSchema() { + super._addDefaultMetaSchema(); + if (!this.opts.meta) + return; + const metaSchema = this.opts.$data + ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA) + : draft7MetaSchema; + this.addMetaSchema(metaSchema, META_SCHEMA_ID, false); + this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID; + } + defaultMeta() { + return (this.opts.defaultMeta = + super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined)); + } + } + module.exports = exports = Ajv; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = Ajv; + var validate_1 = require("./compile/validate"); + Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function () { return validate_1.KeywordCxt; } }); + var codegen_1 = require("./compile/codegen"); + Object.defineProperty(exports, "_", { enumerable: true, get: function () { return codegen_1._; } }); + Object.defineProperty(exports, "str", { enumerable: true, get: function () { return codegen_1.str; } }); + Object.defineProperty(exports, "stringify", { enumerable: true, get: function () { return codegen_1.stringify; } }); + Object.defineProperty(exports, "nil", { enumerable: true, get: function () { return codegen_1.nil; } }); + Object.defineProperty(exports, "Name", { enumerable: true, get: function () { return codegen_1.Name; } }); + Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function () { return codegen_1.CodeGen; } }); + + }, { "./compile/codegen": 38, "./compile/validate": 51, "./core": 54, "./refs/json-schema-draft-07.json": 56, "./vocabularies/discriminator": 81, "./vocabularies/draft7": 83 }], 37: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.regexpCode = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0; + class _CodeOrName { + } + exports._CodeOrName = _CodeOrName; + exports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; + class Name extends _CodeOrName { + constructor(s) { + super(); + if (!exports.IDENTIFIER.test(s)) + throw new Error("CodeGen: name must be a valid identifier"); + this.str = s; + } + toString() { + return this.str; + } + emptyStr() { + return false; + } + get names() { + return { [this.str]: 1 }; + } + } + exports.Name = Name; + class _Code extends _CodeOrName { + constructor(code) { + super(); + this._items = typeof code === "string" ? [code] : code; + } + toString() { + return this.str; + } + emptyStr() { + if (this._items.length > 1) + return false; + const item = this._items[0]; + return item === "" || item === '""'; + } + get str() { + var _a; + return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, ""))); + } + get names() { + var _a; + return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => { + if (c instanceof Name) + names[c.str] = (names[c.str] || 0) + 1; + return names; + }, {}))); + } + } + exports._Code = _Code; + exports.nil = new _Code(""); + function _(strs, ...args) { + const code = [strs[0]]; + let i = 0; + while (i < args.length) { + addCodeArg(code, args[i]); + code.push(strs[++i]); + } + return new _Code(code); + } + exports._ = _; + const plus = new _Code("+"); + function str(strs, ...args) { + const expr = [safeStringify(strs[0])]; + let i = 0; + while (i < args.length) { + expr.push(plus); + addCodeArg(expr, args[i]); + expr.push(plus, safeStringify(strs[++i])); + } + optimize(expr); + return new _Code(expr); + } + exports.str = str; + function addCodeArg(code, arg) { + if (arg instanceof _Code) + code.push(...arg._items); + else if (arg instanceof Name) + code.push(arg); + else + code.push(interpolate(arg)); + } + exports.addCodeArg = addCodeArg; + function optimize(expr) { + let i = 1; + while (i < expr.length - 1) { + if (expr[i] === plus) { + const res = mergeExprItems(expr[i - 1], expr[i + 1]); + if (res !== undefined) { + expr.splice(i - 1, 3, res); + continue; + } + expr[i++] = "+"; + } + i++; + } + } + function mergeExprItems(a, b) { + if (b === '""') + return a; + if (a === '""') + return b; + if (typeof a == "string") { + if (b instanceof Name || a[a.length - 1] !== '"') + return; + if (typeof b != "string") + return `${a.slice(0, -1)}${b}"`; + if (b[0] === '"') + return a.slice(0, -1) + b.slice(1); + return; + } + if (typeof b == "string" && b[0] === '"' && !(a instanceof Name)) + return `"${a}${b.slice(1)}`; + return; + } + function strConcat(c1, c2) { + return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`; + } + exports.strConcat = strConcat; + // TODO do not allow arrays here + function interpolate(x) { + return typeof x == "number" || typeof x == "boolean" || x === null + ? x + : safeStringify(Array.isArray(x) ? x.join(",") : x); + } + function stringify(x) { + return new _Code(safeStringify(x)); + } + exports.stringify = stringify; + function safeStringify(x) { + return JSON.stringify(x) + .replace(/\u2028/g, "\\u2028") + .replace(/\u2029/g, "\\u2029"); + } + exports.safeStringify = safeStringify; + function getProperty(key) { + return typeof key == "string" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`; + } + exports.getProperty = getProperty; + function regexpCode(rx) { + return new _Code(rx.toString()); + } + exports.regexpCode = regexpCode; + + }, {}], 38: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0; + const code_1 = require("./code"); + const scope_1 = require("./scope"); + var code_2 = require("./code"); + Object.defineProperty(exports, "_", { enumerable: true, get: function () { return code_2._; } }); + Object.defineProperty(exports, "str", { enumerable: true, get: function () { return code_2.str; } }); + Object.defineProperty(exports, "strConcat", { enumerable: true, get: function () { return code_2.strConcat; } }); + Object.defineProperty(exports, "nil", { enumerable: true, get: function () { return code_2.nil; } }); + Object.defineProperty(exports, "getProperty", { enumerable: true, get: function () { return code_2.getProperty; } }); + Object.defineProperty(exports, "stringify", { enumerable: true, get: function () { return code_2.stringify; } }); + Object.defineProperty(exports, "regexpCode", { enumerable: true, get: function () { return code_2.regexpCode; } }); + Object.defineProperty(exports, "Name", { enumerable: true, get: function () { return code_2.Name; } }); + var scope_2 = require("./scope"); + Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return scope_2.Scope; } }); + Object.defineProperty(exports, "ValueScope", { enumerable: true, get: function () { return scope_2.ValueScope; } }); + Object.defineProperty(exports, "ValueScopeName", { enumerable: true, get: function () { return scope_2.ValueScopeName; } }); + Object.defineProperty(exports, "varKinds", { enumerable: true, get: function () { return scope_2.varKinds; } }); + exports.operators = { + GT: new code_1._Code(">"), + GTE: new code_1._Code(">="), + LT: new code_1._Code("<"), + LTE: new code_1._Code("<="), + EQ: new code_1._Code("==="), + NEQ: new code_1._Code("!=="), + NOT: new code_1._Code("!"), + OR: new code_1._Code("||"), + AND: new code_1._Code("&&"), + ADD: new code_1._Code("+"), + }; + class Node { + optimizeNodes() { + return this; + } + optimizeNames(_names, _constants) { + return this; + } + } + class Def extends Node { + constructor(varKind, name, rhs) { + super(); + this.varKind = varKind; + this.name = name; + this.rhs = rhs; + } + render({ es5, _n }) { + const varKind = es5 ? scope_1.varKinds.var : this.varKind; + const rhs = this.rhs === undefined ? "" : ` = ${this.rhs}`; + return `${varKind} ${this.name}${rhs};` + _n; + } + optimizeNames(names, constants) { + if (!names[this.name.str]) + return; + if (this.rhs) + this.rhs = optimizeExpr(this.rhs, names, constants); + return this; + } + get names() { + return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {}; + } + } + class Assign extends Node { + constructor(lhs, rhs, sideEffects) { + super(); + this.lhs = lhs; + this.rhs = rhs; + this.sideEffects = sideEffects; + } + render({ _n }) { + return `${this.lhs} = ${this.rhs};` + _n; + } + optimizeNames(names, constants) { + if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects) + return; + this.rhs = optimizeExpr(this.rhs, names, constants); + return this; + } + get names() { + const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names }; + return addExprNames(names, this.rhs); + } + } + class AssignOp extends Assign { + constructor(lhs, op, rhs, sideEffects) { + super(lhs, rhs, sideEffects); + this.op = op; + } + render({ _n }) { + return `${this.lhs} ${this.op}= ${this.rhs};` + _n; + } + } + class Label extends Node { + constructor(label) { + super(); + this.label = label; + this.names = {}; + } + render({ _n }) { + return `${this.label}:` + _n; + } + } + class Break extends Node { + constructor(label) { + super(); + this.label = label; + this.names = {}; + } + render({ _n }) { + const label = this.label ? ` ${this.label}` : ""; + return `break${label};` + _n; + } + } + class Throw extends Node { + constructor(error) { + super(); + this.error = error; + } + render({ _n }) { + return `throw ${this.error};` + _n; + } + get names() { + return this.error.names; + } + } + class AnyCode extends Node { + constructor(code) { + super(); + this.code = code; + } + render({ _n }) { + return `${this.code};` + _n; + } + optimizeNodes() { + return `${this.code}` ? this : undefined; + } + optimizeNames(names, constants) { + this.code = optimizeExpr(this.code, names, constants); + return this; + } + get names() { + return this.code instanceof code_1._CodeOrName ? this.code.names : {}; + } + } + class ParentNode extends Node { + constructor(nodes = []) { + super(); + this.nodes = nodes; + } + render(opts) { + return this.nodes.reduce((code, n) => code + n.render(opts), ""); + } + optimizeNodes() { + const { nodes } = this; + let i = nodes.length; + while (i--) { + const n = nodes[i].optimizeNodes(); + if (Array.isArray(n)) + nodes.splice(i, 1, ...n); + else if (n) + nodes[i] = n; + else + nodes.splice(i, 1); + } + return nodes.length > 0 ? this : undefined; + } + optimizeNames(names, constants) { + const { nodes } = this; + let i = nodes.length; + while (i--) { + // iterating backwards improves 1-pass optimization + const n = nodes[i]; + if (n.optimizeNames(names, constants)) + continue; + subtractNames(names, n.names); + nodes.splice(i, 1); + } + return nodes.length > 0 ? this : undefined; + } + get names() { + return this.nodes.reduce((names, n) => addNames(names, n.names), {}); + } + } + class BlockNode extends ParentNode { + render(opts) { + return "{" + opts._n + super.render(opts) + "}" + opts._n; + } + } + class Root extends ParentNode { + } + class Else extends BlockNode { + } + Else.kind = "else"; + class If extends BlockNode { + constructor(condition, nodes) { + super(nodes); + this.condition = condition; + } + render(opts) { + let code = `if(${this.condition})` + super.render(opts); + if (this.else) + code += "else " + this.else.render(opts); + return code; + } + optimizeNodes() { + super.optimizeNodes(); + const cond = this.condition; + if (cond === true) + return this.nodes; // else is ignored here + let e = this.else; + if (e) { + const ns = e.optimizeNodes(); + e = this.else = Array.isArray(ns) ? new Else(ns) : ns; + } + if (e) { + if (cond === false) + return e instanceof If ? e : e.nodes; + if (this.nodes.length) + return this; + return new If(not(cond), e instanceof If ? [e] : e.nodes); + } + if (cond === false || !this.nodes.length) + return undefined; + return this; + } + optimizeNames(names, constants) { + var _a; + this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants); + if (!(super.optimizeNames(names, constants) || this.else)) + return; + this.condition = optimizeExpr(this.condition, names, constants); + return this; + } + get names() { + const names = super.names; + addExprNames(names, this.condition); + if (this.else) + addNames(names, this.else.names); + return names; + } + } + If.kind = "if"; + class For extends BlockNode { + } + For.kind = "for"; + class ForLoop extends For { + constructor(iteration) { + super(); + this.iteration = iteration; + } + render(opts) { + return `for(${this.iteration})` + super.render(opts); + } + optimizeNames(names, constants) { + if (!super.optimizeNames(names, constants)) + return; + this.iteration = optimizeExpr(this.iteration, names, constants); + return this; + } + get names() { + return addNames(super.names, this.iteration.names); + } + } + class ForRange extends For { + constructor(varKind, name, from, to) { + super(); + this.varKind = varKind; + this.name = name; + this.from = from; + this.to = to; + } + render(opts) { + const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind; + const { name, from, to } = this; + return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts); + } + get names() { + const names = addExprNames(super.names, this.from); + return addExprNames(names, this.to); + } + } + class ForIter extends For { + constructor(loop, varKind, name, iterable) { + super(); + this.loop = loop; + this.varKind = varKind; + this.name = name; + this.iterable = iterable; + } + render(opts) { + return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts); + } + optimizeNames(names, constants) { + if (!super.optimizeNames(names, constants)) + return; + this.iterable = optimizeExpr(this.iterable, names, constants); + return this; + } + get names() { + return addNames(super.names, this.iterable.names); + } + } + class Func extends BlockNode { + constructor(name, args, async) { + super(); + this.name = name; + this.args = args; + this.async = async; + } + render(opts) { + const _async = this.async ? "async " : ""; + return `${_async}function ${this.name}(${this.args})` + super.render(opts); + } + } + Func.kind = "func"; + class Return extends ParentNode { + render(opts) { + return "return " + super.render(opts); + } + } + Return.kind = "return"; + class Try extends BlockNode { + render(opts) { + let code = "try" + super.render(opts); + if (this.catch) + code += this.catch.render(opts); + if (this.finally) + code += this.finally.render(opts); + return code; + } + optimizeNodes() { + var _a, _b; + super.optimizeNodes(); + (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes(); + (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes(); + return this; + } + optimizeNames(names, constants) { + var _a, _b; + super.optimizeNames(names, constants); + (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants); + (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants); + return this; + } + get names() { + const names = super.names; + if (this.catch) + addNames(names, this.catch.names); + if (this.finally) + addNames(names, this.finally.names); + return names; + } + } + class Catch extends BlockNode { + constructor(error) { + super(); + this.error = error; + } + render(opts) { + return `catch(${this.error})` + super.render(opts); + } + } + Catch.kind = "catch"; + class Finally extends BlockNode { + render(opts) { + return "finally" + super.render(opts); + } + } + Finally.kind = "finally"; + class CodeGen { + constructor(extScope, opts = {}) { + this._values = {}; + this._blockStarts = []; + this._constants = {}; + this.opts = { ...opts, _n: opts.lines ? "\n" : "" }; + this._extScope = extScope; + this._scope = new scope_1.Scope({ parent: extScope }); + this._nodes = [new Root()]; + } + toString() { + return this._root.render(this.opts); + } + // returns unique name in the internal scope + name(prefix) { + return this._scope.name(prefix); + } + // reserves unique name in the external scope + scopeName(prefix) { + return this._extScope.name(prefix); + } + // reserves unique name in the external scope and assigns value to it + scopeValue(prefixOrName, value) { + const name = this._extScope.value(prefixOrName, value); + const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set()); + vs.add(name); + return name; + } + getScopeValue(prefix, keyOrRef) { + return this._extScope.getValue(prefix, keyOrRef); + } + // return code that assigns values in the external scope to the names that are used internally + // (same names that were returned by gen.scopeName or gen.scopeValue) + scopeRefs(scopeName) { + return this._extScope.scopeRefs(scopeName, this._values); + } + scopeCode() { + return this._extScope.scopeCode(this._values); + } + _def(varKind, nameOrPrefix, rhs, constant) { + const name = this._scope.toName(nameOrPrefix); + if (rhs !== undefined && constant) + this._constants[name.str] = rhs; + this._leafNode(new Def(varKind, name, rhs)); + return name; + } + // `const` declaration (`var` in es5 mode) + const(nameOrPrefix, rhs, _constant) { + return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant); + } + // `let` declaration with optional assignment (`var` in es5 mode) + let(nameOrPrefix, rhs, _constant) { + return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant); + } + // `var` declaration with optional assignment + var(nameOrPrefix, rhs, _constant) { + return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant); + } + // assignment code + assign(lhs, rhs, sideEffects) { + return this._leafNode(new Assign(lhs, rhs, sideEffects)); + } + // `+=` code + add(lhs, rhs) { + return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs)); + } + // appends passed SafeExpr to code or executes Block + code(c) { + if (typeof c == "function") + c(); + else if (c !== code_1.nil) + this._leafNode(new AnyCode(c)); + return this; + } + // returns code for object literal for the passed argument list of key-value pairs + object(...keyValues) { + const code = ["{"]; + for (const [key, value] of keyValues) { + if (code.length > 1) + code.push(","); + code.push(key); + if (key !== value || this.opts.es5) { + code.push(":"); + (0, code_1.addCodeArg)(code, value); + } + } + code.push("}"); + return new code_1._Code(code); + } + // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed) + if(condition, thenBody, elseBody) { + this._blockNode(new If(condition)); + if (thenBody && elseBody) { + this.code(thenBody).else().code(elseBody).endIf(); + } + else if (thenBody) { + this.code(thenBody).endIf(); + } + else if (elseBody) { + throw new Error('CodeGen: "else" body without "then" body'); + } + return this; + } + // `else if` clause - invalid without `if` or after `else` clauses + elseIf(condition) { + return this._elseNode(new If(condition)); + } + // `else` clause - only valid after `if` or `else if` clauses + else() { + return this._elseNode(new Else()); + } + // end `if` statement (needed if gen.if was used only with condition) + endIf() { + return this._endBlockNode(If, Else); + } + _for(node, forBody) { + this._blockNode(node); + if (forBody) + this.code(forBody).endFor(); + return this; + } + // a generic `for` clause (or statement if `forBody` is passed) + for(iteration, forBody) { + return this._for(new ForLoop(iteration), forBody); + } + // `for` statement for a range of values + forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) { + const name = this._scope.toName(nameOrPrefix); + return this._for(new ForRange(varKind, name, from, to), () => forBody(name)); + } + // `for-of` statement (in es5 mode replace with a normal for loop) + forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) { + const name = this._scope.toName(nameOrPrefix); + if (this.opts.es5) { + const arr = iterable instanceof code_1.Name ? iterable : this.var("_arr", iterable); + return this.forRange("_i", 0, (0, code_1._)`${arr}.length`, (i) => { + this.var(name, (0, code_1._)`${arr}[${i}]`); + forBody(name); + }); + } + return this._for(new ForIter("of", varKind, name, iterable), () => forBody(name)); + } + // `for-in` statement. + // With option `ownProperties` replaced with a `for-of` loop for object keys + forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) { + if (this.opts.ownProperties) { + return this.forOf(nameOrPrefix, (0, code_1._)`Object.keys(${obj})`, forBody); + } + const name = this._scope.toName(nameOrPrefix); + return this._for(new ForIter("in", varKind, name, obj), () => forBody(name)); + } + // end `for` loop + endFor() { + return this._endBlockNode(For); + } + // `label` statement + label(label) { + return this._leafNode(new Label(label)); + } + // `break` statement + break(label) { + return this._leafNode(new Break(label)); + } + // `return` statement + return(value) { + const node = new Return(); + this._blockNode(node); + this.code(value); + if (node.nodes.length !== 1) + throw new Error('CodeGen: "return" should have one node'); + return this._endBlockNode(Return); + } + // `try` statement + try(tryBody, catchCode, finallyCode) { + if (!catchCode && !finallyCode) + throw new Error('CodeGen: "try" without "catch" and "finally"'); + const node = new Try(); + this._blockNode(node); + this.code(tryBody); + if (catchCode) { + const error = this.name("e"); + this._currNode = node.catch = new Catch(error); + catchCode(error); + } + if (finallyCode) { + this._currNode = node.finally = new Finally(); + this.code(finallyCode); + } + return this._endBlockNode(Catch, Finally); + } + // `throw` statement + throw(error) { + return this._leafNode(new Throw(error)); + } + // start self-balancing block + block(body, nodeCount) { + this._blockStarts.push(this._nodes.length); + if (body) + this.code(body).endBlock(nodeCount); + return this; + } + // end the current self-balancing block + endBlock(nodeCount) { + const len = this._blockStarts.pop(); + if (len === undefined) + throw new Error("CodeGen: not in self-balancing block"); + const toClose = this._nodes.length - len; + if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) { + throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`); + } + this._nodes.length = len; + return this; + } + // `function` heading (or definition if funcBody is passed) + func(name, args = code_1.nil, async, funcBody) { + this._blockNode(new Func(name, args, async)); + if (funcBody) + this.code(funcBody).endFunc(); + return this; + } + // end function definition + endFunc() { + return this._endBlockNode(Func); + } + optimize(n = 1) { + while (n-- > 0) { + this._root.optimizeNodes(); + this._root.optimizeNames(this._root.names, this._constants); + } + } + _leafNode(node) { + this._currNode.nodes.push(node); + return this; + } + _blockNode(node) { + this._currNode.nodes.push(node); + this._nodes.push(node); + } + _endBlockNode(N1, N2) { + const n = this._currNode; + if (n instanceof N1 || (N2 && n instanceof N2)) { + this._nodes.pop(); + return this; + } + throw new Error(`CodeGen: not in block "${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}"`); + } + _elseNode(node) { + const n = this._currNode; + if (!(n instanceof If)) { + throw new Error('CodeGen: "else" without "if"'); + } + this._currNode = n.else = node; + return this; + } + get _root() { + return this._nodes[0]; + } + get _currNode() { + const ns = this._nodes; + return ns[ns.length - 1]; + } + set _currNode(node) { + const ns = this._nodes; + ns[ns.length - 1] = node; + } + } + exports.CodeGen = CodeGen; + function addNames(names, from) { + for (const n in from) + names[n] = (names[n] || 0) + (from[n] || 0); + return names; + } + function addExprNames(names, from) { + return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names; + } + function optimizeExpr(expr, names, constants) { + if (expr instanceof code_1.Name) + return replaceName(expr); + if (!canOptimize(expr)) + return expr; + return new code_1._Code(expr._items.reduce((items, c) => { + if (c instanceof code_1.Name) + c = replaceName(c); + if (c instanceof code_1._Code) + items.push(...c._items); + else + items.push(c); + return items; + }, [])); + function replaceName(n) { + const c = constants[n.str]; + if (c === undefined || names[n.str] !== 1) + return n; + delete names[n.str]; + return c; + } + function canOptimize(e) { + return (e instanceof code_1._Code && + e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined)); + } + } + function subtractNames(names, from) { + for (const n in from) + names[n] = (names[n] || 0) - (from[n] || 0); + } + function not(x) { + return typeof x == "boolean" || typeof x == "number" || x === null ? !x : (0, code_1._)`!${par(x)}`; + } + exports.not = not; + const andCode = mappend(exports.operators.AND); + // boolean AND (&&) expression with the passed arguments + function and(...args) { + return args.reduce(andCode); + } + exports.and = and; + const orCode = mappend(exports.operators.OR); + // boolean OR (||) expression with the passed arguments + function or(...args) { + return args.reduce(orCode); + } + exports.or = or; + function mappend(op) { + return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._)`${par(x)} ${op} ${par(y)}`); + } + function par(x) { + return x instanceof code_1.Name ? x : (0, code_1._)`(${x})`; + } + + }, { "./code": 37, "./scope": 39 }], 39: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0; + const code_1 = require("./code"); + class ValueError extends Error { + constructor(name) { + super(`CodeGen: "code" for ${name} not defined`); + this.value = name.value; + } + } + var UsedValueState; + (function (UsedValueState) { + UsedValueState[UsedValueState["Started"] = 0] = "Started"; + UsedValueState[UsedValueState["Completed"] = 1] = "Completed"; + })(UsedValueState = exports.UsedValueState || (exports.UsedValueState = {})); + exports.varKinds = { + const: new code_1.Name("const"), + let: new code_1.Name("let"), + var: new code_1.Name("var"), + }; + class Scope { + constructor({ prefixes, parent } = {}) { + this._names = {}; + this._prefixes = prefixes; + this._parent = parent; + } + toName(nameOrPrefix) { + return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix); + } + name(prefix) { + return new code_1.Name(this._newName(prefix)); + } + _newName(prefix) { + const ng = this._names[prefix] || this._nameGroup(prefix); + return `${prefix}${ng.index++}`; + } + _nameGroup(prefix) { + var _a, _b; + if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) { + throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`); + } + return (this._names[prefix] = { prefix, index: 0 }); + } + } + exports.Scope = Scope; + class ValueScopeName extends code_1.Name { + constructor(prefix, nameStr) { + super(nameStr); + this.prefix = prefix; + } + setValue(value, { property, itemIndex }) { + this.value = value; + this.scopePath = (0, code_1._)`.${new code_1.Name(property)}[${itemIndex}]`; + } + } + exports.ValueScopeName = ValueScopeName; + const line = (0, code_1._)`\n`; + class ValueScope extends Scope { + constructor(opts) { + super(opts); + this._values = {}; + this._scope = opts.scope; + this.opts = { ...opts, _n: opts.lines ? line : code_1.nil }; + } + get() { + return this._scope; + } + name(prefix) { + return new ValueScopeName(prefix, this._newName(prefix)); + } + value(nameOrPrefix, value) { + var _a; + if (value.ref === undefined) + throw new Error("CodeGen: ref must be passed in value"); + const name = this.toName(nameOrPrefix); + const { prefix } = name; + const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref; + let vs = this._values[prefix]; + if (vs) { + const _name = vs.get(valueKey); + if (_name) + return _name; + } + else { + vs = this._values[prefix] = new Map(); + } + vs.set(valueKey, name); + const s = this._scope[prefix] || (this._scope[prefix] = []); + const itemIndex = s.length; + s[itemIndex] = value.ref; + name.setValue(value, { property: prefix, itemIndex }); + return name; + } + getValue(prefix, keyOrRef) { + const vs = this._values[prefix]; + if (!vs) + return; + return vs.get(keyOrRef); + } + scopeRefs(scopeName, values = this._values) { + return this._reduceValues(values, (name) => { + if (name.scopePath === undefined) + throw new Error(`CodeGen: name "${name}" has no value`); + return (0, code_1._)`${scopeName}${name.scopePath}`; + }); + } + scopeCode(values = this._values, usedValues, getCode) { + return this._reduceValues(values, (name) => { + if (name.value === undefined) + throw new Error(`CodeGen: name "${name}" has no value`); + return name.value.code; + }, usedValues, getCode); + } + _reduceValues(values, valueCode, usedValues = {}, getCode) { + let code = code_1.nil; + for (const prefix in values) { + const vs = values[prefix]; + if (!vs) + continue; + const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map()); + vs.forEach((name) => { + if (nameSet.has(name)) + return; + nameSet.set(name, UsedValueState.Started); + let c = valueCode(name); + if (c) { + const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const; + code = (0, code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`; + } + else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) { + code = (0, code_1._)`${code}${c}${this.opts._n}`; + } + else { + throw new ValueError(name); + } + nameSet.set(name, UsedValueState.Completed); + }); + } + return code; + } + } + exports.ValueScope = ValueScope; + + }, { "./code": 37 }], 40: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0; + const codegen_1 = require("./codegen"); + const util_1 = require("./util"); + const names_1 = require("./names"); + exports.keywordError = { + message: ({ keyword }) => (0, codegen_1.str)`must pass "${keyword}" keyword validation`, + }; + exports.keyword$DataError = { + message: ({ keyword, schemaType }) => schemaType + ? (0, codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)` + : (0, codegen_1.str)`"${keyword}" keyword is invalid ($data)`, + }; + function reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) { + const { it } = cxt; + const { gen, compositeRule, allErrors } = it; + const errObj = errorObjectCode(cxt, error, errorPaths); + if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) { + addError(gen, errObj); + } + else { + returnErrors(it, (0, codegen_1._)`[${errObj}]`); + } + } + exports.reportError = reportError; + function reportExtraError(cxt, error = exports.keywordError, errorPaths) { + const { it } = cxt; + const { gen, compositeRule, allErrors } = it; + const errObj = errorObjectCode(cxt, error, errorPaths); + addError(gen, errObj); + if (!(compositeRule || allErrors)) { + returnErrors(it, names_1.default.vErrors); + } + } + exports.reportExtraError = reportExtraError; + function resetErrorsCount(gen, errsCount) { + gen.assign(names_1.default.errors, errsCount); + gen.if((0, codegen_1._)`${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._)`${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null))); + } + exports.resetErrorsCount = resetErrorsCount; + function extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) { + /* istanbul ignore if */ + if (errsCount === undefined) + throw new Error("ajv implementation error"); + const err = gen.name("err"); + gen.forRange("i", errsCount, names_1.default.errors, (i) => { + gen.const(err, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`); + gen.if((0, codegen_1._)`${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath))); + gen.assign((0, codegen_1._)`${err}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`); + if (it.opts.verbose) { + gen.assign((0, codegen_1._)`${err}.schema`, schemaValue); + gen.assign((0, codegen_1._)`${err}.data`, data); + } + }); + } + exports.extendErrors = extendErrors; + function addError(gen, errObj) { + const err = gen.const("err", errObj); + gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err})`); + gen.code((0, codegen_1._)`${names_1.default.errors}++`); + } + function returnErrors(it, errs) { + const { gen, validateName, schemaEnv } = it; + if (schemaEnv.$async) { + gen.throw((0, codegen_1._)`new ${it.ValidationError}(${errs})`); + } + else { + gen.assign((0, codegen_1._)`${validateName}.errors`, errs); + gen.return(false); + } + } + const E = { + keyword: new codegen_1.Name("keyword"), + schemaPath: new codegen_1.Name("schemaPath"), + params: new codegen_1.Name("params"), + propertyName: new codegen_1.Name("propertyName"), + message: new codegen_1.Name("message"), + schema: new codegen_1.Name("schema"), + parentSchema: new codegen_1.Name("parentSchema"), + }; + function errorObjectCode(cxt, error, errorPaths) { + const { createErrors } = cxt.it; + if (createErrors === false) + return (0, codegen_1._)`{}`; + return errorObject(cxt, error, errorPaths); + } + function errorObject(cxt, error, errorPaths = {}) { + const { gen, it } = cxt; + const keyValues = [ + errorInstancePath(it, errorPaths), + errorSchemaPath(cxt, errorPaths), + ]; + extraErrorProps(cxt, error, keyValues); + return gen.object(...keyValues); + } + function errorInstancePath({ errorPath }, { instancePath }) { + const instPath = instancePath + ? (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}` + : errorPath; + return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)]; + } + function errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) { + let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str)`${errSchemaPath}/${keyword}`; + if (schemaPath) { + schPath = (0, codegen_1.str)`${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`; + } + return [E.schemaPath, schPath]; + } + function extraErrorProps(cxt, { params, message }, keyValues) { + const { keyword, data, schemaValue, it } = cxt; + const { opts, propertyName, topSchemaRef, schemaPath } = it; + keyValues.push([E.keyword, keyword], [E.params, typeof params == "function" ? params(cxt) : params || (0, codegen_1._)`{}`]); + if (opts.messages) { + keyValues.push([E.message, typeof message == "function" ? message(cxt) : message]); + } + if (opts.verbose) { + keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._)`${topSchemaRef}${schemaPath}`], [names_1.default.data, data]); + } + if (propertyName) + keyValues.push([E.propertyName, propertyName]); + } + + }, { "./codegen": 38, "./names": 42, "./util": 46 }], 41: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0; + const codegen_1 = require("./codegen"); + const validation_error_1 = require("../runtime/validation_error"); + const names_1 = require("./names"); + const resolve_1 = require("./resolve"); + const util_1 = require("./util"); + const validate_1 = require("./validate"); + const URI = require("uri-js"); + class SchemaEnv { + constructor(env) { + var _a; + this.refs = {}; + this.dynamicAnchors = {}; + let schema; + if (typeof env.schema == "object") + schema = env.schema; + this.schema = env.schema; + this.schemaId = env.schemaId; + this.root = env.root || this; + this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || "$id"]); + this.schemaPath = env.schemaPath; + this.localRefs = env.localRefs; + this.meta = env.meta; + this.$async = schema === null || schema === void 0 ? void 0 : schema.$async; + this.refs = {}; + } + } + exports.SchemaEnv = SchemaEnv; + // let codeSize = 0 + // let nodeCount = 0 + // Compiles schema in SchemaEnv + function compileSchema(sch) { + // TODO refactor - remove compilations + const _sch = getCompilingSchema.call(this, sch); + if (_sch) + return _sch; + const rootId = (0, resolve_1.getFullPath)(sch.root.baseId); // TODO if getFullPath removed 1 tests fails + const { es5, lines } = this.opts.code; + const { ownProperties } = this.opts; + const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties }); + let _ValidationError; + if (sch.$async) { + _ValidationError = gen.scopeValue("Error", { + ref: validation_error_1.default, + code: (0, codegen_1._)`require("ajv/dist/runtime/validation_error").default`, + }); + } + const validateName = gen.scopeName("validate"); + sch.validateName = validateName; + const schemaCxt = { + gen, + allErrors: this.opts.allErrors, + data: names_1.default.data, + parentData: names_1.default.parentData, + parentDataProperty: names_1.default.parentDataProperty, + dataNames: [names_1.default.data], + dataPathArr: [codegen_1.nil], + dataLevel: 0, + dataTypes: [], + definedProperties: new Set(), + topSchemaRef: gen.scopeValue("schema", this.opts.code.source === true + ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) } + : { ref: sch.schema }), + validateName, + ValidationError: _ValidationError, + schema: sch.schema, + schemaEnv: sch, + rootId, + baseId: sch.baseId || rootId, + schemaPath: codegen_1.nil, + errSchemaPath: sch.schemaPath || (this.opts.jtd ? "" : "#"), + errorPath: (0, codegen_1._)`""`, + opts: this.opts, + self: this, + }; + let sourceCode; + try { + this._compilations.add(sch); + (0, validate_1.validateFunctionCode)(schemaCxt); + gen.optimize(this.opts.code.optimize); + // gen.optimize(1) + const validateCode = gen.toString(); + sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`; + // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount)) + if (this.opts.code.process) + sourceCode = this.opts.code.process(sourceCode, sch); + // console.log("\n\n\n *** \n", sourceCode) + const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode); + const validate = makeValidate(this, this.scope.get()); + this.scope.value(validateName, { ref: validate }); + validate.errors = null; + validate.schema = sch.schema; + validate.schemaEnv = sch; + if (sch.$async) + validate.$async = true; + if (this.opts.code.source === true) { + validate.source = { validateName, validateCode, scopeValues: gen._values }; + } + if (this.opts.unevaluated) { + const { props, items } = schemaCxt; + validate.evaluated = { + props: props instanceof codegen_1.Name ? undefined : props, + items: items instanceof codegen_1.Name ? undefined : items, + dynamicProps: props instanceof codegen_1.Name, + dynamicItems: items instanceof codegen_1.Name, + }; + if (validate.source) + validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated); + } + sch.validate = validate; + return sch; + } + catch (e) { + delete sch.validate; + delete sch.validateName; + if (sourceCode) + this.logger.error("Error compiling schema, function code:", sourceCode); + // console.log("\n\n\n *** \n", sourceCode, this.opts) + throw e; + } + finally { + this._compilations.delete(sch); + } + } + exports.compileSchema = compileSchema; + function resolveRef(root, baseId, ref) { + var _a; + ref = (0, resolve_1.resolveUrl)(baseId, ref); + const schOrFunc = root.refs[ref]; + if (schOrFunc) + return schOrFunc; + let _sch = resolve.call(this, root, ref); + if (_sch === undefined) { + const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv + const { schemaId } = this.opts; + if (schema) + _sch = new SchemaEnv({ schema, schemaId, root, baseId }); + } + if (_sch === undefined) + return; + return (root.refs[ref] = inlineOrCompile.call(this, _sch)); + } + exports.resolveRef = resolveRef; + function inlineOrCompile(sch) { + if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs)) + return sch.schema; + return sch.validate ? sch : compileSchema.call(this, sch); + } + // Index of schema compilation in the currently compiled list + function getCompilingSchema(schEnv) { + for (const sch of this._compilations) { + if (sameSchemaEnv(sch, schEnv)) + return sch; + } + } + exports.getCompilingSchema = getCompilingSchema; + function sameSchemaEnv(s1, s2) { + return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId; + } + // resolve and compile the references ($ref) + // TODO returns AnySchemaObject (if the schema can be inlined) or validation function + function resolve(root, // information about the root schema for the current schema + ref // reference to resolve + ) { + let sch; + while (typeof (sch = this.refs[ref]) == "string") + ref = sch; + return sch || this.schemas[ref] || resolveSchema.call(this, root, ref); + } + // Resolve schema, its root and baseId + function resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it + ref // reference to resolve + ) { + const p = URI.parse(ref); + const refPath = (0, resolve_1._getFullPath)(p); + let baseId = (0, resolve_1.getFullPath)(root.baseId); + // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests + if (Object.keys(root.schema).length > 0 && refPath === baseId) { + return getJsonPointer.call(this, p, root); + } + const id = (0, resolve_1.normalizeId)(refPath); + const schOrRef = this.refs[id] || this.schemas[id]; + if (typeof schOrRef == "string") { + const sch = resolveSchema.call(this, root, schOrRef); + if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== "object") + return; + return getJsonPointer.call(this, p, sch); + } + if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== "object") + return; + if (!schOrRef.validate) + compileSchema.call(this, schOrRef); + if (id === (0, resolve_1.normalizeId)(ref)) { + const { schema } = schOrRef; + const { schemaId } = this.opts; + const schId = schema[schemaId]; + if (schId) + baseId = (0, resolve_1.resolveUrl)(baseId, schId); + return new SchemaEnv({ schema, schemaId, root, baseId }); + } + return getJsonPointer.call(this, p, schOrRef); + } + exports.resolveSchema = resolveSchema; + const PREVENT_SCOPE_CHANGE = new Set([ + "properties", + "patternProperties", + "enum", + "dependencies", + "definitions", + ]); + function getJsonPointer(parsedRef, { baseId, schema, root }) { + var _a; + if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== "/") + return; + for (const part of parsedRef.fragment.slice(1).split("/")) { + if (typeof schema === "boolean") + return; + const partSchema = schema[(0, util_1.unescapeFragment)(part)]; + if (partSchema === undefined) + return; + schema = partSchema; + // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def? + const schId = typeof schema === "object" && schema[this.opts.schemaId]; + if (!PREVENT_SCOPE_CHANGE.has(part) && schId) { + baseId = (0, resolve_1.resolveUrl)(baseId, schId); + } + } + let env; + if (typeof schema != "boolean" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) { + const $ref = (0, resolve_1.resolveUrl)(baseId, schema.$ref); + env = resolveSchema.call(this, root, $ref); + } + // even though resolution failed we need to return SchemaEnv to throw exception + // so that compileAsync loads missing schema. + const { schemaId } = this.opts; + env = env || new SchemaEnv({ schema, schemaId, root, baseId }); + if (env.schema !== env.root.schema) + return env; + return undefined; + } + + }, { "../runtime/validation_error": 59, "./codegen": 38, "./names": 42, "./resolve": 44, "./util": 46, "./validate": 51, "uri-js": 111 }], 42: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("./codegen"); + const names = { + // validation function arguments + data: new codegen_1.Name("data"), + // args passed from referencing schema + valCxt: new codegen_1.Name("valCxt"), + instancePath: new codegen_1.Name("instancePath"), + parentData: new codegen_1.Name("parentData"), + parentDataProperty: new codegen_1.Name("parentDataProperty"), + rootData: new codegen_1.Name("rootData"), + dynamicAnchors: new codegen_1.Name("dynamicAnchors"), + // function scoped variables + vErrors: new codegen_1.Name("vErrors"), + errors: new codegen_1.Name("errors"), + this: new codegen_1.Name("this"), + // "globals" + self: new codegen_1.Name("self"), + scope: new codegen_1.Name("scope"), + // JTD serialize/parse name for JSON string and position + json: new codegen_1.Name("json"), + jsonPos: new codegen_1.Name("jsonPos"), + jsonLen: new codegen_1.Name("jsonLen"), + jsonPart: new codegen_1.Name("jsonPart"), + }; + exports.default = names; + + }, { "./codegen": 38 }], 43: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const resolve_1 = require("./resolve"); + class MissingRefError extends Error { + constructor(baseId, ref, msg) { + super(msg || `can't resolve reference ${ref} from id ${baseId}`); + this.missingRef = (0, resolve_1.resolveUrl)(baseId, ref); + this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(this.missingRef)); + } + } + exports.default = MissingRefError; + + }, { "./resolve": 44 }], 44: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0; + const util_1 = require("./util"); + const equal = require("fast-deep-equal"); + const traverse = require("json-schema-traverse"); + const URI = require("uri-js"); + // TODO refactor to use keyword definitions + const SIMPLE_INLINED = new Set([ + "type", + "format", + "pattern", + "maxLength", + "minLength", + "maxProperties", + "minProperties", + "maxItems", + "minItems", + "maximum", + "minimum", + "uniqueItems", + "multipleOf", + "required", + "enum", + "const", + ]); + function inlineRef(schema, limit = true) { + if (typeof schema == "boolean") + return true; + if (limit === true) + return !hasRef(schema); + if (!limit) + return false; + return countKeys(schema) <= limit; + } + exports.inlineRef = inlineRef; + const REF_KEYWORDS = new Set([ + "$ref", + "$recursiveRef", + "$recursiveAnchor", + "$dynamicRef", + "$dynamicAnchor", + ]); + function hasRef(schema) { + for (const key in schema) { + if (REF_KEYWORDS.has(key)) + return true; + const sch = schema[key]; + if (Array.isArray(sch) && sch.some(hasRef)) + return true; + if (typeof sch == "object" && hasRef(sch)) + return true; + } + return false; + } + function countKeys(schema) { + let count = 0; + for (const key in schema) { + if (key === "$ref") + return Infinity; + count++; + if (SIMPLE_INLINED.has(key)) + continue; + if (typeof schema[key] == "object") { + (0, util_1.eachItem)(schema[key], (sch) => (count += countKeys(sch))); + } + if (count === Infinity) + return Infinity; + } + return count; + } + function getFullPath(id = "", normalize) { + if (normalize !== false) + id = normalizeId(id); + const p = URI.parse(id); + return _getFullPath(p); + } + exports.getFullPath = getFullPath; + function _getFullPath(p) { + return URI.serialize(p).split("#")[0] + "#"; + } + exports._getFullPath = _getFullPath; + const TRAILING_SLASH_HASH = /#\/?$/; + function normalizeId(id) { + return id ? id.replace(TRAILING_SLASH_HASH, "") : ""; + } + exports.normalizeId = normalizeId; + function resolveUrl(baseId, id) { + id = normalizeId(id); + return URI.resolve(baseId, id); + } + exports.resolveUrl = resolveUrl; + const ANCHOR = /^[a-z_][-a-z0-9._]*$/i; + function getSchemaRefs(schema, baseId) { + if (typeof schema == "boolean") + return {}; + const { schemaId } = this.opts; + const schId = normalizeId(schema[schemaId] || baseId); + const baseIds = { "": schId }; + const pathPrefix = getFullPath(schId, false); + const localRefs = {}; + const schemaRefs = new Set(); + traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => { + if (parentJsonPtr === undefined) + return; + const fullPath = pathPrefix + jsonPtr; + let baseId = baseIds[parentJsonPtr]; + if (typeof sch[schemaId] == "string") + baseId = addRef.call(this, sch[schemaId]); + addAnchor.call(this, sch.$anchor); + addAnchor.call(this, sch.$dynamicAnchor); + baseIds[jsonPtr] = baseId; + function addRef(ref) { + ref = normalizeId(baseId ? URI.resolve(baseId, ref) : ref); + if (schemaRefs.has(ref)) + throw ambiguos(ref); + schemaRefs.add(ref); + let schOrRef = this.refs[ref]; + if (typeof schOrRef == "string") + schOrRef = this.refs[schOrRef]; + if (typeof schOrRef == "object") { + checkAmbiguosRef(sch, schOrRef.schema, ref); + } + else if (ref !== normalizeId(fullPath)) { + if (ref[0] === "#") { + checkAmbiguosRef(sch, localRefs[ref], ref); + localRefs[ref] = sch; + } + else { + this.refs[ref] = fullPath; + } + } + return ref; + } + function addAnchor(anchor) { + if (typeof anchor == "string") { + if (!ANCHOR.test(anchor)) + throw new Error(`invalid anchor "${anchor}"`); + addRef.call(this, `#${anchor}`); + } + } + }); + return localRefs; + function checkAmbiguosRef(sch1, sch2, ref) { + if (sch2 !== undefined && !equal(sch1, sch2)) + throw ambiguos(ref); + } + function ambiguos(ref) { + return new Error(`reference "${ref}" resolves to more than one schema`); + } + } + exports.getSchemaRefs = getSchemaRefs; + + }, { "./util": 46, "fast-deep-equal": 99, "json-schema-traverse": 100, "uri-js": 111 }], 45: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getRules = exports.isJSONType = void 0; + const _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"]; + const jsonTypes = new Set(_jsonTypes); + function isJSONType(x) { + return typeof x == "string" && jsonTypes.has(x); + } + exports.isJSONType = isJSONType; + function getRules() { + const groups = { + number: { type: "number", rules: [] }, + string: { type: "string", rules: [] }, + array: { type: "array", rules: [] }, + object: { type: "object", rules: [] }, + }; + return { + types: { ...groups, integer: true, boolean: true, null: true }, + rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object], + post: { rules: [] }, + all: {}, + keywords: {}, + }; + } + exports.getRules = getRules; + + }, {}], 46: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0; + const codegen_1 = require("./codegen"); + const code_1 = require("./codegen/code"); + // TODO refactor to use Set + function toHash(arr) { + const hash = {}; + for (const item of arr) + hash[item] = true; + return hash; + } + exports.toHash = toHash; + function alwaysValidSchema(it, schema) { + if (typeof schema == "boolean") + return schema; + if (Object.keys(schema).length === 0) + return true; + checkUnknownRules(it, schema); + return !schemaHasRules(schema, it.self.RULES.all); + } + exports.alwaysValidSchema = alwaysValidSchema; + function checkUnknownRules(it, schema = it.schema) { + const { opts, self } = it; + if (!opts.strictSchema) + return; + if (typeof schema === "boolean") + return; + const rules = self.RULES.keywords; + for (const key in schema) { + if (!rules[key]) + checkStrictMode(it, `unknown keyword: "${key}"`); + } + } + exports.checkUnknownRules = checkUnknownRules; + function schemaHasRules(schema, rules) { + if (typeof schema == "boolean") + return !schema; + for (const key in schema) + if (rules[key]) + return true; + return false; + } + exports.schemaHasRules = schemaHasRules; + function schemaHasRulesButRef(schema, RULES) { + if (typeof schema == "boolean") + return !schema; + for (const key in schema) + if (key !== "$ref" && RULES.all[key]) + return true; + return false; + } + exports.schemaHasRulesButRef = schemaHasRulesButRef; + function schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) { + if (!$data) { + if (typeof schema == "number" || typeof schema == "boolean") + return schema; + if (typeof schema == "string") + return (0, codegen_1._)`${schema}`; + } + return (0, codegen_1._)`${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`; + } + exports.schemaRefOrVal = schemaRefOrVal; + function unescapeFragment(str) { + return unescapeJsonPointer(decodeURIComponent(str)); + } + exports.unescapeFragment = unescapeFragment; + function escapeFragment(str) { + return encodeURIComponent(escapeJsonPointer(str)); + } + exports.escapeFragment = escapeFragment; + function escapeJsonPointer(str) { + if (typeof str == "number") + return `${str}`; + return str.replace(/~/g, "~0").replace(/\//g, "~1"); + } + exports.escapeJsonPointer = escapeJsonPointer; + function unescapeJsonPointer(str) { + return str.replace(/~1/g, "/").replace(/~0/g, "~"); + } + exports.unescapeJsonPointer = unescapeJsonPointer; + function eachItem(xs, f) { + if (Array.isArray(xs)) { + for (const x of xs) + f(x); + } + else { + f(xs); + } + } + exports.eachItem = eachItem; + function makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) { + return (gen, from, to, toName) => { + const res = to === undefined + ? from + : to instanceof codegen_1.Name + ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to) + : from instanceof codegen_1.Name + ? (mergeToName(gen, to, from), from) + : mergeValues(from, to); + return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res; + }; + } + exports.mergeEvaluated = { + props: makeMergeEvaluated({ + mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => { + gen.if((0, codegen_1._)`${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._)`${to} || {}`).code((0, codegen_1._)`Object.assign(${to}, ${from})`)); + }), + mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => { + if (from === true) { + gen.assign(to, true); + } + else { + gen.assign(to, (0, codegen_1._)`${to} || {}`); + setEvaluated(gen, to, from); + } + }), + mergeValues: (from, to) => (from === true ? true : { ...from, ...to }), + resultToName: evaluatedPropsToName, + }), + items: makeMergeEvaluated({ + mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)), + mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._)`${to} > ${from} ? ${to} : ${from}`)), + mergeValues: (from, to) => (from === true ? true : Math.max(from, to)), + resultToName: (gen, items) => gen.var("items", items), + }), + }; + function evaluatedPropsToName(gen, ps) { + if (ps === true) + return gen.var("props", true); + const props = gen.var("props", (0, codegen_1._)`{}`); + if (ps !== undefined) + setEvaluated(gen, props, ps); + return props; + } + exports.evaluatedPropsToName = evaluatedPropsToName; + function setEvaluated(gen, props, ps) { + Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p)}`, true)); + } + exports.setEvaluated = setEvaluated; + const snippets = {}; + function useFunc(gen, f) { + return gen.scopeValue("func", { + ref: f, + code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)), + }); + } + exports.useFunc = useFunc; + var Type; + (function (Type) { + Type[Type["Num"] = 0] = "Num"; + Type[Type["Str"] = 1] = "Str"; + })(Type = exports.Type || (exports.Type = {})); + function getErrorPath(dataProp, dataPropType, jsPropertySyntax) { + // let path + if (dataProp instanceof codegen_1.Name) { + const isNumber = dataPropType === Type.Num; + return jsPropertySyntax + ? isNumber + ? (0, codegen_1._)`"[" + ${dataProp} + "]"` + : (0, codegen_1._)`"['" + ${dataProp} + "']"` + : isNumber + ? (0, codegen_1._)`"/" + ${dataProp}` + : (0, codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`; // TODO maybe use global escapePointer + } + return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : "/" + escapeJsonPointer(dataProp); + } + exports.getErrorPath = getErrorPath; + function checkStrictMode(it, msg, mode = it.opts.strictSchema) { + if (!mode) + return; + msg = `strict mode: ${msg}`; + if (mode === true) + throw new Error(msg); + it.self.logger.warn(msg); + } + exports.checkStrictMode = checkStrictMode; + + }, { "./codegen": 38, "./codegen/code": 37 }], 47: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0; + function schemaHasRulesForType({ schema, self }, type) { + const group = self.RULES.types[type]; + return group && group !== true && shouldUseGroup(schema, group); + } + exports.schemaHasRulesForType = schemaHasRulesForType; + function shouldUseGroup(schema, group) { + return group.rules.some((rule) => shouldUseRule(schema, rule)); + } + exports.shouldUseGroup = shouldUseGroup; + function shouldUseRule(schema, rule) { + var _a; + return (schema[rule.keyword] !== undefined || + ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined))); + } + exports.shouldUseRule = shouldUseRule; + + }, {}], 48: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0; + const errors_1 = require("../errors"); + const codegen_1 = require("../codegen"); + const names_1 = require("../names"); + const boolError = { + message: "boolean schema is false", + }; + function topBoolOrEmptySchema(it) { + const { gen, schema, validateName } = it; + if (schema === false) { + falseSchemaError(it, false); + } + else if (typeof schema == "object" && schema.$async === true) { + gen.return(names_1.default.data); + } + else { + gen.assign((0, codegen_1._)`${validateName}.errors`, null); + gen.return(true); + } + } + exports.topBoolOrEmptySchema = topBoolOrEmptySchema; + function boolOrEmptySchema(it, valid) { + const { gen, schema } = it; + if (schema === false) { + gen.var(valid, false); // TODO var + falseSchemaError(it); + } + else { + gen.var(valid, true); // TODO var + } + } + exports.boolOrEmptySchema = boolOrEmptySchema; + function falseSchemaError(it, overrideAllErrors) { + const { gen, data } = it; + // TODO maybe some other interface should be used for non-keyword validation errors... + const cxt = { + gen, + keyword: "false schema", + data, + schema: false, + schemaCode: false, + schemaValue: false, + params: {}, + it, + }; + (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors); + } + + }, { "../codegen": 38, "../errors": 40, "../names": 42 }], 49: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0; + const rules_1 = require("../rules"); + const applicability_1 = require("./applicability"); + const errors_1 = require("../errors"); + const codegen_1 = require("../codegen"); + const util_1 = require("../util"); + var DataType; + (function (DataType) { + DataType[DataType["Correct"] = 0] = "Correct"; + DataType[DataType["Wrong"] = 1] = "Wrong"; + })(DataType = exports.DataType || (exports.DataType = {})); + function getSchemaTypes(schema) { + const types = getJSONTypes(schema.type); + const hasNull = types.includes("null"); + if (hasNull) { + if (schema.nullable === false) + throw new Error("type: null contradicts nullable: false"); + } + else { + if (!types.length && schema.nullable !== undefined) { + throw new Error('"nullable" cannot be used without "type"'); + } + if (schema.nullable === true) + types.push("null"); + } + return types; + } + exports.getSchemaTypes = getSchemaTypes; + function getJSONTypes(ts) { + const types = Array.isArray(ts) ? ts : ts ? [ts] : []; + if (types.every(rules_1.isJSONType)) + return types; + throw new Error("type must be JSONType or JSONType[]: " + types.join(",")); + } + exports.getJSONTypes = getJSONTypes; + function coerceAndCheckDataType(it, types) { + const { gen, data, opts } = it; + const coerceTo = coerceToTypes(types, opts.coerceTypes); + const checkTypes = types.length > 0 && + !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0])); + if (checkTypes) { + const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong); + gen.if(wrongType, () => { + if (coerceTo.length) + coerceData(it, types, coerceTo); + else + reportTypeError(it); + }); + } + return checkTypes; + } + exports.coerceAndCheckDataType = coerceAndCheckDataType; + const COERCIBLE = new Set(["string", "number", "integer", "boolean", "null"]); + function coerceToTypes(types, coerceTypes) { + return coerceTypes + ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === "array" && t === "array")) + : []; + } + function coerceData(it, types, coerceTo) { + const { gen, data, opts } = it; + const dataType = gen.let("dataType", (0, codegen_1._)`typeof ${data}`); + const coerced = gen.let("coerced", (0, codegen_1._)`undefined`); + if (opts.coerceTypes === "array") { + gen.if((0, codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen + .assign(data, (0, codegen_1._)`${data}[0]`) + .assign(dataType, (0, codegen_1._)`typeof ${data}`) + .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))); + } + gen.if((0, codegen_1._)`${coerced} !== undefined`); + for (const t of coerceTo) { + if (COERCIBLE.has(t) || (t === "array" && opts.coerceTypes === "array")) { + coerceSpecificType(t); + } + } + gen.else(); + reportTypeError(it); + gen.endIf(); + gen.if((0, codegen_1._)`${coerced} !== undefined`, () => { + gen.assign(data, coerced); + assignParentData(it, coerced); + }); + function coerceSpecificType(t) { + switch (t) { + case "string": + gen + .elseIf((0, codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`) + .assign(coerced, (0, codegen_1._)`"" + ${data}`) + .elseIf((0, codegen_1._)`${data} === null`) + .assign(coerced, (0, codegen_1._)`""`); + return; + case "number": + gen + .elseIf((0, codegen_1._)`${dataType} == "boolean" || ${data} === null + || (${dataType} == "string" && ${data} && ${data} == +${data})`) + .assign(coerced, (0, codegen_1._)`+${data}`); + return; + case "integer": + gen + .elseIf((0, codegen_1._)`${dataType} === "boolean" || ${data} === null + || (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`) + .assign(coerced, (0, codegen_1._)`+${data}`); + return; + case "boolean": + gen + .elseIf((0, codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`) + .assign(coerced, false) + .elseIf((0, codegen_1._)`${data} === "true" || ${data} === 1`) + .assign(coerced, true); + return; + case "null": + gen.elseIf((0, codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`); + gen.assign(coerced, null); + return; + case "array": + gen + .elseIf((0, codegen_1._)`${dataType} === "string" || ${dataType} === "number" + || ${dataType} === "boolean" || ${data} === null`) + .assign(coerced, (0, codegen_1._)`[${data}]`); + } + } + } + function assignParentData({ gen, parentData, parentDataProperty }, expr) { + // TODO use gen.property + gen.if((0, codegen_1._)`${parentData} !== undefined`, () => gen.assign((0, codegen_1._)`${parentData}[${parentDataProperty}]`, expr)); + } + function checkDataType(dataType, data, strictNums, correct = DataType.Correct) { + const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ; + let cond; + switch (dataType) { + case "null": + return (0, codegen_1._)`${data} ${EQ} null`; + case "array": + cond = (0, codegen_1._)`Array.isArray(${data})`; + break; + case "object": + cond = (0, codegen_1._)`${data} && typeof ${data} == "object" && !Array.isArray(${data})`; + break; + case "integer": + cond = numCond((0, codegen_1._)`!(${data} % 1) && !isNaN(${data})`); + break; + case "number": + cond = numCond(); + break; + default: + return (0, codegen_1._)`typeof ${data} ${EQ} ${dataType}`; + } + return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond); + function numCond(_cond = codegen_1.nil) { + return (0, codegen_1.and)((0, codegen_1._)`typeof ${data} == "number"`, _cond, strictNums ? (0, codegen_1._)`isFinite(${data})` : codegen_1.nil); + } + } + exports.checkDataType = checkDataType; + function checkDataTypes(dataTypes, data, strictNums, correct) { + if (dataTypes.length === 1) { + return checkDataType(dataTypes[0], data, strictNums, correct); + } + let cond; + const types = (0, util_1.toHash)(dataTypes); + if (types.array && types.object) { + const notObj = (0, codegen_1._)`typeof ${data} != "object"`; + cond = types.null ? notObj : (0, codegen_1._)`!${data} || ${notObj}`; + delete types.null; + delete types.array; + delete types.object; + } + else { + cond = codegen_1.nil; + } + if (types.number) + delete types.integer; + for (const t in types) + cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct)); + return cond; + } + exports.checkDataTypes = checkDataTypes; + const typeError = { + message: ({ schema }) => `must be ${schema}`, + params: ({ schema, schemaValue }) => typeof schema == "string" ? (0, codegen_1._)`{type: ${schema}}` : (0, codegen_1._)`{type: ${schemaValue}}`, + }; + function reportTypeError(it) { + const cxt = getTypeErrorContext(it); + (0, errors_1.reportError)(cxt, typeError); + } + exports.reportTypeError = reportTypeError; + function getTypeErrorContext(it) { + const { gen, data, schema } = it; + const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, "type"); + return { + gen, + keyword: "type", + data, + schema: schema.type, + schemaCode, + schemaValue: schemaCode, + parentSchema: schema, + params: {}, + it, + }; + } + + }, { "../codegen": 38, "../errors": 40, "../rules": 45, "../util": 46, "./applicability": 47 }], 50: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.assignDefaults = void 0; + const codegen_1 = require("../codegen"); + const util_1 = require("../util"); + function assignDefaults(it, ty) { + const { properties, items } = it.schema; + if (ty === "object" && properties) { + for (const key in properties) { + assignDefault(it, key, properties[key].default); + } + } + else if (ty === "array" && Array.isArray(items)) { + items.forEach((sch, i) => assignDefault(it, i, sch.default)); + } + } + exports.assignDefaults = assignDefaults; + function assignDefault(it, prop, defaultValue) { + const { gen, compositeRule, data, opts } = it; + if (defaultValue === undefined) + return; + const childData = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(prop)}`; + if (compositeRule) { + (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`); + return; + } + let condition = (0, codegen_1._)`${childData} === undefined`; + if (opts.useDefaults === "empty") { + condition = (0, codegen_1._)`${condition} || ${childData} === null || ${childData} === ""`; + } + // `${childData} === undefined` + + // (opts.useDefaults === "empty" ? ` || ${childData} === null || ${childData} === ""` : "") + gen.if(condition, (0, codegen_1._)`${childData} = ${(0, codegen_1.stringify)(defaultValue)}`); + } + + }, { "../codegen": 38, "../util": 46 }], 51: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0; + const boolSchema_1 = require("./boolSchema"); + const dataType_1 = require("./dataType"); + const applicability_1 = require("./applicability"); + const dataType_2 = require("./dataType"); + const defaults_1 = require("./defaults"); + const keyword_1 = require("./keyword"); + const subschema_1 = require("./subschema"); + const codegen_1 = require("../codegen"); + const names_1 = require("../names"); + const resolve_1 = require("../resolve"); + const util_1 = require("../util"); + const errors_1 = require("../errors"); + // schema compilation - generates validation function, subschemaCode (below) is used for subschemas + function validateFunctionCode(it) { + if (isSchemaObj(it)) { + checkKeywords(it); + if (schemaCxtHasRules(it)) { + topSchemaObjCode(it); + return; + } + } + validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it)); + } + exports.validateFunctionCode = validateFunctionCode; + function validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) { + if (opts.code.es5) { + gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => { + gen.code((0, codegen_1._)`"use strict"; ${funcSourceUrl(schema, opts)}`); + destructureValCxtES5(gen, opts); + gen.code(body); + }); + } + else { + gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body)); + } + } + function destructureValCxt(opts) { + return (0, codegen_1._)`{${names_1.default.instancePath}="", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._)`, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`; + } + function destructureValCxtES5(gen, opts) { + gen.if(names_1.default.valCxt, () => { + gen.var(names_1.default.instancePath, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.instancePath}`); + gen.var(names_1.default.parentData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentData}`); + gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentDataProperty}`); + gen.var(names_1.default.rootData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.rootData}`); + if (opts.dynamicRef) + gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`); + }, () => { + gen.var(names_1.default.instancePath, (0, codegen_1._)`""`); + gen.var(names_1.default.parentData, (0, codegen_1._)`undefined`); + gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`undefined`); + gen.var(names_1.default.rootData, names_1.default.data); + if (opts.dynamicRef) + gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`{}`); + }); + } + function topSchemaObjCode(it) { + const { schema, opts, gen } = it; + validateFunction(it, () => { + if (opts.$comment && schema.$comment) + commentKeyword(it); + checkNoDefault(it); + gen.let(names_1.default.vErrors, null); + gen.let(names_1.default.errors, 0); + if (opts.unevaluated) + resetEvaluated(it); + typeAndKeywords(it); + returnResults(it); + }); + return; + } + function resetEvaluated(it) { + // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated + const { gen, validateName } = it; + it.evaluated = gen.const("evaluated", (0, codegen_1._)`${validateName}.evaluated`); + gen.if((0, codegen_1._)`${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._)`${it.evaluated}.props`, (0, codegen_1._)`undefined`)); + gen.if((0, codegen_1._)`${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._)`${it.evaluated}.items`, (0, codegen_1._)`undefined`)); + } + function funcSourceUrl(schema, opts) { + const schId = typeof schema == "object" && schema[opts.schemaId]; + return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._)`/*# sourceURL=${schId} */` : codegen_1.nil; + } + // schema compilation - this function is used recursively to generate code for sub-schemas + function subschemaCode(it, valid) { + if (isSchemaObj(it)) { + checkKeywords(it); + if (schemaCxtHasRules(it)) { + subSchemaObjCode(it, valid); + return; + } + } + (0, boolSchema_1.boolOrEmptySchema)(it, valid); + } + function schemaCxtHasRules({ schema, self }) { + if (typeof schema == "boolean") + return !schema; + for (const key in schema) + if (self.RULES.all[key]) + return true; + return false; + } + function isSchemaObj(it) { + return typeof it.schema != "boolean"; + } + function subSchemaObjCode(it, valid) { + const { schema, gen, opts } = it; + if (opts.$comment && schema.$comment) + commentKeyword(it); + updateContext(it); + checkAsyncSchema(it); + const errsCount = gen.const("_errs", names_1.default.errors); + typeAndKeywords(it, errsCount); + // TODO var + gen.var(valid, (0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); + } + function checkKeywords(it) { + (0, util_1.checkUnknownRules)(it); + checkRefsAndKeywords(it); + } + function typeAndKeywords(it, errsCount) { + if (it.opts.jtd) + return schemaKeywords(it, [], false, errsCount); + const types = (0, dataType_1.getSchemaTypes)(it.schema); + const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types); + schemaKeywords(it, types, !checkedTypes, errsCount); + } + function checkRefsAndKeywords(it) { + const { schema, errSchemaPath, opts, self } = it; + if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) { + self.logger.warn(`$ref: keywords ignored in schema at path "${errSchemaPath}"`); + } + } + function checkNoDefault(it) { + const { schema, opts } = it; + if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) { + (0, util_1.checkStrictMode)(it, "default is ignored in the schema root"); + } + } + function updateContext(it) { + const schId = it.schema[it.opts.schemaId]; + if (schId) + it.baseId = (0, resolve_1.resolveUrl)(it.baseId, schId); + } + function checkAsyncSchema(it) { + if (it.schema.$async && !it.schemaEnv.$async) + throw new Error("async schema in sync schema"); + } + function commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) { + const msg = schema.$comment; + if (opts.$comment === true) { + gen.code((0, codegen_1._)`${names_1.default.self}.logger.log(${msg})`); + } + else if (typeof opts.$comment == "function") { + const schemaPath = (0, codegen_1.str)`${errSchemaPath}/$comment`; + const rootName = gen.scopeValue("root", { ref: schemaEnv.root }); + gen.code((0, codegen_1._)`${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`); + } + } + function returnResults(it) { + const { gen, schemaEnv, validateName, ValidationError, opts } = it; + if (schemaEnv.$async) { + // TODO assign unevaluated + gen.if((0, codegen_1._)`${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._)`new ${ValidationError}(${names_1.default.vErrors})`)); + } + else { + gen.assign((0, codegen_1._)`${validateName}.errors`, names_1.default.vErrors); + if (opts.unevaluated) + assignEvaluated(it); + gen.return((0, codegen_1._)`${names_1.default.errors} === 0`); + } + } + function assignEvaluated({ gen, evaluated, props, items }) { + if (props instanceof codegen_1.Name) + gen.assign((0, codegen_1._)`${evaluated}.props`, props); + if (items instanceof codegen_1.Name) + gen.assign((0, codegen_1._)`${evaluated}.items`, items); + } + function schemaKeywords(it, types, typeErrors, errsCount) { + const { gen, schema, data, allErrors, opts, self } = it; + const { RULES } = self; + if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) { + gen.block(() => keywordCode(it, "$ref", RULES.all.$ref.definition)); // TODO typecast + return; + } + if (!opts.jtd) + checkStrictTypes(it, types); + gen.block(() => { + for (const group of RULES.rules) + groupKeywords(group); + groupKeywords(RULES.post); + }); + function groupKeywords(group) { + if (!(0, applicability_1.shouldUseGroup)(schema, group)) + return; + if (group.type) { + gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers)); + iterateKeywords(it, group); + if (types.length === 1 && types[0] === group.type && typeErrors) { + gen.else(); + (0, dataType_2.reportTypeError)(it); + } + gen.endIf(); + } + else { + iterateKeywords(it, group); + } + // TODO make it "ok" call? + if (!allErrors) + gen.if((0, codegen_1._)`${names_1.default.errors} === ${errsCount || 0}`); + } + } + function iterateKeywords(it, group) { + const { gen, schema, opts: { useDefaults }, } = it; + if (useDefaults) + (0, defaults_1.assignDefaults)(it, group.type); + gen.block(() => { + for (const rule of group.rules) { + if ((0, applicability_1.shouldUseRule)(schema, rule)) { + keywordCode(it, rule.keyword, rule.definition, group.type); + } + } + }); + } + function checkStrictTypes(it, types) { + if (it.schemaEnv.meta || !it.opts.strictTypes) + return; + checkContextTypes(it, types); + if (!it.opts.allowUnionTypes) + checkMultipleTypes(it, types); + checkKeywordTypes(it, it.dataTypes); + } + function checkContextTypes(it, types) { + if (!types.length) + return; + if (!it.dataTypes.length) { + it.dataTypes = types; + return; + } + types.forEach((t) => { + if (!includesType(it.dataTypes, t)) { + strictTypesError(it, `type "${t}" not allowed by context "${it.dataTypes.join(",")}"`); + } + }); + it.dataTypes = it.dataTypes.filter((t) => includesType(types, t)); + } + function checkMultipleTypes(it, ts) { + if (ts.length > 1 && !(ts.length === 2 && ts.includes("null"))) { + strictTypesError(it, "use allowUnionTypes to allow union type keyword"); + } + } + function checkKeywordTypes(it, ts) { + const rules = it.self.RULES.all; + for (const keyword in rules) { + const rule = rules[keyword]; + if (typeof rule == "object" && (0, applicability_1.shouldUseRule)(it.schema, rule)) { + const { type } = rule.definition; + if (type.length && !type.some((t) => hasApplicableType(ts, t))) { + strictTypesError(it, `missing type "${type.join(",")}" for keyword "${keyword}"`); + } + } + } + } + function hasApplicableType(schTs, kwdT) { + return schTs.includes(kwdT) || (kwdT === "number" && schTs.includes("integer")); + } + function includesType(ts, t) { + return ts.includes(t) || (t === "integer" && ts.includes("number")); + } + function strictTypesError(it, msg) { + const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; + msg += ` at "${schemaPath}" (strictTypes)`; + (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes); + } + class KeywordCxt { + constructor(it, def, keyword) { + (0, keyword_1.validateKeywordUsage)(it, def, keyword); + this.gen = it.gen; + this.allErrors = it.allErrors; + this.keyword = keyword; + this.data = it.data; + this.schema = it.schema[keyword]; + this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data; + this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data); + this.schemaType = def.schemaType; + this.parentSchema = it.schema; + this.params = {}; + this.it = it; + this.def = def; + if (this.$data) { + this.schemaCode = it.gen.const("vSchema", getData(this.$data, it)); + } + else { + this.schemaCode = this.schemaValue; + if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) { + throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`); + } + } + if ("code" in def ? def.trackErrors : def.errors !== false) { + this.errsCount = it.gen.const("_errs", names_1.default.errors); + } + } + result(condition, successAction, failAction) { + this.failResult((0, codegen_1.not)(condition), successAction, failAction); + } + failResult(condition, successAction, failAction) { + this.gen.if(condition); + if (failAction) + failAction(); + else + this.error(); + if (successAction) { + this.gen.else(); + successAction(); + if (this.allErrors) + this.gen.endIf(); + } + else { + if (this.allErrors) + this.gen.endIf(); + else + this.gen.else(); + } + } + pass(condition, failAction) { + this.failResult((0, codegen_1.not)(condition), undefined, failAction); + } + fail(condition) { + if (condition === undefined) { + this.error(); + if (!this.allErrors) + this.gen.if(false); // this branch will be removed by gen.optimize + return; + } + this.gen.if(condition); + this.error(); + if (this.allErrors) + this.gen.endIf(); + else + this.gen.else(); + } + fail$data(condition) { + if (!this.$data) + return this.fail(condition); + const { schemaCode } = this; + this.fail((0, codegen_1._)`${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`); + } + error(append, errorParams, errorPaths) { + if (errorParams) { + this.setParams(errorParams); + this._error(append, errorPaths); + this.setParams({}); + return; + } + this._error(append, errorPaths); + } + _error(append, errorPaths) { + ; + (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths); + } + $dataError() { + (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError); + } + reset() { + if (this.errsCount === undefined) + throw new Error('add "trackErrors" to keyword definition'); + (0, errors_1.resetErrorsCount)(this.gen, this.errsCount); + } + ok(cond) { + if (!this.allErrors) + this.gen.if(cond); + } + setParams(obj, assign) { + if (assign) + Object.assign(this.params, obj); + else + this.params = obj; + } + block$data(valid, codeBlock, $dataValid = codegen_1.nil) { + this.gen.block(() => { + this.check$data(valid, $dataValid); + codeBlock(); + }); + } + check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) { + if (!this.$data) + return; + const { gen, schemaCode, schemaType, def } = this; + gen.if((0, codegen_1.or)((0, codegen_1._)`${schemaCode} === undefined`, $dataValid)); + if (valid !== codegen_1.nil) + gen.assign(valid, true); + if (schemaType.length || def.validateSchema) { + gen.elseIf(this.invalid$data()); + this.$dataError(); + if (valid !== codegen_1.nil) + gen.assign(valid, false); + } + gen.else(); + } + invalid$data() { + const { gen, schemaCode, schemaType, def, it } = this; + return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema()); + function wrong$DataType() { + if (schemaType.length) { + /* istanbul ignore if */ + if (!(schemaCode instanceof codegen_1.Name)) + throw new Error("ajv implementation error"); + const st = Array.isArray(schemaType) ? schemaType : [schemaType]; + return (0, codegen_1._)`${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`; + } + return codegen_1.nil; + } + function invalid$DataSchema() { + if (def.validateSchema) { + const validateSchemaRef = gen.scopeValue("validate$data", { ref: def.validateSchema }); // TODO value.code for standalone + return (0, codegen_1._)`!${validateSchemaRef}(${schemaCode})`; + } + return codegen_1.nil; + } + } + subschema(appl, valid) { + const subschema = (0, subschema_1.getSubschema)(this.it, appl); + (0, subschema_1.extendSubschemaData)(subschema, this.it, appl); + (0, subschema_1.extendSubschemaMode)(subschema, appl); + const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined }; + subschemaCode(nextContext, valid); + return nextContext; + } + mergeEvaluated(schemaCxt, toName) { + const { it, gen } = this; + if (!it.opts.unevaluated) + return; + if (it.props !== true && schemaCxt.props !== undefined) { + it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName); + } + if (it.items !== true && schemaCxt.items !== undefined) { + it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName); + } + } + mergeValidEvaluated(schemaCxt, valid) { + const { it, gen } = this; + if (it.opts.unevaluated && (it.props !== true || it.items !== true)) { + gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name)); + return true; + } + } + } + exports.KeywordCxt = KeywordCxt; + function keywordCode(it, keyword, def, ruleType) { + const cxt = new KeywordCxt(it, def, keyword); + if ("code" in def) { + def.code(cxt, ruleType); + } + else if (cxt.$data && def.validate) { + (0, keyword_1.funcKeywordCode)(cxt, def); + } + else if ("macro" in def) { + (0, keyword_1.macroKeywordCode)(cxt, def); + } + else if (def.compile || def.validate) { + (0, keyword_1.funcKeywordCode)(cxt, def); + } + } + const JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; + const RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; + function getData($data, { dataLevel, dataNames, dataPathArr }) { + let jsonPointer; + let data; + if ($data === "") + return names_1.default.rootData; + if ($data[0] === "/") { + if (!JSON_POINTER.test($data)) + throw new Error(`Invalid JSON-pointer: ${$data}`); + jsonPointer = $data; + data = names_1.default.rootData; + } + else { + const matches = RELATIVE_JSON_POINTER.exec($data); + if (!matches) + throw new Error(`Invalid JSON-pointer: ${$data}`); + const up = +matches[1]; + jsonPointer = matches[2]; + if (jsonPointer === "#") { + if (up >= dataLevel) + throw new Error(errorMsg("property/index", up)); + return dataPathArr[dataLevel - up]; + } + if (up > dataLevel) + throw new Error(errorMsg("data", up)); + data = dataNames[dataLevel - up]; + if (!jsonPointer) + return data; + } + let expr = data; + const segments = jsonPointer.split("/"); + for (const segment of segments) { + if (segment) { + data = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`; + expr = (0, codegen_1._)`${expr} && ${data}`; + } + } + return expr; + function errorMsg(pointerType, up) { + return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`; + } + } + exports.getData = getData; + + }, { "../codegen": 38, "../errors": 40, "../names": 42, "../resolve": 44, "../util": 46, "./applicability": 47, "./boolSchema": 48, "./dataType": 49, "./defaults": 50, "./keyword": 52, "./subschema": 53 }], 52: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0; + const codegen_1 = require("../codegen"); + const names_1 = require("../names"); + const code_1 = require("../../vocabularies/code"); + const errors_1 = require("../errors"); + function macroKeywordCode(cxt, def) { + const { gen, keyword, schema, parentSchema, it } = cxt; + const macroSchema = def.macro.call(it.self, schema, parentSchema, it); + const schemaRef = useKeyword(gen, keyword, macroSchema); + if (it.opts.validateSchema !== false) + it.self.validateSchema(macroSchema, true); + const valid = gen.name("valid"); + cxt.subschema({ + schema: macroSchema, + schemaPath: codegen_1.nil, + errSchemaPath: `${it.errSchemaPath}/${keyword}`, + topSchemaRef: schemaRef, + compositeRule: true, + }, valid); + cxt.pass(valid, () => cxt.error(true)); + } + exports.macroKeywordCode = macroKeywordCode; + function funcKeywordCode(cxt, def) { + var _a; + const { gen, keyword, schema, parentSchema, $data, it } = cxt; + checkAsyncKeyword(it, def); + const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate; + const validateRef = useKeyword(gen, keyword, validate); + const valid = gen.let("valid"); + cxt.block$data(valid, validateKeyword); + cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid); + function validateKeyword() { + if (def.errors === false) { + assignValid(); + if (def.modifying) + modifyData(cxt); + reportErrs(() => cxt.error()); + } + else { + const ruleErrs = def.async ? validateAsync() : validateSync(); + if (def.modifying) + modifyData(cxt); + reportErrs(() => addErrs(cxt, ruleErrs)); + } + } + function validateAsync() { + const ruleErrs = gen.let("ruleErrs", null); + gen.try(() => assignValid((0, codegen_1._)`await `), (e) => gen.assign(valid, false).if((0, codegen_1._)`${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._)`${e}.errors`), () => gen.throw(e))); + return ruleErrs; + } + function validateSync() { + const validateErrs = (0, codegen_1._)`${validateRef}.errors`; + gen.assign(validateErrs, null); + assignValid(codegen_1.nil); + return validateErrs; + } + function assignValid(_await = def.async ? (0, codegen_1._)`await ` : codegen_1.nil) { + const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self; + const passSchema = !(("compile" in def && !$data) || def.schema === false); + gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying); + } + function reportErrs(errors) { + var _a; + gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors); + } + } + exports.funcKeywordCode = funcKeywordCode; + function modifyData(cxt) { + const { gen, data, it } = cxt; + gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._)`${it.parentData}[${it.parentDataProperty}]`)); + } + function addErrs(cxt, errs) { + const { gen } = cxt; + gen.if((0, codegen_1._)`Array.isArray(${errs})`, () => { + gen + .assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`) + .assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); + (0, errors_1.extendErrors)(cxt); + }, () => cxt.error()); + } + function checkAsyncKeyword({ schemaEnv }, def) { + if (def.async && !schemaEnv.$async) + throw new Error("async keyword in sync schema"); + } + function useKeyword(gen, keyword, result) { + if (result === undefined) + throw new Error(`keyword "${keyword}" failed to compile`); + return gen.scopeValue("keyword", typeof result == "function" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) }); + } + function validSchemaType(schema, schemaType, allowUndefined = false) { + // TODO add tests + return (!schemaType.length || + schemaType.some((st) => st === "array" + ? Array.isArray(schema) + : st === "object" + ? schema && typeof schema == "object" && !Array.isArray(schema) + : typeof schema == st || (allowUndefined && typeof schema == "undefined"))); + } + exports.validSchemaType = validSchemaType; + function validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) { + /* istanbul ignore if */ + if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) { + throw new Error("ajv implementation error"); + } + const deps = def.dependencies; + if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) { + throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(",")}`); + } + if (def.validateSchema) { + const valid = def.validateSchema(schema[keyword]); + if (!valid) { + const msg = `keyword "${keyword}" value is invalid at path "${errSchemaPath}": ` + + self.errorsText(def.validateSchema.errors); + if (opts.validateSchema === "log") + self.logger.error(msg); + else + throw new Error(msg); + } + } + } + exports.validateKeywordUsage = validateKeywordUsage; + + }, { "../../vocabularies/code": 77, "../codegen": 38, "../errors": 40, "../names": 42 }], 53: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0; + const codegen_1 = require("../codegen"); + const util_1 = require("../util"); + function getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) { + if (keyword !== undefined && schema !== undefined) { + throw new Error('both "keyword" and "schema" passed, only one allowed'); + } + if (keyword !== undefined) { + const sch = it.schema[keyword]; + return schemaProp === undefined + ? { + schema: sch, + schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`, + errSchemaPath: `${it.errSchemaPath}/${keyword}`, + } + : { + schema: sch[schemaProp], + schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`, + errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`, + }; + } + if (schema !== undefined) { + if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) { + throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"'); + } + return { + schema, + schemaPath, + topSchemaRef, + errSchemaPath, + }; + } + throw new Error('either "keyword" or "schema" must be passed'); + } + exports.getSubschema = getSubschema; + function extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) { + if (data !== undefined && dataProp !== undefined) { + throw new Error('both "data" and "dataProp" passed, only one allowed'); + } + const { gen } = it; + if (dataProp !== undefined) { + const { errorPath, dataPathArr, opts } = it; + const nextData = gen.let("data", (0, codegen_1._)`${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true); + dataContextProps(nextData); + subschema.errorPath = (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`; + subschema.parentDataProperty = (0, codegen_1._)`${dataProp}`; + subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]; + } + if (data !== undefined) { + const nextData = data instanceof codegen_1.Name ? data : gen.let("data", data, true); // replaceable if used once? + dataContextProps(nextData); + if (propertyName !== undefined) + subschema.propertyName = propertyName; + // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr + } + if (dataTypes) + subschema.dataTypes = dataTypes; + function dataContextProps(_nextData) { + subschema.data = _nextData; + subschema.dataLevel = it.dataLevel + 1; + subschema.dataTypes = []; + it.definedProperties = new Set(); + subschema.parentData = it.data; + subschema.dataNames = [...it.dataNames, _nextData]; + } + } + exports.extendSubschemaData = extendSubschemaData; + function extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) { + if (compositeRule !== undefined) + subschema.compositeRule = compositeRule; + if (createErrors !== undefined) + subschema.createErrors = createErrors; + if (allErrors !== undefined) + subschema.allErrors = allErrors; + subschema.jtdDiscriminator = jtdDiscriminator; // not inherited + subschema.jtdMetadata = jtdMetadata; // not inherited + } + exports.extendSubschemaMode = extendSubschemaMode; + + }, { "../codegen": 38, "../util": 46 }], 54: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0; + var validate_1 = require("./compile/validate"); + Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function () { return validate_1.KeywordCxt; } }); + var codegen_1 = require("./compile/codegen"); + Object.defineProperty(exports, "_", { enumerable: true, get: function () { return codegen_1._; } }); + Object.defineProperty(exports, "str", { enumerable: true, get: function () { return codegen_1.str; } }); + Object.defineProperty(exports, "stringify", { enumerable: true, get: function () { return codegen_1.stringify; } }); + Object.defineProperty(exports, "nil", { enumerable: true, get: function () { return codegen_1.nil; } }); + Object.defineProperty(exports, "Name", { enumerable: true, get: function () { return codegen_1.Name; } }); + Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function () { return codegen_1.CodeGen; } }); + const validation_error_1 = require("./runtime/validation_error"); + const ref_error_1 = require("./compile/ref_error"); + const rules_1 = require("./compile/rules"); + const compile_1 = require("./compile"); + const codegen_2 = require("./compile/codegen"); + const resolve_1 = require("./compile/resolve"); + const dataType_1 = require("./compile/validate/dataType"); + const util_1 = require("./compile/util"); + const $dataRefSchema = require("./refs/data.json"); + const defaultRegExp = (str, flags) => new RegExp(str, flags); + defaultRegExp.code = "new RegExp"; + const META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes"]; + const EXT_SCOPE_NAMES = new Set([ + "validate", + "serialize", + "parse", + "wrapper", + "root", + "schema", + "keyword", + "pattern", + "formats", + "validate$data", + "func", + "obj", + "Error", + ]); + const removedOptions = { + errorDataPath: "", + format: "`validateFormats: false` can be used instead.", + nullable: '"nullable" keyword is supported by default.', + jsonPointers: "Deprecated jsPropertySyntax can be used instead.", + extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.", + missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.", + processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`", + sourceCode: "Use option `code: {source: true}`", + strictDefaults: "It is default now, see option `strict`.", + strictKeywords: "It is default now, see option `strict`.", + uniqueItems: '"uniqueItems" keyword is always validated.', + unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).", + cache: "Map is used as cache, schema object as key.", + serialize: "Map is used as cache, schema object as key.", + ajvErrors: "It is default now.", + }; + const deprecatedOptions = { + ignoreKeywordsWithRef: "", + jsPropertySyntax: "", + unicode: '"minLength"/"maxLength" account for unicode characters by default.', + }; + const MAX_EXPRESSION = 200; + // eslint-disable-next-line complexity + function requiredOptions(o) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z; + const s = o.strict; + const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize; + const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0; + const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp; + return { + strictSchema: (_e = (_d = o.strictSchema) !== null && _d !== void 0 ? _d : s) !== null && _e !== void 0 ? _e : true, + strictNumbers: (_g = (_f = o.strictNumbers) !== null && _f !== void 0 ? _f : s) !== null && _g !== void 0 ? _g : true, + strictTypes: (_j = (_h = o.strictTypes) !== null && _h !== void 0 ? _h : s) !== null && _j !== void 0 ? _j : "log", + strictTuples: (_l = (_k = o.strictTuples) !== null && _k !== void 0 ? _k : s) !== null && _l !== void 0 ? _l : "log", + strictRequired: (_o = (_m = o.strictRequired) !== null && _m !== void 0 ? _m : s) !== null && _o !== void 0 ? _o : false, + code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp }, + loopRequired: (_p = o.loopRequired) !== null && _p !== void 0 ? _p : MAX_EXPRESSION, + loopEnum: (_q = o.loopEnum) !== null && _q !== void 0 ? _q : MAX_EXPRESSION, + meta: (_r = o.meta) !== null && _r !== void 0 ? _r : true, + messages: (_s = o.messages) !== null && _s !== void 0 ? _s : true, + inlineRefs: (_t = o.inlineRefs) !== null && _t !== void 0 ? _t : true, + schemaId: (_u = o.schemaId) !== null && _u !== void 0 ? _u : "$id", + addUsedSchema: (_v = o.addUsedSchema) !== null && _v !== void 0 ? _v : true, + validateSchema: (_w = o.validateSchema) !== null && _w !== void 0 ? _w : true, + validateFormats: (_x = o.validateFormats) !== null && _x !== void 0 ? _x : true, + unicodeRegExp: (_y = o.unicodeRegExp) !== null && _y !== void 0 ? _y : true, + int32range: (_z = o.int32range) !== null && _z !== void 0 ? _z : true, + }; + } + class Ajv { + constructor(opts = {}) { + this.schemas = {}; + this.refs = {}; + this.formats = {}; + this._compilations = new Set(); + this._loading = {}; + this._cache = new Map(); + opts = this.opts = { ...opts, ...requiredOptions(opts) }; + const { es5, lines } = this.opts.code; + this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines }); + this.logger = getLogger(opts.logger); + const formatOpt = opts.validateFormats; + opts.validateFormats = false; + this.RULES = (0, rules_1.getRules)(); + checkOptions.call(this, removedOptions, opts, "NOT SUPPORTED"); + checkOptions.call(this, deprecatedOptions, opts, "DEPRECATED", "warn"); + this._metaOpts = getMetaSchemaOptions.call(this); + if (opts.formats) + addInitialFormats.call(this); + this._addVocabularies(); + this._addDefaultMetaSchema(); + if (opts.keywords) + addInitialKeywords.call(this, opts.keywords); + if (typeof opts.meta == "object") + this.addMetaSchema(opts.meta); + addInitialSchemas.call(this); + opts.validateFormats = formatOpt; + } + _addVocabularies() { + this.addKeyword("$async"); + } + _addDefaultMetaSchema() { + const { $data, meta, schemaId } = this.opts; + let _dataRefSchema = $dataRefSchema; + if (schemaId === "id") { + _dataRefSchema = { ...$dataRefSchema }; + _dataRefSchema.id = _dataRefSchema.$id; + delete _dataRefSchema.$id; + } + if (meta && $data) + this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false); + } + defaultMeta() { + const { meta, schemaId } = this.opts; + return (this.opts.defaultMeta = typeof meta == "object" ? meta[schemaId] || meta : undefined); + } + validate(schemaKeyRef, // key, ref or schema object + data // to be validated + ) { + let v; + if (typeof schemaKeyRef == "string") { + v = this.getSchema(schemaKeyRef); + if (!v) + throw new Error(`no schema with key or ref "${schemaKeyRef}"`); + } + else { + v = this.compile(schemaKeyRef); + } + const valid = v(data); + if (!("$async" in v)) + this.errors = v.errors; + return valid; + } + compile(schema, _meta) { + const sch = this._addSchema(schema, _meta); + return (sch.validate || this._compileSchemaEnv(sch)); + } + compileAsync(schema, meta) { + if (typeof this.opts.loadSchema != "function") { + throw new Error("options.loadSchema should be a function"); + } + const { loadSchema } = this.opts; + return runCompileAsync.call(this, schema, meta); + async function runCompileAsync(_schema, _meta) { + await loadMetaSchema.call(this, _schema.$schema); + const sch = this._addSchema(_schema, _meta); + return sch.validate || _compileAsync.call(this, sch); + } + async function loadMetaSchema($ref) { + if ($ref && !this.getSchema($ref)) { + await runCompileAsync.call(this, { $ref }, true); + } + } + async function _compileAsync(sch) { + try { + return this._compileSchemaEnv(sch); + } + catch (e) { + if (!(e instanceof ref_error_1.default)) + throw e; + checkLoaded.call(this, e); + await loadMissingSchema.call(this, e.missingSchema); + return _compileAsync.call(this, sch); + } + } + function checkLoaded({ missingSchema: ref, missingRef }) { + if (this.refs[ref]) { + throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`); + } + } + async function loadMissingSchema(ref) { + const _schema = await _loadSchema.call(this, ref); + if (!this.refs[ref]) + await loadMetaSchema.call(this, _schema.$schema); + if (!this.refs[ref]) + this.addSchema(_schema, ref, meta); + } + async function _loadSchema(ref) { + const p = this._loading[ref]; + if (p) + return p; + try { + return await (this._loading[ref] = loadSchema(ref)); + } + finally { + delete this._loading[ref]; + } + } + } + // Adds schema to the instance + addSchema(schema, // If array is passed, `key` will be ignored + key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. + _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead. + ) { + if (Array.isArray(schema)) { + for (const sch of schema) + this.addSchema(sch, undefined, _meta, _validateSchema); + return this; + } + let id; + if (typeof schema === "object") { + const { schemaId } = this.opts; + id = schema[schemaId]; + if (id !== undefined && typeof id != "string") { + throw new Error(`schema ${schemaId} must be string`); + } + } + key = (0, resolve_1.normalizeId)(key || id); + this._checkUnique(key); + this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true); + return this; + } + // Add schema that will be used to validate other schemas + // options in META_IGNORE_OPTIONS are alway set to false + addMetaSchema(schema, key, // schema key + _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema + ) { + this.addSchema(schema, key, true, _validateSchema); + return this; + } + // Validate schema against its meta-schema + validateSchema(schema, throwOrLogError) { + if (typeof schema == "boolean") + return true; + let $schema; + $schema = schema.$schema; + if ($schema !== undefined && typeof $schema != "string") { + throw new Error("$schema must be a string"); + } + $schema = $schema || this.opts.defaultMeta || this.defaultMeta(); + if (!$schema) { + this.logger.warn("meta-schema not available"); + this.errors = null; + return true; + } + const valid = this.validate($schema, schema); + if (!valid && throwOrLogError) { + const message = "schema is invalid: " + this.errorsText(); + if (this.opts.validateSchema === "log") + this.logger.error(message); + else + throw new Error(message); + } + return valid; + } + // Get compiled schema by `key` or `ref`. + // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id) + getSchema(keyRef) { + let sch; + while (typeof (sch = getSchEnv.call(this, keyRef)) == "string") + keyRef = sch; + if (sch === undefined) { + const { schemaId } = this.opts; + const root = new compile_1.SchemaEnv({ schema: {}, schemaId }); + sch = compile_1.resolveSchema.call(this, root, keyRef); + if (!sch) + return; + this.refs[keyRef] = sch; + } + return (sch.validate || this._compileSchemaEnv(sch)); + } + // Remove cached schema(s). + // If no parameter is passed all schemas but meta-schemas are removed. + // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. + // Even if schema is referenced by other schemas it still can be removed as other schemas have local references. + removeSchema(schemaKeyRef) { + if (schemaKeyRef instanceof RegExp) { + this._removeAllSchemas(this.schemas, schemaKeyRef); + this._removeAllSchemas(this.refs, schemaKeyRef); + return this; + } + switch (typeof schemaKeyRef) { + case "undefined": + this._removeAllSchemas(this.schemas); + this._removeAllSchemas(this.refs); + this._cache.clear(); + return this; + case "string": { + const sch = getSchEnv.call(this, schemaKeyRef); + if (typeof sch == "object") + this._cache.delete(sch.schema); + delete this.schemas[schemaKeyRef]; + delete this.refs[schemaKeyRef]; + return this; + } + case "object": { + const cacheKey = schemaKeyRef; + this._cache.delete(cacheKey); + let id = schemaKeyRef[this.opts.schemaId]; + if (id) { + id = (0, resolve_1.normalizeId)(id); + delete this.schemas[id]; + delete this.refs[id]; + } + return this; + } + default: + throw new Error("ajv.removeSchema: invalid parameter"); + } + } + // add "vocabulary" - a collection of keywords + addVocabulary(definitions) { + for (const def of definitions) + this.addKeyword(def); + return this; + } + addKeyword(kwdOrDef, def // deprecated + ) { + let keyword; + if (typeof kwdOrDef == "string") { + keyword = kwdOrDef; + if (typeof def == "object") { + this.logger.warn("these parameters are deprecated, see docs for addKeyword"); + def.keyword = keyword; + } + } + else if (typeof kwdOrDef == "object" && def === undefined) { + def = kwdOrDef; + keyword = def.keyword; + if (Array.isArray(keyword) && !keyword.length) { + throw new Error("addKeywords: keyword must be string or non-empty array"); + } + } + else { + throw new Error("invalid addKeywords parameters"); + } + checkKeyword.call(this, keyword, def); + if (!def) { + (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd)); + return this; + } + keywordMetaschema.call(this, def); + const definition = { + ...def, + type: (0, dataType_1.getJSONTypes)(def.type), + schemaType: (0, dataType_1.getJSONTypes)(def.schemaType), + }; + (0, util_1.eachItem)(keyword, definition.type.length === 0 + ? (k) => addRule.call(this, k, definition) + : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))); + return this; + } + getKeyword(keyword) { + const rule = this.RULES.all[keyword]; + return typeof rule == "object" ? rule.definition : !!rule; + } + // Remove keyword + removeKeyword(keyword) { + // TODO return type should be Ajv + const { RULES } = this; + delete RULES.keywords[keyword]; + delete RULES.all[keyword]; + for (const group of RULES.rules) { + const i = group.rules.findIndex((rule) => rule.keyword === keyword); + if (i >= 0) + group.rules.splice(i, 1); + } + return this; + } + // Add format + addFormat(name, format) { + if (typeof format == "string") + format = new RegExp(format); + this.formats[name] = format; + return this; + } + errorsText(errors = this.errors, // optional array of validation errors + { separator = ", ", dataVar = "data" } = {} // optional options with properties `separator` and `dataVar` + ) { + if (!errors || errors.length === 0) + return "No errors"; + return errors + .map((e) => `${dataVar}${e.instancePath} ${e.message}`) + .reduce((text, msg) => text + separator + msg); + } + $dataMetaSchema(metaSchema, keywordsJsonPointers) { + const rules = this.RULES.all; + metaSchema = JSON.parse(JSON.stringify(metaSchema)); + for (const jsonPointer of keywordsJsonPointers) { + const segments = jsonPointer.split("/").slice(1); // first segment is an empty string + let keywords = metaSchema; + for (const seg of segments) + keywords = keywords[seg]; + for (const key in rules) { + const rule = rules[key]; + if (typeof rule != "object") + continue; + const { $data } = rule.definition; + const schema = keywords[key]; + if ($data && schema) + keywords[key] = schemaOrData(schema); + } + } + return metaSchema; + } + _removeAllSchemas(schemas, regex) { + for (const keyRef in schemas) { + const sch = schemas[keyRef]; + if (!regex || regex.test(keyRef)) { + if (typeof sch == "string") { + delete schemas[keyRef]; + } + else if (sch && !sch.meta) { + this._cache.delete(sch.schema); + delete schemas[keyRef]; + } + } + } + } + _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) { + let id; + const { schemaId } = this.opts; + if (typeof schema == "object") { + id = schema[schemaId]; + } + else { + if (this.opts.jtd) + throw new Error("schema must be object"); + else if (typeof schema != "boolean") + throw new Error("schema must be object or boolean"); + } + let sch = this._cache.get(schema); + if (sch !== undefined) + return sch; + baseId = (0, resolve_1.normalizeId)(id || baseId); + const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId); + sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs }); + this._cache.set(sch.schema, sch); + if (addSchema && !baseId.startsWith("#")) { + // TODO atm it is allowed to overwrite schemas without id (instead of not adding them) + if (baseId) + this._checkUnique(baseId); + this.refs[baseId] = sch; + } + if (validateSchema) + this.validateSchema(schema, true); + return sch; + } + _checkUnique(id) { + if (this.schemas[id] || this.refs[id]) { + throw new Error(`schema with key or id "${id}" already exists`); + } + } + _compileSchemaEnv(sch) { + if (sch.meta) + this._compileMetaSchema(sch); + else + compile_1.compileSchema.call(this, sch); + /* istanbul ignore if */ + if (!sch.validate) + throw new Error("ajv implementation error"); + return sch.validate; + } + _compileMetaSchema(sch) { + const currentOpts = this.opts; + this.opts = this._metaOpts; + try { + compile_1.compileSchema.call(this, sch); + } + finally { + this.opts = currentOpts; + } + } + } + exports.default = Ajv; + Ajv.ValidationError = validation_error_1.default; + Ajv.MissingRefError = ref_error_1.default; + function checkOptions(checkOpts, options, msg, log = "error") { + for (const key in checkOpts) { + const opt = key; + if (opt in options) + this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`); + } + } + function getSchEnv(keyRef) { + keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line + return this.schemas[keyRef] || this.refs[keyRef]; + } + function addInitialSchemas() { + const optsSchemas = this.opts.schemas; + if (!optsSchemas) + return; + if (Array.isArray(optsSchemas)) + this.addSchema(optsSchemas); + else + for (const key in optsSchemas) + this.addSchema(optsSchemas[key], key); + } + function addInitialFormats() { + for (const name in this.opts.formats) { + const format = this.opts.formats[name]; + if (format) + this.addFormat(name, format); + } + } + function addInitialKeywords(defs) { + if (Array.isArray(defs)) { + this.addVocabulary(defs); + return; + } + this.logger.warn("keywords option as map is deprecated, pass array"); + for (const keyword in defs) { + const def = defs[keyword]; + if (!def.keyword) + def.keyword = keyword; + this.addKeyword(def); + } + } + function getMetaSchemaOptions() { + const metaOpts = { ...this.opts }; + for (const opt of META_IGNORE_OPTIONS) + delete metaOpts[opt]; + return metaOpts; + } + const noLogs = { log() { }, warn() { }, error() { } }; + function getLogger(logger) { + if (logger === false) + return noLogs; + if (logger === undefined) + return console; + if (logger.log && logger.warn && logger.error) + return logger; + throw new Error("logger must implement log, warn and error methods"); + } + const KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i; + function checkKeyword(keyword, def) { + const { RULES } = this; + (0, util_1.eachItem)(keyword, (kwd) => { + if (RULES.keywords[kwd]) + throw new Error(`Keyword ${kwd} is already defined`); + if (!KEYWORD_NAME.test(kwd)) + throw new Error(`Keyword ${kwd} has invalid name`); + }); + if (!def) + return; + if (def.$data && !("code" in def || "validate" in def)) { + throw new Error('$data keyword must have "code" or "validate" function'); + } + } + function addRule(keyword, definition, dataType) { + var _a; + const post = definition === null || definition === void 0 ? void 0 : definition.post; + if (dataType && post) + throw new Error('keyword with "post" flag cannot have "type"'); + const { RULES } = this; + let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType); + if (!ruleGroup) { + ruleGroup = { type: dataType, rules: [] }; + RULES.rules.push(ruleGroup); + } + RULES.keywords[keyword] = true; + if (!definition) + return; + const rule = { + keyword, + definition: { + ...definition, + type: (0, dataType_1.getJSONTypes)(definition.type), + schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType), + }, + }; + if (definition.before) + addBeforeRule.call(this, ruleGroup, rule, definition.before); + else + ruleGroup.rules.push(rule); + RULES.all[keyword] = rule; + (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd)); + } + function addBeforeRule(ruleGroup, rule, before) { + const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before); + if (i >= 0) { + ruleGroup.rules.splice(i, 0, rule); + } + else { + ruleGroup.rules.push(rule); + this.logger.warn(`rule ${before} is not defined`); + } + } + function keywordMetaschema(def) { + let { metaSchema } = def; + if (metaSchema === undefined) + return; + if (def.$data && this.opts.$data) + metaSchema = schemaOrData(metaSchema); + def.validateSchema = this.compile(metaSchema, true); + } + const $dataRef = { + $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", + }; + function schemaOrData(schema) { + return { anyOf: [schema, $dataRef] }; + } + + }, { "./compile": 41, "./compile/codegen": 38, "./compile/ref_error": 43, "./compile/resolve": 44, "./compile/rules": 45, "./compile/util": 46, "./compile/validate": 51, "./compile/validate/dataType": 49, "./refs/data.json": 55, "./runtime/validation_error": 59 }], 55: [function (require, module, exports) { + module.exports = { + "$id": "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", + "description": "Meta-schema for $data reference (JSON AnySchema extension proposal)", + "type": "object", + "required": ["$data"], + "properties": { + "$data": { + "type": "string", + "anyOf": [{ "format": "relative-json-pointer" }, { "format": "json-pointer" }] + } + }, + "additionalProperties": false + } + + }, {}], 56: [function (require, module, exports) { + module.exports = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#" } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "allOf": [{ "$ref": "#/definitions/nonNegativeInteger" }, { "default": 0 }] + }, + "simpleTypes": { + "enum": ["array", "boolean", "integer", "null", "number", "object", "string"] + }, + "stringArray": { + "type": "array", + "items": { "type": "string" }, + "uniqueItems": true, + "default": [] + } + }, + "type": ["object", "boolean"], + "properties": { + "$id": { + "type": "string", + "format": "uri-reference" + }, + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { "$ref": "#/definitions/nonNegativeInteger" }, + "minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { "$ref": "#" }, + "items": { + "anyOf": [{ "$ref": "#" }, { "$ref": "#/definitions/schemaArray" }], + "default": true + }, + "maxItems": { "$ref": "#/definitions/nonNegativeInteger" }, + "minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { "$ref": "#" }, + "maxProperties": { "$ref": "#/definitions/nonNegativeInteger" }, + "minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, + "required": { "$ref": "#/definitions/stringArray" }, + "additionalProperties": { "$ref": "#" }, + "definitions": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "properties": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "patternProperties": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "propertyNames": { "format": "regex" }, + "default": {} + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [{ "$ref": "#" }, { "$ref": "#/definitions/stringArray" }] + } + }, + "propertyNames": { "$ref": "#" }, + "const": true, + "enum": { + "type": "array", + "items": true, + "minItems": 1, + "uniqueItems": true + }, + "type": { + "anyOf": [ + { "$ref": "#/definitions/simpleTypes" }, + { + "type": "array", + "items": { "$ref": "#/definitions/simpleTypes" }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { "type": "string" }, + "contentMediaType": { "type": "string" }, + "contentEncoding": { "type": "string" }, + "if": { "$ref": "#" }, + "then": { "$ref": "#" }, + "else": { "$ref": "#" }, + "allOf": { "$ref": "#/definitions/schemaArray" }, + "anyOf": { "$ref": "#/definitions/schemaArray" }, + "oneOf": { "$ref": "#/definitions/schemaArray" }, + "not": { "$ref": "#" } + }, + "default": true + } + + }, {}], 57: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // https://github.com/ajv-validator/ajv/issues/889 + const equal = require("fast-deep-equal"); + equal.code = 'require("ajv/dist/runtime/equal").default'; + exports.default = equal; + + }, { "fast-deep-equal": 99 }], 58: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // https://mathiasbynens.be/notes/javascript-encoding + // https://github.com/bestiejs/punycode.js - punycode.ucs2.decode + function ucs2length(str) { + const len = str.length; + let length = 0; + let pos = 0; + let value; + while (pos < len) { + length++; + value = str.charCodeAt(pos++); + if (value >= 0xd800 && value <= 0xdbff && pos < len) { + // high surrogate, and there is a next character + value = str.charCodeAt(pos); + if ((value & 0xfc00) === 0xdc00) + pos++; // low surrogate + } + } + return length; + } + exports.default = ucs2length; + ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default'; + + }, {}], 59: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + class ValidationError extends Error { + constructor(errors) { + super("validation failed"); + this.errors = errors; + this.ajv = this.validation = true; + } + } + exports.default = ValidationError; + + }, {}], 60: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateAdditionalItems = void 0; + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const error = { + message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, + params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}`, + }; + const def = { + keyword: "additionalItems", + type: "array", + schemaType: ["boolean", "object"], + before: "uniqueItems", + error, + code(cxt) { + const { parentSchema, it } = cxt; + const { items } = parentSchema; + if (!Array.isArray(items)) { + (0, util_1.checkStrictMode)(it, '"additionalItems" is ignored when "items" is not an array of schemas'); + return; + } + validateAdditionalItems(cxt, items); + }, + }; + function validateAdditionalItems(cxt, items) { + const { gen, schema, data, keyword, it } = cxt; + it.items = true; + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + if (schema === false) { + cxt.setParams({ len: items.length }); + cxt.pass((0, codegen_1._)`${len} <= ${items.length}`); + } + else if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { + const valid = gen.var("valid", (0, codegen_1._)`${len} <= ${items.length}`); // TODO var + gen.if((0, codegen_1.not)(valid), () => validateItems(valid)); + cxt.ok(valid); + } + function validateItems(valid) { + gen.forRange("i", items.length, len, (i) => { + cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid); + if (!it.allErrors) + gen.if((0, codegen_1.not)(valid), () => gen.break()); + }); + } + } + exports.validateAdditionalItems = validateAdditionalItems; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46 }], 61: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const code_1 = require("../code"); + const codegen_1 = require("../../compile/codegen"); + const names_1 = require("../../compile/names"); + const util_1 = require("../../compile/util"); + const error = { + message: "must NOT have additional properties", + params: ({ params }) => (0, codegen_1._)`{additionalProperty: ${params.additionalProperty}}`, + }; + const def = { + keyword: "additionalProperties", + type: ["object"], + schemaType: ["boolean", "object"], + allowUndefined: true, + trackErrors: true, + error, + code(cxt) { + const { gen, schema, parentSchema, data, errsCount, it } = cxt; + /* istanbul ignore if */ + if (!errsCount) + throw new Error("ajv implementation error"); + const { allErrors, opts } = it; + it.props = true; + if (opts.removeAdditional !== "all" && (0, util_1.alwaysValidSchema)(it, schema)) + return; + const props = (0, code_1.allSchemaProperties)(parentSchema.properties); + const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties); + checkAdditionalProperties(); + cxt.ok((0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); + function checkAdditionalProperties() { + gen.forIn("key", data, (key) => { + if (!props.length && !patProps.length) + additionalPropertyCode(key); + else + gen.if(isAdditional(key), () => additionalPropertyCode(key)); + }); + } + function isAdditional(key) { + let definedProp; + if (props.length > 8) { + // TODO maybe an option instead of hard-coded 8? + const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, "properties"); + definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key); + } + else if (props.length) { + definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._)`${key} === ${p}`)); + } + else { + definedProp = codegen_1.nil; + } + if (patProps.length) { + definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p)}.test(${key})`)); + } + return (0, codegen_1.not)(definedProp); + } + function deleteAdditional(key) { + gen.code((0, codegen_1._)`delete ${data}[${key}]`); + } + function additionalPropertyCode(key) { + if (opts.removeAdditional === "all" || (opts.removeAdditional && schema === false)) { + deleteAdditional(key); + return; + } + if (schema === false) { + cxt.setParams({ additionalProperty: key }); + cxt.error(); + if (!allErrors) + gen.break(); + return; + } + if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { + const valid = gen.name("valid"); + if (opts.removeAdditional === "failing") { + applyAdditionalSchema(key, valid, false); + gen.if((0, codegen_1.not)(valid), () => { + cxt.reset(); + deleteAdditional(key); + }); + } + else { + applyAdditionalSchema(key, valid); + if (!allErrors) + gen.if((0, codegen_1.not)(valid), () => gen.break()); + } + } + } + function applyAdditionalSchema(key, valid, errors) { + const subschema = { + keyword: "additionalProperties", + dataProp: key, + dataPropType: util_1.Type.Str, + }; + if (errors === false) { + Object.assign(subschema, { + compositeRule: true, + createErrors: false, + allErrors: false, + }); + } + cxt.subschema(subschema, valid); + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/names": 42, "../../compile/util": 46, "../code": 77 }], 62: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const util_1 = require("../../compile/util"); + const def = { + keyword: "allOf", + schemaType: "array", + code(cxt) { + const { gen, schema, it } = cxt; + /* istanbul ignore if */ + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + const valid = gen.name("valid"); + schema.forEach((sch, i) => { + if ((0, util_1.alwaysValidSchema)(it, sch)) + return; + const schCxt = cxt.subschema({ keyword: "allOf", schemaProp: i }, valid); + cxt.ok(valid); + cxt.mergeEvaluated(schCxt); + }); + }, + }; + exports.default = def; + + }, { "../../compile/util": 46 }], 63: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const code_1 = require("../code"); + const def = { + keyword: "anyOf", + schemaType: "array", + trackErrors: true, + code: code_1.validateUnion, + error: { message: "must match a schema in anyOf" }, + }; + exports.default = def; + + }, { "../code": 77 }], 64: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const error = { + message: ({ params: { min, max } }) => max === undefined + ? (0, codegen_1.str)`must contain at least ${min} valid item(s)` + : (0, codegen_1.str)`must contain at least ${min} and no more than ${max} valid item(s)`, + params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._)`{minContains: ${min}}` : (0, codegen_1._)`{minContains: ${min}, maxContains: ${max}}`, + }; + const def = { + keyword: "contains", + type: "array", + schemaType: ["object", "boolean"], + before: "uniqueItems", + trackErrors: true, + error, + code(cxt) { + const { gen, schema, parentSchema, data, it } = cxt; + let min; + let max; + const { minContains, maxContains } = parentSchema; + if (it.opts.next) { + min = minContains === undefined ? 1 : minContains; + max = maxContains; + } + else { + min = 1; + } + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + cxt.setParams({ min, max }); + if (max === undefined && min === 0) { + (0, util_1.checkStrictMode)(it, `"minContains" == 0 without "maxContains": "contains" keyword ignored`); + return; + } + if (max !== undefined && min > max) { + (0, util_1.checkStrictMode)(it, `"minContains" > "maxContains" is always invalid`); + cxt.fail(); + return; + } + if ((0, util_1.alwaysValidSchema)(it, schema)) { + let cond = (0, codegen_1._)`${len} >= ${min}`; + if (max !== undefined) + cond = (0, codegen_1._)`${cond} && ${len} <= ${max}`; + cxt.pass(cond); + return; + } + it.items = true; + const valid = gen.name("valid"); + if (max === undefined && min === 1) { + validateItems(valid, () => gen.if(valid, () => gen.break())); + } + else if (min === 0) { + gen.let(valid, true); + if (max !== undefined) + gen.if((0, codegen_1._)`${data}.length > 0`, validateItemsWithCount); + } + else { + gen.let(valid, false); + validateItemsWithCount(); + } + cxt.result(valid, () => cxt.reset()); + function validateItemsWithCount() { + const schValid = gen.name("_valid"); + const count = gen.let("count", 0); + validateItems(schValid, () => gen.if(schValid, () => checkLimits(count))); + } + function validateItems(_valid, block) { + gen.forRange("i", 0, len, (i) => { + cxt.subschema({ + keyword: "contains", + dataProp: i, + dataPropType: util_1.Type.Num, + compositeRule: true, + }, _valid); + block(); + }); + } + function checkLimits(count) { + gen.code((0, codegen_1._)`${count}++`); + if (max === undefined) { + gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true).break()); + } + else { + gen.if((0, codegen_1._)`${count} > ${max}`, () => gen.assign(valid, false).break()); + if (min === 1) + gen.assign(valid, true); + else + gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true)); + } + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46 }], 65: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0; + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const code_1 = require("../code"); + exports.error = { + message: ({ params: { property, depsCount, deps } }) => { + const property_ies = depsCount === 1 ? "property" : "properties"; + return (0, codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`; + }, + params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._)`{property: ${property}, + missingProperty: ${missingProperty}, + depsCount: ${depsCount}, + deps: ${deps}}`, // TODO change to reference + }; + const def = { + keyword: "dependencies", + type: "object", + schemaType: "object", + error: exports.error, + code(cxt) { + const [propDeps, schDeps] = splitDependencies(cxt); + validatePropertyDeps(cxt, propDeps); + validateSchemaDeps(cxt, schDeps); + }, + }; + function splitDependencies({ schema }) { + const propertyDeps = {}; + const schemaDeps = {}; + for (const key in schema) { + if (key === "__proto__") + continue; + const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps; + deps[key] = schema[key]; + } + return [propertyDeps, schemaDeps]; + } + function validatePropertyDeps(cxt, propertyDeps = cxt.schema) { + const { gen, data, it } = cxt; + if (Object.keys(propertyDeps).length === 0) + return; + const missing = gen.let("missing"); + for (const prop in propertyDeps) { + const deps = propertyDeps[prop]; + if (deps.length === 0) + continue; + const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties); + cxt.setParams({ + property: prop, + depsCount: deps.length, + deps: deps.join(", "), + }); + if (it.allErrors) { + gen.if(hasProperty, () => { + for (const depProp of deps) { + (0, code_1.checkReportMissingProp)(cxt, depProp); + } + }); + } + else { + gen.if((0, codegen_1._)`${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`); + (0, code_1.reportMissingProp)(cxt, missing); + gen.else(); + } + } + } + exports.validatePropertyDeps = validatePropertyDeps; + function validateSchemaDeps(cxt, schemaDeps = cxt.schema) { + const { gen, data, keyword, it } = cxt; + const valid = gen.name("valid"); + for (const prop in schemaDeps) { + if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop])) + continue; + gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => { + const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid); + cxt.mergeValidEvaluated(schCxt, valid); + }, () => gen.var(valid, true) // TODO var + ); + cxt.ok(valid); + } + } + exports.validateSchemaDeps = validateSchemaDeps; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../code": 77 }], 66: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const error = { + message: ({ params }) => (0, codegen_1.str)`must match "${params.ifClause}" schema`, + params: ({ params }) => (0, codegen_1._)`{failingKeyword: ${params.ifClause}}`, + }; + const def = { + keyword: "if", + schemaType: ["object", "boolean"], + trackErrors: true, + error, + code(cxt) { + const { gen, parentSchema, it } = cxt; + if (parentSchema.then === undefined && parentSchema.else === undefined) { + (0, util_1.checkStrictMode)(it, '"if" without "then" and "else" is ignored'); + } + const hasThen = hasSchema(it, "then"); + const hasElse = hasSchema(it, "else"); + if (!hasThen && !hasElse) + return; + const valid = gen.let("valid", true); + const schValid = gen.name("_valid"); + validateIf(); + cxt.reset(); + if (hasThen && hasElse) { + const ifClause = gen.let("ifClause"); + cxt.setParams({ ifClause }); + gen.if(schValid, validateClause("then", ifClause), validateClause("else", ifClause)); + } + else if (hasThen) { + gen.if(schValid, validateClause("then")); + } + else { + gen.if((0, codegen_1.not)(schValid), validateClause("else")); + } + cxt.pass(valid, () => cxt.error(true)); + function validateIf() { + const schCxt = cxt.subschema({ + keyword: "if", + compositeRule: true, + createErrors: false, + allErrors: false, + }, schValid); + cxt.mergeEvaluated(schCxt); + } + function validateClause(keyword, ifClause) { + return () => { + const schCxt = cxt.subschema({ keyword }, schValid); + gen.assign(valid, schValid); + cxt.mergeValidEvaluated(schCxt, valid); + if (ifClause) + gen.assign(ifClause, (0, codegen_1._)`${keyword}`); + else + cxt.setParams({ ifClause: keyword }); + }; + } + }, + }; + function hasSchema(it, keyword) { + const schema = it.schema[keyword]; + return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema); + } + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46 }], 67: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const additionalItems_1 = require("./additionalItems"); + const prefixItems_1 = require("./prefixItems"); + const items_1 = require("./items"); + const items2020_1 = require("./items2020"); + const contains_1 = require("./contains"); + const dependencies_1 = require("./dependencies"); + const propertyNames_1 = require("./propertyNames"); + const additionalProperties_1 = require("./additionalProperties"); + const properties_1 = require("./properties"); + const patternProperties_1 = require("./patternProperties"); + const not_1 = require("./not"); + const anyOf_1 = require("./anyOf"); + const oneOf_1 = require("./oneOf"); + const allOf_1 = require("./allOf"); + const if_1 = require("./if"); + const thenElse_1 = require("./thenElse"); + function getApplicator(draft2020 = false) { + const applicator = [ + // any + not_1.default, + anyOf_1.default, + oneOf_1.default, + allOf_1.default, + if_1.default, + thenElse_1.default, + // object + propertyNames_1.default, + additionalProperties_1.default, + dependencies_1.default, + properties_1.default, + patternProperties_1.default, + ]; + // array + if (draft2020) + applicator.push(prefixItems_1.default, items2020_1.default); + else + applicator.push(additionalItems_1.default, items_1.default); + applicator.push(contains_1.default); + return applicator; + } + exports.default = getApplicator; + + }, { "./additionalItems": 60, "./additionalProperties": 61, "./allOf": 62, "./anyOf": 63, "./contains": 64, "./dependencies": 65, "./if": 66, "./items": 68, "./items2020": 69, "./not": 70, "./oneOf": 71, "./patternProperties": 72, "./prefixItems": 73, "./properties": 74, "./propertyNames": 75, "./thenElse": 76 }], 68: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateTuple = void 0; + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const code_1 = require("../code"); + const def = { + keyword: "items", + type: "array", + schemaType: ["object", "array", "boolean"], + before: "uniqueItems", + code(cxt) { + const { schema, it } = cxt; + if (Array.isArray(schema)) + return validateTuple(cxt, "additionalItems", schema); + it.items = true; + if ((0, util_1.alwaysValidSchema)(it, schema)) + return; + cxt.ok((0, code_1.validateArray)(cxt)); + }, + }; + function validateTuple(cxt, extraItems, schArr = cxt.schema) { + const { gen, parentSchema, data, keyword, it } = cxt; + checkStrictTuple(parentSchema); + if (it.opts.unevaluated && schArr.length && it.items !== true) { + it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items); + } + const valid = gen.name("valid"); + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + schArr.forEach((sch, i) => { + if ((0, util_1.alwaysValidSchema)(it, sch)) + return; + gen.if((0, codegen_1._)`${len} > ${i}`, () => cxt.subschema({ + keyword, + schemaProp: i, + dataProp: i, + }, valid)); + cxt.ok(valid); + }); + function checkStrictTuple(sch) { + const { opts, errSchemaPath } = it; + const l = schArr.length; + const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false); + if (opts.strictTuples && !fullTuple) { + const msg = `"${keyword}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`; + (0, util_1.checkStrictMode)(it, msg, opts.strictTuples); + } + } + } + exports.validateTuple = validateTuple; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../code": 77 }], 69: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const code_1 = require("../code"); + const additionalItems_1 = require("./additionalItems"); + const error = { + message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, + params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}`, + }; + const def = { + keyword: "items", + type: "array", + schemaType: ["object", "boolean"], + before: "uniqueItems", + error, + code(cxt) { + const { schema, parentSchema, it } = cxt; + const { prefixItems } = parentSchema; + it.items = true; + if ((0, util_1.alwaysValidSchema)(it, schema)) + return; + if (prefixItems) + (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems); + else + cxt.ok((0, code_1.validateArray)(cxt)); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../code": 77, "./additionalItems": 60 }], 70: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const util_1 = require("../../compile/util"); + const def = { + keyword: "not", + schemaType: ["object", "boolean"], + trackErrors: true, + code(cxt) { + const { gen, schema, it } = cxt; + if ((0, util_1.alwaysValidSchema)(it, schema)) { + cxt.fail(); + return; + } + const valid = gen.name("valid"); + cxt.subschema({ + keyword: "not", + compositeRule: true, + createErrors: false, + allErrors: false, + }, valid); + cxt.failResult(valid, () => cxt.reset(), () => cxt.error()); + }, + error: { message: "must NOT be valid" }, + }; + exports.default = def; + + }, { "../../compile/util": 46 }], 71: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const error = { + message: "must match exactly one schema in oneOf", + params: ({ params }) => (0, codegen_1._)`{passingSchemas: ${params.passing}}`, + }; + const def = { + keyword: "oneOf", + schemaType: "array", + trackErrors: true, + error, + code(cxt) { + const { gen, schema, parentSchema, it } = cxt; + /* istanbul ignore if */ + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + if (it.opts.discriminator && parentSchema.discriminator) + return; + const schArr = schema; + const valid = gen.let("valid", false); + const passing = gen.let("passing", null); + const schValid = gen.name("_valid"); + cxt.setParams({ passing }); + // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas + gen.block(validateOneOf); + cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); + function validateOneOf() { + schArr.forEach((sch, i) => { + let schCxt; + if ((0, util_1.alwaysValidSchema)(it, sch)) { + gen.var(schValid, true); + } + else { + schCxt = cxt.subschema({ + keyword: "oneOf", + schemaProp: i, + compositeRule: true, + }, schValid); + } + if (i > 0) { + gen + .if((0, codegen_1._)`${schValid} && ${valid}`) + .assign(valid, false) + .assign(passing, (0, codegen_1._)`[${passing}, ${i}]`) + .else(); + } + gen.if(schValid, () => { + gen.assign(valid, true); + gen.assign(passing, i); + if (schCxt) + cxt.mergeEvaluated(schCxt, codegen_1.Name); + }); + }); + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46 }], 72: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const code_1 = require("../code"); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const util_2 = require("../../compile/util"); + const def = { + keyword: "patternProperties", + type: "object", + schemaType: "object", + code(cxt) { + const { gen, schema, data, parentSchema, it } = cxt; + const { opts } = it; + const patterns = (0, code_1.allSchemaProperties)(schema); + const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p])); + if (patterns.length === 0 || + (alwaysValidPatterns.length === patterns.length && + (!it.opts.unevaluated || it.props === true))) { + return; + } + const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties; + const valid = gen.name("valid"); + if (it.props !== true && !(it.props instanceof codegen_1.Name)) { + it.props = (0, util_2.evaluatedPropsToName)(gen, it.props); + } + const { props } = it; + validatePatternProperties(); + function validatePatternProperties() { + for (const pat of patterns) { + if (checkProperties) + checkMatchingProperties(pat); + if (it.allErrors) { + validateProperties(pat); + } + else { + gen.var(valid, true); // TODO var + validateProperties(pat); + gen.if(valid); + } + } + } + function checkMatchingProperties(pat) { + for (const prop in checkProperties) { + if (new RegExp(pat).test(prop)) { + (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`); + } + } + } + function validateProperties(pat) { + gen.forIn("key", data, (key) => { + gen.if((0, codegen_1._)`${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => { + const alwaysValid = alwaysValidPatterns.includes(pat); + if (!alwaysValid) { + cxt.subschema({ + keyword: "patternProperties", + schemaProp: pat, + dataProp: key, + dataPropType: util_2.Type.Str, + }, valid); + } + if (it.opts.unevaluated && props !== true) { + gen.assign((0, codegen_1._)`${props}[${key}]`, true); + } + else if (!alwaysValid && !it.allErrors) { + // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false) + // or if all properties were evaluated (props === true) + gen.if((0, codegen_1.not)(valid), () => gen.break()); + } + }); + }); + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../code": 77 }], 73: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const items_1 = require("./items"); + const def = { + keyword: "prefixItems", + type: "array", + schemaType: ["array"], + before: "uniqueItems", + code: (cxt) => (0, items_1.validateTuple)(cxt, "items"), + }; + exports.default = def; + + }, { "./items": 68 }], 74: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const validate_1 = require("../../compile/validate"); + const code_1 = require("../code"); + const util_1 = require("../../compile/util"); + const additionalProperties_1 = require("./additionalProperties"); + const def = { + keyword: "properties", + type: "object", + schemaType: "object", + code(cxt) { + const { gen, schema, parentSchema, data, it } = cxt; + if (it.opts.removeAdditional === "all" && parentSchema.additionalProperties === undefined) { + additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, "additionalProperties")); + } + const allProps = (0, code_1.allSchemaProperties)(schema); + for (const prop of allProps) { + it.definedProperties.add(prop); + } + if (it.opts.unevaluated && allProps.length && it.props !== true) { + it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props); + } + const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p])); + if (properties.length === 0) + return; + const valid = gen.name("valid"); + for (const prop of properties) { + if (hasDefault(prop)) { + applyPropertySchema(prop); + } + else { + gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties)); + applyPropertySchema(prop); + if (!it.allErrors) + gen.else().var(valid, true); + gen.endIf(); + } + cxt.it.definedProperties.add(prop); + cxt.ok(valid); + } + function hasDefault(prop) { + return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined; + } + function applyPropertySchema(prop) { + cxt.subschema({ + keyword: "properties", + schemaProp: prop, + dataProp: prop, + }, valid); + } + }, + }; + exports.default = def; + + }, { "../../compile/util": 46, "../../compile/validate": 51, "../code": 77, "./additionalProperties": 61 }], 75: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const error = { + message: "property name must be valid", + params: ({ params }) => (0, codegen_1._)`{propertyName: ${params.propertyName}}`, + }; + const def = { + keyword: "propertyNames", + type: "object", + schemaType: ["object", "boolean"], + error, + code(cxt) { + const { gen, schema, data, it } = cxt; + if ((0, util_1.alwaysValidSchema)(it, schema)) + return; + const valid = gen.name("valid"); + gen.forIn("key", data, (key) => { + cxt.setParams({ propertyName: key }); + cxt.subschema({ + keyword: "propertyNames", + data: key, + dataTypes: ["string"], + propertyName: key, + compositeRule: true, + }, valid); + gen.if((0, codegen_1.not)(valid), () => { + cxt.error(true); + if (!it.allErrors) + gen.break(); + }); + }); + cxt.ok(valid); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46 }], 76: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const util_1 = require("../../compile/util"); + const def = { + keyword: ["then", "else"], + schemaType: ["object", "boolean"], + code({ keyword, parentSchema, it }) { + if (parentSchema.if === undefined) + (0, util_1.checkStrictMode)(it, `"${keyword}" without "if" is ignored`); + }, + }; + exports.default = def; + + }, { "../../compile/util": 46 }], 77: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0; + const codegen_1 = require("../compile/codegen"); + const util_1 = require("../compile/util"); + const names_1 = require("../compile/names"); + const util_2 = require("../compile/util"); + function checkReportMissingProp(cxt, prop) { + const { gen, data, it } = cxt; + gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => { + cxt.setParams({ missingProperty: (0, codegen_1._)`${prop}` }, true); + cxt.error(); + }); + } + exports.checkReportMissingProp = checkReportMissingProp; + function checkMissingProp({ gen, data, it: { opts } }, properties, missing) { + return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._)`${missing} = ${prop}`))); + } + exports.checkMissingProp = checkMissingProp; + function reportMissingProp(cxt, missing) { + cxt.setParams({ missingProperty: missing }, true); + cxt.error(); + } + exports.reportMissingProp = reportMissingProp; + function hasPropFunc(gen) { + return gen.scopeValue("func", { + // eslint-disable-next-line @typescript-eslint/unbound-method + ref: Object.prototype.hasOwnProperty, + code: (0, codegen_1._)`Object.prototype.hasOwnProperty`, + }); + } + exports.hasPropFunc = hasPropFunc; + function isOwnProperty(gen, data, property) { + return (0, codegen_1._)`${hasPropFunc(gen)}.call(${data}, ${property})`; + } + exports.isOwnProperty = isOwnProperty; + function propertyInData(gen, data, property, ownProperties) { + const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} !== undefined`; + return ownProperties ? (0, codegen_1._)`${cond} && ${isOwnProperty(gen, data, property)}` : cond; + } + exports.propertyInData = propertyInData; + function noPropertyInData(gen, data, property, ownProperties) { + const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} === undefined`; + return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond; + } + exports.noPropertyInData = noPropertyInData; + function allSchemaProperties(schemaMap) { + return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : []; + } + exports.allSchemaProperties = allSchemaProperties; + function schemaProperties(it, schemaMap) { + return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p])); + } + exports.schemaProperties = schemaProperties; + function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) { + const dataAndSchema = passSchema ? (0, codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data; + const valCxt = [ + [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)], + [names_1.default.parentData, it.parentData], + [names_1.default.parentDataProperty, it.parentDataProperty], + [names_1.default.rootData, names_1.default.rootData], + ]; + if (it.opts.dynamicRef) + valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]); + const args = (0, codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`; + return context !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context}, ${args})` : (0, codegen_1._)`${func}(${args})`; + } + exports.callValidateCode = callValidateCode; + const newRegExp = (0, codegen_1._)`new RegExp`; + function usePattern({ gen, it: { opts } }, pattern) { + const u = opts.unicodeRegExp ? "u" : ""; + const { regExp } = opts.code; + return gen.scopeValue("pattern", { + key: pattern, + ref: regExp(pattern, u), + code: (0, codegen_1._)`${regExp.code === "new RegExp" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`, + }); + } + exports.usePattern = usePattern; + function validateArray(cxt) { + const { gen, data, keyword, it } = cxt; + const valid = gen.name("valid"); + if (it.allErrors) { + const validArr = gen.let("valid", true); + validateItems(() => gen.assign(validArr, false)); + return validArr; + } + gen.var(valid, true); + validateItems(() => gen.break()); + return valid; + function validateItems(notValid) { + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + gen.forRange("i", 0, len, (i) => { + cxt.subschema({ + keyword, + dataProp: i, + dataPropType: util_1.Type.Num, + }, valid); + gen.if((0, codegen_1.not)(valid), notValid); + }); + } + } + exports.validateArray = validateArray; + function validateUnion(cxt) { + const { gen, schema, keyword, it } = cxt; + /* istanbul ignore if */ + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch)); + if (alwaysValid && !it.opts.unevaluated) + return; + const valid = gen.let("valid", false); + const schValid = gen.name("_valid"); + gen.block(() => schema.forEach((_sch, i) => { + const schCxt = cxt.subschema({ + keyword, + schemaProp: i, + compositeRule: true, + }, schValid); + gen.assign(valid, (0, codegen_1._)`${valid} || ${schValid}`); + const merged = cxt.mergeValidEvaluated(schCxt, schValid); + // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true) + // or if all properties and items were evaluated (it.props === true && it.items === true) + if (!merged) + gen.if((0, codegen_1.not)(valid)); + })); + cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); + } + exports.validateUnion = validateUnion; + + }, { "../compile/codegen": 38, "../compile/names": 42, "../compile/util": 46 }], 78: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const def = { + keyword: "id", + code() { + throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID'); + }, + }; + exports.default = def; + + }, {}], 79: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const id_1 = require("./id"); + const ref_1 = require("./ref"); + const core = [ + "$schema", + "$id", + "$defs", + "$vocabulary", + { keyword: "$comment" }, + "definitions", + id_1.default, + ref_1.default, + ]; + exports.default = core; + + }, { "./id": 78, "./ref": 80 }], 80: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.callRef = exports.getValidate = void 0; + const ref_error_1 = require("../../compile/ref_error"); + const code_1 = require("../code"); + const codegen_1 = require("../../compile/codegen"); + const names_1 = require("../../compile/names"); + const compile_1 = require("../../compile"); + const util_1 = require("../../compile/util"); + const def = { + keyword: "$ref", + schemaType: "string", + code(cxt) { + const { gen, schema: $ref, it } = cxt; + const { baseId, schemaEnv: env, validateName, opts, self } = it; + const { root } = env; + if (($ref === "#" || $ref === "#/") && baseId === root.baseId) + return callRootRef(); + const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref); + if (schOrEnv === undefined) + throw new ref_error_1.default(baseId, $ref); + if (schOrEnv instanceof compile_1.SchemaEnv) + return callValidate(schOrEnv); + return inlineRefSchema(schOrEnv); + function callRootRef() { + if (env === root) + return callRef(cxt, validateName, env, env.$async); + const rootName = gen.scopeValue("root", { ref: root }); + return callRef(cxt, (0, codegen_1._)`${rootName}.validate`, root, root.$async); + } + function callValidate(sch) { + const v = getValidate(cxt, sch); + callRef(cxt, v, sch, sch.$async); + } + function inlineRefSchema(sch) { + const schName = gen.scopeValue("schema", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch }); + const valid = gen.name("valid"); + const schCxt = cxt.subschema({ + schema: sch, + dataTypes: [], + schemaPath: codegen_1.nil, + topSchemaRef: schName, + errSchemaPath: $ref, + }, valid); + cxt.mergeEvaluated(schCxt); + cxt.ok(valid); + } + }, + }; + function getValidate(cxt, sch) { + const { gen } = cxt; + return sch.validate + ? gen.scopeValue("validate", { ref: sch.validate }) + : (0, codegen_1._)`${gen.scopeValue("wrapper", { ref: sch })}.validate`; + } + exports.getValidate = getValidate; + function callRef(cxt, v, sch, $async) { + const { gen, it } = cxt; + const { allErrors, schemaEnv: env, opts } = it; + const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil; + if ($async) + callAsyncRef(); + else + callSyncRef(); + function callAsyncRef() { + if (!env.$async) + throw new Error("async schema referenced by sync schema"); + const valid = gen.let("valid"); + gen.try(() => { + gen.code((0, codegen_1._)`await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`); + addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result + if (!allErrors) + gen.assign(valid, true); + }, (e) => { + gen.if((0, codegen_1._)`!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e)); + addErrorsFrom(e); + if (!allErrors) + gen.assign(valid, false); + }); + cxt.ok(valid); + } + function callSyncRef() { + cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v)); + } + function addErrorsFrom(source) { + const errs = (0, codegen_1._)`${source}.errors`; + gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged + gen.assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); + } + function addEvaluatedFrom(source) { + var _a; + if (!it.opts.unevaluated) + return; + const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated; + // TODO refactor + if (it.props !== true) { + if (schEvaluated && !schEvaluated.dynamicProps) { + if (schEvaluated.props !== undefined) { + it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props); + } + } + else { + const props = gen.var("props", (0, codegen_1._)`${source}.evaluated.props`); + it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name); + } + } + if (it.items !== true) { + if (schEvaluated && !schEvaluated.dynamicItems) { + if (schEvaluated.items !== undefined) { + it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items); + } + } + else { + const items = gen.var("items", (0, codegen_1._)`${source}.evaluated.items`); + it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name); + } + } + } + } + exports.callRef = callRef; + exports.default = def; + + }, { "../../compile": 41, "../../compile/codegen": 38, "../../compile/names": 42, "../../compile/ref_error": 43, "../../compile/util": 46, "../code": 77 }], 81: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const types_1 = require("../discriminator/types"); + const error = { + message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag + ? `tag "${tagName}" must be string` + : `value of tag "${tagName}" must be in oneOf`, + params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`, + }; + const def = { + keyword: "discriminator", + type: "object", + schemaType: "object", + error, + code(cxt) { + const { gen, data, schema, parentSchema, it } = cxt; + const { oneOf } = parentSchema; + if (!it.opts.discriminator) { + throw new Error("discriminator: requires discriminator option"); + } + const tagName = schema.propertyName; + if (typeof tagName != "string") + throw new Error("discriminator: requires propertyName"); + if (schema.mapping) + throw new Error("discriminator: mapping is not supported"); + if (!oneOf) + throw new Error("discriminator: requires oneOf keyword"); + const valid = gen.let("valid", false); + const tag = gen.const("tag", (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(tagName)}`); + gen.if((0, codegen_1._)`typeof ${tag} == "string"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName })); + cxt.ok(valid); + function validateMapping() { + const mapping = getMapping(); + gen.if(false); + for (const tagValue in mapping) { + gen.elseIf((0, codegen_1._)`${tag} === ${tagValue}`); + gen.assign(valid, applyTagSchema(mapping[tagValue])); + } + gen.else(); + cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName }); + gen.endIf(); + } + function applyTagSchema(schemaProp) { + const _valid = gen.name("valid"); + const schCxt = cxt.subschema({ keyword: "oneOf", schemaProp }, _valid); + cxt.mergeEvaluated(schCxt, codegen_1.Name); + return _valid; + } + function getMapping() { + var _a; + const oneOfMapping = {}; + const topRequired = hasRequired(parentSchema); + let tagRequired = true; + for (let i = 0; i < oneOf.length; i++) { + const sch = oneOf[i]; + const propSch = (_a = sch.properties) === null || _a === void 0 ? void 0 : _a[tagName]; + if (typeof propSch != "object") { + throw new Error(`discriminator: oneOf schemas must have "properties/${tagName}"`); + } + tagRequired = tagRequired && (topRequired || hasRequired(sch)); + addMappings(propSch, i); + } + if (!tagRequired) + throw new Error(`discriminator: "${tagName}" must be required`); + return oneOfMapping; + function hasRequired({ required }) { + return Array.isArray(required) && required.includes(tagName); + } + function addMappings(sch, i) { + if (sch.const) { + addMapping(sch.const, i); + } + else if (sch.enum) { + for (const tagValue of sch.enum) { + addMapping(tagValue, i); + } + } + else { + throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`); + } + } + function addMapping(tagValue, i) { + if (typeof tagValue != "string" || tagValue in oneOfMapping) { + throw new Error(`discriminator: "${tagName}" values must be unique strings`); + } + oneOfMapping[tagValue] = i; + } + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../discriminator/types": 82 }], 82: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.DiscrError = void 0; + var DiscrError; + (function (DiscrError) { + DiscrError["Tag"] = "tag"; + DiscrError["Mapping"] = "mapping"; + })(DiscrError = exports.DiscrError || (exports.DiscrError = {})); + + }, {}], 83: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const core_1 = require("./core"); + const validation_1 = require("./validation"); + const applicator_1 = require("./applicator"); + const format_1 = require("./format"); + const metadata_1 = require("./metadata"); + const draft7Vocabularies = [ + core_1.default, + validation_1.default, + (0, applicator_1.default)(), + format_1.default, + metadata_1.metadataVocabulary, + metadata_1.contentVocabulary, + ]; + exports.default = draft7Vocabularies; + + }, { "./applicator": 67, "./core": 79, "./format": 85, "./metadata": 86, "./validation": 89 }], 84: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const error = { + message: ({ schemaCode }) => (0, codegen_1.str)`must match format "${schemaCode}"`, + params: ({ schemaCode }) => (0, codegen_1._)`{format: ${schemaCode}}`, + }; + const def = { + keyword: "format", + type: ["number", "string"], + schemaType: "string", + $data: true, + error, + code(cxt, ruleType) { + const { gen, data, $data, schema, schemaCode, it } = cxt; + const { opts, errSchemaPath, schemaEnv, self } = it; + if (!opts.validateFormats) + return; + if ($data) + validate$DataFormat(); + else + validateFormat(); + function validate$DataFormat() { + const fmts = gen.scopeValue("formats", { + ref: self.formats, + code: opts.code.formats, + }); + const fDef = gen.const("fDef", (0, codegen_1._)`${fmts}[${schemaCode}]`); + const fType = gen.let("fType"); + const format = gen.let("format"); + // TODO simplify + gen.if((0, codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._)`${fDef}.type || "string"`).assign(format, (0, codegen_1._)`${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._)`"string"`).assign(format, fDef)); + cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt())); + function unknownFmt() { + if (opts.strictSchema === false) + return codegen_1.nil; + return (0, codegen_1._)`${schemaCode} && !${format}`; + } + function invalidFmt() { + const callFormat = schemaEnv.$async + ? (0, codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))` + : (0, codegen_1._)`${format}(${data})`; + const validData = (0, codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`; + return (0, codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`; + } + } + function validateFormat() { + const formatDef = self.formats[schema]; + if (!formatDef) { + unknownFormat(); + return; + } + if (formatDef === true) + return; + const [fmtType, format, fmtRef] = getFormat(formatDef); + if (fmtType === ruleType) + cxt.pass(validCondition()); + function unknownFormat() { + if (opts.strictSchema === false) { + self.logger.warn(unknownMsg()); + return; + } + throw new Error(unknownMsg()); + function unknownMsg() { + return `unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`; + } + } + function getFormat(fmtDef) { + const code = fmtDef instanceof RegExp + ? (0, codegen_1.regexpCode)(fmtDef) + : opts.code.formats + ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(schema)}` + : undefined; + const fmt = gen.scopeValue("formats", { key: schema, ref: fmtDef, code }); + if (typeof fmtDef == "object" && !(fmtDef instanceof RegExp)) { + return [fmtDef.type || "string", fmtDef.validate, (0, codegen_1._)`${fmt}.validate`]; + } + return ["string", fmtDef, fmt]; + } + function validCondition() { + if (typeof formatDef == "object" && !(formatDef instanceof RegExp) && formatDef.async) { + if (!schemaEnv.$async) + throw new Error("async format in sync schema"); + return (0, codegen_1._)`await ${fmtRef}(${data})`; + } + return typeof format == "function" ? (0, codegen_1._)`${fmtRef}(${data})` : (0, codegen_1._)`${fmtRef}.test(${data})`; + } + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38 }], 85: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const format_1 = require("./format"); + const format = [format_1.default]; + exports.default = format; + + }, { "./format": 84 }], 86: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.contentVocabulary = exports.metadataVocabulary = void 0; + exports.metadataVocabulary = [ + "title", + "description", + "default", + "deprecated", + "readOnly", + "writeOnly", + "examples", + ]; + exports.contentVocabulary = [ + "contentMediaType", + "contentEncoding", + "contentSchema", + ]; + + }, {}], 87: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const equal_1 = require("../../runtime/equal"); + const error = { + message: "must be equal to constant", + params: ({ schemaCode }) => (0, codegen_1._)`{allowedValue: ${schemaCode}}`, + }; + const def = { + keyword: "const", + $data: true, + error, + code(cxt) { + const { gen, data, $data, schemaCode, schema } = cxt; + if ($data || (schema && typeof schema == "object")) { + cxt.fail$data((0, codegen_1._)`!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`); + } + else { + cxt.fail((0, codegen_1._)`${schema} !== ${data}`); + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../../runtime/equal": 57 }], 88: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const equal_1 = require("../../runtime/equal"); + const error = { + message: "must be equal to one of the allowed values", + params: ({ schemaCode }) => (0, codegen_1._)`{allowedValues: ${schemaCode}}`, + }; + const def = { + keyword: "enum", + schemaType: "array", + $data: true, + error, + code(cxt) { + const { gen, data, $data, schema, schemaCode, it } = cxt; + if (!$data && schema.length === 0) + throw new Error("enum must have non-empty array"); + const useLoop = schema.length >= it.opts.loopEnum; + const eql = (0, util_1.useFunc)(gen, equal_1.default); + let valid; + if (useLoop || $data) { + valid = gen.let("valid"); + cxt.block$data(valid, loopEnum); + } + else { + /* istanbul ignore if */ + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + const vSchema = gen.const("vSchema", schemaCode); + valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i))); + } + cxt.pass(valid); + function loopEnum() { + gen.assign(valid, false); + gen.forOf("v", schemaCode, (v) => gen.if((0, codegen_1._)`${eql}(${data}, ${v})`, () => gen.assign(valid, true).break())); + } + function equalCode(vSchema, i) { + const sch = schema[i]; + return typeof sch === "object" && sch !== null + ? (0, codegen_1._)`${eql}(${data}, ${vSchema}[${i}])` + : (0, codegen_1._)`${data} === ${sch}`; + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../../runtime/equal": 57 }], 89: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const limitNumber_1 = require("./limitNumber"); + const multipleOf_1 = require("./multipleOf"); + const limitLength_1 = require("./limitLength"); + const pattern_1 = require("./pattern"); + const limitProperties_1 = require("./limitProperties"); + const required_1 = require("./required"); + const limitItems_1 = require("./limitItems"); + const uniqueItems_1 = require("./uniqueItems"); + const const_1 = require("./const"); + const enum_1 = require("./enum"); + const validation = [ + // number + limitNumber_1.default, + multipleOf_1.default, + // string + limitLength_1.default, + pattern_1.default, + // object + limitProperties_1.default, + required_1.default, + // array + limitItems_1.default, + uniqueItems_1.default, + // any + { keyword: "type", schemaType: ["string", "array"] }, + { keyword: "nullable", schemaType: "boolean" }, + const_1.default, + enum_1.default, + ]; + exports.default = validation; + + }, { "./const": 87, "./enum": 88, "./limitItems": 90, "./limitLength": 91, "./limitNumber": 92, "./limitProperties": 93, "./multipleOf": 94, "./pattern": 95, "./required": 96, "./uniqueItems": 97 }], 90: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const error = { + message({ keyword, schemaCode }) { + const comp = keyword === "maxItems" ? "more" : "fewer"; + return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`; + }, + params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}`, + }; + const def = { + keyword: ["maxItems", "minItems"], + type: "array", + schemaType: "number", + $data: true, + error, + code(cxt) { + const { keyword, data, schemaCode } = cxt; + const op = keyword === "maxItems" ? codegen_1.operators.GT : codegen_1.operators.LT; + cxt.fail$data((0, codegen_1._)`${data}.length ${op} ${schemaCode}`); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38 }], 91: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const ucs2length_1 = require("../../runtime/ucs2length"); + const error = { + message({ keyword, schemaCode }) { + const comp = keyword === "maxLength" ? "more" : "fewer"; + return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`; + }, + params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}`, + }; + const def = { + keyword: ["maxLength", "minLength"], + type: "string", + schemaType: "number", + $data: true, + error, + code(cxt) { + const { keyword, data, schemaCode, it } = cxt; + const op = keyword === "maxLength" ? codegen_1.operators.GT : codegen_1.operators.LT; + const len = it.opts.unicode === false ? (0, codegen_1._)`${data}.length` : (0, codegen_1._)`${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`; + cxt.fail$data((0, codegen_1._)`${len} ${op} ${schemaCode}`); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../../runtime/ucs2length": 58 }], 92: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const ops = codegen_1.operators; + const KWDs = { + maximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, + minimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, + exclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, + exclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE }, + }; + const error = { + message: ({ keyword, schemaCode }) => (0, codegen_1.str)`must be ${KWDs[keyword].okStr} ${schemaCode}`, + params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`, + }; + const def = { + keyword: Object.keys(KWDs), + type: "number", + schemaType: "number", + $data: true, + error, + code(cxt) { + const { keyword, data, schemaCode } = cxt; + cxt.fail$data((0, codegen_1._)`${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38 }], 93: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const error = { + message({ keyword, schemaCode }) { + const comp = keyword === "maxProperties" ? "more" : "fewer"; + return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`; + }, + params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}`, + }; + const def = { + keyword: ["maxProperties", "minProperties"], + type: "object", + schemaType: "number", + $data: true, + error, + code(cxt) { + const { keyword, data, schemaCode } = cxt; + const op = keyword === "maxProperties" ? codegen_1.operators.GT : codegen_1.operators.LT; + cxt.fail$data((0, codegen_1._)`Object.keys(${data}).length ${op} ${schemaCode}`); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38 }], 94: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const codegen_1 = require("../../compile/codegen"); + const error = { + message: ({ schemaCode }) => (0, codegen_1.str)`must be multiple of ${schemaCode}`, + params: ({ schemaCode }) => (0, codegen_1._)`{multipleOf: ${schemaCode}}`, + }; + const def = { + keyword: "multipleOf", + type: "number", + schemaType: "number", + $data: true, + error, + code(cxt) { + const { gen, data, schemaCode, it } = cxt; + // const bdt = bad$DataType(schemaCode, def.schemaType, $data) + const prec = it.opts.multipleOfPrecision; + const res = gen.let("res"); + const invalid = prec + ? (0, codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}` + : (0, codegen_1._)`${res} !== parseInt(${res})`; + cxt.fail$data((0, codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38 }], 95: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const code_1 = require("../code"); + const codegen_1 = require("../../compile/codegen"); + const error = { + message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`, + params: ({ schemaCode }) => (0, codegen_1._)`{pattern: ${schemaCode}}`, + }; + const def = { + keyword: "pattern", + type: "string", + schemaType: "string", + $data: true, + error, + code(cxt) { + const { data, $data, schema, schemaCode, it } = cxt; + // TODO regexp should be wrapped in try/catchs + const u = it.opts.unicodeRegExp ? "u" : ""; + const regExp = $data ? (0, codegen_1._)`(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema); + cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`); + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../code": 77 }], 96: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const code_1 = require("../code"); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const error = { + message: ({ params: { missingProperty } }) => (0, codegen_1.str)`must have required property '${missingProperty}'`, + params: ({ params: { missingProperty } }) => (0, codegen_1._)`{missingProperty: ${missingProperty}}`, + }; + const def = { + keyword: "required", + type: "object", + schemaType: "array", + $data: true, + error, + code(cxt) { + const { gen, schema, schemaCode, data, $data, it } = cxt; + const { opts } = it; + if (!$data && schema.length === 0) + return; + const useLoop = schema.length >= opts.loopRequired; + if (it.allErrors) + allErrorsMode(); + else + exitOnErrorMode(); + if (opts.strictRequired) { + const props = cxt.parentSchema.properties; + const { definedProperties } = cxt.it; + for (const requiredKey of schema) { + if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) { + const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; + const msg = `required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`; + (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired); + } + } + } + function allErrorsMode() { + if (useLoop || $data) { + cxt.block$data(codegen_1.nil, loopAllRequired); + } + else { + for (const prop of schema) { + (0, code_1.checkReportMissingProp)(cxt, prop); + } + } + } + function exitOnErrorMode() { + const missing = gen.let("missing"); + if (useLoop || $data) { + const valid = gen.let("valid", true); + cxt.block$data(valid, () => loopUntilMissing(missing, valid)); + cxt.ok(valid); + } + else { + gen.if((0, code_1.checkMissingProp)(cxt, schema, missing)); + (0, code_1.reportMissingProp)(cxt, missing); + gen.else(); + } + } + function loopAllRequired() { + gen.forOf("prop", schemaCode, (prop) => { + cxt.setParams({ missingProperty: prop }); + gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error()); + }); + } + function loopUntilMissing(missing, valid) { + cxt.setParams({ missingProperty: missing }); + gen.forOf(missing, schemaCode, () => { + gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties)); + gen.if((0, codegen_1.not)(valid), () => { + cxt.error(); + gen.break(); + }); + }, codegen_1.nil); + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../code": 77 }], 97: [function (require, module, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + const dataType_1 = require("../../compile/validate/dataType"); + const codegen_1 = require("../../compile/codegen"); + const util_1 = require("../../compile/util"); + const equal_1 = require("../../runtime/equal"); + const error = { + message: ({ params: { i, j } }) => (0, codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`, + params: ({ params: { i, j } }) => (0, codegen_1._)`{i: ${i}, j: ${j}}`, + }; + const def = { + keyword: "uniqueItems", + type: "array", + schemaType: "boolean", + $data: true, + error, + code(cxt) { + const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt; + if (!$data && !schema) + return; + const valid = gen.let("valid"); + const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : []; + cxt.block$data(valid, validateUniqueItems, (0, codegen_1._)`${schemaCode} === false`); + cxt.ok(valid); + function validateUniqueItems() { + const i = gen.let("i", (0, codegen_1._)`${data}.length`); + const j = gen.let("j"); + cxt.setParams({ i, j }); + gen.assign(valid, true); + gen.if((0, codegen_1._)`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j)); + } + function canOptimize() { + return itemTypes.length > 0 && !itemTypes.some((t) => t === "object" || t === "array"); + } + function loopN(i, j) { + const item = gen.name("item"); + const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong); + const indices = gen.const("indices", (0, codegen_1._)`{}`); + gen.for((0, codegen_1._)`;${i}--;`, () => { + gen.let(item, (0, codegen_1._)`${data}[${i}]`); + gen.if(wrongType, (0, codegen_1._)`continue`); + if (itemTypes.length > 1) + gen.if((0, codegen_1._)`typeof ${item} == "string"`, (0, codegen_1._)`${item} += "_"`); + gen + .if((0, codegen_1._)`typeof ${indices}[${item}] == "number"`, () => { + gen.assign(j, (0, codegen_1._)`${indices}[${item}]`); + cxt.error(); + gen.assign(valid, false).break(); + }) + .code((0, codegen_1._)`${indices}[${item}] = ${i}`); + }); + } + function loopN2(i, j) { + const eql = (0, util_1.useFunc)(gen, equal_1.default); + const outer = gen.name("outer"); + gen.label(outer).for((0, codegen_1._)`;${i}--;`, () => gen.for((0, codegen_1._)`${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`, () => { + cxt.error(); + gen.assign(valid, false).break(outer); + }))); + } + }, + }; + exports.default = def; + + }, { "../../compile/codegen": 38, "../../compile/util": 46, "../../compile/validate/dataType": 49, "../../runtime/equal": 57 }], 98: [function (require, module, exports) { + (function (Buffer) { + (function () { + var clone = (function () { + 'use strict'; + + function _instanceof(obj, type) { + return type != null && obj instanceof type; + } + + var nativeMap; + try { + nativeMap = Map; + } catch (_) { + // maybe a reference error because no `Map`. Give it a dummy value that no + // value will ever be an instanceof. + nativeMap = function () { }; + } + + var nativeSet; + try { + nativeSet = Set; + } catch (_) { + nativeSet = function () { }; + } + + var nativePromise; + try { + nativePromise = Promise; + } catch (_) { + nativePromise = function () { }; + } + + /** + * Clones (copies) an Object using deep copying. + * + * This function supports circular references by default, but if you are certain + * there are no circular references in your object, you can save some CPU time + * by calling clone(obj, false). + * + * Caution: if `circular` is false and `parent` contains circular references, + * your program may enter an infinite loop and crash. + * + * @param `parent` - the object to be cloned + * @param `circular` - set to true if the object to be cloned may contain + * circular references. (optional - true by default) + * @param `depth` - set to a number if the object is only to be cloned to + * a particular depth. (optional - defaults to Infinity) + * @param `prototype` - sets the prototype to be used when cloning an object. + * (optional - defaults to parent prototype). + * @param `includeNonEnumerable` - set to true if the non-enumerable properties + * should be cloned as well. Non-enumerable properties on the prototype + * chain will be ignored. (optional - false by default) + */ + function clone(parent, circular, depth, prototype, includeNonEnumerable) { + if (typeof circular === 'object') { + depth = circular.depth; + prototype = circular.prototype; + includeNonEnumerable = circular.includeNonEnumerable; + circular = circular.circular; + } + // maintain two arrays for circular references, where corresponding parents + // and children have the same index + var allParents = []; + var allChildren = []; + + var useBuffer = typeof Buffer != 'undefined'; + + if (typeof circular == 'undefined') + circular = true; + + if (typeof depth == 'undefined') + depth = Infinity; + + // recurse this function so we don't reset allParents and allChildren + function _clone(parent, depth) { + // cloning null always returns null + if (parent === null) + return null; + + if (depth === 0) + return parent; + + var child; + var proto; + if (typeof parent != 'object') { + return parent; + } + + if (_instanceof(parent, nativeMap)) { + child = new nativeMap(); + } else if (_instanceof(parent, nativeSet)) { + child = new nativeSet(); + } else if (_instanceof(parent, nativePromise)) { + child = new nativePromise(function (resolve, reject) { + parent.then(function (value) { + resolve(_clone(value, depth - 1)); + }, function (err) { + reject(_clone(err, depth - 1)); + }); + }); + } else if (clone.__isArray(parent)) { + child = []; + } else if (clone.__isRegExp(parent)) { + child = new RegExp(parent.source, __getRegExpFlags(parent)); + if (parent.lastIndex) child.lastIndex = parent.lastIndex; + } else if (clone.__isDate(parent)) { + child = new Date(parent.getTime()); + } else if (useBuffer && Buffer.isBuffer(parent)) { + if (Buffer.allocUnsafe) { + // Node.js >= 4.5.0 + child = Buffer.allocUnsafe(parent.length); + } else { + // Older Node.js versions + child = new Buffer(parent.length); + } + parent.copy(child); + return child; + } else if (_instanceof(parent, Error)) { + child = Object.create(parent); + } else { + if (typeof prototype == 'undefined') { + proto = Object.getPrototypeOf(parent); + child = Object.create(proto); + } + else { + child = Object.create(prototype); + proto = prototype; + } + } + + if (circular) { + var index = allParents.indexOf(parent); + + if (index != -1) { + return allChildren[index]; + } + allParents.push(parent); + allChildren.push(child); + } + + if (_instanceof(parent, nativeMap)) { + parent.forEach(function (value, key) { + var keyChild = _clone(key, depth - 1); + var valueChild = _clone(value, depth - 1); + child.set(keyChild, valueChild); + }); + } + if (_instanceof(parent, nativeSet)) { + parent.forEach(function (value) { + var entryChild = _clone(value, depth - 1); + child.add(entryChild); + }); + } + + for (var i in parent) { + var attrs; + if (proto) { + attrs = Object.getOwnPropertyDescriptor(proto, i); + } + + if (attrs && attrs.set == null) { + continue; + } + child[i] = _clone(parent[i], depth - 1); + } + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(parent); + for (var i = 0; i < symbols.length; i++) { + // Don't need to worry about cloning a symbol because it is a primitive, + // like a number or string. + var symbol = symbols[i]; + var descriptor = Object.getOwnPropertyDescriptor(parent, symbol); + if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { + continue; + } + child[symbol] = _clone(parent[symbol], depth - 1); + if (!descriptor.enumerable) { + Object.defineProperty(child, symbol, { + enumerable: false + }); + } + } + } + + if (includeNonEnumerable) { + var allPropertyNames = Object.getOwnPropertyNames(parent); + for (var i = 0; i < allPropertyNames.length; i++) { + var propertyName = allPropertyNames[i]; + var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName); + if (descriptor && descriptor.enumerable) { + continue; + } + child[propertyName] = _clone(parent[propertyName], depth - 1); + Object.defineProperty(child, propertyName, { + enumerable: false + }); + } + } + + return child; + } + + return _clone(parent, depth); + } + + /** + * Simple flat clone using prototype, accepts only objects, usefull for property + * override on FLAT configuration object (no nested props). + * + * USE WITH CAUTION! This may not behave as you wish if you do not know how this + * works. + */ + clone.clonePrototype = function clonePrototype(parent) { + if (parent === null) + return null; + + var c = function () { }; + c.prototype = parent; + return new c(); + }; + + // private utility functions + + function __objToStr(o) { + return Object.prototype.toString.call(o); + } + clone.__objToStr = __objToStr; + + function __isDate(o) { + return typeof o === 'object' && __objToStr(o) === '[object Date]'; + } + clone.__isDate = __isDate; + + function __isArray(o) { + return typeof o === 'object' && __objToStr(o) === '[object Array]'; + } + clone.__isArray = __isArray; + + function __isRegExp(o) { + return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; + } + clone.__isRegExp = __isRegExp; + + function __getRegExpFlags(re) { + var flags = ''; + if (re.global) flags += 'g'; + if (re.ignoreCase) flags += 'i'; + if (re.multiline) flags += 'm'; + return flags; + } + clone.__getRegExpFlags = __getRegExpFlags; + + return clone; + })(); + + if (typeof module === 'object' && module.exports) { + module.exports = clone; + } + + }).call(this) + }).call(this, require("buffer").Buffer) + }, { "buffer": 3 }], 99: [function (require, module, exports) { + 'use strict'; + + // do not edit .js files directly - edit src/index.jst + + + + module.exports = function equal(a, b) { + if (a === b) return true; + + if (a && b && typeof a == 'object' && typeof b == 'object') { + if (a.constructor !== b.constructor) return false; + + var length, i, keys; + if (Array.isArray(a)) { + length = a.length; + if (length != b.length) return false; + for (i = length; i-- !== 0;) + if (!equal(a[i], b[i])) return false; + return true; + } + + + + if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; + if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); + if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); + + keys = Object.keys(a); + length = keys.length; + if (length !== Object.keys(b).length) return false; + + for (i = length; i-- !== 0;) + if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; + + for (i = length; i-- !== 0;) { + var key = keys[i]; + + if (!equal(a[key], b[key])) return false; + } + + return true; + } + + // true if both NaN, false otherwise + return a !== a && b !== b; + }; + + }, {}], 100: [function (require, module, exports) { + 'use strict'; + + var traverse = module.exports = function (schema, opts, cb) { + // Legacy support for v0.3.1 and earlier. + if (typeof opts == 'function') { + cb = opts; + opts = {}; + } + + cb = opts.cb || cb; + var pre = (typeof cb == 'function') ? cb : cb.pre || function () { }; + var post = cb.post || function () { }; + + _traverse(opts, pre, post, schema, '', schema); + }; + + + traverse.keywords = { + additionalItems: true, + items: true, + contains: true, + additionalProperties: true, + propertyNames: true, + not: true, + if: true, + then: true, + else: true + }; + + traverse.arrayKeywords = { + items: true, + allOf: true, + anyOf: true, + oneOf: true + }; + + traverse.propsKeywords = { + $defs: true, + definitions: true, + properties: true, + patternProperties: true, + dependencies: true + }; + + traverse.skipKeywords = { + default: true, + enum: true, + const: true, + required: true, + maximum: true, + minimum: true, + exclusiveMaximum: true, + exclusiveMinimum: true, + multipleOf: true, + maxLength: true, + minLength: true, + pattern: true, + format: true, + maxItems: true, + minItems: true, + uniqueItems: true, + maxProperties: true, + minProperties: true + }; + + + function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { + if (schema && typeof schema == 'object' && !Array.isArray(schema)) { + pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); + for (var key in schema) { + var sch = schema[key]; + if (Array.isArray(sch)) { + if (key in traverse.arrayKeywords) { + for (var i = 0; i < sch.length; i++) + _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i); + } + } else if (key in traverse.propsKeywords) { + if (sch && typeof sch == 'object') { + for (var prop in sch) + _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); + } + } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) { + _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema); + } + } + post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); + } + } + + + function escapeJsonPtr(str) { + return str.replace(/~/g, '~0').replace(/\//g, '~1'); + } + + }, {}], 101: [function (require, module, exports) { + (function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.JSON5 = factory()); + }(this, (function () { + 'use strict'; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var _global = createCommonjsModule(function (module) { + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); + if (typeof __g == 'number') { __g = global; } // eslint-disable-line no-undef + }); + + var _core = createCommonjsModule(function (module) { + var core = module.exports = { version: '2.6.5' }; + if (typeof __e == 'number') { __e = core; } // eslint-disable-line no-undef + }); + var _core_1 = _core.version; + + var _isObject = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + var _anObject = function (it) { + if (!_isObject(it)) { throw TypeError(it + ' is not an object!'); } + return it; + }; + + var _fails = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } + }; + + // Thank's IE8 for his funny defineProperty + var _descriptors = !_fails(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; + }); + + var document = _global.document; + // typeof document.createElement is 'object' in old IE + var is = _isObject(document) && _isObject(document.createElement); + var _domCreate = function (it) { + return is ? document.createElement(it) : {}; + }; + + var _ie8DomDefine = !_descriptors && !_fails(function () { + return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7; + }); + + // 7.1.1 ToPrimitive(input [, PreferredType]) + + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + var _toPrimitive = function (it, S) { + if (!_isObject(it)) { return it; } + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) { return val; } + if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) { return val; } + if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) { return val; } + throw TypeError("Can't convert object to primitive value"); + }; + + var dP = Object.defineProperty; + + var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) { + _anObject(O); + P = _toPrimitive(P, true); + _anObject(Attributes); + if (_ie8DomDefine) { + try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + } + if ('get' in Attributes || 'set' in Attributes) { throw TypeError('Accessors not supported!'); } + if ('value' in Attributes) { O[P] = Attributes.value; } + return O; + }; + + var _objectDp = { + f: f + }; + + var _propertyDesc = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var _hide = _descriptors ? function (object, key, value) { + return _objectDp.f(object, key, _propertyDesc(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var hasOwnProperty = {}.hasOwnProperty; + var _has = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + var id = 0; + var px = Math.random(); + var _uid = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + + var _library = false; + + var _shared = createCommonjsModule(function (module) { + var SHARED = '__core-js_shared__'; + var store = _global[SHARED] || (_global[SHARED] = {}); + + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: _core.version, + mode: _library ? 'pure' : 'global', + copyright: '© 2019 Denis Pushkarev (zloirock.ru)' + }); + }); + + var _functionToString = _shared('native-function-to-string', Function.toString); + + var _redefine = createCommonjsModule(function (module) { + var SRC = _uid('src'); + + var TO_STRING = 'toString'; + var TPL = ('' + _functionToString).split(TO_STRING); + + _core.inspectSource = function (it) { + return _functionToString.call(it); + }; + + (module.exports = function (O, key, val, safe) { + var isFunction = typeof val == 'function'; + if (isFunction) { _has(val, 'name') || _hide(val, 'name', key); } + if (O[key] === val) { return; } + if (isFunction) { _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); } + if (O === _global) { + O[key] = val; + } else if (!safe) { + delete O[key]; + _hide(O, key, val); + } else if (O[key]) { + O[key] = val; + } else { + _hide(O, key, val); + } + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, TO_STRING, function toString() { + return typeof this == 'function' && this[SRC] || _functionToString.call(this); + }); + }); + + var _aFunction = function (it) { + if (typeof it != 'function') { throw TypeError(it + ' is not a function!'); } + return it; + }; + + // optional / simple context binding + + var _ctx = function (fn, that, length) { + _aFunction(fn); + if (that === undefined) { return fn; } + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + var PROTOTYPE = 'prototype'; + + var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) { source = name; } + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out; + // extend global + if (target) { _redefine(target, key, out, type & $export.U); } + // export + if (exports[key] != out) { _hide(exports, key, exp); } + if (IS_PROTO && expProto[key] != out) { expProto[key] = out; } + } + }; + _global.core = _core; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + var _export = $export; + + // 7.1.4 ToInteger + var ceil = Math.ceil; + var floor = Math.floor; + var _toInteger = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + + // 7.2.1 RequireObjectCoercible(argument) + var _defined = function (it) { + if (it == undefined) { throw TypeError("Can't call method on " + it); } + return it; + }; + + // true -> String#at + // false -> String#codePointAt + var _stringAt = function (TO_STRING) { + return function (that, pos) { + var s = String(_defined(that)); + var i = _toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) { return TO_STRING ? '' : undefined; } + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + + var $at = _stringAt(false); + _export(_export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt(pos) { + return $at(this, pos); + } + }); + + var codePointAt = _core.String.codePointAt; + + var max = Math.max; + var min = Math.min; + var _toAbsoluteIndex = function (index, length) { + index = _toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); + }; + + var fromCharCode = String.fromCharCode; + var $fromCodePoint = String.fromCodePoint; + + // length should be 1, old FF problem + _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x) { + var arguments$1 = arguments; + // eslint-disable-line no-unused-vars + var res = []; + var aLen = arguments.length; + var i = 0; + var code; + while (aLen > i) { + code = +arguments$1[i++]; + if (_toAbsoluteIndex(code, 0x10ffff) !== code) { throw RangeError(code + ' is not a valid code point'); } + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } + }); + + var fromCodePoint = _core.String.fromCodePoint; + + // This is a generated file. Do not edit. + var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; + var ID_Start = /[\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\u0860-\u086A\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\u09FC\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\u16EE-\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\u2160-\u2188\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-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\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]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; + var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\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\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\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\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; + + var unicode = { + Space_Separator: Space_Separator, + ID_Start: ID_Start, + ID_Continue: ID_Continue + }; + + var util = { + isSpaceSeparator: function isSpaceSeparator(c) { + return typeof c === 'string' && unicode.Space_Separator.test(c) + }, + + isIdStartChar: function isIdStartChar(c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c === '$') || (c === '_') || + unicode.ID_Start.test(c) + ) + }, + + isIdContinueChar: function isIdContinueChar(c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + (c === '$') || (c === '_') || + (c === '\u200C') || (c === '\u200D') || + unicode.ID_Continue.test(c) + ) + }, + + isDigit: function isDigit(c) { + return typeof c === 'string' && /[0-9]/.test(c) + }, + + isHexDigit: function isHexDigit(c) { + return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) + }, + }; + + var source; + var parseState; + var stack; + var pos; + var line; + var column; + var token; + var key; + var root; + + var parse = function parse(text, reviver) { + source = String(text); + parseState = 'start'; + stack = []; + pos = 0; + line = 1; + column = 0; + token = undefined; + key = undefined; + root = undefined; + + do { + token = lex(); + + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } + + parseStates[parseState](); + } while (token.type !== 'eof') + + if (typeof reviver === 'function') { + return internalize({ '': root }, '', reviver) + } + + return root + }; + + function internalize(holder, name, reviver) { + var value = holder[name]; + if (value != null && typeof value === 'object') { + for (var key in value) { + var replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + value[key] = replacement; + } + } + } + + return reviver.call(holder, name, value) + } + + var lexState; + var buffer; + var doubleQuote; + var sign; + var c; + + function lex() { + lexState = 'default'; + buffer = ''; + doubleQuote = false; + sign = 1; + + for (; ;) { + c = peek(); + + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } + + var token = lexStates[lexState](); + if (token) { + return token + } + } + } + + function peek() { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) + } + } + + function read() { + var c = peek(); + + if (c === '\n') { + line++; + column = 0; + } else if (c) { + column += c.length; + } else { + column++; + } + + if (c) { + pos += c.length; + } + + return c + } + + var lexStates = { + default: function default$1() { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + return + + case '/': + read(); + lexState = 'comment'; + return + + case undefined: + read(); + return newToken('eof') + } + + if (util.isSpaceSeparator(c)) { + read(); + return + } + + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } + + return lexStates[parseState]() + }, + + comment: function comment() { + switch (c) { + case '*': + read(); + lexState = 'multiLineComment'; + return + + case '/': + read(); + lexState = 'singleLineComment'; + return + } + + throw invalidChar(read()) + }, + + multiLineComment: function multiLineComment() { + switch (c) { + case '*': + read(); + lexState = 'multiLineCommentAsterisk'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + }, + + multiLineCommentAsterisk: function multiLineCommentAsterisk() { + switch (c) { + case '*': + read(); + return + + case '/': + read(); + lexState = 'default'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + lexState = 'multiLineComment'; + }, + + singleLineComment: function singleLineComment() { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + lexState = 'default'; + return + + case undefined: + read(); + return newToken('eof') + } + + read(); + }, + + value: function value() { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + case 'n': + read(); + literal('ull'); + return newToken('null', null) + + case 't': + read(); + literal('rue'); + return newToken('boolean', true) + + case 'f': + read(); + literal('alse'); + return newToken('boolean', false) + + case '-': + case '+': + if (read() === '-') { + sign = -1; + } + + lexState = 'sign'; + return + + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + + case '"': + case "'": + doubleQuote = (read() === '"'); + buffer = ''; + lexState = 'string'; + return + } + + throw invalidChar(read()) + }, + + identifierNameStartEscape: function identifierNameStartEscape() { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + var u = unicodeEscape(); + switch (u) { + case '$': + case '_': + break + + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + identifierName: function identifierName() { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read(); + return + + case '\\': + read(); + lexState = 'identifierNameEscape'; + return + } + + if (util.isIdContinueChar(c)) { + buffer += read(); + return + } + + return newToken('identifier', buffer) + }, + + identifierNameEscape: function identifierNameEscape() { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + var u = unicodeEscape(); + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break + + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + sign: function sign$1() { + switch (c) { + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', sign * Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + } + + throw invalidChar(read()) + }, + + zero: function zero() { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + + case 'x': + case 'X': + buffer += read(); + lexState = 'hexadecimal'; + return + } + + return newToken('numeric', sign * 0) + }, + + decimalInteger: function decimalInteger() { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalPointLeading: function decimalPointLeading() { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + throw invalidChar(read()) + }, + + decimalPoint: function decimalPoint() { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalFraction: function decimalFraction() { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalExponent: function decimalExponent() { + switch (c) { + case '+': + case '-': + buffer += read(); + lexState = 'decimalExponentSign'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentSign: function decimalExponentSign() { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentInteger: function decimalExponentInteger() { + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + hexadecimal: function hexadecimal() { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = 'hexadecimalInteger'; + return + } + + throw invalidChar(read()) + }, + + hexadecimalInteger: function hexadecimalInteger() { + if (util.isHexDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + string: function string() { + switch (c) { + case '\\': + read(); + buffer += escape(); + return + + case '"': + if (doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case "'": + if (!doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case '\n': + case '\r': + throw invalidChar(read()) + + case '\u2028': + case '\u2029': + separatorChar(c); + break + + case undefined: + throw invalidChar(read()) + } + + buffer += read(); + }, + + start: function start() { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } + + lexState = 'value'; + }, + + beforePropertyName: function beforePropertyName() { + switch (c) { + case '$': + case '_': + buffer = read(); + lexState = 'identifierName'; + return + + case '\\': + read(); + lexState = 'identifierNameStartEscape'; + return + + case '}': + return newToken('punctuator', read()) + + case '"': + case "'": + doubleQuote = (read() === '"'); + lexState = 'string'; + return + } + + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = 'identifierName'; + return + } + + throw invalidChar(read()) + }, + + afterPropertyName: function afterPropertyName() { + if (c === ':') { + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforePropertyValue: function beforePropertyValue() { + lexState = 'value'; + }, + + afterPropertyValue: function afterPropertyValue() { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforeArrayValue: function beforeArrayValue() { + if (c === ']') { + return newToken('punctuator', read()) + } + + lexState = 'value'; + }, + + afterArrayValue: function afterArrayValue() { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + end: function end() { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } + + throw invalidChar(read()) + }, + }; + + function newToken(type, value) { + return { + type: type, + value: value, + line: line, + column: column, + } + } + + function literal(s) { + for (var i = 0, list = s; i < list.length; i += 1) { + var c = list[i]; + + var p = peek(); + + if (p !== c) { + throw invalidChar(read()) + } + + read(); + } + } + + function escape() { + var c = peek(); + switch (c) { + case 'b': + read(); + return '\b' + + case 'f': + read(); + return '\f' + + case 'n': + read(); + return '\n' + + case 'r': + read(); + return '\r' + + case 't': + read(); + return '\t' + + case 'v': + read(); + return '\v' + + case '0': + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) + } + + return '\0' + + case 'x': + read(); + return hexEscape() + + case 'u': + read(); + return unicodeEscape() + + case '\n': + case '\u2028': + case '\u2029': + read(); + return '' + + case '\r': + read(); + if (peek() === '\n') { + read(); + } + + return '' + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) + + case undefined: + throw invalidChar(read()) + } + + return read() + } + + function hexEscape() { + var buffer = ''; + var c = peek(); + + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + function unicodeEscape() { + var buffer = ''; + var count = 4; + + while (count-- > 0) { + var c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + } + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + var parseStates = { + start: function start() { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforePropertyName: function beforePropertyName() { + switch (token.type) { + case 'identifier': + case 'string': + key = token.value; + parseState = 'afterPropertyName'; + return + + case 'punctuator': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } + + pop(); + return + + case 'eof': + throw invalidEOF() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterPropertyName: function afterPropertyName() { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + parseState = 'beforePropertyValue'; + }, + + beforePropertyValue: function beforePropertyValue() { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforeArrayValue: function beforeArrayValue() { + if (token.type === 'eof') { + throw invalidEOF() + } + + if (token.type === 'punctuator' && token.value === ']') { + pop(); + return + } + + push(); + }, + + afterPropertyValue: function afterPropertyValue() { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforePropertyName'; + return + + case '}': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterArrayValue: function afterArrayValue() { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforeArrayValue'; + return + + case ']': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + end: function end() { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, + }; + + function push() { + var value; + + switch (token.type) { + case 'punctuator': + switch (token.value) { + case '{': + value = {}; + break + + case '[': + value = []; + break + } + + break + + case 'null': + case 'boolean': + case 'numeric': + case 'string': + value = token.value; + break + + // This code is unreachable. + // default: + // throw invalidToken() + } + + if (root === undefined) { + root = value; + } else { + var parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + parent[key] = value; + } + } + + if (value !== null && typeof value === 'object') { + stack.push(value); + + if (Array.isArray(value)) { + parseState = 'beforeArrayValue'; + } else { + parseState = 'beforePropertyName'; + } + } else { + var current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } + } + + function pop() { + stack.pop(); + + var current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } + + // This code is unreachable. + // function invalidParseState () { + // return new Error(`JSON5: invalid parse state '${parseState}'`) + // } + + // This code is unreachable. + // function invalidLexState (state) { + // return new Error(`JSON5: invalid lex state '${state}'`) + // } + + function invalidChar(c) { + if (c === undefined) { + return syntaxError(("JSON5: invalid end of input at " + line + ":" + column)) + } + + return syntaxError(("JSON5: invalid character '" + (formatChar(c)) + "' at " + line + ":" + column)) + } + + function invalidEOF() { + return syntaxError(("JSON5: invalid end of input at " + line + ":" + column)) + } + + // This code is unreachable. + // function invalidToken () { + // if (token.type === 'eof') { + // return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + // } + + // const c = String.fromCodePoint(token.value.codePointAt(0)) + // return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) + // } + + function invalidIdentifier() { + column -= 5; + return syntaxError(("JSON5: invalid identifier character at " + line + ":" + column)) + } + + function separatorChar(c) { + console.warn(("JSON5: '" + (formatChar(c)) + "' in strings is not valid ECMAScript; consider escaping")); + } + + function formatChar(c) { + var replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + if (replacements[c]) { + return replacements[c] + } + + if (c < ' ') { + var hexString = c.charCodeAt(0).toString(16); + return '\\x' + ('00' + hexString).substring(hexString.length) + } + + return c + } + + function syntaxError(message) { + var err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err + } + + var stringify = function stringify(value, replacer, space) { + var stack = []; + var indent = ''; + var propertyList; + var replacerFunc; + var gap = ''; + var quote; + + if ( + replacer != null && + typeof replacer === 'object' && + !Array.isArray(replacer) + ) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } + + if (typeof replacer === 'function') { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (var i = 0, list = replacer; i < list.length; i += 1) { + var v = list[i]; + + var item = (void 0); + + if (typeof v === 'string') { + item = v; + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v); + } + + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + + if (typeof space === 'number') { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = ' '.substr(0, space); + } + } else if (typeof space === 'string') { + gap = space.substr(0, 10); + } + + return serializeProperty('', { '': value }) + + function serializeProperty(key, holder) { + var value = holder[key]; + if (value != null) { + if (typeof value.toJSON5 === 'function') { + value = value.toJSON5(key); + } else if (typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + } + + if (replacerFunc) { + value = replacerFunc.call(holder, key, value); + } + + if (value instanceof Number) { + value = Number(value); + } else if (value instanceof String) { + value = String(value); + } else if (value instanceof Boolean) { + value = value.valueOf(); + } + + switch (value) { + case null: return 'null' + case true: return 'true' + case false: return 'false' + } + + if (typeof value === 'string') { + return quoteString(value, false) + } + + if (typeof value === 'number') { + return String(value) + } + + if (typeof value === 'object') { + return Array.isArray(value) ? serializeArray(value) : serializeObject(value) + } + + return undefined + } + + function quoteString(value) { + var quotes = { + "'": 0.1, + '"': 0.2, + }; + + var replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + var product = ''; + + for (var i = 0; i < value.length; i++) { + var c = value[i]; + switch (c) { + case "'": + case '"': + quotes[c]++; + product += c; + continue + + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00'; + continue + } + } + + if (replacements[c]) { + product += replacements[c]; + continue + } + + if (c < ' ') { + var hexString = c.charCodeAt(0).toString(16); + product += '\\x' + ('00' + hexString).substring(hexString.length); + continue + } + + product += c; + } + + var quoteChar = quote || Object.keys(quotes).reduce(function (a, b) { return (quotes[a] < quotes[b]) ? a : b; }); + + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); + + return quoteChar + product + quoteChar + } + + function serializeObject(value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + var stepback = indent; + indent = indent + gap; + + var keys = propertyList || Object.keys(value); + var partial = []; + for (var i = 0, list = keys; i < list.length; i += 1) { + var key = list[i]; + + var propertyString = serializeProperty(key, value); + if (propertyString !== undefined) { + var member = serializeKey(key) + ':'; + if (gap !== '') { + member += ' '; + } + member += propertyString; + partial.push(member); + } + } + + var final; + if (partial.length === 0) { + final = '{}'; + } else { + var properties; + if (gap === '') { + properties = partial.join(','); + final = '{' + properties + '}'; + } else { + var separator = ',\n' + indent; + properties = partial.join(separator); + final = '{\n' + indent + properties + ',\n' + stepback + '}'; + } + } + + stack.pop(); + indent = stepback; + return final + } + + function serializeKey(key) { + if (key.length === 0) { + return quoteString(key, true) + } + + var firstChar = String.fromCodePoint(key.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key, true) + } + + for (var i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key, true) + } + } + + return key + } + + function serializeArray(value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + var stepback = indent; + indent = indent + gap; + + var partial = []; + for (var i = 0; i < value.length; i++) { + var propertyString = serializeProperty(String(i), value); + partial.push((propertyString !== undefined) ? propertyString : 'null'); + } + + var final; + if (partial.length === 0) { + final = '[]'; + } else { + if (gap === '') { + var properties = partial.join(','); + final = '[' + properties + ']'; + } else { + var separator = ',\n' + indent; + var properties$1 = partial.join(separator); + final = '[\n' + indent + properties$1 + ',\n' + stepback + ']'; + } + } + + stack.pop(); + indent = stepback; + return final + } + }; + + var JSON5 = { + parse: parse, + stringify: stringify, + }; + + var lib = JSON5; + + var es5 = lib; + + return es5; + + }))); + + }, {}], 102: [function (require, module, exports) { + (function (global) { + (function () { + /** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + ; (function () { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.21'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function', + INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ + var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function () { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) { } + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function (value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function (object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function (key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function (value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function (key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function (value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function (key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { } + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { } + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function (value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function (arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function (value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function (value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) { } + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function () { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) { } + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function () { + function object() { } + return function (proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function (value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function (subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function (subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function (subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function (object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function () { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function (value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function (value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function (key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function (value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function (value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function (object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function (object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function (srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function (iteratee) { + if (isArray(iteratee)) { + return function (value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + + var result = baseMap(collection, function (value, key, collection) { + var criteria = arrayMap(iteratees, function (iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function (object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function (value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function (object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function (func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function (func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function (value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } + + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) { } + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function (result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function (id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function (collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function (object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function (collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function (object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function (string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function (string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function () { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function (collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function (key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function (funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function () { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function (object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function (value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function (iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function (args) { + var thisArg = this; + return arrayFunc(iteratees, function (iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function (start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function (value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function (number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([, -0]))[1]) == INFINITY) ? noop : function (values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function (object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function (func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) { } + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function (object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function (symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function (value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function (object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function (key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function () { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function (func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function () { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function (string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function (match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) { } + try { + return (func + ''); + } catch (e) { } + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function (pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function (array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function (array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function (array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function (arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function (arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function (arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function (array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function (index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function (arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function (arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function (arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function (group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function (index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function (group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function (array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function (arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function (arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function (arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function (arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function (paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function (object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function (array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function (collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function (value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function (result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function (result, value, key) { + result[key ? 0 : 1].push(value); + }, function () { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + var sortBy = baseRest(function (collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function () { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function () { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function () { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function (func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function (object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function (func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function (func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function () { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function () { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function (func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function (args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function (func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function (func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function (func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function (args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function (value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function () { return arguments; }()) ? baseIsArguments : function (value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function (value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function (object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function (object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function (object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function (object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function (object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function (args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function (result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function (result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function (value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function (value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function (object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function (object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function (object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function (path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function (object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function (prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function (value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function (value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function (result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function (result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function (result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function (result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function (result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + + + + + + + + + + + + + + + + +
+
+
+ + Digital IDE +
+
+
    +
    +
    +
    +
    + + +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/resources/netlist/view/render.js b/resources/netlist/view/render.js new file mode 100644 index 0000000..7c923ca --- /dev/null +++ b/resources/netlist/view/render.js @@ -0,0 +1,230 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +"use strict"; +class render{ + constructor() { + this.netLists = []; + this.curNetIndex = 0; + this.container = document.getElementById('netlist_canvas'); + //Create SVG element + this.embed_svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + this.embed_svg.setAttribute('style', 'width: 100%; height: 100%'); + this.embed_svg.setAttribute('type', 'image/svg+xml'); + this.embed_svg.id = "svg_synth"; + } + + init() { + document.getElementById("last").onclick = function () { + if (this.curNetIndex > 0) { + this.curNetIndex--; + this.showNetlist(this.netLists[this.curNetIndex]); + } + }; + + document.getElementById("next").onclick = function () { + if (this.curNetIndex < this.netLists.length-1) { + this.curNetIndex ++; + this.showNetlist(this.netLists[this.curNetIndex]); + } + }; + } + + async showNetlist(netList, isClear) { + if (isClear) { + this.netLists = []; + this.netlist = netList; + this.netLists.push(netList); + } + + const netnode = this.showTreelist(netList); + + const setting = {}; + $(document).ready(() => { + this.zTreeObj = $.fn.zTree.init($("#netTree"), setting, netnode); + }); + + // remove embed + // svgPanZoom(this.embed_svg).destroy(); + this.svg = await netlistsvg.render(netlistsvg.digitalSkin, netList); + + //Add to container + this.embed_svg.innerHTML = this.svg; + + this.container.appendChild(this.embed_svg); + + // 重新注册事件 + this.registerClickEvent(); + + this.set_line_width(); + + + let pan_config = { + zoomEnabled: true, + controlIconsEnabled: true, + minZoom: 0.01, + maxZoom: 100, + fit: false, + center: true + }; + let pan_zoom = svgPanZoom(this.embed_svg, pan_config); + // pan_zoom.zoom(2); + pan_zoom.center(); + pan_zoom.resize(); + } + + showTreelist(netlist) { + let flatModule = netlistsvg.parser(netlistsvg.digitalSkin, netlist); + + let netnode = [ + { + name: flatModule.moduleName, + // iconSkin: "main", + open: true, + children: [ + { + name: "cells", + open: true, + children: [] + }, + { + name: "ports", + open: true, + children: [] + } + ] + } + ]; + for (let index = 0; index < flatModule.nodes.length; index++) { + const element = flatModule.nodes[index]; + let child = { + name: element.key, + iconSkin: "cells" + } + if(element.type == "$_inputExt_") { + child.name += " (input)"; + child.iconSkin = "port"; + netnode[0].children[1].children.push(child); + } else if(element.type == "$_outputExt_") { + child.name += " (output)"; + child.iconSkin = "port"; + netnode[0].children[1].children.push(child); + } else { + netnode[0].children[0].children.push(child); + } + } + return netnode; + } + + removeClickEvent() { + function handleRemove() { + console.w("ok"); + } + let countries = this.embed_svg.childNodes; + for (let i = 0; i < countries.length; i++) { + countries[i].removeEventListener('click', handleRemove); + } + } + + registerClickEvent() { + let countries = this.embed_svg.childNodes; + for (let i = 0; i < countries.length; i++) { + countries[i].addEventListener('click', e => { + let element = e.target; + + if (element.tagName === 'line') { + let class_name = element.getAttribute("class"); + this.handleLineEvent(class_name); + } + if (element.tagName === 'rect') { + let class_name = element.getAttribute("class"); + class_name = class_name.replace("cell_", ''); + this.handleGenericEvent(class_name); + } + if (element.tagName === 'path') { + let class_name = element.getAttribute("class"); + class_name = class_name.replace("cell_", ''); + } + }); + } + } + + set_line_width() { + let tag_name = 'line'; + let width = 2; + let match = undefined; + function recursive_searchTree(element, tag_name) { + let type = element.tagName; + if (type === tag_name) { + element.style = `stroke:#000000;stroke-width:${width}`; + match = element; + } + else if (element !== null) { + let i; + let result = null; + let childs = element.childNodes; + for (i = 0; result === null && i < childs.length; i++) { + result = recursive_searchTree(childs[i], tag_name); + if (result !== null) { + break; + } + } + return result; + } + return null; + } + recursive_searchTree(this.embed_svg, tag_name); + return match; + } + + handleLineEvent(class_name) { + let match = undefined; + function recursive_searchLine(element, tag_name) { + let type = element.tagName; + let class_name_i = undefined; + try { + class_name_i = element.getAttribute("class"); + } + catch (error) { + class_name_i = ''; + } + + if (type === tag_name && class_name_i === class_name) { + element.style = "stroke:#84da00;stroke-width:3"; + match = element; + } + else if (type === tag_name && class_name_i !== class_name) { + element.style = "stroke:#000000;stroke-width:2"; + } + else if (element !== null) { + let i; + let result = null; + let childs = element.childNodes; + for (i = 0; result === null && i < childs.length; i++) { + result = recursive_searchLine(childs[i], tag_name, class_name); + if (result !== null) { + break; + } + } + return result; + } + return null; + } + recursive_searchLine(this.embed_svg, "line", class_name); + return match; + } + + handleGenericEvent(class_name) { + let newNetList = { + "modules" : {} + } + for (const module in this.netlist.modules) { + if (module.toLowerCase() === class_name.toLowerCase()) { + newNetList.modules[class_name] = this.netlist.modules[module]; + break; + } + } + this.curNetIndex++; + this.netLists = this.netLists.slice(0,this.curNetIndex); + this.netLists.push(newNetList); + this.showNetlist(this.netLists[this.curNetIndex]); + } +} \ No newline at end of file diff --git a/resources/public/elk.bundled.js b/resources/public/elk.bundled.js new file mode 100644 index 0000000..60772b4 --- /dev/null +++ b/resources/public/elk.bundled.js @@ -0,0 +1,6123 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ELK = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + options: layoutOptions + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){ + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- GENERATED CODE -------------- +function g3(){} +function d3(){} +function ib(){} +function sb(){} +function xf(){} +function xw(){} +function Hw(){} +function Hn(){} +function Oi(){} +function Ow(){} +function qo(){} +function Ao(){} +function np(){} +function $t(){} +function Du(){} +function Ku(){} +function vx(){} +function yx(){} +function Ex(){} +function yy(){} +function j3(){} +function ldb(){} +function tdb(){} +function Edb(){} +function Mdb(){} +function afb(){} +function ffb(){} +function wfb(){} +function wnb(){} +function qnb(){} +function snb(){} +function unb(){} +function ynb(){} +function Bnb(){} +function Jnb(){} +function Lnb(){} +function Nnb(){} +function Nmb(){} +function amb(){} +function Pmb(){} +function Pnb(){} +function Tnb(){} +function Xnb(){} +function Uib(){} +function Zib(){} +function _ib(){} +function kpb(){} +function rpb(){} +function Hqb(){} +function Kqb(){} +function grb(){} +function wrb(){} +function Brb(){} +function Frb(){} +function ysb(){} +function Csb(){} +function Esb(){} +function Gsb(){} +function Jsb(){} +function Nsb(){} +function Qsb(){} +function Vsb(){} +function $sb(){} +function dtb(){} +function htb(){} +function otb(){} +function rtb(){} +function utb(){} +function xtb(){} +function Dtb(){} +function rub(){} +function Bub(){} +function Iub(){} +function Jvb(){} +function awb(){} +function cwb(){} +function ewb(){} +function gwb(){} +function iwb(){} +function Cwb(){} +function Mwb(){} +function Owb(){} +function uyb(){} +function Vyb(){} +function Fzb(){} +function hAb(){} +function zAb(){} +function AAb(){} +function DAb(){} +function NAb(){} +function fBb(){} +function wBb(){} +function BBb(){} +function BCb(){} +function mCb(){} +function tCb(){} +function xCb(){} +function FCb(){} +function JCb(){} +function qDb(){} +function QDb(){} +function TDb(){} +function bEb(){} +function GFb(){} +function fGb(){} +function oHb(){} +function tHb(){} +function xHb(){} +function BHb(){} +function FHb(){} +function JHb(){} +function JIb(){} +function HIb(){} +function LIb(){} +function PIb(){} +function TIb(){} +function TJb(){} +function nJb(){} +function qJb(){} +function QJb(){} +function tKb(){} +function yKb(){} +function EKb(){} +function IKb(){} +function KKb(){} +function MKb(){} +function OKb(){} +function $Kb(){} +function cLb(){} +function gLb(){} +function iLb(){} +function mLb(){} +function vLb(){} +function xLb(){} +function zLb(){} +function BLb(){} +function DLb(){} +function DMb(){} +function mMb(){} +function uMb(){} +function xMb(){} +function RMb(){} +function UMb(){} +function ZMb(){} +function dNb(){} +function pNb(){} +function qNb(){} +function tNb(){} +function yNb(){} +function CNb(){} +function FNb(){} +function KNb(){} +function QNb(){} +function WNb(){} +function wPb(){} +function CPb(){} +function EPb(){} +function GPb(){} +function RPb(){} +function YPb(){} +function kQb(){} +function rQb(){} +function tQb(){} +function wQb(){} +function KQb(){} +function MQb(){} +function UQb(){} +function XQb(){} +function $Qb(){} +function $Rb(){} +function cRb(){} +function jRb(){} +function qRb(){} +function uRb(){} +function IRb(){} +function PRb(){} +function RRb(){} +function WRb(){} +function gSb(){} +function mSb(){} +function qSb(){} +function uSb(){} +function xSb(){} +function zSb(){} +function BSb(){} +function DSb(){} +function HSb(){} +function PSb(){} +function qTb(){} +function wTb(){} +function GTb(){} +function QTb(){} +function $Tb(){} +function $Ub(){} +function mUb(){} +function sUb(){} +function uUb(){} +function yUb(){} +function CUb(){} +function GUb(){} +function KUb(){} +function OUb(){} +function QUb(){} +function cVb(){} +function gVb(){} +function iVb(){} +function mVb(){} +function CVb(){} +function cWb(){} +function eWb(){} +function gWb(){} +function iWb(){} +function kWb(){} +function mWb(){} +function oWb(){} +function sWb(){} +function uWb(){} +function wWb(){} +function yWb(){} +function MWb(){} +function OWb(){} +function QWb(){} +function WWb(){} +function YWb(){} +function bXb(){} +function iYb(){} +function qYb(){} +function MYb(){} +function OYb(){} +function QYb(){} +function VYb(){} +function gZb(){} +function iZb(){} +function oZb(){} +function rZb(){} +function yZb(){} +function BZb(){} +function M$b(){} +function N6b(){} +function J9b(){} +function Jgc(){} +function tgc(){} +function xgc(){} +function Hgc(){} +function Lgc(){} +function Pgc(){} +function Vgc(){} +function Zgc(){} +function _gc(){} +function Oac(){} +function kcc(){} +function wdc(){} +function ydc(){} +function Cdc(){} +function bhc(){} +function dhc(){} +function jhc(){} +function lhc(){} +function qhc(){} +function shc(){} +function yhc(){} +function Ahc(){} +function Ehc(){} +function Ghc(){} +function Khc(){} +function Mhc(){} +function Ohc(){} +function Qhc(){} +function Qkc(){} +function Dic(){} +function ajc(){} +function Ajc(){} +function znc(){} +function Knc(){} +function Mnc(){} +function loc(){} +function ooc(){} +function opc(){} +function apc(){} +function cpc(){} +function hpc(){} +function jpc(){} +function upc(){} +function usc(){} +function isc(){} +function nsc(){} +function qsc(){} +function ssc(){} +function ysc(){} +function jqc(){} +function Lrc(){} +function Luc(){} +function buc(){} +function iuc(){} +function Auc(){} +function stc(){} +function Ttc(){} +function Wtc(){} +function Ztc(){} +function bvc(){} +function fvc(){} +function mvc(){} +function Rvc(){} +function awc(){} +function twc(){} +function uwc(){} +function wwc(){} +function ywc(){} +function Awc(){} +function Cwc(){} +function Ewc(){} +function Gwc(){} +function Iwc(){} +function Kwc(){} +function Mwc(){} +function Owc(){} +function Qwc(){} +function Swc(){} +function Uwc(){} +function Wwc(){} +function Ywc(){} +function $wc(){} +function $Fc(){} +function mFc(){} +function qFc(){} +function uFc(){} +function axc(){} +function Axc(){} +function zzc(){} +function dCc(){} +function WDc(){} +function NEc(){} +function aGc(){} +function wGc(){} +function sHc(){} +function sJc(){} +function oJc(){} +function VIc(){} +function XIc(){} +function ZIc(){} +function _Ic(){} +function mKc(){} +function vKc(){} +function xKc(){} +function zKc(){} +function HKc(){} +function tLc(){} +function wLc(){} +function yLc(){} +function MLc(){} +function QLc(){} +function QOc(){} +function MPc(){} +function cQc(){} +function BQc(){} +function rRc(){} +function NSc(){} +function NYc(){} +function cYc(){} +function FYc(){} +function F7c(){} +function ATc(){} +function _Tc(){} +function e_c(){} +function R2c(){} +function W3c(){} +function i4c(){} +function q6c(){} +function D6c(){} +function n8c(){} +function H8c(){} +function ced(){} +function fed(){} +function ied(){} +function qed(){} +function Ded(){} +function Ged(){} +function ngd(){} +function Ikd(){} +function rld(){} +function Mmd(){} +function Pmd(){} +function Smd(){} +function Vmd(){} +function Ymd(){} +function _md(){} +function cnd(){} +function fnd(){} +function ind(){} +function zod(){} +function Dod(){} +function npd(){} +function Fpd(){} +function Hpd(){} +function Kpd(){} +function Npd(){} +function Qpd(){} +function Tpd(){} +function Wpd(){} +function Zpd(){} +function aqd(){} +function dqd(){} +function gqd(){} +function jqd(){} +function mqd(){} +function pqd(){} +function sqd(){} +function vqd(){} +function yqd(){} +function Bqd(){} +function Eqd(){} +function Hqd(){} +function Kqd(){} +function Nqd(){} +function Qqd(){} +function Tqd(){} +function Wqd(){} +function Zqd(){} +function ard(){} +function drd(){} +function grd(){} +function jrd(){} +function mrd(){} +function prd(){} +function srd(){} +function vrd(){} +function yrd(){} +function Brd(){} +function Erd(){} +function Hrd(){} +function Krd(){} +function Nrd(){} +function Qrd(){} +function Trd(){} +function Wrd(){} +function Zrd(){} +function $wd(){} +function Ayd(){} +function AAd(){} +function qBd(){} +function DBd(){} +function FBd(){} +function IBd(){} +function LBd(){} +function OBd(){} +function RBd(){} +function UBd(){} +function XBd(){} +function $Bd(){} +function bCd(){} +function eCd(){} +function hCd(){} +function kCd(){} +function nCd(){} +function qCd(){} +function tCd(){} +function wCd(){} +function zCd(){} +function CCd(){} +function FCd(){} +function ICd(){} +function LCd(){} +function OCd(){} +function RCd(){} +function UCd(){} +function XCd(){} +function $Cd(){} +function bDd(){} +function eDd(){} +function hDd(){} +function kDd(){} +function nDd(){} +function qDd(){} +function tDd(){} +function wDd(){} +function zDd(){} +function CDd(){} +function FDd(){} +function IDd(){} +function LDd(){} +function ODd(){} +function RDd(){} +function UDd(){} +function XDd(){} +function $Dd(){} +function bEd(){} +function eEd(){} +function hEd(){} +function kEd(){} +function nEd(){} +function qEd(){} +function tEd(){} +function SEd(){} +function rId(){} +function BId(){} +function Iid(a){} +function ymc(a){} +function gl(){rb()} +function fsb(){esb()} +function rvb(){qvb()} +function Hvb(){Fvb()} +function G4b(){F4b()} +function Txb(){Sxb()} +function Tyb(){Ryb()} +function syb(){qyb()} +function Jyb(){Iyb()} +function aJb(){WIb()} +function nNb(){hNb()} +function k9b(){h9b()} +function V9b(){Q9b()} +function PPb(){LPb()} +function dSb(){bSb()} +function L6b(){J6b()} +function eac(){$9b()} +function xcc(){tcc()} +function pfc(){mfc()} +function Ffc(){vfc()} +function Vhc(){Thc()} +function Vpc(){Upc()} +function $qc(){Uqc()} +function hqc(){fqc()} +function Jqc(){Dqc()} +function Qqc(){Nqc()} +function Pjc(){Mjc()} +function erc(){crc()} +function dtc(){ctc()} +function qtc(){otc()} +function B7c(){o7c()} +function xzc(){vzc()} +function _Ac(){$Ac()} +function gRc(){$Qc()} +function bCc(){_Bc()} +function UDc(){SDc()} +function Sbd(){wbd()} +function pyd(){qId()} +function Xd(a){this.a=a} +function Yb(a){this.a=a} +function jc(a){this.a=a} +function Vg(a){this.a=a} +function _g(a){this.a=a} +function Qi(a){this.a=a} +function Qq(a){this.a=a} +function Uq(a){this.a=a} +function bj(a){this.a=a} +function fj(a){this.a=a} +function vk(a){this.a=a} +function zk(a){this.a=a} +function vl(a){this.a=a} +function vt(a){this.a=a} +function lt(a){this.a=a} +function Jt(a){this.a=a} +function Ot(a){this.a=a} +function Os(a){this.a=a} +function Fo(a){this.a=a} +function xo(a){this.b=a} +function Ut(a){this.a=a} +function fu(a){this.a=a} +function ju(a){this.a=a} +function pu(a){this.a=a} +function su(a){this.a=a} +function gy(a){this.a=a} +function qy(a){this.a=a} +function Cy(a){this.a=a} +function Qy(a){this.a=a} +function m3(a){this.a=a} +function L3(a){this.a=a} +function V3(a){this.a=a} +function F4(a){this.a=a} +function S4(a){this.a=a} +function k5(a){this.a=a} +function K5(a){this.a=a} +function X8(a){this.a=a} +function G9(a){this.a=a} +function M9(a){this.a=a} +function R9(a){this.a=a} +function W9(a){this.a=a} +function m9(a){this.d=a} +function fy(){this.a=[]} +function Bgb(){L8(this)} +function jub(a,b){a.i=b} +function iub(a,b){a.g=b} +function _ub(a,b){a.b=b} +function bvb(a,b){a.b=b} +function bGb(a,b){a.a=b} +function qpb(a,b){a.a=b} +function dxb(a,b){a.c=b} +function dGb(a,b){a.c=b} +function cGb(a,b){a.b=b} +function eGb(a,b){a.d=b} +function exb(a,b){a.d=b} +function GGb(a,b){a.j=b} +function $bc(a,b){a.a=b} +function _bc(a,b){a.f=b} +function _rc(a,b){a.f=b} +function $rc(a,b){a.e=b} +function bmc(a,b){a.k=b} +function qmc(a,b){a.a=b} +function rmc(a,b){a.b=b} +function asc(a,b){a.g=b} +function BHc(a,b){a.j=b} +function P9c(a,b){a.n=b} +function Btd(a,b){a.a=b} +function Ktd(a,b){a.a=b} +function Ctd(a,b){a.c=b} +function Ltd(a,b){a.c=b} +function Mtd(a,b){a.d=b} +function Ntd(a,b){a.e=b} +function Otd(a,b){a.g=b} +function eud(a,b){a.a=b} +function fud(a,b){a.c=b} +function gud(a,b){a.d=b} +function hud(a,b){a.e=b} +function iud(a,b){a.f=b} +function jud(a,b){a.j=b} +function yAd(a,b){a.a=b} +function GAd(a,b){a.a=b} +function zAd(a,b){a.b=b} +function AXb(a){a.b=a.a} +function ri(a){a.c=a.d.d} +function Gb(a){pA(Pb(a))} +function sab(a){this.b=a} +function xab(a){this.a=a} +function Eab(a){this.a=a} +function Qdb(a){this.a=a} +function Xdb(a){this.b=a} +function neb(a){this.b=a} +function nkb(a){this.a=a} +function pkb(a){this.a=a} +function jfb(a){this.a=a} +function Rfb(a){this.a=a} +function Rmb(a){this.a=a} +function Lmb(a){this.a=a} +function Mgb(a){this.a=a} +function Yhb(a){this.a=a} +function yjb(a){this.a=a} +function onb(a){this.a=a} +function Dnb(a){this.a=a} +function Fnb(a){this.a=a} +function Hnb(a){this.a=a} +function Rnb(a){this.a=a} +function Vnb(a){this.a=a} +function job(a){this.a=a} +function qob(a){this.a=a} +function sob(a){this.a=a} +function uob(a){this.a=a} +function epb(a){this.a=a} +function ipb(a){this.a=a} +function mpb(a){this.a=a} +function tpb(a){this.a=a} +function erb(a){this.a=a} +function Btb(a){this.a=a} +function kwb(a){this.a=a} +function mwb(a){this.a=a} +function Fwb(a){this.a=a} +function qzb(a){this.a=a} +function Dzb(a){this.a=a} +function BEb(a){this.a=a} +function cFb(a){this.a=a} +function ccb(a){this.c=a} +function pFb(a){this.e=a} +function NHb(a){this.a=a} +function QHb(a){this.a=a} +function VHb(a){this.a=a} +function YHb(a){this.a=a} +function NIb(a){this.a=a} +function RIb(a){this.a=a} +function dJb(a){this.a=a} +function fJb(a){this.a=a} +function hJb(a){this.a=a} +function jJb(a){this.a=a} +function vJb(a){this.a=a} +function DJb(a){this.a=a} +function kLb(a){this.a=a} +function oLb(a){this.a=a} +function ZLb(a){this.a=a} +function ZNb(a){this.a=a} +function TNb(a){this.a=a} +function aOb(a){this.a=a} +function dOb(a){this.a=a} +function nQb(a){this.a=a} +function xRb(a){this.a=a} +function ARb(a){this.a=a} +function UTb(a){this.a=a} +function qUb(a){this.a=a} +function wUb(a){this.a=a} +function EUb(a){this.a=a} +function EVb(a){this.a=a} +function zVb(a){this.a=a} +function qWb(a){this.a=a} +function AWb(a){this.a=a} +function CWb(a){this.a=a} +function GWb(a){this.a=a} +function IWb(a){this.a=a} +function KWb(a){this.a=a} +function SWb(a){this.a=a} +function kZb(a){this.a=a} +function mZb(a){this.a=a} +function z9b(a){this.a=a} +function D9b(a){this.a=a} +function CYb(a){this.b=a} +function iac(a){this.a=a} +function ibc(a){this.a=a} +function Gbc(a){this.a=a} +function Ebc(a){this.c=a} +function Bcc(a){this.a=a} +function idc(a){this.a=a} +function kdc(a){this.a=a} +function mdc(a){this.a=a} +function wec(a){this.a=a} +function Aec(a){this.a=a} +function Eec(a){this.a=a} +function Iec(a){this.a=a} +function Nec(a){this.a=a} +function Ngc(a){this.a=a} +function Tgc(a){this.a=a} +function Xgc(a){this.a=a} +function hhc(a){this.a=a} +function nhc(a){this.a=a} +function uhc(a){this.a=a} +function Chc(a){this.a=a} +function Ihc(a){this.a=a} +function fjc(a){this.a=a} +function kkc(a){this.a=a} +function pkc(a){this.a=a} +function ukc(a){this.a=a} +function Aoc(a){this.a=a} +function Doc(a){this.a=a} +function dvc(a){this.a=a} +function hvc(a){this.a=a} +function QEc(a){this.a=a} +function lGc(a){this.a=a} +function IGc(a){this.a=a} +function _Gc(a){this.f=a} +function kfc(a){this.i=a} +function AHc(a){this.a=a} +function UKc(a){this.a=a} +function dMc(a){this.a=a} +function fVc(a){this.a=a} +function gVc(a){this.a=a} +function lVc(a){this.a=a} +function mVc(a){this.a=a} +function nVc(a){this.a=a} +function oVc(a){this.a=a} +function qVc(a){this.a=a} +function rVc(a){this.a=a} +function uVc(a){this.a=a} +function wVc(a){this.a=a} +function xVc(a){this.a=a} +function yVc(a){this.a=a} +function zVc(a){this.a=a} +function AVc(a){this.a=a} +function CVc(a){this.a=a} +function DVc(a){this.a=a} +function EVc(a){this.a=a} +function FVc(a){this.a=a} +function GVc(a){this.a=a} +function HVc(a){this.a=a} +function IVc(a){this.a=a} +function SVc(a){this.a=a} +function TVc(a){this.a=a} +function XVc(a){this.a=a} +function eWc(a){this.a=a} +function gWc(a){this.a=a} +function iWc(a){this.a=a} +function kWc(a){this.a=a} +function OWc(a){this.a=a} +function DWc(a){this.b=a} +function M2c(a){this.a=a} +function T2c(a){this.a=a} +function Z2c(a){this.a=a} +function d3c(a){this.a=a} +function v3c(a){this.a=a} +function Fdd(a){this.a=a} +function med(a){this.a=a} +function Yed(a){this.b=a} +function kgd(a){this.a=a} +function hhd(a){this.a=a} +function jkd(a){this.a=a} +function Sod(a){this.a=a} +function $od(a){this.a=a} +function Asd(a){this.a=a} +function Psd(a){this.a=a} +function tsd(a){this.d=a} +function Gld(a){this.c=a} +function kmd(a){this.e=a} +function VGd(a){this.e=a} +function Nxd(a){this.a=a} +function AHd(a){this.a=a} +function UFc(){this.a=0} +function $ab(){Mab(this)} +function Gbb(){rbb(this)} +function mrb(){lrb(this)} +function h3(){QYc();RYc()} +function By(){return null} +function fz(){return null} +function nz(a){return a.a} +function my(a){return a.a} +function uy(a){return a.a} +function Iy(a){return a.a} +function Wy(a){return a.a} +function x2(a){return a.e} +function xhd(){this.c=ihd} +function Xgd(){this.a=this} +function G4(a){this.a=L4(a)} +function z4(){Sv.call(this)} +function N4(){Sv.call(this)} +function P4(){Sv.call(this)} +function p3(){Sv.call(this)} +function t3(){Sv.call(this)} +function x3(){Lv.call(this)} +function Sv(){Lv.call(this)} +function A5(){Sv.call(this)} +function U6(){Sv.call(this)} +function r3(){p3.call(this)} +function _Jc(a){a.b.Te(a.e)} +function euc(a,b){b.jd(a.a)} +function NLb(a,b){a.a=b-a.a} +function QLb(a,b){a.b=b-a.b} +function yYb(a,b){a.b+=b} +function Oc(a,b){a.d.b.$b(b)} +function jp(a,b){a.e=b;b.b=a} +function Cpb(a,b){a.length=b} +function wEc(a){a.a=new yib} +function Qw(){Qw=d3;new Bgb} +function fzb(){this.b=new Zp} +function sgd(){this.Bb|=256} +function qfb(){Sv.call(this)} +function zfb(){Sv.call(this)} +function djb(){Sv.call(this)} +function Muc(){Sv.call(this)} +function Lyd(a){Cud(a.c,a.b)} +function TKc(a,b){wIc(a.c,b)} +function J2c(a,b){M1c(a.a,b)} +function K2c(a,b){N1c(a.a,b)} +function Rkb(a,b){tbb(a.a,b)} +function jjc(a,b){Ggb(a.b,b)} +function ocd(a,b){vMc(a.e,b)} +function Cw(a){Bw();Aw.Rd(a)} +function uw(){uw=d3;tw=new xw} +function rb(){rb=d3;qb=new sb} +function Vv(){Vv=d3;Uv=new ib} +function Fk(){Fk=d3;Ek=new Gk} +function Uk(){Uk=d3;Tk=new Vk} +function Iu(){Iu=d3;Hu=new Ku} +function tx(){tx=d3;sx=new vx} +function xy(){xy=d3;wy=new yy} +function Jgb(){this.a=new Bgb} +function Pzb(){this.a=new Bzb} +function Ukb(){this.a=new Gbb} +function dCb(){this.a=new Gbb} +function dDb(){this.a=new Gbb} +function xDb(){this.a=new Gbb} +function LDb(){this.a=new Gbb} +function FDb(){this.a=new Jgb} +function Bmb(){this.a=new Klb} +function tqb(){this.a=new pqb} +function Aqb(){this.a=new uqb} +function Zwb(){this.a=new Mwb} +function IZb(){this.a=new BZb} +function NZb(){this.a=new Gbb} +function SZb(){this.a=new Gbb} +function M9b(){this.b=new Gbb} +function Lfc(){this.f=new Gbb} +function Fic(){this.d=new Gbb} +function rpc(){this.a=new Gbb} +function r$b(){this.a=new PZb} +function fuc(){this.a=new iuc} +function Suc(){this.j=new Gbb} +function Vyc(){yib.call(this)} +function Ggc(){Gbb.call(this)} +function qlb(){Ukb.call(this)} +function qGb(){mGb.call(this)} +function mGb(){fGb.call(this)} +function XGb(){fGb.call(this)} +function $Gb(){XGb.call(this)} +function o6c(){Bgb.call(this)} +function x6c(){Bgb.call(this)} +function I6c(){Bgb.call(this)} +function njc(){mjc.call(this)} +function ujc(){mjc.call(this)} +function SHc(){CHc.call(this)} +function S4c(){e4c.call(this)} +function t4c(){e4c.call(this)} +function bTc(){MPc.call(this)} +function pTc(){MPc.call(this)} +function pjd(){s9c.call(this)} +function Okd(){s9c.call(this)} +function zad(){V9c.call(this)} +function rAd(){F7c.call(this)} +function NAd(){F7c.call(this)} +function IAd(){rAd.call(this)} +function Hgd(){sgd.call(this)} +function qgd(){Jgb.call(this)} +function Lkd(){Bgb.call(this)} +function Ood(){Bgb.call(this)} +function dpd(){Bgb.call(this)} +function FFd(){SEd.call(this)} +function gf(a){Re.call(this,a)} +function Aj(a){Re.call(this,a)} +function Sj(a){Aj.call(this,a)} +function vf(a){qf.call(this,a)} +function zf(a){qf.call(this,a)} +function dn(a){tm.call(this,a)} +function au(a){Mm.call(this,a)} +function ap(a){Uo.call(this,a)} +function rs(a){gs.call(this,a)} +function Tv(a){Mv.call(this,a)} +function vy(a){Tv.call(this,a)} +function o3(a){Tv.call(this,a)} +function q3(a){Tv.call(this,a)} +function u3(a){Tv.call(this,a)} +function v3(a){Mv.call(this,a)} +function s3(a){q3.call(this,a)} +function A4(a){Tv.call(this,a)} +function O4(a){Tv.call(this,a)} +function Q4(a){Tv.call(this,a)} +function z5(a){Tv.call(this,a)} +function B5(a){Tv.call(this,a)} +function I5(a){O4.call(this,a)} +function Py(){Qy.call(this,{})} +function z6(){m3.call(this,'')} +function A6(){m3.call(this,'')} +function M6(){m3.call(this,'')} +function N6(){m3.call(this,'')} +function P6(a){q3.call(this,a)} +function V6(a){Tv.call(this,a)} +function k7(a){c7();e7(this,a)} +function kjb(a){ijb();this.a=a} +function ulb(a){a.b=null;a.c=0} +function nBb(a,b){a.a=b;pBb(a)} +function Exb(a,b){return a*a/b} +function u5(a){return a<0?-a:a} +function Ycc(a){Gcc();this.a=a} +function LGc(a){zGc();this.f=a} +function NGc(a){zGc();this.f=a} +function PIc(a,b,c){a.a[b.g]=c} +function FFc(a,b,c){LFc(c,a,b)} +function zPb(a,b,c){APb(c,a,b)} +function LKc(a,b,c){KKc(a,c,b)} +function ILc(){this.d=new Gbb} +function e4c(){this.a=new i4c} +function ge(){throw x2(new U6)} +function lj(){throw x2(new U6)} +function ol(){throw x2(new U6)} +function ir(){throw x2(new U6)} +function mr(){throw x2(new U6)} +function Chb(){throw x2(new U6)} +function Cb(a){this.c=pA(Pb(a))} +function cz(a){return new Cy(a)} +function ez(a){return new hz(a)} +function pz(a,b){return p4(a,b)} +function K3(a,b){return a.a-b.a} +function U3(a,b){return a.a-b.a} +function J5(a,b){return a.a-b.a} +function Rs(a,b){return a.g-b.g} +function v5(a,b){return a>b?a:b} +function x5(a,b){return a0} +function H2(a,b){return A2(a,b)<0} +function M8(a){return a.d.c+a.e.c} +function Hyc(){this.a=0;this.b=0} +function Wyc(a){zib.call(this,a)} +function f_c(a){dYc.call(this,a)} +function q3c(a){k3c.call(this,a)} +function s3c(a){k3c.call(this,a)} +function Cgb(a){N8.call(this,a,0)} +function Lkb(a){this.c=(Npb(a),a)} +function Kgb(a){this.a=new Cgb(a)} +function Cmb(a){this.a=new Llb(a)} +function yId(){throw x2(new djb)} +function zId(){throw x2(new djb)} +function pjb(){pjb=d3;ojb=new sjb} +function sdb(){sdb=d3;rdb=new tdb} +function Gqb(){Gqb=d3;Fqb=new Hqb} +function fvb(){fvb=d3;evb=new gvb} +function bAb(){bAb=d3;aAb=new hAb} +function MAb(){MAb=d3;LAb=new NAb} +function RAb(){RAb=d3;QAb=new qBb} +function iCb(){iCb=d3;hCb=new mCb} +function YDb(){YDb=d3;XDb=new bEb} +function rVb(){rVb=d3;qVb=new bXb} +function LPb(){LPb=d3;KPb=new RPb} +function bSb(){bSb=d3;aSb=new gSb} +function WIb(){WIb=d3;VIb=new Hyc} +function crc(){crc=d3;brc=new yvc} +function Wnc(){this.b=new $uc(bS)} +function wrc(){this.a=new $uc(ES)} +function ZJb(){this.a=(gBc(),eBc)} +function eKb(){this.a=(gBc(),eBc)} +function Grc(a){this.a=0;this.b=a} +function Fib(a){return a.b!=a.d.c} +function rec(a,b){return a.d[b.o]} +function mkb(a,b){while(a.sd(b));} +function Bpb(a,b,c){a.splice(b,c)} +function Bvc(a,b,c){J8(a.d,b.f,c)} +function ued(a,b){o_c(Ibd(a.a),b)} +function zed(a,b){o_c(Ibd(a.a),b)} +function yIc(a){a.c?xIc(a):zIc(a)} +function C6c(){C6c=d3;B6c=new D6c} +function v6c(){v6c=d3;u6c=new x6c} +function G6c(){G6c=d3;F6c=new I6c} +function A6c(){A6c=d3;z6c=new Lkd} +function L6c(){L6c=d3;K6c=new dpd} +function r5c(){r5c=d3;q5c=new Bgb} +function upd(){upd=d3;spd=new Gbb} +function tId(){tId=d3;sId=new BId} +function Ohd(){Ohd=d3;Nhd=new lwd} +function iid(){iid=d3;hid=new pwd} +function Zwd(){Zwd=d3;Ywd=new $wd} +function wyd(){wyd=d3;vyd=new Ayd} +function nId(a){this.a=new CHd(a)} +function dc(a){this.a=kA(Pb(a),13)} +function cd(a,b){this.b=a;this.c=b} +function od(a,b){this.b=a;this.a=b} +function Ud(a,b){this.b=a;this.d=b} +function eg(a,b){this.e=a;this.d=b} +function xh(a,b){this.b=a;this.c=b} +function Zj(a,b){this.a=a;this.b=b} +function ck(a,b){this.a=a;this.b=b} +function ek(a,b){this.a=a;this.b=b} +function nk(a,b){this.a=a;this.b=b} +function pk(a,b){this.b=a;this.a=b} +function Nh(a,b){ph.call(this,a,b)} +function Ph(a,b){Nh.call(this,a,b)} +function Pn(a,b){this.b=a;this.a=b} +function Vn(a,b){this.a=a;this.b=b} +function _m(a,b){this.g=a;this.i=b} +function Po(a,b){this.b=a;this.a=b} +function Nq(a,b){this.a=a;this.b=b} +function er(a,b){this.a=a;this.f=b} +function Re(a){Lb(a.Wb());this.c=a} +function ts(a,b){this.b=a;this.c=b} +function Ts(a,b){this.f=a;this.g=b} +function ct(a,b){Ts.call(this,a,b)} +function yu(a,b){this.e=a;this.c=b} +function Mm(a){this.b=kA(Pb(a),43)} +function bs(a){this.a=kA(Pb(a),15)} +function gs(a){this.a=kA(Pb(a),15)} +function Xy(a,b){this.a=a;this.b=b} +function $m(a,b){return a>b&&b0?a:b} +function Bz(a){return Cz(a.l,a.m,a.h)} +function Vx(a){return a<10?'0'+a:''+a} +function PBb(a){return a==KBb||a==NBb} +function QBb(a){return a==KBb||a==LBb} +function kIb(a){return ybb(a.b.b,a,0)} +function Zgb(a){this.a=khb();this.b=a} +function phb(a){this.a=khb();this.b=a} +function ll(a){this.a=a;gl.call(this)} +function En(a){this.a=a;gl.call(this)} +function Ecb(a,b){Acb(a,0,a.length,b)} +function plb(a,b){tbb(a.a,b);return b} +function tuc(a,b){tbb(a.c,b);return a} +function Tuc(a,b){svc(a.a,b);return a} +function $Vb(a,b){IVb();return b.a+=a} +function _Vb(a,b){IVb();return b.c+=a} +function aWb(a,b){IVb();return b.a+=a} +function i7b(a){return a==e7b||a==d7b} +function hBc(a){return a==cBc||a==dBc} +function iBc(a){return a==fBc||a==bBc} +function XCc(a){return a!=TCc&&a!=UCc} +function PMc(a){return a.eg()&&a.fg()} +function zvc(a){return svc(new yvc,a)} +function yjc(){yjc=d3;xjc=new Hfb(iU)} +function iib(){Mgb.call(this,new Jhb)} +function nGb(){gGb.call(this,0,0,0,0)} +function oyc(){pyc.call(this,0,0,0,0)} +function DYc(a){yYc.call(this,a,true)} +function Kyc(a){this.a=a.a;this.b=a.b} +function pPc(a,b,c){rPc(a,b);sPc(a,c)} +function nPc(a,b,c){qPc(a,b);oPc(a,c)} +function NOc(a,b,c){OOc(a,b);POc(a,c)} +function qQc(a,b,c){rQc(a,b);sQc(a,c)} +function xQc(a,b,c){yQc(a,b);zQc(a,c)} +function Uad(a,b){Kad(a,b);Lad(a,a.D)} +function xud(a,b){return new gwd(b,a)} +function yud(a,b){return new gwd(b,a)} +function U4(a,b){return ab?1:0} +function Kn(a){return fo(a.b.tc(),a.a)} +function Rn(a){return oo(a.a.tc(),a.b)} +function q6(a){return r6(a,0,a.length)} +function fjb(a){return a!=null?ob(a):0} +function Zo(a){Uo.call(this,new ap(a))} +function mmb(){hmb.call(this,'Head',1)} +function rmb(){hmb.call(this,'Tail',3)} +function Li(a,b,c){Ji.call(this,a,b,c)} +function _ob(a,b,c){qpb(a,b.le(a.a,c))} +function $pb(a,b){return parseInt(a,b)} +function FIb(a,b){return dXc(b,mTc(a))} +function GIb(a,b){return dXc(b,mTc(a))} +function YGb(a){gGb.call(this,a,a,a,a)} +function rbb(a){a.c=tz(NE,oJd,1,0,5,1)} +function Mab(a){a.a=tz(NE,oJd,1,8,5,1)} +function Kub(a){a.b&&Oub(a);return a.a} +function Lub(a){a.b&&Oub(a);return a.c} +function bTb(a){a.d&&fTb(a);return a.c} +function aTb(a){a.d&&fTb(a);return a.b} +function _Sb(a){a.d&&fTb(a);return a.a} +function I0c(a,b,c){wz(a,b,c);return c} +function o8b(a,b,c){wz(a.c[b.g],b.g,c)} +function UVb(a,b,c){return I8(a.g,c,b)} +function Xfc(a,b,c){return I8(a.k,c,b)} +function GFc(a,b,c){pPc(c,c.i+a,c.j+b)} +function GWc(a,b){EWc.call(this,a.b,b)} +function hId(a){UGd();VGd.call(this,a)} +function jmd(){jmd=d3;imd=(C6c(),B6c)} +function isd(){isd=d3;new jsd;new Gbb} +function jsd(){new Bgb;new Bgb;new Bgb} +function Zn(){Zn=d3;Xn=new qo;Yn=new Ao} +function bt(){bt=d3;_s=new ft;at=new ht} +function sk(){sk=d3;rk=Bb(new Cb(qJd))} +function Es(){Es=d3;new Gb((sk(),'='))} +function Ev(a){a.j=tz(QE,cKd,287,0,0,1)} +function Ai(a){this.a=a;ui.call(this,a)} +function U1c(a){return a==null?0:ob(a)} +function p6(a){return a==null?mJd:f3(a)} +function X5(a,b){return a.charCodeAt(b)} +function a6(a,b,c){return c6(a,o6(b),c)} +function Cz(a,b,c){return {l:a,m:b,h:c}} +function _bb(a){return a.ab-1?0:b-1} +function Yac(a,b,c){return c?b!=0:b!=a-1} +function _Hc(a,b,c){return a.a[b.g][c.g]} +function _ac(a,b){return a.e[b.c.o][b.o]} +function tbc(a,b){return a.a[b.c.o][b.o]} +function Obc(a,b){return a.a[b.c.o][b.o]} +function $fc(a,b){return a.j[b.o]=mgc(b)} +function xLc(a,b){return C4(a.c.d,b.c.d)} +function JLc(a,b){return C4(a.c.c,b.c.c)} +function sVc(a,b,c){vUc(a.a,a.b,a.c,b,c)} +function eIc(a,b,c,d){wz(a.a[b.g],c.g,d)} +function SXc(a,b,c){wz(a.g,b,c);return c} +function Dyc(a,b){a.a*=b;a.b*=b;return a} +function Jx(a,b){a.q.setHours(b);Hx(a,b)} +function fdd(a,b,c){Ycd.call(this,a,b,c)} +function jdd(a,b,c){fdd.call(this,a,b,c)} +function Bwd(a,b,c){fdd.call(this,a,b,c)} +function Ewd(a,b,c){jdd.call(this,a,b,c)} +function twd(a,b,c){lud.call(this,a,b,c)} +function xwd(a,b,c){lud.call(this,a,b,c)} +function zwd(a,b,c){twd.call(this,a,b,c)} +function Vwd(a,b,c){Owd.call(this,a,b,c)} +function Owd(a,b,c){Ycd.call(this,a,b,c)} +function Swd(a,b,c){Ycd.call(this,a,b,c)} +function ph(a,b){this.a=a;hh.call(this,b)} +function a0c(a){this.i=a;this.f=this.i.j} +function QId(a){this.c=a;this.a=this.c.a} +function s9c(){this.Bb|=256;this.Bb|=512} +function Rm(a,b){this.a=a;Mm.call(this,b)} +function Qo(a,b){this.a=b;Mm.call(this,a)} +function qp(a){this.b=a;this.a=this.b.a.e} +function si(a){a.b.jc();--a.d.f.d;Sh(a.d)} +function h1c(a){a.a=kA(VNc(a.b.a,4),116)} +function p1c(a){a.a=kA(VNc(a.b.a,4),116)} +function Nk(a){zk.call(this,kA(Pb(a),34))} +function al(a){zk.call(this,kA(Pb(a),34))} +function Bb(a){Pb(mJd);return new Eb(a,a)} +function Mq(a,b){return new Br(a.a,a.b,b)} +function j6(a,b,c){return a.substr(b,c-b)} +function Zv(a){return a==null?null:a.name} +function Lz(a){return a.l+a.m*fLd+a.h*gLd} +function uA(a){return typeof a==='number'} +function G2(a){return typeof a==='number'} +function kgb(a,b){return !!b&&a.b[b.g]==b} +function ofb(a,b){var c;c=a[BLd];b[BLd]=c} +function seb(a){Xdb.call(this,a);this.a=a} +function Geb(a){neb.call(this,a);this.a=a} +function Teb(a){Peb.call(this,a);this.a=a} +function jib(a){Mgb.call(this,new Khb(a))} +function bbb(a){if(!a){throw x2(new qfb)}} +function Lpb(a){if(!a){throw x2(new djb)}} +function d4(a){if(a.o!=null){return}t4(a)} +function jjb(a){Lpb(a.a!=null);return a.a} +function qqb(a,b){tbb(b.a,a.a);return a.a} +function wqb(a,b){tbb(b.b,a.a);return a.a} +function nob(a,b){!!b&&(a.a=(aob(b),b.a))} +function Amb(a,b){return Elb(a.a,b)!=null} +function YCb(a,b){return kA(Ke(a.a,b),15)} +function Rlb(a){return a.b=kA(k9(a.a),38)} +function bqb(a){return a.$H||(a.$H=++aqb)} +function eIb(a){return _bb(a.a)||_bb(a.b)} +function oub(a,b){return !!a.p&&D8(a.p,b)} +function LNb(a,b){return a.k.b=(Npb(b),b)} +function MNb(a,b){return a.k.b=(Npb(b),b)} +function QZb(a,b){++a.b;return tbb(a.a,b)} +function RZb(a,b){++a.b;return Abb(a.a,b)} +function h8b(a,b,c){return i8b(a,b,c,a.b)} +function k8b(a,b,c){return i8b(a,b,c,a.c)} +function kAb(a,b){lAb.call(this,a,b,null)} +function Ms(a,b){this.a=b;Mm.call(this,a)} +function Zlb(a){this.a=a;sab.call(this,a)} +function tVb(){rVb();this.b=new zVb(this)} +function QGc(a,b){zGc();this.f=b;this.d=a} +function Lv(){Ev(this);Gv(this);this.Pd()} +function j0c(a){this.d=a;a0c.call(this,a)} +function v0c(a){this.c=a;a0c.call(this,a)} +function y0c(a){this.c=a;j0c.call(this,a)} +function L2c(a,b,c){N1c(a.a,c);M1c(a.a,b)} +function xvc(a,b,c){kA(Quc(a,b),19).nc(c)} +function p$b(a,b){tbb(b.a,a.a);return a.a} +function ULb(a){var b;b=a.a;a.a=a.b;a.b=b} +function Rhd(a,b){Ohd();this.a=a;this.b=b} +function oid(a,b){iid();this.b=a;this.c=b} +function qi(a,b,c,d){fi.call(this,a,b,c,d)} +function Dq(a,b,c){var d;d=a.fd(b);d.Bc(c)} +function _pb(b,c,d){try{b[c]=d}catch(a){}} +function bLc(){bLc=d3;aLc=new EWc(DOd,0)} +function irc(){irc=d3;hrc=new DWc('root')} +function Y3c(){Y3c=d3;X3c=new t4c;new S4c} +function YGd(a){++TGd;return new JHd(3,a)} +function Tr(a){Wj(a,hKd);return new Hbb(a)} +function co(a){Zn();Pb(a);return new Jo(a)} +function dt(a){bt();return Zs((kt(),jt),a)} +function Fw(a){Bw();return parseInt(a)||-1} +function D3(a,b){B3();return a==b?0:a?1:-1} +function fBd(a){return a==null?null:f3(a)} +function gBd(a){return a==null?null:f3(a)} +function Ss(a){return a.f!=null?a.f:''+a.g} +function Ebb(a){return wpb(a.c,a.c.length)} +function Dhb(a){a.b=new Vhb(a);a.c=new Bgb} +function Rx(a){this.q=new $wnd.Date(T2(a))} +function BXb(a){this.c=a;this.a=1;this.b=1} +function tjb(a){pjb();this.b=a;this.a=true} +function fsc(){this.a=new Xm;this.b=new Xm} +function Vhb(a){Whb.call(this,a,null,null)} +function gvb(){Ts.call(this,'POLYOMINO',0)} +function LQc(a){sA(a,142)&&kA(a,142).Xg()} +function qib(a){Lpb(a.b!=0);return a.a.a.c} +function rib(a){Lpb(a.b!=0);return a.c.b.c} +function uyc(a,b,c){a.a+=b;a.b+=c;return a} +function Eyc(a,b,c){a.a*=b;a.b*=c;return a} +function Fyc(a,b,c){a.a-=b;a.b-=c;return a} +function K6(a,b,c){a.a+=r6(b,0,c);return a} +function Byc(a){a.a=-a.a;a.b=-a.b;return a} +function rgc(a){return u5(a.d.e-a.e.e)-a.a} +function H1c(a,b){return a.c.nc(kA(b,134))} +function Vuc(a,b,c){return tbb(b,Xuc(a,c))} +function Jxb(a,b){return a>0?b*b/a:b*b*100} +function Cxb(a,b){return a>0?b/(a*a):b*100} +function zfd(a,b,c){eXc(Ebd(a.a),b,Dfd(c))} +function yjd(a,b,c){eXc(njd(a.a),b,Cjd(c))} +function f9c(a,b,c){T8c.call(this,a,b,c,2)} +function did(a,b){Ohd();Rhd.call(this,a,b)} +function Cid(a,b){iid();oid.call(this,a,b)} +function Gid(a,b){iid();oid.call(this,a,b)} +function Eid(a,b){iid();Cid.call(this,a,b)} +function Gnd(a,b){jmd();vnd.call(this,a,b)} +function Wnd(a,b){jmd();vnd.call(this,a,b)} +function Ind(a,b){jmd();Gnd.call(this,a,b)} +function Knd(a,b){jmd();Gnd.call(this,a,b)} +function Mnd(a,b){jmd();Knd.call(this,a,b)} +function Ynd(a,b){jmd();Wnd.call(this,a,b)} +function cod(a,b){jmd();vnd.call(this,a,b)} +function Mud(a,b,c){return b.ak(a.e,a.c,c)} +function Oud(a,b,c){return b.bk(a.e,a.c,c)} +function xtd(a,b,c){return Wtd(qtd(a,b),c)} +function Yud(a,b){return XMc(a.e,kA(b,42))} +function $Ad(a){return a==null?null:AEd(a)} +function cBd(a){return a==null?null:HEd(a)} +function aFc(a){this.c=a;rPc(a,0);sPc(a,0)} +function Ch(a,b){this.c=a;eg.call(this,a,b)} +function Ih(a,b){this.a=a;Ch.call(this,a,b)} +function ae(a){this.a=a;this.b=Kc(this.a.d)} +function vi(a,b){this.d=a;ri(this);this.b=b} +function ald(){V9c.call(this);this.Bb|=sLd} +function Gm(){Qc.call(this,new Jhb,new Bgb)} +function Ji(a,b,c){Uh.call(this,a,b,c,null)} +function Mi(a,b,c){Uh.call(this,a,b,c,null)} +function r9(a,b){a.a.bd(a.b,b);++a.b;a.c=-1} +function _9(a,b){var c;c=a.e;a.e=b;return c} +function mA(a){Upb(a==null||tA(a));return a} +function nA(a){Upb(a==null||uA(a));return a} +function pA(a){Upb(a==null||wA(a));return a} +function Ju(a,b){Pb(a);Pb(b);return E3(a,b)} +function Ptb(a){if(a>8){return 0}return a+1} +function Ehb(a){L8(a.c);a.b.b=a.b;a.b.a=a.b} +function iob(a,b){cob.call(this,a);this.a=b} +function Zob(a,b){cob.call(this,a);this.a=b} +function kub(a){hub.call(this,0,0);this.f=a} +function pfb(a){var b;b=a[BLd]|0;a[BLd]=b+1} +function Kmb(a,b,c){return a.Ld(b,c)<=0?c:b} +function cwc(a,b){return kA(Fhb(a.b,b),180)} +function fwc(a,b){return kA(Fhb(a.c,b),199)} +function uXb(a){return kA(xbb(a.a,a.b),269)} +function iyc(a){return new Jyc(a.c,a.d+a.a)} +function M2(a){return B2(Tz(G2(a)?S2(a):a))} +function phc(a){return Rfc(),i7b(kA(a,179))} +function CKc(){CKc=d3;BKc=fgb((bEc(),aEc))} +function ayc(){ayc=d3;$wnd.Math.pow(2,-65)} +function dZc(a,b,c){++a.j;a.Yh();iXc(a,b,c)} +function bZc(a,b,c){++a.j;a.Vh(b,a.Ch(b,c))} +function VPc(a,b,c){c=CMc(a,b,3,c);return c} +function lQc(a,b,c){c=CMc(a,b,6,c);return c} +function kTc(a,b,c){c=CMc(a,b,9,c);return c} +function DIc(a,b){gjb(b,GSd);a.f=b;return a} +function V1c(a,b){return (b&jJd)%a.d.length} +function cJb(a,b){WIb();return SFb(b.d.g,a)} +function Qod(a,b){return I8(a.a,b,'')==null} +function Kyd(a,b,c){return Bud(a.c,a.b,b,c)} +function Fhd(a,b,c){var d;d=a.fd(b);d.Bc(c)} +function Efd(a,b){this.a=a;Yed.call(this,b)} +function Djd(a,b){this.a=a;Yed.call(this,b)} +function W_c(a,b){this.c=a;dYc.call(this,b)} +function Ld(a){this.b=a;this.a=this.b.b.Tb()} +function Pld(a,b){Gld.call(this,a);this.a=b} +function uod(a,b){Gld.call(this,a);this.a=b} +function EWc(a,b){DWc.call(this,a);this.a=b} +function Z_c(a,b){q3.call(this,NUd+a+OUd+b)} +function Vj(){gf.call(this,new Bgb);this.a=3} +function ux(a){!a.a&&(a.a=new Ex);return a.a} +function Qh(a){a.b?Qh(a.b):a.f.c.Zb(a.e,a.d)} +function mv(a){this.a=(bdb(),new Qdb(Pb(a)))} +function Ub(a,b){if(!a){throw x2(new Q4(b))}} +function Mb(a,b){if(!a){throw x2(new O4(b))}} +function e6(a,b,c){return a.lastIndexOf(b,c)} +function lw(a,b,c){return a.apply(b,c);var d} +function Efb(a,b,c){return Dfb(a,kA(b,23),c)} +function wmb(a,b){return Nf(xlb(a.a,b,true))} +function xmb(a,b){return Nf(ylb(a.a,b,true))} +function fob(a){return new Lkb((aob(a),a.a))} +function qA(a){return String.fromCharCode(a)} +function Yv(a){return a==null?null:a.message} +function Jv(a,b){a.e=b;b!=null&&_pb(b,qKd,a)} +function gzb(a,b,c){return C4(a[b.b],a[c.b])} +function oGb(a,b,c,d){gGb.call(this,a,b,c,d)} +function Tlb(a){Ulb.call(this,a,(gmb(),cmb))} +function NNb(a,b){return a.k.a=(Npb(b),b)+10} +function ONb(a,b){return a.k.a=(Npb(b),b)+10} +function bJb(a,b){WIb();return !SFb(b.d.g,a)} +function f5(){f5=d3;e5=tz(GE,cKd,21,256,0,1)} +function B3(){B3=d3;z3=(B3(),false);A3=true} +function uqb(){this.b=new Hyc;this.c=new Gbb} +function _wb(){this.d=new Hyc;this.e=new Hyc} +function XFb(){this.k=new Hyc;this.n=new Hyc} +function ioc(){this.b=new Wnc;this.a=new Knc} +function Koc(){this.b=new Bgb;this.a=new Bgb} +function Kac(){this.b=new Jgb;this.a=new Jgb} +function Pec(){this.a=new Gbb;this.d=new Gbb} +function gxb(){this.a=new Gbb;this.b=new Gbb} +function Yyb(){this.a=new Mwb;this.b=new fzb} +function PDb(){this.a=new dDb;this.c=new QDb} +function CHc(){this.n=new XGb;this.i=new oyc} +function EHc(){CHc.call(this);this.a=new Hyc} +function WSc(a,b,c){c=CMc(a,b,11,c);return c} +function vyc(a,b){a.a+=b.a;a.b+=b.b;return a} +function Gyc(a,b){a.a-=b.a;a.b-=b.b;return a} +function itd(a,b){var c;c=b.Yg(a.a);return c} +function Wlc(a,b){return kA(a.b.cd(b),190).a} +function Obd(a,b){return b==a||VXc(Dbd(b),a)} +function s_c(a){return a<100?null:new f_c(a)} +function EUc(a,b,c){c!=null&&uQc(b,TUc(a,c))} +function FUc(a,b,c){c!=null&&vQc(b,TUc(a,c))} +function Dkd(a,b,c,d){zkd.call(this,a,b,c,d)} +function Hwd(a,b,c,d){zkd.call(this,a,b,c,d)} +function Lwd(a,b,c,d){Hwd.call(this,a,b,c,d)} +function exd(a,b,c,d){_wd.call(this,a,b,c,d)} +function gxd(a,b,c,d){_wd.call(this,a,b,c,d)} +function mxd(a,b,c,d){_wd.call(this,a,b,c,d)} +function kxd(a,b,c,d){gxd.call(this,a,b,c,d)} +function rxd(a,b,c,d){gxd.call(this,a,b,c,d)} +function pxd(a,b,c,d){mxd.call(this,a,b,c,d)} +function uxd(a,b,c,d){rxd.call(this,a,b,c,d)} +function Vxd(a,b,c,d){Pxd.call(this,a,b,c,d)} +function Jm(a,b,c){this.a=a;Ud.call(this,b,c)} +function gk(a,b,c){return a.d=kA(b.Kb(c),206)} +function Zxd(a,b){return a.Pi().dh().Zg(a,b)} +function $xd(a,b){return a.Pi().dh()._g(a,b)} +function vn(a,b){return Zn(),lo(a.tc(),b)!=-1} +function Fs(a,b){Es();return new Ms(a.tc(),b)} +function jo(a){Zn();return a.hc()?a.ic():null} +function J3(a){return uA(a)?(Npb(a),a):a.$d()} +function D4(a){return !isNaN(a)&&!isFinite(a)} +function tm(a){nl();this.b=(bdb(),new Peb(a))} +function nl(){nl=d3;new vl((bdb(),bdb(),$cb))} +function o7c(){o7c=d3;n7c=tz(NE,oJd,1,0,5,1)} +function S7c(){S7c=d3;R7c=tz(NE,oJd,1,0,5,1)} +function H0c(){H0c=d3;G0c=tz(NE,oJd,1,0,5,1)} +function T3(){T3=d3;S3=tz(uE,cKd,192,256,0,1)} +function t5(){t5=d3;s5=tz(IE,cKd,149,256,0,1)} +function S5(){S5=d3;R5=tz(PE,cKd,168,256,0,1)} +function b4(){b4=d3;a4=tz(vE,cKd,159,128,0,1)} +function Jo(a){this.b=a;this.a=(Zn(),Zn(),Yn)} +function oob(a){this.b=a;Akb.call(this,TJd,0)} +function cpb(a){this.c=a;Akb.call(this,TJd,0)} +function wGb(a){return !a.c?-1:ybb(a.c.a,a,0)} +function zmb(a,b){return Nf(ylb(a.a,b,false))} +function ymb(a,b){return Nf(xlb(a.a,b,false))} +function Cob(a,b){return a.b.sd(new Eob(a,b))} +function Hob(a,b){return a.b.sd(new Kob(a,b))} +function Fpb(a,b){if(!a){throw x2(new O4(b))}} +function Kpb(a,b){if(!a){throw x2(new u3(b))}} +function EEc(a,b){wEc(this);this.e=a;this.f=b} +function DEc(){wEc(this);this.e=0;this.f=true} +function z0c(a,b){this.c=a;k0c.call(this,a,b)} +function R1c(a,b){return sA(b,15)&&jXc(a.c,b)} +function R8c(a,b,c){return kA(a.c,64).yj(b,c)} +function Q8c(a,b,c){return kA(a.c,64).xj(b,c)} +function Nud(a,b,c){return Mud(a,kA(b,311),c)} +function Pud(a,b,c){return Oud(a,kA(b,311),c)} +function evd(a,b,c){return dvd(a,kA(b,311),c)} +function gvd(a,b,c){return fvd(a,kA(b,311),c)} +function ted(a,b){S6();return fXc(Ibd(a.a),b)} +function yed(a,b){S6();return fXc(Ibd(a.a),b)} +function io(a){Zn();return Fib(a.a)?ho(a):null} +function Mc(a,b){return a.b.Qb(b)?Nc(a,b):null} +function i6(a,b){return a.substr(b,a.length-b)} +function nHb(a){return kA(a,11).f.c.length!=0} +function sHb(a){return kA(a,11).d.c.length!=0} +function WCc(a){return a==PCc||a==RCc||a==QCc} +function Slb(a){l9(a.a);Flb(a.c,a.b);a.b=null} +function Ibb(a){rbb(this);Apb(this.c,0,a.yc())} +function zib(a){lib(this);xib(this);pg(this,a)} +function Jib(a,b,c){this.d=a;this.b=c;this.a=b} +function ngb(a,b,c){this.a=a;this.b=b;this.c=c} +function xhb(a,b,c){this.a=a;this.b=b;this.c=c} +function cnb(a,b,c){this.c=a;this.a=b;this.b=c} +function Pc(a,b,c,d){a.d.b.$b(c);a.d.b.Zb(d,b)} +function oo(a,b){Zn();Pb(b);return new Qo(a,b)} +function Nrb(a){Lrb();return Zs((Qrb(),Prb),a)} +function Vrb(a){Trb();return Zs((Yrb(),Xrb),a)} +function kmb(a){gmb();return Zs((umb(),tmb),a)} +function $mb(a){Ymb();return Zs((bnb(),anb),a)} +function ssb(a){qsb();return Zs((vsb(),usb),a)} +function Ltb(a){Jtb();return Zs((Otb(),Ntb),a)} +function Wub(a){Uub();return Zs((Zub(),Yub),a)} +function hvb(a){fvb();return Zs((kvb(),jvb),a)} +function Zxb(a){Xxb();return Zs((ayb(),_xb),a)} +function mzb(a){kzb();return Zs((pzb(),ozb),a)} +function Yzb(a){Wzb();return Zs((_zb(),$zb),a)} +function UBb(a){OBb();return Zs((XBb(),WBb),a)} +function TGb(a){RGb();return Zs((WGb(),VGb),a)} +function pGb(a){gGb.call(this,a.d,a.c,a.a,a.b)} +function ZGb(a){gGb.call(this,a.d,a.c,a.a,a.b)} +function eMb(a){cMb();return Zs((hMb(),gMb),a)} +function oPb(a){lPb();return Zs((rPb(),qPb),a)} +function V$b(a){T$b();return Zs((Y$b(),X$b),a)} +function b_b(a){_$b();return Zs((e_b(),d_b),a)} +function n_b(a){l_b();return Zs((q_b(),p_b),a)} +function y_b(a){t_b();return Zs((B_b(),A_b),a)} +function H_b(a){F_b();return Zs((K_b(),J_b),a)} +function T_b(a){O_b();return Zs((W_b(),V_b),a)} +function a0b(a){$_b();return Zs((d0b(),c0b),a)} +function n0b(a){k0b();return Zs((q0b(),p0b),a)} +function z0b(a){x0b();return Zs((C0b(),B0b),a)} +function L0b(a){J0b();return Zs((O0b(),N0b),a)} +function _0b(a){Z0b();return Zs((c1b(),b1b),a)} +function i1b(a){g1b();return Zs((l1b(),k1b),a)} +function r1b(a){p1b();return Zs((u1b(),t1b),a)} +function z1b(a){x1b();return Zs((C1b(),B1b),a)} +function M2b(a){K2b();return Zs((P2b(),O2b),a)} +function _6b(a){W6b();return Zs((c7b(),b7b),a)} +function l7b(a){h7b();return Zs((o7b(),n7b),a)} +function z7b(a){u7b();return Zs((C7b(),B7b),a)} +function N7b(a){L7b();return Zs((Q7b(),P7b),a)} +function W7b(a){U7b();return Zs((Z7b(),Y7b),a)} +function d8b(a){b8b();return Zs((g8b(),f8b),a)} +function y8b(a){w8b();return Zs((B8b(),A8b),a)} +function H8b(a){F8b();return Zs((K8b(),J8b),a)} +function Q8b(a){O8b();return Zs((T8b(),S8b),a)} +function rkb(a,b){while(a.b.sd(new Eob(a,b)));} +function yEb(a,b,c){this.b=a;this.a=b;this.c=c} +function zub(a,b,c){this.a=a;this.b=b;this.c=c} +function eLb(a,b,c){this.a=a;this.b=b;this.c=c} +function qFb(a,b,c){this.e=b;this.b=a;this.d=c} +function N$b(a){var b;b=new M$b;b.e=a;return b} +function Vbc(a){!a.e&&(a.e=new Gbb);return a.e} +function IVb(){IVb=d3;GVb=new eWb;HVb=new gWb} +function Yib(){Yib=d3;Wib=new Zib;Xib=new _ib} +function hNb(){hNb=d3;fNb=new qNb;gNb=new tNb} +function Yec(a){Wec();return Zs((_ec(),$ec),a)} +function edc(a){cdc();return Zs((hdc(),gdc),a)} +function eoc(a){_nc();return Zs((hoc(),goc),a)} +function Woc(a){Toc();return Zs((Zoc(),Yoc),a)} +function jic(a){hic();return Zs((mic(),lic),a)} +function ric(a){pic();return Zs((uic(),tic),a)} +function Xic(a){Vic();return Zs(($ic(),Zic),a)} +function Plc(a){Flc();return Zs((Slc(),Rlc),a)} +function Psc(a){Msc();return Zs((Ssc(),Rsc),a)} +function Fsc(a){Csc();return Zs((Isc(),Hsc),a)} +function knc(a){inc();return Zs((nnc(),mnc),a)} +function qqc(a){oqc();return Zs((tqc(),sqc),a)} +function yqc(a){wqc();return Zs((Bqc(),Aqc),a)} +function qrc(a){lrc();return Zs((urc(),trc),a)} +function Trc(a){Qrc();return Zs((Wrc(),Vrc),a)} +function Ctc(a){ztc();return Zs((Ftc(),Etc),a)} +function Mtc(a){Jtc();return Zs((Ptc(),Otc),a)} +function Ixc(a){Gxc();return Zs((Lxc(),Kxc),a)} +function Wxc(a){Uxc();return Zs((Zxc(),Yxc),a)} +function gzc(a){ezc();return Zs((jzc(),izc),a)} +function gDc(a){eDc();return Zs((jDc(),iDc),a)} +function JDc(a){FDc();return Zs((MDc(),LDc),a)} +function ZCc(a){VCc();return Zs((aDc(),_Cc),a)} +function lCc(a){jCc();return Zs((oCc(),nCc),a)} +function ACc(a){yCc();return Zs((DCc(),CCc),a)} +function LCc(a){JCc();return Zs((OCc(),NCc),a)} +function lBc(a){gBc();return Zs((oBc(),nBc),a)} +function vBc(a){tBc();return Zs((yBc(),xBc),a)} +function FBc(a){DBc();return Zs((IBc(),HBc),a)} +function RBc(a){PBc();return Zs((UBc(),TBc),a)} +function dEc(a){bEc();return Zs((gEc(),fEc),a)} +function sEc(a){qEc();return Zs((vEc(),uEc),a)} +function iFc(a){gFc();return Zs((lFc(),kFc),a)} +function mHc(a){jHc();return Zs((pHc(),oHc),a)} +function MHc(a){KHc();return Zs((PHc(),OHc),a)} +function rIc(a){pIc();return Zs((uIc(),tIc),a)} +function gJc(a){eJc();return Zs((jJc(),iJc),a)} +function XJc(a){SJc();return Zs(($Jc(),ZJc),a)} +function $Lc(a){YLc();return Zs((bMc(),aMc),a)} +function wWc(a){uWc();return Zs((zWc(),yWc),a)} +function Dnc(a,b,c){return a=b){throw x2(new r3)}} +function ucb(a,b){var c;for(c=0;c0?1:0} +function rA(a){return !Array.isArray(a)&&a.sl===g3} +function vA(a){return a!=null&&xA(a)&&!(a.sl===g3)} +function jgb(a,b){return sA(b,23)&&kgb(a,kA(b,23))} +function lgb(a,b){return sA(b,23)&&mgb(a,kA(b,23))} +function lhb(a,b){return !(a.a.get(b)===undefined)} +function Wjb(a){return Yjb(a,26)*ILd+Yjb(a,27)*JLd} +function lnb(a,b){return fnb(new Xnb,new onb(a),b)} +function Opb(a,b){if(a==null){throw x2(new B5(b))}} +function Dfb(a,b,c){hgb(a.a,b);return Gfb(a,b.g,c)} +function Dcb(a,b,c){Hpb(0,b,a.length);Acb(a,0,b,c)} +function sbb(a,b,c){Ppb(b,a.c.length);zpb(a.c,b,c)} +function hUb(a,b,c){cUb(c,a,1);tbb(b,new YUb(c,a))} +function iUb(a,b,c){dUb(c,a,1);tbb(b,new SUb(c,a))} +function prb(){this.d=new Brb;this.e=new vrb(this)} +function qBb(){this.b=new BBb;this.c=new uBb(this)} +function d9b(){a9b();this.e=new yib;this.d=new yib} +function cMc(a,b){this.b=new yib;this.a=a;this.c=b} +function M7(a,b,c){y7();this.e=a;this.d=b;this.a=c} +function RHc(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} +function QHc(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} +function tcb(a,b,c){var d;for(d=0;d0?$wnd.Math.log(a/b):-100} +function KLc(a,b){return C4(a.c.c+a.c.b,b.c.c+b.c.b)} +function k0c(a,b){this.d=a;a0c.call(this,a);this.e=b} +function Zuc(a,b,c){Ruc(a,b.g,c);hgb(a.c,b);return a} +function ZAb(a){XAb(a,(gBc(),cBc));a.d=true;return a} +function Pb(a){if(a==null){throw x2(new A5)}return a} +function hz(a){if(a==null){throw x2(new A5)}this.a=a} +function Up(a){a.a=null;a.e=null;L8(a.b);a.d=0;++a.c} +function dud(a){!a.j&&jud(a,etd(a.g,a.b));return a.j} +function GJb(a){a.b.k.a+=a.a.f*(a.a.a-1);return null} +function bcb(a){Rpb(a.b!=-1);zbb(a.c,a.a=a.b);a.b=-1} +function _ab(a){Mab(this);Cpb(this.a,Z4(8>a?8:a)<<1)} +function PHd(a,b){VGd.call(this,1);this.a=a;this.b=b} +function gn(a,b,c){this.a=a;Rb(c,b);this.c=b;this.b=c} +function Tm(a,b){this.a=a;this.b=b;this.c=this.b.lc()} +function _ud(a,b){rcd(a,sA(b,184)?b:kA(b,1630).rk())} +function Ab(a){Pb(a);return sA(a,476)?kA(a,476):f3(a)} +function SYb(a,b){if(!b){return false}return pg(a,b)} +function s6(a,b){a.a+=String.fromCharCode(b);return a} +function C6(a,b){a.a+=String.fromCharCode(b);return a} +function G6(a,b,c,d){a.a+=''+b.substr(c,d-c);return a} +function dy(a,b,c){var d;d=cy(a,b);ey(a,b,c);return d} +function vcb(a,b,c){var d;for(d=0;d=a.g} +function Zvb(a,b){Tvb();return a==_Wc(b)?bXc(b):_Wc(b)} +function I8(a,b,c){return wA(b)?J8(a,b,c):Xgb(a.d,b,c)} +function iec(a,b,c){var d;d=kec(a,b,c);return hec(a,d)} +function es(a,b){var c;c=a.a._b();Ob(b,c);return c-1-b} +function Gmc(a,b){var c;c=new Emc(a);Amc(c,b);return c} +function wz(a,b,c){Jpb(c==null||oz(a,c));return a[b]=c} +function OTc(a,b){var c;c=a.a.length;cy(a,c);ey(a,c,b)} +function cZc(a,b){var c;++a.j;c=a.hi();a.Wh(a.Ch(c,b))} +function cWc(a,b){OTc(a,new hz(b.f!=null?b.f:''+b.g))} +function aWc(a,b){OTc(a,new hz(b.f!=null?b.f:''+b.g))} +function HAb(a){this.b=new Gbb;this.a=new Gbb;this.c=a} +function lIb(a){this.c=new Hyc;this.a=new Gbb;this.b=a} +function pxb(a){_wb.call(this);this.a=new Hyc;this.c=a} +function wnd(a,b,c){kmd.call(this,b);this.a=a;this.b=c} +function _Hd(a,b,c){VGd.call(this,a);this.a=b;this.b=c} +function kod(a,b,c){this.a=a;Gld.call(this,b);this.b=c} +function gsd(a,b,c){this.a=a;L$c.call(this,8,b,null,c)} +function swc(a){this.c=a;this.a=new yib;this.b=new yib} +function Np(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function Atd(a){this.a=(Npb(xVd),xVd);this.b=a;new Lkd} +function ohd(a){!a.d&&(a.d=new fdd(pY,a,1));return a.d} +function Nc(a,b){var c;c=a.b.$b(b);a.d.b.$b(c);return c} +function b5(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function Hb(a,b){return yA(a)===yA(b)||a!=null&&kb(a,b)} +function Skb(a,b){return Ykb(b,a.a.c.length),xbb(a.a,b)} +function Ayc(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function n6(a){return String.fromCharCode.apply(null,a)} +function Cn(a){return sA(a,13)?kA(a,13)._b():mo(a.tc())} +function kv(a){if(sA(a,543)){return a}return new lv(a)} +function uGb(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function Znb(a){if(!a.c){a.d=true;_nb(a)}else{Znb(a.c)}} +function aob(a){if(!a.c){bob(a);a.d=true}else{aob(a.c)}} +function Afb(a){rg(a.a);a.b=tz(NE,oJd,1,a.b.length,5,1)} +function dib(a){this.c=a;this.b=a.a.b.a;ofb(a.a.c,this)} +function dGc(a,b){a.c<0||a.b.b0?new EEc(a-1,b):new EEc(a,b)} +function Tu(a,b){Pu();return new Ru(new al(a),new Nk(b))} +function ti(a){Rh(a.d);if(a.d.d!=a.c){throw x2(new qfb)}} +function Vgb(a,b){var c;c=a.a.get(b);return c==null?[]:c} +function fUc(a,b){var c;c=F8(a.f,b);VUc(b,c);return null} +function dSc(a,b,c,d){cSc(a,b,c,false);rgd(a,d);return a} +function y6(a,b){a.a=j6(a.a,0,b)+''+i6(a.a,b+1);return a} +function wvc(a){a.j.c=tz(NE,oJd,1,0,5,1);a.a=-1;return a} +function ZPc(a){!a.c&&(a.c=new pxd(HV,a,5,8));return a.c} +function YPc(a){!a.b&&(a.b=new pxd(HV,a,4,7));return a.b} +function _Oc(a){!a.n&&(a.n=new zkd(LV,a,1,7));return a.n} +function $Sc(a){!a.c&&(a.c=new zkd(NV,a,9,9));return a.c} +function bud(a){a.e==mWd&&hud(a,btd(a.g,a.b));return a.e} +function cud(a){a.f==mWd&&iud(a,ctd(a.g,a.b));return a.f} +function oA(a){Upb(a==null||xA(a)&&!(a.sl===g3));return a} +function Qb(a,b){if(a==null){throw x2(new B5(b))}return a} +function mj(a){var b;b=a.b;!b&&(a.b=b=new ju(a));return b} +function wYc(a){var b;b=a.Gh(a.f);fXc(a,b);return b.hc()} +function rg(a){var b;for(b=a.tc();b.hc();){b.ic();b.jc()}} +function k9(a){Lpb(a.bd&&++d;return d} +function TRc(a){var b,c;c=(b=new xhd,b);qhd(c,a);return c} +function URc(a){var b,c;c=(b=new xhd,b);uhd(c,a);return c} +function u$c(a){if(a.p!=5)throw x2(new P4);return U2(a.f)} +function D$c(a){if(a.p!=5)throw x2(new P4);return U2(a.k)} +function aJd(a){if(a)return a.Wb();return !null.tc().hc()} +function Gv(a){if(a.n){a.e!==pKd&&a.Pd();a.j=null}return a} +function $5c(a){return a!=null&&Udb(I5c,a.toLowerCase())} +function k3c(a){this.f=a;this.c=this.f.e;a.f>0&&j3c(this)} +function amd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function lnd(a,b,c,d){jmd();wmd.call(this,b,c,d);this.a=a} +function rnd(a,b,c,d){jmd();wmd.call(this,b,c,d);this.a=a} +function gpb(a,b,c,d){this.b=a;this.c=d;Akb.call(this,b,c)} +function Bi(a,b){this.a=a;vi.call(this,a,kA(a.d,15).fd(b))} +function xib(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} +function aGb(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} +function mXb(a,b,c){a.i=0;a.e=0;if(b==c){return}iXb(a,b,c)} +function nXb(a,b,c){a.i=0;a.e=0;if(b==c){return}jXb(a,b,c)} +function _Xb(a,b){var c;c=$Xb(b);return kA(F8(a.c,c),21).a} +function h6(a,b,c){return c>=0&&Z5(a.substr(c,b.length),b)} +function H8(a,b){return b==null?!!Wgb(a.d,null):lhb(a.e,b)} +function zYb(a,b){if(!!a.d&&!a.d.a){yYb(a.d,b);zYb(a.d,b)}} +function AYb(a,b){if(!!a.e&&!a.e.a){yYb(a.e,b);AYb(a.e,b)}} +function Xbc(a,b){this.g=a;this.d=xz(pz(RK,1),VNd,8,0,[b])} +function roc(a,b){new yib;this.a=new Vyc;this.b=a;this.c=b} +function kSc(){hSc(this,new gRc);this.wb=(P6c(),O6c);N6c()} +function BWc(a,b){return sA(b,166)&&Z5(a.b,kA(b,166).Lf())} +function lvc(a,b){mb(a);mb(b);return Rs(kA(a,23),kA(b,23))} +function cjd(a,b,c,d,e,f){bjd.call(this,a,b,c,d,e,f?-2:-1)} +function Lxd(a,b,c,d){tcd.call(this,b,c);this.b=a;this.a=d} +function tv(a,b){Sj.call(this,new Llb(a));this.a=a;this.b=b} +function dr(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} +function Kv(a,b){var c;c=f4(a.ql);return b==null?c:c+': '+b} +function z2(a,b){return B2(Oz(G2(a)?S2(a):a,G2(b)?S2(b):b))} +function N2(a,b){return B2(Uz(G2(a)?S2(a):a,G2(b)?S2(b):b))} +function W2(a,b){return B2(aA(G2(a)?S2(a):a,G2(b)?S2(b):b))} +function bw(a){return !!a&&!!a.hashCode?a.hashCode():bqb(a)} +function jdb(a){bdb();return sA(a,49)?new Oeb(a):new seb(a)} +function bdb(){bdb=d3;$cb=new ldb;_cb=new Edb;adb=new Mdb} +function $eb(){$eb=d3;Xeb=new afb;Yeb=new afb;Zeb=new ffb} +function Pqb(){Pqb=d3;Mqb=new Kqb;Oqb=new prb;Nqb=new grb} +function Bw(){Bw=d3;var a,b;b=!Gw();a=new Ow;Aw=b?new Hw:a} +function uBb(a){this.c=a;this.b=new Cmb(kA(Pb(new wBb),65))} +function vrb(a){this.c=a;this.b=new Cmb(kA(Pb(new wrb),65))} +function PEb(){this.a=new Vyc;this.b=(Wj(3,hKd),new Hbb(3))} +function fFb(a,b,c){this.a=a;this.e=false;this.d=b;this.c=c} +function Wqb(a,b,c){if(a.f){return a.f.re(b,c)}return false} +function Ibd(a){!a.s&&(a.s=new zkd(zY,a,21,17));return a.s} +function Fbd(a){!a.q&&(a.q=new zkd(tY,a,11,10));return a.q} +function YSc(a){!a.a&&(a.a=new zkd(MV,a,10,11));return a.a} +function JAb(a,b){var c;c=Igb(a.a,b);c&&(b.d=null);return c} +function m8b(a,b,c,d){wz(a.c[b.g],c.g,d);wz(a.c[c.g],b.g,d)} +function p8b(a,b,c,d){wz(a.c[b.g],b.g,c);wz(a.b[b.g],b.g,d)} +function LYc(a,b,c){IYc();!!a&&I8(HYc,a,b);!!a&&I8(GYc,a,c)} +function _jb(a,b){$jb(a,U2(z2(P2(b,24),NLd)),U2(z2(b,NLd)))} +function RNc(a){var b;b=kA(VNc(a,16),24);return !b?a.Rg():b} +function p$c(a){if(a.p!=0)throw x2(new P4);return L2(a.f,0)} +function y$c(a){if(a.p!=0)throw x2(new P4);return L2(a.k,0)} +function Kbd(a){if(!a.u){Jbd(a);a.u=new Efd(a,a)}return a.u} +function Llc(a){if(a==klc||a==hlc){return true}return false} +function qw(a){kw();$wnd.setTimeout(function(){throw a},0)} +function qyc(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} +function bmd(a,b){this.e=a;this.a=NE;this.b=Ixd(b);this.c=b} +function mjc(){this.b=new Jgb;this.c=new yib;this.d=new qlb} +function hic(){hic=d3;gic=new iic(yOd,0);fic=new iic(xOd,1)} +function inc(){inc=d3;gnc=new jnc(xOd,0);hnc=new jnc(yOd,1)} +function kn(){kn=d3;nl();jn=(Iu(),Hu);hn=new cv(new Cmb(jn))} +function nn(a){kn();Pb(a);return jn==a?hn:new cv(new Cmb(a))} +function Gud(a,b,c,d,e,f,g){return new qzd(a.e,b,c,d,e,f,g)} +function _$c(a,b,c,d,e,f){this.a=a;M$c.call(this,b,c,d,e,f)} +function S_c(a,b,c,d,e,f){this.a=a;M$c.call(this,b,c,d,e,f)} +function ahb(a){this.e=a;this.b=this.e.a.entries();this.a=[]} +function zmc(a){a.d=a.d-15;a.b=a.b-15;a.c=a.c+15;a.a=a.a+15} +function eTb(a,b){var c;c=kA(Ihb(a.e,b),249);!!c&&(a.d=true)} +function G8(a,b){return b==null?Of(Wgb(a.d,null)):mhb(a.e,b)} +function Wgb(a,b){return Ugb(a,b,Vgb(a,b==null?0:a.b.he(b)))} +function Ff(a,b){return b===a?'(this Map)':b==null?mJd:f3(b)} +function usd(a,b){return a.a?b.pg().tc():kA(b.pg(),64).oh()} +function L6(a,b,c){a.a=j6(a.a,0,b)+(''+c)+i6(a.a,b);return a} +function Ly(a,b){if(b==null){throw x2(new A5)}return My(a,b)} +function Orb(){Lrb();return xz(pz(iI,1),jKd,391,0,[Krb,Jrb])} +function Wrb(){Trb();return xz(pz(jI,1),jKd,390,0,[Rrb,Srb])} +function $xb(){Xxb();return xz(pz(sJ,1),jKd,387,0,[Vxb,Wxb])} +function c_b(){_$b();return xz(pz(dP,1),jKd,386,0,[Z$b,$$b])} +function z_b(){t_b();return xz(pz(fP,1),jKd,317,0,[s_b,r_b])} +function A1b(){x1b();return xz(pz(pP,1),jKd,383,0,[v1b,w1b])} +function zqc(){wqc();return xz(pz(zS,1),jKd,388,0,[vqc,uqc])} +function rqc(){oqc();return xz(pz(yS,1),jKd,438,0,[mqc,nqc])} +function rrc(){lrc();return xz(pz(ES,1),jKd,447,0,[jrc,krc])} +function Yic(){Vic();return xz(pz(wR,1),jKd,437,0,[Uic,Tic])} +function kic(){hic();return xz(pz(oR,1),jKd,466,0,[gic,fic])} +function sic(){pic();return xz(pz(pR,1),jKd,465,0,[nic,oic])} +function lnc(){inc();return xz(pz(UR,1),jKd,417,0,[gnc,hnc])} +function Zec(){Wec();return xz(pz(uQ,1),jKd,472,0,[Vec,Uec])} +function Gsc(){Csc();return xz(pz(RS,1),jKd,389,0,[Asc,Bsc])} +function NMc(a,b,c,d){return c>=0?a.Dg(b,c,d):a.lg(null,c,d)} +function _tc(a,b){var c;c=kA(AOc(b,(irc(),hrc)),35);auc(a,c)} +function Wkc(a){var b;b=Vr(a.b);pg(b,a.c);pg(b,a.i);return b} +function Xdd(a){yA(a.a)===yA((wbd(),vbd))&&Ydd(a);return a.a} +function cGc(a){if(a.b.b==0){return a.a.Be()}return uib(a.b)} +function Wp(a){var b;return b=a.g,kA(!b?(a.g=new Qq(a)):b,15)} +function pic(){pic=d3;nic=new qic(WQd,0);oic=new qic('UP',1)} +function tmc(a,b){qmc(this,new Jyc(a.a,a.b));rmc(this,Vr(b))} +function GIc(a,b){CHc.call(this);vIc(this);this.a=a;this.c=b} +function nmd(a,b,c){jmd();kmd.call(this,b);this.a=a;this.b=c} +function dId(a,b,c){UGd();VGd.call(this,a);this.b=b;this.a=c} +function ew(a,b){var c=dw[a.charCodeAt(0)];return c==null?a:c} +function uAb(a,b){var c;c=dAb(a.f,b);return vyc(Byc(c),a.f.d)} +function Thb(a){var b;b=a.c.b.b;a.b=b;a.a=a.c.b;b.a=a.c.b.b=a} +function tib(a){return a.b==0?null:(Lpb(a.b!=0),wib(a,a.a.a))} +function Zjb(a){return y2(O2(E2(Yjb(a,32)),32),E2(Yjb(a,32)))} +function Phd(a){return sA(a,62)&&(kA(kA(a,17),62).Bb&bTd)!=0} +function zA(a){return Math.max(Math.min(a,jJd),-2147483648)|0} +function icb(a,b){Ipb(b);return kcb(a,tz(FA,OKd,22,b,15,1),b)} +function Yvb(a,b){Tvb();return a==ZSc(_Wc(b))||a==ZSc(bXc(b))} +function HGb(a){var b;return b=yGb(a),'n_'+(b==null?''+a.o:b)} +function Uo(a){this.b=(Zn(),Zn(),Zn(),Xn);this.a=kA(Pb(a),43)} +function EIc(a){CHc.call(this);vIc(this);this.a=a;this.c=true} +function pKb(a,b,c){this.d=a;this.b=new Gbb;this.c=b;this.a=c} +function pKc(a,b,c,d){var e;e=new EHc;b.a[c.g]=e;Dfb(a.b,d,e)} +function p4(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a._d(b))} +function Ix(a,b){var c;c=a.q.getHours();a.q.setDate(b);Hx(a,c)} +function hv(a){var b;b=new Kgb(Gs(a.length));cdb(b,a);return b} +function e3(a){function b(){} +;b.prototype=a||{};return new b} +function Vab(a,b){if(Qab(a,b)){lbb(a);return true}return false} +function XPc(a){if(a.Db>>16!=3)return null;return kA(a.Cb,35)} +function mTc(a){if(a.Db>>16!=9)return null;return kA(a.Cb,35)} +function r$c(a){if(a.p!=2)throw x2(new P4);return U2(a.f)&AKd} +function A$c(a){if(a.p!=2)throw x2(new P4);return U2(a.k)&AKd} +function oqc(){oqc=d3;mqc=new pqc(kRd,0);nqc=new pqc('FAN',1)} +function jec(a,b,c){var d;d=sec(a,b,c);a.b=new _dc(d.c.length)} +function J8(a,b,c){return b==null?Xgb(a.d,null,c):nhb(a.e,b,c)} +function Anb(a,b){return r5(y2(r5(kA(a,149).a).a,kA(b,149).a))} +function $9b(){$9b=d3;Z9b=Tu(d5(1),d5(4));Y9b=Tu(d5(1),d5(2))} +function a9b(){a9b=d3;_8b=rvc(new yvc,(Wzb(),Vzb),(lPb(),bPb))} +function V8b(){V8b=d3;U8b=rvc(new yvc,(Wzb(),Vzb),(lPb(),bPb))} +function mfc(){mfc=d3;lfc=tvc(new yvc,(Wzb(),Vzb),(lPb(),BOb))} +function Rfc(){Rfc=d3;Qfc=tvc(new yvc,(Wzb(),Vzb),(lPb(),BOb))} +function Thc(){Thc=d3;Shc=tvc(new yvc,(Wzb(),Vzb),(lPb(),BOb))} +function Hic(){Hic=d3;Gic=tvc(new yvc,(Wzb(),Vzb),(lPb(),BOb))} +function Dqc(){Dqc=d3;Cqc=rvc(new yvc,(_nc(),$nc),(Toc(),Noc))} +function pQc(a){if(a.Db>>16!=6)return null;return kA(a.Cb,105)} +function ORc(a){if(a.Db>>16!=7)return null;return kA(a.Cb,207)} +function JSc(a){if(a.Db>>16!=7)return null;return kA(a.Cb,253)} +function ZSc(a){if(a.Db>>16!=11)return null;return kA(a.Cb,35)} +function I9c(a){if(a.Db>>16!=17)return null;return kA(a.Cb,24)} +function C8c(a){if(a.Db>>16!=3)return null;return kA(a.Cb,139)} +function Jad(a){if(a.Db>>16!=6)return null;return kA(a.Cb,207)} +function ncd(a,b,c,d,e,f){return new Oid(a.e,b,a.pi(),c,d,e,f)} +function Ffb(a,b){return lgb(a.a,b)?Gfb(a,kA(b,23).g,null):null} +function Gx(a,b){return l5(E2(a.q.getTime()),E2(b.q.getTime()))} +function Lx(a,b){var c;c=a.q.getHours();a.q.setMonth(b);Hx(a,c)} +function LEb(a,b){!!a.c&&Abb(a.c.f,a);a.c=b;!!a.c&&tbb(a.c.f,a)} +function FGb(a,b){!!a.c&&Abb(a.c.a,a);a.c=b;!!a.c&&tbb(a.c.a,a)} +function MEb(a,b){!!a.d&&Abb(a.d.d,a);a.d=b;!!a.d&&tbb(a.d.d,a)} +function jHb(a,b){!!a.g&&Abb(a.g.i,a);a.g=b;!!a.g&&tbb(a.g.i,a)} +function _Fb(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function yr(a){_p(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function zr(a){_p(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function r9b(a,b){var c;c=new lIb(a);b.c[b.c.length]=c;return c} +function bWc(a,b){var c,d;c=b.c;d=c!=null;d&&OTc(a,new hz(b.c))} +function hsc(a){var b;b=Nsc(kA(AOc(a,(otc(),gtc)),349));b.Ef(a)} +function Q9c(a,b){sA(a.Cb,96)&&Edd(Jbd(kA(a.Cb,96)),4);wRc(a,b)} +function Xad(a,b){sA(a.Cb,248)&&(kA(a.Cb,248).tb=null);wRc(a,b)} +function Ykd(a,b){Zkd(a,b);sA(a.Cb,96)&&Edd(Jbd(kA(a.Cb,96)),2)} +function w3(a,b){Ev(this);this.f=b;this.g=a;Gv(this);this.Pd()} +function Svc(a){this.c=new yib;this.b=a.b;this.d=a.c;this.a=a.a} +function pqb(){this.a=new iib;this.e=new Jgb;this.g=0;this.i=0} +function A9(a,b,c){Qpb(b,c,a._b());this.c=a;this.a=b;this.b=c-b} +function s9(a,b){this.a=a;m9.call(this,a);Ppb(b,a._b());this.b=b} +function qdc(a){this.a=a;this.b=tz(gQ,cKd,1637,a.e.length,0,2)} +function Iyc(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function ekb(a,b){this.b=(Npb(a),a);this.a=(b&qLd)==0?b|64|RJd:b} +function Bbb(a,b,c){var d;Qpb(b,c,a.c.length);d=c-b;Bpb(a.c,b,d)} +function Rt(a,b){var c;c=kA(Js(Tp(a.a),b),13);return !c?0:c._b()} +function Dfd(a){var b,c;c=(N6c(),b=new xhd,b);qhd(c,a);return c} +function Cjd(a){var b,c;c=(N6c(),b=new xhd,b);qhd(c,a);return c} +function uVb(a){rVb();if(sA(a.g,8)){return kA(a.g,8)}return null} +function SVb(a,b){var c;c=kA(F8(a.g,b),57);wbb(b.d,new EWb(a,c))} +function Sud(a,b){return wyd(),K9c(b)?new tzd(b,a):new Nyd(b,a)} +function gHb(a){return Pyc(xz(pz(aU,1),cKd,9,0,[a.g.k,a.k,a.a]))} +function fMb(){cMb();return xz(pz($L,1),jKd,412,0,[aMb,bMb,_Lb])} +function _mb(){Ymb();return xz(pz($G,1),jKd,150,0,[Vmb,Wmb,Xmb])} +function s1b(){p1b();return xz(pz(oP,1),jKd,280,0,[n1b,o1b,m1b])} +function j1b(){g1b();return xz(pz(nP,1),jKd,318,0,[e1b,f1b,d1b])} +function I_b(){F_b();return xz(pz(gP,1),jKd,319,0,[C_b,E_b,D_b])} +function U_b(){O_b();return xz(pz(hP,1),jKd,384,0,[M_b,L_b,N_b])} +function b0b(){$_b();return xz(pz(iP,1),jKd,406,0,[Y_b,X_b,Z_b])} +function X7b(){U7b();return xz(pz(yP,1),jKd,410,0,[T7b,R7b,S7b])} +function e8b(){b8b();return xz(pz(zP,1),jKd,345,0,[$7b,a8b,_7b])} +function z8b(){w8b();return xz(pz(BP,1),jKd,347,0,[v8b,t8b,u8b])} +function R8b(){O8b();return xz(pz(DP,1),jKd,346,0,[M8b,N8b,L8b])} +function I8b(){F8b();return xz(pz(CP,1),jKd,385,0,[E8b,C8b,D8b])} +function nzb(){kzb();return xz(pz(zJ,1),jKd,348,0,[izb,hzb,jzb])} +function Qsc(){Msc();return xz(pz(SS,1),jKd,349,0,[Jsc,Ksc,Lsc])} +function Urc(){Qrc();return xz(pz(IS,1),jKd,401,0,[Prc,Nrc,Orc])} +function fdc(){cdc();return xz(pz(bQ,1),jKd,413,0,[_cc,adc,bdc])} +function sIc(){pIc();return xz(pz(cV,1),jKd,419,0,[nIc,mIc,oIc])} +function hJc(){eJc();return xz(pz(jV,1),jKd,420,0,[dJc,cJc,bJc])} +function hDc(){eDc();return xz(pz(qU,1),jKd,275,0,[dDc,cDc,bDc])} +function Ntc(){Jtc();return xz(pz(XS,1),jKd,277,0,[Htc,Itc,Gtc])} +function NHc(){KHc();return xz(pz(_U,1),jKd,203,0,[HHc,IHc,JHc])} +function mCc(){jCc();return xz(pz(mU,1),jKd,316,0,[hCc,gCc,iCc])} +function kt(){kt=d3;jt=Vs((bt(),xz(pz(bD,1),jKd,350,0,[_s,at])))} +function wqc(){wqc=d3;vqc=new xqc('DFS',0);uqc=new xqc('BFS',1)} +function Tvb(){Tvb=d3;Svb=new Gbb;Rvb=(Es(),new Bgb);Qvb=new Gbb} +function Eic(a,b,c){var d;d=new Dic;d.b=b;d.a=c;++b.b;tbb(a.d,d)} +function XHd(a,b,c){VGd.call(this,25);this.b=a;this.a=b;this.c=c} +function wHd(a){UGd();VGd.call(this,a);this.c=false;this.a=false} +function $td(a){a.a==(Usd(),Tsd)&&eud(a,Vsd(a.g,a.b));return a.a} +function aud(a){a.d==(Usd(),Tsd)&&gud(a,Zsd(a.g,a.b));return a.d} +function $s(a,b){var c;c=(Npb(a),a).g;Epb(!!c);Npb(b);return c(b)} +function ds(a,b){var c,d;d=fs(a,b);c=a.a.fd(d);return new ts(a,c)} +function T2(a){var b;if(G2(a)){b=a;return b==-0.?0:b}return Zz(a)} +function Oad(a){if(a.Db>>16!=6)return null;return kA(DMc(a),207)} +function acb(a){Lpb(a.a=b){throw x2(new q3(Ib(a,b)))}return a} +function Sb(a,b,c){if(a<0||bc){throw x2(new q3(Kb(a,b,c)))}} +function no(a){Zn();return C6(yb((sk(),rk),C6(new M6,91),a),93).a} +function zn(a){Pb(a);return go((Zn(),new Zo(Rn(Dn(a.a,new Hn)))))} +function Ur(a){return new Hbb((Wj(a,gKd),Dv(y2(y2(5,a),a/10|0))))} +function aw(a,b){return !!a&&!!a.equals?a.equals(b):yA(a)===yA(b)} +function xOc(a,b){if(b==0){return !!a.o&&a.o.f!=0}return OMc(a,b)} +function yHc(a,b){var c;c=Vpb(nA(a.a.xe(($Ac(),UAc))));zHc(a,b,c)} +function ZMc(a,b,c){var d;d=Mbd(a.d,b);d>=0?YMc(a,d,c):VMc(a,b,c)} +function uec(a,b,c){var d;d=a.d[b.o];a.d[b.o]=a.d[c.o];a.d[c.o]=d} +function Loc(a,b){var c;c=a+'';while(c.length0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function Nbd(a){return !!a.u&&Ebd(a.u.a).i!=0&&!(!!a.n&&ndd(a.n))} +function Zu(a){Gl();this.a=(bdb(),sA(a,49)?new Oeb(a):new seb(a))} +function Bzb(){this.c=new Nzb;this.a=new PDb;this.b=new tEb;YDb()} +function J$c(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} +function K$c(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} +function Rid(a,b,c,d,e,f){Qid.call(this,a,b,c,d,e);f&&(this.o=-2)} +function Tid(a,b,c,d,e,f){Sid.call(this,a,b,c,d,e);f&&(this.o=-2)} +function Vid(a,b,c,d,e,f){Uid.call(this,a,b,c,d,e);f&&(this.o=-2)} +function Xid(a,b,c,d,e,f){Wid.call(this,a,b,c,d,e);f&&(this.o=-2)} +function Zid(a,b,c,d,e,f){Yid.call(this,a,b,c,d,e);f&&(this.o=-2)} +function _id(a,b,c,d,e,f){$id.call(this,a,b,c,d,e);f&&(this.o=-2)} +function ejd(a,b,c,d,e,f){djd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function gjd(a,b,c,d,e,f){fjd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function xmd(a,b,c,d){kmd.call(this,c);this.b=a;this.c=b;this.d=d} +function Ptd(a,b){this.f=a;this.a=(Usd(),Ssd);this.c=Ssd;this.b=b} +function kud(a,b){this.g=a;this.d=(Usd(),Tsd);this.a=Tsd;this.b=b} +function HAd(a,b){!a.c&&(a.c=new pvd(a,0));bvd(a.c,(qAd(),iAd),b)} +function bSc(a,b,c,d,e,f){cSc(a,b,c,f);Pbd(a,d);Qbd(a,e);return a} +function W8(a,b){if(sA(b,38)){return Bf(a.a,kA(b,38))}return false} +function Ov(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function q$c(a){if(a.p!=1)throw x2(new P4);return U2(a.f)<<24>>24} +function z$c(a){if(a.p!=1)throw x2(new P4);return U2(a.k)<<24>>24} +function F$c(a){if(a.p!=7)throw x2(new P4);return U2(a.k)<<16>>16} +function w$c(a){if(a.p!=7)throw x2(new P4);return U2(a.f)<<16>>16} +function bkb(a){Vjb();$jb(this,U2(z2(P2(a,24),NLd)),U2(z2(a,NLd)))} +function kvb(){kvb=d3;jvb=Vs((fvb(),xz(pz(SI,1),jKd,439,0,[evb])))} +function x1b(){x1b=d3;v1b=new y1b(COd,0);w1b=new y1b('TOP_LEFT',1)} +function muc(a,b){var c;a.e=new fuc;c=Drc(b);Dbb(c,a.c);nuc(a,c,0)} +function mwc(a,b,c,d){var e;e=new twc;e.a=b;e.b=c;e.c=d;mib(a.b,e)} +function lwc(a,b,c,d){var e;e=new twc;e.a=b;e.b=c;e.c=d;mib(a.a,e)} +function xe(a,b,c){var d;d=kA(a.Hc().Vb(b),13);return !!d&&d.pc(c)} +function Ae(a,b,c){var d;d=kA(a.Hc().Vb(b),13);return !!d&&d.vc(c)} +function Ilb(a,b){var c;c=1-b;a.a[c]=Jlb(a.a[c],c);return Jlb(a,b)} +function Hib(a){Lpb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} +function kr(a){jr(a);_p(a.c);a.e=a.a=a.c;a.c=a.c.b;++a.d;return a.a} +function lr(a){jr(a);_p(a.e);a.c=a.a=a.e;a.e=a.e.d;--a.d;return a.a} +function To(a){if(!So(a)){throw x2(new djb)}a.c=a.b;return a.b.ic()} +function Qfb(a,b){if(sA(b,38)){return Bf(a.a,kA(b,38))}return false} +function Xhb(a,b){if(sA(b,38)){return Bf(a.a,kA(b,38))}return false} +function eob(a){var b;aob(a);b=new wfb;rkb(a.a,new job(b));return b} +function wpd(){var a,b,c;b=(c=(a=new xhd,a),c);tbb(spd,b);return b} +function $Sb(a){var b;b=(Flc(),Flc(),elc);a.d&&fTb(a);ol();return b} +function Wuc(a){a.j.c=tz(NE,oJd,1,0,5,1);rg(a.c);wvc(a.a);return a} +function yvc(){Suc.call(this);this.j.c=tz(NE,oJd,1,0,5,1);this.a=-1} +function ubc(a,b,c){this.b=new Gbc(this);this.c=a;this.f=b;this.d=c} +function NEb(a,b,c){!!a.d&&Abb(a.d.d,a);a.d=b;!!a.d&&sbb(a.d.d,c,a)} +function ojd(a){return !!a.a&&njd(a.a.a).i!=0&&!(!!a.b&&mkd(a.b))} +function ogc(a){Rfc();return !JEb(a)&&!(!JEb(a)&&a.c.g.c==a.d.g.c)} +function KYc(a){IYc();return D8(HYc,a)?kA(F8(HYc,a),337).Mf():null} +function fv(a){return sA(a,13)?new Lgb((sk(),kA(a,13))):gv(a.tc())} +function ktb(a,b,c){return c.f.c.length>0?ztb(a.a,b,c):ztb(a.b,b,c)} +function OUc(a,b,c){var d;d=UTc(c);I8(a.b,d,b);I8(a.c,b,c);return b} +function WTc(a,b){var c,d;c=Ly(a,b);d=null;!!c&&(d=c.Vd());return d} +function YTc(a,b){var c,d;c=Ly(a,b);d=null;!!c&&(d=c.Yd());return d} +function XTc(a,b){var c,d;c=cy(a,b);d=null;!!c&&(d=c.Yd());return d} +function ZTc(a,b){var c,d;c=Ly(a,b);d=null;!!c&&(d=$Tc(c));return d} +function aYc(a){var b;b=a.Fh(a.i);a.i>0&&T6(a.g,0,b,0,a.i);return b} +function Hl(a){var b;b=(Pb(a),new Ibb((sk(),a)));hdb(b);return Xl(b)} +function Ebd(a){if(!a.n){Jbd(a);a.n=new rdd(pY,a);Kbd(a)}return a.n} +function Yu(a,b){var c;c=new N6;a.wd(c);c.a+='..';b.xd(c);return c.a} +function s5c(a,b){r5c();var c;c=kA(F8(q5c,a),47);return !c||c.Li(b)} +function Bn(a){if(sA(a,13)){return kA(a,13).Wb()}return !a.tc().hc()} +function r4(a){if(a.ee()){return null}var b=a.n;var c=a3[b];return c} +function Gib(a){Lpb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function Oab(a,b){Npb(b);wz(a.a,a.c,b);a.c=a.c+1&a.a.length-1;Sab(a)} +function Nab(a,b){Npb(b);a.b=a.b-1&a.a.length-1;wz(a.a,a.b,b);Sab(a)} +function iyd(a){var b;b=a.pg();this.a=sA(b,64)?kA(b,64).oh():b.tc()} +function ow(a,b,c){var d;d=mw();try{return lw(a,b,c)}finally{pw(d)}} +function Qe(a,b,c,d){return sA(c,49)?new qi(a,b,c,d):new fi(a,b,c,d)} +function lmb(){gmb();return xz(pz(SG,1),jKd,278,0,[cmb,dmb,emb,fmb])} +function VBb(){OBb();return xz(pz($J,1),jKd,373,0,[KBb,NBb,LBb,MBb])} +function Mtb(){Jtb();return xz(pz(EI,1),jKd,304,0,[Gtb,Ftb,Htb,Itb])} +function Xub(){Uub();return xz(pz(NI,1),jKd,362,0,[Rub,Qub,Sub,Tub])} +function pJb(a){return Vpb(mA(nub(a,(E2b(),G1b))))&&nub(a,i2b)!=null} +function SJb(a){return Vpb(mA(nub(a,(E2b(),G1b))))&&nub(a,i2b)!=null} +function vVb(a){rVb();if(sA(a.g,153)){return kA(a.g,153)}return null} +function TVb(a,b,c){var d;d=kA(F8(a.g,c),57);tbb(a.a.c,new fGc(b,d))} +function i8b(a,b,c,d){var e;e=d[b.g][c.g];return Vpb(nA(nub(a.a,e)))} +function hk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c} +function L$c(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function YTb(a,b,c,d,e){this.c=a;this.e=b;this.d=c;this.b=d;this.a=e} +function sYb(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} +function Mlc(a,b,c,d,e){Ts.call(this,a,b);this.a=c;this.b=d;this.c=e} +function Wec(){Wec=d3;Vec=new Xec('UPPER',0);Uec=new Xec('LOWER',1)} +function foc(){_nc();return xz(pz(bS,1),jKd,360,0,[Xnc,Ync,Znc,$nc])} +function Dtc(){ztc();return xz(pz(WS,1),jKd,320,0,[ytc,wtc,xtc,vtc])} +function wBc(){tBc();return xz(pz(hU,1),jKd,226,0,[sBc,pBc,qBc,rBc])} +function GBc(){DBc();return xz(pz(iU,1),jKd,197,0,[CBc,ABc,zBc,BBc])} +function eEc(){bEc();return xz(pz(uU,1),jKd,344,0,[_Dc,aEc,$Dc,ZDc])} +function _Lc(){YLc();return xz(pz(BV,1),jKd,374,0,[XLc,ULc,VLc,WLc])} +function jFc(){gFc();return xz(pz(zU,1),jKd,288,0,[fFc,cFc,eFc,dFc])} +function nHc(){jHc();return xz(pz(WU,1),jKd,265,0,[iHc,fHc,gHc,hHc])} +function m7b(){h7b();return xz(pz(vP,1),jKd,179,0,[f7b,g7b,e7b,d7b])} +function FMc(a,b,c){return b<0?UMc(a,c):kA(c,61).aj().fj(a,a.Qg(),b)} +function Puc(a,b){var c;for(c=a.j.c.length;c=0&&a.a[c]===b[c];c--);return c<0} +function Ox(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+NKd);Hx(a,c)} +function H7(a,b){if(b==0||a.e==0){return a}return b>0?_7(a,b):c8(a,-b)} +function I7(a,b){if(b==0||a.e==0){return a}return b>0?c8(a,b):_7(a,-b)} +function Pab(a){if(a.b==a.c){return}a.a=tz(NE,oJd,1,8,5,1);a.b=0;a.c=0} +function vgb(a){Lpb(a.a0){d+=a.a[c];c-=c&-c}return d} +function KFc(a,b){var c;c=b;while(c){uyc(a,-c.i,-c.j);c=ZSc(c)}return a} +function rlb(a,b){!a.a?(a.a=new O6(a.d)):I6(a.a,a.b);F6(a.a,b);return a} +function xjb(a,b){Npb(b);while(a.a||(a.a=Cob(a.c,a)),a.a){b.ie(Kkb(a))}} +function fxb(a){return !!a.c&&!!a.d?oxb(a.c)+'->'+oxb(a.d):'e_'+bqb(a)} +function n6c(a,b,c){return kA(b==null?Xgb(a.d,null,c):nhb(a.e,b,c),261)} +function nUc(a,b,c){var d,e;d=Ly(a,c);e=null;!!d&&(e=$Tc(d));SUc(b,c,e)} +function wUc(a,b){var c;c=new Py;QTc(c,'x',b.a);QTc(c,'y',b.b);OTc(a,c)} +function BUc(a,b){var c;c=new Py;QTc(c,'x',b.a);QTc(c,'y',b.b);OTc(a,c)} +function kvd(a,b){return lvd(a,b,sA(b,62)&&(kA(kA(b,17),62).Bb&sLd)!=0)} +function Qr(a){Pb(a);return sA(a,13)?new Ibb((sk(),kA(a,13))):Rr(a.tc())} +function KDc(){FDc();return xz(pz(rU,1),jKd,69,0,[DDc,lDc,kDc,CDc,EDc])} +function nw(b){kw();return function(){return ow(b,this,arguments);var a}} +function cw(){if(Date.now){return Date.now()}return (new Date).getTime()} +function ss(a){if(!a.c.Cc()){throw x2(new djb)}a.a=true;return a.c.Ec()} +function Rb(a,b){if(a<0||a>b){throw x2(new q3(Jb(a,b,'index')))}return a} +function Cvc(a,b){if(sA(b,180)){return Z5(a.c,kA(b,180).c)}return false} +function ue(a){a.d=3;a.c=Oo(a);if(a.d!=2){a.d=0;return true}return false} +function hcb(a,b){var c,d;c=(d=a.slice(0,b),yz(d,a));c.length=b;return c} +function Cbb(a,b,c){var d;d=(Mpb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function q8(a,b,c,d){var e;e=tz(FA,OKd,22,b,15,1);r8(e,a,b,c,d);return e} +function aKb(a,b,c,d){this.e=a;this.b=new Gbb;this.d=b;this.a=c;this.c=d} +function slb(a,b){this.b=qJd;this.d=a;this.e=b;this.c=this.d+(''+this.e)} +function tDb(){rbb(this);this.b=new Jyc(oLd,oLd);this.a=new Jyc(pLd,pLd)} +function Usd(){Usd=d3;var a,b;Ssd=(N6c(),b=new sgd,b);Tsd=(a=new zad,a)} +function yuc(){suc();this.b=(Es(),new Bgb);this.a=new Bgb;this.c=new Gbb} +function L8(a){var b;a.d=new Zgb(a);a.e=new phb(a);b=a[BLd]|0;a[BLd]=b+1} +function Mob(a,b){return (bob(a),Qob(new Zob(a,new xob(b,a.a)))).a!=null} +function Zzb(){Wzb();return xz(pz(HJ,1),jKd,328,0,[Rzb,Szb,Tzb,Uzb,Vzb])} +function W$b(){T$b();return xz(pz(cP,1),jKd,276,0,[Q$b,S$b,O$b,R$b,P$b])} +function N2b(){K2b();return xz(pz(qP,1),jKd,178,0,[J2b,F2b,G2b,H2b,I2b])} +function A7b(){u7b();return xz(pz(wP,1),jKd,292,0,[t7b,q7b,r7b,p7b,s7b])} +function MCc(){JCc();return xz(pz(oU,1),jKd,225,0,[GCc,ICc,ECc,FCc,HCc])} +function Jxc(){Gxc();return xz(pz(UT,1),jKd,163,0,[Exc,Dxc,Bxc,Fxc,Cxc])} +function mBc(){gBc();return xz(pz(gU,1),jKd,110,0,[eBc,dBc,cBc,bBc,fBc])} +function w6c(a,b){var c;return c=b!=null?G8(a,b):Of(Wgb(a.d,null)),AA(c)} +function H6c(a,b){var c;return c=b!=null?G8(a,b):Of(Wgb(a.d,null)),AA(c)} +function gwc(a,b){var c;c=kA(Fhb(a.d,b),27);return c?c:kA(Fhb(a.e,b),27)} +function Xqc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c} +function Jbd(a){if(!a.t){a.t=new Fdd(a);eXc(new dsd(a),0,a.t)}return a.t} +function Vkd(a){var b;if(!a.c){b=a.r;sA(b,96)&&(a.c=kA(b,24))}return a.c} +function Rod(a,b){if(D8(a.a,b)){K8(a.a,b);return true}else{return false}} +function JEb(a){if(!a.c||!a.d){return false}return !!a.c.g&&a.c.g==a.d.g} +function tk(a){Wj(a,'size');return U2(H2(J2(a,8),UJd)?J2(a,8):UJd),new N6} +function wn(a,b){return hl((Gl(),new Zu(Ql(xz(pz(NE,1),oJd,1,5,[a,b])))))} +function pw(a){a&&ww((uw(),tw));--hw;if(a){if(jw!=-1){rw(jw);jw=-1}}} +function Ne(a,b){var c,d;c=kA(Ks(a.c,b),13);if(c){d=c._b();c.Pb();a.d-=d}} +function mo(a){Zn();var b;b=0;while(a.hc()){a.ic();b=y2(b,1)}return Dv(b)} +function Az(a){var b,c,d;b=a&cLd;c=a>>22&cLd;d=a<0?dLd:0;return Cz(b,c,d)} +function kab(a,b){var c,d;c=b.kc();d=vlb(a,c);return !!d&&ejb(d.e,b.lc())} +function vfb(a){var b;b=a.e+a.f;if(isNaN(b)&&D4(a.d)){return a.d}return b} +function e1c(a){this.b=a;a0c.call(this,a);this.a=kA(VNc(this.b.a,4),116)} +function n1c(a){this.b=a;v0c.call(this,a);this.a=kA(VNc(this.b.a,4),116)} +function Pid(a,b,c,d,e){N$c.call(this,b,d,e);Iid(this);this.c=a;this.b=c} +function Uid(a,b,c,d,e){J$c.call(this,b,d,e);Iid(this);this.c=a;this.a=c} +function Yid(a,b,c,d,e){K$c.call(this,b,d,e);Iid(this);this.c=a;this.a=c} +function fjd(a,b,c,d,e){N$c.call(this,b,d,e);Iid(this);this.c=a;this.a=c} +function aKc(a,b){this.d=new mGb;this.a=a;this.b=b;this.e=new Kyc(b.Qe())} +function L7(a,b){y7();this.e=a;this.d=1;this.a=xz(pz(FA,1),OKd,22,15,[b])} +function K8(a,b){return wA(b)?b==null?Ygb(a.d,null):ohb(a.e,b):Ygb(a.d,b)} +function JMc(a,b,c){var d;return d=a.rg(b),d>=0?a.ug(d,c,true):TMc(a,b,c)} +function lqb(a,b,c){var d;d=(Pb(a),new Ibb((sk(),a)));jqb(new kqb(d,b,c))} +function PCb(a,b,c){var d;d=(Pb(a),new Ibb((sk(),a)));NCb(new OCb(d,b,c))} +function PUc(a,b,c){var d;d=UTc(c);Lc(a.d,d,b,false);I8(a.e,b,c);return b} +function RUc(a,b,c){var d;d=UTc(c);Lc(a.j,d,b,false);I8(a.k,b,c);return b} +function Hyd(a,b,c){var d;d=new Iyd(a.a);Ef(d,a.a.a);Xgb(d.d,b,c);a.a.a=d} +function hEb(a){var b;b=new PEb;lub(b,a);qub(b,(J6b(),p5b),null);return b} +function Sr(a){var b,c;Pb(a);b=Mr(a.length);c=new Hbb(b);cdb(c,a);return c} +function UXc(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.uh(c,b);a.th()} +function RXc(a,b){a.Eh(a.i+1);SXc(a,a.i,a.Ch(a.i,b));a.sh(a.i++,b);a.th()} +function zbb(a,b){var c;c=(Mpb(b,a.c.length),a.c[b]);Bpb(a.c,b,1);return c} +function l8(a,b,c,d){var e;e=tz(FA,OKd,22,b+1,15,1);m8(e,a,b,c,d);return e} +function ZHc(a,b,c,d){var e;for(e=0;eb.o){return -1}return 0} +function Ppb(a,b){if(a<0||a>b){throw x2(new q3('Index: '+a+', Size: '+b))}} +function Tpb(a,b,c){if(a<0||b>c||b=b){throw x2(new q3('Index: '+a+', Size: '+b))}} +function Kx(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);Hx(a,c)} +function enc(a,b,c){this.a=a;this.b=b;this.c=c;tbb(a.q,this);tbb(b.g,this)} +function Uh(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} +function Khb(a){N8.call(this,a,0);Dhb(this);this.b.b=this.b;this.b.a=this.b} +function xob(a,b){Akb.call(this,b.rd(),b.qd()&-65);Npb(a);this.a=a;this.c=b} +function gkb(a,b,c){this.d=(Npb(a),a);this.a=(c&qLd)==0?c|64|RJd:c;this.c=b} +function toc(){this.b=new yib;this.a=new yib;this.b=new yib;this.a=new yib} +function h9b(){h9b=d3;g9b=rvc(tvc(new yvc,(Wzb(),Rzb),(lPb(),GOb)),Vzb,bPb)} +function o9b(){o9b=d3;n9b=tvc(tvc(new yvc,(Wzb(),Rzb),(lPb(),sOb)),Tzb,OOb)} +function BOc(a,b){return !a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),I1c(a.o,b)} +function vQb(a,b){xEc(b,'Label management',1);AA(nub(a,(_xc(),$xc)));zEc(b)} +function aic(a,b){var c;c=a.c;if(b>0){return kA(xbb(c.a,b-1),8)}return null} +function woc(a){var b;b=a.b;if(b.b==0){return null}return kA(Fq(b,0),170).b} +function TLb(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} +function sKc(a,b){var c;if(a.A){c=kA(Cfb(a.b,b),114).n;c.d=a.A.d;c.a=a.A.a}} +function iXc(a,b,c){var d,e;if(c!=null){for(d=0;d=0,'Initial capacity must not be negative')} +function Awb(a){this.b=(Es(),new Bgb);this.c=new Bgb;this.d=new Bgb;this.a=a} +function cob(a){if(!a){this.c=null;this.b=new Gbb}else{this.c=a;this.b=null}} +function _lb(a,b){gab.call(this,a,b);this.a=tz(NG,oJd,398,2,0,1);this.b=true} +function Dud(a,b,c){return Eud(a,b,c,sA(b,62)&&(kA(kA(b,17),62).Bb&sLd)!=0)} +function Kud(a,b,c){return Lud(a,b,c,sA(b,62)&&(kA(kA(b,17),62).Bb&sLd)!=0)} +function mvd(a,b,c){return nvd(a,b,c,sA(b,62)&&(kA(kA(b,17),62).Bb&sLd)!=0)} +function YMb(a,b){return C4(Vpb(nA(nub(a,(E2b(),q2b)))),Vpb(nA(nub(b,q2b))))} +function o_b(){l_b();return xz(pz(eP,1),jKd,290,0,[k_b,j_b,i_b,g_b,f_b,h_b])} +function o0b(){k0b();return xz(pz(jP,1),jKd,241,0,[f0b,e0b,h0b,g0b,j0b,i0b])} +function A0b(){x0b();return xz(pz(kP,1),jKd,255,0,[u0b,t0b,w0b,s0b,v0b,r0b])} +function M0b(){J0b();return xz(pz(lP,1),jKd,256,0,[H0b,E0b,I0b,G0b,F0b,D0b])} +function a7b(){W6b();return xz(pz(uP,1),jKd,291,0,[U6b,S6b,Q6b,R6b,V6b,T6b])} +function $Cc(){VCc();return xz(pz(pU,1),jKd,83,0,[UCc,TCc,SCc,PCc,RCc,QCc])} +function Xoc(){Toc();return xz(pz(nS,1),jKd,308,0,[Soc,Ooc,Qoc,Poc,Roc,Noc])} +function hzc(){ezc();return xz(pz(cU,1),jKd,224,0,[$yc,bzc,czc,dzc,_yc,azc])} +function SBc(){PBc();return xz(pz(jU,1),jKd,289,0,[NBc,LBc,OBc,JBc,MBc,KBc])} +function Nqc(){Nqc=d3;Mqc=qvc(qvc(vvc(new yvc,(_nc(),Ync)),(Toc(),Soc)),Ooc)} +function suc(){suc=d3;new DWc('org.eclipse.elk.addLayoutConfig');ruc=new Auc} +function YAd(){YAd=d3;$Qc();VAd=oLd;UAd=pLd;XAd=new F4(oLd);WAd=new F4(pLd)} +function hHd(a,b,c){UGd();var d;d=gHd(a,b);c&&!!d&&jHd(a)&&(d=null);return d} +function tz(a,b,c,d,e,f){var g;g=uz(e,d);e!=10&&xz(pz(a,f),b,c,e,g);return g} +function xn(a,b,c){return hl((Gl(),new Zu(Ql(xz(pz(NE,1),oJd,1,5,[a,b,c])))))} +function dg(a,b){var c;c=b.kc();return Es(),new _m(c,Pe(a.e,c,kA(b.lc(),13)))} +function yyc(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} +function odc(a,b,c){var d;d=a.b[c.c.o][c.o];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} +function kcb(a,b,c){var d,e;e=a.length;d=c=a.i)throw x2(new t1c(b,a.i));return a.g[b]} +function Xed(a,b,c){pXc(a,c);if(c!=null&&!a.Li(c)){throw x2(new t3)}return c} +function CIc(a,b){gjb(b,'Horizontal alignment cannot be null');a.b=b;return a} +function IMc(a,b){var c;return c=a.rg(b),c>=0?a.ug(c,true,true):TMc(a,b,true)} +function wtd(a,b,c){var d,e;e=(d=Kkd(a.b,b),d);return !e?null:Wtd(qtd(a,e),c)} +function ipd(a){if(sA(a,159)){return ''+kA(a,159).a}return a==null?null:f3(a)} +function jpd(a){if(sA(a,159)){return ''+kA(a,159).a}return a==null?null:f3(a)} +function K2(a){var b;if(G2(a)){b=0-a;if(!isNaN(b)){return b}}return B2(Sz(a))} +function Zm(a){var b;a=a>2?a:2;b=Z4(a);if(a>b){b<<=1;return b>0?b:UJd}return b} +function R3(a){var b,c;b=a+128;c=(T3(),S3)[b];!c&&(c=S3[b]=new L3(a));return c} +function yz(a,b){qz(b)!=10&&xz(mb(b),b.rl,b.__elementTypeId$,qz(b),a);return a} +function F7(a,b){if(b.e==0){return x7}if(a.e==0){return x7}return u8(),v8(a,b)} +function mob(a){while(!a.a){if(!dkb(a.b,new qob(a))){return false}}return true} +function apb(a){while(!a.a){if(!Hob(a.c,new epb(a))){return false}}return true} +function oqb(a,b){if(b.a){throw x2(new Tv(_Ld))}Ggb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function Nid(a,b,c,d,e,f){L$c.call(this,b,d,e,f);Iid(this);this.c=a;this.b=c} +function bjd(a,b,c,d,e,f){L$c.call(this,b,d,e,f);Iid(this);this.c=a;this.a=c} +function T8c(a,b,c,d){this.Gi();this.a=b;this.b=a;this.c=new Pxd(this,b,c,d)} +function j7(a,b){this.e=b;this.a=m7(a);this.a<54?(this.f=T2(a)):(this.c=Z7(a))} +function jCb(a,b){if(a.a.Ld(b.d,a.b)>0){tbb(a.c,new GBb(b.c,b.d,a.d));a.b=b.d}} +function Ydc(a){a.a=tz(FA,OKd,22,a.b+1,15,1);a.c=tz(FA,OKd,22,a.b,15,1);a.d=0} +function umb(){umb=d3;tmb=Vs((gmb(),xz(pz(SG,1),jKd,278,0,[cmb,dmb,emb,fmb])))} +function o7b(){o7b=d3;n7b=Vs((h7b(),xz(pz(vP,1),jKd,179,0,[f7b,g7b,e7b,d7b])))} +function XBb(){XBb=d3;WBb=Vs((OBb(),xz(pz($J,1),jKd,373,0,[KBb,NBb,LBb,MBb])))} +function Otb(){Otb=d3;Ntb=Vs((Jtb(),xz(pz(EI,1),jKd,304,0,[Gtb,Ftb,Htb,Itb])))} +function Zub(){Zub=d3;Yub=Vs((Uub(),xz(pz(NI,1),jKd,362,0,[Rub,Qub,Sub,Tub])))} +function hoc(){hoc=d3;goc=Vs((_nc(),xz(pz(bS,1),jKd,360,0,[Xnc,Ync,Znc,$nc])))} +function Ftc(){Ftc=d3;Etc=Vs((ztc(),xz(pz(WS,1),jKd,320,0,[ytc,wtc,xtc,vtc])))} +function yBc(){yBc=d3;xBc=Vs((tBc(),xz(pz(hU,1),jKd,226,0,[sBc,pBc,qBc,rBc])))} +function IBc(){IBc=d3;HBc=Vs((DBc(),xz(pz(iU,1),jKd,197,0,[CBc,ABc,zBc,BBc])))} +function gEc(){gEc=d3;fEc=Vs((bEc(),xz(pz(uU,1),jKd,344,0,[_Dc,aEc,$Dc,ZDc])))} +function bMc(){bMc=d3;aMc=Vs((YLc(),xz(pz(BV,1),jKd,374,0,[XLc,ULc,VLc,WLc])))} +function lFc(){lFc=d3;kFc=Vs((gFc(),xz(pz(zU,1),jKd,288,0,[fFc,cFc,eFc,dFc])))} +function pHc(){pHc=d3;oHc=Vs((jHc(),xz(pz(WU,1),jKd,265,0,[iHc,fHc,gHc,hHc])))} +function pIc(){pIc=d3;nIc=new qIc(xOd,0);mIc=new qIc(COd,1);oIc=new qIc(yOd,2)} +function Vic(){Vic=d3;Uic=new Wic(wOd,0);Tic=new Wic('IMPROVE_STRAIGHTNESS',1)} +function Csc(){Csc=d3;Asc=new Esc('LEAF_NUMBER',0);Bsc=new Esc('NODE_SIZE',1)} +function gmb(){gmb=d3;cmb=new hmb('All',0);dmb=new mmb;emb=new omb;fmb=new rmb} +function njd(a){if(!a.b){a.b=new qkd(pY,a);!a.a&&(a.a=new Djd(a,a))}return a.b} +function Quc(a,b){if(b<0){throw x2(new q3(NRd+b))}Puc(a,b+1);return xbb(a.j,b)} +function te(a){var b;if(!se(a)){throw x2(new djb)}a.d=1;b=a.c;a.c=null;return b} +function k6(a){var b,c;c=a.length;b=tz(CA,yKd,22,c,15,1);_5(a,0,c,b,0);return b} +function Ar(a,b){var c;this.f=a;this.b=b;c=kA(F8(a.b,b),264);this.c=!c?null:c.b} +function dec(a,b,c){var d;d=sec(a,b,c);a.b=new _dc(d.c.length);return fec(a,d)} +function bg(a,b){var c;c=kA(Js(a.d,b),13);if(!c){return null}return Pe(a.e,b,c)} +function Ihb(a,b){var c;c=kA(K8(a.c,b),353);if(c){Uhb(c);return c.e}return null} +function wlb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function QUc(a,b,c){var d;d=UTc(c);Lc(a.g,d,b,false);Lc(a.i,b,c,false);return b} +function Acb(a,b,c,d){var e;d=($eb(),!d?Xeb:d);e=a.slice(b,c);Bcb(e,a,b,c,-b,d)} +function EMc(a,b,c,d,e){return b<0?TMc(a,c,d):kA(c,61).aj().cj(a,a.Qg(),b,d,e)} +function d6c(a,b){return b0){return jJd}if(A2(a,oKd)<0){return oKd}return U2(a)} +function Gpb(a,b){if(!a){throw x2(new O4(Wpb('Enum constant undefined: %s',b)))}} +function t6c(a){Ev(this);this.g=!a?null:Kv(a,a.Od());this.f=a;Gv(this);this.Pd()} +function Oid(a,b,c,d,e,f,g){M$c.call(this,b,d,e,f,g);Iid(this);this.c=a;this.b=c} +function nx(a,b,c){var d,e;d=10;for(e=0;e=0){a.gd(c);return true}else{return false}} +function KMc(a,b){var c;c=Mbd(a.d,b);return c>=0?HMc(a,c,true,true):TMc(a,b,true)} +function dJd(a,b){var c;c=0;while(a.e!=a.i._b()){sVc(b,$_c(a),d5(c));c!=jJd&&++c}} +function Nu(a,b){var c,d,e;e=0;for(d=a.tc();d.hc();){c=d.ic();wz(b,e++,c)}return b} +function Ny(a,b,c){var d;if(b==null){throw x2(new A5)}d=Ly(a,b);Oy(a,b,c);return d} +function Bv(a){if(a<0){throw x2(new O4('tolerance ('+a+') must be >= 0'))}return a} +function Ejb(a){var b;b=a.b.c.length==0?null:xbb(a.b,0);b!=null&&Gjb(a,0);return b} +function sqb(a,b){var c,d,e;for(d=0,e=b.length;d=a.a.c.length){tbb(a.a,new yib)}return kA(xbb(a.a,b),15)} +function Zz(a){if(Pz(a,(fA(),eA))<0){return -Lz(Sz(a))}return a.l+a.m*fLd+a.h*gLd} +function Dx(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function dXb(a,b){var c;c=zv(a.e.c,b.e.c);if(c==0){return C4(a.e.d,b.e.d)}return c} +function cy(d,a){var b=d.a[a];var c=(az(),_y)[typeof b];return c?c(b):gz(typeof b)} +function l6(a,b){return b==(Yib(),Yib(),Xib)?a.toLocaleLowerCase():a.toLowerCase()} +function qz(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function g4(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(d4(a),a.o)} +function ejc(a,b,c){var d;d=a.a.e[kA(b.a,8).o]-a.a.e[kA(c.a,8).o];return zA(y5(d))} +function Xdc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c=0&&ba||a>b){throw x2(new s3('fromIndex: 0, toIndex: '+a+OLd+b))}} +function zQb(a,b){var c,d;for(d=a.tc();d.hc();){c=kA(d.ic(),68);qub(c,(E2b(),b2b),b)}} +function jUb(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);dUb(c,d,1);tbb(b,new UUb(c,d))} +function OPb(a){var b;b=Vpb(nA(nub(a,(J6b(),f5b))));if(b<0){b=0;qub(a,f5b,b)}return b} +function hyc(a){ayc();var b,c;c=cRd;for(b=0;bc&&(c=a[b])}return c} +function Y2(){Z2();var a=X2;for(var b=0;b=a.i)throw x2(new t1c(b,a.i));return a.zh(b,a.g[b])} +function scd(a,b,c){pXc(a,c);if(!a.Nj()&&c!=null&&!a.Li(c)){throw x2(new t3)}return c} +function dXc(a,b){var c;c=a;while(ZSc(c)){c=ZSc(c);if(c==b){return true}}return false} +function mgb(a,b){if(!!b&&a.b[b.g]==b){wz(a.b,b.g,null);--a.c;return true}return false} +function wib(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} +function wbb(a,b){var c,d,e,f;Npb(b);for(d=a.c,e=0,f=d.length;e>5;e=b&31;d=z2(Q2(a.n[c][f],U2(O2(e,1))),3);return d} +function dx(a,b){while(b[0]=0){++b[0]}} +function FIc(a,b){CHc.call(this);vIc(this);this.a=a;this.c=true;this.b=b.d;this.f=b.e} +function Av(a,b){yv();Bv(nKd);return $wnd.Math.abs(a-b)<=nKd||a==b||isNaN(a)&&isNaN(b)} +function g7(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=Y7(a.f)),a.c).e} +function OEb(a){return !!a.c&&!!a.d?a.c.g+'('+a.c+')->'+a.d.g+'('+a.d+')':'e_'+bqb(a)} +function cic(a,b,c){var d,e;d=b;do{e=Vpb(a.p[d.o])+c;a.p[d.o]=e;d=a.a[d.o]}while(d!=b)} +function abc(a,b,c){var d,e,f;e=b[c];for(d=0;d=14&&b<=16)));return a} +function $n(a,b){Zn();var c;Pb(a);Pb(b);c=false;while(b.hc()){c=c|a.nc(b.ic())}return c} +function Wj(a,b){if(a<0){throw x2(new O4(b+' cannot be negative but was: '+a))}return a} +function SSb(a,b){var c,d;for(d=new ccb(a);d.ac)throw x2(new Z_c(b,c));return new z0c(a,b)} +function n9c(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Lid(a,4,c,a.s))} +function q9c(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Lid(a,5,c,a.t))} +function Wgd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Lid(a,2,c,a.d))} +function Lad(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,5,c,b))} +function ZWc(a,b){var c,d,e;c=(d=(gMc(),e=new NSc,e),!!b&&KSc(d,b),d);LSc(c,a);return c} +function cdc(){cdc=d3;_cc=new ddc('BARYCENTER',0);adc=new ddc(gOd,1);bdc=new ddc(hOd,2)} +function F_b(){F_b=d3;C_b=new G_b('ARD',0);E_b=new G_b('MSD',1);D_b=new G_b('MANUAL',2)} +function U7b(){U7b=d3;T7b=new V7b(LQd,0);R7b=new V7b('INPUT',1);S7b=new V7b('OUTPUT',2)} +function ZVb(){IVb();this.b=(Es(),new Bgb);this.f=new Bgb;this.g=new Bgb;this.e=new Bgb} +function Qid(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function Sid(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function $id(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function djd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function Wid(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function Bqb(a,b){return yv(),Bv(nKd),$wnd.Math.abs(a-b)<=nKd||a==b||isNaN(a)&&isNaN(b)} +function tsb(){qsb();return xz(pz(lI,1),jKd,228,0,[psb,ksb,lsb,jsb,nsb,osb,msb,isb,hsb])} +function BCc(){yCc();return xz(pz(nU,1),jKd,86,0,[qCc,pCc,sCc,xCc,wCc,vCc,tCc,uCc,rCc])} +function tEc(){qEc();return xz(pz(vU,1),jKd,239,0,[jEc,lEc,iEc,mEc,nEc,pEc,oEc,kEc,hEc])} +function h5(){h5=d3;g5=xz(pz(FA,1),OKd,22,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} +function tcc(){tcc=d3;scc=rvc(tvc(tvc(new yvc,(Wzb(),Tzb),(lPb(),TOb)),Uzb,IOb),Vzb,SOb)} +function kwc(){if(!bwc){bwc=new jwc;iwc(bwc,xz(pz(tT,1),oJd,154,0,[new _Ac]))}return bwc} +function eSc(a,b,c){l9c(a,b);wRc(a,c);n9c(a,0);q9c(a,1);p9c(a,true);o9c(a,true);return a} +function $1c(a,b){var c;if(sA(b,38)){return a.c.vc(b)}else{c=I1c(a,b);a2c(a,b);return c}} +function w2(a){var b;if(sA(a,78)){return a}b=a&&a[qKd];if(!b){b=new Xv(a);Cw(b)}return b} +function _4(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} +function _hc(a,b){var c;c=a.c;if(b=0);if(Wab(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function AEc(a,b){if(a.j>0&&a.c0&&a.e!=0&&AEc(a.g,b/a.j*a.g.d)}} +function zTc(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,1,c,a.c))} +function yTc(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,0,c,a.b))} +function aPc(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,2,c,a.k))} +function uQc(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,8,c,a.f))} +function vQc(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,7,c,a.i))} +function LSc(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,8,c,a.a))} +function F8c(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,1,c,a.d))} +function pld(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,1,c,a.c))} +function Vgd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,4,c,a.c))} +function Vad(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,2,c,a.D))} +function old(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,0,c,a.b))} +function BHd(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new FFd:new SEd;a.c=MEd(d,a.b,a.a)} +function cvd(a,b){return zyd(a.e,b)?(wyd(),K9c(b)?new tzd(b,a):new Nyd(b,a)):new Ezd(b,a)} +function E3(a,b){B3();return wA(a)?Y5(a,pA(b)):uA(a)?B4(a,nA(b)):tA(a)?C3(a,mA(b)):a.vd(b)} +function Ew(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||vKd} +function Usb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c>>31}d!=0&&(a[c]=d)} +function m7(a){var b;A2(a,0)<0&&(a=M2(a));return b=U2(P2(a,32)),64-(b!=0?$4(b):$4(U2(a))+32)} +function Qcc(a){var b,c;for(c=a.c.a.Xb().tc();c.hc();){b=kA(c.ic(),204);$bc(b,new Ndc(b.f))}} +function Rcc(a){var b,c;for(c=a.c.a.Xb().tc();c.hc();){b=kA(c.ic(),204);_bc(b,new Odc(b.e))}} +function qf(a){this.d=a;this.c=a.c.Tb().tc();this.b=null;this.a=null;this.e=(Zn(),Zn(),Yn)} +function $q(a){this.e=a;this.d=new Kgb(Gs(ze(this.e)._b()));this.c=this.e.a;this.b=this.e.c} +function _dc(a){this.b=a;this.a=tz(FA,OKd,22,a+1,15,1);this.c=tz(FA,OKd,22,a,15,1);this.d=0} +function _ic(a){a.a=null;a.e=null;a.b.c=tz(NE,oJd,1,0,5,1);a.f.c=tz(NE,oJd,1,0,5,1);a.c=null} +function WRc(a,b){var c,d;d=(c=new ald,c);d.n=b;fXc((!a.s&&(a.s=new zkd(zY,a,21,17)),a.s),d)} +function QRc(a,b){var c,d;c=(d=new zad,d);c.n=b;fXc((!a.s&&(a.s=new zkd(zY,a,21,17)),a.s),c)} +function wRc(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,1,c,a.zb))} +function iSc(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,3,c,a.xb))} +function jSc(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,2,c,a.yb))} +function ZUc(a,b,c){var d,e,f;e=WTc(b,'labels');d=new jVc(a,c);f=(oUc(d.a,d.b,e),e);return f} +function _Rc(a,b,c,d,e,f,g,h,i,j,k,l,m){gSc(a,b,c,d,e,f,g,h,i,j,k,l,m);xad(a,false);return a} +function pg(a,b){var c,d,e;Npb(b);c=false;for(e=b.tc();e.hc();){d=e.ic();c=c|a.nc(d)}return c} +function An(a){if(a){if(a.Wb()){throw x2(new djb)}return a.cd(a._b()-1)}return ho(null.tc())} +function Q7(a){Npb(a);if(a.length==0){throw x2(new I5('Zero length BigInteger'))}W7(this,a)} +function w8b(){w8b=d3;v8b=new x8b('NO',0);t8b=new x8b('GREEDY',1);u8b=new x8b('LOOK_BACK',2)} +function wbd(){wbd=d3;tbd=new qgd;vbd=xz(pz(zY,1),sVd,158,0,[]);ubd=xz(pz(tY,1),tVd,53,0,[])} +function WGb(){WGb=d3;VGb=Vs((RGb(),xz(pz(QK,1),jKd,232,0,[PGb,OGb,MGb,QGb,NGb,KGb,LGb])))} +function a1b(){Z0b();return xz(pz(mP,1),jKd,233,0,[Q0b,S0b,T0b,U0b,V0b,W0b,Y0b,P0b,R0b,X0b])} +function SBb(a,b){OBb();return a==KBb&&b==NBb||a==NBb&&b==KBb||a==MBb&&b==LBb||a==LBb&&b==MBb} +function TBb(a,b){OBb();return a==KBb&&b==LBb||a==KBb&&b==MBb||a==NBb&&b==MBb||a==NBb&&b==LBb} +function ZYb(a,b){return Vpb(nA(jjb(Xob(Tob(new Zob(null,new ekb(a.c.b,16)),new mZb(a)),b))))} +function aZb(a,b){return Vpb(nA(jjb(Xob(Tob(new Zob(null,new ekb(a.c.b,16)),new kZb(a)),b))))} +function Sad(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} +function _o(a){var b;if(sA(a,182)){b=kA(a,182);return new ap(b.a)}else{return Zn(),new xo(a)}} +function gob(a){var b;b=eob(a);if(D2(b.a,0)){return pjb(),pjb(),ojb}return pjb(),new tjb(b.b)} +function hob(a){var b;b=eob(a);if(D2(b.a,0)){return pjb(),pjb(),ojb}return pjb(),new tjb(b.c)} +function kUb(a){prb.call(this);this.b=Vpb(nA(nub(a,(J6b(),k6b))));this.a=kA(nub(a,a5b),197)} +function ouc(){this.c=new Grc(0);this.b=new Grc(fRd);this.d=new Grc(eRd);this.a=new Grc(YMd)} +function _Ec(a){this.b=(Pb(a),new Ibb((sk(),a)));this.a=new Gbb;this.d=new Gbb;this.e=new Hyc} +function fHb(){fHb=d3;cHb=new oHb;aHb=new tHb;bHb=new xHb;_Gb=new BHb;dHb=new FHb;eHb=new JHb} +function O_b(){O_b=d3;M_b=new Q_b('GREEDY',0);L_b=new Q_b('DEPTH_FIRST',1);N_b=new Q_b(vOd,2)} +function eDc(){eDc=d3;dDc=new fDc('OUTSIDE',0);cDc=new fDc('INSIDE',1);bDc=new fDc('FIXED',2)} +function Gcc(){Gcc=d3;Fcc=qvc(uvc(tvc(tvc(new yvc,(Wzb(),Tzb),(lPb(),TOb)),Uzb,IOb),Vzb),SOb)} +function wEb(a){if(a.b.c.g.j==(RGb(),MGb)){return kA(nub(a.b.c.g,(E2b(),i2b)),11)}return a.b.c} +function xEb(a){if(a.b.d.g.j==(RGb(),MGb)){return kA(nub(a.b.d.g,(E2b(),i2b)),11)}return a.b.d} +function D7(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function ev(a){var b,c,d;b=0;for(d=a.tc();d.hc();){c=d.ic();b+=c!=null?ob(c):0;b=~~b}return b} +function Tyc(a,b,c){var d,e;for(e=sib(a,0);e.b!=e.d.c;){d=kA(Gib(e),9);d.a+=b;d.b+=c}return a} +function mmc(a){var b,c,d;b=0;for(d=a.tc();d.hc();){c=nA(d.ic());b+=(Npb(c),c)}return b/a._b()} +function Bx(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+Dx(a)} +function gdb(a,b){bdb();var c,d;d=new Gbb;for(c=0;c0){this.g=this.Fh(this.i+(this.i/8|0)+1);a.zc(this.g)}} +function jKc(a,b){return yv(),Bv(gNd),$wnd.Math.abs(0-b)<=gNd||0==b||isNaN(0)&&isNaN(b)?0:a/b} +function pvd(a,b){lud.call(this,F0,a,b);this.b=this;this.a=yyd(a.mg(),Gbd(this.e.mg(),this.c))} +function nGd(a,b){var c,d;d=b.length;for(c=0;ce&&b.af&&b.b1||a.hc()){++a.a;a.g=0;b=a.i;a.hc();return b}else{throw x2(new djb)}} +function L1c(a){var b;if(a.d==null){++a.e;a.f=0;K1c(null)}else{++a.e;b=a.d;a.d=null;a.f=0;K1c(b)}} +function S8c(a,b){var c;if(sA(b,109)){kA(a.c,81).ij();c=kA(b,109);Z1c(a,c)}else{kA(a.c,81).Gc(b)}} +function Wr(a){return sA(a,193)?Hl(kA(a,193)):sA(a,160)?kA(a,160).a:sA(a,49)?new rs(a):new gs(a)} +function rcc(a,b,c){return a==(cdc(),bdc)?new kcc:Yjb(b,1)!=0?new Idc(c.length):new Gdc(c.length)} +function vMc(a,b){var c,d,e;c=a.cg();if(c!=null&&a.fg()){for(d=0,e=c.length;d=128)return false;return a<64?L2(z2(O2(1,a),c),0):L2(z2(O2(1,a-64),b),0)} +function Pkc(a){var b;b=kA(nub(a,(E2b(),V1b)),69);return a.j==(RGb(),MGb)&&(b==(FDc(),EDc)||b==kDc)} +function tn(a,b){var c;if(sA(b,13)){c=(sk(),kA(b,13));return a.oc(c)}return $n(a,kA(Pb(b),20).tc())} +function Djc(a){yjc();var b;if(!Bfb(xjc,a)){b=new Ajc;b.a=a;Efb(xjc,a,b)}return kA(Cfb(xjc,a),573)} +function Gs(a){Es();if(a<3){Wj(a,'expectedSize');return a+1}if(a>22);e=a.h+b.h+(d>>22);return Cz(c&cLd,d&cLd,e&dLd)} +function Yz(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return Cz(c&cLd,d&cLd,e&dLd)} +function YOc(a,b,c,d){if(c==1){return !a.n&&(a.n=new zkd(LV,a,1,7)),q_c(a.n,b,d)}return wOc(a,b,c,d)} +function Qab(a,b){if(b==null){return false}while(a.a!=a.b){if(kb(b,kbb(a))){return true}}return false} +function b9(a){if(a.a.hc()){return true}if(a.a!=a.d){return false}a.a=new ahb(a.e.d);return a.a.hc()} +function vbb(a,b){var c,d;c=b.yc();d=c.length;if(d==0){return false}Apb(a.c,a.c.length,c);return true} +function knb(a,b,c){var d,e;for(e=b.Tb().tc();e.hc();){d=kA(e.ic(),38);a.Yb(d.kc(),d.lc(),c)}return a} +function ohb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{a.a[HLd](b);--a.c;pfb(a.b)}return c} +function gwd(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(wyd(),kA(a,61).bj());this.k=yyd(b.e.mg(),a)} +function fkc(a){this.o=a;this.g=new Gbb;this.j=new yib;this.n=new yib;this.e=new Gbb;this.b=new Gbb} +function Pbc(a){this.a=tz(UP,cKd,1704,a.length,0,2);this.b=tz(XP,cKd,1705,a.length,0,2);this.c=new cp} +function Xqb(a,b){a.d==(gBc(),cBc)||a.d==fBc?kA(b.a,57).c.nc(kA(b.b,57)):kA(b.b,57).c.nc(kA(b.a,57))} +function AQb(a,b){var c,d;for(d=new ccb(a.b);d.ab){return 1}if(a==b){return 0}return isNaN(a)?isNaN(b)?0:1:-1} +function nrb(a,b){if(!a||!b||a==b){return false}return Dqb(a.d.c,b.d.c+b.d.b)&&Dqb(b.d.c,a.d.c+a.d.b)} +function N8(a,b){Fpb(a>=0,'Negative initial capacity');Fpb(b>=0,'Non-positive load factor');L8(this)} +function NRc(a){var b,c;c=(b=new Dod,b);wRc(c,'T');fXc((!a.d&&(a.d=new Bwd(AY,a,11)),a.d),c);return c} +function Yuc(a,b){var c;c=Tr(b.a._b());Sob(Yob(new Zob(null,new ekb(b,1)),a.i),new jvc(a,c));return c} +function voc(a){var b,c,d;b=new yib;for(d=sib(a.d,0);d.b!=d.d.c;){c=kA(Gib(d),170);mib(b,c.c)}return b} +function lXc(a){var b,c,d,e;b=1;for(c=0,e=a._b();c>=1);return b}} +function L4(a){var b;b=G3(a);if(b>nLd){return oLd}else if(b<-3.4028234663852886E38){return pLd}return b} +function xz(a,b,c,d,e){e.ql=a;e.rl=b;e.sl=g3;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function fub(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){Qtb(a,f,g)||Utb(a,f,g,true,false)}}} +function YXb(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;da.f;c=a.u+a.e[a.o.o]*a.d>a.f*a.s*a.d;return b||c} +function Dlb(a,b,c){var d,e;d=new _lb(b,c);e=new amb;a.b=Blb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function Xkd(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=j9c(a);sA(b,96)&&(a.c=kA(b,24))}return a.c} +function Yqb(a){var b,c;for(c=new ccb(a.a.b);c.a=0&&a[d]===b[d];d--);return d<0?0:H2(z2(a[d],yLd),z2(b[d],yLd))?-1:1} +function h6c(a){var b;if(a==null)return true;b=a.length;return b>0&&a.charCodeAt(b-1)==58&&!Q5c(a,E5c,F5c)} +function Enc(a){switch(a.g){case 1:return eRd;default:case 2:return 0;case 3:return YMd;case 4:return fRd;}} +function Xl(a){switch(a._b()){case 0:return Fl;case 1:return new mv(a.tc().ic());default:return new Zu(a);}} +function lo(a,b){Zn();var c,d;Qb(b,'predicate');for(d=0;a.hc();d++){c=a.ic();if(b.Mb(c)){return d}}return -1} +function xb(a,b,c){Pb(b);if(c.hc()){E6(b,a.Lb(c.ic()));while(c.hc()){E6(b,a.c);E6(b,a.Lb(c.ic()))}}return b} +function xt(a,b){var c;if(b===a){return true}if(sA(b,238)){c=kA(b,238);return kb(a.Hc(),c.Hc())}return false} +function A2(a,b){var c;if(G2(a)&&G2(b)){c=a-b;if(!isNaN(c)){return c}}return Pz(G2(a)?S2(a):a,G2(b)?S2(b):b)} +function Y7(a){y7();if(a<0){if(a!=-1){return new K7(-1,-a)}return s7}else return a<=10?u7[zA(a)]:new K7(1,a)} +function eHd(){UGd();var a;if(BGd)return BGd;a=YGd(gHd('M',true));a=ZGd(gHd('M',false),a);BGd=a;return BGd} +function JRc(a,b,c){var d,e;e=(d=new pjd,d);eSc(e,b,c);fXc((!a.q&&(a.q=new zkd(tY,a,11,10)),a.q),e);return e} +function Q5c(a,b,c){var d,e;for(d=0,e=a.length;d=a.b.c.length){return}Bjb(a,2*b+1);c=2*b+2;cb){throw x2(new O4(VLd+a+WLd+b))}if(a<0||b>c){throw x2(new s3(VLd+a+XLd+b+OLd+c))}} +function Ruc(a,b,c){if(b<0){throw x2(new q3(NRd+b))}if(b0){return Ykb(b-1,a.a.c.length),zbb(a.a,b-1)}else{throw x2(new zfb)}} +function wsc(a,b){var c;if(b.c.length!=0){while(Zrc(a,b)){Xrc(a,b,false)}c=Brc(b);if(a.a){a.a.If(c);wsc(a,c)}}} +function Mcc(a,b){var c,d;for(d=sib(a,0);d.b!=d.d.c;){c=kA(Gib(d),204);if(c.e.length>0){b.td(c);c.i&&Scc(c)}}} +function Syc(a,b,c){var d,e,f;d=new yib;for(f=sib(c,0);f.b!=f.d.c;){e=kA(Gib(f),9);mib(d,new Kyc(e))}Eq(a,b,d)} +function L5c(a,b){var c;c=new P5c((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function cg(a,b){var c,d;c=kA(a.d.$b(b),13);if(!c){return null}d=a.e.Oc();d.oc(c);a.e.d-=c._b();c.Pb();return d} +function a6c(a){var b,c,d,e;e=0;for(c=0,d=a.length;c1||b>=0&&a.b<3} +function _Xc(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i>>0).toString(16)}return a.toString()} +function Kad(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}Vad(a,b==null?null:(Npb(b),b));!!a.C&&a.Kj(null)} +function Yab(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;wz(a.a,b,a.a[d]);b=d}wz(a.a,a.c,null)} +function Zab(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;wz(a.a,b,a.a[d]);b=d}wz(a.a,a.b,null);a.b=a.b+1&c} +function Qc(a,b){Tb(!this.b);Tb(!this.d);Lb(M8(a.c)==0);Lb(b.d.c+b.e.c==0);Lb(true);this.b=a;this.d=this.ec(b)} +function qbc(a,b,c,d,e){if(d){rbc(a,b)}else{nbc(a,b,e);obc(a,b,c)}if(b.c.length>1){bdb();Dbb(b,a.b);Nbc(a.c,b)}} +function w8(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=y8(e,c,d,a[0])):d==1?(e[b]=y8(e,a,b,c[0])):x8(a,c,e,b,d)} +function X5c(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b=a.c.b:a.a<=a.c.b)){throw x2(new djb)}b=a.a;a.a+=a.c.c;++a.b;return d5(b)} +function Q5(a){var b,c;if(a>-129&&a<128){b=a+128;c=(S5(),R5)[b];!c&&(c=R5[b]=new K5(a));return c}return new K5(a)} +function d5(a){var b,c;if(a>-129&&a<128){b=a+128;c=(f5(),e5)[b];!c&&(c=e5[b]=new S4(a));return c}return new S4(a)} +function THc(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(sA(a,114)){if(kA(a,114).a.b==0){return 0}}return a.Pf()} +function UHc(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(sA(a,114)){if(kA(a,114).a.a==0){return 0}}return a.Qf()} +function kb(a,b){return wA(a)?Z5(a,b):uA(a)?(Npb(a),a===b):tA(a)?(Npb(a),a===b):rA(a)?a.Fb(b):vz(a)?a===b:aw(a,b)} +function ob(a){return wA(a)?hqb(a):uA(a)?zA((Npb(a),a)):tA(a)?(Npb(a),a)?1231:1237:rA(a)?a.Hb():vz(a)?bqb(a):bw(a)} +function mb(a){return wA(a)?UE:uA(a)?yE:tA(a)?tE:rA(a)?a.ql:vz(a)?a.ql:a.ql||Array.isArray(a)&&pz(ND,1)||ND} +function gyd(a){return !a?null:(a.i&1)!=0?a==u2?tE:a==FA?GE:a==EA?CE:a==DA?yE:a==GA?IE:a==t2?PE:a==BA?uE:vE:a} +function otc(){otc=d3;jtc=($Ac(),JAc);mtc=WAc;ftc=(ctc(),Tsc);gtc=Usc;htc=Wsc;itc=Ysc;ktc=Zsc;ltc=$sc;ntc=atc} +function pAb(){pAb=d3;nAb=hv(xz(pz(gU,1),jKd,110,0,[(gBc(),cBc),dBc]));oAb=hv(xz(pz(gU,1),jKd,110,0,[fBc,bBc]))} +function cMb(){cMb=d3;aMb=new dMb('MIRROR_X',0);bMb=new dMb('TRANSPOSE',1);_Lb=new dMb('MIRROR_AND_TRANSPOSE',2)} +function cCb(a){var b;b=new rCb(a);PCb(a.a,aCb,new Rcb(xz(pz(jK,1),oJd,341,0,[b])));!!b.d&&tbb(b.f,b.d);return b.f} +function Iac(a){var b,c;for(c=new ccb(a.r);c.a=48&&a<58){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function j6c(a){var b,c;if(a==null)return false;for(b=0,c=a.length;bnOd?a-c>nOd:c-a>nOd} +function y2(a,b){var c;if(G2(a)&&G2(b)){c=a+b;if(iLdd)throw x2(new Z_c(b,d));if(a.xh()&&a.pc(c)){throw x2(new O4(UTd))}a.mh(b,c)} +function Qpb(a,b,c){if(a<0||b>c){throw x2(new q3(VLd+a+XLd+b+', size: '+c))}if(a>b){throw x2(new O4(VLd+a+WLd+b))}} +function gz(a){az();throw x2(new vy("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function en(a){nl();switch(a.c){case 0:return av(),_u;case 1:return new ov(ko(new wgb(a)));default:return new dn(a);}} +function G8c(a){var b;if((a.Db&64)!=0)return aNc(a);b=new B6(aNc(a));b.a+=' (source: ';w6(b,a.d);b.a+=')';return b.a} +function qub(a,b,c){c==null?(!a.p&&(a.p=(Es(),new Bgb)),K8(a.p,b)):(!a.p&&(a.p=(Es(),new Bgb)),I8(a.p,b,c));return a} +function pub(a,b,c){return c==null?(!a.p&&(a.p=(Es(),new Bgb)),K8(a.p,b)):(!a.p&&(a.p=(Es(),new Bgb)),I8(a.p,b,c)),a} +function QXc(a,b,c){var d;a.Eh(a.i+1);d=a.Ch(b,c);b!=a.i&&T6(a.g,b,a.g,b+1,a.i-b);wz(a.g,b,d);++a.i;a.sh(b,c);a.th()} +function Yjc(a,b,c){var d,e,f;d=0;for(f=sib(a,0);f.b!=f.d.c;){e=Vpb(nA(Gib(f)));if(e>c){break}else e>=b&&++d}return d} +function ZXb(a,b){var c,d,e;c=0;for(e=AGb(a,b).tc();e.hc();){d=kA(e.ic(),11);c+=nub(d,(E2b(),p2b))!=null?1:0}return c} +function rwc(a){var b;b=kA(Fhb(a.c.c,''),199);if(!b){b=new Svc(_vc($vc(new awc,''),'Other'));Ghb(a.c.c,'',b)}return b} +function alc(a){this.a=new iib;this.d=new iib;this.b=new iib;this.c=new iib;this.g=new iib;this.i=new iib;this.f=a} +function gBc(){gBc=d3;eBc=new kBc(LQd,0);dBc=new kBc(yOd,1);cBc=new kBc(xOd,2);bBc=new kBc(WQd,3);fBc=new kBc('UP',4)} +function jCc(){jCc=d3;hCc=new kCc('INHERIT',0);gCc=new kCc('INCLUDE_CHILDREN',1);iCc=new kCc('SEPARATE_CHILDREN',2)} +function nkd(a,b,c){var d,e;d=new Oid(a.e,3,13,null,(e=b.c,e?e:(j7c(),Z6c)),pcd(a,b),false);!c?(c=d):c.Sh(d);return c} +function okd(a,b,c){var d,e;d=new Oid(a.e,4,13,(e=b.c,e?e:(j7c(),Z6c)),null,pcd(a,b),false);!c?(c=d):c.Sh(d);return c} +function PRc(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new Mid(a,1,4,e,b);!c?(c=d):c.Sh(d)}return c} +function m9c(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new Mid(a,1,8,e,a.r);!c?(c=d):c.Sh(d)}return c} +function ptd(a,b){var c,d;c=kA(b,614);d=c.Hj();!d&&c.Ij(d=sA(b,96)?new Dtd(a,kA(b,24)):new Ptd(a,kA(b,140)));return d} +function B7(a,b){var c;if(a===b){return true}if(sA(b,89)){c=kA(b,89);return a.e==c.e&&a.d==c.d&&C7(a,c.a)}return false} +function BMc(a,b){var c;c=Hbd(a,b);if(sA(c,335)){return kA(c,29)}throw x2(new O4(ZSd+b+"' is not a valid attribute"))} +function Xob(a,b){var c;c=new rpb;if(!a.a.sd(c)){aob(a);return ijb(),ijb(),hjb}return ijb(),new kjb(Npb(Wob(a,c.a,b)))} +function IMb(a,b){var c;if(a.c.length==0){return}c=kA(Fbb(a,tz(RK,VNd,8,a.c.length,0,1)),123);Ecb(c,new UMb);FMb(c,b)} +function OMb(a,b){var c;if(a.c.length==0){return}c=kA(Fbb(a,tz(RK,VNd,8,a.c.length,0,1)),123);Ecb(c,new ZMb);FMb(c,b)} +function aec(a,b){switch(b.g){case 2:case 1:return AGb(a,b);case 3:case 4:return Wr(AGb(a,b));}return bdb(),bdb(),$cb} +function WOc(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new zkd(LV,a,1,7)),a.n;case 2:return a.k;}return vOc(a,b,c,d)} +function zcb(a,b,c,d,e,f,g,h){var i;i=c;while(f=d||b=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function T4(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function o9c(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Pid(a,1,2,c,b))} +function Pbd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Pid(a,1,8,c,b))} +function rgd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Pid(a,1,8,c,b))} +function Qbd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Pid(a,1,9,c,b))} +function p9c(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Pid(a,1,3,c,b))} +function pzd(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Vi();a.b=!c?Mbd(a.c.mg(),a.a):a.c.qg(a.a.pi(),c)}return a.c.hg(a.b,b)} +function rhd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new Mid(a,1,5,e,a.a);!c?(c=d):n$c(c,d)}return c} +function gUc(a,b){var c;c=qc(a.i,b);if(c==null){throw x2(new aUc('Node did not exist in input.'))}VUc(b,c);return null} +function hUc(a,b){var c;c=F8(a.k,b);if(c==null){throw x2(new aUc('Port did not exist in input.'))}VUc(b,c);return null} +function bob(a){if(a.c){bob(a.c)}else if(a.d){throw x2(new Q4("Stream already terminated, can't be modified or used"))}} +function xYb(a){var b;if(!a.a){throw x2(new Q4('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;zYb(a,b);AYb(a,b)} +function Scc(a){var b;if(a.g){b=a.c.pf()?a.f:a.a;Ucc(b.a,a.o,true);Ucc(b.a,a.o,false);qub(a.o,(J6b(),Z5b),(VCc(),PCc))}} +function tpc(a){var b,c,d;b=kA(nub(a,(Ppc(),Jpc)),15);for(d=b.tc();d.hc();){c=kA(d.ic(),170);mib(c.b.d,c);mib(c.c.b,c)}} +function aac(a){var b,c,d;d=0;for(c=(Zn(),new Zo(Rn(Dn(a.a,new Hn))));So(c);){b=kA(To(c),14);b.c.g==b.d.g||++d}return d} +function Bfd(a,b){var c,d;for(d=new a0c(a);d.e!=d.i._b();){c=kA($_c(d),24);if(yA(b)===yA(c)){return true}}return false} +function Ajd(a,b){var c,d;for(d=new a0c(a);d.e!=d.i._b();){c=kA($_c(d),133);if(yA(b)===yA(c)){return true}}return false} +function jtd(a,b,c){var d,e,f;f=(e=Kkd(a.b,b),e);if(f){d=kA(Wtd(qtd(a,f),''),24);if(d){return std(a,d,b,c)}}return null} +function mtd(a,b,c){var d,e,f;f=(e=Kkd(a.b,b),e);if(f){d=kA(Wtd(qtd(a,f),''),24);if(d){return ttd(a,d,b,c)}}return null} +function pMb(a){var b,c;b=a.j;if(b==(RGb(),MGb)){c=kA(nub(a,(E2b(),V1b)),69);return c==(FDc(),lDc)||c==CDc}return false} +function eXb(a){var b;b=new M6;b.a+='VerticalSegment ';H6(b,a.e);b.a+=' ';I6(b,zb(new Cb(qJd),new ccb(a.k)));return b.a} +function vDb(a){var b,c,d;b=new Gbb;for(d=new ccb(a.b);d.a0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function dac(a,b,c){var d,e;for(e=a.a.Xb().tc();e.hc();){d=kA(e.ic(),8);if(sg(c,kA(xbb(b,d.o),13))){return d}}return null} +function W5c(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b=1?dBc:bBc}return c} +function Eac(a){var b,c,d;b=0;for(d=new ccb(a.c.a);d.a=64&&b<128&&(e=N2(e,O2(1,b-64)))}return e} +function QQb(a,b,c){var d,e,f;for(e=kl(b?vGb(a):zGb(a));So(e);){d=kA(To(e),14);f=b?d.c.g:d.d.g;f.j==(RGb(),NGb)&&FGb(f,c)}} +function RKc(a,b,c){var d;d=new aKc(a,b);Le(a.r,b.ef(),d);if(c&&a.t!=(eDc(),bDc)){d.c=new EIc(a.d);wbb(b.We(),new UKc(d))}} +function WWc(a,b,c){var d,e;d=(gMc(),e=new QOc,e);OOc(d,b);POc(d,c);!!a&&fXc((!a.a&&(a.a=new fdd(GV,a,5)),a.a),d);return d} +function zEc(a){if(a.i==null){throw x2(new Q4('The task has not begun yet.'))}if(!a.b){a.c0&&b.charCodeAt(0)==43?b.substr(1,b.length-1):b))} +function pBd(a){var b;return a==null?null:new P7((b=mId(a,true),b.length>0&&b.charCodeAt(0)==43?b.substr(1,b.length-1):b))} +function pGd(a){var b;b=tz(CA,yKd,22,2,15,1);a-=sLd;b[0]=(a>>10)+tLd&AKd;b[1]=(a&1023)+56320&AKd;return r6(b,0,b.length)} +function cyd(a){var b,c;for(c=dyd(Nad(I9c(a))).tc();c.hc();){b=pA(c.ic());if(MQc(a,b))return H6c((G6c(),F6c),b)}return null} +function r6(a,b,c){var d,e,f,g;f=b+c;Tpb(b,f,a.length);g='';for(e=b;eb&&d.Ld(a[f-1],a[f])>0;--f){g=a[f];wz(a,f,a[f-1]);wz(a,f-1,g)}}} +function f7(a,b){var c;a.c=b;a.a=$7(b);a.a<54&&(a.f=(c=b.d>1?N2(O2(b.a[1],32),z2(b.a[0],yLd)):z2(b.a[0],yLd),T2(J2(b.e,c))))} +function akb(){Vjb();var a,b,c;c=Ujb+++Dpb();a=zA($wnd.Math.floor(c*LLd))&NLd;b=zA(c-a*MLd);this.a=a^1502;this.b=b^KLd} +function cub(a,b,c){a.n=rz(GA,[cKd,rLd],[378,22],14,[c,zA($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} +function fUb(a,b){var c,d,e;d=uVb(b);e=Vpb(nA(s8b(d,(J6b(),k6b))));c=$wnd.Math.max(0,e/2-0.5);dUb(b,c,1);tbb(a,new WUb(b,c))} +function $jc(a,b){var c,d;c=sib(a,0);while(c.b!=c.d.c){d=Vpb(nA(Gib(c)));if(d==b){return}else if(d>b){Hib(c);break}}Eib(c,b)} +function qwc(a,b){var c,d,e,f,g;c=b.f;Ghb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;fb?1:Cv(isNaN(a),isNaN(b))} +function Xv(a){Vv();Ev(this);Gv(this);this.e=a;a!=null&&_pb(a,qKd,this);this.g=a==null?mJd:f3(a);this.a='';this.b=a;this.a=''} +function Hfb(a){var b;this.a=(b=kA(a.e&&a.e(),10),new ngb(b,kA(ypb(b,b.length),10),0));this.b=tz(NE,oJd,1,this.a.a.length,5,1)} +function Ou(a,b){var c,d;c=a._b();b.lengthc&&wz(b,c,null);return b} +function oXc(a){var b,c,d;d=new z6;d.a+='[';for(b=0,c=a._b();b>5;b=a&31;d=tz(FA,OKd,22,c+1,15,1);d[c]=1<f?b:f}return d5(b)} +function Mub(a,b){var c,d;for(d=a.e.a.Xb().tc();d.hc();){c=kA(d.ic(),247);if(fyc(b,c.d)||dyc(b,c.d)){return true}}return false} +function Zlc(a,b){var c,d,e,f;f=a.g.ed();c=0;while(f.hc()){d=Vpb(nA(f.ic()));e=d-b;if(e>_Qd){return c}else e>aRd&&++c}return c} +function Smc(a,b){var c,d,e;e=b.d.g;d=e.j;if(d==(RGb(),PGb)||d==KGb||d==LGb){return}c=kl(zGb(e));So(c)&&I8(a.k,b,kA(To(c),14))} +function iQb(a,b){var c,d;c=b==(T$b(),P$b);d=gQb(a);c&&!d||!c&&d?qub(a,(J6b(),I4b),(ezc(),czc)):qub(a,(J6b(),I4b),(ezc(),bzc))} +function DBc(){DBc=d3;CBc=new EBc(LQd,0);ABc=new EBc('POLYLINE',1);zBc=new EBc('ORTHOGONAL',2);BBc=new EBc('SPLINES',3)} +function Qrc(){Qrc=d3;Prc=new Rrc('OVERLAP_REMOVAL',0);Nrc=new Rrc('COMPACTION',1);Orc=new Rrc('GRAPH_SIZE_CALCULATION',2)} +function b8b(){b8b=d3;$7b=new c8b('EQUALLY_DISTRIBUTED',0);a8b=new c8b('NORTH_STACKED',1);_7b=new c8b('NORTH_SEQUENCE',2)} +function ZVc(a){var b,c,d,e,f;f=_Vc(a);c=bJd(a.c);d=!c;if(d){e=new fy;Ny(f,'knownLayouters',e);b=new iWc(e);i5(a.c,b)}return f} +function Uud(a,b,c){var d,e;e=sA(b,62)&&(kA(kA(b,17),62).Bb&sLd)!=0?new jwd(b,a):new gwd(b,a);for(d=0;d3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function qg(a,b,c){var d,e;for(e=a.tc();e.hc();){d=e.ic();if(yA(b)===yA(d)||b!=null&&kb(b,d)){c&&e.jc();return true}}return false} +function d_c(a,b){var c,d;if(!b){return false}else{for(c=0;c0){if(b.lengtha.i&&wz(b,a.i,null);return b} +function _7(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=tz(FA,OKd,22,e,15,1);a8(d,a.a,c,b);f=new M7(a.e,e,d);A7(f);return f} +function rx(a,b){px();var c,d;c=ux((tx(),tx(),sx));d=null;b==c&&(d=kA(G8(ox,a),556));if(!d){d=new qx(a);b==c&&J8(ox,a,d)}return d} +function Mbd(a,b){var c,d,e;c=(a.i==null&&Cbd(a),a.i);d=b.pi();if(d!=-1){for(e=c.length;d=0;--d){b=c[d];for(e=0;e0&&A2(a,128)<0){b=U2(a)+128;c=(t5(),s5)[b];!c&&(c=s5[b]=new k5(a));return c}return new k5(a)} +function Z7(a){y7();if(A2(a,0)<0){if(A2(a,-1)!=0){return new N7(-1,K2(a))}return s7}else return A2(a,10)<=0?u7[U2(a)]:new N7(1,a)} +function cp(){Aj.call(this,new Khb(16));Wj(2,'expectedValuesPerKey');this.b=2;this.a=new vp(null,null,0,null);jp(this.a,this.a)} +function gFc(){gFc=d3;fFc=new hFc('SIMPLE',0);cFc=new hFc('GROUP_DEC',1);eFc=new hFc('GROUP_MIXED',2);dFc=new hFc('GROUP_INC',3)} +function SDc(){SDc=d3;PDc=new YGb(15);ODc=new GWc(($Ac(),oAc),PDc);RDc=new GWc(WAc,15);QDc=new GWc(LAc,d5(0));NDc=new GWc(Fzc,oNd)} +function Lmd(){Lmd=d3;Jmd=new Mmd;Cmd=new Pmd;Dmd=new Smd;Emd=new Vmd;Fmd=new Ymd;Gmd=new _md;Hmd=new cnd;Imd=new fnd;Kmd=new ind} +function Rdc(a){this.e=tz(FA,OKd,22,a.length,15,1);this.c=tz(u2,$Md,22,a.length,16,1);this.b=tz(u2,$Md,22,a.length,16,1);this.f=0} +function hub(a,b){this.n=rz(GA,[cKd,rLd],[378,22],14,[b,zA($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} +function hIc(a,b,c){XHc();SHc.call(this);this.a=rz($U,[cKd,fOd],[537,171],0,[WHc,VHc],2);this.c=new oyc;this.g=a;this.f=b;this.d=c} +function p_c(a,b,c){var d,e,f;if(a.ti()){d=a.i;f=a.ui();QXc(a,d,b);e=a.mi(3,null,b,d,f);!c?(c=e):c.Sh(e)}else{QXc(a,a.i,b)}return c} +function S1c(a,b){var c,d,e;if(a.f>0){a.Fi();d=b==null?0:ob(b);e=(d&jJd)%a.d.length;c=O1c(a,e,d,b);if(c){return c.lc()}}return null} +function I1c(a,b){var c,d,e;if(a.f>0){a.Fi();d=b==null?0:ob(b);e=(d&jJd)%a.d.length;c=P1c(a,e,d,b);return c!=-1}else{return false}} +function Qud(a,b){var c,d,e,f;f=yyd(a.e.mg(),b);c=kA(a.g,124);for(e=0;e2000){iw=a;jw=$wnd.setTimeout(sw,10)}}if(hw++==0){vw((uw(),tw));return true}return false} +function Gw(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function z7(a,b){if(a.e>b.e){return 1}if(a.eb.d){return a.e}if(a.d=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function ylb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ld(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function LXb(a,b,c,d){var e,f,g;e=false;if(dYb(a.f,c,d)){gYb(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function Ylc(a,b){var c,d,e;e=a.g.ed();while(e.hc()){c=Vpb(nA(e.ic()));d=$wnd.Math.abs(c-b);if(d<_Qd){return e.Dc()-1}}return a.g._b()} +function Hqc(a,b){var c,d,e,f;f=b.b.b;a.a=new yib;a.b=tz(FA,OKd,22,f,15,1);c=0;for(e=sib(b.b,0);e.b!=e.d.c;){d=kA(Gib(e),76);d.g=c++}} +function j8b(a,b,c){var d,e,f,g,h;g=a.j;h=b.j;d=c[g.g][h.g];e=nA(s8b(a,d));f=nA(s8b(b,d));return $wnd.Math.max((Npb(e),e),(Npb(f),f))} +function bEc(){bEc=d3;_Dc=new cEc('PORTS',0);aEc=new cEc('PORT_LABELS',1);$Dc=new cEc('NODE_LABELS',2);ZDc=new cEc('MINIMUM_SIZE',3)} +function Cqb(a,b){return yv(),yv(),Bv(nKd),($wnd.Math.abs(a-b)<=nKd||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Cv(isNaN(a),isNaN(b)))>0} +function Eqb(a,b){return yv(),yv(),Bv(nKd),($wnd.Math.abs(a-b)<=nKd||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Cv(isNaN(a),isNaN(b)))<0} +function Dqb(a,b){return yv(),yv(),Bv(nKd),($wnd.Math.abs(a-b)<=nKd||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Cv(isNaN(a),isNaN(b)))<=0} +function tac(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw x2(new O4('Input edge is not connected to the input port.'))} +function $5(a,b){Npb(a);if(b==null){return false}if(Z5(a,b)){return true}return a.length==b.length&&Z5(a.toLowerCase(),b.toLowerCase())} +function jBd(a){var b,c,d,e,f;if(a==null)return null;f=new Gbb;for(c=fRc(a),d=0,e=c.length;db.e){return 1}else if(a.fb.f){return 1}return ob(a)-ob(b)} +function Js(b,c){Es();Pb(b);try{return b.Vb(c)}catch(a){a=w2(a);if(sA(a,177)){return null}else if(sA(a,169)){return null}else throw x2(a)}} +function Ks(b,c){Es();Pb(b);try{return b.$b(c)}catch(a){a=w2(a);if(sA(a,177)){return null}else if(sA(a,169)){return null}else throw x2(a)}} +function O7(a){y7();if(a.length==0){this.e=0;this.d=1;this.a=xz(pz(FA,1),OKd,22,15,[0])}else{this.e=1;this.d=a.length;this.a=a;A7(this)}} +function y8(a,b,c,d){u8();var e,f;e=0;for(f=0;f=f){Yab(a,b);return -1}else{Zab(a,b);return 1}} +function XXc(a,b){var c,d,e;++a.j;d=a.g==null?0:a.g.length;if(b>d){e=a.g;c=d+(d/2|0)+4;cwLd){return c.zg()}d=c.sg();if(!!d||c==a){break}}}return d} +function atd(a,b){var c,d;c=b.Yg(a.a);if(c){d=pA(S1c((!c.b&&(c.b=new f9c((j7c(),f7c),CZ,c)),c.b),RTd));if(d!=null){return d}}return b.be()} +function btd(a,b){var c,d;c=b.Yg(a.a);if(c){d=pA(S1c((!c.b&&(c.b=new f9c((j7c(),f7c),CZ,c)),c.b),RTd));if(d!=null){return d}}return b.be()} +function CWc(a){var b;if(sA(a.a,4)){b=JYc(a.a);if(b==null){throw x2(new Q4(VRd+a.b+"'. "+RRd+(d4(cX),cX.k)+SRd))}return b}else{return a.a}} +function lBd(a){var b;if(a==null)return null;b=GEd(mId(a,true));if(b==null){throw x2(new Pzd("Invalid hexBinary value: '"+a+"'"))}return b} +function Wvb(a,b){var c,d,e;tbb(Svb,a);b.nc(a);c=kA(F8(Rvb,a),19);if(c){for(e=c.tc();e.hc();){d=kA(e.ic(),35);ybb(Svb,d,0)!=-1||Wvb(d,b)}}} +function gYb(a,b,c){var d,e;tec(a.e,b,c,(FDc(),EDc));tec(a.i,b,c,kDc);if(a.a){e=kA(nub(b,(E2b(),i2b)),11);d=kA(nub(c,i2b),11);uec(a.g,e,d)}} +function Fuc(a){var b;if(yA(AOc(a,($Ac(),Vzc)))===yA((jCc(),hCc))){if(!ZSc(a)){COc(a,Vzc,iCc)}else{b=kA(AOc(ZSc(a),Vzc),316);COc(a,Vzc,b)}}} +function lAb(a,b,c){this.c=a;this.f=new Gbb;this.e=new Hyc;this.j=new kBb;this.n=new kBb;this.b=b;this.g=new pyc(b.c,b.d,b.b,b.a);this.a=c} +function fmc(a,b,c,d,e,f){Tlc(this);this.e=a;this.f=b;this.d=c;this.c=d;this.g=e;this.b=f;this.j=Vpb(nA(e.tc().ic()));this.i=Vpb(nA(An(e)))} +function aQb(a){var b;b=kA(To(kl(vGb(a))),14).c.g;while(b.j==(RGb(),OGb)){qub(b,(E2b(),c2b),(B3(),B3(),true));b=kA(To(kl(vGb(b))),14).c.g}} +function $ac(a,b,c){var d,e,f,g;f=b.i;g=c.i;if(f!=g){return f.g-g.g}else{d=a.f[b.o];e=a.f[c.o];return d==0&&e==0?0:d==0?-1:e==0?1:C4(d,e)}} +function $_c(b){var c;try{c=b.i.cd(b.e);b.Bi();b.g=b.e++;return c}catch(a){a=w2(a);if(sA(a,79)){b.Bi();throw x2(new djb)}else throw x2(a)}} +function u0c(b){var c;try{c=b.c.yh(b.e);b.Bi();b.g=b.e++;return c}catch(a){a=w2(a);if(sA(a,79)){b.Bi();throw x2(new djb)}else throw x2(a)}} +function Fq(b,c){var d;d=b.fd(c);try{return d.ic()}catch(a){a=w2(a);if(sA(a,101)){throw x2(new q3("Can't get element "+c))}else throw x2(a)}} +function uk(b,c){sk();Pb(b);try{return b.pc(c)}catch(a){a=w2(a);if(sA(a,177)){return false}else if(sA(a,169)){return false}else throw x2(a)}} +function Is(b,c){Es();Pb(b);try{return b.Qb(c)}catch(a){a=w2(a);if(sA(a,177)){return false}else if(sA(a,169)){return false}else throw x2(a)}} +function nDb(a,b,c){return new pyc($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function _Yb(a,b){var c,d,e,f;c=0;for(e=new ccb(b.a);e.a0),b.a.cd(b.c=--b.b))} +function Gxc(){Gxc=d3;Exc=new Hxc('PARENTS',0);Dxc=new Hxc('NODES',1);Bxc=new Hxc('EDGES',2);Fxc=new Hxc('PORTS',3);Cxc=new Hxc('LABELS',4)} +function JCc(){JCc=d3;GCc=new KCc('DISTRIBUTED',0);ICc=new KCc('JUSTIFIED',1);ECc=new KCc('BEGIN',2);FCc=new KCc(COd,3);HCc=new KCc('END',4)} +function QIc(a,b,c){SHc.call(this);this.a=tz($U,fOd,171,(KHc(),xz(pz(_U,1),jKd,203,0,[HHc,IHc,JHc])).length,0,1);this.b=a;this.d=b;this.c=c} +function csd(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,sA(d,92)?kA(d,92).cg():null);if(mcb(b,c)){XNc(a.a,4,c);return}}XNc(a.a,4,kA(b,116))} +function ewc(a,b){var c,d;if(b!=null&&m6(b).length!=0){c=dwc(a,b);if(c){return c}}if(YPd.length!=0){d=dwc(a,YPd);if(d){return d}}return null} +function HYb(a){var b,c;if(a.j==(RGb(),OGb)){for(c=kl(tGb(a));So(c);){b=kA(To(c),14);if(!JEb(b)&&a.c==GEb(b,a).c){return true}}}return false} +function Lrb(){Lrb=d3;Krb=new Mrb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);Jrb=new Mrb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} +function YJc(){SJc();return xz(pz(nV,1),jKd,147,0,[PJc,OJc,QJc,GJc,FJc,HJc,KJc,JJc,IJc,NJc,MJc,LJc,DJc,CJc,EJc,AJc,zJc,BJc,xJc,wJc,yJc,RJc])} +function YKc(a,b){var c;c=!a.v.pc((bEc(),aEc))||a.q==(VCc(),QCc);switch(a.t.g){case 1:c?WKc(a,b):$Kc(a,b);break;case 0:c?XKc(a,b):_Kc(a,b);}} +function Vw(a,b,c){var d;d=c.q.getFullYear()-NKd+NKd;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:nx(a,d%100,2);break;default:nx(a,d,b);}} +function Bdd(a){var b;b=a.Mh(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function mDb(a){switch(a.g){case 1:return gBc(),fBc;case 4:return gBc(),cBc;case 2:return gBc(),dBc;case 3:return gBc(),bBc;}return gBc(),eBc} +function pkd(a,b,c,d){var e,f,g;e=new Oid(a.e,1,13,(g=b.c,g?g:(j7c(),Z6c)),(f=c.c,f?f:(j7c(),Z6c)),pcd(a,b),false);!d?(d=e):d.Sh(e);return d} +function sib(a,b){var c,d;Ppb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c=0?a.Fg(e):UMc(a,d)):c<0?UMc(a,d):kA(d,61).aj().fj(a,a.Qg(),c)} +function zOc(a){var b,c,d;d=(!a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),a.o);for(c=d.c.tc();c.e!=c.i._b();){b=kA(c.Ci(),38);b.lc()}return X1c(d)} +function yJb(a){var b,c,d,e;d=tz(IA,oJd,144,a.c.length,0,1);e=0;for(c=new ccb(a);c.a0){tbb(a.b,new Fx(b.a,c));d=b.a.length;0d&&(b.a+=q6(tz(CA,yKd,22,-d,15,1)))}} +function kCb(a){iCb();this.c=new Gbb;this.d=a;switch(a.g){case 0:case 2:this.a=idb(hCb);this.b=oLd;break;case 3:case 1:this.a=hCb;this.b=pLd;}} +function K7(a,b){this.e=a;if(b0.5&&f<50){e=omc(d);c=$lc(d,e,true);b=$wnd.Math.abs(c.b);++f}return $lc(a,e,false)} +function jmc(a){var b,c,d,e,f;d=gmc(a);b=oLd;f=0;e=0;while(b>0.5&&f<50){e=nmc(d);c=$lc(d,e,true);b=$wnd.Math.abs(c.a);++f}return $lc(a,e,false)} +function FEc(a,b){var c,d,e,f;f=0;for(d=sib(a,0);d.b!=d.d.c;){c=kA(Gib(d),35);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.b-1));return e} +function iLc(a,b){var c,d,e;c=a.o;for(e=kA(kA(Ke(a.r,b),19),60).tc();e.hc();){d=kA(e.ic(),111);d.e.a=cLc(d,c.a);d.e.b=c.b*Vpb(nA(d.b.xe(aLc)))}} +function MMc(a,b,c,d){var e;if(c>=0){return a.Bg(b,c,d)}else{!!a.yg()&&(d=(e=a.og(),e>=0?a.jg(d):a.yg().Cg(a,-1-e,null,d)));return a.lg(b,c,d)}} +function nXc(a,b,c){var d,e;e=a._b();if(b>=e)throw x2(new Z_c(b,e));if(a.xh()){d=a.dd(c);if(d>=0&&d!=b){throw x2(new O4(UTd))}}return a.Ah(b,c)} +function UZc(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.ti()){f=a.ui();g=eZc(a,d);e=a.mi(4,g,null,d,f);!c?(c=e):c.Sh(e)}else{eZc(a,d)}}return c} +function q_c(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.ti()){f=a.ui();g=ZXc(a,d);e=a.mi(4,g,null,d,f);!c?(c=e):c.Sh(e)}else{ZXc(a,d)}}return c} +function Sab(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=Z4(8>d?8:d)<<1;if(a.b!=0){b=ypb(a.a,c);Rab(a,b,d);a.a=b;a.b=0}else{Cpb(a.a,c)}a.c=d} +function eQb(a){var b,c;b=new Gbb;c=a;do{c=kA(To(kl(zGb(c))),14).d.g;c.j==(RGb(),OGb)&&(b.c[b.c.length]=c,true)}while(c.j==(RGb(),OGb));return b} +function wDb(a){var b,c;this.b=new Gbb;this.c=a;this.a=false;for(c=new ccb(a.a);c.a0||a==(Fk(),Ek)||b==(Uk(),Tk)){throw x2(new O4('Invalid range: '+Yu(a,b)))}} +function VKb(a){switch(a.g){case 1:return YLc(),XLc;case 3:return YLc(),ULc;case 2:return YLc(),WLc;case 4:return YLc(),VLc;default:return null;}} +function Ktc(a){switch(a.g){case 0:return null;case 1:return new ouc;case 2:return new fuc;default:throw x2(new O4(xRd+(a.f!=null?a.f:''+a.g)));}} +function EXb(a,b,c){if(a.e){switch(a.b){case 1:mXb(a.c,b,c);break;case 0:nXb(a.c,b,c);}}else{kXb(a.c,b,c)}a.a[b.o][c.o]=a.c.i;a.a[c.o][b.o]=a.c.e} +function h7b(){h7b=d3;f7b=new j7b(wOd,0);g7b=new j7b('PORT_POSITION',1);e7b=new j7b('NODE_SIZE_WHERE_SPACE_PERMITS',2);d7b=new j7b('NODE_SIZE',3)} +function Ymc(a){var b,c,d;for(c=new ccb(a.a);c.a=0?a.ug(g,c,true):TMc(a,f,c)):kA(f,61).aj().cj(a,a.Qg(),e,c,d)} +function Zsb(a,b){var c,d,e,f;f=a.o;c=a.p;f=0)return e;if(a.Rj()){for(d=0;de&&wz(b,e,null);return b} +function Qcb(a,b){var c,d,e;e=a.a.length;b.lengthe&&wz(b,e,null);return b} +function Qtb(b,c,d){try{return D2(Ttb(b,c,d),1)}catch(a){a=w2(a);if(sA(a,305)){throw x2(new q3(zMd+b.o+'*'+b.p+AMd+c+qJd+d+BMd))}else throw x2(a)}} +function Rtb(b,c,d){try{return D2(Ttb(b,c,d),0)}catch(a){a=w2(a);if(sA(a,305)){throw x2(new q3(zMd+b.o+'*'+b.p+AMd+c+qJd+d+BMd))}else throw x2(a)}} +function Stb(b,c,d){try{return D2(Ttb(b,c,d),2)}catch(a){a=w2(a);if(sA(a,305)){throw x2(new q3(zMd+b.o+'*'+b.p+AMd+c+qJd+d+BMd))}else throw x2(a)}} +function _tb(b,c,d){var e;try{return Qtb(b,c+b.j,d+b.k)}catch(a){a=w2(a);if(sA(a,79)){e=a;throw x2(new q3(e.g+CMd+c+qJd+d+').'))}else throw x2(a)}} +function aub(b,c,d){var e;try{return Rtb(b,c+b.j,d+b.k)}catch(a){a=w2(a);if(sA(a,79)){e=a;throw x2(new q3(e.g+CMd+c+qJd+d+').'))}else throw x2(a)}} +function bub(b,c,d){var e;try{return Stb(b,c+b.j,d+b.k)}catch(a){a=w2(a);if(sA(a,79)){e=a;throw x2(new q3(e.g+CMd+c+qJd+d+').'))}else throw x2(a)}} +function i0c(b,c){if(b.g==-1){throw x2(new P4)}b.Bi();try{b.d.hd(b.g,c);b.f=b.d.j}catch(a){a=w2(a);if(sA(a,79)){throw x2(new qfb)}else throw x2(a)}} +function nEb(a,b,c){xEc(c,'Compound graph preprocessor',1);a.a=new Xm;sEb(a,b,null);mEb(a,b);rEb(a);qub(b,(E2b(),O1b),a.a);a.a=null;L8(a.b);zEc(c)} +function Xjb(a,b){var c,d;Epb(b>0);if((b&-b)==b){return zA(b*Yjb(a,31)*4.6566128730773926E-10)}do{c=Yjb(a,31);d=c%b}while(c-d+(b-1)<0);return zA(d)} +function KFb(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function fQb(a){var b,c;for(c=kA(nub(a,(E2b(),t2b)),15).tc();c.hc();){b=kA(c.ic(),68);if(oub(b,(J6b(),Y4b))){return kA(nub(b,Y4b),276)}}return null} +function JZb(a,b){var c,d,e;c=p$b(new r$b,a);for(e=new ccb(b);e.a1&&(f=JZb(a,b));return f} +function v9b(a,b){var c,d,e,f;for(f=new ccb(b.a);f.a102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function Gqc(a,b){var c,d,e;a.b[b.g]=1;for(d=sib(b.d,0);d.b!=d.d.c;){c=kA(Gib(d),170);e=c.c;a.b[e.g]==1?mib(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):Gqc(a,e)}} +function NIc(a,b){var c;c=xz(pz(DA,1),vLd,22,15,[THc(a.a[0],b),THc(a.a[1],b),THc(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function OIc(a,b){var c;c=xz(pz(DA,1),vLd,22,15,[UHc(a.a[0],b),UHc(a.a[1],b),UHc(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function urb(a){var b,c,d;ulb(a.b.a);a.a=tz(WH,oJd,57,a.c.c.a.b.c.length,0,1);b=0;for(d=new ccb(a.c.c.a.b);d.ad&&a.charCodeAt(b-1)<=32){--b}return d>0||bf&&wz(b,f,null);return b} +function go(a){Zn();var b;b=_n(a);if(!So(a)){throw x2(new q3('position (0) must be less than the number of elements that remained ('+b+')'))}return To(a)} +function a5(a){var b;b=(h5(),g5);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function cZb(a){var b,c,d;d=a.f;a.k=tz(DA,vLd,22,d,15,1);a.d=tz(DA,vLd,22,d,15,1);for(b=0;b0&&(e.b+=b);return e} +function cDb(a,b){var c,d,e;e=new Hyc;for(d=a.tc();d.hc();){c=kA(d.ic(),31);SCb(c,0,e.b);e.b+=c.e.b+b;e.a=$wnd.Math.max(e.a,c.e.a)}e.a>0&&(e.a+=b);return e} +function PVb(a,b){var c,d;if(b<0||b>=a._b()){return null}for(c=b;c=a.i)throw x2(new t1c(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&T6(a.g,b+1,a.g,b,d);wz(a.g,--a.i,null);a.vh(b,c);a.th();return c} +function Mad(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Cg(a,5,uY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?a.Rg():c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function Gq(b,c){var d,e;d=b.fd(c);try{e=d.ic();d.jc();return e}catch(a){a=w2(a);if(sA(a,101)){throw x2(new q3("Can't remove element "+c))}else throw x2(a)}} +function lob(a,b){var c,d,e;e=new ekb(new Rcb(xz(pz(NH,1),oJd,1700,0,[a,b])),16);d=new oob(e);c=new Zob(null,d);$nb(c,new sob(a));$nb(c,new uob(b));return c} +function xpb(a,b,c,d,e,f){var g,h,i;if(yA(a)===yA(c)){a=a.slice(b,b+e);b=0}for(h=b,i=b+e;h>22);e+=d>>22;if(e<0){return false}a.l=c&cLd;a.m=d&cLd;a.h=e&dLd;return true} +function Alb(a,b,c,d,e,f,g){var h,i;if(b.je()&&(i=a.a.Ld(c,d),i<0||!e&&i==0)){return false}if(b.ke()&&(h=a.a.Ld(c,f),h>0||!g&&h==0)){return false}return true} +function Jtb(){Jtb=d3;Gtb=new Ktb('NORTH',0);Ftb=new Ktb('EAST',1);Htb=new Ktb('SOUTH',2);Itb=new Ktb('WEST',3);Gtb.a=false;Ftb.a=true;Htb.a=false;Itb.a=true} +function Uub(){Uub=d3;Rub=new Vub('NORTH',0);Qub=new Vub('EAST',1);Sub=new Vub('SOUTH',2);Tub=new Vub('WEST',3);Rub.a=false;Qub.a=true;Sub.a=false;Tub.a=true} +function jHc(){jHc=d3;iHc=new lHc('UNKNOWN',0);fHc=new lHc('ABOVE',1);gHc=new lHc('BELOW',2);hHc=new lHc('INLINE',3);new EWc('org.eclipse.elk.labelSide',iHc)} +function EGb(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw x2(new O4('index must be >= 0 and <= layer node count'))}!!a.c&&Abb(a.c.a,a);a.c=c;!!c&&sbb(c.a,b,a)} +function l0b(a){switch(a.g){case 0:return e0b;case 1:return f0b;case 2:return g0b;case 3:return h0b;case 4:return i0b;case 5:return j0b;default:return null;}} +function _nc(){_nc=d3;Xnc=new boc('P1_TREEIFICATION',0);Ync=new boc('P2_NODE_ORDERING',1);Znc=new boc('P3_NODE_PLACEMENT',2);$nc=new boc('P4_EDGE_ROUTING',3)} +function KRc(a,b,c){var d,e;d=(e=new Okd,l9c(e,b),wRc(e,c),fXc((!a.c&&(a.c=new zkd(vY,a,12,10)),a.c),e),e);n9c(d,0);q9c(d,1);p9c(d,true);o9c(d,true);return d} +function G9c(a,b){var c,d;if(a.Db>>16==17){return a.Cb.Cg(a,21,iY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?a.Rg():c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function _w(a,b){var c,d,e;d=new Px;e=new Qx(d.q.getFullYear()-NKd,d.q.getMonth(),d.q.getDate());c=$w(a,b,e);if(c==0||c>16==6){return a.Cb.Cg(a,6,JV,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(uMc(),mMc):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function ISc(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Cg(a,1,KV,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(uMc(),oMc):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function lTc(a,b){var c,d;if(a.Db>>16==9){return a.Cb.Cg(a,9,MV,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(uMc(),qMc):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function WPc(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Cg(a,12,MV,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(uMc(),lMc):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function B8c(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Cg(a,0,qY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(j7c(),Q6c):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function YRc(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Cg(a,6,uY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(j7c(),c7c):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function Sgd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.Cg(a,9,nY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(j7c(),W6c):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function eyd(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=kA(b,42).yg();!!d&&d!=b;d=d.yg()){if(++c>wLd){return eyd(a,d)}if(d==a){return true}}}return false} +function Xwb(a){var b,c;b=kA(nub(a,(qyb(),jyb)),21);if(b){c=b.a;c==0?qub(a,(Byb(),Ayb),new akb):qub(a,(Byb(),Ayb),new bkb(c))}else{qub(a,(Byb(),Ayb),new bkb(1))}} +function IFb(a,b){var c;c=a.g;switch(b.g){case 1:return -(a.k.b+a.n.b);case 2:return a.k.a-c.n.a;case 3:return a.k.b-c.n.b;case 4:return -(a.k.a+a.n.a);}return 0} +function W8b(a,b,c,d){var e,f,g;if(a.a[b.o]!=-1){return}a.a[b.o]=c;a.b[b.o]=d;for(f=kl(zGb(b));So(f);){e=kA(To(f),14);if(JEb(e)){continue}g=e.d.g;W8b(a,g,c+1,d)}} +function gLc(a){bLc();switch(a.q.g){case 5:dLc(a,(FDc(),lDc));dLc(a,CDc);break;case 4:eLc(a,(FDc(),lDc));eLc(a,CDc);break;default:fLc(a,(FDc(),lDc));fLc(a,CDc);}} +function kLc(a){bLc();switch(a.q.g){case 5:hLc(a,(FDc(),kDc));hLc(a,EDc);break;case 4:iLc(a,(FDc(),kDc));iLc(a,EDc);break;default:jLc(a,(FDc(),kDc));jLc(a,EDc);}} +function j9c(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.Eg()){b=kA(a.r,42);a.r=kA(XMc(a,b),133);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,9,8,b,a.r))}return a.r} +function dUb(a,b,c){var d,e;d=b*c;if(sA(a.g,153)){e=vVb(a);if(e.f.d){e.f.a||(a.d.a+=d+gNd)}else{a.d.d-=d+gNd;a.d.a+=d+gNd}}else if(sA(a.g,8)){a.d.d-=d;a.d.a+=2*d}} +function $mc(){Nmc();this.c=new Gbb;this.i=new Gbb;this.e=new iib;this.f=new iib;this.g=new iib;this.j=new Gbb;this.a=new Gbb;this.b=(Es(),new Bgb);this.k=new Bgb} +function drc(a,b){var c,d,e,f;xEc(b,'Dull edge routing',1);for(f=sib(a.b,0);f.b!=f.d.c;){e=kA(Gib(f),76);for(d=sib(e.d,0);d.b!=d.d.c;){c=kA(Gib(d),170);xib(c.a)}}} +function aIc(a,b,c){var d;d=xz(pz(DA,1),vLd,22,15,[dIc(a,(KHc(),HHc),b,c),dIc(a,IHc,b,c),dIc(a,JHc,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function vRc(){$Qc();var b,c;try{c=kA(Jkd((A6c(),z6c),lTd),1698);if(c){return c}}catch(a){a=w2(a);if(sA(a,104)){b=a;XYc((isd(),b))}else throw x2(a)}return new rRc} +function rpd(){$Qc();var b,c;try{c=kA(Jkd((A6c(),z6c),HVd),1635);if(c){return c}}catch(a){a=w2(a);if(sA(a,104)){b=a;XYc((isd(),b))}else throw x2(a)}return new npd} +function uBd(){YAd();var b,c;try{c=kA(Jkd((A6c(),z6c),kWd),1710);if(c){return c}}catch(a){a=w2(a);if(sA(a,104)){b=a;XYc((isd(),b))}else throw x2(a)}return new qBd} +function XSc(a,b){var c,d;if(a.Db>>16==11){return a.Cb.Cg(a,10,MV,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(uMc(),pMc):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function mjd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Cg(a,11,iY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(j7c(),b7c):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function Nkd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Cg(a,12,tY,b)}return d=Wkd(kA(Gbd((c=kA(VNc(a,16),24),!c?(j7c(),d7c):c),a.Db>>16),17)),a.Cb.Cg(a,d.n,d.f,b)} +function uUc(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new uId(e);for(g=(c.b-c.a)*c.c<0?(tId(),sId):new QId(c);g.hc();){f=kA(g.ic(),21);d=XTc(b,f.a);!!d&&YUc(a,d)}}} +function Epd(){upd();var a,b;ypd((P6c(),O6c));xpd(O6c);ZRc(O6c);ihd=(j7c(),Z6c);for(b=new ccb(spd);b.a>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function rrb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=C4(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function rBb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=C4(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function Wtb(a,b,c,d){var e,f,g,h;for(e=0;eg&&(h=g/d);e>f&&(i=f/e);Dyc(a,$wnd.Math.min(h,i));return a} +function khd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new Mid(a,1,4,e,b);!c?(c=d):c.Sh(d)}e!=b&&(b?(c=thd(a,phd(a,b),c)):(c=thd(a,a.a,c)));return c} +function Yx(){Px.call(this);this.e=-1;this.a=false;this.p=oKd;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=oKd} +function rbc(a,b){var c,d;for(d=new ccb(b);d.a=0){c=C2(a,hLd);d=I2(a,hLd)}else{b=Q2(a,1);c=C2(b,500000000);d=I2(b,500000000);d=y2(O2(d,1),z2(a,1))}return N2(O2(d,32),z2(c,yLd))} +function esb(){esb=d3;dsb=(qsb(),nsb);csb=new FWc(qMd,dsb);bsb=(Trb(),Srb);asb=new FWc(rMd,bsb);_rb=(Lrb(),Krb);$rb=new FWc(sMd,_rb);Zrb=new FWc(tMd,(B3(),B3(),true))} +function GEb(a,b){if(b==a.c.g){return a.d.g}else if(b==a.d.g){return a.c.g}else{throw x2(new O4("'node' must either be the source node or target node of the edge."))}} +function ofc(a,b,c){var d,e;xEc(c,'Interactive node placement',1);a.a=kA(nub(b,(E2b(),v2b)),266);for(e=new ccb(b.b);e.a0){g=(f&jJd)%a.d.length;e=O1c(a,g,f,b);if(e){h=e.mc(c);return h}}d=a.Ii(f,b,c);a.c.nc(d);return null} +function utd(a,b){var c,d,e,f;switch(ptd(a,b).lk()){case 3:case 2:{c=xbd(b);for(e=0,f=c.i;e=0;d--){if(Z5(a[d].d,b)||Z5(a[d].d,c)){a.length>=d+1&&(a.splice(0,d+1),undefined);break}}return a} +function BJb(a,b,c){this.b=new Vj;this.i=new Gbb;this.d=new DJb(this);this.g=a;this.a=b.c.length;this.c=b;this.e=kA(xbb(this.c,this.c.c.length-1),8);this.f=c;zJb(this)} +function cVc(){this.a=new _Tc;this.g=new Gm;this.j=new Gm;this.b=(Es(),new Bgb);this.d=new Gm;this.i=new Gm;this.k=new Bgb;this.c=new Bgb;this.e=new Bgb;this.f=new Bgb} +function LVb(a){var b,c,d,e,f;for(d=new e9((new X8(a.b)).a);d.b;){c=c9(d);b=kA(c.kc(),8);f=kA(kA(c.lc(),48).a,8);e=kA(kA(c.lc(),48).b,9);vyc(Cyc(b.k),vyc(xyc(f.k),e))}} +function T$b(){T$b=d3;Q$b=new U$b('MEDIAN_LAYER',0);S$b=new U$b('WIDEST_LAYER',1);O$b=new U$b('CENTER_LAYER',2);R$b=new U$b('TAIL_LAYER',3);P$b=new U$b('HEAD_LAYER',4)} +function Gac(a){var b,c,d;for(c=new ccb(a.p);c.ac);return e} +function $Oc(a,b,c){switch(b){case 1:!a.n&&(a.n=new zkd(LV,a,1,7));r_c(a.n);!a.n&&(a.n=new zkd(LV,a,1,7));gXc(a.n,kA(c,13));return;case 2:aPc(a,pA(c));return;}yOc(a,b,c)} +function mPc(a,b,c){switch(b){case 3:oPc(a,Vpb(nA(c)));return;case 4:qPc(a,Vpb(nA(c)));return;case 5:rPc(a,Vpb(nA(c)));return;case 6:sPc(a,Vpb(nA(c)));return;}$Oc(a,b,c)} +function LRc(a,b,c){var d,e,f;f=(d=new Okd,d);e=k9c(f,b,null);!!e&&e.Th();wRc(f,c);fXc((!a.c&&(a.c=new zkd(vY,a,12,10)),a.c),f);n9c(f,0);q9c(f,1);p9c(f,true);o9c(f,true)} +function Rbd(a){var b;if((a.Db&64)!=0)return Yad(a);b=new B6(Yad(a));b.a+=' (abstract: ';x6(b,(a.Bb&256)!=0);b.a+=', interface: ';x6(b,(a.Bb&512)!=0);b.a+=')';return b.a} +function Jkd(a,b){var c,d,e;c=mhb(a.e,b);if(sA(c,207)){e=kA(c,207);e.gh()==null&&undefined;return e.dh()}else if(sA(c,456)){d=kA(c,1631);e=d.b;return e}else{return null}} +function nr(a,b){var c;this.f=a;this.b=this.f.c;c=a.d;Rb(b,c);if(b>=(c/2|0)){this.e=a.e;this.d=c;while(b++0){kr(this)}}this.a=null} +function sz(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=uz(h,k);d!=10&&xz(pz(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i0&&X5(b,b.length-1)==33){try{c=R5c(j6(b,0,b.length-1));return c.e==null}catch(a){a=w2(a);if(!sA(a,30))throw x2(a)}}return false} +function Jod(a,b,c){var d,e,f,g;c=MMc(b,a.e,-1-a.c,c);g=Cod(a.a);for(f=(d=new e9((new X8(g.a)).a),new $od(d));f.a.b;){e=kA(c9(f.a).kc(),84);c=thd(e,phd(e,a.a),c)}return c} +function Kod(a,b,c){var d,e,f,g;c=NMc(b,a.e,-1-a.c,c);g=Cod(a.a);for(f=(d=new e9((new X8(g.a)).a),new $od(d));f.a.b;){e=kA(c9(f.a).kc(),84);c=thd(e,phd(e,a.a),c)}return c} +function aBd(a){var b,c,d;if(a==null)return null;c=kA(a,15);if(c.Wb())return '';d=new z6;for(b=c.tc();b.hc();){w6(d,(qAd(),pA(b.ic())));d.a+=' '}return l3(d,d.a.length-1)} +function eBd(a){var b,c,d;if(a==null)return null;c=kA(a,15);if(c.Wb())return '';d=new z6;for(b=c.tc();b.hc();){w6(d,(qAd(),pA(b.ic())));d.a+=' '}return l3(d,d.a.length-1)} +function A8(a,b){u8();var c,d;d=(y7(),t7);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=F7(d,c));c.d==1?(c=F7(c,c)):(c=new O7(C8(c.a,c.d,tz(FA,OKd,22,c.d<<1,15,1))))}d=F7(d,c);return d} +function rDb(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return a.c[a.c.length]=b,true} +function kEb(a){var b,c,d,e;e=-1;d=0;for(c=new ccb(a);c.a=0&&Z5(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return cx(a,c,d)}if(b>=0&&Z5(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return cx(a,c,d)}return cx(a,c,d)} +function Vjb(){Vjb=d3;var a,b,c,d;Sjb=tz(DA,vLd,22,25,15,1);Tjb=tz(DA,vLd,22,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){Tjb[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){Sjb[a]=c;c*=0.5}} +function owb(a,b,c){var d,e;d=(Lpb(b.b!=0),kA(wib(b,b.a.a),9));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=sib(b,0);Eib(e,d);return b} +function W6b(){W6b=d3;U6b=new Y6b(KQd,0);S6b=new Y6b('LONGEST_PATH',1);Q6b=new Y6b('COFFMAN_GRAHAM',2);R6b=new Y6b(vOd,3);V6b=new Y6b('STRETCH_WIDTH',4);T6b=new Y6b('MIN_WIDTH',5)} +function Vkc(a,b){var c,d,e,f;c=0;d=0;for(f=new ccb(b.b);f.ac;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<=a.f){break}f.c[f.c.length]=c}return f} +function Qdc(a,b,c){var d,e,f;f=0;d=c[b];if(b>4&15;f=a[d]&15;g[e++]=YQc[c];g[e++]=YQc[f]}return r6(g,0,g.length)}} +function OXc(a,b,c){var d,e,f,g,h;d=c._b();XXc(a,a.i+d);h=a.i-b;h>0&&T6(a.g,b,a.g,b+d,h);g=c.tc();a.i+=d;for(e=0;e=sLd){b=tLd+(a-sLd>>10&1023)&AKd;c=56320+(a-sLd&1023)&AKd;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&AKd)}} +function ixb(a){var b,c,d;d=a.e.c.length;a.a=rz(FA,[cKd,OKd],[37,22],15,[d,d],2);for(c=new ccb(a.c);c.a0&&pXb(this,this.c-1,(FDc(),kDc));this.c1&&(b.c[b.c.length]=f,true)}} +function zrc(a){var b,c,d;for(c=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));c.e!=c.i._b();){b=kA($_c(c),35);d=SWc(b);if(!So((Zn(),new Zo(Rn(Dn(d.a,new Hn)))))){return b}}return null} +function MFc(a,b,c){var d,e;for(e=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));e.e!=e.i._b();){d=kA($_c(e),35);pPc(d,d.i+b,d.j+c)}i5((!a.b&&(a.b=new zkd(JV,a,12,3)),a.b),new NFc(b,c))} +function dsc(a,b,c,d,e){var f,g,h;f=esc(a,b,c,d,e);h=false;while(!f){Xrc(a,e,true);h=true;f=esc(a,b,c,d,e)}h&&Xrc(a,e,false);g=Brc(e);if(g.c.length!=0){!!a.d&&a.d.If(g);dsc(a,e,c,d,g)}} +function lSc(a,b){var c;c=G8((A6c(),z6c),a);sA(c,456)?J8(z6c,a,new ykd(this,b)):J8(z6c,a,this);hSc(this,b);if(b==(N6c(),M6c)){this.wb=kA(this,1633);kA(b,1635)}else{this.wb=(P6c(),O6c)}} +function mpd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d0){c=d;d=(d-1)/2|0;if(a.a.Ld(xbb(a.b,d),b)<=0){Cbb(a.b,c,b);return true}Cbb(a.b,c,xbb(a.b,d))}Cbb(a.b,d,b);return true} +function G$b(a){var b,c,d,e;while(a.o.a.c.length!=0){c=kA(olb(a.o),48);d=kA(c.a,113);b=kA(c.b,189);e=AZb(b,d);if(b.e==d){QZb(e.g,b);d.e=e.e+b.a}else{QZb(e.b,b);d.e=e.e-b.a}tbb(a.e.a,d)}} +function dIc(a,b,c,d){var e,f;e=0;if(!c){for(f=0;fwLd){return byd(c)}d=c;if(c==a){throw x2(new Q4('There is a cycle in the containment hierarchy of '+a))}}}return d} +function tfb(){tfb=d3;rfb=xz(pz(UE,1),cKd,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);sfb=xz(pz(UE,1),cKd,2,6,['Jan','Feb','Mar','Apr',FKd,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} +function Hlb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.Ld(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.Ld(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function Wzb(){Wzb=d3;Rzb=new Xzb('P1_CYCLE_BREAKING',0);Szb=new Xzb('P2_LAYERING',1);Tzb=new Xzb('P3_NODE_ORDERING',2);Uzb=new Xzb('P4_NODE_PLACEMENT',3);Vzb=new Xzb('P5_EDGE_ROUTING',4)} +function jYb(a){var b,c;c=$wnd.Math.sqrt(a.f*(a.i==null&&(a.i=aZb(a,new gZb)),Vpb(a.i))/(a.b*(a.g==null&&(a.g=ZYb(a,new iZb)),Vpb(a.g))));b=U2(E2($wnd.Math.round(c)));b=x5(b,a.f);return b} +function Dmc(a){var b,c;ymc(this);c=a.k;b=vyc(new Jyc(c.a,c.b),a.n);this.d=$wnd.Math.min(c.b,b.b);this.a=$wnd.Math.max(c.b,b.b);this.b=$wnd.Math.min(c.a,b.a);this.c=$wnd.Math.max(c.a,b.a)} +function lm(a){var b,c;if(a.a>=a.c.c.length){return av(),_u}c=acb(a);if(a.a>=a.c.c.length){return new ov(c)}b=new iib;Ggb(b,Pb(c));do{Ggb(b,Pb(acb(a)))}while(a.a0&&bNb((Mpb(0,c.c.length),kA(c.c[0],26)),a);c.c.length>1&&bNb(kA(xbb(c,c.c.length-1),26),a);zEc(b)} +function jcc(a,b,c,d){var e,f,g,h,i;g=eec(a.a,b,c);h=kA(g.a,21).a;f=kA(g.b,21).a;if(d){i=kA(nub(b,(E2b(),p2b)),8);e=kA(nub(c,p2b),8);if(!!i&&!!e){kXb(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function msc(a,b){var c,d,e;if(Zrc(a,b)){return true}for(d=new ccb(b);d.af&&g6(j,l6(c[h],Wib))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function ax(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=a.charCodeAt(d);while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=a.charCodeAt(d)}d>b[0]?(b[0]=d):(e=-1);return e} +function zwb(a,b){var c,d,e;d=(Uub(),Rub);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(cuXb(a.d).c){a.i+=a.g.c;wXb(a.d)}else if(uXb(a.d).c>uXb(a.g).c){a.e+=a.d.c;wXb(a.g)}else{a.i+=tXb(a.g);a.e+=tXb(a.d);wXb(a.g);wXb(a.d)}}} +function J0b(){J0b=d3;H0b=new K0b(wOd,0);E0b=new K0b(xOd,1);I0b=new K0b(yOd,2);G0b=new K0b('LEFT_RIGHT_CONSTRAINT_LOCKING',3);F0b=new K0b('LEFT_RIGHT_CONNECTION_LOCKING',4);D0b=new K0b(zOd,5)} +function kmc(a){var b,c,d,e,f,g;d=hmc(gmc(a));b=oLd;f=0;e=0;while(b>0.5&&f<50){e=omc(d);c=$lc(d,e,true);b=$wnd.Math.abs(c.b);++f}g=nA(Fq(Vr(a.g),Vr(a.g).b-1));return $lc(a,(Npb(g),g)-e,false)} +function lmc(a){var b,c,d,e,f,g;d=hmc(gmc(a));b=oLd;f=0;e=0;while(b>0.5&&f<50){e=nmc(d);c=$lc(d,e,true);b=$wnd.Math.abs(c.a);++f}g=nA(Fq(Vr(a.g),Vr(a.g).b-1));return $lc(a,(Npb(g),g)-e,false)} +function vnc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(bh&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function fyc(a,b){ayc();var c,d,e,f;if(b.b<2){return false}f=sib(b,0);c=kA(Gib(f),9);d=c;while(f.b!=f.d.c){e=kA(Gib(f),9);if(eyc(a,d,e)){return true}d=e}if(eyc(a,d,c)){return true}return false} +function wOc(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),R8c(a.o,b,d)}return f=kA(Gbd((e=kA(VNc(a,16),24),!e?a.Rg():e),c),61),f.aj().ej(a,TNc(a),c-Lbd(a.Rg()),b,d)} +function eRc(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=kA(a.a,42).Cg(a,4,uY,null));!!b&&(c=kA(b,42).Ag(a,4,uY,c));c=_Qc(a,b,c);!!c&&c.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,1,b,b))} +function MSc(a){var b;if((a.Db&64)!=0)return tPc(a);b=new O6(USd);!a.a||I6(I6((b.a+=' "',b),a.a),'"');I6(D6(I6(D6(I6(D6(I6(D6((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function $Vc(a){var b,c,d,e,f,g,h,i,j;j=_Vc(a);c=a.e;f=c!=null;f&&STc(j,QTd,a.e);h=a.k;g=!!h;g&&STc(j,'type',Ss(a.k));d=bJd(a.j);e=!d;if(e){i=new fy;Ny(j,yTd,i);b=new kWc(i);i5(a.j,b)}return j} +function Fld(a,b){var c;if(b!=null&&!a.c.jj().Li(b)){c=sA(b,51)?kA(b,51).mg().zb:f4(mb(b));throw x2(new A4(ZSd+a.c.be()+"'s type '"+a.c.jj().be()+"' does not permit a value of type '"+c+"'"))}} +function Lg(a,b){var c,d,e,f;Npb(b);f=a.a._b();if(f>22-b;e=a.h<>22-b}else if(b<44){c=0;d=a.l<>44-b}else{c=0;d=0;e=a.l<>>e|c[g+d+1]<>>e;++g}return f} +function Ozb(a){Kzb();var b,c,d,e;d=kA(nub(a,(J6b(),Q4b)),318);e=Vpb(mA(nub(a,S4b)))||yA(nub(a,T4b))===yA((t_b(),r_b));b=kA(nub(a,P4b),21).a;c=a.a.c.length;return !e&&d!=(g1b(),d1b)&&(b==0||b>c)} +function aEb(a,b,c){var d,e;e=new s9(a.b,0);while(e.b=g){return ec.a._b()?kA(xbb(d,e-c.a._b()-1),8):null}}return null} +function hSc(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=kA(a.sb,42).Cg(a,1,oY,null));!!b&&(c=kA(b,42).Ag(a,1,oY,c));c=PRc(a,b,c);!!c&&c.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,4,b,b))} +function kUc(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new uId(e);for(h=(d.b-d.a)*d.c<0?(tId(),sId):new QId(d);h.hc();){g=kA(h.ic(),21);f=XTc(c,g.a);xTd in f.a||yTd in f.a?WUc(a,f,b):_Uc(a,f,b)}}} +function u_b(a){switch(a.g){case 0:return new Ycc((cdc(),_cc));case 1:return new xcc;default:throw x2(new O4('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function HEd(a){FEd();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=tz(CA,yKd,22,e,15,1);for(c=0;c>4];b[c*2+1]=EEd[f&15]}return r6(b,0,b.length)} +function lHb(){fHb();XFb.call(this);this.i=(FDc(),DDc);this.a=new Hyc;new qGb;this.e=(Wj(2,hKd),new Hbb(2));this.d=(Wj(4,hKd),new Hbb(4));this.f=(Wj(4,hKd),new Hbb(4));this.c=new bIb(this.d,this.f)} +function AKb(a,b){var c,d;if(Vpb(mA(nub(b,(E2b(),u2b))))){return false}if(a==(K2b(),F2b)){d=b.c.g;if(d.j==(RGb(),NGb)){return false}c=kA(nub(d,(J6b(),r5b)),178);if(c==G2b){return false}}return true} +function BKb(a,b){var c,d;if(Vpb(mA(nub(b,(E2b(),u2b))))){return false}if(a==(K2b(),H2b)){d=b.d.g;if(d.j==(RGb(),NGb)){return false}c=kA(nub(d,(J6b(),r5b)),178);if(c==I2b){return false}}return true} +function rXb(a,b){var c,d,e;c=sXb(b,a.e);d=kA(F8(a.g.f,c),21).a;e=a.a.c.length-1;if(a.a.c.length!=0&&kA(xbb(a.a,e),269).c==d){++kA(xbb(a.a,e),269).a;++kA(xbb(a.a,e),269).b}else{tbb(a.a,new BXb(d))}} +function wyc(a,b,c,d,e){if(dd&&(a.a=d);a.be&&(a.b=e);return a} +function dWc(a){if(sA(a,180)){return YVc(kA(a,180))}else if(sA(a,199)){return ZVc(kA(a,199))}else if(sA(a,27)){return $Vc(kA(a,27))}else{throw x2(new O4(JTd+vg(new Rcb(xz(pz(NE,1),oJd,1,5,[a])))))}} +function DGb(a,b){switch(b.g){case 1:return yn(a.i,(fHb(),bHb));case 2:return yn(a.i,(fHb(),_Gb));case 3:return yn(a.i,(fHb(),dHb));case 4:return yn(a.i,(fHb(),eHb));default:return bdb(),bdb(),$cb;}} +function r8b(a){var b;this.a=a;b=(RGb(),xz(pz(QK,1),jKd,232,0,[PGb,OGb,MGb,QGb,NGb,KGb,LGb])).length;this.b=rz(XW,[cKd,MQd],[616,166],0,[b,b],2);this.c=rz(XW,[cKd,MQd],[616,166],0,[b,b],2);q8b(this)} +function Hkc(a){var b,c;c=kA(nub(a,(E2b(),X1b)),19);b=new yvc;if(c.pc((Z0b(),V0b))||Vpb(mA(nub(a,(J6b(),g5b))))){svc(b,Bkc);c.pc(W0b)&&svc(b,Ckc)}c.pc(P0b)&&svc(b,zkc);c.pc(R0b)&&svc(b,Akc);return b} +function npc(a,b,c){var d,e,f,g;if(b.b!=0){d=new yib;for(g=sib(b,0);g.b!=g.d.c;){f=kA(Gib(g),76);pg(d,voc(f));e=f.e;e.a=kA(nub(f,(Ppc(),Npc)),21).a;e.b=kA(nub(f,Opc),21).a}npc(a,d,BEc(c,d.b/a.a|0))}} +function DFc(a){var b,c,d;d=new Vyc;mib(d,new Jyc(a.j,a.k));for(c=new a0c((!a.a&&(a.a=new fdd(GV,a,5)),a.a));c.e!=c.i._b();){b=kA($_c(c),531);mib(d,new Jyc(b.a,b.b))}mib(d,new Jyc(a.b,a.c));return d} +function MUc(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new uId(i);for(k=(f.b-f.a)*f.c<0?(tId(),sId):new QId(f);k.hc();){j=kA(k.ic(),21);h=XTc(e,j.a);g=new BVc(a,b,c,d);yUc(g.a,g.b,g.c,g.d,h)}}} +function mm(a){nl();var b,c,d;d=new iib;cdb(d,a);for(c=d.a.Xb().tc();c.hc();){b=c.ic();Pb(b)}switch(d.a._b()){case 0:return av(),_u;case 1:return new ov(d.a.Xb().tc().ic());default:return new bv(d);}} +function F$b(a,b){var c,d,e;e=jJd;for(d=new ccb(OZb(b));d.a1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function bsd(a,b,c){var d,e,f,g;f=kA(VNc(a.a,8),1629);if(f!=null){for(d=0,e=f.length;d1){throw x2(new O4('In straight spline segments there may be only one edge.'))}d=a.a.c;c=a.a.c+a.a.b;mib(kA(b.a.Xb().tc().ic(),14).a,new Jyc(d+(c-d)/2,a.b))} +function GXb(a,b,c,d){var e;this.b=d;this.e=a==(cdc(),adc);e=b[c];this.d=rz(u2,[cKd,$Md],[221,22],16,[e.length,e.length],2);this.a=rz(FA,[cKd,OKd],[37,22],15,[e.length,e.length],2);this.c=new qXb(b,c)} +function bZb(a){var b,c,d;if(a.a!=null){return}a.a=tz(u2,$Md,22,a.c.b.c.length,16,1);a.a[0]=false;d=new ccb(a.c.b);d.a>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return Cz(d&cLd,e&cLd,f&dLd)} +function Vud(a,b,c){var d,e,f,g,h;h=yyd(a.e.mg(),b);e=kA(a.g,124);d=0;for(g=0;gc){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return Vb('end index (%s) must not be less than start index (%s)',xz(pz(NE,1),oJd,1,5,[d5(b),d5(a)]))} +function Cf(a,b){var c,d,e;if(b===a){return true}if(!sA(b,109)){return false}e=kA(b,109);if(a._b()!=e._b()){return false}for(d=e.Tb().tc();d.hc();){c=kA(d.ic(),38);if(!a.Wc(c)){return false}}return true} +function zw(b,c){var d,e,f,g;for(e=0,f=b.length;e0?h[g-1]:tz(RK,VNd,8,0,0,1);e=h[g];j=g0&&i9b(a,f,c))}}b.o=0} +function Ykc(a,b){var c,d,e;for(e=new ccb(b.f);e.ab){throw x2(new O4('Top must be smaller or equal to bottom.'))}else if(0>a){throw x2(new O4('Left must be smaller or equal to right.'))}this.d=0;this.c=a;this.a=b;this.b=0} +function lsc(a,b){var c,d,e;if(b.c.length!=0){c=msc(a,b);e=false;while(!c){Xrc(a,b,true);e=true;c=msc(a,b)}e&&Xrc(a,b,false);d=Brc(b);!!a.b&&a.b.If(d);a.a=ksc(a,(Mpb(0,b.c.length),kA(b.c[0],35)));lsc(a,d)}} +function ixc(a){var b;this.c=new yib;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=kA(e4(UT),10),new ngb(b,kA(ypb(b,b.length),10),0))):(this.j=a.i);this.g=a.f} +function Uxc(){Uxc=d3;Txc=new Vxc(LQd,0);Mxc=new Vxc('BOOLEAN',1);Qxc=new Vxc('INT',2);Sxc=new Vxc('STRING',3);Nxc=new Vxc('DOUBLE',4);Oxc=new Vxc('ENUM',5);Pxc=new Vxc('ENUMSET',6);Rxc=new Vxc('OBJECT',7)} +function uyd(){uyd=d3;ryd=xz(pz(UE,1),cKd,2,6,[$Vd,_Vd,aWd,bWd,cWd,dWd,QTd]);qyd=xz(pz(UE,1),cKd,2,6,[$Vd,'empty',_Vd,wVd,'elementOnly']);tyd=xz(pz(UE,1),cKd,2,6,[$Vd,'preserve','replace',eWd]);syd=new ztd} +function Ke(a,b){var c;c=kA(a.c.Vb(b),13);!c&&(c=a.Pc(b));return sA(c,196)?new Li(a,b,kA(c,196)):sA(c,60)?new Ji(a,b,kA(c,60)):sA(c,19)?new Mi(a,b,kA(c,19)):sA(c,15)?Qe(a,b,kA(c,15),null):new Uh(a,b,c,null)} +function nub(a,b){var c,d;d=(!a.p&&(a.p=(Es(),new Bgb)),F8(a.p,b));if(d!=null){return d}c=b.Of();sA(c,4)&&(c==null?(!a.p&&(a.p=(Es(),new Bgb)),K8(a.p,b)):(!a.p&&(a.p=(Es(),new Bgb)),I8(a.p,b,c)),a);return c} +function yPb(a,b){var c,d,e,f;if(a.e.c.length==0){return null}else{f=new oyc;for(d=new ccb(a.e);d.a=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++0){yr(this)}}this.b=b;this.a=null} +function ntb(a){var b,c,d,e,f;e=kA(a.a,21).a;f=kA(a.b,21).a;b=(e<0?-e:e)>(f<0?-f:f)?e<0?-e:e:f<0?-f:f;if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new fGc(d5(c),d5(d))} +function Dgc(a,b){var c;if(a.c.length==0){return false}c=k7b((Mpb(0,a.c.length),kA(a.c[0],14)).c.g);Rfc();if(c==(h7b(),e7b)||c==d7b){return true}return Mob(Tob(new Zob(null,new ekb(a,16)),new Lgc),new Ngc(b))} +function Fnc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!c&&(d=new toc);mib(d.b,b);for(f=a.a[b.g].tc();f.hc();){e=kA(f.ic(),170);e.b!=b&&Fnc(a,e.b,d);e.c!=b&&Fnc(a,e.c,d);mib(d.a,e)}return d}return null} +function TJc(a){switch(a.g){case 0:case 1:case 2:return FDc(),lDc;case 3:case 4:case 5:return FDc(),CDc;case 6:case 7:case 8:return FDc(),EDc;case 9:case 10:case 11:return FDc(),kDc;default:return FDc(),DDc;}} +function gqb(a){var b,c,d,e;b=0;d=a.length;e=d-4;c=0;while(c0){try{f=H3(c,oKd,jJd)}catch(a){a=w2(a);if(sA(a,118)){e=a;throw x2(new t6c(e))}else throw x2(a)}}d=(!b.a&&(b.a=new Asd(b)),b.a);return f=0?kA(WXc(d,f),51):null} +function gx(a,b,c,d){var e;e=Zw(a,c,xz(pz(UE,1),cKd,2,6,[RKd,SKd,TKd,UKd,VKd,WKd,XKd]),b);e<0&&(e=Zw(a,c,xz(pz(UE,1),cKd,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function jx(a,b,c,d){var e;e=Zw(a,c,xz(pz(UE,1),cKd,2,6,[RKd,SKd,TKd,UKd,VKd,WKd,XKd]),b);e<0&&(e=Zw(a,c,xz(pz(UE,1),cKd,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function pBb(a){var b,c,d;mBb(a);d=new Gbb;for(c=new ccb(a.a.a.b);c.a>1);Bcb(b,a,i,j,-e,f);Bcb(b,a,j,h,-e,f);if(f.Ld(a[j-1],a[j])<=0){while(c=0){if(!b){b=new A6;d>0&&w6(b,a.substr(0,d))}b.a+='\\';s6(b,c&AKd)}else !!b&&s6(b,c&AKd)}return b?b.a:a} +function Kkc(a,b,c){var d,e,f,g;f=a.c;g=a.d;e=(Pyc(xz(pz(aU,1),cKd,9,0,[f.g.k,f.k,f.a])).b+Pyc(xz(pz(aU,1),cKd,9,0,[g.g.k,g.k,g.a])).b)/2;f.i==(FDc(),kDc)?(d=new Jyc(b+f.g.c.c.a+c,e)):(d=new Jyc(b-c,e));Dq(a.a,0,d)} +function vrc(a,b){var c,d;Wuc(a.a);Zuc(a.a,(lrc(),jrc),jrc);Zuc(a.a,krc,krc);d=new yvc;tvc(d,krc,(Qrc(),Prc));yA(AOc(b,(otc(),gtc)))!==yA((Msc(),Jsc))&&tvc(d,krc,Nrc);tvc(d,krc,Orc);Tuc(a.a,d);c=Uuc(a.a,b);return c} +function dz(a){if(!a){return xy(),wy}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=_y[typeof b];return c?c(b):gz(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new gy(a)}else{return new Qy(a)}} +function G7(a,b){var c;if(b<0){throw x2(new o3('Negative exponent'))}if(b==0){return t7}else if(b==1||B7(a,t7)||B7(a,x7)){return a}if(!J7(a,0)){c=1;while(!J7(a,c)){++c}return F7(U7(c*b),G7(I7(a,c),b))}return A8(a,b)} +function eUb(a,b){var c,d,e;if(sA(b.g,8)&&kA(b.g,8).j==(RGb(),MGb)){return oLd}e=vVb(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=uVb(b);if(c){d=Vpb(nA(s8b(c,(J6b(),t6b))));return $wnd.Math.max(0,d/2-0.5)}return oLd} +function gUb(a,b){var c,d,e;if(sA(b.g,8)&&kA(b.g,8).j==(RGb(),MGb)){return oLd}e=vVb(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=uVb(b);if(c){d=Vpb(nA(s8b(c,(J6b(),t6b))));return $wnd.Math.max(0,d/2-0.5)}return oLd} +function KVb(a,b){var c,d,e,f,g;if(b.Wb()){return}e=kA(b.cd(0),125);if(b._b()==1){JVb(a,e,e,1,0,b);return}c=1;while(cf.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}LIc(d);MIc(d)} +function uKc(a,b,c){var d,e,f;f=a.o;d=kA(Cfb(a.p,c),219);e=d.i;e.b=KIc(d);e.a=JIc(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}LIc(d);MIc(d)} +function Edd(a,b){Add(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} +function fyd(b){var c,d,e,f;d=kA(b,42).Kg();if(d){try{e=null;c=Kkd((A6c(),z6c),N5c(O5c(d)));if(c){f=c.Lg();!!f&&(e=f.gk(pA(Vpb(d.e))))}if(!!e&&e!=b){return fyd(e)}}catch(a){a=w2(a);if(!sA(a,54))throw x2(a)}}return b} +function Yp(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=kA(K8(a.b,b.a),264);c.a=0;++a.c}else{c=kA(F8(a.b,b.a),264);--c.a;!b.e?(c.b=b.c):(b.e.c=b.c);!b.c?(c.c=b.e):(b.c.e=b.e)}--a.d} +function l7(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=zA($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return m7(E2(a))} +function Cjb(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=xbb(a.b,b);while(b*2+10){g=a.c.d;h=a.d.d;e=Dyc(Gyc(new Jyc(h.a,h.b),g),1/(d+1));f=new Jyc(g.a,g.b);for(c=new ccb(a.a);c.a0){g+=c;++b}}b>1&&(g+=a.c*(b-1))}else{g=qjb(gob(Uob(Pob(Gcb(a.a),new ZIc),new _Ic)))}return g>0?g+a.n.d+a.n.a:0} +function KIc(a){var b,c,d,e,f,g;g=0;if(a.b==0){g=qjb(gob(Uob(Pob(Gcb(a.a),new VIc),new XIc)))}else{f=OIc(a,true);b=0;for(d=0,e=f.length;d0){g+=c;++b}}b>1&&(g+=a.c*(b-1))}return g>0?g+a.n.b+a.n.c:0} +function xx(a){var b,c;c=-a.a;b=xz(pz(CA,1),yKd,22,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&AKd;b[2]=b[2]+(c/60|0)%10&AKd;b[3]=b[3]+(c%60/10|0)&AKd;b[4]=b[4]+c%10&AKd;return r6(b,0,b.length)} +function vXb(a){var b,c,d,e,f,g;g=aec(a.d,a.e);for(f=g.tc();f.hc();){e=kA(f.ic(),11);d=a.e==(FDc(),EDc)?e.d:e.f;for(c=new ccb(d);c.a=0;f+=c?1:-1){g=g|b.c.qf(i,f,c,d);g=g|b.q.xf(i,f,c);g=g|Vcc(a,i[f],c,d)}Ggb(a.c,b);return g} +function FQb(a,b){var c,d,e,f,g,h;for(f=new ccb(a.b);f.a=0&&f0){b=kA(a.k.cd(a.n-1),75);c=b.nj();if(sA(c,62)&&(kA(kA(c,17),62).Bb&bTd)!=0&&(!a.e||c.Vi()!=FV||c.pi()!=0)&&b.lc()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function REd(a,b){var c,d,e,f;LEd(a);if(a.c!=0||a.a!=123)throw x2(new KEd(WYc((isd(),kUd))));f=b==112;d=a.d;c=a6(a.i,125,d);if(c<0)throw x2(new KEd(WYc((isd(),lUd))));e=j6(a.i,d,c);a.d=c+1;return hHd(e,f,(a.e&512)==512)} +function wx(a){var b,c;c=-a.a;b=xz(pz(CA,1),yKd,22,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&AKd;b[2]=b[2]+(c/60|0)%10&AKd;b[4]=b[4]+(c%60/10|0)&AKd;b[5]=b[5]+c%10&AKd;return r6(b,0,b.length)} +function zx(a){var b;b=xz(pz(CA,1),yKd,22,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&AKd;b[5]=b[5]+(a/60|0)%10&AKd;b[7]=b[7]+(a%60/10|0)&AKd;b[8]=b[8]+a%10&AKd;return r6(b,0,b.length)} +function oMb(a,b){var c,d,e;d=new IGb(a);lub(d,b);qub(d,(E2b(),U1b),b);qub(d,(J6b(),Z5b),(VCc(),QCc));qub(d,I4b,(ezc(),azc));GGb(d,(RGb(),MGb));c=new lHb;jHb(c,d);kHb(c,(FDc(),EDc));e=new lHb;jHb(e,d);kHb(e,kDc);return d} +function rac(a,b){var c,d,e,f,g;a.c[b.o]=true;tbb(a.a,b);for(g=new ccb(b.i);g.a0&&(e=c);for(g=new ccb(a.f.e);g.a=f){g.Pb()}else{e=g.tc();for(d=0;d0?lj():g<0&&Tt(a,b,-g);return true}else{return false}} +function Ytb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=jJd;e=oKd;h=jJd;f=oKd;for(j=0;jj?e:j;h=hk?f:k}}}i=e-g+1;d=f-h+1;return new qGc(d5(g),d5(h),d5(i),d5(d))} +function Nwb(a,b){var c,d,e;c=kA(nub(b,(qyb(),iyb)),21).a-kA(nub(a,iyb),21).a;if(c==0){d=Gyc(xyc(kA(nub(a,(Byb(),xyb)),9)),kA(nub(a,yyb),9));e=Gyc(xyc(kA(nub(b,xyb),9)),kA(nub(b,yyb),9));return C4(d.a*d.b,e.a*e.b)}return c} +function Lnc(a,b){var c,d,e;c=kA(nub(b,(fqc(),aqc)),21).a-kA(nub(a,aqc),21).a;if(c==0){d=Gyc(xyc(kA(nub(a,(Ppc(),wpc)),9)),kA(nub(a,xpc),9));e=Gyc(xyc(kA(nub(b,wpc),9)),kA(nub(b,xpc),9));return C4(d.a*d.b,e.a*e.b)}return c} +function RKb(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new GIc(b,!c);for(e=new ccb(a);e.a0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function UMc(a,b){var c,d,e;e=ftd((uyd(),syd),a.mg(),b);if(e){wyd();kA(e,61).bj()||(e=aud(rtd(syd,e)));d=(c=a.rg(e),kA(c>=0?a.ug(c,true,true):TMc(a,e,true),184));return kA(d,237).wk(b)}else{throw x2(new O4(ZSd+b.be()+aTd))}} +function SUc(a,b,c){var d,e,f,g;f=hwc(kwc(),b);d=null;if(f){g=hxc(f,c);e=null;g!=null&&(e=(g==null?(!a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),a2c(a.o,f)):(!a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),Y1c(a.o,f,g)),a));d=e}return d} +function O1c(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h1||c==-1){a.b=-1;return true}else{b=j9c(a);if(!!b&&(wyd(),b.Ri()==gVd)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function ltd(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new zkd(zY,b,21,17)),b.s);f=null;for(e=0,g=d.i;ee){return Lpb(f.a!=null),kA(f.a,8)}}return null} +function bWb(a,b){IVb();var c,d,e,f,g,h;c=null;for(g=b.tc();g.hc();){f=kA(g.ic(),125);if(f.k){continue}d=lyc(f.a);e=jyc(f.a);h=new fXb(d,e,null,kA(f.d.a.Xb().tc().ic(),14));tbb(h.c,f.a);a.c[a.c.length]=h;!!c&&tbb(c.d,h);c=h}} +function q9b(a,b,c){var d,e,f,g,h,i;d=kA(Ke(a.c,b),15);e=kA(Ke(a.c,c),15);f=d.fd(d._b());g=e.fd(e._b());while(f.Cc()&&g.Cc()){h=kA(f.Ec(),21);i=kA(g.Ec(),21);if(h!=i){return U4(h.a,i.a)}}return !f.hc()&&!g.hc()?0:f.hc()?1:-1} +function Zud(a,b,c,d,e){var f,g,h,i;i=Yud(a,kA(e,51));if(yA(i)!==yA(e)){h=kA(a.g[c],75);f=xyd(b,i);SXc(a,c,ovd(a,c,f));if(PMc(a.e)){g=Gud(a,9,f.nj(),e,i,d,false);n$c(g,new Oid(a.e,9,a.c,h,f,d,false));o$c(g)}return i}return e} +function qLc(a,b,c){var d,e,f,g;e=c;f=fob(Uob(kA(kA(Ke(a.r,b),19),60).xc(),new tLc));g=0;while(f.a||(f.a=Cob(f.c,f)),f.a){if(e){Kkb(f);e=false;continue}else{d=Kkb(f);f.a||(f.a=Cob(f.c,f));f.a&&(g=$wnd.Math.max(g,d))}}return g} +function Le(a,b,c){var d;d=kA(a.c.Vb(b),13);if(!d){d=a.Pc(b);if(d.nc(c)){++a.d;a.c.Zb(b,d);return true}else{throw x2(new y3('New Collection violated the Collection spec'))}}else if(d.nc(c)){++a.d;return true}else{return false}} +function Cac(a){var b,c,d,e,f,g;e=0;a.q=new Gbb;b=new Jgb;for(g=new ccb(a.p);g.a>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-qLd;b=d>>16&4;c+=b;a<<=b;d=a-RJd;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function Ztb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e=0&&j>=0&&i=0?a.ug(d,true,true):TMc(a,f,true),184));return kA(e,237).sk(b,c)}else{throw x2(new O4(ZSd+b.be()+aTd))}} +function lSb(a){var b,c;if(XCc(kA(nub(a,(J6b(),Z5b)),83))){for(c=new ccb(a.i);c.a>24}return g} +function L0c(a,b){var c,d,e,f,g;c=kA(VNc(a.a,4),116);g=c==null?0:c.length;if(b>=g)throw x2(new Z_c(b,g));e=c[b];if(g==1){d=null}else{d=tz(eX,PUd,380,g-1,0,1);T6(c,0,d,0,b);f=g-b-1;f>0&&T6(c,b+1,d,b,f)}csd(a,d);bsd(a,b,e);return e} +function mcb(a,b){var c,d,e;if(yA(a)===yA(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c=null.tl()){xYc(a);return vsd(a)}else{return b.hc()}} +function Cmc(a){var b,c;if(Bn(a)){throw x2(new O4(bRd))}for(c=sib(a,0);c.b!=c.d.c;){b=kA(Gib(c),9);this.d=$wnd.Math.min(this.d,b.b);this.c=$wnd.Math.max(this.c,b.a);this.a=$wnd.Math.max(this.a,b.b);this.b=$wnd.Math.min(this.b,b.a)}} +function Umc(a){var b,c;b=new yvc;svc(b,Hmc);c=kA(nub(a,(E2b(),X1b)),19);c.pc((Z0b(),Y0b))&&svc(b,Mmc);c.pc(P0b)&&svc(b,Imc);if(c.pc(V0b)||Vpb(mA(nub(a,(J6b(),g5b))))){svc(b,Kmc);c.pc(W0b)&&svc(b,Lmc)}c.pc(R0b)&&svc(b,Jmc);return b} +function Huc(a){var b,c;b=pA(AOc(a,($Ac(),Czc)));c=ewc(kwc(),b);if(!c){if(b==null||b.length==0){throw x2(new Nuc('No layout algorithm has been specified ('+a+').'))}else{throw x2(new Nuc('Layout algorithm not found: '+b))}}return c} +function Ozd(){Ozd=d3;Mzd=kA(WXc(Ibd((Tzd(),Szd).qb),6),29);Jzd=kA(WXc(Ibd(Szd.qb),3),29);Kzd=kA(WXc(Ibd(Szd.qb),4),29);Lzd=kA(WXc(Ibd(Szd.qb),5),17);J9c(Mzd);J9c(Jzd);J9c(Kzd);J9c(Lzd);Nzd=new Rcb(xz(pz(zY,1),sVd,158,0,[Mzd,Jzd]))} +function fw(b){var c=(!dw&&(dw=gw()),dw);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return ew(a,c)});return '"'+d+'"'} +function Hwb(a){var b,c,d,e,f,g;e=a.e.c.length;d=tz(mG,ZMd,15,e,0,1);for(g=new ccb(a.e);g.a=0;){d=c[f];g.Bk(d.nj())&&fXc(e,d)}!u_c(a,e)&&PMc(a.e)&&ocd(a,b.lj()?Gud(a,6,b,(bdb(),$cb),null,-1,false):Gud(a,b.Zi()?2:1,b,null,null,-1,false))} +function uLb(a,b){var c,d,e,f,g;if(a.a==(J0b(),H0b)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.i){d=b.u;g=d.c.c.a-d.n.a/2;e=f-(d.k.a+d.n.a);if(e>g){return false}}if(b.n){d=b.v;g=d.c.c.a-d.n.a/2;e=d.k.a-c;if(e>g){return false}}return true} +function CMb(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new ccb(a);f.a1?(a.e*=Vpb(a.a)):(a.f/=Vpb(a.a));Gub(a);Hub(a);Dub(a);qub(a.b,(Fvb(),xvb),a.g)} +function $vb(a){Tvb();var b,c,d,e;Svb=new Gbb;Rvb=(Es(),new Bgb);Qvb=new Gbb;b=(!a.a&&(a.a=new zkd(MV,a,10,11)),a.a);Vvb(b);for(e=new a0c(b);e.e!=e.i._b();){d=kA($_c(e),35);if(ybb(Svb,d,0)==-1){c=new Gbb;tbb(Qvb,c);Wvb(d,c)}}return Qvb} +function WNc(a,b){var c,d,e,f,g,h,i;d=T4(a.Db&254);if(d==1){a.Eb=null}else{f=lA(a.Eb);if(d==2){e=UNc(a,b);a.Eb=f[e==0?1:0]}else{g=tz(NE,oJd,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} +function n_c(a,b,c){var d,e,f;if(a.ti()){f=a.ui();QXc(a,b,c);d=a.mi(3,null,c,b,f);if(a.qi()){e=a.ri(c,null);a.xi()&&(e=a.yi(c,e));if(!e){a.ni(d)}else{e.Sh(d);e.Th()}}else{a.ni(d)}}else{QXc(a,b,c);if(a.qi()){e=a.ri(c,null);!!e&&e.Th()}}} +function o_c(a,b){var c,d,e,f;if(a.ti()){c=a.i;f=a.ui();RXc(a,b);d=a.mi(3,null,b,c,f);if(a.qi()){e=a.ri(b,null);a.xi()&&(e=a.yi(b,e));if(!e){a.ni(d)}else{e.Sh(d);e.Th()}}else{a.ni(d)}}else{RXc(a,b);if(a.qi()){e=a.ri(b,null);!!e&&e.Th()}}} +function mq(a,b){var c,d,e,f,g;if(b===a){return true}if(!sA(b,15)){return false}g=kA(b,15);if(a._b()!=g._b()){return false}f=g.tc();for(d=a.tc();d.hc();){c=d.ic();e=f.ic();if(!(yA(c)===yA(e)||c!=null&&kb(c,e))){return false}}return true} +function J7(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw x2(new o3('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=D7(a);if(e=0?a.jg(null):a.yg().Cg(a,-1-b,null,null));a.kg(kA(e,42),c);!!d&&d.Th();a.eg()&&a.fg()&&c>-1&&vMc(a,new Mid(a,9,c,f,e));return e}}}return f} +function uWc(){uWc=d3;tWc=new vWc(AOd,0);qWc=new vWc('INSIDE_SELF_LOOPS',1);rWc=new vWc('MULTI_EDGES',2);pWc=new vWc('EDGE_LABELS',3);sWc=new vWc('PORTS',4);nWc=new vWc('COMPOUND',5);mWc=new vWc('CLUSTERS',6);oWc=new vWc('DISCONNECTED',7)} +function kid(a){var b,c;if(a.f){while(a.n>16)),15).dd(f);if(h0){!(hBc(a.a.c)&&b.n.d)&&!(iBc(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(hBc(a.a.c)&&b.n.a)&&!(iBc(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function vPb(a,b,c){var d,e,f,g,h,i;f=kA(xbb(b.d,0),14).c;d=f.g;e=d.j;i=kA(xbb(c.f,0),14).d;g=i.g;h=g.j;e==(RGb(),OGb)?qub(a,(E2b(),e2b),kA(nub(d,e2b),11)):qub(a,(E2b(),e2b),f);h==OGb?qub(a,(E2b(),f2b),kA(nub(g,f2b),11)):qub(a,(E2b(),f2b),i)} +function Fmc(a){var b,c,d;ymc(this);if(a.length==0){throw x2(new O4(bRd))}for(c=0,d=a.length;c>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?dLd:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?dLd:0;f=d?cLd:0;e=c>>b-44}return Cz(e&cLd,f&cLd,g&dLd)} +function $ub(a){var b,c,d,e,f,g;this.c=new Gbb;this.d=a;d=oLd;e=oLd;b=pLd;c=pLd;for(g=sib(a,0);g.b!=g.d.c;){f=kA(Gib(g),9);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new pyc(d,e,b-d,c-e)} +function fZb(a){var b,c,d;this.c=a;d=kA(nub(a,(J6b(),W4b)),110);b=Vpb(nA(nub(a,J4b)));c=Vpb(nA(nub(a,A6b)));d==(gBc(),cBc)||d==dBc||d==eBc?(this.b=b*c):(this.b=1/(b*c));this.j=Vpb(nA(nub(a,u6b)));this.e=Vpb(nA(nub(a,t6b)));this.f=a.b.c.length} +function v7b(a){switch(a.g){case 0:return new Vhc;case 1:return new pfc;case 2:return new Ffc;case 3:return new Nic;case 4:return new kgc;default:throw x2(new O4('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} +function aNc(a){var b;b=new O6(f4(a.ql));b.a+='@';I6(b,(ob(a)>>>0).toString(16));if(a.Eg()){b.a+=' (eProxyURI: ';H6(b,a.Kg());if(a.tg()){b.a+=' eClass: ';H6(b,a.tg())}b.a+=')'}else if(a.tg()){b.a+=' (eClass: ';H6(b,a.tg());b.a+=')'}return b.a} +function c3c(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&sA(b,38)){a.a.Fi();j=kA(b,38);i=j.kc();f=i==null?0:ob(i);g=V1c(a.a,f);c=a.a.d[g];if(c){d=kA(c.g,339);k=c.i;for(h=0;h0&&e0}else if(e<0&&-e0}return false} +function lKc(a,b,c,d,e){var f,g,h,i,j,k;f=d;for(j=kA(kA(Ke(a.r,b),19),60).tc();j.hc();){i=kA(j.ic(),111);if(f){f=false;continue}g=0;e>0?(g=e):!!i.c&&(g=BIc(i.c));if(g>0){if(c){k=i.b.Re().a;if(g>k){h=(g-k)/2;i.d.b=h;i.d.c=h}}else{i.d.c=a.s+g}}}} +function LPc(a,b,c){switch(b){case 7:!a.e&&(a.e=new pxd(JV,a,7,4));r_c(a.e);!a.e&&(a.e=new pxd(JV,a,7,4));gXc(a.e,kA(c,13));return;case 8:!a.d&&(a.d=new pxd(JV,a,8,5));r_c(a.d);!a.d&&(a.d=new pxd(JV,a,8,5));gXc(a.d,kA(c,13));return;}mPc(a,b,c)} +function Fgc(a){var b,c;if(a.c.length!=2){throw x2(new Q4('Order only allowed for two paths.'))}b=(Mpb(0,a.c.length),kA(a.c[0],14));c=(Mpb(1,a.c.length),kA(a.c[1],14));if(b.d.g!=c.c.g){a.c=tz(NE,oJd,1,0,5,1);a.c[a.c.length]=c;a.c[a.c.length]=b}} +function iBd(a){var b,c,d,e;if(a==null){return null}else{d=mId(a,true);e=tWd.length;if(Z5(d.substr(d.length-e,e),tWd)){c=d.length;if(c==4){b=d.charCodeAt(0);if(b==43){return VAd}else if(b==45){return UAd}}else if(c==3){return VAd}}return G3(d)}} +function fDb(a,b,c){var d;d=null;!!b&&(d=b.d);rDb(a,new FBb(b.k.a-d.b+c.a,b.k.b-d.d+c.b));rDb(a,new FBb(b.k.a-d.b+c.a,b.k.b+b.n.b+d.a+c.b));rDb(a,new FBb(b.k.a+b.n.a+d.c+c.a,b.k.b-d.d+c.b));rDb(a,new FBb(b.k.a+b.n.a+d.c+c.a,b.k.b+b.n.b+d.a+c.b))} +function kSb(a,b){var c,d,e,f,g;xEc(b,'Port side processing',1);for(g=new ccb(a.a);g.ai-c&&h=a.c.a.length){return b}d=H6(I6(new M6,'expected one element but was: <'),b);for(c=0;c<4&&a.a=0?a.Mg(f,c):VMc(a,e,c)}else{throw x2(new O4(ZSd+e.be()+$Sd))}}else{GMc(a,d,e,c)}} +function twb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+YMd;j=f-YMd;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return Sr(xz(pz(aU,1),cKd,9,0,[new Jyc(k,m),new Jyc(l,n)]))} +function _yb(a){var b,c,d,e,f,g,h;f=0;e=a.f.e;for(c=0;c=0){return e}else{f=1;for(h=new ccb(b.i);h.ai+1?f:i+1}}}T9b(a,b,f);return f}} +function yCc(){yCc=d3;qCc=new zCc('H_LEFT',0);pCc=new zCc('H_CENTER',1);sCc=new zCc('H_RIGHT',2);xCc=new zCc('V_TOP',3);wCc=new zCc('V_CENTER',4);vCc=new zCc('V_BOTTOM',5);tCc=new zCc('INSIDE',6);uCc=new zCc('OUTSIDE',7);rCc=new zCc('H_PRIORITY',8)} +function AOc(a,b){var c,d;d=(!a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),S1c(a.o,b));if(d!=null){return d}c=b.Of();sA(c,4)&&(c==null?(!a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),a2c(a.o,b)):(!a.o&&(a.o=new T8c((uMc(),rMc),$V,a,0)),Y1c(a.o,b,c)),a);return c} +function dyd(a){var b,c,d,e,f,g,h;b=a.Yg(HVd);if(b){h=pA(S1c((!b.b&&(b.b=new f9c((j7c(),f7c),CZ,b)),b.b),'settingDelegates'));if(h!=null){c=new Gbb;for(e=f6(h,'\\w+'),f=0,g=e.length;f0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new fGc(d5(b),d5(c))} +function LFb(a,b,c){var d,e,f;if(b==c){return}d=b;do{vyc(a,d.c);e=kA(nub(d,(E2b(),n2b)),8);if(e){f=d.d;uyc(a,f.b,f.d);vyc(a,e.k);d=uGb(e)}}while(e);d=c;do{Gyc(a,d.c);e=kA(nub(d,(E2b(),n2b)),8);if(e){f=d.d;Fyc(a,f.b,f.d);Gyc(a,e.k);d=uGb(e)}}while(e)} +function jKb(a,b,c){var d,e,f,g,h,i;d=new Gbb;d.c[d.c.length]=b;i=b;h=0;do{i=oKb(a,i);!!i&&(d.c[d.c.length]=i,true);++h}while(i);g=(c-(d.c.length-1)*a.d.d)/d.c.length;for(f=new ccb(d);f.ab.c){return 1}else if(a.bb.b){return 1}else if(a.a!=b.a){return ob(a.a)-ob(b.a)}else if(a.d==(Wec(),Vec)&&b.d==Uec){return -1}else if(a.d==Uec&&b.d==Vec){return 1}return 0} +function bic(a){var b,c,d,e,f,g,h,i;e=oLd;d=pLd;for(c=new ccb(a.e.b);c.a=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function yAb(a,b){var c,d,e,f,g,h,i,j;g=b==1?oAb:nAb;for(f=g.a.Xb().tc();f.hc();){e=kA(f.ic(),110);for(i=kA(Ke(a.f.c,e),19).tc();i.hc();){h=kA(i.ic(),48);d=kA(h.b,80);j=kA(h.a,172);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function GEd(a){FEd();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=k6(a);f=e/2|0;c=tz(BA,jTd,22,f,15,1);for(d=0;d>24}return c} +function Kkd(a,b){var c,d,e;c=b==null?Of(Wgb(a.d,null)):mhb(a.e,b);if(sA(c,207)){e=kA(c,207);e.gh()==null&&undefined;return e}else if(sA(c,456)){d=kA(c,1631);e=d.a;!!e&&(e.yb==null?undefined:b==null?Xgb(a.d,null,e):nhb(a.e,b,e));return e}else{return null}} +function sud(a,b){var c,d,e,f,g;d=b.nj();if(zyd(a.e,d)){if(d.xh()&&Dud(a,d,b.lc())){return false}}else{g=yyd(a.e.mg(),d);c=kA(a.g,124);for(e=0;e0){!(hBc(a.a.c)&&b.n.d)&&!(iBc(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(hBc(a.a.c)&&b.n.a)&&!(iBc(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function JQb(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(FDc(),lDc)||b==kDc){zQb(kA(Uab(a),15),(jHc(),fHc));zQb(kA(Uab(a),15),gHc)}else{zQb(kA(Uab(a),15),(jHc(),gHc));zQb(kA(Uab(a),15),fHc)}}else{for(e=new mbb(a);e.a!=e.b;){d=kA(kbb(e),15);zQb(d,c)}}} +function ayd(a){var b,c,d,e,f,g,h;if(a){b=a.Yg(HVd);if(b){g=pA(S1c((!b.b&&(b.b=new f9c((j7c(),f7c),CZ,b)),b.b),'conversionDelegates'));if(g!=null){h=new Gbb;for(d=f6(g,'\\w+'),e=0,f=d.length;e=2147483648&&(d-=zLd);return d}} +function XXb(a,b,c){var d,e,f,g;if(_Xb(a,b)>_Xb(a,c)){d=AGb(c,(FDc(),kDc));a.d=d.Wb()?0:hHb(kA(d.cd(0),11));g=AGb(b,EDc);a.b=g.Wb()?0:hHb(kA(g.cd(0),11))}else{e=AGb(c,(FDc(),EDc));a.d=e.Wb()?0:hHb(kA(e.cd(0),11));f=AGb(b,kDc);a.b=f.Wb()?0:hHb(kA(f.cd(0),11))}} +function GMb(a){var b,c,d,e,f,g;e=kA(xbb(a.i,0),11);if(e.d.c.length+e.f.c.length==0){a.k.a=0}else{g=0;for(d=kl(wn(new NHb(e),new VHb(e)));So(d);){c=kA(To(d),11);g+=c.g.k.a+c.k.a+c.a.a}b=kA(nub(a,(J6b(),X5b)),9);f=!b?0:b.a;a.k.a=g/(e.d.c.length+e.f.c.length)-f}} +function X6b(a){switch(a.g){case 0:return new wac;case 1:return new V9b;case 2:return new w9b;case 3:return new J9b;case 4:return new Kac;case 5:return new eac;default:throw x2(new O4('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function eLc(a,b){var c,d,e,f;c=a.o.a;for(f=kA(kA(Ke(a.r,b),19),60).tc();f.hc();){e=kA(f.ic(),111);e.e.a=c*Vpb(nA(e.b.xe(aLc)));e.e.b=(d=e.b,d.ye(($Ac(),AAc))?d.ef()==(FDc(),lDc)?-d.Re().b-Vpb(nA(d.xe(AAc))):Vpb(nA(d.xe(AAc))):d.ef()==(FDc(),lDc)?-d.Re().b:0)}} +function v8(a,b){u8();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return z8(a,b)}g=(a.d&-2)<<4;j=I7(a,g);k=I7(b,g);d=p8(a,H7(j,g));e=p8(b,H7(k,g));i=v8(j,k);c=v8(d,e);f=v8(p8(j,d),p8(e,k));f=k8(k8(f,i),c);f=H7(f,g);i=H7(i,g<<1);return k8(k8(i,f),c)} +function Pvb(a,b,c){var d,e,f;kub.call(this,new Gbb);this.a=b;this.b=c;this.e=a;d=(a.b&&Oub(a),a.a);this.d=Nvb(d.a,this.a);this.c=Nvb(d.b,this.b);cub(this,this.d,this.c);Ovb(this);for(f=this.e.e.a.Xb().tc();f.hc();){e=kA(f.ic(),247);e.c.c.length>0&&Mvb(this,e)}} +function mgc(a){var b,c,d,e;b=0;c=0;for(e=new ccb(a.i);e.a1||c>1){return 2}}if(b+c==1){return 2}return 0} +function Zhc(a,b,c){var d,e,f,g,h,i,j;d=c;e=b;do{e=a.a[e.o];g=(j=a.g[e.o],Vpb(a.p[j.o])+Vpb(a.d[e.o])-e.d.d);h=aic(e,!e.c?-1:ybb(e.c.a,e,0));if(h){f=(i=a.g[h.o],Vpb(a.p[i.o])+Vpb(a.d[h.o])+h.n.b+h.d.a);d=$wnd.Math.min(d,g-(f+l8b(a.k,e,h)))}}while(b!=e);return d} +function $hc(a,b,c){var d,e,f,g,h,i,j;d=c;e=b;do{e=a.a[e.o];f=(j=a.g[e.o],Vpb(a.p[j.o])+Vpb(a.d[e.o])+e.n.b+e.d.a);h=_hc(e,!e.c?-1:ybb(e.c.a,e,0));if(h){g=(i=a.g[h.o],Vpb(a.p[i.o])+Vpb(a.d[h.o])-h.d.d);d=$wnd.Math.min(d,g-(f+l8b(a.k,e,h)))}}while(b!=e);return d} +function hKc(a,b,c){var d,e,f,g;e=c;f=fob(Uob(kA(kA(Ke(a.r,b),19),60).xc(),new mKc));g=0;while(f.a||(f.a=Cob(f.c,f)),f.a){if(e){Lpb((f.a||(f.a=Cob(f.c,f)),f.a));f.a=false;e=false;continue}else{d=Kkb(f);f.a||(f.a=Cob(f.c,f));f.a&&(g=$wnd.Math.max(g,d))}}return g} +function pUc(a,b,c){var d,e,f,g,h,i,j,k;if(c){f=c.a.length;d=new uId(f);for(h=(d.b-d.a)*d.c<0?(tId(),sId):new QId(d);h.hc();){g=kA(h.ic(),21);e=XTc(c,g.a);!!e&&(i=RUc(a,(j=(gMc(),k=new pTc,k),!!b&&nTc(j,b),j),e),aPc(i,ZTc(e,HTd)),aVc(e,i),bVc(e,i),ZUc(a,e,i))}}} +function wtb(a){var b,c,d;c=kA(a.a,21).a;d=kA(a.b,21).a;b=(c<0?-c:c)>(d<0?-d:d)?c<0?-c:c:d<0?-d:d;if(c=-b&&d==b){return new fGc(d5(c-1),d5(d))}return new fGc(d5(c),d5(d-1))} +function sMb(a){var b,c,d,e,f,g;g=kA(Fbb(a.a,tz(RK,VNd,8,a.a.c.length,0,1)),123);Ecb(g,new xMb);c=null;for(e=0,f=g.length;ed.o?kHb(e,CDc):e.i==CDc&&d.o>a.o&&kHb(e,lDc);break}}return d} +function akc(a,b,c){var d,e,f;for(f=new ccb(a.e);f.a0){d.b.c-=d.c;d.b.c<=0&&d.b.f>0&&mib(b,d.b)}}for(e=new ccb(a.b);e.a0){d.a.f-=d.c;d.a.f<=0&&d.a.c>0&&mib(c,d.a)}}} +function dnc(a,b,c){var d,e,f;for(f=new ccb(a.q);f.a0){d.b.j-=d.c;d.b.j<=0&&d.b.r>0&&mib(b,d.b)}}for(e=new ccb(a.g);e.a0){d.a.r-=d.c;d.a.r<=0&&d.a.j>0&&mib(c,d.a)}}} +function xYc(a){var b,c,d,e,f;if(a.g==null){a.d=a.Gh(a.f);fXc(a,a.d);if(a.c){f=a.f;return f}}b=kA(a.g[a.i-1],43);e=b.ic();a.e=b;c=a.Gh(e);if(c.hc()){a.d=c;fXc(a,c)}else{a.d=null;while(!b.hc()){wz(a.g,--a.i,null);if(a.i==0){break}d=kA(a.g[a.i-1],43);b=d}}return e} +function Vb(a,b){var c,d,e,f;a=a;c=new N6;f=0;d=0;while(d=0?a.ug(d,true,true):TMc(a,f,true),184));kA(e,237).xk(b,c)}else{throw x2(new O4(ZSd+b.be()+$Sd))}} +function kDb(a,b,c){switch(c.g){case 1:return new Jyc(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new Jyc($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new Jyc(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new Jyc($wnd.Math.min(b.a,a.d.a),b.b);}return new Jyc(b.a,b.b)} +function SWc(a){var b,c,d;b=Tr(1+(!a.c&&(a.c=new zkd(NV,a,9,9)),a.c).i);tbb(b,(!a.d&&(a.d=new pxd(JV,a,8,5)),a.d));for(d=new a0c((!a.c&&(a.c=new zkd(NV,a,9,9)),a.c));d.e!=d.i._b();){c=kA($_c(d),121);tbb(b,(!c.d&&(c.d=new pxd(JV,c,8,5)),c.d))}return Pb(b),new ll(b)} +function TWc(a){var b,c,d;b=Tr(1+(!a.c&&(a.c=new zkd(NV,a,9,9)),a.c).i);tbb(b,(!a.e&&(a.e=new pxd(JV,a,7,4)),a.e));for(d=new a0c((!a.c&&(a.c=new zkd(NV,a,9,9)),a.c));d.e!=d.i._b();){c=kA($_c(d),121);tbb(b,(!c.e&&(c.e=new pxd(JV,c,7,4)),c.e))}return Pb(b),new ll(b)} +function KYb(a,b){var c,d,e,f,g;xEc(b,'Breaking Point Processor',1);JYb(a);if(Vpb(mA(nub(a,(J6b(),G6b))))){for(e=new ccb(a.b);e.a3&&nx(a,0,b-3)}} +function Kz(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return _4(c)}if(b==0&&d!=0&&c==0){return _4(d)+22}if(b!=0&&d==0&&c==0){return _4(b)+44}return -1} +function ZQb(a,b){var c,d,e,f,g;xEc(b,'Edge joining',1);c=Vpb(mA(nub(a,(J6b(),y6b))));for(e=new ccb(a.b);e.a0);f.a.cd(f.c=--f.b);r9(f,e);Lpb(f.b_Qd;i=k_Qd;i=k_Qd;i=k_Qd;i=k=0){if(b==c){return new fGc(d5(-b-1),d5(-b-1))}if(b==-c){return new fGc(d5(-b),d5(c+1))}}if((b<0?-b:b)>(c<0?-c:c)){if(b<0){return new fGc(d5(-b),d5(c))}return new fGc(d5(-b),d5(c+1))}return new fGc(d5(b+1),d5(c))} +function PEc(a,b,c){var d,e,f,g,h;e=kA(AOc(b,(vzc(),tzc)),21);!e&&(e=d5(0));f=kA(AOc(c,tzc),21);!f&&(f=d5(0));if(e.a>f.a){return -1}else if(e.a1){b=p$b((c=new r$b,++a.b,c),a.d);for(h=sib(f,0);h.b!=h.d.c;){g=kA(Gib(h),113);DZb(GZb(FZb(HZb(EZb(new IZb,1),0),b),g))}}} +function TYb(a,b,c){var d,e,f,g,h;xEc(c,'Breaking Point Removing',1);a.a=kA(nub(b,(J6b(),a5b)),197);for(f=new ccb(b.b);f.a>16!=6&&!!b){if(eyd(a,b))throw x2(new O4(fTd+AQc(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?mQc(a,null):a.Cb.Cg(a,-1-c,null,null)));!!b&&(d=MMc(b,a,6,d));d=lQc(a,b,d);!!d&&d.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,6,b,b))} +function aQc(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(eyd(a,b))throw x2(new O4(fTd+bQc(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?WPc(a,null):a.Cb.Cg(a,-1-c,null,null)));!!b&&(d=MMc(b,a,12,d));d=VPc(a,b,d);!!d&&d.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,3,b,b))} +function nTc(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(eyd(a,b))throw x2(new O4(fTd+oTc(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lTc(a,null):a.Cb.Cg(a,-1-c,null,null)));!!b&&(d=MMc(b,a,9,d));d=kTc(a,b,d);!!d&&d.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,9,b,b))} +function _Sc(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(eyd(a,b))throw x2(new O4(fTd+aTc(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?XSc(a,null):a.Cb.Cg(a,-1-c,null,null)));!!b&&(d=MMc(b,a,10,d));d=WSc(a,b,d);!!d&&d.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,11,b,b))} +function UUc(a,b){if(sA(b,246)){return gUc(a,kA(b,35))}else if(sA(b,187)){return hUc(a,kA(b,121))}else if(sA(b,263)){return fUc(a,kA(b,137))}else if(sA(b,183)){return eUc(a,kA(b,105))}else if(b){return null}else{throw x2(new O4(JTd+vg(new Rcb(xz(pz(NE,1),oJd,1,5,[null])))))}} +function YVc(a){var b,c,d,e,f,g,h,i,j,k,l;l=_Vc(a);b=a.a;i=b!=null;i&&STc(l,'category',a.a);e=bJd(new G9(a.d));g=!e;if(g){j=new fy;Ny(l,'knownOptions',j);c=new eWc(j);i5(new G9(a.d),c)}f=bJd(a.g);h=!f;if(h){k=new fy;Ny(l,'supportedFeatures',k);d=new gWc(k);i5(a.g,d)}return l} +function MVb(a,b,c){var d,e,f;for(e=new ccb(a.a.b);e.ai){k=a.d;a.d=tz(EX,RUd,55,2*i+4,0,1);for(f=0;f=9223372036854775807){return fA(),bA}e=false;if(a<0){e=true;a=-a}d=0;if(a>=gLd){d=zA(a/gLd);a-=d*gLd}c=0;if(a>=fLd){c=zA(a/fLd);a-=c*fLd}b=zA(a);f=Cz(b,c,d);e&&Iz(f);return f} +function _oc(a,b,c){var d,e,f,g,h,i;if(!Bn(b)){i=BEc(c,(sA(b,13)?kA(b,13)._b():mo(b.tc()))/a.a|0);xEc(i,jRd,1);h=new cpc;g=0;for(f=b.tc();f.hc();){d=kA(f.ic(),76);h=wn(h,new Aoc(d));gnOd;f=d-gnOd;if(e||f){i=kA(b.e,249).b;g=kA(b.e,249).a;h=kA(b.d,129);if(i==0&&g==0){return h}}}}return h} +function sSb(a,b,c,d){var e,f,g,h;g=new IGb(a);GGb(g,(RGb(),OGb));qub(g,(E2b(),i2b),b);qub(g,(J6b(),Z5b),(VCc(),QCc));qub(g,e2b,c);qub(g,f2b,d);f=new lHb;kHb(f,(FDc(),EDc));jHb(f,g);h=new lHb;kHb(h,kDc);jHb(h,g);MEb(b,f);e=new PEb;lub(e,b);qub(e,p5b,null);LEb(e,h);MEb(e,d);return g} +function Fkc(a,b,c,d,e){var f,g;if(!JEb(b)&&b.c.g.c==b.d.g.c||!zyc(Pyc(xz(pz(aU,1),cKd,9,0,[e.g.k,e.k,e.a])),c)){b.c==e?Dq(b.a,0,new Kyc(c)):mib(b.a,new Kyc(c));if(d&&!Hgb(a.a,c)){g=kA(nub(b,(J6b(),p5b)),74);if(!g){g=new Vyc;qub(b,p5b,g)}f=new Kyc(c);pib(g,f,g.c.b,g.c);Ggb(a.a,f)}}} +function trb(a,b){var c,d;d=vmb(a.b,b.b);if(!d){throw x2(new Q4('Invalid hitboxes for scanline constraint calculation.'))}(nrb(b.b,kA(xmb(a.b,b.b),57))||nrb(b.b,kA(wmb(a.b,b.b),57)))&&(S6(),b.b+' has overlap.');a.a[b.b.f]=kA(zmb(a.b,b.b),57);c=kA(ymb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)} +function JVb(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.i&&b.k){n=kA(F8(a.f,b.u),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.n&&c.k){n=kA(F8(a.f,c.v),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=2>l-k?2:l-k;h=q/i;o=p+h;for(m=k;m>16!=7&&!!b){if(eyd(a,b))throw x2(new O4(fTd+MSc(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?ISc(a,null):a.Cb.Cg(a,-1-c,null,null)));!!b&&(d=kA(b,42).Ag(a,1,KV,d));d=HSc(a,b,d);!!d&&d.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,7,b,b))} +function D8c(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(eyd(a,b))throw x2(new O4(fTd+G8c(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?B8c(a,null):a.Cb.Cg(a,-1-c,null,null)));!!b&&(d=kA(b,42).Ag(a,0,qY,d));d=A8c(a,b,d);!!d&&d.Th()}else (a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,3,b,b))} +function VAb(a){var b,c,d,e,f,g,h;for(f=new ccb(a.a.a);f.a0&&f>0?(g.o=b++):d>0?(g.o=c++):f>0?(g.o=e++):(g.o=c++);}}bdb();Dbb(a.i,new RRb)} +function Euc(a,b){var c,d,e;e=(!b.a&&(b.a=new zkd(MV,b,10,11)),b.a).i;for(d=new a0c((!b.a&&(b.a=new zkd(MV,b,10,11)),b.a));d.e!=d.i._b();){c=kA($_c(d),35);yA(AOc(c,($Ac(),Vzc)))!==yA((jCc(),iCc))&&Cvc(Huc(b),Huc(c))&&((!c.a&&(c.a=new zkd(MV,c,10,11)),c.a).i==0||(e+=Euc(a,c)))}return e} +function Vsd(a,b){var c,d,e;c=b.Yg(a.a);if(c){e=pA(S1c((!c.b&&(c.b=new f9c((j7c(),f7c),CZ,c)),c.b),'affiliation'));if(e!=null){d=d6(e,o6(35));return d==-1?mtd(a,vtd(a,Nad(b.Wi())),e):d==0?mtd(a,null,e.substr(1,e.length-1)):mtd(a,e.substr(0,d),e.substr(d+1,e.length-(d+1)))}}return null} +function _nb(a){var b,c,d,e,f;f=new Gbb;wbb(a.b,new tpb(f));a.b.c=tz(NE,oJd,1,0,5,1);if(f.c.length!=0){b=(Mpb(0,f.c.length),kA(f.c[0],78));for(c=1,d=f.c.length;c=a.a){return -1}if(!jNb(b,c)){return -1}if(Bn(kA(d.Kb(b),20))){return 1}e=0;for(g=kA(d.Kb(b),20).tc();g.hc();){f=kA(g.ic(),14);i=f.c.g==b?f.d.g:f.c.g;h=kNb(a,i,c,d);if(h==-1){return -1}e=e>h?e:h;if(e>a.c-1){return -1}}return e+1} +function hcc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(FDc(),EDc):(FDc(),kDc);e=false;for(i=b[c],j=0,k=i.length;j>5;b&=31;if(d>=a.d){return a.e<0?(y7(),s7):(y7(),x7)}f=a.d-d;e=tz(FA,OKd,22,f+1,15,1);d8(e,f,a.a,d,b);if(a.e<0){for(c=0;c0&&a.a[c]<<32-b!=0){for(c=0;c0){f=kA(xbb(this.b,0),157);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=zA($wnd.Math.ceil(e*b))):(d=zA($wnd.Math.ceil(d/b)));this.a=new hub(e,d)} +function lec(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=tz(FA,OKd,22,b.length,15,1));for(g=e?0:b.length-1;e?g=0;g+=e?1:-1){h=b[g];i=d==(FDc(),kDc)?e?AGb(h,d):Wr(AGb(h,d)):e?Wr(AGb(h,d)):AGb(h,d);f&&(a.c[h.o]=i._b());for(l=i.tc();l.hc();){k=kA(l.ic(),11);a.d[k.o]=j++}vbb(c,i)}} +function smc(a,b,c){var d,e,f,g,h,i,j,k;f=Vpb(nA(a.b.tc().ic()));j=Vpb(nA(An(b.b)));d=Dyc(xyc(a.a),j-c);e=Dyc(xyc(b.a),c-f);k=vyc(d,e);Dyc(k,1/(j-f));this.a=k;this.b=new Gbb;h=true;g=a.b.tc();g.ic();while(g.hc()){i=Vpb(nA(g.ic()));if(h&&i-c>_Qd){this.b.nc(c);h=false}this.b.nc(i)}h&&this.b.nc(c)} +function x$b(a){var b,c,d,e;A$b(a,a.n);if(a.d.c.length>0){rcb(a.c);while(I$b(a,kA(acb(new ccb(a.e.a)),113))=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||uHd(a)}} +function Xvb(a){var b,c,d,e;e=mTc(a);c=new kwb(e);d=new mwb(e);b=new Gbb;vbb(b,(!a.d&&(a.d=new pxd(JV,a,8,5)),a.d));vbb(b,(!a.e&&(a.e=new pxd(JV,a,7,4)),a.e));return kA(Nob(Tob(Pob(new Zob(null,new ekb(b,16)),c),d),Tmb(new unb,new wnb,new Nnb,new Pnb,xz(pz($G,1),jKd,150,0,[(Ymb(),Xmb),Wmb]))),19)} +function oSb(a){var b,c,d;c=kA(nub(a,(E2b(),p2b)),8);c?kHb(a,kA(nub(c,V1b),69)):a.d.c.length-a.f.c.length<0?kHb(a,(FDc(),kDc)):kHb(a,(FDc(),EDc));if(!a.b){d=a.n;b=a.a;switch(a.i.g){case 1:b.a=d.a/2;b.b=0;break;case 2:b.a=d.a;b.b=d.b/2;break;case 3:b.a=d.a/2;b.b=d.b;break;case 4:b.a=0;b.b=d.b/2;}}} +function S9b(a,b,c){var d,e,f,g,h;xEc(c,'Longest path layering',1);a.a=b;h=a.a.a;a.b=tz(FA,OKd,22,h.c.length,15,1);d=0;for(g=new ccb(h);g.a=0){return false}else{c=ftd((uyd(),syd),e,b);if(!c){return true}else{d=c.kj();return (d>1||d==-1)&&_td(rtd(syd,c))!=3}}}}else{return false}} +function EQb(a,b){var c;c=kA(nub(a,(J6b(),_4b)),241);xEc(b,'Label side selection ('+c+')',1);switch(c.g){case 0:FQb(a,(jHc(),fHc));break;case 1:FQb(a,(jHc(),gHc));break;case 2:DQb(a,(jHc(),fHc));break;case 3:DQb(a,(jHc(),gHc));break;case 4:GQb(a,(jHc(),fHc));break;case 5:GQb(a,(jHc(),gHc));}zEc(b)} +function Ucc(a,b,c){var d,e,f,g,h,i;d=Jcc(c,a.length);g=a[d];if(g[0].j!=(RGb(),MGb)){return}f=Kcc(c,g.length);i=b.i;for(e=0;e0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);ZHc(a,IHc,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==IHc){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function nfc(a,b){var c,d,e,f,g,h,i;c=pLd;h=(RGb(),PGb);for(e=new ccb(b.a);e.a0?(g=c):!!i.c&&(g=AIc(i.c));if(g>0){if(d&&(CKc(),i.a.B&&(!Vpb(mA(i.a.e.xe(($Ac(),EAc))))||i.b.ff()))){i.d.a=a.s+g}else{k=i.b.Re().b;if(g>k){h=(g-k)/2;i.d.d=h;i.d.a=h}}}}} +function Wsd(a,b){var c,d,e,f,g;e=b.Yg(a.a);if(e){d=(!e.b&&(e.b=new f9c((j7c(),f7c),CZ,e)),e.b);c=pA(S1c(d,KVd));if(c!=null){f=c.lastIndexOf('#');g=f==-1?xtd(a,b.Pi(),c):f==0?wtd(a,null,c.substr(1,c.length-1)):wtd(a,c.substr(0,f),c.substr(f+1,c.length-(f+1)));if(sA(g,140)){return kA(g,140)}}}return null} +function $sd(a,b){var c,d,e,f,g;d=b.Yg(a.a);if(d){c=(!d.b&&(d.b=new f9c((j7c(),f7c),CZ,d)),d.b);f=pA(S1c(c,fWd));if(f!=null){e=f.lastIndexOf('#');g=e==-1?xtd(a,b.Pi(),f):e==0?wtd(a,null,f.substr(1,f.length-1)):wtd(a,f.substr(0,e),f.substr(e+1,f.length-(e+1)));if(sA(g,140)){return kA(g,140)}}}return null} +function esc(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.If(e);f=kA(e.cd(0),35);if(csc(a,c,f,false)){return true}g=kA(e.cd(e._b()-1),35);if(csc(a,d,g,true)){return true}if(Zrc(a,e)){return true}for(k=e.tc();k.hc();){j=kA(k.ic(),35);for(i=b.tc();i.hc();){h=kA(i.ic(),35);if(Yrc(a,j,h)){return true}}}return false} +function RMc(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.rg(c),kA(j>=0?a.ug(j,false,true):TMc(a,c,false),52));n:for(f=l.tc();f.hc();){e=kA(f.ic(),51);for(k=0;ka.d[g.o]){c+=Zdc(a.b,f);Nab(a.a,d5(f))}}while(!Tab(a.a)){Xdc(a.b,kA(Xab(a.a),21).a)}}return c} +function $Wc(a,b,c){var d,e;if((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a).i==0){return YWc(a)}else{d=kA(WXc((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a),0),270);if(b){r_c((!d.a&&(d.a=new fdd(GV,d,5)),d.a));yQc(d,0);zQc(d,0);rQc(d,0);sQc(d,0)}if(c){e=(!a.a&&(a.a=new zkd(IV,a,6,6)),a.a);while(e.i>1){t_c(e,e.i-1)}}return d}} +function xIb(a,b){var c,d,e,f;f=tIb(b);e=kA(nub(f,(E2b(),X1b)),19);sIb(b,e);if(e.pc((Z0b(),S0b))){for(d=new a0c((!b.c&&(b.c=new zkd(NV,b,9,9)),b.c));d.e!=d.i._b();){c=kA($_c(d),121);AIb(a,b,f,c)}}pIb(b,f);Vpb(mA(nub(f,(J6b(),Q5b))))&&e.nc(X0b);yA(AOc(b,h5b))===yA((jCc(),gCc))?yIb(a,b,f):wIb(a,b,f);return f} +function Z0b(){Z0b=d3;Q0b=new $0b('COMMENTS',0);S0b=new $0b('EXTERNAL_PORTS',1);T0b=new $0b('HYPEREDGES',2);U0b=new $0b('HYPERNODES',3);V0b=new $0b('NON_FREE_PORTS',4);W0b=new $0b('NORTH_SOUTH_PORTS',5);Y0b=new $0b(AOd,6);P0b=new $0b('CENTER_LABELS',7);R0b=new $0b('END_LABELS',8);X0b=new $0b('PARTITIONS',9)} +function Duc(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new zkd(MV,b,10,11)),b.a).i;for(e=new a0c((!b.a&&(b.a=new zkd(MV,b,10,11)),b.a));e.e!=e.i._b();){d=kA($_c(e),35);(!d.a&&(d.a=new zkd(MV,d,10,11)),d.a).i==0||(f+=Duc(a,d,false))}if(c){g=ZSc(b);while(g){f+=(!g.a&&(g.a=new zkd(MV,g,10,11)),g.a).i;g=ZSc(g)}}return f} +function t_c(a,b){var c,d,e,f;if(a.ti()){d=null;e=a.ui();a.xi()&&(d=a.zi(a.Dh(b),null));c=a.mi(4,f=ZXc(a,b),null,b,e);if(a.qi()&&f!=null){d=a.si(f,d);if(!d){a.ni(c)}else{d.Sh(c);d.Th()}}else{if(!d){a.ni(c)}else{d.Sh(c);d.Th()}}return f}else{f=ZXc(a,b);if(a.qi()&&f!=null){d=a.si(f,null);!!d&&d.Th()}return f}} +function dTb(a){var b,c,d,e,f,g,h,i,j;g=oLd;i=oLd;h=null;for(c=new dib(new Yhb(a.e));c.b!=c.c.a.b;){b=cib(c);if(yA(b.d)===yA((Flc(),hlc))||yA(b.d)===yA(ilc)){d=kA(b.e,249).a;j=kA(b.e,249).b;e=g-d>nOd;f=d-gnOd;if(e||f){i=kA(b.e,249).b;g=kA(b.e,249).a;h=kA(b.d,129);if(i==0&&g==0){return h}}}}return h} +function vLc(a){var b,c,d,e,f,g,h,i,j,k;f=a.a;b=new Jgb;j=0;for(d=new ccb(a.d);d.ai.d&&(k=i.d+i.a+f)}}c.c.d=k;b.a.Zb(c,b);j=$wnd.Math.max(j,c.c.d+c.c.a)}return j} +function ix(a,b,c,d,e){if(d<0){d=Zw(a,e,xz(pz(UE,1),cKd,2,6,[BKd,CKd,DKd,EKd,FKd,GKd,HKd,IKd,JKd,KKd,LKd,MKd]),b);d<0&&(d=Zw(a,e,xz(pz(UE,1),cKd,2,6,['Jan','Feb','Mar','Apr',FKd,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function kx(a,b,c,d,e){if(d<0){d=Zw(a,e,xz(pz(UE,1),cKd,2,6,[BKd,CKd,DKd,EKd,FKd,GKd,HKd,IKd,JKd,KKd,LKd,MKd]),b);d<0&&(d=Zw(a,e,xz(pz(UE,1),cKd,2,6,['Jan','Feb','Mar','Apr',FKd,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function MEd(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=tGd(a.i));a.j=a.i.length;LEd(a);f=PEd(a);if(a.d!=a.j)throw x2(new KEd(WYc((isd(),ZTd))));if(a.g){for(d=0;dJRd?Dbb(i,a.b):d<=JRd&&d>KRd?Dbb(i,a.d):d<=KRd&&d>LRd?Dbb(i,a.c):d<=LRd&&Dbb(i,a.a);f=nuc(a,i,f)}return e} +function TDc(a){owc(a,new Evc(Pvc(Mvc(Ovc(Nvc(new Rvc,ASd),'Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new WDc)));mwc(a,ASd,WMd,PDc);mwc(a,ASd,rNd,15);mwc(a,ASd,tNd,d5(0));mwc(a,ASd,VMd,oNd)} +function AJb(a,b){var c,d,e,f,g,h,i,j,k,l;i=b.a.length;h=zA($wnd.Math.ceil(i/a.a));l=b.a;g=0;j=h;for(f=0;fg?0:g)g?0:g:i,(0>(jg?0:g)g?0:g:i));g=j;j+=h;d=kA(xbb(a.c,f),8);c=new ZFb(k);c.n.b=b.n.b;Le(a.b,b,c);tbb(d.b,c)}Abb(a.g.b,b);tbb(a.i,(e=new LJb(a,b),e))} +function H9b(a,b,c){var d,e,f,g,h,i,j,k,l;b.o=1;f=b.c;for(l=BGb(b,(U7b(),S7b)).tc();l.hc();){k=kA(l.ic(),11);for(e=new ccb(k.f);e.a=a.length){return false}h=a.charCodeAt(b[0]);if(h!=43&&h!=45){return false}++b[0];d=ax(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new Px;j=i.q.getFullYear()-NKd+NKd-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d0){a.Fi();if(b!=null){for(f=0;f=48;c--){DEd[c]=c-48<<24>>24}for(d=70;d>=65;d--){DEd[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){DEd[e]=e-97+10<<24>>24}for(f=0;f<10;f++)EEd[f]=48+f&AKd;for(a=10;a<=15;a++)EEd[a]=65+a-10&AKd} +function lxb(a){var b,c,d,e;c=Vpb(nA(nub(a.a,(qyb(),nyb))));d=a.a.c.d;e=a.a.d.d;b=a.d;if(d.a>=e.a){if(d.b>=e.b){b.a=e.a+(d.a-e.a)/2+c;b.b=e.b+(d.b-e.b)/2-c}else{b.a=e.a+(d.a-e.a)/2+c;b.b=d.b+(e.b-d.b)/2+c}}else{if(d.b>=e.b){b.a=d.a+(e.a-d.a)/2+c;b.b=e.b+(d.b-e.b)/2+c}else{b.a=d.a+(e.a-d.a)/2+c;b.b=d.b+(e.b-d.b)/2-c}}} +function uIb(a,b,c,d){var e,f,g,h,i;h=UWc(kA(WXc((!b.b&&(b.b=new pxd(HV,b,4,7)),b.b),0),97));i=UWc(kA(WXc((!b.c&&(b.c=new pxd(HV,b,5,8)),b.c),0),97));if(ZSc(h)==ZSc(i)){return null}if(dXc(i,h)){return null}g=XPc(b);if(g==c){return d}else{f=kA(F8(a.a,g),8);if(f){e=kA(nub(f,(E2b(),h2b)),31);if(e){return e}}}return null} +function XKb(a,b,c,d){var e,f,g,h,i;f=a.i.c.length;i=tz(dV,fOd,267,f,0,1);for(g=0;gm+i&&d.jc()}for(g=new ccb(n);g.a>19!=0){return '-'+_z(Sz(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=Az(hLd);c=Dz(c,e,true);b=''+$z(zz);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function H3(a,b,c){var d,e,f,g,h;if(a==null){throw x2(new I5(mJd))}f=a.length;g=f>0&&(a.charCodeAt(0)==45||a.charCodeAt(0)==43)?1:0;for(d=g;dc){throw x2(new I5(mLd+a+'"'))}return h} +function hhb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function jMb(a,b){var c,d,e,f;xEc(b,'Resize child graph to fit parent.',1);for(d=new ccb(a.b);d.a>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw x2(new I5('Invalid hexadecimal'))}}} +function eUc(a,b){var c,d,e,f,g,h,i,j,k;j=kA(F8(a.c,b),191);if(!j){throw x2(new aUc('Edge did not exist in input.'))}g=UTc(j);k=new fy;c=new tVc(a,g,k);_Id((!b.a&&(b.a=new zkd(IV,b,6,6)),b.a),c);Ny(j,zTd,k);h=kA(AOc(b,($Ac(),_zc)),74);e=!h||aJd(h);f=!e;if(f){i=new fy;d=new uVc(i);i5(h,d);Ny(j,'junctionPoints',i)}return null} +function KMb(a,b,c){var d,e,f,g;xEc(c,'Orthogonally routing hierarchical port edges',1);a.a=0;d=NMb(b);QMb(b,d);PMb(a,b,d);LMb(b);e=kA(nub(b,(J6b(),Z5b)),83);f=b.b;JMb((Mpb(0,f.c.length),kA(f.c[0],26)),e,b);JMb(kA(xbb(f,f.c.length-1),26),e,b);g=b.b;HMb((Mpb(0,g.c.length),kA(g.c[0],26)));HMb(kA(xbb(g,g.c.length-1),26));zEc(c)} +function WVb(a){var b,c,d;b=kA(nub(a.d,(J6b(),a5b)),197);switch(b.g){case 2:c=OVb(a);break;case 3:c=(d=new Gbb,Sob(Pob(Tob(Rob(Rob(new Zob(null,new ekb(a.d.b,16)),new MWb),new OWb),new QWb),new cWb),new SWb(d)),d);break;default:throw x2(new Q4('Compaction not supported for '+b+' edges.'));}VVb(a,c);i5(new G9(a.g),new CWb(a))} +function Uac(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new ccb(d.i);h.a1){c?(g=kIb(b.c)+1):(g=kIb(j.c)-1);h=kA(xbb(a.a.b,g),26);FGb(j,h)}lJb(a,j,c)}}return b} +function hYb(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw x2(new q3('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new vec(d);kec(this.e,this.c,(FDc(),EDc));this.i=new vec(d);kec(this.i,this.c,kDc);this.f=new cYb(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].j==(RGb(),MGb);this.a&&fYb(this,a,b.length)} +function Yqc(a,b,c){var d,e,f,g;xEc(c,'Processor order nodes',2);a.a=Vpb(nA(nub(b,(fqc(),dqc))));e=new yib;for(g=sib(b.b,0);g.b!=g.d.c;){f=kA(Gib(g),76);Vpb(mA(nub(f,(Ppc(),Mpc))))&&(pib(e,f,e.c.b,e.c),true)}d=(Lpb(e.b!=0),kA(e.a.a.c,76));Wqc(a,d);!c.b&&AEc(c,1);Zqc(a,d,0-Vpb(nA(nub(d,(Ppc(),Epc))))/2,0);!c.b&&AEc(c,1);zEc(c)} +function jwc(){this.b=(Es(),new Jhb);this.d=new Jhb;this.e=new Jhb;this.c=new Jhb;this.a=new Bgb;this.f=new Bgb;LYc(aU,new uwc,new wwc);LYc(_T,new Owc,new Qwc);LYc(YT,new Swc,new Uwc);LYc(ZT,new Wwc,new Ywc);LYc(xF,new $wc,new axc);LYc(lG,new ywc,new Awc);LYc($F,new Cwc,new Ewc);LYc(iG,new Gwc,new Iwc);LYc(UG,new Kwc,new Mwc)} +function DYb(a,b,c,d){var e,f,g,h,i,j;i=IYb(a,c);j=IYb(b,c);e=false;while(!!i&&!!j){if(d||GYb(i,j,c)){g=IYb(i,c);h=IYb(j,c);LYb(b);LYb(a);f=i.c;_Qb(i,false);_Qb(j,false);if(c){EGb(b,j.o,f);b.o=j.o;EGb(a,i.o+1,f);a.o=i.o}else{EGb(a,i.o,f);a.o=i.o;EGb(b,j.o+1,f);b.o=j.o}FGb(i,null);FGb(j,null);i=g;j=h;e=true}else{break}}return e} +function P5c(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=hqb(b.toLowerCase()));c!=null&&(i^=hqb(c));d!=null&&(i^=hqb(d));g!=null&&(i^=hqb(g));h!=null&&(i^=hqb(h));for(j=0,k=f.length;ji){new bkc(b,a,h-i)}else if(h>0&&i>0){new bkc(a,b,0);new bkc(b,a,0)}} +function aCc(a){owc(a,new Evc(Pvc(Mvc(Ovc(Nvc(new Rvc,ySd),zSd),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new dCc)));mwc(a,ySd,WMd,ZBc);mwc(a,ySd,HQd,CWc($Bc));mwc(a,ySd,aSd,CWc(VBc));mwc(a,ySd,mQd,CWc(WBc));mwc(a,ySd,xQd,CWc(XBc))} +function WLb(a){var b,c,d;d=kA(nub(a,(J6b(),B5b)),19);if(d.Wb()){return}c=(b=kA(e4(nU),10),new ngb(b,kA(ypb(b,b.length),10),0));d.pc((yCc(),tCc))?hgb(c,tCc):hgb(c,uCc);d.pc(rCc)||hgb(c,rCc);d.pc(qCc)?hgb(c,xCc):d.pc(pCc)?hgb(c,wCc):d.pc(sCc)&&hgb(c,vCc);d.pc(xCc)?hgb(c,qCc):d.pc(wCc)?hgb(c,pCc):d.pc(vCc)&&hgb(c,sCc);qub(a,B5b,c)} +function koc(a,b){var c,d,e,f;if(0<(sA(a,13)?kA(a,13)._b():mo(a.tc()))){e=b;if(1=b.o){throw x2(new r3)}i=c>>5;h=c&31;g=O2(1,U2(O2(h,1)));f?(b.n[d][i]=N2(b.n[d][i],g)):(b.n[d][i]=z2(b.n[d][i],M2(g)));g=O2(g,1);e?(b.n[d][i]=N2(b.n[d][i],g)):(b.n[d][i]=z2(b.n[d][i],M2(g)))}catch(a){a=w2(a);if(sA(a,305)){throw x2(new q3(zMd+b.o+'*'+b.p+AMd+c+qJd+d+BMd))}else throw x2(a)}} +function lTb(a,b){var c,d,e,f,g,h,i;e=new Gbb;i=new Gbb;c=kA(Cfb(iTb,a),15).tc();while(c.hc()){d=kA(c.ic(),151);ubb(e,d.b);ubb(e,Xkc(d));if(c.hc()){d=kA(c.ic(),151);vbb(i,Xkc(d));vbb(i,d.b)}}SSb(e,a.b);SSb(i,a.a);for(h=new ccb(e);h.aa.d[h.o]){c+=Zdc(a.b,f);Nab(a.a,d5(f))}}else{++g}}c+=a.b.d*g;while(!Tab(a.a)){Xdc(a.b,kA(Xab(a.a),21).a)}}return c} +function cmc(a){var b,c,d,e,f,g;e=a.g.ed();d=a.b.ed();if(a.e){for(c=0;c_Qd){f=b;g=0;while($wnd.Math.abs(b-f)<_Qd){++g;b=Vpb(nA(e.ic()));d.ic()}if(g0){d=(!a.n&&(a.n=new zkd(LV,a,1,7)),kA(kA(WXc(a.n,0),137),263)).a;!d||I6(I6((b.a+=' "',b),d),'"')}}else{I6(I6((b.a+=' "',b),c),'"')}I6(D6(I6(D6(I6(D6(I6(D6((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function oTc(a){var b,c,d;if((a.Db&64)!=0)return tPc(a);b=new O6(WSd);c=a.k;if(!c){!a.n&&(a.n=new zkd(LV,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new zkd(LV,a,1,7)),kA(kA(WXc(a.n,0),137),263)).a;!d||I6(I6((b.a+=' "',b),d),'"')}}else{I6(I6((b.a+=' "',b),c),'"')}I6(D6(I6(D6(I6(D6(I6(D6((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Ixd(a){var b,c,d,e,f,g;f=0;b=j9c(a);!!b.Qi()&&(f|=4);(a.Bb&iVd)!=0&&(f|=2);if(sA(a,62)){c=kA(a,17);e=Wkd(c);(c.Bb&bTd)!=0&&(f|=32);if(e){Lbd(I9c(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&bTd)!=0&&(f|=64)}(c.Bb&sLd)!=0&&(f|=jVd);f|=hVd}else{if(sA(b,425)){f|=512}else{d=b.Qi();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function dwc(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=kA(G8(a.a,b),180);if(!e){for(d=(h=(new R9(a.b)).a.Tb().tc(),new W9(h));d.a.hc();){c=(f=kA(d.a.ic(),38),kA(f.lc(),180));g=c.c;i=b.length;if(Z5(g.substr(g.length-i,i),b)&&(b.length==g.length||X5(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&J8(a.a,b,e)}return e} +function Eyd(a,b){var c;if(a.f==Cyd){c=_td(rtd((uyd(),syd),b));return a.e?c==4&&b!=(Ozd(),Mzd)&&b!=(Ozd(),Jzd)&&b!=(Ozd(),Kzd)&&b!=(Ozd(),Lzd):c==2}if(!!a.d&&(a.d.pc(b)||a.d.pc(aud(rtd((uyd(),syd),b)))||a.d.pc(ftd((uyd(),syd),a.b,b)))){return true}if(a.f){if(ytd((uyd(),a.f),cud(rtd(syd,b)))){c=_td(rtd(syd,b));return a.e?c==4:c==2}}return false} +function Frc(a,b,c,d){var e,f,g,h,i,j,k,l;g=kA(AOc(c,($Ac(),JAc)),9);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=rRd);e+=b;e>rRd&&(e-=rRd);h=kA(AOc(d,JAc),9);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=rRd);f+=b;f>rRd&&(f-=rRd);return yv(),Bv(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:ef?1:Cv(isNaN(e),isNaN(f))} +function Xtb(a,b,c,d){var e,f;Wtb(a,b,c,d);iub(b,a.j-b.j+c);jub(b,a.k-b.k+d);for(f=new ccb(b.f);f.ac.k&&hj&&d>j){j=Vpb(c.p[h.o])+Vpb(c.d[h.o])+h.n.b+h.d.a}else{e=false;a.a&&(S6(),R6);break}}if(!e){break}}a.a&&(S6(),R6);return e} +function qac(a,b){var c,d,e,f,g;a.c==null||a.c.lengthf*2){k=new _Ec(l);j=WEc(g)/VEc(g);i=MEc(k,b,new XGb,c,d,e,j);vyc(Cyc(k.e),i);l.c=tz(NE,oJd,1,0,5,1);l.c[l.c.length]=k;l.c[l.c.length]=g;f=WEc(k)*VEc(k)+WEc(g)*VEc(g)}else{l.c[l.c.length]=g;f+=WEc(g)*VEc(g)}}return l} +function DFd(a){switch(a){case 100:return IFd(VWd,true);case 68:return IFd(VWd,false);case 119:return IFd(WWd,true);case 87:return IFd(WWd,false);case 115:return IFd(XWd,true);case 83:return IFd(XWd,false);case 99:return IFd(YWd,true);case 67:return IFd(YWd,false);case 105:return IFd(ZWd,true);case 73:return IFd(ZWd,false);default:throw x2(new Tv(UWd+a.toString(16)));}} +function NDb(a,b,c){var d,e,f,g,h,i,j,k;if(b.o==0){b.o=1;g=c;if(!c){e=new Gbb;f=(d=kA(e4(rU),10),new ngb(d,kA(ypb(d,d.length),10),0));g=new fGc(e,f)}kA(g.a,15).nc(b);b.j==(RGb(),MGb)&&kA(g.b,19).nc(kA(nub(b,(E2b(),V1b)),69));for(i=new ccb(b.i);i.ah){h=e;k.c=tz(NE,oJd,1,0,5,1)}e==h&&tbb(k,new fGc(c.c.g,c))}bdb();Dbb(k,a.c);sbb(a.b,i.o,k)}}} +function djc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new ccb(b.b);g.ah){h=e;k.c=tz(NE,oJd,1,0,5,1)}e==h&&tbb(k,new fGc(c.d.g,c))}bdb();Dbb(k,a.c);sbb(a.f,i.o,k)}}} +function Jwb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new Jyc(c,d);Gyc(i,kA(nub(b,(Byb(),yyb)),9));for(m=new ccb(b.e);m.a=40;g&&H$b(a);y$b(a);x$b(a);c=B$b(a);d=0;while(!!c&&d0&&mib(a.e,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&mib(a.d,f)}}}}} +function hmc(a){var b,c,d,e,f,g,h,i,j,k,l;h=new Gbb;f=Vpb(nA(a.g.cd(a.g._b()-1)));for(l=a.g.tc();l.hc();){k=nA(l.ic());sbb(h,0,f-(Npb(k),k))}g=Yyc(Xlc(a));j=new Gbb;e=new ccb(h);i=new Gbb;for(b=0;b1)&&b==1&&kA(a.a[a.b],8).j==(RGb(),NGb)){BQb(kA(a.a[a.b],8),(jHc(),fHc))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&kA(a.a[a.c-1&a.a.length-1],8).j==(RGb(),NGb)){BQb(kA(a.a[a.c-1&a.a.length-1],8),(jHc(),gHc))}else if((a.c-a.b&a.a.length-1)==2){BQb(kA(Uab(a),8),(jHc(),fHc));BQb(kA(Uab(a),8),gHc)}else{yQb(a,e)}Pab(a)} +function LSb(a){var b,c;if(a.Wb()){return}c=kA(a.cd(0),151).f;new oTb(a);b=new s9(c.i,0);mTb((Flc(),klc),b);nTb(Blc,b);KSb((FDc(),lDc),b);lTb(jlc,b);nTb(nlc,b);kTb(glc,b);mTb(hlc,b);KSb(kDc,b);lTb(flc,b);mTb(ilc,b);kTb(mlc,b);mTb(nlc,b);KSb(CDc,b);lTb(llc,b);mTb(Blc,b);kTb(Elc,b);nTb(ilc,b);while(b.b=0){h=Mz(a,g);if(h){j<22?(i.l|=1<>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&Iz(i);if(f){if(d){zz=Sz(a);e&&(zz=Yz(zz,(fA(),dA)))}else{zz=Cz(a.l,a.m,a.h)}}return i} +function Xac(a,b,c,d){var e,f,g,h,i,j,k,l;abc(a,b,c);f=b[c];l=d?(FDc(),EDc):(FDc(),kDc);if(Yac(b.length,c,d)){e=b[d?c-1:c+1];Tac(a,e,d?(U7b(),S7b):(U7b(),R7b));for(i=0,k=f.length;i0){e=h.length;while(e>0&&h[e-1]==''){--e}e=0&&h!=c){f=new Mid(a,1,h,g,null);!d?(d=f):d.Sh(f)}if(c>=0){f=new Mid(a,1,c,h==c?g:null,b);!d?(d=f):d.Sh(f)}}return d} +function $tb(a,b,c,d){var e,f,g,h,i,j,k;if(Ztb(a,b,c,d)){return true}else{for(g=new ccb(b.f);g.a=e){for(g=1;g0){e=kA(a.Ab.g,1627);if(b==null){for(f=0;f1){for(d=new ccb(e);d.ab.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*xLd)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*xLd)+1);if(c>d+1){return e}else if(c0&&(g=F7(g,B8(d)));return z7(f,g)}}else return ei+o){p=l.i+m.i;m.a=(m.i*m.a+l.i*l.a)/p;m.i=p;l.g=m;c=true}}f=h;l=m}}return c} +function JFb(a,b){var c,d,e,f,g,h,i,j,k;e=a.g;g=e.n.a;f=e.n.b;if(g<=0&&f<=0){return FDc(),DDc}j=a.k.a;k=a.k.b;h=a.n.a;c=a.n.b;switch(b.g){case 2:case 1:if(j<0){return FDc(),EDc}else if(j+h>g){return FDc(),kDc}break;case 4:case 3:if(k<0){return FDc(),lDc}else if(k+c>f){return FDc(),CDc}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(FDc(),EDc):i+d>=1&&i-d>=0?(FDc(),kDc):d<0.5?(FDc(),lDc):(FDc(),CDc)} +function cx(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(a.charCodeAt(b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=ax(a,b);if(g==0&&b[0]==f){return false}if(b[0]=14&&c<=16));case 11:return b!=null&&typeof b===iJd;case 12:return b!=null&&(typeof b===fJd||typeof b==iJd);case 0:return jA(b,a.__elementTypeId$);case 2:return xA(b)&&!(b.sl===g3);case 1:return xA(b)&&!(b.sl===g3)||jA(b,a.__elementTypeId$);default:return true;}} +function BQb(a,b){var c,d,e,f,g,h;if(a.j==(RGb(),NGb)){c=Qob(Pob(kA(nub(a,(E2b(),t2b)),15).xc(),new Rmb(new MQb))).a==null?(jHc(),hHc):b;qub(a,b2b,c);if(c!=(jHc(),gHc)){d=kA(nub(a,i2b),14);h=Vpb(nA(nub(d,(J6b(),f5b))));g=0;if(c==fHc){g=a.n.b-$wnd.Math.ceil(h/2)}else if(c==hHc){a.n.b-=Vpb(nA(nub(uGb(a),m6b)));g=(a.n.b-$wnd.Math.ceil(h))/2}for(f=new ccb(a.i);f.a0){krb(i,false,(gBc(),cBc));krb(i,true,dBc)}wbb(b.g,new UWb(a,c));I8(a.g,b,c)} +function $yb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new ccb(a.f.e);e.a0&&a.d!=(kzb(),jzb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(kzb(),hzb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new Jyc(h/f,b.d.b);case 2:return new Jyc(b.d.a,i/f);default:return new Jyc(h/f,i/f);}} +function oTb(a){jTb();var b,c,d,e,f,g,h,i,j,k;this.b=new qTb;this.c=new Gbb;this.a=new Gbb;for(i=Qlc(),j=0,k=i.length;j0){for(g=0;g>16==-15&&a.Cb.Hg()&&o$c(new Nid(a.Cb,9,13,c,a.c,pcd(njd(kA(a.Cb,53)),a)))}else if(sA(a.Cb,96)){if(a.Db>>16==-23&&a.Cb.Hg()){b=a.c;sA(b,96)||(b=(j7c(),a7c));sA(c,96)||(c=(j7c(),a7c));o$c(new Nid(a.Cb,9,10,c,b,pcd(Ebd(kA(a.Cb,24)),a)))}}}}return a.c} +function xHd(a){UGd();var b,c,d,e,f;if(a.e!=4&&a.e!=5)throw x2(new O4('Token#complementRanges(): must be RANGE: '+a.e));uHd(a);rHd(a);d=a.b.length+2;a.b[0]==0&&(d-=2);c=a.b[a.b.length-1];c==TWd&&(d-=2);e=(++TGd,new wHd(4));e.b=tz(FA,OKd,22,d,15,1);f=0;if(a.b[0]>0){e.b[f++]=0;e.b[f++]=a.b[0]-1}for(b=1;b=65;c--){wEd[c]=c-65<<24>>24}for(d=122;d>=97;d--){wEd[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){wEd[e]=e-48+52<<24>>24}wEd[43]=62;wEd[47]=63;for(f=0;f<=25;f++)xEd[f]=65+f&AKd;for(g=26,i=0;g<=51;++g,i++)xEd[g]=97+i&AKd;for(a=52,h=0;a<=61;++a,h++)xEd[a]=48+h&AKd;xEd[62]=43;xEd[63]=47} +function iRb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.d;k=kA(nub(a,(E2b(),D2b)),15);l=0;if(k){i=0;for(f=k.tc();f.hc();){e=kA(f.ic(),8);i=$wnd.Math.max(i,e.n.b);l+=e.n.a}l+=b/2*(k._b()-1);g.d+=i+b}c=kA(nub(a,I1b),15);d=0;if(c){i=0;for(f=c.tc();f.hc();){e=kA(f.ic(),8);i=$wnd.Math.max(i,e.n.b);d+=e.n.a}d+=b/2*(c._b()-1);g.a+=i+b}h=$wnd.Math.max(l,d);if(h>a.n.a){j=(h-a.n.a)/2;g.b=$wnd.Math.max(g.b,j);g.c=$wnd.Math.max(g.c,j)}} +function H$b(a){var b,c,d,e,f,g,h;a.o=new qlb;d=new yib;for(g=new ccb(a.e.a);g.a0;h=AZb(b,f);c?RZb(h.b,b):RZb(h.g,b);OZb(h).c.length==1&&(pib(d,h,d.c.b,d.c),true);e=new fGc(f,b);plb(a.o,e);Abb(a.e.a,f)}} +function sjc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(hic(),gic)?vGb(b.b):zGb(b.b)):(e=a.a.c==(hic(),fic)?vGb(b.b):zGb(b.b));f=false;for(d=(Zn(),new Zo(Rn(Dn(e.a,new Hn))));So(d);){c=kA(To(d),14);g=Vpb(a.a.f[a.a.g[b.b.o].o]);if(!g&&!JEb(c)&&c.c.g.c==c.d.g.c){continue}if(Vpb(a.a.n[a.a.g[b.b.o].o])||Vpb(a.a.n[a.a.g[b.b.o].o])){continue}f=true;if(Hgb(a.b,a.a.g[kjc(c,b.b).o])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function CFc(a,b){var c,d,e,f,g,h,i;if(!mTc(a)){throw x2(new Q4(BSd))}d=mTc(a);f=d.g;e=d.f;if(f<=0&&e<=0){return FDc(),DDc}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return FDc(),EDc}else if(h+a.g>f){return FDc(),kDc}break;case 4:case 3:if(i<0){return FDc(),lDc}else if(i+a.f>e){return FDc(),CDc}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(FDc(),EDc):g+c>=1&&g-c>=0?(FDc(),kDc):c<0.5?(FDc(),lDc):(FDc(),CDc)} +function bDb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.Wb()){return new Hyc}j=0;l=0;for(e=a.tc();e.hc();){d=kA(e.ic(),31);f=d.e;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Vpb(nA(nub(kA(a.tc().ic(),31),(J6b(),J4b)))));m=0;n=0;i=0;c=b;for(h=a.tc();h.hc();){g=kA(h.ic(),31);k=g.e;if(m+k.a>j){m=0;n+=i+b;i=0}SCb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new Jyc(c+b,n+i+b)} +function m_c(a,b,c){var d,e,f,g,h,i,j,k;d=c._b();if(d==0){return false}else{if(a.ti()){j=a.ui();OXc(a,b,c);g=d==1?a.mi(3,null,c.tc().ic(),b,j):a.mi(5,null,c,b,j);if(a.qi()){h=d<100?null:new f_c(d);f=b+d;for(e=b;e1){for(d=sib(e,0);d.b!=d.d.c;){c=kA(Gib(d),202);f=0;for(i=new ccb(c.e);i.ah?1:-1:n8(a.a,b.a,f);if(e==-1){l=-i;k=g==i?q8(b.a,h,a.a,f):l8(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return y7(),x7}k=q8(a.a,f,b.a,h)}else{k=l8(a.a,f,b.a,h)}}j=new M7(l,k.length,k);A7(j);return j} +function B8(a){u8();var b,c,d,e;b=zA(a);if(a1000000){throw x2(new o3('power of ten too big'))}if(a<=jJd){return H7(G7(s8[1],b),b)}d=G7(s8[1],jJd);e=d;c=E2(a-jJd);b=zA(a%jJd);while(A2(c,jJd)>0){e=F7(e,d);c=R2(c,jJd)}e=F7(e,G7(s8[1],b));e=H7(e,jJd);c=E2(a-jJd);while(A2(c,jJd)>0){e=H7(e,jJd);c=R2(c,jJd)}e=H7(e,b);return e} +function hgc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=p$b(new r$b,a.f);j=a.i[b.c.g.o];n=a.i[b.d.g.o];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.k.b);n.b||(l+=m.k.b);k=zA($wnd.Math.max(0,h-l));g=zA($wnd.Math.max(0,l-h));o=(p=v5(1,kA(nub(b,(J6b(),g6b)),21).a),q=Vfc(b.c.g.j,b.d.g.j),p*q);e=DZb(GZb(FZb(EZb(HZb(new IZb,o),g),c),kA(F8(a.k,b.c),113)));f=DZb(GZb(FZb(EZb(HZb(new IZb,o),k),c),kA(F8(a.k,b.d),113)));d=new Bgc(e,f);a.c[b.o]=d} +function LIc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);QHc(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);RHc(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i>>0).toString(16);c='\\x'+j6(b,b.length-2,b.length)}else if(a>=sLd){b='0'+(a>>>0).toString(16);c='\\v'+j6(b,b.length-6,b.length)}else c=''+String.fromCharCode(a&AKd);}return c} +function emc(a){var b,c,d,e,f,g;Tlc(this);for(c=a._b()-1;c<3;c++){a.bd(0,kA(a.cd(0),9))}if(a._b()<4){throw x2(new O4('At (least dimension + 1) control points are necessary!'))}else{this.c=3;this.e=true;this.f=true;this.d=false;Ulc(this,a._b()+this.c-1);g=new Gbb;f=this.g.tc();for(b=0;b=0&&f!=c){throw x2(new O4(UTd))}}e=0;for(i=0;iVpb(Obc(g.g,g.d[0]).a)){Lpb(i.b>0);i.a.cd(i.c=--i.b);r9(i,g);e=true}else if(!!h.e&&h.e._b()>0){f=(!h.e&&(h.e=new Gbb),h.e).vc(b);j=(!h.e&&(h.e=new Gbb),h.e).vc(c);if(f||j){(!h.e&&(h.e=new Gbb),h.e).nc(g);++g.c}}}e||(d.c[d.c.length]=g,true)} +function Vwb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));f.e!=f.i._b();){e=kA($_c(f),35);g='';(!e.n&&(e.n=new zkd(LV,e,1,7)),e.n).i==0||(g=kA(kA(WXc((!e.n&&(e.n=new zkd(LV,e,1,7)),e.n),0),137),263).a);h=new pxb(g);lub(h,e);qub(h,(Byb(),zyb),e);h.b=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);tbb(b.e,h);Xgb(c.d,e,h);i=kA(AOc(e,(qyb(),hyb)),83);i==(VCc(),UCc)&&TCc}} +function sPb(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.g==b.g){return}e=new IGb(a);GGb(e,(RGb(),OGb));qub(e,(E2b(),i2b),c);qub(e,(J6b(),Z5b),(VCc(),QCc));d.c[d.c.length]=e;g=new lHb;jHb(g,e);kHb(g,(FDc(),EDc));h=new lHb;jHb(h,e);kHb(h,kDc);MEb(c,g);f=new PEb;lub(f,c);qub(f,p5b,null);LEb(f,h);MEb(f,b);vPb(e,g,h);j=new s9(c.b,0);while(j.b0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function ENb(a,b){var c,d,e,f,g,h,i,j,k;xEc(b,'Layer constraint edge reversal',1);for(g=new ccb(a.b);g.ac){zEc(b);return}switch(kA(nub(a,(J6b(),D6b)),319).g){case 2:f=new oZb;break;case 0:f=new iYb;break;default:f=new rZb;}d=f.sf(a,e);if(!f.tf()){switch(kA(nub(a,H6b),347).g){case 2:d=xZb(e,d);break;case 1:d=wZb(e,d);}}uZb(a,e,d);zEc(b)} +function v_c(a,b,c){var d,e,f,g;if(a.ti()){e=null;f=a.ui();d=a.mi(1,g=$Xc(a,b,c),c,b,f);if(a.qi()&&!(a.Bh()&&g!=null?kb(g,c):yA(g)===yA(c))){g!=null&&(e=a.si(g,null));e=a.ri(c,e);a.xi()&&(e=a.Ai(g,c,e));if(!e){a.ni(d)}else{e.Sh(d);e.Th()}}else{a.xi()&&(e=a.Ai(g,c,null));if(!e){a.ni(d)}else{e.Sh(d);e.Th()}}return g}else{g=$Xc(a,b,c);if(a.qi()&&!(a.Bh()&&g!=null?kb(g,c):yA(g)===yA(c))){e=null;g!=null&&(e=a.si(g,null));e=a.ri(c,e);!!e&&e.Th()}return g}} +function Abd(a){var b,c,d,e,f,g,h;if(!a.d){h=new Ded;b=tbd;f=b.a.Zb(a,b);if(f==null){for(d=new a0c(Kbd(a));d.e!=d.i._b();){c=kA($_c(d),24);gXc(h,Abd(c))}b.a.$b(a)!=null;b.a._b()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new zkd(tY,a,11,10)),new a0c(a.q));e.e!=e.i._b();++g){kA($_c(e),371)}gXc(h,(!a.q&&(a.q=new zkd(tY,a,11,10)),a.q));_Xc(h);a.d=new Vdd((kA(WXc(Ibd((P6c(),O6c).o),9),17),h.i),h.g);a.e=kA(h.g,611);a.e==null&&(a.e=ubd);Jbd(a).b&=-17}return a.d} +function Lud(a,b,c,d){var e,f,g,h,i,j;j=yyd(a.e.mg(),b);i=0;e=kA(a.g,124);wyd();if(kA(b,61).bj()){for(g=0;g1&&(i>WEc(h)*VEc(h)/2||g.b==0)){l=new _Ec(m);k=WEc(h)/VEc(h);j=MEc(l,b,new XGb,c,d,e,k);vyc(Cyc(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=tz(NE,oJd,1,0,5,1)}}}vbb(n,m);return n} +function BMb(a,b){var c,d,e,f,g,h,i,j,k;xEc(b,'Hierarchical port dummy size processing',1);i=new Gbb;k=new Gbb;d=Vpb(nA(nub(a,(J6b(),l6b))));c=d*2;for(f=new ccb(a.b);f.a=q&&a.e[i.o]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Gbb;pg(g,f);f.a.Pb();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new fGc(n,m)} +function vic(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=Oic(a);for(k=(h=(new G9(b)).a.Tb().tc(),new M9(h));k.a.hc();){j=(e=kA(k.a.ic(),38),kA(e.kc(),8));l=j.d.d;m=j.n.b+j.d.a;a.d[j.o]=0;c=j;while((f=a.a[c.o])!=j){d=Qic(c,f);a.c==(hic(),fic)?(i=d.d.k.b+d.d.a.b-d.c.k.b-d.c.a.b):(i=d.c.k.b+d.c.a.b-d.d.k.b-d.d.a.b);g=Vpb(a.d[c.o])+i;a.d[f.o]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.n.b+f.d.a);c=f}c=j;do{a.d[c.o]=Vpb(a.d[c.o])+l;c=a.a[c.o]}while(c!=j);a.b[j.o]=l+m}} +function xnc(a,b,c){var d,e,f,g,h,i,j,k,l,m;snc(this);c==(inc(),gnc)?Ggb(this.o,a):Ggb(this.t,a);k=oLd;j=pLd;for(g=b.a.Xb().tc();g.hc();){e=kA(g.ic(),48);h=kA(e.a,417);d=kA(e.b,14);i=d.c;i==a&&(i=d.d);h==gnc?Ggb(this.o,i):Ggb(this.t,i);m=Pyc(xz(pz(aU,1),cKd,9,0,[i.g.k,i.k,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=Pyc(xz(pz(aU,1),cKd,9,0,[a.g.k,a.k,a.a])).b;vnc(this,l,k,j);for(f=b.a.Xb().tc();f.hc();){e=kA(f.ic(),48);tnc(this,kA(e.b,14))}this.k=false} +function h7(a){var b,c,d,e;d=j8((!a.c&&(a.c=Y7(a.f)),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=g7(a)<0?1:0;c=a.e;e=(d.length+1+u5(zA(a.e)),new N6);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>X6.length;c-=X6.length){J6(e,X6)}K6(e,X6,zA(c));I6(e,d.substr(b,d.length-b))}else{c=b-c;I6(e,j6(d,b,zA(c)));e.a+='.';I6(e,i6(d,zA(c)))}}else{I6(e,d.substr(b,d.length-b));for(;c<-X6.length;c+=X6.length){J6(e,X6)}K6(e,X6,zA(-c))}return e.a} +function mId(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=tz(CA,yKd,22,f,15,1);Tpb(0,f,a.length);Tpb(0,f,i.length);_5(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e0?j6(c.a,0,f-1):''}}else{return !c?a:c.a}} +function nwc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new R9(a.c.b)).a.Tb().tc(),new W9(j));c.a.hc();){b=(h=kA(c.a.ic(),38),kA(h.lc(),180));e=b.a;e==null&&(e='');d=fwc(a.c,e);!d&&e.length==0&&(d=rwc(a));!!d&&!qg(d.c,b,false)&&mib(d.c,b)}for(g=sib(a.a,0);g.b!=g.d.c;){f=kA(Gib(g),436);k=gwc(a.c,f.a);n=gwc(a.c,f.b);!!k&&!!n&&mib(k.c,new fGc(n,f.c))}xib(a.a);for(m=sib(a.b,0);m.b!=m.d.c;){l=kA(Gib(m),436);b=cwc(a.c,l.a);i=gwc(a.c,l.b);!!b&&!!i&&Bvc(b,i,l.c)}xib(a.b)} +function Lkc(a,b,c){var d,e,f,g,h,i,j,k,l;i=c+b.c.c.a;for(l=new ccb(b.i);l.a1;for(h=new fIb(k.c);_bb(h.a)||_bb(h.b);){g=kA(_bb(h.a)?acb(h.a):acb(h.b),14);j=g.c==k?g.d:g.c;$wnd.Math.abs(Pyc(xz(pz(aU,1),cKd,9,0,[j.g.k,j.k,j.a])).b-f.b)>1&&Fkc(a,g,f,e,k)}}} +function Bbd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new ied;h=new ied;b=tbd;g=b.a.Zb(a,b);if(g==null){for(f=new a0c(Kbd(a));f.e!=f.i._b();){e=kA($_c(f),24);gXc(i,Bbd(e))}b.a.$b(a)!=null;b.a._b()==0&&undefined}for(d=(!a.s&&(a.s=new zkd(zY,a,21,17)),new a0c(a.s));d.e!=d.i._b();){c=kA($_c(d),158);sA(c,62)&&fXc(h,kA(c,17))}_Xc(h);a.r=new Aed(a,(kA(WXc(Ibd((P6c(),O6c).o),6),17),h.i),h.g);gXc(i,a.r);_Xc(i);a.f=new Vdd((kA(WXc(Ibd(O6c.o),5),17),i.i),i.g);Jbd(a).b&=-3}return a.f} +function jtb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=tz(FA,OKd,22,g,15,1);e=tz(FA,OKd,22,g,15,1);c=a.p;b=tz(FA,OKd,22,c,15,1);f=tz(FA,OKd,22,c,15,1);for(j=0;j=0&&!Qtb(a,k,l)){--l}e[k]=l}for(n=0;n=0&&!Qtb(a,h,o)){--h}f[o]=h}for(i=0;ib[m]&&md[i]&&Utb(a,i,m,false,true)}}} +function $Qc(){$Qc=d3;YQc=xz(pz(CA,1),yKd,22,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);ZQc=new RegExp('[ \t\n\r\f]+');try{XQc=xz(pz(hZ,1),oJd,1699,0,[new hhd((px(),rx("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",ux((tx(),tx(),sx))))),new hhd(rx("yyyy-MM-dd'T'HH:mm:ss'.'SSS",ux((null,sx)))),new hhd(rx("yyyy-MM-dd'T'HH:mm:ss",ux((null,sx)))),new hhd(rx("yyyy-MM-dd'T'HH:mm",ux((null,sx)))),new hhd(rx('yyyy-MM-dd',ux((null,sx))))])}catch(a){a=w2(a);if(!sA(a,78))throw x2(a)}} +function UYb(a,b){var c,d,e,f,g;f=new Vyc;switch(a.a.g){case 1:case 3:pg(f,b.e.a);mib(f,b.i.k);pg(f,Wr(b.j.a));mib(f,b.a.k);pg(f,b.f.a);break;default:pg(f,b.e.a);pg(f,Wr(b.j.a));pg(f,b.f.a);}xib(b.f.a);pg(b.f.a,f);LEb(b.f,b.e.c);c=kA(nub(b.e,(J6b(),p5b)),74);e=kA(nub(b.j,p5b),74);d=kA(nub(b.f,p5b),74);if(!!c||!!e||!!d){g=new Vyc;SYb(g,d);SYb(g,e);SYb(g,c);qub(b.f,p5b,g)}LEb(b.j,null);MEb(b.j,null);LEb(b.e,null);MEb(b.e,null);FGb(b.a,null);FGb(b.i,null);!!b.g&&UYb(a,b.g)} +function Gvb(a){owc(a,new Evc(Pvc(Mvc(Ovc(Nvc(new Rvc,SMd),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new Jvb)));mwc(a,SMd,TMd,CWc(Evb));mwc(a,SMd,UMd,CWc(yvb));mwc(a,SMd,VMd,CWc(tvb));mwc(a,SMd,WMd,CWc(zvb));mwc(a,SMd,rMd,CWc(Cvb));mwc(a,SMd,sMd,CWc(Bvb));mwc(a,SMd,qMd,CWc(Dvb));mwc(a,SMd,tMd,CWc(Avb));mwc(a,SMd,NMd,CWc(vvb));mwc(a,SMd,OMd,CWc(uvb));mwc(a,SMd,PMd,CWc(wvb));mwc(a,SMd,QMd,CWc(xvb))} +function $w(a,b,c){var d,e,f,g,h,i,j,k,l;g=new Yx;j=xz(pz(FA,1),OKd,22,15,[0]);e=-1;f=0;d=0;for(i=0;i0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!fx(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!fx(b,j,k,0,g)){return 0}}}else{e=-1;if(k.c.charCodeAt(0)==32){l=j[0];dx(b,j);if(j[0]>l){continue}}else if(h6(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!Xx(g,c)){return 0}return j[0]} +function Azb(a,b,c){var d,e,f,g,h;d=kA(nub(a,(J6b(),O4b)),19);c.a>b.a&&(d.pc((l_b(),f_b))?(a.c.a+=(c.a-b.a)/2):d.pc(h_b)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.pc((l_b(),j_b))?(a.c.b+=(c.b-b.b)/2):d.pc(i_b)&&(a.c.b+=c.b-b.b));if(kA(nub(a,(E2b(),X1b)),19).pc((Z0b(),S0b))&&(c.a>b.a||c.b>b.b)){for(h=new ccb(a.a);h.ab.a&&(d.pc((l_b(),f_b))?(a.c.a+=(c.a-b.a)/2):d.pc(h_b)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.pc((l_b(),j_b))?(a.c.b+=(c.b-b.b)/2):d.pc(i_b)&&(a.c.b+=c.b-b.b));if(kA(nub(a,(E2b(),X1b)),19).pc((Z0b(),S0b))&&(c.a>b.a||c.b>b.b)){for(g=new ccb(a.a);g.an||d+e>j){throw x2(new p3)}if((l.i&1)==0&&m!=i){k=lA(a);f=lA(c);if(yA(a)===yA(c)&&bd;){wz(f,h,k[--b])}}else{for(h=d+e;d0&&xpb(a,b,c,d,e,true)} +function azb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new Hjb(new qzb(c));h=tz(u2,$Md,22,a.f.e.c.length,16,1);wcb(h,h.length);c[b.b]=0;for(j=new ccb(a.f.e);j.a=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]=h?l8(a.a,f,b.a,h):l8(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:n8(a.a,b.a,f);if(e==0){return y7(),x7}if(e==1){m=g;l=q8(a.a,f,b.a,h)}else{m=i;l=q8(b.a,h,a.a,f)}}j=new M7(m,l.length,l);A7(j);return j} +function xAb(a,b){var c,d,e,f,g,h;for(g=new e9((new X8(a.f.b)).a);g.b;){f=c9(g);e=kA(f.kc(),536);if(b==1){if(e.Je()!=(gBc(),fBc)&&e.Je()!=bBc){continue}}else{if(e.Je()!=(gBc(),cBc)&&e.Je()!=dBc){continue}}d=kA(kA(f.lc(),48).b,80);h=kA(kA(f.lc(),48).a,172);c=h.c;switch(e.Je().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function NFb(a,b,c,d){var e,f,g,h,i,j,k;f=PFb(d);h=Vpb(mA(nub(d,(J6b(),z5b))));if((h||Vpb(mA(nub(a,l5b))))&&!XCc(kA(nub(a,Z5b),83))){e=IDc(f);i=VFb(a,c,c==(U7b(),S7b)?e:GDc(e))}else{i=new lHb;jHb(i,a);if(b){k=i.k;k.a=b.a-a.k.a;k.b=b.b-a.k.b;wyc(k,0,0,a.n.a,a.n.b);kHb(i,JFb(i,f))}else{e=IDc(f);kHb(i,c==(U7b(),S7b)?e:GDc(e))}g=kA(nub(d,(E2b(),X1b)),19);j=i.i;switch(f.g){case 2:case 1:(j==(FDc(),lDc)||j==CDc)&&g.nc((Z0b(),W0b));break;case 4:case 3:(j==(FDc(),kDc)||j==EDc)&&g.nc((Z0b(),W0b));}}return i} +function zfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=tz(FA,OKd,22,b.b.c.length,15,1);j=tz(QK,jKd,232,b.b.c.length,0,1);i=tz(RK,VNd,8,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m0&&!!i[d]&&(o=l8b(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new ccb(k.f);f.a'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';whd(a.b,b)}else{if(a.f){b.a+=' extends ';whd(a.f,b)}}}} +function ezb(a,b){var c,d,e,f,g,h,i,j;a.f=b;a.d=kA(nub(a.f,(Ryb(),Myb)),348);a.g=kA(nub(a.f,Qyb),21).a;a.e=Vpb(nA(nub(a.f,Nyb)));a.c=Vpb(nA(nub(a.f,Lyb)));Up(a.b);for(d=new ccb(a.f.c);d.a=0){return false}else if(!!c.e&&e==(RGb(),KGb)&&e!=c.e){return false}else{b.o=c.b;tbb(c.f,b)}c.e=e;if(e==(RGb(),OGb)||e==QGb||e==KGb){for(g=new ccb(b.i);g.a0&&d<=e){j-=d;f=h;g=h}else{a.a==null&&bZb(a);if(a.a[g]){j+=e;f=g}}if(f>0){tbb(l,d5(f));h=-1;k=false;do{if(c.hc()){i=d5(kA(c.ic(),21).a+j)}else{break m}}while(i.a<=g)}}else{a.a==null&&bZb(a);a.a[g]&&(h=g);if(g==i.a){a.a==null&&bZb(a);if(a.a[g]){l.c[l.c.length]=i;h=-1;if(c.hc()){i=d5(kA(c.ic(),21).a+j)}else{break}}else{k=true}}}++g}return l} +function bQc(a){var b,c,d,e;if((a.Db&64)!=0)return bPc(a);b=new O6(QSd);d=a.k;if(!d){!a.n&&(a.n=new zkd(LV,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new zkd(LV,a,1,7)),kA(kA(WXc(a.n,0),137),263)).a;!e||I6(I6((b.a+=' "',b),e),'"')}}else{I6(I6((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new pxd(HV,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new pxd(HV,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);I6(b,zb(new Cb(qJd),new a0c(a.b)));c&&(b.a+=']',b);b.a+=' -> ';c&&(b.a+='[',b);I6(b,zb(new Cb(qJd),new a0c(a.c)));c&&(b.a+=']',b);return b.a} +function iKb(a){var b,c,d,e,f,g;e=new Gbb;for(g=new ccb(a.c.i);g.aa.n.b){return false}c=AGb(a,kDc);h=b.d+b.a+(c._b()-1)*g;if(h>a.n.b){return false}}return true} +function rjc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(pic(),oic)?oLd:pLd;h=sjc(a,new qjc(b,c));if(!h.a&&h.c){mib(a.c,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(hic(),gic)?i:e;f=a.a.c==gic?e:i;g=a.a.g[f.g.o];k=Vpb(a.a.p[g.o])+Vpb(a.a.d[f.g.o])+f.k.b+f.a.b-Vpb(a.a.d[j.g.o])-j.k.b-j.a.b}else{j=a.a.c==(hic(),fic)?i:e;f=a.a.c==fic?e:i;k=Vpb(a.a.p[a.a.g[f.g.o].o])+Vpb(a.a.d[f.g.o])+f.k.b+f.a.b-Vpb(a.a.d[j.g.o])-j.k.b-j.a.b}a.a.n[a.a.g[e.g.o].o]=(B3(),B3(),true);a.a.n[a.a.g[i.g.o].o]=(null,true);return k}return d} +function lEb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Vpb(mA(nub(b,(J6b(),A5b))));m=null;f==(U7b(),R7b)&&d.c.g==c?(m=d.c):f==S7b&&d.d.g==c&&(m=d.d);j=g;if(!g||!l||!!m){k=(FDc(),DDc);m?(k=m.i):XCc(kA(nub(c,Z5b),83))&&(k=f==R7b?EDc:kDc);i=iEb(a,b,c,f,k,d);h=hEb((uGb(c),d));if(f==R7b){LEb(h,kA(xbb(i.i,0),11));MEb(h,e)}else{LEb(h,e);MEb(h,kA(xbb(i.i,0),11))}j=new vEb(d,h,i,kA(nub(i,(E2b(),i2b)),11),f,!m)}else{tbb(g.e,d);n=$wnd.Math.max(Vpb(nA(nub(g.d,f5b))),Vpb(nA(nub(d,f5b))));qub(g.d,f5b,n)}Le(a.a,d,new yEb(j.d,b,f));return j} +function Wqc(a,b){var c,d,e,f,g,h,i,j,k,l;qub(b,(Ppc(),Fpc),0);i=kA(nub(b,Dpc),76);if(b.d.b==0){if(i){k=Vpb(nA(nub(i,Ipc)))+a.a+Xqc(i,b);qub(b,Ipc,k)}else{qub(b,Ipc,0)}}else{for(d=(f=sib((new Aoc(b)).a.d,0),new Doc(f));Fib(d.a);){c=kA(Gib(d.a),170).c;Wqc(a,c)}h=kA(jo((g=sib((new Aoc(b)).a.d,0),new Doc(g))),76);l=kA(io((e=sib((new Aoc(b)).a.d,0),new Doc(e))),76);j=(Vpb(nA(nub(l,Ipc)))+Vpb(nA(nub(h,Ipc))))/2;if(i){k=Vpb(nA(nub(i,Ipc)))+a.a+Xqc(i,b);qub(b,Ipc,k);qub(b,Fpc,Vpb(nA(nub(b,Ipc)))-j);Vqc(a,b)}else{qub(b,Ipc,j)}}} +function MMb(a,b){var c,d,e,f,g,h,i,j,k;j=kA(nub(a,(E2b(),V1b)),69);d=kA(xbb(a.i,0),11);j==(FDc(),lDc)?kHb(d,CDc):j==CDc&&kHb(d,lDc);if(kA(nub(b,(J6b(),J5b)),185).pc((bEc(),aEc))){i=Vpb(nA(nub(a,s6b)));g=Vpb(nA(nub(a,q6b)));h=kA(nub(b,a6b),275);if(h==(eDc(),cDc)){c=i;k=a.n.a/2-d.k.a;for(f=new ccb(d.e);f.a0&&d>=-6){if(d>=0){L6(f,c-zA(a.e),String.fromCharCode(46))}else{f.a=j6(f.a,0,b-1)+'0.'+i6(f.a,b-1);L6(f,b+1,r6(X6,0,-zA(d)-1))}}else{if(c-b>=1){L6(f,b,String.fromCharCode(46));++c}L6(f,c,String.fromCharCode(69));d>0&&L6(f,++c,String.fromCharCode(43));L6(f,++c,''+V2(E2(d)))}a.g=f.a;return a.g} +function acc(a,b,c){var d,e,f,g;this.j=a;this.e=REb(a);this.o=kA(nub(this.j,(E2b(),n2b)),8);this.i=!!this.o;this.p=this.i?kA(xbb(c,uGb(this.o).o),204):null;e=kA(nub(a,X1b),19);this.g=e.pc((Z0b(),S0b));this.b=new Gbb;this.d=new Rdc(this.e);g=kA(nub(this.j,s2b),214);this.q=rcc(b,g,this.e);this.k=new qdc(this);f=Sr(xz(pz(yQ,1),oJd,208,0,[this,this.d,this.k,this.q]));if(b==(cdc(),_cc)){d=new Pbc(this.e);f.c[f.c.length]=d;this.c=new ubc(d,g,kA(this.q,422))}else{this.c=new MXb(b,this)}tbb(f,this.c);afc(f,this.e);this.s=pdc(this.k)} +function xsb(a,b){var c,d,e,f;c=new Csb;d=kA(Nob(Tob(new Zob(null,new ekb(a.f,16)),c),Tmb(new unb,new wnb,new Nnb,new Pnb,xz(pz($G,1),jKd,150,0,[(Ymb(),Xmb),Wmb]))),19);e=d._b();e=e==2?1:0;e==1&&D2(I2(kA(Nob(Pob(d.uc(),new Esb),mnb(r5(0),new Bnb)),149).a,2),0)&&(e=0);d=kA(Nob(Tob(new Zob(null,new ekb(b.f,16)),c),Tmb(new unb,new wnb,new Nnb,new Pnb,xz(pz($G,1),jKd,150,0,[Xmb,Wmb]))),19);f=d._b();f=f==2?1:0;f==1&&D2(I2(kA(Nob(Pob(d.uc(),new Gsb),mnb(r5(0),new Bnb)),149).a,2),0)&&(f=0);if(e=a.b[e+1]){e+=2}else if(c0){d=new Ibb(kA(Ke(a.a,f),19));bdb();Dbb(d,new BEb(b));e=new s9(f.b,0);while(e.b=sLd?w6(c,pGd(d)):s6(c,d&AKd);g=(++TGd,new dId(10,null,0));Tkb(a.a,g,h-1)}else{c=(g.ll().length+f,new A6);w6(c,g.ll())}if(b.e==0){d=b.jl();d>=sLd?w6(c,pGd(d)):s6(c,d&AKd)}else{w6(c,b.ll())}kA(g,474).b=c.a} +function bRb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;xEc(b,'Edge splitting',1);if(a.b.c.length<=2){zEc(b);return}f=new s9(a.b,0);g=(Lpb(f.bv)){i=2;g=jJd}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A0){e=d+(o-1)*c;!!l&&(e+=d);e0){Rw(a,c,0);c.a+=String.fromCharCode(d);e=Ww(b,f);Rw(a,c,e);f+=e-1;continue}if(d==39){if(f+10){b=new u1c(a.i,a.g);c=a.i;f=c<100?null:new f_c(c);if(a.xi()){for(d=0;d0){h=a.g;j=a.i;UXc(a);f=j<100?null:new f_c(j);for(d=0;d0){b=new eYc(a.Uh());e=i<100?null:new f_c(i);dZc(a,i,b.g);d=i==1?a.mi(4,WXc(b,0),null,0,h):a.mi(6,b,null,-1,h);if(a.qi()){for(c=new a0c(b);c.e!=c.i._b();){e=a.si($_c(c),e)}if(!e){a.ni(d)}else{e.Sh(d);e.Th()}}else{if(!e){a.ni(d)}else{e.Sh(d);e.Th()}}}else{dZc(a,a.hi(),a.ii());a.ni(a.mi(6,(bdb(),$cb),null,-1,h))}}else if(a.qi()){i=a.hi();if(i>0){g=a.ii();dZc(a,i,g);e=i<100?null:new f_c(i);for(c=0;c>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&cLd;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=cLd;u+=p>>22;p&=cLd;u&=dLd;return Cz(m,p,u)} +function Mzb(a,b){var c,d,e,f,g;c=Vpb(nA(nub(b,(J6b(),k6b))));c<2&&qub(b,k6b,2);d=kA(nub(b,W4b),110);d==(gBc(),eBc)&&qub(b,W4b,PFb(b));e=kA(nub(b,h6b),21);e.a==0?qub(b,(E2b(),s2b),new akb):qub(b,(E2b(),s2b),new bkb(e.a));f=mA(nub(b,E5b));f==null&&qub(b,E5b,(B3(),yA(nub(b,a5b))===yA((DBc(),zBc))?true:false));g=new r8b(b);qub(b,(E2b(),v2b),g);Wuc(a.a);Zuc(a.a,(Wzb(),Rzb),kA(nub(b,U4b),285));Zuc(a.a,Szb,kA(nub(b,w5b),285));Zuc(a.a,Tzb,kA(nub(b,T4b),285));Zuc(a.a,Uzb,kA(nub(b,I5b),285));Zuc(a.a,Vzb,Djc(kA(nub(b,a5b),197)));Tuc(a.a,Lzb(b));qub(b,r2b,Uuc(a.a,b))} +function SMc(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=c.charCodeAt(j);if(i==93){h=b6(c,o6(91));if(h>=0){f=WMc(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return QMc(b,l,f)}}else{d=-1;if(/\d/.test(String.fromCharCode(i))){d=e6(c,o6(46),j-1);if(d>=0){e=kA(JMc(b,_Mc(b,c.substr(1,d-1)),false),52);try{k=H3(c.substr(d+1,c.length-(d+1)),oKd,jJd)}catch(a){a=w2(a);if(sA(a,118)){g=a;throw x2(new t6c(g))}else throw x2(a)}if(k4){if(a.Li(b)){if(a.Dj()){e=kA(b,42);d=e.ng();i=d==a.e&&(a.Pj()?e.hg(e.og(),a.Lj())==a.Mj():-1-e.og()==a.pi());if(a.Qj()&&!i&&!d&&!!e.sg()){for(f=0;f=q-1){return null}e=new Gbb;e.c[e.c.length]=b;u=b;g=c;o=-1;h=kA(xbb(a.d.c.b,c),26);for(n=0;n1&&g0&&(j=a.k.a/f);break;case 2:case 4:e=a.g.n.b;e>0&&(j=a.k.b/e);}qub(a,(E2b(),q2b),j)}i=a.n;g=a.a;if(d){g.a=d.a;g.b=d.b;a.b=true}else if(b!=TCc&&b!=UCc&&h!=DDc){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function YJb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;xEc(c,dOd,1);a.c=b;m=a.c.a;f=0;for(j=new ccb(m);j.ao){n=1;e=h.n.a;while(e>g){++n;e=(h.n.a-(n-1)*a.d)/n}tbb(d,new aKb(a,h,n,e))}}for(i=new ccb(d);i.a1&&WEc(g)*VEc(g)/2>h[0]){f=0;while(fh[f]){++f}o=new A9(p,0,f+1);l=new _Ec(o);k=WEc(g)/VEc(g);i=MEc(l,b,new XGb,c,d,e,k);vyc(Cyc(l.e),i);Spb(Djb(m,l));n=new A9(p,f+1,p.c.length);Ajb(m,n);p.c=tz(NE,oJd,1,0,5,1);j=0;tcb(h,h.length,0)}else{q=m.b.c.length==0?null:xbb(m.b,0);q!=null&&Gjb(m,0);j>0&&(h[j]=h[j-1]);h[j]+=WEc(g)*VEc(g);++j;p.c[p.c.length]=g}}return p} +function Uuc(a,b){var c,d,e,f,g,h,i,j,k,l,m;if(a.e&&a.c.c0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;rq.a-p-k&&(r=q.a-p-k);h.k.a=b+r}} +function SQb(a,b){var c,d,e,f,g;for(g=new ccb(a.i);g.a0&&i9b(a,h,l)}for(e=new ccb(l);e.a0){a.a=i+(n-1)*f;b.c.b+=a.a;b.e.b+=a.a}}if(o.a._b()!=0){m=new Vjc(1,f);n=Ujc(m,b,o,p,b.e.b+i-b.c.b);n>0&&(b.e.b+=i+(n-1)*f)}} +function Dz(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw x2(new o3('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(zz=Cz(0,0,0));return Cz(0,0,0)}if(b.h==eLd&&b.m==0&&b.l==0){return Ez(a,c)}i=false;if(b.h>>19!=0){b=Sz(b);i=true}g=Kz(b);f=false;e=false;d=false;if(a.h==eLd&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=Bz((fA(),bA));d=true;i=!i}else{h=Wz(a,g);i&&Iz(h);c&&(zz=Cz(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=Sz(a);d=true;i=!i}if(g!=-1){return Fz(a,g,i,f,c)}if(Pz(a,b)<0){c&&(f?(zz=Sz(a)):(zz=Cz(a.l,a.m,a.h)));return Cz(0,0,0)}return Gz(d?a:Cz(a.l,a.m,a.h),b,i,f,e,c)} +function Mvb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=Lub(a.e);l=Dyc(Fyc(xyc(Kub(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new ccb(j);i.a=0){return c}switch(_td(rtd(a,c))){case 2:{if(Z5('',ptd(a,c.Wi()).be())){i=cud(rtd(a,c));h=bud(rtd(a,c));k=std(a,b,i,h);if(k){return k}e=gtd(a,b);for(g=0,l=e._b();gb.e||b.f>a.e){return}c=0;d=0;for(g=a.t.a.Xb().tc();g.hc();){e=kA(g.ic(),11);Cnc(Pyc(xz(pz(aU,1),cKd,9,0,[e.g.k,e.k,e.a])).b,b.f,b.e)&&++c}for(h=a.o.a.Xb().tc();h.hc();){e=kA(h.ic(),11);Cnc(Pyc(xz(pz(aU,1),cKd,9,0,[e.g.k,e.k,e.a])).b,b.f,b.e)&&--c}for(i=b.t.a.Xb().tc();i.hc();){e=kA(i.ic(),11);Cnc(Pyc(xz(pz(aU,1),cKd,9,0,[e.g.k,e.k,e.a])).b,a.f,a.e)&&++d}for(f=b.o.a.Xb().tc();f.hc();){e=kA(f.ic(),11);Cnc(Pyc(xz(pz(aU,1),cKd,9,0,[e.g.k,e.k,e.a])).b,a.f,a.e)&&--d}if(c0&&c.charCodeAt(0)!=47)){throw x2(new O4('invalid opaquePart: '+c))}if(a&&!(b!=null&&Udb(I5c,b.toLowerCase()))&&!(c==null||!Q5c(c,E5c,F5c))){throw x2(new O4(UUd+c))}if(a&&b!=null&&Udb(I5c,b.toLowerCase())&&!g6c(c)){throw x2(new O4(UUd+c))}if(!h6c(d)){throw x2(new O4('invalid device: '+d))}if(!j6c(e)){g=e==null?'invalid segments: null':'invalid segment: '+X5c(e);throw x2(new O4(g))}if(!(f==null||b6(f,o6(35))==-1)){throw x2(new O4('invalid query: '+f))}} +function hxc(b,c){var d;if(c==null||Z5(c,mJd)){return null}if(c.length==0&&b.k!=(Uxc(),Pxc)){return null}switch(b.k.g){case 1:return $5(c,TRd)?(B3(),A3):$5(c,URd)?(B3(),z3):null;case 2:try{return d5(H3(c,oKd,jJd))}catch(a){a=w2(a);if(sA(a,118)){return null}else throw x2(a)}case 4:try{return G3(c)}catch(a){a=w2(a);if(sA(a,118)){return null}else throw x2(a)}case 3:return c;case 5:cxc(b);return fxc(b,c);case 6:cxc(b);return gxc(b,b.a,c);case 7:try{d=exc(b);d.gf(c);return d}catch(a){a=w2(a);if(sA(a,30)){return null}else throw x2(a)}default:throw x2(new Q4('Invalid type set for this layout option.'));}} +function XVb(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new ccb(a.d.b);g.a0&&krb(j,true,(gBc(),dBc));h.j==(RGb(),MGb)&&lrb(j);I8(a.f,h,b)}}} +function tud(a,b,c){var d,e,f,g,h,i,j,k;if(c._b()==0){return false}h=(wyd(),kA(b,61).bj());f=h?c:new dYc(c._b());if(zyd(a.e,b)){if(b.xh()){for(j=c.tc();j.hc();){i=j.ic();if(!Eud(a,b,i,sA(b,62)&&(kA(kA(b,17),62).Bb&sLd)!=0)){e=xyd(b,i);f.pc(e)||f.nc(e)}}}else if(!h){for(j=c.tc();j.hc();){i=j.ic();e=xyd(b,i);f.nc(e)}}}else{if(c._b()>1){throw x2(new O4(nWd))}k=yyd(a.e.mg(),b);d=kA(a.g,124);for(g=0;g1&&g>1){k=hKb(a,u);h=kA(xbb(a.d.c.b,g),26);l=kA(xbb(a.d.c.b,g-1),26);w=kA(p.cd(m++),21).a;r=x5(w,l.a.c.length);EGb(u,r,l);EGb(k,t,h);t=r;!!u&&(e.c[e.c.length]=u,true);u=k;--v;++f;--g}s=(d-(e.c.length-1)*a.d.d)/e.c.length;for(j=new ccb(e);j.a0&&lKc(a,b,false,false,e);l=kKc(a,b,true,false)}else{lKc(a,b,false,i,0);l=kKc(a,b,true,false)}}else{if(k){h=kA(kA(Ke(a.r,b),19),60)._b();f=iKc(a,b);l=f*h+a.u*(h-1);f>0&&lKc(a,b,true,false,f)}else{lKc(a,b,true,false,0);l=kKc(a,b,true,true)}}kJc(a,b)==(JCc(),GCc)&&(l+=2*a.u);c.a.a=l} +function nLc(a,b){var c,d,e,f,g,h,i,j,k,l;c=kA(Cfb(a.b,b),114);if(kA(kA(Ke(a.r,b),19),60).Wb()){c.n.d=0;c.n.a=0;return}c.n.d=a.A.d;c.n.a=a.A.a;e=a.v.pc((bEc(),aEc));k=kA(kA(Ke(a.r,b),19),60)._b()==2;h=a.t==(eDc(),dDc);j=a.w.pc((qEc(),oEc));l=a.w.pc(pEc);d=0;if(!e||k&&h){d=rLc(a,b,false,false)}else if(h){if(l){f=qLc(a,b,j);f>0&&sLc(a,b,f,false,false);d=rLc(a,b,true,false)}else{sLc(a,b,0,false,j);d=rLc(a,b,true,false)}}else{if(l){i=kA(kA(Ke(a.r,b),19),60)._b();g=pLc(a,b);d=g*i+a.u*(i-1);g>0&&sLc(a,b,g,true,false)}else{sLc(a,b,0,true,false);d=rLc(a,b,true,true)}}kJc(a,b)==(JCc(),GCc)&&(d+=2*a.u);c.a.b=d} +function qAd(){qAd=d3;Uzd=(Tzd(),Szd).b;Xzd=kA(WXc(Ibd(Szd.b),0),29);Vzd=kA(WXc(Ibd(Szd.b),1),29);Wzd=kA(WXc(Ibd(Szd.b),2),29);fAd=Szd.bb;kA(WXc(Ibd(Szd.bb),0),29);kA(WXc(Ibd(Szd.bb),1),29);hAd=Szd.fb;iAd=kA(WXc(Ibd(Szd.fb),0),29);kA(WXc(Ibd(Szd.fb),1),29);kA(WXc(Ibd(Szd.fb),2),17);kAd=Szd.qb;nAd=kA(WXc(Ibd(Szd.qb),0),29);kA(WXc(Ibd(Szd.qb),1),17);kA(WXc(Ibd(Szd.qb),2),17);lAd=kA(WXc(Ibd(Szd.qb),3),29);mAd=kA(WXc(Ibd(Szd.qb),4),29);pAd=kA(WXc(Ibd(Szd.qb),6),29);oAd=kA(WXc(Ibd(Szd.qb),5),17);Yzd=Szd.j;Zzd=Szd.k;$zd=Szd.q;_zd=Szd.w;aAd=Szd.B;bAd=Szd.A;cAd=Szd.C;dAd=Szd.D;eAd=Szd._;gAd=Szd.cb;jAd=Szd.hb} +function Zac(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.tc();l.hc();){k=kA(l.ic(),11);h=k.i==(FDc(),lDc)||k.i==CDc;n=0;if(h){m=kA(nub(k,(E2b(),p2b)),8);if(!m){continue}n+=Uac(a,d,k,m)}else{for(j=new ccb(k.f);j.a0){a.f[k.o]=n/(k.d.c.length+k.f.c.length);a.c=$wnd.Math.min(a.c,a.f[k.o]);a.b=$wnd.Math.max(a.b,a.f[k.o])}else h&&(a.f[k.o]=n)}} +function wBd(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function Lic(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=tz(FA,OKd,22,p,15,1);l=0;for(k=new ccb(b.b);k.ag)&&Ggb(a.c,kA(q.b,14))}}++h}f=g}}}} +function I$c(a){var b;switch(a.d){case 1:{if(a.wi()){return a.o!=-2}break}case 2:{if(a.wi()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.vi();switch(a.p){case 0:return b!=null&&Vpb(mA(b))!=L2(a.k,0);case 1:return b!=null&&kA(b,192).a!=U2(a.k)<<24>>24;case 2:return b!=null&&kA(b,159).a!=(U2(a.k)&AKd);case 6:return b!=null&&L2(kA(b,149).a,a.k);case 5:return b!=null&&kA(b,21).a!=U2(a.k);case 7:return b!=null&&kA(b,168).a!=U2(a.k)<<16>>16;case 3:return b!=null&&Vpb(nA(b))!=a.j;case 4:return b!=null&&kA(b,126).a!=a.j;default:return b==null?a.n!=null:!kb(b,a.n);}} +function Wad(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;Kad(a,null)}else{a.F=(Npb(b),b);d=b6(b,o6(60));if(d!=-1){e=b.substr(0,d);b6(b,o6(46))==-1&&!Z5(e,gJd)&&!Z5(e,kVd)&&!Z5(e,lVd)&&!Z5(e,mVd)&&!Z5(e,nVd)&&!Z5(e,oVd)&&!Z5(e,pVd)&&!Z5(e,qVd)&&(e=rVd);c=d6(b,o6(62));c!=-1&&(e+=''+b.substr(c+1,b.length-(c+1)));Kad(a,e)}else{e=b;if(b6(b,o6(46))==-1){d=b6(b,o6(91));d!=-1&&(e=b.substr(0,d));if(!Z5(e,gJd)&&!Z5(e,kVd)&&!Z5(e,lVd)&&!Z5(e,mVd)&&!Z5(e,nVd)&&!Z5(e,oVd)&&!Z5(e,pVd)&&!Z5(e,qVd)){e=rVd;d!=-1&&(e+=''+b.substr(d,b.length-d))}else{e=b}}Kad(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&vMc(a,new Mid(a,1,5,f,b))} +function gCb(a){bCb();var b,c,d,e,f,g,h;h=new dCb;for(c=new ccb(a);c.a=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new kCb((OBb(),KBb));PCb(a,_Bb,new Rcb(xz(pz(jK,1),oJd,341,0,[d])));g=new kCb(NBb);PCb(a,$Bb,new Rcb(xz(pz(jK,1),oJd,341,0,[g])));e=new kCb(LBb);PCb(a,ZBb,new Rcb(xz(pz(jK,1),oJd,341,0,[e])));f=new kCb(MBb);PCb(a,YBb,new Rcb(xz(pz(jK,1),oJd,341,0,[f])));eCb(d.c,KBb);eCb(e.c,LBb);eCb(f.c,MBb);eCb(g.c,NBb);h.a.c=tz(NE,oJd,1,0,5,1);vbb(h.a,d.c);vbb(h.a,Wr(e.c));vbb(h.a,f.c);vbb(h.a,Wr(g.c));return h} +function Ved(a,b,c){var d,e,f,g;if(a.Rj()&&a.Qj()){g=Wed(a,kA(c,51));if(yA(g)!==yA(c)){a.ai(b);a.gi(b,Xed(a,b,g));if(a.Dj()){f=(e=kA(c,42),a.Pj()?a.Nj()?e.Cg(a.b,Wkd(kA(Gbd(RNc(a.b),a.pi()),17)).n,kA(Gbd(RNc(a.b),a.pi()).jj(),24).Qi(),null):e.Cg(a.b,Mbd(e.mg(),Wkd(kA(Gbd(RNc(a.b),a.pi()),17))),null,null):e.Cg(a.b,-1-a.pi(),null,null));!kA(g,42).yg()&&(f=(d=kA(g,42),a.Pj()?a.Nj()?d.Ag(a.b,Wkd(kA(Gbd(RNc(a.b),a.pi()),17)).n,kA(Gbd(RNc(a.b),a.pi()).jj(),24).Qi(),f):d.Ag(a.b,Mbd(d.mg(),Wkd(kA(Gbd(RNc(a.b),a.pi()),17))),null,f):d.Ag(a.b,-1-a.pi(),null,f)));!!f&&f.Th()}PMc(a.b)&&a.ni(a.mi(9,c,g,b,false));return g}}return c} +function XYb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Vpb(nA(nub(a,(J6b(),n6b))));d=Vpb(nA(nub(a,z6b)));m=new aGc;qub(m,n6b,k+d);j=b;r=b.d;p=b.c.g;s=b.d.g;q=kIb(p.c);t=kIb(s.c);e=new Gbb;for(l=q;l<=t;l++){h=new IGb(a);GGb(h,(RGb(),OGb));qub(h,(E2b(),i2b),j);qub(h,Z5b,(VCc(),QCc));qub(h,p6b,m);n=kA(xbb(a.b,l),26);l==q?EGb(h,n.a.c.length-c,n):FGb(h,n);u=Vpb(nA(nub(j,f5b)));if(u<0){u=0;qub(j,f5b,u)}h.n.b=u;o=$wnd.Math.floor(u/2);g=new lHb;kHb(g,(FDc(),EDc));jHb(g,h);g.k.b=o;i=new lHb;kHb(i,kDc);jHb(i,h);i.k.b=o;MEb(j,g);f=new PEb;lub(f,j);qub(f,p5b,null);LEb(f,i);MEb(f,r);YYb(h,j,f);e.c[e.c.length]=f;j=f}return e} +function fAb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new HAb(egb(gU));for(d=new ccb(b.a);d.a0){p=(Mpb(0,i.c.length),kA(i.c[0],14));e=(Mpb(0,n.c.length),kA(n.c[0],14));s=e.d.d;f=ybb(s,e,0);NEb(p,e.d,f);LEb(e,null);MEb(e,null);o=p.a;b&&mib(o,new Kyc(t));for(d=sib(e.a,0);d.b!=d.d.c;){c=kA(Gib(d),9);mib(o,new Kyc(c))}r=p.b;for(m=new ccb(e.b);m.a0?Wbc(this,this.f/this.a):Obc(b.g,b.d[0]).a!=null&&Obc(c.g,c.d[0]).a!=null?Wbc(this,(Vpb(Obc(b.g,b.d[0]).a)+Vpb(Obc(c.g,c.d[0]).a))/2):Obc(b.g,b.d[0]).a!=null?Wbc(this,Obc(b.g,b.d[0]).a):Obc(c.g,c.d[0]).a!=null&&Wbc(this,Obc(c.g,c.d[0]).a)} +function lJc(a){var b;this.r=vv(new oJc,new sJc);this.b=(Es(),new Hfb(kA(Pb(rU),274)));this.p=new Hfb(kA(Pb(rU),274));this.i=new Hfb(kA(Pb(nV),274));this.e=a;this.o=new Kyc(a.Re());this.B=a.bf()||Vpb(mA(a.xe(($Ac(),Yzc))));this.v=kA(a.xe(($Ac(),hAc)),19);this.w=kA(a.xe(lAc),19);this.q=kA(a.xe(BAc),83);this.t=kA(a.xe(FAc),275);this.j=kA(a.xe(fAc),19);this.n=kA(bGc(a,dAc),119);this.k=Vpb(nA(bGc(a,UAc)));this.d=Vpb(nA(bGc(a,TAc)));this.u=Vpb(nA(bGc(a,ZAc)));this.s=Vpb(nA(bGc(a,VAc)));this.A=kA(bGc(a,XAc),135);this.c=2*this.d;b=!this.w.pc((qEc(),hEc));this.f=new QIc(0,b,0);this.g=new QIc(1,b,0);PIc(this.f,(KHc(),IHc),this.g)} +function hwc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(b==null||b.length==0){return null}f=kA(G8(a.f,b),27);if(!f){for(e=(m=(new R9(a.d)).a.Tb().tc(),new W9(m));e.a.hc();){c=(g=kA(e.a.ic(),38),kA(g.lc(),27));h=c.f;n=b.length;if(Z5(h.substr(h.length-n,n),b)&&(b.length==h.length||X5(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(l=(new R9(a.d)).a.Tb().tc(),new W9(l));d.a.hc();){c=(g=kA(d.a.ic(),38),kA(g.lc(),27));k=c.g;if(k!=null){for(i=0,j=k.length;i=1){if(q-g>0&&l>=0){i.k.a+=p;i.k.b+=f*g}else if(q-g<0&&k>=0){i.k.a+=p*q;i.k.b+=f}}}a.n.a=b.a;a.n.b=b.b;qub(a,(J6b(),J5b),(bEc(),d=kA(e4(uU),10),new ngb(d,kA(ypb(d,d.length),10),0)))} +function nRb(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.f[b.o];k=b.n.b+a.n;c=a.c[b.o][2];Cbb(a.a,j,d5(kA(xbb(a.a,j),21).a-1+c));Cbb(a.b,j,Vpb(nA(xbb(a.b,j)))-k+c*a.e);++j;if(j>=a.i){++a.i;tbb(a.a,d5(1));tbb(a.b,k)}else{d=a.c[b.o][1];Cbb(a.a,j,d5(kA(xbb(a.a,j),21).a+1-d));Cbb(a.b,j,Vpb(nA(xbb(a.b,j)))+k-d*a.e)}(a.q==(L7b(),E7b)&&(kA(xbb(a.a,j),21).a>a.j||kA(xbb(a.a,j-1),21).a>a.j)||a.q==H7b&&(Vpb(nA(xbb(a.b,j)))>a.k||Vpb(nA(xbb(a.b,j-1)))>a.k))&&(i=false);for(g=kl(vGb(b));So(g);){f=kA(To(g),14);h=f.c.g;if(a.f[h.o]==j){l=nRb(a,h);e=e+kA(l.a,21).a;i=i&&Vpb(mA(l.b))}}a.f[b.o]=j;e=e+a.c[b.o][0];return new fGc(d5(e),(B3(),i?true:false))} +function cnc(a){var b,c,d,e,f,g,h,i,j,k;j=new yib;h=new yib;for(f=new ccb(a);f.a-1){for(e=sib(h,0);e.b!=e.d.c;){d=kA(Gib(e),125);d.s=g}while(h.b!=0){d=kA(Gq(h,0),125);for(c=new ccb(d.g);c.a-1){for(f=new ccb(h);f.a0){continue}i.i=x5(i.i,e.i-1);--i.f;i.f==0&&(h.c[h.c.length]=i,true)}}}} +function sHd(a,b){var c,d,e,f,g,h,i,j;if(b.b==null||a.b==null)return;uHd(a);rHd(a);uHd(b);rHd(b);c=tz(FA,OKd,22,a.b.length+b.b.length,15,1);j=0;d=0;g=0;while(d=h&&e<=i){if(h<=e&&f<=i){c[j++]=e;c[j++]=f;d+=2}else if(h<=e){c[j++]=e;c[j++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[j++]=h;c[j++]=f;d+=2}else{c[j++]=h;c[j++]=i;a.b[d]=i+1}}else if(ia.j){a.q=E7b;oRb(a,f)}break;case 4:a.q=(L7b(),K7b);oRb(a,f);j=0;for(e=new ccb(a.b);e.aa.k){a.q=H7b;oRb(a,f)}break;case 6:m=zA($wnd.Math.ceil(a.f.length*k/100));oRb(a,new xRb(m));break;case 5:l=zA($wnd.Math.ceil(a.d*k/100));oRb(a,new ARb(l));break;default:oRb(a,f);}pRb(a,b);zEc(c)} +function tAb(a){var b,c,d,e,f,g,h;b=new Gbb;a.g=new Gbb;a.d=new Gbb;for(g=new e9((new X8(a.f.b)).a);g.b;){f=c9(g);tbb(b,kA(kA(f.lc(),48).b,80));hBc(kA(f.kc(),536).Je())?tbb(a.d,kA(f.lc(),48)):tbb(a.g,kA(f.lc(),48))}qAb(a,a.d);qAb(a,a.g);a.c=new eBb(a.b);cBb(a.c,(bAb(),aAb));vAb(a,a.d);vAb(a,a.g);vbb(b,a.c.a.b);a.e=new Jyc(oLd,oLd);a.a=new Jyc(pLd,pLd);for(d=new ccb(b);d.anKd)&&h<10);bBb(a.c,new DAb);sAb(a);ZAb(a.c);cAb(a.f)} +function sAb(a){var b,c,d,e,f,g,h;b=0;for(f=new ccb(a.b.a);f.a=2){i=sib(c,0);g=kA(Gib(i),9);h=kA(Gib(i),9);while(h.a0&&(h=$wnd.Math.max(h,jKc(a.A.b+d.d.b,e)))}else{o=n+l.d.c+a.u+d.d.b;h=$wnd.Math.max(h,(yv(),Bv(gNd),$wnd.Math.abs(m-e)<=gNd||m==e||isNaN(m)&&isNaN(e)?0:o/(e-m)))}l=d;m=e;n=f}if(!!a.A&&a.A.c>0){o=n+a.A.c;k&&(o+=l.d.c);h=$wnd.Math.max(h,(yv(),Bv(gNd),$wnd.Math.abs(m-1)<=gNd||m==1||isNaN(m)&&isNaN(1)?0:o/(1-m)))}c.n.b=0;c.a.a=h} +function mLc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=kA(Cfb(a.b,b),114);j=kA(kA(Ke(a.r,b),19),60);if(j.Wb()){c.n.d=0;c.n.a=0;return}g=a.v.pc((bEc(),aEc));p=a.w.pc((qEc(),oEc));k=a.t==(eDc(),cDc);h=0;i=j.tc();l=null;n=0;m=0;while(i.hc()){d=kA(i.ic(),111);f=Vpb(nA(d.b.xe((bLc(),aLc))));e=d.b.Re().b;g&&sLc(a,b,0,k,!k&&p);if(!l){!!a.A&&a.A.d>0&&(h=$wnd.Math.max(h,jKc(a.A.d+d.d.d,f)))}else{o=m+l.d.a+a.u+d.d.d;h=$wnd.Math.max(h,(yv(),Bv(gNd),$wnd.Math.abs(n-f)<=gNd||n==f||isNaN(n)&&isNaN(f)?0:o/(f-n)))}l=d;n=f;m=e}if(!!a.A&&a.A.a>0){o=m+a.A.a;k&&(o+=l.d.a);h=$wnd.Math.max(h,(yv(),Bv(gNd),$wnd.Math.abs(n-1)<=gNd||n==1||isNaN(n)&&isNaN(1)?0:o/(1-n)))}c.n.d=0;c.a.b=h} +function dYb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=kA(nub(m,(E2b(),a2b)),15),!!o&&o._b()!=0&&o.pc(n))||(p=m.j!=(RGb(),OGb)&&n.j!=OGb,q=kA(nub(m,_1b),8),r=kA(nub(n,_1b),8),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=eYb(m,(FDc(),lDc)),v=eYb(n,CDc),t=t|(eYb(m,CDc)||eYb(n,lDc)),w=t&&s||u||v,p&&w)||m.j==(RGb(),QGb)&&n.j==PGb||n.j==(RGb(),QGb)&&m.j==PGb){return false}k=a.c[b];f=a.c[c];e=gec(a.e,k,f,(FDc(),EDc));i=gec(a.i,k,f,kDc);WXb(a.f,k,f);j=FXb(a.b,k,f)+kA(e.a,21).a+kA(i.a,21).a+a.f.d;h=FXb(a.b,f,k)+kA(e.b,21).a+kA(i.b,21).a+a.f.b;if(a.a){l=kA(nub(k,i2b),11);g=kA(nub(f,i2b),11);d=eec(a.g,l,g);j+=kA(d.a,21).a;h+=kA(d.b,21).a}return j>h} +function bRc(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Pi()){throw x2(new O4(gTd+c.be()+hTd))}e=ptd((uyd(),syd),c).kk();if(e){return e.Pi().dh().Zg(e,d)}h=ptd(syd,c).mk();if(h){if(d==null){return null}i=kA(d,15);if(i.Wb()){return ''}m=new z6;for(g=i.tc();g.hc();){f=g.ic();w6(m,h.Pi().dh().Zg(h,f));m.a+=' '}return l3(m,m.a.length-1)}l=ptd(syd,c).nk();if(!l.Wb()){for(k=l.tc();k.hc();){j=kA(k.ic(),140);if(j.Li(d)){try{m=j.Pi().dh().Zg(j,d);if(m!=null){return m}}catch(a){a=w2(a);if(!sA(a,104))throw x2(a)}}}throw x2(new O4("Invalid value: '"+d+"' for datatype :"+c.be()))}kA(c,737).Ui();return d==null?null:sA(d,159)?''+kA(d,159).a:mb(d)==PF?fhd(XQc[0],kA(d,181)):f3(d)} +function dKb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;xEc(c,dOd,1);bKb=Vpb(mA(nub(b,(J6b(),V4b))));a.c=b;o=new Gbb;for(h=new ccb(b.b);h.aq){p=1;e=j.n.a;while(e>i){++p;e=(j.n.a-(p-1)*a.d)/p}tbb(d,new pKb(a,j,p))}}for(k=new ccb(d);k.aj?0:j),1),g),a.c[d.a.d]));DZb(GZb(FZb(HZb(EZb(new IZb,0>-j?0:-j),1),g),a.c[h.a.d]))}else{m=1;(sA(d.g,153)&&sA(h.g,8)||sA(h.g,153)&&sA(d.g,8))&&(m=2);DZb(GZb(FZb(HZb(EZb(new IZb,zA(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} +function QMb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=kA(nub(a,(J6b(),Z5b)),83);g=a.e;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Gbb;l=new Gbb;for(e=new ccb(b);e.a0),kA(k.a.cd(k.c=--k.b),14));while(f!=d&&k.b>0){a.a[f.o]=true;a.a[d.o]=true;f=(Lpb(k.b>0),kA(k.a.cd(k.c=--k.b),14))}k.b>0&&l9(k)}}}} +function DSc(a){if(a.q)return;a.q=true;a.p=RRc(a,0);a.a=RRc(a,1);WRc(a.a,0);a.f=RRc(a,2);WRc(a.f,1);QRc(a.f,2);a.n=RRc(a,3);QRc(a.n,3);QRc(a.n,4);QRc(a.n,5);QRc(a.n,6);a.g=RRc(a,4);WRc(a.g,7);QRc(a.g,8);a.c=RRc(a,5);WRc(a.c,7);WRc(a.c,8);a.i=RRc(a,6);WRc(a.i,9);WRc(a.i,10);WRc(a.i,11);WRc(a.i,12);QRc(a.i,13);a.j=RRc(a,7);WRc(a.j,9);a.d=RRc(a,8);WRc(a.d,3);WRc(a.d,4);WRc(a.d,5);WRc(a.d,6);QRc(a.d,7);QRc(a.d,8);QRc(a.d,9);QRc(a.d,10);a.b=RRc(a,9);QRc(a.b,0);QRc(a.b,1);a.e=RRc(a,10);QRc(a.e,1);QRc(a.e,2);QRc(a.e,3);QRc(a.e,4);WRc(a.e,5);WRc(a.e,6);WRc(a.e,7);WRc(a.e,8);WRc(a.e,9);WRc(a.e,10);QRc(a.e,11);a.k=RRc(a,11);QRc(a.k,0);QRc(a.k,1);a.o=SRc(a,12);a.s=SRc(a,13)} +function wcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;xEc(b,'Interactive crossing minimization',1);g=0;for(f=new ccb(a.b);f.a0){c+=i.k.a+i.n.a/2;++l}for(o=new ccb(i.i);o.a=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[j++]=e;c[j++]=h-1;d+=2}else{c[j++]=e;c[j++]=h-1;a.b[d]=i+1;g+=2}}else if(i0);g.a.cd(g.c=--g.b);r9(g,d);Eib(j,d);RSb(d,i.i);Hib(j);Hib(j);e.a.$b(d)!=null}}}}} +function vTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;xEc(b,'Spline SelfLoop pre-processing.',1);j=new iib;for(l=new ccb(a.a);l.a0?(e-=86400000):(e+=86400000);i=new Rx(y2(E2(b.q.getTime()),e))}k=new N6;j=a.a.length;for(f=0;f=97&&d<=122||d>=65&&d<=90){for(g=f+1;g=j){throw x2(new O4("Missing trailing '"))}g+1=14&&j<=16))){if(b.a.Qb(d)){!c.a?(c.a=new O6(c.d)):I6(c.a,c.b);F6(c.a,'[...]')}else{g=lA(d);i=new Lgb(b);rlb(c,lcb(g,i))}}else sA(d,221)?rlb(c,Ocb(kA(d,221))):sA(d,173)?rlb(c,Hcb(kA(d,173))):sA(d,176)?rlb(c,Icb(kA(d,176))):sA(d,1697)?rlb(c,Ncb(kA(d,1697))):sA(d,37)?rlb(c,Lcb(kA(d,37))):sA(d,378)?rlb(c,Mcb(kA(d,378))):sA(d,736)?rlb(c,Kcb(kA(d,736))):sA(d,106)&&rlb(c,Jcb(kA(d,106)))}else{rlb(c,d==null?mJd:f3(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function pEb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!Vpb(mA(nub(c,(J6b(),m5b))))){return}for(h=new ccb(c.i);h.a1){break}}}h>0?(i=true):m==(eDc(),cDc)&&(!f.n&&(f.n=new zkd(LV,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.nc((Z0b(),S0b));j&&b.nc((Z0b(),T0b))} +function rHc(a,b,c){var d,e,f;e=new lJc(a);SKc(e,c);JKc(e,false);wbb(e.e.We(),new NKc(e,false));pKc(e,e.f,(KHc(),HHc),(FDc(),lDc));pKc(e,e.f,JHc,CDc);pKc(e,e.g,HHc,EDc);pKc(e,e.g,JHc,kDc);rKc(e,lDc);rKc(e,CDc);qKc(e,kDc);qKc(e,EDc);CKc();d=e.v.pc((bEc(),ZDc))&&e.w.pc((qEc(),lEc))?DKc(e):null;!!d&&fIc(e.a,d);GKc(e);gKc(e);oLc(e);bKc(e);QKc(e);gLc(e);YKc(e,lDc);YKc(e,CDc);cKc(e);PKc(e);if(!b){return e.o}EKc(e);kLc(e);YKc(e,kDc);YKc(e,EDc);f=e.w.pc((qEc(),mEc));tKc(e,f,lDc);tKc(e,f,CDc);uKc(e,f,kDc);uKc(e,f,EDc);Sob(new Zob(null,new ekb(new R9(e.i),0)),new vKc);Sob(Pob(new Zob(null,Kj(e.r).wc()),new xKc),new zKc);FKc(e);e.e.Ue(e.o);Sob(new Zob(null,Kj(e.r).wc()),new HKc);return e.o} +function NSb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;xEc(b,'Spline SelfLoop positioning',1);k=kA(nub(a,(J6b(),c5b)),345);for(j=new ccb(a.b);j.a2){k=new Gbb;vbb(k,new A9(r,1,r.b));f=swb(k,t+a.a);s=new $ub(f);lub(s,b);c.c[c.c.length]=s}else{d?(s=kA(F8(a.b,_Wc(b)),247)):(s=kA(F8(a.b,bXc(b)),247))}i=_Wc(b);d&&(i=bXc(b));g=zwb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new Jyc(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new Jyc((l.a+q.a)/2,l.b)}d?I8(a.d,b,new avb(s,g,p,j)):I8(a.c,b,new avb(s,g,p,j));I8(a.b,b,s);o=(!b.n&&(b.n=new zkd(LV,b,1,7)),b.n);for(n=new a0c(o);n.e!=n.i._b();){m=kA($_c(n),137);e=wwb(a,m,true,0,0);c.c[c.c.length]=e}} +function Dpd(){t5c(hY,new jqd);t5c(gY,new Qqd);t5c(iY,new vrd);t5c(jY,new Nrd);t5c(lY,new Qrd);t5c(nY,new Trd);t5c(mY,new Wrd);t5c(oY,new Zrd);t5c(qY,new Hpd);t5c(rY,new Kpd);t5c(sY,new Npd);t5c(tY,new Qpd);t5c(uY,new Tpd);t5c(vY,new Wpd);t5c(wY,new Zpd);t5c(zY,new aqd);t5c(BY,new dqd);t5c(CZ,new gqd);t5c(pY,new mqd);t5c(AY,new pqd);t5c(tE,new sqd);t5c(pz(BA,1),new vqd);t5c(uE,new yqd);t5c(vE,new Bqd);t5c(PF,new Eqd);t5c(UX,new Hqd);t5c(yE,new Kqd);t5c(ZX,new Nqd);t5c($X,new Tqd);t5c(Q0,new Wqd);t5c(G0,new Zqd);t5c(CE,new ard);t5c(GE,new drd);t5c(xE,new grd);t5c(IE,new jrd);t5c(rG,new mrd);t5c(y_,new prd);t5c(x_,new srd);t5c(PE,new yrd);t5c(UE,new Brd);t5c(bY,new Erd);t5c(_X,new Hrd)} +function Lbc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new ccb(a);d.a0&&c.c==0){!b&&(b=new Gbb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=kA(zbb(b,0),205);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Gbb),new ccb(c.b));f.aybb(a,c,0)){return new fGc(e,c)}}else if(Vpb(Obc(e.g,e.d[0]).a)>Vpb(Obc(c.g,c.d[0]).a)){return new fGc(e,c)}}}for(h=(!c.e&&(c.e=new Gbb),c.e).tc();h.hc();){g=kA(h.ic(),205);i=(!g.b&&(g.b=new Gbb),g.b);Ppb(0,i.c.length);zpb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null} +function NPb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;xEc(b,'Label dummy insertions',1);l=new Gbb;g=Vpb(nA(nub(a,(J6b(),m6b))));j=Vpb(nA(nub(a,q6b)));k=kA(nub(a,W4b),110);for(n=new ccb(a.a);n.a>16==-10){c=kA(a.Cb,268).zj(b,c)}else if(a.Db>>16==-15){!b&&(b=(j7c(),Z6c));!j&&(j=(j7c(),Z6c));if(a.Cb.Hg()){i=new Oid(a.Cb,1,13,j,b,pcd(njd(kA(a.Cb,53)),a),false);!c?(c=i):c.Sh(i)}}}else if(sA(a.Cb,96)){if(a.Db>>16==-23){sA(b,96)||(b=(j7c(),a7c));sA(j,96)||(j=(j7c(),a7c));if(a.Cb.Hg()){i=new Oid(a.Cb,1,10,j,b,pcd(Ebd(kA(a.Cb,24)),a),false);!c?(c=i):c.Sh(i)}}}else if(sA(a.Cb,411)){h=kA(a.Cb,742);g=(!h.b&&(h.b=new Sod(new Ood)),h.b);for(f=(d=new e9((new X8(g.a)).a),new $od(d));f.a.b;){e=kA(c9(f.a).kc(),84);c=thd(e,phd(e,h),c)}}}return c} +function X8b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;xEc(c,'Depth-first cycle removal',1);k=b.a;p=k.c.length;a.a=tz(FA,OKd,22,p,15,1);pcb(a.a);a.b=tz(FA,OKd,22,p,15,1);pcb(a.b);g=0;for(j=new ccb(k);j.a=0){i=null;h=new s9(k.a,j+1);while(h.b=j.c.c.length?(k=Vfc((RGb(),PGb),OGb)):(k=Vfc((RGb(),OGb),OGb));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function _Kc(a,b){var c,d,e,f,g,h,i,j,k;g=kA(kA(Ke(a.r,b),19),60);k=g._b()==2||g._b()>2&&a.w.pc((qEc(),oEc));for(f=g.tc();f.hc();){e=kA(f.ic(),111);if(!e.c||e.c.d.c.length<=0){continue}j=e.b.Re();h=e.c;i=h.i;i.b=(d=h.n,h.e.a+d.b+d.c);i.a=(c=h.n,h.e.b+c.d+c.a);switch(b.g){case 1:if(k){i.c=-i.b-a.s;CIc(h,(pIc(),oIc))}else{i.c=j.a+a.s;CIc(h,(pIc(),nIc))}i.d=-i.a-a.s;DIc(h,(eJc(),bJc));break;case 3:if(k){i.c=-i.b-a.s;CIc(h,(pIc(),oIc))}else{i.c=j.a+a.s;CIc(h,(pIc(),nIc))}i.d=j.b+a.s;DIc(h,(eJc(),dJc));break;case 2:i.c=j.a+a.s;if(k){i.d=-i.a-a.s;DIc(h,(eJc(),bJc))}else{i.d=j.b+a.s;DIc(h,(eJc(),dJc))}CIc(h,(pIc(),nIc));break;case 4:i.c=-i.b-a.s;if(k){i.d=-i.a-a.s;DIc(h,(eJc(),bJc))}else{i.d=j.b+a.s;DIc(h,(eJc(),dJc))}CIc(h,(pIc(),oIc));}k=false}} +function Tqb(a,b){var c;if(a.e){throw x2(new Q4((d4(_H),bMd+_H.k+cMd)))}if(!mqb(a.a,b)){throw x2(new Tv(dMd+b+eMd))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:Qqb(a);break;case 1:Yqb(a);Qqb(a);break;case 4:crb(a);Qqb(a);break;case 3:crb(a);Yqb(a);Qqb(a);}break;case 2:switch(b.g){case 1:Yqb(a);Zqb(a);break;case 4:crb(a);Qqb(a);break;case 3:crb(a);Yqb(a);Qqb(a);}break;case 1:switch(b.g){case 2:Yqb(a);Zqb(a);break;case 4:Yqb(a);crb(a);Qqb(a);break;case 3:Yqb(a);crb(a);Yqb(a);Qqb(a);}break;case 4:switch(b.g){case 2:crb(a);Qqb(a);break;case 1:crb(a);Yqb(a);Qqb(a);break;case 3:Yqb(a);Zqb(a);}break;case 3:switch(b.g){case 2:Yqb(a);crb(a);Qqb(a);break;case 1:Yqb(a);crb(a);Yqb(a);Qqb(a);break;case 4:Yqb(a);Zqb(a);}}return a} +function XAb(a,b){var c;if(a.d){throw x2(new Q4((d4(TJ),bMd+TJ.k+cMd)))}if(!GAb(a.a,b)){throw x2(new Tv(dMd+b+eMd))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:UAb(a);break;case 1:_Ab(a);UAb(a);break;case 4:dBb(a);UAb(a);break;case 3:dBb(a);_Ab(a);UAb(a);}break;case 2:switch(b.g){case 1:_Ab(a);aBb(a);break;case 4:dBb(a);UAb(a);break;case 3:dBb(a);_Ab(a);UAb(a);}break;case 1:switch(b.g){case 2:_Ab(a);aBb(a);break;case 4:_Ab(a);dBb(a);UAb(a);break;case 3:_Ab(a);dBb(a);_Ab(a);UAb(a);}break;case 4:switch(b.g){case 2:dBb(a);UAb(a);break;case 1:dBb(a);_Ab(a);UAb(a);break;case 3:_Ab(a);aBb(a);}break;case 3:switch(b.g){case 2:_Ab(a);dBb(a);UAb(a);break;case 1:_Ab(a);dBb(a);_Ab(a);UAb(a);break;case 4:_Ab(a);aBb(a);}}return a} +function sEb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;e=new Gbb;for(o=new ccb(b.a);o.ar?i:r;for(t=new ccb(k.i);t.a=j&&v>=q){m+=o.k.b+p.k.b+p.a.b-u;++h}}}}if(c){for(g=new ccb(s.d);g.a=j&&v>=q){m+=o.k.b+p.k.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.i=n}else{b.a=0;b.i=0}} +function ywb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=$vb(b);w=new Gbb;for(d=new ccb(h);d.a0){l.d+=j.n.d;l.d+=j.d}if(l.a>0){l.a+=j.n.a;l.a+=j.d}if(l.b>0){l.b+=j.n.b;l.b+=j.d}if(l.c>0){l.c+=j.n.c;l.c+=j.d}return l} +function Hac(a,b,c){var d;xEc(c,'StretchWidth layering',1);if(b.a.c.length==0){zEc(c);return}a.c=b;a.t=0;a.u=0;a.i=oLd;a.g=pLd;a.d=Vpb(nA(nub(b,(J6b(),k6b))));Bac(a);Cac(a);zac(a);Gac(a);Aac(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=Eac(a);d=new lIb(a.c);tbb(a.c.b,d);a.r=Qr(a.p);a.n=icb(a.k,a.k.length);while(a.r.c.length!=0){a.o=Iac(a);if(!a.o||Dac(a)&&a.b.a._b()!=0){Jac(a,d);d=new lIb(a.c);tbb(a.c.b,d);pg(a.a,a.b);a.b.a.Pb();a.t=a.u;a.u=0}else{if(Dac(a)){a.c.b.c=tz(NE,oJd,1,0,5,1);d=new lIb(a.c);tbb(a.c.b,d);a.t=0;a.u=0;a.b.a.Pb();a.a.a.Pb();++a.f;a.r=Qr(a.p);a.n=icb(a.k,a.k.length)}else{FGb(a.o,d);Abb(a.r,a.o);Ggb(a.b,a.o);a.t=a.t-a.k[a.o.o]*a.d+a.j[a.o.o];a.u+=a.e[a.o.o]*a.d}}}b.a.c=tz(NE,oJd,1,0,5,1);hdb(b.b);zEc(c)} +function SLb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new ccb(a);o.a0){a.a[b.c.o][b.o].d+=Yjb(a.f,24)*LLd*0.07000000029802322-0.03500000014901161;a.a[b.c.o][b.o].a=a.a[b.c.o][b.o].d/a.a[b.c.o][b.o].b}} +function vUc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=F8(a.e,d);if(D==null){D=new Py;n=kA(D,191);s=b+'_s';t=s+e;m=new hz(t);Ny(n,HTd,m)}C=kA(D,191);OTc(c,C);G=new Py;QTc(G,'x',d.j);QTc(G,'y',d.k);Ny(C,KTd,G);A=new Py;QTc(A,'x',d.b);QTc(A,'y',d.c);Ny(C,'endPoint',A);l=bJd((!d.a&&(d.a=new fdd(GV,d,5)),d.a));o=!l;if(o){w=new fy;f=new IVc(w);i5((!d.a&&(d.a=new fdd(GV,d,5)),d.a),f);Ny(C,ATd,w)}i=nQc(d);u=!!i;u&&RTc(a.a,C,CTd,iUc(a,nQc(d)));r=oQc(d);v=!!r;v&&RTc(a.a,C,BTd,iUc(a,oQc(d)));j=(!d.e&&(d.e=new pxd(IV,d,10,9)),d.e).i==0;p=!j;if(p){B=new fy;g=new KVc(a,B);i5((!d.e&&(d.e=new pxd(IV,d,10,9)),d.e),g);Ny(C,ETd,B)}k=(!d.g&&(d.g=new pxd(IV,d,9,10)),d.g).i==0;q=!k;if(q){F=new fy;h=new MVc(a,F);i5((!d.g&&(d.g=new pxd(IV,d,9,10)),d.g),h);Ny(C,DTd,F)}} +function I3(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw x2(new I5(mJd))}j=a;f=a.length;i=false;if(f>0){b=a.charCodeAt(0);if(b==45||b==43){a=a.substr(1,a.length-1);--f;i=b==45}}if(f==0){throw x2(new I5(mLd+j+'"'))}while(a.length>0&&a.charCodeAt(0)==48){a=a.substr(1,a.length-1);--f}if(f>(H5(),F5)[10]){throw x2(new I5(mLd+j+'"'))}for(e=0;e0){l=-$pb(a.substr(0,d),10);a=a.substr(d,a.length-d);f-=d;c=false}while(f>=g){d=$pb(a.substr(0,g),10);a=a.substr(g,a.length-g);f-=g;if(c){c=false}else{if(A2(l,h)<0){throw x2(new I5(mLd+j+'"'))}l=J2(l,k)}l=R2(l,d)}if(A2(l,0)>0){throw x2(new I5(mLd+j+'"'))}if(!i){l=K2(l);if(A2(l,0)<0){throw x2(new I5(mLd+j+'"'))}}return l} +function vGc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));s.e!=s.i._b();){q=kA($_c(s),35);m+=Cn(TWc(q));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new zkd(MV,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));r.e!=r.i._b();){q=kA($_c(r),35);C=e.b+(Yjb(b,26)*ILd+Yjb(b,27)*JLd)*(i-q.g);D=e.b+(Yjb(b,26)*ILd+Yjb(b,27)*JLd)*(h-q.f);rPc(q,C);sPc(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));v.e!=v.i._b();){u=kA($_c(v),35);for(k=kl(TWc(u));So(k);){j=kA(To(k),105);$Pc(j)||uGc(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;IFc(a,A,w,false,true)} +function sKb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.k;q=a.n;m=a.d;if(b){l=d/2*(b._b()-1);n=0;for(j=b.tc();j.hc();){h=kA(j.ic(),8);l+=h.n.a;n=$wnd.Math.max(n,h.n.b)}r=p.a-(l-q.a)/2;g=p.b-m.d+n;e=q.a/(b._b()+1);f=e;for(i=b.tc();i.hc();){h=kA(i.ic(),8);h.k.a=r;h.k.b=g-h.n.b;r+=h.n.a+d/2;k=qKb(h);k.k.a=h.n.a/2-k.a.a;k.k.b=h.n.b;o=kA(nub(h,(E2b(),K1b)),11);if(o.d.c.length+o.f.c.length==1){o.k.a=f-o.a.a;o.k.b=0;jHb(o,a)}f+=e}}if(c){l=d/2*(c._b()-1);n=0;for(j=c.tc();j.hc();){h=kA(j.ic(),8);l+=h.n.a;n=$wnd.Math.max(n,h.n.b)}r=p.a-(l-q.a)/2;g=p.b+q.b+m.a-n;e=q.a/(c._b()+1);f=e;for(i=c.tc();i.hc();){h=kA(i.ic(),8);h.k.a=r;h.k.b=g;r+=h.n.a+d/2;k=qKb(h);k.k.a=h.n.a/2-k.a.a;k.k.b=0;o=kA(nub(h,(E2b(),K1b)),11);if(o.d.c.length+o.f.c.length==1){o.k.a=f-o.a.a;o.k.b=q.b;jHb(o,a)}f+=e}}} +function zic(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new ccb(a.a.b);e.apLd||b.o==nic&&k0&&rPc(r,u*w);v>0&&sPc(r,v*A)}bjb(a.b,new Cwb);b=new Gbb;for(h=new e9((new X8(a.c)).a);h.b;){g=c9(h);d=kA(g.kc(),105);c=kA(g.lc(),363).a;e=$Wc(d,false,false);l=owb(_Wc(d),DFc(e),c);zFc(l,e);t=aXc(d);if(!!t&&ybb(b,t,0)==-1){b.c[b.c.length]=t;pwb(t,(Lpb(l.b!=0),kA(l.a.a.c,9)),c)}}for(q=new e9((new X8(a.d)).a);q.b;){p=c9(q);d=kA(p.kc(),105);c=kA(p.lc(),363).a;e=$Wc(d,false,false);l=owb(bXc(d),Yyc(DFc(e)),c);l=Yyc(l);zFc(l,e);t=cXc(d);if(!!t&&ybb(b,t,0)==-1){b.c[b.c.length]=t;pwb(t,(Lpb(l.b!=0),kA(l.c.b.c,9)),c)}}} +function uPb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;xEc(b,'Inverted port preprocessing',1);j=a.b;i=new s9(j,0);c=null;s=new Gbb;while(i.b0&&(kA(Cfb(a.b,b),114).a.b=c)} +function wmc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;m=Enc(a.i);o=Enc(b.i);n=vyc(xyc(a.k),a.a);p=vyc(xyc(b.k),b.a);i=vyc(new Jyc(n.a,n.b),Dyc(new Iyc(m),1.3*c));q=vyc(new Jyc(p.a,p.b),Dyc(new Iyc(o),1.3*d));h=$wnd.Math.abs(i.a-q.a);he+2&&b6c(a.charCodeAt(e+1),z5c,A5c)&&b6c(a.charCodeAt(e+2),z5c,A5c)){c=f6c(a.charCodeAt(e+1),a.charCodeAt(e+2));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{C6(i,((b[0]&31)<<6|b[1]&63)&AKd);break}case 3:{C6(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&AKd);break}}h=0;d=0}}else{for(f=0;f0&&tbb(a.p,k);tbb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Cbb(a.a,h,d5(n));Cbb(a.b,h,j);a.j=v5(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}} +function c7(){c7=d3;var a,b,c;new j7(1,0);new j7(10,0);new j7(0,0);W6=tz(XE,cKd,216,11,0,1);X6=tz(CA,yKd,22,100,15,1);Y6=xz(pz(DA,1),vLd,22,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);Z6=tz(FA,OKd,22,Y6.length,15,1);$6=xz(pz(DA,1),vLd,22,15,[1,10,100,zKd,uLd,wLd,1000000,10000000,100000000,hLd,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);_6=tz(FA,OKd,22,$6.length,15,1);a7=tz(XE,cKd,216,11,0,1);a=0;for(;a1){n=new xnc(o,t,d);i5(t,new onc(a,n));g.c[g.c.length]=n;for(l=t.a.Xb().tc();l.hc();){k=kA(l.ic(),48);Abb(f,k.b)}}if(h.a._b()>1){n=new xnc(o,h,d);i5(h,new qnc(a,n));g.c[g.c.length]=n;for(l=h.a.Xb().tc();l.hc();){k=kA(l.ic(),48);Abb(f,k.b)}}}} +function hQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;xEc(b,'Label dummy switching',1);l=kA(nub(a,(J6b(),Y4b)),276);d=kA(Nob(Pob(Rob(new Zob(null,new ekb(a.b,16)),new rQb),new tQb),Umb(new snb,new qnb,new Lnb,xz(pz($G,1),jKd,150,0,[(Ymb(),Wmb)]))),15);g=l==(T$b(),S$b)||l==O$b?$Pb(a):null;for(f=d.tc();f.hc();){e=kA(f.ic(),8);c=fQb(e);!c&&(c=l);h=dQb(e);k=eQb(e);m=null;switch(c.g){case 2:m=bQb(e,g,h,k);break;case 0:m=(n=h.a._b()+k.c.length+1,o=(n-1)/2|0,oh.a._b()?kA(xbb(k,o-h.a._b()-1),8):null);break;case 1:m=cQb(e,g,h,k);break;case 4:iQb(e,c);m=(j=gQb(e),j?h.a._b()==0?null:kA(h.a.cd(es(h,0)),8):k.c.length==0?null:kA(xbb(k,k.c.length-1),8));break;case 3:iQb(e,c);m=(i=gQb(e),i?k.c.length==0?null:kA(xbb(k,k.c.length-1),8):h.a._b()==0?null:kA(h.a.cd(es(h,0)),8));}!!m&&jQb(e,m);aQb(e)}zEc(b)} +function KQc(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=c.charCodeAt(0);if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=c.charCodeAt(m+1)==46))){h=c.substr(1,m-1);u=Z5('%',h)?null:S5c(h);e=0;if(k){try{e=H3(c.substr(m+2,c.length-(m+2)),oKd,jJd)}catch(a){a=w2(a);if(sA(a,118)){i=a;throw x2(new t6c(i))}else throw x2(a)}}for(r=Qhd(b.pg());r.hc();){p=jid(r);if(sA(p,469)){f=kA(p,609);t=f.d;if((u==null?t==null:Z5(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=H3(c.substr(l+1,c.length-(l+1)),oKd,jJd)}catch(a){a=w2(a);if(sA(a,118)){o=c}else throw x2(a)}}o=Z5('%',o)?null:S5c(o);for(q=Qhd(b.pg());q.hc();){p=jid(q);if(sA(p,174)){g=kA(p,174);s=g.be();if((o==null?s==null:Z5(o,s))&&d--==0){return g}}}return null}}return SMc(b,c)} +function AEd(a){yEd();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=tz(CA,yKd,22,m*4,15,1);g=0;e=0;for(i=0;i>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=xEd[o];f[g++]=xEd[p|j<<4];f[g++]=xEd[k<<2|q];f[g++]=xEd[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=xEd[o];f[g++]=xEd[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=xEd[o];f[g++]=xEd[p|j<<4];f[g++]=xEd[k<<2];f[g++]=61}return r6(f,0,f.length)} +function sLb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;w=b.a.c;j=b.a.c+b.a.b;t=a.c&&uLb(a,b);d=t?(w+j)/2:w+(b.s+1)*a.b;for(h=b.d.a.Xb().tc();h.hc();){g=kA(h.ic(),14);i=kA(F8(b.c,g),589);C=i.f;D=i.a;v=new Jyc(d,C);B=new Jyc(d,D);u=new Jyc(w-10,C);A=new Jyc(j,D);l=false;m=false;if(i.b){l=true;u.a=j}if(i.c){m=true;A.a=w-10}n=i.d;o=i.e;if(!t||!(n||o)||m||l){if(b.d.a._b()==1){Ryc(g.a,xz(pz(aU,1),cKd,9,0,[u,v,B,A]))}else{c=new Jyc(d,b.b);Ryc(g.a,xz(pz(aU,1),cKd,9,0,[u,v,c,B,A]))}}else{if(n&&o){k=0;p=0;for(s=new ccb(g.d.g.i);s.a=0&&gn){if(f){oib(u,m);oib(w,d5(j.a-1))}F=c.b;G+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+D)}rPc(h,F);sPc(h,G);k=$wnd.Math.max(k,F+D+c.c);m=$wnd.Math.max(m,l);F+=D+b}k=$wnd.Math.max(k,d);C=G+m+c.a;if(C0&&(a.p=-(a.p-1));a.p>oKd&&Ox(b,a.p-NKd);g=b.q.getDate();Ix(b,1);a.k>=0&&Lx(b,a.k);if(a.c>=0){Ix(b,a.c)}else if(a.k>=0){i=new Qx(b.q.getFullYear()-NKd,b.q.getMonth(),35);d=35-i.q.getDate();Ix(b,d0&&a.f<12&&(a.f+=12);Jx(b,a.f==24&&a.g?0:a.f);a.j>=0&&Kx(b,a.j);a.n>=0&&Mx(b,a.n);a.i>=0&&Nx(b,y2(J2(C2(E2(b.q.getTime()),zKd),zKd),a.i));if(a.a){e=new Px;Ox(e,e.q.getFullYear()-NKd-80);H2(E2(b.q.getTime()),E2(e.q.getTime()))&&Ox(b,e.q.getFullYear()-NKd+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();Ix(b,b.q.getDate()+c);b.q.getMonth()!=h&&Ix(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>oKd){f=b.q.getTimezoneOffset();Nx(b,y2(E2(b.q.getTime()),(a.o-f)*60*zKd))}return true} +function VCb(){VCb=d3;UCb=new Xm;Le(UCb,(FDc(),BDc),xDc);Le(UCb,mDc,tDc);Le(UCb,rDc,vDc);Le(UCb,zDc,oDc);Le(UCb,wDc,pDc);Le(UCb,wDc,vDc);Le(UCb,wDc,oDc);Le(UCb,pDc,wDc);Le(UCb,pDc,xDc);Le(UCb,pDc,tDc);Le(UCb,yDc,yDc);Le(UCb,yDc,vDc);Le(UCb,yDc,xDc);Le(UCb,sDc,sDc);Le(UCb,sDc,vDc);Le(UCb,sDc,tDc);Le(UCb,ADc,ADc);Le(UCb,ADc,oDc);Le(UCb,ADc,xDc);Le(UCb,nDc,nDc);Le(UCb,nDc,oDc);Le(UCb,nDc,tDc);Le(UCb,vDc,rDc);Le(UCb,vDc,wDc);Le(UCb,vDc,yDc);Le(UCb,vDc,sDc);Le(UCb,vDc,vDc);Le(UCb,vDc,xDc);Le(UCb,vDc,tDc);Le(UCb,oDc,zDc);Le(UCb,oDc,wDc);Le(UCb,oDc,ADc);Le(UCb,oDc,nDc);Le(UCb,oDc,oDc);Le(UCb,oDc,xDc);Le(UCb,oDc,tDc);Le(UCb,xDc,BDc);Le(UCb,xDc,pDc);Le(UCb,xDc,yDc);Le(UCb,xDc,ADc);Le(UCb,xDc,vDc);Le(UCb,xDc,oDc);Le(UCb,xDc,xDc);Le(UCb,tDc,mDc);Le(UCb,tDc,pDc);Le(UCb,tDc,sDc);Le(UCb,tDc,nDc);Le(UCb,tDc,vDc);Le(UCb,tDc,oDc);Le(UCb,tDc,tDc)} +function CBd(){t5c(S0,new hCd);t5c(U0,new OCd);t5c(V0,new tDd);t5c(W0,new $Dd);t5c(UE,new kEd);t5c(pz(BA,1),new nEd);t5c(tE,new qEd);t5c(uE,new tEd);t5c(UE,new FBd);t5c(UE,new IBd);t5c(UE,new LBd);t5c(yE,new OBd);t5c(UE,new RBd);t5c(mG,new UBd);t5c(mG,new XBd);t5c(UE,new $Bd);t5c(CE,new bCd);t5c(UE,new eCd);t5c(UE,new kCd);t5c(UE,new nCd);t5c(UE,new qCd);t5c(UE,new tCd);t5c(pz(BA,1),new wCd);t5c(UE,new zCd);t5c(UE,new CCd);t5c(mG,new FCd);t5c(mG,new ICd);t5c(UE,new LCd);t5c(GE,new RCd);t5c(UE,new UCd);t5c(IE,new XCd);t5c(UE,new $Cd);t5c(UE,new bDd);t5c(UE,new eDd);t5c(UE,new hDd);t5c(mG,new kDd);t5c(mG,new nDd);t5c(UE,new qDd);t5c(UE,new wDd);t5c(UE,new zDd);t5c(UE,new CDd);t5c(UE,new FDd);t5c(UE,new IDd);t5c(PE,new LDd);t5c(UE,new ODd);t5c(UE,new RDd);t5c(UE,new UDd);t5c(PE,new XDd);t5c(IE,new bEd);t5c(UE,new eEd);t5c(GE,new hEd)} +function ZIb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;d=kA(nub(a,(E2b(),i2b)),35);rPc(d,a.k.a+b.a);sPc(d,a.k.b+b.b);if(kA(AOc(d,(J6b(),J5b)),185)._b()!=0||nub(a,h2b)!=null||yA(nub(uGb(a),I5b))===yA((u7b(),s7b))&&i7b((h7b(),(!a.p?(bdb(),bdb(),_cb):a.p).Qb(G5b)?(l=kA(nub(a,G5b),179)):(l=kA(nub(uGb(a),H5b),179)),l))){qPc(d,a.n.a);oPc(d,a.n.b)}for(k=new ccb(a.i);k.a1){b=$wnd.Math.min(f,a.c);j=(l=new IGb(a.e.c),GGb(l,(RGb(),KGb)),qub(l,(J6b(),Z5b),kA(nub(j,Z5b),83)),qub(l,B5b,kA(nub(j,B5b),185)),l.o=a.e.b++,tbb(a.b,l),l.n.b=j.n.b,l.n.a=b,m=new lHb,kHb(m,(FDc(),kDc)),jHb(m,j),m.k.a=l.n.a,m.k.b=l.n.b/2,n=new lHb,kHb(n,EDc),jHb(n,l),n.k.b=l.n.b/2,n.k.a=-n.n.a,o=new PEb,LEb(o,m),MEb(o,n),l);tbb(a.e.c.a,j);--k;f-=a.c+a.e.d}new BJb(a.d,a.b,a.c);for(h=new ccb(e);h.a=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!hhb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[HLd]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function oKb(a,b){var c,d,e,f,g,h,i,j,k;if(Cn(vGb(b))!=1||kA(zn(vGb(b)),14).c.g.j!=(RGb(),OGb)){return null}c=kA(zn(vGb(b)),14);d=c.c.g;GGb(d,(RGb(),PGb));qub(d,(E2b(),e2b),null);qub(d,f2b,null);qub(d,H1b,kA(nub(b,H1b),126));qub(d,G1b,(B3(),B3(),true));qub(d,i2b,nub(b,i2b));d.n.b=b.n.b;f=nub(c.d,i2b);g=null;for(j=DGb(d,(FDc(),EDc)).tc();j.hc();){h=kA(j.ic(),11);if(h.d.c.length!=0){qub(h,i2b,f);k=c.d;h.n.a=k.n.a;h.n.b=k.n.b;h.a.a=k.a.a;h.a.b=k.a.b;vbb(h.e,k.e);k.e.c=tz(NE,oJd,1,0,5,1);g=h;break}}qub(c.d,i2b,null);if(Cn(DGb(b,EDc))>1){for(i=sib(Vr(DGb(b,EDc)),0);i.b!=i.d.c;){h=kA(Gib(i),11);if(h.d.c.length==0){e=new lHb;kHb(e,EDc);e.n.a=h.n.a;e.n.b=h.n.b;jHb(e,d);qub(e,i2b,nub(h,i2b));jHb(h,null)}else{jHb(g,d)}}}qub(b,i2b,null);qub(b,G1b,(null,false));GGb(b,KGb);qub(d,(J6b(),Z5b),kA(nub(b,Z5b),83));qub(d,B5b,kA(nub(b,B5b),185));sbb(a.b,0,d);return d} +function Jkc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;xEc(c,'Polyline edge routing',1);n=Vpb(nA(nub(b,(J6b(),u6b))));e=Vpb(nA(nub(b,l6b)));d=$wnd.Math.min(1,e/n);s=0;if(b.b.c.length!=0){t=Gkc(kA(xbb(b.b,0),26));s=0.4*d*t}h=new s9(b.b,0);while(h.b0&&(s-=n);UFb(g,s);k=0;for(m=new ccb(g.a);m.a0);h.a.cd(h.c=--h.b)}i=0.4*d*k;!f&&h.b0||k.i==EDc&&k.d.c.length-k.f.c.length<0)){c=false;break}if(k.i==EDc){for(e=new ccb(k.f);e.a=h){Lpb(q.b>0);q.a.cd(q.c=--q.b);break}else if(o.a>i){if(!e){tbb(o.b,k);o.c=$wnd.Math.min(o.c,i);o.a=$wnd.Math.max(o.a,h);e=o}else{vbb(e.b,o.b);e.a=$wnd.Math.max(e.a,o.a);l9(q)}}}if(!e){e=new M9b;e.c=i;e.a=h;r9(q,e);tbb(e.b,k)}}g=b.b;j=0;for(p=new ccb(d);p.a0&&A2(d,-6)>=0){if(A2(d,0)>=0){e=c+U2(d);for(g=17;g>=e;g--){j[g+1]=j[g]}j[++e]=46;h&&(j[--c]=45);return r6(j,c,18-c+1)}for(f=2;H2(f,y2(K2(d),1));f++){j[--c]=48}j[--c]=46;j[--c]=48;h&&(j[--c]=45);return r6(j,c,18-c)}m=c+1;k=new N6;h&&(k.a+='-',k);if(18-m>=1){C6(k,j[c]);k.a+='.';k.a+=r6(j,c+1,18-c-1)}else{k.a+=r6(j,c,18-c)}k.a+='E';A2(d,0)>0&&(k.a+='+',k);k.a+=''+V2(d);return k.a} +function Swb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;l=kA(nub(a,(Byb(),zyb)),35);r=jJd;s=jJd;p=oKd;q=oKd;for(u=new ccb(a.e);u.ab.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}DZb(GZb(FZb(HZb(EZb(new IZb,1),100),n),q))}}}}}}} +function DIb(a,b,c,d,e,f){var g,h,i,j,k,l;j=new lHb;lub(j,b);kHb(j,kA(AOc(b,(J6b(),b6b)),69));qub(j,(E2b(),i2b),b);jHb(j,c);l=j.n;l.a=b.g;l.b=b.f;k=j.k;k.a=b.i;k.b=b.j;I8(a.a,b,j);g=Mob(Tob(Rob(new Zob(null,(!b.e&&(b.e=new pxd(JV,b,7,4)),new ekb(b.e,16))),new LIb),new HIb),new NIb(b));g||(g=Mob(Tob(Rob(new Zob(null,(!b.d&&(b.d=new pxd(JV,b,8,5)),new ekb(b.d,16))),new PIb),new JIb),new RIb(b)));g||(g=Mob(new Zob(null,(!b.e&&(b.e=new pxd(JV,b,7,4)),new ekb(b.e,16))),new TIb));qub(j,Z1b,(B3(),g?true:false));RFb(j,f,e,kA(AOc(b,X5b),9));for(i=new a0c((!b.n&&(b.n=new zkd(LV,b,1,7)),b.n));i.e!=i.i._b();){h=kA($_c(i),137);!Vpb(mA(AOc(h,N5b)))&&!!h.a&&tbb(j.e,BIb(h))}(!b.d&&(b.d=new pxd(JV,b,8,5)),b.d).i+(!b.e&&(b.e=new pxd(JV,b,7,4)),b.e).i>1&&d.nc((Z0b(),T0b));switch(e.g){case 2:case 1:(j.i==(FDc(),lDc)||j.i==CDc)&&d.nc((Z0b(),W0b));break;case 4:case 3:(j.i==(FDc(),kDc)||j.i==EDc)&&d.nc((Z0b(),W0b));}return j} +function gHd(a,b){UGd();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(M8(vGd)==0){l=tz(n2,cKd,112,xGd.length,0,1);for(g=0;gj&&(d.a+=q6(tz(CA,yKd,22,-j,15,1)));d.a+='Is';if(b6(i,o6(32))>=0){for(e=0;e0){if(g+d>a.length){return false}h=ax(a.substr(0,g+d),b)}else{h=ax(a,b)}}switch(f){case 71:h=Zw(a,g,xz(pz(UE,1),cKd,2,6,[PKd,QKd]),b);e.e=h;return true;case 77:return ix(a,b,e,h,g);case 76:return kx(a,b,e,h,g);case 69:return gx(a,b,g,e);case 99:return jx(a,b,g,e);case 97:h=Zw(a,g,xz(pz(UE,1),cKd,2,6,['AM','PM']),b);e.b=h;return true;case 121:return mx(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return hx(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(gB[i]&&(q=i);for(l=new ccb(a.b.b);l.a0?(m=IDc(h)):(m=GDc(IDc(h)));a.ze(b6b,m)}switch(m.g){case 4:qub(k,r5b,(K2b(),G2b));qub(k,Q1b,($_b(),Z_b));k.n.b=g.b;kHb(l,(FDc(),kDc));l.k.b=j.b;break;case 2:qub(k,r5b,(K2b(),I2b));qub(k,Q1b,($_b(),X_b));k.n.b=g.b;kHb(l,(FDc(),EDc));l.k.b=j.b;break;case 1:qub(k,$1b,(p1b(),o1b));k.n.a=g.a;kHb(l,(FDc(),CDc));l.k.a=j.a;break;case 3:qub(k,$1b,(p1b(),m1b));k.n.a=g.a;kHb(l,(FDc(),lDc));l.k.a=j.a;}if(b==PCc||b==RCc||b==QCc){n=0;if(b==PCc&&a.ye($5b)){switch(m.g){case 1:case 2:n=kA(a.xe($5b),21).a;break;case 3:case 4:n=-kA(a.xe($5b),21).a;}}else{switch(m.g){case 4:case 2:n=f.b;b==RCc&&(n/=e.b);break;case 1:case 3:n=f.a;b==RCc&&(n/=e.a);}}qub(k,q2b,n)}qub(k,V1b,m);return k} +function WKc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=kA(kA(Ke(a.r,b),19),60);if(b==(FDc(),kDc)||b==EDc){$Kc(a,b);return}f=b==lDc?(YLc(),ULc):(YLc(),XLc);u=b==lDc?(eJc(),dJc):(eJc(),bJc);c=kA(Cfb(a.b,b),114);d=c.i;e=d.c+hyc(xz(pz(DA,1),vLd,22,15,[c.n.b,a.A.b,a.k]));r=d.c+d.b-hyc(xz(pz(DA,1),vLd,22,15,[c.n.c,a.A.c,a.k]));g=GLc(LLc(f),a.s);s=b==lDc?sRd:YQd;for(l=m.tc();l.hc();){j=kA(l.ic(),111);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.Re();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);gjb(u,GSd);n.f=u;CIc(n,(pIc(),oIc));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.cw&&(o.c=w-o.b);tbb(g.d,new cMc(o,ELc(g,o)));s=b==lDc?$wnd.Math.max(s,p.b+j.b.Re().b):$wnd.Math.min(s,p.b)}s+=b==lDc?a.s:-a.s;t=FLc((g.e=s,g));t>0&&(kA(Cfb(a.b,b),114).a.b=t);for(k=m.tc();k.hc();){j=kA(k.ic(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function zHc(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new pyc(b.Qe().a,b.Qe().b,b.Re().a,b.Re().b);e=new oyc;if(a.c){for(g=new ccb(b.We());g.a=2){if((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a).i==0){c=(gMc(),e=new BQc,e);fXc((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a).i>1){m=new j0c((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a));while(m.e!=m.i._b()){__c(m)}}zFc(b,kA(WXc((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a),0),270))}if(l){for(d=new a0c((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a));d.e!=d.i._b();){c=kA($_c(d),270);for(j=new a0c((!c.a&&(c.a=new fdd(GV,c,5)),c.a));j.e!=j.i._b();){i=kA($_c(j),531);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new a0c((!a.n&&(a.n=new zkd(LV,a,1,7)),a.n));g.e!=g.i._b();){f=kA($_c(g),137);k=kA(AOc(f,$Bc),9);!!k&&pPc(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function Omc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.Pb();a.f.a.Pb();a.c.c=tz(NE,oJd,1,0,5,1);a.i.c=tz(NE,oJd,1,0,5,1);a.g.a.Pb();if(b){for(g=new ccb(b.a);g.a>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!BEd(g=f[k++])||!BEd(h=f[k++])){return null}b=wEd[g];c=wEd[h];i=f[k++];j=f[k++];if(wEd[i]==-1||wEd[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=tz(BA,jTd,22,n*3+1,15,1);T6(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=wEd[i];if((d&3)!=0)return null;q=tz(BA,jTd,22,n*3+2,15,1);T6(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=wEd[i];e=wEd[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function QMc(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new Gbb;l=b.length;g=Xkd(c);for(j=0;jh){t=0;u+=g+r;g=0}Jwb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function UKb(a,b,c){var d,e,f,g,h;d=b.i;f=a.g.n;e=a.g.d;h=a.k;g=Pyc(xz(pz(aU,1),cKd,9,0,[h,a.a]));switch(a.i.g){case 1:DIc(b,(eJc(),bJc));d.d=-e.d-c-d.a;if(kA(kA(jdb(b.d).a.cd(0),271).xe((E2b(),b2b)),265)==(jHc(),fHc)){CIc(b,(pIc(),oIc));d.c=g.a-Vpb(nA(nub(a,g2b)))-c-d.b}else{CIc(b,(pIc(),nIc));d.c=g.a+Vpb(nA(nub(a,g2b)))+c}break;case 2:CIc(b,(pIc(),nIc));d.c=f.a+e.c+c;if(kA(kA(jdb(b.d).a.cd(0),271).xe((E2b(),b2b)),265)==(jHc(),fHc)){DIc(b,(eJc(),bJc));d.d=g.b-Vpb(nA(nub(a,g2b)))-c-d.a}else{DIc(b,(eJc(),dJc));d.d=g.b+Vpb(nA(nub(a,g2b)))+c}break;case 3:DIc(b,(eJc(),dJc));d.d=f.b+e.a+c;if(kA(kA(jdb(b.d).a.cd(0),271).xe((E2b(),b2b)),265)==(jHc(),fHc)){CIc(b,(pIc(),oIc));d.c=g.a-Vpb(nA(nub(a,g2b)))-c-d.b}else{CIc(b,(pIc(),nIc));d.c=g.a+Vpb(nA(nub(a,g2b)))+c}break;case 4:CIc(b,(pIc(),oIc));d.c=-e.b-c-d.b;if(kA(kA(jdb(b.d).a.cd(0),271).xe((E2b(),b2b)),265)==(jHc(),fHc)){DIc(b,(eJc(),bJc));d.d=g.b-Vpb(nA(nub(a,g2b)))-c-d.a}else{DIc(b,(eJc(),dJc));d.d=g.b+Vpb(nA(nub(a,g2b)))+c}}} +function FTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=new LTb(a);h=Qr(yn(b,g));bdb();Dbb(h,new QTb);e=a.b;switch(e.c){case 2:i=new UTb(e.a);c=Kn(yn(h,i));se(c)?(j=kA(te(c),188).b):(j=15);i=new UTb(Glc(e));c=Kn(yn(h,i));se(c)?(f=kA(te(c),188).b):(f=15);i=new UTb(e.b);c=Kn(yn(h,i));se(c)?(k=kA(te(c),188).b):(k=15);d=ATb(a,j,f,k);Ggb(b,new ITb(d,a.c,a.e,a.a.c.g,e.a));Ggb(b,new ITb(d,a.c,a.e,a.a.c.g,Glc(e)));Ggb(b,new ITb(d,a.c,a.e,a.a.c.g,e.b));break;case 1:i=new UTb(e.a);c=Kn(yn(h,i));se(c)?(j=kA(te(c),188).b):(j=15);i=new UTb(e.b);c=Kn(yn(h,i));se(c)?(k=kA(te(c),188).b):(k=15);d=BTb(a,j,k);Ggb(b,new ITb(d,a.c,a.e,a.a.c.g,e.a));Ggb(b,new ITb(d,a.c,a.e,a.a.c.g,e.b));break;case 0:i=new UTb(e.a);c=Kn(yn(h,i));se(c)?(j=kA(te(c),188).b):(j=15);d=(l=a.b,m=xmc(a.a.c,a.a.d,j),pg(a.a.a,Vlc(m)),n=DTb(a.a.b,m.a,l),o=new Emc((!m.k&&(m.k=new Cmc(Xlc(m))),m.k)),zmc(o),!n?o:Gmc(o,n));Ggb(b,new ITb(d,a.c,a.e,a.a.c.g,e.a));break;default:throw x2(new O4('The loopside must be defined.'));}return d} +function ZDb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;xEc(b,'Compound graph postprocessor',1);c=Vpb(mA(nub(a,(J6b(),y6b))));h=kA(nub(a,(E2b(),O1b)),238);k=new Jgb;for(r=h.Xb().tc();r.hc();){q=kA(r.ic(),14);g=new Ibb(h.Mc(q));bdb();Dbb(g,new BEb(a));v=wEb((Mpb(0,g.c.length),kA(g.c[0],234)));A=xEb(kA(xbb(g,g.c.length-1),234));t=v.g;SFb(A.g,t)?(s=kA(nub(t,h2b),31)):(s=uGb(t));l=$Db(q,g);xib(q.a);m=null;for(f=new ccb(g);f.alNd;C=$wnd.Math.abs(m.b-o.b)>lNd;(!c&&B&&C||c&&(B||C))&&mib(q.a,u)}pg(q.a,d);d.b==0?(m=u):(m=(Lpb(d.b!=0),kA(d.c.b.c,9)));_Db(n,l,p);if(xEb(e)==A){if(uGb(A.g)!=e.a){p=new Hyc;LFb(p,uGb(A.g),s)}qub(q,C2b,p)}aEb(n,q,s);k.a.Zb(n,k)}LEb(q,v);MEb(q,A)}for(j=k.a.Xb().tc();j.hc();){i=kA(j.ic(),14);LEb(i,null);MEb(i,null)}zEc(b)} +function mYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new s9(a.b,0);k=b.tc();o=0;j=kA(k.ic(),21).a;v=0;c=new Jgb;A=new iib;while(s.b=a.a){d=iNb(a,s);k=v5(k,d.b);u=v5(u,d.d);tbb(h,new fGc(s,d))}}B=new Gbb;for(j=0;j0),q.a.cd(q.c=--q.b),C=new lIb(a.b),r9(q,C),Lpb(q.b=d.n.b/2}else{s=!l}if(s){r=kA(nub(d,(E2b(),D2b)),15);if(!r){f=new Gbb;qub(d,D2b,f)}else if(m){f=r}else{e=kA(nub(d,I1b),15);if(!e){f=new Gbb;qub(d,I1b,f)}else{r._b()<=e._b()?(f=r):(f=e)}}}else{e=kA(nub(d,(E2b(),I1b)),15);if(!e){f=new Gbb;qub(d,I1b,f)}else if(l){f=e}else{r=kA(nub(d,D2b),15);if(!r){f=new Gbb;qub(d,D2b,f)}else{e._b()<=r._b()?(f=e):(f=r)}}}f.nc(a);qub(a,(E2b(),K1b),c);if(b.d==c){MEb(b,null);c.d.c.length+c.f.c.length==0&&jHb(c,null);xKb(c)}else{LEb(b,null);c.d.c.length+c.f.c.length==0&&jHb(c,null)}xib(b.a)} +function cKb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;if(yA(nub(a.c,(J6b(),Z5b)))===yA((VCc(),RCc))||yA(nub(a.c,Z5b))===yA(QCc)){for(k=new ccb(a.c.i);k.a0){e=kA(xbb(q.c.a,w-1),8);g=a.i[e.o];B=$wnd.Math.ceil(l8b(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.n.b+e.d.a)-B}j=oLd;if(w0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.aA.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function gw(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} +function Flc(){Flc=d3;jlc=new Mlc('N',0,(FDc(),lDc),lDc,0);glc=new Mlc('EN',1,kDc,lDc,1);flc=new Mlc('E',2,kDc,kDc,0);mlc=new Mlc('SE',3,CDc,kDc,1);llc=new Mlc('S',4,CDc,CDc,0);Elc=new Mlc('WS',5,EDc,CDc,1);Dlc=new Mlc('W',6,EDc,EDc,0);klc=new Mlc('NW',7,lDc,EDc,1);hlc=new Mlc('ENW',8,kDc,EDc,2);ilc=new Mlc('ESW',9,kDc,EDc,2);nlc=new Mlc('SEN',10,CDc,lDc,2);Blc=new Mlc('SWN',11,CDc,lDc,2);Clc=new Mlc(LQd,12,DDc,DDc,3);clc=qm(jlc,glc,flc,mlc,llc,Elc,xz(pz(OR,1),jKd,129,0,[Dlc,klc,hlc,ilc,nlc,Blc]));elc=(nl(),mm(xz(pz(NE,1),oJd,1,5,[jlc,flc,llc,Dlc])));dlc=mm(xz(pz(NE,1),oJd,1,5,[glc,mlc,Elc,klc]));slc=new ov(lDc);plc=mm(xz(pz(NE,1),oJd,1,5,[kDc,lDc]));olc=new ov(kDc);vlc=mm(xz(pz(NE,1),oJd,1,5,[CDc,kDc]));ulc=new ov(CDc);Alc=mm(xz(pz(NE,1),oJd,1,5,[EDc,CDc]));zlc=new ov(EDc);tlc=mm(xz(pz(NE,1),oJd,1,5,[lDc,EDc]));qlc=mm(xz(pz(NE,1),oJd,1,5,[kDc,lDc,EDc]));rlc=mm(xz(pz(NE,1),oJd,1,5,[kDc,CDc,EDc]));xlc=mm(xz(pz(NE,1),oJd,1,5,[CDc,EDc,lDc]));wlc=mm(xz(pz(NE,1),oJd,1,5,[CDc,kDc,lDc]));ylc=(av(),_u)} +function pdc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;c=Vpb(nA(nub(a.a.j,(J6b(),R4b))));if(c<-1||!a.a.i||WCc(kA(nub(a.a.o,Z5b),83))||AGb(a.a.o,(FDc(),kDc))._b()<2&&AGb(a.a.o,EDc)._b()<2){return true}if(a.a.c.pf()){return false}u=0;t=0;s=new Gbb;for(i=a.a.e,j=0,k=i.length;j=c} +function DRb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;xEc(b,mOd,1);n=kA(nub(a,(J6b(),a5b)),197);for(e=new ccb(a.b);e.a=2){o=true;l=new ccb(f.i);c=kA(acb(l),11);while(l.a0){m=k<100?null:new f_c(k);j=new eYc(b);o=j.g;r=tz(FA,OKd,22,k,15,1);d=0;u=new dYc(k);for(e=0;e=0;){if(h!=null?kb(h,o[i]):null==o[i]){if(r.length<=d){q=r;r=tz(FA,OKd,22,2*r.length,15,1);T6(q,0,r,0,d)}r[d++]=e;fXc(u,o[i]);break v}}if(yA(h)===yA(h)){break}}}o=u.g;if(d>r.length){q=r;r=tz(FA,OKd,22,d,15,1);T6(q,0,r,0,d)}if(d>0){t=true;for(f=0;f=0;){ZXc(a,r[g])}if(d!=d){for(e=d;--e>=d;){ZXc(u,e)}q=r;r=tz(FA,OKd,22,d,15,1);T6(q,0,r,0,d)}b=u}}}else{b=kXc(a,b);for(e=a.i;--e>=0;){if(b.pc(a.g[e])){ZXc(a,e);t=true}}}if(t){if(r!=null){c=b._b();l=c==1?ncd(a,4,b.tc().ic(),null,r[0],p):ncd(a,6,b,r,r[0],p);m=c<100?null:new f_c(c);for(e=b.tc();e.hc();){n=e.ic();m=Pud(a,kA(n,75),m)}if(!m){vMc(a.e,l)}else{m.Sh(l);m.Th()}}else{m=s_c(b._b());for(e=b.tc();e.hc();){n=e.ic();m=Pud(a,kA(n,75),m)}!!m&&m.Th()}return true}else{return false}} +function cac(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;xEc(c,'MinWidth layering',1);n=b.b;A=b.a;I=kA(nub(b,(J6b(),s5b)),21).a;h=kA(nub(b,t5b),21).a;a.b=Vpb(nA(nub(b,k6b)));a.d=oLd;for(u=new ccb(A);u.a0||c.o==oic&&e0){l=kA(xbb(m.c.a,g-1),8);B=l8b(a.b,m,l);q=m.k.b-m.d.d-(l.k.b+l.n.b+l.d.a+B)}else{q=m.k.b-m.d.d}j=$wnd.Math.min(q,j);if(g=1){if(B-j>0&&o>=0){rPc(l,l.i+A);sPc(l,l.j+i*j)}else if(B-j<0&&n>=0){rPc(l,l.i+A*B);sPc(l,l.j+i)}}}}COc(a,hAc,(f=kA(e4(uU),10),new ngb(f,kA(ypb(f,f.length),10),0)));return new Jyc(C,k)} +function OVb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Gbb;for(m=new ccb(a.d.b);m.ae.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=kA(F8(a.f,g.d.g),57);if(b.bf.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=kl(vGb(n));So(h);){g=kA(To(h),14);if(g.a.b!=0){b=kA(rib(g.a),9);if(g.d.i==(FDc(),lDc)){q=new fXb(b,new Jyc(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.i==CDc){q=new fXb(b,new Jyc(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p} +function RYc(){QYc();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=SYc((bdb(),new Xdb(new R9(PYc.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=SYc((bdb(),new Xdb(new R9(PYc.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=SYc((bdb(),new Xdb(new R9(PYc.d))));f.postMessage({id:b.id,data:e});break;case 'register':VYc(b.algorithms);f.postMessage({id:b.id});break;case 'layout':TYc(b.graph,b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){delete a[qKd];f.postMessage({id:b.data.id,error:a.message})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===YTd&&typeof self!==YTd){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==YTd&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function LLb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.e.a==0){for(q=new ccb(a);q.a50?(r.c[r.c.length]=e,true):e.k>0?(s.c[s.c.length]=e,true):(t.c[t.c.length]=e,true)}if(s.c.length==1&&r.c.length==0){vbb(r,s);s.c=tz(NE,oJd,1,0,5,1)}r.c.length!=0&&kgb(aTb(a.a),(Flc(),jlc))&&kgb(aTb(a.a),(Flc(),llc))?TSb(a,r):vbb(s,r);s.c.length==0||USb(a,s);if(t.c.length!=0){c=bTb(a.a);if(c.c!=0){k=new ccb(t);i=(Pb(c),co((new En(c)).a));while(k.a1){p=kA(Io(i),129);Zkc(e,p,true);bcb(k);eTb(a.a,p)}}}m=t.c.length;d=WSb(a);n=new Gbb;g=m/_Sb(a.a).c|0;for(h=0;h3){vbb(n,(Flc(),Flc(),dlc));o-=4}switch(o){case 3:tbb(n,Jlc(d));case 2:q=Ilc(Jlc(d));do{q=Ilc(q)}while(!kgb(aTb(a.a),q));n.c[n.c.length]=q;q=Klc(Jlc(d));do{q=Klc(q)}while(!kgb(aTb(a.a),q));n.c[n.c.length]=q;break;case 1:tbb(n,Jlc(d));}l=new ccb(n);j=new ccb(t);while(l.ap){if(f){oib(w,n);oib(B,d5(k.b-1));tbb(a.d,o);h.c=tz(NE,oJd,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ZEc(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}vbb(a.a,h);tbb(a.d,kA(xbb(h,h.c.length-1),145));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F1&&(g=$wnd.Math.min(g,$wnd.Math.abs(kA(Fq(h.a,1),9).b-k.b)))}}}}}else{for(p=new ccb(b.i);p.ae){f=m.a-e;g=jJd;d.c=tz(NE,oJd,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(kA(Fq(h.a,h.a.b-2),9).b-m.b)))}}}}}if(d.c.length!=0&&f>b.n.a/2&&g>b.n.b/2){n=new lHb;jHb(n,b);kHb(n,(FDc(),lDc));n.k.a=b.n.a/2;r=new lHb;jHb(r,b);kHb(r,CDc);r.k.a=b.n.a/2;r.k.b=b.n.b;for(i=new ccb(d);i.a=j.b?LEb(h,r):LEb(h,n)}else{j=kA(vib(h.a),9);q=h.a.b==0?gHb(h.c):kA(rib(h.a),9);q.b>=j.b?MEb(h,r):MEb(h,n)}l=kA(nub(h,(J6b(),p5b)),74);!!l&&qg(l,j,true)}b.k.a=e-b.n.a/2}} +function wic(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new ccb(a.a.b);h.a0){d=l._b();j=zA($wnd.Math.floor((d+1)/2))-1;e=zA($wnd.Math.ceil((d+1)/2))-1;if(b.o==oic){for(k=e;k>=j;k--){if(b.a[u.o]==u){p=kA(l.cd(k),48);o=kA(p.a,8);if(!Hgb(c,p.b)&&n>a.b.e[o.o]){b.a[o.o]=u;b.g[u.o]=b.g[o.o];b.a[u.o]=b.g[u.o];b.f[b.g[u.o].o]=(B3(),Vpb(b.f[b.g[u.o].o])&u.j==(RGb(),OGb)?true:false);n=a.b.e[o.o]}}}}else{for(k=j;k<=e;k++){if(b.a[u.o]==u){r=kA(l.cd(k),48);q=kA(r.a,8);if(!Hgb(c,r.b)&&n=48&&b<=57){d=b-48;while(e=48&&b<=57){d=d*10+b-48;if(d<0)throw x2(new KEd(WYc((isd(),IUd))))}}else{throw x2(new KEd(WYc((isd(),EUd))))}c=d;if(b==44){if(e>=a.j){throw x2(new KEd(WYc((isd(),GUd))))}else if((b=X5(a.i,e++))>=48&&b<=57){c=b-48;while(e=48&&b<=57){c=c*10+b-48;if(c<0)throw x2(new KEd(WYc((isd(),IUd))))}if(d>c)throw x2(new KEd(WYc((isd(),HUd))))}else{c=-1}}if(b!=125)throw x2(new KEd(WYc((isd(),FUd))));if(a.Ck(e)){f=(UGd(),UGd(),++TGd,new JHd(9,f));a.d=e+1}else{f=(UGd(),UGd(),++TGd,new JHd(3,f));a.d=e}f.nl(d);f.ml(c);LEd(a)}}return f} +function _Cb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=bDb(YCb(a,(FDc(),qDc)),b);o=aDb(YCb(a,rDc),b);u=aDb(YCb(a,zDc),b);B=cDb(YCb(a,BDc),b);m=cDb(YCb(a,mDc),b);s=aDb(YCb(a,yDc),b);p=aDb(YCb(a,sDc),b);w=aDb(YCb(a,ADc),b);v=aDb(YCb(a,nDc),b);C=cDb(YCb(a,pDc),b);r=aDb(YCb(a,wDc),b);t=aDb(YCb(a,vDc),b);A=aDb(YCb(a,oDc),b);D=cDb(YCb(a,xDc),b);n=cDb(YCb(a,tDc),b);q=aDb(YCb(a,uDc),b);c=hyc(xz(pz(DA,1),vLd,22,15,[s.a,B.a,w.a,D.a]));d=hyc(xz(pz(DA,1),vLd,22,15,[o.a,l.a,u.a,q.a]));e=r.a;f=hyc(xz(pz(DA,1),vLd,22,15,[p.a,m.a,v.a,n.a]));j=hyc(xz(pz(DA,1),vLd,22,15,[s.b,o.b,p.b,t.b]));i=hyc(xz(pz(DA,1),vLd,22,15,[B.b,l.b,m.b,q.b]));k=C.b;h=hyc(xz(pz(DA,1),vLd,22,15,[w.b,u.b,v.b,A.b]));TCb(YCb(a,qDc),c+e,j+k);TCb(YCb(a,uDc),c+e,j+k);TCb(YCb(a,rDc),c+e,0);TCb(YCb(a,zDc),c+e,j+k+i);TCb(YCb(a,BDc),0,j+k);TCb(YCb(a,mDc),c+e+d,j+k);TCb(YCb(a,sDc),c+e+d,0);TCb(YCb(a,ADc),0,j+k+i);TCb(YCb(a,nDc),c+e+d,j+k+i);TCb(YCb(a,pDc),0,j);TCb(YCb(a,wDc),c,0);TCb(YCb(a,oDc),0,j+k+i);TCb(YCb(a,tDc),c+e+d,0);g=new Hyc;g.a=hyc(xz(pz(DA,1),vLd,22,15,[c+d+e+f,C.a,t.a,A.a]));g.b=hyc(xz(pz(DA,1),vLd,22,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function uMc(){uMc=d3;iMc();tMc=hMc.a;kA(WXc(Ibd(hMc.a),0),17);nMc=hMc.f;kA(WXc(Ibd(hMc.f),0),17);kA(WXc(Ibd(hMc.f),1),29);sMc=hMc.n;kA(WXc(Ibd(hMc.n),0),29);kA(WXc(Ibd(hMc.n),1),29);kA(WXc(Ibd(hMc.n),2),29);kA(WXc(Ibd(hMc.n),3),29);oMc=hMc.g;kA(WXc(Ibd(hMc.g),0),17);kA(WXc(Ibd(hMc.g),1),29);kMc=hMc.c;kA(WXc(Ibd(hMc.c),0),17);kA(WXc(Ibd(hMc.c),1),17);pMc=hMc.i;kA(WXc(Ibd(hMc.i),0),17);kA(WXc(Ibd(hMc.i),1),17);kA(WXc(Ibd(hMc.i),2),17);kA(WXc(Ibd(hMc.i),3),17);kA(WXc(Ibd(hMc.i),4),29);qMc=hMc.j;kA(WXc(Ibd(hMc.j),0),17);lMc=hMc.d;kA(WXc(Ibd(hMc.d),0),17);kA(WXc(Ibd(hMc.d),1),17);kA(WXc(Ibd(hMc.d),2),17);kA(WXc(Ibd(hMc.d),3),17);kA(WXc(Ibd(hMc.d),4),29);kA(WXc(Ibd(hMc.d),5),29);kA(WXc(Ibd(hMc.d),6),29);kA(WXc(Ibd(hMc.d),7),29);jMc=hMc.b;kA(WXc(Ibd(hMc.b),0),29);kA(WXc(Ibd(hMc.b),1),29);mMc=hMc.e;kA(WXc(Ibd(hMc.e),0),29);kA(WXc(Ibd(hMc.e),1),29);kA(WXc(Ibd(hMc.e),2),29);kA(WXc(Ibd(hMc.e),3),29);kA(WXc(Ibd(hMc.e),4),17);kA(WXc(Ibd(hMc.e),5),17);kA(WXc(Ibd(hMc.e),6),17);kA(WXc(Ibd(hMc.e),7),17);kA(WXc(Ibd(hMc.e),8),17);kA(WXc(Ibd(hMc.e),9),17);kA(WXc(Ibd(hMc.e),10),29);rMc=hMc.k;kA(WXc(Ibd(hMc.k),0),29);kA(WXc(Ibd(hMc.k),1),29)} +function _mc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new yib;w=new yib;q=-1;for(i=new ccb(a);i.a=o){if(s>o){n.c=tz(NE,oJd,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=kA(xbb(n,Xjb(b,n.c.length)),125);F.a.$b(m)!=null;m.p=p++;dnc(m,C,w);n.c=tz(NE,oJd,1,0,5,1)}}u=a.c.length+1;for(h=new ccb(a);h.aD.p){l9(c);Abb(D.g,d);if(d.c>0){d.a=D;tbb(D.q,d);d.b=A;tbb(A.g,d)}}}}} +function ggc(a,b,c){var d,e,f,g,h,i,j,k,l;xEc(c,'Network simplex node placement',1);a.e=b;a.n=kA(nub(b,(E2b(),v2b)),266);fgc(a);Tfc(a);Sob(Rob(new Zob(null,new ekb(a.e.b,16)),new Vgc),new Xgc(a));Sob(Pob(Rob(Pob(Rob(new Zob(null,new ekb(a.e.b,16)),new Khc),new Mhc),new Ohc),new Qhc),new Tgc(a));if(Vpb(mA(nub(a.e,(J6b(),E5b))))){g=BEc(c,1);xEc(g,'Straight Edges Pre-Processing',1);egc(a);zEc(g)}MZb(a.f);f=kA(nub(b,x6b),21).a*a.f.a.c.length;w$b(J$b(K$b(N$b(a.f),f),false),BEc(c,1));if(a.d.a._b()!=0){g=BEc(c,1);xEc(g,'Flexible Where Space Processing',1);h=kA(jjb(Xob(Tob(new Zob(null,new ekb(a.f.a,16)),new Zgc),(Npb(new tgc),new Nmb))),21).a;i=kA(jjb(Vob(Tob(new Zob(null,new ekb(a.f.a,16)),new _gc),new xgc)),21).a;j=i-h;k=p$b(new r$b,a.f);l=p$b(new r$b,a.f);DZb(GZb(FZb(EZb(HZb(new IZb,20000),j),k),l));Sob(Pob(Pob(Gcb(a.i),new bhc),new dhc),new fhc(h,k,j,l));for(e=a.d.a.Xb().tc();e.hc();){d=kA(e.ic(),189);d.g=1}w$b(J$b(K$b(N$b(a.f),f),false),BEc(g,1));zEc(g)}if(Vpb(mA(nub(b,E5b)))){g=BEc(c,1);xEc(g,'Straight Edges Post-Processing',1);dgc(a);zEc(g)}Sfc(a);a.e=null;a.f=null;a.i=null;a.c=null;L8(a.k);a.j=null;a.a=null;a.o=null;a.d.a.Pb();zEc(c)} +function LRb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Hbb(b.b);u=new Hbb(b.b);m=new Hbb(b.b);B=new Hbb(b.b);q=new Hbb(b.b);for(A=sib(b,0);A.b!=A.d.c;){v=kA(Gib(A),11);for(h=new ccb(v.f);h.a0;r=v.f.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new ccb(p);o.a=0&&Z5(a.substr(h,'//'.length),'//')){h+=2;i=W5c(a,h,E5c,F5c);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||a.charCodeAt(h)!=47)){g=false;i=c6(a,o6(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h0&&X5(k,k.length-1)==58){e=k;h=i}}if(h=m){if(u>m){l.c=tz(NE,oJd,1,0,5,1);m=u}l.c[l.c.length]=q}}if(l.c.length!=0){k=kA(xbb(l,Xjb(b,l.c.length)),165);Elb(H.a,k)!=null;k.d=n++;akc(k,F,B);l.c=tz(NE,oJd,1,0,5,1)}}w=a.c.length+1;for(r=new ccb(a);r.aG.d){l9(c);Abb(G.b,d);if(d.c>0){d.a=G;tbb(G.e,d);d.b=C;tbb(C.b,d)}}}}} +function XUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;s=new Xm;t=new Xm;k=WTc(b,zTd);d=new WVc(a,c,s,t);MUc(d.a,d.b,d.c,d.d,k);i=(w=s.i,!w?(s.i=sA(s.c,122)?new Ph(s,kA(s.c,122)):sA(s.c,115)?new Nh(s,kA(s.c,115)):new ph(s,s.c)):w);for(B=i.tc();B.hc();){A=kA(B.ic(),270);e=kA(Ke(s,A),19);for(p=e.tc();p.hc();){o=p.ic();u=kA(qc(a.d,o),270);if(u){h=(!A.e&&(A.e=new pxd(IV,A,10,9)),A.e);fXc(h,u)}else{g=ZTc(b,HTd);m=NTd+o+OTd+g;n=m+MTd;throw x2(new aUc(n))}}}j=(v=t.i,!v?(t.i=sA(t.c,122)?new Ph(t,kA(t.c,122)):sA(t.c,115)?new Nh(t,kA(t.c,115)):new ph(t,t.c)):v);for(D=j.tc();D.hc();){C=kA(D.ic(),270);f=kA(Ke(t,C),19);for(r=f.tc();r.hc();){q=r.ic();u=kA(qc(a.d,q),270);if(u){l=(!C.g&&(C.g=new pxd(IV,C,9,10)),C.g);fXc(l,u)}else{g=ZTc(b,HTd);m=NTd+q+OTd+g;n=m+MTd;throw x2(new aUc(n))}}}!c.b&&(c.b=new pxd(HV,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new pxd(HV,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new pxd(HV,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new pxd(HV,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new zkd(IV,c,6,6)),c.a).i==1){F=kA(WXc((!c.a&&(c.a=new zkd(IV,c,6,6)),c.a),0),270);if(!nQc(F)&&!oQc(F)){uQc(F,kA(WXc((!c.b&&(c.b=new pxd(HV,c,4,7)),c.b),0),97));vQc(F,kA(WXc((!c.c&&(c.c=new pxd(HV,c,5,8)),c.c),0),97))}}} +function gDb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new Jyc(oLd,oLd);a.c=new Jyc(pLd,pLd);for(m=b.tc();m.hc();){k=kA(m.ic(),31);for(t=new ccb(k.a);t.a=v||!p9b(r,d))&&(d=r9b(b,k));FGb(r,d);for(f=kl(vGb(r));So(f);){e=kA(To(f),14);if(a.a[e.o]){continue}p=e.c.g;--a.e[p.o];a.e[p.o]==0&&(Spb(Djb(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){tbb(b.b,(Mpb(j,k.c.length),kA(k.c[j],26)))}b.a.c=tz(NE,oJd,1,0,5,1);zEc(c)} +function _Uc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q;F=OUc(a,XWc(c),b);aPc(F,ZTc(b,HTd));G=kA(qc(a.g,TTc(Ly(b,oTd))),35);m=Ly(b,'sourcePort');d=null;!!m&&(d=TTc(m));H=kA(qc(a.j,d),121);if(!G){h=UTc(b);o="An edge must have a source node (edge id: '"+h;p=o+MTd;throw x2(new aUc(p))}if(!!H&&!Hb(mTc(H),G)){i=ZTc(b,HTd);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+MTd;throw x2(new aUc(r))}B=(!F.b&&(F.b=new pxd(HV,F,4,7)),F.b);H?(f=H):(f=G);fXc(B,f);I=kA(qc(a.g,TTc(Ly(b,PTd))),35);n=Ly(b,'targetPort');e=null;!!n&&(e=TTc(n));J=kA(qc(a.j,e),121);if(!I){l=UTc(b);s="An edge must have a target node (edge id: '"+l;t=s+MTd;throw x2(new aUc(t))}if(!!J&&!Hb(mTc(J),I)){j=ZTc(b,HTd);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+MTd;throw x2(new aUc(v))}C=(!F.c&&(F.c=new pxd(HV,F,5,8)),F.c);J?(g=J):(g=I);fXc(C,g);if((!F.b&&(F.b=new pxd(HV,F,4,7)),F.b).i==0||(!F.c&&(F.c=new pxd(HV,F,5,8)),F.c).i==0){k=ZTc(b,HTd);w=LTd+k;A=w+MTd;throw x2(new aUc(A))}aVc(b,F);K=$Wc(F,true,true);L=YTc(b,'sourcePoint');M=new EVc(K);zUc(M.a,L);N=YTc(b,'targetPoint');O=new SVc(K);IUc(O.a,N);P=WTc(b,ATd);Q=new TVc(K);JUc(Q.a,P);D=ZUc(a,b,F);return D} +function j8(a,b){g8();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=a.e;n=a.d;e=a.a;if(A==0){switch(b){case 0:return '0';case 1:return ALd;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:v=new M6;b<0?(v.a+='0E+',v):(v.a+='0E',v);v.a+=-b;return v.a;}}s=n*10+1+7;t=tz(CA,yKd,22,s+1,15,1);c=s;if(n==1){g=e[0];if(g<0){G=z2(g,yLd);do{o=G;G=C2(G,10);t[--c]=48+U2(R2(o,J2(G,10)))&AKd}while(A2(G,0)!=0)}else{G=g;do{o=G;G=G/10|0;t[--c]=48+(o-G*10)&AKd}while(G!=0)}}else{C=tz(FA,OKd,22,n,15,1);F=n;T6(e,0,C,0,n);H:while(true){w=0;for(i=F-1;i>=0;i--){D=y2(O2(w,32),z2(C[i],yLd));q=h8(D);C[i]=U2(q);w=U2(P2(q,32))}r=U2(w);p=c;do{t[--c]=48+r%10&AKd}while((r=r/10|0)!=0&&c!=0);d=9-p+c;for(h=0;h0;h++){t[--c]=48}k=F-1;for(;C[k]==0;k--){if(k==0){break H}}F=k+1}while(t[c]==48){++c}}m=A<0;f=s-c-b-1;if(b==0){m&&(t[--c]=45);return r6(t,c,s-c)}if(b>0&&f>=-6){if(f>=0){j=c+f;for(l=s-1;l>=j;l--){t[l+1]=t[l]}t[++j]=46;m&&(t[--c]=45);return r6(t,c,s-c+1)}for(k=2;k<-f+1;k++){t[--c]=48}t[--c]=46;t[--c]=48;m&&(t[--c]=45);return r6(t,c,s-c)}B=c+1;u=new N6;m&&(u.a+='-',u);if(s-B>=1){C6(u,t[c]);u.a+='.';u.a+=r6(t,c+1,s-c-1)}else{u.a+=r6(t,c,s-c)}u.a+='E';f>0&&(u.a+='+',u);u.a+=''+f;return u.a} +function uGc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=kA(WXc((!a.b&&(a.b=new pxd(HV,a,4,7)),a.b),0),97);v=t.Yf();w=t.Zf();u=t.Xf()/2;p=t.Wf()/2;if(sA(t,187)){s=kA(t,121);v+=mTc(s).i;v+=mTc(s).i}v+=u;w+=p;F=kA(WXc((!a.b&&(a.b=new pxd(HV,a,4,7)),a.b),0),97);H=F.Yf();I=F.Zf();G=F.Xf()/2;A=F.Wf()/2;if(sA(F,187)){D=kA(F,121);H+=mTc(D).i;H+=mTc(D).i}H+=G;I+=A;if((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a).i==0){h=(gMc(),j=new BQc,j);fXc((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a).i>1){o=new j0c((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a));while(o.e!=o.i._b()){__c(o)}}g=kA(WXc((!a.a&&(a.a=new zkd(IV,a,6,6)),a.a),0),270);q=H;H>v+u?(q=v+u):Hw+p?(r=w+p):Iv-u&&qw-p&&rH+G?(B=H+G):vI+A?(C=I+A):wH-G&&BI-A&&Cc&&(m=c-1);n=N+Yjb(b,24)*LLd*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(gMc(),i=new QOc,i);OOc(e,m);POc(e,n);fXc((!g.a&&(g.a=new fdd(GV,g,5)),g.a),e)}} +function swb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Gbb;h=new Gbb;q=b/2;n=a._b();e=kA(a.cd(0),9);r=kA(a.cd(1),9);o=twb(e.a,e.b,r.a,r.b,q);tbb(d,(Mpb(0,o.c.length),kA(o.c[0],9)));tbb(h,(Mpb(1,o.c.length),kA(o.c[1],9)));for(j=2;j=0;i--){mib(c,(Mpb(i,g.c.length),kA(g.c[i],9)))}return c} +function tMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=kA(nub(a,(J6b(),Z5b)),83);if(!(A!=(VCc(),TCc)&&A!=UCc)){return}o=a.b;n=o.c.length;k=new Hbb((Wj(n+2,gKd),Dv(y2(y2(5,n+2),(n+2)/10|0))));p=new Hbb((Wj(n+2,gKd),Dv(y2(y2(5,n+2),(n+2)/10|0))));tbb(k,new Bgb);tbb(k,new Bgb);tbb(p,new Gbb);tbb(p,new Gbb);w=new Gbb;for(b=0;bF?l:F}for(d=new ccb(C.f);d.aF?B:F}}qub(u,tfc,d5(l));qub(u,ufc,d5(B))}}r=0;for(n=new ccb(b.b);n.a=a.j){a.a=-1;a.c=1;return}b=X5(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw x2(new KEd(WYc((isd(),_Td))));a.a=X5(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d=a.j)break;if(X5(a.i,a.d)!=63)break;if(++a.d>=a.j)throw x2(new KEd(WYc((isd(),aUd))));b=X5(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw x2(new KEd(WYc((isd(),aUd))));b=X5(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw x2(new KEd(WYc((isd(),bUd))));break;case 35:while(a.d=a.j)throw x2(new KEd(WYc((isd(),_Td))));a.a=X5(a.i,a.d++);break;default:d=0;}a.c=d} +function EFd(a){var b,c,d,e,f,g,h,i,j;a.b=1;LEd(a);b=null;if(a.c==0&&a.a==94){LEd(a);b=(UGd(),UGd(),++TGd,new wHd(4));qHd(b,0,TWd);h=(null,++TGd,new wHd(4))}else{h=(UGd(),UGd(),++TGd,new wHd(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){vHd(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:tHd(h,DFd(c));d=true;break;case 105:case 73:case 99:case 67:c=(tHd(h,DFd(c)),-1);d=true;break;case 112:case 80:i=REd(a,c);if(!i)throw x2(new KEd(WYc((isd(),nUd))));tHd(h,i);d=true;break;default:c=CFd(a);}}else if(j==24&&!e){if(b){vHd(b,h);h=b}f=EFd(a);vHd(h,f);if(a.c!=0||a.a!=93)throw x2(new KEd(WYc((isd(),rUd))));break}LEd(a);if(!d){if(j==0){if(c==91)throw x2(new KEd(WYc((isd(),sUd))));if(c==93)throw x2(new KEd(WYc((isd(),tUd))));if(c==45&&!e&&a.a!=93)throw x2(new KEd(WYc((isd(),uUd))))}if(a.c!=0||a.a!=45||c==45&&e){qHd(h,c,c)}else{LEd(a);if((j=a.c)==1)throw x2(new KEd(WYc((isd(),pUd))));if(j==0&&a.a==93){qHd(h,c,c);qHd(h,45,45)}else if(j==0&&a.a==93||j==24){throw x2(new KEd(WYc((isd(),uUd))))}else{g=a.a;if(j==0){if(g==91)throw x2(new KEd(WYc((isd(),sUd))));if(g==93)throw x2(new KEd(WYc((isd(),tUd))));if(g==45)throw x2(new KEd(WYc((isd(),uUd))))}else j==10&&(g=CFd(a));LEd(a);if(c>g)throw x2(new KEd(WYc((isd(),xUd))));qHd(h,c,g)}}}e=false}if(a.c==1)throw x2(new KEd(WYc((isd(),pUd))));uHd(h);rHd(h);a.b=0;LEd(a);return h} +function b9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;xEc(c,'Greedy cycle removal',1);s=b.a;K=s.c.length;a.a=tz(FA,OKd,22,K,15,1);a.c=tz(FA,OKd,22,K,15,1);a.b=tz(FA,OKd,22,K,15,1);i=0;for(q=new ccb(s);q.a0?D+1:1}for(f=new ccb(v.f);f.a0?D+1:1}}a.c[i]==0?mib(a.d,o):a.a[i]==0&&mib(a.e,o);++i}n=-1;m=1;k=new Gbb;F=kA(nub(b,(E2b(),s2b)),214);while(K>0){while(a.d.b!=0){H=kA(uib(a.d),8);a.b[H.o]=n--;c9b(a,H);--K}while(a.e.b!=0){I=kA(uib(a.e),8);a.b[I.o]=m++;c9b(a,I);--K}if(K>0){l=oKd;for(r=new ccb(s);r.a=l){if(t>l){k.c=tz(NE,oJd,1,0,5,1);l=t}k.c[k.c.length]=o}}}j=kA(xbb(k,Xjb(F,k.c.length)),8);a.b[j.o]=m++;c9b(a,j);--K}}G=s.c.length+1;for(i=0;ia.b[J]){KEb(d,true);qub(b,P1b,(B3(),B3(),true))}}}}a.a=null;a.c=null;a.b=null;xib(a.e);xib(a.d);zEc(c)} +function ypd(a){HRc(a.c,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#decimal']));HRc(a.d,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#integer']));HRc(a.e,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#boolean']));HRc(a.f,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EBoolean',RTd,'EBoolean:Object']));HRc(a.i,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#byte']));HRc(a.g,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#hexBinary']));HRc(a.j,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EByte',RTd,'EByte:Object']));HRc(a.n,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EChar',RTd,'EChar:Object']));HRc(a.t,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#double']));HRc(a.u,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EDouble',RTd,'EDouble:Object']));HRc(a.F,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#float']));HRc(a.G,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EFloat',RTd,'EFloat:Object']));HRc(a.I,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#int']));HRc(a.J,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EInt',RTd,'EInt:Object']));HRc(a.N,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#long']));HRc(a.O,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'ELong',RTd,'ELong:Object']));HRc(a.Z,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#short']));HRc(a.$,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'EShort',RTd,'EShort:Object']));HRc(a._,xVd,xz(pz(UE,1),cKd,2,6,[KVd,'http://www.w3.org/2001/XMLSchema#string']))} +function zIb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;rIb(b);i=kA(WXc((!b.b&&(b.b=new pxd(HV,b,4,7)),b.b),0),97);k=kA(WXc((!b.c&&(b.c=new pxd(HV,b,5,8)),b.c),0),97);h=UWc(i);j=UWc(k);g=(!b.a&&(b.a=new zkd(IV,b,6,6)),b.a).i==0?null:kA(WXc((!b.a&&(b.a=new zkd(IV,b,6,6)),b.a),0),270);A=kA(F8(a.a,h),8);F=kA(F8(a.a,j),8);B=null;G=null;if(sA(i,187)){w=kA(F8(a.a,i),279);if(sA(w,11)){B=kA(w,11)}else if(sA(w,8)){A=kA(w,8);B=kA(xbb(A.i,0),11)}}if(sA(k,187)){D=kA(F8(a.a,k),279);if(sA(D,11)){G=kA(D,11)}else if(sA(D,8)){F=kA(D,8);G=kA(xbb(F.i,0),11)}}if(!A||!F){return null}p=new PEb;lub(p,b);qub(p,(E2b(),i2b),b);qub(p,(J6b(),p5b),null);n=kA(nub(d,X1b),19);A==F&&n.nc((Z0b(),Y0b));if(!B){v=(U7b(),S7b);C=null;if(!!g&&XCc(kA(nub(A,Z5b),83))){C=new Jyc(g.j,g.k);JFc(C,XPc(b));KFc(C,c);if(dXc(j,h)){v=R7b;vyc(C,A.k)}}B=NFb(A,C,v,d)}if(!G){v=(U7b(),R7b);H=null;if(!!g&&XCc(kA(nub(F,Z5b),83))){H=new Jyc(g.b,g.c);JFc(H,XPc(b));KFc(H,c)}G=NFb(F,H,v,uGb(F))}LEb(p,B);MEb(p,G);for(m=new a0c((!b.n&&(b.n=new zkd(LV,b,1,7)),b.n));m.e!=m.i._b();){l=kA($_c(m),137);if(!Vpb(mA(AOc(l,N5b)))&&!!l.a){q=BIb(l);tbb(p.b,q);switch(kA(nub(q,$4b),226).g){case 2:case 3:n.nc((Z0b(),R0b));break;case 1:case 0:n.nc((Z0b(),P0b));qub(q,$4b,(tBc(),pBc));}}}f=kA(nub(d,T4b),317);r=kA(nub(d,I5b),292);e=f==(t_b(),r_b)||r==(u7b(),q7b);if(!!g&&(!g.a&&(g.a=new fdd(GV,g,5)),g.a).i!=0&&e){s=DFc(g);o=new Vyc;for(u=sib(s,0);u.b!=u.d.c;){t=kA(Gib(u),9);mib(o,new Kyc(t))}qub(p,j2b,o)}return p} +function gKb(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;h=kA(xbb(a.d.c.b,d),26);F=new Jgb;n=new Jgb;for(m=0;mc&&(B=n.a.Zb(r,n),B==null)}G=new Jgb;o=new Jgb;for(t=F.a.Xb().tc();t.hc();){r=kA(t.ic(),8);g=b==1?zGb(r):vGb(r);for(j=(Zn(),new Zo(Rn(Dn(g.a,new Hn))));So(j);){i=kA(To(j),14);kIb(r.c)!=kIb(i.d.g.c)&&Ggb(G,i.d.g)}}for(u=n.a.Xb().tc();u.hc();){r=kA(u.ic(),8);g=b==1?zGb(r):vGb(r);for(j=(Zn(),new Zo(Rn(Dn(g.a,new Hn))));So(j);){i=kA(To(j),14);kIb(r.c)!=kIb(i.d.g.c)&&Ggb(o,i.d.g)}}if(bKb){S6()}A=kA(xbb(a.d.c.b,d+(b==1?1:-1)),26);p=oKd;q=jJd;for(l=0;ll?p:l):o.a.Qb(r)&&(q=ql){F=0;G+=k+A;k=0}Hnc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Bgb;c=new Bgb;for(C=new ccb(a);C.a=2){m=true;s=(Mpb(1,l.c.length),kA(l.c[1],26));for(p=new ccb(g.a);p.a=2){m=true;t=kA(xbb(l,l.c.length-2),26);for(p=new ccb(i.a);p.abic(f))&&(l=f)}}!l&&(l=(Mpb(0,q.c.length),kA(q.c[0],164)));for(p=new ccb(b.b);p.a0){o=(v+1)*a.d;o=0&&(R+=(v+2)*a.d)}t=D;h=i}while(D);for(e=new ccb(a.j);e.a=-1900?1:0;c>=4?I6(a,xz(pz(UE,1),cKd,2,6,[PKd,QKd])[h]):I6(a,xz(pz(UE,1),cKd,2,6,['BC','AD'])[h]);break;case 121:Vw(a,c,d);break;case 77:Uw(a,c,d);break;case 107:i=e.q.getHours();i==0?nx(a,24,c):nx(a,i,c);break;case 83:Tw(a,c,e);break;case 69:k=d.q.getDay();c==5?I6(a,xz(pz(UE,1),cKd,2,6,['S','M','T','W','T','F','S'])[k]):c==4?I6(a,xz(pz(UE,1),cKd,2,6,[RKd,SKd,TKd,UKd,VKd,WKd,XKd])[k]):I6(a,xz(pz(UE,1),cKd,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?I6(a,xz(pz(UE,1),cKd,2,6,['AM','PM'])[1]):I6(a,xz(pz(UE,1),cKd,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?nx(a,12,c):nx(a,l,c);break;case 75:m=e.q.getHours()%12;nx(a,m,c);break;case 72:n=e.q.getHours();nx(a,n,c);break;case 99:o=d.q.getDay();c==5?I6(a,xz(pz(UE,1),cKd,2,6,['S','M','T','W','T','F','S'])[o]):c==4?I6(a,xz(pz(UE,1),cKd,2,6,[RKd,SKd,TKd,UKd,VKd,WKd,XKd])[o]):c==3?I6(a,xz(pz(UE,1),cKd,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):nx(a,o,1);break;case 76:p=d.q.getMonth();c==5?I6(a,xz(pz(UE,1),cKd,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?I6(a,xz(pz(UE,1),cKd,2,6,[BKd,CKd,DKd,EKd,FKd,GKd,HKd,IKd,JKd,KKd,LKd,MKd])[p]):c==3?I6(a,xz(pz(UE,1),cKd,2,6,['Jan','Feb','Mar','Apr',FKd,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):nx(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?I6(a,xz(pz(UE,1),cKd,2,6,['Q1','Q2','Q3','Q4'])[q]):I6(a,xz(pz(UE,1),cKd,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();nx(a,r,c);break;case 109:j=e.q.getMinutes();nx(a,j,c);break;case 115:g=e.q.getSeconds();nx(a,g,c);break;case 122:c<4?I6(a,f.c[0]):I6(a,f.c[1]);break;case 118:I6(a,f.b);break;case 90:c<3?I6(a,xx(f)):c==3?I6(a,wx(f)):I6(a,zx(f.a));break;default:return false;}return true} +function F4b(){F4b=d3;var a;W2b=(a=kA(e4(eP),10),new ngb(a,kA(ypb(a,a.length),10),0));V2b=new FWc(EOd,W2b);p3b=new FWc(FOd,(B3(),B3(),false));u3b=(x1b(),v1b);t3b=new FWc(GOd,u3b);M3b=new FWc(HOd,(null,false));N3b=new FWc(IOd,(null,true));d5(1);j4b=new FWc(JOd,d5(7));k4b=new FWc(KOd,(null,false));c4b=new FWc(LOd,(null,false));d3b=(O_b(),M_b);c3b=new FWc(MOd,d3b);J3b=(W6b(),U6b);I3b=new FWc(NOd,J3b);A3b=(K2b(),J2b);z3b=new FWc(OOd,A3b);L3b=(F8b(),E8b);K3b=new FWc(POd,L3b);d5(-1);B3b=new FWc(QOd,d5(4));d5(-1);D3b=new FWc(ROd,d5(2));H3b=(L7b(),J7b);G3b=new FWc(SOd,H3b);d5(0);F3b=new FWc(TOd,d5(0));x3b=new FWc(UOd,d5(jJd));b3b=(t_b(),s_b);a3b=new FWc(VOd,b3b);$2b=new FWc(WOd,0.1);_2b=new FWc(XOd,(null,false));d5(0);X2b=new FWc(YOd,d5(40));Z2b=(g1b(),f1b);Y2b=new FWc(ZOd,Z2b);b4b=(u7b(),p7b);a4b=new FWc($Od,b4b);U3b=new DWc(_Od);P3b=(Vic(),Tic);O3b=new FWc(aPd,P3b);S3b=(x0b(),u0b);R3b=new FWc(bPd,S3b);new UFc;W3b=new FWc(cPd,0.3);Y3b=new DWc(dPd);$3b=(h7b(),f7b);Z3b=new FWc(ePd,$3b);j3b=(b8b(),a8b);i3b=new FWc(fPd,j3b);n3b=new FWc(gPd,(null,true));l3b=new FWc(hPd,0.4);h4b=new FWc(iPd,10);g4b=new FWc(jPd,10);i4b=new FWc(kPd,20);d5(0);d4b=new FWc(lPd,d5(0));d5(0);e4b=new FWc(mPd,d5(0));d5(0);f4b=new FWc(nPd,d5(0));Q2b=new FWc(oPd,(null,false));U2b=(J0b(),H0b);T2b=new FWc(pPd,U2b);S2b=(_$b(),$$b);R2b=new FWc(qPd,S2b);r3b=new FWc(rPd,(null,false));d5(0);q3b=new FWc(sPd,d5(16));d5(0);s3b=new FWc(tPd,d5(5));E4b=(O8b(),M8b);D4b=new FWc(uPd,E4b);l4b=new FWc(vPd,10);m4b=new FWc(wPd,1);t4b=(F_b(),E_b);s4b=new FWc(xPd,t4b);n4b=new DWc(yPd);q4b=d5(1);d5(0);p4b=new FWc(zPd,q4b);B4b=(w8b(),t8b);A4b=new FWc(APd,B4b);w4b=new FWc(BPd,(null,true));u4b=new FWc(CPd,2);y4b=new FWc(DPd,(null,true));h3b=(k0b(),i0b);g3b=new FWc(EPd,h3b);f3b=(T$b(),Q$b);e3b=new FWc(FPd,f3b);w3b=N_b;v3b=r_b;C3b=T6b;E3b=T6b;y3b=Q6b;V3b=s7b;Q3b=p7b;T3b=p7b;X3b=r7b;_3b=s7b;k3b=(DBc(),BBc);o3b=BBc;m3b=BBc;o4b=D_b;r4b=E_b;C4b=N8b;x4b=L8b;v4b=L8b;z4b=L8b} +function $Ac(){$Ac=d3;var a,b;Czc=new DWc(_Rd);Ezc=(ezc(),$yc);Dzc=new FWc(iQd,Ezc);new UFc;Fzc=new FWc(VMd,null);Gzc=new DWc(aSd);Kzc=new FWc(hQd,(B3(),B3(),false));Mzc=(gBc(),eBc);Lzc=new FWc(oQd,Mzc);Rzc=(DBc(),CBc);Qzc=new FWc(OPd,Rzc);Uzc=new FWc(ZRd,(null,false));Wzc=(jCc(),hCc);Vzc=new FWc(jQd,Wzc);pAc=new YGb(12);oAc=new FWc(WMd,pAc);$zc=new FWc(vNd,(null,false));CAc=(VCc(),UCc);BAc=new FWc(wNd,CAc);JAc=new DWc(HQd);KAc=new DWc(qNd);LAc=new DWc(tNd);NAc=new DWc(uNd);aAc=new Vyc;_zc=new FWc(yQd,aAc);Jzc=new FWc(CQd,(null,false));Xzc=new FWc(DQd,(null,false));new DWc(bSd);cAc=new mGb;bAc=new FWc(IQd,cAc);nAc=new FWc(fQd,(null,false));new UFc;MAc=new FWc(cSd,1);new FWc(dSd,(null,true));d5(0);new FWc(eSd,d5(100));new FWc(fSd,(null,false));d5(0);new FWc(gSd,d5(4000));d5(0);new FWc(hSd,d5(400));new FWc(iSd,(null,false));new FWc(jSd,(null,true));new FWc(kSd,(null,false));Izc=(gFc(),fFc);Hzc=new FWc($Rd,Izc);OAc=new FWc(TMd,12);PAc=new FWc(ZPd,10);QAc=new FWc(sNd,2);RAc=new FWc($Pd,10);TAc=new FWc(_Pd,0);UAc=new FWc(bQd,5);VAc=new FWc(aQd,1);WAc=new FWc(rNd,20);ZAc=new FWc(cQd,10);SAc=new DWc(dQd);YAc=new nGb;XAc=new FWc(JQd,YAc);sAc=new DWc(GQd);rAc=(null,false);qAc=new FWc(FQd,rAc);eAc=new YGb(5);dAc=new FWc(lSd,eAc);gAc=(yCc(),b=kA(e4(nU),10),new ngb(b,kA(ypb(b,b.length),10),0));fAc=new FWc(pQd,gAc);uAc=(JCc(),GCc);tAc=new FWc(sQd,uAc);wAc=new DWc(tQd);xAc=new DWc(uQd);yAc=new DWc(vQd);vAc=new DWc(wQd);iAc=(a=kA(e4(uU),10),new ngb(a,kA(ypb(a,a.length),10),0));hAc=new FWc(mQd,iAc);mAc=fgb((qEc(),jEc));lAc=new FWc(nQd,mAc);kAc=new Jyc(0,0);jAc=new FWc(xQd,kAc);Pzc=(tBc(),sBc);Ozc=new FWc(zQd,Pzc);Nzc=new FWc(AQd,(null,false));new DWc(mSd);d5(1);new FWc(nSd,null);zAc=new DWc(EQd);DAc=new DWc(BQd);IAc=(FDc(),DDc);HAc=new FWc(gQd,IAc);AAc=new DWc(eQd);GAc=(eDc(),dDc);FAc=new FWc(qQd,GAc);EAc=new FWc(rQd,(null,false));Yzc=new FWc(kQd,(null,false));Zzc=new FWc(lQd,(null,false));Szc=new FWc(UMd,1);Tzc=(PBc(),NBc);new FWc(oSd,Tzc)} +function zpd(a){if(a.gb)return;a.gb=true;a.b=RRc(a,0);QRc(a.b,18);WRc(a.b,19);a.a=RRc(a,1);QRc(a.a,1);WRc(a.a,2);WRc(a.a,3);WRc(a.a,4);WRc(a.a,5);a.o=RRc(a,2);QRc(a.o,8);QRc(a.o,9);WRc(a.o,10);WRc(a.o,11);WRc(a.o,12);WRc(a.o,13);WRc(a.o,14);WRc(a.o,15);WRc(a.o,16);WRc(a.o,17);WRc(a.o,18);WRc(a.o,19);WRc(a.o,20);WRc(a.o,21);WRc(a.o,22);WRc(a.o,23);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);VRc(a.o);a.p=RRc(a,3);QRc(a.p,2);QRc(a.p,3);QRc(a.p,4);QRc(a.p,5);WRc(a.p,6);WRc(a.p,7);VRc(a.p);VRc(a.p);a.q=RRc(a,4);QRc(a.q,8);a.v=RRc(a,5);WRc(a.v,9);VRc(a.v);VRc(a.v);VRc(a.v);a.w=RRc(a,6);QRc(a.w,2);QRc(a.w,3);QRc(a.w,4);WRc(a.w,5);a.B=RRc(a,7);WRc(a.B,1);VRc(a.B);VRc(a.B);VRc(a.B);a.Q=RRc(a,8);WRc(a.Q,0);VRc(a.Q);a.R=RRc(a,9);QRc(a.R,1);a.S=RRc(a,10);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);VRc(a.S);a.T=RRc(a,11);WRc(a.T,10);WRc(a.T,11);WRc(a.T,12);WRc(a.T,13);WRc(a.T,14);VRc(a.T);VRc(a.T);a.U=RRc(a,12);QRc(a.U,2);QRc(a.U,3);WRc(a.U,4);WRc(a.U,5);WRc(a.U,6);WRc(a.U,7);VRc(a.U);a.V=RRc(a,13);WRc(a.V,10);a.W=RRc(a,14);QRc(a.W,18);QRc(a.W,19);QRc(a.W,20);WRc(a.W,21);WRc(a.W,22);WRc(a.W,23);a.bb=RRc(a,15);QRc(a.bb,10);QRc(a.bb,11);QRc(a.bb,12);QRc(a.bb,13);QRc(a.bb,14);QRc(a.bb,15);QRc(a.bb,16);WRc(a.bb,17);VRc(a.bb);VRc(a.bb);a.eb=RRc(a,16);QRc(a.eb,2);QRc(a.eb,3);QRc(a.eb,4);QRc(a.eb,5);QRc(a.eb,6);QRc(a.eb,7);WRc(a.eb,8);WRc(a.eb,9);a.ab=RRc(a,17);QRc(a.ab,0);QRc(a.ab,1);a.H=RRc(a,18);WRc(a.H,0);WRc(a.H,1);WRc(a.H,2);WRc(a.H,3);WRc(a.H,4);WRc(a.H,5);VRc(a.H);a.db=RRc(a,19);WRc(a.db,2);a.c=SRc(a,20);a.d=SRc(a,21);a.e=SRc(a,22);a.f=SRc(a,23);a.i=SRc(a,24);a.g=SRc(a,25);a.j=SRc(a,26);a.k=SRc(a,27);a.n=SRc(a,28);a.r=SRc(a,29);a.s=SRc(a,30);a.t=SRc(a,31);a.u=SRc(a,32);a.fb=SRc(a,33);a.A=SRc(a,34);a.C=SRc(a,35);a.D=SRc(a,36);a.F=SRc(a,37);a.G=SRc(a,38);a.I=SRc(a,39);a.J=SRc(a,40);a.L=SRc(a,41);a.M=SRc(a,42);a.N=SRc(a,43);a.O=SRc(a,44);a.P=SRc(a,45);a.X=SRc(a,46);a.Y=SRc(a,47);a.Z=SRc(a,48);a.$=SRc(a,49);a._=SRc(a,50);a.cb=SRc(a,51);a.K=SRc(a,52)} +function E2b(){E2b=d3;var a,b;i2b=new DWc(xNd);M1b=new DWc('coordinateOrigin');r2b=new DWc('processors');L1b=new EWc('compoundNode',(B3(),B3(),false));Z1b=new EWc('insideConnections',(null,false));h2b=new DWc('nestedLGraph');n2b=new DWc('parentLNode');j2b=new DWc('originalBendpoints');k2b=new DWc('originalDummyNodePosition');l2b=new DWc('originalLabelEdge');t2b=new DWc('representedLabels');R1b=new DWc('endLabels');b2b=new EWc('labelSide',(jHc(),iHc));g2b=new EWc('maxEdgeThickness',0);u2b=new EWc('reversed',(null,false));s2b=new DWc(yNd);e2b=new EWc('longEdgeSource',null);f2b=new EWc('longEdgeTarget',null);d2b=new EWc('longEdgeHasLabelDummies',(null,false));c2b=new EWc('longEdgeBeforeLabelDummy',(null,false));Q1b=new EWc('edgeConstraint',($_b(),Y_b));_1b=new DWc('inLayerLayoutUnit');$1b=new EWc('inLayerConstraint',(p1b(),n1b));a2b=new EWc('inLayerSuccessorConstraint',new Gbb);p2b=new DWc('portDummy');N1b=new EWc('crossingHint',d5(0));X1b=new EWc('graphProperties',(b=kA(e4(mP),10),new ngb(b,kA(ypb(b,b.length),10),0)));V1b=new EWc('externalPortSide',(FDc(),DDc));W1b=new EWc('externalPortSize',new Hyc);T1b=new DWc('externalPortReplacedDummies');U1b=new DWc('externalPortReplacedDummy');S1b=new EWc('externalPortConnections',(a=kA(e4(rU),10),new ngb(a,kA(ypb(a,a.length),10),0)));q2b=new EWc(DOd,0);D1b=new DWc('barycenterAssociates');D2b=new DWc('TopSideComments');I1b=new DWc('BottomSideComments');K1b=new DWc('CommentConnectionPort');Y1b=new EWc('inputCollect',(null,false));m2b=new EWc('outputCollect',(null,false));P1b=new EWc('cyclic',(null,false));H1b=new EWc('bigNodeOriginalSize',new F4(0));G1b=new EWc('bigNodeInitial',(null,false));E1b=new EWc('org.eclipse.elk.alg.layered.bigNodeLabels',new Gbb);F1b=new EWc('org.eclipse.elk.alg.layered.postProcess',null);O1b=new DWc('crossHierarchyMap');C2b=new DWc('targetOffset');x2b=new EWc('splineLabelSize',new Hyc);y2b=new EWc('splineLoopSide',(Flc(),Clc));A2b=new EWc('splineSelfLoopComponents',new Gbb);B2b=new EWc('splineSelfLoopMargins',new mGb);v2b=new DWc('spacings');o2b=new EWc('partitionConstraint',(null,false));J1b=new DWc('breakingPoint.info');z2b=new DWc('splines.route.start');w2b=new DWc('splines.edgeChain')} +function lPb(){lPb=d3;ROb=new mPb('LEFT_DIR_PREPROCESSOR',0);rOb=new mPb('DOWN_DIR_PREPROCESSOR',1);kPb=new mPb('UP_DIR_PREPROCESSOR',2);pOb=new mPb('COMMENT_PREPROCESSOR',3);sOb=new mPb('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',4);gPb=new mPb('SPLINE_SELF_LOOP_PREPROCESSOR',5);GOb=new mPb('INTERACTIVE_EXTERNAL_PORT_POSITIONER',6);$Ob=new mPb('PARTITION_PREPROCESSOR',7);iOb=new mPb('BIG_NODES_PREPROCESSOR',8);KOb=new mPb('LABEL_DUMMY_INSERTER',9);COb=new mPb('HIGH_DEGREE_NODE_LAYER_PROCESSOR',10);ZOb=new mPb('PARTITION_POSTPROCESSOR',11);VOb=new mPb('NODE_PROMOTION',12);OOb=new mPb('LAYER_CONSTRAINT_PROCESSOR',13);yOb=new mPb('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',14);gOb=new mPb('BIG_NODES_INTERMEDIATEPROCESSOR',15);dPb=new mPb('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',16);kOb=new mPb('BREAKING_POINT_INSERTER',17);TOb=new mPb('LONG_EDGE_SPLITTER',18);aPb=new mPb('PORT_SIDE_PROCESSOR',19);HOb=new mPb('INVERTED_PORT_PROCESSOR',20);cPb=new mPb('SELF_LOOP_PROCESSOR',21);_Ob=new mPb('PORT_LIST_SORTER',22);XOb=new mPb('NORTH_SOUTH_PORT_PREPROCESSOR',23);lOb=new mPb('BREAKING_POINT_PROCESSOR',24);YOb=new mPb(gOd,25);iPb=new mPb(hOd,26);fPb=new mPb('SPLINE_SELF_LOOP_POSITIONER',27);ePb=new mPb('SINGLE_EDGE_GRAPH_WRAPPER',28);IOb=new mPb('IN_LAYER_CONSTRAINT_PROCESSOR',29);jOb=new mPb('BIG_NODES_SPLITTER',30);vOb=new mPb('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',31);JOb=new mPb('LABEL_AND_NODE_SIZE_PROCESSOR',32);hPb=new mPb('SPLINE_SELF_LOOP_ROUTER',33);UOb=new mPb('NODE_MARGIN_CALCULATOR',34);uOb=new mPb('END_LABEL_PREPROCESSOR',35);MOb=new mPb('LABEL_DUMMY_SWITCHER',36);nOb=new mPb('CENTER_LABEL_MANAGEMENT_PROCESSOR',37);NOb=new mPb('LABEL_SIDE_SELECTOR',38);EOb=new mPb('HYPEREDGE_DUMMY_MERGER',39);zOb=new mPb('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',40);POb=new mPb('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',41);BOb=new mPb('HIERARCHICAL_PORT_POSITION_PROCESSOR',42);hOb=new mPb('BIG_NODES_POSTPROCESSOR',43);oOb=new mPb('COMMENT_POSTPROCESSOR',44);FOb=new mPb('HYPERNODE_PROCESSOR',45);AOb=new mPb('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',46);SOb=new mPb('LONG_EDGE_JOINER',47);mOb=new mPb('BREAKING_POINT_REMOVER',48);WOb=new mPb('NORTH_SOUTH_PORT_POSTPROCESSOR',49);DOb=new mPb('HORIZONTAL_COMPACTOR',50);LOb=new mPb('LABEL_DUMMY_REMOVER',51);wOb=new mPb('FINAL_SPLINE_BENDPOINTS_CALCULATOR',52);bPb=new mPb('REVERSED_EDGE_RESTORER',53);tOb=new mPb('END_LABEL_POSTPROCESSOR',54);xOb=new mPb('HIERARCHICAL_NODE_RESIZER',55);QOb=new mPb('LEFT_DIR_POSTPROCESSOR',56);qOb=new mPb('DOWN_DIR_POSTPROCESSOR',57);jPb=new mPb('UP_DIR_POSTPROCESSOR',58)} +function Mec(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb;Z=0;for(G=0,J=b.length;G0&&(a.a[Q.o]=Z++)}}db=0;for(H=0,K=c.length;H0){Q=(Lpb(U.b>0),kA(U.a.cd(U.c=--U.b),11));T=0;for(h=new ccb(Q.d);h.a0){if(Q.i==(FDc(),lDc)){a.a[Q.o]=db;++db}else{a.a[Q.o]=db+L+N;++N}}}db+=N}S=(Es(),new Bgb);n=new iib;for(F=0,I=b.length;Fj.b&&(j.b=V)}else if(Q.g.c==Y){Vj.c&&(j.c=V)}}}Acb(o,0,o.length,null);cb=tz(FA,OKd,22,o.length,15,1);d=tz(FA,OKd,22,db+1,15,1);for(q=0;q0){w%2>0&&(e+=gb[w+1]);w=(w-1)/2|0;++gb[w]}}B=tz(vQ,oJd,336,o.length*2,0,1);for(t=0;t'?":Z5(bUd,a)?"'(?<' or '(? toIndex: ',XLd=', toIndex: ',YLd='org.eclipse.elk.alg.common.compaction',ZLd='Scanline/EventHandler',$Ld='org.eclipse.elk.alg.common.compaction.oned',_Ld='CNode belongs to another CGroup.',aMd='ISpacingsHandler/1',bMd='The ',cMd=' instance has been finished already.',dMd='The direction ',eMd=' is not supported by the CGraph instance.',fMd='OneDimensionalCompactor',gMd='OneDimensionalCompactor/lambda$0$Type',hMd='Quadruplet',iMd='ScanlineConstraintCalculator',jMd='ScanlineConstraintCalculator/ConstraintsScanlineHandler',kMd='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',lMd='ScanlineConstraintCalculator/Timestamp',mMd='ScanlineConstraintCalculator/lambda$0$Type',nMd={138:1,56:1},oMd='org.eclipse.elk.alg.common.compaction.options',pMd='org.eclipse.elk.core.data',qMd='org.eclipse.elk.polyomino.traversalStrategy',rMd='org.eclipse.elk.polyomino.lowLevelSort',sMd='org.eclipse.elk.polyomino.highLevelSort',tMd='org.eclipse.elk.polyomino.fill',uMd={154:1},vMd='polyomino',wMd='org.eclipse.elk.alg.common.compaction.polyomino',xMd='org.eclipse.elk.alg.common.compaction.polyomino.structures',yMd='Direction',zMd='Grid is only of size ',AMd='. Requested point (',BMd=') is out of bounds.',CMd=' Given center based coordinates were (',DMd='org.eclipse.elk.graph.properties',EMd='IPropertyHolder',FMd={3:1,93:1,131:1},GMd={244:1},HMd='org.eclipse.elk.core',IMd='Connected Components Compaction',JMd='org.eclipse.elk.alg.disco',KMd='org.eclipse.elk.alg.disco.graph',LMd='org.eclipse.elk.alg.disco.options',MMd='CompactionStrategy',NMd='org.eclipse.elk.disco.componentCompaction.strategy',OMd='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',PMd='org.eclipse.elk.disco.debug.discoGraph',QMd='org.eclipse.elk.disco.debug.discoPolys',RMd='componentCompaction',SMd='org.eclipse.elk.disco',TMd='org.eclipse.elk.spacing.componentComponent',UMd='org.eclipse.elk.edge.thickness',VMd='org.eclipse.elk.aspectRatio',WMd='org.eclipse.elk.padding',XMd='org.eclipse.elk.alg.disco.transform',YMd=1.5707963267948966,ZMd={3:1,4:1,5:1,175:1},$Md={221:1,3:1,4:1},_Md={3:1,6:1,4:1,5:1,63:1,73:1},aNd='org.eclipse.elk.alg.force',bNd='ComponentsProcessor',cNd='ComponentsProcessor/1',dNd='org.eclipse.elk.alg.force.graph',eNd='Component Layout',fNd='org.eclipse.elk.alg.force.model',gNd=0.01,hNd='org.eclipse.elk.force.model',iNd='org.eclipse.elk.force.iterations',jNd='org.eclipse.elk.force.repulsivePower',kNd='org.eclipse.elk.force.temperature',lNd=0.001,mNd='org.eclipse.elk.force.repulsion',nNd='org.eclipse.elk.alg.force.options',oNd=1.600000023841858,pNd='org.eclipse.elk.force',qNd='org.eclipse.elk.priority',rNd='org.eclipse.elk.spacing.nodeNode',sNd='org.eclipse.elk.spacing.edgeLabel',tNd='org.eclipse.elk.randomSeed',uNd='org.eclipse.elk.separateConnectedComponents',vNd='org.eclipse.elk.interactive',wNd='org.eclipse.elk.portConstraints',xNd='origin',yNd='random',zNd='boundingBox.upLeft',ANd='boundingBox.lowRight',BNd='org.eclipse.elk.stress.fixed',CNd='org.eclipse.elk.stress.desiredEdgeLength',DNd='org.eclipse.elk.stress.dimension',ENd='org.eclipse.elk.stress.epsilon',FNd='org.eclipse.elk.stress.iterationLimit',GNd='org.eclipse.elk.stress',HNd='ELK Stress',INd='org.eclipse.elk.alg.force.stress',JNd='Layered layout',KNd='org.eclipse.elk.alg.layered',LNd='org.eclipse.elk.alg.layered.compaction.components',MNd='org.eclipse.elk.alg.layered.compaction.oned',NNd='org.eclipse.elk.alg.layered.compaction.oned.algs',ONd='org.eclipse.elk.alg.layered.compaction.recthull',PNd='org.eclipse.elk.alg.layered.components',QNd={3:1,6:1,4:1,5:1,85:1,63:1,73:1},RNd='org.eclipse.elk.alg.layered.compound',SNd={3:1,6:1,4:1,5:1,99:1,85:1,63:1,73:1},TNd={50:1},UNd='org.eclipse.elk.alg.layered.graph',VNd={3:1,6:1,4:1,5:1,85:1,123:1,148:1,63:1,73:1},WNd='Not supported by LGraph',XNd='([{"\' \t\r\n',YNd=')]}"\' \t\r\n',ZNd='The given string contains parts that cannot be parsed as numbers.',$Nd='org.eclipse.elk.core.math',_Nd={3:1,4:1,135:1,211:1,428:1},aOd={3:1,4:1,119:1,211:1,428:1},bOd='org.eclipse.elk.alg.layered.graph.transform',cOd='org.eclipse.elk.alg.layered.intermediate',dOd='Big nodes pre-processing',eOd={3:1,6:1,4:1,5:1,85:1,619:1,148:1,63:1,73:1},fOd={3:1,4:1,5:1,537:1},gOd='ONE_SIDED_GREEDY_SWITCH',hOd='TWO_SIDED_GREEDY_SWITCH',iOd='No implementation is available for the layout processor ',jOd='IntermediateProcessorStrategy',kOd="Node '",lOd='NodeMarginCalculator',mOd='Odd port side processing',nOd=1.0E-8,oOd='org.eclipse.elk.alg.layered.intermediate.compaction',pOd='org.eclipse.elk.alg.layered.intermediate.greedyswitch',qOd='org.eclipse.elk.alg.layered.p3order.counting',rOd={208:1},sOd='org.eclipse.elk.alg.layered.intermediate.wrapping',tOd='org.eclipse.elk.alg.layered.networksimplex',uOd='org.eclipse.elk.alg.layered.options',vOd='INTERACTIVE',wOd='NONE',xOd='LEFT',yOd='RIGHT',zOd='EDGE_LENGTH',AOd='SELF_LOOPS',BOd='BOTTOM',COd='CENTER',DOd='portRatioOrPosition',EOd='org.eclipse.elk.layered.contentAlignment',FOd='org.eclipse.elk.layered.feedbackEdges',GOd='org.eclipse.elk.layered.interactiveReferencePoint',HOd='org.eclipse.elk.layered.mergeEdges',IOd='org.eclipse.elk.layered.mergeHierarchyEdges',JOd='org.eclipse.elk.layered.thoroughness',KOd='org.eclipse.elk.layered.unnecessaryBendpoints',LOd='org.eclipse.elk.layered.northOrSouthPort',MOd='org.eclipse.elk.layered.cycleBreaking.strategy',NOd='org.eclipse.elk.layered.layering.strategy',OOd='org.eclipse.elk.layered.layering.layerConstraint',POd='org.eclipse.elk.layered.layering.wideNodesOnMultipleLayers',QOd='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',ROd='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',SOd='org.eclipse.elk.layered.layering.nodePromotion.strategy',TOd='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',UOd='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',VOd='org.eclipse.elk.layered.crossingMinimization.strategy',WOd='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',XOd='org.eclipse.elk.layered.crossingMinimization.semiInteractive',YOd='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',ZOd='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',$Od='org.eclipse.elk.layered.nodePlacement.strategy',_Od='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',aPd='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',bPd='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',cPd='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',dPd='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',ePd='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',fPd='org.eclipse.elk.layered.edgeRouting.selfLoopPlacement',gPd='org.eclipse.elk.layered.edgeRouting.sloppySplineRouting',hPd='org.eclipse.elk.layered.edgeRouting.sloppySplineLayerSpacing',iPd='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',jPd='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',kPd='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',lPd='org.eclipse.elk.layered.priority.direction',mPd='org.eclipse.elk.layered.priority.shortness',nPd='org.eclipse.elk.layered.priority.straightness',oPd='org.eclipse.elk.layered.compaction.connectedComponents',pPd='org.eclipse.elk.layered.compaction.postCompaction.strategy',qPd='org.eclipse.elk.layered.compaction.postCompaction.constraints',rPd='org.eclipse.elk.layered.highDegreeNodes.treatment',sPd='org.eclipse.elk.layered.highDegreeNodes.threshold',tPd='org.eclipse.elk.layered.highDegreeNodes.treeHeight',uPd='org.eclipse.elk.layered.wrapping.strategy',vPd='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',wPd='org.eclipse.elk.layered.wrapping.correctionFactor',xPd='org.eclipse.elk.layered.wrapping.cutting.strategy',yPd='org.eclipse.elk.layered.wrapping.cutting.cuts',zPd='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',APd='org.eclipse.elk.layered.wrapping.singleEdge.validify.strategy',BPd='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',CPd='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',DPd='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',EPd='org.eclipse.elk.layered.edgeLabels.sideSelection',FPd='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',GPd='layering',HPd='layering.minWidth',IPd='layering.nodePromotion',JPd='crossingMinimization',KPd='crossingMinimization.greedySwitch',LPd='nodePlacement',MPd='nodePlacement.bk',NPd='edgeRouting',OPd='org.eclipse.elk.edgeRouting',PPd='spacing',QPd='priority',RPd='compaction.postCompaction',SPd='Specifies whether and how post-process compaction is applied.',TPd='highDegreeNodes',UPd='wrapping',VPd='wrapping.cutting',WPd='wrapping.multiEdge',XPd='edgeLabels',YPd='org.eclipse.elk.layered',ZPd='org.eclipse.elk.spacing.edgeEdge',$Pd='org.eclipse.elk.spacing.edgeNode',_Pd='org.eclipse.elk.spacing.labelLabel',aQd='org.eclipse.elk.spacing.labelPort',bQd='org.eclipse.elk.spacing.labelNode',cQd='org.eclipse.elk.spacing.portPort',dQd='org.eclipse.elk.spacing.individualOverride',eQd='org.eclipse.elk.port.borderOffset',fQd='org.eclipse.elk.noLayout',gQd='org.eclipse.elk.port.side',hQd='org.eclipse.elk.debugMode',iQd='org.eclipse.elk.alignment',jQd='org.eclipse.elk.hierarchyHandling',kQd='org.eclipse.elk.insideSelfLoops.activate',lQd='org.eclipse.elk.insideSelfLoops.yo',mQd='org.eclipse.elk.nodeSize.constraints',nQd='org.eclipse.elk.nodeSize.options',oQd='org.eclipse.elk.direction',pQd='org.eclipse.elk.nodeLabels.placement',qQd='org.eclipse.elk.portLabels.placement',rQd='org.eclipse.elk.portLabels.nextToPortIfPossible',sQd='org.eclipse.elk.portAlignment.default',tQd='org.eclipse.elk.portAlignment.north',uQd='org.eclipse.elk.portAlignment.south',vQd='org.eclipse.elk.portAlignment.west',wQd='org.eclipse.elk.portAlignment.east',xQd='org.eclipse.elk.nodeSize.minimum',yQd='org.eclipse.elk.junctionPoints',zQd='org.eclipse.elk.edgeLabels.placement',AQd='org.eclipse.elk.edgeLabels.inline',BQd='org.eclipse.elk.port.index',CQd='org.eclipse.elk.commentBox',DQd='org.eclipse.elk.hypernode',EQd='org.eclipse.elk.port.anchor',FQd='org.eclipse.elk.partitioning.activate',GQd='org.eclipse.elk.partitioning.partition',HQd='org.eclipse.elk.position',IQd='org.eclipse.elk.margins',JQd='org.eclipse.elk.spacing.portsSurrounding',KQd='NETWORK_SIMPLEX',LQd='UNDEFINED',MQd={3:1,4:1,5:1,616:1},NQd={141:1,50:1},OQd='org.eclipse.elk.alg.layered.p1cycles',PQd='org.eclipse.elk.alg.layered.p2layers',QQd={422:1,208:1},RQd={736:1,3:1,4:1},SQd='org.eclipse.elk.alg.layered.p3order',TQd='org.eclipse.elk.alg.layered.p4nodes',UQd={3:1,4:1,5:1,745:1},VQd=1.0E-5,WQd='DOWN',XQd='org.eclipse.elk.alg.layered.p4nodes.bk',YQd=1.7976931348623157E308,ZQd='org.eclipse.elk.alg.layered.p5edges',$Qd='org.eclipse.elk.alg.layered.p5edges.splines',_Qd=1.0E-6,aRd=-1.0E-6,bRd='The list of vectors may not be empty.',cRd=-1.7976931348623157E308,dRd=0.09999999999999998,eRd=4.71238898038469,fRd=3.141592653589793,gRd='org.eclipse.elk.alg.mrtree',hRd='org.eclipse.elk.alg.mrtree.graph',iRd='org.eclipse.elk.alg.mrtree.intermediate',jRd='Set neighbors in level',kRd='DESCENDANTS',lRd='org.eclipse.elk.mrtree.weighting',mRd='org.eclipse.elk.mrtree.searchOrder',nRd='org.eclipse.elk.alg.mrtree.options',oRd='org.eclipse.elk.mrtree',pRd='org.eclipse.elk.tree',qRd='org.eclipse.elk.alg.radial',rRd=6.283185307179586,sRd=4.9E-324,tRd='org.eclipse.elk.alg.radial.intermediate',uRd='org.eclipse.elk.alg.radial.intermediate.compaction',vRd={3:1,4:1,5:1,63:1},wRd='org.eclipse.elk.alg.radial.intermediate.optimization',xRd='No implementation is available for the layout option ',yRd='org.eclipse.elk.alg.radial.options',zRd='org.eclipse.elk.radial.orderId',ARd='org.eclipse.elk.radial.radius',BRd='org.eclipse.elk.radial.compactor',CRd='org.eclipse.elk.radial.compactionStepSize',DRd='org.eclipse.elk.radial.sorter',ERd='org.eclipse.elk.radial.wedgeCriteria',FRd='org.eclipse.elk.radial.optimizationCriteria',GRd='org.eclipse.elk.radial',HRd='org.eclipse.elk.alg.radial.p1position.wedge',IRd='org.eclipse.elk.alg.radial.sorting',JRd=5.497787143782138,KRd=3.9269908169872414,LRd=2.356194490192345,MRd='org.eclipse.elk.core.util',NRd='Invalid index: ',ORd='org.eclipse.elk.core.alg',PRd={337:1},QRd={284:1},RRd="Make sure it's type is registered with the ",SRd=' utility class.',TRd='true',URd='false',VRd="Couldn't clone property '",WRd='org.eclipse.elk.core.options',XRd=1.2999999523162842,YRd='org.eclipse.elk.box',ZRd='org.eclipse.elk.expandNodes',$Rd='org.eclipse.elk.box.packingMode',_Rd='org.eclipse.elk.algorithm',aSd='org.eclipse.elk.bendPoints',bSd='org.eclipse.elk.labelManager',cSd='org.eclipse.elk.scaleFactor',dSd='org.eclipse.elk.animate',eSd='org.eclipse.elk.animTimeFactor',fSd='org.eclipse.elk.layoutAncestors',gSd='org.eclipse.elk.maxAnimTime',hSd='org.eclipse.elk.minAnimTime',iSd='org.eclipse.elk.progressBar',jSd='org.eclipse.elk.validateOptions',kSd='org.eclipse.elk.zoomToFit',lSd='org.eclipse.elk.nodeLabels.padding',mSd='org.eclipse.elk.font.name',nSd='org.eclipse.elk.font.size',oSd='org.eclipse.elk.edge.type',pSd='de.cau.cs.kieler.labelSpacing',qSd='partitioning',rSd='nodeLabels',sSd='portAlignment',tSd='nodeSize',uSd='port',vSd='portLabels',wSd='insideSelfLoops',xSd='de.cau.cs.kieler.selfLoopInside',ySd='org.eclipse.elk.fixed',zSd='Fixed Layout',ASd='org.eclipse.elk.random',BSd='port must have a parent node to calculate the port side',CSd='org.eclipse.elk.core.util.adapters',DSd='org.eclipse.elk.core.util.nodespacing',ESd='org.eclipse.elk.core.util.nodespacing.cellsystem',FSd={171:1,307:1},GSd='Vertical alignment cannot be null',HSd='org.eclipse.elk.core.util.nodespacing.internal',ISd='org.eclipse.elk.core.util.nodespacing.internal.algorithm',JSd='org.eclipse.elk.core.util.overlaps',KSd='org.eclipse.emf.ecore',LSd='org.eclipse.elk.graph',MSd='EMapPropertyHolder',NSd='ElkBendPoint',OSd='ElkGraphElement',PSd='ElkConnectableShape',QSd='ElkEdge',RSd='ElkEdgeSection',SSd='EModelElement',TSd='ENamedElement',USd='ElkLabel',VSd='ElkNode',WSd='ElkPort',XSd={91:1,87:1},YSd='org.eclipse.emf.common.notify.impl',ZSd="The feature '",$Sd="' is not a valid changeable feature",_Sd='Expecting null',aTd="' is not a valid feature",bTd=32768,cTd={95:1,91:1,87:1,51:1,42:1,92:1},dTd='org.eclipse.emf.ecore.impl',eTd='org.eclipse.elk.graph.impl',fTd='Recursive containment not allowed for ',gTd="The datatype '",hTd="' is not a valid classifier",iTd="The value '",jTd={173:1,3:1,4:1},kTd="The class '",lTd='http://www.eclipse.org/elk/ElkGraph',mTd='property',nTd='value',oTd='source',pTd='properties',qTd='identifier',rTd='height',sTd='width',tTd='parent',uTd='text',vTd='children',wTd='hierarchical',xTd='sources',yTd='targets',zTd='sections',ATd='bendPoints',BTd='outgoingShape',CTd='incomingShape',DTd='outgoingSections',ETd='incomingSections',FTd='org.eclipse.emf.common.util',GTd='Severe implementation error in the Json to ElkGraph importer.',HTd='id',ITd='org.eclipse.elk.graph.json',JTd='Unhandled parameter types: ',KTd='startPoint',LTd="An edge must have at least one source and one target (edge id: '",MTd="').",NTd='Referenced edge section does not exist: ',OTd=" (edge id: '",PTd='target',QTd='group',RTd='name',STd='connectableShape cannot be null',TTd="Passed edge is not 'simple'.",UTd="The 'no duplicates' constraint is violated",VTd={3:1,4:1,20:1,25:1,41:1,13:1,15:1,49:1,59:1,55:1,52:1},WTd={3:1,4:1,20:1,25:1,41:1,13:1,43:1,15:1,49:1,59:1,55:1,52:1,532:1},XTd='org.eclipse.elk.graph.util',YTd='undefined',ZTd='parser.parse.1',$Td='parser.parse.2',_Td='parser.next.1',aUd='parser.next.2',bUd='parser.next.3',cUd='parser.next.4',dUd='parser.factor.1',eUd='parser.factor.2',fUd='parser.factor.3',gUd='parser.factor.4',hUd='parser.factor.5',iUd='parser.factor.6',jUd='parser.atom.1',kUd='parser.atom.2',lUd='parser.atom.3',mUd='parser.atom.4',nUd='parser.atom.5',oUd='parser.cc.1',pUd='parser.cc.2',qUd='parser.cc.3',rUd='parser.cc.5',sUd='parser.cc.6',tUd='parser.cc.7',uUd='parser.cc.8',vUd='parser.ope.1',wUd='parser.ope.2',xUd='parser.ope.3',yUd='parser.descape.1',zUd='parser.descape.2',AUd='parser.descape.3',BUd='parser.descape.4',CUd='parser.descape.5',DUd='parser.process.1',EUd='parser.quantifier.1',FUd='parser.quantifier.2',GUd='parser.quantifier.3',HUd='parser.quantifier.4',IUd='parser.quantifier.5',JUd='org.eclipse.emf.common.notify',KUd={380:1,610:1},LUd={3:1,4:1,20:1,25:1,41:1,13:1,15:1,59:1,52:1},MUd={338:1,136:1},NUd='index=',OUd=', size=',PUd={3:1,4:1,5:1,116:1},QUd={3:1,4:1,20:1,25:1,41:1,13:1,15:1,49:1,59:1,52:1},RUd={3:1,6:1,4:1,5:1,175:1},SUd={3:1,4:1,5:1,339:1},TUd=';/?:@&=+$,',UUd='invalid authority: ',VUd='EAnnotation',WUd='ETypedElement',XUd='EStructuralFeature',YUd='EAttribute',ZUd='EClassifier',$Ud='EEnumLiteral',_Ud='EGenericType',aVd='EOperation',bVd='EParameter',cVd='EReference',dVd='ETypeParameter',eVd='org.eclipse.emf.ecore.util',fVd={3:1,20:1,13:1,15:1,52:1,533:1,81:1,64:1},gVd='org.eclipse.emf.ecore.util.FeatureMap$Entry',hVd=1024,iVd=8192,jVd=2048,kVd='byte',lVd='char',mVd='double',nVd='float',oVd='int',pVd='long',qVd='short',rVd='java.lang.Object',sVd={3:1,4:1,5:1,222:1},tVd={3:1,4:1,5:1,611:1},uVd={3:1,4:1,20:1,25:1,41:1,13:1,15:1,49:1,59:1,55:1,52:1,64:1},vVd={3:1,4:1,20:1,25:1,41:1,13:1,15:1,49:1,59:1,55:1,52:1,81:1,64:1},wVd='mixed',xVd='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',yVd='kind',zVd={3:1,4:1,5:1,612:1},AVd={3:1,4:1,20:1,25:1,41:1,13:1,15:1,59:1,52:1,81:1,64:1},BVd={20:1,25:1,41:1,13:1,15:1,52:1,64:1},CVd={43:1,120:1,260:1},DVd={75:1,311:1},EVd="The value of type '",FVd="' must be of type '",GVd=1365,HVd='http://www.eclipse.org/emf/2002/Ecore',IVd=-32768,JVd='constraints',KVd='baseType',LVd='getEStructuralFeature',MVd='getFeatureID',NVd='feature',OVd='getOperationID',PVd='operation',QVd='defaultValue',RVd='eTypeParameters',SVd='isInstance',TVd='getEEnumLiteral',UVd='eContainingClass',VVd={47:1},WVd={3:1,4:1,5:1,124:1},XVd='org.eclipse.emf.ecore.resource',YVd={91:1,87:1,534:1,1628:1},ZVd='org.eclipse.emf.ecore.resource.impl',$Vd='unspecified',_Vd='simple',aWd='attribute',bWd='attributeWildcard',cWd='element',dWd='elementWildcard',eWd='collapse',fWd='itemType',gWd='namespace',hWd='##targetNamespace',iWd='whiteSpace',jWd='wildcards',kWd='http://www.eclipse.org/emf/2003/XMLType',lWd='##any',mWd='uninitialized',nWd='The multiplicity constraint is violated',oWd='org.eclipse.emf.ecore.xml.type',pWd='ProcessingInstruction',qWd='SimpleAnyType',rWd='XMLTypeDocumentRoot',sWd='org.eclipse.emf.ecore.xml.type.impl',tWd='INF',uWd='processing',vWd='ENTITIES_._base',wWd='minLength',xWd='ENTITY',yWd='NCName',zWd='IDREFS_._base',AWd='integer',BWd='token',CWd='pattern',DWd='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',EWd='\\i\\c*',FWd='[\\i-[:]][\\c-[:]]*',GWd='nonPositiveInteger',HWd='maxInclusive',IWd='NMTOKEN',JWd='NMTOKENS_._base',KWd='nonNegativeInteger',LWd='minInclusive',MWd='normalizedString',NWd='unsignedByte',OWd='unsignedInt',PWd='18446744073709551615',QWd='unsignedShort',RWd='processingInstruction',SWd='org.eclipse.emf.ecore.xml.type.internal',TWd=1114111,UWd='Internal Error: shorthands: \\u',VWd='xml:isDigit',WWd='xml:isWord',XWd='xml:isSpace',YWd='xml:isNameChar',ZWd='xml:isInitialNameChar',$Wd='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',_Wd='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',aXd='Private Use',bXd='ASSIGNED',cXd='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',dXd='UNASSIGNED',eXd={3:1,112:1},fXd='org.eclipse.emf.ecore.xml.type.util',gXd={3:1,4:1,5:1,342:1},hXd='org.eclipse.xtext.xbase.lib',iXd='Cannot add elements to a Range',jXd='Cannot set elements in a Range',kXd='Cannot remove elements from a Range',lXd='locale',mXd='default',nXd='user.agent';var _,a3,X2,v2=-1;b3();c3(1,null,{},ib);_.Fb=function jb(a){return this===a};_.Gb=function lb(){return this.ql};_.Hb=function nb(){return bqb(this)};_.Ib=function pb(){return f4(mb(this))+'@'+(ob(this)>>>0).toString(16)};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var gA,hA,iA;c3(274,1,{274:1,1712:1},h4);_._d=function i4(a){var b;b=new h4;b.i=4;a>1?(b.c=p4(this,a-1)):(b.c=this);return b};_.ae=function o4(){d4(this);return this.b};_.be=function q4(){return f4(this)};_.ce=function s4(){return d4(this),this.k};_.de=function u4(){return (this.i&4)!=0};_.ee=function v4(){return (this.i&1)!=0};_.Ib=function y4(){return g4(this)};_.i=0;var c4=1;var NE=k4(kJd,'Object',1);var xE=k4(kJd,'Class',274);c3(1692,1,{3:1});var MA=k4(lJd,'Optional',1692);c3(1060,1692,{3:1},sb);_.Fb=function tb(a){return a===this};_.Hb=function ub(){return 2040732332};_.Ib=function vb(){return 'Optional.absent()'};_.Jb=function wb(a){Pb(a);return rb(),qb};var qb;var HA=k4(lJd,'Absent',1060);var IA=m4(lJd,'Function');c3(393,1,{},Cb);_.Lb=function Db(a){return Ab(a)};var LA=k4(lJd,'Joiner',393);c3(875,393,{},Eb);_.Lb=function Fb(a){return a==null?this.b:Ab(a)};var JA=k4(lJd,'Joiner/1',875);c3(874,1,{},Gb);var KA=k4(lJd,'Joiner/MapJoiner',874);var NA=m4(lJd,'Predicate');var Wb;c3(494,1,{138:1,494:1,3:1,56:1},Yb);_.Nb=function ac(a){return this.Mb(a)};_.Mb=function Zb(a){var b;for(b=0;b0};_.ic=function oe(){if(this.b>=this.c){throw x2(new djb)}return fn(this,this.b++)};_.Dc=function pe(){return this.b};_.Ec=function qe(){if(this.b<=0){throw x2(new djb)}return fn(this,--this.b)};_.Fc=function re(){return this.b-1};_.b=0;_.c=0;var YA=k4(sJd,'AbstractIndexedListIterator',847);c3(949,257,CJd);_.hc=function ve(){return se(this)};_.ic=function we(){return te(this)};_.d=1;var ZA=k4(sJd,'AbstractIterator',949);c3(1677,1,{238:1});_.Hc=function Be(){var a;return a=this.f,!a?(this.f=this.Ic()):a};_.Jc=function Ce(){return new hh(this.Hc())};_.Lc=function De(){return new gkb(this.Kc(),this._b(),sA(this,475)?1:0)};_.Fb=function Ee(a){return xt(this,a)};_.Hb=function Fe(){return ob(this.Hc())};_.Wb=function Ge(){return this._b()==0};_.Xb=function He(){return ze(this)};_.Ib=function Ie(){return f3(this.Hc())};var CB=k4(sJd,'AbstractMultimap',1677);c3(654,1677,EJd);_.Pb=function Se(){Je(this)};_.Qb=function Te(a){return this.c.Qb(a)};_.Ic=function Ue(){return sA(this.c,122)?new Ih(this,kA(this.c,122)):sA(this.c,115)?new Ch(this,kA(this.c,115)):new eg(this,this.c)};_.Pc=function Ve(a){return this.Oc()};_.Jc=function We(){return sA(this.c,122)?new Ph(this,kA(this.c,122)):sA(this.c,115)?new Nh(this,kA(this.c,115)):new ph(this,this.c)};_.Qc=function Xe(){return df(this.Oc())};_.Kc=function Ye(){return new zf(this)};_.Lc=function Ze(){return Xj(this.c.Tb().wc(),new Oi,64,this.d)};_.Mc=function $e(a){return Ke(this,a)};_.Nc=function bf(a){return Me(this,a)};_._b=function cf(){return this.d};_.Rc=function ef(){return new vf(this)};_.Sc=function ff(){return Xj(this.c.ac().wc(),new xf,64,this.d)};_.d=0;var xB=k4(sJd,'AbstractMapBasedMultimap',654);c3(1483,654,EJd);_.Oc=function jf(){return new Hbb(this.a)};_.Qc=function kf(){return Gl(),Gl(),Fl};_.Mc=function mf(a){return kA(Ke(this,a),15)};_.Nc=function of(a){return kA(Me(this,a),15)};_.Hc=function hf(){var a;return a=this.f,!a?(this.f=sA(this.c,122)?new Ih(this,kA(this.c,122)):sA(this.c,115)?new Ch(this,kA(this.c,115)):new eg(this,this.c)):a};_.Fb=function lf(a){return xt(this,a)};_.Tc=function nf(a){return kA(Ke(this,a),15)};_.Uc=function pf(a){return kA(Me(this,a),15)};var $A=k4(sJd,'AbstractListMultimap',1483);c3(661,1,wJd);_.gc=function rf(a){Bhb(this,a)};_.hc=function sf(){return this.c.hc()||this.e.hc()};_.ic=function tf(){var a;if(!this.e.hc()){a=kA(this.c.ic(),38);this.b=a.kc();this.a=kA(a.lc(),13);this.e=this.a.tc()}return this.Vc(this.b,this.e.ic())};_.jc=function uf(){this.e.jc();this.a.Wb()&&this.c.jc();--this.d.d};var gB=k4(sJd,'AbstractMapBasedMultimap/Itr',661);c3(970,661,wJd,vf);_.Vc=function wf(a,b){return b};var _A=k4(sJd,'AbstractMapBasedMultimap/1',970);c3(971,1,FJd,xf);_.Kb=function yf(a){return kA(a,13).wc()};var aB=k4(sJd,'AbstractMapBasedMultimap/1methodref$spliterator$Type',971);c3(972,661,wJd,zf);_.Vc=function Af(a,b){return Es(),new _m(a,b)};var bB=k4(sJd,'AbstractMapBasedMultimap/2',972);c3(1666,1,uJd);_.Ub=function Lf(a){bjb(this,a)};_.Yb=function Sf(a,b,c){return cjb(this,a,b,c)};_.Pb=function Gf(){this.Tb().Pb()};_.Wc=function Hf(a){return Bf(this,a)};_.Qb=function If(a){return !!Df(this,a,false)};_.Rb=function Jf(a){var b,c,d;for(c=this.Tb().tc();c.hc();){b=kA(c.ic(),38);d=b.lc();if(yA(a)===yA(d)||a!=null&&kb(a,d)){return true}}return false};_.Fb=function Kf(a){return Cf(this,a)};_.Vb=function Mf(a){return Of(Df(this,a,false))};_.Hb=function Pf(){return edb(this.Tb())};_.Wb=function Qf(){return this._b()==0};_.Xb=function Rf(){return new G9(this)};_.Zb=function Tf(a,b){throw x2(new V6('Put not supported on this map'))};_.$b=function Uf(a){return Of(Df(this,a,true))};_._b=function Vf(){return this.Tb()._b()};_.Ib=function Wf(){var a,b,c;c=new slb('{','}');for(b=this.Tb().tc();b.hc();){a=kA(b.ic(),38);rlb(c,Ff(this,a.kc())+'='+Ff(this,a.lc()))}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)};_.ac=function Xf(){return new R9(this)};var mF=k4(tJd,'AbstractMap',1666);c3(1678,1666,uJd);_.Jc=function Zf(){return new hh(this)};_.Tb=function $f(){return Yf(this)};_.Xb=function _f(){var a;a=this.g;return !a?(this.g=this.Jc()):a};_.ac=function ag(){var a;a=this.i;return !a?(this.i=new nt(this)):a};var hD=k4(sJd,'Maps/ViewCachingAbstractMap',1678);c3(357,1678,uJd,eg);_.Vb=function jg(a){return bg(this,a)};_.$b=function mg(a){return cg(this,a)};_.Pb=function fg(){this.d==this.e.c?this.e.Pb():bo(new bh(this))};_.Qb=function gg(a){return Is(this.d,a)};_.Yc=function hg(){return new Vg(this)};_.Xc=function(){return this.Yc()};_.Fb=function ig(a){return this===a||kb(this.d,a)};_.Hb=function kg(){return ob(this.d)};_.Xb=function lg(){return this.e.Xb()};_._b=function ng(){return this.d._b()};_.Ib=function og(){return f3(this.d)};var fB=k4(sJd,'AbstractMapBasedMultimap/AsMap',357);c3(25,1,HJd);_.sc=function Bg(a){i5(this,a)};_.uc=function Dg(){return new Zob(null,this.wc())};_.wc=function Fg(){return new ekb(this,0)};_.xc=function Gg(){return new Zob(null,this.wc())};_.nc=function wg(a){throw x2(new V6('Add not supported on this collection'))};_.oc=function xg(a){return pg(this,a)};_.Pb=function yg(){rg(this)};_.pc=function zg(a){return qg(this,a,false)};_.qc=function Ag(a){return sg(this,a)};_.Wb=function Cg(){return this._b()==0};_.vc=function Eg(a){return qg(this,a,true)};_.yc=function Hg(){return tg(this)};_.zc=function Ig(a){return ug(this,a)};_.Ib=function Jg(){return vg(this)};var ZE=k4(tJd,'AbstractCollection',25);c3(IJd,25,JJd);_.wc=function Og(){return new ekb(this,1)};_.Fb=function Mg(a){return Kg(this,a)};_.Hb=function Ng(){return edb(this)};var tF=k4(tJd,'AbstractSet',IJd);c3(1660,IJd,JJd);var ED=k4(sJd,'Sets/ImprovedAbstractSet',1660);c3(1679,1660,JJd);_.Pb=function Qg(){this.Zc().Pb()};_.pc=function Rg(a){return Pg(this,a)};_.Wb=function Sg(){return this.Zc().Wb()};_.vc=function Tg(a){var b;if(this.pc(a)){b=kA(a,38);return this.Zc().Xb().vc(b.kc())}return false};_._b=function Ug(){return this.Zc()._b()};var cD=k4(sJd,'Maps/EntrySet',1679);c3(968,1679,JJd,Vg);_.pc=function Wg(a){return uk(this.a.d.Tb(),a)};_.tc=function Xg(){return new bh(this.a)};_.Zc=function Yg(){return this.a};_.vc=function Zg(a){var b;if(!uk(this.a.d.Tb(),a)){return false}b=kA(a,38);Ne(this.a.e,b.kc());return true};_.wc=function $g(){return Yj(this.a.d.Tb().wc(),new _g(this.a))};var dB=k4(sJd,'AbstractMapBasedMultimap/AsMap/AsMapEntries',968);c3(969,1,FJd,_g);_.Kb=function ah(a){return dg(this.a,kA(a,38))};var cB=k4(sJd,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',969);c3(659,1,wJd,bh);_.gc=function dh(a){Bhb(this,a)};_.ic=function fh(){var a;return a=kA(this.b.ic(),38),this.a=kA(a.lc(),13),dg(this.c,a)};_.hc=function eh(){return this.b.hc()};_.jc=function gh(){this.b.jc();this.c.e.d-=this.a._b();this.a.Pb()};var eB=k4(sJd,'AbstractMapBasedMultimap/AsMap/AsMapIterator',659);c3(541,1660,JJd,hh);_.Pb=function ih(){this.b.Pb()};_.pc=function jh(a){return this.b.Qb(a)};_.sc=function kh(a){Pb(a);this.b.Ub(new lt(a))};_.Wb=function lh(){return this.b.Wb()};_.tc=function mh(){return Es(),oo(this.b.Tb().tc(),(bt(),_s))};_.vc=function nh(a){if(this.b.Qb(a)){this.b.$b(a);return true}return false};_._b=function oh(){return this.b._b()};var eD=k4(sJd,'Maps/KeySet',541);c3(356,541,JJd,ph);_.Pb=function qh(){var a;bo((a=this.b.Tb().tc(),new xh(this,a)))};_.qc=function rh(a){return this.b.Xb().qc(a)};_.Fb=function sh(a){return this===a||kb(this.b.Xb(),a)};_.Hb=function th(){return ob(this.b.Xb())};_.tc=function uh(){var a;return a=this.b.Tb().tc(),new xh(this,a)};_.vc=function vh(a){var b,c;c=0;b=kA(this.b.$b(a),13);if(b){c=b._b();b.Pb();this.a.d-=c}return c>0};_.wc=function wh(){return this.b.Xb().wc()};var iB=k4(sJd,'AbstractMapBasedMultimap/KeySet',356);c3(660,1,wJd,xh);_.gc=function yh(a){Bhb(this,a)};_.hc=function zh(){return this.c.hc()};_.ic=function Ah(){this.a=kA(this.c.ic(),38);return this.a.kc()};_.jc=function Bh(){var a;Ub(!!this.a,xJd);a=kA(this.a.lc(),13);this.c.jc();this.b.a.d-=a._b();a.Pb()};var hB=k4(sJd,'AbstractMapBasedMultimap/KeySet/1',660);c3(358,357,{109:1,115:1},Ch);_.Jc=function Dh(){return this.$c()};_.Xb=function Fh(){return this._c()};_.$c=function Eh(){return new Nh(this.c,this.ad())};_._c=function Gh(){var a;return a=this.b,!a?(this.b=this.$c()):a};_.ad=function Hh(){return kA(this.d,115)};var mB=k4(sJd,'AbstractMapBasedMultimap/SortedAsMap',358);c3(396,358,KJd,Ih);_.$c=function Jh(){return new Ph(this.a,kA(kA(this.d,115),122))};_.Xb=function Kh(){var a;return a=this.b,kA(!a?(this.b=new Ph(this.a,kA(kA(this.d,115),122))):a,196)};_._c=function Lh(){var a;return a=this.b,kA(!a?(this.b=new Ph(this.a,kA(kA(this.d,115),122))):a,196)};_.ad=function Mh(){return kA(kA(this.d,115),122)};var jB=k4(sJd,'AbstractMapBasedMultimap/NavigableAsMap',396);c3(327,356,LJd,Nh);_.wc=function Oh(){return this.b.Xb().wc()};var nB=k4(sJd,'AbstractMapBasedMultimap/SortedKeySet',327);c3(299,327,MJd,Ph);var kB=k4(sJd,'AbstractMapBasedMultimap/NavigableKeySet',299);c3(448,25,HJd,Uh);_.nc=function Vh(a){var b,c;Rh(this);c=this.d.Wb();b=this.d.nc(a);if(b){++this.f.d;c&&Qh(this)}return b};_.oc=function Wh(a){var b,c,d;if(a.Wb()){return false}d=(Rh(this),this.d._b());b=this.d.oc(a);if(b){c=this.d._b();this.f.d+=c-d;d==0&&Qh(this)}return b};_.Pb=function Xh(){var a;a=(Rh(this),this.d._b());if(a==0){return}this.d.Pb();this.f.d-=a;Sh(this)};_.pc=function Yh(a){Rh(this);return this.d.pc(a)};_.qc=function Zh(a){Rh(this);return this.d.qc(a)};_.Fb=function $h(a){if(a===this){return true}Rh(this);return kb(this.d,a)};_.Hb=function _h(){Rh(this);return ob(this.d)};_.tc=function ai(){Rh(this);return new ui(this)};_.vc=function bi(a){var b;Rh(this);b=this.d.vc(a);if(b){--this.f.d;Sh(this)}return b};_._b=function ci(){return Th(this)};_.wc=function di(){return Rh(this),this.d.wc()};_.Ib=function ei(){Rh(this);return f3(this.d)};var pB=k4(sJd,'AbstractMapBasedMultimap/WrappedCollection',448);var mG=m4(tJd,'List');c3(657,448,{20:1,25:1,13:1,15:1},fi);_.jd=function ni(a){Vib(this,a)};_.wc=function oi(){return Rh(this),this.d.wc()};_.bd=function gi(a,b){var c;Rh(this);c=this.d.Wb();kA(this.d,15).bd(a,b);++this.a.d;c&&Qh(this)};_.cd=function hi(a){Rh(this);return kA(this.d,15).cd(a)};_.dd=function ii(a){Rh(this);return kA(this.d,15).dd(a)};_.ed=function ji(){Rh(this);return new Ai(this)};_.fd=function ki(a){Rh(this);return new Bi(this,a)};_.gd=function li(a){var b;Rh(this);b=kA(this.d,15).gd(a);--this.a.d;Sh(this);return b};_.hd=function mi(a,b){Rh(this);return kA(this.d,15).hd(a,b)};_.kd=function pi(a,b){Rh(this);return Qe(this.a,this.e,kA(this.d,15).kd(a,b),!this.b?this:this.b)};var rB=k4(sJd,'AbstractMapBasedMultimap/WrappedList',657);c3(967,657,{20:1,25:1,13:1,15:1,49:1},qi);var lB=k4(sJd,'AbstractMapBasedMultimap/RandomAccessWrappedList',967);c3(558,1,wJd,ui);_.gc=function wi(a){Bhb(this,a)};_.hc=function xi(){ti(this);return this.b.hc()};_.ic=function yi(){ti(this);return this.b.ic()};_.jc=function zi(){si(this)};var oB=k4(sJd,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',558);c3(658,558,NJd,Ai,Bi);_.jc=function Hi(){si(this)};_.Bc=function Ci(a){var b;b=Th(this.a)==0;(ti(this),kA(this.b,120)).Bc(a);++this.a.a.d;b&&Qh(this.a)};_.Cc=function Di(){return (ti(this),kA(this.b,120)).Cc()};_.Dc=function Ei(){return (ti(this),kA(this.b,120)).Dc()};_.Ec=function Fi(){return (ti(this),kA(this.b,120)).Ec()};_.Fc=function Gi(){return (ti(this),kA(this.b,120)).Fc()};_.Gc=function Ii(a){(ti(this),kA(this.b,120)).Gc(a)};var qB=k4(sJd,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',658);c3(559,448,LJd,Ji);_.wc=function Ki(){return Rh(this),this.d.wc()};var uB=k4(sJd,'AbstractMapBasedMultimap/WrappedSortedSet',559);c3(656,559,MJd,Li);var sB=k4(sJd,'AbstractMapBasedMultimap/WrappedNavigableSet',656);c3(655,448,JJd,Mi);_.wc=function Ni(){return Rh(this),this.d.wc()};var tB=k4(sJd,'AbstractMapBasedMultimap/WrappedSet',655);c3(974,1,FJd,Oi);_.Kb=function Pi(a){var b,c;return b=a.kc(),c=kA(a.lc(),13),Yj(c.wc(),new Qi(b))};var vB=k4(sJd,'AbstractMapBasedMultimap/lambda$0$Type',974);c3(973,1,FJd,Qi);_.Kb=function Ri(a){return af(this.a,a)};var wB=k4(sJd,'AbstractMapBasedMultimap/lambda$2$Type',973);c3(392,1,OJd);_.Fb=function Si(a){var b;if(sA(a,38)){b=kA(a,38);return Hb(this.kc(),b.kc())&&Hb(this.lc(),b.lc())}return false};_.Hb=function Ti(){var a,b;a=this.kc();b=this.lc();return (a==null?0:ob(a))^(b==null?0:ob(b))};_.mc=function Ui(a){throw x2(new U6)};_.Ib=function Vi(){return this.kc()+'='+this.lc()};var yB=k4(sJd,PJd,392);c3(1680,25,HJd);_.Pb=function Wi(){this.ld().Pb()};_.pc=function Xi(a){var b;if(sA(a,38)){b=kA(a,38);return xe(this.ld(),b.kc(),b.lc())}return false};_.vc=function Yi(a){var b;if(sA(a,38)){b=kA(a,38);return Ae(this.ld(),b.kc(),b.lc())}return false};_._b=function Zi(){return this.ld()._b()};var lD=k4(sJd,'Multimaps/Entries',1680);c3(975,1680,HJd);_.tc=function $i(){return this.a.Kc()};_.ld=function _i(){return this.a};_.wc=function aj(){return this.a.Lc()};var zB=k4(sJd,'AbstractMultimap/Entries',975);c3(662,975,JJd,bj);_.wc=function ej(){return this.a.Lc()};_.Fb=function cj(a){return dv(this,a)};_.Hb=function dj(){return ev(this)};var AB=k4(sJd,'AbstractMultimap/EntrySet',662);c3(663,25,HJd,fj);_.Pb=function gj(){this.a.Pb()};_.pc=function hj(a){return ye(this.a,a)};_.tc=function ij(){return this.a.Rc()};_._b=function jj(){return this.a.d};_.wc=function kj(){return this.a.Sc()};var BB=k4(sJd,'AbstractMultimap/Values',663);c3(1681,25,{738:1,20:1,25:1,13:1});_.sc=function sj(a){Pb(a);mj(this).sc(new su(a))};_.wc=function yj(){var a;return a=mj(this).wc(),Xj(a,new Du,64|a.qd()&1296,xu(this))};_.nc=function nj(a){lj();return true};_.oc=function oj(a){return uu(this,a)};_.Pb=function pj(){bo(new au(Yf(Tp(this.a)).tc()))};_.pc=function qj(a){var b;return b=kA(Js(Tp(this.a),a),13),(!b?0:b._b())>0};_.Fb=function rj(a){return vu(this,a)};_.Hb=function tj(){return ob(mj(this))};_.Wb=function uj(){return mj(this).Wb()};_.tc=function vj(){return new yu(this,mj(this).tc())};_.vc=function wj(a){return Tt(this,a,1)>0};_._b=function xj(){return xu(this)};_.Ib=function zj(){return f3(mj(this))};var DB=k4(sJd,'AbstractMultiset',1681);c3(557,654,QJd);_.Oc=function Cj(){return this.md()};_.Qc=function Dj(){return this.nd()};_.Mc=function Gj(a){return this.od(a)};_.Nc=function Ij(a){return this.pd(a)};_.Hc=function Bj(){var a;return a=this.f,!a?(this.f=sA(this.c,122)?new Ih(this,kA(this.c,122)):sA(this.c,115)?new Ch(this,kA(this.c,115)):new eg(this,this.c)):a};_.nd=function Ej(){return nl(),av(),_u};_.Fb=function Fj(a){return xt(this,a)};_.od=function Hj(a){return kA(Ke(this,a),19)};_.pd=function Jj(a){return kA(Me(this,a),19)};var EB=k4(sJd,'AbstractSetMultimap',557);c3(1413,557,QJd);_.md=function Mj(){return new Cmb(this.b)};_.nd=function Nj(){var a;return a=this.b,!a?(bdb(),new Teb(new Cmb(this.b))):nn(this.b)};_.Mc=function Oj(a){return kA(kA(Ke(this,a),19),60)};_.od=function Pj(a){return kA(kA(Ke(this,a),19),60)};_.Nc=function Qj(a){return kA(kA(Me(this,a),19),60)};_.pd=function Rj(a){return kA(kA(Me(this,a),19),60)};_.Hc=function Lj(){var a;return a=this.f,!a?(this.f=sA(this.c,122)?new Ih(this,kA(this.c,122)):sA(this.c,115)?new Ch(this,kA(this.c,115)):new eg(this,this.c)):a};var GB=k4(sJd,'AbstractSortedSetMultimap',1413);c3(1414,1413,QJd);_.Hc=function Tj(){var a;return a=this.f,kA(kA(!a?(this.f=sA(this.c,122)?new Ih(this,kA(this.c,122)):sA(this.c,115)?new Ch(this,kA(this.c,115)):new eg(this,this.c)):a,115),122)};_.Xb=function Uj(){var a;return a=this.i,kA(kA(!a?(this.i=sA(this.c,122)?new Ph(this,kA(this.c,122)):sA(this.c,115)?new Nh(this,kA(this.c,115)):new ph(this,this.c)):a,60),196)};var FB=k4(sJd,'AbstractSortedKeySortedSetMultimap',1414);c3(521,1483,EJd,Vj);_.a=0;var HB=k4(sJd,'ArrayListMultimap',521);c3(1156,1,SJd,Zj);_.qd=function $j(){return this.a.qd()&-262};_.rd=function _j(){return this.a.rd()};_.gc=function ak(a){this.a.gc(new ek(a,this.b))};_.sd=function bk(a){return this.a.sd(new ck(a,this.b))};var NB=k4(sJd,'CollectSpliterators/1',1156);c3(1157,1,{},ck);_.td=function dk(a){this.a.td(this.b.Kb(a))};var IB=k4(sJd,'CollectSpliterators/1/lambda$0$Type',1157);c3(1158,1,{},ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var JB=k4(sJd,'CollectSpliterators/1/lambda$1$Type',1158);c3(1159,1,SJd,hk);_.qd=function ik(){return this.a};_.rd=function jk(){!!this.d&&(this.b=w5(this.b,this.d.rd()));return w5(this.b,0)};_.gc=function kk(a){if(this.d){this.d.gc(a);this.d=null}this.c.gc(new pk(this.e,a));this.b=0};_.sd=function mk(a){while(true){if(!!this.d&&this.d.sd(a)){L2(this.b,TJd)&&(this.b=R2(this.b,1));return true}else{this.d=null}if(!this.c.sd(new nk(this,this.e))){return false}}};_.a=0;_.b=0;var MB=k4(sJd,'CollectSpliterators/1FlatMapSpliterator',1159);c3(1160,1,{},nk);_.td=function ok(a){gk(this.a,this.b,a)};var KB=k4(sJd,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1160);c3(1161,1,{},pk);_.td=function qk(a){lk(this.b,this.a,a)};var LB=k4(sJd,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1161);var rk;c3(844,1,VJd,vk);_.Fb=function xk(a){return this===a};_.Kb=function wk(a){return yA(a)===yA(this.a)?GJd:a};var OB=k4(sJd,'Collections2/1',844);c3(220,1,WJd);_.vd=function Bk(a){return this.ud(kA(a,220))};_.ud=function Ak(a){var b;if(a==(Uk(),Tk)){return 1}if(a==(Fk(),Ek)){return -1}b=(Pu(),E3(this.a,a.a));if(b!=0){return b}return sA(this,467)==sA(a,467)?0:sA(this,467)?1:-1};_.yd=function Ck(){return this.a};_.Fb=function Dk(a){return yk(this,a)};var TB=k4(sJd,'Cut',220);c3(1508,220,WJd,Gk);_.ud=function Hk(a){return a==this?0:1};_.wd=function Ik(a){throw x2(new x3)};_.xd=function Jk(a){a.a+='+\u221E)'};_.yd=function Kk(){throw x2(new Q4(XJd))};_.zd=function Lk(a){return false};_.Ib=function Mk(){return '+\u221E'};var Ek;var PB=k4(sJd,'Cut/AboveAll',1508);c3(467,220,{220:1,467:1,3:1,34:1},Nk);_.wd=function Ok(a){H6((a.a+='(',a),this.a)};_.xd=function Pk(a){C6(H6(a,this.a),93)};_.Hb=function Qk(){return ~ob(this.a)};_.zd=function Rk(a){return Pu(),E3(this.a,a)<0};_.Ib=function Sk(){return '/'+this.a+'\\'};var QB=k4(sJd,'Cut/AboveValue',467);c3(1507,220,WJd,Vk);_.ud=function Wk(a){return a==this?0:-1};_.wd=function Xk(a){a.a+='(-\u221E'};_.xd=function Yk(a){throw x2(new x3)};_.yd=function Zk(){throw x2(new Q4(XJd))};_.zd=function $k(a){return true};_.Ib=function _k(){return '-\u221E'};var Tk;var RB=k4(sJd,'Cut/BelowAll',1507);c3(1509,220,WJd,al);_.wd=function bl(a){H6((a.a+='[',a),this.a)};_.xd=function cl(a){C6(H6(a,this.a),41)};_.Hb=function dl(){return ob(this.a)};_.zd=function el(a){return Pu(),E3(this.a,a)<=0};_.Ib=function fl(){return '\\'+this.a+'/'};var SB=k4(sJd,'Cut/BelowValue',1509);c3(482,1,YJd);_.sc=function il(a){i5(this,a)};_.Ib=function jl(){return no(kA(Qb(this,'use Optional.orNull() instead of Optional.or(null)'),20).tc())};var VB=k4(sJd,'FluentIterable',482);c3(325,482,YJd,ll);_.tc=function ml(){return kl(this)};var UB=k4(sJd,'FluentIterable/2',325);c3(1670,25,ZJd);_.tc=function tl(){return this.Ad()};_.nc=function pl(a){throw x2(new U6)};_.oc=function ql(a){throw x2(new U6)};_.Pb=function rl(){throw x2(new U6)};_.pc=function sl(a){return a!=null&&qg(this,a,false)};_.vc=function ul(a){throw x2(new U6)};var iC=k4(sJd,'ImmutableCollection',1670);c3(912,1670,ZJd,vl);_.tc=function Al(){return po((bdb(),sdb(),rdb))};_.pc=function wl(a){return false};_.qc=function xl(a){return sg(this.a,a)};_.Wb=function yl(){return true};_.Ad=function zl(){return po((bdb(),sdb(),rdb))};_._b=function Bl(){return 0};_.yc=function Cl(){return tg(this.a)};_.zc=function Dl(a){return ug(this.a,a)};_.Ib=function El(){return vg(this.a)};var XB=k4(sJd,'ForwardingImmutableCollection',912);c3(193,1670,$Jd);_.tc=function Nl(){return this.Ad()};_.ed=function Ol(){return new gn(this,this._b(),0)};_.fd=function Pl(a){return new gn(this,this._b(),a)};_.jd=function Tl(a){Vib(this,a)};_.wc=function Ul(){return new ekb(this,16)};_.kd=function Wl(a,b){return this.Bd(a,b)};_.bd=function Il(a,b){throw x2(new U6)};_.Fb=function Jl(a){return Nr(this,a)};_.Hb=function Kl(){return Or(this)};_.dd=function Ll(a){return a==null?-1:Pr(this,a)};_.Ad=function Ml(){return new gn(this,this._b(),0)};_.gd=function Rl(a){throw x2(new U6)};_.hd=function Sl(a,b){throw x2(new U6)};_.Bd=function Vl(a,b){var c;return Xl((c=new bs(this),new A9(c,a,b)))};var Fl;var mC=k4(sJd,'ImmutableList',193);c3(1675,193,$Jd);_.tc=function em(){return po(this.Cd().tc())};_.kd=function hm(a,b){return Xl(this.Cd().kd(a,b))};_.pc=function Yl(a){return a!=null&&this.Cd().pc(a)};_.qc=function Zl(a){return this.Cd().qc(a)};_.Fb=function $l(a){return kb(this.Cd(),a)};_.cd=function _l(a){return this.Cd().cd(a)};_.Hb=function am(){return ob(this.Cd())};_.dd=function bm(a){return this.Cd().dd(a)};_.Wb=function cm(){return this.Cd().Wb()};_.Ad=function dm(){return po(this.Cd().tc())};_._b=function fm(){return this.Cd()._b()};_.Bd=function gm(a,b){return Xl(this.Cd().kd(a,b))};_.yc=function im(){return this.Cd().zc(tz(NE,oJd,1,this.Cd()._b(),5,1))};_.zc=function jm(a){return this.Cd().zc(a)};_.Ib=function km(){return f3(this.Cd())};var YB=k4(sJd,'ForwardingImmutableList',1675);c3(1671,1670,_Jd);_.tc=function pm(){return this.Ad()};_.wc=function rm(){return new ekb(this,1)};_.Fb=function nm(a){return dv(this,a)};_.Hb=function om(){return ev(this)};var nC=k4(sJd,'ImmutableSet',1671);c3(550,1671,_Jd);_.tc=function zm(){return this.Ad()};_.pc=function um(a){return a!=null&&Udb(this.b,a)};_.qc=function vm(a){return Vdb(this.b,a)};_.Hb=function wm(){return ob(this.b.b)};_.Wb=function xm(){return this.b.b.Wb()};_.Ad=function ym(){return po(new neb(this.b.b.tc()))};_._b=function Am(){return this.b.b._b()};_.yc=function Bm(){return this.b.b.yc()};_.zc=function Cm(a){return Wdb(this.b,a)};_.Ib=function Dm(){return f3(this.b.b)};var ZB=k4(sJd,'ForwardingImmutableSet',550);c3(1664,1663,aKd);_.Ac=function Em(){return bdb(),new Teb(this.a)};_.wc=function Fm(){return new lkb(this)};var cC=k4(sJd,'ForwardingSortedSet',1664);c3(481,632,vJd,Gm);_.ec=function Hm(a){return new Jm(this,a,this)};_.Zb=function Im(a,b){return Lc(this,a,b,false)};var gC=k4(sJd,'HashBiMap',481);c3(892,633,vJd,Jm);_.dc=function Km(){return new Rm(this,this.a.b.Tb().tc())};var fC=k4(sJd,'HashBiMap/1',892);c3(479,1,wJd);_.gc=function Nm(a){Bhb(this,a)};_.hc=function Om(){return this.b.hc()};_.ic=function Pm(){return Lm(this)};_.jc=function Qm(){this.b.jc()};var ID=k4(sJd,'TransformedIterator',479);c3(893,479,wJd,Rm);_.Ed=function Sm(a){return new Tm(this,kA(a,38))};_.Dd=function(a){return this.Ed(a)};var eC=k4(sJd,'HashBiMap/1/1',893);c3(894,392,OJd,Tm);_.kc=function Um(){return this.c};_.lc=function Vm(){return this.a.a.b.Vb(this.c)};_.mc=function Wm(a){var b;Ub(Kd(Jc(this.a.a),this),zJd);b=this.a.a.b.Vb(this.c);if(yA(a)===yA(b)||a!=null&&kb(a,b)){return a}Lc(this.a.a,this.c,a,true);return b};var dC=k4(sJd,'HashBiMap/1/1/1',894);c3(298,557,QJd,Xm);_.md=function Ym(){return new Kgb(Gs(this.a))};_.a=2;var hC=k4(sJd,'HashMultimap',298);c3(372,392,{392:1,372:1,3:1,38:1},_m);_.kc=function an(){return this.g};_.lc=function bn(){return this.i};_.mc=function cn(a){throw x2(new U6)};var jC=k4(sJd,'ImmutableEntry',372);c3(903,550,_Jd,dn);var kC=k4(sJd,'ImmutableEnumSet',903);c3(544,847,DJd,gn);var lC=k4(sJd,'ImmutableList/1',544);c3(1561,550,bKd);_.tc=function pn(){return po(new neb(this.b.b.tc()))};_.wc=function qn(){return new lkb(this)};_.pc=function ln(b){try{return b!=null&&Udb(this.a,b)}catch(a){a=w2(a);if(sA(a,177)){return false}else throw x2(a)}};_.qc=function mn(b){var c,d;for(d=b.tc();d.hc();){c=d.ic();if(c==null){return false}}try{return Vdb(this.a,b)}catch(a){a=w2(a);if(sA(a,177)){return false}else throw x2(a)}};_.Ad=function on(){return po(new neb(this.b.b.tc()))};_.yc=function rn(){return Nu(this,tz(NE,oJd,1,this.b.b._b(),5,1))};_.zc=function sn(a){return Ou(this,a)};var hn,jn;var oC=k4(sJd,'ImmutableSortedSet',1561);c3(904,482,YJd,En);_.tc=function Fn(){return co(this.a)};_.Ib=function Gn(){return vg(this.a)+' (cycled)'};var qC=k4(sJd,'Iterables/1',904);c3(200,1,VJd,Hn);_.Kb=function In(a){return kA(a,20).tc()};_.Fb=function Jn(a){return this===a};var pC=k4(sJd,'Iterables/12',200);c3(905,482,YJd,Ln);_.sc=function Mn(a){Pb(a);this.b.sc(new Pn(this.a,a))};_.tc=function Nn(){return Kn(this)};var sC=k4(sJd,'Iterables/4',905);c3(906,1,{},Pn);_.td=function Qn(a){On(this.b,this.a,a)};var rC=k4(sJd,'Iterables/4/lambda$0$Type',906);c3(907,482,YJd,Sn);_.sc=function Tn(a){Pb(a);this.a.sc(new Vn(a,this.b))};_.tc=function Un(){return Rn(this)};var uC=k4(sJd,'Iterables/5',907);c3(908,1,{},Vn);_.td=function Wn(a){this.a.td(this.b.Kb(a))};var tC=k4(sJd,'Iterables/5/lambda$0$Type',908);var Xn,Yn;c3(945,1665,DJd,qo);_.hc=function ro(){return false};_.Cc=function so(){return false};_.ic=function to(){throw x2(new djb)};_.Dc=function uo(){return 0};_.Ec=function vo(){throw x2(new djb)};_.Fc=function wo(){return -1};var wC=k4(sJd,'Iterators/1',945);c3(555,257,CJd,xo);_.hc=function yo(){return !this.a};_.ic=function zo(){if(this.a){throw x2(new djb)}this.a=true;return this.b};_.a=false;var vC=k4(sJd,'Iterators/11',555);c3(946,1,wJd,Ao);_.gc=function Bo(a){Bhb(this,a)};_.hc=function Co(){return false};_.ic=function Do(){throw x2(new djb)};_.jc=function Eo(){Ub(false,xJd)};var xC=k4(sJd,'Iterators/2',946);c3(947,257,CJd,Fo);_.hc=function Go(){return this.a.hc()};_.ic=function Ho(){return this.a.ic()};var yC=k4(sJd,'Iterators/3',947);c3(948,1,wJd,Jo);_.gc=function Ko(a){Bhb(this,a)};_.hc=function Lo(){return this.a.hc()||this.b.tc().hc()};_.ic=function Mo(){return Io(this)};_.jc=function No(){this.a.jc()};var zC=k4(sJd,'Iterators/4',948);c3(950,949,CJd,Po);var AC=k4(sJd,'Iterators/6',950);c3(951,479,wJd,Qo);_.Dd=function Ro(a){return this.a.Kb(a)};var BC=k4(sJd,'Iterators/7',951);c3(647,1,wJd);_.gc=function Vo(a){Bhb(this,a)};_.hc=function Wo(){return So(this)};_.ic=function Xo(){return To(this)};_.jc=function Yo(){Ub(!!this.c,xJd);this.c.jc();this.c=null};var xD=k4(sJd,'MultitransformedIterator',647);c3(182,647,{182:1,43:1},Zo);_.Fd=function $o(a){return kA(a,43)};var DC=k4(sJd,'Iterators/ConcatenatedIterator',182);c3(648,647,wJd,ap);_.Fd=function bp(a){return _o(kA(a,43))};var CC=k4(sJd,'Iterators/ConcatenatedIterator/1',648);c3(1540,557,QJd,cp);_.Pb=function dp(){Je(this);jp(this.a,this.a)};_.md=function ep(){return new jib(this.b)};_.Pc=function fp(a){return new Bp(this,a,this.b)};_.Kc=function gp(){return new qp(this)};_.Lc=function hp(){var a;return new ekb((a=this.g,kA(!a?(this.g=new bj(this)):a,19)),17)};_.Xb=function ip(){var a;return a=this.i,!a?(this.i=sA(this.c,122)?new Ph(this,kA(this.c,122)):sA(this.c,115)?new Nh(this,kA(this.c,115)):new ph(this,this.c)):a};_.Rc=function lp(){return Es(),oo(new qp(this),(bt(),at))};_.Sc=function mp(){var a;return Yj(new ekb((a=this.g,kA(!a?(this.g=new bj(this)):a,19)),17),new np)};_.b=2;var JC=k4(sJd,'LinkedHashMultimap',1540);c3(1543,1,FJd,np);_.Kb=function op(a){return kA(a,38).lc()};var EC=k4(sJd,'LinkedHashMultimap/0methodref$getValue$Type',1543);c3(728,1,wJd,qp);_.gc=function rp(a){Bhb(this,a)};_.ic=function tp(){return pp(this)};_.hc=function sp(){return this.a!=this.b.a};_.jc=function up(){Ub(!!this.c,xJd);Ae(this.b,this.c.g,this.c.i);this.c=null};var FC=k4(sJd,'LinkedHashMultimap/1',728);c3(310,372,{392:1,372:1,310:1,1706:1,3:1,38:1},vp);_.Gd=function wp(){return this.f};_.Hd=function xp(a){this.c=a};_.Id=function yp(a){this.f=a};_.d=0;var GC=k4(sJd,'LinkedHashMultimap/ValueEntry',310);c3(1541,1660,{1706:1,20:1,25:1,13:1,19:1},Bp);_.nc=function Cp(a){var b,c,d,e,f;f=dKd*b5((a==null?0:ob(a))*eKd,15);b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new vp(this.c,a,f,e);kp(this.d,d);d.f=this;this.d=d;jp(this.g.a.b,d);jp(d,this.g.a);this.b[b]=d;++this.f;++this.e;zp(this);return true};_.Pb=function Dp(){var a,b;qcb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a.Gd()){b=kA(a,310);jp(b.b,b.e)}this.a=this;this.d=this;++this.e};_.pc=function Ep(a){var b,c;c=dKd*b5((a==null?0:ob(a))*eKd,15);for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.sc=function Fp(a){var b;Pb(a);for(b=this.a;b!=this;b=b.Gd()){a.td(kA(b,310).i)}};_.Gd=function Gp(){return this.a};_.tc=function Hp(){return new Np(this)};_.vc=function Ip(a){return Ap(this,a)};_.Hd=function Jp(a){this.d=a};_.Id=function Kp(a){this.a=a};_._b=function Lp(){return this.f};_.e=0;_.f=0;var IC=k4(sJd,'LinkedHashMultimap/ValueSet',1541);c3(1542,1,wJd,Np);_.gc=function Op(a){Bhb(this,a)};_.hc=function Pp(){return Mp(this),this.b!=this.c};_.ic=function Qp(){var a,b;Mp(this);if(this.b==this.c){throw x2(new djb)}a=kA(this.b,310);b=a.i;this.d=a;this.b=a.f;return b};_.jc=function Rp(){Mp(this);Ub(!!this.d,xJd);Ap(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var HC=k4(sJd,'LinkedHashMultimap/ValueSet/1',1542);c3(689,1677,EJd,Zp);_.Hc=function $p(){return Tp(this)};_.Fb=function fq(a){return xt(this,a)};_.Mc=function gq(a){return new Nq(this,a)};_.Nc=function jq(a){return Xp(this,a)};_.Pb=function aq(){Up(this)};_.Qb=function bq(a){return Vp(this,a)};_.Ic=function cq(){return new At(this)};_.Jc=function dq(){return new Uq(this)};_.Kc=function eq(){throw x2(new y3('should never be called'))};_.Tc=function hq(a){return new Nq(this,a)};_.Wb=function iq(){return !this.a};_.Uc=function kq(a){return Xp(this,a)};_._b=function lq(){return this.d};_.c=0;_.d=0;var SC=k4(sJd,'LinkedListMultimap',689);c3(41,25,fKd);_.jd=function Aq(a){Vib(this,a)};_.wc=function Bq(){return new ekb(this,16)};_.bd=function oq(a,b){throw x2(new V6('Add not supported on this list'))};_.nc=function pq(a){this.bd(this._b(),a);return true};_.Pb=function qq(){this.Jd(0,this._b())};_.Fb=function rq(a){return mq(this,a)};_.Hb=function sq(){return fdb(this)};_.dd=function tq(a){return nq(this,a)};_.tc=function uq(){return new m9(this)};_.ed=function vq(){return this.fd(0)};_.fd=function wq(a){return new s9(this,a)};_.gd=function xq(a){throw x2(new V6('Remove not supported on this list'))};_.Jd=function yq(a,b){var c,d;d=this.fd(a);for(c=a;c0||this.c.hc()};_.ic=function Bu(){if(!(this.d>0||this.c.hc())){throw x2(new djb)}if(this.d==0){this.b=kA(this.c.ic(),312);this.f=this.d=kA(this.b.a.lc(),13)._b()}--this.d;this.a=true;return this.b.a.kc()};_.jc=function Cu(){Ub(this.a,xJd);this.f==1?this.c.jc():Tt(this.e,this.b.a.kc(),1)>0;--this.f;this.a=false};_.a=false;_.d=0;_.f=0;var vD=k4(sJd,'Multisets/MultisetIteratorImpl',981);c3(667,1,FJd,Du);_.Kb=function Eu(a){return new ekb(gdb(kA(kA(a,300).a.lc(),13)._b(),kA(a,300).a.kc()),16)};var wD=k4(sJd,'Multisets/lambda$0$Type',667);c3(1684,1,lKd);_.Fb=function Fu(a){return this===a};_.Md=function Gu(){return new jfb(this)};var zD=k4(sJd,'Ordering',1684);c3(1565,1684,mKd,Ku);_.Ld=function Lu(a,b){return Ju(kA(a,34),kA(b,34))};_.Ib=function Mu(){return 'Ordering.natural()'};var Hu;var yD=k4(sJd,'NaturalOrdering',1565);c3(464,1,{138:1,464:1,3:1,56:1},Ru);_.Mb=function Su(a){return Qu(this,kA(a,34))};_.Nb=function Wu(a){return this.Mb(a)};_.Fb=function Uu(a){var b;if(sA(a,464)){b=kA(a,464);return yk(this.a,b.a)&&yk(this.b,b.b)}return false};_.Hb=function Vu(){return ob(this.a)*31+ob(this.b)};_.Ib=function Xu(){return Yu(this.a,this.b)};var AD=k4(sJd,'Range',464);c3(485,1675,$Jd,Zu);_.Cd=function $u(){return this.a};var BD=k4(sJd,'RegularImmutableList',485);c3(554,550,_Jd,bv);var _u;var CD=k4(sJd,'RegularImmutableSet',554);c3(729,1561,bKd,cv);var DD=k4(sJd,'RegularImmutableSortedSet',729);c3(543,1664,{543:1,3:1,20:1,13:1,196:1,19:1,60:1},lv);var FD=k4(sJd,'Sets/UnmodifiableNavigableSet',543);c3(1165,1675,$Jd,mv);_.Cd=function nv(){return this.a};var GD=k4(sJd,'SingletonImmutableList',1165);c3(326,1671,_Jd,ov);_.tc=function rv(){return Zn(),new xo(this.a)};_.pc=function pv(a){return kb(this.a,a)};_.Ad=function qv(){return Zn(),new xo(this.a)};_._b=function sv(){return 1};var HD=k4(sJd,'SingletonImmutableSet',326);c3(1415,1414,QJd,tv);_.Hc=function uv(){var a;return a=this.f,kA(kA(!a?(this.f=sA(this.c,122)?new Ih(this,kA(this.c,122)):sA(this.c,115)?new Ch(this,kA(this.c,115)):new eg(this,this.c)):a,115),122)};_.Xb=function xv(){var a;return a=this.i,kA(kA(!a?(this.i=sA(this.c,122)?new Ph(this,kA(this.c,122)):sA(this.c,115)?new Nh(this,kA(this.c,115)):new ph(this,this.c)):a,60),196)};_.Pc=function wv(a){a==null&&this.a.Ld(null,null);return new Cmb(this.b)};var JD=k4(sJd,'TreeMultimap',1415);c3(78,1,{3:1,78:1});_.Nd=function Nv(a){return new $wnd.Error(a)};_.Od=function Pv(){return this.g};_.Pd=function Qv(){var a,b,c;c=this.g==null?null:this.g.replace(new $wnd.RegExp('\n','g'),' ');b=(a=f4(this.ql),c==null?a:a+': '+c);Jv(this,Ov(this.Nd(b)));Cw(this)};_.Ib=function Rv(){return Kv(this,this.Od())};_.e=pKd;_.i=false;_.n=true;var VE=k4(kJd,'Throwable',78);c3(104,78,{3:1,104:1,78:1});var BE=k4(kJd,'Exception',104);c3(54,104,rKd,Sv,Tv);var OE=k4(kJd,'RuntimeException',54);c3(539,54,rKd);var HE=k4(kJd,'JsException',539);c3(760,539,rKd);var PD=k4(sKd,'JavaScriptExceptionBase',760);c3(435,760,{435:1,3:1,104:1,54:1,78:1},Xv);_.Od=function $v(){Wv(this);return this.c};_.Qd=function _v(){return yA(this.b)===yA(Uv)?null:this.b};var Uv;var MD=k4(uKd,'JavaScriptException',435);var ND=k4(uKd,'JavaScriptObject$',0);var dw;c3(1640,1,{});var OD=k4(uKd,'Scheduler',1640);var hw=0,iw=0,jw=-1;c3(787,1640,{},xw);var tw;var QD=k4(sKd,'SchedulerImpl',787);var Aw;c3(1653,1,{});var UD=k4(sKd,'StackTraceCreator/Collector',1653);c3(761,1653,{},Hw);_.Rd=function Iw(a){var b={},j;var c=[];a[wKd]=c;var d=arguments.callee.caller;while(d){var e=(Bw(),d.name||(d.name=Ew(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h=0?'+':'')+(c/60|0);b=(c<0?-c:c)%60<10?'0'+(c<0?-c:c)%60:''+(c<0?-c:c)%60;return (tfb(),rfb)[this.q.getDay()]+' '+sfb[this.q.getMonth()]+' '+Vx(this.q.getDate())+' '+Vx(this.q.getHours())+':'+Vx(this.q.getMinutes())+':'+Vx(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var PF=k4(tJd,'Date',181);c3(1622,181,aLd,Yx);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var bE=k4('com.google.gwt.i18n.shared.impl','DateRecord',1622);c3(1659,1,{});_.Vd=function Zx(){return null};_.Wd=function $x(){return null};_.Xd=function _x(){return null};_.Yd=function ay(){return null};_.Zd=function by(){return null};var kE=k4(bLd,'JSONValue',1659);c3(209,1659,{209:1},fy,gy);_.Fb=function hy(a){if(!sA(a,209)){return false}return aw(this.a,kA(a,209).a)};_.Ud=function iy(){return my};_.Hb=function jy(){return bw(this.a)};_.Vd=function ky(){return this};_.Ib=function ly(){var a,b,c;c=new O6('[');for(b=0,a=this.a.length;b0&&(c.a+=',',c);H6(c,cy(this,b))}c.a+=']';return c.a};var cE=k4(bLd,'JSONArray',209);c3(443,1659,{443:1},qy);_.Ud=function ry(){return uy};_.Wd=function sy(){return this};_.Ib=function ty(){return B3(),''+this.a};_.a=false;var ny,oy;var dE=k4(bLd,'JSONBoolean',443);c3(877,54,rKd,vy);var eE=k4(bLd,'JSONException',877);c3(913,1659,{},yy);_.Ud=function zy(){return By};_.Ib=function Ay(){return mJd};var wy;var fE=k4(bLd,'JSONNull',913);c3(259,1659,{259:1},Cy);_.Fb=function Dy(a){if(!sA(a,259)){return false}return this.a==kA(a,259).a};_.Ud=function Ey(){return Iy};_.Hb=function Fy(){return zA(Vpb(this.a))};_.Xd=function Gy(){return this};_.Ib=function Hy(){return this.a+''};_.a=0;var gE=k4(bLd,'JSONNumber',259);c3(191,1659,{191:1},Py,Qy);_.Fb=function Ry(a){if(!sA(a,191)){return false}return aw(this.a,kA(a,191).a)};_.Ud=function Sy(){return Wy};_.Hb=function Ty(){return bw(this.a)};_.Yd=function Uy(){return this};_.Ib=function Vy(){var a,b,c,d,e,f;f=new O6('{');a=true;e=Jy(this,tz(UE,cKd,2,0,6,1));for(c=0,d=e.length;c=0?':'+this.c:'')+')'};_.c=0;var QE=k4(kJd,'StackTraceElement',287);iA={3:1,476:1,34:1,2:1};var UE=k4(kJd,tKd,2);c3(100,381,{476:1},z6,A6,B6);var RE=k4(kJd,'StringBuffer',100);c3(98,381,{476:1},M6,N6,O6);var SE=k4(kJd,'StringBuilder',98);c3(763,79,kLd,P6);var TE=k4(kJd,'StringIndexOutOfBoundsException',763);c3(1722,1,{});var Q6,R6;c3(46,54,{3:1,104:1,54:1,78:1,46:1},U6,V6);var WE=k4(kJd,'UnsupportedOperationException',46);c3(216,210,{3:1,34:1,210:1,216:1},j7,k7);_.vd=function n7(a){return d7(this,kA(a,216))};_.$d=function o7(){return G3(i7(this))};_.Fb=function p7(a){var b;if(this===a){return true}if(sA(a,216)){b=kA(a,216);return this.e==b.e&&d7(this,b)==0}return false};_.Hb=function q7(){var a;if(this.b!=0){return this.b}if(this.a<54){a=E2(this.f);this.b=U2(z2(a,-1));this.b=33*this.b+U2(z2(P2(a,32),-1));this.b=17*this.b+zA(this.e);return this.b}this.b=17*E7(this.c)+zA(this.e);return this.b};_.Ib=function r7(){return i7(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var W6,X6,Y6,Z6,$6,_6,a7,b7;var XE=k4('java.math','BigDecimal',216);c3(89,210,{3:1,34:1,210:1,89:1},K7,L7,M7,N7,O7,P7);_.vd=function R7(a){return z7(this,kA(a,89))};_.$d=function S7(){return G3(j8(this,0))};_.Fb=function T7(a){return B7(this,a)};_.Hb=function V7(){return E7(this)};_.Ib=function X7(){return j8(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var s7,t7,u7,v7,w7,x7;var YE=k4('java.math','BigInteger',89);var e8,f8;var s8,t8;c3(441,1666,uJd);_.Pb=function O8(){L8(this)};_.Qb=function P8(a){return D8(this,a)};_.Rb=function Q8(a){return E8(this,a,this.e)||E8(this,a,this.d)};_.Tb=function R8(){return new X8(this)};_.Vb=function S8(a){return F8(this,a)};_.Zb=function T8(a,b){return I8(this,a,b)};_.$b=function U8(a){return K8(this,a)};_._b=function V8(){return M8(this)};var aF=k4(tJd,'AbstractHashMap',441);c3(242,IJd,JJd,X8);_.Pb=function Y8(){this.a.Pb()};_.pc=function Z8(a){return W8(this,a)};_.tc=function $8(){return new e9(this.a)};_.vc=function _8(a){var b;if(W8(this,a)){b=kA(a,38).kc();this.a.$b(b);return true}return false};_._b=function a9(){return this.a._b()};var _E=k4(tJd,'AbstractHashMap/EntrySet',242);c3(243,1,wJd,e9);_.gc=function f9(a){Bhb(this,a)};_.ic=function h9(){return c9(this)};_.hc=function g9(){return this.b};_.jc=function i9(){d9(this)};_.b=false;var $E=k4(tJd,'AbstractHashMap/EntrySetIterator',243);c3(433,1,wJd,m9);_.gc=function n9(a){Bhb(this,a)};_.hc=function o9(){return j9(this)};_.ic=function p9(){return k9(this)};_.jc=function q9(){l9(this)};_.b=0;_.c=-1;var bF=k4(tJd,'AbstractList/IteratorImpl',433);c3(94,433,NJd,s9);_.jc=function y9(){l9(this)};_.Bc=function t9(a){r9(this,a)};_.Cc=function u9(){return this.b>0};_.Dc=function v9(){return this.b};_.Ec=function w9(){return Lpb(this.b>0),this.a.cd(this.c=--this.b)};_.Fc=function x9(){return this.b-1};_.Gc=function z9(a){Rpb(this.c!=-1);this.a.hd(this.c,a)};var cF=k4(tJd,'AbstractList/ListIteratorImpl',94);c3(227,41,fKd,A9);_.bd=function B9(a,b){Ppb(a,this.b);this.c.bd(this.a+a,b);++this.b};_.cd=function C9(a){Mpb(a,this.b);return this.c.cd(this.a+a)};_.gd=function D9(a){var b;Mpb(a,this.b);b=this.c.gd(this.a+a);--this.b;return b};_.hd=function E9(a,b){Mpb(a,this.b);return this.c.hd(this.a+a,b)};_._b=function F9(){return this.b};_.a=0;_.b=0;var dF=k4(tJd,'AbstractList/SubList',227);c3(352,IJd,JJd,G9);_.Pb=function H9(){this.a.Pb()};_.pc=function I9(a){return this.a.Qb(a)};_.tc=function J9(){var a;return a=this.a.Tb().tc(),new M9(a)};_.vc=function K9(a){if(this.a.Qb(a)){this.a.$b(a);return true}return false};_._b=function L9(){return this.a._b()};var gF=k4(tJd,'AbstractMap/1',352);c3(542,1,wJd,M9);_.gc=function N9(a){Bhb(this,a)};_.hc=function O9(){return this.a.hc()};_.ic=function P9(){var a;return a=kA(this.a.ic(),38),a.kc()};_.jc=function Q9(){this.a.jc()};var fF=k4(tJd,'AbstractMap/1/1',542);c3(223,25,HJd,R9);_.Pb=function S9(){this.a.Pb()};_.pc=function T9(a){return this.a.Rb(a)};_.tc=function U9(){var a;return a=this.a.Tb().tc(),new W9(a)};_._b=function V9(){return this.a._b()};var iF=k4(tJd,'AbstractMap/2',223);c3(321,1,wJd,W9);_.gc=function X9(a){Bhb(this,a)};_.hc=function Y9(){return this.a.hc()};_.ic=function Z9(){var a;return a=kA(this.a.ic(),38),a.lc()};_.jc=function $9(){this.a.jc()};var hF=k4(tJd,'AbstractMap/2/1',321);c3(440,1,{440:1,38:1});_.Fb=function aab(a){var b;if(!sA(a,38)){return false}b=kA(a,38);return ejb(this.d,b.kc())&&ejb(this.e,b.lc())};_.kc=function bab(){return this.d};_.lc=function cab(){return this.e};_.Hb=function dab(){return fjb(this.d)^fjb(this.e)};_.mc=function eab(a){return _9(this,a)};_.Ib=function fab(){return this.d+'='+this.e};var jF=k4(tJd,'AbstractMap/AbstractEntry',440);c3(351,440,{440:1,351:1,38:1},gab);var kF=k4(tJd,'AbstractMap/SimpleEntry',351);c3(1672,1,yJd);_.Fb=function hab(a){var b;if(!sA(a,38)){return false}b=kA(a,38);return ejb(this.kc(),b.kc())&&ejb(this.lc(),b.lc())};_.Hb=function iab(){return fjb(this.kc())^fjb(this.lc())};_.Ib=function jab(){return this.kc()+'='+this.lc()};var lF=k4(tJd,PJd,1672);c3(1685,1666,KJd);_.Wc=function mab(a){return kab(this,a)};_.Qb=function nab(a){return lab(this,a)};_.Tb=function oab(){return new sab(this)};_.Vb=function pab(a){return Of(vlb(this,a))};_.Xb=function rab(){return new xab(this)};var qF=k4(tJd,'AbstractNavigableMap',1685);c3(668,IJd,JJd,sab);_.pc=function tab(a){return sA(a,38)&&kab(this.b,kA(a,38))};_.tc=function uab(){return new Tlb(this.b)};_.vc=function vab(a){var b;if(sA(a,38)){b=kA(a,38);return Flb(this.b,b)}return false};_._b=function wab(){return this.b.c};var nF=k4(tJd,'AbstractNavigableMap/EntrySet',668);c3(488,IJd,MJd,xab);_.wc=function Dab(){return new lkb(this)};_.Pb=function yab(){ulb(this.a)};_.pc=function zab(a){return lab(this.a,a)};_.tc=function Aab(){var a;return a=new Tlb((new Zlb(this.a)).b),new Eab(a)};_.vc=function Bab(a){if(lab(this.a,a)){Elb(this.a,a);return true}return false};_._b=function Cab(){return this.a.c};var pF=k4(tJd,'AbstractNavigableMap/NavigableKeySet',488);c3(489,1,wJd,Eab);_.gc=function Fab(a){Bhb(this,a)};_.hc=function Gab(){return j9(this.a.a)};_.ic=function Hab(){var a;return a=Rlb(this.a),a.kc()};_.jc=function Iab(){Slb(this.a)};var oF=k4(tJd,'AbstractNavigableMap/NavigableKeySet/1',489);c3(1693,25,HJd);_.nc=function Jab(a){return Spb(Djb(this,a)),true};_.oc=function Kab(a){Npb(a);Fpb(a!=this,"Can't add a queue to itself");return pg(this,a)};_.Pb=function Lab(){while(Ejb(this)!=null);};var rF=k4(tJd,'AbstractQueue',1693);c3(407,25,{4:1,20:1,25:1,13:1},$ab,_ab);_.nc=function abb(a){return Oab(this,a),true};_.Pb=function cbb(){Pab(this)};_.pc=function dbb(a){return Qab(new mbb(this),a)};_.Wb=function ebb(){return Tab(this)};_.tc=function fbb(){return new mbb(this)};_.vc=function gbb(a){return Vab(new mbb(this),a)};_._b=function hbb(){return this.c-this.b&this.a.length-1};_.wc=function ibb(){return new ekb(this,272)};_.zc=function jbb(a){var b,c;c=this.c-this.b&this.a.length-1;a.lengthc&&wz(a,c,null);return a};_.b=0;_.c=0;var vF=k4(tJd,'ArrayDeque',407);c3(408,1,wJd,mbb);_.gc=function nbb(a){Bhb(this,a)};_.hc=function obb(){return this.a!=this.b};_.ic=function pbb(){return kbb(this)};_.jc=function qbb(){lbb(this)};_.a=0;_.b=0;_.c=-1;var uF=k4(tJd,'ArrayDeque/IteratorImpl',408);c3(12,41,CLd,Gbb,Hbb,Ibb);_.bd=function Jbb(a,b){sbb(this,a,b)};_.nc=function Kbb(a){return tbb(this,a)};_.oc=function Lbb(a){return vbb(this,a)};_.Pb=function Mbb(){this.c=tz(NE,oJd,1,0,5,1)};_.pc=function Nbb(a){return ybb(this,a,0)!=-1};_.sc=function Obb(a){wbb(this,a)};_.cd=function Pbb(a){return xbb(this,a)};_.dd=function Qbb(a){return ybb(this,a,0)};_.Wb=function Rbb(){return this.c.length==0};_.tc=function Sbb(){return new ccb(this)};_.gd=function Tbb(a){return zbb(this,a)};_.vc=function Ubb(a){return Abb(this,a)};_.Jd=function Vbb(a,b){Bbb(this,a,b)};_.hd=function Wbb(a,b){return Cbb(this,a,b)};_._b=function Xbb(){return this.c.length};_.jd=function Ybb(a){Dbb(this,a)};_.yc=function Zbb(){return Ebb(this)};_.zc=function $bb(a){return Fbb(this,a)};var xF=k4(tJd,'ArrayList',12);c3(7,1,wJd,ccb);_.gc=function dcb(a){Bhb(this,a)};_.hc=function ecb(){return _bb(this)};_.ic=function fcb(){return acb(this)};_.jc=function gcb(){bcb(this)};_.a=0;_.b=-1;var wF=k4(tJd,'ArrayList/1',7);c3(155,41,DLd,Rcb);_.pc=function Scb(a){return nq(this,a)!=-1};_.sc=function Tcb(a){var b,c,d,e;Npb(a);for(c=this.a,d=0,e=c.length;d=0};_.qc=function Ljb(a){return sg(this.b,a)};_.tc=function Mjb(){return new neb(jdb(this.b).b.tc())};_.vc=function Njb(a){return Fjb(this,a)};_._b=function Ojb(){return this.b.c.length};_.wc=function Pjb(){return new ekb(this,256)};_.yc=function Qjb(){return Ebb(this.b)};_.zc=function Rjb(a){return Fbb(this.b,a)};var wG=k4(tJd,'PriorityQueue',453);c3(214,1,{214:1},akb,bkb);_.a=0;_.b=0;var Sjb,Tjb,Ujb=0;var xG=k4(tJd,'Random',214);c3(39,1,SJd,ekb,fkb,gkb);_.qd=function hkb(){return this.a};_.rd=function ikb(){ckb(this);return this.c};_.gc=function jkb(a){ckb(this);this.d.gc(a)};_.sd=function kkb(a){return dkb(this,a)};_.a=0;_.c=0;var IG=k4(tJd,'Spliterators/IteratorSpliterator',39);c3(382,39,SJd,lkb);var zG=k4(tJd,'SortedSet/1',382);c3(625,1,{},nkb);_.ie=function okb(a){this.a.td(a)};var AG=k4(tJd,'Spliterator/OfDouble/0methodref$accept$Type',625);c3(626,1,{},pkb);_.ie=function qkb(a){this.a.td(a)};var BG=k4(tJd,'Spliterator/OfDouble/1methodref$accept$Type',626);c3(642,1,SJd);_.gc=function wkb(a){mkb(this,a)};_.qd=function ukb(){return this.d};_.rd=function vkb(){return this.e};_.d=0;_.e=0;var GG=k4(tJd,'Spliterators/BaseSpliterator',642);c3(929,642,SJd);_.gc=function ykb(a){sA(a,273)?rkb(this,kA(a,273)):rkb(this,new pkb(a))};_.sd=function zkb(a){return sA(a,273)?Cob(this,kA(a,273)):Cob(this,new nkb(a))};var CG=k4(tJd,'Spliterators/AbstractDoubleSpliterator',929);c3(446,642,SJd);var DG=k4(tJd,'Spliterators/AbstractSpliterator',446);c3(790,1,SJd);_.gc=function Fkb(a){mkb(this,a)};_.qd=function Dkb(){return this.b};_.rd=function Ekb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var FG=k4(tJd,'Spliterators/BaseArraySpliterator',790);c3(791,790,SJd,Hkb);_.gc=function Ikb(a){Bkb(this,a)};_.sd=function Jkb(a){return Ckb(this,a)};var EG=k4(tJd,'Spliterators/ArraySpliterator',791);c3(789,1,wJd,Lkb);_.gc=function Nkb(a){sA(a,273)?xjb(this,kA(a,273)):xjb(this,new yjb(a))};_.ic=function Pkb(){return Kkb(this)};_.jc=function Qkb(){Chb()};_.ie=function Mkb(a){this.b=a};_.hc=function Okb(){return this.a||(this.a=Cob(this.c,this)),this.a};_.a=false;_.b=0;var HG=k4(tJd,'Spliterators/DoubleConsumerIterator',789);c3(523,41,PLd,Ukb);_.bd=function Vkb(a,b){Ykb(a,this.a.c.length+1);sbb(this.a,a,b)};_.nc=function Wkb(a){return tbb(this.a,a)};_.oc=function Xkb(a){return vbb(this.a,a)};_.Pb=function Zkb(){this.a.c=tz(NE,oJd,1,0,5,1)};_.pc=function $kb(a){return ybb(this.a,a,0)!=-1};_.qc=function _kb(a){return sg(this.a,a)};_.sc=function alb(a){wbb(this.a,a)};_.cd=function blb(a){return Ykb(a,this.a.c.length),xbb(this.a,a)};_.dd=function clb(a){return ybb(this.a,a,0)};_.Wb=function dlb(){return this.a.c.length==0};_.tc=function elb(){return new ccb(this.a)};_.gd=function flb(a){return Ykb(a,this.a.c.length),zbb(this.a,a)};_.Jd=function glb(a,b){Bbb(this.a,a,b)};_.hd=function hlb(a,b){return Ykb(a,this.a.c.length),Cbb(this.a,a,b)};_._b=function ilb(){return this.a.c.length};_.jd=function jlb(a){Dbb(this.a,a)};_.kd=function klb(a,b){return new A9(this.a,a,b)};_.yc=function llb(){return Ebb(this.a)};_.zc=function mlb(a){return Fbb(this.a,a)};_.Ib=function nlb(){return vg(this.a)};var VG=k4(tJd,'Vector',523);c3(596,523,PLd,qlb);var JG=k4(tJd,'Stack',596);c3(254,1,{},slb);_.Ib=function tlb(){return !this.a?this.c:this.e.length==0?this.a.a:this.a.a+(''+this.e)};var KG=k4(tJd,'StringJoiner',254);c3(487,1685,{3:1,109:1,122:1,115:1},Klb,Llb);_.Pb=function Mlb(){ulb(this)};_.Tb=function Nlb(){return new Zlb(this)};_.Zb=function Olb(a,b){return Dlb(this,a,b)};_.$b=function Plb(a){return Elb(this,a)};_._b=function Qlb(){return this.c};_.c=0;var TG=k4(tJd,'TreeMap',487);c3(397,1,wJd,Tlb);_.gc=function Vlb(a){Bhb(this,a)};_.ic=function Xlb(){return Rlb(this)};_.hc=function Wlb(){return j9(this.a)};_.jc=function Ylb(){Slb(this)};var LG=k4(tJd,'TreeMap/EntryIterator',397);c3(449,668,JJd,Zlb);_.Pb=function $lb(){ulb(this.a)};var MG=k4(tJd,'TreeMap/EntrySet',449);c3(398,351,{440:1,351:1,38:1,398:1},_lb);_.b=false;var NG=k4(tJd,'TreeMap/Node',398);c3(560,1,{},amb);_.Ib=function bmb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var OG=k4(tJd,'TreeMap/State',560);c3(278,23,QLd,hmb);_.je=function imb(){return false};_.ke=function jmb(){return false};var cmb,dmb,emb,fmb;var SG=l4(tJd,'TreeMap/SubMapType',278,zE,lmb,kmb);c3(982,278,QLd,mmb);_.ke=function nmb(){return true};var PG=l4(tJd,'TreeMap/SubMapType/1',982,SG,null,null);c3(983,278,QLd,omb);_.je=function pmb(){return true};_.ke=function qmb(){return true};var QG=l4(tJd,'TreeMap/SubMapType/2',983,SG,null,null);c3(984,278,QLd,rmb);_.je=function smb(){return true};var RG=l4(tJd,'TreeMap/SubMapType/3',984,SG,null,null);var tmb;c3(212,IJd,{3:1,20:1,25:1,13:1,196:1,19:1,60:1,212:1},Bmb,Cmb);_.wc=function Jmb(){return new lkb(this)};_.nc=function Dmb(a){return vmb(this,a)};_.Pb=function Emb(){ulb(this.a)};_.pc=function Fmb(a){return lab(this.a,a)};_.tc=function Gmb(){var a;return a=new Tlb((new Zlb((new xab(this.a)).a)).b),new Eab(a)};_.vc=function Hmb(a){return Amb(this,a)};_._b=function Imb(){return this.a.c};var UG=k4(tJd,'TreeSet',212);c3(845,1,{},Lmb);_.le=function Mmb(a,b){return Kmb(this.a,a,b)};var WG=k4(RLd,'BinaryOperator/lambda$0$Type',845);c3(846,1,{},Nmb);_.le=function Omb(a,b){return U4(kA(a,21).a,kA(b,21).a)<=0?a:b};var XG=k4(RLd,'BinaryOperator/lambda$1$Type',846);c3(843,1,FJd,Pmb);_.Kb=function Qmb(a){return a};var YG=k4(RLd,'Function/lambda$0$Type',843);c3(627,1,SLd,Rmb);_.Nb=function Smb(a){return !this.a.Nb(a)};var ZG=k4(RLd,'Predicate/lambda$0$Type',627);c3(150,23,{3:1,34:1,23:1,150:1},Zmb);var Vmb,Wmb,Xmb;var $G=l4(TLd,'Collector/Characteristics',150,zE,_mb,$mb);var anb;c3(684,1,{},cnb,dnb);var _G=k4(TLd,'Collector/CollectorImpl',684);c3(1053,1,FJd,onb);_.Kb=function pnb(a){return B3(),_vb(a)?true:false};var aH=k4(TLd,'Collectors/12methodref$test$Type',1053);c3(365,1,{},qnb);_.Kd=function rnb(a,b){kA(a,13).nc(b)};var bH=k4(TLd,'Collectors/20methodref$add$Type',365);c3(367,1,{},snb);_.ne=function tnb(){return new Gbb};var cH=k4(TLd,'Collectors/21methodref$ctor$Type',367);c3(331,1,{},unb);_.ne=function vnb(){return new Jgb};var dH=k4(TLd,'Collectors/23methodref$ctor$Type',331);c3(332,1,{},wnb);_.Kd=function xnb(a,b){Ggb(kA(a,67),b)};var eH=k4(TLd,'Collectors/24methodref$add$Type',332);c3(1050,1,{},ynb);_.le=function znb(a,b){return enb(kA(a,15),kA(b,13))};var fH=k4(TLd,'Collectors/4methodref$addAll$Type',1050);c3(683,1,{},Bnb);_.le=function Cnb(a,b){return Anb(a,b)};var gH=k4(TLd,'Collectors/lambda$1$Type',683);c3(1055,1,{},Dnb);_.ne=function Enb(){return xz(pz(NE,1),oJd,1,5,[this.a])};var hH=k4(TLd,'Collectors/lambda$10$Type',1055);c3(1056,1,{},Fnb);_.Kd=function Gnb(a,b){gnb(this.a,a)};var iH=k4(TLd,'Collectors/lambda$11$Type',1056);c3(1057,1,{},Hnb);_.le=function Inb(a,b){return hnb(this.a,a,b)};var jH=k4(TLd,'Collectors/lambda$12$Type',1057);c3(1058,1,FJd,Jnb);_.Kb=function Knb(a){return lA(a)[0]};var kH=k4(TLd,'Collectors/lambda$13$Type',1058);c3(366,1,{},Lnb);_.le=function Mnb(a,b){return kA(a,13).oc(kA(b,13)),kA(a,13)};var lH=k4(TLd,'Collectors/lambda$21$Type',366);c3(333,1,{},Nnb);_.le=function Onb(a,b){return pg(kA(a,67),kA(b,67)),kA(a,67)};var mH=k4(TLd,'Collectors/lambda$25$Type',333);c3(334,1,FJd,Pnb);_.Kb=function Qnb(a){return kA(a,67)};var nH=k4(TLd,'Collectors/lambda$26$Type',334);c3(1049,1,{},Rnb);_.Kd=function Snb(a,b){inb(this.a,a,b)};var oH=k4(TLd,'Collectors/lambda$3$Type',1049);c3(1051,1,{},Tnb);_.le=function Unb(a,b){return knb(kA(a,109),kA(b,109),new ynb)};var pH=k4(TLd,'Collectors/lambda$4$Type',1051);c3(1052,1,FJd,Vnb);_.Kb=function Wnb(a){return jnb(this.a,a)};var qH=k4(TLd,'Collectors/lambda$5$Type',1052);c3(1054,1,{},Xnb);_.ne=function Ynb(){var a;return a=new Jhb,Ghb(a,(B3(),B3(),false),new Gbb),Ghb(a,(null,true),new Gbb),a};var rH=k4(TLd,'Collectors/lambda$8$Type',1054);c3(645,1,{});_.d=false;var PH=k4(TLd,'TerminatableStream',645);c3(1416,645,{607:1,1701:1},iob);var tH=k4(TLd,'DoubleStream/DoubleStreamSource',1416);c3(1417,1,{},job);_.ie=function kob(a){ufb(this.a,a)};var sH=k4(TLd,'DoubleStream/DoubleStreamSource/lambda$2$Type',1417);var NH=m4(TLd,'Stream');c3(940,446,SJd,oob);_.sd=function pob(a){while(mob(this)){if(this.a.sd(a)){return true}else{this.a=null}}return false};var vH=k4(TLd,'Stream/2',940);c3(941,1,{},qob);_.td=function rob(a){nob(this.a,a)};var uH=k4(TLd,'Stream/2/lambda$0$Type',941);c3(942,1,ULd,sob);_.fe=function tob(){Znb(this.a)};var wH=k4(TLd,'Stream/3methodref$close$Type',942);c3(943,1,ULd,uob);_.fe=function vob(){Znb(this.a)};var xH=k4(TLd,'Stream/4methodref$close$Type',943);c3(644,446,SJd,xob);_.sd=function yob(a){this.b=false;while(!this.b&&this.c.sd(new zob(this,a)));return this.b};_.b=false;var zH=k4(TLd,'Stream/FilterSpliterator',644);c3(932,1,{},zob);_.td=function Aob(a){wob(this.a,this.b,a)};var yH=k4(TLd,'Stream/FilterSpliterator/lambda$0$Type',932);c3(930,929,SJd,Dob);var BH=k4(TLd,'Stream/MapToDoubleSpliterator',930);c3(646,1,{},Eob);_.td=function Fob(a){Bob(this.a,this.b,a)};var AH=k4(TLd,'Stream/MapToDoubleSpliterator/lambda$0$Type',646);c3(643,446,SJd,Iob);_.sd=function Job(a){return Hob(this,a)};var DH=k4(TLd,'Stream/MapToObjSpliterator',643);c3(931,1,{},Kob);_.td=function Lob(a){Gob(this.a,this.b,a)};var CH=k4(TLd,'Stream/MapToObjSpliterator/lambda$0$Type',931);c3(45,645,{607:1,1701:1,1700:1},Zob);var LH=k4(TLd,'Stream/StreamSource',45);c3(936,446,SJd,cpb);_.sd=function dpb(a){while(apb(this)){if(this.a.sd(a)){return true}else{Znb(this.b);this.b=null;this.a=null}}return false};var FH=k4(TLd,'Stream/StreamSource/1',936);c3(937,1,{},epb);_.td=function fpb(a){bpb(this.a,a)};var EH=k4(TLd,'Stream/StreamSource/1/lambda$0$Type',937);c3(938,446,SJd,gpb);_.sd=function hpb(a){var b;if(!this.a){b=new Gbb;this.b.a.gc(new ipb(b));bdb();Dbb(b,this.c);this.a=new ekb(b,16)}return dkb(this.a,a)};_.a=null;var HH=k4(TLd,'Stream/StreamSource/5',938);c3(939,1,{},ipb);_.td=function jpb(a){tbb(this.a,a)};var GH=k4(TLd,'Stream/StreamSource/5/2methodref$add$Type',939);c3(933,1,{},kpb);_.td=function lpb(a){};var IH=k4(TLd,'Stream/StreamSource/lambda$0$Type',933);c3(934,1,{},mpb);_.le=function npb(a,b){return $ob(this.a,a,b)};var JH=k4(TLd,'Stream/StreamSource/lambda$3$Type',934);c3(935,1,{},opb);_.td=function ppb(a){_ob(this.b,this.a,a)};var KH=k4(TLd,'Stream/StreamSource/lambda$4$Type',935);c3(553,1,{},rpb);_.td=function spb(a){qpb(this,a)};var MH=k4(TLd,'Stream/ValueConsumer',553);c3(944,1,{},tpb);_.td=function upb(a){dob(this.a,a)};var OH=k4(TLd,'TerminatableStream/lambda$0$Type',944);var aqb=0;var cqb,dqb=0,eqb;c3(1480,1,{},kqb);var RH=k4(YLd,'Scanline',1480);var QH=m4(YLd,ZLd);c3(1450,1,{},nqb);var SH=k4($Ld,'CGraph',1450);c3(309,1,{309:1},pqb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=pLd;var UH=k4($Ld,'CGroup',309);c3(723,1,{},tqb);var TH=k4($Ld,'CGroup/CGroupBuilder',723);c3(57,1,{57:1},uqb);_.Ib=function vqb(){if(this.j){return pA(this.j.Kb(this))}return d4(WH),WH.o+'@'+(bqb(this)>>>0).toString(16)};_.f=0;_.i=pLd;var WH=k4($Ld,'CNode',57);c3(722,1,{},Aqb);var VH=k4($Ld,'CNode/CNodeBuilder',722);var Fqb;c3(1236,1,{},Hqb);_.se=function Iqb(a,b){return 0};_.te=function Jqb(a,b){return 0};var XH=k4($Ld,aMd,1236);c3(1505,1,{},Kqb);_.pe=function Lqb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oLd;for(d=new ccb(a.a.b);d.ad.d.c||d.d.c==f.d.c&&d.d.b=0?'b'+a+'['+fxb(this.a)+']':'b['+fxb(this.a)+']'}return 'b_'+bqb(this)};var iJ=k4(dNd,'FBendpoint',497);c3(262,131,{3:1,262:1,93:1,131:1},gxb);_.Ib=function hxb(){return fxb(this)};var jJ=k4(dNd,'FEdge',262);c3(202,131,{3:1,202:1,93:1,131:1},kxb);var kJ=k4(dNd,'FGraph',202);c3(454,329,{3:1,454:1,329:1,93:1,131:1},mxb);_.Ib=function nxb(){return this.b==null||this.b.length==0?'l['+fxb(this.a)+']':'l_'+this.b};var lJ=k4(dNd,'FLabel',454);c3(146,329,{3:1,146:1,329:1,93:1,131:1},pxb);_.Ib=function qxb(){return oxb(this)};_.b=0;var mJ=k4(dNd,'FNode',146);c3(1691,1,{});_.Ee=function vxb(a){rxb(this,a)};_.Fe=function wxb(){sxb(this)};_.d=0;var oJ=k4(fNd,'AbstractForceModel',1691);c3(568,1691,{568:1},xxb);_.De=function zxb(a,b){var c,d,e,f,g;uxb(this.f,a,b);e=Gyc(xyc(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-Ayc(a.e)/2-Ayc(b.e)/2);c=jxb(this.e,a,b);c>0?(f=-yxb(d,this.c)*c):(f=Cxb(d,this.b)*kA(nub(a,(qyb(),iyb)),21).a);Dyc(e,f/g);return e};_.Ee=function Axb(a){rxb(this,a);this.a=kA(nub(a,(qyb(),dyb)),21).a;this.c=Vpb(nA(nub(a,oyb)));this.b=Vpb(nA(nub(a,kyb)))};_.Ge=function Bxb(a){return a0&&(f-=Exb(d,this.a)*c);Dyc(e,f*this.b/g);return e};_.Ee=function Gxb(a){var b,c,d,e,f,g,h;rxb(this,a);this.b=Vpb(nA(nub(a,(qyb(),pyb))));this.c=this.b/kA(nub(a,dyb),21).a;d=a.e.c.length;f=0;e=0;for(h=new ccb(a.e);h.a0};_.a=0;_.b=0;_.c=0;var qJ=k4(fNd,'FruchtermanReingoldModel',569);c3(748,1,uMd,Txb);_.ue=function Uxb(a){qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,hNd),''),'Force Model'),'Determines the model for force calculation.'),Mxb),(Uxc(),Oxc)),sJ),fgb((Gxc(),Exc)))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,iNd),''),'Iterations'),'The number of iterations on the force model.'),d5(300)),Qxc),GE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,jNd),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),d5(0)),Qxc),GE),fgb(Bxc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,kNd),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),lNd),Nxc),yE),fgb(Exc))));lwc(a,kNd,hNd,Rxb);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,mNd),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),Nxc),yE),fgb(Exc))));lwc(a,mNd,hNd,Oxb);ryb((new syb,a))};var Kxb,Lxb,Mxb,Nxb,Oxb,Pxb,Qxb,Rxb;var rJ=k4(nNd,'ForceMetaDataProvider',748);c3(387,23,{3:1,34:1,23:1,387:1},Yxb);var Vxb,Wxb;var sJ=l4(nNd,'ForceModelStrategy',387,zE,$xb,Zxb);var _xb;c3(880,1,uMd,syb);_.ue=function tyb(a){ryb(a)};var byb,cyb,dyb,eyb,fyb,gyb,hyb,iyb,jyb,kyb,lyb,myb,nyb,oyb,pyb;var uJ=k4(nNd,'ForceOptions',880);c3(881,1,{},uyb);_.Be=function vyb(){var a;return a=new Zwb,a};_.Ce=function wyb(a){};var tJ=k4(nNd,'ForceOptions/ForceFactory',881);var xyb,yyb,zyb,Ayb;c3(749,1,uMd,Jyb);_.ue=function Kyb(a){qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,BNd),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(B3(),B3(),false)),(Uxc(),Mxc)),tE),fgb((Gxc(),Dxc)))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,CNd),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),Nxc),yE),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Bxc])))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,DNd),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),Eyb),Oxc),zJ),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,ENd),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),lNd),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,FNd),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),d5(jJd)),Qxc),GE),fgb(Exc))));Syb((new Tyb,a))};var Cyb,Dyb,Eyb,Fyb,Gyb,Hyb;var vJ=k4(nNd,'StressMetaDataProvider',749);c3(884,1,uMd,Tyb);_.ue=function Uyb(a){Syb(a)};var Lyb,Myb,Nyb,Oyb,Pyb,Qyb;var xJ=k4(nNd,'StressOptions',884);c3(885,1,{},Vyb);_.Be=function Wyb(){var a;return a=new Yyb,a};_.Ce=function Xyb(a){};var wJ=k4(nNd,'StressOptions/StressFactory',885);c3(959,244,GMd,Yyb);_.Ae=function Zyb(a,b){var c,d,e,f;xEc(b,HNd,1);Vpb(mA(AOc(a,(Ryb(),Pyb))))||Wwb(new Zwb,a,BEc(b,1));d=Twb(a);c=Lwb(this.a,d);for(f=c.tc();f.hc();){e=kA(f.ic(),202);ezb(this.b,e);czb(this.b)}d=Kwb(c);Swb(d);zEc(b)};var yJ=k4(INd,'StressLayoutProvider',959);c3(882,1,{},fzb);_.c=0;_.e=0;_.g=0;var BJ=k4(INd,'StressMajorization',882);c3(348,23,{3:1,34:1,23:1,348:1},lzb);var hzb,izb,jzb;var zJ=l4(INd,'StressMajorization/Dimension',348,zE,nzb,mzb);var ozb;c3(883,1,lKd,qzb);_.Fb=function szb(a){return this===a};_.Md=function tzb(){return new jfb(this)};_.Ld=function rzb(a,b){return gzb(this.a,a,b)};var AJ=k4(INd,'StressMajorization/lambda$0$Type',883);c3(985,1,{},Bzb);var EJ=k4(KNd,'ElkLayered',985);c3(986,1,{},Dzb);_.td=function Ezb(a){Czb(this.a,a)};var CJ=k4(KNd,'ElkLayered/lambda$0$Type',986);c3(987,1,{},Fzb);_.td=function Gzb(a){qub(kA(a,31),(J6b(),Q4b),(g1b(),d1b))};var DJ=k4(KNd,'ElkLayered/lambda$1$Type',987);c3(1033,1,{},Nzb);var Hzb,Izb,Jzb;var FJ=k4(KNd,'GraphConfigurator',1033);c3(958,244,GMd,Pzb);_.Ae=function Qzb(a,b){var c;c=xIb(new EIb,a);yA(AOc(a,(J6b(),h5b)))===yA((jCc(),gCc))?vzb(this.a,c,b):wzb(this.a,c,b);YIb(new aJb,c)};var GJ=k4(KNd,'LayeredLayoutProvider',958);c3(328,23,{3:1,34:1,23:1,328:1},Xzb);var Rzb,Szb,Tzb,Uzb,Vzb;var HJ=l4(KNd,'LayeredPhases',328,zE,Zzb,Yzb);var $zb;c3(1407,1,{},gAb);_.i=0;var aAb;var KJ=k4(LNd,'ComponentsToCGraphTransformer',1407);var LAb;c3(1408,1,{},hAb);_.He=function iAb(a,b){return $wnd.Math.min(a.a!=null?Vpb(a.a):a.c.i,b.a!=null?Vpb(b.a):b.c.i)};_.Ie=function jAb(a,b){return $wnd.Math.min(a.a!=null?Vpb(a.a):a.c.i,b.a!=null?Vpb(b.a):b.c.i)};var IJ=k4(LNd,'ComponentsToCGraphTransformer/1',1408);c3(80,1,{80:1});_.i=0;_.k=true;_.o=pLd;var QJ=k4(MNd,'CNode',80);c3(282,80,{282:1,80:1},kAb,lAb);_.Ib=function mAb(){return ''};var JJ=k4(LNd,'ComponentsToCGraphTransformer/CRectNode',282);c3(1391,1,{},zAb);var nAb,oAb;var NJ=k4(LNd,'OneDimensionalComponentsCompaction',1391);c3(1392,1,VJd,AAb);_.Fb=function CAb(a){return this===a};_.Kb=function BAb(a){return pAb(),B3(),kA(kA(a,48).a,80).d.e!=0?true:false};var LJ=k4(LNd,'OneDimensionalComponentsCompaction/lambda$0$Type',1392);c3(1393,1,VJd,DAb);_.Fb=function FAb(a){return this===a};_.Kb=function EAb(a){return pAb(),B3(),iBb(kA(kA(a,48).a,80).j,kA(kA(a,48).b,110))||kA(kA(a,48).a,80).d.e!=0&&iBb(kA(kA(a,48).a,80).j,kA(kA(a,48).b,110))?true:false};var MJ=k4(LNd,'OneDimensionalComponentsCompaction/lambda$1$Type',1393);c3(1410,1,{},HAb);var OJ=k4(MNd,'CGraph',1410);c3(172,1,{172:1},KAb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=pLd;var PJ=k4(MNd,'CGroup',172);c3(1409,1,{},NAb);_.He=function OAb(a,b){return $wnd.Math.max(a.a!=null?Vpb(a.a):a.c.i,b.a!=null?Vpb(b.a):b.c.i)};_.Ie=function PAb(a,b){return $wnd.Math.max(a.a!=null?Vpb(a.a):a.c.i,b.a!=null?Vpb(b.a):b.c.i)};var RJ=k4(MNd,aMd,1409);c3(1411,1,{},eBb);_.d=false;var QAb;var TJ=k4(MNd,fMd,1411);c3(1412,1,VJd,fBb);_.Fb=function hBb(a){return this===a};_.Kb=function gBb(a){return RAb(),B3(),kA(kA(a,48).a,80).d.e!=0?true:false};var SJ=k4(MNd,gMd,1412);c3(726,1,{},kBb);_.a=false;_.b=false;_.c=false;_.d=false;var UJ=k4(MNd,hMd,726);c3(1521,1,{},qBb);var ZJ=k4(NNd,iMd,1521);var jK=m4(ONd,ZLd);c3(1522,1,{341:1},uBb);_.Ne=function vBb(a){sBb(this,kA(a,524))};var WJ=k4(NNd,jMd,1522);c3(1523,1,lKd,wBb);_.Fb=function yBb(a){return this===a};_.Md=function zBb(){return new jfb(this)};_.Ld=function xBb(a,b){return C4(kA(a,282).g.c+kA(a,282).g.b/2,kA(b,282).g.c+kA(b,282).g.b/2)};var VJ=k4(NNd,kMd,1523);c3(524,1,{524:1},ABb);_.a=false;var XJ=k4(NNd,lMd,524);c3(1524,1,lKd,BBb);_.Fb=function DBb(a){return this===a};_.Md=function EBb(){return new jfb(this)};_.Ld=function CBb(a,b){return rBb(a,b)};var YJ=k4(NNd,mMd,1524);c3(102,1,{102:1},FBb,GBb);_.Fb=function HBb(a){var b;if(a==null){return false}if(_J!=mb(a)){return false}b=kA(a,102);return ejb(this.c,b.c)&&ejb(this.d,b.d)};_.Hb=function IBb(){return xcb(xz(pz(NE,1),oJd,1,5,[this.c,this.d]))};_.Ib=function JBb(){return '('+this.c+qJd+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var _J=k4(ONd,'Point',102);c3(373,23,{3:1,34:1,23:1,373:1},RBb);var KBb,LBb,MBb,NBb;var $J=l4(ONd,'Point/Quadrant',373,zE,VBb,UBb);var WBb;c3(1398,1,{},dCb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var YBb,ZBb,$Bb,_Bb,aCb;var iK=k4(ONd,'RectilinearConvexHull',1398);c3(516,1,{341:1},kCb);_.Ne=function lCb(a){jCb(this,kA(a,102))};_.b=0;var hCb;var bK=k4(ONd,'RectilinearConvexHull/MaximalElementsEventHandler',516);c3(1400,1,lKd,mCb);_.Fb=function oCb(a){return this===a};_.Md=function pCb(){return new jfb(this)};_.Ld=function nCb(a,b){return iCb(),C4(Vpb(nA(a)),Vpb(nA(b)))};var aK=k4(ONd,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1400);c3(1399,1,{341:1},rCb);_.Ne=function sCb(a){qCb(this,kA(a,102))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var cK=k4(ONd,'RectilinearConvexHull/RectangleEventHandler',1399);c3(1401,1,lKd,tCb);_.Fb=function vCb(a){return this===a};_.Md=function wCb(){return new jfb(this)};_.Ld=function uCb(a,b){return bCb(),kA(a,102).c==kA(b,102).c?C4(kA(b,102).d,kA(a,102).d):C4(kA(a,102).c,kA(b,102).c)};var dK=k4(ONd,'RectilinearConvexHull/lambda$0$Type',1401);c3(1402,1,lKd,xCb);_.Fb=function zCb(a){return this===a};_.Md=function ACb(){return new jfb(this)};_.Ld=function yCb(a,b){return bCb(),kA(a,102).c==kA(b,102).c?C4(kA(a,102).d,kA(b,102).d):C4(kA(a,102).c,kA(b,102).c)};var eK=k4(ONd,'RectilinearConvexHull/lambda$1$Type',1402);c3(1403,1,lKd,BCb);_.Fb=function DCb(a){return this===a};_.Md=function ECb(){return new jfb(this)};_.Ld=function CCb(a,b){return bCb(),kA(a,102).c==kA(b,102).c?C4(kA(b,102).d,kA(a,102).d):C4(kA(b,102).c,kA(a,102).c)};var fK=k4(ONd,'RectilinearConvexHull/lambda$2$Type',1403);c3(1404,1,lKd,FCb);_.Fb=function HCb(a){return this===a};_.Md=function ICb(){return new jfb(this)};_.Ld=function GCb(a,b){return bCb(),kA(a,102).c==kA(b,102).c?C4(kA(a,102).d,kA(b,102).d):C4(kA(b,102).c,kA(a,102).c)};var gK=k4(ONd,'RectilinearConvexHull/lambda$3$Type',1404);c3(1405,1,lKd,JCb);_.Fb=function LCb(a){return this===a};_.Md=function MCb(){return new jfb(this)};_.Ld=function KCb(a,b){return fCb(a,b)};var hK=k4(ONd,'RectilinearConvexHull/lambda$4$Type',1405);c3(1406,1,{},OCb);var kK=k4(ONd,'Scanline',1406);c3(1694,1,{});var lK=k4(PNd,'AbstractGraphPlacer',1694);c3(458,1,{458:1},ZCb);var UCb;var nK=k4(PNd,'ComponentGroup',458);c3(1076,1694,{},dDb);_.Oe=function eDb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c=tz(NE,oJd,1,0,5,1);b.a.c=tz(NE,oJd,1,0,5,1);if(a.Wb()){b.e.a=0;b.e.b=0;return}g=kA(a.cd(0),31);lub(b,g);for(e=a.tc();e.hc();){d=kA(e.ic(),31);$Cb(this,d)}o=new Hyc;f=Vpb(nA(nub(g,(J6b(),j6b))));for(j=new ccb(this.a);j.an){v=0;w+=m+e;m=0}q=g.c;SCb(g,v+q.a,w+q.b);Cyc(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.e.a=c;b.e.b=w+m;if(Vpb(mA(nub(f,L4b)))){d=new qDb;gDb(d,a,e);for(l=a.tc();l.hc();){k=kA(l.ic(),31);vyc(Cyc(k.c),d.e)}vyc(Cyc(b.e),d.a)}RCb(b,a)};var yK=k4(PNd,'SimpleRowGraphPlacer',1074);c3(1075,1,lKd,TDb);_.Ld=function UDb(a,b){return SDb(kA(a,31),kA(b,31))};_.Fb=function VDb(a){return this===a};_.Md=function WDb(){return new jfb(this)};var xK=k4(PNd,'SimpleRowGraphPlacer/1',1075);var XDb;c3(1032,1,nMd,bEb);_.Mb=function cEb(a){var b;return b=kA(nub(kA(a,234).b,(J6b(),p5b)),74),!!b&&b.b!=0};_.Fb=function dEb(a){return this===a};_.Nb=function eEb(a){return this.Mb(a)};var zK=k4(RNd,'CompoundGraphPostprocessor/1',1032);c3(1031,1,TNd,tEb);_.Pe=function uEb(a,b){nEb(this,kA(a,31),b)};var BK=k4(RNd,'CompoundGraphPreprocessor',1031);c3(400,1,{400:1},vEb);_.c=false;var AK=k4(RNd,'CompoundGraphPreprocessor/ExternalPort',400);c3(234,1,{234:1},yEb);_.Ib=function zEb(){return Ss(this.c)+':'+OEb(this.b)};var DK=k4(RNd,'CrossHierarchyEdge',234);c3(687,1,lKd,BEb);_.Ld=function CEb(a,b){return AEb(this,kA(a,234),kA(b,234))};_.Fb=function DEb(a){return this===a};_.Md=function FEb(){return new jfb(this)};var CK=k4(RNd,'CrossHierarchyEdgeComparator',687);c3(279,131,{3:1,279:1,93:1,131:1});_.o=0;var MK=k4(UNd,'LGraphElement',279);c3(14,279,{3:1,14:1,279:1,93:1,131:1},PEb);_.Ib=function QEb(){return OEb(this)};var EK=k4(UNd,'LEdge',14);c3(31,279,{3:1,20:1,31:1,279:1,93:1,131:1},SEb);_.sc=function TEb(a){i5(this,a)};_.tc=function UEb(){return new ccb(this.b)};_.Ib=function VEb(){if(this.b.c.length==0){return 'G-unlayered'+vg(this.a)}else if(this.a.c.length==0){return 'G-layered'+vg(this.b)}return 'G[layerless'+vg(this.a)+', layers'+vg(this.b)+']'};var NK=k4(UNd,'LGraph',31);c3(591,1,{});_.Qe=function WEb(){return this.e.k};_.xe=function XEb(a){return nub(this.e,a)};_.Re=function YEb(){return this.e.n};_.Se=function ZEb(){return this.e.o};_.ye=function $Eb(a){return oub(this.e,a)};_.Te=function _Eb(a){this.e.k.a=a.a;this.e.k.b=a.b};_.Ue=function aFb(a){this.e.n.a=a.a;this.e.n.b=a.b};_.Ve=function bFb(a){this.e.o=a};var FK=k4(UNd,'LGraphAdapters/AbstractLShapeAdapter',591);c3(520,1,{741:1},cFb);_.We=function dFb(){var a,b;if(!this.b){this.b=Tr(this.a.b.c.length);for(b=new ccb(this.a.b);b.a0&&jGb(b.charCodeAt(c-1),YNd)){--c}if(g '+this.a+' '+Ss(this.c)};_.a=0;_.b=0;_.d=0;var tN=k4(cOd,'SplineSelfLoopRouter/LoopPadding',188);c3(1294,1,nMd,LTb);_.Mb=function MTb(a){return KTb(this,kA(a,188))};_.Fb=function NTb(a){return this===a};_.Nb=function OTb(a){return this.Mb(a)};_.a=0;_.c=0;var qN=k4(cOd,'SplineSelfLoopRouter/LoopPadding/EnclosingPredicate',1294);c3(1293,1,lKd,QTb);_.Ld=function RTb(a,b){return PTb(kA(a,188),kA(b,188))};_.Fb=function STb(a){return this===a};_.Md=function TTb(){return new jfb(this)};var rN=k4(cOd,'SplineSelfLoopRouter/LoopPadding/MarginComparator',1293);c3(415,1,nMd,UTb);_.Mb=function VTb(a){return kA(a,188).c==this.a};_.Fb=function WTb(a){return this===a};_.Nb=function XTb(a){return this.Mb(a)};var sN=k4(cOd,'SplineSelfLoopRouter/LoopPadding/PortSidePredicate',415);c3(414,1,{414:1},YTb);_.c=0;_.d=0;_.e=0;var vN=k4(cOd,'SplineSelfLoopRouter/SelfLoopEdge',414);c3(1292,1,lKd,$Tb);_.Ld=function _Tb(a,b){return ZTb(kA(a,414),kA(b,414))};_.Fb=function aUb(a){return this===a};_.Md=function bUb(){return new jfb(this)};var uN=k4(cOd,'SplineSelfLoopRouter/SelfLoopEdge/StepSizeComparator',1292);c3(1451,715,{},kUb);_.qe=function lUb(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Gbb;Sob(Pob(new Zob(null,new ekb(this.c.a.b,16)),new iVb),new kVb(this,b));orb(this,new mVb);wbb(b,new sUb);b.c=tz(NE,oJd,1,0,5,1);Sob(Pob(new Zob(null,new ekb(this.c.a.b,16)),new uUb),new wUb(b));orb(this,new yUb);wbb(b,new CUb);b.c=tz(NE,oJd,1,0,5,1);c=rjb(hob(Uob(new Zob(null,new ekb(this.c.a.b,16)),new EUb(this))),new GUb);Sob(new Zob(null,new ekb(this.c.a.a,16)),new IUb(c,b));orb(this,new KUb);wbb(b,new OUb);b.c=tz(NE,oJd,1,0,5,1);break;case 3:d=new Gbb;orb(this,new mUb);e=rjb(hob(Uob(new Zob(null,new ekb(this.c.a.b,16)),new qUb(this))),new QUb);Sob(Pob(new Zob(null,new ekb(this.c.a.b,16)),new $Ub),new aVb(e,d));orb(this,new cVb);wbb(d,new gVb);d.c=tz(NE,oJd,1,0,5,1);break;default:throw x2(new Muc);}};_.b=0;var VN=k4(oOd,'EdgeAwareScanlineConstraintCalculation',1451);c3(1452,1,nMd,mUb);_.Fb=function oUb(a){return this===a};_.Nb=function pUb(a){return this.Mb(a)};_.Mb=function nUb(a){return sA(kA(a,57).g,153)};var xN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1452);c3(1453,1,{},qUb);_.oe=function rUb(a){return eUb(this.a,a)};var yN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1453);c3(1464,1,{},sUb);_.td=function tUb(a){kA(a,340).fe()};var zN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1464);c3(1465,1,SLd,uUb);_.Nb=function vUb(a){return sA(kA(a,57).g,8)};var AN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1465);c3(1467,1,{},wUb);_.td=function xUb(a){fUb(this.a,a)};var BN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1467);c3(1468,1,nMd,yUb);_.Fb=function AUb(a){return this===a};_.Nb=function BUb(a){return this.Mb(a)};_.Mb=function zUb(a){return sA(kA(a,57).g,8)};var CN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1468);c3(1469,1,{},CUb);_.td=function DUb(a){kA(a,340).fe()};var DN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1469);c3(1470,1,{},EUb);_.oe=function FUb(a){return gUb(this.a,a)};var EN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1470);c3(1471,1,{},GUb);_.me=function HUb(){return 0};var FN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1471);c3(1473,1,{},IUb);_.td=function JUb(a){hUb(this.a,this.b,a)};_.a=0;var GN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1473);c3(1474,1,nMd,KUb);_.Fb=function MUb(a){return this===a};_.Nb=function NUb(a){return this.Mb(a)};_.Mb=function LUb(a){return true};var HN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1474);c3(1475,1,{},OUb);_.td=function PUb(a){kA(a,340).fe()};var IN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1475);c3(1454,1,{},QUb);_.me=function RUb(){return 0};var JN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1454);c3(1456,1,ULd,SUb);_.fe=function TUb(){dUb(this.b,this.a,-1)};_.a=0;var KN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1456);c3(1461,1,ULd,UUb);_.fe=function VUb(){dUb(this.a,this.b,-1)};_.b=0;var LN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1461);c3(1466,1,ULd,WUb);_.fe=function XUb(){dUb(this.b,this.a,-1)};_.a=0;var MN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1466);c3(1472,1,ULd,YUb);_.fe=function ZUb(){cUb(this.a,this.b,-1)};_.b=0;var NN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1472);c3(1455,1,SLd,$Ub);_.Nb=function _Ub(a){return sA(kA(a,57).g,8)};var ON=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1455);c3(1457,1,{},aVb);_.td=function bVb(a){iUb(this.a,this.b,a)};_.a=0;var PN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1457);c3(1458,1,nMd,cVb);_.Fb=function eVb(a){return this===a};_.Nb=function fVb(a){return this.Mb(a)};_.Mb=function dVb(a){return true};var QN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1458);c3(1459,1,{},gVb);_.td=function hVb(a){kA(a,340).fe()};var RN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1459);c3(1460,1,SLd,iVb);_.Nb=function jVb(a){return sA(kA(a,57).g,153)};var SN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1460);c3(1462,1,{},kVb);_.td=function lVb(a){jUb(this.a,this.b,a)};var TN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1462);c3(1463,1,nMd,mVb);_.Fb=function oVb(a){return this===a};_.Nb=function pVb(a){return this.Mb(a)};_.Mb=function nVb(a){return sA(kA(a,57).g,153)};var UN=k4(oOd,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1463);c3(1232,1,TNd,tVb);_.Pe=function yVb(a,b){sVb(this,kA(a,31),b)};var qVb;var ZN=k4(oOd,'HorizontalGraphCompactor',1232);c3(1233,1,{},zVb);_.se=function AVb(a,b){var c,d,e;if(yA(nub(this.a.a,(J6b(),a5b)))===yA((DBc(),BBc))){if(sA(a.g,153)&&sA(b.g,8)||sA(b.g,153)&&sA(a.g,8)){return Vpb(mA(nub(this.a.a,e5b)))?0:10}}if(wVb(a,b)){return 0}c=uVb(a);d=uVb(b);if(!!c&&c.j==(RGb(),MGb)||!!d&&d.j==(RGb(),MGb)){return 0}e=kA(nub(this.a.a,(E2b(),v2b)),266);return h8b(e,c?c.j:(RGb(),OGb),d?d.j:(RGb(),OGb))};_.te=function BVb(a,b){var c,d,e;if(wVb(a,b)){return 1}c=uVb(a);d=uVb(b);e=kA(nub(this.a.a,(E2b(),v2b)),266);return k8b(e,c?c.j:(RGb(),OGb),d?d.j:(RGb(),OGb))};var WN=k4(oOd,'HorizontalGraphCompactor/1',1233);c3(1234,1,{},CVb);_.re=function DVb(a,b){return rVb(),a.a.i==0};var XN=k4(oOd,'HorizontalGraphCompactor/lambda$0$Type',1234);c3(1235,1,{},EVb);_.re=function FVb(a,b){return xVb(this.a,a,b)};var YN=k4(oOd,'HorizontalGraphCompactor/lambda$1$Type',1235);c3(1422,1,{},ZVb);var GVb,HVb;var xO=k4(oOd,'LGraphToCGraphTransformer',1422);c3(1430,1,SLd,cWb);_.Nb=function dWb(a){return a!=null};var $N=k4(oOd,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1430);c3(1423,1,FJd,eWb);_.Kb=function fWb(a){return IVb(),f3(nub(kA(kA(a,57).g,8),(E2b(),i2b)))};var _N=k4(oOd,'LGraphToCGraphTransformer/lambda$0$Type',1423);c3(1424,1,FJd,gWb);_.Kb=function hWb(a){return IVb(),eXb(kA(kA(a,57).g,153))};var aO=k4(oOd,'LGraphToCGraphTransformer/lambda$1$Type',1424);c3(1435,1,SLd,iWb);_.Nb=function jWb(a){return IVb(),sA(kA(a,57).g,153)};var bO=k4(oOd,'LGraphToCGraphTransformer/lambda$10$Type',1435);c3(1439,1,{},kWb);_.td=function lWb(a){var b,c;IVb();b=a.d.c-a.e.c;c=kA(a.g,153);wbb(c.b,new GWb(b));wbb(c.c,new IWb(b));i5(c.i,new KWb(b))};var cO=k4(oOd,'LGraphToCGraphTransformer/lambda$11$Type',1439);c3(1440,1,FJd,mWb);_.Kb=function nWb(a){return IVb(),new Zob(null,new fkb(kl(zGb(kA(a,8)))))};var dO=k4(oOd,'LGraphToCGraphTransformer/lambda$12$Type',1440);c3(1441,1,SLd,oWb);_.Nb=function pWb(a){return IVb(),JEb(kA(a,14))};var eO=k4(oOd,'LGraphToCGraphTransformer/lambda$13$Type',1441);c3(1442,1,{},qWb);_.td=function rWb(a){RVb(this.a,a)};var fO=k4(oOd,'LGraphToCGraphTransformer/lambda$14$Type',1442);c3(1443,1,FJd,sWb);_.Kb=function tWb(a){return IVb(),new Zob(null,new ekb(kA(a,26).a,16))};var gO=k4(oOd,'LGraphToCGraphTransformer/lambda$15$Type',1443);c3(1444,1,FJd,uWb);_.Kb=function vWb(a){return IVb(),new Zob(null,new fkb(kl(zGb(kA(a,8)))))};var hO=k4(oOd,'LGraphToCGraphTransformer/lambda$16$Type',1444);c3(1445,1,FJd,wWb);_.Kb=function xWb(a){return IVb(),kA(nub(kA(a,14),(E2b(),z2b)),15)};var iO=k4(oOd,'LGraphToCGraphTransformer/lambda$17$Type',1445);c3(1446,1,SLd,yWb);_.Nb=function zWb(a){return IVb(),!!kA(a,15)&&!kA(a,15).Wb()};var jO=k4(oOd,'LGraphToCGraphTransformer/lambda$18$Type',1446);c3(1447,1,{},AWb);_.td=function BWb(a){KVb(this.a,kA(a,15))};var kO=k4(oOd,'LGraphToCGraphTransformer/lambda$19$Type',1447);c3(1426,1,{},CWb);_.td=function DWb(a){SVb(this.a,a)};var lO=k4(oOd,'LGraphToCGraphTransformer/lambda$2$Type',1426);c3(1425,1,{},EWb);_.td=function FWb(a){TVb(this.a,this.b,a)};var mO=k4(oOd,'LGraphToCGraphTransformer/lambda$20$Type',1425);c3(1436,1,{},GWb);_.td=function HWb(a){$Vb(this.a,a)};_.a=0;var nO=k4(oOd,'LGraphToCGraphTransformer/lambda$21$Type',1436);c3(1437,1,{},IWb);_.td=function JWb(a){_Vb(this.a,a)};_.a=0;var oO=k4(oOd,'LGraphToCGraphTransformer/lambda$22$Type',1437);c3(1438,1,{},KWb);_.td=function LWb(a){aWb(this.a,a)};_.a=0;var pO=k4(oOd,'LGraphToCGraphTransformer/lambda$23$Type',1438);c3(1427,1,FJd,MWb);_.Kb=function NWb(a){return IVb(),new Zob(null,new ekb(kA(a,26).a,16))};var qO=k4(oOd,'LGraphToCGraphTransformer/lambda$3$Type',1427);c3(1428,1,FJd,OWb);_.Kb=function PWb(a){return IVb(),new Zob(null,new fkb(kl(zGb(kA(a,8)))))};var rO=k4(oOd,'LGraphToCGraphTransformer/lambda$4$Type',1428);c3(1429,1,FJd,QWb);_.Kb=function RWb(a){return IVb(),kA(nub(kA(a,14),(E2b(),z2b)),15)};var sO=k4(oOd,'LGraphToCGraphTransformer/lambda$5$Type',1429);c3(1431,1,{},SWb);_.td=function TWb(a){bWb(this.a,a)};var tO=k4(oOd,'LGraphToCGraphTransformer/lambda$6$Type',1431);c3(1432,1,{},UWb);_.td=function VWb(a){UVb(this.a,this.b,a)};var uO=k4(oOd,'LGraphToCGraphTransformer/lambda$7$Type',1432);c3(1433,1,SLd,WWb);_.Nb=function XWb(a){return IVb(),sA(kA(a,57).g,8)};var vO=k4(oOd,'LGraphToCGraphTransformer/lambda$8$Type',1433);c3(1434,1,{},YWb);_.td=function ZWb(a){var b;IVb();b=kA(a.g,8);b.k.a=a.d.c+b.d.b};var wO=k4(oOd,'LGraphToCGraphTransformer/lambda$9$Type',1434);c3(1421,1,{},bXb);_.pe=function cXb(a){var b,c,d,e,f;this.a=a;this.d=new NZb;this.c=tz(aP,oJd,113,this.a.a.a.c.length,0,1);this.b=0;for(c=new ccb(this.a.a.a);c.ae-g?0:e-g;m<=x5(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new Gbb;s=pLd;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=ZYb(b,new iZb)),Vpb(b.g))}else{while(k=p){tbb(f,d5(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.tf=function tZb(){return false};var VO=k4(sOd,'MSDCutIndexHeuristic',714);c3(1279,1,TNd,yZb);_.Pe=function zZb(a,b){vZb(kA(a,31),b)};var WO=k4(sOd,'SingleEdgeGraphWrapper',1279);c3(189,1,{189:1},BZb);_.Ib=function CZb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var YO=k4(tOd,'NEdge',189);c3(162,1,{},IZb);var XO=k4(tOd,'NEdge/NEdgeBuilder',162);c3(592,1,{},NZb);var ZO=k4(tOd,'NGraph',592);c3(113,1,{113:1},PZb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var aP=k4(tOd,'NNode',113);c3(717,1,ELd,SZb);_.sc=function ZZb(a){i5(this,a)};_.uc=function e$b(){return this.xc()};_.jd=function j$b(a){Vib(this,a)};_.wc=function k$b(){return new ekb(this,16)};_.xc=function l$b(){return new Zob(null,this.wc())};_.bd=function TZb(a,b){++this.b;sbb(this.a,a,b)};_.nc=function UZb(a){return QZb(this,a)};_.oc=function VZb(a){++this.b;return vbb(this.a,a)};_.Pb=function WZb(){++this.b;this.a.c=tz(NE,oJd,1,0,5,1)};_.pc=function XZb(a){return ybb(this.a,a,0)!=-1};_.qc=function YZb(a){return sg(this.a,a)};_.cd=function $Zb(a){return xbb(this.a,a)};_.dd=function _Zb(a){return ybb(this.a,a,0)};_.Wb=function a$b(){return this.a.c.length==0};_.tc=function b$b(){return po(new ccb(this.a))};_.ed=function c$b(){throw x2(new U6)};_.fd=function d$b(a){throw x2(new U6)};_.gd=function f$b(a){++this.b;return zbb(this.a,a)};_.vc=function g$b(a){return RZb(this,a)};_.hd=function h$b(a,b){++this.b;return Cbb(this.a,a,b)};_._b=function i$b(){return this.a.c.length};_.kd=function m$b(a,b){return new A9(this.a,a,b)};_.yc=function n$b(){return Ebb(this.a)};_.zc=function o$b(a){return Fbb(this.a,a)};_.b=0;var $O=k4(tOd,'NNode/ChangeAwareArrayList',717);c3(251,1,{},r$b);var _O=k4(tOd,'NNode/NNodeBuilder',251);c3(1482,1,{},M$b);_.a=false;_.f=jJd;_.j=0;var bP=k4(tOd,'NetworkSimplex',1482);c3(276,23,{3:1,34:1,23:1,276:1},U$b);var O$b,P$b,Q$b,R$b,S$b;var cP=l4(uOd,'CenterEdgeLabelPlacementStrategy',276,zE,W$b,V$b);var X$b;c3(386,23,{3:1,34:1,23:1,386:1},a_b);var Z$b,$$b;var dP=l4(uOd,'ConstraintCalculationStrategy',386,zE,c_b,b_b);var d_b;c3(290,23,{3:1,34:1,23:1,290:1},m_b);var f_b,g_b,h_b,i_b,j_b,k_b;var eP=l4(uOd,'ContentAlignment',290,zE,o_b,n_b);var p_b;c3(317,23,{3:1,34:1,23:1,317:1,285:1,286:1},v_b);_.hf=function x_b(){return u_b(this)};_.uf=function w_b(){return u_b(this)};var r_b,s_b;var fP=l4(uOd,'CrossingMinimizationStrategy',317,zE,z_b,y_b);var A_b;c3(319,23,{3:1,34:1,23:1,319:1},G_b);var C_b,D_b,E_b;var gP=l4(uOd,'CuttingStrategy',319,zE,I_b,H_b);var J_b;c3(384,23,{3:1,34:1,23:1,384:1,285:1,286:1},Q_b);_.hf=function S_b(){return P_b(this)};_.uf=function R_b(){return P_b(this)};var L_b,M_b,N_b;var hP=l4(uOd,'CycleBreakingStrategy',384,zE,U_b,T_b);var V_b;c3(406,23,{3:1,34:1,23:1,406:1},__b);var X_b,Y_b,Z_b;var iP=l4(uOd,'EdgeConstraint',406,zE,b0b,a0b);var c0b;c3(241,23,{3:1,34:1,23:1,241:1},m0b);var e0b,f0b,g0b,h0b,i0b,j0b;var jP=l4(uOd,'EdgeLabelSideSelection',241,zE,o0b,n0b);var p0b;c3(255,23,{3:1,34:1,23:1,255:1},y0b);var r0b,s0b,t0b,u0b,v0b,w0b;var kP=l4(uOd,'FixedAlignment',255,zE,A0b,z0b);var B0b;c3(256,23,{3:1,34:1,23:1,256:1},K0b);var D0b,E0b,F0b,G0b,H0b,I0b;var lP=l4(uOd,'GraphCompactionStrategy',256,zE,M0b,L0b);var N0b;c3(233,23,{3:1,34:1,23:1,233:1},$0b);var P0b,Q0b,R0b,S0b,T0b,U0b,V0b,W0b,X0b,Y0b;var mP=l4(uOd,'GraphProperties',233,zE,a1b,_0b);var b1b;c3(318,23,{3:1,34:1,23:1,318:1},h1b);var d1b,e1b,f1b;var nP=l4(uOd,'GreedySwitchType',318,zE,j1b,i1b);var k1b;c3(280,23,{3:1,34:1,23:1,280:1},q1b);var m1b,n1b,o1b;var oP=l4(uOd,'InLayerConstraint',280,zE,s1b,r1b);var t1b;c3(383,23,{3:1,34:1,23:1,383:1},y1b);var v1b,w1b;var pP=l4(uOd,'InteractiveReferencePoint',383,zE,A1b,z1b);var B1b;var D1b,E1b,F1b,G1b,H1b,I1b,J1b,K1b,L1b,M1b,N1b,O1b,P1b,Q1b,R1b,S1b,T1b,U1b,V1b,W1b,X1b,Y1b,Z1b,$1b,_1b,a2b,b2b,c2b,d2b,e2b,f2b,g2b,h2b,i2b,j2b,k2b,l2b,m2b,n2b,o2b,p2b,q2b,r2b,s2b,t2b,u2b,v2b,w2b,x2b,y2b,z2b,A2b,B2b,C2b,D2b;c3(178,23,{3:1,34:1,23:1,178:1},L2b);var F2b,G2b,H2b,I2b,J2b;var qP=l4(uOd,'LayerConstraint',178,zE,N2b,M2b);var O2b;c3(747,1,uMd,G4b);_.ue=function H4b(a){qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,EOd),''),'Content Alignment'),'Specifies how the content of compound nodes is to be aligned, e.g. top-left.'),W2b),(Uxc(),Pxc)),eP),fgb((Gxc(),Exc))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.contentAlignment']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,FOd),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(B3(),B3(),false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.feedBackEdges']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,GOd),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),u3b),Oxc),pP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.interactiveReferencePoint']))));lwc(a,GOd,MOd,w3b);lwc(a,GOd,VOd,v3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,HOd),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.mergeEdges']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,IOd),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),(null,true)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.mergeHierarchyEdges']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,JOd),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),d5(7)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.thoroughness']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,KOd),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.unnecessaryBendpoints']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,LOd),''),'North or South Port'),'Specifies that this port can either be placed on the north side of a node or on the south side (if port constraints permit)'),(null,false)),Mxc),tE),fgb(Fxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.northOrSouthPort']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,MOd),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),d3b),Oxc),hP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.cycleBreaking']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,NOd),GPd),'Node Layering Strategy'),'Strategy for node layering.'),J3b),Oxc),uP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.nodeLayering']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,OOd),GPd),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),A3b),Oxc),qP),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.layerConstraint']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,POd),GPd),'Wide Nodes on Multiple Layers'),'Strategy to distribute wide nodes over multiple layers.'),L3b),Oxc),CP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.wideNodesOnMultipleLayers']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,QOd),HPd),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),d5(4)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.minWidthUpperBoundOnWidth']))));lwc(a,QOd,NOd,C3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,ROd),HPd),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),d5(2)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.minWidthUpperLayerEstimationScalingFactor']))));lwc(a,ROd,NOd,E3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,SOd),IPd),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),H3b),Oxc),xP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.nodePromotion']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,TOd),IPd),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),d5(0)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.nodePromotionBoundary']))));lwc(a,TOd,SOd,null);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,UOd),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),d5(jJd)),Qxc),GE),fgb(Exc))));lwc(a,UOd,NOd,y3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,VOd),JPd),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),b3b),Oxc),fP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.crossMin']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,WOd),JPd),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,XOd),JPd),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),(null,false)),Mxc),tE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,YOd),KPd),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),d5(40)),Qxc),GE),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,ZOd),KPd),'Greedy Switch Crossing Minimization'),'Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular layer sweep as a post-processor.'),Z2b),Oxc),nP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.greedySwitch']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,$Od),LPd),'Node Placement Strategy'),'Strategy for node placement.'),b4b),Oxc),wP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.nodePlace']))));qwc(a,new ixc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,_Od),LPd),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),Mxc),tE),fgb(Exc))));lwc(a,_Od,$Od,V3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,aPd),MPd),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),P3b),Oxc),wR),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.nodeplace.compactionStrategy']))));lwc(a,aPd,$Od,Q3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,bPd),MPd),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),S3b),Oxc),kP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.fixedAlignment']))));lwc(a,bPd,$Od,T3b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,cPd),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),Nxc),yE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.linearSegmentsDeflectionDampening']))));lwc(a,cPd,$Od,X3b);qwc(a,new ixc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,dPd),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),Oxc),vP),fgb(Dxc))));lwc(a,dPd,$Od,_3b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,ePd),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),$3b),Oxc),vP),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,fPd),NPd),'Spline Self-Loop Placement'),null),j3b),Oxc),zP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.splines.selfLoopPlacement']))));lwc(a,fPd,OPd,k3b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,gPd),NPd),'Sloppy Spline Routing'),'Use less spline control points at the start and end of an edge. Might lead to crossings edge/node overlap.'),(null,true)),Mxc),tE),fgb(Exc))));lwc(a,gPd,OPd,o3b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,hPd),NPd),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.4),Nxc),yE),fgb(Exc))));lwc(a,hPd,OPd,m3b);lwc(a,hPd,gPd,(null,true));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,iPd),PPd),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,jPd),PPd),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,kPd),PPd),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,lPd),QPd),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),d5(0)),Qxc),GE),fgb(Bxc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,mPd),QPd),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),d5(0)),Qxc),GE),fgb(Bxc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,nPd),QPd),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),d5(0)),Qxc),GE),fgb(Bxc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,oPd),'compaction'),IMd),'Tries to further compact components (disconnected sub-graphs).'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.components.compact']))));lwc(a,oPd,uNd,(null,true));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,pPd),RPd),'Post Compaction Strategy'),SPd),U2b),Oxc),lP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.postCompaction']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,qPd),RPd),'Post Compaction Constraint Calculation'),SPd),S2b),Oxc),dP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.postCompaction.constraints']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,rPd),TPd),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.highDegreeNode.treatment']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,sPd),TPd),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),d5(16)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.highDegreeNode.threshold']))));lwc(a,sPd,rPd,(null,true));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,tPd),TPd),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),d5(5)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.highDegreeNode.treeHeight']))));lwc(a,tPd,rPd,(null,true));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,uPd),UPd),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),E4b),Oxc),DP),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,vPd),UPd),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,wPd),UPd),'Correction factor for the wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simplay multiplied with the 'aspect ratio' layout option."),1),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,xPd),VPd),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),t4b),Oxc),gP),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,yPd),VPd),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Rxc),mG),fgb(Exc))));lwc(a,yPd,xPd,o4b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,zPd),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),q4b),Qxc),GE),fgb(Exc))));lwc(a,zPd,xPd,r4b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,APd),'wrapping.singleEdge.validify'),'Path-Like Validify Strategy'),'When wrapping path-like graphs, the graph must not be split between any pair of layers. The validify strategy makes sure every computed split point is allowed.'),B4b),Oxc),BP),fgb(Exc))));lwc(a,APd,uPd,C4b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,BPd),WPd),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),(null,true)),Mxc),tE),fgb(Exc))));lwc(a,BPd,uPd,x4b);qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,CPd),WPd),'Distance Penalty When Improving Cuts'),null),2),Nxc),yE),fgb(Exc))));lwc(a,CPd,uPd,v4b);lwc(a,CPd,BPd,(null,true));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,DPd),WPd),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),(null,true)),Mxc),tE),fgb(Exc))));lwc(a,DPd,uPd,z4b);qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,EPd),XPd),'Edge Label Side Selection'),'Method to decide on edge label sides.'),h3b),Oxc),jP),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.klay.layered.edgeLabelSideSelection']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,FPd),XPd),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),f3b),Oxc),cP),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Cxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.edgeLabelPlacementStrategy']))));K6b((new L6b,a))};var Q2b,R2b,S2b,T2b,U2b,V2b,W2b,X2b,Y2b,Z2b,$2b,_2b,a3b,b3b,c3b,d3b,e3b,f3b,g3b,h3b,i3b,j3b,k3b,l3b,m3b,n3b,o3b,p3b,q3b,r3b,s3b,t3b,u3b,v3b,w3b,x3b,y3b,z3b,A3b,B3b,C3b,D3b,E3b,F3b,G3b,H3b,I3b,J3b,K3b,L3b,M3b,N3b,O3b,P3b,Q3b,R3b,S3b,T3b,U3b,V3b,W3b,X3b,Y3b,Z3b,$3b,_3b,a4b,b4b,c4b,d4b,e4b,f4b,g4b,h4b,i4b,j4b,k4b,l4b,m4b,n4b,o4b,p4b,q4b,r4b,s4b,t4b,u4b,v4b,w4b,x4b,y4b,z4b,A4b,B4b,C4b,D4b,E4b;var rP=k4(uOd,'LayeredMetaDataProvider',747);c3(878,1,uMd,L6b);_.ue=function M6b(a){K6b(a)};var I4b,J4b,K4b,L4b,M4b,N4b,O4b,P4b,Q4b,R4b,S4b,T4b,U4b,V4b,W4b,X4b,Y4b,Z4b,$4b,_4b,a5b,b5b,c5b,d5b,e5b,f5b,g5b,h5b,i5b,j5b,k5b,l5b,m5b,n5b,o5b,p5b,q5b,r5b,s5b,t5b,u5b,v5b,w5b,x5b,y5b,z5b,A5b,B5b,C5b,D5b,E5b,F5b,G5b,H5b,I5b,J5b,K5b,L5b,M5b,N5b,O5b,P5b,Q5b,R5b,S5b,T5b,U5b,V5b,W5b,X5b,Y5b,Z5b,$5b,_5b,a6b,b6b,c6b,d6b,e6b,f6b,g6b,h6b,i6b,j6b,k6b,l6b,m6b,n6b,o6b,p6b,q6b,r6b,s6b,t6b,u6b,v6b,w6b,x6b,y6b,z6b,A6b,B6b,C6b,D6b,E6b,F6b,G6b,H6b,I6b;var tP=k4(uOd,'LayeredOptions',878);c3(879,1,{},N6b);_.Be=function O6b(){var a;return a=new Pzb,a};_.Ce=function P6b(a){};var sP=k4(uOd,'LayeredOptions/LayeredFactory',879);c3(291,23,{3:1,34:1,23:1,291:1,285:1,286:1},Y6b);_.hf=function $6b(){return X6b(this)};_.uf=function Z6b(){return X6b(this)};var Q6b,R6b,S6b,T6b,U6b,V6b;var uP=l4(uOd,'LayeringStrategy',291,zE,a7b,_6b);var b7b;c3(179,23,{3:1,34:1,23:1,179:1},j7b);var d7b,e7b,f7b,g7b;var vP=l4(uOd,'NodeFlexibility',179,zE,m7b,l7b);var n7b;c3(292,23,{3:1,34:1,23:1,292:1,285:1,286:1},w7b);_.hf=function y7b(){return v7b(this)};_.uf=function x7b(){return v7b(this)};var p7b,q7b,r7b,s7b,t7b;var wP=l4(uOd,'NodePlacementStrategy',292,zE,A7b,z7b);var B7b;c3(240,23,{3:1,34:1,23:1,240:1},M7b);var D7b,E7b,F7b,G7b,H7b,I7b,J7b,K7b;var xP=l4(uOd,'NodePromotionStrategy',240,zE,O7b,N7b);var P7b;c3(410,23,{3:1,34:1,23:1,410:1},V7b);var R7b,S7b,T7b;var yP=l4(uOd,'PortType',410,zE,X7b,W7b);var Y7b;c3(345,23,{3:1,34:1,23:1,345:1},c8b);var $7b,_7b,a8b;var zP=l4(uOd,'SelfLoopPlacement',345,zE,e8b,d8b);var f8b;c3(266,1,{266:1},r8b);var AP=k4(uOd,'Spacings',266);c3(347,23,{3:1,34:1,23:1,347:1},x8b);var t8b,u8b,v8b;var BP=l4(uOd,'ValidifyStrategy',347,zE,z8b,y8b);var A8b;c3(385,23,{3:1,34:1,23:1,385:1},G8b);var C8b,D8b,E8b;var CP=l4(uOd,'WideNodesStrategy',385,zE,I8b,H8b);var J8b;c3(346,23,{3:1,34:1,23:1,346:1},P8b);var L8b,M8b,N8b;var DP=l4(uOd,'WrappingStrategy',346,zE,R8b,Q8b);var S8b;c3(1296,1,NQd,Y8b);_.vf=function Z8b(a){return kA(a,31),U8b};_.Pe=function $8b(a,b){X8b(this,kA(a,31),b)};var U8b;var EP=k4(OQd,'DepthFirstCycleBreaker',1296);c3(1295,1,NQd,d9b);_.vf=function e9b(a){return kA(a,31),_8b};_.Pe=function f9b(a,b){b9b(this,kA(a,31),b)};var _8b;var FP=k4(OQd,'GreedyCycleBreaker',1295);c3(1297,1,NQd,k9b);_.vf=function l9b(a){return kA(a,31),g9b};_.Pe=function m9b(a,b){j9b(this,kA(a,31),b)};var g9b;var GP=k4(OQd,'InteractiveCycleBreaker',1297);c3(1300,1,NQd,w9b);_.vf=function x9b(a){return kA(a,31),n9b};_.Pe=function y9b(a,b){u9b(this,kA(a,31),b)};var n9b;var JP=k4(PQd,'CoffmanGrahamLayerer',1300);c3(1301,1,lKd,z9b);_.Fb=function B9b(a){return this===a};_.Md=function C9b(){return new jfb(this)};_.Ld=function A9b(a,b){return q9b(this.a,kA(a,8),kA(b,8))};var HP=k4(PQd,'CoffmanGrahamLayerer/lambda$0$Type',1301);c3(1302,1,lKd,D9b);_.Fb=function F9b(a){return this===a};_.Md=function G9b(){return new jfb(this)};_.Ld=function E9b(a,b){return t9b(this.a,a,b)};var IP=k4(PQd,'CoffmanGrahamLayerer/lambda$1$Type',1302);c3(1303,1,NQd,J9b);_.vf=function K9b(a){return kA(a,31),tvc(tvc(new yvc,(Wzb(),Rzb),(lPb(),GOb)),Tzb,OOb)};_.Pe=function L9b(a,b){I9b(this,kA(a,31),b)};var LP=k4(PQd,'InteractiveLayerer',1303);c3(511,1,{511:1},M9b);_.a=0;_.c=0;var KP=k4(PQd,'InteractiveLayerer/LayerSpan',511);c3(1299,1,NQd,V9b);_.vf=function W9b(a){return R9b(kA(a,31))};_.Pe=function X9b(a,b){S9b(this,kA(a,31),b)};var N9b,O9b,P9b;var MP=k4(PQd,'LongestPathLayerer',1299);c3(1306,1,NQd,eac);_.vf=function fac(a){return kA(a,31),tvc(tvc(new yvc,(Wzb(),Rzb),(lPb(),sOb)),Tzb,OOb)};_.Pe=function gac(a,b){cac(this,kA(a,31),b)};_.a=0;_.b=0;_.d=0;var Y9b,Z9b;var OP=k4(PQd,'MinWidthLayerer',1306);c3(1307,1,lKd,iac);_.Ld=function jac(a,b){return hac(this,kA(a,8),kA(b,8))};_.Fb=function kac(a){return this===a};_.Md=function lac(){return new jfb(this)};var NP=k4(PQd,'MinWidthLayerer/MinOutgoingEdgesComparator',1307);c3(1298,1,NQd,wac);_.vf=function xac(a){return sac(this,kA(a,31))};_.Pe=function yac(a,b){vac(this,kA(a,31),b)};var mac,nac,oac;var PP=k4(PQd,'NetworkSimplexLayerer',1298);c3(1304,1,NQd,Kac);_.vf=function Lac(a){return kA(a,31),tvc(tvc(new yvc,(Wzb(),Rzb),(lPb(),sOb)),Tzb,OOb)};_.Pe=function Mac(a,b){Hac(this,kA(a,31),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var RP=k4(PQd,'StretchWidthLayerer',1304);c3(1305,1,lKd,Oac);_.Ld=function Pac(a,b){return Nac(kA(a,8),kA(b,8))};_.Fb=function Qac(a){return this===a};_.Md=function Rac(){return new jfb(this)};var QP=k4(PQd,'StretchWidthLayerer/1',1305);c3(422,1,QQd);_.lf=function ebc(a,b,c,d,e,f){};_.xf=function cbc(a,b,c){return Xac(this,a,b,c)};_.kf=function dbc(){this.g=tz(EA,RQd,22,this.d,15,1);this.f=tz(EA,RQd,22,this.d,15,1)};_.mf=function fbc(a,b){this.e[a]=tz(FA,OKd,22,b[a].length,15,1)};_.nf=function gbc(a,b,c){var d;d=c[a][b];d.o=b;this.e[a][b]=b};_.of=function hbc(a,b,c,d){kA(xbb(d[a][b].i,c),11).o=this.d++};_.b=0;_.c=0;_.d=0;var TP=k4(SQd,'AbstractBarycenterPortDistributor',422);c3(1484,1,lKd,ibc);_.Fb=function kbc(a){return this===a};_.Md=function lbc(){return new jfb(this)};_.Ld=function jbc(a,b){return $ac(this.a,a,b)};var SP=k4(SQd,'AbstractBarycenterPortDistributor/lambda$0$Type',1484);c3(1532,1,rOd,ubc);_.lf=function xbc(a,b,c,d,e,f){};_.nf=function zbc(a,b,c){};_.of=function Abc(a,b,c,d){};_.jf=function vbc(){return false};_.kf=function wbc(){this.a=this.c.a;this.e=this.d.g};_.mf=function ybc(a,b){b[a][0].c.o=a};_.pf=function Bbc(){return false};_.qf=function Cbc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sbc(c,a.length)){f=a[b-(c?1:-1)];Tac(this.d,f,c?(U7b(),S7b):(U7b(),R7b))}e=a[b][0];k=!d||e.j==(RGb(),MGb);j=Sr(a[b]);qbc(this,j,k,false,c);g=0;for(i=new ccb(j);i.a');a0?(jec(this.a,a[b-1],a[b]),undefined):!c&&b1&&(e.i==(FDc(),kDc)?(this.b[a]=true):e.i==EDc&&a>0&&(this.b[a-1]=true))};_.f=0;var nQ=k4(qOd,'AllCrossingsCounter',1528);c3(602,1,{},_dc);_.b=0;_.d=0;var oQ=k4(qOd,'BinaryIndexedTree',602);c3(473,1,{},vec);var tQ=k4(qOd,'CrossingsCounter',473);c3(1557,1,lKd,wec);_.Fb=function yec(a){return this===a};_.Md=function zec(){return new jfb(this)};_.Ld=function xec(a,b){return nec(this.a,a,b)};var pQ=k4(qOd,'CrossingsCounter/lambda$0$Type',1557);c3(1558,1,lKd,Aec);_.Fb=function Cec(a){return this===a};_.Md=function Dec(){return new jfb(this)};_.Ld=function Bec(a,b){return oec(this.a,a,b)};var qQ=k4(qOd,'CrossingsCounter/lambda$1$Type',1558);c3(1559,1,lKd,Eec);_.Fb=function Gec(a){return this===a};_.Md=function Hec(){return new jfb(this)};_.Ld=function Fec(a,b){return pec(this.a,a,b)};var rQ=k4(qOd,'CrossingsCounter/lambda$2$Type',1559);c3(1560,1,lKd,Iec);_.Fb=function Kec(a){return this===a};_.Md=function Lec(){return new jfb(this)};_.Ld=function Jec(a,b){return qec(this.a,a,b)};var sQ=k4(qOd,'CrossingsCounter/lambda$3$Type',1560);c3(1555,1,{},Nec);var xQ=k4(qOd,'HyperedgeCrossingsCounter',1555);c3(426,1,{34:1,426:1},Pec);_.vd=function Qec(a){return Oec(this,kA(a,426))};_.b=0;_.c=0;_.e=0;_.f=0;var wQ=k4(qOd,'HyperedgeCrossingsCounter/Hyperedge',426);c3(336,1,{34:1,336:1},Sec);_.vd=function Tec(a){return Rec(this,kA(a,336))};_.b=0;_.c=0;var vQ=k4(qOd,'HyperedgeCrossingsCounter/HyperedgeCorner',336);c3(472,23,{3:1,34:1,23:1,472:1},Xec);var Uec,Vec;var uQ=l4(qOd,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',472,zE,Zec,Yec);var $ec;c3(1556,1,{},kfc);_.e=true;_.f=0;_.g=0;var zQ=k4(qOd,'NorthSouthEdgeAllCrossingsCounter',1556);c3(1311,1,NQd,pfc);_.vf=function qfc(a){return kA(nub(kA(a,31),(E2b(),X1b)),19).pc((Z0b(),S0b))?lfc:null};_.Pe=function rfc(a,b){ofc(this,kA(a,31),b)};var lfc;var AQ=k4(TQd,'InteractiveNodePlacer',1311);c3(1312,1,NQd,Ffc);_.vf=function Gfc(a){return kA(nub(kA(a,31),(E2b(),X1b)),19).pc((Z0b(),S0b))?sfc:null};_.Pe=function Hfc(a,b){Dfc(this,kA(a,31),b)};var sfc,tfc,ufc;var CQ=k4(TQd,'LinearSegmentsNodePlacer',1312);c3(235,1,{34:1,235:1},Lfc);_.vd=function Mfc(a){return Ifc(this,kA(a,235))};_.Fb=function Nfc(a){var b;if(sA(a,235)){b=kA(a,235);return this.b==b.b}return false};_.Hb=function Ofc(){return this.b};_.Ib=function Pfc(){return 'ls'+vg(this.f)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.i=0;var BQ=k4(TQd,'LinearSegmentsNodePlacer/LinearSegment',235);c3(1314,1,NQd,kgc);_.vf=function lgc(a){return kA(nub(kA(a,31),(E2b(),X1b)),19).pc((Z0b(),S0b))?Qfc:null};_.Pe=function sgc(a,b){ggc(this,kA(a,31),b)};_.b=0;_.g=0;var Qfc;var mR=k4(TQd,'NetworkSimplexPlacer',1314);c3(1333,1,lKd,tgc);_.Fb=function vgc(a){return this===a};_.Md=function wgc(){return new jfb(this)};_.Ld=function ugc(a,b){return U4(kA(a,21).a,kA(b,21).a)};var DQ=k4(TQd,'NetworkSimplexPlacer/0methodref$compare$Type',1333);c3(1335,1,lKd,xgc);_.Fb=function zgc(a){return this===a};_.Md=function Agc(){return new jfb(this)};_.Ld=function ygc(a,b){return U4(kA(a,21).a,kA(b,21).a)};var EQ=k4(TQd,'NetworkSimplexPlacer/1methodref$compare$Type',1335);c3(584,1,{584:1},Bgc);var FQ=k4(TQd,'NetworkSimplexPlacer/EdgeRep',584);c3(416,1,{416:1},Cgc);_.b=false;var GQ=k4(TQd,'NetworkSimplexPlacer/NodeRep',416);c3(460,12,{3:1,4:1,20:1,25:1,41:1,12:1,13:1,15:1,49:1,460:1},Ggc);var LQ=k4(TQd,'NetworkSimplexPlacer/Path',460);c3(1315,1,FJd,Hgc);_.Kb=function Igc(a){return kA(a,14).d.g.j};var HQ=k4(TQd,'NetworkSimplexPlacer/Path/lambda$0$Type',1315);c3(1316,1,SLd,Jgc);_.Nb=function Kgc(a){return kA(a,232)==(RGb(),OGb)};var IQ=k4(TQd,'NetworkSimplexPlacer/Path/lambda$1$Type',1316);c3(1317,1,FJd,Lgc);_.Kb=function Mgc(a){return kA(a,14).d.g};var JQ=k4(TQd,'NetworkSimplexPlacer/Path/lambda$2$Type',1317);c3(1318,1,SLd,Ngc);_.Nb=function Ogc(a){return phc(k7b(kA(a,8)))};var KQ=k4(TQd,'NetworkSimplexPlacer/Path/lambda$3$Type',1318);c3(1319,1,SLd,Pgc);_.Nb=function Qgc(a){return Rfc(),(FDc(),pDc).pc(kA(a,11).i)};var MQ=k4(TQd,'NetworkSimplexPlacer/lambda$0$Type',1319);c3(1320,1,{},Rgc);_.td=function Sgc(a){Xfc(this.a,this.b,a)};var NQ=k4(TQd,'NetworkSimplexPlacer/lambda$1$Type',1320);c3(1329,1,{},Tgc);_.td=function Ugc(a){Yfc(this.a,a)};var OQ=k4(TQd,'NetworkSimplexPlacer/lambda$10$Type',1329);c3(1330,1,FJd,Vgc);_.Kb=function Wgc(a){return Rfc(),new Zob(null,new ekb(kA(a,26).a,16))};var PQ=k4(TQd,'NetworkSimplexPlacer/lambda$11$Type',1330);c3(1331,1,{},Xgc);_.td=function Ygc(a){Zfc(this.a,a)};var QQ=k4(TQd,'NetworkSimplexPlacer/lambda$12$Type',1331);c3(1332,1,FJd,Zgc);_.Kb=function $gc(a){return Rfc(),d5(kA(a,113).e)};var RQ=k4(TQd,'NetworkSimplexPlacer/lambda$13$Type',1332);c3(1334,1,FJd,_gc);_.Kb=function ahc(a){return Rfc(),d5(kA(a,113).e)};var SQ=k4(TQd,'NetworkSimplexPlacer/lambda$14$Type',1334);c3(1336,1,SLd,bhc);_.Nb=function chc(a){return Rfc(),kA(a,416).c.j==(RGb(),PGb)};var TQ=k4(TQd,'NetworkSimplexPlacer/lambda$15$Type',1336);c3(1337,1,SLd,dhc);_.Nb=function ehc(a){return Rfc(),kA(a,416).c.i.c.length>1};var UQ=k4(TQd,'NetworkSimplexPlacer/lambda$16$Type',1337);c3(1338,1,{},fhc);_.td=function ghc(a){pgc(this.c,this.b,this.d,this.a,a)};_.c=0;_.d=0;var VQ=k4(TQd,'NetworkSimplexPlacer/lambda$17$Type',1338);c3(1339,1,{},hhc);_.td=function ihc(a){qgc(this.a,a)};_.a=0;var WQ=k4(TQd,'NetworkSimplexPlacer/lambda$18$Type',1339);c3(1340,1,FJd,jhc);_.Kb=function khc(a){return Rfc(),new Zob(null,new ekb(kA(a,26).a,16))};var XQ=k4(TQd,'NetworkSimplexPlacer/lambda$19$Type',1340);c3(1321,1,FJd,lhc);_.Kb=function mhc(a){return Rfc(),new Zob(null,new ekb(kA(a,26).a,16))};var YQ=k4(TQd,'NetworkSimplexPlacer/lambda$2$Type',1321);c3(1341,1,{},nhc);_.td=function ohc(a){$fc(this.a,a)};var ZQ=k4(TQd,'NetworkSimplexPlacer/lambda$20$Type',1341);c3(1342,1,SLd,qhc);_.Nb=function rhc(a){return phc(a)};var $Q=k4(TQd,'NetworkSimplexPlacer/lambda$21$Type',1342);c3(1343,1,FJd,shc);_.Kb=function thc(a){return Rfc(),new Zob(null,new ekb(kA(a,26).a,16))};var _Q=k4(TQd,'NetworkSimplexPlacer/lambda$22$Type',1343);c3(1344,1,SLd,uhc);_.Nb=function vhc(a){return _fc(this.a,a)};var aR=k4(TQd,'NetworkSimplexPlacer/lambda$23$Type',1344);c3(1345,1,{},whc);_.td=function xhc(a){agc(this.a,this.b,a)};var bR=k4(TQd,'NetworkSimplexPlacer/lambda$24$Type',1345);c3(1346,1,SLd,yhc);_.Nb=function zhc(a){return Rfc(),!JEb(kA(a,14))};var cR=k4(TQd,'NetworkSimplexPlacer/lambda$25$Type',1346);c3(1347,1,SLd,Ahc);_.Nb=function Bhc(a){return Rfc(),!JEb(kA(a,14))};var dR=k4(TQd,'NetworkSimplexPlacer/lambda$26$Type',1347);c3(1348,1,{},Chc);_.le=function Dhc(a,b){return bgc(this.a,a,b)};var eR=k4(TQd,'NetworkSimplexPlacer/lambda$27$Type',1348);c3(1322,1,FJd,Ehc);_.Kb=function Fhc(a){return Rfc(),new Zob(null,new fkb(kl(zGb(kA(a,8)))))};var fR=k4(TQd,'NetworkSimplexPlacer/lambda$3$Type',1322);c3(1323,1,SLd,Ghc);_.Nb=function Hhc(a){return Rfc(),ogc(kA(a,14))};var gR=k4(TQd,'NetworkSimplexPlacer/lambda$4$Type',1323);c3(1324,1,{},Ihc);_.td=function Jhc(a){hgc(this.a,kA(a,14))};var hR=k4(TQd,'NetworkSimplexPlacer/lambda$5$Type',1324);c3(1325,1,FJd,Khc);_.Kb=function Lhc(a){return Rfc(),new Zob(null,new ekb(kA(a,26).a,16))};var iR=k4(TQd,'NetworkSimplexPlacer/lambda$6$Type',1325);c3(1326,1,SLd,Mhc);_.Nb=function Nhc(a){return Rfc(),kA(a,8).j==(RGb(),PGb)};var jR=k4(TQd,'NetworkSimplexPlacer/lambda$7$Type',1326);c3(1327,1,FJd,Ohc);_.Kb=function Phc(a){return Rfc(),new Zob(null,new fkb(kl(tGb(kA(a,8)))))};var kR=k4(TQd,'NetworkSimplexPlacer/lambda$8$Type',1327);c3(1328,1,SLd,Qhc);_.Nb=function Rhc(a){return Rfc(),IEb(kA(a,14))};var lR=k4(TQd,'NetworkSimplexPlacer/lambda$9$Type',1328);c3(1310,1,NQd,Vhc);_.vf=function Whc(a){return kA(nub(kA(a,31),(E2b(),X1b)),19).pc((Z0b(),S0b))?Shc:null};_.Pe=function Xhc(a,b){Uhc(kA(a,31),b)};var Shc;var nR=k4(TQd,'SimpleNodePlacer',1310);c3(164,1,{164:1},dic);_.Ib=function eic(){var a;a='';this.c==(hic(),gic)?(a+=yOd):this.c==fic&&(a+=xOd);this.o==(pic(),nic)?(a+=WQd):this.o==oic?(a+='UP'):(a+='BALANCED');return a};var qR=k4(XQd,'BKAlignedLayout',164);c3(466,23,{3:1,34:1,23:1,466:1},iic);var fic,gic;var oR=l4(XQd,'BKAlignedLayout/HDirection',466,zE,kic,jic);var lic;c3(465,23,{3:1,34:1,23:1,465:1},qic);var nic,oic;var pR=l4(XQd,'BKAlignedLayout/VDirection',465,zE,sic,ric);var tic;c3(1485,1,{},xic);var rR=k4(XQd,'BKAligner',1485);c3(1488,1,{},Cic);var uR=k4(XQd,'BKCompactor',1488);c3(593,1,{593:1},Dic);_.a=0;var sR=k4(XQd,'BKCompactor/ClassEdge',593);c3(423,1,{423:1},Fic);_.a=null;_.b=0;var tR=k4(XQd,'BKCompactor/ClassNode',423);c3(1313,1,NQd,Nic);_.vf=function Ric(a){return kA(nub(kA(a,31),(E2b(),X1b)),19).pc((Z0b(),S0b))?Gic:null};_.Pe=function Sic(a,b){Mic(this,kA(a,31),b)};_.a=false;_.e=false;var Gic;var vR=k4(XQd,'BKNodePlacer',1313);c3(437,23,{3:1,34:1,23:1,437:1},Wic);var Tic,Uic;var wR=l4(XQd,'EdgeStraighteningStrategy',437,zE,Yic,Xic);var Zic;c3(1486,1,{},ajc);_.d=0;var yR=k4(XQd,'NeighborhoodInformation',1486);c3(1487,1,lKd,fjc);_.Ld=function gjc(a,b){return ejc(this,kA(a,48),kA(b,48))};_.Fb=function hjc(a){return this===a};_.Md=function ijc(){return new jfb(this)};var xR=k4(XQd,'NeighborhoodInformation/NeighborComparator',1487);c3(724,1,{});var CR=k4(XQd,'ThresholdStrategy',724);c3(1510,724,{},njc);_.yf=function ojc(a,b,c){return this.a.o==(pic(),oic)?oLd:pLd};_.zf=function pjc(){};var zR=k4(XQd,'ThresholdStrategy/NullThresholdStrategy',1510);c3(522,1,{522:1},qjc);_.c=false;_.d=false;var AR=k4(XQd,'ThresholdStrategy/Postprocessable',522);c3(1511,724,{},ujc);_.yf=function vjc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.o]==b;if(!(e||d)){return a}f=a;if(this.a.c==(hic(),gic)){e&&(f=rjc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=rjc(this,c,false))}else{e&&(f=rjc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=rjc(this,c,false))}return f};_.zf=function wjc(){var a,b,c,d,e;while(this.c.b!=0){e=kA(tib(this.c),522);d=sjc(this,e);if(!d.a){continue}a=d.a;c=Vpb(this.a.f[this.a.g[e.b.o].o]);if(!c&&!JEb(a)&&a.c.g.c==a.d.g.c){continue}b=tjc(this,e);b||plb(this.d,e)}while(this.d.a.c.length!=0){tjc(this,kA(olb(this.d),522))}};var BR=k4(XQd,'ThresholdStrategy/SimpleThresholdStrategy',1511);c3(573,1,{573:1,285:1,286:1},Ajc);_.hf=function Cjc(){return zjc(this)};_.uf=function Bjc(){return zjc(this)};var xjc;var DR=k4(ZQd,'EdgeRouterFactory',573);c3(1356,1,NQd,Pjc);_.vf=function Qjc(a){return Njc(kA(a,31))};_.Pe=function Rjc(a,b){Ojc(kA(a,31),b)};var Ejc,Fjc,Gjc,Hjc,Ijc,Jjc,Kjc,Ljc;var ER=k4(ZQd,'OrthogonalEdgeRouter',1356);c3(594,1,{},Vjc);_.a=0;_.c=0;var KR=k4(ZQd,'OrthogonalRoutingGenerator',594);c3(252,1,{252:1},bkc);_.Ib=function ckc(){return this.a+'->'+this.b};_.c=0;var FR=k4(ZQd,'OrthogonalRoutingGenerator/Dependency',252);c3(165,1,{34:1,165:1},fkc);_.vd=function gkc(a){return ekc(this,kA(a,165))};_.Fb=function hkc(a){var b;if(sA(a,165)){b=kA(a,165);return this.d==b.d}return false};_.Hb=function ikc(){return this.d};_.Ib=function jkc(){var a,b,c,d;a=new O6('{');d=new ccb(this.g);while(d.alNd){e=new Jyc(i,l);mib(c.a,e);Sjc(this.a,c,a,e,false);f=new Jyc(k,l);mib(c.a,f);Sjc(this.a,c,a,f,false)}}}};_.Bf=function mkc(a){return a.g.k.a+a.k.a+a.a.a};_.Cf=function nkc(){return FDc(),CDc};_.Df=function okc(){return FDc(),lDc};var HR=k4(ZQd,'OrthogonalRoutingGenerator/NorthToSouthRoutingStrategy',1490);c3(1491,1,{},pkc);_.Af=function qkc(a,b){var c,d,e,f,g,h,i,j,k,l;l=b-a.i*this.a.c;for(h=new ccb(a.g);h.alNd){e=new Jyc(i,l);mib(c.a,e);Sjc(this.a,c,a,e,false);f=new Jyc(k,l);mib(c.a,f);Sjc(this.a,c,a,f,false)}}}};_.Bf=function rkc(a){return a.g.k.a+a.k.a+a.a.a};_.Cf=function skc(){return FDc(),lDc};_.Df=function tkc(){return FDc(),CDc};var IR=k4(ZQd,'OrthogonalRoutingGenerator/SouthToNorthRoutingStrategy',1491);c3(1489,1,{},ukc);_.Af=function vkc(a,b){var c,d,e,f,g,h,i,j,k,l;l=b+a.i*this.a.c;for(h=new ccb(a.g);h.alNd){e=new Jyc(l,i);mib(c.a,e);Sjc(this.a,c,a,e,true);f=new Jyc(l,k);mib(c.a,f);Sjc(this.a,c,a,f,true)}}}};_.Bf=function wkc(a){return a.g.k.b+a.k.b+a.a.b};_.Cf=function xkc(){return FDc(),kDc};_.Df=function ykc(){return FDc(),EDc};var JR=k4(ZQd,'OrthogonalRoutingGenerator/WestToEastRoutingStrategy',1489);c3(1351,1,NQd,Mkc);_.vf=function Nkc(a){return Hkc(kA(a,31))};_.Pe=function Okc(a,b){Jkc(this,kA(a,31),b)};var zkc,Akc,Bkc,Ckc,Dkc;var MR=k4(ZQd,'PolylineEdgeRouter',1351);c3(1352,1,nMd,Qkc);_.Mb=function Rkc(a){return Pkc(kA(a,8))};_.Fb=function Skc(a){return this===a};_.Nb=function Tkc(a){return this.Mb(a)};var LR=k4(ZQd,'PolylineEdgeRouter/1',1352);c3(151,1,{151:1},alc);_.Ib=function blc(){var a,b,c,d;c=new M6;!!this.e&&I6(I6(c,Ss(this.e)),': ');for(b=sib(Wkc(this),0);b.b!=b.d.c;){a=kA(Gib(b),11);I6(I6(C6(I6(c,(d=iHb(a),d==null?'p_'+a.o:'p_'+d)),32),Ss(a.i)),' / ')}return l3(c,c.a.length-2-1)};_.j=0;_.k=0;var NR=k4($Qd,'ConnectedSelfLoopComponent',151);c3(129,23,{3:1,34:1,23:1,129:1},Mlc);_.c=0;var clc,dlc,elc,flc,glc,hlc,ilc,jlc,klc,llc,mlc,nlc,olc,plc,qlc,rlc,slc,tlc,ulc,vlc,wlc,xlc,ylc,zlc,Alc,Blc,Clc,Dlc,Elc;var OR=l4($Qd,'LoopSide',129,zE,Qlc,Plc);var Rlc;c3(424,1,{},dmc,emc,fmc);_.Ib=function pmc(){return this.b.Ib()};_.c=0;_.d=false;_.e=false;_.f=false;_.i=0;_.j=0;var QR=k4($Qd,'NubSpline',424);c3(190,1,{190:1},smc,tmc);var PR=k4($Qd,'NubSpline/PolarCP',190);c3(599,424,{},umc);var RR=k4($Qd,'NubsSelfLoop',599);c3(236,1,{},Bmc,Cmc,Dmc,Emc,Fmc);_.a=cRd;_.b=YQd;_.c=cRd;_.d=YQd;var SR=k4($Qd,'Rectangle',236);c3(1353,1,NQd,$mc);_.vf=function anc(a){return Umc(kA(a,31))};_.Pe=function bnc(a,b){Zmc(this,kA(a,31),b)};_.d=3;var Hmc,Imc,Jmc,Kmc,Lmc,Mmc;var XR=k4($Qd,'SplineEdgeRouter',1353);c3(250,1,{250:1},enc);_.Ib=function fnc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var TR=k4($Qd,'SplineEdgeRouter/Dependency',250);c3(417,23,{3:1,34:1,23:1,417:1},jnc);var gnc,hnc;var UR=l4($Qd,'SplineEdgeRouter/SideToProcess',417,zE,lnc,knc);var mnc;c3(1354,1,{},onc);_.td=function pnc(a){Wmc(this.a,this.b,a)};var VR=k4($Qd,'SplineEdgeRouter/lambda$0$Type',1354);c3(1355,1,{},qnc);_.td=function rnc(a){Xmc(this.a,this.b,a)};var WR=k4($Qd,'SplineEdgeRouter/lambda$1$Type',1355);c3(125,1,{34:1,125:1},wnc,xnc);_.vd=function ync(a){return unc(this,kA(a,125))};_.b=0;_.e=0;_.f=0;_.i=false;_.j=0;_.k=false;_.n=false;_.p=0;_.r=0;_.s=0;var ZR=k4($Qd,'SplineSegment',125);c3(589,1,{589:1},znc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var YR=k4($Qd,'SplineSegment/EdgeInformation',589);c3(990,1,{},Knc);var _R=k4(gRd,bNd,990);c3(991,1,lKd,Mnc);_.Ld=function Nnc(a,b){return Lnc(kA(a,128),kA(b,128))};_.Fb=function Onc(a){return this===a};_.Md=function Pnc(){return new jfb(this)};var $R=k4(gRd,cNd,991);c3(989,1,{},Wnc);var aS=k4(gRd,'MrTree',989);c3(360,23,{3:1,34:1,23:1,360:1,285:1,286:1},boc);_.hf=function doc(){return aoc(this)};_.uf=function coc(){return aoc(this)};var Xnc,Ync,Znc,$nc;var bS=l4(gRd,'TreeLayoutPhases',360,zE,foc,eoc);var goc;c3(960,244,GMd,ioc);_.Ae=function joc(a,b){var c,d,e,f,g,h;f=(g=new toc,lub(g,a),qub(g,(Ppc(),Gpc),a),h=new Bgb,Snc(a,g,h),Rnc(a,g,h),g);e=Jnc(this.a,f);for(d=new ccb(e);d.a'+xoc(this.c):'e_'+ob(this)};var fS=k4(hRd,'TEdge',170);c3(128,131,{3:1,128:1,93:1,131:1},toc);_.Ib=function uoc(){var a,b,c,d,e;e=null;for(d=sib(this.b,0);d.b!=d.d.c;){c=kA(Gib(d),76);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=sib(this.a,0);b.b!=b.d.c;){a=kA(Gib(b),170);e+=(!!a.b&&!!a.c?xoc(a.b)+'->'+xoc(a.c):'e_'+ob(a))+'\n'}return e};var hS=k4(hRd,'TGraph',128);c3(570,452,{3:1,452:1,570:1,93:1,131:1});var lS=k4(hRd,'TShape',570);c3(76,570,{3:1,452:1,76:1,570:1,93:1,131:1},yoc);_.Ib=function zoc(){return xoc(this)};var kS=k4(hRd,'TNode',76);c3(231,1,YJd,Aoc);_.sc=function Boc(a){i5(this,a)};_.tc=function Coc(){var a;return a=sib(this.a.d,0),new Doc(a)};var jS=k4(hRd,'TNode/2',231);c3(330,1,wJd,Doc);_.gc=function Eoc(a){Bhb(this,a)};_.ic=function Goc(){return kA(Gib(this.a),170).c};_.hc=function Foc(){return Fib(this.a)};_.jc=function Hoc(){Iib(this.a)};var iS=k4(hRd,'TNode/2/1',330);c3(1545,1,TNd,Koc);_.Pe=function Moc(a,b){Joc(this,kA(a,128),b)};var mS=k4(iRd,'FanProcessor',1545);c3(308,23,{3:1,34:1,23:1,308:1,286:1},Uoc);_.hf=function Voc(){switch(this.g){case 0:return new rpc;case 1:return new Koc;case 2:return new hpc;case 3:return new apc;case 4:return new opc;case 5:return new upc;default:throw x2(new O4(iOd+(this.f!=null?this.f:''+this.g)));}};var Noc,Ooc,Poc,Qoc,Roc,Soc;var nS=l4(iRd,jOd,308,zE,Xoc,Woc);var Yoc;c3(1548,1,TNd,apc);_.Pe=function bpc(a,b){$oc(this,kA(a,128),b)};_.a=0;var pS=k4(iRd,'LevelHeightProcessor',1548);c3(1549,1,YJd,cpc);_.sc=function dpc(a){i5(this,a)};_.tc=function epc(){return bdb(),sdb(),rdb};var oS=k4(iRd,'LevelHeightProcessor/1',1549);c3(1546,1,TNd,hpc);_.Pe=function ipc(a,b){fpc(this,kA(a,128),b)};_.a=0;var rS=k4(iRd,'NeighborsProcessor',1546);c3(1547,1,YJd,jpc);_.sc=function kpc(a){i5(this,a)};_.tc=function lpc(){return bdb(),sdb(),rdb};var qS=k4(iRd,'NeighborsProcessor/1',1547);c3(1550,1,TNd,opc);_.Pe=function ppc(a,b){mpc(this,kA(a,128),b)};_.a=0;var sS=k4(iRd,'NodePositionProcessor',1550);c3(1544,1,TNd,rpc);_.Pe=function spc(a,b){qpc(this,kA(a,128))};var tS=k4(iRd,'RootProcessor',1544);c3(1551,1,TNd,upc);_.Pe=function vpc(a,b){tpc(kA(a,128))};var uS=k4(iRd,'Untreeifyer',1551);var wpc,xpc,ypc,zpc,Apc,Bpc,Cpc,Dpc,Epc,Fpc,Gpc,Hpc,Ipc,Jpc,Kpc,Lpc,Mpc,Npc,Opc;c3(750,1,uMd,Vpc);_.ue=function Wpc(a){qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,lRd),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),Tpc),(Uxc(),Oxc)),yS),fgb((Gxc(),Exc)))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,mRd),''),'Search Order'),'Which search order to use when computing a spanning tree.'),Rpc),Oxc),zS),fgb(Exc))));gqc((new hqc,a))};var Qpc,Rpc,Spc,Tpc;var vS=k4(nRd,'MrTreeMetaDataProvider',750);c3(886,1,uMd,hqc);_.ue=function iqc(a){gqc(a)};var Xpc,Ypc,Zpc,$pc,_pc,aqc,bqc,cqc,dqc,eqc;var xS=k4(nRd,'MrTreeOptions',886);c3(887,1,{},jqc);_.Be=function kqc(){var a;return a=new ioc,a};_.Ce=function lqc(a){};var wS=k4(nRd,'MrTreeOptions/MrtreeFactory',887);c3(438,23,{3:1,34:1,23:1,438:1},pqc);var mqc,nqc;var yS=l4(nRd,'OrderWeighting',438,zE,rqc,qqc);var sqc;c3(388,23,{3:1,34:1,23:1,388:1},xqc);var uqc,vqc;var zS=l4(nRd,'TreeifyingOrder',388,zE,zqc,yqc);var Aqc;c3(1357,1,NQd,Jqc);_.vf=function Kqc(a){return kA(a,128),Cqc};_.Pe=function Lqc(a,b){Iqc(this,kA(a,128),b)};var Cqc;var AS=k4('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1357);c3(1358,1,NQd,Qqc);_.vf=function Rqc(a){return kA(a,128),Mqc};_.Pe=function Sqc(a,b){Pqc(this,kA(a,128),b)};var Mqc;var BS=k4('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1358);c3(1359,1,NQd,$qc);_.vf=function _qc(a){return kA(a,128),Tqc};_.Pe=function arc(a,b){Yqc(this,kA(a,128),b)};_.a=0;var Tqc;var CS=k4('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1359);c3(1360,1,NQd,erc);_.vf=function frc(a){return kA(a,128),brc};_.Pe=function grc(a,b){drc(kA(a,128),b)};var brc;var DS=k4('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1360);var hrc;c3(447,23,{3:1,34:1,23:1,447:1,285:1,286:1},nrc);_.hf=function prc(){return mrc(this)};_.uf=function orc(){return mrc(this)};var jrc,krc;var ES=l4(qRd,'RadialLayoutPhases',447,zE,rrc,qrc);var trc;c3(961,244,GMd,wrc);_.Ae=function xrc(a,b){var c,d,e,f,g,h,i;d=vrc(this,a);xEc(b,'Radial layout',d.c.length);i=zrc(a);COc(a,(irc(),hrc),i);if(!i){throw x2(new O4('The given graph is not a tree!'))}f=Vpb(nA(AOc(a,(otc(),ktc))));f==0&&(f=yrc(a));COc(a,ktc,f);c=new LGc(a);wbb(KGc(c),new sHc);e=new AHc(c);wHc(e);for(h=new ccb(vrc(this,a));h.a0&&Nyc(b.charCodeAt(c-1),YNd)){--c}if(e>=c){throw x2(new O4('The given string does not contain any numbers.'))}f=f6(b.substr(e,c-e),',|;|\r|\n');if(f.length!=2){throw x2(new O4('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=G3(m6(f[0]));this.b=G3(m6(f[1]))}catch(a){a=w2(a);if(sA(a,118)){d=a;throw x2(new O4(ZNd+d))}else throw x2(a)}};_.Ib=function Qyc(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var aU=k4($Nd,'KVector',9);c3(74,66,{3:1,4:1,20:1,25:1,41:1,13:1,66:1,15:1,74:1,428:1},Vyc,Wyc);_.gf=function Xyc(b){var c,d,e,f,g,h;e=f6(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');xib(this);try{d=0;g=0;f=0;h=0;while(d0){g%2==0?(f=G3(e[d])):(h=G3(e[d]));g>0&&g%2!=0&&mib(this,new Jyc(f,h));++g}++d}}catch(a){a=w2(a);if(sA(a,118)){c=a;throw x2(new O4('The given string does not match the expected format for vectors.'+c))}else throw x2(a)}};_.Ib=function Zyc(){var a,b,c;a=new O6('(');b=sib(this,0);while(b.b!=b.d.c){c=kA(Gib(b),9);I6(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var _T=k4($Nd,'KVectorChain',74);c3(224,23,{3:1,34:1,23:1,224:1},fzc);var $yc,_yc,azc,bzc,czc,dzc;var cU=l4(WRd,'Alignment',224,zE,hzc,gzc);var izc;c3(855,1,uMd,xzc);_.ue=function yzc(a){wzc(a)};var kzc,lzc,mzc,nzc,ozc,pzc,qzc,rzc,szc,tzc,uzc;var eU=k4(WRd,'BoxLayouterOptions',855);c3(856,1,{},zzc);_.Be=function Azc(){var a;return a=new NEc,a};_.Ce=function Bzc(a){};var dU=k4(WRd,'BoxLayouterOptions/BoxFactory',856);c3(785,1,uMd,_Ac);_.ue=function aBc(a){qwc(a,new ixc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,_Rd),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(Uxc(),Sxc)),UE),fgb((Gxc(),Exc)))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,iQd),''),'Alignment'),'Alignment of the selected node relative to other nodes, the exact meaning depends on the used algorithm.'),Ezc),Oxc),cU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.alignment']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,VMd),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),Nxc),yE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.aspectRatio']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,aSd),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),Rxc),_T),fgb(Bxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.bendPoints']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,hQd),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(B3(),B3(),false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.debugMode']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,oQd),''),yMd),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),Mzc),Oxc),gU),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.direction']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,OPd),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),Rzc),Oxc),iU),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.edgeRouting']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,ZRd),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.expandNodes']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,jQd),''),'Hierarchy Handling'),'If this option is set to SEPARATE_CHILDREN, each hierarchy level of the graph is processed independently, possibly by different layout algorithms, beginning with the lowest level. If it is set to INCLUDE_CHILDREN, the algorithm is responsible to process all hierarchy levels that are contained in the associated parent node. If the root node is set to inherit (or not set at all), the default behavior is SEPARATE_CHILDREN.'),Wzc),Oxc),mU),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Dxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.hierarchyHandling']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,WMd),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),pAc),Rxc),ZT),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Dxc])))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,vNd),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),(null,false)),Mxc),tE),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,wNd),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),CAc),Oxc),pU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portConstraints']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,HQd),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),Rxc),aU),ggb(Dxc,xz(pz(UT,1),jKd,163,0,[Fxc,Cxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.position']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,qNd),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),Qxc),GE),ggb(Dxc,xz(pz(UT,1),jKd,163,0,[Bxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.priority']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,tNd),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.randomSeed']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,uNd),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.separateConnComp']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,yQd),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),aAc),Rxc),_T),fgb(Bxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.junctionPoints']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,CQd),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),(null,false)),Mxc),tE),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.commentBox']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,DQd),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),(null,false)),Mxc),tE),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.hypernode']))));qwc(a,new ixc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,bSd),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),Rxc),XT),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Cxc])))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,IQd),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),cAc),Rxc),YT),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.margins']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,fQd),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),(null,false)),Mxc),tE),ggb(Dxc,xz(pz(UT,1),jKd,163,0,[Bxc,Fxc,Cxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.noLayout']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,cSd),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),Nxc),yE),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.scaleFactor']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,dSd),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),(null,true)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.animate']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,eSd),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),d5(100)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.animTimeFactor']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,fSd),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.layoutAncestors']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,gSd),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),d5(4000)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.maxAnimTime']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,hSd),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),d5(400)),Qxc),GE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.minAnimTime']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,iSd),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.progressBar']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,jSd),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),(null,true)),Mxc),tE),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,kSd),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),(null,false)),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.zoomToFit']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,$Rd),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),Izc),Oxc),zU),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,TMd),PPd),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),12),Nxc),yE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.borderSpacing']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,ZPd),PPd),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,sNd),PPd),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),Nxc),yE),fgb(Exc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,$Pd),PPd),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),Nxc),yE),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,_Pd),PPd),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),Nxc),yE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,[pSd]))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,bQd),PPd),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),Nxc),yE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,[pSd]))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,aQd),PPd),'Label Port Spacing'),"Spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Nxc),yE),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,rNd),PPd),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),Nxc),yE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.spacing']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,cQd),PPd),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),Nxc),yE),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Dxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portSpacing']))));qwc(a,new ixc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,dQd),PPd),'Individual Spacing Override'),'In general spacing values apply to the children of the hierarchical node (possibly the root node) for which the values are actually specified. Hereby, the children include ports, edges, and labels.'),Rxc),KU),ggb(Dxc,xz(pz(UT,1),jKd,163,0,[Bxc,Fxc,Cxc])))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,JQd),PPd),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),YAc),Rxc),YT),fgb(Exc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,GQd),qSd),'Layout Partition'),"Partition to which the node belongs to. If 'layoutPartitions' is true, all nodes are expected to have a partition."),Qxc),GE),ggb(Exc,xz(pz(UT,1),jKd,163,0,[Dxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.partition']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,FQd),qSd),'Layout Partitioning'),'Whether to activate partitioned layout.'),rAc),Mxc),tE),fgb(Exc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.layoutPartitions']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,lSd),rSd),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),eAc),Rxc),ZT),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.nodeLabelInset']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,pQd),rSd),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),gAc),Pxc),nU),ggb(Dxc,xz(pz(UT,1),jKd,163,0,[Cxc]))),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.nodeLabelPlacement']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,sQd),sSd),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),uAc),Oxc),oU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portAlignment']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,tQd),sSd),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),Oxc),oU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portAlignment.north']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,uQd),sSd),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),Oxc),oU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portAlignment.south']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,vQd),sSd),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),Oxc),oU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portAlignment.west']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,wQd),sSd),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),Oxc),oU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portAlignment.east']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,mQd),tSd),'Node Size Constraints'),'Constraints for determining node sizes. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to node sizes being fixed.'),iAc),Pxc),uU),fgb(Dxc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,nQd),tSd),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),mAc),Pxc),vU),fgb(Dxc))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,xQd),tSd),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),kAc),Rxc),aU),fgb(Dxc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,zQd),XPd),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),Pzc),Oxc),hU),fgb(Cxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.edgeLabelPlacement']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,AQd),XPd),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),(null,false)),Mxc),tE),fgb(Cxc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,mSd),'font'),'Font Name'),'Font name used for a label.'),Sxc),UE),fgb(Cxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.fontName']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,nSd),'font'),'Font Size'),'Font size used for a label.'),Qxc),GE),fgb(Cxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.fontSize']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,EQd),uSd),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Rxc),aU),fgb(Fxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portAnchor']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,BQd),uSd),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),Qxc),GE),fgb(Fxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portIndex']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,gQd),uSd),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),IAc),Oxc),rU),fgb(Fxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portSide']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(sxc(wxc(txc(uxc(new Axc,eQd),uSd),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),Nxc),yE),fgb(Fxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.offset']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,qQd),vSd),'Port Label Placement'),'Decides on a placement method for port labels.'),GAc),Oxc),qU),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.portLabelPlacement']))));qwc(a,new ixc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,rQd),vSd),'Port Labels Next to Port'),"Usually, inside port labels of hierarchical nodes are placed not next to their port, but with an offset to avoid edge-label crossings. The offset is not necessary if the port has no connections that would cross the label, but is usually applied anyway to keep things uniform. Setting this option to true places labels next to their ports if they won't be crossed by edges."),(null,false)),Mxc),tE),fgb(Dxc))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,kQd),wSd),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),(null,false)),Mxc),tE),fgb(Dxc)),xz(pz(UE,1),cKd,2,6,[xSd]))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,lQd),wSd),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),(null,false)),Mxc),tE),fgb(Bxc)),xz(pz(UE,1),cKd,2,6,[xSd]))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,UMd),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),Nxc),yE),fgb(Bxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.thickness']))));qwc(a,new ixc(vxc(yxc(xxc(zxc(rxc(sxc(wxc(txc(uxc(new Axc,oSd),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),Tzc),Oxc),jU),fgb(Bxc)),xz(pz(UE,1),cKd,2,6,['de.cau.cs.kieler.edgeType']))));pwc(a,new Svc(Zvc(_vc($vc(new awc,YPd),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));pwc(a,new Svc(Zvc(_vc($vc(new awc,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));pwc(a,new Svc(Zvc(_vc($vc(new awc,pNd),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));pwc(a,new Svc(Zvc(_vc($vc(new awc,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));pwc(a,new Svc(Zvc(_vc($vc(new awc,pRd),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));pwc(a,new Svc(Zvc(_vc($vc(new awc,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));pwc(a,new Svc(Zvc(_vc($vc(new awc,GRd),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));aCc((new bCc,a));wzc((new xzc,a));TDc((new UDc,a))};var Czc,Dzc,Ezc,Fzc,Gzc,Hzc,Izc,Jzc,Kzc,Lzc,Mzc,Nzc,Ozc,Pzc,Qzc,Rzc,Szc,Tzc,Uzc,Vzc,Wzc,Xzc,Yzc,Zzc,$zc,_zc,aAc,bAc,cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc,kAc,lAc,mAc,nAc,oAc,pAc,qAc,rAc,sAc,tAc,uAc,vAc,wAc,xAc,yAc,zAc,AAc,BAc,CAc,DAc,EAc,FAc,GAc,HAc,IAc,JAc,KAc,LAc,MAc,NAc,OAc,PAc,QAc,RAc,SAc,TAc,UAc,VAc,WAc,XAc,YAc,ZAc;var fU=k4(WRd,'CoreOptions',785);c3(110,23,{3:1,34:1,23:1,110:1},kBc);var bBc,cBc,dBc,eBc,fBc;var gU=l4(WRd,yMd,110,zE,mBc,lBc);var nBc;c3(226,23,{3:1,34:1,23:1,226:1},uBc);var pBc,qBc,rBc,sBc;var hU=l4(WRd,'EdgeLabelPlacement',226,zE,wBc,vBc);var xBc;c3(197,23,{3:1,34:1,23:1,197:1},EBc);var zBc,ABc,BBc,CBc;var iU=l4(WRd,'EdgeRouting',197,zE,GBc,FBc);var HBc;c3(289,23,{3:1,34:1,23:1,289:1},QBc);var JBc,KBc,LBc,MBc,NBc,OBc;var jU=l4(WRd,'EdgeType',289,zE,SBc,RBc);var TBc;c3(853,1,uMd,bCc);_.ue=function cCc(a){aCc(a)};var VBc,WBc,XBc,YBc,ZBc,$Bc;var lU=k4(WRd,'FixedLayouterOptions',853);c3(854,1,{},dCc);_.Be=function eCc(){var a;return a=new $Fc,a};_.Ce=function fCc(a){};var kU=k4(WRd,'FixedLayouterOptions/FixedFactory',854);c3(316,23,{3:1,34:1,23:1,316:1},kCc);var gCc,hCc,iCc;var mU=l4(WRd,'HierarchyHandling',316,zE,mCc,lCc);var nCc;c3(86,23,{3:1,34:1,23:1,86:1},zCc);var pCc,qCc,rCc,sCc,tCc,uCc,vCc,wCc,xCc;var nU=l4(WRd,'NodeLabelPlacement',86,zE,BCc,ACc);var CCc;c3(225,23,{3:1,34:1,23:1,225:1},KCc);var ECc,FCc,GCc,HCc,ICc;var oU=l4(WRd,'PortAlignment',225,zE,MCc,LCc);var NCc;c3(83,23,{3:1,34:1,23:1,83:1},YCc);var PCc,QCc,RCc,SCc,TCc,UCc;var pU=l4(WRd,'PortConstraints',83,zE,$Cc,ZCc);var _Cc;c3(275,23,{3:1,34:1,23:1,275:1},fDc);var bDc,cDc,dDc;var qU=l4(WRd,'PortLabelPlacement',275,zE,hDc,gDc);var iDc;c3(69,23,{3:1,34:1,23:1,69:1},HDc);var kDc,lDc,mDc,nDc,oDc,pDc,qDc,rDc,sDc,tDc,uDc,vDc,wDc,xDc,yDc,zDc,ADc,BDc,CDc,DDc,EDc;var rU=l4(WRd,'PortSide',69,zE,KDc,JDc);var LDc;c3(857,1,uMd,UDc);_.ue=function VDc(a){TDc(a)};var NDc,ODc,PDc,QDc,RDc;var tU=k4(WRd,'RandomLayouterOptions',857);c3(858,1,{},WDc);_.Be=function XDc(){var a;return a=new wGc,a};_.Ce=function YDc(a){};var sU=k4(WRd,'RandomLayouterOptions/RandomFactory',858);c3(344,23,{3:1,34:1,23:1,344:1},cEc);var ZDc,$Dc,_Dc,aEc;var uU=l4(WRd,'SizeConstraint',344,zE,eEc,dEc);var fEc;c3(239,23,{3:1,34:1,23:1,239:1},rEc);var hEc,iEc,jEc,kEc,lEc,mEc,nEc,oEc,pEc;var vU=l4(WRd,'SizeOptions',239,zE,tEc,sEc);var uEc;c3(313,1,{},CEc,DEc,EEc);_.b=false;_.c=0;_.d=-1;_.e=0;_.f=false;_.j=0;var wU=k4(MRd,'BasicProgressMonitor',313);c3(848,244,GMd,NEc);_.Ae=function OEc(a,b){var c,d,e,f,g,h,i,j,k,l;xEc(b,'Box layout',2);f=Vpb(nA(AOc(a,(vzc(),uzc))));g=kA(AOc(a,rzc),119);c=Vpb(mA(AOc(a,mzc)));d=Vpb(mA(AOc(a,nzc)));e=kA(AOc(a,lzc),288);switch(e.g){case 0:h=(i=new zib((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a)),bdb(),Vib(i,new QEc(d)),i);j=kA(AOc(a,pzc),9);j.a=$wnd.Math.max(j.a-g.b-g.c,0);j.b=$wnd.Math.max(j.b-g.d-g.a,0);k=nA(AOc(a,kzc));(k==null||(Npb(k),k)<=0)&&(k=1.3);l=KEc(h,f,g,j.a,j.b,c,(Npb(k),k));IFc(a,l.a,l.b,false,true);break;default:LEc(a,f,g,c);}zEc(b)};var DU=k4(MRd,'BoxLayoutProvider',848);c3(849,1,lKd,QEc);_.Ld=function REc(a,b){return PEc(this,kA(a,35),kA(b,35))};_.Fb=function SEc(a){return this===a};_.Md=function TEc(){return new jfb(this)};_.a=false;var xU=k4(MRd,'BoxLayoutProvider/1',849);c3(145,1,{145:1},_Ec,aFc);_.Ib=function bFc(){return this.c?aTc(this.c):vg(this.b)};var yU=k4(MRd,'BoxLayoutProvider/Group',145);c3(288,23,{3:1,34:1,23:1,288:1},hFc);var cFc,dFc,eFc,fFc;var zU=l4(MRd,'BoxLayoutProvider/PackingMode',288,zE,jFc,iFc);var kFc;c3(850,1,lKd,mFc);_.Fb=function oFc(a){return this===a};_.Md=function pFc(){return new jfb(this)};_.Ld=function nFc(a,b){return -C4(UEc(kA(a,145)),UEc(kA(b,145)))};var AU=k4(MRd,'BoxLayoutProvider/lambda$0$Type',850);c3(851,1,lKd,qFc);_.Fb=function sFc(a){return this===a};_.Md=function tFc(){return new jfb(this)};_.Ld=function rFc(a,b){return C4(UEc(kA(a,145)),UEc(kA(b,145)))};var BU=k4(MRd,'BoxLayoutProvider/lambda$1$Type',851);c3(852,1,lKd,uFc);_.Fb=function wFc(a){return this===a};_.Md=function xFc(){return new jfb(this)};_.Ld=function vFc(a,b){return C4(UEc(kA(a,145)),UEc(kA(b,145)))};var CU=k4(MRd,'BoxLayoutProvider/lambda$2$Type',852);c3(833,1,{},NFc);_.td=function OFc(a){EFc(this.a,this.b,a)};_.a=0;_.b=0;var EU=k4(MRd,'ElkUtil/lambda$0$Type',833);c3(834,1,{},PFc);_.td=function QFc(a){FFc(this.a,this.b,a)};_.a=0;_.b=0;var FU=k4(MRd,'ElkUtil/lambda$1$Type',834);c3(835,1,{},RFc);_.td=function SFc(a){GFc(this.a,this.b,a)};_.a=0;_.b=0;var GU=k4(MRd,'ElkUtil/lambda$2$Type',835);c3(322,1,{34:1,322:1},UFc);_.vd=function VFc(a){return TFc(this,kA(a,210))};_.Fb=function WFc(a){var b;if(sA(a,322)){b=kA(a,322);return this.a==b.a}return false};_.Hb=function XFc(){return zA(this.a)};_.Ib=function YFc(){return this.a+' (exclusive)'};_.a=0;var HU=k4(MRd,'ExclusiveBounds/ExclusiveLowerBound',322);c3(963,244,GMd,$Fc);_.Ae=function _Fc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;xEc(b,zSd,1);f=kA(AOc(a,($Ac(),Qzc)),197);m=0;n=0;for(t=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));t.e!=t.i._b();){r=kA($_c(t),35);C=kA(AOc(r,(_Bc(),$Bc)),9);if(C){pPc(r,C.a,C.b);if(kA(AOc(r,WBc),185).pc((bEc(),ZDc))){o=kA(AOc(r,XBc),9);o.a>0&&o.b>0&&IFc(r,o.a,o.b,true,true)}}m=$wnd.Math.max(m,r.i+r.g);n=$wnd.Math.max(n,r.j+r.f);for(k=new a0c((!r.n&&(r.n=new zkd(LV,r,1,7)),r.n));k.e!=k.i._b();){i=kA($_c(k),137);C=kA(AOc(i,$Bc),9);!!C&&pPc(i,C.a,C.b);m=$wnd.Math.max(m,r.i+i.i+i.g);n=$wnd.Math.max(n,r.j+i.j+i.f)}for(w=new a0c((!r.c&&(r.c=new zkd(NV,r,9,9)),r.c));w.e!=w.i._b();){v=kA($_c(w),121);C=kA(AOc(v,$Bc),9);!!C&&pPc(v,C.a,C.b);A=r.i+v.i;B=r.j+v.j;m=$wnd.Math.max(m,A+v.g);n=$wnd.Math.max(n,B+v.f);for(j=new a0c((!v.n&&(v.n=new zkd(LV,v,1,7)),v.n));j.e!=j.i._b();){i=kA($_c(j),137);C=kA(AOc(i,$Bc),9);!!C&&pPc(i,C.a,C.b);m=$wnd.Math.max(m,A+i.i+i.g);n=$wnd.Math.max(n,B+i.j+i.f)}}for(e=kl(TWc(r));So(e);){c=kA(To(e),105);l=ZFc(c);m=$wnd.Math.max(m,l.a);n=$wnd.Math.max(n,l.b)}for(d=kl(SWc(r));So(d);){c=kA(To(d),105);if(UWc(kA(WXc((!c.b&&(c.b=new pxd(HV,c,4,7)),c.b),0),97))!=a){l=ZFc(c);m=$wnd.Math.max(m,l.a);n=$wnd.Math.max(n,l.b)}}}if(f==(DBc(),zBc)){for(s=new a0c((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a));s.e!=s.i._b();){r=kA($_c(s),35);for(d=kl(TWc(r));So(d);){c=kA(To(d),105);h=(g=new Vyc,g);h.b==0?COc(c,_zc,null):COc(c,_zc,h)}}}u=kA(AOc(a,(_Bc(),YBc)),119);q=m+u.b+u.c;p=n+u.d+u.a;IFc(a,q,p,true,true);zEc(b)};var IU=k4(MRd,'FixedLayoutProvider',963);c3(786,131,FMd,aGc);var KU=k4(MRd,'IndividualSpacings',786);c3(635,1,{},eGc);_.c=0;var LU=k4(MRd,'InstancePool',635);c3(48,1,{20:1,48:1},fGc);_.sc=function hGc(a){i5(this,a)};_.Fb=function gGc(a){var b,c,d;if(sA(a,48)){c=kA(a,48);b=this.a==null?c.a==null:kb(this.a,c.a);d=this.b==null?c.b==null:kb(this.b,c.b);return b&&d}else{return false}};_.Hb=function iGc(){var a,b,c,d,e,f;c=this.a==null?0:ob(this.a);a=c&AKd;b=c&-65536;f=this.b==null?0:ob(this.b);d=f&AKd;e=f&-65536;return a^e>>16&AKd|b^d<<16};_.tc=function jGc(){return new lGc(this)};_.Ib=function kGc(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+f3(this.b)+')':this.b==null?'pair('+f3(this.a)+',null)':'pair('+f3(this.a)+','+f3(this.b)+')'};var NU=k4(MRd,'Pair',48);c3(859,1,wJd,lGc);_.gc=function mGc(a){Bhb(this,a)};_.hc=function nGc(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.ic=function oGc(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw x2(new djb)};_.jc=function pGc(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw x2(new P4)};_.b=false;_.c=false;var MU=k4(MRd,'Pair/1',859);c3(404,1,{404:1},qGc);_.Fb=function rGc(a){return ejb(this.a,kA(a,404).a)&&ejb(this.c,kA(a,404).c)&&ejb(this.d,kA(a,404).d)&&ejb(this.b,kA(a,404).b)};_.Hb=function sGc(){return xcb(xz(pz(NE,1),oJd,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function tGc(){return '('+this.a+qJd+this.c+qJd+this.d+qJd+this.b+')'};var OU=k4(MRd,'Quadruple',404);c3(957,244,GMd,wGc);_.Ae=function xGc(a,b){var c,d,e,f,g;xEc(b,'Random Layout',1);if((!a.a&&(a.a=new zkd(MV,a,10,11)),a.a).i==0){zEc(b);return}f=kA(AOc(a,(SDc(),QDc)),21);!!f&&f.a!=0?(e=new bkb(f.a)):(e=new akb);c=Vpb(nA(AOc(a,NDc)));g=Vpb(nA(AOc(a,RDc)));d=kA(AOc(a,ODc),119);vGc(a,e,c,g,d);zEc(b)};var PU=k4(MRd,'RandomLayoutProvider',957);c3(490,1,{});_.Qe=function AGc(){return new Jyc(this.f.i,this.f.j)};_.xe=function BGc(a){if(BWc(a,($Ac(),AAc))){return AOc(this.f,yGc)}return AOc(this.f,a)};_.Re=function CGc(){return new Jyc(this.f.g,this.f.f)};_.Se=function DGc(){return this.g};_.ye=function EGc(a){return BOc(this.f,a)};_.Te=function FGc(a){rPc(this.f,a.a);sPc(this.f,a.b)};_.Ue=function GGc(a){qPc(this.f,a.a);oPc(this.f,a.b)};_.Ve=function HGc(a){this.g=a};_.g=0;var yGc;var QU=k4(CSd,'ElkGraphAdapters/AbstractElkGraphElementAdapter',490);c3(491,1,{741:1},IGc);_.We=function JGc(){var a,b;if(!this.b){this.b=Ur(_Oc(this.a).i);for(b=new a0c(_Oc(this.a));b.e!=b.i._b();){a=kA($_c(b),137);tbb(this.b,new NGc(a))}}return this.b};_.b=null;var RU=k4(CSd,'ElkGraphAdapters/ElkEdgeAdapter',491);c3(562,490,{},LGc);_.Xe=function MGc(){return KGc(this)};_.a=null;var SU=k4(CSd,'ElkGraphAdapters/ElkGraphAdapter',562);c3(564,490,{271:1},NGc);var TU=k4(CSd,'ElkGraphAdapters/ElkLabelAdapter',564);c3(563,490,{739:1},QGc);_.We=function TGc(){return OGc(this)};_.$e=function UGc(){var a;return a=kA(AOc(this.f,($Ac(),bAc)),135),!a&&(a=new mGb),a};_.af=function WGc(){return PGc(this)};_.cf=function YGc(a){var b;b=new pGb(a);COc(this.f,($Ac(),bAc),b)};_.df=function ZGc(a){COc(this.f,($Ac(),oAc),new ZGb(a))};_.Ye=function RGc(){return this.d};_.Ze=function SGc(){var a,b;if(!this.a){this.a=new Gbb;for(b=kl(SWc(kA(this.f,35)));So(b);){a=kA(To(b),105);tbb(this.a,new IGc(a))}}return this.a};_._e=function VGc(){var a,b;if(!this.c){this.c=new Gbb;for(b=kl(TWc(kA(this.f,35)));So(b);){a=kA(To(b),105);tbb(this.c,new IGc(a))}}return this.c};_.bf=function XGc(){return YSc(kA(this.f,35)).i!=0||Vpb(mA(kA(this.f,35).xe(($Ac(),Yzc))))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var UU=k4(CSd,'ElkGraphAdapters/ElkNodeAdapter',563);c3(997,490,{740:1},_Gc);_.We=function bHc(){return $Gc(this)};_.Ze=function aHc(){var a,b;if(!this.a){this.a=Tr(kA(this.f,121).Tf().i);for(b=new a0c(kA(this.f,121).Tf());b.e!=b.i._b();){a=kA($_c(b),105);tbb(this.a,new IGc(a))}}return this.a};_._e=function cHc(){var a,b;if(!this.c){this.c=Tr(kA(this.f,121).Uf().i);for(b=new a0c(kA(this.f,121).Uf());b.e!=b.i._b();){a=kA($_c(b),105);tbb(this.c,new IGc(a))}}return this.c};_.ef=function dHc(){return kA(kA(this.f,121).xe(($Ac(),HAc)),69)};_.ff=function eHc(){var a,b,c,d,e,f,g,h;d=mTc(kA(this.f,121));for(c=new a0c(kA(this.f,121).Uf());c.e!=c.i._b();){a=kA($_c(c),105);for(h=new a0c((!a.c&&(a.c=new pxd(HV,a,5,8)),a.c));h.e!=h.i._b();){g=kA($_c(h),97);if(dXc(UWc(g),d)){return true}else if(UWc(g)==d&&Vpb(mA(AOc(a,($Ac(),Zzc))))){return true}}}for(b=new a0c(kA(this.f,121).Tf());b.e!=b.i._b();){a=kA($_c(b),105);for(f=new a0c((!a.b&&(a.b=new pxd(HV,a,4,7)),a.b));f.e!=f.i._b();){e=kA($_c(f),97);if(dXc(UWc(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var VU=k4(CSd,'ElkGraphAdapters/ElkPortAdapter',997);c3(265,23,{3:1,34:1,23:1,265:1},lHc);var fHc,gHc,hHc,iHc;var WU=l4(DSd,'LabelSide',265,zE,nHc,mHc);var oHc;c3(676,1,{},sHc);_.td=function tHc(a){rHc(kA(a,739),true,false)};var XU=k4(DSd,'NodeLabelAndSizeCalculator/lambda$0$Type',676);c3(571,1,{},AHc);_.b=true;_.c=true;_.d=true;_.e=true;var YU=k4(DSd,lOd,571);c3(171,1,{171:1});_.j=false;_.k=false;var $U=k4(ESd,'Cell',171);c3(114,171,{114:1,171:1},EHc);_.Pf=function FHc(){return DHc(this)};_.Qf=function GHc(){var a;a=this.n;return this.a.a+a.b+a.c};var ZU=k4(ESd,'AtomicCell',114);c3(203,23,{3:1,34:1,23:1,203:1},LHc);var HHc,IHc,JHc;var _U=l4(ESd,'ContainerArea',203,zE,NHc,MHc);var OHc;c3(307,171,FSd);var aV=k4(ESd,'ContainerCell',307);c3(1179,307,FSd,hIc);_.Pf=function iIc(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].Pf()):(a=gIc(this,cIc(this,true)));return a>0?a+this.n.d+this.n.a:0};_.Qf=function jIc(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Qf())}else if(this.g){e=gIc(this,aIc(this,null,true))}else{for(b=(KHc(),xz(pz(_U,1),jKd,203,0,[HHc,IHc,JHc])),c=0,d=b.length;c0?e+this.n.b+this.n.c:0};_.Rf=function kIc(){var a,b,c,d,e;if(this.g){a=aIc(this,null,false);for(c=(KHc(),xz(pz(_U,1),jKd,203,0,[HHc,IHc,JHc])),d=0,e=c.length;d0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);YHc(this,IHc,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var VHc=0,WHc=0;var bV=k4(ESd,'GridContainerCell',1179);c3(419,23,{3:1,34:1,23:1,419:1},qIc);var mIc,nIc,oIc;var cV=l4(ESd,'HorizontalLabelAlignment',419,zE,sIc,rIc);var tIc;c3(267,171,{171:1,267:1},EIc,FIc,GIc);_.Pf=function HIc(){return AIc(this)};_.Qf=function IIc(){return BIc(this)};_.a=0;_.c=false;var dV=k4(ESd,'LabelCell',267);c3(219,307,{171:1,307:1,219:1},QIc);_.Pf=function RIc(){return JIc(this)};_.Qf=function SIc(){return KIc(this)};_.Rf=function TIc(){LIc(this)};_.Sf=function UIc(){MIc(this)};_.b=0;_.c=0;_.d=false;var iV=k4(ESd,'StripContainerCell',219);c3(1394,1,SLd,VIc);_.Nb=function WIc(a){return !!kA(a,171)&&kA(a,171).k};var eV=k4(ESd,'StripContainerCell/lambda$0$Type',1394);c3(1395,1,{},XIc);_.oe=function YIc(a){return kA(a,171).Qf()};var fV=k4(ESd,'StripContainerCell/lambda$1$Type',1395);c3(1396,1,SLd,ZIc);_.Nb=function $Ic(a){return !!kA(a,171)&&kA(a,171).j};var gV=k4(ESd,'StripContainerCell/lambda$2$Type',1396);c3(1397,1,{},_Ic);_.oe=function aJc(a){return kA(a,171).Pf()};var hV=k4(ESd,'StripContainerCell/lambda$3$Type',1397);c3(420,23,{3:1,34:1,23:1,420:1},fJc);var bJc,cJc,dJc;var jV=l4(ESd,'VerticalLabelAlignment',420,zE,hJc,gJc);var iJc;c3(697,1,{},lJc);_.c=0;_.d=0;_.k=0;_.s=0;_.u=0;_.B=false;var mV=k4(HSd,'NodeContext',697);c3(1177,1,lKd,oJc);_.Fb=function qJc(a){return this===a};_.Md=function rJc(){return new jfb(this)};_.Ld=function pJc(a,b){return nJc(kA(a,69),kA(b,69))};var kV=k4(HSd,'NodeContext/0methodref$comparePortSides$Type',1177);c3(1178,1,lKd,sJc);_.Fb=function uJc(a){return this===a};_.Md=function vJc(){return new jfb(this)};_.Ld=function tJc(a,b){return mJc(kA(a,111),kA(b,111))};var lV=k4(HSd,'NodeContext/1methodref$comparePortContexts$Type',1178);c3(147,23,{3:1,34:1,23:1,147:1},VJc);var wJc,xJc,yJc,zJc,AJc,BJc,CJc,DJc,EJc,FJc,GJc,HJc,IJc,JJc,KJc,LJc,MJc,NJc,OJc,PJc,QJc,RJc;var nV=l4(HSd,'NodeLabelLocation',147,zE,YJc,XJc);var ZJc;c3(111,1,{111:1},aKc);var oV=k4(HSd,'PortContext',111);c3(1182,1,{},mKc);_.oe=function nKc(a){return !kA(a,111).c?0:BIc(kA(a,111).c)};var pV=k4(ISd,'HorizontalPortPlacementSizeCalculator/lambda$0$Type',1182);c3(1184,1,{},vKc);_.td=function wKc(a){yIc(kA(a,267))};var qV=k4(ISd,'LabelPlacer/lambda$0$Type',1184);c3(1185,1,SLd,xKc);_.Nb=function yKc(a){return !!kA(a,111).c};var rV=k4(ISd,'LabelPlacer/lambda$1$Type',1185);c3(1186,1,{},zKc);_.td=function AKc(a){yIc(kA(a,111).c)};var sV=k4(ISd,'LabelPlacer/lambda$2$Type',1186);var BKc;c3(1181,1,{},HKc);_.td=function IKc(a){CKc();_Jc(kA(a,111))};var tV=k4(ISd,'NodeLabelAndSizeUtilities/lambda$0$Type',1181);c3(698,1,{},NKc);_.td=function OKc(a){LKc(this.a,this.b,a)};_.b=false;var uV=k4(ISd,'NodeLabelCellCreator/lambda$0$Type',698);c3(1180,1,{},UKc);_.td=function VKc(a){TKc(this.a,a)};var vV=k4(ISd,'PortContextCreator/lambda$0$Type',1180);var aLc;c3(1183,1,{},tLc);_.oe=function uLc(a){return !kA(a,111).c?0:AIc(kA(a,111).c)};var wV=k4(ISd,'VerticalPortPlacementSizeCalculator/lambda$0$Type',1183);c3(1525,1,{},wLc);var yV=k4(JSd,'GreedyRectangleStripOverlapRemover',1525);c3(1526,1,lKd,yLc);_.Fb=function ALc(a){return this===a};_.Md=function BLc(){return new jfb(this)};_.Ld=function zLc(a,b){return xLc(kA(a,194),kA(b,194))};var xV=k4(JSd,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1526);c3(1497,1,{},ILc);_.a=5;_.e=0;var EV=k4(JSd,'RectangleStripOverlapRemover',1497);c3(1498,1,lKd,MLc);_.Fb=function OLc(a){return this===a};_.Md=function PLc(){return new jfb(this)};_.Ld=function NLc(a,b){return JLc(kA(a,194),kA(b,194))};var zV=k4(JSd,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1498);c3(1500,1,lKd,QLc);_.Fb=function SLc(a){return this===a};_.Md=function TLc(){return new jfb(this)};_.Ld=function RLc(a,b){return KLc(kA(a,194),kA(b,194))};var AV=k4(JSd,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1500);c3(374,23,{3:1,34:1,23:1,374:1},ZLc);var ULc,VLc,WLc,XLc;var BV=l4(JSd,'RectangleStripOverlapRemover/OverlapRemovalDirection',374,zE,_Lc,$Lc);var aMc;c3(194,1,{194:1},cMc);var CV=k4(JSd,'RectangleStripOverlapRemover/RectangleNode',194);c3(1499,1,{},dMc);_.td=function eMc(a){DLc(this.a,kA(a,194))};var DV=k4(JSd,'RectangleStripOverlapRemover/lambda$0$Type',1499);var sY=m4(KSd,'EObject');var FV=m4(LSd,MSd);var GV=m4(LSd,NSd);var KV=m4(LSd,OSd);var OV=m4(LSd,'ElkShape');var HV=m4(LSd,PSd);var JV=m4(LSd,QSd);var IV=m4(LSd,RSd);var qY=m4(KSd,SSd);var oY=m4(KSd,'EFactory');var fMc;var rY=m4(KSd,TSd);var uY=m4(KSd,'EPackage');var hMc;var jMc,kMc,lMc,mMc,nMc,oMc,pMc,qMc,rMc,sMc,tMc;var LV=m4(LSd,USd);var MV=m4(LSd,VSd);var NV=m4(LSd,WSd);c3(87,1,XSd);_.cg=function wMc(){this.dg();return null};_.dg=function xMc(){return null};_.eg=function yMc(){return this.dg(),false};_.fg=function zMc(){return false};_.gg=function AMc(a){vMc(this,a)};var hX=k4(YSd,'BasicNotifierImpl',87);c3(92,87,cTd);_.Hg=function DNc(){return PMc(this)};_.hg=function bNc(a,b){return a};_.ig=function cNc(){throw x2(new U6)};_.jg=function dNc(a){var b;return b=Wkd(kA(Gbd(this.mg(),this.og()),17)),this.yg().Cg(this,b.n,b.f,a)};_.kg=function eNc(a,b){throw x2(new U6)};_.lg=function fNc(a,b,c){return CMc(this,a,b,c)};_.mg=function gNc(){var a;if(this.ig()){a=this.ig().pj();if(a){return a}}return this.Rg()};_.ng=function hNc(){return DMc(this)};_.og=function iNc(){throw x2(new U6)};_.pg=function kNc(){var a,b;b=this.Jg().qj();!b&&this.ig().vj(b=(Ohd(),a=Xdd(Cbd(this.mg())),a==null?Nhd:new Rhd(this,a)));return b};_.qg=function mNc(a,b){return a};_.rg=function nNc(a){var b;b=a.Vi();return !b?Mbd(this.mg(),a):a.pi()};_.sg=function oNc(){var a;a=this.ig();return !a?null:a.sj()};_.tg=function pNc(){return !this.ig()?null:this.ig().pj()};_.ug=function qNc(a,b,c){return HMc(this,a,b,c)};_.vg=function rNc(a){return IMc(this,a)};_.wg=function sNc(a,b){return JMc(this,a,b)};_.xg=function tNc(){var a;a=this.ig();return !!a&&a.tj()};_.yg=function uNc(){throw x2(new U6)};_.zg=function vNc(){return LMc(this)};_.Ag=function wNc(a,b,c,d){return MMc(this,a,b,d)};_.Bg=function xNc(a,b,c){var d;return d=kA(Gbd(this.mg(),b),61),d.aj().dj(this,this.Qg(),b-this.Sg(),a,c)};_.Cg=function yNc(a,b,c,d){return NMc(this,a,b,d)};_.Dg=function zNc(a,b,c){var d;return d=kA(Gbd(this.mg(),b),61),d.aj().ej(this,this.Qg(),b-this.Sg(),a,c)};_.Eg=function ANc(){return !!this.ig()&&(this.ig().rj(),false)};_.Fg=function BNc(a){return OMc(this,a)};_.Gg=function CNc(a){var b;return b=this.rg(a),b>=0?this.Fg(b):UMc(this,a)};_.Ig=function ENc(a){return SMc(this,a)};_.Jg=function FNc(){throw x2(new U6)};_.Kg=function GNc(){return !this.ig()?null:this.ig().rj()};_.Lg=function HNc(){return LMc(this)};_.Mg=function INc(a,b){YMc(this,a,b)};_.Ng=function JNc(a){this.Jg().uj(a)};_.Og=function KNc(a){this.Jg().wj(a)};_.Pg=function LNc(a,b){var c,d,e,f;f=this.sg();if(!!f&&!!a){b=q_c(f.fk(),this,b);f.jk(this)}d=this.yg();if(d){if((jNc(this,this.yg(),this.og()).Bb&sLd)!=0){e=d.zg();!!e&&(!a?e.ik(this):!f&&e.jk(this))}else{b=(c=this.og(),c>=0?this.jg(b):this.yg().Cg(this,-1-c,null,b));b=this.lg(null,-1,b)}}this.Og(a);return b};_.Qg=function MNc(){return $Mc(this)};_.Rg=function NNc(){return (P6c(),O6c).S};_.Sg=function ONc(){return Lbd(this.Rg())};_.Ib=function PNc(){return aNc(this)};var GY=k4(dTd,'BasicEObjectImpl',92);var B6c;c3(107,92,{95:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1});_.Tg=function YNc(a){var b;b=SNc(this);return b[a]};_.Ug=function ZNc(a,b){var c;c=SNc(this);wz(c,a,b)};_.Vg=function $Nc(a){var b;b=SNc(this);wz(b,a,null)};_.cg=function _Nc(){return kA(VNc(this,4),116)};_.dg=function aOc(){throw x2(new U6)};_.eg=function bOc(){return (this.Db&4)!=0};_.ig=function cOc(){throw x2(new U6)};_.Wg=function dOc(a){XNc(this,2,a)};_.kg=function eOc(a,b){this.Db=b<<16|this.Db&255;this.Wg(a)};_.mg=function fOc(){return RNc(this)};_.og=function gOc(){return this.Db>>16};_.pg=function hOc(){var a,b;return Ohd(),b=Xdd(Cbd((a=kA(VNc(this,16),24),!a?this.Rg():a))),b==null?(null,Nhd):new Rhd(this,b)};_.fg=function iOc(){return (this.Db&1)==0};_.sg=function jOc(){return kA(VNc(this,128),1628)};_.tg=function kOc(){return kA(VNc(this,16),24)};_.xg=function lOc(){return (this.Db&32)!=0};_.yg=function mOc(){return kA(VNc(this,2),42)};_.Eg=function nOc(){return (this.Db&64)!=0};_.Jg=function oOc(){throw x2(new U6)};_.Kg=function pOc(){return kA(VNc(this,64),261)};_.Ng=function qOc(a){XNc(this,16,a)};_.Og=function rOc(a){XNc(this,128,a)};_.Qg=function sOc(){return TNc(this)};_.Db=0;var v_=k4(dTd,'MinimalEObjectImpl',107);c3(108,107,{95:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1});_.Wg=function tOc(a){this.Cb=a};_.yg=function uOc(){return this.Cb};var u_=k4(dTd,'MinimalEObjectImpl/Container',108);c3(1676,108,{95:1,379:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1});_.ve=function DOc(a){!this.o&&(this.o=new T8c((uMc(),rMc),$V,this,0));Z1c(this.o,!a.p?(bdb(),bdb(),_cb):a.p);return this};_.ug=function EOc(a,b,c){return vOc(this,a,b,c)};_.Dg=function FOc(a,b,c){return wOc(this,a,b,c)};_.Fg=function GOc(a){return xOc(this,a)};_.Mg=function HOc(a,b){yOc(this,a,b)};_.Rg=function IOc(){return uMc(),tMc};_.we=function JOc(){return zOc(this)};_.xe=function KOc(a){return AOc(this,a)};_.ye=function LOc(a){return BOc(this,a)};_.ze=function MOc(a,b){return COc(this,a,b)};var PV=k4(eTd,'EMapPropertyHolderImpl',1676);c3(502,108,{95:1,531:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1},QOc);_.ug=function ROc(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return HMc(this,a,b,c)};_.Fg=function SOc(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return OMc(this,a)};_.Mg=function TOc(a,b){switch(a){case 0:OOc(this,Vpb(nA(b)));return;case 1:POc(this,Vpb(nA(b)));return;}YMc(this,a,b)};_.Rg=function UOc(){return uMc(),jMc};_.Ib=function VOc(){var a;if((this.Db&64)!=0)return aNc(this);a=new B6(aNc(this));a.a+=' (x: ';t6(a,this.a);a.a+=', y: ';t6(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var QV=k4(eTd,'ElkBendPointImpl',502);c3(651,1676,{95:1,379:1,253:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1});_.ug=function cPc(a,b,c){return WOc(this,a,b,c)};_.Bg=function dPc(a,b,c){return XOc(this,a,b,c)};_.Dg=function ePc(a,b,c){return YOc(this,a,b,c)};_.Fg=function fPc(a){return ZOc(this,a)};_.Mg=function gPc(a,b){$Oc(this,a,b)};_.Rg=function hPc(){return uMc(),nMc};_.Vf=function iPc(){return _Oc(this)};_.Ib=function jPc(){return bPc(this)};_.k=null;var UV=k4(eTd,'ElkGraphElementImpl',651);c3(652,651,{95:1,379:1,253:1,429:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1});_.ug=function uPc(a,b,c){return kPc(this,a,b,c)};_.Fg=function vPc(a){return lPc(this,a)};_.Mg=function wPc(a,b){mPc(this,a,b)};_.Rg=function xPc(){return uMc(),sMc};_.Wf=function yPc(){return this.f};_.Xf=function zPc(){return this.g};_.Yf=function APc(){return this.i};_.Zf=function BPc(){return this.j};_.$f=function CPc(a,b){nPc(this,a,b)};_._f=function DPc(a,b){pPc(this,a,b)};_.ag=function EPc(a){rPc(this,a)};_.bg=function FPc(a){sPc(this,a)};_.Ib=function GPc(){return tPc(this)};_.f=0;_.g=0;_.i=0;_.j=0;var _V=k4(eTd,'ElkShapeImpl',652);c3(653,652,{95:1,379:1,97:1,253:1,429:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1});_.ug=function NPc(a,b,c){return HPc(this,a,b,c)};_.Bg=function OPc(a,b,c){return IPc(this,a,b,c)};_.Dg=function PPc(a,b,c){return JPc(this,a,b,c)};_.Fg=function QPc(a){return KPc(this,a)};_.Mg=function RPc(a,b){LPc(this,a,b)};_.Rg=function SPc(){return uMc(),kMc};_.Tf=function TPc(){return !this.d&&(this.d=new pxd(JV,this,8,5)),this.d};_.Uf=function UPc(){return !this.e&&(this.e=new pxd(JV,this,7,4)),this.e};var RV=k4(eTd,'ElkConnectableShapeImpl',653);c3(183,651,{95:1,379:1,105:1,253:1,183:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1},cQc);_.jg=function dQc(a){return WPc(this,a)};_.ug=function eQc(a,b,c){switch(a){case 3:return XPc(this);case 4:return !this.b&&(this.b=new pxd(HV,this,4,7)),this.b;case 5:return !this.c&&(this.c=new pxd(HV,this,5,8)),this.c;case 6:return !this.a&&(this.a=new zkd(IV,this,6,6)),this.a;case 7:return B3(),!this.b&&(this.b=new pxd(HV,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new pxd(HV,this,5,8)),this.c.i<=1)?false:true;case 8:return B3(),$Pc(this)?true:false;case 9:return B3(),_Pc(this)?true:false;case 10:return B3(),!this.b&&(this.b=new pxd(HV,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new pxd(HV,this,5,8)),this.c.i!=0)?true:false;}return WOc(this,a,b,c)};_.Bg=function fQc(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?WPc(this,c):this.Cb.Cg(this,-1-d,null,c)));return VPc(this,kA(a,35),c);case 4:return !this.b&&(this.b=new pxd(HV,this,4,7)),p_c(this.b,a,c);case 5:return !this.c&&(this.c=new pxd(HV,this,5,8)),p_c(this.c,a,c);case 6:return !this.a&&(this.a=new zkd(IV,this,6,6)),p_c(this.a,a,c);}return XOc(this,a,b,c)};_.Dg=function gQc(a,b,c){switch(b){case 3:return VPc(this,null,c);case 4:return !this.b&&(this.b=new pxd(HV,this,4,7)),q_c(this.b,a,c);case 5:return !this.c&&(this.c=new pxd(HV,this,5,8)),q_c(this.c,a,c);case 6:return !this.a&&(this.a=new zkd(IV,this,6,6)),q_c(this.a,a,c);}return YOc(this,a,b,c)};_.Fg=function hQc(a){switch(a){case 3:return !!XPc(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new pxd(HV,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new pxd(HV,this,5,8)),this.c.i<=1));case 8:return $Pc(this);case 9:return _Pc(this);case 10:return !this.b&&(this.b=new pxd(HV,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new pxd(HV,this,5,8)),this.c.i!=0);}return ZOc(this,a)};_.Mg=function iQc(a,b){switch(a){case 3:aQc(this,kA(b,35));return;case 4:!this.b&&(this.b=new pxd(HV,this,4,7));r_c(this.b);!this.b&&(this.b=new pxd(HV,this,4,7));gXc(this.b,kA(b,13));return;case 5:!this.c&&(this.c=new pxd(HV,this,5,8));r_c(this.c);!this.c&&(this.c=new pxd(HV,this,5,8));gXc(this.c,kA(b,13));return;case 6:!this.a&&(this.a=new zkd(IV,this,6,6));r_c(this.a);!this.a&&(this.a=new zkd(IV,this,6,6));gXc(this.a,kA(b,13));return;}$Oc(this,a,b)};_.Rg=function jQc(){return uMc(),lMc};_.Ib=function kQc(){return bQc(this)};var SV=k4(eTd,'ElkEdgeImpl',183);c3(405,1676,{95:1,379:1,270:1,405:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1},BQc);_.jg=function CQc(a){return mQc(this,a)};_.ug=function DQc(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new fdd(GV,this,5)),this.a;case 6:return pQc(this);case 7:if(b)return oQc(this);return this.i;case 8:if(b)return nQc(this);return this.f;case 9:return !this.g&&(this.g=new pxd(IV,this,9,10)),this.g;case 10:return !this.e&&(this.e=new pxd(IV,this,10,9)),this.e;case 11:return this.d;}return vOc(this,a,b,c)};_.Bg=function EQc(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQc(this,c):this.Cb.Cg(this,-1-e,null,c)));return lQc(this,kA(a,105),c);case 9:return !this.g&&(this.g=new pxd(IV,this,9,10)),p_c(this.g,a,c);case 10:return !this.e&&(this.e=new pxd(IV,this,10,9)),p_c(this.e,a,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(uMc(),mMc):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((uMc(),mMc)),a,c)};_.Dg=function FQc(a,b,c){switch(b){case 5:return !this.a&&(this.a=new fdd(GV,this,5)),q_c(this.a,a,c);case 6:return lQc(this,null,c);case 9:return !this.g&&(this.g=new pxd(IV,this,9,10)),q_c(this.g,a,c);case 10:return !this.e&&(this.e=new pxd(IV,this,10,9)),q_c(this.e,a,c);}return wOc(this,a,b,c)};_.Fg=function GQc(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!pQc(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return xOc(this,a)};_.Mg=function HQc(a,b){switch(a){case 1:yQc(this,Vpb(nA(b)));return;case 2:zQc(this,Vpb(nA(b)));return;case 3:rQc(this,Vpb(nA(b)));return;case 4:sQc(this,Vpb(nA(b)));return;case 5:!this.a&&(this.a=new fdd(GV,this,5));r_c(this.a);!this.a&&(this.a=new fdd(GV,this,5));gXc(this.a,kA(b,13));return;case 6:wQc(this,kA(b,105));return;case 7:vQc(this,kA(b,97));return;case 8:uQc(this,kA(b,97));return;case 9:!this.g&&(this.g=new pxd(IV,this,9,10));r_c(this.g);!this.g&&(this.g=new pxd(IV,this,9,10));gXc(this.g,kA(b,13));return;case 10:!this.e&&(this.e=new pxd(IV,this,10,9));r_c(this.e);!this.e&&(this.e=new pxd(IV,this,10,9));gXc(this.e,kA(b,13));return;case 11:tQc(this,pA(b));return;}yOc(this,a,b)};_.Rg=function IQc(){return uMc(),mMc};_.Ib=function JQc(){return AQc(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var TV=k4(eTd,'ElkEdgeSectionImpl',405);c3(142,108,{95:1,91:1,87:1,139:1,51:1,103:1,42:1,92:1,142:1,107:1,108:1});_.ug=function NQc(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab}return EMc(this,a-Lbd(this.Rg()),Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),a),b,c)};_.Bg=function OQc(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c)}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),e.aj().dj(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Dg=function PQc(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c)}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),e.aj().ej(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Fg=function QQc(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return FMc(this,a-Lbd(this.Rg()),Gbd((b=kA(VNc(this,16),24),!b?this.Rg():b),a))};_.Ig=function RQc(a){return KQc(this,a)};_.Mg=function SQc(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;}GMc(this,a-Lbd(this.Rg()),Gbd((c=kA(VNc(this,16),24),!c?this.Rg():c),a),b)};_.Og=function TQc(a){XNc(this,128,a)};_.Rg=function UQc(){return j7c(),$6c};_.Xg=function VQc(){this.Bb|=1};_.Yg=function WQc(a){return MQc(this,a)};_.Bb=0;var kZ=k4(dTd,'EModelElementImpl',142);c3(638,142,{95:1,91:1,87:1,430:1,139:1,51:1,103:1,42:1,92:1,142:1,107:1,108:1},gRc);_.Zg=function hRc(a,b){return bRc(this,a,b)};_.$g=function iRc(a){var b,c,d,e,f;if(this.a!=Nad(a)||(a.Bb&256)!=0){throw x2(new O4(kTd+a.zb+hTd))}for(d=Kbd(a);Ebd(d.a).i!=0;){c=kA(Ved(d,0,(b=kA(WXc(Ebd(d.a),0),84),f=b.c,sA(f,96)?kA(f,24):(j7c(),a7c))),24);if(Pad(c)){e=Nad(c).dh().$g(c);kA(e,42).Ng(a);return e}d=Kbd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new d8c(a):new T7c(a)};_._g=function jRc(a,b){return cRc(this,a,b)};_.ug=function kRc(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.a;}return EMc(this,a-Lbd((j7c(),X6c)),Gbd((d=kA(VNc(this,16),24),!d?X6c:d),a),b,c)};_.Bg=function lRc(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 1:!!this.a&&(c=kA(this.a,42).Cg(this,4,uY,c));return _Qc(this,kA(a,207),c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),X6c):d),b),61),e.aj().dj(this,TNc(this),b-Lbd((j7c(),X6c)),a,c)};_.Dg=function mRc(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 1:return _Qc(this,null,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),X6c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),X6c)),a,c)};_.Fg=function nRc(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return FMc(this,a-Lbd((j7c(),X6c)),Gbd((b=kA(VNc(this,16),24),!b?X6c:b),a))};_.Mg=function oRc(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:eRc(this,kA(b,207));return;}GMc(this,a-Lbd((j7c(),X6c)),Gbd((c=kA(VNc(this,16),24),!c?X6c:c),a),b)};_.Rg=function pRc(){return j7c(),X6c};var XQc,YQc,ZQc;var iZ=k4(dTd,'EFactoryImpl',638);c3(914,638,{95:1,1698:1,91:1,87:1,430:1,139:1,51:1,103:1,42:1,92:1,142:1,107:1,108:1},rRc);_.Zg=function sRc(a,b){switch(a.Ni()){case 12:return kA(b,166).Lf();case 13:return f3(b);default:throw x2(new O4(gTd+a.be()+hTd));}};_.$g=function tRc(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=Nad(a),b?pcd(b.bh(),a):-1)),a.G){case 4:return f=new NSc,f;case 6:return g=new bTc,g;case 7:return h=new pTc,h;case 8:return d=new cQc,d;case 9:return c=new QOc,c;case 10:return e=new BQc,e;case 11:return i=new ATc,i;default:throw x2(new O4(kTd+a.zb+hTd));}};_._g=function uRc(a,b){switch(a.Ni()){case 13:case 12:return null;default:throw x2(new O4(gTd+a.be()+hTd));}};var VV=k4(eTd,'ElkGraphFactoryImpl',914);c3(399,142,{95:1,91:1,87:1,139:1,174:1,51:1,103:1,42:1,92:1,142:1,107:1,108:1});_.pg=function yRc(){var a,b;b=(a=kA(VNc(this,16),24),Xdd(Cbd(!a?this.Rg():a)));return b==null?(Ohd(),Ohd(),Nhd):new did(this,b)};_.ug=function zRc(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.be();}return EMc(this,a-Lbd(this.Rg()),Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),a),b,c)};_.Fg=function ARc(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return FMc(this,a-Lbd(this.Rg()),Gbd((b=kA(VNc(this,16),24),!b?this.Rg():b),a))};_.Mg=function BRc(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:this.ah(pA(b));return;}GMc(this,a-Lbd(this.Rg()),Gbd((c=kA(VNc(this,16),24),!c?this.Rg():c),a),b)};_.Rg=function CRc(){return j7c(),_6c};_.be=function DRc(){return this.zb};_.ah=function ERc(a){wRc(this,a)};_.Ib=function FRc(){return xRc(this)};_.zb=null;var oZ=k4(dTd,'ENamedElementImpl',399);c3(248,399,{95:1,91:1,87:1,139:1,174:1,51:1,207:1,103:1,42:1,92:1,142:1,248:1,107:1,108:1,613:1},kSc);_.jg=function mSc(a){return YRc(this,a)};_.ug=function nSc(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new Gkd(this,jY,this)),this.rb;case 6:return !this.vb&&(this.vb=new Dkd(uY,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?kA(this.Cb,207):null;return ORc(this);}return EMc(this,a-Lbd((j7c(),c7c)),Gbd((d=kA(VNc(this,16),24),!d?c7c:d),a),b,c)};_.Bg=function oSc(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 4:!!this.sb&&(c=kA(this.sb,42).Cg(this,1,oY,c));return PRc(this,kA(a,430),c);case 5:return !this.rb&&(this.rb=new Gkd(this,jY,this)),p_c(this.rb,a,c);case 6:return !this.vb&&(this.vb=new Dkd(uY,this,6,7)),p_c(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?YRc(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,7,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),c7c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),c7c)),a,c)};_.Dg=function pSc(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 4:return PRc(this,null,c);case 5:return !this.rb&&(this.rb=new Gkd(this,jY,this)),q_c(this.rb,a,c);case 6:return !this.vb&&(this.vb=new Dkd(uY,this,6,7)),q_c(this.vb,a,c);case 7:return CMc(this,null,7,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),c7c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),c7c)),a,c)};_.Fg=function qSc(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!ORc(this);}return FMc(this,a-Lbd((j7c(),c7c)),Gbd((b=kA(VNc(this,16),24),!b?c7c:b),a))};_.Ig=function rSc(a){var b;b=$Rc(this,a);return b?b:KQc(this,a)};_.Mg=function sSc(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:wRc(this,pA(b));return;case 2:jSc(this,pA(b));return;case 3:iSc(this,pA(b));return;case 4:hSc(this,kA(b,430));return;case 5:!this.rb&&(this.rb=new Gkd(this,jY,this));r_c(this.rb);!this.rb&&(this.rb=new Gkd(this,jY,this));gXc(this.rb,kA(b,13));return;case 6:!this.vb&&(this.vb=new Dkd(uY,this,6,7));r_c(this.vb);!this.vb&&(this.vb=new Dkd(uY,this,6,7));gXc(this.vb,kA(b,13));return;}GMc(this,a-Lbd((j7c(),c7c)),Gbd((c=kA(VNc(this,16),24),!c?c7c:c),a),b)};_.Rg=function tSc(){return j7c(),c7c};_.Xg=function uSc(){ZRc(this)};_.bh=function vSc(){return !this.rb&&(this.rb=new Gkd(this,jY,this)),this.rb};_.dh=function wSc(){return this.sb};_.eh=function xSc(){return this.ub};_.fh=function ySc(){return this.xb};_.gh=function zSc(){return this.yb};_.hh=function ASc(a){this.ub=a};_.Ib=function BSc(){var a;if((this.Db&64)!=0)return xRc(this);a=new B6(xRc(this));a.a+=' (nsURI: ';w6(a,this.yb);a.a+=', nsPrefix: ';w6(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var GRc;var yZ=k4(dTd,'EPackageImpl',248);c3(506,248,{95:1,1702:1,506:1,91:1,87:1,139:1,174:1,51:1,207:1,103:1,42:1,92:1,142:1,248:1,107:1,108:1,613:1},FSc);_.q=false;_.r=false;var CSc=false;var WV=k4(eTd,'ElkGraphPackageImpl',506);c3(263,652,{95:1,379:1,253:1,137:1,429:1,263:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1},NSc);_.jg=function OSc(a){return ISc(this,a)};_.ug=function PSc(a,b,c){switch(a){case 7:return JSc(this);case 8:return this.a;}return kPc(this,a,b,c)};_.Bg=function QSc(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?ISc(this,c):this.Cb.Cg(this,-1-d,null,c)));return HSc(this,kA(a,253),c);}return XOc(this,a,b,c)};_.Dg=function RSc(a,b,c){if(b==7){return HSc(this,null,c)}return YOc(this,a,b,c)};_.Fg=function SSc(a){switch(a){case 7:return !!JSc(this);case 8:return !Z5('',this.a);}return lPc(this,a)};_.Mg=function TSc(a,b){switch(a){case 7:KSc(this,kA(b,253));return;case 8:LSc(this,pA(b));return;}mPc(this,a,b)};_.Rg=function USc(){return uMc(),oMc};_.Ib=function VSc(){return MSc(this)};_.a='';var XV=k4(eTd,'ElkLabelImpl',263);c3(246,653,{95:1,379:1,97:1,253:1,35:1,429:1,246:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1},bTc);_.jg=function cTc(a){return XSc(this,a)};_.ug=function dTc(a,b,c){switch(a){case 9:return !this.c&&(this.c=new zkd(NV,this,9,9)),this.c;case 10:return !this.a&&(this.a=new zkd(MV,this,10,11)),this.a;case 11:return ZSc(this);case 12:return !this.b&&(this.b=new zkd(JV,this,12,3)),this.b;case 13:return B3(),!this.a&&(this.a=new zkd(MV,this,10,11)),this.a.i>0?true:false;}return HPc(this,a,b,c)};_.Bg=function eTc(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new zkd(NV,this,9,9)),p_c(this.c,a,c);case 10:return !this.a&&(this.a=new zkd(MV,this,10,11)),p_c(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?XSc(this,c):this.Cb.Cg(this,-1-d,null,c)));return WSc(this,kA(a,35),c);case 12:return !this.b&&(this.b=new zkd(JV,this,12,3)),p_c(this.b,a,c);}return IPc(this,a,b,c)};_.Dg=function fTc(a,b,c){switch(b){case 9:return !this.c&&(this.c=new zkd(NV,this,9,9)),q_c(this.c,a,c);case 10:return !this.a&&(this.a=new zkd(MV,this,10,11)),q_c(this.a,a,c);case 11:return WSc(this,null,c);case 12:return !this.b&&(this.b=new zkd(JV,this,12,3)),q_c(this.b,a,c);}return JPc(this,a,b,c)};_.Fg=function gTc(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!ZSc(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new zkd(MV,this,10,11)),this.a.i>0;}return KPc(this,a)};_.Mg=function hTc(a,b){switch(a){case 9:!this.c&&(this.c=new zkd(NV,this,9,9));r_c(this.c);!this.c&&(this.c=new zkd(NV,this,9,9));gXc(this.c,kA(b,13));return;case 10:!this.a&&(this.a=new zkd(MV,this,10,11));r_c(this.a);!this.a&&(this.a=new zkd(MV,this,10,11));gXc(this.a,kA(b,13));return;case 11:_Sc(this,kA(b,35));return;case 12:!this.b&&(this.b=new zkd(JV,this,12,3));r_c(this.b);!this.b&&(this.b=new zkd(JV,this,12,3));gXc(this.b,kA(b,13));return;}LPc(this,a,b)};_.Rg=function iTc(){return uMc(),pMc};_.Ib=function jTc(){return aTc(this)};var YV=k4(eTd,'ElkNodeImpl',246);c3(187,653,{95:1,379:1,97:1,253:1,121:1,429:1,187:1,93:1,91:1,87:1,51:1,103:1,42:1,92:1,107:1,108:1},pTc);_.jg=function qTc(a){return lTc(this,a)};_.ug=function rTc(a,b,c){if(a==9){return mTc(this)}return HPc(this,a,b,c)};_.Bg=function sTc(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lTc(this,c):this.Cb.Cg(this,-1-d,null,c)));return kTc(this,kA(a,35),c);}return IPc(this,a,b,c)};_.Dg=function tTc(a,b,c){if(b==9){return kTc(this,null,c)}return JPc(this,a,b,c)};_.Fg=function uTc(a){if(a==9){return !!mTc(this)}return KPc(this,a)};_.Mg=function vTc(a,b){switch(a){case 9:nTc(this,kA(b,35));return;}LPc(this,a,b)};_.Rg=function wTc(){return uMc(),qMc};_.Ib=function xTc(){return oTc(this)};var ZV=k4(eTd,'ElkPortImpl',187);var PX=m4(FTd,'BasicEMap/Entry');c3(966,108,{95:1,38:1,91:1,87:1,134:1,51:1,103:1,42:1,92:1,107:1,108:1},ATc);_.Fb=function FTc(a){return this===a};_.kc=function HTc(){return this.b};_.Hb=function JTc(){return bqb(this)};_.kh=function LTc(a){yTc(this,kA(a,166))};_.ug=function BTc(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return HMc(this,a,b,c)};_.Fg=function CTc(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return OMc(this,a)};_.Mg=function DTc(a,b){switch(a){case 0:yTc(this,kA(b,166));return;case 1:zTc(this,b);return;}YMc(this,a,b)};_.Rg=function ETc(){return uMc(),rMc};_.ih=function GTc(){var a;if(this.a==-1){a=this.b;this.a=!a?0:ob(a)}return this.a};_.lc=function ITc(){return this.c};_.jh=function KTc(a){this.a=a};_.mc=function MTc(a){var b;b=this.c;zTc(this,a);return b};_.Ib=function NTc(){var a;if((this.Db&64)!=0)return aNc(this);a=new M6;I6(I6(I6(a,this.b?this.b.Lf():mJd),' -> '),p6(this.c));return a.a};_.a=-1;_.c=null;var $V=k4(eTd,'ElkPropertyToValueMapEntryImpl',966);c3(876,1,{},_Tc);var aW=k4(ITd,'JsonAdapter',876);c3(186,54,rKd,aUc);var bW=k4(ITd,'JsonImportException',186);c3(754,1,{},cVc);var QW=k4(ITd,'JsonImporter',754);c3(792,1,{},dVc);var cW=k4(ITd,'JsonImporter/lambda$0$Type',792);c3(793,1,{},eVc);var dW=k4(ITd,'JsonImporter/lambda$1$Type',793);c3(816,1,{},fVc);var eW=k4(ITd,'JsonImporter/lambda$10$Type',816);c3(818,1,{},gVc);var fW=k4(ITd,'JsonImporter/lambda$11$Type',818);c3(819,1,{},hVc);_.td=function iVc(a){nUc(this.b,this.a,a)};var gW=k4(ITd,'JsonImporter/lambda$12$Type',819);c3(820,1,{},jVc);var hW=k4(ITd,'JsonImporter/lambda$13$Type',820);c3(821,1,{},kVc);var iW=k4(ITd,'JsonImporter/lambda$14$Type',821);c3(822,1,{},lVc);var jW=k4(ITd,'JsonImporter/lambda$15$Type',822);c3(823,1,{},mVc);var kW=k4(ITd,'JsonImporter/lambda$16$Type',823);c3(824,1,{},nVc);var lW=k4(ITd,'JsonImporter/lambda$17$Type',824);c3(825,1,{},oVc);var mW=k4(ITd,'JsonImporter/lambda$18$Type',825);c3(756,1,{},qVc);var nW=k4(ITd,'JsonImporter/lambda$19$Type',756);c3(794,1,{},rVc);var oW=k4(ITd,'JsonImporter/lambda$2$Type',794);c3(829,1,{},tVc);var pW=k4(ITd,'JsonImporter/lambda$20$Type',829);c3(830,1,{},uVc);_.td=function vVc(a){wUc(this.a,a)};var qW=k4(ITd,'JsonImporter/lambda$21$Type',830);c3(795,1,{},wVc);var rW=k4(ITd,'JsonImporter/lambda$22$Type',795);c3(796,1,{},xVc);var sW=k4(ITd,'JsonImporter/lambda$23$Type',796);c3(798,1,{},yVc);var tW=k4(ITd,'JsonImporter/lambda$24$Type',798);c3(799,1,{},zVc);var uW=k4(ITd,'JsonImporter/lambda$25$Type',799);c3(801,1,{},AVc);var vW=k4(ITd,'JsonImporter/lambda$26$Type',801);c3(809,1,{},BVc);var wW=k4(ITd,'JsonImporter/lambda$27$Type',809);c3(811,1,{},CVc);var xW=k4(ITd,'JsonImporter/lambda$28$Type',811);c3(812,1,{},DVc);var yW=k4(ITd,'JsonImporter/lambda$29$Type',812);c3(797,1,{},EVc);var zW=k4(ITd,'JsonImporter/lambda$3$Type',797);c3(814,1,{},FVc);var AW=k4(ITd,'JsonImporter/lambda$30$Type',814);c3(815,1,{},GVc);var BW=k4(ITd,'JsonImporter/lambda$31$Type',815);c3(817,1,{},HVc);var CW=k4(ITd,'JsonImporter/lambda$32$Type',817);c3(826,1,{},IVc);_.td=function JVc(a){BUc(this.a,a)};var DW=k4(ITd,'JsonImporter/lambda$33$Type',826);c3(827,1,{},KVc);_.td=function LVc(a){CUc(this.a,this.b,a)};var EW=k4(ITd,'JsonImporter/lambda$34$Type',827);c3(828,1,{},MVc);_.td=function NVc(a){DUc(this.a,this.b,a)};var FW=k4(ITd,'JsonImporter/lambda$35$Type',828);c3(805,1,{},OVc);var GW=k4(ITd,'JsonImporter/lambda$36$Type',805);c3(806,1,{},PVc);var HW=k4(ITd,'JsonImporter/lambda$37$Type',806);c3(807,1,{},QVc);var IW=k4(ITd,'JsonImporter/lambda$38$Type',807);c3(808,1,{},RVc);var JW=k4(ITd,'JsonImporter/lambda$39$Type',808);c3(800,1,{},SVc);var KW=k4(ITd,'JsonImporter/lambda$4$Type',800);c3(802,1,{},TVc);var LW=k4(ITd,'JsonImporter/lambda$5$Type',802);c3(803,1,{},UVc);var MW=k4(ITd,'JsonImporter/lambda$6$Type',803);c3(804,1,{},VVc);var NW=k4(ITd,'JsonImporter/lambda$7$Type',804);c3(810,1,{},WVc);var OW=k4(ITd,'JsonImporter/lambda$8$Type',810);c3(813,1,{},XVc);var PW=k4(ITd,'JsonImporter/lambda$9$Type',813);c3(864,1,{},eWc);_.td=function fWc(a){OTc(this.a,new hz(pA(a)))};var RW=k4(ITd,'JsonMetaDataConverter/lambda$0$Type',864);c3(865,1,{},gWc);_.td=function hWc(a){aWc(this.a,a)};var SW=k4(ITd,'JsonMetaDataConverter/lambda$1$Type',865);c3(866,1,{},iWc);_.td=function jWc(a){bWc(this.a,a)};var TW=k4(ITd,'JsonMetaDataConverter/lambda$2$Type',866);c3(867,1,{},kWc);_.td=function lWc(a){cWc(this.a,a)};var UW=k4(ITd,'JsonMetaDataConverter/lambda$3$Type',867);c3(229,23,{3:1,34:1,23:1,229:1},vWc);var mWc,nWc,oWc,pWc,qWc,rWc,sWc,tWc;var VW=l4(DMd,'GraphFeature',229,zE,xWc,wWc);var yWc;c3(16,1,{34:1,166:1},DWc,EWc,FWc,GWc);_.vd=function HWc(a){return AWc(this,kA(a,166))};_.Fb=function IWc(a){return BWc(this,a)};_.Of=function JWc(){return CWc(this)};_.Lf=function KWc(){return this.b};_.Hb=function LWc(){return hqb(this.b)};_.Ib=function MWc(){return this.b};var $W=k4(DMd,'Property',16);c3(727,1,lKd,OWc);_.Ld=function PWc(a,b){return NWc(this,kA(a,93),kA(b,93))};_.Fb=function QWc(a){return this===a};_.Md=function RWc(){return new jfb(this)};var ZW=k4(DMd,'PropertyHolderComparator',727);var ZX=m4(FTd,'EList');c3(59,41,{20:1,25:1,41:1,13:1,15:1,59:1,52:1});_.bd=function qXc(a,b){eXc(this,a,b)};_.nc=function rXc(a){return fXc(this,a)};_.oc=function sXc(a){return gXc(this,a)};_.oh=function tXc(){return new v0c(this)};_.ph=function uXc(){return new y0c(this)};_.qh=function vXc(a){return hXc(this,a)};_.rh=function wXc(){return true};_.sh=function xXc(a,b){};_.th=function yXc(){};_.uh=function zXc(a,b){iXc(this,a,b)};_.vh=function AXc(a,b){};_.wh=function BXc(a,b,c){};_.Fb=function CXc(a){return jXc(this,a)};_.Hb=function DXc(){return lXc(this)};_.xh=function EXc(){return false};_.tc=function FXc(){return new a0c(this)};_.ed=function GXc(){return new j0c(this)};_.fd=function HXc(a){var b;b=this._b();if(a<0||a>b)throw x2(new Z_c(a,b));return new k0c(this,a)};_.vc=function IXc(a){return mXc(this,a)};_.zh=function JXc(a,b){return b};_.hd=function KXc(a,b){return nXc(this,a,b)};_.Ib=function LXc(){return oXc(this)};_.Bh=function MXc(){return true};_.Ch=function NXc(a,b){return pXc(this,b)};var vX=k4(FTd,'AbstractEList',59);c3(55,59,VTd,cYc,dYc,eYc);_.lh=function fYc(a){return PXc(this,a)};_.mh=function gYc(a,b){QXc(this,a,b)};_.nh=function hYc(a){RXc(this,a)};_.Dh=function iYc(a){return TXc(this,a)};_.Pb=function jYc(){UXc(this)};_.pc=function kYc(a){return VXc(this,a)};_.cd=function lYc(a){return WXc(this,a)};_.Eh=function mYc(a){XXc(this,a)};_.dd=function nYc(a){return YXc(this,a)};_.Wb=function oYc(){return this.i==0};_.Fh=function pYc(a){return tz(NE,oJd,1,a,5,1)};_.yh=function qYc(a){return this.g[a]};_.gd=function rYc(a){return ZXc(this,a)};_.Ah=function sYc(a,b){return $Xc(this,a,b)};_._b=function tYc(){return this.i};_.yc=function uYc(){return aYc(this)};_.zc=function vYc(a){return bYc(this,a)};_.i=0;var EX=k4(FTd,'BasicEList',55);var bY=m4(FTd,'TreeIterator');c3(629,55,WTd);_.gc=function zYc(a){Bhb(this,a)};_.hc=function AYc(){return this.g==null&&!this.c?wYc(this):this.g==null||this.i!=0&&kA(this.g[this.i-1],43).hc()};_.ic=function BYc(){return xYc(this)};_.jc=function CYc(){if(!this.e){throw x2(new Q4('There is no valid object to remove.'))}this.e.jc()};_.c=false;var wX=k4(FTd,'AbstractTreeIterator',629);c3(621,629,WTd,DYc);_.Gh=function EYc(a){var b;b=kA(a,51).pg().tc();sA(b,260)&&kA(b,260).Zj(new FYc);return b};var aX=k4(XTd,'ElkGraphUtil/PropertiesSkippingTreeIterator',621);c3(868,1,{},FYc);var _W=k4(XTd,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',868);var GYc,HYc;var cX=k4(XTd,'ElkReflect',null);c3(784,1,QRd,NYc);_.Nf=function OYc(a){return IYc(),igb(kA(a,185))};var bX=k4(XTd,'ElkReflect/lambda$0$Type',784);var PYc;var aY=m4(FTd,'ResourceLocator');c3(953,1,{});var TX=k4(FTd,'DelegatingResourceLocator',953);c3(954,953,{});var dX=k4('org.eclipse.emf.common','EMFPlugin',954);var eX=m4(JUd,'Adapter');var fX=m4(JUd,'Notification');c3(1016,1,KUd);_.Hh=function YYc(){return this.d};_.Ih=function ZYc(a){};_.Jh=function $Yc(a){this.d=a};_.Kh=function _Yc(a){this.d==a&&(this.d=null)};_.d=null;var gX=k4(YSd,'AdapterImpl',1016);c3(1688,59,LUd);_.lh=function fZc(a){var b,c,d;++this.j;if(a.Wb()){return false}else{b=this.hi();for(d=a.tc();d.hc();){c=d.ic();this.Wh(this.Ch(b,c));++b}return true}};_.mh=function gZc(a,b){bZc(this,a,b)};_.nh=function hZc(a){cZc(this,a)};_.Uh=function iZc(){return this.Xh()};_.Pb=function jZc(){dZc(this,this.hi(),this.ii())};_.pc=function kZc(a){return this.Zh(a)};_.qc=function lZc(a){return this.$h(a)};_.Vh=function mZc(a,b){this.ei().tl()};_.Wh=function nZc(a){this.ei().tl()};_.Xh=function oZc(){return this.ei()};_.Yh=function pZc(){this.ei().tl()};_.Zh=function qZc(a){return this.ei().tl()};_.$h=function rZc(a){return this.ei().tl()};_._h=function sZc(a){return this.ei().tl()};_.ai=function tZc(a){return this.ei().tl()};_.bi=function uZc(){return this.ei().tl()};_.ci=function vZc(a){return this.ei().tl()};_.di=function wZc(){return this.ei().tl()};_.fi=function xZc(a){return this.ei().tl()};_.gi=function yZc(a,b){return this.ei().tl()};_.hi=function zZc(){return this.ei().tl()};_.ii=function AZc(){return this.ei().tl()};_.ji=function BZc(a){return this.ei().tl()};_.ki=function CZc(){return this.ei().tl()};_.Fb=function DZc(a){return this._h(a)};_.cd=function EZc(a){return this.zh(a,this.ai(a))};_.Hb=function FZc(){return this.bi()};_.dd=function GZc(a){return this.ci(a)};_.Wb=function HZc(){return this.di()};_.yh=function IZc(a){return this.ai(a)};_.gd=function JZc(a){return eZc(this,a)};_.vc=function KZc(a){var b;b=this.dd(a);if(b>=0){this.gd(b);return true}else{return false}};_.Ah=function LZc(a,b){return this.gi(a,this.Ch(a,b))};_._b=function MZc(){return this.hi()};_.yc=function NZc(){return this.ii()};_.zc=function OZc(a){return this.ji(a)};_.Ib=function PZc(){return this.ki()};var SX=k4(FTd,'DelegatingEList',1688);c3(1689,1688,LUd);_.li=function XZc(a,b){return QZc(this,a,b)};_.lh=function YZc(a){return this.li(this.hi(),a)};_.mh=function ZZc(a,b){RZc(this,a,b)};_.nh=function $Zc(a){SZc(this,a)};_.rh=function _Zc(){return !this.qi()};_.Pb=function a$c(){VZc(this)};_.mi=function b$c(a,b,c,d,e){return new _$c(this,a,b,c,d,e)};_.ni=function c$c(a){vMc(this.Oh(),a)};_.oi=function d$c(){return null};_.pi=function e$c(){return -1};_.Oh=function f$c(){return null};_.qi=function g$c(){return false};_.ri=function h$c(a,b){return b};_.si=function i$c(a,b){return b};_.ti=function j$c(){return false};_.ui=function k$c(){return !this.di()};_.gd=function l$c(a){var b,c,d,e;if(this.ti()){d=this.ui();b=this.mi(4,e=eZc(this,a),null,a,d);if(this.qi()&&!!e){c=this.si(e,null);if(!c){this.ni(b)}else{c.Sh(b);c.Th()}}else{this.ni(b)}return e}else{e=eZc(this,a);if(this.qi()&&!!e){c=this.si(e,null);!!c&&c.Th()}return e}};_.Ah=function m$c(a,b){return WZc(this,a,b)};var jX=k4(YSd,'DelegatingNotifyingListImpl',1689);c3(136,1,MUd);_.Sh=function O$c(a){return n$c(this,a)};_.Th=function P$c(){o$c(this)};_.Lh=function Q$c(){return this.d};_.oi=function R$c(){return null};_.vi=function S$c(){return null};_.Mh=function T$c(a){return -1};_.Nh=function U$c(){return x$c(this)};_.Oh=function V$c(){return null};_.Ph=function W$c(){return G$c(this)};_.Qh=function X$c(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.wi=function Y$c(){return false};_.Rh=function Z$c(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.Lh();switch(e){case 1:case 2:{f=a.Oh();if(yA(f)===yA(this.Oh())&&this.Mh(null)==a.Mh(null)){this.g=a.Nh();a.Lh()==1&&(this.d=1);return true}}}}case 4:{e=a.Lh();switch(e){case 4:{f=a.Oh();if(yA(f)===yA(this.Oh())&&this.Mh(null)==a.Mh(null)){j=I$c(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Qh();this.d=6;l=new dYc(2);if(i<=g){fXc(l,this.n);fXc(l,a.Ph());this.g=xz(pz(FA,1),OKd,22,15,[this.o=i,g+1])}else{fXc(l,a.Ph());fXc(l,this.n);this.g=xz(pz(FA,1),OKd,22,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.Lh();switch(e){case 4:{f=a.Oh();if(yA(f)===yA(this.Oh())&&this.Mh(null)==a.Mh(null)){j=I$c(this);g=a.Qh();k=kA(this.g,37);d=tz(FA,OKd,22,k.length+1,15,1);b=0;while(b>>0).toString(16));c.a+=' (eventType: ';switch(this.d){case 1:{c.a+='SET';break}case 2:{c.a+='UNSET';break}case 3:{c.a+='ADD';break}case 5:{c.a+='ADD_MANY';break}case 4:{c.a+='REMOVE';break}case 6:{c.a+='REMOVE_MANY';break}case 7:{c.a+='MOVE';break}case 8:{c.a+='REMOVING_ADAPTER';break}case 9:{c.a+='RESOLVE';break}default:{u6(c,this.d);break}}H$c(this)&&(c.a+=', touch: true',c);c.a+=', position: ';u6(c,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);c.a+=', notifier: ';v6(c,this.Oh());c.a+=', feature: ';v6(c,this.oi());c.a+=', oldValue: ';v6(c,G$c(this));c.a+=', newValue: ';if(this.d==6&&sA(this.g,37)){b=kA(this.g,37);c.a+='[';for(a=0;a10){if(!this.b||this.c.j!=this.a){this.b=new Lgb(this);this.a=this.j}return Hgb(this.b,a)}else{return VXc(this,a)}};_.Bh=function Y_c(){return true};_.a=0;var pX=k4(FTd,'AbstractEList/1',869);c3(295,79,kLd,Z_c);var qX=k4(FTd,'AbstractEList/BasicIndexOutOfBoundsException',295);c3(36,1,wJd,a0c);_.gc=function d0c(a){Bhb(this,a)};_.Bi=function b0c(){if(this.i.j!=this.f){throw x2(new qfb)}};_.Ci=function c0c(){return $_c(this)};_.hc=function e0c(){return this.e!=this.i._b()};_.ic=function f0c(){return this.Ci()};_.jc=function g0c(){__c(this)};_.e=0;_.f=0;_.g=-1;var rX=k4(FTd,'AbstractEList/EIterator',36);c3(296,36,NJd,j0c,k0c);_.jc=function s0c(){__c(this)};_.Bc=function l0c(a){h0c(this,a)};_.Di=function m0c(){var b;try{b=this.d.cd(--this.e);this.Bi();this.g=this.e;return b}catch(a){a=w2(a);if(sA(a,79)){this.Bi();throw x2(new djb)}else throw x2(a)}};_.Ei=function n0c(a){i0c(this,a)};_.Cc=function o0c(){return this.e!=0};_.Dc=function p0c(){return this.e};_.Ec=function q0c(){return this.Di()};_.Fc=function r0c(){return this.e-1};_.Gc=function t0c(a){this.Ei(a)};var sX=k4(FTd,'AbstractEList/EListIterator',296);c3(324,36,wJd,v0c);_.Ci=function w0c(){return u0c(this)};_.jc=function x0c(){throw x2(new U6)};var tX=k4(FTd,'AbstractEList/NonResolvingEIterator',324);c3(355,296,NJd,y0c,z0c);_.Bc=function A0c(a){throw x2(new U6)};_.Ci=function B0c(){var b;try{b=this.c.yh(this.e);this.Bi();this.g=this.e++;return b}catch(a){a=w2(a);if(sA(a,79)){this.Bi();throw x2(new djb)}else throw x2(a)}};_.Di=function C0c(){var b;try{b=this.c.yh(--this.e);this.Bi();this.g=this.e;return b}catch(a){a=w2(a);if(sA(a,79)){this.Bi();throw x2(new djb)}else throw x2(a)}};_.jc=function D0c(){throw x2(new U6)};_.Gc=function E0c(a){throw x2(new U6)};var uX=k4(FTd,'AbstractEList/NonResolvingEListIterator',355);c3(1673,59,QUd);_.lh=function M0c(a){var b,c,d,e,f,g,h,i,j;d=a._b();if(d!=0){i=(c=kA(VNc(this.a,4),116),c==null?0:c.length);j=i+d;b=K0c(this,j);h=a.tc();for(f=i;fc)throw x2(new Z_c(a,c));return new r1c(this,a)};_.Pb=function S0c(){var a,b;++this.j;a=kA(VNc(this.a,4),116);b=a==null?0:a.length;csd(this,null);iXc(this,b,a)};_.pc=function T0c(a){var b,c,d,e;b=kA(VNc(this.a,4),116);if(b!=null){if(a!=null){for(d=0,e=b.length;d=c)throw x2(new Z_c(a,c));return b[a]};_.dd=function V0c(a){var b,c,d;b=kA(VNc(this.a,4),116);if(b!=null){if(a!=null){for(c=0,d=b.length;cc)throw x2(new Z_c(a,c));return new j1c(this,a)};_.yh=function $0c(a){return kA(VNc(this.a,4),116)[a]};_.gd=function _0c(a){return L0c(this,a)};_.Ah=function a1c(a,b){var c,d;c=J0c(this);d=c[a];I0c(c,a,pXc(this,b));csd(this,c);return d};_._b=function b1c(){var a;return a=kA(VNc(this.a,4),116),a==null?0:a.length};_.yc=function c1c(){var a,b,c;a=kA(VNc(this.a,4),116);c=a==null?0:a.length;b=tz(eX,PUd,380,c,0,1);c>0&&T6(a,0,b,0,c);return b};_.zc=function d1c(a){var b,c,d;b=kA(VNc(this.a,4),116);d=b==null?0:b.length;if(d>0){if(a.lengthd&&wz(a,d,null);return a};var G0c;var BX=k4(FTd,'ArrayDelegatingEList',1673);c3(927,36,wJd,e1c);_.Bi=function f1c(){if(this.b.j!=this.f||yA(kA(VNc(this.b.a,4),116))!==yA(this.a)){throw x2(new qfb)}};_.jc=function g1c(){__c(this);this.a=kA(VNc(this.b.a,4),116)};var xX=k4(FTd,'ArrayDelegatingEList/EIterator',927);c3(640,296,NJd,i1c,j1c);_.Bi=function k1c(){if(this.b.j!=this.f||yA(kA(VNc(this.b.a,4),116))!==yA(this.a)){throw x2(new qfb)}};_.Ei=function l1c(a){i0c(this,a);this.a=kA(VNc(this.b.a,4),116)};_.jc=function m1c(){__c(this);this.a=kA(VNc(this.b.a,4),116)};var yX=k4(FTd,'ArrayDelegatingEList/EListIterator',640);c3(928,324,wJd,n1c);_.Bi=function o1c(){if(this.b.j!=this.f||yA(kA(VNc(this.b.a,4),116))!==yA(this.a)){throw x2(new qfb)}};var zX=k4(FTd,'ArrayDelegatingEList/NonResolvingEIterator',928);c3(641,355,NJd,q1c,r1c);_.Bi=function s1c(){if(this.b.j!=this.f||yA(kA(VNc(this.b.a,4),116))!==yA(this.a)){throw x2(new qfb)}};var AX=k4(FTd,'ArrayDelegatingEList/NonResolvingEListIterator',641);c3(549,295,kLd,t1c);var CX=k4(FTd,'BasicEList/BasicIndexOutOfBoundsException',549);c3(630,55,VTd,u1c);_.bd=function v1c(a,b){throw x2(new U6)};_.nc=function w1c(a){throw x2(new U6)};_.oc=function x1c(a){throw x2(new U6)};_.Pb=function y1c(){throw x2(new U6)};_.Eh=function z1c(a){throw x2(new U6)};_.tc=function A1c(){return this.oh()};_.ed=function B1c(){return this.ph()};_.fd=function C1c(a){return this.qh(a)};_.gd=function D1c(a){throw x2(new U6)};_.vc=function E1c(a){throw x2(new U6)};_.hd=function F1c(a,b){throw x2(new U6)};var DX=k4(FTd,'BasicEList/UnmodifiableEList',630);c3(639,1,{3:1,20:1,13:1,15:1,52:1,533:1});_.bd=function d2c(a,b){G1c(this,a,kA(b,38))};_.nc=function e2c(a){return H1c(this,kA(a,38))};_.sc=function l2c(a){i5(this,a)};_.cd=function m2c(a){return kA(WXc(this.c,a),134)};_.uc=function x2c(){return this.xc()};_.gd=function y2c(a){return kA(this.c.gd(a),38)};_.hd=function A2c(a,b){return b2c(this,a,kA(b,38))};_.jd=function C2c(a){Vib(this,a)};_.wc=function D2c(){return new ekb(this,16)};_.xc=function E2c(){return new Zob(null,this.wc())};_.oc=function f2c(a){return this.c.oc(a)};_.Pb=function g2c(){this.c.Pb()};_.pc=function h2c(a){return this.c.pc(a)};_.qc=function i2c(a){return sg(this.c,a)};_.Fi=function j2c(){var a,b,c;if(this.d==null){this.d=tz(EX,RUd,55,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.tc();b.e!=b.i._b();){a=kA(b.Ci(),134);M1c(this,a)}this.e=c}};_.Fb=function k2c(a){return R1c(this,a)};_.Hb=function n2c(){return lXc(this.c)};_.dd=function o2c(a){return this.c.dd(a)};_.Gi=function p2c(){this.c=new M2c(this)};_.Wb=function q2c(){return this.f==0};_.tc=function r2c(){return this.c.tc()};_.ed=function s2c(){return this.c.ed()};_.fd=function t2c(a){return this.c.fd(a)};_.Hi=function u2c(){return X1c(this)};_.Ii=function v2c(a,b,c){return new M3c(a,b,c)};_.Ji=function w2c(){return new R2c};_.vc=function z2c(a){return $1c(this,a)};_._b=function B2c(){return this.f};_.kd=function F2c(a,b){return new A9(this.c,a,b)};_.yc=function G2c(){return this.c.yc()};_.zc=function H2c(a){return this.c.zc(a)};_.Ib=function I2c(){return oXc(this.c)};_.e=0;_.f=0;var RX=k4(FTd,'BasicEMap',639);c3(922,55,VTd,M2c);_.sh=function N2c(a,b){J2c(this,kA(b,134))};_.vh=function P2c(a,b){K2c(this,kA(b,134))};_.wh=function Q2c(a,b,c){L2c(this,kA(b,134),kA(c,134))};_.uh=function O2c(a,b){L1c(this.a)};var FX=k4(FTd,'BasicEMap/1',922);c3(923,55,VTd,R2c);_.Fh=function S2c(a){return tz(OX,SUd,551,a,0,1)};var GX=k4(FTd,'BasicEMap/2',923);c3(924,IJd,JJd,T2c);_.Pb=function U2c(){this.a.c.Pb()};_.pc=function V2c(a){return I1c(this.a,a)};_.tc=function W2c(){return this.a.f==0?(Y3c(),X3c.a):new q3c(this.a)};_.vc=function X2c(a){var b;b=this.a.f;a2c(this.a,a);return this.a.f!=b};_._b=function Y2c(){return this.a.f};var HX=k4(FTd,'BasicEMap/3',924);c3(925,25,HJd,Z2c);_.Pb=function $2c(){this.a.c.Pb()};_.pc=function _2c(a){return J1c(this.a,a)};_.tc=function a3c(){return this.a.f==0?(Y3c(),X3c.a):new s3c(this.a)};_._b=function b3c(){return this.a.f};var IX=k4(FTd,'BasicEMap/4',925);c3(926,IJd,JJd,d3c);_.Pb=function e3c(){this.a.c.Pb()};_.pc=function f3c(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&sA(a,38)){this.a.Fi();i=kA(a,38);h=i.kc();e=h==null?0:ob(h);f=V1c(this.a,e);b=this.a.d[f];if(b){c=kA(b.g,339);j=b.i;for(g=0;g'+this.c};_.a=0;var OX=k4(FTd,'BasicEMap/EntryImpl',551);c3(484,1,{},W3c);var QX=k4(FTd,'BasicEMap/View',484);var X3c;c3(695,1,{});_.Fb=function f4c(a){return mq((bdb(),$cb),a)};_.Hb=function g4c(){return fdb((bdb(),$cb))};_.Ib=function h4c(){return vg((bdb(),$cb))};var WX=k4(FTd,'ECollections/BasicEmptyUnmodifiableEList',695);c3(1164,1,NJd,i4c);_.gc=function k4c(a){Bhb(this,a)};_.Bc=function j4c(a){throw x2(new U6)};_.hc=function l4c(){return false};_.Cc=function m4c(){return false};_.ic=function n4c(){throw x2(new djb)};_.Dc=function o4c(){return 0};_.Ec=function p4c(){throw x2(new djb)};_.Fc=function q4c(){return -1};_.jc=function r4c(){throw x2(new U6)};_.Gc=function s4c(a){throw x2(new U6)};var VX=k4(FTd,'ECollections/BasicEmptyUnmodifiableEList/1',1164);c3(1162,695,{20:1,13:1,15:1,52:1},t4c);_.bd=function u4c(a,b){Z3c()};_.nc=function v4c(a){return $3c()};_.oc=function w4c(a){return _3c()};_.Pb=function x4c(){a4c()};_.pc=function y4c(a){return false};_.qc=function z4c(a){return false};_.sc=function A4c(a){i5(this,a)};_.cd=function B4c(a){return kdb((bdb(),$cb,a)),null};_.dd=function C4c(a){return -1};_.Wb=function D4c(){return true};_.tc=function E4c(){return this.a};_.ed=function F4c(){return this.a};_.fd=function G4c(a){return this.a};_.uc=function H4c(){return this.xc()};_.gd=function I4c(a){return b4c()};_.vc=function J4c(a){return c4c()};_.hd=function K4c(a,b){return d4c()};_._b=function L4c(){return 0};_.jd=function M4c(a){Vib(this,a)};_.wc=function N4c(){return new ekb(this,16)};_.xc=function O4c(){return new Zob(null,this.wc())};_.kd=function P4c(a,b){return bdb(),new A9($cb,a,b)};_.yc=function Q4c(){return tg((bdb(),$cb))};_.zc=function R4c(a){return bdb(),ug($cb,a)};var XX=k4(FTd,'ECollections/EmptyUnmodifiableEList',1162);c3(1163,695,{20:1,13:1,15:1,52:1,533:1},S4c);_.bd=function T4c(a,b){Z3c()};_.nc=function U4c(a){return $3c()};_.oc=function V4c(a){return _3c()};_.Pb=function W4c(){a4c()};_.pc=function X4c(a){return false};_.qc=function Y4c(a){return false};_.sc=function Z4c(a){i5(this,a)};_.cd=function $4c(a){return kdb((bdb(),$cb,a)),null};_.dd=function _4c(a){return -1};_.Wb=function a5c(){return true};_.tc=function b5c(){return this.a};_.ed=function c5c(){return this.a};_.fd=function d5c(a){return this.a};_.uc=function f5c(){return this.xc()};_.gd=function g5c(a){return b4c()};_.vc=function h5c(a){return c4c()};_.hd=function i5c(a,b){return d4c()};_._b=function j5c(){return 0};_.jd=function k5c(a){Vib(this,a)};_.wc=function l5c(){return new ekb(this,16)};_.xc=function m5c(){return new Zob(null,this.wc())};_.kd=function n5c(a,b){return bdb(),new A9($cb,a,b)};_.yc=function o5c(){return tg((bdb(),$cb))};_.zc=function p5c(a){return bdb(),ug($cb,a)};_.Hi=function e5c(){return bdb(),bdb(),_cb};var YX=k4(FTd,'ECollections/EmptyUnmodifiableEMap',1163);var $X=m4(FTd,'Enumerator');var q5c;c3(261,1,{261:1},P5c);_.Fb=function T5c(a){var b;if(this===a)return true;if(!sA(a,261))return false;b=kA(a,261);return this.f==b.f&&V5c(this.i,b.i)&&U5c(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&U5c(this.d,b.d)&&U5c(this.g,b.g)&&U5c(this.e,b.e)&&M5c(this,b)};_.Hb=function Y5c(){return this.f};_.Ib=function e6c(){return N5c(this)};_.f=0;var u5c=0,v5c=0,w5c=0,x5c=0,y5c=0,z5c=0,A5c=0,B5c=0,C5c=0,D5c,E5c=0,F5c=0,G5c=0,H5c=0,I5c,J5c;var dY=k4(FTd,'URI',261);c3(965,44,FLd,o6c);_.Zb=function p6c(a,b){return kA(J8(this,pA(a),kA(b,261)),261)};var cY=k4(FTd,'URI/URICache',965);c3(451,55,VTd,q6c,r6c);_.xh=function s6c(){return true};var eY=k4(FTd,'UniqueEList',451);c3(526,54,rKd,t6c);var fY=k4(FTd,'WrappedException',526);var gY=m4(KSd,VUd);var BY=m4(KSd,WUd);var zY=m4(KSd,XUd);var hY=m4(KSd,YUd);var jY=m4(KSd,ZUd);var iY=m4(KSd,'EClass');var lY=m4(KSd,'EDataType');var u6c;c3(1096,44,FLd,x6c);_.Vb=function y6c(a){return wA(a)?G8(this,a):Of(Wgb(this.d,a))};var kY=k4(KSd,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1096);var nY=m4(KSd,'EEnum');var mY=m4(KSd,$Ud);var pY=m4(KSd,_Ud);var tY=m4(KSd,aVd);var z6c;var vY=m4(KSd,bVd);var wY=m4(KSd,cVd);c3(918,1,{},D6c);_.Ib=function E6c(){return 'NIL'};var xY=k4(KSd,'EStructuralFeature/Internal/DynamicValueHolder/1',918);var F6c;c3(917,44,FLd,I6c);_.Vb=function J6c(a){return wA(a)?G8(this,a):Of(Wgb(this.d,a))};var yY=k4(KSd,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',917);var AY=m4(KSd,dVd);var CY=m4(KSd,'EValidator/PatternMatcher');var K6c;var M6c;var O6c;var Q6c,R6c,S6c,T6c,U6c,V6c,W6c,X6c,Y6c,Z6c,$6c,_6c,a7c,b7c,c7c,d7c,e7c,f7c,g7c,h7c,i7c;var G0=m4(eVd,'FeatureMap/Entry');c3(483,1,{75:1},k7c);_.nj=function l7c(){return this.a};_.lc=function m7c(){return this.b};var DY=k4(dTd,'BasicEObjectImpl/1',483);c3(1674,1,{103:1});_.oj=function p7c(a){this.e=a==0?n7c:tz(NE,oJd,1,a,5,1)};_.Tg=function q7c(a){return this.e[a]};_.Ug=function r7c(a,b){this.e[a]=b};_.Vg=function s7c(a){this.e[a]=null};_.pj=function t7c(){return this.c};_.qj=function u7c(){throw x2(new U6)};_.rj=function v7c(){throw x2(new U6)};_.sj=function w7c(){return this.d};_.tj=function x7c(){return this.e!=null};_.uj=function y7c(a){this.c=a};_.vj=function z7c(a){throw x2(new U6)};_.wj=function A7c(a){this.d=a};var n7c;var EY=k4(dTd,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1674);c3(201,1674,{103:1},B7c);_.qj=function C7c(){return this.a};_.rj=function D7c(){return this.b};_.vj=function E7c(a){this.a=a};var FY=k4(dTd,'BasicEObjectImpl/EPropertiesHolderImpl',201);c3(463,92,cTd,F7c);_.dg=function G7c(){return this.f};_.ig=function H7c(){return this.k};_.kg=function I7c(a,b){this.g=a;this.i=b};_.mg=function J7c(){return (this.j&2)==0?this.Rg():this.Jg().pj()};_.og=function K7c(){return this.i};_.fg=function L7c(){return (this.j&1)!=0};_.yg=function M7c(){return this.g};_.Eg=function N7c(){return (this.j&4)!=0};_.Jg=function O7c(){return !this.k&&(this.k=new B7c),this.k};_.Ng=function P7c(a){this.Jg().uj(a);a?(this.j|=2):(this.j&=-3)};_.Rg=function Q7c(){return (P6c(),O6c).S};_.i=0;_.j=1;var qZ=k4(dTd,'EObjectImpl',463);c3(710,463,{95:1,91:1,87:1,51:1,103:1,42:1,92:1},T7c);_.Tg=function U7c(a){return this.e[a]};_.Ug=function V7c(a,b){this.e[a]=b};_.Vg=function W7c(a){this.e[a]=null};_.mg=function X7c(){return this.d};_.rg=function Y7c(a){return Mbd(this.d,a)};_.tg=function Z7c(){return this.d};_.xg=function $7c(){return this.e!=null};_.Jg=function _7c(){!this.k&&(this.k=new n8c);return this.k};_.Ng=function a8c(a){this.d=a};_.Qg=function b8c(){var a;if(this.e==null){a=Lbd(this.d);this.e=a==0?R7c:tz(NE,oJd,1,a,5,1)}return this};_.Sg=function c8c(){return 0};var R7c;var JY=k4(dTd,'DynamicEObjectImpl',710);c3(1389,710,{95:1,38:1,91:1,87:1,134:1,51:1,103:1,42:1,92:1},d8c);_.Fb=function f8c(a){return this===a};_.Hb=function j8c(){return bqb(this)};_.Ng=function e8c(a){this.d=a;this.b=Hbd(a,'key');this.c=Hbd(a,nTd)};_.ih=function g8c(){var a;if(this.a==-1){a=KMc(this,this.b);this.a=a==null?0:ob(a)}return this.a};_.kc=function h8c(){return KMc(this,this.b)};_.lc=function i8c(){return KMc(this,this.c)};_.jh=function k8c(a){this.a=a};_.kh=function l8c(a){ZMc(this,this.b,a)};_.mc=function m8c(a){var b;b=KMc(this,this.c);ZMc(this,this.c,a);return b};_.a=0;var HY=k4(dTd,'DynamicEObjectImpl/BasicEMapEntry',1389);c3(1390,1,{103:1},n8c);_.oj=function o8c(a){throw x2(new U6)};_.Tg=function p8c(a){throw x2(new U6)};_.Ug=function q8c(a,b){throw x2(new U6)};_.Vg=function r8c(a){throw x2(new U6)};_.pj=function s8c(){throw x2(new U6)};_.qj=function t8c(){return this.a};_.rj=function u8c(){return this.b};_.sj=function v8c(){return this.c};_.tj=function w8c(){throw x2(new U6)};_.uj=function x8c(a){throw x2(new U6)};_.vj=function y8c(a){this.a=a};_.wj=function z8c(a){this.c=a};var IY=k4(dTd,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1390);c3(469,142,{95:1,91:1,87:1,609:1,139:1,51:1,103:1,42:1,92:1,469:1,142:1,107:1,108:1},H8c);_.jg=function I8c(a){return B8c(this,a)};_.ug=function J8c(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new f9c((j7c(),f7c),CZ,this)),this.b):(!this.b&&(this.b=new f9c((j7c(),f7c),CZ,this)),X1c(this.b));case 3:return C8c(this);case 4:return !this.a&&(this.a=new fdd(sY,this,4)),this.a;case 5:return !this.c&&(this.c=new Swd(sY,this,5)),this.c;}return EMc(this,a-Lbd((j7c(),Q6c)),Gbd((d=kA(VNc(this,16),24),!d?Q6c:d),a),b,c)};_.Bg=function K8c(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?B8c(this,c):this.Cb.Cg(this,-1-e,null,c)));return A8c(this,kA(a,139),c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),Q6c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),Q6c)),a,c)};_.Dg=function L8c(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 2:return !this.b&&(this.b=new f9c((j7c(),f7c),CZ,this)),R8c(this.b,a,c);case 3:return A8c(this,null,c);case 4:return !this.a&&(this.a=new fdd(sY,this,4)),q_c(this.a,a,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),Q6c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),Q6c)),a,c)};_.Fg=function M8c(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!C8c(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return FMc(this,a-Lbd((j7c(),Q6c)),Gbd((b=kA(VNc(this,16),24),!b?Q6c:b),a))};_.Mg=function N8c(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:E8c(this,pA(b));return;case 2:!this.b&&(this.b=new f9c((j7c(),f7c),CZ,this));S8c(this.b,b);return;case 3:D8c(this,kA(b,139));return;case 4:!this.a&&(this.a=new fdd(sY,this,4));r_c(this.a);!this.a&&(this.a=new fdd(sY,this,4));gXc(this.a,kA(b,13));return;case 5:!this.c&&(this.c=new Swd(sY,this,5));r_c(this.c);!this.c&&(this.c=new Swd(sY,this,5));gXc(this.c,kA(b,13));return;}GMc(this,a-Lbd((j7c(),Q6c)),Gbd((c=kA(VNc(this,16),24),!c?Q6c:c),a),b)};_.Rg=function O8c(){return j7c(),Q6c};_.Ib=function P8c(){return G8c(this)};_.d=null;var LY=k4(dTd,'EAnnotationImpl',469);c3(143,639,fVd,T8c);_.xj=function U8c(a,b){return Q8c(this,kA(a,38),b)};_.Dh=function V8c(a){return kA(kA(this.c,64).Dh(a),134)};_.oh=function W8c(){return kA(this.c,64).oh()};_.ph=function X8c(){return kA(this.c,64).ph()};_.qh=function Y8c(a){return kA(this.c,64).qh(a)};_.yj=function Z8c(a,b){return R8c(this,a,b)};_.hj=function $8c(a){return kA(this.c,81).hj(a)};_.Gi=function _8c(){};_.ui=function a9c(){return kA(this.c,81).ui()};_.Ii=function b9c(a,b,c){var d;d=kA(Nad(this.b).dh().$g(this.b),134);d.jh(a);d.kh(b);d.mc(c);return d};_.Ji=function c9c(){return new Nxd(this)};_.Gc=function d9c(a){S8c(this,a)};_.ij=function e9c(){kA(this.c,81).ij()};var B0=k4(eVd,'EcoreEMap',143);c3(152,143,fVd,f9c);_.Fi=function g9c(){var a,b,c,d,e,f;if(this.d==null){f=tz(EX,RUd,55,2*this.f+1,0,1);for(c=this.c.tc();c.e!=c.i._b();){b=kA(c.Ci(),134);d=b.ih();e=(d&jJd)%f.length;a=f[e];!a&&(a=f[e]=new Nxd(this));a.nc(b)}this.d=f}};var KY=k4(dTd,'EAnnotationImpl/1',152);c3(268,399,{95:1,91:1,87:1,139:1,174:1,51:1,103:1,431:1,42:1,92:1,142:1,268:1,107:1,108:1});_.ug=function t9c(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return B3(),(this.Bb&256)!=0?true:false;case 3:return B3(),(this.Bb&512)!=0?true:false;case 4:return d5(this.s);case 5:return d5(this.t);case 6:return B3(),this.lj()?true:false;case 7:return B3(),e=this.s,e>=1?true:false;case 8:if(b)return j9c(this);return this.r;case 9:return this.q;}return EMc(this,a-Lbd(this.Rg()),Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),a),b,c)};_.Dg=function u9c(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 9:return i9c(this,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),e.aj().ej(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Fg=function v9c(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.lj();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&ohd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&ohd(this.q).i==0);}return FMc(this,a-Lbd(this.Rg()),Gbd((b=kA(VNc(this,16),24),!b?this.Rg():b),a))};_.Mg=function w9c(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:this.ah(pA(b));return;case 2:o9c(this,Vpb(mA(b)));return;case 3:p9c(this,Vpb(mA(b)));return;case 4:n9c(this,kA(b,21).a);return;case 5:this.Aj(kA(b,21).a);return;case 8:l9c(this,kA(b,133));return;case 9:d=k9c(this,kA(b,84),null);!!d&&d.Th();return;}GMc(this,a-Lbd(this.Rg()),Gbd((c=kA(VNc(this,16),24),!c?this.Rg():c),a),b)};_.Rg=function x9c(){return j7c(),h7c};_.Xg=function y9c(){j9c(this);this.Bb|=1};_.jj=function z9c(){return j9c(this)};_.kj=function A9c(){return this.t};_.lj=function B9c(){var a;return a=this.t,a>1||a==-1};_.xh=function C9c(){return (this.Bb&512)!=0};_.zj=function D9c(a,b){return m9c(this,a,b)};_.Aj=function E9c(a){q9c(this,a)};_.Ib=function F9c(){return r9c(this)};_.s=0;_.t=1;var y$=k4(dTd,'ETypedElementImpl',268);c3(418,268,{95:1,91:1,87:1,139:1,174:1,51:1,158:1,61:1,103:1,431:1,42:1,92:1,142:1,418:1,268:1,107:1,108:1,615:1});_.jg=function W9c(a){return G9c(this,a)};_.ug=function X9c(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return B3(),(this.Bb&256)!=0?true:false;case 3:return B3(),(this.Bb&512)!=0?true:false;case 4:return d5(this.s);case 5:return d5(this.t);case 6:return B3(),this.lj()?true:false;case 7:return B3(),e=this.s,e>=1?true:false;case 8:if(b)return j9c(this);return this.r;case 9:return this.q;case 10:return B3(),(this.Bb&hVd)!=0?true:false;case 11:return B3(),(this.Bb&jVd)!=0?true:false;case 12:return B3(),(this.Bb&qLd)!=0?true:false;case 13:return this.j;case 14:return H9c(this);case 15:return B3(),(this.Bb&iVd)!=0?true:false;case 16:return B3(),(this.Bb&RJd)!=0?true:false;case 17:return I9c(this);}return EMc(this,a-Lbd(this.Rg()),Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),a),b,c)};_.Bg=function Y9c(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?G9c(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,17,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),f.aj().dj(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Dg=function Z9c(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 9:return i9c(this,c);case 17:return CMc(this,null,17,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),e.aj().ej(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Fg=function $9c(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.lj();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&ohd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&ohd(this.q).i==0);case 10:return (this.Bb&hVd)==0;case 11:return (this.Bb&jVd)!=0;case 12:return (this.Bb&qLd)!=0;case 13:return this.j!=null;case 14:return H9c(this)!=null;case 15:return (this.Bb&iVd)!=0;case 16:return (this.Bb&RJd)!=0;case 17:return !!I9c(this);}return FMc(this,a-Lbd(this.Rg()),Gbd((b=kA(VNc(this,16),24),!b?this.Rg():b),a))};_.Mg=function _9c(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:Q9c(this,pA(b));return;case 2:o9c(this,Vpb(mA(b)));return;case 3:p9c(this,Vpb(mA(b)));return;case 4:n9c(this,kA(b,21).a);return;case 5:this.Aj(kA(b,21).a);return;case 8:l9c(this,kA(b,133));return;case 9:d=k9c(this,kA(b,84),null);!!d&&d.Th();return;case 10:L9c(this,Vpb(mA(b)));return;case 11:T9c(this,Vpb(mA(b)));return;case 12:R9c(this,Vpb(mA(b)));return;case 13:M9c(this,pA(b));return;case 15:S9c(this,Vpb(mA(b)));return;case 16:O9c(this,Vpb(mA(b)));return;}GMc(this,a-Lbd(this.Rg()),Gbd((c=kA(VNc(this,16),24),!c?this.Rg():c),a),b)};_.Rg=function aad(){return j7c(),g7c};_.Xg=function bad(){bud(rtd((uyd(),syd),this));j9c(this);this.Bb|=1};_.Vi=function cad(){return this.f};_.Oi=function dad(){return H9c(this)};_.Wi=function ead(){return I9c(this)};_.$i=function fad(){return null};_.Bj=function gad(){return this.k};_.pi=function had(){return this.n};_._i=function iad(){return J9c(this)};_.aj=function jad(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=I9c(this);(c.i==null&&Cbd(c),c.i).length;d=this.$i();!!d&&Lbd(I9c(d));e=j9c(this);g=e.Qi();a=!g?null:(g.i&1)!=0?g==u2?tE:g==FA?GE:g==EA?CE:g==DA?yE:g==GA?IE:g==t2?PE:g==BA?uE:vE:g;b=H9c(this);h=e.Oi();cyd(this);(this.Bb&RJd)!=0&&(!!(f=utd((uyd(),syd),c))&&f!=this||!!(f=aud(rtd(syd,this))))?(this.p=new Uld(this,f)):this.lj()?this.Dj()?!d?(this.Bb&iVd)!=0?!a?this.Ej()?(this.p=new bmd(42,this)):(this.p=new bmd(0,this)):a==qG?(this.p=new _ld(50,PX,this)):this.Ej()?(this.p=new _ld(43,a,this)):(this.p=new _ld(1,a,this)):!a?this.Ej()?(this.p=new bmd(44,this)):(this.p=new bmd(2,this)):a==qG?(this.p=new _ld(41,PX,this)):this.Ej()?(this.p=new _ld(45,a,this)):(this.p=new _ld(3,a,this)):(this.Bb&iVd)!=0?!a?this.Ej()?(this.p=new cmd(46,this,d)):(this.p=new cmd(4,this,d)):this.Ej()?(this.p=new amd(47,a,this,d)):(this.p=new amd(5,a,this,d)):!a?this.Ej()?(this.p=new cmd(48,this,d)):(this.p=new cmd(6,this,d)):this.Ej()?(this.p=new amd(49,a,this,d)):(this.p=new amd(7,a,this,d)):sA(e,140)?a==G0?(this.p=new bmd(40,this)):(this.Bb&512)!=0?(this.Bb&iVd)!=0?!a?(this.p=new bmd(8,this)):(this.p=new _ld(9,a,this)):!a?(this.p=new bmd(10,this)):(this.p=new _ld(11,a,this)):(this.Bb&iVd)!=0?!a?(this.p=new bmd(12,this)):(this.p=new _ld(13,a,this)):!a?(this.p=new bmd(14,this)):(this.p=new _ld(15,a,this)):!d?this.Ej()?(this.Bb&iVd)!=0?!a?(this.p=new bmd(16,this)):(this.p=new _ld(17,a,this)):!a?(this.p=new bmd(18,this)):(this.p=new _ld(19,a,this)):(this.Bb&iVd)!=0?!a?(this.p=new bmd(20,this)):(this.p=new _ld(21,a,this)):!a?(this.p=new bmd(22,this)):(this.p=new _ld(23,a,this)):(i=d.t,i>1||i==-1?this.Ej()?(this.Bb&iVd)!=0?!a?(this.p=new cmd(24,this,d)):(this.p=new amd(25,a,this,d)):!a?(this.p=new cmd(26,this,d)):(this.p=new amd(27,a,this,d)):(this.Bb&iVd)!=0?!a?(this.p=new cmd(28,this,d)):(this.p=new amd(29,a,this,d)):!a?(this.p=new cmd(30,this,d)):(this.p=new amd(31,a,this,d)):this.Ej()?(this.Bb&iVd)!=0?!a?(this.p=new cmd(32,this,d)):(this.p=new amd(33,a,this,d)):!a?(this.p=new cmd(34,this,d)):(this.p=new amd(35,a,this,d)):(this.Bb&iVd)!=0?!a?(this.p=new cmd(36,this,d)):(this.p=new amd(37,a,this,d)):!a?(this.p=new cmd(38,this,d)):(this.p=new amd(39,a,this,d))):this.Cj()?this.Ej()?(this.p=new umd(kA(e,24),this,d)):(this.p=new nmd(kA(e,24),this,d)):sA(e,140)?a==G0?(this.p=new bmd(40,this)):(this.Bb&iVd)!=0?!a?(this.p=new rnd(kA(e,140),b,h,this)):(this.p=new tnd(b,h,this,(Lmd(),g==FA?Hmd:g==u2?Cmd:g==GA?Imd:g==EA?Gmd:g==DA?Fmd:g==t2?Kmd:g==BA?Dmd:g==CA?Emd:Jmd))):!a?(this.p=new lnd(kA(e,140),b,h,this)):(this.p=new nnd(b,h,this,(Lmd(),g==FA?Hmd:g==u2?Cmd:g==GA?Imd:g==EA?Gmd:g==DA?Fmd:g==t2?Kmd:g==BA?Dmd:g==CA?Emd:Jmd))):this.Dj()?!d?(this.Bb&iVd)!=0?this.Ej()?(this.p=new Mnd(kA(e,24),this)):(this.p=new Knd(kA(e,24),this)):this.Ej()?(this.p=new Ind(kA(e,24),this)):(this.p=new Gnd(kA(e,24),this)):(this.Bb&iVd)!=0?this.Ej()?(this.p=new Und(kA(e,24),this,d)):(this.p=new Snd(kA(e,24),this,d)):this.Ej()?(this.p=new Qnd(kA(e,24),this,d)):(this.p=new Ond(kA(e,24),this,d)):this.Ej()?!d?(this.Bb&iVd)!=0?(this.p=new Ynd(kA(e,24),this)):(this.p=new Wnd(kA(e,24),this)):(this.Bb&iVd)!=0?(this.p=new aod(kA(e,24),this,d)):(this.p=new $nd(kA(e,24),this,d)):!d?(this.Bb&iVd)!=0?(this.p=new cod(kA(e,24),this)):(this.p=new vnd(kA(e,24),this)):(this.Bb&iVd)!=0?(this.p=new god(kA(e,24),this,d)):(this.p=new eod(kA(e,24),this,d))}return this.p};_.Xi=function kad(){return (this.Bb&hVd)!=0};_.Cj=function lad(){return false};_.Dj=function mad(){return false};_.Yi=function nad(){return (this.Bb&RJd)!=0};_.bj=function oad(){return K9c(this)};_.Ej=function pad(){return false};_.Zi=function qad(){return (this.Bb&iVd)!=0};_.Fj=function rad(a){this.k=a};_.ah=function sad(a){Q9c(this,a)};_.Ib=function tad(){return U9c(this)};_.e=false;_.n=0;var q$=k4(dTd,'EStructuralFeatureImpl',418);c3(335,418,{95:1,91:1,87:1,29:1,139:1,174:1,51:1,158:1,61:1,103:1,431:1,42:1,92:1,335:1,142:1,418:1,268:1,107:1,108:1,615:1},zad);_.ug=function Aad(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return B3(),(this.Bb&256)!=0?true:false;case 3:return B3(),(this.Bb&512)!=0?true:false;case 4:return d5(this.s);case 5:return d5(this.t);case 6:return B3(),wad(this)?true:false;case 7:return B3(),e=this.s,e>=1?true:false;case 8:if(b)return j9c(this);return this.r;case 9:return this.q;case 10:return B3(),(this.Bb&hVd)!=0?true:false;case 11:return B3(),(this.Bb&jVd)!=0?true:false;case 12:return B3(),(this.Bb&qLd)!=0?true:false;case 13:return this.j;case 14:return H9c(this);case 15:return B3(),(this.Bb&iVd)!=0?true:false;case 16:return B3(),(this.Bb&RJd)!=0?true:false;case 17:return I9c(this);case 18:return B3(),(this.Bb&bTd)!=0?true:false;case 19:if(b)return vad(this);return uad(this);}return EMc(this,a-Lbd((j7c(),R6c)),Gbd((d=kA(VNc(this,16),24),!d?R6c:d),a),b,c)};_.Fg=function Bad(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return wad(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&ohd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&ohd(this.q).i==0);case 10:return (this.Bb&hVd)==0;case 11:return (this.Bb&jVd)!=0;case 12:return (this.Bb&qLd)!=0;case 13:return this.j!=null;case 14:return H9c(this)!=null;case 15:return (this.Bb&iVd)!=0;case 16:return (this.Bb&RJd)!=0;case 17:return !!I9c(this);case 18:return (this.Bb&bTd)!=0;case 19:return !!uad(this);}return FMc(this,a-Lbd((j7c(),R6c)),Gbd((b=kA(VNc(this,16),24),!b?R6c:b),a))};_.Mg=function Cad(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:Q9c(this,pA(b));return;case 2:o9c(this,Vpb(mA(b)));return;case 3:p9c(this,Vpb(mA(b)));return;case 4:n9c(this,kA(b,21).a);return;case 5:yad(this,kA(b,21).a);return;case 8:l9c(this,kA(b,133));return;case 9:d=k9c(this,kA(b,84),null);!!d&&d.Th();return;case 10:L9c(this,Vpb(mA(b)));return;case 11:T9c(this,Vpb(mA(b)));return;case 12:R9c(this,Vpb(mA(b)));return;case 13:M9c(this,pA(b));return;case 15:S9c(this,Vpb(mA(b)));return;case 16:O9c(this,Vpb(mA(b)));return;case 18:xad(this,Vpb(mA(b)));return;}GMc(this,a-Lbd((j7c(),R6c)),Gbd((c=kA(VNc(this,16),24),!c?R6c:c),a),b)};_.Rg=function Dad(){return j7c(),R6c};_.Xg=function Ead(){vad(this);bud(rtd((uyd(),syd),this));j9c(this);this.Bb|=1};_.lj=function Fad(){return wad(this)};_.zj=function Gad(a,b){this.b=0;this.a=null;return m9c(this,a,b)};_.Aj=function Had(a){yad(this,a)};_.Ib=function Iad(){var a;if((this.Db&64)!=0)return U9c(this);a=new B6(U9c(this));a.a+=' (iD: ';x6(a,(this.Bb&bTd)!=0);a.a+=')';return a.a};_.b=0;var MY=k4(dTd,'EAttributeImpl',335);c3(672,399,{95:1,91:1,87:1,133:1,139:1,174:1,51:1,103:1,42:1,92:1,142:1,107:1,108:1,614:1});_.Gj=function Zad(a){return a.mg()==this};_.jg=function $ad(a){return Mad(this,a)};_.kg=function _ad(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_.ug=function abd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return Pad(this);case 4:return this.Oi();case 5:return this.F;case 6:if(b)return Nad(this);return Jad(this);case 7:return !this.A&&(this.A=new Bwd(AY,this,7)),this.A;}return EMc(this,a-Lbd(this.Rg()),Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),a),b,c)};_.Bg=function bbd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Mad(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,6,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),f.aj().dj(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Dg=function cbd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 6:return CMc(this,null,6,c);case 7:return !this.A&&(this.A=new Bwd(AY,this,7)),q_c(this.A,a,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?this.Rg():d),b),61),e.aj().ej(this,TNc(this),b-Lbd(this.Rg()),a,c)};_.Fg=function dbd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!Pad(this);case 4:return this.Oi()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!Jad(this);case 7:return !!this.A&&this.A.i!=0;}return FMc(this,a-Lbd(this.Rg()),Gbd((b=kA(VNc(this,16),24),!b?this.Rg():b),a))};_.Mg=function ebd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:Xad(this,pA(b));return;case 2:Uad(this,pA(b));return;case 5:Wad(this,pA(b));return;case 7:!this.A&&(this.A=new Bwd(AY,this,7));r_c(this.A);!this.A&&(this.A=new Bwd(AY,this,7));gXc(this.A,kA(b,13));return;}GMc(this,a-Lbd(this.Rg()),Gbd((c=kA(VNc(this,16),24),!c?this.Rg():c),a),b)};_.Rg=function fbd(){return j7c(),T6c};_.Ni=function gbd(){var a;return this.G==-1&&(this.G=(a=Nad(this),a?pcd(a.bh(),this):-1)),this.G};_.Oi=function hbd(){return null};_.Pi=function ibd(){return Nad(this)};_.Hj=function jbd(){return this.v};_.Qi=function kbd(){return Pad(this)};_.Ri=function lbd(){return this.D!=null?this.D:this.B};_.Si=function mbd(){return this.F};_.Li=function nbd(a){return Rad(this,a)};_.Ij=function obd(a){this.v=a};_.Jj=function pbd(a){Sad(this,a)};_.Kj=function qbd(a){this.C=a};_.ah=function rbd(a){Xad(this,a)};_.Ib=function sbd(){return Yad(this)};_.C=null;_.D=null;_.G=-1;var cZ=k4(dTd,'EClassifierImpl',672);c3(96,672,{95:1,91:1,87:1,24:1,133:1,139:1,174:1,51:1,103:1,42:1,92:1,96:1,142:1,432:1,107:1,108:1,614:1},Sbd);_.Gj=function Tbd(a){return Obd(this,a.mg())};_.ug=function Ubd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return Pad(this);case 4:return null;case 5:return this.F;case 6:if(b)return Nad(this);return Jad(this);case 7:return !this.A&&(this.A=new Bwd(AY,this,7)),this.A;case 8:return B3(),(this.Bb&256)!=0?true:false;case 9:return B3(),(this.Bb&512)!=0?true:false;case 10:return Kbd(this);case 11:return !this.q&&(this.q=new zkd(tY,this,11,10)),this.q;case 12:return xbd(this);case 13:return Bbd(this);case 14:return Bbd(this),this.r;case 15:return xbd(this),this.k;case 16:return ybd(this);case 17:return Abd(this);case 18:return Cbd(this);case 19:return Dbd(this);case 20:return xbd(this),this.o;case 21:return !this.s&&(this.s=new zkd(zY,this,21,17)),this.s;case 22:return Ebd(this);case 23:return zbd(this);}return EMc(this,a-Lbd((j7c(),S6c)),Gbd((d=kA(VNc(this,16),24),!d?S6c:d),a),b,c)};_.Bg=function Vbd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Mad(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,6,c);case 11:return !this.q&&(this.q=new zkd(tY,this,11,10)),p_c(this.q,a,c);case 21:return !this.s&&(this.s=new zkd(zY,this,21,17)),p_c(this.s,a,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),S6c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),S6c)),a,c)};_.Dg=function Wbd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 6:return CMc(this,null,6,c);case 7:return !this.A&&(this.A=new Bwd(AY,this,7)),q_c(this.A,a,c);case 11:return !this.q&&(this.q=new zkd(tY,this,11,10)),q_c(this.q,a,c);case 21:return !this.s&&(this.s=new zkd(zY,this,21,17)),q_c(this.s,a,c);case 22:return q_c(Ebd(this),a,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),S6c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),S6c)),a,c)};_.Fg=function Xbd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!Pad(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!Jad(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&Ebd(this.u.a).i!=0&&!(!!this.n&&ndd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return xbd(this).i!=0;case 13:return Bbd(this).i!=0;case 14:return Bbd(this),this.r.i!=0;case 15:return xbd(this),this.k.i!=0;case 16:return ybd(this).i!=0;case 17:return Abd(this).i!=0;case 18:return Cbd(this).i!=0;case 19:return Dbd(this).i!=0;case 20:return xbd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&ndd(this.n);case 23:return zbd(this).i!=0;}return FMc(this,a-Lbd((j7c(),S6c)),Gbd((b=kA(VNc(this,16),24),!b?S6c:b),a))};_.Ig=function Ybd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:Hbd(this,a);return b?b:KQc(this,a)};_.Mg=function Zbd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:Xad(this,pA(b));return;case 2:Uad(this,pA(b));return;case 5:Wad(this,pA(b));return;case 7:!this.A&&(this.A=new Bwd(AY,this,7));r_c(this.A);!this.A&&(this.A=new Bwd(AY,this,7));gXc(this.A,kA(b,13));return;case 8:Pbd(this,Vpb(mA(b)));return;case 9:Qbd(this,Vpb(mA(b)));return;case 10:VZc(Kbd(this));gXc(Kbd(this),kA(b,13));return;case 11:!this.q&&(this.q=new zkd(tY,this,11,10));r_c(this.q);!this.q&&(this.q=new zkd(tY,this,11,10));gXc(this.q,kA(b,13));return;case 21:!this.s&&(this.s=new zkd(zY,this,21,17));r_c(this.s);!this.s&&(this.s=new zkd(zY,this,21,17));gXc(this.s,kA(b,13));return;case 22:r_c(Ebd(this));gXc(Ebd(this),kA(b,13));return;}GMc(this,a-Lbd((j7c(),S6c)),Gbd((c=kA(VNc(this,16),24),!c?S6c:c),a),b)};_.Rg=function $bd(){return j7c(),S6c};_.Xg=function _bd(){var a,b;xbd(this);Bbd(this);ybd(this);Abd(this);Cbd(this);Dbd(this);zbd(this);UXc(zdd(Jbd(this)));if(this.s){for(a=0,b=this.s.i;a=0;--a){WXc(this,a)}}return aYc(this)};_.zc=function Vcd(a){var b;if(this.Qj()){for(b=this.i-1;b>=0;--b){WXc(this,b)}}return bYc(this,a)};_.ij=function Wcd(){r_c(this)};_.Ch=function Xcd(a,b){return scd(this,a,b)};var w0=k4(eVd,'EcoreEList',565);c3(450,565,vVd,Ycd);_.rh=function Zcd(){return false};_.pi=function $cd(){return this.c};_.qi=function _cd(){return false};_.Rj=function bdd(){return true};_.xh=function cdd(){return true};_.zh=function ddd(a,b){return b};_.Bh=function edd(){return false};_.c=0;var g0=k4(eVd,'EObjectEList',450);c3(88,450,vVd,fdd);_.qi=function gdd(){return true};_.Pj=function hdd(){return false};_.Dj=function idd(){return true};var a0=k4(eVd,'EObjectContainmentEList',88);c3(493,88,vVd,jdd);_.th=function kdd(){this.a=true};_.ui=function ldd(){return this.a};_.ij=function mdd(){var a;r_c(this);if(PMc(this.e)){a=this.a;this.a=false;vMc(this.e,new Pid(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var __=k4(eVd,'EObjectContainmentEList/Unsettable',493);c3(1003,493,vVd,rdd);_.yi=function vdd(a,b){return odd(this,kA(a,84),b)};_.zi=function wdd(a,b){return pdd(this,kA(a,84),b)};_.Ai=function xdd(a,b,c){return qdd(this,kA(a,84),kA(b,84),c)};_.mi=function sdd(a,b,c,d,e){switch(a){case 3:{return ncd(this,3,b,c,d,this.i>1)}case 5:{return ncd(this,5,b,c,d,this.i-kA(c,15)._b()>0)}default:{return new Oid(this.e,a,this.c,b,c,d,true)}}};_.xi=function tdd(){return true};_.ui=function udd(){return ndd(this)};_.ij=function ydd(){r_c(this)};var SY=k4(dTd,'EClassImpl/1',1003);c3(1017,1016,KUd);_.Ih=function Cdd(a){var b,c,d,e,f,g,h;c=a.Lh();if(c!=8){d=Bdd(a);if(d==0){switch(c){case 1:case 9:{h=a.Ph();if(h!=null){b=Jbd(kA(h,432));!b.c&&(b.c=new zod);mXc(b.c,a.Oh())}g=a.Nh();if(g!=null){e=kA(g,432);if((e.Bb&1)==0){b=Jbd(e);!b.c&&(b.c=new zod);fXc(b.c,kA(a.Oh(),24))}}break}case 3:{g=a.Nh();if(g!=null){e=kA(g,432);if((e.Bb&1)==0){b=Jbd(e);!b.c&&(b.c=new zod);fXc(b.c,kA(a.Oh(),24))}}break}case 5:{g=a.Nh();if(g!=null){for(f=kA(g,13).tc();f.hc();){e=kA(f.ic(),432);if((e.Bb&1)==0){b=Jbd(e);!b.c&&(b.c=new zod);fXc(b.c,kA(a.Oh(),24))}}}break}case 4:{h=a.Ph();if(h!=null){e=kA(h,432);if((e.Bb&1)==0){b=Jbd(e);!b.c&&(b.c=new zod);mXc(b.c,a.Oh())}}break}case 6:{h=a.Ph();if(h!=null){for(f=kA(h,13).tc();f.hc();){e=kA(f.ic(),432);if((e.Bb&1)==0){b=Jbd(e);!b.c&&(b.c=new zod);mXc(b.c,a.Oh())}}}break}}}this.Tj(d)}};_.Tj=function Ddd(a){Add(this,a)};_.b=63;var s$=k4(dTd,'ESuperAdapter',1017);c3(1018,1017,KUd,Fdd);_.Tj=function Gdd(a){Edd(this,a)};var NY=k4(dTd,'EClassImpl/10',1018);c3(1007,630,vVd);_.lh=function Hdd(a){return PXc(this,a)};_.mh=function Idd(a,b){QXc(this,a,b)};_.nh=function Jdd(a){RXc(this,a)};_.Dh=function Ldd(a){return TXc(this,a)};_.Ah=function Tdd(a,b){return $Xc(this,a,b)};_.xj=function Kdd(a,b){throw x2(new U6)};_.oh=function Mdd(){return new v0c(this)};_.ph=function Ndd(){return new y0c(this)};_.qh=function Odd(a){return hXc(this,a)};_.yj=function Pdd(a,b){throw x2(new U6)};_.hj=function Qdd(a){return this};_.ui=function Rdd(){return this.i!=0};_.Gc=function Sdd(a){throw x2(new U6)};_.ij=function Udd(){throw x2(new U6)};var v0=k4(eVd,'EcoreEList/UnmodifiableEList',1007);c3(301,1007,vVd,Vdd);_.Bh=function Wdd(){return false};var u0=k4(eVd,'EcoreEList/UnmodifiableEList/FastCompare',301);c3(1010,301,vVd,Zdd);_.dd=function $dd(a){var b,c,d;if(sA(a,158)){b=kA(a,158);c=b.pi();if(c!=-1){for(d=this.i;c4){if(this.Li(a)){if(this.Dj()){d=kA(a,42);c=d.ng();h=c==this.b&&(this.Pj()?d.hg(d.og(),kA(Gbd(RNc(this.b),this.pi()).jj(),24).Qi())==Wkd(kA(Gbd(RNc(this.b),this.pi()),17)).n:-1-d.og()==this.pi());if(this.Qj()&&!h&&!c&&!!d.sg()){for(e=0;e1||d==-1)}else{return false}};_.Pj=function ifd(){var a,b,c;b=Gbd(RNc(this.b),this.pi());if(sA(b,62)){a=kA(b,17);c=Wkd(a);return !!c}else{return false}};_.Qj=function jfd(){var a,b;b=Gbd(RNc(this.b),this.pi());if(sA(b,62)){a=kA(b,17);return (a.Bb&sLd)!=0}else{return false}};_.dd=function kfd(a){var b,c,d,e;d=this.ci(a);if(d>=0)return d;if(this.Rj()){for(c=0,e=this.hi();c=0;--a){Ved(this,a,this.ai(a))}}return this.ii()};_.zc=function wfd(a){var b;if(this.Qj()){for(b=this.hi()-1;b>=0;--b){Ved(this,b,this.ai(b))}}return this.ji(a)};_.ij=function xfd(){VZc(this)};_.Ch=function yfd(a,b){return Xed(this,a,b)};var N_=k4(eVd,'DelegatingEcoreEList',674);c3(1013,674,AVd,Efd);_.Vh=function Hfd(a,b){zfd(this,a,kA(b,24))};_.Wh=function Ifd(a){Afd(this,kA(a,24))};_.ai=function Ofd(a){var b,c;return b=kA(WXc(Ebd(this.a),a),84),c=b.c,sA(c,96)?kA(c,24):(j7c(),a7c)};_.fi=function Tfd(a){var b,c;return b=kA(t_c(Ebd(this.a),a),84),c=b.c,sA(c,96)?kA(c,24):(j7c(),a7c)};_.gi=function Ufd(a,b){return Cfd(this,a,kA(b,24))};_.rh=function Ffd(){return false};_.mi=function Gfd(a,b,c,d,e){return null};_.Xh=function Jfd(){return new kgd(this)};_.Yh=function Kfd(){r_c(Ebd(this.a))};_.Zh=function Lfd(a){return Bfd(this,a)};_.$h=function Mfd(a){var b,c;for(c=a.tc();c.hc();){b=c.ic();if(!Bfd(this,b)){return false}}return true};_._h=function Nfd(a){var b,c,d;if(sA(a,15)){d=kA(a,15);if(d._b()==Ebd(this.a).i){for(b=d.tc(),c=new a0c(this);b.hc();){if(yA(b.ic())!==yA($_c(c))){return false}}return true}}return false};_.bi=function Pfd(){var a,b,c,d,e;c=1;for(b=new a0c(Ebd(this.a));b.e!=b.i._b();){a=kA($_c(b),84);d=(e=a.c,sA(e,96)?kA(e,24):(j7c(),a7c));c=31*c+(!d?0:bqb(d))}return c};_.ci=function Qfd(a){var b,c,d,e;d=0;for(c=new a0c(Ebd(this.a));c.e!=c.i._b();){b=kA($_c(c),84);if(yA(a)===yA((e=b.c,sA(e,96)?kA(e,24):(j7c(),a7c)))){return d}++d}return -1};_.di=function Rfd(){return Ebd(this.a).i==0};_.ei=function Sfd(){return null};_.hi=function Vfd(){return Ebd(this.a).i};_.ii=function Wfd(){var a,b,c,d,e,f;f=Ebd(this.a).i;e=tz(NE,oJd,1,f,5,1);c=0;for(b=new a0c(Ebd(this.a));b.e!=b.i._b();){a=kA($_c(b),84);e[c++]=(d=a.c,sA(d,96)?kA(d,24):(j7c(),a7c))}return e};_.ji=function Xfd(a){var b,c,d,e,f,g,h;h=Ebd(this.a).i;if(a.lengthh&&wz(a,h,null);d=0;for(c=new a0c(Ebd(this.a));c.e!=c.i._b();){b=kA($_c(c),84);f=(g=b.c,sA(g,96)?kA(g,24):(j7c(),a7c));wz(a,d++,f)}return a};_.ki=function Yfd(){var a,b,c,d,e;e=new z6;e.a+='[';a=Ebd(this.a);for(b=0,d=Ebd(this.a).i;b>16,e>=0?Mad(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,6,c);case 9:return !this.a&&(this.a=new zkd(mY,this,9,5)),p_c(this.a,a,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),V6c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),V6c)),a,c)};_.Dg=function Kgd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 6:return CMc(this,null,6,c);case 7:return !this.A&&(this.A=new Bwd(AY,this,7)),q_c(this.A,a,c);case 9:return !this.a&&(this.a=new zkd(mY,this,9,5)),q_c(this.a,a,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),V6c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),V6c)),a,c)};_.Fg=function Lgd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!Pad(this);case 4:return !!Fgd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!Jad(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return FMc(this,a-Lbd((j7c(),V6c)),Gbd((b=kA(VNc(this,16),24),!b?V6c:b),a))};_.Mg=function Mgd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:Xad(this,pA(b));return;case 2:Uad(this,pA(b));return;case 5:Wad(this,pA(b));return;case 7:!this.A&&(this.A=new Bwd(AY,this,7));r_c(this.A);!this.A&&(this.A=new Bwd(AY,this,7));gXc(this.A,kA(b,13));return;case 8:rgd(this,Vpb(mA(b)));return;case 9:!this.a&&(this.a=new zkd(mY,this,9,5));r_c(this.a);!this.a&&(this.a=new zkd(mY,this,9,5));gXc(this.a,kA(b,13));return;}GMc(this,a-Lbd((j7c(),V6c)),Gbd((c=kA(VNc(this,16),24),!c?V6c:c),a),b)};_.Rg=function Ngd(){return j7c(),V6c};_.Xg=function Ogd(){var a,b;if(this.a){for(a=0,b=this.a.i;a>16==5?kA(this.Cb,608):null;}return EMc(this,a-Lbd((j7c(),W6c)),Gbd((d=kA(VNc(this,16),24),!d?W6c:d),a),b,c)};_.Bg=function $gd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Sgd(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,5,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),W6c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),W6c)),a,c)};_.Dg=function _gd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 5:return CMc(this,null,5,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),W6c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),W6c)),a,c)};_.Fg=function ahd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?kA(this.Cb,608):null);}return FMc(this,a-Lbd((j7c(),W6c)),Gbd((b=kA(VNc(this,16),24),!b?W6c:b),a))};_.Mg=function bhd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:wRc(this,pA(b));return;case 2:Wgd(this,kA(b,21).a);return;case 3:Ugd(this,kA(b,1634));return;case 4:Vgd(this,pA(b));return;}GMc(this,a-Lbd((j7c(),W6c)),Gbd((c=kA(VNc(this,16),24),!c?W6c:c),a),b)};_.Rg=function chd(){return j7c(),W6c};_.Ib=function ehd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var fZ=k4(dTd,'EEnumLiteralImpl',525);var hZ=m4(dTd,'EFactoryImpl/InternalEDateTimeFormat');c3(445,1,{1699:1},hhd);var gZ=k4(dTd,'EFactoryImpl/1ClientInternalEDateTimeFormat',445);c3(217,108,{95:1,91:1,87:1,84:1,51:1,103:1,42:1,92:1,217:1,107:1,108:1},xhd);_.lg=function yhd(a,b,c){var d;c=CMc(this,a,b,c);if(!!this.e&&sA(a,158)){d=phd(this,this.e);d!=this.c&&(c=thd(this,d,c))}return c};_.ug=function zhd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new fdd(pY,this,1)),this.d;case 2:if(b)return nhd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return mhd(this);return this.a;}return EMc(this,a-Lbd((j7c(),Y6c)),Gbd((d=kA(VNc(this,16),24),!d?Y6c:d),a),b,c)};_.Dg=function Ahd(a,b,c){var d,e;switch(b){case 0:return lhd(this,null,c);case 1:return !this.d&&(this.d=new fdd(pY,this,1)),q_c(this.d,a,c);case 3:return jhd(this,null,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),Y6c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),Y6c)),a,c)};_.Fg=function Bhd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return FMc(this,a-Lbd((j7c(),Y6c)),Gbd((b=kA(VNc(this,16),24),!b?Y6c:b),a))};_.Mg=function Chd(a,b){var c;switch(a){case 0:vhd(this,kA(b,84));return;case 1:!this.d&&(this.d=new fdd(pY,this,1));r_c(this.d);!this.d&&(this.d=new fdd(pY,this,1));gXc(this.d,kA(b,13));return;case 3:shd(this,kA(b,84));return;case 4:uhd(this,kA(b,742));return;case 5:qhd(this,kA(b,133));return;}GMc(this,a-Lbd((j7c(),Y6c)),Gbd((c=kA(VNc(this,16),24),!c?Y6c:c),a),b)};_.Rg=function Dhd(){return j7c(),Y6c};_.Ib=function Ehd(){var a;a=new O6(aNc(this));a.a+=' (expression: ';whd(this,a);a.a+=')';return a.a};var ihd;var jZ=k4(dTd,'EGenericTypeImpl',217);c3(1667,1657,BVd);_.xj=function Ghd(a,b){Fhd(this,this._b(),a);return b};_.Dh=function Hhd(a){return Fq(this.Uh(),a)};_.oh=function Ihd(){return this.ph()};_.Uh=function Jhd(){return new Psd(this)};_.ph=function Khd(){return this.qh(0)};_.qh=function Lhd(a){return this.Uh().fd(a)};_.yj=function Mhd(a,b){qg(this,a,true);return b};var E_=k4(eVd,'AbstractSequentialInternalEList',1667);c3(444,1667,BVd,Rhd);_.Dh=function Shd(a){return Fq(this.Uh(),a)};_.oh=function Thd(){if(this.b==null){return iid(),iid(),hid}return this.Vj()};_.Uh=function Uhd(){return new nwd(this.a,this.b)};_.ph=function Vhd(){if(this.b==null){return iid(),iid(),hid}return this.Vj()};_.qh=function Whd(a){var b,c;if(this.b==null){if(a<0||a>1){throw x2(new q3(NUd+a+', size=0'))}return iid(),iid(),hid}c=this.Vj();for(b=0;b0){b=this.c[--this.d];if((!this.e||b.Vi()!=FV||b.pi()!=0)&&(!this.Yj()||this.b.Gg(b))){f=this.b.wg(b,this.Xj());this.f=(wyd(),kA(b,61).bj());if(this.f||b.lj()){if(this.Xj()){d=kA(f,15);this.k=d}else{d=kA(f,64);this.k=this.j=d}if(sA(this.k,49)){this.o=this.k._b();this.n=this.o}else{this.p=!this.j?this.k.fd(this.k._b()):this.j.qh(this.k._b())}if(!this.p?mid(this):nid(this,this.p)){e=!this.p?!this.j?this.k.cd(--this.n):this.j.Dh(--this.n):this.p.Ec();if(this.f){a=kA(e,75);a.nj();c=a.lc();this.i=c}else{this.i=e}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;this.i=f;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.cd(--this.n):this.j.Dh(--this.n):this.p.Ec();if(this.f){a=kA(e,75);a.nj();c=a.lc();this.i=c}else{this.i=e}this.g=-3;return true}}}};_.ic=function uid(){return jid(this)};_.Dc=function vid(){return this.a};_.Ec=function wid(){var a;if(this.g<-1||this.Cc()){--this.a;this.g=0;a=this.i;this.Cc();return a}else{throw x2(new djb)}};_.Fc=function xid(){return this.a-1};_.jc=function yid(){throw x2(new U6)};_.Xj=function zid(){return false};_.Gc=function Aid(a){throw x2(new U6)};_.Yj=function Bid(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var hid;var S_=k4(eVd,'EContentsEList/FeatureIteratorImpl',260);c3(631,260,CVd,Cid);_.Xj=function Did(){return true};var T_=k4(eVd,'EContentsEList/ResolvingFeatureIteratorImpl',631);c3(1020,631,CVd,Eid);_.Yj=function Fid(){return false};var lZ=k4(dTd,'ENamedElementImpl/1/1',1020);c3(1021,260,CVd,Gid);_.Yj=function Hid(){return false};var mZ=k4(dTd,'ENamedElementImpl/1/2',1021);c3(32,136,MUd,Kid,Lid,Mid,Nid,Oid,Pid,Qid,Rid,Sid,Tid,Uid,Vid,Wid,Xid,Yid,Zid,$id,_id,ajd,cjd,djd,ejd,fjd,gjd);_.oi=function hjd(){return Jid(this)};_.vi=function ijd(){var a;a=Jid(this);if(a){return a.Oi()}return null};_.Mh=function jjd(a){this.b==-1&&!!this.a&&(this.b=this.c.qg(this.a.pi(),this.a.Vi()));return this.c.hg(this.b,a)};_.Oh=function kjd(){return this.c};_.wi=function ljd(){var a;a=Jid(this);if(a){return a.Zi()}return false};_.b=-1;var pZ=k4(dTd,'ENotificationImpl',32);c3(371,268,{95:1,91:1,87:1,139:1,174:1,51:1,53:1,103:1,431:1,42:1,92:1,142:1,371:1,268:1,107:1,108:1},pjd);_.jg=function qjd(a){return mjd(this,a)};_.ug=function rjd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return B3(),(this.Bb&256)!=0?true:false;case 3:return B3(),(this.Bb&512)!=0?true:false;case 4:return d5(this.s);case 5:return d5(this.t);case 6:return B3(),f=this.t,f>1||f==-1?true:false;case 7:return B3(),e=this.s,e>=1?true:false;case 8:if(b)return j9c(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?kA(this.Cb,24):null;case 11:return !this.d&&(this.d=new Bwd(AY,this,11)),this.d;case 12:return !this.c&&(this.c=new zkd(vY,this,12,10)),this.c;case 13:return !this.a&&(this.a=new Djd(this,this)),this.a;case 14:return njd(this);}return EMc(this,a-Lbd((j7c(),b7c)),Gbd((d=kA(VNc(this,16),24),!d?b7c:d),a),b,c)};_.Bg=function sjd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mjd(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,10,c);case 12:return !this.c&&(this.c=new zkd(vY,this,12,10)),p_c(this.c,a,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),b7c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),b7c)),a,c)};_.Dg=function tjd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 9:return i9c(this,c);case 10:return CMc(this,null,10,c);case 11:return !this.d&&(this.d=new Bwd(AY,this,11)),q_c(this.d,a,c);case 12:return !this.c&&(this.c=new zkd(vY,this,12,10)),q_c(this.c,a,c);case 14:return q_c(njd(this),a,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),b7c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),b7c)),a,c)};_.Fg=function ujd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&ohd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&ohd(this.q).i==0);case 10:return !!(this.Db>>16==10?kA(this.Cb,24):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&njd(this.a.a).i!=0&&!(!!this.b&&mkd(this.b));case 14:return !!this.b&&mkd(this.b);}return FMc(this,a-Lbd((j7c(),b7c)),Gbd((b=kA(VNc(this,16),24),!b?b7c:b),a))};_.Mg=function vjd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:wRc(this,pA(b));return;case 2:o9c(this,Vpb(mA(b)));return;case 3:p9c(this,Vpb(mA(b)));return;case 4:n9c(this,kA(b,21).a);return;case 5:q9c(this,kA(b,21).a);return;case 8:l9c(this,kA(b,133));return;case 9:d=k9c(this,kA(b,84),null);!!d&&d.Th();return;case 11:!this.d&&(this.d=new Bwd(AY,this,11));r_c(this.d);!this.d&&(this.d=new Bwd(AY,this,11));gXc(this.d,kA(b,13));return;case 12:!this.c&&(this.c=new zkd(vY,this,12,10));r_c(this.c);!this.c&&(this.c=new zkd(vY,this,12,10));gXc(this.c,kA(b,13));return;case 13:!this.a&&(this.a=new Djd(this,this));VZc(this.a);!this.a&&(this.a=new Djd(this,this));gXc(this.a,kA(b,13));return;case 14:r_c(njd(this));gXc(njd(this),kA(b,13));return;}GMc(this,a-Lbd((j7c(),b7c)),Gbd((c=kA(VNc(this,16),24),!c?b7c:c),a),b)};_.Rg=function wjd(){return j7c(),b7c};_.Xg=function xjd(){var a,b;if(this.c){for(a=0,b=this.c.i;ah&&wz(a,h,null);d=0;for(c=new a0c(njd(this.a));c.e!=c.i._b();){b=kA($_c(c),84);f=(g=b.c,g?g:(j7c(),Z6c));wz(a,d++,f)}return a};_.ki=function Xjd(){var a,b,c,d,e;e=new z6;e.a+='[';a=njd(this.a);for(b=0,d=njd(this.a).i;b1)}case 5:{return ncd(this,5,b,c,d,this.i-kA(c,15)._b()>0)}default:{return new Oid(this.e,a,this.c,b,c,d,true)}}};_.xi=function skd(){return true};_.ui=function tkd(){return mkd(this)};_.ij=function xkd(){r_c(this)};var tZ=k4(dTd,'EOperationImpl/2',1388);c3(456,1,{1631:1,456:1},ykd);var vZ=k4(dTd,'EPackageImpl/1',456);c3(18,88,vVd,zkd);_.Lj=function Akd(){return this.d};_.Mj=function Bkd(){return this.b};_.Pj=function Ckd(){return true};_.b=0;var e0=k4(eVd,'EObjectContainmentWithInverseEList',18);c3(364,18,vVd,Dkd);_.Qj=function Ekd(){return true};_.zh=function Fkd(a,b){return qcd(this,a,kA(b,51))};var b0=k4(eVd,'EObjectContainmentWithInverseEList/Resolving',364);c3(303,364,vVd,Gkd);_.th=function Hkd(){this.a.tb=null};var wZ=k4(dTd,'EPackageImpl/2',303);c3(1155,1,{},Ikd);var xZ=k4(dTd,'EPackageImpl/3',1155);c3(650,44,FLd,Lkd);_.Qb=function Mkd(a){return wA(a)?H8(this,a):!!Wgb(this.d,a)};var zZ=k4(dTd,'EPackageRegistryImpl',650);c3(468,268,{95:1,91:1,87:1,139:1,174:1,51:1,1703:1,103:1,431:1,42:1,92:1,142:1,468:1,268:1,107:1,108:1},Okd);_.jg=function Pkd(a){return Nkd(this,a)};_.ug=function Qkd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return B3(),(this.Bb&256)!=0?true:false;case 3:return B3(),(this.Bb&512)!=0?true:false;case 4:return d5(this.s);case 5:return d5(this.t);case 6:return B3(),f=this.t,f>1||f==-1?true:false;case 7:return B3(),e=this.s,e>=1?true:false;case 8:if(b)return j9c(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?kA(this.Cb,53):null;}return EMc(this,a-Lbd((j7c(),d7c)),Gbd((d=kA(VNc(this,16),24),!d?d7c:d),a),b,c)};_.Bg=function Rkd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),p_c(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Nkd(this,c):this.Cb.Cg(this,-1-e,null,c)));return CMc(this,a,10,c);}return f=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),d7c):d),b),61),f.aj().dj(this,TNc(this),b-Lbd((j7c(),d7c)),a,c)};_.Dg=function Skd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 9:return i9c(this,c);case 10:return CMc(this,null,10,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),d7c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),d7c)),a,c)};_.Fg=function Tkd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&ohd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&ohd(this.q).i==0);case 10:return !!(this.Db>>16==10?kA(this.Cb,53):null);}return FMc(this,a-Lbd((j7c(),d7c)),Gbd((b=kA(VNc(this,16),24),!b?d7c:b),a))};_.Rg=function Ukd(){return j7c(),d7c};var AZ=k4(dTd,'EParameterImpl',468);c3(62,418,{95:1,91:1,87:1,139:1,174:1,51:1,17:1,158:1,61:1,103:1,431:1,42:1,92:1,142:1,62:1,418:1,268:1,107:1,108:1,615:1},ald);_.ug=function bld(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return B3(),(this.Bb&256)!=0?true:false;case 3:return B3(),(this.Bb&512)!=0?true:false;case 4:return d5(this.s);case 5:return d5(this.t);case 6:return B3(),g=this.t,g>1||g==-1?true:false;case 7:return B3(),e=this.s,e>=1?true:false;case 8:if(b)return j9c(this);return this.r;case 9:return this.q;case 10:return B3(),(this.Bb&hVd)!=0?true:false;case 11:return B3(),(this.Bb&jVd)!=0?true:false;case 12:return B3(),(this.Bb&qLd)!=0?true:false;case 13:return this.j;case 14:return H9c(this);case 15:return B3(),(this.Bb&iVd)!=0?true:false;case 16:return B3(),(this.Bb&RJd)!=0?true:false;case 17:return I9c(this);case 18:return B3(),(this.Bb&bTd)!=0?true:false;case 19:return B3(),f=Wkd(this),!!f&&(f.Bb&bTd)!=0?true:false;case 20:return B3(),(this.Bb&sLd)!=0?true:false;case 21:if(b)return Wkd(this);return this.b;case 22:if(b)return Xkd(this);return Vkd(this);case 23:return !this.a&&(this.a=new Swd(hY,this,23)),this.a;}return EMc(this,a-Lbd((j7c(),e7c)),Gbd((d=kA(VNc(this,16),24),!d?e7c:d),a),b,c)};_.Fg=function cld(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&ohd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&ohd(this.q).i==0);case 10:return (this.Bb&hVd)==0;case 11:return (this.Bb&jVd)!=0;case 12:return (this.Bb&qLd)!=0;case 13:return this.j!=null;case 14:return H9c(this)!=null;case 15:return (this.Bb&iVd)!=0;case 16:return (this.Bb&RJd)!=0;case 17:return !!I9c(this);case 18:return (this.Bb&bTd)!=0;case 19:return d=Wkd(this),!!d&&(d.Bb&bTd)!=0;case 20:return (this.Bb&sLd)==0;case 21:return !!this.b;case 22:return !!Vkd(this);case 23:return !!this.a&&this.a.i!=0;}return FMc(this,a-Lbd((j7c(),e7c)),Gbd((b=kA(VNc(this,16),24),!b?e7c:b),a))};_.Mg=function dld(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:Q9c(this,pA(b));return;case 2:o9c(this,Vpb(mA(b)));return;case 3:p9c(this,Vpb(mA(b)));return;case 4:n9c(this,kA(b,21).a);return;case 5:q9c(this,kA(b,21).a);return;case 8:l9c(this,kA(b,133));return;case 9:d=k9c(this,kA(b,84),null);!!d&&d.Th();return;case 10:L9c(this,Vpb(mA(b)));return;case 11:T9c(this,Vpb(mA(b)));return;case 12:R9c(this,Vpb(mA(b)));return;case 13:M9c(this,pA(b));return;case 15:S9c(this,Vpb(mA(b)));return;case 16:O9c(this,Vpb(mA(b)));return;case 18:Ykd(this,Vpb(mA(b)));return;case 20:_kd(this,Vpb(mA(b)));return;case 21:$kd(this,kA(b,17));return;case 23:!this.a&&(this.a=new Swd(hY,this,23));r_c(this.a);!this.a&&(this.a=new Swd(hY,this,23));gXc(this.a,kA(b,13));return;}GMc(this,a-Lbd((j7c(),e7c)),Gbd((c=kA(VNc(this,16),24),!c?e7c:c),a),b)};_.Rg=function eld(){return j7c(),e7c};_.Xg=function fld(){Xkd(this);bud(rtd((uyd(),syd),this));j9c(this);this.Bb|=1};_.$i=function gld(){return Wkd(this)};_.Cj=function hld(){var a;return a=Wkd(this),!!a&&(a.Bb&bTd)!=0};_.Dj=function ild(){return (this.Bb&bTd)!=0};_.Ej=function jld(){return (this.Bb&sLd)!=0};_.zj=function kld(a,b){this.c=null;return m9c(this,a,b)};_.Ib=function lld(){var a;if((this.Db&64)!=0)return U9c(this);a=new B6(U9c(this));a.a+=' (containment: ';x6(a,(this.Bb&bTd)!=0);a.a+=', resolveProxies: ';x6(a,(this.Bb&sLd)!=0);a.a+=')';return a.a};var BZ=k4(dTd,'EReferenceImpl',62);c3(505,108,{95:1,38:1,91:1,87:1,134:1,51:1,103:1,42:1,92:1,505:1,107:1,108:1},rld);_.Fb=function wld(a){return this===a};_.kc=function yld(){return this.b};_.lc=function zld(){return this.c};_.Hb=function Ald(){return bqb(this)};_.kh=function Cld(a){mld(this,pA(a))};_.mc=function Dld(a){return qld(this,pA(a))};_.ug=function sld(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return EMc(this,a-Lbd((j7c(),f7c)),Gbd((d=kA(VNc(this,16),24),!d?f7c:d),a),b,c)};_.Fg=function tld(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return FMc(this,a-Lbd((j7c(),f7c)),Gbd((b=kA(VNc(this,16),24),!b?f7c:b),a))};_.Mg=function uld(a,b){var c;switch(a){case 0:nld(this,pA(b));return;case 1:pld(this,pA(b));return;}GMc(this,a-Lbd((j7c(),f7c)),Gbd((c=kA(VNc(this,16),24),!c?f7c:c),a),b)};_.Rg=function vld(){return j7c(),f7c};_.ih=function xld(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:hqb(a)}return this.a};_.jh=function Bld(a){this.a=a};_.Ib=function Eld(){var a;if((this.Db&64)!=0)return aNc(this);a=new B6(aNc(this));a.a+=' (key: ';w6(a,this.b);a.a+=', value: ';w6(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var CZ=k4(dTd,'EStringToStringMapEntryImpl',505);var F0=m4(eVd,'FeatureMap/Entry/Internal');c3(514,1,DVd);_.$j=function Hld(a){return this._j(kA(a,42))};_._j=function Ild(a){return this.$j(a)};_.Fb=function Jld(a){var b,c;if(this===a){return true}else if(sA(a,75)){b=kA(a,75);if(b.nj()==this.c){c=this.lc();return c==null?b.lc()==null:kb(c,b.lc())}else{return false}}else{return false}};_.nj=function Kld(){return this.c};_.Hb=function Lld(){var a;a=this.lc();return ob(this.c)^(a==null?0:ob(a))};_.Ib=function Mld(){var a,b;a=this.c;b=Nad(a.Wi()).fh();a.be();return (b!=null&&b.length!=0?b+':'+a.be():a.be())+'='+this.lc()};var DZ=k4(dTd,'EStructuralFeatureImpl/BasicFeatureMapEntry',514);c3(709,514,DVd,Pld);_._j=function Qld(a){return new Pld(this.c,a)};_.lc=function Rld(){return this.a};_.ak=function Sld(a,b,c){return Nld(this,a,this.a,b,c)};_.bk=function Tld(a,b,c){return Old(this,a,this.a,b,c)};var EZ=k4(dTd,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',709);c3(1363,1,{},Uld);_.cj=function Vld(a,b,c,d,e){var f;f=kA(IMc(a,this.b),237);return f.yk(this.a).hj(d)};_.dj=function Wld(a,b,c,d,e){var f;f=kA(IMc(a,this.b),237);return f.pk(this.a,d,e)};_.ej=function Xld(a,b,c,d,e){var f;f=kA(IMc(a,this.b),237);return f.qk(this.a,d,e)};_.fj=function Yld(a,b,c){var d;d=kA(IMc(a,this.b),237);return d.yk(this.a).ui()};_.gj=function Zld(a,b,c,d){var e;e=kA(IMc(a,this.b),237);e.yk(this.a).Gc(d)};var FZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1363);c3(82,1,{},_ld,amd,bmd,cmd);_.cj=function dmd(a,b,c,d,e){var f;f=b.Tg(c);f==null&&b.Ug(c,f=$ld(this,a));if(!e){switch(this.e){case 50:case 41:return kA(f,533).Hi();case 40:return kA(f,237).vk();}}return f};_.dj=function emd(a,b,c,d,e){var f,g;g=b.Tg(c);g==null&&b.Ug(c,g=$ld(this,a));f=kA(g,64).xj(d,e);return f};_.ej=function fmd(a,b,c,d,e){var f;f=b.Tg(c);f!=null&&(e=kA(f,64).yj(d,e));return e};_.fj=function gmd(a,b,c){var d;d=b.Tg(c);return d!=null&&kA(d,81).ui()};_.gj=function hmd(a,b,c,d){var e;e=kA(b.Tg(c),81);!e&&b.Ug(c,e=$ld(this,a));e.Gc(d)};_.b=0;_.e=0;var GZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateMany',82);c3(461,1,{});_.dj=function lmd(a,b,c,d,e){throw x2(new U6)};_.ej=function mmd(a,b,c,d,e){throw x2(new U6)};var imd;var m$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingle',461);c3(702,461,{},nmd);_.cj=function omd(a,b,c,d,e){return jNc(a,a.yg(),a.og())==this.b?this.Ej()&&d?DMc(a):a.yg():null};_.dj=function pmd(a,b,c,d,e){var f,g;!!a.yg()&&(e=(f=a.og(),f>=0?a.jg(e):a.yg().Cg(a,-1-f,null,e)));g=Mbd(a.mg(),this.e);return a.lg(d,g,e)};_.ej=function qmd(a,b,c,d,e){var f;f=Mbd(a.mg(),this.e);return a.lg(null,f,e)};_.fj=function rmd(a,b,c){var d;d=Mbd(a.mg(),this.e);return !!a.yg()&&a.og()==d};_.gj=function smd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!Rad(this.a,d)){throw x2(new A4(EVd+(sA(d,51)?Rbd(kA(d,51).mg()):g4(mb(d)))+FVd+this.a+"'"))}e=a.yg();g=Mbd(a.mg(),this.e);if(yA(d)!==yA(e)||a.og()!=g&&d!=null){if(eyd(a,kA(d,51)))throw x2(new O4(fTd+a.Ib()));i=null;!!e&&(i=(f=a.og(),f>=0?a.jg(null):a.yg().Cg(a,-1-f,null,null)));h=kA(d,42);!!h&&(i=h.Ag(a,Mbd(h.mg(),this.b),null,i));i=a.lg(h,g,i);!!i&&i.Th()}else{a.eg()&&a.fg()&&vMc(a,new Mid(a,1,g,d,d))}};_.Ej=function tmd(){return false};var IZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',702);c3(1364,702,{},umd);_.Ej=function vmd(){return true};var HZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1364);c3(512,461,{});_.cj=function ymd(a,b,c,d,e){var f;return f=b.Tg(c),f==null?this.b:yA(f)===yA(imd)?null:f};_.fj=function zmd(a,b,c){var d;d=b.Tg(c);return d!=null&&(yA(d)===yA(imd)||!kb(d,this.b))};_.gj=function Amd(a,b,c,d){var e,f;if(a.eg()&&a.fg()){e=(f=b.Tg(c),f==null?this.b:yA(f)===yA(imd)?null:f);if(d==null){if(this.c!=null){b.Ug(c,null);d=this.b}else this.b!=null?b.Ug(c,imd):b.Ug(c,null)}else{this.ck(d);b.Ug(c,d)}vMc(a,this.d.dk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Ug(c,null):this.b!=null?b.Ug(c,imd):b.Ug(c,null)}else{this.ck(d);b.Ug(c,d)}}};_.ck=function Bmd(a){throw x2(new z4)};var XZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',512);c3(GVd,1,{},Mmd);_.dk=function Nmd(a,b,c,d,e){return new ajd(a,b,c,d,e)};_.ek=function Omd(a,b,c,d,e,f){return new cjd(a,b,c,d,e,f)};var Cmd,Dmd,Emd,Fmd,Gmd,Hmd,Imd,Jmd,Kmd;var RZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',GVd);c3(1379,GVd,{},Pmd);_.dk=function Qmd(a,b,c,d,e){return new fjd(a,b,c,Vpb(mA(d)),Vpb(mA(e)))};_.ek=function Rmd(a,b,c,d,e,f){return new gjd(a,b,c,Vpb(mA(d)),Vpb(mA(e)),f)};var JZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1379);c3(1380,GVd,{},Smd);_.dk=function Tmd(a,b,c,d,e){return new Qid(a,b,c,kA(d,192).a,kA(e,192).a)};_.ek=function Umd(a,b,c,d,e,f){return new Rid(a,b,c,kA(d,192).a,kA(e,192).a,f)};var KZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1380);c3(1381,GVd,{},Vmd);_.dk=function Wmd(a,b,c,d,e){return new Sid(a,b,c,kA(d,159).a,kA(e,159).a)};_.ek=function Xmd(a,b,c,d,e,f){return new Tid(a,b,c,kA(d,159).a,kA(e,159).a,f)};var LZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1381);c3(1382,GVd,{},Ymd);_.dk=function Zmd(a,b,c,d,e){return new Uid(a,b,c,Vpb(nA(d)),Vpb(nA(e)))};_.ek=function $md(a,b,c,d,e,f){return new Vid(a,b,c,Vpb(nA(d)),Vpb(nA(e)),f)};var MZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1382);c3(1383,GVd,{},_md);_.dk=function and(a,b,c,d,e){return new Wid(a,b,c,kA(d,126).a,kA(e,126).a)};_.ek=function bnd(a,b,c,d,e,f){return new Xid(a,b,c,kA(d,126).a,kA(e,126).a,f)};var NZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1383);c3(1384,GVd,{},cnd);_.dk=function dnd(a,b,c,d,e){return new Yid(a,b,c,kA(d,21).a,kA(e,21).a)};_.ek=function end(a,b,c,d,e,f){return new Zid(a,b,c,kA(d,21).a,kA(e,21).a,f)};var OZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1384);c3(1385,GVd,{},fnd);_.dk=function gnd(a,b,c,d,e){return new $id(a,b,c,kA(d,149).a,kA(e,149).a)};_.ek=function hnd(a,b,c,d,e,f){return new _id(a,b,c,kA(d,149).a,kA(e,149).a,f)};var PZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1385);c3(1386,GVd,{},ind);_.dk=function jnd(a,b,c,d,e){return new djd(a,b,c,kA(d,168).a,kA(e,168).a)};_.ek=function knd(a,b,c,d,e,f){return new ejd(a,b,c,kA(d,168).a,kA(e,168).a,f)};var QZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1386);c3(1366,512,{},lnd);_.ck=function mnd(a){if(!this.a.Li(a)){throw x2(new A4(EVd+mb(a)+FVd+this.a+"'"))}};var SZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1366);c3(1367,512,{},nnd);_.ck=function ond(a){};var TZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1367);c3(703,512,{});_.fj=function pnd(a,b,c){var d;d=b.Tg(c);return d!=null};_.gj=function qnd(a,b,c,d){var e,f;if(a.eg()&&a.fg()){e=true;f=b.Tg(c);if(f==null){e=false;f=this.b}else yA(f)===yA(imd)&&(f=null);if(d==null){if(this.c!=null){b.Ug(c,null);d=this.b}else{b.Ug(c,imd)}}else{this.ck(d);b.Ug(c,d)}vMc(a,this.d.ek(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Ug(c,null):b.Ug(c,imd)}else{this.ck(d);b.Ug(c,d)}}};var WZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',703);c3(1368,703,{},rnd);_.ck=function snd(a){if(!this.a.Li(a)){throw x2(new A4(EVd+mb(a)+FVd+this.a+"'"))}};var UZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1368);c3(1369,703,{},tnd);_.ck=function und(a){};var VZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1369);c3(370,461,{},vnd);_.cj=function xnd(a,b,c,d,e){var f,g,h,i,j;j=b.Tg(c);if(this.Zi()&&yA(j)===yA(imd)){return null}else if(this.Ej()&&d&&j!=null){h=kA(j,42);if(h.Eg()){i=XMc(a,h);if(h!=i){if(!Rad(this.a,i)){throw x2(new A4(EVd+mb(i)+FVd+this.a+"'"))}b.Ug(c,j=i);if(this.Dj()){f=kA(i,42);g=h.Cg(a,!this.b?-1-Mbd(a.mg(),this.e):Mbd(h.mg(),this.b),null,null);!f.yg()&&(g=f.Ag(a,!this.b?-1-Mbd(a.mg(),this.e):Mbd(f.mg(),this.b),null,g));!!g&&g.Th()}a.eg()&&a.fg()&&vMc(a,new ajd(a,9,this.e,h,i))}}return j}else{return j}};_.dj=function ynd(a,b,c,d,e){var f,g;g=b.Tg(c);yA(g)===yA(imd)&&(g=null);b.Ug(c,d);if(this.qi()){if(yA(g)!==yA(d)&&g!=null){f=kA(g,42);e=f.Cg(a,Mbd(f.mg(),this.b),null,e)}}else this.Dj()&&g!=null&&(e=kA(g,42).Cg(a,-1-Mbd(a.mg(),this.e),null,e));if(a.eg()&&a.fg()){!e&&(e=new f_c(4));e.Sh(new ajd(a,1,this.e,g,d))}return e};_.ej=function znd(a,b,c,d,e){var f;f=b.Tg(c);yA(f)===yA(imd)&&(f=null);b.Vg(c);if(a.eg()&&a.fg()){!e&&(e=new f_c(4));this.Zi()?e.Sh(new ajd(a,2,this.e,f,null)):e.Sh(new ajd(a,1,this.e,f,null))}return e};_.fj=function And(a,b,c){var d;d=b.Tg(c);return d!=null};_.gj=function Bnd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!Rad(this.a,d)){throw x2(new A4(EVd+(sA(d,51)?Rbd(kA(d,51).mg()):g4(mb(d)))+FVd+this.a+"'"))}i=b.Tg(c);h=i!=null;this.Zi()&&yA(i)===yA(imd)&&(i=null);g=null;if(this.qi()){if(yA(i)!==yA(d)){if(i!=null){e=kA(i,42);g=e.Cg(a,Mbd(e.mg(),this.b),null,null)}if(d!=null){e=kA(d,42);g=e.Ag(a,Mbd(e.mg(),this.b),null,g)}}}else if(this.Dj()){if(yA(i)!==yA(d)){i!=null&&(g=kA(i,42).Cg(a,-1-Mbd(a.mg(),this.e),null,null));d!=null&&(g=kA(d,42).Ag(a,-1-Mbd(a.mg(),this.e),null,g))}}d==null&&this.Zi()?b.Ug(c,imd):b.Ug(c,d);if(a.eg()&&a.fg()){f=new cjd(a,1,this.e,i,d,this.Zi()&&!h);if(!g){vMc(a,f)}else{g.Sh(f);g.Th()}}else !!g&&g.Th()};_.qi=function Cnd(){return false};_.Dj=function Dnd(){return false};_.Ej=function End(){return false};_.Zi=function Fnd(){return false};var l$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',370);c3(513,370,{},Gnd);_.Dj=function Hnd(){return true};var d$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',513);c3(1372,513,{},Ind);_.Ej=function Jnd(){return true};var YZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1372);c3(705,513,{},Knd);_.Zi=function Lnd(){return true};var $Z=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',705);c3(1374,705,{},Mnd);_.Ej=function Nnd(){return true};var ZZ=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1374);c3(585,513,{},Ond);_.qi=function Pnd(){return true};var c$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',585);c3(1373,585,{},Qnd);_.Ej=function Rnd(){return true};var _Z=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1373);c3(706,585,{},Snd);_.Zi=function Tnd(){return true};var b$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',706);c3(1375,706,{},Und);_.Ej=function Vnd(){return true};var a$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1375);c3(586,370,{},Wnd);_.Ej=function Xnd(){return true};var h$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',586);c3(1376,586,{},Ynd);_.Zi=function Znd(){return true};var e$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1376);c3(707,586,{},$nd);_.qi=function _nd(){return true};var g$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',707);c3(1377,707,{},aod);_.Zi=function bod(){return true};var f$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1377);c3(1370,370,{},cod);_.Zi=function dod(){return true};var i$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1370);c3(704,370,{},eod);_.qi=function fod(){return true};var k$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',704);c3(1371,704,{},god);_.Zi=function hod(){return true};var j$=k4(dTd,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1371);c3(708,514,DVd,kod);_._j=function lod(a){return new kod(this.a,this.c,a)};_.lc=function mod(){return this.b};_.ak=function nod(a,b,c){return iod(this,a,this.b,c)};_.bk=function ood(a,b,c){return jod(this,a,this.b,c)};var n$=k4(dTd,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',708);c3(1378,514,DVd,pod);_.$j=function qod(a){return new uod((qAd(),pAd),this.b.Zg(this.a,a))};_.lc=function rod(){return null};_.ak=function sod(a,b,c){return c};_.bk=function tod(a,b,c){return c};var o$=k4(dTd,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1378);c3(587,514,DVd,uod);_.$j=function vod(a){return new uod(this.c,a)};_.lc=function wod(){return this.a};_.ak=function xod(a,b,c){return c};_.bk=function yod(a,b,c){return c};var p$=k4(dTd,'EStructuralFeatureImpl/SimpleFeatureMapEntry',587);c3(361,451,VTd,zod);_.Fh=function Aod(a){return tz(iY,oJd,24,a,0,1)};_.Bh=function Bod(){return false};var r$=k4(dTd,'ESuperAdapter/1',361);c3(411,399,{95:1,91:1,87:1,139:1,174:1,51:1,103:1,742:1,42:1,92:1,142:1,411:1,107:1,108:1},Dod);_.ug=function Eod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new Lod(this,pY,this)),this.a;}return EMc(this,a-Lbd((j7c(),i7c)),Gbd((d=kA(VNc(this,16),24),!d?i7c:d),a),b,c)};_.Dg=function Fod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new zkd(gY,this,0,3)),q_c(this.Ab,a,c);case 2:return !this.a&&(this.a=new Lod(this,pY,this)),q_c(this.a,a,c);}return e=kA(Gbd((d=kA(VNc(this,16),24),!d?(j7c(),i7c):d),b),61),e.aj().ej(this,TNc(this),b-Lbd((j7c(),i7c)),a,c)};_.Fg=function God(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return FMc(this,a-Lbd((j7c(),i7c)),Gbd((b=kA(VNc(this,16),24),!b?i7c:b),a))};_.Mg=function Hod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new zkd(gY,this,0,3));r_c(this.Ab);!this.Ab&&(this.Ab=new zkd(gY,this,0,3));gXc(this.Ab,kA(b,13));return;case 1:wRc(this,pA(b));return;case 2:!this.a&&(this.a=new Lod(this,pY,this));r_c(this.a);!this.a&&(this.a=new Lod(this,pY,this));gXc(this.a,kA(b,13));return;}GMc(this,a-Lbd((j7c(),i7c)),Gbd((c=kA(VNc(this,16),24),!c?i7c:c),a),b)};_.Rg=function Iod(){return j7c(),i7c};var x$=k4(dTd,'ETypeParameterImpl',411);c3(457,88,vVd,Lod);_.ri=function Mod(a,b){return Jod(this,kA(a,84),b)};_.si=function Nod(a,b){return Kod(this,kA(a,84),b)};var t$=k4(dTd,'ETypeParameterImpl/1',457);c3(579,44,FLd,Ood);_.Xb=function Pod(){return new Sod(this)};var w$=k4(dTd,'ETypeParameterImpl/2',579);c3(508,IJd,JJd,Sod);_.nc=function Tod(a){return Qod(this,kA(a,84))};_.oc=function Uod(a){var b,c,d;d=false;for(c=a.tc();c.hc();){b=kA(c.ic(),84);I8(this.a,b,'')==null&&(d=true)}return d};_.Pb=function Vod(){L8(this.a)};_.pc=function Wod(a){return D8(this.a,a)};_.tc=function Xod(){var a;return a=new e9((new X8(this.a)).a),new $od(a)};_.vc=function Yod(a){return Rod(this,a)};_._b=function Zod(){return M8(this.a)};var v$=k4(dTd,'ETypeParameterImpl/2/1',508);c3(509,1,wJd,$od);_.gc=function _od(a){Bhb(this,a)};_.ic=function bpd(){return kA(c9(this.a).kc(),84)};_.hc=function apd(){return this.a.b};_.jc=function cpd(){d9(this.a)};var u$=k4(dTd,'ETypeParameterImpl/2/1/1',509);c3(1169,44,FLd,dpd);_.Qb=function epd(a){return wA(a)?H8(this,a):!!Wgb(this.d,a)};_.Vb=function fpd(a){var b,c;b=wA(a)?G8(this,a):Of(Wgb(this.d,a));if(sA(b,743)){c=kA(b,743);b=c.mj();I8(this,kA(a,207),b);return b}else return b!=null?b:a==null?(Zwd(),Ywd):null};var z$=k4(dTd,'EValidatorRegistryImpl',1169);c3(1362,638,{95:1,91:1,87:1,430:1,139:1,51:1,103:1,1635:1,42:1,92:1,142:1,107:1,108:1},npd);_.Zg=function opd(a,b){switch(a.Ni()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:f3(b);case 25:return hpd(b);case 27:return ipd(b);case 28:return jpd(b);case 29:return b==null?null:fhd(XQc[0],kA(b,181));case 41:return b==null?'':f4(kA(b,274));case 42:return f3(b);case 50:return pA(b);default:throw x2(new O4(gTd+a.be()+hTd));}};_.$g=function ppd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=Nad(a),m?pcd(m.bh(),a):-1)),a.G){case 0:return c=new zad,c;case 1:return b=new H8c,b;case 2:return d=new Sbd,d;case 4:return e=new sgd,e;case 5:return f=new Hgd,f;case 6:return g=new Xgd,g;case 7:return h=new gRc,h;case 10:return j=new F7c,j;case 11:return k=new pjd,k;case 12:return l=new kSc,l;case 13:return n=new Okd,n;case 14:return o=new ald,o;case 17:return p=new rld,p;case 18:return i=new xhd,i;case 19:return q=new Dod,q;default:throw x2(new O4(kTd+a.zb+hTd));}};_._g=function qpd(a,b){switch(a.Ni()){case 20:return b==null?null:new k7(b);case 21:return b==null?null:new P7(b);case 23:case 22:return b==null?null:gpd(b);case 26:case 24:return b==null?null:R3(H3(b,-128,127)<<24>>24);case 25:return dRc(b);case 27:return kpd(b);case 28:return lpd(b);case 29:return mpd(b);case 32:case 31:return b==null?null:G3(b);case 38:case 37:return b==null?null:new G4(b);case 40:case 39:return b==null?null:d5(H3(b,oKd,jJd));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:r5(I3(b));case 49:case 48:return b==null?null:Q5(H3(b,IVd,32767)<<16>>16);case 50:return b;default:throw x2(new O4(gTd+a.be()+hTd));}};var A$=k4(dTd,'EcoreFactoryImpl',1362);c3(504,248,{95:1,91:1,87:1,139:1,174:1,51:1,207:1,103:1,1633:1,42:1,92:1,142:1,248:1,504:1,107:1,108:1,613:1},Bpd);_.gb=false;_.hb=false;var spd,tpd=false;var r_=k4(dTd,'EcorePackageImpl',504);c3(1111,1,{743:1},Fpd);_.mj=function Gpd(){return oyd(),nyd};var L$=k4(dTd,'EcorePackageImpl/1',1111);c3(1120,1,VVd,Hpd);_.Li=function Ipd(a){return sA(a,139)};_.Mi=function Jpd(a){return tz(qY,oJd,139,a,0,1)};var B$=k4(dTd,'EcorePackageImpl/10',1120);c3(1121,1,VVd,Kpd);_.Li=function Lpd(a){return sA(a,174)};_.Mi=function Mpd(a){return tz(rY,oJd,174,a,0,1)};var C$=k4(dTd,'EcorePackageImpl/11',1121);c3(1122,1,VVd,Npd);_.Li=function Opd(a){return sA(a,51)};_.Mi=function Ppd(a){return tz(sY,oJd,51,a,0,1)};var D$=k4(dTd,'EcorePackageImpl/12',1122);c3(1123,1,VVd,Qpd);_.Li=function Rpd(a){return sA(a,371)};_.Mi=function Spd(a){return tz(tY,tVd,53,a,0,1)};var E$=k4(dTd,'EcorePackageImpl/13',1123);c3(1124,1,VVd,Tpd);_.Li=function Upd(a){return sA(a,207)};_.Mi=function Vpd(a){return tz(uY,oJd,207,a,0,1)};var F$=k4(dTd,'EcorePackageImpl/14',1124);c3(1125,1,VVd,Wpd);_.Li=function Xpd(a){return sA(a,468)};_.Mi=function Ypd(a){return tz(vY,oJd,1703,a,0,1)};var G$=k4(dTd,'EcorePackageImpl/15',1125);c3(1126,1,VVd,Zpd);_.Li=function $pd(a){return sA(a,62)};_.Mi=function _pd(a){return tz(wY,sVd,17,a,0,1)};var H$=k4(dTd,'EcorePackageImpl/16',1126);c3(1127,1,VVd,aqd);_.Li=function bqd(a){return sA(a,158)};_.Mi=function cqd(a){return tz(zY,sVd,158,a,0,1)};var I$=k4(dTd,'EcorePackageImpl/17',1127);c3(1128,1,VVd,dqd);_.Li=function eqd(a){return sA(a,431)};_.Mi=function fqd(a){return tz(BY,oJd,431,a,0,1)};var J$=k4(dTd,'EcorePackageImpl/18',1128);c3(1129,1,VVd,gqd);_.Li=function hqd(a){return sA(a,505)};_.Mi=function iqd(a){return tz(CZ,SUd,505,a,0,1)};var K$=k4(dTd,'EcorePackageImpl/19',1129);c3(1112,1,VVd,jqd);_.Li=function kqd(a){return sA(a,335)};_.Mi=function lqd(a){return tz(hY,sVd,29,a,0,1)};var W$=k4(dTd,'EcorePackageImpl/2',1112);c3(1130,1,VVd,mqd);_.Li=function nqd(a){return sA(a,217)};_.Mi=function oqd(a){return tz(pY,zVd,84,a,0,1)};var M$=k4(dTd,'EcorePackageImpl/20',1130);c3(1131,1,VVd,pqd);_.Li=function qqd(a){return sA(a,411)};_.Mi=function rqd(a){return tz(AY,oJd,742,a,0,1)};var N$=k4(dTd,'EcorePackageImpl/21',1131);c3(1132,1,VVd,sqd);_.Li=function tqd(a){return tA(a)};_.Mi=function uqd(a){return tz(tE,cKd,434,a,8,1)};var O$=k4(dTd,'EcorePackageImpl/22',1132);c3(1133,1,VVd,vqd);_.Li=function wqd(a){return sA(a,173)};_.Mi=function xqd(a){return tz(BA,cKd,173,a,0,2)};var P$=k4(dTd,'EcorePackageImpl/23',1133);c3(1134,1,VVd,yqd);_.Li=function zqd(a){return sA(a,192)};_.Mi=function Aqd(a){return tz(uE,cKd,192,a,0,1)};var Q$=k4(dTd,'EcorePackageImpl/24',1134);c3(1135,1,VVd,Bqd);_.Li=function Cqd(a){return sA(a,159)};_.Mi=function Dqd(a){return tz(vE,cKd,159,a,0,1)};var R$=k4(dTd,'EcorePackageImpl/25',1135);c3(1136,1,VVd,Eqd);_.Li=function Fqd(a){return sA(a,181)};_.Mi=function Gqd(a){return tz(PF,cKd,181,a,0,1)};var S$=k4(dTd,'EcorePackageImpl/26',1136);c3(1137,1,VVd,Hqd);_.Li=function Iqd(a){return false};_.Mi=function Jqd(a){return tz(UX,oJd,1787,a,0,1)};var T$=k4(dTd,'EcorePackageImpl/27',1137);c3(1138,1,VVd,Kqd);_.Li=function Lqd(a){return uA(a)};_.Mi=function Mqd(a){return tz(yE,cKd,315,a,7,1)};var U$=k4(dTd,'EcorePackageImpl/28',1138);c3(1139,1,VVd,Nqd);_.Li=function Oqd(a){return sA(a,52)};_.Mi=function Pqd(a){return tz(ZX,ZMd,52,a,0,1)};var V$=k4(dTd,'EcorePackageImpl/29',1139);c3(1113,1,VVd,Qqd);_.Li=function Rqd(a){return sA(a,469)};_.Mi=function Sqd(a){return tz(gY,{3:1,4:1,5:1,1627:1},609,a,0,1)};var f_=k4(dTd,'EcorePackageImpl/3',1113);c3(1140,1,VVd,Tqd);_.Li=function Uqd(a){return sA(a,525)};_.Mi=function Vqd(a){return tz($X,oJd,1634,a,0,1)};var X$=k4(dTd,'EcorePackageImpl/30',1140);c3(1141,1,VVd,Wqd);_.Li=function Xqd(a){return sA(a,184)};_.Mi=function Yqd(a){return tz(Q0,ZMd,184,a,0,1)};var Y$=k4(dTd,'EcorePackageImpl/31',1141);c3(1142,1,VVd,Zqd);_.Li=function $qd(a){return sA(a,75)};_.Mi=function _qd(a){return tz(G0,WVd,75,a,0,1)};var Z$=k4(dTd,'EcorePackageImpl/32',1142);c3(1143,1,VVd,ard);_.Li=function brd(a){return sA(a,126)};_.Mi=function crd(a){return tz(CE,cKd,126,a,0,1)};var $$=k4(dTd,'EcorePackageImpl/33',1143);c3(1144,1,VVd,drd);_.Li=function erd(a){return sA(a,21)};_.Mi=function frd(a){return tz(GE,cKd,21,a,0,1)};var _$=k4(dTd,'EcorePackageImpl/34',1144);c3(1145,1,VVd,grd);_.Li=function hrd(a){return sA(a,274)};_.Mi=function ird(a){return tz(xE,oJd,274,a,0,1)};var a_=k4(dTd,'EcorePackageImpl/35',1145);c3(1146,1,VVd,jrd);_.Li=function krd(a){return sA(a,149)};_.Mi=function lrd(a){return tz(IE,cKd,149,a,0,1)};var b_=k4(dTd,'EcorePackageImpl/36',1146);c3(1147,1,VVd,mrd);_.Li=function nrd(a){return sA(a,109)};_.Mi=function ord(a){return tz(rG,oJd,109,a,0,1)};var c_=k4(dTd,'EcorePackageImpl/37',1147);c3(1148,1,VVd,prd);_.Li=function qrd(a){return sA(a,534)};_.Mi=function rrd(a){return tz(y_,oJd,534,a,0,1)};var d_=k4(dTd,'EcorePackageImpl/38',1148);c3(1149,1,VVd,srd);_.Li=function trd(a){return false};_.Mi=function urd(a){return tz(x_,oJd,1788,a,0,1)};var e_=k4(dTd,'EcorePackageImpl/39',1149);c3(1114,1,VVd,vrd);_.Li=function wrd(a){return sA(a,96)};_.Mi=function xrd(a){return tz(iY,oJd,24,a,0,1)};var l_=k4(dTd,'EcorePackageImpl/4',1114);c3(1150,1,VVd,yrd);_.Li=function zrd(a){return sA(a,168)};_.Mi=function Ard(a){return tz(PE,cKd,168,a,0,1)};var g_=k4(dTd,'EcorePackageImpl/40',1150);c3(1151,1,VVd,Brd);_.Li=function Crd(a){return wA(a)};_.Mi=function Drd(a){return tz(UE,cKd,2,a,6,1)};var h_=k4(dTd,'EcorePackageImpl/41',1151);c3(1152,1,VVd,Erd);_.Li=function Frd(a){return sA(a,532)};_.Mi=function Grd(a){return tz(bY,oJd,532,a,0,1)};var i_=k4(dTd,'EcorePackageImpl/42',1152);c3(1153,1,VVd,Hrd);_.Li=function Ird(a){return false};_.Mi=function Jrd(a){return tz(_X,cKd,1789,a,0,1)};var j_=k4(dTd,'EcorePackageImpl/43',1153);c3(1154,1,VVd,Krd);_.Li=function Lrd(a){return sA(a,38)};_.Mi=function Mrd(a){return tz(qG,oJd,38,a,0,1)};var k_=k4(dTd,'EcorePackageImpl/44',1154);c3(1115,1,VVd,Nrd);_.Li=function Ord(a){return sA(a,133)};_.Mi=function Prd(a){return tz(jY,oJd,133,a,0,1)};var m_=k4(dTd,'EcorePackageImpl/5',1115);c3(1116,1,VVd,Qrd);_.Li=function Rrd(a){return sA(a,140)};_.Mi=function Srd(a){return tz(lY,oJd,140,a,0,1)};var n_=k4(dTd,'EcorePackageImpl/6',1116);c3(1117,1,VVd,Trd);_.Li=function Urd(a){return sA(a,425)};_.Mi=function Vrd(a){return tz(nY,oJd,608,a,0,1)};var o_=k4(dTd,'EcorePackageImpl/7',1117);c3(1118,1,VVd,Wrd);_.Li=function Xrd(a){return sA(a,525)};_.Mi=function Yrd(a){return tz(mY,oJd,617,a,0,1)};var p_=k4(dTd,'EcorePackageImpl/8',1118);c3(1119,1,VVd,Zrd);_.Li=function $rd(a){return sA(a,430)};_.Mi=function _rd(a){return tz(oY,oJd,430,a,0,1)};var q_=k4(dTd,'EcorePackageImpl/9',1119);c3(915,1673,QUd,dsd);_.sh=function esd(a,b){asd(this,kA(b,380))};_.vh=function fsd(a,b){bsd(this,a,kA(b,380))};var t_=k4(dTd,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',915);c3(916,136,MUd,gsd);_.Oh=function hsd(){return this.a.a};var s_=k4(dTd,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',916);c3(955,954,{},jsd);var w_=k4('org.eclipse.emf.ecore.plugin','EcorePlugin',955);var y_=m4(XVd,'Resource');c3(719,1492,YVd);_.ik=function nsd(a){};_.jk=function osd(a){};_.fk=function psd(){return !this.a&&(this.a=new Asd(this)),this.a};_.gk=function qsd(a){var b,c,d,e,f;d=a.length;if(d>0){if(a.charCodeAt(0)==47){f=new Hbb(4);e=1;for(b=1;b0&&(a=a.substr(0,c))}}return lsd(this,a)};_.hk=function rsd(){return this.c};_.Ib=function ssd(){return f4(this.ql)+'@'+(ob(this)>>>0).toString(16)+" uri='"+this.d+"'"};_.b=false;var C_=k4(ZVd,'ResourceImpl',719);c3(1493,719,YVd,tsd);var z_=k4(ZVd,'BinaryResourceImpl',1493);c3(1048,629,WTd);_.Gh=function wsd(a){return sA(a,51)?usd(this,kA(a,51)):sA(a,534)?new a0c(kA(a,534).fk()):yA(a)===yA(this.f)?kA(a,13).tc():(Y3c(),X3c.a)};_.hc=function xsd(){return vsd(this)};_.a=false;var C0=k4(eVd,'EcoreUtil/ContentTreeIterator',1048);c3(1494,1048,WTd,ysd);_.Gh=function zsd(a){return yA(a)===yA(this.f)?kA(a,15).tc():new iyd(kA(a,51))};var A_=k4(ZVd,'ResourceImpl/5',1494);c3(595,1687,uVd,Asd);_.pc=function Bsd(a){return this.i<=4?VXc(this,a):sA(a,42)&&kA(a,42).sg()==this.a};_.sh=function Csd(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.uh=function Dsd(a,b){a==0?this.a.b||(this.a.b=true,null):iXc(this,a,b)};_.vh=function Esd(a,b){};_.wh=function Fsd(a,b,c){};_.pi=function Gsd(){return 2};_.Oh=function Hsd(){return this.a};_.qi=function Isd(){return true};_.ri=function Jsd(a,b){var c;c=kA(a,42);b=c.Pg(this.a,b);return b};_.si=function Ksd(a,b){var c;c=kA(a,42);return c.Pg(null,b)};_.ti=function Lsd(){return false};_.xh=function Msd(){return true};_.Fh=function Nsd(a){return tz(sY,oJd,51,a,0,1)};_.Bh=function Osd(){return false};var B_=k4(ZVd,'ResourceImpl/ContentsEList',595);c3(873,1657,fKd,Psd);_.fd=function Qsd(a){return this.a.qh(a)};_._b=function Rsd(){return this.a._b()};var D_=k4(eVd,'AbstractSequentialInternalEList/1',873);var qyd,ryd,syd,tyd;c3(567,1,{},ztd);var Ssd,Tsd;var J_=k4(eVd,'BasicExtendedMetaData',567);c3(1023,1,{},Dtd);_.kk=function Etd(){return null};_.lk=function Ftd(){this.a==-2&&Btd(this,Xsd(this.d,this.b));return this.a};_.mk=function Gtd(){return null};_.nk=function Htd(){return bdb(),bdb(),$cb};_.be=function Itd(){this.c==mWd&&Ctd(this,atd(this.d,this.b));return this.c};_.ok=function Jtd(){return 0};_.a=-2;_.c=mWd;var F_=k4(eVd,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1023);c3(hVd,1,{},Ptd);_.kk=function Qtd(){this.a==(Usd(),Ssd)&&Ktd(this,Wsd(this.f,this.b));return this.a};_.lk=function Rtd(){return 0};_.mk=function Std(){this.c==(Usd(),Ssd)&&Ltd(this,$sd(this.f,this.b));return this.c};_.nk=function Ttd(){!this.d&&Mtd(this,_sd(this.f,this.b));return this.d};_.be=function Utd(){this.e==mWd&&Ntd(this,atd(this.f,this.b));return this.e};_.ok=function Vtd(){this.g==-2&&Otd(this,dtd(this.f,this.b));return this.g};_.e=mWd;_.g=-2;var G_=k4(eVd,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',hVd);c3(1022,1,{},Ztd);_.b=false;_.c=false;var H_=k4(eVd,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1022);c3(1025,1,{},kud);_.c=-2;_.e=mWd;_.f=mWd;var I_=k4(eVd,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1025);c3(529,565,vVd,lud);_.pi=function mud(){return this.c};_.Rj=function nud(){return false};_.zh=function oud(a,b){return b};_.c=0;var W_=k4(eVd,'EDataTypeEList',529);var Q0=m4(eVd,'FeatureMap');c3(90,529,{3:1,4:1,20:1,25:1,41:1,13:1,15:1,49:1,59:1,55:1,52:1,81:1,184:1,237:1,1630:1,64:1},pvd);_.bd=function qvd(a,b){pud(this,a,kA(b,75))};_.nc=function rvd(a){return sud(this,kA(a,75))};_.nh=function uvd(a){vud(this,kA(a,75))};_.ri=function Fvd(a,b){return Nud(this,kA(a,75),b)};_.si=function Gvd(a,b){return Pud(this,kA(a,75),b)};_.zh=function Jvd(a,b){return Xud(this,a,kA(b,75))};_.hd=function Lvd(a,b){return $ud(this,a,kA(b,75))};_.yi=function Pvd(a,b){return evd(this,kA(a,75),b)};_.zi=function Qvd(a,b){return gvd(this,kA(a,75),b)};_.Ai=function Rvd(a,b,c){return hvd(this,kA(a,75),kA(b,75),c)};_.Ch=function Svd(a,b){return ovd(this,a,kA(b,75))};_.oc=function svd(a){var b,c,d,e,f,g,h,i,j;i=new dYc(a._b());for(d=a.tc();d.hc();){c=kA(d.ic(),75);e=c.nj();if(zyd(this.e,e)){(!e.xh()||!Dud(this,e,c.lc())&&!VXc(i,c))&&fXc(i,c)}else{j=yyd(this.e.mg(),e);b=kA(this.g,124);f=true;for(g=0;g=0){b=a[this.c];if(this.k.Bk(b.nj())){this.j=this.f?b:b.lc();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var K_=k4(eVd,'BasicFeatureMap/FeatureEIterator',377);c3(601,377,NJd,jwd);_.Xj=function kwd(){return true};var L_=k4(eVd,'BasicFeatureMap/ResolvingFeatureEIterator',601);c3(871,444,BVd,lwd);_.Uh=function mwd(){return this};var P_=k4(eVd,'EContentsEList/1',871);c3(872,444,BVd,nwd);_.Xj=function owd(){return false};var Q_=k4(eVd,'EContentsEList/2',872);c3(870,260,CVd,pwd);_.Zj=function qwd(a){};_.hc=function rwd(){return false};_.Cc=function swd(){return false};var R_=k4(eVd,'EContentsEList/FeatureIteratorImpl/1',870);c3(734,529,vVd,twd);_.th=function uwd(){this.a=true};_.ui=function vwd(){return this.a};_.ij=function wwd(){var a;r_c(this);if(PMc(this.e)){a=this.a;this.a=false;vMc(this.e,new Pid(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var V_=k4(eVd,'EDataTypeEList/Unsettable',734);c3(1566,529,vVd,xwd);_.xh=function ywd(){return true};var Y_=k4(eVd,'EDataTypeUniqueEList',1566);c3(1567,734,vVd,zwd);_.xh=function Awd(){return true};var X_=k4(eVd,'EDataTypeUniqueEList/Unsettable',1567);c3(156,88,vVd,Bwd);_.Qj=function Cwd(){return true};_.zh=function Dwd(a,b){return qcd(this,a,kA(b,51))};var Z_=k4(eVd,'EObjectContainmentEList/Resolving',156);c3(1026,493,vVd,Ewd);_.Qj=function Fwd(){return true};_.zh=function Gwd(a,b){return qcd(this,a,kA(b,51))};var $_=k4(eVd,'EObjectContainmentEList/Unsettable/Resolving',1026);c3(679,18,vVd,Hwd);_.th=function Iwd(){this.a=true};_.ui=function Jwd(){return this.a};_.ij=function Kwd(){var a;r_c(this);if(PMc(this.e)){a=this.a;this.a=false;vMc(this.e,new Pid(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var d0=k4(eVd,'EObjectContainmentWithInverseEList/Unsettable',679);c3(1044,679,vVd,Lwd);_.Qj=function Mwd(){return true};_.zh=function Nwd(a,b){return qcd(this,a,kA(b,51))};var c0=k4(eVd,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1044);c3(675,450,vVd,Owd);_.th=function Pwd(){this.a=true};_.ui=function Qwd(){return this.a};_.ij=function Rwd(){var a;r_c(this);if(PMc(this.e)){a=this.a;this.a=false;vMc(this.e,new Pid(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var f0=k4(eVd,'EObjectEList/Unsettable',675);c3(376,450,vVd,Swd);_.Qj=function Twd(){return true};_.zh=function Uwd(a,b){return qcd(this,a,kA(b,51))};var i0=k4(eVd,'EObjectResolvingEList',376);c3(1554,675,vVd,Vwd);_.Qj=function Wwd(){return true};_.zh=function Xwd(a,b){return qcd(this,a,kA(b,51))};var h0=k4(eVd,'EObjectResolvingEList/Unsettable',1554);c3(1495,1,{},$wd);var Ywd;var j0=k4(eVd,'EObjectValidator',1495);c3(496,450,vVd,_wd);_.Lj=function axd(){return this.d};_.Mj=function bxd(){return this.b};_.qi=function cxd(){return true};_.Pj=function dxd(){return true};_.b=0;var n0=k4(eVd,'EObjectWithInverseEList',496);c3(1047,496,vVd,exd);_.Oj=function fxd(){return true};var k0=k4(eVd,'EObjectWithInverseEList/ManyInverse',1047);c3(572,496,vVd,gxd);_.th=function hxd(){this.a=true};_.ui=function ixd(){return this.a};_.ij=function jxd(){var a;r_c(this);if(PMc(this.e)){a=this.a;this.a=false;vMc(this.e,new Pid(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var m0=k4(eVd,'EObjectWithInverseEList/Unsettable',572);c3(1046,572,vVd,kxd);_.Oj=function lxd(){return true};var l0=k4(eVd,'EObjectWithInverseEList/Unsettable/ManyInverse',1046);c3(680,496,vVd,mxd);_.Qj=function nxd(){return true};_.zh=function oxd(a,b){return qcd(this,a,kA(b,51))};var r0=k4(eVd,'EObjectWithInverseResolvingEList',680);c3(33,680,vVd,pxd);_.Oj=function qxd(){return true};var o0=k4(eVd,'EObjectWithInverseResolvingEList/ManyInverse',33);c3(681,572,vVd,rxd);_.Qj=function sxd(){return true};_.zh=function txd(a,b){return qcd(this,a,kA(b,51))};var q0=k4(eVd,'EObjectWithInverseResolvingEList/Unsettable',681);c3(1045,681,vVd,uxd);_.Oj=function vxd(){return true};var p0=k4(eVd,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1045);c3(1027,565,vVd);_.rh=function wxd(){return (this.b&1792)==0};_.th=function xxd(){this.b|=1};_.Nj=function yxd(){return (this.b&4)!=0};_.qi=function zxd(){return (this.b&40)!=0};_.Oj=function Axd(){return (this.b&16)!=0};_.Pj=function Bxd(){return (this.b&8)!=0};_.Qj=function Cxd(){return (this.b&jVd)!=0};_.Dj=function Dxd(){return (this.b&32)!=0};_.Rj=function Exd(){return (this.b&hVd)!=0};_.Li=function Fxd(a){return !this.d?this.nj().jj().Li(a):s5c(this.d,a)};_.ui=function Gxd(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.xh=function Hxd(){return (this.b&128)!=0};_.ij=function Jxd(){var a;r_c(this);if((this.b&2)!=0){if(PMc(this.e)){a=(this.b&1)!=0;this.b&=-2;ocd(this,new Pid(this.e,2,Mbd(this.e.mg(),this.nj()),a,false))}else{this.b&=-2}}};_.Bh=function Kxd(){return (this.b&1536)==0};_.b=0;var t0=k4(eVd,'EcoreEList/Generic',1027);c3(1028,1027,vVd,Lxd);_.nj=function Mxd(){return this.a};var s0=k4(eVd,'EcoreEList/Dynamic',1028);c3(678,55,VTd,Nxd);_.Fh=function Oxd(a){return F0c(this.a.a,a)};var x0=k4(eVd,'EcoreEMap/1',678);c3(677,88,vVd,Pxd);_.sh=function Qxd(a,b){M1c(this.b,kA(b,134))};_.uh=function Rxd(a,b){L1c(this.b)};_.vh=function Sxd(a,b){N1c(this.b,kA(b,134))};_.wh=function Txd(a,b,c){N1c(this.b,kA(c,134));yA(c)===yA(b)&&kA(c,134).jh(U1c(kA(b,134).kc()));M1c(this.b,kA(b,134))};var y0=k4(eVd,'EcoreEMap/DelegateEObjectContainmentEList',677);c3(1042,143,fVd,Uxd);var A0=k4(eVd,'EcoreEMap/Unsettable',1042);c3(1043,677,vVd,Vxd);_.th=function Wxd(){this.a=true};_.ui=function Xxd(){return this.a};_.ij=function Yxd(){var a;r_c(this);if(PMc(this.e)){a=this.a;this.a=false;vMc(this.e,new Pid(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var z0=k4(eVd,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1043);c3(682,1,wJd,iyd);_.gc=function jyd(a){Bhb(this,a)};_.hc=function kyd(){return hyd(this)};_.ic=function lyd(){var a;hyd(this);a=this.b;this.b=null;return a};_.jc=function myd(){this.a.jc()};var D0=k4(eVd,'EcoreUtil/ProperContentIterator',682);c3(1496,1495,{},pyd);var nyd;var E0=k4(eVd,'EcoreValidator',1496);var vyd;var P0=m4(eVd,'FeatureMapUtil/Validator');c3(1095,1,{1632:1},Ayd);_.Bk=function Byd(a){return true};var H0=k4(eVd,'FeatureMapUtil/1',1095);c3(692,1,{1632:1},Fyd);_.Bk=function Gyd(a){var b;if(this.c==a)return true;b=mA(F8(this.a,a));if(b==null){if(Eyd(this,a)){Hyd(this.a,a,(B3(),A3));return true}else{Hyd(this.a,a,(B3(),z3));return false}}else{return b==(B3(),A3)}};_.e=false;var Cyd;var K0=k4(eVd,'FeatureMapUtil/BasicValidator',692);c3(693,44,FLd,Iyd);var J0=k4(eVd,'FeatureMapUtil/BasicValidator/Cache',693);c3(455,41,{20:1,25:1,41:1,13:1,15:1,52:1,81:1,64:1},Nyd);_.bd=function Oyd(a,b){qud(this.c,this.b,a,b)};_.nc=function Pyd(a){return rud(this.c,this.b,a)};_.oc=function Qyd(a){return Jyd(this,a)};_.xj=function Ryd(a,b){return wud(this.c,this.b,a,b)};_.Dh=function Syd(a){return Iud(this.c,this.b,a,false)};_.oh=function Tyd(){return xud(this.c,this.b)};_.ph=function Uyd(){return yud(this.c,this.b)};_.qh=function Vyd(a){return zud(this.c,this.b,a)};_.yj=function Wyd(a,b){return Kyd(this,a,b)};_.Pb=function Xyd(){Lyd(this)};_.pc=function Yyd(a){return Dud(this.c,this.b,a)};_.qc=function Zyd(a){return Fud(this.c,this.b,a)};_.cd=function $yd(a){return Iud(this.c,this.b,a,true)};_.hj=function _yd(a){return this};_.dd=function azd(a){return Kud(this.c,this.b,a)};_.Wb=function bzd(){return Myd(this)};_.ui=function czd(){return !Qud(this.c,this.b)};_.tc=function dzd(){return Rud(this.c,this.b)};_.ed=function ezd(){return Tud(this.c,this.b)};_.fd=function fzd(a){return Uud(this.c,this.b,a)};_.gd=function gzd(a){return Vud(this.c,this.b,a)};_.vc=function hzd(a){return Wud(this.c,this.b,a)};_.hd=function izd(a,b){return avd(this.c,this.b,a,b)};_.Gc=function jzd(a){Cud(this.c,this.b);Jyd(this,kA(a,15))};_._b=function kzd(){return jvd(this.c,this.b)};_.yc=function lzd(){return kvd(this.c,this.b)};_.zc=function mzd(a){return mvd(this.c,this.b,a)};_.Ib=function nzd(){var a,b;b=new z6;b.a+='[';for(a=xud(this.c,this.b);Uvd(a);){w6(b,p6(Wvd(a)));Uvd(a)&&(b.a+=qJd,b)}b.a+=']';return b.a};_.ij=function ozd(){Cud(this.c,this.b)};var L0=k4(eVd,'FeatureMapUtil/FeatureEList',455);c3(575,32,MUd,qzd);_.Mh=function rzd(a){return pzd(this,a)};_.Rh=function szd(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Oh();if(yA(f)===yA(this.c)&&pzd(this,null)==a.Mh(null)){this.g=a.Nh();a.Lh()==1&&(this.d=1);return true}break}case 3:{e=a.Lh();switch(e){case 3:{f=a.Oh();if(yA(f)===yA(this.c)&&pzd(this,null)==a.Mh(null)){this.d=5;b=new dYc(2);fXc(b,this.g);fXc(b,a.Nh());this.g=b;return true}break}}break}case 5:{e=a.Lh();switch(e){case 3:{f=a.Oh();if(yA(f)===yA(this.c)&&pzd(this,null)==a.Mh(null)){c=kA(this.g,13);c.nc(a.Nh());return true}break}}break}case 4:{e=a.Lh();switch(e){case 3:{f=a.Oh();if(yA(f)===yA(this.c)&&pzd(this,null)==a.Mh(null)){this.d=1;this.g=a.Nh();return true}break}case 4:{f=a.Oh();if(yA(f)===yA(this.c)&&pzd(this,null)==a.Mh(null)){this.d=6;h=new dYc(2);fXc(h,this.n);fXc(h,a.Ph());this.n=h;g=xz(pz(FA,1),OKd,22,15,[this.o,a.Qh()]);this.g=g;return true}break}}break}case 6:{e=a.Lh();switch(e){case 4:{f=a.Oh();if(yA(f)===yA(this.c)&&pzd(this,null)==a.Mh(null)){c=kA(this.n,13);c.nc(a.Ph());g=kA(this.g,37);d=tz(FA,OKd,22,g.length+1,15,1);T6(g,0,d,0,g.length);d[g.length]=a.Qh();this.g=d;return true}break}}break}}return false};var M0=k4(eVd,'FeatureMapUtil/FeatureENotificationImpl',575);c3(501,455,{20:1,25:1,41:1,13:1,15:1,52:1,81:1,184:1,237:1,1630:1,64:1},tzd);_.pk=function uzd(a,b,c){return wud(this.c,a,b,c)};_.qk=function vzd(a,b,c){return Bud(this.c,a,b,c)};_.rk=function wzd(){return this};_.sk=function xzd(a,b){return Jud(this.c,a,b)};_.tk=function yzd(a){return kA(Iud(this.c,this.b,a,false),75).nj()};_.uk=function zzd(a){return kA(Iud(this.c,this.b,a,false),75).lc()};_.vk=function Azd(){return this.a};_.wk=function Bzd(a){return !Qud(this.c,a)};_.xk=function Czd(a,b){bvd(this.c,a,b)};_.yk=function Dzd(a){return cvd(this.c,a)};var N0=k4(eVd,'FeatureMapUtil/FeatureFeatureMap',501);c3(1094,1,{81:1},Ezd);_.hj=function Fzd(a){return Iud(this.b,this.a,-1,a)};_.ui=function Gzd(){return !Qud(this.b,this.a)};_.Gc=function Hzd(a){bvd(this.b,this.a,a)};_.ij=function Izd(){Cud(this.b,this.a)};var O0=k4(eVd,'FeatureMapUtil/FeatureValue',1094);var Jzd,Kzd,Lzd,Mzd,Nzd;var S0=m4(oWd,'AnyType');c3(603,54,rKd,Pzd);var T0=k4(oWd,'InvalidDatatypeValueException',603);var U0=m4(oWd,pWd);var V0=m4(oWd,qWd);var W0=m4(oWd,rWd);var Qzd;var Szd;var Uzd,Vzd,Wzd,Xzd,Yzd,Zzd,$zd,_zd,aAd,bAd,cAd,dAd,eAd,fAd,gAd,hAd,iAd,jAd,kAd,lAd,mAd,nAd,oAd,pAd;c3(735,463,{95:1,91:1,87:1,51:1,42:1,92:1,746:1},rAd);_.ug=function sAd(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new pvd(this,0)),this.c;return !this.c&&(this.c=new pvd(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new pvd(this,0)),kA(Sud(this.c,(qAd(),Vzd)),184);return (!this.c&&(this.c=new pvd(this,0)),kA(kA(Sud(this.c,(qAd(),Vzd)),184),237)).vk();case 2:if(c)return !this.b&&(this.b=new pvd(this,2)),this.b;return !this.b&&(this.b=new pvd(this,2)),this.b.b;}return EMc(this,a-Lbd(this.Rg()),Gbd((this.j&2)==0?this.Rg():(!this.k&&(this.k=new B7c),this.k).pj(),a),b,c)};_.Dg=function tAd(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new pvd(this,0)),Aud(this.c,a,c);case 1:return (!this.c&&(this.c=new pvd(this,0)),kA(kA(Sud(this.c,(qAd(),Vzd)),184),64)).yj(a,c);case 2:return !this.b&&(this.b=new pvd(this,2)),Aud(this.b,a,c);}return d=kA(Gbd((this.j&2)==0?this.Rg():(!this.k&&(this.k=new B7c),this.k).pj(),b),61),d.aj().ej(this,$Mc(this),b-Lbd(this.Rg()),a,c)};_.Fg=function uAd(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new pvd(this,0)),kA(Sud(this.c,(qAd(),Vzd)),184)).Wb();case 2:return !!this.b&&this.b.i!=0;}return FMc(this,a-Lbd(this.Rg()),Gbd((this.j&2)==0?this.Rg():(!this.k&&(this.k=new B7c),this.k).pj(),a))};_.Mg=function vAd(a,b){switch(a){case 0:!this.c&&(this.c=new pvd(this,0));_ud(this.c,b);return;case 1:(!this.c&&(this.c=new pvd(this,0)),kA(kA(Sud(this.c,(qAd(),Vzd)),184),237)).Gc(b);return;case 2:!this.b&&(this.b=new pvd(this,2));_ud(this.b,b);return;}GMc(this,a-Lbd(this.Rg()),Gbd((this.j&2)==0?this.Rg():(!this.k&&(this.k=new B7c),this.k).pj(),a),b)};_.Rg=function wAd(){return qAd(),Uzd};_.Ib=function xAd(){var a;if((this.j&4)!=0)return aNc(this);a=new B6(aNc(this));a.a+=' (mixed: ';v6(a,this.c);a.a+=', anyAttribute: ';v6(a,this.b);a.a+=')';return a.a};var X0=k4(sWd,'AnyTypeImpl',735);c3(604,463,{95:1,91:1,87:1,51:1,42:1,92:1,1707:1,604:1},AAd);_.ug=function BAd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return EMc(this,a-Lbd((qAd(),fAd)),Gbd((this.j&2)==0?fAd:(!this.k&&(this.k=new B7c),this.k).pj(),a),b,c)};_.Fg=function CAd(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return FMc(this,a-Lbd((qAd(),fAd)),Gbd((this.j&2)==0?fAd:(!this.k&&(this.k=new B7c),this.k).pj(),a))};_.Mg=function DAd(a,b){switch(a){case 0:yAd(this,pA(b));return;case 1:zAd(this,pA(b));return;}GMc(this,a-Lbd((qAd(),fAd)),Gbd((this.j&2)==0?fAd:(!this.k&&(this.k=new B7c),this.k).pj(),a),b)};_.Rg=function EAd(){return qAd(),fAd};_.Ib=function FAd(){var a;if((this.j&4)!=0)return aNc(this);a=new B6(aNc(this));a.a+=' (data: ';w6(a,this.a);a.a+=', target: ';w6(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var Y0=k4(sWd,'ProcessingInstructionImpl',604);c3(605,735,{95:1,91:1,87:1,51:1,42:1,92:1,746:1,1708:1,605:1},IAd);_.ug=function JAd(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new pvd(this,0)),this.c;return !this.c&&(this.c=new pvd(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new pvd(this,0)),kA(Sud(this.c,(qAd(),Vzd)),184);return (!this.c&&(this.c=new pvd(this,0)),kA(kA(Sud(this.c,(qAd(),Vzd)),184),237)).vk();case 2:if(c)return !this.b&&(this.b=new pvd(this,2)),this.b;return !this.b&&(this.b=new pvd(this,2)),this.b.b;case 3:return !this.c&&(this.c=new pvd(this,0)),pA(Jud(this.c,(qAd(),iAd),true));case 4:return $xd(this.a,(!this.c&&(this.c=new pvd(this,0)),pA(Jud(this.c,(qAd(),iAd),true))));case 5:return this.a;}return EMc(this,a-Lbd((qAd(),hAd)),Gbd((this.j&2)==0?hAd:(!this.k&&(this.k=new B7c),this.k).pj(),a),b,c)};_.Fg=function KAd(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new pvd(this,0)),kA(Sud(this.c,(qAd(),Vzd)),184)).Wb();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new pvd(this,0)),pA(Jud(this.c,(qAd(),iAd),true))!=null;case 4:return $xd(this.a,(!this.c&&(this.c=new pvd(this,0)),pA(Jud(this.c,(qAd(),iAd),true))))!=null;case 5:return !!this.a;}return FMc(this,a-Lbd((qAd(),hAd)),Gbd((this.j&2)==0?hAd:(!this.k&&(this.k=new B7c),this.k).pj(),a))};_.Mg=function LAd(a,b){switch(a){case 0:!this.c&&(this.c=new pvd(this,0));_ud(this.c,b);return;case 1:(!this.c&&(this.c=new pvd(this,0)),kA(kA(Sud(this.c,(qAd(),Vzd)),184),237)).Gc(b);return;case 2:!this.b&&(this.b=new pvd(this,2));_ud(this.b,b);return;case 3:HAd(this,pA(b));return;case 4:HAd(this,Zxd(this.a,b));return;case 5:GAd(this,kA(b,140));return;}GMc(this,a-Lbd((qAd(),hAd)),Gbd((this.j&2)==0?hAd:(!this.k&&(this.k=new B7c),this.k).pj(),a),b)};_.Rg=function MAd(){return qAd(),hAd};var Z0=k4(sWd,'SimpleAnyTypeImpl',605);c3(606,463,{95:1,91:1,87:1,51:1,42:1,92:1,1709:1,606:1},NAd);_.ug=function OAd(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new pvd(this,0)),this.a;return !this.a&&(this.a=new pvd(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new T8c((j7c(),f7c),CZ,this,1)),this.b):(!this.b&&(this.b=new T8c((j7c(),f7c),CZ,this,1)),X1c(this.b));case 2:return c?(!this.c&&(this.c=new T8c((j7c(),f7c),CZ,this,2)),this.c):(!this.c&&(this.c=new T8c((j7c(),f7c),CZ,this,2)),X1c(this.c));case 3:return !this.a&&(this.a=new pvd(this,0)),Sud(this.a,(qAd(),lAd));case 4:return !this.a&&(this.a=new pvd(this,0)),Sud(this.a,(qAd(),mAd));case 5:return !this.a&&(this.a=new pvd(this,0)),Sud(this.a,(qAd(),oAd));case 6:return !this.a&&(this.a=new pvd(this,0)),Sud(this.a,(qAd(),pAd));}return EMc(this,a-Lbd((qAd(),kAd)),Gbd((this.j&2)==0?kAd:(!this.k&&(this.k=new B7c),this.k).pj(),a),b,c)};_.Dg=function PAd(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new pvd(this,0)),Aud(this.a,a,c);case 1:return !this.b&&(this.b=new T8c((j7c(),f7c),CZ,this,1)),R8c(this.b,a,c);case 2:return !this.c&&(this.c=new T8c((j7c(),f7c),CZ,this,2)),R8c(this.c,a,c);case 5:return !this.a&&(this.a=new pvd(this,0)),Kyd(Sud(this.a,(qAd(),oAd)),a,c);}return d=kA(Gbd((this.j&2)==0?(qAd(),kAd):(!this.k&&(this.k=new B7c),this.k).pj(),b),61),d.aj().ej(this,$Mc(this),b-Lbd((qAd(),kAd)),a,c)};_.Fg=function QAd(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new pvd(this,0)),!Myd(Sud(this.a,(qAd(),lAd)));case 4:return !this.a&&(this.a=new pvd(this,0)),!Myd(Sud(this.a,(qAd(),mAd)));case 5:return !this.a&&(this.a=new pvd(this,0)),!Myd(Sud(this.a,(qAd(),oAd)));case 6:return !this.a&&(this.a=new pvd(this,0)),!Myd(Sud(this.a,(qAd(),pAd)));}return FMc(this,a-Lbd((qAd(),kAd)),Gbd((this.j&2)==0?kAd:(!this.k&&(this.k=new B7c),this.k).pj(),a))};_.Mg=function RAd(a,b){switch(a){case 0:!this.a&&(this.a=new pvd(this,0));_ud(this.a,b);return;case 1:!this.b&&(this.b=new T8c((j7c(),f7c),CZ,this,1));S8c(this.b,b);return;case 2:!this.c&&(this.c=new T8c((j7c(),f7c),CZ,this,2));S8c(this.c,b);return;case 3:!this.a&&(this.a=new pvd(this,0));Lyd(Sud(this.a,(qAd(),lAd)));!this.a&&(this.a=new pvd(this,0));Jyd(Sud(this.a,lAd),kA(b,13));return;case 4:!this.a&&(this.a=new pvd(this,0));Lyd(Sud(this.a,(qAd(),mAd)));!this.a&&(this.a=new pvd(this,0));Jyd(Sud(this.a,mAd),kA(b,13));return;case 5:!this.a&&(this.a=new pvd(this,0));Lyd(Sud(this.a,(qAd(),oAd)));!this.a&&(this.a=new pvd(this,0));Jyd(Sud(this.a,oAd),kA(b,13));return;case 6:!this.a&&(this.a=new pvd(this,0));Lyd(Sud(this.a,(qAd(),pAd)));!this.a&&(this.a=new pvd(this,0));Jyd(Sud(this.a,pAd),kA(b,13));return;}GMc(this,a-Lbd((qAd(),kAd)),Gbd((this.j&2)==0?kAd:(!this.k&&(this.k=new B7c),this.k).pj(),a),b)};_.Rg=function SAd(){return qAd(),kAd};_.Ib=function TAd(){var a;if((this.j&4)!=0)return aNc(this);a=new B6(aNc(this));a.a+=' (mixed: ';v6(a,this.a);a.a+=')';return a.a};var $0=k4(sWd,'XMLTypeDocumentRootImpl',606);c3(1626,638,{95:1,91:1,87:1,430:1,139:1,51:1,103:1,42:1,92:1,142:1,107:1,108:1,1710:1},qBd);_.Zg=function rBd(a,b){switch(a.Ni()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:f3(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return pA(b);case 6:return $Ad(kA(b,173));case 12:case 47:case 49:case 11:return bRc(this,a,b);case 13:return b==null?null:h7(kA(b,216));case 15:case 14:return b==null?null:_Ad(Vpb(nA(b)));case 17:return aBd((qAd(),b));case 18:return aBd(b);case 21:case 20:return b==null?null:bBd(kA(b,126).a);case 27:return cBd(kA(b,173));case 30:return dBd((qAd(),kA(b,15)));case 31:return dBd(kA(b,15));case 40:return gBd((qAd(),b));case 42:return eBd((qAd(),b));case 43:return eBd(b);case 59:case 48:return fBd((qAd(),b));default:throw x2(new O4(gTd+a.be()+hTd));}};_.$g=function sBd(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=Nad(a),c?pcd(c.bh(),a):-1)),a.G){case 0:return b=new rAd,b;case 1:return d=new AAd,d;case 2:return e=new IAd,e;case 3:return f=new NAd,f;default:throw x2(new O4(kTd+a.zb+hTd));}};_._g=function tBd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.Ni()){case 5:case 52:case 4:return b;case 6:return hBd(b);case 8:case 7:return b==null?null:ZAd(b);case 9:return b==null?null:R3(H3((d=mId(b,true),d.length>0&&d.charCodeAt(0)==43?d.substr(1,d.length-1):d),-128,127)<<24>>24);case 10:return b==null?null:R3(H3((e=mId(b,true),e.length>0&&e.charCodeAt(0)==43?e.substr(1,e.length-1):e),-128,127)<<24>>24);case 11:return pA(cRc(this,(qAd(),Yzd),b));case 12:return pA(cRc(this,(qAd(),Zzd),b));case 13:return b==null?null:new k7(mId(b,true));case 15:case 14:return iBd(b);case 16:return pA(cRc(this,(qAd(),$zd),b));case 17:return jBd((qAd(),b));case 18:return jBd(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return mId(b,true);case 21:case 20:return kBd(b);case 22:return pA(cRc(this,(qAd(),_zd),b));case 23:return pA(cRc(this,(qAd(),aAd),b));case 24:return pA(cRc(this,(qAd(),bAd),b));case 25:return pA(cRc(this,(qAd(),cAd),b));case 26:return pA(cRc(this,(qAd(),dAd),b));case 27:return lBd(b);case 30:return mBd((qAd(),b));case 31:return mBd(b);case 32:return b==null?null:d5(H3((k=mId(b,true),k.length>0&&k.charCodeAt(0)==43?k.substr(1,k.length-1):k),oKd,jJd));case 33:return b==null?null:new P7((l=mId(b,true),l.length>0&&l.charCodeAt(0)==43?l.substr(1,l.length-1):l));case 34:return b==null?null:d5(H3((m=mId(b,true),m.length>0&&m.charCodeAt(0)==43?m.substr(1,m.length-1):m),oKd,jJd));case 36:return b==null?null:r5(I3((n=mId(b,true),n.length>0&&n.charCodeAt(0)==43?n.substr(1,n.length-1):n)));case 37:return b==null?null:r5(I3((o=mId(b,true),o.length>0&&o.charCodeAt(0)==43?o.substr(1,o.length-1):o)));case 40:return pBd((qAd(),b));case 42:return nBd((qAd(),b));case 43:return nBd(b);case 44:return b==null?null:new P7((p=mId(b,true),p.length>0&&p.charCodeAt(0)==43?p.substr(1,p.length-1):p));case 45:return b==null?null:new P7((q=mId(b,true),q.length>0&&q.charCodeAt(0)==43?q.substr(1,q.length-1):q));case 46:return mId(b,false);case 47:return pA(cRc(this,(qAd(),eAd),b));case 59:case 48:return oBd((qAd(),b));case 49:return pA(cRc(this,(qAd(),gAd),b));case 50:return b==null?null:Q5(H3((r=mId(b,true),r.length>0&&r.charCodeAt(0)==43?r.substr(1,r.length-1):r),IVd,32767)<<16>>16);case 51:return b==null?null:Q5(H3((f=mId(b,true),f.length>0&&f.charCodeAt(0)==43?f.substr(1,f.length-1):f),IVd,32767)<<16>>16);case 53:return pA(cRc(this,(qAd(),jAd),b));case 55:return b==null?null:Q5(H3((g=mId(b,true),g.length>0&&g.charCodeAt(0)==43?g.substr(1,g.length-1):g),IVd,32767)<<16>>16);case 56:return b==null?null:Q5(H3((h=mId(b,true),h.length>0&&h.charCodeAt(0)==43?h.substr(1,h.length-1):h),IVd,32767)<<16>>16);case 57:return b==null?null:r5(I3((i=mId(b,true),i.length>0&&i.charCodeAt(0)==43?i.substr(1,i.length-1):i)));case 58:return b==null?null:r5(I3((j=mId(b,true),j.length>0&&j.charCodeAt(0)==43?j.substr(1,j.length-1):j)));case 60:return b==null?null:d5(H3((c=mId(b,true),c.length>0&&c.charCodeAt(0)==43?c.substr(1,c.length-1):c),oKd,jJd));case 61:return b==null?null:d5(H3(mId(b,true),oKd,jJd));default:throw x2(new O4(gTd+a.be()+hTd));}};var UAd,VAd,WAd,XAd;var _0=k4(sWd,'XMLTypeFactoryImpl',1626);c3(530,248,{95:1,91:1,87:1,139:1,174:1,51:1,207:1,103:1,42:1,92:1,142:1,248:1,107:1,108:1,613:1,1639:1,530:1},ABd);_.N=false;_.O=false;var vBd=false;var $1=k4(sWd,'XMLTypePackageImpl',530);c3(1569,1,{743:1},DBd);_.mj=function EBd(){return qId(),pId};var k1=k4(sWd,'XMLTypePackageImpl/1',1569);c3(1578,1,VVd,FBd);_.Li=function GBd(a){return wA(a)};_.Mi=function HBd(a){return tz(UE,cKd,2,a,6,1)};var a1=k4(sWd,'XMLTypePackageImpl/10',1578);c3(1579,1,VVd,IBd);_.Li=function JBd(a){return wA(a)};_.Mi=function KBd(a){return tz(UE,cKd,2,a,6,1)};var b1=k4(sWd,'XMLTypePackageImpl/11',1579);c3(1580,1,VVd,LBd);_.Li=function MBd(a){return wA(a)};_.Mi=function NBd(a){return tz(UE,cKd,2,a,6,1)};var c1=k4(sWd,'XMLTypePackageImpl/12',1580);c3(1581,1,VVd,OBd);_.Li=function PBd(a){return uA(a)};_.Mi=function QBd(a){return tz(yE,cKd,315,a,7,1)};var d1=k4(sWd,'XMLTypePackageImpl/13',1581);c3(1582,1,VVd,RBd);_.Li=function SBd(a){return wA(a)};_.Mi=function TBd(a){return tz(UE,cKd,2,a,6,1)};var e1=k4(sWd,'XMLTypePackageImpl/14',1582);c3(1583,1,VVd,UBd);_.Li=function VBd(a){return sA(a,15)};_.Mi=function WBd(a){return tz(mG,ZMd,15,a,0,1)};var f1=k4(sWd,'XMLTypePackageImpl/15',1583);c3(1584,1,VVd,XBd);_.Li=function YBd(a){return sA(a,15)};_.Mi=function ZBd(a){return tz(mG,ZMd,15,a,0,1)};var g1=k4(sWd,'XMLTypePackageImpl/16',1584);c3(1585,1,VVd,$Bd);_.Li=function _Bd(a){return wA(a)};_.Mi=function aCd(a){return tz(UE,cKd,2,a,6,1)};var h1=k4(sWd,'XMLTypePackageImpl/17',1585);c3(1586,1,VVd,bCd);_.Li=function cCd(a){return sA(a,126)};_.Mi=function dCd(a){return tz(CE,cKd,126,a,0,1)};var i1=k4(sWd,'XMLTypePackageImpl/18',1586);c3(1587,1,VVd,eCd);_.Li=function fCd(a){return wA(a)};_.Mi=function gCd(a){return tz(UE,cKd,2,a,6,1)};var j1=k4(sWd,'XMLTypePackageImpl/19',1587);c3(1570,1,VVd,hCd);_.Li=function iCd(a){return sA(a,746)};_.Mi=function jCd(a){return tz(S0,oJd,746,a,0,1)};var v1=k4(sWd,'XMLTypePackageImpl/2',1570);c3(1588,1,VVd,kCd);_.Li=function lCd(a){return wA(a)};_.Mi=function mCd(a){return tz(UE,cKd,2,a,6,1)};var l1=k4(sWd,'XMLTypePackageImpl/20',1588);c3(1589,1,VVd,nCd);_.Li=function oCd(a){return wA(a)};_.Mi=function pCd(a){return tz(UE,cKd,2,a,6,1)};var m1=k4(sWd,'XMLTypePackageImpl/21',1589);c3(1590,1,VVd,qCd);_.Li=function rCd(a){return wA(a)};_.Mi=function sCd(a){return tz(UE,cKd,2,a,6,1)};var n1=k4(sWd,'XMLTypePackageImpl/22',1590);c3(1591,1,VVd,tCd);_.Li=function uCd(a){return wA(a)};_.Mi=function vCd(a){return tz(UE,cKd,2,a,6,1)};var o1=k4(sWd,'XMLTypePackageImpl/23',1591);c3(1592,1,VVd,wCd);_.Li=function xCd(a){return sA(a,173)};_.Mi=function yCd(a){return tz(BA,cKd,173,a,0,2)};var p1=k4(sWd,'XMLTypePackageImpl/24',1592);c3(1593,1,VVd,zCd);_.Li=function ACd(a){return wA(a)};_.Mi=function BCd(a){return tz(UE,cKd,2,a,6,1)};var q1=k4(sWd,'XMLTypePackageImpl/25',1593);c3(1594,1,VVd,CCd);_.Li=function DCd(a){return wA(a)};_.Mi=function ECd(a){return tz(UE,cKd,2,a,6,1)};var r1=k4(sWd,'XMLTypePackageImpl/26',1594);c3(1595,1,VVd,FCd);_.Li=function GCd(a){return sA(a,15)};_.Mi=function HCd(a){return tz(mG,ZMd,15,a,0,1)};var s1=k4(sWd,'XMLTypePackageImpl/27',1595);c3(1596,1,VVd,ICd);_.Li=function JCd(a){return sA(a,15)};_.Mi=function KCd(a){return tz(mG,ZMd,15,a,0,1)};var t1=k4(sWd,'XMLTypePackageImpl/28',1596);c3(1597,1,VVd,LCd);_.Li=function MCd(a){return wA(a)};_.Mi=function NCd(a){return tz(UE,cKd,2,a,6,1)};var u1=k4(sWd,'XMLTypePackageImpl/29',1597);c3(1571,1,VVd,OCd);_.Li=function PCd(a){return sA(a,604)};_.Mi=function QCd(a){return tz(U0,oJd,1707,a,0,1)};var G1=k4(sWd,'XMLTypePackageImpl/3',1571);c3(1598,1,VVd,RCd);_.Li=function SCd(a){return sA(a,21)};_.Mi=function TCd(a){return tz(GE,cKd,21,a,0,1)};var w1=k4(sWd,'XMLTypePackageImpl/30',1598);c3(1599,1,VVd,UCd);_.Li=function VCd(a){return wA(a)};_.Mi=function WCd(a){return tz(UE,cKd,2,a,6,1)};var x1=k4(sWd,'XMLTypePackageImpl/31',1599);c3(1600,1,VVd,XCd);_.Li=function YCd(a){return sA(a,149)};_.Mi=function ZCd(a){return tz(IE,cKd,149,a,0,1)};var y1=k4(sWd,'XMLTypePackageImpl/32',1600);c3(1601,1,VVd,$Cd);_.Li=function _Cd(a){return wA(a)};_.Mi=function aDd(a){return tz(UE,cKd,2,a,6,1)};var z1=k4(sWd,'XMLTypePackageImpl/33',1601);c3(1602,1,VVd,bDd);_.Li=function cDd(a){return wA(a)};_.Mi=function dDd(a){return tz(UE,cKd,2,a,6,1)};var A1=k4(sWd,'XMLTypePackageImpl/34',1602);c3(1603,1,VVd,eDd);_.Li=function fDd(a){return wA(a)};_.Mi=function gDd(a){return tz(UE,cKd,2,a,6,1)};var B1=k4(sWd,'XMLTypePackageImpl/35',1603);c3(1604,1,VVd,hDd);_.Li=function iDd(a){return wA(a)};_.Mi=function jDd(a){return tz(UE,cKd,2,a,6,1)};var C1=k4(sWd,'XMLTypePackageImpl/36',1604);c3(1605,1,VVd,kDd);_.Li=function lDd(a){return sA(a,15)};_.Mi=function mDd(a){return tz(mG,ZMd,15,a,0,1)};var D1=k4(sWd,'XMLTypePackageImpl/37',1605);c3(1606,1,VVd,nDd);_.Li=function oDd(a){return sA(a,15)};_.Mi=function pDd(a){return tz(mG,ZMd,15,a,0,1)};var E1=k4(sWd,'XMLTypePackageImpl/38',1606);c3(1607,1,VVd,qDd);_.Li=function rDd(a){return wA(a)};_.Mi=function sDd(a){return tz(UE,cKd,2,a,6,1)};var F1=k4(sWd,'XMLTypePackageImpl/39',1607);c3(1572,1,VVd,tDd);_.Li=function uDd(a){return sA(a,605)};_.Mi=function vDd(a){return tz(V0,oJd,1708,a,0,1)};var R1=k4(sWd,'XMLTypePackageImpl/4',1572);c3(1608,1,VVd,wDd);_.Li=function xDd(a){return wA(a)};_.Mi=function yDd(a){return tz(UE,cKd,2,a,6,1)};var H1=k4(sWd,'XMLTypePackageImpl/40',1608);c3(1609,1,VVd,zDd);_.Li=function ADd(a){return wA(a)};_.Mi=function BDd(a){return tz(UE,cKd,2,a,6,1)};var I1=k4(sWd,'XMLTypePackageImpl/41',1609);c3(1610,1,VVd,CDd);_.Li=function DDd(a){return wA(a)};_.Mi=function EDd(a){return tz(UE,cKd,2,a,6,1)};var J1=k4(sWd,'XMLTypePackageImpl/42',1610);c3(1611,1,VVd,FDd);_.Li=function GDd(a){return wA(a)};_.Mi=function HDd(a){return tz(UE,cKd,2,a,6,1)};var K1=k4(sWd,'XMLTypePackageImpl/43',1611);c3(1612,1,VVd,IDd);_.Li=function JDd(a){return wA(a)};_.Mi=function KDd(a){return tz(UE,cKd,2,a,6,1)};var L1=k4(sWd,'XMLTypePackageImpl/44',1612);c3(1613,1,VVd,LDd);_.Li=function MDd(a){return sA(a,168)};_.Mi=function NDd(a){return tz(PE,cKd,168,a,0,1)};var M1=k4(sWd,'XMLTypePackageImpl/45',1613);c3(1614,1,VVd,ODd);_.Li=function PDd(a){return wA(a)};_.Mi=function QDd(a){return tz(UE,cKd,2,a,6,1)};var N1=k4(sWd,'XMLTypePackageImpl/46',1614);c3(1615,1,VVd,RDd);_.Li=function SDd(a){return wA(a)};_.Mi=function TDd(a){return tz(UE,cKd,2,a,6,1)};var O1=k4(sWd,'XMLTypePackageImpl/47',1615);c3(1616,1,VVd,UDd);_.Li=function VDd(a){return wA(a)};_.Mi=function WDd(a){return tz(UE,cKd,2,a,6,1)};var P1=k4(sWd,'XMLTypePackageImpl/48',1616);c3(1617,1,VVd,XDd);_.Li=function YDd(a){return sA(a,168)};_.Mi=function ZDd(a){return tz(PE,cKd,168,a,0,1)};var Q1=k4(sWd,'XMLTypePackageImpl/49',1617);c3(1573,1,VVd,$Dd);_.Li=function _Dd(a){return sA(a,606)};_.Mi=function aEd(a){return tz(W0,oJd,1709,a,0,1)};var V1=k4(sWd,'XMLTypePackageImpl/5',1573);c3(1618,1,VVd,bEd);_.Li=function cEd(a){return sA(a,149)};_.Mi=function dEd(a){return tz(IE,cKd,149,a,0,1)};var S1=k4(sWd,'XMLTypePackageImpl/50',1618);c3(1619,1,VVd,eEd);_.Li=function fEd(a){return wA(a)};_.Mi=function gEd(a){return tz(UE,cKd,2,a,6,1)};var T1=k4(sWd,'XMLTypePackageImpl/51',1619);c3(1620,1,VVd,hEd);_.Li=function iEd(a){return sA(a,21)};_.Mi=function jEd(a){return tz(GE,cKd,21,a,0,1)};var U1=k4(sWd,'XMLTypePackageImpl/52',1620);c3(1574,1,VVd,kEd);_.Li=function lEd(a){return wA(a)};_.Mi=function mEd(a){return tz(UE,cKd,2,a,6,1)};var W1=k4(sWd,'XMLTypePackageImpl/6',1574);c3(1575,1,VVd,nEd);_.Li=function oEd(a){return sA(a,173)};_.Mi=function pEd(a){return tz(BA,cKd,173,a,0,2)};var X1=k4(sWd,'XMLTypePackageImpl/7',1575);c3(1576,1,VVd,qEd);_.Li=function rEd(a){return tA(a)};_.Mi=function sEd(a){return tz(tE,cKd,434,a,8,1)};var Y1=k4(sWd,'XMLTypePackageImpl/8',1576);c3(1577,1,VVd,tEd);_.Li=function uEd(a){return sA(a,192)};_.Mi=function vEd(a){return tz(uE,cKd,192,a,0,1)};var Z1=k4(sWd,'XMLTypePackageImpl/9',1577);var wEd,xEd;var DEd,EEd;var IEd;c3(40,54,rKd,KEd);var _1=k4(SWd,'RegEx/ParseException',40);c3(730,1,{},SEd);_.Ck=function TEd(a){return ac*16)throw x2(new KEd(WYc((isd(),zUd))));c=c*16+e}while(true);if(this.a!=125)throw x2(new KEd(WYc((isd(),AUd))));if(c>TWd)throw x2(new KEd(WYc((isd(),BUd))));a=c}else{e=0;if(this.c!=0||(e=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));c=e;LEd(this);if(this.c!=0||(e=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));c=c*16+e;a=c}break;case 117:d=0;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;a=b;break;case 118:LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;LEd(this);if(this.c!=0||(d=WEd(this.a))<0)throw x2(new KEd(WYc((isd(),yUd))));b=b*16+d;if(b>TWd)throw x2(new KEd(WYc((isd(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw x2(new KEd(WYc((isd(),CUd))));}return a};_.Ek=function VEd(a){var b;switch(a){case 100:b=(this.e&32)==32?gHd('Nd',true):(UGd(),AGd);break;case 68:b=(this.e&32)==32?gHd('Nd',false):(UGd(),HGd);break;case 119:b=(this.e&32)==32?gHd('IsWord',true):(UGd(),QGd);break;case 87:b=(this.e&32)==32?gHd('IsWord',false):(UGd(),JGd);break;case 115:b=(this.e&32)==32?gHd('IsSpace',true):(UGd(),LGd);break;case 83:b=(this.e&32)==32?gHd('IsSpace',false):(UGd(),IGd);break;default:throw x2(new Tv(UWd+a.toString(16)));}return b};_.Fk=function XEd(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;LEd(this);b=null;if(this.c==0&&this.a==94){LEd(this);if(a){k=(UGd(),UGd(),++TGd,new wHd(5))}else{b=(UGd(),UGd(),++TGd,new wHd(4));qHd(b,0,TWd);k=(null,++TGd,new wHd(4))}}else{k=(UGd(),UGd(),++TGd,new wHd(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:tHd(k,this.Ek(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Vk(k,c);c<0&&(d=true);break;case 112:case 80:l=REd(this,c);if(!l)throw x2(new KEd(WYc((isd(),nUd))));tHd(k,l);d=true;break;default:c=this.Dk();}}else if(m==20){g=a6(this.i,58,this.d);if(g<0)throw x2(new KEd(WYc((isd(),oUd))));h=true;if(X5(this.i,this.d)==94){++this.d;h=false}f=j6(this.i,this.d,g);i=hHd(f,h,(this.e&512)==512);if(!i)throw x2(new KEd(WYc((isd(),qUd))));tHd(k,i);d=true;if(g+1>=this.j||X5(this.i,g+1)!=93)throw x2(new KEd(WYc((isd(),oUd))));this.d=g+2}LEd(this);if(!d){if(this.c!=0||this.a!=45){qHd(k,c,c)}else{LEd(this);if((m=this.c)==1)throw x2(new KEd(WYc((isd(),pUd))));if(m==0&&this.a==93){qHd(k,c,c);qHd(k,45,45)}else{j=this.a;m==10&&(j=this.Dk());LEd(this);qHd(k,c,j)}}}(this.e&hVd)==hVd&&this.c==0&&this.a==44&&LEd(this)}if(this.c==1)throw x2(new KEd(WYc((isd(),pUd))));if(b){vHd(b,k);k=b}uHd(k);rHd(k);this.b=0;LEd(this);return k};_.Gk=function YEd(){var a,b,c,d;c=this.Fk(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){LEd(this);if(this.c!=9)throw x2(new KEd(WYc((isd(),vUd))));b=this.Fk(false);if(d==4)tHd(c,b);else if(a==45)vHd(c,b);else if(a==38)sHd(c,b);else throw x2(new Tv('ASSERT'))}else{throw x2(new KEd(WYc((isd(),wUd))))}}LEd(this);return c};_.Hk=function ZEd(){var a,b;a=this.a-48;b=(UGd(),UGd(),++TGd,new dId(12,null,a));!this.g&&(this.g=new Ukb);Rkb(this.g,new AHd(a));LEd(this);return b};_.Ik=function $Ed(){LEd(this);return UGd(),MGd};_.Jk=function _Ed(){LEd(this);return UGd(),KGd};_.Kk=function aFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Lk=function bFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Mk=function cFd(){LEd(this);return eHd()};_.Nk=function dFd(){LEd(this);return UGd(),OGd};_.Ok=function eFd(){LEd(this);return UGd(),RGd};_.Pk=function fFd(){var a;if(this.d>=this.j||((a=X5(this.i,this.d++))&65504)!=64)throw x2(new KEd(WYc((isd(),jUd))));LEd(this);return UGd(),UGd(),++TGd,new GHd(0,a-64)};_.Qk=function gFd(){LEd(this);return fHd()};_.Rk=function hFd(){LEd(this);return UGd(),SGd};_.Sk=function iFd(){var a;a=(UGd(),UGd(),++TGd,new GHd(0,105));LEd(this);return a};_.Tk=function jFd(){LEd(this);return UGd(),PGd};_.Uk=function kFd(){LEd(this);return UGd(),NGd};_.Vk=function lFd(a,b){return this.Dk()};_.Wk=function mFd(){LEd(this);return UGd(),FGd};_.Xk=function nFd(){var a,b,c,d,e;if(this.d+1>=this.j)throw x2(new KEd(WYc((isd(),gUd))));d=-1;b=null;a=X5(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Ukb);Rkb(this.g,new AHd(d));++this.d;if(X5(this.i,this.d)!=41)throw x2(new KEd(WYc((isd(),dUd))));++this.d}else{a==63&&--this.d;LEd(this);b=OEd(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));break;default:throw x2(new KEd(WYc((isd(),hUd))));}}LEd(this);e=PEd(this);c=null;if(e.e==2){if(e.ol()!=2)throw x2(new KEd(WYc((isd(),iUd))));c=e.kl(1);e=e.kl(0)}if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return UGd(),UGd(),++TGd,new THd(d,b,e,c)};_.Yk=function oFd(){LEd(this);return UGd(),GGd};_.Zk=function pFd(){var a;LEd(this);a=$Gd(24,PEd(this));if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_.$k=function qFd(){var a;LEd(this);a=$Gd(20,PEd(this));if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_._k=function rFd(){var a;LEd(this);a=$Gd(22,PEd(this));if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_.al=function sFd(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d=this.j)throw x2(new KEd(WYc((isd(),eUd))));if(b==45){++this.d;while(this.d=this.j)throw x2(new KEd(WYc((isd(),eUd))))}if(b==58){++this.d;LEd(this);d=_Gd(PEd(this),a,c);if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this)}else if(b==41){++this.d;LEd(this);d=_Gd(PEd(this),a,c)}else throw x2(new KEd(WYc((isd(),fUd))));return d};_.bl=function tFd(){var a;LEd(this);a=$Gd(21,PEd(this));if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_.cl=function uFd(){var a;LEd(this);a=$Gd(23,PEd(this));if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_.dl=function vFd(){var a,b;LEd(this);a=this.f++;b=aHd(PEd(this),a);if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return b};_.el=function wFd(){var a;LEd(this);a=aHd(PEd(this),0);if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_.fl=function xFd(a){LEd(this);if(this.c==5){LEd(this);return ZGd(a,(UGd(),UGd(),++TGd,new JHd(9,a)))}else return ZGd(a,(UGd(),UGd(),++TGd,new JHd(3,a)))};_.gl=function yFd(a){var b;LEd(this);b=(UGd(),UGd(),++TGd,new hId(2));if(this.c==5){LEd(this);gId(b,(null,DGd));gId(b,a)}else{gId(b,a);gId(b,(null,DGd))}return b};_.hl=function zFd(a){LEd(this);if(this.c==5){LEd(this);return UGd(),UGd(),++TGd,new JHd(9,a)}else return UGd(),UGd(),++TGd,new JHd(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var d2=k4(SWd,'RegEx/RegexParser',730);c3(1564,730,{},FFd);_.Ck=function GFd(a){return false};_.Dk=function HFd(){return CFd(this)};_.Ek=function JFd(a){return DFd(a)};_.Fk=function KFd(a){return EFd(this)};_.Gk=function LFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Hk=function MFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Ik=function NFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Jk=function OFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Kk=function PFd(){LEd(this);return DFd(67)};_.Lk=function QFd(){LEd(this);return DFd(73)};_.Mk=function RFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Nk=function SFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Ok=function TFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Pk=function UFd(){LEd(this);return DFd(99)};_.Qk=function VFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Rk=function WFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Sk=function XFd(){LEd(this);return DFd(105)};_.Tk=function YFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Uk=function ZFd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Vk=function $Fd(a,b){return tHd(a,DFd(b)),-1};_.Wk=function _Fd(){LEd(this);return UGd(),UGd(),++TGd,new GHd(0,94)};_.Xk=function aGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.Yk=function bGd(){LEd(this);return UGd(),UGd(),++TGd,new GHd(0,36)};_.Zk=function cGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.$k=function dGd(){throw x2(new KEd(WYc((isd(),DUd))))};_._k=function eGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.al=function fGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.bl=function gGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.cl=function hGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.dl=function iGd(){var a;LEd(this);a=aHd(PEd(this),0);if(this.c!=7)throw x2(new KEd(WYc((isd(),dUd))));LEd(this);return a};_.el=function jGd(){throw x2(new KEd(WYc((isd(),DUd))))};_.fl=function kGd(a){LEd(this);return ZGd(a,(UGd(),UGd(),++TGd,new JHd(3,a)))};_.gl=function lGd(a){var b;LEd(this);b=(UGd(),UGd(),++TGd,new hId(2));gId(b,a);gId(b,(null,DGd));return b};_.hl=function mGd(a){LEd(this);return UGd(),UGd(),++TGd,new JHd(3,a)};var AFd=null,BFd=null;var a2=k4(SWd,'RegEx/ParserForXMLSchema',1564);c3(112,1,eXd,VGd);_.il=function WGd(a){throw x2(new Tv('Not supported.'))};_.jl=function cHd(){return -1};_.kl=function dHd(a){return null};_.ll=function iHd(){return null};_.ml=function lHd(a){};_.nl=function mHd(a){};_.ol=function nHd(){return 0};_.Ib=function oHd(){return this.pl(0)};_.pl=function pHd(a){return this.e==11?'.':''};_.e=0;var uGd,vGd,wGd,xGd,yGd,zGd=null,AGd,BGd=null,CGd,DGd,EGd=null,FGd,GGd,HGd,IGd,JGd,KGd,LGd,MGd,NGd,OGd,PGd,QGd,RGd,SGd,TGd=0;var n2=k4(SWd,'RegEx/Token',112);c3(130,112,{3:1,130:1,112:1},wHd);_.pl=function zHd(a){var b,c,d;if(this.e==4){if(this==CGd)c='.';else if(this==AGd)c='\\d';else if(this==QGd)c='\\w';else if(this==LGd)c='\\s';else{d=new z6;d.a+='[';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){w6(d,yHd(this.b[b]))}else{w6(d,yHd(this.b[b]));d.a+='-';w6(d,yHd(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==HGd)c='\\D';else if(this==JGd)c='\\W';else if(this==IGd)c='\\S';else{d=new z6;d.a+='[^';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){w6(d,yHd(this.b[b]))}else{w6(d,yHd(this.b[b]));d.a+='-';w6(d,yHd(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var b2=k4(SWd,'RegEx/RangeToken',130);c3(528,1,{528:1},AHd);_.a=0;var c2=k4(SWd,'RegEx/RegexParser/ReferencePosition',528);c3(527,1,{3:1,527:1},CHd);_.Fb=function DHd(a){var b;if(a==null)return false;if(!sA(a,527))return false;b=kA(a,527);return Z5(this.b,b.b)&&this.a==b.a};_.Hb=function EHd(){return hqb(this.b+'/'+oGd(this.a))};_.Ib=function FHd(){return this.c.pl(this.a)};_.a=0;var e2=k4(SWd,'RegEx/RegularExpression',527);c3(195,112,eXd,GHd);_.jl=function HHd(){return this.a};_.pl=function IHd(a){var b,c;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:c='\\'+qA(this.a&AKd);break;case 12:c='\\f';break;case 10:c='\\n';break;case 13:c='\\r';break;case 9:c='\\t';break;case 27:c='\\e';break;default:if(this.a>=sLd){b='0'+(this.a>>>0).toString(16);c='\\v'+j6(b,b.length-6,b.length)}else c=''+qA(this.a&AKd);}break;case 8:this==FGd||this==GGd?(c=''+qA(this.a&AKd)):(c='\\'+qA(this.a&AKd));break;default:c=null;}return c};_.a=0;var f2=k4(SWd,'RegEx/Token/CharToken',195);c3(283,112,eXd,JHd);_.kl=function KHd(a){return this.a};_.ml=function LHd(a){this.b=a};_.nl=function MHd(a){this.c=a};_.ol=function NHd(){return 1};_.pl=function OHd(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.pl(a)+'*'}else if(this.c==this.b){b=this.a.pl(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.pl(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.pl(a)+'{'+this.c+',}'}else throw x2(new Tv('Token#toString(): CLOSURE '+this.c+qJd+this.b))}else{if(this.c<0&&this.b<0){b=this.a.pl(a)+'*?'}else if(this.c==this.b){b=this.a.pl(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.pl(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.pl(a)+'{'+this.c+',}?'}else throw x2(new Tv('Token#toString(): NONGREEDYCLOSURE '+this.c+qJd+this.b))}return b};_.b=0;_.c=0;var g2=k4(SWd,'RegEx/Token/ClosureToken',283);c3(731,112,eXd,PHd);_.kl=function QHd(a){return a==0?this.a:this.b};_.ol=function RHd(){return 2};_.pl=function SHd(a){var b;this.b.e==3&&this.b.kl(0)==this.a?(b=this.a.pl(a)+'+'):this.b.e==9&&this.b.kl(0)==this.a?(b=this.a.pl(a)+'+?'):(b=this.a.pl(a)+(''+this.b.pl(a)));return b};var h2=k4(SWd,'RegEx/Token/ConcatToken',731);c3(1562,112,eXd,THd);_.kl=function UHd(a){if(a==0)return this.d;if(a==1)return this.b;throw x2(new Tv('Internal Error: '+a))};_.ol=function VHd(){return !this.b?1:2};_.pl=function WHd(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var i2=k4(SWd,'RegEx/Token/ConditionToken',1562);c3(1563,112,eXd,XHd);_.kl=function YHd(a){return this.b};_.ol=function ZHd(){return 1};_.pl=function $Hd(a){return '(?'+(this.a==0?'':oGd(this.a))+(this.c==0?'':oGd(this.c))+':'+this.b.pl(a)+')'};_.a=0;_.c=0;var j2=k4(SWd,'RegEx/Token/ModifierToken',1563);c3(732,112,eXd,_Hd);_.kl=function aId(a){return this.a};_.ol=function bId(){return 1};_.pl=function cId(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.pl(a)+')'):(b='('+this.a.pl(a)+')');break;case 20:b='(?='+this.a.pl(a)+')';break;case 21:b='(?!'+this.a.pl(a)+')';break;case 22:b='(?<='+this.a.pl(a)+')';break;case 23:b='(?'+this.a.pl(a)+')';}return b};_.b=0;var k2=k4(SWd,'RegEx/Token/ParenToken',732);c3(474,112,{3:1,112:1,474:1},dId);_.ll=function eId(){return this.b};_.pl=function fId(a){return this.e==12?'\\'+this.a:sGd(this.b)};_.a=0;var l2=k4(SWd,'RegEx/Token/StringToken',474);c3(427,112,eXd,hId);_.il=function iId(a){gId(this,a)};_.kl=function jId(a){return kA(Skb(this.a,a),112)};_.ol=function kId(){return !this.a?0:this.a.a.c.length};_.pl=function lId(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=kA(Skb(this.a,0),112);c=kA(Skb(this.a,1),112);c.e==3&&c.kl(0)==b?(e=b.pl(a)+'+'):c.e==9&&c.kl(0)==b?(e=b.pl(a)+'+?'):(e=b.pl(a)+(''+c.pl(a)))}else{f=new z6;for(d=0;d=this.c.b:this.a<=this.c.b};_.Cc=function UId(){return this.b>0};_.Dc=function WId(){return this.b};_.Fc=function YId(){return this.b-1};_.jc=function ZId(){throw x2(new V6(kXd))};_.a=0;_.b=0;var r2=k4(hXd,'ExclusiveRange/RangeIterator',230);var CA=n4(lVd,'C');var FA=n4(oVd,'I');var u2=n4(gJd,'Z');var GA=n4(pVd,'J');var BA=n4(kVd,'B');var DA=n4(mVd,'D');var EA=n4(nVd,'F');var t2=n4(qVd,'S');var XT=m4('org.eclipse.elk.core.labels','ILabelManager');var UX=m4(FTd,'DiagnosticChain');var x_=m4(XVd,'ResourceSet');var _X=k4(FTd,'InvocationTargetException',null);var eJd=(kw(),nw);var gwtOnLoad=gwtOnLoad=$2;Y2(h3);_2('permProps',[[[lXd,mXd],[nXd,'gecko1_8']],[[lXd,mXd],[nXd,'ie10']],[[lXd,mXd],[nXd,'ie8']],[[lXd,mXd],[nXd,'ie9']],[[lXd,mXd],[nXd,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('webworker-threads'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var _require = require('webworker-threads'), + Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } else { + console.warn('Web worker requested but \'webworker-threads\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version. '); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require2 = require('./elk-worker.min.js'), + _Worker = _require2.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"webworker-threads":8}],4:[function(require,module,exports){ +(function (process,__filename){ + +/** + * Module dependencies. + */ + +var fs = require('fs') + , path = require('path') + , join = path.join + , dirname = path.dirname + , exists = ((fs.accessSync && function (path) { try { fs.accessSync(path); } catch (e) { return false; } return true; }) + || fs.existsSync || path.existsSync) + , defaults = { + arrow: process.env.NODE_BINDINGS_ARROW || ' → ' + , compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled' + , platform: process.platform + , arch: process.arch + , version: process.versions.node + , bindings: 'bindings.node' + , try: [ + // node-gyp's linked version in the "build" dir + [ 'module_root', 'build', 'bindings' ] + // node-waf and gyp_addon (a.k.a node-gyp) + , [ 'module_root', 'build', 'Debug', 'bindings' ] + , [ 'module_root', 'build', 'Release', 'bindings' ] + // Debug files, for development (legacy behavior, remove for node v0.9) + , [ 'module_root', 'out', 'Debug', 'bindings' ] + , [ 'module_root', 'Debug', 'bindings' ] + // Release files, but manually compiled (legacy behavior, remove for node v0.9) + , [ 'module_root', 'out', 'Release', 'bindings' ] + , [ 'module_root', 'Release', 'bindings' ] + // Legacy from node-waf, node <= 0.4.x + , [ 'module_root', 'build', 'default', 'bindings' ] + // Production "Release" buildtype binary (meh...) + , [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ] + ] + } + +/** + * The main `bindings()` function loads the compiled bindings for a given module. + * It uses V8's Error API to determine the parent filename that this function is + * being invoked from, which is then used to find the root directory. + */ + +function bindings (opts) { + + // Argument surgery + if (typeof opts == 'string') { + opts = { bindings: opts } + } else if (!opts) { + opts = {} + } + + // maps `defaults` onto `opts` object + Object.keys(defaults).map(function(i) { + if (!(i in opts)) opts[i] = defaults[i]; + }); + + // Get the module root + if (!opts.module_root) { + opts.module_root = exports.getRoot(exports.getFileName()) + } + + // Ensure the given bindings name ends with .node + if (path.extname(opts.bindings) != '.node') { + opts.bindings += '.node' + } + + var tries = [] + , i = 0 + , l = opts.try.length + , n + , b + , err + + for (; i 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":7}],7:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],8:[function(require,module,exports){ +var WebWorkerThreads = require('bindings')('WebWorkerThreads'); + +module.exports = WebWorkerThreads; + +},{"bindings":4}]},{},[3])(3) +}); \ No newline at end of file diff --git a/resources/public/full.render.js b/resources/public/full.render.js new file mode 100644 index 0000000..ced6626 --- /dev/null +++ b/resources/public/full.render.js @@ -0,0 +1,90 @@ +/* +Viz.js 2.1.2 (Graphviz 2.40.1, Expat 2.2.5, Emscripten 1.37.36) +*/ +(function(global) { +var Module = function(Module) { + Module = Module || {}; +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var PAGE_SIZE=16384;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[(function($0,$1){var path=Pointer_stringify($0);var data=Pointer_stringify($1);FS.createPath("/",PATH.dirname(path));FS.writeFile(PATH.join("/",path),data)})];function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+194160;__ATINIT__.push();memoryInitializer="data:application/octet-stream;base64,AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkACEAAAAAAAAAAAAAAAABBAoC8AAAgAAAABAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICWQAAAAAAAgJZABJDDAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUkAAAAAAAABSQAAgAwIAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAABCQAAAAAAAAEJAAAAAAAAgg0AAAAAAAMCIQAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAAEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQACwwQAAAAAAAAAAAAAAEEBANgAAkwAAAAEAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAEAACAAAAAAAAAAAAABBAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAALDBAAAAAAAAAAAAAAAAABw6AAAQAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQEAgPgMAAAAAAAAAAAAAEEAkOwAAegAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJA////////73/////////vf////////+//////////7/8AAAAAAAD4PzMzMzMzM9M/PAAAAAAAAACamZmZmZmpPwEAAAAAAAAAAQAAAAAAAAAAAAAAAADwPwEAAAAAAAAAAgAAAAAAAAAAAAAAAADwPwIAAAAAAAAAAwAAAAAAAAAAAAAAAADgPwMAAAAAAAAABAAAAAAAAAAAAAAAAADwPwQAAAAAAAAABQAAAAAAAAAzMzMzMzPzPwUAAAAAAAAABgAAAAAAAACamZmZmZnpPwYAAAAAAAAABwAAAAAAAAAAAAAAAADwPwcAAAAAAAAACAAAAAAAAAAAAAAAAADgPwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAMzMzMzMz078AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzPjPwAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAEAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQVQAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAgGZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgGZAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAgGZAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAAAAQAAAAAAAAAAAAAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP1ioNc07TtU/JXUCmggb2j8AAAAAAADgPwAAAAAAAOA/LNSa5h2n6j9q3nGKjuToP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAOA/XdxGA3gL4j8AAAAAAADQP1ioNc07TtU/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T/TvOMUHcnRP13cRgN4C+I/XdxGA3gL4j9d3EYDeAviPw1xrIvbaNw/ZF3cRgN47T/Sb18HzhnnPxB6Nqs+V+U/EHo2qz5X5T/Sb18HzhnnP3gLJCh+jOM/tRX7y+7J4T/Sb18HzhnnP9JvXwfOGec/WKg1zTtO1T+IhVrTvOPYP9JvXwfOGec/eAskKH6M4z/EQq1p3nHsP9JvXwfOGec/0m9fB84Z5z+1FfvL7snhP9JvXwfOGec/EHo2qz5X5T+1FfvL7snhP3gLJCh+jOM/0m9fB84Z5z/Sb18HzhnnP4Y41sVtNO4/0m9fB84Z5z/Sb18HzhnnP3gLJCh+jOM/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/pgpGJXUC3j8AAAAAAADgP1ioNc07TtU/DXGsi9to3D8AAAAAAADgPw1xrIvbaNw/AAAAAAAA4D8NcayL22jcP1ioNc07TtU/AAAAAAAA4D8AAAAAAADgP9O84xQdydE/07zjFB3J0T8AAAAAAADgP9O84xQdydE/at5xio7k6D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgP1ioNc07TtU/iIVa07zj2D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA4D8NcayL22jcP/RsVn2utt4/ETY8vVKWyT/0bFZ9rrbePzsBTYQNT+E/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D9YqDXNO07VPwAAAAAAAOA/AAAAAAAA4D8+6Nms+lzFPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/gnNGlPYGxz8NcayL22jcPwAAAAAAAOA/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADQPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8H8BZIUPzcP6K0N/jCZNY/WKg1zTtO1T8NcayL22jcPw1xrIvbaNw/AAAAAAAA4D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA0D8NcayL22jcPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA8D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP8RCrWnecew/AAAAAAAA0D9/2T15WKjRPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/eAskKH6M4z/Sb18HzhnnP8RCrWnecew/E/JBz2bV0z8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/EHo2qz5X5T8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP/RsVn2uttY/tRX7y+7J4T+1FfvL7snhP8RCrWnecew/EHo2qz5X5T/129eBc0bMP1ioNc07TtU/WKg1zTtO1T+IhVrTvOPYPwFNhA1Pr+I/07zjFB3J0T9YqDXNO07VP9O84xQdydE/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/07zjFB3J0T8BTYQNT6/iPwFNhA1Pr+I/AU2EDU+v4j+1FfvL7snhP8xdS8gHPfA/EHo2qz5X5T8QejarPlflP9JvXwfOGec/0m9fB84Z5z8QejarPlflP3gLJCh+jOM/at5xio7k6D/Sb18HzhnnP9O84xQdydE/AAAAAAAA4D8QejarPlflP7UV+8vuyeE/LNSa5h2n6j/Sb18HzhnnP2recYqO5Og/EHo2qz5X5T9q3nGKjuToP9JvXwfOGec/EHo2qz5X5T94CyQofozjP9JvXwfOGec/EHo2qz5X5T+GONbFbTTuPxB6Nqs+V+U/EHo2qz5X5T94CyQofozjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP6YKRiV1At4/tRX7y+7J4T9Iv30dOGfMP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADgP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T9Iv30dOGfMP0i/fR04Z8w/AAAAAAAA4D9Iv30dOGfMPyzUmuYdp+o/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T9YqDXNO07VPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8Cmggbnl7VP+C+DpwzotA/ApoIG55e1T8BTYQNT6/iP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/WKg1zTtO1T+1FfvL7snhP7UV+8vuyeE/PujZrPpcxT+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhPx04Z0Rpb8g/WKg1zTtO1T+1FfvL7snhP1ioNc07TtU/WKg1zTtO1T8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP9O84xQdydE/5x2n6Egu4T+itDf4wmTWP0i/fR04Z8w/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/AAAAAAAA8D8AAAAAAADwP9O84xQdydE/eAskKH6M4z/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAPA/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T8AAAAAAADwP9O84xQdydE/6pWyDHGs1z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP7UV+8vuyeE/at5xio7k6D8AAAAAAADwP5jdk4eFWtc/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP8RCrWnecew/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/SL99HThnzD94CyQofozjP4Y41sVtNO4/eAskKH6M4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP1GgT+RJ0g5AtMh2vp86NcA6It+l1CXVv/OCPkeaLoo/n+V5cHfW+b9+/RAbLJzmP5bs2AjE68w/zc6idyrg0D+w479AECDtv62h1F5E29g/O6F85lGWdj/TbnD5eoR7P4HMzqJ3KuS/0a3X9KCgyD9q3zcZsD+EP77KkBle/4Q/HJYGflTDxL+lSSno9uIjQKnZA63AkME/CMSQQZNpiT/6RJ4kXTPQvwHwmTYtwl4/DZx9L8+Ulz+JtfgUAOOJP+WpWEY0y7G/jwDJz6Fnpr9ctcb7zLSIP02kj1Q6s5A/5scEoWHWoL/HaWccE/eCvyp/a+UtcFy/5FdiVAiadT/R8YdVcgS3P5XUCWgiPDPAZCMQr+t3EMCnIarwZ3jHP9r/AGvVrsE/TihEwCFU97+qSIWxhSD1P51oVyHlJ/Y/TS7GwDqOzT9Zayi1F9HcvwM/qmG/J8w/pkdTPZl/2j+2gTtQpzyuP1FM3gAz37m/9XaV/9oLpj/UpTW8D/aUPx+tILws3JA/KCzxgLLJI0AjWuFMAoq3P0ijZVGWKX8/u7SG98Gekz8XqHtTR32gvyErruBtlIs/M3PchNYetb+geISJ9fyPP2k1JO6x9JG/uM0zel6/aj+SPq2iPzTNv36w58ZPPpi/ByObUC3HpD8+GMJ7WLmRvy18fa1LjcY/AAAAQPsh+T8AAAAALUR0PgAAAICYRvg8AAAAYFHMeDsAAACAgxvwOQAAAEAgJXo4AAAAgCKC4zYAAAAAHfNpNQAAAAAAAPC/VAQBAOgqAAADAAAAEC0AAAMAAADoLwAAAwAAALAwAAADAAAAADIAAAMAAAB4NQAAAwAAALQ4AAADAAAAxC4AAAMAAAB8OQAAAwAAAIQ6AAADAAAAED8AAAMAAAA0PQAAAAAAANQsAAAAAAAAwC8AAAAAAAAQMAAAAAAAANgxAAAAAAAAKDIAAAAAAACMOAAAAAAAAGAuAAAAAAAAVDkAAAAAAABcOgAAAAAAAOg+AAAAAAAADD0AAAQAAAA4PwAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAzQIAEM0CACDNAgAwzQIAQM0CAFDNAgBgzQIAcM0CABDNAgAQzQIAUM0CAFDNAgAfAAAAPwAAAH8AAAAAAAAA0HkBAAEAAACoKwAAaAAAAAQAAABtCAEAAQAAACAsAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUBAAEAAAAAAAAA4AAAAAAAAAAQBQEAAQAAAAAAAADgAAAAAQAAABcFAQABAAAAAAAAAKgAAAACAAAAIQUBAAEAAAAAAAAA4AAAAAMAAAArBQEAAQAAAAAAAADgAAAABAAAADkFAQABAAAAAAAAAOAAAAAFAAAAQwUBAAEAAAAAAAAA4AAAAAYAAABQBQEAAQAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcggBAAEAAADELQAAGAEAAAEAAAB3CAEAAQAAAMQtAAAYAQAAAgAAAH0IAQABAAAAxC0AABgBAAADAAAAhggBAAEAAADELQAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAIAQABAAAAAAAAAHABAAABAAAAmggBAAEAAAAAAAAAcAEAAAIAAAClCAEAAQAAAAAAAAA4AQAAAwAAALMIAQABAAAAAAAAADgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAwAAAANAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAYAAAACAAAAAgAAAAcAAAACAAAAAAAAAFgMAgBd9QEA7vYBAC79AQAlBAIAZAgCAOQLAgD1CwIAAAAAAPoIAQABAAAAKC8AAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+CAEAAQAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgkBAAEAAAA4MAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAD4KAQABAAAAAAAAACACAAACAAAASAoBAAEAAAAAAAAAWAIAAAAAAABRCgEAAQAAAAAAAABYAgAAAwAAAFoKAQABAAAAAAAAAFgCAAAAAAAAZAoBAAEAAAAAAAAAIAIAAAMAAABwCgEAAQAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAFgAAABcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAAAAJAAAAAwAAAAMAAAAKAAAABAAAAAAAAABYDAIAXfUBAC79AQDu9gEAZAgCACUEAgD1CwIA5AsCAAAAAAAAAAAALQwBAP////88MQAAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMAQD/////AAAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWgQEAAQAAAFAyAADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGQAAABoAAAAAAAAABAAAAAAAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAIQAAACIAAAACAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAMAAAABQAAAAQAAAANAAAABQAAAAMAAAAtEAEAOxABAFEQAQDr7QIAXxABAG4QAQBzEAEAkRABAOvtAgCjEAEA0xABAOvtAgDxEAEAGREBACcRAQBWEQEAihEBAJsRAQDAEQEA4xEBAOkRAQAFEgEAIhIBAD0SAQBeEgEAeBIBAJoSAQC5EgEA3xIBAPcSAQAXEwEANBMBAFgTAQBkEwEA6+0CAG8TAQCVEwEAuRMBAN8TAQDr7QIAFRQBAC0UAQA6FAEAaRQBAGQTAQDr7QIAdhQBAH8UAQCgFAEA2xQBACYVAQB6FQEAnBUBALEVAQDIFQEA3hUBAPYVAQDr7QIADBYBACcWAQBLFgEAbxYBAJQWAQDr7QIAtRYBAM8WAQDhFgEA7hYBAPsWAQAPFwEAHhcBACYXAQA7FwEASRcBAIcXAQCSFwEAZBMBAOvtAgCYFwEApBcBALMXAQDjEQEA6+0CAMYXAQDvFwEADRgBAB0YAQAuGAEANRgBAEQYAQBUGAEAmBgBAJ8YAQDjEQEA6+0CAKkYAQDVGAEA4BgBAOkYAQDyGAEAAxkBABQZAQAoGQEAZBMBAOvtAgA0GQEARBkBAFIZAQBgGQEAbRkBAHoZAQCQGQEAmRkBAKgZAQC1GQEAxhkBAGQTAQDr7QIA0RkBAPAZAQDr7QIAAhoBABEaAQBBGgEASxoBAFgaAQBlGgEAchoBAH8aAQCCGgEA6+0CAIYaAQDr7QIAqRoBANoaAQAJGwEAIBsBADsbAQBWGwEAZBMBAOvtAgByGwEA6+0CAJobAQCmGwEAuRsBAMwbAQDhGwEA9hsBAPobAQDjEQEA6+0CAAYcAQDr7QIAFhwBACQcAQAwHAEAPRwBAF0cAQBzHAEA6+0CAIccAQDQHAEAFh0BAEYdAQB5HQEAgB0BAKcdAQDOHQEA6+0CANMdAQAAAAAAAAAAAJFHAQABAAAAAAAAAAgDAAABAAAARx4BAAEAAAAAAAAACAMAAAIAAACKRwEAAQAAAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAACQAAAAlAAAABgAAACYAAAAnAAAAKAAAACkAAAAqAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAEAAAALwAAAAAAAAAAAAAADgAAAAAAAAAPAAAABwAAAAUAAAAQAAAABgAAAAAAAAB19AEAf/QBABExAQDE9AEA//QBACH1AQAn9QEAWAwCAE71AQBd9QEAevUBAIX1AQCn9QEA3fUBABP2AQBO9gEAhPYBAKb2AQC19gEA5vYBAO72AQDXJAEA4CQBAAv3AQDpJAEAVfcBAPIkAQBf9wEA+yQBAGn3AQC49wEA8/cBAAclAQAu+AEAOfgBAH74AQCM+AEA1vgBAOT4AQDy+AEA/fgBAC75AQBu+QEAdvkBAH75AQC5+QEA7/kBAPv5AQAWMQEAB/oBABH6AQAc+gEAOfoBAG/6AQAu/QEAUP0BAFz9AQAbAAIATAACAHgAAgCuAAIAuwACAN0AAgD/AAIACAECAFIBAgBcAQIAoQECANcBAgDiAQIAZwICAHwCAgAPJQEAhgICAJACAgDGAgIABgMCABQDAgBoAwIAdwMCAIYDAgDVAwIAHjEBABUEAgAfBAIAJQQCAFEEAgB4BAIAiQQCAJQEAgDZBAIAHgUCAC0FAgA9BQIATwUCAF8FAgBvBQIAfAUCAIYFAgC8BQIAxQUCAAUGAgAYBgIAIzEBACAGAgBWBgIAfQYCALMGAgDaBgIA6AYCAB4HAgBoBwIAsgcCAL0HAgDzBwIA+AcCABUIAgAyCAIAPQgCAGQIAgB8CAIAsggCAOgIAgD0CAIAGwkCACYJAgBXCQIAiAkCABA8AQCvCQIA2wkCABEKAgBHCgIAUQoCAG4KAgCuCgIA5AoCACkxAQD8CgIAKAsCAE8LAgCFCwIAwgsCAOQLAgDqCwIA9QsCABwMAgAAAAAA2YEBAAEAAADINQAAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhIAQABAAAAAAAAAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAIAAAABgAAABMAAAAHAAAAAAAAAAAAAABFJgEAAQAAANw4AADQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASCYBAAEAAAAAAAAA8AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAA1AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADcAAAAAAAAAAAAAABQAAAAAAAAAFQAAAAkAAAAHAAAAFgAAAAgAAAAAAAAAETEBAFgMAgBd9QEAFjEBAG/6AQAu/QEAHjEBAFEEAgAFBgIAIzEBAD0IAgBkCAIAEDwBACkxAQDkCwIA9QsCAAAAAAAuMQEAAQAAAKQ5AAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjEBAAEAAAAAAAAASAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAA5AAAAOgAAAAoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQQAAAEIAAABDAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAGAAAAAsAAAAIAAAAGQAAAAkAAAAAAAAAxPQBAKY6AQBYDAIAXfUBAHr1AQCxOgEAtzoBAMI6AQDJOgEAhfUBAN31AQDROgEA1zoBAOI6AQCE9gEApvYBAO72AQDpOgEAVfcBAGn3AQDz9wEA8zoBAH74AQCM+AEA1vgBAP46AQDk+AEABjsBAA87AQAdOwEAJzsBALn5AQAwOwEA+/kBABz6AQA5+gEANjsBAID6AQCr+gEA1PoBAPf6AQAg+wEAQ/sBAGz7AQCP+wEAuPsBANv7AQAE/AEAJ/wBAFD8AQBz/AEAnPwBAL/8AQDo/AEAC/0BAC79AQA9OwEAUP0BAEk7AQB4AAIA3QACAKEBAgBWOwEAhgMCAGM7AQAVBAIAJQQCAG07AQBRBAIAeAQCAIkEAgB8OwEAjjsBAJQEAgAeBQIALQUCAD0FAgBPBQIAXwUCAJ47AQCpOwEAtDsBAG8FAgAFBgIACgYCALk7AQDCOwEAyzsBANs7AQDiOwEAVgYCAH0GAgCzBgIA6AYCAPgHAgAVCAIA6jsBAGQIAgDxOwEA9AgCAPo7AQAmCQIAAjwBAIgJAgAQPAEArwkCANsJAgAXPAEAbgoCAK4KAgAhPAEA5AoCAPwKAgBPCwIAKzwBADk8AQCFCwIAjAsCAMILAgDkCwIA9QsCABwMAgAAAAAASzwBAAEAAACsOgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE88AQABAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEUAAAAAAAAAAAAAAEYAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABsAAAAMAAAACQAAABwAAAAKAAAAAAAAAEFCAADelQEAQUkAALiVAQBBUgAAi5UBAEFYAADzlQEAQiAAAC+YAQBCSQAAQJgBAENCAAB4lgEAQ08AAGaWAQBDWAAAhZYBAEggAACplgEASEIAALOWAQBISQAAP5cBAEhYAADClgEASGIAAPOWAQBIaQAAJpcBAEhyAADYlgEASHgAAAmXAQBJIAAAUZgBAEtCAAAKlgEAS0kAAFKWAQBLUgAAPpYBAEtYAAArlgEATkIAAFGXAQBOSQAAmJcBAE5SAACwlwEATlgAAHyXAQBQQQAAEZgBAFBCAADNlwEAUEkAAAGYAQBQWAAA7ZcBAFIgAAAImgEAUyAAACCYAQBaRAAAjpgBAAAAAAAAAAAAAQAAAAAAAAD+RgEA/////1w9AADYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkcBAP////8AAAAA+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAApHAQABAAAAIEMAAAAAAAAQAAAAEkcBAAEAAAAgQwAAAAAAABEAAAAaRwEAAQAAACBDAAAAAAAAEQAAACNHAQABAAAAIEMAAAAAAAARAAAAK0cBAAEAAAAgQwAAAAAAABMAAAAzRwEAAQAAACRDAAAAAAAAFAAAADtHAQABAAAAJEMAAAAAAAAVAAAAQ0cBAAEAAAAkQwAAAAAAABUAAABMRwEAAQAAACRDAAAAAAAAFQAAAFRHAQABAAAAJEMAAAAAAAAWAAAAXEcBAAEAAAAoQwAAAAAAABcAAABlRwEAAQAAAChDAAAAAAAAGAAAAG5HAQABAAAAKEMAAAAAAAAYAAAAeEcBAAEAAAAoQwAAAAAAABgAAACBRwEAAQAAAChDAAAAAAAAGQAAAIpHAQABAAAALEMAAAAAAAAZAAAAkUcBAAEAAAAsQwAAAAAAABoAAACXRwEAAQAAADBDAAAAAAAACgAAAKBHAQABAAAANEMAAAAAAAALAAAAqEcBAAEAAAA0QwAAAAAAAAwAAACwRwEAAQAAADRDAAAAAAAADAAAALlHAQABAAAANEMAAAAAAAAMAAAAwUcBAAEAAAA0QwAAAAAAAA4AAADJRwEAAQAAADRDAAAAAAAADgAAANBHAQABAAAANEMAAAAAAAANAAAA2EcBAAEAAAA0QwAAAAAAAAUAAADgRwEAAQAAADRDAAAAAAAABgAAAOhHAQABAAAANEMAAAAAAAAHAAAA8EcBAAEAAAA0QwAAAAAAAAcAAAD5RwEAAQAAADRDAAAAAAAABwAAAAFIAQABAAAANEMAAAAAAAAJAAAACUgBAAEAAAA0QwAAAAAAAAkAAAAQSAEAAQAAADRDAAAAAAAACAAAABhIAQABAAAANEMAAAAAAAAAAAAAIEgBAAEAAAA4QwAAAAAAAAEAAAApSAEAAQAAADhDAAAAAAAAAgAAADJIAQABAAAAOEMAAAAAAAACAAAAPEgBAAEAAAA4QwAAAAAAAAIAAABFSAEAAQAAADhDAAAAAAAABAAAAE5IAQABAAAAOEMAAAAAAAAEAAAAVkgBAAEAAAA4QwAAAAAAAAMAAABfSAEAAQAAADhDAAAAAAAAEgAAAGhIAQABAAAAIEMAAAAAAAAbAAAAcEgBAAEAAAA8QwAAAAAAABwAAAB4SAEAAQAAADxDAAAAAAAAHQAAAIBIAQABAAAAPEMAAAAAAAAdAAAAiUgBAAEAAAA8QwAAAAAAAB0AAACRSAEAAQAAADxDAAAAAAAAHgAAAJlIAQABAAAAQEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAARMAQBMQwAAAQAAAGhDAAAAAAAAAAAAAEgAAABJAAAAAQAAAAAAAADQeQEAAAAAAFxDAABkQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAQAAAAYAQAAMAEAALAAAAApVAEALlQBADJUAQA5VAEAPVQBAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAdAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAyWQEAKEQAAAEAAAB4RAAAAAAAAAAAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABLAAAAUwAAAEsAAABUAAAAVQAAAFYAAABXAAAAAAAAAD9ZAQAAAAAAOEQAACDPAgABAAAARVkBAAAAAABARAAAIM8CAAMAAABJWQEAAAAAAEhEAAAgzwIABAAAAE9ZAQAAAAAAUEQAACDPAgAFAAAAVVkBAAAAAABoRAAAIM8CAAYAAABfWQEAAAAAAHBEAAAgzwIABwAAAGVZAQAAAAAAWEQAACDPAgAHAAAAaVkBAAAAAABYRAAAIM8CAAcAAABuWQEAAAAAAGBEAAAgzwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAAAAAAABAAAAIAAAAAEAAAAAAAAAAAAAAAAAAAADAAAABAAAAAAAAAAAAAAA6+0CAAAAAAATBgIAAQAAAHRkAQAHAAAAOGQBAAMAAAC8GQIABQAAAHxkAQAPAAAAvoEBAAgAAAC+gQEAEAAAAIRkAQAEAAAAhGQBABEAAACJZAEABQAAAIlkAQACAAAAj2QBAAYAAACWZAEABAAAAKJkAQAHAAAAqmQBAAcAAAC6ZAEABQAAAMBkAQAIAAAA12QBAAgAAADAZAEACQAAAOBkAQAHAAAA6GQBAAoAAAACZQEABwAAAAplAQALAAAAJGUBAAYAAAArZQEADAAAAEllAQAJAAAAK2UBAA0AAABTZQEACAAAAFxlAQAOAAAAfWUBAAgAAACGZQEAEgAAAKdlAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAACAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAADAAAAIQAAAAQAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAEAAAAIgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAQAAAACBHAAAwRwAABgAAAAQAAAA8RwAABgAAAAgAAAAGAAAABAAAAERHAAAABAAACAAAAP////8AAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAIAAAAAAAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAACAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAACAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAACQAAAAAAAAAHAAAAAAAAAAkAAAALAAAACAAAAAoAAADISAAATEgAALBIAAABAAAAAQAAAAoAAAAWAAAACwAAAFgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAANAAAAAAAAAAcAAAAAAAAABwAAAAIAAAAFAAAACAAAAAAAAAAAAAAABgAAAAMAAAAOAAAACwAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA8AAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAABAAAAAAAAAABwAAAAAAAAAIAAAACAAAAAAAAAAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/////wAAAAAAAAAAJwAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAMAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAQAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABgAAAAEAAAABAAAABwAAAAgAAAAJAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAEAAAABAAAACwAAAAEAAAAMAAAAAQAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAATAAAAEwAAABMAAAATAAAAFwAAABgAAAAZAAAAEwAAABoAAAAbAAAAHAAAAB0AAAATAAAAEwAAABMAAAATAAAAEwAAAAEAAAAeAAAAAQAAAAEAAAATAAAAAQAAAB8AAAAgAAAAIQAAACIAAAAjAAAAEwAAACQAAAAlAAAAJgAAABMAAAATAAAAEwAAABMAAAAnAAAAKAAAACkAAAATAAAAKgAAACsAAAAsAAAALQAAABMAAAATAAAAEwAAABMAAAATAAAAAQAAAAEAAAABAAAAAQAAAAEAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAC4AAAATAAAAEwAAABMAAAAvAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAAwAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAAAAAAABAAAAAQAAAAIAAAADAAAAAQAAAAQAAAABAAAABQAAAAEAAAAGAAAABwAAAAcAAAABAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAMAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAACAAAAAb6cBAFCnAQAWcAEAfKcBAHSnAQCCpwEAAAAAABx0AQAldAEALHQBADp0AQBBdAEAmKcBAEh0AQBPdAEAAQAAAAgAAAD/////AAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAO11AQAIAAAAAwAAAPZ1AQD6dQEACwAAAAYAAADWgQEABnYBAAIAAAABAAAACXYBAA12AQAEAAAAAgAAABJ2AQAWdgEABAAAAAQAAAAbdgEAIHYBAAUAAAAFAAAAJnYBACp2AQAEAAAABwAAAC92AQAzdgEABQAAAAkAAAA5dgEAPXYBAAQAAAAKAAAAQnYBAEd2AQAEAAAADAAAAEx2AQAQewEAAAAAAAEAAAAYewEAAQAAAAAAAACjpgEAAQAAAAEAAAATBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAD5eQEAMQAAAAAAAAAAAAAA0aEBABAAAAA7EgIAgAAAAPJ5AQBAAAAAPJQBABAAAAD0eQEAQAAAAAAAAAAAAAAAwHkBAAEAAADHeQEAAgAAAMx5AQADAAAA+poBAAQAAABekQEABQAAANB5AQAGAAAAEwYCAAgAAADUeQEAIQAAANh5AQAiAAAA3HkBACIAAADgeQEAAQAAAOV5AQAHAAAA63kBACcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAArfwEAMn8BAAAAAADTgQEA1oEBANmBAQAAAAAAAAAAAAEAAAACAAAA/////5aBAQCcgQEAEwYCAAAAAABkAAAAZQAAAGYAAABkAAAACAAAAAgAAAAAAAAAAAAAACoAAAARAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACQAAACsAAAARAAAAAAAAAAAAAAAAAAAACAAAAP////8AAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAA+poBAPhUAACABgAAAAAAACeRAQD4VAAAsAYAAAAAAAAAmgEA+FQAAOAGAAAAAAAAL5EBAPhUAADgBgAAAAAAADSRAQD4VAAAEAcAAAAAAAA7kQEAEFUAABAHAAAAAAAAQZEBAPhUAABABwAAAAAAAEWRAQD4VAAAcAcAAAAAAAATBgIA+FQAAKAHAAAAAAAATpEBAPhUAACgBwAAAAAAAFiRAQD4VAAAUAYAAAAAAABekQEA+FQAANAHAAAAAAAAZpEBAPhUAAAACAAAAAAAAHCRAQD4VAAAMAgAAAAAAAB+kQEA+FQAAGAIAAAAAAAAhJEBAPhUAACQCAAAAAAAAI2RAQD4VAAAwAgAAAAAAACVkQEA+FQAAPAIAAAAAAAAnpEBAPhUAAAgCQAAAAAAAKaRAQD4VAAAUAkAAAAAAACrkQEA+FQAAIAJAAAAAAAAr5EBAPhUAACwCQAAAAAAALaRAQD4VAAA4AkAAAAAAAC8kQEA+FQAABAKAAAAAAAAxpEBAChVAABACgAAAAAAAM+RAQD4VAAAgAYAAAAAAADUkQEA+FQAAIAGAAAAAAAA3pEBAPhUAABwCgAAAAAAAOWRAQD4VAAAoAoAAAAAAADykQEA+FQAANAKAAAAAAAAAJIBAPhUAAAACwAAAAAAAA6SAQD4VAAAMAsAAAAAAAAakgEA+FQAAGALAAAAAAAAJ5IBAPhUAACQCwAAAAAAADCSAQD4VAAAwAsAAAAAAAA6kgEA+FQAAPALAAAAAAAAQ5IBAPhUAAAgDAAAAAAAAEuSAQD4VAAAUAwAAAAAAABTkgEA+FQAAIAMAAAAAAAAXJIBAPhUAACwDAAAAAAAAGCSAQD4VAAA4AwAAAAAAABrkgEA+FQAABANAAAAAAAAb5IBAPhUAABADQAAAAAAAHmSAQD4VAAAcA0AAAAAAACCkgEA+FQAAKANAAAAAAAAipIBAPhUAADQDQAAAAAAAJeSAQD4VAAAAA4AAAAAAACjkgEA+FQAADAOAAAAAAAArpIBAPhUAABgDgAAAAAAAL6SAQD4VAAAkA4AAAAAAADMkgEA+FQAAMAOAAAAAAAA25IBAPhUAADwDgAAAAAAAOWSAQD4VAAAIA8AAAAAAADukgEA+FQAAFAPAAAAAAAA+JIBAPhUAACADwAAAAAAAAKTAQD4VAAAsA8AAAAAAAAJkwEA+FQAAOAPAAAAAAAAEJMBAPhUAAAQEAAAAAAAABqTAQBAVQAAAAAAAAAAAAAhkwEAQFUAAAAAAAAAAAAAA5EBAFhVAAAAAAAAAAAAACmTAQBwVQAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAFoAAAAXAAAABAAAAAIAAAAMAAAAWwAAAFoAAAAXAAAABQAAAAAAAAANAAAAWQAAAFoAAAAXAAAABAAAAAIAAAAMAAAAXAAAAF0AAAAYAAAABgAAAAMAAAAOAAAAXgAAAF8AAAAXAAAABwAAAAAAAAAPAAAAWQAAAFoAAAAXAAAACAAAAAIAAAAMAAAAEAAAABEAAAASAAAAEwAAACuUAQAylAEAAAAAADqUAQA8lAEAdRICAD6UAQAMAAAABAAAAAYAAAACAAAAAwAAAAEAAAAJAAAACAAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAACLlQEAm5UBAKiVAQAAAAAAAAAAAAQAAACtlQEAAAAAAAAAAAC4lQEAm5UBAKiVAQAAAAAAz5UBAAUAAACtlQEAAAAAANeVAQDelQEAm5UBAO6VAQAAAAAAAAAAAAYAAACtlQEAGaYBAAAAAADzlQEAm5UBAO6VAQAAAAAAz5UBAAcAAACtlQEAGaYBANeVAQAKlgEAF5YBAO6VAQAAAAAAAAAAAAoAAAAllgEAGaYBAAAAAAArlgEAF5YBAO6VAQAAAAAA15UBAAsAAAAllgEAGaYBANeVAQA+lgEAF5YBAEyWAQAAAAAAAAAAAAgAAAAllgEAAAAAAAAAAABSlgEAF5YBAEyWAQAAAAAA15UBAAkAAAAllgEAAAAAANeVAQBmlgEAZpYBAAAAAAAAAAAAAAAAAAwAAABulgEAAAAAAAAAAAB4lgEAZpYBABmmAQAAAAAAAAAAAA4AAABulgEAGaYBAAAAAACFlgEAZpYBABmmAQAAAAAAz5UBAA8AAABulgEAGaYBANeVAQCZlgEAZpYBAAAAAAAAAAAAz5UBAA0AAABulgEAAAAAANeVAQCplgEAqZYBAAAAAAAAAAAAAAAAABAAAACtlQEAAAAAAAAAAACzlgEAqZYBABmmAQAAAAAAAAAAABIAAACtlQEAGaYBAAAAAADClgEAqZYBABmmAQAAAAAAz5UBABMAAACtlQEAGaYBANeVAQDYlgEAqZYBAAAAAADplgEAAAAAABQAAACtlQEAAAAAAAAAAADzlgEAqZYBABmmAQDplgEAAAAAABYAAACtlQEAGaYBAAAAAAAJlwEAqZYBABmmAQDplgEAz5UBABcAAACtlQEAGaYBANeVAQAmlwEAqZYBAAAAAADplgEAz5UBABUAAACtlQEAAAAAANeVAQA/lwEAqZYBAAAAAAAAAAAAz5UBABEAAACtlQEAAAAAANeVAQBRlwEAZ5cBABmmAQAAAAAAAAAAABoAAAAllgEAGaYBAAAAAAB8lwEAZ5cBABmmAQAAAAAA15UBABsAAAAllgEAGaYBANeVAQCYlwEAZ5cBAAAAAAAAAAAA15UBABkAAAAllgEAAAAAANeVAQCwlwEAZ5cBAMeXAQAAAAAAAAAAABgAAAAllgEAAAAAAAAAAADNlwEA25cBABmmAQAAAAAAAAAAAB4AAAAllgEAGaYBAAAAAADtlwEA25cBABmmAQAAAAAA15UBAB8AAAAllgEAGaYBANeVAQABmAEA25cBAAAAAAAAAAAA15UBAB0AAAAllgEAAAAAANeVAQARmAEA25cBAMeXAQAAAAAAAAAAABwAAAAllgEAAAAAAAAAAAAgmAEAIJgBAAAAAAAAAAAAAAAAACAAAAAnmAEAAAAAAAAAAAAvmAEAOpgBABmmAQAAAAAAAAAAAAIAAAAllgEAGaYBAAAAAABAmAEAOpgBABmmAQAAAAAA15UBAAMAAAAllgEAGaYBANeVAQBRmAEAOpgBAAAAAAAAAAAA15UBAAEAAAAllgEAAAAAANeVAQAImgEAOpgBAAAAAAAAAAAAAAAAAAAAAAAllgEAAAAAAAAAAABemAEAeJgBAIeYAQAAAAAA15UBACEAAAAllgEAAAAAANeVAQCOmAEAm5gBAAAAAAAAAAAAAAAAACIAAAAnmAEAAAAAAAAAAAAIAAAABAAAAAAAAAAKAAAALQAAABIAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAALgAAAAAAAAAAAAAAAAAAAAAAAAA3mwEAxgAAAD2bAQDBAAAARJsBAMIAAABKmwEAwAAAAFGbAQCRAwAAV5sBAMUAAABdmwEAwwAAAGSbAQDEAAAAaZsBAJIDAABumwEAxwAAAHWbAQCnAwAAeZsBACEgAACAmwEAlAMAAIabAQDQAAAAipsBAMkAAACRmwEAygAAAJebAQDIAAAAnpsBAJUDAACmmwEAlwMAAKqbAQDLAAAAr5sBAJMDAAC1mwEAzQAAALybAQDOAAAAwpsBAMwAAADJmwEAmQMAAM6bAQDPAAAA05sBAJoDAADZmwEAmwMAAOCbAQCcAwAA45sBANEAAADqmwEAnQMAAO2bAQBSAQAA85sBANMAAAD6mwEA1AAAAACcAQDSAAAAB5wBAKkDAAANnAEAnwMAABWcAQDYAAAAHJwBANUAAAAjnAEA1gAAACicAQCmAwAALJwBAKADAAAvnAEAMyAAADWcAQCoAwAAOZwBAKEDAAA9nAEAYAEAAEScAQCjAwAASpwBAN4AAABQnAEApAMAAFScAQCYAwAAWpwBANoAAABhnAEA2wAAAGecAQDZAAAAbpwBAKUDAAB2nAEA3AAAAHucAQCeAwAAfpwBAN0AAACFnAEAeAEAAIqcAQCWAwAAj5wBAOEAAACWnAEA4gAAAJycAQC0AAAAopwBAOYAAAConAEA4AAAAK+cAQA1IQAAt5wBALEDAAC9nAEAJgAAAMGcAQAnIgAAxZwBACAiAADJnAEA5QAAAM+cAQBIIgAA1ZwBAOMAAADcnAEA5AAAAOGcAQAeIAAA55wBALIDAADsnAEApgAAAPOcAQAiIAAA+JwBACkiAAD8nAEA5wAAAAOdAQC4AAAACZ0BAKIAAAAOnQEAxwMAABKdAQDGAgAAF50BAGMmAAAdnQEARSIAACKdAQCpAAAAJ50BALUhAAAtnQEAKiIAADGdAQCkAAAAOJ0BANMhAAA9nQEAICAAAESdAQCTIQAASZ0BALAAAABNnQEAtAMAAFOdAQBmJgAAWZ0BAPcAAABgnQEA6QAAAGedAQDqAAAAbZ0BAOgAAAB0nQEABSIAAHqdAQADIAAAf50BAAIgAACEnQEAtQMAAIydAQBhIgAAkp0BALcDAACWnQEA8AAAAJqdAQDrAAAAn50BAKwgAACknQEAAyIAAKqdAQCSAQAAr50BAAAiAAC2nQEAvQAAAL2dAQC8AAAAxJ0BAL4AAADLnQEARCAAANGdAQCzAwAA150BAGUiAADanQEAPgAAAN2dAQDUIQAA4p0BAJQhAADnnQEAZSYAAO6dAQAmIAAA9Z0BAO0AAAD8nQEA7gAAAAKeAQChAAAACJ4BAOwAAAAPngEAESEAABWeAQAeIgAAG54BACsiAAAfngEAuQMAACSeAQC/AAAAK54BAAgiAAAwngEA7wAAADWeAQC6AwAAO54BANAhAABAngEAuwMAAEeeAQApIwAATJ4BAKsAAABSngEAkCEAAFeeAQAIIwAAXZ4BABwgAABjngEAZCIAAGaeAQAKIwAAbZ4BABciAAB0ngEAyiUAAHieAQAOIAAAfJ4BADkgAACDngEAGCAAAImeAQA8AAAAjJ4BAK8AAACRngEAFCAAAJeeAQC1AAAAnZ4BALcAAAA8pwEAEiIAAKSeAQC8AwAAp54BAAciAACtngEAoAAAALKeAQATIAAAuJ4BAGAiAAC7ngEACyIAAL6eAQCsAAAAwp4BAAkiAADIngEAhCIAAM2eAQDxAAAA1J4BAL0DAADXngEA8wAAAN6eAQD0AAAA5J4BAFMBAADqngEA8gAAAPGeAQA+IAAA954BAMkDAAD9ngEAvwMAAAWfAQCVIgAAC58BACgiAAAOnwEAqgAAABOfAQC6AAAAGJ8BAPgAAAAfnwEA9QAAACafAQCXIgAALZ8BAPYAAAAynwEAtgAAADefAQACIgAAPJ8BADAgAABDnwEApSIAAEifAQDGAwAATJ8BAMADAABPnwEA1gMAAFOfAQCxAAAAWp8BAKMAAABgnwEAMiAAAGafAQAPIgAAa58BAB0iAABwnwEAyAMAAHSfAQAiAAAAeZ8BANIhAAB+nwEAGiIAAISfAQAqIwAAiZ8BALsAAACPnwEAkiEAAJSfAQAJIwAAmp8BAB0gAACgnwEAHCEAAKWfAQCuAAAAqZ8BAAsjAACwnwEAwQMAALSfAQAPIAAAuJ8BADogAAC/nwEAGSAAAMWfAQAaIAAAy58BAGEBAADSnwEAxSIAANefAQCnAAAA3J8BAK0AAADgnwEAwwMAAOafAQDCAwAA7Z8BADwiAADxnwEAYCYAAPifAQCCIgAA/J8BAIYiAAABoAEAESIAAAWgAQCDIgAACaABALkAAAAOoAEAsgAAABOgAQCzAAAAGKABAIciAAAdoAEA3wAAACOgAQDEAwAAJ6ABADQiAAAuoAEAuAMAADSgAQDRAwAAPaABAAkgAABEoAEA/gAAAEqgAQDcAgAAUKABANcAAABWoAEAIiEAAFygAQDRIQAAYaABAPoAAABooAEAkSEAAG2gAQD7AAAAc6ABAPkAAAB6oAEAqAAAAH6gAQDSAwAAhKABAMUDAACMoAEA/AAAAJGgAQAYIQAAmKABAL4DAACboAEA/QAAAKKgAQClAAAApqABAP8AAACroAEAtgMAALCgAQANIAAAtKABAAwgAAAHAAAACAAAAAEBAAAIAAAACAAAAAAAAAAAAAAALwAAABMAAAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAAAMAAAABQAAAAAAAAAAAAAAAAAAAD8pgEACQAAAP6mAQAKAAAAA6cBAAoAAAALpwEACwAAABGnAQALAAAAGqcBAAwAAAAdpwEADAAAACOnAQANAAAAKKcBAA0AAAAwpwEADgAAADWnAQAOAAAAPKcBAA8AAABCpwEADwAAAE6nAQAQAAAAYAAAADEAAAAyAAAAFAAAADMAAABhAAAANAAAABUAAAA1AAAACAAAAAQAAAD/////AAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAmagBAFVdyX/Jf/8ApKgBALst1L6u1P8Ar6gBABR3/f3Ahv8AuqgBAFVdyX/Jf/8AxagBALst1L6u1P8A0KgBABR3/f3Ahv8A26gBACpm////mf8A5qgBAFVdyX/Jf/8A8agBALst1L6u1P8A/KgBABR3/f3Ahv8AB6kBACpm////mf8AEqkBAJetsDhssP8AHakBAFVdyX/Jf/8AKKkBALst1L6u1P8AM6kBABR3/f3Ahv8APqkBACpm////mf8ASakBAJetsDhssP8AVKkBAOj88PACf/8AX6kBAFVdyX/Jf/8AaqkBALst1L6u1P8AdakBABR3/f3Ahv8AgKkBACpm////mf8Ai6kBAJetsDhssP8AlqkBAOj88PACf/8AoakBABHgv79bF/8ArKkBAFVdyX/Jf/8At6kBALst1L6u1P8AwqkBABR3/f3Ahv8AzakBACpm////mf8A2KkBAJetsDhssP8A46kBAOj88PACf/8A7qkBABHgv79bF/8A+akBAAAAZmZmZv8ABKoBAJMZ997r9/8ADqoBAI5L4Z7K4f8AGKoBAJG8vTGCvf8AIqoBAJ8Q/+/z//8ALKoBAI8u573X5/8ANqoBAI9/1muu1v8AQKoBAJPQtSFxtf8ASqoBAJ8Q/+/z//8AVKoBAI8u573X5/8AXqoBAI9/1muu1v8AaKoBAJG8vTGCvf8AcqoBAJXxnAhRnP8AfKoBAJ8Q/+/z//8AhqoBAJQr78bb7/8AkKoBAI5L4Z7K4f8AmqoBAI9/1muu1v8ApKoBAJG8vTGCvf8ArqoBAJXxnAhRnP8AuKoBAJ8Q/+/z//8AwqoBAJQr78bb7/8AzKoBAI5L4Z7K4f8A1qoBAI9/1muu1v8A4KoBAJCpxkKSxv8A6qoBAJPQtSFxtf8A9KoBAJfxlAhFlP8A/qoBAJQI//f7//8ACKsBAJMZ997r9/8AEqsBAJQr78bb7/8AHKsBAI5L4Z7K4f8AJqsBAI9/1muu1v8AMKsBAJCpxkKSxv8AOqsBAJPQtSFxtf8ARKsBAJfxlAhFlP8ATqsBAJQI//f7//8AWKsBAJMZ997r9/8AYqsBAJQr78bb7/8AbKsBAI5L4Z7K4f8AdqsBAI9/1muu1v8AgKsBAJCpxkKSxv8AiqsBAJPQtSFxtf8AlKsBAJXxnAhRnP8AnqsBAJjrawgwa/8AqKsBABfvVFQwBf8AsqsBAHf/PAA8MP8AvasBABfsjIxRCv8Ax6sBABjCv7+BLf8A0asBAB1w39/Cff8A26sBAB409vbow/8A5asBAHkm6sfq5f8A76sBAHhfzYDNwf8A+asBAHyllzWXj/8AA6wBAHz8ZgFmXv8ADawBABfvVFQwBf8AF6wBAHz8ZgFmXv8AIqwBAHf/PAA8MP8ALawBABfsjIxRCv8AN6wBABjCv7+BLf8AQawBAB1w39/Cff8AS6wBAB409vbow/8AVawBAAAA9fX19f8AX6wBAHkm6sfq5f8AaawBAHhfzYDNwf8Ac6wBAHyllzWXj/8AfawBAByH2NizZf8AhqwBAAAA9fX19f8Aj6wBAHt/tFq0rP8AmKwBABXXpqZhGv8AoawBAB1w39/Cff8AqqwBAHhfzYDNwf8As6wBAHn9hQGFcf8AvKwBABXXpqZhGv8AxawBAB1w39/Cff8AzqwBAAAA9fX19f8A16wBAHhfzYDNwf8A4KwBAHn9hQGFcf8A6awBABfsjIxRCv8A8qwBAByH2NizZf8A+6wBAB409vbow/8ABK0BAHkm6sfq5f8ADa0BAHt/tFq0rP8AFq0BAHz8ZgFmXv8AH60BABfsjIxRCv8AKK0BAByH2NizZf8AMa0BAB409vbow/8AOq0BAAAA9fX19f8AQ60BAHkm6sfq5f8ATK0BAHt/tFq0rP8AVa0BAHz8ZgFmXv8AXq0BABfsjIxRCv8AZ60BABjCv7+BLf8AcK0BAB1w39/Cff8Aea0BAB409vbow/8Agq0BAHkm6sfq5f8Ai60BAHhfzYDNwf8AlK0BAHyllzWXj/8Ana0BAHz8ZgFmXv8Apq0BABfsjIxRCv8Ar60BABjCv7+BLf8AuK0BAB1w39/Cff8Awa0BAB409vbow/8Ayq0BAAAA9fX19f8A060BAHkm6sfq5f8A3K0BAHhfzYDNwf8A5a0BAHyllzWXj/8A7q0BAHz8ZgFmXv8A960BAIcU+eX1+f8AAK4BAHVK2JnYyf8ACa4BAGe5oiyiX/8AEq4BAIgO++34+/8AG64BAH824rLi4v8AJK4BAHF4wmbCpP8ALa4BAGK+iyOLRf8ANq4BAIgO++34+/8AP64BAH824rLi4v8ASK4BAHF4wmbCpP8AUa4BAGe5oiyiX/8AWq4BAGb/bQBtLP8AY64BAIgO++34+/8AbK4BAHci7Mzs5v8Ada4BAHVK2JnYyf8Afq4BAHF4wmbCpP8Ah64BAGe5oiyiX/8AkK4BAGb/bQBtLP8Ama4BAIgO++34+/8Aoq4BAHci7Mzs5v8Aq64BAHVK2JnYyf8AtK4BAHF4wmbCpP8Ava4BAGmfrkGudv8Axq4BAGK+iyOLRf8Az64BAGb/WABYJP8A2K4BAIYG/ff8/f8A4a4BAIcU+eX1+f8A6q4BAHci7Mzs5v8A864BAHVK2JnYyf8A/K4BAHF4wmbCpP8ABa8BAGmfrkGudv8ADq8BAGK+iyOLRf8AF68BAGb/WABYJP8AIK8BAIYG/ff8/f8AKa8BAIcU+eX1+f8AMq8BAHci7Mzs5v8AO68BAHVK2JnYyf8ARK8BAHF4wmbCpP8ATa8BAGmfrkGudv8AVq8BAGK+iyOLRf8AX68BAGb/bQBtLP8AaK8BAGX/RABEG/8Aca8BAJAU9ODs9P8Aeq8BAJRG2p682v8Ag68BAMR7p4hWp/8AjK8BAIgO++34+/8Ala8BAJI147PN4/8Anq8BAKJKxoyWxv8Ap68BAMqVnYhBnf8AsK8BAIgO++34+/8Aua8BAJI147PN4/8Awq8BAKJKxoyWxv8Ay68BAMR7p4hWp/8A1K8BANbhgYEPfP8A3a8BAIgO++34+/8A5q8BAJQr5r/T5v8A768BAJRG2p682v8A+K8BAKJKxoyWxv8AAbABAMR7p4hWp/8ACrABANbhgYEPfP8AE7ABAIgO++34+/8AHLABAJQr5r/T5v8AJbABAJRG2p682v8ALrABAKJKxoyWxv8AN7ABAL5ksYxrsf8AQLABAMqVnYhBnf8ASbABANX8bm4Ba/8AUrABAIYG/ff8/f8AW7ABAJAU9ODs9P8AZLABAJQr5r/T5v8AbbABAJRG2p682v8AdrABAKJKxoyWxv8Af7ABAL5ksYxrsf8AiLABAMqVnYhBnf8AkbABANX8bm4Ba/8AmrABAIYG/ff8/f8Ao7ABAJAU9ODs9P8ArLABAJQr5r/T5v8AtbABAJRG2p682v8AvrABAKJKxoyWxv8Ax7ABAL5ksYxrsf8A0LABAMqVnYhBnf8A2bABANbhgYEPfP8A4rABANX/TU0AS/8A67ABAHLTnhued/8A9bABABL82dlfAv8A/7ABAK1fs3Vws/8ACbEBAHLTnhued/8AE7EBABL82dlfAv8AHbEBAK1fs3Vws/8AJ7EBAOnR5+cpiv8AMbEBAHLTnhued/8AO7EBABL82dlfAv8ARbEBAK1fs3Vws/8AT7EBAOnR5+cpiv8AWbEBAD7QpmamHv8AY7EBAHLTnhued/8AbbEBABL82dlfAv8Ad7EBAK1fs3Vws/8AgbEBAOnR5+cpiv8Ai7EBAD7QpmamHv8AlbEBAB/85uarAv8An7EBAHLTnhued/8AqbEBABL82dlfAv8As7EBAK1fs3Vws/8AvbEBAOnR5+cpiv8Ax7EBAD7QpmamHv8A0bEBAB/85uarAv8A27EBABvSpqZ2Hf8A5bEBAHLTnhued/8A77EBABL82dlfAv8A+bEBAK1fs3Vws/8AA7IBAOnR5+cpiv8ADbIBAD7QpmamHv8AF7IBAB/85uarAv8AIbIBABvSpqZ2Hf8AK7IBAAAAZmZmZv8ANbIBAEwZ8+Dz2/8APrIBAF893ajdtf8AR7IBAIyqykOiyv8AULIBAEER+fD56P8AWbIBAFcu5LrkvP8AYrIBAHtlzHvMxP8Aa7IBAI3FviuMvv8AdLIBAEER+fD56P8AfbIBAFcu5LrkvP8AhrIBAHtlzHvMxP8Aj7IBAIyqykOiyv8AmLIBAJHzrAhorP8AobIBAEER+fD56P8AqrIBAE0p68zrxf8As7IBAF893ajdtf8AvLIBAHtlzHvMxP8AxbIBAIyqykOiyv8AzrIBAJHzrAhorP8A17IBAEER+fD56P8A4LIBAE0p68zrxf8A6bIBAF893ajdtf8A8rIBAHtlzHvMxP8A+7IBAImg006z0/8ABLMBAI3FviuMvv8ADbMBAJPynghYnv8AFrMBADwM/Pf88P8AH7MBAEwZ8+Dz2/8AKLMBAE0p68zrxf8AMbMBAF893ajdtf8AOrMBAHtlzHvMxP8AQ7MBAImg006z0/8ATLMBAI3FviuMvv8AVbMBAJPynghYnv8AXrMBADwM/Pf88P8AZ7MBAEwZ8+Dz2/8AcLMBAE0p68zrxf8AebMBAF893ajdtf8AgrMBAHtlzHvMxP8Ai7MBAImg006z0/8AlLMBAI3FviuMvv8AnbMBAJHzrAhorP8AprMBAJbvgQhAgf8Ar7MBAEoV9eX14P8AurMBAFBI2aHZm/8AxbMBAGKyozGjVP8A0LMBAEkP+O346f8A27MBAE425Lrks/8A5rMBAFZoxHTEdv8A8bMBAGK+iyOLRf8A/LMBAEkP+O346f8AB7QBAE425Lrks/8AErQBAFZoxHTEdv8AHbQBAGKyozGjVP8AKLQBAGb/bQBtLP8AM7QBAEkP+O346f8APrQBAE0s6cfpwP8ASbQBAFBI2aHZm/8AVLQBAFZoxHTEdv8AX7QBAGKyozGjVP8AarQBAGb/bQBtLP8AdbQBAEkP+O346f8AgLQBAE0s6cfpwP8Ai7QBAFBI2aHZm/8AlrQBAFZoxHTEdv8AobQBAGCeq0GrXf8ArLQBAGK+iyOLRf8At7QBAGz/WgBaMv8AwrQBAEgH/Pf89f8AzbQBAEoV9eX14P8A2LQBAE0s6cfpwP8A47QBAFBI2aHZm/8A7rQBAFZoxHTEdv8A+bQBAGCeq0GrXf8ABLUBAGK+iyOLRf8AD7UBAGz/WgBaMv8AGrUBAEgH/Pf89f8AJbUBAEoV9eX14P8AMLUBAE0s6cfpwP8AO7UBAFBI2aHZm/8ARrUBAFZoxHTEdv8AUbUBAGCeq0GrXf8AXLUBAGK+iyOLRf8AZ7UBAGb/bQBtLP8AcrUBAGX/RABEG/8AfbUBAAAA8PDw8P8Ah7UBAAAAvb29vf8AkbUBAAAAY2NjY/8Am7UBAAAA9/f39/8ApbUBAAAAzMzMzP8Ar7UBAAAAlpaWlv8AubUBAAAAUlJSUv8Aw7UBAAAA9/f39/8AzbUBAAAAzMzMzP8A17UBAAAAlpaWlv8A4bUBAAAAY2NjY/8A67UBAAAAJSUlJf8A9bUBAAAA9/f39/8A/7UBAAAA2dnZ2f8ACbYBAAAAvb29vf8AE7YBAAAAlpaWlv8AHbYBAAAAY2NjY/8AJ7YBAAAAJSUlJf8AMbYBAAAA9/f39/8AO7YBAAAA2dnZ2f8ARbYBAAAAvb29vf8AT7YBAAAAlpaWlv8AWbYBAAAAc3Nzc/8AY7YBAAAAUlJSUv8AbbYBAAAAJSUlJf8Ad7YBAAAA//////8AgbYBAAAA8PDw8P8Ai7YBAAAA2dnZ2f8AlbYBAAAAvb29vf8An7YBAAAAlpaWlv8AqbYBAAAAc3Nzc/8As7YBAAAAUlJSUv8AvbYBAAAAJSUlJf8Ax7YBAAAA//////8A0bYBAAAA8PDw8P8A27YBAAAA2dnZ2f8A5bYBAAAAvb29vf8A77YBAAAAlpaWlv8A+bYBAAAAc3Nzc/8AA7cBAAAAUlJSUv8ADbcBAAAAJSUlJf8AF7cBAAAAAAAAAP8AIbcBABUw/v7mzv8ALbcBABOT/f2ua/8AObcBAA7w5uZVDf8ARbcBABMg/v7t3v8AUbcBABR4/f2+hf8AXbcBABHC/f2NPP8AabcBAA392dlHAf8AdbcBABMg/v7t3v8AgbcBABR4/f2+hf8AjbcBABHC/f2NPP8AmbcBAA7w5uZVDf8ApbcBAA36pqY2A/8AsbcBABMg/v7t3v8AvbcBABVb/f3Qov8AybcBABOT/f2ua/8A1bcBABHC/f2NPP8A4bcBAA7w5uZVDf8A7bcBAA36pqY2A/8A+bcBABMg/v7t3v8ABbgBABVb/f3Qov8AEbgBABOT/f2ua/8AHbgBABHC/f2NPP8AKbgBABDq8fFpE/8ANbgBAA392dlIAf8AQbgBAAz3jIwtBP8ATbgBABUU///16/8AWbgBABUw/v7mzv8AZbgBABVb/f3Qov8AcbgBABOT/f2ua/8AfbgBABHC/f2NPP8AibgBABDq8fFpE/8AlbgBAA392dlIAf8AobgBAAz3jIwtBP8ArbgBABUU///16/8AubgBABUw/v7mzv8AxbgBABVb/f3Qov8A0bgBABOT/f2ua/8A3bgBABHC/f2NPP8A6bgBABDq8fFpE/8A9bgBAA392dlIAf8AAbkBAA36pqY2A/8ADbkBAAz2f38nBP8AGbkBABk2/v7oyP8AIrkBABN5/f27hP8AK7kBAAXF4+NKM/8ANLkBABol/v7w2f8APbkBABhz/f3Miv8ARrkBAA2k/PyNWf8AT7kBAAPa19cwH/8AWLkBABol/v7w2f8AYbkBABhz/f3Miv8AarkBAA2k/PyNWf8Ac7kBAAXF4+NKM/8AfLkBAAD/s7MAAP8AhbkBABol/v7w2f8AjrkBABhf/f3Unv8Al7kBABN5/f27hP8AoLkBAA2k/PyNWf8AqbkBAAXF4+NKM/8AsrkBAAD/s7MAAP8Au7kBABol/v7w2f8AxLkBABhf/f3Unv8AzbkBABN5/f27hP8A1rkBAA2k/PyNWf8A37kBAAey7+9lSP8A6LkBAAPa19cwH/8A8bkBAAD/mZkAAP8A+rkBABgS///37P8AA7oBABk2/v7oyP8ADLoBABhf/f3Unv8AFboBABN5/f27hP8AHroBAA2k/PyNWf8AJ7oBAAey7+9lSP8AMLoBAAPa19cwH/8AOboBAAD/mZkAAP8AQroBABgS///37P8AS7oBABk2/v7oyP8AVLoBABhf/f3Unv8AXboBABN5/f27hP8AZroBAA2k/PyNWf8Ab7oBAAey7+9lSP8AeLoBAAPa19cwH/8AgboBAAD/s7MAAP8AiroBAAD/f38AAP8Ak7oBAI5E46bO4/8An7oBAL6Zmmo9mv8ArLoBAJDTtB94tP8AuLoBAEFh37Lfiv8AxLoBAFK4oDOgLP8A0LoBAABj+/uamf8A3LoBAP7h4+MaHP8A6LoBABeP/f2/b/8A9LoBABX///9/AP8AALsBAMYq1sqy1v8ADLsBAI5E46bO4/8AGLsBAL6Zmmo9mv8AJbsBACpm////mf8AMrsBAJDTtB94tP8APrsBAEFh37Lfiv8ASrsBAFK4oDOgLP8AVrsBAABj+/uamf8AYrsBAP7h4+MaHP8AbrsBABeP/f2/b/8AersBABX///9/AP8AhrsBAMYq1sqy1v8AkrsBAI5E46bO4/8AnrsBAL6Zmmo9mv8Aq7sBACpm////mf8AuLsBAA/FsbFZKP8AxbsBAJDTtB94tP8A0bsBAEFh37Lfiv8A3bsBAFK4oDOgLP8A6bsBAABj+/uamf8A9bsBAP7h4+MaHP8AAbwBABeP/f2/b/8ADbwBABX///9/AP8AGbwBAMYq1sqy1v8AJbwBAI5E46bO4/8AMLwBAJDTtB94tP8AO7wBAEFh37Lfiv8ARrwBAI5E46bO4/8AUbwBAJDTtB94tP8AXLwBAEFh37Lfiv8AZ7wBAFK4oDOgLP8AcrwBAI5E46bO4/8AfbwBAJDTtB94tP8AiLwBAEFh37Lfiv8Ak7wBAFK4oDOgLP8AnrwBAABj+/uamf8AqbwBAI5E46bO4/8AtLwBAJDTtB94tP8Av7wBAEFh37Lfiv8AyrwBAFK4oDOgLP8A1bwBAABj+/uamf8A4LwBAP7h4+MaHP8A67wBAI5E46bO4/8A9rwBAJDTtB94tP8AAb0BAEFh37Lfiv8ADL0BAFK4oDOgLP8AF70BAABj+/uamf8AIr0BAP7h4+MaHP8ALb0BABeP/f2/b/8AOL0BAI5E46bO4/8AQ70BAJDTtB94tP8ATr0BAEFh37Lfiv8AWb0BAFK4oDOgLP8AZL0BAABj+/uamf8Ab70BAP7h4+MaHP8Aer0BABeP/f2/b/8Ahb0BABX///9/AP8AkL0BAI5E46bO4/8Am70BAJDTtB94tP8Apr0BAEFh37Lfiv8Asb0BAFK4oDOgLP8AvL0BAABj+/uamf8Ax70BAP7h4+MaHP8A0r0BABeP/f2/b/8A3b0BABX///9/AP8A6L0BAMYq1sqy1v8A870BAANO+/u0rv8A/70BAJI147PN4/8AC74BAE0p68zrxf8AF74BAANO+/u0rv8AI74BAJI147PN4/8AL74BAE0p68zrxf8AO74BAMob5N7L5P8AR74BAANO+/u0rv8AU74BAJI147PN4/8AX74BAE0p68zrxf8Aa74BAMob5N7L5P8Ad74BABhY/v7Zpv8Ag74BAANO+/u0rv8Aj74BAJI147PN4/8Am74BAE0p68zrxf8Ap74BAMob5N7L5P8As74BABhY/v7Zpv8Av74BACoy////zP8Ay74BAANO+/u0rv8A174BAJI147PN4/8A474BAE0p68zrxf8A774BAMob5N7L5P8A+74BABhY/v7Zpv8AB78BACoy////zP8AE78BABws5eXYvf8AH78BAANO+/u0rv8AK78BAJI147PN4/8AN78BAE0p68zrxf8AQ78BAMob5N7L5P8AT78BABhY/v7Zpv8AW78BACoy////zP8AZ78BABws5eXYvf8Ac78BAOkj/f3a7P8Af78BAANO+/u0rv8Ai78BAJI147PN4/8Al78BAE0p68zrxf8Ao78BAMob5N7L5P8Ar78BABhY/v7Zpv8Au78BACoy////zP8Ax78BABws5eXYvf8A078BAOkj/f3a7P8A378BAAAA8vLy8v8A678BAGw14rPizf8A978BABFR/f3NrP8AA8ABAJsf6MvV6P8AD8ABAGw14rPizf8AG8ABABFR/f3NrP8AJ8ABAJsf6MvV6P8AM8ABAOQr9PTK5P8AP8ABAGw14rPizf8AS8ABABFR/f3NrP8AV8ABAJsf6MvV6P8AY8ABAOQr9PTK5P8Ab8ABADgt9eb1yf8Ae8ABAGw14rPizf8Ah8ABABFR/f3NrP8Ak8ABAJsf6MvV6P8An8ABAOQr9PTK5P8Aq8ABADgt9eb1yf8At8ABACNR///yrv8Aw8ABAGw14rPizf8Az8ABABFR/f3NrP8A28ABAJsf6MvV6P8A58ABAOQr9PTK5P8A88ABADgt9eb1yf8A/8ABACNR///yrv8AC8EBABkn8fHizP8AF8EBAGw14rPizf8AI8EBABFR/f3NrP8AL8EBAJsf6MvV6P8AO8EBAOQr9PTK5P8AR8EBADgt9eb1yf8AU8EBACNR///yrv8AX8EBABkn8fHizP8Aa8EBAAAAzMzMzP8Ad8EBAOb9jo4BUv8AgcEBAE2/ZCdkGf8AjMEBAObcxcUbff8AlsEBAOh23t53rv8AoMEBAOU+8fG22v8AqsEBAOkd/f3g7/8AtMEBADsm9eb10P8AvsEBAD1n4bjhhv8AyMEBAD+mvH+8Qf8A0sEBAETFkk2SIf8A3MEBAOb9jo4BUv8A5sEBAETFkk2SIf8A8cEBAE2/ZCdkGf8A/MEBAObcxcUbff8ABsIBAOh23t53rv8AEMIBAOU+8fG22v8AGsIBAOkd/f3g7/8AJMIBAAAA9/f39/8ALsIBADsm9eb10P8AOMIBAD1n4bjhhv8AQsIBAD+mvH+8Qf8ATMIBAOdM6emjyf8AVcIBAAAA9/f39/8AXsIBAD+B16HXav8AZ8IBAOTc0NAci/8AcMIBAOU+8fG22v8AecIBAD1n4bjhhv8AgsIBAEjGrE2sJv8Ai8IBAOTc0NAci/8AlMIBAOU+8fG22v8AncIBAAAA9/f39/8ApsIBAD1n4bjhhv8Ar8IBAEjGrE2sJv8AuMIBAObcxcUbff8AwcIBAOdM6emjyf8AysIBAOkd/f3g7/8A08IBADsm9eb10P8A3MIBAD+B16HXav8A5cIBAETFkk2SIf8A7sIBAObcxcUbff8A98IBAOdM6emjyf8AAMMBAOkd/f3g7/8ACcMBAAAA9/f39/8AEsMBADsm9eb10P8AG8MBAD+B16HXav8AJMMBAETFkk2SIf8ALcMBAObcxcUbff8ANsMBAOh23t53rv8AP8MBAOU+8fG22v8ASMMBAOkd/f3g7/8AUcMBADsm9eb10P8AWsMBAD1n4bjhhv8AY8MBAD+mvH+8Qf8AbMMBAETFkk2SIf8AdcMBAObcxcUbff8AfsMBAOh23t53rv8Ah8MBAOU+8fG22v8AkMMBAOkd/f3g7/8AmcMBAAAA9/f39/8AosMBADsm9eb10P8Aq8MBAD1n4bjhhv8AtMMBAD+mvH+8Qf8AvcMBAETFkk2SIf8AxsMBAM7/S0AAS/8A0MMBAGX/RABEG/8A28MBAM6tg3Yqg/8A5cMBAMdXq5lwq/8A78MBAMczz8Klz/8A+cMBANIV6OfU6P8AA8QBAEwe8Nnw0/8ADcQBAFBE26bboP8AF8QBAFh7rlquYf8AIcQBAGHFeBt4N/8AK8QBAM7/S0AAS/8ANcQBAGHFeBt4N/8AQMQBAGX/RABEG/8AS8QBAM6tg3Yqg/8AVcQBAMdXq5lwq/8AX8QBAMczz8Klz/8AacQBANIV6OfU6P8Ac8QBAAAA9/f39/8AfcQBAEwe8Nnw0/8Ah8QBAFBE26bboP8AkcQBAFh7rlquYf8Am8QBAMRGw6+Nw/8ApMQBAAAA9/f39/8ArcQBAFJav3+/e/8AtsQBAMmolHsylP8Av8QBAMczz8Klz/8AyMQBAFBE26bboP8A0cQBAGb/iACIN/8A2sQBAMmolHsylP8A48QBAMczz8Klz/8A7MQBAAAA9/f39/8A9cQBAFBE26bboP8A/sQBAGb/iACIN/8AB8UBAM6tg3Yqg/8AEMUBAMRGw6+Nw/8AGcUBANIV6OfU6P8AIsUBAEwe8Nnw0/8AK8UBAFJav3+/e/8ANMUBAGHFeBt4N/8APcUBAM6tg3Yqg/8ARsUBAMRGw6+Nw/8AT8UBANIV6OfU6P8AWMUBAAAA9/f39/8AYcUBAEwe8Nnw0/8AasUBAFJav3+/e/8Ac8UBAGHFeBt4N/8AfMUBAM6tg3Yqg/8AhcUBAMdXq5lwq/8AjsUBAMczz8Klz/8Al8UBANIV6OfU6P8AoMUBAEwe8Nnw0/8AqcUBAFBE26bboP8AssUBAFh7rlquYf8Au8UBAGHFeBt4N/8AxMUBAM6tg3Yqg/8AzcUBAMdXq5lwq/8A1sUBAMczz8Klz/8A38UBANIV6OfU6P8A6MUBAAAA9/f39/8A8cUBAEwe8Nnw0/8A+sUBAFBE26bboP8AA8YBAFh7rlquYf8ADMYBAGHFeBt4N/8AFcYBAL0L8uzn8v8AHsYBAJc926a92/8AJ8YBAI3FviuMvv8AMMYBALkI9vHu9v8AOcYBAJso4b3J4f8AQsYBAJFwz3Spz/8AS8YBAI/3sAVwsP8AVMYBALkI9vHu9v8AXcYBAJso4b3J4f8AZsYBAJFwz3Spz/8Ab8YBAI3FviuMvv8AeMYBAI/3jQRajf8AgcYBALkI9vHu9v8AisYBAKgY5tDR5v8Ak8YBAJc926a92/8AnMYBAJFwz3Spz/8ApcYBAI3FviuMvv8ArsYBAI/3jQRajf8At8YBALkI9vHu9v8AwMYBAKgY5tDR5v8AycYBAJc926a92/8A0sYBAJFwz3Spz/8A28YBAI63wDaQwP8A5MYBAI/3sAVwsP8A7cYBAI/4ewNOe/8A9sYBAOkI///3+/8A/8YBAL0L8uzn8v8ACMcBAKgY5tDR5v8AEccBAJc926a92/8AGscBAJFwz3Spz/8AI8cBAI63wDaQwP8ALMcBAI/3sAVwsP8ANccBAI/4ewNOe/8APscBAOkI///3+/8AR8cBAL0L8uzn8v8AUMcBAKgY5tDR5v8AWccBAJc926a92/8AYscBAJFwz3Spz/8Aa8cBAI63wDaQwP8AdMcBAI/3sAVwsP8AfccBAI/3jQRajf8AhscBAI/5WAI4WP8Aj8cBAMgO8Ozi8P8AmscBAJc926a92/8ApccBAILQmRyQmf8AsMcBAM8I9/bv9/8Au8cBAJso4b3J4f8AxscBAI+Az2epz/8A0ccBAIL7igKBiv8A3McBAM8I9/bv9/8A58cBAJso4b3J4f8A8scBAI+Az2epz/8A/ccBAILQmRyQmf8ACMgBAHf8bAFsWf8AE8gBAM8I9/bv9/8AHsgBAKgY5tDR5v8AKcgBAJc926a92/8ANMgBAI+Az2epz/8AP8gBAILQmRyQmf8ASsgBAHf8bAFsWf8AVcgBAM8I9/bv9/8AYMgBAKgY5tDR5v8Aa8gBAJc926a92/8AdsgBAI+Az2epz/8AgcgBAI63wDaQwP8AjMgBAIL7igKBiv8Al8gBAHb8ZAFkUP8AosgBAOkI///3+/8ArcgBAMgO8Ozi8P8AuMgBAKgY5tDR5v8Aw8gBAJc926a92/8AzsgBAI+Az2epz/8A2cgBAI63wDaQwP8A5MgBAIL7igKBiv8A78gBAHb8ZAFkUP8A+sgBAOkI///3+/8ABckBAMgO8Ozi8P8AEMkBAKgY5tDR5v8AG8kBAJc926a92/8AJskBAI+Az2epz/8AMckBAI63wDaQwP8APMkBAIL7igKBiv8AR8kBAHf8bAFsWf8AUskBAHX7RgFGNv8AXckBABLuf387CP8AZ8kBAMP/Sy0AS/8AcskBABT2s7NYBv8AfMkBABbo4OCCFP8AhskBABeb/f24Y/8AkMkBABhI/v7gtv8AmskBAKUU69ja6/8ApMkBALEv0rKr0v8ArskBALNUrIBzrP8AuMkBAL21iFQniP8AwskBABLuf387CP8AzMkBAL21iFQniP8A18kBAMP/Sy0AS/8A4skBABT2s7NYBv8A7MkBABbo4OCCFP8A9skBABeb/f24Y/8AAMoBABhI/v7gtv8ACsoBAAAA9/f39/8AFMoBAKUU69ja6/8AHsoBALEv0rKr0v8AKMoBALNUrIBzrP8AMsoBABe78fGjQP8AO8oBAAAA9/f39/8ARMoBALJFw5mOw/8ATcoBABH95uZhAf8AVsoBABeb/f24Y/8AX8oBALEv0rKr0v8AaMoBALmbmV48mf8AccoBABH95uZhAf8AesoBABeb/f24Y/8Ag8oBAAAA9/f39/8AjMoBALEv0rKr0v8AlcoBALmbmV48mf8AnsoBABT2s7NYBv8Ap8oBABe78fGjQP8AsMoBABhI/v7gtv8AucoBAKUU69ja6/8AwsoBALJFw5mOw/8Ay8oBAL21iFQniP8A1MoBABT2s7NYBv8A3coBABe78fGjQP8A5soBABhI/v7gtv8A78oBAAAA9/f39/8A+MoBAKUU69ja6/8AAcsBALJFw5mOw/8ACssBAL21iFQniP8AE8sBABT2s7NYBv8AHMsBABbo4OCCFP8AJcsBABeb/f24Y/8ALssBABhI/v7gtv8AN8sBAKUU69ja6/8AQMsBALEv0rKr0v8AScsBALNUrIBzrP8AUssBAL21iFQniP8AW8sBABT2s7NYBv8AZMsBABbo4OCCFP8AbcsBABeb/f24Y/8AdssBABhI/v7gtv8Af8sBAAAA9/f39/8AiMsBAKUU69ja6/8AkcsBALEv0rKr0v8AmssBALNUrIBzrP8Ao8sBAL21iFQniP8ArMsBALwO7+fh7/8AtcsBANZDycmUx/8AvssBAOre3d0cd/8Ax8sBALkI9vHu9v8A0MsBANMp2Ne12P8A2csBAOSL399lsP8A4ssBAO/ozs4SVv8A68sBALkI9vHu9v8A9MsBANMp2Ne12P8A/csBAOSL399lsP8ABswBAOre3d0cd/8AD8wBAOz/mJgAQ/8AGMwBALkI9vHu9v8AIcwBAMwm2tS52v8AKswBANZDycmUx/8AM8wBAOSL399lsP8APMwBAOre3d0cd/8ARcwBAOz/mJgAQ/8ATswBALkI9vHu9v8AV8wBAMwm2tS52v8AYMwBANZDycmUx/8AacwBAOSL399lsP8AcswBAOnR5+cpiv8Ae8wBAO/ozs4SVv8AhMwBAOz/kZEAP/8AjcwBAMMF+ff0+f8AlswBALwO7+fh7/8An8wBAMwm2tS52v8AqMwBANZDycmUx/8AscwBAOSL399lsP8AuswBAOnR5+cpiv8Aw8wBAO/ozs4SVv8AzMwBAOz/kZEAP/8A1cwBAMMF+ff0+f8A3swBALwO7+fh7/8A58wBAMwm2tS52v8A8MwBANZDycmUx/8A+cwBAOSL399lsP8AAs0BAOnR5+cpiv8AC80BAO/ozs4SVv8AFM0BAOz/mJgAQ/8AHc0BAPL/Z2cAH/8AJs0BALQI9e/t9f8AMs0BAKgl3Ly93P8APs0BALBksXVrsf8ASs0BALYH9/Lw9/8AVs0BAK0c4svJ4v8AYs0BAK06yJ6ayP8Abs0BALaAo2pRo/8Aes0BALYH9/Lw9/8Ahs0BAK0c4svJ4v8Aks0BAK06yJ6ayP8Ans0BALBksXVrsf8Aqs0BALy5j1Qnj/8Ats0BALYH9/Lw9/8Aws0BAKoS69ra6/8Azs0BAKgl3Ly93P8A2s0BAK06yJ6ayP8A5s0BALBksXVrsf8A8s0BALy5j1Qnj/8A/s0BALYH9/Lw9/8ACs4BAKoS69ra6/8AFs4BAKgl3Ly93P8AIs4BAK06yJ6ayP8ALs4BAKxTuoB9uv8AOs4BALaAo2pRo/8ARs4BAL7YhkoUhv8AUs4BAL8C/fz7/f8AXs4BALQI9e/t9f8Aas4BAKoS69ra6/8Ads4BAKgl3Ly93P8Ags4BAK06yJ6ayP8Ajs4BAKxTuoB9uv8Ams4BALaAo2pRo/8Aps4BAL7YhkoUhv8Ass4BAL8C/fz7/f8Avs4BALQI9e/t9f8Ays4BAKoS69ra6/8A1s4BAKgl3Ly93P8A4s4BAK06yJ6ayP8A7s4BAKxTuoB9uv8A+s4BALaAo2pRo/8ABs8BALy5j1Qnj/8AEs8BAL//fT8Aff8AHs8BAPL/Z2cAH/8AKM8BAJbxYQUwYf8AM88BAPncsrIYK/8APc8BAAWj1tZgTf8AR88BAA139PSlgv8AUc8BAA82/f3bx/8AW88BAI4g8NHl8P8AZc8BAI1X3pLF3v8Ab88BAI+nw0OTw/8Aec8BAJTOrCFmrP8Ag88BAPL/Z2cAH/8Ajc8BAJTOrCFmrP8AmM8BAJbxYQUwYf8Ao88BAPncsrIYK/8Arc8BAAWj1tZgTf8At88BAA139PSlgv8Awc8BAA82/f3bx/8Ay88BAAAA9/f39/8A1c8BAI4g8NHl8P8A388BAI1X3pLF3v8A6c8BAI+nw0OTw/8A888BAAyW7++KYv8A/M8BAAAA9/f39/8ABdABAI+Az2epz/8ADtABAPj/ysoAIP8AF9ABAA139PSlgv8AINABAI1X3pLF3v8AKdABAI/3sAVxsP8AMtABAPj/ysoAIP8AO9ABAA139PSlgv8ARNABAAAA9/f39/8ATdABAI1X3pLF3v8AVtABAI/3sAVxsP8AX9ABAPncsrIYK/8AaNABAAyW7++KYv8AcdABAA82/f3bx/8AetABAI4g8NHl8P8Ag9ABAI+Az2epz/8AjNABAJTOrCFmrP8AldABAPncsrIYK/8AntABAAyW7++KYv8Ap9ABAA82/f3bx/8AsNABAAAA9/f39/8AudABAI4g8NHl8P8AwtABAI+Az2epz/8Ay9ABAJTOrCFmrP8A1NABAPncsrIYK/8A3dABAAWj1tZgTf8A5tABAA139PSlgv8A79ABAA82/f3bx/8A+NABAI4g8NHl8P8AAdEBAI1X3pLF3v8ACtEBAI+nw0OTw/8AE9EBAJTOrCFmrP8AHNEBAPncsrIYK/8AJdEBAAWj1tZgTf8ALtEBAA139PSlgv8AN9EBAA82/f3bx/8AQNEBAAAA9/f39/8ASdEBAI4g8NHl8P8AUtEBAI1X3pLF3v8AW9EBAI+nw0OTw/8AZNEBAJTOrCFmrP8AbdEBAPL/Z2cAH/8Ad9EBAAAAGhoaGv8AgtEBAPncsrIYK/8AjNEBAAWj1tZgTf8AltEBAA139PSlgv8AoNEBAA82/f3bx/8AqtEBAAAA4ODg4P8AtNEBAAAAurq6uv8AvtEBAAAAh4eHh/8AyNEBAAAATU1NTf8A0tEBAPL/Z2cAH/8A3NEBAAAATU1NTf8A59EBAAAAGhoaGv8A8tEBAPncsrIYK/8A/NEBAAWj1tZgTf8ABtIBAA139PSlgv8AENIBAA82/f3bx/8AGtIBAAAA//////8AJNIBAAAA4ODg4P8ALtIBAAAAurq6uv8AONIBAAAAh4eHh/8AQtIBAAyW7++KYv8AS9IBAAAA//////8AVNIBAAAAmZmZmf8AXdIBAPj/ysoAIP8AZtIBAA139PSlgv8Ab9IBAAAAurq6uv8AeNIBAAAAQEBAQP8AgdIBAPj/ysoAIP8AitIBAA139PSlgv8Ak9IBAAAA//////8AnNIBAAAAurq6uv8ApdIBAAAAQEBAQP8ArtIBAPncsrIYK/8At9IBAAyW7++KYv8AwNIBAA82/f3bx/8AydIBAAAA4ODg4P8A0tIBAAAAmZmZmf8A29IBAAAATU1NTf8A5NIBAPncsrIYK/8A7dIBAAyW7++KYv8A9tIBAA82/f3bx/8A/9IBAAAA//////8ACNMBAAAA4ODg4P8AEdMBAAAAmZmZmf8AGtMBAAAATU1NTf8AI9MBAPncsrIYK/8ALNMBAAWj1tZgTf8ANdMBAA139PSlgv8APtMBAA82/f3bx/8AR9MBAAAA4ODg4P8AUNMBAAAAurq6uv8AWdMBAAAAh4eHh/8AYtMBAAAATU1NTf8Aa9MBAPncsrIYK/8AdNMBAAWj1tZgTf8AfdMBAA139PSlgv8AhtMBAA82/f3bx/8Aj9MBAAAA//////8AmNMBAAAA4ODg4P8AodMBAAAAurq6uv8AqtMBAAAAh4eHh/8As9MBAAAATU1NTf8AvNMBAAMg/f3g3f8AxdMBAPRc+vqftf8AztMBAOPcxcUbiv8A19MBAA0c/v7r4v8A4NMBAPxI+/u0uf8A6dMBAO6T9/doof8A8tMBAOD9rq4Bfv8A+9MBAA0c/v7r4v8ABNQBAPxI+/u0uf8ADdQBAO6T9/doof8AFtQBAOPcxcUbiv8AH9QBANX8enoBd/8AKNQBAA0c/v7r4v8AMdQBAAM8/PzFwP8AOtQBAPRc+vqftf8AQ9QBAO6T9/doof8ATNQBAOPcxcUbiv8AVdQBANX8enoBd/8AXtQBAA0c/v7r4v8AZ9QBAAM8/PzFwP8AcNQBAPRc+vqftf8AedQBAO6T9/doof8AgtQBAObD3d00l/8Ai9QBAOD9rq4Bfv8AlNQBANX8enoBd/8AndQBAA4M///38/8AptQBAAMg/f3g3f8Ar9QBAAM8/PzFwP8AuNQBAPRc+vqftf8AwdQBAO6T9/doof8AytQBAObD3d00l/8A09QBAOD9rq4Bfv8A3NQBANX8enoBd/8A5dQBAA4M///38/8A7tQBAAMg/f3g3f8A99QBAAM8/PzFwP8AANUBAPRc+vqftf8ACdUBAO6T9/doof8AEtUBAObD3d00l/8AG9UBAOD9rq4Bfv8AJNUBANX8enoBd/8ALdUBAMf/akkAav8ANtUBAPX/paUAJv8AQtUBAKerlTE2lf8AT9UBAALQ19cwJ/8AW9UBAAq49PRtQ/8AZ9UBABSd/f2uYf8Ac9UBAB5u/v7gkP8Af9UBAIgY+ODz+P8Ai9UBAIpD6avZ6f8Al9UBAI9x0XSt0f8Ao9UBAJedtEV1tP8Ar9UBAPX/paUAJv8Au9UBAJedtEV1tP8AyNUBAKerlTE2lf8A1dUBAALQ19cwJ/8A4dUBAAq49PRtQ/8A7dUBABSd/f2uYf8A+dUBAB5u/v7gkP8ABdYBACpA////v/8AEdYBAIgY+ODz+P8AHdYBAIpD6avZ6f8AKdYBAI9x0XSt0f8ANdYBAA2k/PyNWf8AQNYBACpA////v/8AS9YBAI9W25G/2/8AVtYBAP7h19cZHP8AYdYBABSd/f2uYf8AbNYBAIpD6avZ6f8Ad9YBAJHBtix7tv8AgtYBAP7h19cZHP8AjdYBABSd/f2uYf8AmNYBACpA////v/8Ao9YBAIpD6avZ6f8ArtYBAJHBtix7tv8AudYBAALQ19cwJ/8AxNYBAA2k/PyNWf8Az9YBAB5u/v7gkP8A2tYBAIgY+ODz+P8A5dYBAI9W25G/2/8A8NYBAJedtEV1tP8A+9YBAALQ19cwJ/8ABtcBAA2k/PyNWf8AEdcBAB5u/v7gkP8AHNcBACpA////v/8AJ9cBAIgY+ODz+P8AMtcBAI9W25G/2/8APdcBAJedtEV1tP8ASNcBAALQ19cwJ/8AU9cBAAq49PRtQ/8AXtcBABSd/f2uYf8AadcBAB5u/v7gkP8AdNcBAIgY+ODz+P8Af9cBAIpD6avZ6f8AitcBAI9x0XSt0f8AldcBAJedtEV1tP8AoNcBAALQ19cwJ/8Aq9cBAAq49PRtQ/8AttcBABSd/f2uYf8AwdcBAB5u/v7gkP8AzNcBACpA////v/8A19cBAIgY+ODz+P8A4tcBAIpD6avZ6f8A7dcBAI9x0XSt0f8A+NcBAJedtEV1tP8AA9gBAPX/paUAJv8AD9gBAGv/aABoN/8AHNgBAALQ19cwJ/8AKNgBAAq49PRtQ/8ANNgBABSd/f2uYf8AQNgBAB9z/v7gi/8ATNgBADNq79nvi/8AWNgBAD6C2abZav8AZNgBAFN5vWa9Y/8AcNgBAGfTmBqYUP8AfNgBAPX/paUAJv8AiNgBAGfTmBqYUP8AldgBAGv/aABoN/8AotgBAALQ19cwJ/8ArtgBAAq49PRtQ/8AutgBABSd/f2uYf8AxtgBAB9z/v7gi/8A0tgBACpA////v/8A3tgBADNq79nvi/8A6tgBAD6C2abZav8A9tgBAFN5vWa9Y/8AAtkBAA2k/PyNWf8ADdkBACpA////v/8AGNkBAEKIz5HPYP8AI9kBAP7h19cZHP8ALtkBABSd/f2uYf8AOdkBAD6C2abZav8ARNkBAGLSlhqWQf8AT9kBAP7h19cZHP8AWtkBABSd/f2uYf8AZdkBACpA////v/8AcNkBAD6C2abZav8Ae9kBAGLSlhqWQf8AhtkBAALQ19cwJ/8AkdkBAA2k/PyNWf8AnNkBAB9z/v7gi/8Ap9kBADNq79nvi/8AstkBAEKIz5HPYP8AvdkBAGfTmBqYUP8AyNkBAALQ19cwJ/8A09kBAA2k/PyNWf8A3tkBAB9z/v7gi/8A6dkBACpA////v/8A9NkBADNq79nvi/8A/9kBAEKIz5HPYP8ACtoBAGfTmBqYUP8AFdoBAALQ19cwJ/8AINoBAAq49PRtQ/8AK9oBABSd/f2uYf8ANtoBAB9z/v7gi/8AQdoBADNq79nvi/8ATNoBAD6C2abZav8AV9oBAFN5vWa9Y/8AYtoBAGfTmBqYUP8AbdoBAALQ19cwJ/8AeNoBAAq49PRtQ/8Ag9oBABSd/f2uYf8AjtoBAB9z/v7gi/8AmdoBACpA////v/8ApNoBADNq79nvi/8Ar9oBAD6C2abZav8AutoBAFN5vWa9Y/8AxdoBAGfTmBqYUP8A0NoBAA0s/v7g0v8A2doBAAmL/PyScv8A4toBAAHT3t4tJv8A69oBAA0l/v7l2f8A9NoBAAts/Pyukf8A/doBAAez+/tqSv8ABtsBAP3gy8sYHf8AD9sBAA0l/v7l2f8AGNsBAAts/Pyukf8AIdsBAAez+/tqSv8AKtsBAAHT3t4tJv8AM9sBAP3npaUPFf8APNsBAA0l/v7l2f8ARdsBAAxc/Py7of8ATtsBAAmL/PyScv8AV9sBAAez+/tqSv8AYNsBAAHT3t4tJv8AadsBAP3npaUPFf8ActsBAA0l/v7l2f8Ae9sBAAxc/Py7of8AhNsBAAmL/PyScv8AjdsBAAez+/tqSv8AltsBAAPQ7+87LP8An9sBAP3gy8sYHf8AqNsBAPv/mZkADf8AsdsBAA4P///18P8AutsBAA0s/v7g0v8Aw9sBAAxc/Py7of8AzNsBAAmL/PyScv8A1dsBAAez+/tqSv8A3tsBAAPQ7+87LP8A59sBAP3gy8sYHf8A8NsBAPv/mZkADf8A+dsBAA4P///18P8AAtwBAA0s/v7g0v8AC9wBAAxc/Py7of8AFNwBAAmL/PyScv8AHdwBAAez+/tqSv8AJtwBAAPQ7+87LP8AL9wBAP3gy8sYHf8AONwBAP3npaUPFf8AQdwBAPn/Z2cADf8AStwBAP7h5OQaHP8AU9wBAJKyuDd+uP8AXNwBAFOTr02vSv8AZdwBAP7h5OQaHP8AbtwBAJKyuDd+uP8Ad9wBAFOTr02vSv8AgNwBAM+Eo5hOo/8AidwBAP7h5OQaHP8AktwBAJKyuDd+uP8Am9wBAFOTr02vSv8ApNwBAM+Eo5hOo/8ArdwBABX///9/AP8AttwBAP7h5OQaHP8Av9wBAJKyuDd+uP8AyNwBAFOTr02vSv8A0dwBAM+Eo5hOo/8A2twBABX///9/AP8A49wBACrM////M/8A7NwBAP7h5OQaHP8A9dwBAJKyuDd+uP8A/twBAFOTr02vSv8AB90BAM+Eo5hOo/8AEN0BABX///9/AP8AGd0BACrM////M/8AIt0BAA/BpqZWKP8AK90BAP7h5OQaHP8ANN0BAJKyuDd+uP8APd0BAFOTr02vSv8ARt0BAM+Eo5hOo/8AT90BABX///9/AP8AWN0BACrM////M/8AYd0BAA/BpqZWKP8Aat0BAOh59/eBv/8Ac90BAP7h5OQaHP8AfN0BAJKyuDd+uP8Ahd0BAFOTr02vSv8Ajt0BAM+Eo5hOo/8Al90BABX///9/AP8AoN0BACrM////M/8Aqd0BAA/BpqZWKP8Ast0BAOh59/eBv/8Au90BAAAAmZmZmf8AxN0BAHJ4wmbCpf8Azd0BAAub/PyNYv8A1t0BAJxNy42gy/8A390BAHJ4wmbCpf8A6N0BAAub/PyNYv8A8d0BAJxNy42gy/8A+t0BAORm5+eKw/8AA94BAHJ4wmbCpf8ADN4BAAub/PyNYv8AFd4BAJxNy42gy/8AHt4BAORm5+eKw/8AJ94BADqb2KbYVP8AMN4BAHJ4wmbCpf8AOd4BAAub/PyNYv8AQt4BAJxNy42gy/8AS94BAORm5+eKw/8AVN4BADqb2KbYVP8AXd4BACLQ///ZL/8AZt4BAHJ4wmbCpf8Ab94BAAub/PyNYv8AeN4BAJxNy42gy/8Agd4BAORm5+eKw/8Ait4BADqb2KbYVP8Ak94BACLQ///ZL/8AnN4BABla5eXElP8Apd4BAHJ4wmbCpf8Art4BAAub/PyNYv8At94BAJxNy42gy/8AwN4BAORm5+eKw/8Ayd4BADqb2KbYVP8A0t4BACLQ///ZL/8A294BABla5eXElP8A5N4BAAAAs7Ozs/8A7d4BAHhU043Tx/8A994BANNSvbyAvf8AAt8BACpM////s/8ADN8BAK8l2r662v8AFt8BAASL+/uAcv8AIN8BAJBk04Cx0/8AKt8BABac/f20Yv8ANN8BADqG3rPeaf8APt8BAOkv/PzN5f8ASN8BAAAA2dnZ2f8AUt8BAHhU043Tx/8AXN8BANNSvbyAvf8AZ98BAE0p68zrxf8Act8BACpM////s/8AfN8BAK8l2r662v8Aht8BAASL+/uAcv8AkN8BAJBk04Cx0/8Amt8BABac/f20Yv8ApN8BADqG3rPeaf8Art8BAOkv/PzN5f8AuN8BAAAA2dnZ2f8Awt8BAHhU043Tx/8AzN8BANNSvbyAvf8A198BAE0p68zrxf8A4t8BACWQ///tb/8A7d8BACpM////s/8A998BAK8l2r662v8AAeABAASL+/uAcv8AC+ABAJBk04Cx0/8AFeABABac/f20Yv8AH+ABADqG3rPeaf8AKeABAOkv/PzN5f8AM+ABAAAA2dnZ2f8APeABAHhU043Tx/8ARuABACpM////s/8AT+ABAK8l2r662v8AWOABAHhU043Tx/8AYeABACpM////s/8AauABAK8l2r662v8Ac+ABAASL+/uAcv8AfOABAHhU043Tx/8AheABACpM////s/8AjuABAK8l2r662v8Al+ABAASL+/uAcv8AoOABAJBk04Cx0/8AqeABAHhU043Tx/8AsuABACpM////s/8Au+ABAK8l2r662v8AxOABAASL+/uAcv8AzeABAJBk04Cx0/8A1uABABac/f20Yv8A3+ABAHhU043Tx/8A6OABACpM////s/8A8eABAK8l2r662v8A+uABAASL+/uAcv8AA+EBAJBk04Cx0/8ADOEBABac/f20Yv8AFeEBADqG3rPeaf8AHuEBAHhU043Tx/8AJ+EBACpM////s/8AMOEBAK8l2r662v8AOeEBAASL+/uAcv8AQuEBAJBk04Cx0/8AS+EBABac/f20Yv8AVOEBADqG3rPeaf8AXeEBAOkv/PzN5f8AZuEBAHhU043Tx/8Ab+EBACpM////s/8AeOEBAK8l2r662v8AgeEBAASL+/uAcv8AiuEBAJBk04Cx0/8Ak+EBABac/f20Yv8AnOEBADqG3rPeaf8ApeEBAOkv/PzN5f8AruEBAAAA2dnZ2f8At+EBAO39np4BQv8AxeEBALGCol5Pov8A1OEBAPq01dU+T/8A4uEBAAq49PRtQ/8A8OEBABSd/f2uYf8A/uEBAB9z/v7gi/8ADOIBADFg9eb1mP8AGuIBAE9B3avdpP8AKOIBAHJ4wmbCpf8ANuIBAI+7vTKIvf8AROIBAO39np4BQv8AUuIBAI+7vTKIvf8AYeIBALGCol5Pov8AcOIBAPq01dU+T/8AfuIBAAq49PRtQ/8AjOIBABSd/f2uYf8AmuIBAB9z/v7gi/8AqOIBACpA////v/8AtuIBADFg9eb1mP8AxOIBAE9B3avdpP8A0uIBAHJ4wmbCpf8A4OIBAA2k/PyNWf8A7eIBACpA////v/8A+uIBAFFN1ZnVlP8AB+MBAP7h19cZHP8AFOMBABSd/f2uYf8AIeMBAE9B3avdpP8ALuMBAI/EuiuDuv8AO+MBAP7h19cZHP8ASOMBABSd/f2uYf8AVeMBACpA////v/8AYuMBAE9B3avdpP8Ab+MBAI/EuiuDuv8AfOMBAPq01dU+T/8AieMBAA2k/PyNWf8AluMBAB9z/v7gi/8Ao+MBADFg9eb1mP8AsOMBAFFN1ZnVlP8AveMBAI+7vTKIvf8AyuMBAPq01dU+T/8A1+MBAA2k/PyNWf8A5OMBAB9z/v7gi/8A8eMBACpA////v/8A/uMBADFg9eb1mP8AC+QBAFFN1ZnVlP8AGOQBAI+7vTKIvf8AJeQBAPq01dU+T/8AMuQBAAq49PRtQ/8AP+QBABSd/f2uYf8ATOQBAB9z/v7gi/8AWeQBADFg9eb1mP8AZuQBAE9B3avdpP8Ac+QBAHJ4wmbCpf8AgOQBAI+7vTKIvf8AjeQBAPq01dU+T/8AmuQBAAq49PRtQ/8Ap+QBABSd/f2uYf8AtOQBAB9z/v7gi/8AweQBACpA////v/8AzuQBADFg9eb1mP8A2+QBAE9B3avdpP8A6OQBAHJ4wmbCpf8A9eQBAI+7vTKIvf8AAuUBAJMP//D4//8AEeUBABgj+vrr1/8AI+UBAH///wD///8ALeUBAHGA/3//1P8APeUBAH8P//D///8ASOUBACoa9fX13P8AU+UBABc6///kxP8AX+UBAAAAAAAAAP8AauUBABkx///rzf8AfuUBAKr//wAA//8AiOUBAMDO4oor4v8AmOUBAAC+paUqKv8Ao+UBABdj3t64h/8AsuUBAIBnoF+eoP8AweUBAD///3//AP8A0eUBABHa0tJpHv8A4OUBAAuv//9/UP8A6+UBAJqT7WSV7f8A/+UBACEi///43P8ADeYBAPbn3NwUPP8AGuYBAH///wD///8AJOYBAKr/iwAAi/8AMuYBAH//iwCLi/8AQOYBAB7vuLiGC/8AU+YBAAAAqampqf8AYeYBAFX/ZABkAP8AcOYBAAAAqampqf8AfuYBACduvb23a/8AjeYBANT/i4sAi/8AnuYBADqOa1VrL/8AsuYBABf///+MAP8AwuYBAMbAzJkyzP8A0uYBAAD/i4sAAP8A3+YBAAp56emWev8A7+YBAFU9vI+8j/8AAecBAK+Pi0g9i/8AFOcBAH9nTy9PT/8AJ+cBAH9nTy9PT/8AOucBAID/0QDO0f8ATecBAMf/05QA0/8AXecBAOjr//8Uk/8Aa+cBAIr//wC///8AfOcBAAAAaWlpaf8AiecBAAAAaWlpaf8AlucBAJTh/x6Q//8ApucBAADOsrIiIv8AtecBABwP///68P8AxucBAFXAiyKLIv8A1+cBANT///8A//8A5OcBAAAA3Nzc3P8A8+cBAKoH//j4//8AA+gBACP////XAP8ADegBAB7Z2tqlIP8AHOgBAAAAgICAgP8AJugBAFX/gACAAP8AMegBADvQ/63/L/8AQugBAAAAgICAgP8ATOgBAFUP//D/8P8AWugBAOmW//9ptP8AZ+gBAACMzc1cXP8AdugBAML/gksAgv8AgugBACoP////8P8AjegBACZq8PDmjP8AmOgBAKoU+ubm+v8ApugBAPAP///w9f8AuegBAED//Hz8AP8AyOgBACYx///6zf8A2ugBAIk/5q3Y5v8A6egBAAB38PCAgP8A+egBAH8f/+D///8ACOkBACoo+vr60v8AIukBAAAA09PT0/8AMekBAFVk7pDukP8AQekBAAAA09PT0/8AUOkBAPhJ//+2wf8AX+kBAAyE//+gev8AcOkBAH3RsiCyqv8Ag+kBAI91+ofO+v8AlekBAJQ4mXeImf8AqekBAJQ4mXeImf8AvekBAJc03rDE3v8A0ekBACof////4P8A4ukBAFX//wD/AP8A7OkBAFXAzTLNMv8A++kBABUU+vrw5v8ABuoBANT///8A//8AE+oBAAD/gIAAAP8AH+oBAHGAzWbNqv8ANeoBAKr/zQAAzf8AReoBAMyY07pV0/8AV+oBALd825Nw2/8AaeoBAGepszyzcf8AfeoBALCP7nto7v8AkuoBAG//+gD6mv8AqeoBAH2n0UjRzP8AvuoBAOTkx8cVhf8A0+oBAKrGcBkZcP8A5eoBAGoJ//X/+v8A9OoBAAQe///k4f8AA+sBABpJ///ktf8AEesBABlR///erf8AIusBAKr/gAAAgP8ALOsBABsX/f315v8AOesBACr/gICAAP8AROsBADjAjmuOI/8AU+sBABv///+lAP8AX+sBAAv///9FAP8AbusBANZ72tpw1v8AeusBACZI7u7oqv8AjesBAFVk+5j7mP8AnOsBAH9D7q/u7v8Ar+sBAPF829twk/8AwusBABop///v1f8A0usBABRG///auf8A4esBABSwzc2FP/8A6+sBAPc////Ay/8A9esBANRG3d2g3f8A/+sBAIQ75rDg5v8AD+wBANT/gIAAgP8AG+wBAAD///8AAP8AJOwBAAA9vLyPj/8AM+wBAJ+14UFp4f8AQuwBABHci4tFE/8AU+wBAASK+vqAcv8AX+wBABOa9PSkYP8Ab+wBAGeqiy6LV/8AfewBABEQ///17v8Ai+wBAA23oKBSLf8Al+wBAAAAwMDAwP8Ao+wBAIts64fO6/8AsOwBAK+PzWpazf8Av+wBAJQ4kHCAkP8AzuwBAJQ4kHCAkP8A3ewBAAAF///6+v8A5+wBAGr//wD/f/8A+OwBAJKbtEaCtP8AB+0BABhU0tK0jP8AEO0BAH//gACAgP8AGu0BANQd2Ni/2P8AJ+0BAAa4//9jR/8AM+0BAHu24EDg0P8AQu0BANRz7u6C7v8ATu0BABtE9fXes/8AWe0BAAAA//////8AZO0BAAAA9fX19f8AdO0BACr/////AP8AgO0BADjAzZrNMv8Ake0BAC1D/Pf8uf8Amu0BAERb3a3djv8Ao+0BAGKyozGjVP8ArO0BACoy////zP8Ate0BAD5V5sLmmf8Avu0BAFVkxnjGef8Ax+0BAGO7hCOEQ/8A0O0BACoy////zP8A2e0BAD5V5sLmmf8A4u0BAFVkxnjGef8A6+0BAGKyozGjVP8A9O0BAGv/aABoN/8A/e0BACoy////zP8ABu4BADdR8Nnwo/8AD+4BAERb3a3djv8AGO4BAFVkxnjGef8AIe4BAGKyozGjVP8AKu4BAGv/aABoN/8AM+4BACoy////zP8APO4BADdR8Nnwo/8ARe4BAERb3a3djv8ATu4BAFVkxnjGef8AV+4BAGCeq0GrXf8AYO4BAGO7hCOEQ/8Aae4BAGz/WgBaMv8Acu4BACoZ////5f8Ae+4BAC1D/Pf8uf8AhO4BADdR8Nnwo/8Aje4BAERb3a3djv8Alu4BAFVkxnjGef8An+4BAGCeq0GrXf8AqO4BAGO7hCOEQ/8Ase4BAGz/WgBaMv8Auu4BACoZ////5f8Aw+4BAC1D/Pf8uf8AzO4BADdR8Nnwo/8A1e4BAERb3a3djv8A3u4BAFVkxnjGef8A5+4BAGCeq0GrXf8A8O4BAGO7hCOEQ/8A+e4BAGv/aABoN/8AAu8BAG7/RQBFKf8AC+8BADFJ+O34sf8AFu8BAHVhzX/Nu/8AIe8BAJDCuCx/uP8ALO8BACoy////zP8AN+8BAGNC2qHatP8AQu8BAISqxEG2xP8ATe8BAJbLqCJeqP8AWO8BACoy////zP8AY+8BAGNC2qHatP8Abu8BAISqxEG2xP8Aee8BAJDCuCx/uP8AhO8BAKS/lCU0lP8Aj+8BACoy////zP8Amu8BAEU66cfptP8Ape8BAHVhzX/Nu/8AsO8BAISqxEG2xP8Au+8BAJDCuCx/uP8Axu8BAKS/lCU0lP8A0e8BACoy////zP8A3O8BAEU66cfptP8A5+8BAHVhzX/Nu/8A8u8BAISqxEG2xP8A/e8BAIvYwB2RwP8ACPABAJbLqCJeqP8AE/ABAJ7nhAwshP8AHvABACom////2f8AKfABADFJ+O34sf8ANPABAEU66cfptP8AP/ABAHVhzX/Nu/8ASvABAISqxEG2xP8AVfABAIvYwB2RwP8AYPABAJbLqCJeqP8Aa/ABAJ7nhAwshP8AdvABACom////2f8AgfABADFJ+O34sf8AjPABAEU66cfptP8Al/ABAHVhzX/Nu/8AovABAISqxEG2xP8ArfABAIvYwB2RwP8AuPABAJbLqCJeqP8Aw/ABAKS/lCU0lP8AzvABAJ7nWAgdWP8A2fABACVC///3vP8A5PABAByv/v7ET/8A7/ABABDu2dlfDv8A+vABACoq////1P8ABfEBABxw/v7Zjv8AEPEBABbV/v6ZKf8AG/EBAA/8zMxMAv8AJvEBACoq////1P8AMfEBABxw/v7Zjv8APPEBABbV/v6ZKf8AR/EBABDu2dlfDv8AUvEBAA34mZk0BP8AXfEBACoq////1P8AaPEBAB9t/v7jkf8Ac/EBAByv/v7ET/8AfvEBABbV/v6ZKf8AifEBABDu2dlfDv8AlPEBAA34mZk0BP8An/EBACoq////1P8AqvEBAB9t/v7jkf8AtfEBAByv/v7ET/8AwPEBABbV/v6ZKf8Ay/EBABLp7OxwFP8A1vEBAA/8zMxMAv8A4fEBAAz3jIwtBP8A7PEBACoZ////5f8A9/EBACVC///3vP8AAvIBAB9t/v7jkf8ADfIBAByv/v7ET/8AGPIBABbV/v6ZKf8AI/IBABLp7OxwFP8ALvIBAA/8zMxMAv8AOfIBAAz3jIwtBP8ARPIBACoZ////5f8AT/IBACVC///3vP8AWvIBAB9t/v7jkf8AZfIBAByv/v7ET/8AcPIBABbV/v6ZKf8Ae/IBABLp7OxwFP8AhvIBAA/8zMxMAv8AkfIBAA34mZk0BP8AnPIBAA3wZmYlBv8Ap/IBACJf///toP8AsvIBABiy/v6yTP8AvfIBAAXd8PA7IP8AyPIBACpN////sv8A0/IBAB2i/v7MXP8A3vIBABHC/f2NPP8A6fIBAP7h4+MaHP8A9PIBACpN////sv8A//IBAB2i/v7MXP8ACvMBABHC/f2NPP8AFfMBAAXd8PA7IP8AIPMBAPb/vb0AJv8AK/MBACpN////sv8ANvMBAB6I/v7Zdv8AQfMBABiy/v6yTP8ATPMBABHC/f2NPP8AV/MBAAXd8PA7IP8AYvMBAPb/vb0AJv8AbfMBACpN////sv8AePMBAB6I/v7Zdv8Ag/MBABiy/v6yTP8AjvMBABHC/f2NPP8AmfMBAAfU/PxOKv8ApPMBAP7h4+MaHP8Ar/MBAPX/sbEAJv8AuvMBACoy////zP8AxfMBACJf///toP8A0PMBAB6I/v7Zdv8A2/MBABiy/v6yTP8A5vMBABHC/f2NPP8A8fMBAAfU/PxOKv8A/PMBAP7h4+MaHP8AB/QBAPX/sbEAJv8AEvQBACoy////zP8AHfQBACJf///toP8AKPQBAB6I/v7Zdv8AM/QBABiy/v6yTP8APvQBABHC/f2NPP8ASfQBAAfU/PxOKv8AVPQBAP7h4+MaHP8AX/QBAPb/vb0AJv8AavQBAPL/gIAAJv8AdfQBAJMP//D4//8Af/QBABgj+vrr1/8AjPQBABck///v2/8AmvQBABck7u7fzP8AqPQBABckzc3AsP8AtvQBABgii4uDeP8AxPQBAHGA/3//1P8Az/QBAHGA/3//1P8A2/QBAHGA7nbuxv8A5/QBAHGAzWbNqv8A8/QBAHGAi0WLdP8A//QBAH8P//D///8ABfUBAH8P//D///8ADPUBAH8P7uDu7v8AE/UBAH8OzcHNzf8AGvUBAH8Oi4OLi/8AIfUBACoa9fX13P8AJ/UBABc6///kxP8ALvUBABc6///kxP8ANvUBABc67u7Vt/8APvUBABY6zc23nv8ARvUBABc6i4t9a/8AWAwCAAAAAAAAAP8ATvUBABkx///rzf8AXfUBAKr//wAA//8AYvUBAKr//wAA//8AaPUBAKr/7gAA7v8AbvUBAKr/zQAAzf8AdPUBAKr/iwAAi/8AevUBAMDO4oor4v8AhfUBAAC+paUqKv8Ai/UBAAC///9AQP8AkvUBAAC/7u47O/8AmfUBAAC/zc0zM/8AoPUBAAC+i4sjI/8Ap/UBABdj3t64h/8AsfUBABdk///Tm/8AvPUBABdj7u7Fkf8Ax/UBABdjzc2qff8A0vUBABdji4tzVf8A3fUBAIBnoF+eoP8A5/UBAINn/5j1//8A8vUBAINm7o7l7v8A/fUBAINnzXrFzf8ACPYBAINmi1OGi/8AE/YBAD///3//AP8AHvYBAD///3//AP8AKvYBAD//7nbuAP8ANvYBAD//zWbNAP8AQvYBAD//i0WLAP8ATvYBABHa0tJpHv8AWPYBABHb//9/JP8AY/YBABHb7u52If8AbvYBABHazc1mHf8AefYBABHci4tFE/8AhPYBAAuv//9/UP8AivYBAAep//9yVv8AkfYBAAap7u5qUP8AmPYBAAapzc1bRf8An/YBAAaoi4s+L/8ApvYBAJqT7WSV7f8AtfYBACEi///43P8AvvYBACEi///43P8AyPYBACIj7u7ozf8A0vYBACIizc3Isf8A3PYBACMii4uIeP8A5vYBAPbn3NwUPP8A7vYBAH///wD///8A8/YBAH///wD///8A+fYBAH//7gDu7v8A//YBAH//zQDNzf8ABfcBAH//iwCLi/8AC/cBAB7vuLiGC/8AGfcBAB7w//+5D/8AKPcBAB7w7u6tDv8AN/cBAB7wzc2VDP8ARvcBAB7wi4tlCP8AVfcBAFX/ZABkAP8AX/cBACduvb23a/8AafcBADqOa1VrL/8AePcBADqP/8r/cP8AiPcBADqP7rzuaP8AmPcBADqPzaLNWv8AqPcBADqPi26LPf8AuPcBABf///+MAP8Aw/cBABX///9/AP8Az/cBABX/7u52AP8A2/cBABX/zc1mAP8A5/cBABX/i4tFAP8A8/cBAMbAzJkyzP8A/vcBAMbB/78+//8ACvgBAMbA7rI67v8AFvgBAMbAzZoyzf8AIvgBAMbAi2gii/8ALvgBAAp56emWev8AOfgBAFU9vI+8j/8ARvgBAFU+/8H/wf8AVPgBAFU+7rTutP8AYvgBAFU+zZvNm/8AcPgBAFU+i2mLaf8AfvgBAK+Pi0g9i/8AjPgBAH9nTy9PT/8AmvgBAH9o/5f///8AqfgBAH9n7o3u7v8AuPgBAH9ozXnNzf8Ax/gBAH9oi1KLi/8A1vgBAH9nTy9PT/8A5PgBAID/0QDO0f8A8vgBAMf/05QA0/8A/fgBAOjr//8Uk/8ABvkBAOjr//8Uk/8AEPkBAOjr7u4Sif8AGvkBAOjrzc0Qdv8AJPkBAOfsi4sKUP8ALvkBAIr//wC///8AOvkBAIr//wC///8AR/kBAIr/7gCy7v8AVPkBAIr/zQCazf8AYfkBAIr/iwBoi/8AbvkBAAAAaWlpaf8AdvkBAAAAaWlpaf8AfvkBAJTh/x6Q//8AifkBAJTh/x6Q//8AlfkBAJTh7hyG7v8AofkBAJThzRh0zf8ArfkBAJThixBOi/8AufkBAADOsrIiIv8Aw/kBAADP//8wMP8AzvkBAADP7u4sLP8A2fkBAADPzc0mJv8A5PkBAADPi4saGv8A7/kBABwP///68P8A+/kBAFXAiyKLIv8AB/oBAAAA3Nzc3P8AEfoBAKoH//j4//8AHPoBACP////XAP8AIfoBACP////XAP8AJ/oBACP/7u7JAP8ALfoBACP/zc2tAP8AM/oBACP/i4t1AP8AOfoBAB7Z2tqlIP8AQ/oBAB7a///BJf8ATvoBAB7a7u60Iv8AWfoBAB7azc2bHf8AZPoBAB7ai4tpFP8Ab/oBAAAAwMDAwP8AdPoBAAAAAAAAAP8AevoBAAAAAwMDA/8AgPoBAAAAGhoaGv8Ah/oBAAAA//////8Aj/oBAAAAHBwcHP8AlvoBAAAAHx8fH/8AnfoBAAAAISEhIf8ApPoBAAAAJCQkJP8Aq/oBAAAAJiYmJv8AsvoBAAAAKSkpKf8AufoBAAAAKysrK/8AwPoBAAAALi4uLv8Ax/oBAAAAMDAwMP8AzvoBAAAABQUFBf8A1PoBAAAAMzMzM/8A2/oBAAAANjY2Nv8A4voBAAAAODg4OP8A6foBAAAAOzs7O/8A8PoBAAAAPT09Pf8A9/oBAAAAQEBAQP8A/voBAAAAQkJCQv8ABfsBAAAARUVFRf8ADPsBAAAAR0dHR/8AE/sBAAAASkpKSv8AGvsBAAAACAgICP8AIPsBAAAATU1NTf8AJ/sBAAAAT09PT/8ALvsBAAAAUlJSUv8ANfsBAAAAVFRUVP8APPsBAAAAV1dXV/8AQ/sBAAAAWVlZWf8ASvsBAAAAXFxcXP8AUfsBAAAAXl5eXv8AWPsBAAAAYWFhYf8AX/sBAAAAY2NjY/8AZvsBAAAACgoKCv8AbPsBAAAAZmZmZv8Ac/sBAAAAaWlpaf8AevsBAAAAa2tra/8AgfsBAAAAbm5ubv8AiPsBAAAAcHBwcP8Aj/sBAAAAc3Nzc/8AlvsBAAAAdXV1df8AnfsBAAAAeHh4eP8ApPsBAAAAenp6ev8Aq/sBAAAAfX19ff8AsvsBAAAADQ0NDf8AuPsBAAAAf39/f/8Av/sBAAAAgoKCgv8AxvsBAAAAhYWFhf8AzfsBAAAAh4eHh/8A1PsBAAAAioqKiv8A2/sBAAAAjIyMjP8A4vsBAAAAj4+Pj/8A6fsBAAAAkZGRkf8A8PsBAAAAlJSUlP8A9/sBAAAAlpaWlv8A/vsBAAAADw8PD/8ABPwBAAAAmZmZmf8AC/wBAAAAnJycnP8AEvwBAAAAnp6env8AGfwBAAAAoaGhof8AIPwBAAAAo6Ojo/8AJ/wBAAAApqampv8ALvwBAAAAqKioqP8ANfwBAAAAq6urq/8APPwBAAAAra2trf8AQ/wBAAAAsLCwsP8ASvwBAAAAEhISEv8AUPwBAAAAs7Ozs/8AV/wBAAAAtbW1tf8AXvwBAAAAuLi4uP8AZfwBAAAAurq6uv8AbPwBAAAAvb29vf8Ac/wBAAAAv7+/v/8AevwBAAAAwsLCwv8AgfwBAAAAxMTExP8AiPwBAAAAx8fHx/8Aj/wBAAAAycnJyf8AlvwBAAAAFBQUFP8AnPwBAAAAzMzMzP8Ao/wBAAAAz8/Pz/8AqvwBAAAA0dHR0f8AsfwBAAAA1NTU1P8AuPwBAAAA1tbW1v8Av/wBAAAA2dnZ2f8AxvwBAAAA29vb2/8AzfwBAAAA3t7e3v8A1PwBAAAA4ODg4P8A2/wBAAAA4+Pj4/8A4vwBAAAAFxcXF/8A6PwBAAAA5eXl5f8A7/wBAAAA6Ojo6P8A9vwBAAAA6+vr6/8A/fwBAAAA7e3t7f8ABP0BAAAA8PDw8P8AC/0BAAAA8vLy8v8AEv0BAAAA9fX19f8AGf0BAAAA9/f39/8AIP0BAAAA+vr6+v8AJ/0BAAAA/Pz8/P8ALv0BAFX//wD/AP8ANP0BAFX//wD/AP8AO/0BAFX/7gDuAP8AQv0BAFX/zQDNAP8ASf0BAFX/iwCLAP8AUP0BADvQ/63/L/8AXP0BAAAAwMDAwP8AYf0BAAAAAAAAAP8AZ/0BAAAAAwMDA/8Abf0BAAAAGhoaGv8AdP0BAAAA//////8AfP0BAAAAHBwcHP8Ag/0BAAAAHx8fH/8Aiv0BAAAAISEhIf8Akf0BAAAAJCQkJP8AmP0BAAAAJiYmJv8An/0BAAAAKSkpKf8Apv0BAAAAKysrK/8Arf0BAAAALi4uLv8AtP0BAAAAMDAwMP8Au/0BAAAABQUFBf8Awf0BAAAAMzMzM/8AyP0BAAAANjY2Nv8Az/0BAAAAODg4OP8A1v0BAAAAOzs7O/8A3f0BAAAAPT09Pf8A5P0BAAAAQEBAQP8A6/0BAAAAQkJCQv8A8v0BAAAARUVFRf8A+f0BAAAAR0dHR/8AAP4BAAAASkpKSv8AB/4BAAAACAgICP8ADf4BAAAATU1NTf8AFP4BAAAAT09PT/8AG/4BAAAAUlJSUv8AIv4BAAAAVFRUVP8AKf4BAAAAV1dXV/8AMP4BAAAAWVlZWf8AN/4BAAAAXFxcXP8APv4BAAAAXl5eXv8ARf4BAAAAYWFhYf8ATP4BAAAAY2NjY/8AU/4BAAAACgoKCv8AWf4BAAAAZmZmZv8AYP4BAAAAaWlpaf8AZ/4BAAAAa2tra/8Abv4BAAAAbm5ubv8Adf4BAAAAcHBwcP8AfP4BAAAAc3Nzc/8Ag/4BAAAAdXV1df8Aiv4BAAAAeHh4eP8Akf4BAAAAenp6ev8AmP4BAAAAfX19ff8An/4BAAAADQ0NDf8Apf4BAAAAf39/f/8ArP4BAAAAgoKCgv8As/4BAAAAhYWFhf8Auv4BAAAAh4eHh/8Awf4BAAAAioqKiv8AyP4BAAAAjIyMjP8Az/4BAAAAj4+Pj/8A1v4BAAAAkZGRkf8A3f4BAAAAlJSUlP8A5P4BAAAAlpaWlv8A6/4BAAAADw8PD/8A8f4BAAAAmZmZmf8A+P4BAAAAnJycnP8A//4BAAAAnp6env8ABv8BAAAAoaGhof8ADf8BAAAAo6Ojo/8AFP8BAAAApqampv8AG/8BAAAAqKioqP8AIv8BAAAAq6urq/8AKf8BAAAAra2trf8AMP8BAAAAsLCwsP8AN/8BAAAAEhISEv8APf8BAAAAs7Ozs/8ARP8BAAAAtbW1tf8AS/8BAAAAuLi4uP8AUv8BAAAAurq6uv8AWf8BAAAAvb29vf8AYP8BAAAAv7+/v/8AZ/8BAAAAwsLCwv8Abv8BAAAAxMTExP8Adf8BAAAAx8fHx/8AfP8BAAAAycnJyf8Ag/8BAAAAFBQUFP8Aif8BAAAAzMzMzP8AkP8BAAAAz8/Pz/8Al/8BAAAA0dHR0f8Anv8BAAAA1NTU1P8Apf8BAAAA1tbW1v8ArP8BAAAA2dnZ2f8As/8BAAAA29vb2/8Auv8BAAAA3t7e3v8Awf8BAAAA4ODg4P8AyP8BAAAA4+Pj4/8Az/8BAAAAFxcXF/8A1f8BAAAA5eXl5f8A3P8BAAAA6Ojo6P8A4/8BAAAA6+vr6/8A6v8BAAAA7e3t7f8A8f8BAAAA8PDw8P8A+P8BAAAA8vLy8v8A//8BAAAA9fX19f8ABgACAAAA9/f39/8ADQACAAAA+vr6+v8AFAACAAAA/Pz8/P8AGwACAFUP//D/8P8AJAACAFUP//D/8P8ALgACAFUP7uDu4P8AOAACAFUOzcHNwf8AQgACAFUOi4OLg/8ATAACAOmW//9ptP8AVAACAOqR//9utP8AXQACAOuN7u5qp/8AZgACAOyHzc1gkP8AbwACAOqUi4s6Yv8AeAACAACMzc1cXP8AggACAACU//9qav8AjQACAACU7u5jY/8AmAACAACVzc1VVf8AowACAACUi4s6Ov8ArgACAML/gksAgv8AtQACACoA/////gAAuwACACoP////8P8AwQACACoP////8P8AyAACACoP7u7u4P8AzwACACoOzc3Nwf8A1gACACoOi4uLg/8A3QACACZq8PDmjP8A4wACACdw///2j/8A6gACACdw7u7mhf8A8QACACdvzc3Gc/8A+AACACdvi4uGTv8A/wACAKoU+ubm+v8ACAECAPAP///w9f8AFgECAPAP///w9f8AJQECAO8P7u7g5f8ANAECAPAOzc3Bxf8AQwECAO8Oi4uDhv8AUgECAED//Hz8AP8AXAECACYx///6zf8AaQECACYx///6zf8AdwECACUy7u7pv/8AhQECACYxzc3Jpf8AkwECACcxi4uJcP8AoQECAIk/5q3Y5v8AqwECAIpA/7/v//8AtgECAIpA7rLf7v8AwQECAIo/zZrAzf8AzAECAIlAi2iDi/8A1wECAAB38PCAgP8A4gECAH8f/+D///8A7AECAH8f/+D///8A9wECAH8f7tHu7v8AAgICAH8fzbTNzf8ADQICAH8fi3qLi/8AGAICACNz7u7dgv8AJwICACN0///si/8ANwICACNz7u7cgv8ARwICACNzzc2+cP8AVwICACNzi4uBTP8AZwICACoo+vr60v8AfAICAAAA09PT0/8AhgICAAAA09PT0/8AkAICAPhJ//+2wf8AmgICAPlR//+uuf8ApQICAPhR7u6irf8AsAICAPlQzc2Mlf8AuwICAPlQi4tfZf8AxgICAAyE//+gev8A0gICAAyE//+gev8A3wICAAuE7u6Vcv8A7AICAAyFzc2BYv8A+QICAAyFi4tXQv8ABgMCAH3RsiCyqv8AFAMCAI91+ofO+v8AIQMCAI9P/7Di//8ALwMCAI9P7qTT7v8APQMCAI5PzY22zf8ASwMCAI9Oi2B7i/8AWQMCAK+P/4Rw//8AaAMCAJQ4mXeImf8AdwMCAJQ4mXeImf8AhgMCAJc03rDE3v8AlQMCAJc1/8rh//8ApQMCAJc17rzS7v8AtQMCAJc1zaK1zf8AxQMCAJY1i257i/8A1QMCACof////4P8A4QMCACof////4P8A7gMCACof7u7u0f8A+wMCACofzc3NtP8ACAQCACofi4uLev8AFQQCAFXAzTLNMv8AHwQCABUU+vrw5v8AJQQCANT///8A//8ALQQCANT///8A//8ANgQCANT/7u4A7v8APwQCANT/zc0Azf8ASAQCANT/i4sAi/8AUQQCAO+5sLAwYP8AWAQCAOTL//80s/8AYAQCAOTL7u4wp/8AaAQCAOTMzc0pkP8AcAQCAOTLi4scYv8AeAQCAHGAzWbNqv8AiQQCAKr/zQAAzf8AlAQCAMyY07pV0/8AoQQCAMuZ/+Bm//8ArwQCAMuZ7tFf7v8AvQQCAMuZzbRSzf8AywQCAMuai3o3i/8A2QQCALd825Nw2/8A5gQCALd9/6uC//8A9AQCALd97p957v8AAgUCALd9zYlozf8AEAUCALd8i11Hi/8AHgUCAGepszyzcf8ALQUCALCP7nto7v8APQUCAG//+gD6mv8ATwUCAH2n0UjRzP8AXwUCAOTkx8cVhf8AbwUCAKrGcBkZcP8AfAUCAGoJ//X/+v8AhgUCAAQe///k4f8AkAUCAAQe///k4f8AmwUCAAQe7u7V0v8ApgUCAAMdzc23tf8AsQUCAAUdi4t9e/8AvAUCABpJ///ktf8AxQUCABlR///erf8A0QUCABlR///erf8A3gUCABlS7u7Pof8A6wUCABlSzc2zi/8A+AUCABlSi4t5Xv8ABQYCAKr/gAAAgP8ACgYCAKr/gAAAgP8AEwYCACoA/////gAAGAYCABsX/f315v8AIAYCADjAjmuOI/8AKgYCADjB/8D/Pv8ANQYCADjA7rPuOv8AQAYCADjAzZrNMv8ASwYCADjAi2mLIv8AVgYCABv///+lAP8AXQYCABv///+lAP8AZQYCABv/7u6aAP8AbQYCABv/zc2FAP8AdQYCABv/i4taAP8AfQYCAAv///9FAP8AhwYCAAv///9FAP8AkgYCAAv/7u5AAP8AnQYCAAv/zc03AP8AqAYCAAv/i4slAP8AswYCANZ72tpw1v8AugYCANZ8//+D+v8AwgYCANZ87u566f8AygYCANZ8zc1pyf8A0gYCANV8i4tHif8A2gYCACZI7u7oqv8A6AYCAFVk+5j7mP8A8gYCAFVl/5r/mv8A/QYCAFVk7pDukP8ACAcCAFVkzXzNfP8AEwcCAFVki1SLVP8AHgcCAH9D7q/u7v8ALAcCAH9E/7v///8AOwcCAH9E7q7u7v8ASgcCAH9EzZbNzf8AWQcCAH9Di2aLi/8AaAcCAPF829twk/8AdgcCAPF9//+Cq/8AhQcCAPF97u55n/8AlAcCAPF9zc1oif8AowcCAPF8i4tHXf8AsgcCABop///v1f8AvQcCABRG///auf8AxwcCABRG///auf8A0gcCABNF7u7Lrf8A3QcCABNFzc2vlf8A6AcCABRFi4t3Zf8A8wcCABSwzc2FP/8A+AcCAPc////Ay/8A/QcCAPVJ//+1xf8AAwgCAPVJ7u6puP8ACQgCAPVKzc2Rnv8ADwgCAPVJi4tjbP8AFQgCANRG3d2g3f8AGggCANRE//+7//8AIAgCANRE7u6u7v8AJggCANREzc2Wzf8ALAgCANRDi4tmi/8AMggCAIQ75rDg5v8APQgCAMTd8KAg8P8ARAgCAL/P/5sw//8ATAgCAMDP7pEs7v8AVAgCAMDPzX0mzf8AXAgCAMDPi1Uai/8AZAgCAAD///8AAP8AaAgCAAD///8AAP8AbQgCAAD/7u4AAP8AcggCAAD/zc0AAP8AdwgCAAD/i4sAAP8AfAgCAAA9vLyPj/8AhggCAAA+///Bwf8AkQgCAAA+7u60tP8AnAgCAAA+zc2bm/8ApwgCAAA+i4tpaf8AsggCAJ+14UFp4f8AvAgCAJ+3/0h2//8AxwgCAJ+37kNu7v8A0ggCAJ+2zTpfzf8A3QgCAJ+3iydAi/8A6AgCABHci4tFE/8A9AgCAASK+vqAcv8A+wgCAAmW//+Maf8AAwkCAAmW7u6CYv8ACwkCAAmWzc1wVP8AEwkCAAmWi4tMOf8AGwkCABOa9PSkYP8AJgkCAGeqiy6LV/8ALwkCAGer/1T/n/8AOQkCAGer7k7ulP8AQwkCAGerzUPNgP8ATQkCAGeqiy6LV/8AVwkCABEQ///17v8AYAkCABEQ///17v8AagkCABIR7u7l3v8AdAkCABIRzc3Fv/8AfgkCABIQi4uGgv8AiAkCAA23oKBSLf8AjwkCAA24//+CR/8AlwkCAA247u55Qv8AnwkCAA24zc1oOf8ApwkCAA25i4tHJv8ArwkCAIts64fO6/8AtwkCAJB4/4fO//8AwAkCAJB47n7A7v8AyQkCAJB4zWymzf8A0gkCAJF3i0pwi/8A2wkCAK+PzWpazf8A5QkCAK+Q/4Nv//8A8AkCAK+Q7npn7v8A+wkCAK+QzWlZzf8ABgoCAK+Qi0c8i/8AEQoCAJQ4kHCAkP8AGwoCAJU4/8bi//8AJgoCAJU47rnT7v8AMQoCAJQ5zZ+2zf8APAoCAJU4i2x7i/8ARwoCAJQ4kHCAkP8AUQoCAAAF///6+v8AVgoCAAAF///6+v8AXAoCAAAF7u7p6f8AYgoCAAAEzc3Jyf8AaAoCAAADi4uJif8AbgoCAGr//wD/f/8AegoCAGr//wD/f/8AhwoCAGr/7gDudv8AlAoCAGr/zQDNZv8AoQoCAGr/iwCLRf8ArgoCAJKbtEaCtP8AuAoCAJKc/2O4//8AwwoCAJKc7lys7v8AzgoCAJKczU+Uzf8A2QoCAJObizZki/8A5AoCABhU0tK0jP8A6AoCABSw//+lT/8A7QoCABSw7u6aSf8A8goCABSwzc2FP/8A9woCABSwi4taK/8A/AoCANQd2Ni/2P8ABAsCANQe///h//8ADQsCANQe7u7S7v8AFgsCANQdzc21zf8AHwsCANQdi4t7i/8AKAsCAAa4//9jR/8ALwsCAAa4//9jR/8ANwsCAAa47u5cQv8APwsCAAa4zc1POf8ARwsCAAa5i4s2Jv8AmQwCACoA/////gAATwsCAHu24EDg0P8AWQsCAIH//wD1//8AZAsCAIH/7gDl7v8AbwsCAIH/zQDFzf8AegsCAIH/iwCGi/8AhQsCANRz7u6C7v8AjAsCAOPX0NAgkP8AlgsCAOvB//8+lv8AoQsCAOvA7u46jP8ArAsCAOvAzc0yeP8AtwsCAOvAi4siUv8AwgsCABtE9fXes/8AyAsCABtF///nuv8AzwsCABtE7u7Yrv8A1gsCABtEzc26lv8A3QsCABtDi4t+Zv8A5AsCAAAA//////8A6gsCAAAA9fX19f8A9QsCACr/////AP8A/AsCACr/////AP8ABAwCACr/7u7uAP8ADAwCACr/zc3NAP8AFAwCACr/i4uLAP8AHAwCADjAzZrNMv8AkBACAHUgAgCsDAIArgwCALAMAgCyDAIAtAwCALYMAgC4DAIAugwCALwMAgC/DAIAwgwCAMUMAgDIDAIAywwCAM4MAgDRDAIA1AwCANcMAgDaDAIAAAAAAAQAAAAEAAAACwAAADYAAAAWAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAvBkCAAkAAADCGQIACgAAAMsZAgALAAAADRoCAAwAAAATGgIADQAAABgaAgAOAAAAyxkCAA8AAACgGgIAEAAAAKcaAgARAAAArxoCABIAAAC2GgIAEwAAAMIaAgAUAAAADRoCABUAAADOGgIAFgAAANYaAgAXAAAA4BoCABgAAADuGgIAGQAAAPUaAgAaAAAA+hoCABsAAAD9GgIAHAAAAAIbAgAdAAAAChsCAB4AAAAQGwIAHwAAABYbAgAgAAAAHRsCACEAAAAjGwIAIQAAACsbAgAiAAAAMhsCACMAAADLGQIAJAAAAKcaAgARAAAArxoCABIAAAApHQIAJQAAALYaAgATAAAAwhoCABQAAAANGgIAFQAAADQdAgAmAAAA1hoCABcAAADgGgIAGAAAAO4aAgAZAAAA9RoCABoAAAD6GgIAGwAAAP0aAgAcAAAAPB0CACcAAAAKGwIAHgAAABAbAgAfAAAAFhsCACAAAAAdGwIAIQAAACMbAgAhAAAAKxsCACIAAAAyGwIAIwAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcFhwcHBwcHBwcHBwWHBocHBYcHBwcHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDX///7/////39/VP3/DwD+3////////////t//////AwD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AAAAAAAAAAAA////BwcAAAAAAP7//wf+BwAAAAD+//////////98/38vAGAAAADg////////IwAAAP8DAAAA4J/5///9xQMAAACwAwADAOCH+f///W0DAAAAXgAAHADgr/v///3tIwAAAAABAAAA4J/5///9zSMAAACwAwAAAODHPdYYx78DAAAAAAAAAADg3/3///3vAwAAAAADAAAA4N/9///97wMAAABAAwAAAODf/f///f8DAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA/v////9/DQA/AAAAAAAAAJYl8P6ubA0gHwAAAAAAAAAAAAAAAAAAAP/+////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////z8A/////38A7doHAAAAAFABUDGCq2IsAAAAAEAAyYD1BwAAAAAIAQL/////////////////////////D///////////////A///Pz//////Pz//qv///z/////////fX9wfzw//H9wfAAAAAEBMAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAACAAAAA/gMAAP7///////////8fAP7/////////////B+D/////HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8/AAAAAAAAAAAAAAD//////////////////////////w8AAAAAAAAAAAAAAAAAAAAAYP8H/v//h/7//wcAAAAAAACAAP//f////3//////AAAAAAAAAP//////////////AQD4AwADAAAAAAD//////////z8AAAADAAAAwNf///v/////f39U/f8PAP7f///////////+3/////97AP///////58Z////zz8DAAAAAAAA/v///38C/v///38A/v/7//+7FgD///8HBwAAAAAA/v//B///BwD/A////////////3z/f+///z3/A+7////////z/z8e/8//AADun/n///3F0585gLDP/wMA5If5///9bdOHOQBewP8fAO6v+////e3zvzsAAMH/AADun/n///3N8485wLDD/wAA7Mc91hjHv8PHPYAAgP8AAO7f/f///e/D3z1gAMP/AADs3/3///3vw989YEDD/wAA7N/9///9/8PPPYAAw/8AAAAAAAAAAAAAAAAAAAAAAAD+/////3//B/9//wMAAAAAliXw/q5s/ztfP/8DAAAAAAAAAAP/A6DC//7///8D/v/fD7/+/z/+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/HwIAAACgAAAA/v8+AP7///////////8fZv7/////////////dxkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAVAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAKAAAACkAAAAgAAAAKgAAAAwAAAAZAAAAIQAAAAYAAAAHAAAAAQAAAAEAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQYGBgYGBgYGBgYGBgYGBgYHBwcHBwAAAAAAAAAAAAEBKwAAACwAAAAtAAAALgAAAC8AAAAtAAAAMAAAADEAAAAyAAAAmNwAAPjlAABw5AAAZOcAAGTnAADQ6AAAcOQAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAACAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAMwAAADQAAAApAAAANQAAAA0AAAAaAAAAKgAAAAkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADYAAAA3AAAAMgAAADgAAAAOAAAAGwAAADMAAAALAAAADAAAAAIAAAAAAQAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP2BAQCoJwIAgYIBALEnAgC4JwIAwScCABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAVAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAADc6wAASO0AALTuAAAg8AAAIPAAAIzxAAC07gAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAACAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAKAAAACkAAAAgAAAAKgAAAAwAAAAZAAAAIQAAAAYAAAAHAAAAAQAAAAEAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQYGBgYGBgYGBgYGBgYGBgYHBwcHBwAAAAAAAAAAAAEBKwAAACwAAAAtAAAALgAAAC8AAAAtAAAAMAAAADEAAAAyAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAADMAAAA0AAAAKQAAADUAAAANAAAAGgAAACoAAAAJAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAA2AAAANwAAADIAAAA4AAAADgAAABsAAAAzAAAACwAAAAwAAAACAAAAAAEAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcFhwcHBwcHBwcHBwWHBocHBYcHBwcHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTKAIAWSgCAFwoAgBiKAIA/CcCAGkoAgByKAIAeigCADTzAAAUAAAAQy5VVEYtOAAAAAAAAAAAAAAAAADeEgSVAAAAAP///////////////wIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM0xj0AAAJAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAEAAAAPTtAgAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmPQAAAUAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAQAAAA/PECAAAEAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAr/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACY9AAAHPUAAAUAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAQAAAABPYCAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDcAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBGT7cAnmY/AC3qXwC6J3UA5evHAD178QD3OQcAklKKAPtr6gAfsV8ACF2NADADVgB7/EYA8KtrACC8zwA29JoA46kdAF5hkQAIG+YAhZllAKAUXwCNQGgAgNj/ACdzTQAGBjEAylYVAMmocwB74mAAa4zAACAAAAAJAAAACgAAAA0AAAALAAAADAAAAIUAAAAAIAAAASAAAAIgAAADIAAABCAAAAUgAAAGIAAACCAAAAkgAAAKIAAAKCAAACkgAABfIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QVfcIkA/wkvD3QAAADzSwIAbgAAAPVLAgByAAAA90sCAGYAAAD5SwIAYQAAAPtLAgBlAAAA/UsCAHcAAAD/SwIAVwAAAAxMAgBzAAAAGkwCAFMAAAAmTAIAZAAAADNMAgBEAAAAP0wCAAAAAAAAAAAAAAAAAAAABAAEABsAGwAgACAAIwAhAAoAAgAWAAkAIQAhACEAFQAcAAEAFAAUABQAFAAUABQAFAAIAAQABQAbAAIAFwAbACAAHwAeAB0ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABsAGgAYABkAIAAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAAAAAAAAAK4ALgAvADMANQAwADcAqgDbANsA2wDbAAAAPQCHADcANwDbANsAAAAoADUALgAyAC8AYgAAAAAARwAAAAAA2wBRAAAA2wDbANsAAADbAIQAVQDbAIIA2wAAAIEA2wAAAD4AQgBBAEgARABSAFsAAAAAAF4AXwDbAAAA2wDbANsAAAAAAHsASQBXAFIAWgBaAF0AAABfAAAAXwAAAGUAXQBfAAAAXQBuAGoAAABpAAAAbgAAANsAkwCaAKEAqACrAHAAsQC4AL8AxgDNANMAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAGYAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAAAFwAAQBdAF0AXgBeAF8AXwBcAFwAXABcAFwAYABcAFwAXABhAFwAXABiAGIAYgBiAGIAYgBiAGMAZABlAGYAZgBcAFwAZwBcAFwAXABgAFwAXABhAFwAYQBcAGgAYQBcAGIAYgBiAGIAYgBiAGIAYgBjAGQAZQBlAFwAZgBcAFwAXABnAGgAYQBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAAABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAAAAoACwAMAA0ADgAKAA8AEAARABIAEwAKABQAFQAVABUAFgAXABUAGAAVABUAGQAVABUAFQAaABUAFQAKABUAFQAVABYAFwAYABUAFQAZABUAFQAVABoAFQAVABUAFQAbAAwADAAkAB4AHgAgACEAIAAhACQAJQAmAC0AMgAvAC4AKgAlACYAKAApADMAKgA0ACsANQA2ADcAPAAyAEcAPQAiAEUAIgA/AEAARgAzADQASAA1ADYANwAvAEkAKgBHAEoARQBMAFwAPABGAFwAPQBNAEgATgBPAFIASQBBAFAAUQBKAEwAUwBUADEAVQBWAFcATQBOAFgATwBSAFkAUABRAFoAWwBTAEQAVABVAFYAVwBLAEQALABYACwAWQA4ACwAWgBbAB0AHQAdAB0AHQAdAB0AHwAfAB8AHwAfAB8AHwAjACMAIwAjACMAIwAjACcAXAAnACcAJwAnACcAMAAwADkAHAA5ADkAOQA5ADkAOgBcADoAXAA6ADoAOgA7AFwAOwA7ADsAOwA7AD4APgBcAD4APgA+AD4AQgBcAEIAQgBCAEIAQwBcAEMAQwBDAEMAQwAJAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAgArv/RAAoArv+u/wsArv+u/67/rv+u/67/rv+u/wUA0QCu/9EA0QDRANEA0QDRANEA0QCu//v/rv8OAOz/rv+u/67/rv/RANEA0QDRANEADQAlAAwAQgAQAFAAEwBtAHsAFACYAA8ApgDDAK7/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv+u/67//P/oAPb///8aAAAAJwABADIArv+u/wIAJAADAC8Arv+u/67/rv+u//7/lACu/wkAGwCu/7z/rv+u/6//rv+u/67/rv+u/67/rv8AAAAAAABt5uzeBQALAEkAMQFTAH8BMAFpAHgB/wCBAVMCggGDAYQBhQGGAVQChwGIAYkBVgKKAVcCiwGMAY4B3QGPAVkCkAFbApEBkgGTAWAClAFjApYBaQKXAWgCmAGZAZwBbwKdAXICnwF1AqYBgAKnAagBqQGDAqwBrQGuAYgCrwGwAbEBigKyAYsCtwGSArgBuQG8Ab0BxAHGAcQBxQHFAcYBxwHJAccByAHIAckBygHMAcoBywHLAcwB8QHzAfEB8gHyAfMB9AH1AfYBlQH3Ab8BIAKeAYYDrAOIA60DiQOuA4oDrwOMA8wDjgPNA48DzgOZA0UDmQO+H6MDwgP3A/gD+gP7A2Aemx6eHt8AWR9RH1sfUx9dH1UfXx9XH7wfsx/MH8Mf7B/lH/wf8x86AmUsOwI8Aj0CmgE+AmYsQQJCAkMCgAFEAokCRQKMAvQDuAP5A/ID/QN7A/4DfAP/A30DwATPBCYhyQMqIWsAKyHlADIhTiGDIYQhYCxhLGIsawJjLH0dZCx9Am0sUQJuLHECbyxQAnAsUgJyLHMsdSx2LH4sPwJ/LEAC8izzLH2neR2Lp4ynjadlAqqnZgLHECctzRAtLXYDdwOcA7UAkgPQA5gD0QOmA9UDoAPWA5oD8AOhA/EDlQP1A88D1wMAAAAAQQAgGsAAIB8AAQEvMgEBBTkBAQ9KAQEteQEBBXADAQORAyARowMgCQAEUBAQBCAgYAQBIYoEATXBBAEN0AQBPxQFARMxBTAmoAEBBbMBAQPNAQEP3gEBEfgBASciAgER2AMBFwAeAZWgHgFfCB/4CBgf+AYoH/gIOB/4CEgf+AZoH/gIiB/4CJgf+AioH/gIuB/4AroftgLIH6oE2B/4AtofnALoH/gC6h+QAvgfgAL6H4ICRgIBCRAFAQNgIRAQACwwL2csAQWALAFj6ywBA0CmAS2ApgEXIqcBDTKnAT15pwEDfqcBCZCnAQOgpwEJIf8gGgAAAAB7IHZhciBwYXRoID0gUG9pbnRlcl9zdHJpbmdpZnkoJDApOyB2YXIgZGF0YSA9IFBvaW50ZXJfc3RyaW5naWZ5KCQxKTsgRlMuY3JlYXRlUGF0aCgiLyIsIFBBVEguZGlybmFtZShwYXRoKSk7IEZTLndyaXRlRmlsZShQQVRILmpvaW4oIi8iLCBwYXRoKSwgZGF0YSk7IH0AY29yZQB4ZG90dmVyc2lvbgAxLjcAMS40ADEuMgBfbGRyYXdfAF9oZHJhd18AX3RkcmF3XwBfaGxkcmF3XwBfdGxkcmF3XwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwAgJWQgACUuMDJmACVzJWQgLQAjJTAyeCUwMnglMDJ4JTAyeABzZXRsaW5ld2lkdGgoACUuM2YAUyAAQyAAMiAARSAAZSAARiAAdCAldSAAVCAAZG90OmRvdABndjpkb3QAY2Fub246ZG90AHBsYWluOmRvdABwbGFpbi1leHQ6ZG90AHhkb3Q6eGRvdAB4ZG90MS4yOnhkb3QAeGRvdDEuNDp4ZG90AEkgACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImVkZ2VzIjogWwoAIl9ndmlkIjogJWQsCgAidGFpbCI6ICVkLAoAImhlYWQiOiAlZAAib2JqZWN0cyI6IFsKACJub2RlcyI6IFsKACJuYW1lIjogIiVzIgBcIgBcLwBcYgBcZgBcbgBccgBcdAAic3ViZ3JhcGhzIjogWwoAIiVzIjogACIlcyIAQ291bGQgbm90IHBhcnNlIHhkb3QgIiVzIgoAWwoAIm9wIjogIiVjIiwKACJyZWN0IjogWyUuMDNmLCUuMDNmLCUuMDNmLCUuMDNmXQoAIm9wIjogIkwiLAoAIm9wIjogIlQiLAoAInB0IjogWyUuMDNmLCUuMDNmXSwKACJhbGlnbiI6ICIlYyIsCgAid2lkdGgiOiAlLjAzZiwKACJ0ZXh0IjogIiVzIgoAImdyYWQiOiAibm9uZSIsCgAiY29sb3IiOiAiJXMiCgAiZ3JhZCI6ICJsaW5lYXIiLAoAImdyYWQiOiAicmFkaWFsIiwKACJvcCI6ICJGIiwKACJzaXplIjogJS4wM2YsCgAiZmFjZSI6ICIlcyIKACJvcCI6ICJTIiwKACJzdHlsZSI6ICIlcyIKACJvcCI6ICJ0IiwKACJmb250Y2hhciI6ICVkCgAicDAiOiBbJS4wM2YsJS4wM2YsJS4wM2ZdLAoAInAxIjogWyUuMDNmLCUuMDNmLCUuMDNmXSwKACJzdG9wcyI6IFsAeyJmcmFjIjogJS4wM2YsICJjb2xvciI6ICIlcyJ9AF0KACJwMCI6IFslLjAzZiwlLjAzZl0sCgAicDEiOiBbJS4wM2YsJS4wM2ZdLAoAInBvaW50cyI6IFsAWyUuMDNmLCUuMDNmXQBkcmF3XwBsZHJhd18AaGRyYXdfAHRkcmF3XwBobGRyYXdfAHRsZHJhd18AImRpcmVjdGVkIjogJXMsCgAic3RyaWN0IjogJXMARHVwbGljYXRlIGNsdXN0ZXIgbmFtZSAiJXMiCgB4ZG90AGpzb24AanNvbjAAZG90X2pzb24AeGRvdF9qc29uAGpzb246anNvbgBqc29uMDpqc29uAGRvdF9qc29uOmpzb24AeGRvdF9qc29uOmpzb24AbiA+PSA0AGd2cmVuZGVyX2NvcmVfZmlnLmMAZmlnX2JlemllcgBmaWdfcmVzb2x2ZV9jb2xvcgBmaWcAZmlnOmZpZwBtYXAAcmVjdCAlcyAlZCwlZCAlZCwlZAoAY2lyY2xlICVzICVkLCVkLCVkCgBwb2x5ICVzACAlZCwlZABndnJlbmRlcl9jb3JlX21hcC5jAG1hcF9vdXRwdXRfc2hhcGUAcmVjdGFuZ2xlICglZCwlZCkgKCVkLCVkKSAlcyAlcwoAPGFyZWEgc2hhcGU9ImNpcmNsZSIAPGFyZWEgc2hhcGU9InJlY3QiADxhcmVhIHNoYXBlPSJwb2x5IgAgaHJlZj0iACB0aXRsZT0iACBhbHQ9IiIAIGNvb3Jkcz0iACVkLCVkLCVkACVkLCVkLCVkLCVkACVkLCVkACwlZCwlZAAiPgoAPC9tYXA+CgBiYXNlIHJlZmVyZXIKAGRlZmF1bHQgADxtYXAgaWQ9IgAiIG5hbWU9IgBpc21hcDptYXAAY21hcDptYXAAaW1hcDptYXAAY21hcHg6bWFwAGltYXBfbnA6bWFwAGNtYXB4X25wOm1hcAAjICVzCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkICVkICVkCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjNmICVkICUuNGYgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQKACVkICVkICMlMDJ4JTAyeCUwMngKAGd2cmVuZGVyX2NvcmVfbXAuYwBtcF9yZXNvbHZlX2NvbG9yACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJWQgJWQgJXNcMDAxCgAjIGVuZCBvZiBGSUcgZmlsZQoAI0ZJRyAzLjIKACMgR2VuZXJhdGVkIGJ5ICVzIHZlcnNpb24gJXMgKCVzKQoAIyBUaXRsZTogJXMKACMgUGFnZXM6ICVkCgBQb3J0cmFpdAoAQ2VudGVyCgBJbmNoZXMKAExldHRlcgoAMTAwLjAwCgBTaW5nbGUKAC0yCgAxMjAwACAyCgBtcABtcDptcAAgXSAgJWQgdHJ1ZSAlcwoAIF0gICVkIGZhbHNlICVzCgAgc2V0bGluZXdpZHRoCgAlcyAAc2V0aHNiACUuNWcgJS41ZyAlLjVnICVzY29sb3IKACUgAG5ld3BhdGggACBtb3ZldG8KACBsaW5ldG8KAHN0cm9rZQoAIGN1cnZldG8KAGNsb3NlcGF0aCBmaWxsCgBjbG9zZXBhdGggc3Ryb2tlCgAgZWxsaXBzZV9wYXRoIGZpbGwKACBlbGxpcHNlX3BhdGggc3Ryb2tlCgAgLyVzIHNldF9mb250CgAgbW92ZXRvIAAgJXMgYWxpZ25lZHRleHQKAFsgL1JlY3QgWyAAIF0KACAgL0JvcmRlciBbIDAgMCAwIF0KICAvQWN0aW9uIDw8IC9TdWJ0eXBlIC9VUkkgL1VSSSAlcyA+PgogIC9TdWJ0eXBlIC9MaW5rCi9BTk4gcGRmbWFyawoAZ3NhdmUKACUlICVzCgAwIDAgMCBlZGdlY29sb3IKAGVuZHBhZ2UKc2hvd3BhZ2UKZ3Jlc3RvcmUKACUlUGFnZVRyYWlsZXIKACUlJSVFbmRQYWdlOiAlZAoAJSUlJVBhZ2U6ICVkICVkCgAlJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoATGFuZHNjYXBlAFBvcnRyYWl0ACUlJSVQYWdlT3JpZW50YXRpb246ICVzCgA8PCAvUGFnZVNpemUgWyVkICVkXSA+PiBzZXRwYWdlZGV2aWNlCgAlZCAlZCAlZCBiZWdpbnBhZ2UKAGdzYXZlCiVkICVkICVkICVkIGJveHByaW0gY2xpcCBuZXdwYXRoCgAlZyAlZyBzZXRfc2NhbGUgJWQgcm90YXRlICVnICVnIHRyYW5zbGF0ZQoAY2FudmFzIHNpemUgKCVkLCVkKSBleGNlZWRzIFBERiBsaW1pdCAoJWQpCgkoc3VnZ2VzdCBzZXR0aW5nIGEgYm91bmRpbmcgYm94IHNpemUsIHNlZSBkb3QoMSkpCgBbIC9Dcm9wQm94IFslZCAlZCAlZCAlZF0gL1BBR0VTIHBkZm1hcmsKACVkICVkIHNldGxheWVyCgAlJSUlVGl0bGU6ICVzCgAlJVBhZ2VzOiAoYXRlbmQpCgAlJVBhZ2VzOiAxCgAlJUJvdW5kaW5nQm94OiAoYXRlbmQpCgAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgAlJUVuZENvbW1lbnRzCnNhdmUKAHNldHVwTGF0aW4xCgBbIHtDYXRhbG9nfSA8PCAvVVJJIDw8IC9CYXNlICVzID4+ID4+Ci9QVVQgcGRmbWFyawoAJSVCZWdpblByb2xvZwAvRG90RGljdCAyMDAgZGljdCBkZWYARG90RGljdCBiZWdpbgAvc2V0dXBMYXRpbjEgewBtYXJrAC9FbmNvZGluZ1ZlY3RvciAyNTYgYXJyYXkgZGVmACBFbmNvZGluZ1ZlY3RvciAwAElTT0xhdGluMUVuY29kaW5nIDAgMjU1IGdldGludGVydmFsIHB1dGludGVydmFsAEVuY29kaW5nVmVjdG9yIDQ1IC9oeXBoZW4gcHV0ACUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwAvc3Rhcm5ldElTTyB7ACAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4AICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlACAgICAgICAgfSBmb3JhbGwAICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmACAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQAfSBkZWYAL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmAC9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmAC9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmAC9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmAGNsZWFydG9tYXJrAH0gYmluZCBkZWYAJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IGdyYXBodml6IDAgMAAvY29vcmQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgAvZGVmYXVsdC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmAC9jb29yZGZvbnQgY29vcmQtZm9udC1mYW1pbHkgZmluZGZvbnQgOCBzY2FsZWZvbnQgZGVmAC9JbnZTY2FsZUZhY3RvciAxLjAgZGVmAC9zZXRfc2NhbGUgewAgICAgICAgZHVwIDEgZXhjaCBkaXYgL0ludlNjYWxlRmFjdG9yIGV4Y2ggZGVmACAgICAgICBzY2FsZQAlIHN0eWxlcwAvc29saWQgeyBbXSAwIHNldGRhc2ggfSBiaW5kIGRlZgAvZGFzaGVkIHsgWzkgSW52U2NhbGVGYWN0b3IgbXVsIGR1cCBdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9kb3R0ZWQgeyBbMSBJbnZTY2FsZUZhY3RvciBtdWwgNiBJbnZTY2FsZUZhY3RvciBtdWxdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9pbnZpcyB7L2ZpbGwge25ld3BhdGh9IGRlZiAvc3Ryb2tlIHtuZXdwYXRofSBkZWYgL3Nob3cge3BvcCBuZXdwYXRofSBkZWZ9IGJpbmQgZGVmAC9ib2xkIHsgMiBzZXRsaW5ld2lkdGggfSBiaW5kIGRlZgAvZmlsbGVkIHsgfSBiaW5kIGRlZgAvdW5maWxsZWQgeyB9IGJpbmQgZGVmAC9yb3VuZGVkIHsgfSBiaW5kIGRlZgAvZGlhZ29uYWxzIHsgfSBiaW5kIGRlZgAvdGFwZXJlZCB7IH0gYmluZCBkZWYAJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAAL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmAC9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmAC9iZWdpbnBhZ2UgewklIGkgaiBucGFnZXMACS9ucGFnZXMgZXhjaCBkZWYACS9qIGV4Y2ggZGVmAAkvaSBleGNoIGRlZgAJL3N0ciAxMCBzdHJpbmcgZGVmAAlucGFnZXMgMSBndCB7AAkJZ3NhdmUACQkJY29vcmRmb250IHNldGZvbnQACQkJMCAwIG1vdmV0bwAJCQkoXCgpIHNob3cgaSBzdHIgY3ZzIHNob3cgKCwpIHNob3cgaiBzdHIgY3ZzIHNob3cgKFwpKSBzaG93AAkJZ3Jlc3RvcmUACX0gaWYAL3NldF9mb250IHsACWZpbmRmb250IGV4Y2gACXNjYWxlZm9udCBzZXRmb250ACUgZHJhdyB0ZXh0IGZpdHRlZCB0byBpdHMgZXhwZWN0ZWQgd2lkdGgAL2FsaWduZWR0ZXh0IHsJCQklIHdpZHRoIHRleHQACS90ZXh0IGV4Y2ggZGVmAAkvd2lkdGggZXhjaCBkZWYACWdzYXZlAAkJd2lkdGggMCBndCB7AAkJCVtdIDAgc2V0ZGFzaAAJCQl0ZXh0IHN0cmluZ3dpZHRoIHBvcCB3aWR0aCBleGNoIHN1YiB0ZXh0IGxlbmd0aCBkaXYgMCB0ZXh0IGFzaG93AAkJfSBpZgAJZ3Jlc3RvcmUAL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQAJCTQgMiByb2xsAAkJbW92ZXRvAAkJMiBjb3B5AAkJZXhjaCAwIHJsaW5ldG8ACQkwIGV4Y2ggcmxpbmV0bwAJCXBvcCBuZWcgMCBybGluZXRvAAkJY2xvc2VwYXRoAC9lbGxpcHNlX3BhdGggewAJL3J5IGV4Y2ggZGVmAAkvcnggZXhjaCBkZWYACS95IGV4Y2ggZGVmAAkveCBleGNoIGRlZgAJbWF0cml4IGN1cnJlbnRtYXRyaXgACW5ld3BhdGgACXggeSB0cmFuc2xhdGUACXJ4IHJ5IHNjYWxlAAkwIDAgMSAwIDM2MCBhcmMACXNldG1hdHJpeAAvZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYAL3Nob3dwYWdlIHsgfSBkZWYAL2xheWVyY29sb3JzZXEACVsJJSBsYXllciBjb2xvciBzZXF1ZW5jZSAtIGRhcmtlc3QgdG8gbGlnaHRlc3QACQlbMCAwIDBdAAkJWy4yIC44IC44XQAJCVsuNCAuOCAuOF0ACQlbLjYgLjggLjhdAAkJWy44IC44IC44XQAJXQBkZWYAL2xheWVybGVuIGxheWVyY29sb3JzZXEgbGVuZ3RoIGRlZgAvc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYACWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAAJYWxvYWQgcG9wIHNldGhzYmNvbG9yAAkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmAAkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmAAkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgAvb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYAL29ubGF5ZXJzIHsACS9teXVwcGVyIGV4Y2ggZGVmAAkvbXlsb3dlciBleGNoIGRlZgAJY3VybGF5ZXIgbXlsb3dlciBsdAAJY3VybGF5ZXIgbXl1cHBlciBndAAJb3IACXtpbnZpc30gaWYAL2N1cmxheWVyIDAgZGVmACUlRW5kUmVzb3VyY2UAJSVFbmRQcm9sb2cAJSVCZWdpblNldHVwADE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQAJSAvYXJyb3dsZW5ndGggMTAgZGVmACUgL2Fycm93d2lkdGggNSBkZWYAJSBtYWtlIHN1cmUgcGRmbWFyayBpcyBoYXJtbGVzcyBmb3IgUFMtaW50ZXJwcmV0ZXJzIG90aGVyIHRoYW4gRGlzdGlsbGVyAC9wZGZtYXJrIHdoZXJlIHtwb3B9IHt1c2VyZGljdCAvcGRmbWFyayAvY2xlYXJ0b21hcmsgbG9hZCBwdXR9IGlmZWxzZQAlIG1ha2UgJzw8JyBhbmQgJz4+JyBzYWZlIG9uIFBTIExldmVsIDEgZGV2aWNlcwAvbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWx9ezF9IGlmZWxzZQAyIGx0IHsAICAgIHVzZXJkaWN0ICg8PCkgY3ZuIChbKSBjdm4gbG9hZCBwdXQAICAgIHVzZXJkaWN0ICg+PikgY3ZuIChbKSBjdm4gbG9hZCBwdXQAfSBpZgAlJUVuZFNldHVwACUlVHJhaWxlcgoAJSUlJVBhZ2VzOiAlZAoAZW5kCnJlc3RvcmUKACUlRU9GCgAlIVBTLUFkb2JlLTMuMAAgRVBTRi0zLjAKACUlJSVDcmVhdG9yOiAlcyB2ZXJzaW9uICVzICglcykKAHBzMjpwcwA8IS0tIAA8cG9seWxpbmUAIHBvaW50cz0iACIvPgoAIGZpbGw9IgB1cmwoI2xfJWQpAHVybCgjcl8lZCkAIiBmaWxsLW9wYWNpdHk9IiVmACIgc3Ryb2tlPSIAIiBzdHJva2Utd2lkdGg9IgAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzADUsMgAxLDUAIiBzdHJva2Utb3BhY2l0eT0iJWYAZ3ZyZW5kZXJfY29yZV9zdmcuYwBzdmdfcHJpbnRfY29sb3IAPHBhdGgAIGlkPSIAX3AiIAAgZD0iACVjADxkZWZzPgo8cmFkaWFsR3JhZGllbnQgaWQ9InJfJWQiIGN4PSI1MCUlIiBjeT0iNTAlJSIgcj0iNzUlJSIgZng9IiVkJSUiIGZ5PSIlZCUlIj4KADxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6ADtzdG9wLW9wYWNpdHk6ADEuADsiLz4KADxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6ADsiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgoAPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0ibF8lZCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIAB4MT0iACIgeTE9IgAiIHgyPSIAIiB5Mj0iACIgPgoAPHN0b3Agb2Zmc2V0PSIlLjAzZiIgc3R5bGU9InN0b3AtY29sb3I6ADsiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgoAPHBvbHlnb24APGVsbGlwc2UAIGN4PSIAIiBjeT0iACIgcng9IgAiIHJ5PSIAPHRleHQAIHRleHQtYW5jaG9yPSJzdGFydCIAIHRleHQtYW5jaG9yPSJlbmQiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgAgeD0iACIgeT0iACBmb250LWZhbWlseT0iJXMALCVzACBmb250LXdlaWdodD0iJXMiACBmb250LXN0cmV0Y2g9IiVzIgAgZm9udC1zdHlsZT0iJXMiACBmb250LWZhbWlseT0iJXMiACBmb250LXdlaWdodD0iYm9sZCIAIGZvbnQtc3R5bGU9Iml0YWxpYyIAIHRleHQtZGVjb3JhdGlvbj0iACVzb3ZlcmxpbmUAJXNsaW5lLXRocm91Z2gAIGJhc2VsaW5lLXNoaWZ0PSJzdXBlciIAIGJhc2VsaW5lLXNoaWZ0PSJzdWIiACBmb250LXNpemU9IiUuMmYiACBmaWxsPSIlcyIAIGZpbGw9IiMlMDJ4JTAyeCUwMngiAHN2Z190ZXh0c3BhbgA+ADx0ZXh0UGF0aCB4bGluazpocmVmPSIjJXNfcCIgc3RhcnRPZmZzZXQ9IjUwJSUiPgA8dHNwYW4geD0iMCIgZHk9IgAiPgA8L3RzcGFuPjwvdGV4dFBhdGg+ADwvdGV4dD4KADwvZz4KADxnACBpZD0iYV8AIHhsaW5rOmhyZWY9IgAgeGxpbms6dGl0bGU9IgAgdGFyZ2V0PSIAPHRpdGxlPgA8L3RpdGxlPgoAPGcgaWQ9IgBfJXMAIiBjbGFzcz0iJXMAY2xhc3MAIHRyYW5zZm9ybT0ic2NhbGUoACkgcm90YXRlKCVkKSB0cmFuc2xhdGUoACkiPgoAPC9zdmc+CgA8IS0tACBQYWdlczogJWQgLS0+CgA8c3ZnIHdpZHRoPSIlZHB0IiBoZWlnaHQ9IiVkcHQiCgAgdmlld0JveD0iJS4yZiAlLjJmICUuMmYgJS4yZiIAIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIAIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KAHN0eWxlc2hlZXQAPD94bWwtc3R5bGVzaGVldCBocmVmPSIAIiB0eXBlPSJ0ZXh0L2NzcyI/PgoAPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIgoAICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgoAPCEtLSBHZW5lcmF0ZWQgYnkgAGRhcmtibHVlAGRhcmtjeWFuAGRhcmtncmF5AGRhcmtncmV5AGRhcmttYWdlbnRhAGRhcmtyZWQAbGlnaHRncmVlbgAjIAAgY3JlYXRlIGxpbmUgACAtZmlsbCAAIC1kYXNoIDUAIC1kYXNoIDIAZ3ZyZW5kZXJfY29yZV90ay5jAHRrZ2VuX3ByaW50X3RhZ3MAZ3JhcGggbGFiZWwAIC10YWdzIHslZCVzJXB9AHRrZ2VuX3ByaW50X2NvbG9yACRjACAtd2lkdGggACAtc21vb3RoIGJlemllciAAIGNyZWF0ZSBwb2x5Z29uIAAgLW91dGxpbmUgACBjcmVhdGUgb3ZhbCAAIGNyZWF0ZSB0ZXh0IAAgLXRleHQgewB9ACAtZm9udCB7ACAlZH0AIC1hbmNob3IgdwAgLWFuY2hvciBlACMAIFRpdGxlOiAAIFBhZ2VzOiAlZAoAIyBHZW5lcmF0ZWQgYnkgACkKAHRrAHRrOnRrACAgICAgIDwhLS0gACAtLT4KAEVycm9yIGR1cmluZyBjb252ZXJzaW9uIHRvICJVVEYtOCIuICBRdWl0aW5nLgoAIDx2OnNoYXBlIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgACB3aWR0aDogJWQ7IGhlaWdodDogJWQiIGZpbGxlZD0iZmFsc2UiPgA8djpwYXRoIHY9IgAgbSAAJS4wZiwlLjBmIAAgbCAAIGUgACIvPgA8L3Y6c2hhcGU+CgA8djpzdHJva2UgY29sb3I9IgAiIHdlaWdodD0iJS4wZnB0ACIgZGFzaHN0eWxlPSJkYXNoACIgZGFzaHN0eWxlPSJkb3QAIiAvPgAjJTAyeCUwMnglMDJ4AGd2cmVuZGVyX2NvcmVfdm1sLmMAdm1sX3ByaW50X2NvbG9yACB3aWR0aDogJWQ7IGhlaWdodDogJWQiACA+ADx2OnBhdGggIHY9IgAvPjwvdjpzaGFwZT4KAG0gACVzJS4wZiwlLjBmIABjIAAgZmlsbGVkPSJ0cnVlIiBmaWxsY29sb3I9IgAiIAAgZmlsbGVkPSJmYWxzZSIgACUuMGYgJS4wZiAAbCAAeCBlICIvPgAgIDx2Om92YWwgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOwAgbGVmdDogJS4yZjsgdG9wOiAlLjJmOwAgd2lkdGg6ICUuMmY7IGhlaWdodDogJS4yZiIAPC92Om92YWw+CgA8djpyZWN0IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgACBzdHJva2VkPSJmYWxzZSIgZmlsbGVkPSJmYWxzZSI+CgA8djp0ZXh0Ym94IGluc2V0PSIwLDAsMCwwIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHYtdGV4dC13cmFwcGluZzonZmFsc2UnO3BhZGRpbmc6JzAnOwBmb250LWZhbWlseTogJyVzJzsAZm9udC13ZWlnaHQ6ICVzOwBmb250LXN0cmV0Y2g6ICVzOwBmb250LXN0eWxlOiAlczsAIGZvbnQtc2l6ZTogJS4yZnB0OwBjb2xvcjolczsAY29sb3I6IyUwMnglMDJ4JTAyeDsAdm1sX3RleHRzcGFuACI+PGNlbnRlcj4APC9jZW50ZXI+PC92OnRleHRib3g+CgA8L3Y6cmVjdD4KADwvYT4KADxhACBocmVmPSIlcyIAIHRpdGxlPSIlcyIAIHRhcmdldD0iJXMiAD4KADwvdjpncm91cD4KADwvRElWPgoAPERJViBpZD0nX1ZNTDJfJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTpoaWRkZW4iPgoAPCEtLSBpbnNlcnQgYW55IG90aGVyIGh0bWwgY29udGVudCBoZXJlIC0tPgoAPERJViBpZD0nX25vdFZNTDFfJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7Ij4KADwhLS0gdGhpcyBzaG91bGQgb25seSBkaXNwbGF5IG9uIE5PTi1JRSBicm93c2VycyAtLT4KADxIMj5Tb3JyeSwgdGhpcyBkaWFncmFtIHdpbGwgb25seSBkaXNwbGF5IGNvcnJlY3RseSBvbiBJbnRlcm5ldCBFeHBsb3JlciA1IChhbmQgdXApIGJyb3dzZXJzLjwvSDI+CgA8RElWIGlkPSdfbm90Vk1MMl8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgoAPCEtLSBpbnNlcnQgYW55IG90aGVyIE5PTi1JRSBodG1sIGNvbnRlbnQgaGVyZSAtLT4KADwvQk9EWT4KPC9IVE1MPgoAPEhFQUQ+ADxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KADxUSVRMRT4APC9USVRMRT4APCEtLSBQYWdlczogJWQgLS0+CgAgICA8U0NSSVBUIExBTkdVQUdFPSdKYXZhc2NyaXB0Jz4KACAgIGZ1bmN0aW9uIGJyb3dzZXJjaGVjaygpCgAgICB7CgAgICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudAoAICAgICAgdmFyIG1zaWUgPSB1YS5pbmRleE9mICggJ01TSUUgJyApCgAgICAgICB2YXIgaWV2ZXJzOwoAICAgICAgdmFyIGl0ZW07CgAgICAgICB2YXIgVk1MeWVzPW5ldyBBcnJheSgnX1ZNTDFfJywnX1ZNTDJfJyk7CgAgICAgICB2YXIgVk1Mbm89bmV3IEFycmF5KCdfbm90Vk1MMV8nLCdfbm90Vk1MMl8nKTsKACAgICAgIGlmICggbXNpZSA+IDAgKXsgICAgICAvLyBJZiBJbnRlcm5ldCBFeHBsb3JlciwgcmV0dXJuIHZlcnNpb24gbnVtYmVyCgAgICAgICAgICBpZXZlcnM9IHBhcnNlSW50ICh1YS5zdWJzdHJpbmcgKG1zaWUrNSwgdWEuaW5kZXhPZiAoJy4nLCBtc2llICkpKQoAICAgICAgfQoAICAgICAgaWYgKGlldmVycz49NSl7CgAgICAgICAgZm9yICh4IGluIFZNTHllcyl7CgAgICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVk1MeWVzW3hdKTsKACAgICAgICAgIGlmIChpdGVtKSB7CgAgICAgICAgICAgIGl0ZW0uc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7CgAgICAgICAgICB9CgAgICAgICAgfQoAICAgICAgIGZvciAoeCBpbiBWTUxubyl7CgAgICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVk1Mbm9beF0pOwoAICAgICAgICAgICBpdGVtLnN0eWxlLnZpc2liaWxpdHk9J2hpZGRlbic7CgAgICAgIH1lbHNlewoAICAgICB9CgAgICB9CgAgICA8L1NDUklQVD4KADwvSEVBRD4APEJPRFkgb25sb2FkPSdicm93c2VyY2hlY2soKTsnPgoAPERJViBpZD0nX1ZNTDFfJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IGRpc3BsYXk6aW5saW5lOyB2aXNpYmlsaXR5OmhpZGRlbgAgd2lkdGg6ICVkcHQ7IGhlaWdodDogJWRwdCI+CgA8U1RZTEU+CgB2XDoqIHsgYmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQoAPC9TVFlMRT4KADx4bWw6bmFtZXNwYWNlIG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgcHJlZml4PSJ2IiAvPgoAIDx2Omdyb3VwIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgACB3aWR0aDogJWRwdDsgaGVpZ2h0OiAlZHB0IgAgY29vcmRvcmlnaW49IjAsMCIgY29vcmRzaXplPSIlZCwlZCIgPgA8SFRNTD4KAAo8IS0tIEdlbmVyYXRlZCBieSAAIHZlcnNpb24gACAoACkKLS0+CgBhcXVhAGZ1Y2hzaWEAbGltZQBvbGl2ZQB0ZWFsAHZtbAB2bWw6dm1sAC8vKioqIGNvbW1lbnQ6ICVzCgAvLyoqKiBwb2x5bGluZQoAc2NhbGUgICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgByb3RhdGUgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KAHRyYW5zbGF0ZTwlOS4zZiwgJTkuM2YsICU5LjNmPgoAc3BoZXJlX3N3ZWVwIHsKICAgICVzCiAgICAlZCwKAGxpbmVhcl9zcGxpbmUAPCU5LjNmLCAlOS4zZiwgJTkuM2Y+LCAlLjNmCgAlcyAgICAlcwAgICAgdG9sZXJhbmNlIDAuMDEKICAgICVzICAgICVzICAgICVzICAgICVzfQoAJXMlcwAlcyB0cmFuc21pdCAlLjNmAFJlZABHcmVlbgBCbHVlAHJnYjwlOS4zZiwgJTkuM2YsICU5LjNmPiB0cmFuc21pdCAlLjNmAG9vcHMsIGludGVybmFsIGVycm9yOiB1bmhhbmRsZWQgY29sb3IgdHlwZT0lZCAlcwoAZ3ZyZW5kZXJfY29yZV9wb3YuYwBwb3ZfY29sb3JfYXNfc3RyAHBpZ21lbnQgeyBjb2xvciAlcyB9CgBwb3YgcmVuZGVyZXI6ZWwgLSAlcwoALy8qKiogYmV6aWVyCgBiX3NwbGluZQAgICAgICAgIHRvbGVyYW5jZSAwLjAxCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAC8vKioqIHBvbHlnb24KACAgICB0b2xlcmFuY2UgMC4xCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAHBvbHlnb24geyAlZCwKADwlOS4zZiwgJTkuM2YsICU5LjNmPgAlcwogICAgJXMACiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAC8vKioqIGVsbGlwc2UKAHRvcnVzIHsgJS4zZiwgJS4zZgogICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgBzcGhlcmUgezwlOS4zZiwgJTkuM2YsICU5LjNmPiwgMS4wCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAC8vKioqIHRleHRzcGFuOiAlcywgZm9udHNpemUgPSAlLjNmLCBmb250bmFtZSA9ICVzCgBzY2FsZSAlLjNmCgB0ZXh0IHsKICAgIHR0ZiAiJXMiLAogICAgIiVzIiwgJS4zZiwgJS4zZgogICAgJXMgICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgAgICAgbm9fc2hhZG93CgAvLyoqKiBlbmRfZWRnZQoALy8qKiogYmVnaW5fZWRnZQoALy8qKiogZW5kX25vZGUKAC8vKioqIGJlZ2luX25vZGU6ICVzCgAvLyoqKiBlbmRfY2x1c3RlcgoALy8qKiogYmVnaW5fY2x1c3RlcgoALy8qKiogZW5kX3BhZ2UKAC8vKioqIGJlZ2luX3BhZ2UKAC8vKioqIGVuZF9sYXllcgoALy8qKiogYmVnaW5fbGF5ZXI6ICVzLCAlZC8lZAoALy8qKiogZW5kX2dyYXBoCgAvLyoqKiBiZWdpbl9ncmFwaCAlcwoAY2FtZXJhIHsgbG9jYXRpb24gPCUuM2YgLCAlLjNmICwgJS4zZj4KICAgICAgICAgbG9va19hdCAgPCUuM2YgLCAlLjNmICwgJS4zZj4KICAgICAgICAgcmlnaHQgeCAqIGltYWdlX3dpZHRoIC8gaW1hZ2VfaGVpZ2h0CiAgICAgICAgIGFuZ2xlICUuM2YKfQoALy9za3kKcGxhbmUgeyA8MCwgMSwgMD4sIDEgaG9sbG93CiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50IHsgYm96byB0dXJidWxlbmNlIDAuOTUKICAgICAgICAgICAgY29sb3JfbWFwIHsKICAgICAgICAgICAgICAgIFswLjAwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC41MCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MC4yNSwgMC4yNSwgMC4yNT5dCiAgICAgICAgICAgICAgICBbMS4wMCByZ2IgPDAuNTAsIDAuNTAsIDAuNTA+XQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYWxlIDwxLjAwLCAxLjAwLCAxLjUwPiAqIDIuNTAKICAgICAgICAgICAgdHJhbnNsYXRlIDwwLjAwLCAwLjAwLCAwLjAwPgogICAgICAgIH0KICAgICAgICBmaW5pc2ggeyBhbWJpZW50IDEgZGlmZnVzZSAwIH0KICAgIH0KICAgIHNjYWxlIDEwMDAwCn0KLy9taXN0CmZvZyB7IGZvZ190eXBlIDIKICAgIGRpc3RhbmNlIDUwCiAgICBjb2xvciByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+ICogMC43NQogICAgZm9nX29mZnNldCAwLjEwCiAgICBmb2dfYWx0IDEuNTAKICAgIHR1cmJ1bGVuY2UgMS43NQp9Ci8vZ25kCnBsYW5lIHsgPDAuMDAsIDEuMDAsIDAuMDA+LCAwCiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50eyBjb2xvciByZ2IgPDAuMjUsIDAuNDUsIDAuMDA+IH0KICAgICAgICBub3JtYWwgeyBidW1wcyAwLjc1IHNjYWxlIDAuMDEgfQogICAgICAgIGZpbmlzaCB7IHBob25nIDAuMTAgfQogICAgfQp9CgBsaWdodF9zb3VyY2UgeyA8MTUwMCwzMDAwLC0yNTAwPiBjb2xvciBXaGl0ZSB9CgAjdmVyc2lvbiAzLjY7CgBnbG9iYWxfc2V0dGluZ3MgeyBhc3N1bWVkX2dhbW1hIDEuMCB9CgAjZGVmYXVsdCB7IGZpbmlzaCB7IGFtYmllbnQgMC4xIGRpZmZ1c2UgMC45IH0gfQoAI2luY2x1ZGUgImNvbG9ycy5pbmMiCiNpbmNsdWRlICJ0ZXh0dXJlcy5pbmMiCiNpbmNsdWRlICJzaGFwZXMuaW5jIgoAI2RlY2xhcmUgJXMgPSAlczsKAEJsYWNrAFdoaXRlAGJha2Vyc2Nob2MAYnJhc3MAYnJpZ2h0Z29sZABicm9uemUAYnJvbnplMgBjbGVhcgBjb29sY29wcGVyAGNvcHBlcgBkYXJrYnJvd24AZGFya3B1cnBsZQBkYXJrdGFuAGRhcmt3b29kAGRrZ3JlZW5jb3BwZXIAZHVzdHlyb3NlAGZlbGRzcGFyAGZsZXNoAGdyYXkwNQBncmVlbmNvcHBlcgBodW50ZXJzZ3JlZW4AbGlnaHRfcHVycGxlAGxpZ2h0d29vZABtYW5kYXJpbm9yYW5nZQBtZWRpdW1mb3Jlc3RncmVlbgBtZWRpdW1nb2xkZW5yb2QAbWVkaXVtd29vZABtZWRfcHVycGxlAG1pY2EAbmVvbmJsdWUAbmVvbnBpbmsAbmV3bWlkbmlnaHRibHVlAG5ld3RhbgBvbGRnb2xkAHF1YXJ0egByaWNoYmx1ZQBzY2FybGV0AHNlbWlTd2VldENob2MAc2lsdmVyAHNwaWN5cGluawBzdW1tZXJza3kAdmVyeWRhcmticm93bgB2ZXJ5X2xpZ2h0X3B1cnBsZQBwb3YAcG92OnBvdgAlcyAlcwoALlwiIAAgJWQgJWQAICVzCgAgJWQAZmlsbCAAZWxsaXBzZSBhdHRycyVkICVzd2lkICUuNWYgaHQgJS41ZiBhdCAoJS41ZiwlLjVmKTsKAC5mdCAlcwoALnBzICVkKlxuKFNGdS8lLjBmdQoAIiVzIiBhdCAoJS41ZiwlLjVmKTsKACUwM28AJXMlcyBpcyBub3QgYSB0cm9mZiBmb250CgBkb3QgcGljIHBsdWdpbjogAFIAXQouUEUKAC5QUyAlLjVmICUuNWYKACVzIHRvIGNoYW5nZSBkcmF3aW5nIHNpemUsIG11bHRpcGx5IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9uIHRoZSAuUFMgbGluZSBhYm92ZSBhbmQgdGhlIG51bWJlciBvbiB0aGUgdHdvIGxpbmVzIGJlbG93IChyb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpIGJ5IGEgc2NhbGUgZmFjdG9yCgAubnIgU0YgJS4wZgpzY2FsZXRoaWNrbmVzcyA9ICUuMGYKACVzIGRvbid0IGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaW4gdGhpcyBkcmF3aW5nCgAlcyBub24tZmF0YWwgcnVuLXRpbWUgcGljIHZlcnNpb24gZGV0ZXJtaW5hdGlvbiwgdmVyc2lvbiAyCgBib3hyYWQ9Mi4wICVzIHdpbGwgYmUgcmVzZXQgdG8gMC4wIGJ5IGdwaWMgb25seQoAc2NhbGU9MS4wICVzIHJlcXVpcmVkIGZvciBjb21wYXJpc29ucwoAJXMgYm94cmFkIGlzIG5vdyAwLjAgaW4gZ3BpYywgZWxzZSBpdCByZW1haW5zIDIuMAoAJXMgZGFzaHdpZCBpcyAwLjEgaW4gMTB0aCBFZGl0aW9uLCAwLjA1IGluIERXQiAyIGFuZCBpbiBncGljCgAlcyBmaWxsdmFsIGlzIDAuMyBpbiAxMHRoIEVkaXRpb24gKGZpbGwgMCBtZWFucyBibGFjayksIDAuNSBpbiBncGljIChmaWxsIDAgbWVhbnMgd2hpdGUpLCB1bmRlZmluZWQgaW4gRFdCIDIKACVzIGZpbGwgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGdwaWMgY2FuIHVzZSBmaWxsIG9yIGZpbGxlZCwgMTB0aCBFZGl0aW9uIHVzZXMgZmlsbCBvbmx5CgAlcyBEV0IgMiBkb2Vzbid0IHVzZSBmaWxsIGFuZCBkb2Vzbid0IGRlZmluZSBmaWxsdmFsCgAlcyByZXNldCB3b3JrcyBpbiBncGljIGFuZCAxMHRoIGVkaXRpb24sIGJ1dCBpc24ndCBkZWZpbmVkIGluIERXQiAyCgAlcyBEV0IgMiBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCgBpZiBib3hyYWQgPiAxLjAgJiYgZGFzaHdpZCA8IDAuMDc1IHRoZW4gWAoJZmlsbHZhbCA9IDE7CglkZWZpbmUgZmlsbCBZIFk7CglkZWZpbmUgc29saWQgWSBZOwoJZGVmaW5lIHJlc2V0IFkgc2NhbGU9MS4wIFk7ClgKAHJlc2V0ICVzIHNldCB0byBrbm93biBzdGF0ZQoAJXMgR05VIHBpYyB2cy4gMTB0aCBFZGl0aW9uIGRcKGUndGVudGUKAGlmIGZpbGx2YWwgPiAwLjQgdGhlbiBYCglkZWZpbmUgc2V0ZmlsbHZhbCBZIGZpbGx2YWwgPSAxIC0gWTsKCWRlZmluZSBib2xkIFkgdGhpY2tuZXNzIDIgWTsKAAklcyBpZiB5b3UgdXNlIGdwaWMgYW5kIGl0IGJhcmZzIG9uIGVuY291bnRlcmluZyAic29saWQiLAoACSVzCWluc3RhbGwgYSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIGdwaWMgb3Igc3dpdGNoIHRvIERXQiBvciAxMHRoIEVkaXRpb24gcGljOwoACSVzCXNvcnJ5LCB0aGUgZ3JvZmYgZm9sa3MgY2hhbmdlZCBncGljOyBzZW5kIGFueSBjb21wbGFpbnQgdG8gdGhlbTsKAFggZWxzZSBaCglkZWZpbmUgc2V0ZmlsbHZhbCBZIGZpbGx2YWwgPSBZOwoJZGVmaW5lIGJvbGQgWSBZOwoJZGVmaW5lIGZpbGxlZCBZIGZpbGwgWTsKWgoAJXMgYXJyb3doZWFkIGhhcyBubyBtZWFuaW5nIGluIERXQiAyLCBhcnJvd2hlYWQgPSA3IG1ha2VzIGZpbGxlZCBhcnJvd2hlYWRzIGluIGdwaWMgYW5kIGluIDEwdGggRWRpdGlvbgoAJXMgYXJyb3doZWFkIGlzIHVuZGVmaW5lZCBpbiBEV0IgMiwgaW5pdGlhbGx5IDEgaW4gZ3BpYywgMiBpbiAxMHRoIEVkaXRpb24KAGFycm93aGVhZCA9IDcgJXMgbm90IHVzZWQgYnkgZ3JhcGh2aXoKACVzIEdOVSBwaWMgc3VwcG9ydHMgYSBib3hyYWQgdmFyaWFibGUgdG8gZHJhdyBib3hlcyB3aXRoIHJvdW5kZWQgY29ybmVyczsgRFdCIGFuZCAxMHRoIEVkLiBkbyBub3QKAGJveHJhZCA9IDAgJXMgbm8gcm91bmRlZCBjb3JuZXJzIGluIGdyYXBodml6CgAlcyBHTlUgcGljIHN1cHBvcnRzIGEgbGluZXRoaWNrIHZhcmlhYmxlIHRvIHNldCBsaW5lIHRoaWNrbmVzczsgRFdCIGFuZCAxMHRoIEVkLiBkbyBub3QKAGxpbmV0aGljayA9IDA7IG9sZGxpbmV0aGljayA9IGxpbmV0aGljawoAJXMgLlBTIHcvbyBhcmdzIGNhdXNlcyBHTlUgcGljIHRvIHNjYWxlIGRyYXdpbmcgdG8gZml0IDguNXgxMSBwYXBlcjsgRFdCIGRvZXMgbm90CgAlcyBtYXhwc2h0IGFuZCBtYXhwc3dpZCBoYXZlIG5vIG1lYW5pbmcgaW4gRFdCIDIuMCwgc2V0IHBhZ2UgYm91bmRhcmllcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGFyZSBwcmVkZWZpbmVkIHRvIDExLjAgYW5kIDguNSBpbiBncGljCgBtYXhwc2h0ID0gJWYKbWF4cHN3aWQgPSAlZgoARG90OiBbCgBkZWZpbmUgYXR0cnMwICUlICUlOyBkZWZpbmUgdW5maWxsZWQgJSUgJSU7IGRlZmluZSByb3VuZGVkICUlICUlOyBkZWZpbmUgZGlhZ29uYWxzICUlICUlCgAlcyVzIHVuc3VwcG9ydGVkCgByb3RhdGlvbgAlcyByZXN0b3JlIHBvaW50IHNpemUgYW5kIGZvbnQKLnBzIFxuKC5TCi5mdCBcbihERgoAJXMgQ3JlYXRvcjogJXMgdmVyc2lvbiAlcyAoJXMpCgAlcyBUaXRsZTogJXMKACVzIHNhdmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoubnIgLlMgXG4oLnMKLm5yIERGIFxuKC5mCgBwaWMAcGljOnBpYwBwbmc6c3ZnAGdpZjpzdmcAanBlZzpzdmcAanBlOnN2ZwBqcGc6c3ZnAHBuZzpmaWcAZ2lmOmZpZwBqcGVnOmZpZwBqcGU6ZmlnAGpwZzpmaWcAcG5nOnZybWwAZ2lmOnZybWwAanBlZzp2cm1sAGpwZTp2cm1sAGpwZzp2cm1sAGVwczpwcwBwczpwcwAobGliKTpwcwBwbmc6bWFwAGdpZjptYXAAanBlZzptYXAAanBlOm1hcABqcGc6bWFwAHBzOm1hcABlcHM6bWFwAHN2ZzptYXAAcG5nOmRvdABnaWY6ZG90AGpwZWc6ZG90AGpwZTpkb3QAanBnOmRvdABwczpkb3QAZXBzOmRvdABzdmc6ZG90AHBuZzp4ZG90AGdpZjp4ZG90AGpwZWc6eGRvdABqcGU6eGRvdABqcGc6eGRvdABwczp4ZG90AGVwczp4ZG90AHN2Zzp4ZG90AHN2ZzpzdmcAcG5nOnZtbABnaWY6dm1sAGpwZWc6dm1sAGpwZTp2bWwAanBnOnZtbABnaWY6dGsAaW1hZ2UgY3JlYXRlIHBob3RvICJwaG90b18lcyIgLWZpbGUgIiVzIgoAJGMgY3JlYXRlIGltYWdlICUuMmYgJS4yZiAtaW1hZ2UgInBob3RvXyVzIgoAPHY6aW1hZ2Ugc3JjPSIlcyIgc3R5bGU9IiBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6JS4yZjsgaGVpZ2h0OiUuMmY7IGxlZnQ6JS4yZiA7IHRvcDolLjJmIgAgLz4KAGd2bG9hZGltYWdlX2NvcmUuYwBjb3JlX2xvYWRpbWFnZV9wc2xpYgBbIAAlZyAlZyAAXSAgJWQgdHJ1ZSAlcwoAXSAgJWQgZmFsc2UgJXMKAGNvcmVfbG9hZGltYWdlX3BzAGdzYXZlICVnICVnIHRyYW5zbGF0ZSBuZXdwYXRoCgB1c2VyX3NoYXBlXyVkCgBncmVzdG9yZQoAY29yZV9sb2FkaW1hZ2VfdnJtbABTaGFwZSB7CgAgIGFwcGVhcmFuY2UgQXBwZWFyYW5jZSB7CgAgICAgbWF0ZXJpYWwgTWF0ZXJpYWwgewoAICAgICAgYW1iaWVudEludGVuc2l0eSAwLjMzCgAgICAgICAgIGRpZmZ1c2VDb2xvciAxIDEgMQoAICAgIH0KACAgICB0ZXh0dXJlIEltYWdlVGV4dHVyZSB7IHVybCAiJXMiIH0KACAgfQoAY29yZV9sb2FkaW1hZ2VfZmlnACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJWQKICVkICVzCgAgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQKAGNvcmVfbG9hZGltYWdlX3N2ZwA8aW1hZ2UgeGxpbms6aHJlZj0iACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgdHJhbnNmb3JtPSJyb3RhdGUoJWQgJWcgJWcpIgAiIHdpZHRoPSIlZ3B4IiBoZWlnaHQ9IiVncHgiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHg9IiVnIiB5PSIlZyIALz4KAGRvdF9sYXlvdXQAcGhhc2UAZG90IGRvZXMgbm90IHN1cHBvcnQgdGhlIGFzcGVjdCBhdHRyaWJ1dGUgZm9yIGRpc2Nvbm5lY3RlZCBncmFwaHMgb3IgZ3JhcGhzIHdpdGggY2x1c3RlcnMKAGNvbXBvdW5kAHYgPT0gbgBkb3Rpbml0LmMAcmVtb3ZlX2Zyb21fcmFuawBvcmRlcgBlZGdlIGxhYmVscyB3aXRoIHNwbGluZXM9Y3VydmVkIG5vdCBzdXBwb3J0ZWQgaW4gZG90IC0gdXNlIHhsYWJlbHMKAEVEX2xhYmVsKGZlKQBkb3RzcGxpbmVzLmMAX2RvdF9zcGxpbmVzAGZsYXQgZWRnZSBiZXR3ZWVuIGFkamFjZW50IG5vZGVzIG9uZSBvZiB3aGljaCBoYXMgYSByZWNvcmQgc2hhcGUgLSByZXBsYWNlIHJlY29yZHMgd2l0aCBIVE1MLWxpa2UgbGFiZWxzCgAgIEVkZ2UgJXMgJXMgJXMKAHh4eAAxMDAwMAB7JXN9AGF1eGcAbGFiZWxfZmxvYXQAZml4ZWQAKGwgPSBFRF9sYWJlbChmZSkpAHNldEVkZ2VMYWJlbFBvcwBlICE9IE5VTEwAZmFzdGdyLmMAZGVsZXRlX2Zhc3RfZWRnZQBuICE9IE5EX25leHQobikAZmFzdF9ub2RlAHUgIT0gdgBmYXN0X25vZGVhcHAATkRfbmV4dCh2KSA9PSBOVUxMAGZpbmRfZmFzdF9ub2RlKGcsIG4pAGRlbGV0ZV9mYXN0X25vZGUAZGVsZXRlX2ZsYXRfZWRnZQBtZXJnZV9vbmV3YXkgZ2xpdGNoCgBtZXJnZV9vbmV3YXkAc2FmZV9kZWxldGVfZmFzdF9lZGdlAGxnAGNvbXAAY250ID09IHN6AG1pbmNyb3NzLmMAZml4TGFiZWxPcmRlcgByZW1pbmNyb3NzAG1pbmNyb3NzICVzOiAlZCBjcm9zc2luZ3MsICUuMmYgc2Vjcy4KAHYAbmVpZ2hib3IAKHJ2ID09IDApIHx8IChORF9vcmRlcihydiktTkRfb3JkZXIodikpKmRpciA+IDAAY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLHYsZSkgPT0gRkFMU0UAZmxhdF9yZW9yZGVyAE5EX3JhbmsodikgPT0gcgBwb3N0b3JkZXIAZmxhdGluZGV4KGFnaGVhZChlKSkgPCBNLT5ucm93cwBmbGF0X3NlYXJjaABmbGF0aW5kZXgoYWd0YWlsKGUpKSA8IE0tPm5jb2xzAG91dABvcmRlcmluZyAnJXMnIG5vdCByZWNvZ25pemVkLgoAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZCBmb3Igbm9kZSAnJXMnLgoAbWVyZ2UyOiBncmFwaCAlcywgcmFuayAlZCBoYXMgb25seSAlZCA8ICVkIG5vZGVzCgBtaW5jcm9zczogcGFzcyAlZCBpdGVyICVkIHRyeWluZyAlZCBjdXJfY3Jvc3MgJWQgYmVzdF9jcm9zcyAlZAoATkRfb3JkZXIodikgPCBORF9vcmRlcih3KQBiYWxhbmNlAHRyYW5zcG9zZV9zdGVwAHN1cnByaXNlCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6ICVzICVzIHJhbmsgJWQgaSA9ICVkIGFuID0gMAoAR0RfcmFuayhnKVtyXS5uIDw9IEdEX3JhbmsoZylbcl0uYW4AaW5zdGFsbF9pbl9yYW5rAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogTkRfb3JkZXIoJXMpIFslZF0gPiBHRF9yYW5rKFJvb3QpWyVkXS5hbiBbJWRdCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IHJhbmsgJWQgbm90IGluIHJhbmsgcmFuZ2UgWyVkLCVkXQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiBHRF9yYW5rKGcpWyVkXS52ICsgTkRfb3JkZXIoJXMpIFslZF0gPiBHRF9yYW5rKGcpWyVkXS5hdiArIEdEX3JhbmsoUm9vdClbJWRdLmFuIFslZF0KAF9uZXdfcmFuawBtY2xpbWl0AHJhbmsoZywgMiwgbnNpdGVyMihnKSkgPT0gMABwb3NpdGlvbi5jAGRvdF9wb3NpdGlvbgBBUj0lMC40bGYJIEFyZWE9ICUwLjRsZgkARHVtbXk9JWQKAEdvaW5nIHRvIGFwcGx5IGFub3RoZXIgZXhwYW5zaW9uLgoAbmV4dCNpdGVyPSVkCgBocABjb25uZWN0R3JhcGgARWRnZSBsZW5ndGggJWYgbGFyZ2VyIHRoYW4gbWF4aW11bSAldSBhbGxvd2VkLgpDaGVjayBmb3Igb3ZlcndpZGUgbm9kZShzKS4KAG5zbGltaXQAY29udGFpbl9ub2RlcyBjbHVzdCAlcyByYW5rICVkIG1pc3Npbmcgbm9kZQoAbnNsaW1pdDEAbmV3cmFuawBNYXhyYW5rID0gJWQsIG1pbnJhbmsgPSAlZAoAbGVhZGVyICE9IE5VTEwAcmFuay5jAGNsdXN0ZXJfbGVhZGVyAChORF9VRl9zaXplKG4pIDw9IDEpIHx8IChuID09IGxlYWRlcikAYWdoZWFkKGUpID09IFVGX2ZpbmQoYWdoZWFkKGUpKQBtaW5tYXhfZWRnZXMAYWd0YWlsKGUpID09IFVGX2ZpbmQoYWd0YWlsKGUpKQByYW5rAHNhbWUAbWluAHNvdXJjZQBtYXgAc2luawBsZXZlbCBhc3NpZ25tZW50IGNvbnN0cmFpbnRzAGxldmVsIGdyYXBoIHJlYwB/cm9vdAB/dG9wAH9ib3QAY29tcGFjdABfd2Vha18lZAByYW5raW5nOiBmYWlsdXJlIHRvIGNyZWF0ZSBzdHJvbmcgY29uc3RyYWludCBlZGdlIGJldHdlZW4gbm9kZXMgJXMgYW5kICVzCgAlcyBoYXMgdW5yZWNvZ25pemVkIHJhbms9JXMAbGV2ZWwgZWRnZSByZWMAbGV2ZWwgbm9kZSByZWMAc2FtZWhlYWQAc2FtZXRhaWwAdG9vIG1hbnkgKD4gJWQpIHNhbWV7aGVhZCx0YWlsfSBncm91cHMgZm9yIG5vZGUgJXMKAGNvbWJpQVIgPSAlbGYKACVsZiwlZAB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gaW1wbGVtZW50YXRpb24gZmxhd3MgLSBhdHRyaWJ1dGUgaWdub3JlZC4KAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABjbGFzczIuYwBtZXJnZV9jaGFpbgBFRF90b192aXJ0KG9yaWcpID09IE5VTEwAbWFrZV9jaGFpbgBFRF90b192aXJ0KG9yaWcpICE9IE5VTEwATkRfcmFuayhmcm9tKSA8IE5EX3JhbmsodG8pAGNsdXN0ZXIuYwBtYXBfcGF0aAAlcyB3YXMgYWxyZWFkeSBpbiBhIHJhbmtzZXQsIGRlbGV0ZWQgZnJvbSBjbHVzdGVyICVzCgBsaGVhZABsdGFpbAAlcyAtPiAlczogc3BsaW5lIHNpemUgPiAxIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBoZWFkIG5vdCBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgAlcyAtPiAlczogdGFpbCBpcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBiZXotPnNmbGFnAGNvbXBvdW5kLmMAbWFrZUNvbXBvdW5kRWRnZQBiZXotPmVmbGFnACVzIC0+ICVzOiB0YWlsIG5vdCBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgAlcyAtPiAlczogaGVhZCBpcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgBzZWdtZW50IFslcywlc10gZG9lcyBub3QgaW50ZXJzZWN0IGJveCBsbD0lcyx1cj0lcwoAYm94SW50ZXJzZWN0ZgAoJS41ZywlLjVnKQBjbHVzdGVyIG5hbWVkICVzIG5vdCBmb3VuZAoAY29uY2VudHJhdGU9dHJ1ZSBtYXkgbm90IHdvcmsgY29ycmVjdGx5LgoAcmVidWlsdGRfdmxpc3RzOiByYW5rIGxlYWQgJXMgbm90IGluIG9yZGVyICVkIG9mIHJhbmsgJWQKAGRlZ2VuZXJhdGUgY29uY2VudHJhdGVkIHJhbmsgJXMsJWQKAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAY29uYy5jAG1lcmdldmlydHVhbABkb3Q6IE91dCBvZiBtZW1vcnkKAE5EX291dCh2KS5zaXplID09IDIAZmxhdC5jAHNldGJvdW5kcwBHRF9taW5yYW5rKGcpID09IDAAYWJvbWluYXRpb24AbmVhdG9fbGF5b3V0AG5lYXRvAGZkcAB0d29waQBjaXJjbwBwYXRjaHdvcmsAb3NhZ2UAbm9wAG5vcDEAbm9wMgAlbGYsJWxmLCVsZiVjAG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZG91YmxlcwoAbm90cmFuc2xhdGUAbm9kZSAlcyBpbiBncmFwaCAlcyBoYXMgbm8gcG9zaXRpb24KAHMsJWxmLCVsZiVuACBlLCVsZiwlbGYlbgBwb3MgYXR0cmlidXRlIGZvciBlZGdlICglcywlcykgZG9lc24ndCBoYXZlIDNuKzEgcG9pbnRzCgAlbGYsJWxmJW4Ac3ludGF4IGVycm9yIGluIHBvcyBhdHRyaWJ1dGUgZm9yIGVkZ2UgKCVzLCVzKQoAJWxmLCVsZiwlbGYsJWxmAHN0YXJ0AHNlbGYAcmFuZG9tAG5vZGUgcG9zaXRpb25zIGFyZSBpZ25vcmVkIHVubGVzcyBzdGFydD1yYW5kb20KAGFzIHJlcXVpcmVkIGJ5IHRoZSAtbiBmbGFnCgBfbmVhdG9fY2MAZ3JhcGggJXMgaXMgZGlzY29ubmVjdGVkLiBIZW5jZSwgdGhlIGNpcmN1aXQgbW9kZWwKAEFsdGVybmF0aXZlbHksIGNvbnNpZGVyIHJ1bm5pbmcgbmVhdG8gdXNpbmcgLUdwYWNrPXRydWUgb3IgZGVjb21wb3NpbmcKAHRoZSBncmFwaCBpbnRvIGNvbm5lY3RlZCBjb21wb25lbnRzLgoAU29sdmluZyBtb2RlbCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoATkRfaWQobnApID09IGkAbmVhdG9pbml0LmMAbWFrZUdyYXBoRGF0YQBmIDwgZ3JhcGhbal0ubmVkZ2VzAGRmc0N5Y2xlAG1vZGVsICVkIHNtYXJ0X2luaXQgJWQgc3RyZXNzd3QgJWQgaXRlcmF0aW9ucyAlZCB0b2wgJWYKAGNvbnZlcnQgZ3JhcGg6IABtYWpvcml6YXRpb24KACVkIG5vZGVzICUuMmYgc2VjCgBsZXZlbHNnYXAAbGF5b3V0IGFib3J0ZWQKAHN0cmVzc3d0ACVzIGF0dHJpYnV0ZSB2YWx1ZSBtdXN0IGJlIDEgb3IgMiAtIGlnbm9yaW5nCgBtb2RlbABjaXJjdWl0AHN1YnNldABzaG9ydHBhdGgAbWRzAGVkZ2VzIGluIGdyYXBoICVzIGhhdmUgbm8gbGVuIGF0dHJpYnV0ZS4gSGVuY2UsIHRoZSBtZHMgbW9kZWwKAGlzIGluYXBwcm9wcmlhdGUuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAFVua25vd24gdmFsdWUgJXMgZm9yIGF0dHJpYnV0ZSAibW9kZWwiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAbW9kZQBLSwBtYWpvcgBoaWVyAElsbGVnYWwgdmFsdWUgJXMgZm9yIGF0dHJpYnV0ZSAibW9kZSIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBkaW1lbgBtYWtlU3BsaW5lOiBmYWlsZWQgdG8gbWFrZSBzcGxpbmUgZWRnZSAoJXMsJXMpCgBzcGxpbmUgJXMgJXMKAGIgPT0gbgBuZWF0b3NwbGluZXMuYwBtYWtlX2JhcnJpZXJzAHRoZSBib3VuZGluZyBib3hlcyBvZiBzb21lIG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHNvbWUgbm9kZXMgd2l0aCBtYXJnaW4gKCUuMDJmLCUuMDJmKSB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBwb2x5bGluZXMAbGluZSBzZWdtZW50cwBvcnRob2dvbmFsIGxpbmVzAENyZWF0aW5nIGVkZ2VzIHVzaW5nICVzCgBwb2x5bGluZSAlcyAlcwoAbWRzTW9kZWw6IGRlbHRhID0gJWYKAFNldHRpbmcgdXAgc3RyZXNzIGZ1bmN0aW9uAFNvbHZpbmcgbW9kZWw6IAAKZmluYWwgZSA9ICVmICVkIGl0ZXJhdGlvbnMgJS4yZiBzZWMKAERhbXBpbmcAZGVmYXVsdGRpc3QAIGluICVzIC0gc2V0dGluZyB0byAlLjAyZgoAYmFkIGVkZ2UgbGVuICIlcyIAU2V0dGluZyBpbml0aWFsIHBvc2l0aW9ucwoAc3RhcnQ9JXMgbm90IHN1cHBvcnRlZCB3aXRoIG1vZGU9c2VsZiAtIGlnbm9yZWQKAFNldHRpbmcgdXAgc3ByaW5nIG1vZGVsOiAAJS4yZiBzZWMKAApmaW5hbCBlID0gJWYAIQAgJWQlcyBpdGVyYXRpb25zICUuMmYgc2VjCgBNYXguIGl0ZXJhdGlvbnMgKCVkKSByZWFjaGVkIG9uIGdyYXBoICVzCgAlcyAlLjNmCgAlLjNmIABORF9oZWFwaW5kZXgodikgPCAwAHN0dWZmLmMAbmVhdG9fZW5xdWV1ZQBDYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRoczogAHNwZWNpZmllZCByb290IG5vZGUgIiVzIiB3YXMgbm90IGZvdW5kLgBVc2luZyBkZWZhdWx0IGNhbGN1bGF0aW9uIGZvciByb290IG5vZGUKAHJlcG9zaXRpb24gJXMKACVzIDogJWYgJWYKACVzIDogJWYgJWYgJWYgJWYKACAgAEdyYXBoICVzIGhhcyBhcnJheSBwYWNraW5nIHdpdGggdXNlciB2YWx1ZXMgYnV0IG5vICJzb3J0diIgYXR0cmlidXRlcyBhcmUgZGVmaW5lZC4AbGVuAHBpbgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAY29vcmRzAGRpbQBsYXlvdXQgJXMKAGVuZCAlcwoAaWR4ID09IHN6AGxheW91dC5jAGV4cGFuZENsdXN0ZXIAaSA9PSBkZWcAZ2V0RWRnZUxpc3QAX2RnXyVkAGRlcml2ZSBncmFwaCAlcyBvZiAlcwoAbm9kZSAiJXMiIGlzIGNvbnRhaW5lZCBpbiB0d28gbm9uLWNvbXBhcmFibGUgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAX3BvcnRfJXNfJXNfJXNfJWxkAF9wb3J0XyVzXyglZClfKCVkKV8lbGQAJWxmLCVsZiwlbGYsJWxmJWMAZ3JhcGggJXMsIGNvb3JkICVzLCBleHBlY3RlZCBmb3VyIGRvdWJsZXMKAHNwbGluZXMgYW5kIGNsdXN0ZXIgZWRnZXMgbm90IHN1cHBvcnRlZCAtIHVzaW5nIGxpbmUgc2VnbWVudHMKAG1heGl0ZXIASwBUMABmZHAgZG9lcyBub3Qgc3VwcG9ydCBzdGFydD1zZWxmIC0gaWdub3JpbmcKAHhMYXlvdXQgADk6cHJpc20AdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgBkZXJpdmVkAGluZm8Abm9ybWFsaXplAG92ZXJsYXAAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5yZWNvZ25pemVkIG92ZXJsYXAgdmFsdWUgIiVzIiAtIHVzaW5nIGZhbHNlCgBWb3Jvbm9pAG92ZXJsYXA6ICVzIHZhbHVlICVkIHNjYWxpbmcgJS4wNGYKAG92ZXJsYXBfc2NhbGluZwB2b3Jvbm9pAHNjYWxpbmcAdnBzYwBpcHNlcABvc2NhbGUAb2xkIHNjYWxpbmcAc2NhbGV4eQB4IGFuZCB5IHNjYWxpbmcAb3J0aG8Ab3J0aG9nb25hbCBjb25zdHJhaW50cwBvcnRob195eABvcnRob3h5AHh5IG9ydGhvZ29uYWwgY29uc3RyYWludHMAb3J0aG95eAB5eCBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAHBvcnRobwBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwBwb3J0aG9feXgAcG9ydGhveHkAeHkgcHNldWRvLW9ydGhvZ29uYWwgY29uc3RyYWludHMAcG9ydGhveXgAeXggcHNldWRvLW9ydGhvZ29uYWwgY29uc3RyYWludHMAcHJpc20AQWRqdXN0aW5nICVzIHVzaW5nICVzCgBVbmhhbmRsZWQgYWRqdXN0IG9wdGlvbiAlcwoATnVtYmVyIG9mIGl0ZXJhdGlvbnMgPSAlZAoATnVtYmVyIG9mIGluY3JlYXNlcyA9ICVkCgBvdmVybGFwIFslZF0gOiAlZAoAdm9yb19tYXJnaW4Ac2VwAGVzZXAATm9kZSBzZXBhcmF0aW9uOiBhZGQ9JWQgKCVmLCVmKQoAJWYsJWYAc2NhbGUgPSAoJS4wM2YsJS4wM2YpCgBFZGdlIHNlcGFyYXRpb246IGFkZD0lZCAoJWYsJWYpCgBDYWxjdWxhdGluZyBjaXJjdWl0IG1vZGVsAGNvbmp1Z2F0ZV9ncmFkaWVudDogdW5leHBlY3RlZCBsZW5ndGggMCB2ZWN0b3IKAENhbGN1bGF0aW5nIHN1YnNldCBtb2RlbABncmFwaCBpcyBkaXNjb25uZWN0ZWQuIEhlbmNlLCB0aGUgY2lyY3VpdCBtb2RlbAoAaXMgdW5kZWZpbmVkLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBDYWxjdWxhdGluZyBNRFMgbW9kZWwAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHMAOiAlLjJmIHNlYwoAU2V0dGluZyBpbml0aWFsIHBvc2l0aW9ucwA6ICUuMmYgc2VjAGNnAGRlbHRhIDw9IDB4RkZGRgBjb25zdHJhaW50LmMAbWtOQ29uc3RyYWludEcAdmcAY29tcHJlc3MgJWcgCgBzY2FsZSBieSAlZywlZyAKAGJlc3Rjb3N0IDwgSFVHRV9WQUwAY29tcHV0ZVNjYWxlWFkAdHJ5aW5nIHRvIGRlbGV0ZSBhIG5vbi1saW5lCgAKaW50ZXJzZWN0aW9uIGF0ICUuM2YgJS4zZgoAc2VnIyVkIDogKCUuM2YsICUuM2YpICglLjNmLCAlLjNmKQoAbWFrZUFkZFBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAbWFrZVBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAeCE9TlVMTABzbWFydF9pbmlfeC5jAElNRFNfZ2l2ZW5fZGltAGlsbC1jb25kaXRpb25lZAByb290ID0gJXMgbWF4IHN0ZXBzIHRvIHJvb3QgPSAlZAoAdHdvcGk6IHVzZSBvZiB3ZWlnaHQ9MCBjcmVhdGVzIGRpc2Nvbm5lY3RlZCBjb21wb25lbnQuCgBSYW5rIHNlcGFyYXRpb24gPSAAJS4wM2xmIABhcmVhAGluc2V0ACVzIGNvb3JkICUuNWcgJS41ZyBodCAlZiB3aWR0aCAlZgoAJS4wM2YAcmVjICVmICVmICVmICVmCgAlZiAtICVmICVmICVmICVmID0gJWYgKCVmICVmICVmICVmKQoAdHJ5aW5nIHRvIGFkZCB0byByZWN0IHslZiArLy0gJWYsICVmICsvLSAlZn0KAHRvdGFsIGFkZGVkIHNvIGZhciA9ICVkCgBhZGRpbmcgJWQgaXRlbXMsIHRvdGFsIGFyZWEgPSAlZiwgdyA9ICVmLCBhcmVhL3c9JWYKAGNvbXBvdW5kRWRnZXM6IGNvdWxkIG5vdCBjb25zdHJ1Y3Qgb2JzdGFjbGVzIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHBhY2sgdmFsdWUgJWQgaXMgc21hbGxlciB0aGFuIGVzZXAgKCUuMDNmLCUuMDNmKQoAc2VwIHZhbHVlICglLjAzZiwlLjAzZikgaXMgc21hbGxlciB0aGFuIGVzZXAgKCUuMDNmLCUuMDNmKQoAY2Mlc18lZABjYyVzKyVkAGNfY250ID09IDAAY29tcC5jAGZpbmRDQ29tcABncmlkKCVkLCVkKTogJXMKAG9uZWJsb2NrAG1pbmRpc3QAYXJ0aWN1bGF0aW9uX3BvcwByb290AHJvb3QgPSAlcwoAX2Jsb2NrXyVkAHMtPnN6ID4gMABibG9ja3RyZWUuYwBwb3AAYWN0dWFsAG5vZGVsaXN0LmMAaW5zZXJ0Tm9kZWxpc3QAX3NwYW5fJWQAX2Nsb25lXyVkAGlwAGRlZ2xpc3QuYwByZW1vdmVEZWdsaXN0AEVycm9yAFdhcm5pbmcAJXM6IAB1c2Vyb3V0OiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5CgBfQUdfc3RyZGF0YQBfQUdfZGF0YWRpY3QAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAJWMlbGQAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQBhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABfQUdfcGVuZGluZwBhZ3JlY29yZF9jYWxsYmFjayBvZiBhIGJhZCBvYmplY3QAcGVuZCBkaWN0b2YgYSBiYWQgb2JqZWN0AG1vdmUgdG8gZnJvbnQgbG9jayBpbmNvbnNpc3RlbmN5AFxcAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kACVzCgBmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkAGZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3cAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ19nZXRfbmV4dF9idWZmZXIoKQBpbnB1dABzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnACcgaW4gbGluZSAlZCBvZiAAIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKACVzAGxpbmUAJWQgJTFbIl0lbgBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnX2NyZWF0ZV9idWZmZXIoKQBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnZW5zdXJlX2J1ZmZlcl9zdGFjaygpADogACBpbiBsaW5lICVkACBuZWFyICcAIHNjYW5uaW5nIGEgcXVvdGVkIHN0cmluZyAobWlzc2luZyBlbmRxdW90ZT8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOiIAIHNjYW5uaW5nIGEgSFRNTCBzdHJpbmcgKG1pc3NpbmcgJz4nPyBiYWQgbmVzdGluZz8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOjwAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93ACIiAHN0cmljdABsaW5lbGVuZ3RoADsKACBba2V5PQBdACBbACwKAD0AXyVsZF9TVVNQRUNUAGRpAHN0cmljdCAAewoAXTsKABLu7hQJA+7+7u7uAe7u7gHu7gr+7hMZFe4TAe7u7u4LEe7u7u7u7u7u7gHu7hYJAQEdDxfu7hoXG+7uHO7u7u4BGfvu7u4B7hDu7h7u7u7uAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcRAgICAgICAgICAgICAhIQAhMCAhYCAgICAgICAgICAgICAgICAgICAgICAgICAhQCFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICDgIPAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0LAwQFDwcDDA0GDA0ODA0aFRYAAQADBw4GDwgMDRITKhARCRAvMBEyFxMNFBIuEhRBEzITLEAqQhksQkYiDA0OIw8JEBEKEBHJEBEtRUb8AQb2Dwf2JAIQES8wNk1OKCY7PCo2MTk9Py86QNhEMD4lN0M1Sys4SUwAAwkAAAABDgILDAgjJCU2Oz0ADRASGxYcEicyIhczHjwGBzUFDxEUGCkAEykAAAAAADcVKB0eACEmNB8wPhksABsAIBoqACs6Li8AMTg5LQACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIBAQMCAQADAgEAAQEAAQEBAwAYGRkZGhscHB0dHh4fHyAgISEiIiMkJCYnJSUoKCkpKSoqKysrLCwtLS4vLzAxMTIzNDY1Nzc3ODg4OTk6Ou7u/+7u7u7u7h8g7gDv7u7uDO7u7ggN7u7u+O7u7u7u7vXu/wMIBCEFCxITJxQVFikyQRcYGRosMzRCR0gbShwdLh5PHyBrZXkAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAJXM6JXMAQ291bGQgbm90IG9wZW4gIiVzIiBmb3Igd3JpdGluZyA6ICVzCgBObyBsaWJ6IHN1cHBvcnQuCgAuJWQAbm9uYW1lLmd2AGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCgBObyBsaWJ6IHN1cHBvcnQKAGd2cHJpbnRmOiAlcwoALTk5OTk5OTk5OTk5OTk5OS45OQBncmFwaHZpegAyLjQwLjEAMjAxNjEyMjUuMDMwNAByZW5kZXIAbGF5b3V0AGRldmljZQBsb2FkaW1hZ2UAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKAFVzaW5nICVzOiAlczolcwoAZ3Z1c2Vyc2hhcGUuYwBndnVzZXJzaGFwZV9maW5kAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgAlcyB3aGlsZSBvcGVuaW5nICVzCgB1cy0+ZgBndnVzZXJzaGFwZV9vcGVuACIlcyIgd2FzIG5vdCBmb3VuZCBhcyBhIGZpbGUgb3IgYXMgYSBzaGFwZSBsaWJyYXJ5IG1lbWJlcgoAL01lZGlhQm94AChbYS16XVthLXpBLVpdKik9IihbXiJdKikiAGNhbm5vdCBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAlcwAlbGYlMnMAcHQAdmlld0JveAAlbGYgJWxmICVsZiAlbGYAaW4AcHgAcGMAIgBjbQBtbQAlJUJvdW5kaW5nQm94OgAB0NHS09TV1tfY2QA8c3ZnAFdFQlAAd2VicAAobGliKQCJUE5HDQoaCgBwbmcAJSFQUy1BZG9iZS0AQk0AYm1wAEdJRjgAZ2lmAP/Y/+AAanBlZwAlUERGLQBwZGYAxdDTxgBlcHMAPD94bWwAeG1sAFJJRkYAcmlmZgAAAAEAAGljbwBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAJWQgJWQgJWQgJWQATGF5b3V0IHdhcyBub3QgZG9uZQoAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAGdjOiBPdXQgb2YgbWVtb3J5CgBfY2NfAG9yaWcAb3AAY2NvbXBzLmMAbWFwQ2x1c3QAY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AKCU0bGQpICU3bGQgbm9kZXMgJTdsZCBlZGdlcwoAICAgICAgICU3ZCBub2RlcyAlN2QgZWRnZXMgJTdsZCBjb21wb25lbnRzICVzCgBkZwBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAc29ydHYAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBhcnJheSBwYWNraW5nOiAlcyAlZCByb3dzICVkIGNvbHVtbnMKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgBzdGVwIHNpemUgPSAlZAoAcG9zWyVkXSAlZCAlZAoAY2MgKCVkIGNlbGxzKSBhdCAoJWQsJWQpICglZCwlZCkKAGNjICglZCBjZWxscykgYXQgKCVkLCVkKQoAJXMgbm8uIGNlbGxzICVkIFcgJWQgSCAlZAoAICAlZCAlZCBjZWxsCgBsaWJwYWNrOiBkaXNjID0gJWYgKCA8IDApCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgByb290ICVkICglZikgJWQgKCVmKQoAIHIxICVmIHIyICVmCgBwaW5mbwBwYWNrLmMAZ2V0UGFja0luZm8AICBtYXJnaW4gJWQKAHBhY2ttb2RlAHBhcnNlUGFja01vZGVJbmZvAGFycmF5AGFzcGVjdAAlZgBwYWNrIGluZm86CgAgIG1vZGUgICAlcwoAICBhc3BlY3QgJWYKACAgc2l6ZSAgICVkCgAgIGZsYWdzICAlZAoAdW5kZWZpbmVkAHBhY2sAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAbm9ybWFsAGNyb3cAdGVlAGRvdABpbnYAdmVlAHBlbgBtcHR5AGN1cnZlAGljdXJ2ZQBsAGhhbGYAaW52ZW1wdHkAX2JhY2tncm91bmQAX2RyYXdfAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAICAiJXMiCgBubyBtZW1vcnkgZnJvbSB6bWFsbG9jKCkKAG9iagBlbWl0LmMAcG9wX29ial9zdGF0ZQBjbHVzdAAlbGQAcGFnZSVkLCVkXwBUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAElsbGVnYWwgbGVuZ3RoIHZhbHVlIGluICIlcyIgY29sb3IgYXR0cmlidXRlIABsbnJjb2xvcnNjaGVtZQBlbWl0X2VkZ2VfbGFiZWwAJXMtJXMAZm9yd2FyZABiYWNrACAtPiAAIC0tIABpbiBlZGdlICVzJXMlcwoAbGFiZWxhbGlnbmVkAGVkZ2VocmVmAGVkZ2VVUkwAbGFiZWxocmVmAGxhYmVsVVJMAHRhaWxocmVmAHRhaWxVUkwAaGVhZGhyZWYAaGVhZFVSTABlZGdldGFyZ2V0AGxhYmVsdGFyZ2V0AHRhaWx0YXJnZXQAaGVhZHRhcmdldABlZGdldG9vbHRpcABsYWJlbHRvb2x0aXAAdGFpbHRvb2x0aXAAaGVhZHRvb2x0aXAAAW5lc3Rpbmcgbm90IGFsbG93ZWQgaW4gc3R5bGU6ICVzCgB1bm1hdGNoZWQgJyknIGluIHN0eWxlOiAlcwoAdHJ1bmNhdGluZyBzdHlsZSAnJXMnCgB1bm1hdGNoZWQgJygnIGluIHN0eWxlOiAlcwoAYWxsAGluIGNsdXN0ZXIgJXMKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAGxheW91dCB3YXMgbm90IGRvbmUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAcGFnZWRpcj0lcyBpZ25vcmVkCgB2aWV3cG9ydAAlbGYsJWxmLCVsZiwnJVteJ10nACVsZiwlbGYsJWxmLCVbXixdJXMAJWxmLCVsZiwlbGYsJWxmLCVsZgBvdXRwdXRvcmRlcgBvZGVzZmlyc3QAZGdlc2ZpcnN0AGxheWVycwBsYXllcnNlbGVjdABUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KAGxheWVyc2VwADoJIABsYXllcmxpc3RzZXAALABUaGUgY2hhcmFjdGVyICclYycgYXBwZWFycyBpbiBib3RoIHRoZSBsYXllcnNlcCBhbmQgbGF5ZXJsaXN0c2VwIGF0dHJpYnV0ZXMgLSBsYXllcmxpc3RzZXAgaWdub3JlZC4KAHBhZABCTABwYWdlZGlyAHNvbGlkAABzZXRsaW5ld2lkdGgAMQAAc3BsLT5zaXplID4gMABpbml0X3NwbGluZXNfYmIAYnouc2l6ZSA+IDAAYmV6aWVyX2JiAGJ6LnNpemUgJSAzID09IDEAJWxmAGZvbnRwYXRoAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAaW1hZ2VwYXRoAHF1YW50dW0AcmFua2RpcgBMUgBCVABSTABub2Rlc2VwAHJhbmtzZXAAZXF1YWxseQBzaG93Ym94ZXMAZm9udG5hbWVzAHNpemUAcGFnZQBjZW50ZXIAcm90YXRlAG9yaWVudGF0aW9uAGxhbmRzY2FwZQBjbHVzdGVycmFuawBjb25jZW50cmF0ZQBkcGkAcmVzb2x1dGlvbgBvcmRlcmluZwBmaWxsY29sb3IAZm9udHNpemUAZm9udG5hbWUAZm9udGNvbG9yAHhsYWJlbABwZW53aWR0aABwZXJpcGhlcmllcwBza2V3AGRpc3RvcnRpb24Abm9qdXN0aWZ5AGxheWVyAGdyb3VwAGNvbW1lbnQAdmVydGljZXMAegB3ZWlnaHQAbGFiZWxmbG9hdABkaXIAYXJyb3doZWFkAGFycm93dGFpbABoZWFkbGFiZWwAdGFpbGxhYmVsAGxhYmVsZm9udHNpemUAbGFiZWxmb250bmFtZQBsYWJlbGZvbnRjb2xvcgBsYWJlbGRpc3RhbmNlAGxhYmVsYW5nbGUAbWlubGVuAGRlY29yYXRlAGFycm93c2l6ZQBjb25zdHJhaW50AHRhaWxjbGlwAGhlYWRjbGlwAGxhYmVsanVzdABsb2NhbABnbG9iYWwAJWxmLCVsZiVjACVsZiVjAHJhdGlvAGF1dG8AY29tcHJlc3MAZXhwYW5kAGZpbGwAZ2QAcHMAc3ZnAGNoYXJzZXQAdXRmLTgAbGF0aW4tMQBsYXRpbjEAbDEASVNPLTg4NTktMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tSVItMTAwAGJpZy01AGJpZzUAdXRmOABVbnN1cHBvcnRlZCBjaGFyc2V0ICIlcyIgLSBhc3N1bWluZyB1dGYtOAoAVW5zdXBwb3J0ZWQgY2hhcnNldCB2YWx1ZSAlZAoAVVRGLTgAQklHLTUAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKAGtpbmQgPT0gTFRfTk9ORQBsYWJlbHMuYwBtYWtlX2xhYmVsAFxMAFxHAFxFAFxIAFxUACYjMTM7ACYjMTA7ACZxdW90OwAmIzE2MDsAJmFtcDsAJmd0OwAmIzM5OwAmIzQ1OwAmbHQ7ACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoAbmV0d29yayBzaW1wbGV4OiAAJWQgACVzJWQgbm9kZXMgJWQgZWRnZXMgJWQgaXRlciAlLjJmIHNlYwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbnMuYwBmZWFzaWJsZV90cmVlACFUUkVFX0VER0UoZSkAbWVyZ2VfdHJlZXMAKHIwLT5oZWFwX2luZGV4ID4gLTEpIHx8IChyMS0+aGVhcF9pbmRleCA+IC0xKQBTVHNldFVuaW9uAHItPmhlYXBfaW5kZXggPj0gMABhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAYWRkX3RyZWVfZWRnZTogZW1wdHkgb3V0ZWRnZSBsaXN0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBpbmVkZ2UgbGlzdAoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAAklcyAlZAoAc2VhcmNoc2l6ZQBncmFwaCAAIABub2RlIABzdG9wCgAlLjVnAHBvcwByZWN0cwB4bHAAbHAAaGVhZF9scAB0YWlsX2xwAGx3aWR0aABsaGVpZ2h0AGJiACUuNWcsJS41ZywlLjVnACwlLjVnACUuNWcsJS41ZwBzYW1wbGVwb2ludHMAJS41ZyAlLjVnAHMsJS41ZywlLjVnIABlLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjJmACUuNWcsJS41ZywlLjVnLCUuNWcgAC9wYXRoYm94IHsKICAgIC9YIGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC94IGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL3kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAbG9zdCAlcyAlcyBlZGdlCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGxhYmVsICVzAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGhlYWQgbGFiZWwgJXMAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMAZm9yY2VsYWJlbHMAJWQgb3V0IG9mICVkIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb3V0IG9mICVkIGV4dGVyaW9yIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb2JqcyAlZCB4bGFiZWxzIGZvcmNlPSVkIGJiPSglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKQoAb2JqZWN0cwoAIFslZF0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAHhsYWJlbHMKACBbJWRdICVwIHNldCAlZCAoJS4wMmYsJS4wMmYpICglLjAyZiwlLjAyZikgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAByZWFkAEJvdW5kaW5nQm94IG5vdCBmb3VuZCBpbiBlcHNmIGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBjYW4ndCBvcGVuIGxpYnJhcnkgZmlsZSAlcwoARU9GAEJFR0lOAEVORABUUkFJTEVSAC91c2VyX3NoYXBlXyVkIHsKACUlQmVnaW5Eb2N1bWVudDoKACUlRW5kRG9jdW1lbnQKAH0gYmluZCBkZWYKAFVURi04IGlucHV0IHVzZXMgbm9uLUxhdGluMSBjaGFyYWN0ZXJzIHdoaWNoIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgUG9zdFNjcmlwdCBkcml2ZXIKAGNhbm5vdCByZS1hbGxvY2F0ZSBwcwoAcm91dGVzcGxpbmVzaW5pdDogY2Fubm90IGFsbG9jYXRlIHBzCgByb3V0ZXNwbGluZXM6ICVkIGVkZ2VzLCAlZCBib3hlcyAlLjJmIHNlYwoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBpbGxlZ2FsIHZhbHVlcyBvZiBwcmV2ICVkIGFuZCBuZXh0ICVkLCBsaW5lICVkCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIFBzaG9ydGVzdHBhdGggZmFpbGVkCgBpbiByb3V0ZXNwbGluZXMsIFByb3V0ZXNwbGluZSBmYWlsZWQKAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBpbiBjaGVja3BhdGgsIGJveCAwIGhhcyBMTCBjb29yZCA+IFVSIGNvb3JkCgBpbiBjaGVja3BhdGgsIGJveCAlZCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3hlcyAlZCBhbmQgJWQgZG9uJ3QgdG91Y2gKAGluIGNoZWNrcGF0aCwgc3RhcnQgcG9ydCBub3QgaW4gZmlyc3QgYm94CgBpbiBjaGVja3BhdGgsIGVuZCBwb3J0IG5vdCBpbiBsYXN0IGJveAoAJWQgYm94ZXM6CgAlZCAoJS41ZywgJS41ZyksICglLjVnLCAlLjVnKQoAY29uc3RyYWluZWQAbm90IGNvbnN0cmFpbmVkAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgBzaWRlcyA9PSA0AHNoYXBlcy5jAHJvdW5kX2Nvcm5lcnMAYmFkIGxhYmVsIGZvcm1hdCAlcwoAXE4AbWFyZ2luACVsZiwlbGYAcmVndWxhcgBjdXN0b20Ac2hhcGVmaWxlADxuaWw+AE5vIG9yIGltcHJvcGVyIHNoYXBlZmlsZT0iJXMiIGZvciBub2RlICIlcyIKAE5vIG9yIGltcHJvcGVyIGltYWdlPSIlcyIgZm9yIG5vZGUgIiVzIgoAbGFiZWxsb2MAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAZXBzZgB1c2luZyAlcyBmb3IgdW5rbm93biBzaGFwZSAlcwoAcG9seWdvbgBvdmFsAGNpcmNsZQBwb2ludABlZ2cAdHJpYW5nbGUAcGxhaW50ZXh0AHBsYWluAGRpYW1vbmQAdHJhcGV6aXVtAHBhcmFsbGVsb2dyYW0AaG91c2UAcGVudGFnb24AaGV4YWdvbgBzZXB0YWdvbgBvY3RhZ29uAG5vdGUAdGFiAGZvbGRlcgBib3gzZABjb21wb25lbnQAY3lsaW5kZXIAcmVjdAByZWN0YW5nbGUAc3F1YXJlAGRvdWJsZWNpcmNsZQBkb3VibGVvY3RhZ29uAHRyaXBsZW9jdGFnb24AaW52dHJpYW5nbGUAaW52dHJhcGV6aXVtAGludmhvdXNlAHVuZGVybGluZQBNZGlhbW9uZABNc3F1YXJlAE1jaXJjbGUAcHJvbW90ZXIAY2RzAHRlcm1pbmF0b3IAdXRyAGluc3VsYXRvcgByaWJvc2l0ZQBybmFzdGFiAHByb3RlYXNlc2l0ZQBwcm90ZWluc3RhYgBwcmltZXJzaXRlAHJlc3RyaWN0aW9uc2l0ZQBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBhc3NlbWJseQBzaWduYXR1cmUAcnByb21vdGVyAGxhcnJvdwByYXJyb3cAbHByb21vdGVyAHJlY29yZABNcmVjb3JkAHN0YXIAIzgwODA4MAAjZmNmY2ZjACMzMDMwMzAAI2U4ZThlOAAjZTBlMGUwACNmMGYwZjAAIzEwMTAxMAAjZjhmOGY4AGluIG5vZGUgJXMKAHJvdW5kZWQAZGlhZ29uYWxzAHJhZGlhbABzdHJpcGVkAHdlZGdlZABfAG5vZGUgJXMsIHBvcnQgJXMsIHVucmVjb2duaXplZCBjb21wYXNzIHBvaW50ICclcycgLSBpZ25vcmVkCgBub2RlICVzLCBwb3J0ICVzIHVucmVjb2duaXplZAoAJS41ZyAlLjVnIHRyYW5zbGF0ZSBuZXdwYXRoIHVzZXJfc2hhcGVfJWQKAGludmlzAABmaWxsZWQAAHMAZQB3AHNwbGluZXMuYwBiZWdpbnBhdGgAUC0+ZW5kLnRoZXRhIDwgMiAqIE1fUEkAZW5kcGF0aABtYWtlU2VsZkVkZ2UAZ2V0c3BsaW5lcG9pbnRzOiBubyBzcGxpbmUgcG9pbnRzIGF2YWlsYWJsZSBmb3IgZWRnZSAoJXMsJXMpCgBwb2x5bGluZU1pZHBvaW50AHNwYW4tPmZvbnQAdGV4dHNwYW4uYwB0ZXh0c3Bhbl9zaXplAGZvbnQtPm5hbWUAZm9udG5hbWU6ICIlcyIgcmVzb2x2ZWQgdG86ICVzCgBmb250bmFtZTogdW5hYmxlIHRvIHJlc29sdmUgIiVzIgoAY291cgBhcmlhbABoZWx2ZXRpY2EAW2ludGVybmFsIHRpbWVzXQBbaW50ZXJuYWwgY291cmllcl0AW2ludGVybmFsIGFyaWFsXQBBdmFudEdhcmRlLUJvb2sAVVJXIEdvdGhpYyBMAGJvb2sAc2Fucy1TZXJpZgBBdmFudEdhcmRlLUJvb2tPYmxpcXVlAG9ibGlxdWUAaXRhbGljAEF2YW50R2FyZGUtRGVtaQBkZW1pAEF2YW50R2FyZGUtRGVtaU9ibGlxdWUAQm9va21hbi1EZW1pAFVSVyBCb29rbWFuIEwAc2VyaWYAQm9va21hbi1EZW1pSXRhbGljAEJvb2ttYW4tTGlnaHQAbGlnaHQAQm9va21hbi1MaWdodEl0YWxpYwBDb3VyaWVyAG1vbm9zcGFjZQBDb3VyaWVyLUJvbGQAQ291cmllci1Cb2xkT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhAEhlbHZldGljYS1Cb2xkAEhlbHZldGljYS1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93AGNvbmRlbnNlZABIZWx2ZXRpY2EtTmFycm93LUJvbGQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUATmV3Q2VudHVyeVNjaGxiay1Cb2xkAENlbnR1cnkgU2Nob29sYm9vayBMAE5ld0NlbnR1cnlTY2hsYmstQm9sZEl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLVJvbWFuAHJvbWFuAFBhbGF0aW5vLUJvbGQAUGFsYXRpbm8gTGlub3R5cGUAUGFsYXRpbm8tQm9sZEl0YWxpYwBQYWxhdGluby1JdGFsaWMAUGFsYXRpbm8tUm9tYW4AU3ltYm9sAGZhbnRhc3kAVGltZXMtQm9sZABUaW1lcwBUaW1lcy1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAFVSVyBDaGFuY2VyeSBMAG1lZGl1bQBaYXBmRGluZ2JhdHMARGluZ2JhdHMAaW5wdXRzY2FsZQBubwB0cnVlAHllcwB1dGlscy5jAHUgPT0gVUZfZmluZCh1KQBVRl9zZXRuYW1lAAFmaWxlIGxvYWRpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgY29udGFpbnMgU0VSVkVSX05BTUU9IiVzIgphbmQgdGhlIEdWX0ZJTEVfUEFUSCB2YXJpYWJsZSBpcyB1bnNldCBvciBlbXB0eS4KAFBhdGggcHJvdmlkZWQgdG8gZmlsZTogIiVzIiBoYXMgYmVlbiBpZ25vcmVkIGJlY2F1c2UgZmlsZXMgYXJlIG9ubHkgcGVybWl0dGVkIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBkaXJlY3RvcmllcyBpbiAiJXMiIHdoZW4gcnVubmluZyBpbiBhbiBodHRwIHNlcnZlci4KACVzJXMlcwAvADoAZWxsaXBzZQBUaW1lcy1Sb21hbgBjbHVzdGVyAF9fY2x1c3Rlcm5vZGVzAGNsdXN0ZXIgY3ljbGUgJXMgLS0gJXMgbm90IHN1cHBvcnRlZAoAdGFpbCBjbHVzdGVyICVzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAGhlYWQgY2x1c3RlciAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgB0YWlsIG5vZGUgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAaGVhZCBub2RlICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAF9fAGxhYmVsAHNoYXBlAGJveABUd28gY2x1c3RlcnMgbmFtZWQgJXMgLSB0aGUgc2Vjb25kIHdpbGwgYmUgaWdub3JlZAoAbWFwTgBBRWxpZwBBYWN1dGUAQWNpcmMAQWdyYXZlAEFscGhhAEFyaW5nAEF0aWxkZQBBdW1sAEJldGEAQ2NlZGlsAENoaQBEYWdnZXIARGVsdGEARVRIAEVhY3V0ZQBFY2lyYwBFZ3JhdmUARXBzaWxvbgBFdGEARXVtbABHYW1tYQBJYWN1dGUASWNpcmMASWdyYXZlAElvdGEASXVtbABLYXBwYQBMYW1iZGEATXUATnRpbGRlAE51AE9FbGlnAE9hY3V0ZQBPY2lyYwBPZ3JhdmUAT21lZ2EAT21pY3JvbgBPc2xhc2gAT3RpbGRlAE91bWwAUGhpAFBpAFByaW1lAFBzaQBSaG8AU2Nhcm9uAFNpZ21hAFRIT1JOAFRhdQBUaGV0YQBVYWN1dGUAVWNpcmMAVWdyYXZlAFVwc2lsb24AVXVtbABYaQBZYWN1dGUAWXVtbABaZXRhAGFhY3V0ZQBhY2lyYwBhY3V0ZQBhZWxpZwBhZ3JhdmUAYWxlZnN5bQBhbHBoYQBhbXAAYW5kAGFuZwBhcmluZwBhc3ltcABhdGlsZGUAYXVtbABiZHF1bwBiZXRhAGJydmJhcgBidWxsAGNhcABjY2VkaWwAY2VkaWwAY2VudABjaGkAY2lyYwBjbHVicwBjb25nAGNvcHkAY3JhcnIAY3VwAGN1cnJlbgBkQXJyAGRhZ2dlcgBkYXJyAGRlZwBkZWx0YQBkaWFtcwBkaXZpZGUAZWFjdXRlAGVjaXJjAGVncmF2ZQBlbXB0eQBlbXNwAGVuc3AAZXBzaWxvbgBlcXVpdgBldGEAZXRoAGV1bWwAZXVybwBleGlzdABmbm9mAGZvcmFsbABmcmFjMTIAZnJhYzE0AGZyYWMzNABmcmFzbABnYW1tYQBnZQBndABoQXJyAGhhcnIAaGVhcnRzAGhlbGxpcABpYWN1dGUAaWNpcmMAaWV4Y2wAaWdyYXZlAGltYWdlAGluZmluAGludABpb3RhAGlxdWVzdABpc2luAGl1bWwAa2FwcGEAbEFycgBsYW1iZGEAbGFuZwBsYXF1bwBsYXJyAGxjZWlsAGxkcXVvAGxlAGxmbG9vcgBsb3dhc3QAbG96AGxybQBsc2FxdW8AbHNxdW8AbHQAbWFjcgBtZGFzaABtaWNybwBtaWRkb3QAbXUAbmFibGEAbmJzcABuZGFzaABuZQBuaQBub3QAbm90aW4AbnN1YgBudGlsZGUAbnUAb2FjdXRlAG9jaXJjAG9lbGlnAG9ncmF2ZQBvbGluZQBvbWVnYQBvbWljcm9uAG9wbHVzAG9yAG9yZGYAb3JkbQBvc2xhc2gAb3RpbGRlAG90aW1lcwBvdW1sAHBhcmEAcGFydABwZXJtaWwAcGVycABwaGkAcGkAcGl2AHBsdXNtbgBwb3VuZABwcmltZQBwcm9kAHByb3AAcHNpAHF1b3QAckFycgByYWRpYwByYW5nAHJhcXVvAHJhcnIAcmNlaWwAcmRxdW8AcmVhbAByZWcAcmZsb29yAHJobwBybG0AcnNhcXVvAHJzcXVvAHNicXVvAHNjYXJvbgBzZG90AHNlY3QAc2h5AHNpZ21hAHNpZ21hZgBzaW0Ac3BhZGVzAHN1YgBzdWJlAHN1bQBzdXAAc3VwMQBzdXAyAHN1cDMAc3VwZQBzemxpZwB0YXUAdGhlcmU0AHRoZXRhAHRoZXRhc3ltAHRoaW5zcAB0aG9ybgB0aWxkZQB0aW1lcwB0cmFkZQB1QXJyAHVhY3V0ZQB1YXJyAHVjaXJjAHVncmF2ZQB1bWwAdXBzaWgAdXBzaWxvbgB1dW1sAHdlaWVycAB4aQB5YWN1dGUAeWVuAHl1bWwAemV0YQB6d2oAenduagBVVEY4IGNvZGVzID4gNCBieXRlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgKGdyYXBoICVzKSAtIHRyZWF0ZWQgYXMgTGF0aW4tMS4gUGVyaGFwcyAiLUdjaGFyc2V0PWxhdGluMSIgaXMgbmVlZGVkPwoASW52YWxpZCAlZC1ieXRlIFVURjggZm91bmQgaW4gaW5wdXQgb2YgZ3JhcGggJXMgLSB0cmVhdGVkIGFzIExhdGluLTEuIFBlcmhhcHMgIi1HY2hhcnNldD1sYXRpbjEiIGlzIG5lZWRlZD8KAGJ6LnNpemUAb3ZlcmxhcF9iZXppZXIAdXJ2ZWQAb21wb3VuZABhbHNlAGluZQBvbmUAbwBydGhvAG9seWxpbmUAcGxpbmUAcnVlAGVzAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAc3BsaW5lcwBvZGIAT3J0aG9nb25hbCBlZGdlcyBkbyBub3QgY3VycmVudGx5IGhhbmRsZSBlZGdlIGxhYmVscy4gVHJ5IHVzaW5nIHhsYWJlbHMuCgBvcnRobyAlcyAlcwoAY2hhbmkAb3J0aG8uYwBjaGFuU2VhcmNoAGNwACUlIVBTLUFkb2JlLTIuMAolJSUlQm91bmRpbmdCb3g6IChhdGVuZCkKL3BvaW50IHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgbmV3cGF0aAogIFggWSAzIDAgMzYwIGFyYyBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgovbm9kZSB7CiAvdSBleGNoIGRlZgogL3IgZXhjaCBkZWYKIC9kIGV4Y2ggZGVmCiAvbCBleGNoIGRlZgogbmV3cGF0aCBsIGQgbW92ZXRvCiByIGQgbGluZXRvIHIgdSBsaW5ldG8gbCB1IGxpbmV0bwogY2xvc2VwYXRoIGZpbGwKfSBkZWYKCgAlZCAlZCB0cmFuc2xhdGUKADAuOCAwLjggMC44IHNldHJnYmNvbG9yCgBzaG93cGFnZQolJSUlVHJhaWxlcgolJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgBuZXdwYXRoICVkICVkIG1vdmV0bwoAJWQgJWQgbGluZXRvCgAlZCAlZCBsaW5ldG8gc3Ryb2tlCgBjaGFubmVsICVkICglZiwlZikKACAtPgoAICAgICAAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAQl9SSUdIVABCX0RPV04AQl9MRUZUAEJfVVAAQl9OT0RFAHNlZwBuZXh0X3NlZwBkZWNpZGVfcG9pbnQAaW5jb21wYXJhYmxlIHNlZ21lbnRzICEhIC0tIEFib3J0aW5nCgBzMS0+Y29tbV9jb29yZD09czItPmNvbW1fY29vcmQAaXNfcGFyYWxsZWwAZ3JhcGggRyB7CgAgbm9kZVtzaGFwZT1wb2ludF0KACAgJWQgW3Bvcz0iJWQsJWQiXQoAICAlZCAtLSAlZFtsZW49IiVmIl0KAH0KAGNvbG9yICVzACVzIGlzIG5vdCBhIGtub3duIGNvbG9yLgoAZXJyb3IgaW4gY29seGxhdGUoKQoAc29saWQAaW52aXNpYmxlAGJvbGQAc2V0bGluZXdpZHRoAGZpbGxlZAB1bmZpbGxlZAB0YXBlcmVkAGd2cmVuZGVyX3NldF9zdHlsZTogdW5zdXBwb3J0ZWQgc3R5bGUgJXMgLSBpZ25vcmluZwoAZ3ZyZW5kZXIuYwBndnJlbmRlcl91c2Vyc2hhcGUAbmFtZQBuYW1lWzBdAGJvdGgAam9iAGd2bG9hZGltYWdlLmMAZ3Zsb2FkaW1hZ2UAdXMAdXMtPm5hbWUAdXMtPm5hbWVbMF0ATm8gbG9hZGltYWdlIHBsdWdpbiBmb3IgIiVzIgoAUQBMZWZ0AEtQX0xlZnQAUmlnaHQAS1BfUmlnaHQAVXAAS1BfVXAARG93bgBLUF9Eb3duAHBsdXMAS1BfQWRkAG1pbnVzAEtQX1N1YnRyYWN0AEYAZWRnZQB0YWlscG9ydABoZWFkcG9ydABrZXkAVVJMAG5vZGUAZGlncmFwaABncmFwaABzdWJncmFwaABfTFRYX2xpYnJhcnkAdGV4dGxheW91dABvYmpwLT5sYmwAeGxhYmVscy5jAHhsYWRqdXN0AHhsaW50ZXJzZWN0aW9ucwBscCAhPSBjbHAAZ2V0aW50cnN4aQBvYmpwMS0+c3oueCA9PSAwICYmIG9ianAxLT5zei55ID09IDAAbGJsZW5jbG9zaW5nAHZwAHhsaGR4dW5sb2FkAHNpemU9PWZyZWVkAHJlY3QuYm91bmRhcnlbMl0gPCBJTlRfTUFYAG9ianBscG1rcwByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWABvdXQgb2YgbWVtb3J5CgAjJTJ4JTJ4JTJ4JTJ4ACVsZiVsZiVsZgAvYWNjZW50My8xAC9hY2NlbnQzLzIAL2FjY2VudDMvMwAvYWNjZW50NC8xAC9hY2NlbnQ0LzIAL2FjY2VudDQvMwAvYWNjZW50NC80AC9hY2NlbnQ1LzEAL2FjY2VudDUvMgAvYWNjZW50NS8zAC9hY2NlbnQ1LzQAL2FjY2VudDUvNQAvYWNjZW50Ni8xAC9hY2NlbnQ2LzIAL2FjY2VudDYvMwAvYWNjZW50Ni80AC9hY2NlbnQ2LzUAL2FjY2VudDYvNgAvYWNjZW50Ny8xAC9hY2NlbnQ3LzIAL2FjY2VudDcvMwAvYWNjZW50Ny80AC9hY2NlbnQ3LzUAL2FjY2VudDcvNgAvYWNjZW50Ny83AC9hY2NlbnQ4LzEAL2FjY2VudDgvMgAvYWNjZW50OC8zAC9hY2NlbnQ4LzQAL2FjY2VudDgvNQAvYWNjZW50OC82AC9hY2NlbnQ4LzcAL2FjY2VudDgvOAAvYmx1ZXMzLzEAL2JsdWVzMy8yAC9ibHVlczMvMwAvYmx1ZXM0LzEAL2JsdWVzNC8yAC9ibHVlczQvMwAvYmx1ZXM0LzQAL2JsdWVzNS8xAC9ibHVlczUvMgAvYmx1ZXM1LzMAL2JsdWVzNS80AC9ibHVlczUvNQAvYmx1ZXM2LzEAL2JsdWVzNi8yAC9ibHVlczYvMwAvYmx1ZXM2LzQAL2JsdWVzNi81AC9ibHVlczYvNgAvYmx1ZXM3LzEAL2JsdWVzNy8yAC9ibHVlczcvMwAvYmx1ZXM3LzQAL2JsdWVzNy81AC9ibHVlczcvNgAvYmx1ZXM3LzcAL2JsdWVzOC8xAC9ibHVlczgvMgAvYmx1ZXM4LzMAL2JsdWVzOC80AC9ibHVlczgvNQAvYmx1ZXM4LzYAL2JsdWVzOC83AC9ibHVlczgvOAAvYmx1ZXM5LzEAL2JsdWVzOS8yAC9ibHVlczkvMwAvYmx1ZXM5LzQAL2JsdWVzOS81AC9ibHVlczkvNgAvYmx1ZXM5LzcAL2JsdWVzOS84AC9ibHVlczkvOQAvYnJiZzEwLzEAL2JyYmcxMC8xMAAvYnJiZzEwLzIAL2JyYmcxMC8zAC9icmJnMTAvNAAvYnJiZzEwLzUAL2JyYmcxMC82AC9icmJnMTAvNwAvYnJiZzEwLzgAL2JyYmcxMC85AC9icmJnMTEvMQAvYnJiZzExLzEwAC9icmJnMTEvMTEAL2JyYmcxMS8yAC9icmJnMTEvMwAvYnJiZzExLzQAL2JyYmcxMS81AC9icmJnMTEvNgAvYnJiZzExLzcAL2JyYmcxMS84AC9icmJnMTEvOQAvYnJiZzMvMQAvYnJiZzMvMgAvYnJiZzMvMwAvYnJiZzQvMQAvYnJiZzQvMgAvYnJiZzQvMwAvYnJiZzQvNAAvYnJiZzUvMQAvYnJiZzUvMgAvYnJiZzUvMwAvYnJiZzUvNAAvYnJiZzUvNQAvYnJiZzYvMQAvYnJiZzYvMgAvYnJiZzYvMwAvYnJiZzYvNAAvYnJiZzYvNQAvYnJiZzYvNgAvYnJiZzcvMQAvYnJiZzcvMgAvYnJiZzcvMwAvYnJiZzcvNAAvYnJiZzcvNQAvYnJiZzcvNgAvYnJiZzcvNwAvYnJiZzgvMQAvYnJiZzgvMgAvYnJiZzgvMwAvYnJiZzgvNAAvYnJiZzgvNQAvYnJiZzgvNgAvYnJiZzgvNwAvYnJiZzgvOAAvYnJiZzkvMQAvYnJiZzkvMgAvYnJiZzkvMwAvYnJiZzkvNAAvYnJiZzkvNQAvYnJiZzkvNgAvYnJiZzkvNwAvYnJiZzkvOAAvYnJiZzkvOQAvYnVnbjMvMQAvYnVnbjMvMgAvYnVnbjMvMwAvYnVnbjQvMQAvYnVnbjQvMgAvYnVnbjQvMwAvYnVnbjQvNAAvYnVnbjUvMQAvYnVnbjUvMgAvYnVnbjUvMwAvYnVnbjUvNAAvYnVnbjUvNQAvYnVnbjYvMQAvYnVnbjYvMgAvYnVnbjYvMwAvYnVnbjYvNAAvYnVnbjYvNQAvYnVnbjYvNgAvYnVnbjcvMQAvYnVnbjcvMgAvYnVnbjcvMwAvYnVnbjcvNAAvYnVnbjcvNQAvYnVnbjcvNgAvYnVnbjcvNwAvYnVnbjgvMQAvYnVnbjgvMgAvYnVnbjgvMwAvYnVnbjgvNAAvYnVnbjgvNQAvYnVnbjgvNgAvYnVnbjgvNwAvYnVnbjgvOAAvYnVnbjkvMQAvYnVnbjkvMgAvYnVnbjkvMwAvYnVnbjkvNAAvYnVnbjkvNQAvYnVnbjkvNgAvYnVnbjkvNwAvYnVnbjkvOAAvYnVnbjkvOQAvYnVwdTMvMQAvYnVwdTMvMgAvYnVwdTMvMwAvYnVwdTQvMQAvYnVwdTQvMgAvYnVwdTQvMwAvYnVwdTQvNAAvYnVwdTUvMQAvYnVwdTUvMgAvYnVwdTUvMwAvYnVwdTUvNAAvYnVwdTUvNQAvYnVwdTYvMQAvYnVwdTYvMgAvYnVwdTYvMwAvYnVwdTYvNAAvYnVwdTYvNQAvYnVwdTYvNgAvYnVwdTcvMQAvYnVwdTcvMgAvYnVwdTcvMwAvYnVwdTcvNAAvYnVwdTcvNQAvYnVwdTcvNgAvYnVwdTcvNwAvYnVwdTgvMQAvYnVwdTgvMgAvYnVwdTgvMwAvYnVwdTgvNAAvYnVwdTgvNQAvYnVwdTgvNgAvYnVwdTgvNwAvYnVwdTgvOAAvYnVwdTkvMQAvYnVwdTkvMgAvYnVwdTkvMwAvYnVwdTkvNAAvYnVwdTkvNQAvYnVwdTkvNgAvYnVwdTkvNwAvYnVwdTkvOAAvYnVwdTkvOQAvZGFyazIzLzEAL2RhcmsyMy8yAC9kYXJrMjMvMwAvZGFyazI0LzEAL2RhcmsyNC8yAC9kYXJrMjQvMwAvZGFyazI0LzQAL2RhcmsyNS8xAC9kYXJrMjUvMgAvZGFyazI1LzMAL2RhcmsyNS80AC9kYXJrMjUvNQAvZGFyazI2LzEAL2RhcmsyNi8yAC9kYXJrMjYvMwAvZGFyazI2LzQAL2RhcmsyNi81AC9kYXJrMjYvNgAvZGFyazI3LzEAL2RhcmsyNy8yAC9kYXJrMjcvMwAvZGFyazI3LzQAL2RhcmsyNy81AC9kYXJrMjcvNgAvZGFyazI3LzcAL2RhcmsyOC8xAC9kYXJrMjgvMgAvZGFyazI4LzMAL2RhcmsyOC80AC9kYXJrMjgvNQAvZGFyazI4LzYAL2RhcmsyOC83AC9kYXJrMjgvOAAvZ25idTMvMQAvZ25idTMvMgAvZ25idTMvMwAvZ25idTQvMQAvZ25idTQvMgAvZ25idTQvMwAvZ25idTQvNAAvZ25idTUvMQAvZ25idTUvMgAvZ25idTUvMwAvZ25idTUvNAAvZ25idTUvNQAvZ25idTYvMQAvZ25idTYvMgAvZ25idTYvMwAvZ25idTYvNAAvZ25idTYvNQAvZ25idTYvNgAvZ25idTcvMQAvZ25idTcvMgAvZ25idTcvMwAvZ25idTcvNAAvZ25idTcvNQAvZ25idTcvNgAvZ25idTcvNwAvZ25idTgvMQAvZ25idTgvMgAvZ25idTgvMwAvZ25idTgvNAAvZ25idTgvNQAvZ25idTgvNgAvZ25idTgvNwAvZ25idTgvOAAvZ25idTkvMQAvZ25idTkvMgAvZ25idTkvMwAvZ25idTkvNAAvZ25idTkvNQAvZ25idTkvNgAvZ25idTkvNwAvZ25idTkvOAAvZ25idTkvOQAvZ3JlZW5zMy8xAC9ncmVlbnMzLzIAL2dyZWVuczMvMwAvZ3JlZW5zNC8xAC9ncmVlbnM0LzIAL2dyZWVuczQvMwAvZ3JlZW5zNC80AC9ncmVlbnM1LzEAL2dyZWVuczUvMgAvZ3JlZW5zNS8zAC9ncmVlbnM1LzQAL2dyZWVuczUvNQAvZ3JlZW5zNi8xAC9ncmVlbnM2LzIAL2dyZWVuczYvMwAvZ3JlZW5zNi80AC9ncmVlbnM2LzUAL2dyZWVuczYvNgAvZ3JlZW5zNy8xAC9ncmVlbnM3LzIAL2dyZWVuczcvMwAvZ3JlZW5zNy80AC9ncmVlbnM3LzUAL2dyZWVuczcvNgAvZ3JlZW5zNy83AC9ncmVlbnM4LzEAL2dyZWVuczgvMgAvZ3JlZW5zOC8zAC9ncmVlbnM4LzQAL2dyZWVuczgvNQAvZ3JlZW5zOC82AC9ncmVlbnM4LzcAL2dyZWVuczgvOAAvZ3JlZW5zOS8xAC9ncmVlbnM5LzIAL2dyZWVuczkvMwAvZ3JlZW5zOS80AC9ncmVlbnM5LzUAL2dyZWVuczkvNgAvZ3JlZW5zOS83AC9ncmVlbnM5LzgAL2dyZWVuczkvOQAvZ3JleXMzLzEAL2dyZXlzMy8yAC9ncmV5czMvMwAvZ3JleXM0LzEAL2dyZXlzNC8yAC9ncmV5czQvMwAvZ3JleXM0LzQAL2dyZXlzNS8xAC9ncmV5czUvMgAvZ3JleXM1LzMAL2dyZXlzNS80AC9ncmV5czUvNQAvZ3JleXM2LzEAL2dyZXlzNi8yAC9ncmV5czYvMwAvZ3JleXM2LzQAL2dyZXlzNi81AC9ncmV5czYvNgAvZ3JleXM3LzEAL2dyZXlzNy8yAC9ncmV5czcvMwAvZ3JleXM3LzQAL2dyZXlzNy81AC9ncmV5czcvNgAvZ3JleXM3LzcAL2dyZXlzOC8xAC9ncmV5czgvMgAvZ3JleXM4LzMAL2dyZXlzOC80AC9ncmV5czgvNQAvZ3JleXM4LzYAL2dyZXlzOC83AC9ncmV5czgvOAAvZ3JleXM5LzEAL2dyZXlzOS8yAC9ncmV5czkvMwAvZ3JleXM5LzQAL2dyZXlzOS81AC9ncmV5czkvNgAvZ3JleXM5LzcAL2dyZXlzOS84AC9ncmV5czkvOQAvb3JhbmdlczMvMQAvb3JhbmdlczMvMgAvb3JhbmdlczMvMwAvb3JhbmdlczQvMQAvb3JhbmdlczQvMgAvb3JhbmdlczQvMwAvb3JhbmdlczQvNAAvb3JhbmdlczUvMQAvb3JhbmdlczUvMgAvb3JhbmdlczUvMwAvb3JhbmdlczUvNAAvb3JhbmdlczUvNQAvb3JhbmdlczYvMQAvb3JhbmdlczYvMgAvb3JhbmdlczYvMwAvb3JhbmdlczYvNAAvb3JhbmdlczYvNQAvb3JhbmdlczYvNgAvb3JhbmdlczcvMQAvb3JhbmdlczcvMgAvb3JhbmdlczcvMwAvb3JhbmdlczcvNAAvb3JhbmdlczcvNQAvb3JhbmdlczcvNgAvb3JhbmdlczcvNwAvb3JhbmdlczgvMQAvb3JhbmdlczgvMgAvb3JhbmdlczgvMwAvb3JhbmdlczgvNAAvb3JhbmdlczgvNQAvb3JhbmdlczgvNgAvb3JhbmdlczgvNwAvb3JhbmdlczgvOAAvb3JhbmdlczkvMQAvb3JhbmdlczkvMgAvb3JhbmdlczkvMwAvb3JhbmdlczkvNAAvb3JhbmdlczkvNQAvb3JhbmdlczkvNgAvb3JhbmdlczkvNwAvb3JhbmdlczkvOAAvb3JhbmdlczkvOQAvb3JyZDMvMQAvb3JyZDMvMgAvb3JyZDMvMwAvb3JyZDQvMQAvb3JyZDQvMgAvb3JyZDQvMwAvb3JyZDQvNAAvb3JyZDUvMQAvb3JyZDUvMgAvb3JyZDUvMwAvb3JyZDUvNAAvb3JyZDUvNQAvb3JyZDYvMQAvb3JyZDYvMgAvb3JyZDYvMwAvb3JyZDYvNAAvb3JyZDYvNQAvb3JyZDYvNgAvb3JyZDcvMQAvb3JyZDcvMgAvb3JyZDcvMwAvb3JyZDcvNAAvb3JyZDcvNQAvb3JyZDcvNgAvb3JyZDcvNwAvb3JyZDgvMQAvb3JyZDgvMgAvb3JyZDgvMwAvb3JyZDgvNAAvb3JyZDgvNQAvb3JyZDgvNgAvb3JyZDgvNwAvb3JyZDgvOAAvb3JyZDkvMQAvb3JyZDkvMgAvb3JyZDkvMwAvb3JyZDkvNAAvb3JyZDkvNQAvb3JyZDkvNgAvb3JyZDkvNwAvb3JyZDkvOAAvb3JyZDkvOQAvcGFpcmVkMTAvMQAvcGFpcmVkMTAvMTAAL3BhaXJlZDEwLzIAL3BhaXJlZDEwLzMAL3BhaXJlZDEwLzQAL3BhaXJlZDEwLzUAL3BhaXJlZDEwLzYAL3BhaXJlZDEwLzcAL3BhaXJlZDEwLzgAL3BhaXJlZDEwLzkAL3BhaXJlZDExLzEAL3BhaXJlZDExLzEwAC9wYWlyZWQxMS8xMQAvcGFpcmVkMTEvMgAvcGFpcmVkMTEvMwAvcGFpcmVkMTEvNAAvcGFpcmVkMTEvNQAvcGFpcmVkMTEvNgAvcGFpcmVkMTEvNwAvcGFpcmVkMTEvOAAvcGFpcmVkMTEvOQAvcGFpcmVkMTIvMQAvcGFpcmVkMTIvMTAAL3BhaXJlZDEyLzExAC9wYWlyZWQxMi8xMgAvcGFpcmVkMTIvMgAvcGFpcmVkMTIvMwAvcGFpcmVkMTIvNAAvcGFpcmVkMTIvNQAvcGFpcmVkMTIvNgAvcGFpcmVkMTIvNwAvcGFpcmVkMTIvOAAvcGFpcmVkMTIvOQAvcGFpcmVkMy8xAC9wYWlyZWQzLzIAL3BhaXJlZDMvMwAvcGFpcmVkNC8xAC9wYWlyZWQ0LzIAL3BhaXJlZDQvMwAvcGFpcmVkNC80AC9wYWlyZWQ1LzEAL3BhaXJlZDUvMgAvcGFpcmVkNS8zAC9wYWlyZWQ1LzQAL3BhaXJlZDUvNQAvcGFpcmVkNi8xAC9wYWlyZWQ2LzIAL3BhaXJlZDYvMwAvcGFpcmVkNi80AC9wYWlyZWQ2LzUAL3BhaXJlZDYvNgAvcGFpcmVkNy8xAC9wYWlyZWQ3LzIAL3BhaXJlZDcvMwAvcGFpcmVkNy80AC9wYWlyZWQ3LzUAL3BhaXJlZDcvNgAvcGFpcmVkNy83AC9wYWlyZWQ4LzEAL3BhaXJlZDgvMgAvcGFpcmVkOC8zAC9wYWlyZWQ4LzQAL3BhaXJlZDgvNQAvcGFpcmVkOC82AC9wYWlyZWQ4LzcAL3BhaXJlZDgvOAAvcGFpcmVkOS8xAC9wYWlyZWQ5LzIAL3BhaXJlZDkvMwAvcGFpcmVkOS80AC9wYWlyZWQ5LzUAL3BhaXJlZDkvNgAvcGFpcmVkOS83AC9wYWlyZWQ5LzgAL3BhaXJlZDkvOQAvcGFzdGVsMTMvMQAvcGFzdGVsMTMvMgAvcGFzdGVsMTMvMwAvcGFzdGVsMTQvMQAvcGFzdGVsMTQvMgAvcGFzdGVsMTQvMwAvcGFzdGVsMTQvNAAvcGFzdGVsMTUvMQAvcGFzdGVsMTUvMgAvcGFzdGVsMTUvMwAvcGFzdGVsMTUvNAAvcGFzdGVsMTUvNQAvcGFzdGVsMTYvMQAvcGFzdGVsMTYvMgAvcGFzdGVsMTYvMwAvcGFzdGVsMTYvNAAvcGFzdGVsMTYvNQAvcGFzdGVsMTYvNgAvcGFzdGVsMTcvMQAvcGFzdGVsMTcvMgAvcGFzdGVsMTcvMwAvcGFzdGVsMTcvNAAvcGFzdGVsMTcvNQAvcGFzdGVsMTcvNgAvcGFzdGVsMTcvNwAvcGFzdGVsMTgvMQAvcGFzdGVsMTgvMgAvcGFzdGVsMTgvMwAvcGFzdGVsMTgvNAAvcGFzdGVsMTgvNQAvcGFzdGVsMTgvNgAvcGFzdGVsMTgvNwAvcGFzdGVsMTgvOAAvcGFzdGVsMTkvMQAvcGFzdGVsMTkvMgAvcGFzdGVsMTkvMwAvcGFzdGVsMTkvNAAvcGFzdGVsMTkvNQAvcGFzdGVsMTkvNgAvcGFzdGVsMTkvNwAvcGFzdGVsMTkvOAAvcGFzdGVsMTkvOQAvcGFzdGVsMjMvMQAvcGFzdGVsMjMvMgAvcGFzdGVsMjMvMwAvcGFzdGVsMjQvMQAvcGFzdGVsMjQvMgAvcGFzdGVsMjQvMwAvcGFzdGVsMjQvNAAvcGFzdGVsMjUvMQAvcGFzdGVsMjUvMgAvcGFzdGVsMjUvMwAvcGFzdGVsMjUvNAAvcGFzdGVsMjUvNQAvcGFzdGVsMjYvMQAvcGFzdGVsMjYvMgAvcGFzdGVsMjYvMwAvcGFzdGVsMjYvNAAvcGFzdGVsMjYvNQAvcGFzdGVsMjYvNgAvcGFzdGVsMjcvMQAvcGFzdGVsMjcvMgAvcGFzdGVsMjcvMwAvcGFzdGVsMjcvNAAvcGFzdGVsMjcvNQAvcGFzdGVsMjcvNgAvcGFzdGVsMjcvNwAvcGFzdGVsMjgvMQAvcGFzdGVsMjgvMgAvcGFzdGVsMjgvMwAvcGFzdGVsMjgvNAAvcGFzdGVsMjgvNQAvcGFzdGVsMjgvNgAvcGFzdGVsMjgvNwAvcGFzdGVsMjgvOAAvcGl5ZzEwLzEAL3BpeWcxMC8xMAAvcGl5ZzEwLzIAL3BpeWcxMC8zAC9waXlnMTAvNAAvcGl5ZzEwLzUAL3BpeWcxMC82AC9waXlnMTAvNwAvcGl5ZzEwLzgAL3BpeWcxMC85AC9waXlnMTEvMQAvcGl5ZzExLzEwAC9waXlnMTEvMTEAL3BpeWcxMS8yAC9waXlnMTEvMwAvcGl5ZzExLzQAL3BpeWcxMS81AC9waXlnMTEvNgAvcGl5ZzExLzcAL3BpeWcxMS84AC9waXlnMTEvOQAvcGl5ZzMvMQAvcGl5ZzMvMgAvcGl5ZzMvMwAvcGl5ZzQvMQAvcGl5ZzQvMgAvcGl5ZzQvMwAvcGl5ZzQvNAAvcGl5ZzUvMQAvcGl5ZzUvMgAvcGl5ZzUvMwAvcGl5ZzUvNAAvcGl5ZzUvNQAvcGl5ZzYvMQAvcGl5ZzYvMgAvcGl5ZzYvMwAvcGl5ZzYvNAAvcGl5ZzYvNQAvcGl5ZzYvNgAvcGl5ZzcvMQAvcGl5ZzcvMgAvcGl5ZzcvMwAvcGl5ZzcvNAAvcGl5ZzcvNQAvcGl5ZzcvNgAvcGl5ZzcvNwAvcGl5ZzgvMQAvcGl5ZzgvMgAvcGl5ZzgvMwAvcGl5ZzgvNAAvcGl5ZzgvNQAvcGl5ZzgvNgAvcGl5ZzgvNwAvcGl5ZzgvOAAvcGl5ZzkvMQAvcGl5ZzkvMgAvcGl5ZzkvMwAvcGl5ZzkvNAAvcGl5ZzkvNQAvcGl5ZzkvNgAvcGl5ZzkvNwAvcGl5ZzkvOAAvcGl5ZzkvOQAvcHJnbjEwLzEAL3ByZ24xMC8xMAAvcHJnbjEwLzIAL3ByZ24xMC8zAC9wcmduMTAvNAAvcHJnbjEwLzUAL3ByZ24xMC82AC9wcmduMTAvNwAvcHJnbjEwLzgAL3ByZ24xMC85AC9wcmduMTEvMQAvcHJnbjExLzEwAC9wcmduMTEvMTEAL3ByZ24xMS8yAC9wcmduMTEvMwAvcHJnbjExLzQAL3ByZ24xMS81AC9wcmduMTEvNgAvcHJnbjExLzcAL3ByZ24xMS84AC9wcmduMTEvOQAvcHJnbjMvMQAvcHJnbjMvMgAvcHJnbjMvMwAvcHJnbjQvMQAvcHJnbjQvMgAvcHJnbjQvMwAvcHJnbjQvNAAvcHJnbjUvMQAvcHJnbjUvMgAvcHJnbjUvMwAvcHJnbjUvNAAvcHJnbjUvNQAvcHJnbjYvMQAvcHJnbjYvMgAvcHJnbjYvMwAvcHJnbjYvNAAvcHJnbjYvNQAvcHJnbjYvNgAvcHJnbjcvMQAvcHJnbjcvMgAvcHJnbjcvMwAvcHJnbjcvNAAvcHJnbjcvNQAvcHJnbjcvNgAvcHJnbjcvNwAvcHJnbjgvMQAvcHJnbjgvMgAvcHJnbjgvMwAvcHJnbjgvNAAvcHJnbjgvNQAvcHJnbjgvNgAvcHJnbjgvNwAvcHJnbjgvOAAvcHJnbjkvMQAvcHJnbjkvMgAvcHJnbjkvMwAvcHJnbjkvNAAvcHJnbjkvNQAvcHJnbjkvNgAvcHJnbjkvNwAvcHJnbjkvOAAvcHJnbjkvOQAvcHVidTMvMQAvcHVidTMvMgAvcHVidTMvMwAvcHVidTQvMQAvcHVidTQvMgAvcHVidTQvMwAvcHVidTQvNAAvcHVidTUvMQAvcHVidTUvMgAvcHVidTUvMwAvcHVidTUvNAAvcHVidTUvNQAvcHVidTYvMQAvcHVidTYvMgAvcHVidTYvMwAvcHVidTYvNAAvcHVidTYvNQAvcHVidTYvNgAvcHVidTcvMQAvcHVidTcvMgAvcHVidTcvMwAvcHVidTcvNAAvcHVidTcvNQAvcHVidTcvNgAvcHVidTcvNwAvcHVidTgvMQAvcHVidTgvMgAvcHVidTgvMwAvcHVidTgvNAAvcHVidTgvNQAvcHVidTgvNgAvcHVidTgvNwAvcHVidTgvOAAvcHVidTkvMQAvcHVidTkvMgAvcHVidTkvMwAvcHVidTkvNAAvcHVidTkvNQAvcHVidTkvNgAvcHVidTkvNwAvcHVidTkvOAAvcHVidTkvOQAvcHVidWduMy8xAC9wdWJ1Z24zLzIAL3B1YnVnbjMvMwAvcHVidWduNC8xAC9wdWJ1Z240LzIAL3B1YnVnbjQvMwAvcHVidWduNC80AC9wdWJ1Z241LzEAL3B1YnVnbjUvMgAvcHVidWduNS8zAC9wdWJ1Z241LzQAL3B1YnVnbjUvNQAvcHVidWduNi8xAC9wdWJ1Z242LzIAL3B1YnVnbjYvMwAvcHVidWduNi80AC9wdWJ1Z242LzUAL3B1YnVnbjYvNgAvcHVidWduNy8xAC9wdWJ1Z243LzIAL3B1YnVnbjcvMwAvcHVidWduNy80AC9wdWJ1Z243LzUAL3B1YnVnbjcvNgAvcHVidWduNy83AC9wdWJ1Z244LzEAL3B1YnVnbjgvMgAvcHVidWduOC8zAC9wdWJ1Z244LzQAL3B1YnVnbjgvNQAvcHVidWduOC82AC9wdWJ1Z244LzcAL3B1YnVnbjgvOAAvcHVidWduOS8xAC9wdWJ1Z245LzIAL3B1YnVnbjkvMwAvcHVidWduOS80AC9wdWJ1Z245LzUAL3B1YnVnbjkvNgAvcHVidWduOS83AC9wdWJ1Z245LzgAL3B1YnVnbjkvOQAvcHVvcjEwLzEAL3B1b3IxMC8xMAAvcHVvcjEwLzIAL3B1b3IxMC8zAC9wdW9yMTAvNAAvcHVvcjEwLzUAL3B1b3IxMC82AC9wdW9yMTAvNwAvcHVvcjEwLzgAL3B1b3IxMC85AC9wdW9yMTEvMQAvcHVvcjExLzEwAC9wdW9yMTEvMTEAL3B1b3IxMS8yAC9wdW9yMTEvMwAvcHVvcjExLzQAL3B1b3IxMS81AC9wdW9yMTEvNgAvcHVvcjExLzcAL3B1b3IxMS84AC9wdW9yMTEvOQAvcHVvcjMvMQAvcHVvcjMvMgAvcHVvcjMvMwAvcHVvcjQvMQAvcHVvcjQvMgAvcHVvcjQvMwAvcHVvcjQvNAAvcHVvcjUvMQAvcHVvcjUvMgAvcHVvcjUvMwAvcHVvcjUvNAAvcHVvcjUvNQAvcHVvcjYvMQAvcHVvcjYvMgAvcHVvcjYvMwAvcHVvcjYvNAAvcHVvcjYvNQAvcHVvcjYvNgAvcHVvcjcvMQAvcHVvcjcvMgAvcHVvcjcvMwAvcHVvcjcvNAAvcHVvcjcvNQAvcHVvcjcvNgAvcHVvcjcvNwAvcHVvcjgvMQAvcHVvcjgvMgAvcHVvcjgvMwAvcHVvcjgvNAAvcHVvcjgvNQAvcHVvcjgvNgAvcHVvcjgvNwAvcHVvcjgvOAAvcHVvcjkvMQAvcHVvcjkvMgAvcHVvcjkvMwAvcHVvcjkvNAAvcHVvcjkvNQAvcHVvcjkvNgAvcHVvcjkvNwAvcHVvcjkvOAAvcHVvcjkvOQAvcHVyZDMvMQAvcHVyZDMvMgAvcHVyZDMvMwAvcHVyZDQvMQAvcHVyZDQvMgAvcHVyZDQvMwAvcHVyZDQvNAAvcHVyZDUvMQAvcHVyZDUvMgAvcHVyZDUvMwAvcHVyZDUvNAAvcHVyZDUvNQAvcHVyZDYvMQAvcHVyZDYvMgAvcHVyZDYvMwAvcHVyZDYvNAAvcHVyZDYvNQAvcHVyZDYvNgAvcHVyZDcvMQAvcHVyZDcvMgAvcHVyZDcvMwAvcHVyZDcvNAAvcHVyZDcvNQAvcHVyZDcvNgAvcHVyZDcvNwAvcHVyZDgvMQAvcHVyZDgvMgAvcHVyZDgvMwAvcHVyZDgvNAAvcHVyZDgvNQAvcHVyZDgvNgAvcHVyZDgvNwAvcHVyZDgvOAAvcHVyZDkvMQAvcHVyZDkvMgAvcHVyZDkvMwAvcHVyZDkvNAAvcHVyZDkvNQAvcHVyZDkvNgAvcHVyZDkvNwAvcHVyZDkvOAAvcHVyZDkvOQAvcHVycGxlczMvMQAvcHVycGxlczMvMgAvcHVycGxlczMvMwAvcHVycGxlczQvMQAvcHVycGxlczQvMgAvcHVycGxlczQvMwAvcHVycGxlczQvNAAvcHVycGxlczUvMQAvcHVycGxlczUvMgAvcHVycGxlczUvMwAvcHVycGxlczUvNAAvcHVycGxlczUvNQAvcHVycGxlczYvMQAvcHVycGxlczYvMgAvcHVycGxlczYvMwAvcHVycGxlczYvNAAvcHVycGxlczYvNQAvcHVycGxlczYvNgAvcHVycGxlczcvMQAvcHVycGxlczcvMgAvcHVycGxlczcvMwAvcHVycGxlczcvNAAvcHVycGxlczcvNQAvcHVycGxlczcvNgAvcHVycGxlczcvNwAvcHVycGxlczgvMQAvcHVycGxlczgvMgAvcHVycGxlczgvMwAvcHVycGxlczgvNAAvcHVycGxlczgvNQAvcHVycGxlczgvNgAvcHVycGxlczgvNwAvcHVycGxlczgvOAAvcHVycGxlczkvMQAvcHVycGxlczkvMgAvcHVycGxlczkvMwAvcHVycGxlczkvNAAvcHVycGxlczkvNQAvcHVycGxlczkvNgAvcHVycGxlczkvNwAvcHVycGxlczkvOAAvcHVycGxlczkvOQAvcmRidTEwLzEAL3JkYnUxMC8xMAAvcmRidTEwLzIAL3JkYnUxMC8zAC9yZGJ1MTAvNAAvcmRidTEwLzUAL3JkYnUxMC82AC9yZGJ1MTAvNwAvcmRidTEwLzgAL3JkYnUxMC85AC9yZGJ1MTEvMQAvcmRidTExLzEwAC9yZGJ1MTEvMTEAL3JkYnUxMS8yAC9yZGJ1MTEvMwAvcmRidTExLzQAL3JkYnUxMS81AC9yZGJ1MTEvNgAvcmRidTExLzcAL3JkYnUxMS84AC9yZGJ1MTEvOQAvcmRidTMvMQAvcmRidTMvMgAvcmRidTMvMwAvcmRidTQvMQAvcmRidTQvMgAvcmRidTQvMwAvcmRidTQvNAAvcmRidTUvMQAvcmRidTUvMgAvcmRidTUvMwAvcmRidTUvNAAvcmRidTUvNQAvcmRidTYvMQAvcmRidTYvMgAvcmRidTYvMwAvcmRidTYvNAAvcmRidTYvNQAvcmRidTYvNgAvcmRidTcvMQAvcmRidTcvMgAvcmRidTcvMwAvcmRidTcvNAAvcmRidTcvNQAvcmRidTcvNgAvcmRidTcvNwAvcmRidTgvMQAvcmRidTgvMgAvcmRidTgvMwAvcmRidTgvNAAvcmRidTgvNQAvcmRidTgvNgAvcmRidTgvNwAvcmRidTgvOAAvcmRidTkvMQAvcmRidTkvMgAvcmRidTkvMwAvcmRidTkvNAAvcmRidTkvNQAvcmRidTkvNgAvcmRidTkvNwAvcmRidTkvOAAvcmRidTkvOQAvcmRneTEwLzEAL3JkZ3kxMC8xMAAvcmRneTEwLzIAL3JkZ3kxMC8zAC9yZGd5MTAvNAAvcmRneTEwLzUAL3JkZ3kxMC82AC9yZGd5MTAvNwAvcmRneTEwLzgAL3JkZ3kxMC85AC9yZGd5MTEvMQAvcmRneTExLzEwAC9yZGd5MTEvMTEAL3JkZ3kxMS8yAC9yZGd5MTEvMwAvcmRneTExLzQAL3JkZ3kxMS81AC9yZGd5MTEvNgAvcmRneTExLzcAL3JkZ3kxMS84AC9yZGd5MTEvOQAvcmRneTMvMQAvcmRneTMvMgAvcmRneTMvMwAvcmRneTQvMQAvcmRneTQvMgAvcmRneTQvMwAvcmRneTQvNAAvcmRneTUvMQAvcmRneTUvMgAvcmRneTUvMwAvcmRneTUvNAAvcmRneTUvNQAvcmRneTYvMQAvcmRneTYvMgAvcmRneTYvMwAvcmRneTYvNAAvcmRneTYvNQAvcmRneTYvNgAvcmRneTcvMQAvcmRneTcvMgAvcmRneTcvMwAvcmRneTcvNAAvcmRneTcvNQAvcmRneTcvNgAvcmRneTcvNwAvcmRneTgvMQAvcmRneTgvMgAvcmRneTgvMwAvcmRneTgvNAAvcmRneTgvNQAvcmRneTgvNgAvcmRneTgvNwAvcmRneTgvOAAvcmRneTkvMQAvcmRneTkvMgAvcmRneTkvMwAvcmRneTkvNAAvcmRneTkvNQAvcmRneTkvNgAvcmRneTkvNwAvcmRneTkvOAAvcmRneTkvOQAvcmRwdTMvMQAvcmRwdTMvMgAvcmRwdTMvMwAvcmRwdTQvMQAvcmRwdTQvMgAvcmRwdTQvMwAvcmRwdTQvNAAvcmRwdTUvMQAvcmRwdTUvMgAvcmRwdTUvMwAvcmRwdTUvNAAvcmRwdTUvNQAvcmRwdTYvMQAvcmRwdTYvMgAvcmRwdTYvMwAvcmRwdTYvNAAvcmRwdTYvNQAvcmRwdTYvNgAvcmRwdTcvMQAvcmRwdTcvMgAvcmRwdTcvMwAvcmRwdTcvNAAvcmRwdTcvNQAvcmRwdTcvNgAvcmRwdTcvNwAvcmRwdTgvMQAvcmRwdTgvMgAvcmRwdTgvMwAvcmRwdTgvNAAvcmRwdTgvNQAvcmRwdTgvNgAvcmRwdTgvNwAvcmRwdTgvOAAvcmRwdTkvMQAvcmRwdTkvMgAvcmRwdTkvMwAvcmRwdTkvNAAvcmRwdTkvNQAvcmRwdTkvNgAvcmRwdTkvNwAvcmRwdTkvOAAvcmRwdTkvOQAvcmR5bGJ1MTAvMQAvcmR5bGJ1MTAvMTAAL3JkeWxidTEwLzIAL3JkeWxidTEwLzMAL3JkeWxidTEwLzQAL3JkeWxidTEwLzUAL3JkeWxidTEwLzYAL3JkeWxidTEwLzcAL3JkeWxidTEwLzgAL3JkeWxidTEwLzkAL3JkeWxidTExLzEAL3JkeWxidTExLzEwAC9yZHlsYnUxMS8xMQAvcmR5bGJ1MTEvMgAvcmR5bGJ1MTEvMwAvcmR5bGJ1MTEvNAAvcmR5bGJ1MTEvNQAvcmR5bGJ1MTEvNgAvcmR5bGJ1MTEvNwAvcmR5bGJ1MTEvOAAvcmR5bGJ1MTEvOQAvcmR5bGJ1My8xAC9yZHlsYnUzLzIAL3JkeWxidTMvMwAvcmR5bGJ1NC8xAC9yZHlsYnU0LzIAL3JkeWxidTQvMwAvcmR5bGJ1NC80AC9yZHlsYnU1LzEAL3JkeWxidTUvMgAvcmR5bGJ1NS8zAC9yZHlsYnU1LzQAL3JkeWxidTUvNQAvcmR5bGJ1Ni8xAC9yZHlsYnU2LzIAL3JkeWxidTYvMwAvcmR5bGJ1Ni80AC9yZHlsYnU2LzUAL3JkeWxidTYvNgAvcmR5bGJ1Ny8xAC9yZHlsYnU3LzIAL3JkeWxidTcvMwAvcmR5bGJ1Ny80AC9yZHlsYnU3LzUAL3JkeWxidTcvNgAvcmR5bGJ1Ny83AC9yZHlsYnU4LzEAL3JkeWxidTgvMgAvcmR5bGJ1OC8zAC9yZHlsYnU4LzQAL3JkeWxidTgvNQAvcmR5bGJ1OC82AC9yZHlsYnU4LzcAL3JkeWxidTgvOAAvcmR5bGJ1OS8xAC9yZHlsYnU5LzIAL3JkeWxidTkvMwAvcmR5bGJ1OS80AC9yZHlsYnU5LzUAL3JkeWxidTkvNgAvcmR5bGJ1OS83AC9yZHlsYnU5LzgAL3JkeWxidTkvOQAvcmR5bGduMTAvMQAvcmR5bGduMTAvMTAAL3JkeWxnbjEwLzIAL3JkeWxnbjEwLzMAL3JkeWxnbjEwLzQAL3JkeWxnbjEwLzUAL3JkeWxnbjEwLzYAL3JkeWxnbjEwLzcAL3JkeWxnbjEwLzgAL3JkeWxnbjEwLzkAL3JkeWxnbjExLzEAL3JkeWxnbjExLzEwAC9yZHlsZ24xMS8xMQAvcmR5bGduMTEvMgAvcmR5bGduMTEvMwAvcmR5bGduMTEvNAAvcmR5bGduMTEvNQAvcmR5bGduMTEvNgAvcmR5bGduMTEvNwAvcmR5bGduMTEvOAAvcmR5bGduMTEvOQAvcmR5bGduMy8xAC9yZHlsZ24zLzIAL3JkeWxnbjMvMwAvcmR5bGduNC8xAC9yZHlsZ240LzIAL3JkeWxnbjQvMwAvcmR5bGduNC80AC9yZHlsZ241LzEAL3JkeWxnbjUvMgAvcmR5bGduNS8zAC9yZHlsZ241LzQAL3JkeWxnbjUvNQAvcmR5bGduNi8xAC9yZHlsZ242LzIAL3JkeWxnbjYvMwAvcmR5bGduNi80AC9yZHlsZ242LzUAL3JkeWxnbjYvNgAvcmR5bGduNy8xAC9yZHlsZ243LzIAL3JkeWxnbjcvMwAvcmR5bGduNy80AC9yZHlsZ243LzUAL3JkeWxnbjcvNgAvcmR5bGduNy83AC9yZHlsZ244LzEAL3JkeWxnbjgvMgAvcmR5bGduOC8zAC9yZHlsZ244LzQAL3JkeWxnbjgvNQAvcmR5bGduOC82AC9yZHlsZ244LzcAL3JkeWxnbjgvOAAvcmR5bGduOS8xAC9yZHlsZ245LzIAL3JkeWxnbjkvMwAvcmR5bGduOS80AC9yZHlsZ245LzUAL3JkeWxnbjkvNgAvcmR5bGduOS83AC9yZHlsZ245LzgAL3JkeWxnbjkvOQAvcmVkczMvMQAvcmVkczMvMgAvcmVkczMvMwAvcmVkczQvMQAvcmVkczQvMgAvcmVkczQvMwAvcmVkczQvNAAvcmVkczUvMQAvcmVkczUvMgAvcmVkczUvMwAvcmVkczUvNAAvcmVkczUvNQAvcmVkczYvMQAvcmVkczYvMgAvcmVkczYvMwAvcmVkczYvNAAvcmVkczYvNQAvcmVkczYvNgAvcmVkczcvMQAvcmVkczcvMgAvcmVkczcvMwAvcmVkczcvNAAvcmVkczcvNQAvcmVkczcvNgAvcmVkczcvNwAvcmVkczgvMQAvcmVkczgvMgAvcmVkczgvMwAvcmVkczgvNAAvcmVkczgvNQAvcmVkczgvNgAvcmVkczgvNwAvcmVkczgvOAAvcmVkczkvMQAvcmVkczkvMgAvcmVkczkvMwAvcmVkczkvNAAvcmVkczkvNQAvcmVkczkvNgAvcmVkczkvNwAvcmVkczkvOAAvcmVkczkvOQAvc2V0MTMvMQAvc2V0MTMvMgAvc2V0MTMvMwAvc2V0MTQvMQAvc2V0MTQvMgAvc2V0MTQvMwAvc2V0MTQvNAAvc2V0MTUvMQAvc2V0MTUvMgAvc2V0MTUvMwAvc2V0MTUvNAAvc2V0MTUvNQAvc2V0MTYvMQAvc2V0MTYvMgAvc2V0MTYvMwAvc2V0MTYvNAAvc2V0MTYvNQAvc2V0MTYvNgAvc2V0MTcvMQAvc2V0MTcvMgAvc2V0MTcvMwAvc2V0MTcvNAAvc2V0MTcvNQAvc2V0MTcvNgAvc2V0MTcvNwAvc2V0MTgvMQAvc2V0MTgvMgAvc2V0MTgvMwAvc2V0MTgvNAAvc2V0MTgvNQAvc2V0MTgvNgAvc2V0MTgvNwAvc2V0MTgvOAAvc2V0MTkvMQAvc2V0MTkvMgAvc2V0MTkvMwAvc2V0MTkvNAAvc2V0MTkvNQAvc2V0MTkvNgAvc2V0MTkvNwAvc2V0MTkvOAAvc2V0MTkvOQAvc2V0MjMvMQAvc2V0MjMvMgAvc2V0MjMvMwAvc2V0MjQvMQAvc2V0MjQvMgAvc2V0MjQvMwAvc2V0MjQvNAAvc2V0MjUvMQAvc2V0MjUvMgAvc2V0MjUvMwAvc2V0MjUvNAAvc2V0MjUvNQAvc2V0MjYvMQAvc2V0MjYvMgAvc2V0MjYvMwAvc2V0MjYvNAAvc2V0MjYvNQAvc2V0MjYvNgAvc2V0MjcvMQAvc2V0MjcvMgAvc2V0MjcvMwAvc2V0MjcvNAAvc2V0MjcvNQAvc2V0MjcvNgAvc2V0MjcvNwAvc2V0MjgvMQAvc2V0MjgvMgAvc2V0MjgvMwAvc2V0MjgvNAAvc2V0MjgvNQAvc2V0MjgvNgAvc2V0MjgvNwAvc2V0MjgvOAAvc2V0MzEwLzEAL3NldDMxMC8xMAAvc2V0MzEwLzIAL3NldDMxMC8zAC9zZXQzMTAvNAAvc2V0MzEwLzUAL3NldDMxMC82AC9zZXQzMTAvNwAvc2V0MzEwLzgAL3NldDMxMC85AC9zZXQzMTEvMQAvc2V0MzExLzEwAC9zZXQzMTEvMTEAL3NldDMxMS8yAC9zZXQzMTEvMwAvc2V0MzExLzQAL3NldDMxMS81AC9zZXQzMTEvNgAvc2V0MzExLzcAL3NldDMxMS84AC9zZXQzMTEvOQAvc2V0MzEyLzEAL3NldDMxMi8xMAAvc2V0MzEyLzExAC9zZXQzMTIvMTIAL3NldDMxMi8yAC9zZXQzMTIvMwAvc2V0MzEyLzQAL3NldDMxMi81AC9zZXQzMTIvNgAvc2V0MzEyLzcAL3NldDMxMi84AC9zZXQzMTIvOQAvc2V0MzMvMQAvc2V0MzMvMgAvc2V0MzMvMwAvc2V0MzQvMQAvc2V0MzQvMgAvc2V0MzQvMwAvc2V0MzQvNAAvc2V0MzUvMQAvc2V0MzUvMgAvc2V0MzUvMwAvc2V0MzUvNAAvc2V0MzUvNQAvc2V0MzYvMQAvc2V0MzYvMgAvc2V0MzYvMwAvc2V0MzYvNAAvc2V0MzYvNQAvc2V0MzYvNgAvc2V0MzcvMQAvc2V0MzcvMgAvc2V0MzcvMwAvc2V0MzcvNAAvc2V0MzcvNQAvc2V0MzcvNgAvc2V0MzcvNwAvc2V0MzgvMQAvc2V0MzgvMgAvc2V0MzgvMwAvc2V0MzgvNAAvc2V0MzgvNQAvc2V0MzgvNgAvc2V0MzgvNwAvc2V0MzgvOAAvc2V0MzkvMQAvc2V0MzkvMgAvc2V0MzkvMwAvc2V0MzkvNAAvc2V0MzkvNQAvc2V0MzkvNgAvc2V0MzkvNwAvc2V0MzkvOAAvc2V0MzkvOQAvc3BlY3RyYWwxMC8xAC9zcGVjdHJhbDEwLzEwAC9zcGVjdHJhbDEwLzIAL3NwZWN0cmFsMTAvMwAvc3BlY3RyYWwxMC80AC9zcGVjdHJhbDEwLzUAL3NwZWN0cmFsMTAvNgAvc3BlY3RyYWwxMC83AC9zcGVjdHJhbDEwLzgAL3NwZWN0cmFsMTAvOQAvc3BlY3RyYWwxMS8xAC9zcGVjdHJhbDExLzEwAC9zcGVjdHJhbDExLzExAC9zcGVjdHJhbDExLzIAL3NwZWN0cmFsMTEvMwAvc3BlY3RyYWwxMS80AC9zcGVjdHJhbDExLzUAL3NwZWN0cmFsMTEvNgAvc3BlY3RyYWwxMS83AC9zcGVjdHJhbDExLzgAL3NwZWN0cmFsMTEvOQAvc3BlY3RyYWwzLzEAL3NwZWN0cmFsMy8yAC9zcGVjdHJhbDMvMwAvc3BlY3RyYWw0LzEAL3NwZWN0cmFsNC8yAC9zcGVjdHJhbDQvMwAvc3BlY3RyYWw0LzQAL3NwZWN0cmFsNS8xAC9zcGVjdHJhbDUvMgAvc3BlY3RyYWw1LzMAL3NwZWN0cmFsNS80AC9zcGVjdHJhbDUvNQAvc3BlY3RyYWw2LzEAL3NwZWN0cmFsNi8yAC9zcGVjdHJhbDYvMwAvc3BlY3RyYWw2LzQAL3NwZWN0cmFsNi81AC9zcGVjdHJhbDYvNgAvc3BlY3RyYWw3LzEAL3NwZWN0cmFsNy8yAC9zcGVjdHJhbDcvMwAvc3BlY3RyYWw3LzQAL3NwZWN0cmFsNy81AC9zcGVjdHJhbDcvNgAvc3BlY3RyYWw3LzcAL3NwZWN0cmFsOC8xAC9zcGVjdHJhbDgvMgAvc3BlY3RyYWw4LzMAL3NwZWN0cmFsOC80AC9zcGVjdHJhbDgvNQAvc3BlY3RyYWw4LzYAL3NwZWN0cmFsOC83AC9zcGVjdHJhbDgvOAAvc3BlY3RyYWw5LzEAL3NwZWN0cmFsOS8yAC9zcGVjdHJhbDkvMwAvc3BlY3RyYWw5LzQAL3NwZWN0cmFsOS81AC9zcGVjdHJhbDkvNgAvc3BlY3RyYWw5LzcAL3NwZWN0cmFsOS84AC9zcGVjdHJhbDkvOQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL2FxdWEAL3N2Zy9hcXVhbWFyaW5lAC9zdmcvYXp1cmUAL3N2Zy9iZWlnZQAvc3ZnL2Jpc3F1ZQAvc3ZnL2JsYWNrAC9zdmcvYmxhbmNoZWRhbG1vbmQAL3N2Zy9ibHVlAC9zdmcvYmx1ZXZpb2xldAAvc3ZnL2Jyb3duAC9zdmcvYnVybHl3b29kAC9zdmcvY2FkZXRibHVlAC9zdmcvY2hhcnRyZXVzZQAvc3ZnL2Nob2NvbGF0ZQAvc3ZnL2NvcmFsAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9jb3Juc2lsawAvc3ZnL2NyaW1zb24AL3N2Zy9jeWFuAC9zdmcvZGFya2JsdWUAL3N2Zy9kYXJrY3lhbgAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9kYXJrZ3JheQAvc3ZnL2RhcmtncmVlbgAvc3ZnL2RhcmtncmV5AC9zdmcvZGFya2toYWtpAC9zdmcvZGFya21hZ2VudGEAL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9kYXJrb3JjaGlkAC9zdmcvZGFya3JlZAAvc3ZnL2RhcmtzYWxtb24AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9kYXJrc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyZXkAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvZGFya3Zpb2xldAAvc3ZnL2RlZXBwaW5rAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9kaW1ncmF5AC9zdmcvZGltZ3JleQAvc3ZnL2RvZGdlcmJsdWUAL3N2Zy9maXJlYnJpY2sAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvZnVjaHNpYQAvc3ZnL2dhaW5zYm9ybwAvc3ZnL2dob3N0d2hpdGUAL3N2Zy9nb2xkAC9zdmcvZ29sZGVucm9kAC9zdmcvZ3JheQAvc3ZnL2dyZWVuAC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9ncmV5AC9zdmcvaG9uZXlkZXcAL3N2Zy9ob3RwaW5rAC9zdmcvaW5kaWFucmVkAC9zdmcvaW5kaWdvAC9zdmcvaXZvcnkAL3N2Zy9raGFraQAvc3ZnL2xhdmVuZGVyAC9zdmcvbGF2ZW5kZXJibHVzaAAvc3ZnL2xhd25ncmVlbgAvc3ZnL2xlbW9uY2hpZmZvbgAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Y29yYWwAL3N2Zy9saWdodGN5YW4AL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL2xpZ2h0Z3JheQAvc3ZnL2xpZ2h0Z3JlZW4AL3N2Zy9saWdodGdyZXkAL3N2Zy9saWdodHBpbmsAL3N2Zy9saWdodHNhbG1vbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2xpZ2h0c2xhdGVncmV5AC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9saWdodHllbGxvdwAvc3ZnL2xpbWUAL3N2Zy9saW1lZ3JlZW4AL3N2Zy9saW5lbgAvc3ZnL21hZ2VudGEAL3N2Zy9tYXJvb24AL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvbWVkaXVtYmx1ZQAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL21lZGl1bXB1cnBsZQAvc3ZnL21lZGl1bXNlYWdyZWVuAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvbWVkaXVtc3ByaW5nZ3JlZW4AL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9taWRuaWdodGJsdWUAL3N2Zy9taW50Y3JlYW0AL3N2Zy9taXN0eXJvc2UAL3N2Zy9tb2NjYXNpbgAvc3ZnL25hdmFqb3doaXRlAC9zdmcvbmF2eQAvc3ZnL29sZGxhY2UAL3N2Zy9vbGl2ZQAvc3ZnL29saXZlZHJhYgAvc3ZnL29yYW5nZQAvc3ZnL29yYW5nZXJlZAAvc3ZnL29yY2hpZAAvc3ZnL3BhbGVnb2xkZW5yb2QAL3N2Zy9wYWxlZ3JlZW4AL3N2Zy9wYWxldHVycXVvaXNlAC9zdmcvcGFsZXZpb2xldHJlZAAvc3ZnL3BhcGF5YXdoaXAAL3N2Zy9wZWFjaHB1ZmYAL3N2Zy9wZXJ1AC9zdmcvcGluawAvc3ZnL3BsdW0AL3N2Zy9wb3dkZXJibHVlAC9zdmcvcHVycGxlAC9zdmcvcmVkAC9zdmcvcm9zeWJyb3duAC9zdmcvcm95YWxibHVlAC9zdmcvc2FkZGxlYnJvd24AL3N2Zy9zYWxtb24AL3N2Zy9zYW5keWJyb3duAC9zdmcvc2VhZ3JlZW4AL3N2Zy9zZWFzaGVsbAAvc3ZnL3NpZW5uYQAvc3ZnL3NpbHZlcgAvc3ZnL3NreWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9zbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyZXkAL3N2Zy9zbm93AC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9zdGVlbGJsdWUAL3N2Zy90YW4AL3N2Zy90ZWFsAC9zdmcvdGhpc3RsZQAvc3ZnL3RvbWF0bwAvc3ZnL3R1cnF1b2lzZQAvc3ZnL3Zpb2xldAAvc3ZnL3doZWF0AC9zdmcvd2hpdGUAL3N2Zy93aGl0ZXNtb2tlAC9zdmcveWVsbG93AC9zdmcveWVsbG93Z3JlZW4AL3lsZ24zLzEAL3lsZ24zLzIAL3lsZ24zLzMAL3lsZ240LzEAL3lsZ240LzIAL3lsZ240LzMAL3lsZ240LzQAL3lsZ241LzEAL3lsZ241LzIAL3lsZ241LzMAL3lsZ241LzQAL3lsZ241LzUAL3lsZ242LzEAL3lsZ242LzIAL3lsZ242LzMAL3lsZ242LzQAL3lsZ242LzUAL3lsZ242LzYAL3lsZ243LzEAL3lsZ243LzIAL3lsZ243LzMAL3lsZ243LzQAL3lsZ243LzUAL3lsZ243LzYAL3lsZ243LzcAL3lsZ244LzEAL3lsZ244LzIAL3lsZ244LzMAL3lsZ244LzQAL3lsZ244LzUAL3lsZ244LzYAL3lsZ244LzcAL3lsZ244LzgAL3lsZ245LzEAL3lsZ245LzIAL3lsZ245LzMAL3lsZ245LzQAL3lsZ245LzUAL3lsZ245LzYAL3lsZ245LzcAL3lsZ245LzgAL3lsZ245LzkAL3lsZ25idTMvMQAveWxnbmJ1My8yAC95bGduYnUzLzMAL3lsZ25idTQvMQAveWxnbmJ1NC8yAC95bGduYnU0LzMAL3lsZ25idTQvNAAveWxnbmJ1NS8xAC95bGduYnU1LzIAL3lsZ25idTUvMwAveWxnbmJ1NS80AC95bGduYnU1LzUAL3lsZ25idTYvMQAveWxnbmJ1Ni8yAC95bGduYnU2LzMAL3lsZ25idTYvNAAveWxnbmJ1Ni81AC95bGduYnU2LzYAL3lsZ25idTcvMQAveWxnbmJ1Ny8yAC95bGduYnU3LzMAL3lsZ25idTcvNAAveWxnbmJ1Ny81AC95bGduYnU3LzYAL3lsZ25idTcvNwAveWxnbmJ1OC8xAC95bGduYnU4LzIAL3lsZ25idTgvMwAveWxnbmJ1OC80AC95bGduYnU4LzUAL3lsZ25idTgvNgAveWxnbmJ1OC83AC95bGduYnU4LzgAL3lsZ25idTkvMQAveWxnbmJ1OS8yAC95bGduYnU5LzMAL3lsZ25idTkvNAAveWxnbmJ1OS81AC95bGduYnU5LzYAL3lsZ25idTkvNwAveWxnbmJ1OS84AC95bGduYnU5LzkAL3lsb3JicjMvMQAveWxvcmJyMy8yAC95bG9yYnIzLzMAL3lsb3JicjQvMQAveWxvcmJyNC8yAC95bG9yYnI0LzMAL3lsb3JicjQvNAAveWxvcmJyNS8xAC95bG9yYnI1LzIAL3lsb3JicjUvMwAveWxvcmJyNS80AC95bG9yYnI1LzUAL3lsb3JicjYvMQAveWxvcmJyNi8yAC95bG9yYnI2LzMAL3lsb3JicjYvNAAveWxvcmJyNi81AC95bG9yYnI2LzYAL3lsb3JicjcvMQAveWxvcmJyNy8yAC95bG9yYnI3LzMAL3lsb3JicjcvNAAveWxvcmJyNy81AC95bG9yYnI3LzYAL3lsb3JicjcvNwAveWxvcmJyOC8xAC95bG9yYnI4LzIAL3lsb3JicjgvMwAveWxvcmJyOC80AC95bG9yYnI4LzUAL3lsb3JicjgvNgAveWxvcmJyOC83AC95bG9yYnI4LzgAL3lsb3JicjkvMQAveWxvcmJyOS8yAC95bG9yYnI5LzMAL3lsb3JicjkvNAAveWxvcmJyOS81AC95bG9yYnI5LzYAL3lsb3JicjkvNwAveWxvcmJyOS84AC95bG9yYnI5LzkAL3lsb3JyZDMvMQAveWxvcnJkMy8yAC95bG9ycmQzLzMAL3lsb3JyZDQvMQAveWxvcnJkNC8yAC95bG9ycmQ0LzMAL3lsb3JyZDQvNAAveWxvcnJkNS8xAC95bG9ycmQ1LzIAL3lsb3JyZDUvMwAveWxvcnJkNS80AC95bG9ycmQ1LzUAL3lsb3JyZDYvMQAveWxvcnJkNi8yAC95bG9ycmQ2LzMAL3lsb3JyZDYvNAAveWxvcnJkNi81AC95bG9ycmQ2LzYAL3lsb3JyZDcvMQAveWxvcnJkNy8yAC95bG9ycmQ3LzMAL3lsb3JyZDcvNAAveWxvcnJkNy81AC95bG9ycmQ3LzYAL3lsb3JyZDcvNwAveWxvcnJkOC8xAC95bG9ycmQ4LzIAL3lsb3JyZDgvMwAveWxvcnJkOC80AC95bG9ycmQ4LzUAL3lsb3JyZDgvNgAveWxvcnJkOC83AC95bG9ycmQ4LzgAL3lsb3JyZDkvMQAveWxvcnJkOS8yAC95bG9ycmQ5LzMAL3lsb3JyZDkvNAAveWxvcnJkOS81AC95bG9ycmQ5LzYAL3lsb3JyZDkvNwAveWxvcnJkOS84AC95bG9ycmQ5LzkAYWxpY2VibHVlAGFudGlxdWV3aGl0ZQBhbnRpcXVld2hpdGUxAGFudGlxdWV3aGl0ZTIAYW50aXF1ZXdoaXRlMwBhbnRpcXVld2hpdGU0AGFxdWFtYXJpbmUAYXF1YW1hcmluZTEAYXF1YW1hcmluZTIAYXF1YW1hcmluZTMAYXF1YW1hcmluZTQAYXp1cmUAYXp1cmUxAGF6dXJlMgBhenVyZTMAYXp1cmU0AGJlaWdlAGJpc3F1ZQBiaXNxdWUxAGJpc3F1ZTIAYmlzcXVlMwBiaXNxdWU0AGJsYW5jaGVkYWxtb25kAGJsdWUAYmx1ZTEAYmx1ZTIAYmx1ZTMAYmx1ZTQAYmx1ZXZpb2xldABicm93bgBicm93bjEAYnJvd24yAGJyb3duMwBicm93bjQAYnVybHl3b29kAGJ1cmx5d29vZDEAYnVybHl3b29kMgBidXJseXdvb2QzAGJ1cmx5d29vZDQAY2FkZXRibHVlAGNhZGV0Ymx1ZTEAY2FkZXRibHVlMgBjYWRldGJsdWUzAGNhZGV0Ymx1ZTQAY2hhcnRyZXVzZQBjaGFydHJldXNlMQBjaGFydHJldXNlMgBjaGFydHJldXNlMwBjaGFydHJldXNlNABjaG9jb2xhdGUAY2hvY29sYXRlMQBjaG9jb2xhdGUyAGNob2NvbGF0ZTMAY2hvY29sYXRlNABjb3JhbABjb3JhbDEAY29yYWwyAGNvcmFsMwBjb3JhbDQAY29ybmZsb3dlcmJsdWUAY29ybnNpbGsAY29ybnNpbGsxAGNvcm5zaWxrMgBjb3Juc2lsazMAY29ybnNpbGs0AGNyaW1zb24AY3lhbgBjeWFuMQBjeWFuMgBjeWFuMwBjeWFuNABkYXJrZ29sZGVucm9kAGRhcmtnb2xkZW5yb2QxAGRhcmtnb2xkZW5yb2QyAGRhcmtnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2Q0AGRhcmtncmVlbgBkYXJra2hha2kAZGFya29saXZlZ3JlZW4AZGFya29saXZlZ3JlZW4xAGRhcmtvbGl2ZWdyZWVuMgBkYXJrb2xpdmVncmVlbjMAZGFya29saXZlZ3JlZW40AGRhcmtvcmFuZ2UAZGFya29yYW5nZTEAZGFya29yYW5nZTIAZGFya29yYW5nZTMAZGFya29yYW5nZTQAZGFya29yY2hpZABkYXJrb3JjaGlkMQBkYXJrb3JjaGlkMgBkYXJrb3JjaGlkMwBkYXJrb3JjaGlkNABkYXJrc2FsbW9uAGRhcmtzZWFncmVlbgBkYXJrc2VhZ3JlZW4xAGRhcmtzZWFncmVlbjIAZGFya3NlYWdyZWVuMwBkYXJrc2VhZ3JlZW40AGRhcmtzbGF0ZWJsdWUAZGFya3NsYXRlZ3JheQBkYXJrc2xhdGVncmF5MQBkYXJrc2xhdGVncmF5MgBkYXJrc2xhdGVncmF5MwBkYXJrc2xhdGVncmF5NABkYXJrc2xhdGVncmV5AGRhcmt0dXJxdW9pc2UAZGFya3Zpb2xldABkZWVwcGluawBkZWVwcGluazEAZGVlcHBpbmsyAGRlZXBwaW5rMwBkZWVwcGluazQAZGVlcHNreWJsdWUAZGVlcHNreWJsdWUxAGRlZXBza3libHVlMgBkZWVwc2t5Ymx1ZTMAZGVlcHNreWJsdWU0AGRpbWdyYXkAZGltZ3JleQBkb2RnZXJibHVlAGRvZGdlcmJsdWUxAGRvZGdlcmJsdWUyAGRvZGdlcmJsdWUzAGRvZGdlcmJsdWU0AGZpcmVicmljawBmaXJlYnJpY2sxAGZpcmVicmljazIAZmlyZWJyaWNrMwBmaXJlYnJpY2s0AGZsb3JhbHdoaXRlAGZvcmVzdGdyZWVuAGdhaW5zYm9ybwBnaG9zdHdoaXRlAGdvbGQAZ29sZDEAZ29sZDIAZ29sZDMAZ29sZDQAZ29sZGVucm9kAGdvbGRlbnJvZDEAZ29sZGVucm9kMgBnb2xkZW5yb2QzAGdvbGRlbnJvZDQAZ3JheQBncmF5MABncmF5MQBncmF5MTAAZ3JheTEwMABncmF5MTEAZ3JheTEyAGdyYXkxMwBncmF5MTQAZ3JheTE1AGdyYXkxNgBncmF5MTcAZ3JheTE4AGdyYXkxOQBncmF5MgBncmF5MjAAZ3JheTIxAGdyYXkyMgBncmF5MjMAZ3JheTI0AGdyYXkyNQBncmF5MjYAZ3JheTI3AGdyYXkyOABncmF5MjkAZ3JheTMAZ3JheTMwAGdyYXkzMQBncmF5MzIAZ3JheTMzAGdyYXkzNABncmF5MzUAZ3JheTM2AGdyYXkzNwBncmF5MzgAZ3JheTM5AGdyYXk0AGdyYXk0MABncmF5NDEAZ3JheTQyAGdyYXk0MwBncmF5NDQAZ3JheTQ1AGdyYXk0NgBncmF5NDcAZ3JheTQ4AGdyYXk0OQBncmF5NQBncmF5NTAAZ3JheTUxAGdyYXk1MgBncmF5NTMAZ3JheTU0AGdyYXk1NQBncmF5NTYAZ3JheTU3AGdyYXk1OABncmF5NTkAZ3JheTYAZ3JheTYwAGdyYXk2MQBncmF5NjIAZ3JheTYzAGdyYXk2NABncmF5NjUAZ3JheTY2AGdyYXk2NwBncmF5NjgAZ3JheTY5AGdyYXk3AGdyYXk3MABncmF5NzEAZ3JheTcyAGdyYXk3MwBncmF5NzQAZ3JheTc1AGdyYXk3NgBncmF5NzcAZ3JheTc4AGdyYXk3OQBncmF5OABncmF5ODAAZ3JheTgxAGdyYXk4MgBncmF5ODMAZ3JheTg0AGdyYXk4NQBncmF5ODYAZ3JheTg3AGdyYXk4OABncmF5ODkAZ3JheTkAZ3JheTkwAGdyYXk5MQBncmF5OTIAZ3JheTkzAGdyYXk5NABncmF5OTUAZ3JheTk2AGdyYXk5NwBncmF5OTgAZ3JheTk5AGdyZWVuAGdyZWVuMQBncmVlbjIAZ3JlZW4zAGdyZWVuNABncmVlbnllbGxvdwBncmV5AGdyZXkwAGdyZXkxAGdyZXkxMABncmV5MTAwAGdyZXkxMQBncmV5MTIAZ3JleTEzAGdyZXkxNABncmV5MTUAZ3JleTE2AGdyZXkxNwBncmV5MTgAZ3JleTE5AGdyZXkyAGdyZXkyMABncmV5MjEAZ3JleTIyAGdyZXkyMwBncmV5MjQAZ3JleTI1AGdyZXkyNgBncmV5MjcAZ3JleTI4AGdyZXkyOQBncmV5MwBncmV5MzAAZ3JleTMxAGdyZXkzMgBncmV5MzMAZ3JleTM0AGdyZXkzNQBncmV5MzYAZ3JleTM3AGdyZXkzOABncmV5MzkAZ3JleTQAZ3JleTQwAGdyZXk0MQBncmV5NDIAZ3JleTQzAGdyZXk0NABncmV5NDUAZ3JleTQ2AGdyZXk0NwBncmV5NDgAZ3JleTQ5AGdyZXk1AGdyZXk1MABncmV5NTEAZ3JleTUyAGdyZXk1MwBncmV5NTQAZ3JleTU1AGdyZXk1NgBncmV5NTcAZ3JleTU4AGdyZXk1OQBncmV5NgBncmV5NjAAZ3JleTYxAGdyZXk2MgBncmV5NjMAZ3JleTY0AGdyZXk2NQBncmV5NjYAZ3JleTY3AGdyZXk2OABncmV5NjkAZ3JleTcAZ3JleTcwAGdyZXk3MQBncmV5NzIAZ3JleTczAGdyZXk3NABncmV5NzUAZ3JleTc2AGdyZXk3NwBncmV5NzgAZ3JleTc5AGdyZXk4AGdyZXk4MABncmV5ODEAZ3JleTgyAGdyZXk4MwBncmV5ODQAZ3JleTg1AGdyZXk4NgBncmV5ODcAZ3JleTg4AGdyZXk4OQBncmV5OQBncmV5OTAAZ3JleTkxAGdyZXk5MgBncmV5OTMAZ3JleTk0AGdyZXk5NQBncmV5OTYAZ3JleTk3AGdyZXk5OABncmV5OTkAaG9uZXlkZXcAaG9uZXlkZXcxAGhvbmV5ZGV3MgBob25leWRldzMAaG9uZXlkZXc0AGhvdHBpbmsAaG90cGluazEAaG90cGluazIAaG90cGluazMAaG90cGluazQAaW5kaWFucmVkAGluZGlhbnJlZDEAaW5kaWFucmVkMgBpbmRpYW5yZWQzAGluZGlhbnJlZDQAaW5kaWdvAGludmlzAGl2b3J5AGl2b3J5MQBpdm9yeTIAaXZvcnkzAGl2b3J5NABraGFraQBraGFraTEAa2hha2kyAGtoYWtpMwBraGFraTQAbGF2ZW5kZXIAbGF2ZW5kZXJibHVzaABsYXZlbmRlcmJsdXNoMQBsYXZlbmRlcmJsdXNoMgBsYXZlbmRlcmJsdXNoMwBsYXZlbmRlcmJsdXNoNABsYXduZ3JlZW4AbGVtb25jaGlmZm9uAGxlbW9uY2hpZmZvbjEAbGVtb25jaGlmZm9uMgBsZW1vbmNoaWZmb24zAGxlbW9uY2hpZmZvbjQAbGlnaHRibHVlAGxpZ2h0Ymx1ZTEAbGlnaHRibHVlMgBsaWdodGJsdWUzAGxpZ2h0Ymx1ZTQAbGlnaHRjb3JhbABsaWdodGN5YW4AbGlnaHRjeWFuMQBsaWdodGN5YW4yAGxpZ2h0Y3lhbjMAbGlnaHRjeWFuNABsaWdodGdvbGRlbnJvZABsaWdodGdvbGRlbnJvZDEAbGlnaHRnb2xkZW5yb2QyAGxpZ2h0Z29sZGVucm9kMwBsaWdodGdvbGRlbnJvZDQAbGlnaHRnb2xkZW5yb2R5ZWxsb3cAbGlnaHRncmF5AGxpZ2h0Z3JleQBsaWdodHBpbmsAbGlnaHRwaW5rMQBsaWdodHBpbmsyAGxpZ2h0cGluazMAbGlnaHRwaW5rNABsaWdodHNhbG1vbgBsaWdodHNhbG1vbjEAbGlnaHRzYWxtb24yAGxpZ2h0c2FsbW9uMwBsaWdodHNhbG1vbjQAbGlnaHRzZWFncmVlbgBsaWdodHNreWJsdWUAbGlnaHRza3libHVlMQBsaWdodHNreWJsdWUyAGxpZ2h0c2t5Ymx1ZTMAbGlnaHRza3libHVlNABsaWdodHNsYXRlYmx1ZQBsaWdodHNsYXRlZ3JheQBsaWdodHNsYXRlZ3JleQBsaWdodHN0ZWVsYmx1ZQBsaWdodHN0ZWVsYmx1ZTEAbGlnaHRzdGVlbGJsdWUyAGxpZ2h0c3RlZWxibHVlMwBsaWdodHN0ZWVsYmx1ZTQAbGlnaHR5ZWxsb3cAbGlnaHR5ZWxsb3cxAGxpZ2h0eWVsbG93MgBsaWdodHllbGxvdzMAbGlnaHR5ZWxsb3c0AGxpbWVncmVlbgBsaW5lbgBtYWdlbnRhAG1hZ2VudGExAG1hZ2VudGEyAG1hZ2VudGEzAG1hZ2VudGE0AG1hcm9vbgBtYXJvb24xAG1hcm9vbjIAbWFyb29uMwBtYXJvb240AG1lZGl1bWFxdWFtYXJpbmUAbWVkaXVtYmx1ZQBtZWRpdW1vcmNoaWQAbWVkaXVtb3JjaGlkMQBtZWRpdW1vcmNoaWQyAG1lZGl1bW9yY2hpZDMAbWVkaXVtb3JjaGlkNABtZWRpdW1wdXJwbGUAbWVkaXVtcHVycGxlMQBtZWRpdW1wdXJwbGUyAG1lZGl1bXB1cnBsZTMAbWVkaXVtcHVycGxlNABtZWRpdW1zZWFncmVlbgBtZWRpdW1zbGF0ZWJsdWUAbWVkaXVtc3ByaW5nZ3JlZW4AbWVkaXVtdHVycXVvaXNlAG1lZGl1bXZpb2xldHJlZABtaWRuaWdodGJsdWUAbWludGNyZWFtAG1pc3R5cm9zZQBtaXN0eXJvc2UxAG1pc3R5cm9zZTIAbWlzdHlyb3NlMwBtaXN0eXJvc2U0AG1vY2Nhc2luAG5hdmFqb3doaXRlAG5hdmFqb3doaXRlMQBuYXZham93aGl0ZTIAbmF2YWpvd2hpdGUzAG5hdmFqb3doaXRlNABuYXZ5AG5hdnlibHVlAG5vbmUAb2xkbGFjZQBvbGl2ZWRyYWIAb2xpdmVkcmFiMQBvbGl2ZWRyYWIyAG9saXZlZHJhYjMAb2xpdmVkcmFiNABvcmFuZ2UAb3JhbmdlMQBvcmFuZ2UyAG9yYW5nZTMAb3JhbmdlNABvcmFuZ2VyZWQAb3JhbmdlcmVkMQBvcmFuZ2VyZWQyAG9yYW5nZXJlZDMAb3JhbmdlcmVkNABvcmNoaWQAb3JjaGlkMQBvcmNoaWQyAG9yY2hpZDMAb3JjaGlkNABwYWxlZ29sZGVucm9kAHBhbGVncmVlbgBwYWxlZ3JlZW4xAHBhbGVncmVlbjIAcGFsZWdyZWVuMwBwYWxlZ3JlZW40AHBhbGV0dXJxdW9pc2UAcGFsZXR1cnF1b2lzZTEAcGFsZXR1cnF1b2lzZTIAcGFsZXR1cnF1b2lzZTMAcGFsZXR1cnF1b2lzZTQAcGFsZXZpb2xldHJlZABwYWxldmlvbGV0cmVkMQBwYWxldmlvbGV0cmVkMgBwYWxldmlvbGV0cmVkMwBwYWxldmlvbGV0cmVkNABwYXBheWF3aGlwAHBlYWNocHVmZgBwZWFjaHB1ZmYxAHBlYWNocHVmZjIAcGVhY2hwdWZmMwBwZWFjaHB1ZmY0AHBlcnUAcGluawBwaW5rMQBwaW5rMgBwaW5rMwBwaW5rNABwbHVtAHBsdW0xAHBsdW0yAHBsdW0zAHBsdW00AHBvd2RlcmJsdWUAcHVycGxlAHB1cnBsZTEAcHVycGxlMgBwdXJwbGUzAHB1cnBsZTQAcmVkAHJlZDEAcmVkMgByZWQzAHJlZDQAcm9zeWJyb3duAHJvc3licm93bjEAcm9zeWJyb3duMgByb3N5YnJvd24zAHJvc3licm93bjQAcm95YWxibHVlAHJveWFsYmx1ZTEAcm95YWxibHVlMgByb3lhbGJsdWUzAHJveWFsYmx1ZTQAc2FkZGxlYnJvd24Ac2FsbW9uAHNhbG1vbjEAc2FsbW9uMgBzYWxtb24zAHNhbG1vbjQAc2FuZHlicm93bgBzZWFncmVlbgBzZWFncmVlbjEAc2VhZ3JlZW4yAHNlYWdyZWVuMwBzZWFncmVlbjQAc2Vhc2hlbGwAc2Vhc2hlbGwxAHNlYXNoZWxsMgBzZWFzaGVsbDMAc2Vhc2hlbGw0AHNpZW5uYQBzaWVubmExAHNpZW5uYTIAc2llbm5hMwBzaWVubmE0AHNreWJsdWUAc2t5Ymx1ZTEAc2t5Ymx1ZTIAc2t5Ymx1ZTMAc2t5Ymx1ZTQAc2xhdGVibHVlAHNsYXRlYmx1ZTEAc2xhdGVibHVlMgBzbGF0ZWJsdWUzAHNsYXRlYmx1ZTQAc2xhdGVncmF5AHNsYXRlZ3JheTEAc2xhdGVncmF5MgBzbGF0ZWdyYXkzAHNsYXRlZ3JheTQAc2xhdGVncmV5AHNub3cAc25vdzEAc25vdzIAc25vdzMAc25vdzQAc3ByaW5nZ3JlZW4Ac3ByaW5nZ3JlZW4xAHNwcmluZ2dyZWVuMgBzcHJpbmdncmVlbjMAc3ByaW5nZ3JlZW40AHN0ZWVsYmx1ZQBzdGVlbGJsdWUxAHN0ZWVsYmx1ZTIAc3RlZWxibHVlMwBzdGVlbGJsdWU0AHRhbgB0YW4xAHRhbjIAdGFuMwB0YW40AHRoaXN0bGUAdGhpc3RsZTEAdGhpc3RsZTIAdGhpc3RsZTMAdGhpc3RsZTQAdG9tYXRvAHRvbWF0bzEAdG9tYXRvMgB0b21hdG8zAHRvbWF0bzQAdHVycXVvaXNlAHR1cnF1b2lzZTEAdHVycXVvaXNlMgB0dXJxdW9pc2UzAHR1cnF1b2lzZTQAdmlvbGV0AHZpb2xldHJlZAB2aW9sZXRyZWQxAHZpb2xldHJlZDIAdmlvbGV0cmVkMwB2aW9sZXRyZWQ0AHdoZWF0AHdoZWF0MQB3aGVhdDIAd2hlYXQzAHdoZWF0NAB3aGl0ZQB3aGl0ZXNtb2tlAHllbGxvdwB5ZWxsb3cxAHllbGxvdzIAeWVsbG93MwB5ZWxsb3c0AHllbGxvd2dyZWVuAGxhY2sAaGl0ZQBpZ2h0Z3JleQBYMTEvAC8lcy8lcwBpbWFnZXNjYWxlAGZhbHNlAGJsYWNrAGRvdHRlZABkYXNoZWQAY3AtPnNyYwBodG1sdGFibGUuYwBlbWl0X2h0bWxfaW1nAGNwLT5zcmNbMF0AdHJhbnNwYXJlbnQAXyVkACVkADIAMwA0ADUANgA3ADgAOQAxMAAxMQAxMgAxMwAxNAAxNQAxNgAxNwAxOAAxOQAyMABBZ25vZGVpbmZvX3QAQWdlZGdlaW5mb190AHJvd2cAY29sZwBBZ3JhcGhpbmZvX3QAZGVseCA+PSAwAHBvc19odG1sX3RibABkZWx5ID49IDAAdGFibGUgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKAGZpeGVkIHRhYmxlIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAGNlbGwgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKAGZpeGVkIGNlbGwgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoATm8gb3IgaW1wcm9wZXIgaW1hZ2UgZmlsZT0iJXMiCgBwZW5jb2xvcgAtPgBmUFEuYwBQUWNoZWNrAEhlYXAgb3ZlcmZsb3cKACUhUFMtQWRvYmUtMi4wCi9ub2RlIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgBzaG93cGFnZQoAZmFpbGVkIGF0IG5vZGUgJWRbMF0KAG5wLT5jZWxsc1swXQBtYXplLmMAY2hrU2dyYXBoAGZhaWxlZCBhdCBub2RlICVkWzFdCgBucC0+Y2VsbHNbMV0AZGl0ZW1zAGZpbmRTVmVydAAlJSUlUGFnZTogMSAxCiUlJSVQYWdlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgAlZiAlZiB0cmFuc2xhdGUKADAgMCAxIHNldHJnYmNvbG9yCgAlZiAlZiAlZiAlZiBub2RlCgAwIDAgMCBzZXRyZ2Jjb2xvcgoAJWYgJWYgJWYgJWYgY2VsbAoAMSAwIDAgc2V0cmdiY29sb3IKAHVuZXhwZWN0ZWQgY2FzZSBpbiBsb2NhdGVfZW5kcG9pbnQKADAAdHJhcGV6b2lkLmMAbG9jYXRlX2VuZHBvaW50AGFkZF9zZWdtZW50OiBlcnJvcgoAbmV3bm9kZTogUXVlcnktdGFibGUgb3ZlcmZsb3cKAG5ld25vZGUAbmV3dHJhcDogVHJhcGV6b2lkLXRhYmxlIG92ZXJmbG93ICVkCgBuZXd0cmFwAGluZGV4LmMAUlRyZWVTZWFyY2gAbi0+bGV2ZWwgPj0gMABSVHJlZUluc2VydABsZXZlbCA+PSAwICYmIGxldmVsIDw9ICgqbiktPmxldmVsAHItPmJvdW5kYXJ5W2ldIDw9IHItPmJvdW5kYXJ5W05VTURJTVMgKyBpXQByICYmIG4gJiYgbmV3AFJUcmVlSW5zZXJ0MgBsZXZlbCA+PSAwICYmIGxldmVsIDw9IG4tPmxldmVsAEZBTFNFAG5vZGUuYwBOb2RlQ292ZXIAciAmJiBuAFBpY2tCcmFuY2gAQWRkQnJhbmNoAGkgPCBOT0RFQ0FSRABuZXcAbiAmJiBpID49IDAgJiYgaSA8IE5PREVDQVJEAERpc2NvbkJyYW5jaAByAHJlY3RhbmdsZS5jAFJlY3RBcmVhAHIgJiYgcnIAQ29tYmluZVJlY3QAciAmJiBzAE92ZXJsYXAAbgBzcGxpdC5xLmMAU3BsaXROb2RlAGIAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAExvYWROb2RlcwBxAHAAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAwIHx8IHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0uY291bnRbMF0gKyBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0uY291bnRbMV0gPT0gTk9ERUNBUkQgKyAxAE1ldGhvZFplcm8AcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdID49IHJ0cC0+TWluRmlsbCAmJiBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0uY291bnRbMV0gPj0gcnRwLT5NaW5GaWxsACFydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0udGFrZW5baV0AQ2xhc3NpZnkAR2V0QnJhbmNoZXMAbi0+YnJhbmNoW2ldLmNoaWxkAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoAgICAgICEAxZAQAfUAgDBxITFFcWFwgLaQwfCgUMDikRKw8tEC8wIDIGNDUbHB0eCwwhIiMkJSYnKAwYGRcEChscGiAqCiEiIyQlJicoDAoOUwosWDFYWFhYWFgMGxwPLlgzISIjJCUmJygbHP9T//8hIiMkJSYnKAz//wX///8JFP//////DBsc/xAVFiEiIyQlJicoGxz/////ISIjJCUmJygM/xITFBEWF////////wwbHP///xIhIiMkJSYnKBsc/////yEiIyQlJicoDP///////xP///////8MGxz/////ISIjJCUmJygbHP////8hIiMkJSYnKBITFBUWFxgZ////////////IyQlJicbEhMUFhciNmgBHzhWISACGxsbXhsbNzlwNtLCTwQ8IkciPyJEIiJYImUiIgUGX2A5BAcICQoLDA0OBGZnXWptBQZvWDtxBwgJCgsMDQ4Ecjxbcz5hRhsSExQWFwQFBj9BYkkHCAkKCwwNDgUGAFwAAAcICQoLDA0OBAAATwAAAFNCAAAAAAAEBQYARFRVBwgJCgsMDQ4FBgAAAAAHCAkKCwwNDgQAKiwuRzEzAAAAAAAABAUGAAAASgcICQoLDA0OBQYAAAAABwgJCgsMDQ4EAAAAAAAATAAAAAAAAAQFBgAAAAAHCAkKCwwNDgUGAAAAAAcICQoLDA0OKSstLzAyNDUAAAAAAAAAAAApKy0wMgAELwAkIwASFBYaHB4gGAAFBy8vLwAvLwAACQgoAAABIgIGAAAAAAAIAAAAAAAAAAAAAAAAACUDJhMKKRULKhcOLRkRGwwrHQ0sHw8hEAAzADAAL0MAMQAvADUuJ0IyQQA6OAA8NEUANgBAAAA/AEQ3Ozk9AAIDAwEBAgEBAQMDAwMDAwMDAQEBAQEBAQEBAQEBAQEBAQIBAQIABgEDAwMDAwEAAQIDAAQBAgMABAAEAAQAAwIBAgECAVN5bnRheCBlcnJvcjogbm9uLXNwYWNlIHN0cmluZyB1c2VkIGJlZm9yZSA8VEFCTEU+AFN5bnRheCBlcnJvcjogbm9uLXNwYWNlIHN0cmluZyB1c2VkIGFmdGVyIDwvVEFCTEU+AAApKioqKywsLS0tLS0tLS0tLS4vMDEyMzQ1Njc4OTo7PD0+Pj8/QUBCQkJCQkJDQ0REREZFR0dHSUhKSEtITEhNTU5OT0//Aw8QESM6JD0lQBVDJkUnSBhLGU0aKBxOHR5QUVJZWmxrbmNkV2ltZW1vcnkgZXhoYXVzdGVkACVzIGluIGxpbmUgJWQgCgAuLi4gJXMgLi4uCgBUQUJMRQBUUgBUSABURABIVE1MAEZPTlQAQgBVAE8ASQBTVVAAU1VCAFMAQlIASFIAVlIASU1HAFVua25vd24gSFRNTCBlbGVtZW50IDwlcz4gb24gbGluZSAlZCAKADxJTUc+AElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAc2NhbGUAc3JjADxCUj4AYWxpZ24ASUdIVABFRlQARU5URVIASWxsZWdhbCB2YWx1ZSAlcyBmb3IgQUxJR04gLSBpZ25vcmVkCgA8Rk9OVD4AY29sb3IAZmFjZQBwb2ludC1zaXplAFBPSU5ULVNJWkUASW1wcm9wZXIgJXMgdmFsdWUgJXMgLSBpZ25vcmVkACVzIHZhbHVlICVzID4gJWQgLSB0b28gbGFyZ2UgLSBpZ25vcmVkACVzIHZhbHVlICVzIDwgJWQgLSB0b28gc21hbGwgLSBpZ25vcmVkADxURD4AYmFsaWduAGJnY29sb3IAYm9yZGVyAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAGNvbHNwYW4AZml4ZWRzaXplAGdyYWRpZW50YW5nbGUAaGVpZ2h0AGhyZWYAaWQAcG9ydAByb3dzcGFuAHNpZGVzAHN0eWxlAHRhcmdldAB0aXRsZQB0b29sdGlwAHZhbGlnbgB3aWR0aABXSURUSABPVFRPTQBPUABJRERMRQBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgAgLABPVU5ERUQAQURJQUwASWxsZWdhbCB2YWx1ZSAlcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBTT0xJRABJTlZJU0lCTEUASU5WSVMARE9UVEVEAERBU0hFRABVbnJlY29nbml6ZWQgY2hhcmFjdGVyICclYycgKCVkKSBpbiBzaWRlcyBhdHRyaWJ1dGUKAFJPV1NQQU4AUk9XU1BBTiB2YWx1ZSBjYW5ub3QgYmUgMCAtIGlnbm9yZWQKAEhFSUdIVABHUkFESUVOVEFOR0xFAFJVRQBBTFNFAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAENPTFNQQU4AQ09MU1BBTiB2YWx1ZSBjYW5ub3QgYmUgMCAtIGlnbm9yZWQKAENFTExTUEFDSU5HAENFTExQQURESU5HAEJPUkRFUgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBFWFQASWxsZWdhbCB2YWx1ZSAlcyBmb3IgQUxJR04gaW4gVEQgLSBpZ25vcmVkCgA8VEFCTEU+AGNlbGxib3JkZXIAY29sdW1ucwByb3dzAFVua25vd24gdmFsdWUgJXMgZm9yIFJPV1MgLSBpZ25vcmVkCgBVbmtub3duIHZhbHVlICVzIGZvciBDT0xVTU5TIC0gaWdub3JlZAoAQ0VMTFNCT1JERVIAPEhUTUw+ADwvSFRNTD4ALS0ATGFiZWwgY2xvc2VkIGJlZm9yZSBlbmQgb2YgSFRNTCBlbGVtZW50CgBVbmNsb3NlZCBjb21tZW50CgBqID09IDAAY3Z0LmMAUG9ic3BhdGgAcm91dGUuYwBsaWJwYXRoLyVzOiVkOiAlcwoAc2hvcnRlc3QuYwBzb3VyY2UgcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBkZXN0aW5hdGlvbiBwb2ludCBub3QgaW4gYW55IHRyaWFuZ2xlAGNhbm5vdCBmaW5kIHRyaWFuZ2xlIHBhdGgAY2Fubm90IG1hbGxvYyBvcHMAY2Fubm90IHJlYWxsb2Mgb3BzAHRyaWFuZ3VsYXRpb24gZmFpbGVkAGNhbm5vdCBtYWxsb2MgdHJpcwBjYW5ub3QgcmVhbGxvYyB0cmlzAGNhbm5vdCBtYWxsb2MgZHEucG5scwBjYW5ub3QgcmVhbGxvYyBkcS5wbmxzAGNhbm5vdCBtYWxsb2MgcG5scwBjYW5ub3QgbWFsbG9jIHBubHBzAGNhbm5vdCByZWFsbG9jIHBubHMAY2Fubm90IHJlYWxsb2MgcG5scHMAQ0RBVEEASUQASURSRUYASURSRUZTAEVOVElUWQBFTlRJVElFUwBOTVRPS0VOAE5NVE9LRU5TAE5PVEFUSU9OKAAoAHwAaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlAGh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvAHhtbD1odHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UAL2Rldi91cmFuZG9tAGZhbGxiYWNrKDQpAGdldHRpbWVvZmRheV9yZXMgPT0gMAB4bWxwYXJzZS5jAGdhdGhlcl90aW1lX2VudHJvcHkARVhQQVRfRU5UUk9QWV9ERUJVRwAxAEVudHJvcHk6ICVzIC0tPiAweCUwKmx4ICglbHUgYnl0ZXMpCgBpbnZhbGlkIGFyZ3VtZW50AHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwByZXNlcnZlZCBwcmVmaXggKHhtbG5zKSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1bmRlY2xhcmVkAHJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9yIGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUAY2Fubm90IHN1c3BlbmQgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eQBwYXJzaW5nIGZpbmlzaGVkAHBhcnNpbmcgYWJvcnRlZABwYXJzZXIgbm90IHN1c3BlbmRlZABwYXJzZXIgc3VzcGVuZGVkAGlsbGVnYWwgY2hhcmFjdGVyKHMpIGluIHB1YmxpYyBpZAB0ZXh0IGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZABYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkAGluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRpdHkAbXVzdCBub3QgdW5kZWNsYXJlIHByZWZpeAB1bmJvdW5kIHByZWZpeABjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgByZXF1ZXN0ZWQgZmVhdHVyZSByZXF1aXJlcyBYTUxfRFREIHN1cHBvcnQgaW4gRXhwYXQAZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkAdW5leHBlY3RlZCBwYXJzZXIgc3RhdGUgLSBwbGVhc2Ugc2VuZCBhIGJ1ZyByZXBvcnQAZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHVuY2xvc2VkIENEQVRBIHNlY3Rpb24AZW5jb2Rpbmcgc3BlY2lmaWVkIGluIFhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvcnJlY3QAdW5rbm93biBlbmNvZGluZwBYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5AHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAHJlZmVyZW5jZSB0byBiaW5hcnkgZW50aXR5AHJlZmVyZW5jZSB0byBpbnZhbGlkIGNoYXJhY3RlciBudW1iZXIAYXN5bmNocm9ub3VzIGVudGl0eQByZWN1cnNpdmUgZW50aXR5IHJlZmVyZW5jZQB1bmRlZmluZWQgZW50aXR5AGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbWlzbWF0Y2hlZCB0YWcAcGFydGlhbCBjaGFyYWN0ZXIAdW5jbG9zZWQgdG9rZW4Abm90IHdlbGwtZm9ybWVkIChpbnZhbGlkIHRva2VuKQBubyBlbGVtZW50IGZvdW5kAHN5bnRheCBlcnJvcgBvdXQgb2YgbWVtb3J5AAIDBAUGBwgAAAkKCwwNDg8QEQAAAAAAAAAAAAAAABITABQAAAAAAAAAAAAAAAAAABUWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARcAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAxobHB0eAAAfICEiIyQlEBEAAAAAAAAAAAAAAAASEyYUAAAAAAAAAAAAAAAAAAAnFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEXAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0RBVEFbVVMtQVNDSUkAVVRGLTE2AFVURi0xNkJFAFVURi0xNkxFAHZlcnNpb24AZW5jb2RpbmcAc3RhbmRhbG9uZQBET0NUWVBFAFNZU1RFTQBQVUJMSUMARU5USVRZAEFUVExJU1QARUxFTUVOVABOT1RBVElPTgBJTkNMVURFAElHTk9SRQBFTVBUWQBBTlkAUENEQVRBAElNUExJRUQAUkVRVUlSRUQARklYRUQAQ0RBVEEASUQASURSRUYASURSRUZTAEVOVElUSUVTAE5NVE9LRU4ATk1UT0tFTlMATkRBVEEAVCEiGQ0BAgMRSxwMEAQLHRIeJ2hub3BxYiAFBg8TFBUaCBYHKCQXGAkKDhsfJSODgn0mKis8PT4/Q0dKTVhZWltcXV5fYGFjZGVmZ2lqa2xyc3R5ent8AElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE5vIGVycm9yIGluZm9ybWF0aW9uAAASEBMUFRYXGBkaGxwdHh8gIRAQIiMQJCUmJygpKisQLC0uES8wERExERERMjM0NTY3ODkREBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDsQPD0+P0BBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEEIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEEMQEEQQRUZHEEgQSRAQEBBKS0xNEBBOEE9QEBAQEFEQEBAQEBAQEBAQEBAQUhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQUxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFRVVlcQEFhZEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFoQW1xdXl9gYWIQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAA/v8A/AEAAPgBAAB4AAAAAP/73/sAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwA/P/gr//////////////f//////8gQLAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA/AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAhv7///8AQEkAAAAAABgA3/8AyAAAAAAAAAABADwAAAAAAAAAAAAAAAAQ4AEeAGD/vwAAAAAAAP8HAAAAAAAAAAAAAAAAAAAAAAAAAPjPAwAAAAMAIP9/AAAATgAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAABAAIB4AMAABAAAAAAAAAAAQACAAAAAA/A8AAAAAAAAAEAAgAAAAAAAAAAAAAAAAABAAIAAAAAADAAAAAAAAAAAQACAAAAAA/QAAAAAAAAAAAAAgAAAAAP8HAAAAAAAAAAAAIAAAAAAA/wAAAAAAAAAQACAAAAAAAAAAAAAAAAAAAAAgAAAAAD8CAAAAAAAAAAAABAAAAAAQAAAAAAAAgACAwN8ADAAAAAAAAAAAAAAAAAAfAAAAAAAA/v///wD8//8AAAAAAAAAAPwAAAAAAADA/9//BwAAAAAAAAAAAACABgD8AAAYPgAAgL8AzAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAYP///x8AAP8DAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAQAAGAAAAAAAAAAAADgAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAwAAD+fy8AAP8D/38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADjEAAAAAAAAAAAAAAAAAAAAAAADE/////wAAAMAAAAAAAAAAAAEA4J8AAAAAfz8AAAAAAAAAAAAAAAAAAAAAEAAQAAD8////HwAAAAAADAAAAAAAAEAADPAAAAAAAADA+AAAAAAAAADAAAAAAAAAAAD/AP///yEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////9/AADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA+AA4ADgAGCA+P////z//////38f/PF//38AAP///wMAAP////8BAHsD0MGvQgAMH7z//wAAAAAAAv//////////////////////////////////////////////////////////DwD/////fwAAAP8HAAD/////////////PwAAAAAAAPz///7/////////////////////////////////////////////////////H/8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4IcD/gAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAA//////9//w8AAAAAAAAAAP////v/////////////DwD//////////////////////////////////z8AAAD/Dx7///8B/MHgAAAAAAAAAAAAAAAeAQAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAA/////w8AAAD///9/////////////////////////////////////fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAA////////fwAAAAAAAMAA4AAAAAAAAAAAAAAAgA9wAAAAAAAAAAAAAAAAAAD/AP//fwADAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAARAgAAAAP/wMAAAAAAADwAAAAAAAAAAAAEMAAAP//AwcAAAAAAPgAAAAACIAAAAAAAAAAAAAACAD/PwDAAAAAAAAAAAAAAAAAAAAA8AAAgAsAAAAAAAAAgAIAAMAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAPz/AwAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP///wN/AP/////3/38PAAAAAAAAAAAAAAAAAAAAAACA/v8A/AEAAPgBAAD4PwAAAAAAAAAAAAAAAAAAAH9/ADCH//////+P/wAAAAAAAOD//wf/DwAAAAAAAP//////PwAAAAAPAAAAAAAAAAAAAAAAAACAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCPAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/wD/AQAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwD/8/z8AAAADAAAAAAAA/gMAAAAAAAAAAAAAAAAAGAAPAAAAAAAAAAAAAAAAAAAA4QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACABwAAAAAAAAAAAAAAAAD///////////////////////////////////////8/AP////9//v///////////////////////////z8AAAAA//////////8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////fwD//wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAgAAAAIAAAgAAAAIAAAgAAAAIAAAAACAAAAAgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAP//////D////////////////w8A/3/+f/7//v8AAAAA/wf///9//////////w///////wcAAAAAAAAAAMD///8HAP//////B/8BAwAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8BAL///////////x///w8A/////98HAAD//wEA/////////3/9/////////////////////////////x7/////////Pw8A////AAAAAAAAAAAAAAAAAAAAAAAA+P//////////4f8AAAAAAAD//////////z8AAAAAAAAA//////////////////8PAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFABIRExQVFhcYGRobHB0eHyAhESIjJBElJicoKSorLBEtLi8QEDAQEBAQEBAQMTIzEDQ1EBARERERERERERERERERERERERERERERERERNhERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERETcREREROBE5Ojs8PT4RERERERERERERERERERERERERERERERERERERERERERERERERERERERERPxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBFAQRFCQ0RFRkdISRAQEEpLTE1OEBAQT1AQEBAQURAQEBAQEBAQEBEREVJTEBAQEBAQEBAQEBARERERVBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBERVRAQEBBWEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFcQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFhZWlsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQXBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////////////////////wAAAAAAAAAA/v//B/7//wcAAAAAAAQgBP//f////3//////////////////////////////////w/8DAB9QAAAAAAAAAAAAACAAAAAAAN88QNf///v///////////+///////////////////////8D/P////////////////////////8A/v///38C/v////8AAAAAAP+/tgD///8HBwAAAP8H//////////7/w////////////////+8f/uH/nwAA////////AOD///////////////8DAP//////BzAE/////P8fAAD///8BAAAAAAAAAAD9HwAAAAAAAPAD/3//////////7//f4f/P//7+7p/5///9xeOfWYCwz/8DAO6H+f///W3DhxkCXsD/PwDuv/v///3t478bAQDP/wAA7p/5///97eOfGcCwz/8CAOzHPdYYx//Dxx2BAMD/AADu3/3///3v498dYAPP/wAA7N/9///97+PfHWBAz/8GAOzf/f/////n312AAM//APzs/3/8///7L3+AX/8AAAwA/v////9//wc/IP8DAAAAAJYl8P6u7P87XyD/8wAAAAABAAAA/wMAAP/+////H/7/A////v///x8AAAAAAAAAAP///////3/5/wP//+fB//9/QP8z/////78g///////3////////////PX89//////89/////z1/Pf9//////////z3//////////4cAAAAA//8AAP////////////8fAP7//////////////////////////////////////////////////////////5////7//wf////////////HAQD/3w8A//8PAP//DwD/3w0A////////z///AYAQ/wMAAAAA/wP//////////////wD//////wf//////////z8A////H/8P/wHA/////z8fAP//////D////wP/AwAAAAD///8P/////////3/+/x8A/wP/A4AAAAAAAAAAAAAAAP///////+//7w//AwAAAAD///////P///////+//wMA////////PwD/4///////PwAAAAAAAAAAAAAAAADebwD///////////////////////////////8AAAAAAAAAAP//Pz//////Pz//qv///z/////////fX9wfzw//H9wfAAAAAAAAAAAAAAAAAAACgAAA/x8AAAAAAAAAAAAAAACE/C8+UL3/8+BDAAD//////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA////////AwAA//////9///////9//////////////////////x94DAD/////vyD/////////gAAA//9/AH9/f39/f39//////wAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAP4DPh/+////////////f+D+//////////////fg/////z/+/////////////38AAP///wcAAAAAAAD///////////////////////////////8/AAAAAAAAAAAA/////////////////////////////////x8AAAAAAAD//////////////////////x8AAAAAAAAAAP//////P/8f////DwAA//////9/8I////+A/////////////wAAAACA//z///////////////95DwD/BwAAAAAAAAAAAP+79////wAAAP///////w8A//////////8PAP8DAAD8CP//////B/////8HAP///x/////////3/wCA/wMAAAAA////////fwD/P/8D//9/BP////////9/BQAAOP//PAB+fn4Af38AAAAAAAAAAAAAAAAAAAAAAAD//////wf/A///////////////////////////DwD//3/4//////8P/////////////////z//////////////////AwAAAAB/APjg//1/X9v/////////////////AwAAAPj///////////////8/AAD///////////z///////8AAAAAAP8PAAAAAAAAAAAAAAAAAADf/////////////////////x8AAP8D/v//B/7//wfA/////////////3/8/PwcAAAAAP/v//9///+3/z//PwAAAAD///////////////////8HAAAAAAAAAAD///////8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////H////////wEAAAAAAP///38AAP///wcAAAAAAAD///8//////w//PgAAAAAA/////////////////////////z//AwAAAAAAAAAAAAA//f////+/kf//PwAAAAAAAAAAAAAAAAAAAAAAAAAAAP//PwD///8DAAAAAAAAAAD/////////wAAAAAAAAAAAb/Dv/v//DwAAAAAA////HwAAAAAAAAAAAAAAAAAAAAD///////8/AP//PwD//wcAAAAAAAAAAAAAAAAAAAAAAP///////////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8/AAAAwP8AAPz///////8BAAD///8B/wP////////H/wAAAAAAAAAA//////////8eAP8DAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8/AP8DAAAAAAAA/////////////////38AAAAAAAAAAAAAAAAAAAAAAAD///////////////8HAAAAAAAAAAAAAAAAAAAAAAAAAP//////fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////x8A//////9/AAD4/wAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////9///////////99k3v/r7/////////+/59/f////e1/8/f//////////////////////////////////////////////////////P/////3///f////3///f////3///f////3/////9/////f//98/////////v////lv73CoTqlqqW9/de//v/D+77/w8AAAAAAAAAAExDX0FMTABMQ19DVFlQRQAAAABMQ19OVU1FUklDAABMQ19USU1FAAAAAABMQ19DT0xMQVRFAABMQ19NT05FVEFSWQBMQ19NRVNTQUdFUwBMQU5HAEMuVVRGLTgAUE9TSVgATVVTTF9MT0NQQVRIABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBOQU4AMDEyMzQ1Njc4OUFCQ0RFRi4AYWxudW0AYWxwaGEAYmxhbmsAY250cmwAZGlnaXQAZ3JhcGgAbG93ZXIAcHJpbnQAcHVuY3QAc3BhY2UAdXBwZXIAeGRpZ2l0AEMuVVRGLTgAAAAAAAAAAABDAC9wcm9jL3NlbGYvZmQvAHJ3YQBpbmZpbml0eQBuYW4ACQAKAA0ADAAHABsAW1s6YWxudW06XV9dAFteWzphbG51bTpdX10AW1s6c3BhY2U6XV0AW15bOnNwYWNlOl1dAFtbOmRpZ2l0Ol1dAFteWzpkaWdpdDpdXQAvdG1wL3RtcGZpbGVfWFhYWFhYAHcr";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"])}function _emscripten_get_now(){abort()}function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||typeof dateNow!=="undefined"||(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(ERRNO_CODES.EINVAL);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}function ___lock(){}function ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);return-1}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={"1024":flags["O_APPEND"],"64":flags["O_CREAT"],"128":flags["O_EXCL"],"0":flags["O_RDONLY"],"2":flags["O_RDWR"],"4096":flags["O_SYNC"],"512":flags["O_TRUNC"],"1":flags["O_WRONLY"]}}),bufferFrom:(function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),prot=SYSCALLS.get(),flags=SYSCALLS.get(),fd=SYSCALLS.get(),off=SYSCALLS.get();off<<=12;var ptr;var allocated=false;if(fd===-1){ptr=_memalign(PAGE_SIZE,len);if(!ptr)return-ERRNO_CODES.ENOMEM;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-ERRNO_CODES.EBADF;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags};return ptr}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};function ___syscall20(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.pid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),amode=SYSCALLS.get();return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=staticAlloc(TOTAL_ENV_SIZE);envPtr=staticAlloc(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}var _llvm_ceil_f64=Math_ceil;var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;var _llvm_sqrt_f32=Math_sqrt;var _llvm_sqrt_f64=Math_sqrt;function _llvm_trap(){abort("trap!")}function _longjmp(env,value){Module["setThrew"](env,value||1);throw"longjmp"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _setenv(envname,envval,overwrite){if(envname===0){___setErrNo(ERRNO_CODES.EINVAL);return-1}var name=Pointer_stringify(envname);var val=Pointer_stringify(envval);if(name===""||name.indexOf("=")!==-1){___setErrNo(ERRNO_CODES.EINVAL);return-1}if(ENV.hasOwnProperty(name)&&!overwrite)return 0;ENV[name]=val;___buildEnvironment(ENV);return 0}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _times(buffer){if(buffer!==0){_memset(buffer,0,16)}return 0}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof self==="object"&&self["performance"]&&typeof self["performance"]["now"]==="function"){_emscripten_get_now=(function(){return self["performance"]["now"]()})}else if(typeof performance==="object"&&typeof performance["now"]==="function"){_emscripten_get_now=(function(){return performance["now"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]|0;if(!i)qa(108233,108204,54,108218);if(!(a[i>>0]|0))qa(108242,108204,55,108218);b0(h,c[d+28>>2]|0)|0;i=h+(W_(h)|0)|0;a[i>>0]=58;a[i+1>>0]=0;p1(h,g)|0;if((hP(b,h)|0)==999){c[j>>2]=h;Pw(0,108254,j)|0}g=c[b+92>>2]|0;if(g|0?(m=c[g>>2]|0,m|0):0){c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];xb[m&31](b,d,k,f)}l=n;return}function hP(a,b){a=a|0;b=b|0;b=wC(c[a>>2]|0,4,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+92>>2]=c[b+12>>2];c[a+96>>2]=c[b>>2];b=300}return b|0}function iP(a){a=a|0;return 1}function jP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function kP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function lP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function mP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function nP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1.1;a[b+537>>0]=1;return 0}function oP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*.9090909090909091;a[b+537>>0]=1;return 0}function pP(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;e=b+536|0;d=(a[e>>0]|0)==0;a[e>>0]=d&1;if(d){d=c[b+448>>2]|0;e=c[b+452>>2]|0;i=+(d>>>0);g=+(e>>>0);f=i/+(d|0)>3]=(f?i:g)/+((f?d:e)|0);e=b+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;a[b+537>>0]=1}return 0}function qP(b){b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if(!(c[e>>2]|0)){c[e>>2]=d;e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]|2;GP(b,d)}dF(b,d);a[b+540>>0]=1;return}function rP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;k=l;l=l+16|0;f=k;switch(d|0){case 1:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];zP(b,f);FP(b);a[b+538>>0]=1;a[b+541>>0]=1;j=13;break}case 2:{a[b+538>>0]=1;a[b+541>>0]=2;j=13;break}case 3:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];zP(b,f);a[b+538>>0]=1;a[b+541>>0]=3;j=13;break}case 4:{a[b+536>>0]=0;if(!(c[b+360>>2]|0)){f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i)+ +h[d>>3];g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;d=b+528|0}else{f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i);g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;d=b+520|0}j=b+344|0;h[j>>3]=g*.10000000000000009/(+h[d>>3]*i)+ +h[j>>3];h[f>>3]=i*1.1;j=13;break}case 5:{a[b+536>>0]=0;j=b+352|0;i=+h[j>>3]*.9090909090909091;h[j>>3]=i;if(!(c[b+360>>2]|0)){f=b+336|0;h[f>>3]=+h[f>>3]-(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i);g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;f=b+528|0}else{f=b+336|0;h[f>>3]=(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i)+ +h[f>>3];g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;f=b+520|0}j=b+344|0;h[j>>3]=+h[j>>3]-g*.10000000000000009/(+h[f>>3]*i);j=13;break}default:{}}if((j|0)==13)a[b+537>>0]=1;b=b+560|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];l=k;return}function sP(b,c,d){b=b|0;c=c|0;d=d|0;a[b+538>>0]=0;a[b+541>>0]=0;return}function tP(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0;k=l;l=l+16|0;e=k;i=b+560|0;j=(+h[d>>3]-+h[i>>3])/+h[b+520>>3];g=(+h[d+8>>3]-+h[b+568>>3])/+h[b+528>>3];if(!(+B(+j)<.0001&+B(+g)<.0001)){switch(a[b+541>>0]|0){case 0:{c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];zP(b,e);break}case 2:{f=+h[b+352>>3];if(!(c[b+360>>2]|0)){e=b+336|0;h[e>>3]=+h[e>>3]-j/f;e=b+344|0;h[e>>3]=+h[e>>3]-g/f}else{e=b+336|0;h[e>>3]=+h[e>>3]-g/f;e=b+344|0;h[e>>3]=+h[e>>3]+j/f}a[b+537>>0]=1;break}default:{}}c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2]}l=k;return}function uP(a,b,c){a=a|0;b=b|0;c=c|0;return}function vP(a){a=a|0;return}function wP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[b>>2]|0;if(d){d=L1(d,135739)|0;if(d|0){i=TB(d,0)|0;s1(d)|0;f=5}}else{i=TB(c[15621]|0,0)|0;f=5}if((f|0)==5?i|0:0){g=j+168|0;d=c[g>>2]|0;if(d|0){f=c[j+172>>2]|0;if((f|0)!=0?(h=c[f+4>>2]|0,(h|0)!=0):0){tb[h&127](d);d=c[g>>2]|0}gH(d);$x(c[g>>2]|0)|0}Fz(i,0,134401,280,1);Fz(i,1,134365,304,1);Fz(i,2,134378,176,1);c[g>>2]=i;c[(c[i+16>>2]|0)+144>>2]=j;if((_C(j,i,e)|0)!=-1){c[b+580>>2]=0;c[b+576>>2]=0;a[b+537>>0]=1}}return}function xP(a,b){a=a|0;b=b|0;a=c[a>>2]|0;_C(a,c[a+168>>2]|0,b)|0;return}function yP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;f=g+160|0;e=c[f>>2]|0;if((e|0)!=0?(c[g+164>>2]|0)==0:0){i=g+192|0;h=c[i>>2]|0;c[f>>2]=0;c[i>>2]=0;f=h}else{f=0;e=0}aD(g,c[g+168>>2]|0,b,d)|0;if(e|0){i=c[a>>2]|0;c[i+160>>2]=e;c[i+192>>2]=f}return}function zP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0;f=l;l=l+80|0;e=f+48|0;g=f;m=f+32|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];AP(m,b,e);k=+h[m>>3];j=+h[m+8>>3];i=1.0/+h[b+352>>3];h[g+16>>3]=i+k;h[g+24>>3]=i+j;h[g>>3]=k-i;h[g+8>>3]=j-i;d=c[(c[b>>2]|0)+168>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];c[e+16>>2]=c[g+16>>2];c[e+20>>2]=c[g+20>>2];c[e+24>>2]=c[g+24>>2];c[e+28>>2]=c[g+28>>2];d=BP(d,e)|0;e=b+576|0;if((d|0)!=(c[e>>2]|0)){CP(b);c[e>>2]=d;DP(b);a[b+537>>0]=1}l=f;return}function AP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0;if(!(c[b+360>>2]|0)){e=+h[b+352>>3];f=+h[d+8>>3];g=e;i=b+528|0;e=+h[d>>3]/(+h[b+520>>3]*e)-+h[b+504>>3]}else{e=+h[b+352>>3];f=-+h[d>>3];g=e;i=b+520|0;e=+h[d+8>>3]/(+h[b+528>>3]*e)-+h[b+504>>3]}g=f/(+h[i>>3]*g)-+h[b+512>>3];h[a>>3]=e;h[a+8>>3]=g;return}function BP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=Sy(a)|0;a:while(1){if(!e){e=9;break}d=Ex(a,e)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((WM(d,f)|0)<<24>>24){e=6;break a}d=Gx(a,d)|0}e=Ty(a,e)|0}do if((e|0)!=6)if((e|0)==9){d=Uy(a)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((TM(d,f)|0)<<24>>24){e=12;break}d=Vy(a,d)|0}if((e|0)==12)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];d=EP(a,f)|0;if(!d){d=a;break}else break}while(0);l=g;return d|0}function CP(b){b=b|0;var d=0;d=c[b+576>>2]|0;a:do if(d|0)switch(pz(d)|0){case 0:{d=(c[d+16>>2]|0)+112|0;a[d>>0]=a[d>>0]&-2;break a}case 1:{d=(c[d+16>>2]|0)+117|0;a[d>>0]=a[d>>0]&-2;break a}case 2:{d=(c[d+16>>2]|0)+115|0;a[d>>0]=a[d>>0]&-2;break a}default:break a}while(0);c[b+584>>2]=0;return}function DP(b){b=b|0;var d=0,e=0;e=b+584|0;d=c[e>>2]|0;if(d|0){D_(d);c[e>>2]=0}d=c[b+576>>2]|0;a:do if(d|0)switch(pz(d)|0){case 0:{b=(c[d+16>>2]|0)+112|0;a[b>>0]=a[b>>0]|1;b=nx(d,0,138019,0)|0;if(!b)break a;c[e>>2]=pH(yx(d,b)|0,d)|0;break a}case 1:{b=(c[d+16>>2]|0)+117|0;a[b>>0]=a[b>>0]|1;b=nx(ez(d)|0,1,138019,0)|0;if(!b)break a;c[e>>2]=pH(yx(d,b)|0,d)|0;break a}case 2:{b=(c[d+16>>2]|0)+115|0;a[b>>0]=a[b>>0]|1;b=nx(ez(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0,2,138019,0)|0;if(!b)break a;c[e>>2]=pH(yx(d,b)|0,d)|0;break a}default:break a}while(0);return}function EP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;e=m;g=c[a+16>>2]|0;i=c[g+180>>2]|0;j=g+184|0;d=1;while(1){if((d|0)>(i|0)){k=4;break}f=c[(c[j>>2]|0)+(d<<2)>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];f=EP(f,e)|0;if(!f)d=d+1|0;else{a=f;break}}do if((k|0)==4){o=+h[g+24>>3];n=+h[g+40>>3];if(((+h[b+16>>3]>=+h[g+16>>3]?+h[g+32>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=o:0)?n>=+h[b+8>>3]:0)break;a=0}while(0);l=m;return a|0}function FP(b){b=b|0;var d=0,e=0,f=0;f=b+580|0;d=c[f>>2]|0;a:do if(d|0)switch(pz(d)|0){case 0:{e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]&-7|4;break a}case 1:{e=(c[d+16>>2]|0)+117|0;a[e>>0]=a[e>>0]&-7|4;break a}case 2:{e=(c[d+16>>2]|0)+115|0;a[e>>0]=a[e>>0]&-7|4;break a}default:break a}while(0);d=b+588|0;e=c[d>>2]|0;if(e|0){D_(e);c[d>>2]=0}d=c[b+576>>2]|0;c[f>>2]=d;b:do if(d|0)switch(pz(d)|0){case 0:{f=(c[d+16>>2]|0)+112|0;a[f>>0]=a[f>>0]|2;GP(b,d);break b}case 1:{f=(c[d+16>>2]|0)+117|0;a[f>>0]=a[f>>0]|2;HP(b,d);break b}case 2:{f=(c[d+16>>2]|0)+115|0;a[f>>0]=a[f>>0]|2;IP(b,d);break b}default:break b}while(0);return}function GP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+592|0;do if((fz(b)|0)==(b|0))if(!(ey(b)|0)){rC(d,0,108412);break}else{rC(d,0,108404);break}else rC(d,0,108418);while(0);rC(d,1,ry(b)|0);c[a+596>>2]=2;f=a+604|0;d=0;e=2;while(1){d=sx(b,0,d)|0;if(!d)break;rC(f,e,c[d+8>>2]|0);rC(f,e+1|0,yx(b,d)|0);rC(f,e+2|0,0);e=e+3|0}c[a+608>>2]=e;d=nx(b,0,137973,0)|0;if(!d){d=nx(b,0,108395,0)|0;if(d|0)g=11}else g=11;if((g|0)==11)c[a+588>>2]=pH(yx(b,d)|0,b)|0;return}function HP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+592|0;rC(f,0,108399);rC(f,1,ry(b)|0);c[a+596>>2]=2;f=a+604|0;g=fz(ez(b)|0)|0;e=2;d=0;while(1){d=sx(g,1,d)|0;if(!d)break;rC(f,e,c[d+8>>2]|0);rC(f,e|1,yx(b,d)|0);e=e+2|0}c[a+608>>2]=e;d=nx(ez(b)|0,1,137973,0)|0;if(!d){d=nx(ez(b)|0,1,108395,0)|0;if(d|0)h=6}else h=6;if((h|0)==6)c[a+588>>2]=pH(yx(b,d)|0,b)|0;return}function IP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=a+592|0;rC(h,0,108368);k=b+48|0;rC(h,1,ry(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0);k=(ey(ez(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0)|0)!=0;rC(h,3,k?134656:138665);k=b+-48|0;rC(h,4,ry(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0);c[a+596>>2]=7;i=a+604|0;j=fz(ez(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0)|0;g=7;d=0;a:while(1){while(1){d=sx(j,2,d)|0;if(!d)break a;e=d+8|0;f=c[e>>2]|0;if(!(b$(f,108373)|0)){l=5;break}if(!(b$(f,108382)|0)){l=7;break}if(b$(f,108391)|0)break;rC(h,6,yx(b,d)|0)}if((l|0)==5){l=0;rC(h,2,yx(b,d)|0)}else if((l|0)==7){l=0;rC(h,5,yx(b,d)|0)}rC(i,g,c[e>>2]|0);rC(i,g+1|0,yx(b,d)|0);g=g+2|0}c[a+608>>2]=g;d=nx(ez(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,137973,0)|0;if(!d){d=nx(ez(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,108395,0)|0;if(d|0)l=13}else l=13;if((l|0)==13)c[a+588>>2]=pH(yx(b,d)|0,b)|0;return}function JP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=KP(a,b,c[d>>2]|0)|0;d=c[d+4>>2]|0;while(1){f=c[d+4>>2]|0;if(!f)break;b=0;while(1){e=c[f+(b*20|0)+4>>2]|0;if(!e)break;uC(a,c[d>>2]|0,e,c[f+(b*20|0)+8>>2]|0,g,f+(b*20|0)|0)|0;b=b+1|0}d=d+8|0}return}function KP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=vH(12)|0;if(!b)b=0;else b=n1(b)|0;c[e+4>>2]=b;c[e+8>>2]=n1(d)|0;d=a+100|0;c[e>>2]=c[d>>2];c[d>>2]=e;return e|0}function LP(b,c){b=b|0;c=c|0;MP(b);a[b+44>>0]=0;NP(b)|0;AL(b)|0;return}function MP(b){b=b|0;var d=0,e=0;d=c[b+32>>2]|0;a:do if(d|0)while(1){e=c[d>>2]|0;if(!e)break a;if((a[e>>0]|0)==103?P0(e,108427)|0:0)JP(b,0,c[d+4>>2]|0);d=d+8|0}while(0);return}function NP(a){a=a|0;var b=0;b=wC(a,2,108440)|0;if(!b)a=999;else{c[a+148>>2]=c[(c[b+16>>2]|0)+12>>2];a=300}return a|0}function OP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[a+148>>2]|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0)a=lb[e&127](b,d)|0;else a=0;return a|0}function PP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function QP(a){a=a|0;var b=0.0,d=0.0;a=c[a+16>>2]|0;d=+h[a+16>>3];b=+h[a+24>>3];return (RP(~~(d>b?d:b)>>>0)|0)+1|0}function RP(a){a=a|0;var b=0,c=0;if(!a)a=-1;else{c=a>>>0>65535;a=c?a>>>16:a;c=c?16:0;b=a>>>0>255;a=b?a>>>8:a;c=b?c|8:c;b=a>>>0>15;a=b?a>>>4:a;c=b?c|4:c;b=a>>>0>3;a=(b?c|2:c)+((b?a>>>2:a)>>>0>1&1)|0}return a|0}function SP(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;q=r;p=TP(b,d,e,f,g)|0;e=UP(p)|0;if((e|0)>=0){n=q+16|0;o=q+24|0;m=q+8|0;k=g+32|0;e=0;g=0;while(1){if((g|0)>=(d|0))break;f=b+(g*40|0)+32|0;do if(c[f>>2]|0){VP(q,p,b+(g*40|0)|0);i=+h[n>>3];j=+h[o>>3];if(!(c[q>>2]|0)){a[(c[f>>2]|0)+36>>0]=1;break}if(+h[m>>3]==0.0){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1;break}if((a[k>>0]|0)==1){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1}else e=1}while(0);g=g+1|0}WP(p)}l=r;return e|0}function TP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=uH(28)|0;j=Cw(25808,c[4558]|0)|0;h=g+20|0;c[h>>2]=j;do if(j){j=CS()|0;c[g+24>>2]=j;if(!j){E1(108658,14,1,c[15686]|0)|0;i=6;break}else{c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=d;c[g+12>>2]=e;c[g+16>>2]=f;break}}else{E1(108658,14,1,c[15686]|0)|0;i=6}while(0);if((i|0)==6){a=c[h>>2]|0;if(a|0)yw(a)|0;a=c[g+24>>2]|0;if(a|0)ES(a)|0;D_(g);g=0}return g|0}function UP(a){a=a|0;var b=0;b=dQ(a)|0;if((b|0)>=0){eQ(a);fQ(a);b=yw(c[a+20>>2]|0)|0}return b|0}function VP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0;M=l;l=l+464|0;J=M+416|0;L=M+400|0;G=M+384|0;m=M+352|0;n=M+320|0;o=M+288|0;p=M+256|0;r=M+224|0;s=M+192|0;t=M+160|0;u=M+128|0;v=M+96|0;x=M+64|0;y=M+32|0;H=M;z=c[d+32>>2]|0;e=+h[z>>3];C=d+16|0;A=(e*2.0+ +h[C>>3])*.125;D=z+8|0;I=d+24|0;i=+h[I>>3];K=(+h[D>>3]*2.0+i)*.5;if(!z)qa(108451,108461,445,108471);f=J;g=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));B=z+16|0;h[B>>3]=+h[d>>3]-e;E=d+8|0;F=z+24|0;h[F>>3]=i+ +h[E>>3];XP(m,b,d,J);j=c[m>>2]|0;f=c[m+4>>2]|0;e=+h[m+8>>3];m=m+16|0;c[L>>2]=c[m>>2];c[L+4>>2]=c[m+4>>2];c[L+8>>2]=c[m+8>>2];c[L+12>>2]=c[m+12>>2];a:do if(!j){c[a>>2]=0;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}else{h[F>>3]=+h[E>>3];XP(n,b,d,J);g=c[n>>2]|0;m=c[n+4>>2]|0;i=+h[n+8>>3];n=n+16|0;c[G>>2]=c[n>>2];c[G+4>>2]=c[n+4>>2];c[G+8>>2]=c[n+8>>2];c[G+12>>2]=c[n+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=m;e=i}else g=j;h[F>>3]=+h[E>>3]-+h[D>>3];XP(o,b,d,J);m=c[o>>2]|0;j=c[o+4>>2]|0;i=+h[o+8>>3];o=o+16|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];if(!m){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else m=g;h[B>>3]=+h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];XP(p,b,d,J);g=c[p>>2]|0;j=c[p+4>>2]|0;i=+h[p+8>>3];p=p+16|0;c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];XP(r,b,d,J);g=c[r>>2]|0;j=c[r+4>>2]|0;i=+h[r+8>>3];r=r+16|0;c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[B>>3]=+h[C>>3]+ +h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];XP(s,b,d,J);g=c[s>>2]|0;j=c[s+4>>2]|0;i=+h[s+8>>3];s=s+16|0;c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3];XP(t,b,d,J);g=c[t>>2]|0;j=c[t+4>>2]|0;i=+h[t+8>>3];t=t+16|0;c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[G+8>>2]=c[t+8>>2];c[G+12>>2]=c[t+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];XP(u,b,d,J);g=c[u>>2]|0;j=c[u+4>>2]|0;i=+h[u+8>>3];u=u+16|0;c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else g=m;j=(c[J+28>>2]|0)==0;do if(!(c[J+24>>2]|0))if(j){if(c[J+32>>2]|0){w=38;break}if(!((c[J+12>>2]|0)==0&(c[J>>2]|0)==0))w=38}else w=46;else if(j)w=38;else w=46;while(0);b:do if((w|0)==38)if(!(c[J+32>>2]|0)){h[B>>3]=+h[d>>3]-+h[z>>3];p=v+4|0;r=v+8|0;s=v+16|0;m=F;j=E;i=+h[I>>3];c:while(1){while(1){h[m>>3]=+h[j>>3]+i;if(!(+h[B>>3]<=+h[C>>3]+ +h[d>>3])){w=46;break b}XP(v,b,d,J);n=c[v>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break c;if(k>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}else w=46;while(0);d:do if((w|0)==46)if((c[J+12>>2]|0)==0&(c[J>>2]|0)==0){h[B>>3]=+h[d>>3]-+h[z>>3];k=+h[E>>3];n=x+4|0;o=x+8|0;p=x+16|0;i=k;k=+h[I>>3]+k;while(1){h[F>>3]=k;if(!(k>=i-+h[D>>3]))break d;XP(x,b,d,J);j=c[x>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}i=+h[E>>3];k=+h[F>>3]-K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);i=+h[d>>3];k=+h[C>>3]+i;h[B>>3]=k;q=+h[D>>3];h[F>>3]=+h[E>>3]-q;j=c[J+4>>2]|0;do if(!(c[J+8>>2]|0)){m=c[J>>2]|0;if(!((j|0)==0&(m|0)==0)){w=59;break}if(c[J+20>>2]|0){j=0;m=0;w=59;break}if(c[J+32>>2]|0){j=0;m=0;w=59}}else{m=c[J>>2]|0;w=59}while(0);e:do if((w|0)==59){f:do if((j|0)==0&(m|0)==0){h[B>>3]=k;p=y+4|0;r=y+8|0;s=y+16|0;m=F;j=E;i=q;g:while(1){while(1){h[m>>3]=+h[j>>3]-i;i=+h[d>>3];if(!(+h[B>>3]>=i-+h[z>>3]))break f;XP(y,b,d,J);n=c[y>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break g;if(k>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);if(c[J+20>>2]|0)break;if(c[J+32>>2]|0)break;h[B>>3]=+h[C>>3]+i;i=+h[E>>3];n=H+4|0;o=H+8|0;p=H+16|0;k=i;i=i-+h[D>>3];while(1){h[F>>3]=i;if(!(i<=+h[I>>3]+k))break e;XP(H,b,d,J);j=c[H>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}k=+h[E>>3];i=+h[F>>3]+K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}while(0);l=M;return}function WP(a){a=a|0;ES(c[a+24>>2]|0)|0;D_(a);return}function XP(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;s=t+16|0;p=t;g=c[e+32>>2]|0;if(!g)qa(108451,108461,382,108480);o=g+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];o=d+4|0;m=0;g=0;while(1){if((m|0)>=(c[o>>2]|0))break;j=c[d>>2]|0;k=j+(m*40|0)|0;do if((k|0)!=(e|0)){if(+h[j+(m*40|0)+16>>3]>0.0?+h[j+(m*40|0)+24>>3]>0.0:0)break;g=g+((YP(e,k)|0)!=0&1)|0}while(0);m=m+1|0}ZP(e,q);m=c[d+24>>2]|0;m=GS(m,c[m>>2]|0,q)|0;if(!m){c[b>>2]=g;h[b+8>>3]=0.0;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}else{k=m;i=0.0;while(1){if(!k)break;j=c[(c[k+4>>2]|0)+16>>2]|0;if((j|0)!=(e|0)){_P(j,s);n=+$P(q,s);if(n>0.0){g=g+1|0;i=+aQ(e,j,q,n,f)+i}d=c[j+32>>2]|0;if(((d|0)!=0?(a[d+36>>0]|0)!=0:0)?(ZP(j,s),r=+$P(q,s),r>0.0):0){g=g+1|0;i=+bQ(e,j,q,r,f)+i}}k=c[k>>2]|0}BS(m);c[b>>2]=g;h[b+8>>3]=i;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}l=t;return}function YP(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0;a=c[a+32>>2]|0;if(+h[b+16>>3]==0.0?+h[b+24>>3]==0.0:0){if((((a|0)!=0?(d=+h[b>>3],e=+h[a+16>>3],d>e):0)?d<+h[a>>3]+e:0)?(f=+h[b+8>>3],g=+h[a+24>>3],f>g):0)a=f<+h[a+8>>3]+g&1;else a=0;return a|0}qa(108517,108461,219,108554);return 0}function ZP(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a+32>>2]|0;e=+h[a+16>>3];c[b>>2]=~~e;d=+h[a+24>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a>>3]+e);c[b+12>>2]=~~(+h[a+8>>3]+d);return}function _P(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;e=+h[a>>3];c[b>>2]=~~e;d=+h[a+8>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a+16>>3]+e);c[b+12>>2]=~~(+h[a+24>>3]+d);return}function $P(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=c[a+8>>2]|0;j=c[b>>2]|0;if((((i|0)>=(j|0)?(k=c[a>>2]|0,l=c[b+8>>2]|0,(k|0)<=(l|0)):0)?(e=c[a+12>>2]|0,f=c[b+4>>2]|0,(e|0)>=(f|0)):0)?(g=c[a+4>>2]|0,h=c[b+12>>2]|0,(g|0)<=(h|0)):0)d=(+(c[((e|0)<(h|0)?a:b)+12>>2]|0)-+(c[((g|0)>(f|0)?a:b)+4>>2]|0))*(+(c[((i|0)<(l|0)?a:b)+8>>2]|0)-+(c[((k|0)>(j|0)?a:b)>>2]|0));else d=0.0;return +d}function aQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=cQ(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{_P(a,i);g=+$P(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(ZP(a,i),h=+$P(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function bQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=cQ(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{_P(a,i);g=+$P(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(ZP(a,i),h=+$P(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function cQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=c[b+32>>2]|0;f=c[d+32>>2]|0;if((e|0)==(f|0))qa(108496,108461,276,108506);do if((a[e+36>>0]|0)!=0?(a[f+36>>0]|0)!=0:0){j=+h[b>>3];if(j==0.0?+h[b+8>>3]==0.0:0){e=-1;break}k=+h[d>>3];i=+h[d+8>>3];if(!(k==0.0&i==0.0)){g=+h[b+8>>3];if(ij?2:1;break}e=kg){if(e){e=6;break}e=k>j?8:7;break}if(!e)if(k>j)e=5;else e=-1;else e=3}else e=-1}else e=-1;while(0);return e|0}function dQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+32|0;d=k+24|0;e=k+16|0;f=k;g=QP(a)|0;h=a+4|0;i=e+4|0;j=a+20|0;b=0;while(1){if((b|0)>=(c[h>>2]|0)){b=0;break}m=uH(32)|0;o=(c[a>>2]|0)+(b*40|0)|0;n=m+12|0;c[m+28>>2]=o;gQ(f,o);c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];c[n+8>>2]=c[f+8>>2];c[n+12>>2]=c[f+12>>2];n=c[n>>2]|0;c[e>>2]=(((c[m+20>>2]|0)-n|0)/2|0)+n;n=c[m+16>>2]|0;c[i>>2]=(((c[m+24>>2]|0)-n|0)/2|0)+n;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[m+8>>2]=hQ(d,g)|0;n=c[j>>2]|0;if(!(nb[c[n>>2]&63](n,m,1)|0)){b=-1;break}else b=b+1|0}l=k;return b|0}function eQ(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;e=c[d>>2]|0;b=a+24|0;a=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!a)break;e=c[b>>2]|0;HS(e,a+12|0,c[a+28>>2]|0,e,0)|0;e=c[d>>2]|0;a=nb[c[e>>2]&63](e,a,8)|0}return}function fQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=a+20|0;f=Ew(c[e>>2]|0)|0;d=0;while(1){if(!(Ew(c[e>>2]|0)|0))break;g=c[e>>2]|0;a=c[(c[g+8>>2]|0)+4>>2]|0;if(!a){h=8;break}b=c[(c[g+4>>2]|0)+8>>2]|0;if((b|0)<0)a=c[a+8>>2]|0;else a=a+(0-b)|0;if(!a){h=8;break}nb[c[g>>2]&63](g,a,4096)|0;D_(a);d=d+1|0}if((h|0)==8)qa(108567,108461,616,108570);if((f|0)==(d|0))return;else qa(108582,108461,623,108570)}function gQ(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0.0;d=c[b+32>>2]|0;if(!d){e=0.0;f=0.0}else{e=+h[d>>3];f=+h[d+8>>3]}l=+h[b>>3];k=~~+A(+(l-e));g=+h[b+8>>3];j=~~+A(+(g-f));i=~~+N(+(l+e+ +h[b+16>>3]));if((i|0)==2147483647)qa(108594,108461,264,108621);d=~~+N(+(g+f+ +h[b+24>>3]));if((d|0)==2147483647)qa(108631,108461,266,108621);else{c[a>>2]=k;c[a+4>>2]=j;c[a+8>>2]=i;c[a+12>>2]=d;return}}function hQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=0;e=c[a>>2]|0;d=c[a+4>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;i=e>>>a&1;b=d>>>a&1;g=b+-1|0;h=g&(e^d);g=g&0-i;f=i<<1|f<<2|i^b;b=a;e=h^e^g;d=h^d^g}return f|0}function iQ(b){b=b|0;var d=0,e=0,f=0,g=0;d=W_(b)|0;if(d>>>0>=(c[46595]|0)>>>0){d=d+11|0;c[46595]=d;d=xH(c[46596]|0,d)|0;c[46596]=d;if(!d)d=0;else e=4}else{d=c[46596]|0;e=4}if((e|0)==4){g=d;while(1){e=a[b>>0]|0;if(!(e<<24>>24))break;f=e&255;if(Q$(f)|0)e=(P$(f)|0)&255;a[g>>0]=e;g=g+1|0;b=b+1|0}a[g>>0]=0}return d|0}function jQ(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0;F=l;l=l+144|0;s=F+96|0;p=F+80|0;v=F+124|0;t=F+72|0;w=F+64|0;x=F+56|0;C=F+48|0;D=F+40|0;E=F+32|0;y=F+24|0;z=F+16|0;A=F+8|0;B=F;i=F+120|0;m=F+116|0;n=F+112|0;o=F+108|0;c[e+32>>2]=f;r=b;while(1)if((a[r>>0]|0)==32)r=r+1|0;else break;c[o>>2]=255;b=a[r>>0]|0;a:do if(b<<24>>24==35){c[p>>2]=i;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=o;if((N1(r,108673,p)|0)<=2){b=a[r>>0]|0;q=12;break}switch(f|0){case 0:{G=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=G;g=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=g;j=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=j;k=+((c[o>>2]|0)>>>0)*.00392156862745098;kQ(G,g,j,t,w,x);h[e>>3]=+h[t>>3];h[e+8>>3]=+h[w>>3];h[e+16>>3]=+h[x>>3];h[e+24>>3]=k;b=0;break a}case 1:{a[e>>0]=c[i>>2];a[e+1>>0]=c[m>>2];a[e+2>>0]=c[n>>2];a[e+3>>0]=c[o>>2];b=0;break a}case 3:{j=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=j;k=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=k;G=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=G;lQ(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break a}case 2:{c[e>>2]=(((c[i>>2]|0)*65535|0)>>>0)/255|0;c[e+4>>2]=(((c[m>>2]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((c[n>>2]|0)*65535|0)>>>0)/255|0;c[e+12>>2]=(((c[o>>2]|0)*65535|0)>>>0)/255|0;b=0;break a}case 4:{h[e>>3]=+((c[i>>2]|0)>>>0)*.00392156862745098;h[e+8>>3]=+((c[m>>2]|0)>>>0)*.00392156862745098;h[e+16>>3]=+((c[n>>2]|0)>>>0)*.00392156862745098;h[e+24>>3]=+((c[o>>2]|0)>>>0)*.00392156862745098;b=0;break a}default:{b=0;break a}}}else q=12;while(0);b:do if((q|0)==12){if(!(b<<24>>24!=46?((b&255)+-48|0)>>>0>=10:0)){b=W_(r)|0;if(b>>>0>=(c[46597]|0)>>>0){b=b+11|0;c[46597]=b;b=xH(c[46598]|0,b)|0;c[46598]=b;if(!b){b=-1;break}}else b=c[46598]|0;m=b;i=r;c:while(1){n=i+1|0;i=a[i>>0]|0;switch(i<<24>>24){case 0:break c;case 44:{i=32;break}default:{}}a[m>>0]=i;m=m+1|0;i=n}a[m>>0]=0;c[s>>2]=t;c[s+4>>2]=w;c[s+8>>2]=x;if((N1(b,108687,s)|0)==3){k=+h[t>>3];k=k<1.0?k:1.0;k=k>0.0?k:0.0;h[t>>3]=k;j=+h[w>>3];j=j<1.0?j:1.0;j=j>0.0?j:0.0;h[w>>3]=j;g=+h[x>>3];g=g<1.0?g:1.0;g=g>0.0?g:0.0;h[x>>3]=g;switch(f|0){case 0:{h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=g;h[e+24>>3]=1.0;b=0;break b}case 1:{mQ(k,j,g,C,D,E);a[e>>0]=~~(+h[C>>3]*255.0);a[e+1>>0]=~~(+h[D>>3]*255.0);a[e+2>>0]=~~(+h[E>>3]*255.0);a[e+3>>0]=-1;b=0;break b}case 3:{mQ(k,j,g,C,D,E);lQ(+h[C>>3],+h[D>>3],+h[E>>3],y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{mQ(k,j,g,C,D,E);c[e>>2]=~~(+h[C>>3]*65535.0);c[e+4>>2]=~~(+h[D>>3]*65535.0);c[e+8>>2]=~~(+h[E>>3]*65535.0);c[e+12>>2]=65535;b=0;break b}case 4:{mQ(k,j,g,C,D,E);h[e>>3]=+h[C>>3];h[e+8>>3]=+h[D>>3];h[e+16>>3]=+h[E>>3];h[e+24>>3]=1.0;b=0;break b}default:{b=0;break b}}}}i=nQ(r)|0;c[v>>2]=i;if(!i)b=-1;else{b=c[46599]|0;if(!(((b|0)!=0?(u=c[b>>2]|0,(a[u>>0]|0)==(a[i>>0]|0)):0)?(b$(u,i)|0)==0:0)){b=e2(v,25844,2491,12,101)|0;c[46599]=b;if(!b)switch(f|0){case 0:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}case 1:{a[e+2>>0]=0;a[e+1>>0]=0;a[e>>0]=0;a[e+3>>0]=-1;b=1;break b}case 3:{c[e>>2]=0;b=1;break b}case 2:{c[e+8>>2]=0;c[e+4>>2]=0;c[e>>2]=0;c[e+12>>2]=65535;b=1;break b}case 4:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}default:{b=1;break b}}}switch(f|0){case 0:{h[e>>3]=+(d[b+4>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+5>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+6>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}case 1:{a[e>>0]=a[b+7>>0]|0;a[e+1>>0]=a[b+8>>0]|0;a[e+2>>0]=a[b+9>>0]|0;a[e+3>>0]=a[b+10>>0]|0;b=0;break b}case 3:{j=+(d[b+7>>0]|0)*.00392156862745098;h[C>>3]=j;k=+(d[b+8>>0]|0)*.00392156862745098;h[D>>3]=k;G=+(d[b+9>>0]|0)*.00392156862745098;h[E>>3]=G;lQ(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{c[e>>2]=(d[b+7>>0]|0)*257;c[e+4>>2]=(d[b+8>>0]|0)*257;c[e+8>>2]=(d[b+9>>0]|0)*257;c[e+12>>2]=(d[b+10>>0]|0)*257;b=0;break b}case 4:{h[e>>3]=+(d[b+7>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+8>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+9>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}default:{b=0;break b}}}}while(0);l=F;return b|0}function kQ(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;i=bc?b:c;m=ma?a:i);g=i/m;if(m>0.0)if(g>0.0){j=(m-a)/i;k=(m-b)/i;l=(m-c)/i;do if(!(m==a)){if(m==b){a=j+2.0-l;break}if(m==c)a=k+4.0-j;else a=0.0}else a=(b-c)/i;while(0);a=a*60.0;if(a<0.0)a=a+360.0}else a=0.0;else{g=0.0;a=0.0}h[d>>3]=a*.002777777777777778;h[f>>3]=m;h[e>>3]=g;return}function lQ(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h[d>>3]=1.0-a;h[e>>3]=1.0-b;h[f>>3]=1.0-c;b=+h[d>>3];c=+h[e>>3];c=b>3]=c;b=+h[f>>3];c=b>3]=c;h[d>>3]=+h[d>>3]-c;h[e>>3]=+h[e>>3]-+h[g>>3];h[f>>3]=+h[f>>3]-+h[g>>3];return}function mQ(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0,l=0;a:do if(!(b<=0.0)){i=!(a>=1.0)?a*6.0:0.0;l=~~i;i=i-+(l|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(l|0){case 0:{g=a;i=b;a=c;k=8;break a}case 1:{g=a;i=c;a=j;k=8;break a}case 2:{g=b;i=c;k=8;break a}case 3:{g=c;i=j;k=8;break a}case 4:{g=c;i=a;a=b;k=8;break a}case 5:{g=j;i=a;a=c;k=8;break a}default:break a}}else{g=c;i=c;a=c;k=8}while(0);if((k|0)==8){h[d>>3]=a;h[e>>3]=i;h[f>>3]=g}return}function nQ(b){b=b|0;var d=0,e=0;d=a[b>>0]|0;if(((d<<24>>24!=98?(e=b+1|0,!(d<<24>>24==119|(z$(e,134184,4)|0)==0)):0)?!(d<<24>>24==108|(z$(e,134189,4)|0)==0):0)?(z$(e,134194,8)|0)!=0:0){do if(d<<24>>24==47){d=A$(e,47)|0;if(!d)b=e;else{if((a[e>>0]|0)!=47){e=(V$(134203,e,4)|0)==0;b=e?d+1|0:b;break}d=c[46600]|0;if((d|0?a[d>>0]|0:0)?V$(134203,d,3)|0:0){b=pQ(d,b+2|0)|0;break}b=b+2|0}}else{d=c[46600]|0;if(((d|0)!=0?(a[d>>0]|0)!=0:0)?(V$(134203,d,3)|0)!=0:0)b=pQ(d,b)|0}while(0);b=iQ(b)|0}return b|0}function oQ(a,b){a=a|0;b=b|0;return O$(c[a>>2]|0,c[b>>2]|0)|0}function pQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=W_(a)|0;g=(W_(b)|0)+g|0;d=g+13|0;if((g+3|0)>>>0<(c[46601]|0)>>>0)d=c[46602]|0;else{c[46601]=d;d=xH(c[46602]|0,d)|0;c[46602]=d}c[e>>2]=a;c[e+4>>2]=b;Y0(d,134208,e)|0;l=f;return c[46602]|0}function qQ(a){a=a|0;c[46600]=a;return}function rQ(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0;f=l;l=l+208|0;g=f;sQ(g,+h[a>>3],+h[a+8>>3],b,c,d,e);a=tQ(g)|0;l=f;return a|0}function sQ(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var i=0,j=0;h[a>>3]=b;h[a+8>>3]=c;j=a+16|0;h[j>>3]=d;i=a+24|0;h[i>>3]=e;h[a+32>>3]=0.0;c=+K(+(+F(+f)/e),+(+E(+f)/d));h[a+56>>3]=c;e=+K(+(+F(+g)/e),+(+E(+g)/d));h[a+40>>3]=1.0;h[a+48>>3]=0.0;e=e-+A(+((e-c)*.15915494309189535))*6.283185307179586;h[a+64>>3]=g-f>3.141592653589793&e-c<3.141592653589793?e+6.283185307179586:e;zQ(a);AQ(a);BQ(a);g=+h[j>>3];g=(g-+h[i>>3])/g;h[a+168>>3]=g;h[a+176>>3]=(2.0-g)*g;g=1.0-g;h[a+184>>3]=g;h[a+192>>3]=g*g;return}function tQ(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;q=uH(8)|0;f=+h[a+56>>3];e=+h[a+64>>3]-f;p=1;b=0;while(1){o=e/+(p|0);if(!(b<<24>>24==0&(p|0)<1024))break;a:do if(!(o<=1.5707963267948966))b=0;else{c=f;d=0;b=1;while(1){if(!(b<<24>>24!=0&(d|0)<(p|0)))break a;n=c+o;b=+uQ(a,c,n)<=1.0e-05&1;c=n;d=d+1|0}}while(0);p=p<<1}i=+E(+f);u=+F(+f);d=a+16|0;s=+h[d>>3];v=s*i;j=a+24|0;c=+h[j>>3];g=c*u;i=c*i;c=+h[a>>3];k=a+40|0;t=+h[k>>3];l=a+48|0;r=+h[l>>3];e=t*v+c-r*g;m=a+8|0;n=+h[m>>3];g=r*v+t*g+n;s=-(u*s);vQ(q,c,n);wQ(q,e,g);n=+G(+(o*.5));n=+F(+o)*.3333333333333333*(+C(+(n*n*3.0+4.0))+-1.0);c=f;f=g;g=r*s+t*i;i=t*s-r*i;b=0;while(1){if((b|0)>=(p|0))break;r=c+o;u=+E(+r);v=+F(+r);x=+h[d>>3];z=x*u;w=+h[j>>3];t=w*v;u=w*u;w=+h[k>>3];y=+h[l>>3];s=w*z+ +h[a>>3]-y*t;t=y*z+w*t+ +h[m>>3];x=-(v*x);v=w*x-y*u;u=y*x+w*u;xQ(q,e+i*n,f+g*n,s-v*n,t-u*n,s,t);c=r;e=s;f=t;g=u;i=v;b=b+1|0}yQ(q);return q|0}function uQ(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;d=c+b;i=+h[a+16>>3];e=+h[a+24>>3]/i;g=+E(+d);f=+E(+(d*2.0));d=+E(+(d*3.0));a=e<.25?10392:10648;return +(((e*.001+4.98)*e+.207)/(e+.0067)*i*+L(+(((+h[a+32>>3]*e+ +h[a+40>>3])*e+ +h[a+48>>3])/(+h[a+56>>3]+e)*g+((+h[a>>3]*e+ +h[a+8>>3])*e+ +h[a+16>>3])/(+h[a+24>>3]+e)+((+h[a+64>>3]*e+ +h[a+72>>3])*e+ +h[a+80>>3])/(+h[a+88>>3]+e)*f+((+h[a+96>>3]*e+ +h[a+104>>3])*e+ +h[a+112>>3])/(+h[a+120>>3]+e)*d+(((+h[a+160>>3]*e+ +h[a+168>>3])*e+ +h[a+176>>3])/(+h[a+184>>3]+e)*g+((+h[a+128>>3]*e+ +h[a+136>>3])*e+ +h[a+144>>3])/(+h[a+152>>3]+e)+((+h[a+192>>3]*e+ +h[a+200>>3])*e+ +h[a+208>>3])/(+h[a+216>>3]+e)*f+((+h[a+224>>3]*e+ +h[a+232>>3])*e+ +h[a+240>>3])/(+h[a+248>>3]+e)*d)*(c-b))))}function vQ(a,b,d){a=a|0;b=+b;d=+d;var e=0;c[46603]=100;e=uH(1600)|0;c[a>>2]=e;h[e>>3]=b;h[e+8>>3]=d;c[a+4>>2]=1;return}function wQ(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;f=c[a>>2]|0;e=(c[a+4>>2]|0)+-1|0;xQ(a,+h[f+(e<<4)>>3],+h[f+(e<<4)+8>>3],b,d,b,d);return}function xQ(a,b,d,e,f,g,i){a=a|0;b=+b;d=+d;e=+e;f=+f;g=+g;i=+i;var j=0,k=0,l=0,m=0;l=a+4|0;j=c[l>>2]|0;k=c[46603]|0;if((j+3|0)<(k|0))a=c[a>>2]|0;else{c[46603]=k<<1;j=F_(c[a>>2]|0,k<<5)|0;c[a>>2]=j;a=j;j=c[l>>2]|0}h[a+(j<<4)>>3]=b;m=j+1|0;h[a+(j<<4)+8>>3]=d;h[a+(m<<4)>>3]=e;k=j+2|0;h[a+(m<<4)+8>>3]=f;h[a+(k<<4)>>3]=g;c[l>>2]=j+3;h[a+(k<<4)+8>>3]=i;return}function yQ(a){a=a|0;var b=0;b=c[a>>2]|0;wQ(a,+h[b>>3],+h[b+8>>3]);c[a>>2]=F_(c[a>>2]|0,c[a+4>>2]<<4)|0;c[46603]=0;return}function zQ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0;d=+h[a+16>>3];b=+h[a+24>>3];b=+C(+(d*d-b*b));d=b*+h[a+40>>3];b=b*+h[a+48>>3];e=+h[a>>3];h[a+104>>3]=e-d;c=+h[a+8>>3];h[a+112>>3]=c-b;h[a+120>>3]=e+d;h[a+128>>3]=c+b;return}function AQ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;d=+h[a+16>>3];i=+h[a+56>>3];j=+E(+i)*d;b=+h[a+24>>3];i=+F(+i)*b;g=+h[a+64>>3];d=+E(+g)*d;b=+F(+g)*b;g=+h[a>>3];c=+h[a+40>>3];e=+h[a+48>>3];h[a+72>>3]=c*j+g-e*i;f=+h[a+8>>3];h[a+80>>3]=e*j+f+c*i;h[a+88>>3]=g+c*d-e*b;h[a+96>>3]=f+e*d+c*b;return}function BQ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0;k=+h[a+24>>3];l=+h[a+16>>3];e=k/l;m=+h[a+48>>3];n=+B(+m)<.1;j=+h[a+40>>3];do if(n){b=m/j;c=+J(+(b*e));d=-c;if(j<0.0){b=+J(+(b/e));e=d;d=3.141592653589793-c;c=4.71238898038469-b;b=1.5707963267948966-b;break}else{b=+J(+(b/e));e=-3.141592653589793-c;c=1.5707963267948966-b;b=-1.5707963267948966-b;break}}else{b=j/m;c=+J(+(b/e));d=c+1.5707963267948966;if(m<0.0){b=+J(+(b*e));e=c+-1.5707963267948966;c=b+3.141592653589793;break}else{b=+J(+(b*e));e=d;d=c+4.71238898038469;c=b;b=b+-3.141592653589793;break}}while(0);g=+h[a+56>>3];e=e-+A(+((e-g)*.15915494309189535))*6.283185307179586;b=b-+A(+((b-g)*.15915494309189535))*6.283185307179586;f=d-+A(+((d-g)*.15915494309189535))*6.283185307179586;g=c-+A(+((c-g)*.15915494309189535))*6.283185307179586;i=+h[a+64>>3];if(!(e<=i)){e=+h[a+72>>3];c=+h[a+88>>3];c=e>3]-k*+F(+e)*m;h[a+136>>3]=c;if(!(b<=i)){e=+h[a+80>>3];d=+h[a+96>>3];d=e>3]+ +F(+b)*k*j;h[a+144>>3]=d;if(!(f<=i)){f=+h[a+72>>3];b=+h[a+88>>3];b=f>b?f:b}else b=+E(+f)*l*j+ +h[a>>3]-k*+F(+f)*m;h[a+152>>3]=b-c;if(!(g<=i)){m=+h[a+80>>3];b=+h[a+96>>3];b=m>b?m:b}else b=+E(+g)*l*m+ +h[a+8>>3]+ +F(+g)*k*j;h[a+160>>3]=b-d;return}function CQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+80|0;m=n;DQ(b);k=+h[e+56>>3];g=+h[e+64>>3];switch(a[e+80>>0]|0){case 116:{g=(+h[e+48>>3]-+EQ(d))*.5+g;f=4;break}case 98:{g=g-(+h[e+48>>3]-+EQ(d))*.5;f=4;break}default:{}}if((f|0)==4)g=g+-1.0;h[m>>3]=k;h[m+8>>3]=g;c[m+20>>2]=c[e+8>>2];c[m+16>>2]=c[e+4>>2];h[m+32>>3]=+h[e+16>>3];j=b+16|0;f=xx(c[(c[j>>2]|0)+8>>2]|0,134215)|0;e=m+56|0;c[e>>2]=f;i=m+60|0;c[i>>2]=c[(c[j>>2]|0)+212>>2];j=m+64|0;a[j>>0]=0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))c[e>>2]=134226;if((a[d+4>>0]|0)==1){e=c[d>>2]|0;YO(b,c[(c[b>>2]|0)+336>>2]|0);f=c[e+24>>2]|0;if(!f)UO(b,134232);else UO(b,f);GQ(b,e,m);if(a[j>>0]|0)D_(c[i>>2]|0)}else FQ(b,c[d>>2]|0,m);HQ(b);l=n;return}function DQ(a){a=a|0;var d=0,e=0,f=0;d=NE(a)|0;e=c[d>>2]|0;a=c[e+4>>2]|0;c[d+4>>2]=a;c[d+12>>2]=c[e+12>>2];switch(a|0){case 2:{a=e+8|0;f=6;break}case 0:{a=e+8|0;f=6;break}case 1:{a=e+8|0;f=6;break}case 3:{a=e+8|0;f=6;break}default:{}}if((f|0)==6)c[d+8>>2]=c[a>>2];c[d+208>>2]=c[e+208>>2];c[d+228>>2]=c[e+228>>2];c[d+244>>2]=c[e+244>>2];f=d+260|0;b[f>>1]=b[f>>1]&-2|b[e+260>>1]&1;return}function EQ(b){b=b|0;var d=0.0,e=0,f=0;switch(a[b+4>>0]|0){case 1:{e=c[b>>2]|0;b=e+72|0;e=e+56|0;f=5;break}case 3:{e=c[b>>2]|0;b=e+24|0;e=e+8|0;f=5;break}case 2:{e=c[b>>2]|0;b=e+32|0;e=e+16|0;f=5;break}default:d=0.0}if((f|0)==5)d=+h[b>>3]-+h[e>>3];return +d}function FQ(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+96|0;j=n+64|0;i=n+32|0;g=n+16|0;k=n;m=b[e+4>>1]|0;if(m<<16>>16>=1){r=e+8|0;p=+h[e+24>>3];o=+h[r>>3];h[k>>3]=(o+p)*.5+ +h[f>>3];h[k+8>>3]=(+h[e+16>>3]+ +h[e+32>>3])*.5+ +h[f+8>>3];q=c[e>>2]|0;s=f+16|0;f=a[e+6>>0]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[i+16>>2]=c[s+16>>2];c[i+20>>2]=c[s+20>>2];c[i+24>>2]=c[s+24>>2];c[i+28>>2]=c[s+28>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];c[j+16>>2]=c[r+16>>2];c[j+20>>2]=c[r+20>>2];c[j+24>>2]=c[r+24>>2];c[j+28>>2]=c[r+28>>2];TQ(d,m<<16>>16,q,g,(p-o)*.5,i,j,f)}l=n;return}function GQ(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+176|0;t=y+96|0;v=y+64|0;w=y+136|0;p=y;q=y+128|0;r=f+48|0;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];c[v+12>>2]=c[r+12>>2];c[v+16>>2]=c[r+16>>2];c[v+20>>2]=c[r+20>>2];c[v+24>>2]=c[r+24>>2];c[v+28>>2]=c[r+28>>2];m=+h[g>>3];n=+h[g+8>>3];r=f+84|0;i=c[r>>2]|0;if(!(c[f>>2]|0))x=(c[f+8>>2]|0)!=0;else x=1;u=f+108|0;j=c[u>>2]|0;if(j|0)IQ(g,j,183464);h[v>>3]=+h[v>>3]+m;s=v+16|0;h[s>>3]=+h[s>>3]+m;s=v+8|0;h[s>>3]=+h[s>>3]+n;s=v+24|0;h[s>>3]=+h[s>>3]+n;if(x?(c[e+152>>2]&4|0)==0:0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];s=JQ(e,g,f,t,w)|0}else s=0;o=f+42|0;j=b[o>>1]|0;if(!(j&32)){k=c[f+20>>2]|0;if(k){j=KQ(e,k,c[f+28>>2]|0,j&65535,q)|0;if(!(b[o>>1]&4)){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];$O(e,t,j)}else{o=d[f+33>>0]|0;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];EJ(e,LQ(p,t,o)|0,4,4,j)}D_(c[q>>2]|0)}while(1){j=c[i>>2]|0;if(!j)break;MQ(e,j,g);i=i+4|0}i=c[r>>2]|0;fP(e,1.0);j=f+24|0;while(1){k=i+4|0;i=c[i>>2]|0;if(!i)break;if(!(a[i+100>>0]|0)){i=k;continue}NQ(e,i,g,c[j>>2]|0,c[k>>2]|0);i=k}if(a[f+33>>0]|0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];OQ(e,f,t)}}if(s|0)PQ(e,w);if((x?c[e+152>>2]&4|0:0)?(c[t>>2]=c[v>>2],c[t+4>>2]=c[v+4>>2],c[t+8>>2]=c[v+8>>2],c[t+12>>2]=c[v+12>>2],c[t+16>>2]=c[v+16>>2],c[t+20>>2]=c[v+20>>2],c[t+24>>2]=c[v+24>>2],c[t+28>>2]=c[v+28>>2],JQ(e,g,f,t,w)|0):0)PQ(e,w);if(c[u>>2]|0)QQ(g,183464);l=y;return}function HQ(a){a=a|0;var b=0;b=c[a+16>>2]|0;c[b+208>>2]=0;c[b+228>>2]=0;c[b+244>>2]=0;c[b+212>>2]=0;OE(a);return}function IQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;i=a+16|0;f=c[i>>2]|0;if(f|0){if(!(c[b>>2]|0)){f=0;g=d}else{c[d>>2]=f;f=c[b>>2]|0;g=i}c[g>>2]=f}f=c[a+20>>2]|0;if(f|0){g=b+4|0;if(!(c[g>>2]|0)){f=0;g=d}else{c[d+4>>2]=f;f=c[g>>2]|0;g=i}c[g+4>>2]=f}e=+h[a+32>>3];if(e>=0.0){f=b+16|0;if(!(+h[f>>3]>=0.0))e=-1.0;else{h[d+16>>3]=e;e=+h[f>>3];d=i}h[d+16>>3]=e}return}function JQ(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+224|0;n=u+8|0;k=u;t=u+40|0;j=u+184|0;i=u+56|0;m=c[d+16>>2]|0;o=m+208|0;c[h>>2]=c[o>>2];p=m+228|0;c[h+4>>2]=c[p>>2];q=m+244|0;c[h+8>>2]=c[q>>2];r=m+212|0;c[h+12>>2]=c[r>>2];s=m+260|0;a[h+16>>0]=(b[s>>1]<<15&65535)<<16>>16>>15;h=c[f+16>>2]|0;if((h|0)!=0?(a[h>>0]|0)!=0:0)i=0;else{Tw(t,128,i);i=e+60|0;h=c[i>>2]|0;if(!h){h=n1(QE(d,c[m+8>>2]|0,t)|0)|0;c[i>>2]=h;a[e+64>>0]=1}Ww(t,h)|0;i=c[46604]|0;c[46604]=i+1;c[k>>2]=i;Y0(j,134309,k)|0;Ww(t,j)|0;i=t+4|0;h=c[i>>2]|0;if(h>>>0>=(c[t+8>>2]|0)>>>0){Uw(t,1)|0;h=c[i>>2]|0}a[h>>0]=0;h=c[t>>2]|0;c[i>>2]=h;i=1}h=PE(d,0,c[f>>2]|0,c[f+12>>2]|0,c[f+8>>2]|0,h,c[m+8>>2]|0)|0;if(i)Xw(t);do if(h|0){if((c[o>>2]|0)==0?(b[s>>1]&1)==0:0)break;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];c[n+16>>2]=c[g+16>>2];c[n+20>>2]=c[g+20>>2];c[n+24>>2]=c[g+24>>2];c[n+28>>2]=c[g+28>>2];XE(d,n);PO(d,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)}while(0);l=u;return h|0}function KQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;if(!((uG(b,f,i)|0)<<24>>24)){WO(a,b);b=1}else{WO(a,c[f>>2]|0);b=c[f+4>>2]|0;h=+g[i>>2];if(!b)XO(a,134232,d,h);else XO(a,b,d,h);b=e>>>1&1|2}UO(a,134297);l=j;return b|0}function LQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];e=a+32|0;b=b+16|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];if((d|0)>1){j=+(d|0)*.5;i=+h[a>>3]+j;h[a>>3]=i;d=a+8|0;g=+h[d>>3]+j;h[d>>3]=g;f=+h[e>>3]-j;h[e>>3]=f;e=a+40|0;j=+h[e>>3]-j;h[e>>3]=j}else{f=+h[e>>3];g=+h[a+8>>3];i=+h[a>>3];j=+h[a+40>>3]}h[a+16>>3]=f;h[a+24>>3]=g;h[a+48>>3]=i;h[a+56>>3]=j;return a|0}function MQ(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+176|0;r=v+96|0;s=v+136|0;t=v+64|0;p=v;q=v+128|0;u=f+48|0;c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];c[t+8>>2]=c[u+8>>2];c[t+12>>2]=c[u+12>>2];c[t+16>>2]=c[u+16>>2];c[t+20>>2]=c[u+20>>2];c[t+24>>2]=c[u+24>>2];c[t+28>>2]=c[u+28>>2];j=+h[g>>3];k=+h[g+8>>3];if(!(c[f>>2]|0))u=(c[f+8>>2]|0)!=0;else u=1;h[t>>3]=+h[t>>3]+j;o=t+16|0;h[o>>3]=+h[o>>3]+j;o=t+8|0;h[o>>3]=+h[o>>3]+k;o=t+24|0;h[o>>3]=+h[o>>3]+k;if(u?(c[e+152>>2]&4|0)==0:0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];o=JQ(e,g,f,r,s)|0}else o=0;n=f+42|0;i=b[n>>1]|0;a:do if(!(i&32)){m=c[f+20>>2]|0;if(m|0){i=KQ(e,m,c[f+28>>2]|0,i&65535,q)|0;if(!(b[n>>1]&4)){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];$O(e,r,i)}else{n=d[f+33>>0]|0;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];EJ(e,LQ(p,r,n)|0,4,4,i)}D_(c[q>>2]|0)}if(a[f+33>>0]|0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];OQ(e,f,r)}i=f+88|0;switch(a[f+92>>0]|0){case 1:{GQ(e,c[i>>2]|0,g);break a}case 3:{SQ(e,c[i>>2]|0,g);break a}default:{FQ(e,c[i>>2]|0,g);break a}}}while(0);if(o|0)PQ(e,s);if((u?c[e+152>>2]&4|0:0)?(c[r>>2]=c[t>>2],c[r+4>>2]=c[t+4>>2],c[r+8>>2]=c[t+8>>2],c[r+12>>2]=c[t+12>>2],c[r+16>>2]=c[t+16>>2],c[r+20>>2]=c[t+20>>2],c[r+24>>2]=c[t+24>>2],c[r+28>>2]=c[t+28>>2],JQ(e,g,f,r,s)|0):0)PQ(e,s);l=v;return}function NQ(f,g,i,j,k){f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+32|0;y=A+16|0;z=A;r=+h[i>>3];x=+h[i+8>>3];q=(j|0)==0?134232:j;WO(f,q);UO(f,q);t=+h[g+48>>3];o=+h[g+56>>3];u=+h[g+64>>3];p=+h[g+72>>3];s=t+r;r=u+r;x=o+x;q=g+100|0;i=a[q>>0]|0;if((i&1)!=0?(n=c[g+96>>2]|0,((e[g+80>>1]|0)+(e[g+84>>1]|0)|0)<(c[n+104>>2]|0)):0){i=b[g+86>>1]|0;do if(i<<16>>16)if(((e[g+82>>1]|0)+(i&65535)|0)==(c[n+100>>2]|0)){B=a[n+32>>0]|0;C=(B<<24>>24)/2|0;j=(C<<24>>24)+(d[n+33>>0]|0)|0;i=j;j=j&255;m=x-+(C<<24>>24);n=B;break}else{n=a[n+32>>0]|0;i=0;j=((n<<24>>24)/2|0)<<24>>24;m=x;break}else{C=a[n+32>>0]|0;j=((C<<24>>24)/2|0)<<24>>24;i=j+(d[n+33>>0]|0)|0;m=x;n=C}while(0);h[z+8>>3]=m-+(j|0);h[z>>3]=r+ +(((n<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];RQ(f,y,0.0,p-o+ +(i&255|0)+ +(n<<24>>24));i=a[q>>0]|0}if(i&2?(v=b[g+86>>1]|0,w=c[g+96>>2]|0,((e[g+82>>1]|0)+(v&65535)|0)<(c[w+100>>2]|0)):0){i=b[g+84>>1]|0;do if(!(i<<16>>16)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;n=(C<<24>>24)+(d[w+33>>0]|0)|0;j=n&255;n=n&255;m=+(C<<24>>24);h[z>>3]=s-m-+(n|0);if((c[w+104>>2]|0)==(e[g+80>>1]|0)){j=n<<1&255;break}if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+(j&255)-u+ +h[w+64>>3]-m)&255}else{if(((e[g+80>>1]|0)+(i&65535)|0)==(c[w+104>>2]|0)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;j=(C&255)+(d[w+33>>0]|0)&255;h[z>>3]=s-+(C<<24>>24);break}i=a[w+32>>0]|0;m=+(((i<<24>>24)/2|0)<<24>>24);h[z>>3]=s-m;if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+h[w+64>>3]-u-m)&255;else j=0}while(0);h[z+8>>3]=x-+(((i<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];RQ(f,y,u-t+ +(j&255)+ +(i<<24>>24),0.0)}l=A;return}function OQ(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;p=l;l=l+160|0;o=p+112|0;n=p;j=p+144|0;m=c[f+24>>2]|0;UO(e,(m|0)==0?134232:m);m=f+42|0;i=b[m>>1]|0;if(!(i&384))YO(e,c[(c[e>>2]|0)+336>>2]|0);else{c[j+4>>2]=0;c[j>>2]=0;i=i&65535;if(!(i&256)){if(i&128|0){i=134238;k=4}}else{i=134245;k=4}if((k|0)==4)c[j>>2]=i;YO(e,j)}k=f+33|0;fP(e,+(d[k>>0]|0));a:do if(!(b[m>>1]&4)){i=b[f+36>>1]&15360;if(!(i<<16>>16)){i=a[k>>0]|0;if((i&255)>1){q=+(i&255)*.5;h[g>>3]=+h[g>>3]+q;n=g+8|0;h[n>>3]=+h[n>>3]+q;n=g+16|0;h[n>>3]=+h[n>>3]-q;n=g+24|0;h[n>>3]=+h[n>>3]-q};c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];$O(e,o,0);break}j=n+16|0;m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];LQ(j,o,m)|0;do switch(((i&65535)+-1024|0)>>>10&4194303|0){case 7:{bP(e,j,2);break a}case 3:{bP(e,n+32|0,2);break a}case 1:{bP(e,n+48|0,2);break a}case 0:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,2);break a}case 11:{bP(e,j,3);break a}case 5:{bP(e,n+32|0,3);break a}case 2:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];bP(e,n+48|0,3);break a}case 8:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,3);break a}case 13:{bP(e,j,4);break a}case 6:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];bP(e,n+32|0,4);break a}case 10:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];g=n+96|0;o=n+32|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];bP(e,n+48|0,4);break a}case 12:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,4);break a}case 9:{bP(e,j,2);bP(e,n+48|0,2);break a}case 4:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,2);bP(e,n+32|0,2);break a}default:break a}while(0)}else{m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];EJ(e,LQ(n,o,m)|0,4,4,0)}while(0);l=p;return}function PQ(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=c[d+16>>2]|0;f=h+208|0;if((c[f>>2]|0)==0?(b[h+260>>1]&1)==0:0)d=0;else{QO(d);d=c[f>>2]|0}if((d|0)!=(c[e>>2]|0)){D_(d);c[f>>2]=c[e>>2]}d=h+228|0;f=c[d>>2]|0;g=e+4|0;if((f|0)!=(c[g>>2]|0)){D_(f);c[d>>2]=c[g>>2]}d=h+244|0;f=c[d>>2]|0;g=e+8|0;if((f|0)!=(c[g>>2]|0)){D_(f);c[d>>2]=c[g>>2]}d=h+212|0;f=c[d>>2]|0;g=e+12|0;if((f|0)!=(c[g>>2]|0)){D_(f);c[d>>2]=c[g>>2]}h=h+260|0;b[h>>1]=b[h>>1]&-2|a[e+16>>0]&1;return}function QQ(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(e|0)c[a+16>>2]=e;e=c[b+4>>2]|0;if(e|0)c[a+20>>2]=e;d=+h[b+16>>3];if(d>=0.0)h[a+32>>3]=d;return}function RQ(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0;f=l;l=l+64|0;g=f+32|0;i=f;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=+h[b>>3]+d;h[i+24>>3]=+h[b+8>>3]+e;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];c[g+20>>2]=c[i+20>>2];c[g+24>>2]=c[i+24>>2];c[g+28>>2]=c[i+28>>2];$O(a,g,1);l=f;return}function SQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0;i=l;l=l+64|0;g=i;k=+h[e>>3];n=k+ +h[d>>3];m=+h[e+8>>3];j=m+ +h[d+8>>3];k=k+ +h[d+16>>3];m=m+ +h[d+24>>3];h[g>>3]=k;h[g+8>>3]=m;h[g+32>>3]=n;h[g+40>>3]=j;h[g+16>>3]=n;h[g+24>>3]=m;h[g+48>>3]=k;h[g+56>>3]=j;f=c[d+36>>2]|0;if(!f)f=c[e+56>>2]|0;e=c[d+32>>2]|0;if(!e)qa(134252,134260,623,134272);if(!(a[e>>0]|0))qa(134286,134260,624,134272);else{dP(b,e,g,4,1,f);l=i;return}}function TQ(d,e,f,g,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0;R=l;l=l+128|0;K=R+104|0;O=R+48|0;P=R+16|0;L=R;J=L;c[J>>2]=0;c[J+4>>2]=0;M=+h[g>>3];N=M-i;I=M+i;J=L+8|0;h[J>>3]=(+h[k+24>>3]-+h[k+8>>3])*.5+ +h[g+8>>3];RO(d,1);D=P+16|0;E=P+4|0;F=P+24|0;G=O+4|0;H=O+16|0;s=(m|0)==0;t=O+24|0;u=O+8|0;v=O+32|0;w=O+40|0;x=O+48|0;y=j+16|0;z=j+4|0;A=P+8|0;q=0;while(1){if((q|0)>=(e|0))break;switch(a[f+(q*24|0)+6>>0]|0){case 108:{i=N;break}case 114:{i=I-+h[f+(q*24|0)+8>>3];break}default:i=M-+h[f+(q*24|0)+8>>3]*.5}h[g>>3]=i;B=f+(q*24|0)+16|0;h[J>>3]=+h[J>>3]-+h[B>>3];C=f+(q*24|0)+4|0;p=c[f+(q*24|0)>>2]|0;r=0;while(1){if((r|0)>=(b[C>>1]|0))break;o=p+4|0;m=c[o>>2]|0;if(m){h[D>>3]=+h[(+h[m+16>>3]>0.0?m:j)+16>>3];c[P>>2]=c[((c[m>>2]|0)==0?j:m)>>2];k=c[((c[m+4>>2]|0)==0?j:m)+4>>2]|0;c[E>>2]=k;m=c[m+24>>2]&127;if(!m)Q=12;else m=c[F>>2]&-128|m}else{h[D>>3]=+h[y>>3];c[P>>2]=c[j>>2];k=c[z>>2]|0;c[E>>2]=k;Q=12}if((Q|0)==12){Q=0;m=c[F>>2]&-128}c[F>>2]=m;UO(d,k);c[O>>2]=c[p>>2];c[G>>2]=P;h[H>>3]=+h[p+16>>3];if(s)n=1.0;else n=+h[p+24>>3];h[t>>3]=n;c[A>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[p+8>>2];o=p+32|0;h[v>>3]=+h[o>>3];h[w>>3]=+h[B>>3];a[x>>0]=108;h[L>>3]=i;c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];TO(d,K,O);n=+h[o>>3]+i;h[g>>3]=n;p=p+56|0;r=r+1|0;i=n}q=q+1|0}SO(d);l=R;return}function UQ(a){a=a|0;D_(c[a>>2]|0);D_(c[a+4>>2]|0);D_(c[a+8>>2]|0);D_(c[a+16>>2]|0);D_(c[a+12>>2]|0);D_(c[a+20>>2]|0);D_(c[a+24>>2]|0);return}function VQ(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(a|0){j=a+4|0;e=0;g=c[a>>2]|0;while(1){if((e|0)>=(b[j>>1]|0))break;k=g+4|0;d=0;f=c[g>>2]|0;while(1){if((d|0)>=(b[k>>1]|0))break;D_(c[f>>2]|0);h=c[f+8>>2]|0;if(h|0?(i=c[f+12>>2]|0,i|0):0)tb[i&127](h);d=d+1|0;f=f+56|0}e=e+1|0;g=g+24|0}d=c[a>>2]|0;if(d|0)D_(d);D_(a)}return}function WQ(a){a=a|0;D_(c[a+32>>2]|0);D_(a);return}function XQ(b,d){b=b|0;d=d|0;switch(a[b+4>>0]|0){case 1:{YQ(c[b>>2]|0);break}case 3:{WQ(c[b>>2]|0);break}default:VQ(c[b>>2]|0)}if(d|0)D_(b);return}function YQ(a){a=a|0;var b=0,d=0,e=0;e=a+84|0;if((c[a+100>>2]|0)==-1)yw(c[e>>2]|0)|0;else{b=c[e>>2]|0;D_(c[a+92>>2]|0);D_(c[a+96>>2]|0);while(1){d=c[b>>2]|0;if(!d)break;ZQ(d);b=b+4|0}D_(c[e>>2]|0)}UQ(a);D_(a);return}function ZQ(a){a=a|0;XQ(a+88|0,0);UQ(a);D_(a);return}function _Q(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;b=c[(c[(c[b+16>>2]|0)+104>>2]|0)+72>>2]|0;if((a[b+4>>0]|0)!=2?(g=$Q(c[b>>2]|0,e)|0,(g|0)!=0):0){c[f>>2]=d[g+35>>0];b=g+48|0}else b=0;return b|0}function $Q(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;if(!((d|0)!=0?(O$(d,b)|0)==0:0))e=3;a:do if((e|0)==3){d=c[a+84>>2]|0;while(1){a=c[d>>2]|0;if(!a){a=0;break a}a=aR(a,b)|0;if(!a)d=d+4|0;else break}}while(0);return a|0}function aR(b,d){b=b|0;d=d|0;var e=0;e=c[b+4>>2]|0;if(!((e|0)!=0?(O$(e,d)|0)==0:0))if((a[b+92>>0]|0)==1)b=$Q(c[b+88>>2]|0,d)|0;else b=0;return b|0}function bR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function cR(d){d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=d+92|0;c[p>>2]=uH((c[d+100>>2]<<2)+4|0)|0;n=uH((c[d+104>>2]<<2)+4|0)|0;c[d+96>>2]=n;o=d+32|0;m=c[d+84>>2]|0;while(1){l=c[m>>2]|0;if(!l)break;d=b[l+82>>1]|0;f=+h[l+72>>3];if(d<<16>>16==1)i=~~f;else{i=~~((f-+(O((a[o>>0]|0)+-1|0,(d&65535)+-1|0)|0))/+(d&65535));i=(i|0)>1?i:1}j=b[l+80>>1]|0;f=+h[l+64>>3];if(j<<16>>16==1)k=~~f;else{k=~~((f-+(O((a[o>>0]|0)+-1|0,(j&65535)+-1|0)|0))/+(j&65535));k=(k|0)>1?k:1}q=e[l+86>>1]|0;g=(d&65535)+q|0;d=q;while(1){if((d|0)>=(g|0))break;q=(c[p>>2]|0)+(d<<2)|0;r=c[q>>2]|0;c[q>>2]=(r|0)>(i|0)?r:i;d=d+1|0}d=e[l+84>>1]|0;g=(j&65535)+d|0;while(1){if((d|0)>=(g|0))break;r=n+(d<<2)|0;q=c[r>>2]|0;c[r>>2]=(q|0)>(k|0)?q:k;d=d+1|0}m=m+4|0}return}function dR(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;if(a>>>0<21)a=c[55736+(a<<2)>>2]|0;else{c[b>>2]=a;Y0(191879,134313,b)|0;a=191879}l=d;return a|0}function eR(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+104|0;l=a+100|0;j=d+16|0;f=0;g=0;while(1){if((f|0)>(c[k>>2]|0))break;i=az(d,dR(f)|0,1)|0;Az(i,134365,304,1)|0;m=i+16|0;c[(c[m>>2]|0)+176>>2]=0;o=uH((c[l>>2]<<2)+4|0)|0;n=c[m>>2]|0;c[n+172>>2]=o;c[n+184>>2]=0;n=uH((c[l>>2]<<2)+4|0)|0;c[(c[m>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}j=b+16|0;f=0;g=0;while(1){if((f|0)>(c[l>>2]|0))break;i=az(b,dR(f)|0,1)|0;Az(i,134365,304,1)|0;o=i+16|0;c[(c[o>>2]|0)+176>>2]=0;m=uH((c[k>>2]<<2)+4|0)|0;n=c[o>>2]|0;c[n+172>>2]=m;c[n+184>>2]=0;n=uH((c[k>>2]<<2)+4|0)|0;c[(c[o>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}f=c[a+84>>2]|0;while(1){g=c[f>>2]|0;if(!g)break;o=g+84|0;n=az(d,dR(e[o>>1]|0)|0,0)|0;o=az(d,dR((e[g+80>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;fR(d,n,o,~~+h[g+64>>3]);o=g+86|0;n=az(b,dR(e[o>>1]|0)|0,0)|0;o=az(b,dR((e[g+82>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;fR(b,n,o,~~+h[g+72>>3]);f=f+4|0}gR(d);gR(b);return}function fR(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=Rx(a,d,f,0,0)|0;if(!h){i=Rx(a,d,f,0,1)|0;Az(i,134378,176,1)|0;b[(c[i+16>>2]|0)+170>>1]=g;d=d+16|0;a=c[d>>2]|0;h=c[a+180>>2]|0;if(!h)a=vH((c[a+184>>2]<<2)+8|0)|0;else a=xH(h,(c[a+184>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+180>>2]=a;g=g+184|0;h=c[g>>2]|0;c[g>>2]=h+1;c[a+(h<<2)>>2]=i;d=c[d>>2]|0;c[(c[d+180>>2]|0)+(c[d+184>>2]<<2)>>2]=0;d=f+16|0;a=c[d>>2]|0;h=c[a+172>>2]|0;if(!h)a=vH((c[a+176>>2]<<2)+8|0)|0;else a=xH(h,(c[a+176>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+172>>2]=a;g=g+176|0;f=c[g>>2]|0;c[g>>2]=f+1;c[a+(f<<2)>>2]=i;i=c[d>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0}else{i=(c[h+16>>2]|0)+170|0;f=e[i>>1]|0;b[i>>1]=(f|0)>(g|0)?f:g}return}function gR(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[a+16>>2]|0)+192>>2]|0;while(1){f=d+16|0;h=c[(c[f>>2]|0)+164>>2]|0;if(!h)break;if(Rx(a,d,h,0,0)|0){d=h;continue}g=Rx(a,d,h,0,1)|0;Az(g,134378,176,1)|0;b[(c[g+16>>2]|0)+170>>1]=0;d=c[f>>2]|0;e=c[d+180>>2]|0;if(!e)d=vH((c[d+184>>2]<<2)+8|0)|0;else d=xH(e,(c[d+184>>2]<<2)+8|0)|0;i=c[f>>2]|0;c[i+180>>2]=d;i=i+184|0;e=c[i>>2]|0;c[i>>2]=e+1;c[d+(e<<2)>>2]=g;f=c[f>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;f=h+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(!e)d=vH((c[d+176>>2]<<2)+8|0)|0;else d=xH(e,(c[d+176>>2]<<2)+8|0)|0;e=c[f>>2]|0;c[e+172>>2]=d;e=e+176|0;i=c[e>>2]|0;c[e>>2]=i+1;c[d+(i<<2)>>2]=g;d=c[f>>2]|0;c[(c[d+172>>2]|0)+(c[d+176>>2]<<2)>>2]=0;d=h}return}function hR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+92|0;e=0;f=0;b=c[(c[(c[b+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[g>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}a=a+96|0;e=0;f=0;b=c[(c[(c[d+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[a>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}return}function iR(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+4|0;d=h;c[d>>2]=c[4621];e=c[b+100>>2]|0;if((e|0)!=1?(f=b+104|0,(c[f>>2]|0)!=1):0){c[b+92>>2]=uH((e<<2)+4|0)|0;c[b+96>>2]=uH((c[f>>2]<<2)+4|0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;f=Xx(134391,g,0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;g=Xx(134396,g,0)|0;Az(f,134401,280,1)|0;Az(g,134401,280,1)|0;eR(b,f,g);fI(f,2,2147483647)|0;fI(g,2,2147483647)|0;hR(b,f,g);jR(f,g)}else cR(b);l=h;return}function jR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;f=d+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+180>>2]|0;if(e){D_(e);d=c[f>>2]|0}d=d+164|0}$x(a)|0;$x(b)|0;return}function kR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=l;l=l+272|0;n=p+104|0;o=p+136|0;j=p+72|0;k=p;g=p+144|0;c[k+48>>2]=b;switch(pz(b)|0){case 0:{e=c[b+60>>2]|0;break}case 1:{e=ez(b)|0;break}case 2:{e=ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;break}default:{}}i=k+52|0;c[i>>2]=e;m=c[e+60>>2]|0;h[k+32>>3]=+h[d+16>>3];c[k+16>>2]=c[d+4>>2];c[k+20>>2]=c[d+8>>2];c[k+40>>2]=0;f=uT(c[d>>2]|0,o,k)|0;if(!f){Tw(n,128,g);a[d+82>>0]=0;e=n1(lR(b,n)|0)|0;c[d>>2]=e;if((c[d+12>>2]|0)==1)e=RM(e)|0;else e=OM(e,c[i>>2]|0)|0;D_(c[d>>2]|0);c[d>>2]=e;iH(c[(c[m+16>>2]|0)+144>>2]|0,d);Xw(n);e=c[o>>2]|0}else{e=f+4|0;if((a[e>>0]|0)==1){if((c[(c[f>>2]|0)+24>>2]|0)==0?mR(b)|0:0){i=n1(mR(b)|0)|0;c[(c[f>>2]|0)+24>>2]=i}m=nR(m,c[f>>2]|0,0,k)|0;c[o>>2]=c[o>>2]|m;m=c[f>>2]|0;r=+h[m+64>>3]*.5;q=+h[m+72>>3]*.5;oR(j,-r,-q,r,q);m=c[f>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2];pR(m,n,15)}else{qR(c[(c[m+16>>2]|0)+144>>2]|0,c[f>>2]|0,k);n=c[f>>2]|0;q=+h[n+24>>3]*.5;r=+h[n+32>>3]*.5;oR(j,-q,-r,q,r);n=(c[f>>2]|0)+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2]}h[d+24>>3]=+h[j+16>>3]-+h[j>>3];h[d+32>>3]=+h[j+24>>3]-+h[j+8>>3];c[d+72>>2]=f;if((a[e>>0]|0)==1){D_(c[d>>2]|0);c[d>>2]=n1(138529)|0}e=c[o>>2]|0}l=p;return e|0}function lR(b,d){b=b|0;d=d|0;var e=0;a:do switch(pz(b)|0){case 0:{Ww(d,ry(b)|0)|0;break}case 1:{Ww(d,ry(b)|0)|0;break}case 2:{Ww(d,ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)|0;e=b+-48|0;Ww(d,ry(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0;if(!(ey(ez(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0)){Ww(d,138665)|0;break a}else{Ww(d,134656)|0;break a}}default:{}}while(0);e=d+4|0;b=c[e>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;b=c[e>>2]|0}a[b>>0]=0;d=c[d>>2]|0;c[e>>2]=d;return d|0}function mR(b){b=b|0;var c=0,d=0;c=xx(b,134647)|0;if(!((c|0)!=0?(a[c>>0]|0)!=0:0))d=3;do if((d|0)==3){c=xx(b,137741)|0;if(c|0?a[c>>0]|0:0)break;c=0}while(0);return c|0}function nR(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;u=w+8|0;t=w;v=g+108|0;k=c[v>>2]|0;if(k|0)IQ(j,k,183496);c[g+80>>2]=i;k=uR(f,g,j)|0;r=g+36|0;f=b[r>>1]|0;if(!(f&128))a[g+32>>0]=2;i=g+33|0;if(!(f&32))a[i>>0]=1;iR(g);n=c[g+104>>2]|0;p=a[g+32>>0]|0;f=O(n+1|0,p)|0;o=d[i>>0]<<1;q=c[g+100>>2]|0;p=O(q+1|0,p)|0;m=g+96|0;f=o+f|0;i=0;while(1){if((i|0)>=(n|0))break;f=(c[(c[m>>2]|0)+(i<<2)>>2]|0)+f|0;i=i+1|0}n=g+92|0;i=p+o|0;m=0;while(1){if((m|0)>=(q|0))break;i=(c[(c[n>>2]|0)+(m<<2)>>2]|0)+i|0;m=m+1|0}n=g+38|0;do if(b[r>>1]&1){r=b[n>>1]|0;m=r&65535;if(r<<16>>16?(s=b[g+40>>1]|0,s<<16>>16):0){if(!((f|0)>(m|0)|(i|0)>(s&65535|0))){i=0;f=0;break}Pw(0,134447,t)|0;k=1;i=0;f=0;break}Pw(0,134481,u)|0;k=1}while(0);u=e[n>>1]|0;h[g+64>>3]=+(((f|0)>(u|0)?f:u)|0);u=e[g+40>>1]|0;h[g+72>>3]=+(((i|0)>(u|0)?i:u)|0);if(c[v>>2]|0)QQ(j,183496);l=w;return k|0}function oR(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function pR(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0;I=l;l=l+64|0;G=I+32|0;H=I;E=c[e+84>>2]|0;k=c[e+80>>2]|0;if((k|0?(i=c[k+24>>2]|0,i|0):0)?(j=e+24|0,(c[j>>2]|0)==0):0)c[j>>2]=n1(i)|0;F=e+48|0;i=f+16|0;n=+h[i>>3];m=+h[f>>3];k=~~(n-m-+(~~+h[e+64>>3]|0));if((k|0)<=-1)qa(134414,134260,1761,134424);o=f+24|0;y=+h[o>>3];p=f+8|0;q=+h[p>>3];r=+(~~+h[e+72>>3]|0);s=~~(y-q-r);if((s|0)<=-1)qa(134437,134260,1764,134424);t=b[e+36>>1]|0;j=t&65535;a:do if(j&1){b:do if((k|0)>0)switch(j&6){case 4:{h[i>>3]=m+r;break b}case 2:{J=+(k|0);h[i>>3]=n+J;m=m+J;h[f>>3]=m;break b}default:{J=+(k>>>1|0);m=m+J;h[f>>3]=m;h[i>>3]=n-J;break b}}while(0);if((s|0)>0)switch(t&24){case 16:{y=q+r;h[o>>3]=y;s=0;i=0;break a}case 8:{J=+(s|0);y=y+J;h[o>>3]=y;h[p>>3]=q+J;s=0;i=0;break a}default:{J=+(s>>>1|0);h[p>>3]=q+J;y=y-J;h[o>>3]=y;s=0;i=0;break a}}else{s=0;i=0}}else i=k;while(0);n=+(d[e+33>>0]|0);C=e+32|0;u=a[C>>0]|0;q=+(u<<24>>24);D=e+104|0;k=c[D>>2]|0;t=(i|0)/(k|0)|0;o=i-(O(t,k)|0)|0;o=~~(((o|0)>-1?.5:-.5)+ +(o|0));B=e+96|0;p=u<<24>>24;i=~~(m+n+q);j=0;while(1){if((j|0)>(k|0))break;A=(c[B>>2]|0)+(j<<2)|0;k=c[A>>2]|0;c[A>>2]=i;i=i+t+((j|0)<(o|0)&1)+k+p|0;j=j+1|0;k=c[D>>2]|0}A=e+100|0;k=c[A>>2]|0;t=(s|0)/(k|0)|0;p=s-(O(t,k)|0)|0;p=~~(((p|0)>-1?.5:-.5)+ +(p|0));z=e+92|0;o=u<<24>>24;i=~~(y-n-q);j=0;while(1){if((j|0)>(k|0))break;x=(c[z>>2]|0)+(j<<2)|0;k=c[x>>2]|0;c[x>>2]=i;i=i-t+(((j|0)<(p|0))<<31>>31)-k-o|0;j=j+1|0;k=c[A>>2]|0}u=(g|0)==0;v=H+16|0;w=H+24|0;x=H+8|0;i=E;while(1){o=c[i>>2]|0;if(!o)break;k=b[o+84>>1]|0;if(u){j=0;p=b[o+80>>1]|0;s=b[o+86>>1]|0;t=b[o+82>>1]|0}else{j=k<<16>>16==0?8:0;s=b[o+86>>1]|0;j=s<<16>>16==0?j|4:j;p=b[o+80>>1]|0;t=b[o+82>>1]|0;j=(((p&65535)+(k&65535)|0)==(c[D>>2]|0)?j|2:j)|((t&65535)+(s&65535)|0)==(c[A>>2]|0)}K=c[B>>2]|0;k=k&65535;h[H>>3]=+(c[K+(k<<2)>>2]|0);E=a[C>>0]|0;h[v>>3]=+((c[K+((p&65535)+k<<2)>>2]|0)-E|0);p=c[z>>2]|0;h[w>>3]=+(c[p+((s&65535)<<2)>>2]|0);h[x>>3]=+((c[p+((t&65535)+(s&65535)<<2)>>2]|0)+E|0);c[G>>2]=c[H>>2];c[G+4>>2]=c[H+4>>2];c[G+8>>2]=c[H+8>>2];c[G+12>>2]=c[H+12>>2];c[G+16>>2]=c[H+16>>2];c[G+20>>2]=c[H+20>>2];c[G+24>>2]=c[H+24>>2];c[G+28>>2]=c[H+28>>2];rR(o,G,j&g);i=i+4|0}a[e+35>>0]=g;c[F>>2]=c[f>>2];c[F+4>>2]=c[f+4>>2];c[F+8>>2]=c[f+8>>2];c[F+12>>2]=c[f+12>>2];c[F+16>>2]=c[f+16>>2];c[F+20>>2]=c[f+20>>2];c[F+24>>2]=c[f+24>>2];c[F+28>>2]=c[f+28>>2];l=I;return}function qR(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0;O=l;l=l+112|0;H=O+48|0;I=O+16|0;J=O;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[I+16>>2]=0;c[I+20>>2]=0;c[I+24>>2]=0;c[I+28>>2]=0;K=e+4|0;L=f+16|0;M=f+32|0;N=I+16|0;r=b[K>>1]|0;n=r<<16>>16;g=0;j=-1.0;m=0;while(1){if((m|0)>=(n|0)){g=1;break}i=c[e>>2]|0;if((b[i+(m*24|0)+4>>1]|0)>1){g=0;break}i=c[(c[i+(m*24|0)>>2]|0)+4>>2]|0;if(!i){k=+h[M>>3];h[N>>3]=k;i=L}else{if(c[i+24>>2]&127|0){g=0;break}k=+h[(+h[i+16>>3]>0.0?i:L)+16>>3];h[N>>3]=k;i=(c[i>>2]|0)==0?L:i}i=c[i>>2]|0;c[I>>2]=i;if(!(j==-1.0)){if(k!=j){g=0;break}}else j=k;if(g){if(b$(i,g)|0){g=0;break}}else g=i;m=m+1|0}a[e+6>>0]=g;E=f+48|0;F=f+20|0;G=I+4|0;w=f+40|0;x=I+24|0;y=d+144|0;z=H+4|0;v=J+8|0;A=H+16|0;B=H+24|0;C=H+8|0;D=H+12|0;f=(g|0)==0;j=0.0;s=0.0;t=0.0;u=0.0;n=0;g=r;while(1){if((n|0)>=(g<<16>>16|0))break;k=0.0;q=0.0;m=0;p=0.0;j=0.0;i=c[e>>2]|0;while(1){if((m|0)>=(b[i+(n*24|0)+4>>1]|0))break;c[H>>2]=pH(c[(c[i+(n*24|0)>>2]|0)+(m*56|0)>>2]|0,c[E>>2]|0)|0;i=(c[e>>2]|0)+(n*24|0)|0;g=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;if(!g){h[N>>3]=+h[M>>3];c[I>>2]=c[L>>2];c[G>>2]=c[F>>2];c[x>>2]=c[x>>2]&-128|c[w>>2]&127}else{g=c[g+24>>2]&127;if(!g)g=c[w>>2]&127;c[x>>2]=c[x>>2]&-128|g;r=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;h[N>>3]=+h[(+h[r+16>>3]>0.0?r:L)+16>>3];c[I>>2]=c[((c[r>>2]|0)==0?L:r)>>2];c[G>>2]=c[((c[r+4>>2]|0)==0?L:r)+4>>2]}i=c[y>>2]|0;c[z>>2]=nb[c[i>>2]&63](i,I,1)|0;wL(J,d,H);Q=+h[J>>3];o=+h[v>>3];D_(c[(c[(c[e>>2]|0)+(n*24|0)>>2]|0)+(m*56|0)>>2]|0);i=c[e>>2]|0;r=c[i+(n*24|0)>>2]|0;c[r+(m*56|0)>>2]=c[H>>2];h[r+(m*56|0)+32>>3]=Q;h[r+(m*56|0)+16>>3]=+h[A>>3];h[r+(m*56|0)+24>>3]=+h[B>>3];c[r+(m*56|0)+4>>2]=c[z>>2];c[r+(m*56|0)+8>>2]=c[C>>2];c[r+(m*56|0)+12>>2]=c[D>>2];P=+h[N>>3];R=+h[B>>3];k=R>k?R:k;q=Q+q;m=m+1|0;p=P>p?P:p;j=o>j?o:j}h[i+(n*24|0)+8>>3]=q;g=(n|0)==0;do if(f)if(g){o=p;k=p-k;g=i;break}else{o=p;k=t-u+p-k;g=i+(n*24|0)|0;break}else{o=j;k=g?p:j;g=i+(n*24|0)|0}while(0);h[g+16>>3]=k;s=q>s?q:s;t=o+t;u=+h[i+(n*24|0)+16>>3]+u;n=n+1|0;g=b[K>>1]|0}h[e+24>>3]=s;h[e+32>>3]=g<<16>>16==1?j:t;l=O;return}function rR(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;v=y+32|0;x=y;j=e+24|0;if((c[j>>2]|0)==0?(i=c[(c[e+96>>2]|0)+24>>2]|0,i|0):0)c[j>>2]=n1(i)|0;t=e+36|0;w=b[t>>1]|0;i=w&65535;a:do if(i&1){k=+h[e+64>>3];q=+h[e+72>>3];j=f+16|0;m=+h[j>>3];o=+h[f>>3];n=m-o-k;b:do if(n>0.0)switch(i&6){case 4:{m=o+k;h[j>>3]=m;k=o;break b}case 2:{m=n+m;h[j>>3]=m;k=o+n;h[f>>3]=k;break b}default:{p=n*.5;k=p+o;h[f>>3]=k;m=m-p;h[j>>3]=m;break b}}else k=o;while(0);i=f+24|0;p=+h[i>>3];j=f+8|0;n=+h[j>>3];o=p-n-q;if(o>0.0)switch(w&24){case 16:{o=n+q;h[i>>3]=o;break a}case 8:{q=o+p;h[i>>3]=q;n=n+o;h[j>>3]=n;o=q;break a}default:{o=o*.5;n=o+n;h[j>>3]=n;o=p-o;h[i>>3]=o;break a}}else o=p}else{k=+h[f>>3];n=+h[f+8>>3];m=+h[f+16>>3];o=+h[f+24>>3]}while(0);s=e+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[s+16>>2]=c[f+16>>2];c[s+20>>2]=c[f+20>>2];c[s+24>>2]=c[f+24>>2];c[s+28>>2]=c[f+28>>2];a[e+35>>0]=g;A=+(d[e+33>>0]|0);z=+(d[e+34>>0]|0);p=k+A+z;h[x>>3]=p;q=n+A+z;s=x+8|0;h[s>>3]=q;n=m-A-z;f=x+16|0;h[f>>3]=n;o=o-A-z;r=x+24|0;h[r>>3]=o;j=e+88|0;switch(a[e+92>>0]|0){case 1:{w=c[j>>2]|0;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];pR(w,v,g);break}case 3:{i=c[j>>2]|0;k=+h[i+24>>3];m=n-p-+h[i+16>>3];c:do if(m>0.0)switch(w&6){case 4:{h[f>>3]=n-m;break c}case 2:{h[x>>3]=m+p;break c}default:break c}while(0);k=o-q-k;d:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break d}case 8:{h[s>>3]=k+q;break d}default:break d}while(0);c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];sR(i,v);break}default:{i=c[j>>2]|0;k=+h[i+32>>3];m=n-p-+h[i+24>>3];e:do if(m>0.0?(u=w&6,u<<16>>16!=6):0)switch(u&7){case 4:{h[f>>3]=n-m;break e}case 2:{h[x>>3]=m+p;break e}default:{A=m*.5;h[x>>3]=A+p;h[f>>3]=n-A;break e}}while(0);k=o-q-k;f:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break f}case 8:{h[s>>3]=k+q;break f}default:{A=k*.5;h[s>>3]=A+q;h[r>>3]=o-A;break f}}while(0);w=i+8|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];c[w+16>>2]=c[x+16>>2];c[w+20>>2]=c[x+20>>2];c[w+24>>2]=c[x+24>>2];c[w+28>>2]=c[x+28>>2];x=b[t>>1]&768;tR(c[j>>2]|0,(x&1023)==512?108:(x&1023)==256?114:110)}}l=y;return}function sR(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function tR(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;g=b[d+4>>1]|0;f=0;while(1){if((f|0)>=(g|0))break;h=(c[d>>2]|0)+(f*24|0)+6|0;if(!(a[h>>0]|0))a[h>>0]=e;f=f+1|0}return}function uR(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=f+84|0;t=c[l>>2]|0;u=vI()|0;v=yR()|0;i=0;h=0;k=Aw(t)|0;while(1){if(!k)break;j=Aw(c[k+8>>2]|0)|0;while(1){if(!j)break;j=c[j>>2]|0;i=i+1|0}h=h+1|0;if(a[k+12>>0]|0)CR(v,h);k=c[k>>2]|0}h=uH((i<<2)+4|0)|0;c[l>>2]=h;i=0;j=0;k=0;q=0;r=Aw(t)|0;while(1){if(!r)break;s=q&65535;p=0;o=Aw(c[r+8>>2]|0)|0;while(1){if(!o)break;n=c[o+8>>2]|0;c[h>>2]=n;k=vR(d,n,f,g)|0|k;l=wR(u,q,p,n)|0;b[n+86>>1]=s;b[n+84>>1]=l;l=l+(e[n+80>>1]|0)|0;m=q+(e[n+82>>1]|0)|0;if(DR(v,m)|0){p=n+100|0;a[p>>0]=a[p>>0]|2}p=l;h=h+4|0;o=c[o>>2]|0;i=(l|0)>(i|0)?l:i;j=(m|0)>(j|0)?m:j}q=q+1|0;r=c[r>>2]|0}c[f+100>>2]=j;c[f+104>>2]=i;yw(t)|0;yw(v)|0;yI(u);return k|0}function vR(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+16|0;t=u+8|0;s=u;c[g+96>>2]=i;q=g+36|0;o=b[q>>1]|0;if(!(o&64)){if(!(b[i+36>>1]&64))n=2;else n=a[i+34>>0]|0;a[g+34>>0]=n}if(!(o&32)){n=a[i+88>>0]|0;if(n<<24>>24<=-1)if(!(b[i+36>>1]&32))n=1;else n=a[i+33>>0]|0;a[g+33>>0]=n}n=g+88|0;p=g+92|0;switch(a[p>>0]|0){case 1:{o=nR(f,c[n>>2]|0,g,j)|0;i=c[n>>2]|0;n=o;o=i+64|0;i=i+72|0;break}case 3:{o=xR(c[n>>2]|0,j)|0;i=c[n>>2]|0;n=o;o=i+16|0;i=i+24|0;break}default:{qR(c[(c[f+16>>2]|0)+144>>2]|0,c[n>>2]|0,j);i=c[n>>2]|0;n=0;o=i+24|0;i=i+32|0}}k=+((d[g+33>>0]|0)+(d[g+34>>0]|0)<<1|0);m=+h[o>>3]+k;k=+h[i>>3]+k;i=g+38|0;do if(b[q>>1]&1){o=b[i>>1]|0;if(o<<16>>16?(r=b[g+40>>1]|0,r<<16>>16):0){if(!(m>+(o&65535)|k>+(r&65535))){m=0.0;k=0.0;break}if((a[p>>0]|0)==3){m=0.0;k=0.0;break}Pw(0,134532,s)|0;n=1;m=0.0;k=0.0;break}Pw(0,134565,t)|0;n=1}while(0);v=+(e[i>>1]|0);h[g+64>>3]=m>v?m:v;m=+(e[g+40>>1]|0);h[g+72>>3]=k>m?k:m;l=u;return n|0}function wR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;j=d+80|0;i=(e[j>>1]|0)+-1|0;h=0;a:while(1){f=c;while(1){if(h)break a;g=i+f|0;while(1){if((g|0)<(f|0)){c=f;h=1;continue a}if(DI(a,g,b)|0)break;g=g+-1|0}f=g+1|0}}h=d+82|0;f=c;while(1){if((f|0)<(c+(e[j>>1]|0)|0))g=b;else break;while(1){if((g|0)>=((e[h>>1]|0)+b|0))break;BI(a,f,g);g=g+1|0}f=f+1|0}return c|0}function xR(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;i=m+8|0;d=d+52|0;g=b+32|0;CC(i,c[d>>2]|0,c[g>>2]|0);k=c[i>>2]|0;i=c[i+4>>2]|0;if((i&k|0)==-1){c[j>>2]=c[g>>2];Pw(1,134615,j)|0;d=1;f=0.0;e=0.0}else{a[(c[(c[d>>2]|0)+16>>2]|0)+114>>0]=1;d=0;f=+(i|0);e=+(k|0)}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;h[b+16>>3]=e;h[b+24>>3]=f;l=m;return d|0}function yR(){return Cw(55820,c[4555]|0)|0}function zR(a,b,d){a=a|0;b=b|0;d=d|0;d=uH(12)|0;c[d>>2]=c[b>>2];return d|0}function AR(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function BR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)>(e|0)?1:((b|0)<(e|0))<<31>>31)|0}function CR(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;nb[c[a>>2]&63](a,e,1)|0;l=d;return}function DR(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(nb[c[a>>2]&63](a,e,512)|0)!=0&1;l=d;return b|0}function ER(a){a=a|0;var b=0;if(!(c[46605]|0)){b=uH((a<<2)+4|0)|0;c[46605]=b;c[b>>2]=186424;c[46616]=a}c[46617]=0;return}function FR(){D_(c[46605]|0);c[46605]=0;c[46617]=0;return}function GR(){c[46617]=0;return}function HR(){var a=0,b=0,d=0;b=c[46617]|0;d=c[46605]|0;a=1;while(1){if((a|0)>(b|0)){a=5;break}if((c[(c[d+(a<<2)>>2]|0)+4>>2]|0)==(a|0))a=a+1|0;else{a=4;break}}if((a|0)==4)qa(135312,134659,59,134665);else if((a|0)==5)return}function IR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=c[46605]|0;g=c[f+(a<<2)>>2]|0;h=c[g>>2]|0;while(1){b=(a|0)/2|0;d=c[f+(b<<2)>>2]|0;e=f+(a<<2)|0;if((c[d>>2]|0)>=(h|0))break;c[e>>2]=d;c[d+4>>2]=a;a=b}c[e>>2]=g;c[g+4>>2]=a;return}function JR(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=c[46617]|0;if((b|0)==(c[46616]|0)){Pw(1,134673,d)|0;a=1}else{b=b+1|0;c[46617]=b;c[(c[46605]|0)+(b<<2)>>2]=a;IR(b);HR();a=0}l=d;return a|0}function KR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[46605]|0;f=c[e+(a<<2)>>2]|0;g=c[f>>2]|0;h=c[46617]|0;i=(h|0)/2|0;while(1){if((a|0)>(i|0))break;d=a<<1;b=c[e+(d<<2)>>2]|0;if((d|0)<(h|0)){l=d|1;j=c[e+(l<<2)>>2]|0;k=(c[b>>2]|0)<(c[j>>2]|0);d=k?l:d;b=k?j:b}if((g|0)>=(c[b>>2]|0))break;c[e+(a<<2)>>2]=b;c[b+4>>2]=a;a=d}c[e+(a<<2)>>2]=f;c[f+4>>2]=a;return}function LR(){var a=0,b=0,d=0,e=0;b=c[46617]|0;if(!b)a=0;else{e=c[46605]|0;d=e+4|0;a=c[d>>2]|0;c[d>>2]=c[e+(b<<2)>>2];b=b+-1|0;c[46617]=b;if(b|0)KR(1);HR()}return a|0}function MR(a,b){a=a|0;b=b|0;c[a>>2]=b;IR(c[a+4>>2]|0);HR();return}function NR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+16|0;j=c[m>>2]|0;j=(a[j+((c[e+12>>2]|0)*40|0)+36>>0]|0)!=(a[j+((c[e+16>>2]|0)*40|0)+36>>0]|0);k=~~((+h[d+64>>3]+-3.0-+h[d+48>>3])*.5);l=~~((+h[d+56>>3]+-3.0-+h[d+40>>3])*.5);g=(k|0)<(l|0)?k:l;n=d+4|0;f=0;while(1){b=c[n>>2]|0;if((f|0)>=(b|0)){g=f;break}i=c[d+8+(f<<2)>>2]|0;o=c[m>>2]|0;if((a[o+((c[i+12>>2]|0)*40|0)+36>>0]|0)==(a[o+((c[i+16>>2]|0)*40|0)+36>>0]|0)){g=f;break}OR(i,g);f=f+1|0}while(1){if((g|0)>=(b|0))break;f=c[d+8+(g<<2)>>2]|0;if(j|(f|0)==(e|0)){OR(f,a[(c[m>>2]|0)+((c[f+12>>2]|0)*40|0)+36>>0]|0?k:l);b=c[n>>2]|0}g=g+1|0}return}function OR(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;c[d>>2]=e+1;if((e|0)>=(b|0)){c[d>>2]=0;h[a>>3]=+h[a>>3]+16384.0}return}function PR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0.0;x=l;l=l+112|0;u=x+64|0;t=x+96|0;m=x+32|0;v=x;w=uH(28)|0;b=ay(a)|0;s=w+4|0;c[s>>2]=b;b=uH(b*72|0)|0;r=w+12|0;c[r>>2]=b;e=v+8|0;h[e>>3]=1797693134862315708145274.0e284;h[v>>3]=1797693134862315708145274.0e284;f=v+24|0;h[f>>3]=-1797693134862315708145274.0e284;g=v+16|0;h[g>>3]=-1797693134862315708145274.0e284;i=m+16|0;j=m+8|0;k=m+24|0;d=Sy(a)|0;n=1797693134862315708145274.0e284;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;q=-1797693134862315708145274.0e284;while(1){if(!d)break;C=d+16|0;D=c[C>>2]|0;z=(+h[D+96>>3]+ +h[D+88>>3])*.5;z=z<1.0?1.0:z;y=+h[D+80>>3]*.5;y=y<1.0?1.0:y;E=+h[D+16>>3];B=E-z;h[m>>3]=B;z=E+z;h[i>>3]=z;E=+h[D+24>>3];A=E-y;h[j>>3]=A;y=E+y;h[k>>3]=y;B=+h[(n>3];h[v>>3]=B;A=+h[(o>3];h[e>>3]=A;z=+h[(p>z?v:m)+16>>3];h[g>>3]=z;y=+h[(q>y?v:m)+24>>3];h[f>>3]=y;D=b+40|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];c[D+16>>2]=c[m+16>>2];c[D+20>>2]=c[m+20>>2];c[D+24>>2]=c[m+24>>2];c[D+28>>2]=c[m+28>>2];c[b>>2]=c[b>>2]|1;c[(c[C>>2]|0)+112>>2]=b;b=b+72|0;d=Ty(a,d)|0;n=B;o=A;p=z;q=y}h[v>>3]=n+-36.0;h[e>>3]=o+-36.0;h[g>>3]=p+36.0;h[f>>3]=q+36.0;D=c[r>>2]|0;f=c[s>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];f=ZR(D,f,t,u)|0;if(c[46553]&1|0){r=c[r>>2]|0;C=c[s>>2]|0;D=c[t>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];QR(r,C,u,f,D)}e=w+8|0;c[e>>2]=uH((c[t>>2]|0)*72|0)|0;c[w>>2]=c[t>>2];d=c[t>>2]|0;b=0;while(1){if((b|0)>=(d|0))break;D=(c[e>>2]|0)+(b*72|0)+40|0;C=f+(b<<5)|0;c[D>>2]=c[C>>2];c[D+4>>2]=c[C+4>>2];c[D+8>>2]=c[C+8>>2];c[D+12>>2]=c[C+12>>2];c[D+16>>2]=c[C+16>>2];c[D+20>>2]=c[C+20>>2];c[D+24>>2]=c[C+24>>2];c[D+28>>2]=c[C+28>>2];b=b+1|0}D_(f);c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];c[w+16>>2]=RR(w,u)|0;l=x;return w|0}function QR(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0;q=l;l=l+128|0;p=q+96|0;o=q+64|0;j=q+32|0;r=q+16|0;s=q;m=+h[d+16>>3];n=+h[d>>3];k=+h[d+24>>3];g=+h[d+8>>3];i=c[15686]|0;D1(134688,i)|0;c[s>>2]=10;c[s+4>>2]=10;c[s+8>>2]=~~(m+10.0-n);c[s+12>>2]=~~(k+10.0-g);g1(i,135118,s)|0;h[r>>3]=10.0-n;h[r+8>>3]=10.0-g;g1(i,135166,r)|0;D1(135183,i)|0;d=0;while(1){if((d|0)>=(b|0))break;v=+h[a+(d*72|0)+48>>3];u=+h[a+(d*72|0)+56>>3];t=+h[a+(d*72|0)+64>>3];h[j>>3]=+h[a+(d*72|0)+40>>3];h[j+8>>3]=v;h[j+16>>3]=u;h[j+24>>3]=t;g1(i,135202,j)|0;d=d+1|0}D1(135220,i)|0;d=0;while(1){if((d|0)>=(f|0))break;t=+h[e+(d<<5)+8>>3];u=+h[e+(d<<5)+16>>3];v=+h[e+(d<<5)+24>>3];h[o>>3]=+h[e+(d<<5)>>3];h[o+8>>3]=t;h[o+16>>3]=u;h[o+24>>3]=v;g1(i,135239,o)|0;d=d+1|0}D1(135257,i)|0;h[p>>3]=n;h[p+8>>3]=g;h[p+16>>3]=m;h[p+24>>3]=k;g1(i,135239,p)|0;D1(135004,i)|0;l=q;return}function RR(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=l;l=l+32|0;t=A+16|0;k=A;w=c[a>>2]|0;y=nO(w<<2|2)|0;z=Cw(55856,c[4555]|0)|0;v=Cw(55892,c[4555]|0)|0;w=uH(w<<7)|0;f=uH(c[a>>2]<<4)|0;x=a+8|0;g=b+16|0;i=k+8|0;j=b+24|0;m=b+8|0;d=0;while(1){if((d|0)>=(c[a>>2]|0))break;n=c[x>>2]|0;o=n+(d*72|0)|0;c[n+(d*72|0)+32>>2]=4;p=n+(d*72|0)+36|0;c[p>>2]=f+(d<<2<<2);q=n+(d*72|0)+40|0;e=+h[n+(d*72|0)+56>>3];if(e<+h[g>>3]){h[k>>3]=e;h[i>>3]=+h[n+(d*72|0)+48>>3];c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=SR(y,z,t,w,1)|0;c[s+20>>2]=o;c[c[p>>2]>>2]=s}e=+h[n+(d*72|0)+64>>3];if(e<+h[j>>3]){h[k>>3]=+h[q>>3];h[i>>3]=e;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=SR(y,v,t,w,0)|0;c[s+20>>2]=o;c[(c[p>>2]|0)+4>>2]=s}if(+h[q>>3]>+h[b>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=SR(y,z,t,w,1)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+8>>2]=s}if(+h[n+(d*72|0)+48>>3]>+h[m>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=SR(y,v,t,w,0)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+12>>2]=s}d=d+1|0}o=uH(c[y>>2]<<2)|0;r=a+4|0;s=a+12|0;p=t+8|0;m=0;q=0;n=0;while(1){d=c[r>>2]|0;if((n|0)>=(d|0)){b=0;break}g=c[s>>2]|0;i=g+(n*72|0)|0;j=g+(n*72|0)+36|0;c[j>>2]=o+(m<<2);b=g+(n*72|0)+40|0;c[t>>2]=c[b>>2];c[t+4>>2]=c[b+4>>2];c[t+8>>2]=c[b+8>>2];c[t+12>>2]=c[b+12>>2];b=g+(n*72|0)+56|0;k=g+(n*72|0)+32|0;d=nb[c[v>>2]&63](v,t,512)|0;while(1){if(!d)break;if(!(+h[d+8>>3]<+h[b>>3]))break;C=c[d>>2]|0;B=c[j>>2]|0;f=c[k>>2]|0;c[k>>2]=f+1;c[B+(f<<2)>>2]=C;c[(c[d>>2]|0)+24>>2]=i;d=nb[c[v>>2]&63](v,d,8)|0}f=g+(n*72|0)+64|0;d=nb[c[z>>2]&63](z,t,512)|0;while(1){if(!d){u=20;break}e=+h[f>>3];if(!(+h[d+16>>3]>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=b;c[(c[d>>2]|0)+24>>2]=i;d=nb[c[z>>2]&63](z,d,8)|0}if((u|0)==20){u=0;e=+h[f>>3]}h[p>>3]=e;b=g+(n*72|0)+56|0;d=nb[c[v>>2]&63](v,t,512)|0;while(1){if(!d){u=25;break}e=+h[b>>3];if(!(+h[d+8>>3]>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=D;c[(c[d>>2]|0)+20>>2]=i;d=nb[c[v>>2]&63](v,d,8)|0}if((u|0)==25){u=0;e=+h[b>>3]}h[t>>3]=e;h[p>>3]=+h[g+(n*72|0)+48>>3];d=nb[c[z>>2]&63](z,t,512)|0;while(1){if(!d)break;if(!(+h[d+16>>3]<+h[f>>3]))break;B=c[d>>2]|0;C=c[j>>2]|0;D=c[k>>2]|0;c[k>>2]=D+1;c[C+(D<<2)>>2]=B;c[(c[d>>2]|0)+20>>2]=i;d=nb[c[z>>2]&63](z,d,8)|0}D=c[k>>2]|0;m=D+m|0;q=(D|0)>(q|0)?D:q;n=n+1|0}while(1){if((b|0)>=(d|0))break;TR((c[s>>2]|0)+(b*72|0)|0);b=b+1|0;d=c[r>>2]|0}d=c[y>>2]|0;D=c[y+16>>2]|0;c[D+(d*40|0)+32>>2]=d;d=d+1|0;c[D+(d*40|0)+32>>2]=d;mO(y,q);d=0;while(1){if((d|0)>=(c[a>>2]|0))break;UR((c[x>>2]|0)+(d*72|0)|0,y);d=d+1|0}yw(z)|0;yw(v)|0;D_(w);VR(y);kO(y);l=A;return y|0}function SR(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=nb[c[d>>2]&63](d,e,512)|0;do if(!h){b=oO(b)|0;if(!f)qa(135101,135049,291,135108);else{h=c[b+32>>2]|0;i=f+(h<<5)|0;f=f+(h<<5)+8|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[i>>2]=b;a[b+36>>0]=g;nb[c[d>>2]&63](d,i,1)|0;break}}else i=h;while(0);return c[i>>2]|0}function TR(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;a:do if((+h[b+64>>3]+-3.0-+h[b+48>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break a;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;b:do if(a[d+36>>0]|0){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|8;d=c[c[d+36>>2]>>2]|0;if(!d)break b;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|8;d=c[(c[e+36>>2]|0)+8>>2]|0;if(!d)break b;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);c:do if((+h[b+56>>3]+-3.0-+h[b+40>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break c;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;d:do if(!(a[d+36>>0]|0)){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|16;d=c[(c[d+36>>2]|0)+4>>2]|0;if(!d)break d;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|16;d=c[(c[e+36>>2]|0)+12>>2]|0;if(!d)break d;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);return}function UR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;g=+h[a+56>>3]-+h[a+40>>3];i=+h[a+64>>3]-+h[a+48>>3];f=(i+g)*.5+500.0;if((i+-3.0)*.5<2.0){l=(c[a>>2]&8|0)==0;f=l?16384.0:f;p=l?16384.0:g}else p=g;if((g+-3.0)*.5<2.0){l=(c[a>>2]&16|0)==0;i=l?16384.0:i;f=l?16384.0:f}l=a+36|0;d=c[l>>2]|0;e=c[d+8>>2]|0;if((e|0)!=0?(j=c[d+4>>2]|0,(j|0)!=0):0){j=pO(b,e,j,f)|0;e=a+4|0;d=c[e>>2]|0;c[e>>2]=d+1;c[a+8+(d<<2)>>2]=j;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(k=c[d>>2]|0,(k|0)!=0):0){k=pO(b,e,k,f)|0;j=a+4|0;d=c[j>>2]|0;c[j>>2]=d+1;c[a+8+(d<<2)>>2]=k;d=c[l>>2]|0}e=c[d+8>>2]|0;if((e|0)!=0?(m=c[d+12>>2]|0,(m|0)!=0):0){m=pO(b,e,m,f)|0;k=a+4|0;d=c[k>>2]|0;c[k>>2]=d+1;c[a+8+(d<<2)>>2]=m;d=c[l>>2]|0}e=c[d+12>>2]|0;if((e|0)!=0?(n=c[d>>2]|0,(n|0)!=0):0){n=pO(b,e,n,f)|0;m=a+4|0;d=c[m>>2]|0;c[m>>2]=d+1;c[a+8+(d<<2)>>2]=n;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(o=c[d+12>>2]|0,(o|0)!=0):0){o=pO(b,e,o,i)|0;n=a+4|0;d=c[n>>2]|0;c[n>>2]=d+1;c[a+8+(d<<2)>>2]=o;d=c[l>>2]|0}e=c[d+8>>2]|0;if(e|0?(q=c[d>>2]|0,q|0):0){b=pO(b,e,q,p)|0;o=a+4|0;q=c[o>>2]|0;c[o>>2]=q+1;c[a+8+(q<<2)>>2]=b}return}function VR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;f=a+16|0;g=c[15686]|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){b=10;break}b=c[f>>2]|0;d=b+(e*40|0)+20|0;if((c[d>>2]|0)==0?(c[h>>2]=e,g1(g,135014,h)|0,(c[d>>2]|0)==0):0){b=5;break}b=b+(e*40|0)+24|0;if((c[b>>2]|0)==0?(c[i>>2]=e,g1(g,135066,i)|0,(c[b>>2]|0)==0):0){b=8;break}e=e+1|0}if((b|0)==5)qa(135036,135049,311,135056);else if((b|0)==8)qa(135088,135049,313,135056);else if((b|0)==10){l=j;return}}function WR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[c+8>>3];if(!(e>f))if(!(e>3];e=+h[c>>3];if(f>e)a=1;else a=(f>31}else a=-1;else a=1;return a|0}function XR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(!(e>3];e=+h[c+8>>3];if(f>e)a=1;else a=(f>31}else a=-1;else a=1;return a|0}function YR(a){a=a|0;var b=0,d=0;d=a+8|0;D_(c[(c[d>>2]|0)+36>>2]|0);b=a+12|0;D_(c[(c[b>>2]|0)+36>>2]|0);D_(c[d>>2]|0);D_(c[b>>2]|0);rO(c[a+16>>2]|0);yw(c[a+20>>2]|0)|0;yw(c[a+24>>2]|0)|0;D_(a);return}function ZR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;h=p;i=b<<2;f=i+4|0;i=i+5|0;o=vH(i*56|0)|0;i=uH(i<<2)|0;g=f*5|1;j=vH(g*72|0)|0;m=g<<5;k=uH(m)|0;m=uH(m)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];_R(a,b,h,o,0);i2(173);$R(f,i);jS(f,o,i,g,j)|0;n=aS(f,o,j,0,k)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];_R(a,b,h,o,1);$R(f,i);jS(f,o,i,g,j)|0;f=aS(f,o,j,1,m)|0;g=uH(O(n<<5,f)|0)|0;b=0;a=0;while(1){if((b|0)>=(f|0))break;h=m+(b<<5)|0;e=0;while(1){if((e|0)>=(n|0))break;q=a+((bS(g+(a<<5)|0,h,k+(e<<5)|0)|0)!=0&1)|0;e=e+1|0;a=q}b=b+1|0}q=xH(g,a<<5)|0;D_(o);D_(i);D_(j);D_(k);D_(m);c[d>>2]=a;l=p;return q|0}function _R(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=l;l=l+96|0;h=j+64|0;i=j;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];c[h+16>>2]=c[d+16>>2];c[h+20>>2]=c[d+20>>2];c[h+24>>2]=c[d+24>>2];c[h+28>>2]=c[d+28>>2];hS(h,f,1,i);d=iS(e,1,i)|0;g=0;while(1){if((g|0)>=(b|0))break;k=a+(g*72|0)+40|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];c[h+16>>2]=c[k+16>>2];c[h+20>>2]=c[k+20>>2];c[h+24>>2]=c[k+24>>2];c[h+28>>2]=c[k+28>>2];hS(h,f,0,i);d=iS(e,d,i)|0;g=g+1|0}l=j;return}function $R(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=0;while(1){if((d|0)>(a|0))break;c[b+(d<<2)>>2]=d;d=d+1|0}g=a+1|0;d=1;while(1){if((d|0)>(a|0))break;h=~~(+k2()*+(g-d|0)+ +(d|0));e=b+(d<<2)|0;f=b+(h<<2)|0;if((d|0)!=(h|0)){h=c[e>>2]|0;c[e>>2]=c[f>>2];c[f>>2]=h}d=d+1|0}return}function aS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=a*5|0;j=g+1|0;l=uH(j<<2)|0;c[46618]=uH(j<<4)|0;c[46619]=uH((a*56|0)+56|0)|0;j=uH(a<<2)|0;c[46620]=j;k=0;while(1){if((k|0)>(g|0))break;if(cS(d+(k*72|0)|0,b)|0)break;k=k+1|0}h=c[46618]|0;i=c[46619]|0;g=1;while(1){if((g|0)>(a|0))break;c[h+(g<<4)+8>>2]=c[b+(g*56|0)+48>>2];m=b+(g*56|0)+44|0;c[h+(g<<4)+4>>2]=c[m>>2];c[h+(g<<4)>>2]=g;n=i+(g*56|0)|0;o=b+(g*56|0)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[i+(g*56|0)+16>>2]=c[m>>2];c[i+(g*56|0)+32>>2]=g;c[i+(g*56|0)+48>>2]=1;g=g+1|0}c[46621]=a;c[46622]=0;c[j>>2]=1;g=c[d+(k*72|0)+40>>2]|0;if((g|0)<=0){g=c[d+(k*72|0)+48>>2]|0;if((g|0)>0)g=dS(l,f,0,b,d,0,k,g,e,2)|0;else g=0}else g=dS(l,f,0,b,d,0,k,g,e,1)|0;D_(l);D_(c[46618]|0);D_(c[46619]|0);D_(c[46620]|0);return g|0}function bS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[(+h[b>>3]>+h[c>>3]?b:c)>>3];f=+h[(+h[b+16>>3]<+h[c+16>>3]?b:c)+16>>3];h[a+16>>3]=f;h[a>>3]=g;e=+h[(+h[b+8>>3]>+h[c+8>>3]?b:c)+8>>3];d=+h[(+h[b+24>>3]<+h[c+24>>3]?b:c)+24>>3];h[a+24>>3]=d;h[a+8>>3]=e;return !(g>=f)&!(e>=d)&1|0}function cS(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a+4>>2]|0;do if((c[a+68>>2]|0)!=2?!((f|0)<1|(c[a>>2]|0)<1):0){if(!((c[a+40>>2]|0)<1?(c[a+44>>2]|0)<1:0)){if((c[a+48>>2]|0)>=1){a=0;break}if((c[a+52>>2]|0)>=1){a=0;break}}d=+h[b+(f*56|0)+24>>3];e=+h[b+(f*56|0)+8>>3];if(!(d>e+1.0e-07))if(d>3]>+h[b+(f*56|0)>>3]&1;else a=1}else a=0;while(0);return a|0}function dS(a,b,d,e,f,g,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0;D=(k|0)==0;C=i;a:while(1){y=f+(C*72|0)|0;if((C|0)<1)break;i=a+(C<<2)|0;if(c[i>>2]|0)break;c[i>>2]=1;v=f+(C*72|0)+8|0;t=f+(C*72|0)+16|0;p=+h[t>>3];w=f+(C*72|0)+24|0;x=f+(C*72|0)+32|0;o=+h[x>>3];if((p>o?(A=c[y>>2]|0,I=+h[e+(A*56|0)>>3],I==+h[e+(A*56|0)+16>>3]):0)?(A=c[f+(C*72|0)+4>>2]|0,K=+h[e+(A*56|0)>>3],K==+h[e+(A*56|0)+16>>3]):0){i=b+(d<<5)|0;if(D){h[i>>3]=I;q=p;p=K}else{h[i>>3]=o;q=-I;o=-K}h[b+(d<<5)+8>>3]=o;h[b+(d<<5)+16>>3]=p;h[b+(d<<5)+24>>3]=q;d=d+1|0}i=f+(C*72|0)+40|0;z=c[i>>2]|0;do if((z|0)<1?(L=f+(C*72|0)+44|0,(c[L>>2]|0)<1):0){i=f+(C*72|0)+48|0;n=f+(C*72|0)+52|0;if((c[i>>2]|0)>0?(M=c[n>>2]|0,(M|0)>0):0){m=c[f+(M*72|0)>>2]|0;l=c[y>>2]|0;if((M|0)==(j|0)){l=eS(g,l,m)|0;d=dS(a,b,d,e,f,g,c[n>>2]|0,C,k,1)|0;g=l;l=1;break}else{l=eS(g,m,l)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;g=l;i=n;l=1;break}}d=dS(a,b,d,e,f,g,z,C,k,2)|0;d=dS(a,b,d,e,f,g,c[L>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;i=n;l=1}else P=19;while(0);do if((P|0)==19){P=0;A=f+(C*72|0)+48|0;r=c[A>>2]|0;if((r|0)<1?(N=f+(C*72|0)+52|0,(c[N>>2]|0)<1):0){n=f+(C*72|0)+44|0;if((z|0)>0?(O=c[n>>2]|0,(O|0)>0):0){m=c[f+(C*72|0)+4>>2]|0;l=c[f+(z*72|0)+4>>2]|0;if((O|0)==(j|0)){l=eS(g,l,m)|0;d=dS(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;g=l;l=2;break}else{l=eS(g,m,l)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=n;l=2;break}}d=dS(a,b,d,e,f,g,z,C,k,2)|0;d=dS(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;i=N;l=1;break}u=f+(C*72|0)+44|0;s=c[u>>2]|0;m=(s|0)>0;if((z|0)>0){if(m){if((r|0)>0?(E=f+(C*72|0)+52|0,F=c[E>>2]|0,(F|0)>0):0){n=c[f+(F*72|0)>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if(!((l|0)==2&(F|0)==(j|0))?!((l|0)==1&(s|0)==(j|0)):0){l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=E;l=1;break}l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[E>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}m=c[y>>2]|0;if(+B(+(+h[x>>3]-+h[e+(m*56|0)+24>>3]))<=1.0e-07?+B(+(+h[w>>3]-+h[e+(m*56|0)+16>>3]))<=1.0e-07:0){n=c[f+(z*72|0)+4>>2]|0;m=c[e+(m*56|0)+44>>2]|0;if((l|0)==1&(z|0)==(j|0)){l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+52|0;l=1;break}else{l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;l=2;break}}n=c[f+(C*72|0)+4>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if((l|0)==1&(s|0)==(j|0)){l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;g=l;l=2;break}else{l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=u;l=2;break}}}else if(!m)break a;if((r|0)>0?(G=f+(C*72|0)+52|0,H=c[G>>2]|0,(H|0)>0):0){n=c[y>>2]|0;if(+B(+(+h[t>>3]-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0){m=c[f+(H*72|0)>>2]|0;if((l|0)==2&(r|0)==(j|0)){l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}else{l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}}m=c[f+(H*72|0)>>2]|0;n=c[e+((c[f+(C*72|0)+4>>2]|0)*56|0)+44>>2]|0;if((l|0)==2&(H|0)==(j|0)){l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}else{l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}}o=+h[t>>3];n=c[y>>2]|0;if(((+B(+(o-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0)?(J=c[f+(C*72|0)+4>>2]|0,+B(+(+h[x>>3]-+h[e+(J*56|0)+8>>3]))<=1.0e-07):0)?+B(+(+h[w>>3]-+h[e+(J*56|0)>>3]))<=1.0e-07:0)if((l|0)==1){l=eS(g,n,J)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=eS(g,J,n)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}j=c[f+(C*72|0)+4>>2]|0;if(((+B(+(o-+h[e+(j*56|0)+24>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(j*56|0)+16>>3]))<=1.0e-07:0)?+B(+(+h[x>>3]-+h[e+(n*56|0)+24>>3]))<=1.0e-07:0)?+B(+(+h[w>>3]-+h[e+(n*56|0)+16>>3]))<=1.0e-07:0){m=c[e+(j*56|0)+44>>2]|0;j=c[e+(n*56|0)+44>>2]|0;if((l|0)==1){l=eS(g,j,m)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=eS(g,m,j)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}}d=dS(a,b,d,e,f,g,z,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;i=f+(C*72|0)+52|0;l=1}while(0);j=C;C=c[i>>2]|0}return d|0}function eS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;r=f+4|0;i=f;e=(c[46622]|0)+1|0;c[46622]=e;m=c[46619]|0;fS(b,d,r,i);r=c[r>>2]|0;h=c[m+(b*56|0)+32+(r<<2)>>2]|0;i=c[m+(d*56|0)+32+(c[i>>2]<<2)>>2]|0;n=c[46621]|0;g=n+1|0;n=n+2|0;c[46621]=n;q=c[46618]|0;c[q+(g<<4)>>2]=b;c[q+(n<<4)>>2]=d;o=q+(h<<4)+4|0;p=q+(g<<4)+4|0;c[p>>2]=c[o>>2];c[q+(c[o>>2]<<4)+8>>2]=g;c[q+(g<<4)+8>>2]=n;c[q+(n<<4)+4>>2]=g;j=q+(i<<4)+8|0;c[q+(n<<4)+8>>2]=c[j>>2];c[q+(c[j>>2]<<4)+4>>2]=n;c[o>>2]=i;c[j>>2]=h;j=m+(b*56|0)+48|0;o=c[j>>2]|0;i=m+(d*56|0)+48|0;k=c[i>>2]|0;c[m+(b*56|0)+16+(r<<2)>>2]=d;c[m+(b*56|0)+32+(o<<2)>>2]=g;c[m+(b*56|0)+16+(o<<2)>>2]=c[q+(c[p>>2]<<4)>>2];c[m+(d*56|0)+32+(k<<2)>>2]=n;c[m+(d*56|0)+16+(k<<2)>>2]=b;c[j>>2]=(c[j>>2]|0)+1;c[i>>2]=(c[i>>2]|0)+1;d=c[46620]|0;c[d+(a<<2)>>2]=h;c[d+(e<<2)>>2]=g;l=f;return e|0}function fS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0;l=c[46619]|0;m=l+(a*56|0)|0;n=l+(b*56|0)|0;f=0;g=-4.0;i=0;while(1){if((i|0)==4)break;h=c[l+(a*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(j=+gS(m,l+(h*56|0)|0,n),j>g):0){f=i;g=j}i=i+1|0}c[d>>2]=f;f=0;i=0;g=-4.0;while(1){if((i|0)==4)break;h=c[l+(b*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(k=+gS(n,l+(h*56|0)|0,m),k>g):0){f=i;g=k}i=i+1|0}c[e>>2]=f;return}function gS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;g=+h[a>>3];i=+h[b>>3]-g;d=+h[a+8>>3];f=+h[b+8>>3]-d;g=+h[c>>3]-g;d=+h[c+8>>3]-d;e=d*f+g*i;if(!(d*i-g*f>=0.0))d=-e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)))+-2.0;else d=e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)));return +d}function hS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];i=e+32|0;j=a+16|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];if(!d){f=a+8|0;g=j;i=a+24|0;d=a}else{f=a+24|0;g=a;i=a+8|0;d=j}k=+h[g>>3];l=+h[i>>3];h[e+16>>3]=+h[d>>3];h[e+24>>3]=l;h[e+48>>3]=k;h[e+56>>3]=+h[f>>3];a:do if(b|0){d=0;while(1){if((d|0)==4)break a;j=e+(d<<4)+8|0;l=+h[j>>3];b=e+(d<<4)|0;h[j>>3]=+h[b>>3];h[b>>3]=-l;d=d+1|0}}while(0);return}function iS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=b+3|0;i=b+1|0;j=b+2|0;k=a+(b*56|0)+44|0;l=a+(h*56|0)+44|0;e=0;f=b;while(1){if((f|0)>(h|0))break;do if((f|0)!=(b|0))if((f|0)==(h|0)){c[l>>2]=b;g=j;break}else{c[a+(f*56|0)+44>>2]=f+1;g=f+-1|0;break}else{c[k>>2]=i;g=h}while(0);c[a+(f*56|0)+48>>2]=g;c[a+(f*56|0)+32>>2]=0;n=a+(f*56|0)|0;m=d+(e<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];G3(a+(g*56|0)+16|0,m|0,16)|0;e=e+1|0;f=f+1|0}return b+4|0}function jS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[46623]=e<<1;c[46624]=e;k=uH(e*80|0)|0;c[46625]=1;c[46626]=1;H3(f|0,0,e*72|0)|0;g=kS(c[d+4>>2]|0,b,f,k)|0;e=1;while(1){if((e|0)>(a|0))break;c[b+(e*56|0)+40>>2]=g;c[b+(e*56|0)+36>>2]=g;e=e+1|0}j=lS(a)|0;g=2;i=1;while(1){if((i|0)>(j|0))break;e=mS(a,i+-1|0)|0;h=mS(a,i)|0;while(1){if((e|0)>=(h|0)){e=1;break}nS(c[d+(g<<2)>>2]|0,b,f,k);e=e+1|0;g=g+1|0}while(1){if((e|0)>(a|0))break;oS(e,b,f,k);e=e+1|0}i=i+1|0}e=mS(a,j)|0;while(1){if((e|0)>=(a|0))break;nS(c[d+(g<<2)>>2]|0,b,f,k);g=g+1|0;e=e+1|0}D_(k);return c[46625]|0}function kS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=tS()|0;c[e+(f*40|0)>>2]=2;s=e+(f*40|0)+8|0;k=b+(a*56|0)|0;l=b+(a*56|0)+16|0;xS(s,k,l);n=tS()|0;c[e+(f*40|0)+36>>2]=n;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+28>>2]=f;j=tS()|0;c[e+(f*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=2;r=e+(j*40|0)+8|0;yS(r,k,l);c[e+(j*40|0)+28>>2]=f;l=tS()|0;c[e+(j*40|0)+32>>2]=l;c[e+(l*40|0)>>2]=3;c[e+(l*40|0)+28>>2]=j;k=tS()|0;c[e+(j*40|0)+36>>2]=k;c[e+(k*40|0)>>2]=1;c[e+(k*40|0)+4>>2]=a;c[e+(k*40|0)+28>>2]=j;j=tS()|0;c[e+(k*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=3;c[e+(j*40|0)+28>>2]=k;g=tS()|0;c[e+(k*40|0)+36>>2]=g;c[e+(g*40|0)>>2]=3;c[e+(g*40|0)+28>>2]=k;k=sS(d)|0;i=sS(d)|0;m=sS(d)|0;o=sS(d)|0;p=d+(k*72|0)+8|0;q=d+(i*72|0)+8|0;t=d+(o*72|0)+24|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];G3(q|0,s|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];p=d+(k*72|0)+24|0;q=d+(i*72|0)+24|0;s=d+(m*72|0)+8|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];G3(q|0,r|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[d+(o*72|0)+16>>3]=1073741824.0;h[d+(o*72|0)+8>>3]=1073741824.0;h[d+(m*72|0)+32>>3]=-1073741824.0;h[d+(m*72|0)+24>>3]=-1073741824.0;c[d+(i*72|0)>>2]=a;c[d+(k*72|0)+4>>2]=a;c[d+(i*72|0)+40>>2]=o;c[d+(k*72|0)+40>>2]=o;c[d+(i*72|0)+48>>2]=m;c[d+(k*72|0)+48>>2]=m;c[d+(m*72|0)+40>>2]=k;c[d+(o*72|0)+48>>2]=k;c[d+(m*72|0)+44>>2]=i;c[d+(o*72|0)+52>>2]=i;c[d+(k*72|0)+56>>2]=j;c[d+(i*72|0)+56>>2]=g;c[d+(m*72|0)+56>>2]=l;c[d+(o*72|0)+56>>2]=n;c[d+(i*72|0)+68>>2]=1;c[d+(k*72|0)+68>>2]=1;c[d+(o*72|0)+68>>2]=1;c[d+(m*72|0)+68>>2]=1;c[e+(n*40|0)+24>>2]=o;c[e+(l*40|0)+24>>2]=m;c[e+(j*40|0)+24>>2]=k;c[e+(g*40|0)+24>>2]=i;c[b+(a*56|0)+32>>2]=1;return f|0}function lS(a){a=a|0;var b=0.0;b=+(a|0);a=0;while(1){if(!(b>=1.0))break;b=+g$(b);a=a+1|0}return a+-1|0}function mS(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+(a|0);c=d;a=0;while(1){if((a|0)>=(b|0))break;c=+g$(c);a=a+1|0}return ~~+N(+(d/c))|0}function nS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=l;l=l+96|0;S=W+32|0;f=W+16|0;T=W;s=S;k=b+(a*56|0)|0;r=s+56|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));U=S+16|0;V=S+24|0;i=+h[V>>3];H=S+8|0;j=+h[H>>3];do if(!(i>j+1.0e-07)){if(!(i>3]>+h[S>>3]:0){G=4;break}G=(rS(a,b,1)|0)==0;f=c[S+36>>2]|0;if(G){n=0;G=7}else{f=pS(S,U,f,b,e)|0;G=20}}else G=4;while(0);if((G|0)==4){c[f>>2]=c[S>>2];c[f+4>>2]=c[S+4>>2];c[f+8>>2]=c[S+8>>2];c[f+12>>2]=c[S+12>>2];c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[U>>2]=c[f>>2];c[U+4>>2]=c[f+4>>2];c[U+8>>2]=c[f+8>>2];c[U+12>>2]=c[f+12>>2];E=S+36|0;F=c[E>>2]|0;G=S+40|0;f=c[G>>2]|0;c[E>>2]=f;c[G>>2]=F;if(!(rS(a,b,2)|0)){n=1;G=7}else{f=pS(S,U,f,b,e)|0;G=19}}if((G|0)==7){m=pS(S,U,f,b,e)|0;f=sS(d)|0;c[d+(f*72|0)+68>>2]=1;s=d+(f*72|0)|0;k=d+(m*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[H>>3];h[d+(f*72|0)+16>>3]=q;h[d+(m*72|0)+32>>3]=q;q=+h[S>>3];h[d+(f*72|0)+8>>3]=q;h[d+(m*72|0)+24>>3]=q;c[d+(m*72|0)+48>>2]=f;c[d+(m*72|0)+52>>2]=0;c[d+(f*72|0)+40>>2]=m;c[d+(f*72|0)+44>>2]=0;g=c[d+(f*72|0)+48>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}g=c[d+(f*72|0)+52>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}E=tS()|0;G=tS()|0;F=d+(m*72|0)+56|0;D=c[F>>2]|0;c[e+(D*40|0)>>2]=2;C=e+(D*40|0)+8|0;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[e+(D*40|0)+4>>2]=a;c[e+(D*40|0)+32>>2]=G;c[e+(D*40|0)+36>>2]=E;c[e+(E*40|0)>>2]=3;c[e+(E*40|0)+24>>2]=m;c[e+(E*40|0)+28>>2]=D;c[e+(G*40|0)>>2]=3;c[e+(G*40|0)+24>>2]=f;c[e+(G*40|0)+28>>2]=D;c[F>>2]=E;c[d+(f*72|0)+56>>2]=G;if(n)G=19;else G=20}if((G|0)==19)if(!(rS(a,b,1)|0)){g=1;G=21}else{g=1;G=32}else if((G|0)==20)if(!(rS(a,b,2)|0)){g=0;G=21}else{g=0;G=32}if((G|0)==21){o=pS(U,S,c[S+40>>2]|0,b,e)|0;n=sS(d)|0;c[d+(n*72|0)+68>>2]=1;s=d+(n*72|0)|0;k=d+(o*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[V>>3];h[d+(n*72|0)+16>>3]=q;h[d+(o*72|0)+32>>3]=q;q=+h[U>>3];h[d+(n*72|0)+8>>3]=q;h[d+(o*72|0)+24>>3]=q;c[d+(o*72|0)+48>>2]=n;c[d+(o*72|0)+52>>2]=0;c[d+(n*72|0)+40>>2]=o;c[d+(n*72|0)+44>>2]=0;k=c[d+(n*72|0)+48>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}k=c[d+(n*72|0)+52>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}D=tS()|0;F=tS()|0;E=d+(o*72|0)+56|0;C=c[E>>2]|0;c[e+(C*40|0)>>2]=2;A=e+(C*40|0)+8|0;c[A>>2]=c[U>>2];c[A+4>>2]=c[U+4>>2];c[A+8>>2]=c[U+8>>2];c[A+12>>2]=c[U+12>>2];c[e+(C*40|0)+4>>2]=a;c[e+(C*40|0)+32>>2]=F;c[e+(C*40|0)+36>>2]=D;c[e+(D*40|0)>>2]=3;c[e+(D*40|0)+24>>2]=o;c[e+(D*40|0)+28>>2]=C;c[e+(F*40|0)>>2]=3;c[e+(F*40|0)+24>>2]=n;c[e+(F*40|0)+28>>2]=C;c[E>>2]=D;c[d+(n*72|0)+56>>2]=F;F=f;f=0}else if((G|0)==32){F=f;o=pS(U,S,c[S+40>>2]|0,b,e)|0;f=1}a:do if((F|0)>0){D=d+(o*72|0)+24|0;E=d+(o*72|0)+32|0;C=(f|0)!=0;y=g?b+(a*56|0)+48|0:b+(a*56|0)+44|0;z=T+8|0;g=0;f=0;x=F;b:while(1){k=d+(x*72|0)|0;v=d+(x*72|0)+24|0;if(!(uS(v,D)|0))break a;m=d+(x*72|0)+56|0;u=c[m>>2]|0;n=tS()|0;p=tS()|0;c[e+(u*40|0)>>2]=1;c[e+(u*40|0)+4>>2]=a;c[e+(u*40|0)+32>>2]=n;c[e+(u*40|0)+36>>2]=p;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+24>>2]=x;c[e+(n*40|0)+28>>2]=u;c[e+(p*40|0)>>2]=3;w=sS(d)|0;c[e+(p*40|0)+24>>2]=w;A=d+(w*72|0)|0;c[d+(w*72|0)+68>>2]=1;c[e+(p*40|0)+28>>2]=u;g=(x|0)==(F|0)?w:g;u=d+(x*72|0)+32|0;if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0)f=w;s=A;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));c[m>>2]=n;c[d+(w*72|0)+56>>2]=p;t=d+(x*72|0)+48|0;m=d+(x*72|0)+52|0;k=(c[m>>2]|0)<1;do if((c[t>>2]|0)<1){if(k)break b;s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(M=d+(x*72|0)+44|0,N=c[M>>2]|0,(N|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=N;c[d+(w*72|0)+44>>2]=-1;c[M>>2]=-1;c[d+(N*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=N;c[M>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=N}else{c[d+(w*72|0)+44>>2]=-1;t=d+(w*72|0)+40|0;c[t>>2]=c[M>>2];n=c[s>>2]|0;c[M>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[t>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=77;while(0);do if((G|0)==77){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(qS(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(qS(k,b,S)|0)!=0:0){c[d+((c[m>>2]|0)*72|0)+40>>2]=x;n=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+52>>2]|0)*72|0)+44>>2]=w;n=m;k=x}c[n>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[m>>2]|0;break}k=c[m>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(O=c[p>>2]|0,P=(n|0)==(x|0),(O|0)>0):0){c[d+(k*72|0)+60>>2]=P?O:n;c[d+(k*72|0)+64>>2]=P?1:2}c[m>>2]=x;c[p>>2]=w}else{if(!k){i=+h[u>>3];j=+h[H>>3];q=i-j;if(!(+B(+q)<=1.0e-07)){h[z>>3]=i;i=+h[S>>3];h[T>>3]=(+h[U>>3]-i)*(q/(+h[V>>3]-j))+i;s=(vS(T,v)|0)!=0}else s=+h[v>>3]>+h[S>>3];r=d+(x*72|0)+40|0;k=c[r>>2]|0;do if((k|0)>0?(Q=d+(x*72|0)+44|0,R=c[Q>>2]|0,(R|0)>0):0){p=d+(x*72|0)+60|0;k=c[p>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=R;c[d+(w*72|0)+44>>2]=-1;c[Q>>2]=-1;c[d+(R*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=R;c[Q>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;n=w;m=R}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[Q>>2];m=c[r>>2]|0;c[Q>>2]=m;c[r>>2]=k;c[d+(k*72|0)+48>>2]=x;n=x;k=c[X>>2]|0}c[d+(m*72|0)+48>>2]=n;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[p>>2]=0}else G=106;while(0);do if((G|0)==106){G=0;m=d+(k*72|0)+48|0;n=c[m>>2]|0;k=d+(k*72|0)+52|0;if((n|0)>0?(c[k>>2]|0)>0:0){k=c[d+(n*72|0)+4>>2]|0;if((k|0)>0?(qS(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[r>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;break}c[m>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;c[d+(k*72|0)+44>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=w;c[d+(X*72|0)+44>>2]=-1;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;c[k>>2]=-1;k=-1}else G=116;do if((G|0)==116){G=0;k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;m=d+(k*72|0)+44|0;if(s){c[m>>2]=w;X=d+(x*72|0)+52|0;v=c[X>>2]|0;c[d+(v*72|0)+40>>2]=w;c[d+(v*72|0)+44>>2]=-1;c[X>>2]=-1;break}else{c[m>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=x;c[d+(X*72|0)+44>>2]=w;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;k=c[k>>2]|0;break}}while(0);break}s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(I=d+(x*72|0)+44|0,J=c[I>>2]|0,(J|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=J;c[d+(w*72|0)+44>>2]=-1;c[I>>2]=-1;c[d+(J*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=J;c[I>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=J}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[I>>2];n=c[s>>2]|0;c[I>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[X>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=51;while(0);do if((G|0)==51){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(qS(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(qS(k,b,S)|0)!=0:0){c[d+((c[t>>2]|0)*72|0)+40>>2]=x;m=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+48>>2]|0)*72|0)+44>>2]=w;k=x}c[m>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[t>>2]|0;break}k=c[t>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(K=c[p>>2]|0,L=(n|0)==(x|0),(K|0)>0):0){c[d+(k*72|0)+60>>2]=L?K:n;c[d+(k*72|0)+64>>2]=L?1:2}c[m>>2]=x;c[p>>2]=w}while(0);c[A>>2]=a;c[d+(x*72|0)+4>>2]=a;if((k|0)>0)x=k;else break a}E1(135342,19,1,c[15686]|0)|0}else{g=0;f=0}while(0);wS(a,F,o,1,d,e);wS(a,g,f,2,d,e);c[b+(a*56|0)+32>>2]=1;l=W;return}function oS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!(c[b+(a*56|0)+32>>2]|0)){f=b+(a*56|0)|0;g=b+(a*56|0)+16|0;h=b+(a*56|0)+36|0;c[h>>2]=c[d+((pS(f,g,c[h>>2]|0,b,e)|0)*72|0)+56>>2];a=b+(a*56|0)+40|0;c[a>>2]=c[d+((pS(g,f,c[a>>2]|0,b,e)|0)*72|0)+56>>2]}return}function pS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0;o=a+8|0;q=b+8|0;a:while(1){b:do switch(c[f+(d*40|0)>>2]|0){case 3:{r=3;break a}case 2:{g=+h[o>>3];i=f+(d*40|0)+8|0;j=+h[f+(d*40|0)+16>>3];k=j+1.0e-07;do if(!(g>k)){l=j+-1.0e-07;if(!(g>3]>+h[i>>3]:0)break;if(+B(+(g-j))<=1.0e-07?(m=+h[i>>3],+B(+(+h[a>>3]-m))<=1.0e-07):0){g=+h[q>>3];do if(!(g>k)){if(!(g>3]>m:0)break;d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break b}d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break}case 1:{g=+h[o>>3];i=c[f+(d*40|0)+4>>2]|0;if(+B(+(g-+h[e+(i*56|0)+8>>3]))<=1.0e-07?(n=+h[a>>3],+B(+(n-+h[e+(i*56|0)>>3]))<=1.0e-07):0)j=n;else r=19;do if((r|0)==19){r=0;if(+B(+(g-+h[e+(i*56|0)+24>>3]))<=1.0e-07?(p=+h[a>>3],+B(+(p-+h[e+(i*56|0)+16>>3]))<=1.0e-07):0){j=p;break}if(!(qS(i,e,a)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}}while(0);if(!(+B(+(g-+h[q>>3]))<=1.0e-07))if(!(qS(i,e,b)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}else if(+h[b>>3]>2]|0}if((r|0)==3)return c[f+(d*40|0)+24>>2]|0;else if((r|0)==31){E1(135276,35,1,c[15686]|0)|0;qa(135312,135314,349,135326)}return 0}function qS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0.0;f=b+(a*56|0)+16|0;g=+h[b+(a*56|0)+24>>3];i=b+(a*56|0)|0;e=+h[b+(a*56|0)+8>>3];do if(!(g>e+1.0e-07)){if(!(g>3]>+h[i>>3]:0){j=4;break}d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[f>>3];d=(+h[i>>3]-k)*(d-g)-(+h[c>>3]-k)*(e-g);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}else j=4;while(0);do if((j|0)==4){d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[i>>3];d=(+h[f>>3]-k)*(d-e)-(+h[c>>3]-k)*(g-e);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}while(0);return d>0.0|0}function rS(a,b,d){a=a|0;b=b|0;d=d|0;return c[b+((c[((d|0)==1?b+(a*56|0)+48|0:b+(a*56|0)+44|0)>>2]|0)*56|0)+32>>2]|0}function sS(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[46625]|0;if((b|0)<(c[46624]|0)){c[a+(b*72|0)>>2]=-1;c[a+(b*72|0)+4>>2]=-1;c[a+(b*72|0)+68>>2]=1;c[46625]=b+1;l=e;return b|0}else{e=c[15686]|0;c[d>>2]=b;g1(e,135401,d)|0;qa(135312,135314,88,135439)}return 0}function tS(){var a=0;a=c[46626]|0;if((a|0)<(c[46623]|0)){c[46626]=a+1;return a|0}else{E1(135362,30,1,c[15686]|0)|0;qa(135312,135314,72,135393)}return 0}function uS(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d+1.0e-07))if(c>3]>=+h[b>>3]&1;else a=1;return a|0}function vS(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(cd+1.0e-07)a=0;else a=+h[a>>3]<+h[b>>3]&1;else a=1;return a|0}function wS(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f+(d*72|0)+24|0;p=(e|0)==1;a:while(1){o=f+(b*72|0)+24|0;j=f+(b*72|0)+48|0;k=f+(b*72|0)+52|0;l=f+(b*72|0)|0;m=f+(b*72|0)+4|0;n=f+(b*72|0)+56|0;if((b|0)<=0)break;while(1){if(!(uS(o,q)|0))break a;d=c[j>>2]|0;e=(d|0)>0;do if(p){if(e?(c[f+(d*72|0)+4>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)+4>>2]|0)!=(a|0)){b=d;continue a}}else{if(e?(c[f+(d*72|0)>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)>>2]|0)!=(a|0)){b=d;continue a}}while(0);if((c[l>>2]|0)!=(c[f+(d*72|0)>>2]|0)){b=d;continue a}if((c[m>>2]|0)!=(c[f+(d*72|0)+4>>2]|0)){b=d;continue a}r=c[f+(d*72|0)+56>>2]|0;e=c[g+(r*40|0)+28>>2]|0;h=g+(e*40|0)+32|0;i=c[n>>2]|0;if((c[h>>2]|0)==(r|0))c[h>>2]=i;else c[g+(e*40|0)+36>>2]=i;e=c[f+(d*72|0)+48>>2]|0;c[j>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);e=c[f+(d*72|0)+52>>2]|0;c[k>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);r=f+(d*72|0)+24|0;c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];c[f+(d*72|0)+68>>2]=2}}return}function xS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>f+1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]>+h[d>>3]+1.0e-07){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function yS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]<+h[d>>3]){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function zS(a){a=a|0;var b=0;b=uH(8)|0;if(b|0){c[b+4>>2]=a;c[b>>2]=0}return b|0}function AS(a,b){a=a|0;b=b|0;if(b){b=zS(b)|0;c[b>>2]=a;a=b}return a|0}function BS(a){a=a|0;var b=0;do{b=a;a=c[a>>2]|0;D_(b)}while((a|0)!=0);return}function CS(){var a=0;a=uH(1992)|0;if(a|0)c[a>>2]=DS(a)|0;return a|0}function DS(a){a=a|0;var b=0;b=JS(a)|0;c[b+4>>2]=0;a=a+1972|0;c[a>>2]=(c[a>>2]|0)+1;return b|0}function ES(a){a=a|0;FS(a,c[a>>2]|0);D_(c[a>>2]|0);D_(a);return 0}function FS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+1980|0;h=a+1912|0;i=a+1936|0;a:do if((c[b+4>>2]|0)>0){d=0;while(1){if((d|0)==64)break a;e=b+8+(d*20|0)+16|0;f=c[e>>2]|0;if(f|0?(FS(a,f),D_(c[e>>2]|0),PS(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}else{d=0;while(1){if((d|0)==64)break a;if(c[b+8+(d*20|0)+16>>2]|0?(PS(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}while(0);return}function GS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!b)qa(135797,135447,194,135455);e=c[b+4>>2]|0;if((e|0)<=-1)qa(135467,135447,195,135455);if(!d)qa(135739,135447,196,135455);i=a+1952|0;c[i>>2]=(c[i>>2]|0)+1;a:do if((e|0)>0){i=0;e=0;while(1){if((i|0)==64)break a;f=b+8+(i*20|0)+16|0;if((c[f>>2]|0)!=0?(US(d,b+8+(i*20|0)|0)|0)!=0:0){g=GS(a,c[f>>2]|0,d)|0;if(!e)e=g;else{f=e;while(1){h=c[f>>2]|0;if(!h)break;else f=h}c[f>>2]=g}}i=i+1|0}}else{g=0;e=0;while(1){if((g|0)==64)break a;f=b+8+(g*20|0)|0;if((c[b+8+(g*20|0)+16>>2]|0)!=0?(US(d,f)|0)!=0:0)e=AS(e,f)|0;g=g+1|0}}while(0);return e|0}function HS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+52|0;m=p+32|0;n=p+16|0;o=p;c[k>>2]=0;if(!((b|0)!=0&(e|0)!=0))qa(135653,135447,247,135481);if((f|0)>-1?(j=c[e>>2]|0,(c[j+4>>2]|0)>=(f|0)):0){g=0;while(1){if((g|0)>=2)break;if((c[b+(g<<2)>>2]|0)>(c[b+(g+2<<2)>>2]|0)){h=8;break}else g=g+1|0}if((h|0)==8)qa(135528,135447,250,135481);i=a+1912|0;g=a+1908|0;h=c[g>>2]|0;if(c[i>>2]|0){q=h|0?a+1924|0:a+1916|0;c[q>>2]=(c[q>>2]|0)+1}if(!h){q=a+1964|0;c[q>>2]=(c[q>>2]|0)+1}if(!(IS(a,b,d,j,k,f)|0))g=0;else{if(c[i>>2]|0){q=c[g>>2]|0?a+1948|0:a+1944|0;c[q>>2]=(c[q>>2]|0)+1}g=JS(a)|0;q=a+1976|0;c[q>>2]=(c[q>>2]|0)+1;q=c[e>>2]|0;c[g+4>>2]=(c[q+4>>2]|0)+1;MS(n,q);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];q=m+16|0;c[q>>2]=c[e>>2];OS(a,m,g,0)|0;MS(o,c[k>>2]|0);c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[q>>2]=c[k>>2];OS(a,m,g,0)|0;c[e>>2]=g;g=a+1980|0;c[g>>2]=(c[g>>2]|0)+2;g=1}l=p;return g|0}qa(135493,135447,248,135481);return 0}function IS(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;m=q+52|0;n=q+48|0;o=q+32|0;p=q+16|0;k=q;c[n>>2]=0;if(!((b|0)!=0&(e|0)!=0&(f|0)!=0))qa(135571,135447,311,135585);if((g|0)>-1?(i=e+4|0,h=c[i>>2]|0,(h|0)>=(g|0)):0){if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i>>2]|0}do if((h|0)>(g|0)){i=NS(b,e)|0;h=e+8+(i*20|0)+16|0;i=e+8+(i*20|0)|0;if(!(IS(a,b,d,c[h>>2]|0,n,g)|0)){TS(o,b,i);c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];j=0;break}else{MS(p,c[h>>2]|0);c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];j=c[n>>2]|0;c[m+16>>2]=j;MS(k,j);c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=OS(a,m,e,f)|0;break}}else if((h|0)==(g|0)){c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];c[m+16>>2]=d;j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=OS(a,m,e,f)|0;break}else qa(135630,135447,341,135585);while(0);l=q;return j|0}qa(135598,135447,312,135585);return 0}function JS(a){a=a|0;a=a+1968|0;c[a>>2]=(c[a>>2]|0)+1;a=C_(1288)|0;KS(a);return a|0}function KS(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;while(1){if((b|0)==64)break;LS(a+8+(b*20|0)|0);b=b+1|0}return}function LS(a){a=a|0;QS(a);c[a+16>>2]=0;return}function MS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;g=i+16|0;h=i;if(!b)qa(135797,135636,99,135643);QS(g);d=1;f=0;while(1){if((f|0)==64)break;do if(c[b+8+(f*20|0)+16>>2]|0){e=b+8+(f*20|0)|0;if(!d){TS(h,g,e);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];d=0;break}else{c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];d=0;break}}while(0);f=f+1|0}c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];l=i;return}function NS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;k=l;l=l+32|0;i=k+16|0;j=k;if(!((a|0)!=0&(b|0)!=0))qa(135653,135636,125,135660);d=0;e=0;f=0;g=1;h=0;while(1){if((h|0)==64)break;if(c[b+8+(h*20|0)+16>>2]|0){n=b+8+(h*20|0)|0;p=SS(n)|0;TS(j,a,n);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];n=(SS(i)|0)-p|0;m=(g|0)!=0|(n|0)<(f|0);o=m|(p|0)<(e|0)&(n|0)==(f|0);d=o?h:d;e=o?p:e;f=o?n:f;g=m?0:g}h=h+1|0}l=k;return d|0}function OS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!b)qa(135819,135636,167,135671);if(!d)qa(135797,135636,168,135671);do if((c[d>>2]|0)<64){a=0;while(1){if((a|0)>=64){e=10;break}if(!(c[d+8+(a*20|0)+16>>2]|0)){e=8;break}a=a+1|0}if((e|0)==8){f=d+8+(a*20|0)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];f=0;g=d;break}else if((e|0)==10)qa(135681,135636,178,135671)}else{if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1}if(!e)qa(135694,135636,187,135671);else{VS(a,d,b,e);f=1;g=(c[d+4>>2]|0)==0?a+1972|0:a+1976|0;break}}while(0);c[g>>2]=(c[g>>2]|0)+1;return f|0}function PS(a,b){a=a|0;b=b|0;if(!((a|0)!=0&b>>>0<64))qa(135698,135636,201,135726);if(!(c[a+8+(b*20|0)+16>>2]|0))qa(136220,135636,202,135726);else{LS(a+8+(b*20|0)|0);c[a>>2]=(c[a>>2]|0)+-1;return}}function QS(a){a=a|0;var b=0;b=0;while(1){if((b|0)==4)break;c[a+(b<<2)>>2]=0;b=b+1|0}return}function RS(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;c[d>>2]=1;c[d+8>>2]=-1;b=1;while(1){if((b|0)==2)break;c[d+(b+2<<2)>>2]=0;c[d+(b<<2)>>2]=0;b=b+1|0}c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=e;return}function SS(a){a=a|0;var b=0,d=0,e=0;if(!a)qa(135739,135741,128,135753);a:do if((c[a>>2]|0)>(c[a+8>>2]|0))b=0;else{b=1;d=0;while(1){if((d|0)==2)break a;e=O(c[a+(d+2<<2)>>2]|0,b)|0;b=e-(c[a+(d<<2)>>2]|0)|0;d=d+1|0}}while(0);return b|0}function TS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=l;l=l+16|0;f=g;if(!((b|0)!=0&(d|0)!=0))qa(135762,135741,195,135770);do if((c[b>>2]|0)>(c[b+8>>2]|0)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2]}else{if((c[d>>2]|0)>(c[d+8>>2]|0)){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else e=0;while(1){if((e|0)==2)break;j=c[b+(e<<2)>>2]|0;h=c[d+(e<<2)>>2]|0;c[f+(e<<2)>>2]=(j|0)<(h|0)?j:h;h=e+2|0;j=c[b+(h<<2)>>2]|0;i=c[d+(h<<2)>>2]|0;c[f+(h<<2)>>2]=(j|0)>(i|0)?j:i;e=e+1|0}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2]}while(0);l=g;return}function US(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)!=0&(b|0)!=0)d=0;else qa(135782,135741,216,135789);while(1){if((d|0)>=2){d=1;break}e=d+2|0;if((c[a+(d<<2)>>2]|0)>(c[b+(e<<2)>>2]|0)){d=0;break}if((c[b+(d<<2)>>2]|0)>(c[a+(e<<2)>>2]|0)){d=0;break}else d=d+1|0}return d|0}function VS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0;if(!b)qa(135797,135799,40,135809);if(!d)qa(135819,135799,41,135809);j=a+1912|0;if(c[j>>2]|0){i=c[a+1908>>2]|0?a+1932|0:a+1928|0;c[i>>2]=(c[i>>2]|0)+1}h=b+4|0;i=c[h>>2]|0;WS(a,b,d);d=a+1324|0;XS(a);f=SS(a+1852|0)|0;f=(SS(a+1868|0)|0)+f|0;if(c[j>>2]|0?(f|0)!=0&(c[a+1908>>2]|0)==0:0){j=a+1960|0;g[j>>2]=+((c[a+1320>>2]|0)>>>0)/+(f|0)+ +g[j>>2]}j=JS(a)|0;c[e>>2]=j;c[h>>2]=i;c[j+4>>2]=i;YS(a,b,j,d);if(((c[c[e>>2]>>2]|0)+(c[b>>2]|0)|0)==65)return;else qa(135821,135799,86,135809)}function WS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h;if(!b)qa(135797,135799,106,136208);if(!d)qa(135819,135799,107,136208);else e=0;while(1){if((e|0)>=64)break;if(!(c[b+8+(e*20|0)+16>>2]|0)){f=7;break}j=b+8+(e*20|0)|0;i=a+4+(e*20|0)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[i+16>>2]=c[j+16>>2];e=e+1|0}if((f|0)==7)qa(136220,135799,111,136208);e=a+4|0;j=a+1284|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];d=a+1304|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)==65)break;TS(g,d,a+4+(e*20|0)|0);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];e=e+1|0}c[a+1320>>2]=SS(d)|0;KS(b);l=h;return}function XS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+48|0;i=u+32|0;k=u+16|0;m=u;ZS(a);_S(a);q=a+1844|0;s=a+1848|0;t=a+1892|0;n=a+1852|0;o=a+1884|0;p=a+1868|0;j=a+1888|0;f=0;e=0;while(1){d=c[q>>2]|0;b=c[s>>2]|0;if((b+d|0)>=65)break;h=65-(c[t>>2]|0)|0;if((d|0)<(h|0)&(b|0)<(h|0)){g=-1;h=0}else{r=12;break}while(1){if((h|0)==65)break;if(!(c[a+1584+(h<<2)>>2]|0)){v=a+4+(h*20|0)|0;TS(k,v,n);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];b=SS(i)|0;d=c[o>>2]|0;TS(m,v,p);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];v=SS(i)|0;b=v-(c[j>>2]|0)+(d-b)|0;d=(b|0)>-1;b=d?b:0-b|0;d=(d^1)&1;if((b|0)<=(g|0))if((b|0)==(g|0)){v=(c[a+1844+(d<<2)>>2]|0)<(c[a+1844+(f<<2)>>2]|0);b=g;d=v?d:f;e=v?h:e}else{b=g;d=f}else e=h}else{b=g;d=f}g=b;h=h+1|0;f=d}$S(a,e,f)}if((r|0)==12){b=(d|0)>=(65-(c[t>>2]|0)|0)&1;d=0;while(1){if((d|0)==65)break;if(!(c[a+1584+(d<<2)>>2]|0))$S(a,d,b);d=d+1|0}d=c[q>>2]|0;b=c[s>>2]|0}if((b+d|0)!=65)qa(135964,135799,210,136050);v=c[t>>2]|0;if((d|0)<(v|0)|(b|0)<(v|0))qa(136061,135799,212,136050);else{l=u;return}}function YS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(!b)qa(135797,135799,297,135861);if(!d)qa(135871,135799,298,135861);if(!e)qa(135873,135799,299,135861);else f=0;while(1){if((f|0)>=65){e=14;break}e=c[a+1324+(f<<2)>>2]|0;if(e>>>0>=2){e=9;break}switch(e|0){case 0:{OS(a,a+4+(f*20|0)|0,b,0)|0;break}case 1:{OS(a,a+4+(f*20|0)|0,d,0)|0;break}default:{}}f=f+1|0}if((e|0)==9)qa(135875,135799,303,135861);else if((e|0)==14)return}function ZS(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[a+1848>>2]=0;c[a+1844>>2]=0;b=a+1852|0;f=a+1868|0;RS(e);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[a+1888>>2]=0;c[a+1884>>2]=0;b=0;while(1){if((b|0)==65)break;c[a+1584+(b<<2)>>2]=0;c[a+1324+(b<<2)>>2]=-1;b=b+1|0}l=d;return}function _S(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+304|0;k=o+32|0;m=o+16|0;n=o;b=0;while(1){if((b|0)==65)break;c[k+(b<<2)>>2]=SS(a+4+(b*20|0)|0)|0;b=b+1|0}b=0;d=0;e=0;g=0;a:while(1){if((g|0)==64)break;i=g+1|0;j=a+4+(g*20|0)|0;h=k+(g<<2)|0;f=i;while(1){if((f|0)==65){g=i;continue a}TS(n,j,a+4+(f*20|0)|0);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];p=SS(m)|0;p=p-(c[h>>2]|0)-(c[k+(f<<2)>>2]|0)|0;q=p>>>0>e>>>0;r=q?f:b;f=f+1|0;b=r;d=q?g:d;e=q?p:e}}$S(a,d,0);$S(a,b,1);l=o;return}function $S(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;e=a+1584+(b<<2)|0;if(c[e>>2]|0)qa(136164,135799,257,136199);c[a+1324+(b<<2)>>2]=d;c[e>>2]=1;g=a+1844+(d<<2)|0;f=a+1852+(d<<4)|0;e=a+4+(b*20|0)|0;if(!(c[g>>2]|0)){c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2]}else{TS(h,e,f);c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2]}c[a+1884+(d<<2)>>2]=SS(f)|0;c[g>>2]=(c[g>>2]|0)+1;l=i;return}function aT(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[46627]=0;c[46628]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=95;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=C_(k*6|3)|0;if(h){F3(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;F3(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{D_(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=96;break a}case 4:{s=95;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==31){e=0;s=96;break}e=b[65430+(p<<1)>>1]|0;j=e<<16>>16;do if(e<<16>>16!=-82){h=c[46628]|0;if((h|0)==-2){h=pU()|0;c[46628]=h}if((h|0)>=1)if(h>>>0<296)i=d[136239+h>>0]|0;else i=2;else{c[46628]=0;i=0}h=i+j|0;if(h>>>0<=271?(i|0)==(a[136535+h>>0]|0):0){p=a[136807+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[46628]=-2;g=g+4|0;c[g>>2]=c[46629];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[137079+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[46628]|0;b:do switch(q|0){case 0:{c[46627]=(c[46627]|0)+1;vT(140679);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=96;break a}else{h=o;break b}else{c[46628]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<16>>16==8)break;if((h|0)==(f|0)){e=1;s=96;break a}e=h+-2|0;g=g+-4|0;h=e;e=b[65430+(b[e>>1]<<1)>>1]|0}g=g+4|0;c[g>>2]=c[46629];e=1;j=3}else s=23}do if((s|0)==23){s=0;j=d[137195+h>>0]|0;e=c[g+(1-j<<2)>>2]|0;do switch(h|0){case 4:{s=26;break a}case 2:{c[46630]=bT(c[g+-4>>2]|0,2)|0;break}case 3:{c[46630]=bT(c[g+-4>>2]|0,1)|0;break}case 5:{e=dT()|0;break}case 8:{eT(c[46631]|0);break}case 9:{fT(c[g>>2]|0);break}case 18:{gT(c[g>>2]|0);break}case 19:{hT();break}case 20:{gT(c[g>>2]|0);break}case 21:{hT();break}case 22:{gT(c[g>>2]|0);break}case 23:{hT();break}case 24:{gT(c[g>>2]|0);break}case 25:{hT();break}case 26:{gT(c[g>>2]|0);break}case 27:{hT();break}case 28:{gT(c[g>>2]|0);break}case 29:{hT();break}case 30:{gT(c[g>>2]|0);break}case 31:{hT();break}case 32:{gT(c[g>>2]|0);break}case 33:{hT();break}case 34:{e=c[g+-4>>2]|0;break}case 35:{e=c[g>>2]|0;break}case 38:{e=c[46631]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;i=c[46631]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(iT(p)|0){s=51;break a}c[(c[g>>2]|0)+80>>2]=c[46632];e=Cw(55928,c[4554]|0)|0;c[(c[g>>2]|0)+84>>2]=e;c[46632]=c[g>>2];c[(c[g>>2]|0)+108>>2]=c[c[46633]>>2];e=c[g>>2]|0;break}case 39:{e=c[46631]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;i=c[46631]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(iT(p)|0){s=56;break a}e=c[46632]|0;c[46632]=c[e+80>>2];break}case 40:{e=c[g>>2]|0;break}case 41:{e=c[g+-4>>2]|0;break}case 42:{e=c[g+-4>>2]|0;break}case 43:{e=c[g+-4>>2]|0;break}case 44:{e=c[g+-4>>2]|0;break}case 45:{e=c[g+-4>>2]|0;break}case 48:{e=c[g>>2]|0;break}case 49:{e=c[g>>2]|0;break}case 50:{a[(c[g+-8>>2]|0)+12>>0]=1;e=c[g>>2]|0;break}case 51:{jT();break}case 52:{e=kT()|0;break}case 53:{e=c[g>>2]|0;break}case 54:{e=c[g>>2]|0;break}case 55:{e=(c[g+-8>>2]|0)+100|0;a[e>>0]=a[e>>0]|1;e=c[g>>2]|0;break}case 56:{lT(c[g+-4>>2]|0,c[g>>2]|0,1);break}case 57:{e=c[g+-12>>2]|0;break}case 58:{lT(c[g+-4>>2]|0,c[g>>2]|0,2);break}case 59:{e=c[g+-12>>2]|0;break}case 60:{lT(c[g+-4>>2]|0,c[g>>2]|0,3);break}case 61:{e=c[g+-12>>2]|0;break}case 62:{lT(c[g>>2]|0,dT()|0,2);break}case 63:{e=c[g+-8>>2]|0;break}case 64:{e=c[g+-4>>2]|0;break}case 65:{e=c[g>>2]|0;break}default:{}}while(0);i=0-j|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[137367+h>>0]|0)+-41|0;p=b[i>>1]|0;h=p+(b[65662+(e<<1)>>1]|0)|0;if(h>>>0<272?(a[136535+h>>0]|0)==(p|0):0){e=a[136807+h>>0]|0;j=q;h=i;break}e=a[137437+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==26){cT();e=1;s=96}else if((s|0)==51){vT(137265);cT();e=1;s=96}else if((s|0)==56){vT(137316);cT();e=1;s=96}else if((s|0)==95){vT(137476);e=2;s=96}if((s|0)==96)if((f|0)!=(r|0))D_(f);l=t;return e|0}function bT(b,d){b=b|0;d=d|0;var e=0;e=uH(8)|0;a[e+4>>0]=d;c[e>>2]=b;return e|0}function cT(){var a=0,b=0;a=c[46632]|0;b=c[46630]|0;if(b|0){XQ(b,1);c[46630]=0}c[13995]=67;while(1){if(!a)break;b=c[a+80>>2]|0;pT(a);a=b}c[13995]=56;c[14004]=68;b=c[46635]|0;nb[c[b>>2]&63](b,0,64)|0;c[14004]=56;c[14013]=69;b=c[46636]|0;nb[c[b>>2]&63](b,0,64)|0;c[14013]=56;sT();return}function dT(){var a=0,d=0,e=0,f=0,g=0,h=0;e=c[46636]|0;f=uH(40)|0;if(Ew(c[46635]|0)|0)fT(0);a=Ew(e)|0;b[f+4>>1]=a;a:do if(!a)a=e;else{c[f>>2]=uH(a*24|0)|0;a=0;d=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!d){a=e;break a}g=(c[f>>2]|0)+(a*24|0)|0;h=d+8|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];c[g+20>>2]=c[h+20>>2];a=a+1|0;d=nb[c[e>>2]&63](e,d,8)|0}}while(0);nb[c[a>>2]&63](e,0,64)|0;return f|0}function eT(b){b=b|0;var d=0,e=0,f=0;e=uH(64)|0;f=b+4|0;d=c[f>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){Uw(b,1)|0;d=c[f>>2]|0}a[d>>0]=0;b=c[b>>2]|0;c[f>>2]=b;c[e+8>>2]=n1(b)|0;c[e+12>>2]=c[c[46633]>>2];f=c[46635]|0;nb[c[f>>2]&63](f,e,1)|0;return}function fT(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=uH(32)|0;j=c[46635]|0;e=Ew(j)|0;k=i+8|0;a[i+14>>0]=d;a:do if(!e){c[k>>2]=uH(56)|0;b[i+12>>1]=1;h=n1(191979)|0;k=c[k>>2]|0;c[k>>2]=h;c[k+4>>2]=c[c[46633]>>2]}else{b[i+12>>1]=e;c[k>>2]=uH(e*56|0)|0;d=0;e=Aw(j)|0;while(1){if(!e)break a;f=(c[k>>2]|0)+(d*56|0)|0;g=e+8|0;h=f+56|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));d=d+1|0;e=c[e>>2]|0}}while(0);nb[c[j>>2]&63](j,0,64)|0;k=c[46636]|0;nb[c[k>>2]&63](k,i,1)|0;return}function gT(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;i=uH(8)|0;f=c[c[46633]>>2]|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];if(f|0){a=g+4|0;if((c[a>>2]|0)==0?(b=c[f+4>>2]|0,b|0):0)c[a>>2]=b;a=g+16|0;if(+h[a>>3]<0.0?(d=+h[f+16>>3],d>=0.0):0)h[a>>3]=d;if((c[g>>2]|0)==0?(e=c[f>>2]|0,e|0):0)c[g>>2]=e;a=c[f+24>>2]&127;if(a|0){f=g+24|0;e=c[f>>2]|0;c[f>>2]=e&127|a|e&-128}}f=c[(c[46634]|0)+144>>2]|0;c[i>>2]=nb[c[f>>2]&63](f,g,1)|0;c[i+4>>2]=c[46633];c[46633]=i;l=j;return}function hT(){var a=0,b=0;b=c[46633]|0;a=c[b+4>>2]|0;D_(b);c[46633]=a;return}function iT(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=0;break}if(c<<24>>24==32)b=b+1|0;else{b=1;break}}return b|0}function jT(){var b=0,d=0,e=0;e=Cw(55964,c[4554]|0)|0;b=c[46632]|0;d=uH(16)|0;c[d+8>>2]=e;if(a[b+112>>0]&2)a[d+12>>0]=1;e=c[b+84>>2]|0;nb[c[e>>2]&63](e,d,1)|0;return}function kT(){var a=0;a=c[(c[46632]|0)+84>>2]|0;return nb[c[a>>2]&63](a,0,256)|0}function lT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=uH(16)|0;f=c[46632]|0;h=c[f+84>>2]|0;h=c[(nb[c[h>>2]&63](h,0,256)|0)+8>>2]|0;c[g+8>>2]=b;nb[c[h>>2]&63](h,g,1)|0;a[b+92>>0]=e;if(a[f+112>>0]&1)a[b+100>>0]=1;c[b+88>>2]=d;return}function mT(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function nT(a,b,d){a=a|0;b=b|0;d=d|0;yw(c[b+8>>2]|0)|0;D_(b);return}function oT(a,b,d){a=a|0;b=b|0;d=d|0;tT(c[b+8>>2]|0);D_(b);return}function pT(a){a=a|0;yw(c[a+84>>2]|0)|0;UQ(a);D_(a);return}function qT(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b+8>>2]|0);D_(b);return}function rT(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d+12|0;a=b[g>>1]|0;if(a<<16>>16){h=d+8|0;e=0;f=c[h>>2]|0;while(1){if((e|0)>=(a<<16>>16|0))break;D_(c[f>>2]|0);e=e+1|0;f=f+56|0;a=b[g>>1]|0}D_(c[h>>2]|0)}D_(d);return}function sT(){var a=0,b=0;a=c[46633]|0;while(1){b=c[a+4>>2]|0;if(!b)break;D_(a);a=b}return}function tT(b){b=b|0;var d=0;d=b+88|0;switch(a[b+92>>0]|0){case 1:{pT(c[d>>2]|0);break}case 2:{VQ(c[d>>2]|0);break}default:{}}UQ(b);D_(b);return}function uT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+160|0;e=f+8|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[46633]=g;c[46632]=0;c[46630]=0;c[46634]=c[(c[(c[d+52>>2]|0)+16>>2]|0)+144>>2];c[46635]=Cw(56e3,c[4554]|0)|0;c[46636]=Cw(56036,c[4554]|0)|0;Tw(e,128,f+24|0);c[46631]=e;if(!(yT(a,e,d)|0)){aT()|0;c[b>>2]=oU()|0;a=c[46630]|0}else{c[b>>2]=2;a=0}yw(c[46635]|0)|0;yw(c[46636]|0)|0;c[46635]=0;c[46636]=0;c[46633]=0;Xw(e);l=f;return a|0}function vT(b){b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;if(!(a[186581]|0)){a[186581]=1;f=wT()|0;c[d>>2]=b;c[d+4>>2]=f;Pw(1,137493,d)|0;xT()}l=e;return}function wT(){return dX(c[46637]|0)|0}function xT(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;b=c[46640]|0;c[b+4>>2]=c[b>>2];d=c[46649]|0;if((d|0)>0){Vw(b,c[46647]|0,d)|0;b=c[46640]|0}Vw(b,c[46646]|0,c[46648]|0)|0;d=c[46640]|0;b=c[d+4>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;b=c[46640]|0;d=b;b=c[b+4>>2]|0}c[d+4>>2]=b+1;a[b>>0]=0;b=c[46640]|0;d=c[b>>2]|0;c[b+4>>2]=d;c[e>>2]=d;Pw(3,137509,e)|0;l=f;return}function yT(b,e,f){b=b|0;e=e|0;f=f|0;c[46640]=e;Tw(186564,128,0);c[46638]=b;a[186583]=0;a[186580]=0;a[186581]=0;c[46648]=0;c[46649]=0;a[186582]=1;f=f+52|0;e=DV(hH(d[(c[(c[f>>2]|0)+16>>2]|0)+115>>0]|0)|0)|0;c[46637]=e;SW(e,c[(c[(c[f>>2]|0)+16>>2]|0)+144>>2]|0);TW(c[46637]|0,70,27);UW(c[46637]|0,71);return 0}function zT(b,d,e){b=b|0;d=d|0;e=e|0;do if(!(O$(d,137521)|0)){c[46629]=DT(e)|0;a[186582]=0;c[46639]=286}else{if(O$(d,137527)|0?O$(d,137530)|0:0){if(!(O$(d,137533)|0)){a[186582]=1;c[46629]=ET(e)|0;c[46639]=287;break}if(!(O$(d,137541)|0)){c[46629]=FT(b,e,0)|0;c[46639]=288;break}if(!(O$(d,137546)|0)){c[46629]=FT(b,0,1)|0;c[46639]=290;break}if(!(O$(d,137562)|0)){c[46629]=FT(b,0,32)|0;c[46639]=295;break}if(!(O$(d,137548)|0)){c[46629]=FT(b,0,4)|0;c[46639]=291;break}if(!(O$(d,137550)|0)){c[46629]=FT(b,0,64)|0;c[46639]=292;break}if(!(O$(d,137552)|0)){c[46629]=FT(b,0,2)|0;c[46639]=289;break}if(!(O$(d,137554)|0)){c[46629]=FT(b,0,8)|0;c[46639]=293;break}if(!(O$(d,137558)|0)){c[46629]=FT(b,0,16)|0;c[46639]=294;break}if(!(O$(d,137564)|0)){GT(e);c[46639]=283;break}if(!(O$(d,137567)|0)){c[46639]=277;break}if(!(O$(d,137570)|0)){c[46639]=280;break}if(!(O$(d,137573)|0)){c[46629]=HT(e)|0;c[46639]=285;break}if(!(O$(d,137536)|0)){c[46639]=262;break}else{CT(d);break}}a[186582]=0;c[46639]=260}while(0);return}function AT(b,d){b=b|0;d=d|0;do if(!(O$(d,137521)|0)){c[46639]=264;a[186582]=1}else{if(O$(d,137527)|0?O$(d,137530)|0:0){if(!(O$(d,137533)|0)){c[46639]=265;a[186582]=0;break}if(!(O$(d,137536)|0)){c[46639]=263;break}if(!(O$(d,137541)|0)){c[46639]=266;break}if(!(O$(d,137546)|0)){c[46639]=270;break}if(!(O$(d,137548)|0)){c[46639]=271;break}if(!(O$(d,137550)|0)){c[46639]=272;break}if(!(O$(d,137552)|0)){c[46639]=269;break}if(!(O$(d,137554)|0)){c[46639]=273;break}if(!(O$(d,137558)|0)){c[46639]=274;break}if(!(O$(d,137562)|0)){c[46639]=275;break}if(!(O$(d,137564)|0)){c[46639]=(c[46639]|0)==283?282:258;break}if(!(O$(d,137567)|0)){c[46639]=(c[46639]|0)==277?276:278;break}if(!(O$(d,137570)|0)){c[46639]=(c[46639]|0)==280?279:281;break}if(!(O$(d,137573)|0)){c[46639]=(c[46639]|0)==285?284:259;break}else{CT(d);break}}c[46639]=261}while(0);return}function BT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(a[186582]|0){b=0;while(1){if(!e)break;h=d+1|0;g=a[d>>0]|0;if((g&255)>31){d=c[46640]|0;f=c[d+4>>2]|0;if(f>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;f=c[46640]|0;d=f;f=c[f+4>>2]|0}c[d+4>>2]=f+1;a[f>>0]=g;b=b+1|0}d=h;e=e+-1|0}if(b|0)c[46639]=267}return}function CT(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[46639]=268;a[186581]=1;f=wT()|0;c[e>>2]=b;c[e+4>>2]=f;Pw(1,137577,e)|0;l=d;return}function DT(b){b=b|0;var d=0;d=uH(120)|0;c[d+100>>2]=-1;a[d+88>>0]=-1;IT(d,56296,22,b,138529);return d|0}function ET(a){a=a|0;var c=0;c=uH(104)|0;b[c+80>>1]=1;b[c+82>>1]=1;IT(c,56120,22,a,137883);return c|0}function FT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+32|0;e=f;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;c[e+28>>2]=0;h[e+16>>3]=-1.0;c[e+24>>2]=d&127;if(b|0)IT(e,56096,3,b,137734);d=c[a+144>>2]|0;e=nb[c[d>>2]&63](d,e,1)|0;l=f;return e|0}function GT(a){a=a|0;c[46629]=0;IT(186516,56088,1,a,137670);return}function HT(a){a=a|0;var b=0;b=uH(40)|0;IT(b,56072,2,a,137616);return b|0}function IT(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;m=o+8|0;while(1){k=c[g>>2]|0;if(!k)break;i=c[g+4>>2]|0;c[m>>2]=k;j=e2(m,e,f,8,102)|0;if(!j){c[n>>2]=k;c[n+4>>2]=h;Pw(0,137622,n)|0;i=1}else{i=lb[c[j+4>>2]&127](b,i)|0;i=(i|(d[186580]|0))&255}a[186580]=i;g=g+8|0}l=o;return}function JT(a,b){a=a|0;b=b|0;return O$(c[a>>2]|0,c[b>>2]|0)|0}function KT(a,b){a=a|0;b=b|0;c[a+36>>2]=n1(b)|0;return 0}function LT(a,b){a=a|0;b=b|0;c[a+32>>2]=n1(b)|0;return 0}function MT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=(I0(a[d>>0]|0)|0)<<24>>24;switch(f|0){case 82:{e=d+1|0;if(!(O$(e,137681)|0)){c[b>>2]=114;e=0}else h=5;break}case 76:{h=6;break}default:{e=d+1|0;h=5}}do if((h|0)==5)if(!(O$(e,137686)|0))h=6;else{if((f|0)!=67?(O$(e,137690)|0)==0:0){c[g>>2]=d;Pw(0,137696,g)|0;e=1;break}c[b>>2]=110;e=0}while(0);if((h|0)==6){c[b>>2]=108;e=0}l=i;return e|0}function NT(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return 0}function OT(a,b){a=a|0;b=b|0;c[a>>2]=b;return 0}function PT(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(QT(b,137763,0,255,d)|0)){h[a+16>>3]=+(c[d>>2]|0);a=0}else a=1;l=e;return a|0}function QT(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;h=k;m=k+36|0;g=i1(a,m,10)|0;do if((c[m>>2]|0)!=(a|0)){if((g|0)>(e|0)){c[i>>2]=b;c[i+4>>2]=a;c[i+8>>2]=e;Pw(0,137805,i)|0;a=1;break}if((g|0)<(d|0)){c[j>>2]=b;c[j+4>>2]=a;c[j+8>>2]=d;Pw(0,137844,j)|0;a=1;break}else{c[f>>2]=g;a=0;break}}else{c[h>>2]=b;c[h+4>>2]=a;Pw(0,137774,h)|0;a=1}while(0);l=k;return a|0}function RT(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(O$(e+1|0,137686)|0)){d=d+36|0;b[d>>1]=b[d>>1]|4;d=0}else g=9;break}case 82:{if(!(O$(e+1|0,137681)|0)){d=d+36|0;b[d>>1]=b[d>>1]|2;d=0}else g=9;break}case 84:{if(!(O$(e+1|0,138481)|0)){d=d+36|0;b[d>>1]=b[d>>1]|6;d=0}else g=9;break}case 67:{if(!(O$(e+1|0,137690)|0))d=0;else g=9;break}default:g=9}if((g|0)==9){c[f>>2]=e;Pw(0,138485,f)|0;d=1}l=h;return d|0}function ST(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(O$(e+1|0,137686)|0)){d=d+36|0;b[d>>1]=b[d>>1]|512;d=0}else g=7;break}case 82:{if(!(O$(e+1|0,137681)|0)){d=d+36|0;b[d>>1]=b[d>>1]|256;d=0}else g=7;break}case 67:{if(!(O$(e+1|0,137690)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;Pw(0,138436,f)|0;d=1}l=h;return d|0}function TT(a,b){a=a|0;b=b|0;c[a+20>>2]=n1(b)|0;return 0}function UT(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(QT(e,138429,0,255,f)|0)){a[d+33>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|32;d=0}else d=1;l=g;return d|0}function VT(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(QT(e,138417,0,255,f)|0)){a[d+34>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|64;d=0}else d=1;l=g;return d|0}function WT(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(QT(e,138405,-128,127,f)|0)){a[d+32>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|128;d=0}else d=1;l=g;return d|0}function XT(a,b){a=a|0;b=b|0;c[a+24>>2]=n1(b)|0;return 0}function YT(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=g+4|0;do if(!(QT(d,138360,0,65535,e)|0)){d=c[e>>2]|0;if(!d){Pw(0,138368,f)|0;d=1;break}else{b[a+80>>1]=d;d=0;break}}else d=1;while(0);l=g;return d|0}function ZT(a,e){a=a|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(d[e>>0]|0)|0)<<24>>24|0){case 84:{if(!(O$(e+1|0,138309)|0)){a=a+36|0;b[a>>1]=b[a>>1]|1;a=0}else g=5;break}case 70:{if(!(O$(e+1|0,138313)|0))a=0;else g=5;break}default:g=5}if((g|0)==5){c[f>>2]=e;Pw(0,138318,f)|0;a=1}l=h;return a|0}function _T(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(QT(b,138295,0,360,d)|0)){c[a+28>>2]=c[d>>2]&65535;a=0}else a=1;l=e;return a|0}function $T(a,d){a=a|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(QT(d,138288,0,65535,e)|0)){b[a+40>>1]=c[e>>2];a=0}else a=1;l=f;return a|0}function aU(a,b){a=a|0;b=b|0;c[a>>2]=n1(b)|0;return 0}function bU(a,b){a=a|0;b=b|0;c[a+16>>2]=n1(b)|0;return 0}function cU(a,b){a=a|0;b=b|0;c[a+4>>2]=n1(b)|0;return 0}function dU(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=g+4|0;do if(!(QT(d,138243,0,65535,e)|0)){d=c[e>>2]|0;if(!d){Pw(0,138251,f)|0;d=1;break}else{b[a+82>>1]=d;d=0;break}}else d=1;while(0);l=g;return d|0}function eU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=0;a:while(1){b:while(1){g=e+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a;e=e<<24>>24;f=(P$(e)|0)+-98|0;switch(f>>>1|f<<31|0){case 5:{j=5;break b}case 9:{f=2048;break b}case 8:{j=6;break b}case 0:{j=7;break b}default:{}}c[i>>2]=e;c[i+4>>2]=e;Pw(0,138190,i)|0;e=g}if((j|0)==5){j=0;f=1024}else if((j|0)==6){j=0;f=4096}else if((j|0)==7){j=0;f=8192}e=g;h=h|f}if(h<<16>>16!=15360){j=d+36|0;b[j>>1]=b[j>>1]|h}l=k;return 0}function fU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;h=n1(e)|0;g=d+42|0;f=0;e=h;while(1){d=k1(e,138100)|0;if(!d)break;if(((I0(a[d>>0]|0)|0)&255|0)==82){e=d+1|0;if(!(O$(e,138103)|0)){b[g>>1]=b[g>>1]|4;d=f;e=0;f=d;continue}if(!(O$(e,138110)|0)){b[g>>1]=b[g>>1]|2;d=f;e=0;f=d;continue}else{c[i>>2]=d;Pw(0,138116,i)|0;f=1;e=0;continue}}if(!(O$(d,138154)|0)){b[g>>1]=b[g>>1]&-385;d=f;e=0;f=d;continue}if(O$(d,138160)|0?O$(d,138170)|0:0){if(!(O$(d,138176)|0)){b[g>>1]=b[g>>1]|128;d=f;e=0;f=d;continue}if(!(O$(d,138183)|0)){b[g>>1]=b[g>>1]|256;d=f;e=0;f=d;continue}else{c[j>>2]=d;Pw(0,138116,j)|0;f=1;e=0;continue}}b[g>>1]=b[g>>1]|32;d=f;e=0;f=d}D_(h);l=k;return f|0}function gU(a,b){a=a|0;b=b|0;c[a+8>>2]=n1(b)|0;return 0}function hU(a,b){a=a|0;b=b|0;c[a+12>>2]=n1(b)|0;return 0}function iU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 66:{if(!(O$(e+1|0,138046)|0)){d=d+36|0;b[d>>1]=b[d>>1]|16;d=0}else g=7;break}case 84:{if(!(O$(e+1|0,138052)|0)){d=d+36|0;b[d>>1]=b[d>>1]|8;d=0}else g=7;break}case 77:{if(!(O$(e+1|0,138055)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;Pw(0,138061,f)|0;d=1}l=h;return d|0}function jU(a,d){a=a|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(QT(d,138040,0,65535,e)|0)){b[a+38>>1]=c[e>>2];a=0}else a=1;l=f;return a|0}function kU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(O$(e+1|0,137686)|0)){d=d+36|0;b[d>>1]=b[d>>1]|4;d=0}else g=7;break}case 82:{if(!(O$(e+1|0,137681)|0)){d=d+36|0;b[d>>1]=b[d>>1]|2;d=0}else g=7;break}case 67:{if(!(O$(e+1|0,137690)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;Pw(0,137696,f)|0;d=1}l=h;return d|0}function lU(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(QT(d,138638,0,127,e)|0)){a[b+88>>0]=c[e>>2];b=0}else b=1;l=f;return b|0}function mU(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[d>>0]|0)==42){b=b+112|0;a[b>>0]=a[b>>0]|1;b=0}else{c[e>>2]=d;Pw(0,138598,e)|0;b=1}l=f;return b|0}function nU(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[d>>0]|0)==42){b=b+112|0;a[b>>0]=a[b>>0]|2;b=0}else{c[e>>2]=d;Pw(0,138561,e)|0;b=1}l=f;return b|0}function oU(){var b=0;b=(a[186581]|a[186580])<<24>>24;JV(c[46637]|0);Xw(186564);return b|0}function pU(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;c[46639]=0;d=0;a:do{b:do switch(a[186583]|0){case 2:{b=-1;break a}case 0:{a[186583]=1;h=6;b=138650;d=0;break}default:{b=c[46638]|0;if(!(a[b>>0]|0)){a[186583]=2;h=7;b=138657;break b}else{d=qU(b)|0;h=d-b|0;break b}}}while(0);c[46647]=c[46646];c[46649]=c[46648];c[46646]=b;c[46648]=h;e=c[46642]|0;f=e-(c[46641]|0)|0;g=c[46637]|0;if(!f)b=VW(g,b,h,(h|0)==0&1)|0;else{if(e>>>0<(c[46643]|0)>>>0)b=e;else{Uw(186564,1)|0;b=c[46642]|0}a[b>>0]=0;b=c[46641]|0;c[46642]=b;b=VW(g,b,f,0)|0}if(!((b|0)!=0|(a[186581]|0)!=0)){g=eX(cX(c[46637]|0)|0)|0;h=wT()|0;c[i>>2]=g;c[i+4>>2]=h;Pw(1,137493,i)|0;xT();a[186581]=1;c[46639]=268}if(d|0)c[46638]=d;b=c[46639]|0}while((b|0)==0);l=j;return b|0}function qU(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b+1|0;e=a[b>>0]|0;a:do if(e<<24>>24==60){e=a[d>>0]|0;if(e<<24>>24==33)if(!(z$(b+2|0,138665,2)|0)){e=rU(b+4|0)|0;d=e;e=a[e>>0]|0;g=8}else{e=d;g=5}else g=6;b:while(1)if((g|0)==5){d=e;e=a[e>>0]|0;g=6;continue}else if((g|0)==6){switch(e<<24>>24){case 62:case 0:{g=8;continue b}default:{}}e=d+1|0;g=5;continue}else if((g|0)==8)if(e<<24>>24==62){g=10;break}else{g=9;break}if((g|0)==9){Pw(0,138668,f)|0;a[186580]=1;break}else if((g|0)==10){d=d+1|0;break}}else{d=b;b=e;while(1){switch(b<<24>>24){case 60:case 0:break a;case 38:{e=d+1|0;if((a[e>>0]|0)==35)g=15;else e=MM(e,186564)|0;break}default:g=15}if((g|0)==15){g=0;e=c[46642]|0;if(e>>>0>=(c[46643]|0)>>>0){Uw(186564,1)|0;e=c[46642]|0}c[46642]=e+1;a[e>>0]=b;e=d+1|0}d=e;b=a[e>>0]|0}}while(0);l=h;return d|0}function rU(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;f=1;c=b;a:while(1){e=(f|0)==0;d=c;b:while(1){if(e)break a;g=d+1|0;switch(a[d>>0]|0){case 0:{c=g;break a}case 60:{h=5;break b}case 62:{c=-1;break b}default:d=g}}if((h|0)==5){h=0;c=1}f=f+c|0;c=g}d=c+-1|0;do if(a[d>>0]|0){c=c+-3|0;if(c>>>0>=b>>>0?(z$(c,138665,2)|0)==0:0)break;Pw(0,138709,i)|0;a[186580]=1}while(0);l=j;return d|0}function sU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=C_(28)|0;if(!d)d=0;else{e=0;f=0;while(1){if((e|0)>=(b|0))break;r=(c[(c[a+(e<<2)>>2]|0)+4>>2]|0)+f|0;e=e+1|0;f=r}o=d+8|0;c[o>>2]=tU(f<<4)|0;p=d+12|0;c[p>>2]=tU((b<<2)+4|0)|0;e=f<<2;q=d+16|0;c[q>>2]=tU(e)|0;e=tU(e)|0;r=d+20|0;c[r>>2]=e;c[d+4>>2]=f;c[d>>2]=b;f=0;h=0;while(1){c[(c[p>>2]|0)+(h<<2)>>2]=f;if((h|0)>=(b|0))break;j=a+(h<<2)|0;n=c[j>>2]|0;k=c[n+4>>2]|0;l=f+-1|0;g=0;i=f;m=k;while(1){if((g|0)>=(m|0))break;m=(c[o>>2]|0)+(i<<4)|0;e=(c[n>>2]|0)+(g<<4)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];m=i+1|0;c[(c[q>>2]|0)+(i<<2)>>2]=m;e=c[r>>2]|0;c[e+(i<<2)>>2]=i+-1;s=c[j>>2]|0;g=g+1|0;i=m;m=c[s+4>>2]|0;n=s}s=l+k|0;c[(c[q>>2]|0)+(s<<2)>>2]=f;c[e+(f<<2)>>2]=s;f=i;h=h+1|0}tV(d)}return d|0}function tU(a){a=a|0;if(!a)a=0;else a=C_(a)|0;return a|0}function uU(a){a=a|0;var b=0,d=0;D_(c[a+8>>2]|0);D_(c[a+12>>2]|0);D_(c[a+16>>2]|0);D_(c[a+20>>2]|0);d=a+24|0;b=c[d>>2]|0;if(b|0){D_(c[b>>2]|0);D_(c[d>>2]|0)}D_(a);return}function vU(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;m=p+16|0;j=p;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];n=AV(a,d,m)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];o=AV(a,f,m)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];m=jV(j,d,n,m,f,o,a)|0;d=c[a+4>>2]|0;j=d+1|0;f=1;h=d;while(1){h=c[m+(h<<2)>>2]|0;k=f+1|0;if((h|0)==(j|0))break;else f=k}i=C_(k<<4)|0;h=i+(f<<4)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];a=a+8|0;while(1){d=c[m+(d<<2)>>2]|0;f=f+-1|0;h=i+(f<<4)|0;if((d|0)==(j|0))break;e=(c[a>>2]|0)+(d<<4)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2]}c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];if(f|0)qa(138727,138734,148,138740);if(n|0)D_(n);if(o|0)D_(o);c[g+4>>2]=k;c[g>>2]=i;D_(m);l=p;return 1}function wU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+48|0;h=j+32|0;g=j+16|0;f=j;i=c[a>>2]|0;d=c[a+4>>2]|0;e=d+-1|0;a=0;while(1){if((a|0)>=(d|0)){a=1;break}m=i+(((e+a|0)%(d|0)|0)<<4)|0;k=i+(a<<4)|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];c[f+12>>2]=c[m+12>>2];c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];if((pV(f,g,h)|0)==1){a=0;break}else a=a+1|0}l=j;return a|0}function xU(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;m=u+48|0;k=u+32|0;s=4;j=C_(40)|0;c[j>>2]=0;n=u+16|0;q=u;r=c[d>>2]|0;i=c[d+4>>2]|0;s=D3(186600,1,j|0,s|0)|0;j=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1)d=z;else d=0;while(1){if(d|0){d=-1;break}o=0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];ja(28,n|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];h=e+16|0;o=0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];ja(28,q|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[46689]=0;o=0;ia(112,4);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue}g=c[46690]|0;d=c[46689]|0;c[46689]=d+1;d=g+(d<<4)|0;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];o=0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];d=fa(1,a|0,b|0,r|0,i|0,k|0,m|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,s|0,j|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1)d=z;else{t=8;break}}if((t|0)==8)if((d|0)==-1)d=-1;else{c[f+4>>2]=c[46689];c[f>>2]=c[46690];d=0}D_(s|0);l=u;return d|0}function yU(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0.0;d=+h[b>>3];e=b+8|0;f=+h[e>>3];i=f*f+d*d;g=+C(+i);if(i>1.0e-06){h[b>>3]=d/g;h[e>>3]=f/g};c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function zU(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46693]|0)<(a|0)){b=c[46690]|0;if(!b){e=C_(a<<4)|0;c[46690]=e;if(!e){e=c[15686]|0;c[d>>2]=138749;c[d+4>>2]=531;c[d+8>>2]=138884;g1(e,138757,d)|0;bb(186600,1)}}else{d=F_(b,a<<4)|0;c[46690]=d;if(!d){d=c[15686]|0;c[e>>2]=138749;c[e+4>>2]=537;c[e+8>>2]=138902;g1(d,138757,e)|0;bb(186600,1)}}c[46693]=a}l=f;return}function AU(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0;R=l;l=l+336|0;J=R+320|0;I=R+304|0;w=R+144|0;q=R+128|0;G=R+112|0;H=R+96|0;Q=R+80|0;A=R+64|0;C=R+48|0;K=R+32|0;L=R+16|0;M=R;x=R+288|0;y=R+272|0;z=R+256|0;B=R+240|0;D=R+224|0;E=R+208|0;N=R+192|0;O=R+176|0;P=R+160|0;i=c[46692]|0;do if((c[46691]|0)<(e|0)){if(!i){i=C_(e*40|0)|0;c[46692]=i;if(!i){i=-1;break}}else{i=F_(i,e*40|0)|0;c[46692]=i;if(!i){i=-1;break}}c[46691]=e;k=6}else k=6;while(0);if((k|0)==6){h[i>>3]=0.0;k=1;j=0.0;while(1){if((k|0)>=(e|0))break;n=d+(k<<4)|0;F=d+(k+-1<<4)|0;c[I>>2]=c[n>>2];c[I+4>>2]=c[n+4>>2];c[I+8>>2]=c[n+8>>2];c[I+12>>2]=c[n+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];v=+BU(I,J)+j;h[i+(k*40|0)>>3]=v;k=k+1|0;j=v}F=e+-1|0;n=i+(F*40|0)|0;k=1;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)|0;h[S>>3]=+h[S>>3]/+h[n>>3];k=k+1|0}k=0;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)+8|0;n=i+(k*40|0)|0;v=+CU(+h[n>>3]);c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];c[J+8>>2]=c[f+8>>2];c[J+12>>2]=c[f+12>>2];DU(x,J,v);c[S>>2]=c[x>>2];c[S+4>>2]=c[x+4>>2];c[S+8>>2]=c[x+8>>2];c[S+12>>2]=c[x+12>>2];S=i+(k*40|0)+24|0;v=+EU(+h[n>>3]);c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];DU(y,J,v);c[S>>2]=c[y>>2];c[S+4>>2]=c[y+4>>2];c[S+8>>2]=c[y+8>>2];c[S+12>>2]=c[y+12>>2];k=k+1|0}c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];FU(d,e,i,I,J,G,A,H,C);c[q>>2]=c[G>>2];c[q+4>>2]=c[G+4>>2];c[q+8>>2]=c[G+8>>2];c[q+12>>2]=c[G+12>>2];c[w>>2]=c[A>>2];c[w+4>>2]=c[A+4>>2];c[w+8>>2]=c[A+8>>2];c[w+12>>2]=c[A+12>>2];c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];if(!(GU(a,b,q,w,I,J,d,e)|0)){c[J>>2]=c[A>>2];c[J+4>>2]=c[A+4>>2];c[J+8>>2]=c[A+8>>2];c[J+12>>2]=c[A+12>>2];DU(z,J,.3333333333333333);c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[z>>2];c[J+4>>2]=c[z+4>>2];c[J+8>>2]=c[z+8>>2];c[J+12>>2]=c[z+12>>2];HU(B,I,J);v=+h[B>>3];u=+h[B+8>>3];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];DU(D,J,.3333333333333333);c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[D>>2];c[J+4>>2]=c[D+4>>2];c[J+8>>2]=c[D+8>>2];c[J+12>>2]=c[D+12>>2];IU(E,I,J);t=+h[E>>3];p=+h[E+8>>3];q=c[46692]|0;r=+h[G>>3];s=+h[H>>3];o=+h[G+8>>3];m=+h[H+8>>3];n=Q+8|0;i=-1;j=-1.0;k=1;while(1){if((k|0)>=(F|0))break;T=+h[q+(k*40|0)>>3];U=+JU(T);V=+CU(T);W=+EU(T);T=+KU(T);h[Q>>3]=V*v+r*U+W*t+s*T;h[n>>3]=W*p+V*u+o*U+m*T;S=d+(k<<4)|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];T=+BU(I,J);S=T>j;i=S?k:i;j=S?T:j;k=k+1|0}S=d+(i<<4)|0;Q=d+(i+-1<<4)|0;c[I>>2]=c[S>>2];c[I+4>>2]=c[S+4>>2];c[I+8>>2]=c[S+8>>2];c[I+12>>2]=c[S+12>>2];c[J>>2]=c[Q>>2];c[J+4>>2]=c[Q+4>>2];c[J+8>>2]=c[Q+8>>2];c[J+12>>2]=c[Q+12>>2];IU(N,I,J);c[J>>2]=c[N>>2];c[J+4>>2]=c[N+4>>2];c[J+8>>2]=c[N+8>>2];c[J+12>>2]=c[N+12>>2];yU(L,J);Q=i+1|0;N=d+(Q<<4)|0;c[I>>2]=c[N>>2];c[I+4>>2]=c[N+4>>2];c[I+8>>2]=c[N+8>>2];c[I+12>>2]=c[N+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];IU(O,I,J);c[J>>2]=c[O>>2];c[J+4>>2]=c[O+4>>2];c[J+8>>2]=c[O+8>>2];c[J+12>>2]=c[O+12>>2];yU(M,J);c[I>>2]=c[L>>2];c[I+4>>2]=c[L+4>>2];c[I+8>>2]=c[L+8>>2];c[I+12>>2]=c[L+12>>2];c[J>>2]=c[M>>2];c[J+4>>2]=c[M+4>>2];c[J+8>>2]=c[M+8>>2];c[J+12>>2]=c[M+12>>2];HU(P,I,J);c[J>>2]=c[P>>2];c[J+4>>2]=c[P+4>>2];c[J+8>>2]=c[P+8>>2];c[J+12>>2]=c[P+12>>2];yU(K,J);c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];AU(a,b,d,Q,I,J)|0;c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];AU(a,b,S,e-i|0,I,J)|0;i=0}else i=0}l=R;return i|0}function BU(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[b>>3]-+h[a>>3];d=+h[b+8>>3]-+h[a+8>>3];return +(+C(+(d*d+c*c)))}function CU(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(a*3.0))}function DU(a,b,d){a=a|0;b=b|0;d=+d;var e=0;h[b>>3]=+h[b>>3]*d;e=b+8|0;h[e>>3]=+h[e>>3]*d;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function EU(a){a=+a;return +(a*a*3.0*(1.0-a))}function FU(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0;G=l;l=l+128|0;B=G+112|0;v=G+80|0;u=G;r=G+96|0;s=G+64|0;t=G+48|0;C=G+32|0;D=G+16|0;E=a+(b+-1<<4)|0;q=0;w=0.0;x=0.0;y=0.0;z=0.0;A=0.0;while(1){if((q|0)>=(b|0))break;K=d+(q*40|0)+8|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];H=+QU(v,B)+x;J=d+(q*40|0)+24|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];p=+QU(v,B)+A;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];o=+QU(v,B)+y;L=a+(q<<4)|0;M=d+(q*40|0)|0;I=+RU(+h[M>>3]);c[B>>2]=c[a>>2];c[B+4>>2]=c[a+4>>2];c[B+8>>2]=c[a+8>>2];c[B+12>>2]=c[a+12>>2];DU(s,B,I);I=+SU(+h[M>>3]);c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];DU(t,B,I);c[v>>2]=c[s>>2];c[v+4>>2]=c[s+4>>2];c[v+8>>2]=c[s+8>>2];c[v+12>>2]=c[s+12>>2];c[B>>2]=c[t>>2];c[B+4>>2]=c[t+4>>2];c[B+8>>2]=c[t+8>>2];c[B+12>>2]=c[t+12>>2];HU(r,v,B);c[v>>2]=c[L>>2];c[v+4>>2]=c[L+4>>2];c[v+8>>2]=c[L+8>>2];c[v+12>>2]=c[L+12>>2];c[B>>2]=c[r>>2];c[B+4>>2]=c[r+4>>2];c[B+8>>2]=c[r+8>>2];c[B+12>>2]=c[r+12>>2];IU(u,v,B);c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];I=+QU(v,B)+w;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];q=q+1|0;w=I;x=H;y=o;z=+QU(v,B)+z;A=p}o=y*x-A*A;p=o>=0.0?o:-o;if(!(p>=1.0e-06?(m=(y*w-A*z)/o,n=(x*z-A*w)/o,!(p<1.0e-06|m<=0.0|n<=0.0)):0))F=6;if((F|0)==6){c[v>>2]=c[a>>2];c[v+4>>2]=c[a+4>>2];c[v+8>>2]=c[a+8>>2];c[v+12>>2]=c[a+12>>2];c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];m=+BU(v,B)*.3333333333333333;n=m};c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];DU(C,B,m);c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[j>>2]=c[E>>2];c[j+4>>2]=c[E+4>>2];c[j+8>>2]=c[E+8>>2];c[j+12>>2]=c[E+12>>2];c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];DU(D,B,n);c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];l=G;return}function GU(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0;C=l;l=l+64|0;B=C;z=(j|0)==2;y=+h[d>>3];u=+h[d+8>>3];v=B+8|0;w=+h[e>>3];x=B+16|0;p=+h[e+8>>3];q=B+24|0;r=+h[f>>3];s=+h[g>>3];t=B+32|0;o=+h[f+8>>3];n=+h[g+8>>3];e=B+40|0;f=B+48|0;g=B+56|0;d=1;k=4.0;m=4.0;while(1){h[B>>3]=y;h[v>>3]=u;D=m*.3333333333333333;h[x>>3]=D*w+y;h[q>>3]=D*p+u;D=k*.3333333333333333;h[t>>3]=r-D*s;h[e>>3]=o-D*n;h[f>>3]=r;h[g>>3]=o;if(d?(D=+LU(B,4),D<+LU(i,j)+-.001):0){d=0;break}if(MU(a,b,B)|0){A=5;break}if(m==0.0&k==0.0){A=9;break}E=m>.01;d=0;k=E?k*.5:0.0;m=E?m*.5:0.0}a:do if((A|0)==5){zU((c[46689]|0)+4|0);e=c[46690]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[46689]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[46689]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else if((A|0)==9)if(z){zU((c[46689]|0)+4|0);e=c[46690]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[46689]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[46689]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else d=0;while(0);l=C;return d|0}function HU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function IU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]-+h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]-+h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function JU(a){a=+a;a=1.0-a;return +(a*a*a)}function KU(a){a=+a;return +(a*a*a)}function LU(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0;c=0.0;d=1;while(1){if((d|0)>=(b|0))break;g=d+-1|0;e=+h[a+(d<<4)>>3]-+h[a+(g<<4)>>3];f=+h[a+(d<<4)+8>>3]-+h[a+(g<<4)+8>>3];c=+C(+(f*f+e*e))+c;d=d+1|0}return +c}function MU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=l;l=l+64|0;t=C+32|0;u=C;w=u+16|0;y=d+16|0;z=d+32|0;A=d+48|0;B=d+8|0;g=d+24|0;i=d+40|0;j=d+56|0;k=u+8|0;m=u+24|0;f=0;a:while(1){if((f|0)>=(b|0)){e=1;break}n=a+(f<<5)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];n=a+(f<<5)+16|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];n=NU(d,u,t)|0;b:do if((n|0)!=4){o=+h[u>>3];p=+h[k>>3];q=+h[w>>3];r=+h[m>>3];e=0;while(1){if((e|0)>=(n|0))break b;s=+h[t+(e<<3)>>3];if((!(s<1.0e-06|s>.999999)?(x=s*s*s,E=s*3.0,D=1.0-s,s=E*s*D,v=D*D,E=v*E,D=v*D,v=+h[y>>3]*E+ +h[d>>3]*D+ +h[z>>3]*s+ +h[A>>3]*x,x=+h[g>>3]*E+ +h[B>>3]*D+ +h[i>>3]*s+ +h[j>>3]*x,s=v-o,D=x-p,!(D*D+s*s<.001)):0)?(E=v-q,D=x-r,!(D*D+E*E<.001)):0){e=0;break a}e=e+1|0}}while(0);f=f+1|0}l=C;return e|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+96|0;s=v+48|0;t=v+24|0;k=v;u=v+80|0;p=+h[b>>3];g=+h[b+16>>3]-p;q=+h[b+8>>3];j=+h[b+24>>3]-q;c[u>>2]=0;a:do if(!(g==0.0)){j=j/g;m=a+16|0;n=a+32|0;o=a+48|0;OU(+h[a+8>>3]-+h[a>>3]*j,+h[a+24>>3]-+h[m>>3]*j,+h[a+40>>3]-+h[n>>3]*j,+h[a+56>>3]-+h[o>>3]*j,s);h[s>>3]=j*p-q+ +h[s>>3];e=kV(s,t)|0;if((e|0)==4)b=4;else{f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/g;b=0;while(1){if((b|0)>=(e|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(OU(+h[a>>3],+h[m>>3],+h[n>>3],+h[o>>3],s),q=(+h[s>>3]-p+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,q>=0.0&q<=1.0):0)PU(j,d,u);b=b+1|0}b=c[u>>2]|0}}else{OU(+h[a>>3],+h[a+16>>3],+h[a+32>>3],+h[a+48>>3],s);h[s>>3]=+h[s>>3]-p;r=kV(s,t)|0;if(!(j==0.0)){if((r|0)==4){b=4;break}m=a+8|0;n=a+24|0;o=a+40|0;e=a+56|0;f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/j;b=0;while(1){if((b|0)>=(r|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(OU(+h[m>>3],+h[n>>3],+h[o>>3],+h[e>>3],s),p=(+h[s>>3]-q+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,p>=0.0&p<=1.0):0)PU(j,d,u);b=b+1|0}b=c[u>>2]|0;break}OU(+h[a+8>>3],+h[a+24>>3],+h[a+40>>3],+h[a+56>>3],s);h[s>>3]=+h[s>>3]-q;i=kV(s,k)|0;b=(i|0)==4;b:do if((r|0)==4){if(b){b=4;break a}else b=0;while(1){if((b|0)>=(i|0))break b;PU(+h[k+(b<<3)>>3],d,u);b=b+1|0}}else{if(b){b=0;while(1){if((b|0)>=(r|0))break b;PU(+h[t+(b<<3)>>3],d,u);b=b+1|0}}else e=0;while(1){if((e|0)>=(r|0))break b;f=t+(e<<3)|0;b=0;while(1){if((b|0)>=(i|0))break;g=+h[f>>3];if(g==+h[k+(b<<3)>>3])PU(g,d,u);b=b+1|0}e=e+1|0}}while(0);b=c[u>>2]|0}while(0);l=v;return b|0}function OU(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=e|0;h[e+24>>3]=d-a+(b-c)*3.0;h[e+16>>3]=(c+a)*3.0-b*6.0;h[e+8>>3]=(b-a)*3.0;h[e>>3]=a;return}function PU(a,b,d){a=+a;b=b|0;d=d|0;var e=0;if(a>=0.0&a<=1.0){e=c[d>>2]|0;h[b+(e<<3)>>3]=a;c[d>>2]=e+1}return}function QU(a,b){a=a|0;b=b|0;return +(+h[b+8>>3]*+h[a+8>>3]+ +h[b>>3]*+h[a>>3])}function RU(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(b+a*3.0))}function SU(a){a=+a;return +(a*a*((1.0-a)*3.0+a))}function TU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+112|0;E=H+80|0;D=H+64|0;C=H+48|0;G=4;F=C_(40)|0;c[F>>2]=0;w=H+32|0;x=H+16|0;y=H;A=H+96|0;G=D3(186776,1,F|0,G|0)|0;F=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1)e=z;else e=0;a:while(1){if(e|0){e=-2;break}g=a+4|0;o=0;ia(113,c[g>>2]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}c[46733]=0;c[46734]=0;o=0;ia(114,c[g>>2]<<1|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}m=(c[46736]|0)/2|0;c[46737]=m;c[46738]=m+-1;m=c[g>>2]|0;g=c[a>>2]|0;e=0;f=-1;i=t;while(1){if((e|0)>=(m|0))break;I=+h[g+(e<<4)>>3];v=i>I;u=v?e:f;e=e+1|0;f=u;i=v?I:i}v=g+(f<<4)|0;c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];v=g+(((f|0)==0?m:f)+-1<<4)|0;c[w>>2]=c[v>>2];c[w+4>>2]=c[v+4>>2];c[w+8>>2]=c[v+8>>2];c[w+12>>2]=c[v+12>>2];v=g+(((f|0)==(m+-1|0)?0:f+1|0)<<4)|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];I=+h[x>>3];if((+h[w>>3]==I?I==+h[y>>3]:0)?+h[y+8>>3]>+h[x+8>>3]:0)v=15;else v=12;b:do if((v|0)==12){v=0;o=0;e=ca(33,w|0,x|0,y|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,G|0,F|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((e|0)==1){g=c[46740]|0;e=c[46741]|0;f=0;while(1){if((f|0)>=(m|0))break b;j=c[a>>2]|0;if(!(((f|0)>0?(B=f+-1|0,+h[j+(f<<4)>>3]==+h[j+(B<<4)>>3]):0)?+h[j+(f<<4)+8>>3]==+h[j+(B<<4)+8>>3]:0)){u=c[46733]|0;c[g+(u<<3)>>2]=j+(f<<4);c[g+(u<<3)+4>>2]=g+(((u|0)%(m|0)|0)<<3);c[e+(u<<2)>>2]=g+(u<<3);c[46733]=u+1}f=f+1|0}}else v=15}while(0);c:do if((v|0)==15){v=0;j=c[46740]|0;e=c[46741]|0;g=m;while(1){f=g+-1|0;if((g|0)<=0)break c;k=c[a>>2]|0;if(((g|0)<(m|0)?+h[k+(f<<4)>>3]==+h[k+(g<<4)>>3]:0)?+h[k+(f<<4)+8>>3]==+h[k+(g<<4)+8>>3]:0){g=f;continue}g=c[46733]|0;c[j+(g<<3)>>2]=k+(f<<4);c[j+(g<<3)+4>>2]=j+(((g|0)%(m|0)|0)<<3);c[e+(g<<2)>>2]=j+(g<<3);c[46733]=g+1;g=f}}while(0);o=0;ja(29,e|0,c[46733]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}j=0;e=c[46734]|0;d:while(1){if((j|0)>=(e|0)){s=0;break}k=j+1|0;g=k;while(1){if((g|0)>=(e|0)){j=k;continue d}o=0;ja(30,j|0,g|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue a}g=g+1|0;e=c[46734]|0}}while(1){if((s|0)>=(e|0))break;o=0;f=aa(103,s|0,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;s=s+1|0}if((s|0)==(e|0)){e=c[15686]|0;o=0;c[C>>2]=138776;c[C+4>>2]=192;c[C+8>>2]=138787;ca(29,e|0,138757,C|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=41;break}}u=b+16|0;k=0;while(1){if((k|0)>=(e|0))break;o=0;f=aa(103,k|0,u|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;k=k+1|0}if((k|0)==(e|0)){e=c[15686]|0;o=0;c[D>>2]=138776;c[D+4>>2]=200;c[D+8>>2]=138820;ca(29,e|0,138757,D|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=48;break}}o=0;e=aa(104,s|0,k|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,G|0,F|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}if(!e){e=c[15686]|0;o=0;c[E>>2]=138776;c[E+4>>2]=207;c[E+8>>2]=138858;ca(29,e|0,138757,E|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}o=0;ia(115,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=53;break}}if((s|0)==(k|0)){o=0;ia(115,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=56;break}}c[A>>2]=b;c[A+4>>2]=0;f=A+8|0;c[f>>2]=u;c[A+12>>2]=0;o=0;ja(31,1,A|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}c[46739]=c[46737];q=s;e:while(1){if((q|0)==-1){g=f;e=0;break}r=c[46743]|0;c[r+(q*52|0)>>2]=2;e=0;while(1){if((e|0)>=3){v=65;break}v=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(v|0?(c[v>>2]|0)==1:0){v=68;break}e=e+1|0}if((v|0)==65){v=0;if((e|0)==3){e=c[46735]|0;k=c[e+(c[46738]<<2)>>2]|0;o=0;e=ca(33,u|0,c[c[e+(c[46737]<<2)>>2]>>2]|0,c[k>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?f:k;j=j?k:f}else v=68}if((v|0)==68){v=0;k=c[r+(q*52|0)+4+(e<<4)>>2]|0;m=c[r+(q*52|0)+4+(e<<4)+4>>2]|0;o=0;e=ca(33,c[k>>2]|0,c[c[r+(q*52|0)+4+(((e+1|0)%3|0)<<4)+4>>2]>>2]|0,c[m>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?k:m;j=j?m:k}do if((q|0)==(s|0)){o=0;ja(31,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}e=0}else{m=c[46735]|0;if((c[m+(c[46737]<<2)>>2]|0)!=(n|0)?(c[m+(c[46738]<<2)>>2]|0)!=(n|0):0){o=0;j=$(34,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(32,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((j|0)<=(c[46739]|0)){e=0;break}c[46739]=j;e=0;break}o=0;k=$(34,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(32,1,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((k|0)>=(c[46739]|0)){e=0;break}c[46739]=k;e=0}while(0);while(1){if((e|0)>=3){q=-1;continue e}g=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(g|0?(c[g>>2]|0)==1:0)break;e=e+1|0}q=(g-(c[46743]|0)|0)/52|0}while(1){if(!g)break;g=c[g+4>>2]|0;e=e+1|0}o=0;ia(115,e|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1)e=z;else{v=94;break}}if((v|0)==41)e=-1;else if((v|0)==48)e=-1;else if((v|0)==53){c[d+4>>2]=2;e=c[46742]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==56){c[d+4>>2]=2;e=c[46742]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==94){c[d+4>>2]=e;g=c[46742]|0;while(1){e=e+-1|0;if(!f)break;F=g+(e<<4)|0;E=c[f>>2]|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];f=c[f+4>>2]|0}c[d>>2]=g;e=0}D_(G|0);l=H;return e|0}function UU(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+64|0;e=h+48|0;g=h+32|0;f=h+16|0;d=h;if((c[46746]|0)<(a|0)){b=c[46740]|0;if(!b){g=C_(a<<3)|0;c[46740]=g;if(!g){g=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=523;c[d+8>>2]=139026;g1(g,138757,d)|0;bb(186776,1)}g=C_(a<<2)|0;c[46741]=g;if(!g){g=c[15686]|0;c[f>>2]=138776;c[f+4>>2]=527;c[f+8>>2]=139045;g1(g,138757,f)|0;bb(186776,1)}}else{f=F_(b,a<<3)|0;c[46740]=f;if(!f){f=c[15686]|0;c[g>>2]=138776;c[g+4>>2]=533;c[g+8>>2]=139065;g1(f,138757,g)|0;bb(186776,1)}g=F_(c[46741]|0,a<<2)|0;c[46741]=g;if(!g){g=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=539;c[e+8>>2]=139085;g1(g,138757,e)|0;bb(186776,1)}}c[46746]=a}l=h;return}function VU(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46736]|0)<(a|0)){b=c[46735]|0;if(!b){e=C_(a<<2)|0;c[46735]=e;if(!e){e=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=573;c[d+8>>2]=138981;g1(e,138757,d)|0;bb(186776,1)}}else{d=F_(b,a<<2)|0;c[46735]=d;if(!d){d=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=580;c[e+8>>2]=139003;g1(d,138757,e)|0;bb(186776,1)}}c[46736]=a}l=f;return}function WU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>0.0?1:d<0.0?2:3)|0}function XU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a:while(1){if((b|0)>3)e=0;else{b=9;break}while(1){if((e|0)>=(b|0)){b=8;break a}f=e+1|0;d=(f|0)%(b|0)|0;g=(e+2|0)%(b|0)|0;if(!(dV(e,g,a,b)|0))e=f;else break}eV(c[a+(e<<2)>>2]|0,c[a+(d<<2)>>2]|0,c[a+(g<<2)>>2]|0);b=b+-1|0;while(1){if((d|0)>=(b|0))continue a;g=d+1|0;c[a+(d<<2)>>2]=c[a+(g<<2)>>2];d=g}}if((b|0)==8){a=c[15686]|0;c[h>>2]=138776;c[h+4>>2]=324;c[h+8>>2]=138921;g1(a,138757,h)|0}else if((b|0)==9)eV(c[a>>2]|0,c[a+4>>2]|0,c[a+8>>2]|0);l=i;return}function YU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=c[46743]|0;j=i+(a*52|0)|0;k=i+(b*52|0)|0;g=0;while(1){if((g|0)==3)break;l=i+(a*52|0)+4+(g<<4)|0;m=i+(a*52|0)+4+(g<<4)+4|0;n=i+(a*52|0)+4+(g<<4)+12|0;f=0;while(1){if((f|0)==3)break;o=c[c[l>>2]>>2]|0;h=c[c[i+(b*52|0)+4+(f<<4)>>2]>>2]|0;if((o|0)==(h|0)){d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;if((c[c[m>>2]>>2]|0)==(d|0))e=10;else e=8}else{d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;e=8}if(((e|0)==8?(e=0,(o|0)==(d|0)):0)?(c[c[m>>2]>>2]|0)==(h|0):0)e=10;if((e|0)==10){c[n>>2]=k;c[i+(b*52|0)+4+(f<<4)+12>>2]=j}f=f+1|0}g=g+1|0}return}function ZU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[46743]|0;d=0;e=0;while(1){if((e|0)==3)break;d=d+((WU(c[c[f+(a*52|0)+4+(e<<4)>>2]>>2]|0,c[c[f+(a*52|0)+4+(e<<4)+4>>2]>>2]|0,b)|0)!=2&1)|0;e=e+1|0}return ((d|0)==3|(d|0)==0)&1|0}function _U(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[46743]|0;e=d+(a*52|0)|0;a:do if(!(c[e>>2]|0)){c[e>>2]=1;if((a|0)==(b|0))d=1;else{f=0;while(1){if((f|0)>=3)break;e=c[d+(a*52|0)+4+(f<<4)+12>>2]|0;if(e){if(_U((e-d|0)/52|0,b)|0){d=1;break a}d=c[46743]|0}f=f+1|0}c[d+(a*52|0)>>2]=0;d=0}}else d=0;while(0);return d|0}function $U(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46744]|0)<(a|0)){b=c[46742]|0;if(!b){e=C_(a<<4)|0;c[46742]=e;if(!e){e=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=593;c[d+8>>2]=138884;g1(e,138757,d)|0;bb(186776,1)}}else{d=F_(b,a<<4)|0;c[46742]=d;if(!d){d=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=599;c[e+8>>2]=138902;g1(d,138757,e)|0;bb(186776,1)}}c[46744]=a}l=f;return}function aV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[46738]|0;e=c[46737]|0;f=(d|0)>=(e|0);if((a|0)==1)if(f){c[b+4>>2]=c[(c[46735]|0)+(e<<2)>>2];a=186948;d=-1}else{a=186948;d=-1}else if(f){c[b+4>>2]=c[(c[46735]|0)+(d<<2)>>2];a=186952;d=1}else{a=186952;d=1}f=(c[a>>2]|0)+d|0;c[a>>2]=f;c[(c[46735]|0)+(f<<2)>>2]=b;return}function bV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[46739]|0;g=c[46735]|0;b=c[46737]|0;while(1){if((b|0)>=(f|0)){e=4;break}d=b+1|0;if((WU(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==1)break;else b=d}a:do if((e|0)==4){b=c[46738]|0;while(1){if((b|0)<=(f|0)){b=f;break a}d=b+-1|0;if((WU(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==2)break;else b=d}}while(0);return b|0}function cV(a,b){a=a|0;b=b|0;c[((a|0)==1?186952:186948)>>2]=b;return}function dV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[c[d+(((a+-1+e|0)%(e|0)|0)<<2)>>2]>>2]|0;i=c[c[d+(a<<2)>>2]>>2]|0;g=c[c[d+(((a+1|0)%(e|0)|0)<<2)>>2]>>2]|0;k=(WU(f,i,g)|0)==1;j=c[c[d+(b<<2)>>2]>>2]|0;if(k)if((WU(i,j,f)|0)==1){f=WU(j,i,g)|0;g=1;h=5}else f=0;else{f=WU(i,j,g)|0;g=2;h=5}a:do if((h|0)==5)if((f|0)==(g|0)){f=0;while(1){if((f|0)>=(e|0)){f=1;break a}g=f;f=f+1|0;h=(f|0)%(e|0)|0;if((h|0)==(b|0)|((g|0)==(b|0)|((g|0)==(a|0)|(h|0)==(a|0))))continue;if(gV(i,j,c[c[d+(g<<2)>>2]>>2]|0,c[c[d+(h<<2)>>2]>>2]|0)|0){f=0;break}}}else f=0;while(0);return f|0}function eV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[46734]|0;f=c[46745]|0;if((e|0)<(f|0))h=e;else{fV(f+20|0);h=c[46734]|0}g=c[46743]|0;c[46734]=h+1;f=g+(h*52|0)|0;c[f>>2]=0;c[g+(h*52|0)+4>>2]=a;c[g+(h*52|0)+8>>2]=b;c[g+(h*52|0)+16>>2]=0;c[g+(h*52|0)+20>>2]=b;c[g+(h*52|0)+24>>2]=d;c[g+(h*52|0)+32>>2]=0;c[g+(h*52|0)+36>>2]=d;c[g+(h*52|0)+40>>2]=a;c[g+(h*52|0)+48>>2]=0;e=0;while(1){if((e|0)==3)break;c[g+(h*52|0)+4+(e<<4)+8>>2]=f;e=e+1|0}return}function fV(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46745]|0)<(a|0)){b=c[46743]|0;if(!b){e=C_(a*52|0)|0;c[46743]=e;if(!e){e=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=552;c[d+8>>2]=138942;g1(e,138757,d)|0;bb(186776,1)}}else{d=F_(b,a*52|0)|0;c[46743]=d;if(!d){d=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=558;c[e+8>>2]=138961;g1(d,138757,e)|0;bb(186776,1)}}c[46745]=a}l=f;return}function gV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=WU(a,b,c)|0;if((((f|0)!=3?(g=WU(a,b,d)|0,(g|0)!=3):0)?(h=WU(c,d,a)|0,(h|0)!=3):0)?(e=WU(c,d,b)|0,(e|0)!=3):0)return ((f|0)==1^(g|0)==1)&((h|0)==1^(e|0)==1)&1|0;if(((hV(a,b,c)|0)==0?(hV(a,b,d)|0)==0:0)?(hV(c,d,a)|0)==0:0)return (hV(c,d,b)|0)!=0|0;return 1}function hV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;e=+h[a>>3];g=+h[b>>3]-e;f=+h[a+8>>3];d=+h[b+8>>3]-f;e=+h[c>>3]-e;f=+h[c+8>>3]-f;if((WU(a,b,c)|0)==3?f*d+e*g>=0.0:0)a=f*f+e*e<=d*d+g*g&1;else a=0;return a|0}function iV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;m=C_(d<<2)|0;n=C_((d<<3)+8|0)|0;o=n+8|0;f=0;while(1){if((f|0)>=(d|0))break;c[m+(f<<2)>>2]=-1;h[o+(f<<3)>>3]=-2147483647.0;f=f+1|0}h[n>>3]=-2147483648.0;a:while(1){if((a|0)==(b|0))break;l=o+(a<<3)|0;j=+h[l>>3];h[l>>3]=j==-2147483647.0?0.0:-j;k=0;f=-1;while(1){if((k|0)>=(d|0)){a=f;continue a}i=o+(k<<3)|0;g=+h[i>>3];if(g<0.0){q=(a|0)<(k|0);p=+h[(c[e+((q?k:a)<<2)>>2]|0)+((q?a:k)<<3)>>3];j=-(p+ +h[l>>3]);if(p!=0.0&g>3]=j;c[m+(k<<2)>>2]=a;g=j}f=g>+h[o+(f<<3)>>3]?k:f}k=k+1|0}}D_(n);return m|0}function jV(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;j=l;l=l+32|0;k=j+16|0;m=j;i=c[h+4>>2]|0;c[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];if(!(CV(m,b,k,f,h)|0)){a=c[h+24>>2]|0;c[a+(i<<2)>>2]=g;m=i+1|0;c[a+(m<<2)>>2]=d;a=iV(m,i,i+2|0,a)|0}else{a=C_((i<<2)+8|0)|0;m=i+1|0;c[a+(i<<2)>>2]=m;c[a+(m<<2)>>2]=-1}l=j;return a|0}function kV(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;d=+h[a+24>>3];a:do if(d<1.0e-07&d>-1.0e-07)a=lV(a,b)|0;else{g=+h[a+16>>3]/(d*3.0);f=+h[a+8>>3]/d;e=g*g;d=g*2.0*e-g*f+ +h[a>>3]/d;e=f*.3333333333333333-e;e=e*e*4.0*e;f=d*d+e;if(!(f<0.0)){i=(+C(+f)-d)*.5;e=+n$(i);d=+n$(-d-i)+e;h[b>>3]=d;if(f>0.0)a=1;else{d=d*-.5;h[b+16>>3]=d;a=1;c=7}}else{i=+K(+(+C(+-f)),+-d);d=+n$(+C(+-e)*.5)*2.0;h[b>>3]=d*+E(+(i*.3333333333333333));h[b+8>>3]=+E(+((i+6.283185307179586)*.3333333333333333))*d;d=+E(+((i+-6.283185307179586)*.3333333333333333))*d;a=2;c=7}if((c|0)==7){h[b+(a<<3)>>3]=d;a=3}c=0;while(1){if((c|0)>=(a|0))break a;j=b+(c<<3)|0;h[j>>3]=+h[j>>3]-g;c=c+1|0}}while(0);return a|0}function lV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+16>>3];do if(!(c<1.0e-07&c>-1.0e-07)){d=+h[a+8>>3]/(c*2.0);c=d*d-+h[a>>3]/c;if(!(c<0.0))if(c==0.0){h[b>>3]=-d;a=1;break}else{c=+C(+c)-d;h[b>>3]=c;h[b+8>>3]=d*-2.0-c;a=2;break}else a=0}else a=mV(a,b)|0;while(0);return a|0}function mV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a+8>>3];c=+h[a>>3];if(d<1.0e-07&d>-1.0e-07)a=c<1.0e-07&c>-1.0e-07?4:0;else{h[b>>3]=-c/d;a=1}return a|0}function nV(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function oV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=c[a+4>>2]|0;i=(e*3|0)+-2|0;d=c[46748]|0;if((i|0)>(c[46747]|0)){if(!d)d=C_(i<<4)|0;else d=F_(d,i<<4)|0;c[46748]=d;c[46747]=i;h=d;g=d}else{h=d;g=d}f=c[a>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];G3(h+16|0,f|0,16)|0;e=e+-1|0;d=1;a=2;while(1){if((d|0)>=(e|0))break;j=h+(a+2<<4)|0;k=h+(a+1<<4)|0;m=h+(a<<4)|0;l=f+(d<<4)|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];G3(k|0,l|0,16)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];d=d+1|0;a=a+3|0}l=h+(a<<4)|0;m=f+(d<<4)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];G3(h+(a+1<<4)|0,m|0,16)|0;c[b+4>>2]=i;c[b>>2]=g;return}function pV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>.0001?1:(d<-.0001)<<31>>31)|0}function qV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[a>>3];f=+h[b>>3];if(e!=f){d=+h[c>>3];if(!(e>3];e=+h[c+8>>3];d=+h[b+8>>3];if(!(f>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];j=pV(g,h,i)|0;if((j|0)==0?(c[g>>2]=c[a>>2],c[g+4>>2]=c[a+4>>2],c[g+8>>2]=c[a+8>>2],c[g+12>>2]=c[a+12>>2],c[h>>2]=c[b>>2],c[h+4>>2]=c[b+4>>2],c[h+8>>2]=c[b+8>>2],c[h+12>>2]=c[b+12>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],(qV(g,h,i)|0)!=0):0)f=1;else k=3;do if((k|0)==3){c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];f=pV(g,h,i)|0;if((f|0)==0?(c[g>>2]=c[a>>2],c[g+4>>2]=c[a+4>>2],c[g+8>>2]=c[a+8>>2],c[g+12>>2]=c[a+12>>2],c[h>>2]=c[b>>2],c[h+4>>2]=c[b+4>>2],c[h+8>>2]=c[b+8>>2],c[h+12>>2]=c[b+12>>2],c[i>>2]=c[e>>2],c[i+4>>2]=c[e+4>>2],c[i+8>>2]=c[e+8>>2],c[i+12>>2]=c[e+12>>2],qV(g,h,i)|0):0){f=1;break};c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[i+12>>2]=c[a+12>>2];a=pV(g,h,i)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];k=(O(f,j)|0)<0;f=(O(pV(g,h,i)|0,a)|0)>>>31;f=k?f:0}while(0);l=m;return f|0}function sV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(d*d+c*c)}function tV(a){a=a|0;c[a+24>>2]=uV(c[a+4>>2]|0)|0;vV(a);return}function uV(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+2|0;f=C_(e<<2)|0;b=E_(O(a,a)|0,8)|0;d=0;while(1){if((d|0)>=(a|0))break;c[f+(d<<2)>>2]=b;b=b+(a<<3)|0;d=d+1|0}while(1){if((a|0)>=(e|0))break;c[f+(a<<2)>>2]=0;a=a+1|0}return f|0}function vV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;p=l;l=l+32|0;i=p+16|0;g=p;j=c[a+4>>2]|0;m=c[a+8>>2]|0;n=c[a+16>>2]|0;o=c[a+20>>2]|0;d=c[a+24>>2]|0;b=0;while(1){if((b|0)>=(j|0))break;q=c[o+(b<<2)>>2]|0;e=m+(b<<4)|0;f=m+(q<<4)|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];r=+wV(g,i);f=c[d+(b<<2)>>2]|0;h[f+(q<<3)>>3]=r;h[(c[d+(q<<2)>>2]|0)+(b<<3)>>3]=r;a=b+-1|0;a=(q|0)==(a|0)?b+-2|0:a;while(1){if((a|0)<=-1)break;if((xV(b,a,m,n,o)|0?xV(a,b,m,n,o)|0:0)?(k=m+(a<<4)|0,c[g>>2]=c[e>>2],c[g+4>>2]=c[e+4>>2],c[g+8>>2]=c[e+8>>2],c[g+12>>2]=c[e+12>>2],c[i>>2]=c[k>>2],c[i+4>>2]=c[k+4>>2],c[i+8>>2]=c[k+8>>2],c[i+12>>2]=c[k+12>>2],yV(g,i,j,j,j,m,n)|0):0){c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];r=+wV(g,i);h[f+(a<<3)>>3]=r;h[(c[d+(a<<2)>>2]|0)+(b<<3)>>3]=r}a=a+-1|0}b=b+1|0}l=p;return}function wV(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0;e=l;l=l+32|0;f=e+16|0;g=e;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];d=+C(+(+sV(g,f)));l=e;return +d}function xV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;h=g+48|0;i=g+32|0;j=g+16|0;k=g;n=d+(c[f+(a<<2)>>2]<<4)|0;m=d+(a<<4)|0;e=d+(c[e+(a<<2)>>2]<<4)|0;f=d+(b<<4)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];f=zV(k,j,i,h)|0;l=g;return f|0}function yV(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+64|0;n=p+48|0;m=p+32|0;k=p+16|0;j=p;i=0;while(1){if((i|0)>=(d|0)){o=4;break}r=g+(i<<4)|0;q=g+(c[h+(i<<2)>>2]<<4)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[m>>2]=c[r>>2];c[m+4>>2]=c[r+4>>2];c[m+8>>2]=c[r+8>>2];c[m+12>>2]=c[r+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];if(!(rV(j,k,m,n)|0))i=i+1|0;else{e=0;break}}a:do if((o|0)==4)while(1){if((e|0)>=(f|0)){e=1;break a}q=g+(e<<4)|0;r=g+(c[h+(e<<2)>>2]<<4)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];c[n>>2]=c[r>>2];c[n+4>>2]=c[r+4>>2];c[n+8>>2]=c[r+8>>2];c[n+12>>2]=c[r+12>>2];if(!(rV(j,k,m,n)|0)){e=e+1|0;o=4}else{e=0;break}}while(0);l=p;return e|0}function zV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=l;l=l+48|0;h=g+32|0;i=g+16|0;j=g;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[i+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];f=pV(j,i,h)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];e=pV(j,i,h)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];d=(pV(j,i,h)|0)>0;l=g;return (d?e|f:e&f)>>>31^1|0}function AV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=l;l=l+80|0;j=s+64|0;i=s+48|0;g=s+32|0;k=s+16|0;o=s;p=c[a+4>>2]|0;q=c[a+8>>2]|0;r=c[a+16>>2]|0;m=c[a+20>>2]|0;n=C_((p<<3)+16|0)|0;if((b|0)==-2222){c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];b=BV(a,j)|0}if((b|0)>-1){a=c[a+12>>2]|0;f=c[a+(b+1<<2)>>2]|0;a=c[a+(b<<2)>>2]|0}else{f=p;a=p}b=0;while(1){if((b|0)>=(a|0)){b=a;break}u=q+(b<<4)|0;c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];c[o+8>>2]=c[u+8>>2];c[o+12>>2]=c[u+12>>2];u=q+(c[m+(b<<2)>>2]<<4)|0;t=q+(c[r+(b<<2)>>2]<<4)|0;c[k>>2]=c[u>>2];c[k+4>>2]=c[u+4>>2];c[k+8>>2]=c[u+8>>2];c[k+12>>2]=c[u+12>>2];c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];if((zV(k,g,i,j)|0)!=0?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[j>>2]=c[o>>2],c[j+4>>2]=c[o+4>>2],c[j+8>>2]=c[o+8>>2],c[j+12>>2]=c[o+12>>2],(yV(i,j,a,f,p,q,r)|0)!=0):0){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];e=+wV(i,j)}else e=0.0;h[n+(b<<3)>>3]=e;b=b+1|0}while(1){if((b|0)>=(f|0)){b=f;break}h[n+(b<<3)>>3]=0.0;b=b+1|0}while(1){if((b|0)>=(p|0))break;t=q+(b<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=q+(c[m+(b<<2)>>2]<<4)|0;u=q+(c[r+(b<<2)>>2]<<4)|0;c[k>>2]=c[t>>2];c[k+4>>2]=c[t+4>>2];c[k+8>>2]=c[t+8>>2];c[k+12>>2]=c[t+12>>2];c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];if((zV(k,g,i,j)|0)!=0?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[j>>2]=c[o>>2],c[j+4>>2]=c[o+4>>2],c[j+8>>2]=c[o+8>>2],c[j+12>>2]=c[o+12>>2],(yV(i,j,a,f,p,q,r)|0)!=0):0){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];e=+wV(i,j)}else e=0.0;h[n+(b<<3)>>3]=e;b=b+1|0}h[n+(p<<3)>>3]=0.0;h[n+(p+1<<3)>>3]=0.0;l=s;return n|0}function BV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;f=m+8|0;e=m;h=m+24|0;i=a+8|0;j=a+12|0;k=h+4|0;d=0;while(1){if((d|0)>=(c[a>>2]|0)){d=-1111;break}o=c[j>>2]|0;n=c[o+(d<<2)>>2]|0;c[h>>2]=(c[i>>2]|0)+(n<<4);g=d+1|0;c[k>>2]=(c[o+(g<<2)>>2]|0)-n;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];if(!(wU(e,f)|0))d=g;else break}l=m;return d|0}function CV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+64|0;n=t+48|0;m=t+32|0;p=t+16|0;o=t;r=c[f+4>>2]|0;s=c[f+8>>2]|0;q=c[f+16>>2]|0;g=(e|0)<0;do if((b|0)<0)if(g){g=0;i=0;f=0;h=0}else{b=c[f+12>>2]|0;f=0;h=0;i=e;j=b;b=b+(e<<2)|0;k=9}else{if(g){k=c[f+12>>2]|0;f=0;h=0;i=b;j=k;b=k+(b<<2)|0;k=9;break}g=c[f+12>>2]|0;if((b|0)>(e|0)){f=c[g+(e+1<<2)>>2]|0;h=c[g+(e<<2)>>2]|0;i=b;j=g;b=g+(b<<2)|0;k=9;break}else{f=c[g+(b+1<<2)>>2]|0;h=c[g+(b<<2)>>2]|0;i=e;j=g;b=g+(e<<2)|0;k=9;break}}while(0);if((k|0)==9){g=c[j+(i+1<<2)>>2]|0;i=c[b>>2]|0}b=0;while(1){if((b|0)>=(h|0)){k=13;break}j=s+(b<<4)|0;e=s+(c[q+(b<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];if(!(rV(o,p,m,n)|0))b=b+1|0;else{g=0;break}}a:do if((k|0)==13){while(1){if((f|0)>=(i|0))break;e=s+(f<<4)|0;k=s+(c[q+(f<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];if(!(rV(o,p,m,n)|0)){f=f+1|0;k=13}else{g=0;break a}}while(1){if((g|0)>=(r|0)){g=1;break a}e=s+(g<<4)|0;k=s+(c[q+(g<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];if(!(rV(o,p,m,n)|0))g=g+1|0;else{g=0;break}}}while(0);l=t;return g|0}function DV(a){a=a|0;return EV(a,0,0)|0}function EV(a,b,c){a=a|0;b=b|0;c=c|0;return FV(a,b,c,0)|0}function FV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if(!d){g=C_(496)|0;if(!g)g=0;else{c[g+12>>2]=35;c[g+16>>2]=105;c[g+20>>2]=103;d=35;h=6}}else{g=kb[c[d>>2]&63](496)|0;if(!g)g=0;else{h=c[d>>2]|0;c[g+12>>2]=h;c[g+16>>2]=c[d+4>>2];c[g+20>>2]=c[d+8>>2];d=h;h=6}}do if((h|0)==6){c[g+8>>2]=0;c[g+32>>2]=0;c[g+376>>2]=16;j=g+12|0;i=kb[d&63](256)|0;d=g+388|0;c[d>>2]=i;if(!i){tb[c[g+20>>2]&127](g);g=0;break}h=kb[c[j>>2]&63](1024)|0;i=g+44|0;c[i>>2]=h;if(!h){e=g+20|0;tb[c[e>>2]&127](c[d>>2]|0);tb[c[e>>2]&127](g);g=0;break}c[g+48>>2]=h+1024;if(!f){f=GV(j)|0;c[g+352>>2]=f;if(!f){e=g+20|0;tb[c[e>>2]&127](c[i>>2]|0);tb[c[e>>2]&127](c[d>>2]|0);tb[c[e>>2]&127](g);g=0;break}}else c[g+352>>2]=f;c[g+372>>2]=0;c[g+364>>2]=0;c[g+300>>2]=0;c[g+464>>2]=0;c[g+460>>2]=0;c[g+124>>2]=0;c[g+244>>2]=0;d=g+468|0;a[d>>0]=33;h=g+232|0;a[h>>0]=0;a[g+233>>0]=0;c[g+392>>2]=0;c[g+396>>2]=0;a[g+400>>0]=0;f=g+228|0;c[f>>2]=0;HV(g+412|0,j);HV(g+436|0,j);IV(g,b);if(b|0?(c[f>>2]|0)==0:0){JV(g);g=0;break}if(!e){c[g+224>>2]=TX()|0;break}else{a[h>>0]=1;c[g+224>>2]=xZ()|0;a[d>>0]=a[e>>0]|0;break}}while(0);return g|0}function GV(b){b=b|0;var d=0;d=kb[c[b>>2]&63](188)|0;if(d|0){HV(d+80|0,b);HV(d+104|0,b);QW(d,b);QW(d+20|0,b);QW(d+40|0,b);QW(d+60|0,b);a[d+131>>0]=0;QW(d+132|0,b);c[d+152>>2]=0;c[d+156>>2]=0;a[d+160>>0]=0;b=d+164|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;a[d+128>>0]=1;a[d+129>>0]=0;a[d+130>>0]=0}return d|0}function HV(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=b;return}function IV(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;c[d+276>>2]=56;EZ(d+252|0);if(e|0)c[d+228>>2]=RV(e,d+12|0)|0;c[d+356>>2]=0;HY(d+148|0,d+144|0,0)|0;c[d>>2]=0;c[d+4>>2]=0;e=d+116|0;g=d+52|0;h=g+64|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=d;c[d+120>>2]=0;e=d+128|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;e=c[d+8>>2]|0;c[d+24>>2]=e;c[d+28>>2]=e;c[d+36>>2]=0;c[d+40>>2]=0;e=d+312|0;g=d+404|0;c[g>>2]=0;c[g+4>>2]=0;g=d+280|0;f=d+304|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;g=e;h=g+36|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));b[e+36>>1]=0;a[f>>0]=1;c[d+308>>2]=0;c[d+360>>2]=0;c[d+368>>2]=0;c[d+380>>2]=0;c[d+236>>2]=0;c[d+248>>2]=0;c[d+240>>2]=0;c[d+472>>2]=0;c[d+476>>2]=0;a[d+484>>0]=0;a[d+485>>0]=0;c[d+488>>2]=0;c[d+492>>2]=0;return}function JV(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(b|0){e=b+364|0;g=b+20|0;d=c[b+360>>2]|0;while(1){if(!d){d=c[e>>2]|0;if(!d)break;c[e>>2]=0}h=c[d>>2]|0;tb[c[g>>2]&127](c[d+36>>2]|0);KV(c[d+44>>2]|0,b);tb[c[g>>2]&127](d);d=h}e=b+300|0;d=c[b+296>>2]|0;while(1){if(!d){d=c[e>>2]|0;if(!d)break;c[e>>2]=0}h=c[d+8>>2]|0;tb[c[g>>2]&127](d);d=h}KV(c[b+372>>2]|0,b);KV(c[b+368>>2]|0,b);LV(b+412|0);LV(b+436|0);d=b+12|0;tb[c[g>>2]&127](c[b+228>>2]|0);if((a[b+484>>0]|0)==0?(f=c[b+352>>2]|0,f|0):0)MV(f,(c[b+472>>2]|0)==0&1,d);tb[c[g>>2]&127](c[b+388>>2]|0);tb[c[g>>2]&127](c[b+460>>2]|0);tb[c[g>>2]&127](c[b+8>>2]|0);tb[c[g>>2]&127](c[b+44>>2]|0);tb[c[g>>2]&127](c[b+392>>2]|0);tb[c[g>>2]&127](c[b+236>>2]|0);d=c[b+248>>2]|0;if(d|0)tb[d&127](c[b+240>>2]|0);tb[c[g>>2]&127](b)}return}function KV(a,b){a=a|0;b=b|0;var d=0;b=b+20|0;while(1){if(!a)break;d=c[a+4>>2]|0;tb[c[b>>2]&127](c[a+16>>2]|0);tb[c[b>>2]&127](a);a=d}return}function LV(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;b=c[a>>2]|0;while(1){if(!b)break;e=c[b>>2]|0;tb[c[(c[d>>2]|0)+8>>2]&127](b);b=e}b=c[a+4>>2]|0;while(1){if(!b)break;e=c[b>>2]|0;tb[c[(c[d>>2]|0)+8>>2]&127](b);b=e}return}function MV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=a+20|0;NV(f,g);d=d+8|0;while(1){e=OV(f)|0;if(!e)break;if(!(c[e+16>>2]|0))continue;tb[c[d>>2]&127](c[e+20>>2]|0)}PV(a);PV(a+132|0);PV(g);PV(a+40|0);PV(a+60|0);LV(a+80|0);LV(a+104|0);if(b<<24>>24){tb[c[d>>2]&127](c[a+184>>2]|0);tb[c[d>>2]&127](c[a+164>>2]|0)}tb[c[d>>2]&127](a);l=h;return}function NV(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=d;c[a+4>>2]=d+(c[b+8>>2]<<2);return}function OV(a){a=a|0;var b=0,d=0,e=0;d=c[a+4>>2]|0;e=c[a>>2]|0;do{if((e|0)==(d|0)){b=0;break}b=e;e=e+4|0;c[a>>2]=e;b=c[b>>2]|0}while(!(b|0));return b|0}function PV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=a+8|0;e=a+16|0;b=0;while(1){f=c[(c[e>>2]|0)+8>>2]|0;g=c[a>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0)break;tb[f&127](c[g+(b<<2)>>2]|0);b=b+1|0}tb[f&127](g);return}function QV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=SV(a)|0;if(!f){c[a+276>>2]=57;f=TV(a,b,d,e)|0}return f|0}function RV(b,d){b=b|0;d=d|0;var e=0,f=0;e=0;do{f=e;e=e+1|0}while((a[b+f>>0]|0)!=0);d=kb[c[d>>2]&63](e)|0;if(!d)d=0;else F3(d|0,b|0,e|0)|0;return d|0}function SV(b){b=b|0;var d=0;d=b+228|0;if(!(nb[(a[b+232>>0]<<24>>24?35:34)&63](b+148|0,b+144|0,c[d>>2]|0)|0))b=PW(b,c[d>>2]|0)|0;else b=0;return b|0}function TV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g;c[h>>2]=d;j=b+144|0;i=c[j>>2]|0;i=ob[c[i>>2]&127](i,d,e,h)|0;f=UV(b,c[j>>2]|0,d,e,i,c[h>>2]|0,f,(a[b+480>>0]|0)==0&1)|0;l=g;return f|0}function UV(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=l;l=l+16|0;Da=Ga;c[Da>>2]=i;r=c[b+352>>2]|0;s=b+144|0;if((c[s>>2]|0)==(e|0)){p=b+284|0;q=b+288|0;na=b+296|0}else{na=b+296|0;q=c[na>>2]|0;p=q;q=q+4|0}t=k<<24>>24!=0;pa=b+252|0;u=b+80|0;v=b+476|0;w=b+84|0;x=b+320|0;y=b+412|0;z=b+316|0;A=b+424|0;B=b+428|0;C=b+324|0;ra=b+4|0;D=b+485|0;E=r+132|0;F=b+312|0;ta=r+129|0;G=r+128|0;H=r+80|0;I=r+92|0;J=r+96|0;K=b+136|0;L=b+88|0;M=b+488|0;va=b+112|0;wa=r+131|0;xa=b+116|0;ya=r+130|0;za=b+108|0;Aa=b+356|0;N=b+340|0;O=b+132|0;P=b+344|0;Q=b+348|0;R=b+328|0;S=b+349|0;T=b+420|0;U=r+120|0;V=r+116|0;W=b+92|0;X=b+472|0;Y=b+336|0;Z=b+332|0;_=b+96|0;$=b+256|0;aa=b+464|0;ba=b+460|0;ca=r+160|0;da=r+184|0;ea=r+180|0;fa=r+164|0;ga=b+128|0;ha=b+12|0;ia=b+16|0;ja=b+268|0;ka=b+120|0;la=r+176|0;ma=r+168|0;o=e;n=f;e=h;a:while(1){c[p>>2]=n;f=c[Da>>2]|0;c[q>>2]=f;i=f;b:do if((e|0)<1){if(t&(e|0)!=0){m=7;break a}switch(e|0){case -1:{i=5;m=280;break a}case 0:{m=9;break a}case -2:{i=6;break a}case -4:{m=10;break a}case -15:{e=15;break b}default:{}}c[Da>>2]=g;e=0-e|0;i=g}while(0);h=pb[c[pa>>2]&127](pa,e,n,i,o)|0;c:do switch(h|0){case 2:{m=58;break a}case -1:{m=184;break a}case 1:{i=VV(b,0,n,c[Da>>2]|0)|0;if(i|0){m=280;break a}i=c[s>>2]|0;break}case 4:{if(!(c[w>>2]|0))i=1;else{m=WV(y,o,n,c[Da>>2]|0)|0;c[z>>2]=m;if(!m){i=1;m=280;break a}c[B>>2]=c[A>>2];c[C>>2]=0;i=0}c[x>>2]=0;m=274;break}case 7:{i=c[w>>2]|0;if(!i)m=275;else{yb[i&15](c[ra>>2]|0,c[z>>2]|0,c[x>>2]|0,c[C>>2]|0,1);c[z>>2]=0;XV(y);i=o}break}case 57:{i=VV(b,1,n,c[Da>>2]|0)|0;if(i|0){m=280;break a}i=c[s>>2]|0;break}case 6:{a[D>>0]=0;m=YV(b,E,75291,36)|0;c[F>>2]=m;if(!m){i=1;m=280;break a}a[ta>>0]=1;if(!(c[w>>2]|0))m=33;else{if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break a}i=c[o+64>>2]|0;i=WV(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}ZV(i);c[B>>2]=c[A>>2];c[C>>2]=i;i=0;m=34}break}case 14:{m=33;break}case 8:{i=c[z>>2]|0;if(!i)i=1;else{yb[c[w>>2]&15](c[ra>>2]|0,i,c[x>>2]|0,c[C>>2]|0,0);XV(y);i=0}if(!((c[x>>2]|0)==0?!(a[D>>0]|0):0)){f=a[ta>>0]|0;a[ta>>0]=1;do if(c[M>>2]|0?c[va>>2]|0:0){h=YV(b,E,75291,36)|0;if(!h){i=1;m=280;break a}if(!(a[D>>0]|0))e=h+20|0;else{e=h+20|0;c[e>>2]=c[Aa>>2]}a[wa>>0]=0;if(!(pb[c[va>>2]&127](c[xa>>2]|0,0,c[e>>2]|0,c[h+16>>2]|0,c[h+24>>2]|0)|0)){i=21;m=280;break a}if(!(a[wa>>0]|0)){if(c[x>>2]|0)break;a[ta>>0]=f;break}if(((a[ya>>0]|0)==0?(oa=c[za>>2]|0,oa|0):0)?(kb[oa&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}}while(0);a[D>>0]=0}e=c[L>>2]|0;if(!e)m=274;else{tb[e&127](c[ra>>2]|0);i=o}break}case 34:{m=$V(b,o,n,c[Da>>2]|0)|0;c[N>>2]=m;if(!m){i=1;m=280;break a}else m=80;break}case 22:{m=aW(b,o,n,c[Da>>2]|0)|0;c[P>>2]=m;if(!m){i=1;m=280;break a}a[Q>>0]=0;c[R>>2]=0;a[S>>0]=0;m=80;break}case 23:{a[Q>>0]=1;c[R>>2]=139106;m=80;break}case 24:{a[S>>0]=1;c[R>>2]=139112;m=80;break}case 25:{c[R>>2]=139115;m=80;break}case 26:{c[R>>2]=139121;m=80;break}case 27:{c[R>>2]=139128;m=80;break}case 28:{c[R>>2]=139135;m=80;break}case 29:{c[R>>2]=139144;m=80;break}case 30:{c[R>>2]=139152;m=80;break}case 32:case 31:{if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0){if(!(bW(y,(c[R>>2]|0)==0?((h|0)==32?139161:139171):139173)|0)){i=1;m=280;break a}if(!(cW(y,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}c[R>>2]=c[B>>2];i=o}else m=275;break}case 36:case 35:{if(a[G>>0]|0){if(!(dW(c[N>>2]|0,c[P>>2]|0,a[Q>>0]|0,a[S>>0]|0,0,b)|0)){i=1;m=280;break a}if((c[O>>2]|0)!=0?(qa=c[R>>2]|0,(qa|0)!=0):0){switch(a[qa>>0]|0){case 40:{m=93;break}case 78:{if((a[qa+1>>0]|0)==79)m=93;break}default:{}}if((m|0)==93){m=0;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=41;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=0;c[R>>2]=c[B>>2];c[B>>2]=c[A>>2]}c[q>>2]=n;zb[c[O>>2]&15](c[ra>>2]|0,c[c[N>>2]>>2]|0,c[c[P>>2]>>2]|0,c[R>>2]|0,0,(h|0)==36&1);XV(y);i=o}else m=275}else m=275;break}case 38:case 37:{if(a[G>>0]|0){i=c[o+64>>2]|0;i=fW(b,o,a[Q>>0]|0,n+i|0,(c[Da>>2]|0)+(0-i)|0,H)|0;if(i|0){m=280;break a}e=c[J>>2]|0;c[J>>2]=c[I>>2];if(!(dW(c[N>>2]|0,c[P>>2]|0,a[Q>>0]|0,0,e,b)|0)){i=1;m=280;break a}if((c[O>>2]|0)!=0?(sa=c[R>>2]|0,(sa|0)!=0):0){switch(a[sa>>0]|0){case 40:{m=108;break}case 78:{if((a[sa+1>>0]|0)==79)m=108;break}default:{}}if((m|0)==108){m=0;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=41;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=0;c[R>>2]=c[B>>2];c[B>>2]=c[A>>2]}c[q>>2]=n;zb[c[O>>2]&15](c[ra>>2]|0,c[c[N>>2]>>2]|0,c[c[P>>2]>>2]|0,c[R>>2]|0,e,(h|0)==38&1);XV(y);i=o}else m=275}else m=275;break}case 12:{if(a[G>>0]|0){i=c[o+64>>2]|0;i=gW(b,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;e=c[F>>2]|0;f=c[U>>2]|0;if(e){c[e+4>>2]=f;c[(c[F>>2]|0)+8>>2]=(c[V>>2]|0)-(c[U>>2]|0);c[U>>2]=c[V>>2];if(!(c[K>>2]|0))e=1;else{c[q>>2]=n;e=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[e>>2]|0,d[e+33>>0]|0,c[e+4>>2]|0,c[e+8>>2]|0,c[Aa>>2]|0,0,0,0);e=0}}else{c[V>>2]=f;e=1}if(!i){i=e;m=274}else{m=280;break a}}else m=275;break}case 5:{a[D>>0]=0;a[ta>>0]=1;if(!(c[w>>2]|0)){c[x>>2]=75291;i=1}else{m=c[o+64>>2]|0;m=WV(y,o,n+m|0,(c[Da>>2]|0)+(0-m)|0)|0;c[x>>2]=m;if(!m){i=1;m=280;break a}c[B>>2]=c[A>>2];i=0}if((((a[ya>>0]|0)==0?(c[M>>2]|0)==0:0)?(ua=c[za>>2]|0,ua|0):0)?(kb[ua&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}if(!(c[F>>2]|0)){e=YV(b,E,75291,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}c[e+24>>2]=0;m=133}else m=133;break}case 13:{i=1;m=133;break}case 15:{if(((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0)?(c[K>>2]|0)!=0:0){c[q>>2]=n;i=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[i>>2]|0,d[i+33>>0]|0,0,0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,0);i=o}else m=275;break}case 16:{if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){h=WV(H,o,n,c[Da>>2]|0)|0;c[(c[F>>2]|0)+28>>2]=h;if(!(c[(c[F>>2]|0)+28>>2]|0)){i=1;m=280;break a}c[J>>2]=c[I>>2];if(c[W>>2]|0){c[q>>2]=n;i=c[F>>2]|0;zb[c[W>>2]&15](c[ra>>2]|0,c[i>>2]|0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,c[i+28>>2]|0);i=o;break c}if(c[K>>2]|0){c[q>>2]=n;i=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[i>>2]|0,0,0,0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,c[i+28>>2]|0);i=o}else m=275}else m=275;break}case 9:{if(nb[c[o+44>>2]&63](o,n,c[Da>>2]|0)|0){c[F>>2]=0;m=275;break c}if(!(a[G>>0]|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}i=WV(H,o,n,c[Da>>2]|0)|0;if(!i){i=1;m=280;break a}e=YV(b,r,i,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}if((c[e>>2]|0)!=(i|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}c[J>>2]=c[I>>2];c[(c[F>>2]|0)+24>>2]=0;a[(c[F>>2]|0)+33>>0]=0;if(!(c[X>>2]|0))i=(c[na>>2]|0)!=0;else i=1;a[(c[F>>2]|0)+34>>0]=(i^1)&1;if(!(c[K>>2]|0))m=275;else i=o;break}case 10:{if(!(a[G>>0]|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}i=WV(H,o,n,c[Da>>2]|0)|0;if(!i){i=1;m=280;break a}e=YV(b,E,i,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}if((c[e>>2]|0)!=(i|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}c[J>>2]=c[I>>2];c[(c[F>>2]|0)+24>>2]=0;a[(c[F>>2]|0)+33>>0]=1;if(!(c[X>>2]|0))i=(c[na>>2]|0)!=0;else i=1;a[(c[F>>2]|0)+34>>0]=(i^1)&1;if(!(c[K>>2]|0))m=275;else i=o;break}case 18:{c[Y>>2]=0;c[Z>>2]=0;if(!(c[_>>2]|0))m=275;else{n=WV(y,o,n,c[Da>>2]|0)|0;c[Z>>2]=n;if(!n){i=1;m=280;break a}c[B>>2]=c[A>>2];i=o}break}case 21:{if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break a}if(!(c[Z>>2]|0))m=275;else{i=c[o+64>>2]|0;i=WV(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}ZV(i);c[Y>>2]=i;c[B>>2]=c[A>>2];i=o}break}case 19:{if((c[Z>>2]|0)!=0?(c[_>>2]|0)!=0:0){i=c[o+64>>2]|0;i=WV(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}c[q>>2]=n;yb[c[_>>2]&15](c[ra>>2]|0,c[Z>>2]|0,c[Aa>>2]|0,i,c[Y>>2]|0);i=0}else i=1;XV(y);m=274;break}case 20:{if((c[Y>>2]|0)!=0?(c[_>>2]|0)!=0:0){c[q>>2]=n;yb[c[_>>2]&15](c[ra>>2]|0,c[Z>>2]|0,c[Aa>>2]|0,0,c[Y>>2]|0);i=0}else i=1;XV(y);m=274;break}case 58:{if(c[u>>2]|0)hW(b,o,n,c[Da>>2]|0);i=iW(b,o,Da,g,j,k)|0;if(i|0){m=280;break a}if(!(c[Da>>2]|0)){m=189;break a}else i=o;break}case 44:{i=c[aa>>2]|0;do if((c[$>>2]|0)>>>0>=i>>>0){if(!i){h=c[ha>>2]|0;c[aa>>2]=32;h=kb[h&63](32)|0;c[ba>>2]=h;if(!h){m=198;break a}else break}f=c[ia>>2]|0;h=c[ba>>2]|0;i=i<<1;c[aa>>2]=i;i=lb[f&127](h,i)|0;if(!i){m=193;break a}c[ba>>2]=i;i=c[da>>2]|0;if(i|0){i=lb[c[ia>>2]&127](i,c[aa>>2]<<2)|0;if(!i){i=1;m=280;break a}c[da>>2]=i}}while(0);a[(c[ba>>2]|0)+(c[$>>2]|0)>>0]=0;if(a[ca>>0]|0){i=kW(b)|0;if((i|0)<0){i=1;m=280;break a}c[(c[da>>2]|0)+(c[ea>>2]<<2)>>2]=i;c[ea>>2]=(c[ea>>2]|0)+1;c[(c[fa>>2]|0)+(i*28|0)>>2]=6;if(c[ga>>2]|0)i=o;else m=275}else m=275;break}case 50:{i=(c[ba>>2]|0)+(c[$>>2]|0)|0;if((a[i>>0]|0)==124){i=2;m=280;break a}a[i>>0]=44;if((a[ca>>0]|0)!=0?(c[ga>>2]|0)!=0:0)i=o;else m=275;break}case 49:{f=c[ba>>2]|0;e=c[$>>2]|0;i=a[f+e>>0]|0;if(i<<24>>24==44){i=2;m=280;break a}if(i<<24>>24==0&(a[ca>>0]|0)!=0?(Ba=(c[fa>>2]|0)+((c[(c[da>>2]|0)+((c[ea>>2]|0)+-1<<2)>>2]|0)*28|0)|0,(c[Ba>>2]|0)!=3):0){c[Ba>>2]=5;i=(c[ga>>2]|0)==0&1;f=c[ba>>2]|0;e=c[$>>2]|0}else i=1;a[f+e>>0]=124;m=274;break}case 59:case 60:{a[ta>>0]=1;if(c[M>>2]|0){e=c[o+64>>2]|0;e=WV(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;if(!e){i=1;m=280;break a}f=YV(b,E,e,0)|0;c[I>>2]=c[J>>2];do if(c[ja>>2]|0){if(!(a[ya>>0]|0)){if(a[ta>>0]|0){m=219;break}}else if(c[na>>2]|0){m=219;break}if(!f){i=11;m=280;break a}if(!(a[f+34>>0]|0)){i=24;m=280;break a}}else m=219;while(0);if((m|0)==219?(m=0,(f|0)==0):0){a[G>>0]=a[ya>>0]|0;if((h|0)!=60){m=275;break c}i=c[ka>>2]|0;if(!i){m=275;break c}vb[i&127](c[ra>>2]|0,e,1);i=o;break c}i=f+32|0;if(a[i>>0]|0){i=12;m=280;break a}if(c[f+4>>2]|0){i=lW(b,f,(h|0)==60&1)|0;e=(i|0)==0;if(e){i=(e^1)&1;m=274;break c}else{m=280;break a}}if(!(c[va>>2]|0)){a[G>>0]=a[ya>>0]|0;m=275;break c}a[wa>>0]=0;a[i>>0]=1;h=(pb[c[va>>2]&127](c[xa>>2]|0,0,c[f+20>>2]|0,c[f+16>>2]|0,c[f+24>>2]|0)|0)==0;a[i>>0]=0;if(h){i=21;m=280;break a}e=a[ya>>0]|0;if(!(a[wa>>0]|0)){a[G>>0]=e;i=o;break c}else i=0}else{e=a[ya>>0]|0;a[G>>0]=e;i=1}if((e<<24>>24==0?(Ca=c[za>>2]|0,(Ca|0)!=0):0)?(kb[Ca&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}else m=274;break}case 40:{if(!(c[ga>>2]|0))m=275;else{n=$V(b,o,n,c[Da>>2]|0)|0;c[N>>2]=n;if(!n){i=1;m=280;break a}c[ea>>2]=0;c[la>>2]=0;a[ca>>0]=1;i=o}break}case 42:case 41:{if(!(a[ca>>0]|0))m=275;else{if(!(c[ga>>2]|0))i=1;else{i=kb[c[ha>>2]&63](20)|0;if(!i){i=1;m=280;break a}m=i+4|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[i>>2]=(h|0)==41?2:1;c[q>>2]=n;vb[c[ga>>2]&127](c[ra>>2]|0,c[c[N>>2]>>2]|0,i);i=0}a[ca>>0]=0;m=274}break}case 43:{if((a[ca>>0]|0)!=0?(c[(c[fa>>2]|0)+((c[(c[da>>2]|0)+((c[ea>>2]|0)+-1<<2)>>2]|0)*28|0)>>2]=3,(c[ga>>2]|0)!=0):0)i=o;else m=275;break}case 51:{e=0;m=247;break}case 53:{e=1;m=247;break}case 52:{e=2;m=247;break}case 54:{e=3;m=247;break}case 45:{f=0;m=258;break}case 47:{f=1;m=258;break}case 46:{f=2;m=258;break}case 48:{f=3;m=258;break}case 55:{if(!(nW(b,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}else i=o;break}case 56:{if(!(oW(b,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}else i=o;break}case 0:{if((e|0)==14)i=o;else m=275;break}case 3:{if(!(c[w>>2]|0))m=275;else i=o;break}case 11:{if((a[G>>0]|0)!=0?(c[K>>2]|0)!=0:0)i=o;else m=275;break}case 17:{if(!(c[_>>2]|0))m=275;else i=o;break}case 33:{if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0)i=o;else m=275;break}case 39:{if(!(c[ga>>2]|0))m=275;else i=o;break}default:m=275}while(0);if((m|0)==33)if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break}else{i=1;m=34}else if((m|0)==80){m=0;if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0)i=o;else m=275}else if((m|0)==133){m=0;if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){e=c[o+64>>2]|0;e=WV(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;c[(c[F>>2]|0)+16>>2]=e;e=c[F>>2]|0;if(!(c[e+16>>2]|0)){i=1;m=280;break}c[e+20>>2]=c[Aa>>2];c[J>>2]=c[I>>2];if((h|0)==13&(c[K>>2]|0)!=0)i=o;else m=274}else m=274}else if((m|0)==247){m=0;if(a[ca>>0]|0){i=c[Da>>2]|0;if(e)i=i+(0-(c[o+64>>2]|0))|0;f=kW(b)|0;if((f|0)<0){i=1;m=280;break}c[(c[fa>>2]|0)+(f*28|0)>>2]=4;c[(c[fa>>2]|0)+(f*28|0)+4>>2]=e;i=$V(b,o,n,i)|0;if(!i){i=1;m=280;break}e=c[i>>2]|0;c[(c[fa>>2]|0)+(f*28|0)+8>>2]=e;i=0;do{h=i;i=i+1|0}while((a[e+h>>0]|0)!=0);c[ma>>2]=(c[ma>>2]|0)+i;if(c[ga>>2]|0)i=o;else m=275}else m=275}else if((m|0)==258)if(a[ca>>0]|0){e=(c[ga>>2]|0)==0;i=e&1;m=(c[ea>>2]|0)+-1|0;c[ea>>2]=m;c[(c[fa>>2]|0)+((c[(c[da>>2]|0)+(m<<2)>>2]|0)*28|0)+4>>2]=f;if(!(c[ea>>2]|0)){if(!e){e=mW(b)|0;if(!e){i=1;m=280;break}c[q>>2]=n;vb[c[ga>>2]&127](c[ra>>2]|0,c[c[N>>2]>>2]|0,e)}a[ca>>0]=0;c[ma>>2]=0;m=274}else m=274}else m=275;if((m|0)==34){m=0;if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){e=c[o+64>>2]|0;e=WV(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;if(!e){i=1;m=280;break}ZV(e);c[(c[F>>2]|0)+24>>2]=e;c[J>>2]=c[I>>2];if((h|0)==14&(c[K>>2]|0)!=0)i=o;else m=274}else m=274}if((m|0)==274){m=0;if(!(i<<24>>24))i=o;else m=275}if((m|0)==275){m=0;if(!(c[u>>2]|0))i=o;else{hW(b,o,n,c[Da>>2]|0);i=o}}switch(c[v>>2]|0){case 3:{m=278;break a}case 2:{i=35;m=280;break a}default:{}}e=c[Da>>2]|0;o=i;n=e;e=ob[c[i>>2]&127](i,e,g,Da)|0}d:switch(m|0){case 7:{c[j>>2]=n;i=0;break}case 9:{c[p>>2]=f;i=4;break}case 10:{i=(o|0)==(c[s>>2]|0);if(!i?(a[(c[na>>2]|0)+20>>0]|0)==0:0){c[j>>2]=n;i=0;break}if((a[b+484>>0]|0)!=0|i^1)if((pb[c[pa>>2]&127](pa,-4,g,g,o)|0)==-1)i=29;else{c[j>>2]=n;i=0}else i=3;break}case 58:{do if((a[D>>0]|0?(Ea=a[ta>>0]|0,a[ta>>0]=1,c[M>>2]|0):0)?c[va>>2]|0:0){i=YV(b,E,75291,36)|0;if(!i){i=1;break d}Da=i+20|0;c[Da>>2]=c[Aa>>2];a[wa>>0]=0;if(!(pb[c[va>>2]&127](c[xa>>2]|0,0,c[Da>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0)|0)){i=21;break d}if(!(a[wa>>0]|0)){a[ta>>0]=Ea;break}if(((a[ya>>0]|0)==0?(Fa=c[za>>2]|0,Fa|0):0)?(kb[Fa&63](c[ra>>2]|0)|0)==0:0){i=22;break d}}while(0);c[b+276>>2]=58;i=_V(b,n,g,j)|0;break}case 184:{i=(e|0)==28?10:(e|0)==12?17:2;break}case 189:{c[b+276>>2]=59;i=0;break}case 193:{c[aa>>2]=(c[aa>>2]|0)>>>1;i=1;break}case 198:{c[aa>>2]=0;i=1;break}case 278:{c[j>>2]=c[Da>>2];i=0;break}case 280:break}l=Ga;return i|0}function VV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q+16|0;m=q+12|0;i=q+8|0;j=q+4|0;k=q;c[p>>2]=0;c[m>>2]=0;c[i>>2]=0;c[k>>2]=-1;n=b+144|0;o=b+284|0;g=(d|0)!=0;a:do if(rb[(a[b+232>>0]<<24>>24?2:1)&3](d,c[n>>2]|0,e,f,o,i,j,p,m,k)|0){if((c[k>>2]|0)==1&(g^1)?(a[(c[b+352>>2]|0)+130>>0]=1,h=b+488|0,(c[h>>2]|0)==1):0)c[h>>2]=0;h=b+140|0;if(!(c[h>>2]|0))if(!(c[b+80>>2]|0)){e=0;d=0}else{hW(b,c[n>>2]|0,e,f);e=0;d=0}else{d=c[p>>2]|0;if(!d)d=0;else{f=c[n>>2]|0;d=WV(b+436|0,f,d,d+(lb[c[f+28>>2]&127](f,d)|0)|0)|0;if(!d){d=1;break}c[b+452>>2]=c[b+448>>2]}g=c[i>>2]|0;if(g){i=c[n>>2]|0;g=WV(b+436|0,i,g,(c[j>>2]|0)+(0-(c[i+64>>2]|0))|0)|0;if(!g){d=1;break}}else g=0;xb[c[h>>2]&31](c[b+4>>2]|0,g,d,c[k>>2]|0);e=g}do if(!(c[b+228>>2]|0)){g=c[m>>2]|0;h=g;if(g|0){k=c[g+64>>2]|0;m=c[n>>2]|0;if((k|0)==(c[m+64>>2]|0)?(k|0)!=2|(g|0)==(m|0):0){c[n>>2]=h;break}c[o>>2]=c[p>>2];d=19;break a}g=c[p>>2]|0;if(g|0){h=b+436|0;if(!d){d=c[n>>2]|0;d=WV(h,d,g,g+(lb[c[d+28>>2]&127](d,g)|0)|0)|0;if(!d){d=1;break a}}d=PW(b,d)|0;XV(h);if((d|0)!=18)break a;c[o>>2]=c[p>>2];d=18;break a}}while(0);if((d|0)!=0|(e|0)!=0){XV(b+436|0);d=0}else d=0}else d=g?31:30;while(0);l=q;return d|0}function WV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;do if(!(cW(b,d,e,f)|0))d=0;else{e=b+12|0;d=c[e>>2]|0;if((d|0)==(c[b+8>>2]|0)){if(!((eW(b)|0)<<24>>24)){d=0;break}d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=0;d=c[b+16>>2]|0}while(0);return d|0}function XV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+4|0;b=c[e>>2]|0;a:do if(!b){c[e>>2]=c[a>>2];b=a}else{d=c[a>>2]|0;while(1){if(!d){b=a;break a}g=c[d>>2]|0;c[d>>2]=b;c[e>>2]=d;f=d;d=g;b=f}}while(0);c[b>>2]=0;c[a+16>>2]=0;c[a+12>>2]=0;c[a+8>>2]=0;return}function YV(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=e+8|0;a:do if(!(c[w>>2]|0))if(g){a[e+4>>0]=6;c[w>>2]=64;h=e+16|0;i=kb[c[c[h>>2]>>2]&63](256)|0;c[e>>2]=i;if(!i){c[w>>2]=0;h=0;break}else{H3(i|0,0,256)|0;j=NW(b,f)|0;j=(c[w>>2]|0)+-1&j;i=e;o=27;break}}else h=0;else{v=NW(b,f)|0;k=c[w>>2]|0;j=k+-1|0;l=c[e>>2]|0;m=v&0-k;u=e+4|0;n=j>>>2;i=0;j=j&v;while(1){h=c[l+(j<<2)>>2]|0;if(!h)break;if((OW(f,c[h>>2]|0)|0)<<24>>24)break a;if(!(i<<24>>24))h=(m>>>((d[u>>0]|0)+-1|0)&n|1)&255;else h=i;t=h&255;i=h;j=j-t+(j>>>0>>0?k:0)|0}if(g){i=a[u>>0]|0;h=i&255;if(!((c[e+12>>2]|0)>>>(h+-1|0))){h=e+16|0;i=e;o=27;break}q=h+1&255;j=i+1&255;s=1<>2]>>2]&63](i)|0;if(t){H3(t|0,0,i|0)|0;p=0-s|0;n=j+-1|0;o=r>>>2;m=0;while(1){if(m>>>0>=(c[w>>2]|0)>>>0)break;i=c[(c[e>>2]|0)+(m<<2)>>2]|0;if(i|0){i=NW(b,c[i>>2]|0)|0;k=((i&p)>>>n&o|1)&255;i=i&r;j=0;while(1){l=t+(i<<2)|0;if(!(c[l>>2]|0))break;l=j<<24>>24==0?k:j;x=l&255;i=i+(i>>>0>>0?s:0)-x|0;j=l}c[l>>2]=c[(c[e>>2]|0)+(m<<2)>>2]}m=m+1|0}tb[c[(c[h>>2]|0)+8>>2]&127](c[e>>2]|0);c[e>>2]=t;a[u>>0]=q;c[w>>2]=s;k=((v&p)>>>n&o|1)&255;i=r&v;j=0;while(1){if(!(c[t+(i<<2)>>2]|0)){j=i;i=e;o=27;break a}x=j<<24>>24==0?k:j;w=x&255;i=i+(i>>>0>>0?s:0)-w|0;j=x}}else h=0}else h=0}while(0);if((o|0)==27){h=kb[c[c[h>>2]>>2]&63](g)|0;c[(c[i>>2]|0)+(j<<2)>>2]=h;h=c[(c[i>>2]|0)+(j<<2)>>2]|0;if(!h)h=0;else{H3(h|0,0,g|0)|0;c[c[(c[i>>2]|0)+(j<<2)>>2]>>2]=f;h=e+12|0;c[h>>2]=(c[h>>2]|0)+1;h=c[(c[i>>2]|0)+(j<<2)>>2]|0}}return h|0}function ZV(b){b=b|0;var c=0,d=0,e=0;e=b;c=b;while(1){d=a[e>>0]|0;if(!(d<<24>>24))break;switch(d<<24>>24|0){case 10:case 13:case 32:{if((c|0)!=(b|0)){if((a[c+-1>>0]|0)!=32){a[c>>0]=32;c=c+1|0}}else c=b;break}default:{a[c>>0]=d;c=c+1|0}}e=e+1|0}if((c|0)!=(b|0)){b=c+-1|0;b=(a[b>>0]|0)==32?b:c}a[b>>0]=0;return}function _V(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;d=rW(b,0,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;if((d|0)==0?(AW(b)|0)<<24>>24==0:0)d=1;return d|0}function $V(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+352>>2]|0;b=WV(g+80|0,b,d,e)|0;do if((b|0)!=0?(f=YV(a,g+20|0,b,24)|0,(f|0)!=0):0)if((c[f>>2]|0)==(b|0)){c[g+96>>2]=c[g+92>>2];if(!(CW(a,f)|0)){f=0;break}}else c[g+92>>2]=c[g+96>>2];else f=0;while(0);return f|0}function aW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=c[b+352>>2]|0;k=m+80|0;n=m+92|0;h=c[n>>2]|0;l=m+88|0;if((h|0)==(c[l>>2]|0))if(!((eW(k)|0)<<24>>24))g=0;else{h=c[n>>2]|0;i=4}else i=4;a:do if((i|0)==4){c[n>>2]=h+1;a[h>>0]=0;d=WV(k,d,e,f)|0;if((d|0)!=0?(j=d+1|0,g=YV(b,m+40|0,j,12)|0,(g|0)!=0):0){if((c[g>>2]|0)!=(j|0)){c[n>>2]=c[m+96>>2];break}h=c[n>>2]|0;i=m+96|0;c[i>>2]=h;if(a[b+232>>0]|0){e=a[j>>0]|0;b:do if(e<<24>>24==120)if((((a[d+2>>0]|0)==109?(a[d+3>>0]|0)==108:0)?(a[d+4>>0]|0)==110:0)?(a[d+5>>0]|0)==115:0){switch(a[d+6>>0]|0){case 0:{h=m+152|0;break}case 58:{h=YV(b,m+60|0,d+7|0,8)|0;break}default:{f=0;d=120;break b}}c[g+4>>2]=h;a[g+9>>0]=1;break a}else{f=0;d=120}else{f=0;d=e}while(0);c:while(1){switch(d<<24>>24){case 0:break a;case 58:{e=0;break c}default:{}}d=f+1|0;f=d;d=a[j+d>>0]|0}while(1){d=(h|0)==(c[l>>2]|0);if((e|0)>=(f|0))break;if(d){if(!((eW(k)|0)<<24>>24)){g=0;break a}h=c[n>>2]|0}d=a[j+e>>0]|0;c[n>>2]=h+1;a[h>>0]=d;e=e+1|0;h=c[n>>2]|0}if(d){if(!((eW(k)|0)<<24>>24)){g=0;break}h=c[n>>2]|0}c[n>>2]=h+1;a[h>>0]=0;h=YV(b,m+60|0,c[i>>2]|0,8)|0;c[g+4>>2]=h;if(h){d=c[i>>2]|0;if((c[h>>2]|0)==(d|0)){c[i>>2]=c[n>>2];break}else{c[n>>2]=d;break}}else g=0}}else g=0}while(0);return g|0}function bW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=b+12|0;h=b+8|0;while(1){e=a[d>>0]|0;if(!(e<<24>>24)){i=7;break}f=c[g>>2]|0;if((f|0)==(c[h>>2]|0)){if(!((eW(b)|0)<<24>>24)){d=0;break}f=c[g>>2]|0;e=a[d>>0]|0}c[g>>2]=f+1;a[f>>0]=e;d=d+1|0}if((i|0)==7)d=c[b+16>>2]|0;return d|0}function cW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;c[h>>2]=d;g=a+12|0;if((c[g>>2]|0)==0?(eW(a)|0)<<24>>24==0:0)d=0;else f=3;a:do if((f|0)==3){d=b+56|0;f=a+8|0;while(1){if((pb[c[d>>2]&127](b,h,e,g,c[f>>2]|0)|0)>>>0<2)break;if(!((eW(a)|0)<<24>>24)){d=0;break a}}d=c[a+16>>2]|0}while(0);l=i;return d|0}function dW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;i=f<<24>>24==0;n=b+12|0;m=c[n>>2]|0;a:do if(!(i&(g|0)==0)){j=b+20|0;f=0;while(1){if((f|0)>=(m|0))break;if((c[(c[j>>2]|0)+(f*12|0)>>2]|0)==(d|0)){f=1;break a}else f=f+1|0}if((!i?(k=b+8|0,(c[k>>2]|0)==0):0)?(a[d+9>>0]|0)==0:0){c[k>>2]=d;l=9}else l=9}else l=9;while(0);b:do if((l|0)==9){j=b+16|0;do if((m|0)==(c[j>>2]|0))if(!m){c[j>>2]=8;f=kb[c[h+12>>2]&63](96)|0;c[b+20>>2]=f;if(f|0)break;c[j>>2]=0;f=0;break b}else{i=b+20|0;f=lb[c[h+16>>2]&127](c[i>>2]|0,m*24|0)|0;if(!f){f=0;break b}c[j>>2]=m<<1;c[i>>2]=f;break}else f=c[b+20>>2]|0;while(0);h=c[n>>2]|0;c[f+(h*12|0)>>2]=d;c[f+(h*12|0)+8>>2]=g;a[f+(h*12|0)+4>>0]=e;if(!(e<<24>>24))a[d+8>>0]=1;c[n>>2]=(c[n>>2]|0)+1;f=1}while(0);return f|0}function eW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=a+4|0;e=c[b>>2]|0;do if(e){f=a+16|0;g=c[f>>2]|0;if(!g){c[a>>2]=e;c[b>>2]=c[e>>2];c[e>>2]=0;l=c[a>>2]|0;b=l+8|0;c[f>>2]=b;c[a+8>>2]=(c[l+4>>2]|0)+(l+8);c[a+12>>2]=b;b=1;break}d=a+8|0;if(((c[d>>2]|0)-g|0)<(c[e+4>>2]|0)){k=c[e>>2]|0;c[e>>2]=c[a>>2];l=c[b>>2]|0;c[a>>2]=l;c[b>>2]=k;b=c[f>>2]|0;F3(l+8|0,b|0,(c[d>>2]|0)-b|0)|0;b=c[a>>2]|0;l=a+12|0;c[l>>2]=(c[l>>2]|0)-(c[f>>2]|0)+(b+8);c[f>>2]=b+8;c[d>>2]=(c[b+4>>2]|0)+(b+8);b=1}else h=6}else h=6;while(0);a:do if((h|0)==6){e=c[a>>2]|0;k=a+16|0;do if(!e){i=k;b=c[k>>2]|0}else{j=c[k>>2]|0;b=j;if((j|0)!=(e+8|0)){i=k;break}f=a+8|0;g=(c[f>>2]|0)-b<<1;h=a+12|0;d=(c[h>>2]|0)-b|0;if((g|0)<0){b=0;break a}b=MW(g)|0;if(!b){b=0;break a}b=lb[c[(c[a+20>>2]|0)+4>>2]&127](e,b)|0;if(!b){b=0;break a}c[a>>2]=b;c[b+4>>2]=g;b=c[a>>2]|0;c[h>>2]=b+8+d;c[k>>2]=b+8;c[f>>2]=b+8+g;b=1;break a}while(0);j=a+8|0;b=(c[j>>2]|0)-b|0;if((b|0)>=0){if((b|0)>=1024){b=b<<1;if((b|0)<0){b=0;break}}else b=1024;d=MW(b)|0;if((d|0)!=0?(l=kb[c[c[a+20>>2]>>2]&63](d)|0,(l|0)!=0):0){c[l+4>>2]=b;c[l>>2]=c[a>>2];c[a>>2]=l;h=a+12|0;a=c[h>>2]|0;e=c[k>>2]|0;d=a;f=e;if((a|0)==(e|0)){g=l+8|0;e=f}else{g=l+8|0;F3(g|0,e|0,d-f|0)|0;e=c[i>>2]|0;d=c[h>>2]|0}c[h>>2]=l+8+(d-e);c[k>>2]=g;c[j>>2]=l+8+b;b=1}else b=0}else b=0}while(0);return b|0}function fW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;b=LW(b,d,e,f,g,h)|0;do if(!b){d=h+12|0;b=c[d>>2]|0;if((e<<24>>24==0?(c[h+16>>2]|0)!=(b|0):0)?(i=b+-1|0,(a[i>>0]|0)==32):0){c[d>>2]=i;b=i}if((b|0)==(c[h+8>>2]|0)){if(!((eW(h)|0)<<24>>24)){b=1;break}b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=0;b=0}while(0);return b|0}function gW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+16|0;B=H;C=H+4|0;g=c[b+352>>2]|0;D=g+104|0;F=b+272|0;E=c[F>>2]|0;c[F>>2]=1;if((c[D>>2]|0)==0?(eW(D)|0)<<24>>24==0:0)g=1;else{n=d+20|0;o=b+484|0;p=b+144|0;q=b+412|0;r=d+64|0;s=g+132|0;t=b+428|0;u=b+424|0;v=b+224|0;w=b+112|0;m=g+130|0;x=g+128|0;y=g+131|0;z=b+116|0;A=g+112|0;j=g+116|0;k=d+40|0;a:while(1){b:do switch(ob[c[n>>2]&127](d,e,f,B)|0){case -4:{g=0;break a}case -1:{G=37;break a}case 0:{G=39;break a}case 28:{if((a[o>>0]|0)==0?(c[p>>2]|0)==(d|0):0){G=19;break a}g=c[r>>2]|0;g=WV(q,d,e+g|0,(c[B>>2]|0)+(0-g)|0)|0;if(!g){g=1;break a}h=YV(b,s,g,0)|0;c[u>>2]=c[t>>2];if(!h){G=9;break a}i=h+32|0;if(a[i>>0]|0){G=11;break a}g=h+16|0;if(!(c[g>>2]|0)){a[i>>0]=1;g=c[h+4>>2]|0;g=gW(b,c[v>>2]|0,g,g+(c[h+8>>2]|0)|0)|0;a[i>>0]=0;if(!g)break b;else break a}if(c[w>>2]|0){a[y>>0]=0;a[i>>0]=1;h=(pb[c[w>>2]&127](c[z>>2]|0,0,c[h+20>>2]|0,c[g>>2]|0,c[h+24>>2]|0)|0)==0;a[i>>0]=0;if(h){g=21;break a}if(a[y>>0]|0)break b}a[x>>0]=a[m>>0]|0;break}case 6:case 9:{if(!(cW(D,d,e,c[B>>2]|0)|0)){g=1;break a}break}case -3:{c[B>>2]=e+(c[r>>2]|0);G=22;break}case 7:{G=22;break}case 10:{g=lb[c[k>>2]&127](d,e)|0;if((g|0)<0){G=27;break a}h=gX(g,C)|0;e=0;while(1){if((e|0)>=(h|0))break;g=c[j>>2]|0;if((c[A>>2]|0)==(g|0)){if(!((eW(D)|0)<<24>>24)){g=1;G=35;break a}g=c[j>>2]|0}i=a[C+e>>0]|0;c[j>>2]=g+1;a[g>>0]=i;e=e+1|0}break}default:{G=41;break a}}while(0);if((G|0)==22){G=0;g=c[j>>2]|0;if((c[A>>2]|0)==(g|0)){if(!((eW(D)|0)<<24>>24)){g=1;break}g=c[j>>2]|0}c[j>>2]=g+1;a[g>>0]=10}e=c[B>>2]|0}if((G|0)==9){a[x>>0]=a[m>>0]|0;g=0}else if((G|0)==11)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=12}else g=12;else if((G|0)==19){c[b+284>>2]=e;g=10}else if((G|0)==27)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=14;G=35}else{g=14;G=35}else if((G|0)==37)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=4}else g=4;else if((G|0)==39)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=c[B>>2];g=4}else g=4;else if((G|0)==41)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=23}else g=23;c[F>>2]=E}l=H;return g|0}function hW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+16|0;n=p;o=p+4|0;c[n>>2]=e;if(!(a[d+68>>0]|0)){if((c[b+144>>2]|0)==(d|0)){g=b+288|0;h=b+284|0}else{h=c[b+296>>2]|0;g=h+4|0}i=b+44|0;j=d+56|0;k=b+48|0;m=b+80|0;e=b+4|0;do{c[o>>2]=c[i>>2];b=pb[c[j>>2]&127](d,n,f,o,c[k>>2]|0)|0;c[g>>2]=c[n>>2];q=c[i>>2]|0;vb[c[m>>2]&127](c[e>>2]|0,q,(c[o>>2]|0)-q|0);c[h>>2]=c[n>>2]}while(b>>>0>1)}else vb[c[b+80>>2]&127](c[b+4>>2]|0,e,f-e|0);l=p;return}function iW(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=c[d>>2]|0;if((c[a+144>>2]|0)==(b|0)){i=a+284|0;c[i>>2]=k;h=a+288|0}else{i=c[a+296>>2]|0;h=i+4|0}c[i>>2]=k;c[d>>2]=0;n=ob[c[b+12>>2]&127](b,k,e,j)|0;e=c[j>>2]|0;c[h>>2]=e;switch(n|0){case 42:{if(c[a+80>>2]|0){hW(a,b,k,e);e=c[j>>2]|0}c[d>>2]=e;c[f>>2]=e;e=(c[a+476>>2]|0)==2?35:0;break}case 0:{c[i>>2]=e;e=4;break}case -2:{if(!(g<<24>>24))e=6;else{c[f>>2]=k;e=0}break}case -4:case -1:{if(!(g<<24>>24))e=2;else{c[f>>2]=k;e=0}break}default:{c[i>>2]=e;e=23}}l=m;return e|0}function jW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;d=iW(b,c[b+144>>2]|0,g,e,f,(a[b+480>>0]|0)==0&1)|0;g=c[g>>2]|0;if(!((d|0)!=0|(g|0)==0)){c[b+276>>2]=57;d=TV(b,g,e,f)|0}l=h;return d|0}function kW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=c[a+352>>2]|0;j=i+184|0;if(!(c[j>>2]|0)){b=kb[c[a+12>>2]&63](c[a+464>>2]<<2)|0;c[j>>2]=b;if(!b)b=-1;else{c[b>>2]=0;d=4}}else d=4;do if((d|0)==4){h=i+176|0;b=c[h>>2]|0;g=i+172|0;d=c[g>>2]|0;f=i+164|0;e=c[f>>2]|0;if(b>>>0>>0)g=e;else{if(!e){b=kb[c[a+12>>2]&63](896)|0;if(!b){b=-1;break}else{d=b;b=32}}else{b=lb[c[a+16>>2]&127](e,d*56|0)|0;if(!b){b=-1;break}d=b;b=c[g>>2]<<1}c[g>>2]=b;c[f>>2]=d;b=c[h>>2]|0;g=d}c[h>>2]=b+1;d=c[i+180>>2]|0;if(d|0){a=c[(c[j>>2]|0)+(d+-1<<2)>>2]|0;f=g+(a*28|0)+16|0;d=c[f>>2]|0;if(d|0)c[g+(d*28|0)+24>>2]=b;d=g+(a*28|0)+20|0;e=c[d>>2]|0;if(!e)c[g+(a*28|0)+12>>2]=b;c[f>>2]=b;c[d>>2]=e+1}j=g+(b*28|0)+12|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0}while(0);return b|0}function lW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;o=b+300|0;f=c[o>>2]|0;if(!f){f=kb[c[b+12>>2]&63](24)|0;if(!f)f=1;else{m=f;g=4}}else{c[o>>2]=c[f+8>>2];m=f;g=4}do if((g|0)==4){h=d+32|0;a[h>>0]=1;i=d+12|0;c[i>>2]=0;j=b+296|0;k=m+8|0;c[k>>2]=c[j>>2];c[j>>2]=m;c[m+12>>2]=d;f=b+308|0;c[m+16>>2]=c[f>>2];a[m+20>>0]=e;c[m>>2]=0;c[m+4>>2]=0;g=c[d+4>>2]|0;e=g+(c[d+8>>2]|0)|0;c[n>>2]=g;if(!(a[d+33>>0]|0))f=rW(b,c[f>>2]|0,c[b+224>>2]|0,g,e,n,0)|0;else{d=b+224|0;f=c[d>>2]|0;f=ob[c[f>>2]&127](f,g,e,n)|0;f=UV(b,c[d>>2]|0,g,e,f,c[n>>2]|0,n,0)|0}if(!f){f=c[n>>2]|0;if((e|0)!=(f|0)?(c[b+476>>2]|0)==3:0){c[i>>2]=f-g;c[b+276>>2]=60;f=0;break}a[h>>0]=0;c[j>>2]=c[k>>2];c[k>>2]=c[o>>2];c[o>>2]=m;f=0}}while(0);l=p;return f|0}function mW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;b=c[a+352>>2]|0;f=b+176|0;b=kb[c[a+12>>2]&63](((c[f>>2]|0)*20|0)+(c[b+168>>2]|0)|0)|0;if(!b)b=0;else{c[e>>2]=b+((c[f>>2]|0)*20|0);c[d>>2]=b+20;qW(a,0,b,d,e)}l=g;return b|0}function nW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=a+64|0;if(!(c[j>>2]|0))if(!(c[a+80>>2]|0))d=1;else{hW(a,b,d,e);d=1}else{h=b+64|0;g=d+(c[h>>2]<<1)|0;d=g+(lb[c[b+28>>2]&127](b,g)|0)|0;f=a+412|0;g=WV(f,b,g,d)|0;if((g|0)!=0?(c[a+428>>2]=c[a+424>>2],i=lb[c[b+32>>2]&127](b,d)|0,i=WV(f,b,i,e+(0-(c[h>>2]<<1))|0)|0,(i|0)!=0):0){pW(i);vb[c[j>>2]&127](c[a+4>>2]|0,g,i);XV(f);d=1}else d=0}return d|0}function oW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=a+68|0;if(!(c[g>>2]|0))if(!(c[a+80>>2]|0))b=1;else{hW(a,b,d,e);b=1}else{f=a+412|0;h=c[b+64>>2]|0;b=WV(f,b,d+(h<<2)|0,e+(O(h,-3)|0)|0)|0;if(!b)b=0;else{pW(b);ub[c[g>>2]&63](c[a+4>>2]|0,b);XV(f);b=1}}return b|0}function pW(b){b=b|0;var c=0,d=0,e=0;a:while(1){switch(a[b>>0]|0){case 0:break a;case 13:{d=b;c=13;e=4;break a}default:{}}b=b+1|0}if((e|0)==4){while(1){if(c<<24>>24==13){a[d>>0]=10;e=b+1|0;b=(a[e>>0]|0)==10?b+2|0:e}else{a[d>>0]=c;b=b+1|0}d=d+1|0;c=a[b>>0]|0;if(!(c<<24>>24))break;else e=4}a[d>>0]=0}return}function qW(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[b+352>>2]|0)+164|0;j=c[(c[k>>2]|0)+(d*28|0)>>2]|0;c[e>>2]=j;c[e+4>>2]=c[(c[k>>2]|0)+(d*28|0)+4>>2];if((j|0)==4){c[e+8>>2]=c[g>>2];d=c[(c[k>>2]|0)+(d*28|0)+8>>2]|0;while(1){j=a[d>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k>>0]=j;if(!(a[d>>0]|0))break;else d=d+1|0}c[e+12>>2]=0;c[e+16>>2]=0}else{h=c[(c[k>>2]|0)+(d*28|0)+20>>2]|0;i=e+12|0;c[i>>2]=h;j=e+16|0;c[j>>2]=c[f>>2];c[f>>2]=(c[f>>2]|0)+(h*20|0);d=(c[k>>2]|0)+(d*28|0)+12|0;h=0;while(1){d=c[d>>2]|0;if(h>>>0>=(c[i>>2]|0)>>>0)break;qW(b,d,(c[j>>2]|0)+(h*20|0)|0,f,g);d=(c[k>>2]|0)+(d*28|0)+24|0;h=h+1|0}c[e+8>>2]=0}return}function rW(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;ma=l;l=l+48|0;ja=ma+28|0;ea=ma+32|0;ka=ma+24|0;Z=ma;c[ja>>2]=f;_=c[b+352>>2]|0;if((c[b+144>>2]|0)==(e|0)){fa=b+284|0;Y=b+288|0}else{Y=c[b+296>>2]|0;fa=Y;Y=Y+4|0}c[fa>>2]=f;t=e+4|0;ga=b+80|0;u=b+476|0;v=e+44|0;w=e+64|0;x=_+80|0;y=_+96|0;z=_+92|0;A=_+129|0;B=b+112|0;C=b+116|0;D=b+428|0;E=b+424|0;F=b+304|0;G=b+120|0;ha=b+4|0;H=_+130|0;$=b+60|0;I=b+364|0;J=b+12|0;K=b+360|0;L=e+28|0;ia=b+308|0;aa=e+56|0;M=b+16|0;N=b+52|0;O=b+412|0;P=b+388|0;Q=b+56|0;R=b+232|0;S=b+233|0;T=b+468|0;U=b+104|0;V=b+372|0;W=e+40|0;X=b+72|0;ba=e+68|0;ca=b+44|0;da=b+48|0;a:while(1){s=c[ja>>2]|0;c[ea>>2]=s;s=ob[c[t>>2]&127](e,s,g,ea)|0;f=c[ea>>2]|0;c[Y>>2]=f;k=f;b:do switch(s|0){case -3:{la=6;break a}case -4:{la=15;break a}case 0:{la=20;break a}case -1:{la=21;break a}case -2:{la=23;break a}case 12:{f=17;break a}case -5:{la=134;break a}case 9:{s=c[w>>2]|0;s=(nb[c[v>>2]&63](e,(c[ja>>2]|0)+s|0,k+(0-s)|0)|0)&255;a[ka>>0]=s;do if(s<<24>>24){f=c[$>>2]|0;if(f|0){vb[f&127](c[ha>>2]|0,ka,1);break}if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{j=c[w>>2]|0;j=WV(x,e,(c[ja>>2]|0)+j|0,(c[ea>>2]|0)+(0-j)|0)|0;if(!j){f=1;la=56;break a}k=YV(b,_,j,0)|0;c[z>>2]=c[y>>2];if((a[A>>0]|0)!=0?(a[H>>0]|0)==0:0){if(!k){f=c[G>>2]|0;if(f|0){vb[f&127](c[ha>>2]|0,j,0);break}if(!(c[ga>>2]|0))break;hW(b,e,c[ja>>2]|0,c[ea>>2]|0);break}}else{if(!k){f=11;la=56;break a}if(!(a[k+34>>0]|0)){f=24;la=56;break a}}f=k+32|0;if(a[f>>0]|0){f=12;la=56;break a}if(c[k+28>>2]|0){f=15;la=56;break a}if(!(c[k+4>>2]|0)){if(!(c[B>>2]|0)){if(!(c[ga>>2]|0))break;hW(b,e,c[ja>>2]|0,c[ea>>2]|0);break}a[f>>0]=1;j=tW(b)|0;a[f>>0]=0;if(!j){f=1;la=56;break a}if(!(pb[c[B>>2]&127](c[C>>2]|0,j,c[k+20>>2]|0,c[k+16>>2]|0,c[k+24>>2]|0)|0)){f=21;la=56;break a}c[E>>2]=c[D>>2];break}if(a[F>>0]|0){f=lW(b,k,0)|0;if(!f)break;else{la=58;break a}}f=c[G>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else vb[f&127](c[ha>>2]|0,c[k>>2]|0,0);break b}while(0);break}case 1:case 2:{f=c[I>>2]|0;if(!f){f=kb[c[J>>2]&63](48)|0;if(!f){f=1;la=75;break a}j=kb[c[J>>2]&63](32)|0;c[f+36>>2]=j;if(!j){la=63;break a}c[f+40>>2]=j+32}else c[I>>2]=c[f>>2];o=f+44|0;c[o>>2]=0;c[f>>2]=c[K>>2];c[K>>2]=f;s=f+12|0;c[f+16>>2]=0;c[f+20>>2]=0;r=(c[ja>>2]|0)+(c[w>>2]|0)|0;q=f+4|0;c[q>>2]=r;p=f+8|0;c[p>>2]=lb[c[L>>2]&127](e,r)|0;c[ia>>2]=(c[ia>>2]|0)+1;q=c[q>>2]|0;p=q+(c[p>>2]|0)|0;c[Z>>2]=q;q=f+36|0;c[ka>>2]=c[q>>2];r=f+40|0;j=c[r>>2]|0;while(1){na=pb[c[aa>>2]&127](e,Z,p,ka,j+-1|0)|0;j=c[ka>>2]|0;m=c[q>>2]|0;k=m;n=j-k|0;if((na|0)==1?1:(c[Z>>2]|0)>>>0>=p>>>0)break;k=(c[r>>2]|0)-k<<1;j=lb[c[M>>2]&127](m,k)|0;if(!j){la=69;break a}c[q>>2]=j;na=j+k|0;c[r>>2]=na;c[ka>>2]=j+n;j=na}c[f+24>>2]=n;c[s>>2]=k;a[j>>0]=0;f=uW(b,e,c[ja>>2]|0,s,o)|0;if(f|0){la=75;break a}f=c[N>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else vb[f&127](c[ha>>2]|0,c[s>>2]|0,c[P>>2]|0);XV(O);break}case 3:case 4:{na=(c[ja>>2]|0)+(c[w>>2]|0)|0;c[ka>>2]=0;na=WV(O,e,na,na+(lb[c[L>>2]&127](e,na)|0)|0)|0;c[Z>>2]=na;if(!na){f=1;la=89;break a}c[D>>2]=c[E>>2];f=uW(b,e,c[ja>>2]|0,Z,ka)|0;if(f|0){la=79;break a}c[D>>2]=c[E>>2];f=c[N>>2]|0;if(!f)j=1;else{vb[f&127](c[ha>>2]|0,c[Z>>2]|0,c[P>>2]|0);j=0}f=c[Q>>2]|0;if(!f){if(j|0?c[ga>>2]|0:0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{if(c[N>>2]|0){c[fa>>2]=c[Y>>2];f=c[Q>>2]|0}ub[f&63](c[ha>>2]|0,c[Z>>2]|0)}XV(O);vW(b,c[ka>>2]|0);if((c[ia>>2]|0)==0?(c[u>>2]&-2|0)!=2:0){la=92;break a}break}case 5:{if((c[ia>>2]|0)==(d|0)){f=13;break a}n=c[K>>2]|0;c[K>>2]=c[n>>2];c[n>>2]=c[I>>2];c[I>>2]=n;f=(c[ja>>2]|0)+(c[w>>2]<<1)|0;j=lb[c[L>>2]&127](e,f)|0;if((j|0)!=(c[n+8>>2]|0)){la=96;break a}if(L0(c[n+4>>2]|0,f,j)|0){la=96;break a}c[ia>>2]=(c[ia>>2]|0)+-1;f=c[Q>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{j=c[n+16>>2]|0;m=n+12|0;if((j|0)!=0&(a[R>>0]|0)!=0){f=(c[m>>2]|0)+(c[n+28>>2]|0)|0;while(1){k=a[j>>0]|0;if(!(k<<24>>24))break;a[f>>0]=k;f=f+1|0;j=j+1|0}j=c[n+20>>2]|0;c:do if((j|0)!=0&(a[S>>0]|0)!=0){a[f>>0]=a[T>>0]|0;while(1){f=f+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break c;a[f>>0]=k;j=j+1|0}}while(0);a[f>>0]=0;f=c[Q>>2]|0}ub[f&63](c[ha>>2]|0,c[m>>2]|0)}k=n+44|0;while(1){m=c[k>>2]|0;if(!m)break;f=c[U>>2]|0;if(!f){f=m;j=m}else{ub[f&63](c[ha>>2]|0,c[c[m>>2]>>2]|0);f=m;j=c[k>>2]|0}c[k>>2]=c[j+4>>2];c[m+4>>2]=c[V>>2];c[V>>2]=m;c[(c[f>>2]|0)+4>>2]=c[m+8>>2]}if(!(c[ia>>2]|0)){la=117;break a}break}case 10:{f=lb[c[W>>2]&127](e,c[ja>>2]|0)|0;if((f|0)<0){f=14;break a}j=c[$>>2]|0;if(j|0){s=c[ha>>2]|0;na=gX(f,ka)|0;vb[j&127](s,ka,na);break b}if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0);break}case 7:{f=c[$>>2]|0;if(f|0){a[ka>>0]=10;vb[f&127](c[ha>>2]|0,ka,1);break b}if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,k);break}case 8:{f=c[X>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,k)}else tb[f&127](c[ha>>2]|0);f=xW(b,e,ea,g,h,i)|0;if(f|0)break a;if(!(c[ea>>2]|0)){la=133;break a}break}case 6:{j=c[$>>2]|0;if(!j){if(!(c[ga>>2]|0))break b;hW(b,e,c[ja>>2]|0,k);break b}if(!(a[ba>>0]|0))f=k;else{na=c[ja>>2]|0;vb[j&127](c[ha>>2]|0,na,f-na|0);break b}while(1){c[ka>>2]=c[ca>>2];na=pb[c[aa>>2]&127](e,ja,f,ka,c[da>>2]|0)|0;c[Y>>2]=c[ja>>2];s=c[ca>>2]|0;vb[j&127](c[ha>>2]|0,s,(c[ka>>2]|0)-s|0);if(na>>>0<2)break;c[fa>>2]=c[ja>>2];f=c[ea>>2]|0}break}case 11:{if(!(nW(b,e,c[ja>>2]|0,k)|0)){f=1;break a}break}case 13:{if(!(oW(b,e,c[ja>>2]|0,k)|0)){f=1;break a}break}default:if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,k)}while(0);na=c[ea>>2]|0;c[ja>>2]=na;c[fa>>2]=na;switch(c[u>>2]|0){case 2:{f=35;break a}case 3:{la=160;break a}default:{}}}switch(la|0){case 6:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}c[Y>>2]=g;f=c[$>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,g)}else{a[ka>>0]=10;vb[f&127](c[ha>>2]|0,ka,1)}if(d)if((c[ia>>2]|0)==(d|0)){c[h>>2]=g;f=0}else f=13;else f=3;break}case 15:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}if((d|0)>0)if((c[ia>>2]|0)==(d|0)){c[h>>2]=c[ja>>2];f=0}else f=13;else f=3;break}case 20:{c[fa>>2]=f;f=4;break}case 21:{if(!(i<<24>>24))f=5;else{c[h>>2]=c[ja>>2];f=0}break}case 23:{if(!(i<<24>>24))f=6;else{c[h>>2]=c[ja>>2];f=0}break}case 56:break;case 58:break;case 63:{tb[c[b+20>>2]&127](f);f=1;la=75;break}case 69:{f=1;la=75;break}case 79:{vW(b,c[ka>>2]|0);la=89;break}case 92:{f=wW(b,c[ea>>2]|0,g,h)|0;break}case 96:{c[fa>>2]=f;f=7;break}case 117:{f=wW(b,c[ea>>2]|0,g,h)|0;break}case 133:{c[b+276>>2]=61;f=0;break}case 134:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}f=c[$>>2]|0;do if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,g)}else if(!(a[ba>>0]|0)){c[ka>>2]=c[ca>>2];pb[c[aa>>2]&127](e,ja,g,ka,c[da>>2]|0)|0;na=c[ca>>2]|0;vb[c[$>>2]&127](c[ha>>2]|0,na,(c[ka>>2]|0)-na|0);break}else{na=c[ja>>2]|0;vb[f&127](c[ha>>2]|0,na,g-na|0);break}while(0);if(!d){c[fa>>2]=g;f=3;break}if((c[ia>>2]|0)==(d|0)){c[h>>2]=g;f=0;break}else{c[fa>>2]=g;f=13;break}}case 160:{c[h>>2]=c[ea>>2];f=0;break}}l=ma;return f|0}function sW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+16|0;p=q;k=b+296|0;m=c[k>>2]|0;do if(m){n=c[m+12>>2]|0;h=n+4|0;j=c[h>>2]|0;i=n+12|0;g=j+(c[i>>2]|0)|0;j=j+(c[n+8>>2]|0)|0;c[p>>2]=g;o=n+33|0;if(!(a[o>>0]|0))g=rW(b,c[m+16>>2]|0,c[b+224>>2]|0,g,j,p,0)|0;else{s=b+224|0;r=c[s>>2]|0;r=ob[c[r>>2]&127](r,g,j,p)|0;g=UV(b,c[s>>2]|0,g,j,r,c[p>>2]|0,p,0)|0}if(!g){g=c[p>>2]|0;if((j|0)!=(g|0)?(c[b+476>>2]|0)==3:0){c[i>>2]=g-(c[h>>2]|0);g=0;break}a[n+32>>0]=0;s=m+8|0;c[k>>2]=c[s>>2];g=b+300|0;c[s>>2]=c[g>>2];c[g>>2]=m;g=b+276|0;if(!(a[o>>0]|0)){c[g>>2]=58;g=rW(b,(c[b+472>>2]|0)!=0&1,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;break}else{c[g>>2]=57;s=b+144|0;g=c[s>>2]|0;g=ob[c[g>>2]&127](g,d,e,p)|0;g=UV(b,c[s>>2]|0,d,e,g,c[p>>2]|0,f,(a[b+480>>0]|0)==0&1)|0;break}}}else g=23;while(0);l=q;return g|0}function tW(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;n=q;m=c[b+352>>2]|0;h=m+156|0;o=b+412|0;p=b+424|0;a:do if(!(c[h>>2]|0)){d=0;i=b+420|0;k=b+468|0;j=12}else{d=c[p>>2]|0;i=b+420|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=61;g=b+468|0;e=(c[(c[h>>2]|0)+20>>2]|0)+(((a[g>>0]|0)!=0)<<31>>31)|0;f=0;while(1){if((f|0)>=(e|0)){d=1;k=g;j=12;break a}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break a}d=c[p>>2]|0}k=a[(c[(c[h>>2]|0)+16>>2]|0)+f>>0]|0;c[p>>2]=d+1;a[d>>0]=k;f=f+1|0}}while(0);b:do if((j|0)==12){NV(n,m+60|0);c:while(1){do{e=OV(n)|0;if(!e)break c;h=e+4|0}while(!(c[h>>2]|0));if(d<<24>>24){d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=12}g=c[e>>2]|0;while(1){e=a[g>>0]|0;d=c[p>>2]|0;f=(d|0)==(c[i>>2]|0);if(!(e<<24>>24))break;if(f){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0;e=a[g>>0]|0}c[p>>2]=d+1;a[d>>0]=e;g=g+1|0}if(f){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=61;f=(c[(c[h>>2]|0)+20>>2]|0)+(((a[k>>0]|0)!=0)<<31>>31)|0;e=0;while(1){if((e|0)>=(f|0)){d=1;continue c}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}j=a[(c[(c[h>>2]|0)+16>>2]|0)+e>>0]|0;c[p>>2]=d+1;a[d>>0]=j;e=e+1|0}}NV(n,m);d:while(1){do{e=OV(n)|0;if(!e)break d}while(!(a[e+32>>0]|0));if(d<<24>>24){d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=12}f=c[e>>2]|0;while(1){e=a[f>>0]|0;if(!(e<<24>>24)){d=1;continue d}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0;e=a[f>>0]|0}c[p>>2]=d+1;a[d>>0]=e;f=f+1|0}}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=0;d=c[b+428>>2]|0}while(0);l=q;return d|0}function uW(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;O=l;l=l+80|0;K=O+16|0;L=O;M=c[b+352>>2]|0;k=M+20|0;i=YV(b,k,c[g>>2]|0,0)|0;if(!i){i=BW(M+80|0,c[g>>2]|0)|0;if((i|0)!=0?(j=YV(b,k,i,24)|0,(j|0)!=0):0)if((a[b+232>>0]|0)!=0?(CW(b,j)|0)==0:0)i=1;else A=6;else i=1}else{j=i;A=6}a:do if((A|0)==6){x=c[j+12>>2]|0;k=e+36|0;m=b+376|0;t=b+388|0;u=ob[c[k>>2]&127](e,f,c[m>>2]|0,c[t>>2]|0)|0;i=u+x|0;n=c[m>>2]|0;if((i|0)>(n|0)){i=i+16|0;c[m>>2]=i;i=lb[c[b+16>>2]&127](c[t>>2]|0,i<<4)|0;if(!i){c[m>>2]=n;i=1;break}c[t>>2]=i;if((u|0)>(n|0))ob[c[k>>2]&127](e,f,u,i)|0}J=c[t>>2]|0;r=e+28|0;H=b+412|0;I=b+428|0;w=j+20|0;q=b+424|0;s=0;p=0;k=0;while(1){if((p|0)>=(u|0))break;o=c[(c[t>>2]|0)+(p<<4)>>2]|0;o=aW(b,e,o,o+(lb[c[r>>2]&127](e,o)|0)|0)|0;if(!o){i=1;break a}i=(c[o>>2]|0)+-1|0;if(a[i>>0]|0){A=15;break}a[i>>0]=1;f=s+1|0;c[J+(s<<2)>>2]=c[o>>2];n=c[t>>2]|0;if(a[n+(p<<4)+12>>0]|0){G=WV(H,e,c[n+(p<<4)+4>>2]|0,c[n+(p<<4)+8>>2]|0)|0;c[J+(f<<2)>>2]=G;if(!G){i=1;break a}}else{b:do if(!(a[o+8>>0]|0))i=1;else{i=0;while(1){if((i|0)>=(x|0)){i=1;break b}m=c[w>>2]|0;if((o|0)==(c[m+(i*12|0)>>2]|0))break;i=i+1|0}i=a[m+(i*12|0)+4>>0]|0}while(0);i=fW(b,e,i,c[n+(p<<4)+4>>2]|0,c[n+(p<<4)+8>>2]|0,H)|0;if(i|0)break a;c[J+(f<<2)>>2]=c[I>>2]}c[I>>2]=c[q>>2];i=c[o+4>>2]|0;do if(i)if(a[o+9>>0]|0){i=DW(b,i,o,c[J+(f<<2)>>2]|0,h)|0;if(!i){i=s;break}else break a}else{a[(c[o>>2]|0)+-1>>0]=2;k=k+1|0;i=s+2|0;break}else i=s+2|0;while(0);s=i;p=p+1|0}if((A|0)==15){if((c[b+144>>2]|0)!=(e|0)){i=8;break}c[b+284>>2]=c[(c[t>>2]|0)+(p<<4)>>2];i=8;break}c[b+380>>2]=s;i=c[j+8>>2]|0;c:do if((i|0)!=0?(v=c[i>>2]|0,(a[v+-1>>0]|0)!=0):0){i=0;while(1){if((i|0)>=(s|0)){f=0;p=k;G=s;break c}if((c[J+(i<<2)>>2]|0)==(v|0)){A=37;break c}i=i+2|0}}else{i=-1;A=37}while(0);if((A|0)==37){c[b+384>>2]=i;f=0;p=k;G=s}while(1){if((f|0)>=(x|0))break;i=c[w>>2]|0;n=i+(f*12|0)|0;k=c[n>>2]|0;m=(c[k>>2]|0)+-1|0;d:do if((a[m>>0]|0)==0?(y=i+(f*12|0)+8|0,z=c[y>>2]|0,(z|0)!=0):0){i=c[k+4>>2]|0;do if(i)if(a[k+9>>0]|0){i=DW(b,i,k,z,h)|0;if(!i){i=p;k=G;break d}else break a}else{a[m>>0]=2;i=p+1|0;break}else{a[m>>0]=1;i=p}while(0);c[J+(G<<2)>>2]=c[c[n>>2]>>2];c[J+(G+1<<2)>>2]=c[y>>2];k=G+2|0}else{i=p;k=G}while(0);f=f+1|0;p=i;G=k}c[J+(G<<2)>>2]=0;e:do if(!p)i=0;else{o=b+396|0;n=c[o>>2]|0;F=b+400|0;f=a[F>>0]|0;i=f&255;do if(!(p<<1>>i)){i=1<>24}while((p>>(E&255)|0)!=0);i=(i&255)>3?i:3;a[F>>0]=i;i=i&255;m=b+392|0;k=lb[c[b+16>>2]&127](c[m>>2]|0,12<>0]=f;i=1;break a}else{c[m>>2]=k;k=1<>2]|0)+(E*12|0)>>2]=-1;i=E}}while(0);E=i+-1|0;c[o>>2]=E;w=M+40|0;x=b+424|0;y=b+420|0;z=k+-1|0;A=0-k|0;B=z>>>2;C=b+233|0;D=b+468|0;i=0;v=p;g:while(1){while(1){if((i|0)>=(G|0))break e;e=J+(i<<2)|0;n=c[e>>2]|0;f=n+-1|0;if((a[f>>0]|0)==2)break;a[f>>0]=0;i=i+2|0}EW(b,L);FW(K,L);a[f>>0]=0;f=YV(b,w,n,0)|0;if(!f){i=1;break}f=c[f+4>>2]|0;if(!f){i=1;break}u=c[f+4>>2]|0;if(!u){i=27;break}q=u+20|0;r=u+16|0;p=0;while(1){f=c[q>>2]|0;o=c[r>>2]|0;if((p|0)>=(f|0))break;o=a[o+p>>0]|0;f=c[x>>2]|0;if((f|0)==(c[y>>2]|0)){if(!((eW(H)|0)<<24>>24)){i=1;break g}f=c[x>>2]|0}c[x>>2]=f+1;a[f>>0]=o;p=p+1|0}GW(K,o,f);do{t=n;n=n+1|0}while((a[t>>0]|0)!=58);GW(K,n,HW(n)|0);while(1){f=c[x>>2]|0;if((f|0)==(c[y>>2]|0)){if(!((eW(H)|0)<<24>>24)){i=1;break g}f=c[x>>2]|0}t=a[n>>0]|0;c[x>>2]=f+1;a[f>>0]=t;if(!(a[n>>0]|0))break;else n=n+1|0}t=IW(K)|0;q=c[m>>2]|0;r=t&A;n=0;s=z&t;while(1){if((c[q+(s*12|0)>>2]|0)!=(E|0))break;if((c[q+(s*12|0)+4>>2]|0)==(t|0)){f=c[q+(s*12|0)+8>>2]|0;o=c[I>>2]|0;while(1){P=a[o>>0]|0;p=P<<24>>24==0;if(p|P<<24>>24!=(a[f>>0]|0))break;f=f+1|0;o=o+1|0}if(p){i=8;break g}}if(!(n<<24>>24))n=(r>>>((d[F>>0]|0)+-1|0)&B|1)&255;P=n&255;s=s+((s|0)<(P|0)?k:0)-P|0}if(a[C>>0]|0){a[(c[x>>2]|0)+-1>>0]=a[D>>0]|0;f=c[c[u>>2]>>2]|0;while(1){n=c[x>>2]|0;if((n|0)==(c[y>>2]|0)){if(!((eW(H)|0)<<24>>24)){i=1;break g}n=c[x>>2]|0}P=a[f>>0]|0;c[x>>2]=n+1;a[n>>0]=P;if(!(a[f>>0]|0))break;else f=f+1|0}}P=c[I>>2]|0;c[I>>2]=c[x>>2];c[e>>2]=P;c[(c[m>>2]|0)+(s*12|0)>>2]=E;c[(c[m>>2]|0)+(s*12|0)+4>>2]=t;c[(c[m>>2]|0)+(s*12|0)+8>>2]=P;v=v+-1|0;i=i+2|0;if(!v)break e}break a}while(0);while(1){if((i|0)>=(G|0)){i=h;break}a[(c[J+(i<<2)>>2]|0)+-1>>0]=0;i=i+2|0}while(1){i=c[i>>2]|0;if(!i)break;a[(c[c[i+12>>2]>>2]|0)+-1>>0]=0;i=i+4|0}if(!(a[b+232>>0]|0))i=0;else{i=c[j+4>>2]|0;if(!i){i=c[M+156>>2]|0;if(!i){i=0;break}k=c[g>>2]|0}else{i=c[i+4>>2]|0;if(!i){i=27;break}j=c[g>>2]|0;while(1){k=j+1|0;if((a[j>>0]|0)==58)break;else j=k}}if((a[b+233>>0]|0)!=0?(N=c[c[i>>2]>>2]|0,(N|0)!=0):0){j=0;while(1){m=j+1|0;if(!(a[N+j>>0]|0))break;else j=m}}else m=0;c[g+4>>2]=k;p=i+20|0;c[g+16>>2]=c[p>>2];c[g+8>>2]=c[c[i>>2]>>2];c[g+20>>2]=m;q=0;while(1){r=q+1|0;if(!(a[k+q>>0]|0))break;else q=r}j=c[p>>2]|0;n=r+m+j|0;f=i+24|0;if((n|0)>(c[f>>2]|0)){j=n+24|0;o=kb[c[b+12>>2]&63](j)|0;if(!o){i=1;break}c[f>>2]=j;f=i+16|0;F3(o|0,c[f>>2]|0,c[p>>2]|0)|0;j=b+360|0;while(1){j=c[j>>2]|0;if(!j)break;n=j+12|0;if((c[n>>2]|0)==(c[f>>2]|0))c[n>>2]=o}tb[c[b+20>>2]&127](c[f>>2]|0);c[f>>2]=o;n=o;j=c[p>>2]|0}else{n=i+16|0;f=n;n=c[n>>2]|0}j=n+j|0;F3(j|0,k|0,r|0)|0;if(m|0){P=j+q|0;a[P>>0]=a[b+468>>0]|0;F3(P+1|0,c[c[i>>2]>>2]|0,m|0)|0}c[g>>2]=c[f>>2];i=0}}while(0);l=O;return i|0}function vW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+104|0;f=a+372|0;d=a+4|0;while(1){if(!b)break;a=c[e>>2]|0;if(!a)a=b;else{ub[a&63](c[d>>2]|0,c[c[b>>2]>>2]|0);a=b}h=b+4|0;g=c[h>>2]|0;c[h>>2]=c[f>>2];c[f>>2]=b;c[(c[a>>2]|0)+4>>2]=c[b+8>>2];b=g}return}function wW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;j=q;c[b+276>>2]=62;k=b+284|0;c[k>>2]=d;m=b+144|0;n=b+288|0;o=b+80|0;i=b+476|0;g=d;a:while(1){c[j>>2]=0;r=c[m>>2]|0;r=ob[c[r>>2]&127](r,g,e,j)|0;d=c[j>>2]|0;c[n>>2]=d;h=d;switch(r|0){case -15:{p=3;break a}case -4:{p=7;break a}case 0:{p=12;break a}case -1:{p=13;break a}case -2:{p=15;break a}case 15:{if(c[o>>2]|0)hW(b,c[m>>2]|0,g,h);break}case 11:{if(!(nW(b,c[m>>2]|0,g,h)|0)){d=1;break a}break}case 13:{if(!(oW(b,c[m>>2]|0,g,h)|0)){d=1;break a}break}default:{d=9;break a}}d=c[j>>2]|0;c[k>>2]=d;switch(c[i>>2]|0){case 2:{d=35;break a}case 3:{p=18;break a}default:{}}g=d}do if((p|0)==3){if(c[o>>2]|0){hW(b,c[m>>2]|0,g,h);if((c[i>>2]|0)==2){d=35;break}d=c[j>>2]|0}c[f>>2]=d;d=0}else if((p|0)==7){c[f>>2]=g;d=0}else if((p|0)==12){c[k>>2]=d;d=4}else if((p|0)==13)if(!(a[b+480>>0]|0)){c[f>>2]=g;d=0}else d=5;else if((p|0)==15)if(!(a[b+480>>0]|0)){c[f>>2]=g;d=0}else d=6;else if((p|0)==18){c[f>>2]=d;d=0}while(0);l=q;return d|0}function xW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=l;l=l+16|0;y=B+8|0;z=B+4|0;x=B;i=c[e>>2]|0;c[y>>2]=i;if((c[b+144>>2]|0)==(d|0)){s=b+284|0;c[s>>2]=i;t=b+288|0}else{t=c[b+296>>2]|0;s=t;t=t+4|0}c[s>>2]=i;c[e>>2]=0;k=d+8|0;m=b+60|0;u=b+80|0;v=b+4|0;w=b+476|0;n=d+68|0;o=b+44|0;p=d+56|0;q=b+48|0;a:while(1){j=ob[c[k>>2]&127](d,c[y>>2]|0,f,z)|0;i=c[z>>2]|0;c[t>>2]=i;r=i;b:do switch(j|0){case 40:{A=6;break a}case 0:{A=23;break a}case -2:{A=24;break a}case -4:case -1:{A=26;break a}case 7:{i=c[m>>2]|0;if(i|0){a[x>>0]=10;vb[i&127](c[v>>2]|0,x,1);break b}if(c[u>>2]|0)hW(b,d,c[y>>2]|0,r);break}case 6:{j=c[m>>2]|0;if(!j){if(!(c[u>>2]|0))break b;hW(b,d,c[y>>2]|0,r);break b}if(!(a[n>>0]|0))i=r;else{r=c[y>>2]|0;vb[j&127](c[v>>2]|0,r,i-r|0);break b}while(1){c[x>>2]=c[o>>2];r=pb[c[p>>2]&127](d,y,i,x,c[q>>2]|0)|0;c[t>>2]=c[z>>2];i=c[o>>2]|0;vb[j&127](c[v>>2]|0,i,(c[x>>2]|0)-i|0);if(r>>>0<2)break;c[s>>2]=c[y>>2];i=c[z>>2]|0}break}default:{A=28;break a}}while(0);r=c[z>>2]|0;c[y>>2]=r;c[s>>2]=r;switch(c[w>>2]|0){case 3:{A=30;break a}case 2:{i=35;break a}default:{}}}if((A|0)==6){i=c[b+76>>2]|0;if(!i){if(c[u>>2]|0)hW(b,d,c[y>>2]|0,r)}else tb[i&127](c[v>>2]|0);i=c[z>>2]|0;c[e>>2]=i;c[g>>2]=i;i=(c[w>>2]|0)==2?35:0}else if((A|0)==23){c[s>>2]=i;i=4}else if((A|0)==24)if(!(h<<24>>24))i=6;else{c[g>>2]=c[y>>2];i=0}else if((A|0)==26)if(!(h<<24>>24))i=20;else{c[g>>2]=c[y>>2];i=0}else if((A|0)==28){c[s>>2]=i;i=23}else if((A|0)==30){c[g>>2]=c[z>>2];i=0}l=B;return i|0}function yW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;d=xW(b,c[b+144>>2]|0,g,e,f,(a[b+480>>0]|0)==0&1)|0;g=c[g>>2]|0;do if(!((d|0)!=0|(g|0)==0)){d=b+276|0;if(!(c[b+472>>2]|0)){c[d>>2]=58;d=_V(b,g,e,f)|0;break}else{c[d>>2]=63;d=zW(b,g,e,f)|0;break}}while(0);l=h;return d|0}function zW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;d=rW(b,1,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;if((d|0)==0?(AW(b)|0)<<24>>24==0:0)d=1;return d|0}function AW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;a=a+360|0;while(1){a=c[a>>2]|0;if(!a){a=1;break}i=(c[a+24>>2]|0)+1|0;j=a+36|0;f=c[j>>2]|0;e=f+i|0;l=a+4|0;d=c[l>>2]|0;if((d|0)==(e|0)){a=1;break}k=a+8|0;b=c[k>>2]|0;g=b+i|0;h=a+40|0;if((g|0)>((c[h>>2]|0)-f|0)){e=lb[c[m>>2]&127](f,g)|0;if(!e){a=0;break}b=a+12|0;f=c[j>>2]|0;if((c[b>>2]|0)==(f|0))c[b>>2]=e;b=a+16|0;d=c[b>>2]|0;if(d|0)c[b>>2]=e+(d-f);c[j>>2]=e;c[h>>2]=e+g;e=e+i|0;d=c[l>>2]|0;b=c[k>>2]|0}F3(e|0,d|0,b|0)|0;c[l>>2]=e}return a|0}function BW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=b+12|0;g=b+8|0;while(1){e=c[f>>2]|0;if((e|0)==(c[g>>2]|0)){if(!((eW(b)|0)<<24>>24)){d=0;break}e=c[f>>2]|0}i=a[d>>0]|0;c[f>>2]=e+1;a[e>>0]=i;if(!(a[d>>0]|0)){h=6;break}else d=d+1|0}if((h|0)==6){i=b+16|0;d=c[i>>2]|0;c[i>>2]=c[f>>2]}return d|0}function CW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[b+352>>2]|0;j=n+80|0;k=n+92|0;l=n+88|0;m=n+60|0;n=n+96|0;i=d+4|0;h=c[d>>2]|0;a:while(1){switch(a[h>>0]|0){case 0:{e=1;break a}case 58:{g=c[d>>2]|0;while(1){e=c[k>>2]|0;f=(e|0)==(c[l>>2]|0);if((g|0)==(h|0))break;if(f){if(!((eW(j)|0)<<24>>24)){e=0;break a}e=c[k>>2]|0}f=a[g>>0]|0;c[k>>2]=e+1;a[e>>0]=f;g=g+1|0}if(f){if(!((eW(j)|0)<<24>>24)){e=0;break a}e=c[k>>2]|0}c[k>>2]=e+1;a[e>>0]=0;e=YV(b,m,c[n>>2]|0,8)|0;if(!e){e=0;break a}f=c[n>>2]|0;if((c[e>>2]|0)==(f|0))c[n>>2]=c[k>>2];else c[k>>2]=f;c[i>>2]=e;break}default:{}}h=h+1|0}return e|0}function DW(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=a[f>>0]|0;i=c[d>>2]|0;h=(i|0)==0;do if(!(k<<24>>24))if(h){m=0;j=11}else h=28;else if(((!h?(a[i>>0]|0)==120:0)?(a[i+1>>0]|0)==109:0)?(a[i+2>>0]|0)==108:0){h=a[i+3>>0]|0;if((h<<24>>24==110?(a[i+4>>0]|0)==115:0)?(a[i+5>>0]|0)==0:0){h=39;break}m=h<<24>>24==0&1;j=11}else{m=0;j=11}while(0);a:do if((j|0)==11){l=m<<24>>24!=0;h=1;i=1;n=0;while(1){j=i<<24>>24!=0;if(!(k<<24>>24))break;do if(j){if((n|0)<=36?k<<24>>24==(a[139175+n>>0]|0):0)break;i=0}else i=0;while(0);do if(!(l|h<<24>>24==0)){if((n|0)<=29?k<<24>>24==(a[139212+n>>0]|0):0)break;h=0}while(0);k=n+1|0;n=k;k=a[f+k>>0]|0}if((m&255|0)!=(j&(n|0)==36&1|0)){h=l?38:40;break}if(!(h<<24>>24!=0&(n|0)==29)){o=b+468|0;n=n+((a[o>>0]|0)!=0&1)|0;h=b+372|0;j=c[h>>2]|0;do if(!j){h=b+12|0;i=kb[c[h>>2]&63](28)|0;if(!i){h=1;break a}j=n+24|0;m=kb[c[h>>2]&63](j)|0;c[i+16>>2]=m;if(!m){tb[c[b+20>>2]&127](i);h=1;break a}else{c[i+24>>2]=j;j=i;break}}else{i=j+24|0;if((n|0)>(c[i>>2]|0)){k=j+16|0;l=n+24|0;m=lb[c[b+16>>2]&127](c[k>>2]|0,l)|0;if(!m){h=1;break a}c[k>>2]=m;c[i>>2]=l}c[h>>2]=c[j+4>>2]}while(0);c[j+20>>2]=n;i=j+16|0;F3(c[i>>2]|0,f|0,n|0)|0;h=a[o>>0]|0;if(h<<24>>24)a[(c[i>>2]|0)+(n+-1)>>0]=h;c[j>>2]=d;c[j+12>>2]=e;i=d+4|0;c[j+8>>2]=c[i>>2];if((a[f>>0]|0)==0?((c[b+352>>2]|0)+152|0)==(d|0):0)h=0;else h=j;c[i>>2]=h;c[j+4>>2]=c[g>>2];c[g>>2]=j;if((e|0)!=0?(p=c[b+100>>2]|0,(p|0)!=0):0){vb[p&127](c[b+4>>2]|0,c[d>>2]|0,c[i>>2]|0?f:0);h=0}else h=0}else h=40}while(0);return h|0}function EW(a,b){a=a|0;b=b|0;var d=0;d=b;c[d>>2]=0;c[d+4>>2]=0;b=b+8|0;c[b>>2]=KW(a)|0;c[b+4>>2]=0;return}function FW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=b;g=c[d+4>>2]^1936682341;e=a;c[e>>2]=c[d>>2]^1886610805;c[e+4>>2]=g;e=b+8|0;g=e;d=c[g+4>>2]^1685025377;f=a+8|0;c[f>>2]=c[g>>2]^1852075885;c[f+4>>2]=d;f=b;b=c[f+4>>2]^1819895653;d=a+16|0;c[d>>2]=c[f>>2]^1852142177;c[d+4>>2]=b;d=c[e+4>>2]^1952801890;b=a+24|0;c[b>>2]=c[e>>2]^2037671283;c[b+4>>2]=d;c[a+40>>2]=a+32;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;return}function GW(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0;n=e+f|0;o=b+40|0;p=b+40|0;q=b+32|0;r=b+33|0;s=b+34|0;t=b+35|0;h=b+36|0;i=b+37|0;j=b+38|0;k=b+39|0;l=b+24|0;m=b+48|0;f=e;do{while(1){g=c[o>>2]|0;if(f>>>0>=n>>>0){e=0;break}if(g>>>0>=p>>>0){e=1;break}e=a[f>>0]|0;c[o>>2]=g+1;a[g>>0]=e;f=f+1|0}if(g>>>0

    >>0)break;A=d[q>>0]|0;B=A3(d[r>>0]|0|0,0,8)|0;g=z;y=A3(d[s>>0]|0|0,0,16)|0;g=g|z;w=A3(d[t>>0]|0|0,0,24)|0;g=g|z|(d[h>>0]|0);u=A3(d[i>>0]|0|0,0,40)|0;g=g|z;x=A3(d[j>>0]|0|0,0,48)|0;g=g|z;v=A3(d[k>>0]|0|0,0,56)|0;v=B|A|y|w|u|x|v;g=g|z;x=l;u=g^c[x+4>>2];w=l;c[w>>2]=v^c[x>>2];c[w+4>>2]=u;JW(b,2);w=b;g=c[w+4>>2]^g;u=b;c[u>>2]=c[w>>2]^v;c[u+4>>2]=g;c[o>>2]=q;u=m;u=s3(c[u>>2]|0,c[u+4>>2]|0,8,0)|0;g=m;c[g>>2]=u;c[g+4>>2]=z}while(e);return}function HW(b){b=b|0;var c=0;c=0;while(1){if(!(a[b>>0]|0))break;c=c+1|0;b=b+1|0}return c|0}function IW(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;f=a+32|0;h=(c[a+40>>2]|0)-f|0;e=a+48|0;e=s3(c[e>>2]|0,c[e+4>>2]|0,h|0,0)|0;e=A3(e|0,z|0,56)|0;b=z;switch(h<<24>>24|0){case 7:{e=A3(d[a+38>>0]|0|0,0,48)|0|e;b=z|b;g=3;break}case 6:{g=3;break}case 5:{g=4;break}case 4:{g=5;break}case 3:{g=6;break}case 2:{g=7;break}case 1:{g=8;break}default:{}}if((g|0)==3){h=A3(d[a+37>>0]|0|0,0,40)|0;e=h|e;b=z|b;g=4}if((g|0)==4){b=d[a+36>>0]|0|b;g=5}if((g|0)==5){h=A3(d[a+35>>0]|0|0,0,24)|0;e=h|e;b=z|b;g=6}if((g|0)==6){h=A3(d[a+34>>0]|0|0,0,16)|0;e=h|e;b=z|b;g=7}if((g|0)==7){h=A3(d[a+33>>0]|0|0,0,8)|0;b=z|b;e=h|e;g=8}if((g|0)==8)e=e|(d[f>>0]|0);h=a+24|0;i=h;g=c[i+4>>2]^b;f=h;c[f>>2]=c[i>>2]^e;c[f+4>>2]=g;JW(a,2);f=a;b=c[f+4>>2]^b;g=a;c[g>>2]=c[f>>2]^e;c[g+4>>2]=b;g=a+16|0;b=g;e=c[b+4>>2]|0;f=g;c[f>>2]=c[b>>2]^255;c[f+4>>2]=e;JW(a,4);f=a;a=a+8|0;z=c[a+4>>2]^c[f+4>>2]^c[g+4>>2]^c[h+4>>2];return c[a>>2]^c[f>>2]^c[g>>2]^c[h>>2]|0}function JW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=a+8|0;f=a+24|0;g=a+16|0;d=0;while(1){if((d|0)>=(b|0))break;h=e;n=c[h>>2]|0;h=c[h+4>>2]|0;o=a;o=s3(c[o>>2]|0,c[o+4>>2]|0,n|0,h|0)|0;k=z;m=A3(n|0,h|0,13)|0;l=z;h=z3(n|0,h|0,51)|0;h=(m|h)^o;l=(l|z)^k;m=f;n=c[m>>2]|0;m=c[m+4>>2]|0;j=g;j=s3(c[j>>2]|0,c[j+4>>2]|0,n|0,m|0)|0;i=z;q=A3(n|0,m|0,16)|0;p=z;m=z3(n|0,m|0,48)|0;m=(q|m)^j;p=(p|z)^i;o=s3(k|0,o|0,m|0,p|0)|0;k=z;q=a;c[q>>2]=o;c[q+4>>2]=k;q=A3(m|0,p|0,21)|0;n=z;p=z3(m|0,p|0,43)|0;m=f;c[m>>2]=(q|p)^o;c[m+4>>2]=(n|z)^k;i=s3(j|0,i|0,h|0,l|0)|0;j=z;m=A3(h|0,l|0,17)|0;k=z;l=z3(h|0,l|0,47)|0;h=e;c[h>>2]=(m|l)^i;c[h+4>>2]=(k|z)^j;h=g;c[h>>2]=j;c[h+4>>2]=i;d=d+1|0}return}function KW(a){a=a|0;var b=0;while(1){b=c[a+472>>2]|0;if(!b)break;else a=b}return c[a+492>>2]|0}function LW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=l;l=l+16|0;I=L;J=L+4|0;K=c[b+352>>2]|0;o=d+16|0;p=d+40|0;q=b+144|0;r=b+284|0;s=e<<24>>24==0;t=h+12|0;v=h+16|0;w=h+8|0;x=d+44|0;y=d+64|0;z=b+436|0;A=b+452|0;B=b+448|0;C=(K+80|0)==(h|0);D=b+268|0;E=K+130|0;F=K+129|0;G=b+296|0;H=b+224|0;i=0;a:while(1){b:while(1){switch(ob[c[o>>2]&127](d,f,g,I)|0){case -4:{i=0;n=61;break a}case 0:{n=4;break a}case -1:{n=6;break a}case 6:{n=21;break b}case -3:{n=22;break b}case 7:case 39:{n=23;break b}case 10:{j=lb[c[p>>2]&127](d,f)|0;c:do if((j|0)<0)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;j=1;i=14}else{j=1;i=14}else{if(s&(j|0)==32){k=c[t>>2]|0;if((c[v>>2]|0)==(k|0)){j=4;break}if((a[k+-1>>0]|0)==32){j=4;break}}m=gX(j,J)|0;k=0;while(1){if((k|0)>=(m|0)){j=0;break c}j=c[t>>2]|0;if((j|0)==(c[w>>2]|0)){if(!((eW(h)|0)<<24>>24)){j=1;i=1;break c}j=c[t>>2]|0}M=a[J+k>>0]|0;c[t>>2]=j+1;a[j>>0]=M;k=k+1|0}}while(0);switch(j&7){case 4:case 0:break b;default:{}}break}case 9:{j=c[y>>2]|0;j=(nb[c[x>>2]&63](d,f+j|0,(c[I>>2]|0)+(0-j)|0)|0)&255;if(j<<24>>24){n=31;break b}j=c[y>>2]|0;j=WV(z,d,f+j|0,(c[I>>2]|0)+(0-j)|0)|0;if(!j){i=1;n=61;break a}m=YV(b,K,j,0)|0;c[B>>2]=c[A>>2];do if(C){if(!(c[D>>2]|0))if(!m)break b;else break;if(!(a[E>>0]|0)){j=(m|0)!=0;if(!(a[F>>0]|0)){n=45;break}else{u=j;n=47;break}}else{j=(m|0)!=0;if(!(c[G>>2]|0)){n=45;break}else{u=j;n=47;break}}}else if(!(a[F>>0]|0))if(!m){i=11;n=61;break a}else{n=46;break}else{j=(m|0)!=0;if(!(a[E>>0]|0)){u=j;n=47;break}else{n=45;break}}while(0);if((n|0)==45)if(j)n=46;else{i=11;n=61;break a}else if((n|0)==47?(n=0,!u):0)break b;if((n|0)==46?(n=0,(a[m+34>>0]|0)==0):0){i=24;n=61;break a}k=m+32|0;if(a[k>>0]|0){n=49;break a}if(c[m+28>>2]|0){n=52;break a}j=c[m+4>>2]|0;if(!j){n=55;break a}m=j+(c[m+8>>2]|0)|0;a[k>>0]=1;m=LW(b,c[H>>2]|0,e,j,m,h)|0;a[k>>0]=0;j=(m|0)==0;if(j)break b;else{j=(j^1)&1;i=m}break}default:{n=58;break a}}if(j)break a}if((n|0)==21){n=0;if(!(cW(h,d,f,c[I>>2]|0)|0)){i=1;n=61;break}}else if((n|0)==22){c[I>>2]=f+(c[y>>2]|0);n=23}else if((n|0)==31){n=0;f=c[t>>2]|0;if((f|0)==(c[w>>2]|0)){if(!((eW(h)|0)<<24>>24)){i=1;n=61;break}f=c[t>>2]|0}c[t>>2]=f+1;a[f>>0]=j}do if((n|0)==23){n=0;f=c[t>>2]|0;if(s){if((c[v>>2]|0)==(f|0))break;if((a[f+-1>>0]|0)==32)break}if((f|0)==(c[w>>2]|0)){if(!((eW(h)|0)<<24>>24)){i=1;n=61;break a}f=c[t>>2]|0}c[t>>2]=f+1;a[f>>0]=32}while(0);f=c[I>>2]|0}if((n|0)==4)if((c[q>>2]|0)==(d|0)){c[r>>2]=c[I>>2];i=4;n=61}else{i=4;n=61}else if((n|0)==6)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=4;n=61}else{i=4;n=61}else if((n|0)==49)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=12;n=61}else{i=12;n=61}else if((n|0)==52)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=15;n=61}else{i=15;n=61}else if((n|0)==55)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=16;n=61}else{i=16;n=61}else if((n|0)==58)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=23;n=61}else{i=23;n=61}l=L;return i|0}function MW(a){a=a|0;var b=0;b=a+8|0;return ((a|0)<1?0:(b|0)>0?b:0)|0}function NW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+80|0;d=c+16|0;e=c;EW(a,e);FW(d,e);GW(d,b,HW(b)|0);b=IW(d)|0;l=c;return b|0}function OW(b,c){b=b|0;c=c|0;var d=0;while(1){d=a[b>>0]|0;if(d<<24>>24!=(a[c>>0]|0)){c=0;break}if(!(d<<24>>24)){c=1;break}c=c+1|0;b=b+1|0}return c|0}function PW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;i=k;f=c[b+124>>2]|0;a:do if(!f)e=18;else{e=0;while(1){if((e|0)==256)break;c[i+(e<<2)>>2]=-1;e=e+1|0}g=i+1028|0;c[g>>2]=0;j=i+1024|0;c[j>>2]=0;h=i+1032|0;c[h>>2]=0;do if(nb[f&63](c[b+244>>2]|0,d,i)|0){f=c[b+12>>2]|0;e=hX()|0;e=kb[f&63](e)|0;c[b+236>>2]=e;if(!e){e=c[h>>2]|0;if(!e)e=1;else{tb[e&127](c[j>>2]|0);e=1}}else{e=ob[(a[b+232>>0]<<24>>24?65:64)&127](e,i,c[g>>2]|0,c[j>>2]|0)|0;if(!e)break;c[b+240>>2]=c[j>>2];c[b+248>>2]=c[h>>2];c[b+144>>2]=e;e=0}break a}while(0);e=c[h>>2]|0;if(e|0)tb[e&127](c[j>>2]|0);e=18}while(0);l=k;return e|0}function QW(b,d){b=b|0;d=d|0;a[b+4>>0]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b>>2]=0;c[b+16>>2]=d;return}function RW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;l=c[b+352>>2]|0;m=b+424|0;n=b+420|0;o=b+412|0;p=b+428|0;q=l+152|0;r=b+368|0;j=l+60|0;k=l+80|0;a:while(1){h=d;b:while(1){if(!(a[d>>0]|0)){d=1;break a}f=a[h>>0]|0;switch(f<<24>>24){case 0:case 12:{s=5;break b}case 61:break b;default:{}}e=c[m>>2]|0;if((e|0)==(c[n>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break a}e=c[m>>2]|0;f=a[h>>0]|0}c[m>>2]=e+1;a[e>>0]=f;h=h+1|0}if((s|0)==5){s=0;d=c[m>>2]|0;if((d|0)==(c[n>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;d=YV(b,l,c[p>>2]|0,0)|0;if(d|0)a[d+32>>0]=1;d=(a[h>>0]|0)==0?h:h+1|0;c[m>>2]=c[p>>2];continue}d=c[m>>2]|0;if((c[p>>2]|0)==(d|0))f=q;else{if((d|0)==(c[n>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;f=YV(b,j,c[p>>2]|0,8)|0;if(!f){d=0;break}e=c[f>>2]|0;i=c[p>>2]|0;d=i;if((e|0)==(i|0)){i=BW(k,e)|0;c[f>>2]=i;if(!i){d=0;break}d=c[p>>2]|0}c[m>>2]=d}c:while(1){i=h+1|0;e=a[i>>0]|0;g=(d|0)==(c[n>>2]|0);switch(e<<24>>24){case 0:case 12:break c;default:{}}if(g){if(!((eW(o)|0)<<24>>24)){d=0;break a}d=c[m>>2]|0;e=a[i>>0]|0}c[m>>2]=d+1;a[d>>0]=e;h=i;d=c[m>>2]|0}if(g){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;if(DW(b,f,0,c[p>>2]|0,r)|0){d=0;break}c[m>>2]=c[p>>2];d=(a[i>>0]|0)==0?i:h+2|0}return d|0}function SW(a,b){a=a|0;b=b|0;var d=0,e=0;if(a|0?(d=a+4|0,e=(c[d>>2]|0)==(c[a>>2]|0),c[a>>2]=b,e):0)c[d>>2]=b;return}function TW(a,b,d){a=a|0;b=b|0;d=d|0;if(a|0){c[a+52>>2]=b;c[a+56>>2]=d}return}function UW(a,b){a=a|0;b=b|0;if(a|0)c[a+60>>2]=b;return}function VW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=(b|0)==0;a:do if(!(g|(e|0)<0)?!((d|0)==0&(e|0)!=0):0){h=b+476|0;switch(c[h>>2]|0){case 3:{c[b+280>>2]=33;g=0;break a}case 2:{c[b+280>>2]=36;g=0;break a}case 0:{if((c[b+472>>2]|0)==0?(WW(b)|0)<<24>>24==0:0){c[b+280>>2]=1;g=0;break a}break}default:{}}c[h>>2]=1;if(e|0){g=YW(b,e)|0;if(!g){g=0;break}F3(g|0,d|0,e|0)|0;g=ZW(b,e,f)|0;break}a[b+480>>0]=f;if(!f)g=1;else{g=b+24|0;j=c[g>>2]|0;d=b+292|0;c[d>>2]=j;f=c[b+28>>2]|0;c[b+40>>2]=f;e=b+276|0;f=ob[c[e>>2]&127](b,j,f,g)|0;c[b+280>>2]=f;if(f|0){c[b+288>>2]=c[b+284>>2];c[e>>2]=66;g=0;break}switch(c[h>>2]|0){case 3:{j=c[b+144>>2]|0;xb[c[j+48>>2]&31](j,c[d>>2]|0,c[g>>2]|0,b+404|0);c[d>>2]=c[g>>2];g=2;break a}case 1:case 0:{c[h>>2]=2;g=1;break a}default:{g=1;break a}}}}else i=3;while(0);if((i|0)==3)if(g)g=0;else{c[b+280>>2]=41;g=0}return g|0}function WW(b){b=b|0;var d=0;d=b+492|0;if(!(c[d>>2]|0))c[d>>2]=_W()|0;if(!(a[b+232>>0]|0))b=1;else b=RW(b,139242)|0;return b|0}function XW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return c[a+280>>2]|0}function YW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(!a)d=0;else{if((b|0)<0){c[a+280>>2]=1;d=0;break}switch(c[a+476>>2]|0){case 3:{c[a+280>>2]=33;d=0;break a}case 2:{c[a+280>>2]=36;d=0;break a}default:{m=a+32|0;j=c[m>>2]|0;n=a+28|0;e=c[n>>2]|0;d=e;if((j-e|0)>=(b|0))break a;p=a+24|0;k=c[p>>2]|0;i=e-k|0;e=i+b|0;if((e|0)<0){c[a+280>>2]=1;d=0;break a}l=a+8|0;f=c[l>>2]|0;q=f;g=k-q|0;h=(g|0)>1024;b=h?1024:g;e=b+e|0;do if((e|0)>(j-q|0)){d=j-k|0;d=(d|0)==0?1024:d;do d=d<<1;while((d|0)<(e|0)&(d|0)>0);if((d|0)<1){c[a+280>>2]=1;d=0;break a}e=kb[c[a+12>>2]&63](d)|0;if(!e){c[a+280>>2]=1;d=0;break a}c[m>>2]=e+d;d=c[p>>2]|0;if(!d){d=e+(c[n>>2]|0)|0;c[n>>2]=d;c[l>>2]=e;o=22;break}else{q=d;o=q-(c[l>>2]|0)|0;o=(o|0)<1024?o:1024;F3(e|0,d+(0-o)|0,(c[n>>2]|0)-q+o|0)|0;tb[c[a+20>>2]&127](c[l>>2]|0);c[l>>2]=e;d=e+((c[n>>2]|0)-(c[p>>2]|0))+o|0;c[n>>2]=d;e=e+o|0;o=22;break}}else if(h){e=g-b|0;G3(f|0,f+e|0,b+i|0)|0;e=0-e|0;d=(c[n>>2]|0)+e|0;c[n>>2]=d;e=(c[p>>2]|0)+e|0;o=22}while(0);if((o|0)==22)c[p>>2]=e;c[a+288>>2]=0;c[a+284>>2]=0;c[a+292>>2]=0;break a}}}while(0);return d|0}function ZW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!b)d=0;else{f=b+476|0;switch(c[f>>2]|0){case 3:{c[b+280>>2]=33;d=0;break a}case 2:{c[b+280>>2]=36;d=0;break a}case 0:{if((c[b+472>>2]|0)==0?(WW(b)|0)<<24>>24==0:0){c[b+280>>2]=1;d=0;break a}break}default:{}}c[f>>2]=1;g=b+24|0;j=c[g>>2]|0;h=b+292|0;c[h>>2]=j;k=b+28|0;i=(c[k>>2]|0)+d|0;c[k>>2]=i;c[b+40>>2]=i;k=b+36|0;c[k>>2]=(c[k>>2]|0)+d;a[b+480>>0]=e;d=b+276|0;i=ob[c[d>>2]&127](b,j,i,g)|0;c[b+280>>2]=i;if(i|0){c[b+288>>2]=c[b+284>>2];c[d>>2]=66;d=0;break}switch(c[f>>2]|0){case 3:{d=2;break}case 1:case 0:{if(!e)d=1;else{c[f>>2]=2;d=1;break a}break}default:d=1}k=c[b+144>>2]|0;xb[c[k+48>>2]&31](k,c[h>>2]|0,c[g>>2]|0,b+404|0);c[h>>2]=c[g>>2]}while(0);return d|0}function _W(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;if(!($W(a)|0)){d=bX()|0;d=(H1()|0)^d;c[a>>2]=d;a=aX(139296,O(d,2147483647)|0)|0}else a=aX(139283,c[a>>2]|0)|0;l=b;return a|0}function $W(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=X_(139283,0,f)|0;if((e|0)<0)b=0;else{b=0;while(1){g=G1(e,a+b|0,4-b|0)|0;d=g+b|0;if((g|0)>0)if(d>>>0<4)b=d;else{b=1;break}if((c[(O_()|0)>>2]|0)!=4){b=0;break}}X0(e)|0}l=f;return b|0}function aX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=Ta(139361)|0;if(d|0?(b$(d,139381)|0)==0:0){d=c[15686]|0;c[e>>2]=a;c[e+4>>2]=8;c[e+8>>2]=b;c[e+12>>2]=4;g1(d,139383,e)|0}l=f;return b|0}function bX(){var a=0,b=0;b=l;l=l+16|0;a=b;if(!(Ua(a|0,0)|0)){l=b;return c[a+4>>2]|0}else qa(139308,139330,819,139341);return 0}function cX(a){a=a|0;if(!a)a=41;else a=c[a+280>>2]|0;return a|0}function dX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)a=0;else{b=a+284|0;d=c[b>>2]|0;if(d|0?(e=a+292|0,f=c[e>>2]|0,d>>>0>=f>>>0):0){g=c[a+144>>2]|0;xb[c[g+48>>2]&31](g,f,d,a+404|0);c[e>>2]=c[b>>2]}a=(c[a+404>>2]|0)+1|0}return a|0}function eX(a){a=a|0;do switch(a|0){case 41:{a=139420;break}case 1:{a=140692;break}case 2:{a=140679;break}case 3:{a=140662;break}case 4:{a=140630;break}case 5:{a=140615;break}case 6:{a=140597;break}case 7:{a=140582;break}case 8:{a=140562;break}case 9:{a=140534;break}case 10:{a=140499;break}case 11:{a=140482;break}case 12:{a=140455;break}case 13:{a=140435;break}case 14:{a=140397;break}case 15:{a=140370;break}case 16:{a=140328;break}case 17:{a=140281;break}case 18:{a=140264;break}case 19:{a=140213;break}case 20:{a=140190;break}case 21:{a=140144;break}case 22:{a=140117;break}case 23:{a=140066;break}case 24:{a=140030;break}case 25:{a=139978;break}case 26:{a=139933;break}case 27:{a=139918;break}case 28:{a=139892;break}case 29:{a=139854;break}case 30:{a=139822;break}case 31:{a=139789;break}case 32:{a=139755;break}case 33:{a=139738;break}case 34:{a=139717;break}case 35:{a=139701;break}case 36:{a=139684;break}case 37:{a=139640;break}case 38:{a=139560;break}case 39:{a=139501;break}case 40:{a=139437;break}default:a=0}while(0);return a|0}function fX(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;f=0;a:while(1){if(e>>>0<=a>>>0)break;h=e+-1|0;g=d[h>>0]|0;do if((g&248|0)==240)if((f+1|0)>>>0>3){i=5;break a}else f=0;else{if((g&240|0)==224)if((f+1|0)>>>0>2){i=8;break a}else{f=0;break}if((g&224|0)==192)if((f+1|0)>>>0>1){i=11;break a}else{f=0;break}else if(!(g&128))break a;else break}while(0);e=h;f=f+1|0}if((i|0)==5)e=e+3|0;else if((i|0)==8)e=e+2|0;else if((i|0)==11)e=e+1|0;c[b>>2]=e;return}function gX(b,c){b=b|0;c=c|0;do if((b|0)>=0){if((b|0)<128){a[c>>0]=b;b=1;break}if((b|0)<2048){a[c>>0]=b>>>6|192;a[c+1>>0]=b&63|128;b=2;break}if((b|0)<65536){a[c>>0]=b>>>12|224;a[c+1>>0]=b>>>6&63|128;a[c+2>>0]=b&63|128;b=3;break}if((b|0)<1114112){a[c>>0]=b>>>18|240;a[c+1>>0]=b>>>12&63|128;a[c+2>>0]=b>>>6&63|128;a[c+3>>0]=b&63|128;b=4}else b=0}else b=0;while(0);return b|0}function hX(){return 1908}function iX(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=0;while(1){if((i|0)==364){i=0;break}a[e+i>>0]=a[56472+i>>0]|0;i=i+1|0}a:while(1){if((i|0)>=128){j=5;break}switch(a[56544+i>>0]|0){case 0:case 28:break;default:if((c[f+(i<<2)>>2]|0)!=(i|0)){e=0;break a}}i=i+1|0}b:do if((j|0)==5){q=e+72|0;m=e+372|0;n=e+884|0;o=(g|0)==0;l=0;while(1){if((l|0)>=256)break;p=c[f+(l<<2)>>2]|0;do if((p|0)==-1){a[q+l>>0]=1;b[m+(l<<1)>>1]=-1;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=0}else{if((p|0)<0){if(o|(p|0)<-4){e=0;break b}a[q+l>>0]=3-p;a[n+(l<<2)>>0]=0;b[m+(l<<1)>>1]=0;break}if((p|0)<128){i=a[56544+p>>0]|0;switch(i<<24>>24){case 0:case 28:break;default:if((p|0)!=(l|0)){e=0;break b}}a[q+l>>0]=i;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=p;b[m+(l<<1)>>1]=(p|0)==0?-1:p&65535;break}if((jX(p)|0)<0){a[q+l>>0]=0;b[m+(l<<1)>>1]=-1;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=0;break}if((p|0)>65535){e=0;break b}i=p>>>8;j=p>>>5&7;k=1<<(p&31);if(!(c[56836+((d[140706+i>>0]<<3|j)<<2)>>2]&k))a[q+l>>0]=c[56836+((d[140962+i>>0]<<3|j)<<2)>>2]&k|0?26:28;else a[q+l>>0]=22;a[n+(l<<2)>>0]=gX(p,n+(l<<2)+1|0)|0;b[m+(l<<1)>>1]=p}while(0);l=l+1|0}c[e+368>>2]=h;c[e+364>>2]=g;if(!o){c[e+328>>2]=106;c[e+332>>2]=106;c[e+336>>2]=106;c[e+340>>2]=107;c[e+344>>2]=107;c[e+348>>2]=107;c[e+352>>2]=108;c[e+356>>2]=108;c[e+360>>2]=108}c[e+56>>2]=13;c[e+60>>2]=14}while(0);return e|0}function jX(b){b=b|0;var c=0;switch(b>>8|0){case 223:case 222:case 221:case 220:case 219:case 218:case 217:case 216:{b=-1;break}case 0:{if(!(a[56544+b>>0]|0))b=-1;else c=4;break}case 255:{if((b|1|0)==65535)b=-1;else c=4;break}default:c=4}return b|0}function kX(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=0;else a=c[56836+(((d[140962+(a>>>8)>>0]|0)<<3|a>>>5&7)<<2)>>2]&1<<(a&31);return a|0}function lX(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=0;else a=c[56836+(((d[140706+(a>>>8)>>0]|0)<<3|a>>>5&7)<<2)>>2]&1<<(a&31);return a|0}function mX(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=1;else a=(jX(a)|0)>>>31;return a|0}function nX(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;m=q;n=b+364|0;o=b+884|0;p=b+368|0;k=b+72|0;while(1){i=c[e>>2]|0;if((i|0)==(f|0)){h=0;break}r=d[i>>0]|0;j=o+(r<<2)+1|0;r=a[o+(r<<2)>>0]|0;b=r<<24>>24;if(!(r<<24>>24)){b=gX(lb[c[n>>2]&127](c[p>>2]|0,i)|0,m)|0;if((b|0)>(h-(c[g>>2]|0)|0)){h=2;break}i=c[e>>2]|0;j=m;i=i+((d[k+(d[i>>0]|0)>>0]|0)+-3)|0}else{if((h-(c[g>>2]|0)|0)<(b|0)){h=2;break}i=i+1|0}c[e>>2]=i;F3(c[g>>2]|0,j|0,b|0)|0;c[g>>2]=(c[g>>2]|0)+b}l=q;return h|0}function oX(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=a+372|0;n=a+364|0;o=a+368|0;l=a+72|0;while(1){k=c[e>>2]|0;a=k>>>0>>0;i=c[g>>2]|0;if(!(a&i>>>0>>0))break;a=b[m+((d[k>>0]|0)<<1)>>1]|0;if(!(a<<16>>16)){a=(lb[c[n>>2]&127](c[o>>2]|0,k)|0)&65535;i=c[e>>2]|0;j=(d[l+(d[i>>0]|0)>>0]|0)+-3|0}else{j=1;i=k}c[e>>2]=i+j;k=c[g>>2]|0;c[g>>2]=k+2;b[k>>1]=a}return ((i|0)!=(h|0)|a^1?0:2)|0}function pX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if(e>>>0>>0){n=b+72|0;do switch(a[n+(d[e>>0]|0)>>0]|0){case 12:{h=QX(12,b,e+1|0,f,g)|0;break a}case 13:{h=QX(13,b,e+1|0,f,g)|0;break a}case 2:{h=e+1|0;if((f-h|0)<=0){h=-1;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 16:{h=RX(b,e+2|0,f,g)|0;break a}case 15:{h=MX(b,e+2|0,f,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;h=29;break a}default:{c[g>>2]=h;h=0;break a}}}case 9:{if((e+1|0)==(f|0)){c[g>>2]=f;h=-15;break a}else k=3;break}case 10:case 21:{k=3;break}case 30:{h=GX(b,e+1|0,f,g)|0;break a}case 35:{c[g>>2]=e+1;h=38;break a}case 20:{c[g>>2]=e+1;h=25;break a}case 4:{i=e+1|0;h=f-i|0;if((h|0)<=0){h=-26;break a}if((a[i>>0]|0)==93){if((h|0)<=1){h=-1;break a}if((a[e+2>>0]|0)==62){c[g>>2]=e+3;h=34;break a}}c[g>>2]=i;h=26;break a}case 31:{c[g>>2]=e+1;h=23;break a}case 32:{h=e+1|0;if((f-h|0)<=0){h=-24;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 33:{c[g>>2]=e+2;h=36;break a}case 15:{c[g>>2]=e+2;h=35;break a}case 34:{c[g>>2]=e+2;h=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;h=24;break a}default:{c[g>>2]=h;h=0;break a}}}case 36:{c[g>>2]=e+1;h=21;break a}case 11:{c[g>>2]=e+1;h=17;break a}case 19:{h=SX(b,e+1|0,f,g)|0;break a}case 5:{if((f-e|0)<2){h=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0))if(!(lb[c[b+328>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=2}else{h=18;i=2}break}case 6:{if((f-e|0)<3){h=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0))if(!(lb[c[b+332>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=3}else{h=18;i=3}break}case 7:{if((f-e|0)<4){h=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0))if(!(lb[c[b+336>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=4}else{h=18;i=4}break}case 24:case 22:{h=18;i=1;break}case 23:case 27:case 26:case 25:{h=19;i=1;break}default:{c[g>>2]=e;h=0;break a}}while(0);if((k|0)==3){j=f;i=e;b:while(1){h=i;i=i+1|0;if((j-i|0)<=0){k=18;break}switch(a[n+(d[i>>0]|0)>>0]|0){case 10:case 21:continue b;case 9:break;default:{k=17;break b}}if((h+2|0)==(f|0)){k=17;break}}if((k|0)==17){c[g>>2]=i;h=15;break}else if((k|0)==18){c[g>>2]=i;h=15;break}}k=b+328|0;l=b+332|0;m=b+336|0;j=e+i|0;c:while(1){i=f-j|0;if((i|0)<=0){k=99;break}switch(a[n+(d[j>>0]|0)>>0]|0){case 29:{k=56;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{k=70;break c}case 34:{k=89;break c}case 33:{k=92;break c}case 15:{k=95;break c}case 27:case 26:case 25:case 24:case 22:{e=h;j=j+1|0;h=e;continue c}case 5:{if((i|0)<2){h=-2;break a}if(!(lb[c[k>>2]&127](b,j)|0)){k=60;break c}e=h;j=j+2|0;h=e;continue c}case 6:{if((i|0)<3){h=-2;break a}if(!(lb[c[l>>2]&127](b,j)|0)){k=64;break c}e=h;j=j+3|0;h=e;continue c}case 7:{if((i|0)<4){h=-2;break a}if(!(lb[c[m>>2]&127](b,j)|0)){k=68;break c}e=h;j=j+4|0;h=e;continue c}case 23:{i=j+1|0;switch(h&63){case 18:break;case 41:{h=19;j=i;continue c}default:{e=h;j=i;h=e;continue c}}h=f-i|0;if((h|0)<=0){h=-1;break a}switch(a[n+(d[i>>0]|0)>>0]|0){case 29:{k=74;break c}case 27:case 26:case 25:case 24:case 22:{h=41;j=j+2|0;continue c}case 5:{if((h|0)<2){h=-2;break a}if(!(lb[c[k>>2]&127](b,i)|0)){k=78;break c}h=41;j=j+3|0;continue c}case 6:{if((h|0)<3){h=-2;break a}if(!(lb[c[l>>2]&127](b,i)|0)){k=82;break c}h=41;j=j+4|0;continue c}case 7:{if((h|0)<4){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){k=86;break c}h=41;j=j+5|0;continue c}default:{h=19;j=i;continue c}}}default:{k=98;break c}}}switch(k|0){case 56:{c[g>>2]=j;h=0;break a}case 60:{c[g>>2]=j;h=0;break a}case 64:{c[g>>2]=j;h=0;break a}case 68:{c[g>>2]=j;h=0;break a}case 70:{c[g>>2]=j;break a}case 74:{c[g>>2]=i;h=0;break a}case 78:{c[g>>2]=i;h=0;break a}case 82:{c[g>>2]=i;h=0;break a}case 86:{c[g>>2]=i;h=0;break a}case 89:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=32;break a}case 92:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=31;break a}case 95:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=30;break a}case 98:{c[g>>2]=j;h=0;break a}case 99:{h=0-h|0;break a}}}else h=-4;while(0);return h|0}function qX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0>>0){m=b+72|0;b:do switch(a[m+(d[e>>0]|0)>>0]|0){case 2:{h=JX(b,e+1|0,f,g)|0;break a}case 3:{h=FX(b,e+1|0,f,g)|0;break a}case 9:{h=e+1|0;if((f-h|0)<=0){h=-3;break a}c[g>>2]=(a[m+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break a}case 10:{c[g>>2]=e+1;h=7;break a}case 4:{i=e+1|0;if((f-i|0)<=0){h=-5;break a}if((a[i>>0]|0)==93){h=e+2|0;if((f-h|0)<=0){h=-5;break a}if((a[h>>0]|0)==62){c[g>>2]=h;h=0;break a}else h=f}else h=f;break}case 5:{h=f;if((h-e|0)<2){h=-2;break a}if(!(lb[c[b+352>>2]&127](b,e)|0)){i=e+2|0;break b}else{c[g>>2]=e;h=0;break a}}case 6:{h=f;if((h-e|0)<3){h=-2;break a}if(!(lb[c[b+356>>2]&127](b,e)|0)){i=e+3|0;break b}else{c[g>>2]=e;h=0;break a}}case 7:{h=f;if((h-e|0)<4){h=-2;break a}if(!(lb[c[b+360>>2]&127](b,e)|0)){i=e+4|0;break b}else{c[g>>2]=e;h=0;break a}}case 8:case 1:case 0:{c[g>>2]=e;h=0;break a}default:{i=e+1|0;h=f}}while(0);j=b+352|0;k=b+356|0;l=b+360|0;c:while(1){f=h-i|0;if((f|0)<=0){f=49;break}switch(a[m+(d[i>>0]|0)>>0]|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{f=47;break c}case 5:{if((f|0)<2){f=32;break c}if(lb[c[j>>2]&127](b,i)|0){f=32;break c}i=i+2|0;continue c}case 6:{if((f|0)<3){f=36;break c}if(lb[c[k>>2]&127](b,i)|0){f=36;break c}i=i+3|0;continue c}case 7:{if((f|0)<4){f=40;break c}if(lb[c[l>>2]&127](b,i)|0){f=40;break c}i=i+4|0;continue c}case 4:{if((f|0)<=1){f=47;break c}e=i+1|0;if((a[e>>0]|0)!=93){i=e;continue c}if((f|0)<=2){f=47;break c}i=i+2|0;if((a[i>>0]|0)==62){f=46;break c}else{i=e;continue c}}default:{i=i+1|0;continue c}}}if((f|0)==32){c[g>>2]=i;h=6;break}else if((f|0)==36){c[g>>2]=i;h=6;break}else if((f|0)==40){c[g>>2]=i;h=6;break}else if((f|0)==46){c[g>>2]=i;h=0;break}else if((f|0)==47){c[g>>2]=i;h=6;break}else if((f|0)==49){c[g>>2]=i;h=6;break}}else h=-4;while(0);return h|0}function rX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if(e>>>0>>0){l=b+72|0;b:do switch(a[l+(d[e>>0]|0)>>0]|0){case 4:{i=e+1|0;h=f;if((h-i|0)<=0){h=-1;break a}if((a[i>>0]|0)==93){f=e+2|0;if((h-f|0)<=0){h=-1;break a}if((a[f>>0]|0)==62){c[g>>2]=e+3;h=40;break a}}break}case 9:{h=e+1|0;if((f-h|0)<=0){h=-1;break a}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break a}case 10:{c[g>>2]=e+1;h=7;break a}case 5:{h=f;if((h-e|0)<2){h=-2;break a}if(!(lb[c[b+352>>2]&127](b,e)|0)){i=e+2|0;break b}else{c[g>>2]=e;h=0;break a}}case 6:{h=f;if((h-e|0)<3){h=-2;break a}if(!(lb[c[b+356>>2]&127](b,e)|0)){i=e+3|0;break b}else{c[g>>2]=e;h=0;break a}}case 7:{h=f;if((h-e|0)<4){h=-2;break a}if(!(lb[c[b+360>>2]&127](b,e)|0)){i=e+4|0;break b}else{c[g>>2]=e;h=0;break a}}case 8:case 1:case 0:{c[g>>2]=e;h=0;break a}default:{i=e+1|0;h=f}}while(0);e=b+352|0;j=b+356|0;k=b+360|0;c:while(1){f=h-i|0;if((f|0)<=0){f=39;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 4:case 10:case 9:case 8:case 1:case 0:{f=37;break c}case 5:{if((f|0)<2){f=30;break c}if(!(lb[c[e>>2]&127](b,i)|0))f=2;else{f=30;break c}break}case 6:{if((f|0)<3){f=33;break c}if(!(lb[c[j>>2]&127](b,i)|0))f=3;else{f=33;break c}break}case 7:{if((f|0)<4){f=36;break c}if(!(lb[c[k>>2]&127](b,i)|0))f=4;else{f=36;break c}break}default:f=1}i=i+f|0}if((f|0)==30){c[g>>2]=i;h=6;break}else if((f|0)==33){c[g>>2]=i;h=6;break}else if((f|0)==36){c[g>>2]=i;h=6;break}else if((f|0)==37){c[g>>2]=i;h=6;break}else if((f|0)==39){c[g>>2]=i;h=6;break}}else h=-4;while(0);return h|0}function sX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=b+72|0;k=b+352|0;l=b+356|0;m=b+360|0;i=0;a:while(1){h=f-e|0;if((h|0)<=0){f=-1;break}switch(a[j+(d[e>>0]|0)>>0]|0){case 8:case 1:case 0:{n=16;break a}case 5:{if((h|0)<2){f=-2;break a}if(lb[c[k>>2]&127](b,e)|0){n=6;break a}h=i;e=e+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}if(lb[c[l>>2]&127](b,e)|0){n=10;break a}h=i;e=e+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}if(lb[c[m>>2]&127](b,e)|0){n=14;break a}h=i;e=e+4|0;i=h;continue a}case 2:{h=e+1|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=33){o=i;e=h;i=o;continue a}h=e+2|0;if((f-h|0)<=0){f=-1;break a}o=(a[h>>0]|0)==91;i=i+(o&1)|0;e=o?e+3|0:h;continue a}case 4:{h=e+1|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=93){o=i;e=h;i=o;continue a}h=e+2|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=62){o=i;e=h;i=o;continue a}e=e+3|0;if(!i){n=26;break a}i=i+-1|0;continue a}default:{o=i;e=e+1|0;i=o;continue a}}}if((n|0)==6){c[g>>2]=e;f=0}else if((n|0)==10){c[g>>2]=e;f=0}else if((n|0)==14){c[g>>2]=e;f=0}else if((n|0)==16){c[g>>2]=e;f=0}else if((n|0)==26){c[g>>2]=e;f=42}return f|0}function tX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>0){l=b+72|0;i=e;a:while(1){if((k-i|0)<=0){j=24;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 3:{j=8;break a}case 2:{j=11;break a}case 10:{j=12;break a}case 9:{j=15;break a}case 21:{j=19;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=1}i=i+h|0}if((j|0)==8)if((i|0)==(e|0)){h=FX(b,e+1|0,f,g)|0;break}else{c[g>>2]=i;h=6;break}else if((j|0)==11){c[g>>2]=i;h=0;break}else if((j|0)==12)if((i|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=i;h=6;break}else if((j|0)==15){if((i|0)!=(e|0)){c[g>>2]=i;h=6;break}h=e+1|0;if((k-h|0)<=0){h=-3;break}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break}else if((j|0)==19)if((i|0)==(e|0)){c[g>>2]=e+1;h=39;break}else{c[g>>2]=i;h=6;break}else if((j|0)==24){c[g>>2]=i;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function uX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>0){l=b+72|0;i=e;a:while(1){if((k-i|0)<=0){j=23;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 3:{j=8;break a}case 30:{j=11;break a}case 10:{j=14;break a}case 9:{j=17;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=1}i=i+h|0}if((j|0)==8)if((i|0)==(e|0)){h=FX(b,e+1|0,f,g)|0;break}else{c[g>>2]=i;h=6;break}else if((j|0)==11)if((i|0)==(e|0)){h=GX(b,e+1|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=i;h=6;break}else if((j|0)==14)if((i|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=i;h=6;break}else if((j|0)==17){if((i|0)!=(e|0)){c[g>>2]=i;h=6;break}h=e+1|0;if((k-h|0)<=0){h=-3;break}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break}else if((j|0)==23){c[g>>2]=i;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function vX(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=6;break}if((f-b|0)<1){b=0;break}if((a[b>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+1|0}if((g|0)==6)b=(b|0)==(d|0)&1;return b|0}function wX(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;b=c;a:while(1){switch(a[f+(d[b>>0]|0)>>0]|0){case 5:{e=2;break}case 6:{e=3;break}case 7:{e=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{e=1;break}default:break a}b=b+e|0}return b-c|0}function xX(b,c){b=b|0;c=c|0;b=b+72|0;a:while(1){switch(a[b+(d[c>>0]|0)>>0]|0){case 21:case 9:case 10:break;default:break a}c=c+1|0}return c|0}function yX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+72|0;j=0;k=0;b=1;a:while(1){h=e+1|0;i=a[h>>0]|0;do switch(a[l+(i&255)>>0]|0){case 5:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+2|0;k=h;j=i;continue a}case 6:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+3|0;k=h;j=i;continue a}case 7:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+4|0;k=h;j=i;continue a}case 24:case 22:case 29:{if(b|0){o=b;n=k;i=j;e=h;b=o;k=n;j=i;continue a}if((k|0)>=(f|0)){n=k;o=j;b=1;e=h;k=n;j=o;continue a}c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;n=k;o=j;b=1;e=h;k=n;j=o;continue a}case 12:{if((b|0)!=2){if((k|0)>=(f|0)){o=k;j=12;b=2;e=h;k=o;continue a}c[g+(k<<4)+4>>2]=e+2;o=k;j=12;b=2;e=h;k=o;continue a}if((j|0)!=12){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if((k|0)<(f|0))c[g+(k<<4)+8>>2]=h;j=12;k=k+1|0;b=0;e=h;continue a}case 13:{if((b|0)!=2){if((k|0)>=(f|0)){o=k;j=13;b=2;e=h;k=o;continue a}c[g+(k<<4)+4>>2]=e+2;o=k;j=13;b=2;e=h;k=o;continue a}if((j|0)!=13){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if((k|0)<(f|0))c[g+(k<<4)+8>>2]=h;j=13;k=k+1|0;b=0;e=h;continue a}case 3:{if((k|0)>=(f|0)){i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}a[g+(k<<4)+12>>0]=0;i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}case 21:{switch(b|0){case 1:{n=k;o=j;b=0;e=h;k=n;j=o;continue a}case 2:break;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}if((k|0)>=(f|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}b=g+(k<<4)+12|0;if(!(a[b>>0]|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if(((i<<24>>24==32?(h|0)!=(c[g+(k<<4)+4>>2]|0):0)?(m=a[e+2>>0]|0,m<<24>>24!=32):0)?(j|0)!=(d[l+(m&255)>>0]|0):0){n=k;o=j;b=2;e=h;k=n;j=o;continue a}a[b>>0]=0;n=k;o=j;b=2;e=h;k=n;j=o;continue a}case 10:case 9:{switch(b|0){case 1:{n=k;o=j;b=0;e=h;k=n;j=o;continue a}case 2:break;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}if((k|0)>=(f|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}a[g+(k<<4)+12>>0]=0;n=k;o=j;b=2;e=h;k=n;j=o;continue a}case 17:case 11:if((b|0)==2){n=k;o=j;b=2;e=h;k=n;j=o;continue a}else break a;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}while(0)}return k|0}function zX(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+2|0;d=a[b>>0]|0;a:do if(d<<24>>24==120){d=c+3|0;b=0;while(1){b:while(1){e=a[d>>0]|0;c=e<<24>>24;if(e<<24>>24==59){e=14;break a}switch(c|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=7;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=8;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=9;break b}default:{}}d=d+1|0}if((e|0)==7){e=0;b=c+-48|b<<4}else if((e|0)==8){e=0;b=(b<<4)+-55+c|0}else if((e|0)==9){e=0;b=(b<<4)+-87+c|0}if((b|0)<1114112)d=d+1|0;else{b=-1;break}}}else{c=b;b=0;while(1){if(d<<24>>24==59){e=14;break a}b=(d<<24>>24)+-48+(b*10|0)|0;if((b|0)>=1114112){b=-1;break a}d=c+1|0;c=d;d=a[d>>0]|0}}while(0);if((e|0)==14)b=jX(b)|0;return b|0}function AX(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch(d-c|0){case 2:{if((a[c+1>>0]|0)==116){b=a[c>>0]|0;b=b<<24>>24==108?60:b<<24>>24==103?62:0}else e=14;break}case 3:{if(((a[c>>0]|0)==97?(a[c+1>>0]|0)==109:0)?(a[c+2>>0]|0)==112:0)b=38;else e=14;break}case 4:switch(a[c>>0]|0){case 113:{if((a[c+1>>0]|0)!=117){e=14;break a}if((a[c+2>>0]|0)!=111){e=14;break a}if((a[c+3>>0]|0)==116){b=34;break a}else{e=14;break a}}case 97:{if((a[c+1>>0]|0)!=112){e=14;break a}if((a[c+2>>0]|0)!=111){e=14;break a}if((a[c+3>>0]|0)==115){b=39;break a}else{e=14;break a}}default:{e=14;break a}}default:e=14}while(0);if((e|0)==14)b=0;return b|0}function BX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=b+72|0;i=g+4|0;while(1){if((f-e|0)<=0)break;switch(a[h+(d[e>>0]|0)>>0]|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[i>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+1|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;b=e+1|0;if((f-b|0)>0)e=(a[h+(d[b>>0]|0)>>0]|0)==10?e+2|0:b;else e=b;c[i>>2]=-1;break}default:e=e+1|0}c[i>>2]=(c[i>>2]|0)+1}return}function CX(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=e+-1|0;b=b+72|0;a:while(1){d=d+1|0;if((g-d|0)<=0){d=1;break}e=a[d>>0]|0;switch(a[b+(e&255)>>0]|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:continue a;case 21:if(e<<24>>24==9){h=7;break a}else continue a;case 22:case 26:{if(e<<24>>24>=0)continue a;break}default:{}}switch(e<<24>>24|0){case 64:case 36:break;default:{h=7;break a}}}if((h|0)==7){c[f>>2]=d;d=0}return d|0}function DX(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;i=h;while(1){j=c[e>>2]|0;if((j|0)==(f|0)){b=0;break}k=d[j>>0]|0;b=c[g>>2]|0;if(!(k&128)){if((b|0)==(h|0)){b=2;break}c[e>>2]=j+1;j=a[j>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k>>0]=j;continue}else{if((i-b|0)<2){b=2;break}c[g>>2]=b+1;a[b>>0]=k>>>6|192;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=k&63|128;c[e>>2]=(c[e>>2]|0)+1;continue}}return b|0}function EX(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;while(1){a=c[e>>2]|0;i=a>>>0>>0;j=c[g>>2]|0;if(!(i&j>>>0>>0))break;c[e>>2]=a+1;i=d[a>>0]|0;j=c[g>>2]|0;c[g>>2]=j+2;b[j>>1]=i}return ((j|0)!=(h|0)|i^1?0:2)|0}function FX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;h=k-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{f=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=4;break}case 19:{f=HX(b,e+1|0,f,g)|0;break a}default:{c[g>>2]=e;f=0;break a}}h=b+328|0;i=b+332|0;j=b+336|0;e=e+f|0;b:while(1){f=k-e|0;if((f|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=18;break b}case 18:{h=29;break b}case 27:case 26:case 25:case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break a}if(!(lb[c[h>>2]&127](b,e)|0)){h=21;break b}else f=2;break}case 6:{if((f|0)<3){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=24;break b}else f=3;break}case 7:{if((f|0)<4){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=27;break b}else f=4;break}default:{h=30;break b}}e=e+f|0}if((h|0)==18){c[g>>2]=e;f=0;break}else if((h|0)==21){c[g>>2]=e;f=0;break}else if((h|0)==24){c[g>>2]=e;f=0;break}else if((h|0)==27){c[g>>2]=e;f=0;break}else if((h|0)==29){c[g>>2]=e+1;f=9;break}else if((h|0)==30){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function GX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;e=e+h|0;b:while(1){h=f-e|0;if((h|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=18;break b}case 18:{h=29;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=21;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=24;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,e)|0)){h=27;break b}else h=4;break}default:{h=30;break b}}e=e+h|0}if((h|0)==18){c[g>>2]=e;f=0;break}else if((h|0)==21){c[g>>2]=e;f=0;break}else if((h|0)==24){c[g>>2]=e;f=0;break}else if((h|0)==27){c[g>>2]=e;f=0;break}else if((h|0)==29){c[g>>2]=e+1;f=28;break}else if((h|0)==30){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function HX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=f;a:do if((i-e|0)>0){h=a[e>>0]|0;if(h<<24>>24==120){b=IX(b,e+1|0,f,g)|0;break}f=b+72|0;if((a[f+(h&255)>>0]|0)!=25){c[g>>2]=e;b=0;break}b:while(1){b=e+1|0;if((i-b|0)<=0){b=-1;break a}switch(a[f+(d[b>>0]|0)>>0]|0){case 25:{e=b;break}case 18:{f=8;break b}default:{f=9;break b}}}if((f|0)==8){c[g>>2]=e+2;b=10;break}else if((f|0)==9){c[g>>2]=b;b=0;break}}else b=-1;while(0);return b|0}function IX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0;a:do if((f-e|0)>0){b=b+72|0;if((a[b+(d[e>>0]|0)>>0]&-2)<<24>>24!=24){c[g>>2]=e;f=0;break}b:while(1){h=e+1|0;if((f-h|0)<=0){f=-1;break a}switch(a[b+(d[h>>0]|0)>>0]|0){case 24:case 25:{e=h;break}case 18:{b=6;break b}default:{b=7;break b}}}if((b|0)==6){c[g>>2]=e+2;f=10;break}else if((b|0)==7){c[g>>2]=h;f=0;break}}else f=-1;while(0);return f|0}function JX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f;h=q-e|0;a:do if((h|0)>0){p=b+72|0;switch(a[p+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;h=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){h=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=2;break}case 6:{if((h|0)<3){h=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=3;break}case 7:{if((h|0)<4){h=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=4;break}case 16:{h=e+1|0;if((q-h|0)<=0){h=-1;break a}switch(a[p+(d[h>>0]|0)>>0]|0){case 27:{h=KX(b,e+2|0,f,g)|0;break a}case 20:{h=LX(e+2|0,f,g)|0;break a}default:{c[g>>2]=h;h=0;break a}}}case 15:{h=MX(b,e+1|0,f,g)|0;break a}case 17:{h=NX(b,e+1|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}j=b+328|0;k=b+332|0;l=b+336|0;m=b+340|0;n=b+344|0;o=b+348|0;i=0;h=e+h|0;b:while(1){e=q-h|0;if((e|0)<=0){h=-1;break a}c:do switch(a[p+(d[h>>0]|0)>>0]|0){case 29:{r=24;break b}case 10:case 9:case 21:{r=50;break b}case 11:{r=64;break b}case 17:break b;case 27:case 26:case 25:case 24:case 22:{e=1;break}case 5:{if((e|0)<2){h=-2;break a}if(!(lb[c[j>>2]&127](b,h)|0)){r=27;break b}else e=2;break}case 6:{if((e|0)<3){h=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){r=30;break b}else e=3;break}case 7:{if((e|0)<4){h=-2;break a}if(!(lb[c[l>>2]&127](b,h)|0)){r=33;break b}else e=4;break}case 23:{if(i|0){r=35;break b}i=h+1|0;e=q-i|0;if((e|0)<=0){h=-1;break a}switch(a[p+(d[i>>0]|0)>>0]|0){case 29:{r=38;break b}case 24:case 22:{i=1;e=2;break c}case 5:{if((e|0)<2){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){r=42;break b}else{i=1;e=3;break c}}case 6:{if((e|0)<3){h=-2;break a}if(!(lb[c[n>>2]&127](b,i)|0)){r=45;break b}else{i=1;e=4;break c}}case 7:{if((e|0)<4){h=-2;break a}if(!(lb[c[o>>2]&127](b,i)|0)){r=48;break b}else{i=1;e=5;break c}}default:{r=49;break b}}}default:{r=69;break b}}while(0);h=h+e|0}d:switch(r|0){case 24:{c[g>>2]=h;h=0;break a}case 27:{c[g>>2]=h;h=0;break a}case 30:{c[g>>2]=h;h=0;break a}case 33:{c[g>>2]=h;h=0;break a}case 35:{c[g>>2]=h;h=0;break a}case 38:{c[g>>2]=i;h=0;break a}case 42:{c[g>>2]=i;h=0;break a}case 45:{c[g>>2]=i;h=0;break a}case 48:{c[g>>2]=i;h=0;break a}case 49:{c[g>>2]=i;h=0;break a}case 50:{e:while(1){r=0;i=h+1|0;e=q-i|0;if((e|0)<=0){h=-1;break a}switch(a[p+(d[i>>0]|0)>>0]|0){case 11:{h=i;r=64;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;r=50;break}case 29:{r=52;break e}case 24:case 22:{i=2;break e}case 5:{r=53;break e}case 6:{r=56;break e}case 7:{r=59;break e}default:{r=62;break e}}}if((r|0)==52){c[g>>2]=i;h=0;break a}else if((r|0)==53){if((e|0)<2){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=3}else if((r|0)==56){if((e|0)<3){h=-2;break a}if(!(lb[c[n>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=4}else if((r|0)==59){if((e|0)<4){h=-2;break a}if(!(lb[c[o>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=5}else if((r|0)==62){c[g>>2]=i;h=0;break a}h=OX(b,h+i|0,f,g)|0;break a}case 69:{c[g>>2]=h;h=0;break a}}if((r|0)==64){c[g>>2]=h+1;h=2;break}i=h+1|0;if((q-i|0)>0)if((a[i>>0]|0)==62){c[g>>2]=h+2;h=4;break}else{c[g>>2]=i;h=0;break}else h=-1}else h=-1;while(0);return h|0}function KX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if((f-e|0)>0){if((a[e>>0]|0)!=45){c[g>>2]=e;f=0;break}h=b+72|0;i=b+352|0;j=b+356|0;k=b+360|0;l=e+1|0;b:while(1){e=f-l|0;if((e|0)<=0){f=-1;break a}switch(a[h+(d[l>>0]|0)>>0]|0){case 8:case 1:case 0:{e=19;break b}case 5:{if((e|0)<2){f=-2;break a}if(lb[c[i>>2]&127](b,l)|0){e=9;break b}l=l+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}if(lb[c[j>>2]&127](b,l)|0){e=13;break b}l=l+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}if(lb[c[k>>2]&127](b,l)|0){e=17;break b}l=l+4|0;continue b}case 27:{e=l+1|0;if((f-e|0)<=0){f=-1;break a}if((a[e>>0]|0)==45){e=22;break b}else{l=e;continue b}}default:{l=l+1|0;continue b}}}if((e|0)==9){c[g>>2]=l;f=0;break}else if((e|0)==13){c[g>>2]=l;f=0;break}else if((e|0)==17){c[g>>2]=l;f=0;break}else if((e|0)==19){c[g>>2]=l;f=0;break}else if((e|0)==22){e=l+2|0;if((f-e|0)<=0){f=-1;break}if((a[e>>0]|0)==62){c[g>>2]=l+3;f=13;break}else{c[g>>2]=e;f=0;break}}}else f=-1;while(0);return f|0}function LX(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>5){d=0;while(1){if((d|0)>=6){d=8;break}if((a[b>>0]|0)!=(a[141218+d>>0]|0)){d=0;break}d=d+1|0;b=b+1|0}c[e>>2]=b}else d=-1;return d|0}function MX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;f=o-e|0;a:do if((f|0)>0){n=b+72|0;switch(a[n+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=2;break}case 6:{if((f|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=3;break}case 7:{if((f|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;f=e+f|0;b:while(1){h=o-f|0;if((h|0)<=0){f=-1;break a}switch(a[n+(d[f>>0]|0)>>0]|0){case 29:{m=17;break b}case 10:case 9:case 21:{m=28;break b}case 15:{m=50;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,f)|0)){m=20;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,f)|0)){m=23;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,f)|0)){m=26;break b}else h=4;break}default:break b}f=f+h|0}if((m|0)==17){c[g>>2]=f;f=0;break}else if((m|0)==20){c[g>>2]=f;f=0;break}else if((m|0)==23){c[g>>2]=f;f=0;break}else if((m|0)==26){c[g>>2]=f;f=0;break}else if((m|0)==28){if(!(PX(e,f,p)|0)){c[g>>2]=f;f=0;break}i=b+352|0;j=b+356|0;k=b+360|0;h=f+1|0;c:while(1){f=o-h|0;if((f|0)<=0){f=-1;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 8:case 1:case 0:{m=45;break c}case 5:{if((f|0)<2){f=-2;break a}if(lb[c[i>>2]&127](b,h)|0){m=35;break c}h=h+2|0;continue c}case 6:{if((f|0)<3){f=-2;break a}if(lb[c[j>>2]&127](b,h)|0){m=39;break c}h=h+3|0;continue c}case 7:{if((f|0)<4){f=-2;break a}if(lb[c[k>>2]&127](b,h)|0){m=43;break c}h=h+4|0;continue c}case 15:{f=h+1|0;if((o-f|0)<=0){f=-1;break a}if((a[f>>0]|0)==62){m=48;break c}else{h=f;continue c}}default:{h=h+1|0;continue c}}}if((m|0)==35){c[g>>2]=h;f=0;break}else if((m|0)==39){c[g>>2]=h;f=0;break}else if((m|0)==43){c[g>>2]=h;f=0;break}else if((m|0)==45){c[g>>2]=h;f=0;break}else if((m|0)==48){c[g>>2]=h+2;f=c[p>>2]|0;break}}else if((m|0)==50){if(!(PX(e,f,p)|0)){c[g>>2]=f;f=0;break}h=f+1|0;if((o-h|0)<=0){f=-1;break}if((a[h>>0]|0)==62){c[g>>2]=f+2;f=c[p>>2]|0;break}else f=h}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function NX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;h=e+h|0;b:while(1){e=f-h|0;if((e|0)<=0){f=-1;break a}switch(a[l+(d[h>>0]|0)>>0]|0){case 29:{i=17;break b}case 10:case 9:case 21:{i=27;break b}case 11:{i=32;break b}case 23:case 27:case 26:case 25:case 24:case 22:{e=1;break}case 5:{if((e|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,h)|0)){i=20;break b}else e=2;break}case 6:{if((e|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,h)|0)){i=23;break b}else e=3;break}case 7:{if((e|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){i=26;break b}else e=4;break}default:{i=33;break b}}h=h+e|0}if((i|0)==17){c[g>>2]=h;f=0;break}else if((i|0)==20){c[g>>2]=h;f=0;break}else if((i|0)==23){c[g>>2]=h;f=0;break}else if((i|0)==26){c[g>>2]=h;f=0;break}else if((i|0)==27){c:while(1){e=h+1|0;if((f-e|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 10:case 9:case 21:{h=e;i=27;break}case 11:{i=29;break c}default:{i=30;break c}}}if((i|0)==29){c[g>>2]=h+2;f=5;break}else if((i|0)==30){c[g>>2]=e;f=0;break}}else if((i|0)==32){c[g>>2]=h+1;f=5;break}else if((i|0)==33){c[g>>2]=h;f=0;break}}else f=-1;while(0);return f|0}function OX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;v=y;c[v>>2]=e;w=f;r=b+72|0;s=b+328|0;t=b+332|0;u=b+336|0;k=b+340|0;m=b+344|0;n=b+348|0;o=b+352|0;p=b+356|0;q=b+360|0;i=0;a:while(1){h=w-e|0;if((h|0)<=0){e=-1;break}b:do switch(a[r+(d[e>>0]|0)>>0]|0){case 29:{x=4;break a}case 27:case 26:case 25:case 24:case 22:{h=e+1|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 5:{if((h|0)<2){e=-2;break a}if(!(lb[c[s>>2]&127](b,e)|0)){x=8;break a}h=e+2|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 6:{if((h|0)<3){e=-2;break a}if(!(lb[c[t>>2]&127](b,e)|0)){x=12;break a}h=e+3|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 7:{if((h|0)<4){e=-2;break a}if(!(lb[c[u>>2]&127](b,e)|0)){x=16;break a}h=e+4|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 23:{if(i|0){x=19;break a}h=e+1|0;c[v>>2]=h;i=w-h|0;if((i|0)<=0){e=-1;break a}switch(a[r+(d[h>>0]|0)>>0]|0){case 29:{x=22;break a}case 24:case 22:{j=e+2|0;c[v>>2]=j;i=1;e=j;continue a}case 5:{if((i|0)<2){e=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){x=26;break a}j=e+3|0;c[v>>2]=j;i=1;e=j;continue a}case 6:{if((i|0)<3){e=-2;break a}if(!(lb[c[m>>2]&127](b,h)|0)){x=30;break a}j=e+4|0;c[v>>2]=j;i=1;e=j;continue a}case 7:{if((i|0)<4){e=-2;break a}if(!(lb[c[n>>2]&127](b,h)|0)){x=34;break a}j=e+5|0;c[v>>2]=j;i=1;e=j;continue a}default:{x=36;break a}}}case 10:case 9:case 21:while(1){e=e+1|0;c[v>>2]=e;if((w-e|0)<=0){e=-1;break a}switch(a[r+(d[e>>0]|0)>>0]|0){case 14:break b;case 9:case 10:case 21:break;default:{x=39;break a}}}case 14:break;default:{x=92;break a}}while(0);while(1){h=e+1|0;c[v>>2]=h;if((w-h|0)<=0){e=-1;break a}j=a[r+(d[h>>0]|0)>>0]|0;if((j|1)<<24>>24==13)break;switch(j<<24>>24){case 9:case 10:case 21:{e=h;break}default:{x=43;break a}}}e=e+2|0;c[v>>2]=e;c:while(1){h=w-e|0;if((h|0)<=0){e=-1;break a}i=a[r+(d[e>>0]|0)>>0]|0;if(i<<24>>24==j<<24>>24)break;switch(i<<24>>24){case 8:case 1:case 0:{x=60;break a}case 2:{x=65;break a}case 5:{if((h|0)<2){e=-2;break a}if(lb[c[o>>2]&127](b,e)|0){x=50;break a}i=e+2|0;c[v>>2]=i;e=i;continue c}case 6:{if((h|0)<3){e=-2;break a}if(lb[c[p>>2]&127](b,e)|0){x=54;break a}i=e+3|0;c[v>>2]=i;e=i;continue c}case 7:{if((h|0)<4){e=-2;break a}if(lb[c[q>>2]&127](b,e)|0){x=58;break a}i=e+4|0;c[v>>2]=i;e=i;continue c}case 3:{e=FX(b,e+1|0,f,v)|0;if((e|0)<1){x=63;break a}e=c[v>>2]|0;continue c}default:{i=e+1|0;c[v>>2]=i;e=i;continue c}}}h=e+1|0;c[v>>2]=h;if((w-h|0)<=0){e=-1;break}switch(a[r+(d[h>>0]|0)>>0]|0){case 11:{x=86;break a}case 17:{x=87;break a}case 10:case 9:case 21:{e=h;break}default:{x=69;break a}}d:while(1){h=e+1|0;c[v>>2]=h;i=w-h|0;if((i|0)<=0){e=-1;break a}switch(a[r+(d[h>>0]|0)>>0]|0){case 29:{x=72;break a}case 11:{x=86;break a}case 17:{x=87;break a}case 10:case 9:case 21:{e=h;break}case 24:case 22:{x=73;break d}case 5:{x=74;break d}case 6:{x=78;break d}case 7:{x=82;break d}default:{x=91;break a}}}if((x|0)==73){x=0;e=e+2|0;c[v>>2]=e;i=0;continue}else if((x|0)==74){x=0;if((i|0)<2){e=-2;break}if(!(lb[c[k>>2]&127](b,h)|0)){x=76;break}e=e+3|0;c[v>>2]=e;i=0;continue}else if((x|0)==78){x=0;if((i|0)<3){e=-2;break}if(!(lb[c[m>>2]&127](b,h)|0)){x=80;break}e=e+4|0;c[v>>2]=e;i=0;continue}else if((x|0)==82){x=0;if((i|0)<4){e=-2;break}if(!(lb[c[n>>2]&127](b,h)|0)){x=84;break}e=e+5|0;c[v>>2]=e;i=0;continue}}switch(x|0){case 4:{c[g>>2]=e;e=0;break}case 8:{c[g>>2]=e;e=0;break}case 12:{c[g>>2]=e;e=0;break}case 16:{c[g>>2]=e;e=0;break}case 19:{c[g>>2]=e;e=0;break}case 22:{c[g>>2]=h;e=0;break}case 26:{c[g>>2]=h;e=0;break}case 30:{c[g>>2]=h;e=0;break}case 34:{c[g>>2]=h;e=0;break}case 36:{c[g>>2]=h;e=0;break}case 39:{c[g>>2]=e;e=0;break}case 43:{c[g>>2]=h;e=0;break}case 50:{c[g>>2]=e;e=0;break}case 54:{c[g>>2]=e;e=0;break}case 58:{c[g>>2]=e;e=0;break}case 60:{c[g>>2]=e;e=0;break}case 63:{if(!e){c[g>>2]=c[v>>2];e=0}break}case 65:{c[g>>2]=e;e=0;break}case 69:{c[g>>2]=h;e=0;break}case 72:{c[g>>2]=h;e=0;break}case 76:{c[g>>2]=h;e=0;break}case 80:{c[g>>2]=h;e=0;break}case 84:{c[g>>2]=h;e=0;break}case 86:{c[g>>2]=e+2;e=1;break}case 87:{e=h+1|0;c[v>>2]=e;if((w-e|0)>0)if((a[e>>0]|0)==62){c[g>>2]=h+2;e=3;break}else{c[g>>2]=e;e=0;break}else e=-1;break}case 91:{c[g>>2]=h;e=0;break}case 92:{c[g>>2]=e;e=0;break}}l=y;return e|0}function PX(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==3){switch(a[b>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}switch(a[b+1>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}switch(a[b+2>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1;while(0);return d|0}function QX(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=e+72|0;l=e+352|0;m=e+356|0;n=e+360|0;a:while(1){i=g-f|0;if((i|0)<=0){g=-1;break}j=a[k+(d[f>>0]|0)>>0]|0;switch(j<<24>>24){case 8:case 1:case 0:{o=16;break a}case 5:{if((i|0)<2){g=-2;break a}if(lb[c[l>>2]&127](e,f)|0){o=6;break a}f=f+2|0;continue a}case 6:{if((i|0)<3){g=-2;break a}if(lb[c[m>>2]&127](e,f)|0){o=10;break a}f=f+3|0;continue a}case 7:{if((i|0)<4){g=-2;break a}if(lb[c[n>>2]&127](e,f)|0){o=14;break a}f=f+4|0;continue a}case 13:case 12:{f=f+1|0;if((j&255|0)==(b|0)){o=18;break a}else continue a}default:{f=f+1|0;continue a}}}b:do if((o|0)==6){c[h>>2]=f;g=0}else if((o|0)==10){c[h>>2]=f;g=0}else if((o|0)==14){c[h>>2]=f;g=0}else if((o|0)==16){c[h>>2]=f;g=0}else if((o|0)==18)if((g-f|0)>0){c[h>>2]=f;switch(a[k+(d[f>>0]|0)>>0]|0){case 20:case 30:case 11:case 10:case 9:case 21:{g=27;break b}default:{}}g=0}else g=-27;while(0);return g|0}function RX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=f;a:do if((h-e|0)>0){i=b+72|0;switch(a[i+(d[e>>0]|0)>>0]|0){case 27:{b=KX(b,e+1|0,f,g)|0;break a}case 20:{c[g>>2]=e+1;b=33;break a}case 24:case 22:{b:while(1){b=e+1|0;f=h-b|0;if((f|0)<=0){b=-1;break a}switch(a[i+(d[b>>0]|0)>>0]|0){case 24:case 22:{e=b;break}case 30:{j=8;break b}case 10:case 9:case 21:break b;default:{j=12;break b}}}if((j|0)==12){c[g>>2]=b;b=0;break a}c:do if((j|0)==8){if((f|0)<=1){b=-1;break a}switch(a[i+(d[e+2>>0]|0)>>0]|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=b;b=0;break a}while(0);c[g>>2]=b;b=16;break a}default:{c[g>>2]=e;b=0;break a}}}else b=-1;while(0);return b|0} +function Rv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=a;while(1){j=c[f>>2]|0;if(!j){k=6;break}if((c[j>>2]|0)==(b|0))break;f=j+4|0}if((k|0)==6)qa(93188,93195,217,93206);i=j+8|0;f=c[i>>2]|0;g=j+4|0;b=c[g>>2]|0;c[(f|0?f+4|0:a)>>2]=b;h=a+4|0;c[(b|0?b+8|0:h)>>2]=f;b=0;f=a;while(1){f=c[f>>2]|0;if(!f)break;if((c[f>>2]|0)==(d|0)){k=9;break}b=f;f=f+4|0}if((k|0)==9){do if(!e)if((f|0)==(c[a>>2]|0)){c[a>>2]=j;c[g>>2]=f;c[i>>2]=0;f=f+8|0;break}else{c[b+4>>2]=j;c[i>>2]=b;c[g>>2]=f;f=f+8|0;break}else if((f|0)==(c[h>>2]|0)){c[h>>2]=j;c[g>>2]=0;c[i>>2]=f;f=f+4|0;break}else{c[i>>2]=f;f=f+4|0;c[g>>2]=c[f>>2];c[(c[f>>2]|0)+8>>2]=j;break}while(0);c[f>>2]=j}return}function Sv(a){a=a|0;return c[a+8>>2]|0}function Tv(a,b){a=a|0;b=b|0;Uv(a,Ov(b)|0);D_(b);return}function Uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;if(d|0){e=a+4|0;f=c[e>>2]|0;c[f+4>>2]=d;c[d+8>>2]=f;c[e>>2]=c[b+4>>2];d=a+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+8>>2]|0)}return}function Vv(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;m=c[b+8>>2]|0;Wv(a,b);l=Xv(m)|0;a=Zv(Yv(l)|0)|0;_v(m,a);m=$v(a,m)|0;a=Sv(m)|0;j=+aw(m);k=(a|0)==1;f=+(a|0);i=f*.15915494309189535*(j+d);g=k?0.0:i;a=m;while(1){a=c[a>>2]|0;if(!a)break;if(c[(c[(c[(c[a>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&8|0){e=4;break}a=a+4|0}if((e|0)==4)Pv(m,a);d=1.0/f;e=0;a=m;while(1){a=c[a>>2]|0;if(!a)break;n=(c[a>>2]|0)+16|0;c[(c[(c[n>>2]|0)+112>>2]|0)+16>>2]=e;h[(c[(c[n>>2]|0)+112>>2]|0)+24>>3]=0.0;f=6.283185307179586*d*+(e|0);o=+E(+f)*g;n=c[(c[n>>2]|0)+132>>2]|0;h[n>>3]=o;h[n+8>>3]=+F(+f)*g;e=e+1|0;a=a+4|0}o=k?j*.5:i;h[b+16>>3]=o;h[b+24>>3]=o;h[b+48>>3]=-1.0;$x(l)|0;return m|0}function Wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+8>>2]|0;d=Sy(f)|0;while(1){if(!d)break;e=Ex(a,d)|0;while(1){if(!e)break;if((c[(c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+12>>2]|0)==(b|0))Vx(f,e,1)|0;e=Gx(a,e)|0}d=Ty(f,d)|0}return}function Xv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;f=gw(a,g)|0;g=c[g>>2]|0;i=ay(g)|0;h=hw(g)|0;i=i+-3|0;e=0;while(1){if((e|0)>=(i|0))break;j=qw(h)|0;d=Jx(g,j)|0;while(1){if(!d)break;b=c[d>>2]&3;a=c[((b|0)==2?d:d+-48|0)+40>>2]|0;if((j|0)==(a|0))a=c[((b|0)==3?d:d+48|0)+40>>2]|0;pw(h,a);d=Kx(g,d,j)|0}iw(g,j,f);d=Jx(g,j)|0;while(1){if(!d)break;b=c[d>>2]&3;a=c[((b|0)==2?d:d+-48|0)+40>>2]|0;if((j|0)==(a|0))a=c[((b|0)==3?d:d+48|0)+40>>2]|0;b=(c[a+16>>2]|0)+236|0;c[b>>2]=(c[b>>2]|0)+-1;ow(h,a);d=Kx(g,d,j)|0}dz(g,j)|0;e=e+1|0}$x(g)|0;nw(h);l=k;return f|0}function Yv(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+144|0;b=f;e=f+8|0;d=c[46162]|0;c[46162]=d+1;c[b>>2]=d;Y0(e,93221,b)|0;e=vA(a,e,1)|0;Az(e,134401,280,1)|0;b=Sy(a)|0;while(1){if(!b)break;Xy(e,b,1)|0;d=b+16|0;c[(c[(c[d>>2]|0)+112>>2]|0)+16+12>>2]=0;c[(c[(c[d>>2]|0)+112>>2]|0)+32>>2]=0;d=(c[(c[d>>2]|0)+112>>2]|0)+4|0;c[d>>2]=c[d>>2]&-2;b=Ty(a,b)|0}b=Sy(a)|0;while(1){if(!b)break;d=c[(c[b+16>>2]|0)+112>>2]|0;if(!(c[d+4>>2]&1)){c[d+16>>2]=0;fw(a,b,e)}b=Ty(a,b)|0}l=f;return e|0}function Zv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((ay(a)|0)!=1){d=Sy(a)|0;while(1){if(!d)break;b=0;e=Jx(a,d)|0;while(1){if(!e)break;b=b+1|0;e=Kx(a,e,d)|0}if((b|0)==1)ew(d,d,0,0);d=Ty(a,d)|0}b=0;f=0;d=Sy(a)|0;while(1){if(!d)break;g=c[(c[d+16>>2]|0)+112>>2]|0;g=(c[g+32>>2]|0)+(c[g+16+12>>2]|0)|0;e=(g|0)>(b|0);b=e?g:b;f=e?d:f;d=Ty(a,d)|0}b=Kv()|0;e=f+16|0;d=(c[(c[e>>2]|0)+112>>2]|0)+16+4|0;while(1){d=c[d>>2]|0;if((d|0)==(f|0))break;Mv(b,0,d);d=c[(c[d+16>>2]|0)+112>>2]|0;g=d+4|0;c[g>>2]=c[g>>2]|16;d=d+16|0}Mv(b,0,f);g=c[(c[e>>2]|0)+112>>2]|0;a=g+4|0;c[a>>2]=c[a>>2]|16;if(c[g+32>>2]|0){a=Kv()|0;d=(c[(c[e>>2]|0)+112>>2]|0)+24|0;while(1){d=c[d>>2]|0;if((d|0)==(f|0))break;Mv(a,0,d);d=c[(c[d+16>>2]|0)+112>>2]|0;g=d+4|0;c[g>>2]=c[g>>2]|16;d=d+16|0}Tv(b,a)}}else{b=Kv()|0;g=Sy(a)|0;Mv(b,0,g);g=(c[(c[g+16>>2]|0)+112>>2]|0)+4|0;c[g>>2]=c[g>>2]|16}return b|0}function _v(a,b){a=a|0;b=b|0;var d=0;d=Sy(a)|0;while(1){if(!d)break;if(!(c[(c[(c[d+16>>2]|0)+112>>2]|0)+4>>2]&16))dw(a,d,b);d=Ty(a,d)|0}return}function $v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=bw(a,b)|0;c[f>>2]=d;a:do if(d){e=0;while(1){if((e|0)>=10)break a;a=cw(a,b,f)|0;h=d;d=c[f>>2]|0;if((h|0)==(d|0)|(d|0)==0)break;else e=e+1|0}}while(0);l=g;return a|0}function aw(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0;b=0.0;while(1){a=c[a>>2]|0;if(!a)break;f=c[(c[c[(c[(c[a>>2]|0)+16>>2]|0)+112>>2]>>2]|0)+16>>2]|0;d=+h[f+32>>3];d=d>b?d:b;e=+h[f+40>>3];b=e>d?e:d;a=a+4|0}return +b}function bw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=rw()|0;e=Sy(b)|0;while(1){if(!e)break;d=Ex(b,e)|0;while(1){if(!d)break;c[c[(c[d+16>>2]|0)+120>>2]>>2]=0;d=Gx(b,d)|0}e=Ty(b,e)|0}j=1;d=0;while(1){h=c[a>>2]|0;if(!h)break;i=c[h>>2]|0;g=Jx(b,i)|0;while(1){if(!g)break;f=g+16|0;if((c[c[(c[f>>2]|0)+120>>2]>>2]|0)>0){a=nb[c[k>>2]&63](k,0,128)|0;while(1){if(!a)break;e=c[a+8>>2]|0;if((c[c[(c[e+16>>2]|0)+120>>2]>>2]|0)>(c[c[(c[f>>2]|0)+120>>2]>>2]|0)?(l=c[e>>2]&3,(c[((l|0)==2?e:e+-48|0)+40>>2]|0)!=(i|0)):0)d=d+((c[((l|0)==3?e:e+48|0)+40>>2]|0)!=(i|0)&1)|0;a=nb[c[k>>2]&63](k,a,8)|0}xw(k,g)}g=Kx(b,g,i)|0}e=Jx(b,i)|0;while(1){if(!e)break;a=c[(c[e+16>>2]|0)+120>>2]|0;if(!(c[a>>2]|0)){c[a>>2]=j;ww(k,e)}e=Kx(b,e,i)|0}a=h+4|0;j=j+1|0}vw(k);return d|0}function cw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[d>>2]|0;k=Sy(b)|0;a:while(1){if(!k)break;j=Jx(b,k)|0;while(1){if(!j)break;g=c[j>>2]&3;f=c[((g|0)==3?j:j+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?j:j+-48|0)+40>>2]|0;i=0;while(1){if((i|0)>=2)break;h=Qv(a)|0;Rv(a,k,f,i);g=bw(a,b)|0;if((g|0)<(e|0)){Lv(h);if(!g){e=0;break a}else e=g}else{Lv(a);a=h}i=i+1|0}j=Kx(b,j,k)|0}k=Ty(b,k)|0}c[d>>2]=e;return a|0}function dw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Kv()|0;e=Ex(a,b)|0;while(1){if(!e)break;f=e+-48|0;Mv(h,0,c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0);f=(c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[f>>2]=c[f>>2]|32;e=Gx(a,e)|0}e=Hx(a,b)|0;while(1){if(!e)break;f=e+48|0;Mv(h,0,c[((c[e>>2]&3|0)==3?e:f)+40>>2]|0);f=(c[(c[(c[((c[e>>2]&3|0)==3?e:f)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[f>>2]=c[f>>2]|32;e=Ix(a,e)|0}a:do if((Sv(h)|0)>1){f=d+4|0;a=d;while(1){e=c[a>>2]|0;if(!e){g=13;break a}a=e+4|0;if(!(c[(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32))continue;if(c[(c[(c[(c[c[((e|0)==(c[f>>2]|0)?d:a)>>2]>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break}Mv(d,e,b)}else g=13;while(0);b:do if((g|0)==13){c:do if((Sv(h)|0)>0){e=d;while(1){e=c[e>>2]|0;if(!e)break c;if(c[(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break;e=e+4|0}Mv(d,e,b);break b}while(0);Mv(d,0,b)}while(0);e=h;while(1){e=c[e>>2]|0;if(!e)break;d=(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[d>>2]=c[d>>2]&-33;e=e+4|0}Lv(h);return}function ew(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;while(1){g=c[(c[(c[b+16>>2]|0)+112>>2]|0)+16>>2]|0;if(!g)break;h=d+1|0;i=g+16|0;j=c[(c[i>>2]|0)+112>>2]|0;b=j+16|0;f=c[b+12>>2]|0;if(f){if((f|0)>(d|0)){k=11;break}b=c[b+4>>2]|0;f=b;if((b|0)==(e|0))b=j;else{d=j+24|0;if(!((c[j+32>>2]|0)!=0?(c[d>>2]|0)==(e|0):0))e=b;c[d>>2]=f;b=c[(c[i>>2]|0)+112>>2]|0;c[b+32>>2]=c[b+16+12>>2];b=c[(c[i>>2]|0)+112>>2]|0}b=b+16|0}c[b+4>>2]=a;c[(c[(c[i>>2]|0)+112>>2]|0)+16+12>>2]=h;b=g;d=h}if((k|0)==11?(c[j+32>>2]|0)<=(d|0):0){c[j+24>>2]=a;c[(c[(c[i>>2]|0)+112>>2]|0)+32>>2]=h}return}function fw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[(c[b+16>>2]|0)+112>>2]|0)+4|0;c[g>>2]=c[g>>2]|1;g=Jx(a,b)|0;while(1){if(!g)break;f=c[g>>2]&3;e=c[((f|0)==2?g:g+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((f|0)==3?g:g+48|0)+40>>2]|0;f=e+16|0;if(!(c[(c[(c[f>>2]|0)+112>>2]|0)+4>>2]&1)){Vx(d,g,1)|0;c[(c[(c[f>>2]|0)+112>>2]|0)+16>>2]=b;fw(a,e,d)}g=Kx(a,g,b)|0}return}function gw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+144|0;j=k+8|0;i=k;e=k+16|0;h=c[46163]|0;c[46163]=h+1;c[i>>2]=h;Y0(e,93230,i)|0;i=vA(b,e,1)|0;Az(i,134401,280,1)|0;h=c[46163]|0;c[46163]=h+1;c[j>>2]=h;Y0(e,93230,j)|0;h=b+24|0;a[j>>0]=a[h>>0]|0;a[j+1>>0]=a[h+1>>0]|0;a[j+2>>0]=a[h+2>>0]|0;a[j+3>>0]=a[h+3>>0]|0;j=Xx(e,j,0)|0;e=Sy(b)|0;while(1){if(!e)break;Xy(i,e,1)|0;h=az(j,ry(e)|0,1)|0;Az(h,134365,304,1)|0;c[(c[(c[e+16>>2]|0)+112>>2]|0)+16>>2]=h;e=Ty(b,e)|0}f=Sy(b)|0;while(1){if(!f)break;g=c[(c[(c[f+16>>2]|0)+112>>2]|0)+16>>2]|0;h=g+16|0;e=Ex(b,f)|0;while(1){if(!e)break;Vx(i,e,1)|0;m=c[(c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+16>>2]|0;n=Rx(j,g,m,0,1)|0;Az(n,134378,176,1)|0;c[(c[n+16>>2]|0)+116>>2]=e;n=(c[h>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;e=Gx(b,e)|0}f=Ty(b,f)|0}c[d>>2]=j;l=k;return i|0}function hw(a){a=a|0;var b=0,c=0;c=jw()|0;b=Sy(a)|0;while(1){if(!b)break;ow(c,b);b=Ty(a,b)|0}return c|0}function iw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=c[(c[b+16>>2]|0)+236>>2]|0;p=m<<2;o=vH(p)|0;p=vH(p)|0;i=0;l=Jx(a,b)|0;n=0;f=0;while(1){if(!l)break;e=c[l>>2]&3;g=c[((e|0)==2?l:l+-48|0)+40>>2]|0;if((g|0)==(b|0))g=c[((e|0)==3?l:l+48|0)+40>>2]|0;h=0;k=Jx(a,b)|0;j=i;while(1){if(!k)break;if((k|0)!=(l|0)){i=c[k>>2]&3;e=c[((i|0)==2?k:k+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((i|0)==3?k:k+48|0)+40>>2]|0;i=Rx(a,g,e,0,0)|0;if(i)if(g>>>0>>0){e=j+1|0;h=i+16|0;i=c[(c[h>>2]|0)+116>>2]|0;if(!i)h=1;else{dz(d,i)|0;c[(c[h>>2]|0)+116>>2]=0;h=1}}else{h=1;e=j}else e=j}else e=j;k=Kx(a,k,b)|0;j=e}if(!h){c[p+(n<<2)>>2]=g;e=n+1|0}else{c[o+(f<<2)>>2]=g;e=n;f=f+1|0}i=j;l=Kx(a,l,b)|0;n=e}e=m+-1-i|0;a:do if((e|0)>0){if((e|0)<(n|0))g=0;else{if((e|0)!=(n|0))break;f=c[o>>2]|0;g=f+16|0;e=0;while(1){if((e|0)>=(n|0))break a;m=c[p+(e<<2)>>2]|0;Az(Rx(a,f,m,0,1)|0,134378,176,1)|0;d=(c[g>>2]|0)+236|0;c[d>>2]=(c[d>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;e=e+1|0}}while(1){if((g|0)>=(n|0)){f=2;break}f=g|1;if((f|0)>=(n|0)){f=2;break}d=c[p+(g<<2)>>2]|0;m=c[p+(f<<2)>>2]|0;Az(Rx(a,d,m,0,1)|0,134378,176,1)|0;d=(c[d+16>>2]|0)+236|0;c[d>>2]=(c[d>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;g=g+2|0;e=e+-1|0}while(1){if((e|0)<=0)break a;m=c[p>>2]|0;n=c[p+(f<<2)>>2]|0;Az(Rx(a,m,n,0,1)|0,134378,176,1)|0;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;n=(c[n+16>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;f=f+1|0;e=e+-1|0}}while(0);D_(p);D_(o);return}function jw(){return Cw(18136,c[4555]|0)|0}function kw(a,b,d){a=a|0;b=b|0;d=d|0;d=vH(16)|0;c[d+12>>2]=0;c[d+8>>2]=c[b+8>>2];return d|0}function lw(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function mw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)<(e|0)?-1:(b|0)>(e|0)&1)|0}function nw(a){a=a|0;yw(a)|0;return}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d;e=b+16|0;c[f+8>>2]=c[(c[e>>2]|0)+236>>2];a=(nb[c[a>>2]&63](a,f,1)|0)+12|0;c[(c[e>>2]|0)+164>>2]=c[a>>2];c[a>>2]=b;l=d;return}function pw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=b+16|0;c[g+8>>2]=c[(c[f>>2]|0)+236>>2];g=nb[c[a>>2]&63](a,g,4)|0;if(!g)qa(93240,93243,107,93253);e=g+12|0;d=c[e>>2]|0;if((d|0)==(b|0)){b=c[(c[f>>2]|0)+164>>2]|0;c[e>>2]=b;if(!b)nb[c[a>>2]&63](a,g,2)|0}else{do{a=(c[d+16>>2]|0)+164|0;d=c[a>>2]|0;e=(d|0)!=0}while(e&(d|0)!=(b|0));if(e)c[a>>2]=c[(c[d+16>>2]|0)+164>>2]}l=h;return}function qw(a){a=a|0;var b=0,d=0,e=0,f=0;d=nb[c[a>>2]&63](a,0,128)|0;if(d){f=d+12|0;b=c[f>>2]|0;e=c[(c[b+16>>2]|0)+164>>2]|0;c[f>>2]=e;if(!e)nb[c[a>>2]&63](a,d,2)|0}else b=0;return b|0}function rw(){return Cw(18172,c[4555]|0)|0}function sw(a,b,d){a=a|0;b=b|0;d=d|0;d=vH(12)|0;c[d+8>>2]=c[b+8>>2];return d|0}function tw(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function uw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return (b>>>0>e>>>0?1:(b>>>0>>0)<<31>>31)|0}function vw(a){a=a|0;yw(a)|0;return}function ww(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e+8>>2]=b;nb[c[a>>2]&63](a,e,1)|0;l=d;return}function xw(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e+8>>2]=b;nb[c[a>>2]&63](a,e,2)|0;l=d;return}function yw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=0?(c[a+24>>2]|0)<=0:0){h=c[a+4>>2]|0;g=h+32|0;b=c[g>>2]|0;if(b){b=ob[b&127](a,2,0,h)|0;if((b|0)<0){b=-1;break}}else b=0;if(c[a+28>>2]|0)Hw(a,0)|0;f=(b|0)==0;if(f){nb[c[c[a+16>>2]>>2]&63](a,0,64)|0;if((Ew(a)|0)>0){b=-1;break}d=a+8|0;b=c[d>>2]|0;if((c[b+12>>2]|0)>0){e=a+12|0;ob[c[e>>2]&127](a,c[b+8>>2]|0,0,h)|0;b=c[d>>2]|0}else e=a+12|0;ob[c[e>>2]&127](a,b,0,h)|0}b=c[a+20>>2]|0;if(b){if(f&(b|0)==1)ob[c[a+12>>2]&127](a,a,0,h)|0}else D_(a);b=c[g>>2]|0;if(!b)b=0;else{ob[b&127](a,6,0,h)|0;b=0}}else b=-1;while(0);return b|0}function zw(a){a=a|0;var b=0,d=0,e=0;e=a+8|0;b=c[e>>2]|0;d=c[b>>2]|0;a:do if(!(d&12)){if(!(d&3)){d=b+8|0;a=c[d>>2]|0;c[d>>2]=0;break}a=Aw(a)|0;d=c[e>>2]|0;b=c[d+8>>2]|0;d=b+(c[d+12>>2]<<2)|0;while(1){if(b>>>0>=d>>>0)break a;c[b>>2]=0;b=b+4|0}}else a=c[b+4>>2]|0;while(0);e=c[e>>2]|0;c[e>>2]=c[e>>2]&-4097;c[e+16>>2]=0;c[e+4>>2]=0;return a|0}function Aw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+8|0;a=c[g>>2]|0;b=c[a>>2]|0;if(!(b&4096)){a:do if(!(b&3)){if(b&112|0){a=c[a+8>>2]|0;break}a=c[a+4>>2]|0;if(!a)a=0;else{while(1){b=a+4|0;d=c[b>>2]|0;if(!d){e=a;break}c[b>>2]=c[d>>2];c[d>>2]=a;a=d}while(1){b=c[e>>2]|0;if(!b)break a;d=c[b+4>>2]|0;if(!d){e=b;continue}while(1){c[b+4>>2]=c[d>>2];c[d>>2]=b;b=c[d+4>>2]|0;if(!b)break;else{f=d;d=b;b=f}}c[e>>2]=d;e=d}}}else{e=c[a+8>>2]|0;f=e+(c[a+12>>2]<<2)|0;b=0;a=0;while(1){if(e>>>0>=f>>>0)break a;d=c[e>>2]|0;if(d){if(!b){b=d;a=d}else c[b>>2]=d;while(1){d=c[b>>2]|0;if(!d)break;else b=d}c[e>>2]=b}e=e+4|0}}while(0);g=c[g>>2]|0;c[g+4>>2]=a;c[g>>2]=c[g>>2]|4096}else a=c[a+4>>2]|0;return a|0}function Bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=a+8|0;if(c[c[s>>2]>>2]&4096|0)Dw(a,0)|0;r=c[a+4>>2]|0;m=c[r>>2]|0;n=c[r+4>>2]|0;q=r+8|0;u=c[q>>2]|0;o=c[r+20>>2]|0;p=a+20|0;f=c[p>>2]&-32769;c[p>>2]=f;a:do if(!b){if(d&384|0){f=c[s>>2]|0;e=c[f+8>>2]|0;if(!e){e=0;break}if(d&256){e=c[e+4>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}else c[f+4>>2]=e;if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}if(d&4098|0){e=c[s>>2]|0;if(c[e>>2]&144|0){e=0;break}e=c[e+8>>2]|0;if(!e){e=0;break}else{h=e;t=84;break}}if(!(d&64))e=0;else{i=r+16|0;b:do if((c[i>>2]|0)!=0|(u|0)<0){j=a+12|0;k=(u|0)<0;f=0-u|0;e=c[(c[s>>2]|0)+8>>2]|0;while(1){if(!e)break b;g=c[e>>2]|0;h=c[i>>2]|0;if(h|0){if(k)b=c[e+8>>2]|0;else b=e+f|0;vb[h&127](a,b,r)}if((c[q>>2]|0)>=0){e=g;continue}ob[c[j>>2]&127](a,e,0,r)|0;e=g}}while(0);e=c[s>>2]|0;c[e+4>>2]=0;c[e+8>>2]=0;c[(c[s>>2]|0)+16>>2]=0;e=0}}else{if(d&2049|0){g=r+12|0;e=c[g>>2]|0;h=(d&1|0)==0;if(!(h|(e|0)==0)){e=nb[e&63](a,b,r)|0;if(!e){e=0;break}else f=e}else f=b;do if((u|0)>-1)h=f+u|0;else{e=ob[c[a+12>>2]&127](a,0,12,r)|0;if(e|0){c[e+8>>2]=f;h=e;break}if(!(c[g>>2]|0)){e=0;break a}e=c[r+16>>2]|0;if(h|(e|0)==0){e=0;break a}vb[e&127](a,f,r);e=0;break a}while(0);g=c[s>>2]|0;e=c[g>>2]|0;do if(!(e&128)){if(!(e&16))if(!(e&32)){t=51;break}else{t=48;break}f=c[g+4>>2]|0;e=(f|0)!=0;if(!(d&8192)){if(!e){t=48;break}if((f|0)==(c[g+8>>2]|0)){t=48;break}r=f+4|0;a=c[r>>2]|0;c[h+4>>2]=a;c[a>>2]=h;c[h>>2]=f;c[r>>2]=h;break}else{if(!e){t=51;break}e=c[f>>2]|0;if(!e){t=51;break}c[h>>2]=e;c[e+4>>2]=h;c[h+4>>2]=f;c[f>>2]=h;break}}else if(!(d&8192))t=48;else t=51;while(0);if((t|0)==48){e=c[g+8>>2]|0;c[h>>2]=e;if(!e)e=h;else c[h+4>>2]=c[e+4>>2];c[e+4>>2]=h;c[(c[s>>2]|0)+8>>2]=h}else if((t|0)==51){f=g+8|0;e=c[f>>2]|0;if(!e){c[f>>2]=h;e=h}else{r=e+4|0;c[c[r>>2]>>2]=h;c[h+4>>2]=c[r>>2]}c[e+4>>2]=h;c[h>>2]=0}e=c[s>>2]|0;f=e+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1;c[e+4>>2]=h;if((u|0)<0){e=c[h+8>>2]|0;break}else{e=h+(0-u)|0;break}}h=c[s>>2]|0;do if(!(d&512)){e=c[h+4>>2]|0;if(e|0){if((u|0)<0)g=c[e+8>>2]|0;else g=e+(0-u)|0;if((g|0)==(b|0))break}e=b+m|0;if((n|0)<0){b=c[e>>2]|0;t=68}else{b=e;t=68}}else t=68;while(0);if((t|0)==68){g=(u|0)<0;i=(n|0)<0;j=(o|0)==0;k=(n|0)<1;l=0-u|0;e=h+8|0;do{e=c[e>>2]|0;if(!e){e=0;break a}if(g)f=c[e+8>>2]|0;else f=e+l|0;f=f+m|0;if(i)f=c[f>>2]|0;do if(j)if(k){f=b$(b,f)|0;break}else{f=L0(b,f,n)|0;break}else f=ob[o&127](a,b,f,r)|0;while(0)}while((f|0)!=0);f=c[p>>2]|0}c[p>>2]=f|32768;if(!(d&4098)){do if(!(d&8)){f=c[s>>2]|0;if(!(d&16)){c[f+4>>2]=e;break}if((e|0)==(c[f+8>>2]|0)){c[f+4>>2]=0;e=0;break a}else{e=e+4|0;t=108;break}}else{f=c[s>>2]|0;t=108}while(0);if((t|0)==108){e=c[e>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}else{h=e;t=84}}while(0);if((t|0)==84){e=c[h>>2]|0;if(e){c[e+4>>2]=c[h+4>>2];e=c[h>>2]|0}f=(c[s>>2]|0)+8|0;g=c[f>>2]|0;if((h|0)==(g|0)){c[f>>2]=e;e=c[(c[s>>2]|0)+8>>2]|0;if(e|0)c[e+4>>2]=c[h+4>>2]}else{f=h+4|0;c[c[f>>2]>>2]=e;e=g+4|0;if((h|0)==(c[e>>2]|0))c[e>>2]=c[f>>2]}e=c[s>>2]|0;f=e+4|0;if((h|0)==(c[f>>2]|0))g=c[h>>2]|0;else g=0;c[f>>2]=g;t=e+16|0;c[t>>2]=(c[t>>2]|0)+-1;if((u|0)<0)e=c[h+8>>2]|0;else e=h+(0-u)|0;f=c[r+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))vb[f&127](a,e,r);if((c[q>>2]|0)<0)ob[c[a+12>>2]&127](a,h,0,r)|0}return e|0}function Cw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if((a|0)!=0&(b|0)!=0?(f=C_(40)|0,(f|0)!=0):0){c[f>>2]=0;c[f+16>>2]=0;c[f+4>>2]=0;Kw(f,a,0)|0;d=f+20|0;i=a+32|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;d=c[i>>2]|0;do if(d){c[g>>2]=0;d=ob[d&127](f,1,g,a)|0;if((d|0)>=0)if(d){e=c[g>>2]|0;if(e|0)if(!(c[b+4>>2]&c[e>>2])){d=f;h=12;break}else{d=f;break}d=a+28|0;if(!(c[d>>2]|0)){d=f;h=12}else{D_(f);e=ob[c[d>>2]&127](0,0,40,a)|0;if(!e){d=0;break a}c[e>>2]=0;c[e+16>>2]=0;c[e+4>>2]=0;Kw(e,a,0)|0;c[e+20>>2]=1;c[e+24>>2]=0;c[e+32>>2]=0;c[e+28>>2]=0;d=e;f=e;h=11}}else{d=f;h=11}else{d=f;h=12}}else{d=f;h=11}while(0);if((h|0)==11){e=ob[c[d+12>>2]&127](d,0,28,a)|0;c[g>>2]=e;if(!e){d=f;h=12}else{c[e>>2]=c[b+4>>2];g=e+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0}}if((h|0)==12){D_(d);d=0;break}c[d+8>>2]=e;c[d>>2]=c[b>>2];c[d+16>>2]=b;e=c[i>>2]|0;if(e)ob[e&127](d,5,f,a)|0}else d=0;while(0);l=j;return d|0}function Dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[c[a+16>>2]>>2]|0;j=a+8|0;g=c[j>>2]|0;h=c[g>>2]|0;d=h&4096;if(!b)if(!d)b=-1;else{e=d;b=c[g+4>>2]|0;i=5}else if(!(c[g+16>>2]|0)){e=0;i=5}else b=-1;a:do if((i|0)==5){c[g>>2]=h&-4097;if(!(h&3)){d=g+4|0;if(!(h&12)){c[d>>2]=0;d=g+8|0}c[d>>2]=b;if(e|0){b=0;break}c[(c[j>>2]|0)+16>>2]=-1;b=0;break}c[g+4>>2]=0;if(!e){c[g+16>>2]=0;while(1){if(!b){b=0;break a}j=c[b>>2]|0;nb[f&63](a,b,32)|0;b=j}}e=c[g+8>>2]|0;a=e+(c[g+12>>2]<<2)|0;while(1){if(e>>>0>=a>>>0){b=0;break a}d=c[e>>2]|0;if(d){c[e>>2]=b;b=c[d>>2]|0;c[d>>2]=0}e=e+4|0}}while(0);return b|0}function Ew(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(c[d>>2]&4096){Dw(a,0)|0;d=c[b>>2]|0}e=d+16|0;a=c[e>>2]|0;do if((a|0)<0){b=c[d>>2]|0;if(b&12|0){a=Fw(c[d+4>>2]|0)|0;c[e>>2]=a;break}if(b&112){a=0;b=d+8|0;while(1){b=c[b>>2]|0;if(!b)break;a=a+1|0}c[e>>2]=a}}while(0);return a|0}function Fw(a){a=a|0;var b=0;if(!a)return 0;else{b=Fw(c[a+4>>2]|0)|0;return b+1+(Fw(c[a>>2]|0)|0)|0}return 0}function Gw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=l;l=l+128|0;z=G+120|0;r=G;F=a+8|0;e=c[F>>2]|0;if(c[e>>2]&4096){Dw(a,0)|0;e=c[F>>2]|0}E=c[a+4>>2]|0;A=c[E>>2]|0;B=c[E+4>>2]|0;x=E+8|0;D=c[x>>2]|0;C=c[E+20>>2]|0;t=a+20|0;c[t>>2]=c[t>>2]&-32769;h=c[e+4>>2]|0;a:do if(!b)if((d&448|0)==0|(h|0)==0)e=0;else{if(!(d&64)){b:do if(!(d&256)){e=h;while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break b;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}}else{e=h;while(1){f=c[e>>2]|0;if(!f)break b;a=f+4|0;c[e>>2]=c[a>>2];c[a>>2]=e;e=f}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-D)|0;break}}b=E+16|0;if((c[b>>2]|0)!=0|(D|0)<0){j=a+12|0;k=(D|0)<0;i=0-D|0;e=h;do{h=e;while(1){e=h+4|0;f=c[e>>2]|0;if(!f)break;c[e>>2]=c[f>>2];c[f>>2]=h;h=f}e=c[h>>2]|0;f=c[b>>2]|0;if(f|0){if(k)g=c[h+8>>2]|0;else g=h+i|0;vb[f&127](a,g,E)}if((c[x>>2]|0)<0)ob[c[j>>2]&127](a,h,0,E)|0}while((e|0)!=0);e=c[F>>2]|0}c[e+16>>2]=0;c[e+4>>2]=0;e=0}else{y=a+16|0;u=(d&4098|0)==0;c:do if(u|(c[(c[y>>2]|0)+4>>2]|0)!=8)v=45;else{k=(B|0)<0;e=b+A|0;if(k)e=c[e>>2]|0;i=(C|0)==0;j=(B|0)<1;g=nb[c[a>>2]&63](a,b,4)|0;while(1){if(!g){v=45;break c}f=g+A|0;if(k)f=c[f>>2]|0;do if(i)if(j){f=b$(e,f)|0;break}else{f=L0(e,f,B)|0;break}else f=ob[C&127](a,e,f,E)|0;while(0);if(f|0){v=45;break c}if((g|0)==(b|0))break;g=nb[c[a>>2]&63](a,g,8)|0}h=c[(c[F>>2]|0)+4>>2]|0;c[z>>2]=c[h+4>>2];c[z+4>>2]=c[h>>2];e=z;v=180}while(0);d:do if((v|0)==45){do if(!(d&2565)){if(d&32|0){if((D|0)<0)g=c[b+8>>2]|0;else g=b+(0-D)|0;e=g+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e;if(!h){e=b;f=z;h=z;v=198;break}else{e=b;s=f;j=b;v=64;break}}if(h){if((D|0)<0)e=c[h+8>>2]|0;else e=h+(0-D)|0;if((e|0)!=(b|0)){f=b+A|0;if((B|0)<0){g=b;e=0;s=c[f>>2]|0;j=0;v=64}else{g=b;e=0;s=f;j=0;v=64}}else{e=0;g=b;f=z;k=z;j=0;v=141}}else{e=0;g=b;f=z;h=z;v=198}}else{if(!(d&512)){e=b+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e}else f=b;if(!h){e=0;g=b;f=z;h=z;v=198}else{g=b;e=0;s=f;j=0;v=64}}while(0);e:do if((v|0)==64){f:do if((c[(c[y>>2]|0)+4>>2]|0)==4?(q=c[(c[F>>2]|0)+24>>2]|0,!((d&516|0)==0|(q|0)==0)):0){b=(D|0)<0;m=(B|0)<0;n=(C|0)==0;o=(B|0)<1;p=0-D|0;k=0;f=h;while(1){if((k|0)>=(q|0)){f=z;k=z;m=0;break}if(b)i=c[f+8>>2]|0;else i=f+p|0;i=i+A|0;if(m)i=c[i>>2]|0;do if(n)if(o){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if(!i){v=80;break}c[r+(k<<2)>>2]=i;f=c[((i|0)<0?f+4|0:f)>>2]|0;if(!f){e=0;break a}else k=k+1|0}if((v|0)==80)if(b){e=c[f+8>>2]|0;break a}else{e=f+p|0;break a}while(1){if((m|0)>=(q|0))break f;do if((c[r+(m<<2)>>2]|0)<0){i=h+4|0;b=c[i>>2]|0;if((c[r+((m|1)<<2)>>2]|0)<0){c[i>>2]=c[b>>2];c[b>>2]=h;c[f+4>>2]=b;f=b;h=k;i=b+4|0;break}else{c[k>>2]=b;c[f+4>>2]=h;f=h;h=b;i=b;break}}else{i=c[h>>2]|0;if((c[r+((m|1)<<2)>>2]|0)>0){p=i+4|0;c[h>>2]=c[p>>2];c[p>>2]=h;c[k>>2]=i;h=i;break}else{c[f+4>>2]=i;c[k>>2]=h;f=i;i=i+4|0;break}}while(0);k=h;m=m+2|0;h=c[i>>2]|0}}else{f=z;k=z}while(0);n=(D|0)<0;o=(B|0)<0;p=(C|0)!=0;q=(B|0)<1;r=0-D|0;i=h;g:while(1){h=i;while(1){if(n)i=c[h+8>>2]|0;else i=h+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if(!i){v=140;break g}if((i|0)>=0)break;b=h+4|0;m=c[b>>2]|0;if(!m){v=121;break g}if(n)i=c[m+8>>2]|0;else i=m+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if((i|0)>=0){v=118;break}c[b>>2]=c[m>>2];c[m>>2]=h;c[f+4>>2]=m;h=c[m+4>>2]|0;if(!h){f=m;h=k;v=198;break e}else f=m}if((v|0)==118){v=0;if(!i){v=119;break}c[k>>2]=m;c[f+4>>2]=h;i=c[m>>2]|0;if(!i){f=h;h=m;v=198;break e}else{f=h;k=m;continue}}b=c[h>>2]|0;if(!b){v=139;break}if(n)i=c[b+8>>2]|0;else i=b+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if((i|0)>0){i=b+4|0;c[h>>2]=c[i>>2];c[i>>2]=h;c[k>>2]=b;i=c[b>>2]|0;if(!i){h=b;v=198;break e}else{k=b;continue}}if(!i){v=137;break}c[f+4>>2]=b;c[k>>2]=h;i=c[b+4>>2]|0;if(!i){f=b;v=198;break e}else{f=b;k=h}}if((v|0)==119){c[f+4>>2]=h;f=h;h=m;v=141;break}else if((v|0)==121){c[f+4>>2]=h;f=h;h=k;v=198;break}else if((v|0)==137){c[k>>2]=h;k=h;h=b;v=141;break}else if((v|0)==139){c[k>>2]=h;v=198;break}else if((v|0)==140)if(!h){h=k;v=198;break}else{v=141;break}}while(0);do if((v|0)==141){c[t>>2]=c[t>>2]|32768;i=h+4|0;c[k>>2]=c[i>>2];c[f+4>>2]=c[h>>2];if(!(d&516)){if(d&8|0){c[i>>2]=c[z>>2];c[h>>2]=0;c[z>>2]=h;v=169;break}if(d&16|0){v=z+4|0;c[h>>2]=c[v>>2];c[i>>2]=0;c[v>>2]=h;v=175;break}if(!u){e=f;v=180;break d}if(d&2049|0){if(c[(c[y>>2]|0)+4>>2]&4|0){e=h;break}c[i>>2]=0;e=z+4|0;c[h>>2]=c[e>>2];c[e>>2]=h;e=h;v=205;break}if(!(d&32)){e=0;break a}if(!(c[(c[y>>2]|0)+4>>2]&4)){c[e+4>>2]=0;x=z+4|0;c[e>>2]=c[x>>2];c[x>>2]=j;e=(c[F>>2]|0)+16|0;c[e>>2]=(c[e>>2]|0)+1;e=h;break}e=c[E+16>>2]|0;if(e|0)vb[e&127](a,g,E);if((c[x>>2]|0)<0){ob[c[a+12>>2]&127](a,j,0,E)|0;e=h}else e=h}else e=h}else if((v|0)==198){c[f+4>>2]=0;c[h>>2]=0;if(!(d&8))if(!(d&16)){if(d&516|0){e=f;break d}if(!(d&2049)){if(!(d&32)){g=0;e=f;break d}x=(c[F>>2]|0)+16|0;c[x>>2]=(c[x>>2]|0)+1}else{e=0;v=205}}else v=175;else v=169}while(0);if((v|0)==169){h=z+4|0;e=c[h>>2]|0;if(!e){e=f;break}while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}c[h>>2]=c[e>>2]}else if((v|0)==175){e=c[z>>2]|0;if(!e){e=f;break}while(1){f=c[e>>2]|0;if(!f)break;x=f+4|0;c[e>>2]=c[x>>2];c[x>>2]=e;e=f}c[z>>2]=c[e+4>>2]}else if((v|0)==205){i=E+12|0;h=c[i>>2]|0;j=(d&1|0)==0;if(!(j|(h|0)==0))g=nb[h&63](a,g,E)|0;do if(g){if((D|0)>-1){e=g+D|0;v=215;break}e=ob[c[a+12>>2]&127](a,0,12,E)|0;if(e|0){c[e+8>>2]=g;break}if((c[i>>2]|0)!=0?(w=c[E+16>>2]|0,!(j|(w|0)==0)):0){vb[w&127](a,g,E);v=215}else v=215}else v=215;while(0);if((v|0)==215)if(!e){e=f;break}f=(c[F>>2]|0)+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1}c[e+4>>2]=c[z>>2];c[e>>2]=c[z+4>>2];h:do if(!((d&516|0)==0?1:(c[(c[y>>2]|0)+4>>2]&8|0)==0)){m=(D|0)<0;if(m)f=c[e+8>>2]|0;else f=e+(0-D)|0;n=(B|0)<0;f=f+A|0;if(n)f=c[f>>2]|0;j=(C|0)==0;k=(B|0)<1;b=0-D|0;while(1){i=e+4|0;g=c[i>>2]|0;if(!g)break h;while(1){h=c[g>>2]|0;if(!h)break;z=h+4|0;c[g>>2]=c[z>>2];c[z>>2]=g;g=h}c[i>>2]=g;if(m)h=c[g+8>>2]|0;else h=g+b|0;h=h+A|0;if(n)h=c[h>>2]|0;do if(j)if(k){h=b$(f,h)|0;break}else{h=L0(f,h,B)|0;break}else h=ob[C&127](a,f,h,E)|0;while(0);if(h|0)break h;c[i>>2]=c[g>>2];c[g>>2]=e;e=g}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break a}else{e=e+(0-D)|0;break a}}while(0);if((v|0)==180){if((D|0)<0)g=c[h+8>>2]|0;else g=h+(0-D)|0;f=c[E+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))vb[f&127](a,g,E);if((c[x>>2]|0)<0)ob[c[a+12>>2]&127](a,h,0,E)|0;a=(c[F>>2]|0)+16|0;E=c[a>>2]|0;c[a>>2]=(E|0)<1?-1:E+-1|0}do{f=e+4|0;e=c[f>>2]|0}while((e|0)!=0);c[f>>2]=c[z>>2];c[(c[F>>2]|0)+4>>2]=c[z+4>>2];e=d&2|0?g:0}while(0);l=G;return e|0}function Hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(c[c[a+8>>2]>>2]&4096|0)Dw(a,0)|0;f=(b|0)!=0;if(f){if(c[c[b+8>>2]>>2]&4096|0)Dw(b,0)|0;if((c[b+16>>2]|0)==(c[a+16>>2]|0)){d=b;e=7}else b=0}else{d=0;e=7}a:do if((e|0)==7){while(1){if(!d)break;if((d|0)==(a|0)){b=0;break a}d=c[d+28>>2]|0;e=7}d=a+28|0;e=c[d>>2]|0;if(e|0){g=e+24|0;c[g>>2]=(c[g>>2]|0)+-1}c[a+32>>2]=0;c[d>>2]=0;if(f){c[d>>2]=b;c[a>>2]=25;g=b+24|0;c[g>>2]=(c[g>>2]|0)+1;break}else{c[a>>2]=c[c[a+16>>2]>>2];b=e;break}}while(0);return b|0}function Iw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if(!(d&99)){if((d&516|0)==0?(e=c[(c[a+16>>2]|0)+4>>2]|0,!((d&384|0)!=0&(e&12|0)==0)):0){if(e&12|0){if(!(d&408)){e=0;break}o=(d&136|0)!=0;p=(d&272|0)!=0;l=0;f=0;e=0;n=a;while(1){if(!n)break;m=nb[c[c[n+16>>2]>>2]&63](n,b,d)|0;do if(!m)g=l;else{h=c[n+4>>2]|0;i=c[h+4>>2]|0;j=c[h+20>>2]|0;g=m+(c[h>>2]|0)|0;if((i|0)<0)k=c[g>>2]|0;else k=g;if(e|0){do if(!j)if((i|0)<1){g=b$(k,f)|0;break}else{g=L0(k,f,i)|0;break}else g=ob[j&127](n,k,f,h)|0;while(0);if(!(o&(g|0)<0|p&(g|0)>0)){g=l;break}}g=n;f=k;e=m}while(0);l=g;n=c[n+28>>2]|0}c[a+32>>2]=l;break}if(!(d&24)){e=0;break}j=a+32|0;f=c[j>>2]|0;if(f){e=c[(c[f+4>>2]|0)+8>>2]|0;g=c[(c[f+8>>2]|0)+4>>2]|0;if((e|0)<0)e=c[g+8>>2]|0;else e=g+(0-e)|0;if((e|0)==(b|0))e=b;else{f=a;h=32}}else{f=a;h=32}do if((h|0)==32){while(1){if(!f){h=33;break}e=nb[c[c[f+16>>2]>>2]&63](f,b,4)|0;if(e|0){h=36;break}f=c[f+28>>2]|0;h=32}if((h|0)==33){c[j>>2]=0;e=0;break a}else if((h|0)==36){c[j>>2]=f;break}}while(0);i=(d<<4&128^128)+128|0;e=nb[c[c[f+16>>2]>>2]&63](f,e,d)|0;while(1){h=f+16|0;while(1){if(!e)break;else g=a;while(1){if((g|0)==(f|0))break a;if(nb[c[c[g+16>>2]>>2]&63](g,e,4)|0)break;g=c[g+28>>2]|0}e=nb[c[c[h>>2]>>2]&63](f,e,d)|0}f=c[f+28>>2]|0;c[j>>2]=f;if(!f){e=0;break a}e=nb[c[c[f+16>>2]>>2]&63](f,0,i)|0}}else f=a;while(1){if(!f){f=0;e=0;break}e=nb[c[c[f+16>>2]>>2]&63](f,b,d)|0;if(e|0)break;f=c[f+28>>2]|0}c[a+32>>2]=f}else e=nb[c[c[a+16>>2]>>2]&63](a,b,d)|0;while(0);return e|0}function Jw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+32|0;f=nb[c[a>>2]&63](a,0,128)|0;do{if(!f){e=0;break}h=c[g>>2]|0;e=f;f=nb[c[a>>2]&63](a,f,8)|0;e=nb[b&63]((h|0)==0?a:h,e,d)|0}while((e|0)>=0);return e|0}function Kw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=a+4|0;n=c[f>>2]|0;a:do if(n)if(b){m=c[c[a+16>>2]>>2]|0;g=a+8|0;if(c[c[g>>2]>>2]&4096|0)Dw(a,0)|0;e=c[n+32>>2]|0;if(e|0?(ob[e&127](a,3,b,n)|0)<0:0){b=0;break}c[f>>2]=b;e=c[b+28>>2]|0;c[a+12>>2]=(e|0)==0?52:e;e=c[c[g>>2]>>2]|0;if(!(e&112)){do if(!(e&2))if(!(e&3))if(!(d&1))break;else{b=n;break a}else if((d&3|0)==3){b=n;break a}else break;else if(d&2|0){b=n;break a}while(0);h=Aw(a)|0;e=c[g>>2]|0;l=c[e>>2]|0;c[e>>2]=l&-4097;c[e+4>>2]=0;c[e+16>>2]=0;b:do if(l&3|0){l=c[e+8>>2]|0;f=l+(c[e+12>>2]<<2)|0;e=l;while(1){if(e>>>0>=f>>>0)break b;c[e>>2]=0;e=e+4|0}}while(0);i=(d&2|0)==0;j=b+8|0;k=b+4|0;l=b+24|0;while(1){if(!h){b=n;break a}d=c[h>>2]|0;if(i){e=c[j>>2]|0;if((e|0)<0)e=c[h+8>>2]|0;else e=h+(0-e)|0;g=c[k>>2]|0;e=e+(c[b>>2]|0)|0;if((g|0)<0)e=c[e>>2]|0;f=c[l>>2]|0;if(!f)e=Mw(0,e,g)|0;else e=nb[f&63](a,e,b)|0;c[h+4>>2]=e}nb[m&63](a,h,32)|0;h=d}}else b=n}else b=n;else{c[f>>2]=b;n=c[b+28>>2]|0;c[a+12>>2]=(n|0)==0?52:n}while(0);return b|0}function Lw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=(c|0)==0;do if(!b)if(a)a=0;else a=C_(c)|0;else if(a){D_(b);a=0;break}else{a=F_(b,c)|0;break}while(0);return a|0}function Mw(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;g=c;if((e|0)>=1){h=c+e+-1|0;g=(h>>>0>>0?c:h)+(1-g)&-2;f=c;while(1){if(f>>>0>=h>>>0)break;b=O(((d[f>>0]|0)<<8)+b+(d[f+1>>0]|0)|0,17109811)|0;f=f+2|0}f=c+g|0;if(f>>>0>h>>>0)c=e;else{c=e;b=O(((d[f>>0]|0)<<8)+b|0,17109811)|0}}else{while(1){f=a[c>>0]|0;if(!(f<<24>>24))break;h=a[c+1>>0]|0;e=O(((f&255)<<8)+b+(h&255)|0,17109811)|0;b=e;c=c+(h<<24>>24?2:1)|0}c=c-g|0}return O(b+c|0,17109811)|0}function Nw(a){a=a|0;var b=0;b=c[46164]|0;c[46164]=a;return b|0}function Ow(a){a=a|0;var b=0;b=c[46165]|0;c[46165]=a;return b|0}function Pw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Qw(a,b,f)|0;l=e;return d|0}function Qw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=(a|0)==3;h=f?c[46167]|0:(a|0)==2?1:a;c[46167]=h;i=c[46168]|0;c[46168]=i>>>0>h>>>0?i:h;do if(h>>>0<(c[46165]|0)>>>0){a=c[46166]|0;if(!a){a=l3()|0;c[46166]=a;if(!a){a=1;break}}if(!f){o3(a)|0;a=c[46166]|0}r0(a,b,d)|0;a=0}else{if(c[46164]|0){Rw(a,b,d);a=0;break}if(f)a=c[15686]|0;else{i=c[15686]|0;c[e>>2]=(a|0)==1?93267:93273;g1(i,93281,e)|0;a=i}r0(a,b,d)|0;a=0}while(0);l=g;return a|0}function Rw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[46169]|0)==0?(f=C_(c[4564]|0)|0,c[46169]=f,(f|0)==0):0)D1(93286,c[15686]|0)|0;else e=4;do if((e|0)==4){if((a|0)!=3){kb[c[46164]&63]((a|0)==1?93267:93273)|0;kb[c[46164]&63](93945)|0}while(1){a=q0(c[46169]|0,c[4564]|0,b,d)|0;e=c[4564]|0;if((a|0)>-1&(a|0)<(e|0)){e=7;break}e=e<<1;f=a+1|0;f=(e|0)>(f|0)?e:f;c[4564]=f;if(!(F_(c[46169]|0,f)|0)){e=9;break}}if((e|0)==7){kb[c[46164]&63](c[46169]|0)|0;break}else if((e|0)==9){D1(93286,c[15686]|0)|0;break}}while(0);return}function Sw(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Qw(1,a,e)|0;l=d;return}function Tw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!e){e=(d|0)==0?1024:d;d=e;e=C_(e)|0;f=1}else f=0;c[b+12>>2]=f;c[b>>2]=e;c[b+8>>2]=e+d;c[b+4>>2]=e;a[e>>0]=0;return}function Uw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=c[a>>2]|0;g=(c[h>>2]|0)-f|0;e=g<<1;g=g+b|0;e=g>>>0>e>>>0?g:e;g=a+4|0;b=f;f=(c[g>>2]|0)-f|0;d=a+12|0;if(!(c[d>>2]|0)){i=C_(e)|0;F3(i|0,b|0,f|0)|0;c[d>>2]=1;b=i}else b=F_(b,e)|0;c[a>>2]=b;c[g>>2]=b+f;c[h>>2]=b+e;return 0}function Vw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=a+4|0;e=c[f>>2]|0;if((e+d|0)>>>0>(c[a+8>>2]|0)>>>0){Uw(a,d)|0;e=c[f>>2]|0}F3(e|0,b|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function Ww(a,b){a=a|0;b=b|0;return Vw(a,b,W_(b)|0)|0}function Xw(a){a=a|0;if(c[a+12>>2]|0)D_(c[a>>2]|0);return}function Yw(a){a=a|0;var b=0,e=0;b=a+4|0;e=c[b>>2]|0;if(e>>>0>(c[a>>2]|0)>>>0){c[b>>2]=e+-1;a=d[e>>0]|0}else a=-1;return a|0}function Zw(a,b,d){a=a|0;b=b|0;d=d|0;Qz(c[46171]|0,c[b+8>>2]|0)|0;Qz(c[46171]|0,c[b+12>>2]|0)|0;Ny(c[46171]|0,b);return}function _w(a,b){a=a|0;b=b|0;var c=0;c=yz(a,93334,0)|0;if((b|0)!=0&(c|0)==0){$w(a);c=yz(a,93334,0)|0}return c|0}function $w(a){a=a|0;var b=0,c=0,d=0;d=fz(a)|0;jB(d,d,104,0,1)|0;c=Sy(d)|0;while(1){if(!c)break;bx(a,c);b=Ex(d,c)|0;while(1){if(!b)break;cx(a,b);b=Gx(d,b)|0}c=Ty(d,c)|0}return}function ax(b){b=b|0;var c=0;c=b+24|0;a[c>>0]=a[c>>0]|64;hx(b);c=yA(b)|0;ex((c|0)==0?b:c,b);return}function bx(a,b){a=a|0;b=b|0;var d=0;d=dx(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))ex(a,b);return}function cx(a,b){a=a|0;b=b|0;var d=0;d=dx(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))ex(a,b);return}function dx(a){a=a|0;return yz(a,93322,0)|0}function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=Az(b,93322,16,0)|0;f=fx(a,c[b>>2]&3)|0;e=d+8|0;a:do if(!(c[e>>2]|0)){a=fz(a)|0;c[e>>2]=fx(a,c[b>>2]&3)|0;a=gx(b)|0;d=d+12|0;c[d>>2]=My(ez(b)|0,((a|0)>4?a:4)<<2)|0;a=nb[c[f>>2]&63](f,0,128)|0;while(1){if(!a)break a;e=ez(b)|0;e=Oz(e,c[a+12>>2]|0)|0;c[(c[d>>2]|0)+(c[a+16>>2]<<2)>>2]=e;a=nb[c[f>>2]&63](f,a,8)|0}}while(0);return}function fx(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;a=_w(a,0)|0;a:do if(!a)a=0;else switch(b|0){case 0:{a=c[a+16>>2]|0;break a}case 1:{a=c[a+8>>2]|0;break a}case 2:case 3:{a=c[a+12>>2]|0;break a}default:{c[d>>2]=b;Pw(1,93347,d)|0;a=0;break a}}while(0);l=e;return a|0}function gx(a){a=a|0;var b=0;b=fz(ez(a)|0)|0;a=fx(b,c[a>>2]&3)|0;if(!a)a=0;else a=Ew(a)|0;return a|0}function hx(a){a=a|0;var b=0,d=0,e=0,f=0;d=Az(a,93334,20,0)|0;e=d+8|0;c[e>>2]=CA(a,18260,c[4563]|0)|0;f=d+12|0;c[f>>2]=CA(a,18260,c[4563]|0)|0;d=d+16|0;c[d>>2]=CA(a,18260,c[4563]|0)|0;b=yA(a)|0;if(!b){b=c[46170]|0;if(!((b|0)==0|(b|0)==(a|0))){b=_w(b,0)|0;ix(c[b+8>>2]|0,c[e>>2]|0,a,1);ix(c[b+12>>2]|0,c[f>>2]|0,a,2);ix(c[b+16>>2]|0,c[d>>2]|0,a,0)}}else{a=_w(b,0)|0;Hw(c[e>>2]|0,c[a+8>>2]|0)|0;Hw(c[f>>2]|0,c[a+12>>2]|0)|0;Hw(c[d>>2]|0,c[a+16>>2]|0)|0}return}function ix(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=nb[c[b>>2]&63](b,0,128)|0;while(1){if(!g)break;h=jx(e,c[g+8>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,f)|0;a[h+22>>0]=a[g+22>>0]|0;a[h+21>>0]=a[g+21>>0]|0;nb[c[d>>2]&63](d,h,1)|0;g=nb[c[b>>2]&63](b,g,8)|0}return}function jx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=My(b,24)|0;a[h+20>>0]=g;c[h+8>>2]=Oz(b,d)|0;c[h+12>>2]=Oz(b,e)|0;c[h+16>>2]=f;return h|0}function kx(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+8>>2]=b;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function lx(a,b){a=a|0;b=b|0;var c=0;c=Hw(a,0)|0;b=kx(a,b)|0;Hw(a,c)|0;return b|0}function mx(a,b){a=a|0;b=b|0;a=dx(a)|0;if(!a)a=0;else a=kx(c[a+8>>2]|0,b)|0;return a|0}function nx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!b){b=c[46170]|0;if(!b){a[g>>0]=a[18296]|0;a[g+1>>0]=a[18297]|0;a[g+2>>0]=a[18298]|0;a[g+3>>0]=a[18299]|0;b=Xx(0,g,0)|0;c[46170]=b}}if(!f)b=px(b,d,e)|0;else b=ox(b,d,e,f)|0;l=h;return b|0}function ox(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=fz(a)|0;_w(a,1)|0;g=fx(a,b)|0;f=lx(g,d)|0;a:do if(!f){f=kx(g,d)|0;if(f|0){f=jx(a,d,e,c[f+16>>2]|0,b)|0;nb[c[g>>2]&63](g,f,1)|0;h=16;break}g=fx(i,b)|0;f=jx(a,d,e,Ew(g)|0,b)|0;nb[c[g>>2]&63](g,f,1)|0;switch(b|0){case 0:{jB(i,i,57,f,1)|0;h=16;break a}case 1:{d=Sy(i)|0;while(1){if(!d){h=16;break a}qx(a,d,f);d=Ty(i,d)|0}}case 2:case 3:{g=Sy(i)|0;while(1){if(!g){h=16;break a}d=Ex(i,g)|0;while(1){if(!d)break;qx(a,d,f);d=Gx(i,d)|0}g=Ty(i,g)|0}}default:break a}}else{h=f+12|0;Qz(a,c[h>>2]|0)|0;c[h>>2]=Oz(a,e)|0;h=16}while(0);if((h|0)==16)if((b|0)==0&(f|0)!=0)rx(a,f,e)|0;iz(a,a,f);return f|0}function px(a,b,c){a=a|0;b=b|0;c=c|0;a=fx(a,b)|0;if(!a)a=0;else a=kx(a,c)|0;return a|0}function qx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;b=dx(b)|0;f=d+16|0;e=c[f>>2]|0;if((e|0)>3){g=c[a+64>>2]|0;b=b+12|0;e=e<<2;c[b>>2]=ob[c[(c[g>>2]|0)+8>>2]&127](c[g+12>>2]|0,c[b>>2]|0,e,e+4|0)|0}else b=b+12|0;g=Oz(a,c[d+12>>2]|0)|0;c[(c[b>>2]|0)+(c[f>>2]<<2)>>2]=g;return}function rx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=ez(a)|0;g=(dx(a)|0)+12|0;i=b+16|0;Qz(h,c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]|0)|0;f=Oz(h,d)|0;c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]=f;do if(!(c[a>>2]&3)){e=c[(_w(h,0)|0)+16>>2]|0;f=b+8|0;g=lx(e,c[f>>2]|0)|0;if(!g){i=jx(h,c[f>>2]|0,d,c[i>>2]|0,c[a>>2]&3)|0;nb[c[e>>2]&63](e,i,1)|0;break}else{i=g+12|0;Qz(h,c[i>>2]|0)|0;c[i>>2]=Oz(h,d)|0;break}}while(0);iz(h,a,b);return 0}function sx(a,b,d){a=a|0;b=b|0;d=d|0;a=fx(a,b)|0;do if(a){b=c[a>>2]|0;if(!d){a=nb[b&63](a,0,128)|0;break}else{a=nb[b&63](a,d,8)|0;break}}else a=0;while(0);return a|0}function tx(a){a=a|0;var b=0;c[46171]=a;b=dx(a)|0;if(b|0){ux(a,b);Cz(a,c[b>>2]|0)|0}b=_w(a,0)|0;if(b)if(((EA(a,c[b+8>>2]|0)|0)==0?(EA(a,c[b+12>>2]|0)|0)==0:0)?(EA(a,c[b+16>>2]|0)|0)==0:0){Cz(a,c[b>>2]|0)|0;b=0}else b=1;else b=0;return b|0}function ux(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=ez(a)|0;e=gx(a)|0;b=b+12|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(e|0))break;Qz(f,c[d+(a<<2)>>2]|0)|0;a=a+1|0}Ny(f,d);return}function vx(a){a=a|0;var b=0;b=dx(a)|0;if(b|0){ux(a,b);Cz(a,93322)|0}return}function wx(a){a=a|0;var b=0;b=dx(a)|0;if(b|0){ux(a,b);Cz(a,93322)|0}return}function xx(a,b){a=a|0;b=b|0;b=mx(a,b)|0;if(!b)b=0;else{a=c[(dx(a)|0)+12>>2]|0;b=c[a+(c[b+16>>2]<<2)>>2]|0}return b|0}function yx(a,b){a=a|0;b=b|0;a=c[(dx(a)|0)+12>>2]|0;return c[a+(c[b+16>>2]<<2)>>2]|0}function zx(a,b,c){a=a|0;b=b|0;c=c|0;b=mx(a,b)|0;if(!b)b=-1;else{rx(a,b,c)|0;b=0}return b|0}function Ax(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=ez(a)|0;f=nx(f,c[a>>2]&3,b,0)|0;if(!f){f=ez(a)|0;f=nx(f,c[a>>2]&3,b,e)|0}rx(a,f,d)|0;return 0}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=ez(a)|0;f=c[a>>2]|0;a:do if(!((c[b>>2]^f)&3)){d=1;e=0;while(1){e=sx(g,f&3,e)|0;if(!e)break a;d=mx(b,c[e+8>>2]|0)|0;if(!d){d=1;break a}f=yx(a,e)|0;rx(b,d,f)|0;if(Rz(f)|0)Sz(yx(b,d)|0);d=0;f=c[a>>2]|0}}else d=1;while(0);return d|0}function Cx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b+40>>2]|0;f=c[d+40>>2]|0;if((a|0)==(f|0)){e=(c[b>>2]|0)>>>4;a=(c[d>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}else{e=(c[a>>2]|0)>>>4;a=(c[f>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}if((g|0)==6)a=0;return a|0}function Dx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=(c[b+40>>2]|0)+8|0;g=c[a>>2]|0;a=c[a+4>>2]|0;f=(c[d+40>>2]|0)+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;do if(!(a>>>0>>0|(a|0)==(f|0)&g>>>0>>0))if(a>>>0>f>>>0|(a|0)==(f|0)&g>>>0>e>>>0)a=1;else{e=b+8|0;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!((a|0)==0&(e|0)==0)?(i=d+8|0,h=c[i>>2]|0,i=c[i+4>>2]|0,!((h|0)==0&(i|0)==0)):0){if(e>>>0>>0|(e|0)==(i|0)&a>>>0>>0){a=-1;break}if(e>>>0>i>>>0|(e|0)==(i|0)&a>>>0>h>>>0){a=1;break}}a=0}else a=-1;while(0);return a|0}function Ex(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+32|0;Dw(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=nb[c[b>>2]&63](b,0,128)|0;c[a>>2]=zw(c[d>>2]|0)|0}return b|0}function Fx(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+48|0;d=e;if((c[b+24>>2]|0)==(a|0))a=b+28|0;else{c[d+16>>2]=b;a=c[a+40>>2]|0;a=nb[c[a>>2]&63](a,d,4)|0}l=e;return a|0}function Gx(a,b){a=a|0;b=b|0;var d=0,e=0;d=Fx(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+32|0;Dw(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,b,8)|0;c[d>>2]=zw(c[e>>2]|0)|0}return a|0}function Hx(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+28|0;Dw(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=nb[c[b>>2]&63](b,0,128)|0;c[a>>2]=zw(c[d>>2]|0)|0}return b|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0;d=Fx(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+28|0;Dw(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,b,8)|0;c[d>>2]=zw(c[e>>2]|0)|0}return a|0}function Jx(a,b){a=a|0;b=b|0;var c=0;c=Ex(a,b)|0;if(!c)c=Hx(a,b)|0;return c|0}function Kx(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((c[b>>2]&3|0)==2){b=Gx(a,b)|0;if(!b){b=0;do{if(!b)b=Hx(a,d)|0;else b=Ix(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0))}}else do{b=Ix(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0));while(0);return b|0}function Lx(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if((gy(a)|0)!=0?(c[g>>2]=0,c[g+4>>2]=0,c[g+8>>2]=0,c[g+12>>2]=0,c[f>>2]=c[g>>2],c[f+4>>2]=c[g+4>>2],c[f+8>>2]=c[g+8>>2],c[f+12>>2]=c[g+12>>2],(Px(a,b,e,f)|0)!=0):0)f=0;else f=((d[a+24>>0]|0)>>>2&1^1)&255|(b|0)!=(e|0);l=h;return f|0}function Mx(a,b){a=a|0;b=b|0;Ox(a,b);return}function Nx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;Xy(b,d,1)|0;Xy(b,e,1)|0;h=My(b,96)|0;i=h+48|0;l=_x(b,2)|0;j=c[i>>2]|0;k=c[h>>2]|0;m=h+8|0;c[m>>2]=f;c[m+4>>2]=g;m=h+56|0;c[m>>2]=f;c[m+4>>2]=g;g=l<<4;c[h>>2]=k&12|g|2;c[i>>2]=j&12|g|3;c[h+88>>2]=d;c[h+40>>2]=e;Ox(b,h);if(a[b+24>>0]&64){Az(h,93322,16,0)|0;cx(b,h)}gz(b,h);return h|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;i=l;l=l+16|0;d=i;h=c[b>>2]&3;g=(h|0)==2?b:b+-48|0;h=(h|0)==3?b:b+48|0;e=c[h+40>>2]|0;f=c[g+40>>2]|0;while(1){if(!a)break;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];if(Px(a,e,f,d)|0)break;j=Fx(a,e)|0;m=a+44|0;Qx(c[m>>2]|0,j+32|0,g);k=a+48|0;Qx(c[k>>2]|0,j+24|0,g);j=Fx(a,f)|0;Qx(c[m>>2]|0,j+28|0,h);Qx(c[k>>2]|0,j+20|0,h);a=yA(a)|0}l=i;return}function Px(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+48|0;f=h;if(!((b|0)==0|(d|0)==0)?(c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+40>>2]=b,g=Fx(a,d)|0,(g|0)!=0):0){e=a+48|0;g=g+20|0;Dw(c[e>>2]|0,c[g>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,f,4)|0;c[g>>2]=zw(c[e>>2]|0)|0}else a=0;l=h;return a|0}function Qx(a,b,d){a=a|0;b=b|0;d=d|0;Dw(a,c[b>>2]|0)|0;nb[c[a>>2]&63](a,d,1)|0;c[b>>2]=zw(a)|0;return}function Rx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;i=n+24|0;k=n+16|0;j=n;do if(!(oy(a,2,e,k,0)|0))if(!e){if(f|0?(gy(a)|0)==0:0){m=18;break};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;m=7}else m=17;else{o=j;c[o>>2]=0;c[o+4>>2]=0;o=k;g=c[o+4>>2]|0;m=j+8|0;c[m>>2]=c[o>>2];c[m+4>>2]=g;c[j>>2]=2;m=7}while(0);a:do if((m|0)==7){c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=Px(a,b,d,i)|0;b:do if(!g){if(fy(a)|0?(c[i>>2]=c[j>>2],c[i+4>>2]=c[j+4>>2],c[i+8>>2]=c[j+8>>2],c[i+12>>2]=c[j+12>>2],h=Px(a,d,b,i)|0,h|0):0){g=h;break}do if(f|0){g=fz(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=Px(g,b,d,i)|0;if(!g){if(!(fy(a)|0))break;g=fz(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=Px(g,d,b,i)|0;if(!g)break}Mx(a,g);break b}while(0);m=17;break a}while(0)}while(0);if((m|0)==17)if(!f)g=0;else m=18;if((m|0)==18)if((Lx(a,b,d)|0)!=0?(oy(a,2,e,k,1)|0)!=0:0){g=k;g=Nx(a,b,d,c[g>>2]|0,c[g+4>>2]|0)|0;sy(a,2,g)}else g=0;l=n;return g|0}function Sx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;d=(c[b>>2]&3|0)==3;g=d?b+-48|0:b;d=d?b:b+48|0;b=c[g+40>>2]|0;h=Fx(a,c[d+40>>2]|0)|0;f=a+44|0;Tx(c[f>>2]|0,h+32|0,g);e=a+48|0;Tx(c[e>>2]|0,h+24|0,g);b=Fx(a,b)|0;Tx(c[f>>2]|0,b+28|0,d);Tx(c[e>>2]|0,b+20|0,d);return}function Tx(a,b,d){a=a|0;b=b|0;d=d|0;Dw(a,c[b>>2]|0)|0;nb[c[a>>2]&63](a,d,2)|0;c[b>>2]=zw(a)|0;return}function Ux(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;d=(c[d>>2]&3|0)==2?d:d+-48|0;g=c[d>>2]&3;h=c[((g|0)==3?d:d+48|0)+40>>2]|0;g=c[((g|0)==2?d:d+-48|0)+40>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];if(Px(b,h,g,f)|0){if((fz(b)|0)==(b|0)){if(a[b+24>>0]&64)wx(d);kz(b,d);Iz(d);h=d+8|0;qy(b,2,c[h>>2]|0,c[h+4>>2]|0)}if(!(jB(b,d,58,0,0)|0))if((fz(b)|0)==(b|0)){Ny(b,d);d=0}else d=0;else d=-1}else d=-1;l=e;return d|0}function Vx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;f=Xy(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0,d)|0;g=Xy(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0,d)|0;do if((f|0)!=0&(g|0)!=0){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=Px(a,f,g,e)|0;f=(e|0)==0;if(!((d|0)!=0&f)){if(f)break}else{Ox(a,b);e=b}d=c[e>>2]&3;l=h;return ((d|0)==(c[b>>2]&3|0)?e:e+(((d|0)==3?-1:1)*48|0)|0)|0}while(0);l=h;return 0}function Wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=b+8|0;e=d+8|0;e=t3(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;return ((e|0)==0?0:e>>31|1)|0}function Xx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;j=Yx(e)|0;f=lb[c[(c[j>>2]|0)+4>>2]&127](c[j+12>>2]|0,72)|0;c[f>>2]=c[f>>2]&-4;i=f+64|0;c[i>>2]=j;k=f+24|0;d=c[d>>2]|0;c[k>>2]=d;a[k>>0]=d&255|8;c[f+60>>2]=f;e=lb[c[c[j+4>>2]>>2]&127](f,e)|0;c[(c[i>>2]|0)+16>>2]=e;if(oy(f,0,b,g,1)|0){i=g;j=c[i+4>>2]|0;k=f+8|0;c[k>>2]=c[i>>2];c[k+4>>2]=j}k=Zx(f)|0;sy(k,0,f);l=h;return k|0}function Yx(b){b=b|0;var d=0,e=0,f=0,g=0;d=(b|0)!=0;if(d){e=c[b>>2]|0;e=(e|0)==0?18632:e}else e=18632;g=kb[c[e>>2]&63](b)|0;f=lb[c[e+4>>2]&127](g,80)|0;c[f>>2]=e;c[f+12>>2]=g;if(d){g=c[b+4>>2]|0;c[f+4>>2]=(g|0)==0?18508:g;b=c[b+8>>2]|0;b=(b|0)==0?18608:b}else{c[f+4>>2]=18508;b=18608}c[f+8>>2]=b;a[f+52>>0]=1;return f|0}function Zx(b){b=b|0;var d=0,e=0;c[b+36>>2]=CA(b,18688,c[4563]|0)|0;c[b+40>>2]=CA(b,18652,c[4563]|0)|0;d=(fz(b)|0)==(b|0);c[b+44>>2]=CA(b,d?18300:18336,c[4563]|0)|0;d=(fz(b)|0)==(b|0);c[b+48>>2]=CA(b,d?18372:18408,c[4563]|0)|0;c[b+52>>2]=CA(b,18444,c[4563]|0)|0;d=yA(b)|0;if(!((d|0)!=0?(e=_x(d,0)|0,c[b>>2]=c[b>>2]&15|e<<4,e=c[d+52>>2]|0,nb[c[e>>2]&63](e,b,1)|0,!(a[d+24>>0]&64)):0))ax(b);gz(b,b);return b|0}function _x(a,b){a=a|0;b=b|0;var d=0;d=(c[a+64>>2]|0)+24+(b<<3)|0;b=d;b=s3(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;a=z;c[d>>2]=b;c[d+4>>2]=a;z=a;return b|0}function $x(b){b=b|0;var d=0,e=0,f=0,g=0;f=yA(b)|0;g=(f|0)==0;if(g?(d=b+64|0,(c[(c[c[d>>2]>>2]|0)+16>>2]|0)!=0):0){kz(b,b);g=b+8|0;qy(b,0,c[g>>2]|0,c[g+4>>2]|0);d=c[d>>2]|0;tb[c[(c[d>>2]|0)+16>>2]&127](c[d+12>>2]|0);d=0}else e=4;do if((e|0)==4){d=wA(b)|0;while(1){if(!d)break;e=xA(d)|0;$x(d)|0;d=e}d=Sy(b)|0;while(1){if(!d)break;e=Ty(b,d)|0;cz(b,d)|0;d=e}By(b);kz(b,b);if(((((EA(b,c[b+40>>2]|0)|0)==0?(EA(b,c[b+36>>2]|0)|0)==0:0)?(EA(b,c[b+48>>2]|0)|0)==0:0)?(EA(b,c[b+44>>2]|0)|0)==0:0)?(EA(b,c[b+52>>2]|0)|0)==0:0){if(a[b+24>>0]&64?tx(b)|0:0){d=-1;break}Iz(b);e=b+8|0;qy(b,0,c[e>>2]|0,c[e+4>>2]|0);if(!g){zA(f,b)|0;Ny(f,b);d=0;break}d=b+64|0;while(1){e=c[d>>2]|0;f=c[e+48>>2]|0;if(!f)break;nz(b,c[f>>2]|0)|0}tb[c[(c[e+4>>2]|0)+20>>2]&127](c[e+16>>2]|0);if(!(Jz(b)|0)){d=c[d>>2]|0;g=c[d+12>>2]|0;f=(c[d>>2]|0)+12|0;ub[c[f>>2]&63](g,b);ub[c[f>>2]&63](g,d);d=0}else d=-1}else d=-1}while(0);return d|0}function ay(a){a=a|0;return Ew(c[a+40>>2]|0)|0}function by(a){a=a|0;var b=0,c=0,d=0;b=0;c=Sy(a)|0;while(1){if(!c)break;d=(cy(a,c,0,1)|0)+b|0;b=d;c=Ty(a,c)|0}return b|0}function cy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Fx(a,b)|0;if(f){if(!e)b=0;else b=dy(c[a+44>>2]|0,f+32|0)|0;if(d)b=(dy(c[a+44>>2]|0,f+28|0)|0)+b|0}else b=0;return b|0}function dy(a,b){a=a|0;b=b|0;var d=0;Dw(a,c[b>>2]|0)|0;d=Ew(a)|0;c[b>>2]=zw(a)|0;return d|0}function ey(b){b=b|0;return a[b+24>>0]&1|0}function fy(a){a=a|0;return (ey(a)|0)==0|0}function gy(a){a=a|0;return (d[a+24>>0]|0)>>>1&1|0}function hy(a,b){a=a|0;b=b|0;return a|0}function iy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!d){f=1392;d=c[f>>2]|0;f=c[f+4>>2]|0;c[e>>2]=d;c[e+4>>2]=f;f=s3(d|0,f|0,2,0)|0;e=1392;c[e>>2]=f;c[e+4>>2]=z}else{if(!f)a=Lz(a,d)|0;else a=Oz(a,d)|0;c[e>>2]=a;c[e+4>>2]=0}return 1}function jy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function ky(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((c&1|0)==0&0==0)Qz(a,c)|0;return}function ly(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ((c&1|0)==0&0==0?c:0)|0}function my(a){a=a|0;return}function ny(a,b,c){a=a|0;b=b|0;c=c|0;return}function oy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=(e|0)!=0;do if(i){if((a[e>>0]|0)!=37?(h=c[b+64>>2]|0,h=pb[c[(c[h+4>>2]|0)+4>>2]&127](c[h+16>>2]|0,d,e,f,g)|0,h|0):0)break;h=ty(b,d,e,f)|0;if(!h)j=5}else j=5;while(0);if((j|0)==5)if(g){h=c[b+64>>2]|0;h=pb[c[(c[h+4>>2]|0)+4>>2]&127](c[h+16>>2]|0,d,0,f,g)|0;if(i&(h|0)!=0){j=f;uy(b,d,e,c[j>>2]|0,c[j+4>>2]|0)}}else h=0;return h|0}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+64>>2]|0;return ob[c[(c[a+4>>2]|0)+8>>2]&127](c[a+16>>2]|0,b,d,e)|0}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;zy(a,b,d,e)|0;a=c[a+64>>2]|0;xb[c[(c[a+4>>2]|0)+12>>2]&31](c[a+16>>2]|0,b,d,e);return}function ry(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=ez(a)|0;f=a+8|0;b=f;b=xy(d,c[a>>2]&3,c[b>>2]|0,c[b+4>>2]|0)|0;do if(!b){b=c[d+64>>2]|0;d=c[(c[b+4>>2]|0)+16>>2]|0;if(d|0?(e=f,e=ob[d&127](c[b+16>>2]|0,c[a>>2]&3,c[e>>2]|0,c[e+4>>2]|0)|0,e|0):0){b=e;break}if((c[a>>2]&3|0)==2)b=0;else{e=c[f>>2]|0;f=c[f+4>>2]|0;c[g>>2]=37;b=g+8|0;c[b>>2]=e;c[b+4>>2]=f;Y0(191693,93374,g)|0;b=191693}}while(0);l=h;return b|0}function sy(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+64>>2]|0;vb[c[(c[a+4>>2]|0)+24>>2]&127](c[a+16>>2]|0,b,d);return}function ty(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;b=c[(c[a+64>>2]|0)+56+(((b|0)==3?2:b)<<2)>>2]|0;if(((b|0)!=0?(f=Lz(a,d)|0,(f|0)!=0):0)?(c[h+24>>2]=f,g=nb[c[b>>2]&63](b,h,4)|0,(g|0)!=0):0){d=g+16|0;h=c[d+4>>2]|0;b=e;c[b>>2]=c[d>>2];c[b+4>>2]=h;b=1}else b=0;l=i;return b|0}function uy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=My(a,32)|0;g=h+16|0;c[g>>2]=e;c[g+4>>2]=f;c[h+24>>2]=Oz(a,d)|0;e=(b|0)==3?2:b;g=a+64|0;d=c[g>>2]|0;b=c[d+56+(e<<2)>>2]|0;if(!b){f=CA(a,18536,c[4563]|0)|0;c[(c[g>>2]|0)+56+(e<<2)>>2]=f;b=c[g>>2]|0}else{f=b;b=d}b=c[b+68+(e<<2)>>2]|0;if(!b){b=CA(a,18572,c[4563]|0)|0;c[(c[g>>2]|0)+68+(e<<2)>>2]=b}nb[c[f>>2]&63](f,h,1)|0;nb[c[b>>2]&63](b,h,1)|0;return}function vy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=b+16|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=d+16|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0?1:(a>>>0>>0|(a|0)==(d|0)&b>>>0>>0)<<31>>31)|0}function wy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b+24>>2]|0;e=c[d+24>>2]|0;return (b>>>0>e>>>0?1:(b>>>0>>0)<<31>>31)|0}function xy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=yy(a,b,d,e)|0;if(!a)a=0;else a=c[a+24>>2]|0;return a|0}function yy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;a=c[(c[a+64>>2]|0)+68+(((b|0)==3?2:b)<<2)>>2]|0;if(!a)a=0;else{b=f+16|0;c[b>>2]=d;c[b+4>>2]=e;a=nb[c[a>>2]&63](a,f,4)|0}l=g;return a|0}function zy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=(b|0)==3?2:b;b=yy(a,f,d,e)|0;if(!b)b=0;else{e=a+64|0;d=c[(c[e>>2]|0)+56+(f<<2)>>2]|0;nb[c[d>>2]&63](d,b,2)|0;e=c[(c[e>>2]|0)+68+(f<<2)>>2]|0;nb[c[e>>2]&63](e,b,2)|0;Qz(a,c[b+24>>2]|0)|0;Ny(a,b);b=1}return b|0}function Ay(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[46171]=b;g=c[b+64>>2]|0;f=0;while(1){if((f|0)==3)break;h=g+56+(f<<2)|0;d=c[h>>2]|0;a:do if(d|0){d=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!d)break a;e=c[h>>2]|0;e=nb[c[e>>2]&63](e,d,8)|0;if((a[c[d+24>>2]>>0]|0)!=37){d=e;continue}i=d+16|0;zy(b,f,c[i>>2]|0,c[i+4>>2]|0)|0;d=e}}while(0);f=f+1|0}return}function By(a){a=a|0;c[46171]=a;a=a+64|0;Cy((c[a>>2]|0)+56|0);Cy((c[a>>2]|0)+68|0);return}function Cy(a){a=a|0;var b=0,d=0,e=0;b=0;while(1){if((b|0)==3)break;d=a+(b<<2)|0;e=c[d>>2]|0;if(e|0){yw(e)|0;c[d>>2]=0}b=b+1|0}return}function Dy(a,b,c){a=a|0;b=b|0;c=c|0;if(!(O0(b,c,a)|0))a=0;else a=W_(b)|0;return a|0}function Ey(a,b){a=a|0;b=b|0;return D1(b,a)|0}function Fy(a){a=a|0;return w1(a)|0}function Gy(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+32|0;e=b+12|0;d=b;c[4656]=c[4653];c[4657]=c[4654];c[e>>2]=a;c[e+4>>2]=W_(a)|0;c[e+8>>2]=0;c[d>>2]=18632;c[d+4>>2]=18508;c[d+8>>2]=18620;a=TB(e,d)|0;Uz(0);l=b;return a|0}function Hy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((e|0)!=0?(h=b+8|0,f=c[h>>2]|0,(f|0)<(c[b+4>>2]|0)):0){i=(c[b>>2]|0)+f|0;b=0;g=a[i>>0]|0;f=d;d=i;while(1){d=d+1|0;a[f>>0]=g;b=b+1|0;if(!(g<<24>>24!=10&(b|0)<(e|0)))break;g=a[d>>0]|0;if(!(g<<24>>24))break;else f=f+1|0}c[h>>2]=(c[h>>2]|0)+b}else b=0;return b|0}function Iy(a){a=a|0;return 0}function Jy(a,b){a=a|0;b=b|0;a=C_(b)|0;H3(a|0,0,b|0)|0;return a|0}function Ky(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=F_(b,d)|0;if(d>>>0>c>>>0)H3(a+c|0,0,d-c|0)|0;return a|0}function Ly(a,b){a=a|0;b=b|0;D_(b);return}function My(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;a=c[a+64>>2]|0;a=lb[c[(c[a>>2]|0)+4>>2]&127](c[a+12>>2]|0,b)|0;if(!a)Pw(1,93380,d)|0;l=d;return a|0}function Ny(a,b){a=a|0;b=b|0;if(b|0){a=c[a+64>>2]|0;ub[c[(c[a>>2]|0)+12>>2]&63](c[a+12>>2]|0,b)}return}function Oy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b+16>>2]|0)+8|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=(c[d+16>>2]|0)+8|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>>0|(a|0)==(d|0)&b>>>0>>0?-1:(a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0)&1)|0}function Py(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+16>>2]|0;if((a+28|0)!=(b|0))Ny(c[a+24>>2]|0,b);return}function Qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=(c[c[b+16>>2]>>2]|0)>>>4;e=(c[c[d+16>>2]>>2]|0)>>>4;return (b>>>0>>0?-1:b>>>0>e>>>0&1)|0}function Ry(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=183176;c[e>>2]=b;c[e+4>>2]=d;c[46176]=183168;a=c[a+40>>2]|0;a=nb[c[a>>2]&63](a,184688,4)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Sy(a){a=a|0;a=c[a+36>>2]|0;a=nb[c[a>>2]&63](a,0,128)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Ty(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=nb[c[d>>2]&63](d,b,8)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function Uy(a){a=a|0;a=c[a+36>>2]|0;a=nb[c[a>>2]&63](a,0,256)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Vy(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=nb[c[d>>2]&63](d,b,16)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function Wy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Ry(a,b,c)|0;do if((d|0)!=0&(e|0)==0){e=fz(a)|0;if((e|0)!=(a|0)?(f=Ry(e,b,c)|0,f|0):0){Xy(a,f,1)|0;e=f;break}if(!(py(a,1,b,c)|0))e=0;else{e=_x(a,1)|0;e=Yy(a,b,c,e,z)|0;Zy(a,e);_y(a,e)}}while(0);return e|0}function Xy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=fz(a)|0;if((e|0)==(c[b+24>>2]|0)){e=b+8|0;e=Ry(a,c[e>>2]|0,c[e+4>>2]|0)|0;if((d|0)!=0&(e|0)==0){e=yA(a)|0;if(!e)e=0;else{d=Xy(e,b,d)|0;$y(a,d);return d|0}}}else e=0;return e|0}function Yy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;g=My(b,64)|0;h=c[g>>2]|0;i=g+8|0;c[i>>2]=d;c[i+4>>2]=e;c[g>>2]=h&12|f<<4|1;c[g+24>>2]=fz(b)|0;if(a[(fz(b)|0)+24>>0]&64)Az(g,93322,16,0)|0;return g|0}function Zy(a,b){a=a|0;b=b|0;do{$y(a,b);a=yA(a)|0}while((a|0)!=0);return}function _y(b,c){b=b|0;c=c|0;if(a[(fz(b)|0)+24>>0]&64)bx(b,c);gz(b,c);return}function $y(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+40|0;Ew(c[e>>2]|0)|0;if((fz(a)|0)==(a|0))d=b+28|0;else d=My(a,36)|0;c[d+16>>2]=b;e=c[e>>2]|0;nb[c[e>>2]&63](e,d,1)|0;e=c[a+36>>2]|0;nb[c[e>>2]&63](e,d,1)|0;return}function az(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;h=fz(a)|0;if(oy(a,1,b,g,0)|0){e=g;e=Ry(a,c[e>>2]|0,c[e+4>>2]|0)|0;if(!e)if(!((d|0)==0|(h|0)==(a|0))?(f=g,f=Ry(h,c[f>>2]|0,c[f+4>>2]|0)|0,(f|0)!=0):0)e=Xy(a,f,1)|0;else i=6}else i=6;if((i|0)==6)if((d|0)!=0?(oy(a,1,b,g,1)|0)!=0:0){i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;e=_x(a,1)|0;e=Yy(a,h,i,e,z)|0;Zy(a,e);_y(a,e);sy(a,1,e)}else e=0;l=j;return e|0}function bz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[46185]=b;d=Jx(a,b)|0;while(1){if(!d)break;e=Kx(a,d,b)|0;Sx(a,d,0);d=e}e=c[a+40>>2]|0;nb[c[e>>2]&63](e,184724,2)|0;e=c[a+36>>2]|0;nb[c[e>>2]&63](e,184724,2)|0;return}function cz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+8|0;e=f;if(Ry(b,c[e>>2]|0,c[e+4>>2]|0)|0){if((fz(b)|0)==(b|0)){e=Jx(b,d)|0;while(1){if(!e)break;g=Kx(b,e,d)|0;Ux(b,e)|0;e=g}if(a[b+24>>0]&64)vx(d);kz(b,d);Iz(d);g=f;qy(b,1,c[g>>2]|0,c[g+4>>2]|0)}if(!(jB(b,d,59,0,0)|0))if((fz(b)|0)==(b|0)){Ny(b,d);e=0}else e=0;else e=-1}else e=-1;return e|0}function dz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;d=c[b>>2]|0;do if(!(d&3))if((yA(b)|0)==(a|0)){d=c[b>>2]|0;g=5;break}else{Pw(1,93406,e)|0;f=-1;break}else g=5;while(0);a:do if((g|0)==5)switch(d&3){case 1:{f=cz(a,b)|0;break a}case 2:case 3:{f=Ux(a,b)|0;break a}case 0:{f=$x(b)|0;break a}default:{}}while(0);l=h;return f|0}function ez(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=c[(c[a+40>>2]|0)+24>>2]|0;break}case 1:{b=c[a+24>>2]|0;break}case 0:{b=a;break}default:{}}return b|0}function fz(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=(c[a+40>>2]|0)+24|0;break}case 1:{b=a+24|0;break}case 0:{b=a+60|0;break}default:{}}return c[b>>2]|0}function gz(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))qz(b,d,100,0);else hz(b,d,c[e+48>>2]|0);return}function hz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){hz(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=c[d>>2]|0;break}case 1:{e=(c[d>>2]|0)+12|0;break}case 2:{e=(c[d>>2]|0)+24|0;break}default:break a}e=c[e>>2]|0;if(e|0)vb[e&127](a,b,c[d+4>>2]|0)}while(0);return}function iz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+64>>2]|0;if(!(a[f+52>>0]|0))qz(b,d,101,e);else jz(b,d,e,c[f+48>>2]|0);return}function jz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do if(e|0){jz(a,b,d,c[e+8>>2]|0);switch(c[b>>2]&3){case 0:{f=(c[e>>2]|0)+4|0;break}case 1:{f=(c[e>>2]|0)+16|0;break}case 2:{f=(c[e>>2]|0)+28|0;break}default:break a}f=c[f>>2]|0;if(f|0)xb[f&31](a,b,c[e+4>>2]|0,d)}while(0);return}function kz(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))qz(b,d,102,0);else lz(b,d,c[e+48>>2]|0);return}function lz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){lz(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=(c[d>>2]|0)+8|0;break}case 1:{e=(c[d>>2]|0)+20|0;break}case 2:{e=(c[d>>2]|0)+32|0;break}default:break a}e=c[e>>2]|0;if(e|0)vb[e&127](a,b,c[d+4>>2]|0)}while(0);return}function mz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=My(a,12)|0;c[e>>2]=b;c[e+4>>2]=d;d=(c[a+64>>2]|0)+48|0;c[e+8>>2]=c[d>>2];c[d>>2]=e;return}function nz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=(c[a+64>>2]|0)+48|0;d=c[e>>2]|0;a:do if(!d)d=-1;else{if((c[d>>2]|0)!=(b|0)){while(1){if(!d){d=-1;break a}e=d+8|0;f=c[e>>2]|0;if((c[f>>2]|0)==(b|0))break;else d=f}if(f)c[e>>2]=c[f+8>>2]}else c[e>>2]=c[d+8>>2];Ny(a,d);d=0}while(0);return d|0}function oz(a,b){a=a|0;b=b|0;var d=0;d=fz(a)|0;a:do if((d|0)==(fz(b)|0))switch(c[b>>2]&3){case 0:{while(1){if((b|0)==(a|0)){b=1;break a}b=yA(b)|0;if(!b){b=0;break}}break}case 1:{b=b+8|0;b=(Wy(a,c[b>>2]|0,c[b+4>>2]|0,0)|0)!=0;break a}default:{b=(Vx(a,b,0)|0)!=0;break a}}else b=0;while(0);return b&1|0}function pz(a){a=a|0;return c[a>>2]&3|0}function qz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=Az(a,93430,44,0)|0;switch(c|0){case 100:{e=rz(f,b,100)|0;if(!(sz(e,b)|0))tz(e,a,b,d)|0;break}case 101:{if(((sz(rz(f,b,100)|0,b)|0)==0?(sz(rz(f,b,102)|0,b)|0)==0:0)?(e=rz(f,b,101)|0,(sz(e,b)|0)==0):0)tz(e,a,b,d)|0;break}case 102:{uz(rz(f,b,100)|0,b);uz(rz(f,b,101)|0,b);e=rz(f,b,102)|0;if(!(sz(e,b)|0))tz(e,a,b,d)|0;break}default:Pw(1,93442,g)|0}l=h;return}function rz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;a:do switch(c[b>>2]&3){case 0:switch(d|0){case 100:{d=a+8|0;break a}case 101:{d=a+20|0;break a}case 102:{d=a+32|0;break a}default:{f=14;break a}}case 1:switch(d|0){case 100:{d=a+12|0;break a}case 101:{d=a+24|0;break a}case 102:{d=a+36|0;break a}default:{f=14;break a}}case 2:switch(d|0){case 100:{d=a+16|0;break a}case 101:{d=a+28|0;break a}case 102:{d=a+40|0;break a}default:{f=14;break a}}default:f=14}while(0);if((f|0)==14){Pw(1,93476,e)|0;d=0}a=c[d>>2]|0;if(!a){a=ez(b)|0;a=CA(a,18724,c[4563]|0)|0;c[d>>2]=a}l=g;return a|0}function sz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=vz(b)|0;b=e+8|0;c[b>>2]=f;c[b+4>>2]=z;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function tz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=My(ez(d)|0,32)|0;c[f+20>>2]=d;g=vz(d)|0;d=f+8|0;c[d>>2]=g;c[d+4>>2]=z;c[f+16>>2]=b;if(e|0){g=My(b,8)|0;c[f+24>>2]=g;c[g>>2]=e}nb[c[a>>2]&63](a,f,1)|0;return f|0}function uz(a,b){a=a|0;b=b|0;b=sz(a,b)|0;if(b|0)nb[c[a>>2]&63](a,b,2)|0;return}function vz(a){a=a|0;a=a+8|0;z=c[a+4>>2]|0;return c[a>>2]|0}function wz(a,b,d){a=a|0;b=b|0;d=d|0;xz(b);Ny(c[b+16>>2]|0,b);return}function xz(a){a=a|0;var b=0,d=0;b=a+16|0;a=c[a+24>>2]|0;while(1){if(!a)break;d=c[a+4>>2]|0;Ny(c[b>>2]|0,a);a=d}return}function yz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=c[b+16>>2]|0;f=h;while(1){if(!f){f=0;break}g=c[f>>2]|0;if((g|0)==(d|0)){j=7;break}if((a[d>>0]|0)==(a[g>>0]|0)?(b$(d,g)|0)==0:0){j=7;break}f=c[f+4>>2]|0;if((f|0)==(h|0)){f=0;break}}do if((j|0)==7){if(!(c[b>>2]&4)){if((f|0)==(h|0)&(e|0)==0){f=h;break}zz(b,f,e);break}if(e)if((h|0)==(f|0))f=h;else Pw(1,93501,i)|0}while(0);l=k;return f|0}function zz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a+16>>2]=b;e=c[a>>2]|0;d=d<<2&4;c[a>>2]=e&-5|d;if(e&2|0){e=(e&3|0)==3?-1:1;c[a+(e*48|0)+16>>2]=b;e=a+(e*48|0)|0;c[e>>2]=c[e>>2]&-5|d}return}function Az(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=ez(a)|0;f=yz(a,b,0)|0;a:do if((d|0)!=0&(f|0)==0){d=My(h,d)|0;c[d>>2]=Oz(h,b)|0;switch(c[a>>2]&3){case 0:{Bz(a,d);g=d;break a}case 1:{Bz(a,d);g=d;break a}case 2:case 3:{Bz(a,d);g=d;break a}default:{}}}else g=f;while(0);if(e|0)yz(a,b,1)|0;return g|0}function Bz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+16>>2]|0;do if(d){e=d+4|0;f=c[e>>2]|0;if((f|0)==(d|0)){c[e>>2]=b;e=d;d=b;break}else{c[b+4>>2]=f;e=b;break}}else{e=b;d=b}while(0);c[d+4>>2]=e;if(!(c[a>>2]&4))zz(a,b,0);return}function Cz(a,b){a=a|0;b=b|0;var d=0,e=0;e=ez(a)|0;d=yz(a,b,0)|0;if(!d)b=-1;else{Dz(a,d);if(!(c[a>>2]&3)){Ez(e,a,d);b=d}else{jB(fz(e)|0,a,60,d,0)|0;b=d}Qz(e,c[d>>2]|0)|0;Ny(e,b);b=0}return b|0}function Dz(a,b){a=a|0;b=b|0;var d=0;a=c[a+16>>2]|0;do{d=a+4|0;a=c[d>>2]|0}while((a|0)!=(b|0));c[d>>2]=c[b+4>>2];return}function Ez(a,b,d){a=a|0;b=b|0;d=d|0;if((c[b+16>>2]|0)==(d|0)){a=c[d+4>>2]|0;zz(b,(a|0)==(d|0)?0:a,0)}return}function Fz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=(d|0)>-1;g=f?d:0-d|0;a:do switch(b|0){case 0:{Az(a,c,g,e)|0;if(!f){b=wA(a)|0;while(1){if(!b)break a;Fz(b,0,c,d,e);b=xA(b)|0}}break}case 3:case 2:case 1:{d=(b|0)==1;b=Sy(a)|0;while(1){if(!b)break a;b:do if(d)Az(b,c,g,e)|0;else{f=Ex(a,b)|0;while(1){if(!f)break b;Az(f,c,g,e)|0;f=Gx(a,f)|0}}while(0);b=Ty(a,b)|0}}default:{}}while(0);return}function Gz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do switch(b|0){case 0:{jB(a,a,61,c,1)|0;break}case 3:case 2:case 1:{e=(b|0)==1;d=Sy(a)|0;while(1){if(!d)break a;b:do if(e)Cz(d,c)|0;else{b=Ex(a,d)|0;while(1){if(!b)break b;Cz(b,c)|0;b=Gx(a,b)|0}}while(0);d=Ty(a,d)|0}}default:{}}while(0);return}function Hz(a,b,c){a=a|0;b=b|0;c=c|0;Cz(b,c)|0;return}function Iz(a){a=a|0;var b=0,d=0,e=0;d=ez(a)|0;b=a+16|0;a=c[b>>2]|0;if(a|0)do{e=a;a=c[a+4>>2]|0;Qz(d,c[e>>2]|0)|0;Ny(d,e)}while((a|0)!=(c[b>>2]|0));c[b>>2]=0;return}function Jz(a){a=a|0;return EA(a,Kz(a)|0)|0}function Kz(a){a=a|0;var b=0,d=0;if(!a)d=184760;else d=(c[a+64>>2]|0)+20|0;b=c[d>>2]|0;if(!b){b=CA(a,18760,c[4563]|0)|0;c[d>>2]=b;a=183232;c[a>>2]=-2147483648;c[a+4>>2]=0;a=183240;c[a>>2]=2147483647;c[a+4>>2]=-1}return b|0}function Lz(a,b){a=a|0;b=b|0;return Mz(Kz(a)|0,b)|0}function Mz(a,b){a=a|0;b=b|0;a=Nz(a,b)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Nz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+16>>2]=b;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function Oz(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)d=0;else{e=Kz(a)|0;d=Nz(e,b)|0;if(!d){d=(W_(b)|0)+24|0;if(!a)d=C_(d)|0;else d=My(a,d)|0;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;a=d+20|0;b0(a,b)|0;c[d+16>>2]=a;nb[c[e>>2]&63](e,d,1)|0}else{e=d+8|0;b=e;b=s3(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[e>>2]=b;c[e+4>>2]=z}d=c[d+16>>2]|0}return d|0}function Pz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b)d=0;else{e=Kz(a)|0;d=Nz(e,b)|0;if(!d){d=(W_(b)|0)+24|0;if(!a)d=C_(d)|0;else d=My(a,d)|0;g=183232;f=c[g+4>>2]|0;a=d+8|0;c[a>>2]=c[g>>2]|1;c[a+4>>2]=f;a=d+20|0;b0(a,b)|0;c[d+16>>2]=a;nb[c[e>>2]&63](e,d,1)|0}else{g=d+8|0;f=g;f=s3(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[g>>2]=f;c[g+4>>2]=z}d=c[d+16>>2]|0}return d|0}function Qz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((b|0)!=0?(d=Kz(a)|0,e=Nz(d,b)|0,(e|0)!=0):0)if((c[e+16>>2]|0)==(b|0)?(b=e+8|0,g=b,g=s3(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0,f=z,b,c[b>>2]=g,c[b+4>>2]=f,b=183240,(g|0)==0&(f|0)==0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0):0){DA(a,d,e)|0;a=0}else a=0;else a=-1;return a|0}function Rz(a){a=a|0;var b=0;if(!a)a=0;else{a=a+-12|0;b=183232;a=c[b>>2]&c[a>>2]}return a|0}function Sz(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=183232;a=a+-12|0;e=a;b=c[e+4>>2]|c[d+4>>2];c[a>>2]=c[e>>2]|c[d>>2];c[a+4>>2]=b}return}function Tz(a){a=a|0;c[4699]=a;return}function Uz(a){a=a|0;c[46195]=a;c[4699]=1;return}function Vz(a,b){a=a|0;b=b|0;c[46196]=a;c[46197]=b;c[46198]=0;return}function Wz(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!(c[46199]|0)){c[46199]=1;if(!(c[46200]|0))c[46200]=1;if(!(c[46191]|0))c[46191]=c[15621];if(!(c[46192]|0))c[46192]=c[15653];k=c[46201]|0;if(!((k|0)!=0?(c[k>>2]|0)!=0:0)){Xz();k=Yz(c[46191]|0,16384)|0;c[c[46201]>>2]=k}Zz()}a:while(1){j=c[46202]|0;a[j>>0]=a[191725]|0;e=(c[(c[c[46201]>>2]|0)+28>>2]|0)+(c[46200]|0)|0;f=j;b:while(1){h=f;while(1){f=c[18800+(d[h>>0]<<2)>>2]|0;if(b[63752+(e<<1)>>1]|0){c[46203]=e;c[46204]=h}c:while(1){g=f&255;do{f=g+(b[63938+(e<<1)>>1]|0)|0;if((e|0)==(b[64148+(f<<1)>>1]|0))break c;k=b[64684+(e<<1)>>1]|0;e=k<<16>>16}while(k<<16>>16<=92);f=c[19824+(g<<2)>>2]|0}e=b[64894+(f<<1)>>1]|0;f=h+1|0;if((b[63938+(e<<1)>>1]|0)==219)break;else h=f}d:while(1){k=j;e:while(1){e=b[63752+(e<<1)>>1]|0;if(!(e<<16>>16)){e=b[63752+(c[46203]<<1)>>1]|0;f=c[46204]|0}else e=e<<16>>16;c[46193]=j;i=f;c[46194]=i-k;a[191725]=a[f>>0]|0;a[f>>0]=0;c[46202]=f;f:while(1){switch(e|0){case 1:{m=27;break a}case 12:{m=53;break a}case 13:{m=55;break a}case 14:{m=57;break a}case 15:{m=61;break a}case 16:{m=65;break a}case 17:{m=67;break a}case 18:{m=69;break a}case 19:{m=72;break a}case 20:{m=75;break a}case 21:{m=78;break a}case 23:{m=86;break a}case 33:{m=118;break a}case 39:case 38:case 37:case 36:{l=0;break a}case 2:{m=29;break b}case 3:{m=32;break b}case 4:{m=35;break b}case 5:{m=37;break b}case 6:{m=39;break b}case 7:{m=42;break b}case 8:{m=44;break b}case 9:{m=47;break b}case 10:{m=49;break b}case 11:{m=51;break b}case 22:{m=83;break b}case 24:{m=89;break b}case 25:{m=92;break b}case 26:{m=95;break b}case 27:{m=98;break b}case 28:{m=101;break b}case 29:{m=104;break b}case 30:{m=109;break b}case 31:{m=112;break b}case 32:{m=115;break b}case 34:{m=121;break b}case 0:break f;case 35:break;default:{m=134;break a}}h=c[46193]|0;a[f>>0]=a[191725]|0;e=c[46201]|0;g=c[e>>2]|0;if(!(c[g+44>>2]|0)){n=c[g+16>>2]|0;c[46206]=n;c[g>>2]=c[46191];g=c[e>>2]|0;c[g+44>>2]=1;e=n}else e=c[46206]|0;if((c[46202]|0)>>>0<=((c[g+4>>2]|0)+e|0)>>>0){m=128;break e}switch(gA()|0){case 0:{m=132;break d}case 2:{m=133;break e}case 1:break;default:continue a}c[46202]=c[46193];e=(((c[46200]|0)+-1|0)/2|0)+36|0}a[f>>0]=a[191725]|0;f=c[46204]|0;e=c[46203]|0}if((m|0)==128){m=0;g=i-h|0;h=c[46193]|0;f=h+(g+-1)|0;c[46202]=f;e=eA()|0;i=fA(e)|0;j=c[46193]|0;if(!i)continue;else{m=129;break}}else if((m|0)==133){m=0;f=(c[(c[c[46201]>>2]|0)+4>>2]|0)+(c[46206]|0)|0;c[46202]=f;e=eA()|0;j=c[46193]|0;continue}}if((m|0)==129){m=0;f=h+g|0;c[46202]=f;e=i;continue}else if((m|0)==132){m=0;f=(c[46193]|0)+(i-h+-1)|0;c[46202]=f;e=eA()|0;j=c[46193]|0;continue}}switch(m|0){case 29:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[4699]=(c[4699]|0)+1;continue a}case 32:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=3;continue a}case 35:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 37:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 39:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=1;continue a}case 42:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 44:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;_z();continue a}case 47:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 49:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 51:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 83:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=5;aA();continue a}case 89:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;cA(95669);continue a}case 92:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;cA(93534);continue a}case 95:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[4699]=(c[4699]|0)+1;continue a}case 98:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;cA(e);continue a}case 101:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=7;c[46205]=1;aA();continue a}case 104:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;n=(c[46205]|0)+-1|0;c[46205]=n;if(!n){m=108;break a}cA(c[46193]|0);continue a}case 109:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[46205]=(c[46205]|0)+1;cA(e);continue a}case 112:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;cA(e);c[4699]=(c[4699]|0)+1;continue a}case 115:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;cA(e);continue a}case 121:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;E1(e,f,1,c[46192]|0)|0;continue a}}}switch(m|0){case 27:{e=c[46194]|0;if(!e)l=-1;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=-1}break}case 53:{e=c[46194]|0;if(!e)l=259;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=259}break}case 55:{e=c[46194]|0;if(!e)l=260;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=260}break}case 57:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;if(!(c[46198]|0)){c[46198]=258;l=258}else l=258;break}case 61:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;if(!(c[46198]|0)){c[46198]=261;l=261}else l=261;break}case 65:{e=c[46194]|0;if(!e)l=263;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=263}break}case 67:{e=c[46194]|0;if(!e)l=262;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=262}break}case 69:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=(c[46198]|0)==261?264:45;break}case 72:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=(c[46198]|0)==258?264:45;break}case 75:{f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[46221]=Oz(c[46171]|0,e)|0;l=267;break}case 78:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;if($z()|0){m=(c[46194]|0)+-1|0;a[f>>0]=a[191725]|0;n=j+m|0;c[46202]=n;c[46193]=j;c[46194]=m;a[191725]=a[n>>0]|0;a[n>>0]=0;c[46202]=n}c[46221]=Oz(c[46171]|0,c[46193]|0)|0;l=267;break}case 86:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=1;bA();l=268;break}case 108:{c[46200]=1;dA();l=268;break}case 118:{f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;l=a[e>>0]|0;break}case 134:{hA(93537);break}}return l|0}function Xz(){var a=0,b=0,d=0;b=c[46201]|0;do if(!b){a=oA(4)|0;c[46201]=a;if(!a)hA(93895);else{c[a>>2]=0;a=1;d=9;break}}else{a=c[46212]|0;if(0>=(a+-1|0)>>>0){a=a+8|0;b=iA(b,a<<2)|0;c[46201]=b;if(!b)hA(93895);else{d=b+(c[46212]<<2)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;d=9;break}}}while(0);if((d|0)==9)c[46212]=a;return}function Yz(a,b){a=a|0;b=b|0;var d=0;d=oA(48)|0;if(!d)hA(93850);c[d+12>>2]=b;b=oA(b+2|0)|0;c[d+4>>2]=b;if(!b)hA(93850);else{c[d+20>>2]=1;kA(d,a);return d|0}return 0}function Zz(){var b=0,d=0;d=c[46201]|0;b=c[d>>2]|0;c[46206]=c[b+16>>2];b=c[b+8>>2]|0;c[46202]=b;c[46193]=b;c[46191]=c[c[d>>2]>>2];a[191725]=a[b>>0]|0;return}function _z(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;d=g+16|0;e=g+12|0;h=c[46193]|0;b=h+1|0;i=(z$(b,93834,4)|0)==0;b=i?h+5|0:b;c[f>>2]=e;c[f+4>>2]=g+20;c[f+8>>2]=d;f=N1(b,93839,f)|0;if((f|0)>0?(c[4699]=(c[e>>2]|0)+-1,(f|0)!=1):0){d=b+(c[d>>2]|0)|0;b=d;a:while(1){e=a[b>>0]|0;switch(e<<24>>24){case 0:case 34:break a;default:{}}b=b+1|0}if((b|0)!=(d|0)&e<<24>>24==34){a[b>>0]=0;nA(d,b-d|0)}}l=g;return}function $z(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+2080|0;i=j+8|0;f=j;b=j+1056|0;d=j+32|0;h=j+16|0;k=a[(c[46193]|0)+((c[46194]|0)+-1)>>0]|0;e=k<<24>>24==46;if(e|((k&255)+-48|0)>>>0<10)if(e?(mA()|0)!=0:0)g=4;else b=0;else g=4;if((g|0)==4){k=c[46195]|0;Tw(h,1024,b);Ww(h,93745)|0;Ww(h,c[46193]|0)|0;c[f>>2]=c[4699];Y0(d,93789,f)|0;Ww(h,d)|0;Ww(h,(k|0)==0?93739:k)|0;Ww(h,93806)|0;d=h+4|0;b=c[d>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){Uw(h,1)|0;b=c[d>>2]|0}a[b>>0]=0;b=c[h>>2]|0;c[d>>2]=b;c[i>>2]=b;Pw(0,93831,i)|0;Xw(h);b=1}l=j;return b|0}function aA(){var b=0;b=c[46207]|0;if(!b){b=C_(1024)|0;c[46207]=b;c[46209]=b+1024}c[46208]=b;a[b>>0]=0;return}function bA(){c[46221]=Oz(c[46171]|0,c[46207]|0)|0;a[c[46207]>>0]=0;return}function cA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=c[46208]|0;d=c[46207]|0;if(e>>>0>d>>>0){e=e+-1|0;f=3}a:while(1){if((f|0)==3)c[46208]=e;f=c[46209]|0;g=f;do{h=b;b=b+1|0;h=a[h>>0]|0;i=e;e=e+1|0;a[i>>0]=h;if(!(h<<24>>24))break a}while(e>>>0>>0);c[46208]=e;f=d;i=g-f<<1;d=F_(d,i)|0;c[46207]=d;c[46209]=d+i;e=d+(e-f)|0;f=3}c[46208]=e;return}function dA(){c[46221]=Pz(c[46171]|0,c[46207]|0)|0;a[c[46207]>>0]=0;return}function eA(){var d=0,e=0,f=0,g=0,h=0;h=c[46202]|0;g=c[46193]|0;e=(c[(c[c[46201]>>2]|0)+28>>2]|0)+(c[46200]|0)|0;while(1){if(g>>>0>=h>>>0)break;d=a[g>>0]|0;if(!(d<<24>>24))d=1;else d=c[18800+((d&255)<<2)>>2]|0;if(b[63752+(e<<1)>>1]|0){c[46203]=e;c[46204]=g}a:while(1){f=d&255;do{d=f+(b[63938+(e<<1)>>1]|0)|0;if((e|0)==(b[64148+(d<<1)>>1]|0))break a;d=b[64684+(e<<1)>>1]|0;e=d<<16>>16}while(d<<16>>16<=92);d=c[19824+(f<<2)>>2]|0}g=g+1|0;e=b[64894+(d<<1)>>1]|0}return e|0}function fA(a){a=a|0;var d=0;if(b[63752+(a<<1)>>1]|0){d=c[46202]|0;c[46203]=a;c[46204]=d}while(1){d=(b[63938+(a<<1)>>1]|0)+1|0;if((a|0)==(b[64148+(d<<1)>>1]|0))break;a=b[64684+(a<<1)>>1]|0}d=b[64894+(d<<1)>>1]|0;return (d<<16>>16==92?0:d<<16>>16)|0}function gA(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[46201]|0;g=c[j>>2]|0;i=c[g+4>>2]|0;f=c[46193]|0;l=c[46202]|0;k=l;if(l>>>0>(i+((c[46206]|0)+1)|0)>>>0)hA(93592);h=k-f|0;if(!(c[g+40>>2]|0))b=(h|0)==1?1:2;else{l=h+-1|0;h=i;g=0;while(1){if((g|0)>=(l|0))break;a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0;g=g+1|0}f=c[j>>2]|0;do if((c[f+44>>2]|0)==2){c[46206]=0;c[f+16>>2]=0;e=f;m=17}else{while(1){i=f+12|0;h=c[i>>2]|0;g=h-l+-1|0;if(g|0){m=16;break}g=f+4|0;j=c[g>>2]|0;if(!(c[f+20>>2]|0)){m=12;break}f=h<<1;f=(f|0)==0?(h>>>3)+h|0:f;c[i>>2]=f;f=iA(j,f+2|0)|0;c[g>>2]=f;if(!f)break;j=f+(k-j)|0;c[46202]=j;f=c[c[46201]>>2]|0;k=j}if((m|0)==12)c[g>>2]=0;else if((m|0)==16){d=nb[c[c[(c[46196]|0)+8>>2]>>2]&63](c[46197]|0,(c[f+4>>2]|0)+l|0,g>>>0<8192?g:8192)|0;e=c[c[46201]>>2]|0;c[46206]=d;c[e+16>>2]=d;if(!d){m=17;break}else{b=0;break}}hA(93648)}while(0);do if((m|0)==17)if(!l){jA(c[46191]|0);b=1;d=c[46206]|0;e=c[c[46201]>>2]|0;break}else{c[e+44>>2]=2;b=2;d=0;break}while(0);f=d+l|0;do if(f>>>0>(c[e+12>>2]|0)>>>0){m=iA(c[e+4>>2]|0,f+(d>>>1)|0)|0;d=c[46201]|0;c[(c[d>>2]|0)+4>>2]=m;d=c[(c[d>>2]|0)+4>>2]|0;if(!d)hA(93692);else{n=c[46206]|0;o=d;break}}else{n=d;o=c[e+4>>2]|0}while(0);n=n+l|0;c[46206]=n;a[o+n>>0]=0;o=c[46201]|0;a[(c[(c[o>>2]|0)+4>>2]|0)+((c[46206]|0)+1)>>0]=0;c[46193]=c[(c[o>>2]|0)+4>>2]}return b|0}function hA(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=c[15686]|0;c[b>>2]=a;g1(d,93588,b)|0;Sa(2)}function iA(a,b){a=a|0;b=b|0;return F_(a,b)|0}function jA(a){a=a|0;var b=0,d=0,e=0;d=c[46201]|0;if((d|0)!=0?(b=c[d>>2]|0,(b|0)!=0):0)e=4;else{Xz();b=Yz(c[46191]|0,16384)|0;d=c[46201]|0;c[d>>2]=b;if(!d)b=0;else e=4}kA(b,a);Zz();return}function kA(a,b){a=a|0;b=b|0;var d=0;d=c[(O_()|0)>>2]|0;lA(a);c[a>>2]=b;c[a+40>>2]=1;b=c[46201]|0;if(!b)b=0;else b=c[b>>2]|0;if((b|0)!=(a|0)){c[a+32>>2]=1;c[a+36>>2]=0}c[a+24>>2]=0;c[(O_()|0)>>2]=d;return}function lA(b){b=b|0;var d=0;if(b|0){c[b+16>>2]=0;d=b+4|0;a[c[d>>2]>>0]=0;a[(c[d>>2]|0)+1>>0]=0;c[b+8>>2]=c[d>>2];c[b+28>>2]=1;c[b+44>>2]=0;d=c[46201]|0;if(!d)d=0;else d=c[d>>2]|0;if((d|0)==(b|0))Zz()}return}function mA(){var b=0,d=0;d=c[46193]|0;b=(c[46194]|0)+-2|0;while(1){if((b|0)<=-1){b=0;break}if((a[d+b>>0]|0)==46){b=1;break}else b=b+-1|0}return b|0}function nA(a,b){a=a|0;b=b|0;var d=0;d=c[46210]|0;if((d|0)<(b|0)){if(!d)d=C_(b+1|0)|0;else d=F_(c[46211]|0,b+1|0)|0;c[46211]=d;c[46210]=b}else d=c[46211]|0;b0(d,a)|0;c[46195]=c[46211];return}function oA(a){a=a|0;return C_(a)|0}function pA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+2112|0;k=m+32|0;i=m+24|0;h=m+16|0;g=m+8|0;f=m;d=m+56|0;j=m+40|0;Tw(j,1024,m+1080|0);e=c[46195]|0;if(e|0){Ww(j,e)|0;Ww(j,93945)|0}Ww(j,b)|0;c[f>>2]=c[4699];Y0(d,93948,f)|0;Ww(j,d)|0;a:do if(!(a[c[46193]>>0]|0))switch(((c[46200]|0)+-1|0)/2|0|0){case 2:{c[g>>2]=16384;Y0(d,93968,g)|0;Ww(j,d)|0;b=c[46207]|0;if(!(a[b>>0]|0))break a;i=W_(b)|0;Ww(j,94030)|0;b=c[46207]|0;if((i|0)>80)a[b+80>>0]=0;Ww(j,b)|0;break a}case 3:{c[h>>2]=16384;Y0(d,94049,h)|0;Ww(j,d)|0;b=c[46207]|0;if(!(a[b>>0]|0))break a;i=W_(b)|0;Ww(j,94117)|0;b=c[46207]|0;if((i|0)>80)a[b+80>>0]=0;Ww(j,b)|0;break a}case 1:{c[i>>2]=16384;Y0(d,94136,i)|0;Ww(j,d)|0;break a}default:break a}else{Ww(j,93960)|0;Ww(j,c[46193]|0)|0;d=j+4|0;b=c[d>>2]|0;if(b>>>0>=(c[j+8>>2]|0)>>>0){Uw(j,1)|0;b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=39}while(0);e=j+4|0;b=c[e>>2]|0;d=j+8|0;if(b>>>0>=(c[d>>2]|0)>>>0){Uw(j,1)|0;b=c[e>>2]|0}c[e>>2]=b+1;a[b>>0]=10;b=c[e>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0){Uw(j,1)|0;b=c[e>>2]|0}a[b>>0]=0;i=c[j>>2]|0;c[e>>2]=i;c[k>>2]=i;Pw(1,93831,k)|0;Xw(j);l=m;return}function qA(){rA(c[46193]|0);return}function rA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[46202]|0;a[j>>0]=a[191725]|0;i=c[46201]|0;e=c[i>>2]|0;d=c[e+4>>2]|0;if(j>>>0<(d+2|0)>>>0){f=d+((c[46206]|0)+2)|0;g=d+((c[e+12>>2]|0)+2)|0;k=d;h=e;while(1){if(f>>>0<=k>>>0)break;e=f+-1|0;k=g+-1|0;a[k>>0]=a[e>>0]|0;h=c[i>>2]|0;f=e;g=k;k=c[h+4>>2]|0}e=g-f|0;d=j+e|0;j=c[h+12>>2]|0;c[46206]=j;c[h+16>>2]=j;if(d>>>0<(k+2|0)>>>0)hA(94195);else{l=b+e|0;m=d}}else{l=b;m=j}b=m+-1|0;a[b>>0]=64;c[46193]=l;a[191725]=a[b>>0]|0;c[46202]=b;return}function sA(){var a=0;a=c[46201]|0;if(!a)a=0;else a=c[a>>2]|0;lA(a);return}function tA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+80|0;f=e;g=a+52|0;FA(a,c[g>>2]|0,18444);a=f+8|0;c[a>>2]=b;c[a+4>>2]=d;d=c[g>>2]|0;d=nb[c[d>>2]&63](d,f,4)|0;l=e;return d|0}function uA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=tA(b,d,e)|0;if(!f){f=My(b,72)|0;c[f+64>>2]=c[b+64>>2];g=f+24|0;h=c[b+24>>2]|0;c[g>>2]=h;a[g>>0]=h&255&-9;c[f+56>>2]=b;c[f+60>>2]=c[b+60>>2];b=f+8|0;c[b>>2]=d;c[b+4>>2]=e;Zx(f)|0}return f|0}function vA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;if(!(((b|0)!=0?(oy(a,0,b,f,0)|0)!=0:0)?(e=f,e=tA(a,c[e>>2]|0,c[e+4>>2]|0)|0,(e|0)!=0):0))if((d|0)!=0?(oy(a,0,b,f,1)|0)!=0:0){e=f;e=uA(a,c[e>>2]|0,c[e+4>>2]|0)|0;sy(a,0,e)}else e=0;l=g;return e|0}function wA(a){a=a|0;a=c[a+52>>2]|0;return nb[c[a>>2]&63](a,0,128)|0}function xA(a){a=a|0;var b=0;b=yA(a)|0;if(!b)a=0;else{b=c[b+52>>2]|0;a=nb[c[b>>2]&63](b,a,8)|0}return a|0}function yA(a){a=a|0;return c[a+56>>2]|0}function zA(a,b){a=a|0;b=b|0;a=c[a+52>>2]|0;return nb[c[a>>2]&63](a,b,2)|0}function AA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[46213]|0;e=(b|0)!=0;do if(!a)if(e){D_(b);a=0;break}else{a=C_(d)|0;break}else if(e){Ny(a,b);a=0;break}else{a=My(a,d)|0;break}while(0);return a|0}function BA(a,b,d){a=a|0;b=b|0;d=d|0;a=c[46213]|0;if(!a)D_(b);else Ny(a,b);return}function CA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b+28|0;f=c[e>>2]|0;c[e>>2]=7;c[46213]=a;d=Cw(b,d)|0;c[e>>2]=f;c[46213]=0;return d|0}function DA(a,b,d){a=a|0;b=b|0;d=d|0;c[46213]=a;return nb[c[b>>2]&63](b,d,2)|0}function EA(a,b){a=a|0;b=b|0;var d=0,e=0;d=(Kw(b,0,0)|0)+28|0;e=c[d>>2]|0;c[d>>2]=7;c[46213]=a;if(!(yw(b)|0)){c[d>>2]=e;c[46213]=0;a=0}else a=1;return a|0}function FA(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0?(Kw(b,0,0)|0)!=(c|0):0)Kw(b,c,0)|0;return}function GA(a,b){a=a|0;b=b|0;if(!(Rz(a)|0))b=IA(a,b)|0;else HA(a,b)|0;return b|0}function HA(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a[c>>0]=60;e=c;while(1){d=e+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;a[d>>0]=f;b=b+1|0;e=d}a[d>>0]=62;a[e+2>>0]=0;return c|0}function IA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){a[d>>0]=34;l=a[b>>0]|0;q=0;g=((l+-45&255)<2|((l&255)+-48|0)>>>0<10)&1;h=0;i=0;j=0;e=d+1|0;f=b+1|0;b:while(1){k=e;while(1){if(!(l<<24>>24))break b;e=l&255;c:do if(l<<24>>24==34){a[k>>0]=92;m=g;n=1;k=k+1|0}else{if(!g){n=l<<24>>24>-1&(l<<24>>24!=95&(M$(e)|0)==0);m=0;n=n?1:h;break}switch(l<<24>>24){case 45:{n=(j|0)==0;m=n?g:0;n=n?h:1;break c}case 46:{n=(i|0)==0;m=n?g:0;n=n?h:1;i=i+1|0;break c}default:{n=(e+-48|0)>>>0<10;m=n?g:0;n=n?h:1;break c}}}while(0);e=k+1|0;a[k>>0]=l;p=f+1|0;o=a[f>>0]|0;j=j+1|0;f=c[5005]|0;if(!f){g=m;h=n;k=e;f=p;l=o;continue}g=o&255;h=o<<24>>24!=0;if((q&h?!(l<<24>>24==92|l<<24>>24>-1&((l+-45&255)>1&(M$(l<<24>>24)|0)==0)^1):0)?!(o<<24>>24>-1&((o+-45&255)>1&(M$(g)|0)==0)):0)break;if((j|0)<(f|0)|h^1){g=m;h=n;k=e;f=p;l=o;continue}if(l<<24>>24==92|l<<24>>24>-1&((M$(l<<24>>24)|0)==0&(l+-45&255)>1)^1){q=1;g=m;h=n;l=o;f=p;continue b}if(o<<24>>24>-1&((o+-45&255)>1&(M$(g)|0)==0)){q=1;g=m;h=n;l=o;f=p;continue b}a[e>>0]=92;a[k+2>>0]=10;g=m;h=1;j=0;k=k+3|0;f=p;l=o}a[e>>0]=92;a[k+2>>0]=10;q=0;g=m;h=1;j=0;l=o;e=k+3|0;f=p}a[k>>0]=34;a[k+1>>0]=0;if(!h){if((j|0)==1?((a[b>>0]|0)+-45&255)<2:0){b=d;break}else e=20024;while(1){f=c[e>>2]|0;if(!f)break a;if(!(O$(f,b)|0)){b=d;break}else e=e+4|0}}else b=d}else b=94227;while(0);return b|0}function JA(a){a=a|0;return GA(a,KA(a)|0)|0}function KA(a){a=a|0;var b=0;b=((W_(a)|0)<<1)+2|0;b=b>>>0>1024?b:1024;a=c[46215]|0;if(b>>>0>(c[46214]|0)>>>0){if(!a)a=C_(b)|0;else a=F_(a,b)|0;c[46215]=a;c[46214]=b}return a|0}function LA(a,b){a=a|0;b=b|0;a=wA(a)|0;while(1){if(!a){a=0;break}if((MA(a)|0)==0?Xy(a,b,0)|0:0){a=1;break}a=xA(a)|0}return a|0}function MA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=ry(b)|0;if((h|0)!=0?(a[h>>0]|0)!=37:0)d=0;else e=3;a:do if((e|0)==3){d=dx(b)|0;b:do if(d|0?(f=dx(yA(b)|0)|0,f|0):0){h=Ew(c[(dx(fz(b)|0)|0)+8>>2]|0)|0;g=d+12|0;e=f+12|0;d=0;while(1){if((d|0)>=(h|0))break b;f=c[(c[g>>2]|0)+(d<<2)>>2]|0;if((f|0?(i=c[(c[e>>2]|0)+(d<<2)>>2]|0,i|0):0)?b$(f,i)|0:0){d=0;break a}d=d+1|0}}while(0);d=_w(b,0)|0;if(d)if((Ew(c[d+8>>2]|0)|0)>0)d=0;else return (Ew(c[d+12>>2]|0)|0)<1|0;else d=1}while(0);return d|0}function NA(b,d){b=b|0;d=d|0;var e=0,f=0;c[46216]=0;e=xx(b,94237)|0;if((e|0?((a[e>>0]|0)+-48|0)>>>0<10:0)?(f=i1(e,0,10)|0,(f|0)==0|(f|0)>59):0)c[5005]=f;OA(b,1);if(((PA(b,d,1)|0)!=-1?(QA(b,d)|0)!=-1:0)?(RA(b,d)|0)!=-1:0){c[5005]=128;b=kb[c[(c[(c[b+64>>2]|0)+8>>2]|0)+8>>2]&63](d)|0}else b=-1;return b|0}function OA(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=wA(a)|0;while(1){if(!d)break;OA(d,0);d=xA(d)|0}a:do if(b|0){b=Sy(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Ex(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Gx(a,d)|0}b=Ty(a,b)|0}}while(0);return}function PA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if((e|0)==0?(yA(b)|0)!=0:0){i=0;g=191979;k=106488}else{k=(a[b+24>>0]&1)==0?191979:94281;g=(gy(b)|0)==0;c[46217]=nx(b,2,108373,0)|0;c[46218]=nx(b,2,108382,0)|0;i=1;g=g?191979:94284}f=ry(b)|0;if((f|0)!=0?(a[f>>0]|0)!=37:0){h=1;j=99578}else{h=0;j=191979;f=191979}do if((SA(b,d)|0)!=-1?(TA(b,d,g)|0)!=-1:0){g=(h|0)==0;if(h|i|0){if((TA(b,d,k)|0)==-1){f=-1;break}if((TA(b,d,99571)|0)==-1){f=-1;break}}if(!g?(cB(b,d,f)|0)==-1:0){f=-1;break}if(((TA(b,d,j)|0)!=-1?(TA(b,d,94292)|0)!=-1:0)?(c[46216]=(c[46216]|0)+1,(hB(b,d,e)|0)!=-1):0){c[b>>2]=c[b>>2]|8;f=0}else f=-1}else f=-1;while(0);return f|0}function QA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((UA(a,b)|0)==-1)d=-1;else{k=_w(fz(a)|0,0)|0;i=(k|0)==0;j=k+12|0;k=k+8|0;h=Sy(a)|0;while(1){if(!h){d=0;break a}if(VA(a,h,(c[h>>2]|0)>>>4,0)|0){if(i)d=0;else d=c[k>>2]|0;if((WA(h,b,d)|0)==-1){d=-1;break a}}g=Ex(a,h)|0;d=h;while(1){if(!g)break;f=g+-48|0;e=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0;if((d|0)!=(e|0)?(VA(a,e,(c[h>>2]|0)>>>4,0)|0)!=0:0){if(i)d=0;else d=c[k>>2]|0;if((WA(c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0,b,d)|0)==-1){d=-1;break a}d=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0}if(XA(a,g)|0){if(i)e=0;else e=c[j>>2]|0;if((YA(g,b,e)|0)==-1){d=-1;break a}}g=Gx(a,g)|0}h=Ty(a,h)|0}}while(0);return d|0}function RA(a,b){a=a|0;b=b|0;c[46216]=(c[46216]|0)+-1;if((SA(a,b)|0)==-1)a=-1;else a=((TA(a,b,107982)|0)==-1)<<31>>31;return a|0}function SA(a,b){a=a|0;b=b|0;var d=0;d=c[46216]|0;while(1){if((d|0)<=0){d=0;break}if((TA(a,b,150515)|0)==-1){d=-1;break}else d=d+-1|0}return d|0}function TA(a,b,d){a=a|0;b=b|0;d=d|0;return lb[c[(c[(c[a+64>>2]|0)+8>>2]|0)+4>>2]&127](b,d)|0}function UA(a,b){a=a|0;b=b|0;a=wA(a)|0;while(1){if(!a){a=0;break}if(!(MA(a)|0)){if((PA(a,b,0)|0)==-1){a=-1;break}if((QA(a,b)|0)==-1){a=-1;break}if((RA(a,b)|0)==-1){a=-1;break}}else UA(a,b)|0;a=xA(a)|0}return a|0}function VA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((LA(a,b)|0)==0?(eB(a,b,c,d)|0)!=0:0)if((fB(a,b)|0)==0?(gB(b)|0)==0:0)e=5;else a=1;else e=5;if((e|0)==5)a=0;return a|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ez(a)|0;do if((SA(d,b)|0)!=-1?(ZA(a,b)|0)!=-1:0){if(($A(a)|0)==0?(aB(a,b,c)|0)==-1:0){a=-1;break}a=TA(d,b,94248)|0}else a=-1;while(0);return a|0}function XA(a,b){a=a|0;b=b|0;a=wA(a)|0;while(1){if(!a){a=1;break}if((MA(a)|0)==0?Vx(a,b,0)|0:0){a=0;break}a=xA(a)|0}return a|0}function YA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]&3;g=c[((e|0)==3?a:a+48|0)+40>>2]|0;e=c[((e|0)==2?a:a+-48|0)+40>>2]|0;f=ez(g)|0;do if((((((SA(f,b)|0)!=-1?(ZA(g,b)|0)!=-1:0)?(_A(a,b,c[46217]|0)|0)!=-1:0)?(g=(ey(ez(g)|0)|0)!=0,(TA(f,b,g?97053:97058)|0)!=-1):0)?(ZA(e,b)|0)!=-1:0)?(_A(a,b,c[46218]|0)|0)!=-1:0){if(!($A(a)|0)){if((aB(a,b,d)|0)==-1){a=-1;break}}else if((bB(a,b,1)|0)==-1){a=-1;break}a=TA(f,b,94248)|0}else a=-1;while(0);return a|0}function ZA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;g=i;d=i+8|0;e=ry(a)|0;f=ez(a)|0;if(!e){j=a+8|0;a=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=a;Y0(d,94268,g)|0;if((TA(f,b,d)|0)==-1)a=-1;else h=4}else if((cB(f,b,e)|0)==-1)a=-1;else h=4;if((h|0)==4)a=0;l=i;return a|0}function _A(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0?(e=ez(b)|0,f=yx(b,d)|0,(a[f>>0]|0)!=0):0)if((TA(e,c,104958)|0)==-1)b=-1;else{do if(Rz(f)|0){if((cB(e,c,f)|0)==-1){b=-1;break a}}else{b=A$(f,58)|0;if(!b)if((dB(e,c,f,0)|0)==-1){b=-1;break a}else break;a[b>>0]=0;if((dB(e,c,f,0)|0)==-1){b=-1;break a}if((TA(e,c,104958)|0)==-1){b=-1;break a}if((dB(e,c,b+1|0,0)|0)==-1){b=-1;break a}a[b>>0]=58}while(0);b=0}else b=0;while(0);return b|0}function $A(a){a=a|0;return (c[a>>2]|0)>>>3&1|0}function aB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!(c[a>>2]&2)){e=0;k=4}else{switch(bB(a,b,0)|0){case -1:{e=-1;break a}case 0:{e=0;k=4;break a}default:{}}e=1;k=4}while(0);b:do if((k|0)==4){f=dx(a)|0;j=ez(a)|0;c:do if(f){i=f+12|0;h=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!h)break c;do if(c[a>>2]&2){g=c[46217]|0;if(g|0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0)break;g=c[46218]|0;if(!((g|0)!=0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0))k=12}else k=12;while(0);if((k|0)==12){k=0;f=h+16|0;if((c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)!=(c[h+12>>2]|0)){g=e+1|0;if(e){if((TA(j,b,94263)|0)==-1){e=-1;break b}if((SA(j,b)|0)==-1){e=-1;break b}}else{if((SA(j,b)|0)==-1){e=-1;break b}if((TA(j,b,94260)|0)==-1){e=-1;break b}c[46216]=(c[46216]|0)+1}if((cB(j,b,c[h+8>>2]|0)|0)==-1){e=-1;break b}if((TA(j,b,94266)|0)==-1){e=-1;break b}if((cB(j,b,c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)|0)==-1){e=-1;break b}else e=g}}h=nb[c[d>>2]&63](d,h,8)|0}}while(0);if((e|0)>0){if((TA(j,b,94258)|0)==-1){e=-1;break}c[46216]=(c[46216]|0)+-1}c[a>>2]=c[a>>2]|8;e=0}while(0);return e|0}function bB(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=ry(b)|0;b=ez(b)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)if((TA(b,c,94251)|0)!=-1?(cB(b,c,e)|0)!=-1:0)if((d|0)!=0?(TA(b,c,94258)|0)==-1:0)b=-1;else{b=1;f=7}else b=-1;else{b=0;f=7}return b|0}function cB(a,b,c){a=a|0;b=b|0;c=c|0;return dB(a,b,c,1)|0}function dB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!d)c=IA(c,KA(c)|0)|0;else c=JA(c)|0;return TA(a,b,c)|0}function eB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do if(0>>0|(0==(e|0)?(c[b>>2]|0)>>>4>>>0>>0:0))b=0;else{b=Hx(a,b)|0;while(1){if(!b){b=1;break a}if(0>>0|(0==(e|0)?(c[c[b+40>>2]>>2]|0)>>>4>>>0>>0:0)){b=0;break a}b=Ix(a,b)|0}}while(0);return b|0}function fB(a,b){a=a|0;b=b|0;if(!(Hx(a,b)|0))a=(Ex(a,b)|0)==0&1;else a=0;return a|0}function gB(a){a=a|0;var b=0,d=0,e=0;a=dx(a)|0;a:do if(!a)a=0;else{d=a+8|0;e=c[d>>2]|0;b=a+12|0;a=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!a){a=0;break a}if((c[(c[b>>2]|0)+(c[a+16>>2]<<2)>>2]|0)!=(c[a+12>>2]|0)){a=1;break a}e=c[d>>2]|0;a=nb[c[e>>2]&63](e,a,8)|0}}while(0);return a|0}function hB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=_w(a,0)|0;if(e)if(((iB(a,b,108412,c[e+16>>2]|0,d)|0)!=-1?(iB(a,b,108399,c[e+8>>2]|0,d)|0)!=-1:0)?(iB(a,b,108368,c[e+12>>2]|0,d)|0)!=-1:0)f=5;else a=-1;else f=5;if((f|0)==5)a=0;return a|0}function iB(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=(g|0)!=0;if(m)l=0;else l=Hw(f,0)|0;k=(l|0)==0;j=nb[c[f>>2]&63](f,0,128)|0;g=0;while(1){if(!j){n=23;break}i=j+12|0;n=c[i>>2]|0;if((n|0)!=0?(a[n>>0]|0)!=0:0)n=12;else n=7;do if((n|0)==7){n=0;if(!(a[j+22>>0]|0)){if(!k){h=nb[c[l>>2]&63](l,j,4)|0;o=c[h+12>>2]|0;if(o|0?a[o>>0]|0:0){n=12;break}if(!(a[h+22>>0]|0))n=12}}else n=12}while(0);if((n|0)==12){n=0;h=g+1|0;if(g){if((TA(b,d,94263)|0)==-1){g=-1;break}if((SA(b,d)|0)==-1){g=-1;break}}else{if((SA(b,d)|0)==-1){g=-1;break}if((TA(b,d,e)|0)==-1){g=-1;break}if((TA(b,d,94260)|0)==-1){g=-1;break}c[46216]=(c[46216]|0)+1}if((cB(b,d,c[j+8>>2]|0)|0)==-1){g=-1;break}if((TA(b,d,94266)|0)==-1){g=-1;break}if((cB(b,d,c[i>>2]|0)|0)==-1){g=-1;break}else g=h}j=nb[c[f>>2]&63](f,j,8)|0}do if((n|0)==23){if((g|0)>0){c[46216]=(c[46216]|0)+-1;if((g|0)!=1){if((TA(b,d,150517)|0)==-1){g=-1;break}if((SA(b,d)|0)==-1){g=-1;break}}g=(TA(b,d,94295)|0)==-1;if(m|g){g=g<<31>>31;break}}else if(m){g=0;break}Hw(f,l)|0;g=0}while(0);return g|0}function jB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(c[b>>2]&3){case 0:{g=80;break}case 1:{g=81;break}case 3:case 2:{g=82;break}default:{}}b=lb[g&127](a,b)|0;if(!b)b=-1;else{nB(a,b,d,e,g,f);b=0}return b|0}function kB(a,b){a=a|0;b=b|0;if((ez(b)|0)!=(a|0))b=Vx(a,b,0)|0;return b|0}function lB(a,b){a=a|0;b=b|0;if((ez(b)|0)!=(a|0))b=Xy(a,b,0)|0;return b|0}function mB(a,b){a=a|0;b=b|0;return a|0}function nB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=(f|0)!=0;if(h)vb[c&127](a,b,d);g=wA(a)|0;while(1){if(!g)break;i=lb[e&127](g,b)|0;if(i|0)nB(g,i,c,d,e,f);g=xA(g)|0}if(!h)vb[c&127](a,b,d);return}function oB(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[46219]=0;c[46220]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=75;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=C_(k*6|3)|0;if(h){F3(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;F3(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{D_(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=76;break a}case 4:{s=75;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==6){e=0;s=76;break}e=a[94299+p>>0]|0;j=e<<24>>24;do if(e<<24>>24!=-18){h=c[46220]|0;if((h|0)==-2){h=Wz()|0;c[46220]=h}if((h|0)>=1)if(h>>>0<269)i=d[94379+h>>0]|0;else i=2;else{c[46220]=0;i=0}h=i+j|0;if(h>>>0<=59?(i|0)==(d[94648+h>>0]|0):0){p=a[94708+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[46220]=-2;g=g+4|0;c[g>>2]=c[46221];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[94768+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[46220]|0;b:do switch(q|0){case 0:{c[46219]=(c[46219]|0)+1;pA(140679);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=76;break a}else{h=o;break b}else{c[46220]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<24>>24==18)break;if((h|0)==(f|0)){e=1;s=76;break a}e=h+-2|0;g=g+-4|0;h=e;e=a[94299+(b[e>>1]|0)>>0]|0}g=g+4|0;c[g>>2]=c[46221];e=1;j=3}else s=23}do if((s|0)==23){s=0;i=d[94848+h>>0]|0;e=c[g+(1-i<<2)>>2]|0;c:do switch(h|0){case 2:{pB();qB();break}case 3:{if(c[46222]|0){pB();qB();$x(c[46222]|0)|0;c[46171]=0;c[46222]=0}break}case 6:{rB(c[g>>2]|0,c[g+-4>>2]|0,c[g+-8>>2]|0);break}case 7:{e=c[g>>2]|0;break}case 8:{e=0;break}case 9:{e=1;break}case 10:{e=0;break}case 11:{e=0;break}case 12:{e=1;break}case 21:if(!(c[g+-4>>2]|0)){tB();break c}else{sB();break c}case 24:{uB();break}case 25:{uB();break}case 26:{e=1;break}case 27:{e=0;break}case 30:{vB(c[g>>2]|0,0,0);break}case 31:{vB(c[g+-8>>2]|0,c[g>>2]|0,0);break}case 32:{vB(c[g+-16>>2]|0,c[g+-8>>2]|0,c[g>>2]|0);break}case 33:{wB(c[g+-8>>2]|0,c[g+-4>>2]|0);break}case 34:{wB(258,0);break}case 35:{e=258;break}case 36:{e=259;break}case 37:{e=260;break}case 38:{e=c[g+-4>>2]|0;break}case 39:{e=0;break}case 48:{xB(c[g+-8>>2]|0,c[g>>2]|0);break}case 49:{xB(c[g>>2]|0,0);break}case 51:{yB(c[g>>2]|0);break}case 52:{zB();break}case 53:{e=c[g>>2]|0;break}case 54:{e=0;break}case 55:{e=0;break}case 59:{e=c[g>>2]|0;break}case 60:{e=c[g>>2]|0;break}case 61:{e=c[g>>2]|0;break}case 62:{e=AB(c[g+-8>>2]|0,c[g>>2]|0)|0;break}default:{}}while(0);i=0-i|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[94911+h>>0]|0)+-24|0;p=b[i>>1]|0;h=p+(a[94974+e>>0]|0)|0;if(h>>>0<60?(d[94648+h>>0]|0)==(p|0):0){e=a[94708+h>>0]|0;j=q;h=i;break}e=a[95009+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==75){pA(137476);e=2;s=76}if((s|0)==76)if((f|0)!=(r|0))D_(f);l=t;return e|0}function pB(){var a=0,b=0;a=c[46223]|0;while(1){if(!a)break;IB(a+8|0);IB((c[46223]|0)+24|0);IB((c[46223]|0)+16|0);b=BB(c[46223]|0)|0;c[46223]=b;a=b}return}function qB(){qA();Ay(c[46222]|0);return}function rB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[46222]|0;if(!f){a[184896]=d&1|(e&255)<<1&2|a[184896]&-12|8;f=c[46225]|0;a[g>>0]=a[184896]|0;a[g+1>>0]=a[184897]|0;a[g+2>>0]=a[184898]|0;a[g+3>>0]=a[184899]|0;f=Xx(b,g,f)|0;c[46222]=f}c[46171]=f;c[46223]=CB(c[46223]|0,f)|0;Qz(0,b)|0;l=h;return}function sB(){var b=0,d=0,e=0,f=0,g=0,h=0;HB(2);e=c[46223]|0;f=a[95044]|0;h=0;b=e+24|0;while(1){d=c[b>>2]|0;if(!d)break;if(((c[d>>2]|0)==267?(g=c[d+4>>2]|0,(a[g>>0]|0)==f<<24>>24):0)?(b$(g,95044)|0)==0:0)b=c[d+8>>2]|0;else b=h;h=b;b=d+12|0}b=e+16|0;a:while(1){e=c[b>>2]|0;b=e+12|0;if(!(c[b>>2]|0))break;d=e+4|0;if((c[e>>2]|0)==262){e=c[d>>2]|0;d=Sy(e)|0;while(1){if(!d)continue a;g=Xy(c[c[46223]>>2]|0,d,0)|0;PB(g,0,c[b>>2]|0,h);d=Ty(e,d)|0}}else while(1){d=c[d>>2]|0;if(!d)continue a;PB(c[d+4>>2]|0,c[d+8>>2]|0,c[b>>2]|0,h);d=d+12|0}}IB((c[46223]|0)+8|0);IB((c[46223]|0)+16|0);IB((c[46223]|0)+24|0);c[(c[46223]|0)+4>>2]=0;return}function tB(){var a=0;HB(1);a=(c[46223]|0)+8|0;while(1){a=c[a>>2]|0;if(!a)break;OB(c[a+4>>2]|0);a=a+12|0}IB((c[46223]|0)+8|0);IB((c[46223]|0)+24|0);IB((c[46223]|0)+16|0);c[(c[46223]|0)+4>>2]=0;return}function uB(){var a=0,b=0;a=c[46223]|0;b=c[a+8>>2]|0;if(!b){b=c[a+4>>2]|0;if(!b)b=0;else{b=NB(b)|0;a=c[46223]|0}c[a+4>>2]=0}else{b=MB(b)|0;a=c[46223]|0;c[a+12>>2]=0;c[a+8>>2]=0}if(b|0)EB(a+16|0,b);return}function vB(a,b,d){a=a|0;b=b|0;d=d|0;if(d)b=KB(b,d)|0;d=LB(az(c[c[46223]>>2]|0,a,1)|0,b)|0;EB((c[46223]|0)+8|0,d);Qz(c[46222]|0,a)|0;return}function wB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(d|0)GB();d=(c[46223]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;if(!(c[d+8>>2]|0))GB();d=d+12|0}g=(b|0)==260?2:(b|0)==259&1;HB(g);b=c[46223]|0;d=b+24|0;while(1){f=c[d>>2]|0;if(!f)break;do if((c[f>>2]|0)!=267){d=c[f+4>>2]|0;e=c[b>>2]|0;if(!((a[d+21>>0]|0)!=0&(e|0)==(c[46222]|0))){d=nx(e,g,c[d+8>>2]|0,c[f+8>>2]|0)|0;b=c[46223]|0;if((c[b>>2]|0)!=(c[46222]|0))break}a[d+22>>0]=1}while(0);d=f+12|0}IB(b+24|0);return}function xB(a,b){a=a|0;b=b|0;b=DB(a,b)|0;EB((c[46223]|0)+24|0,b);return}function yB(a){a=a|0;var b=0;b=c[46223]|0;c[46223]=CB(b,vA(c[b>>2]|0,a,1)|0)|0;Qz(c[46222]|0,a)|0;return}function zB(){var a=0,b=0;a=c[46223]|0;b=c[a>>2]|0;a=BB(a)|0;c[46223]=a;c[a+4>>2]=b;return}function AB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+1024|0;f=g;d=W_(a)|0;d=d+1+(W_(b)|0)|0;if(d>>>0<1025)d=f;else d=C_(d)|0;b0(d,a)|0;p1(d,b)|0;e=Oz(c[46222]|0,d)|0;Qz(c[46222]|0,a)|0;Qz(c[46222]|0,b)|0;if((d|0)!=(f|0))D_(d);l=g;return e|0}function BB(a){a=a|0;var b=0;b=c[(c[46223]|0)+32>>2]|0;Ny(c[46222]|0,a);return b|0}function CB(a,b){a=a|0;b=b|0;var d=0;d=My(c[46222]|0,36)|0;c[d+32>>2]=a;c[d>>2]=b;return d|0}function DB(a,b){a=a|0;b=b|0;return FB(267,a,b)|0}function EB(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(e|0)c[e+12>>2]=b;c[d>>2]=b;if(!(c[a>>2]|0))c[a>>2]=b;return}function FB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=My(c[46222]|0,16)|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;return e|0}function GB(){var a=0;a=l;l=l+16|0;Pw(0,95048,a)|0;l=a;return}function HB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(b|0)==2;d=(c[46223]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;e=d+4|0;f=c[e>>2]|0;if(!((g?(a[f>>0]|0)==(a[95044]|0):0)?!(b$(f,95044)|0):0)){h=nx(c[c[46223]>>2]|0,b,f,0)|0;c[e>>2]=h;if(!h)c[e>>2]=nx(c[c[46223]>>2]|0,b,f,191979)|0;c[d>>2]=266;Qz(c[46222]|0,f)|0}d=d+12|0}return}function IB(a){a=a|0;JB(c[a>>2]|0);c[a+4>>2]=0;c[a>>2]=0;return}function JB(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;switch(c[a>>2]|0){case 265:{JB(c[a+4>>2]|0);break}case 266:case 267:{Qz(c[46222]|0,c[a+8>>2]|0)|0;break}default:{}}Ny(c[46222]|0,a);a=b}return}function KB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;f=h;g=h+8|0;d=W_(a)|0;d=d+2+(W_(b)|0)|0;if(d>>>0<1025)e=g;else e=C_(d)|0;c[f>>2]=a;c[f+4>>2]=b;Y0(e,95081,f)|0;d=Oz(c[46222]|0,e)|0;Qz(c[46222]|0,a)|0;Qz(c[46222]|0,b)|0;if((e|0)!=(g|0))D_(e);l=h;return d|0}function LB(a,b){a=a|0;b=b|0;return FB(259,a,b)|0}function MB(a){a=a|0;return FB(265,a,0)|0}function NB(a){a=a|0;return FB(262,a,0)|0}function OB(a){a=a|0;var b=0,d=0;b=(c[46223]|0)+24|0;while(1){b=c[b>>2]|0;if(!b)break;if((c[b>>2]|0)==266?(d=c[b+4>>2]|0,d|0):0)rx(a,d,c[b+8>>2]|0)|0;b=b+12|0}return}function PB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+4|0;a:do if((c[d>>2]|0)==262){d=c[f>>2]|0;f=Sy(d)|0;while(1){if(!f)break a;QB(a,b,Xy(c[c[46223]>>2]|0,f,0)|0,0,e);f=Ty(d,f)|0}}else while(1){f=c[f>>2]|0;if(!f)break a;d=Xy(c[c[46223]>>2]|0,c[f+4>>2]|0,0)|0;QB(a,b,d,c[f+8>>2]|0,e);f=f+12|0}while(0);return}function QB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;d=Rx(c[c[46223]>>2]|0,a,d,f,1)|0;if(d|0){g=c[d>>2]&3;f=c[((g|0)==2?d:d+-48|0)+40>>2]|0;a=(f|0)==(a|0)?(c[((g|0)==3?d:d+48|0)+40>>2]|0)!=(f|0):0;RB(d,108373,a?e:b);RB(d,108382,a?b:e);OB(d)}return}function RB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d|0){e=nx(c[c[46223]>>2]|0,2,b,0)|0;if(!e)e=nx(c[c[46223]>>2]|0,2,b,191979)|0;rx(a,e,d)|0}return}function SB(a,b,d){a=a|0;b=b|0;d=d|0;c[46191]=b;c[46222]=a;c[46171]=0;a=d|0?d:18496;c[46225]=a;Vz(a,b);oB()|0;a=c[46171]|0;if(!a){sA();a=c[46171]|0}return a|0}function TB(a,b){a=a|0;b=b|0;return SB(0,a,b)|0}function UB(a,b){a=a|0;b=b|0;b=wC(a,1,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+184>>2]=c[b+4>>2];c[a+172>>2]=c[b+12>>2];c[a+176>>2]=c[b>>2];c[a+180>>2]=c[b+16>>2];b=300}return b|0}function VB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;Az(b,134401,280,1)|0;g=b+16|0;c[(c[g>>2]|0)+144>>2]=a;if((fz(b)|0)!=(b|0))c[(c[(fz(b)|0)+16>>2]|0)+144>>2]=a;e=xx(b,95297)|0;d=a+172|0;if((e|0)!=0?(c[d>>2]=0,(UB(a,e)|0)==999):0){d=xC(a,1,e)|0;c[f>>2]=e;c[f+4>>2]=d;Pw(1,95824,f)|0;d=-1}else{e=c[d>>2]|0;if(!e)d=-1;else{CG(1);bH(b,c[c[a+180>>2]>>2]&1);d=c[(c[g>>2]|0)+8>>2]|0;c[(c[(fz(b)|0)+16>>2]|0)+8>>2]=d;LK();d=c[e>>2]|0;if(d|0?(tb[d&127](b),h=c[e+4>>2]|0,h|0):0)c[(c[g>>2]|0)+148>>2]=h;CG(0);d=0}}l=i;return d|0}function WB(a,b){a=a|0;b=b|0;var d=0,e=0;if(Az(b,134401,0,1)|0){d=b+16|0;a=c[d>>2]|0;e=c[a+148>>2]|0;if(e){tb[e&127](b);a=c[d>>2]|0;c[a+148>>2]=0}if(c[a+8>>2]|0)gH(b)}return 0}function XB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;d=c[b+76>>2]|0;f=c[b>>2]|0;if((d|0)!=0?(e=c[d>>2]|0,(e|0)!=0):0){tb[e&127](b);g=12}else g=4;do if((g|0)==4)if((c[b+40>>2]|0)==0?(h=b+36|0,(c[h>>2]|0)==0):0){if(a[f+13>>0]|0)YB(b);d=b+32|0;e=c[d>>2]|0;if(!e){c[h>>2]=c[15653];g=12;break}f=L1(e,103486)|0;c[h>>2]=f;if(!f){j=c[(c[b+12>>2]|0)+16>>2]|0;h=c[d>>2]|0;d=c$(c[(O_()|0)>>2]|0)|0;c[i>>2]=h;c[i+4>>2]=d;ub[j&63](95087,i);d=1}else g=12}else g=12;while(0);if((g|0)==12)if(!(c[b+152>>2]&1024))d=0;else{ub[c[(c[b+12>>2]|0)+16>>2]&63](95125,j);d=1}l=k;return d|0}function YB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+112|0;e=h;g=h+4|0;d=c[b+24>>2]|0;if(!d)a[g>>0]=0;else{c[e>>2]=d+1;Y0(g,95143,e)|0}e=c[b+20>>2]|0;e=e|0?e:95147;d=W_(e)|0;i=W_(g)|0;f=b+52|0;i=d+1+i+(W_(c[f>>2]|0)|0)|0;d=i+11|0;if((c[46226]|0)>>>0<(i+1|0)>>>0){c[46226]=d;d=F_(c[46227]|0,d)|0;c[46227]=d}else d=c[46227]|0;b0(d,e)|0;p1(c[46227]|0,g)|0;d=c[46227]|0;d=d+(W_(d)|0)|0;a[d>>0]=46;a[d+1>>0]=0;d=n1(c[f>>2]|0)|0;f=c[46227]|0;while(1){e=o1(d,58)|0;if(!e)break;p1(f,e+1|0)|0;i=c[46227]|0;g=i+(W_(i)|0)|0;a[g>>0]=46;a[g+1>>0]=0;a[e>>0]=0;f=i}p1(f,d)|0;D_(d);c[b+32>>2]=c[46227];l=h;return}function ZB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+8|0;f=h;if((b|0)!=0&(d|0)!=0){if(c[a+152>>2]&1024|0){ub[c[(c[a+12>>2]|0)+16>>2]&63](95125,f);Sa(1)}if((_B(a,b,d)|0)==(d|0))e=d;else{f=c[(c[a+12>>2]|0)+16>>2]|0;c[g>>2]=d;ub[f&63](95157,g);Sa(1)}}else e=0;l=h;return e|0}function _B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=c[(c[b>>2]|0)+104>>2]|0;do if(!f){j=b+40|0;h=c[j>>2]|0;if(!h){e=E1(d,1,e,c[b+36>>2]|0)|0;break}f=b+44|0;i=b+48|0;g=c[i>>2]|0;do if(((c[f>>2]|0)+-1-g|0)>>>0>>0){g=e+4096+g&-4096;c[f>>2]=g;f=F_(h,g)|0;c[j>>2]=f;if(!f){ub[c[(c[b+12>>2]|0)+16>>2]&63](95182,n);Sa(1)}else{k=f;m=c[i>>2]|0;break}}else{k=h;m=g}while(0);F3(k+m|0,d|0,e|0)|0;n=(c[i>>2]|0)+e|0;c[i>>2]=n;a[(c[j>>2]|0)+n>>0]=0}else e=nb[f&63](b,d,e)|0;while(0);l=o;return e|0}function $B(a,b){a=a|0;b=b|0;var c=0;c=W_(b)|0;b=(ZB(a,b,c)|0)==(c|0);return (b?1:-1)|0}function aC(b,c){b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;a[e>>0]=c;b=(ZB(b,e,1)|0)==1;l=d;return (b?c:-1)|0}function bC(b){b=b|0;var d=0;d=c[b+36>>2]|0;if(((d|0)!=0?(a[b+144>>0]|0)==0:0)?(c[(c[b>>2]|0)+104>>2]|0)==0:0)b=w1(d)|0;else b=0;return b|0}function cC(a){a=a|0;var b=0,d=0;b=c[a+76>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)tb[d&127](a);bC(a)|0;return}function dC(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=c[a+76>>2]|0;if(c[a+152>>2]&1024|0){ub[c[(c[a+12>>2]|0)+16>>2]&63](95209,e);Sa(1)}if((d|0)!=0?(b=c[d+8>>2]|0,(b|0)!=0):0)tb[b&127](a);else{bC(a)|0;eC(a)}l=e;return}function eC(b){b=b|0;var d=0,e=0,f=0;d=b+32|0;if((c[d>>2]|0?(e=b+36|0,f=c[e>>2]|0,(f|0)!=(c[15653]|0)):0)?(a[b+144>>0]|0)==0:0){if(f|0){s1(f)|0;c[e>>2]=0}c[d>>2]=0}return}function fC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;f=i;h=i+24|0;g=i+8|0;c[g>>2]=d;e=q0(h,1024,b,g)|0;if((e|0)>=0){if((e|0)>1023){e=vH(e+1|0)|0;c[g>>2]=d;f=e;e=Z0(e,b,g)|0}else f=h;ZB(a,f,e)|0;if((f|0)!=(h|0))D_(f)}else{c[f>>2]=c$(c[(O_()|0)>>2]|0)|0;Pw(1,95226,f)|0}l=i;return}function gC(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=hC(e,b)|0;ZB(a,f,c[e>>2]|0)|0;l=d;return}function hC(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(d<-1.0e15))if(!(d>1.0e15)){d=d*1.0e4;f=~~((d<0.0?-.5:.5)+d);if(!f){f=135312;e=1}else{l=(f|0)<0;k=4;i=0;e=191746;f=l?0-f|0:f;while(1){if(!((f|0)!=0|(k|0)>0))break;g=(f|0)%10|0;j=(f|0)/10|0;h=e+-1|0;if((g|0)==0&i<<24>>24==0)f=0;else{a[h>>0]=g|48;f=1;e=h}if((k|0)==1)if(!(f<<24>>24))f=1;else{e=e+-1|0;a[e>>0]=46;f=1}k=k+-1|0;i=f;f=j}if(l){e=e+-1|0;a[e>>0]=45}f=e;e=191746-e|0}}else{f=95241;e=18}else{f=95240;e=19}c[b>>2]=e;return f|0}function iC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=hC(e,+h[b>>3])|0;ZB(a,f,c[e>>2]|0)|0;ZB(a,99578,1)|0;b=hC(e,+h[b+8>>3])|0;ZB(a,b,c[e>>2]|0)|0;l=d;return}function jC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;e=0;while(1){h=b+(e<<4)|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];iC(a,f);e=e+1|0;if((e|0)>=(d|0))break;ZB(a,99578,1)|0}l=g;return}function kC(a,b){a=a|0;b=b|0;var d=0;d=uH(392)|0;if(d|0){c[d>>2]=20052;c[d+16>>2]=23;c[d+32>>2]=a;c[d+36>>2]=b}return d|0}function lC(a){a=a|0;var b=0,d=0,e=0,f=0;b=uH(392)|0;d=b;e=a;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=b+60|0;e=a+60|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];f=b+80|0;e=a+80|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];return b|0}function mC(a){a=a|0;tC(a);D_(a);return}function nC(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[46228]|0;if(e){d=c[e+4>>2]|0;if(!d){d=uH(632)|0;c[(c[46228]|0)+4>>2]=d}}}else{d=uH(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[46228]=d;c[d+32>>2]=b;c[d>>2]=a;return}function oC(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[46229]|0;if(e){d=c[e+4>>2]|0;if(!d){d=uH(632)|0;c[(c[46229]|0)+4>>2]=d}}}else{d=uH(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[46229]=d;c[d+52>>2]=b;c[d>>2]=a;return (wC(a,3,b)|0)!=0|0}function pC(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}function qC(a){a=a|0;var b=0,d=0,e=0;a=a+164|0;b=c[a>>2]|0;d=c[b+4>>2]|0;if(d|0?(e=d+52|0,(c[e>>2]|0)==0):0)c[e>>2]=c[b+52>>2];c[a>>2]=d;return d|0}function rC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;f=b+10|0;if((c[e>>2]|0)>(b|0))a=c[a>>2]|0;else{c[e>>2]=f;f=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=f;a=f}c[a+(b<<2)>>2]=d;return}function sC(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)D_(b);c[a>>2]=0;c[a+8>>2]=0;c[a+4>>2]=0;return}function tC(a){a=a|0;var b=0,d=0,e=0;d=a+160|0;b=c[d>>2]|0;while(1){if(!b)break;e=c[b+4>>2]|0;sC(b+604|0);sC(b+592|0);D_(c[b+584>>2]|0);D_(c[b+588>>2]|0);D_(b);b=e}c[46229]=0;c[46228]=0;c[a+192>>2]=0;c[a+164>>2]=0;c[d>>2]=0;c[a+28>>2]=0;return}function uC(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;k=n+64|0;m=n;U0(k,e,63)|0;i=A$(k,58)|0;if(i|0)a[i>>0]=0;b=b+60+(d<<2)|0;while(1){d=c[b>>2]|0;if(!d){d=b;b=0;break}U0(m,c[d+4>>2]|0,63)|0;d=A$(m,58)|0;if(d|0)a[d>>0]=0;if((b$(k,m)|0)<1){j=9;break}b=c[b>>2]|0}while(1){if((j|0)==9){d=b;b=c[b>>2]|0}if(!b)break;U0(m,c[b+4>>2]|0,63)|0;b=A$(m,58)|0;if(b|0)a[b>>0]=0;if(b$(k,m)|0)break;b=c[d>>2]|0;if((c[b+8>>2]|0)<=(f|0))break;j=9}m=vH(20)|0;c[m>>2]=c[d>>2];c[d>>2]=m;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=g;c[m+16>>2]=h;l=n;return 1}function vC(a,b){a=a|0;b=b|0;b=l;l=l+16|0;Pw(1,95321,b)|0;l=b;return 0}function wC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+144|0;r=s;o=s+80|0;p=s+16|0;n=(d+-3|0)>>>0<2?0:d;U0(o,e,63)|0;e=A$(o,58)|0;if(e){f=e+1|0;a[e>>0]=0;e=A$(f,58)|0;if(!e)m=0;else{a[e>>0]=0;m=e+1|0}}else{m=0;f=0}i=(f|0)!=0;j=(m|0)==0;k=(n|0)==(d|0);h=b+60+(d<<2)|0;a:while(1){e=c[h>>2]|0;if(!e){e=0;break}U0(p,c[e+4>>2]|0,63)|0;e=A$(p,58)|0;if(!e)e=0;else{a[e>>0]=0;e=e+1|0}do if(!(b$(p,o)|0)){g=(e|0)!=0;if(i&g?b$(e,f)|0:0)break;if(!j?b$(m,c[(c[(c[h>>2]|0)+12>>2]|0)+8>>2]|0)|0:0)break;if(k|g^1){q=16;break a}if(wC(b,n,e)|0){q=16;break a}}while(0);h=c[h>>2]|0}do if((q|0)==16){e=c[h>>2]|0;if(e){f=e+16|0;if((c[f>>2]|0)==0?(vC(0,0)|0,(c[f>>2]|0)==0):0){e=0;break}if((c[b+8>>2]|0)>0){q=c[15686]|0;o=c[e+4>>2]|0;p=c[(c[e+12>>2]|0)+8>>2]|0;c[r>>2]=c[20064+(d<<2)>>2];c[r+4>>2]=o;c[r+8>>2]=p;g1(q,95352,r)|0}}else e=0}while(0);c[b+80+(d<<2)>>2]=e;l=s;return e|0}function xC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;do if(!e)e=0;else{if(c[5021]|0){Tw(184920,0,0);c[5021]=0}h=n1(e)|0;e=A$(h,58)|0;if(e){a[e>>0]=0;f=b+60+(d<<2)|0;e=1;g=f;while(1){b=c[g>>2]|0;if(!b)break;d=n1(c[b+4>>2]|0)|0;b=A$(d,58)|0;if(b|0)a[b>>0]=0;if(!((a[h>>0]|0)!=0?(O$(h,d)|0)!=0:0)){e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}c[46231]=e+1;a[e>>0]=32;Ww(184920,c[(c[g>>2]|0)+4>>2]|0)|0;e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}c[46231]=e+1;a[e>>0]=58;Ww(184920,c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]|0)|0;e=0}D_(d);g=c[g>>2]|0}D_(h);if(e<<24>>24){g=0;i=19}}else{D_(h);g=0;f=b+60+(d<<2)|0;e=1;i=19}if((i|0)==19){while(1){b=c[f>>2]|0;if(!b)break;d=n1(c[b+4>>2]|0)|0;b=A$(d,58)|0;if(b|0)a[b>>0]=0;if(!((g|0)!=0?(O$(g,d)|0)==0:0)){e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}c[46231]=e+1;a[e>>0]=32;Ww(184920,d)|0;e=0}g=d;f=c[f>>2]|0;i=19}if(e<<24>>24){e=191979;break}}e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}a[e>>0]=0;e=c[46230]|0;c[46231]=e}while(0);return e|0}function yC(b){b=b|0;var d=0;if(!b)qa(108182,95369,573,95383);if(!(a[b>>0]|0))qa(108187,95369,574,95383);d=c[46234]|0;if(!d)b=0;else b=nb[c[d>>2]&63](d,b,512)|0;return b|0}function zC(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;if(!b)qa(108230,95369,589,95400);g=b+8|0;e=c[g>>2]|0;if(!e)qa(108233,95369,590,95400);if(!(a[e>>0]|0))qa(108242,95369,591,95400);h=b+20|0;f=c[h>>2]|0;do if(!f){d=ZL(e)|0;if(!d){c[i>>2]=c[g>>2];Pw(0,95424,i)|0;d=0;break}i=L1(d,135739)|0;c[h>>2]=i;if(!i){c[j>>2]=c$(c[(O_()|0)>>2]|0)|0;c[j+4>>2]=d;Pw(0,95449,j)|0;d=0;break}d=c[46235]|0;if((d|0)>49){a[b+17>>0]=1;d=1;break}else{c[46235]=d+1;d=1;break}}else{Z1(f,0,0)|0;if(!(c[h>>2]|0))qa(95470,95369,614,95400);else d=1}while(0);l=k;return d|0}function AC(b){b=b|0;var d=0,e=0;if(a[b+17>>0]|0?(d=b+20|0,e=c[d>>2]|0,e|0):0){s1(e)|0;c[d>>2]=0}return}function BC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0;if(!b){e=-1;d=-1}else{e=c[b+48>>2]|0;f=+(e|0);if(!e){g=+h[d>>3];f=+h[d+8>>3]}else{h[d+8>>3]=f;h[d>>3]=f;g=f}e=~~(+((c[b+40>>2]|0)*72|0)/g);d=~~(+((c[b+44>>2]|0)*72|0)/f)}c[a>>2]=e;c[a+4>>2]=d;return}function CC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;f=m+16|0;j=m;k=m+32|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){if((0==0?(g=c[46362]|0,(c[46236]|0)!=(g|0)):0)?(c[46236]=g,i=c[46234]|0,i|0):0){yw(i)|0;c[46234]=0}n=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];n=!(n>=1.0)?96.0:n;h[j+8>>3]=n;h[j>>3]=n;d=DC(e)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];BC(k,d,f);d=c[k>>2]|0;f=c[k+4>>2]|0}else{d=-1;f=-1}c[b>>2]=d;c[b+4>>2]=f;l=m;return}function DC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!a)qa(108182,95369,638,95476);if(!(c[46234]|0))c[46234]=Cw(20088,c[4563]|0)|0;b=yC(a)|0;a:do if(!b){b=uH(64)|0;if(!b)b=0;else{d=b+8|0;c[d>>2]=Oz(0,a)|0;if(!((zC(b)|0)<<24>>24)){EC(b);b=0;break}if(!(c[b+20>>2]|0))qa(95470,95369,653,95476);do switch(FC(b)|0){case 0:{a=VJ(c[d>>2]|0)|0;c[b+52>>2]=a;if(!a){c[e>>2]=c[d>>2];Pw(0,95493,e)|0;EC(b);b=0;break a}break}case 2:{GC(b);break}case 3:{HC(b);break}case 1:{IC(b);break}case 4:{JC(b);break}case 6:{KC(b);break}case 11:{LC(b);break}case 8:{MC(b);break}case 5:{NC(b);break}case 12:{OC(b);break}default:{}}while(0);AC(b);e=c[46234]|0;nb[c[e>>2]&63](e,b,1)|0}}else AC(b);while(0);l=f;return b|0}function EC(a){a=a|0;var b=0;b=c[a+8>>2]|0;if(b|0)Qz(0,b)|0;D_(a);return}function FC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+224|0;f=j+200|0;g=j;h=a+20|0;b=c[h>>2]|0;a:do if((b|0)!=0?(g3(f,1,20,b)|0)==20:0){d=0;while(1){if(d>>>0>=10){i=13;break a}if(!(L0(f,c[20124+(d<<4)>>2]|0,c[20124+(d<<4)+4>>2]|0)|0))break;d=d+1|0}e=a+28|0;c[e>>2]=c[20124+(d<<4)+12>>2];b=c[20124+(d<<4)+8>>2]|0;a=a+24|0;c[a>>2]=b;switch(d|0){case 7:break;case 8:{if(L0(f+8|0,95709,4)|0)break a;c[e>>2]=95714;c[a>>2]=11;b=11;break a}default:break a}while(1){if(!(O0(g,200,c[h>>2]|0)|0)){i=11;break}if(!(L0(g,95704,4)|0)){i=8;break}}if((i|0)==8){c[e>>2]=98777;c[a>>2]=8;b=8;break}else if((i|0)==11){b=c[a>>2]|0;break}}else i=13;while(0);if((i|0)==13){c[a+28>>2]=95719;c[a+24>>2]=0;b=0}l=j;return b|0}function GC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,6,0)|0;if((XC(c[e>>2]|0,2,b)|0)<<24>>24?(XC(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function HC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,16,0)|0;if((PC(c[e>>2]|0,4,b)|0)<<24>>24?(PC(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function IC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;b=h+12|0;d=h+8|0;e=h+4|0;f=h;c[a+48>>2]=0;g=a+20|0;Z1(c[g>>2]|0,16,0)|0;if((((XC(c[g>>2]|0,2,b)|0)<<24>>24?(XC(c[g>>2]|0,2,d)|0)<<24>>24:0)?(XC(c[g>>2]|0,2,e)|0)<<24>>24:0)?(XC(c[g>>2]|0,2,f)|0)<<24>>24:0){c[a+40>>2]=c[b>>2]<<16|c[d>>2];c[a+44>>2]=c[e>>2]<<16|c[f>>2]}l=h;return}function JC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;b=m+16|0;e=m+12|0;f=m+8|0;h=m+4|0;i=m;c[a+48>>2]=0;j=a+20|0;while(1){if(!((PC(c[j>>2]|0,1,b)|0)<<24>>24))break;d=c[b>>2]|0;if((d|0)==255)continue;if(A$(95692,d)|0)continue;if((d|0)==192){k=6;break}g=c[j>>2]|0;if((d|0)==194){k=11;break}if(!((PC(g,2,e)|0)<<24>>24))break;Z1(c[j>>2]|0,(c[e>>2]|0)+-2|0,1)|0}if((k|0)==6){if(((PC(c[j>>2]|0,3,i)|0)<<24>>24?(PC(c[j>>2]|0,2,f)|0)<<24>>24:0)?(PC(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}}else if((((k|0)==11?(PC(g,3,i)|0)<<24>>24:0)?(PC(c[j>>2]|0,2,f)|0)<<24>>24:0)?(PC(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}l=m;return}function KC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1056|0;j=m;b=m+32|0;e=m+28|0;f=m+24|0;g=m+20|0;h=m+16|0;c[a+48>>2]=72;i=a+20|0;Z1(c[i>>2]|0,0,0)|0;while(1){if(!(O0(b,1024,c[i>>2]|0)|0))break;d=P0(b,95677)|0;if(!d)continue;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=g;c[j+12>>2]=h;if((N1(d,101285,j)|0)==4){k=5;break}}if((k|0)==5){j=c[e>>2]|0;c[a+32>>2]=j;k=c[f>>2]|0;c[a+36>>2]=k;c[a+40>>2]=(c[g>>2]|0)-j;c[a+44>>2]=(c[h>>2]|0)-k}l=m;return}function LC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;b=g+4|0;d=g;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,15,0)|0;h=(m3(c[e>>2]|0)|0)==88;f=c[e>>2]|0;if(h){Z1(f,24,0)|0;if((XC(c[e>>2]|0,4,b)|0)<<24>>24?(XC(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}else{Z1(f,26,0)|0;if((XC(c[e>>2]|0,2,b)|0)<<24>>24?(XC(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}l=g;return}function MC(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=l;l=l+352|0;C=F+80|0;B=F+72|0;E=F+64|0;D=F+56|0;A=F+48|0;d=F+40|0;s=F+32|0;t=F+24|0;u=F+16|0;v=F+8|0;w=F;x=F+328|0;y=F+128|0;z=F+96|0;if(!(c[46237]|0)){if(o2(184952,95562,1)|0){c[d>>2]=95562;Pw(1,95589,d)|0}c[46237]=184952}m=b+20|0;Z1(c[m>>2]|0,0,0)|0;n=z+12|0;o=z+20|0;p=z+8|0;q=z+16|0;r=z+4|0;d=0;g=0;f=0;e=0;a:while(1){if(!(O0(y,200,c[m>>2]|0)|0))break;if(g<<24>>24==0|d<<24>>24==0){i=y;k=e}else break;b:while(1){j=f;c:while(1){while(1){if(a3(184952,i,4,z,0)|0){f=j;e=k;continue a}a[i+(c[n>>2]|0)>>0]=0;a[i+(c[o>>2]|0)>>0]=0;e=i+(c[p>>2]|0)|0;f=i+(c[q>>2]|0)|0;i=i+((c[r>>2]|0)+1)|0;if(!(b$(e,138034)|0))break;if(!(b$(e,137966)|0))break c;if(b$(e,95636)|0)continue;c[C>>2]=t;c[C+4>>2]=u;c[C+8>>2]=v;c[C+12>>2]=w;if((N1(f,95644,C)|0)==4)break b}c[A>>2]=s;c[A+4>>2]=x;if((N1(f,95626,A)|0)!=2){c[D>>2]=s;if((N1(f,98183,D)|0)==1){e=1;f=WC(+h[s>>3],95633)|0}else{e=g;f=j}}else{e=1;f=WC(+h[s>>3],x)|0}if(!(d<<24>>24)){d=0;g=e;j=f}else{g=e;e=k;continue a}}c[E>>2]=s;c[E+4>>2]=x;if((N1(f,95626,E)|0)!=2){c[B>>2]=s;if((N1(f,98183,B)|0)==1){d=1;e=WC(+h[s>>3],95633)|0}else e=k}else{d=1;e=WC(+h[s>>3],x)|0}if(!(g<<24>>24)){g=0;f=j;k=e}else{f=j;continue a}}d=1;g=1;f=~~(+h[v>>3]+1.0-+h[t>>3])>>>0;e=~~(+h[w>>3]+1.0-+h[u>>3])>>>0}c[b+48>>2]=0;c[b+40>>2]=f;c[b+44>>2]=e;l=F;return}function NC(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0;d=l;l=l+32|0;b=d;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,0,0)|0;if(!(QC(c[e>>2]|0,b)|0)){g=+h[b>>3];c[a+32>>2]=~~g;f=+h[b+8>>3];c[a+36>>2]=~~f;c[a+40>>2]=~~(+h[b+16>>3]-g);c[a+44>>2]=~~(+h[b+24>>3]-f)}l=d;return}function OC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,6,0)|0;if((PC(c[e>>2]|0,1,b)|0)<<24>>24?(PC(c[e>>2]|0,1,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function PC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=m3(a)|0;if(r1(a)|0){e=0;break}c[d>>2]=c[d>>2]<<8|f;e=e+1|0}return e|0}function QC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;d=h;e=h+16|0;while(1){if(!(O0(e,1024,a)|0)){a=1;break}f=P0(e,95552)|0;if(f|0){g=4;break}}if((g|0)==4){c[d+4>>2]=e;c[d>>2]=f+9;c[d+8>>2]=a;a=RC(d,b)|0}l=h;return a|0}function RC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+1024|0;f=g;SC(b);e=a[c[b>>2]>>0]|0;if(!(e<<24>>24))e=(TC(b)|0)&255;else e=e<<24>>24;if((((e|0)==91?(c[b>>2]=(c[b>>2]|0)+1,UC(b,f),(VC(f,d)|0)==0):0)?(UC(b,f),(VC(f,d+8|0)|0)==0):0)?(UC(b,f),(VC(f,d+16|0)|0)==0):0){UC(b,f);e=(VC(f,d+24|0)|0)!=0&1}else e=1;l=g;return e|0}function SC(b){b=b|0;var d=0;d=c[b>>2]|0;while(1){d=a[d>>0]|0;if(!(d<<24>>24))d=(TC(b)|0)&255;else d=d<<24>>24;if(!((d&255)<<24>>24))break;if(!(B$(d&255)|0))break;d=(c[b>>2]|0)+1|0;c[b>>2]=d}return}function TC(b){b=b|0;var d=0;d=b+4|0;if(!(O0(c[d>>2]|0,1024,c[b+8>>2]|0)|0))b=0;else{d=c[d>>2]|0;c[b>>2]=d;b=a[d>>0]|0}return b|0}function UC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;SC(b);e=0;f=c[b>>2]|0;while(1){f=a[f>>0]|0;if(!(f<<24>>24))g=(TC(b)|0)&255;else g=f<<24>>24;f=g<<24>>24;if(!f)break;if(!((f|0)==46|(f+-48|0)>>>0<10))break;a[d+e>>0]=g;e=e+1|0;f=(c[b>>2]|0)+1|0;c[b>>2]=f;if((e|0)==1023){e=1023;break}}a[d+e>>0]=0;return}function VC(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=l;l=l+16|0;f=e;d=+c2(a,f);if((c[f>>2]|0)==(a|0))a=1;else{h[b>>3]=d;a=0}l=e;return a|0}function WC(a,b){a=+a;b=b|0;var c=0.0;do if(!(b$(b,95660)|0)){a=a*72.0;c=a;a=a>=0.0?.5:-.5}else{if(!(b$(b,95663)|0)){a=a*.75;c=a;a=a>=0.0?.5:-.5;break}if(!(b$(b,95666)|0)){a=a*12.0;c=a;a=a>=0.0?.5:-.5;break}if(b$(b,95633)|0?b$(b,95669)|0:0)if(!(b$(b,95671)|0)){a=a*28.346456664;c=a;a=a>=0.0?.5:-.5;break}else{b=(b$(b,95674)|0)==0;c=a*2.8346456663999997;return (b?~~(c+(c>=0.0?.5:-.5)):0)|0}c=a>=0.0?.5:-.5}while(0);return ~~(a+c)|0}function XC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=m3(a)|0;if(r1(a)|0){e=0;break}c[d>>2]=c[d>>2]|f<<(e<<3);e=e+1|0}return e|0}function YC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[b+20>>2]|0;if(a|0)s1(a)|0;if(c[b+52>>2]|0?(e=c[b+60>>2]|0,e|0):0)tb[e&127](b);D_(b);return}function ZC(){var a=0;nx(0,1,105198,102467)|0;a=kC(0,1)|0;LP(a,0);return a|0}function _C(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0;k=l;l=l+304|0;j=k+24|0;i=k+8|0;f=k;g=k+40|0;if((UB(b,e)|0)!=999)if((VB(b,d)|0)==-1)b=-1;else{b=c[d+16>>2]|0;e=b+16|0;if(!(a[(c[b+8>>2]|0)+81>>0]|0)){p=+h[e>>3];o=+h[b+24>>3];n=+h[b+32>>3];m=+h[b+40>>3];c[j>>2]=~~(p+(p>=0.0?.5:-.5));c[j+4>>2]=~~(o+(o>=0.0?.5:-.5));c[j+8>>2]=~~(n+(n>=0.0?.5:-.5));c[j+12>>2]=~~(m+(m>=0.0?.5:-.5));Y0(g,95873,j)|0}else{m=+h[b+24>>3];n=+h[e>>3];o=+h[b+40>>3];p=+h[b+32>>3];c[i>>2]=~~(m+(m>=0.0?.5:-.5));c[i+4>>2]=~~(n+(n>=0.0?.5:-.5));c[i+8>>2]=~~(o+(o>=0.0?.5:-.5));c[i+12>>2]=~~(p+(p>=0.0?.5:-.5));Y0(g,95873,i)|0}Ax(d,99645,g,191979)|0;b=0}else{b=xC(b,1,e)|0;c[f>>2]=e;c[f+4>>2]=b;Pw(1,95824,f)|0;b=-1}l=k;return b|0}function $C(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;oC(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=uO(b,c[b+52>>2]|0)|0;if((Az(f,134401,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){Sw(95885,g);b=-1}else h=5;if((h|0)==5){c[b+36>>2]=e;if(!e){h=b+152|0;c[h>>2]=c[h>>2]|134217728}h=DG(a,f)|0;wO(b);tC(a);b=h}l=i;return b|0}function aD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;oC(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=uO(b,c[b+52>>2]|0)|0;if((Az(f,134401,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){Sw(95885,g);b=-1}else h=5;if((h|0)==5){nC(a,e);h=DG(a,f)|0;wO(b);dC(b);tC(a);b=h}l=i;return b|0}function bD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m+8|0;g=m;b=c[b+60>>2]|0;oC(a,d)|0;j=c[a+164>>2]|0;c[j+56>>2]=uO(j,c[j+52>>2]|0)|0;if((Az(b,134401,0,1)|0)!=0?(c[(c[b+16>>2]|0)+8>>2]|0)!=0:0)k=5;else if(!(c[j+152>>2]&67108864)){Sw(95885,g);b=-1}else k=5;do if((k|0)==5){if(e|0?(i=C_(4096)|0,c[e>>2]=i,i|0):0){g=j+40|0;c[g>>2]=i;c[j+44>>2]=4096;d=j+48|0;c[d>>2]=0;b=DG(a,b)|0;wO(j);if(!b){c[e>>2]=c[g>>2];c[f>>2]=c[d>>2]}tC(a);break}Pw(1,95906,h)|0;b=-1}while(0);l=m;return b|0}function cD(a,b){a=a|0;b=b|0;JP(a,0,b);return}function dD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+4288|0;E=H+8|0;D=H;F=4;G=C_(40)|0;c[G>>2]=0;A=H+4152|0;B=H+4148|0;C=H+4128|0;j=H+4112|0;k=H+16|0;o=0;i=$(24,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;a:do if((h|0)!=1){if(!i){c[d>>2]=0;g=0;break}o=0;n=ca(26,e|0,B|0,A|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;m=$(23,40)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;na(7,C|0,j|0,k|0,24,83);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){j=C+16|0;i=c[j>>2]|0;g=e;while(1){if(!g)break;o=0;aa(i|0,g|0,0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){y=0;x=j;w=m;v=n;g=z;m=15;break a}o=0;g=aa(84,b|0,g|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){y=0;x=j;w=m;v=n;g=z;m=15;break a}}G=D3(184984,1,G|0,F|0)|0;F=z;o=0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){y=m;x=j;w=m;v=n;g=z;m=15}else{y=m;x=j;w=m;v=n;g=0;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=0;v=n;g=z;m=15}}else{y=0;x=0;w=0;v=0;g=z;m=15}while(0);do if((m|0)==15){b:while(1){c:do if(!g){o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}u=v+(c[B>>2]|0)|0;k=0;m=0;j=0;while(1){if(!e)break;o=0;g=aa(c[x>>2]|0,e|0,-1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){i=E3(c[h>>2]|0,G|0,F|0)|0;if(!i)bb(h|0,p|0);z=p}else i=-1;if((i|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if((g|0)==0?(a[(c[e+16>>2]|0)+119>>0]|0)==3:0){if(!m){o=0;c[D>>2]=j;ca(27,u|0,134313,D|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;i=ca(28,b|0,v|0,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(53,i|0,134401,280,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}c[y+(j<<2)>>2]=i;k=1;j=j+1|0}else i=m;o=0;da(54,b|0,e|0,i|0,C|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}}else i=m;o=0;e=aa(84,b|0,e|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}m=i}o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}i=10;n=y;q=w;r=w;t=w;while(1){if(!e){m=0;i=r;e=t;break c}o=0;g=aa(c[x>>2]|0,e|0,-1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){m=E3(c[h>>2]|0,G|0,F|0)|0;if(!m)bb(h|0,p|0);z=p}else m=-1;if((m|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if(!g){o=0;c[E>>2]=j;ca(27,u|0,134313,E|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;s=ca(28,b|0,v|0,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(53,s|0,134401,280,1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){g=E3(c[h>>2]|0,G|0,F|0)|0;if(!g)bb(h|0,p|0);z=p}else g=-1;if((g|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(54,b|0,e|0,s|0,C|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if((j|0)==(i|0)){i=j<<1;o=0;m=aa(85,q|0,j<<3|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}g=m;q=m;r=m;h=m}else{g=n;h=t}c[g+(j<<2)>>2]=s;n=g;j=j+1|0;m=h}else m=t;o=0;e=aa(84,b|0,e|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}t=m}}else{m=1;k=0;n=y;j=0;i=w;e=w}while(0);o=0;ia(105,C|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}if((v|0)!=(A|0)){o=0;ia(103,v|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}}if(!m){o=0;g=aa(85,e|0,j<<2|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}else{m=58;break}}c[d>>2]=0;g=0;while(1){if((g|0)>=(j|0))break;o=0;$(26,c[n+(g<<2)>>2]|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}g=g+1|0}o=0;ia(103,i|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15}else{m=56;break}}if((m|0)==56){g=0;break}else if((m|0)==58){c[d>>2]=j;a[f>>0]=k;break}}while(0);D_(G|0);l=H;return g|0}function eD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((a|0)!=0?(nD(a)|0)!=0:0))a=95962;e=W_(a)|0;if((e|0)>=104){d=vH(e+25|0)|0;if(!d)d=0;else f=6}else f=6;if((f|0)==6){b0(d,a)|0;c[b>>2]=e}return d|0}function fD(a,b){a=a|0;b=b|0;Xy(b,a,1)|0;return}function gD(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+157|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function hD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[b>>2]=d;c[b+4>>2]=d+4096;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;c[a+12>>2]=e;c[a+16>>2]=f;return}function iD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;lD(e,b);i=e+12|0;j=e+16|0;b=0;a:while(1){k=mD(e)|0;if(!k)break;b=b+1|0;f=c[i>>2]|0;if(f|0)ub[f&63](k,d);h=Jx(a,k)|0;while(1){if(!h)continue a;g=c[h>>2]&3;f=c[((g|0)==3?h:h+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?h:h+-48|0)+40>>2]|0;if(!(lb[c[j>>2]&127](f,-1)|0))lD(e,f);h=Kx(a,h,k)|0}}return b|0}function jD(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;kD(a);a=b}return}function kD(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function lD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;f=k;g=a+8|0;i=a+4|0;d=c[i>>2]|0;if((c[g>>2]|0)==(c[d+4>>2]|0)){d=c[d+12>>2]|0;do if(!d){e=vH(16)|0;if(!e){Pw(1,95943,f)|0;bb(184984,1)}c[e+8>>2]=c[i>>2];c[e+12>>2]=0;d=vH(4e6)|0;c[e>>2]=d;if(!d){Pw(1,95943,j)|0;bb(184984,1)}else{c[e+4>>2]=d+4e6;c[(c[i>>2]|0)+12>>2]=e;h=e;break}}else h=d;while(0);c[i>>2]=h;c[g>>2]=c[h>>2]}lb[c[a+16>>2]&127](b,1)|0;j=c[g>>2]|0;c[g>>2]=j+4;c[j>>2]=b;l=k;return}function mD(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function nD(b){b=b|0;var c=0;a:while(1){c=b;b=b+1|0;c=a[c>>0]|0;switch(c<<24>>24){case 95:continue a;case 0:{b=1;break a}default:{}}if(!(M$(c&255)|0)){b=0;break}}return b|0}function oD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0;B=l;l=l+4272|0;x=B;y=4;A=C_(40)|0;c[A>>2]=0;u=B+4144|0;v=B+4140|0;w=B+4120|0;h=B+4104|0;i=B+8|0;o=0;f=$(24,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){e=E3(c[g>>2]|0,A|0,y|0)|0;if(!e)bb(g|0,p|0);z=p}else e=-1;a:do if((e|0)!=1)if(f){o=0;k=ca(26,d|0,v|0,u|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;j=$(23,40)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;na(7,w|0,h|0,i|0,24,83);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;f=$(25,a|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){h=w+16|0;g=c[h>>2]|0;e=f;while(1){if(!e)break;o=0;aa(g|0,e|0,0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){f=E3(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){t=h;s=j;r=k;e=z;j=14;break a}o=0;e=aa(84,a|0,e|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){f=E3(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){t=h;s=j;r=k;e=z;j=14;break a}}A=D3(184984,1,A|0,y|0)|0;y=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){t=h;s=j;r=k;e=z;j=14}else{t=h;s=j;r=k;e=0;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=0;r=k;e=z;j=14}}else{d=0;e=0}else{t=0;s=0;r=0;e=z;j=14}while(0);b:do if((j|0)==14){c:while(1){if(e|0){o=0;ia(105,w|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}o=0;ia(103,s|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}if((r|0)==(u|0)){d=0;e=0;break b}o=0;ia(103,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}else{j=19;break}}o=0;f=$(25,a|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}q=r+(c[v>>2]|0)|0;h=10;k=s;e=0;j=s;n=s;while(1){if(!f)break;o=0;d=aa(c[t>>2]|0,f|0,-1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,A|0,y|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}if(!d){o=0;c[x>>2]=e;ca(27,q|0,134313,x|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;m=ca(28,a|0,r|0,1)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;da(53,m|0,134401,280,1)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;da(54,a|0,f|0,m|0,w|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}if((e|0)==(h|0)){h=e<<1;o=0;i=aa(85,j|0,e<<3|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}g=i;j=i;d=i}else{g=k;d=n}c[g+(e<<2)>>2]=m;e=e+1|0;k=g;i=d}else i=n;o=0;f=aa(84,a|0,f|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}n=i}o=0;ia(105,w|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){f=E3(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}o=0;d=aa(85,n|0,e<<2|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,A|0,y|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}if((r|0)==(u|0))break b;o=0;ia(103,r|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,A|0,y|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14}else{j=39;break}}if((j|0)==19){d=0;e=0;break}else if((j|0)==39)break}while(0);c[b>>2]=e;D_(A|0);l=B;return d|0}function pD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=0;f=Sy(a)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;if(Xy(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,0)|0){Vx(a,e,1)|0;d=d+1|0}e=Gx(b,e)|0}f=Ty(a,f)|0}return d|0}function qD(a){a=a|0;a=yz(a,95967,0)|0;if(!a)qa(95972,95975,529,95984);else return c[a+8>>2]|0;return 0}function rD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=l;l=l+4320|0;s=u+24|0;r=u+8|0;q=u;t=u+4184|0;p=u+4160|0;f=u+40|0;if(ay(b)|0){Fz(b,0,95993,-12,0);Fz(b,1,96005,16,0);o=eD(e,f,t)|0;k=sD(b)|0;m=vH((ay(k)|0)<<2)|0;hD(p,u+4144|0,u+48|0,24,86);h=Sy(k)|0;n=p+16|0;i=o+(c[f>>2]|0)|0;j=c[15686]|0;e=0;while(1){if(!h)break;if(!(lb[c[n>>2]&127](h,-1)|0)){c[q>>2]=e;Y0(i,96907,q)|0;v=vA(k,o,1)|0;w=vA(b,o,1)|0;Az(w,95993,12,0)|0;a[(yz(w,95993,0)|0)+8>>0]=1;f=iD(k,h,v,p)|0;uD(v,w);g=vD(w)|0;wD(b,w);c[m+(e<<2)>>2]=w;dz(k,v)|0;if(0){c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=g;g1(j,96017,r)|0}e=e+1|0}h=Ty(k,h)|0}if(0){r=ay(b)|0;v=by(b)|0;w=ry(b)|0;c[s>>2]=r;c[s+4>>2]=v;c[s+8>>2]=e;c[s+12>>2]=w;g1(j,96047,s)|0}$x(k)|0;Gz(b,0,95993);Gz(b,1,96005);jD(p);f=xH(m,e<<2)|0;if((o|0)!=(t|0))D_(o)}else{f=0;e=0}c[d>>2]=e;l=u;return f|0}function sD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a[h>>0]=a[18492]|0;a[h+1>>0]=a[18493]|0;a[h+2>>0]=a[18494]|0;a[h+3>>0]=a[18495]|0;h=Xx(96094,h,0)|0;zD(h,b);d=Sy(b)|0;while(1){if(!d)break;if(!(c[(yz(d,96005,0)|0)+12>>2]|0)){g=az(h,ry(d)|0,1)|0;Az(g,96005,16,1)|0;c[(c[g+16>>2]|0)+12>>2]=d;c[(yz(d,96005,0)|0)+12>>2]=g}d=Ty(b,d)|0}e=Sy(b)|0;while(1){if(!e)break;f=c[(yz(e,96005,0)|0)+12>>2]|0;d=Ex(b,e)|0;while(1){if(!d)break;g=c[(yz(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,96005,0)|0)+12>>2]|0;do if((g|0)!=(f|0))if(g>>>0>f>>>0){Rx(h,f,g,0,1)|0;break}else{Rx(h,g,f,0,1)|0;break}while(0);d=Gx(b,d)|0}e=Ty(b,e)|0}l=i;return h|0}function tD(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+8|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function uD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Sy(a)|0;while(1){if(!e)break;f=c[(c[e+16>>2]|0)+12>>2]|0;a:do if((c[f>>2]&3|0)==1)Xy(b,f,1)|0;else{d=Sy(f)|0;while(1){if(!d)break a;Xy(b,d,1)|0;d=Ty(f,d)|0}}while(0);e=Ty(a,e)|0}return}function vD(a){a=a|0;return pD(a,c[a+60>>2]|0)|0}function wD(a,b){a=a|0;b=b|0;xD(a,b,0);return}function xD(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(d|0)==0;b=wA(b)|0;while(1){if(!b)break;if((a[(yz(b,95993,0)|0)+8>>0]|0)==0?(f=yD(b,c,d)|0,f|0):0){if(g)e=(z$(ry(b)|0,104980,7)|0)==0;else e=1;xD(b,f,e&1)}b=xA(b)|0}return}function yD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=0;g=Sy(a)|0;while(1){if(!g)break;f=az(b,ry(g)|0,0)|0;if(f){if(!e)e=vA(b,ry(a)|0,1)|0;Xy(e,f,1)|0}g=Ty(a,g)|0}if((d|0)!=0&(e|0)==0)e=vA(b,ry(a)|0,1)|0;if(e|0?(pD(e,a)|0,Bx(a,e)|0,(z$(ry(e)|0,104980,7)|0)==0):0)c[(Az(e,95967,12,0)|0)+8>>2]=a;return e|0}function zD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;d=wA(b)|0;e=c[15686]|0;while(1){if(!d)break;a:do if(!(z$(ry(d)|0,104980,7)|0)){f=az(a,ry(d)|0,1)|0;Az(f,96005,16,1)|0;c[(c[f+16>>2]|0)+12>>2]=d;b=Sy(d)|0;while(1){if(!b)break a;if(c[(yz(b,96005,0)|0)+12>>2]|0){k=ry(b)|0;j=ry(d)|0;i=ry(c[(yz(b,96005,0)|0)+12>>2]|0)|0;c[g>>2]=k;c[g+4>>2]=j;c[g+8>>2]=i;g1(e,96097,g)|0}c[(yz(b,96005,0)|0)+12>>2]=f;b=Ty(d,b)|0}}else zD(a,d);while(0);d=xA(d)|0}l=h;return}function AD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0;n=+h[a>>3];j=~~(n+(n>=0.0?.5:-.5));n=+h[a+8>>3];a=~~(n+(n>=0.0?.5:-.5));n=+h[b>>3];g=~~(n+(n>=0.0?.5:-.5));n=+h[b+8>>3];f=~~(n+(n>=0.0?.5:-.5));l=g-j|0;i=((l|0)>-1?l:0-l|0)<<1;l=l>>31|1;m=f-a|0;k=((m|0)>-1?m:0-m|0)<<1;m=m>>31|1;a:do if((i|0)>(k|0)){e=0-i|0;d=k-(i>>1)|0;b=j;while(1){BI(c,b,a);if((b|0)==(g|0))break a;j=(d|0)>-1;d=d+k+(j?e:0)|0;b=b+l|0;a=(j?m:0)+a|0}}else{e=0-k|0;d=j;b=i-(k>>1)|0;while(1){BI(c,d,a);if((a|0)==(f|0))break a;k=(b|0)>-1;d=(k?l:0)+d|0;b=b+i+(k?e:0)|0;a=a+m|0}}while(0);return}function BD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;j=n+4|0;do if((a|0)<1)d=0;else{f=e+16|0;if((c[f>>2]|0)>>>0<4){d=CD(a,b,d,e)|0;break}m=vH(a<<5)|0;d=0;while(1){if((d|0)==(a|0))break;g=c[b+(d<<2)>>2]|0;mM(g);h=m+(d<<5)|0;g=(c[g+16>>2]|0)+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];c[h+24>>2]=c[g+24>>2];c[h+28>>2]=c[g+28>>2];d=d+1|0}if((c[f>>2]|0)==4){h=e+28|0;a:do if(c[h>>2]&2|0){f=e+24|0;c[f>>2]=uH(a<<2)|0;d=0;while(1){if((d|0)==(a|0))break a;g=xx(c[b+(d<<2)>>2]|0,96164)|0;if(g|0?(c[k>>2]=j,g=(N1(g,134313,k)|0)>0,i=c[j>>2]|0,g&(i|0)>-1):0)c[(c[f>>2]|0)+(d<<2)>>2]=i;d=d+1|0}}while(0);d=DD(a,m,e)|0;if(c[h>>2]&2)D_(c[e+24>>2]|0)}else d=0;D_(m)}while(0);l=n;return d|0}function CD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0;G=l;l=l+144|0;B=G+136|0;A=G+64|0;F=G+48|0;v=G+40|0;u=G;t=G+120|0;x=G+104|0;C=G+96|0;D=c[f+20>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;a:do if((b|0)>=1){o=(D|0)==0;E=c[15686]|0;p=t+4|0;q=t+8|0;r=t+12|0;y=x+4|0;w=x+8|0;z=x+12|0;n=0;g=0;while(1){if((n|0)==(b|0))break;s=c[d+(n<<2)>>2]|0;mM(s);if(!o?(a[D+n>>0]|0)!=0:0){m=c[s+16>>2]|0;H=+h[m+16>>3];i=~~(H+(H>=0.0?.5:-.5));c[t>>2]=i;H=+h[m+24>>3];j=~~(H+(H>=0.0?.5:-.5));c[p>>2]=j;H=+h[m+32>>3];k=~~(H+(H>=0.0?.5:-.5));c[q>>2]=k;H=+h[m+40>>3];m=~~(H+(H>=0.0?.5:-.5));c[r>>2]=m;if(!g){c[x>>2]=c[t>>2];c[x+4>>2]=c[t+4>>2];c[x+8>>2]=c[t+8>>2];c[x+12>>2]=c[t+12>>2]}else{c[x>>2]=c[((c[x>>2]|0)>(i|0)?t:x)>>2];c[y>>2]=c[((c[y>>2]|0)>(j|0)?t:x)+4>>2];c[w>>2]=c[((c[w>>2]|0)<(k|0)?t:x)+8>>2];c[z>>2]=c[((c[z>>2]|0)<(m|0)?t:x)+12>>2]}g=g+1|0}if(0>2){m=ry(s)|0;s=c[s+16>>2]|0;K=+h[s+16>>3];J=+h[s+24>>3];I=+h[s+32>>3];H=+h[s+40>>3];c[u>>2]=m;h[u+8>>3]=K;h[u+16>>3]=J;h[u+24>>3]=I;h[u+32>>3]=H;g1(E,96231,u)|0}n=n+1|0}q=vH(b<<5)|0;g=0;while(1){if((g|0)==(b|0))break;u=q+(g<<5)|0;t=(c[(c[d+(g<<2)>>2]|0)+16>>2]|0)+16|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];g=g+1|0}o=f+8|0;p=GD(b,q,c[o>>2]|0)|0;if(0){c[v>>2]=p;g1(E,96259,v)|0}if((p|0)>=1){n=(D|0)!=0;if(n){i=((c[w>>2]|0)+(c[x>>2]|0)|0)/2|0;g=((c[z>>2]|0)+(c[y>>2]|0)|0)/2|0}else{i=0;g=0}c[C+4>>2]=g;c[C>>2]=i;m=uH(b<<4)|0;k=f+16|0;g=0;while(1){if((g|0)>=(b|0))break;i=c[d+(g<<2)>>2]|0;j=m+(g<<4)|0;c[m+(g<<4)+12>>2]=g;if((c[k>>2]|0)==3){x=(c[i+16>>2]|0)+16|0;y=c[o>>2]|0;z=ry(i)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];c[A+16>>2]=c[x+16>>2];c[A+20>>2]=c[x+20>>2];c[A+24>>2]=c[x+24>>2];c[A+28>>2]=c[x+28>>2];c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];HD(A,j,p,y,B,z)}else{c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];ID(e,i,j,p,f,B)}g=g+1|0}j=uH(b<<2)|0;g=0;while(1){if((g|0)>=(b|0))break;c[j+(g<<2)>>2]=m+(g<<4);g=g+1|0}_0(j,b,4,87);k=vI()|0;g=uH(b<<3)|0;b:do if(n){i=0;while(1){if((i|0)>=(b|0)){i=0;break}if(a[D+i>>0]|0){e=c[j+(i<<2)>>2]|0;f=g+(c[e+12>>2]<<3)|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];KD(e,k,f,B)}i=i+1|0}while(1){if((i|0)>=(b|0))break b;if(!(a[D+i>>0]|0)){C=c[j+(i<<2)>>2]|0;LD(i,C,k,g+(c[C+12>>2]<<3)|0,p,c[o>>2]|0,q)}i=i+1|0}}else{i=0;while(1){if((i|0)>=(b|0))break b;D=c[j+(i<<2)>>2]|0;LD(i,D,k,g+(c[D+12>>2]<<3)|0,p,c[o>>2]|0,q);i=i+1|0}}while(0);D_(j);i=0;while(1){if((i|0)>=(b|0))break;D_(c[m+(i<<4)+4>>2]|0);i=i+1|0}D_(m);yI(k);D_(q);if(0>1){i=0;while(1){if((i|0)>=(b|0))break a;C=c[g+(i<<3)>>2]|0;D=c[g+(i<<3)+4>>2]|0;c[F>>2]=i;c[F+4>>2]=C;c[F+8>>2]=D;g1(E,96275,F)|0;i=i+1|0}}}else g=0}else g=0;while(0);l=G;return g|0}function DD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+16|0;g=z;x=uH(a<<3)|0;f=c[d+4>>2]|0;y=d+28|0;e=(f|0)>0;do if(!(c[y>>2]&1))if(e){k=1;w=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=1;w=(a+-1+f|0)/(f|0)|0;break}else if(e){k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}while(0);if(0){v=c[15686]|0;c[g>>2]=k|0?96170:96180;c[g+4>>2]=w;c[g+8>>2]=f;g1(v,96193,g)|0}t=uH((f<<3)+8|0)|0;u=uH((w<<3)+8|0)|0;v=uH(a*24|0)|0;j=d+8|0;e=0;g=v;while(1){if((e|0)>=(a|0))break;p=+h[b+(e<<5)+8>>3];o=+h[b+(e<<5)+24>>3];q=+((c[j>>2]|0)>>>0);h[g>>3]=+h[b+(e<<5)+16>>3]-+h[b+(e<<5)>>3]+q;h[g+8>>3]=o-p+q;c[g+16>>2]=e;e=e+1|0;g=g+24|0}s=uH(a<<2)|0;e=0;while(1){if((e|0)>=(a|0))break;c[s+(e<<2)>>2]=v+(e*24|0);e=e+1|0}e=c[d+24>>2]|0;if(!e){if(!(c[y>>2]&64))_0(s,a,4,89)}else{c[46285]=e;_0(s,a,4,88)}r=(k|0)==0;e=0;g=0;j=0;while(1){if((j|0)>=(a|0)){i=0.0;e=0;break}k=c[s+(j<<2)>>2]|0;d=t+(g<<3)|0;q=+h[d>>3];p=+h[k>>3];h[d>>3]=q>p?q:p;d=u+(e<<3)|0;p=+h[d>>3];q=+h[k+8>>3];h[d>>3]=p>q?p:q;if(r){e=e+1|0;d=(e|0)==(w|0);e=d?0:e;g=g+(d&1)|0}else{g=g+1|0;d=(g|0)==(f|0);e=e+(d&1)|0;g=d?0:g}j=j+1|0}while(1){if((e|0)>(f|0)){i=0.0;e=w;break}d=t+(e<<3)|0;q=+h[d>>3];h[d>>3]=i;i=q+i;e=e+1|0}while(1){if((e|0)<=0)break;d=e+-1|0;q=+h[u+(d<<3)>>3];h[u+(e<<3)>>3]=i;i=q+i;e=d}h[u>>3]=i;e=0;g=0;d=0;while(1){if((d|0)>=(a|0))break;k=c[(c[s+(d<<2)>>2]|0)+16>>2]|0;i=+h[b+(k<<5)>>3];m=-i;p=+h[b+(k<<5)+8>>3];q=-p;n=+h[b+(k<<5)+16>>3];o=+h[b+(k<<5)+24>>3];j=c[y>>2]|0;do if(!(j&4))if(!(j&8)){i=(m-n+ +h[t+(g<<3)>>3]+ +h[t+(g+1<<3)>>3])*.5;break}else{i=i-n+ +h[t+(g+1<<3)>>3];break}else i=+h[t+(g<<3)>>3];while(0);c[x+(k<<3)>>2]=~~i;do if(!(j&16))if(!(j&32)){i=(q-o+ +h[u+(e<<3)>>3]+ +h[u+(e+1<<3)>>3])*.5;break}else{i=+h[u+(e+1<<3)>>3];break}else i=p-o+ +h[u+(e<<3)>>3];while(0);c[x+(k<<3)+4>>2]=~~i;if(r){e=e+1|0;k=(e|0)==(w|0);e=k?0:e;g=g+(k&1)|0}else{g=g+1|0;k=(g|0)==(f|0);e=e+(k&1)|0;g=k?0:g}d=d+1|0}D_(v);D_(s);D_(t);D_(u);l=z;return x|0}function ED(a,b){a=a|0;b=b|0;var d=0;d=c[46285]|0;a=c[d+(c[(c[a>>2]|0)+16>>2]<<2)>>2]|0;b=c[d+(c[(c[b>>2]|0)+16>>2]<<2)>>2]|0;return ((a|0)>(b|0)?1:((a|0)<(b|0))<<31>>31)|0}function FD(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;e=+h[a>>3]+ +h[a+8>>3];d=+h[b>>3]+ +h[b+8>>3];return (ed)<<31>>31)|0}function GD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;s=l;l=l+96|0;q=s+80|0;r=s+48|0;p=s+8|0;m=s;k=(a*100|0)+-1|0;e=+(d<<1|0);n=0.0;o=0.0;d=0;while(1){if((d|0)>=(a|0))break;j=+h[b+(d<<5)+16>>3]-+h[b+(d<<5)>>3]+e;i=+h[b+(d<<5)+24>>3]-+h[b+(d<<5)+8>>3]+e;n=n-j-i;o=o-i*j;d=d+1|0}i=+(k|0);j=n*n-i*4.0*o;if(!(j<0.0)){e=+C(+j);g=i*2.0;f=(e-n)/g;g=(-n-e)/g;d=~~f;d=(d|0)==0?1:d;if(0>2){m=c[15686]|0;E1(96418,27,1,m)|0;h[p>>3]=i;h[p+8>>3]=n;h[p+16>>3]=o;h[p+24>>3]=j;h[p+32>>3]=e;g1(m,96446,p)|0;c[r>>2]=d;h[r+8>>3]=f;c[r+16>>2]=~~g;h[r+24>>3]=g;g1(m,96472,r)|0;h[q>>3]=(f*i+n)*f+o;h[q+8>>3]=(g*i+n)*g+o;g1(m,96494,q)|0}}else{h[m>>3]=j;Pw(1,96391,m)|0;d=-1}l=s;return d|0}function HD(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0;u=l;l=l+32|0;t=u+16|0;s=u;p=+h[a>>3];q=+h[a+8>>3];n=+h[a+16>>3];o=+h[a+24>>3];r=vI()|0;j=c[f>>2]|0;a=j-e|0;k=c[f+4>>2]|0;i=k-e|0;j=e-~~(p+(p>=0.0?.5:-.5))+j+~~(n+(n>=0.0?.5:-.5))|0;k=e-~~(q+(q>=0.0?.5:-.5))+k+~~(o+(o>=0.0?.5:-.5))|0;if((a|0)>-1)f=(a|0)/(d|0)|0;else f=((a+1|0)/(d|0)|0)+-1|0;if((i|0)>-1)m=(i|0)/(d|0)|0;else m=((i+1|0)/(d|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(d|0)|0;else j=((j+1|0)/(d|0)|0)+-1|0;if((k|0)>-1)i=(k|0)/(d|0)|0;else i=((k+1|0)/(d|0)|0)+-1|0;while(1){if((f|0)>(j|0))break;else a=m;while(1){if((a|0)>(i|0))break;BI(r,f,a);a=a+1|0}f=f+1|0}k=b+4|0;c[k>>2]=FI(r)|0;j=EI(r)|0;m=b+8|0;c[m>>2]=j;w=+(e<<1|0);v=+(d|0);i=~~+N(+((n+w-p)/v));a=~~+N(+((o+w-q)/v));c[b>>2]=a+i;a:do if(0>2){f=c[15686]|0;c[s>>2]=g;c[s+4>>2]=j;c[s+8>>2]=i;c[s+12>>2]=a;g1(f,96350,s)|0;a=0;while(1){if((a|0)>=(c[m>>2]|0))break a;g=c[k>>2]|0;s=c[g+(a<<3)+4>>2]|0;c[t>>2]=c[g+(a<<3)>>2];c[t+4>>2]=s;g1(f,96377,t)|0;a=a+1|0}}while(0);yI(r);l=u;return}function ID(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0.0;P=l;l=l+128|0;F=P+112|0;E=P+104|0;O=P+16|0;M=P;H=P+64|0;I=P+56|0;z=P+40|0;A=P+96|0;y=P+88|0;v=P+24|0;w=P+80|0;x=P+72|0;K=c[f+8>>2]|0;G=c[f+12>>2]|0;C=(a|0)==0?b:a;L=vI()|0;J=b+16|0;B=c[J>>2]|0;t=+h[B+16>>3];D=(c[g>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;t=+h[B+24>>3];B=(c[g+4>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;a:do if((c[f+16>>2]|0)==1){v=vH((ay(b)|0)<<2)|0;a=0;g=Sy(b)|0;while(1){if(!g)break;x=g+16|0;c[v+(a<<2)>>2]=c[(c[x>>2]|0)+112>>2];c[(c[x>>2]|0)+112>>2]=0;a=a+1|0;g=Ty(b,g)|0}o=D-K|0;p=B-K|0;q=D+K|0;r=B+K|0;n=1;while(1){a=c[J>>2]|0;if((n|0)>(c[a+180>>2]|0))break;m=c[(c[a+184>>2]|0)+(n<<2)>>2]|0;i=c[m+16>>2]|0;t=+h[i+16>>3];a=~~(t+(t>=0.0?.5:-.5));t=+h[i+24>>3];g=~~(t+(t>=0.0?.5:-.5));t=+h[i+32>>3];f=~~(t+(t>=0.0?.5:-.5));t=+h[i+40>>3];i=~~(t+(t>=0.0?.5:-.5));b:do if((f|0)>(a|0)&(i|0)>(g|0)){a=o+a|0;j=p+g|0;f=q+f|0;k=r+i|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(e|0)|0;else j=((j+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)i=(f|0)/(e|0)|0;else i=((f+1|0)/(e|0)|0)+-1|0;if((k|0)>-1)f=(k|0)/(e|0)|0;else f=((k+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=j;while(1){if((a|0)>(f|0))break;BI(L,g,a);a=a+1|0}g=g+1|0}a=Sy(m)|0;while(1){if(!a)break b;c[(c[a+16>>2]|0)+212>>2]=m;a=Ty(m,a)|0}}while(0);n=n+1|0}r=z+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=A+4|0;p=y+4|0;o=Sy(b)|0;while(1){if(!o)break;WL(z,o);R=+h[z>>3];Q=+h[r>>3];m=D+~~(R+(R>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(Q+(Q>=0.0?.5:-.5))|0;c[s>>2]=n;g=o+16|0;a=c[g>>2]|0;c:do if(!(c[a+212>>2]|0)){c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];ND(A,E,F);a=c[A>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];OD(y,E,F);i=c[y>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;BI(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Ex(C,o)|0;while(1){if(!a)break c;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];PD(a,F,L,D,B,e,G);a=Gx(C,a)|0}}else{if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Ex(C,o)|0;while(1){if(!a)break c;if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)){c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];PD(a,F,L,D,B,e,G)}a=Gx(C,a)|0}}while(0);o=Ty(b,o)|0}a=0;g=Sy(b)|0;while(1){if(!g)break;c[(c[g+16>>2]|0)+112>>2]=c[v+(a<<2)>>2];a=a+1|0;g=Ty(b,g)|0}D_(v)}else{r=v+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=w+4|0;p=x+4|0;o=Sy(b)|0;while(1){if(!o)break a;WL(v,o);Q=+h[v>>3];R=+h[r>>3];m=D+~~(Q+(Q>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(R+(R>=0.0?.5:-.5))|0;c[s>>2]=n;a=c[o+16>>2]|0;c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];ND(w,E,F);a=c[w>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];OD(x,E,F);i=c[x>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;BI(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Ex(C,o)|0;while(1){if(!a)break;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];PD(a,F,L,D,B,e,G);a=Gx(C,a)|0}o=Ty(b,o)|0}}while(0);i=d+4|0;c[i>>2]=FI(L)|0;j=d+8|0;c[j>>2]=EI(L)|0;g=c[J>>2]|0;Q=+(K<<1|0);R=+(e|0);a=~~+N(+((+h[g+32>>3]+Q-+h[g+16>>3])/R));g=~~+N(+((+h[g+40>>3]+Q-+h[g+24>>3])/R));c[d>>2]=g+a;d:do if(0>2){f=c[15686]|0;d=ry(b)|0;b=c[j>>2]|0;c[M>>2]=d;c[M+4>>2]=b;c[M+8>>2]=a;c[M+12>>2]=g;g1(f,96350,M)|0;a=0;while(1){if((a|0)>=(c[j>>2]|0))break d;b=c[i>>2]|0;M=c[b+(a<<3)+4>>2]|0;c[O>>2]=c[b+(a<<3)>>2];c[O+4>>2]=M;g1(f,96377,O)|0;a=a+1|0}}while(0);yI(L);l=P;return}function JD(a,b){a=a|0;b=b|0;return (c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}function KD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;h=j+16|0;i=j;k=c[a+4>>2]|0;g=c[a+8>>2]|0;c[d>>2]=0-(c[e>>2]|0);f=d+4|0;c[f>>2]=0-(c[e+4>>2]|0);a=0;e=k;while(1){if((a|0)>=(g|0))break;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];zI(b,h);a=a+1|0;e=e+8|0}if(0>1){k=c[15686]|0;b=c[d>>2]|0;d=c[f>>2]|0;c[i>>2]=g;c[i+4>>2]=b;c[i+8>>2]=d;g1(k,96324,i)|0}l=j;return}function LD(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;k=c[b+12>>2]|0;l=+h[i+(k<<5)>>3];m=+h[i+(k<<5)+8>>3];n=+h[i+(k<<5)+16>>3];o=+h[i+(k<<5)+24>>3];if(!((a|0)==0?(q=+(g<<1|0),p=+(f|0),(MD((~~+N(+((q-l+n)/p))|0)/-2|0,(~~+N(+((q-m+o)/p))|0)/-2|0,b,d,e,f,i)|0)!=0):0))j=3;a:do if((j|0)==3?(MD(0,0,b,d,e,f,i)|0)==0:0)if((~~+N(+(n-l))|0)<(~~+N(+(o-m))|0)){k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)<=(j|0)){g=j;break}if(MD(j,a,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)>=(k|0))break;if(MD(g,a,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)>=(k|0))break;if(MD(g,a,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)<=(j|0))break;if(MD(g,a,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)<=0)break;if(!(MD(g,a,b,d,e,f,i)|0))a=a+-1|0;else break a}k=k+1|0}}else{k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)>=(k|0)){g=j;break}if(MD(a,j,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)>=(k|0))break;if(MD(a,g,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)<=(j|0))break;if(MD(a,g,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)<=(j|0))break;if(MD(a,g,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)>=0)break;if(!(MD(a,g,b,d,e,f,i)|0))a=a+1|0;else break a}k=k+1|0}}while(0);return}function MD(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;t=l;l=l+48|0;r=t+32|0;s=t+8|0;q=t;m=d+4|0;o=c[d+8>>2]|0;p=q+4|0;j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0)){n=5;break}v=j;u=c[v+4>>2]|0;c[q>>2]=(c[v>>2]|0)+a;c[p>>2]=u+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];if(CI(e,r)|0){j=0;break}j=j+8|0;k=k+1|0}if((n|0)==5){d=c[d+12>>2]|0;x=+h[i+(d<<5)>>3];w=+h[i+(d<<5)+8>>3];c[f>>2]=(O(g,a)|0)-~~(x+(x>=0.0?.5:-.5));d=f+4|0;c[d>>2]=(O(g,b)|0)-~~(w+(w>=0.0?.5:-.5));j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0))break;u=j;v=c[u+4>>2]|0;c[q>>2]=(c[u>>2]|0)+a;c[p>>2]=v+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];zI(e,r);j=j+8|0;k=k+1|0}if(0>1){j=c[15686]|0;u=c[f>>2]|0;v=c[d>>2]|0;c[s>>2]=o;c[s+4>>2]=a;c[s+8>>2]=b;c[s+12>>2]=u;c[s+16>>2]=v;g1(j,96290,s)|0;j=1}else j=1}l=t;return j|0}function ND(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;c[a>>2]=(c[b>>2]|0)-(c[d>>2]|0);c[a+4>>2]=e;return}function OD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function PD(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;x=A+96|0;w=A+80|0;r=A+48|0;s=A+32|0;y=A+16|0;z=A;n=A+64|0;h[y>>3]=+(c[b>>2]|0);t=y+8|0;h[t>>3]=+(c[b+4>>2]|0);a:do if((i|0)!=0?(u=a+16|0,m=c[(c[u>>2]|0)+8>>2]|0,(m|0)!=0):0){q=+(e|0);p=+(f|0);o=1.0/+(g|0);n=z+8|0;i=0;while(1){if((i|0)>=(c[m+4>>2]|0))break a;f=c[m>>2]|0;a=c[f+(i*48|0)>>2]|0;b=c[f+(i*48|0)+4>>2]|0;g=c[f+(i*48|0)+8>>2]|0;e=c[f+(i*48|0)+12>>2]|0;m=f+(i*48|0)+16|0;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[r+8>>2]=c[m+8>>2];c[r+12>>2]=c[m+12>>2];f=f+(i*48|0)+32|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];if(!g){c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];m=a+16|0;c[z>>2]=c[m>>2];c[z+4>>2]=c[m+4>>2];c[z+8>>2]=c[m+8>>2];c[z+12>>2]=c[m+12>>2];m=2}else{c[y>>2]=c[r>>2];c[y+4>>2]=c[r+4>>2];c[y+8>>2]=c[r+8>>2];c[y+12>>2]=c[r+12>>2];c[z>>2]=c[a>>2];c[z+4>>2]=c[a+4>>2];c[z+8>>2]=c[a+8>>2];c[z+12>>2]=c[a+12>>2];m=1}j=+h[y>>3]+q;h[y>>3]=j;k=+h[t>>3]+p;h[t>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[y>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[t>>3]=j;j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d);while(1){if((m|0)>=(b|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];g=a+(m<<4)|0;c[z>>2]=c[g>>2];c[z+4>>2]=c[g+4>>2];c[z+8>>2]=c[g+8>>2];c[z+12>>2]=c[g+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d);m=m+1|0}if(e|0){c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[z>>2]=c[s>>2];c[z+4>>2]=c[s+4>>2];c[z+8>>2]=c[s+8>>2];c[z+12>>2]=c[s+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d)}i=i+1|0;m=c[(c[u>>2]|0)+8>>2]|0}}else v=4;while(0);if((v|0)==4){WL(n,c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0);c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];c[z+8>>2]=c[n+8>>2];c[z+12>>2]=c[n+12>>2];j=+h[z>>3]+ +(e|0);h[z>>3]=j;m=z+8|0;k=+h[m>>3]+ +(f|0);h[m>>3]=k;if(!(j>=0.0))j=(j+1.0)/+(g|0)+-1.0;else j=j/+(g|0);h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)/+(g|0)+-1.0;else j=k/+(g|0);h[m>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d)}l=A;return}function QD(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((a|0)<1)a=0;else switch(c[d+16>>2]|0){case 4:{a=DD(a,b,d)|0;break a}case 3:{a=RD(a,b,d)|0;break a}default:{a=0;break a}}while(0);return a|0}function RD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+80|0;g=n+64|0;f=n+24|0;m=n+8|0;e=n;h=n+56|0;j=d+8|0;k=GD(a,b,c[j>>2]|0)|0;if(0){i=c[15686]|0;c[e>>2]=k;g1(i,96259,e)|0}a:do if((k|0)>=1){c[h+4>>2]=0;c[h>>2]=0;i=uH(a<<4)|0;d=0;while(1){if((d|0)>=(a|0))break;c[i+(d<<4)+12>>2]=d;o=b+(d<<5)|0;e=c[j>>2]|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];c[f+24>>2]=c[o+24>>2];c[f+28>>2]=c[o+28>>2];c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];HD(f,i+(d<<4)|0,k,e,g,191979);d=d+1|0}f=uH(a<<2)|0;d=0;while(1){if((d|0)>=(a|0))break;c[f+(d<<2)>>2]=i+(d<<4);d=d+1|0}_0(f,a,4,87);g=vI()|0;d=uH(a<<3)|0;e=0;while(1){if((e|0)>=(a|0))break;o=c[f+(e<<2)>>2]|0;LD(e,o,g,d+(c[o+12>>2]<<3)|0,k,c[j>>2]|0,b);e=e+1|0}D_(f);e=0;while(1){if((e|0)>=(a|0))break;D_(c[i+(e<<4)+4>>2]|0);e=e+1|0}D_(i);yI(g);if(0>1){f=c[15686]|0;e=0;while(1){if((e|0)>=(a|0))break a;b=c[d+(e<<3)>>2]|0;o=c[d+(e<<3)+4>>2]|0;c[m>>2]=e;c[m+4>>2]=b;c[m+8>>2]=o;g1(f,96275,m)|0;e=e+1|0}}}else d=0;while(0);l=n;return d|0}function SD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;a:do if((a|0)<1)f=0-a|0;else{s=(e|0)==0;q=(f|0)==0;j=0;while(1){if((j|0)==(a|0)){f=0;break a}r=c[b+(j<<2)>>2]|0;g=s?r:e;k=c[d+(j<<3)>>2]|0;l=c[d+(j<<3)+4>>2]|0;m=+(k|0);n=m*.013888888888888888;o=+(l|0);p=o*.013888888888888888;i=Sy(r)|0;while(1){if(!i)break;f=c[i+16>>2]|0;t=c[f+132>>2]|0;h[t>>3]=+h[t>>3]+n;t=t+8|0;h[t>>3]=+h[t>>3]+p;t=f+16|0;h[t>>3]=+h[t>>3]+m;t=f+24|0;h[t>>3]=+h[t>>3]+o;f=c[f+108>>2]|0;if(f|0){t=f+56|0;h[t>>3]=+h[t>>3]+m;t=f+64|0;h[t>>3]=+h[t>>3]+o}b:do if(!q){f=Ex(g,i)|0;while(1){if(!f)break b;TD(f,k,l);f=Gx(g,f)|0}}while(0);i=Ty(r,i)|0}UD(r,k,l);j=j+1|0}}while(0);return f|0}function TD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0;e=c[a+16>>2]|0;a=c[e+96>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+108>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+100>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+104>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}m=c[e+8>>2]|0;a:do if(m|0){l=+(b|0);j=+(d|0);b=c[m+4>>2]|0;a=0;while(1){if((a|0)>=(b|0))break a;k=c[m>>2]|0;d=c[k+(a*48|0)>>2]|0;f=c[k+(a*48|0)+4>>2]|0;g=c[k+(a*48|0)+8>>2]|0;i=c[k+(a*48|0)+12>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;n=d+(e<<4)|0;h[n>>3]=+h[n>>3]+l;n=d+(e<<4)+8|0;h[n>>3]=+h[n>>3]+j;e=e+1|0}if(g|0){n=k+(a*48|0)+16|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+24|0;h[n>>3]=+h[n>>3]+j}if(i|0){n=k+(a*48|0)+32|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+40|0;h[n>>3]=+h[n>>3]+j}a=a+1|0}}while(0);return}function UD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0;j=b+16|0;b=c[j>>2]|0;o=b+16|0;m=b+24|0;f=b+32|0;b=b+40|0;g=+(d|0);l=+h[f>>3]+g;i=+(e|0);n=+h[m>>3]+i;k=+h[b>>3]+i;h[o>>3]=+h[o>>3]+g;h[m>>3]=n;h[f>>3]=l;h[b>>3]=k;b=c[j>>2]|0;f=c[b+12>>2]|0;if((f|0)!=0?(a[f+81>>0]|0)!=0:0){o=f+56|0;h[o>>3]=+h[o>>3]+g;f=f+64|0;h[f>>3]=+h[f>>3]+i;f=1}else f=1;while(1){if((f|0)>(c[b+180>>2]|0))break;UD(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[j>>2]|0}return}function VD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=BD(a,b,d,e)|0;if(!f)a=1;else{a=SD(a,b,f,d,c[e+12>>2]|0)|0;D_(f)}return a|0}function WD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;o=p;n=VD(a,b,d,e)|0;if(!n){mM(d);m=(c[d+16>>2]|0)+16|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];c[o+20>>2]=c[m+20>>2];c[o+24>>2]=c[m+24>>2];c[o+28>>2]=c[m+28>>2];f=o+8|0;g=o+16|0;i=o+24|0;e=0;while(1){if((e|0)>=(a|0))break;k=c[(c[b+(e<<2)>>2]|0)+16>>2]|0;j=c[k+180>>2]|0;k=k+184|0;d=1;while(1){if((d|0)>(j|0))break;r=(c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+16|0;h[o>>3]=+h[(+h[o>>3]<+h[r>>3]?o:r)>>3];r=c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;q=r+16|0;h[f>>3]=+h[(+h[f>>3]<+h[r+24>>3]?o:q)+8>>3];h[g>>3]=+h[(+h[g>>3]>+h[r+32>>3]?o:q)+16>>3];h[i>>3]=+h[(+h[i>>3]>+h[r+40>>3]?o:q)+24>>3];d=d+1|0}e=e+1|0}c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[m+16>>2]=c[o+16>>2];c[m+20>>2]=c[o+20>>2];c[m+24>>2]=c[o+24>>2];c[m+28>>2]=c[o+28>>2]}l=p;return n|0}function XD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=l;l=l+16|0;f=g;if(!e)qa(96508,96514,1400,96521);d=YD(a,d,d)|0;c[e+8>>2]=d;if(0){h=c[15686]|0;c[f>>2]=d;g1(h,96533,f)|0}c[e+12>>2]=0;c[e+20>>2]=0;ZD(a,b,e)|0;l=g;return c[e+16>>2]|0}function YD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=i+4|0;g=xx(b,96663)|0;a:do if(g){c[h>>2]=f;h=(N1(g,134313,h)|0)==1;b=c[f>>2]|0;if(h&(b|0)>-1)d=b;else{switch(a[g>>0]|0){case 84:case 116:break;default:break a}d=e}}while(0);l=i;return d|0}function ZD(a,b,c){a=a|0;b=b|0;c=c|0;return _D(xx(a,96546)|0,b,c)|0}function _D(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+64|0;r=u+40|0;q=u+32|0;t=u+24|0;s=u+16|0;m=u+8|0;k=u;i=u+48|0;j=u+44|0;if(!e)qa(96508,96514,1292,96555);o=e+28|0;c[o>>2]=0;p=e+16|0;c[p>>2]=d;n=e+4|0;c[n>>2]=0;c[e+24>>2]=0;a:do if(b|0?(f=a[b>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:if(!(z$(b,96573,5)|0)){c[p>>2]=4;m=$D(b+5|0,e)|0;c[k>>2]=j;m=(N1(m,134313,k)|0)>0;d=c[j>>2]|0;if(!(m&(d|0)>0))break a;c[n>>2]=d;break a}else{if(z$(b,96579,6)|0)break a;c[p>>2]=5;c[m>>2]=i;m=(N1(b+5|0,96586,m)|0)>0;v=+g[i>>2];g[e>>2]=m&v>0.0?v:1.0;break a}case 99:{if(f<<24>>24!=99)break a;if(b$(b,104980)|0)break a;c[p>>2]=1;break a}case 103:{if(f<<24>>24!=103)break a;if(b$(b,108412)|0)break a;c[p>>2]=3;break a}case 110:{if(f<<24>>24!=110)break a;if(b$(b,108399)|0)break a;c[p>>2]=2;break a}default:break a}while(0);if(0){d=c[15686]|0;E1(96589,11,1,d)|0;c[s>>2]=aE(c[p>>2]|0)|0;g1(d,96601,s)|0;if((c[p>>2]|0)==5){h[t>>3]=+g[e>>2];g1(d,96614,t)|0}c[q>>2]=c[n>>2];g1(d,96627,q)|0;c[r>>2]=c[o>>2];g1(d,96640,r)|0}l=u;return c[p>>2]|0}function $D(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if((a[b>>0]|0)==95){f=d+28|0;e=1;while(1){b=b+1|0;b:while(1){if(!e)break a;d=a[b>>0]|0;if(!(d<<24>>24))break a;switch(d<<24>>24|0){case 99:{g=10;break b}case 105:{g=9;break b}case 117:{g=11;break b}case 116:{g=12;break b}case 98:{d=32;break b}case 108:{g=7;break b}case 114:{g=8;break b}default:e=0}}if((g|0)==7){g=0;d=4}else if((g|0)==8){g=0;d=8}else if((g|0)==9){g=0;d=64}else if((g|0)==10){g=0;d=1}else if((g|0)==11){g=0;d=2}else if((g|0)==12){g=0;d=16}c[f>>2]=c[f>>2]|d}}while(0);return b|0}function aE(a){a=a|0;switch(a|0){case 1:{a=104980;break}case 2:{a=108399;break}case 3:{a=108412;break}case 4:{a=96573;break}case 5:{a=96579;break}default:a=96653}return a|0}function bE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n;m=n+80|0;do if(a){if(!e){e=E_(1,20)|0;c[e+4>>2]=d>>>0>80?d:80}d=c[e>>2]|0;j=c[e+4>>2]|0;if(!d){h=100;d=a;i=E_(100,j)|0}else{h=d+100|0;i=F_(c[e+8>>2]|0,O(h,j)|0)|0;H3(i+(O(j,d)|0)|0,0,j*100|0)|0;d=a}while(1){d=cE(k,d,b,m)|0;if(!d)break;a=c[e>>2]|0;f=h<<1;g=O(h,j)|0;if((a|0)==(h|0)){i=F_(i,O(f,j)|0)|0;H3(i+g|0,0,g|0)|0;a=c[e>>2]|0}else f=h;a=i+(O(a,j)|0)|0;g=k;h=a+80|0;do{c[a>>2]=c[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(h|0));c[e>>2]=(c[e>>2]|0)+1;h=f}if(c[m>>2]|0){m=e+16|0;c[m>>2]=c[m>>2]|1}d=c[e>>2]|0;if(!d){D_(i);D_(e);e=0;break}else{c[e+8>>2]=F_(i,O(d,j)|0)|0;break}}while(0);l=n;return e|0}function cE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+80|0;h=j+64|0;i=j;c[f>>2]=0;do{g=a[d>>0]|0;d=d+1|0}while((B$(g)|0)!=0);a:do switch(g|0){case 69:{c[b>>2]=0;d=dE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 101:{c[b>>2]=1;d=dE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 80:{c[b>>2]=2;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 112:{c[b>>2]=3;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 98:{c[b>>2]=4;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 66:{c[b>>2]=5;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 99:{d=fE(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=gE(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=9;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+24>>2];break a}else{c[b>>2]=14;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 67:{d=fE(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=gE(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=8;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+20>>2];break a}else{c[b>>2]=13;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 76:{c[b>>2]=6;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+12>>2];break}case 84:{c[b>>2]=7;d=hE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=hE(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=iE(d,b+24|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=hE(d,b+32|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=fE(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+16>>2];break}case 70:{c[b>>2]=10;d=hE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=fE(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+28>>2];break}case 83:{c[b>>2]=11;d=fE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+32>>2];break}case 73:{c[b>>2]=12;d=dE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=fE(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+36>>2];break}case 116:{c[b>>2]=15;d=jE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+44>>2];break}case 0:{d=0;break}default:{c[f>>2]=1;d=0}}while(0);l=j;return d|0}function dE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0;i=l;l=l+16|0;e=i;h[b>>3]=+c2(a,e);f=c[e>>2]|0;if(((f|0)!=(a|0)?(h[b+8>>3]=+c2(f,e),g=c[e>>2]|0,(f|0)!=(g|0)):0)?(h[b+16>>3]=+c2(g,e),d=c[e>>2]|0,(g|0)!=(d|0)):0){h[b+24>>3]=+c2(d,e);a=c[e>>2]|0;a=(d|0)==(a|0)?0:a}else a=0;l=i;return a|0}function eE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+4|0;g=k;a=kE(a,j)|0;do if(a){d=c[j>>2]|0;i=E_(d,24)|0;c[b>>2]=d;e=i;f=0;while(1){if((f|0)>=(d|0)){d=9;break}h[e>>3]=+c2(a,g);d=c[g>>2]|0;if((a|0)==(d|0)){d=5;break}h[e+8>>3]=+c2(d,g);a=c[g>>2]|0;if((d|0)==(a|0)){d=7;break}h[e+16>>3]=0.0;e=e+24|0;d=c[b>>2]|0;f=f+1|0}if((d|0)==5){c[j>>2]=f;D_(i);a=0;break}else if((d|0)==7){c[j>>2]=f;D_(i);a=0;break}else if((d|0)==9){c[j>>2]=f;c[b+4>>2]=i;break}}else a=0;while(0);l=k;return a|0}function fE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;b=kE(b,i)|0;f=c[i>>2]|0;do if(!((b|0)==0|(f|0)<1)){while(1){h=a[b>>0]|0;e=h<<24>>24==0;if(e^h<<24>>24!=45)b=b+1|0;else break}if(!e){h=E_(f+1|0,1)|0;g=h;e=f;while(1){b=b+1|0;if((e|0)<=0){e=9;break}e=a[b>>0]|0;if(!(e<<24>>24)){e=8;break}a[g>>0]=e;e=(c[i>>2]|0)+-1|0;c[i>>2]=e;g=g+1|0}if((e|0)==8){D_(h);b=0;break}else if((e|0)==9){a[g>>0]=0;c[d>>2]=h;break}}else b=0}else b=0;while(0);l=j;return b|0}function gE(b,d){b=b|0;d=d|0;var e=0;e=a[b>>0]|0;switch(e|0){case 91:{b=lE(b+1|0,d)|0;break}case 40:{b=mE(b+1|0,d)|0;break}case 47:case 35:{c[d>>2]=0;c[d+8>>2]=b;break}default:if(!(M$(e)|0))b=0;else{c[d>>2]=0;c[d+8>>2]=b}}return b|0}function hE(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;f=l;l=l+16|0;d=f;e=+c2(a,d);d=c[d>>2]|0;if((d|0)==(a|0))d=0;else h[b>>3]=e;l=f;return d|0}function iE(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=kE(a,e)|0;e=c[e>>2]|0;c[b>>2]=(e|0)<0?0:e|0?2:1;l=d;return a|0}function jE(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=C$(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function kE(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=i1(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function lE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;c[b>>2]=1;n=b+8|0;i=hE(a,n)|0;do if(((((i|0)!=0?(j=hE(i,b+16|0)|0,(j|0)!=0):0)?(e=hE(j,b+24|0)|0,(e|0)!=0):0)?(f=hE(e,b+32|0)|0,(f|0)!=0):0)?(k=b+40|0,d=kE(f,k)|0,(d|0)!=0):0){b=c[k>>2]|0;f=E_(b,8)|0;e=0;while(1){if((e|0)>=(b|0)){d=13;break}d=hE(d,m)|0;if(!d){d=9;break}g[f+(e<<3)>>2]=+h[m>>3];d=fE(d,f+(e<<3)+4|0)|0;if(!d){d=12;break}e=e+1|0;b=c[k>>2]|0}if((d|0)==9){D_(f);a=0;break}else if((d|0)==12){D_(f);a=0;break}else if((d|0)==13){c[n+36>>2]=f;break}}else a=0;while(0);l=o;return a|0}function mE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;c[b>>2]=2;k=hE(a,b+8|0)|0;do if(((((((k|0)!=0?(m=hE(k,b+16|0)|0,(m|0)!=0):0)?(e=hE(m,b+24|0)|0,(e|0)!=0):0)?(f=hE(e,b+32|0)|0,(f|0)!=0):0)?(i=hE(f,b+40|0)|0,(i|0)!=0):0)?(j=hE(i,b+48|0)|0,(j|0)!=0):0)?(o=b+56|0,d=kE(j,o)|0,(d|0)!=0):0){e=c[o>>2]|0;i=E_(e,8)|0;f=0;while(1){if((f|0)>=(e|0)){d=15;break}d=hE(d,n)|0;if(!d){d=11;break}g[i+(f<<3)>>2]=+h[n>>3];d=fE(d,i+(f<<3)+4|0)|0;if(!d){d=14;break}f=f+1|0;e=c[o>>2]|0}if((d|0)==11){D_(i);a=0;break}else if((d|0)==14){D_(i);a=0;break}else if((d|0)==15){c[b+60>>2]=i;break}}else a=0;while(0);l=p;return a|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return bE(a,b,c,0)|0}function oE(a){a=a|0;return nE(a,0,0)|0}function pE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a+12>>2]|0;if(a|0){f=c[a+8>>2]|0;g=a+4|0;h=(e|0)==0;b=0;while(1){if((b|0)>=(c[a>>2]|0))break;d=f+(O(c[g>>2]|0,b)|0)|0;if(!h)tb[e&127](d);qE(d);b=b+1|0}D_(f);D_(a)}return}function qE(a){a=a|0;switch(c[a>>2]|0){case 3:case 2:{D_(c[a+8+4>>2]|0);break}case 5:case 4:{D_(c[a+8+4>>2]|0);break}case 6:{D_(c[a+8+4>>2]|0);break}case 7:{D_(c[a+40>>2]|0);break}case 9:case 8:{D_(c[a+8>>2]|0);break}case 14:case 13:{rE(a+8|0);break}case 10:{D_(c[a+16>>2]|0);break}case 11:{D_(c[a+8>>2]|0);break}case 12:{D_(c[a+40>>2]|0);break}default:{}}return}function rE(a){a=a|0;var b=0,d=0,e=0;switch(c[a>>2]|0){case 1:{e=a+40|0;b=a+8+36|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(c[e>>2]|0))break;D_(c[d+(a<<3)+4>>2]|0);a=a+1|0}D_(d);break}case 2:{e=a+56|0;d=a+60|0;a=0;while(1){b=c[d>>2]|0;if((a|0)>=(c[e>>2]|0))break;D_(c[b+(a<<3)+4>>2]|0);a=a+1|0}D_(b);break}default:{}}return}function sE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;k=o+4|0;n=o;c[d>>2]=0;c[e>>2]=(ey(ez(b)|0)|0)!=0&1;f=c[46414]|0;a:do if(f|0?(h=yx(b,f)|0,i=a[h>>0]|0,i<<24>>24):0){f=20284;while(1){g=c[f>>2]|0;if(!g)break a;if(i<<24>>24==(a[g>>0]|0)?(b$(h,g)|0)==0:0)break;f=f+12|0}c[d>>2]=c[f+4>>2];c[e>>2]=c[f+8>>2]}while(0);f=c[46425]|0;if((f|0?(c[e>>2]|0)==1:0)?(j=yx(b,f)|0,a[j>>0]|0):0)tE(j,e);f=c[46426]|0;if((f|0?(c[d>>2]|0)==1:0)?(m=yx(b,f)|0,a[m>>0]|0):0)tE(m,d);if(a[(c[b+16>>2]|0)+153>>0]|0){j=b+-48|0;i=ez(c[((c[b>>2]&3|0)==2?b:j)+40>>2]|0)|0;m=c[b>>2]&3;sE(Rx(i,c[((m|0)==2?b:j)+40>>2]|0,c[((m|0)==3?b:b+48|0)+40>>2]|0,0,0)|0,k,n);c[e>>2]=c[k>>2]|c[e>>2];c[d>>2]=c[n>>2]|c[d>>2]}l=o;return}function tE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;k=o+4|0;j=0;e=0;a:while(1){c[d>>2]=e;g=(j|0)<4;h=(j|0)==3;i=(j|0)==0;while(1){if(!(g&(a[b>>0]|0)!=0))break a;c[k>>2]=0;f=uE(b,k)|0;e=c[k>>2]|0;if(!e){n=5;break a}b=(e|0)==8;if(!(h&b)){if(!(i&b))break;if(a[f>>0]|0)break}c[k>>2]=0;b=f}e=c[d>>2]|e<<(j<<3);j=j+1|0;b=f}if((n|0)==5){c[m>>2]=b;Pw(0,96668,m)|0}l=o;return}function uE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=0;d=vE(a,20344,e)|0;if((d|0)==(a|0)){while(1){d=vE(a,20360,e)|0;if((a|0)==(d|0))break;else a=d}d=vE(a,20408,e)|0}a=c[e>>2]|0;if((a|0)!=0&(a&15|0)==0){a=a|1;c[e>>2]=a}c[b>>2]=c[b>>2]|a;l=f;return d|0}function vE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;while(1){e=c[b>>2]|0;if(!e)break;f=W_(e)|0;if(!(z$(a,e,f)|0)){g=4;break}b=b+8|0}if((g|0)==4){c[d>>2]=c[d>>2]|c[b+4>>2];a=a+f|0}return a|0}function wE(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0;g=0;d=0.0;while(1){if((g|0)==4)break;f=b>>(g<<3)&15;e=1400;while(1){if(!(c[e+16>>2]|0))break;if((f|0)==(c[e>>2]|0)){i=6;break}e=e+24|0}if((i|0)==6){i=0;d=+h[e+8>>3]+d}g=g+1|0}return +(d*10.0*+LL(a,c[46418]|0,1.0,0.0))}function xE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0;p=l;l=l+96|0;m=p+80|0;o=p;k=f>4.0?f*.0875:.35;i=+h[d+8>>3];n=i*k;j=+h[d>>3];k=j*k;e=+h[b>>3];j=e+j;h[m>>3]=j;f=+h[b+8>>3];i=i+f;h[m+8>>3]=i;d=o+64|0;if(!(g&32)){c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=o+32|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];f=i;e=j}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=o+32|0;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2]}h[o+16>>3]=e+n;h[o+24>>3]=f-k;h[o+48>>3]=e-n;h[o+56>>3]=f+k;do if(!(g&64))if(!(g&128)){_O(a,o+16|0,3,g>>>4&1^1);break}else{_O(a,o+32|0,3,g>>>4&1^1);break}else _O(a,o,3,g>>>4&1^1);while(0);l=p;return}function yE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0;x=l;l=l+160|0;n=x+144|0;w=x;q=e*4.0;y=(g&32|0)==0;q=!(q1.0)|y?0.0:(f+-1.0)*.05/e;u=+h[d+8>>3];r=-u;v=q*r;t=+h[d>>3];q=t*q;r=s*r;s=t*s;p=+h[b>>3];e=p+t;h[n>>3]=e;o=+h[b+8>>3];f=u+o;h[n+8>>3]=f;t=t*.5+p;u=u*.5+o;d=w+128|0;if(y){c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];y=w+64|0;c[y>>2]=c[b>>2];c[y+4>>2]=c[b+4>>2];c[y+8>>2]=c[b+8>>2];c[y+12>>2]=c[b+12>>2];i=o;j=p;k=o;m=p;f=o;e=p}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[w>>2]=c[b>>2];c[w+4>>2]=c[b+4>>2];c[w+8>>2]=c[b+8>>2];c[w+12>>2]=c[b+12>>2];y=w+64|0;c[y>>2]=c[n>>2];c[y+4>>2]=c[n+4>>2];c[y+8>>2]=c[n+8>>2];c[y+12>>2]=c[n+12>>2];i=f+s;j=e+r;k=f-s;m=e-r}h[w+16>>3]=e-v;h[w+24>>3]=f-q;h[w+32>>3]=t-r;h[w+40>>3]=u-s;h[w+48>>3]=m;h[w+56>>3]=k;h[w+80>>3]=j;h[w+88>>3]=i;h[w+96>>3]=t+r;h[w+104>>3]=u+s;h[w+112>>3]=e+v;h[w+120>>3]=f+q;do if(!(g&64))if(!(g&128)){_O(a,w,9,1);break}else{_O(a,w+48|0,6,1);break}else _O(a,w,6,1);while(0);l=x;return}function zE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;q=l;l=l+64|0;p=q;t=+h[d+8>>3];s=+h[d>>3];k=+h[b>>3];e=k+s;m=+h[b+8>>3];f=m+t;i=k+s*.2;j=m+t*.2;k=k+s*.6;m=m+t*.6;h[p>>3]=i-t;h[p+8>>3]=j+s;n=p+16|0;h[n>>3]=i+t;o=p+24|0;h[o>>3]=j-s;h[p+32>>3]=k+t;h[p+40>>3]=m-s;h[p+48>>3]=k-t;h[p+56>>3]=m+s;if(!(g&64)){if(g&128|0){d=2;g=1;r=3}}else{d=3;g=0;r=3}if((r|0)==3){h[p+(g<<4)>>3]=i;h[p+(g<<4)+8>>3]=j;h[p+(d<<4)>>3]=k;h[p+(d<<4)+8>>3]=m}_O(a,p,4,1);c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];h[n>>3]=e;h[o>>3]=f;bP(a,p,2);l=q;return}function AE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+64|0;n=o;j=+h[d+8>>3];r=j*-.4;i=+h[d>>3];q=i*.4;t=+h[b>>3];e=t+i*.8;s=+h[b+8>>3];f=s+j*.8;i=t+i;j=s+j;h[n>>3]=t+r;k=n+8|0;h[k>>3]=s+q;d=n+16|0;h[d>>3]=t-r;m=n+24|0;h[m>>3]=s-q;h[n+32>>3]=e-r;h[n+40>>3]=f-q;h[n+48>>3]=e+r;h[n+56>>3]=f+q;if(!(g&64)){if(g&128|0){c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=2;p=5}}else{c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];d=3;p=5}if((p|0)==5){h[n+(d<<4)>>3]=e;h[n+(d<<4)+8>>3]=f}_O(a,n,4,g>>>4&1^1);h[n>>3]=e;h[k>>3]=f;h[n+16>>3]=i;h[m>>3]=j;bP(a,n,2);l=o;return}function BE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;j=l;l=l+80|0;i=j;n=+h[d+8>>3];k=n*-.3333333333333333;p=+h[d>>3];f=p*.3333333333333333;q=+h[b>>3];m=q+p*.5;o=+h[b+8>>3];e=o+n*.5;d=i+64|0;h[i+64>>3]=q+p;h[i+72>>3]=o+n;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];h[i+16>>3]=m+k;h[i+24>>3]=e+f;d=i+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[i+48>>3]=m-k;h[i+56>>3]=e-f;do if(!(g&64)){d=g>>>4&1^1;if(!(g&128)){_O(a,i,4,d);break}else{_O(a,i,3,d);break}}else _O(a,d,3,g>>>4&1^1);while(0);l=j;return}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+32|0;i=g;k=+h[c>>3];e=+h[c+8>>3];d=+C(+(e*e+k*k))*.5;m=+h[b>>3];k=k*.5;h[i>>3]=m+k-d;j=+h[b+8>>3];e=e*.5;h[i+8>>3]=j-d+e;h[i+16>>3]=m+d+k;h[i+24>>3]=j+d+e;ZO(a,i,2,f>>>4&1^1);l=g;return}function DE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;q=t+48|0;r=t+16|0;s=t;n=f>4.0?f*.125:.5;p=+h[b>>3];o=+h[d>>3];i=+h[b+8>>3];m=+h[d+8>>3];e=m*n;f=o*n;c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];h[r+16>>3]=o+p;h[r+24>>3]=m+i;h[q>>3]=n*(o-m)+p;j=n*(m+o);k=j+i;h[q+8>>3]=k;h[q+48>>3]=j+p;i=n*(m-o)+i;h[q+56>>3]=i;o=e*-.95;m=o+f+p;n=f*1.3333333333333333;if(!(g&32)){e=e*1.3333333333333333;j=f*-.33333333333333326;i=i-e;f=k-e;e=m-n}else{e=e*1.3333333333333333;j=f*2.333333333333333;i=i+e;f=k+e;e=m+n}h[q+16>>3]=e;h[q+24>>3]=f;h[q+32>>3]=j-o+p;h[q+40>>3]=i;bP(a,r,2);if(!(g&64)){if(g&128|0)XL(s,q,3,.5,q,0)}else XL(s,q,3,.5,0,q);aP(a,q,4,0,0,0);l=t;return}function EE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0;g=l;l=l+32|0;i=g;e=+h[d>>3]+ +h[b>>3];f=+h[d+8>>3]+ +h[b+8>>3];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=e;h[i+24>>3]=f;bP(a,i,2);l=g;return}function FE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+80|0;j=n+72|0;k=n+8|0;m=n;i=+wE(a,g);i=i*i;h[m>>3]=i;c[f+12>>2]=g;g=f+32|0;a=e+3|0;f=b+(a<<4)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];if((e|0)>(d|0)?(o=+h[b+(e<<4)>>3]-+h[f>>3],p=+h[b+(e<<4)+8>>3]-+h[b+(a<<4)+8>>3],p*p+o*o>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];q=k+32|0;a=b+(e+1<<4)|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];f=k+16|0;d=b+(e+2<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];c[j>>2]=k;c[j+4>>2]=m;MK(j,90,k,1);c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];m=b+(e+3<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];l=n;return e|0}function GE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a>>2]|0;d=+h[b>>3]-+h[f>>3];e=+h[b+8>>3]-+h[f+8>>3];return e*e+d*d<=+h[c[a+4>>2]>>3]|0}function HE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0;o=l;l=l+80|0;k=o+72|0;m=o+8|0;n=o;j=+wE(a,g);j=j*j;h[n>>3]=j;c[f+8>>2]=g;f=f+16|0;a=b+(d<<4)|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];if(!((e|0)>(d|0)?(i=d+3|0,p=+h[a>>3]-+h[b+(i<<4)>>3],q=+h[b+(d<<4)+8>>3]-+h[b+(i<<4)+8>>3],q*q+p*p>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];g=m+16|0;d=b+(i+2<<4)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];r=m+32|0;a=b+(i+1<<4)|0;c[r>>2]=c[a>>2];c[r+4>>2]=c[a+4>>2];c[r+8>>2]=c[a+8>>2];c[r+12>>2]=c[a+12>>2];s=m+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[k>>2]=s;c[k+4>>2]=n;MK(k,90,m,0);n=b+(i<<4)|0;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];c[n+8>>2]=c[s+8>>2];c[n+12>>2]=c[s+12>>2];c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];l=o;return i|0}function IE(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0;u=(g|0)!=0;l=(i|0)!=0;if(!((e|0)==(d|0)&(u&l))){if(l){j=+wE(a,i);k=+h[b+(e<<4)>>3];p=+h[b+(e<<4)+8>>3];l=e+3|0;r=b+(l<<4)|0;n=+h[r>>3];l=b+(l<<4)+8|0;o=+h[l>>3];t=k-n;s=p-o;t=+C(+(s*s+t*t))*.9;j=j>=t?t:j;if(p==o){m=(k>3]=k;h[b+(w<<4)+8>>3]=p;e=b+(e+2<<4)|0;h[r>>3]=m;h[l>>3]=j;c[e>>2]=c[r>>2];c[e+4>>2]=c[r+4>>2];c[e+8>>2]=c[r+8>>2];c[e+12>>2]=c[r+12>>2];c[f+12>>2]=i;h[f+32>>3]=n;h[f+40>>3]=o}if(u){m=+wE(a,g);l=b+(d<<4)|0;k=+h[l>>3];j=+h[b+(d<<4)+8>>3];w=d+3|0;o=+h[b+(w<<4)>>3];p=+h[b+(w<<4)+8>>3];t=k-o;s=j-p;t=+C(+(s*s+t*t))*.9;m=m>=t?t:m;if(j==p){n=(k>3]=n;h[b+(w<<4)+8>>3]=m;c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[l+12>>2]=c[v+12>>2];v=d+2|0;h[b+(v<<4)>>3]=o;h[b+(v<<4)+8>>3]=p;v=16}}else{r=b+(e<<4)|0;s=+h[r>>3];t=+h[b+(e<<4)+8>>3];l=e+3|0;u=b+(l<<4)|0;k=+h[u>>3];l=b+(l<<4)+8|0;j=+h[l>>3];m=+wE(a,g);q=+wE(a,i);n=s-k;p=t-j;n=+C(+(p*p+n*n));w=!(q+m>=n);n=n*.3333333333333333;m=w?m:n;n=w?q:n;if(t==j){w=s>3]=q;h[b+(w<<4)+8>>3]=o;c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];v=b+(e+2<<4)|0;h[u>>3]=p;h[l>>3]=m;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];c[f+12>>2]=i;h[f+32>>3]=s;h[f+40>>3]=t;v=16}if((v|0)==16){c[f+8>>2]=g;h[f+16>>3]=k;h[f+24>>3]=j}return}function JE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;n=+h[b>>3];k=+h[c>>3]-n;o=+h[b+8>>3];l=+h[c+8>>3]-o;j=d*10.0/(+C(+(k*k+l*l))+.0001);k=j*((k>=0.0?.0001:-.0001)+k);j=((l>=0.0?.0001:-.0001)+l)*j;l=k*.5;m=j*.5;i=n-m;f=o-l;n=m+n;l=o+l;o=i+k;m=f+j;k=n+k;j=l+j;g=o>k?o:k;g=n>g?n:g;d=m>j?m:j;d=l>d?l:d;k=o>3]=i>3]=f>3]=i>g?i:g;h[a+24>>3]=f>d?f:d;return}function KE(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;q=l;l=l+48|0;m=q+32|0;k=q+16|0;p=q;n=(c[a+16>>2]|0)+12|0;o=c[n>>2]|0;c[n>>2]=b;YO(a,c[(c[a>>2]|0)+336>>2]|0);fP(a,g);t=+h[e>>3]-+h[d>>3];b=e+8|0;s=+h[b>>3]-+h[d+8>>3];r=10.0/(+C(+(t*t+s*s))+.0001);h[e>>3]=r*((t>=0.0?.0001:-.0001)+t);h[b>>3]=((s>=0.0?.0001:-.0001)+s)*r;b=0;while(1){if((b|0)>=4)break;j=i>>(b<<3)&255;if(!j)break;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];LE(p,a,k,m,f,g,j);c[d>>2]=c[p>>2];c[d+4>>2]=c[p+4>>2];c[d+8>>2]=c[p+8>>2];c[d+12>>2]=c[p+12>>2];b=b+1|0}c[n>>2]=o;l=q;return}function LE(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;m=q+16|0;k=q;n=i&15;j=1400;while(1){o=c[j>>2]|0;if(!o)break;if((n|0)==(o|0)){p=4;break}j=j+24|0}if((p|0)==4){r=+h[j+8>>3]*f;h[e>>3]=r*+h[e>>3];o=e+8|0;h[o>>3]=r*+h[o>>3];p=c[j+16>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];wb[p&15](b,k,m,f,g,i);h[d>>3]=+h[e>>3]+ +h[d>>3];p=d+8|0;h[p>>3]=+h[o>>3]+ +h[p>>3]};c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=q;return}function ME(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i+8|0;f=i;d=xx(b,96770)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else{d=xx(b,96782)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else d=0}if((h|0)==5){d=nE(e,0,120)|0;if(!d){c[f>>2]=ry(b)|0;Pw(0,96789,f)|0;c[g>>2]=e;Pw(3,96842,g)|0}}l=i;return d|0}function NE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=uH(304)|0;if(!f)Pw(1,96850,g)|0;e=a+16|0;a=c[e>>2]|0;c[f>>2]=a;c[e>>2]=f;if(!a){c[f+144>>2]=3;c[f+148>>2]=0;h[f+152>>3]=1.0}else{b=f+16|0;d=a+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));b=f+56|0;d=a+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[f+144>>2]=c[a+144>>2];c[f+148>>2]=c[a+148>>2];h[f+152>>3]=+h[a+152>>3];c[f+136>>2]=c[a+136>>2];b=f+96|0;d=a+96|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0))}l=g;return f|0}function OE(a){a=a|0;var b=0;a=a+16|0;b=c[a>>2]|0;if(!b)qa(96876,96880,117,96887);else{D_(c[b+212>>2]|0);D_(c[b+208>>2]|0);D_(c[b+216>>2]|0);D_(c[b+220>>2]|0);D_(c[b+224>>2]|0);D_(c[b+228>>2]|0);D_(c[b+232>>2]|0);D_(c[b+236>>2]|0);D_(c[b+240>>2]|0);D_(c[b+244>>2]|0);D_(c[b+248>>2]|0);D_(c[b+252>>2]|0);D_(c[b+256>>2]|0);D_(c[b+272>>2]|0);D_(c[b+284>>2]|0);D_(c[b+280>>2]|0);c[a>>2]=c[b>>2];D_(b);return}}function PE(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=c[d+16>>2]|0;k=c[d+152>>2]|0;if((e|0)!=0&(k&32768|0)!=0)c[l+192>>2]=e;if(((k&65536|0)!=0?(c[l+212>>2]=pH(i,j)|0,(f|0)!=0):0)?(a[f>>0]|0)!=0:0){c[l+208>>2]=pH(f,j)|0;d=1}else d=0;do if(k&4194304){if(g|0?a[g>>0]|0:0){c[l+228>>2]=pH(g,j)|0;d=l+260|0;b[d>>1]=b[d>>1]|1;d=1;break}e=c[l+192>>2]|0;if(e){c[l+228>>2]=n1(e)|0;d=1}}while(0);if((h|0)!=0&(k&8388608|0)!=0?(a[h>>0]|0)!=0:0){c[l+244>>2]=pH(h,j)|0;d=1}return d|0}function QE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;i=j;h=j+8|0;g=c[(c[b>>2]|0)+168>>2]|0;f=c[(c[(c[g+16>>2]|0)+8>>2]|0)+92>>2]|0;RE(b,e);b=xx(d,137978)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0){Ww(e,b)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}else{if((g|0)!=(d|0)&(f|0)!=0){Ww(e,f)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;b=c[f>>2]|0}c[f>>2]=b+1;a[b>>0]=95}switch(pz(d)|0){case 0:{f=(g|0)==(d|0)?108412:96901;b=(c[d>>2]|0)>>>4;break}case 1:{f=108399;b=(c[d>>2]|0)>>>4;break}case 2:{f=108368;b=(c[d>>2]|0)>>>4;break}default:{f=0;b=0}}Ww(e,f)|0;c[i>>2]=b;Y0(h,96907,i)|0;Ww(e,h)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}l=j;return b|0}function RE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+144|0;h=i;g=i+8|0;e=c[b+160>>2]|0;if((e|0)>1?c[b+152>>2]&64|0:0){Ww(d,c[(c[(c[b>>2]|0)+308>>2]|0)+(e<<2)>>2]|0)|0;f=d+4|0;e=c[f>>2]|0;if(e>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;e=c[f>>2]|0}c[f>>2]=e+1;a[e>>0]=95}f=c[b+196>>2]|0;e=c[b+200>>2]|0;if((f|0)>0|(e|0)>0){c[h>>2]=f;c[h+4>>2]=e;Y0(g,96911,h)|0;Ww(d,g)|0}l=i;return}function SE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;s=l;l=l+48|0;p=s+16|0;f=s+32|0;q=s;r=+h[(c[a+16>>2]|0)+152>>3];o=TE(d,0,f)|0;if((o+-1|0)>>>0>=2){e=+h[b+16>>3];k=(e+ +h[b>>3])*.5;h[q>>3]=k;i=+h[b+24>>3];m=(i+ +h[b+8>>3])*.5;h[q+8>>3]=m;k=e-k;m=i-m;n=r>.5;if(n)fP(a,.5);j=c[f>>2]|0;i=0.0;f=c[j+8>>2]|0;while(1){d=c[f>>2]|0;if(!d)break;b=f+4|0;if(+g[b>>2]==0.0)e=i;else{WO(a,d);if(!(c[f+12>>2]|0))e=6.283185307179586;else e=+g[b>>2]*6.283185307179586+i;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];b=rQ(p,k,m,i,e)|0;aP(a,c[b>>2]|0,c[b+4>>2]|0,0,0,1);nV(b)}i=e;f=f+12|0}if(n)fP(a,r);UE(j)}l=s;return o|0}function TE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r+8|0;n=r;q=uH(12)|0;i=n1(b)|0;a:do if(!d){d=1;f=i;while(1){switch(a[f>>0]|0){case 0:break a;case 58:{d=d+1|0;break}default:{}}f=f+1|0}}while(0);c[q+4>>2]=i;p=uH((d*12|0)+12|0)|0;c[q+8>>2]=p;m=1.0;h=0;d=0;f=i;while(1){f=k1(f,104958)|0;if(!f){f=20;break}j=+VE(f);if(!(j>=0.0)){f=17;break}k=j-m;if(k>0.0)if((c[5130]|0)!=0?!(k<1.0e-05&k>-1.0e-05):0){c[n>>2]=b;Pw(0,96922,n)|0;c[5130]=0;j=m;d=3}else j=m;k=m-j;if(j>0.0)a[p+(h*12|0)+8>>0]=1;if(a[f>>0]|0)c[p+(h*12|0)>>2]=f;f=h+1|0;g[p+(h*12|0)+4>>2]=j;if(k<1.0e-05&k>-1.0e-05){h=f;f=30;break}else{m=k;h=f;f=0}}b:do if((f|0)==17){if(!(c[5130]|0))d=1;else{c[o>>2]=b;Pw(1,96957,o)|0;c[5130]=0;d=2}UE(q)}else if((f|0)==20)if(m>0.0){f=0;i=0;while(1){if((f|0)>=(h|0))break;o=i+(+g[p+(f*12|0)+4>>2]==0.0&1)|0;f=f+1|0;i=o}if((i|0)<=0){f=p+((h+-1|0)*12|0)+4|0;g[f>>2]=m+ +g[f>>2];f=30;break}j=m/+(i|0);f=0;while(1){if((f|0)>=(h|0)){f=30;break b}i=p+(f*12|0)+4|0;if(+g[i>>2]==0.0)g[i>>2]=j;f=f+1|0}}else f=30;while(0);if((f|0)==30){while(1){f=h+-1|0;if((h|0)<=0)break;if(+g[p+(f*12|0)+4>>2]>0.0)break;else h=f}c[p+(h*12|0)>>2]=0;c[q>>2]=h;c[e>>2]=q}l=r;return d|0}function UE(a){a=a|0;D_(c[a+4>>2]|0);D_(c[a+8>>2]|0);D_(a);return}function VE(b){b=b|0;var d=0.0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;b=A$(b,59)|0;if(!b)d=0.0;else{g=b+1|0;a[b>>0]=0;d=+c2(g,e);d=(d>=0.0?(c[e>>2]|0)!=(g|0):0)?d:-1.0}l=f;return +d}function WE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0;t=l;l=l+80|0;i=t+64|0;r=t;s=+h[(c[a+16>>2]|0)+152>>3];q=TE(d,0,i)|0;if((q+-1|0)>>>0>=2){if(!e){c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];p=r+16|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;o=b+32|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+48|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}else{p=b+32|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+16|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];p=r+48|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}k=r+16|0;m=+h[k>>3];f=+h[r>>3];n=m-f;o=r+32|0;h[o>>3]=f;h[k>>3]=f;p=s>.5;if(p)fP(a,.5);i=c[i>>2]|0;j=r+48|0;e=c[i+8>>2]|0;while(1){d=c[e>>2]|0;if(!d)break;b=e+4|0;if(!(+g[b>>2]==0.0)){WO(a,d);if(!(c[e+12>>2]|0))f=m;else f=n*+g[b>>2]+ +h[r>>3];h[o>>3]=f;h[k>>3]=f;_O(a,r,4,1);f=+h[k>>3];h[j>>3]=f;h[r>>3]=f}e=e+12|0}if(p)fP(a,s);UE(i)}l=t;return q|0}function XE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;g=f>>>16^2;c[d+264>>2]=g;h=d+268|0;c[h>>2]=g+2;g=d+272|0;D_(c[g>>2]|0);d=uH(c[h>>2]<<4)|0;c[g>>2]=d;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];g=d+16|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];if(!(e&8192))yO(a,d,d,2)|0;if(!f)WG(d)}return}function YE(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+144|0;c=q+80|0;e=q+16|0;f=q;k=+h[b>>3];o=a+16|0;m=+h[o>>3];if(!(((((((((!(k>m)?(n=+h[a>>3],!(k>3],i=+h[a+24>>3],!(d>i)):0)?(j=+h[a+8>>3],!(d>3],!(k>m|k>3],!(k>i|k>3],!(k>m|k>3],!(k>i|k>3],!(k>m|k>3],!(n>i|n>3];if(!(d>+h[o>>3])){if(d<+h[a>>3]){c=a;p=16}}else{c=o;p=16}if((p|0)==16){p=0;h[c>>3]=d}d=+h[b+(e<<4)+8>>3];if(!(d>+h[f>>3])){if(d<+h[g>>3]){c=a;p=19}}else{c=o;p=19}if((p|0)==19){p=0;h[c+8>>3]=d}e=e+1|0}}while(0);l=q;return}function ZE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=l;l=l+48|0;d=b+32|0;e=b+16|0;f=b;i=a+48|0;h=a+16|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];g=+$G(f,e,d);h=a+32|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];a=g<4.0&+$G(f,e,d)<4.0&1;l=b;return a|0}function _E(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0;D=l;l=l+272|0;u=D+256|0;v=D+224|0;w=D+192|0;x=D+128|0;y=D+64|0;z=D;A=D+160|0;B=D+96|0;C=D+32|0;t=c[d+16>>2]|0;s=c[t+144>>2]|0;r=t+16|0;c[x>>2]=c[r>>2];c[x+4>>2]=c[r+4>>2];c[x+8>>2]=c[r+8>>2];c[x+12>>2]=c[r+12>>2];c[x+16>>2]=c[r+16>>2];c[x+20>>2]=c[r+20>>2];c[x+24>>2]=c[r+24>>2];c[x+28>>2]=c[r+28>>2];t=c[(c[t+8>>2]|0)+88>>2]|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(!t){c[b>>2]=c[x>>2];c[b+4>>2]=c[x+4>>2];c[b+8>>2]=c[x+8>>2];c[b+12>>2]=c[x+12>>2];c[b+16>>2]=c[x+16>>2];c[b+20>>2]=c[x+20>>2];c[b+24>>2]=c[x+24>>2];c[b+28>>2]=c[x+28>>2]}else{d=x+16|0;if(+h[x>>3]==+h[d>>3]?(e=x+8|0,f=x+24|0,+h[e>>3]==+h[f>>3]):0){h[e>>3]=1797693134862315708145274.0e284;h[x>>3]=1797693134862315708145274.0e284;h[f>>3]=-1797693134862315708145274.0e284;h[d>>3]=-1797693134862315708145274.0e284}j=v+8|0;k=v+16|0;m=v+24|0;n=y+16|0;o=y+24|0;p=s+144|0;q=w+16|0;r=t+12|0;d=0;f=c[t+8>>2]|0;e=0;g=0.0;i=0;while(1){if((i|0)>=(c[t>>2]|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];switch(c[f>>2]|0){case 1:case 0:{H=+h[f+8>>3];I=+h[f+24>>3];h[v>>3]=H-I;F=+h[f+16>>3];G=+h[f+32>>3];h[j>>3]=F-G;h[k>>3]=I+H;h[m>>3]=G+F;E=f+80|0;c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2];E=f+96|0;c[E>>2]=c[k>>2];c[E+4>>2]=c[k+4>>2];c[E+8>>2]=c[k+8>>2];c[E+12>>2]=c[k+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];$E(x,u);c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];$E(x,u);break}case 3:case 2:{E=f+80|0;J=f+8|0;aF(A,c[J+4>>2]|0,c[J>>2]|0,x);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2];c[E+16>>2]=c[A+16>>2];c[E+20>>2]=c[A+20>>2];c[E+24>>2]=c[A+24>>2];c[E+28>>2]=c[A+28>>2];break}case 5:case 4:{J=f+80|0;E=f+8|0;aF(B,c[E+4>>2]|0,c[E>>2]|0,x);c[J>>2]=c[B>>2];c[J+4>>2]=c[B+4>>2];c[J+8>>2]=c[B+8>>2];c[J+12>>2]=c[B+12>>2];c[J+16>>2]=c[B+16>>2];c[J+20>>2]=c[B+20>>2];c[J+24>>2]=c[B+24>>2];c[J+28>>2]=c[B+28>>2];break}case 6:{J=f+80|0;E=f+8|0;aF(C,c[E+4>>2]|0,c[E>>2]|0,x);c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];c[J+16>>2]=c[C+16>>2];c[J+20>>2]=c[C+20>>2];c[J+24>>2]=c[C+24>>2];c[J+28>>2]=c[C+28>>2];break}case 7:{J=f+112|0;c[J>>2]=uH(56)|0;E=n1(c[f+40>>2]|0)|0;K=c[J>>2]|0;c[K>>2]=E;a[K+48>>0]=a[97003+(c[f+24>>2]|0)>>0]|0;c[y>>2]=e;h[n>>3]=g;c[o>>2]=c[o>>2]&-128|d&127;K=c[p>>2]|0;K=nb[c[K>>2]&63](K,y,1)|0;E=c[J>>2]|0;c[E+4>>2]=K;wL(u,s,E);bF(w,+h[f+8>>3],+h[f+16>>3],c[J>>2]|0);J=f+80|0;c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];c[J+16>>2]=c[w+16>>2];c[J+20>>2]=c[w+20>>2];c[J+24>>2]=c[w+24>>2];c[J+28>>2]=c[w+28>>2];c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];$E(x,u);c[u>>2]=c[q>>2];c[u+4>>2]=c[q+4>>2];c[u+8>>2]=c[q+8>>2];c[u+12>>2]=c[q+12>>2];$E(x,u);if(!(c[r>>2]|0))c[r>>2]=106;break}case 10:{e=c[f+16>>2]|0;g=+h[f+8>>3];break}case 15:{d=c[f+8>>2]|0;break}default:{}}f=f+120|0;i=i+1|0}c[b>>2]=c[x>>2];c[b+4>>2]=c[x+4>>2];c[b+8>>2]=c[x+8>>2];c[b+12>>2]=c[x+12>>2];c[b+16>>2]=c[x+16>>2];c[b+20>>2]=c[x+20>>2];c[b+24>>2]=c[x+24>>2];c[b+28>>2]=c[x+28>>2]}l=D;return}function $E(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+h[b>>3];d=a+16|0;if(c>+h[d>>3])h[d>>3]=c;if(c<+h[a>>3])h[a>>3]=c;c=+h[b+8>>3];b=a+24|0;if(c>+h[b>>3])h[b>>3]=c;b=a+8|0;if(c<+h[b>>3])h[b>>3]=c;return}function aF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;k=r+32|0;n=r;f=+h[b>>3];o=n+16|0;h[o>>3]=f;h[n>>3]=f;f=+h[b+8>>3];p=n+24|0;h[p>>3]=f;m=n+8|0;h[m>>3]=f;j=1;while(1){if((j|0)>=(d|0))break;i=b+24|0;f=+h[i>>3];if(!(f<+h[n>>3])){if(f>+h[o>>3]){g=o;q=5}}else{g=n;q=5}if((q|0)==5){q=0;h[g>>3]=f}f=+h[b+32>>3];if(!(f<+h[m>>3])){if(f>+h[p>>3]){b=o;q=8}}else{b=n;q=8}if((q|0)==8){q=0;h[b+8>>3]=f}j=j+1|0;b=i}c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];$E(e,k);c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];$E(e,k);c[a>>2]=c[n>>2];c[a+4>>2]=c[n+4>>2];c[a+8>>2]=c[n+8>>2];c[a+12>>2]=c[n+12>>2];c[a+16>>2]=c[n+16>>2];c[a+20>>2]=c[n+20>>2];c[a+24>>2]=c[n+24>>2];c[a+28>>2]=c[n+28>>2];l=r;return}function bF(b,c,d,e){b=b|0;c=+c;d=+d;e=e|0;var f=0.0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+16|0;i=n+8|0;j=n;f=+h[e+32>>3];k=+h[e+40>>3];switch(a[e+48>>0]|0){case 108:{h[i>>3]=c;f=f+c;g=j;m=5;break}case 110:{f=f*.5;h[i>>3]=c-f;f=f+c;g=j;m=5;break}case 114:{h[j>>3]=c;f=c-f;g=i;m=5;break}default:{c=0.0;f=0.0}}if((m|0)==5){h[g>>3]=f;c=+h[i>>3];f=+h[j>>3]}d=+h[e+16>>3]+d;h[b>>3]=c;h[b+8>>3]=d-k;h[b+16>>3]=f;h[b+24>>3]=d;l=n;return}function cF(a){a=a|0;if((c[a>>2]|0)==7)mH(c[a+112>>2]|0,1);return}function dF(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0.0;m=l;l=l+16|0;k=m;j=c[b+152>>2]|0;n=+h[b+432>>3];i=+h[b+352>>3]*.013888888888888888;f=i*n;h[b+488>>3]=f;g=+h[b+440>>3];i=i*g;h[b+496>>3]=i;h[b+520>>3]=n*.013888888888888888;e=b+528|0;h[e>>3]=g*.013888888888888888;if(j&4096|c[46369]|0)h[e>>3]=g*-.013888888888888888;e=(c[b+360>>2]|0)==0;n=+((c[b+448>>2]|0)>>>0);g=+((c[b+452>>2]|0)>>>0);h[b+368>>3]=(e?n:g)/f;h[b+376>>3]=(e?g:n)/i;cP(b,NL(d,nx(d,0,98496,0)|0,191979)|0);c[b+160>>2]=0;eF(b,d);if(j&2|0)fF(b,d);e=Sy(d)|0;while(1){if(!e)break;a[(c[e+16>>2]|0)+116>>0]=0;e=Ty(d,e)|0}gF(b,k);while(1){if(!((hF(b)|0)<<24>>24))break;if((iF(b)|0)>1)DO(b);jF(b);while(1){if(!((kF(b)|0)<<24>>24))break;lF(b,d);mF(b)}if((iF(b)|0)>1)EO(b);nF(b,k)}oF(b);l=m;return}function eF(a,b){a=a|0;b=b|0;var d=0;d=NE(a)|0;c[d+4>>2]=0;c[d+8>>2]=b;c[d+12>>2]=0;nG(a,c[(c[b+16>>2]|0)+12>>2]|0,b);zO(a,b);return}function fF(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;WO(b,131718);d=xx(c,137895)|0;if(d|0?a[d>>0]|0:0)WO(b,d);d=xx(c,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);zG(b,c);g=Sy(c)|0;while(1){if(!g)break;d=xx(g,137741)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(g,134647)|0;if(d|0?a[d>>0]|0:0)WO(b,d);d=xx(g,98392)|0;do if(d|0?a[d>>0]|0:0){if(!(A$(d,58)|0)){UO(b,d);break}e=n1(d)|0;d=e;while(1){d=k1(d,104958)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}UO(b,d);d=0}D_(e)}while(0);d=xx(g,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);f=Ex(c,g)|0;while(1){if(!f)break;d=xx(f,137741)|0;do if(d|0?a[d>>0]|0:0){if(!(A$(d,58)|0)){UO(b,d);break}e=n1(d)|0;d=e;while(1){d=k1(d,104958)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}UO(b,d);d=0}D_(e)}while(0);d=xx(f,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);f=Gx(c,f)|0}g=Ty(c,g)|0}return}function gF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;g=i;h=c[a>>2]|0;d=c[h+312>>2]|0;f=a+156|0;c[f>>2]=d;h=c[h+316>>2]|0;if(!h)if((d|0)>1?(c[a+152>>2]&64|0)==0:0){c[e>>2]=c[a+52>>2];Pw(0,97541,e)|0;c[f>>2]=1;e=1;d=0}else{e=1;d=0}else{d=h+4|0;if((c[h>>2]|0)>1?(c[a+152>>2]&64|0)==0:0){c[g>>2]=c[a+52>>2];Pw(0,97541,g)|0;c[h+8>>2]=(c[f>>2]|0)+1}e=c[d>>2]|0;d=h+8|0}c[a+160>>2]=e;c[b>>2]=d;l=i;return}function hF(a){a=a|0;return (c[a+160>>2]|0)<=(c[a+156>>2]|0)|0}function iF(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+316>>2]|0;return c[((b|0)==0?a+156|0:b)>>2]|0}function jF(a){a=a|0;var b=0,d=0;d=a+172|0;b=c[d+4>>2]|0;a=a+196|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function kF(a){a=a|0;var b=0,d=0;d=c[a+196>>2]|0;if(((d|0)>-1?(d|0)<(c[a+164>>2]|0):0)?(b=c[a+200>>2]|0,(b|0)>-1):0)a=(b|0)<(c[a+168>>2]|0)&1;else a=0;return a|0}function lF(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+176|0;k=p;f=p+48|0;m=p+32|0;n=c[d+16>>2]|0;o=c[d+152>>2]|0;if((c[d+160>>2]|0)<=1?(c[d+196>>2]|0)<=0:0)h=0;else{Tw(m,128,f);g=n+212|0;h=c[g>>2]|0;RE(d,m);Ww(m,h)|0;i=m+4|0;f=c[i>>2]|0;if(f>>>0>=(c[m+8>>2]|0)>>>0){Uw(m,1)|0;f=c[i>>2]|0}a[f>>0]=0;f=c[m>>2]|0;c[i>>2]=f;c[g>>2]=f}qQ(xx(e,97006)|0);qF(d);BO(d);UO(d,134232);WO(d,131718);do if(o&4259840|0){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;if(o&655360){i=o&131072;c[n+264>>2]=i>>>16^2;f=uH((i>>>12^32)+32|0)|0;g=d+288|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];g=f+16|0;q=d+304|0;c[g>>2]=c[q>>2];c[g+4>>2]=c[q+4>>2];c[g+8>>2]=c[q+8>>2];c[g+12>>2]=c[q+12>>2];if(!i){WG(f);g=4}else g=2}else{f=0;g=0}if(!(o&8192))yO(d,f,f,g)|0;c[n+272>>2]=f;c[n+268>>2]=g}while(0);if(o&32768|0?(j=c[(c[e+16>>2]|0)+12>>2]|0,j|0):0)c[n+192>>2]=c[j>>2];g=(o&4|0)!=0;do if(!g){f=n+208|0;if((c[f>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;q=d+256|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[k+16>>2]=c[q+16>>2];c[k+20>>2]=c[q+20>>2];c[k+24>>2]=c[q+24>>2];c[k+28>>2]=c[q+28>>2];XE(d,k);PO(d,c[f>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}while(0);rF(d,e);f=c[(c[e+16>>2]|0)+12>>2]|0;if(f|0)oH(d,4,f);do if(!g){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;QO(d)}while(0);sF(d,e,o);CO(d);if(h|0){Xw(m);c[n+212>>2]=h}l=p;return}function mF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;d=h+24|0;b=h+16|0;j=h+8|0;f=h;g=a+196|0;i=a+188|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];pF(j,b,d);i=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=i;if(!((kF(a)|0)<<24>>24)){e=a+180|0;if(!(c[a+184>>2]|0))c[a+200>>2]=c[a+176>>2];else c[g>>2]=c[a+172>>2];c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];pF(f,b,d);i=c[f+4>>2]|0;j=g;c[j>>2]=c[f>>2];c[j+4>>2]=i}l=h;return}function nF(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;if(!d){d=a+160|0;c[d>>2]=(c[d>>2]|0)+1}else{c[a+160>>2]=c[d>>2];c[b>>2]=d+4}return}function oF(a){a=a|0;AO(a);OE(a);return}function pF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function qF(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+48|0;n=t+32|0;f=t+24|0;j=t+8|0;k=t+16|0;m=t;r=a+196|0;q=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=q;c[p+4>>2]=r;p=a+164|0;i=c[p>>2]|0;p=c[p+4>>2]|0;s=j;c[s>>2]=i;c[s+4>>2]=p;s=a+360|0;if(!(c[s>>2]|0)){k=q;j=r}else{c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];yG(k,n);r=k;k=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=k;c[p+4>>2]=r;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];yG(m,n);p=m;i=c[p>>2]|0;p=c[p+4>>2]|0;c[j>>2]=i;c[j+4>>2]=p;j=r}d=+h[a+320>>3];g=d*+(k|0)-+h[a+240>>3];h[a+288>>3]=g;e=+h[a+328>>3];o=e*+(j|0)-+h[a+248>>3];h[a+296>>3]=o;h[a+304>>3]=d+g;h[a+312>>3]=e+o;f=a+472|0;if(!(c[(c[a+12>>2]|0)+28>>2]|0)){r=a+456|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2]}else{q=a+456|0;c[f>>2]=c[((c[f>>2]|0)<(c[q>>2]|0)?f:q)>>2];r=a+476|0;c[r>>2]=c[((c[r>>2]|0)<(c[a+460>>2]|0)?f:q)+4>>2];r=a+480|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+464>>2]|0)?f:q)+8>>2];r=a+484|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+468>>2]|0)?f:q)+12>>2]}m=c[a+152>>2]|0;b=+h[a+336>>3];if(!(m&128)){b=(+(k|0)-+(i|0)*.5)*d+b;h[a+256>>3]=b;g=(+(j|0)-+(p|0)*.5)*e+ +h[a+344>>3];o=g;d=d+b;g=g+e}else{d=+h[a+368>>3]*.5;e=b-d;h[a+256>>3]=e;g=+h[a+344>>3];u=+h[a+376>>3]*.5;o=g-u;d=d+b;g=u+g;b=e}h[a+264>>3]=o;h[a+272>>3]=d;h[a+280>>3]=g;if(!(c[s>>2]|0)){e=+h[a+352>>3];h[a+504>>3]=+h[a+384>>3]/e-b;if(!(m&4096|c[46369])){d=+h[a+392>>3]/e;b=o}else{d=-g;b=+h[a+392>>3]/e}h[a+512>>3]=d-b}else{f=a+384|0;e=+h[a+352>>3];h[a+512>>3]=-g-+h[a+392>>3]/e;if(!(m&4096|c[46369]))d=+h[f>>3]/e;else{d=-d;b=+h[f>>3]/e}h[a+504>>3]=d-b}l=t;return}function rF(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;q=s;o=s+40|0;p=s+36|0;r=s+32|0;e=xx(d,137895)|0;if(!e){j=1;e=134116}else{i=(a[e>>0]|0)==0;j=i&1;e=i?134116:e}h=c[b+152>>2]|0;i=(a[e>>0]|0)==116;if(!(h&256))if(i){m=(b$(e,134297)|0)==0;k=m?134116:e;m=m?1:j;n=8}else{k=e;m=j;n=8}else if(!(i?!(b$(e,134297)|0):0)){k=e;m=j;n=8}if((n|0)==8?!((m|0)!=0&(h&33554432|0)!=0):0)if(!((uG(k,o,p)|0)<<24>>24)){WO(b,k);UO(b,134297);r=b+256|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];c[q+20>>2]=c[r+20>>2];c[q+24>>2]=c[r+24>>2];c[q+28>>2]=c[r+28>>2];$O(b,q,1)}else{c[r>>2]=0;i=c[o>>2]|0;WO(b,i);UO(b,134297);tG(d,r)|0;e=c[o+4>>2]|0;h=KL(d,c[46373]|0,0,0)|0;f=+g[p>>2];if(!e)XO(b,134232,h,f);else XO(b,e,h,f);r=(c[r>>2]|0)>>>1&1|2;p=b+256|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];$O(b,q,r);D_(i)}e=c[(c[(c[d+16>>2]|0)+8>>2]|0)+88>>2]|0;if(e|0)wG(b,e);l=s;return}function sF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[a>>2]|0)+28|0;c[g>>2]=(c[g>>2]|0)+1;g=(d&4|0)!=0;if(!g)tF(a,b,d);a:do if(!(d&1)){if(d&16|0){JO(a);f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}KO(a);HO(a);e=Sy(b)|0;while(1){if(!e)break;uF(a,e);e=Ty(b,e)|0}IO(a);break}if(!(d&8)){f=Sy(b)|0;while(1){if(!f)break a;uF(a,f);e=Ex(b,f)|0;while(1){if(!e)break;uF(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0);vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}}HO(a);e=Sy(b)|0;while(1){if(!e)break;if((wF(b,e)|0)<<24>>24)uF(a,e);e=Ty(b,e)|0}IO(a);JO(a);f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;if((xF(b,e)|0)<<24>>24)vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}KO(a)}else{HO(a);e=Sy(b)|0;while(1){if(!e)break;uF(a,e);e=Ty(b,e)|0}IO(a);JO(a);f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}KO(a)}while(0);if(g)tF(a,b,d);return}function tF(e,f,i){e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+128|0;w=P+72|0;N=P+64|0;H=P+112|0;I=P;J=P+104|0;K=f+16|0;L=(i&4|0)!=0;M=e+16|0;x=I+32|0;y=I+16|0;A=I+8|0;B=I+24|0;C=I+48|0;D=I+40|0;E=I+56|0;F=(i&8|0)==0;G=J+4|0;v=1;while(1){j=c[K>>2]|0;if((v|0)>(c[j+180>>2]|0))break;u=c[(c[j+184>>2]|0)+(v<<2)>>2]|0;if((rG(e,u)|0)<<24>>24){if(L)tF(e,u,i);sG(e,u);r=c[M>>2]|0;s=r+208|0;if(!(c[s>>2]|0))t=(b[r+260>>1]&1)!=0;else t=1;qQ(xx(u,97006)|0);if(!(L|t^1)){q=(c[u+16>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[w+16>>2]=c[q+16>>2];c[w+20>>2]=c[q+20>>2];c[w+24>>2]=c[q+24>>2];c[w+28>>2]=c[q+28>>2];XE(e,w);PO(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}c[H>>2]=0;j=tG(u,H)|0;if(!j)p=0;else{YO(e,j);p=c[H>>2]&1}q=u+16|0;j=d[(c[q>>2]|0)+112>>0]|0;do if(!(j&1)){if(j&2|0){j=OL(u,0,103230)|0;k=OL(u,0,103238)|0;O=29;break}if(j&8|0){j=OL(u,0,103246)|0;k=OL(u,0,103254)|0;O=29;break}if(j&4|0){j=OL(u,0,103262)|0;k=OL(u,0,103270)|0;O=29;break}j=xx(u,137741)|0;if(!j)k=0;else k=(a[j>>0]|0)==0?0:j;j=xx(u,134647)|0;if(!j)j=k;else j=(a[j>>0]|0)==0?k:j;m=xx(u,98392)|0;if(m)k=(a[m>>0]|0)==0?k:m;if(!((p|0)!=0&(k|0)!=0)){m=xx(u,137895)|0;if(m|0?a[m>>0]|0:0){k=m;O=29;break}j=(j|0)==0?134232:j;n=(k|0)==0?131718:k;c[J>>2]=0;if(!p)k=0;else O=31}else O=29}else{j=OL(u,0,103214)|0;k=OL(u,0,103222)|0;O=29}while(0);if((O|0)==29){c[J>>2]=0;j=(j|0)==0?134232:j;n=(k|0)==0?131718:k;O=31}if((O|0)==31){O=0;if(!((uG(n,J,w)|0)<<24>>24)){WO(e,n);k=1}else{WO(e,c[J>>2]|0);k=c[G>>2]|0;m=KL(u,c[46373]|0,0,0)|0;o=+g[w>>2];if(!k)XO(e,134232,m,o);else XO(e,k,m,o);k=(c[H>>2]|0)>>>1&1|2}}m=c[46372]|0;if((m|0?(z=yx(u,m)|0,z|0):0)?a[z>>0]|0:0)fP(e,+LL(u,c[46372]|0,1.0,0.0));p=c[H>>2]|0;do if(p&4){m=KL(u,c[46371]|0,1,0)|0;if(m|k|0){n=c[q>>2]|0;Q=n+16|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];n=n+32|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!m)UO(e,134297);else UO(e,j);EJ(e,I,4,p,k)}}else{if(!(p&64)){if(KL(u,c[46371]|0,1,0)|0){UO(e,j);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];$O(e,w,k);break}if(!k)break;UO(e,134297);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];$O(e,w,k);break}Q=c[q>>2]|0;p=Q+16|0;c[I>>2]=c[p>>2];c[I+4>>2]=c[p+4>>2];c[I+8>>2]=c[p+8>>2];c[I+12>>2]=c[p+12>>2];Q=Q+32|0;c[x>>2]=c[Q>>2];c[x+4>>2]=c[Q+4>>2];c[x+8>>2]=c[Q+8>>2];c[x+12>>2]=c[Q+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!(KL(u,c[46371]|0,1,0)|0))UO(e,134297);else UO(e,j);if((WE(e,I,n,0)|0)>1){c[N>>2]=ry(u)|0;Pw(3,97374,N)|0}Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];$O(e,w,0)}while(0);D_(c[J>>2]|0);j=c[(c[q>>2]|0)+12>>2]|0;if(j|0)oH(e,5,j);if(t){if(L){Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];XE(e,w);PO(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}QO(e)}a:do if(!F){k=Sy(u)|0;while(1){if(!k)break a;uF(e,k);j=Ex(u,k)|0;while(1){if(!j)break;vF(e,j);j=Gx(u,j)|0}k=Ty(u,k)|0}}while(0);vG(e,f);if(!L)tF(e,u,i)}v=v+1|0}l=P;return}function uF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;e=j;h=c[b>>2]|0;i=d+16|0;a:do if(((c[(c[i>>2]|0)+8>>2]|0?(jG(b,ez(d)|0,d)|0)<<24>>24:0)?(k=b+256|0,c[e>>2]=c[k>>2],c[e+4>>2]=c[k+4>>2],c[e+8>>2]=c[k+8>>2],c[e+12>>2]=c[k+12>>2],c[e+16>>2]=c[k+16>>2],c[e+20>>2]=c[k+20>>2],c[e+24>>2]=c[k+24>>2],c[e+28>>2]=c[k+28>>2],(kG(d,e)|0)<<24>>24):0)?(f=(c[i>>2]|0)+116|0,g=c[h+28>>2]|0,(g|0)!=(a[f>>0]|0)):0){a[f>>0]=g;cP(b,ry(d)|0);e=NL(d,c[46399]|0,191979)|0;if(a[e>>0]|0)cP(b,e);e=NL(d,c[46387]|0,191979)|0;b:do if(a[e>>0]|0){AF(e)|0;e=185144;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f)break b;if((a[f>>0]|0)!=105)continue;if(!(b$(f,131253)|0))break a}}while(0);lG(b,d);ub[c[(c[(c[(c[i>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&63](b,d);e=c[(c[i>>2]|0)+108>>2]|0;if(e|0?a[e+81>>0]|0:0)oH(b,10,e);mG(b)}while(0);l=j;return}function vF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;g=h;e=b+256|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];c[g+24>>2]=c[e+24>>2];c[g+28>>2]=c[e+28>>2];a:do if((yF(d,g)|0)<<24>>24?(f=d+-48|0,(zF(b,d)|0)<<24>>24):0){i=d+48|0;e=W_(ry(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;e=C_(e+3+(W_(ry(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)|0)|0;b0(e,ry(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;i=(ey(ez(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)==0;g=e+(W_(e)|0)|0;if(i){a[g>>0]=a[138665]|0;a[g+1>>0]=a[138666]|0;a[g+2>>0]=a[138667]|0}else{a[g>>0]=a[134656]|0;a[g+1>>0]=a[134657]|0;a[g+2>>0]=a[134658]|0}p1(e,ry(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0;cP(b,e);D_(e);e=NL(d,c[46421]|0,191979)|0;if(a[e>>0]|0)cP(b,e);e=NL(d,c[46415]|0,191979)|0;b:do if(!(a[e>>0]|0))e=0;else{AF(e)|0;e=185144;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f){e=185144;break b}if((a[f>>0]|0)!=105)continue;if(!(b$(f,131253)|0))break a}}while(0);BF(b,d,e);CF(b,d,e);DF(b)}while(0);l=h;return}function wF(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(oz(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function xF(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(oz(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function yF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+64|0;i=j+32|0;f=j;g=b+16|0;b=c[g>>2]|0;e=c[b+8>>2]|0;if((e|0)!=0?(e=e+8|0,c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+16>>2]=c[e+16>>2],c[f+20>>2]=c[e+20>>2],c[f+24>>2]=c[e+24>>2],c[f+28>>2]=c[e+28>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(iG(f,i)|0)!=0):0)b=1;else h=3;do if((h|0)==3){e=c[b+96>>2]|0;if(e){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];if((VM(e,i)|0)<<24>>24){b=1;break}b=c[g>>2]|0}b=c[b+108>>2]|0;if((b|0?a[b+81>>0]|0:0)?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(VM(b,i)|0)<<24>>24):0){b=1;break}b=0}while(0);l=j;return b|0}function zF(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((c[b+156>>2]|0)>=2?(e=NL(d,c[46420]|0,191979)|0,(eG(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=0;while(1){if((e|0)>=2){e=0;break a}f=(e|0)==1;f=NL(c[((c[d>>2]&3|0)==((f?2:3)|0)?d:d+((f?-1:1)*48|0)|0)+40>>2]|0,c[46397]|0,191979)|0;if(!(a[f>>0]|0)){e=1;break a}if(!((eG(b,f)|0)<<24>>24))e=e+1|0;else{e=1;break}}}else e=0;else e=1;while(0);return e|0}function AF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+192|0;o=p+24|0;n=p+16|0;m=p+8|0;k=p;g=p+48|0;j=p+32|0;if(a[97256]|0){Tw(185408,128,191746);a[97256]=0}Tw(j,128,p+56|0);c[g>>2]=b;h=j+4|0;i=j+8|0;d=0;e=0;a:while(1){f=d;b:while(1)switch(cG(g,j)|0){case 0:{d=21;break a}case 40:if(!(f<<24>>24)){f=1;continue b}else{d=7;break a}case 41:if(!(f<<24>>24)){d=9;break a}else{f=0;continue b}default:break b}if(!(f<<24>>24)){if((e|0)==63){d=12;break}d=c[46353]|0;if(d>>>0>=(c[46354]|0)>>>0){Uw(185408,1)|0;d=c[46353]|0}c[46353]=d+1;a[d>>0]=0;c[185144+(e<<2)>>2]=c[46353];e=e+1|0}d=c[h>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){Uw(j,1)|0;d=c[h>>2]|0}a[d>>0]=0;d=c[j>>2]|0;c[h>>2]=d;Ww(185408,d)|0;d=c[46353]|0;if(d>>>0>=(c[46354]|0)>>>0){Uw(185408,1)|0;d=c[46353]|0}c[46353]=d+1;a[d>>0]=0;d=f}do if((d|0)==7){c[k>>2]=b;Pw(1,97257,k)|0;c[46286]=0;Xw(j)}else if((d|0)==9){c[m>>2]=b;Pw(1,97291,m)|0;c[46286]=0;Xw(j)}else if((d|0)==12){c[n>>2]=b;Pw(0,97319,n)|0;c[46349]=0;Xw(j)}else if((d|0)==21){if(f<<24>>24){c[o>>2]=b;Pw(1,97342,o)|0;c[46286]=0;Xw(j);break}c[185144+(e<<2)>>2]=0;Xw(j);d=c[46353]|0;if(d>>>0>=(c[46354]|0)>>>0){Uw(185408,1)|0;d=c[46353]|0}a[d>>0]=0;c[46353]=c[46352]}while(0);l=p;return 185144}function BF(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+160|0;y=A+24|0;w=A+20|0;v=A+16|0;o=A;p=A+32|0;x=c[d+152>>2]|0;c[y>>2]=0;c[w>>2]=0;c[v>>2]=0;z=NE(d)|0;c[z+4>>2]=3;c[z+8>>2]=f;c[z+12>>2]=9;t=f+16|0;n=c[(c[t>>2]|0)+96>>2]|0;if((n|0?(a[n+82>>0]|0)==0:0)?(RL(xx(f,97079)|0,0)|0)<<24>>24:0){n=z+260|0;b[n>>1]=b[n>>1]|512}if(g|0?c[(c[t>>2]|0)+8>>2]|0:0)YO(d,g);g=c[46436]|0;if((g|0?(i=yx(f,g)|0,i|0):0)?a[i>>0]|0:0)fP(d,+LL(f,c[46436]|0,1.0,0.0));do if(x&16777216|0){g=f+48|0;if((e[(c[(ez(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)|0)+16>>2]|0)+178>>1]|0)>2){m=+h[(c[(c[(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+176>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);m=+h[(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+184>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);break}else{n=z+176|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;break}}while(0);if(x&32768|0){n=c[t>>2]|0;g=c[n+96>>2]|0;if(!g)g=c[z+192>>2]|0;else{g=c[g>>2]|0;c[z+192>>2]=g}i=z+196|0;c[i>>2]=g;k=z+204|0;c[k>>2]=g;j=z+200|0;c[j>>2]=g;g=c[n+108>>2]|0;if(g|0)c[i>>2]=c[g>>2];g=c[n+104>>2]|0;if(g|0)c[j>>2]=c[g>>2];g=c[n+100>>2]|0;if(g|0)c[k>>2]=c[g>>2]}if(!(x&65536))j=0;else{Tw(o,128,p);c[z+212>>2]=pH(QE(d,f,o)|0,f)|0;Xw(o);g=xx(f,137973)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else{g=xx(f,108395)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else i=0}if((q|0)==31)i=pH(g,f)|0;g=xx(f,97092)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=36;else q=34;do if((q|0)==34){g=xx(f,97101)|0;if(g|0?a[g>>0]|0:0){q=36;break}if(i|0){g=n1(i)|0;q=39}}while(0);if((q|0)==36){g=pH(g,f)|0;q=39}if((q|0)==39)c[z+208>>2]=g;g=xx(f,97109)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=44;else q=42;do if((q|0)==42){g=xx(f,97119)|0;if(g|0?a[g>>0]|0:0){q=44;break}if(i|0){g=n1(i)|0;q=47}}while(0);if((q|0)==44){g=pH(g,f)|0;q=47}if((q|0)==47)c[z+216>>2]=g;g=xx(f,97128)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=52;else q=50;do if((q|0)==50){g=xx(f,97137)|0;if(g|0?a[g>>0]|0:0){q=52;break}if(i|0)c[z+220>>2]=n1(i)|0}while(0);if((q|0)==52){c[z+220>>2]=pH(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|128}g=xx(f,97145)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=59;else q=57;do if((q|0)==57){g=xx(f,97154)|0;if(g|0?a[g>>0]|0:0){q=59;break}if(i|0)c[z+224>>2]=n1(i)|0}while(0);if((q|0)==59){c[z+224>>2]=pH(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|256}j=i}do if(x&8388608){g=xx(f,138006)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)i=pH(g,f)|0;else i=0;g=xx(f,97162)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){q=z+260|0;b[q>>1]=b[q>>1]|64;g=pH(g,f)|0;q=72}else q=70;if((q|0)==70?i|0:0){g=n1(i)|0;q=72}if((q|0)==72)c[z+244>>2]=g;g=xx(f,97173)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){g=pH(g,f)|0;q=78}else q=76;if((q|0)==76?i|0:0){g=n1(i)|0;q=78}if((q|0)==78)c[z+248>>2]=g;g=xx(f,97185)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){c[z+252>>2]=pH(g,f)|0;p=z+260|0;b[p>>1]=b[p>>1]|16}else q=82;if((q|0)==82?i|0:0)c[z+252>>2]=n1(i)|0;g=xx(f,97196)|0;if(g|0?a[g>>0]|0:0){q=z+260|0;b[q>>1]=b[q>>1]|32;c[z+256>>2]=pH(g,f)|0;break}if(i)c[z+256>>2]=n1(i)|0;else i=0}else i=0;while(0);do if(x&4194304|0){g=xx(f,138019)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=94;else q=92;do if((q|0)==92){g=xx(f,97207)|0;if(g|0?a[g>>0]|0:0){q=94;break}g=c[z+192>>2]|0;if(g|0)c[z+228>>2]=n1(g)|0}while(0);if((q|0)==94){p=WF(g,f)|0;c[z+228>>2]=pH(p,f)|0;D_(p);p=z+260|0;b[p>>1]=b[p>>1]|1}g=xx(f,97219)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){p=WF(g,f)|0;c[z+232>>2]=pH(p,f)|0;D_(p);p=z+260|0;b[p>>1]=b[p>>1]|8}else q=100;if((q|0)==100?(r=c[z+192>>2]|0,r|0):0)c[z+232>>2]=n1(r)|0;g=xx(f,97232)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){r=WF(g,f)|0;c[z+236>>2]=pH(r,f)|0;D_(r);r=z+260|0;b[r>>1]=b[r>>1]|2}else q=105;if((q|0)==105?(s=c[z+200>>2]|0,s|0):0)c[z+236>>2]=n1(s)|0;g=xx(f,97244)|0;if(g|0?a[g>>0]|0:0){s=WF(g,f)|0;c[z+240>>2]=pH(s,f)|0;D_(s);s=z+260|0;b[s>>1]=b[s>>1]|4;break}g=c[z+204>>2]|0;if(g|0)c[z+240>>2]=n1(g)|0}while(0);D_(j);D_(i);do if(x&4259840|0?(u=c[(c[t>>2]|0)+8>>2]|0,u|0):0){if(!(c[z+208>>2]|0)){if((x&524288|0)==0|(c[z+228>>2]|0)==0)break}else if(!(x&524288))break;m=+h[(c[d+16>>2]|0)+152>>3]*.5;m=m>2.0?m:2.0;i=c[u+4>>2]|0;g=0;while(1){if((g|0)>=(i|0))break;XF(y,w,v,(c[u>>2]|0)+(g*48|0)|0,m);g=g+1|0}j=c[v>>2]|0;c[z+276>>2]=j;k=c[w>>2]|0;c[z+280>>2]=k;if(!(x&8192)){g=0;i=0;while(1){if((i|0)>=(j|0))break;g=(c[k+(i<<2)>>2]|0)+g|0;i=i+1|0}y=c[y>>2]|0;yO(d,y,y,g)|0;g=y}else g=c[y>>2]|0;c[z+284>>2]=g;c[z+264>>2]=2;c[z+272>>2]=g;c[z+268>>2]=c[k>>2]}while(0);NO(d,f);g=c[z+208>>2]|0;if(!((g|0)==0?!(b[z+260>>1]&1):0))PO(d,g,c[z+228>>2]|0,c[z+244>>2]|0,c[z+212>>2]|0);l=A;return}function CF(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0;P=l;l=l+240|0;L=P+224|0;K=P+208|0;x=P+128|0;w=P+112|0;O=P+64|0;C=P+48|0;D=P+32|0;E=P+16|0;F=P;G=P+192|0;H=P+176|0;y=P+160|0;B=P+144|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;M=+h[(c[b+16>>2]|0)+152>>3];qQ(xx(e,97006)|0);J=e+16|0;a:do if(c[(c[J>>2]|0)+8>>2]|0){N=+LL(e,c[46418]|0,1.0,0.0);k=NL(e,c[46406]|0,191979)|0;v=(f|0)!=0;b:do if(v){g=f;while(1){i=g;g=g+4|0;i=c[i>>2]|0;if(!i){o=0;break b}if((a[i>>0]|0)!=116)continue;if(!(b$(i,108091)|0)){o=1;break}}}else o=0;while(0);j=k;q=0;i=0;c:while(1){switch(a[j>>0]|0){case 0:break c;case 58:{g=q+1|0;break}case 59:{g=q;i=i+1|0;break}default:g=q}j=j+1|0;q=g}n=(q|0)!=0;if((i|0)!=0&n)if(!(KF(b,e,f,k,q+1|0,N,M)|0))break;else m=134232;else m=k;g=d[(c[J>>2]|0)+115>>0]|0;if(!(g&1))if(!(g&2))if(!(g&8))if(!(g&4)){i=m;j=OL(e,c[46407]|0,m)|0}else{j=103270;g=103262;k=185632;i=185632;p=18}else{j=103254;g=103246;k=185632;i=185632;p=18}else{j=103238;g=103230;k=185632;i=185632;p=18}else{j=103222;g=103214;k=185632;i=185632;p=18}if((p|0)==18){i=c[i>>2]|0;i=OL(e,i,LF(m,g)|0)|0;g=OL(e,c[k>>2]|0,j)|0;if((i|0)==(m|0)){i=m;j=g}else{UO(b,i);j=g}}if((j|0)!=(m|0))WO(b,j);if(o<<24>>24){i=(a[i>>0]|0)==0?134232:i;g=(a[j>>0]|0)==0?134232:j;UO(b,134297);WO(b,i);u=O;r=c[c[(c[J>>2]|0)+8>>2]>>2]|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));J=kL(O,MF(e)|0,M,0,0)|0;_O(b,c[J+8>>2]|0,c[J>>2]|0,1);NF(J);UO(b,i);if((g|0)!=(i|0))WO(b,g);g=c[O+8>>2]|0;if(g|0){I=O+16|0;J=c[O>>2]|0;c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];KE(b,2,K,L,N,M,g)}g=c[O+12>>2]|0;if(!g)break;J=O+32|0;O=(c[O>>2]|0)+((c[O+4>>2]|0)+-1<<4)|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[L>>2]=c[O>>2];c[L+4>>2]=c[O+4>>2];c[L+8>>2]=c[O+8>>2];c[L+12>>2]=c[O+12>>2];KE(b,3,K,L,N,M,g);break}g=c[J>>2]|0;if(!n){do if(!(a[g+115>>0]&3)){if(a[i>>0]|0){UO(b,i);WO(b,j);break}UO(b,134232);if(!(a[j>>0]|0)){WO(b,134232);break}else{WO(b,j);break}}while(0);k=b+152|0;m=O+4|0;n=O+8|0;o=O+12|0;p=O+32|0;q=O+16|0;j=0;while(1){g=c[(c[J>>2]|0)+8>>2]|0;if((j|0)>=(c[g+4>>2]|0))break a;u=O;r=(c[g>>2]|0)+(j*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[O>>2]|0;i=c[m>>2]|0;do if(!(c[k>>2]&16384)){aP(b,g,i,0,0,0);g=c[n>>2]|0;if(g|0){I=c[O>>2]|0;c[K>>2]=c[q>>2];c[K+4>>2]=c[q+4>>2];c[K+8>>2]=c[q+8>>2];c[K+12>>2]=c[q+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];KE(b,2,K,L,N,M,g)}g=c[o>>2]|0;if(g|0){I=(c[O>>2]|0)+((c[m>>2]|0)+-1<<4)|0;c[K>>2]=c[p>>2];c[K+4>>2]=c[p+4>>2];c[K+8>>2]=c[p+8>>2];c[K+12>>2]=c[p+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];KE(b,3,K,L,N,M,g)}if((c[(c[(c[J>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[n>>2]|0)){if(!(v&(c[o>>2]|0)!=0))break}else if(!v)break;YO(b,f)}}else aP(b,g,i,c[n>>2]|0,c[o>>2]|0,0);while(0);j=j+1|0}}I=c[(c[g+8>>2]|0)+4>>2]|0;A=I*48|0;z=C_(A)|0;A=C_(A)|0;t=+(q+2|0)*.5;v=O+4|0;p=C+8|0;q=D+8|0;e=E+8|0;f=F+8|0;o=0;while(1){if((o|0)>=(I|0))break;u=O;r=(c[c[(c[J>>2]|0)+8>>2]>>2]|0)+(o*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[v>>2]|0;c[z+(o*48|0)+4>>2]=g;c[A+(o*48|0)+4>>2]=g;n=g<<4;m=C_(n)|0;c[z+(o*48|0)>>2]=m;n=C_(n)|0;c[A+(o*48|0)>>2]=n;k=c[O>>2]|0;c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];k=0;while(1){if((k|0)>=(g+-1|0))break;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];g=k+1|0;j=(c[O>>2]|0)+(g<<4)|0;c[D>>2]=c[j>>2];c[D+4>>2]=c[j+4>>2];c[D+8>>2]=c[j+8>>2];c[D+12>>2]=c[j+12>>2];j=m+(k<<4)|0;if(!k){c[K>>2]=c[C>>2];c[K+4>>2]=c[C+4>>2];c[K+8>>2]=c[C+8>>2];c[K+12>>2]=c[C+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];OF(G,K,L);c[j>>2]=c[G>>2];c[j+4>>2]=c[G+4>>2];c[j+8>>2]=c[G+8>>2];c[j+12>>2]=c[G+12>>2]}else{c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];OF(H,K,L);c[j>>2]=c[H>>2];c[j+4>>2]=c[H+4>>2];c[j+8>>2]=c[H+8>>2];c[j+12>>2]=c[H+12>>2]}R=c[O>>2]|0;s=k+2|0;S=R+(s<<4)|0;c[E>>2]=c[S>>2];c[E+4>>2]=c[S+4>>2];c[E+8>>2]=c[S+8>>2];c[E+12>>2]=c[S+12>>2];u=k+3|0;R=R+(u<<4)|0;c[F>>2]=c[R>>2];c[F+4>>2]=c[R+4>>2];c[F+8>>2]=c[R+8>>2];c[F+12>>2]=c[R+12>>2];Q=m+(g<<4)|0;r=m+(s<<4)|0;c[w>>2]=c[C>>2];c[w+4>>2]=c[C+4>>2];c[w+8>>2]=c[C+8>>2];c[w+12>>2]=c[C+12>>2];c[x>>2]=c[D>>2];c[x+4>>2]=c[D+4>>2];c[x+8>>2]=c[D+8>>2];c[x+12>>2]=c[D+12>>2];c[K>>2]=c[S>>2];c[K+4>>2]=c[S+4>>2];c[K+8>>2]=c[S+8>>2];c[K+12>>2]=c[S+12>>2];c[L>>2]=c[R>>2];c[L+4>>2]=c[R+4>>2];c[L+8>>2]=c[R+8>>2];c[L+12>>2]=c[R+12>>2];PF(y,w,x,K,L);c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[Q>>2]=c[y>>2];c[Q+4>>2]=c[y+4>>2];c[Q+8>>2]=c[y+8>>2];c[Q+12>>2]=c[y+12>>2];h[n+(k<<4)>>3]=+h[C>>3]-+h[j>>3]*t;h[n+(k<<4)+8>>3]=+h[p>>3]-+h[m+(k<<4)+8>>3]*t;h[n+(g<<4)>>3]=+h[D>>3]-+h[Q>>3]*t;h[n+(g<<4)+8>>3]=+h[q>>3]-+h[m+(g<<4)+8>>3]*t;h[n+(s<<4)>>3]=+h[E>>3]-+h[r>>3]*t;h[n+(s<<4)+8>>3]=+h[e>>3]-+h[m+(s<<4)+8>>3]*t;k=u;g=c[v>>2]|0}S=m+(k<<4)|0;c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];OF(B,K,L);c[S>>2]=c[B>>2];c[S+4>>2]=c[B+4>>2];c[S+8>>2]=c[B+8>>2];c[S+12>>2]=c[B+12>>2];h[n+(k<<4)>>3]=+h[F>>3]-+h[S>>3]*t;h[n+(k<<4)+8>>3]=+h[f>>3]-+h[m+(k<<4)+8>>3]*t;o=o+1|0}s=n1(i)|0;f=0;r=i;g=i;j=i;i=s;while(1){i=k1(i,104958)|0;if(!i)break;e=(a[i>>0]|0)==0?134232:i;if((e|0)!=(j|0))if(!(a[(c[J>>2]|0)+115>>0]&3)){UO(b,e);WO(b,e);j=e}else j=e;m=(f|0)==0;n=f>>>0<2;i=0;while(1){if((i|0)>=(I|0))break;o=c[A+(i*48|0)>>2]|0;p=c[z+(i*48|0)>>2]|0;q=c[A+(i*48|0)+4>>2]|0;k=0;while(1){if((k|0)>=(q|0))break;S=o+(k<<4)|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)>>3];S=o+(k<<4)+8|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)+8>>3];k=k+1|0}aP(b,o,q,0,0,0);i=i+1|0}f=f+1|0;r=m?e:r;g=n?e:g;i=0}i=c[O+8>>2]|0;if(!i)i=0;else{if(g){if(!(a[(c[J>>2]|0)+115>>0]&3)){UO(b,g);WO(b,g)}}else g=0;R=O+16|0;S=c[O>>2]|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];KE(b,2,K,L,N,M,i);i=g}j=O+12|0;g=c[j>>2]|0;if(g|0){if((i|0)!=(r|0)?(a[(c[J>>2]|0)+115>>0]&3)==0:0){UO(b,r);WO(b,r);g=c[j>>2]|0}R=O+32|0;S=(c[O>>2]|0)+((c[v>>2]|0)+-1<<4)|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];KE(b,3,K,L,N,M,g)}D_(s);g=0;while(1){if((g|0)>=(I|0))break;D_(c[z+(g*48|0)>>2]|0);D_(c[A+(g*48|0)>>2]|0);g=g+1|0}D_(z);D_(A)}while(0);l=P;return}function DF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+64|0;r=x+48|0;u=x+32|0;t=x+16|0;s=x;w=c[a+16>>2]|0;v=c[w+8>>2]|0;q=w+208|0;if(!((c[q>>2]|0)==0?!(b[w+260>>1]&1):0))d=3;a:do if((d|0)==3?(QO(a),p=w+276|0,e=c[p>>2]|0,e|0):0){h=w+280|0;d=c[h>>2]|0;i=w+268|0;j=w+284|0;k=w+272|0;m=w+228|0;n=w+244|0;o=w+212|0;f=c[d>>2]|0;g=1;while(1){if((g|0)>=(e|0))break a;c[i>>2]=c[d+(g<<2)>>2];c[k>>2]=(c[j>>2]|0)+(f<<4);PO(a,c[q>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0);QO(a);y=c[h>>2]|0;f=(c[y+(g<<2)>>2]|0)+f|0;g=g+1|0;e=c[p>>2]|0;d=y}}while(0);c[w+268>>2]=0;c[w+272>>2]=0;q=v+16|0;d=c[q>>2]|0;e=c[d+8>>2]|0;if(!e)f=w+260|0;else{p=c[e>>2]|0;d=c[p>>2]|0;y=c[p+8>>2]|0;o=p+16|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];p=p+32|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];if(!y){c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];c[u+12>>2]=c[d+12>>2]}else{c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2]}f=w+260|0;p=b[f>>1]|0;o=c[w+220>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];EF(a,r,(p<<8&65535)<<16>>16>>15&255,o,(p<<14&65535)<<16>>16>>15&255);p=c[(c[q>>2]|0)+8>>2]|0;o=c[p>>2]|0;p=(c[p+4>>2]|0)+-1|0;d=c[o+(p*48|0)>>2]|0;e=c[o+(p*48|0)+4>>2]|0;y=c[o+(p*48|0)+12>>2]|0;n=o+(p*48|0)+16|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];t=o+(p*48|0)+32|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];if(!y){y=d+(e+-1<<4)|0;c[u>>2]=c[y>>2];c[u+4>>2]=c[y+4>>2];c[u+8>>2]=c[y+8>>2];c[u+12>>2]=c[y+12>>2]}else{c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[u+8>>2]=c[s+8>>2];c[u+12>>2]=c[s+12>>2]}d=b[f>>1]|0;y=c[w+224>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];EF(a,r,(d<<7&65535)<<16>>16>>15&255,y,(d<<13&65535)<<16>>16>>15&255);d=c[q>>2]|0}e=c[d+96>>2]|0;g=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;m=w+216|0;h=c[m>>2]|0;n=w+232|0;i=c[n>>2]|0;o=w+248|0;j=c[o>>2]|0;p=w+212|0;k=c[p>>2]|0;if(!((QL(NL(v,c[46416]|0,134226)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;FF(a,e,11,g,h,i,j,k,d);j=c[(c[q>>2]|0)+108>>2]|0;k=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;i=c[m>>2]|0;h=c[n>>2]|0;e=c[o>>2]|0;g=c[p>>2]|0;if(!((QL(NL(v,c[46416]|0,134226)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;FF(a,j,11,k,i,h,e,g,d);FF(a,c[(c[q>>2]|0)+100>>2]|0,7,(b[f>>1]<<13&65535)<<16>>16>>15<<16>>16,c[w+224>>2]|0,c[w+240>>2]|0,c[w+256>>2]|0,c[p>>2]|0,0);FF(a,c[(c[q>>2]|0)+104>>2]|0,6,(b[f>>1]<<14&65535)<<16>>16>>15<<16>>16,c[w+220>>2]|0,c[w+236>>2]|0,c[w+252>>2]|0,c[p>>2]|0,0);OO(a);OE(a);l=x;return}function EF(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j;i=c[a+16>>2]|0;if(!(e<<24>>24))f=c[i+208>>2]|0;if(!(g<<24>>24==0?((f|0)==0?(b[i+260>>1]&1)==0:0):0)){c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];JF(a,h)}l=j;return}function FF(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r;q=c[b+152>>2]|0;if(d|0?a[d+81>>0]|0:0){if(!j)n=0;else{n=uH((W_(j)|0)+11|0)|0;switch(e|0){case 11:{m=105198;break}case 7:{m=98557;break}case 6:{m=98567;break}default:qa(135312,96880,2730,97018)}c[o>>2]=j;c[o+4>>2]=m;Y0(n,97034,o)|0}o=b+16|0;j=(c[o>>2]|0)+12|0;p=c[j>>2]|0;c[j>>2]=e;j=(f|0)!=0|(g|0)!=0;m=(q&4|0)==0;if(j&m){GF(b,d);PO(b,g,h,i,n)}oH(b,e,d);if(k|0)HF(b,d,k);if(j){if(!m){GF(b,d);PO(b,g,h,i,n)}QO(b)}D_(n);c[(c[o>>2]|0)+12>>2]=p}l=r;return}function GF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;i=f>>>16^2;c[d+264>>2]=i;j=d+268|0;c[j>>2]=i+2;i=d+272|0;D_(c[i>>2]|0);d=uH(c[j>>2]<<4)|0;c[i>>2]=d;i=b+56|0;j=b+24|0;h[d>>3]=+h[i>>3]-+h[j>>3]*.5;g=b+64|0;b=b+32|0;h[d+8>>3]=+h[g>>3]-+h[b>>3]*.5;h[d+16>>3]=+h[j>>3]*.5+ +h[i>>3];h[d+24>>3]=+h[b>>3]*.5+ +h[g>>3];if(!(e&8192))yO(a,d,d,2)|0;if(!f)WG(d)}return}function HF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+96|0;g=o+80|0;i=o+32|0;j=o+16|0;k=o;f=c[d>>2]|0;while(1){m=a[f>>0]|0;if(!(m<<24>>24))break;if(!(B$(m&255)|0)){n=4;break}else f=f+1|0}if((n|0)==4){p=+h[d+24>>3];m=d+56|0;IF(i,+h[m>>3]+p*.5,+h[d+64>>3]-+h[d+32>>3]*.5);n=i+16|0;IF(j,+h[i>>3]-p,+h[i+8>>3]);c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];n=i+32|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];bM(k,e,g);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];YO(b,c[(c[b>>2]|0)+336>>2]|0);UO(b,c[d+8>>2]|0);bP(b,i,3)}l=o;return}function IF(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function JF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;j=f>>>16^2;c[d+264>>2]=j;k=d+268|0;c[k>>2]=j+2;j=d+272|0;D_(c[j>>2]|0);d=uH(c[k>>2]<<4)|0;c[j>>2]=d;i=+h[b>>3];h[d>>3]=i+-3.0;g=+h[b+8>>3];h[d+8>>3]=g+-3.0;h[d+16>>3]=i+3.0;h[d+24>>3]=g+3.0;if(!(e&8192))yO(a,d,d,2)|0;if(!f)WG(d)}return}function KF(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;var j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=l;l=l+256|0;D=J+224|0;C=J+208|0;j=J+192|0;F=J+144|0;G=J+96|0;H=J+48|0;E=J;k=J+240|0;e=TE(e,f,k)|0;if((e|0)>1){z=b+48|0;A=ez(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;z=ry(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;A=(ey(A)|0)!=0;B=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[j>>2]=z;c[j+4>>2]=A?97053:97058;c[j+8>>2]=B;Pw(3,97063,j)|0;if((e|0)==2)e=1;else I=4}else if((e|0)==1)e=1;else I=4;if((I|0)==4){B=b+16|0;r=c[k>>2]|0;s=r+8|0;t=H+4|0;u=F+8|0;v=F+12|0;w=(d|0)!=0;q=(d|0)==0;x=F+32|0;y=F+4|0;z=F+16|0;A=E+4|0;e=0;p=0;while(1){f=c[(c[B>>2]|0)+8>>2]|0;if((p|0)>=(c[f+4>>2]|0))break;j=F;f=(c[f>>2]|0)+(p*48|0)|0;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));b=1;m=1.0;o=c[s>>2]|0;a:while(1){f=c[o>>2]|0;if(!f)break;k=o+4|0;n=+g[k>>2];do if(n<1.0e-05&n>-1.0e-05)f=b;else{UO(a,f);n=+g[k>>2];m=m-n;e=c[o>>2]|0;if(b|0){UF(F,n,H,E);k=c[H>>2]|0;aP(a,k,c[t>>2]|0,0,0,0);D_(k);if(m<1.0e-05&m>-1.0e-05){I=11;break a}else{f=0;break}}if(m<1.0e-05&m>-1.0e-05){I=13;break a}j=G;f=E;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));n=+g[k>>2];UF(G,n/(m+n),H,E);D_(c[G>>2]|0);f=c[H>>2]|0;aP(a,f,c[t>>2]|0,0,0,0);D_(f);f=0}while(0);b=f;o=o+12|0}if((I|0)==11){I=0;D_(c[E>>2]|0)}else if((I|0)==13){I=0;o=c[E>>2]|0;aP(a,o,c[A>>2]|0,0,0,0);D_(o)}if(c[u>>2]|0){UO(a,c[c[s>>2]>>2]|0);WO(a,c[c[s>>2]>>2]|0);k=c[F>>2]|0;o=c[u>>2]|0;c[C>>2]=c[z>>2];c[C+4>>2]=c[z+4>>2];c[C+8>>2]=c[z+8>>2];c[C+12>>2]=c[z+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];KE(a,2,C,D,h,i,o)}if(c[v>>2]|0){UO(a,e);WO(a,e);k=(c[F>>2]|0)+((c[y>>2]|0)+-1<<4)|0;o=c[v>>2]|0;c[C>>2]=c[x>>2];c[C+4>>2]=c[x+4>>2];c[C+8>>2]=c[x+8>>2];c[C+12>>2]=c[x+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];KE(a,3,C,D,h,i,o)}do if((c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[u>>2]|0)){if(!(w&(c[v>>2]|0)!=0))break}else if(q)break;YO(a,d)}while(0);p=p+1|0}UE(r);e=0}l=J;return e|0}function LF(b,d){b=b|0;d=d|0;var e=0,f=0;e=1;a:while(1){switch(a[b>>0]|0){case 0:break a;case 58:{e=e+1|0;break}default:{}}b=b+1|0}f=O((W_(d)|0)+1|0,e)|0;b=f+10|0;if((c[46350]|0)<(f|0)){c[46350]=b;b=F_(c[46351]|0,b)|0;c[46351]=b}else b=c[46351]|0;b0(b,d)|0;while(1){e=e+-1|0;b=c[46351]|0;if(!e)break;f=b+(W_(b)|0)|0;a[f>>0]=58;a[f+1>>0]=0;p1(b,d)|0}return b|0}function MF(b){b=b|0;var d=0,e=0;d=c[46414]|0;a:do if(!d)e=7;else{d=yx(b,d)|0;switch(a[d>>0]|0){case 110:if(!(b$(d,132627)|0)){d=1;break a}else{e=7;break a}case 102:if(!(b$(d,97040)|0)){d=2;break a}else{e=7;break a}case 98:{if(!(b$(d,97048)|0)){d=3;break a}if(!(b$(d,108195)|0)){d=4;break a}else{e=7;break a}}default:{e=7;break a}}}while(0);if((e|0)==7){d=(ey(ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0)!=0;d=d?2:1}return d|0}function NF(a){a=a|0;if(a|0){D_(c[a+8>>2]|0);D_(a)}return}function OF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[b>>3]-+h[c>>3];f=+h[b+8>>3]-+h[c+8>>3];d=2.0/+C(+(e*e+.0001+f*f));h[a>>3]=d*f;h[a+8>>3]=-(e*d);return}function PF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0;g=+h[c>>3]-+h[d>>3];i=+h[c+8>>3]-+h[d+8>>3];f=+C(+(i*i+g*g));if(f<.0001){j=+h[b>>3]-+h[e>>3];f=+h[b+8>>3]-+h[e+8>>3];i=f;g=j;f=+C(+(j*j+.0001+f*f))}j=2.0/f;h[a>>3]=i*j;h[a+8>>3]=-(j*g);return}function QF(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(1.0-a/b))}function RF(a,b,c){a=+a;b=+b;c=+c;return +(c*.5)}function SF(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(a/b))}function TF(a,b,c){a=+a;b=+b;c=+c;b=a/b;return +((!(b<=.5)?1.0-b:b)*c)}function UF(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0;p=l;l=l+16|0;o=p;n=c[a+4>>2]|0;j=(n+-1|0)/3|0;if((n+-4|0)>>>0<3){c[d+4>>2]=4;c[d>>2]=uH(64)|0;c[e+4>>2]=4;n=uH(64)|0;c[e>>2]=n;XL(o,c[a>>2]|0,3,b,c[d>>2]|0,n)}else{n=uH(j<<3)|0;g=0;i=c[a>>2]|0;f=0.0;while(1){if((g|0)>=(j|0))break;q=+VF(i);h[n+(g<<3)>>3]=q;g=g+1|0;i=i+48|0;f=q+f}b=f*b;m=0;f=0.0;while(1){if((j|0)<=(m|0))break;f=+h[n+(m<<3)>>3]+f;if(f>=b)break;m=m+1|0}k=m*3|0;g=k+4|0;i=d+4|0;c[i>>2]=g;c[d>>2]=uH(g<<4)|0;g=((j-m|0)*3|0)+1|0;j=e+4|0;c[j>>2]=g;c[e>>2]=uH(g<<4)|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;r=(c[d>>2]|0)+(g<<4)|0;s=(c[a>>2]|0)+(g<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}g=g+-4|0;i=0;while(1){if((i|0)>=(c[j>>2]|0))break;s=(c[e>>2]|0)+(i<<4)|0;r=(c[a>>2]|0)+(g<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];g=g+1|0;i=i+1|0}q=+h[n+(m<<3)>>3];XL(o,(c[a>>2]|0)+(k<<4)|0,3,(b-f+q)/q,(c[d>>2]|0)+(k<<4)|0,c[e>>2]|0);D_(n)}l=p;return}function VF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;e=+h[a+16>>3];d=+h[a>>3]-e;f=+h[a+24>>3];b=+h[a+8>>3]-f;d=+C(+(b*b+d*d));b=+h[a+32>>3];e=e-b;c=+h[a+40>>3];f=f-c;d=+C(+(f*f+e*e))+d;b=b-+h[a+48>>3];c=c-+h[a+56>>3];return +(d+ +C(+(c*c+b*b)))}function WF(b,d){b=b|0;d=d|0;d=fz(d)|0;if((a[(c[d+16>>2]|0)+115>>0]|0)==1)d=RM(b)|0;else d=OM(b,d)|0;return bG(d)|0}function XF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+1664|0;m=q+1600|0;n=q+800|0;o=q;p=vH(24)|0;c[p+16>>2]=1;j=((c[e+4>>2]|0)+-1|0)/3|0;h=0;i=p;while(1){if((h|0)>=(j|0))break;k=h*3|0;g=0;while(1){if((g|0)==4)break;r=m+(g<<4)|0;s=(c[e>>2]|0)+(g+k<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}h=h+1|0;i=YF(m,i)|0}g=0;h=0;i=p;while(1){if(!i){h=p;g=p;break}j=c[i+16>>2]|0;k=n+(g<<4)|0;e=o+(g<<4)|0;ZF(h,i,j,k,e,f);g=g+1|0;if(!((g|0)==50|(j|0)==0)){h=i;i=j;continue}_F(a,b,d,g,n,o);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];h=i;g=1;i=j}while(1){if(!h)break;s=c[h+16>>2]|0;D_(g);h=s;g=s}l=q;return}function YF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+144|0;f=g+128|0;d=g+64|0;e=g;if(!(ZE(a)|0)){XL(f,a,3,.5,d,e);d=YF(e,YF(d,b)|0)|0}else{d=b+16|0;if((c[d>>2]|0)==1){c[d>>2]=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2]}d=a+48|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=aG(f,b)|0}l=g;return d|0}function ZF(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;r=l;l=l+96|0;n=r+80|0;m=r+64|0;k=r+48|0;o=r+32|0;p=r+16|0;q=r;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];do if(a){c[p>>2]=c[a>>2];c[p+4>>2]=c[a+4>>2];c[p+8>>2]=c[a+8>>2];c[p+12>>2]=c[a+12>>2];if(!d){i=+h[o>>3];h[q>>3]=i*2.0-+h[p>>3];j=+h[o+8>>3];h[q+8>>3]=j*2.0-+h[p+8>>3];break}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];j=+h[o+8>>3];break}}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];h[p>>3]=i*2.0-+h[q>>3];j=+h[o+8>>3];h[p+8>>3]=j*2.0-+h[q+8>>3]}while(0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];t=+$F(k,m,n);s=+E(+t)*g;g=+F(+t)*g;h[e>>3]=i+s;h[e+8>>3]=j+g;h[f>>3]=i-s;h[f+8>>3]=j-g;l=r;return}function _F(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;i=e<<1;j=c[d>>2]|0;h=0;k=0;while(1){if((h|0)>=(j|0))break;l=(c[(c[b>>2]|0)+(h<<2)>>2]|0)+k|0;h=h+1|0;k=l}l=j+1|0;c[d>>2]=l;l=xH(c[b>>2]|0,l<<2)|0;c[b>>2]=l;c[l+(h<<2)>>2]=i;c[a>>2]=xH(c[a>>2]|0,k+i<<4)|0;b=i+-1+k|0;h=0;while(1){if((h|0)>=(e|0))break;l=(c[a>>2]|0)+(h+k<<4)|0;j=f+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];l=(c[a>>2]|0)+(b-h<<4)|0;j=g+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];h=h+1|0}return}function $F(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+h[b+8>>3];d=+h[b>>3];e=+K(+(+h[c+8>>3]-f),+(+h[c>>3]-d));d=+K(+(+h[a+8>>3]-f),+(+h[a>>3]-d));e=e-d;return +((e>0.0?e+-6.283185307179586:e)*.5+d)}function aG(a,b){a=a|0;b=b|0;var d=0;d=vH(24)|0;c[d+16>>2]=0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b+16>>2]=d;return d|0}function bG(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;c=b;f=b;a:while(1){e=0;while(1){d=c;c=c+1|0;d=a[d>>0]|0;if(!(d<<24>>24))break a;if(e<<24>>24){g=5;break}if(d<<24>>24!=92)break;else e=1}b:do if((g|0)==5){g=0;switch(d<<24>>24|0){case 114:{d=13;break b}case 108:case 110:{d=10;break b}default:break b}}while(0);a[f>>0]=d;f=f+1|0}a[f>>0]=0;return b|0}function cG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;while(1){g=a[e>>0]|0;if(!(g<<24>>24)){f=0;break}f=g<<24>>24;if(!(g<<24>>24==44|(B$(f)|0)!=0)){h=5;break}e=e+1|0}a:do if((h|0)==5){switch(f|0){case 0:{f=0;break a}case 41:case 40:{e=e+1|0;break a}default:{}}h=d+4|0;i=d+8|0;while(1){if((dG(g<<24>>24)|0)<<24>>24){f=1;break a}f=c[h>>2]|0;if(f>>>0>=(c[i>>2]|0)>>>0){Uw(d,1)|0;f=c[h>>2]|0}c[h>>2]=f+1;a[f>>0]=g;f=e+1|0;e=f;g=a[f>>0]|0}}while(0);c[b>>2]=e;return f|0}function dG(a){a=a|0;switch(a|0){case 0:case 44:case 41:case 40:{a=1;break}default:a=0}return a|0}function eG(a,b){a=a|0;b=b|0;return fG(c[a>>2]|0,c[a+160>>2]|0,c[a+156>>2]|0,b)|0}function fG(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+160|0;k=o+20|0;m=o+16|0;n=o;c[k>>2]=0;c[m>>2]=0;Tw(n,128,o+24|0);Ww(n,f)|0;g=n+4|0;f=c[g>>2]|0;if(f>>>0>=(c[n+8>>2]|0)>>>0){Uw(n,1)|0;f=c[g>>2]|0}a[f>>0]=0;h=c[n>>2]|0;c[g>>2]=h;i=b+300|0;j=b+296|0;f=0;g=h;a:while(1){if(f){f=1;break}f=m1(g,c[i>>2]|0,k)|0;if(!f){f=0;break}g=m1(f,c[j>>2]|0,m)|0;h=(g|0)!=0;if(h)f=m1(0,c[j>>2]|0,m)|0;else f=0;switch(((f|0)!=0&1)+(h&1)&3){case 2:{g=gG(b,g,0)|0;f=gG(b,f,e)|0;h=(g|0)>(f|0);f=(f&g|0)>-1&(((h?g:f)|0)>=(d|0)&((h?f:g)|0)<=(d|0));g=0;continue a}case 1:{f=(gG(b,g,d)|0)==(d|0);g=0;continue a}default:{f=0;g=0;continue a}}}Xw(n);l=o;return f|0}function gG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=a[d>>0]|0;if(!(h<<24>>24==97?(b$(d,97370)|0)==0:0))f=3;a:do if((f|0)==3){if((hG(d)|0)<<24>>24){e=a2(d)|0;break}g=c[b+308>>2]|0;if(!g)e=-1;else{b=c[b+312>>2]|0;e=1;while(1){if((e|0)>(b|0)){e=-1;break a}f=c[g+(e<<2)>>2]|0;if(h<<24>>24==(a[f>>0]|0)?(b$(d,f)|0)==0:0)break a;e=e+1|0}}}while(0);return e|0}function hG(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=1;break}if(((c&255)+-48|0)>>>0<10)b=b+1|0;else{b=0;break}}return b|0}function iG(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function jG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c[b+156>>2]|0)>=2?(f=NL(e,c[46397]|0,191979)|0,(eG(b,f)|0)<<24>>24==0):0)if(!(a[f>>0]|0))if(!(Jx(d,e)|0))f=1;else{f=Jx(d,e)|0;while(1){if(!f){f=0;break a}g=NL(f,c[46420]|0,191979)|0;if(!(a[g>>0]|0)){f=1;break a}if((eG(b,g)|0)<<24>>24){f=1;break a}f=Kx(d,f,e)|0}}else f=0;else f=1;while(0);return f|0}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+64|0;e=d+32|0;f=d;a=(c[a+16>>2]|0)+48|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[f+16>>2]=c[a+16>>2];c[f+20>>2]=c[a+20>>2];c[f+24>>2]=c[a+24>>2];c[f+28>>2]=c[a+28>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];b=(iG(f,e)|0)&255;l=d;return b|0}function lG(a,d){a=a|0;d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0;r=c[a+152>>2]|0;s=NE(a)|0;c[s+4>>2]=2;c[s+8>>2]=d;c[s+12>>2]=8;if(r&16777216|0){if((e[(c[(ez(d)|0)+16>>2]|0)+178>>1]|0)>2){f=+h[(c[(c[d+16>>2]|0)+132>>2]|0)+16>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0)}else f=0.0;h[s+168>>3]=f}k=d+16|0;nG(a,c[(c[k>>2]|0)+104>>2]|0,d);do if(r&4259840|0){if((c[s+208>>2]|0)==0?(b[s+260>>1]&1)==0:0)break;p=HJ(d)|0;l=c[k>>2]|0;f=+h[l+16>>3];q=+h[l+24>>3];l=oG(d)|0;a:do if((p|2|0)==3){n=c[(c[k>>2]|0)+12>>2]|0;if(!((pG(n)|0)<<24>>24))g=0;else g=(c[n+4>>2]|l|0)!=0;if(!((r&524288|0)==0|((n|0)==0|g))){i=n+8|0;o=c[i>>2]|0;o=(o|0)<3?1:o;j=n+4|0;m=c[j>>2]|0;m=(m|0)>1?m:1;p=c[n+44>>2]|0;g=xx(d,99679)|0;if(!g)g=0;else g=a2(g)|0;g=(g+-4|0)>>>0>56?20:g;if(!(c[j>>2]|l)){c[s+264>>2]=0;i=uH(32)|0;g=c[k>>2]|0;v=+h[g+88>>3];h[i>>3]=f-v;u=+h[g+80>>3]*.5;h[i+8>>3]=q-u;h[i+16>>3]=v+f;h[i+24>>3]=u+q;g=2;break}i=c[i>>2]|0;if(((i|0)<3?+h[n+32>>3]==0.0:0)?+h[n+24>>3]==0.0:0){i=s+264|0;if(c[n>>2]|0){c[i>>2]=1;i=uH(32)|0;h[i>>3]=f;h[i+8>>3]=q;g=(m<<1)+-1|0;h[i+16>>3]=+h[p+(g<<4)>>3]+f;h[i+24>>3]=+h[p+(g<<4)+8>>3]+q;g=2;break}c[i>>2]=2;i=(m<<1)+-1|0;i=qG(+h[p+(i<<4)>>3],+h[p+(i<<4)+8>>3],g)|0;j=0;while(1){if((j|0)>=(g|0))break a;p=i+(j<<4)|0;h[p>>3]=+h[p>>3]+f;p=i+(j<<4)+8|0;h[p>>3]=+h[p>>3]+q;j=j+1|0}}m=O(i,m+-1|0)|0;c[s+264>>2]=2;if((i|0)<(g|0)){i=uH(o<<4)|0;g=0;while(1){if((g|0)>=(o|0)){g=o;break a}n=g+m|0;h[i+(g<<4)>>3]=+h[p+(n<<4)>>3]+f;h[i+(g<<4)+8>>3]=+h[p+(n<<4)+8>>3]+q;g=g+1|0}}else{l=(i|0)/(g|0)|0;i=uH(g<<4)|0;j=0;k=0;while(1){if((j|0)>=(g|0))break a;o=k+m|0;h[i+(j<<4)>>3]=+h[p+(o<<4)>>3]+f;h[i+(j<<4)+8>>3]=+h[p+(o<<4)+8>>3]+q;j=j+1|0;k=k+l|0}}}else t=31}else t=31;while(0);if((t|0)==31){c[s+264>>2]=0;i=uH(32)|0;g=c[k>>2]|0;h[i>>3]=f-+h[g+88>>3];v=+h[g+80>>3]*.5;h[i+8>>3]=q-v;h[i+16>>3]=+h[g+96>>3]+f;h[i+24>>3]=v+q;g=2}if(!(r&8192))yO(a,i,i,g)|0;c[s+272>>2]=i;c[s+268>>2]=g}while(0);qQ(xx(d,97006)|0);LO(a,d);return}function mG(a){a=a|0;MO(a);OE(a);return}function nG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m;f=xx(e,137973)|0;i=xx(e,138019)|0;k=xx(e,138006)|0;Tw(j,128,m+16|0);if(!d)h=0;else h=c[d>>2]|0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))f=xx(e,108395)|0;g=QE(b,e,j)|0;if(!i)d=0;else d=WF(i,e)|0;PE(b,h,f,d,k,g,e)|0;D_(d);Xw(j);l=m;return}function oG(b){b=b|0;var d=0,e=0;b=OL(b,c[46387]|0,191979)|0;a:do if(!(a[b>>0]|0))b=0;else{AF(b)|0;b=0;d=185144;while(1){e=c[d>>2]|0;if(!e)break a;e=(b$(e,108075)|0)==0;b=e?1:b;d=d+4|0}}while(0);return b|0}function pG(a){a=a|0;var b=0.0;if(((c[a+8>>2]|0)==4?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function qG(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0,f=0.0,g=0;f=6.283185307179586/+(c|0);g=uH(c<<4)|0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;h[g+(e<<4)>>3]=+E(+d)*a;h[g+(e<<4)+8>>3]=+F(+d)*b;d=d+f;e=e+1|0}return g|0}function rG(b,d){b=b|0;d=d|0;var e=0;a:do if((c[b+156>>2]|0)>=2?(e=NL(d,nx(d,0,98484,0)|0,191979)|0,(eG(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=Sy(d)|0;while(1){if(!e){e=0;break a}if((jG(b,d,e)|0)<<24>>24){e=1;break a}e=Ty(d,e)|0}}else e=0;else e=1;while(0);return e|0}function sG(a,b){a=a|0;b=b|0;var d=0;d=NE(a)|0;c[d+4>>2]=1;c[d+8>>2]=b;c[d+12>>2]=1;nG(a,c[(c[b+16>>2]|0)+12>>2]|0,b);FO(a,b);return}function tG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;b=xx(b,138e3)|0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){AF(b)|0;e=185144;b=0;while(1){while(1){f=c[e>>2]|0;if(!f){e=185144;break a}if(!(b$(f,108075)|0)){g=10;break}if(!(b$(f,103308)|0)){f=e;g=12;break}if(!(b$(f,103315)|0)){f=e;g=14;break}if(!(b$(f,103290)|0)){f=e;g=16;break}e=e+4|0}if((g|0)==10){e=e+4|0;b=b|1;continue}else if((g|0)==12){while(1){h=f;f=f+4|0;g=c[f>>2]|0;c[h>>2]=g;if(!g)break;else g=12}b=b|3;continue}else if((g|0)==14){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=14}b=b|64;continue}else if((g|0)==16){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=16}b=b|4;continue}}}else{e=0;b=0}while(0);c[d>>2]=b;return e|0}function uG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;i=k;j=k+4|0;c[j>>2]=0;m=(TE(b,0,j)|0)==0;j=c[j>>2]|0;if((m?(f=c[j>>2]|0,(f|0)>=2):0)?(h=j+8|0,(c[c[h>>2]>>2]|0)!=0):0){if((f|0)>2)Pw(0,97389,i)|0;m=vH((W_(b)|0)+1|0)|0;c[d>>2]=m;b0(m,c[c[h>>2]>>2]|0)|0;if(!(c[(c[h>>2]|0)+12>>2]|0))c[d+4>>2]=0;else{m=c[d>>2]|0;m=m+((W_(m)|0)+1)|0;c[d+4>>2]=m;b0(m,c[(c[h>>2]|0)+12>>2]|0)|0}b=c[h>>2]|0;do if(!(a[b+8>>0]|0))if(!(a[b+20>>0]|0)){g[e>>2]=0.0;break}else{g[e>>2]=1.0-+g[b+16>>2];break}else c[e>>2]=c[b+4>>2];while(0);UE(j);b=1}else{c[d>>2]=0;UE(j);b=0}l=k;return b|0}function vG(a,b){a=a|0;b=b|0;GO(a,b);OE(a);return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;p=x+48|0;s=x+16|0;w=x+8|0;v=x;t=x+80|0;c[t>>2]=1e3;f=vH(16e3)|0;u=a+256|0;e=1;j=1;i=0;q=0;r=c[b+8>>2]|0;while(1){if((q|0)>=(c[b>>2]|0))break;d=c[r>>2]|0;a:do switch(d|0){case 1:case 0:{n=r+80|0;c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];c[s+16>>2]=c[n+16>>2];c[s+20>>2]=c[n+20>>2];c[s+24>>2]=c[n+24>>2];c[s+28>>2]=c[n+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{z=r+8|0;A=r+24|0;h[f>>3]=+h[z>>3]-+h[A>>3];n=r+16|0;y=r+32|0;h[f+8>>3]=+h[n>>3]-+h[y>>3];h[f+16>>3]=+h[A>>3]+ +h[z>>3];h[f+24>>3]=+h[y>>3]+ +h[n>>3];ZO(a,f,2,(d|0)==0?j:0);d=j}break}case 3:case 2:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{d=r+8|0;f=xG(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;_O(a,f,c[d>>2]|0,(c[r>>2]|0)==2?j:0);d=j}break}case 5:case 4:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{d=r+8|0;f=xG(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;aP(a,f,c[d>>2]|0,0,0,(c[r>>2]|0)==4?j&255:0);d=j}break}case 6:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{d=r+8|0;f=xG(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;bP(a,f,c[d>>2]|0);d=j}break}case 7:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{h[f>>3]=+h[r+8>>3];h[f+8>>3]=+h[r+16>>3];d=c[r+112>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];TO(a,p,d);d=j}break}case 8:{WO(a,c[r+8>>2]|0);d=1;break}case 9:{UO(a,c[r+8>>2]|0);d=1;break}case 13:{if((c[r+8>>2]|0)!=2){d=r+16|0;z=c[d+36>>2]|0;A=c[z+12>>2]|0;o=+g[z+8>>2];d=~~(+K(+(+h[r+40>>3]-+h[r+24>>3]),+(+h[r+32>>3]-+h[d>>3]))*57.29577951308232);WO(a,c[z+4>>2]|0);XO(a,A,d,o);d=2;break a}A=c[r+68>>2]|0;j=c[A+4>>2]|0;n=c[A+12>>2]|0;o=+g[A+8>>2];k=+h[r+40>>3];m=+h[r+16>>3];if(k==m?+h[r+48>>3]==+h[r+24>>3]:0)d=0;else d=~~(+H(+((m-k)/+h[r+32>>3]))*57.29577951308232);WO(a,j);XO(a,n,d,o);d=3;break}case 14:{Pw(0,97455,v)|0;d=j;break}case 12:{if(!e){e=0;d=j}else{Pw(0,97495,w)|0;e=0;d=j}break}case 11:{AF(c[r+8>>2]|0)|0;YO(a,185144);i=185144;d=j;break}default:d=j}while(0);j=d;q=q+1|0;r=r+120|0}if(i|0)YO(a,c[(c[a>>2]|0)+336>>2]|0);D_(f);l=x;return}function xG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[b>>2]|0;f=g<<1;f=(f|0)>(e|0)?f:e;if((g|0)<(e|0)){a=xH(a,f<<4)|0;c[b>>2]=f}b=0;while(1){if((b|0)>=(e|0))break;h[a+(b<<4)>>3]=+h[d+(b*24|0)>>3];h[a+(b<<4)+8>>3]=+h[d+(b*24|0)+8>>3];b=b+1|0}return a|0}function yG(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=c[b+4>>2];c[a+4>>2]=d;return}function zG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+16|0;f=1;while(1){d=c[g>>2]|0;if((f|0)>(c[d+180>>2]|0))break;e=c[(c[d+184>>2]|0)+(f<<2)>>2]|0;zG(b,e);d=xx(e,137741)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(e,134647)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(e,137895)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(e,98392)|0;if(d|0?a[d>>0]|0:0)WO(b,d);d=xx(e,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);f=f+1|0}return}function AG(a){a=a|0;var b=0,d=0,e=0;b=c[46356]|0;if(!b){b=Cw(20524,c[4555]|0)|0;c[46356]=b}if(!(nb[c[b>>2]&63](b,a,4)|0)){d=c[46356]|0;e=c[d>>2]|0;b=n1(a)|0;nb[e&63](d,b,1)|0;b=1}else b=0;return b|0}function BG(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function CG(a){a=a|0;var b=0;b=c[46357]|0;if(!a){if((b|0)>0?(b=b+-1|0,c[46357]=b,(b|0)==0):0){J0(1,c[46358]|0)|0;D_(c[46358]|0)}}else{c[46357]=b+1;if(!b){c[46358]=n1(J0(1,0)|0)|0;J0(1,150481)|0}}return}function DG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+96|0;r=u+72|0;q=u+56|0;p=u+48|0;t=u+32|0;s=u+24|0;e=u+8|0;d=u;if(0)EL();do if((Az(b,134401,0,1)|0)!=0?(o=b+16|0,(c[(c[o>>2]|0)+8>>2]|0)!=0):0){EG(b);FG(a,b);GG(a,b);CG(1);j=a+56|0;k=a+184|0;m=a+192|0;n=a+28|0;i=pC(a)|0;a:while(1){if(!i){g=33;break}d=c[j>>2]|0;if(!d){c[i+20>>2]=0;d=0}else{c[i+20>>2]=c[d+8>>2];d=c[d+12>>2]|0}c[i+24>>2]=d;c[i+12>>2]=a;c[i+28>>2]=c[k>>2];c[i+620>>2]=25660;c[i+624>>2]=14;if(!(c[(c[o>>2]|0)+8>>2]|0)){g=13;break}e=i+52|0;g=uO(i,c[e>>2]|0)|0;c[i+56>>2]=g;switch(g|0){case 999:{g=16;break a}case 21:{d=1;break}case 24:{d=520;break}default:d=HG(b)|0}f=i+152|0;c[f>>2]=c[f>>2]|d;d=c[m>>2]|0;do if(!d)g=24;else{if(c[d+152>>2]&32|0?(b$(c[e>>2]|0,c[d+52>>2]|0)|0)==0:0){d=c[46359]|0;if(!d){g=27;break}c[d+8>>2]=i;c[i+36>>2]=c[d+36>>2];g=29;break}wO(d);c[m>>2]=0;c[n>>2]=0;g=24}while(0);if((g|0)==24){c[46359]=0;g=27}if((g|0)==27?(g=0,(vO(i)|0)==0):0){c[m>>2]=i;g=29}if((g|0)==29){c[i+8>>2]=0;c[i+104>>2]=25772;IG(i);JG(i);KG(i,b);LG(i,b);MG(i,b);if(!(c[f>>2]&128))dF(i,b);c[46359]=i}i=qC(a)|0}if((g|0)==13){Pw(1,97653,s)|0;CG(0);if(!0){d=-1;break}d=c[15686]|0;s=ry(b)|0;v=+FL();c[t>>2]=s;h[t+8>>3]=v;g1(d,97624,t)|0;d=-1;break}else if((g|0)==16){c[p>>2]=c[e>>2];Pw(1,97674,p)|0;CG(0);if(!0){d=-1;break}d=c[15686]|0;t=ry(b)|0;v=+FL();c[q>>2]=t;h[q+8>>3]=v;g1(d,97624,q)|0;d=-1;break}else if((g|0)==33){CG(0);if(!0){d=0;break}d=c[15686]|0;t=ry(b)|0;v=+FL();c[r>>2]=t;h[r+8>>3]=v;g1(d,97624,r)|0;d=0;break}}else g=5;while(0);if((g|0)==5){Pw(1,97576,d)|0;if(!0)d=-1;else{d=c[15686]|0;t=ry(b)|0;v=+FL();c[e>>2]=t;h[e+8>>3]=v;g1(d,97624,e)|0;d=-1}}l=u;return d|0}function EG(a){a=a|0;var b=0;b=Sy(a)|0;while(1){if(!b)break;RG(a,b);b=Ty(a,b)|0}return}function FG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+24|0;f=o+16|0;j=o+8|0;n=o;c[b+168>>2]=d;g=b+293|0;a[g>>0]=0;e=xx(d,102470)|0;if(e|0?(c[f>>2]=j,c[f+4>>2]=n,i=N1(e,102477,f)|0,(i|0)>0):0){p=+h[j>>3]*72.0;e=b+208|0;h[e>>3]=p;h[b+200>>3]=p;if((i|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[g>>0]=1}f=b+292|0;a[f>>0]=0;e=xx(d,98076)|0;if(e|0?(c[k>>2]=j,c[k+4>>2]=n,m=N1(e,102477,k)|0,(m|0)>0):0){p=+h[j>>3]*72.0;e=b+224|0;h[e>>3]=p;h[b+216>>3]=p;if((m|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[f>>0]=1}e=b+294|0;a[e>>0]=0;f=b+232|0;g=d+16|0;n=(c[(c[g>>2]|0)+8>>2]|0)+48|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];f=c[(c[g>>2]|0)+8>>2]|0;if(+h[f+48>>3]>.001?+h[f+56>>3]>.001:0)a[e>>0]=1;c[b+288>>2]=a[f+81>>0]|0?90:0;e=b+196|0;c[e>>2]=98080;f=xx(d,98083)|0;if(f|0?a[f>>0]|0:0)c[e>>2]=f;n=b+256|0;m=(c[g>>2]|0)+16|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=c[m+20>>2];c[n+24>>2]=c[m+24>>2];c[n+28>>2]=c[m+28>>2];c[46371]=nx(d,0,98446,0)|0;c[46372]=nx(d,0,98437,0)|0;c[b+320>>2]=OL(0,c[46381]|0,104968)|0;h[b+328>>3]=+LL(0,c[46380]|0,14.0,1.0);c[b+336>>2]=20560;c[b+188>>2]=ry(d)|0;l=o;return}function GG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+304|0;f=c[e>>2]|0;if(f|0){D_(f);c[e>>2]=0}f=b+308|0;e=c[f>>2]|0;if(e|0){D_(e);c[f>>2]=0}g=b+316|0;e=c[g>>2]|0;if(e|0){D_(e);c[g>>2]=0}e=xx(d,97827)|0;if(e){c[b+312>>2]=PG(b,d,e)|0;e=xx(d,97834)|0;if(e|0?a[e>>0]|0:0)c[g>>2]=QG(b,e)|0}else{c[f>>2]=0;c[b+312>>2]=1}return}function HG(b){b=b|0;b=xx(b,97795)|0;a:do if(!b)b=0;else switch(a[b>>0]|0){case 110:{if(!(b$(b+1|0,97807)|0))b=1;else{b=0;break a}break}case 101:{if(!(b$(b+1|0,97817)|0))b=16;else{b=0;break a}break}default:{b=0;break a}}while(0);return b|0}function IG(b){b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(!(a[e+292>>0]|0)){if((c[b+56>>2]|0)==300)d=+h[(c[b+68>>2]|0)+8>>3];else d=4.0;h[b+248>>3]=d;h[b+240>>3]=d}else{b=b+240|0;e=e+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}return}function JG(b){b=b|0;var d=0;d=c[b>>2]|0;a:do if(!(a[d+293>>0]|0))switch(c[b+56>>2]|0){case 300:{d=b+416|0;b=(c[b+84>>2]|0)+8|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break a}case 30:case 21:case 22:case 4:case 3:case 2:{h[b+424>>3]=36.0;h[b+416>>3]=36.0;break a}default:{d=b+416|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;break a}}else{b=b+416|0;d=d+200|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2]}while(0);return}function KG(b,d){b=b|0;d=d|0;var e=0.0,f=0;f=c[(c[b>>2]|0)+192>>2]|0;e=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];do if(!(e!=0.0)){if(f|0?a[f+128>>0]|0:0){b=b+432|0;f=f+112|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];break}d=b+432|0;if((c[b+56>>2]|0)==300){b=(c[b+84>>2]|0)+40|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break}else{h[b+440>>3]=96.0;h[d>>3]=96.0;break}}else{h[b+440>>3]=e;h[b+432>>3]=e}while(0);return}function LG(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;t=A+80|0;u=A+56|0;s=A+40|0;v=A+32|0;w=A+24|0;x=A+16|0;y=A+8|0;z=A;m=c[b>>2]|0;o=+h[m+272>>3];q=+h[m+280>>3];p=+h[m+256>>3];r=+h[m+264>>3];f=+h[b+240>>3];e=p-f;h[b+208>>3]=e;i=+h[b+248>>3];j=r-i;h[b+216>>3]=j;f=f+o;h[b+224>>3]=f;i=i+q;h[b+232>>3]=i;e=f-e;j=i-j;h[x>>3]=1.0;g=c[(c[d+16>>2]|0)+8>>2]|0;i=+h[g+64>>3];do if(i>.001?(k=+h[g+72>>3],k>.001):0){e=e==0.0?i:e;f=j==0.0?k:j;if(!(if&(i>e&(a[g+80>>0]|0)!=0)):0){k=e;j=f;i=1.0;break}n=i/e>3]=i;k=e;j=f}else{k=e;i=1.0}while(0);f=(p+o)*.5;h[y>>3]=f;e=(r+q)*.5;h[z>>3]=e;c[b+360>>2]=c[m+288>>2];k=i*k;h[v>>3]=k;j=i*j;h[w>>3]=j;g=xx(d,97726)|0;if(g){m=C_((W_(g)|0)+1|0)|0;n=C_((W_(g)|0)+1|0)|0;c[s>>2]=v;c[s+4>>2]=w;c[s+8>>2]=x;c[s+12>>2]=m;do if((N1(g,97735,s)|0)==4){g=az(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}else{c[u>>2]=v;c[u+4>>2]=w;c[u+8>>2]=x;c[u+12>>2]=m;c[u+16>>2]=n;if((N1(g,97755,u)|0)!=4){c[t>>2]=v;c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=y;c[t+16>>2]=z;N1(g,97775,t)|0;break}g=az(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}while(0);D_(m);D_(n);k=+h[v>>3];j=+h[w>>3];i=+h[x>>3];f=+h[y>>3];e=+h[z>>3]}h[b+368>>3]=k;h[b+376>>3]=j;h[b+352>>3]=i;h[b+336>>3]=f;h[b+344>>3]=e;l=A;return}function MG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0.0;M=l;l=l+224|0;J=M+200|0;z=M+168|0;E=M+144|0;I=M+120|0;F=M+96|0;G=M+64|0;e=M+184|0;v=M+176|0;w=M+160|0;y=M+136|0;x=M+112|0;A=M+80|0;B=M+48|0;C=M+32|0;D=M+16|0;K=M+8|0;L=M;u=c[b>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;H=b+368|0;c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];H=b+360|0;if(c[H>>2]|0){c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];NG(e,J);c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2]}t=b+416|0;c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];if((a[u+294>>0]|0)!=0?(c[b+152>>2]&32|0)!=0:0){i=+h[u+232>>3]-+h[F>>3]*2.0;h[E>>3]=i;k=+h[u+240>>3]-+h[F+8>>3]*2.0;p=E+8|0;h[p>>3]=k;if(!(i<.0001)){o=+h[I>>3];e=~~(o/i);f=b+164|0;c[f>>2]=e;if(o-i*+(e|0)>.0001){e=e+1|0;c[f>>2]=e}}else{c[b+164>>2]=1;e=1}if(!(k<.0001)){g=+h[I+8>>3];f=~~(g/k);j=b+168|0;c[j>>2]=f;if(g-k*+(f|0)>.0001){f=f+1|0;c[j>>2]=f}}else{c[b+168>>2]=1;f=1;g=+h[I+8>>3]}c[b+204>>2]=O(f,e)|0;o=+h[(+h[I>>3]>3];h[I>>3]=o;e=p;f=I;m=+h[(g>3];g=o;j=21}else{if(c[b+68>>2]|0){e=c[b+84>>2]|0;i=+h[e+24>>3]-+h[F>>3]*2.0;i=i<0.0?0.0:i;h[E>>3]=i;o=+h[e+32>>3]-+h[F+8>>3]*2.0;e=E+8|0;h[e>>3]=o;if(o<0.0){f=E;j=17}else e=E}else{h[E+8>>3]=0.0;f=E;e=E;j=17}if((j|0)==17){h[e>>3]=0.0;e=f;i=+h[f>>3]}c[b+204>>2]=1;c[b+168>>2]=1;c[b+164>>2]=1;g=+h[I>>3];if(i>3]=g;i=g}e=E+8|0;k=+h[e>>3];m=+h[I+8>>3];if(k>3]=m;r=e;m=+h[e>>3]}n=+h[F>>3];s=b+432|0;k=+h[s>>3]*.013888888888888888*(n*2.0+i);c[b+448>>2]=~~(k+(k>=0.0?.5:-.5));q=F+8|0;k=+h[q>>3];t=b+440|0;o=+h[t>>3]*.013888888888888888*(k*2.0+m);c[b+452>>2]=~~(o+(o>=0.0?.5:-.5));j=b+188|0;p=b+180|0;e=b+172|0;f=u+196|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;OG(v,b,a[c[f>>2]>>0]|0);u=v;v=c[u+4>>2]|0;e=p;c[e>>2]=c[u>>2];c[e+4>>2]=v;OG(w,b,a[(c[f>>2]|0)+1>>0]|0);e=w;w=c[e>>2]|0;e=c[e+4>>2]|0;v=j;c[v>>2]=w;c[v+4>>2]=e;w=(c[p>>2]|0)+w|0;if(!((((w|0)>-1?w:0-w|0)|0)==1?(w=(c[b+184>>2]|0)+e|0,(((w|0)>-1?w:0-w|0)|0)==1):0)){OG(y,b,66);v=y;y=c[v+4>>2]|0;w=p;c[w>>2]=c[v>>2];c[w+4>>2]=y;OG(x,b,76);w=x;x=c[w+4>>2]|0;y=j;c[y>>2]=c[w>>2];c[y+4>>2]=x;c[z>>2]=c[f>>2];Pw(0,97706,z)|0}if(a[(c[(c[d+16>>2]|0)+8>>2]|0)+82>>0]|0){if(i>g){m=(i-g)*.5;h[G>>3]=m}else m=0.0;i=+h[r>>3];o=+h[I+8>>3];if(i>o){i=(i-o)*.5;h[G+8>>3]=i}else i=0.0}else{i=0.0;m=0.0}if(!(c[H>>2]|0))j=1;else{c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];NG(A,J);c[I>>2]=c[A>>2];c[I+4>>2]=c[A+4>>2];c[I+8>>2]=c[A+8>>2];c[I+12>>2]=c[A+12>>2];c[J>>2]=c[E>>2];c[J+4>>2]=c[E+4>>2];c[J+8>>2]=c[E+8>>2];c[J+12>>2]=c[E+12>>2];NG(B,J);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];NG(C,J);c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];NG(D,J);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];n=+h[F>>3];m=+h[G>>3];k=+h[q>>3];i=+h[G+8>>3];g=+h[I>>3];j=(c[H>>2]|0)==0}o=m+n;h[b+384>>3]=o;P=i+k;h[b+392>>3]=P;N=m+n+g;h[b+400>>3]=N;Q=+h[I+8>>3];n=i+k+Q;h[b+408>>3]=n;m=+h[b+352>>3];h[b+320>>3]=g/m;h[b+328>>3]=Q/m;m=+h[s>>3];o=o*.013888888888888888*m;f=b+456|0;c[f>>2]=~~(o+(o>=0.0?.5:-.5));o=+h[t>>3];k=P*.013888888888888888*o;c[b+460>>2]=~~(k+(k>=0.0?.5:-.5));m=N*.013888888888888888*m;e=b+464|0;c[e>>2]=~~(m+(m>=0.0?.5:-.5));o=n*.013888888888888888*o;c[b+468>>2]=~~(o+(o>=0.0?.5:-.5));if(!j){c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];yG(K,J);I=K;K=c[I+4>>2]|0;b=f;c[b>>2]=c[I>>2];c[b+4>>2]=K;c[J>>2]=c[e>>2];c[J+4>>2]=c[e+4>>2];yG(L,J);b=L;K=c[b+4>>2]|0;L=e;c[L>>2]=c[b>>2];c[L+4>>2]=K}l=M;return}function NG(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b>>3];h[a>>3]=+h[b+8>>3];h[a+8>>3]=c;return}function OG(a,b,d){a=a|0;b=b|0;d=d|0;d=(d<<24>>24)+-66|0;switch(d>>>1|d<<31|0){case 9:{c[b+176>>2]=(c[b+168>>2]|0)+-1;b=0;d=-1;break}case 0:{b=0;d=1;break}case 5:{b=1;d=0;break}case 8:{c[b+172>>2]=(c[b+164>>2]|0)+-1;b=-1;d=0;break}default:{b=0;d=0}}c[a>>2]=b;c[a+4>>2]=d;return}function PG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;f=xx(d,97947)|0;i=b+296|0;c[i>>2]=(f|0)==0?97956:f;d=xx(d,97960)|0;f=b+300|0;d=(d|0)==0?97973:d;c[f>>2]=d;d=q1(c[i>>2]|0,d)|0;if(d|0){c[g>>2]=a[d>>0];Pw(0,97975,g)|0;c[f>>2]=191979}d=n1(e)|0;c[b+304>>2]=d;h=b+308|0;f=0;b=0;while(1){e=k1(d,c[i>>2]|0)|0;if(!e)break;g=b+1|0;if((b|0)<(f|0))d=c[h>>2]|0;else{f=f+128|0;d=c[h>>2]|0;if(!d)d=vH(f<<2)|0;else d=xH(d,f<<2)|0;c[h>>2]=d}c[d+(g<<2)>>2]=e;b=g;d=0}if(b|0){i=xH(c[h>>2]|0,(b<<2)+8|0)|0;c[h>>2]=i;c[i>>2]=0;c[(c[h>>2]|0)+(b+1<<2)>>2]=0}l=j;return b|0}function QG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=a+312|0;d=vH((c[i>>2]<<2)+8|0)|0;e=0;h=1;while(1){g=c[i>>2]|0;if((h|0)>(g|0))break;f=e+1|0;if((fG(a,h,g,b)|0)<<24>>24){c[d+(f<<2)>>2]=h;e=f}h=h+1|0}if(!e){c[j>>2]=b;Pw(0,97846,j)|0;D_(d);d=0}else{c[d>>2]=e;c[d+(e+1<<2)>>2]=(c[i>>2]|0)+1}l=k;return d|0}function RG(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0;d=c[b+16>>2]|0;g=+h[d+16>>3];h[d+48>>3]=g-+h[d+88>>3];e=+h[d+24>>3];f=+h[d+80>>3]*.5;h[d+56>>3]=e-f;h[d+64>>3]=+h[d+96>>3]+g;h[d+72>>3]=f+e;b=Ex(a,b)|0;while(1){if(!b)break;SG(b);b=Gx(a,b)|0}return}function SG(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a|0)TG(a);return}function TG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=l;l=l+240|0;v=C+192|0;u=C+176|0;w=C+64|0;x=C+32|0;y=C;z=C+144|0;A=C+112|0;B=a+4|0;if((c[B>>2]|0)<=0)qa(98114,96880,3994,98128);b=c[a>>2]|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));UG(x,v);i=x+8|0;j=y+8|0;k=x+16|0;m=y+16|0;n=x+24|0;o=y+24|0;p=w+8|0;q=w+12|0;r=w+32|0;s=w+4|0;t=w+16|0;g=0;while(1){if((g|0)>=(c[B>>2]|0))break;if((g|0)>0){b=(c[a>>2]|0)+(g*48|0)|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));UG(y,v);h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[p>>2]|0;if(b|0){f=c[w>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];JE(z,u,v,1.0,b);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[q>>2]|0;if(b|0){f=(c[w>>2]|0)+((c[s>>2]|0)+-1<<4)|0;c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];JE(A,u,v,1.0,b);c[y>>2]=c[A>>2];c[y+4>>2]=c[A+4>>2];c[y+8>>2]=c[A+8>>2];c[y+12>>2]=c[A+12>>2];c[y+16>>2]=c[A+16>>2];c[y+20>>2]=c[A+20>>2];c[y+24>>2]=c[A+24>>2];c[y+28>>2]=c[A+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}g=g+1|0}B=a+8|0;c[B>>2]=c[x>>2];c[B+4>>2]=c[x+4>>2];c[B+8>>2]=c[x+8>>2];c[B+12>>2]=c[x+12>>2];c[B+16>>2]=c[x+16>>2];c[B+20>>2]=c[x+20>>2];c[B+24>>2]=c[x+24>>2];c[B+28>>2]=c[x+28>>2];l=C;return}function UG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;n=l;l=l+48|0;i=n+32|0;j=n;k=c[b+4>>2]|0;if((k|0)<=0)qa(98144,96880,3968,98156);if(((k>>>0)%3|0|0)!=1)qa(98166,96880,3969,98156);m=j+16|0;d=c[b>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];e=i+8|0;f=j+8|0;g=j+24|0;b=1;while(1){if((b|0)>=(k|0))break;p=+h[d+(b<<4)+8>>3];t=b+1|0;o=+h[d+(t<<4)+8>>3];r=(+h[d+(t<<4)>>3]+ +h[d+(b<<4)>>3])*.5;h[i>>3]=r;p=(o+p)*.5;h[e>>3]=p;o=+h[(+h[j>>3]>3];h[j>>3]=o;s=+h[(+h[f>>3]>3];h[f>>3]=s;r=+h[(+h[m>>3]>r?m:i)>>3];h[m>>3]=r;p=+h[(+h[g>>3]>p?m:i)+8>>3];h[g>>3]=p;t=d+(b+2<<4)|0;c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];q=+h[i>>3];h[j>>3]=+h[(o>3];o=+h[e>>3];h[f>>3]=+h[(s>3];h[m>>3]=+h[(r>q?m:i)>>3];h[g>>3]=+h[(p>o?m:i)+8>>3];b=b+3|0}c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];c[a+16>>2]=c[j+16>>2];c[a+20>>2]=c[j+20>>2];c[a+24>>2]=c[j+24>>2];c[a+28>>2]=c[j+28>>2];l=n;return}function VG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;q=+h[a>>3];r=+h[c>>3];k=!(q>=r);if((!k?q<=+h[c+16>>3]:0)?(e=+h[a+8>>3],e>=+h[c+8>>3]):0)i=e<=+h[c+24>>3];else i=0;e=+h[b>>3];if((e>=r?e<=+h[c+16>>3]:0)?(f=+h[b+8>>3],f>=+h[c+8>>3]):0){d=f<=+h[c+24>>3];if(!(i^d))if(i&d)d=1;else l=11;else d=0}else if(i)d=0;else l=11;a:do if((l|0)==11){p=+h[a+8>>3];do if(q==e){r=+h[c+8>>3];if(!(k|p>=r^+h[b+8>>3]>=r^1)?q<=+h[c+16>>3]:0){d=0;break a}}else{j=+h[b+8>>3];if(p==j){if(!(q>=r^e>=r))break;if(!(p>=+h[c+8>>3]))break;if(!(p<=+h[c+24>>3]))break;else{d=0;break a}}o=(j-p)/(e-q);l=q>3];if(!(!(r>=g)|!(r<=e)|!(f>=m))?f<=+h[c+24>>3]:0){d=0;break a}n=+h[c+16>>3];f=(n-r)*o+f;if(f>=m?!(!(n<=e)|(n>=g?!(f<=+h[c+24>>3]):1)):0){d=0;break a}l=p=r?!(!(m<=f)|(!(m>=g)|!(e<=n))):0){d=0;break a}p=+h[c+24>>3];q=(p-m)/o+e;if(q>=r?!(!(p<=f)|(!(p>=g)|!(q<=n))):0){d=0;break a}}while(0);d=-1}while(0);return d|0}function WG(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+48>>3]=c;h[a+40>>3]=+h[a+24>>3];h[a+56>>3]=+h[a+8>>3];h[b>>3]=+h[a>>3];return}function XG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;if((c[46360]|0)!=(d|0)){w$(+(d|0)*.15915494309189535,183248,183256);c[46360]=d}g=+h[b>>3];e=+h[22907];f=+h[b+8>>3];i=+h[22906];h[a>>3]=e*g-i*f;h[a+8>>3]=i*g+f*e;return}function YG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=g;e=-e;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ZG(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];YG(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];XG(a,f,d);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function ZG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=-g;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];YG(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ZG(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];XG(a,f,360-d|0);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function _G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[c>>3];d=+h[c+8>>3];f=d+ +h[b>>3];e=g+ +h[b+24>>3];d=d+ +h[b+16>>3];h[a>>3]=g+ +h[b+8>>3];h[a+8>>3]=f;h[a+16>>3]=e;h[a+24>>3]=d;return}function $G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;f=+h[a>>3];d=+h[b>>3]-f;g=+h[a+8>>3];e=+h[b+8>>3]-g;f=(+h[c+8>>3]-g)*d-(+h[c>>3]-f)*e;f=f*f;return +(f<1.0e-10?0.0:f/(e*e+d*d))}function aH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g+8|0;e=g;a=xx(a,b)|0;if(a|0?(c[f>>2]=e,(N1(a,98183,f)|0)>0):0)h[d>>3]=+h[e>>3];l=g;return}function bH(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;g=n+8|0;i=n;e=uH(96)|0;m=b+16|0;c[(c[m>>2]|0)+8>>2]=e;e=xx(b,98187)|0;if(!e){e=Ta(98196)|0;if(e|0)k=3}else k=3;if((k|0)==3)cb(98208,e|0,1)|0;e=(cH(b)|0)&255;a[(c[m>>2]|0)+115>>0]=e;if(0==0?(e=xx(b,98219)|0,c[46362]=e,(e|0)==0):0)c[46362]=c[46361];f=+LL(b,nx(b,0,98229,0)|0,0.0,0.0);h[c[(c[m>>2]|0)+8>>2]>>3]=f;e=xx(b,98237)|0;a:do if(!e)e=0;else{switch(a[e>>0]|0){case 76:{if(!(b$(e,98245)|0)){e=1;break a}break}case 66:{if(!(b$(e,98248)|0)){e=2;break a}break}case 82:{e=(b$(e,98251)|0)==0;e=e?3:0;break a}default:{e=0;break a}}e=0}while(0);c[(c[m>>2]|0)+116>>2]=e<<2|(d<<24>>24==0?0:e);f=+LL(b,nx(b,0,98254,0)|0,.25,.02);h[i>>3]=f;f=f*72.0;c[(c[m>>2]|0)+248>>2]=~~(f+(f>=0.0?.5:-.5));e=NL(b,nx(b,0,98262,0)|0,0)|0;if(e){c[g>>2]=i;if(N1(e,98183,g)|0){f=+h[i>>3];if(f<.02){h[i>>3]=.02;f=.02}}else{h[i>>3]=.5;f=.5}if(P0(e,98270)|0)a[(c[m>>2]|0)+276>>0]=1}else{h[i>>3]=.5;f=.5}f=f*72.0;c[(c[m>>2]|0)+252>>2]=~~(f+(f>=0.0?.5:-.5));i=(KL(b,nx(b,0,98278,0)|0,0,0)|0)&255;a[(c[m>>2]|0)+243>>0]=i;i=aM(NL(b,nx(b,0,98288,0)|0,0)|0,20572,20588)|0;c[(c[m>>2]|0)+244>>2]=i;dH(b);i=eH(b,98298,(c[(c[m>>2]|0)+8>>2]|0)+64|0)|0;e=c[(c[m>>2]|0)+8>>2]|0;a[e+80>>0]=i;eH(b,98303,e+48|0)|0;e=QL(xx(b,98308)|0)|0;a[(c[(c[m>>2]|0)+8>>2]|0)+82>>0]=e;e=xx(b,98315)|0;do if(!e){e=xx(b,98322)|0;if(e|0){e=(a[e>>0]|32)<<24>>24==108&1;k=27;break}e=xx(b,98334)|0;if(e|0){e=QL(e)|0;k=27}}else{e=(a2(e)|0)==90&1;k=27}while(0);if((k|0)==27)a[(c[(c[m>>2]|0)+8>>2]|0)+81>>0]=e;c[46364]=aM(xx(b,98344)|0,20604,20620)|0;a[191874]=QL(xx(b,98356)|0)|0;c[46367]=0;c[46368]=0;h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=0.0;e=xx(b,98368)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)k=32;else k=30;if(((k|0)==30?(j=xx(b,98372)|0,j|0):0)?a[j>>0]|0:0){e=j;k=32}if((k|0)==32){f=+b2(e);h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=f}fH(b);h[22910]=1.e+37;c[46370]=nx(b,0,98383,0)|0;c[46373]=nx(b,0,137952,0)|0;c[46374]=nx(b,0,102470,0)|0;c[46375]=nx(b,1,137966,0)|0;c[46376]=nx(b,1,138034,0)|0;c[46377]=nx(b,1,105204,0)|0;c[46378]=nx(b,1,137741,0)|0;c[46379]=nx(b,1,98392,0)|0;c[46387]=nx(b,1,138e3,0)|0;c[46380]=nx(b,1,98402,0)|0;c[46381]=nx(b,1,98411,0)|0;c[46382]=nx(b,1,98420,0)|0;k=nx(b,1,105198,0)|0;c[46384]=k;if(!k)c[46384]=nx(b,1,105198,102467)|0;c[46385]=nx(b,1,98430,0)|0;c[46388]=nx(b,1,98278,0)|0;c[46402]=nx(b,1,98437,0)|0;c[46391]=nx(b,1,98383,0)|0;c[46383]=nx(b,1,102470,0)|0;c[46389]=nx(b,1,137994,0)|0;c[46390]=nx(b,1,98446,0)|0;c[46393]=nx(b,1,98458,0)|0;c[46392]=nx(b,1,98322,0)|0;c[46394]=nx(b,1,98463,0)|0;c[46395]=nx(b,1,137942,0)|0;c[46396]=nx(b,1,134215,0)|0;c[46386]=nx(b,1,98474,0)|0;c[46397]=nx(b,1,98484,0)|0;c[46398]=nx(b,1,98490,0)|0;c[46399]=nx(b,1,98496,0)|0;c[46400]=nx(b,1,98504,0)|0;c[46401]=nx(b,1,98513,0)|0;c[46403]=nx(b,1,137952,0)|0;c[46404]=nx(b,2,98515,0)|0;c[46406]=nx(b,2,137741,0)|0;c[46407]=nx(b,2,98392,0)|0;c[46409]=nx(b,2,98402,0)|0;c[46410]=nx(b,2,98411,0)|0;c[46411]=nx(b,2,98420,0)|0;c[46412]=nx(b,2,105198,0)|0;c[46413]=nx(b,2,98430,0)|0;c[46422]=nx(b,2,98522,0)|0;c[46414]=nx(b,2,98533,0)|0;c[46425]=nx(b,2,98537,0)|0;c[46426]=nx(b,2,98547,0)|0;c[46427]=nx(b,2,98557,0)|0;c[46428]=nx(b,2,98567,0)|0;c[46429]=nx(b,2,98577,0)|0;c[46430]=nx(b,2,98591,0)|0;c[46431]=nx(b,2,98605,0)|0;c[46432]=nx(b,2,98620,0)|0;c[46433]=nx(b,2,98634,0)|0;c[46405]=nx(b,2,98645,0)|0;c[46417]=nx(b,2,98278,0)|0;c[46415]=nx(b,2,138e3,0)|0;c[46416]=nx(b,2,98652,0)|0;c[46418]=nx(b,2,98661,0)|0;c[46419]=nx(b,2,98671,0)|0;c[46420]=nx(b,2,98484,0)|0;c[46421]=nx(b,2,98496,0)|0;c[46434]=nx(b,2,98682,0)|0;c[46435]=nx(b,2,98691,0)|0;c[46436]=nx(b,2,98437,0)|0;e=ME(b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+88>>2]=e;e=xx(b,137978)|0;if(e|0?a[e>>0]|0:0){b=pH(e,b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+92>>2]=b}l=n;return}function cH(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=OL(a,nx(a,0,98781,0)|0,98789)|0;if(((((((O$(a,98795)|0)!=0?(O$(a,98803)|0)!=0:0)?(O$(a,98810)|0)!=0:0)?(O$(a,98813)|0)!=0:0)?(O$(a,98824)|0)!=0:0)?(O$(a,98835)|0)!=0:0)?(O$(a,98845)|0)!=0:0)if((O$(a,98856)|0)!=0?(O$(a,98862)|0)!=0:0)if((O$(a,98789)|0)!=0?(O$(a,98867)|0)!=0:0){c[b>>2]=a;Pw(0,98872,b)|0;a=0}else a=0;else a=2;else a=1;l=d;return a|0}function dH(b){b=b|0;var d=0.0,e=0,f=0;e=xx(b,98739)|0;a:do if(e|0?(f=a[e>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:{if(f<<24>>24!=97)break a;if(b$(e,98745)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=4;break a}case 99:{if(f<<24>>24!=99)break a;if(b$(e,98750)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=3;break a}case 101:{if(f<<24>>24!=101)break a;if(b$(e,98759)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=5;break a}case 102:{if(f<<24>>24!=102)break a;if(b$(e,98766)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=2;break a}default:{d=+b2(e);if(!(d>0.0))break a;b=c[(c[b+16>>2]|0)+8>>2]|0;c[b+84>>2]=1;h[b+16>>3]=d;break a}}while(0);return}function eH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o+32|0;i=o+16|0;k=o+8|0;j=o;n=o+40|0;a[n>>0]=0;b=xx(b,d)|0;do if(b){c[i>>2]=k;c[i+4>>2]=j;c[i+8>>2]=n;i=(N1(b,98723,i)|0)>1;g=+h[k>>3];f=+h[j>>3];if(i&g>0.0&f>0.0){g=g*72.0;h[e>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);g=f*72.0;h[e+8>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);b=(a[n>>0]|0)==33;break}a[n>>0]=0;c[m>>2]=k;c[m+4>>2]=n;m=(N1(b,98733,m)|0)>0;f=+h[k>>3];if(m&f>0.0){g=f*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);h[e>>3]=g;h[e+8>>3]=g;b=(a[n>>0]|0)==33}else b=0}else b=0;while(0);l=o;return b&1|0}function fH(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0;d=xx(b,105198)|0;do if(d|0?a[d>>0]|0:0){e=(c[(c[b+60>>2]|0)+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|8;e=(Rz(d)|0)!=0;g=+LL(b,nx(b,0,98402,0)|0,14.0,1.0);i=OL(b,nx(b,0,98411,0)|0,104968)|0;d=kH(b,d,e?2:0,g,i,OL(b,nx(b,0,98420,0)|0,134232)|0)|0;i=b+16|0;c[(c[i>>2]|0)+12>>2]=d;d=xx(b,102602)|0;e=(d|0)!=0;do if((fz(b)|0)==(b|0)){if(e?(a[d>>0]|0)==116:0){d=1;break}d=0}else{if(e?(a[d>>0]|0)==98:0){d=0;break}d=1}while(0);e=xx(b,98700)|0;a:do if(e)switch(a[e>>0]|0){case 108:{d=d|2;break a}case 114:{d=d|4;break a}default:break a}while(0);a[(c[i>>2]|0)+275>>0]=d;if((fz(b)|0)!=(b|0)){d=c[(c[i>>2]|0)+12>>2]|0;f=+h[d+24>>3]+16.0;g=+h[d+32>>3]+8.0;b=(c[(c[(fz(b)|0)+16>>2]|0)+116>>2]&1|0)==0;d=c[i>>2]|0;e=a[d+275>>0]<<1&2;if(b){b=e&255;h[d+48+(b<<4)>>3]=f;h[d+48+(b<<4)+8>>3]=g;break}else{b=(e^3)&255;h[d+48+(b<<4)>>3]=g;h[d+48+(b<<4)+8>>3]=f;break}}}while(0);return}function gH(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+8>>2]|0;do if(!b)b=d;else{d=c[b+88>>2]|0;if(d){pE(d);d=c[e>>2]|0;b=c[d+8>>2]|0;if(!b){b=d;break}}D_(c[b+92>>2]|0);b=c[e>>2]|0}while(0);D_(c[b+8>>2]|0);e=c[e>>2]|0;c[e+8>>2]=0;nH(c[e+12>>2]|0);Gz(a,0,134401);return}function hH(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;switch(a|0){case 0:{a=98945;break}case 1:{a=98813;break}case 2:{a=98951;break}default:{c[b>>2]=a;Pw(1,98915,b)|0;a=98945}}l=d;return a|0}function iH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[d>>2]|0;l=d+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;if(a[f>>0]|0){i=vH((W_(f)|0)+1|0)|0;a[i>>0]=0;j=d+12|0;e=i;a:while(1){b:while(1){h=f+1|0;g=a[f>>0]|0;if(!(g<<24>>24))break a;if(!(g<<24>>24==-1|((g&255)<161|(c[j>>2]|0)!=2))){a[e>>0]=g;h=a[h>>0]|0;g=e+2|0;a[e+1>>0]=h;if(!(h<<24>>24)){e=g;break a}else{e=g;f=f+2|0;continue}}switch(g<<24>>24){case 92:break b;case 10:{k=12;break b}default:{}}a[e>>0]=g;e=e+1|0;f=h}if((k|0)==12){k=0;f=e+1|0;a[e>>0]=0;jH(b,d,i,110);e=f;i=f;f=h;continue}g=a[h>>0]|0;switch(g<<24>>24|0){case 114:case 108:case 110:{g=e+1|0;a[e>>0]=0;jH(b,d,i,a[h>>0]|0);e=g;break}default:{a[e>>0]=g;e=e+1|0;g=i}}i=g;f=(a[h>>0]|0)==0?h:f+2|0}if((i|0)!=(e|0)){a[e>>0]=0;jH(b,d,i,110)}d=d+40|0;c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];c[d+12>>2]=c[l+12>>2]}return}function jH(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+32|0;q=s+16|0;p=s;r=e+76|0;k=b[r>>1]|0;o=e+72|0;m=c[o>>2]|0;if(!m)n=uH((k*56|0)+112|0)|0;else n=wH(m,k+2|0,56,k+1|0)|0;c[o>>2]=n;k=b[r>>1]|0;m=n+(k*56|0)|0;c[m>>2]=f;a[n+(k*56|0)+48>>0]=g;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[45824]=c[e+4>>2];h[22914]=+h[e+16>>3];g=c[d+144>>2]|0;c[n+(k*56|0)+4>>2]=nb[c[g>>2]&63](g,183296,1)|0;wL(p,d,m);j=+h[p>>3];h[q>>3]=j;i=+h[p+8>>3]}else{h[q>>3]=0.0;i=+(~~(+h[e+16>>3]*1.2)|0);h[n+(k*56|0)+40>>3]=i;j=0.0}b[r>>1]=(b[r>>1]|0)+1<<16>>16;r=e+24|0;h[r>>3]=+h[(+h[r>>3]>j?r:q)>>3];r=e+32|0;h[r>>3]=+h[r>>3]+i;l=s;return}function kH(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;r=u+16|0;q=u+8|0;p=u;t=uH(88)|0;switch(pz(b)|0){case 0:{m=0;s=c[b+60>>2]|0;n=b;o=0;break}case 1:{m=0;s=fz(ez(b)|0)|0;n=0;o=b;break}case 2:{m=b;s=fz(ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0;n=0;o=0;break}default:{m=0;s=0;n=0;o=0}}c[t+4>>2]=i;c[t+8>>2]=j;h[t+16>>3]=g;k=s+16|0;j=t+12|0;c[j>>2]=d[(c[k>>2]|0)+115>>0];a:do if(f&4){c[t>>2]=n1(e)|0;if(f&2|0)a[t+82>>0]=1}else switch(f|0){case 2:{c[t>>2]=n1(e)|0;a[t+82>>0]=1;if(!(kR(b,t)|0))break a;switch(pz(b)|0){case 0:{c[p>>2]=ry(n)|0;Pw(3,98957,p)|0;break a}case 1:{c[q>>2]=ry(o)|0;Pw(3,98979,q)|0;break a}case 2:{p=ry(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;q=(ey(s)|0)!=0;s=ry(c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0)|0;c[r>>2]=p;c[r+4>>2]=q?134656:138665;c[r+8>>2]=s;Pw(3,99e3,r)|0;break a}default:break a}}case 0:{i=lH(e,b,0)|0;c[t>>2]=i;if((c[j>>2]|0)==1)i=RM(i)|0;else i=OM(i,s)|0;D_(c[t>>2]|0);c[t>>2]=i;iH(c[(c[k>>2]|0)+144>>2]|0,t);break a}default:qa(99027,99043,166,99052)}while(0);l=u;return t|0}function lH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;switch(pz(d)|0){case 0:{i=ry(d)|0;g=W_(i)|0;f=c[(c[d+16>>2]|0)+12>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;h=2;y=99075;m=99072;j=102467;o=191979;q=191979;p=0;r=0;n=2;w=f;x=99069}else{v=0;t=2;u=2;s=2;h=2;y=99075;m=99072;j=102467;o=191979;q=191979;p=0;r=0;n=W_(f)|0;w=f;x=99069}}else{v=0;t=2;u=2;s=2;h=2;y=99075;m=99072;j=102467;o=191979;q=191979;p=0;r=0;n=2;w=99063;x=99069}break}case 1:{i=ry(ez(d)|0)|0;g=W_(i)|0;j=ry(d)|0;h=W_(j)|0;f=c[(c[d+16>>2]|0)+104>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;y=99075;m=99072;o=191979;q=191979;p=0;r=0;n=2;w=f;x=99069}else{v=0;t=2;u=2;s=2;y=99075;m=99072;o=191979;q=191979;p=0;r=0;n=W_(f)|0;w=f;x=99069}}else{v=0;t=2;u=2;s=2;y=99075;m=99072;o=191979;q=191979;p=0;r=0;n=2;w=99063;x=99069}break}case 2:{h=d+48|0;i=ry(fz(ez(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0;g=W_(i)|0;l=ry(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0;k=W_(l)|0;f=d+16|0;q=c[(c[f>>2]|0)+52>>2]|0;if(!q)r=0;else r=W_(q)|0;m=ry(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;f=c[f>>2]|0;o=c[f+92>>2]|0;if(!o)p=0;else p=W_(o)|0;j=W_(m)|0;f=c[f+96>>2]|0;if(f){f=c[f>>2]|0;if(!b)n=2;else n=W_(f)|0}else{n=2;f=99063}x=(ey(fz(ez(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0)==0;v=1;t=k;u=j;s=k+2+(r|0?r+1|0:0)+j+(p|0?p+1|0:0)|0;h=2;y=l;j=102467;w=f;x=x?138665:134656;break}default:{v=0;t=2;u=2;s=2;h=2;g=2;y=99075;m=99072;j=102467;i=99066;o=191979;q=191979;p=0;r=0;n=2;w=99063;x=99069}}e=(e|0)==0;l=0;f=b;a:while(1){d=f+1|0;b:do switch(a[f>>0]|0){case 0:break a;case 92:{f=f+2|0;switch(a[d>>0]|0){case 78:{k=h;break b}case 71:{k=g;break b}case 69:{k=s;break b}case 72:{k=u;break b}case 84:{k=t;break b}case 76:{k=n;break b}case 92:{if(!e){k=1;break b}break}default:{}}k=2;break}default:{k=1;f=d}}while(0);l=l+k|0}s=vH(l+1|0)|0;n=(v|0)==0;l=(r|0)==0;d=(p|0)==0;f=s;g=b;c:while(1){k=g+1|0;h=a[g>>0]|0;switch(h<<24>>24){case 0:break c;case 92:break;default:{a[f>>0]=h;f=f+1|0;g=k;continue c}}h=g+2|0;g=a[k>>0]|0;switch(g<<24>>24|0){case 71:{g=i;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 78:{g=j;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 69:{if(n){g=h;continue c}else g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(l)g=x;else{a[f>>0]=58;g=q;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=x;break}else g=g+1|0}}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=m;break}g=g+1|0;f=f+1|0}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(d){g=h;continue c}a[f>>0]=58;g=o;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}else g=g+1|0}}case 84:{g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 72:{g=m;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 76:{g=w;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 92:{if(!e){a[f>>0]=92;f=f+1|0;g=h;continue c}break}default:{}}a[f>>0]=92;a[f+1>>0]=g;f=f+2|0;g=h}a[f>>0]=0;return s|0}function mH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(a|0){d=a;e=0;while(1){if((e|0)>=(b|0))break;if(!e)D_(c[d>>2]|0);g=c[d+8>>2]|0;if(g|0?(f=c[d+12>>2]|0,f|0):0)tb[f&127](g);d=d+56|0;e=e+1|0}D_(a)}return}function nH(d){d=d|0;var e=0;if(d|0){D_(c[d>>2]|0);e=d+72|0;if(a[d+82>>0]|0){e=c[e>>2]|0;if(e|0)XQ(e,1)}else mH(c[e>>2]|0,b[d+76>>1]|0);D_(d)}return}function oH(d,e,f){d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;q=u+16|0;r=u;k=c[d+16>>2]|0;s=k+12|0;t=c[s>>2]|0;c[s>>2]=e;if(!(a[f+82>>0]|0)){p=f+76|0;if((b[p>>1]|0)>=1){RO(d,0);UO(d,c[f+8>>2]|0);switch(a[f+80>>0]|0){case 116:{j=+h[f+64>>3];g=+h[f+48>>3]*.5+j;break}case 98:{j=+h[f+64>>3];g=+h[f+48>>3]*-.5+j+ +h[f+32>>3];break}default:{j=+h[f+64>>3];g=+h[f+32>>3]*.5+j}}g=g-+h[f+16>>3];o=r+8|0;h[o>>3]=g;if(b[k+260>>1]&512)h[o>>3]=g-j;m=f+72|0;n=f+56|0;i=f+40|0;e=0;while(1){if((e|0)>=(b[p>>1]|0))break;k=c[m>>2]|0;switch(a[k+(e*56|0)+48>>0]|0){case 108:{g=+h[n>>3]-+h[i>>3]*.5;break}case 114:{g=+h[i>>3]*.5+ +h[n>>3];break}default:g=+h[n>>3]}h[r>>3]=g;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];TO(d,q,k+(e*56|0)|0);h[o>>3]=+h[o>>3]-+h[(c[m>>2]|0)+(e*56|0)+40>>3];e=e+1|0}SO(d);i=18}}else{CQ(d,c[f+72>>2]|0,f);i=18}if((i|0)==18)c[s>>2]=t;l=u;return}function pH(a,b){a=a|0;b=b|0;return lH(a,b,1)|0}function qH(a){a=a|0;return rH(a,0)|0}function rH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[46437]|0;if(!e){c[46438]=64;e=vH(64)|0;c[46437]=e}j=d<<24>>24==0;i=0;f=0;h=b;while(1){if(!h)break;d=a[h>>0]|0;if(!(d<<24>>24))break;b=c[46438]|0;if((i|0)>(b+-8|0)){e=b<<1;c[46438]=e;e=xH(c[46437]|0,e)|0;c[46437]=e;e=e+i|0;d=a[h>>0]|0}a:do switch(d<<24>>24){case 38:{if(j?(sH(h)|0)!=0:0)k=18;else{f=5;d=99104}break}case 60:{f=4;d=99127;break}case 62:{f=4;d=99110;break}case 45:{f=5;d=99121;break}default:{if((f|0)!=0&d<<24>>24==32)if((a[f>>0]|0)==32){f=6;d=99097;break a}else{k=18;break a}switch(d<<24>>24){case 34:{f=6;d=99090;break a}case 39:{f=5;d=99115;break a}case 10:if(j){k=18;break a}else{f=5;d=99084;break a}default:{k=18;break a}}}}while(0);if((k|0)==18){k=0;d=j|d<<24>>24!=13;f=d?1:5;d=d?h:99078}g=e+f|0;b=f;while(1){if(!b)break;a[e>>0]=a[d>>0]|0;b=b+-1|0;d=d+1|0;e=e+1|0}b=h;i=f+i|0;e=g;h=h+1|0;f=b}a[e>>0]=0;return c[46437]|0}function sH(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function tH(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[46439]|0;if(!d){c[46440]=64;d=vH(64)|0;c[46439]=d;i=0}else i=0;while(1){if(!b)break;e=a[b>>0]|0;if(!(e<<24>>24))break;f=c[46440]|0;if((i|0)>(f+-8|0)){d=f<<1;c[46440]=d;d=xH(c[46439]|0,d)|0;c[46439]=d;d=d+i|0;e=a[b>>0]|0}switch(e<<24>>24){case 38:{if(!(sH(b)|0)){g=5;e=99104}else j=12;break}case 60:{g=4;e=99127;break}case 62:{g=4;e=99110;break}case 34:{g=6;e=99090;break}case 39:{g=5;e=99115;break}default:j=12}if((j|0)==12){j=0;g=1;e=b}h=d+g|0;f=g;while(1){if(!f)break;a[d>>0]=a[e>>0]|0;f=f+-1|0;e=e+1|0;d=d+1|0}i=g+i|0;d=h;b=b+1|0}a[d>>0]=0;return c[46439]|0}function uH(a){a=a|0;var b=0;if(!a)a=0;else{b=vH(a)|0;H3(b|0,0,a|0)|0;a=b}return a|0}function vH(a){a=a|0;if(a){a=C_(a)|0;if(!a){E1(108658,14,1,c[15686]|0)|0;a=0}}else a=0;return a|0}function wH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=F_(a,O(d,b)|0)|0;if(!((b|0)!=0&(a|0)==0)){if(b>>>0>e>>>0)H3(a+(O(e,d)|0)|0,0,O(b-e|0,d)|0)|0}else E1(108658,14,1,c[15686]|0)|0;return a|0}function xH(a,b){a=a|0;b=b|0;a=F_(a,b)|0;if((b|0)!=0&(a|0)==0)E1(108658,14,1,c[15686]|0)|0;return a|0} +function ol(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+320|0;H=M+296|0;G=M+280|0;x=M+136|0;w=M+120|0;n=M+104|0;i=M+88|0;f=M+80|0;E=M+16|0;z=M;j=M+264|0;k=M+248|0;m=M+232|0;o=M+216|0;A=M+200|0;B=M+184|0;y=M+168|0;D=M+152|0;g=pl(xx(a,87703)|0,b)|0;q=pl(xx(a,87709)|0,b)|0;r=(q|0)!=0;b=(g|0)!=0;do if(b|r?(L=a+16|0,e=c[(c[L>>2]|0)+8>>2]|0,e|0):0){if((c[e+4>>2]|0)>1){K=ry(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)|0;L=ry(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)|0;c[f>>2]=K;c[f+4>>2]=L;Pw(0,87715,f)|0;break}I=c[e>>2]|0;e=c[I+4>>2]|0;p=c[a>>2]&3;s=a+-48|0;t=c[((p|0)==2?a:s)+40>>2]|0;u=a+48|0;p=c[((p|0)==3?a:u)+40>>2]|0;J=vH(48)|0;v=I+12|0;c[J+12>>2]=c[v>>2];C=I+8|0;c[J+8>>2]=c[C>>2];do if(b){h=(c[g+16>>2]|0)+16|0;g=(c[t+16>>2]|0)+16|0;c[H>>2]=c[g>>2];c[H+4>>2]=c[g+4>>2];c[H+8>>2]=c[g+8>>2];c[H+12>>2]=c[g+12>>2];if(!(ql(H,h)|0)){o=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87703)|0;c[i>>2]=o;c[i+4>>2]=F;c[i+8>>2]=K;Pw(0,87756,i)|0;K=26;break}b=c[I>>2]|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(ql(H,h)|0){F=(c[p+16>>2]|0)+16|0;c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[H+8>>2]=c[F+8>>2];c[H+12>>2]=c[F+12>>2];if(ql(H,h)|0){o=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87703)|0;c[n>>2]=o;c[n+4>>2]=F;c[n+8>>2]=K;Pw(0,87799,n)|0;K=26;break}if(!(c[C>>2]|0))qa(87841,87852,369,87863);o=I+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];rl(z,G,H,h);F=(c[I>>2]|0)+48|0;c[F>>2]=c[z>>2];c[F+4>>2]=c[z+4>>2];c[F+8>>2]=c[z+8>>2];c[F+12>>2]=c[z+12>>2];F=(c[I>>2]|0)+16|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];sl(j,G,H);c[F>>2]=c[j>>2];c[F+4>>2]=c[j+4>>2];c[F+8>>2]=c[j+8>>2];c[F+12>>2]=c[j+12>>2];F=c[I>>2]|0;b=F+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];sl(k,G,H);c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];F=c[I>>2]|0;b=F+32|0;F=F+16|0;c[G>>2]=c[F>>2];c[G+4>>2]=c[F+4>>2];c[G+8>>2]=c[F+8>>2];c[G+12>>2]=c[F+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];sl(m,G,H);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];b=c[v>>2]|0;if(!b){F=3;break}F=(FE(a,c[I>>2]|0,0,0,J,b)|0)+3|0;break}g=e+-1|0;b=0;while(1){if((b|0)>=(g|0))break;if(tl((c[I>>2]|0)+(b<<4)|0,h)|0)break;b=b+3|0}e=c[v>>2]|0;f=(e|0)!=0;if((b|0)==(g|0))if(f){F=J+32|0;m=I+32|0;n=(c[I>>2]|0)+(g<<4)|0;c[G>>2]=c[m>>2];c[G+4>>2]=c[m+4>>2];c[G+8>>2]=c[m+8>>2];c[G+12>>2]=c[m+12>>2];c[H>>2]=c[n>>2];c[H+4>>2]=c[n+4>>2];c[H+8>>2]=c[n+8>>2];c[H+12>>2]=c[n+12>>2];rl(o,G,H,h);c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=g;break}else qa(87880,87852,387,87863);else{if(f)b=FE(a,c[I>>2]|0,0,b,J,e)|0;F=b+3|0;break}}else K=26;while(0);if((K|0)==26){b=e+-1|0;if(!(c[v>>2]|0))F=b;else{F=J+32|0;o=I+32|0;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=b}}do if(r){f=(c[q+16>>2]|0)+16|0;r=(c[p+16>>2]|0)+16|0;c[H>>2]=c[r>>2];c[H+4>>2]=c[r+4>>2];c[H+8>>2]=c[r+8>>2];c[H+12>>2]=c[r+12>>2];if(!(ql(H,f)|0)){G=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87709)|0;c[w>>2]=G;c[w+4>>2]=H;c[w+8>>2]=K;Pw(0,87891,w)|0;K=52;break}b=(c[I>>2]|0)+(F<<4)|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(ql(H,f)|0){E=(c[t+16>>2]|0)+16|0;c[H>>2]=c[E>>2];c[H+4>>2]=c[E+4>>2];c[H+8>>2]=c[E+8>>2];c[H+12>>2]=c[E+12>>2];if(ql(H,f)|0){G=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87709)|0;c[x>>2]=G;c[x+4>>2]=H;c[x+8>>2]=K;Pw(0,87934,x)|0;K=52;break}if(!(c[v>>2]|0))qa(87880,87852,429,87863);x=J+32|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];rl(z,G,H,f);d=F+-3|0;E=(c[I>>2]|0)+(d<<4)|0;c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2];E=F+-1|0;b=(c[I>>2]|0)+(E<<4)|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];sl(A,G,H);c[b>>2]=c[A>>2];c[b+4>>2]=c[A+4>>2];c[b+8>>2]=c[A+8>>2];c[b+12>>2]=c[A+12>>2];b=c[I>>2]|0;D=b+(F<<4)|0;b=b+(E<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];sl(B,G,H);c[D>>2]=c[B>>2];c[D+4>>2]=c[B+4>>2];c[D+8>>2]=c[B+8>>2];c[D+12>>2]=c[B+12>>2];D=c[I>>2]|0;b=D+(F+-2<<4)|0;E=D+(E<<4)|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];sl(y,G,H);c[b>>2]=c[y>>2];c[b+4>>2]=c[y+4>>2];c[b+8>>2]=c[y+8>>2];c[b+12>>2]=c[y+12>>2];b=c[C>>2]|0;if(!b)break;d=HE(a,c[I>>2]|0,d,d,J,b)|0;break}e=F;while(1){if((e|0)>0)b=0;else break;while(1){if((b|0)==4)break;B=E+(b<<4)|0;A=(c[I>>2]|0)+(e-b<<4)|0;c[B>>2]=c[A>>2];c[B+4>>2]=c[A+4>>2];c[B+8>>2]=c[A+8>>2];c[B+12>>2]=c[A+12>>2];b=b+1|0}if(tl(E,f)|0){b=0;K=43;break}e=e+-3|0}a:do if((K|0)==43)while(1){K=0;if((b|0)==4)break a;K=(c[I>>2]|0)+(e-b<<4)|0;B=E+(b<<4)|0;c[K>>2]=c[B>>2];c[K+4>>2]=c[B+4>>2];c[K+8>>2]=c[B+8>>2];c[K+12>>2]=c[B+12>>2];b=b+1|0;K=43}while(0);if(e|0){d=e+-3|0;b=c[C>>2]|0;if(!b)break;d=HE(a,c[I>>2]|0,d,F+-3|0,J,b)|0;break}if(!(c[C>>2]|0))qa(87841,87852,452,87863);else{d=J+16|0;E=I+16|0;a=c[I>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[a>>2];c[H+4>>2]=c[a+4>>2];c[H+8>>2]=c[a+8>>2];c[H+12>>2]=c[a+12>>2];rl(D,G,H,f);c[d>>2]=c[D>>2];c[d+4>>2]=c[D+4>>2];c[d+8>>2]=c[D+8>>2];c[d+12>>2]=c[D+12>>2];d=0;break}}else K=52;while(0);if((K|0)==52)if(!(c[C>>2]|0))d=0;else{d=J+16|0;K=I+16|0;c[d>>2]=c[K>>2];c[d+4>>2]=c[K+4>>2];c[d+8>>2]=c[K+8>>2];c[d+12>>2]=c[K+12>>2];d=0}b=F-d+1|0;e=J+4|0;c[e>>2]=b;c[J>>2]=vH(b<<4)|0;b=0;while(1){if((b|0)>=(c[e>>2]|0))break;K=(c[J>>2]|0)+(b<<4)|0;a=(c[I>>2]|0)+(d<<4)|0;c[K>>2]=c[a>>2];c[K+4>>2]=c[a+4>>2];c[K+8>>2]=c[a+8>>2];c[K+12>>2]=c[a+12>>2];d=d+1|0;b=b+1|0}D_(c[I>>2]|0);D_(I);c[c[(c[L>>2]|0)+8>>2]>>2]=J}while(0);l=M;return}function pl(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((b|0)!=0?(a[b>>0]|0)!=0:0){d=vM(d,b)|0;if(!d){c[e>>2]=b;Pw(0,88054,e)|0;d=0}}else d=0;l=f;return d|0}function ql(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a>>3];if((+h[b>>3]<=d?d<=+h[b+16>>3]:0)?(c=+h[a+8>>3],+h[b+8>>3]<=c):0)a=c<=+h[b+24>>3]&1;else a=0;return a|0}function rl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0;C=l;l=l+464|0;n=C+48|0;B=C+32|0;u=C+16|0;v=C;w=C+364|0;x=C+264|0;z=C+164|0;A=C+64|0;q=+h[b>>3];r=+h[b+8>>3];s=+h[d>>3];t=+h[d+8>>3];c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];c[u+8>>2]=c[e+8>>2];c[u+12>>2]=c[e+12>>2];e=e+16|0;c[v>>2]=c[e>>2];c[v+4>>2]=c[e+4>>2];c[v+8>>2]=c[e+8>>2];c[v+12>>2]=c[e+12>>2];k=+h[u>>3];if((s=+h[u+8>>3]):0)?f<=+h[v+8>>3]:0){o=f;p=k}else i=4;do if((i|0)==4){j=+h[v>>3];if(s>j){g=r+ +(~~((j-q)*(r-t)/(q-s))|0);f=+h[u+8>>3];if(g>=f?g<=+h[v+8>>3]:0){o=g;p=j;break}}else f=+h[u+8>>3];if(t=k)|!(m<=j))):0){o=f;p=m;break}f=+h[v+8>>3];if(t>f?(y=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(y>=k)|!(y<=j))):0){o=f;p=y;break};c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];w=yl(n,w)|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];x=yl(n,x)|0;c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];z=yl(n,z)|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];A=yl(n,A)|0;c[B>>2]=w;c[B+4>>2]=x;c[B+8>>2]=z;c[B+12>>2]=A;Pw(1,87976,B)|0;qa(135312,87852,78,88028)}while(0);h[a>>3]=p;h[a+8>>3]=o;l=C;return}function sl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function tl(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+80|0;j=m+16|0;k=m;e=0;while(1){if((e|0)==4)break;i=j+(e<<4)|0;g=a+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];e=e+1|0}e=b+8|0;i=b+24|0;d=+ul(a,0.0,1.0,+h[b>>3],+h[e>>3],+h[i>>3]);if(d>=0.0&d<2.0)XL(k,j,3,d,a,0);else d=2.0;g=b+16|0;f=+ul(a,0.0,d>1.0?1.0:d,+h[g>>3],+h[e>>3],+h[i>>3]);if(f>=0.0&f1.0?1.0:d,+h[e>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f1.0?1.0:d,+h[i>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f>3]-d))<=.005){b=+h[a+56>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}XL(i,a,3,.5,j,k);g=(c+b)*.5;b=+ul(j,b,g,d,e,f);if(!(b>=0.0))b=+ul(k,g,c,d,e,f)}while(0);l=m;return +b}function vl(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(wl(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+56>>3]-d))<=.005){b=+h[a+48>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}XL(i,a,3,.5,j,k);g=(c+b)*.5;b=+vl(j,b,g,d,e,f);if(!(b>=0.0))b=+vl(k,g,c,d,e,f)}while(0);l=m;return +b}function wl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a+8>>3];e=fb&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)+8>>3];i=fb&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function xl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a>>3];e=fb&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)>>3];i=fb&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function yl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=l;l=l+16|0;d=c;e=+h[a+8>>3];h[d>>3]=+h[a>>3];h[d+8>>3]=e;Y0(b,88042,d)|0;l=c;return b|0}function zl(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;s=v;u=4;t=C_(40)|0;c[t>>2]=0;r=a+16|0;e=c[r>>2]|0;a:do if(((b[e+238>>1]|0)-(b[e+236>>1]|0)|0)>=2){m=1;d=e;e=c[e+196>>2]|0;b:while(1){n=m+1|0;if(!(c[e+(n<<6)>>2]|0)){q=15;break}else k=0;while(1){h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0)){m=n;continue b}j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=$(20,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,u|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break b}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=aa(65,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,t|0,u|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break b}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;na(6,a|0,m|0,k|0,i|0,1);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break b}}}e=c[r>>2]|0;k=k+1|0;d=e;e=c[e+196>>2]|0}}c:do if((q|0)==15){while(1){if((m|0)>0)k=0;else break;while(1){e=c[d+196>>2]|0;h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0))break;j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=$(21,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,u|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break c}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=aa(66,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,t|0,u|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break c}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;na(6,a|0,m|0,k|0,i|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break c}}}k=k+1|0;d=c[r>>2]|0}m=m+-1|0;q=15}t=D3(183936,1,t|0,u|0)|0;u=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else d=0}while(0);d:while(1){if(d){o=0;ca(20,3,88082,s|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}else break}else f=1;while(1){d=c[r>>2]|0;if((f|0)>(c[d+180>>2]|0))break a;o=0;ia(99,c[(c[d+184>>2]|0)+(f<<2)>>2]|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue d}f=f+1|0}}}while(0);D_(t|0);l=v;return}function Al(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+176>>2]|0)==1:0)?(c[b+184>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function Bl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+172>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+172>>2]>>2]|0;if(((Al(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0):0)?(Hl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+16|0;f=g;a=(c[e+16>>2]|0)+16|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(jg(g,h)|0)==0&1}else a=0;l=i;return a|0}function Cl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=a+16|0;q=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(d<<2)>>2]|0;p=d+1|0;m=(f|0)==1;n=q+16|0;l=p;while(1){if((l|0)>(e|0)){g=e;s=p;break}o=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(l<<2)>>2]|0;k=o+16|0;a:do if(m)while(1){d=c[k>>2]|0;j=c[c[d+180>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+180>>2]|0;i=j+-48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=8;break}if((c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==8){r=0;d=ph(q,c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0,j)|0}while(1){f=c[c[(c[k>>2]|0)+172>>2]>>2]|0;if(!f)break;xh(f,d);kh(f)}kh(j)}else while(1){d=c[k>>2]|0;j=c[c[d+172>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+172>>2]|0;i=j+48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=17;break}if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==17){r=0;d=ph(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0,q,j)|0}while(1){f=c[c[(c[k>>2]|0)+180>>2]>>2]|0;if(!f)break;xh(f,d);kh(f)}kh(j)}while(0);if((c[d+176>>2]|0)!=(0-(c[d+184>>2]|0)|0)){r=23;break}sh(a,o);l=l+1|0}if((r|0)==23)qa(88218,88262,115,88269);while(1){g=g+1|0;d=c[(c[t>>2]|0)+196>>2]|0;f=d+(b<<6)|0;if((g|0)>=(c[f>>2]|0))break;e=c[d+(b<<6)+4>>2]|0;r=c[e+(g<<2)>>2]|0;c[e+(s<<2)>>2]=r;c[(c[r+16>>2]|0)+236>>2]=s;s=s+1|0}c[f>>2]=s;c[(c[d+(b<<6)+4>>2]|0)+(s<<2)>>2]=0;return}function Dl(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+184>>2]|0)==1:0)?(c[b+176>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function El(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+180>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+180>>2]>>2]|0;if(((Dl(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0):0)?(Hl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+56|0;f=g;a=(c[e+16>>2]|0)+56|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(jg(g,h)|0)==0&1}else a=0;l=i;return a|0}function Fl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;p=r+16|0;o=r;m=d+16|0;f=c[m>>2]|0;e=b[f+236>>1]|0;while(1){if((e|0)>(b[f+238>>1]|0))break;c[(c[f+268>>2]|0)+(e<<2)>>2]=0;e=e+1|0;f=c[m>>2]|0}xj(d);j=Sy(d)|0;while(1){if(!j)break;Gl(d,j);i=Ex(d,j)|0;while(1){if(!i)break;else f=i;while(1){e=c[(c[f+16>>2]|0)+172>>2]|0;if(!e)break;else f=e}h=i+-48|0;while(1){e=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:h)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;Gl(d,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}i=Gx(d,i)|0}j=Ty(d,j)|0}e=c[m>>2]|0;i=b[e+236>>1]|0;while(1){if((i|0)>(b[e+238>>1]|0)){k=1;n=e;break}e=c[(c[e+268>>2]|0)+(i<<2)>>2]|0;j=c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;f=e+16|0;if((c[j+(c[(c[f>>2]|0)+236>>2]<<2)>>2]|0)!=(e|0)){q=17;break}h=c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;e=c[m>>2]|0;f=c[e+196>>2]|0;c[f+(i<<6)+4>>2]=h+(c[(c[(c[(c[e+268>>2]|0)+(i<<2)>>2]|0)+16>>2]|0)+236>>2]<<2);e=-1;h=0;a:while(1){if((h|0)>=(c[f+(i<<6)>>2]|0))break;f=c[(c[f+(i<<6)+4>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;b:do if(!(a[g+156>>0]|0))if(!(oz(d,f)|0))break a;else e=h;else{f=c[c[g+172>>2]>>2]|0;while(1){if(!f)break b;g=c[(c[f+16>>2]|0)+116>>2]|0;if(!g)break;else f=g}if(oz(d,c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)|0){j=(oz(d,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)|0)==0;e=j?e:h}}while(0);h=h+1|0;f=c[(c[m>>2]|0)+196>>2]|0}if((e|0)==-1){c[p>>2]=ry(d)|0;c[p+4>>2]=i;Pw(0,88182,p)|0}j=c[m>>2]|0;c[(c[j+196>>2]|0)+(i<<6)>>2]=e+1;i=i+1|0;e=j}if((q|0)==17){p=ry(e)|0;q=c[(c[f>>2]|0)+236>>2]|0;c[o>>2]=p;c[o+4>>2]=q;c[o+8>>2]=i;Pw(1,88124,o)|0;bb(183936,1)}while(1){if((k|0)>(c[n+180>>2]|0))break;Fl(c[(c[n+184>>2]|0)+(k<<2)>>2]|0);k=k+1|0;n=c[m>>2]|0}l=r;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+16>>2]|0;a=(c[(c[a+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)|0;e=c[a>>2]|0;if(!((e|0)!=0?(c[(c[e+16>>2]|0)+236>>2]|0)<=(c[d+236>>2]|0):0))c[a>>2]=b;return}function Hl(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=c[b+16>>2]|0;if(!(a[f+112>>0]|0))break;b=c[f+116>>2]|0}while(1){e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;d=c[e+116>>2]|0}if((a[f+153>>0]|0)==0?(a[e+153>>0]|0)==0:0){f=c[d>>2]&3;e=c[b>>2]&3;b=(O((c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0,(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)|0)>0&1}else b=0;return b|0}function Il(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+544|0;j=k+528|0;Jl(j,k+512|0,k);e=(a[190690]|0)+1<<24>>24;a[190690]=e<<24>>24==0?1:e;e=c[b+16>>2]|0;c[e+220>>2]=0;c[e+232>>2]=0;e=(d|0)>0;d=Sy(b)|0;while(1){if(!d)break;if(e?(h=c[d+16>>2]|0,i=c[h+212>>2]|0,(i|0)!=0):0){g=c[(c[(c[i+16>>2]|0)+268>>2]|0)+(c[h+232>>2]<<2)>>2]|0;f=7}else f=6;if((f|0)==6?(f=0,(d|0)==(SL(d)|0)):0){g=d;f=7}if((f|0)==7?(0,(a[(c[g+16>>2]|0)+157>>0]|0)!=(a[190690]|0)):0){Kl(b);Ll(j,b,g);Ml(b)}d=Ty(b,d)|0}Nl(j);l=k;return}function Jl(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=d;c[b+4>>2]=d+512;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;return}function Kl(a){a=a|0;c[(c[a+16>>2]|0)+192>>2]=0;c[46023]=0;return}function Ll(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q;Ol(b,e);k=p+8|0;m=p+16|0;n=p+24|0;a:while(1){o=Pl(b)|0;if(!o)break;e=o+16|0;if((a[(c[e>>2]|0)+157>>0]|0)==(a[190690]|0))continue;Ql(d,o);h=c[e>>2]|0;g=h+180|0;j=c[g+4>>2]|0;i=p;c[i>>2]=c[g>>2];c[i+4>>2]=j;i=h+172|0;j=c[i+4>>2]|0;g=k;c[g>>2]=c[i>>2];c[g+4>>2]=j;g=h+188|0;j=c[g+4>>2]|0;i=m;c[i>>2]=c[g>>2];c[i+4>>2]=j;h=h+196|0;i=c[h+4>>2]|0;j=n;c[j>>2]=c[h>>2];c[j+4>>2]=i;j=3;while(1){if((j|0)<=-1)continue a;e=c[p+(j<<3)>>2]|0;b:do if(e|0){i=(c[p+(j<<3)+4>>2]|0)+-1|0;h=e+(i<<2)|0;while(1){if((i|0)<=-1)break b;f=c[h>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(o|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;if((a[(c[e+16>>2]|0)+157>>0]|0)!=(a[190690]|0)?(e|0)==(SL(e)|0):0)Ol(b,e);h=h+-4|0;i=i+-1|0}}while(0);j=j+-1|0}}l=q;return}function Ml(a){a=a|0;var b=0,d=0,e=0,f=0;d=a+16|0;b=c[d>>2]|0;f=b+220|0;e=c[f>>2]|0;a=e+1|0;c[f>>2]=a;b=c[b+216>>2]|0;if(!b)a=vH(a<<2)|0;else a=xH(b,a<<2)|0;f=c[d>>2]|0;c[f+216>>2]=a;c[a+(e<<2)>>2]=c[f+192>>2];return}function Nl(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;D_(c[a>>2]|0);D_(a);a=b}return}function Ol(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;h=k+8|0;g=k;j=b+8|0;f=c[j>>2]|0;i=b+4|0;b=c[i>>2]|0;if((f|0)==(c[b+4>>2]|0)){f=c[b+12>>2]|0;if(!f){f=uH(16)|0;if(!f)Pw(1,95943,g)|0;c[f+8>>2]=c[i>>2];c[f+12>>2]=0;b=uH(4e6)|0;c[f>>2]=b;if(!b){Pw(1,88282,h)|0;b=c[f>>2]|0}c[f+4>>2]=b+4e6;c[(c[i>>2]|0)+12>>2]=f}c[i>>2]=f;f=c[f>>2]|0;c[j>>2]=f}a[(c[e+16>>2]|0)+157>>0]=(d[190690]|0)+1;c[j>>2]=f+4;c[f>>2]=e;l=k;return}function Pl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function Ql(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[b+16>>2]|0;g=f+232|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+16>>2]|0;a[g+157>>0]=a[190690]|0;b=c[46023]|0;e=g+168|0;if(!b){c[e>>2]=0;c[f+192>>2]=d}else{c[e>>2]=b;c[(c[b+16>>2]|0)+164>>2]=d}c[46023]=d;c[g+164>>2]=0;return}function Rl(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;m=b+16|0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+188>>2]|0;a:do if(!e)f=0;else{f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e){f=0;break a}Sl(e);d=c[g>>2]|0;f=f+1|0;e=c[d+188>>2]|0}}while(0);while(1){if((f|0)>=(c[d+208>>2]|0))break;e=c[(c[d+204>>2]|0)+(f<<2)>>2]|0;l=c[e>>2]&3;if((c[(c[(c[((l|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)==(c[(c[(c[((l|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)){Sl(e);d=c[g>>2]|0}f=f+1|0}d=d+164|0}l=c[m>>2]|0;d=c[l+196>>2]|0;if(!((c[d+56>>2]|0)==0?(c[l+180>>2]|0)<=0:0))i=13;b:do if((i|0)==13){i=c[d+4>>2]|0;g=0;c:while(1){d=c[i+(g<<2)>>2]|0;if(!d)break b;e=c[(c[d+16>>2]|0)+196>>2]|0;d=0;while(1){f=c[e+(d<<2)>>2]|0;if(!f)break;l=c[f+16>>2]|0;if(c[l+96>>2]|0?(a[l+113>>0]|0)==0:0)break c;d=d+1|0}g=g+1|0}Tl(b)}while(0);Ji(b);e=0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;l=d+16|0;d=c[l>>2]|0;f=c[d+188>>2]|0;d:do if(f){k=0;while(1){g=c[f+(k<<2)>>2]|0;if(!g){k=0;break}i=c[g+16>>2]|0;j=c[i+96>>2]|0;do if(j)if(!(a[i+113>>0]|0)){Ul(g);f=c[l>>2]|0;e=1;d=f;f=c[f+188>>2]|0;break}else{h[i+136>>3]=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?j+24|0:j+32|0)>>3];break}while(0);k=k+1|0}while(1){if((k|0)>=(c[d+208>>2]|0))break d;i=c[(c[d+204>>2]|0)+(k<<2)>>2]|0;j=c[i>>2]&3;g=c[((j|0)==3?i:i+48|0)+40>>2]|0;j=c[((j|0)==2?i:i+-48|0)+40>>2]|0;do if(!((g|0)==(j|0)?1:(c[(c[g+16>>2]|0)+232>>2]|0)!=(c[(c[j+16>>2]|0)+232>>2]|0))){f=i;do{j=c[f+16>>2]|0;f=c[j+172>>2]|0}while((f|0)!=0);f=a[j+113>>0]|0;g=c[i+16>>2]|0;a[g+113>>0]=f;g=c[g+96>>2]|0;if(g)if(!(f<<24>>24)){Ul(i);e=1;d=c[l>>2]|0;break}else{o=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?g+24|0:g+32|0)>>3];j=j+136|0;n=+h[j>>3];h[j>>3]=o>n?o:n;break}}while(0);k=k+1|0}}while(0);d=d+164|0}if(e|0){Ch(b);Qh(b)}return e|0}function Sl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[b>>2]&3;i=c[((d|0)==3?b:b+48|0)+40>>2]|0;f=i+16|0;g=c[(c[f>>2]|0)+236>>2]|0;d=c[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;h=(g|0)<(d|0);e=h?d:g;i=c[(c[(ig(i)|0)+16>>2]|0)+196>>2]|0;f=i+(c[(c[f>>2]|0)+232>>2]<<6)+4|0;d=h?g:d;a:while(1){d=d+1|0;if((d|0)>=(e|0))break;g=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;switch(a[g+156>>0]|0){case 0:break a;case 1:break;default:continue a}if(c[g+104>>2]|0)break}if((d|0)==(e|0))do{i=c[b+16>>2]|0;a[i+113>>0]=1;b=c[i+172>>2]|0}while((b|0)!=0);return}function Tl(a){a=a|0;var d=0,e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;if(b[a+236>>1]|0)qa(88339,88322,190,88358);d=(b[a+238>>1]|0)+3|0;a=c[a+196>>2]|0;if(!a)a=vH(d<<6)|0;else a=xH(a,d<<6)|0;d=a+64|0;a=c[g>>2]|0;c[a+196>>2]=d;a=b[a+238>>1]|0;while(1){if((a|0)<=-1)break;f=a+-1|0;e=d+(a<<6)|0;a=d+(f<<6)|0;d=e+64|0;do{c[e>>2]=c[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(d|0));a=f;d=c[(c[g>>2]|0)+196>>2]|0}c[d+(a<<6)+8>>2]=0;c[d+(a<<6)>>2]=0;e=uH(8)|0;g=c[g>>2]|0;f=c[g+196>>2]|0;c[f+(a<<6)+12>>2]=e;c[f+(a<<6)+4>>2]=e;c[f+(a<<6)+56>>2]=0;h[f+(a<<6)+24>>3]=1.0;h[f+(a<<6)+16>>3]=1.0;h[f+(a<<6)+40>>3]=1.0;h[f+(a<<6)+32>>3]=1.0;g=g+236|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;return}function Ul(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;j=b+16|0;if(c[(c[j>>2]|0)+96>>2]|0){m=b+48|0;k=ig(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)|0;d=c[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0;l=Vl(k,b)|0;n=k+16|0;e=c[n>>2]|0;g=c[e+196>>2]|0;o=d+-1|0;i=c[c[g+(o<<6)+4>>2]>>2]|0;if(!i)f=+h[g+(d<<6)+24>>3]+ +h[(c[(c[c[g+(d<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +(c[e+252>>2]|0);else f=+h[(c[i+16>>2]|0)+24>>3]-+h[g+(o<<6)+16>>3];d=Wl(k,o,l)|0;k=c[(c[j>>2]|0)+96>>2]|0;q=+h[k+24>>3];p=+h[k+32>>3];j=(c[(c[n>>2]|0)+116>>2]&1|0)==0;r=j?p:q;g=d+16|0;e=c[g>>2]|0;h[e+80>>3]=r;l=~~(r*.5);p=(j?q:p)*.5;h[e+96>>3]=p;h[e+88>>3]=p;c[e+104>>2]=k;h[e+24>>3]=+(l+~~f|0);e=ph(d,c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0,b)|0;e=c[e+16>>2]|0;h[e+16>>3]=-+h[(c[g>>2]|0)+88>>3];h[e+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+96>>3];a[e+112>>0]=4;e=b+-48|0;d=ph(d,c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0,b)|0;g=c[g>>2]|0;d=c[d+16>>2]|0;h[d+16>>3]=+h[g+96>>3];h[d+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+88>>3];a[d+112>>0]=4;d=c[(c[n>>2]|0)+196>>2]|0;e=d+(o<<6)+16|0;f=+(l|0);if(+h[e>>3]>3]=f;d=d+(o<<6)+24|0;if(+h[d>>3]>3]=f;c[g+112>>2]=b}return}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n+8|0;f=n+4|0;g=n;d=c[b>>2]&3;e=c[((d|0)==3?b:b+48|0)+40>>2]|0;k=(c[(c[e+16>>2]|0)+232>>2]|0)+-1|0;a=c[(c[a+16>>2]|0)+196>>2]|0;h=c[a+(k<<6)+4>>2]|0;a=c[a+(k<<6)>>2]|0;k=j+8|0;c[k>>2]=-1;c[j>>2]=-1;m=j+12|0;c[m>>2]=a;i=j+4|0;c[i>>2]=a;Xl(e,c[((d|0)==2?b:b+-48|0)+40>>2]|0,f,g);f=c[f>>2]|0;g=c[g>>2]|0;d=0;e=a;b=-1;while(1){if((d|0)>=(e|0))break;e=e+-1|0;Yl(c[h+(d<<2)>>2]|0,j,f,g);if((d|0)!=(e|0))Yl(c[h+(e<<2)>>2]|0,j,f,g);a=c[i>>2]|0;b=c[j>>2]|0;if((a-b|0)<2)break;else d=d+1|0}if((b|0)>(a|0))a=(c[m>>2]|0)+(c[k>>2]|0)|0;else a=a+b|0;l=n;return (a+1|0)/2|0|0}function Wl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+16|0;f=c[(c[g>>2]|0)+196>>2]|0;e=f+(b<<6)|0;f=c[f+(b<<6)+4>>2]|0;if(!f)f=vH((c[e>>2]<<2)+8|0)|0;else f=xH(f,(c[e>>2]<<2)+8|0)|0;e=c[(c[g>>2]|0)+196>>2]|0;c[e+(b<<6)+4>>2]=f;e=c[e+(b<<6)>>2]|0;while(1){if((e|0)<=(d|0))break;h=e+-1|0;i=c[f+(h<<2)>>2]|0;c[f+(e<<2)>>2]=i;i=(c[i+16>>2]|0)+236|0;c[i>>2]=(c[i>>2]|0)+1;e=h}h=uh(a)|0;i=f+(d<<2)|0;c[i>>2]=h;h=c[h+16>>2]|0;c[h+236>>2]=d;c[h+232>>2]=b;g=(c[(c[g>>2]|0)+196>>2]|0)+(b<<6)|0;h=(c[g>>2]|0)+1|0;c[g>>2]=h;c[f+(h<<2)>>2]=0;return c[i>>2]|0}function Xl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=c[(c[a+16>>2]|0)+236>>2]|0;b=c[(c[b+16>>2]|0)+236>>2]|0;f=(a|0)>(b|0);c[d>>2]=f?b:a;c[e>>2]=f?a:b;return}function Yl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;h=m+4|0;g=m;b=c[b+16>>2]|0;do if((a[b+156>>0]|0)==1){k=c[b+236>>2]|0;if(c[b+176>>2]|0){i=c[b+180>>2]|0;b=0;g=0;h=0;while(1){j=c[i+(h<<2)>>2]|0;if(!j)break;n=c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=(n|0)>(e|0);b=j?((n|0)<(f|0)?b:1):b;g=j?g:1;h=h+1|0}if(g<<24>>24!=0&b<<24>>24==0){c[d>>2]=k+1;break}if(!(g<<24>>24==0&b<<24>>24!=0))break;c[d+4>>2]=k+-1;break}if((c[b+184>>2]|0)!=2)qa(88302,88322,63,88329);i=c[b+180>>2]|0;n=c[i>>2]|0;i=c[i+4>>2]|0;Xl(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0,c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,h,g);i=c[g>>2]|0;if((i|0)<=(e|0)){c[d>>2]=k;c[d+8>>2]=k;break}b=c[h>>2]|0;if((b|0)>=(f|0)){c[d+4>>2]=k;c[d+12>>2]=k;break}g=(b|0)<(e|0);h=(i|0)>(f|0);if(!(h&g)){if(!(!g?!((i|0)<(f|0)&(b|0)==(e|0)):0))c[d+8>>2]=k;if(!h?!((i|0)==(f|0)&(b|0)>(e|0)):0)break;c[d+12>>2]=k}}while(0);l=m;return}function Zl(a){a=a|0;c[46363]=1;rm(a);c[46363]=0;return}function _l(a){a=a|0;c[46363]=2;rm(a);c[46363]=0;return}function $l(a){a=a|0;var b=0;Az(a,134365,304,1)|0;dM(a);b=uH((e[(c[(ez(a)|0)+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[a+16>>2]|0)+132>>2]=b;bN(a,c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&1);return}function am(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+64|0;j=s+48|0;o=s+40|0;k=s+24|0;i=s+8|0;q=s+56|0;m=s;do if((b|0)!=0?(r=e+16|0,p=c[(c[r>>2]|0)+132>>2]|0,g=yx(e,b)|0,(a[g>>0]|0)!=0):0){a[q>>0]=0;b=p+8|0;if((c[46366]|0)>2?(c[i>>2]=p,c[i+4>>2]=b,c[i+8>>2]=p+16,c[i+12>>2]=q,(N1(g,88435,i)|0)>2):0){a[(c[r>>2]|0)+119>>0]=1;g=c[46366]|0;a:do if(+h[22908]>0.0){b=0;while(1){if((b|0)>=(g|0))break a;o=p+(b<<3)|0;h[o>>3]=+h[o>>3]/+h[22908];b=b+1|0}}while(0);if((g|0)>3)Hn(e,f,3);if((a[q>>0]|0)!=33){if(!d){b=1;break}if(!((QL(yx(e,d)|0)|0)<<24>>24)){b=1;break}}a[(c[r>>2]|0)+119>>0]=3;b=1;break}c[k>>2]=p;c[k+4>>2]=b;c[k+8>>2]=q;if((N1(g,98723,k)|0)<=1){c[j>>2]=ry(e)|0;c[j+4>>2]=g;Pw(1,88449,j)|0;b=0;break}a[(c[r>>2]|0)+119>>0]=1;g=c[46366]|0;b:do if(+h[22908]>0.0){b=0;while(1){if((b|0)>=(g|0))break b;k=p+(b<<3)|0;h[k>>3]=+h[k>>3]/+h[22908];b=b+1|0}}while(0);do if((g|0)>2){b=c[46401]|0;if((b|0?(n=yx(e,b)|0,n|0):0)?(c[o>>2]=m,(N1(n,98183,o)|0)==1):0){u=+h[22908];t=+h[m>>3];h[p+16>>3]=u>0.0?t/u:t;Hn(e,f,3);break}In(e,f)}while(0);if((a[q>>0]|0)!=33){if(!d){b=1;break}if(!((QL(yx(e,d)|0)|0)<<24>>24)){b=1;break}}a[(c[r>>2]|0)+119>>0]=3;b=1}else b=0;while(0);l=s;return b|0}function bm(a){a=a|0;var b=0,c=0;c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;JM(b);b=Gx(a,b)|0}HM(c);c=Ty(a,c)|0}cm(a);return}function cm(a){a=a|0;if((c[46363]|0)!=0|(c[46025]|0)<0)Fn(a);if((fz(a)|0)!=(a|0))Gz(a,0,134401);return}function dm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;m=q+32|0;o=q;k=nx(b,0,99611,0)|0;e=nx(b,0,99645,0)|0;p=(RL(xx(b,88493)|0,0)|0)<<24>>24!=0;if(!e)e=nx(b,0,99645,191979)|0;En(b)|0;n=b+16|0;i=0;while(1){j=c[(c[(c[n>>2]|0)+152>>2]|0)+(i<<2)>>2]|0;if(!j){f=12;break}g=j+16|0;f=c[g>>2]|0;if(!(a[f+119>>0]|0)){if(z$(ry(j)|0,104980,7)|0){f=8;break}f=c[g>>2]|0}f=c[f+108>>2]|0;if(f|0)em(j,f,99607);i=i+1|0}a:do if((f|0)==8){p=ry(j)|0;e=ry(b)|0;c[m>>2]=p;c[m+4>>2]=e;Pw(1,88505,m)|0;e=-1}else if((f|0)==12){fm(b,k,e);j=gm(b)|0;e=c[(c[n>>2]|0)+8>>2]|0;if(!(c[e+88>>2]|0))e=0;else{c[e+84>>2]=0;e=1}g=(d|0)!=0;i=(e|0)!=0;if(!(i|g&(c[46363]|0)==1^1)?(tq(b)|0)!=0:0){f=c[(c[n>>2]|0)+12>>2]|0;if(!f)f=1;else{a[f+81>>0]=0;f=1}}else f=0;mM(b);if(i){d=(c[n>>2]|0)+16|0;_E(o,b);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];c[d+16>>2]=c[o+16>>2];c[d+20>>2]=c[o+20>>2];c[d+24>>2]=c[o+24>>2];c[d+28>>2]=c[o+28>>2]}if(!g){c[46367]=1;f=Sy(b)|0;while(1){if(!f)break a;p=c[f+16>>2]|0;o=c[p+132>>2]|0;h[p+16>>3]=+h[o>>3]*72.0;h[p+24>>3]=+h[o+8>>3]*72.0;f=Ty(b,f)|0}}do if(!(p|i)){p=c[n>>2]|0;if(!(+h[p+16>>3]!=0.0)?!(+h[p+24>>3]!=0.0):0)break;cn(b)}while(0);if(!((j|0)!=0&(f|(an(b)|0)<<24>>24!=0))){if((j|0)==2){c[46367]=1;break}}else hm(b);$m(b,0)}while(0);l=q;return e|0}function em(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k+32|0;f=k+24|0;g=k+16|0;i=k;b=xx(b,e)|0;if(b|0?(c[j>>2]=f,c[j+4>>2]=g,(N1(b,102477,j)|0)==2):0){j=d+56|0;km(i,+h[f>>3],+h[g>>3]);c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];a[d+81>>0]=1}l=k;return}function fm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+32|0;f=m+24|0;g=m+16|0;i=m;j=b+16|0;if((d|0?(c[(c[j>>2]|0)+12>>2]|0)!=0:0)?(n=yx(b,d)|0,c[k>>2]=f,c[k+4>>2]=g,(N1(n,102477,k)|0)==2):0){n=(c[(c[j>>2]|0)+12>>2]|0)+56|0;km(i,+h[f>>3],+h[g>>3]);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1}a:do if(e|0){f=wA(b)|0;while(1){if(!f)break a;lm(f,b,d,e);f=xA(f)|0}}while(0);l=m;return}function gm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(by(a)|0){f=nx(a,2,99597,0)|0;if(!((f|0)==0|(c[46363]|0)<2)){b=0;e=Sy(a)|0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;g=b+((im(f,d)|0)!=0&1)|0;d=Gx(a,d)|0;b=g}e=Ty(a,e)|0}if(b){b=(b|0)==(by(a)|0);b=b?2:1}else b=0}else b=0}else b=2;return b|0}function hm(a){a=a|0;var b=0,d=0,e=0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;KM(b);e=b+16|0;nH(c[(c[e>>2]|0)+96>>2]|0);nH(c[(c[e>>2]|0)+108>>2]|0);nH(c[(c[e>>2]|0)+100>>2]|0);nH(c[(c[e>>2]|0)+104>>2]|0);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function im(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;B=l;l=l+96|0;z=B+72|0;x=B+56|0;A=B+48|0;y=B+32|0;w=B+16|0;r=B+88|0;s=B+8|0;t=B;u=B+84|0;v=B+80|0;b=yx(d,b)|0;do if(a[b>>0]|0){sE(d,u,v);q=1;f=0;e=0;j=0.0;i=0.0;k=0.0;g=0.0;a:while(1){c[w>>2]=s;c[w+4>>2]=t;c[w+8>>2]=r;if((N1(b,88542,w)|0)==2){p=1;b=b+(c[r>>2]|0)|0;i=+h[s>>3];g=+h[t>>3]}else p=e;c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=r;if((N1(b,88554,y)|0)==2){o=1;b=b+(c[r>>2]|0)|0;j=+h[s>>3];k=+h[t>>3]}else o=f;m=jm(b)|0;if(!((m|0)>3&((m|0)%3|0|0)==1)){e=8;break}n=vH(m<<4)|0;e=n;f=m;while(1){if(!f)break;c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=r;if((N1(b,88624,x)|0)<2){e=13;break a}C=b+(c[r>>2]|0)|0;h[e>>3]=+h[s>>3];h[e+8>>3]=+h[t>>3];e=e+16|0;f=f+-1|0;b=C}while(1){e=a[b>>0]|0;f=b+1|0;if(!(B$(e<<24>>24)|0))break;else b=f}C=e<<24>>24==0;b=C?b:f;q=C?0:q;f=PK(d,m)|0;if(p|0){c[f+8>>2]=c[u>>2];h[f+16>>3]=i;h[f+24>>3]=g}if(o|0){c[f+12>>2]=c[v>>2];h[f+32>>3]=j;h[f+40>>3]=k}e=0;while(1){if((e|0)>=(m|0))break;C=(c[f>>2]|0)+(e<<4)|0;D=n+(e<<4)|0;c[C>>2]=c[D>>2];c[C+4>>2]=c[D+4>>2];c[C+8>>2]=c[D+8>>2];c[C+12>>2]=c[D+12>>2];e=e+1|0}D_(n);if(!q){e=26;break}else{f=o;e=p}}if((e|0)==8){KM(d);if(a[190691]|0){b=0;break}a[190691]=1;D=ry(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;b=ry(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;c[A>>2]=D;c[A+4>>2]=b;Pw(0,88567,A)|0;b=0;break}else if((e|0)==13){if(!(a[190691]|0)){a[190691]=1;C=ry(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;D=ry(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;c[z>>2]=C;c[z+4>>2]=D;Pw(0,88634,z)|0}D_(n);KM(d);b=0;break}else if((e|0)==26){f=d+16|0;b=c[f>>2]|0;e=c[b+96>>2]|0;if(e){em(d,e,99611);b=c[f>>2]|0}e=c[b+108>>2]|0;if(e){em(d,e,99607);b=c[f>>2]|0}e=c[b+100>>2]|0;if(e){em(d,e,99614);b=c[f>>2]|0}b=c[b+104>>2]|0;if(!b){b=1;break}em(d,b,99622);b=1;break}}else b=0;while(0);l=B;return b|0}function jm(b){b=b|0;var c=0,d=0;d=0;do{while(1){c=a[b>>0]|0;if(!(B$(c&255)|0))break;else b=b+1|0}a:do if(!(c<<24>>24))c=0;else{d=d+1|0;while(1){if(!(c<<24>>24)){c=0;break a}if(c<<24>>24==59|(B$(c&255)|0)!=0)break a;c=b+1|0;b=c;c=a[c>>0]|0}}while(0)}while((B$(c&255)|0)!=0);return d|0}function km(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function lm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;if((z$(ry(a)|0,104980,7)|0)==0?(mm(a,e,f)|0)!=0:0){Az(a,134401,280,1)|0;i=(c[a+16>>2]|0)+16|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];nm(b,a);fm(a,d,e)}else g=4;a:do if((g|0)==4){a=wA(a)|0;while(1){if(!a)break a;lm(a,b,d,e);a=xA(a)|0}}while(0);l=h;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0;i=l;l=l+48|0;j=i+32|0;g=i;k=yx(a,b)|0;a=g+8|0;b=g+24|0;c[j>>2]=g;c[j+4>>2]=a;c[j+8>>2]=g+16;c[j+12>>2]=b;if((N1(k,88682,j)|0)==4){e=+h[a>>3];f=+h[b>>3];if(e>f){h[a>>3]=f;h[b>>3]=e};c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[d+16>>2]=c[g+16>>2];c[d+20>>2]=c[g+20>>2];c[d+24>>2]=c[g+24>>2];c[d+28>>2]=c[g+28>>2];a=1}else a=0;l=i;return a|0}function nm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=uH((a<<2)+8|0)|0;else a=wH(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;fH(b);return}function om(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+8|0;k=n;i=n+16|0;j=n+12|0;h=xx(b,88698)|0;do if((h|0)!=0?(g=a[h>>0]|0,g<<24>>24!=0):0){g=g&255;if(!(N$(g)|0))if((e|0)==2|(g+-48|0)>>>0<10)e=h;else break;else{if(!(z$(h,88704,4)|0)){e=0;break}if(!(z$(h,102485,7)|0)){e=1;break}if(z$(h,88709,6)|0)if((e|0)==2)e=h;else break;else e=h+6|0}if(!(((d[e>>0]|0)+-48|0)>>>0<10?(c[k>>2]=j,(N1(e,96907,k)|0)>=1):0)){k=H1()|0;k=(db(0)|0)^k;c[j>>2]=k;c[m>>2]=k;Y0(i,96907,m)|0;zx(b,88698,i)|0}c[f>>2]=c[j>>2];e=2}while(0);l=n;return e|0}function pm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f+4|0;c[e>>2]=1;d=om(a,d,e)|0;if((d|0)!=2&(c[46026]|0)!=0)Pw(0,88716,f)|0;if((d|0)==1)qm(a,b);i2(c[e>>2]|0);l=f;return d|0}function qm(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0.0;g=+(d|0);i=6.283185307179586/g;e=Sy(b)|0;f=0.0;while(1){if(!e)break;l=+E(+f)*g;j=c[e+16>>2]|0;k=c[j+132>>2]|0;h[k>>3]=l;h[k+8>>3]=+F(+f)*g;a[j+119>>0]=1;if((c[46366]|0)>2)In(e,d);e=Ty(b,e)|0;f=f+i}return}function rm(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0;r=l;l=l+80|0;d=r+24|0;n=r+32|0;k=r;p=r+28|0;m=r+64|0;q=+h[22908];do if(c[46363]|0){h[22908]=72.0;sm(b);tm(b);if((dm(b,1)|0)<0){Pw(3,88764,d)|0;break}else{PI(b,0);f=32;break}}else{o=RL(xx(b,88493)|0,0)|0;h[22908]=+ML(b);sm(b);g=um(b)|0;Sp(b,k,0)|0;i=vm(b)|0;j=ZD(b,0,n)|0;d=YD(b,-1,8)|0;c[46025]=d;e=(d|0)<0;do if(!j){if((g|0)!=0&e){c[46025]=8;c[n+16>>2]=2;f=11;break}c[n+16>>2]=2;if((d|0)<=-1){wm(b,g,i);Vp(b,k)|0;tm(b);if(!(o<<24>>24)){hn(b);break}else{xm(b);break}}else f=11}else if(e){c[46025]=8;f=11}else f=11;while(0);if((f|0)==11){j=dD(b,p,88792,m)|0;d=c[p>>2]|0;do if((d|0)<=1){wm(b,g,i);Vp(b,k)|0;if(!(o<<24>>24)){hn(b);break}else{xm(b);break}}else{f=o<<24>>24==0;e=0;while(1){if((e|0)>=(d|0))break;d=c[j+(e<<2)>>2]|0;vD(d)|0;wm(d,g,i);Vp(d,k)|0;$M(d,2);if(f)hn(d);else xm(d);e=e+1|0;d=c[p>>2]|0}if(!(a[m>>0]|0))e=0;else{e=uH(d)|0;a[e>>0]=1;d=c[p>>2]|0}c[n+8>>2]=c[46025];c[n+20>>2]=e;c[n+12>>2]=1;VD(d,j,b,n)|0;D_(e)}while(0);mM(b);tm(b);d=0;while(1){if((d|0)>=(c[p>>2]|0))break;n=c[j+(d<<2)>>2]|0;Fn(n);Cz(n,134401)|0;dz(b,n)|0;d=d+1|0}D_(j)}PI(b,o<<24>>24==0&1);f=32}while(0);if((f|0)==32)h[22908]=q;l=r;return}function sm(a){a=a|0;var d=0,e=0,f=0,g=0;$M(a,2);f=KL(a,nx(a,0,89557,0)|0,2,2)|0;d=(KL(a,nx(a,0,90633,0)|0,f,2)|0)&65535;b[(c[(fz(a)|0)+16>>2]|0)+176>>1]=d;d=c[(c[a+60>>2]|0)+16>>2]|0;g=d+176|0;e=b[g>>1]|0;e=(e&65535)<10?e:10;b[g>>1]=e;e=e&65535;c[46366]=e;b[d+178>>1]=(f|0)<(e|0)?f:e;Hm(a);return}function tm(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;a:do if((c[46366]|0)>2&(c[46401]|0)!=0){b=Sy(a)|0;while(1){if(!b)break a;h[e>>3]=+h[(c[(c[b+16>>2]|0)+132>>2]|0)+16>>3]*72.0;Y0(d,98183,e)|0;rx(b,c[46401]|0,d)|0;b=Ty(a,b)|0}}while(0);l=f;return}function um(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=xx(b,89477)|0;a:do if(!d)b=1;else{switch(a[d>>0]|0){case 0:{b=1;break a}case 75:{if(!(b$(d,89482)|0)){b=0;break a}break}case 109:{if(!(b$(d,89485)|0)){b=1;break a}break}case 104:{if(!(b$(d,89491)|0)){b=2;break a}break}default:{}}b=ry(b)|0;c[e>>2]=d;c[e+4>>2]=b;Pw(0,89496,e)|0;b=1}while(0);l=f;return b|0}function vm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;e=h;d=xx(b,89260)|0;a:do if(!d)b=0;else{switch(a[d>>0]|0){case 0:{b=0;break a}case 99:{if(!(b$(d,89266)|0)){b=1;break a}break}case 115:{if(!(b$(d,89274)|0)){b=2;break a}if(!(b$(d,89281)|0)){b=0;break a}break}case 109:{if(!(b$(d,89291)|0)){if(nx(b,2,90566,0)|0){b=3;break a}c[e>>2]=ry(b)|0;Pw(0,89295,e)|0;Pw(3,89358,f)|0;b=0;break a}break}default:{}}b=ry(b)|0;c[g>>2]=d;c[g+4>>2]=b;Pw(0,89415,g)|0;b=0}while(0);l=h;return b|0}function wm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=xx(a,90975)|0;if(!e)if((b|0)==1)e=200;else e=(ay(a)|0)*100|0;else e=a2(e)|0;c[46365]=e;e=yn(a,b)|0;do if(!((e|0)<2|(c[46365]|0)<0))if(!b){zm(a,e,d);break}else{ym(a,e,b,d,c[46366]|0);break}while(0);return}function xm(a){a=a|0;mM(a);$m(a,1);return}function ym(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;r=u+40|0;o=u+24|0;n=u;p=u+48|0;t=u+44|0;q=(d|0)==2;i=pm(a,b,q?0:2)|0;j=Gm(a)|0;k=j|4;s=vH(f<<2)|0;c[s>>2]=vH(O(b<<3,f)|0)|0;g=c[46366]|0;f=1;while(1){if((f|0)>=(g|0))break;c[s+(f<<2)>>2]=(c[s>>2]|0)+((O(f,b)|0)<<3);f=f+1|0}g=(i|0)==0;f=g?k:j;if(0){k=c[15686]|0;j=c[46365]|0;m=+h[22909];c[n>>2]=e;c[n+4>>2]=g&1;c[n+8>>2]=f&3;c[n+12>>2]=j;h[n+16>>3]=m;g1(k,89073,n)|0;E1(89130,15,1,k)|0;EL();E1(89146,13,1,k)|0}n=Cm(a,b,p,d,e,t)|0;if(0){k=c[15686]|0;m=+FL();c[o>>2]=b;h[o+8>>3]=m;g1(k,89160,o)|0}if((d|0)!=1){m=+LL(a,nx(a,0,89179,0)|0,0.0,-1797693134862315708145274.0e284);if(q){f=Gq(n,b,c[p>>2]|0,s,c[t>>2]|0,c[46366]|0,f,e,c[46365]|0,m)|0;g=12}else g=14}else{f=qn(n,b,c[p>>2]|0,s,c[t>>2]|0,c[46366]|0,f,e,c[46365]|0)|0;g=12}if((g|0)==12)if((f|0)<0)Pw(3,89189,r)|0;else g=14;a:do if((g|0)==14){g=Sy(a)|0;while(1){if(!g)break a;k=c[g+16>>2]|0;i=c[k+120>>2]|0;j=c[46366]|0;k=k+132|0;f=0;while(1){if((f|0)>=(j|0))break;h[(c[k>>2]|0)+(f<<3)>>3]=+h[(c[s+(f<<2)>>2]|0)+(i<<3)>>3];f=f+1|0}g=Ty(a,g)|0}}while(0);br(n);D_(c[s>>2]|0);D_(s);D_(c[t>>2]|0);l=u;return}function zm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0;g=l;l=l+48|0;f=g+32|0;e=g;switch(d|0){case 2:{Am(a,b);break}case 1:{if(!(Cq(a,b)|0)){c[e>>2]=ry(a)|0;Pw(0,88802,e)|0;Pw(3,91952,g+8|0)|0;Pw(3,88854,g+16|0)|0;Pw(3,88926,g+24|0)|0;Wn(a,b)}break}default:{Wn(a,b);if((d|0)==3)Bm(a)}}Kn(a,b);Ln(a,b);if(0){e=c[15686]|0;j=c[46365]|0;i=+h[22909];c[f>>2]=d;c[f+4>>2]=j;h[f+8>>3]=i;g1(e,88964,f)|0;EL()}Mn(a,b);l=g;return}function Am(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+16|0;g=Cm(a,b,j,0,2,0)|0;i=ds(g,b)|0;e=a+16|0;a=0;while(1){if((a|0)>=(b|0))break;f=i+(a<<2)|0;d=0;while(1){if((d|0)==(b|0))break;h[(c[(c[(c[e>>2]|0)+160>>2]|0)+(a<<2)>>2]|0)+(d<<3)>>3]=+(c[(c[f>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a=a+1|0}D_(c[i>>2]|0);D_(i);br(g);l=j;return}function Bm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0;f=a+16|0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;g=c[b>>2]&3;e=(c[c[((g|0)==3?b:b+48|0)+40>>2]>>2]|0)>>>4;g=(c[c[((g|0)==2?b:b+-48|0)+40>>2]>>2]|0)>>>4;if((e|0)!=(g|0)){j=+h[(c[b+16>>2]|0)+136>>3];i=c[(c[f>>2]|0)+160>>2]|0;h[(c[i+(g<<2)>>2]|0)+(e<<3)>>3]=j;h[(c[i+(e<<2)>>2]|0)+(g<<3)>>3]=j}b=Gx(a,b)|0}d=Ty(a,d)|0}return}function Cm(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0;j=by(a)|0;G=GI()|0;if((f|0)==2){k=0;D=0}else{D=nx(a,2,90566,0)|0;k=(c[46404]|0)!=0&1;D=(D|0)!=0}A=(e|1|0)==3;E=vH(b*20|0)|0;F=vH(b<<2)|0;l=(j<<1)+b<<2;m=vH(l)|0;z=A|D;if(z)f=vH(l)|0;else f=0;C=(k|0)!=0;if(C)j=vH(l)|0;else j=0;if(A)k=vH(l)|0;else k=0;l=0;x=Sy(a)|0;y=0;while(1){if(!x)break;JI(G);if((c[(c[x+16>>2]|0)+120>>2]|0)!=(y|0)){B=12;break}c[F+(y<<2)>>2]=x;u=E+(y*20|0)+4|0;c[u>>2]=m;v=E+(y*20|0)+8|0;c[v>>2]=z?f:0;w=E+(y*20|0)+12|0;c[w>>2]=C?j:0;c[E+(y*20|0)+16>>2]=A?k:0;r=1;t=Jx(a,x)|0;s=1;q=l;m=m+4|0;f=z?f+4|0:f;j=C?j+4|0:j;k=A?k+4|0:k;while(1){if(!t)break;n=c[t>>2]&3;p=t+-48|0;l=t+48|0;do if((c[((n|0)==2?t:p)+40>>2]|0)==(c[((n|0)==3?t:l)+40>>2]|0)){n=r;p=s;l=q}else{n=Dm(G,t,r)|0;if((n|0)!=(r|0)){if(C){p=(c[w>>2]|0)+(n<<2)|0;g[p>>2]=+h[(c[t+16>>2]|0)+128>>3]+ +g[p>>2]}if(!D){n=r;p=s;l=q;break}n=(c[v>>2]|0)+(n<<2)|0;H=+h[(c[t+16>>2]|0)+136>>3];o=+(~~+g[n>>2]|0);g[n>>2]=H>o?H:o;n=r;p=s;l=q;break}I=c[t>>2]&3;l=(I|0)==3?t:l;q=q+1|0;n=r+1|0;r=m+4|0;c[m>>2]=c[(c[(c[((c[l+40>>2]|0)==(x|0)?((I|0)==2?t:p):l)+40>>2]|0)+16>>2]|0)+120>>2];if(C){g[j>>2]=+h[(c[t+16>>2]|0)+128>>3];j=j+4|0}if(D){l=f+4|0;g[f>>2]=+h[(c[t+16>>2]|0)+136>>3];if(A){f=l;B=27}else f=l}else if(A){g[f>>2]=1.0;f=f+4|0;B=27}if((B|0)==27){B=0;l=xx(t,98533)|0;if((l|0)!=0?(z$(l,132627,4)|0)==0:0)o=0.0;else o=(x|0)==(c[((c[t>>2]&3|0)==2?t:p)+40>>2]|0)?1.0:-1.0;g[k>>2]=o;k=k+4|0}p=s+1|0;l=q;m=r}while(0);r=n;t=Kx(a,t,x)|0;s=p;q=l}c[E+(y*20|0)>>2]=s;c[c[u>>2]>>2]=y;l=q;x=Ty(a,x)|0;y=y+1|0}if((B|0)==12)qa(89003,89018,819,89030);if(A)Em(E,b,e,F);n=(l|0)/2|0;a:do if((n|0)!=(by(a)|0)){l=(n<<1)+b<<2;k=xH(c[E+4>>2]|0,l)|0;if(D)f=xH(c[E+8>>2]|0,l)|0;if(C){m=0;j=xH(c[E+12>>2]|0,l)|0}else m=0;while(1){if((m|0)>=(b|0))break a;l=c[E+(m*20|0)>>2]|0;c[E+(m*20|0)+4>>2]=k;if(D){c[E+(m*20|0)+8>>2]=f;f=f+(l<<2)|0}if(C){c[E+(m*20|0)+12>>2]=j;j=j+(l<<2)|0}m=m+1|0;k=k+(l<<2)|0}}while(0);c[d>>2]=n;if(!i)D_(F);else c[i>>2]=F;KI(G);return E|0}function Dm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=c[b>>2]&3;e=c[(c[(c[((f|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;b=c[(c[(c[((f|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;f=(e|0)>(b|0);return LI(a,f?b:e,f?e:b,d)|0}function Em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=0;while(1){if((g|0)>=(d|0)){g=0;break}h=c[(c[f+(g<<2)>>2]|0)+16>>2]|0;a[h+157>>0]=0;a[h+158>>0]=0;g=g+1|0}while(1){if((g|0)>=(d|0))break;if(!(a[(c[(c[f+(g<<2)>>2]|0)+16>>2]|0)+157>>0]|0))Fm(b,g,e,f);g=g+1|0}return}function Fm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0;q=(c[f+(d<<2)>>2]|0)+16|0;l=c[q>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=b+(d*20|0)|0;m=b+(d*20|0)+16|0;n=b+(d*20|0)+4|0;o=(e|0)==3?-1.0:1.0;k=1;a:while(1){if((k|0)>=(c[l>>2]|0)){h=14;break}h=(c[m>>2]|0)+(k<<2)|0;do if(!(+g[h>>2]==1.0)){p=c[(c[n>>2]|0)+(k<<2)>>2]|0;i=c[(c[f+(p<<2)>>2]|0)+16>>2]|0;if(!(a[i+158>>0]|0)){if(a[i+157>>0]|0)break;Fm(b,p,e,f);break}g[h>>2]=o;i=b+(p*20|0)+4|0;j=c[b+(p*20|0)>>2]|0;h=1;while(1){if((h|0)>=(j|0)){h=9;break a}if((c[(c[i>>2]|0)+(h<<2)>>2]|0)==(d|0))break;h=h+1|0}g[(c[b+(p*20|0)+16>>2]|0)+(h<<2)>>2]=-1.0}while(0);k=k+1|0}if((h|0)==9)qa(89044,89018,721,89064);else if((h|0)==14){a[(c[q>>2]|0)+158>>0]=0;return}}function Gm(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=KL(a,nx(a,0,89205,0)|0,2,0)|0;if((a|0)==0|(a|0)>2){c[b>>2]=89205;Pw(0,89214,b)|0;a=2}l=d;return a|0}function Hm(a){a=a|0;var b=0,d=0,e=0;d=ay(a)|0;c[46026]=nx(a,1,99597,0)|0;e=nx(a,1,90570,0)|0;b=Sy(a)|0;while(1){if(!b)break;$l(b);am(c[46026]|0,e,b,d)|0;b=Ty(a,b)|0}d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;Im(b);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function Im(a){a=a|0;var b=0.0;Az(a,134378,176,1)|0;eM(a)|0;b=+LL(a,c[46404]|0,1.0,1.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function Jm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;a=uH(64)|0;e=a+8|0;f=d+8|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));d=c[d+56>>2]|0;c[a+56>>2]=d;b[(c[d+16>>2]|0)+168>>1]=1;return a|0}function Km(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function Lm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if(a>>>0<=e>>>0)if(a>>>0>=e>>>0){e=c[b+24>>2]|0;a=c[d+24>>2]|0;if(e>>>0<=a>>>0)if(e>>>0>=a>>>0){a=~~(+h[b+8>>3]-+h[d+8>>3]);if(!a){a=~~(+h[b+16>>3]-+h[d+16>>3]);if(!a){a=~~(+h[b+32>>3]-+h[d+32>>3]);if(!a)a=~~(+h[b+40>>3]-+h[d+40>>3])}}}else a=-1;else a=1}else a=-1;else a=1;return a|0}function Mm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;g=k;h=e+16|0;i=b[(c[h>>2]|0)+168>>1]|0;j=i<<16>>16;if(i<<16>>16!=1&(a[191874]|0)==0){i=vH(j<<2)|0;g=0;while(1){if((g|0)>=(j|0))break;c[i+(g<<2)>>2]=e;e=c[(c[e+16>>2]|0)+172>>2]|0;g=g+1|0}m=+(f|0);YK(d,i,0,j,m,m,17764);e=0;while(1){if((e|0)>=(j|0))break;g=c[i+(e<<2)>>2]|0;h=g+16|0;if(c[(c[h>>2]|0)+96>>2]|0){f=ez(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)|0;kM(f,c[(c[h>>2]|0)+96>>2]|0)}dL(g);e=e+1|0}D_(i)}else{c[g>>2]=e;m=+(f|0);YK(d,g,0,1,m,m,17764);if(c[(c[h>>2]|0)+96>>2]|0){j=ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;kM(j,c[(c[h>>2]|0)+96>>2]|0)}dL(e)}l=k;return}function Nm(a){a=a|0;return 0}function Om(a){a=a|0;return 0}function Pm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+384|0;O=Q+368|0;P=Q+112|0;j=Q+32|0;r=Q+336|0;K=Q+320|0;L=Q+304|0;M=Q+288|0;N=Q+272|0;i=Q+256|0;H=Q+240|0;I=Q+224|0;J=Q+208|0;t=Q+192|0;u=Q+176|0;v=Q+160|0;z=Q+144|0;A=Q+128|0;B=Q+96|0;D=Q+16|0;G=Q;a:do switch(HJ(b)|0){case 3:case 1:{f=uH(8)|0;z=b+16|0;b=c[z>>2]|0;i=c[b+12>>2]|0;do if(!(e<<24>>24)){b=c[i+8>>2]|0;if((b|0)>2){y=0.0;j=c[i+44>>2]|0;e=0;p=+g[d>>2];q=+g[d+4>>2];break}else{y=+k2()*.01;b=8;j=0;e=1;p=0.0;q=0.0;break}}else if(!(c[i+40>>2]&2048)){q=+h[b+88>>3];p=-q;y=+h[b+80>>3];x=y*-.5;h[j>>3]=p;h[j+8>>3]=x;h[j+16>>3]=q;h[j+24>>3]=x;y=y*.5;h[j+32>>3]=q;h[j+40>>3]=y;h[j+48>>3]=p;h[j+56>>3]=y;y=0.0;b=4;e=0;p=0.0;q=0.0;break}else{jM(r,i);p=+h[r>>3];x=+h[r+8>>3];q=+h[r+16>>3];y=+h[r+24>>3];h[j>>3]=p;h[j+8>>3]=x;h[j+16>>3]=q;h[j+24>>3]=x;h[j+32>>3]=q;h[j+40>>3]=y;h[j+48>>3]=p;h[j+56>>3]=y;y=0.0;b=4;e=0;p=0.0;q=0.0;break}while(0);c[f+4>>2]=b;r=uH(b<<4)|0;c[f>>2]=r;s=1.0/+(b|0);t=d+8|0;u=d+4|0;v=(b|0)==4;w=-p;x=-q;i=0;while(1){if((b|0)<=(i|0))break a;do if(e){k=+(i|0)*6.283185307179586*s+y;m=+E(+k);k=+F(+k);if(!(a[t>>0]|0)){P=c[z>>2]|0;n=k*+g[u>>2]*+h[P+80>>3];k=m*+g[d>>2]*(+h[P+96>>3]+ +h[P+88>>3])}else{P=c[z>>2]|0;n=(+h[P+80>>3]+ +g[u>>2])*k;k=(+h[P+96>>3]+ +h[P+88>>3]+ +g[d>>2])*m}o=k*.5;k=n*.5}else{if(!(a[t>>0]|0)){o=+h[j+(i<<4)>>3]*p;k=+h[j+(i<<4)+8>>3]*q;break}if(!v){o=+h[j+(i<<4)>>3];k=+h[j+(i<<4)+8>>3];n=+C(+(k*k+o*o));o=(p/n+1.0)*o;k=(q/n+1.0)*k;break}switch(i|0){case 0:{m=q;k=p;break}case 1:{m=q;k=w;break}case 2:{m=x;k=w;break}case 3:{m=x;k=p;break}default:{m=0.0;k=0.0}}o=+h[j+(i<<4)>>3]+k;k=+h[j+(i<<4)+8>>3]+m}while(0);O=c[z>>2]|0;P=b-i+-1|0;h[r+(P<<4)>>3]=+h[O+16>>3]+o;h[r+(P<<4)+8>>3]=+h[O+24>>3]+k;i=i+1|0}}case 2:{G=b+16|0;f=c[(c[G>>2]|0)+12>>2]|0;k=+h[f+16>>3];o=+h[f+24>>3];m=+h[f+32>>3];n=+h[f+40>>3];f=uH(8)|0;c[f+4>>2]=4;b=uH(64)|0;c[f>>2]=b;G=(c[G>>2]|0)+16|0;c[P>>2]=c[G>>2];c[P+4>>2]=c[G+4>>2];c[P+8>>2]=c[G+8>>2];c[P+12>>2]=c[G+12>>2];if(!(a[d+8>>0]|0)){c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(i,k,o,O,d);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];N=(c[f>>2]|0)+16|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(H,k,n,O,d);c[N>>2]=c[H>>2];c[N+4>>2]=c[H+4>>2];c[N+8>>2]=c[H+8>>2];c[N+12>>2]=c[H+12>>2];N=(c[f>>2]|0)+32|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(I,m,n,O,d);c[N>>2]=c[I>>2];c[N+4>>2]=c[I+4>>2];c[N+8>>2]=c[I+8>>2];c[N+12>>2]=c[I+12>>2];N=(c[f>>2]|0)+48|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(J,m,o,O,d);c[N>>2]=c[J>>2];c[N+4>>2]=c[J+4>>2];c[N+8>>2]=c[J+8>>2];c[N+12>>2]=c[J+12>>2];break a}else{y=k-+g[d>>2];J=d+4|0;x=o-+g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(K,y,x,O);c[b>>2]=c[K>>2];c[b+4>>2]=c[K+4>>2];c[b+8>>2]=c[K+8>>2];c[b+12>>2]=c[K+12>>2];K=(c[f>>2]|0)+16|0;x=k-+g[d>>2];y=n+ +g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(L,x,y,O);c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];L=(c[f>>2]|0)+32|0;y=m+ +g[d>>2];x=n+ +g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(M,y,x,O);c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];M=(c[f>>2]|0)+48|0;x=m+ +g[d>>2];y=o-+g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(N,x,y,O);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];break a}}case 4:{b=b+16|0;f=uH(8)|0;c[f+4>>2]=4;i=uH(64)|0;c[f>>2]=i;j=c[b>>2]|0;N=j+16|0;c[P>>2]=c[N>>2];c[P+4>>2]=c[N+4>>2];c[P+8>>2]=c[N+8>>2];c[P+12>>2]=c[N+12>>2];k=-+h[j+88>>3];if(!(a[d+8>>0]|0)){x=-+h[j+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(A,k,x,O,d);c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];N=(c[f>>2]|0)+16|0;M=c[b>>2]|0;x=-+h[M+88>>3];y=+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(B,x,y,O,d);c[N>>2]=c[B>>2];c[N+4>>2]=c[B+4>>2];c[N+8>>2]=c[B+8>>2];c[N+12>>2]=c[B+12>>2];N=(c[f>>2]|0)+32|0;M=c[b>>2]|0;y=+h[M+96>>3];x=+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(D,y,x,O,d);c[N>>2]=c[D>>2];c[N+4>>2]=c[D+4>>2];c[N+8>>2]=c[D+8>>2];c[N+12>>2]=c[D+12>>2];N=(c[f>>2]|0)+48|0;M=c[b>>2]|0;x=+h[M+96>>3];y=-+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(G,x,y,O,d);c[N>>2]=c[G>>2];c[N+4>>2]=c[G+4>>2];c[N+8>>2]=c[G+8>>2];c[N+12>>2]=c[G+12>>2];break a}else{y=k-+g[d>>2];M=d+4|0;x=-+h[j+80>>3]-+g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(t,y,x,O);c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];N=(c[f>>2]|0)+16|0;L=c[b>>2]|0;x=-+h[L+88>>3]-+g[d>>2];y=+h[L+80>>3]+ +g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(u,x,y,O);c[N>>2]=c[u>>2];c[N+4>>2]=c[u+4>>2];c[N+8>>2]=c[u+8>>2];c[N+12>>2]=c[u+12>>2];N=(c[f>>2]|0)+32|0;L=c[b>>2]|0;y=+h[L+96>>3]+ +g[d>>2];x=+h[L+80>>3]+ +g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(v,y,x,O);c[N>>2]=c[v>>2];c[N+4>>2]=c[v+4>>2];c[N+8>>2]=c[v+8>>2];c[N+12>>2]=c[v+12>>2];N=(c[f>>2]|0)+48|0;L=c[b>>2]|0;x=+h[L+96>>3]+ +g[d>>2];y=-+h[L+80>>3]-+g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(z,x,y,O);c[N>>2]=c[z>>2];c[N+4>>2]=c[z+4>>2];c[N+8>>2]=c[z+8>>2];c[N+12>>2]=c[z+12>>2];break a}}default:f=0}while(0);l=Q;return f|0}function Qm(a,b,c,d){a=a|0;b=+b;c=+c;d=d|0;c=+h[d+8>>3]+c;h[a>>3]=+h[d>>3]+b;h[a+8>>3]=c;return}function Rm(a,b,c,d,e){a=a|0;b=+b;c=+c;d=d|0;e=e|0;c=+g[e+4>>2]*c+ +h[d+8>>3];h[a>>3]=+g[e>>2]*b+ +h[d>>3];h[a+8>>3]=c;return}function Sm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+112|0;j=o+88|0;i=o+72|0;k=o+32|0;m=o+16|0;n=o;f=o+56|0;g=o+40|0;h=b+48|0;r=(c[(c[((c[b>>2]&3|0)==3?b:h)+40>>2]|0)+16>>2]|0)+16|0;p=b+16|0;q=(c[p>>2]|0)+16|0;c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[j+12>>2]=c[q+12>>2];Tm(f,i,j);c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];f=b+-48|0;q=(c[(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16>>2]|0)+16|0;p=(c[p>>2]|0)+56|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[j>>2]=c[p>>2];c[j+4>>2]=c[p+4>>2];c[j+8>>2]=c[p+8>>2];c[j+12>>2]=c[p+12>>2];Tm(g,i,j);c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];if(!e){g=-1111;f=-1111}else{r=c[b>>2]&3;g=c[(c[(c[((r|0)==2?b:f)+40>>2]|0)+16>>2]|0)+288>>2]|0;f=c[(c[(c[((r|0)==3?b:h)+40>>2]|0)+16>>2]|0)+288>>2]|0};c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];vU(d,i,f,j,g,k)|0;p=k;q=c[p+4>>2]|0;r=a;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=o;return}function Tm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Um(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+144|0;p=u+104|0;q=u+88|0;o=u+80|0;n=u+72|0;j=u+64|0;s=u+128|0;k=u+32|0;m=u+124|0;t=u+16|0;r=u;i=u+120|0;h=(c[b+16>>2]|0)+144|0;g=c[h>>2]|0;h=c[h+4>>2]|0;v=j;c[v>>2]=g;c[v+4>>2]=h;v=g;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];h=g+(h+-1<<4)|0;c[r>>2]=c[h>>2];c[r+4>>2]=c[h+4>>2];c[r+8>>2]=c[h+8>>2];c[r+12>>2]=c[h+12>>2];a:do if(!(f<<24>>24)){g=-1111;f=-1111}else{g=-1111;f=-1111;h=0;while(1){if((h|0)>=(e|0))break a;if((f|0)==-1111){f=c[d+(h<<2)>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];f=(wU(q,p)|0)==0;f=f?-1111:h}if((g|0)==-1111){g=c[d+(h<<2)>>2]|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];g=(wU(q,p)|0)==0;g=g?-1111:h}h=h+1|0}}while(0);Vm(d,e,f,g,i,m);c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;h=c[i>>2]|0;v=c[m>>2]|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];if((xU(h,v,p,k,s)|0)<0){t=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;v=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[n>>2]=t;c[n+4>>2]=v;Pw(1,89563,n)|0}else{if(0>1){g=c[15686]|0;n=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;f=b+-48|0;v=ry(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)|0;c[o>>2]=n;c[o+4>>2]=v;g1(g,89611,o)|0;g=b}else{f=b+-48|0;g=b}QK(b,c[((c[g>>2]&3|0)==2?b:f)+40>>2]|0,c[s>>2]|0,c[s+4>>2]|0,17764);D_(h);c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];jL(a,b,q,p)}l=u;return}function Vm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=0;h=0;while(1){if((i|0)>=(b|0))break;if(!((i|0)==(d|0)|(i|0)==(e|0)))h=(c[(c[a+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}o=vH(h<<5)|0;i=0;n=0;while(1){if((n|0)>=(b|0))break;a:do if(!((n|0)==(d|0)|(n|0)==(e|0))){m=a+(n<<2)|0;l=0;while(1){j=c[m>>2]|0;k=c[j+4>>2]|0;if((l|0)>=(k|0))break a;p=l+1|0;q=o+(i<<5)|0;j=(c[j>>2]|0)+(l<<4)|0;c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];j=o+(i<<5)+16|0;k=(c[c[m>>2]>>2]|0)+(((p|0)<(k|0)?p:0)<<4)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];l=p;i=i+1|0}}while(0);n=n+1|0}if((i|0)==(h|0)){c[f>>2]=o;c[g>>2]=h;return}else qa(89625,89632,77,89647)}function Wm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;k=n+12|0;f=n;uq(f,a);c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];f=Sy(a)|0;while(1){if(!f)break;g=Ex(a,f)|0;while(1){if(!g)break;KK(g);g=Gx(a,g)|0}f=Ty(a,f)|0}h=Cw(17728,c[4555]|0)|0;f=Sy(a)|0;while(1){if(!f)break;g=Ex(a,f)|0;while(1){if(!g)break;if((c[46363]|0)>1?(i=c[g+16>>2]|0,(c[i+8>>2]|0)!=0):0){o=i+168|0;b[o>>1]=(b[o>>1]|0)+1<<16>>16}else m=14;if((m|0)==14?(m=0,j=Xm(h,g)|0,(j|0)!=(g|0)):0){o=c[j+16>>2]|0;p=o+168|0;b[p>>1]=(b[p>>1]|0)+1<<16>>16;o=o+172|0;c[(c[g+16>>2]|0)+172>>2]=c[o>>2];c[o>>2]=g}g=Gx(a,g)|0}f=Ty(a,f)|0}yw(h)|0;if(!(nb[d&63](a,k,e)|0)){c[46367]=1;f=0}else f=1;l=n;return f|0}function Xm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+64|0;p=q;e=c[b>>2]&3;i=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;do if(i>>>0>=e>>>0){d=b+16|0;if(i>>>0>e>>>0){d=c[d>>2]|0;o=e;e=i;k=+h[d+16>>3];m=+h[d+24>>3];g=+h[d+56>>3];f=+h[d+64>>3];break}o=c[d>>2]|0;j=+h[o+56>>3];n=+h[o+64>>3];g=+h[o+16>>3];f=+h[o+24>>3];if(!(gj)){d=f>n;if(f>2]|0;o=i;k=+h[d+56>>3];m=+h[d+64>>3];g=+h[d+16>>3];f=+h[d+24>>3]}while(0);c[p+8>>2]=o;h[p+16>>3]=g;h[p+24>>3]=f;c[p+32>>2]=e;h[p+40>>3]=k;h[p+48>>3]=m;c[p+56>>2]=b;p=c[(nb[c[a>>2]&63](a,p,1)|0)+56>>2]|0;l=q;return p|0}function Ym(a,b){a=a|0;b=b|0;return Wm(a,21,b)|0}function Zm(d,e,f){d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0;F=l;l=l+112|0;B=F+88|0;A=F+72|0;t=F+40|0;q=F+8|0;p=F;u=F+64|0;C=F+48|0;D=F+24|0;i=(c[46363]|0)>1&1;do if((f|0)>5){s=uH((ay(d)|0)<<2)|0;o=(f|0)==8;n=o&1;m=Sy(d)|0;r=0;while(1){if(!m)break;j=Pm(m,e,n)|0;k=(c[m+16>>2]|0)+288|0;if(!j){c[k>>2]=-1111;j=r}else{c[k>>2]=r;c[s+(r<<2)>>2]=j;j=r+1|0}m=Ty(d,m)|0;r=j}if(s){j=ms(s,r)|0;if(j|0){if(o){y=0;z=s;x=s;w=1;break}y=sU(s,r)|0;z=s;x=s;w=1;break}if(o){Pw(0,89661,p)|0;j=0;y=0;z=s;x=s;w=1;break}else{G=+g[e+4>>2];h[q>>3]=+g[e>>2];h[q+8>>3]=G;Pw(0,89739,q)|0;j=0;y=0;z=s;x=s;w=1;break}}else{j=0;y=0;z=0;x=0;w=0}}else{j=0;y=0;z=0;r=0;x=0;w=0}while(0);if(0){k=c[15686]|0;if((f|0)==8&(j|0)!=0)m=89845;else m=(y|0)==0?89831:(f|0)==10?107030:89821;c[t>>2]=m;g1(k,89862,t)|0}v=(y|0)!=0;a:do if(!v){if((f|0)==8&(j|0)!=0){cN(d,0);i=1}}else{k=Sy(d)|0;while(1){if(!k)break a;j=Ex(d,k)|0;while(1){if(!j)break;t=(c[j+16>>2]|0)+144|0;Sm(u,j,y,1,0,0);q=u;s=c[q+4>>2]|0;c[t>>2]=c[q>>2];c[t+4>>2]=s;j=Gx(d,j)|0}k=Ty(d,k)|0}}while(0);p=(i|0)==0;q=d+60|0;s=(f|0)==10;i=0;o=Sy(d)|0;j=0;while(1){if(!o)break;t=o+16|0;e=Ex(d,o)|0;while(1){if(!e)break;n=c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;k=e+16|0;m=c[k>>2]|0;if(!p?(c[m+8>>2]|0)!=0:0){H=(c[t>>2]|0)+16|0;u=m+16|0;c[A>>2]=c[H>>2];c[A+4>>2]=c[H+4>>2];c[A+8>>2]=c[H+8>>2];c[A+12>>2]=c[H+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];Tm(C,A,B);n=(c[n+16>>2]|0)+16|0;u=(c[k>>2]|0)+56|0;c[A>>2]=c[n>>2];c[A+4>>2]=c[n+4>>2];c[A+8>>2]=c[n+8>>2];c[A+12>>2]=c[n+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];Tm(D,A,B);c[A>>2]=c[C>>2];c[A+4>>2]=c[C+4>>2];c[A+8>>2]=c[C+8>>2];c[A+12>>2]=c[C+12>>2];c[B>>2]=c[D>>2];c[B+4>>2]=c[D+4>>2];c[B+8>>2]=c[D+8>>2];c[B+12>>2]=c[D+12>>2];jL(d,e,A,B)}else E=35;b:do if((E|0)==35){E=0;H=b[m+168>>1]|0;k=H<<16>>16;if(H<<16>>16){if((o|0)==(n|0)){if(!i){j=uH(96)|0;c[j+84>>2]=uH(((ay(d)|0)<<5)+11520|0)|0;i=j}Mm(i,e,c[(c[(c[q>>2]|0)+16>>2]|0)+248>>2]|0);break}if(!v){zJ(d,e,f,17764);break}k=a[191874]|0?1:k;m=e;n=0;while(1){if((n|0)>=(k|0))break b;if(s)Um(d,m,z,r,1);else _m(d,m);m=c[(c[m+16>>2]|0)+172>>2]|0;n=n+1|0}}}while(0);e=Gx(d,e)|0}o=Ty(d,o)|0}if(v)uU(y);if(i|0){D_(c[i+84>>2]|0);D_(j)}if(w){i=0;while(1){if((i|0)>=(r|0))break;D_(c[z+(i<<2)>>2]|0);i=i+1|0}D_(x)}l=F;return 0}function _m(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+96|0;g=k+64|0;f=k+48|0;d=k+40|0;h=k+80|0;e=k+32|0;i=k+16|0;j=k;m=(c[b+16>>2]|0)+144|0;n=c[m>>2]|0;m=c[m+4>>2]|0;o=e;c[o>>2]=n;c[o+4>>2]=m;o=n;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];m=n+(m+-1<<4)|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];oV(g,h);if(0>1){o=c[15686]|0;m=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;e=b+-48|0;n=ry(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0;c[d>>2]=m;c[d+4>>2]=n;g1(o,89887,d)|0;d=e;e=b}else{d=b+-48|0;e=b}QK(b,c[((c[e>>2]&3|0)==2?b:d)+40>>2]|0,c[h>>2]|0,c[h+4>>2]|0,17764);c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];jL(a,b,f,g);l=k;return}function $m(a,d){a=a|0;d=d|0;var e=0;e=b[(c[a+16>>2]|0)+136>>1]&14;if(d<<24>>24)an(a)|0;if(e<<16>>16)Ym(a,e&65535)|0;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0;d=bn(a)|0;b=Sy(a)|0;while(1){if(!b)break;e=c[b+16>>2]|0;f=c[e+132>>2]|0;h[e+16>>3]=+h[f>>3]*72.0;h[e+24>>3]=+h[f+8>>3]*72.0;b=Ty(a,b)|0}return d|0}function bn(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0;a:do if((c[a+60>>2]|0)==(a|0)?(d=a+16|0,e=c[d>>2]|0,(c[(c[e+8>>2]|0)+84>>2]|0)!=0):0){if(!(+h[e+16>>3]!=0.0)?!(+h[e+24>>3]!=0.0):0)b=0;else{cn(a);b=1;e=c[d>>2]|0}j=(c[e+116>>2]&1|0)==0;if(!j){k=e+32|0;i=+h[k>>3];d=e+40|0;h[k>>3]=+h[d>>3];h[d>>3]=i}d=c[e+8>>2]|0;b:do switch(c[d+84>>2]|0){case 2:{f=+h[d+64>>3];if(f<=0.0)break a;g=f/+h[e+32>>3];f=+h[d+72>>3]/+h[e+40>>3];if(g<1.0|f<1.0)if(g>3];if(f<=0.0)break a;g=f/+h[e+32>>3];f=+h[d+72>>3]/+h[e+40>>3];if(!(g>1.0&f>1.0))break a;f=g>3];f=+h[e+40>>3]/+h[e+32>>3];if(f1){d=Sy(a)|0;while(1){if(!d)break c;b=Ex(a,d)|0;while(1){if(!b)break;if(c[(c[b+16>>2]|0)+8>>2]|0)dn(b,f,g);b=Gx(a,b)|0}d=Ty(a,d)|0}}while(0);b=Sy(a)|0;while(1){if(!b)break;k=c[(c[b+16>>2]|0)+132>>2]|0;h[k>>3]=+h[k>>3]*f;k=k+8|0;h[k>>3]=+h[k>>3]*g;b=Ty(a,b)|0}en(a,f,g);b=1}else b=0;while(0);return b|0}function cn(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;k=n+16|0;m=n;d=(c[b+16>>2]|0)+16|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];f=+h[m>>3];g=f*.013888888888888888;i=+h[m+8>>3];j=i*.013888888888888888;d=Sy(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;o=c[e+132>>2]|0;h[o>>3]=+h[o>>3]-g;o=o+8|0;h[o>>3]=+h[o>>3]-j;e=c[e+108>>2]|0;if(e|0?a[e+81>>0]|0:0){o=e+56|0;h[o>>3]=+h[o>>3]-f;o=e+64|0;h[o>>3]=+h[o>>3]-i}d=Ty(b,d)|0}e=Sy(b)|0;while(1){if(!e)break;d=Ex(b,e)|0;while(1){if(!d)break;if(c[(c[d+16>>2]|0)+8>>2]|0){c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];fn(d,k)}d=Gx(b,d)|0}e=Ty(b,e)|0}c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];gn(b,k);l=n;return}function dn(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0;p=c[b>>2]&3;i=c[(c[(c[((p|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;s=(d+-1.0)*72.0;q=s*+h[i>>3];t=(e+-1.0)*72.0;r=t*+h[i+8>>3];p=c[(c[(c[((p|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;s=s*+h[p>>3];t=t*+h[p+8>>3];p=c[b+16>>2]|0;i=c[p+8>>2]|0;j=c[i+4>>2]|0;k=j+-1|0;b=0;i=c[i>>2]|0;while(1){if((b|0)>=(j|0))break;l=c[i+4>>2]|0;m=l+-1|0;n=(b|0)==(k|0);f=0;g=c[i>>2]|0;while(1){if((f|0)>=(l|0))break;do if(f|b){o=+h[g>>3];if((f|0)==(m|0)&n){h[g>>3]=o+q;u=g+8|0;h[u>>3]=+h[u>>3]+r;break}else{h[g>>3]=o*d;u=g+8|0;h[u>>3]=+h[u>>3]*e;break}}else{h[g>>3]=+h[g>>3]+s;u=g+8|0;h[u>>3]=+h[u>>3]+t}while(0);f=f+1|0;g=g+16|0}if(c[i+8>>2]|0){u=i+16|0;h[u>>3]=+h[u>>3]+s;u=i+24|0;h[u>>3]=+h[u>>3]+t}if(c[i+12>>2]|0){u=i+32|0;h[u>>3]=+h[u>>3]+q;u=i+40|0;h[u>>3]=+h[u>>3]+r}b=b+1|0;i=i+48|0}b=c[p+96>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]*d;u=b+64|0;h[u>>3]=+h[u>>3]*e}b=c[p+100>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]+q;u=b+64|0;h[u>>3]=+h[u>>3]+r}b=c[p+104>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]+s;u=b+64|0;h[u>>3]=+h[u>>3]+t}return}function en(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0;i=b+16|0;g=c[i>>2]|0;b=g+32|0;h[b>>3]=+h[b>>3]*d;b=g+40|0;h[b>>3]=+h[b>>3]*e;b=g+16|0;h[b>>3]=+h[b>>3]*d;b=g+24|0;h[b>>3]=+h[b>>3]*e;b=c[g+12>>2]|0;if((b|0)!=0?(a[b+81>>0]|0)!=0:0){f=b+56|0;h[f>>3]=+h[f>>3]*d;f=b+64|0;h[f>>3]=+h[f>>3]*e;f=1;b=g}else{f=1;b=g}while(1){if((f|0)>(c[b+180>>2]|0))break;en(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[i>>2]|0}return}function fn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;k=c[b+16>>2]|0;b=c[k+8>>2]|0;j=c[b+4>>2]|0;l=d+8|0;b=c[b>>2]|0;g=0;while(1){if((g|0)>=(j|0))break;i=c[b+4>>2]|0;e=c[b>>2]|0;f=0;while(1){if((f|0)>=(i|0))break;h[e>>3]=+h[e>>3]-+h[d>>3];m=e+8|0;h[m>>3]=+h[m>>3]-+h[l>>3];e=e+16|0;f=f+1|0}if(c[b+8>>2]|0){m=b+16|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+24|0;h[m>>3]=+h[m>>3]-+h[l>>3]}if(c[b+12>>2]|0){m=b+32|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+40|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=b+48|0;g=g+1|0}b=c[k+96>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+108>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+100>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+104>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}return}function gn(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;j=k;g=+h[d>>3];i=b+16|0;b=c[i>>2]|0;e=b+32|0;h[e>>3]=+h[e>>3]-g;f=+h[d+8>>3];e=b+40|0;h[e>>3]=+h[e>>3]-f;e=b+16|0;h[e>>3]=+h[e>>3]-g;e=b+24|0;h[e>>3]=+h[e>>3]-f;e=c[b+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){m=e+56|0;h[m>>3]=+h[m>>3]-g;e=e+64|0;h[e>>3]=+h[e>>3]-f;e=1}else e=1;while(1){if((e|0)>(c[b+180>>2]|0))break;m=c[(c[b+184>>2]|0)+(e<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];gn(m,j);e=e+1|0;b=c[i>>2]|0}l=k;return}function hn(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0,i=0,j=0;i=l;l=l+16|0;d=i;mM(a);e=a+16|0;b=c[e>>2]|0;f=+h[b+16>>3]*.013888888888888888;g=+h[b+24>>3]*.013888888888888888;b=Sy(a)|0;while(1){if(!b)break;j=c[(c[b+16>>2]|0)+132>>2]|0;h[j>>3]=+h[j>>3]-f;j=j+8|0;h[j>>3]=+h[j>>3]-g;b=Ty(a,b)|0}j=(c[e>>2]|0)+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];jn(a,d);$m(a,1);l=i;return}function jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0;g=l;l=l+16|0;f=g;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];jn(e,f);a=a+1|0}j=+h[b>>3];f=e+32|0;h[f>>3]=+h[f>>3]-j;i=+h[b+8>>3];b=e+40|0;h[b>>3]=+h[b>>3]-i;b=e+16|0;h[b>>3]=+h[b>>3]-j;b=e+24|0;h[b>>3]=+h[b>>3]-i;l=g;return}function kn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;p=(e|0)>2;n=0;o=0;j=c[f+4>>2]|0;b=c[f>>2]|0;while(1){if((o|0)>=(d|0)){b=0;break}i=c[(c[g+(o<<2)>>2]|0)+16>>2]|0;l=a[i+119>>0]|0;a:do if(!(l<<24>>24)){k=b+8|0;h[b>>3]=+k2();i=j+8|0;h[j>>3]=+k2();if(p){b=2;while(1){if((b|0)==(e|0)){j=n;b=k;break a}q=+k2();h[(c[f+(b<<2)>>2]|0)+(o<<3)>>3]=q;b=b+1|0}}else{j=n;b=k}}else{k=c[i+132>>2]|0;m=b+8|0;h[b>>3]=+h[k>>3];i=j+8|0;h[j>>3]=+h[k+8>>3];b:do if(p){j=2;b=k+16|0;while(1){if((j|0)==(e|0))break b;h[(c[f+(j<<2)>>2]|0)+(o<<3)>>3]=+h[b>>3];j=j+1|0;b=b+8|0}}while(0);j=(l&255)>1?1:n;b=m}while(0);n=j;o=o+1|0;j=i}while(1){if((b|0)>=(e|0))break;Is(d,c[f+(b<<2)>>2]|0);b=b+1|0}return n|0}function ln(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;d=uH(((O(b+1|0,b)|0)/2|0)<<2)|0;n=wn(b,b,0.0)|0;o=wn(b,b,0.0)|0;a:do if(!(c[a+8>>2]|0)){e=0;while(1){if((e|0)>=(b|0))break a;i=c[a+(e*20|0)>>2]|0;j=a+(e*20|0)+4|0;k=n+(e<<2)|0;f=1;while(1){if((f|0)>=(i|0))break;m=c[(c[j>>2]|0)+(f<<2)>>2]|0;h[(c[n+(m<<2)>>2]|0)+(e<<3)>>3]=-1.0;h[(c[k>>2]|0)+(m<<3)>>3]=-1.0;f=f+1|0}e=e+1|0}}else{e=0;while(1){if((e|0)>=(b|0))break a;i=c[a+(e*20|0)>>2]|0;j=a+(e*20|0)+4|0;k=a+(e*20|0)+8|0;m=n+(e<<2)|0;f=1;while(1){if((f|0)>=(i|0))break;p=c[(c[j>>2]|0)+(f<<2)>>2]|0;l=-1.0/+g[(c[k>>2]|0)+(f<<2)>>2];h[(c[n+(p<<2)>>2]|0)+(e<<3)>>3]=l;h[(c[m>>2]|0)+(p<<3)>>3]=l;f=f+1|0}e=e+1|0}}while(0);b:do if(!(Bq(b,n,o)|0)){D_(d);d=0}else{f=0;j=0;m=b;while(1){if((j|0)>=(b|0))break b;k=o+(j<<2)|0;e=j;i=f;while(1){if((e|0)==(b|0))break;if((j|0)==(e|0))l=0.0;else{p=c[k>>2]|0;l=+h[(c[o+(e<<2)>>2]|0)+(e<<3)>>3]+ +h[p+(j<<3)>>3]+ +h[p+(e<<3)>>3]*-2.0}g[d+(i<<2)>>2]=l;e=e+1|0;i=i+1|0}f=f+m|0;j=j+1|0;m=m+-1|0}}while(0);xn(n);xn(o);return d|0}function mn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+16|0;q=r;if(c[a+8>>2]|0){d=nn(a,b)|0;f=0.0;e=0;p=0;while(1){if((p|0)>=(b|0))break;e=e+p|0;o=c[a+(p*20|0)>>2]|0;k=a+(p*20|0)+4|0;m=(O(p,b)|0)-e|0;n=a+(p*20|0)+8|0;j=1;while(1){if((j|0)>=(o|0))break;i=c[(c[k>>2]|0)+(j<<2)>>2]|0;if((i|0)>=(p|0)){i=d+(m+i<<2)|0;s=+g[(c[n>>2]|0)+(j<<2)>>2];f=f+ +B(+(+g[i>>2]-s));g[i>>2]=s}j=j+1|0}p=p+1|0}if(0){b=c[15686]|0;h[q>>3]=f;g1(b,89903,q)|0}}else d=0;l=r;return d|0}function nn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m;i=uH(((O(b+1|0,b)|0)/2|0)<<2)|0;j=uH(b<<2)|0;zq(h,b);d=0;f=0;k=b;while(1){if((d|0)>=(b|0))break;ir(d,a,b,j);e=d;g=f;while(1){if((e|0)==(b|0))break;c[i+(g<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0;g=g+1|0}d=d+1|0;f=f+k|0;k=k+-1|0}D_(j);Aq(h);l=m;return i|0}function on(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;i=n;j=uH(((O(b+1|0,b)|0)/2|0)<<2)|0;k=uH(b<<2)|0;zq(i,b);d=0;f=0;m=b;while(1){if((d|0)>=(b|0))break;vq(d,a,b,k,i);e=d;h=f;while(1){if((e|0)==(b|0))break;g[j+(h<<2)>>2]=+(c[k+(e<<2)>>2]|0);e=e+1|0;h=h+1|0}d=d+1|0;f=f+m|0;m=m+-1|0}D_(k);Aq(i);l=n;return j|0}function pn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=a+8|0;d=c[r>>2]|0;e=0;f=0;while(1){if((f|0)>=(b|0))break;e=(c[a+(f*20|0)>>2]|0)+e|0;f=f+1|0}f=uH(e<<2)|0;q=uH(b<<2)|0;e=0;while(1){if((e|0)>=(b|0))break;c[q+(e<<2)>>2]=0;e=e+1|0}if(!(c[r>>2]|0)){h=0;while(1){if((h|0)>=(b|0))break;c[a+(h*20|0)+8>>2]=f;_r(a,h,q);i=a+(h*20|0)|0;j=c[i>>2]|0;k=a+(h*20|0)+4|0;l=+(j+-1|0);e=1;while(1){if((e|0)>=(j|0))break;p=c[(c[k>>2]|0)+(e<<2)>>2]|0;s=+((c[a+(p*20|0)>>2]|0)+-1|0)+l;g[f+(e<<2)>>2]=s-+((Zr(a,h,p,q)|0)<<1|0);e=e+1|0}$r(a,h,q);f=f+(c[i>>2]<<2)|0;h=h+1|0}f=on(a,b)|0}else{j=0;while(1){if((j|0)>=(b|0))break;_r(a,j,q);k=a+(j*20|0)|0;m=c[k>>2]|0;n=a+(j*20|0)+4|0;o=m+-2|0;p=a+(j*20|0)+8|0;i=1;while(1){if((i|0)>=(m|0))break;e=c[(c[n>>2]|0)+(i<<2)>>2]|0;h=o+(c[a+(e*20|0)>>2]|0)|0;s=+(h-((Zr(a,j,e,q)|0)<<1)|0);l=+g[(c[p>>2]|0)+(i<<2)>>2];if(l>2]=l;i=i+1|0}$r(a,j,q);c[p>>2]=f;f=f+(c[k>>2]<<2)|0;j=j+1|0}f=nn(a,b)|0}D_(q);D_(c[r>>2]|0);c[r>>2]=0;a:do if(d|0){e=0;while(1){if((e|0)>=(b|0))break a;c[a+(e*20|0)+8>>2]=d;d=d+(c[a+(e*20|0)>>2]<<2)|0;e=e+1|0}}while(0);return f|0}function qn(a,b,e,f,i,j,k,m,n){a=a|0;b=b|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0;M=l;l=l+80|0;L=M+56|0;K=M+48|0;A=M+40|0;u=M+32|0;t=M+24|0;s=M+16|0;p=M+8|0;o=M;q=k&4;J=k&3;a:do if((n|0)<0)e=0;else{if(0)EL();k=(m|0)==2;b:do if(k){if(0)E1(91878,24,1,c[15686]|0)|0;e=pn(a,b)|0;w=14}else{switch(m|0){case 1:{e=ln(a,b)|0;if(e|0){I=e;break b}Pw(0,91903,o)|0;Pw(3,91952,p)|0;w=15;break b}case 3:break;default:{w=15;break b}}if(0)E1(92005,21,1,c[15686]|0)|0;e=mn(a,b)|0;w=14}while(0);if((w|0)==14)if(!e)w=15;else I=e;do if((w|0)==15){if(0)E1(92027,26,1,c[15686]|0)|0;if(!(c[a+8>>2]|0)){I=on(a,b)|0;break}else{I=nn(a,b)|0;break}}while(0);if(0){H=c[15686]|0;h[s>>3]=+FL();g1(H,92054,s)|0;E1(92066,25,1,H)|0;EL()}c:do if((b|0)>1&(q|0)!=0)if((rn(a,b,f,j,q,J,k&1)|0)<0){u=0;t=0;e=-1;a=0;s=0;q=0;p=0;o=0;m=0;k=0}else{k=0;while(1){if((k|0)>=(j|0)){y=0;w=35;break c}m=f+(k<<2)|0;r=1.0;e=0;while(1){if((e|0)==(b|0))break;x=+B(+(+h[(c[m>>2]|0)+(e<<3)>>3]));r=x>r?x:r;e=e+1|0}r=1.0/r;e=0;while(1){if((e|0)==(b|0)){e=0;break}H=(c[m>>2]|0)+(e<<3)|0;h[H>>3]=+h[H>>3]*r;e=e+1|0}while(1){if((e|0)==(b|0))break;x=(+k2()+-.5)*1.0e-06;H=(c[m>>2]|0)+(e<<3)|0;h[H>>3]=+h[H>>3]+x;e=e+1|0}Is(b,c[m>>2]|0);k=k+1|0}}else{y=kn(0,b,j,f,i)|0;w=35}while(0);d:do if((w|0)==35){if(0){H=c[15686]|0;h[t>>3]=+FL();g1(H,92092,t)|0}if((b|0)==1|(n|0)==0){e=0;break a}if(0){H=c[15686]|0;h[u>>3]=+FL();g1(H,92054,u)|0;E1(89925,26,1,H)|0;EL()}s=j<<2;H=uH(s)|0;t=b<<2;a=O(t,j)|0;G=uH(a)|0;e=0;while(1){if((e|0)>=(j|0))break;m=G+((O(e,b)|0)<<2)|0;c[H+(e<<2)>>2]=m;o=f+(e<<2)|0;k=0;while(1){if((k|0)>=(b|0))break;g[m+(k<<2)>>2]=+h[(c[o>>2]|0)+(k<<3)>>3];k=k+1|0}e=e+1|0}e:do if(!J){p=b+-1|0;e=0;r=0.0;o=0;while(1){if((o|0)>=(p|0))break e;q=b-o|0;m=e;k=1;while(1){e=m+1|0;if((k|0)>=(q|0))break;m=e;r=+g[I+(e<<2)>>2]+r;k=k+1|0}o=o+1|0}}else r=+(b|0)*.5*+(b+-1|0);while(0);C=(O(b+1|0,b)|0)/2|0;D=(J|0)==2;if(D)ct(C,I);dt(C,I);E=b<<3;m=uH(E)|0;H3(m|0,0,E|0)|0;F=b+-1|0;e=0;o=0;while(1){if((o|0)>=(F|0)){e=b;k=0;o=0;break}p=b-o|0;v=0.0;k=1;while(1){e=e+1|0;if((k|0)>=(p|0))break;x=+g[I+(e<<2)>>2];z=m+(k+o<<3)|0;h[z>>3]=+h[z>>3]-x;v=v+x;k=k+1|0}z=m+(o<<3)|0;h[z>>3]=+h[z>>3]-v;o=o+1|0}while(1){if((k|0)>=(b|0))break;g[I+(o<<2)>>2]=+h[m+(k<<3)>>3];z=e+o|0;e=e+-1|0;k=k+1|0;o=z}z=uH(s)|0;c[z>>2]=uH(a)|0;e=1;while(1){if((e|0)>=(j|0))break;c[z+(e<<2)>>2]=(c[z>>2]|0)+((O(e,b)|0)<<2);e=e+1|0}p=uH(t)|0;o=uH(t)|0;k=uH(C<<2)|0;if(0){w=c[15686]|0;h[A>>3]=+FL();g1(w,92054,A)|0;E1(89952,15,1,w)|0;EL()}w=(y|0)==0;y=c[15686]|0;e=0;q=0;x=1797693134862315708145274.0e284;while(1){if(!(q<<24>>24==0&(e|0)<(n|0)))break;H3(m|0,0,E|0)|0;if(D){et(C,I,k);u=0;a=0}else{u=0;a=0}while(1){if((u|0)>=(F|0)){q=b;s=0;a=0;break}t=b-u+-1|0;at(t,0.0,o);q=0;while(1){if((q|0)>=(j|0))break;A=H+(q<<2)|0;at(t,+g[(c[A>>2]|0)+(u<<2)>>2],p);Xs(t,p,-1.0,(c[A>>2]|0)+(u<<2)+4|0);ct(t,p);Ws(t,p,o,o);q=q+1|0}ft(t,o);q=0;while(1){if((q|0)>=(t|0))break;s=o+(q<<2)|0;v=+g[s>>2];if(v>=3402823466385288598117041.0e14|v<0.0)g[s>>2]=0.0;q=q+1|0}q=a+1|0;a=u+1|0;f:do if(D){v=0.0;s=0;while(1){if((s|0)>=(t|0))break f;A=k+(q<<2)|0;N=+g[A>>2]*+g[o+(s<<2)>>2];g[A>>2]=N;A=m+(a+s<<3)|0;h[A>>3]=+h[A>>3]-N;v=v+N;q=q+1|0;s=s+1|0}}else{v=0.0;s=0;while(1){if((s|0)>=(t|0))break f;N=+g[o+(s<<2)>>2];g[k+(q<<2)>>2]=N;A=m+(a+s<<3)|0;h[A>>3]=+h[A>>3]-N;v=v+N;q=q+1|0;s=s+1|0}}while(0);A=m+(u<<3)|0;h[A>>3]=+h[A>>3]-v;u=a;a=q}while(1){if((s|0)>=(b|0)){q=0;break}g[k+(a<<2)>>2]=+h[m+(s<<3)>>3];A=q+a|0;q=q+-1|0;s=s+1|0;a=A}while(1){if((q|0)>=(j|0)){v=0.0;q=0;break}Us(k,b,c[H+(q<<2)>>2]|0,c[z+(q<<2)>>2]|0);q=q+1|0}while(1){if((q|0)>=(j|0))break;v=+_s(b,c[H+(q<<2)>>2]|0,c[z+(q<<2)>>2]|0)+v;q=q+1|0}v=v*2.0+r;q=0;while(1){if((q|0)>=(j|0))break;A=H+(q<<2)|0;Us(I,b,c[A>>2]|0,p);v=v-+_s(b,c[A>>2]|0,p);q=q+1|0}P=x-v;N=+h[22909];q=(v=0.0?P:-P)/x=(j|0))break;t=H+(a<<2)|0;s=c[t>>2]|0;g:do if(w){if((Fq(I,s,c[z+(a<<2)>>2]|0,b,.001,b)|0)<0){u=z;t=I;e=-1;a=G;s=H;q=z;break d}}else{Zs(b,s,p);if((Fq(I,p,c[z+(a<<2)>>2]|0,b,.001,b)|0)<0){u=z;t=I;e=-1;a=G;s=H;q=z;break d}else s=0;while(1){if((s|0)>=(b|0))break g;if((d[(c[(c[i+(s<<2)>>2]|0)+16>>2]|0)+119>>0]|0)<=1)c[(c[t>>2]|0)+(s<<2)>>2]=c[p+(s<<2)>>2];s=s+1|0}}while(0);a=a+1|0}if(((e|0)%5|0|0)==0&0!=0?(h[K>>3]=v,g1(y,90277,K)|0,((e+5|0)%50|0|0)==0):0)n3(10,y)|0;e=e+1|0;x=v}if(!0)q=0;else{N=+sn(H,I,j,b,J);P=+FL();h[L>>3]=N;c[L+8>>2]=e;h[L+16>>3]=P;g1(y,89968,L)|0;q=0}while(1){if((q|0)>=(j|0)){u=z;t=I;a=G;s=H;q=z;break d}a=H+(q<<2)|0;t=f+(q<<2)|0;s=0;while(1){if((s|0)>=(b|0))break;h[(c[t>>2]|0)+(s<<3)>>3]=+g[(c[a>>2]|0)+(s<<2)>>2];s=s+1|0}q=q+1|0}}while(0);D_(a);D_(s);D_(t);if(u|0){D_(c[u>>2]|0);D_(q)}D_(p);D_(o);D_(m);D_(k)}while(0);l=M;return e|0}function rn(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;R=l;l=l+32|0;o=R+24|0;Q=R+8|0;H=R+4|0;N=R;M=(d|0)<50?d:50;P=vH(M<<2)|0;G=d<<3;n=vH(O(G,M)|0)|0;m=0;while(1){if((m|0)>=(M|0))break;c[P+(m<<2)>>2]=n+((O(m,d)|0)<<3);m=m+1|0}E=M<<1;E=(E|0)>50?E:50;E=(E|0)>(d|0)?d:E;c[o>>2]=0;sr(b,d,E,o,k);tr(c[o>>2]|0,d,E);mt(c[o>>2]|0,E,d,P,M);D_(c[c[o>>2]>>2]|0);D_(c[o>>2]|0);E=d<<2;L=vH(E)|0;m=0;while(1){if((m|0)>=(d|0))break;c[L+(m<<2)>>2]=-1;m=m+1|0}zq(Q,d);J=c[b+8>>2]|0;I=(k|0)!=0;if(I)es(b,d);C=vH(E)|0;K=vH(160)|0;n=vH(d*160|0)|0;D=vH(160)|0;m=0;while(1){if((m|0)==40)break;c[D+(m<<2)>>2]=n+((O(m,d)|0)<<2);m=m+1|0}m=(g2()|0)%(d|0)|0;c[L+(m<<2)>>2]=0;c[K>>2]=m;n=c[D>>2]|0;if(I){cr(m,b,d,n);n=0;o=0}else{vq(m,b,d,n,Q);n=0;o=0}while(1){if((o|0)>=(d|0)){r=1;break}F=c[(c[D>>2]|0)+(o<<2)>>2]|0;c[C+(o<<2)>>2]=F;A=(F|0)>(n|0);m=A?o:m;n=A?F:n;o=o+1|0}while(1){if((r|0)==40){m=0;break}c[L+(m<<2)>>2]=r;c[K+(r<<2)>>2]=m;t=D+(r<<2)|0;n=c[t>>2]|0;if(I){cr(m,b,d,n);q=0;n=0}else{vq(m,b,d,n,Q);q=0;n=0}while(1){if((q|0)>=(d|0))break;o=C+(q<<2)|0;F=c[o>>2]|0;k=c[(c[t>>2]|0)+(q<<2)>>2]|0;k=(F|0)<(k|0)?F:k;c[o>>2]=k;if((k|0)<=(n|0)){if((k|0)==(n|0)?((g2()|0)%(q+1|0)|0|0)==0:0){n=c[o>>2]|0;m=q}}else{n=k;m=q}q=q+1|0}r=r+1|0}while(1){if((m|0)>=(d|0))break;c[C+(m<<2)>>2]=-1;m=m+1|0}w=vH(E)|0;F=vH(d<<4)|0;x=d+-1|0;y=x<<2;A=0;o=0;k=0;n=0;z=0;while(1){if((z|0)>=(d|0))break;m=L+(z<<2)|0;a:do if((c[m>>2]|0)>-1){t=F+(z<<4)+4|0;c[t>>2]=vH(y)|0;v=vH(y)|0;c[F+(z<<4)+8>>2]=v;c[F+(z<<4)>>2]=x;a[F+(z<<4)+12>>0]=1;r=D+(c[m>>2]<<2)|0;m=0;while(1){if((m|0)==(z|0)){q=z;break}c[(c[t>>2]|0)+(m<<2)>>2]=m;c[v+(m<<2)>>2]=c[(c[r>>2]|0)+(m<<2)>>2];m=m+1|0}while(1){m=q+1|0;if((q|0)==(x|0)){m=x;break a}c[(c[t>>2]|0)+(q<<2)>>2]=m;c[v+(q<<2)>>2]=c[(c[r>>2]|0)+(m<<2)>>2];q=m}}else{if((n|0)<40){k=vH(E)|0;o=vH(E)|0;n=d;m=1}else m=0;a[F+(z<<4)+12>>0]=m;c[F+(z<<4)+4>>2]=k;c[F+(z<<4)+8>>2]=o;c[F+(z<<4)>>2]=40;m=0;while(1){if((m|0)==40)break;c[k+(m<<2)>>2]=c[K+(m<<2)>>2];c[o+(m<<2)>>2]=c[(c[D+(m<<2)>>2]|0)+(z<<2)>>2];m=m+1|0}o=o+160|0;k=k+160|0;n=n+-40|0;m=40}while(0);A=m+A|0;z=z+1|0}D_(C);D_(w);if(D|0){D_(c[D>>2]|0);D_(D)}D=vH(d*20|0)|0;q=A+d<<2;r=vH(q)|0;v=(j|0)==2;q=vH(q)|0;t=0;while(1){if((t|0)>=(d|0))break;c[D+(t*20|0)+4>>2]=r;c[D+(t*20|0)+8>>2]=q;m=(c[F+(t<<4)>>2]|0)+1|0;w=D+(t*20|0)|0;c[w>>2]=m;o=(c[F+(t<<4)+8>>2]|0)+-4|0;k=F+(t<<4)+4|0;b:do if(v){p=0.0;n=1;while(1){if((n|0)>=(m|0))break b;c[r+(n<<2)>>2]=c[(c[k>>2]|0)+(n+-1<<2)>>2];u=+(c[o+(n<<2)>>2]|0);u=-1.0/(u*u);g[q+(n<<2)>>2]=u;p=p-u;n=n+1|0;m=c[w>>2]|0}}else{p=0.0;n=1;while(1){if((n|0)>=(m|0))break b;c[r+(n<<2)>>2]=c[(c[k>>2]|0)+(n+-1<<2)>>2];u=-1.0/+(c[o+(n<<2)>>2]|0);g[q+(n<<2)>>2]=u;p=p-u;n=n+1|0;m=c[w>>2]|0}}while(0);c[r>>2]=t;g[q>>2]=p;E=c[w>>2]|0;q=q+(E<<2)|0;r=r+(E<<2)|0;t=t+1|0}C=vH(f<<2)|0;c[C>>2]=vH(O(f<<3,M)|0)|0;m=1;while(1){if((m|0)>=(f|0))break;c[C+(m<<2)>>2]=(c[C>>2]|0)+((O(m,M)|0)<<3);m=m+1|0}c:do if(i){m=0;while(1){if((m|0)>=(f|0))break;o=C+(m<<2)|0;n=0;while(1){if((n|0)>=(M|0))break;h[(c[o>>2]|0)+(n<<3)>>3]=0.0;n=n+1|0}m=m+1|0}if((f|0)!=2){m=0;while(1){if((m|0)>=(f|0)){m=0;break c}h[(c[C+(m<<2)>>2]|0)+(m<<3)>>3]=1.0;m=m+1|0}}h[c[C>>2]>>3]=1.0;m=C+4|0;if(!((nt(P,M,d,c[m>>2]|0)|0)<<24>>24)){n=c[m>>2]|0;m=0;while(1){if((m|0)>=(M|0))break;h[n+(m<<3)>>3]=0.0;m=m+1|0}h[n+8>>3]=1.0;m=0}else m=0}else{n=0;while(1){if((n|0)>=(f|0)){m=0;break c}o=C+(n<<2)|0;m=0;while(1){if((m|0)>=(M|0))break;u=+(g2()|0)*4.656612875245797e-10;h[(c[o>>2]|0)+(m<<3)>>3]=u;m=m+1|0}n=n+1|0}}while(0);while(1){if((m|0)>=(f|0))break;Ss(P,d,M,c[C+(m<<2)>>2]|0,c[e+(m<<2)>>2]|0);m=m+1|0}c[H>>2]=0;c[N>>2]=0;Hs(D,P,d,M,H);Fs(P,c[H>>2]|0,M,d,M,N);D_(c[c[H>>2]>>2]|0);D_(c[H>>2]|0);z=vH(G)|0;A=vH(M<<3)|0;m=0;n=0;p=+tn(e,F,f,d,j);d:while(1){if((n|0)<50&m<<24>>24==0)x=0;else break;while(1){if((x|0)>=(f|0))break;y=e+(x<<2)|0;o=0;while(1){if((o|0)>=(d|0))break;q=z+(o<<3)|0;h[q>>3]=0.0;r=(c[F+(o<<4)+8>>2]|0)+-4|0;t=c[D+(o*20|0)+4>>2]|0;v=c[D+(o*20|0)+8>>2]|0;w=D+(o*20|0)|0;s=0.0;k=1;while(1){if((k|0)>=(c[w>>2]|0))break;m=c[t+(k<<2)>>2]|0;u=+gs(e,f,o,m);if(u>1.0e-30){u=-(+g[v+(k<<2)>>2]*+(c[r+(k<<2)>>2]|0))/u;h[q>>3]=u*+h[(c[y>>2]|0)+(m<<3)>>3]+ +h[q>>3];s=s-u}k=k+1|0}h[q>>3]=+h[q>>3]+ +h[(c[y>>2]|0)+(o<<3)>>3]*s;o=o+1|0}Es(P,M,d,z,A);m=C+(x<<2)|0;if(Eq(c[N>>2]|0,c[m>>2]|0,A,M,.001,M,0)|0){n=-1;break d}Ss(P,d,M,c[m>>2]|0,c[y>>2]|0);x=x+1|0}if(!(n&1)){u=+tn(e,F,f,d,j);p=+B(+(u-p))/(u+1.0e-10);m=p<+h[22909]&1;p=u}else m=0;n=n+1|0}D_(A);D_(z);if(I){fs(b,d,J);m=0}else m=0;while(1){if((m|0)>=(d|0))break;if(a[F+(m<<4)+12>>0]|0){D_(c[F+(m<<4)+4>>2]|0);D_(c[F+(m<<4)+8>>2]|0)}m=m+1|0}D_(F);D_(c[D+4>>2]|0);D_(c[D+8>>2]|0);D_(D);D_(L);D_(K);D_(c[C>>2]|0);D_(C);m=c[N>>2]|0;if(m|0){D_(c[m>>2]|0);D_(c[N>>2]|0)}D_(c[P>>2]|0);D_(P);Aq(Q);l=R;return n|0}function sn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0;q=e+-1|0;o=(f|0)==2;h=0.0;f=0;m=0;while(1){if((m|0)>=(q|0))break;p=e-m|0;n=1;while(1){f=f+1|0;if((n|0)>=(p|0))break;k=n+m|0;i=0.0;j=0;while(1){if((j|0)>=(d|0))break;r=c[a+(j<<2)>>2]|0;l=+g[r+(m<<2)>>2]-+g[r+(k<<2)>>2];i=i+l*l;j=j+1|0}i=+C(+i);l=+g[b+(f<<2)>>2];if(o){i=1.0/+C(+l)-i;i=i*i}else{i=1.0/l-i;i=i*i}n=n+1|0;h=i*l+h}m=m+1|0}return +h}function tn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;a:do if((f|0)==2){g=0.0;l=0;while(1){if((l|0)>=(e|0))break a;n=c[b+(l<<4)>>2]|0;o=b+(l<<4)+4|0;m=b+(l<<4)+8|0;k=0;while(1){if((k|0)>=(n|0))break;j=c[(c[o>>2]|0)+(k<<2)>>2]|0;if((j|0)>(l|0)){i=0.0;f=0;while(1){if((f|0)>=(d|0))break;q=c[a+(f<<2)>>2]|0;p=+h[q+(l<<3)>>3]-+h[q+(j<<3)>>3];i=p*p+i;f=f+1|0}i=+C(+i);p=+(c[(c[m>>2]|0)+(k<<2)>>2]|0);i=p-i;g=i*i/(p*p)+g}k=k+1|0}l=l+1|0}}else{l=0;g=0.0;while(1){if((l|0)>=(e|0))break a;m=c[b+(l<<4)>>2]|0;n=b+(l<<4)+4|0;o=b+(l<<4)+8|0;k=0;while(1){if((k|0)>=(m|0))break;j=c[(c[n>>2]|0)+(k<<2)>>2]|0;if((j|0)>(l|0)){i=0.0;f=0;while(1){if((f|0)>=(d|0))break;q=c[a+(f<<2)>>2]|0;p=+h[q+(l<<3)>>3]-+h[q+(j<<3)>>3];i=p*p+i;f=f+1|0}i=+C(+i);p=+(c[(c[o>>2]|0)+(k<<2)>>2]|0);i=p-i;g=i*i/p+g}k=k+1|0}l=l+1|0}}while(0);return +g}function un(a){a=+a;return +(+C(+a)*a)}function vn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0;g=c[46366]|0;e=0.0;f=0;while(1){if((f|0)>=(g|0))break;i=+h[a+(f<<3)>>3]-+h[b+(f<<3)>>3];h[d+(f<<3)>>3]=i;e=i*i+e;f=f+1|0}return +(+C(+e))}function wn(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=uH(a<<2)|0;f=0;g=uH(O(a<<3,b)|0)|0;while(1){if((f|0)>=(a|0))break;c[i+(f<<2)>>2]=g;e=0;while(1){if((e|0)>=(b|0))break;h[g+(e<<3)>>3]=d;e=e+1|0}f=f+1|0;g=g+(b<<3)|0}return i|0}function xn(a){a=a|0;if(a|0){D_(c[a>>2]|0);D_(a)}return}function yn(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+16|0;n=ay(b)|0;m=by(b)|0;k=nx(b,2,90566,0)|0;a:do if(!d){h[22909]=+(n|0)*.0001;aH(b,105860,183272);g=xx(c[b+60>>2]|0,90006)|0;if(!g)e=.99;else e=+b2(g);h[22911]=e;g=uH((n<<2)+4|0)|0;j=b+16|0;c[(c[j>>2]|0)+152>>2]=g;g=0;e=0.0;i=Sy(b)|0;while(1){if(!i)break a;c[(c[(c[j>>2]|0)+152>>2]|0)+(g<<2)>>2]=i;p=c[i+16>>2]|0;c[p+120>>2]=g;c[p+124>>2]=-1;f=+Bn(b,i,k)+e;g=g+1|0;e=f;i=Ty(b,i)|0}}else{h[22909]=.0001;aH(b,105860,183272);g=0;e=0.0;i=Sy(b)|0;while(1){if(!i)break a;c[(c[i+16>>2]|0)+120>>2]=g;f=+Bn(b,i,k)+e;g=g+1|0;e=f;i=Ty(b,i)|0}}while(0);g=xx(b,90014)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){e=+h[22909];f=+b2(g);if(!(e>f))e=f}else e=e/+(((m|0)>1?m:1)|0)*+C(+(+(n|0)))+1.0;h[22910]=e;if(!(c[46363]|d)){d=wn(n,n,e)|0;p=b+16|0;c[(c[p>>2]|0)+160>>2]=d;d=wn(n,n,1.0)|0;c[(c[p>>2]|0)+164>>2]=d;d=wn(n,c[46366]|0,1.0)|0;c[(c[p>>2]|0)+168>>2]=d;d=Cn(n,n,c[46366]|0)|0;c[(c[p>>2]|0)+172>>2]=d}l=o;return n|0}function zn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=0;e=0;j=Jx(a,b)|0;a:while(1){if(!j)break;h=c[j>>2]&3;g=c[((h|0)==2?j:j+-48|0)+40>>2]|0;h=c[((h|0)==3?j:j+48|0)+40>>2]|0;do if((g|0)!=(h|0)){i=(h|0)==(b|0);if((e|0)!=1){f=i?g:h;c[d>>2]=f;e=e+1|0;break}if(!((g|0)==(f|0)&i)?!((g|0)==(b|0)&(h|0)==(f|0)):0){e=2;break a}else e=1}while(0);j=Kx(a,j,b)|0}return e|0}function An(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=a+60|0;a:while(1){b:while(1){if(!b)break a;switch(zn(a,b,f)|0){case 0:{e=5;break b}case 1:{e=8;break b}default:b=0}}if((e|0)==5){if((d|0)==(b|0))d=Ty(a,d)|0;dz(c[g>>2]|0,b)|0;b=0;continue}else if((e|0)==8){if((d|0)==(b|0))d=Ty(a,d)|0;dz(c[g>>2]|0,b)|0;b=c[f>>2]|0;continue}}l=h;return d|0}function Bn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0;k=l;l=l+32|0;i=k+8|0;g=k;b=Ex(a,b)|0;e=0.0;while(1){if(!b)break;switch(Dn(b,d,g)|0){case 0:{f=+h[g>>3];break}case 2:{c[i>>2]=ry(a)|0;h[i+8>>3]=1.0;Pw(3,90026,i)|0;j=6;break}default:j=6}if((j|0)==6){j=0;h[g>>3]=1.0;f=1.0}h[(c[b+16>>2]|0)+136>>3]=f;b=Gx(a,b)|0;e=f+e}l=k;return +e}function Cn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0;j=uH((a<<2)+4|0)|0;k=(b<<2)+4|0;l=d<<3;g=0;while(1){if((g|0)>=(a|0))break;i=j+(g<<2)|0;c[i>>2]=uH(k)|0;f=0;while(1){if((f|0)>=(b|0))break;e=uH(l)|0;c[(c[i>>2]|0)+(f<<2)>>2]=e;e=0;while(1){if((e|0)>=(d|0))break;h[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+(e<<3)>>3]=0.0;e=e+1|0}f=f+1|0}c[(c[i>>2]|0)+(f<<2)>>2]=0;g=g+1|0}c[j+(g<<2)>>2]=0;return j|0}function Dn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;do if((d|0)!=0?(f=yx(b,d)|0,(a[f>>0]|0)!=0):0){c[i>>2]=e;if(((N1(f,98183,i)|0)>=1?(g=+h[e>>3],!(g<0.0)):0)?g!=0.0|(c[46363]|0)!=0:0){b=0;break}c[j>>2]=f;Pw(0,90053,j)|0;b=2}else b=1;while(0);l=k;return b|0}function En(a){a=a|0;return yn(a,0)|0}function Fn(a){a=a|0;a=a+16|0;D_(c[(c[a>>2]|0)+152>>2]|0);if(!(c[46363]|0)){xn(c[(c[a>>2]|0)+160>>2]|0);xn(c[(c[a>>2]|0)+164>>2]|0);xn(c[(c[a>>2]|0)+168>>2]|0);Gn(c[(c[a>>2]|0)+172>>2]|0);c[(c[a>>2]|0)+172>>2]=0}return}function Gn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(a|0){f=0;while(1){g=a+(f<<2)|0;b=c[g>>2]|0;if(!b)break;else e=0;while(1){d=c[b+(e<<2)>>2]|0;if(!d)break;D_(d);e=e+1|0;b=c[g>>2]|0}D_(b);f=f+1|0}D_(a)}return}function Hn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+(b|0);b=a+16|0;while(1){if((d|0)>=(c[46366]|0))break;f=+k2()*e;h[(c[(c[b>>2]|0)+132>>2]|0)+(d<<3)>>3]=f;d=d+1|0}return}function In(a,b){a=a|0;b=b|0;Hn(a,b,2);return}function Jn(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;e=+(b|0);f=+k2()*e;d=a+16|0;h[c[(c[d>>2]|0)+132>>2]>>3]=f;e=+k2()*e;h[(c[(c[d>>2]|0)+132>>2]|0)+8>>3]=e;if((c[46366]|0)>2)In(a,b);return}function Kn(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(0)E1(90071,26,1,c[15686]|0)|0;d=pm(b,d,2)|0;a:do if((d|0)!=1){if(!(c[46027]|d)){Pw(0,90098,e)|0;c[46027]=1}e=b+16|0;d=0;while(1){b=c[(c[(c[e>>2]|0)+152>>2]|0)+(d<<2)>>2]|0;if(!b)break a;if(!(a[(c[b+16>>2]|0)+119>>0]|0))Jn(b,1);d=d+1|0}}while(0);l=f;return}function Ln(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;p=q+80|0;n=q;if(0){E1(90147,25,1,c[15686]|0)|0;EL()}o=a+16|0;f=c[o>>2]|0;k=c[f+164>>2]|0;f=c[f+160>>2]|0;m=0;while(1){if((m|0)>=(b|0))break;i=f+(m<<2)|0;j=k+(m<<2)|0;e=0;while(1){if((e|0)==(m|0))break;g=+h[(c[i>>2]|0)+(e<<3)>>3];g=1.0/(g*g);d=c[(c[o>>2]|0)+152>>2]|0;d=Rx(a,c[d+(m<<2)>>2]|0,c[d+(e<<2)>>2]|0,0,0)|0;if(d)g=+h[(c[d+16>>2]|0)+128>>3]*g;h[(c[k+(e<<2)>>2]|0)+(m<<3)>>3]=g;h[(c[j>>2]|0)+(e<<3)>>3]=g;e=e+1|0}m=m+1|0}a=c[46366]|0;e=0;while(1){if((e|0)<(b|0))d=0;else break;while(1){if((d|0)>=(a|0))break;h[(c[(c[(c[o>>2]|0)+168>>2]|0)+(e<<2)>>2]|0)+(d<<3)>>3]=0.0;d=d+1|0}e=e+1|0}i=0;while(1){d=c[(c[(c[o>>2]|0)+152>>2]|0)+(i<<2)>>2]|0;if(!d)break;a=d+16|0;d=0;while(1){if((d|0)>=(b|0))break;a:do if((i|0)!=(d|0)){g=+vn(c[(c[a>>2]|0)+132>>2]|0,c[(c[(c[(c[(c[o>>2]|0)+152>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+132>>2]|0,n);f=c[46366]|0;g=1.0/g;e=0;while(1){if((e|0)>=(f|0))break a;m=c[o>>2]|0;r=+h[n+(e<<3)>>3];r=(r-+h[(c[(c[m+160>>2]|0)+(i<<2)>>2]|0)+(d<<3)>>3]*r*g)*+h[(c[(c[m+164>>2]|0)+(i<<2)>>2]|0)+(d<<3)>>3];h[(c[(c[(c[m+172>>2]|0)+(i<<2)>>2]|0)+(d<<2)>>2]|0)+(e<<3)>>3]=r;m=(c[(c[m+168>>2]|0)+(i<<2)>>2]|0)+(e<<3)|0;h[m>>3]=+h[m>>3]+r;e=e+1|0}}while(0);d=d+1|0}i=i+1|0}if(0){o=c[15686]|0;h[p>>3]=+FL();g1(o,90173,p)|0}l=q;return}function Mn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0;i=l;l=l+32|0;g=i+24|0;f=i+8|0;e=i;j=+h[22909];h[22831]=j*j;while(1){d=Nn(a,b)|0;if(!d)break;On(a,b,d)}if(!0)b=a+16|0;else{d=c[15686]|0;h[e>>3]=+Pn(a,b);g1(d,90183,e)|0;b=a+16|0;k=c[(c[b>>2]|0)+156>>2]|0;e=(k|0)==(c[46365]|0)?90197:191979;j=+FL();c[f>>2]=k;c[f+4>>2]=e;h[f+8>>3]=j;g1(d,90199,f)|0}b=c[(c[b>>2]|0)+156>>2]|0;if((b|0)==(c[46365]|0)){k=ry(a)|0;c[g>>2]=b;c[g+4>>2]=k;Pw(0,90226,g)|0}l=i;return}function Nn(a,b){a=a|0;b=b|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+16|0;q=r;o=(c[46029]|0)+1|0;c[46029]=o;a=c[a+16>>2]|0;if((c[a+156>>2]|0)<(c[46365]|0)){m=c[46366]|0;n=a+152|0;k=a+168|0;a=0;e=0.0;j=0;while(1){if((j|0)>=(b|0))break;g=c[(c[n>>2]|0)+(j<<2)>>2]|0;if((d[(c[g+16>>2]|0)+119>>0]|0)<=1){i=0.0;f=0;while(1){if((f|0)>=(m|0))break;s=+h[(c[(c[k>>2]|0)+(j<<2)>>2]|0)+(f<<3)>>3];i=s*s+i;f=f+1|0}if(i>e){a=g;e=i}}j=j+1|0}if(!(e<+h[22831])){if(0!=0&((o|0)%100|0|0)==0?(p=c[15686]|0,h[q>>3]=+C(+e),g1(p,90277,q)|0,((c[46029]|0)%1e3|0|0)==0):0)n3(10,p)|0}else a=0}else a=0;l=r;return a|0}function On(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;k=d+16|0;m=c[(c[k>>2]|0)+120>>2]|0;f=c[46028]|0;if(!f){g=c[46366]|0;g=vH(O(g<<3,g)|0)|0}else{g=c[46366]|0;g=xH(f,O(g<<3,g)|0)|0}c[46028]=g;Qn(a,b,m,g);i=c[46366]|0;j=a+16|0;f=0;while(1){if((f|0)>=(i|0))break;h[182656+(f<<3)>>3]=-+h[(c[(c[(c[j>>2]|0)+168>>2]|0)+(m<<2)>>2]|0)+(f<<3)>>3];f=f+1|0}Xt(g,182736,182656,i);f=0;while(1){if((f|0)>=(c[46366]|0))break;e=+h[22911];e=(1.0-e)*2.0*+k2()+e;i=182736+(f<<3)|0;e=e*+h[i>>3];h[i>>3]=e;i=(c[(c[k>>2]|0)+132>>2]|0)+(f<<3)|0;h[i>>3]=+h[i>>3]+e;f=f+1|0}k=(c[j>>2]|0)+156|0;c[k>>2]=(c[k>>2]|0)+1;Rn(a,b,m);if(cM()|0){g=c[46366]|0;e=0.0;f=0;while(1){if((f|0)>=(g|0))break;e=+B(+(+h[182736+(f<<3)>>3]))+e;f=f+1|0}e=+C(+e);m=c[15686]|0;c[n>>2]=ry(d)|0;h[n+8>>3]=e;g1(m,90268,n)|0}l=o;return}function Pn(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=b+-1|0;n=a+16|0;o=c[46366]|0;g=0;d=0.0;a:while(1){if((g|0)>=(q|0))break;m=c[n>>2]|0;p=c[m+152>>2]|0;j=g+1|0;k=(c[p+(g<<2)>>2]|0)+16|0;l=m+164|0;m=m+160|0;i=j;while(1){if((i|0)>=(b|0)){g=j;continue a}f=(c[p+(i<<2)>>2]|0)+16|0;a=0;e=0.0;while(1){if((a|0)>=(o|0))break;r=+h[(c[(c[k>>2]|0)+132>>2]|0)+(a<<3)>>3]-+h[(c[(c[f>>2]|0)+132>>2]|0)+(a<<3)>>3];a=a+1|0;e=r*r+e}r=+h[(c[(c[m>>2]|0)+(g<<2)>>2]|0)+(i<<3)>>3];r=((+C(+e)*-2.0+r)*r+e)*+h[(c[(c[l>>2]|0)+(g<<2)>>2]|0)+(i<<3)>>3]+d;i=i+1|0;d=r}}return +d}function Qn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+80|0;w=x;v=c[a+16>>2]|0;k=c[v+164>>2]|0;m=c[v+160>>2]|0;v=c[v+152>>2]|0;j=c[v+(d<<2)>>2]|0;g=c[46366]|0;a=0;while(1){if((a|0)>=(g|0))break;i=O(g,a)|0;f=0;while(1){if((f|0)==(g|0))break;h[e+(i+f<<3)>>3]=0.0;f=f+1|0}a=a+1|0}u=c[46366]|0;t=j+16|0;s=k+(d<<2)|0;k=m+(d<<2)|0;j=0;while(1){if((j|0)>=(b|0))break;a:do if((j|0)!=(d|0)){f=(c[v+(j<<2)>>2]|0)+16|0;r=0.0;a=0;while(1){if((a|0)>=(u|0))break;q=+h[(c[(c[t>>2]|0)+132>>2]|0)+(a<<3)>>3]-+h[(c[(c[f>>2]|0)+132>>2]|0)+(a<<3)>>3];h[w+(a<<3)>>3]=q;r=q*q+r;a=a+1|0}n=1.0/+un(r);i=0;while(1){if((i|0)>=(u|0))break a;f=(c[s>>2]|0)+(j<<3)|0;g=(c[k>>2]|0)+(j<<3)|0;o=+h[w+(i<<3)>>3];a=0;while(1){p=+h[f>>3];q=+h[g>>3];if((a|0)==(i|0))break;m=e+((O(u,a)|0)+i<<3)|0;h[m>>3]=+h[m>>3]+p*n*q*o*+h[w+(a<<3)>>3];a=a+1|0}m=e+((O(u,i)|0)+i<<3)|0;h[m>>3]=(1.0-q*n*(r-o*o))*p+ +h[m>>3];i=i+1|0}}while(0);j=j+1|0}f=c[46366]|0;i=1;while(1){if((i|0)>=(f|0))break;g=O(f,i)|0;a=0;while(1){if((a|0)==(i|0))break;h[e+(g+a<<3)>>3]=+h[e+((O(f,a)|0)+i<<3)>>3];a=a+1|0}i=i+1|0}l=x;return}function Rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;m=l;l=l+80|0;k=m;j=a+16|0;f=c[j>>2]|0;g=c[(c[f+152>>2]|0)+(d<<2)>>2]|0;e=c[46366]|0;f=f+168|0;a=0;while(1){if((a|0)>=(e|0))break;h[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3]=0.0;a=a+1|0}f=g+16|0;a=0;while(1){if((a|0)>=(b|0))break;a:do if((a|0)!=(d|0)){i=+vn(c[(c[f>>2]|0)+132>>2]|0,c[(c[(c[(c[(c[j>>2]|0)+152>>2]|0)+(a<<2)>>2]|0)+16>>2]|0)+132>>2]|0,k);g=c[46366]|0;i=1.0/i;e=0;while(1){if((e|0)>=(g|0))break a;n=c[j>>2]|0;q=c[n+172>>2]|0;r=(c[(c[q+(d<<2)>>2]|0)+(a<<2)>>2]|0)+(e<<3)|0;o=+h[k+(e<<3)>>3];o=(o-+h[(c[(c[n+160>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3]*o*i)*+h[(c[(c[n+164>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3];h[r>>3]=o;n=c[n+168>>2]|0;s=(c[n+(d<<2)>>2]|0)+(e<<3)|0;h[s>>3]=+h[s>>3]+o;q=(c[(c[q+(a<<2)>>2]|0)+(d<<2)>>2]|0)+(e<<3)|0;o=+h[q>>3];p=-+h[r>>3];h[q>>3]=p;n=(c[n+(a<<2)>>2]|0)+(e<<3)|0;h[n>>3]=p-o+ +h[n>>3];e=e+1|0}}while(0);a=a+1|0}l=m;return}function Sn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;d=a+16|0;g=c[46030]|0;b=c[(c[d>>2]|0)+124>>2]|0;while(1){if((b|0)<=0)break;i=(b+-1|0)/2|0;j=g+(i<<2)|0;e=c[j>>2]|0;f=e+16|0;if(+h[(c[f>>2]|0)+136>>3]<=+h[(c[d>>2]|0)+136>>3])break;c[j>>2]=a;c[(c[d>>2]|0)+124>>2]=i;c[g+(b<<2)>>2]=e;c[(c[f>>2]|0)+124>>2]=b;b=i}return}function Tn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;i=a+16|0;j=c[46031]|0;k=c[46030]|0;g=c[(c[i>>2]|0)+124>>2]|0;while(1){e=g<<1|1;if((e|0)>=(j|0))break;d=e+1|0;if((d|0)<(j|0)){f=c[k+(d<<2)>>2]|0;b=c[k+(e<<2)>>2]|0;if(+h[(c[f+16>>2]|0)+136>>3]<+h[(c[b+16>>2]|0)+136>>3]){e=d;b=f}else l=6}else{b=c[k+(e<<2)>>2]|0;l=6}if((l|0)==6)l=0;d=b+16|0;if(+h[(c[i>>2]|0)+136>>3]<=+h[(c[d>>2]|0)+136>>3])break;c[k+(e<<2)>>2]=a;c[(c[i>>2]|0)+124>>2]=e;c[k+(g<<2)>>2]=b;c[(c[d>>2]|0)+124>>2]=g;g=e}return}function Un(a){a=a|0;var b=0,d=0;b=(c[a+16>>2]|0)+124|0;if((c[b>>2]|0)>=0)qa(90283,90303,643,90311);d=c[46031]|0;c[46031]=d+1;c[b>>2]=d;c[(c[46030]|0)+(d<<2)>>2]=a;if((d|0)>0)Sn(a);return}function Vn(){var a=0,b=0,d=0,e=0;b=c[46031]|0;if(!b)a=0;else{e=c[46030]|0;a=c[e>>2]|0;d=b+-1|0;c[46031]=d;d=c[e+(d<<2)>>2]|0;c[e>>2]=d;c[(c[d+16>>2]|0)+124>>2]=0;if((b|0)>2)Tn(d);c[(c[a+16>>2]|0)+124>>2]=-1}return a|0}function Wn(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;c[46030]=uH((b<<2)+4|0)|0;if(0){E1(90325,28,1,c[15686]|0)|0;EL()}b=Sy(a)|0;while(1){if(!b)break;Xn(a,b);b=Ty(a,b)|0}if(0){a=c[15686]|0;h[d>>3]=+FL();g1(a,90173,d)|0}D_(c[46030]|0);l=e;return}function Xn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0;e=c[(c[a+16>>2]|0)+152>>2]|0;f=+h[22910];d=0;while(1){g=c[e+(d<<2)>>2]|0;if(!g)break;h[(c[g+16>>2]|0)+136>>3]=f;d=d+1|0}c[46032]=b;k=c[b+16>>2]|0;h[k+136>>3]=0.0;c[k+128>>2]=0;Un(b);a:while(1){k=Vn()|0;if(!k)break;d=c[46032]|0;j=k+16|0;if((k|0)!=(d|0))Yn(a,d,k,+h[(c[j>>2]|0)+136>>3]);i=Jx(a,k)|0;while(1){if(!i)continue a;d=c[i>>2]&3;b=c[((d|0)==3?i:i+48|0)+40>>2]|0;if((b|0)==(k|0))b=c[((d|0)==2?i:i+-48|0)+40>>2]|0;d=c[j>>2]|0;f=+h[(c[i+16>>2]|0)+136>>3]+ +h[d+136>>3];e=c[b+16>>2]|0;g=e+136|0;do if(+h[g>>3]>f){h[g>>3]=f;if((c[e+124>>2]|0)>-1){Sn(b);break}else{c[e+128>>2]=(c[d+128>>2]|0)+1;Un(b);break}}while(0);i=Kx(a,i,k)|0}}return}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;b=c[(c[b+16>>2]|0)+120>>2]|0;d=c[(c[d+16>>2]|0)+120>>2]|0;a=c[(c[a+16>>2]|0)+160>>2]|0;h[(c[a+(d<<2)>>2]|0)+(b<<3)>>3]=e;h[(c[a+(b<<2)>>2]|0)+(d<<3)>>3]=e;return}function Zn(a){a=a|0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;_n(a);return}function _n(a){a=a|0;var b=0,d=0,e=0,f=0;b=ay(a)|0;e=uH(b*56|0)|0;b=uH((b<<2)+4|0)|0;f=a+16|0;c[(c[f>>2]|0)+152>>2]=b;b=Sy(a)|0;d=0;while(1){if(!b)break;$l(b);c[(c[b+16>>2]|0)+112>>2]=e+(d*56|0);c[(c[(c[f>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;b=Ty(a,b)|0;d=d+1|0}d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;$n(b);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function $n(a){a=a|0;var b=0.0;Az(a,134378,176,1)|0;eM(a)|0;b=+LL(a,c[46404]|0,1.0,0.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function ao(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;m=u+32|0;i=u+24|0;g=u+16|0;j=u;t=u+72|0;p=u+40|0;if(ay(b)|0){Zn(b);f=xx(b,93136)|0;if(f)if(a[f>>0]|0){d=az(b,f,0)|0;if(!d){c[g>>2]=f;Pw(0,90354,g)|0;Pw(3,90394,i)|0;d=0;s=1}else s=0}else{d=0;s=1}else{d=0;s=0}n=nx(b,1,93136,0)|0;o=(n|0)!=0;f=xx(b,137660)|0;if((f|0?a[f>>0]|0:0)?(k=j+8|0,c[m>>2]=j,c[m+4>>2]=k,(N1(f,102477,m)|0)==1):0)h[k>>3]=+h[j>>3];if(ay(b)|0){m=oD(b,t,0)|0;if((c[t>>2]|0)==1){g=(d|0)!=0;do if(g)e=d;else{if(o?(e=bo(b,n)|0,e|0):0)break;e=0}while(0);f=Zt(b,e)|0;if(!((e|0)!=0|o^1))rx(f,n,139381)|0;r=(Sy(b)|0)+16|0;D_(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;tq(b)|0;hn(b);d=(s|0)==0|g?d:f}else{XD(b,2,8,p)|0;c[p+12>>2]=0;k=(s|0)==0;j=0;while(1){if((j|0)>=(c[t>>2]|0))break;g=c[m+(j<<2)>>2]|0;e=(d|0)!=0;if(e?(oz(g,d)|0)!=0:0)f=d;else r=23;do if((r|0)==23){r=0;if(o?(q=bo(g,n)|0,q|0):0){f=q;break}f=0}while(0);vD(g)|0;i=Zt(g,f)|0;d=k|e?d:i;if(o?(f|0)==0|(f|0)==(d|0):0)rx(i,n,139381)|0;tq(g)|0;j=j+1|0}r=(Sy(b)|0)+16|0;D_(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;WD(c[t>>2]|0,m,b,p)|0;hn(b)}e=0;while(1){if((e|0)>=(c[t>>2]|0))break;dz(b,c[m+(e<<2)>>2]|0)|0;e=e+1|0}D_(m)}if(s|0)zx(b,93136,ry(d)|0)|0;eJ(b)}l=u;return}function bo(a,b){a=a|0;b=b|0;var c=0;c=Sy(a)|0;while(1){if(!c){c=0;break}if((QL(yx(c,b)|0)|0)<<24>>24)break;c=Ty(a,c)|0}return c|0}function co(a){a=a|0;var b=0,c=0;b=Sy(a)|0;if(b|0){while(1){if(!b)break;c=Ex(a,b)|0;while(1){if(!c)break;JM(c);c=Gx(a,c)|0}HM(b);b=Ty(a,b)|0}eo(a)}return}function eo(a){a=a|0;D_(c[(c[a+16>>2]|0)+152>>2]|0);if((fz(a)|0)!=(a|0))Gz(a,0,134401);return}function fo(a){a=a|0;go(a);if(!((ay(a)|0)==0?!(c[(c[a+16>>2]|0)+180>>2]|0):0)){nu(a);eJ(a)}return}function go(a){a=a|0;c[46377]=nx(a,1,105204,105210)|0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;ho(a,0);io(a);return}function ho(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(b|0)==0;if(h){lo(g);b=g}d=wA(a)|0;while(1){if(!d)break;if(!(z$(ry(d)|0,104980,7)|0)){Az(d,134401,280,1)|0;mo(b,d);ho(d,0)}else ho(d,b);d=xA(d)|0}if(h?(e=c[g+8>>2]|0,f=a+16|0,c[(c[f>>2]|0)+180>>2]=e,e|0):0){h=xH(c[g>>2]|0,(e<<2)+4|0)|0;c[(c[f>>2]|0)+184>>2]=h}l=i;return}function io(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=uH((ay(a)|0)<<2)|0;b=uH(((ay(a)|0)<<2)+4|0)|0;g=a+16|0;c[(c[g>>2]|0)+152>>2]=b;b=Sy(a)|0;d=0;while(1){if(!b)break;Az(b,134365,304,1)|0;c[(c[b+16>>2]|0)+112>>2]=f+(d<<2);c[(c[(c[g>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;jo(b);e=Ex(a,b)|0;while(1){if(!e)break;ko(e);e=Gx(a,e)|0}b=Ty(a,b)|0;d=d+1|0}return}function jo(a){a=a|0;zx(a,105204,105210)|0;return}function ko(a){a=a|0;Az(a,134378,304,1)|0;return}function lo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function no(a){a=a|0;var b=0,d=0;b=Sy(a)|0;if(b|0){D_(c[(c[b+16>>2]|0)+112>>2]|0);while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;JM(d);d=Gx(a,d)|0}HM(b);b=Ty(a,b)|0}oo(a)}return}function oo(a){a=a|0;D_(c[(c[a+16>>2]|0)+152>>2]|0);if((fz(a)|0)!=(a|0))Gz(a,0,134401);return}function po(a){a=a|0;var d=0,e=0,f=0;qo(a);ro(a,0);so(a,0);to(a,0);d=c[a+16>>2]|0;if(!(c[(c[d+8>>2]|0)+84>>2]|0)){d=b[d+136>>1]&14;if(d<<16>>16)Ym(a,d&65535)|0}else{d=Sy(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;e=c[f+132>>2]|0;h[e>>3]=+h[f+16>>3]*.013888888888888888;h[e+8>>3]=+h[f+24>>3]*.013888888888888888;d=Ty(a,d)|0}$m(a,1)}eJ(a);return}function qo(a){a=a|0;var d=0,e=0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;d=Sy(a)|0;while(1){if(!d)break;$l(d);d=Ty(a,d)|0}e=Sy(a)|0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;Az(d,134378,176,1)|0;eM(d)|0;d=Gx(a,d)|0}e=Ty(a,e)|0}return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(b|0)==0;if(h){yo(g);b=g}d=wA(a)|0;while(1){if(!d)break;if(!(z$(ry(d)|0,104980,7)|0)){Az(d,134401,280,1)|0;fH(d);zo(b,d);ro(d,0)}else ro(d,b);d=xA(d)|0}if(h?(e=c[g+8>>2]|0,f=a+16|0,c[(c[f>>2]|0)+180>>2]=e,e|0):0){h=xH(c[g>>2]|0,(e<<2)+4|0)|0;c[(c[f>>2]|0)+184>>2]=h}l=i;return}function so(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+448|0;G=Q+400|0;F=Q+384|0;P=Q+344|0;O=Q+304|0;N=Q+248|0;D=Q+192|0;x=Q+152|0;y=Q+96|0;o=Q+72|0;d=Q+64|0;I=Q+32|0;J=Q;B=Q+416|0;u=Q+328|0;w=Q+288|0;K=Q+232|0;L=Q+176|0;M=Q+136|0;H=Q+80|0;n=c[a+60>>2]|0;if(0>1){uo(b);E=c[15686]|0;c[d>>2]=ry(a)|0;g1(E,90637,d)|0}E=a+16|0;f=b+1|0;d=1;e=0;while(1){g=c[E>>2]|0;if((d|0)>(c[g+180>>2]|0))break;C=c[(c[g+184>>2]|0)+(d<<2)>>2]|0;so(C,f);d=d+1|0;e=(ay(C)|0)+e|0}p=(ay(a)|0)-e|0;d=c[E>>2]|0;C=(c[d+180>>2]|0)+p|0;v=(C|0)==0;if(v?(c[d+12>>2]|0)==0:0){P=d+16|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;h[d+40>>3]=18.0;h[d+32>>3]=18.0}else{d=B+16|0;do if((XD(a,4,4,B)|0)>>>0>=3)if((c[d>>2]|0)==4?(c[B+28>>2]&2|0)!=0:0){e=nx(n,0,96164,0)|0;d=nx(n,1,96164,0)|0;if((e|0)!=0|(d|0)!=0){c[B+24>>2]=uH(C<<2)|0;break}else{c[o>>2]=ry(a)|0;Pw(0,90483,o)|0;d=0;e=0;break}}else{d=0;e=0}else{c[d>>2]=3;d=0;e=0}while(0);z=uH(C<<5)|0;A=uH(C<<2)|0;s=B+24|0;n=(e|0)!=0;r=0;g=1;while(1){f=c[E>>2]|0;if((g|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(g<<2)>>2]|0;t=z+(r<<5)|0;q=(c[f+16>>2]|0)+16|0;c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[t+16>>2]=c[q+16>>2];c[t+20>>2]=c[q+20>>2];c[t+24>>2]=c[q+24>>2];c[t+28>>2]=c[q+28>>2];if(n&(c[s>>2]|0)!=0){t=KL(f,e,0,0)|0;c[(c[s>>2]|0)+(r<<2)>>2]=t}c[A+(r<<2)>>2]=f;r=r+1|0;g=g+1|0}a:do if((p|0)>0){o=I+16|0;p=I+24|0;q=(d|0)!=0;n=Sy(a)|0;e=r;while(1){if(!n)break a;f=c[n+16>>2]|0;g=f+112|0;if(!(c[g>>2]|0)){c[g>>2]=a;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;h[o>>3]=+h[f+96>>3]+ +h[f+88>>3];h[p>>3]=+h[f+80>>3];t=z+(e<<5)|0;c[t>>2]=c[I>>2];c[t+4>>2]=c[I+4>>2];c[t+8>>2]=c[I+8>>2];c[t+12>>2]=c[I+12>>2];c[t+16>>2]=c[I+16>>2];c[t+20>>2]=c[I+20>>2];c[t+24>>2]=c[I+24>>2];c[t+28>>2]=c[I+28>>2];if(q&(c[s>>2]|0)!=0){t=KL(n,d,0,0)|0;c[(c[s>>2]|0)+(e<<2)>>2]=t}c[A+(e<<2)>>2]=n;e=e+1|0}n=Ty(a,n)|0}}while(0);t=QD(C,z,B)|0;d=c[s>>2]|0;if(d|0)D_(d);vo(J,2147483647.0,2147483647.0);s=J+16|0;vo(u,-2147483647.0,-2147483647.0);c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];g=I+16|0;n=I+8|0;o=I+24|0;p=J+8|0;q=J+24|0;r=c[15686]|0;d=0;while(1){if((d|0)>=(C|0))break;j=+(c[t+(d<<3)>>2]|0);m=+(c[t+(d<<3)+4>>2]|0);e=z+(d<<5)|0;c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2];c[I+16>>2]=c[e+16>>2];c[I+20>>2]=c[e+20>>2];c[I+24>>2]=c[e+24>>2];c[I+28>>2]=c[e+28>>2];i=+h[I>>3]+j;h[I>>3]=i;j=+h[g>>3]+j;h[g>>3]=j;k=+h[n>>3]+m;h[n>>3]=k;m=+h[o>>3]+m;h[o>>3]=m;h[J>>3]=+h[(+h[J>>3]>3];h[p>>3]=+h[(+h[p>>3]>3];h[s>>3]=+h[(+h[s>>3]>j?J:I)+16>>3];h[q>>3]=+h[(+h[q>>3]>m?J:I)+24>>3];e=c[A+(d<<2)>>2]|0;f=e+16|0;if((d|0)<(c[(c[E>>2]|0)+180>>2]|0)){u=(c[f>>2]|0)+16|0;c[u>>2]=c[I>>2];c[u+4>>2]=c[I+4>>2];c[u+8>>2]=c[I+8>>2];c[u+12>>2]=c[I+12>>2];c[u+16>>2]=c[I+16>>2];c[u+20>>2]=c[I+20>>2];c[u+24>>2]=c[I+24>>2];c[u+28>>2]=c[I+28>>2];if(0>1){uo(b);c[y>>2]=ry(e)|0;h[y+8>>3]=i;h[y+16>>3]=k;h[y+24>>3]=j;h[y+32>>3]=m;g1(r,90462,y)|0}}else{u=(c[f>>2]|0)+16|0;c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];c[F+8>>2]=c[I+8>>2];c[F+12>>2]=c[I+12>>2];c[G>>2]=c[g>>2];c[G+4>>2]=c[g+4>>2];c[G+8>>2]=c[g+8>>2];c[G+12>>2]=c[g+12>>2];wo(w,F,G);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];if(0>1){uo(b);u=ry(e)|0;f=c[f>>2]|0;k=+h[f+16>>3];m=+h[f+24>>3];c[x>>2]=u;h[x+8>>3]=k;h[x+16>>3]=m;g1(r,90450,x)|0}}d=d+1|0}e=c[E>>2]|0;d=c[e+12>>2]|0;if(d|0){i=+h[d+24>>3];if(v){j=+h[d+32>>3];c[J>>2]=0;c[J+4>>2]=0;c[J+8>>2]=0;c[J+12>>2]=0;h[s>>3]=i;h[q>>3]=j;j=0.0;k=i}else{j=+h[J>>3];k=+h[s>>3]}m=i-(k-j);i=m*.5;if(m>0.0){h[J>>3]=j-i;h[s>>3]=k+i}}if((b|0)>0)i=+((c[B+8>>2]|0)>>>0)*.5;else i=0.0;j=+h[J>>3]-i;h[J>>3]=j;k=+h[s>>3]+i;h[s>>3]=k;m=-i-+h[e+56>>3]+ +h[p>>3];h[p>>3]=m;i=+h[e+88>>3]+i+ +h[q>>3];h[q>>3]=i;if(0>1){uo(b);c[D>>2]=ry(a)|0;h[D+8>>3]=j;h[D+16>>3]=m;h[D+24>>3]=k;h[D+32>>3]=i;g1(r,90462,D)|0}d=0;while(1){if((d|0)>=(C|0))break;e=c[A+(d<<2)>>2]|0;f=e+16|0;if((d|0)<(c[(c[E>>2]|0)+180>>2]|0)){D=(c[f>>2]|0)+16|0;c[I>>2]=c[D>>2];c[I+4>>2]=c[D+4>>2];c[I+8>>2]=c[D+8>>2];c[I+12>>2]=c[D+12>>2];c[I+16>>2]=c[D+16>>2];c[I+20>>2]=c[D+20>>2];c[I+24>>2]=c[D+24>>2];c[I+28>>2]=c[D+28>>2];c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];c[F+8>>2]=c[D+8>>2];c[F+12>>2]=c[D+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(I,F,G);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(K,F,G);c[g>>2]=c[K>>2];c[g+4>>2]=c[K+4>>2];c[g+8>>2]=c[K+8>>2];c[g+12>>2]=c[K+12>>2];D=(c[f>>2]|0)+16|0;c[D>>2]=c[I>>2];c[D+4>>2]=c[I+4>>2];c[D+8>>2]=c[I+8>>2];c[D+12>>2]=c[I+12>>2];c[D+16>>2]=c[I+16>>2];c[D+20>>2]=c[I+20>>2];c[D+24>>2]=c[I+24>>2];c[D+28>>2]=c[I+28>>2];if(0>1){uo(b);D=ry(e)|0;i=+h[I>>3];j=+h[n>>3];k=+h[g>>3];m=+h[o>>3];c[N>>2]=D;h[N+8>>3]=i;h[N+16>>3]=j;h[N+24>>3]=k;h[N+32>>3]=m;g1(r,90462,N)|0}}else{D=(c[f>>2]|0)+16|0;c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];c[F+8>>2]=c[D+8>>2];c[F+12>>2]=c[D+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(L,F,G);c[D>>2]=c[L>>2];c[D+4>>2]=c[L+4>>2];c[D+8>>2]=c[L+8>>2];c[D+12>>2]=c[L+12>>2];if(0>1){uo(b);D=ry(e)|0;B=c[f>>2]|0;k=+h[B+16>>3];m=+h[B+24>>3];c[O>>2]=D;h[O+8>>3]=k;h[O+16>>3]=m;g1(r,90450,O)|0}}d=d+1|0}c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];c[F+8>>2]=c[s+8>>2];c[F+12>>2]=c[s+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(M,F,G);c[s>>2]=c[M>>2];c[s+4>>2]=c[M+4>>2];c[s+8>>2]=c[M+8>>2];c[s+12>>2]=c[M+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(H,F,G);c[J>>2]=c[H>>2];c[J+4>>2]=c[H+4>>2];c[J+8>>2]=c[H+8>>2];c[J+12>>2]=c[H+12>>2];O=(c[E>>2]|0)+16|0;c[O>>2]=c[J>>2];c[O+4>>2]=c[J+4>>2];c[O+8>>2]=c[J+8>>2];c[O+12>>2]=c[J+12>>2];c[O+16>>2]=c[J+16>>2];c[O+20>>2]=c[J+20>>2];c[O+24>>2]=c[J+24>>2];c[O+28>>2]=c[J+28>>2];if(0>1){uo(b);O=ry(a)|0;i=+h[J>>3];j=+h[p>>3];k=+h[s>>3];m=+h[q>>3];c[P>>2]=O;h[P+8>>3]=i;h[P+16>>3]=j;h[P+24>>3]=k;h[P+32>>3]=m;g1(r,90462,P)|0}D_(z);D_(A);D_(t)}l=Q;return}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+80|0;s=t+32|0;i=t+8|0;d=t;r=a+16|0;o=c[r>>2]|0;p=+h[o+16>>3];q=+h[o+24>>3];if(0>1){uo(b);o=c[15686]|0;c[d>>2]=ry(a)|0;g1(o,90435,d)|0}o=(b|0)!=0;a:do if(o){d=Sy(a)|0;e=c[15686]|0;while(1){if(!d)break a;f=d+16|0;g=c[f>>2]|0;if((c[g+112>>2]|0)==(a|0)?(u=g+16|0,h[u>>3]=+h[u>>3]+p,g=g+24|0,h[g>>3]=+h[g>>3]+q,0>1):0){uo(b);u=ry(d)|0;g=c[f>>2]|0;m=+h[g+16>>3];n=+h[g+24>>3];c[i>>2]=u;h[i+8>>3]=m;h[i+16>>3]=n;g1(e,90450,i)|0}d=Ty(a,d)|0}}else e=c[15686]|0;while(0);i=b+1|0;a=1;while(1){d=c[r>>2]|0;if((a|0)>(c[d+180>>2]|0))break;g=c[(c[d+184>>2]|0)+(a<<2)>>2]|0;if(o){f=g+16|0;d=c[f>>2]|0;j=+h[d+16>>3]+p;k=+h[d+24>>3]+q;m=+h[d+32>>3]+p;n=+h[d+40>>3]+q;if(0>1){uo(b);c[s>>2]=ry(g)|0;h[s+8>>3]=j;h[s+16>>3]=k;h[s+24>>3]=m;h[s+32>>3]=n;g1(e,90462,s)|0;d=c[f>>2]|0}h[d+16>>3]=j;h[d+24>>3]=k;h[d+32>>3]=m;h[d+40>>3]=n}to(g,i);a=a+1|0}l=t;return}function uo(a){a=a|0;var b=0;b=c[15686]|0;while(1){if((a|0)<=0)break;D1(90480,b)|0;a=a+-1|0}return}function vo(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function wo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function xo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function yo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function zo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function Ao(a){a=a|0;var b=0;b=Sy(a)|0;while(1){if(!b)break;HM(b);b=Ty(a,b)|0}Bo(a);return}function Bo(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;a=1;while(1){e=c[b>>2]|0;d=c[e+184>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[d+(a<<2)>>2]|0;nH(c[(c[e+16>>2]|0)+12>>2]|0);Bo(e);a=a+1|0}D_(d);return}function Co(a){a=a|0;var b=0,d=0,e=0;Fz(a,1,134365,304,1);sM(a)|0;b=uH(((ay(a)|0)<<2)+4|0)|0;e=a+16|0;c[(c[e>>2]|0)+152>>2]=b;b=0;d=Sy(a)|0;while(1){if(!d)break;Do(d);c[(c[(c[e>>2]|0)+152>>2]|0)+(b<<2)>>2]=d;c[(c[d+16>>2]|0)+120>>2]=b;b=b+1|0;d=Ty(a,d)|0}e=nx(a,2,90566,0)|0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;Eo(b,e);b=Gx(a,b)|0}d=Ty(a,d)|0}Fo(a);return}function Do(a){a=a|0;var b=0;dM(a);b=uH((e[(c[(ez(a)|0)+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[a+16>>2]|0)+132>>2]=b;bN(a,c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&1);return}function Eo(a,b){a=a|0;b=b|0;var d=0,e=0.0;Az(a,134378,176,1)|0;e=+LL(a,c[46404]|0,1.0,0.0);d=a+16|0;h[(c[d>>2]|0)+128>>3]=e;e=+LL(a,b,+h[1371],0.0);h[(c[d>>2]|0)+136>>3]=e;eM(a)|0;return}function Fo(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;q=r+16|0;p=r;m=r+24|0;n=nx(b,1,99597,0)|0;a:do if(n|0){o=nx(b,1,90570,0)|0;i=b+16|0;j=(o|0)==0;k=c[15686]|0;g=0;while(1){e=c[(c[(c[i>>2]|0)+152>>2]|0)+(g<<2)>>2]|0;if(!e)break a;b=yx(e,n)|0;do if(a[b>>0]|0){f=e+16|0;d=c[(c[f>>2]|0)+132>>2]|0;a[m>>0]=0;c[p>>2]=d;c[p+4>>2]=d+8;c[p+8>>2]=m;if((N1(b,98723,p)|0)<=1){c[q>>2]=ry(e)|0;c[q+4>>2]=b;g1(k,90574,q)|0;break}b:do if(+h[22908]>0.0){b=0;while(1){if((b|0)==2)break b;s=d+(b<<3)|0;h[s>>3]=+h[s>>3]/+h[22908];b=b+1|0}}while(0);b=c[f>>2]|0;a[b+119>>0]=1;if((a[m>>0]|0)!=33){if(j)break;if(!((QL(yx(e,o)|0)|0)<<24>>24))break;b=c[f>>2]|0}a[b+119>>0]=3}while(0);g=g+1|0}}while(0);l=r;return}function Go(a){a=a|0;var b=0,c=0;c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;JM(b);b=Gx(a,b)|0}HM(c);c=Ty(a,c)|0}Ho(a);return}function Ho(a){a=a|0;Io(a);a=a+16|0;D_(c[(c[a>>2]|0)+152>>2]|0);D_(c[(c[a>>2]|0)+140>>2]|0);return}function Io(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+16|0;f=1;while(1){e=c[g>>2]|0;b=c[e+184>>2]|0;if((f|0)>(c[e+180>>2]|0))break;e=c[b+(f<<2)>>2]|0;b=e+16|0;nH(c[(c[b>>2]|0)+12>>2]|0);d=c[(c[b>>2]|0)+140>>2]|0;if(d|0){D_(c[d>>2]|0);D_(c[(c[b>>2]|0)+140>>2]|0)}Io(e);f=f+1|0}D_(b);if((fz(a)|0)!=(a|0))Cz(a,134401)|0;return}function Jo(a,b){a=a|0;b=b|0;c[b+4>>2]=nx(a,0,90626,0)|0;c[b+8>>2]=nx(a,0,138034,0)|0;c[b+12>>2]=nx(a,0,137966,0)|0;c[b>>2]=a;c[b+16>>2]=0;c[b+36>>2]=XD(a,2,4,b+20|0)|0;return}function Ko(a){a=a|0;var d=0,e=0;$M(a,2);d=uH(56)|0;e=a+16|0;c[(c[e>>2]|0)+140>>2]=d;d=(KL(a,nx(a,0,90633,0)|0,2,2)|0)&65535;d=(d&65535)<10?d:10;b[(c[e>>2]|0)+176>>1]=d;c[46366]=d&65535;Lo(a,0,a);hp(a);Co(a);return}function Lo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=(d|0)==0;if(k){Mo(j);d=j}g=e+16|0;f=wA(a)|0;while(1){if(!f)break;if(!(z$(ry(f)|0,104980,7)|0)){Az(f,134401,280,1)|0;n=uH(56)|0;p=c[f+16>>2]|0;c[p+140>>2]=n;o=c[g>>2]|0;b[p+176>>1]=b[o+176>>1]|0;c[n+44>>2]=(c[(c[o+140>>2]|0)+44>>2]|0)+1;c[n+48>>2]=e;No(d,f);Lo(f,0,f)}else Lo(f,d,e);f=xA(f)|0}if(k?(h=c[j+8>>2]|0,i=a+16|0,c[(c[i>>2]|0)+180>>2]=h,h|0):0){p=xH(c[j>>2]|0,(h<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=p}l=m;return}function Mo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function No(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function Oo(a){a=a|0;var b=0,c=0;b=l;l=l+64|0;c=b;Jo(a,c);Po(a,c);Qo(a);Ro(a,a);So(a);l=b;return}function Po(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0;s=l;l=l+64|0;r=s+48|0;e=s+40|0;o=s+56|0;n=s+52|0;m=s;if(0){q=c[15686]|0;c[e>>2]=ry(b)|0;g1(q,90637,e)|0}e=Sy(b)|0;while(1){if(!e)break;c[(c[e+16>>2]|0)+164>>2]=0;e=Ty(b,e)|0}p=To(b,d)|0;q=Iu(p,o,n)|0;e=q;while(1){k=e+4|0;f=c[e>>2]|0;if(!f)break;ip(f,m);e=Sy(f)|0;while(1){if(!e)break;g=Ty(f,e)|0;i=e+16|0;j=c[i>>2]|0;if(c[j+212>>2]|0){v=Uo(e,f)|0;Po(v,d);v=c[(c[v+16>>2]|0)+140>>2]|0;u=+h[v+24>>3];j=c[i>>2]|0;h[j+32>>3]=u;t=+h[v+32>>3];h[j+40>>3]=t;u=u*36.0;h[j+88>>3]=u;h[j+96>>3]=u;h[j+80>>3]=t*72.0;e=g;continue}if(c[(c[j+112>>2]|0)+8>>2]|0){e=g;continue}dz(f,e)|0;e=g}if((ay(f)|0)<=1){e=k;continue}if((c[d>>2]|0)==(b|0))Qp(f)|0;vp(f,m);e=k}e=c[o>>2]|0;if((e|0)<=1)if((e|0)==1){mM(c[q>>2]|0);e=0}else e=0;else{if(!(c[n>>2]|0))f=0;else{f=uH(e)|0;a[f>>0]=1;e=c[o>>2]|0}c[d+40>>2]=f;e=BD(e,q,0,d+20|0)|0;D_(f)}Vo(p,c[o>>2]|0,q,e,b,d);D_(e);f=Sy(p)|0;while(1){if(!f)break;g=c[f+16>>2]|0;e=c[g+212>>2]|0;if(!e){e=c[(c[g+112>>2]|0)+8>>2]|0;if(e|0){o=c[g+132>>2]|0;v=c[(c[e+16>>2]|0)+132>>2]|0;h[v>>3]=+h[o>>3];h[v+8>>3]=+h[o+8>>3]}}else{o=c[g+132>>2]|0;x=+h[g+32>>3];w=+h[o>>3]-x*.5;v=c[(c[e+16>>2]|0)+140>>2]|0;h[v+8>>3]=w;t=+h[g+40>>3];u=+h[o+8>>3]-t*.5;h[v+16>>3]=u;h[v+24>>3]=x+w;h[v+32>>3]=t+u}f=Ty(p,f)|0}v=(c[(c[b+16>>2]|0)+140>>2]|0)+8|0;o=(c[(c[p+16>>2]|0)+140>>2]|0)+8|0;c[v>>2]=c[o>>2];c[v+4>>2]=c[o+4>>2];c[v+8>>2]=c[o+8>>2];c[v+12>>2]=c[o+12>>2];c[v+16>>2]=c[o+16>>2];c[v+20>>2]=c[o+20>>2];c[v+24>>2]=c[o+24>>2];c[v+28>>2]=c[o+28>>2];Wo(p,q);D_(q);if(0){v=c[15686]|0;c[r>>2]=ry(b)|0;g1(v,90648,r)|0}l=s;return}function Qo(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0;d=Sy(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;if(a[e+118>>0]|0){k=c[(c[(c[e+212>>2]|0)+16>>2]|0)+140>>2]|0;j=+h[k+24>>3]-+h[k+8>>3];i=+h[k+32>>3]-+h[k+16>>3];g=j*36.0;f=i*36.0;k=c[e+132>>2]|0;h[k>>3]=j*.5;h[k+8>>3]=i*.5;h[e+32>>3]=j;h[e+40>>3]=i;h[e+96>>3]=g;h[e+88>>3]=g;h[e+80>>3]=i*72.0;e=c[(c[e+12>>2]|0)+44>>2]|0;h[e>>3]=g;h[e+8>>3]=f;i=-g;h[e+16>>3]=i;h[e+24>>3]=f;h[e+32>>3]=i;f=-f;h[e+40>>3]=f;h[e+48>>3]=g;h[e+56>>3]=f}d=Ty(b,d)|0}return}function Ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0;i=a+16|0;j=c[(c[i>>2]|0)+140>>2]|0;f=+h[j+8>>3];g=+h[j+16>>3];j=(a|0)!=(b|0);a:do if(j){d=Sy(a)|0;while(1){if(!d){a=1;break a}e=c[d+16>>2]|0;if((c[e+212>>2]|0)==(a|0)){e=c[e+132>>2]|0;h[e>>3]=+h[e>>3]+f;e=e+8|0;h[e>>3]=+h[e>>3]+g}d=Ty(a,d)|0}}else a=1;while(0);while(1){d=c[i>>2]|0;if((a|0)>(c[d+180>>2]|0))break;d=c[(c[d+184>>2]|0)+(a<<2)>>2]|0;if(j){e=c[(c[d+16>>2]|0)+140>>2]|0;p=e+8|0;n=e+16|0;l=e+24|0;e=e+32|0;o=+h[n>>3]+g;m=+h[l>>3]+f;k=+h[e>>3]+g;h[p>>3]=+h[p>>3]+f;h[n>>3]=o;h[l>>3]=m;h[e>>3]=k}Ro(d,b);a=a+1|0}return}function So(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0;b=a+16|0;a=c[b>>2]|0;d=c[a+140>>2]|0;g=+h[d+16>>3]*72.0;f=+h[d+24>>3]*72.0;e=+h[d+32>>3]*72.0;h[a+16>>3]=+h[d+8>>3]*72.0;h[a+24>>3]=g;h[a+32>>3]=f;h[a+40>>3]=e;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;So(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function To(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+160|0;s=y+24|0;t=y+8|0;g=y;f=y+56|0;w=e+16|0;x=c[w>>2]|0;c[w>>2]=x+1;c[s>>2]=x;Y0(f,90710,s)|0;if(0>1){x=c[15686]|0;w=ry(d)|0;c[g>>2]=f;c[g+4>>2]=w;g1(x,90717,g)|0};a[s>>0]=a[18484]|0;a[s+1>>0]=a[18485]|0;a[s+2>>0]=a[18486]|0;a[s+3>>0]=a[18487]|0;x=Xx(91072,s,0)|0;Az(x,134401,280,1)|0;v=uH(56)|0;w=x+16|0;o=c[w>>2]|0;c[o+140>>2]=v;v=d+16|0;b[o+176>>1]=b[(c[v>>2]|0)+176>>1]|0;ap(d,x,91095);ap(d,x,91700);ap(d,x,90983);o=e+4|0;p=s+16|0;q=s+8|0;r=s+24|0;j=0;n=1;while(1){f=c[v>>2]|0;if((n|0)>(c[f+180>>2]|0))break;c[s>>2]=c[332];c[s+4>>2]=c[333];c[s+8>>2]=c[334];c[s+12>>2]=c[335];c[s+16>>2]=c[336];c[s+20>>2]=c[337];c[s+24>>2]=c[338];c[s+28>>2]=c[339];g=c[(c[f+184>>2]|0)+(n<<2)>>2]|0;fH(g);i=bp(x,ry(g)|0)|0;k=i+16|0;f=c[k>>2]|0;c[f+212>>2]=g;m=j+1|0;c[f+120>>2]=j;if(c[o>>2]|0)cp(g,i,e,s);f=Sy(g)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+164>>2]=i;f=Ty(g,f)|0}f=c[k>>2]|0;if(a[f+119>>0]|0){k=c[f+132>>2]|0;h[k>>3]=(+h[p>>3]+ +h[s>>3])*.5;h[k+8>>3]=(+h[r>>3]+ +h[q>>3])*.5}j=m;n=n+1|0}k=Sy(d)|0;while(1){if(!k)break;f=k+16|0;g=c[f>>2]|0;if(!(c[g+164>>2]|0)){i=g+212|0;s=c[i>>2]|0;if(s|0?(s|0)!=(c[(c[(c[v>>2]|0)+140>>2]|0)+48>>2]|0):0){u=18;break}c[i>>2]=d;if(!(a[g+118>>0]|0)){i=bp(x,ry(k)|0)|0;g=c[f>>2]|0;c[g+164>>2]=i;i=c[i+16>>2]|0;c[i+120>>2]=j;h[i+32>>3]=+h[g+32>>3];h[i+40>>3]=+h[g+40>>3];h[i+88>>3]=+h[g+88>>3];h[i+96>>3]=+h[g+96>>3];h[i+80>>3]=+h[g+80>>3];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];f=a[g+119>>0]|0;if(f<<24>>24){e=c[g+132>>2]|0;s=c[i+132>>2]|0;h[s>>3]=+h[e>>3];h[s+8>>3]=+h[e+8>>3];a[i+119>>0]=f}c[(c[i+112>>2]|0)+8>>2]=k;f=j+1|0}else f=j}else f=j;k=Ty(d,k)|0;j=f}if((u|0)==18){e=ry(k)|0;s=ry(d)|0;u=ry(c[(c[f>>2]|0)+212>>2]|0)|0;c[t>>2]=e;c[t+4>>2]=s;c[t+8>>2]=u;Pw(1,90740,t)|0;bb(184132,1)}m=Sy(d)|0;while(1){if(!m)break;n=c[(c[m+16>>2]|0)+164>>2]|0;o=n+16|0;i=Ex(d,m)|0;while(1){if(!i)break;f=c[(c[(c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+164>>2]|0;if((f|0)!=(n|0)){if(f>>>0>n>>>0)k=Rx(x,n,f,0,1)|0;else k=Rx(x,f,n,0,1)|0;Az(k,134378,176,1)|0;g=c[i+16>>2]|0;u=c[k+16>>2]|0;h[u+136>>3]=+h[g+136>>3];h[u+128>>3]=+h[g+128>>3];f=c[(c[f+16>>2]|0)+112>>2]|0;g=f+4|0;c[g>>2]=(c[g>>2]|0)+1;g=c[(c[o>>2]|0)+112>>2]|0;t=g+4|0;c[t>>2]=(c[t>>2]|0)+1;if(!(c[u+172>>2]|0)){c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}dp(k,i)}i=Gx(d,i)|0}m=Ty(d,m)|0}f=c[(c[v>>2]|0)+140>>2]|0;g=c[f>>2]|0;if(g|0){i=uH((c[f+4>>2]<<4)+16|0)|0;c[c[(c[w>>2]|0)+140>>2]>>2]=i;f=0;while(1){if(!(c[g>>2]|0))break;m=c[(c[(c[g+4>>2]|0)+16>>2]|0)+164>>2]|0;if(m){ep(d,g);n=bp(x,190692)|0;o=n+16|0;c[(c[o>>2]|0)+120>>2]=j;if(n>>>0>m>>>0)k=Rx(x,m,n,0,1)|0;else k=Rx(x,n,m,0,1)|0;Az(k,134378,176,1)|0;u=c[g>>2]|0;t=c[u+16>>2]|0;v=c[k+16>>2]|0;h[v+136>>3]=+h[t+136>>3];h[v+128>>3]=+h[t+128>>3];dp(k,u);u=c[(c[o>>2]|0)+112>>2]|0;v=u+4|0;c[v>>2]=(c[v>>2]|0)+1;v=c[(c[m+16>>2]|0)+112>>2]|0;t=v+4|0;c[t>>2]=(c[t>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=(c[v>>2]|0)+1;c[i+4>>2]=n;h[i+8>>3]=+h[g+8>>3];c[i>>2]=k;f=f+1|0;i=i+16|0;j=j+1|0}g=g+16|0}c[(c[(c[w>>2]|0)+140>>2]|0)+4>>2]=f}l=y;return x|0}function Uo(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;l=c[a+16>>2]|0;k=c[l+212>>2]|0;l=c[(c[l+112>>2]|0)+4>>2]|0;do if(l|0){j=uH((l<<4)+16|0)|0;f=Zo(a,b)|0;g=f+8|0;b=0;e=f;while(1){if(!(c[e>>2]|0))break;i=e+24|0;if(!(c[i>>2]|0))d=+h[g>>3]+6.283185307179586;else d=+h[e+32>>3];b=_o(a,e,j,b,d)|0;e=i}if((b|0)==(l|0)){a=c[(c[k+16>>2]|0)+140>>2]|0;c[a>>2]=j;c[a+4>>2]=l;D_(f);break}else qa(90656,90666,766,90675)}while(0);return k|0}function Vo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0;B=l;l=l+32|0;x=B+16|0;A=B;m=c[g+8>>2]|0;j=c[g+12>>2]|0;y=(c[g>>2]|0)==(f|0);z=(b|0)!=0;a:do if(z){p=c[(c[d>>2]|0)+16>>2]|0;k=+h[p+16>>3];m=~~(k+(k>=0.0?.5:-.5));c[A>>2]=m;k=+h[p+24>>3];g=~~(k+(k>=0.0?.5:-.5));u=A+4|0;c[u>>2]=g;k=+h[p+32>>3];n=~~(k+(k>=0.0?.5:-.5));v=A+8|0;c[v>>2]=n;k=+h[p+40>>3];p=~~(k+(k>=0.0?.5:-.5));w=A+12|0;c[w>>2]=p;if((b|0)>1){q=c[e>>2]|0;t=c[e+4>>2]|0;m=q+m|0;c[A>>2]=m;b=t+g|0;c[u>>2]=b;n=q+n|0;c[v>>2]=n;q=x+4|0;r=x+8|0;s=x+12|0;o=e;g=d;t=t+p|0;p=b;while(1){g=g+4|0;j=o+8|0;c[w>>2]=t;b=c[g>>2]|0;if(!b){j=0;r=p;s=t;break a}E=c[b+16>>2]|0;G=+h[E+16>>3];i=+h[E+24>>3];k=+h[E+32>>3];H=+h[E+40>>3];E=~~(H+(H>=0.0?.5:-.5));c[s>>2]=E;b=c[j>>2]|0;F=c[o+12>>2]|0;D=b+~~(G+(G>=0.0?.5:-.5))|0;c[x>>2]=D;C=F+~~(i+(i>=0.0?.5:-.5))|0;c[q>>2]=C;b=b+~~(k+(k>=0.0?.5:-.5))|0;c[r>>2]=b;E=F+E|0;c[s>>2]=E;D=c[((m|0)<(D|0)?A:x)>>2]|0;c[A>>2]=D;C=c[((p|0)<(C|0)?A:x)+4>>2]|0;c[u>>2]=C;b=c[((n|0)>(b|0)?A:x)+8>>2]|0;c[v>>2]=b;o=j;t=c[((t|0)>(E|0)?A:x)+12>>2]|0;m=D;p=C;n=b}}else{j=0;r=g;s=p}}else{c[A>>2]=0;c[A+4>>2]=0;n=KL(f,m,54,3)|0;c[A+8>>2]=n;s=KL(f,j,36,3)|0;c[A+12>>2]=s;j=1;m=0;r=0}while(0);b=f+16|0;o=c[b>>2]|0;g=c[o+12>>2]|0;if(g){H=+h[g+24>>3];g=m-n+~~(H+(H>=0.0?.5:-.5))|0;if((g|0)>0){g=g>>>1;m=m-g|0;c[A>>2]=m;n=n+g|0;c[A+8>>2]=n;g=0}else g=0}else g=j;if(y|(g|0)!=0){j=0;g=o}else{j=KL(a,c[46374]|0,8,0)|0;g=c[b>>2]|0}q=j-m|0;p=~~(+h[g+56>>3]+ +(j-r|0));c[A>>2]=0;c[A+4>>2]=0;o=q+j+n|0;c[A+8>>2]=o;b=~~(+h[g+88>>3]+ +(j+p|0)+ +(s|0));c[A+12>>2]=b;b:do if(z){g=e;c:while(1){n=d+4|0;j=c[d>>2]|0;if(!j)break b;if(!g){m=0;d=q;g=p}else{m=g+8|0;d=(c[g>>2]|0)+q|0;g=(c[g+4>>2]|0)+p|0}k=+(d|0)*.013888888888888888;i=+(g|0)*.013888888888888888;d=Sy(j)|0;while(1){if(!d){d=n;g=m;continue c}F=c[(c[d+16>>2]|0)+132>>2]|0;h[F>>3]=+h[F>>3]+k;F=F+8|0;h[F>>3]=+h[F>>3]+i;d=Ty(j,d)|0}}}while(0);F=c[(c[a+16>>2]|0)+140>>2]|0;E=F+8|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;h[F+24>>3]=+(o|0)*.013888888888888888;h[F+32>>3]=+(b|0)*.013888888888888888;l=B;return}function Wo(a,b){a=a|0;b=b|0;var d=0,e=0;while(1){d=c[b>>2]|0;if(!d)break;Xo(d);Cz(d,134401)|0;b=b+4|0}b=c[c[(c[a+16>>2]|0)+140>>2]>>2]|0;if(b|0)D_(b);Xo(a);Cz(a,134401)|0;d=Sy(a)|0;while(1){if(!d)break;e=Ty(a,d)|0;b=Ex(a,d)|0;while(1){if(!b)break;D_(c[(c[b+16>>2]|0)+172>>2]|0);Cz(b,134378)|0;b=Gx(a,b)|0}Yo(d);d=e}$x(a)|0;return}function Xo(a){a=a|0;D_(c[(c[a+16>>2]|0)+140>>2]|0);return}function Yo(a){a=a|0;var b=0;b=a+16|0;D_(c[(c[b>>2]|0)+112>>2]|0);D_(c[(c[b>>2]|0)+132>>2]|0);Cz(a,134365)|0;return}function Zo(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0;k=a+16|0;l=c[c[(c[k>>2]|0)+112>>2]>>2]|0;m=uH((l*24|0)+24|0)|0;i=0;j=Jx(b,a)|0;while(1){if(!j)break;f=c[j>>2]&3;e=c[((f|0)==2?j:j+-48|0)+40>>2]|0;if((e|0)==(a|0))e=c[((f|0)==3?j:j+48|0)+40>>2]|0;e=c[(c[e+16>>2]|0)+132>>2]|0;f=c[(c[k>>2]|0)+132>>2]|0;g=+h[e>>3]-+h[f>>3];d=+h[e+8>>3]-+h[f+8>>3];c[m+(i*24|0)>>2]=j;h[m+(i*24|0)+8>>3]=+K(+d,+g);h[m+(i*24|0)+16>>3]=d*d+g*g;i=i+1|0;j=Kx(b,j,a)|0}if((i|0)!=(l|0))qa(90689,90666,642,90698);_0(m,l,24,67);a:do if((l|0)>1){j=l+-1|0;e=0;b:while(1){if((e|0)>=(j|0))break a;g=+h[m+(e*24|0)+8>>3];f=e+1|0;i=f;while(1){if((i|0)>=(l|0))break;if(!(+h[m+(i*24|0)+8>>3]==g))break;i=i+1|0}if((i|0)==(f|0)){e=f;continue}if((i|0)==(l|0))d=3.141592653589793;else d=+h[m+(i*24|0)+8>>3];d=(d-g)/+(i-e|0);d=d>.03490658503988659?.03490658503988659:d;g=0.0;while(1){if((e|0)>=(i|0))continue b;k=m+(e*24|0)+8|0;h[k>>3]=+h[k>>3]+g;g=g+d;e=e+1|0}}}while(0);return m|0}function _o(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0,q=0;k=c[d>>2]|0;n=c[k+16>>2]|0;m=b[n+168>>1]|0;o=m<<16>>16;j=c[k>>2]&3;i=c[((j|0)==2?k:k+-48|0)+40>>2]|0;if((i|0)==(a|0))i=c[((j|0)==3?k:k+48|0)+40>>2]|0;p=+h[d+8>>3];g=(g-p)/+(m<<16>>16);g=g>.03490658503988659?.03490658503988659:g;m=i>>>0>a>>>0;l=m?g:-g;d=m?1:-1;k=0;i=c[n+172>>2]|0;j=m?f:f+-1+o|0;g=m?p:g*+(o+-1|0)+p;while(1){if((k|0)>=(o|0))break;n=c[i>>2]|0;c[e+(j<<4)>>2]=n;m=c[n>>2]&3;q=(m|0)==3?n:n+48|0;c[e+(j<<4)+4>>2]=c[((c[(c[(c[q+40>>2]|0)+16>>2]|0)+164>>2]|0)==(a|0)?q:(m|0)==2?n:n+-48|0)+40>>2];h[e+(j<<4)+8>>3]=g;k=k+1|0;i=i+4|0;j=j+d|0;g=g+l}return o+f|0}function $o(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d))if(!(c>3];c=+h[b+16>>3];if(d>c)a=1;else a=(d>31}else a=-1;else a=1;return a|0}function ap(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=nx(a,0,c,0)|0;do if(d|0){a=yx(a,d)|0;d=nx(b,0,c,0)|0;if(!d){nx(b,0,c,a)|0;break}else{rx(b,d,a)|0;break}}while(0);return}function bp(a,b){a=a|0;b=b|0;var d=0,f=0;b=az(a,b,1)|0;Az(b,134365,304,1)|0;f=uH(32)|0;d=b+16|0;c[(c[d>>2]|0)+112>>2]=f;a=vH((e[(c[a+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[d>>2]|0)+132>>2]=a;return b|0}function cp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;n=q+56|0;m=q+32|0;p=q;o=q+64|0;i=c[e+4>>2]|0;k=yx(b,i)|0;do if(a[k>>0]|0){if((c[e>>2]|0)!=(b|0)){e=yx(yA(b)|0,i)|0;if((e|0)==(k|0))break;if(!(b$(k,e)|0))break}a[o>>0]=0;e=p+8|0;i=p+16|0;j=p+24|0;c[m>>2]=p;c[m+4>>2]=e;c[m+8>>2]=i;c[m+12>>2]=j;c[m+16>>2]=o;if((N1(k,90851,m)|0)<=3){c[n>>2]=ry(b)|0;c[n+4>>2]=k;Pw(0,90869,n)|0;break}g=+h[22908];if(g>0.0){h[p>>3]=+h[p>>3]/g;h[e>>3]=+h[e>>3]/g;h[i>>3]=+h[i>>3]/g;h[j>>3]=+h[j>>3]/g}e=a[o>>0]|0;if(e<<24>>24==33)a[(c[d+16>>2]|0)+119>>0]=3;else a[(c[d+16>>2]|0)+119>>0]=e<<24>>24==63?2:1;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];c[f+24>>2]=c[p+24>>2];c[f+28>>2]=c[p+28>>2]}while(0);l=q;return}function dp(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;f=c[g>>2]|0;a=b[f+168>>1]|0;f=c[f+172>>2]|0;if(!f){a=a<<16>>16;e=a;a=vH((a<<2)+4|0)|0}else{a=a<<16>>16;e=a;a=xH(f,(a<<2)+4|0)|0}c[a+(e<<2)>>2]=d;d=c[g>>2]|0;c[d+172>>2]=a;d=d+168|0;b[d>>1]=(b[d>>1]|0)+1<<16>>16;return}function ep(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+48|0;h=i+24|0;g=i;e=c[b>>2]|0;d=c[e>>2]&3;f=c[((d|0)==2?e:e+-48|0)+40>>2]|0;d=c[((d|0)==3?e:e+48|0)+40>>2]|0;b=W_(ry(a)|0)|0;j=W_(ry(f)|0)|0;j=(b+8+j+(W_(ry(d)|0)|0)|0)>999;b=ry(a)|0;if(j){d=ry(d)|0;j=ry(f)|0;h=(c[e>>2]|0)>>>4;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=j;j=g+16|0;c[j>>2]=h;c[j+4>>2]=0;Y0(190692,90809,g)|0}else{d=c[(c[d+16>>2]|0)+120>>2]|0;j=c[(c[f+16>>2]|0)+120>>2]|0;g=(c[e>>2]|0)>>>4;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=j;j=h+16|0;c[j>>2]=g;c[j+4>>2]=0;Y0(190692,90828,h)|0}l=i;return}function fp(a){a=a|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;j=4;i=C_(40)|0;c[i>>2]=0;g=+h[22908];o=0;f=+Z(1,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){h[22908]=f;o=0;ia(100,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){i=D3(184132,1,i|0,j|0)|0;j=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,i|0,j|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1)d=0;else d=z}else d=z}else d=z;while(1){if(d|0)break;o=0;ia(101,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}o=0;$(22,a|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}if(b[(c[a+16>>2]|0)+136>>1]&14){o=0;ia(102,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}}o=0;ja(22,a|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else{k=12;break}}if((k|0)==12)h[22908]=g;D_(i|0);return}function gp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;e=a+16|0;f=b[(c[e>>2]|0)+136>>1]&14;d=f&65535;if((f&65535)>8){if(f<<16>>16==12){if(Wm(a,22,10)|0){c[46363]=2;h=5}}else h=5;do if((h|0)==5)if(!(b[(c[e>>2]|0)+136>>1]&1)){Ym(a,d)|0;break}else{Pw(0,90912,g)|0;d=2;break}while(0);c[46363]=0}if((c[46367]|0)<1)Ym(a,d)|0;l=i;return}function hp(a){a=a|0;var b=0.0,d=0.0,e=0;e=l;l=l+16|0;c[45704]=1;c[45705]=1;c[45707]=-1;c[45709]=50;h[22860]=0.0;h[22855]=0.0;h[22856]=1.0;c[45708]=KL(a,nx(a,0,90975,0)|0,600,0)|0;d=+LL(a,nx(a,0,90983,0)|0,.3,0.0);h[22857]=d;h[1371]=d;if(-1.0==-1.0)b=+LL(a,nx(a,0,90985,0)|0,-1.0,0.0);else b=-1.0;h[22858]=b;c[45706]=1;a=om(a,2,182824)|0;c[45718]=a;if(!a){Pw(0,90988,e)|0;c[45706]=2}c[45734]=(O(c[45708]|0,c[45709]|0)|0)/100|0;d=+h[22857];h[22862]=d*d;if(c[45704]|0){b=+h[22860];if(b<=0.0){b=d*3.0;h[22860]=b}h[22861]=b*b}l=e;return}function ip(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=l;l=l+16|0;d=j;g=c[c[(c[a+16>>2]|0)+140>>2]>>2]|0;i=jp(a,b)|0;kp(d,a,g);e=+h[d>>3];f=+h[d+8>>3];a:do if(!(c[45704]|0)){b=0;while(1){if((b|0)>=(c[45735]|0))break a;np(a,+lp(b),g);b=b+1|0}}else{d=Ku(ay(a)|0)|0;Pu(d,ay(a)|0);b=0;while(1){if((b|0)>=(c[45735]|0))break;mp(a,+lp(b),g,d);b=b+1|0}Ru(d)}while(0);b:do if(e!=0.0|f!=0.0){b=Sy(a)|0;while(1){if(!b)break b;g=c[(c[b+16>>2]|0)+132>>2]|0;h[g>>3]=+h[g>>3]+e;g=g+8|0;h[g>>3]=+h[g>>3]+f;b=Ty(a,b)|0}}while(0);if(i|0)op();l=j;return}function jp(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0;if(+h[22858]==-1.0){i=ay(a)|0;d=+h[22857];h[22858]=+h[22856]*.2*d*+C(+(+(i|0)));i=1}else{i=0;d=+h[22857]}g=c[45734]|0;h[b+8>>3]=+lp(g);h[b+16>>3]=d;h[b+24>>3]=+h[22855];e=c[45708]|0;a=e-g|0;c[b>>2]=a;f=c[45707]|0;do if((f|0)>-1){if((f|0)<=(g|0)){c[45735]=f;a=0;j=10;break}if((f|0)<=(e|0)){c[45735]=g;a=f-g|0;j=10}}else{c[45735]=g;j=10}while(0);if((j|0)==10)c[b+32>>2]=a;return i|0}function kp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0,y=0,z=0;v=ay(d)|0;x=c[(c[(c[d+16>>2]|0)+140>>2]|0)+4>>2]|0;u=Sy(d)|0;q=0;r=0;g=0;k=0;n=0;while(1){if(!u)break;f=c[u+16>>2]|0;if(!(a[f+119>>0]|0))f=r;else{f=c[f+132>>2]|0;i=+h[f>>3];if(!q){k=~~i;g=~~+h[f+8>>3];n=g;f=k}else{p=+(r|0);s=+h[f+8>>3];t=+(g|0);w=+(k|0);o=+(n|0);n=~~(s>o?s:o);f=~~(iw?i:w)}q=q+1|0}u=Ty(d,u)|0;r=f}i=+h[22857]*(+C(+(+(v-x|0)))+1.0);s=i*.6;h[22864]=s;h[22863]=s;if((q|0)!=1)if((q|0)>1){t=+(k+r|0)*.5;w=+(n+g|0)*.5;o=+(k-r|0);p=o*1.2;l=+(n-g|0);m=l*1.2;i=i*2.4*s;j=m*p/i;do if(!(j>=1.0)){if(j>0.0){i=+C(+j)*2.0;j=p/i;h[22863]=j;i=m/i;z=20;break}if(p>0.0){j=o*.6;h[22863]=j;i=i/p*.5;z=20;break}if(m>0.0){j=i/m*.5;h[22863]=j;i=l*.6;z=20}else{i=s;j=s}}else{j=o*.6;h[22863]=j;i=l*.6;z=20}while(0);if((z|0)==20)h[22864]=i;s=+K(+i,+j);j=j/+E(+s);h[22863]=j;i=i/+F(+s);h[22864]=i}else{t=0.0;w=0.0;j=s;i=s}else{t=+(r|0);w=+(g|0);j=s;i=s}h[22865]=j*j;h[22866]=i*i;if((c[45718]|0)==2)f=c[45706]|0;else{f=H1()|0;f=(db(0)|0)^f}i2(f);a:do if(!e){e=Sy(d)|0;if(!q)while(1){if(!e)break a;s=+h[22863];s=(+k2()*2.0+-1.0)*s;z=e+16|0;h[c[(c[z>>2]|0)+132>>2]>>3]=s;s=+h[22864];s=(+k2()*2.0+-1.0)*s;h[(c[(c[z>>2]|0)+132>>2]|0)+8>>3]=s;e=Ty(d,e)|0}while(1){if(!e)break a;f=e+16|0;g=c[f>>2]|0;if(!(a[g+119>>0]|0)){s=+h[22863];s=(+k2()*2.0+-1.0)*s;h[c[(c[f>>2]|0)+132>>2]>>3]=s;s=+h[22864];s=(+k2()*2.0+-1.0)*s;h[(c[(c[f>>2]|0)+132>>2]|0)+8>>3]=s}else{z=c[g+132>>2]|0;h[z>>3]=+h[z>>3]-t;z=z+8|0;h[z>>3]=+h[z>>3]-w}e=Ty(d,e)|0}}else{while(1){if(!(c[e>>2]|0))break;u=e+8|0;s=+E(+(+h[u>>3]))*+h[22863]+t;x=c[(c[e+4>>2]|0)+16>>2]|0;v=c[x+132>>2]|0;h[v>>3]=s;h[v+8>>3]=+F(+(+h[u>>3]))*+h[22864]+w;a[x+119>>0]=1;e=e+16|0}l=t*.1;m=w*.1;r=Sy(d)|0;while(1){if(!r)break a;q=r+16|0;e=c[q>>2]|0;if(!((c[(c[e+112>>2]|0)+8>>2]|0)==0?!(c[e+212>>2]|0):0))z=32;do if((z|0)==32){z=0;if(a[e+119>>0]|0){x=c[e+132>>2]|0;h[x>>3]=+h[x>>3]-t;x=x+8|0;h[x>>3]=+h[x>>3]-w;break}n=Jx(d,r)|0;e=0;j=0.0;i=0.0;while(1){if(!n)break;k=c[n>>2]&3;f=(k|0)==2?n:n+-48|0;g=c[f+40>>2]|0;k=(k|0)==3?n:n+48|0;do if((g|0)!=(c[k+40>>2]|0)?(y=c[(c[((g|0)==(r|0)?k:f)+40>>2]|0)+16>>2]|0,(a[y+119>>0]|0)!=0):0)if(!e){x=c[y+132>>2]|0;e=1;j=+h[x>>3];i=+h[x+8>>3];break}else{p=+(e|0);x=c[y+132>>2]|0;e=e+1|0;s=+(e|0);j=(+h[x>>3]+j*p)/s;i=(+h[x+8>>3]+i*p)/s;break}while(0);n=Kx(d,n,r)|0}do if((e|0)<=1)if((e|0)==1){f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=j*.98+l;i=i*.9+m;break}else{i=+k2()*6.283185307179586;s=+k2()*.9;p=s*+h[22863]*+E(+i);f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=p;i=+h[22864]*s*+F(+i);break}else{f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=j}while(0);h[e+8>>3]=i;a[f+119>>0]=1}while(0);r=Ty(d,r)|0}}while(0);h[b>>3]=t;h[b+8>>3]=w;return}function lp(a){a=a|0;var b=0;b=c[45708]|0;return +(+h[22858]*+(b-a|0)/+(b|0))}function mp(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;if(!(b<=0.0)){Qu(e);f=Sy(a)|0;while(1){if(!f)break;i=c[f+16>>2]|0;g=(c[i+112>>2]|0)+16|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;i=c[i+132>>2]|0;j=+h[22860];g=~~+A(+(+h[i>>3]/j));Tu(e,g,~~+A(+(+h[i+8>>3]/j)),f);f=Ty(a,f)|0}g=Sy(a)|0;while(1){if(!g)break;f=Ex(a,g)|0;while(1){if(!f)break;i=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((g|0)!=(i|0))qp(g,i,f);f=Gx(a,f)|0}g=Ty(a,g)|0}Vu(e,23);rp(a,b,d)}return}function np(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0;if(!(b<=0.0)){e=Sy(a)|0;while(1){if(!e)break;g=(c[(c[e+16>>2]|0)+112>>2]|0)+16|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;e=Ty(a,e)|0}g=Sy(a)|0;while(1){if(!g)break;else e=g;while(1){e=Ty(a,e)|0;if(!e)break;pp(g,e)}e=Ex(a,g)|0;while(1){if(!e)break;f=c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;if((g|0)!=(f|0))qp(g,f,e);e=Gx(a,e)|0}g=Ty(a,g)|0}rp(a,b,d)}return}function op(){h[22858]=-1.0;return}function pp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0;g=c[(c[b+16>>2]|0)+132>>2]|0;f=c[(c[a+16>>2]|0)+132>>2]|0;d=+h[g>>3]-+h[f>>3];e=+h[g+8>>3]-+h[f+8>>3];sp(a,b,d,e,e*e+d*d);return}function qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0;j=b+16|0;k=c[(c[j>>2]|0)+132>>2]|0;a=a+16|0;b=c[(c[a>>2]|0)+132>>2]|0;e=+h[k>>3]-+h[b>>3];f=+h[k+8>>3]-+h[b+8>>3];g=e;i=f;e=e*e;f=f*f;while(1){e=e+f;if(!(e==0.0))break;e=+(5-((g2()|0)%10|0)|0);f=+(5-((g2()|0)%10|0)|0);g=e;i=f;e=e*e;f=f*f}f=+C(+e);b=c[d+16>>2]|0;e=+h[b+128>>3];if(!(c[45705]|0))e=e*f/+h[b+136>>3];else e=(f-+h[b+136>>3])*e/f;g=e*g;k=c[(c[j>>2]|0)+112>>2]|0;j=k+16|0;h[j>>3]=+h[j>>3]-g;i=e*i;k=k+24|0;h[k>>3]=+h[k>>3]-i;k=c[(c[a>>2]|0)+112>>2]|0;j=k+16|0;h[j>>3]=+h[j>>3]+g;k=k+24|0;h[k>>3]=+h[k>>3]+i;return}function rp(b,d,e){b=b|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;o=d*d;n=(e|0)==0;m=Sy(b)|0;while(1){if(!m)break;l=c[m+16>>2]|0;if(!(a[l+119>>0]&2)){k=c[l+112>>2]|0;f=+h[k+16>>3];i=+h[k+24>>3];g=i*i+f*f;if(g>2]|0;j=+h[e>>3]+f;f=+h[e+8>>3]+i}else{g=d/+C(+g);e=c[l+132>>2]|0;j=+h[e>>3]+g*f;f=+h[e+8>>3]+g*i}do if(!n){g=+C(+(f*f/+h[22866]+j*j/+h[22865]));if((c[k+8>>2]|0)==0?(c[l+212>>2]|0)==0:0){h[e>>3]=j/g;f=f/g;break}if(!(g>=1.0)){h[e>>3]=j;break}else{h[e>>3]=j*.95/g;f=f*.95/g;break}}else h[e>>3]=j;while(0);h[e+8>>3]=f}m=Ty(b,m)|0}return}function sp(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0;g=d;d=f;while(1){if(!(d==0.0))break;d=+(5-((g2()|0)%10|0)|0);e=+(5-((g2()|0)%10|0)|0);g=d;d=e*e+d*d}if(!(c[45705]|0))d=+h[22862]/d;else{f=+C(+d);d=+h[22862]/(f*d)}j=c[a+16>>2]|0;a=c[j+112>>2]|0;if(((c[a+8>>2]|0)==0?(c[j+212>>2]|0)==0:0)?(i=c[b+16>>2]|0,(c[(c[i+112>>2]|0)+8>>2]|0)==0):0)d=(c[i+212>>2]|0)==0?d*10.0:d;f=d*g;j=c[(c[b+16>>2]|0)+112>>2]|0;b=j+16|0;h[b>>3]=+h[b>>3]+f;g=d*e;j=j+24|0;h[j>>3]=+h[j>>3]+g;j=a+16|0;h[j>>3]=+h[j>>3]-f;j=a+24|0;h[j>>3]=+h[j>>3]-g;return}function tp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[b+8>>2]|0;g=c[b>>2]|0;e=c[b+4>>2]|0;b=f;while(1){if(!b)break;a=f;while(1){if(!a)break;if((b|0)!=(a|0))pp(c[b>>2]|0,c[a>>2]|0);a=c[a+4>>2]|0}b=c[b+4>>2]|0}h=g+-1|0;a=e+-1|0;up(d,h,a,f);up(d,h,e,f);b=e+1|0;up(d,h,b,f);up(d,g,a,f);up(d,g,b,f);g=g+1|0;up(d,g,a,f);up(d,g,e,f);up(d,g,b,f);return 0}function up(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0;a=Wu(a,b,d)|0;if((e|0)!=0&(a|0)!=0){k=a+8|0;do{d=c[e>>2]|0;j=d+16|0;a=k;while(1){a=c[a>>2]|0;if(!a)break;b=c[a>>2]|0;m=c[(c[b+16>>2]|0)+132>>2]|0;l=c[(c[j>>2]|0)+132>>2]|0;f=+h[m>>3]-+h[l>>3];g=+h[m+8>>3]-+h[l+8>>3];i=g*g+f*f;if(i<+h[22861])sp(d,b,f,g,i);a=a+4|0}e=c[e+4>>2]|0}while((e|0)!=0)}return}function vp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=xx(b,91095)|0;if(0)E1(91032,8,1,c[15686]|0)|0;if(!((e|0)!=0?(a[e>>0]|0)!=0:0))e=91041;f=A$(e,58)|0;do if(!f)f=0;else{if((f|0)!=(e|0)?((a[e>>0]|0)+-48|0)>>>0>=10:0){f=0;break}i=a2(e)|0;e=f+1|0;f=(i|0)>0?i:0}while(0);if(0){i=c[15686]|0;c[g>>2]=f;c[g+4>>2]=e;g1(i,91049,g)|0}if(!((f|0)!=0?!(wp(b,d,f)|0):0))sq(b,e)|0;l=h;return}function wp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;t=l;l=l+64|0;r=t;j=t+40|0;s=ay(b)|0;k=by(b)|0;qq(j,b);c[46072]=c[j>>2];c[46073]=c[j+4>>2];c[46074]=c[j+8>>2];if(a[184296]|0){g[46072]=+g[46072]*.013888888888888888;g[46073]=+g[46073]*.013888888888888888}f=xp(b)|0;a:do if(!f)f=0;else{j=r;i=j+40|0;do{c[j>>2]=c[d>>2];j=j+4|0;d=d+4|0}while((j|0)<(i|0));j=r+16|0;q=+h[j>>3];o=+(k|0)*2.0;p=1.0/+(O(s+-1|0,s)|0);i=0;n=q;while(1){if(!((f|0)!=0&(i|0)<(e|0)))break a;yp(s,r);m=+h[22868]*+h[170];h[22869]=m;h[22870]=o*m*p;d=0;while(1){if((d|0)>=(c[45742]|0))break;m=+zp(d);if(m<=0.0)break;f=Ap(b,m)|0;if(!f){f=0;break}else d=d+1|0}m=n+q;h[j>>3]=m;i=i+1|0;n=m}}while(0);l=t;return f|0}function xp(a){a=a|0;var b=0,c=0,d=0,e=0;b=0;e=Sy(a)|0;while(1){if(!e)break;else d=e;while(1){c=Ty(a,d)|0;if(!c)break;d=c;b=(Dp(e,c)|0)+b|0}e=Ty(a,e)|0}return b|0}function yp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0;e=+h[b+16>>3];h[171]=e;c[344]=c[b>>2];f=+h[b+8>>3];h[22872]=f;c[45742]=c[b+32>>2];d=+h[b+24>>3];if(d>0.0)h[170]=d;h[22868]=e*e;if(f==0.0)h[22872]=+C(+(+(a|0)))*.2*e;return}function zp(a){a=a|0;var b=0;b=c[344]|0;return +(+h[22872]*+(b-a|0)/+(b|0))}function Ap(b,d){b=b|0;d=+d;var e=0,f=0,g=0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;e=Sy(b)|0;while(1){if(!e)break;j=(c[(c[e+16>>2]|0)+112>>2]|0)+16|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;e=Ty(b,e)|0}e=0;j=Sy(b)|0;while(1){if(!j)break;else g=j;while(1){f=Ty(b,g)|0;if(!f)break;g=f;e=(Bp(j,f)|0)+e|0}f=Ex(b,j)|0;while(1){if(!f)break;Cp(j,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0);f=Gx(b,f)|0}j=Ty(b,j)|0}a:do if(!e)e=0;else{m=d*d;g=Sy(b)|0;while(1){if(!g)break a;f=c[g+16>>2]|0;if((a[f+119>>0]|0)!=3){j=c[f+112>>2]|0;k=+h[j+16>>3];i=+h[j+24>>3];l=i*i+k*k;if(l>2]|0;h[f>>3]=+h[f>>3]+k}else{l=+C(+l);f=c[f+132>>2]|0;h[f>>3]=+h[f>>3]+k*d/l;i=i*d/l}j=f+8|0;h[j>>3]=+h[j>>3]+i}g=Ty(b,g)|0}}while(0);return e|0}function Bp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0;g=c[(c[b+16>>2]|0)+132>>2]|0;f=c[(c[a+16>>2]|0)+132>>2]|0;d=+h[g>>3]-+h[f>>3];e=+h[g+8>>3]-+h[f+8>>3];return Fp(a,b,d,e,e*e+d*d)|0}function Cp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0.0,k=0.0,l=0,m=0;if(!(Dp(a,b)|0)){i=c[b+16>>2]|0;m=c[i+132>>2]|0;f=c[a+16>>2]|0;l=c[f+132>>2]|0;e=+h[m>>3]-+h[l>>3];d=+h[m+8>>3]-+h[l+8>>3];g=+C(+(d*d+e*e));j=+Ep(a);j=+Ep(b)+j;k=g-j;g=k*k/((+h[171]+j)*g);e=g*e;b=c[i+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]-e;d=g*d;b=b+24|0;h[b>>3]=+h[b>>3]-d;b=c[f+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]+e;b=b+24|0;h[b>>3]=+h[b>>3]+d}return}function Dp(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0.0,k=0,l=0;k=c[d+16>>2]|0;l=c[k+132>>2]|0;d=c[b+16>>2]|0;b=c[d+132>>2]|0;i=+h[l>>3]-+h[b>>3];j=+h[l+8>>3]-+h[b+8>>3];j=j<0.0?-j:j;b=(a[184296]|0)==0;e=+h[d+32>>3];if(b){f=+g[46072];e=e*.5*f;f=+h[k+32>>3]*.5*f}else{f=+g[46072];e=e*.5+f;f=+h[k+32>>3]*.5+f}if(!((i<0.0?-i:i)<=f+e))d=0;else{e=+h[d+40>>3];if(b){i=+g[46073];f=e*.5*i;e=+h[k+40>>3]*.5*i}else{i=+g[46073];f=e*.5+i;e=+h[k+40>>3]*.5+i}d=j<=e+f&1}return d|0}function Ep(b){b=b|0;var d=0.0,e=0.0;b=c[b+16>>2]|0;d=+h[b+32>>3];if(!(a[184296]|0)){e=d*.5*+g[46072];d=+h[b+40>>3]*.5*+g[46073]}else{e=d*.5+ +g[46072];d=+h[b+40>>3]*.5+ +g[46073]}return +(+C(+(d*d+e*e)))}function Fp(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0,i=0;while(1){if(!(f==0.0))break;f=+(5-((g2()|0)%10|0)|0);e=+(5-((g2()|0)%10|0)|0);d=f;f=e*e+f*f}g=Dp(a,b)|0;f=((g|0)==0?+h[22870]:+h[22869])/f;d=f*d;b=c[(c[b+16>>2]|0)+112>>2]|0;i=b+16|0;h[i>>3]=+h[i>>3]+d;f=f*e;b=b+24|0;h[b>>3]=+h[b>>3]+f;b=c[(c[a+16>>2]|0)+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]-d;b=b+24|0;h[b>>3]=+h[b>>3]-f;return g|0}function Gp(a){a=a|0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;Hp(a);return}function Hp(a){a=a|0;var b=0,d=0,e=0,f=0;e=uH((ay(a)|0)<<2)|0;b=uH(((ay(a)|0)<<2)+4|0)|0;f=a+16|0;c[(c[f>>2]|0)+152>>2]=b;b=Sy(a)|0;d=0;while(1){if(!b)break;$l(b);c[(c[b+16>>2]|0)+112>>2]=e+(d<<2);c[(c[(c[f>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;b=Ty(a,b)|0;d=d+1|0}d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;Ip(b);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function Ip(a){a=a|0;var b=0.0;Az(a,134378,176,1)|0;eM(a)|0;b=+LL(a,c[46404]|0,1.0,0.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function Jp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+4|0;k=n;a[m>>0]=a[18492]|0;a[m+1>>0]=a[18493]|0;a[m+2>>0]=a[18494]|0;a[m+3>>0]=a[18495]|0;m=Xx(91072,m,0)|0;Az(m,91080,280,1)|0;c[(c[b+16>>2]|0)+140>>2]=m;e=Sy(b)|0;while(1){if(!e)break;f=e+16|0;if(!(c[c[(c[f>>2]|0)+112>>2]>>2]|0)){j=Kp(m,ry(e)|0,e)|0;c[c[(c[f>>2]|0)+112>>2]>>2]=j}e=Ty(b,e)|0}f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;h=c[e>>2]&3;g=c[c[(c[(c[((h|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;h=c[c[(c[(c[((h|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((g|0)!=(h|0))Az(Rx(m,g,h,0,1)|0,134378,176,1)|0;e=Gx(b,e)|0}f=Ty(b,f)|0}j=oD(m,k,0)|0;f=0;while(1){if((f|0)>=(c[k>>2]|0))break;h=c[j+(f<<2)>>2]|0;e=Sy(h)|0;while(1){if(!e)break;g=Ex(b,c[c[(c[e+16>>2]|0)+112>>2]>>2]|0)|0;while(1){if(!g)break;i=c[c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((e|0)!=(i|0)){i=Rx(m,e,i,0,1)|0;Az(i,134378,176,1)|0;Vx(h,i,1)|0}g=Gx(b,g)|0}e=Ty(h,e)|0}f=f+1|0}e=Sy(m)|0;while(1){if(!e)break;f=Ex(m,e)|0;while(1){if(!f)break;b=uH(8)|0;c[(c[f+16>>2]|0)+120>>2]=b;f=Gx(m,f)|0}e=Ty(m,e)|0}c[d>>2]=c[k>>2];l=n;return j|0}function Kp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;b=az(a,b,1)|0;Az(b,134365,304,1)|0;e=uH(40)|0;a=b+16|0;c[(c[a>>2]|0)+112>>2]=e;e=uH(c[46366]<<3)|0;a=c[a>>2]|0;c[a+132>>2]=e;e=c[d+16>>2]|0;h[a+88>>3]=+h[e+88>>3];h[a+96>>3]=+h[e+96>>3];h[a+80>>3]=+h[e+80>>3];c[c[a+112>>2]>>2]=d;return b|0}function Lp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+48|0;b=h+32|0;e=h;if(ay(a)|0){g=Jp(a,b)|0;f=c[b>>2]|0;b=c[g>>2]|0;if((f|0)==1){Xu(b,a);Mp(c[g>>2]|0);tq(a)|0}else{d=c[b+60>>2]|0;XD(a,2,8,e)|0;b=0;while(1){if((b|0)>=(f|0))break;i=c[g+(b<<2)>>2]|0;Xu(i,a);tq(i)|0;b=b+1|0}WD(f,g,d,e)|0;b=0;while(1){if((b|0)>=(f|0))break;Mp(c[g+(b<<2)>>2]|0);b=b+1|0}}D_(g)}l=h;return}function Mp(a){a=a|0;var b=0,d=0,e=0;b=Sy(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;e=c[d+132>>2]|0;d=c[(c[(c[c[d+112>>2]>>2]|0)+16>>2]|0)+132>>2]|0;h[d>>3]=+h[e>>3];h[d+8>>3]=+h[e+8>>3];b=Ty(a,b)|0}return}function Np(a){a=a|0;if(ay(a)|0){Gp(a);Lp(a);D_(c[(c[(Sy(a)|0)+16>>2]|0)+112>>2]|0);hn(a);eJ(a)}return}function Op(a){a=a|0;var b=0,d=0,e=0;b=Sy(a)|0;if(b|0){e=a+16|0;Pp(c[(c[e>>2]|0)+140>>2]|0);while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;JM(d);d=Gx(a,d)|0}HM(b);b=Ty(a,b)|0}D_(c[(c[e>>2]|0)+152>>2]|0);if((fz(a)|0)!=(a|0))Gz(a,0,134401)}return}function Pp(a){a=a|0;var b=0,d=0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;D_(c[(c[b+16>>2]|0)+120>>2]|0);b=Gx(a,b)|0}b=d+16|0;D_(c[(c[b>>2]|0)+112>>2]|0);D_(c[(c[b>>2]|0)+132>>2]|0);d=Ty(a,d)|0}$x(a)|0;return}function Qp(a){a=a|0;var b=0,d=0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0.0,p=0.0;m=l;l=l+16|0;k=m;a:do if(Rp(a,k)|0){b=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;g=+h[b>>3];e=+h[b+8>>3];b=Sy(a)|0;while(1){if(!b)break;f=c[(c[b+16>>2]|0)+132>>2]|0;h[f>>3]=+h[f>>3]-g;f=f+8|0;h[f>>3]=+h[f>>3]-e;b=Ty(a,b)|0}b=(g!=0.0|e!=0.0)&1;d=Sy(a)|0;while(1){if(!d)break a;f=Ex(a,d)|0;if(f|0)break;d=Ty(a,d)|0}n=c[f>>2]&3;d=c[(c[(c[((n|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;f=c[(c[(c[((n|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;i=+h[f+8>>3];j=+h[f>>3];e=+K(+(+h[d+8>>3]-i),+(+h[d>>3]-j));e=+h[k>>3]-e;h[k>>3]=e;if(e!=0.0){g=+E(+e);e=+F(+e);b=Sy(a)|0;while(1){if(!b){b=1;break a}k=c[(c[b+16>>2]|0)+132>>2]|0;p=+h[k>>3]-j;n=k+8|0;o=+h[n>>3]-i;h[k>>3]=p*g+j-o*e;h[n>>3]=p*e+i+o*g;b=Ty(a,b)|0}}}else b=0;while(0);l=m;return b|0}function Rp(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0;g=l;l=l+16|0;f=g;b=xx(b,91085)|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0){e=+c2(b,f);if((c[f>>2]|0)==(b|0))if(!((QL(b)|0)<<24>>24)){b=0;break}else e=0.0;while(1){if(!(e>180.0))break;e=e+-360.0}while(1){if(!(e<=-180.0))break;e=e+360.0}h[d>>3]=e*.017453292519943295;b=1}else b=0;while(0);l=g;return b|0}function Sp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=xx(a,91095)|0;return Tp(a,(d|0)==0?(c|0?c:191979):d,b)|0}function Tp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+32|0;m=n+16|0;j=n+8|0;i=n;if((d|0)!=0?(a[d>>0]|0)!=0:0){f=17792;while(1){g=c[f+4>>2]|0;if(!g)break;if(!(V$(d,g,c[f+8>>2]|0)|0)){k=6;break}f=f+16|0}if((k|0)==6){if(!(c[f+12>>2]|0)){c[i>>2]=g;Pw(0,91103,i)|0;f=17792}i=c[f>>2]|0;c[e>>2]=i;c[e+4>>2]=c[f+12>>2];if((i|0)==18)Up(b,d+(c[f+8>>2]|0)|0,e)}if(!(c[f+4>>2]|0)){f=RL(d,63)|0;if(f<<24>>24==63){c[j>>2]=d;Pw(0,91145,j)|0;f=0}else f=f&255;f=(f|0)==0;c[e>>2]=f&1;f=f?91192:132627;k=15}}else{c[e>>2]=0;f=132627;k=15}if((k|0)==15)c[e+4>>2]=f;if(0){k=c[15686]|0;j=c[e+8>>2]|0;o=+h[e+16>>3];c[m>>2]=c[e+4>>2];c[m+4>>2]=j;h[m+8>>3]=o;g1(k,91200,m)|0}l=n;return e|0}function Up(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=g;f=(N1(b,134313,f)|0)>0;b=c[g>>2]|0;c[d+8>>2]=f&(b|0)>-1?b:1e3;h[d+16>>3]=+LL(a,nx(a,0,91236,0)|0,-4.0,-1.0e10);l=e;return}function Vp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h+8|0;f=h;do if((ay(a)|0)>=2){d=Qp(a)|0;d=(Wp(a)|0)+d|0;e=c[b>>2]|0;if(e){if(0){e=c[15686]|0;j=ry(a)|0;i=c[b+4>>2]|0;c[f>>2]=j;c[f+4>>2]=i;g1(e,91565,f)|0;e=c[b>>2]|0}if(e>>>0>2){switch(e|0){case 3:{e=Xq(a,1)|0;break}case 4:{e=Xq(a,0)|0;break}case 6:case 5:{e=0;break}case 10:case 9:case 7:case 8:case 14:case 13:case 11:case 12:{Hq(a,e)|0;e=0;break}case 15:{e=Xq(a,-1)|0;break}default:{c[g>>2]=c[b+4>>2];Pw(0,91588,g)|0;e=0}}d=e+d|0;break}if(Xp(a)|0){Yp();D_(c[46075]|0);c[46075]=0;break}Zp(a);if((c[b>>2]|0)==2)e=_p()|0;else e=$p()|0;if(e|0)aq();Yp();D_(c[46075]|0);c[46075]=0;d=e+d|0}}else d=0;while(0);l=h;return d|0}function Wp(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m+24|0;f=m+16|0;j=m;b=xx(a,137660)|0;a:do if(((b|0)!=0?(k=j+8|0,c[f>>2]=j,c[f+4>>2]=k,e=N1(b,102477,f)|0,(e|0)!=0):0)?(g=+h[j>>3],!(+B(+g)<1.0e-09)):0){if((e|0)!=1){d=+h[k>>3];if(+B(+d)<1.0e-09){b=0;break}}else{h[k>>3]=g;d=g}if(!(d==1.0&g==1.0)){if(0){f=c[15686]|0;h[i>>3]=g;h[i+8>>3]=d;g1(f,91748,i)|0}b=Sy(a)|0;while(1){if(!b){b=1;break a}i=c[(c[b+16>>2]|0)+132>>2]|0;h[i>>3]=+h[i>>3]*+h[j>>3];i=i+8|0;h[i>>3]=+h[i>>3]*+h[k>>3];b=Ty(a,b)|0}}else b=0}else b=0;while(0);l=m;return b|0}function Xp(b){b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;k=n;c[46084]=ay(b)|0;ur();c[46099]=vH((c[46084]|0)*96|0)|0;f=Sy(b)|0;d=c[46099]|0;qq(k,b);i=+g[k>>2];j=+g[k+4>>2];k=(a[k+8>>0]|0)==0;j=k?j:j*.013888888888888888;i=k?i:i*.013888888888888888;k=k?2:1;e=0;while(1){if((e|0)>=(c[46084]|0)){d=0;break}o=c[(c[f+16>>2]|0)+132>>2]|0;h[d+8>>3]=+h[o>>3];h[d+16>>3]=+h[o+8>>3];if(mb[k&3](d+40|0,f,i,j)|0){m=4;break}c[d+24>>2]=e;c[d+28>>2]=1;c[d>>2]=f;c[d+88>>2]=0;d=d+96|0;e=e+1|0;f=Ty(b,f)|0}if((m|0)==4){D_(c[46099]|0);c[46099]=0;d=1}l=n;return d|0}function Yp(){var a=0,b=0;a=c[46099]|0;b=0;while(1){if((b|0)>=(c[46084]|0))break;pt(a+40|0);a=a+96|0;b=b+1|0}ot();Wr();D_(c[46099]|0);return}function Zp(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+32|0;m=o+16|0;n=o;p=c[46099]|0;i=+h[p+8>>3];k=+h[p+16>>3];f=c[46084]|0;d=p;e=1;g=+h[p+40>>3]+i;i=+h[p+56>>3]+i;j=+h[p+48>>3]+k;k=+h[p+64>>3]+k;while(1){if((e|0)>=(f|0))break;s=+h[d+104>>3];q=+h[d+112>>3];t=+h[d+136>>3]+s;r=+h[d+144>>3]+q;s=+h[d+152>>3]+s;q=+h[d+160>>3]+q;d=d+96|0;e=e+1|0;g=ti?s:i;j=rk?q:k}d=xx(b,91688)|0;if(d|0?a[d>>0]|0:0)h[173]=+b2(d);s=+h[173];t=s*(k-j);s=s*(i-g);h[m>>3]=g-s;h[m+8>>3]=j-t;h[n>>3]=s+i;h[n+8>>3]=t+k;iq(m,n);l=o;return}function _p(){var a=0,b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(bq(0)|0){cq();a=0;do{pq();a=a+1|0}while((bq(a)|0)!=0);if(!0)a=1;else{e=c[15686]|0;c[b>>2]=a;g1(e,91616,b)|0;a=1}}else a=0;l=d;return a|0}function $p(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i+8|0;g=i;b=bq(0)|0;if(!b)a=0;else{cq();dq(0);Yt(0,1);a=0;e=0;d=0;while(1){fq();d=d+1|0;f=bq(d)|0;if(!f)break;b=(f|0)<(b|0)?0:e+1|0;c[46076]=1;if(b){gq();a=a+1|0}dq(1);Yt(0,1);e=b;b=f}if(0){f=c[15686]|0;c[g>>2]=d;g1(f,91616,g)|0;c[h>>2]=a;g1(f,91643,h)|0}hq();a=1}l=i;return a|0}function aq(){var a=0,b=0,d=0,e=0;d=c[46084]|0;a=c[46099]|0;b=0;while(1){if((b|0)>=(d|0))break;e=c[(c[(c[a>>2]|0)+16>>2]|0)+132>>2]|0;h[e>>3]=+h[a+8>>3];h[e+8>>3]=+h[a+16>>3];a=a+96|0;b=b+1|0}return}function bq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;o=q+24|0;n=q+8|0;p=q;d=c[46099]|0;e=c[46084]|0;b=0;while(1){if((b|0)>=(e|0)){f=0;b=0;break}c[d+(b*96|0)+32>>2]=0;b=b+1|0}a:while(1){if((b|0)>=(e+-1|0))break;m=d+96|0;b=b+1|0;j=d+8|0;k=d+40|0;i=d+32|0;g=m;h=b;while(1){if((h|0)>=(e|0)){d=m;continue a}e=g+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];if(!(yt(n,k,o,g+40|0)|0))d=f;else{c[i>>2]=1;c[g+32>>2]=1;d=f+1|0}g=g+96|0;h=h+1|0;f=d;e=c[46084]|0}}if(0>1){o=c[15686]|0;c[p>>2]=a;c[p+4>>2]=f;g1(o,91669,p)|0}l=q;return f|0}function cq(){var a=0,b=0,d=0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0;nq();k=c[46078]|0;l=c[46099]|0;a=c[46075]|0;a:while(1){i=a;if(a>>>0>=k>>>0)break;b=a+4|0;if(b>>>0>=k>>>0){a=b;continue}f=c[b>>2]|0;d=c[a>>2]|0;g=+h[d>>3];if(+h[f>>3]!=g){a=b;continue}e=+h[d+8>>3];if(+h[f+8>>3]!=e){a=b;continue}j=a+8|0;f=2;while(1){if(j>>>0>=k>>>0)break;d=c[j>>2]|0;if(!(+h[d>>3]==g)){m=11;break}if(!(+h[d+8>>3]==e)){m=11;break}j=j+4|0;f=f+1|0}if((m|0)==11){m=0;d=c[j>>2]|0;if(+h[d+8>>3]==e){e=(+h[d>>3]-g)/+(f|0);d=(((j>>>0>b>>>0?j:b)+-1+(0-i)|0)>>>2)+1|0;a=1;while(1){if((a|0)==(d|0)){a=j;continue a}i=c[b>>2]|0;h[i>>3]=+h[i>>3]+e*+(a|0);a=a+1|0;b=b+4|0}}}while(1){if(b>>>0>=j>>>0){a=j;continue a}f=c[a>>2]|0;n=c[f+16>>2]|0;i=c[b>>2]|0;d=c[i+16>>2]|0;h[i>>3]=(+h[l+(n*96|0)+56>>3]-+h[l+(n*96|0)+40>>3]+ +h[l+(d*96|0)+56>>3]-+h[l+(d*96|0)+40>>3])*.5+ +h[f>>3];b=b+4|0;a=a+4|0}}return}function dq(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;if(a|0)nq();i=c[46075]|0;j=c[i>>2]|0;d=+h[j>>3];h[22887]=d;k=c[46084]|0;f=1;g=+h[j>>3];while(1){if((f|0)>=(k|0))break;a=c[i+(f<<2)>>2]|0;b=+h[a>>3];if(b>3]}else{e=b;b=d}f=f+1|0;d=b;g=e>g?e:g}e=+h[j+8>>3];h[22888]=e;h[22890]=+h[(c[i+(k+-1<<2)>>2]|0)+8>>3]-e;h[22889]=g-d;return}function eq(){var a=0;a=c[46077]|0;if(a>>>0<(c[46078]|0)>>>0){c[46077]=a+4;a=c[a>>2]|0}else a=0;return a|0}function fq(){var a=0,b=0,d=0;a=c[46099]|0;jq();d=(c[46076]|0)==0;b=0;while(1){if((b|0)>=(c[46084]|0))break;if(!(d?!(c[a+32>>2]|0):0))kq(a);a=a+96|0;b=b+1|0}return}function gq(){var a=0,b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;a=l;l=l+32|0;c=a+16|0;b=a;j=+h[22883];i=+h[22881];g=+h[22884];e=+h[22882];d=(i-e)*.05;f=(j-g)*.05;h[b>>3]=f+j;h[b+8>>3]=i+d;h[c>>3]=g-f;h[c+8>>3]=e-d;iq(c,b);l=a;return}function hq(){Hr();Jr();Kt();nr();return}function iq(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0;f=+h[a>>3];h[22884]=f;e=+h[b>>3];h[22883]=e;c=+h[a+8>>3];h[22882]=c;d=+h[b+8>>3];h[22881]=d;h[22873]=f;h[22875]=f;h[22877]=e;h[22879]=e;h[22880]=d;h[22876]=d;h[22878]=c;h[22874]=c;return}function jq(){var a=0,b=0.0,d=0.0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;m=c[46099]|0;g=m+8|0;f=+vr(g,182984);e=+vr(g,183e3);d=+vr(g,183016);a=1;b=+vr(g,183032);g=m;i=m;j=m;k=m;while(1){l=m+96|0;if((a|0)>=(c[46084]|0))break;q=m+104|0;r=+vr(q,182984);n=r>2]|0;o=k+8|0;b=0.0;d=0.0;e=0.0;k=c[k>>2]|0;while(1){f=c[k>>2]|0;if(!f)break;s=k+8|0;r=f+8|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];q=+lq(g,i,j);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];mq(g,i,j,m,n);b=+h[n>>3]*q+b;d=+h[m>>3]*q+d;e=q+e;k=f}h[a+8>>3]=d/e;h[a+16>>3]=b/e;l=p;return}function lq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;d=+h[b+8>>3];f=+h[c+8>>3];e=+h[a+8>>3];return +(+B(+((f-e)*+h[b>>3]+(d-f)*+h[a>>3]+ +h[c>>3]*(e-d)))*.5)}function mq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;h[d>>3]=(+h[b>>3]+ +h[a>>3]+ +h[c>>3])*.3333333333333333;h[e>>3]=(+h[b+8>>3]+ +h[a+8>>3]+ +h[c+8>>3])*.3333333333333333;return}function nq(){var a=0,b=0,d=0,e=0;a=c[46075]|0;if(!a){a=vH(c[46084]<<2)|0;c[46075]=a;c[46078]=a+(c[46084]<<2)}d=c[46099]|0;Wr();e=c[46084]|0;b=0;while(1){if((b|0)>=(e|0))break;c[a>>2]=d+8;c[d+88>>2]=0;c[d+28>>2]=1;d=d+96|0;a=a+4|0;b=b+1|0}_0(c[46075]|0,e,4,68);c[46077]=c[46075];return}function oq(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;d=+h[a+8>>3];e=+h[b+8>>3];if(!(de)){e=+h[a>>3];d=+h[b>>3];if(ed&1}else a=1;else a=-1;return a|0}function pq(){var a=0,b=0,d=0,e=0;d=c[46084]|0;a=0;b=c[46099]|0;while(1){if((a|0)>=(d|0))break;e=b+8|0;h[e>>3]=+h[e>>3]*1.05;e=b+16|0;h[e>>3]=+h[e>>3]*1.05;a=a+1|0;b=b+96|0}return}function qq(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+48|0;k=m;j=m+24|0;f=xx(e,91700)|0;if(!((f|0)!=0?(rq(f,j,1.0,0.0)|0)!=0:0))i=3;do if((i|0)==3){e=xx(e,91704)|0;if(e|0?rq(e,j,.800000011920929,4.0)|0:0)break;g[j+4>>2]=4.0;g[j>>2]=4.0;a[j+8>>0]=1}while(0);if(0){i=c[15686]|0;o=+g[j>>2];n=+g[j+4>>2];c[k>>2]=d[j+8>>0];h[k+8>>3]=o;h[k+16>>3]=n;g1(i,91709,k)|0};c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];l=m;return}function rq(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;o=l;l=l+16|0;m=o;j=o+12|0;k=o+8|0;while(1){h=a[b>>0]|0;i=b+1|0;if(!(B$(h<<24>>24)|0))break;else b=i}p=h<<24>>24==43;h=d+8|0;a[h>>0]=p&1;c[m>>2]=j;c[m+4>>2]=k;switch(N1(p?i:b,91742,m)|0){case 0:{b=0;break}case 1:{c[k>>2]=c[j>>2];n=5;break}default:n=5}if((n|0)==5){do if(a[h>>0]|0){if(e>1.0){q=+g[j>>2]/e;g[d>>2]=q>f?f:q;e=+g[k>>2]/e;e=e>f?f:e;break}if(e<1.0){q=+g[j>>2]/e;g[d>>2]=q>2]/e;e=e>2]=c[j>>2];e=+g[k>>2];break}}else{g[d>>2]=+g[j>>2]/e+1.0;e=+g[k>>2]/e+1.0}while(0);g[d+4>>2]=e;b=1}l=o;return b|0}function sq(a,b){a=a|0;b=b|0;var c=0,d=0;d=l;l=l+32|0;c=d;if((ay(a)|0)<2)a=0;else{Tp(a,b,c)|0;a=Vp(a,c)|0}l=d;return a|0}function tq(a){a=a|0;return sq(a,xx(a,91095)|0)|0}function uq(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+48|0;k=m;j=m+24|0;f=xx(e,91704)|0;if(!((f|0)!=0?(rq(f,j,1.0,0.0)|0)!=0:0))i=3;do if((i|0)==3){e=xx(e,91700)|0;if(e|0?rq(e,j,1.25,3.200000047683716)|0:0)break;g[j+4>>2]=3.200000047683716;g[j>>2]=3.200000047683716;a[j+8>>0]=1}while(0);if(0){i=c[15686]|0;o=+g[j>>2];n=+g[j+4>>2];c[k>>2]=d[j+8>>0];h[k+8>>3]=o;h[k+16>>3]=n;g1(i,91771,k)|0};c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];l=m;return}function vq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;o=p;h=0;while(1){if((h|0)>=(d|0))break;c[e+(h<<2)>>2]=-1;h=h+1|0}c[e+(a<<2)>>2]=0;wq(f,a);a:do if(!(c[b+8>>2]|0)){h=2147483647;b:while(1){if(!((xq(f,o)|0)<<24>>24))break a;j=c[o>>2]|0;h=c[e+(j<<2)>>2]|0;i=b+(j*20|0)|0;j=b+(j*20|0)+4|0;k=h+1|0;a=1;while(1){if((a|0)>=(c[i>>2]|0))continue b;m=c[(c[j>>2]|0)+(a<<2)>>2]|0;n=e+(m<<2)|0;if((c[n>>2]|0)<0){c[n>>2]=k;yq(f,m)|0}a=a+1|0}}}else{h=2147483647;c:while(1){if(!((xq(f,o)|0)<<24>>24))break a;k=c[o>>2]|0;h=c[e+(k<<2)>>2]|0;i=b+(k*20|0)|0;j=b+(k*20|0)+4|0;k=b+(k*20|0)+8|0;a=1;while(1){if((a|0)>=(c[i>>2]|0))continue c;m=c[(c[j>>2]|0)+(a<<2)>>2]|0;n=e+(m<<2)|0;if((c[n>>2]|0)<0){c[n>>2]=h+~~+g[(c[k>>2]|0)+(a<<2)>>2];yq(f,m)|0}a=a+1|0}}}while(0);a=h+10|0;h=0;while(1){if((h|0)>=(d|0))break;i=e+(h<<2)|0;if((c[i>>2]|0)<0)c[i>>2]=a;h=h+1|0}l=p;return}function wq(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a+12>>2]=0;c[a+8>>2]=1;return}function xq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){a=c[a>>2]|0;c[d>>2]=e+1;c[b>>2]=c[a+(e<<2)>>2];a=1}else a=0;return a|0}function yq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;if((e|0)<(c[a+4>>2]|0)){a=c[a>>2]|0;c[d>>2]=e+1;c[a+(e<<2)>>2]=b;a=1}else a=0;return a|0}function zq(a,b){a=a|0;b=b|0;c[a>>2]=vH(b<<2)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;return}function Aq(a){a=a|0;D_(c[a>>2]|0);return}function Bq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;if(!0)g=0;else{E1(91804,25,1,c[15686]|0)|0;g=0}while(1){if((g|0)>=(a|0))break;i=b+(g<<2)|0;f=0;e=0.0;while(1){if((f|0)==(a|0))break;if((g|0)!=(f|0))e=+h[(c[i>>2]|0)+(f<<3)>>3]+e;f=f+1|0}h[(c[i>>2]|0)+(g<<3)>>3]=-e;g=g+1|0}return xs(b,d,a+-1|0)|0}function Cq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0;j=wn(b,b,0.0)|0;k=wn(b,b,0.0)|0;e=Sy(a)|0;while(1){if(!e)break;d=Jx(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;f=(c[c[((g|0)==3?d:d+48|0)+40>>2]>>2]|0)>>>4;g=(c[c[((g|0)==2?d:d+-48|0)+40>>2]>>2]|0)>>>4;if((f|0)!=(g|0)){l=-1.0/+h[(c[d+16>>2]|0)+136>>3];h[(c[j+(g<<2)>>2]|0)+(f<<3)>>3]=l;h[(c[j+(f<<2)>>2]|0)+(g<<3)>>3]=l}d=Kx(a,d,e)|0}e=Ty(a,e)|0}i=Bq(b,j,k)|0;a:do if(i|0){f=a+16|0;e=0;while(1){if((e|0)>=(b|0))break a;g=k+(e<<2)|0;d=0;while(1){if((d|0)==(b|0))break;a=c[g>>2]|0;h[(c[(c[(c[f>>2]|0)+160>>2]|0)+(e<<2)>>2]|0)+(d<<3)>>3]=+h[(c[k+(d<<2)>>2]|0)+(d<<3)>>3]+ +h[a+(e<<3)>>3]+ +h[a+(d<<3)>>3]*-2.0;d=d+1|0}e=e+1|0}}while(0);xn(j);xn(k);return i|0}function Dq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;j=s;n=d<<3;o=vH(n)|0;p=vH(n)|0;q=vH(n)|0;k=vH(n)|0;m=vH(n)|0;n=vH(n)|0;Ps(d,c,n);Is(d,n);Is(d,b);Ks(a,d,b,k);Ms(d,n,k,o);Ps(d,o,p);i=f+-1|0;c=0;g=+Qs(d,o,o);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+Rs(d,o)>e)){c=0;break}Ks(a,d,p,q);h=+Qs(d,p,q);if(h==0.0){c=0;break}h=g/h;Os(d,p,h,m);Ns(d,b,m,b);if((c|0)<(i|0)){Os(d,q,h,q);Ms(d,o,q,o);h=+Qs(d,o,o);if(g==0.0){r=7;break}Os(d,p,h/g,p);Ns(d,o,p,p);g=h}c=c+1|0}if((r|0)==7){Pw(1,91830,j)|0;c=1}D_(o);D_(p);D_(q);D_(k);D_(m);D_(n);l=s;return c|0}function Eq(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;j=s;o=d<<3;p=vH(o)|0;q=vH(o)|0;k=vH(o)|0;m=vH(o)|0;n=vH(o)|0;o=vH(o)|0;Ps(d,c,o);if(g<<24>>24){Is(d,o);Is(d,b)}Ls(a,d,b,m);Ms(d,o,m,p);Ps(d,p,q);g=f+-1|0;c=0;h=+Qs(d,p,p);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+Rs(d,p)>e)){c=0;break}Ls(a,d,q,k);i=+Qs(d,q,k);if(i==0.0){c=0;break}i=h/i;Os(d,q,i,n);Ns(d,b,n,b);if((c|0)<(g|0)){Os(d,k,i,k);Ms(d,p,k,p);i=+Qs(d,p,p);if(h==0.0){r=9;break}Os(d,q,i/h,q);Ns(d,p,q,q);h=i}c=c+1|0}if((r|0)==9){Pw(1,91830,j)|0;c=1}D_(p);D_(q);D_(k);D_(m);D_(n);D_(o);l=s;return c|0}function Fq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;j=q;k=d<<2;m=uH(k)|0;n=uH(k)|0;o=uH(k)|0;k=uH(k)|0;Ts(d,b);Ts(d,c);Us(a,d,b,k);Ts(d,k);Vs(d,c,k,m);Zs(d,m,n);i=f+-1|0;c=0;g=+_s(d,m,m);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+bt(d,m)>e)){c=0;break}Ts(d,n);Ts(d,b);Ts(d,m);Us(a,d,n,o);Ts(d,o);h=+_s(d,n,o);if(h==0.0){c=0;break}h=g/h;Xs(d,b,h,n);if((c|0)<(i|0)){Xs(d,m,-h,o);h=+_s(d,m,m);if(g==0.0){p=7;break}Ys(d,n,h/g,n);Ws(d,m,n,n);g=h}c=c+1|0}if((p|0)==7){Pw(1,91830,j)|0;c=1}D_(m);D_(n);D_(o);D_(k);l=q;return c|0}function Gq(a,b,d,e,f,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;var o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0;M=l;l=l+48|0;F=M+24|0;E=M+16|0;D=M+8|0;C=M;J=M+40|0;K=M+36|0;H=M+32|0;s=j&4;c[J>>2]=0;c[K>>2]=0;a:do if(c[a+16>>2]|0){p=0;o=0;while(1){if((p|0)>=(b|0))break;t=c[a+(p*20|0)>>2]|0;u=a+(p*20|0)+16|0;r=1;while(1){if((r|0)>=(t|0))break;if(!(o<<24>>24))o=+g[(c[u>>2]|0)+(r<<2)>>2]!=0.0;else o=1;r=r+1|0;o=o&1}p=p+1|0}if(o<<24>>24){z=(s|0)!=0;if(z){r=e+4|0;b:do if((i|0)>2){o=i+-1|0;if((qn(a,b,d,r,f,o,j,k,15)|0)<0){o=-1;break a}p=e+(o<<2)|0;o=0;while(1){if((o|0)>=(b|0))break b;h[(c[p>>2]|0)+(o<<3)>>3]=+h[(c[r>>2]|0)+(o<<3)>>3];o=o+1|0}}while(0);y=c[e>>2]|0;w=c[r>>2]|0;if((kt(a,b,w,b)|0)==0?(kv(a,b,.01,.1,w,J,K,H)|0)==0:0){x=c[H>>2]|0;if((x|0)<1){o=qn(a,b,d,e,f,i,j,k,m)|0;break}c:do if(n>0.0){s=c[J>>2]|0;t=c[K>>2]|0;u=x+-1|0;q=0.0;r=0;while(1){if((r|0)>=(x|0))break c;o=c[t+(r<<2)>>2]|0;A=n-q-+h[w+(c[s+(o<<2)>>2]<<3)>>3]+ +h[w+(c[s+(o+-1<<2)>>2]<<3)>>3];q=(A<0.0?0.0:A)+q;if((r|0)<(u|0))p=c[t+(r+1<<2)>>2]|0;else p=b;while(1){if((o|0)>=(p|0))break;I=w+(c[s+(o<<2)>>2]<<3)|0;h[I>>3]=+h[I>>3]+q;o=o+1|0}r=r+1|0}}while(0);if((i|0)==2?(Qt(a,b,w,y,+h[22909])|0)!=0:0){p=0;o=-1}else L=33}else{p=0;o=-1}}else{kn(a,b,i,e,f)|0;if(!(kv(a,b,.01,.1,0,J,K,H)|0))L=33;else{p=0;o=-1}}d:do if((L|0)==33){if((b|0)==1){o=0;break a}I=vH(c[H>>2]<<2)|0;if(!m){o=0;break a}if(0)EL();switch(k|0){case 2:{if(0)E1(91878,24,1,c[15686]|0)|0;o=pn(a,b)|0;L=46;break}case 1:{o=ln(a,b)|0;if(!o){Pw(0,91903,C)|0;Pw(3,91952,D)|0;L=47}else G=o;break}case 3:{if(0)E1(92005,21,1,c[15686]|0)|0;o=mn(a,b)|0;L=46;break}default:L=47}if((L|0)==46)if(!o)L=47;else G=o;if((L|0)==47){if(0)E1(92027,26,1,c[15686]|0)|0;G=on(a,b)|0}if(0){a=c[15686]|0;h[E>>3]=+FL();g1(a,92054,E)|0;E1(92066,25,1,a)|0;EL()}a=b+-1|0;y=(O(a,b)|0)/2|0;E=y+b|0;e:do if(!z){q=1.0;p=0;while(1){if((p|0)>=(i|0))break;r=e+(p<<2)|0;o=0;while(1){if((o|0)>=(b|0))break;A=+B(+(+h[(c[r>>2]|0)+(o<<3)>>3]));q=A>q?A:q;o=o+1|0}p=p+1|0}q=1.0/q;p=0;while(1){if((p|0)>=(i|0))break e;r=e+(p<<2)|0;o=0;while(1){if((o|0)>=(b|0))break;D=(c[r>>2]|0)+(o<<3)|0;h[D>>3]=+h[D>>3]*(10.0*q);o=o+1|0}p=p+1|0}}while(0);f:do if(n>0.0){v=+(y|0);o=0;q=0.0;s=0;g:while(1){if((s|0)>=(a|0))break;t=s+1|0;r=o;p=t;while(1){o=r+1|0;if((p|0)>=(b|0)){s=t;continue g}A=+gs(e,i,s,p);r=o;q=A/+g[G+(o<<2)>>2]+q;p=p+1|0}}q=q/v;o=0;while(1){if((o|0)>=(E|0)){o=0;break f}D=G+(o<<2)|0;g[D>>2]=+g[D>>2]*q;o=o+1|0}}else o=0;while(0);while(1){if((o|0)>=(i|0))break;Is(b,c[e+(o<<2)>>2]|0);o=o+1|0}p=c[e+4>>2]|0;q=+h[p>>3];o=0;while(1){if((o|0)>=(b|0))break;D=p+(o<<3)|0;h[D>>3]=+h[D>>3]-q;o=o+1|0}u=i<<2;D=vH(u)|0;x=b<<2;w=O(x,i)|0;r=vH(w)|0;o=0;while(1){if((o|0)>=(i|0))break;s=r+((O(o,b)|0)<<2)|0;c[D+(o<<2)>>2]=s;t=e+(o<<2)|0;p=0;while(1){if((p|0)>=(b|0))break;g[s+(p<<2)>>2]=+h[(c[t>>2]|0)+(p<<3)>>3];p=p+1|0}o=o+1|0}v=+(y|0);if(0){C=c[15686]|0;h[F>>3]=+FL();g1(C,92092,F)|0}ct(E,G);dt(E,G);C=vH(b<<3)|0;$s(b,0.0,C);o=0;r=0;while(1){if((r|0)>=(a|0)){o=b;p=0;r=0;break}s=b-r|0;q=0.0;p=1;while(1){o=o+1|0;if((p|0)>=(s|0))break;A=+g[G+(o<<2)>>2];F=C+(p+r<<3)|0;h[F>>3]=+h[F>>3]-A;q=q+A;p=p+1|0}F=C+(r<<3)|0;h[F>>3]=+h[F>>3]-q;r=r+1|0}while(1){if((p|0)>=(b|0))break;g[G+(r<<2)>>2]=+h[C+(p<<3)>>3];F=o+r|0;o=o+-1|0;p=p+1|0;r=F}k=vH(u)|0;c[k>>2]=vH(w)|0;o=1;while(1){if((o|0)>=(i|0))break;c[k+(o<<2)>>2]=(c[k>>2]|0)+((O(o,b)|0)<<2);o=o+1|0}z=vH(x)|0;f=vH(x)|0;j=vH(E<<2)|0;p=Et(G,b)|0;d=Jt(G,b,c[J>>2]|0,c[K>>2]|0,c[H>>2]|0)|0;y=k+4|0;r=0;A=1797693134862315708145274.0e284;o=0;while(1){if(!(r<<24>>24==0&(o|0)<(m|0)))break;$s(b,0.0,C);et(E,G,j);w=0;t=0;while(1){if((w|0)>=(a|0)){r=0;s=b;t=0;break}x=b-w+-1|0;at(b,0.0,f);r=0;while(1){if((r|0)>=(i|0))break;H=D+(r<<2)|0;at(x,+g[(c[H>>2]|0)+(w<<2)>>2],z);Xs(x,z,-1.0,(c[H>>2]|0)+(w<<2)+4|0);ct(x,z);Ws(x,z,f,f);r=r+1|0}ft(x,f);r=0;while(1){if((r|0)>=(x|0))break;s=f+(r<<2)|0;q=+g[s>>2];if(q>=3402823466385288598117041.0e14|q<0.0)g[s>>2]=0.0;r=r+1|0}u=w+1|0;q=0.0;r=t;s=0;while(1){r=r+1|0;if((s|0)>=(x|0))break;H=j+(r<<2)|0;N=+g[H>>2]*+g[f+(s<<2)>>2];g[H>>2]=N;H=C+(u+s<<3)|0;h[H>>3]=+h[H>>3]-N;q=q+N;s=s+1|0}t=C+(w<<3)|0;h[t>>3]=+h[t>>3]-q;w=u;t=r}while(1){if((r|0)>=(b|0)){r=0;break}g[j+(t<<2)>>2]=+h[C+(r<<3)>>3];H=s+t|0;r=r+1|0;s=s+-1|0;t=H}while(1){if((r|0)>=(i|0)){q=0.0;r=0;break}Us(j,b,c[D+(r<<2)>>2]|0,c[k+(r<<2)>>2]|0);r=r+1|0}while(1){if((r|0)>=(i|0))break;q=+_s(b,c[D+(r<<2)>>2]|0,c[k+(r<<2)>>2]|0)+q;r=r+1|0}q=q*2.0+v;r=0;while(1){if((r|0)>=(i|0))break;H=D+(r<<2)|0;Us(G,b,c[H>>2]|0,z);q=q-+_s(b,c[H>>2]|0,z);r=r+1|0}N=+B(+(q-A))/+B(+(A+1.0e-10));r=((o|0)>1&q>A|N<+h[22909])&1;s=0;while(1){if((s|0)>=(i|0))break;if((s|0)!=1){if(Fq(G,c[D+(s<<2)>>2]|0,c[k+(s<<2)>>2]|0,b,.001,b)|0){o=-1;break d}}else Ft(d,c[y>>2]|0,D,i,1,15,I,n)|0;s=s+1|0}A=q;o=o+1|0}D_(I);It(d);if(D|0){r=0;while(1){if((r|0)>=(i|0))break;t=D+(r<<2)|0;u=e+(r<<2)|0;s=0;while(1){if((s|0)>=(b|0))break;h[(c[u>>2]|0)+(s<<3)>>3]=+g[(c[t>>2]|0)+(s<<2)>>2];s=s+1|0}r=r+1|0}D_(c[D>>2]|0);D_(D)}if(k|0){D_(c[k>>2]|0);D_(k)}D_(z);D_(f);D_(C);D_(G);D_(j)}while(0);D_(c[J>>2]|0);D_(c[K>>2]|0);if(p){D_(c[p>>2]|0);D_(p)}}else L=10}else L=10;while(0);if((L|0)==10)o=qn(a,b,d,e,f,i,j,k,m)|0;l=M;return o|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;f=m+24|0;g=m+12|0;d=m;i=ay(a)|0;k=vH(i*48|0)|0;qq(d,a);c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];d=Sy(a)|0;e=k;while(1){if(!d)break;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];Iq(d,e,f);d=Ty(a,d)|0;e=e+48|0}a:do if(!(Jq(k,i)|0))d=0;else{switch(b|0){case 9:{Lq(a,k,i,69,1);Nq(a,k,i,70,1);d=0;e=k;break}case 10:{Nq(a,k,i,70,1);Lq(a,k,i,69,1);d=0;e=k;break}case 7:{Lq(a,k,i,71,1);Nq(a,k,i,70,1);j=9;break}case 8:{j=9;break}case 13:{j=10;break}case 14:{Nq(a,k,i,70,0);Lq(a,k,i,69,0);d=0;e=k;break}case 12:{Nq(a,k,i,72,0);Lq(a,k,i,69,0);d=0;e=k;break}default:{Lq(a,k,i,71,0);Nq(a,k,i,70,0);d=0;e=k}}if((j|0)==9){Nq(a,k,i,72,1);Lq(a,k,i,69,1);j=10}if((j|0)==10){Lq(a,k,i,69,0);Nq(a,k,i,70,0);d=0;e=k}while(1){if((d|0)>=(i|0)){d=1;break a}g=c[e+16>>2]|0;j=c[(c[(c[e+20>>2]|0)+16>>2]|0)+132>>2]|0;h[j>>3]=+(c[e+12>>2]|0)*1.3888888888888887e-03;h[j+8>>3]=+(g|0)*1.3888888888888887e-03;d=d+1|0;e=e+48|0}}while(0);D_(k);l=m;return d|0}function Iq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,l=0.0,m=0.0;f=c[b+16>>2]|0;k=c[f+132>>2]|0;l=+h[k>>3]*720.0;j=~~(l+(l>=0.0?.5:-.5));l=+h[k+8>>3]*720.0;k=~~(l+(l>=0.0?.5:-.5));if(!(a[e+8>>0]|0)){m=+h[f+32>>3]*72.0*(+g[e>>2]*5.0);l=+h[f+40>>3]*72.0*(+g[e+4>>2]*5.0);i=~~(m+(m>=0.0?.5:-.5));f=~~(l+(l>=0.0?.5:-.5))}else{l=+h[f+32>>3]*36.0;m=+h[f+40>>3]*36.0;i=~~((+g[e>>2]+ +(~~(l+(l>=0.0?.5:-.5))|0))*10.0);f=~~((+g[e+4>>2]+ +(~~(m+(m>=0.0?.5:-.5))|0))*10.0)}c[d+12>>2]=j;c[d+16>>2]=k;c[d+20>>2]=b;c[d+32>>2]=j-i;c[d+36>>2]=k-f;c[d+40>>2]=i+j;c[d+44>>2]=f+k;return}function Jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=b+-1|0;d=0;a:while(1){if((d|0)>=(k|0)){a=0;break}j=a+48|0;d=d+1|0;g=a+32|0;h=a+40|0;i=a+36|0;f=a+44|0;a=j;e=d;while(1){if((e|0)>=(b|0)){a=j;continue a}if((((c[g>>2]|0)<=(c[a+40>>2]|0)?(c[a+32>>2]|0)<=(c[h>>2]|0):0)?(c[i>>2]|0)<=(c[a+44>>2]|0):0)?(c[a+36>>2]|0)<=(c[f>>2]|0):0){a=1;break a}a=a+48|0;e=e+1|0}}return a|0}function Kq(a,b){a=a|0;b=b|0;if((c[a+36>>2]|0)>(c[b+44>>2]|0))a=0;else a=(c[b+36>>2]|0)<=(c[a+44>>2]|0)&1;return a|0}function Lq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Cw(18064,c[4558]|0)|0;g=b;h=0;while(1){if((h|0)>=(d|0))break;c[g+8>>2]=c[g+12>>2];nb[c[i>>2]&63](i,g,1)|0;g=g+48|0;h=h+1|0}if(!f)h=Tq(a,i,e,73)|0;else h=Sq(i,e,73)|0;fI(h,2,2147483647)|0;g=0;while(1){if((g|0)>=(d|0))break;f=b+12|0;a=c[(c[(c[b+24>>2]|0)+16>>2]|0)+232>>2]|0;e=a-(c[f>>2]|0)|0;c[f>>2]=a;f=b+32|0;c[f>>2]=(c[f>>2]|0)+e;f=b+40|0;c[f>>2]=(c[f>>2]|0)+e;b=b+48|0;g=g+1|0}Uq(h);yw(i)|0;return}function Mq(a,b){a=a|0;b=b|0;if((c[a+32>>2]|0)>(c[b+40>>2]|0))a=0;else a=(c[b+32>>2]|0)<=(c[a+40>>2]|0)&1;return a|0}function Nq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Cw(18064,c[4558]|0)|0;g=b;h=0;while(1){if((h|0)>=(d|0))break;c[g+8>>2]=c[g+16>>2];nb[c[i>>2]&63](i,g,1)|0;g=g+48|0;h=h+1|0}if(!f)h=Tq(a,i,e,74)|0;else h=Sq(i,e,74)|0;fI(h,2,2147483647)|0;g=0;while(1){if((g|0)>=(d|0))break;f=b+16|0;a=c[(c[(c[b+24>>2]|0)+16>>2]|0)+232>>2]|0;e=a-(c[f>>2]|0)|0;c[f>>2]=a;f=b+36|0;c[f>>2]=(c[f>>2]|0)+e;f=b+44|0;c[f>>2]=(c[f>>2]|0)+e;b=b+48|0;g=g+1|0}Uq(h);yw(i)|0;return}function Oq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=b+32|0;if((c[a+36>>2]|0)<=(c[b+44>>2]|0)?(c[b+36>>2]|0)<=(c[a+44>>2]|0):0)if((c[a+40>>2]|0)<(c[e>>2]|0))a=1;else{g=Rq(d,e)|0;g=g-(c[b+12>>2]|0)+(c[a+12>>2]|0)|0;b=c[b+16>>2]|0;a=c[a+16>>2]|0;f=(b|0)<(a|0);e=Qq(d,e)|0;a=(g|0)<=(e-(f?a:b)+(f?b:a)|0)&1}else a=0;return a|0}function Pq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=b+32|0;if((c[d>>2]|0)<=(c[b+40>>2]|0)?(c[e>>2]|0)<=(c[a+40>>2]|0):0)if((c[a+44>>2]|0)<(c[b+36>>2]|0))a=1;else{g=Qq(d,e)|0;g=g-(c[b+16>>2]|0)+(c[a+16>>2]|0)|0;b=c[b+12>>2]|0;a=c[a+12>>2]|0;f=(b|0)<(a|0);e=Rq(d,e)|0;a=(g|0)<=(e-(f?a:b)+(f?b:a)|0)&1}else a=0;return a|0}function Qq(a,b){a=a|0;b=b|0;return ((c[a+12>>2]|0)-(c[a+4>>2]|0)+(c[b+12>>2]|0)-(c[b+4>>2]|0)|0)/2|0|0}function Rq(a,b){a=a|0;b=b|0;return ((c[a+8>>2]|0)-(c[a>>2]|0)+(c[b+8>>2]|0)-(c[b>>2]|0)|0)/2|0|0}function Sq(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;v=x;a[v>>0]=a[18484]|0;a[v+1>>0]=a[18485]|0;a[v+2>>0]=a[18486]|0;a[v+3>>0]=a[18487]|0;w=Xx(92103,v,0)|0;Az(w,134401,280,1)|0;g=Aw(d)|0;h=-2147483647;u=0;while(1){if(!g)break;s=c[g+8>>2]|0;t=u+((h|0)!=(s|0)&1)|0;g=c[g>>2]|0;h=s;u=t}s=w+16|0;t=(u<<3)+-4|0;n=0;j=0;g=0;h=0;m=0;r=Aw(d)|0;i=-2147483647;while(1){if(!r)break;q=c[r+8>>2]|0;if((i|0)!=(q|0)){p=az(w,ry(c[r+20>>2]|0)|0,1)|0;Az(p,134365,304,1)|0;o=p+16|0;g=c[o>>2]|0;c[g+112>>2]=r;if(!h){c[(c[s>>2]|0)+192>>2]=p;n=p}else{c[(c[n+16>>2]|0)+164>>2]=p;n=h}c[g+176>>2]=0;k=j+1|0;i=uH(k<<2)|0;c[(c[o>>2]|0)+172>>2]=i;if(!m){j=k;k=p;m=p;g=p;h=n;i=q}else{i=m+16|0;c[(c[i>>2]|0)+184>>2]=0;j=uH((m|0)==(n|0)?t:u-j<<2)|0;c[(c[i>>2]|0)+180>>2]=j;j=Rx(w,m,p,0,1)|0;Az(j,134378,176,1)|0;g=c[j+16>>2]|0;b[g+170>>1]=10;c[g+156>>2]=1;g=c[i>>2]|0;h=c[g+180>>2]|0;if(!h)g=vH((c[g+184>>2]<<2)+8|0)|0;else g=xH(h,(c[g+184>>2]<<2)+8|0)|0;m=c[i>>2]|0;c[m+180>>2]=g;m=m+184|0;h=c[m>>2]|0;c[m>>2]=h+1;c[g+(h<<2)>>2]=j;g=c[i>>2]|0;c[(c[g+180>>2]|0)+(c[g+184>>2]<<2)>>2]=0;g=c[o>>2]|0;h=c[g+172>>2]|0;if(!h)g=vH((c[g+176>>2]<<2)+8|0)|0;else g=xH(h,(c[g+176>>2]<<2)+8|0)|0;h=c[o>>2]|0;c[h+172>>2]=g;h=h+176|0;m=c[h>>2]|0;c[h>>2]=m+1;c[g+(m<<2)>>2]=j;j=c[o>>2]|0;c[(c[j+172>>2]|0)+(c[j+176>>2]<<2)>>2]=0;j=k;k=p;m=p;g=p;h=n;i=q}}else{k=g;g=n}c[r+24>>2]=k;n=g;g=k;r=c[r>>2]|0}m=m+16|0;c[(c[m>>2]|0)+184>>2]=0;g=uH(4)|0;c[(c[m>>2]|0)+180>>2]=g;a[v>>0]=a[18484]|0;a[v+1>>0]=a[18485]|0;a[v+2>>0]=a[18486]|0;a[v+3>>0]=a[18487]|0;m=Xx(92150,v,0)|0;g=Aw(d)|0;while(1){if(!g)break;v=az(m,ry(c[g+20>>2]|0)|0,1)|0;Az(v,134365,304,1)|0;c[g+28>>2]=v;c[(c[v+16>>2]|0)+112>>2]=g;g=c[g>>2]|0}g=0;k=Aw(d)|0;h=-2147483647;a:while(1){if(!k)break;j=c[k+8>>2]|0;b:do if((h|0)==(j|0))j=h;else{g=k;while(1){g=c[g>>2]|0;if(!g)break a;if((c[g+8>>2]|0)!=(j|0))break b}}while(0);i=k+28|0;h=g;while(1){if(!h)break;if(lb[e&127](k,h)|0)Rx(m,c[i>>2]|0,c[h+28>>2]|0,0,1)|0;h=c[h>>2]|0}k=c[k>>2]|0;h=j}Vq(m,w,f);$x(m)|0;l=x;return w|0}function Tq(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+16|0;r=s;a[r>>0]=a[18484]|0;a[r+1>>0]=a[18485]|0;a[r+2>>0]=a[18486]|0;a[r+3>>0]=a[18487]|0;r=Xx(92103,r,0)|0;Az(r,134401,280,1)|0;k=r+16|0;h=Aw(e)|0;i=0;while(1){if(!h)break;j=az(r,ry(c[h+20>>2]|0)|0,1)|0;Az(j,134365,304,1)|0;p=j+16|0;n=c[p>>2]|0;c[n+112>>2]=h;c[h+24>>2]=j;c[n+176>>2]=0;n=uH(4)|0;o=c[p>>2]|0;c[o+172>>2]=n;c[o+184>>2]=0;o=uH(4)|0;c[(c[p>>2]|0)+180>>2]=o;if(!i)c[(c[k>>2]|0)+192>>2]=j;else c[(c[i+16>>2]|0)+164>>2]=j;h=c[h>>2]|0;i=j}m=Aw(e)|0;a:while(1){if(!m)break;n=m+32|0;o=m+24|0;p=m+20|0;h=m;while(1){h=c[h>>2]|0;if(!h)break;if(lb[f&127](m,h)|0){i=lb[g&127](n,h+32|0)|0;j=Rx(r,c[o>>2]|0,c[h+24>>2]|0,0,1)|0;Az(j,134378,176,1)|0;if((i|0)>=65536){q=13;break a}k=j+16|0;t=c[k>>2]|0;b[t+170>>1]=i;c[t+156>>2]=1;if(j|0?Rx(d,c[p>>2]|0,c[h+20>>2]|0,0,0)|0:0)c[(c[k>>2]|0)+156>>2]=100}}m=c[m>>2]|0}if((q|0)==13)qa(92106,92122,254,92135);m=Aw(e)|0;while(1){if(!m)break;k=c[m+24>>2]|0;n=k+16|0;k=Ex(r,k)|0;while(1){if(!k)break;h=c[n>>2]|0;i=c[h+180>>2]|0;if(!i)h=vH((c[h+184>>2]<<2)+8|0)|0;else h=xH(i,(c[h+184>>2]<<2)+8|0)|0;i=c[n>>2]|0;c[i+180>>2]=h;i=i+184|0;j=c[i>>2]|0;c[i>>2]=j+1;c[h+(j<<2)>>2]=k;j=c[n>>2]|0;c[(c[j+180>>2]|0)+(c[j+184>>2]<<2)>>2]=0;j=k+-48|0;h=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;i=c[h+172>>2]|0;if(!i)h=vH((c[h+176>>2]<<2)+8|0)|0;else h=xH(i,(c[h+176>>2]<<2)+8|0)|0;c[(c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0)+172>>2]=h;g=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;q=c[g+172>>2]|0;g=g+176|0;t=c[g>>2]|0;c[g>>2]=t+1;c[q+(t<<2)>>2]=k;t=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;c[(c[t+172>>2]|0)+(c[t+176>>2]<<2)>>2]=0;k=Gx(r,k)|0}m=c[m>>2]|0}l=s;return r|0}function Uq(a){a=a|0;var b=0,d=0,e=0,f=0;f=Sy(a)|0;while(1){if(!f)break;d=f+16|0;b=c[d>>2]|0;e=c[b+172>>2]|0;if(e){D_(e);b=c[d>>2]|0}b=c[b+180>>2]|0;if(b|0)D_(b);f=Ty(a,f)|0}$x(a)|0;return}function Vq(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=Sy(a)|0;while(1){if(!k)break;n=c[(c[k+16>>2]|0)+112>>2]|0;m=c[n+24>>2]|0;n=n+32|0;o=m+16|0;l=Ex(a,k)|0;while(1){if(!l)break;h=c[(c[(c[((c[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;p=lb[e&127](n,h+32|0)|0;h=c[h+24>>2]|0;i=Rx(d,m,h,0,1)|0;Az(i,134378,176,1)|0;j=i+16|0;f=c[j>>2]|0;c[f+156>>2]=1;g=b[f+170>>1]|0;if((p|0)>(g&65535|0)){if(!(g<<16>>16)){f=c[o>>2]|0;g=c[f+180>>2]|0;if(!g)f=vH((c[f+184>>2]<<2)+8|0)|0;else f=xH(g,(c[f+184>>2]<<2)+8|0)|0;q=c[o>>2]|0;c[q+180>>2]=f;q=q+184|0;g=c[q>>2]|0;c[q>>2]=g+1;c[f+(g<<2)>>2]=i;f=c[o>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;h=h+16|0;f=c[h>>2]|0;g=c[f+172>>2]|0;if(!g)f=vH((c[f+176>>2]<<2)+8|0)|0;else f=xH(g,(c[f+176>>2]<<2)+8|0)|0;g=c[h>>2]|0;c[g+172>>2]=f;g=g+176|0;q=c[g>>2]|0;c[g>>2]=q+1;c[f+(q<<2)>>2]=i;f=c[h>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;f=c[j>>2]|0}b[f+170>>1]=p}l=Gx(a,l)|0}k=Ty(a,k)|0}return}function Wq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function Xq(b,d){b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;u=y+24|0;s=y+16|0;r=y+52|0;q=y+40|0;t=y;w=ay(b)|0;x=vH(w*72|0)|0;qq(q,b);k=+g[q>>2];m=+g[q+4>>2];q=(a[q+8>>0]|0)!=0;k=q?k*.013888888888888888:k;m=q?m*.013888888888888888:m;n=k*.5;o=m*.5;e=x;f=Sy(b)|0;while(1){if(!f)break;p=c[f+16>>2]|0;i=+h[p+32>>3];if(q){j=+h[p+40>>3]*.5+m;i=i*.5+k}else{j=o*+h[p+40>>3];i=n*i}p=c[p+132>>2]|0;A=+h[p>>3];h[e>>3]=A;z=+h[p+8>>3];h[e+8>>3]=z;h[e+16>>3]=A-i;h[e+24>>3]=z-j;h[e+32>>3]=A+i;h[e+40>>3]=z+j;h[e+48>>3]=i;h[e+56>>3]=j;c[e+64>>2]=f;e=e+72|0;f=Ty(b,f)|0}do if((d|0)<0){i=+Yq(x,w);if(i==0.0){D_(x);e=0;break}if(!0){k=i;j=i;v=19}else{v=c[15686]|0;h[s>>3]=i;g1(v,92153,s)|0;k=i;j=i;v=19}}else{f=Zq(x,w,r)|0;e=c[r>>2]|0;if(!e){D_(f);D_(x);e=0;break}if(!d){$q(t,f,e);i=+h[t>>3];j=+h[t+8>>3]}else{j=+_q(f,e);i=j}D_(f);if(!0){k=i;v=19}else{v=c[15686]|0;h[u>>3]=i;h[u+8>>3]=j;g1(v,92167,u)|0;k=i;v=19}}while(0);if((v|0)==19){e=0;f=x;while(1){if((e|0)>=(w|0))break;v=c[(c[(c[f+64>>2]|0)+16>>2]|0)+132>>2]|0;h[v>>3]=+h[f>>3]*k;h[v+8>>3]=+h[f+8>>3]*j;e=e+1|0;f=f+72|0}D_(x);e=1}l=y;return e|0}function Yq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=0.0;d=0;a:while(1){if((d|0)>=(b|0))break;r=a+72|0;d=d+1|0;m=a+16|0;n=a+8|0;o=a+56|0;p=a+48|0;q=a+32|0;k=a+24|0;l=a+40|0;i=d;j=r;while(1){if((i|0)>=(b|0)){a=r;continue a}if(((+h[m>>3]<=+h[j+32>>3]?+h[j+16>>3]<=+h[q>>3]:0)?+h[k>>3]<=+h[j+40>>3]:0)?+h[j+24>>3]<=+h[l>>3]:0){c=0.0;break a}e=+h[a>>3];f=+h[j>>3];if(e==f)g=t;else{g=+B(+(e-f));g=(+h[j+48>>3]+ +h[p>>3])/g}e=+h[n>>3];f=+h[j+8>>3];if(e==f)e=t;else{e=+B(+(e-f));e=(+h[j+56>>3]+ +h[o>>3])/e}g=ec?g:c}}return +c}function Zq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;k=vH((b<<4)+16|0)|0;m=0;e=0;n=k;o=b;i=k;a:while(1){if((e|0)>=(b|0))break;z=a+72|0;e=e+1|0;y=a+16|0;r=a+32|0;s=a+24|0;u=a+40|0;v=a+8|0;w=a+56|0;x=a+48|0;p=e;q=z;l=i;while(1){if((p|0)==(b|0)){a=z;i=l;continue a}if(((+h[y>>3]<=+h[q+32>>3]?+h[q+16>>3]<=+h[r>>3]:0)?+h[s>>3]<=+h[q+40>>3]:0)?+h[q+24>>3]<=+h[u>>3]:0){i=o+b|0;if((m|0)==(o|0)){k=xH(k,(i<<4)+16|0)|0;n=k;l=k}else i=o;f=+h[a>>3];g=+h[q>>3];if(!(f==g)){f=(+h[q+48>>3]+ +h[x>>3])/+B(+(f-g));if(f<1.0){f=1.0;A=13}}else{f=t;A=13}if((A|0)==13)A=0;g=+h[v>>3];j=+h[q+8>>3];if(!(g==j)){g=(+h[q+56>>3]+ +h[w>>3])/+B(+(g-j));if(g<1.0){g=1.0;A=16}}else{g=t;A=16}if((A|0)==16)A=0;m=m+1|0;h[n+(m<<4)>>3]=f;h[n+(m<<4)+8>>3]=g}else i=o;p=p+1|0;q=q+72|0;o=i}}A=xH(i,(m<<4)+16|0)|0;c[d>>2]=m;return A|0}function _q(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0.0;d=1;e=0.0;while(1){c=a+16|0;if((d|0)>(b|0))break;g=+h[c>>3];f=+h[a+24>>3];f=ge?f:e;a=c}return +e}function $q(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0,g=0,i=0.0;h[b>>3]=1.0;h[b+8>>3]=t;_0(b+16|0,c,16,75);g=vH((c<<4)+16|0)|0;h[g+(c<<4)>>3]=+h[b+(c<<4)>>3];f=c;d=1.0;while(1){h[g+(f<<4)+8>>3]=d;e=f+-1|0;if((f|0)<=0){d=t;e=0;f=0;break}h[g+(e<<4)>>3]=+h[b+(e<<4)>>3];i=+h[(+h[b+(f<<4)+8>>3]>d?b:g)+(f<<4)+8>>3];f=e;d=i}while(1){if((f|0)>(c|0))break;i=+h[g+(f<<4)+8>>3]*+h[g+(f<<4)>>3];b=i>3];h[a>>3]=+h[g+(e<<4)>>3];h[a+8>>3]=i;return}else qa(92184,92122,832,92204)}function ar(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3];d=+h[b>>3];if(!(cd)){d=+h[a+8>>3];c=+h[b+8>>3];if(dc&1}else a=1;else a=-1;return a|0}function br(a){a=a|0;var b=0;if(a|0){b=c[a+4>>2]|0;if(b|0)D_(b);b=c[a+8>>2]|0;if(b|0)D_(b);b=c[a+16>>2]|0;if(b|0)D_(b);D_(a)}return}function cr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;k=F_(c[46079]|0,d<<2)|0;c[46079]=k;f=0;while(1){if((f|0)>=(d|0))break;c[e+(f<<2)>>2]=2147483647;f=f+1|0}c[e+(a<<2)>>2]=0;h=b+(a*20|0)|0;i=b+(a*20|0)+8|0;j=b+(a*20|0)+4|0;f=1;while(1){if((f|0)>=(c[h>>2]|0))break;c[e+(c[(c[j>>2]|0)+(f<<2)>>2]<<2)>>2]=~~+g[(c[i>>2]|0)+(f<<2)>>2];f=f+1|0}dr(n,a,k,e,d);i=-2147483639;while(1){if(!((er(n,m,c[46079]|0,e)|0)<<24>>24)){f=0;break}f=c[m>>2]|0;a=c[e+(f<<2)>>2]|0;if((a|0)==2147483647){f=0;break}i=b+(f*20|0)|0;j=b+(f*20|0)+4|0;h=b+(f*20|0)+8|0;f=1;while(1){if((f|0)>=(c[i>>2]|0))break;fr(n,c[(c[j>>2]|0)+(f<<2)>>2]|0,a+~~+g[(c[h>>2]|0)+(f<<2)>>2]|0,c[46079]|0,e);f=f+1|0}i=a+10|0}while(1){if((f|0)>=(d|0))break;h=e+(f<<2)|0;if((c[h>>2]|0)==2147483647)c[h>>2]=i;f=f+1|0}gr(n);l=o;return}function dr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if((f|0)==1)i=0;else i=vH((f<<2)+-4|0)|0;c[a>>2]=i;j=f+-1|0;c[a+4>>2]=j;g=0;h=0;while(1){if((h|0)>=(f|0))break;if((h|0)!=(b|0)){c[i+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}h=h+1|0}g=(j|0)/2|0;while(1){if((g|0)<=-1)break;hr(a,g,d,e);g=g+-1|0}return}function er(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+4|0;if(!(c[f>>2]|0))a=0;else{g=c[a>>2]|0;c[b>>2]=c[g>>2];b=c[g+((c[f>>2]|0)+-1<<2)>>2]|0;c[g>>2]=b;c[d+(b<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+-1;hr(a,0,d,e);a=1}return a|0}function fr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+(b<<2)|0;if((c[g>>2]|0)>(d|0)){j=e+(b<<2)|0;i=c[j>>2]|0;c[g>>2]=d;g=c[a>>2]|0;a=i;while(1){if((a|0)<=0)break;h=a>>>1;i=c[g+(h<<2)>>2]|0;if((c[f+(i<<2)>>2]|0)<=(d|0))break;c[g+(a<<2)>>2]=i;c[e+(i<<2)>>2]=a;a=h}c[g+(a<<2)>>2]=b;c[j>>2]=a}return}function gr(a){a=a|0;a=c[a>>2]|0;if(a|0)D_(a);return}function hr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;while(1){f=b<<1;g=f|1;h=c[i>>2]|0;if(!((f|0)<(h|0)?(j=c[a>>2]|0,(c[e+(c[j+(f<<2)>>2]<<2)>>2]|0)<(c[e+(c[j+(b<<2)>>2]<<2)>>2]|0)):0))f=b;if((g|0)<(h|0)){j=c[a>>2]|0;f=(c[e+(c[j+(g<<2)>>2]<<2)>>2]|0)<(c[e+(c[j+(f<<2)>>2]<<2)>>2]|0)?g:f}if((f|0)==(b|0))break;j=c[a>>2]|0;h=j+(f<<2)|0;g=c[h>>2]|0;j=j+(b<<2)|0;c[h>>2]=c[j>>2];c[j>>2]=g;c[d+(c[h>>2]<<2)>>2]=f;c[d+(c[j>>2]<<2)>>2]=b;b=f}return}function ir(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+8|0;n=p;c[n>>2]=0;o=vH(d<<2)|0;f=0;while(1){if((f|0)>=(d|0))break;g[e+(f<<2)>>2]=3402823466385288598117041.0e14;f=f+1|0}g[e+(a<<2)>>2]=0.0;h=c[b+(a*20|0)>>2]|0;i=b+(a*20|0)+8|0;j=b+(a*20|0)+4|0;f=1;while(1){if((f|0)>=(h|0))break;c[e+(c[(c[j>>2]|0)+(f<<2)>>2]<<2)>>2]=c[(c[i>>2]|0)+(f<<2)>>2];f=f+1|0}jr(m,a,o,e,d);a:while(1){if(!((kr(m,n,o,e)|0)<<24>>24))break;f=c[n>>2]|0;k=+g[e+(f<<2)>>2];if(k==3402823466385288598117041.0e14)break;i=b+(f*20|0)|0;j=b+(f*20|0)+4|0;h=b+(f*20|0)+8|0;f=1;while(1){if((f|0)>=(c[i>>2]|0))continue a;lr(m,c[(c[j>>2]|0)+(f<<2)>>2]|0,+g[(c[h>>2]|0)+(f<<2)>>2]+k,o,e);f=f+1|0}}gr(m);D_(o);l=p;return}function jr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+-1|0;j=vH(i<<2)|0;c[a>>2]=j;c[a+4>>2]=i;g=0;h=0;while(1){if((h|0)>=(f|0))break;if((h|0)!=(b|0)){c[j+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}h=h+1|0}g=(i|0)/2|0;while(1){if((g|0)<=-1)break;mr(a,g,d,e);g=g+-1|0}return}function kr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+4|0;if(!(c[f>>2]|0))a=0;else{g=c[a>>2]|0;c[b>>2]=c[g>>2];b=c[g+((c[f>>2]|0)+-1<<2)>>2]|0;c[g>>2]=b;c[d+(b<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+-1;mr(a,0,d,e);a=1}return a|0}function lr(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0;h=f+(b<<2)|0;if(!(+g[h>>2]<=d)){k=e+(b<<2)|0;j=c[k>>2]|0;g[h>>2]=d;h=c[a>>2]|0;a=j;while(1){if((a|0)<=0)break;i=a>>>1;j=c[h+(i<<2)>>2]|0;if(!(+g[f+(j<<2)>>2]>d))break;c[h+(a<<2)>>2]=j;c[e+(j<<2)>>2]=a;a=i}c[h+(a<<2)>>2]=b;c[k>>2]=a}return}function mr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0;j=a+4|0;while(1){f=b<<1;h=f|1;i=c[j>>2]|0;if(!((f|0)<(i|0)?(k=c[a>>2]|0,+g[e+(c[k+(f<<2)>>2]<<2)>>2]<+g[e+(c[k+(b<<2)>>2]<<2)>>2]):0))f=b;if((h|0)<(i|0)?(k=c[a>>2]|0,+g[e+(c[k+(h<<2)>>2]<<2)>>2]<+g[e+(c[k+(f<<2)>>2]<<2)>>2]):0)f=h;if((f|0)==(b|0))break;k=c[a>>2]|0;i=k+(f<<2)|0;h=c[i>>2]|0;k=k+(b<<2)|0;c[i>>2]=c[k>>2];c[k>>2]=h;c[d+(c[i>>2]<<2)>>2]=f;c[d+(c[k>>2]<<2)>>2]=b;b=f}return}function nr(){gt(184320,48);c[46083]=0;return}function or(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0;i=it(184320)|0;c[i+32>>2]=a;c[i+36>>2]=b;Pt(a);Pt(b);c[i+24>>2]=0;c[i+28>>2]=0;f=+h[a>>3];g=+h[b>>3]-f;e=+h[a+8>>3];d=+h[b+8>>3]-e;f=d*e+g*f+(d*d+g*g)*.5;b=i+16|0;h[b>>3]=f;if((g>0.0?g:-g)>(d>0.0?d:-d)){h[i>>3]=1.0;e=d/g;d=g;a=i+8|0}else{h[i+8>>3]=1.0;e=g/d;a=i}h[a>>3]=e;h[b>>3]=f/d;b=c[46083]|0;c[i+40>>2]=b;c[46083]=b+1;return i|0}function pr(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;l=+h[a>>3];a:do if(l==1.0){if(!(+h[a+8>>3]>=0.0)){b=c[a+28>>2]|0;d=c[a+24>>2]|0;if(!d)m=9;else m=5}else{b=c[a+24>>2]|0;d=c[a+28>>2]|0;if(!d)m=9;else m=5}do if((m|0)==5){e=+h[d+8>>3];if(e>+h[22881])break a;f=+h[22882];if(!(e>=f)){i=f;e=+h[a+16>>3]-+h[a+8>>3]*f;break}else{i=e;e=+h[d>>3];break}}else if((m|0)==9){f=+h[22882];i=f;e=+h[a+16>>3]-+h[a+8>>3]*f}while(0);do if(b){g=+h[b+8>>3];if(g>3]-+h[a+8>>3]*f;break}else{f=+h[b>>3];break}}else{f=+h[22881];g=f;f=+h[a+16>>3]-+h[a+8>>3]*f}while(0);j=+h[22883];b=e>j;d=f>j;k=+h[22884];if(!(b&d|e>3]-j)/+h[a+8>>3];e=j}if(e>3]-k)/+h[a+8>>3];e=k}if(d){g=(+h[a+16>>3]-j)/+h[a+8>>3];f=j}if(f>3]-k)/+h[a+8>>3];f=k;m=46}else m=46}}else{d=c[a+28>>2]|0;b=c[a+24>>2]|0;do if(b){e=+h[b>>3];if(e>+h[22883])break a;g=+h[22884];if(!(e>=g)){i=+h[a+16>>3]-g*l;e=g;break}else{i=+h[b+8>>3];break}}else{g=+h[22884];i=+h[a+16>>3]-g*l;e=g}while(0);do if(d){f=+h[d>>3];if(f>3]-l*j;f=j;break}else{g=+h[d+8>>3];break}}else{f=+h[22883];g=+h[a+16>>3]-l*f}while(0);j=+h[22881];b=i>j;d=g>j;k=+h[22882];if(!(b&d|i>3]-j)/l}if(i>3]-k)/l}if(d){g=j;f=(+h[a+16>>3]-j)/l}if(g>3]-k)/l;m=46}else m=46}}while(0);if((m|0)==46)qr(a,e,i,f,g);return}function qr(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=+f;var g=0;g=a+32|0;Xr(c[g>>2]|0,b,d);Xr(c[g>>2]|0,e,f);a=a+36|0;Xr(c[a>>2]|0,b,d);Xr(c[a>>2]|0,e,f);return}function rr(a,b,d){a=a|0;b=b|0;d=d|0;c[a+24+(b<<2)>>2]=d;Pt(d);if(c[a+24+(1-b<<2)>>2]|0){pr(a);Ot(c[a+32>>2]|0);Ot(c[a+36>>2]|0);jt(a,184320)}return}function sr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;o=p;m=b<<2;h=vH(O(m,d)|0)|0;g=c[e>>2]|0;m=vH(m)|0;n=c[a+8>>2]|0;if(g|0){D_(c[g>>2]|0);D_(g)}k=vH(d<<2)|0;c[e>>2]=k;g=0;while(1){if((g|0)>=(d|0))break;c[k+(g<<2)>>2]=h+((O(g,b)|0)<<2);g=g+1|0}j=(f|0)!=0;if(j)es(a,b);e=(g2()|0)%(b|0)|0;zq(o,b);g=c[k>>2]|0;if(j){cr(e,a,b,g);f=0;g=0}else{vq(e,a,b,g,o);f=0;g=0}while(1){if((g|0)>=(b|0)){i=1;break}h=c[(c[k>>2]|0)+(g<<2)>>2]|0;c[m+(g<<2)>>2]=h;i=(h|0)>(f|0);f=i?h:f;e=i?g:e;g=g+1|0}while(1){if((i|0)>=(d|0))break;h=k+(i<<2)|0;g=c[h>>2]|0;if(j){cr(e,a,b,g);g=0;f=0}else{vq(e,a,b,g,o);g=0;f=0}while(1){if((g|0)>=(b|0))break;s=m+(g<<2)|0;q=c[s>>2]|0;r=c[(c[h>>2]|0)+(g<<2)>>2]|0;r=(q|0)<(r|0)?q:r;c[s>>2]=r;s=(r|0)>(f|0);q=s?g:e;g=g+1|0;f=s?r:f;e=q}i=i+1|0}D_(m);if(j)fs(a,b,n);l=p;return}function tr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0.0,j=0,k=0;i=1.0/+(b|0);h=0;while(1){if((h|0)>=(d|0))break;j=a+(h<<2)|0;e=0.0;f=0;while(1){if((f|0)>=(b|0))break;e=e+ +(c[(c[j>>2]|0)+(f<<2)>>2]|0);f=f+1|0}g=~~(e*i);f=0;while(1){if((f|0)>=(b|0))break;k=(c[j>>2]|0)+(f<<2)|0;c[k>>2]=(c[k>>2]|0)-g;f=f+1|0}h=h+1|0}return}function ur(){c[46085]=~~+C(+(+((c[46084]|0)+4|0)));return}function vr(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(d*d+c*c)}function wr(a,b,c){a=a|0;b=b|0;c=c|0;h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=+h[b+8>>3]-+h[c+8>>3];return}function xr(a,b,c){a=a|0;b=b|0;c=c|0;h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=+h[c+8>>3]+ +h[b+8>>3];return}function yr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return +((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))}function zr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[h+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=+yr(h,g,f)>0.0&1;l=e;return d|0}function Ar(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;o=+h[a>>3];p=+h[d+8>>3];q=+h[c+8>>3];m=(p-q)*o;n=+h[b>>3];l=+h[d>>3];k=+h[b+8>>3];i=+h[a+8>>3];j=k-i;f=+h[c>>3];g=m+n*(q-p)+j*l+f*(i-k);if(g==0.0)d=0;else{p=(f*(i-p)+m+(q-i)*l)/g;q=-(f*j+((q-k)*o+(i-q)*n))/g;h[e>>3]=p*(n-o)+o;h[e+8>>3]=j*p+i;d=q<=1.0&(q>=0.0&(p>=0.0&p<=1.0))&1}return d|0}function Br(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0.0,i=0;c[a+20>>2]=b;Pt(b);i=a+24|0;h[i>>3]=+h[b+8>>3]+d;e=c[46086]|0;e=e+((Cr(a)|0)*40|0)|0;while(1){f=e+32|0;e=c[f>>2]|0;if(!e)break;d=+h[i>>3];g=+h[e+24>>3];if(d>g)continue;if(!(d==g))break;if(!(+h[b>>3]>+h[c[e+20>>2]>>3]))break}c[a+32>>2]=e;c[f>>2]=a;c[46087]=(c[46087]|0)+1;return}function Cr(a){a=a|0;var b=0.0,d=0,e=0.0;d=c[46088]|0;e=+(d|0);b=(+h[a+24>>3]-+h[22888])/+h[22890]*e;do if(!(b<0.0))if(!(b>=e)){a=~~b;break}else{a=d+-1|0;break}else a=0;while(0);if((a|0)<(c[46089]|0))c[46089]=a;return a|0}function Dr(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;if(c[d>>2]|0){b=c[46086]|0;b=b+((Cr(a)|0)*40|0)|0;do{e=b+32|0;b=c[e>>2]|0}while((b|0)!=(a|0));c[e>>2]=c[a+32>>2];c[46087]=(c[46087]|0)+-1;Ot(c[d>>2]|0);c[d>>2]=0}return}function Er(){return (c[46087]|0)==0|0}function Fr(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=c[46086]|0;d=c[46089]|0;while(1){e=c[b+(d*40|0)+32>>2]|0;if(e|0)break;e=d+1|0;c[46089]=e;d=e}f=+h[e+24>>3];h[a>>3]=+h[c[e+20>>2]>>3];h[a+8>>3]=f;return}function Gr(){var a=0,b=0;b=(c[46086]|0)+((c[46089]|0)*40|0)+32|0;a=c[b>>2]|0;c[b>>2]=c[a+32>>2];c[46087]=(c[46087]|0)+-1;return a|0}function Hr(){D_(c[46086]|0);c[46086]=0;return}function Ir(){var a=0,b=0,d=0;c[46087]=0;c[46089]=0;a=c[46085]|0;b=a<<2;c[46088]=b;d=c[46086]|0;if(!d){d=vH(a*160|0)|0;c[46086]=d;b=c[46088]|0}a=0;while(1){if((a|0)>=(b|0))break;c[d+(a*40|0)+32>>2]=0;a=a+1|0}return}function Jr(){gt(184368,40);D_(c[46095]|0);c[46095]=0;return}function Kr(){var a=0,b=0,d=0;gt(184368,40);a=c[46085]|0;b=a<<1;c[46096]=b;d=c[46095]|0;if(!d){d=vH(a<<3)|0;c[46095]=d;b=c[46096]|0}a=0;while(1){if((a|0)>=(b|0))break;c[d+(a<<2)>>2]=0;a=a+1|0}c[46090]=Lr(0,0)|0;c[46091]=Lr(0,0)|0;c[c[46090]>>2]=0;d=c[46091]|0;b=c[46090]|0;c[b+4>>2]=d;c[d>>2]=b;c[(c[46091]|0)+4>>2]=0;d=c[46095]|0;c[d>>2]=c[46090];c[d+((c[46096]|0)+-1<<2)>>2]=c[46091];return}function Lr(b,d){b=b|0;d=d|0;var e=0;e=it(184368)|0;c[e+8>>2]=b;a[e+16>>0]=d;c[e+32>>2]=0;c[e+20>>2]=0;c[e+12>>2]=0;return e|0}function Mr(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0;i=c[b+8>>2]|0;k=c[d+8>>2]|0;do if((!((i|0)==0|(k|0)==0)?(o=c[i+36>>2]|0,e=c[k+36>>2]|0,(o|0)!=(e|0)):0)?(j=+h[i>>3],f=+h[k+8>>3],g=+h[i+8>>3],l=+h[k>>3],m=f*j-l*g,!(m>-1.0e-10&m<1.0e-10)):0){p=+h[i+16>>3];q=+h[k+16>>3];n=(p*f-q*g)/m;j=(q*j-p*l)/m;f=+h[o+8>>3];g=+h[e+8>>3];do if(f>3]<+h[e>>3]:0){e=o;break}b=d}while(0);b=a[b+16>>0]|0;if(!(n>=+h[e>>3])){if(b<<24>>24==1){b=0;break}}else if(!(b<<24>>24)){b=0;break}b=Lt()|0;c[b+20>>2]=0;h[b>>3]=n;h[b+8>>3]=j}else b=0;while(0);return b|0}function Nr(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0.0,p=0;n=c[b+8>>2]|0;k=c[n+36>>2]|0;l=+h[d>>3];o=+h[k>>3];m=l>o;p=a[b+16>>0]|0;if(m)if(!(p<<24>>24))b=1;else f=4;else if(p<<24>>24==1)b=0;else f=4;if((f|0)==4){e=+h[n>>3];a:do if(e==1.0){e=+h[d+8>>3];g=e-+h[k+8>>3];i=l-o;j=+h[n+8>>3];d=j<0.0;do if(m?j>=0.0:d){if(g>=j*i){b=1;break a}}else{b=j*e+l>+h[n+16>>3];if(d)if(b){b=0;break a}else break;else if(b)break;else{b=0;break a}}while(0);o=o-+h[c[n+32>>2]>>3];b=j*(i*i-g*g)>3]-l*e;j=+h[d+8>>3]-i;o=l-o;l=i-+h[k+8>>3];b=j*j>l*l+o*o}while(0);b=(b^p<<24>>24!=0)&1}return b|0}function Or(a,b){a=a|0;b=b|0;c[b>>2]=a;a=a+4|0;c[b+4>>2]=c[a>>2];c[c[a>>2]>>2]=b;c[a>>2]=b;return}function Pr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[46096]|0;b=~~((+h[a>>3]-+h[22887])/+h[22889]*+(f|0));b=(b|0)>0?b:0;f=(b|0)<(f|0)?b:f+-1|0;b=Qr(f)|0;if(!b){d=1;while(1){b=Qr(f-d|0)|0;if(b|0)break;b=Qr(d+f|0)|0;if(b|0)break;d=d+1|0}c[46097]=(c[46097]|0)+d}c[46098]=(c[46098]|0)+1;e=c[46090]|0;d=c[46091]|0;a:do if((b|0)==(e|0))g=9;else{if((b|0)!=(d|0)?(Nr(b,a)|0)!=0:0){g=9;break}while(1){b=c[b>>2]|0;if((b|0)==(e|0))break a;if(Nr(b,a)|0){e=b;break}}}while(0);if((g|0)==9){while(1){b=c[b+4>>2]|0;if((b|0)==(d|0))break;if(!(Nr(b,a)|0))break;else g=9}e=c[b>>2]|0}if((f|0)>0?(f|0)<((c[46096]|0)+-1|0):0){b=(c[46095]|0)+(f<<2)|0;d=c[b>>2]|0;if(d|0){g=d+12|0;c[g>>2]=(c[g>>2]|0)+-1}c[b>>2]=e;g=e+12|0;c[g>>2]=(c[g>>2]|0)+1}return e|0}function Qr(a){a=a|0;var b=0,d=0;if((a|0)>-1&(c[46096]|0)>(a|0)?(d=(c[46095]|0)+(a<<2)|0,b=c[d>>2]|0,(b|0)!=0):0){if((c[b+8>>2]|0)==(-2|0)){c[d>>2]=0;a=b+12|0;d=(c[a>>2]|0)+-1|0;c[a>>2]=d;if(!d){jt(b,184368);b=0}else b=0}}else b=0;return b|0}function Rr(a){a=a|0;var b=0,d=0;b=a+4|0;d=c[a>>2]|0;c[d+4>>2]=c[b>>2];c[c[b>>2]>>2]=d;c[a+8>>2]=-2;return}function Sr(a){a=a|0;return c[a+4>>2]|0}function Tr(a){a=a|0;return c[a>>2]|0}function Ur(b){b=b|0;var d=0;d=c[b+8>>2]|0;if(!d)b=184588;else b=(a[b+16>>0]|0)==0?d+32|0:d+36|0;return c[b>>2]|0}function Vr(b){b=b|0;var d=0;d=c[b+8>>2]|0;if(!d)b=184588;else b=(a[b+16>>0]|0)==0?d+36|0:d+32|0;return c[b>>2]|0}function Wr(){gt(184400,24);return}function Xr(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j;g=(c[46099]|0)+((c[a+16>>2]|0)*96|0)+88|0;f=c[g>>2]|0;h[i+8>>3]=b;h[i+16>>3]=d;e=Yr(a,i,f)|0;do if(e|0){if((e|0)<0){i=it(184400)|0;h[i+8>>3]=b;h[i+16>>3]=d;c[i>>2]=f;c[g>>2]=i;break}while(1){e=c[f>>2]|0;g=Yr(a,i,e)|0;if((g|0)>0)f=e;else break}if(g|0){i=it(184400)|0;h[i+8>>3]=b;h[i+16>>3]=d;c[f>>2]=i;c[i>>2]=e}}while(0);l=j;return}function Yr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;do if(c){e=+h[b+8>>3];i=+h[c+8>>3];d=+h[b+16>>3];f=+h[c+16>>3];if(!(e==i&d==f)){k=+h[a>>3];j=e-k;e=+h[a+8>>3];g=d-e;i=i-k;d=f-e;if(!(j>=0.0)){if(i>=0.0){b=1;break}e=d/i;d=g/j;if(de){b=1;break}b=j>i?-1:1;break}if(!(i<0.0)){b=i>0.0;if(!(j>0.0)){if(b){b=!(g<=0.0)?1:-1;break}if(g0.0?-1:1;break}e=d/i;d=g/j;if(de){b=1;break}b=j>2]|0;d=a+(d*20|0)+4|0;b=1;a=0;while(1){if((b|0)>=(f|0))break;g=a+((c[e+(c[(c[d>>2]|0)+(b<<2)>>2]<<2)>>2]|0)>0&1)|0;b=b+1|0;a=g}return a|0}function _r(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+(b*20|0)|0;b=a+(b*20|0)+4|0;a=1;while(1){if((a|0)>=(c[e>>2]|0))break;c[d+(c[(c[b>>2]|0)+(a<<2)>>2]<<2)>>2]=1;a=a+1|0}return}function $r(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+(b*20|0)|0;b=a+(b*20|0)+4|0;a=1;while(1){if((a|0)>=(c[e>>2]|0))break;c[d+(c[(c[b>>2]|0)+(a<<2)>>2]<<2)>>2]=0;a=a+1|0}return}function as(a,b){a=a|0;b=b|0;if(!(c[a+8>>2]|0))a=cs(a,b)|0;else a=bs(a,b)|0;return a|0}function bs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=b<<2;e=vH(O(f,b)|0)|0;f=vH(f)|0;d=0;while(1){if((d|0)>=(b|0)){d=0;break}c[f+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}while(1){if((d|0)>=(b|0))break;cr(d,a,b,c[f+(d<<2)>>2]|0);d=d+1|0}return f|0}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=b<<2;e=vH(O(g,b)|0)|0;g=vH(g)|0;d=0;while(1){if((d|0)>=(b|0))break;c[g+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}zq(f,b);d=0;while(1){if((d|0)>=(b|0))break;vq(d,a,b,c[g+(d<<2)>>2]|0,f);d=d+1|0}Aq(f);l=h;return g|0}function ds(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a+8>>2]|0;es(a,b);d=bs(a,b)|0;fs(a,b,e);return d|0}function es(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=vH(b<<2)|0;d=0;e=0;while(1){if((d|0)>=(b|0))break;k=(c[a+(d*20|0)>>2]|0)+e|0;d=d+1|0;e=k}e=vH(e<<2)|0;d=0;while(1){if((d|0)>=(b|0))break;c[l+(d<<2)>>2]=0;d=d+1|0}f=0;while(1){if((f|0)>=(b|0))break;c[a+(f*20|0)+8>>2]=e;_r(a,f,l);h=a+(f*20|0)|0;i=c[h>>2]|0;j=a+(f*20|0)+4|0;k=i+-2|0;d=1;while(1){if((d|0)>=(i|0))break;m=c[(c[j>>2]|0)+(d<<2)>>2]|0;n=c[a+(m*20|0)>>2]|0;g[e+(d<<2)>>2]=+(k+n-((Zr(a,0,m,l)|0)<<1)|0);d=d+1|0}$r(a,f,l);e=e+(c[h>>2]<<2)|0;f=f+1|0}D_(l);return}function fs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;D_(c[e>>2]|0);c[e>>2]=0;a:do if(d|0){e=0;while(1){if((e|0)>=(b|0))break a;c[a+(e*20|0)+8>>2]=d;f=d+(c[a+(e*20|0)>>2]<<2)|0;e=e+1|0;d=f}}while(0);return}function gs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0;f=0;g=0.0;while(1){if((f|0)>=(b|0))break;j=c[a+(f<<2)>>2]|0;i=+h[j+(d<<3)>>3]-+h[j+(e<<3)>>3];f=f+1|0;g=i*i+g}return +(+C(+g))}function hs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((e|0)>(d|0)){c[46103]=a;_0(b+(d<<2)|0,1-d+e|0,4,76)}return}function is(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[46103]|0;e=+g[f+(c[a>>2]<<2)>>2];d=+g[f+(c[b>>2]<<2)>>2];return (ed&1)|0}function js(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;if((d|0)<(e|0)){ks(a,b,d,e,f);g=c[f>>2]|0;f=g+-1|0;js(a,b,d,f);g=g+1|0;js(a,b,g,e);if(!(ls(a,b,d,f)|0))js(a,b,d,f);if(!(ls(a,b,g,e)|0))js(a,b,g,e)}l=h;return}function ks(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0.0,m=0,n=0;g=g2()|0;g=b+(((((g2()|0)<<16|g)>>>0)%((1-d+e|0)>>>0)|0)+d<<2)|0;j=c[g>>2]|0;k=b+(d<<2)|0;c[g>>2]=c[k>>2];c[k>>2]=j;l=+h[a+(j<<3)>>3];g=d+1|0;d=e;a:while(1){if((g|0)>=(d|0))break;while(1){if((g|0)>=(d|0))break;if(!(+h[a+(c[b+(g<<2)>>2]<<3)>>3]<=l))break;g=g+1|0}while(1){if((g|0)>=(d|0))continue a;e=b+(d<<2)|0;i=c[e>>2]|0;if(!(+h[a+(i<<3)>>3]>l))break;d=d+-1|0}n=b+(g<<2)|0;m=c[n>>2]|0;c[n>>2]=i;c[e>>2]=m;g=g+1|0;d=d+-1|0}n=g+((+h[a+(c[b+(g<<2)>>2]<<3)>>3]>l)<<31>>31)|0;c[f>>2]=n;n=b+(n<<2)|0;c[k>>2]=c[n>>2];c[n>>2]=j;return}function ls(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=1;while(1){f=d+1|0;if(!((d|0)<(e|0)&(g|0)!=0))break;g=+h[a+(c[b+(d<<2)>>2]<<3)>>3]>+h[a+(c[b+(f<<2)>>2]<<3)>>3]?0:g;d=f}return g|0}function ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,A=0.0;x=l;l=l+16|0;v=4;w=C_(40)|0;c[w>>2]=0;t=x;o=0;u=$(23,b*40|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){d=0;r=0;while(1){if((d|0)>=(b|0))break;s=(c[(c[a+(d<<2)>>2]|0)+4>>2]|0)+r|0;d=d+1|0;r=s}o=0;s=$(23,r*24|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){d=0;m=0;while(1){if((m|0)>=(b|0))break;n=u+(m*40|0)|0;c[n>>2]=s+(d*24|0);q=a+(m<<2)|0;f=0;g=1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;j=-1797693134862315708145274.0e284;k=1797693134862315708145274.0e284;while(1){e=c[q>>2]|0;if((f|0)>=(c[e+4>>2]|0))break;e=c[e>>2]|0;A=+h[e+(f<<4)>>3];y=+h[e+(f<<4)+8>>3];h[s+(d*24|0)>>3]=A;h[s+(d*24|0)+8>>3]=y;c[s+(d*24|0)+16>>2]=n;c[s+(d*24|0)+20>>2]=0;f=f+1|0;d=d+1|0;g=gA?i:A;j=j>y?j:y;k=k>2]=s+((d+-1|0)*24|0);h[u+(m*40|0)+8>>3]=g;h[u+(m*40|0)+16>>3]=k;h[u+(m*40|0)+24>>3]=i;h[u+(m*40|0)+32>>3]=j;m=m+1|0}c[t>>2]=r;c[t+4>>2]=b;w=D3(184416,1,w|0,v|0)|0;v=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;q=s;m=s;n=u}else{d=0;q=s;m=s;n=u}}else{d=z;q=0;m=s;n=u}}else{d=z;q=0;m=0;n=0}while(1){if(d|0){o=0;ia(103,u|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}o=0;ia(103,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}else{e=17;break}}o=0;d=aa(77,q|0,t|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}if(!d){o=0;d=ca(24,a|0,b|0,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}}o=0;ia(103,u|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}o=0;ia(103,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s}else{e=24;break}}if((e|0)==17)d=0;else if((e|0)==24)d=(d|0)==0&1;D_(w|0);l=x;return d|0}function ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;q=v;o=v+8|0;p=v+4|0;c[b+8>>2]=0;u=vH(c[b>>2]<<2)|0;f=c[b>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;c[u+(e<<2)>>2]=a+(e*24|0);e=e+1|0}_0(u,f,4,78);m=0;g=0;f=0;h=0;a:while(1){if((m|0)>=(c[b>>2]|0)){s=0;d=g;t=h;break}n=u+(m<<2)|0;e=c[n>>2]|0;c[o>>2]=e;a=c[e+16>>2]|0;if((c[a>>2]|0)==(e|0))e=c[a+4>>2]|0;else e=e+-24|0;c[p>>2]=e;k=0;a=g;j=h;while(1){if((k|0)>=2)break;switch(ps(o,p)|0){case -1:{g=0;h=a;while(1){if((g|0)>=(j|0))break;i=qs(c[h>>2]|0,e)|0;if(i|0){s=i;d=a;t=j;break a}g=g+1|0;h=c[h+4>>2]|0}g=vH(12)|0;if(!j){f=0;a=g}else c[f+4>>2]=g;c[g+8>>2]=f;c[g>>2]=e;c[g+4>>2]=0;c[e+20>>2]=g;h=j+1|0;break}case 1:{e=e+20|0;g=c[e>>2]|0;if(!g){r=19;break a}do if((j|0)!=1){if((g|0)==(a|0)){a=c[a+4>>2]|0;c[a+8>>2]=0;break}if((g|0)==(f|0)){f=c[f+8>>2]|0;c[f+4>>2]=0;break}else{i=g+4|0;h=c[g+8>>2]|0;c[h+4>>2]=c[i>>2];c[(c[i>>2]|0)+8>>2]=h;break}}else{a=0;f=0}while(0);D_(g);c[e>>2]=0;g=f;h=j+-1|0;break}default:{g=f;h=j}}e=c[n>>2]|0;f=c[e+16>>2]|0;if((e|0)==(c[f+4>>2]|0))f=c[f>>2]|0;else f=e+24|0;c[p>>2]=f;k=k+1|0;f=g;j=h}m=m+1|0;g=a;h=j}if((r|0)==19){Pw(1,92219,q)|0;bb(184416,1)}e=0;while(1){if((e|0)>=(t|0))break;r=c[d+4>>2]|0;D_(d);e=e+1|0;d=r}D_(u);l=v;return s|0}function os(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0.0;D=l;l=l+48|0;o=D+24|0;n=D+16|0;u=D;e=0;a:while(1){if((e|0)>=(b|0)){e=0;break}z=c[a+(e<<2)>>2]|0;A=c[z>>2]|0;c[u>>2]=c[A>>2];c[u+4>>2]=c[A+4>>2];c[u+8>>2]=c[A+8>>2];c[u+12>>2]=c[A+12>>2];A=e+1|0;B=d+(e*40|0)+8|0;p=d+(e*40|0)+24|0;q=d+(e*40|0)+32|0;g=d+(e*40|0)+16|0;e=A;while(1){if((e|0)>=(b|0)){e=A;continue a}i=c[a+(e<<2)>>2]|0;j=+h[B>>3];k=+h[d+(e*40|0)+24>>3];m=!(j<=k);f=+h[d+(e*40|0)+8>>3];if((((!(m|!(j>=f))?(r=+h[g>>3],s=+h[d+(e*40|0)+32>>3],r<=s):0)?(t=+h[d+(e*40|0)+16>>3],r>=t):0)?(E=+h[p>>3],!(!(E<=k)|!(E>=f))):0)?(E=+h[q>>3],!(!(E<=s)|!(E>=t))):0){c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];c[o+8>>2]=c[u+8>>2];c[o+12>>2]=c[u+12>>2];if(wU(n,o)|0){e=1;break a}}else C=11;if((((((C|0)==11?(C=0,v=+h[p>>3],!(!(f<=v)|!(f>=j))):0)?(w=+h[d+(e*40|0)+16>>3],x=+h[q>>3],w<=x):0)?(y=+h[g>>3],!(!(w>=y)|(!(k<=v)|m))):0)?(E=+h[d+(e*40|0)+32>>3],!(!(E<=x)|!(E>=y))):0)?(m=c[i>>2]|0,c[n>>2]=c[z>>2],c[n+4>>2]=c[z+4>>2],c[o>>2]=c[m>>2],c[o+4>>2]=c[m+4>>2],c[o+8>>2]=c[m+8>>2],c[o+12>>2]=c[m+12>>2],wU(n,o)|0):0){e=1;break a}e=e+1|0}}l=D;return e|0}function ps(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[a>>2]|0;a=c[b>>2]|0;d=+h[e>>3]-+h[a>>3];if(!(d!=0.0)){d=+h[e+8>>3]-+h[a+8>>3];if(d==0.0)a=0;else a=d>0.0?1:-1}else a=d>0.0?1:-1;return a|0}function qs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;g=m+32|0;i=m+24|0;j=m+16|0;k=m;f=m+48|0;rs(a,b,f);d=f+8|0;e=c[d>>2]|0;do if((e|0)>0)d=0;else{if((e|0)<0){rs(b,a,f);d=c[d>>2]|0;if((d|0)>0){d=0;break}if((d|0)<0)d=3;else{d=c[f>>2]|0;d=ss(b,a,(d|0)>-1?d:0-d|0)|0}if(!(ts(a,b,i,j,d)|0)){d=0;break}}else{d=c[f>>2]|0;if((d|0)==(c[f+4>>2]|0)){d=ss(a,b,0)|0;d=(ss(a,b,(d|0)<=(ss(a,b,1)|0)&1)|0)<<1}else d=ss(a,b,(d|0)>-1?d:0-d|0)|0;if(!(ts(a,b,i,j,d)|0)){d=0;break}}h[k>>3]=+h[i>>3];h[k+8>>3]=+h[j>>3];c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];d=us(a,b,g)|0}while(0);l=m;return d|0}function rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;i=+h[a>>3];j=+h[a+8>>3];e=c[a+16>>2]|0;if((c[e+4>>2]|0)==(a|0)){a=c[e>>2]|0;e=a}else{e=a+24|0;a=a+24|0}g=+h[e>>3]-i;f=+h[a+8>>3]-j;e=c[b+16>>2]|0;if((c[e+4>>2]|0)==(b|0)){a=c[e>>2]|0;e=a}else{e=b+24|0;a=b+24|0}k=+h[e>>3]-i;l=+h[a+8>>3]-j;j=(+h[b+8>>3]-j)*g-(+h[b>>3]-i)*f;b=j==0.0?0:j>0.0?1:-1;c[d>>2]=b;j=l*g-k*f;a=j==0.0?0:j>0.0?1:-1;c[d+4>>2]=a;c[d+8>>2]=O(a,b)|0;return}function ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;k=+h[a>>3];l=+h[a+8>>3];f=c[a+16>>2]|0;if((c[f+4>>2]|0)==(a|0))a=c[f>>2]|0;else a=a+24|0;j=+h[a>>3];i=+h[a+8>>3];do if(d){a=c[b+16>>2]|0;if((c[a+4>>2]|0)==(b|0)){b=c[a>>2]|0;break}else{b=b+24|0;break}}while(0);g=+h[b>>3];e=+h[b+8>>3];if(k==j)if(k==g)b=(ws(l,e,i)|0)!=-1&1;else b=0;else b=ws(k,g,j)|0;return b|0}function ts(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;a:do if((f|0)<1)g=0;else{n=+h[a>>3];p=+h[a+8>>3];g=c[a+16>>2]|0;if((c[g+4>>2]|0)==(a|0))g=c[g>>2]|0;else g=a+24|0;l=+h[g>>3];j=+h[g+8>>3];m=+h[b>>3];o=+h[b+8>>3];g=c[b+16>>2]|0;if((c[g+4>>2]|0)==(b|0))g=c[g>>2]|0;else g=b+24|0;k=+h[g>>3];i=+h[g+8>>3];b:do switch(f|0){case 3:{if(n==l){h[d>>3]=n;i=(o-i)/(m-k)*(n-k)+i;break b}if(m==k){h[d>>3]=m;i=(p-j)/(n-l)*(m-l)+j;break b}else{k=(o-i)/(m-k);l=(p-j)/(n-l);o=o-k*m;p=p-l*n;i=k-l;h[d>>3]=(p-o)/i;i=(k*p-o*l)/i;break b}}case 2:{if((ss(a,b,0)|0)==-1)if((ss(b,a,1)|0)==-1){f=(ss(b,a,0)|0)==-1;l=f?l:n;k=m;j=f?j:p;i=o}else{l=k;k=m;j=i;i=o}else if((ss(a,b,1)|0)!=-1)if((ss(b,a,0)|0)==-1){k=n;i=p}else{g=0;break a}else{l=m;j=o}h[d>>3]=(k+l)*.5;i=(i+j)*.5;break}case 1:if((o-p)*(n-l)==(m-n)*(p-j)){h[d>>3]=m;i=o;break b}else{h[d>>3]=k;break b}default:{g=1;break a}}while(0);h[e>>3]=i;g=1}while(0);return g|0}function us(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;o=+h[a>>3];p=+h[a+8>>3];e=c[a+16>>2]|0;if((c[e+4>>2]|0)==(a|0))e=c[e>>2]|0;else e=a+24|0;m=+h[e>>3];j=+h[e+8>>3];k=+h[b>>3];n=+h[b+8>>3];e=c[b+16>>2]|0;if((c[e+4>>2]|0)==(b|0))e=c[e>>2]|0;else e=b+24|0;i=+h[e>>3];g=+h[e+8>>3];a:do if(!(o!=m&k!=i)){do if(o==m){f=+h[d>>3];if(o==f?p==+h[d+8>>3]:0)break;if(!(m==f)){r=18;break a}if(!(j==+h[d+8>>3])){r=18;break a}}while(0);if(k==i){f=+h[d>>3];if(k==f?n==+h[d+8>>3]:0){e=0;break}if(i==f?g==+h[d+8>>3]:0)e=0;else r=18}else e=0}else r=18;while(0);if((r|0)==18)if(0>1){e=c[15686]|0;p=+h[d+8>>3];h[q>>3]=+h[d>>3];h[q+8>>3]=p;g1(e,92248,q)|0;vs(1,a);vs(2,b);e=1}else e=1;l=s;return e|0}function vs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+48|0;j=k;f=c[15686]|0;g=+h[b>>3];i=+h[b+8>>3];d=c[b+16>>2]|0;if((c[d+4>>2]|0)==(b|0)){d=c[d>>2]|0;e=d}else{e=b+24|0;d=b+24|0}n=+h[e>>3];m=+h[d+8>>3];c[j>>2]=a;h[j+8>>3]=g;h[j+16>>3]=i;h[j+24>>3]=n;h[j+32>>3]=m;g1(f,92276,j)|0;l=k;return}function ws(a,b,c){a=+a;b=+b;c=+c;return (a==b|b==c?0:(a>3]=0.0;e=e+1|0}h[f+(a<<3)>>3]=1.0;mv(c[b+(a<<2)>>2]|0,f,d);a=a+1|0}D_(f);f=0;while(1){if((f|0)>=(d|0)){a=1;break a}e=b+(f<<2)|0;a=0;while(1){if((a|0)==(f|0))break;j=(c[e>>2]|0)+(a<<3)|0;i=+h[j>>3];g=(c[b+(a<<2)>>2]|0)+(f<<3)|0;h[j>>3]=+h[g>>3];h[g>>3]=i;a=a+1|0}f=f+1|0}}while(0);return a|0}function ys(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=b<<3;p=vH(q)|0;q=vH(q)|0;r=b*30|0;n=(d|0)<(b|0)?d:b;o=b+-1|0;m=(g|0)==0;d=0;i=0;a:while(1){if((i|0)>=(n|0))break;k=c[e+(i<<2)>>2]|0;do{b:do if(m)d=0;else{d=0;while(1){if((d|0)==(b|0)){d=0;break b}h[k+(d<<3)>>3]=+((g2()|0)%100|0|0);d=d+1|0}}while(0);while(1){if((d|0)==(i|0))break;g=c[e+(d<<2)>>2]|0;As(k,0,o,-+zs(g,0,o,k),g);d=d+1|0}j=+Bs(k,0,o)}while(j<1.0e-10);Cs(k,0,o,1.0/j,k);d=0;do{Ds(q,0,o,k);Es(a,b,b,k,p);Ds(k,0,o,p);g=0;while(1){if((g|0)==(i|0))break;s=c[e+(g<<2)>>2]|0;As(k,0,o,-+zs(s,0,o,k),s);g=g+1|0}s=d;d=d+1|0;j=+Bs(k,0,o);if(!((s|0)<(r|0)&!(j<1.0e-10)))break a;Cs(k,0,o,1.0/j,k);l=+zs(k,0,o,q)}while(+B(+l)<.999);h[f+(i<<3)>>3]=l*j;i=i+1|0}while(1){if((i|0)>=(n|0))break;k=c[e+(i<<2)>>2]|0;g=0;while(1){if((g|0)>=(b|0)){g=0;break}h[k+(g<<3)>>3]=+((g2()|0)%100|0|0);g=g+1|0}while(1){if((g|0)>=(i|0))break;s=c[e+(g<<2)>>2]|0;As(k,0,o,-+zs(s,0,o,k),s);g=g+1|0}Cs(k,0,o,1.0/+Bs(k,0,o),k);h[f+(i<<3)>>3]=0.0;i=i+1|0}m=n+-1|0;i=0;while(1){if((i|0)>=(m|0))break;a=f+(i<<3)|0;b=i+1|0;j=+h[a>>3];g=i;k=b;while(1){if((k|0)>=(n|0))break;l=+h[f+(k<<3)>>3];s=j>2]|0);s=e+(g<<2)|0;Ds(c[k>>2]|0,0,o,c[s>>2]|0);Ds(c[s>>2]|0,0,o,p);h[f+(g<<3)>>3]=+h[a>>3];h[a>>3]=j;i=b}D_(p);D_(q);return (d|0)<=(r|0)|0}function zs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0;f=0.0;e=1-b+c|0;d=d+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!e)break;f=+h[d>>3]*+h[c>>3]+f;e=e+-1|0;d=d+8|0;c=c+8|0}return +f}function As(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0;f=1-b+c|0;e=e+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!f)break;h[c>>3]=+h[c>>3]+ +h[e>>3]*d;f=f+-1|0;e=e+8|0;c=c+8|0}return}function Bs(a,b,c){a=a|0;b=b|0;c=c|0;return +(+C(+(+zs(a,b,c,a))))}function Cs(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0;f=1-b+c|0;e=e+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!f)break;h[c>>3]=+h[e>>3]*d;f=f+-1|0;e=e+8|0;c=c+8|0}return}function Ds(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=1-b+c|0;d=d+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!e)break;h[c>>3]=+h[d>>3];e=e+-1|0;d=d+8|0;c=c+8|0}return}function Es(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0;j=0;while(1){if((j|0)>=(b|0))break;k=a+(j<<2)|0;g=0.0;i=0;while(1){if((i|0)>=(d|0))break;g=+h[e+(i<<3)>>3]*+h[(c[k>>2]|0)+(i<<3)>>3]+g;i=i+1|0}h[f+(j<<3)>>3]=g;j=j+1|0}return}function Fs(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;k=c[i>>2]|0;if(!k){o=d<<2;j=C_(O(o,f)|0)|0;o=C_(o)|0}else{o=d<<2;j=F_(c[k>>2]|0,O(o,f)|0)|0;o=F_(k,o)|0}c[i>>2]=o;k=0;while(1){if((k|0)>=(d|0)){i=0;break}c[o+(k<<2)>>2]=j;k=k+1|0;j=j+(f<<2)|0}while(1){if((i|0)>=(d|0))break;m=a+(i<<2)|0;n=o+(i<<2)|0;k=0;while(1){if((k|0)<(f|0)){j=0;l=0.0}else break;while(1){if((j|0)>=(e|0))break;p=+h[(c[m>>2]|0)+(j<<3)>>3]*+g[(c[b+(j<<2)>>2]|0)+(k<<2)>>2]+l;j=j+1|0;l=p}g[(c[n>>2]|0)+(k<<2)>>2]=l;k=k+1|0}i=i+1|0}return}function Gs(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0.0,m=0,n=0,o=0;k=c[i>>2]|0;if(!k){j=C_(O(d<<3,f)|0)|0;o=C_(d<<2)|0}else{j=F_(c[k>>2]|0,O(d<<3,f)|0)|0;o=F_(k,d<<2)|0}c[i>>2]=o;k=0;while(1){if((k|0)>=(d|0)){i=0;break}c[o+(k<<2)>>2]=j;k=k+1|0;j=j+(f<<3)|0}while(1){if((i|0)>=(d|0))break;m=a+(i<<2)|0;n=o+(i<<2)|0;k=0;while(1){if((k|0)<(f|0)){l=0.0;j=0}else break;while(1){if((j|0)>=(e|0))break;l=+h[(c[m>>2]|0)+(j<<3)>>3]*+g[(c[b+(j<<2)>>2]|0)+(k<<2)>>2]+l;j=j+1|0}h[(c[n>>2]|0)+(k<<3)>>3]=l;k=k+1|0}i=i+1|0}return}function Hs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0;j=c[f>>2]|0;if(!j){i=C_(O(d*20|0,e)|0)|0;q=C_(d<<2)|0}else{i=F_(c[j>>2]|0,O(d*20|0,e)|0)|0;q=F_(j,d<<2)|0}c[f>>2]=q;j=0;while(1){if((j|0)>=(d|0)){f=0;break}c[q+(j<<2)>>2]=i;j=j+1|0;i=i+(e<<2)|0}while(1){if((f|0)>=(d|0))break;l=c[a+(f*20|0)+4>>2]|0;m=c[a+(f*20|0)+8>>2]|0;n=c[a+(f*20|0)>>2]|0;o=q+(f<<2)|0;i=0;while(1){if((i|0)>=(e|0))break;p=b+(i<<2)|0;k=0.0;j=0;while(1){if((j|0)>=(n|0))break;k=+h[(c[p>>2]|0)+(c[l+(j<<2)>>2]<<3)>>3]*+g[m+(j<<2)>>2]+k;j=j+1|0}g[(c[o>>2]|0)+(i<<2)>>2]=k;i=i+1|0}f=f+1|0}return}function Is(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=0.0;d=b;e=a;while(1){if(!e)break;c=+h[d>>3]+c;d=d+8|0;e=e+-1|0}c=c/+(a|0);while(1){if(!a)break;h[b>>3]=+h[b>>3]-c;b=b+8|0;a=a+-1|0}return}function Js(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)>=(a|0))break;h[b+(c<<3)>>3]=+((g2()|0)%500|0|0);c=c+1|0}Is(a,b);return}function Ks(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,l=0,m=0;j=0;while(1){if((j|0)>=(b|0))break;k=c[a+(j*20|0)>>2]|0;l=a+(j*20|0)+8|0;m=a+(j*20|0)+4|0;f=0.0;i=0;while(1){if((i|0)>=(k|0))break;f=+h[d+(c[(c[m>>2]|0)+(i<<2)>>2]<<3)>>3]*+g[(c[l>>2]|0)+(i<<2)>>2]+f;i=i+1|0}h[e+(j<<3)>>3]=f;j=j+1|0}return}function Ls(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0;j=0;while(1){if((j|0)>=(b|0))break;k=a+(j<<2)|0;f=0.0;i=0;while(1){if((i|0)==(b|0))break;f=+h[d+(i<<3)>>3]*+g[(c[k>>2]|0)+(i<<2)>>2]+f;i=i+1|0}h[e+(j<<3)>>3]=f;j=j+1|0}return}function Ms(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]-+h[c+(e<<3)>>3];e=e+1|0}return}function Ns(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[c+(e<<3)>>3]+ +h[b+(e<<3)>>3];e=e+1|0}return}function Os(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]*c;e=e+1|0}return}function Ps(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;h[c+(d<<3)>>3]=+h[b+(d<<3)>>3];d=d+1|0}return}function Qs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(a|0))break;d=+h[c+(e<<3)>>3]*+h[b+(e<<3)>>3]+d;e=e+1|0}return +d}function Rs(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0;c=0;d=-1.e+50;while(1){if((c|0)>=(a|0))break;e=+B(+(+h[b+(c<<3)>>3]));c=c+1|0;d=e>d?e:d}return +d}function Ss(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0;j=0;while(1){if((j|0)<(b|0)){g=0.0;i=0}else break;while(1){if((i|0)>=(d|0))break;g=+h[e+(i<<3)>>3]*+h[(c[a+(i<<2)>>2]|0)+(j<<3)>>3]+g;i=i+1|0}h[f+(j<<3)>>3]=g;j=j+1|0}return}function Ts(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=0.0;d=b;e=a;while(1){if(!e)break;c=+g[d>>2]+c;d=d+4|0;e=e+-1|0}c=c/+(a|0);while(1){if(!a)break;g[b>>2]=+g[b>>2]-c;b=b+4|0;a=a+-1|0}return}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0;e=0;while(1){if((e|0)>=(b|0)){h=0;j=0;m=b;break}g[d+(e<<2)>>2]=0.0;e=e+1|0}while(1){if((j|0)>=(b|0))break;l=+g[c+(j<<2)>>2];k=j+1|0;f=+g[a+(h<<2)>>2]*l;i=k;e=h;while(1){e=e+1|0;if((i|0)==(b|0))break;p=+g[a+(e<<2)>>2];n=+g[c+(i<<2)>>2]*p+f;o=d+(i<<2)|0;g[o>>2]=+g[o>>2]+p*l;f=n;i=i+1|0}o=d+(j<<2)|0;g[o>>2]=+g[o>>2]+f;h=h+m|0;j=k;m=m+-1|0}return}function Vs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]-+g[c+(e<<2)>>2];e=e+1|0}return}function Ws(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[c+(e<<2)>>2]+ +g[b+(e<<2)>>2];e=e+1|0}return}function Xs(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=(a|0))break;f=b+(e<<2)|0;g[f>>2]=+g[d+(e<<2)>>2]*c+ +g[f>>2];e=e+1|0}return}function Ys(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]*c;e=e+1|0}return}function Zs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;c[d+(e<<2)>>2]=c[b+(e<<2)>>2];e=e+1|0}return}function _s(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(a|0))break;d=d+ +g[c+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function $s(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;h[c+(d<<3)>>3]=b;d=d+1|0}return}function at(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;g[c+(d<<2)>>2]=b;d=d+1|0}return}function bt(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0;c=-1000000015047466219876688.0e6;d=0;while(1){if((d|0)>=(a|0))break;e=+B(+(+g[b+(d<<2)>>2]));c=e>c?e:c;d=d+1|0}return +c}function ct(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];g[d>>2]=e*e;c=c+1|0}return}function dt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];if(e!=0.0)g[d>>2]=1.0/e;c=c+1|0}return}function et(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0;d=0;while(1){if((d|0)>=(a|0))break;e=+g[b+(d<<2)>>2];if(e>=0.0)g[c+(d<<2)>>2]=+C(+e);d=d+1|0}return}function ft(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];if(e>0.0)g[d>>2]=1.0/+C(+e);c=c+1|0}return}function gt(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=0;if(b&3)if(!(4%(b>>>0)|0))b=4;else b=O(4/((ht(b)|0)>>>0)|0,b)|0;c[a+8>>2]=b;a=a+4|0;b=c[a>>2]|0;a:do if(b|0)while(1){if(!b)break a;d=c[b>>2]|0;D_(c[b+4>>2]|0);D_(b);b=d}while(0);c[a>>2]=0;return}function ht(a){a=a|0;var b=0,c=0;c=4;a:while(1){b=c;while(1){if((b|0)==(a|0))break a;if((b|0)<=(a|0))break;b=b-a|0}c=b;a=a-b|0}return a|0}function it(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(!b){d=c[a+8>>2]|0;e=vH(8)|0;f=vH(O(c[46085]|0,d)|0)|0;c[e+4>>2]=f;b=0;while(1){if((b|0)>=(c[46085]|0))break;jt(f+(O(b,d)|0)|0,a);b=b+1|0}b=a+4|0;c[e>>2]=c[b>>2];c[b>>2]=e;b=c[a>>2]|0}c[a>>2]=c[b>>2];return b|0}function jt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=a;return}function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=uH(b<<3)|0;l=a+8|0;f=c[l>>2]|0;lt(a,b,m);Js(b,d);h=0;i=0;while(1){if((i|0)>=(b|0))break;h=(c[a+(i*20|0)>>2]|0)+h|0;i=i+1|0}h=vH(h<<2)|0;j=0;while(1){if((j|0)>=(b|0))break;c[a+(j*20|0)+8>>2]=h;k=c[a+(j*20|0)>>2]|0;g[h>>2]=+(1-k|0);i=1;while(1){if((i|0)>=(k|0))break;g[h+(i<<2)>>2]=1.0;i=i+1|0}h=h+(k<<2)|0;j=j+1|0}i=Dq(a,d,m,b,.001,e)|0;D_(c[l>>2]|0);h=0;while(1){if((h|0)>=(b|0))break;c[a+(h*20|0)+8>>2]=f;f=f+(c[a+(h*20|0)>>2]<<2)|0;h=h+1|0}D_(m);return i>>>31|0}function lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0,j=0,k=0,l=0,m=0;k=a+16|0;i=0;while(1){if((i|0)>=(b|0))break;if(c[k>>2]|0){l=c[a+(i*20|0)>>2]|0;m=a+(i*20|0)+8|0;j=a+(i*20|0)+16|0;e=0.0;f=1;while(1){if((f|0)>=(l|0))break;e=e+ +g[(c[j>>2]|0)+(f<<2)>>2]*+g[(c[m>>2]|0)+(f<<2)>>2];f=f+1|0}h[d+(i<<3)>>3]=e}i=i+1|0}return}function mt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=vH(f<<2)|0;i=b<<3;g=0;while(1){if((g|0)>=(f|0))break;c[r+(g<<2)>>2]=vH(i)|0;g=g+1|0}p=vH(f<<3)|0;q=vH(b<<2)|0;g=vH(O(i,b)|0)|0;i=0;while(1){if((i|0)>=(b|0))break;c[q+(i<<2)>>2]=g;g=g+(b<<3)|0;i=i+1|0}k=0;o=1;while(1){if((k|0)>=(b|0))break;l=a+(k<<2)|0;m=q+(k<<2)|0;i=0;while(1){if((i|0)==(o|0))break;n=a+(i<<2)|0;g=0;j=0.0;while(1){if((g|0)>=(d|0))break;s=j+ +(O(c[(c[n>>2]|0)+(g<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0)|0);g=g+1|0;j=s}h[(c[q+(i<<2)>>2]|0)+(k<<3)>>3]=j;h[(c[m>>2]|0)+(i<<3)>>3]=j;i=i+1|0}k=k+1|0;o=o+1|0}ys(q,b,f,r,p,1)|0;i=0;while(1){if((i|0)>=(f|0)){g=0;break}l=r+(i<<2)|0;m=e+(i<<2)|0;k=0;while(1){if((k|0)<(d|0)){g=0;j=0.0}else break;while(1){if((g|0)>=(b|0))break;s=+h[(c[l>>2]|0)+(g<<3)>>3]*+(c[(c[a+(g<<2)>>2]|0)+(k<<2)>>2]|0)+j;g=g+1|0;j=s}h[(c[m>>2]|0)+(k<<3)>>3]=j;k=k+1|0}i=i+1|0}while(1){if((g|0)>=(f|0))break;D_(c[r+(g<<2)>>2]|0);g=g+1|0}D_(r);D_(p);D_(c[q>>2]|0);D_(q);return}function nt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+16|0;j=f+20|0;i=f+12|0;h=f+8|0;c[g>>2]=e;c[i>>2]=0;c[h>>2]=0;$u(c[a>>2]|0,d,d<<2,j);Hs(c[j>>2]|0,a,d,b,i);Gs(a,c[i>>2]|0,b,d,b,h);D_(c[c[i>>2]>>2]|0);D_(c[i>>2]|0);e=(ys(c[h>>2]|0,b,1,g,f,1)|0)&255;l=f;return e|0}function ot(){c[46143]=0;D_(c[46144]|0);D_(c[46145]|0);D_(c[46146]|0);c[46144]=0;c[46145]=0;c[46146]=0;return}function pt(a){a=a|0;D_(c[a+36>>2]|0);return}function qt(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;r=l;l=l+80|0;o=r+64|0;q=r+68|0;i=r+48|0;j=r+32|0;k=r+16|0;m=r;n=d+16|0;g=c[n>>2]|0;a:do if(!(c[g+212>>2]|0))switch(HJ(d)|0){case 1:{g=c[n>>2]|0;j=c[g+12>>2]|0;k=c[j+8>>2]|0;c[q>>2]=k;g=c[c[g+8>>2]>>2]|0;switch(a[g>>0]|0){case 98:{if(!(b$(g,105210)|0))p=11;else p=8;break}case 112:{if((b$(g,102695)|0)==0?(rt(c[j+44>>2]|0,k)|0)!=0:0)p=11;else p=8;break}default:p=8}do if((p|0)==8)if((k|0)<3){c[b+40>>2]=(c[j>>2]|0)==0?0:2;p=17;break}else{g=b+40|0;c[g>>2]=0;break}else if((p|0)==11){g=b+40|0;c[g>>2]=1;if((k|0)<=2)p=17}while(0);if((p|0)==17){i=st(d,q,e,f)|0;p=21;break a}i=vH(k<<4)|0;j=j+44|0;if((c[g>>2]|0)==1){p=c[j>>2]|0;s=e;h[i>>3]=+h[p>>3]*.013888888888888888+s;e=f;h[i+8>>3]=+h[p+8>>3]*.013888888888888888+e;h[i+16>>3]=+h[p+16>>3]*.013888888888888888-s;h[i+24>>3]=+h[p+24>>3]*.013888888888888888+e;h[i+32>>3]=+h[p+32>>3]*.013888888888888888-s;h[i+40>>3]=+h[p+40>>3]*.013888888888888888-e;h[i+48>>3]=+h[p+48>>3]*.013888888888888888+s;h[i+56>>3]=+h[p+56>>3]*.013888888888888888-e;p=21;break a}g=0;while(1){if((g|0)>=(k|0)){p=21;break a}p=c[j>>2]|0;u=+h[p+(g<<4)>>3];s=+h[p+(g<<4)+8>>3];t=+C(+(s*s+u*u));h[i+(g<<4)>>3]=(e/t+1.0)*u*.013888888888888888;h[i+(g<<4)+8>>3]=(f/t+1.0)*s*.013888888888888888;g=g+1|0}}case 2:{c[q>>2]=4;p=vH(64)|0;d=c[(c[n>>2]|0)+12>>2]|0;v=+h[d+32>>3];t=+h[d+40>>3];o=~~+h[d+16>>3];d=~~+h[d+24>>3];u=-e;s=-f;tt(i,o,d,u,s);c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];i=p+16|0;n=~~v;tt(j,n,d,e,s);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];i=p+32|0;d=~~t;tt(k,n,d,e,f);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];i=p+48|0;tt(m,o,d,u,f);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[b+40>>2]=1;i=p;p=21;break a}case 3:{c[b+40>>2]=2;i=st(d,q,e,f)|0;p=21;break a}default:{c[o>>2]=c[c[(c[n>>2]|0)+8>>2]>>2];Pw(1,92312,o)|0;g=1;break a}}else{c[q>>2]=4;u=+h[g+32>>3]*.5+e;v=+h[g+40>>3]*.5+f;c[b+40>>2]=1;i=vH(64)|0;h[i>>3]=u;h[i+8>>3]=v;t=-u;h[i+16>>3]=t;h[i+24>>3]=v;h[i+32>>3]=t;v=-v;h[i+40>>3]=v;h[i+48>>3]=u;h[i+56>>3]=v;p=21}while(0);if((p|0)==21){c[b+36>>2]=i;g=c[q>>2]|0;c[b+32>>2]=g;ut(i,g,b,b+16|0);if((g|0)>(c[46143]|0)){c[46143]=g;g=0}else g=0}l=r;return g|0}function rt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;do if((b|0)==4){c=+h[a+8>>3];b=a+16|0;d=+h[a+24>>3];if(c==d){if(!(+h[a+40>>3]==+h[a+56>>3])){b=0;break}if(!(+h[a>>3]==+h[a+48>>3])){b=0;break}b=+h[b>>3]==+h[a+32>>3];break}if((+h[a>>3]==+h[b>>3]?+h[a+32>>3]==+h[a+48>>3]:0)?c==+h[a+56>>3]:0)b=d==+h[a+40>>3];else b=0}else b=0;while(0);return b&1|0}function st(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0.0,i=0,j=0,k=0.0,l=0;f=xx(a,99679)|0;if(!f)f=0;else f=a2(f)|0;i=(f|0)<3?20:f;j=vH(i<<4)|0;a=a+16|0;g=1.0/+(i|0);f=0;while(1){if((f|0)>=(i|0))break;l=c[a>>2]|0;k=g*+(f|0)*6.283185307179586;h[j+(f<<4)>>3]=(+h[l+32>>3]*.5+d)*+E(+k);h[j+(f<<4)+8>>3]=(+h[l+40>>3]*.5+e)*+F(+k);f=f+1|0}c[b>>2]=i;return j|0}function tt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;h[a>>3]=+(b|0)*.013888888888888888+d;h[a+8>>3]=+(c|0)*.013888888888888888+e;return}function ut(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0.0;j=+h[a>>3];i=+h[a+8>>3];e=1;f=i;g=j;while(1){if((e|0)>=(b|0))break;k=a+16|0;l=+h[k>>3];m=+h[a+24>>3];e=e+1|0;f=m>f?m:f;g=l>g?l:g;i=m>3]=j;h[c+8>>3]=i;h[d>>3]=g;h[d+8>>3]=f;return}function vt(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;r=l;l=l+80|0;n=r+64|0;p=r+68|0;i=r+48|0;j=r+32|0;k=r+16|0;m=r;o=d+16|0;g=c[o>>2]|0;a:do if(!(c[g+212>>2]|0))switch(HJ(d)|0){case 1:{m=c[(c[o>>2]|0)+12>>2]|0;n=m+8|0;k=c[n>>2]|0;c[p>>2]=k;b:do if((k|0)>2){i=vH(k<<4)|0;j=m+44|0;g=0;while(1){if((g|0)>=(k|0))break b;d=c[j>>2]|0;h[i+(g<<4)>>3]=+h[d+(g<<4)>>3]*.013888888888888888;h[i+(g<<4)+8>>3]=+h[d+(g<<4)+8>>3]*.013888888888888888;g=g+1|0}}else i=st(d,p,0.0,0.0)|0;while(0);g=c[c[(c[o>>2]|0)+8>>2]>>2]|0;switch(a[g>>0]|0){case 98:{if(!(b$(g,105210)|0))g=1;else q=13;break}case 112:{if((b$(g,102695)|0)==0?(rt(i,c[p>>2]|0)|0)!=0:0)g=1;else q=13;break}default:q=13}do if((q|0)==13){if((c[n>>2]|0)<3?c[m>>2]|0:0){g=2;break}g=0}while(0);c[b+40>>2]=g;q=20;break a}case 2:{c[p>>2]=4;q=vH(64)|0;o=c[(c[o>>2]|0)+12>>2]|0;t=+h[o+16>>3];v=+h[o+24>>3];u=+h[o+32>>3];s=+h[o+40>>3];wt(i,t,v);c[q>>2]=c[i>>2];c[q+4>>2]=c[i+4>>2];c[q+8>>2]=c[i+8>>2];c[q+12>>2]=c[i+12>>2];i=q+16|0;wt(j,u,v);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];i=q+32|0;wt(k,u,s);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];i=q+48|0;wt(m,t,s);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[b+40>>2]=1;i=q;q=20;break a}case 3:{c[b+40>>2]=2;i=st(d,p,0.0,0.0)|0;q=20;break a}default:{c[n>>2]=c[c[(c[o>>2]|0)+8>>2]>>2];Pw(1,92348,n)|0;g=1;break a}}else{c[p>>2]=4;u=+h[g+32>>3]*.5;v=+h[g+40>>3]*.5;c[b+40>>2]=1;i=vH(64)|0;h[i>>3]=u;h[i+8>>3]=v;t=-u;h[i+16>>3]=t;h[i+24>>3]=v;h[i+32>>3]=t;v=-v;h[i+40>>3]=v;h[i+48>>3]=u;h[i+56>>3]=v;q=20}while(0);if((q|0)==20){g=c[p>>2]|0;if(e!=1.0|f!=1.0)xt(i,g,e,f);c[b+36>>2]=i;c[b+32>>2]=g;ut(i,g,b,b+16|0);if((g|0)>(c[46143]|0)){c[46143]=g;g=0}else g=0}l=r;return g|0}function wt(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b*.013888888888888888;h[a+8>>3]=c*.013888888888888888;return}function xt(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=0;while(1){if((e|0)>=(b|0))break;h[a>>3]=+h[a>>3]*c;f=a+8|0;h[f>>3]=+h[f>>3]*d;a=a+16|0;e=e+1|0}return}function yt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0;r=l;l=l+128|0;o=r+112|0;n=r+96|0;m=r+80|0;f=r+64|0;p=r+48|0;q=r+32|0;j=r+16|0;k=r;c[n>>2]=c[a>>2];c[n+4>>2]=c[a+4>>2];c[n+8>>2]=c[a+8>>2];c[n+12>>2]=c[a+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];xr(p,n,o);g=b+16|0;c[n>>2]=c[a>>2];c[n+4>>2]=c[a+4>>2];c[n+8>>2]=c[a+8>>2];c[n+12>>2]=c[a+12>>2];c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];xr(q,n,o);c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];xr(j,n,o);i=e+16|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];xr(k,n,o);c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];do if(zt(f,m,n,o)|0){f=c[b+40>>2]|0;if(f&1|0?c[e+40>>2]&1|0:0){f=1;break}if(f&2|0?c[e+40>>2]&2|0:0){s=+h[g>>3]-+h[b>>3]+ +h[i>>3]-+h[e>>3];t=+h[a>>3]-+h[d>>3];u=+h[a+8>>3]-+h[d+8>>3];f=!(u*u+t*t>s*s*.25);break}f=c[46144]|0;if(!f){c[46144]=vH(c[46143]<<4)|0;i=vH(c[46143]<<4)|0;c[46145]=i;f=c[46144]|0}else i=c[46145]|0;v=c[b+36>>2]|0;b=b+32|0;g=c[b>>2]|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];At(v,g,o,f);a=c[e+36>>2]|0;g=e+32|0;e=c[g>>2]|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];At(a,e,o,i);if(!(Bt(f,i,c[b>>2]|0,c[g>>2]|0)|0)){f=c[46144]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];if(Ct(m,n,o)|0?(k=c[46145]|0,v=c[g>>2]|0,c[o>>2]=c[f>>2],c[o+4>>2]=c[f+4>>2],c[o+8>>2]=c[f+8>>2],c[o+12>>2]=c[f+12>>2],Dt(k,v,o)|0):0){f=1;break}f=c[46145]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];if(!(Ct(m,n,o)|0))f=0;else{q=c[46144]|0;v=c[b>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=c[f+4>>2];c[o+8>>2]=c[f+8>>2];c[o+12>>2]=c[f+12>>2];f=(Dt(q,v,o)|0)!=0}}else f=1}else f=0;while(0);l=r;return f&1|0}function zt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((+h[a>>3]<=+h[d>>3]?+h[c>>3]<=+h[b>>3]:0)?+h[a+8>>3]<=+h[d+8>>3]:0)a=+h[c+8>>3]<=+h[b+8>>3]&1;else a=0;return a|0}function At(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;f=c+8|0;e=0;while(1){if((e|0)>=(b|0))break;h[d>>3]=+h[c>>3]+ +h[a>>3];h[d+8>>3]=+h[f>>3]+ +h[a+8>>3];e=e+1|0;a=a+16|0;d=d+16|0}return}function Bt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+112|0;s=A+96|0;r=A+80|0;q=A+64|0;p=A+48|0;u=A+32|0;v=A+16|0;w=A;x=d+-1|0;y=e+-1|0;z=d<<1;t=e<<1;f=0;g=0;h=0;i=0;while(1){B=a+(f<<4)|0;C=a+(((x+f|0)%(d|0)|0)<<4)|0;c[r>>2]=c[B>>2];c[r+4>>2]=c[B+4>>2];c[r+8>>2]=c[B+8>>2];c[r+12>>2]=c[B+12>>2];c[s>>2]=c[C>>2];c[s+4>>2]=c[C+4>>2];c[s+8>>2]=c[C+8>>2];c[s+12>>2]=c[C+12>>2];wr(u,r,s);o=b+(g<<4)|0;n=b+(((y+g|0)%(e|0)|0)<<4)|0;c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[r+8>>2]=c[o+8>>2];c[r+12>>2]=c[o+12>>2];c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];wr(v,r,s);c[q>>2]=c[45770];c[q+4>>2]=c[45771];c[q+8>>2]=c[45772];c[q+12>>2]=c[45773];c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];c[s+8>>2]=c[v+8>>2];c[s+12>>2]=c[v+12>>2];j=+yr(q,r,s);c[q>>2]=c[C>>2];c[q+4>>2]=c[C+4>>2];c[q+8>>2]=c[C+8>>2];c[q+12>>2]=c[C+12>>2];c[r>>2]=c[B>>2];c[r+4>>2]=c[B+4>>2];c[r+8>>2]=c[B+8>>2];c[r+12>>2]=c[B+12>>2];c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];c[s+8>>2]=c[o+8>>2];c[s+12>>2]=c[o+12>>2];k=zr(q,r,s)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[r+8>>2]=c[o+8>>2];c[r+12>>2]=c[o+12>>2];c[s>>2]=c[B>>2];c[s+4>>2]=c[B+4>>2];c[s+8>>2]=c[B+8>>2];c[s+12>>2]=c[B+12>>2];m=zr(q,r,s)|0;c[p>>2]=c[C>>2];c[p+4>>2]=c[C+4>>2];c[p+8>>2]=c[C+8>>2];c[p+12>>2]=c[C+12>>2];c[q>>2]=c[B>>2];c[q+4>>2]=c[B+4>>2];c[q+8>>2]=c[B+8>>2];c[q+12>>2]=c[B+12>>2];c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];c[s+8>>2]=c[o+8>>2];c[s+12>>2]=c[o+12>>2];if(Ar(p,q,r,s,w)|0){f=1;break}n=(k|0)==0;o=(m|0)==0;do if(j!=0.0|(m|k|0)!=0)if(!(j>=0.0))if(o){f=(f+1|0)%(d|0)|0;h=h+1|0;break}else{g=(g+1|0)%(e|0)|0;i=i+1|0;break}else if(n){g=(g+1|0)%(e|0)|0;i=i+1|0;break}else{f=(f+1|0)%(d|0)|0;h=h+1|0;break}else{f=(f+1|0)%(d|0)|0;h=h+1|0}while(0);if(!((i|0)<(t|0)&((h|0)<(z|0)&((i|0)<(e|0)|(h|0)<(d|0))))){f=0;break}}l=A;return f|0}function Ct(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;e=+h[a>>3];if((e<=+h[c>>3]?e>=+h[b>>3]:0)?(d=+h[a+8>>3],d<=+h[c+8>>3]):0)a=d>=+h[b+8>>3]&1;else a=0;return a|0}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,l=0;e=c[46146]|0;if(!e){e=vH(c[46143]<<4)|0;c[46146]=e}i=d+8|0;g=0;while(1){if((g|0)>=(b|0))break;h[e+(g<<4)>>3]=+h[a+(g<<4)>>3]-+h[d>>3];h[e+(g<<4)+8>>3]=+h[a+(g<<4)+8>>3]-+h[i>>3];g=g+1|0}d=b+-1|0;f=0.0;a=0;a:while(1){if((a|0)>=(b|0)){l=19;break}g=(d+a|0)%(b|0)|0;j=+h[e+(a<<4)+8>>3];i=j==0.0;if(i?+h[e+(g<<4)+8>>3]==0.0:0){if(+h[e+(g<<4)>>3]*+h[e+(a<<4)>>3]<0.0){e=1;break}}else l=11;do if((l|0)==11){l=0;k=+h[e+(g<<4)+8>>3];if(!(j>=0.0)|!(k<=0.0)?!(k>=0.0)|!(j<=0.0):0)break;j=(k*+h[e+(a<<4)>>3]-j*+h[e+(g<<4)>>3])/(k-j);if(j==0.0){e=1;break a}if(j>0.0)if(k==0.0|i){f=f+.5;break}else{f=f+1.0;break}}while(0);a=a+1|0}if((l|0)==19)e=((~~f|0)%2|0|0)==1&1;return e|0}function Et(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=vH(b<<2)|0;i=O(b,b)|0;d=vH(i<<2)|0;c[j>>2]=d;at(i,0.0,d);d=1;while(1){if((d|0)>=(b|0)){d=0;g=0;i=b;break}c[j+(d<<2)>>2]=(c[j>>2]|0)+((O(d,b)|0)<<2);d=d+1|0}while(1){if((g|0)>=(b|0))break;h=j+(g<<2)|0;e=g;f=d;while(1){if((e|0)==(b|0))break;k=c[a+(f<<2)>>2]|0;c[(c[h>>2]|0)+(e<<2)>>2]=k;c[(c[j+(e<<2)>>2]|0)+(g<<2)>>2]=k;e=e+1|0;f=f+1|0}d=d+i|0;g=g+1|0;i=i+-1|0}return j|0}function Ft(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;var k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0;M=c[d+(f<<2)>>2]|0;C=c[a+4>>2]|0;D=c[a>>2]|0;E=c[a+48>>2]|0;F=c[a+52>>2]|0;G=c[a+56>>2]|0;a:do if((h|0)<1)d=0;else{Ht(M,C,E,F,G,j);H=c[a+28>>2]|0;I=c[a+32>>2]|0;J=c[a+36>>2]|0;K=c[a+12>>2]|0;L=c[a+16>>2]|0;f=0;e=0;d=-1;while(1){if((f|0)>=(C|0))break;if((f|0)>=(e|0)){d=d+1|0;if((d|0)==(G|0)){e=C;d=G}else e=c[F+(d<<2)>>2]|0}c[L+(c[E+(f<<2)>>2]<<2)>>2]=d;f=f+1|0}z=c[a+40>>2]|0;A=I+(C+-1<<2)|0;d=0;e=0;while(1){if(e<<24>>24==0&(d|0)<(h|0)){k=-1.0e9;f=0;e=1}else break a;b:while(1){x=f;while(1){if((x|0)>=(C|0))break b;f=c[E+(x<<2)>>2]|0;y=+g[M+(f<<2)>>2];l=y;w=x;m=0.0;while(1){g[z+(f<<2)>>2]=m;f=w+1|0;if((f|0)>=(C|0)){v=0;break}l=(c[L+(f<<2)>>2]|0)>(c[L+(w<<2)>>2]|0)?l+j:l;a=c[E+(f<<2)>>2]|0;m=+g[M+(a<<2)>>2];if(+B(+(m-l))>1.0e-09){v=1;break}w=f;m=m-y;f=a}n=x;while(1){if((n|0)>(w|0)){a=0;o=x;break}o=c[E+(n<<2)>>2]|0;p=c[D+(o<<2)>>2]|0;a=0;l=-+g[b+(o<<2)>>2];while(1){if((a|0)>=(C|0))break;if((a|0)!=(o|0))l=+g[M+(a<<2)>>2]*+g[p+(a<<2)>>2]+l;a=a+1|0}g[H+(o<<2)>>2]=l/-+g[p+(o<<2)>>2]-+g[z+(o<<2)>>2];n=n+1|0}c:while(1){if((o|0)>(w|0)){m=0.0;q=0.0;r=0;break}n=c[L+(c[E+(o<<2)>>2]<<2)>>2]|0;if((n|0)==(G|0))r=f;else{r=c[F+(n<<2)>>2]|0;r=(f|0)<(r|0)?f:r}p=o;while(1){if((p|0)>=(r|0)){p=o;break}n=c[E+(p<<2)>>2]|0;if(+g[H+(n<<2)>>2]>2]=n;a=a+1|0}p=p+1|0}while(1){if((p|0)>=(r|0))break;n=c[E+(p<<2)>>2]|0;if(+g[H+(n<<2)>>2]==y){c[K+(a<<2)>>2]=n;a=a+1|0}p=p+1|0}while(1){if((o|0)>=(r|0)){o=r;continue c}n=c[E+(o<<2)>>2]|0;if(+g[H+(n<<2)>>2]>y){c[K+(a<<2)>>2]=n;a=a+1|0}o=o+1|0}}while(1){if((r|0)>=(a|0))break;o=c[K+(r<<2)>>2]|0;p=c[D+(o<<2)>>2]|0;l=0.0;n=0;while(1){if((n|0)==(r|0))break;l=l-+g[p+(c[K+(n<<2)>>2]<<2)>>2];n=n+1|0}N=l*2.0;u=p+(o<<2)|0;s=+g[u>>2];l=N+m;s=(N*y+m*q-+g[H+(o<<2)>>2]*s)/(l-s);g[I+(r<<2)>>2]=s;m=l-+g[u>>2];q=s;r=r+1|0}p=(a|0)==(C|0);if(p)g[A>>2]=y;u=a+-1|0;m=0.0;q=0.0;o=u;while(1){if((o|0)<=-1)break;r=c[K+(o<<2)>>2]|0;t=c[D+(r<<2)>>2]|0;l=0.0;n=o;while(1){n=n+1|0;if((n|0)>=(a|0))break;l=l-+g[t+(c[K+(n<<2)>>2]<<2)>>2]}l=l*2.0;t=t+(r<<2)|0;N=+g[t>>2];s=l+m;N=(l*y+m*q-+g[H+(r<<2)>>2]*N)/(s-N);g[J+(o<<2)>>2]=N;m=s-+g[t>>2];q=N;o=o+-1|0}if(p){g[J>>2]=y;s=0.0;n=-1;p=0}else{s=0.0;n=-1;p=0}while(1){if((a|0)<=(p|0))break;q=+g[J+(p<<2)>>2];if((p|0)>0)l=+g[I+(p+-1<<2)>>2];else l=q;do if(qy;if(qs;s=t?N:s;n=t?p:n;p=p+1|0}if((n|0)>-1)break;if(v?(c[L+(c[E+(f<<2)>>2]<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0):0){k=+g[M+(c[K+(u<<2)>>2]<<2)>>2]+j;x=f;continue}k=+g[M+(c[K+(u<<2)>>2]<<2)>>2];x=f}m=+g[J+(n<<2)>>2];if(!n)q=m;else q=+g[I+(n+-1<<2)>>2];if(v){t=c[E+(f<<2)>>2]|0;l=+g[M+(t<<2)>>2];l=((c[L+(t<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0)?l-j:l)-+g[z+(c[K+(u<<2)>>2]<<2)>>2]}else l=1.0e9;l=mk?q:k;do if(ly;if(l=(n|0))break;t=c[K+(o<<2)>>2]|0;g[M+(t<<2)>>2]=+g[z+(t<<2)>>2]+l;o=o+1|0}while(1){if((n|0)>=(a|0))break;t=c[K+(n<<2)>>2]|0;g[M+(t<<2)>>2]=+g[z+(t<<2)>>2]+m;n=n+1|0}if(v?(c[L+(c[E+(f<<2)>>2]<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0):0)k=+g[M+(c[K+(u<<2)>>2]<<2)>>2]+j;else k=+g[M+(c[K+(u<<2)>>2]<<2)>>2];a=x;while(1){if((a|0)>(w|0))break;c[E+(a<<2)>>2]=c[K+(a-x<<2)>>2];a=a+1|0}if(e<<24>>24!=0?+B(+(l-y))<.01:0)e=+B(+(m-y))<.01;else e=0;e=e&1}Ts(C,M);Gt(M,E,F,G,i);d=d+1|0}}while(0);return d|0}function Gt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=0;while(1){if((g|0)>=(e|0))break;c[f+(g<<2)>>2]=c[a+(c[b+((c[d+(g<<2)>>2]|0)+-1<<2)>>2]<<2)>>2];g=g+1|0}return}function Ht(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0.0,j=0,k=0,l=0,m=0;i=-1.0e9;k=0;j=-1;m=0;while(1){if((m|0)>=(b|0))break;if((m|0)<(k|0))l=k;else{j=j+1|0;if((j|0)==(f|0))k=b;else k=c[e+(j<<2)>>2]|0;if((m|0)>0)i=+g[a+(c[d+(m+-1<<2)>>2]<<2)>>2]+h;else i=-1.0e9;hs(a,d,m,k+-1|0);l=k}k=a+(c[d+(m<<2)>>2]<<2)|0;if(+g[k>>2]>2]=i;k=l;m=m+1|0}return}function It(a){a=a|0;D_(c[c[a>>2]>>2]|0);D_(c[a>>2]|0);D_(c[a+8>>2]|0);D_(c[a+28>>2]|0);D_(c[a+32>>2]|0);D_(c[a+36>>2]|0);D_(c[a+40>>2]|0);D_(c[a+12>>2]|0);D_(c[a+16>>2]|0);D_(c[a+20>>2]|0);D_(c[a+24>>2]|0);D_(a);return}function Jt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=vH(60)|0;c[k>>2]=0;l=k+4|0;c[l>>2]=b;c[k+48>>2]=d;c[k+52>>2]=e;c[k+56>>2]=f;c[k>>2]=Et(a,b)|0;i=b<<2;j=vH(i)|0;c[k+8>>2]=j;h=0;b=0;a=-1;while(1){if((h|0)>=(c[l>>2]|0))break;g=a+1|0;if((h|0)>=(b|0)){b=c[((g|0)==(f|0)?l:e+(g<<2)|0)>>2]|0;a=g}c[j+(c[d+(h<<2)>>2]<<2)>>2]=a;h=h+1|0}c[k+28>>2]=vH(i)|0;c[k+32>>2]=vH(i)|0;c[k+36>>2]=vH(i)|0;c[k+40>>2]=vH(i)|0;c[k+12>>2]=vH(i)|0;c[k+16>>2]=vH(i)|0;c[k+20>>2]=vH(i)|0;c[k+24>>2]=vH(i)|0;return k|0}function Kt(){gt(184592,24);c[46151]=0;return}function Lt(){return it(184592)|0}function Mt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function Nt(a){a=a|0;var b=0;b=c[46151]|0;c[a+16>>2]=b;c[46151]=b+1;return}function Ot(a){a=a|0;var b=0,d=0;d=a+20|0;b=(c[d>>2]|0)+-1|0;c[d>>2]=b;if(!b)jt(a,184592);return}function Pt(a){a=a|0;a=a+20|0;c[a>>2]=(c[a>>2]|0)+1;return}function Qt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+16|0;o=x;c[o>>2]=e;q=b<<2;v=vH(q)|0;m=b<<3;w=vH(m)|0;u=as(a,b)|0;a=0;while(1){if((a|0)>=(b|0))break;k=u+(a<<2)|0;j=0;while(1){if((j|0)==(b|0))break;s=(c[k>>2]|0)+(j<<2)|0;c[s>>2]=c[s>>2]<<8;j=j+1|0}a=a+1|0}if(!d)qa(92381,92389,283,92403);s=vH(m)|0;a=0;while(1){if((a|0)>=(b|0))break;h[s+(a<<3)>>3]=+h[d+(a<<3)>>3];a=a+1|0}Rt(s,b);i=0.0;n=0.0;m=1;while(1){if((m|0)>=(b|0))break;j=u+(m<<2)|0;k=d+(m<<3)|0;a=0;while(1){if((a|0)==(m|0))break;y=c[(c[j>>2]|0)+(a<<2)>>2]|0;r=+h[k>>3]-+h[d+(a<<3)>>3];i=r*r*(1.0/+(O(y,y)|0))+i;n=+B(+r)*(1.0/+(y|0))+n;a=a+1|0}m=m+1|0}r=n/i;a=0;while(1){if((a|0)>=(b|0))break;y=d+(a<<3)|0;h[y>>3]=+h[y>>3]*r;a=a+1|0}St(b,o,f,d,u);k=vH(O(q,b)|0)|0;j=0;while(1){if((j|0)>=(b|0)){k=1;break}m=k+((O(j,b)|0)<<2)|0;c[v+(j<<2)>>2]=m;o=u+(j<<2)|0;i=0.0;a=0;while(1){if((a|0)==(b|0))break;if((a|0)!=(j|0)){p=+(c[(c[o>>2]|0)+(a<<2)>>2]|0);p=-1.0/(p*p);g[m+(a<<2)>>2]=p;i=i-p}a=a+1|0}g[m+(j<<2)>>2]=i;j=j+1|0}while(1){if((k|0)>=(b|0)){j=0;break}i=+h[d+(k<<3)>>3];j=u+(k<<2)|0;a=0;while(1){if((a|0)==(k|0))break;y=(c[j>>2]|0)+(a<<2)|0;n=+(c[y>>2]|0);p=i-+h[d+(a<<3)>>3];p=n*n-p*p;q=~~+C(+p);q=p>0.0?q:0;c[(c[u+(a<<2)>>2]|0)+(k<<2)>>2]=q;c[y>>2]=q;a=a+1|0}k=k+1|0}while(1){if((j|0)>=(b|0)){q=0;a=0;break}n=+h[e+(j<<3)>>3];m=w+(j<<3)|0;h[m>>3]=0.0;o=u+(j<<2)|0;k=v+(j<<2)|0;a=0;i=0.0;while(1){if((a|0)==(b|0))break;if((a|0)!=(j|0)){p=+g[(c[k>>2]|0)+(a<<2)>>2]*+(c[(c[o>>2]|0)+(a<<2)>>2]|0);i=i+(n>=+h[e+(a<<3)>>3]?-p:p);h[m>>3]=i}a=a+1|0}j=j+1|0}while(1){if(!(a<<24>>24==0&(q|0)<200)){t=42;break}if((Eq(v,e,w,b,f,b,1)|0)<0){a=1;break}else{a=1;o=0}while(1){if((o|0)>=(b|0))break;p=+h[e+(o<<3)>>3];k=u+(o<<2)|0;m=v+(o<<2)|0;i=0.0;j=0;while(1){if((j|0)==(b|0))break;do if((j|0)!=(o|0)){n=+g[(c[m>>2]|0)+(j<<2)>>2]*+(c[(c[k>>2]|0)+(j<<2)>>2]|0);if(!(p>=+h[e+(j<<3)>>3])){i=i+n;break}else{i=i+-n;break}}while(0);j=j+1|0}j=w+(o<<3)|0;p=+h[j>>3];if(i!=p?+B(+(1.0-i/p))>1.0e-05:0){h[j>>3]=i;a=0}o=o+1|0}q=q+1|0}a:do if((t|0)==42){i=1.0/r;a=0;while(1){if((a|0)>=(b|0)){a=0;break a}y=d+(a<<3)|0;h[y>>3]=+h[y>>3]*i;y=e+(a<<3)|0;h[y>>3]=+h[y>>3]*i;a=a+1|0}}while(0);D_(c[u>>2]|0);D_(u);D_(c[v>>2]|0);D_(v);D_(s);D_(w);l=x;return a|0}function Rt(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=0;d=0.0;while(1){if((c|0)>=(b|0))break;e=+h[a+(c<<3)>>3]+d;c=c+1|0;d=e}d=d/+(b|0);c=0;while(1){if((c|0)>=(b|0))break;f=a+(c<<3)|0;h[f>>3]=+h[f>>3]-d;c=c+1|0}f=b+-1|0;Cs(a,0,f,1.0/+Bs(a,0,f),a);return}function St(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;k=Tt(f,a)|0;l=vH(8)|0;if(!e){f=0;j=0}else{g=vH(a<<3)|0;f=0;while(1){if((f|0)>=(a|0))break;h[g+(f<<3)>>3]=+h[e+(f<<3)>>3];f=f+1|0}Rt(g,a);f=g;j=g}Ut(k,a,b,l,f,d);e=0;while(1){if((e|0)==1)break;g=l+(e<<3)|0;i=b+(e<<2)|0;f=0;while(1){if((f|0)>=(a|0))break;d=+C(+(+B(+(+h[g>>3]))));m=(c[i>>2]|0)+(f<<3)|0;h[m>>3]=+h[m>>3]*d;f=f+1|0}e=e+1|0}D_(c[k>>2]|0);D_(k);D_(l);D_(j);return}function Tt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+16|0;f=o;n=b<<2;e=vH(O(n,b)|0)|0;n=vH(n)|0;d=0;while(1){if((d|0)>=(b|0))break;c[n+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}m=Wt(a,b,f)|0;h=+g[f>>2];e=0;k=1;while(1){if((e|0)>=(b|0))break;f=a+(e<<2)|0;i=m+(e<<2)|0;j=n+(e<<2)|0;d=0;while(1){if((d|0)==(k|0))break;p=+(c[(c[f>>2]|0)+(d<<2)>>2]|0);p=+g[m+(d<<2)>>2]+ +g[i>>2]-p*p-h;g[(c[j>>2]|0)+(d<<2)>>2]=p;g[(c[n+(d<<2)>>2]|0)+(e<<2)>>2]=p;d=d+1|0}e=e+1|0;k=k+1|0}D_(m);l=o;return n|0}function Ut(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0;r=b<<3;q=vH(r)|0;r=vH(r)|0;n=1.0-g;o=(b|0)<1?b:1;p=b+-1|0;k=(f|0)==0;j=0;a:while(1){if((j|0)>=(o|0))break;l=c[d+(j<<2)>>2]|0;do{i=0;while(1){if((i|0)==(b|0))break;h[l+(i<<3)>>3]=+((g2()|0)%100|0|0);i=i+1|0}if(k)i=0;else{As(l,0,p,-+zs(f,0,p,l),f);i=0}while(1){if((i|0)==(j|0))break;s=d+(i<<2)|0;m=-+zs(c[s>>2]|0,0,p,l);As(l,0,p,m,c[s>>2]|0);i=i+1|0}g=+Bs(l,0,p)}while(g<1.0e-10);Cs(l,0,p,1.0/g,l);do{Ds(r,0,p,l);Vt(a,b,b,l,q,f);Ds(l,0,p,q);i=0;while(1){if((i|0)==(j|0))break;s=d+(i<<2)|0;m=-+zs(c[s>>2]|0,0,p,l);As(l,0,p,m,c[s>>2]|0);i=i+1|0}g=+Bs(l,0,p);if(g<1.0e-10)break a;Cs(l,0,p,1.0/g,l);m=+zs(l,0,p,r)}while(+B(+m)>3]=m*g;j=j+1|0}while(1){if((j|0)>=(o|0))break;k=c[d+(j<<2)>>2]|0;i=0;while(1){if((i|0)>=(b|0)){i=0;break}h[k+(i<<3)>>3]=+((g2()|0)%100|0|0);i=i+1|0}while(1){if((i|0)>=(j|0))break;s=d+(i<<2)|0;n=-+zs(c[s>>2]|0,0,p,k);As(k,0,p,n,c[s>>2]|0);i=i+1|0}Cs(k,0,p,1.0/+Bs(k,0,p),k);h[e+(j<<3)>>3]=0.0;j=j+1|0}l=o+-1|0;j=0;while(1){if((j|0)>=(l|0))break;a=e+(j<<3)|0;f=j+1|0;g=+h[a>>3];i=j;k=f;while(1){if((k|0)>=(o|0))break;n=+h[e+(k<<3)>>3];s=g>2]|0);s=d+(i<<2)|0;Ds(c[b>>2]|0,0,p,c[s>>2]|0);Ds(c[s>>2]|0,0,p,q);h[e+(i<<3)>>3]=+h[a>>3];h[a>>3]=g;j=f}D_(q);D_(r);return}function Vt(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0.0,l=0,m=0;j=0;while(1){if((j|0)>=(b|0))break;m=a+(j<<2)|0;k=0.0;l=0;while(1){if((l|0)>=(d|0))break;k=+h[e+(l<<3)>>3]*+g[(c[m>>2]|0)+(l<<2)>>2]+k;l=l+1|0}h[f+(j<<3)>>3]=k;j=j+1|0}j=b+-1|0;if(i|0)As(f,0,j,-+zs(f,0,j,i),i);return}function Wt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0,k=0.0,l=0,m=0.0;j=vH(b<<2)|0;k=1.0/+(b|0);e=0.0;i=0;while(1){if((i|0)>=(b|0))break;l=a+(i<<2)|0;f=0.0;h=0;while(1){if((h|0)==(b|0))break;m=+(c[(c[l>>2]|0)+(h<<2)>>2]|0);m=m*m;f=m+f;h=h+1|0;e=m+e}g[j+(i<<2)>>2]=k*f;i=i+1|0}g[d>>2]=e/+(O(b,b)|0);return j|0}function Xt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0;q=O(d,d)|0;r=vH(q<<3)|0;s=vH(d<<3)|0;e=0;while(1){if((e|0)>=(d|0))break;h[s+(e<<3)>>3]=+h[c+(e<<3)>>3];e=e+1|0}e=0;while(1){if((e|0)>=(q|0))break;h[r+(e<<3)>>3]=+h[a+(e<<3)>>3];e=e+1|0}p=d+-1|0;g=0;o=0;a:while(1){if((o|0)<(p|0)){f=0.0;e=o}else{l=21;break}while(1){if((e|0)>=(d|0))break;t=+B(+(+h[a+((O(e,d)|0)+o<<3)>>3]));m=t=(d|0))break;l=a+(e+i<<3)|0;t=+h[l>>3];m=a+(e+n<<3)|0;h[l>>3]=+h[m>>3];h[m>>3]=t;e=e+1|0}m=c+(g<<3)|0;t=+h[m>>3];j=c+(o<<3)|0;h[m>>3]=+h[j>>3];h[j>>3]=t;m=o+1|0;k=a+(n+o<<3)|0;e=m;while(1){if((e|0)>=(d|0)){o=m;continue a}l=O(e,d)|0;f=+h[a+(l+o<<3)>>3]/+h[k>>3];i=c+(e<<3)|0;h[i>>3]=+h[i>>3]-+h[j>>3]*f;i=0;while(1){if((i|0)>=(d|0))break;u=a+(i+l<<3)|0;h[u>>3]=+h[u>>3]-+h[a+(i+n<<3)>>3]*f;i=i+1|0}e=e+1|0}}if((l|0)==21){f=+h[a+(q+-1<<3)>>3];if(+B(+f)<1.0e-10)l=33;else{h[b+(p<<3)>>3]=+h[c+(p<<3)>>3]/f;e=0;while(1){if((e|0)>=(p|0)){e=0;break}g=d-e|0;i=g+-2|0;f=+h[c+(i<<3)>>3];j=b+(i<<3)|0;h[j>>3]=f;k=O(i,d)|0;g=g+-1|0;while(1){if((g|0)>=(d|0))break;t=f-+h[b+(g<<3)>>3]*+h[a+(g+k<<3)>>3];h[j>>3]=t;g=g+1|0;f=t}h[j>>3]=f/+h[a+(k+i<<3)>>3];e=e+1|0}while(1){if((e|0)>=(d|0)){e=0;break}h[c+(e<<3)>>3]=+h[s+(e<<3)>>3];e=e+1|0}while(1){if((e|0)>=(q|0))break;h[a+(e<<3)>>3]=+h[r+(e<<3)>>3];e=e+1|0}D_(r);D_(s)}}if((l|0)==33){k3(92418)|0;D_(r);D_(s)}return}function Yt(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;s=l;l=l+16|0;r=s;nr();Kt();Ir();c[46147]=jb[d&3]()|0;Kr();q=r+8|0;p=jb[d&3]()|0;e=0.0;f=0.0;a:while(1){n=(p|0)==0;o=p+8|0;while(1){if(!(Er()|0)){Fr(r);e=+h[r>>3];f=+h[q>>3]}if(!n){if(Er()|0)break;g=+h[o>>3];if(g>3]>2]|0;Nt(j);rr(c[t+8>>2]|0,a[t+16>>0]|0,j);rr(c[v+8>>2]|0,a[v+16>>0]|0,j);Rr(t);Dr(v);Rr(v);v=+h[m+8>>3]>+h[u+8>>3];t=v&1;k=v?u:m;u=or(k,v?m:u)|0;m=Lr(u,t)|0;Or(b,m);rr(u,(t^1)&255,j);Ot(j);j=Mr(b,m)|0;if(j|0){Dr(b);Br(b,j,+Mt(j,k))}b=Mr(m,i)|0;if(!b)continue;Br(m,b,+Mt(b,k))}b=Pr(p)|0;k=Sr(b)|0;i=or(Vr(b)|0,p)|0;m=Lr(i,0)|0;Or(b,m);j=Mr(b,m)|0;if(j|0){Dr(b);Br(b,j,+Mt(j,p))}i=Lr(i,1)|0;Or(m,i);b=Mr(i,k)|0;if(b|0)Br(i,b,+Mt(b,p));p=jb[d&3]()|0}b=c[46090]|0;while(1){b=Sr(b)|0;if((b|0)==(c[46091]|0))break;pr(c[b+8>>2]|0)}l=s;return}function Zt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g+8|0;e=g;do if((ay(a)|0)!=1){_t(a);if(!b)b=$t(a)|0;d=au(a,b)|0;if(0){h=c[15686]|0;c[e>>2]=ry(b)|0;c[e+4>>2]=d;g1(h,92434,e)|0}if((d|0)<0){Pw(1,92468,f)|0;break}else{bu(a);cu(a,b);du(a,b);eu(a,d);break}}else{h=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0}while(0);l=g;return b|0}function _t(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ay(a)|0;d=O(d,d)|0;b=Sy(a)|0;while(1){if(!b)break;e=b+16|0;f=c[(c[e>>2]|0)+112>>2]|0;g=f+24|0;c[g>>2]=d;c[g+4>>2]=0;h[f+48>>3]=10.0;f=(mu(a,b)|0)==0;e=c[(c[e>>2]|0)+112>>2]|0;c[e>>2]=f?d:0;c[e+4>>2]=f?0:0;b=Ty(a,b)|0}return}function $t(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=(ay(a)|0)<3;b=Sy(a)|0;a:do if(!e){while(1){if(!b)break;e=c[(c[b+16>>2]|0)+112>>2]|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)lu(a,b,0);b=Ty(a,b)|0}d=0;b=0;e=Sy(a)|0;while(1){if(!e)break a;h=c[(c[e+16>>2]|0)+112>>2]|0;g=c[h>>2]|0;h=c[h+4>>2]|0;f=((d|0)<0)<<31>>31;f=h>>>0>f>>>0|(h|0)==(f|0)&g>>>0>d>>>0;d=f?g:d;b=f?e:b;e=Ty(a,e)|0}}while(0);return b|0}function au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[b+16>>2]|0)+112>>2]|0;f=d+24|0;e=c[f>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[d+32>>2]=0;iu(a,b);d=Sy(a)|0;e=y3(0,e|0,32)|0;f=z;b=0;while(1){if(!d)break;h=(c[(c[d+16>>2]|0)+112>>2]|0)+24|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if((g|0)==(e|0)&(h|0)==(f|0)){b=-1;break}i=((b|0)<0)<<31>>31;b=h>>>0>i>>>0|(h|0)==(i|0)&g>>>0>b>>>0?g:b;d=Ty(a,d)|0}return b|0}function bu(a){a=a|0;var b=0,d=0,e=0,f=0;d=Sy(a)|0;while(1){if(!d)break;b=c[(c[d+16>>2]|0)+112>>2]|0;e=b+16|0;a:do if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)while(1){e=b+8|0;f=e;f=s3(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[e>>2]=f;c[e+4>>2]=z;b=c[b+32>>2]|0;if(!b)break a;b=c[(c[b+16>>2]|0)+112>>2]|0}while(0);d=Ty(a,d)|0}return}function cu(a,b){a=a|0;b=b|0;h[(c[(c[b+16>>2]|0)+112>>2]|0)+40>>3]=6.283185307179586;hu(a,b);return}function du(a,b){a=a|0;b=b|0;h[(c[(c[b+16>>2]|0)+112>>2]|0)+48>>3]=0.0;gu(a,b);return}function eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i;g=fu(a,b)|0;if(0){e=c[15686]|0;D1(92524,e)|0;d=0;while(1){if((d|0)>(b|0))break;h[f>>3]=+h[g+(d<<3)>>3];g1(e,92543,f)|0;d=d+1|0}D1(150517,e)|0}d=Sy(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;e=c[f+112>>2]|0;j=+h[g+(c[e+24>>2]<<3)>>3];e=e+48|0;k=+E(+(+h[e>>3]))*j;f=c[f+132>>2]|0;h[f>>3]=k;h[f+8>>3]=+F(+(+h[e>>3]))*j;d=Ty(a,d)|0}D_(g);l=i;return}function fu(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;m=uH((d<<3)+8|0)|0;b=NL(b,nx(c[b+60>>2]|0,0,98262,0)|0,0)|0;a:do if(!b){f=1.0;e=0.0;b=1}else{i=0.0;e=0.0;g=1;b:while(1){if((g|0)>(d|0)){f=i;b=g;break a}f=+c2(b,k);if(!(f>0.0)){f=i;b=g;break a}i=f>.02?f:.02;e=i+e;j=g+1|0;h[m+(g<<3)>>3]=e;b=c[k>>2]|0;while(1){g=a[b>>0]|0;if(!(g<<24>>24)){g=j;continue b}if(!(g<<24>>24==58|(B$(g<<24>>24)|0)!=0)){g=j;continue b}b=b+1|0}}}while(0);while(1){if((b|0)>(d|0))break;i=e+f;h[m+(b<<3)>>3]=i;b=b+1|0;e=i}l=n;return m|0}function gu(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0.0;d=c[(c[b+16>>2]|0)+112>>2]|0;if(!(c[d+32>>2]|0))e=0.0;else e=+h[d+48>>3]-+h[d+40>>3]*.5;g=Jx(a,b)|0;while(1){if(!g)break;d=c[g>>2]&3;f=c[((d|0)==3?g:g+48|0)+40>>2]|0;if((f|0)==(b|0))f=c[((d|0)==2?g:g+-48|0)+40>>2]|0;d=c[(c[f+16>>2]|0)+112>>2]|0;if((c[d+32>>2]|0)==(b|0)?(i=d+48|0,!(+h[i>>3]!=10.0)):0){j=+h[d+40>>3];h[i>>3]=j*.5+e;e=j+e;d=d+16|0;if(!((c[d>>2]|0)==0&(c[d+4>>2]|0)==0))gu(a,f)}g=Kx(a,g,b)|0}return}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0;e=c[(c[b+16>>2]|0)+112>>2]|0;f=e+8|0;g=+h[e+40>>3]/(+((c[f>>2]|0)>>>0)+4294967296.0*+((c[f+4>>2]|0)>>>0));f=Jx(a,b)|0;while(1){if(!f)break;e=c[f>>2]&3;d=c[((e|0)==3?f:f+48|0)+40>>2]|0;if((d|0)==(b|0))d=c[((e|0)==2?f:f+-48|0)+40>>2]|0;e=c[(c[d+16>>2]|0)+112>>2]|0;if(((c[e+32>>2]|0)==(b|0)?(i=e+40|0,!(+h[i>>3]!=0.0)):0)?(j=e+8|0,h[i>>3]=g*(+((c[j>>2]|0)>>>0)+4294967296.0*+((c[j+4>>2]|0)>>>0)),e=e+16|0,!((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)):0)hu(a,d);f=Kx(a,f,b)|0}return}function iu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+16|0;n=p;o=nx(b,2,98515,0)|0;c[n+4>>2]=0;c[n>>2]=0;ju(n,d);j=(o|0)==0;a:while(1){k=ku(n)|0;if(!k)break;m=k+16|0;h=c[(c[(c[m>>2]|0)+112>>2]|0)+24>>2]|0;g=Jx(b,k)|0;h=s3(0,h|0,0,1)|0;h=y3(h|0,z|0,32)|0;i=z;while(1){if(!g)continue a;if(!((!j?(a[(yx(g,o)|0)>>0]|0)==48:0)?!(b$(yx(g,o)|0,135312)|0):0)){d=c[g>>2]&3;e=c[((d|0)==3?g:g+48|0)+40>>2]|0;if((e|0)==(k|0))e=c[((d|0)==2?g:g+-48|0)+40>>2]|0;d=c[(c[e+16>>2]|0)+112>>2]|0;f=d+24|0;q=f;r=c[q+4>>2]|0;if(i>>>0>>0|((i|0)==(r|0)?h>>>0<(c[q>>2]|0)>>>0:0)){r=f;c[r>>2]=h;c[r+4>>2]=i;c[d+32>>2]=k;r=(c[(c[m>>2]|0)+112>>2]|0)+16|0;q=r;q=s3(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;c[r>>2]=q;c[r+4>>2]=z;ju(n,e)}}g=Kx(b,g,k)|0}}l=p;return}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=uH(8)|0;c[d>>2]=b;b=a+4|0;e=c[b>>2]|0;c[((e|0)==0?a:e+4|0)>>2]=d;c[b>>2]=d;return}function ku(a){a=a|0;var b=0,d=0;d=c[a>>2]|0;if(d){b=c[d>>2]|0;c[a>>2]=c[d+4>>2];D_(d);if(!(c[a>>2]|0))c[a+4>>2]=0}else b=0;return b|0}function lu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=c[c[(c[b+16>>2]|0)+112>>2]>>2]|0;g=Jx(a,b)|0;h=s3(0,h|0,0,1)|0;h=y3(h|0,z|0,32)|0;i=z;while(1){if(!g)break;f=c[g>>2]&3;e=c[((f|0)==3?g:g+48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((f|0)==2?g:g+-48|0)+40>>2]|0;if((e|0)!=(d|0)?(j=c[(c[e+16>>2]|0)+112>>2]|0,f=j,k=c[f+4>>2]|0,i>>>0>>0|((i|0)==(k|0)?h>>>0<(c[f>>2]|0)>>>0:0)):0){k=j;c[k>>2]=h;c[k+4>>2]=i;lu(a,e,b)}g=Kx(a,g,b)|0}return}function mu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=0;g=Jx(a,b)|0;while(1){if(!g){d=1;break}e=c[g>>2]&3;d=c[((e|0)==3?g:g+48|0)+40>>2]|0;if((d|0)==(b|0))d=c[((e|0)==2?g:g+-48|0)+40>>2]|0;if((d|0)!=(b|0)){if(f)if((f|0)==(d|0))d=f;else{d=0;break}}else d=f;f=d;g=Kx(a,g,b)|0}return d|0}function nu(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0;b=l;l=l+32|0;e=b;d=nx(a,1,92551,0)|0;g=nx(a,0,92551,0)|0;a=ou(a,g,d,nx(a,0,92556,0)|0)|0;d=a+16|0;f=+C(+(+h[a>>3]+.1));zu(e,0.0,0.0,f,f);c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];c[d+20>>2]=c[e+20>>2];c[d+24>>2]=c[e+24>>2];c[d+28>>2]=c[e+28>>2];pu(a);qu(a);ru(a);l=b;return}function ou(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=uH(72)|0;c[o+60>>2]=0;c[o+56>>2]=a;k=a+16|0;f=0.0;l=0;i=1;j=0;m=0;while(1){g=c[k>>2]|0;if((i|0)>(c[g+180>>2]|0))break;g=ou(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,b,d,e)|0;f=+h[g>>3]+f;if(j|0)c[j+52>>2]=g;l=l+1|0;i=i+1|0;j=g;m=(m|0)==0?g:m}n=Sy(a)|0;g=m;while(1){if(!n)break;i=n+16|0;if(!(c[c[(c[i>>2]|0)+112>>2]>>2]|0)){k=uu(n,d)|0;f=+h[k>>3]+f;if(j|0)c[j+52>>2]=k;c[c[(c[i>>2]|0)+112>>2]>>2]=a;i=l+1|0;j=k;g=(g|0)==0?k:g}else i=l;n=Ty(a,n)|0;l=i}c[o+64>>2]=l;if(!l)f=+wu(a,b);else{h[o+8>>3]=f;f=+vu(o,e)}h[o>>3]=f;c[o+48>>2]=g;return o|0}function pu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;p=l;l=l+176|0;f=p+144|0;n=p+64|0;k=p+32|0;i=p;o=c[a+64>>2]|0;a:do if(o|0){m=uH(o<<2)|0;b=a+48|0;e=0;d=b;while(1){d=c[d>>2]|0;if((e|0)>=(o|0))break;c[m+(e<<2)>>2]=d;e=e+1|0;d=d+52|0}_0(m,o,4,79);j=uH(o<<3)|0;d=0;while(1){if((d|0)>=(o|0))break;h[j+(d<<3)>>3]=+h[c[m+(d<<2)>>2]>>3];d=d+1|0}g=+h[a+8>>3];if(+h[a>>3]==g){i=a+16|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[f+16>>2]=c[i+16>>2];c[f+20>>2]=c[i+20>>2];c[f+24>>2]=c[i+24>>2];c[f+28>>2]=c[i+28>>2];i=xu(o,j,f)|0}else{q=+h[a+40>>3];r=+h[a+32>>3];h[i>>3]=+h[a+16>>3];h[i+8>>3]=+h[a+24>>3];s=q-r;g=(r+q-+C(+(g*4.0+s*s)))*.5;h[i+16>>3]=r-g;h[i+24>>3]=q-g;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[f+16>>2]=c[i+16>>2];c[f+20>>2]=c[i+20>>2];c[f+24>>2]=c[i+24>>2];c[f+28>>2]=c[i+28>>2];i=xu(o,j,f)|0}if(0){f=c[15686]|0;q=+h[a+24>>3];r=+h[a+32>>3];s=+h[a+40>>3];h[k>>3]=+h[a+16>>3];h[k+8>>3]=q;h[k+16>>3]=r;h[k+24>>3]=s;g1(f,92603,k)|0}e=c[15686]|0;d=0;while(1){if((d|0)>=(o|0))break;k=(c[m+(d<<2)>>2]|0)+16|0;f=i+(d<<5)|0;c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];c[k+12>>2]=c[f+12>>2];c[k+16>>2]=c[f+16>>2];c[k+20>>2]=c[f+20>>2];c[k+24>>2]=c[f+24>>2];c[k+28>>2]=c[f+28>>2];if(0){g=+h[f>>3];r=+h[i+(d<<5)+16>>3];u=r*.5;q=+h[i+(d<<5)+8>>3];s=+h[i+(d<<5)+24>>3];t=s*.5;h[n>>3]=+h[j+(d<<3)>>3];h[n+8>>3]=g-u;h[n+16>>3]=q-t;h[n+24>>3]=u+g;h[n+32>>3]=t+q;h[n+40>>3]=s*r;h[n+48>>3]=g;h[n+56>>3]=q;h[n+64>>3]=r;h[n+72>>3]=s;g1(e,92620,n)|0}d=d+1|0}D_(m);D_(j);D_(i);d=0;while(1){b=c[b>>2]|0;if((d|0)>=(o|0))break a;if(!(c[b+60>>2]|0))pu(b);b=b+52|0;d=d+1|0}}while(0);l=p;return}function qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;f=l;l=l+48|0;e=f;if(c[a+60>>2]|0){k=+h[a+24>>3];i=+h[a+32>>3];g=+h[a+40>>3];b=c[a+56>>2]|0;d=b+16|0;j=c[d>>2]|0;h[j+16>>3]=+h[a+16>>3];h[j+24>>3]=k;a=c[d>>2]|0;h[a+32>>3]=i*.013888888888888888;h[a+40>>3]=g*.013888888888888888;bN(b,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1);su(b);if(0){j=c[15686]|0;a=ry(b)|0;d=c[d>>2]|0;m=+h[d+16>>3];g=+h[d+24>>3];i=+h[d+80>>3];k=+h[d+96>>3]+ +h[d+88>>3];c[e>>2]=a;h[e+8>>3]=m;h[e+16>>3]=g;h[e+24>>3]=i;h[e+32>>3]=k;g1(j,92562,e)|0}}else{b=a+48|0;while(1){b=c[b>>2]|0;if(!b)break;qu(b);b=b+52|0}i=+h[a+32>>3];m=+h[a+40>>3];g=+h[a+16>>3]-i*.5;k=+h[a+24>>3]-m*.5;j=c[(c[a+56>>2]|0)+16>>2]|0;h[j+16>>3]=g;h[j+24>>3]=k;h[j+32>>3]=g+i;h[j+40>>3]=k+m}l=f;return}function ru(a){a=a|0;var b=0,d=0,e=0;e=c[a+64>>2]|0;b=a+48|0;d=0;while(1){b=c[b>>2]|0;if((d|0)>=(e|0))break;ru(b);b=b+52|0;d=d+1|0}D_(a);return}function su(b){b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;d=g+8|0;e=c[46380]|0;if(e|0?(a[(yx(b,e)|0)>>0]|0)==0:0){h[f>>3]=+h[(c[b+16>>2]|0)+80>>3]*.7;Y0(d,92597,f)|0;rx(b,c[46380]|0,d)|0}dM(b);l=g;return}function tu(a,b){a=a|0;b=b|0;var d=0.0;d=+h[c[a>>2]>>3]-+h[c[b>>2]>>3];return (d<0.0?1:(d>0.0)<<31>>31)|0}function uu(a,b){a=a|0;b=b|0;var d=0;d=uH(72)|0;h[d>>3]=+wu(a,b);c[d+60>>2]=1;c[d+56>>2]=a;return d|0}function vu(a,b){a=a|0;b=b|0;var d=0.0;d=+LL(c[a+56>>2]|0,b,0.0,0.0);if(d==0.0)d=+h[a+8>>3];else{d=+C(+(+h[a+8>>3]))+d*2.0;d=d*d}return +d}function wu(a,b){a=a|0;b=b|0;var c=0.0;c=+LL(a,b,1.0,0.0);return +(c==0.0?1.0e3:c*1.0e3)}function xu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i;e=0;f=0.0;while(1){if((e|0)>=(a|0))break;j=+h[b+(e<<3)>>3]+f;e=e+1|0;f=j}if(f>+h[d+24>>3]*+h[d+16>>3]+.001)e=0;else{e=uH(a<<5)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[g+16>>2]=c[d+16>>2];c[g+20>>2]=c[d+20>>2];c[g+24>>2]=c[d+24>>2];c[g+28>>2]=c[d+28>>2];yu(a,b,e,0,0.0,1.0,0.0,1.0,g)}l=i;return e|0}function yu(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=+i;j=+j;k=k|0;var m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0;z=l;l=l+112|0;y=z+72|0;u=z+40|0;p=z+32|0;m=z;w=k+16|0;q=+h[w>>3];x=k+24|0;r=+h[x>>3];v=+h[k+16+((!(q>3];do if((a|0)>=1){if(0){A=c[15686]|0;B=+h[k+8>>3];h[m>>3]=+h[k>>3];h[m+8>>3]=q;h[m+16>>3]=B;h[m+24>>3]=r;g1(A,92657,m)|0;c[p>>2]=e;g1(A,92703,p)|0}if(!e){i=+h[b>>3];B=v*v;v=i/B;B=B/i;c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yu(a,b,d,1,i,i,i,v>B?v:B,y);break}if((a|0)>(e|0)?(t=+h[b+(e<<3)>>3],n=tg?g:t,t=t+i,o=t/v,o=o*o,B=o/s,o=n/o,o=B>o?B:o,o<=j):0){c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yu(a,b,d,e+1|0,n,s,t,o,y);break}q=i/v;if(0){A=c[15686]|0;c[u>>2]=e;h[u+8>>3]=i;h[u+16>>3]=v;h[u+24>>3]=q;g1(A,92728,u)|0}n=+h[w>>3];if(v==n){o=1.0/q;p=k+8|0;n=+h[k>>3]-n*.5;m=0;while(1){if((m|0)>=(e|0))break;h[d+(m<<5)+24>>3]=q;B=+h[b+(m<<3)>>3]*o;h[d+(m<<5)+16>>3]=B;h[d+(m<<5)+8>>3]=(+h[x>>3]-q)*.5+ +h[p>>3];h[d+(m<<5)>>3]=B*.5+n;n=B+n;m=m+1|0}h[p>>3]=+h[p>>3]-q*.5;m=1}else{o=1.0/q;n=+h[x>>3]*.5+ +h[k+8>>3];m=0;while(1){if((m|0)>=(e|0))break;h[d+(m<<5)+16>>3]=q;B=+h[b+(m<<3)>>3]*o;h[d+(m<<5)+24>>3]=B;h[d+(m<<5)>>3]=(q-+h[w>>3])*.5+ +h[k>>3];h[d+(m<<5)+8>>3]=n-B*.5;n=n-B;m=m+1|0}h[k>>3]=+h[k>>3]+q*.5;m=0}A=k+16+(m<<3)|0;h[A>>3]=+h[A>>3]-q;c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yu(a-e|0,b+(e<<3)|0,d+(e<<5)|0,0,0.0,0.0,0.0,1.0,y)}while(0);l=z;return}function zu(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function Au(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=l;l=l+96|0;C=D+48|0;B=D+24|0;A=D+16|0;z=D+8|0;u=D+80|0;v=D;w=a+16|0;x=d+4|0;y=u+4|0;s=Sy(a)|0;e=0;f=0;i=0;j=0;while(1){if(!s)break;t=Ex(a,s)|0;q=e;r=j;while(1){if(!t)break;e=(b[(c[t+16>>2]|0)+168>>1]|0)==0;do if((s|0)==(c[((c[t>>2]&3|0)==2?t:t+-48|0)+40>>2]|0))if(e){j=q;e=r}else{if(!f){e=uH(96)|0;c[e+84>>2]=uH(((ay(a)|0)<<5)+11520|0)|0;f=e}else e=r;Mm(f,t,c[(c[w>>2]|0)+248>>2]|0);j=q}else if(!e){i=Bu(t,d)|0;j=i+8|0;if(ms(c[j>>2]|0,c[i>>2]|0)|0){k=sU(c[j>>2]|0,c[i>>2]|0)|0;if(!k){Pw(0,92781,z)|0;j=1;e=r;break}else e=t;while(1){if(!e)break;E=e+16|0;F=(c[E>>2]|0)+144|0;Sm(v,e,k,0,c[j>>2]|0,c[i>>2]|0);H=v;G=c[H+4>>2]|0;c[F>>2]=c[H>>2];c[F+4>>2]=G;Um(a,e,c[j>>2]|0,c[i>>2]|0,0);e=c[(c[E>>2]|0)+172>>2]|0}Cu(i);j=q;e=r;break}if(!q){qq(u,a);e=YD(a,8,8)|0;Pw(0,92865,A)|0;n=+(e|0);o=+g[d>>2];p=+g[x>>2];if(!(o>=n)&!(p>=n)){m=+g[u>>2];n=+g[y>>2];if(!(!(m<=o)&!(n<=p))){h[C>>3]=m;h[C+8>>3]=n;h[C+16>>3]=o;h[C+24>>3]=p;Pw(3,92981,C)|0}}else{c[B>>2]=e;h[B+8>>3]=o;h[B+16>>3]=p;Pw(3,92931,B)|0}j=1;e=r}else{j=q;e=r}}else{j=q;e=r}while(0);t=Gx(a,t)|0;q=j;r=e}s=Ty(a,s)|0;e=q;j=r}Du(i);if(f|0){D_(c[f+84>>2]|0);D_(j)}l=D;return e|0}function Bu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+16|0;m=p+4|0;n=p;e=c[b>>2]&3;f=c[((e|0)==2?b:b+-48|0)+40>>2]|0;e=c[((e|0)==3?b:b+48|0)+40>>2]|0;q=f+16|0;h=c[(c[q>>2]|0)+212>>2]|0;c[m>>2]=h;i=e+16|0;g=c[(c[i>>2]|0)+212>>2]|0;c[n>>2]=g;k=uH(12)|0;b=h;j=g;if(a[(c[q>>2]|0)+118>>0]|0){b=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2]|0;c[m>>2]=b;f=h;h=b}if(!(a[(c[i>>2]|0)+118>>0]|0))i=j;else{i=c[(c[(c[j+16>>2]|0)+140>>2]|0)+48>>2]|0;c[n>>2]=i;e=g;g=i}h=c[(c[(c[h+16>>2]|0)+140>>2]|0)+44>>2]|0;g=c[(c[(c[g+16>>2]|0)+140>>2]|0)+44>>2]|0;if((h|0)<=(g|0))if((g|0)>(h|0)){Eu(k,g,e,h,n,d);b=c[n>>2]|0;g=b;e=n;o=11}else h=i;else{Eu(k,h,f,g,m,d);b=c[m>>2]|0;f=b;g=e;e=m;o=11}while(1){if((o|0)==11){c[e>>2]=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2];e=g;b=c[m>>2]|0;h=c[n>>2]|0}if((b|0)==(h|0))break;Fu(k,b,0,f,d);Fu(k,h,e,0,d);c[m>>2]=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2];f=b;g=h;e=n;b=h;o=11}Fu(k,h,e,f,d);l=p;return k|0}function Cu(a){a=a|0;c[a>>2]=0;return}function Du(a){a=a|0;if(a|0){D_(c[a+8>>2]|0);D_(a)}return}function Eu(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=f;while(1){h=c[i>>2]|0;if((b|0)<=(e|0))break;Fu(a,h,d,0,g);b=b+-1|0;i=(c[(c[h+16>>2]|0)+140>>2]|0)+48|0;d=h}c[f>>2]=d;return}function Fu(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=Sy(d)|0;while(1){if(!h)break;i=c[h+16>>2]|0;if(!((h|0)==(f|0)|((h|0)==(e|0)?1:(c[i+212>>2]|0)!=(d|0)))?(a[i+118>>0]|0)==0:0)Gu(b,Pm(h,g,0)|0);h=Ty(d,h)|0}i=d+16|0;d=1;while(1){h=c[i>>2]|0;if((d|0)>(c[h+180>>2]|0))break;h=c[(c[h+184>>2]|0)+(d<<2)>>2]|0;if(!((h|0)==(e|0)|(h|0)==(f|0)))Gu(b,Hu(h,g)|0);d=d+1|0}return}function Gu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;f=c[e>>2]|0;g=a+8|0;d=c[g>>2]|0;do if((f|0)==(c[a>>2]|0))if(!d){d=vH(400)|0;c[g>>2]=d;c[e>>2]=100;break}else{c[e>>2]=f<<1;d=xH(d,f<<3)|0;c[g>>2]=d;break}while(0);g=c[a>>2]|0;c[a>>2]=g+1;c[d+(g<<2)>>2]=b;return}function Hu(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0;m=uH(8)|0;b=c[b+16>>2]|0;e=+h[b+16>>3];l=+h[b+24>>3];f=+h[b+32>>3];k=+h[b+40>>3];c[m+4>>2]=4;b=uH(64)|0;c[m>>2]=b;if(!(a[d+8>>0]|0)){p=+g[d>>2];o=+g[d+4>>2];i=(f+e)*.5*(p+-1.0);n=(k+l)*.5*(o+-1.0);j=e*p-i;i=f*p-i;f=k*o-n;e=l*o-n}else{i=+g[d>>2];p=+g[d+4>>2];j=e-i;i=f+i;f=k+p;e=l-p}h[b>>3]=j;h[b+8>>3]=e;h[b+16>>3]=j;h[b+24>>3]=f;h[b+32>>3]=i;h[b+40>>3]=f;h[b+48>>3]=i;h[b+56>>3]=e;return m|0}function Iu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+160|0;n=o+16|0;j=o+8|0;g=o;k=o+24|0;m=uH(ay(b)|0)|0;h=b+16|0;f=c[c[(c[h>>2]|0)+140>>2]>>2]|0;a:do if(!f){g=0;f=0}else{p=ry(b)|0;i=c[46152]|0;c[g>>2]=p;c[g+4>>2]=i;Y0(k,93041,g)|0;i=vA(b,k,1)|0;Az(i,134401,280,1)|0;g=uH(56)|0;c[(c[i+16>>2]|0)+140>>2]=g;c[g>>2]=f;c[g+4>>2]=c[(c[(c[h>>2]|0)+140>>2]|0)+4>>2];while(1){g=c[f+4>>2]|0;if(!g){g=i;f=1;break a}if(!(a[m+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0))Ju(b,g,i,m);f=f+16|0}}while(0);h=0;i=Sy(b)|0;while(1){if(!i)break;p=c[i+16>>2]|0;if((a[m+(c[p+120>>2]|0)>>0]|0)==0?(a[p+119>>0]|0)==3:0){if(!g){p=ry(b)|0;g=(c[46152]|0)+f|0;c[j>>2]=p;c[j+4>>2]=g;Y0(k,93041,j)|0;g=vA(b,k,1)|0;Az(g,134401,280,1)|0;p=uH(56)|0;c[(c[g+16>>2]|0)+140>>2]=p;f=f+1|0}Ju(b,i,g,m);h=1}i=Ty(b,i)|0}if(g|0)vD(g)|0;g=Sy(b)|0;while(1){if(!g)break;if(!(a[m+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0)){j=ry(b)|0;p=(c[46152]|0)+f|0;c[n>>2]=j;c[n+4>>2]=p;Y0(k,93049,n)|0;p=vA(b,k,1)|0;Az(p,134401,280,1)|0;j=uH(56)|0;c[(c[p+16>>2]|0)+140>>2]=j;Ju(b,g,p,m);vD(p)|0;f=f+1|0}g=Ty(b,g)|0}D_(m);c[46152]=(c[46152]|0)+f;if(d|0)c[d>>2]=f;if(e|0)c[e>>2]=h;i=uH((f<<2)+4|0)|0;h=i;g=wA(b)|0;while(1){if(!g)break;c[h>>2]=g;h=h+4|0;g=xA(g)|0;f=f+-1|0}if(!f){c[h>>2]=0;l=o;return i|0}else qa(93057,93068,134,93075);return 0}function Ju(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a[f+(c[(c[d+16>>2]|0)+120>>2]|0)>>0]=1;Xy(e,d,1)|0;i=Jx(b,d)|0;while(1){if(!i)break;h=c[i>>2]&3;g=c[((h|0)==3?i:i+48|0)+40>>2]|0;if((g|0)==(d|0))g=c[((h|0)==2?i:i+-48|0)+40>>2]|0;if(!(a[f+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0))Ju(b,g,e,f);i=Kx(b,i,d)|0}return}function Ku(a){a=a|0;var b=0;b=vH(24)|0;c[46153]=b;c[b>>2]=Cw(18100,c[4555]|0)|0;c[b+16>>2]=0;c[b+12>>2]=0;c[b+4>>2]=Lu(a)|0;return b|0}function Lu(a){a=a|0;var b=0,d=0;b=vH(16)|0;c[b+12>>2]=0;d=vH(a*20|0)|0;c[b>>2]=d;c[b+8>>2]=d+(a*20|0);c[b+4>>2]=d;return b|0}function Mu(a,b,d){a=a|0;b=b|0;d=d|0;d=Ou(c[46153]|0)|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=0;return d|0}function Nu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b>>2]|0)-(c[d>>2]|0)|0;if(!a)a=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;return a|0}function Ou(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+8|0;a=c[f>>2]|0;b=c[a+4>>2]|0;if((b|0)==(c[a+8>>2]|0)){d=a+12|0;e=c[d>>2]|0;if(!e){a=Lu(((b-(c[a>>2]|0)|0)/20|0)<<1)|0;c[d>>2]=a}else a=e;c[f>>2]=a;b=c[a>>2]|0;c[a+4>>2]=b}c[a+4>>2]=b+20;return b|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+12|0;d=c[f>>2]|0;if((d|0)<(b|0)){e=d<<1;e=(e|0)<(b|0)?b:e;b=a+16|0;d=c[b>>2]|0;if(d|0)D_(d);c[b>>2]=vH(e<<3)|0;c[f>>2]=e}return}function Qu(a){a=a|0;var b=0;b=c[a>>2]|0;nb[c[b>>2]&63](b,0,64)|0;c[a+20>>2]=c[a+16>>2];b=c[a+4>>2]|0;c[a+8>>2]=b;c[b+4>>2]=c[b>>2];return}function Ru(a){a=a|0;yw(c[a>>2]|0)|0;Su(c[a+4>>2]|0);D_(c[a+16>>2]|0);D_(a);return}function Su(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;D_(c[a>>2]|0);D_(a);a=b}return}function Tu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;h=g+12|0;c[h>>2]=b;c[h+4>>2]=d;i=c[a>>2]|0;h=(nb[c[i>>2]&63](i,h,1)|0)+8|0;c[h>>2]=Uu(a,e,c[h>>2]|0)|0;if(0>2){i=c[15686]|0;h=ry(e)|0;c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=h;g1(i,93085,f)|0}l=g;return}function Uu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+20|0;a=c[e>>2]|0;c[e>>2]=a+8;c[a>>2]=b;c[a+4>>2]=d;return a|0}function Vu(a,b){a=a|0;b=b|0;Jw(c[a>>2]|0,b,a)|0;return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+32|0;f=e;c[f>>2]=b;c[f+4>>2]=d;d=c[a>>2]|0;d=nb[c[d>>2]&63](d,f,4)|0;l=e;return d|0}function Xu(a,b){a=a|0;b=b|0;if((ay(a)|0)==1){a=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}else{Yu(a);if(!((QL(xx(b,93102)|0)|0)<<24>>24))b=tv(a,183128)|0;else b=Zu(a)|0;Cv(a,b,183128);_u(b)}return}function Yu(a){a=a|0;var b=0;b=ez(c[c[(c[(Sy(a)|0)+16>>2]|0)+112>>2]>>2]|0)|0;a=c[46154]|0;if((b|0)!=(a|0)){c[45785]=0;c[46154]=b;c[46155]=nx(b,0,93111,0)|0;c[46156]=nx(c[46154]|0,1,93119,0)|0;c[46157]=nx(c[46154]|0,1,93136,0)|0;a=c[46154]|0}c[46158]=xx(a,93136)|0;nv(183128);c[45784]=1;h[22895]=+LL(c[46154]|0,c[46155]|0,1.0,0.0);c[45786]=c[46156];c[45787]=c[46157];c[45788]=c[46158];return}function Zu(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+144|0;e=f;d=f+8|0;b=c[45785]|0;c[45785]=b+1;c[e>>2]=b;Y0(d,93152,e)|0;d=ov(vA(a,d,1)|0)|0;e=d+8|0;b=Sy(a)|0;while(1){if(!b)break;Xy(c[e>>2]|0,b,1)|0;c[(c[(c[b+16>>2]|0)+112>>2]|0)+12>>2]=d;b=Ty(a,b)|0}l=f;return d|0}function _u(a){a=a|0;Bv(a);return}function $u(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;av(f,c);bv(a,b,c,f);cv(b,f,d);dv(f);l=e;return}function av(a,b){a=a|0;b=b|0;c[a>>2]=vH(b<<4)|0;c[a+4>>2]=b;c[a+8>>2]=0;return}function bv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+64|0;r=D+32|0;u=D+48|0;v=D+16|0;w=D;t=b<<2;A=vH(t)|0;C=vH(t)|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;s=vH(t)|0;t=vH(t)|0;f=0;while(1){if((f|0)>=(b|0))break;c[s+(f<<2)>>2]=f;f=f+1|0}q=b+-1|0;js(a,s,0,q);f=0;while(1){if((f|0)>=(b|0))break;c[t+(c[s+(f<<2)>>2]<<2)>>2]=f;f=f+1|0}fv(u,a,s,b);f=1;while(1){if((f|0)>=(b|0)){f=0;break}c[A+(c[s+(f<<2)>>2]<<2)>>2]=c[s+(f+-1<<2)>>2];f=f+1|0}while(1){if((f|0)>=(q|0))break;p=f+1|0;c[C+(c[s+(f<<2)>>2]<<2)>>2]=c[s+(p<<2)>>2];f=p}k=e+8|0;m=e+4|0;n=v+4|0;o=w+4|0;p=w+8|0;j=0;while(1){if((j|0)>=(d|0))break;if(!((gv(u,v)|0)<<24>>24))break;f=c[k>>2]|0;b=c[m>>2]|0;if((f|0)<(b|0))b=c[e>>2]|0;else{c[m>>2]=b<<1;b=F_(c[e>>2]|0,b<<5)|0;c[e>>2]=b;f=c[k>>2]|0}c[k>>2]=f+1;f=b+(f<<4)|0;c[f>>2]=c[v>>2];c[f+4>>2]=c[v+4>>2];c[f+8>>2]=c[v+8>>2];c[f+12>>2]=c[v+12>>2];f=c[v>>2]|0;b=c[t+(f<<2)>>2]|0;g=c[n>>2]|0;i=c[t+(g<<2)>>2]|0;if((b|0)>0?(x=c[s+(b+-1<<2)>>2]|0,y=C+(x<<2)|0,(c[t+(c[y>>2]<<2)>>2]|0)<(i|0)):0){c[w>>2]=x;c[o>>2]=g;h[p>>3]=+h[a+(g<<3)>>3]-+h[a+(x<<3)>>3];c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];hv(u,r);c[y>>2]=g;c[A+(g<<2)>>2]=x}if((i|0)<(q|0)?(z=c[s+(i+1<<2)>>2]|0,B=A+(z<<2)|0,(c[t+(c[B>>2]<<2)>>2]|0)>(b|0)):0){c[w>>2]=f;c[o>>2]=z;h[p>>3]=+h[a+(z<<3)>>3]-+h[a+(f<<3)>>3];c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];hv(u,r);c[B>>2]=f;c[C+(f<<2)>>2]=z}j=j+1|0}D_(A);D_(C);D_(s);D_(t);iv(u);l=D;return}function cv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=vH(a<<2)|0;l=b+8|0;i=c[l>>2]|0;j=(i<<1)+a|0;h=j<<2;e=vH(h)|0;h=vH(h)|0;f=0;while(1){if((f|0)>=(a|0))break;c[k+(f<<2)>>2]=1;f=f+1|0}f=0;while(1){if((f|0)>=(i|0)){f=0;break}n=c[b>>2]|0;m=c[n+(f<<4)+4>>2]|0;n=k+(c[n+(f<<4)>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;m=k+(m<<2)|0;c[m>>2]=(c[m>>2]|0)+1;f=f+1|0}while(1){if((f|0)>=(j|0))break;g[h+(f<<2)>>2]=1.0;f=f+1|0}i=vH(a*20|0)|0;c[d>>2]=i;f=0;while(1){if((f|0)>=(a|0))break;c[i+(f*20|0)>>2]=1;c[i+(f*20|0)+8>>2]=h;c[i+(f*20|0)+4>>2]=e;c[e>>2]=f;g[h>>2]=0.0;n=c[k+(f<<2)>>2]|0;h=h+(n<<2)|0;e=e+(n<<2)|0;f=f+1|0}D_(k);while(1){e=c[l>>2]|0;if(!e)break;n=e+-1|0;c[l>>2]=n;m=c[b>>2]|0;ev(i,c[m+(n<<4)>>2]|0,c[m+(n<<4)+4>>2]|0)}return}function dv(a){a=a|0;D_(c[a>>2]|0);return}function ev(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0;f=a+(b*20|0)|0;h=c[f>>2]|0;i=c[a+(b*20|0)+4>>2]|0;e=0;while(1){if((e|0)>=(h|0)){j=4;break}if((c[i+(e<<2)>>2]|0)==(d|0))break;else e=e+1|0}if((j|0)==4?(c[f>>2]=h+1,c[i+(h<<2)>>2]=d,i=c[a+(d*20|0)+4>>2]|0,h=a+(d*20|0)|0,j=c[h>>2]|0,c[h>>2]=j+1,c[i+(j<<2)>>2]=b,c[a+8>>2]|0):0){j=c[a+(b*20|0)+8>>2]|0;g[j>>2]=+g[j>>2]+-1.0;j=c[a+(d*20|0)+8>>2]|0;g[j>>2]=+g[j>>2]+-1.0}return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0,l=0;f=e+-1|0;c[a+4>>2]=f;c[a+8>>2]=f;c[a>>2]=vH(f<<4)|0;e=0;while(1){if((e|0)>=(f|0))break;l=c[d+(e<<2)>>2]|0;g=e+1|0;k=c[d+(g<<2)>>2]|0;j=+h[b+(k<<3)>>3]-+h[b+(l<<3)>>3];i=c[a>>2]|0;c[i+(e<<4)>>2]=l;c[i+(e<<4)+4>>2]=k;h[i+(e<<4)+8>>3]=j;e=g}e=(f|0)/2|0;while(1){if((e|0)<=-1)break;jv(a,e);e=e+-1|0}return}function gv(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;if(!(c[d>>2]|0))a=0;else{e=c[a>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];b=c[a>>2]|0;e=b+((c[d>>2]|0)+-1<<4)|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[d>>2]=(c[d>>2]|0)+-1;jv(a,0);a=1}return a|0}function hv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;j=a+4|0;g=c[j>>2]|0;d=a+8|0;if((g|0)==(c[d>>2]|0)){c[d>>2]=g<<1;d=F_(c[a>>2]|0,g<<5)|0;c[a>>2]=d;k=a;i=c[j>>2]|0}else{k=a;i=g;d=c[a>>2]|0}c[j>>2]=i+1;j=d+(g<<4)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];while(1){if((g|0)<=0)break;d=c[k>>2]|0;e=+h[d+(g<<4)+8>>3];a=g>>>1;f=+h[d+(a<<4)+8>>3];if(!(e>2]|0}j=d+(g<<4)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];b=d+(a<<4)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];j=(c[k>>2]|0)+(a<<4)|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];g=a}l=n;return}function iv(a){a=a|0;D_(c[a>>2]|0);return}function jv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m;j=a+4|0;while(1){d=b<<1;g=d|1;if((d|0)<(c[j>>2]|0)){n=c[a>>2]|0;e=+h[n+(d<<4)+8>>3];f=+h[n+(b<<4)+8>>3];if(!(e>2]|0)){n=c[a>>2]|0;e=+h[n+(g<<4)+8>>3];f=+h[n+(d<<4)+8>>3];if(!(e>2]|0;n=g+(d<<4)|0;c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];g=g+(b<<4)|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];n=(c[a>>2]|0)+(b<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];b=d}l=m;return}function kv(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0;l=(f|0)!=0;if(!l){f=vH(b<<3)|0;if(!(kt(a,b,f,b)|0))m=3;else{a=1;m=17}}else m=3;if((m|0)==3){k=uH(b<<2)|0;c[g>>2]=k;a=0;while(1){if((a|0)>=(b|0))break;c[k+(a<<2)>>2]=a;a=a+1|0}a=b+-1|0;js(f,k,0,a);n=+h[f+(c[k>>2]<<3)>>3];e=(+h[f+(c[k+(a<<2)>>2]<<3)>>3]-n)*e/+(a|0);e=e=(b|0))break;n=+h[f+(c[k+(g<<2)>>2]<<3)>>3];a=a+(n-d>e&1)|0;g=g+1|0;d=n}c[j>>2]=a;a:do if(!a){k=vH(4)|0;c[i>>2]=k;c[k>>2]=b}else{j=vH(a<<2)|0;c[i>>2]=j;a=0;g=1;while(1){if((g|0)>=(b|0))break a;if(+h[f+(c[k+(g<<2)>>2]<<3)>>3]-+h[f+(c[k+(g+-1<<2)>>2]<<3)>>3]>e){c[j+(a<<2)>>2]=g;a=a+1|0}g=g+1|0}}while(0);if(l)a=0;else{a=0;m=17}}if((m|0)==17)D_(f);return a|0}function lv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c[46159]|0;if(d|0)xn(d);c[46159]=wn(b,b,0.0)|0;d=c[46160]|0;if(d|0)D_(d);c[46160]=uH(b<<2)|0;d=c[46161]|0;if(d|0)D_(d);n=uH(b<<3)|0;c[46161]=n;o=c[46159]|0;p=c[46160]|0;i=0;while(1){if((i|0)>=(b|0)){e=10;break}e=a+(i<<2)|0;g=o+(i<<2)|0;f=0.0;d=0;while(1){if((d|0)==(b|0))break;j=+h[(c[e>>2]|0)+(d<<3)>>3];h[(c[g>>2]|0)+(d<<3)>>3]=j;j=+B(+j);f=f>3]=1.0/f;c[p+(i<<2)>>2]=i;i=i+1|0}a:do if((e|0)==10){m=b+-1|0;d=0;l=0;b:while(1){if((l|0)<(m|0)){e=l;k=d;f=0.0}else break;while(1){if((e|0)>=(b|0))break;a=c[p+(e<<2)>>2]|0;j=+B(+(+h[(c[o+(a<<2)>>2]|0)+(l<<3)>>3]));j=+h[n+(a<<3)>>3]*j;a=f>2]|0;a=p+(k<<2)|0;c[d>>2]=c[a>>2];c[a>>2]=i}g=c[o+(c[d>>2]<<2)>>2]|0;a=l+1|0;f=1.0/+h[g+(l<<3)>>3];e=a;while(1){if((e|0)>=(b|0)){d=k;l=a;continue b}i=c[o+(c[p+(e<<2)>>2]<<2)>>2]|0;d=i+(l<<3)|0;j=+h[d>>3]*f;h[d>>3]=j;c:do if(j!=0.0){d=a;while(1){if((d|0)>=(b|0))break c;q=i+(d<<3)|0;h[q>>3]=+h[q>>3]-+h[g+(d<<3)>>3]*j;d=d+1|0}}while(0);e=e+1|0}}d=+h[(c[o+(c[p+(m<<2)>>2]<<2)>>2]|0)+(m<<3)>>3]!=0.0&1}else if((e|0)==15){h[n+(i<<3)>>3]=0.0;d=0}while(0);return d|0}function mv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0;k=c[46159]|0;l=c[46160]|0;j=0;while(1){if((j|0)>=(d|0)){e=d;break}g=c[l+(j<<2)>>2]|0;i=k+(g<<2)|0;f=0.0;e=0;while(1){if((e|0)==(j|0))break;f=+h[a+(e<<3)>>3]*+h[(c[i>>2]|0)+(e<<3)>>3]+f;e=e+1|0}h[a+(j<<3)>>3]=+h[b+(g<<3)>>3]-f;j=j+1|0}while(1){b=e+-1|0;if((e|0)<=0)break;g=l+(b<<2)|0;f=0.0;while(1){if((e|0)>=(d|0))break;f=+h[a+(e<<3)>>3]*+h[(c[k+(c[g>>2]<<2)>>2]|0)+(e<<3)>>3]+f;e=e+1|0}e=a+(b<<3)|0;h[e>>3]=(+h[e>>3]-f)/+h[(c[k+(c[g>>2]<<2)>>2]|0)+(b<<3)>>3];e=b}return}function nv(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;return}function ov(a){a=a|0;var b=0;b=uH(64)|0;nv(b+36|0);c[b+8>>2]=a;return b|0}function pv(a){a=a|0;if(a|0){Lv(c[a+32>>2]|0);D_(a)}return}function qv(a){a=a|0;return ay(c[a+8>>2]|0)|0}function rv(a,b){a=a|0;b=b|0;var d=0,e=0;c[b+4>>2]=0;d=a+4|0;e=c[d>>2]|0;c[((e|0)==0?a:e+4|0)>>2]=b;c[d>>2]=b;return}function sv(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(!d){c[a>>2]=b;a=a+4|0}else c[b+4>>2]=d;c[a>>2]=b;return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;uv(a,b);j=c[b>>2]|0;h=c[j+4>>2]|0;while(1){if(!h)break;k=c[h+8>>2]|0;i=Sy(k)|0;d=c[(c[i+16>>2]|0)+112>>2]|0;a=c[d+16+4>>2]|0;d=c[d+8>>2]|0;f=i;i=Ty(k,i)|0;while(1){if(!i)break;e=c[(c[i+16>>2]|0)+112>>2]|0;g=c[e+16+4>>2]|0;if((g|0)<(a|0)){f=i;d=c[e+8>>2]|0;a=g}i=Ty(k,i)|0}i=c[(c[d+16>>2]|0)+112>>2]|0;k=i+4|0;c[k>>2]=c[k>>2]|8;c[h>>2]=f;k=c[h+4>>2]|0;rv((c[i+12>>2]|0)+36|0,h);h=k}nv(b);return j|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;g=i+8|0;e=c[b+24>>2]|0;if(!((e|0)!=0?(d=az(a,e,0)|0,(d|0)!=0):0))f=3;a:do if((f|0)==3){e=b+20|0;b:do if(c[e>>2]|0){d=Sy(a)|0;while(1){if(!d)break b;if((PL(c[c[(c[d+16>>2]|0)+112>>2]>>2]|0,c[e>>2]|0,0)|0)<<24>>24)break a;d=Ty(a,d)|0}}while(0);d=Sy(a)|0}while(0);if(0){f=c[15686]|0;c[h>>2]=ry(d)|0;g1(f,93141,h)|0}c[g+4>>2]=0;c[g>>2]=0;vv(a,d,b,1,g);l=i;return}function vv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+8|0;k=c[l>>2]|0;c[l>>2]=k+1;l=b+16|0;c[(c[(c[l>>2]|0)+112>>2]|0)+16+4>>2]=k;c[(c[(c[l>>2]|0)+112>>2]|0)+24>>2]=k;k=(e|0)==0;j=Jx(a,b)|0;while(1){if(!j)break;e=c[j>>2]&3;g=c[((e|0)==2?j:j+-48|0)+40>>2]|0;if((g|0)==(b|0)){e=c[((e|0)==3?j:j+48|0)+40>>2]|0;g=c[(c[j+16>>2]|0)+120>>2]|0;if(!(c[g>>2]|0))c[g>>2]=-1}else{e=c[(c[j+16>>2]|0)+120>>2]|0;if(!(c[e>>2]|0)){c[e>>2]=1;e=g}else e=g}g=e+16|0;h=c[(c[g>>2]|0)+112>>2]|0;i=c[h+16+4>>2]|0;do if(!i){c[h+8>>2]=b;wv(f,j);vv(a,e,d,0,f);i=(c[(c[l>>2]|0)+112>>2]|0)+24|0;c[i>>2]=c[(c[(c[((c[i>>2]|0)<(c[(c[(c[g>>2]|0)+112>>2]|0)+24>>2]|0)?b:e)+16>>2]|0)+112>>2]|0)+24>>2];if((c[(c[(c[g>>2]|0)+112>>2]|0)+24>>2]|0)>=(c[(c[(c[l>>2]|0)+112>>2]|0)+16+4>>2]|0)){e=0;do{h=xv(f)|0;g=(c[c[(c[h+16>>2]|0)+120>>2]>>2]|0)==1;g=c[((c[h>>2]&3|0)==((g?2:3)|0)?h:h+((g?-1:1)*48|0)|0)+40>>2]|0;if(!(c[(c[(c[g+16>>2]|0)+112>>2]|0)+12>>2]|0)){if(!e)e=yv(a,d)|0;zv(e,g)}}while((h|0)!=(j|0));if(e|0){if((c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==0?(qv(e)|0)>1:0)zv(e,b);if(!k?(c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==(e|0):0){sv(d,e);break}rv(d,e)}}}else{g=c[(c[l>>2]|0)+112>>2]|0;if((c[g+8>>2]|0)!=(e|0)){h=g+24|0;g=c[h>>2]|0;c[h>>2]=(g|0)<(i|0)?g:i}}while(0);j=Kx(a,j,b)|0}if(!k?(c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==0:0){l=yv(a,d)|0;zv(l,b);sv(d,l)}return}function wv(a,b){a=a|0;b=b|0;c[(c[(c[b+16>>2]|0)+120>>2]|0)+4>>2]=c[a>>2];c[a>>2]=b;b=a+4|0;c[b>>2]=(c[b>>2]|0)+1;return}function xv(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;if(!b)qa(135312,93172,65,93184);d=a+4|0;e=c[d>>2]|0;if((e|0)>0){c[a>>2]=c[(c[(c[b+16>>2]|0)+120>>2]|0)+4>>2];c[d>>2]=e+-1;return b|0}else qa(93162,93172,61,93184);return 0}function yv(a,b){a=a|0;b=b|0;return ov(Av(a,b)|0)|0}function zv(a,b){a=a|0;b=b|0;Xy(c[a+8>>2]|0,b,1)|0;c[(c[(c[b+16>>2]|0)+112>>2]|0)+12>>2]=a;return}function Av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+144|0;f=d;e=d+8|0;g=b+12|0;b=c[g>>2]|0;c[g>>2]=b+1;c[f>>2]=b;Y0(e,93152,f)|0;b=vA(a,e,1)|0;Az(b,134401,280,1)|0;l=d;return b|0}function Bv(a){a=a|0;var b=0,d=0;b=c[a+36>>2]|0;while(1){if(!b)break;d=c[b+4>>2]|0;Bv(b);b=d}pv(a);return}function Cv(a,b,c){a=a|0;b=b|0;c=c|0;Dv(a,b,+h[c+32>>3]);return}function Dv(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;e=b+36|0;f=0;while(1){e=c[e>>2]|0;if(!e)break;Dv(a,e,d);e=e+4|0;f=f+1|0}e=Vv(a,b,d)|0;c[b+32>>2]=e;a=Sv(e)|0;if((f|0)>0)d=+Ev(f,a,e,b,d);else d=3.141592653589793;if((((a|0)==1?(g=c[b>>2]|0,g|0):0)?c[(c[(c[g+16>>2]|0)+112>>2]|0)+8>>2]|0:0)?(i=b+48|0,h[i>>3]=d,d<0.0):0)h[i>>3]=d+6.283185307179586;return}function Ev(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+48|0;t=v;u=uH(a*56|0)|0;c[t+40>>2]=c[e+36>>2];p=e+16|0;j=+h[p>>3];q=t+8|0;h[q>>3]=j;h[t>>3]=j;c[t+44>>2]=c[e>>2];j=6.283185307179586/+(b|0);h[t+16>>3]=j;r=t+24|0;h[r>>3]=-1.0;s=t+32|0;h[s>>3]=-1.0;k=0;o=0;g=0.0;while(1){i=c[d>>2]|0;if(!i)break;d=c[i>>2]|0;if(!(c[(c[(c[d+16>>2]|0)+112>>2]|0)+4>>2]&8))d=o;else{n=u+(o*56|0)|0;c[n>>2]=d;h[u+(o*56|0)+8>>3]=j*+(k|0);d=o+1|0;g=+Fv(n,t,f)}k=k+1|0;o=d;d=i+4|0}a:do switch(o|0){case 1:{h[u+40>>3]=1.0;d=0;break}case 2:{j=+h[u+64>>3]-+h[u+8>>3];Gv(u,u+56|0,j>3.141592653589793?6.283185307179586-j:j);d=0;break}default:{n=u+8|0;m=u;d=0;while(1){if((d|0)>=(o|0)){d=0;break a}d=d+1|0;if((d|0)==(o|0)){i=u;j=+h[n>>3]+6.283185307179586-+h[m+8>>3];k=m+56|0}else{k=m+56|0;i=k;j=+h[m+64>>3]-+h[m+8>>3]}Gv(m,i,j);m=k}}}while(0);while(1){if((d|0)>=(o|0))break;Hv(u+(d*56|0)|0,t,b,f);d=d+1|0}D_(u);if((a|0)==1){f=g+f*.5;Iv(e,-f,0.0,0.0);h[p>>3]=+h[p>>3]+f;u=e+56|0;c[u>>2]=c[u>>2]|1}else h[p>>3]=+h[q>>3];l=v;return +((+h[s>>3]+ +h[r>>3])*.5+-3.141592653589793)}function Fv(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0;i=0;f=0.0;g=0.0;e=b+40|0;while(1){j=c[e>>2]|0;if(!j)break;e=c[j>>2]|0;if(!e)e=0;else e=c[(c[(c[e+16>>2]|0)+112>>2]|0)+8>>2]|0;if((e|0)==(c[a>>2]|0)){k=+h[j+16>>3];e=i+1|0;f=f+d+k*2.0;g=g>3]=f;c[a+48>>2]=i;h[a+16>>3]=g+d+ +h[b>>3];h[a+24>>3]=g;return +g}function Gv(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=+h[b+16>>3];d=+h[a+16>>3];c=(d*+h[b+32>>3]+e*+h[a+32>>3])/(c*2.0*e*d);c=c<1.0?1.0:c;a=a+40|0;if(c>+h[a>>3])h[a>>3]=c;a=b+40|0;if(c>+h[a>>3])h[a>>3]=c;return}function Hv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,G=0.0;z=b+8|0;y=+h[z>>3];A=b+24|0;k=+h[A>>3];B=b+32|0;j=+h[B>>3];f=+h[a+16>>3]*+h[a+40>>3];x=(d|0)==1;if(x){v=+h[a+32>>3];g=v*.15915494309189535;g=f>g?f:g;f=g*6.283185307179586-v;if(f>0.0){e=f/+(c[a+48>>2]|0)+e;l=0.0;f=g}else{l=0.0;f=g}}else l=+h[a+8>>3]-+h[a+32>>3]/(f*2.0);q=+h[a+24>>3]+f;r=q>y;s=a+48|0;t=((c[s>>2]|0)+1|0)/2|0;u=1.0/f;v=e/f*.5;w=a+8|0;n=b+40|0;o=0;p=0.0;g=l;while(1){n=c[n>>2]|0;if(!n)break;i=c[n>>2]|0;if(!i)i=0;else i=c[(c[(c[i+16>>2]|0)+112>>2]|0)+8>>2]|0;if((i|0)==(c[a>>2]|0)?(Sv(c[n+32>>2]|0)|0)>=1:0){l=+h[n+16>>3];m=l*u;do if(!x)if((c[s>>2]|0)==1){g=+h[w>>3];break}else{g=g+v+m;break}else{if(g!=0.0)g=(c[s>>2]|0)==2?3.141592653589793:m+g;j=g;k=k<0.0?g:k}while(0);G=+E(+g)*f;D=+F(+g)*f;Iv(n,G,D,+Jv(n,G,D,g));g=(x?(l+e)*u:m+v)+g;o=o+1|0;i=o;l=(o|0)==(t|0)?g:p}else{i=o;l=p}n=n+4|0;o=i;p=l}f=r?q:y;if((d|0)>1?(C=c[a>>2]|0,(C|0)==(c[b+44>>2]|0)):0)h[(c[(c[C+16>>2]|0)+112>>2]|0)+24>>3]=p;h[z>>3]=f;h[A>>3]=k;h[B>>3]=j;return}function Iv(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0;m=c[a+8>>2]|0;n=e!=0.0;f=Sy(m)|0;while(1){if(!f)break;k=c[(c[f+16>>2]|0)+132>>2]|0;i=+h[k>>3];l=k+8|0;g=+h[l>>3];if(n){o=+E(+e);p=+F(+e);j=o*i-p*g;g=p*i+o*g}else j=i;h[k>>3]=j+b;h[l>>3]=g+d;f=Ty(m,f)|0}f=a+36|0;while(1){f=c[f>>2]|0;if(!f)break;Iv(f,b,d,e);f=f+4|0}return}function Jv(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0.0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;m=c[a+8>>2]|0;f=+h[a+48>>3];do if(!(f>=0.0)){if((Sv(c[a+32>>2]|0)|0)==2){f=e+-1.5707963267948966;break}l=c[a>>2]|0;n=l+16|0;i=c[(c[n>>2]|0)+132>>2]|0;f=+h[i>>3]+b;k=+h[i+8>>3]+d;f=k*k+f*f;i=Sy(m)|0;g=l;while(1){if(!i)break;if((i|0)!=(l|0)?(o=c[(c[i+16>>2]|0)+132>>2]|0,j=+h[o>>3]+b,k=+h[o+8>>3]+d,j=k*k+j*j,j>3];k=+h[a+16>>3]-j;g=c[n>>2]|0;i=c[g+132>>2]|0;f=+h[i>>3];if(f>-k?(c[a+56>>2]&1|0)!=0:0){d=+C(+(d*d+b*b));b=+K(+(+h[i+8>>3]),+(f+k));f=+E(+b);f=e+1.5707963267948966-b-+I(+((k-j/f)/d*f));break}else{f=+K(+(+h[i+8>>3]),+f);f=e+3.141592653589793-f-+h[(c[g+112>>2]|0)+24>>3];f=f>6.283185307179586?f+-6.283185307179586:f;break}}else f=0.0}else{f=3.141592653589793-f+e;f=f<0.0?f+6.283185307179586:f}while(0);return +f}function Kv(){return uH(12)|0}function Lv(a){a=a|0;var b=0,d=0;if(a|0){b=c[a>>2]|0;while(1){if(!b)break;d=c[b+4>>2]|0;D_(b);b=d}D_(a)}return}function Mv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=Nv(d)|0;d=a+8|0;c[d>>2]=(c[d>>2]|0)+1;d=a+4|0;e=c[d>>2]|0;if((b|0)==0|(e|0)==(b|0)){c[(e|0?e+4|0:a)>>2]=f;c[f+8>>2]=e;e=0}else{e=b+4|0;d=c[e>>2]|0;c[e>>2]=f;c[f+8>>2]=b;e=d;d=d+8|0}c[d>>2]=f;c[f+4>>2]=e;return}function Nv(a){a=a|0;var b=0;b=uH(12)|0;c[b>>2]=a;return b|0}function Ov(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=c[a>>2]|0;d=b;while(1){if(!b)break;g=b+4|0;e=c[g>>2]|0;f=b+8|0;c[g>>2]=c[f>>2];c[f>>2]=e;b=e}f=a+4|0;g=c[f>>2]|0;c[f>>2]=d;c[a>>2]=g;return a|0}function Pv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)!=(b|0)){f=b+8|0;e=c[f>>2]|0;c[a>>2]=b;c[f>>2]=0;b=a+4|0;a=c[b>>2]|0;c[a+4>>2]=d;c[d+8>>2]=a;c[b>>2]=e;c[e+4>>2]=0}return}function Qv(a){a=a|0;var b=0,d=0,e=0;d=Kv()|0;e=d+4|0;b=0;while(1){a=c[a>>2]|0;if(!a)break;Mv(d,b,c[a>>2]|0);b=c[e>>2]|0;a=a+4|0}return d|0} +function Bb(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Cb(){return l|0}function Db(a){a=a|0;l=a}function Eb(a,b){a=a|0;b=b|0;l=a;m=b}function Fb(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function Gb(a){a=a|0;z=a}function Hb(){return z|0}function Ib(a){a=a|0;c[45884]=a;return 0}function Jb(){return c[45884]|0}function Kb(a,b){a=a|0;b=b|0;Oa(0,a|0,b|0)|0;return}function Lb(a){a=a|0;c[46369]=a;return}function Mb(a){a=a|0;if(a|0)c[46363]=a;return}function Nb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i+4|0;g=i;c[f>>2]=0;h=ZC()|0;cD(h,10976);cD(h,17220);cD(h,17440);Ow(1)|0;Nw(18)|0;Tz(1);while(1){a=Gy(a)|0;e=c[f>>2]|0;if(!a)break;if(!e){_C(h,a,d)|0;bD(h,a,b,f,g)|0;WB(h,a)|0}$x(a)|0;a=191979}l=i;return e|0}function Ob(a){a=a|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;f=c[(c[a+16>>2]|0)+8>>2]|0;a=a+64|0;switch(c[a>>2]|0){case 0:{uI(f);break}case 1:{if(b[(c[f+16>>2]|0)+136>>1]&1)FM(f);break}case 4:case 5:case 6:{rI(f,e,d);Rb(f,c[e>>2]|0,c[d>>2]|0,c[a>>2]|0);break}default:{}}l=g;return}function Pb(a){a=a|0;var b=0,d=0,e=0,f=0;d=c[(c[a+16>>2]|0)+8>>2]|0;if(!(c[45885]|0)){c[45885]=c[4652];c[45886]=57;c[45887]=19}e=d+64|0;f=(c[e>>2]|0)+8|0;b=c[f>>2]|0;c[f>>2]=183540;switch(c[a+64>>2]|0){case 2:{hI(a,d,a,0);break}case 3:{hI(a,d,a,1);break}case 1:case 0:{if(!(c[a+152>>2]&134217728))NA(d,a)|0;break}case 6:case 5:case 4:{Qb(d);if(!(c[a+152>>2]&134217728))NA(d,a)|0;break}default:{}}c[(c[e>>2]|0)+8>>2]=b;return}function Qb(b){b=b|0;var d=0,e=0;d=c[45889]|0;if((d|0)!=(c[45888]|0)){e=c[c[45920]>>2]|0;if(!e){e=LM(b,0,96782,191979)|0;c[c[45920]>>2]=e;d=c[45889]|0}if(d>>>0>=(c[45890]|0)>>>0){Uw(183552,1)|0;d=c[45889]|0}a[d>>0]=0;d=c[45888]|0;c[45889]=d;rx(b,e,d)|0}if(c[(c[b+16>>2]|0)+12>>2]|0){e=c[(c[45920]|0)+4>>2]|0;d=c[45905]|0;if(d>>>0>=(c[45906]|0)>>>0){Uw(183616,1)|0;d=c[45905]|0}a[d>>0]=0;d=c[45904]|0;c[45905]=d;rx(b,e,d)|0}Ax(b,66649,c[(c[45920]|0)+8236>>2]|0,191979)|0;d=0;while(1){if((d|0)==8)break;Xw(183552+(d<<4)|0);d=d+1|0}D_(c[45920]|0);h[1]=1.0;h[5]=1.0;c[45921]=0;c[45925]=0;return}function Rb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=C_(8240)|0;c[45920]=i;a:do switch(g|0){case 6:{b[i+8232>>1]=14;g=66665;break}case 5:{b[i+8232>>1]=12;g=66669;break}default:{g=xx(d,66649)|0;if((g|0?a[g>>0]|0:0)?(h=Sb(g)|0,(h&65535)>10):0){i=c[45920]|0;b[i+8232>>1]=h;break a}g=Sb(66661)|0;i=c[45920]|0;b[i+8232>>1]=g;g=66661}}while(0);c[i+8236>>2]=g;j=d+16|0;g=c[j>>2]|0;if(!(c[g+180>>2]|0))h=0;else{h=LM(d,0,96782,191979)|0;i=c[45920]|0;g=c[j>>2]|0}c[i>>2]=h;if(!(a[g+113>>0]&8))g=0;else g=LM(d,0,66673,191979)|0;c[(c[45920]|0)+4>>2]=g;i=LM(d,1,96782,191979)|0;c[(c[45920]|0)+8>>2]=i;i=LM(d,1,66673,191979)|0;c[(c[45920]|0)+12>>2]=i;i=LM(d,2,96782,191979)|0;g=c[45920]|0;c[g+16>>2]=i;if(!f)h=0;else{h=LM(d,2,66681,191979)|0;g=c[45920]|0}c[g+20>>2]=h;if(!e)h=0;else{h=LM(d,2,66689,191979)|0;g=c[45920]|0}c[g+24>>2]=h;h=a[(c[j>>2]|0)+113>>0]|0;if(!(h&33))i=0;else{i=LM(d,2,66673,191979)|0;g=c[45920]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+28>>2]=i;if(!(h&2))i=0;else{i=LM(d,2,66697,191979)|0;g=c[45920]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+32>>2]=i;if(!(h&4))h=0;else{h=LM(d,2,66706,191979)|0;g=c[45920]|0}c[g+36>>2]=h;g=0;while(1){if((g|0)==8)break;Tw(183552+(g<<4)|0,1024,(c[45920]|0)+40+(g<<10)|0);g=g+1|0}return}function Sb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+1040|0;h=j;g=j+8|0;f=0;d=b;a:while(1){do{e=d;d=d+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a}while(((e<<24>>24)+-48|0)>>>0>=10);if((f|0)>=1023){i=7;break}a[g+f>>0]=e;f=f+1|0}if((i|0)==7){c[h>>2]=b;Pw(0,66715,h)|0}a[g+f>>0]=0;i=(a2(g)|0)&65535;l=j;return i|0}function Tb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;d=c[c[45920]>>2]|0;b=c[45893]|0;if(b>>>0>=(c[45894]|0)>>>0){Uw(183568,1)|0;b=c[45893]|0}a[b>>0]=0;b=c[45892]|0;c[45893]=b;rx(e,d,b)|0;if(c[(c[e+16>>2]|0)+12>>2]|0){d=c[(c[45920]|0)+4>>2]|0;b=c[45909]|0;if(b>>>0>=(c[45910]|0)>>>0){Uw(183632,1)|0;b=c[45909]|0}a[b>>0]=0;b=c[45908]|0;c[45909]=b;rx(e,d,b)|0}h[2]=1.0;h[6]=1.0;c[45922]=0;c[45926]=0;return}function Ub(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[45893]|0;if((c[45892]|0)!=(b|0)){d=c[(c[45920]|0)+8>>2]|0;if(b>>>0>=(c[45894]|0)>>>0){Uw(183568,1)|0;b=c[45893]|0}a[b>>0]=0;b=c[45892]|0;c[45893]=b;rx(e,d,b)|0}b=c[45909]|0;if((c[45908]|0)!=(b|0)){d=c[(c[45920]|0)+12>>2]|0;if(b>>>0>=(c[45910]|0)>>>0){Uw(183632,1)|0;b=c[45909]|0}a[b>>0]=0;b=c[45908]|0;c[45909]=b;rx(e,d,b)|0}h[9]=1.0;h[11]=1.0;c[45929]=0;c[45931]=0;return}function Vb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[45893]|0;if((c[45892]|0)!=(b|0)){d=c[(c[45920]|0)+16>>2]|0;if(b>>>0>=(c[45894]|0)>>>0){Uw(183568,1)|0;b=c[45893]|0}a[b>>0]=0;b=c[45892]|0;c[45893]=b;rx(e,d,b)|0}b=c[45897]|0;if((c[45896]|0)!=(b|0)){d=c[(c[45920]|0)+24>>2]|0;if(b>>>0>=(c[45898]|0)>>>0){Uw(183584,1)|0;b=c[45897]|0}a[b>>0]=0;b=c[45896]|0;c[45897]=b;rx(e,d,b)|0}b=c[45901]|0;if((c[45900]|0)!=(b|0)){d=c[(c[45920]|0)+20>>2]|0;if(b>>>0>=(c[45902]|0)>>>0){Uw(183600,1)|0;b=c[45901]|0}a[b>>0]=0;b=c[45900]|0;c[45901]=b;rx(e,d,b)|0}b=c[45909]|0;if((c[45908]|0)!=(b|0)){d=c[(c[45920]|0)+28>>2]|0;if(b>>>0>=(c[45910]|0)>>>0){Uw(183632,1)|0;b=c[45909]|0}a[b>>0]=0;b=c[45908]|0;c[45909]=b;rx(e,d,b)|0}b=c[45913]|0;if((c[45912]|0)!=(b|0)){d=c[(c[45920]|0)+36>>2]|0;if(b>>>0>=(c[45914]|0)>>>0){Uw(183648,1)|0;b=c[45913]|0}a[b>>0]=0;b=c[45912]|0;c[45913]=b;rx(e,d,b)|0}b=c[45917]|0;if((c[45916]|0)!=(b|0)){d=c[(c[45920]|0)+32>>2]|0;if(b>>>0>=(c[45918]|0)>>>0){Uw(183664,1)|0;b=c[45917]|0}a[b>>0]=0;b=c[45916]|0;c[45917]=b;rx(e,d,b)|0}h[10]=1.0;h[12]=1.0;h[3]=1.0;h[4]=1.0;h[7]=1.0;h[8]=1.0;c[45930]=0;c[45932]=0;c[45923]=0;c[45924]=0;c[45927]=0;c[45928]=0;return}function Wb(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1056|0;j=t+16|0;s=t+8|0;r=t;k=t+32|0;o=c[(c[d+16>>2]|0)+12>>2]|0;p=c[11416+(o<<2)>>2]|0;Ww(p,66812)|0;g=f+4|0;dc(k,+h[(c[g>>2]|0)+16>>3]);Ww(p,k)|0;gc(d,191979,c[c[g>>2]>>2]|0);ac(d);q=a[f+48>>0]|0;q=q<<24>>24==108?-1:q<<24>>24==114&1;g=c[g>>2]|0;if(!g)g=0;else g=c[g+24>>2]&127;i=b[(c[45920]|0)+8232>>1]|0;if((i&65535)>14?(m=c[11464+((i&65535)+-15<<2)>>2]&g,n=183684+(o<<2)|0,(c[n>>2]|0)!=(m|0)):0){c[r>>2]=m;Y0(k,66815,r)|0;Ww(p,k)|0;c[n>>2]=m}r=e+8|0;h[r>>3]=+h[r>>3]+ +h[f+24>>3];Ww(p,66821)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];cc(p,j);c[s>>2]=q;Y0(k,99194,s)|0;Ww(p,k)|0;dc(k,+h[f+32>>3]);Ww(p,k)|0;gc(d,191979,c[f>>2]|0);l=t;return}function Xb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+1040|0;f=i;g=i+16|0;e=c[(c[a+16>>2]|0)+12>>2]|0;$b(a);ac(a);if(!d){a=c[11416+(e<<2)>>2]|0;Ww(a,66809)|0}else{if((d|1|0)==3)ic(a,d,b,2);else jc(a);a=c[11416+(e<<2)>>2]|0;Ww(a,66806)|0};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];cc(a,f);dc(g,+h[b+16>>3]-+h[b>>3]);Ww(a,g)|0;dc(g,+h[b+24>>3]-+h[b+8>>3]);Ww(a,g)|0;l=i;return}function Yb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$b(a);ac(a);if(!d)bc(a,112,b,c);else{if((d|1|0)==3)ic(a,d,b,c);else jc(a);bc(a,80,b,c)}return}function Zb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$b(a);ac(a);if(!f)bc(a,66,b,c);else{if((f|1|0)==3)ic(a,f,b,c);else jc(a);bc(a,98,b,c)}return}function _b(a,b,c){a=a|0;b=b|0;c=c|0;$b(a);ac(a);bc(a,76,b,c);return}function $b(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+1184|0;i=n;f=n+24|0;m=n+8|0;Tw(m,1024,n+152|0);j=b+16|0;d=c[j>>2]|0;g=+h[d+152>>3];e=8+(c[d+12>>2]<<3)|0;if(g!=+h[e>>3]){h[e>>3]=g;Ww(m,66778)|0;h[i>>3]=+h[(c[j>>2]|0)+152>>3];Y0(f,66792,i)|0;ec(f,0);Ww(m,f)|0;f=m+4|0;d=c[f>>2]|0;e=m+8|0;if(d>>>0>=(c[e>>2]|0)>>>0){Uw(m,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=41;d=c[f>>2]|0;if(d>>>0>=(c[e>>2]|0)>>>0){Uw(m,1)|0;d=c[f>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[f>>2]=d;gc(b,66797,d);d=c[j>>2]|0}d=c[d+160>>2]|0;if(d|0){j=m+4|0;k=m+8|0;a:while(1){i=d+4|0;d=c[d>>2]|0;if(!d)break;switch(a[d>>0]|0){case 102:{if(!(b$(d,108075)|0)){d=i;continue a}break}case 98:{if(!(b$(d,108057)|0)){d=i;continue a}break}case 115:{if(!(b$(d,108062)|0)){d=i;continue a}break}default:{}}Ww(m,d)|0;do{f=d;d=d+1|0}while((a[f>>0]|0)!=0);if(a[d>>0]|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=40;f=0;while(1){if(!(a[d>>0]|0))break;if(f|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=44}Ww(m,d)|0;do{e=d;d=d+1|0}while((a[e>>0]|0)!=0);f=f+1|0}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=41}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;d=c[j>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[j>>2]=d;gc(b,66797,d);d=i}Xw(m)}l=n;return}function ac(a){a=a|0;fc((c[a+16>>2]|0)+16|0);gc(a,75730,190678);return}function bc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;j=k;i=k+16|0;h=c[11416+(c[(c[b+16>>2]|0)+12>>2]<<2)>>2]|0;g=h+4|0;b=c[g>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){Uw(h,1)|0;b=c[g>>2]|0}c[g>>2]=b+1;a[b>>0]=d;c[j>>2]=f;Y0(i,66742,j)|0;Ww(h,i)|0;b=0;while(1){if((b|0)>=(f|0))break;i=e+(b<<4)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];cc(h,j);b=b+1|0}l=k;return}function cc(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+1024|0;d=c;dc(d,+h[b>>3]);Ww(a,d)|0;dc(d,+gI(+h[b+8>>3]));Ww(a,d)|0;l=c;return}function dc(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;h[d>>3]=b>-1.0e-08&b<1.0e-08?0.0:b;Y0(a,66747,d)|0;ec(a,1);l=c;return}function ec(b,c){b=b|0;c=c|0;var d=0,e=0;d=A$(b,46)|0;if(!d){if(c|0){d=b+(W_(b)|0)|0;e=10}}else{while(1){b=d+1|0;if(!(a[b>>0]|0))break;else d=b}a:while(1){switch(a[d>>0]|0){case 46:{e=5;break a}case 48:break;default:{e=6;break a}}a[d>>0]=0;d=d+-1|0}if((e|0)==5)a[d>>0]=0;else if((e|0)==6)d=d+1|0;if(c|0)e=10}if((e|0)==10){a[d>>0]=32;a[d+1>>0]=0}return}function fc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j;e=a[b+3>>0]|0;f=d[b>>0]|0;g=d[b+1>>0]|0;b=d[b+2>>0]|0;if(e<<24>>24==-1){c[h>>2]=f;c[h+4>>2]=g;c[h+8>>2]=b;Y0(190678,75610,h)|0}else{c[i>>2]=f;c[i+4>>2]=g;c[i+8>>2]=b;c[i+12>>2]=e&255;Y0(190678,66760,i)|0}l=j;return}function gc(a,b,d){a=a|0;b=b|0;d=d|0;hc(c[11416+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0,b,d);return}function hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+1040|0;h=f;g=f+8|0;i=W_(e)|0;c[h>>2]=d;c[h+4>>2]=i;Y0(g,66753,h)|0;Ww(b,g)|0;Ww(b,e)|0;e=b+4|0;d=c[e>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){Uw(b,1)|0;d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=32;l=f;return}function ic(b,d,f,i){b=b|0;d=d|0;f=f|0;i=i|0;var j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+1120|0;t=x+64|0;w=x+80|0;k=x+32|0;r=x+16|0;s=x;u=c[b+16>>2]|0;j=+(c[u+136>>2]|0)*.017453292519943295;if((e[(c[45920]|0)+8232>>1]|0)<14)jc(b);else{Tw(w,1024,x+96|0);v=(d|0)==2;if(v){aN(f,k,i,j,2);f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){Uw(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=91;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];cc(w,t);s=k+16|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];cc(w,t)}else{aN(f,k,i,0.0,3);q=+h[k+24>>3];o=+h[k>>3];if(j==0.0){n=+h[k+8>>3];p=q*.25;j=n;m=o}else{p=q*.25;y=p;m=+E(+j)*y+o;n=+h[k+8>>3];j=+F(+j)*y+n}h[r>>3]=m;h[r+8>>3]=j;h[s>>3]=o;h[s+8>>3]=n;f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){Uw(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=40;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];cc(w,t);kc(w,p);c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];cc(w,t);kc(w,q)}Ww(w,66803)|0;d=u+140|0;j=+g[d>>2];f=u+56|0;if(j>0.0){lc(w,j,f);lc(w,+g[d>>2],u+96|0)}else{lc(w,0.0,f);lc(w,1.0,u+96|0)}Yw(w)|0;k=w+4|0;d=c[k>>2]|0;i=w+8|0;f=d>>>0>=(c[i>>2]|0)>>>0;if(v){if(f){Uw(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=93}else{if(f){Uw(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=41}d=c[k>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){Uw(w,1)|0;d=c[k>>2]|0}a[d>>0]=0;v=c[w>>2]|0;c[k>>2]=v;gc(b,66800,v);Xw(w)}l=x;return}function jc(a){a=a|0;fc((c[a+16>>2]|0)+56|0);gc(a,66800,190678);return}function kc(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+1024|0;d=c;dc(d,b);Ww(a,d)|0;l=c;return}function lc(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;h[f>>3]=b;Y0(e,92597,f)|0;ec(e,1);fc(c);hc(a,e,190678);l=d;return}function mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0;e=l;l=l+1040|0;i=e;f=e+16|0;g=c[11416+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0;Ww(g,66909)|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];cc(g,i);dc(f,+h[d+16>>3]-+h[d>>3]);Ww(g,f)|0;dc(f,+h[d+24>>3]-+h[d+8>>3]);Ww(g,f)|0;gc(a,191979,c[b+8>>2]|0);l=e;return}function nc(a){a=a|0;var b=0;switch(c[a+64>>2]|0){case 0:{b=lC(c[a>>2]|0)|0;$C(b,c[(c[a+16>>2]|0)+8>>2]|0,67693,0)|0;mC(b);break}case 1:{uI(c[(c[a>>2]|0)+168>>2]|0);break}default:{}}return}function oc(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;e=c[(c[b+16>>2]|0)+8>>2]|0;if(!(c[45933]|0)){c[45933]=c[4652];c[45934]=57;c[45935]=19}c[(c[e+64>>2]|0)+8>>2]=183732;pc(e,1);c[d>>2]=0;a[d+4>>0]=(a[(c[e+16>>2]|0)+115>>0]|0)==1&1;g=c[b+64>>2]|0;a[d+5>>0]=((g|0)==0|(g|0)==3)&1;a[d+6>>0]=0;qc(e,b,1,d);l=f;return}function pc(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=wA(a)|0;while(1){if(!d)break;pc(d,0);d=xA(d)|0}a:do if(b|0){b=Sy(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Ex(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Gx(a,d)|0}b=Ty(a,b)|0}}while(0);return}function qc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q+8|0;o=q;n=(d|0)!=0;if(n){m=Cw(11836,c[4555]|0)|0;Fz(a,1,137978,12,0);Fz(a,2,137978,12,0);Fz(a,0,137978,-12,0);f=rc(a,0,m)|0;j=Sy(a)|0;i=0;g=0;while(1){if(!j)break;if(!(z$(ry(j)|0,104980,7)|0)){k=g;g=sc(m,ry(j)|0)|0}else{k=g+1|0;g=g+f|0}c[(yz(j,137978,0)|0)+8>>2]=g;h=Ex(a,j)|0;g=i;while(1){if(!h)break;c[(yz(h,137978,0)|0)+8>>2]=g;h=Gx(a,h)|0;g=g+1|0}j=Ty(a,j)|0;i=g;g=k}yw(m)|0}else f=0;m=c[e>>2]|0;c[e>>2]=m+1;tc(b,m);$B(b,94292)|0;uc(a,b,d,e);vc(a,b,e);$B(b,94263)|0;tc(b,c[e>>2]|0);if(n){c[o>>2]=f;fC(b,66912,o)}else{c[p>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,66932,p)}xc(a,b,d,wc(a,b,d,e)|0,e);yc(a,b,d,e);$B(b,150517)|0;p=(c[e>>2]|0)+-1|0;c[e>>2]=p;tc(b,p);if(n)$B(b,107982)|0;else $B(b,75253)|0;l=q;return}function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((fz(a)|0)!=(a|0)){e=b+1|0;c[(yz(a,137978,0)|0)+8>>2]=b;if(!(z$(ry(a)|0,104980,7)|0)){b=ry(a)|0;Kc(d,b,c[(yz(a,137978,0)|0)+8>>2]|0);b=e}else b=e}e=wA(a)|0;while(1){if(!e)break;a=rc(e,b,d)|0;e=xA(e)|0;b=a}return b|0}function sc(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b,512)|0;if(!a)a=-1;else a=c[a+12>>2]|0;return a|0}function tc(a,b){a=a|0;b=b|0;while(1){if((b|0)<=0)break;$B(a,90480)|0;b=b+-1|0}return}function uc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;i=h;j=ry(a)|0;tc(b,c[e>>2]|0);c[i>>2]=Bc(j,e)|0;fC(b,67020,i);if(d|0){$B(b,94263)|0;tc(b,c[e>>2]|0);j=(ey(a)|0)!=0;c[f>>2]=j?104626:134226;fC(b,67634,f);tc(b,c[e>>2]|0);j=(gy(a)|0)!=0;c[g>>2]=j?104626:134226;fC(b,67651,g)}l=h;return}function vc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;i=fz(b)|0;j=c[b>>2]&3;f=sx(i,j,0)|0;a:do if(f|0){k=e+5|0;while(1){if(!f)break a;g=yx(b,f)|0;do if(g|0){h=f+8|0;if(!(a[g>>0]|0)){g=c[h>>2]|0;if((a[g>>0]|0)!=108)break;if(b$(g,105198)|0)break}$B(d,94263)|0;tc(d,c[e>>2]|0);c[m>>2]=Bc(c[h>>2]|0,e)|0;fC(d,67070,m);if(a[k>>0]|0?Dc(c[h>>2]|0)|0:0){Ec(yx(b,f)|0,d,e);break}c[n>>2]=Bc(yx(b,f)|0,e)|0;fC(d,67077,n)}while(0);f=sx(i,j,f)|0}}while(0);l=o;return}function wc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=wA(a)|0;if(f){$B(b,94263)|0;g=c[e>>2]|0;c[e>>2]=g+1;tc(b,g);g=(d|0)!=0;if(g){$B(b,66994)|0;a=0;d=f}else{$B(b,67054)|0;tc(b,c[e>>2]|0);a=0;d=f}while(1){if(!d)break;if(!a)a=1;else $B(b,94263)|0;if(g)Cc(d,b,e);else{c[h>>2]=c[(yz(d,137978,0)|0)+8>>2];fC(b,134313,h)}d=xA(d)|0}if(g)a=1;else{c[e>>2]=(c[e>>2]|0)+-1;$B(b,150517)|0;tc(b,c[e>>2]|0);$B(b,94258)|0;a=1}}else a=0;l=i;return a|0}function xc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=Sy(a)|0;if(!g){if((d|0)!=0&(e|0)!=0){c[f>>2]=(c[f>>2]|0)+-1;$B(b,150517)|0;tc(b,c[f>>2]|0);$B(b,94258)|0}}else{$B(b,94263)|0;h=(d|0)!=0;if(h)if(!e){e=c[f>>2]|0;c[f>>2]=e+1;tc(b,e);$B(b,66994)|0;e=0}else e=0;else{e=c[f>>2]|0;c[f>>2]=e+1;tc(b,e);$B(b,67008)|0;tc(b,c[f>>2]|0);e=0}while(1){if(!g)break;if(z$(ry(g)|0,104980,7)|0){do if(e)if(h){$B(b,94263)|0;break}else{$B(b,97973)|0;break}else e=1;while(0);Ac(g,b,d,f)}g=Ty(a,g)|0}c[f>>2]=(c[f>>2]|0)+-1;$B(b,150517)|0;tc(b,c[f>>2]|0);$B(b,94258)|0}return}function yc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Sy(a)|0;a:do if(f|0){while(1){if(!f)break a;if(Ex(a,f)|0)break;f=Ty(a,f)|0}$B(b,94263)|0;i=c[e>>2]|0;c[e>>2]=i+1;tc(b,i);$B(b,66944)|0;i=(d|0)!=0;if(i)g=0;else{tc(b,c[e>>2]|0);g=0}while(1){if(!f)break;h=Ex(a,f)|0;while(1){if(!h)break;do if(g)if(i){$B(b,94263)|0;break}else{$B(b,97973)|0;break}else g=1;while(0);zc(h,b,d,e);h=Gx(a,h)|0}f=Ty(a,f)|0}c[e>>2]=(c[e>>2]|0)+-1;$B(b,150517)|0;tc(b,c[e>>2]|0);$B(b,94258)|0}while(0);return}function zc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;h=j+16|0;g=j+8|0;f=j;if(!d){c[i>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,134313,i)}else{i=c[e>>2]|0;c[e>>2]=i+1;tc(b,i);$B(b,94292)|0;tc(b,c[e>>2]|0);c[f>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,66956,f);tc(b,c[e>>2]|0);c[g>>2]=c[(yz(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0,137978,0)|0)+8>>2];fC(b,66970,g);tc(b,c[e>>2]|0);c[h>>2]=c[(yz(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0,137978,0)|0)+8>>2];fC(b,66983,h);vc(a,b,e);$B(b,150517)|0;i=(c[e>>2]|0)+-1|0;c[e>>2]=i;tc(b,i);$B(b,75253)|0}l=j;return}function Ac(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i+16|0;g=i+8|0;f=i;if(!d){c[h>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,134313,h)}else{h=c[e>>2]|0;c[e>>2]=h+1;tc(b,h);$B(b,94292)|0;tc(b,c[e>>2]|0);c[f>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,66956,f);tc(b,c[e>>2]|0);c[g>>2]=Bc(ry(a)|0,e)|0;fC(b,67020,g);vc(a,b,e);$B(b,150517)|0;h=(c[e>>2]|0)+-1|0;c[e>>2]=h;tc(b,h);$B(b,75253)|0}l=i;return}function Bc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+4|0;if(a[g>>0]|0)b=RM(b)|0;if(!(c[45936]|0)){Tw(183744,1024,0);e=b}else e=b;a:while(1){f=a[e>>0]|0;switch(f<<24>>24){case 0:break a;case 34:{Ww(183744,67033)|0;break}case 92:{Ww(183744,93534)|0;break}case 47:{Ww(183744,67036)|0;break}case 8:{Ww(183744,67039)|0;break}case 12:{Ww(183744,67042)|0;break}case 10:{Ww(183744,67045)|0;break}case 13:{Ww(183744,67048)|0;break}case 9:{Ww(183744,67051)|0;break}default:{d=c[45937]|0;if(d>>>0>=(c[45938]|0)>>>0){Uw(183744,1)|0;d=c[45937]|0}c[45937]=d+1;a[d>>0]=f}}e=e+1|0}d=c[45937]|0;if(d>>>0>=(c[45938]|0)>>>0){Uw(183744,1)|0;d=c[45937]|0}a[d>>0]=0;d=c[45936]|0;c[45937]=d;if(a[g>>0]|0)D_(b);return d|0}function Cc(a,b,c){a=a|0;b=b|0;c=c|0;qc(a,b,0,c);a=wA(a)|0;while(1){if(!a)break;$B(b,94263)|0;Cc(a,b,c);a=xA(a)|0}return}function Dc(b){b=b|0;var c=0;c=b+1|0;a:do if((a[b>>0]|0)==95){b=(a[c>>0]|0)+-100<<24>>24;switch(((b&255)>>>2|b<<6&255)<<24>>24){case 0:{if(!(b$(c,67591)|0)){b=1;break a}break}case 2:{if(!(b$(c,67597)|0)){b=1;break a}break}case 1:{if(!(b$(c,67604)|0)){b=1;break a}return (b$(c,67618)|0)==0|0}case 4:{if(!(b$(c,67611)|0)){b=1;break a}b=(b$(c,67626)|0)==0&1;break a}default:{b=0;break a}}b=0}else b=0;while(0);return b|0}function Ec(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;do if(b|0?a[b>>0]|0:0){h=oE(b)|0;if(!h){c[f>>2]=b;Pw(0,67082,f)|0;break}$B(d,150517)|0;g=c[e>>2]|0;c[e>>2]=g+1;tc(d,g);$B(d,67109)|0;g=h+8|0;b=0;f=0;while(1){if((f|0)>=(c[h>>2]|0))break;if(!b)b=1;else $B(d,94263)|0;Fc((c[g>>2]|0)+(f*80|0)|0,d,e);f=f+1|0}c[e>>2]=(c[e>>2]|0)+-1;$B(d,150517)|0;tc(d,c[e>>2]|0);$B(d,94258)|0;pE(h)}while(0);l=i;return}function Fc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;A=l;l=l+240|0;y=A+224|0;x=A+216|0;w=A+208|0;v=A+200|0;u=A+192|0;t=A+184|0;s=A+176|0;r=A+152|0;q=A+136|0;p=A+128|0;o=A+112|0;n=A+104|0;m=A+96|0;k=A+88|0;j=A+72|0;i=A+48|0;z=A+40|0;g=A+8|0;f=A;e=c[d>>2]|0;c[d>>2]=e+1;tc(b,e);$B(b,94292)|0;tc(b,c[d>>2]|0);e=c[a>>2]|0;a:do switch(e|0){case 1:case 0:{c[f>>2]=(e|0)==0?69:101;fC(b,67112,f);tc(b,c[d>>2]|0);D=+h[a+16>>3];C=+h[a+24>>3];B=+h[a+32>>3];h[g>>3]=+h[a+8>>3];h[g+8>>3]=D;h[g+16>>3]=C;h[g+24>>3]=B;fC(b,67125,g);break}case 3:case 2:{c[z>>2]=(e|0)==2?80:112;fC(b,67112,z);tc(b,c[d>>2]|0);Gc(b,a+8|0);break}case 5:case 4:{c[i>>2]=(e|0)==4?66:98;fC(b,67112,i);tc(b,c[d>>2]|0);Gc(b,a+8|0);break}case 6:{fC(b,67160,A+56|0);tc(b,c[d>>2]|0);Gc(b,a+8|0);break}case 7:{fC(b,67172,A+64|0);tc(b,c[d>>2]|0);D=+h[a+16>>3];h[j>>3]=+h[a+8>>3];h[j+8>>3]=D;fC(b,67184,j);tc(b,c[d>>2]|0);z=c[a+24>>2]|0;c[k>>2]=(z|0)==0?108:(z|0)==1?99:114;fC(b,67206,k);tc(b,c[d>>2]|0);h[m>>3]=+h[a+32>>3];fC(b,67222,m);tc(b,c[d>>2]|0);c[n>>2]=Bc(c[a+40>>2]|0,d)|0;fC(b,67239,n);break}case 9:case 8:{c[o>>2]=(e|0)==8?67:99;fC(b,67112,o);tc(b,c[d>>2]|0);fC(b,67253,A+120|0);tc(b,c[d>>2]|0);c[p>>2]=Bc(c[a+8>>2]|0,d)|0;fC(b,67270,p);break}case 13:case 14:{c[q>>2]=(e|0)==13?67:99;fC(b,67112,q);tc(b,c[d>>2]|0);switch(c[a+8>>2]|0){case 0:{fC(b,67253,A+144|0);tc(b,c[d>>2]|0);c[r>>2]=Bc(c[a+16>>2]|0,d)|0;fC(b,67270,r);break a}case 1:{fC(b,67285,A+160|0);tc(b,c[d>>2]|0);Hc(b,a+16|0,d);break a}default:{fC(b,67304,A+168|0);tc(b,c[d>>2]|0);Ic(b,a+16|0,d);break a}}}case 10:{fC(b,67323,s);tc(b,c[d>>2]|0);h[t>>3]=+h[a+8>>3];fC(b,67335,t);tc(b,c[d>>2]|0);c[u>>2]=Bc(c[a+16>>2]|0,d)|0;fC(b,67351,u);break}case 11:{fC(b,67365,v);tc(b,c[d>>2]|0);c[w>>2]=Bc(c[a+8>>2]|0,d)|0;fC(b,67377,w);break}case 15:{fC(b,67392,x);tc(b,c[d>>2]|0);c[y>>2]=c[a+8>>2];fC(b,67404,y);break}default:{}}while(0);z=(c[d>>2]|0)+-1|0;c[d>>2]=z;tc(b,z);$B(b,75253)|0;l=A;return}function Gc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;j=l;l=l+48|0;i=j+32|0;g=j+16|0;f=j+8|0;e=c[b>>2]|0;d=c[b+4>>2]|0;fC(a,67565,j);b=0;while(1){if((b|0)>=(e|0))break;if((b|0)>0)fC(a,97973,f);k=+h[d+(b*24|0)+8>>3];h[g>>3]=+h[d+(b*24|0)>>3];h[g+8>>3]=k;fC(a,67577,g);b=b+1|0}fC(a,67518,i);l=j;return}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;e=l;l=l+32|0;f=e+16|0;i=e;tc(a,c[d>>2]|0);g=+h[b+8>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=g;fC(a,67521,i);tc(a,c[d>>2]|0);g=+h[b+24>>3];h[f>>3]=+h[b+16>>3];h[f+8>>3]=g;fC(a,67543,f);tc(a,c[d>>2]|0);Jc(a,c[b+32>>2]|0,c[b+36>>2]|0,d);l=e;return}function Ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0;e=l;l=l+48|0;f=e+24|0;j=e;tc(a,c[d>>2]|0);g=+h[b+8>>3];i=+h[b+16>>3];h[j>>3]=+h[b>>3];h[j+8>>3]=g;h[j+16>>3]=i;fC(a,67420,j);tc(a,c[d>>2]|0);i=+h[b+32>>3];g=+h[b+40>>3];h[f>>3]=+h[b+24>>3];h[f+8>>3]=i;h[f+16>>3]=g;fC(a,67448,f);tc(a,c[d>>2]|0);Jc(a,c[b+48>>2]|0,c[b+52>>2]|0,d);l=e;return}function Jc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+48|0;k=m+32|0;j=m+16|0;i=m+8|0;fC(a,67476,m);f=0;while(1){if((f|0)>=(b|0))break;if((f|0)>0)fC(a,97973,i);o=+g[d+(f<<3)>>2];n=Bc(c[d+(f<<3)+4>>2]|0,e)|0;h[j>>3]=o;c[j+8>>2]=n;fC(a,67487,j);f=f+1|0}fC(a,67518,k);l=m;return}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=nb[c[a>>2]&63](a,b,512)|0;if(e){if((c[e+12>>2]|0)!=(d|0)){c[f>>2]=b;Pw(0,67664,f)|0}}else{f=E_(1,16)|0;c[f+8>>2]=n1(b)|0;c[f+12>>2]=d;nb[c[a>>2]&63](a,f,1)|0}l=g;return}function Lc(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b+8>>2]|0);D_(b);return}function Mc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;$B(a,68519)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;fC(a,68529,g);c[e>>2]=ry(c[f+8>>2]|0)|0;fC(a,68564,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;fC(a,68577,d);$B(a,68590)|0;$B(a,68600)|0;$B(a,68608)|0;$B(a,68616)|0;$B(a,68624)|0;$B(a,68632)|0;$B(a,68640)|0;$B(a,68644)|0;$B(a,68649)|0;l=b;return}function Nc(a){a=a|0;$B(a,68500)|0;return}function Oc(a){a=a|0;c[45940]=2;return}function Pc(a){a=a|0;c[45940]=1;return}function Qc(a){a=a|0;c[45940]=2;return}function Rc(a){a=a|0;c[45940]=0;return}function Sc(a){a=a|0;c[45940]=2;return}function Tc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;p=l;l=l+80|0;o=p;m=c[(c[b+16>>2]|0)+16>>2]|0;n=c[45940]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;j=c[e>>2]|0;k=g*.3333333333333333*+((W_(j)|0)>>>0);f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;s=a[e+48>>0]|0;r=+h[d>>3];q=+h[d+8>>3];e=bd(j)|0;c[o>>2]=4;c[o+4>>2]=s<<24>>24==108?0:s<<24>>24==114?2:1;c[o+8>>2]=m;c[o+12>>2]=n;c[o+16>>2]=0;c[o+20>>2]=f;h[o+24>>3]=g;h[o+32>>3]=i;c[o+40>>2]=6;h[o+48>>3]=g;h[o+56>>3]=k;c[o+64>>2]=~~(r+(r>=0.0?.5:-.5));c[o+68>>2]=~~(q+(q+-72.0>=0.0?-71.5:-72.5));c[o+72>>2]=e;fC(b,68445,o);l=p;return}function Uc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12724+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(b$(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(ad(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;fC(b,68388,j);k=10}break}default:qa(135312,67785,163,67816)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function Vc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[45940]|0;_c(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));fC(a,68323,f);l=e;return}function Wc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[45940]|0;_c(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;fC(a,68227,g);$c(a,b,d,1);l=f;return}function Xc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;i=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;f=a+16|0;e=c[f>>2]|0;q=~~+h[e+152>>3];r=c[e+16>>2]|0;s=c[45940]|0;if((d|0)<=3)qa(67778,67785,360,67805);t=C_((d*140|0)+140|0)|0;_c(e,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[f>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[i>>2]=~~(E+(E>=0.0?.5:-.5));c[i+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(Y0(t,80995,i)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;XL(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(Y0(e,80995,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;fC(a,68278,A);c[z>>2]=t;fC(a,81002,z);D_(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;fC(a,81007,B);e=e+1|0}$B(a,150517)|0;l=C;return}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[45940]|0;_c(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;fC(a,68227,f);$c(a,b,d,0);l=e;return}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;fC(a,68221,e);l=d;return}function _c(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function $c(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));fC(a,80995,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));fC(a,80995,i)}$B(a,150517)|0;l=j;return}function ad(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[45941]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[187600+(g<<1)>>1]|0)-d|0;n=(b[188112+(g<<1)>>1]|0)-e|0;j=(b[188624+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[45941]=k+1;if((k|0)==256)g=i;else{b[187600+(g<<1)>>1]=d;b[188112+(g<<1)>>1]=e;b[188624+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function bd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[45942]|0;if(!d){c[45943]=64;d=C_(64)|0;c[45942]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[45943]|0;if((e|0)>(b+-8|0)){d=b<<1;c[45943]=d;d=F_(c[45942]|0,d)|0;c[45942]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;Y0(d+1|0,81120,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[45942]|0}function cd(b){b=b|0;var d=0,e=0,f=0;e=c[b+16>>2]|0;switch(c[b+64>>2]|0){case 0:{$B(b,68116)|0;d=e+208|0;e=c[d>>2]|0;if(e|0?a[e>>0]|0:0){$B(b,68130)|0;$B(b,qH(c[d>>2]|0)|0)|0;$B(b,150517)|0}break}case 1:{d=e+208|0;f=c[d>>2]|0;if(f|0?a[f>>0]|0:0){$B(b,68130)|0;$B(b,qH(c[d>>2]|0)|0)|0;$B(b,99578)|0;$B(b,qH(ry(c[e+8>>2]|0)|0)|0)|0;$B(b,150517)|0}break}case 3:{f=qH(ry(c[e+8>>2]|0)|0)|0;$B(b,68139)|0;$B(b,f)|0;$B(b,68149)|0;$B(b,f)|0;$B(b,68104)|0;break}default:{}}return}function dd(a){a=a|0;var b=0;b=c[a+16>>2]|0;switch(c[a+64>>2]|0){case 2:{fd(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);break}case 3:{fd(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);$B(a,68108)|0;break}default:{}}return}function ed(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2]|0;fd(a,c[g+264>>2]|0,c[g+272>>2]|0,c[g+268>>2]|0,b,d,e,f);return}function fd(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;y=l;l=l+128|0;x=y+120|0;u=y+112|0;t=y+96|0;s=y+80|0;r=y+56|0;w=y+48|0;q=y+40|0;v=y+24|0;p=y;a:do if((e|0)!=0&(f|0)!=0){m=f+10|0;if((c[45944]|0)<(f|0)){c[45944]=m;o=F_(c[45945]|0,m<<3)|0;c[45945]=o}else o=c[45945]|0;m=0;while(1){if((m|0)>=(f|0))break;z=+h[e+(m<<4)>>3];c[o+(m<<3)>>2]=~~(z+(z>=0.0?.5:-.5));z=+h[e+(m<<4)+8>>3];c[o+(m<<3)+4>>2]=~~(z+(z>=0.0?.5:-.5));m=m+1|0}n=b+64|0;m=c[n>>2]|0;e=(g|0)!=0;if(e&(m|0)==0){if(!(a[g>>0]|0))break;switch(d|0){case 0:{v=c[o>>2]|0;w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[p>>2]=g;c[p+4>>2]=v;c[p+8>>2]=w;c[p+12>>2]=x;c[p+16>>2]=f;fC(b,67850,p);break a}case 1:{w=c[o>>2]|0;x=c[o+4>>2]|0;f=(c[o+8>>2]|0)-w|0;c[v>>2]=g;c[v+4>>2]=w;c[v+8>>2]=x;c[v+12>>2]=f;fC(b,67871,v);break a}case 2:{c[q>>2]=g;fC(b,67891,q);m=0;while(1){if((m|0)>=(f|0))break;v=c[45945]|0;x=c[v+(m<<3)+4>>2]|0;c[w>>2]=c[v+(m<<3)>>2];c[w+4>>2]=x;fC(b,67899,w);m=m+1|0}$B(b,150517)|0;break a}default:qa(135312,67906,63,67926)}}if(e&(m|0)==1){if(!(a[g>>0]|0))break;if(!d){w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=w;c[r+8>>2]=x;c[r+12>>2]=f;c[r+16>>2]=g;c[r+20>>2]=i;fC(b,67943,r);break}else qa(135312,67906,75,67926)}if((m&-2|0)==2){switch(d|0){case 1:{$B(b,67976)|0;break}case 0:{$B(b,67997)|0;break}case 2:{$B(b,68016)|0;break}default:qa(135312,67906,91,67926)}if(k|0?a[k>>0]|0:0){$B(b,73496)|0;$B(b,tH(k)|0)|0;$B(b,95669)|0}if(e?a[g>>0]|0:0){$B(b,68035)|0;$B(b,tH(g)|0)|0;$B(b,95669)|0}if(j|0?a[j>>0]|0:0){$B(b,74455)|0;$B(b,qH(j)|0)|0;$B(b,95669)|0}if(i|0?a[i>>0]|0:0){$B(b,68043)|0;$B(b,qH(i)|0)|0;$B(b,95669)|0}$B(b,68052)|0;$B(b,68060)|0;b:do switch(d|0){case 1:{f=c[45945]|0;w=c[f>>2]|0;x=c[f+4>>2]|0;f=(c[f+8>>2]|0)-w|0;c[s>>2]=w;c[s+4>>2]=x;c[s+8>>2]=f;fC(b,68070,s);break}case 0:{v=c[45945]|0;w=c[v+12>>2]|0;x=c[v+8>>2]|0;f=c[v+4>>2]|0;c[t>>2]=c[v>>2];c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=f;fC(b,68079,t);break}case 2:{w=c[45945]|0;m=c[w+4>>2]|0;c[u>>2]=c[w>>2];c[u+4>>2]=m;fC(b,68091,u);m=1;while(1){if((m|0)>=(f|0))break b;v=c[45945]|0;w=c[v+(m<<3)+4>>2]|0;c[x>>2]=c[v+(m<<3)>>2];c[x+4>>2]=w;fC(b,68097,x);m=m+1|0}}default:{}}while(0);if((c[n>>2]|0)==3){$B(b,73320)|0;break}else{$B(b,68104)|0;break}}}while(0);l=y;return}function gd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;$B(a,68519)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;fC(a,68529,g);c[e>>2]=ry(c[f+8>>2]|0)|0;fC(a,68564,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;fC(a,68577,d);$B(a,68590)|0;$B(a,68600)|0;$B(a,68608)|0;$B(a,68616)|0;$B(a,68624)|0;$B(a,68632)|0;$B(a,68640)|0;$B(a,68644)|0;$B(a,68649)|0;l=b;return}function hd(a){a=a|0;$B(a,68500)|0;return}function id(a){a=a|0;c[45946]=2;return}function jd(a){a=a|0;c[45946]=1;return}function kd(a){a=a|0;c[45946]=2;return}function ld(a){a=a|0;c[45946]=0;return}function md(a){a=a|0;c[45946]=2;return}function nd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0;n=l;l=l+80|0;m=n;j=c[(c[b+16>>2]|0)+16>>2]|0;k=c[45946]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;q=a[e+48>>0]|0;p=+h[d>>3];o=+h[d+8>>3];e=xd(c[e>>2]|0)|0;c[m>>2]=4;c[m+4>>2]=q<<24>>24==108?0:q<<24>>24==114?2:1;c[m+8>>2]=j;c[m+12>>2]=k;c[m+16>>2]=0;c[m+20>>2]=f;h[m+24>>3]=g;h[m+32>>3]=i;c[m+40>>2]=4;h[m+48>>3]=0.0;h[m+56>>3]=0.0;c[m+64>>2]=~~(p+(p>=0.0?.5:-.5));c[m+68>>2]=~~(o+(o>=0.0?.5:-.5));c[m+72>>2]=e;fC(b,68445,m);l=n;return}function od(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12724+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(b$(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(wd(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;fC(b,68388,j);k=10}break}case 0:{f=0;k=10;break}default:qa(135312,68409,168,68428)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[45946]|0;ud(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));fC(a,68323,f);l=e;return}function qd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[45946]|0;ud(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;fC(a,68227,g);vd(a,b,d,1);l=f;return}function rd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;f=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;e=a+16|0;p=c[e>>2]|0;q=~~+h[p+152>>3];r=c[p+16>>2]|0;s=c[45946]|0;t=C_((d*140|0)+140|0)|0;ud(p,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[e>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[f>>2]=~~(E+(E>=0.0?.5:-.5));c[f+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(Y0(t,80995,f)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;XL(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(Y0(e,80995,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;fC(a,68278,A);c[z>>2]=t;fC(a,81002,z);D_(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;fC(a,81007,B);e=e+1|0}$B(a,150517)|0;l=C;return}function sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[45946]|0;ud(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;fC(a,68227,f);vd(a,b,d,0);l=e;return}function td(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;fC(a,68221,e);l=d;return}function ud(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));fC(a,80995,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));fC(a,80995,i)}$B(a,150517)|0;l=j;return}function wd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[45947]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[189136+(g<<1)>>1]|0)-d|0;n=(b[189648+(g<<1)>>1]|0)-e|0;j=(b[190160+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[45947]=k+1;if((k|0)==256)g=i;else{b[189136+(g<<1)>>1]=d;b[189648+(g<<1)>>1]=e;b[190160+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function xd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[45948]|0;if(!d){c[45949]=64;d=C_(64)|0;c[45948]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[45949]|0;if((e|0)>(b+-8|0)){d=b<<1;c[45949]=d;d=F_(c[45948]|0,d)|0;c[45948]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;Y0(d+1|0,81120,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[45948]|0}function yd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;b=d;$B(a,73228)|0;if((c[a+64>>2]|0)==2)$B(a,73243)|0;else $B(a,150517)|0;g=c[c[a+12>>2]>>2]|0;f=c[g+4>>2]|0;e=c[g+8>>2]|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;c[b+8>>2]=e;fC(a,73254,b);l=d;return}function zd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+8|0;e=g;$B(a,73182)|0;d=a+64|0;b=a+12|0;if((c[d>>2]|0)!=2){c[e>>2]=c[(c[b>>2]|0)+28>>2];fC(a,73193,e)}if((c[(c[b>>2]|0)+20>>2]|0)==0?(c[d>>2]|0)!=2:0){b=c[a+476>>2]|0;d=c[a+480>>2]|0;e=c[a+484>>2]|0;c[f>>2]=c[a+472>>2];c[f+4>>2]=b;c[f+8>>2]=d;c[f+12>>2]=e;fC(a,69562,f)}$B(a,73208)|0;$B(a,73221)|0;l=g;return}function Ad(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+32|0;j=k+24|0;f=k+8|0;i=k;g=c[b+16>>2]|0;a[190688]=0;e=b+12|0;h=g+8|0;if(!(c[(c[e>>2]|0)+28>>2]|0)){c[i>>2]=ry(c[h>>2]|0)|0;fC(b,69493,i);d=b+64|0;if((c[d>>2]|0)==2)$B(b,69526)|0;else $B(b,69508)|0;do if(!(c[(c[e>>2]|0)+20>>2]|0))if((c[d>>2]|0)==2){n=c[b+460>>2]|0;m=c[b+464>>2]|0;d=c[b+468>>2]|0;c[f>>2]=c[b+456>>2];c[f+4>>2]=n;c[f+8>>2]=m;c[f+12>>2]=d;fC(b,69562,f);break}else{$B(b,69538)|0;break}while(0);$B(b,69592)|0;jJ(b,c[(c[e>>2]|0)+24>>2]|0,13e3);lJ(b);d=c[(c[e>>2]|0)+20>>2]|0;if(d|0){c[i>>2]=c[d>>2];c[i+4>>2]=0;jJ(b,0,i)}}c[45950]=(a[(c[(c[h>>2]|0)+16>>2]|0)+115>>0]|0)==1?1:-1;if(!(a[190688]|0)){$B(b,69612)|0;a[190688]=1}d=c[g+208>>2]|0;if(d|0){c[j>>2]=mJ(d,c[45950]|0)|0;fC(b,69625,j)}l=k;return}function Bd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;b=l;l=l+16|0;f=b;c[f>>2]=d;c[f+4>>2]=e;fC(a,69477,f);l=b;return}function Cd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0;s=l;l=l+144|0;r=s+128|0;q=s+112|0;p=s+72|0;o=s+56|0;n=s+40|0;m=s+32|0;e=s+24|0;b=s+8|0;d=s;f=c[a+456>>2]|0;j=c[a+460>>2]|0;g=c[a+464>>2]|0;i=c[a+468>>2]|0;k=a+12|0;t=(c[(c[k>>2]|0)+28>>2]|0)+1|0;c[d>>2]=t;c[d+4>>2]=t;fC(a,69104,d);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[b>>2]=f;c[b+4>>2]=j;c[b+8>>2]=g;c[b+12>>2]=i;fC(a,69121,b)}d=a+360|0;c[e>>2]=c[d>>2]|0?69155:69165;fC(a,69174,e);b=a+64|0;if((c[b>>2]|0)==1){c[m>>2]=g;c[m+4>>2]=i;fC(a,69199,m)}m=c[a+200>>2]|0;t=c[a+204>>2]|0;c[n>>2]=c[a+196>>2];c[n+4>>2]=m;c[n+8>>2]=t;fC(a,69238,n);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[o>>2]=f;c[o+4>>2]=j;c[o+8>>2]=g-f;c[o+12>>2]=i-j;fC(a,69258,o)}w=+h[a+496>>3];t=c[d>>2]|0;v=+h[a+504>>3];u=+h[a+512>>3];h[p>>3]=+h[a+488>>3];h[p+8>>3]=w;c[p+16>>2]=t;h[p+24>>3]=v;h[p+32>>3]=u;fC(a,69298,p);if((c[b>>2]|0)==1){if((g|0)>14399|(i|0)>14399){t=c[(c[k>>2]|0)+16>>2]|0;c[q>>2]=g;c[q+4>>2]=i;c[q+8>>2]=14400;ub[t&63](69341,q)}c[r>>2]=f;c[r+4>>2]=j;c[r+8>>2]=g;c[r+12>>2]=i;fC(a,69436,r)}l=s;return}function Dd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=a+12|0;if(c[(c[b>>2]|0)+20>>2]|0){$B(a,69028)|0;jJ(a,0,(c[(c[b>>2]|0)+20>>2]|0)+4|0)}$B(a,69045)|0;$B(a,69072)|0;c[d>>2]=c[(c[b>>2]|0)+28>>2];fC(a,69087,d);l=e;return}function Ed(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=ry(c[(c[a+16>>2]|0)+8>>2]|0)|0;fC(a,69021,d);$B(a,69014)|0;l=b;return}function Fd(a){a=a|0;$B(a,84457)|0;return}function Gd(a){a=a|0;$B(a,69014)|0;return}function Hd(a){a=a|0;$B(a,84457)|0;return}function Id(a){a=a|0;$B(a,69014)|0;return}function Jd(a){a=a|0;$B(a,84457)|0;return}function Kd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;e=l;l=l+16|0;d=e;if(b|0?(g=(c[a+16>>2]|0)+272|0,c[g>>2]|0):0){$B(a,68910)|0;jC(a,c[g>>2]|0,2);$B(a,68921)|0;c[d>>2]=mJ(b,c[45950]|0)|0;fC(a,68925,d)}l=e;return}function Ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;k=m;f=c[b+16>>2]|0;if(!(+h[f+40>>3]<.5)){Sd(b,f+16|0);i=e+4|0;gC(b,+h[(c[i>>2]|0)+16>>3]);c[j>>2]=c[c[i>>2]>>2];fC(b,68869,j);i=mJ(c[e>>2]|0,c[45950]|0)|0;switch(a[e+48>>0]|0){case 114:{n=e+32|0;f=n;g=+h[n>>3];break}case 108:{f=e+32|0;g=0.0;break}default:{n=e+32|0;f=n;g=+h[n>>3]*.5}}h[d>>3]=+h[d>>3]-g;n=d+8|0;h[n>>3]=+h[n>>3]+ +h[e+24>>3];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];iC(b,j);$B(b,68884)|0;gC(b,+h[f>>3]);c[k>>2]=i;fC(b,68893,k)}l=m;return}function Md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];h[f+16>>3]=+h[b+16>>3]-+h[b>>3];h[f+24>>3]=+h[b+24>>3]-+h[b+8>>3];b=a+16|0;if(d|0?(e=c[b>>2]|0,+h[e+80>>3]>.5):0){Sd(a,e+56|0);jC(a,f,2);$B(a,68827)|0}if(+h[(c[b>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[b>>2]|0)+16|0);jC(a,f,2);$B(a,68847)|0}l=g;return}function Nd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+16|0;i=j;g=a+16|0;if(e|0?(f=c[g>>2]|0,+h[f+80>>3]>.5):0){Sd(a,f+56|0);$B(a,68748)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];iC(a,i);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;f=b+(e<<4)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];iC(a,i);$B(a,68766)|0;e=e+1|0}$B(a,68793)|0}if(+h[(c[g>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[g>>2]|0)+16|0);$B(a,68748)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];iC(a,i);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;g=b+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];iC(a,i);$B(a,68766)|0;e=e+1|0}$B(a,68809)|0}l=j;return}function Od(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0;k=l;l=l+16|0;f=k;i=a+16|0;if(g|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Sd(a,j+56|0);$B(a,68748)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];iC(a,f);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;jC(a,b+(e<<4)|0,3);$B(a,68783)|0;e=e+3|0}$B(a,68793)|0}if(+h[(c[i>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[i>>2]|0)+16|0);$B(a,68748)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];iC(a,f);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;jC(a,b+(e<<4)|0,3);$B(a,68783)|0;e=e+3|0}$B(a,68775)|0}l=k;return}function Pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;f=g;e=a+16|0;if(+h[(c[e>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[e>>2]|0)+16|0);$B(a,68748)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];iC(a,f);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;i=b+(e<<4)|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];iC(a,f);$B(a,68766)|0;e=e+1|0}$B(a,68775)|0}l=g;return}function Qd(a,b){a=a|0;b=b|0;$B(a,68745)|0;$B(a,b)|0;$B(a,150517)|0;return}function Rd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;g=n+16|0;m=n+8|0;k=n;i=a+16|0;if(f|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Sd(a,j+56|0);$B(a,84352)|0;jC(a,d,e);$B(a,99578)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];iC(a,g);c[k>>2]=e;c[k+4>>2]=b;fC(a,68662,k)}if(+h[(c[i>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[i>>2]|0)+16|0);$B(a,84352)|0;jC(a,d,e);$B(a,99578)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];iC(a,g);c[m>>2]=e;c[m+4>>2]=b;fC(a,68678,m)}l=n;return}function Sd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=l;l=l+32|0;e=f;if(b|0){switch(c[(c[a+16>>2]|0)+4>>2]|0){case 1:case 0:{d=108412;break}case 2:{d=108399;break}case 3:{d=108368;break}default:d=68714}i=+h[b+8>>3];g=+h[b+16>>3];h[e>>3]=+h[b>>3];h[e+8>>3]=i;h[e+16>>3]=g;c[e+24>>2]=d;fC(a,68721,e)}l=f;return}function Td(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m+8|0;j=m;g=b+16|0;i=c[g>>2]|0;d=c[i+160>>2]|0;gC(b,+h[i+152>>3]);$B(b,68695)|0;while(1){if(!d)break;i=d+4|0;f=c[d>>2]|0;if(!f)break;if(!(b$(f,108062)|0)){d=i;continue}else e=f;while(1){d=e+1|0;if(!(a[e>>0]|0))break;else e=d}a:while(1){if(!(a[d>>0]|0))break;c[j>>2]=d;fC(b,68710,j);while(1){e=d+1|0;if(!(a[d>>0]|0)){d=e;continue a}else d=e}}if(!(b$(f,131253)|0))h[(c[g>>2]|0)+152>>3]=0.0;c[k>>2]=f;fC(b,93588,k);d=i}l=m;return}function Ud(b){b=b|0;var d=0;$B(b,74734)|0;d=xx(c[(c[b>>2]|0)+168>>2]|0,74790)|0;if(d|0?a[d>>0]|0:0){$B(b,74801)|0;$B(b,d)|0;$B(b,74825)|0}$B(b,74846)|0;$B(b,74894)|0;$B(b,74948)|0;d=b+12|0;$B(b,qH(c[c[c[d>>2]>>2]>>2]|0)|0)|0;$B(b,78077)|0;$B(b,qH(c[(c[c[d>>2]>>2]|0)+4>>2]|0)|0)|0;$B(b,78087)|0;$B(b,qH(c[(c[c[d>>2]>>2]|0)+8>>2]|0)|0)|0;$B(b,75330)|0;$B(b,75354)|0;return}function Vd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;i=l;l=l+48|0;g=i+16|0;f=i+8|0;e=i;d=c[b+16>>2]|0;$B(b,74569)|0;d=d+8|0;if(a[(ry(c[d>>2]|0)|0)>>0]|0){$B(b,75293)|0;$B(b,qH(ry(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;fC(b,74574,e);e=c[b+452>>2]|0;c[f>>2]=c[b+448>>2];c[f+4>>2]=e;fC(b,74590,f);m=+h[b+392>>3];k=+h[b+400>>3];j=+h[b+408>>3];h[g>>3]=+h[b+384>>3];h[g+8>>3]=m;h[g+16>>3]=k;h[g+24>>3]=j;fC(b,74623,g);$B(b,74654)|0;$B(b,74690)|0;$B(b,76284)|0;l=i;return}function Wd(a){a=a|0;$B(a,74561)|0;return}function Xd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;se(a,b,0,98484,c[(c[a+16>>2]|0)+8>>2]|0);$B(a,76284)|0;return}function Yd(a){a=a|0;$B(a,74409)|0;return}function Zd(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=c[b+16>>2]|0;d=g+8|0;se(b,c[g+212>>2]|0,0,108412,c[d>>2]|0);$B(b,74513)|0;gC(b,+h[b+488>>3]);$B(b,99578)|0;gC(b,+h[b+496>>3]);c[f>>2]=0-(c[b+360>>2]|0);fC(b,74532,f);gC(b,+h[b+504>>3]);$B(b,99578)|0;gC(b,-+h[b+512>>3]);$B(b,74556)|0;if(a[(ry(c[d>>2]|0)|0)>>0]|0){$B(b,74465)|0;$B(b,qH(ry(c[d>>2]|0)|0)|0)|0;$B(b,74473)|0}l=e;return}function _d(a){a=a|0;$B(a,74409)|0;return}function $d(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;se(a,c[d+212>>2]|0,0,104980,c[b>>2]|0);$B(a,76284)|0;$B(a,74465)|0;$B(a,qH(ry(c[b>>2]|0)|0)|0)|0;$B(a,74473)|0;return}function ae(a){a=a|0;$B(a,74409)|0;return}function be(a){a=a|0;var b=0,d=0,e=0;d=c[a+16>>2]|0;b=c[a+160>>2]|0;if((b|0)>1)b=c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0;else b=0;e=d+8|0;se(a,c[d+212>>2]|0,b,108399,c[e>>2]|0);$B(a,76284)|0;$B(a,74465)|0;$B(a,qH(ry(c[e>>2]|0)|0)|0)|0;$B(a,74473)|0;return}function ce(a){a=a|0;$B(a,74409)|0;return}function de(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;se(a,c[d+212>>2]|0,0,108368,c[b>>2]|0);$B(a,76284)|0;$B(a,74465)|0;b=pH(99069,c[b>>2]|0)|0;$B(a,qH(b)|0)|0;D_(b);$B(a,74473)|0;return}function ee(a){a=a|0;$B(a,74409)|0;return}function fe(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$B(b,74415)|0;if(f|0){$B(b,74418)|0;$B(b,qH(f)|0)|0;$B(b,95669)|0}$B(b,74308)|0;$B(b,76245)|0;if(c|0?a[c>>0]|0:0){$B(b,74426)|0;$B(b,c)|0;$B(b,95669)|0}if(d|0?a[d>>0]|0:0){$B(b,74440)|0;$B(b,rH(d,1)|0)|0;$B(b,95669)|0}if(e|0?a[e>>0]|0:0){$B(b,74455)|0;$B(b,qH(e)|0)|0;$B(b,95669)|0}$B(b,76284)|0;return}function ge(a){a=a|0;$B(a,76239)|0;$B(a,74409)|0;return}function he(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+176|0;L=M+160|0;K=M+152|0;F=M+136|0;J=M+128|0;E=M+120|0;D=M+112|0;C=M+104|0;B=M+96|0;A=M+88|0;y=M+80|0;w=M+72|0;v=M+64|0;u=M+56|0;t=M+48|0;i=M+40|0;q=M+32|0;s=M+24|0;r=M+16|0;p=M+8|0;o=M;I=c[e+16>>2]|0;$B(e,73940)|0;switch(a[g+48>>0]|0){case 108:{$B(e,73946)|0;break}case 114:{$B(e,73967)|0;break}default:$B(e,73986)|0}H=f+8|0;G=+h[H>>3]+ +h[g+24>>3];h[H>>3]=G;H=I+260|0;if(!(b[H>>1]&512)){$B(e,74008)|0;gC(e,+h[f>>3]);$B(e,74013)|0;gC(e,-G);$B(e,95669)|0}x=g+4|0;f=c[x>>2]|0;n=c[f+8>>2]|0;if(n){switch(c[(c[(c[(c[e>>2]|0)+168>>2]|0)+16>>2]|0)+244>>2]|0){case 1:{m=n;f=n+16|0;i=n+8|0;break}case 2:{m=n+24|0;f=n+32|0;i=n+28|0;break}default:{m=n+4|0;f=n+16|0;i=n+8|0}}j=c[f>>2]|0;f=c[i>>2]|0;k=c[n+12>>2]|0;c[o>>2]=c[m>>2];fC(e,74019,o);i=c[n+24>>2]|0;if(i|0){c[p>>2]=i;fC(e,74036,p)}$B(e,95669)|0;if(f|0){c[r>>2]=f;fC(e,74040,r)}if(k|0){c[s>>2]=k;fC(e,74058,s)}if(!j)j=0;else{c[q>>2]=j;fC(e,74077,q)}}else{c[i>>2]=c[f>>2];fC(e,74094,i);j=0;f=0}i=c[x>>2]|0;if(i|0?(z=c[i+24>>2]|0,z&127|0):0){if(!((f|0)!=0|(z&1|0)==0))fC(e,74112,t);if(!((j|0)!=0|(z&2|0)==0))fC(e,74132,u);if(z&100|0){fC(e,74153,v);if(!(z&4))f=0;else{fC(e,102960,w);f=1}if(z&64){c[y>>2]=f|0?97973:191979;fC(e,74172,y);f=1}if(z&32|0){c[A>>2]=f|0?97973:191979;fC(e,74183,A)}fC(e,95669,B)}if(z&8|0)fC(e,74198,C);if(z&16|0)fC(e,74222,D)}h[E>>3]=+h[(c[x>>2]|0)+16>>3];fC(e,74244,E);f=I+16|0;switch(c[I+48>>2]|0){case 5:{f=c[f>>2]|0;if(O$(f,134232)|0){c[J>>2]=f;fC(e,74262,J)}break}case 1:{E=d[f+1>>0]|0;J=d[f+2>>0]|0;c[F>>2]=d[f>>0];c[F+4>>2]=E;c[F+8>>2]=J;fC(e,74273,F);break}default:qa(135312,73454,486,74295)}$B(e,74308)|0;if(b[H>>1]&512){c[K>>2]=qH(c[I+212>>2]|0)|0;fC(e,74310,K);$B(e,74359)|0;gC(e,-G);$B(e,74377)|0}$B(e,rH(c[g>>2]|0,1)|0)|0;if(b[H>>1]&512)fC(e,74380,L);$B(e,74400)|0;l=M;return}function ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 2:{d=pe(a,b,2)|0;break}case 3:{d=qe(a)|0;break}default:d=0}$B(a,73904)|0;ne(a,c,d);$B(a,73913)|0;gC(a,+h[b>>3]);$B(a,73919)|0;c=b+8|0;gC(a,-+h[c>>3]);$B(a,73926)|0;gC(a,+h[b+16>>3]-+h[b>>3]);$B(a,73933)|0;gC(a,+h[b+24>>3]-+h[c>>3]);$B(a,73320)|0;return}function je(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;switch(d|0){case 2:{e=pe(a,b,c)|0;break}case 3:{e=qe(a)|0;break}default:e=0}$B(a,73895)|0;ne(a,d,e);$B(a,73310)|0;e=0;while(1){if((e|0)>=(c|0))break;gC(a,+h[b+(e<<4)>>3]);$B(a,97973)|0;gC(a,-+h[b+(e<<4)+8>>3]);$B(a,99578)|0;e=e+1|0}gC(a,+h[b>>3]);$B(a,97973)|0;gC(a,-+h[b+8>>3]);$B(a,73320)|0;return}function ke(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;g=c[a+16>>2]|0;switch(h|0){case 2:{f=pe(a,d,e)|0;break}case 3:{f=qe(a)|0;break}default:f=0}$B(a,73490)|0;if(b[g+260>>1]&512){$B(a,73496)|0;$B(a,qH(c[g+212>>2]|0)|0)|0;$B(a,73502)|0}ne(a,h,f);$B(a,73507)|0;re(a,d,e);$B(a,73320)|0;return}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;$B(a,73300)|0;ne(a,0,0);$B(a,73310)|0;d=0;while(1){if((d|0)>=(c|0))break;gC(a,+h[b+(d<<4)>>3]);$B(a,97973)|0;gC(a,-+h[b+(d<<4)+8>>3]);$B(a,99578)|0;d=d+1|0}$B(a,73320)|0;return}function me(a,b){a=a|0;b=b|0;$B(a,73294)|0;$B(a,qH(b)|0)|0;$B(a,75354)|0;return}function ne(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+96|0;k=q+48|0;p=q+40|0;n=q+32|0;o=q+24|0;j=q+16|0;g=q+8|0;f=q;m=c[b+16>>2]|0;$B(b,73325)|0;a:do switch(d|0){case 2:{c[f>>2]=e;fC(b,73333,f);break}case 3:{c[g>>2]=e;fC(b,73344,g);break}case 0:{$B(b,132627)|0;break}default:{d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:break a;default:{}}h[j>>3]=+(d&255)*.00392156862745098;fC(b,73355,j)}}}while(0);$B(b,73374)|0;e=m+16|0;f=k;g=e;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);d=m+152|0;if(+h[d>>3]!=1.0){$B(b,73385)|0;gC(b,+h[d>>3])}switch(c[m+144>>2]|0){case 1:{c[o>>2]=73425;fC(b,73402,o);break}case 2:{c[n>>2]=73429;fC(b,73402,n);break}default:{}}b:do if((c[m+48>>2]|0)==1){d=a[e+3>>0]|0;switch(d<<24>>24){case -1:case 0:break b;default:{}}h[p>>3]=+(d&255)*.00392156862745098;fC(b,73433,p)}while(0);$B(b,95669)|0;l=q;return}function oe(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{$B(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){$B(b,134297)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;fC(b,75610,f);break a}default:qa(135312,73454,117,73474)}while(0);l=g;return}function pe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;o=t+64|0;r=t+56|0;n=t+48|0;m=t+40|0;i=t+32|0;k=t;q=c[45952]|0;c[45952]=q+1;p=c[b+16>>2]|0;f=+(c[p+136>>2]|0)*.017453292519943295;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;aN(d,k,e,f,0);c[o>>2]=q;fC(b,73727,o);$B(b,73792)|0;gC(b,+h[k>>3]);$B(b,73797)|0;gC(b,+h[k+8>>3]);$B(b,73804)|0;gC(b,+h[k+16>>3]);$B(b,73811)|0;gC(b,+h[k+24>>3]);$B(b,73818)|0;k=p+140|0;f=+g[k>>2];if(f>0.0){h[i>>3]=f+-.001;fC(b,73823,i)}else $B(b,73599)|0;d=p+56|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));oe(b,o);$B(b,73635)|0;a:do if((c[p+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=7;break a}default:{}}h[m>>3]=+(d&255)*.00392156862745098;fC(b,96586,m)}else s=7;while(0);if((s|0)==7)$B(b,73650)|0;$B(b,73653)|0;f=+g[k>>2];if(f>0.0){h[n>>3]=f;fC(b,73823,n)}else $B(b,73659)|0;d=p+96|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));oe(b,o);$B(b,73635)|0;b:do if((c[p+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=14;break b}default:{}}h[r>>3]=+(d&255)*.00392156862745098;fC(b,96586,r)}else s=14;while(0);if((s|0)==14)$B(b,73650)|0;$B(b,73863)|0;l=t;return q|0}function qe(b){b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;k=q+16|0;o=q+8|0;j=q;n=c[45951]|0;c[45951]=n+1;m=c[b+16>>2]|0;r=+(c[m+136>>2]|0)*.017453292519943295;e=r;if(r==0.0){f=50;d=50}else{f=~~((+E(+e)+1.0)*50.0);d=~~((1.0-+F(+e))*50.0)}c[k>>2]=n;c[k+4>>2]=f;c[k+8>>2]=d;fC(b,73515,k);$B(b,73599)|0;d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);$B(b,73635)|0;a:do if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=6;break a}default:{}}h[j>>3]=+(d&255)*.00392156862745098;fC(b,96586,j)}else p=6;while(0);if((p|0)==6)$B(b,73650)|0;$B(b,73653)|0;$B(b,73659)|0;d=m+96|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);$B(b,73635)|0;b:do if((c[m+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=10;break b}default:{}}h[o>>3]=+(d&255)*.00392156862745098;fC(b,96586,o)}else p=10;while(0);if((p|0)==10)$B(b,73650)|0;$B(b,73695)|0;l=q;return n|0}function re(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+16|0;g=i;e=77;f=0;while(1){if((f|0)>=(d|0))break;c[g>>2]=e;fC(a,73512,g);gC(a,+h[b+(f<<4)>>3]);$B(a,97973)|0;gC(a,-+h[b+(f<<4)+8>>3]);e=(f|0)==0?67:32;f=f+1|0}l=i;return}function se(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;$B(b,74483)|0;$B(b,qH(d)|0)|0;if(e|0){c[h>>2]=qH(e)|0;fC(b,74491,h)}c[i>>2]=f;fC(b,74495,i);d=xx(g,74507)|0;if(d|0?a[d>>0]|0:0){$B(b,99578)|0;$B(b,qH(d)|0)|0}$B(b,95669)|0;l=j;return}function te(a){a=a|0;var b=0;$B(a,75314)|0;b=a+12|0;$B(a,De(c[c[c[b>>2]>>2]>>2]|0)|0)|0;$B(a,78077)|0;$B(a,De(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;$B(a,78087)|0;$B(a,De(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;$B(a,75330)|0;return}function ue(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[b+16>>2]|0;$B(b,75291)|0;d=d+8|0;if(a[(ry(c[d>>2]|0)|0)>>0]|0){$B(b,75293)|0;$B(b,De(ry(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;fC(b,75302,e);c[45953]=0;l=f;return}function ve(a){a=a|0;c[45953]=1;return}function we(a){a=a|0;c[45953]=-1;return}function xe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;i=n+8|0;m=n;f=c[b+16>>2]|0;if(c[f+144>>2]|0?(k=e+4|0,j=~~(+h[b+352>>3]*+h[(c[k>>2]|0)+16>>3]),j|0):0){Ee(b);$B(b,75230)|0;g=d+8|0;h[g>>3]=+h[g>>3]-+(j|0)*.55;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];iC(b,i);$B(b,75244)|0;$B(b,c[e>>2]|0)|0;$B(b,75253)|0;$B(b,75051)|0;g=i;d=f+16|0;f=g+40|0;do{c[g>>2]=c[d>>2];g=g+4|0;d=d+4|0}while((g|0)<(f|0));Fe(b,i);$B(b,75255)|0;i=c[k>>2]|0;k=c[i+8>>2]|0;k=c[((k|0)==0?i:k+4|0)>>2]|0;$B(b,95669)|0;$B(b,k)|0;$B(b,95669)|0;c[m>>2]=j;fC(b,75264,m);switch(a[e+48>>0]|0){case 108:{$B(b,75269)|0;break}case 114:{$B(b,75280)|0;break}default:{}}Ge(b);$B(b,150517)|0}l=n;return}function ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){n=+h[b>>3];m=+h[b+24>>3];e=b+8|0;k=+h[e>>3];h[b>>3]=n-+h[b+16>>3]+n;h[e>>3]=k-m+k;Ee(a);$B(a,75216)|0;jC(a,b,2);$B(a,75051)|0;do if(!d)if(!(c[45953]|0)){$B(a,94227)|0;break}else{$B(a,134116)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f)}while(0);if((c[45953]|0)==1)c[45953]=0;$B(a,75162)|0;gC(a,+h[g+152>>3]);$B(a,75205)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f);b=c[i>>2]|0;if((b|0)==1){$B(a,75059)|0;b=c[i>>2]|0}if((b|0)==2)$B(a,75068)|0;Ge(a);$B(a,150517)|0}l=j;return}function ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){Ee(a);$B(a,75188)|0;jC(a,b,d);$B(a,75051)|0;do if(!e)if(!(c[45953]|0)){$B(a,94227)|0;break}else{$B(a,134116)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f)}while(0);if((c[45953]|0)==1)c[45953]=0;$B(a,75162)|0;gC(a,+h[g+152>>3]);$B(a,75205)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f);b=c[i>>2]|0;if((b|0)==1){$B(a,75059)|0;b=c[i>>2]|0}if((b|0)==2)$B(a,75068)|0;Ge(a);$B(a,150517)|0}l=j;return}function Ae(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m;j=c[a+16>>2]|0;k=j+144|0;if(c[k>>2]|0){Ee(a);$B(a,75037)|0;jC(a,b,d);$B(a,75051)|0;e=i;f=j+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));Fe(a,i);$B(a,75162)|0;gC(a,+h[j+152>>3]);e=c[k>>2]|0;if((e|0)==1){$B(a,75059)|0;e=c[k>>2]|0}if((e|0)==2)$B(a,75068)|0;$B(a,75171)|0;Ge(a);$B(a,150517)|0}l=m;return}function Be(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;g=i;e=c[a+16>>2]|0;h=e+144|0;if(c[h>>2]|0){Ee(a);$B(a,75037)|0;jC(a,b,d);$B(a,75051)|0;f=g;b=e+16|0;d=f+40|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0}while((f|0)<(d|0));Fe(a,g);b=c[h>>2]|0;if((b|0)==1){$B(a,75059)|0;b=c[h>>2]|0}if((b|0)==2)$B(a,75068)|0;Ge(a);$B(a,150517)|0}l=i;return}function Ce(a,b){a=a|0;b=b|0;$B(a,75034)|0;$B(a,De(b)|0)|0;$B(a,150517)|0;return}function De(a){a=a|0;return a|0}function Ee(b){b=b|0;if(!(a[b+144>>0]|0))$B(b,75159)|0;else $B(b,c[b+148>>2]|0)|0;return}function Fe(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{$B(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){$B(b,94227)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;fC(b,75610,f);break a}default:qa(135312,75077,49,75141)}while(0);l=g;return}function Ge(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[a+16>>2]|0;switch(c[f+12>>2]|0){case 8:{b=1;d=108399;e=f+8|0;break}case 10:{b=0;d=108399;e=f+8|0;break}case 3:case 2:case 9:{b=1;d=108368;e=f+8|0;break}case 7:case 6:case 11:{b=0;d=108368;e=f+8|0;break}case 0:{b=1;d=108412;e=f+8|0;break}case 4:{b=0;d=75113;e=f+8|0;break}case 1:{b=1;d=108412;e=f+8|0;break}case 5:{b=0;d=108412;e=f+8|0;break}default:qa(135312,75077,106,75096)}f=c[(c[e>>2]|0)+8>>2]|0;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=f;fC(a,75125,g);l=h;return}function He(a){a=a|0;var b=0;$B(a,78049)|0;$B(a,78057)|0;b=a+12|0;$B(a,Se(c[c[c[b>>2]>>2]>>2]|0)|0)|0;$B(a,78077)|0;$B(a,Se(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;$B(a,78087)|0;$B(a,Se(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;$B(a,78090)|0;return}function Ie(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;d=c[b+16>>2]|0;c[45957]=~~(+h[b+232>>3]-+h[b+216>>3]);c[45956]=~~(+h[b+224>>3]-+h[b+208>>3]);$B(b,76736)|0;$B(b,76743)|0;d=ry(c[d+8>>2]|0)|0;if(a[d>>0]|0){$B(b,76812)|0;$B(b,Se(d)|0)|0;$B(b,76820)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;fC(b,76829,e);$B(b,76849)|0;$B(b,76884)|0;$B(b,76912)|0;$B(b,76918)|0;$B(b,76961)|0;$B(b,77002)|0;$B(b,77021)|0;$B(b,77038)|0;$B(b,77086)|0;$B(b,77139)|0;$B(b,77215)|0;$B(b,77291)|0;$B(b,77300)|0;$B(b,77323)|0;$B(b,77350)|0;$B(b,77403)|0;$B(b,77425)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77492)|0;$B(b,77518)|0;$B(b,77403)|0;$B(b,77570)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77614)|0;$B(b,77323)|0;$B(b,77350)|0;$B(b,77403)|0;$B(b,77570)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77492)|0;$B(b,77518)|0;$B(b,77403)|0;$B(b,77425)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77627)|0;$B(b,77635)|0;$B(b,77641)|0;$B(b,77655)|0;$B(b,77663)|0;$B(b,77696)|0;e=(c[45957]|0)+10|0;c[f>>2]=c[45956];c[f+4>>2]=e;fC(b,77773,f);$B(b,77803)|0;$B(b,77812)|0;$B(b,77870)|0;$B(b,77880)|0;$B(b,77945)|0;f=c[45957]|0;c[g>>2]=c[45956];c[g+4>>2]=f;fC(b,77982,g);g=c[45957]|0;c[i>>2]=c[45956];c[i+4>>2]=g;fC(b,78010,i);l=j;return}function Je(a){a=a|0;$B(a,76287)|0;$B(a,76299)|0;$B(a,76307)|0;$B(a,76370)|0;$B(a,76299)|0;$B(a,76415)|0;$B(a,76464)|0;$B(a,76518)|0;$B(a,76299)|0;$B(a,76618)|0;$B(a,76667)|0;$B(a,76299)|0;$B(a,76719)|0;return}function Ke(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j+8|0;g=j;$B(b,76245)|0;if(d|0?a[d>>0]|0:0){c[g>>2]=Se(d)|0;fC(b,76248,g)}if(e|0?a[e>>0]|0:0){c[h>>2]=Se(e)|0;fC(b,76259,h)}if(f|0?a[f>>0]|0:0){c[i>>2]=Se(f)|0;fC(b,76271,i)}$B(b,76284)|0;l=j;return}function Le(a){a=a|0;$B(a,76239)|0;return}function Me(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0;A=l;l=l+112|0;y=A+96|0;z=A+88|0;w=A+80|0;q=A+72|0;v=A+64|0;t=A+56|0;s=A+48|0;r=A+40|0;p=A+24|0;o=A+8|0;n=A;x=c[b+16>>2]|0;switch(a[f+48>>0]|0){case 108:{j=+h[e>>3];m=+h[f+32>>3];break}case 114:{m=+h[f+32>>3];j=+h[e>>3]-m;break}default:{m=+h[f+32>>3];j=+h[e>>3]-m*.5}}g=f+40|0;i=+h[g>>3];u=f+4|0;k=+h[(c[u>>2]|0)+16>>3];if(i>3]=i}B=j+-8.0;k=+((c[45957]|0)>>>0)-+h[e+8>>3]-i+k*.2+(k<12.0?1.4:2.0);fC(b,75901,n);h[o>>3]=B;h[o+8>>3]=k;fC(b,75838,o);h[p>>3]=j+8.0+m-B;h[p+8>>3]=i;fC(b,75862,p);$B(b,75936)|0;$B(b,75970)|0;g=c[u>>2]|0;e=c[g+8>>2]|0;if(e){c[r>>2]=c[e+4>>2];fC(b,76060,r);g=c[e+8>>2]|0;if(g|0){c[s>>2]=g;fC(b,76079,s)}g=c[e+12>>2]|0;if(g|0){c[t>>2]=g;fC(b,76096,t)}g=c[e+16>>2]|0;if(g|0){c[v>>2]=g;fC(b,76114,v)}}else{c[q>>2]=c[g>>2];fC(b,76060,q)}h[w>>3]=+h[(c[u>>2]|0)+16>>3];fC(b,76130,w);g=x+16|0;switch(c[x+48>>2]|0){case 5:{g=c[g>>2]|0;if(O$(g,134232)|0){c[z>>2]=g;fC(b,76150,z)}break}case 1:{x=d[g+1>>0]|0;z=d[g+2>>0]|0;c[y>>2]=d[g>>0];c[y+4>>2]=x;c[y+8>>2]=z;fC(b,76160,y);break}default:qa(135312,75624,438,76181)}$B(b,76194)|0;$B(b,Se(c[f>>2]|0)|0)|0;$B(b,76205)|0;$B(b,76228)|0;l=A;return}function Ne(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;e=l;l=l+32|0;f=e+16|0;j=e;$B(a,75802)|0;m=+h[b>>3];i=+h[b+16>>3]-m;k=+h[b+24>>3];g=k-+h[b+8>>3];k=+((c[45957]|0)>>>0)-k;h[j>>3]=m-i;h[j+8>>3]=k;fC(a,75838,j);h[f>>3]=i*2.0;h[f+8>>3]=g*2.0;fC(a,75862,f);We(a,d);$B(a,75684)|0;Ue(a);$B(a,75890)|0;l=e;return}function Oe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+24|0;j=m+8|0;g=m;$B(a,75407)|0;n=c[45957]|0;c[g>>2]=c[45956];c[g+4>>2]=n;fC(a,75660,g);We(a,e);$B(a,75684)|0;Ue(a);$B(a,75687)|0;g=d+-1|0;e=0;while(1){if((e|0)>=(d|0))break;i=+h[b+(e<<4)>>3];f=+((c[45957]|0)>>>0)-+h[b+(e<<4)+8>>3];if(!e){$B(a,75714)|0;h[j>>3]=i;h[j+8>>3]=f;fC(a,75780,j);$B(a,75791)|0}else{h[k>>3]=i;h[k+8>>3]=f;fC(a,75780,k)}if((e|0)==(g|0))$B(a,75794)|0;e=e+1|0}$B(a,75523)|0;l=m;return}function Pe(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;f=l;l=l+16|0;e=f;$B(a,75407)|0;h=c[45957]|0;c[e>>2]=c[45956];c[e+4>>2]=h;fC(a,75660,e);We(a,g);$B(a,75684)|0;Ue(a);$B(a,75687)|0;Xe(a,b,d);$B(a,75700)|0;l=f;return}function Qe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0.0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;f=k;$B(a,75407)|0;g=c[45957]|0;c[f>>2]=c[45956];c[f+4>>2]=g;fC(a,75444,f);$B(a,75484)|0;f=d+-1|0;g=b+8|0;e=0;while(1){if((e|0)>=(d|0))break;if(!e){$B(a,75496)|0;m=+((c[45957]|0)>>>0)-+h[g>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=m;fC(a,75500,i);$B(a,75511)|0}else{m=+((c[45957]|0)>>>0)-+h[b+(e<<4)+8>>3];h[j>>3]=+h[b+(e<<4)>>3];h[j+8>>3]=m;fC(a,75500,j)}if((e|0)==(f|0))$B(a,75515)|0;e=e+1|0}$B(a,75519)|0;Ue(a);$B(a,75523)|0;l=k;return}function Re(a,b){a=a|0;b=b|0;$B(a,75342)|0;$B(a,Se(b)|0)|0;$B(a,75354)|0;return}function Se(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;e=u;d=c[45954]|0;if(!d){c[45955]=64;d=vH(64)|0;c[45954]=d}s=e+15|0;r=e+14|0;g=0;q=0;o=0;e=0;f=0;a:while(1){n=(o|0)!=0;k=g;p=b;j=e;b:while(1){if(!p){t=32;break a}e=a[p>>0]|0;if(!(e<<24>>24)){t=32;break a}b=c[45955]|0;if((q|0)>(b+-8|0)){d=b<<1;c[45955]=d;d=xH(c[45954]|0,d)|0;c[45954]=d;d=d+q|0;e=a[p>>0]|0}switch(e<<24>>24){case 60:{e=4;b=99127;t=26;break b}case 62:{e=4;b=99110;t=27;break b}case 38:{t=10;break b}case 45:{e=5;b=99121;i=j;break b}default:{}}if(n&e<<24>>24==32){t=12;break}switch(e<<24>>24){case 34:{e=6;b=99090;t=26;break b}case 39:{e=5;b=99115;t=27;break b}default:{}}if(e<<24>>24<0){i=127;b=0}else{e=1;b=p;t=26;break}while(1){g=i&255;h=e&255;if(g>>>0>=h>>>0)break;e=i&h&255;i=g>>>1;b=b+1|0}if((b|0)<=1){g=A3(j|0,f|0,6)|0;g=s3(g|0,z|0,e&255|0,0)|0;f=z;m=k+-1|0;if((k|0)>1){b=m;e=g}else{t=21;break}}else{b=b+-1|0;e=e&255;f=0}k=b;p=p+1|0;j=e}if((t|0)==10){t=0;b=(Te(p)|0)==0;e=b?5:1;b=b?99104:p;i=j}else if((t|0)==12){t=0;b=(a[o>>0]|0)==32;e=b?6:1;b=b?99097:p;i=j}else if((t|0)==21){t=0;a[s>>0]=59;e=3;h=r;i=g;j=f;while(1){b=x3(i|0,j|0,10,0)|0;g=h+-1|0;a[h>>0]=b|48;b=i;i=w3(i|0,j|0,10,0)|0;f=j;j=z;o=e;e=e+1|0;if((o|0)>11){t=23;break a}if(!(f>>>0>0|(f|0)==0&b>>>0>9))break;else h=g}b=h+-2|0;a[g>>0]=35;a[b>>0]=38;k=m;f=j}else if((t|0)==26){t=0;i=j}else if((t|0)==27){t=0;i=j}h=d+e|0;g=e;while(1){if(!g)break;a[d>>0]=a[b>>0]|0;g=g+-1|0;b=b+1|0;d=d+1|0}g=k;b=p+1|0;q=e+q|0;o=p;d=h;e=i}if((t|0)==23){E1(75360,46,1,c[15686]|0)|0;Sa(1)}else if((t|0)==32){a[d>>0]=0;l=u;return c[45954]|0}return 0}function Te(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function Ue(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;d=k+8|0;j=k;i=c[a+16>>2]|0;$B(a,75535)|0;e=d;f=i+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));Ve(a,d);b=+h[i+152>>3];if(b!=1.0){h[j>>3]=b;fC(a,75553,j)}switch(c[i+144>>2]|0){case 1:{$B(a,75570)|0;break}case 2:{$B(a,75588)|0;break}default:{}}$B(a,75605)|0;l=k;return}function Ve(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{$B(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){$B(b,132627)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;fC(b,75610,f);break a}default:qa(135312,75624,94,75644)}while(0);l=g;return}function We(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;if(!b)$B(a,75763)|0;else{d=c[a+16>>2]|0;$B(a,75733)|0;b=f;d=d+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Ve(a,f);$B(a,75760)|0}l=g;return}function Xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+32|0;g=i;e=75714;f=0;while(1){if((f|0)>=(d|0))break;k=+h[b+(f<<4)>>3];j=+((c[45957]|0)>>>0)-+h[b+(f<<4)+8>>3];c[g>>2]=e;h[g+8>>3]=k;h[g+16>>3]=j;fC(a,75717,g);e=(f|0)==0?75730:191979;f=f+1|0}$B(a,95669)|0;l=i;return}function Ye(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;$B(a,80347)|0;$B(a,80362)|0;$B(a,80401)|0;$B(a,80450)|0;c[e>>2]=134232;c[e+4>>2]=80538;fC(a,80519,e);c[d>>2]=134116;c[d+4>>2]=80544;fC(a,80519,d);l=b;return}function Ze(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;b=l;l=l+64|0;d=b+8|0;j=b;c[j>>2]=ry(c[(c[a+16>>2]|0)+8>>2]|0)|0;fC(a,79300,j);i=+h[a+368>>3]*.5*+h[a+488>>3];g=+h[a+376>>3]*.5*+h[a+496>>3];f=+J(+(i*2.0000000949949026e-03))*180.0*.6366197723675814;e=+J(+(g*2.0000000949949026e-03))*180.0*.6366197723675814;h[d>>3]=i;h[d+8>>3]=g;h[d+16>>3]=-500.0;h[d+24>>3]=i;h[d+32>>3]=g;h[d+40>>3]=0.0;h[d+48>>3]=(f>e?f:e)*1.2;fC(a,79322,d);$B(a,79469)|0;$B(a,80299)|0;l=b;return}function _e(a){a=a|0;$B(a,79283)|0;return}function $e(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0;f=l;l=l+16|0;h=f;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=e;fC(a,79253,h);g[45958]=+(O(d,-10)|0);l=f;return}function af(a){a=a|0;$B(a,79236)|0;return}function bf(a){a=a|0;$B(a,79218)|0;return}function cf(a){a=a|0;$B(a,79202)|0;return}function df(a){a=a|0;$B(a,79181)|0;g[45958]=+g[45958]+-2.0;return}function ef(a){a=a|0;$B(a,79162)|0;return}function ff(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=ry(c[(c[a+16>>2]|0)+8>>2]|0)|0;fC(a,79140,d);l=b;return}function gf(a){a=a|0;$B(a,79124)|0;return}function hf(a){a=a|0;$B(a,79106)|0;g[45958]=+g[45958]+-5.0;return}function jf(a){a=a|0;$B(a,79090)|0;g[45958]=+g[45958]+5.0;return}function kf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0;r=l;l=l+144|0;o=r+104|0;q=r+56|0;m=r+32|0;j=r+24|0;n=r;p=e+4|0;i=c[p>>2]|0;f=+h[i+16>>3];i=c[i>>2]|0;c[n>>2]=c[e>>2];h[n+8>>3]=f;c[n+16>>2]=i;fC(b,78936,n);g[45959]=+g[45958]+-9.0;switch(a[e+48>>0]|0){case 108:{f=+h[d>>3];break}case 114:{i=d;f=+h[d>>3]-+h[e+32>>3];k=5;break}default:{i=d;f=+h[d>>3]-+h[e+32>>3]*.5;k=5}}if((k|0)==5)h[i>>3]=f;u=+h[b+488>>3];t=(+h[b+504>>3]+f)*u;s=(+h[b+512>>3]+ +h[d+8>>3])*+h[b+496>>3];h[j>>3]=+h[(c[p>>2]|0)+16>>3]*u;n=qf(b,78988,j)|0;f=+(c[b+360>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=f;i=qf(b,78205,m)|0;f=+g[45959];h[o>>3]=t;h[o+8>>3]=s;h[o+16>>3]=f;d=qf(b,78237,o)|0;j=o;k=(c[b+16>>2]|0)+16|0;m=j+40|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(m|0));o=rf(b,o,0.0)|0;e=c[e>>2]|0;c[q>>2]=c[c[p>>2]>>2];h[q+8>>3]=.25;h[q+16>>3]=0.0;c[q+24>>2]=e;c[q+28>>2]=79075;c[q+32>>2]=n;c[q+36>>2]=i;c[q+40>>2]=d;c[q+44>>2]=o;q=qf(b,79e3,q)|0;$B(b,q)|0;D_(q);D_(i);D_(o);D_(d);D_(n);l=r;return}function lf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=l;l=l+240|0;x=z+192|0;y=z+152|0;t=z+128|0;r=z+104|0;o=z+80|0;n=z+48|0;e=z+24|0;m=z;$B(a,78813)|0;g[45959]=+g[45958]+-6.0;i=+h[b>>3];j=+h[a+488>>3];p=(+h[a+504>>3]+i)*j;A=+h[b+8>>3];k=+h[a+496>>3];q=(+h[a+512>>3]+A)*k;j=(+h[b+16>>3]-i)*j;k=(+h[b+24>>3]-A)*k;s=a+16|0;A=k+j;i=+h[(c[s>>2]|0)+152>>3]/A*2.5;h[m>>3]=j;h[m+8>>3]=A*.25;h[m+16>>3]=k;b=qf(a,78173,m)|0;m=a+360|0;A=+(c[m>>2]|0);h[e>>3]=90.0;h[e+8>>3]=0.0;h[e+16>>3]=A;e=qf(a,78205,e)|0;A=+g[45959];h[x>>3]=p;h[x+8>>3]=q;h[x+16>>3]=A;f=qf(a,78237,x)|0;u=x;v=(c[s>>2]|0)+16|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));v=rf(a,x,0.0)|0;h[n>>3]=1.0;h[n+8>>3]=i;c[n+16>>2]=b;c[n+20>>2]=e;c[n+24>>2]=f;c[n+28>>2]=v;w=qf(a,78828,n)|0;$B(a,w)|0;D_(b);D_(e);D_(f);D_(v);D_(w);if(d|0){h[o>>3]=j;h[o+8>>3]=k;h[o+16>>3]=1.0;f=qf(a,78173,o)|0;A=+(c[m>>2]|0);h[r>>3]=0.0;h[r+8>>3]=0.0;h[r+16>>3]=A;e=qf(a,78205,r)|0;A=+g[45959];h[t>>3]=p;h[t+8>>3]=q;h[t+16>>3]=A;b=qf(a,78237,t)|0;u=x;v=(c[s>>2]|0)+56|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));x=rf(a,x,0.0)|0;h[y>>3]=0.0;h[y+8>>3]=0.0;h[y+16>>3]=0.0;c[y+24>>2]=f;c[y+28>>2]=e;c[y+32>>2]=b;c[y+36>>2]=x;y=qf(a,78874,y)|0;$B(a,y)|0;D_(f);D_(e);D_(b);D_(x);D_(y)}l=z;return}function mf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0.0;K=l;l=l+336|0;B=K+296|0;J=K+288|0;I=K+272|0;H=K+264|0;G=K+240|0;D=K+232|0;A=K+208|0;z=K+184|0;w=K+160|0;v=K+152|0;u=K+136|0;t=K+128|0;s=K+96|0;r=K+88|0;q=K+56|0;f=K+48|0;m=K+24|0;k=K;$B(a,78678)|0;g[45959]=+g[45958]+-2.0;o=a+488|0;p=a+496|0;L=+h[p>>3];h[k>>3]=+h[o>>3];h[k+8>>3]=L;h[k+16>>3]=1.0;k=qf(a,78173,k)|0;y=a+360|0;L=+(c[y>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=L;m=qf(a,78205,m)|0;L=+g[45959]+-2.0;h[B>>3]=0.0;h[B+8>>3]=0.0;h[B+16>>3]=L;n=qf(a,78237,B)|0;C=a+16|0;i=B;j=(c[C>>2]|0)+16|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=rf(a,B,0.0)|0;c[f>>2]=78300;c[f+4>>2]=d+1;E=a+504|0;F=a+512|0;i=0;f=qf(a,78269,f)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];L=+h[(c[C>>2]|0)+152>>3];h[q>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[q+8>>3]=N;h[q+16>>3]=0.0;h[q+24>>3]=L;M=qf(a,78314,q)|0;c[r>>2]=f;c[r+4>>2]=M;x=qf(a,78343,r)|0;D_(M);D_(f);i=i+1|0;f=x}L=+h[F>>3]+ +h[b+8>>3];N=+h[(c[C>>2]|0)+152>>3];h[s>>3]=+h[E>>3]+ +h[b>>3];h[s+8>>3]=L;h[s+16>>3]=0.0;h[s+24>>3]=N;x=qf(a,78314,s)|0;c[t>>2]=f;c[t+4>>2]=x;M=qf(a,78343,t)|0;D_(x);D_(f);c[u>>2]=k;c[u+4>>2]=m;c[u+8>>2]=n;c[u+12>>2]=j;x=qf(a,78693,u)|0;c[v>>2]=M;c[v+4>>2]=x;M=qf(a,78398,v)|0;D_(x);$B(a,M)|0;D_(k);D_(m);D_(n);D_(j);D_(M);if(e|0){N=+h[p>>3];h[w>>3]=+h[o>>3];h[w+8>>3]=N;h[w+16>>3]=1.0;n=qf(a,78173,w)|0;N=+(c[y>>2]|0);h[z>>3]=0.0;h[z+8>>3]=0.0;h[z+16>>3]=N;m=qf(a,78205,z)|0;N=+g[45959]+-2.0;h[A>>3]=0.0;h[A+8>>3]=0.0;h[A+16>>3]=N;k=qf(a,78237,A)|0;i=B;j=(c[C>>2]|0)+56|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=rf(a,B,.25)|0;c[D>>2]=d;i=0;f=qf(a,78738,D)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];h[G>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[G+8>>3]=N;h[G+16>>3]=0.0;D=qf(a,78753,G)|0;c[H>>2]=f;c[H+4>>2]=D;M=qf(a,78775,H)|0;D_(D);D_(f);i=i+1|0;f=M}c[I>>2]=n;c[I+4>>2]=m;c[I+8>>2]=k;c[I+12>>2]=j;I=qf(a,78785,I)|0;c[J>>2]=f;c[J+4>>2]=I;M=qf(a,78398,J)|0;D_(I);$B(a,M)|0;D_(n);D_(m);D_(k);D_(j);D_(M)}l=K;return}function nf(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=l;l=l+208|0;e=B+160|0;A=B+152|0;z=B+136|0;y=B+128|0;x=B+96|0;w=B+88|0;v=B+56|0;k=B+48|0;s=B+24|0;r=B;$B(a,78605)|0;g[45959]=+g[45958]+-4.0;C=+h[a+496>>3];h[r>>3]=+h[a+488>>3];h[r+8>>3]=C;h[r+16>>3]=1.0;r=qf(a,78173,r)|0;C=+(c[a+360>>2]|0);h[s>>3]=0.0;h[s+8>>3]=0.0;h[s+16>>3]=C;s=qf(a,78205,s)|0;C=+g[45959]+-2.0;h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=C;t=qf(a,78237,e)|0;u=a+16|0;f=e;i=(c[u>>2]|0)+56|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));n=rf(a,e,0.0)|0;c[k>>2]=78619;c[k+4>>2]=d+2;o=a+504|0;p=a+512|0;q=d+-1|0;m=0;e=qf(a,78269,k)|0;while(1){if((m|0)>=(d|0))break;f=b+(m<<4)|0;i=b+(m<<4)+8|0;D=+h[p>>3]+ +h[i>>3];C=+h[(c[u>>2]|0)+152>>3];h[v>>3]=+h[o>>3]+ +h[f>>3];h[v+8>>3]=D;h[v+16>>3]=0.0;h[v+24>>3]=C;k=qf(a,78314,v)|0;c[w>>2]=e;c[w+4>>2]=k;j=qf(a,78343,w)|0;D_(k);D_(e);if((m|0)==0|(m|0)==(q|0)){C=+h[p>>3]+ +h[i>>3];D=+h[(c[u>>2]|0)+152>>3];h[x>>3]=+h[o>>3]+ +h[f>>3];h[x+8>>3]=C;h[x+16>>3]=0.0;h[x+24>>3]=D;k=qf(a,78314,x)|0;c[y>>2]=j;c[y+4>>2]=k;e=qf(a,78343,y)|0;D_(k);D_(j)}else e=j;m=m+1|0}c[z>>2]=r;c[z+4>>2]=s;c[z+8>>2]=t;c[z+12>>2]=n;b=qf(a,78628,z)|0;c[A>>2]=e;c[A+4>>2]=b;d=qf(a,78398,A)|0;D_(b);$B(a,d)|0;D_(r);D_(s);D_(t);D_(n);D_(d);l=B;return}function of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0.0;v=l;l=l+160|0;e=v+120|0;u=v+112|0;t=v+96|0;s=v+88|0;r=v+56|0;m=v+48|0;n=v+24|0;q=v;$B(a,78157)|0;g[45959]=+g[45958]+-6.0;w=+h[a+496>>3];h[q>>3]=+h[a+488>>3];h[q+8>>3]=w;h[q+16>>3]=1.0;q=qf(a,78173,q)|0;w=+(c[a+360>>2]|0);h[n>>3]=0.0;h[n+8>>3]=0.0;h[n+16>>3]=w;n=qf(a,78205,n)|0;w=+g[45959];h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=w;o=qf(a,78237,e)|0;p=a+16|0;f=e;i=(c[p>>2]|0)+16|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));i=rf(a,e,0.0)|0;c[m>>2]=78300;c[m+4>>2]=d;j=a+504|0;k=a+512|0;f=0;e=qf(a,78269,m)|0;while(1){if((f|0)>=(d|0))break;y=+h[k>>3]+ +h[b+(f<<4)+8>>3];w=+h[(c[p>>2]|0)+152>>3];h[r>>3]=+h[j>>3]+ +h[b+(f<<4)>>3];h[r+8>>3]=y;h[r+16>>3]=0.0;h[r+24>>3]=w;x=qf(a,78314,r)|0;c[s>>2]=e;c[s+4>>2]=x;m=qf(a,78343,s)|0;D_(x);D_(e);f=f+1|0;e=m}c[t>>2]=q;c[t+4>>2]=n;c[t+8>>2]=o;c[t+12>>2]=i;t=qf(a,78352,t)|0;c[u>>2]=e;c[u+4>>2]=t;x=qf(a,78398,u)|0;D_(t);$B(a,x)|0;D_(q);D_(n);D_(o);D_(i);D_(x);l=v;return}function pf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;fC(a,78138,e);l=d;return}function qf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;h=i;e=i+24|0;f=i+8|0;c[f>>2]=d;g=q0(e,1024,b,f)|0;do if((g|0)>=0)if((g|0)>1023){a=C_(g+1|0)|0;c[f>>2]=d;Z0(a,b,f)|0;break}else{a=n1(e)|0;break}else{a=c[(c[a+12>>2]|0)+16>>2]|0;c[h>>2]=c$(c[(O_()|0)>>2]|0)|0;ub[a&63](78583,h);a=n1(191979)|0}while(0);l=i;return a|0}function rf(a,b,e){a=a|0;b=b|0;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+112|0;o=q+104|0;j=q+96|0;i=q+64|0;n=q+48|0;p=q+32|0;m=q+16|0;k=q;g=c[b+32>>2]|0;a:do switch(g|0){case 5:{f=c[b>>2]|0;if(!(b$(f,133220)|0)){c[k>>2]=78420;h[k+8>>3]=e;f=qf(a,78403,k)|0;break a}if(!(b$(f,130350)|0)){c[m>>2]=78424;h[m+8>>3]=e;f=qf(a,78403,m)|0;break a}if(!(b$(f,128349)|0)){c[p>>2]=78430;h[p+8>>3]=e;f=qf(a,78403,p)|0;break a}else{c[n>>2]=f;h[n+8>>3]=e;f=qf(a,78403,n)|0;break a}}case 1:{s=+(d[b+1>>0]|0)*.00390625;r=+(d[b+2>>0]|0)*.00390625;h[i>>3]=+(d[b>>0]|0)*.00390625;h[i+8>>3]=s;h[i+16>>3]=r;h[i+24>>3]=e;f=qf(a,78435,i)|0;break}default:{p=c[15686]|0;n=c[b>>2]|0;c[j>>2]=g;c[j+4>>2]=n;g1(p,78474,j)|0;qa(135312,78524,436,78544)}}while(0);c[o>>2]=f;p=qf(a,78561,o)|0;D_(f);l=q;return p|0}function sf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;h=c[c[a+12>>2]>>2]|0;j=c[h>>2]|0;i=c[h+4>>2]|0;h=c[h+8>>2]|0;c[g>>2]=80990;c[g+4>>2]=j;c[g+8>>2]=i;c[g+12>>2]=h;fC(a,83609,g);f=ry(c[f+8>>2]|0)|0;c[e>>2]=80990;c[e+4>>2]=f;fC(a,83641,e);c[d>>2]=80990;fC(a,83655,d);l=b;return}function tf(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=80990;fC(a,83557,d);l=b;return}function uf(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+304|0;V=W+296|0;U=W+288|0;T=W+272|0;R=W+264|0;Q=W+256|0;P=W+248|0;O=W+240|0;N=W+232|0;M=W+224|0;L=W+216|0;K=W+208|0;J=W+200|0;I=W+192|0;H=W+184|0;G=W+176|0;F=W+168|0;E=W+160|0;C=W+152|0;A=W+144|0;z=W+136|0;y=W+128|0;x=W+120|0;w=W+112|0;v=W+104|0;u=W+96|0;t=W+88|0;s=W+80|0;r=W+72|0;q=W+64|0;p=W+56|0;o=W+48|0;S=W+40|0;B=W+24|0;n=W+16|0;m=W;g=c[a+456>>2]|0;i=c[a+460>>2]|0;j=c[a+464>>2]|0;k=c[a+468>>2]|0;f=a+360|0;a:do if(c[4025]|0){switch(c[f>>2]|0){case 90:case 0:break a;default:{}}Gf();c[4025]=0}while(0);e=(+(k|0)-+(i|0))*.013888888888888888;b=(+(j|0)-+(g|0))*.013888888888888888;k=(c[f>>2]|0)==90;d=k?e:b;e=k?b:e;h[m>>3]=d;h[m+8>>3]=e;fC(a,81177,m);c[n>>2]=80990;fC(a,81192,n);if(d>0.0){b=+j$(d);h[18829]=b;b=b+3.0-+(~~b|0)}else b=3.0;b=+D(10.0,+b);h[18829]=b;h[B>>3]=b;h[B+8>>3]=b;fC(a,81361,B);c[S>>2]=80990;fC(a,81396,S);c[o>>2]=80990;fC(a,81454,o);c[p>>2]=80990;fC(a,81514,p);c[q>>2]=80990;fC(a,81563,q);c[r>>2]=80990;fC(a,81602,r);c[s>>2]=80990;fC(a,81653,s);c[t>>2]=80990;fC(a,81715,t);c[u>>2]=80990;fC(a,81825,u);c[v>>2]=80990;fC(a,81916,v);c[w>>2]=80990;fC(a,81970,w);c[x>>2]=80990;fC(a,82039,x);fC(a,82075,y);c[z>>2]=80990;fC(a,82200,z);c[A>>2]=80990;fC(a,82229,A);fC(a,82269,C);c[E>>2]=80990;fC(a,82362,E);c[F>>2]=80990;fC(a,82421,F);c[G>>2]=80990;fC(a,82502,G);fC(a,82572,H);c[I>>2]=80990;fC(a,82661,I);c[J>>2]=80990;fC(a,82766,J);c[K>>2]=80990;fC(a,82842,K);c[L>>2]=80990;fC(a,82881,L);c[M>>2]=80990;fC(a,82980,M);c[N>>2]=80990;fC(a,83026,N);fC(a,83115,O);c[P>>2]=80990;fC(a,83156,P);c[Q>>2]=80990;fC(a,83239,Q);c[R>>2]=80990;fC(a,83340,R);h[T>>3]=e;h[T+8>>3]=d;fC(a,83404,T);fC(a,83432,U);fC(a,83440,V);l=W;return}function vf(a){a=a|0;var b=0;b=l;l=l+16|0;fC(a,81170,b);l=b;return}function wf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;q=r+24|0;p=r+8|0;o=r;switch(a[e+48>>0]|0){case 108:{k=d;i=+h[e+32>>3];j=+h[d>>3];break}case 114:{i=+h[e+32>>3];g=i;f=5;break}default:{i=+h[e+32>>3];g=i*.5;f=5}}if((f|0)==5){j=+h[d>>3]-g;h[d>>3]=j;k=d}m=e+4|0;f=c[m>>2]|0;g=+h[f+16>>3];d=d+8|0;n=+h[d>>3]+g*.004629629629629629;h[d>>3]=n;i=j+i*.006944444444444444;h[k>>3]=i;f=c[f>>2]|0;do if(f){d=c[45960]|0;if(d|0?(b$(d,f)|0)==0:0)break;c[o>>2]=Ef(f)|0;fC(b,81069,o);o=c[m>>2]|0;c[45960]=c[o>>2];g=+h[o+16>>3]}while(0);f=~~g;f=(f|0)>1?f:1;if((f|0)!=(c[45961]|0)){j=+h[18829];c[p>>2]=f;h[p+8>>3]=j;fC(b,81077,p);c[45961]=f}c[q>>2]=Ff(c[e>>2]|0)|0;h[q+8>>3]=i;h[q+16>>3]=n;fC(b,81098,q);l=r;return}function xf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[b>>3];k=(+h[b+16>>3]-i)*.027777777777777776;g=+h[b+8>>3];j=(+h[b+24>>3]-g)*.027777777777777776;c[f>>2]=1;c[f+4>>2]=d|0?81011:191979;h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i*.013888888888888888;h[f+32>>3]=g*.013888888888888888;fC(a,81017,f);l=e;return}function yf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;Cf(c[a+16>>2]|0,e+8|0,e);Df(a,b,d,1);l=e;return}function zf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;t=l;l=l+128|0;s=t+112|0;q=t+104|0;p=t+96|0;e=t+88|0;n=t+16|0;o=t;k=c[a+16>>2]|0;j=C_((d*140|0)+140|0)|0;Cf(k,t+116|0,t+80|0);v=+h[b>>3];k=n+48|0;h[k>>3]=v;u=+h[b+8>>3];h[n+56>>3]=u;c[e>>2]=~~(v+(v>=0.0?.5:-.5));c[e+4>>2]=~~(u+(u>=0.0?.5:-.5));i=o+8|0;e=j+(Y0(j,80995,e)|0)|0;r=1;g=0;while(1){m=g+3|0;if((m|0)>=(d|0))break;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];f=1;while(1){if((f|0)==4){f=1;break}w=f+g|0;h[n+(f<<4)>>3]=+h[b+(w<<4)>>3];h[n+(f<<4)+8>>3]=+h[b+(w<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;XL(o,n,3,+(f|0)*.16666666666666666,0,0);u=+h[o>>3];v=+h[i>>3];c[p>>2]=~~(u+(u>=0.0?.5:-.5));c[p+4>>2]=~~(v+(v>=0.0?.5:-.5));f=f+1|0;e=e+(Y0(e,80995,p)|0)|0}r=r+6|0;g=m}c[q>>2]=j;fC(a,81002,q);D_(j);f=r+-1|0;e=0;while(1){if((e|0)>=(r|0))break;c[s>>2]=((e|0)%(f|0)|0|0)!=0&1;fC(a,81007,s);e=e+1|0}$B(a,150517)|0;l=t;return}function Af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;Cf(c[a+16>>2]|0,e+8|0,e);Df(a,b,d,0);l=e;return}function Bf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=80990;c[e+4>>2]=b;fC(a,80983,e);l=d;return}function Cf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function Df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));fC(a,80995,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));fC(a,80995,i)}$B(a,150517)|0;l=j;return}function Ef(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;a:while(1){d=15828;while(1){e=c[d+4>>2]|0;if(!e)break;if(!(b$(e,b)|0)){g=6;break a}d=d+8|0}c[f>>2]=81151;c[f+4>>2]=b;Pw(1,81125,f)|0;d=o1(b,45)|0;if(!d){d=81168;break}a[d>>0]=0}l=h;return d|0}function Ff(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[45962]|0;if(!d){c[45963]=64;d=C_(64)|0;c[45962]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[45963]|0;if((e|0)>(b+-8|0)){d=b<<1;c[45963]=d;d=F_(c[45962]|0,d)|0;c[45962]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;Y0(d+1|0,81120,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[45962]|0}function Gf(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=81151;c[b+4>>2]=83548;Pw(0,83530,b)|0;l=a;return}function Hf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;e=l;l=l+32|0;f=e+8|0;j=e;b=b+8|0;k=c[b>>2]|0;c[j>>2]=k;c[j+4>>2]=k;fC(a,84128,j);i=(+h[d>>3]+ +h[d+16>>3])*.5;g=(+h[d+8>>3]+ +h[d+24>>3])*.5;c[f>>2]=c[b>>2];h[f+8>>3]=i;h[f+16>>3]=g;fC(a,84170,f);l=e;return}function If(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[d>>3];k=+h[d+16>>3]-i;g=+h[d+24>>3];j=g-+h[d+8>>3];g=+(~~(+h[a+232>>3]-+h[a+216>>3])>>>0)-g;c[f>>2]=c[b+8>>2];h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i;h[f+32>>3]=g;fC(a,84215,f);$B(a,84307)|0;l=e;return}function Jf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function Kf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+160|0;s=t+152|0;r=t+136|0;q=t+120|0;k=t+112|0;n=t+104|0;m=t+88|0;j=t+72|0;i=t+64|0;o=t;if(!a)qa(108200,84312,212,84331);if(!b)qa(108230,84312,213,84331);p=b+8|0;if(!(c[p>>2]|0))qa(108233,84312,214,84331);if(c[b+52>>2]|0){c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];b=o+32|0;d=d+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];f=+h[o>>3];h[o+16>>3]=f;h[o+24>>3]=+h[o+40>>3];h[o+48>>3]=+h[b>>3];g=+h[o+8>>3];h[o+56>>3]=g;if(e<<24>>24){fC(a,84352,i);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[j>>3]=+h[o+(b<<4)>>3];h[j+8>>3]=u;fC(a,84355,j);b=b+1|0}h[m>>3]=f;h[m+8>>3]=g;fC(a,84355,m);m=c[p>>2]|0;c[n>>2]=4;c[n+4>>2]=m;fC(a,84362,n)}fC(a,84352,k);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[q>>3]=+h[o+(b<<4)>>3];h[q+8>>3]=u;fC(a,84355,q);b=b+1|0}h[r>>3]=f;h[r+8>>3]=g;fC(a,84355,r);r=c[p>>2]|0;c[s>>2]=4;c[s+4>>2]=r;fC(a,84377,s)}l=t;return}function Lf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+112|0;n=o+24|0;m=o+16|0;k=o;i=o+28|0;if(!b)qa(108200,84312,153,84393);if(!d)qa(108230,84312,154,84393);if(!(c[d+8>>2]|0))qa(108233,84312,155,84393);j=d+52|0;if(c[j>>2]|0){f=d+60|0;g=c[f>>2]|0;if((g|0)==98)g=18;else{tb[g&127](d);c[j>>2]=0;c[f>>2]=0;c[d+56>>2]=0;g=10}}else g=10;do if((g|0)==10){if(!((zC(d)|0)<<24>>24))break;f=j3(c[d+20>>2]|0)|0;if((c[d+24>>2]&-2|0)==6){J1(f,i)|0;i=c[i+36>>2]|0;c[d+56>>2]=i;f=U_(0,i,1,1,f,0)|0;c[j>>2]=f;a[d+16>>0]=1}else f=c[j>>2]|0;if(f|0)c[d+60>>2]=98;AC(d);if(c[j>>2]|0)g=18}while(0);if((g|0)==18){p=+h[e+8>>3]-+(c[d+36>>2]|0);h[k>>3]=+h[e>>3]-+(c[d+32>>2]|0);h[k+8>>3]=p;fC(b,84411,k);if(!(a[d+16>>0]|0)){c[m>>2]=c[d+12>>2];fC(b,84442,m)}else kJ(b,d);fC(b,84457,n)}l=o;return}function Mf(a){a=a|0;S_(c[a+52>>2]|0,c[a+56>>2]|0)|0;return}function Nf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+80|0;f=g+48|0;if(!a)qa(108200,84312,121,84467);e=c[a+16>>2]|0;if(!e)qa(96876,84312,123,84467);if(!b)qa(108230,84312,124,84467);d=b+8|0;if(!(c[d>>2]|0))qa(108233,84312,125,84467);if(!(c[e+8>>2]|0))qa(135797,84312,128,84467);else{fC(a,84487,g);fC(a,84496,g+8|0);fC(a,84523,g+16|0);fC(a,84548,g+24|0);fC(a,84577,g+32|0);fC(a,84605,g+40|0);c[f>>2]=c[d>>2];fC(a,84612,f);fC(a,84651,g+56|0);fC(a,107982,g+64|0);l=g;return}}function Of(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0;i=l;l=l+128|0;g=i+80|0;f=i;if(!a)qa(108200,84312,97,84656);if(!b)qa(108230,84312,98,84656);e=c[b+8>>2]|0;if(!e)qa(108233,84312,99,84656);else{m=+h[d>>3];j=~~(m+(m>=0.0?.5:-.5));m=+h[d+8>>3];b=~~(m+(m>=0.0?.5:-.5));m=+h[d+16>>3];k=~~(m+(m>=0.0?.5:-.5));m=+h[d+24>>3];d=~~(m+(m>=0.0?.5:-.5));c[f>>2]=2;c[f+4>>2]=5;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=-1;c[f+24>>2]=1;c[f+28>>2]=-1;c[f+32>>2]=0;h[f+40>>3]=0.0;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=5;c[f+72>>2]=0;c[f+76>>2]=e;fC(a,84675,f);c[g>>2]=j;c[g+4>>2]=b;c[g+8>>2]=j;c[g+12>>2]=d;c[g+16>>2]=k;c[g+20>>2]=d;c[g+24>>2]=k;c[g+28>>2]=b;c[g+32>>2]=j;c[g+36>>2]=b;fC(a,84733,g);l=i;return}}function Pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;o=l;l=l+96|0;n=o+56|0;m=o+32|0;k=o;i=+h[d>>3];j=+h[d+16>>3]-i;f=+h[d+24>>3];g=f-+h[d+8>>3];if(!a)qa(108200,84312,53,84765);if(!b)qa(108230,84312,54,84765);e=b+8|0;if(!(c[e>>2]|0))qa(108233,84312,55,84765);$B(a,84784)|0;$B(a,c[e>>2]|0)|0;e=a+360|0;f=-f;if(!(c[e>>2]|0)){h[n>>3]=j;h[n+8>>3]=g;h[n+16>>3]=i;h[n+24>>3]=f;fC(a,84913,n)}else{h[k>>3]=g;h[k+8>>3]=j;h[k+16>>3]=i;h[k+24>>3]=f;fC(a,84804,k);c[m>>2]=c[e>>2];h[m+8>>3]=i;h[m+16>>3]=f;fC(a,84883,m)}$B(a,84992)|0;l=o;return}function Qf(a){a=a|0;var b=0,c=0;b=Sy(a)|0;while(1){if(!b)break;Rf(b);b=Ty(a,b)|0}c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;Sf(b);b=Gx(a,b)|0}c=Ty(a,c)|0}return}function Rf(a){a=a|0;var b=0,d=0;Az(a,134365,304,1)|0;dM(a);bN(a,c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&1);a=a+16|0;c[(c[a>>2]|0)+176>>2]=0;b=uH(20)|0;d=c[a>>2]|0;c[d+172>>2]=b;c[d+184>>2]=0;d=uH(20)|0;b=c[a>>2]|0;c[b+180>>2]=d;c[b+200>>2]=0;b=uH(12)|0;d=c[a>>2]|0;c[d+196>>2]=b;c[d+192>>2]=0;d=uH(12)|0;b=c[a>>2]|0;c[b+188>>2]=d;c[b+208>>2]=0;b=uH(12)|0;a=c[a>>2]|0;c[a+204>>2]=b;c[a+216>>2]=1;return}function Sf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;Az(d,134378,176,1)|0;eM(d)|0;h=KL(d,c[46404]|0,1,0)|0;g=d+16|0;c[(c[g>>2]|0)+156>>2]=h;h=NL(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,c[46398]|0,191979)|0;i=NL(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,c[46398]|0,191979)|0;e=c[g>>2]|0;f=e+154|0;b[f>>1]=1;b[e+168>>1]=1;if((h|0)==(i|0)&(a[h>>0]|0)!=0){b[f>>1]=1e3;i=e+156|0;c[i>>2]=(c[i>>2]|0)*100}if(Ok(d)|0){i=c[g>>2]|0;b[i+154>>1]=0;c[i+156>>2]=0}i=(KL(d,c[46417]|0,0,0)|0)&255;a[(c[g>>2]|0)+152>>0]=i;i=(KL(d,c[46405]|0,1,0)|0)&65535;b[(c[g>>2]|0)+170>>1]=i;return}function Tf(a){a=a|0;var b=0,d=0;Uf(c[(c[a+16>>2]|0)+192>>2]|0);d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;JM(b);b=Gx(a,b)|0}Vf(d);d=Ty(a,d)|0}Wf(a);return}function Uf(b){b=b|0;var d=0,e=0,f=0,g=0;while(1){if(!b)break;f=b+16|0;g=c[(c[f>>2]|0)+164>>2]|0;Xf(b);d=c[f>>2]|0;if((a[d+156>>0]|0)!=1){b=g;continue}e=c[d+180>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+172>>2]|0;if(e){D_(e);d=c[f>>2]|0}D_(d);D_(b);b=g}return}function Vf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+172>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+180>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+188>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+196>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+204>>2]|0;if(d){D_(d);b=c[e>>2]|0}nH(c[b+104>>2]|0);nH(c[(c[e>>2]|0)+108>>2]|0);b=c[(c[e>>2]|0)+8>>2]|0;if(b|0)tb[c[(c[b+4>>2]|0)+4>>2]&127](a);Cz(a,134365)|0;return}function Wf(a){a=a|0;var d=0,e=0,f=0;d=wA(a)|0;while(1){if(!d)break;Wf(d);d=xA(d)|0}if(Az(a,134401,0,1)|0){f=a+16|0;d=c[f>>2]|0;e=c[d+184>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+268>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+216>>2]|0;if(e){D_(e);d=c[f>>2]|0}do if(c[d+196>>2]|0){e=b[d+236>>1]|0;while(1){if((e|0)>(b[d+238>>1]|0))break;D_(c[(c[d+196>>2]|0)+(e<<6)+12>>2]|0);e=e+1|0;d=c[f>>2]|0}e=c[d+196>>2]|0;if((b[d+236>>1]|0)==-1){D_(e+-64|0);break}else{D_(e);break}}while(0);if((fz(a)|0)!=(a|0)){nH(c[(c[f>>2]|0)+12>>2]|0);Cz(a,134401)|0}}return}function Xf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+176>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[d+172>>2]|0)+(a<<2)>>2]|0;kh(b);D_(c[b+16>>2]|0);D_(b);b=a;d=c[e>>2]|0}b=c[d+184>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[(c[e>>2]|0)+180>>2]|0)+(a<<2)>>2]|0;kh(b);D_(c[b+16>>2]|0);D_(b);b=a}return}function Yf(a){a=a|0;if(ay(a)|0)Zf(a);eJ(a);return}function Zf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+48|0;g=h+32|0;f=h;b=YD(a,-1,8)|0;d=ZD(a,0,f)|0;XD(a,2,8,f)|0;d=(d|0)==0;e=(b|0)<0;if(e&d)_f(a);else{if(d)c[f+16>>2]=3;else b=e?8:b;c[f+8>>2]=b;c[f+20>>2]=0;e=rD(a,g,0)|0;b=c[g>>2]|0;do if((b|0)==1){_f(a);b=0}else{if(c[(c[(c[a+16>>2]|0)+8>>2]|0)+84>>2]|0){_f(a);b=0;break}c[f+12>>2]=1;d=0;while(1){if((d|0)>=(b|0))break;b=c[e+(d<<2)>>2]|0;$f(b,a);_f(b);d=d+1|0;b=c[g>>2]|0}ag(a);WD(c[g>>2]|0,e,a,f)|0;bg(a);cg(c[g>>2]|0,e,a);b=0}while(0);while(1){if((b|0)>=(c[g>>2]|0))break;f=e+(b<<2)|0;D_(c[(c[(c[f>>2]|0)+16>>2]|0)+8>>2]|0);Wf(c[f>>2]|0);dz(a,c[f>>2]|0)|0;b=b+1|0}D_(e)}l=h;return}function _f(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+40|0;e=m;i=KL(a,nx(a,0,85007,0)|0,-1,1)|0;$M(a,10);d=Nk(a,e)|0;eg(a,a);Qf(a);f=(i|0)==1;g=e+32|0;h=(i|0)==2;i=(i|0)==3;j=e+28|0;e=e+24|0;while(1){zj(a,d);if(f){d=3;break}if(c[g>>2]|0){Pw(0,85013,k)|0;c[e>>2]=0;d=0}Jh(a,(d|0)!=0&1);if(h){d=7;break}Mi(a,d);if(i){d=9;break}n=(c[j>>2]|0)+-1|0;c[j>>2]=n;if(!((n|0)!=0&(c[e>>2]|0)!=0)){d=11;break}}if((d|0)==3)fg(a,1);else if((d|0)==7)fg(a,2);else if((d|0)==9)fg(a,2);else if((d|0)==11){if(b[(c[a+16>>2]|0)+136>>1]&16)gg(a);tk(a);kg(a);if((QL(xx(a,85104)|0)|0)<<24>>24)nl(a)}l=m;return}function $f(b,d){b=b|0;d=d|0;var e=0,f=0;Az(b,134401,280,1)|0;e=uH(96)|0;b=c[b+16>>2]|0;c[b+8>>2]=e;d=c[d+16>>2]|0;f=c[d+8>>2]|0;h[e>>3]=+h[f>>3];h[e+24>>3]=+h[f+24>>3];c[b+144>>2]=c[d+144>>2];a[b+115>>0]=a[d+115>>0]|0;c[b+116>>2]=c[d+116>>2];c[b+248>>2]=c[d+248>>2];c[b+252>>2]=c[d+252>>2];c[b+244>>2]=c[d+244>>2];return}function ag(a){a=a|0;var b=0,d=0,e=0;b=uH((ay(a)|0)<<4)|0;d=Sy(a)|0;while(1){if(!d)break;e=c[d+16>>2]|0;c[e+132>>2]=b;h[b>>3]=+h[e+16>>3]*.013888888888888888;h[b+8>>3]=+h[e+24>>3]*.013888888888888888;b=b+16|0;d=Ty(a,d)|0}return}function bg(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;b=e;d=Sy(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;c[f+132>>2]=0;h[f+16>>3]=+h[b>>3]*72.0;h[f+24>>3]=+h[b+8>>3]*72.0;b=b+16|0;d=Ty(a,d)|0}D_(e);return}function cg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=0;f=0;while(1){if((e|0)>=(a|0))break;i=(c[(c[(c[b+(e<<2)>>2]|0)+16>>2]|0)+180>>2]|0)+f|0;e=e+1|0;f=i}i=d+16|0;c[(c[i>>2]|0)+180>>2]=f;g=uH((f<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=g;g=0;e=1;while(1){if((g|0)>=(a|0))break;h=(c[b+(g<<2)>>2]|0)+16|0;f=1;while(1){d=c[h>>2]|0;if((f|0)>(c[d+180>>2]|0))break;d=qD(c[(c[d+184>>2]|0)+(f<<2)>>2]|0)|0;c[(c[(c[i>>2]|0)+184>>2]|0)+(e<<2)>>2]=d;dg(c[(c[(c[h>>2]|0)+184>>2]|0)+(f<<2)>>2]|0,d);f=f+1|0;e=e+1|0}g=g+1|0}return}function dg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Az(d,134401,280,1)|0;g=d+16|0;d=(c[g>>2]|0)+16|0;f=b+16|0;b=(c[f>>2]|0)+16|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];c[d+24>>2]=c[b+24>>2];c[d+28>>2]=c[b+28>>2];b=c[f>>2]|0;d=c[g>>2]|0;a[d+275>>0]=a[b+275>>0]|0;d=d+48|0;b=b+48|0;e=d+64|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));b=c[(c[f>>2]|0)+180>>2]|0;c[(c[g>>2]|0)+180>>2]=b;d=uH((b<<2)+4|0)|0;c[(c[g>>2]|0)+184>>2]=d;d=1;while(1){e=c[f>>2]|0;if((d|0)>(b|0))break;e=qD(c[(c[e+184>>2]|0)+(d<<2)>>2]|0)|0;c[(c[(c[g>>2]|0)+184>>2]|0)+(d<<2)>>2]=e;dg(c[(c[(c[f>>2]|0)+184>>2]|0)+(d<<2)>>2]|0,e);d=d+1|0}f=e+12|0;c[(c[g>>2]|0)+12>>2]=c[f>>2];c[f>>2]=0;return}function eg(a,b){a=a|0;b=b|0;if((fz(a)|0)!=(a|0))Az(a,134401,280,1)|0;if((a|0)==(b|0))c[(c[(fz(a)|0)+16>>2]|0)+188>>2]=a;a=wA(a)|0;while(1){if(!a)break;eg(a,b);a=xA(a)|0}return}function fg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1040|0;k=m+8|0;j=m;e=m+16|0;f=nx(a,1,87076,191979)|0;g=nx(a,1,85147,191979)|0;h=(b|0)>0;d=(b|0)==1;b=Sy(a)|0;while(1){if(!b)break;if(h?(i=b+16|0,c[j>>2]=c[(c[i>>2]|0)+232>>2],Y0(e,134313,j)|0,rx(b,f,e)|0,!d):0){c[k>>2]=c[(c[i>>2]|0)+236>>2];Y0(e,134313,k)|0;rx(b,g,e)|0}b=Ty(a,b)|0}l=m;return}function gg(a){a=a|0;var b=0,c=0,d=0;c=vA(a,86580,0)|0;if(c|0){b=Sy(c)|0;while(1){if(!b)break;d=Ty(c,b)|0;sh(a,b);hg(a,b);Vf(b);cz(a,b)|0;b=d}zA(a,c)|0}return}function hg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=c[(c[b+16>>2]|0)+232>>2]|0;i=a+16|0;a=c[(c[i>>2]|0)+196>>2]|0;d=c[a+(j<<6)>>2]|0;h=a+(j<<6)+4|0;g=0;e=0;while(1){if((e|0)>=(d|0)){f=7;break}f=c[(c[h>>2]|0)+(e<<2)>>2]|0;e=e+1|0;if((f|0)==(b|0)){f=4;break}else g=f}if((f|0)==4){while(1){if((e|0)>=(d|0))break;f=c[a+(j<<6)+4>>2]|0;c[f+(e+-1<<2)>>2]=c[f+(e<<2)>>2];f=c[(c[i>>2]|0)+196>>2]|0;e=e+1|0;d=c[f+(j<<6)>>2]|0;a=f;f=4}c[a+(j<<6)>>2]=d+-1}else if((f|0)==7?(g|0)!=(b|0):0)qa(85113,85120,248,85130);return}function ig(a){a=a|0;return c[(c[(fz(a)|0)+16>>2]|0)+188>>2]|0}function jg(b,c){b=b|0;c=c|0;var d=0;d=a[b+28>>0]|0;if(a[c+28>>0]|0)if(d<<24>>24){d=~~(+h[b>>3]-+h[c>>3]);if(!d)d=~~(+h[b+8>>3]-+h[c+8>>3])}else d=-1;else d=d<<24>>24!=0&1;return d|0}function kg(a){a=a|0;lg(a,1);return}function lg(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0;Z=l;l=l+656|0;O=Z+592|0;N=Z+552|0;f=Z+544|0;T=Z+96|0;U=Z;Y=Z+632|0;V=d+16|0;X=b[(c[V>>2]|0)+136>>1]&14;P=X&65535;Q=T+16|0;c[Q>>2]=Z+368;R=U+16|0;c[R>>2]=Z+192;do if(X<<16>>16){S=X<<16>>16==4;do if(S){mg(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1))A=9;else{Pw(0,85153,f)|0;A=9}}else if(X<<16>>16==8){mg(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)){cN(d,0);n=0;m=0;k=0;break}else{ng(d);cN(d,1);n=0;m=0;k=0;break}}else A=9;while(0);if((A|0)==9){ll(d);if(qJ()|0)break;W=uH(96)|0;K=c[(c[V>>2]|0)+248>>2]|0;c[Y+8>>2]=(K|0)/4|0;c[Y+12>>2]=K;k=uH(512)|0;F=Y+4|0;c[F>>2]=0;c[Y>>2]=0;j=c[V>>2]|0;C=b[j+236>>1]|0;D=0;L=0;M=k;E=k;m=k;n=k;o=k;H=0;I=0;a:while(1){if((C|0)>(b[j+238>>1]|0))break;p=c[j+196>>2]|0;i=c[p+(C<<6)>>2]|0;G=i+D|0;g=c[p+(C<<6)+4>>2]|0;f=c[g>>2]|0;if(!f)f=H;else{_=+(H|0);f=c[f+16>>2]|0;y=+h[f+16>>3]-+h[f+88>>3];f=~~(y>_?_:y)}if((i|0)!=0?(J=c[g+(i+-1<<2)>>2]|0,(J|0)!=0):0){y=+(I|0);g=c[J+16>>2]|0;_=+h[g+96>>3]+ +h[g+16>>3];g=~~(_=(i|0))break;k=c[(c[f+(C<<6)+4>>2]|0)+(x<<2)>>2]|0;w=k+16|0;f=c[w>>2]|0;i=c[f+112>>2]|0;if(i){i=i+16|0;j=c[(c[i>>2]|0)+96>>2]|0;if(!j){A=21;break a}s=j+56|0;f=f+16|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];a[(c[(c[i>>2]|0)+96>>2]|0)+81>>0]=1;f=c[w>>2]|0}if((a[f+156>>0]|0)!=0?(kb[c[17300>>2]&63](k)|0)<<24>>24==0:0){q=t;f=r;j=u;k=v;i=o}else{s=0;q=t;j=u;k=v;A=25}b:do if((A|0)==25){while(1){A=0;p=c[w>>2]|0;i=c[(c[p+180>>2]|0)+(s<<2)>>2]|0;if(!i)break;switch(a[(c[i+16>>2]|0)+112>>0]|0){case 6:case 4:{f=q;i=r;break}default:{og(i,1,16,64);f=q+1|0;c[r+(q<<2)>>2]=i;if(!(f&127)){g=xH(g,(q<<2)+516|0)|0;i=g;j=g;k=g;n=g;o=g}else i=r}}s=s+1|0;q=f;r=i;A=25}f=c[p+188>>2]|0;c:do if(!f)i=o;else{s=0;i=o;while(1){f=c[f+(s<<2)>>2]|0;if(!f)break c;og(f,2,0,128);o=q+1|0;c[r+(q<<2)>>2]=f;if(!(o&127)){g=xH(i,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=r;p=c[w>>2]|0;s=s+1|0;q=o;r=f;f=c[p+188>>2]|0}}while(0);f=c[p+204>>2]|0;if(!f)f=r;else{if(!(a[p+156>>0]|0)){v=p+96|0;_=+h[v>>3];s=p+240|0;h[v>>3]=+h[s>>3];h[s>>3]=_;s=0;p=r}else{s=0;p=r}while(1){f=c[f+(s<<2)>>2]|0;if(!f){f=p;break b}og(f,0,0,128);o=q+1|0;c[p+(q<<2)>>2]=f;if(!(o&127)){g=xH(n,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=p;s=s+1|0;q=o;p=f;f=c[(c[w>>2]|0)+204>>2]|0}}}while(0);u=c[V>>2]|0;w=c[u+196>>2]|0;x=x+1|0;t=q;r=f;q=u;u=j;v=k;o=i;i=c[w+(C<<6)>>2]|0;f=w}C=C+1|0;D=G;L=t;M=r;E=u;j=q;m=v;k=g;H=B;I=z}if((A|0)==21)qa(85221,85234,313,85247);c[Y>>2]=H;c[F>>2]=I;_0(E,L,4,58);c[W+84>>2]=uH((D<<5)+11520|0)|0;c[Y+16>>2]=uH(C<<5)|0;d:do if(X<<16>>16==2){f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break d;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){qg(g);f=c[i>>2]|0}f=f+164|0}}while(0);z=U+48|0;A=U+-48|0;B=T+48|0;C=T+-48|0;y=+(K|0);x=0;e:while(1){if((x|0)>=(L|0))break;v=M+(x<<2)|0;r=c[v>>2]|0;s=rg(r)|0;t=r+16|0;g=c[t>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:r;f=g;g=c[g+16>>2]|0}else f=r;i=f+16|0;if(c[g+164>>2]&32){g=c[Q>>2]|0;F3(g|0,c[i>>2]|0,176)|0;n=T;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[Q>>2]=g;o=c[f>>2]&3;n=c[T>>2]&3;c[((n|0)==3?T:B)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?T:C)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f;f=T}q=f+16|0;w=1;f=x;while(1){u=f+1|0;if((u|0)>=(L|0))break;j=M+(u<<2)|0;f=c[j>>2]|0;if((s|0)!=(rg(f)|0))break;if(!(a[(c[t>>2]|0)+113>>0]|0)){k=f+16|0;g=c[k>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:f;f=g;g=c[g+16>>2]|0}i=f+16|0;if(c[g+164>>2]&32){g=c[R>>2]|0;F3(g|0,c[i>>2]|0,176)|0;n=U;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[R>>2]=g;o=c[f>>2]&3;n=c[U>>2]&3;c[((n|0)==3?U:z)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?U:A)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f}i=c[q>>2]|0;f=g+16|0;n=N;o=i+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(jg(N,O)|0)break;f=g+56|0;n=N;o=i+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(jg(N,O)|0)break;K=c[t>>2]|0;if((c[K+164>>2]&15|0)==2?(c[K+96>>2]|0)!=(c[(c[k>>2]|0)+96>>2]|0):0)break;if(c[(c[(c[j>>2]|0)+16>>2]|0)+164>>2]&64|0)break}w=w+1|0;f=u}if(S){if((w|0)==1)f=O;else f=uH(w<<2)|0;c[f>>2]=rg(c[v>>2]|0)|0;g=1;while(1){if((g|0)>=(w|0))break;c[f+(g<<2)>>2]=c[v+(g<<2)>>2];g=g+1|0}AJ(d,f,w,P,17296);if((w|0)>1)D_(f);x=u;continue}f=c[r>>2]&3;K=c[((f|0)==3?r:r+48|0)+40>>2]|0;f=c[((f|0)==2?r:r+-48|0)+40>>2]|0;g=c[K+16>>2]|0;i=c[g+232>>2]|0;if((K|0)!=(f|0))if((i|0)==(c[(c[f+16>>2]|0)+232>>2]|0)){sg(d,Y,W,M,x,w,P);x=u;continue}else{tg(d,Y,W,M,x,w,P);x=u;continue}f=c[V>>2]|0;do if((i|0)==(b[f+238>>1]|0))if((i|0)>0){f=~~(+h[(c[(c[c[(c[f+196>>2]|0)+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[g+24>>3]);break}else{f=~~+h[g+80>>3];break}else if((i|0)==(b[f+236>>1]|0)){f=~~(+h[g+24>>3]-+h[(c[(c[c[(c[f+196>>2]|0)+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);break}else{f=c[f+196>>2]|0;_=+h[g+24>>3];K=~~(+h[(c[(c[c[f+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-_);f=~~(_-+h[(c[(c[c[f+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);f=(K|0)<(f|0)?K:f;break}while(0);YK(W,M,x,w,y,+((f|0)/2|0|0),17296);f=0;while(1){if((f|0)>=(w|0)){x=u;continue e}g=c[(c[(c[M+(f+x<<2)>>2]|0)+16>>2]|0)+96>>2]|0;if(g|0)kM(d,g);f=f+1|0}}f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){qg(g);kM(d,c[(c[i>>2]|0)+104>>2]|0);f=c[i>>2]|0}f=f+164|0}if(!e){n=W;k=W}else{ug(d);n=W;k=W}}f:do if((c[46427]|0)!=0|(c[46428]|0)!=0?(c[46433]|0)!=0|(c[46432]|0)!=0:0){j=Sy(d)|0;while(1){if(!j)break f;g:do if(c[46427]|0){f=Hx(d,j)|0;while(1){if(!f)break g;g=f+-48|0;i=(c[f>>2]&3|0)==2?f:g;if(c[(c[i+16>>2]|0)+100>>2]|0){eL(i,1)|0;kM(d,c[(c[((c[f>>2]&3|0)==2?f:g)+16>>2]|0)+100>>2]|0)}f=Ix(d,f)|0}}while(0);h:do if(c[46428]|0){f=Ex(d,j)|0;while(1){if(!f)break h;g=f+16|0;if(c[(c[g>>2]|0)+104>>2]|0?eL(f,0)|0:0)kM(d,c[(c[g>>2]|0)+104>>2]|0);f=Gx(d,f)|0}}while(0);j=Ty(d,j)|0}}while(0);switch(X&15){case 4:case 8:break;default:{D_(m);D_(c[n+84>>2]|0);D_(k);D_(c[Y+16>>2]|0);rJ()}}c[46367]=1;c[46368]=1}while(0);l=Z;return}function mg(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=Sy(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;if(c[d+204>>2]|0){f=d+96|0;e=+h[f>>3];d=d+240|0;h[f>>3]=+h[d>>3];h[d>>3]=e}b=Ty(a,b)|0}return}function ng(b){b=b|0;var d=0,e=0,f=0,g=0;d=(c[b+16>>2]|0)+192|0;a:while(1){f=c[d>>2]|0;if(!f){d=12;break}g=f+16|0;d=c[g>>2]|0;do if((a[d+156>>0]|0)==1){e=c[d+112>>2]|0;if(!e){e=c[d+104>>2]|0;if(!e)break;qg(f);d=e}else{e=c[(c[e+16>>2]|0)+96>>2]|0;if(!e){d=6;break a}f=e+56|0;d=d+16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];a[e+81>>0]=1;d=e}kM(b,d);d=c[g>>2]|0}while(0);d=d+164|0}if((d|0)==6)qa(85421,85234,234,85440);else if((d|0)==12)return}function og(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do if(!d){g=c[b>>2]&3;d=c[((g|0)==3?b:b+48|0)+40>>2]|0;g=c[((g|0)==2?b:b+-48|0)+40>>2]|0;if((d|0)!=(g|0)){d=(c[(c[d+16>>2]|0)+232>>2]|0)==(c[(c[g+16>>2]|0)+232>>2]|0)?2:1;break}d=c[b+16>>2]|0;if(!(a[d+44>>0]|0))d=(a[d+84>>0]|0)==0?8:4;else d=4}while(0);a:do if(!e)switch(d|0){case 1:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)?16:32;break a}case 2:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)?16:32;break a}default:{e=16;break a}}while(0);c[(c[b+16>>2]|0)+164>>2]=d|f|e;return}function pg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+624|0;z=D+584|0;y=D+544|0;s=D+368|0;e=D+192|0;t=D+96|0;v=D;u=t+16|0;c[u>>2]=s;w=v+16|0;c[w>>2]=e;C=c[b>>2]|0;B=c[d>>2]|0;x=C+16|0;q=c[x>>2]|0;d=c[q+164>>2]|0;f=d&15;A=B+16|0;b=c[A>>2]|0;g=c[b+164>>2]&15;do if((g|0)==(f|0)){p=rg(C)|0;r=rg(B)|0;n=c[p>>2]|0;g=n&3;f=c[(c[((g|0)==3?p:p+48|0)+40>>2]|0)+16>>2]|0;g=c[(c[((g|0)==2?p:p+-48|0)+40>>2]|0)+16>>2]|0;i=(c[f+232>>2]|0)-(c[g+232>>2]|0)|0;o=c[r>>2]|0;m=o&3;k=c[(c[((m|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0;m=c[(c[((m|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0;j=(c[k+232>>2]|0)-(c[m+232>>2]|0)|0;i=(i|0)>-1?i:0-i|0;j=(j|0)>-1?j:0-j|0;if((i|0)!=(j|0)){b=i-j|0;break}g=~~(+h[f+16>>3]-+h[g+16>>3]);g=(g|0)>-1?g:0-g|0;f=~~(+h[k+16>>3]-+h[m+16>>3]);f=(f|0)>-1?f:0-f|0;if((g|0)!=(f|0)){b=g-f|0;break}g=n>>>4;f=o>>>4;if((g|0)!=(f|0)){b=g-f|0;break}if(!(a[q+44>>0]|0)){d=(a[q+84>>0]|0)==0?p:C;g=d;d=c[(c[d+16>>2]|0)+164>>2]|0}else g=C;f=g+16|0;if(d&32){F3(s|0,c[f>>2]|0,176)|0;i=t;j=g;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[u>>2]=s;j=c[g>>2]&3;i=c[t>>2]&3;c[((i|0)==3?t:t+48|0)+40>>2]=c[((j|0)==2?g:g+-48|0)+40>>2];c[((i|0)==2?t:t+-48|0)+40>>2]=c[((j|0)==3?g:g+48|0)+40>>2];i=s+16|0;j=(c[f>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=s+56|0;j=(c[f>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[s+112>>0]=1;c[s+116>>2]=g;g=t;b=c[A>>2]|0}if(!(a[b+44>>0]|0)){b=(a[b+84>>0]|0)==0?r:B;f=b;b=c[b+16>>2]|0}else f=B;d=f+16|0;if(!(c[b+164>>2]&32))e=b;else{F3(e|0,c[d>>2]|0,176)|0;i=v;j=f;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[w>>2]=e;j=c[f>>2]&3;i=c[v>>2]&3;c[((i|0)==3?v:v+48|0)+40>>2]=c[((j|0)==2?f:f+-48|0)+40>>2];c[((i|0)==2?v:v+-48|0)+40>>2]=c[((j|0)==3?f:f+48|0)+40>>2];i=e+16|0;j=(c[d>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=e+56|0;j=(c[d>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[e+112>>0]=1;c[e+116>>2]=f}d=c[g+16>>2]|0;b=e+16|0;i=y;j=d+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=jg(y,z)|0;if(!b){b=e+56|0;i=y;j=d+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=jg(y,z)|0;if(!b){d=c[(c[x>>2]|0)+164>>2]&192;b=c[(c[A>>2]|0)+164>>2]&192;if((d|0)==(b|0)){b=((c[C>>2]|0)>>>4)-((c[B>>2]|0)>>>4)|0;break}else{b=d-b|0;break}}}}else b=g-f|0;while(0);l=D;return b|0}function qg(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=b+16|0;d=c[f>>2]|0;if(c[d+176>>2]|0){d=c[d+180>>2]|0;while(1){d=(c[d>>2]|0)+16|0;e=c[d>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}e=c[e+96>>2]|0;g=+h[e+24>>3];i=+h[e+32>>3];e=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=c[f>>2]|0;f=c[(c[d>>2]|0)+96>>2]|0;h[f+56>>3]=(e?i:g)*.5+ +h[b+16>>3];h[f+64>>3]=+h[b+24>>3];a[f+81>>0]=1}return}function rg(a){a=a|0;var b=0,d=0;while(1){b=c[a+16>>2]|0;d=c[b+172>>2]|0;if(!d)break;else a=d}while(1){b=c[b+116>>2]|0;if(!b)break;a=b;b=c[b+16>>2]|0}return a|0}function sg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;B=l;l=l+1712|0;x=B+1664|0;s=B+1488|0;t=B+1392|0;A=B+1696|0;y=B+696|0;z=B;p=t+16|0;c[p>>2]=s;q=c[f+(g<<2)>>2]|0;r=q+16|0;k=c[r>>2]|0;u=a[k+113>>0]|0;if(c[k+164>>2]&32){F3(s|0,k|0,176)|0;k=t;n=q;o=k+48|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));c[p>>2]=s;k=c[t>>2]&3;c[((k|0)==3?t:t+48|0)+40>>2]=c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2];c[((k|0)==2?t:t+-48|0)+40>>2]=c[((c[q>>2]&3|0)==3?q:q+48|0)+40>>2];k=s+16|0;n=(c[r>>2]|0)+56|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));k=s+56|0;n=(c[r>>2]|0)+16|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));a[s+112>>0]=1;c[s+116>>2]=q;q=t}k=1;while(1){if((k|0)>=(i|0)){w=6;break}if(!(a[(c[(c[f+(k+g<<2)>>2]|0)+16>>2]|0)+113>>0]|0))k=k+1|0;else{w=7;break}}a:do if((w|0)==6)if(!(u<<24>>24)){k=c[q+16>>2]|0;if(c[k+96>>2]|0){Sg(b,d,e,q,j);break}if((j|0)==2){A=c[q>>2]&3;Tg(c[((A|0)==3?q:q+48|0)+40>>2]|0,c[((A|0)==2?q:q+-48|0)+40>>2]|0,f,g,i,2);break}t=a[k+49>>0]|0;u=a[k+89>>0]|0;if(!(t<<24>>24==1&u<<24>>24!=4)?!(t<<24>>24!=4&u<<24>>24==1):0){p=c[q>>2]&3;o=c[((p|0)==3?q:q+48|0)+40>>2]|0;p=c[((p|0)==2?q:q+-48|0)+40>>2]|0;k=c[o+16>>2]|0;n=c[k+232>>2]|0;if((n|0)>0){u=c[(c[b+16>>2]|0)+196>>2]|0;t=n+~(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1)|0;m=+h[(c[(c[c[u+(t<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[u+(t<<6)+16>>3]-+h[k+24>>3]-+h[u+(n<<6)+24>>3]}else m=+(c[(c[b+16>>2]|0)+252>>2]|0);C=+(i+1|0);v=+(c[d+12>>2]|0)/C;m=m/C;Vg(b,d,e,o,q,y,1);Vg(b,d,e,p,q,z,0);s=y+52|0;t=z+52|0;p=(j|0)==10;q=e+80|0;k=0;while(1){if((k|0)>=(i|0))break a;r=c[f+(k+g<<2)>>2]|0;o=c[s>>2]|0;n=o+-1|0;G=+h[y+56+(n<<5)>>3];F=+h[y+56+(n<<5)+16>>3];E=+h[y+56+(n<<5)+24>>3];h[18830]=G;h[18831]=E;k=k+1|0;C=+(k|0);D=v*C;h[18832]=F+D;C=E+m*C;h[18833]=C;h[18834]=G;h[18835]=C;n=(c[t>>2]|0)+-1|0;G=+h[z+56+(n<<5)+16>>3];h[18836]=G;h[18837]=C+m;E=+h[z+56+(n<<5)>>3];F=+h[z+56+(n<<5)+24>>3];h[18840]=G;h[18839]=F;h[18838]=E-D;h[18841]=C;n=0;while(1){if((n|0)>=(o|0)){n=0;break}o=y+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];SK(e,x);n=n+1|0;o=c[s>>2]|0}while(1){if((n|0)==3)break;j=150640+(n<<5)|0;c[x>>2]=c[j>>2];c[x+4>>2]=c[j+4>>2];c[x+8>>2]=c[j+8>>2];c[x+12>>2]=c[j+12>>2];c[x+16>>2]=c[j+16>>2];c[x+20>>2]=c[j+20>>2];c[x+24>>2]=c[j+24>>2];c[x+28>>2]=c[j+28>>2];SK(e,x);n=n+1|0}o=c[t>>2]|0;while(1){n=o+-1|0;if((o|0)<=0)break;o=z+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];SK(e,x);o=n}if(p)n=sJ(e,A)|0;else n=yJ(e,A)|0;o=c[A>>2]|0;if(!o)break a;QK(r,c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0,n,o,17296);c[q>>2]=0}}Ug(b,d,e,f,g,i,q,(j|0)==10&1)}else w=7;while(0);if((w|0)==7)Rg(b,f,g,i,q,j);l=B;return}function tg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ba=l;l=l+2576|0;S=ba+2528|0;_=ba+2568|0;k=ba+2352|0;n=ba+2176|0;t=ba+1904|0;Y=ba+1808|0;$=ba+1712|0;T=ba+1016|0;U=ba+320|0;V=ba+256|0;X=ba+2564|0;Z=ba+2560|0;z=ba+288|0;A=ba+224|0;L=ba+192|0;M=ba+160|0;N=ba+128|0;P=ba+96|0;Q=ba+64|0;R=ba+32|0;W=ba;s=t+16|0;c[s>>2]=k;o=Y+16|0;c[o>>2]=n;aa=$+16|0;c[aa>>2]=ba+2e3;if(!(c[45964]|0)){c[45964]=vH(32e3)|0;c[45965]=vH(32e3)|0;c[45966]=2e3;c[45967]=2e3}u=c[f+(g<<2)>>2]|0;K=c[u>>2]&3;p=u+48|0;q=u+-48|0;K=(c[(c[(c[((K|0)==3?u:p)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((K|0)==2?u:q)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0;r=u+16|0;if((((K|0)>-1?K:0-K|0)|0)<=1){k=c[r>>2]|0;if(!(c[k+164>>2]&32)){K=u;n=0}else{n=c[s>>2]|0;F3(n|0,k|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=n;w=c[t>>2]&3;c[((w|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?t:t+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[s>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;n=0;J=12}}else{F3(k|0,c[r>>2]|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));w=t+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=k;k=c[r>>2]|0;if(!(c[k+164>>2]&32)){F3(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=Y+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}else{n=c[o>>2]|0;F3(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;w=c[Y>>2]&3;c[((w|0)==3?Y:Y+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?Y:Y+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[o>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=u;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];w=(c[s>>2]|0)+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}k=rg(u)|0;while(1){n=c[(c[k+16>>2]|0)+172>>2]|0;if(!n)break;else k=n}c[((o&3|0)==2?t:t+-48|0)+40>>2]=c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2];k=c[s>>2]|0;a[k+84>>0]=0;a[k+112>>0]=1;n=k+56|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=1;J=12}if((J|0)==12){c[k+116>>2]=u;K=t}H=(j|0)==2;if(H?(v=xg(b,K,c[45964]|0,_)|0,c[Z>>2]=v,(v|0)!=0):0)J=63;else J=15;a:do if((J|0)==15){G=(j|0)==10;c[Z>>2]=0;o=c[K>>2]&3;k=c[((o|0)==3?K:K+48|0)+40>>2]|0;o=c[((o|0)==2?K:K+-48|0)+40>>2]|0;c[_>>2]=o;yg(z,b,d,k,0,K);c[T>>2]=c[z>>2];c[T+4>>2]=c[z+4>>2];c[T+8>>2]=c[z+8>>2];c[T+12>>2]=c[z+12>>2];c[T+16>>2]=c[z+16>>2];c[T+20>>2]=c[z+20>>2];c[T+24>>2]=c[z+24>>2];c[T+28>>2]=c[z+28>>2];c[V>>2]=c[z>>2];c[V+4>>2]=c[z+4>>2];c[V+8>>2]=c[z+8>>2];c[V+12>>2]=c[z+12>>2];c[V+16>>2]=c[z+16>>2];c[V+20>>2]=c[z+20>>2];TK(e,K,1,T,zg(k)|0);B=T+52|0;I=(c[B>>2]|0)+-1|0;D=V+24|0;h[D>>3]=+h[T+56+(I<<5)+24>>3];E=V+8|0;h[E>>3]=+h[T+56+(I<<5)+8>>3];I=c[k+16>>2]|0;F=b+16|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];Ag(A,S,1,m);c[V>>2]=c[A>>2];c[V+4>>2]=c[A+4>>2];c[V+8>>2]=c[A+8>>2];c[V+12>>2]=c[A+12>>2];c[V+16>>2]=c[A+16>>2];c[V+20>>2]=c[A+20>>2];c[V+24>>2]=c[A+24>>2];c[V+28>>2]=c[A+28>>2];A=V+16|0;if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){I=c[B>>2]|0;c[B>>2]=I+1;I=T+56+(I<<5)|0;c[I>>2]=c[V>>2];c[I+4>>2]=c[V+4>>2];c[I+8>>2]=c[V+8>>2];c[I+12>>2]=c[V+12>>2];c[I+16>>2]=c[V+16>>2];c[I+20>>2]=c[V+20>>2];c[I+24>>2]=c[V+24>>2];c[I+28>>2]=c[V+28>>2]}w=b+60|0;C=U+52|0;x=e+56|0;y=e+69|0;j=e+16|0;z=e+29|0;I=K;q=0;r=-1;b:while(1){s=k;t=0;k=0;u=I;while(1){p=o;v=o;if((a[(c[p+16>>2]|0)+156>>0]|0)!=1)break b;if((kb[c[17300>>2]&63](p)|0)<<24>>24)break b;o=t|1;ca=150640+(t<<5)|0;Bg(L,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[ca>>2]=c[L>>2];c[ca+4>>2]=c[L+4>>2];c[ca+8>>2]=c[L+8>>2];c[ca+12>>2]=c[L+12>>2];c[ca+16>>2]=c[L+16>>2];c[ca+20>>2]=c[L+20>>2];c[ca+24>>2]=c[L+24>>2];c[ca+28>>2]=c[L+28>>2];if(!k){q=Cg(p)|0;k=(q|0)<((a[(c[(c[w>>2]|0)+16>>2]|0)+113>>0]<<1&2)+3&255|0);q=k?q:q+-2|0;r=k?r:1;k=(k^1)&1}if(!((k|0)==0|(r|0)>0))break;ca=150640+(o<<5)|0;yg(M,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[ca>>2]=c[M>>2];c[ca+4>>2]=c[M+4>>2];c[ca+8>>2]=c[M+8>>2];c[ca+12>>2]=c[M+12>>2];c[ca+16>>2]=c[M+16>>2];c[ca+20>>2]=c[M+20>>2];c[ca+24>>2]=c[M+24>>2];c[ca+28>>2]=c[M+28>>2];ca=c[c[(c[v+16>>2]|0)+180>>2]>>2]|0;o=c[ca>>2]&3;s=c[((o|0)==3?ca:ca+48|0)+40>>2]|0;o=c[((o|0)==2?ca:ca+-48|0)+40>>2]|0;c[_>>2]=o;t=t+2|0;r=r+-1|0;u=ca}yg(N,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[U>>2]=c[N>>2];c[U+4>>2]=c[N+4>>2];c[U+8>>2]=c[N+8>>2];c[U+12>>2]=c[N+12>>2];c[U+16>>2]=c[N+16>>2];c[U+20>>2]=c[N+20>>2];c[U+24>>2]=c[N+24>>2];c[U+28>>2]=c[N+28>>2];WK(e,u,1,U,zg(c[((c[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0)|0);ca=U+56+((c[C>>2]|0)+-1<<5)|0;t=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[t+232>>2]<<6)+24>>3]+ +h[t+24>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];Ag(V,S,4,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[x>>3]=1.5707963267948966;a[y>>0]=1;Dg(e,I,u,T,U,o);if(!G){k=yJ(e,X)|0;o=c[X>>2]|0;if(H&(o|0)>4){ca=k+16|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];ca=k+32|0;o=k+(o+-1<<4)|0;c[ca>>2]=c[o>>2];c[ca+4>>2]=c[o+4>>2];c[ca+8>>2]=c[o+8>>2];c[ca+12>>2]=c[o+12>>2];G3(k+48|0,o|0,16)|0;c[X>>2]=4;o=4}else J=33}else{k=sJ(e,X)|0;o=c[X>>2]|0;J=33}if((J|0)==33){J=0;if(!o)break a}u=c[Z>>2]|0;p=u+o|0;if((p|0)>(c[45966]|0)){c[45966]=p<<1;t=xH(c[45964]|0,p<<5)|0;c[45964]=t;o=c[X>>2]|0}else t=c[45964]|0;s=0;p=u;while(1){if((s|0)>=(o|0))break;ca=t+(p<<4)|0;u=k+(s<<4)|0;c[ca>>2]=c[u>>2];c[ca+4>>2]=c[u+4>>2];c[ca+8>>2]=c[u+8>>2];c[ca+12>>2]=c[u+12>>2];s=s+1|0;p=p+1|0}c[Z>>2]=p;o=Eg(c[c[(c[v+16>>2]|0)+180>>2]>>2]|0,q,t,Z)|0;Fg(I,e);p=c[o>>2]&3;k=c[((p|0)==3?o:o+48|0)+40>>2]|0;p=c[((p|0)==2?o:o+-48|0)+40>>2]|0;c[_>>2]=p;I=k+16|0;yg(P,b,d,k,c[c[(c[I>>2]|0)+172>>2]>>2]|0,o);c[T>>2]=c[P>>2];c[T+4>>2]=c[P+4>>2];c[T+8>>2]=c[P+8>>2];c[T+12>>2]=c[P+12>>2];c[T+16>>2]=c[P+16>>2];c[T+20>>2]=c[P+20>>2];c[T+24>>2]=c[P+24>>2];c[T+28>>2]=c[P+28>>2];TK(e,o,1,T,zg(k)|0);ca=T+56+((c[B>>2]|0)+-1<<5)|0;I=c[I>>2]|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];Ag(V,S,1,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[B>>2]|0;c[B>>2]=ca+1;ca=T+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[j>>3]=-1.5707963267948966;a[z>>0]=1;I=o;o=p}k=t|1;r=150640+(t<<5)|0;Bg(Q,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[r>>2]=c[Q>>2];c[r+4>>2]=c[Q+4>>2];c[r+8>>2]=c[Q+8>>2];c[r+12>>2]=c[Q+12>>2];c[r+16>>2]=c[Q+16>>2];c[r+20>>2]=c[Q+20>>2];c[r+24>>2]=c[Q+24>>2];c[r+28>>2]=c[Q+28>>2];yg(R,b,d,p,u,0);c[U>>2]=c[R>>2];c[U+4>>2]=c[R+4>>2];c[U+8>>2]=c[R+8>>2];c[U+12>>2]=c[R+12>>2];c[U+16>>2]=c[R+16>>2];c[U+20>>2]=c[R+20>>2];c[U+24>>2]=c[R+24>>2];c[U+28>>2]=c[R+28>>2];c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[V+20>>2]=c[R+20>>2];c[V+24>>2]=c[R+24>>2];c[V+28>>2]=c[R+28>>2];r=(n|0)!=0;s=u+-48|0;WK(e,r?Y:u,1,U,zg(c[((c[u>>2]&3|0)==2?u:s)+40>>2]|0)|0);ca=(c[C>>2]|0)+-1|0;h[D>>3]=+h[U+56+(ca<<5)+24>>3];h[E>>3]=+h[U+56+(ca<<5)+8>>3];ca=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[ca+232>>2]<<6)+24>>3]+ +h[ca+24>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];Ag(W,S,4,m);c[V>>2]=c[W>>2];c[V+4>>2]=c[W+4>>2];c[V+8>>2]=c[W+8>>2];c[V+12>>2]=c[W+12>>2];c[V+16>>2]=c[W+16>>2];c[V+20>>2]=c[W+20>>2];c[V+24>>2]=c[W+24>>2];c[V+28>>2]=c[W+28>>2];if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}Dg(e,I,u,T,U,k);if(G)q=sJ(e,X)|0;else q=yJ(e,X)|0;k=c[X>>2]|0;if(!(H&(k|0)>4)){if(!k)break}else{ca=q+16|0;c[ca>>2]=c[q>>2];c[ca+4>>2]=c[q+4>>2];c[ca+8>>2]=c[q+8>>2];c[ca+12>>2]=c[q+12>>2];ca=q+32|0;k=q+(k+-1<<4)|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];G3(q+48|0,k|0,16)|0;c[X>>2]=4;k=4}o=c[Z>>2]|0;n=o+k|0;if((n|0)>(c[45966]|0)){c[45966]=n<<1;p=xH(c[45964]|0,n<<5)|0;c[45964]=p;k=c[X>>2]|0}else p=c[45964]|0;n=0;while(1){if((n|0)>=(k|0))break;ca=p+(o<<4)|0;X=q+(n<<4)|0;c[ca>>2]=c[X>>2];c[ca+4>>2]=c[X+4>>2];c[ca+8>>2]=c[X+8>>2];c[ca+12>>2]=c[X+12>>2];n=n+1|0;o=o+1|0}c[Z>>2]=o;Fg(I,e);if(r)k=(c[Y>>2]&3|0)==2?Y:Y+-48|0;else k=(c[u>>2]&3|0)==2?u:s;c[_>>2]=c[k+40>>2];v=o;J=63}while(0);c:do if((J|0)==63){if((i|0)==1){QK(K,c[_>>2]|0,c[45964]|0,v,17296);break}t=d+12|0;u=v+-1|0;m=+((O(c[t>>2]|0,i+-1|0)|0)/2|0|0);n=c[45964]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=n+(k<<4)|0;h[ca>>3]=+h[ca>>3]-m;k=k+1|0}k=c[45966]|0;if((k|0)>(c[45967]|0)){c[45967]=k;o=xH(c[45965]|0,k<<4)|0;c[45965]=o;n=c[45964]|0}else o=c[45965]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=o+(k<<4)|0;d=n+(k<<4)|0;c[ca>>2]=c[d>>2];c[ca+4>>2]=c[d+4>>2];c[ca+8>>2]=c[d+8>>2];c[ca+12>>2]=c[d+12>>2];k=k+1|0}QK(K,c[_>>2]|0,o,v,17296);r=$+48|0;s=$+-48|0;q=1;while(1){if((q|0)>=(i|0))break c;o=c[f+(q+g<<2)>>2]|0;p=o+16|0;k=c[p>>2]|0;if(c[k+164>>2]&32){n=c[aa>>2]|0;F3(n|0,k|0,176)|0;w=$;x=o;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[aa>>2]=n;w=c[$>>2]&3;c[((w|0)==3?$:r)+40>>2]=c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2];c[((w|0)==2?$:s)+40>>2]=c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2];w=n+16|0;x=(c[p>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[aa>>2]|0;w=k+56|0;x=(c[p>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=o;o=$}p=c[45964]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=p+(k<<4)|0;h[ca>>3]=+h[ca>>3]+ +(c[t>>2]|0);k=k+1|0}n=c[45965]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=n+(k<<4)|0;_=p+(k<<4)|0;c[ca>>2]=c[_>>2];c[ca+4>>2]=c[_+4>>2];c[ca+8>>2]=c[_+8>>2];c[ca+12>>2]=c[_+12>>2];k=k+1|0}QK(o,c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0,n,v,17296);q=q+1|0}}while(0);l=ba;return}function ug(a){a=a|0;var b=0,d=0,e=0;b=Sy(a)|0;while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;if((kb[c[4324]&63](d)|0)<<24>>24?(e=c[(c[d+16>>2]|0)+8>>2]|0,e|0):0)vg(e);d=Gx(a,d)|0}b=Ty(a,b)|0}return}function vg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[a+4>>2]|0;g=vH(f*48|0)|0;b=g;d=0;e=(c[a>>2]|0)+((f+-1|0)*48|0)|0;while(1){if((d|0)>=(f|0)){b=0;break}wg(e,b);b=b+48|0;d=d+1|0;e=e+-48|0}while(1){d=c[a>>2]|0;if((b|0)>=(f|0))break;D_(c[d+(b*48|0)>>2]|0);b=b+1|0}D_(d);c[a>>2]=g;return}function wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[a+4>>2]|0;h=vH(g<<4)|0;d=h;e=0;f=(c[a>>2]|0)+(g+-1<<4)|0;while(1){if((e|0)>=(g|0))break;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];d=d+16|0;e=e+1|0;f=f+-16|0}c[b>>2]=h;c[b+4>>2]=g;c[b+8>>2]=c[a+12>>2];c[b+12>>2]=c[a+8>>2];h=b+16|0;g=a+32|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];h=b+32|0;g=a+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];return}function xg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+96|0;q=x+80|0;s=x+64|0;r=x+48|0;u=x+32|0;v=x+16|0;w=x;m=d;while(1){t=m+16|0;g=c[t>>2]|0;if(!(a[g+112>>0]|0))break;m=c[g+116>>2]|0}g=c[m>>2]&3;o=c[((g|0)==2?m:m+-48|0)+40>>2]|0;g=c[((g|0)==3?m:m+48|0)+40>>2]|0;m=o+16|0;n=g+16|0;y=(c[(c[m>>2]|0)+232>>2]|0)-(c[(c[n>>2]|0)+232>>2]|0)|0;switch(((y|0)>-1?y:0-y|0)|0){case 1:{g=0;break}case 2:{if(!(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1))p=6;else g=0;break}default:p=6}do if((p|0)==6){if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(g|0)){c[f>>2]=o;y=(c[n>>2]|0)+16|0;p=(c[t>>2]|0)+16|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Pg(u,s,q);p=(c[m>>2]|0)+16|0;y=(c[t>>2]|0)+56|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Pg(v,s,q)}else{c[f>>2]=g;y=(c[m>>2]|0)+16|0;p=(c[t>>2]|0)+56|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Pg(u,s,q);p=(c[n>>2]|0)+16|0;y=(c[t>>2]|0)+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Pg(v,s,q)}g=c[(c[t>>2]|0)+96>>2]|0;if(!g){g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+48|0;y=e+32|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=4;break}j=+h[g+24>>3];i=+h[g+32>>3];p=(c[(c[(ez(o)|0)+16>>2]|0)+116>>2]&1|0)==0;k=p?i:j;y=(c[(c[t>>2]|0)+96>>2]|0)+56|0;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];y=(Qg(r,s,q)|0)==0;i=(p?j:i)*.5;j=+h[w>>3];if(y){h[w>>3]=j-i;y=w+8|0;h[y>>3]=+h[y>>3]+k*.5}else{h[w>>3]=j+i;y=w+8|0;h[y>>3]=+h[y>>3]-k*.5}g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+32|0;y=e+48|0;u=e+64|0;c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2];g=e+80|0;y=e+96|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=7}while(0);l=x;return g|0}function yg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0;q=c[f+16>>2]|0;p=+h[q+16>>3];j=p-+h[q+88>>3];m=j+-4.0;l=Lg(d,f,g,i,-1)|0;if(!l){n=~~(j+(m>=0.0?-3.5:-4.5));k=c[e>>2]|0;k=(k|0)>(n|0)?n:k}else{k=Mg(d,f,l)|0;do if(!k){n=c[l+16>>2]|0;j=+h[n+240>>3]+ +h[n+16>>3];if(!(a[n+156>>0]|0)){j=+(c[(c[d+16>>2]|0)+248>>2]|0)*.5+j;break}else{j=j+ +(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+32>>3]+ +(c[e+8>>2]|0);while(0);o=j=0.0?.5:-.5))}o=+(k|0);n=(a[q+156>>0]|0)==1;if(n?(c[q+104>>2]|0)!=0:0)m=p+10.0;else m=p+4.0+ +h[q+96>>3];l=Lg(d,f,g,i,1)|0;if(!l){f=~~(m+(m>=0.0?.5:-.5));k=c[e+4>>2]|0;k=(k|0)<(f|0)?f:k}else{k=Mg(d,f,l)|0;do if(!k){f=c[l+16>>2]|0;j=+h[f+16>>3]-+h[f+88>>3];if(!(a[f+156>>0]|0)){j=j-+(c[(c[d+16>>2]|0)+248>>2]|0)*.5;break}else{j=j-+(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+16>>3]-+(c[e+8>>2]|0);while(0);m=j>m?j:m;k=~~(m+(m>=0.0?.5:-.5))}j=+(k|0);if(n?(c[q+104>>2]|0)!=0:0){j=j-+h[q+96>>3];if(j>3];d=c[(c[d+16>>2]|0)+196>>2]|0;q=c[q+232>>2]|0;m=p-+h[d+(q<<6)+16>>3];p=+h[d+(q<<6)+24>>3]+p;h[b>>3]=o;h[b+8>>3]=m;h[b+16>>3]=j;h[b+24>>3]=p;return}function zg(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)if((c[b+176>>2]|0)>1)b=1;else b=(c[b+184>>2]|0)>1&1;else b=0;return b|0}function Ag(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=l;l=l+32|0;f=g;switch(d|0){case 1:{Kg(f,+h[b>>3],e,+h[b+16>>3],+h[b+8>>3]);break}case 4:{Kg(f,+h[b>>3],+h[b+24>>3],+h[b+16>>3],e);break}default:{}}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];c[a+20>>2]=c[f+20>>2];c[a+24>>2]=c[f+24>>2];c[a+28>>2]=c[f+28>>2];l=g;return}function Bg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0;l=c[b+16>>2]|0;k=l+(e<<5)|0;j=+h[k>>3];m=l+(e<<5)+8|0;g=+h[m>>3];n=l+(e<<5)+16|0;f=+h[n>>3];l=l+(e<<5)+24|0;i=+h[l>>3];if(j==f){d=c[(c[d+16>>2]|0)+196>>2]|0;o=e+1|0;j=+(c[b>>2]|0);g=+h[d+(o<<6)+24>>3]+ +h[(c[(c[c[d+(o<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];f=+(c[b+4>>2]|0);i=+h[(c[(c[c[d+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[d+(e<<6)+16>>3];h[k>>3]=j;h[m>>3]=g;h[n>>3]=f;h[l>>3]=i}h[a>>3]=j;h[a+8>>3]=g;h[a+16>>3]=f;h[a+24>>3]=i;return}function Cg(b){b=b|0;var d=0,e=0;b=c[b+16>>2]|0;e=b+16|0;d=0;while(1){b=c[c[b+180>>2]>>2]|0;b=c[(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0;if((a[b+156>>0]|0)!=1)break;if((c[b+184>>2]|0)!=1)break;if((c[b+176>>2]|0)!=1)break;if(+h[b+16>>3]!=+h[e>>3])break;d=d+1|0}return d|0}function Dg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+32|0;j=k;h=Hg(b,-1)|0;b=Hg(b,1)|0;if(!((h|0)!=0?!(fL(h)|0):0))i=3;do if((i|0)==3){if(b|0?(fL(b)|0)==0:0)break;h=Ig(d,-1)|0;b=Ig(d,1)|0;if(h|0?(fL(h)|0)==0:0)break;if(b|0?(fL(b)|0)==0:0)break;h=e+52|0;b=0;while(1){if((b|0)>=(c[h>>2]|0))break;d=e+56+(b<<5)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];c[j+20>>2]=c[d+20>>2];c[j+24>>2]=c[d+24>>2];c[j+28>>2]=c[d+28>>2];SK(a,j);b=b+1|0}h=c[a+80>>2]|0;i=g+-3|0;b=0;while(1){if((b|0)>=(g|0))break;e=150640+(b<<5)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[j+16>>2]=c[e+16>>2];c[j+20>>2]=c[e+20>>2];c[j+24>>2]=c[e+24>>2];c[j+28>>2]=c[e+28>>2];SK(a,j);b=b+1|0}d=h+1|0;i=i+d|0;h=c[f+52>>2]|0;while(1){b=h+-1|0;if((h|0)<=0)break;h=f+56+(b<<5)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];c[j+20>>2]=c[h+20>>2];c[j+24>>2]=c[h+24>>2];c[j+28>>2]=c[h+28>>2];SK(a,j);h=b}Jg(a,d,i)}while(0);l=k;return}function Eg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;while(1){if(!b)break;a=c[c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0;b=b+-1|0}c[e>>2]=f+1;g=d+(f<<4)|0;b=d+(f+-1<<4)|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];f=c[e>>2]|0;c[e>>2]=f+1;f=d+(f<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];f=d+(c[e>>2]<<4)|0;e=(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];return a|0}function Fg(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0;m=d+84|0;l=d+80|0;e=0;d=b;a:while(1){j=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;k=j+16|0;if((a[(c[k>>2]|0)+156>>0]|0)!=1)break;if((kb[c[17300>>2]&63](j)|0)<<24>>24)break;d=c[l>>2]|0;while(1){if((e|0)>=(d|0))break a;if(!(+h[(c[m>>2]|0)+(e<<5)+8>>3]>+h[(c[k>>2]|0)+24>>3]))break;e=e+1|0}d=c[m>>2]|0;b=c[k>>2]|0;do if(!(+h[d+(e<<5)+24>>3]<+h[b+24>>3])){g=+h[d+(e<<5)>>3];i=~~g;f=+h[d+(e<<5)+16>>3];if(!(c[b+104>>2]|0)){Gg(j,i,~~((f+g)*.5),~~f);break}else{Gg(j,i,~~f,~~(+h[b+96>>3]+f));break}}while(0);d=c[c[(c[k>>2]|0)+180>>2]>>2]|0}return}function Gg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+16>>2]|0;h[a+16>>3]=+(d|0);h[a+88>>3]=+(d-b|0);h[a+96>>3]=+(e-d|0);return}function Hg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180>>2]|0;h=((h|0)==2?a:a+-48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function Ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172>>2]|0;h=((h|0)==3?a:a+48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function Jg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0;l=a+84|0;i=b+-1|0;while(1){if((i|0)>(d|0))break;f=c[l>>2]|0;j=f+(i<<5)|0;e=+h[j>>3];if(!(i-b&1)){f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e>=m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}else{f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e+16.0>m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}i=i+1|0}k=(c[a+80>>2]|0)+-1|0;g=0;while(1){if((g|0)>=(k|0))break;i=c[l>>2]|0;f=i+(g<<5)|0;j=g+1|0;a=i+(j<<5)|0;if(!((g|0)<(b|0)|(g|0)>(d|0))?(g-b&1|0)==0:0){e=+h[f>>3]+16.0;f=i+(j<<5)+16|0;if(e>+h[f>>3])h[f>>3]=e;e=+h[i+(g<<5)+16>>3]+-16.0;if(!(e<+h[a>>3])){g=j;continue}h[a>>3]=e;g=j;continue}if(!((g|0)<(d|0)&(j|0)>=(b|0))){g=j;continue}if(j-b&1|0){g=j;continue}e=+h[i+(j<<5)+16>>3];if(+h[f>>3]+16.0>e)h[f>>3]=e+-16.0;f=i+(g<<5)+16|0;e=+h[a>>3];if(!(+h[f>>3]+-16.0>3]=e+16.0;g=j}return}function Kg(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function Lg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=c[(c[b+16>>2]|0)+196>>2]|0;h=c[d+16>>2]|0;j=c[h+232>>2]|0;i=k+(j<<6)|0;j=k+(j<<6)+4|0;h=c[h+236>>2]|0;a:do{h=h+g|0;if((h|0)<=-1){b=0;break}if((h|0)>=(c[i>>2]|0)){b=0;break}b=c[(c[j>>2]|0)+(h<<2)>>2]|0;k=c[b+16>>2]|0;switch(a[k+156>>0]|0){case 0:break a;case 1:{if(c[k+104>>2]|0)break a;break}default:{}}}while((Og(b,d,e,f)|0)<<24>>24!=0);return b|0}function Mg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){i=c[d+212>>2]|0;h=i}else{i=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[i>>2]&3;h=c[(c[(c[((g|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;i=c[(c[(c[((g|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0}d=c[e+16>>2]|0;if(!(a[d+156>>0]|0)){e=c[d+212>>2]|0;e=(e|0)==(b|0)?0:e;return ((e|0)==(h|0)|((e|0)==0|(e|0)==(i|0))?0:e)|0}f=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[f>>2]&3;d=c[(c[(c[((g|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if(!(!((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))?(Ng(d,e)|0)!=0:0)){d=c[(c[(c[((g|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))d=0;else{e=(Ng(d,e)|0)==0;return (e?0:d)|0}}return d|0}function Ng(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[a+16>>2]|0;a=c[b+16>>2]|0;f=+h[a+16>>3];if((+h[d+16>>3]<=f?f<=+h[d+32>>3]:0)?(e=+h[a+24>>3],+h[d+24>>3]<=e):0)a=e<=+h[d+40>>3]&1;else a=0;return a|0}function Og(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[b+16>>2]|0;j=(c[i+236>>2]|0)>(c[(c[d+16>>2]|0)+236>>2]|0);a:do if((c[i+184>>2]|0)==1){b:do if(f|0){h=0;b=c[c[i+180>>2]>>2]|0;while(1){if((h|0)>=2)break b;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((b|0)==(d|0))break b;g=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[g+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[g+184>>2]|0)!=1)break b;if(!(a[g+156>>0]|0))break b;if((c[b+184>>2]|0)!=1)break b;if(!(a[b+156>>0]|0))break b;h=h+1|0;f=c[c[b+180>>2]>>2]|0;b=c[c[g+180>>2]>>2]|0}}while(0);if(e|0?(c[i+176>>2]|0)==1:0){g=0;d=e;b=c[c[i+172>>2]>>2]|0;while(1){if((g|0)>=2){b=0;break a}b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((b|0)==(d|0)){b=0;break a}f=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[f+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[f+176>>2]|0)!=1){b=0;break a}if(!(a[f+156>>0]|0)){b=0;break a}if((c[b+176>>2]|0)!=1){b=0;break a}if(!(a[b+156>>0]|0)){b=0;break a}g=g+1|0;d=c[c[b+172>>2]>>2]|0;b=c[c[f+172>>2]>>2]|0}}else b=0}else b=0;while(0);return b|0}function Pg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Qg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return (~~((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))|0)>0|0}function Rg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=l;l=l+256|0;D=R+232|0;C=R+216|0;P=R+88|0;O=R+80|0;K=R+64|0;L=R+200|0;M=R+184|0;N=R;E=R+168|0;F=R+152|0;G=R+136|0;H=R+120|0;I=R+104|0;B=c[g>>2]&3;J=c[((B|0)==3?g:g+48|0)+40>>2]|0;B=c[((B|0)==2?g:g+-48|0)+40>>2]|0;do if((HJ(J)|0)!=2?(HJ(B)|0)!=2:0){g=0;j=0;k=0;while(1){if((k|0)>=(f|0))break;A=c[(c[d+(k+e<<2)>>2]|0)+16>>2]|0;g=g+((c[A+96>>2]|0)!=0&1)|0;if(!((a[A+44>>0]|0)==0?(a[A+84>>0]|0)==0:0))j=1;k=k+1|0}if(!j)if(!g){Tg(J,B,d,e,f,i);break}else{Yg(J,B,d,e,f,i,g);break}y=uH(156)|0;z=Zg(b,y)|0;t=vA(z,85383,1)|0;Az(t,134401,280,1)|0;zx(t,87076,87090)|0;m=+h[(c[B+16>>2]|0)+16>>3];s=+h[(c[J+16>>2]|0)+16>>3];A=b+16|0;q=(c[(c[A>>2]|0)+116>>2]&1|0)==0;r=q?B:J;q=q?J:B;t=_g(t,q)|0;u=_g(z,r)|0;g=0;p=0;while(1){if((p|0)>=(f|0))break;j=d+(p+e<<2)|0;while(1){o=c[j>>2]|0;n=o+16|0;j=c[n>>2]|0;if(!(a[j+112>>0]|0))break;else j=j+116|0}if((c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)==(q|0))k=$g(z,t,u,o)|0;else k=$g(z,u,t,o)|0;j=c[n>>2]|0;c[j+120>>2]=k;if(!g)if((a[j+44>>0]|0)==0?(a[j+84>>0]|0)==0:0){c[(c[k+16>>2]|0)+120>>2]=o;g=k}else g=0;p=p+1|0}if(!g)x=Rx(z,t,u,0,1)|0;else x=g;rx(x,c[46404]|0,85387)|0;g=z+16|0;n=c[g>>2]|0;c[n+144>>2]=c[(c[A>>2]|0)+144>>2];c[n+188>>2]=z;$M(z,i);Qf(z);zj(z,0);Jh(z,0);Mi(z,0);q=q+16|0;i=c[q>>2]|0;n=c[r+16>>2]|0;r=t+16|0;o=c[r>>2]|0;p=o+16|0;v=+(~~m|0);w=+(~~((+h[(c[u+16>>2]|0)+16>>3]+ +h[p>>3])*.5)|0);m=+(~~s|0);s=+(~~((+h[i+16>>3]-+h[i+96>>3]+ +h[n+16>>3]+ +h[n+88>>3])*.5)|0);n=o+24|0;g=(c[g>>2]|0)+192|0;while(1){j=c[g>>2]|0;if(!j)break;do if((j|0)!=(t|0)){g=c[j+16>>2]|0;k=g+24|0;if((j|0)==(u|0)){h[k>>3]=m;h[g+16>>3]=w;break}else{h[k>>3]=s;break}}else{h[n>>3]=v;h[p>>3]=w;g=o}while(0);g=g+164|0}tk(z);lg(z,0);eJ(z);k=c[q>>2]|0;g=c[r>>2]|0;if(!(c[(c[A>>2]|0)+116>>2]&1)){j=g+16|0;m=+h[k+24>>3]-+h[g+24>>3]}else{j=g+24|0;m=+h[g+16>>3]+ +h[k+24>>3]}h[K>>3]=+h[k+16>>3]-+h[j>>3];h[K+8>>3]=m;i=N+16|0;t=N+32|0;u=N+48|0;r=0;while(1){if((r|0)>=(f|0))break;g=d+(r+e<<2)|0;while(1){j=c[g>>2]|0;q=j+16|0;g=c[q>>2]|0;if(!(a[g+112>>0]|0))break;else g=g+116|0}o=c[g+120>>2]|0;p=o+16|0;g=c[p>>2]|0;if(!((o|0)==(x|0)&(c[g+120>>2]|0)==0)){n=c[c[g+8>>2]>>2]|0;o=n+4|0;j=PK(j,c[o>>2]|0)|0;c[j+8>>2]=c[n+8>>2];g=j+16|0;k=n+16|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(L,C,D,S);c[g>>2]=c[L>>2];c[g+4>>2]=c[L+4>>2];c[g+8>>2]=c[L+8>>2];c[g+12>>2]=c[L+12>>2];c[j+12>>2]=c[n+12>>2];g=j+32|0;S=n+32|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(M,C,D,k);c[g>>2]=c[M>>2];c[g+4>>2]=c[M+4>>2];c[g+8>>2]=c[M+8>>2];c[g+12>>2]=c[M+12>>2];g=0;while(1){if((g|0)>=(c[o>>2]|0))break;k=(c[j>>2]|0)+(g<<4)|0;T=(c[n>>2]|0)+(g<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[T>>2];c[C+4>>2]=c[T+4>>2];c[C+8>>2]=c[T+8>>2];c[C+12>>2]=c[T+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(E,C,D,S);c[k>>2]=c[E>>2];c[k+4>>2]=c[E+4>>2];c[k+8>>2]=c[E+8>>2];c[k+12>>2]=c[E+12>>2];c[N>>2]=c[E>>2];c[N+4>>2]=c[E+4>>2];c[N+8>>2]=c[E+8>>2];c[N+12>>2]=c[E+12>>2];k=g+1|0;if((k|0)>=(c[o>>2]|0)){Q=48;break}S=(c[j>>2]|0)+(k<<4)|0;k=(c[n>>2]|0)+(k<<4)|0;T=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(F,C,D,T);c[S>>2]=c[F>>2];c[S+4>>2]=c[F+4>>2];c[S+8>>2]=c[F+8>>2];c[S+12>>2]=c[F+12>>2];c[i>>2]=c[F>>2];c[i+4>>2]=c[F+4>>2];c[i+8>>2]=c[F+8>>2];c[i+12>>2]=c[F+12>>2];S=g+2|0;T=(c[j>>2]|0)+(S<<4)|0;S=(c[n>>2]|0)+(S<<4)|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(G,C,D,k);c[T>>2]=c[G>>2];c[T+4>>2]=c[G+4>>2];c[T+8>>2]=c[G+8>>2];c[T+12>>2]=c[G+12>>2];c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];T=g+3|0;k=(c[n>>2]|0)+(T<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(H,C,D,S);c[u>>2]=c[H>>2];c[u+4>>2]=c[H+4>>2];c[u+8>>2]=c[H+8>>2];c[u+12>>2]=c[H+12>>2];YE((c[A>>2]|0)+16|0,N);g=T}if((Q|0)==48)Q=0;g=c[(c[q>>2]|0)+96>>2]|0;if(g|0){T=g+56|0;p=(c[(c[p>>2]|0)+96>>2]|0)+56|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[p>>2];c[C+4>>2]=c[p+4>>2];c[C+8>>2]=c[p+8>>2];c[C+12>>2]=c[p+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(I,C,D,S);c[T>>2]=c[I>>2];c[T+4>>2]=c[I+4>>2];c[T+8>>2]=c[I+8>>2];c[T+12>>2]=c[I+12>>2];T=c[(c[q>>2]|0)+96>>2]|0;a[T+81>>0]=1;kM(b,T)}}r=r+1|0}bh(z,y)}else Q=3;while(0);if((Q|0)==3?(c[45968]|0)==0:0){c[45968]=1;Pw(0,85260,O)|0;Q=ry(J)|0;S=(ey(b)|0)!=0;T=ry(B)|0;c[P>>2]=Q;c[P+4>>2]=S?134656:138665;c[P+8>>2]=T;Pw(3,85366,P)|0}l=R;return}function Sg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;z=l;l=l+1600|0;u=z+1552|0;n=z+1536|0;t=z+840|0;v=z+144|0;w=z+1584|0;j=z+32|0;s=z+16|0;o=z;q=c[f>>2]&3;p=c[((q|0)==3?f:f+48|0)+40>>2]|0;x=f+-48|0;q=c[((q|0)==2?f:x)+40>>2]|0;r=f+16|0;k=c[r>>2]|0;i=c[k+172>>2]|0;while(1){m=c[(c[i+16>>2]|0)+172>>2]|0;if(!m)break;else i=m}k=(c[k+96>>2]|0)+56|0;i=(c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)+16|0;m=(c[i>>2]|0)+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[r>>2]|0;a[(c[k+96>>2]|0)+81>>0]=1;if((g|0)!=2){k=c[i>>2]|0;C=+h[k+16>>3];E=C-+h[k+88>>3];C=+h[k+96>>3]+C;B=+h[k+24>>3];D=+h[k+80>>3]*.5+B;k=c[(c[b+16>>2]|0)+196>>2]|0;m=c[p+16>>2]|0;j=c[m+232>>2]|0;B=+(~~(+(~~(B-+h[k+(j<<6)+16>>3]-+h[m+24>>3]+ +h[k+(j<<6)+24>>3])|0)*.16666666666666666)|0);B=D-(B<5.0?5.0:B);Vg(b,d,e,p,f,t,1);Vg(b,d,e,q,f,v,0);j=t+52|0;k=c[j>>2]|0;m=k+-1|0;A=+h[t+56+(m<<5)>>3];h[18830]=A;h[18831]=+h[t+56+(m<<5)+24>>3];h[18832]=E;h[18833]=B;h[18834]=A;h[18835]=B;m=v+52|0;i=(c[m>>2]|0)+-1|0;A=+h[v+56+(i<<5)+16>>3];h[18836]=A;h[18837]=D;h[18838]=C;h[18841]=B;h[18839]=+h[v+56+(i<<5)+24>>3];h[18840]=A;i=0;while(1){if((i|0)>=(k|0)){i=0;break}k=t+56+(i<<5)|0;c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];c[u+16>>2]=c[k+16>>2];c[u+20>>2]=c[k+20>>2];c[u+24>>2]=c[k+24>>2];c[u+28>>2]=c[k+28>>2];SK(e,u);i=i+1|0;k=c[j>>2]|0}while(1){if((i|0)==3)break;t=150640+(i<<5)|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];SK(e,u);i=i+1|0}j=c[m>>2]|0;while(1){i=j+-1|0;if((j|0)<=0)break;j=v+56+(i<<5)|0;c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];c[u+16>>2]=c[j+16>>2];c[u+20>>2]=c[j+20>>2];c[u+24>>2]=c[j+24>>2];c[u+28>>2]=c[j+28>>2];SK(e,u);j=i}if((g|0)==10)j=sJ(e,w)|0;else j=yJ(e,w)|0;i=c[w>>2]|0;if(i|0)y=17}else{i=(c[p+16>>2]|0)+16|0;v=k+16|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];Pg(s,n,u);v=(c[q+16>>2]|0)+16|0;i=(c[r>>2]|0)+56|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];c[u>>2]=c[i>>2];c[u+4>>2]=c[i+4>>2];c[u+8>>2]=c[i+8>>2];c[u+12>>2]=c[i+12>>2];Pg(o,n,u);i=c[(c[r>>2]|0)+96>>2]|0;D=+h[i+56>>3];E=+h[i+64>>3]-+h[i+32>>3]*.5;i=j+16|0;c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[j+12>>2]=c[s+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];i=j+32|0;v=j+48|0;y=j+64|0;h[j+64>>3]=D;h[j+72>>3]=E;c[v>>2]=c[y>>2];c[v+4>>2]=c[y+4>>2];c[v+8>>2]=c[y+8>>2];c[v+12>>2]=c[y+12>>2];c[i>>2]=c[y>>2];c[i+4>>2]=c[y+4>>2];c[i+8>>2]=c[y+8>>2];c[i+12>>2]=c[y+12>>2];i=j+80|0;y=j+96|0;c[y>>2]=c[o>>2];c[y+4>>2]=c[o+4>>2];c[y+8>>2]=c[o+8>>2];c[y+12>>2]=c[o+12>>2];c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[w>>2]=7;i=7;y=17}if((y|0)==17)QK(f,c[((c[f>>2]&3|0)==2?f:x)+40>>2]|0,j,i,17296);l=z;return}function Tg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=l;l=l+352|0;x=N+336|0;w=N+320|0;L=N+128|0;u=N+304|0;y=N+288|0;M=N+112|0;E=N+96|0;F=N+80|0;G=N+64|0;H=N+48|0;I=N+32|0;J=N+16|0;K=N;a=a+16|0;q=(c[a>>2]|0)+16|0;v=(c[d+(e<<2)>>2]|0)+16|0;s=(c[v>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[x>>2]=c[s>>2];c[x+4>>2]=c[s+4>>2];c[x+8>>2]=c[s+8>>2];c[x+12>>2]=c[s+12>>2];Pg(u,w,x);C=+h[u>>3];D=+h[u+8>>3];u=(c[b+16>>2]|0)+16|0;v=(c[v>>2]|0)+56|0;c[w>>2]=c[u>>2];c[w+4>>2]=c[u+4>>2];c[w+8>>2]=c[u+8>>2];c[w+12>>2]=c[u+12>>2];c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];Pg(y,w,x);A=+h[y>>3];B=+h[y+8>>3];if((f|0)>1){z=+h[(c[a>>2]|0)+80>>3];i=z*.5;z=z/+(f+-1|0)}else{i=0.0;z=0.0}p=(g|8|0)==10;m=L+8|0;q=L+16|0;r=(A+C*2.0)*.3333333333333333;s=L+32|0;t=(A*2.0+C)*.3333333333333333;n=L+24|0;u=L+48|0;v=L+64|0;w=L+80|0;x=L+96|0;y=L+112|0;k=L+128|0;o=L+136|0;i=D-i;b=0;while(1){if((b|0)>=(f|0))break;j=c[d+(b+e<<2)>>2]|0;h[L>>3]=C;h[m>>3]=D;if(p){Xg(M,r,i);c[q>>2]=c[M>>2];c[q+4>>2]=c[M+4>>2];c[q+8>>2]=c[M+8>>2];c[q+12>>2]=c[M+12>>2];Xg(E,t,i);c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];a=4;g=3}else{h[q>>3]=C;h[n>>3]=D;Xg(F,r,i);c[s>>2]=c[F>>2];c[s+4>>2]=c[F+4>>2];c[s+8>>2]=c[F+8>>2];c[s+12>>2]=c[F+12>>2];Xg(G,r,i);c[u>>2]=c[G>>2];c[u+4>>2]=c[G+4>>2];c[u+8>>2]=c[G+8>>2];c[u+12>>2]=c[G+12>>2];Xg(H,r,i);c[v>>2]=c[H>>2];c[v+4>>2]=c[H+4>>2];c[v+8>>2]=c[H+8>>2];c[v+12>>2]=c[H+12>>2];Xg(I,t,i);c[w>>2]=c[I>>2];c[w+4>>2]=c[I+4>>2];c[w+8>>2]=c[I+8>>2];c[w+12>>2]=c[I+12>>2];Xg(J,t,i);c[x>>2]=c[J>>2];c[x+4>>2]=c[J+4>>2];c[x+8>>2]=c[J+8>>2];c[x+12>>2]=c[J+12>>2];Xg(K,t,i);c[y>>2]=c[K>>2];c[y+4>>2]=c[K+4>>2];c[y+8>>2]=c[K+8>>2];c[y+12>>2]=c[K+12>>2];h[k>>3]=A;h[o>>3]=B;a=10;g=9}h[L+(g<<4)>>3]=A;h[L+(g<<4)+8>>3]=B;QK(j,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0,L,a,17296);i=i+z;b=b+1|0}l=N;return}function Ug(a,d,e,f,g,i,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;x=l;l=l+1440|0;t=x+1392|0;v=x+1424|0;w=x+696|0;u=x;r=c[j>>2]&3;q=c[((r|0)==3?j:j+48|0)+40>>2]|0;r=c[((r|0)==2?j:j+-48|0)+40>>2]|0;m=c[q+16>>2]|0;o=c[m+232>>2]|0;p=c[a+16>>2]|0;if((o|0)<(b[p+238>>1]|0)){y=c[p+196>>2]|0;p=o+1|0;n=+h[m+24>>3]-+h[y+(o<<6)+32>>3]-+h[(c[(c[c[y+(p<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[y+(p<<6)+40>>3]}else n=+(c[p+252>>2]|0);z=+(i+1|0);s=+(c[d+12>>2]|0)/z;n=n/z;Wg(a,d,e,q,j,w,1);Wg(a,d,e,r,j,u,0);r=w+52|0;j=u+52|0;a=(k|0)==0;d=e+80|0;m=0;while(1){if((m|0)>=(i|0))break;q=c[f+(m+g<<2)>>2]|0;p=c[r>>2]|0;o=p+-1|0;D=+h[w+56+(o<<5)>>3];B=+h[w+56+(o<<5)+8>>3];C=+h[w+56+(o<<5)+16>>3];h[18830]=D;h[18833]=B;m=m+1|0;z=+(m|0);A=s*z;h[18832]=C+A;z=B-n*z;h[18831]=z;h[18834]=D;h[18837]=z;o=(c[j>>2]|0)+-1|0;D=+h[u+56+(o<<5)+16>>3];h[18836]=D;h[18835]=z-n;B=+h[u+56+(o<<5)>>3];C=+h[u+56+(o<<5)+8>>3];h[18840]=D;h[18841]=C;h[18838]=B-A;h[18839]=z;o=0;while(1){if((o|0)>=(p|0)){o=0;break}p=w+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];SK(e,t);o=o+1|0;p=c[r>>2]|0}while(1){if((o|0)==3)break;y=150640+(o<<5)|0;c[t>>2]=c[y>>2];c[t+4>>2]=c[y+4>>2];c[t+8>>2]=c[y+8>>2];c[t+12>>2]=c[y+12>>2];c[t+16>>2]=c[y+16>>2];c[t+20>>2]=c[y+20>>2];c[t+24>>2]=c[y+24>>2];c[t+28>>2]=c[y+28>>2];SK(e,t);o=o+1|0}p=c[j>>2]|0;while(1){o=p+-1|0;if((p|0)<=0)break;p=u+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];SK(e,t);p=o}if(a)o=yJ(e,v)|0;else o=sJ(e,v)|0;p=c[v>>2]|0;if(!p)break;QK(q,c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0,o,p,17296);c[d>>2]=0}l=x;return}function Vg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;yg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=4;if(!(i<<24>>24))WK(d,f,2,g,0);else TK(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3]+ +h[e+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];Ag(m,j,4,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Wg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;yg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=1;if(!(i<<24>>24))WK(d,f,2,g,0);else TK(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[e+24>>3]-+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];Ag(m,j,1,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Xg(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Yg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0;Y=l;l=l+288|0;R=Y+256|0;Q=Y+240|0;P=Y+224|0;V=Y+280|0;W=Y+272|0;X=Y+32|0;S=Y+16|0;T=Y;m=Y+208|0;n=Y+192|0;o=c[e+(f<<2)>>2]|0;U=uH(g<<2)|0;k=0;while(1){if((k|0)>=(g|0))break;c[U+(k<<2)>>2]=c[e+(k+f<<2)>>2];k=k+1|0}_0(U,g,4,59);e=b+16|0;f=(c[e>>2]|0)+16|0;o=o+16|0;C=(c[o>>2]|0)+16|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[C>>2];c[R+4>>2]=c[C+4>>2];c[R+8>>2]=c[C+8>>2];c[R+12>>2]=c[C+12>>2];Pg(m,Q,R);c[S>>2]=c[m>>2];c[S+4>>2]=c[m+4>>2];c[S+8>>2]=c[m+8>>2];c[S+12>>2]=c[m+12>>2];C=d+16|0;f=(c[C>>2]|0)+16|0;o=(c[o>>2]|0)+56|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[o>>2];c[R+4>>2]=c[o+4>>2];c[R+8>>2]=c[o+8>>2];c[R+12>>2]=c[o+12>>2];Pg(n,Q,R);c[T>>2]=c[n>>2];c[T+4>>2]=c[n+4>>2];c[T+8>>2]=c[n+8>>2];c[T+12>>2]=c[n+12>>2];w=+h[(c[e>>2]|0)+96>>3]+ +h[S>>3];x=+h[T>>3]-+h[(c[C>>2]|0)+88>>3];u=x+w;v=u*.5;C=c[U>>2]|0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];o=X+16|0;c[o>>2]=c[S>>2];c[o+4>>2]=c[S+4>>2];c[o+8>>2]=c[S+8>>2];c[o+12>>2]=c[S+12>>2];e=X+32|0;c[e>>2]=c[T>>2];c[e+4>>2]=c[T+4>>2];c[e+8>>2]=c[T+8>>2];c[e+12>>2]=c[T+12>>2];f=X+48|0;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];QK(C,c[((c[C>>2]&3|0)==2?C:C+-48|0)+40>>2]|0,X,4,17296);C=c[(c[C+16>>2]|0)+96>>2]|0;h[C+56>>3]=v;z=S+8|0;r=+h[z>>3];s=+h[C+32>>3];h[C+64>>3]=(s+6.0)*.5+r;a[C+81>>0]=1;r=r+3.0;B=+h[C+24>>3];A=(u-B)*.5;B=(B+u)*.5;C=X+24|0;D=X+40|0;E=X+56|0;F=X+64|0;G=T+8|0;H=X+72|0;I=X+80|0;J=X+88|0;K=X+96|0;L=X+104|0;M=X+112|0;N=X+120|0;O=V+4|0;n=(i|0)==6&1;q=0.0;p=0.0;s=s+r;m=1;while(1){if((m|0)>=(j|0)){y=6;break}d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];h[N>>3]=Z;s=+h[(c[(c[d+16>>2]|0)+96>>2]|0)+32>>3];t=Z+s*.5;s=Z+s}else{k=d+16|0;b=c[(c[k>>2]|0)+96>>2]|0;if((m|0)==1){p=+h[b+24>>3];q=(p+u)*.5;p=(u-p)*.5}r=r+-6.0-+h[b+32>>3];c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];t=r+-6.0;h[C>>3]=t;h[e>>3]=+h[T>>3];h[D>>3]=t;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=r;h[K>>3]=p;h[L>>3]=r;h[M>>3]=p;h[N>>3]=+h[z>>3];t=+h[(c[(c[k>>2]|0)+96>>2]|0)+32>>3]*.5+r}c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=oJ(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break;i=c[(c[d+16>>2]|0)+96>>2]|0;h[i+56>>3]=v;h[i+64>>3]=t;a[i+81>>0]=1;QK(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17296);m=m+1|0}a:do if((y|0)==6){v=(x+w*2.0)*.3333333333333333;u=(x*2.0+w)*.3333333333333333;while(1){if((m|0)>=(g|0))break;d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];s=Z;t=p;p=Z}else{y=(m|0)==1;t=y?v:p;q=y?u:q;p=r+-6.0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];r=r+-12.0;h[C>>3]=r;h[e>>3]=+h[T>>3];h[D>>3]=r;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=p;h[K>>3]=t;h[L>>3]=p;h[M>>3]=t;r=p;p=+h[z>>3]}h[N>>3]=p;c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=oJ(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break a;QK(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17296);m=m+1|0;p=t}D_(U)}while(0);l=Y;return}function Zg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0;g=l;l=l+16|0;f=g;j=(ey(b)|0)==0;j=j?18488:18480;a[f>>0]=a[j>>0]|0;a[f+1>>0]=a[j+1>>0]|0;a[f+2>>0]=a[j+2>>0]|0;a[f+3>>0]=a[j+3>>0]|0;f=Xx(85398,f,0)|0;Az(f,134401,280,1)|0;nx(f,0,87076,191979)|0;j=uH(96)|0;e=c[f+16>>2]|0;c[e+8>>2]=j;i=c[b+16>>2]|0;k=c[i+8>>2]|0;h[j>>3]=+h[k>>3];h[j+24>>3]=+h[k+24>>3];a[e+115>>0]=a[i+115>>0]|0;c[e+116>>2]=c[i+116>>2]&1^1;c[e+248>>2]=c[i+248>>2];c[e+252>>2]=c[i+252>>2];e=sx(fz(b)|0,1,0)|0;while(1){if(!e)break;nx(f,1,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=sx(fz(b)|0,1,e)|0}e=sx(fz(b)|0,2,0)|0;while(1){if(!e)break;nx(f,2,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=sx(fz(b)|0,2,e)|0}if(!(nx(f,2,108382,0)|0))nx(f,2,108382,191979)|0;if(!(nx(f,2,108373,0)|0))nx(f,2,108373,191979)|0;ch(f,d);l=g;return f|0}function _g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;a=az(a,ry(b)|0,1)|0;Az(a,134365,304,1)|0;Bx(b,a)|0;if((HJ(b)|0)==2){f=b+16|0;b=vH((W_(c[c[(c[f>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;c[d>>2]=c[c[(c[f>>2]|0)+104>>2]>>2];Y0(b,85393,d)|0;zx(a,105198,b)|0}l=e;return a|0}function $g(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=Rx(a,b,c,0,1)|0;Az(c,134378,176,1)|0;Bx(d,c)|0;return c|0}function ah(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i+16|0;f=i;if(e|0){j=+h[b>>3];e=b+8|0;h[b>>3]=+h[e>>3];h[e>>3]=-j};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];Pg(a,f,g);l=i;return}function bh(a,b){a=a|0;b=b|0;c[46419]=c[b>>2];c[46423]=c[b+4>>2];c[46424]=c[b+8>>2];c[46404]=c[b+12>>2];c[46405]=c[b+16>>2];c[46411]=c[b+20>>2];c[46410]=c[b+24>>2];c[46409]=c[b+28>>2];c[46435]=c[b+32>>2];c[46427]=c[b+36>>2];c[46412]=c[b+40>>2];c[46422]=c[b+44>>2];c[46431]=c[b+48>>2];c[46430]=c[b+52>>2];c[46429]=c[b+56>>2];c[46434]=c[b+60>>2];c[46428]=c[b+64>>2];c[46413]=c[b+68>>2];c[46375]=c[b+72>>2];c[46376]=c[b+76>>2];c[46377]=c[b+80>>2];c[46387]=c[b+84>>2];c[46380]=c[b+88>>2];c[46381]=c[b+92>>2];c[46382]=c[b+96>>2];c[46384]=c[b+100>>2];c[46385]=c[b+104>>2];c[46388]=c[b+108>>2];c[46391]=c[b+112>>2];c[46389]=c[b+116>>2];c[46390]=c[b+120>>2];c[46393]=c[b+124>>2];c[46392]=c[b+128>>2];c[46394]=c[b+132>>2];c[46395]=c[b+136>>2];c[46386]=c[b+140>>2];c[46398]=c[b+144>>2];c[46370]=c[b+148>>2];c[46367]=c[b+152>>2];D_(b);Tf(a);$x(a)|0;return}function ch(a,b){a=a|0;b=b|0;c[b>>2]=c[46419];c[b+4>>2]=c[46423];c[b+8>>2]=c[46424];c[b+12>>2]=c[46404];c[b+16>>2]=c[46405];c[b+20>>2]=c[46411];c[b+24>>2]=c[46410];c[b+28>>2]=c[46409];c[b+32>>2]=c[46435];c[b+36>>2]=c[46427];c[b+40>>2]=c[46412];c[b+44>>2]=c[46422];c[b+48>>2]=c[46431];c[b+52>>2]=c[46430];c[b+56>>2]=c[46429];c[b+60>>2]=c[46434];c[b+64>>2]=c[46428];c[b+68>>2]=c[46413];c[b+72>>2]=c[46375];c[b+76>>2]=c[46376];c[b+80>>2]=c[46377];c[b+84>>2]=c[46387];c[b+88>>2]=c[46380];c[b+92>>2]=c[46381];c[b+96>>2]=c[46382];c[b+100>>2]=c[46384];c[b+104>>2]=c[46385];c[b+108>>2]=c[46388];c[b+112>>2]=c[46391];c[b+116>>2]=c[46389];c[b+120>>2]=c[46390];c[b+124>>2]=c[46393];c[b+128>>2]=c[46392];c[b+132>>2]=c[46394];c[b+136>>2]=c[46395];c[b+140>>2]=c[46386];c[b+144>>2]=c[46398];c[b+152>>2]=c[46367];c[b+148>>2]=c[46370];c[46419]=0;c[46423]=nx(a,2,87317,0)|0;c[46424]=nx(a,2,87326,0)|0;b=nx(a,2,98515,0)|0;c[46404]=b;if(!b)c[46404]=nx(a,2,98515,191979)|0;c[46405]=0;c[46411]=0;c[46410]=nx(a,2,98411,0)|0;c[46409]=nx(a,2,98402,0)|0;c[46435]=nx(a,2,98691,0)|0;c[46427]=0;c[46412]=nx(a,2,105198,0)|0;c[46422]=nx(a,2,85403,0)|0;c[46431]=0;c[46430]=nx(a,2,98591,0)|0;c[46429]=nx(a,2,98577,0)|0;c[46434]=nx(a,2,98682,0)|0;c[46428]=0;c[46413]=0;c[46375]=nx(a,1,137966,0)|0;c[46376]=nx(a,1,138034,0)|0;c[46377]=nx(a,1,105204,0)|0;c[46387]=0;c[46380]=nx(a,1,98402,0)|0;c[46381]=nx(a,1,98411,0)|0;c[46382]=0;c[46384]=nx(a,1,105198,0)|0;c[46385]=0;c[46388]=0;c[46391]=nx(a,1,98383,0)|0;c[46389]=nx(a,1,137994,0)|0;c[46390]=nx(a,1,98446,0)|0;c[46393]=nx(a,1,98458,0)|0;c[46392]=nx(a,1,98322,0)|0;c[46394]=nx(a,1,98463,0)|0;c[46395]=nx(a,1,85415,0)|0;c[46386]=0;c[46398]=0;c[46370]=nx(a,0,98383,0)|0;return}function dh(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0;d=c[(c[(c[a>>2]|0)+16>>2]|0)+96>>2]|0;a=c[(c[(c[b>>2]|0)+16>>2]|0)+96>>2]|0;b=(a|0)!=0;if(d)if(b?(f=+h[d+24>>3],i=+h[d+32>>3],e=+h[a+24>>3],g=+h[a+32>>3],!(f>e)):0)if(!(fg)a=-1;else a=i>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;d=c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;e=c[d+232>>2]|0;a=c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;b=c[a+232>>2]|0;if((e|0)<=(b|0))if((e|0)<(b|0))a=1;else a=(c[d+236>>2]|0)<(c[a+236>>2]|0)&1;else a=0;return a|0}function fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+180|0;g=(c[b+16>>2]|0)+172|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=gh(a,f,b,e)|0;l=d;return b|0}function gh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+4>>2]|0;a:do if((f|0)>0?(g=c[e+4>>2]|0,(g|0)>0):0)if((f|0)<(g|0)){f=c[b>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)==(d|0))break;else e=e+1|0}}else{f=c[e>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)==(a|0))break;else e=e+1|0}}else b=0;while(0);return b|0}function hh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+188|0;g=(c[b+16>>2]|0)+196|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=gh(a,f,b,e)|0;l=d;return b|0}function ih(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+180>>2]|0;if(!b)b=vH((c[d+184>>2]<<2)+8|0)|0;else b=xH(b,(c[d+184>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+180>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;d=c[f+180>>2]|0;f=f+184|0;b=c[f>>2]|0;c[f>>2]=b+1;c[d+(b<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=a+-48|0;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=vH((c[b+176>>2]<<2)+8|0)|0;else b=xH(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;b=b+176|0;f=c[b>>2]|0;c[b>>2]=f+1;c[d+(f<<2)>>2]=a;f=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;return a|0}function jh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=a+4|0;f=c[e>>2]|0;d=0;while(1){if((d|0)>=(f|0))break;g=c[a>>2]|0;h=g+(d<<2)|0;if((c[h>>2]|0)==(b|0)){i=4;break}else d=d+1|0}if((i|0)==4){i=f+-1|0;c[e>>2]=i;c[h>>2]=c[g+(i<<2)>>2];c[(c[a>>2]|0)+(i<<2)>>2]=0}return}function kh(a){a=a|0;if(!a)qa(85456,85466,117,85475);else{jh((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180|0,a);jh((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172|0,a);return}}function lh(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+204>>2]|0;if(!b)b=vH((c[d+208>>2]<<2)+8|0)|0;else b=xH(b,(c[d+208>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+204>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[f+204>>2]|0;f=f+208|0;d=c[f>>2]|0;c[f>>2]=d+1;c[b+(d<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+204>>2]|0)+(c[e+208>>2]<<2)>>2]=0;return}function mh(a){a=a|0;nh(a,(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+204|0);return}function nh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+4|0;e=c[h>>2]|0;f=c[b>>2]|0;d=0;while(1){if((d|0)>=(e|0)){g=4;break}if((c[f+(d<<2)>>2]|0)==(a|0))break;else d=d+1|0}if((g|0)==4){if(!f)d=vH((e<<2)+8|0)|0;else d=xH(f,(e<<2)+8|0)|0;c[b>>2]=d;f=c[h>>2]|0;g=f+1|0;c[h>>2]=g;c[d+(f<<2)>>2]=a;c[(c[b>>2]|0)+(g<<2)>>2]=0}return}function oh(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=uH(96)|0;g=n+48|0;c[g>>2]=c[g>>2]|3;c[n>>2]=c[n>>2]&-4|2;h=uH(176)|0;m=n+16|0;c[m>>2]=h;c[((c[n>>2]&3|0)==3?n:g)+40>>2]=d;j=n+-48|0;c[((c[n>>2]&3|0)==2?n:j)+40>>2]=e;a[h+112>>0]=1;if(!f){c[h+156>>2]=1;b[h+154>>1]=1;b[h+168>>1]=1;b[h+170>>1]=1}else{c[n>>2]=c[n>>2]&15|c[f>>2]&-16;c[g>>2]=c[g>>2]&15|c[f>>2]&-16;l=f+16|0;i=c[l>>2]|0;b[h+168>>1]=b[i+168>>1]|0;b[h+154>>1]=b[i+154>>1]|0;c[h+156>>2]=c[i+156>>2];b[h+170>>1]=b[i+170>>1]|0;d=c[((c[n>>2]&3|0)==3?n:g)+40>>2]|0;e=c[f>>2]&3;k=f+48|0;if((d|0)!=(c[((e|0)==3?f:k)+40>>2]|0)){g=f+-48|0;if((d|0)==(c[((e|0)==2?f:g)+40>>2]|0)){h=h+16|0;d=i+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=h+16|0;d=i+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0));g=f+-48|0}d=c[((c[n>>2]&3|0)==2?n:j)+40>>2]|0;e=c[f>>2]&3;if((d|0)!=(c[((e|0)==2?f:g)+40>>2]|0)){if((d|0)==(c[((e|0)==3?f:k)+40>>2]|0)){h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}d=(c[l>>2]|0)+172|0;if(!(c[d>>2]|0))c[d>>2]=n;c[(c[m>>2]|0)+116>>2]=f}return n|0}function ph(a,b,c){a=a|0;b=b|0;c=c|0;return ih(oh(a,b,c)|0)|0}function qh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;f=c[a>>2]|0;d=c[b+16>>2]|0;c[d+164>>2]=f;e=f;if(f|0)c[(c[e+16>>2]|0)+168>>2]=b;c[a>>2]=b;c[d+168>>2]=0;if((e|0)==(b|0))qa(85492,85466,215,85508);else return}function rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0))qa(85518,85466,220,85525);f=c[b+16>>2]|0;d=f+164|0;if(c[d>>2]|0)qa(85538,85466,221,85525);e=(c[a+16>>2]|0)+164|0;c[d>>2]=c[e>>2];d=c[e>>2]|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=b;c[f+168>>2]=a;c[e>>2]=b;return}function sh(a,b){a=a|0;b=b|0;var d=0,e=0;if(!(th(a,b)|0))qa(85557,85466,231,85578);b=c[b+16>>2]|0;d=c[b+164>>2]|0;e=d;b=b+168|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=c[b>>2];b=c[b>>2]|0;if(!b)c[(c[a+16>>2]|0)+192>>2]=e;else c[(c[b+16>>2]|0)+164>>2]=e;return}function th(a,b){a=a|0;b=b|0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if((a|0)==0|(a|0)==(b|0))break;a=(c[a+16>>2]|0)+164|0}return a|0}function uh(b){b=b|0;var d=0,e=0,f=0,g=0;d=uH(64)|0;c[d>>2]=c[d>>2]&-4|1;e=d+16|0;c[e>>2]=uH(304)|0;c[d+24>>2]=fz(b)|0;g=c[e>>2]|0;a[g+156>>0]=1;h[g+96>>3]=1.0;h[g+88>>3]=1.0;h[g+80>>3]=1.0;c[g+216>>2]=1;c[g+176>>2]=0;g=uH(20)|0;f=c[e>>2]|0;c[f+172>>2]=g;c[f+184>>2]=0;f=uH(20)|0;c[(c[e>>2]|0)+180>>2]=f;qh(b,d);b=(c[b+16>>2]|0)+232|0;c[b>>2]=(c[b>>2]|0)+1;return d|0}function vh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+48|0;e=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[e+188>>2]|0;if(!f)e=vH((c[e+192>>2]<<2)+8|0)|0;else e=xH(f,(c[e+192>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0)+188>>2]=e;h=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[h+188>>2]|0;h=h+192|0;e=c[h>>2]|0;c[h>>2]=e+1;c[f+(e<<2)>>2]=d;g=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;c[(c[g+188>>2]|0)+(c[g+192>>2]<<2)>>2]=0;g=d+-48|0;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;if(!f)e=vH((c[e+200>>2]<<2)+8|0)|0;else e=xH(f,(c[e+200>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+196>>2]=e;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;e=e+200|0;h=c[e>>2]|0;c[e>>2]=h+1;c[f+(h<<2)>>2]=d;h=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;c[(c[h+196>>2]|0)+(c[h+200>>2]<<2)>>2]=0;a[(c[b+16>>2]|0)+240>>0]=1;a[(c[(ig(b)|0)+16>>2]|0)+240>>0]=1;return}function wh(a){a=a|0;var b=0,d=0;if(!a)qa(85456,85466,269,85595);b=c[(c[a+16>>2]|0)+116>>2]|0;if(b|0?(d=(c[b+16>>2]|0)+172|0,(c[d>>2]|0)==(a|0)):0)c[d>>2]=0;jh((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+188|0,a);jh((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+196|0,a);return}function xh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;d=(c[a+16>>2]|0)+172|0;e=c[d>>2]|0;do if((e|0)!=(b|0))if(!e){c[d>>2]=b;yh(a,b);break}else qa(87498,85466,340,85633);else Pw(0,85612,f)|0;while(0);l=f;return}function yh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=(c[d+16>>2]|0)+170|0;i=c[a+16>>2]|0;a=b[i+170>>1]|0;if((e[f>>1]|0)<(a&65535))b[f>>1]=a;g=i+168|0;h=i+154|0;f=i+156|0;a=d;while(1){if(!a)break;d=c[a+16>>2]|0;i=d+168|0;b[i>>1]=(e[i>>1]|0)+(e[g>>1]|0);i=d+154|0;b[i>>1]=(e[i>>1]|0)+(e[h>>1]|0);i=d+156|0;c[i>>2]=(c[i>>2]|0)+(c[f>>2]|0);a=c[d+172>>2]|0}return}function zh(d){d=d|0;var e=0,f=0,g=0,h=0;f=d+16|0;e=c[(c[f>>2]|0)+172>>2]|0;a:while(1){if(!e)break;Ah(e,d);h=c[e+16>>2]|0;g=c[h+172>>2]|0;if(!(b[h+168>>1]|0))Bh(e);while(1){if((a[(c[e+16>>2]|0)+112>>0]|0)!=1){e=g;continue a}e=c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){e=g;continue a}if((c[e+184>>2]|0)!=1){e=g;continue a}e=c[c[e+180>>2]>>2]|0;Ah(e,d)}}c[(c[f>>2]|0)+172>>2]=0;return}function Ah(a,d){a=a|0;d=d|0;var f=0;f=c[d+16>>2]|0;d=c[a+16>>2]|0;a=d+168|0;b[a>>1]=(e[a>>1]|0)-(e[f+168>>1]|0);a=d+154|0;b[a>>1]=(e[a>>1]|0)-(e[f+154>>1]|0);d=d+156|0;c[d>>2]=(c[d>>2]|0)-(c[f+156>>2]|0);return}function Bh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)qa(85456,85466,128,85646);g=a+48|0;d=0;while(1){b=c[a>>2]|0;e=(c[(c[((b&3|0)==3?a:g)+40>>2]|0)+16>>2]|0)+180|0;f=c[(c[e>>2]|0)+(d<<2)>>2]|0;if(!f)break;if((f|0)==(a|0))jh(e,a);d=d+1|0}g=a+-48|0;f=0;while(1){d=(c[(c[((b&3|0)==2?a:g)+40>>2]|0)+16>>2]|0)+172|0;e=c[(c[d>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)==(a|0)){jh(d,a);b=c[a>>2]|0}f=f+1|0}return}function Ch(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+1040|0;n=p+1032|0;o=p;m=p+8|0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;i=c[d+196>>2]|0;h=i+(j<<6)|0;i=i+(j<<6)+4|0;g=0;d=0;while(1){if((g|0)>=(c[h>>2]|0))break;e=c[(c[i>>2]|0)+(g<<2)>>2]|0;f=e+16|0;if(c[(c[f>>2]|0)+112>>2]|0){if(!d){a[n>>0]=a[18484]|0;a[n+1>>0]=a[18485]|0;a[n+2>>0]=a[18486]|0;a[n+3>>0]=a[18487]|0;d=Xx(85668,n,0)|0}c[o>>2]=g;Y0(m,134313,o)|0;t=az(d,m,1)|0;Az(t,91080,24,1)|0;q=c[(c[f>>2]|0)+180>>2]|0;r=c[q>>2]|0;r=c[(c[(c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;q=c[q+4>>2]|0;q=c[(c[(c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=(r|0)>(q|0);f=c[t+16>>2]|0;c[f+12>>2]=s?q:r;c[f+16>>2]=s?r:q;c[f+20>>2]=e}g=g+1|0}if(d|0){if((ay(d)|0)>1)Dh(d,h);$x(d)|0}j=j+1|0;d=c[k>>2]|0}l=p;return}function Dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=0;h=Sy(a)|0;a:while(1){if(!h)break;i=Ty(a,h)|0;j=h+16|0;g=i;while(1){if(!g){h=i;continue a}f=c[g+16>>2]|0;e=c[j>>2]|0;if((c[f+16>>2]|0)>(c[e+12>>2]|0)){if((c[e+16>>2]|0)<=(c[f+12>>2]|0))Rx(a,h,g,0,1)|0}else{Rx(a,g,h,0,1)|0;d=1}g=Ty(a,g)|0}}do if(d|0){h=vA(a,85671,1)|0;j=uH((ay(a)|0)<<2)|0;i=uH((ay(a)|0)<<2)|0;f=b+4|0;e=Sy(a)|0;b:while(1){if(!e){d=23;break}if((c[(c[e+16>>2]|0)+8>>2]|0)==0?cy(a,e,1,1)|0:0){c:do if(Eh(a,e,h,i)|0){g=ay(h)|0;if((Fh(a,h,j)|0)!=(g|0)){d=17;break b}_0(i,g,4,60);d=0;while(1){if((d|0)>=(g|0))break c;b=i+(d<<2)|0;k=c[j+(d<<2)>>2]|0;c[(c[k+16>>2]|0)+236>>2]=c[b>>2];c[(c[f>>2]|0)+(c[b>>2]<<2)>>2]=k;d=d+1|0}}while(0);Hh(h)}e=Ty(a,e)|0}if((d|0)==17)qa(85676,85686,265,85697);else if((d|0)==23){D_(j);break}}while(0);return}function Eh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=c[b+16>>2]|0;c[h+8>>2]=1;h=c[(c[(c[h+20>>2]|0)+16>>2]|0)+236>>2]|0;c[e+((ay(d)|0)<<2)>>2]=h;Xy(d,b,1)|0;h=Ex(a,b)|0;f=0;while(1){if(!h)break;j=c[h>>2]&3;g=c[((j|0)==2?h:h+-48|0)+40>>2]|0;i=c[g+16>>2]|0;f=f+((c[(c[(c[i+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[(c[(c[((j|0)==3?h:h+48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[i+8>>2]|0))f=(Eh(a,g,d,e)|0)+f|0;h=Gx(a,h)|0}h=Hx(a,b)|0;while(1){if(!h)break;i=c[h>>2]&3;g=c[((i|0)==3?h:h+48|0)+40>>2]|0;j=c[g+16>>2]|0;f=f+((c[(c[(c[(c[(c[((i|0)==2?h:h+-48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[j+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[j+8>>2]|0))f=(Eh(a,g,d,e)|0)+f|0;h=Ix(a,h)|0}return f|0}function Fh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=0;while(1){e=Ih(a,b)|0;if(!e)break;c[d+(f<<2)>>2]=c[(c[e+16>>2]|0)+20>>2];cz(b,e)|0;e=Ex(a,e)|0;while(1){if(!e)break;g=Gx(a,e)|0;Ux(a,e)|0;e=g}f=f+1|0}return f|0}function Gh(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function Hh(a){a=a|0;var b=0,c=0;b=Sy(a)|0;while(1){if(!b)break;c=Ty(a,b)|0;cz(a,b)|0;b=c}return}function Ih(a,b){a=a|0;b=b|0;var c=0;c=Sy(b)|0;while(1){if(!c){c=0;break}if(!(cy(a,c,1,0)|0))break;c=Ty(b,c)|0}return c|0}function Jh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;Kh(b);i=b+16|0;f=0;e=0;while(1){if((f|0)>=(c[(c[i>>2]|0)+220>>2]|0))break;Lh(b,f);f=f+1|0;e=(Mh(b,0,d)|0)+e|0}Nh(b);h=1;while(1){f=c[i>>2]|0;g=c[f+180>>2]|0;if((h|0)>(g|0))break;g=(Oh(c[(c[f+184>>2]|0)+(h<<2)>>2]|0,d)|0)+e|0;h=h+1|0;e=g}do if((g|0)>0){f=xx(b,85711)|0;if(f|0?(QL(f)|0)<<24>>24==0:0)break;ll(b);a[190689]=1;e=Mh(b,2,d)|0}while(0);Ph(b,e);return}function Kh(d){d=d|0;var e=0;if(0)EL();a[190689]=0;c[45971]=d;e=((by(ig(d)|0)|0)<<2)+4|0;c[45970]=uH(e)|0;c[45969]=uH(e)|0;Fi(d);e=d+16|0;if(b[(c[e>>2]|0)+136>>1]&16)Gi(d);Uk(d);Il(d,1);Hi(d);Wh(d);e=c[e>>2]|0;c[45972]=b[e+236>>1];c[45973]=b[e+238>>1];return}function Lh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;a=c[a+16>>2]|0;c[a+192>>2]=c[(c[a+216>>2]|0)+(d<<2)>>2];a:do if((d|0)>0){d=b[a+238>>1]|0;e=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(d|0))break a;f=c[e>>2]|0;g=f+(a<<6)+4|0;f=f+(a<<6)|0;c[g>>2]=(c[g>>2]|0)+(c[f>>2]<<2);c[f>>2]=0;a=a+1|0}}while(0);return}function Mh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;n=o;if((b|0)>1){e=ki(0)|0;li(a)}else e=2147483647;m=c[15686]|0;k=b;f=0;b=e;while(1){if((k|0)>=3)break;f=c[46365]|0;if((k|0)==2)if((e|0)>(b|0)){ni(a);e=b}else e=b;else{e=(f|0)<4?f:4;if((ig(a)|0)==(a|0))mi(a,k);if(!k)Xh(a);Yh(a);g=ki(0)|0;if((g|0)>(b|0)){f=e;e=g}else{li(a);f=e;e=g;b=g}}g=0;j=0;while(1){if((j|0)>=(f|0))break;if(0){c[n>>2]=k;c[n+4>>2]=j;c[n+8>>2]=g;c[n+12>>2]=e;c[n+16>>2]=b;g1(m,86104,n)|0}i=g+1|0;if((e|0)==0|(g|0)>=(c[45974]|0))break;oi(a,j);e=ki(0)|0;if((e|0)>(b|0))g=i;else{li(a);g=+h[22830]*+(b|0)>+(e|0)?0:i;b=e}j=j+1|0}if(!e){e=0;break}else k=k+1|0}if((e|0)>(b|0))ni(a);if((b|0)>0){pi(a,0);e=ki(0)|0}else e=b;a:do if(d|0){b=0;while(1){if((b|0)>=(f|0))break a;qi(a);b=b+1|0}}while(0);l=o;return e|0}function Nh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;ji(a);k=a+16|0;d=c[k>>2]|0;m=c[15686]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;e=c[d+196>>2]|0;f=c[e+(j<<6)+8>>2]|0;c[e+(j<<6)>>2]=f;g=c[e+(j<<6)+12>>2]|0;c[e+(j<<6)+4>>2]=g;i=0;while(1){if((i|0)>=(f|0))break;h=c[g+(i<<2)>>2]|0;if(!h){o=6;break}c[(c[h+16>>2]|0)+236>>2]=i;i=i+1|0}if((o|0)==6){o=0;if(0){e=ry(a)|0;d=c[(c[(c[k>>2]|0)+196>>2]|0)+(j<<6)>>2]|0;c[n>>2]=e;c[n+4>>2]=j;c[n+8>>2]=i;c[n+12>>2]=d;g1(m,86054,n)|0;d=c[k>>2]|0;e=c[d+196>>2]|0}c[e+(j<<6)>>2]=i}j=j+1|0}l=p;return}function Oh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;fl(a);Wh(a);Xh(a);Yh(a);f=a+16|0;d=Mh(a,2,b)|0;e=1;while(1){g=c[f>>2]|0;if((e|0)>(c[g+180>>2]|0))break;d=(Oh(c[(c[g+184>>2]|0)+(e<<2)>>2]|0,b)|0)+d|0;e=e+1|0}Zh(a);return d|0}function Ph(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;p=q;f=c[45969]|0;if(f|0){D_(f);c[45969]=0}f=c[45970]|0;if(f|0){D_(f);c[45970]=0}o=d+16|0;f=1;while(1){g=c[o>>2]|0;if((f|0)>(c[g+180>>2]|0))break;Qh(c[(c[g+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0}n=b[g+236>>1]|0;f=g;while(1){if((n|0)>(b[f+238>>1]|0))break;else m=0;while(1){f=c[f+196>>2]|0;if((m|0)>=(c[f+(n<<6)>>2]|0))break;k=(c[(c[f+(n<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;f=c[k>>2]|0;c[f+236>>2]=m;f=c[f+188>>2]|0;a:do if(f|0){g=0;while(1){i=c[f+(g<<2)>>2]|0;if(!i)break a;j=i+16|0;if((a[(c[j>>2]|0)+112>>0]|0)==4){wh(i);D_(c[j>>2]|0);D_(i);g=g+-1|0;f=c[(c[k>>2]|0)+188>>2]|0}g=g+1|0}}while(0);m=m+1|0;f=c[o>>2]|0}Rh(c[f+(n<<6)+56>>2]|0);n=n+1|0;f=c[o>>2]|0}if(0){o=c[15686]|0;d=ry(d)|0;r=+FL();c[p>>2]=d;c[p+4>>2]=e;h[p+8>>3]=r;g1(o,85722,p)|0}l=q;return}function Qh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+16|0;d=1;while(1){f=c[g>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Qh(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a:do if(c[f+268>>2]|0){e=b[f+236>>1]|0;d=f;while(1){if((e|0)>(b[d+238>>1]|0))break a;j=c[(c[d+268>>2]|0)+(e<<2)>>2]|0;i=Sh(a,j,-1)|0;j=Sh(a,j,1)|0;c[(c[(c[g>>2]|0)+268>>2]|0)+(e<<2)>>2]=i;k=c[(c[(c[(ig(a)|0)+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0;i=c[(c[i+16>>2]|0)+236>>2]|0;f=c[g>>2]|0;h=c[f+196>>2]|0;c[h+(e<<6)+4>>2]=k+(i<<2);c[h+(e<<6)>>2]=(c[(c[j+16>>2]|0)+236>>2]|0)+1-i;e=e+1|0;d=f}}while(0);return}function Rh(a){a=a|0;if(a|0){D_(c[a+8>>2]|0);D_(a)}return}function Sh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b;while(1){b=Th(b,c)|0;if(!b)break;if(Uh(a,b)|0){d=b;continue}e=(Vh(a,b)|0)==0;d=e?d:b}return d|0}function Th(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a)qa(85761,85686,1023,85763);if((b|0)<0){a=c[a+16>>2]|0;e=c[a+236>>2]|0;if((e|0)>0){a=(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+-1|0;f=7}else g=0}else{a=c[a+16>>2]|0;e=c[a+236>>2]|0;a=(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+1|0;f=7}if((f|0)==7){a=c[(c[a>>2]|0)+(d<<2)>>2]|0;if(a)if((O((c[(c[a+16>>2]|0)+236>>2]|0)-e|0,b)|0)>0)g=a;else qa(85772,85686,1029,85763);else g=0}return g|0}function Uh(b,d){b=b|0;d=d|0;if(!(a[(c[d+16>>2]|0)+156>>0]|0))b=(oz(b,d)|0)!=0&1;else b=0;return b|0}function Vh(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d+16>>2]|0;if(((a[d+156>>0]|0)==1?(c[d+176>>2]|0)==1:0)?(c[d+184>>2]|0)==1:0){d=c[d+180>>2]|0;while(1){d=c[d>>2]|0;e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}if(oz(b,d)|0)d=1;else f=7}else f=7;if((f|0)==7)d=0;return d|0}function Wh(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[46370]|0;a:do if((d|0)!=0|(c[46391]|0)!=0){d=NL(b,d,0)|0;if(d|0){switch(a[d>>0]|0){case 0:break a;case 111:{if(!(b$(d,85974)|0)){ei(b,1);break a}break}case 105:{if(!(b$(d,95660)|0)){ei(b,0);break a}break}default:{}}c[e>>2]=d;Pw(1,85978,e)|0;break}d=wA(b)|0;while(1){if(!d)break;if(!(Rj(d)|0))Wh(d);d=xA(d)|0}if(c[46391]|0)fi(b)}while(0);l=f;return}function Xh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;e=c[k>>2]|0;j=b[e+236>>1]|0;while(1){if((j|0)>(b[e+238>>1]|0))break;else{f=0;i=0}while(1){g=c[e+196>>2]|0;h=c[g+(j<<6)>>2]|0;if((i|0)>=(h|0))break;g=c[(c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;a[g+158>>0]=0;a[g+157>>0]=0;c[g+284>>2]=i;if((f|0)==0&(c[g+192>>2]|0)>0){f=ci(h,h)|0;e=c[k>>2]|0;c[(c[e+196>>2]|0)+(j<<6)+56>>2]=f;f=1}i=i+1|0}a:do if(f){i=0;f=h;while(1){if((i|0)>=(f|0))break a;h=c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0;if(!(a[(c[h+16>>2]|0)+157>>0]|0)){di(d,h);e=c[k>>2]|0;f=c[e+196>>2]|0;g=f;f=c[f+(j<<6)>>2]|0}i=i+1|0}}while(0);j=j+1|0}return}function Yh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=d+16|0;e=c[s>>2]|0;if(a[e+240>>0]|0){h=0;r=b[e+236>>1]|0;q=0;i=0;a:while(1){if((r|0)>(b[e+238>>1]|0))break;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if(!g){g=q;f=i}else{f=c[f+(r<<6)+4>>2]|0;o=c[(c[(c[f>>2]|0)+16>>2]|0)+236>>2]|0;e=0;while(1){if((e|0)>=(g|0))break;a[(c[(c[f+(e<<2)>>2]|0)+16>>2]|0)+157>>0]=0;e=e+1|0}e=(e<<2)+4|0;if(!h)p=vH(e)|0;else p=xH(i,e)|0;m=0;n=0;while(1){e=c[s>>2]|0;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if((g|0)<=(n|0))break;j=c[(c[f+(r<<6)+4>>2]|0)+(((c[e+116>>2]&1|0)==0?g+~n|0:n)<<2)>>2]|0;l=j+16|0;e=0;k=0;while(1){i=c[l>>2]|0;if((e|0)>=(c[i+200>>2]|0)){f=0;g=0;e=i;break}i=k+((_h(d,c[(c[i+196>>2]|0)+(e<<2)>>2]|0)|0)!=0&1)|0;e=e+1|0;k=i}while(1){if((g|0)>=(c[e+192>>2]|0))break;i=f+((_h(d,c[(c[e+188>>2]|0)+(g<<2)>>2]|0)|0)!=0&1)|0;f=i;g=g+1|0;e=c[l>>2]|0}if(f|k)if((k|0)==0&(a[e+157>>0]|0)==0)e=($h(d,j,p+(m<<2)|0,r)|0)+m|0;else e=m;else{c[p+(m<<2)>>2]=j;e=m+1|0}m=e;n=n+1|0}b:do if(m){c:do if(!(c[e+116>>2]&1)){f=p;e=p+(m<<2)|0;while(1){e=e+-4|0;if(f>>>0>=e>>>0){g=0;break c}n=c[f>>2]|0;c[f>>2]=c[e>>2];c[e>>2]=n;f=f+4|0}}else g=0;while(0);while(1){e=c[s>>2]|0;i=c[e+196>>2]|0;f=c[i+(r<<6)>>2]|0;if((g|0)>=(f|0)){m=0;g=i;break}n=c[p+(g<<2)>>2]|0;c[(c[i+(r<<6)+4>>2]|0)+(g<<2)>>2]=n;c[(c[n+16>>2]|0)+236>>2]=g+o;g=g+1|0}while(1){if((m|0)>=(f|0))break b;l=(c[(c[g+(r<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;i=c[(c[l>>2]|0)+188>>2]|0;if(i){k=0;f=i;while(1){g=c[f+(k<<2)>>2]|0;e=c[s>>2]|0;if(!g)break;j=c[g>>2]&3;i=c[(c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=c[(c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;if(!(c[e+116>>2]&1))if((i|0)<(j|0))t=36;else e=k;else if((i|0)>(j|0))t=36;else e=k;if((t|0)==36){t=0;if(_h(d,g)|0){t=37;break a}wh(g);ai(d,g);e=k+-1|0;f=c[(c[l>>2]|0)+188>>2]|0}k=e+1|0}f=c[e+196>>2]|0;g=f;f=c[f+(r<<6)>>2]|0}m=m+1|0}}while(0);a[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(r<<6)+49>>0]=0;h=p;g=p;f=p}r=r+1|0;q=g;i=f}if((t|0)==37)qa(85820,85686,1561,85859);if(h|0)D_(q)}return}function Zh(a){a=a|0;var d=0,e=0;e=a+16|0;a=c[e>>2]|0;a:do if(c[a+268>>2]|0){d=b[a+236>>1]|0;while(1){if((d|0)>(b[a+238>>1]|0))break a;c[(c[a+268>>2]|0)+(d<<2)>>2]=c[c[(c[a+196>>2]|0)+(d<<6)+4>>2]>>2];d=d+1|0;a=c[e>>2]|0}}while(0);return}function _h(a,b){a=a|0;b=b|0;if((c[(c[b+16>>2]|0)+156>>2]|0)!=0?(bi(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)!=0:0)a=(bi(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)!=0&1;else a=0;return a|0}function $h(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+16|0;g=c[l>>2]|0;a[g+157>>0]=1;a:do if((c[g+192>>2]|0)>0){h=0;j=0;while(1){i=c[(c[g+188>>2]|0)+(j<<2)>>2]|0;if(!i)break a;if((_h(b,i)|0)!=0?(k=c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,(a[(c[k+16>>2]|0)+157>>0]|0)==0):0)h=($h(b,k,e+(h<<2)|0,f)|0)+h|0;j=j+1|0;g=c[l>>2]|0}}else h=0;while(0);if((c[g+232>>2]|0)==(f|0)){c[e+(h<<2)>>2]=d;return h+1|0}else qa(85872,85686,1490,85888);return 0}function ai(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[d>>2]&3;j=c[((i|0)==2?d:d+-48|0)+40>>2]|0;f=c[(c[j+16>>2]|0)+188>>2]|0;a:do if(!f){e=d+48|0;m=15}else{l=d+48|0;g=((i|0)==3?d:l)+40|0;e=0;while(1){h=c[f+(e<<2)>>2]|0;if(!h){e=l;m=15;break a}if((c[((c[h>>2]&3|0)==2?h:h+-48|0)+40>>2]|0)==(c[g>>2]|0))break;else e=e+1|0}xh(d,h);e=(c[d+16>>2]|0)+172|0;if(!(c[e>>2]|0))c[e>>2]=h;e=c[h+16>>2]|0;if((a[e+112>>0]|0)==4?(k=e+116|0,(c[k>>2]|0)==0):0)c[k>>2]=d;e=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;f=c[e+204>>2]|0;if(!f)e=vH((c[e+208>>2]<<2)+8|0)|0;else e=xH(f,(c[e+208>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0)+204>>2]=e;i=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;j=c[i+204>>2]|0;i=i+208|0;k=c[i>>2]|0;c[i>>2]=k+1;c[j+(k<<2)>>2]=d;d=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;c[(c[d+204>>2]|0)+(c[d+208>>2]<<2)>>2]=0}while(0);if((m|0)==15){m=oh(j,c[((i|0)==3?d:e)+40>>2]|0,d)|0;l=c[d+16>>2]|0;d=c[m+16>>2]|0;a[d+112>>0]=(a[l+112>>0]|0)==4?4:3;c[d+96>>2]=c[l+96>>2];vh(b,m)}return}function bi(a,b){a=a|0;b=b|0;var c=0;c=Uh(a,b)|0;return Vh(a,b)|0|c|0}function ci(a,b){a=a|0;b=b|0;var d=0;d=uH(12)|0;c[d>>2]=a;c[d+4>>2]=b;c[d+8>>2]=uH(O(b,a)|0)|0;return d|0}function di(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=d+16|0;l=c[o>>2]|0;k=c[(c[(c[b+16>>2]|0)+196>>2]|0)+(c[l+232>>2]<<6)+56>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=(c[(c[(ig(b)|0)+16>>2]|0)+180>>2]|0)>0;e=c[o>>2]|0;f=c[e+188>>2]|0;a:do if(f){m=k+4|0;n=k+8|0;d=0;b:while(1){j=c[f+(d<<2)>>2]|0;if(!j){p=e;break a}if(l){if((oz(b,c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)|0)!=0?(oz(b,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0)!=0:0)q=7}else q=7;do if((q|0)==7){q=0;h=j+16|0;if(c[(c[h>>2]|0)+156>>2]|0){e=c[j>>2]&3;g=j+-48|0;r=c[(c[((e|0)==2?j:g)+40>>2]|0)+16>>2]|0;i=c[r+284>>2]|0;f=(i|0)<(c[k>>2]|0);if((a[r+158>>0]|0)==1){if(!f){q=10;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=12;break b}a[(c[n>>2]|0)+((O(f,i)|0)+e)>>0]=1;wh(j);d=d+-1|0;if((a[(c[h>>2]|0)+112>>0]|0)==4)break;ai(b,j);break}else{if(!f){q=16;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=18;break b}a[(c[n>>2]|0)+((O(f,e)|0)+i)>>0]=1;e=c[((c[j>>2]&3|0)==2?j:g)+40>>2]|0;if(a[(c[e+16>>2]|0)+157>>0]|0)break;di(b,e);break}}}while(0);f=c[o>>2]|0;d=d+1|0;e=f;f=c[f+188>>2]|0}if((q|0)==10)qa(85898,85686,1251,85930);else if((q|0)==12)qa(85942,85686,1252,85930);else if((q|0)==16)qa(85898,85686,1260,85930);else if((q|0)==18)qa(85942,85686,1261,85930)}else p=e;while(0);a[p+158>>0]=0;return}function ei(a,b){a=a|0;b=b|0;var c=0;c=Sy(a)|0;while(1){if(!c)break;gi(a,c,b);c=Ty(a,c)|0}return}function fi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=Sy(b)|0;while(1){if(!d)break;e=NL(d,c[46391]|0,0)|0;a:do if(e|0){switch(a[e>>0]|0){case 0:break a;case 111:{if(!(b$(e,85974)|0)){gi(b,d,1);break a}break}case 105:{if(!(b$(e,95660)|0)){gi(b,d,0);break a}break}default:{}}h=ry(d)|0;c[f>>2]=e;c[f+4>>2]=h;Pw(1,86009,f)|0}while(0);d=Ty(b,d)|0}l=g;return}function gi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[45970]|0;h=d+16|0;f=c[h>>2]|0;a:do if(!(c[f+212>>2]|0)){i=(e|0)!=0;b:do if(i){g=0;d=0;e=f;while(1){f=c[(c[e+180>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(hi(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}else{g=0;d=0;e=f;while(1){f=c[(c[e+172>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(hi(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}while(0);if((d|0)>=2){c[j+(d<<2)>>2]=0;_0(j,d,4,61);h=i?2:3;g=i?-1:1;f=1;while(1){d=c[j+(f<<2)>>2]|0;if(!d)break a;e=c[j+(f+-1<<2)>>2]|0;e=c[((c[e>>2]&3|0)==(h|0)?e:e+(g*48|0)|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==(h|0)?d:d+(g*48|0)|0)+40>>2]|0;if(hh(e,d)|0)break a;i=oh(e,d,0)|0;a[(c[i+16>>2]|0)+112>>0]=4;vh(b,i);f=f+1|0}}}while(0);return}function hi(a){a=a|0;var b=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;return (c[(c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)!=(c[(c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)|0}function ii(a,b){a=a|0;b=b|0;return ((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>>2]|0)>>>4)|0}function ji(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;g=f+220|0;h=c[g>>2]|0;if((h|0)>=2){i=f+216|0;a=0;e=0;while(1){if((e|0)>=(h|0))break;d=c[(c[i>>2]|0)+(e<<2)>>2]|0;if(a|0)c[(c[a+16>>2]|0)+164>>2]=d;j=c[d+16>>2]|0;c[j+168>>2]=a;a=d;d=j;while(1){d=c[d+164>>2]|0;if(!d)break;a=d;d=c[d+16>>2]|0}e=e+1|0}c[g>>2]=1;c[f+192>>2]=c[c[f+216>>2]>>2];b[f+236>>1]=c[45972];b[f+238>>1]=c[45973]}return}function ki(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=c[45971]|0;j=i+16|0;f=c[j>>2]|0;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>=(b[f+238>>1]|0))break;d=c[f+196>>2]|0;if(!(a[d+(h<<6)+49>>0]|0)){e=Di(i,h)|0;d=c[j>>2]|0;f=c[d+196>>2]|0;c[f+(h<<6)+52>>2]=e;a[f+(h<<6)+49>>0]=1}else{e=c[d+(h<<6)+52>>2]|0;d=f}g=e+g|0;h=h+1|0;f=d}return g|0}function li(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0;a=c[a+16>>2]|0;g=b[a+238>>1]|0;i=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(g|0))break;f=c[i>>2]|0;e=c[f+(a<<6)>>2]|0;f=f+(a<<6)+4|0;d=0;while(1){if((d|0)>=(e|0))break;j=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;h[j+16>>3]=+(c[j+236>>2]|0);d=d+1|0}a=a+1|0}return}function mi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;m=r;n=d+16|0;o=GL(c[(c[n>>2]|0)+232>>2]|0)|0;j=c[n>>2]|0;f=j+192|0;g=f;while(1){g=c[g>>2]|0;if(!g)break;g=c[g+16>>2]|0;a[g+157>>0]=0;g=g+164|0}h=b[j+238>>1]|0;i=j+196|0;g=b[j+236>>1]|0;while(1){if((g|0)>(h|0))break;c[(c[i>>2]|0)+(g<<6)>>2]=0;g=g+1|0}i=(e|0)==0;while(1){g=c[f>>2]|0;if(!g)break;h=g+16|0;f=c[h>>2]|0;if((c[c[(i?f+172|0:f+180|0)>>2]>>2]|0)==0?(k=f+157|0,(a[k>>0]|0)==0):0){a[k>>0]=1;IL(o,g);while(1){f=JL(o)|0;if(!f)break;if((a[(c[f+16>>2]|0)+159>>0]|0)==7){kl(d,f,e,o);continue}else{Bi(d,f);Ci(o,f,e);continue}}f=c[h>>2]|0}f=f+164|0}if(JL(o)|0)Pw(1,86217,m)|0;f=c[n>>2]|0;j=b[f+236>>1]|0;while(1){if((j|0)>(b[f+238>>1]|0))break;a[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(j<<6)+49>>0]=0;if((c[f+116>>2]&1|0)!=0?(p=c[f+196>>2]|0,q=c[p+(j<<6)>>2]|0,(q|0)>0):0){g=c[p+(j<<6)+4>>2]|0;h=q+-1|0;i=(h|0)/2|0;f=0;while(1){if((f|0)>(i|0))break;vi(c[g+(f<<2)>>2]|0,c[g+(h-f<<2)>>2]|0);f=f+1|0}f=c[n>>2]|0}j=j+1|0}if((ig(d)|0)==(d|0)?(ki(0)|0)>0:0)pi(d,0);HL(o);l=r;return}function ni(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;d=c[n>>2]|0;f=b[d+236>>1]|0;e=b[d+238>>1]|0;l=e<<16>>16;m=d+196|0;g=f;while(1){if((g|0)>(l|0))break;k=c[m>>2]|0;j=c[k+(g<<6)>>2]|0;k=k+(g<<6)+4|0;i=0;while(1){if((i|0)>=(j|0))break;o=c[(c[(c[k>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;c[o+236>>2]=~~+h[o+16>>3];i=i+1|0}g=g+1|0}while(1){if((f|0)>(e<<16>>16|0))break;a[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(f<<6)+49>>0]=0;o=c[d+196>>2]|0;_0(c[o+(f<<6)+4>>2]|0,c[o+(f<<6)>>2]|0,4,62);o=c[n>>2]|0;f=f+1|0;e=b[o+238>>1]|0;d=o}return}function oi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=((d|0)%4|0|0)<2&1;e=c[a+16>>2]|0;if(!(d&1)){d=b[e+236>>1]|0;f=1;e=b[e+238>>1]|0;d=(d<<16>>16<=(b[(c[(c[45971]|0)+16>>2]|0)+236>>1]|0)&1)+(d<<16>>16)|0}else{d=b[e+238>>1]|0;f=-1;e=b[e+236>>1]|0;d=((d<<16>>16>=(b[(c[(c[45971]|0)+16>>2]|0)+238>>1]|0))<<31>>31)+(d<<16>>16)|0}e=f+e|0;while(1){if((d|0)==(e|0))break;yi(a,d,g,(xi(a,d,d-f|0)|0)&255);d=d+f|0}pi(a,g^1);return}function pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;g=c[k>>2]|0;i=b[g+236>>1]|0;j=b[g+238>>1]|0;h=g+196|0;f=i<<16>>16;while(1){if((f|0)>(j|0)){h=i;break}a[(c[h>>2]|0)+(f<<6)+48>>0]=1;f=f+1|0}while(1){f=0;h=h<<16>>16;while(1){if((h|0)>(b[g+238>>1]|0))break;if(a[(c[g+196>>2]|0)+(h<<6)+48>>0]|0){f=(wi(d,h,e)|0)+f|0;g=c[k>>2]|0}h=h+1|0}if((f|0)<=0)break;h=b[g+236>>1]|0}return}function qi(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=d+16|0;e=c[o>>2]|0;n=b[e+238>>1]|0;a:while(1){if((n|0)<(b[e+236>>1]|0)){e=16;break}f=c[e+196>>2]|0;a[f+(n<<6)+48>>0]=0;p=(n|0)>0;q=n+1|0;g=0;b:while(1){l=(c[f+(n<<6)>>2]|0)+-1|0;m=f+(n<<6)+4|0;k=f+(q<<6)|0;while(1){if((g|0)>=(l|0))break b;j=c[m>>2]|0;i=c[j+(g<<2)>>2]|0;g=g+1|0;j=c[j+(g<<2)>>2]|0;if((c[(c[i+16>>2]|0)+236>>2]|0)>=(c[(c[j+16>>2]|0)+236>>2]|0)){e=7;break a}if(ri(d,i,j)|0)continue;if(p){f=si(i,j)|0;h=si(j,i)|0}else{f=0;h=0}if((c[k>>2]|0)>0){f=(ti(i,j)|0)+f|0;h=(ti(j,i)|0)+h|0}if((h|0)<=(f|0))break}ui(d,n,i,j);e=c[o>>2]|0;f=c[e+196>>2]|0}n=n+-1|0}if((e|0)==7)qa(86168,85686,721,86194);else if((e|0)==16)return}function ri(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+16>>2]|0;i=c[j+212>>2]|0;f=c[e+16>>2]|0;g=c[f+212>>2]|0;h=(i|0)!=(g|0);do if(!(a[190689]|0))if((g|0)==0|((i|0)==0|h^1))k=9;else{if((a[j+159>>0]|0)==7?(a[j+156>>0]|0)==1:0){b=0;break}if((a[f+159>>0]|0)==7?(a[f+156>>0]|0)==1:0){b=0;break}b=1}else if(h)b=1;else k=9;while(0);if((k|0)==9){f=c[b+16>>2]|0;b=c[(c[f+196>>2]|0)+(c[j+232>>2]<<6)+56>>2]|0;if(!b)b=0;else{j=(c[f+116>>2]&1|0)==0;k=O(c[b+4>>2]|0,c[(c[(j?d:e)+16>>2]|0)+284>>2]|0)|0;b=a[(c[b+8>>2]|0)+((c[(c[(j?e:d)+16>>2]|0)+284>>2]|0)+k)>>0]|0}}return b|0}function si(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+172>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+16|0;f=c[(c[l>>2]|0)+172>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+16>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function ti(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+180>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+56|0;f=c[(c[l>>2]|0)+180>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+56>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function ui(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=a[(c[e+16>>2]|0)+156>>0]|0;if(i<<24>>24!=(a[(c[f+16>>2]|0)+156>>0]|0)){j=b+16|0;l=c[(c[j>>2]|0)+196>>2]|0;k=c[l+(d<<6)>>2]|0;l=l+(d<<6)+4|0;b=0;g=0;h=0;while(1){if((b|0)>=(k|0))break;o=(a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)==0;b=b+1|0;g=g+(o&1)|0;h=h+((o^1)&1)|0}i=i<<24>>24==0;h=(g|0)<(h|0)?(i?e:f):i?f:e;i=0;b=0;while(1){if((b|0)>=(k|0))break;i=(c[(c[l>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}o=(a[(c[h+16>>2]|0)+156>>0]|0)==0&1;n=0;g=i;while(1){b=g+-1|0;if((g|0)<=0){m=0;b=i;break}if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){m=0;b=i;break}n=n+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;m=m+1|0}vi(e,f);j=c[(c[j>>2]|0)+196>>2]|0;k=c[j+(d<<6)>>2]|0;j=j+(d<<6)+4|0;b=0;while(1){if((b|0)>=(k|0)){h=0;g=i;break}i=(c[(c[j>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}while(1){b=g+-1|0;if((g|0)<=0){g=0;b=i;break}if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){g=0;b=i;break}h=h+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;g=g+1|0}d=h-g|0;o=n-m|0;if((((d|0)>-1?d:0-d|0)|0)>(((o|0)>-1?o:0-o|0)|0))vi(e,f)}return}function vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+16>>2]|0;e=c[f+232>>2]|0;f=f+236|0;d=c[f>>2]|0;g=b+16|0;h=c[(c[g>>2]|0)+236>>2]|0;c[f>>2]=h;f=(c[45971]|0)+16|0;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(h<<2)>>2]=a;c[(c[g>>2]|0)+236>>2]=d;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return}function wi(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=d+16|0;n=c[(c[q>>2]|0)+196>>2]|0;a[n+(e<<6)+48>>0]=0;r=(e|0)>0;s=e+1|0;o=(f|0)!=0;p=e+-1|0;g=0;i=0;f=n;a:while(1){l=(c[f+(e<<6)>>2]|0)+-1|0;m=f+(e<<6)+4|0;h=f+(s<<6)|0;n=g;while(1){if((n|0)>=(l|0)){f=17;break a}k=c[m>>2]|0;j=c[k+(n<<2)>>2]|0;n=n+1|0;k=c[k+(n<<2)>>2]|0;if((c[(c[j+16>>2]|0)+236>>2]|0)>=(c[(c[k+16>>2]|0)+236>>2]|0)){f=5;break a}if(ri(d,j,k)|0)continue;if(r){f=si(j,k)|0;g=si(k,j)|0}else{f=0;g=0}if((c[h>>2]|0)>0){f=(ti(j,k)|0)+f|0;g=(ti(k,j)|0)+g|0}if((f|0)>(g|0))break;if((f|0)==(g|0)&(o&(f|0)>0)){f=g;break}}vi(j,k);i=f-g+i|0;g=c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0;a[g+(e<<6)+49>>0]=0;h=c[q>>2]|0;f=c[h+196>>2]|0;a[f+(e<<6)+48>>0]=1;if((b[h+236>>1]|0)<(e|0)){a[g+(p<<6)+49>>0]=0;a[f+(p<<6)+48>>0]=1}if((b[h+238>>1]|0)<=(e|0)){g=n;continue}a[g+(s<<6)+49>>0]=0;a[f+(s<<6)+48>>0]=1;g=n}if((f|0)==5)qa(86168,85686,770,86202);else if((f|0)==17)return i|0;return 0}function xi(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[45969]|0;q=a+16|0;a=c[(c[q>>2]|0)+196>>2]|0;r=c[a+(e<<6)+4>>2]|0;n=(f|0)>(e|0);o=p+4|0;m=0;while(1){f=c[a+(e<<6)>>2]|0;if((m|0)>=(f|0)){a=0;j=0;break}l=(c[r+(m<<2)>>2]|0)+16|0;a=c[l>>2]|0;a:do if(n){k=c[a+180>>2]|0;a=0;j=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+88>>0];a=a+1|0}j=j+1|0}}else{k=c[a+172>>2]|0;j=0;a=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+48>>0];a=a+1|0}j=j+1|0}}while(0);b:do switch(a|0){case 0:{i=-1.0;break}case 1:{i=+(c[p>>2]|0);break}case 2:{i=+(((c[o>>2]|0)+(c[p>>2]|0)|0)/2|0|0);break}default:{_0(p,a,4,60);f=(a|0)/2|0;if(a&1|0){i=+(c[p+(f<<2)>>2]|0);break b}j=c[p+(f<<2)>>2]|0;g=(c[p+(a+-1<<2)>>2]|0)-j|0;a=c[p+(f+-1<<2)>>2]|0;f=a-(c[p>>2]|0)|0;if((f|0)==(g|0)){i=+((a+j|0)/2|0|0);break b}else{i=+(((O(f,j)|0)+(O(a,g)|0)|0)/(f+g|0)|0|0);break b}}}while(0);h[(c[l>>2]|0)+240>>3]=i;m=m+1|0;a=c[(c[q>>2]|0)+196>>2]|0}while(1){if((j|0)>=(f|0))break;g=c[r+(j<<2)>>2]|0;p=c[g+16>>2]|0;if((c[p+184>>2]|0)==0?(c[p+176>>2]|0)==0:0){a=(zi(g)|0|a&255)&255;f=c[(c[(c[q>>2]|0)+196>>2]|0)+(e<<6)>>2]|0}j=j+1|0}return a|0}function yi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;o=c[(c[b+16>>2]|0)+196>>2]|0;s=c[o+(d<<6)+4>>2]|0;o=c[o+(d<<6)>>2]|0;q=(e|0)!=0;p=(f|e|0)==0;f=0;e=o;o=s+(o<<2)|0;while(1){n=e+-1|0;if((e|0)>0)e=s;else break;a:while(1){b:while(1){if(e>>>0>=o>>>0)break a;while(1){if(e>>>0>=o>>>0)break a;l=c[e>>2]|0;m=+h[(c[l+16>>2]|0)+240>>3];if(!(m<0.0))break;e=e+4|0}k=0;while(1){g=k<<24>>24==0;while(1){e=e+4|0;if(e>>>0>=o>>>0)break a;if(g){g=11;break}i=c[e>>2]|0;if(!(c[(c[i+16>>2]|0)+212>>2]|0)){g=13;break}}if((g|0)==11){i=c[e>>2]|0;j=i}else if((g|0)==13)j=i;if(ri(b,l,j)|0)continue b;g=c[i+16>>2]|0;if(+h[g+240>>3]>=0.0)break;k=(c[g+212>>2]|0)==0?k:1}g=~~m;k=~~+h[(c[i+16>>2]|0)+240>>3];if((g|0)>(k|0)|q&(g|0)==(k|0))break}vi(l,j);f=f+1|0}e=n;o=p?o+-4|0:o}if(f|0?(r=c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0,a[r+(d<<6)+49>>0]=0,(d|0)>0):0)a[r+(d+-1<<6)+49>>0]=0;return}function zi(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;g=c[a+16>>2]|0;if((c[g+200>>2]|0)>0){f=c[g+196>>2]|0;a=c[f>>2]|0;a=c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0;d=1;while(1){e=c[f+(d<<2)>>2]|0;if(!e)break;e=c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;a=(c[(c[e+16>>2]|0)+236>>2]|0)>(c[(c[a+16>>2]|0)+236>>2]|0)?e:a;d=d+1|0}b=+h[(c[a+16>>2]|0)+240>>3];if(!(b>=0.0))a=1;else{h[g+240>>3]=b+1.0;a=0}}else if((c[g+192>>2]|0)>0){e=c[g+188>>2]|0;d=c[e>>2]|0;a=1;d=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;while(1){f=c[e+(a<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;a=a+1|0;d=(c[(c[f+16>>2]|0)+236>>2]|0)<(c[(c[d+16>>2]|0)+236>>2]|0)?f:d}b=+h[(c[d+16>>2]|0)+240>>3];if(b>0.0){h[g+240>>3]=b+-1.0;a=0}else a=1}else a=1;return a|0}function Ai(a,b){a=a|0;b=b|0;return (c[(c[(c[a>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[b>>2]|0)+16>>2]|0)+236>>2]|0)|0}function Bi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+96|0;o=p+64|0;n=p+48|0;h=p+24|0;f=p;j=d+16|0;k=c[(c[j>>2]|0)+232>>2]|0;m=a+16|0;e=c[(c[m>>2]|0)+196>>2]|0;i=c[e+(k<<6)>>2]|0;do if((c[e+(k<<6)+8>>2]|0)>=1){c[(c[e+(k<<6)+4>>2]|0)+(i<<2)>>2]=d;c[(c[j>>2]|0)+236>>2]=i;a=c[m>>2]|0;f=c[a+196>>2]|0;e=f+(k<<6)|0;g=c[e>>2]|0;c[e>>2]=g+1;if((g|0)>=(c[f+(k<<6)+8>>2]|0))qa(86282,85686,1346,86318);g=c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;if((i|0)>(g|0)){m=ry(d)|0;n=c[(c[j>>2]|0)+236>>2]|0;o=c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;c[h>>2]=1359;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=k;c[h+16>>2]=o;Pw(1,86334,h)|0;break}e=b[a+236>>1]|0;a=b[a+238>>1]|0;if((k|0)<(e|0)|(k|0)>(a<<16>>16|0)){c[n>>2]=1364;c[n+4>>2]=k;c[n+8>>2]=e;c[n+12>>2]=a<<16>>16;Pw(1,86407,n)|0;break}if(((c[f+(k<<6)+4>>2]|0)+(i<<2)|0)>>>0>((c[f+(k<<6)+12>>2]|0)+(g<<2)|0)>>>0){i=ry(d)|0;n=c[(c[m>>2]|0)+196>>2]|0;m=(c[n+(k<<6)+4>>2]|0)+(c[(c[j>>2]|0)+236>>2]<<2)|0;n=(c[n+(k<<6)+12>>2]|0)+(c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]<<2)|0;c[o>>2]=1370;c[o+4>>2]=k;c[o+8>>2]=i;c[o+12>>2]=m;c[o+16>>2]=k;c[o+20>>2]=k;c[o+24>>2]=n;Pw(1,86468,o)|0}}else{n=ry(a)|0;o=ry(d)|0;c[f>>2]=1339;c[f+4>>2]=n;c[f+8>>2]=o;c[f+12>>2]=k;c[f+16>>2]=i;Pw(1,86227,f)|0}while(0);l=p;return}function Ci(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=d+16|0;a:do if(!e){g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+184>>2]|0))break a;d=c[(c[d+180>>2]|0)+(g<<2)>>2]|0;e=d+-48|0;f=(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;IL(b,c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)}g=g+1|0}}else{g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+176>>2]|0))break a;d=c[(c[d+172>>2]|0)+(g<<2)>>2]|0;e=d+48|0;f=(c[(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;IL(b,c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)}g=g+1|0}}while(0);return}function Di(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;u=v;g=d+16|0;f=c[(c[g>>2]|0)+196>>2]|0;s=c[f+(e<<6)+4>>2]|0;t=e+1|0;d=c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(t<<6)>>2]|0;if((c[45975]|0)>(d|0))q=c[45976]|0;else{d=d+1|0;c[45975]=d;f=c[45976]|0;if(!f)d=vH(d<<2)|0;else d=xH(f,d<<2)|0;c[45976]=d;f=c[(c[g>>2]|0)+196>>2]|0;q=d}r=f+(t<<6)|0;d=0;while(1){if((d|0)>=(c[r>>2]|0))break;c[q+(d<<2)>>2]=0;d=d+1|0}p=f+(e<<6)|0;o=0;h=0;d=0;j=q;while(1){k=c[p>>2]|0;if((o|0)>=(k|0))break;n=c[(c[(c[s+(o<<2)>>2]|0)+16>>2]|0)+180>>2]|0;a:do if((h|0)>0){m=0;while(1){g=c[n+(m<<2)>>2]|0;if(!g)break a;k=g+16|0;i=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;while(1){g=i+1|0;if((i|0)>=(h|0))break;i=g;d=(O(c[j+(g<<2)>>2]|0,b[(c[k>>2]|0)+154>>1]|0)|0)+d|0}m=m+1|0}}while(0);i=0;while(1){g=c[n+(i<<2)>>2]|0;if(!g)break;j=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;m=q+(j<<2)|0;c[m>>2]=(c[m>>2]|0)+(b[(c[g+16>>2]|0)+154>>1]|0);h=(j|0)>(h|0)?j:h;i=i+1|0;j=q}o=o+1|0}i=f+(e<<6)+4|0;h=0;while(1){if((h|0)>=(k|0))break;g=c[(c[(c[i>>2]|0)+(h<<2)>>2]|0)+16>>2]|0;if(a[g+145>>0]|0){e=g+180|0;c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];d=(Ei(u,1)|0)+d|0}h=h+1|0}i=c[r>>2]|0;h=f+(t<<6)+4|0;g=0;while(1){if((g|0)>=(i|0))break;f=c[(c[(c[h>>2]|0)+(g<<2)>>2]|0)+16>>2]|0;if(a[f+145>>0]|0){t=f+172|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];d=(Ei(u,-1)|0)+d|0}g=g+1|0}l=v;return d|0}function Ei(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(d|0)<1;l=c[a>>2]|0;d=0;a=0;a:while(1){m=c[l+(d<<2)>>2]|0;if(!m)break;d=d+1|0;if(n){j=m+48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+56>>3]-+h[g+56>>3])*+((c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==3?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}else{j=m+-48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+16>>3]-+h[g+16>>3])*+((c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==2?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}}return a|0}function Fi(a){a=a|0;var b=0.0,d=0.0;c[45974]=8;c[46365]=24;h[22830]=.995;a=xx(a,86590)|0;if(a|0?(b=+b2(a),b>0.0):0){d=b*+(c[45974]|0);c[45974]=~~(d>1.0?d:1.0);b=b*+(c[46365]|0);c[46365]=~~(b>1.0?b:1.0)}return}function Gi(a){a=a|0;var d=0,e=0;e=(b[(c[a+16>>2]|0)+238>>1]|0)+2|0;d=uH(e<<2)|0;Ii(a,d,e,0)|0;D_(d);return}function Hi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=a+16|0;i=uH((b[(c[h>>2]|0)+238>>1]<<2)+8|0)|0;g=Sy(a)|0;while(1){if(!g)break;f=i+(c[(c[g+16>>2]|0)+232>>2]<<2)|0;c[f>>2]=(c[f>>2]|0)+1;f=Ex(a,g)|0;while(1){if(!f)break;j=c[f>>2]&3;d=c[(c[(c[((j|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;j=c[(c[(c[((j|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;k=(d|0)>(j|0);e=k?d:j;d=k?j:d;while(1){d=d+1|0;if((d|0)>=(e|0))break;k=i+(d<<2)|0;c[k>>2]=(c[k>>2]|0)+1}f=Gx(a,f)|0}g=Ty(a,g)|0}f=uH((b[(c[h>>2]|0)+238>>1]<<6)+128|0)|0;e=c[h>>2]|0;c[e+196>>2]=f;d=b[e+236>>1]|0;while(1){if((d|0)>(b[e+238>>1]|0))break;j=i+(d<<2)|0;e=c[j>>2]|0;c[f+(d<<6)>>2]=e;c[f+(d<<6)+8>>2]=e;j=uH((c[j>>2]<<2)+4|0)|0;e=c[h>>2]|0;k=c[e+196>>2]|0;c[k+(d<<6)+4>>2]=j;c[k+(d<<6)+12>>2]=j;d=d+1|0;f=k}D_(i);return}function Ii(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;i=1;while(1){g=c[m>>2]|0;if((i|0)>(c[g+180>>2]|0))break;l=Ii(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,d,e,f)|0;i=i+1|0;f=l}a:do if((ig(a)|0)!=(a|0)){H3(d|0,0,e<<2|0)|0;g=Sy(a)|0;while(1){if(!g)break;k=g+16|0;c[d+(c[(c[k>>2]|0)+232>>2]<<2)>>2]=1;i=Ex(a,g)|0;while(1){if(!i)break;l=i+-48|0;j=c[(c[k>>2]|0)+232>>2]|0;while(1){e=j+1|0;if((j|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:l)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;c[d+(e<<2)>>2]=1;j=e}i=Gx(a,i)|0}g=Ty(a,g)|0}g=c[m>>2]|0;i=b[g+236>>1]|0;while(1){if((i|0)>(b[g+238>>1]|0))break a;if(!(c[d+(i<<2)>>2]|0)){if(!f)f=vA(ig(a)|0,86580,1)|0;g=az(f,0,1)|0;Az(g,134365,304,1)|0;l=g+16|0;j=c[l>>2]|0;c[j+232>>2]=i;h[j+96>>3]=.5;h[j+88>>3]=.5;h[j+80>>3]=1.0;c[j+216>>2]=1;c[j+176>>2]=0;j=uH(20)|0;k=c[l>>2]|0;c[k+172>>2]=j;c[k+184>>2]=0;k=uH(20)|0;c[(c[l>>2]|0)+180>>2]=k;Xy(a,g,1)|0;g=c[m>>2]|0}i=i+1|0}}while(0);return f|0}function Ji(a){a=a|0;var b=0,d=0;Zh(a);b=a+16|0;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;Ji(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function Ki(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=Li(c[((b|0)==3?a:a+48|0)+40>>2]|0)|0;b=c[17308+(d*12|0)+((Li(c[((b|0)==2?a:a+-48|0)+40>>2]|0)|0)<<2)>>2]|0;a=(c[a+16>>2]|0)+156|0;c[a>>2]=O(c[a>>2]|0,b)|0;return}function Li(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)b=2;else b=(a[b+160>>0]|0)<2&1;return b|0}function Mi(b,d){b=b|0;d=d|0;if(c[(c[b+16>>2]|0)+192>>2]|0){ll(b);Ni(b);if(a[191874]|0)zl(b);Oi(b);if(Rl(b)|0)Ni(b);Pi(b);if(fI(b,2,Qi(b)|0)|0?(Ri(b),fI(b,2,Qi(b)|0)|0):0)qa(86598,86626,134,86637);Si(b);Ti(b,d);Ui(b)}return}function Ni(d){d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;v=d+16|0;e=c[v>>2]|0;w=c[e+196>>2]|0;t=b[e+236>>1]|0;while(1){if((t|0)>(b[e+238>>1]|0))break;n=w+(t<<6)|0;o=w+(t<<6)+4|0;p=w+(t<<6)+40|0;q=w+(t<<6)+24|0;r=w+(t<<6)+32|0;s=w+(t<<6)+16|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break;l=(c[(c[o>>2]|0)+(m<<2)>>2]|0)+16|0;e=c[l>>2]|0;j=+h[e+80>>3]*.5;i=c[e+204>>2]|0;a:do if(i){g=0;while(1){f=c[i+(g<<2)>>2]|0;if(!f)break a;x=c[f>>2]&3;if((c[((x|0)==3?f:f+48|0)+40>>2]|0)==(c[((x|0)==2?f:f+-48|0)+40>>2]|0)?(u=c[(c[f+16>>2]|0)+96>>2]|0,(u|0)!=0):0){k=+h[u+32>>3]*.5;j=j>k?j:k}g=g+1|0}}while(0);if(+h[p>>3]>3]=j;h[p>>3]=j}if(+h[r>>3]>3]=j;h[r>>3]=j}f=c[e+212>>2]|0;if(f|0){if((f|0)==(d|0))g=0;else{g=KL(f,c[46374]|0,8,0)|0;e=c[l>>2]|0}i=c[e+232>>2]|0;f=c[f+16>>2]|0;e=f+128|0;j=j+ +(g|0);if((i|0)==(b[f+236>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}e=f+120|0;if((i|0)==(b[f+238>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}}m=m+1|0}t=t+1|0;e=c[v>>2]|0}m=tj(d)|0;g=c[v>>2]|0;e=b[g+238>>1]|0;h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[w+(e<<6)+16>>3];f=b[g+236>>1]|0;i=g+252|0;k=0.0;while(1){l=e+-1|0;if((e|0)<=(f|0))break;y=+h[w+(l<<6)+32>>3]+ +h[w+(e<<6)+40>>3]+ +(c[i>>2]|0);j=+h[w+(e<<6)+24>>3]+8.0+ +h[w+(l<<6)+16>>3];j=y>j?y:j;if((c[w+(l<<6)>>2]|0)>0)h[(c[(c[c[w+(l<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+j;k=k>j?k:j;e=l}b:do if((m|0)!=0?(c[g+116>>2]&1|0)!=0:0){uj(d,0);g=c[v>>2]|0;if(a[g+276>>0]|0){e=b[g+238>>1]|0;f=b[g+236>>1]|0;j=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];k=0.0;while(1){i=e+-1|0;if((e|0)<=(f|0))break b;z=+h[(c[(c[c[w+(i<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];y=z-j;j=z;k=k>y?k:y;e=i}}}while(0);c:do if(a[g+276>>0]|0){i=b[g+236>>1]|0;f=b[g+238>>1]|0;while(1){e=f+-1|0;if((f|0)<=(i|0))break c;if((c[w+(e<<6)>>2]|0)<=0){f=e;continue}h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+k;f=e}}while(0);e=g+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;h[e+24>>3]=+h[(c[(c[c[w+(c[e+232>>2]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];e=e+164|0}return}function Oi(a){a=a|0;var b=0,d=0,e=0;pj(a);b=(c[a+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+224>>2]|0;if(d){qj(a,d);b=c[e>>2]|0}d=c[b+228>>2]|0;if(!d)d=b;else{qj(a,d);d=c[e>>2]|0}e=c[d+204>>2]|0;if(e|0){b=0;while(1)if(!(c[e+(b<<2)>>2]|0))break;else b=b+1|0}b=d+164|0}return}function Pi(a){a=a|0;bj(a);cj(a);dj(a);ej(a);fj(a);return}function Qi(a){a=a|0;var b=0,c=0.0;b=xx(a,86826)|0;if(!b)a=2147483647;else{c=+b2(b);a=~~(c*+(ay(a)|0))}return a|0}function Ri(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+16|0;e=c[r>>2]|0;q=b[e+236>>1]|0;while(1){p=b[e+238>>1]|0;if((q|0)>(p|0)){s=19;break}n=c[e+196>>2]|0;o=n+(q<<6)|0;m=c[o>>2]|0;n=n+(q<<6)+4|0;l=0;f=0;a:while(1){if((l|0)>=(m|0)){s=14;break}f=c[(c[n>>2]|0)+(l<<2)>>2]|0;h=c[f+16>>2]|0;i=c[h+256>>2]|0;b:do if(i|0){g=0;while(1){j=c[i+(g<<2)>>2]|0;if(!j)break b;k=c[j>>2]&3;if((c[(c[(c[((k|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((k|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);h=c[h+248>>2]|0;c:do if(h|0){g=0;while(1){i=c[h+(g<<2)>>2]|0;if(!i)break c;j=c[i>>2]&3;if((c[(c[(c[((j|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((j|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);l=l+1|0}if((s|0)==14){s=0;if(f){f=c[c[n>>2]>>2]|0;e=c[c[o+(((q|0)<(p|0)?1:-1)<<6)+4>>2]>>2]|0;if(!e){s=16;break}o=uh(d)|0;p=o+16|0;a[(c[p>>2]|0)+156>>0]=2;$i(o,f,0.0,0)|0;$i(o,e,0.0,0)|0;c[(c[p>>2]|0)+232>>2]=c[(c[((c[(c[f+16>>2]|0)+232>>2]|0)<(c[(c[e+16>>2]|0)+232>>2]|0)?f:e)+16>>2]|0)+232>>2];e=c[r>>2]|0}}q=q+1|0}if((s|0)==16)qa(86734,86626,111,86737);else if((s|0)==19)return}function Si(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;a=c[a+16>>2]|0;i=c[a+196>>2]|0;e=b[a+238>>1]|0;a=b[a+236>>1]|0;while(1){if((a|0)>(e|0))break;f=c[i+(a<<6)>>2]|0;g=i+(a<<6)+4|0;d=0;while(1){if((d|0)>=(f|0))break;k=c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;j=k+232|0;h[k+16>>3]=+(c[j>>2]|0);c[j>>2]=a;d=d+1|0}a=a+1|0}return}function Ti(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;Vi(a,a);g=a+16|0;k=c[g>>2]|0;a:do if((b[k+238>>1]|0)>0?(j=c[k+8>>2]|0,e=c[j+84>>2]|0,e|0):0){o=~~(+h[k+32>>3]-+h[k+16>>3]);m=~~(+h[k+40>>3]-+h[k+24>>3]);p=(c[k+116>>2]&1|0)==0;n=p?m:o;m=p?o:m;if((e|0)==4){e=Wi(a)|0;k=c[g>>2]|0;j=c[k+8>>2]|0}else e=(e|0)==2&1;b:do if(!(e<<24>>24)){switch(c[j+84>>2]|0){case 5:{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+h[k+32>>3];l=+h[j+72>>3]/+h[k+40>>3];f=i1.0&l>1.0){l=f;break b}else break a}case 1:break;default:break a}i=+h[j+16>>3];f=+(n|0)/+(m|0);if(f>3];if(f<=0.0)break a;i=f/+(m|0);f=+h[j+72>>3]/+(n|0);if(i<1.0|f<1.0)if(i>2]&1|0)==0;i=e?f:l;f=e?l:f;e=k+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;p=e+16|0;l=+h[p>>3]*f;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);p=e+24|0;l=+h[p>>3]*i;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);e=e+164|0}Xi(a,f,i)}while(0);if(d|0)Yi(a,d);return}function Ui(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+16|0;b=(c[h>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;g=b+16|0;d=0;while(1){b=c[g>>2]|0;f=c[b+180>>2]|0;e=c[f+(d<<2)>>2]|0;if(!e)break;D_(c[e+16>>2]|0);D_(e);d=d+1|0}if(f){D_(f);b=c[g>>2]|0}d=c[b+172>>2]|0;if(d){D_(d);b=c[g>>2]|0}f=b+256|0;e=c[f+4>>2]|0;b=b+180|0;c[b>>2]=c[f>>2];c[b+4>>2]=e;b=c[g>>2]|0;e=b+248|0;f=c[e+4>>2]|0;b=b+172|0;c[b>>2]=c[e>>2];c[b+4>>2]=f;b=(c[g>>2]|0)+164|0}b=0;d=c[(c[h>>2]|0)+192>>2]|0;a:while(1){g=(b|0)==0;f=b+16|0;b=d;while(1){if(!b)break a;e=c[b+16>>2]|0;d=c[e+164>>2]|0;if((a[e+156>>0]|0)!=2)continue a;if(g)c[(c[h>>2]|0)+192>>2]=d;else c[(c[f>>2]|0)+164>>2]=d;D_(e);D_(b);b=d}}c[(c[(c[(c[h>>2]|0)+192>>2]|0)+16>>2]|0)+168>>2]=0;return}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=a+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Vi(c[(c[f+184>>2]|0)+(d<<2)>>2]|0,b);d=d+1|0}_i(a,b);return}function Wi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;s=l;l=l+80|0;e=s+64|0;d=s+48|0;f=s+16|0;m=s;r=s+32|0;a=a+16|0;b=c[(c[a>>2]|0)+8>>2]|0;t=b+48|0;c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];if((!(+h[f>>3]<.001)?(g=f+8|0,!(+h[g>>3]<.001)):0)?(i=b+32|0,c[m>>2]=c[i>>2],c[m+4>>2]=c[i+4>>2],c[m+8>>2]=c[i+8>>2],c[m+12>>2]=c[i+12>>2],c[d>>2]=c[f>>2],c[d+4>>2]=c[f+4>>2],c[d+8>>2]=c[f+8>>2],c[d+12>>2]=c[f+12>>2],c[e>>2]=c[i>>2],c[e+4>>2]=c[i+4>>2],c[e+8>>2]=c[i+8>>2],c[e+12>>2]=c[i+12>>2],Zi(r,d,e),c[f>>2]=c[r>>2],c[f+4>>2]=c[r+4>>2],c[f+8>>2]=c[r+8>>2],c[f+12>>2]=c[r+12>>2],c[d>>2]=c[r>>2],c[d+4>>2]=c[r+4>>2],c[d+8>>2]=c[r+8>>2],c[d+12>>2]=c[r+12>>2],c[e>>2]=c[m>>2],c[e+4>>2]=c[m+4>>2],c[e+8>>2]=c[m+8>>2],c[e+12>>2]=c[m+12>>2],Zi(f,d,e),i=c[a>>2]|0,j=+h[i+32>>3],k=+h[i+40>>3],n=+h[f>>3],o=n/j,p=+h[g>>3],q=p/k,!(o>=1.0&q>=1.0)):0){o=o.5?o:.5;q=+N(+(o*k/p))*p/k;p=+N(+(o*j/n))*n/j*j;a=c[i+8>>2]|0;h[a+64>>3]=p;h[a+72>>3]=q*k;a=1}else a=0;l=s;return a|0}function Xi(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=a+16|0;a=1;while(1){f=c[e>>2]|0;if((a|0)>(c[f+180>>2]|0))break;Xi(c[(c[f+184>>2]|0)+(a<<2)>>2]|0,b,d);a=a+1|0}e=f+16|0;h[e>>3]=+h[e>>3]*b;e=f+24|0;h[e>>3]=+h[e>>3]*d;e=f+32|0;h[e>>3]=+h[e>>3]*b;f=f+40|0;h[f>>3]=+h[f>>3]*d;return}function Yi(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+24|0;g=m+16|0;f=m;n=c[a+16>>2]|0;e=+h[n+32>>3]-+h[n+16>>3];d=+h[n+40>>3]-+h[n+24>>3];i=e/d;if(0){n=c[15686]|0;h[f>>3]=i;h[f+8>>3]=e*.0001*d;g1(n,86650,f)|0;c[g>>2]=zk(a)|0;g1(n,86675,g)|0}d=+h[b>>3];do if(!(i>d*1.1)){a=b+24|0;if(!(i<=d*.8)){c[a>>2]=0;k=9;break}c[a>>2]=-1;if(0){E1(86685,34,1,c[15686]|0)|0;k=9}}else{c[b+24>>2]=~~(d*+((c[b+20>>2]|0)-(c[b+16>>2]|0)|0)/i);k=9}while(0);if((k|0)==9?0:0){n=c[15686]|0;c[j>>2]=c[b+24>>2];g1(n,86720,j)|0}l=m;return}function Zi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function _i(d,e){d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;s=(ig(d)|0)==(d|0);v=d+16|0;w=c[v>>2]|0;a:do if(s){f=b[w+236>>1]|0;d=b[w+238>>1]|0;q=d<<16>>16;r=w+196|0;s=w+196|0;p=f<<16>>16;i=-2147483647.0;g=2147483647.0;while(1){if((p|0)>(q|0))break;j=c[r>>2]|0;o=c[j+(p<<6)>>2]|0;if((o|0)!=0?(t=c[j+(p<<6)+4>>2]|0,u=c[t>>2]|0,(u|0)!=0):0){l=1;j=u;while(1){j=c[j+16>>2]|0;k=a[j+156>>0]|0;if(!((l|0)<(o|0)&k<<24>>24!=0))break;j=c[t+(l<<2)>>2]|0;l=l+1|0}if(!(k<<24>>24)){m=+h[j+16>>3]-+h[j+88>>3];n=g>2]|0)+(p<<6)+4>>2]|0;k=o+-2|0;j=o+-1|0;while(1){j=c[(c[l+(j<<2)>>2]|0)+16>>2]|0;if(!(a[j+156>>0]|0))break;else{j=k;k=k+-1|0}}x=+h[j+96>>3]+ +h[j+16>>3];i=i>x?i:x;g=n?g:m}}p=p+1|0}k=c[w+180>>2]|0;l=w+184|0;j=1;while(1){if((j|0)>(k|0))break a;u=c[(c[(c[l>>2]|0)+(j<<2)>>2]|0)+16>>2]|0;x=+h[u+16>>3]+-8.0;m=+h[u+32>>3]+8.0;j=j+1|0;i=i>m?i:m;g=g>2]|0)+16>>2]|0)+232>>2]|0);g=+(c[(c[(c[w+256>>2]|0)+16>>2]|0)+232>>2]|0);f=b[w+236>>1]|0;d=b[w+238>>1]|0}while(0);e=c[(c[e+16>>2]|0)+196>>2]|0;m=+h[(c[(c[c[e+(d<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[w+120>>3];x=+h[w+128>>3]+ +h[(c[(c[c[e+(f<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];h[w+16>>3]=g;h[w+24>>3]=m;e=c[v>>2]|0;h[e+32>>3]=i;h[e+40>>3]=x;return}function $i(a,d,e,f){a=a|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0;i=uH(96)|0;j=i+48|0;c[j>>2]=c[j>>2]|3;c[i>>2]=c[i>>2]&-4|2;g=uH(176)|0;h=i+16|0;c[h>>2]=g;c[((c[i>>2]&3|0)==3?i:j)+40>>2]=a;c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]=d;if(e>65535.0){aj(e);e=65535.0;g=c[h>>2]|0}b[g+170>>1]=~~(e+(e>=0.0?.5:-.5));c[g+156>>2]=f;ih(i)|0;return i|0}function aj(a){a=+a;var b=0,d=0;b=l;l=l+16|0;d=b;h[d>>3]=a;c[d+8>>2]=65535;Pw(1,86750,d)|0;l=b;return}function bj(a){a=a|0;var b=0,d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;f=a+16|0;e=c[f>>2]|0;a=e+172|0;d=c[a+4>>2]|0;e=e+248|0;c[e>>2]=c[a>>2];c[e+4>>2]=d;e=c[f>>2]|0;d=e+180|0;a=c[d+4>>2]|0;e=e+256|0;c[e>>2]=c[d>>2];c[e+4>>2]=a;e=c[f>>2]|0;a=c[e+180>>2]|0;d=0;while(1)if(!(c[a+(d<<2)>>2]|0))break;else d=d+1|0;b=c[e+172>>2]|0;a=0;while(1)if(!(c[b+(a<<2)>>2]|0))break;else a=a+1|0;c[e+176>>2]=0;a=uH((a+d<<2)+16|0)|0;e=c[f>>2]|0;c[e+172>>2]=a;c[e+184>>2]=0;e=uH(16)|0;a=c[f>>2]|0;c[a+180>>2]=e;a=a+164|0}return}function cj(d){d=d|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+16|0;w=z;x=d+16|0;u=c[x>>2]|0;y=c[u+196>>2]|0;d=(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)!=0;v=c[u+248>>2]|0;c[w>>2]=v;c[w+4>>2]=d?5:v;v=b[u+236>>1]|0;d=u;while(1){if((v|0)>(b[d+238>>1]|0))break;r=y+(v<<6)+4|0;c[(c[(c[c[r>>2]>>2]|0)+16>>2]|0)+232>>2]=0;s=y+(v<<6)|0;t=+(c[w+((v&1)<<2)>>2]|0);p=0.0;k=0;a:while(1){if((k|0)>=(c[s>>2]|0))break;f=c[r>>2]|0;m=c[f+(k<<2)>>2]|0;u=m+16|0;d=c[u>>2]|0;i=+h[d+96>>3];h[d+240>>3]=i;if((c[d+208>>2]|0)>0){j=0;f=0;while(1){g=c[(c[d+204>>2]|0)+(j<<2)>>2]|0;if(!g)break;q=c[g>>2]&3;if((c[((q|0)==3?g:g+48|0)+40>>2]|0)==(c[((q|0)==2?g:g+-48|0)+40>>2]|0)){f=(XK(g)|0)+f|0;d=c[u>>2]|0}j=j+1|0}q=d+96|0;i=+h[q>>3]+ +(f|0);h[q>>3]=i;f=c[r>>2]|0}q=k+1|0;f=c[f+(q<<2)>>2]|0;if(f){o=f+16|0;i=i+t+ +h[(c[o>>2]|0)+88>>3];$i(m,f,i,0)|0;d=~~(i+p);c[(c[o>>2]|0)+232>>2]=d;p=+(d|0);d=c[u>>2]|0}f=c[d+112>>2]|0;if(f){j=c[d+256>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;d=(c[(c[(c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0);g=d?j:k;j=d?k:j;k=f+16|0;d=c[k>>2]|0;i=+((O(c[(c[x>>2]|0)+248>>2]|0,e[d+170>>1]|0)|0)/2|0|0);o=c[g>>2]&3;f=c[((o|0)==2?g:g+-48|0)+40>>2]|0;g=c[((o|0)==3?g:g+48|0)+40>>2]|0;if(!(nj(g,f)|0))$i(f,g,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[g+16>>2]|0)+88>>3])|0),c[d+156>>2]|0)|0;d=c[j>>2]&3;f=c[((d|0)==3?j:j+48|0)+40>>2]|0;d=c[((d|0)==2?j:j+-48|0)+40>>2]|0;if(!(nj(d,f)|0)){$i(f,d,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[d+16>>2]|0)+88>>3])|0),c[(c[k>>2]|0)+156>>2]|0)|0;o=0}else o=0}else o=0;while(1){d=c[u>>2]|0;if((o|0)>=(c[d+192>>2]|0)){k=q;continue a}m=c[(c[d+188>>2]|0)+(o<<2)>>2]|0;k=c[m>>2]&3;g=c[((k|0)==3?m:m+48|0)+40>>2]|0;k=c[((k|0)==2?m:m+-48|0)+40>>2]|0;j=(c[(c[g+16>>2]|0)+236>>2]|0)<(c[(c[k+16>>2]|0)+236>>2]|0);f=j?g:k;g=j?k:g;i=+h[(c[g+16>>2]|0)+88>>3]+ +h[(c[f+16>>2]|0)+96>>3];k=m+16|0;j=~~(i+ +(O(c[(c[x>>2]|0)+248>>2]|0,e[(c[k>>2]|0)+170>>1]|0)|0));n=fh(f,g)|0;if(!n){d=c[k>>2]|0;if(!(c[d+96>>2]|0))$i(f,g,+(j|0),c[d+156>>2]|0)|0}else{A=+(j|0);d=c[k>>2]|0;B=+h[d+136>>3];i=i+ +(c[(c[x>>2]|0)+248>>2]|0)+ +(~~(B+(B>=0.0?.5:-.5))|0);f=~~(i65535){aj(+(f|0));f=65535;d=c[k>>2]|0}k=c[n+16>>2]|0;j=k+170|0;g=e[j>>1]|0;b[j>>1]=(f|0)<(g|0)?g:f;k=k+156|0;c[k>>2]=c[(c[((c[k>>2]|0)>(c[d+156>>2]|0)?n:m)+16>>2]|0)+156>>2]}o=o+1|0}}v=v+1|0;d=c[x>>2]|0}l=z;return}function dj(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+256>>2]|0;a:do if(e){f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e)break a;n=uh(b)|0;d=n+16|0;a[(c[d>>2]|0)+156>>0]=2;l=e+16|0;k=c[l>>2]|0;i=~~(+h[k+56>>3]-+h[k+16>>3]);m=(i|0)>0;j=m?0:0-i|0;i=m?i:0;m=e+48|0;$i(n,c[((c[e>>2]&3|0)==3?e:m)+40>>2]|0,+(i+1|0),c[k+156>>2]|0)|0;k=e+-48|0;$i(n,c[((c[e>>2]&3|0)==2?e:k)+40>>2]|0,+(j+1|0),c[(c[l>>2]|0)+156>>2]|0)|0;l=c[e>>2]&3;i=(c[(c[(c[((l|0)==3?e:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-i|0;e=(c[(c[(c[((l|0)==2?e:k)+40>>2]|0)+16>>2]|0)+232>>2]|0)-j|0;c[(c[d>>2]|0)+232>>2]=((i|0)<(e|0)?i:e)+-1;d=c[g>>2]|0;f=f+1|0;e=c[d+256>>2]|0}}while(0);d=d+164|0}return}function ej(a){a=a|0;if((c[(c[a+16>>2]|0)+180>>2]|0)>0){ij(a);jj(a);kj(a);lj(a)}return}function fj(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;e=a+16|0;f=c[(c[e>>2]|0)+8>>2]|0;if((c[f+84>>2]|0)==3?(b=+h[f+64>>3],d=+h[f+72>>3],!(d*b<=1.0)):0){gj(a);f=c[e>>2]|0;d=(c[f+116>>2]&1|0)==0?b:d;$i(c[f+256>>2]|0,c[f+260>>2]|0,d<65535.0?d:65535.0,1e3)|0}return}function gj(a){a=a|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;e=KL(a,c[46374]|0,8,0)|0;hj(a);i=a+16|0;g=c[i>>2]|0;j=c[g+256>>2]|0;k=c[g+260>>2]|0;f=+(e|0);e=b[g+236>>1]|0;while(1){if((e|0)>(b[g+238>>1]|0))break;d=c[g+196>>2]|0;do if(c[d+(e<<6)>>2]|0){d=c[c[d+(e<<6)+4>>2]>>2]|0;if(!d){c[m>>2]=ry(a)|0;c[m+4>>2]=e;Pw(1,86834,m)|0;break}else{$i(j,d,+h[(c[d+16>>2]|0)+88>>3]+f+ +h[g+96>>3],0)|0;g=c[i>>2]|0;d=c[g+196>>2]|0;d=c[(c[d+(e<<6)+4>>2]|0)+((c[d+(e<<6)>>2]|0)+-1<<2)>>2]|0;$i(d,k,+h[(c[d+16>>2]|0)+96>>3]+f+ +h[g+64>>3],0)|0;break}}while(0);e=e+1|0;g=c[i>>2]|0}l=n;return}function hj(b){b=b|0;var d=0,e=0,f=0;d=b+16|0;if(!(c[(c[d>>2]|0)+256>>2]|0)){f=uh(ig(b)|0)|0;a[(c[f+16>>2]|0)+156>>0]=2;e=uh(ig(b)|0)|0;a[(c[e+16>>2]|0)+156>>0]=2;if((c[(c[d>>2]|0)+12>>2]|0?(ig(b)|0)!=(b|0):0)?(c[(c[(fz(b)|0)+16>>2]|0)+116>>2]&1|0)==0:0){b=c[d>>2]|0;$i(f,e,+(~~+h[b+48+((+h[b+48>>3]>+h[b+80>>3]?0:2)<<4)>>3]|0),0)|0}d=c[d>>2]|0;c[d+256>>2]=f;c[d+260>>2]=e}return}function ij(a){a=a|0;var b=0,d=0;do if((ig(a)|0)!=(a|0)){gj(a);a=a+16|0;b=c[a>>2]|0;b=fh(c[b+256>>2]|0,c[b+260>>2]|0)|0;if(!b){d=c[a>>2]|0;$i(c[d+256>>2]|0,c[d+260>>2]|0,1.0,128)|0;break}else{d=(c[b+16>>2]|0)+156|0;c[d>>2]=(c[d>>2]|0)+128;break}}else a=a+16|0;while(0);b=1;while(1){d=c[a>>2]|0;if((b|0)>(c[d+180>>2]|0))break;ij(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function jj(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;k=KL(d,c[46374]|0,8,0)|0;o=d+16|0;e=c[o>>2]|0;m=+(k|0);k=b[e+236>>1]|0;while(1){if((k|0)>(b[e+238>>1]|0)){f=1;break}e=c[e+196>>2]|0;a:do if(c[e+(k<<6)>>2]|0?(l=c[c[e+(k<<6)+4>>2]>>2]|0,l|0):0){i=l+16|0;f=c[(c[i>>2]|0)+236>>2]|0;while(1){if((f|0)<=0)break;f=f+-1|0;j=c[(c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=j+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0)){n=10;break}if(mj(d,j)|0){n=9;break}}if((n|0)==9){e=c[g>>2]|0;n=10}if((n|0)==10){n=0;$i(j,c[(c[o>>2]|0)+256>>2]|0,+h[e+96>>3]+m,0)|0}f=(c[(c[(c[o>>2]|0)+196>>2]|0)+(k<<6)>>2]|0)+(c[(c[i>>2]|0)+236>>2]|0)|0;while(1){if((f|0)>=(c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)>>2]|0))break a;i=c[(c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=i+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0))break;if(!(mj(d,i)|0))f=f+1|0;else{n=15;break}}if((n|0)==15){n=0;e=c[g>>2]|0}$i(c[(c[o>>2]|0)+260>>2]|0,i,+h[e+88>>3]+m,0)|0}while(0);k=k+1|0;e=c[o>>2]|0}while(1){if((f|0)>(c[e+180>>2]|0))break;jj(c[(c[e+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0;e=c[o>>2]|0}return}function kj(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0;e=KL(a,c[46374]|0,8,0)|0;hj(a);b=a+16|0;d=+(e|0);a=1;while(1){e=c[b>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;hj(e);f=c[b>>2]|0;g=e+16|0;$i(c[f+256>>2]|0,c[(c[g>>2]|0)+256>>2]|0,+h[f+96>>3]+d,0)|0;f=c[b>>2]|0;$i(c[(c[g>>2]|0)+260>>2]|0,c[f+260>>2]|0,+h[f+64>>3]+d,0)|0;kj(e);a=a+1|0}return}function lj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;d=KL(a,c[46374]|0,8,0)|0;n=a+16|0;a=1;while(1){f=c[n>>2]|0;e=c[f+180>>2]|0;if((a|0)>(e|0))break;hj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}m=+(d|0);l=1;a=e;d=f;while(1){if((l|0)>(a|0))break;k=l+1|0;j=k;while(1){e=c[d+184>>2]|0;f=c[e+(l<<2)>>2]|0;if((j|0)>(a|0))break;e=c[e+(j<<2)>>2]|0;g=(b[(c[f+16>>2]|0)+236>>1]|0)>(b[(c[e+16>>2]|0)+236>>1]|0);i=g?e:f;e=g?f:e;f=c[i+16>>2]|0;g=c[e+16>>2]|0;o=b[g+236>>1]|0;h=o<<16>>16;if((b[f+238>>1]|0)>=o<<16>>16){a=(c[(c[(c[c[(c[f+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[c[(c[g+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0);$i(c[(c[(a?i:e)+16>>2]|0)+260>>2]|0,c[(c[(a?e:i)+16>>2]|0)+256>>2]|0,m,0)|0;a=c[n>>2]|0;d=a;a=c[a+180>>2]|0}j=j+1|0}lj(f);d=c[n>>2]|0;l=k;a=c[d+180>>2]|0}return}function mj(b,d){b=b|0;d=d|0;var e=0;d=c[d+16>>2]|0;if((a[d+156>>0]|0)==1){d=c[c[d+256>>2]>>2]|0;while(1){e=c[(c[d+16>>2]|0)+116>>2]|0;if(!e)break;else d=e}if(!(oz(b,c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0))d=(oz(b,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0)==0&1;else d=0}else d=0;return d|0}function nj(a,b){a=a|0;b=b|0;return oj(a,b)|0}function oj(a,b){a=a|0;b=b|0;var d=0,e=0;a:do if((a|0)==(b|0))a=1;else{d=c[(c[a+16>>2]|0)+180>>2]|0;a=0;while(1){e=c[d+(a<<2)>>2]|0;if(!e){a=0;break a}if(!(oj(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,b)|0))a=a+1|0;else{a=1;break}}}while(0);return a|0}function pj(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;h=c[d+196>>2]|0;g=c[h+(j<<6)>>2]|0;h=h+(j<<6)+4|0;i=0;f=0;while(1){if((f|0)>=(g|0))break;e=c[(c[(c[h>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;c[e+236>>2]=i;if((a[e+159>>0]|0)==6)e=c[e+216>>2]|0;else e=1;i=e+i|0;f=f+1|0}if((i|0)>(g|0)){d=c[h>>2]|0;if(!d)d=vH((i<<2)+4|0)|0;else d=xH(d,(i<<2)+4|0)|0;f=c[(c[k>>2]|0)+196>>2]|0;c[f+(j<<6)+4>>2]=d;e=c[f+(j<<6)>>2]|0;while(1){d=e+-1|0;if((e|0)<=0)break;h=c[f+(j<<6)+4>>2]|0;e=c[h+(d<<2)>>2]|0;c[h+(c[(c[e+16>>2]|0)+236>>2]<<2)>>2]=e;e=d;f=c[(c[k>>2]|0)+196>>2]|0}c[f+(j<<6)>>2]=i;c[(c[f+(j<<6)+4>>2]|0)+(i<<2)>>2]=0;d=c[k>>2]|0}j=j+1|0}return}function qj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+48|0;n=o+32|0;m=o+8|0;d=o+24|0;k=o+16|0;j=o;e=b+16|0;f=c[e>>2]|0;a:do if((c[f+216>>2]|0)>=2){c[m>>2]=~~(+h[f+16>>3]-+h[f+88>>3]);c[m+4>>2]=~~+h[f+24>>3];c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];rj(d,b,n);g=d;i=c[g+4>>2]|0;d=m;c[d>>2]=c[g>>2];c[d+4>>2]=i;d=c[e>>2]|0;if((c[d+184>>2]|0)>0){j=c[c[d+180>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;j=Hx(a,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0;while(1){if(!j)break a;i=(c[j>>2]&3|0)==2?j:j+-48|0;e=i+48|0;f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;if((f|0)!=(b|0)?(SL(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];sj(k,a,f,n,d);f=k;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;zh(i);g=i+-48|0;e=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;f=c[e+172>>2]|0;if(!f)e=vH((c[e+176>>2]<<2)+8|0)|0;else e=xH(f,(c[e+176>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0)+172>>2]=e;p=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;e=c[p+172>>2]|0;p=p+176|0;f=c[p>>2]|0;c[p>>2]=f+1;c[e+(f<<2)>>2]=i;i=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0;d=d+1|0}j=Ix(a,j)|0}}else{i=c[c[d+172>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;i=Ex(a,c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)|0;while(1){if(!i)break a;e=i+-48|0;f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;if((f|0)!=(b|0)?(SL(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];sj(j,a,f,n,d);f=j;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;zh(i);g=i+48|0;e=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;f=c[e+180>>2]|0;if(!f)e=vH((c[e+184>>2]<<2)+8|0)|0;else e=xH(f,(c[e+184>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0)+180>>2]=e;f=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;k=c[f+180>>2]|0;f=f+184|0;p=c[f>>2]|0;c[f>>2]=p+1;c[k+(p<<2)>>2]=i;p=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;c[(c[p+180>>2]|0)+(c[p+184>>2]<<2)>>2]=0;d=d+1|0}i=Gx(a,i)|0}}}while(0);l=o;return}function rj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;bN(b,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1);e=c[b+16>>2]|0;h[e+24>>3]=+(c[d+4>>2]|0);f=+h[e+88>>3]+ +(c[d>>2]|0);h[e+16>>3]=f;f=f+ +h[e+96>>3];c[d>>2]=~~(f+ +(c[(c[(ez(b)|0)+16>>2]|0)+248>>2]|0));e=d;b=c[e+4>>2]|0;d=a;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function sj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;b=ig(b)|0;g=SL(d)|0;if((g|0)!=(d|0))rh(g,d);j=c[d+16>>2]|0;c[j+236>>2]=f;g=c[(c[g+16>>2]|0)+232>>2]|0;c[j+232>>2]=g;c[(c[(c[(c[b+16>>2]|0)+196>>2]|0)+(g<<6)+4>>2]|0)+(f<<2)>>2]=d;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];rj(a,d,h);l=i;return}function tj(a){a=a|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0.0;m=c[(c[(ig(a)|0)+16>>2]|0)+196>>2]|0;if((ig(a)|0)==(a|0))j=8.0;else j=+(KL(a,c[46374]|0,8,0)|0);l=a+16|0;g=c[l>>2]|0;f=0;k=1;e=+h[g+120>>3];d=+h[g+128>>3];while(1){if((k|0)>(c[g+180>>2]|0))break;i=c[(c[g+184>>2]|0)+(k<<2)>>2]|0;f=tj(i)|0|f;i=c[i+16>>2]|0;g=c[l>>2]|0;if((b[i+238>>1]|0)==(b[g+238>>1]|0)){n=+h[i+120>>3]+j;e=e>n?e:n}if((b[i+236>>1]|0)==(b[g+236>>1]|0)){n=+h[i+128>>3]+j;d=d>n?d:n}k=k+1|0}if((ig(a)|0)!=(a|0)?(c[(c[l>>2]|0)+12>>2]|0)!=0:0)if(!(c[(c[(fz(a)|0)+16>>2]|0)+116>>2]&1)){k=c[l>>2]|0;f=1;e=+h[k+56>>3]+e;d=+h[k+88>>3]+d}else f=1;k=c[l>>2]|0;h[k+120>>3]=e;h[k+128>>3]=d;if((ig(a)|0)!=(a|0)){l=c[l>>2]|0;a=m+(b[l+236>>1]<<6)+24|0;n=+h[a>>3];h[a>>3]=n>d?n:d;m=m+(b[l+238>>1]<<6)+16|0;n=+h[m>>3];h[m>>3]=n>e?n:e}return f|0}function uj(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;o=c[(c[(ig(a)|0)+16>>2]|0)+196>>2]|0;if((ig(a)|0)==(a|0))e=0;else e=KL(a,c[46374]|0,8,0)|0;l=a+16|0;i=c[l>>2]|0;m=e+d|0;k=+(e|0);j=1;f=+h[i+128>>3];g=+h[i+120>>3];e=i;while(1){if((j|0)>(c[e+180>>2]|0))break;i=c[(c[e+184>>2]|0)+(j<<2)>>2]|0;uj(i,m);i=c[i+16>>2]|0;e=c[l>>2]|0;if((b[i+238>>1]|0)==(b[e+238>>1]|0)){q=+h[i+120>>3]+k;g=g>q?g:q}if((b[i+236>>1]|0)==(b[e+236>>1]|0)){q=+h[i+128>>3]+k;f=f>q?f:q}j=j+1|0}h[e+120>>3]=g;h[e+128>>3]=f;if(((ig(a)|0)!=(a|0)?(n=c[l>>2]|0,c[n+12>>2]|0):0)?(p=-g-f+ +h[n+48+((+h[n+104>>3]>+h[n+72>>3]?3:1)<<4)+8>>3]-+h[(c[(c[c[o+(b[n+236>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +h[(c[(c[c[o+(b[n+238>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3],p>0.0):0)vj(a,~~p,d);if((ig(a)|0)!=(a|0)){n=c[l>>2]|0;m=o+(b[n+236>>1]<<6)+24|0;q=+h[m>>3];p=+h[n+128>>3];h[m>>3]=q>p?q:p;o=o+(b[n+238>>1]<<6)+16|0;p=+h[o>>3];q=+h[n+120>>3];h[o>>3]=p>q?p:q}return}function vj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0;k=c[(ig(a)|0)+16>>2]|0;q=c[k+196>>2]|0;p=c[a+16>>2]|0;a=b[p+238>>1]|0;f=b[p+236>>1]|0;l=(d+1|0)/2|0;m=p+120|0;n=+h[m>>3];o=+(l|0);i=+(e|0);e=~~(o+i+n-+h[q+(a<<6)+16>>3]);if((e|0)>0){g=+(e|0);while(1){if((a|0)<(f|0))break;if((c[q+(a<<6)>>2]|0)>0){r=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[r>>3]=+h[r>>3]+g}a=a+-1|0}j=+h[p+128>>3];a=e;g=j+ +(d-l|0)}else{j=+h[p+128>>3];a=d-l|0;g=j}a=~~(+(a|0)+i+g-+h[q+(f<<6)+24>>3]);a:do if((a|0)>0){e=b[k+236>>1]|0;g=+(a|0);while(1){a=f+-1|0;if((f|0)<=(e|0))break a;if((c[q+(a<<6)>>2]|0)<=0){f=a;continue}f=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[f>>3]=+h[f>>3]+g;f=a}}while(0);h[p+128>>3]=j+ +(d-l|0);h[m>>3]=n+o;return}function wj(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+16>>2]|0;f=a[e+84>>0]|0;b=c[d+16>>2]|0;do if(f<<24>>24==(a[b+84>>0]|0)){if(+h[e+56>>3]==+h[b+56>>3]){if(!(f<<24>>24==0?1:+h[e+64>>3]==+h[b+64>>3])){b=0;break}}else if(f<<24>>24){b=0;break}if(+h[e+16>>3]==+h[b+16>>3]?+h[e+24>>3]==+h[b+24>>3]:0){b=1;break}b=(a[e+44>>0]|0)==0&1}else b=0;while(0);return b|0}function xj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;b[d+236>>1]=32767;b[d+238>>1]=-1;d=0;h=Sy(a)|0;while(1){e=c[i>>2]|0;if(!h)break;f=e+238|0;g=c[(c[h+16>>2]|0)+232>>2]|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;e=e+236|0;if((g|0)<(b[e>>1]|0))b[e>>1]=g;if(!d)d=h;else d=(g|0)<(c[(c[d+16>>2]|0)+232>>2]|0)?h:d;h=Ty(a,h)|0}c[e+264>>2]=d;return}function yj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;b=xx(a,86879)|0;if(!b)b=2147483647;else{g=+b2(b);b=~~(g*+(ay(a)|0))}e=a+16|0;d=0;while(1){f=c[e>>2]|0;if((d|0)>=(c[f+220>>2]|0))break;c[f+192>>2]=c[(c[f+216>>2]|0)+(d<<2)>>2];fI(a,(c[f+180>>2]|0)==0&1,b)|0;d=d+1|0}return}function zj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;if(!(xx(a,86888)|0))Bj(a,d);else{g=(c[a+16>>2]|0)+136|0;b[g>>1]=b[g>>1]|16;Aj(a,d)}if(0){g=c[15686]|0;a=c[a+16>>2]|0;d=b[a+236>>1]|0;c[e>>2]=b[a+238>>1];c[e+4>>2]=d;g1(g,86896,e)|0}l=f;return}function Aj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;h=i;c[45977]=0;a[h>>0]=a[18484]|0;a[h+1>>0]=a[18485]|0;a[h+2>>0]=a[18486]|0;a[h+3>>0]=a[18487]|0;h=Xx(87106,h,0)|0;Az(h,87135,280,1)|0;mz(h,17404,17344);Cj(b);e=xx(b,86879)|0;if(!e)f=2147483647;else{j=+b2(e);f=~~(j*+(ay(b)|0))}Sj(b,0);Tj(b,h);Uj(b,h);Vj(b,h,0,0);Wj(h);g=Xj(h)|0;Yj(h);if(d|0){Mk(h);Ak(h)}e=xx(b,99560)|0;if(!e)e=-1;else e=a2(e)|0;yH(h,1,f,e)|0;Zj(b,h,g);$x(h)|0;l=i;return}function Bj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g;Cj(a);do if(!b){Dj(a,a);Pk(a);Ej(d,a);h=d;d=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=d;Il(a,0);b=0}else{Mk(a);Ak(a);Dj(a,a);Pk(a);Ej(d,a);i=d;d=c[i+4>>2]|0;h=e;c[h>>2]=c[i>>2];c[h+4>>2]=d;Il(a,0);h=c[a+16>>2]|0;if((c[h+220>>2]|0)<=1?(c[h+180>>2]|0)<=0:0)break;c[b+32>>2]=1;b=0}while(0);xk(a);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];if(Fj(a,f)|0)Il(a,0);if(!b)yj(a);else Bk(a,b);Gj(a,b);Hj(a);l=g;return}function Cj(d){d=d|0;var f=0,g=0,h=0;if(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1){g=Sy(d)|0;while(1){if(!g)break;f=Ex(d,g)|0;while(1){if(!f)break;h=(c[f+16>>2]|0)+170|0;b[h>>1]=(e[h>>1]|0)<<1;f=Gx(d,f)|0}g=Ty(d,g)|0}h=(c[d+16>>2]|0)+252|0;c[h>>2]=((c[h>>2]|0)+1|0)/2|0}return}function Dj(a,b){a=a|0;b=b|0;var d=0;b=wA(b)|0;while(1){if(!b)break;d=Pj(b)|0;do if(d)if((d|0)==7&(c[46364]|0)==100){Lj(a,b);break}else{Qj(a,b,d);break}else Dj(a,b);while(0);b=xA(b)|0}return}function Ej(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=d+16|0;e=c[i>>2]|0;d=c[e+228>>2]|0;e=c[e+224>>2]|0;f=(e|0)==0;if(!d)if(f){j=0;k=0}else g=4;else if(f)g=5;else g=4;if((g|0)==4){d=SL(e)|0;e=c[i>>2]|0;c[e+224>>2]=d;d=c[e+228>>2]|0;if(!d){h=0;d=e;g=12}else g=5}do if((g|0)==5){d=SL(d)|0;e=c[i>>2]|0;c[e+228>>2]=d;if(d){e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==5&1;while(1){d=c[c[d+180>>2]>>2]|0;if(!d){g=11;break}h=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((h|0)!=(SL(h)|0)){g=9;break}wk(d);d=c[e>>2]|0}if((g|0)==9)qa(86999,86939,346,87031);else if((g|0)==11){h=f;d=c[i>>2]|0;g=12;break}}else{h=0;d=e;g=12}}while(0);a:do if((g|0)==12){d=c[d+224>>2]|0;if(!d){j=0;k=h}else{e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==3&1;while(1){d=c[c[d+172>>2]>>2]|0;if(!d){j=f;k=h;break a}i=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((i|0)!=(SL(i)|0))break;wk(d);d=c[e>>2]|0}qa(87044,86939,353,87031)}}while(0);c[b>>2]=j;c[b+4>>2]=k;return}function Fj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+16|0;i=c[j>>2]|0;if((c[i+228>>2]|0)==0?(c[i+224>>2]|0)==0:0)d=0;else e=3;a:do if((e|0)==3){g=Sy(a)|0;i=d+4|0;h=c[d>>2]&65535;d=0;while(1){if(!g)break a;if((g|0)==(SL(g)|0)){f=g+16|0;e=c[f>>2]|0;if((c[e+184>>2]|0)==0?(k=c[(c[j>>2]|0)+228>>2]|0,!((k|0)==0|(g|0)==(k|0))):0){d=ph(g,k,0)|0;e=c[d+16>>2]|0;b[e+170>>1]=c[i>>2];c[e+156>>2]=0;e=c[f>>2]|0}if((c[e+176>>2]|0)==0?(l=c[(c[j>>2]|0)+224>>2]|0,!((l|0)==0|(g|0)==(l|0))):0){d=ph(l,g,0)|0;f=c[d+16>>2]|0;b[f+170>>1]=h;c[f+156>>2]=0}}g=Ty(a,g)|0}}while(0);return (d|0)!=0|0}function Gj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;g=Sy(d)|0;k=d+16|0;f=c[k>>2]|0;a:do if(g){b[f+236>>1]=32767;b[f+238>>1]=-1;j=(e|0)==0;while(1){if(!g)break;f=SL(g)|0;i=c[g+16>>2]|0;e=c[i+232>>2]|0;do if((f|0)!=(g|0)){if(!j)if(!e)e=0;else break;e=e+(c[(c[f+16>>2]|0)+232>>2]|0)|0;c[i+232>>2]=e}while(0);f=c[k>>2]|0;h=f+238|0;if((e|0)>(b[h>>1]|0))b[h>>1]=e;f=f+236|0;if((e|0)<(b[f>>1]|0))b[f>>1]=e;switch(a[i+159>>0]|0){case 6:case 0:break;default:UL(g)}g=Ty(d,g)|0}if((ig(d)|0)==(d|0)){if((c[46364]|0)==100)e=1;else{Kj(d);break}while(1){f=c[k>>2]|0;if((e|0)>(c[f+180>>2]|0))break a;Jj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}}}else{b[f+238>>1]=0;b[f+236>>1]=0}while(0);return}function Hj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=b+16|0;e=0;while(1){d=c[j>>2]|0;if((e|0)>=(c[d+220>>2]|0))break;i=c[(c[d+216>>2]|0)+(e<<2)>>2]|0;c[d+192>>2]=i;d=i;while(1){if(!d)break;i=d+16|0;Ij((c[i>>2]|0)+172|0);Ij((c[i>>2]|0)+180|0);i=c[i>>2]|0;a[i+157>>0]=0;d=c[i+164>>2]|0}e=e+1|0}i=Sy(b)|0;while(1){if(!i)break;h=Ex(b,i)|0;while(1){if(!h)break;f=h+16|0;d=c[f>>2]|0;g=c[d+172>>2]|0;if((g|0)!=0?(k=g+16|0,(h|0)==(c[(c[k>>2]|0)+116>>2]|0)):0){d=Sy(b)|0;while(1){if(!d)break;e=Ex(b,d)|0;while(1){if(!e)break;if((h|0)!=(e|0)?(l=(c[e+16>>2]|0)+172|0,m=c[l>>2]|0,(m|0)!=0&(g|0)==(m|0)):0)c[l>>2]=0;e=Gx(b,e)|0}d=Ty(b,d)|0}D_(c[k>>2]|0);D_(g);d=c[f>>2]|0}c[d+172>>2]=0;h=Gx(b,h)|0}i=Ty(b,i)|0}D_(c[(c[j>>2]|0)+216>>2]|0);m=c[j>>2]|0;c[m+216>>2]=0;c[m+220>>2]=0;return}function Ij(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;while(1){if((b|0)<=-1)break;c[(c[a>>2]|0)+(b<<2)>>2]=0;b=b+-1|0}c[d>>2]=0;return}function Jj(a){a=a|0;var d=0,f=0,g=0;d=a+16|0;f=c[d>>2]|0;g=c[(c[(c[f+264>>2]|0)+16>>2]|0)+232>>2]|0;a=f+236|0;b[a>>1]=g+(e[a>>1]|0);a=f+238|0;b[a>>1]=g+(e[a>>1]|0);a=1;while(1){if((a|0)>(c[f+180>>2]|0))break;Jj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0;f=c[d>>2]|0}return}function Kj(b){b=b|0;var d=0;d=wA(ig(b)|0)|0;while(1){if(!d)break;if((a[(c[d+16>>2]|0)+274>>0]|0)==7)Lj(b,d);d=xA(d)|0}return}function Lj(a,b){a=a|0;b=b|0;var d=0;d=(c[b+16>>2]|0)+200|0;do if((c[d>>2]|0)==0?(c[d>>2]=a,Mj(a,b),Sy(b)|0):0){Nj(a,b);if((c[46364]|0)==100){Bj(b,0);Oj(b);break}else{xj(b);break}}while(0);return}function Mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=b+16|0;g=Sy(d)|0;while(1){if(!g)break;i=Ty(d,g)|0;j=g+16|0;if(!(a[(c[j>>2]|0)+159>>0]|0))f=1;else{dz(d,g)|0;g=i;continue}while(1){e=c[h>>2]|0;b=c[e+180>>2]|0;if((f|0)>=(b|0))break;if(oz(c[(c[e+184>>2]|0)+(f<<2)>>2]|0,g)|0){k=7;break}f=f+1|0}if((k|0)==7){k=0;b=c[(c[h>>2]|0)+180>>2]|0}if((f|0)<(b|0))dz(d,g)|0;c[(c[j>>2]|0)+212>>2]=0;g=i}e=Sy(d)|0;while(1){if(!e)break;b=Ex(ig(d)|0,e)|0;while(1){if(!b)break;if(oz(d,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)Vx(d,b,1)|0;b=Gx(ig(d)|0,b)|0}e=Ty(d,e)|0}return}function Nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=uH((a<<2)+8|0)|0;else a=wH(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;fH(b);return}function Oj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[b+16>>2]|0;d=g+192|0;h=0;while(1){d=c[d>>2]|0;if(!d)break;f=c[d+16>>2]|0;if(!(c[f+232>>2]|0))e=(a[f+156>>0]|0)==0?d:h;else e=h;d=f+164|0;h=e}if(!h)qa(86924,86939,238,86946);c[g+264>>2]=h;d=Sy(b)|0;while(1){if(!d){d=13;break}e=d+16|0;if(!((d|0)==(h|0)?1:(c[(c[e>>2]|0)+216>>2]|0)<2)){d=11;break}TL(d,h)|0;a[(c[e>>2]|0)+159>>0]=7;d=Ty(b,d)|0}if((d|0)==11)qa(86961,86939,242,86946);else if((d|0)==13)return}function Pj(b){b=b|0;var d=0;if(!(Rj(b)|0)){d=aM(xx(b,87076)|0,17356,17380)|0;a[(c[b+16>>2]|0)+274>>0]=d;b=d}else b=7;return b|0}function Qj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=Sy(d)|0;a:do if(g|0){j=e&255;i=g+16|0;f=g;h=j;while(1){a[(c[f+16>>2]|0)+159>>0]=h;f=Ty(d,f)|0;if(!f)break;TL(g,f)|0;h=a[(c[i>>2]|0)+159>>0]|0}switch(e|0){case 3:case 2:{b=b+16|0;f=c[b>>2]|0;h=c[f+224>>2]|0;if(h){g=TL(h,g)|0;f=c[b>>2]|0}c[f+224>>2]=g;break}case 5:case 4:{b=b+16|0;f=c[b>>2]|0;h=c[f+228>>2]|0;if(h){g=TL(h,g)|0;f=c[b>>2]|0}c[f+228>>2]=g;break}default:break a}switch(e|0){case 3:{f=f+224|0;break}case 5:{f=f+228|0;break}default:break a}a[(c[(c[f>>2]|0)+16>>2]|0)+159>>0]=j}while(0);return}function Rj(a){a=a|0;return (z$(ry(a)|0,104980,7)|0)==0|0}function Sj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;g=m;if(!(lk(b)|0)){do if(qM(b)|0)if(!d){c[(c[b+16>>2]|0)+204>>2]=0;d=b;break}else{c[(c[b+16>>2]|0)+204>>2]=(c[(c[d+16>>2]|0)+204>>2]|0)+1;mk(b,d);d=b;break}while(0);e=wA(b)|0;while(1){if(!e)break;Sj(e,d);e=xA(e)|0}a:do if(qM(b)|0){e=Sy(b)|0;while(1){if(!e)break a;f=(c[e+16>>2]|0)+212|0;if(!(c[f>>2]|0))c[f>>2]=b;e=Ty(b,e)|0}}while(0);switch(nk(b)|0){case 3:{d=d+16|0;a[(c[d>>2]|0)+241>>0]=1;k=19;break}case 2:{d=d+16|0;k=19;break}case 5:{d=d+16|0;a[(c[d>>2]|0)+242>>0]=1;k=21;break}case 4:{d=d+16|0;k=21;break}case 1:{ok(b)|0;break}case 6:break;default:{e=ry(b)|0;f=xx(b,87076)|0;c[g>>2]=e;c[g+4>>2]=f;Pw(0,87259,g)|0}}if((k|0)==19){k=ok(b)|0;k=pk(k,c[(c[d>>2]|0)+208>>2]|0)|0;c[(c[d>>2]|0)+208>>2]=k}else if((k|0)==21){k=ok(b)|0;k=pk(k,c[(c[d>>2]|0)+212>>2]|0)|0;c[(c[d>>2]|0)+212>>2]=k}if((qM(b)|0?(h=b+16|0,i=c[h>>2]|0,j=c[i+208>>2]|0,j|0):0)?(j|0)==(c[i+212>>2]|0):0){j=ok(b)|0;k=c[h>>2]|0;c[k+208>>2]=j;c[k+212>>2]=j}}l=m;return}function Tj(a,b){a=a|0;b=b|0;var d=0,e=0;c[45977]=0;d=Sy(a)|0;while(1){if(!d)break;if((_j(d)|0)==(d|0)){e=bk(b,ry(d)|0)|0;c[(c[d+16>>2]|0)+148>>2]=e}d=Ty(a,d)|0}d=Sy(a)|0;while(1){if(!d)break;b=d+16|0;if(!(c[(c[b>>2]|0)+148>>2]|0)){e=c[(c[(_j(d)|0)+16>>2]|0)+148>>2]|0;c[(c[b>>2]|0)+148>>2]=e}d=Ty(a,d)|0}return}function Uj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=Sy(a)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+148>>2]|0;i=Ex(a,h)|0;while(1){if(!i)break;do if((gk(i)|0)==0?(j=i+-48|0,k=c[(c[(_j(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)|0)+16>>2]|0)+148>>2]|0,(d|0)!=(k|0)):0){f=c[i>>2]&3;g=i+48|0;e=((f|0)==3?i:g)+40|0;f=c[(c[(c[((f|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0;if(!(hk(i)|0)){if((fk(c[(c[(c[e>>2]|0)+16>>2]|0)+212>>2]|0)|0)==0?(fk(f)|0)==0:0){ik(b,d,k,i);break}jk(b,d,k,i);break}else{f=_j(c[e>>2]|0)|0;e=c[i>>2]&3;if((f|0)!=(c[(c[(c[(c[(c[((e|0)==3?i:g)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+212>>2]|0)?(g=_j(c[((e|0)==2?i:j)+40>>2]|0)|0,(g|0)!=(c[(c[(c[(c[(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+208>>2]|0)):0)e=k;else{e=d;d=k}ik(b,d,e,i);break}}while(0);i=Gx(a,i)|0}h=Ty(a,h)|0}return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((qM(a)|0)!=0?(fk(a)|0)!=0:0){g=Sy(a)|0;while(1){if(!g)break;if(!(Hx(a,g)|0)){f=c[(c[(_j(g)|0)+16>>2]|0)+148>>2]|0;if(!d)d=bk(b,87157)|0;Rx(b,d,f,0,1)|0}if(!(Ex(a,g)|0)){f=c[(c[(_j(g)|0)+16>>2]|0)+148>>2]|0;if(!e)e=bk(b,87162)|0;Rx(b,f,e,0,1)|0}g=Ty(a,g)|0}if((e|0)!=0&(d|0)!=0){ek(Rx(b,d,e,0,1)|0,0,1e3);f=d}else f=d}else f=d;d=wA(a)|0;while(1){if(!d)break;Vj(d,b,f,e);d=xA(d)|0}return}function Wj(b){b=b|0;var d=0,e=0;d=Sy(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;a[e+158>>0]=0;a[e+157>>0]=0;d=Ty(b,d)|0}d=Sy(b)|0;while(1){if(!d)break;ck(b,d);d=Ty(b,d)|0}return}function Xj(a){a=a|0;var b=0,d=0,e=0,f=0;b=Sy(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+128>>2]=0;b=Ty(a,b)|0}b=0;e=Sy(a)|0;while(1){if(!e)break;d=b+1|0;if(!(c[(c[e+16>>2]|0)+128>>2]|0)){ak(a,e,d);b=d}e=Ty(a,e)|0}a:do if((b|0)>1){f=bk(a,87151)|0;d=1;e=Sy(a)|0;while(1){if(!e)break a;if((c[(c[e+16>>2]|0)+128>>2]|0)==(d|0)){Rx(a,f,e,0,1)|0;d=d+1|0}e=Ty(a,e)|0}}while(0);return b|0}function Yj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=Sy(a)|0;while(1){if(!g)break;h=g+16|0;f=Ex(a,g)|0;while(1){if(!f)break;b=c[h>>2]|0;d=c[b+180>>2]|0;if(!d)b=vH((c[b+184>>2]<<2)+8|0)|0;else b=xH(d,(c[b+184>>2]<<2)+8|0)|0;d=c[h>>2]|0;c[d+180>>2]=b;d=d+184|0;e=c[d>>2]|0;c[d>>2]=e+1;c[b+(e<<2)>>2]=f;e=c[h>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=f+-48|0;b=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=vH((c[b+176>>2]<<2)+8|0)|0;else b=xH(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;i=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;b=c[i+172>>2]|0;i=i+176|0;d=c[i>>2]|0;c[i>>2]=d+1;c[b+(d<<2)>>2]=f;e=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;c[(c[e+172>>2]|0)+(c[e+176>>2]<<2)>>2]=0;f=Gx(a,f)|0}g=Ty(a,g)|0}return}function Zj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=a+16|0;o=c[n>>2]|0;b[o+236>>1]=32767;b[o+238>>1]=-1;a:do if((f|0)>1){h=uH((f<<2)+4|0)|0;g=f+1|0;f=1;while(1){if((f|0)==(g|0)){m=h;o=h;break a}c[h+(f<<2)>>2]=32767;f=f+1|0}}else{m=0;o=0}while(0);i=(m|0)==0;h=Sy(a)|0;while(1){if(!h)break;j=c[(c[(c[(_j(h)|0)+16>>2]|0)+148>>2]|0)+16>>2]|0;k=c[j+232>>2]|0;l=c[h+16>>2]|0;c[l+232>>2]=k;f=c[n>>2]|0;g=f+238|0;if((k|0)>(b[g>>1]|0))b[g>>1]=k;f=f+236|0;if((k|0)<(b[f>>1]|0))b[f>>1]=k;if(!i){j=c[j+128>>2]|0;c[l+128>>2]=j;l=m+(j<<2)|0;j=c[l>>2]|0;c[l>>2]=(j|0)<(k|0)?j:k}h=Ty(a,h)|0}j=(m|0)!=0;b:do if(!j){m=b[(c[n>>2]|0)+236>>1]|0;g=m<<16>>16;if(m<<16>>16>0){f=Sy(a)|0;while(1){if(!f)break;m=(c[f+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-g;f=Ty(a,f)|0}f=c[n>>2]|0;n=f+236|0;b[n>>1]=(e[n>>1]|0)-g;f=f+238|0;b[f>>1]=(e[f>>1]|0)-g;f=0}else f=0}else{f=Sy(a)|0;while(1){if(!f){f=1;break b}l=c[f+16>>2]|0;n=l+232|0;c[n>>2]=(c[n>>2]|0)-(c[m+(c[l+128>>2]<<2)>>2]|0);f=Ty(a,f)|0}}while(0);$j(a,f);i=Sy(d)|0;while(1){if(!i)break;g=i+16|0;f=c[g>>2]|0;h=c[f+172>>2]|0;if(h){D_(h);f=c[g>>2]|0}f=c[f+180>>2]|0;if(f|0)D_(f);i=Ty(d,i)|0}D_(c[(c[(Sy(a)|0)+16>>2]|0)+112>>2]|0);f=Sy(a)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+112>>2]=0;f=Ty(a,f)|0}if(j)D_(o);return}function _j(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;d=(c[b>>2]|0)+152|0;e=c[d>>2]|0;if(e){if((e|0)!=(a|0)){e=_j(e)|0;c[(c[b>>2]|0)+152>>2]=e;return e|0}}else c[d>>2]=a;return a|0}function $j(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=a+16|0;e=1;while(1){f=c[i>>2]|0;if((e|0)>(c[f+180>>2]|0))break;$j(c[(c[f+184>>2]|0)+(e<<2)>>2]|0,0);e=e+1|0}if((d|0)!=0|(c[f+200>>2]|0)!=0){b[f+236>>1]=32767;b[f+238>>1]=-1;e=0;h=Sy(a)|0;while(1){if(!h)break;g=c[(c[h+16>>2]|0)+232>>2]|0;d=c[i>>2]|0;f=d+238|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;d=d+236|0;if((g|0)<(b[d>>1]|0)){b[d>>1]=g;e=h}h=Ty(a,h)|0}c[(c[i>>2]|0)+264>>2]=e}return}function ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+16>>2]|0)+128|0;a:do if(!(c[e>>2]|0)){c[e>>2]=d;e=Ex(a,b)|0;while(1){if(!e)break;ak(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,d);e=Gx(a,e)|0}e=Hx(a,b)|0;while(1){if(!e)break a;ak(a,c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,d);e=Ix(a,e)|0}}while(0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=az(a,b,1)|0;b=f+16|0;c[(c[b>>2]|0)+176>>2]=0;e=uH(20)|0;d=c[b>>2]|0;c[d+172>>2]=e;c[d+184>>2]=0;d=uH(20)|0;b=c[b>>2]|0;c[b+180>>2]=d;d=c[45977]|0;e=b+168|0;if(!d){c[e>>2]=0;c[(c[a+16>>2]|0)+192>>2]=f}else{c[e>>2]=d;c[(c[d+16>>2]|0)+164>>2]=f}c[45977]=f;c[b+164>>2]=0;return f|0}function ck(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=d+16|0;e=c[h>>2]|0;f=e+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;a[e+158>>0]=1;d=Ex(b,d)|0;while(1){if(!d)break;e=Gx(b,d)|0;f=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;g=c[f+16>>2]|0;if(a[g+158>>0]|0){dk(b,d);d=e;continue}if(a[g+157>>0]|0){d=e;continue}ck(b,f);d=e}a[(c[h>>2]|0)+158>>0]=0}return}function dk(a,b){a=a|0;b=b|0;var d=0,f=0,g=0;d=c[b>>2]&3;g=b+-48|0;f=b+48|0;d=Rx(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,0)|0;if(!d){d=c[b>>2]&3;d=Rx(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,1)|0}g=c[b+16>>2]|0;ek(d,e[g+170>>1]|0,c[g+156>>2]|0);dz(a,b)|0;return}function ek(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0;a=c[a+16>>2]|0;g=a+170|0;h=e[g>>1]|0;b[g>>1]=(h|0)>(d|0)?h:d;d=a+156|0;c[d>>2]=(c[d>>2]|0)+f;return}function fk(a){a=a|0;return (RL(xx(a,87167)|0,0)|0)&255|0}function gk(b){b=b|0;var d=0,e=0;d=c[46419]|0;if((((d|0)!=0?(e=yx(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(QL(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function hk(a){a=a|0;var b=0,d=0;d=c[a>>2]&3;b=c[(c[(c[((d|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;a=c[(c[(c[((d|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;if((b|0)==(a|0))return 1;else{d=kk(b,a)|0;return ((d|0)==(b|0)|(d|0)==(a|0))&1|0}return 0}function ik(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;h=j;g=Rx(a,b,d,0,0)|0;if(!g){g=Rx(a,d,b,0,0)|0;if(!g){g=Rx(a,b,d,0,1)|0;if(!g){b=ry(b)|0;f=ry(d)|0;c[h>>2]=b;c[h+4>>2]=f;Pw(1,87184,h)|0}else i=4}else i=4}else i=4;if((i|0)==4){i=c[f+16>>2]|0;ek(g,e[i+170>>1]|0,c[i+156>>2]|0)}l=j;return}function jk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+112|0;j=m;i=m+4|0;h=Hx(a,d)|0;while(1){if(!h){k=6;break}n=Ex(a,c[((c[h>>2]&3|0)==3?h:h+48|0)+40>>2]|0)|0;if(n|0?(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)==(f|0):0)break;h=Ix(a,h)|0}if((k|0)==6){n=c[45978]|0;c[45978]=n+1;c[j>>2]=n;Y0(i,87175,j)|0;i=bk(a,i)|0;n=Rx(a,i,d,0,1)|0;i=Rx(a,i,f,0,1)|0;f=c[g+16>>2]|0;k=f+156|0;n=(c[n+16>>2]|0)+156|0;c[n>>2]=(c[n>>2]|0)+((c[k>>2]|0)*1e3|0);n=c[i+16>>2]|0;j=n+170|0;b[j>>1]=b[(c[((e[j>>1]|0)>(e[f+170>>1]|0)?i:g)+16>>2]|0)+170>>1]|0;n=n+156|0;c[n>>2]=(c[n>>2]|0)+(c[k>>2]|0)}l=m;return}function kk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:while(1){e=a+16|0;while(1){if((a|0)==(b|0))break a;f=c[e>>2]|0;d=c[b+16>>2]|0;if((c[f+204>>2]|0)>=(c[d+204>>2]|0))break;b=c[d+200>>2]|0}a=c[f+200>>2]|0}return a|0}function lk(a){a=a|0;return (Sy(a)|0)==0|0}function mk(a,b){a=a|0;b=b|0;c[(c[a+16>>2]|0)+200>>2]=b;Nj(b,a);Mj(b,a);return}function nk(b){b=b|0;var c=0;b=xx(b,87076)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)if(b$(b,87086)|0)if(b$(b,87090)|0)if(b$(b,87097)|0)if(b$(b,87101)|0)if(!(b$(b,87081)|0))b=1;else c=8;else b=5;else b=4;else b=3;else b=2;else c=8;if((c|0)==8)b=6;return b|0}function ok(a){a=a|0;var b=0,c=0;c=Sy(a)|0;a:do if(!c)b=0;else{b=_j(c)|0;while(1){c=Ty(a,c)|0;if(!c)break a;pk(b,c)|0}}while(0);return b|0}function pk(a,b){a=a|0;b=b|0;if(b){a=_j(a)|0;c[(c[(_j(b)|0)+16>>2]|0)+152>>2]=a}return a|0}function qk(a,b,d){a=a|0;b=b|0;d=d|0;Az(b,87135,c[d>>2]|0,1)|0;return}function rk(a,b,d){a=a|0;b=b|0;d=d|0;Az(b,87302,c[d+4>>2]|0,1)|0;return}function sk(a,b,d){a=a|0;b=b|0;d=d|0;Az(b,87287,c[d+8>>2]|0,1)|0;return}function tk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+240|0;m=p+120|0;n=p;c[46423]=nx(b,2,87317,0)|0;k=nx(b,2,87326,0)|0;c[46424]=k;a:do if((k|0)!=0|(c[46423]|0)!=0){k=Sy(b)|0;while(1){if(!k)break a;j=0;d=0;i=Jx(b,k)|0;while(1){if(!i){f=0;break}e=c[i>>2]|0;g=e&3;f=c[((g|0)==2?i:i+-48|0)+40>>2]|0;h=i+48|0;b:do if((f|0)!=(c[((g|0)==3?i:h)+40>>2]|0)){g=c[46423]|0;do if((f|0)==(k|0)&(g|0)!=0){f=yx(i,g)|0;if(!(a[f>>0]|0)){e=c[i>>2]|0;break}else{e=j;d=uk(m,d,k,i,f)|0;break b}}while(0);f=c[46424]|0;if((f|0?(c[((e&3|0)==3?i:h)+40>>2]|0)==(k|0):0)?(o=yx(i,f)|0,(a[o>>0]|0)!=0):0)e=uk(n,j,k,i,o)|0;else e=j}else e=j;while(0);j=e;i=Kx(b,i,k)|0}while(1){if((f|0)>=(d|0)){e=0;break}e=m+(f*24|0)+4|0;if((c[m+(f*24|0)+8>>2]|0)>1)vk(k,e);e=c[e>>2]|0;if(e|0)D_(e);f=f+1|0}while(1){if((e|0)>=(j|0))break;d=n+(e*24|0)+4|0;if((c[n+(e*24|0)+8>>2]|0)>1)vk(k,d);d=c[d>>2]|0;if(d|0)D_(d);e=e+1|0}k=Ty(b,k)|0}}while(0);l=p;return}function uk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;k=p;m=p+12|0;n=p+8|0;o=0;while(1){if((o|0)>=(d|0)){j=10;break}j=c[b+(o*24|0)>>2]|0;if((a[j>>0]|0)==(a[g>>0]|0)?(b$(j,g)|0)==0:0){j=5;break}o=o+1|0}do if((j|0)==5){k=b+(o*24|0)+4|0;j=c[k>>2]|0;if(!j){j=b+(o*24|0)+8|0;g=j;j=vH((c[j>>2]<<2)+8|0)|0}else{q=b+(o*24|0)+8|0;g=q;j=xH(j,(c[q>>2]<<2)+8|0)|0}c[k>>2]=j;r=c[g>>2]|0;q=r+1|0;c[g>>2]=q;c[j+(r<<2)>>2]=f;c[(c[k>>2]|0)+(q<<2)>>2]=0;j=13}else if((j|0)==10)if((d|0)>4){r=ry(e)|0;c[k>>2]=5;c[k+4>>2]=r;Pw(1,87335,k)|0;break}else{s=b+(o*24|0)+8|0;c[s>>2]=0;k=uH(8)|0;r=b+(o*24|0)+4|0;c[r>>2]=k;q=c[s>>2]|0;j=q+1|0;c[s>>2]=j;c[k+(q<<2)>>2]=f;c[(c[r>>2]|0)+(j<<2)>>2]=0;c[b+(o*24|0)>>2]=g;c[b+(o*24|0)+12>>2]=0;h[b+(o*24|0)+16>>3]=0.0;d=d+1|0;j=13;break}while(0);if((j|0)==13){sE(f,m,n);j=(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)==(e|0)?c[n>>2]|0:c[m>>2]|0;if(j){r=b+(o*24|0)+12|0;s=c[r>>2]|0;c[r>>2]=s+1;if(!s)i=+wE(f,j);else i=0.0;h[b+(o*24|0)+16>>3]=i}}l=p;return d|0}function vk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+80|0;t=x+68|0;u=x+64|0;r=x;v=d+4|0;n=c[v>>2]|0;w=b+16|0;i=0;p=0.0;q=0.0;while(1){if((i|0)>=(n|0))break;f=c[(c[d>>2]|0)+(i<<2)>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;g=c[e+16>>2]|0;s=c[w>>2]|0;k=+h[g+16>>3]-+h[s+16>>3];m=+h[g+24>>3]-+h[s+24>>3];o=+u$(k,m);i=i+1|0;p=k/o+p;q=m/o+q}j=+u$(p,q);s=c[w>>2]|0;k=+h[s+16>>3];m=+h[s+24>>3];y=+h[s+96>>3]+ +h[s+88>>3];o=+h[s+80>>3];s=y>o+ +(c[(c[(ez(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0;if(s)o=+h[e+96>>3]+ +h[e+88>>3];else{o=+h[e+80>>3];o=o+ +(c[(c[(ez(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0}y=+h[e+16>>3]+o*(p/j);j=+h[e+24>>3]+o*(q/j);h[r>>3]=k;n=r+8|0;h[n>>3]=m;h[r+16>>3]=(y+k*2.0)*.3333333333333333;h[r+24>>3]=(j+m*2.0)*.3333333333333333;h[r+32>>3]=(y*2.0+k)*.3333333333333333;h[r+40>>3]=(j*2.0+m)*.3333333333333333;h[r+48>>3]=y;h[r+56>>3]=j;NK(b,r);s=c[w>>2]|0;j=+h[r>>3]-+h[s+16>>3];k=+h[n>>3]-+h[s+24>>3];j=+(~~(j+(j>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);y=+h[s+88>>3];s=~~((y+j)*256.0/(+h[s+96>>3]+y))&255;r=0;while(1){if((r|0)>=(c[v>>2]|0))break;n=c[(c[d>>2]|0)+(r<<2)>>2]|0;sE(n,t,u);while(1){if(!n)break;else g=n;while(1){if(!g){i=n;break}e=c[g>>2]|0;i=g+-48|0;if((c[((e&3|0)==2?g:i)+40>>2]|0)==(b|0)){e=c[g+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[g>>2]|0}f=g+16|0;if((c[((e&3|0)==3?g:g+48|0)+40>>2]|0)==(b|0)){e=c[f>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[f>>2]|0)+112>>0]|0)!=1){g=0;continue}e=c[(c[((c[g>>2]&3|0)==2?g:i)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){g=0;continue}if((c[e+184>>2]|0)!=1){g=0;continue}g=c[c[e+180>>2]>>2]|0}while(1){if(!i)break;e=c[i>>2]|0;if((c[((e&3|0)==2?i:i+-48|0)+40>>2]|0)==(b|0)){e=c[i+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[i>>2]|0}f=i+48|0;g=i+16|0;if((c[((e&3|0)==3?i:f)+40>>2]|0)==(b|0)){e=c[g>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[g>>2]|0)+112>>0]|0)!=1){i=0;continue}e=c[(c[((c[i>>2]&3|0)==3?i:f)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){i=0;continue}if((c[e+176>>2]|0)!=1){i=0;continue}i=c[c[e+172>>2]>>2]|0}n=c[(c[n+16>>2]|0)+172>>2]|0}r=r+1|0}a[(c[w>>2]|0)+145>>0]=1;l=x;return}function wk(a){a=a|0;var b=0,d=0,e=0;kh(a);b=c[a>>2]&3;d=a+-48|0;e=a+48|0;b=fh(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0)|0;if(!b){b=c[a>>2]&3;ph(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0,a)|0}else xh(a,b);return}function xk(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+16|0;e=0;while(1){b=c[f>>2]|0;if((e|0)>=(c[b+220>>2]|0))break;d=c[(c[b+216>>2]|0)+(e<<2)>>2]|0;c[b+192>>2]=d;b=d;d=b;while(1){if(!d)break;g=c[d+16>>2]|0;a[g+157>>0]=0;d=c[g+164>>2]|0}while(1){if(!b)break;yk(b);b=c[(c[b+16>>2]|0)+164>>2]|0}e=e+1|0}return}function yk(b){b=b|0;var d=0,e=0,f=0,g=0;g=b+16|0;d=c[g>>2]|0;b=d+157|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[d+158>>0]=1;b=0;while(1){f=c[(c[d+180>>2]|0)+(b<<2)>>2]|0;if(!f)break;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;e=c[d+16>>2]|0;if(!(a[e+158>>0]|0)){if(!(a[e+157>>0]|0))yk(d)}else{wk(f);b=b+-1|0}b=b+1|0;d=c[g>>2]|0}a[d+158>>0]=0}return}function zk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=Sy(a)|0;b=0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;h=c[(c[(c[((g|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;g=c[(c[(c[((g|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;f=h-g|0;d=Gx(a,d)|0;b=((h|0)==(g|0)?0:((f|0)>-1?f:0-f|0)+-1|0)+b|0}e=Ty(a,e)|0}return b|0}function Ak(b){b=b|0;var d=0,e=0,f=0,g=0;e=Sy(b)|0;while(1){if(!e)break;g=c[e+16>>2]|0;f=c[g+176>>2]|0;g=g+172|0;d=0;while(1){if((d|0)>=(f|0))break;a[(c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+112>>0]=0;d=d+1|0}e=Ty(b,e)|0}return}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;o=q;j=c[b+24>>2]|0;Ck(a);k=(j|0)==-1;m=b+8|0;i=k^1;n=c[15686]|0;f=1797693134862315708145274.0e284;g=0;while(1){if(!(k|(g|0)<(j|0)))break;d=Sy(a)|0;while(1){if(!d)break;c[(c[d+16>>2]|0)+232>>2]=0;d=Ty(a,d)|0}yj(a);e=+Dk(a);h[m>>3]=e;if(0){h[o>>3]=e;g1(n,87387,o)|0;e=+h[m>>3]}if(!(!(e<=+h[b>>3])&(!(f<=e)|i))){p=9;break}Ek(a);f=e;g=g+1|0}if((p|0)==9){p=b+20|0;c[b+16>>2]=c[p>>2];c[p>>2]=g}yj(a);Fk(a);Gk();h[m>>3]=+Dk(a);l=q;return}function Ck(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0;c[45982]=vH((ay(a)|0)*24|0)|0;c[45981]=0;b=Sy(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+120>>2]=-1;b=Ty(a,b)|0}i=Sy(a)|0;while(1){if(!i)break;j=i+16|0;do if(!(c[(c[j>>2]|0)+216>>2]|0)){f=uH(4)|0;g=c[45982]|0;k=c[45981]|0;c[g+(k*24|0)>>2]=f;c[f>>2]=i;c[g+(k*24|0)+4>>2]=1;j=c[j>>2]|0;h[g+(k*24|0)+8>>3]=+h[j+32>>3];h[g+(k*24|0)+16>>3]=+h[j+40>>3];c[j+120>>2]=k;c[45981]=k+1}else{g=SL(i)|0;k=g+16|0;b=c[k>>2]|0;d=c[b+120>>2]|0;if((d|0)>-1){g=c[45982]|0;f=c[g+(d*24|0)>>2]|0;e=g+(d*24|0)+4|0;k=c[e>>2]|0;c[e>>2]=k+1;c[f+(k<<2)>>2]=i;k=c[j>>2]|0;j=g+(d*24|0)+8|0;h[j>>3]=+h[j>>3]+ +h[k+32>>3];j=g+(d*24|0)+16|0;l=+h[j>>3];m=+h[k+40>>3];h[j>>3]=l>2]=d;break}d=uH(c[b+216>>2]<<2)|0;e=c[45982]|0;f=c[45981]|0;b=e+(f*24|0)|0;c[b>>2]=d;c[d>>2]=g;if((g|0)==(i|0)){h[e+(f*24|0)+8>>3]=+h[(c[k>>2]|0)+32>>3];d=1;b=i}else{c[(c[b>>2]|0)+4>>2]=i;n=c[k>>2]|0;b=c[j>>2]|0;h[e+(f*24|0)+8>>3]=+h[b+32>>3]+ +h[n+32>>3];d=2;b=+h[n+40>>3]<+h[b+40>>3]?i:g}c[e+(f*24|0)+4>>2]=d;h[e+(f*24|0)+16>>3]=+h[(c[b+16>>2]|0)+40>>3];c[(c[k>>2]|0)+120>>2]=f;c[(c[j>>2]|0)+120>>2]=f;c[45981]=f+1}while(0);i=Ty(a,i)|0}return}function Dk(a){a=a|0;var b=0.0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0;Fk(a);g=c[45979]|0;e=c[a+16>>2]|0;b=+(O(c[e+252>>2]|0,g+-1|0)|0);f=c[45980]|0;e=e+248|0;a=0;d=0.0;while(1){if((a|0)>=(g|0))break;i=+h[f+(a*40|0)+24>>3]+ +(O(c[e>>2]|0,c[f+(a*40|0)+16>>2]|0)|0);j=+h[f+(a*40|0)+32>>3]+b;a=a+1|0;b=j;d=d=(ay(a)|0))break;c[(c[45983]|0)+(b<<2)>>2]=b;b=b+1|0}Fk(a);Hk(a);Ik(a);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0;c[45979]=0;b=c[45980]|0;if(b|0){e=0;while(1){if((e|0)>=(c[45981]|0))break;d=c[b+(e*40|0)+4>>2]|0;if(d){D_(d);b=c[45980]|0}d=c[b+(e*40|0)+8>>2]|0;if(d){D_(d);b=c[45980]|0}e=e+1|0}D_(b)}c[45980]=uH((c[45981]|0)*40|0)|0;b=0;while(1){d=c[45981]|0;if((b|0)>=(d|0))break;k=uH(d<<2)|0;c[(c[45980]|0)+(b*40|0)+4>>2]=k;k=uH(c[45981]<<2)|0;l=c[45980]|0;c[l+(b*40|0)+8>>2]=k;c[l+(b*40|0)>>2]=b;c[l+(b*40|0)+12>>2]=0;c[l+(b*40|0)+16>>2]=0;l=l+(b*40|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b=b+1|0}e=Sy(a)|0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;i=c[d>>2]|0;f=d+-48|0;g=c[45980]|0;b=c[(c[(c[((i&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){b=b+1|0;if((b|0)>=(c[(c[(c[((i&3|0)==2?d:f)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=g+(b*40|0)+16|0;c[i>>2]=(c[i>>2]|0)+1;i=c[d>>2]|0}d=Gx(a,d)|0}e=Ty(a,e)|0}i=c[45981]|0;k=c[45982]|0;l=c[45980]|0;d=a+16|0;b=0;while(1){if((b|0)>=(i|0))break;e=(c[c[k+(b*24|0)>>2]>>2]|0)+16|0;f=c[(c[e>>2]|0)+232>>2]|0;if((f|0)>=(c[45979]|0))c[45979]=f+1;g=l+(f*40|0)+24|0;j=+h[g>>3];h[g>>3]=j+ +h[k+(b*24|0)+8>>3]*72.0+(j>0.0?+(c[(c[d>>2]|0)+248>>2]|0):0.0);g=l+(f*40|0)+32|0;j=+h[k+(b*24|0)+16>>3]*72.0;if(+h[g>>3]>3]=j;c[(c[l+(f*40|0)+4>>2]|0)+(c[l+(f*40|0)+12>>2]<<2)>>2]=k+(b*24|0);a=l+((c[(c[e>>2]|0)+232>>2]|0)*40|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;b=b+1|0}return}function Gk(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[45979]|0;l=c[45980]|0;j=0;b=0;a=0;while(1){if((j|0)>=(k|0))break;d=l+(j*40|0)|0;i=c[l+(j*40|0)+12>>2]|0;e=(b|0)==0;a:do if(i)if(!e){if((c[d>>2]|0)>(a|0)){f=l+(j*40|0)+4|0;d=0;while(1){if((d|0)>=(i|0))break a;g=c[(c[f>>2]|0)+(d<<2)>>2]|0;h=c[g+4>>2]|0;e=0;while(1){if((e|0)>=(h|0))break;m=(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-b;e=e+1|0}d=d+1|0}}}else b=0;else{if(e)a=c[d>>2]|0;b=b+1|0}while(0);j=j+1|0}return}function Hk(a){a=a|0;var b=0;b=c[45983]|0;_0(b,ay(a)|0,4,63);return}function Ik(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;j=c[45979]|0;k=c[45980]|0;g=c[45983]|0;i=0;while(1){if((i|0)>=(j|0)){e=0;d=0.0;break}e=c[g+(i<<2)>>2]|0;f=i+1|0;if((c[k+(e*40|0)+12>>2]|0)<2)i=f;else{l=4;break}}if((l|0)==4)if((j|0)>(f|0))d=+h[k+((c[g+(f<<2)>>2]|0)*40|0)+24>>3];else d=0.0;a:do if((i|0)!=(j|0)){_0(c[k+(e*40|0)+4>>2]|0,c[k+(e*40|0)+12>>2]|0,4,64);g=c[45980]|0;r=+h[g+(e*40|0)+24>>3];r=!(d<=r*.25)&!(d>=r*.75)?d:r*.5;s=c[g+(e*40|0)+12>>2]|0;q=b+16|0;n=0;o=0;d=0.0;f=0;p=0;while(1){if((p|0)>=(f+s|0))break a;do if(!(c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]|0)){l=c[(c[g+(e*40|0)+4>>2]|0)+(p<<2)>>2]|0;b=l+8|0;m=+h[b>>3]*72.0+d+(d>0.0?+(c[(c[q>>2]|0)+248>>2]|0):0.0);i=(o|0)!=0;if(!(i&!(m<=r))){j=i?n:l;i=i?o:1;d=m;break}j=n+4|0;k=l+4|0;i=0;while(1){if((i|0)<(c[j>>2]|0))g=0;else break;while(1){if((g|0)>=(c[k>>2]|0))break;a[(c[(ph(c[(c[n>>2]|0)+(i<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0,0)|0)+16>>2]|0)+112>>0]=1;g=g+1|0}i=i+1|0}g=c[45980]|0;c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]=1;j=g+(e*40|0)+12|0;c[j>>2]=(c[j>>2]|0)+-1;j=g+(e*40|0)+16|0;c[j>>2]=(c[j>>2]|0)+1;j=g+(e*40|0)+24|0;h[j>>3]=+h[b>>3]*-72.0-+(c[(c[q>>2]|0)+248>>2]|0)+ +h[j>>3];j=n;i=o}else{j=n;i=o;f=f+1|0}while(0);n=j;o=i;p=p+1|0}}while(0);return}function Jk(a,b){a=a|0;b=b|0;a=Kk(c[a>>2]|0)|0;b=Kk(c[b>>2]|0)|0;return ((b|0)<(a|0)&1)-((b|0)>(a|0)&1)|0}function Kk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[f>>2]|0))break;e=c[(c[a>>2]|0)+(d<<2)>>2]|0;g=ez(e)|0;e=Ex(g,e)|0;while(1){if(!e)break;e=Gx(g,e)|0;b=b+1|0}d=d+1|0}return b|0}function Lk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[45980]|0;e=+h[f+((c[b>>2]|0)*40|0)+24>>3];d=+h[f+((c[a>>2]|0)*40|0)+24>>3];return (e>d&1)-(e>2]|0)+216>>2]=0;b=Ty(a,b)|0}return}function Nk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g+20|0;c[d>>2]=5;a=xx(a,96579)|0;if(a|0?(c[e>>2]=g,c[e+4>>2]=d,(N1(a,87402,e)|0)>=1):0)Pw(0,87409,f)|0;c[b+24>>2]=0;c[b+32>>2]=0;l=g;return 0}function Ok(b){b=b|0;var d=0,e=0;d=c[46419]|0;if((((d|0)!=0?(e=yx(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(QL(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Pk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;il(a);b=Sy(a)|0;while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;do if(((c[(c[d+16>>2]|0)+172>>2]|0)==0?(Ok(d)|0)==0:0)?(e=d+48|0,f=SL(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)|0,g=d+-48|0,h=SL(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)|0,(f|0)!=(h|0)):0){if((c[(c[f+16>>2]|0)+212>>2]|0)==0?(c[(c[h+16>>2]|0)+212>>2]|0)==0:0){i=fh(f,h)|0;if(!i){ph(f,h,d)|0;break}else{xh(d,i);break}}i=c[d>>2]&3;Qk(a,c[((i|0)==3?d:e)+40>>2]|0,c[((i|0)==2?d:g)+40>>2]|0,d)}while(0);d=Gx(a,d)|0}b=Ty(a,b)|0}return}function Qk(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[g>>2]&3;h=c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)k=0;else k=(c[h+232>>2]|0)-(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)|0;h=c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)h=0;else h=(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)-(c[h+232>>2]|0)|0;j=g+16|0;k=h+k+(e[(c[j>>2]|0)+170>>1]|0)|0;b=uh(b)|0;a[(c[b+16>>2]|0)+156>>0]=2;i=SL(d)|0;d=SL(f)|0;f=$i(b,i,(k|0)>0?0.0:+(0-k|0),(c[(c[j>>2]|0)+156>>2]|0)*10|0)|0;c[(c[($i(b,d,+(((k|0)>0?k:0)|0),c[(c[j>>2]|0)+156>>2]|0)|0)+16>>2]|0)+116>>2]=g;c[(c[f+16>>2]|0)+116>>2]=g;return}function Rk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[d>>2]&3;i=(j|0)==3?d:d+48|0;j=(j|0)==2?d:d+-48|0;j=c[(c[(c[((c[(c[(c[i+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[(c[j+40>>2]|0)+16>>2]|0)+232>>2]|0)?i:j)+40>>2]|0)+16>>2]|0)+232>>2]|0;i=d+16|0;d=(c[i>>2]|0)+172|0;if(c[d>>2]|0)qa(87498,87520,148,87529);c[d>>2]=f;h=(g|0)==0;do{d=c[i>>2]|0;if(h)g=c[f+16>>2]|0;else{g=c[f+16>>2]|0;k=g+168|0;b[k>>1]=(e[k>>1]|0)+(e[d+168>>1]|0)}k=g+154|0;b[k>>1]=(e[k>>1]|0)+(e[d+154>>1]|0);g=g+156|0;c[g>>2]=(c[g>>2]|0)+(c[d+156>>2]|0);d=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)==(j|0))break;Sk(a,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((f|0)!=0);return}function Sk(a,b){a=a|0;b=b|0;var d=0.0;d=+((c[(c[a+16>>2]|0)+248>>2]|0)/2|0|0);b=c[b+16>>2]|0;a=b+88|0;h[a>>3]=+h[a>>3]+d;b=b+96|0;h[b>>3]=+h[b>>3]+d;return}function Tk(a,b){a=a|0;b=b|0;var d=0,e=0;if(((((a|0)!=0&(b|0)!=0?(e=c[a>>2]&3,d=c[b>>2]&3,(c[((e|0)==3?a:a+48|0)+40>>2]|0)==(c[((d|0)==3?b:b+48|0)+40>>2]|0)):0)?(c[((e|0)==2?a:a+-48|0)+40>>2]|0)==(c[((d|0)==2?b:b+-48|0)+40>>2]|0):0)?(c[(c[a+16>>2]|0)+96>>2]|0)==(c[(c[b+16>>2]|0)+96>>2]|0):0)?(wj(a,b)|0)!=0:0)a=1;else a=0;return a|0}function Uk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=b+16|0;d=c[r>>2]|0;c[d+192>>2]=0;c[d+232>>2]=0;il(b);d=1;while(1){e=c[r>>2]|0;if((d|0)>(c[e+180>>2]|0))break;jl(b,c[(c[e+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}h=Sy(b)|0;while(1){if(!h)break;g=Ex(b,h)|0;while(1){if(!g)break;d=c[g>>2]|0;e=(c[(c[((d&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+160|0;f=a[e>>0]|0;if(f<<24>>24<3){a[e>>0]=f+1<<24>>24;d=c[g>>2]|0}d=(c[(c[((d&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+160|0;e=a[d>>0]|0;if(e<<24>>24<3)a[d>>0]=e+1<<24>>24;g=Gx(b,g)|0}h=Ty(b,h)|0}m=Sy(b)|0;while(1){if(!m)break;if((c[(c[m+16>>2]|0)+212>>2]|0)==0?(m|0)==(SL(m)|0):0){qh(b,m);l=(c[r>>2]|0)+232|0;c[l>>2]=(c[l>>2]|0)+1}d=0;l=Ex(b,m)|0;while(1){if(!l)break;k=l+16|0;h=c[k>>2]|0;a:do if(!(c[h+172>>2]|0)){if(Vk(l)|0){if(!(Tk(d,l)|0)){Wk(b,l);d=l;break}e=c[(c[d+16>>2]|0)+172>>2]|0;if(e|0){Rk(b,l,e,0);lh(l);break}k=c[l>>2]&3;if((c[(c[(c[((k|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)!=(c[(c[(c[((k|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;xh(l,d);lh(l);break}if(d){i=c[l>>2]&3;e=l+48|0;f=c[((i|0)==3?l:e)+40>>2]|0;g=c[d>>2]&3;if((f|0)==(c[((g|0)==3?d:d+48|0)+40>>2]|0)?(n=c[((i|0)==2?l:l+-48|0)+40>>2]|0,(n|0)==(c[((g|0)==2?d:d+-48|0)+40>>2]|0)):0){if((c[(c[f+16>>2]|0)+232>>2]|0)==(c[(c[n+16>>2]|0)+232>>2]|0)){xh(l,d);lh(l);break}if(((c[h+96>>2]|0)==0?(o=d+16|0,(c[(c[o>>2]|0)+96>>2]|0)==0):0)?(wj(l,d)|0)!=0:0)if(!(a[191874]|0)){Rk(b,l,c[(c[o>>2]|0)+172>>2]|0,1);lh(l);break}else{a[(c[k>>2]|0)+112>>0]=6;break}else i=e}else i=e}else i=l+48|0;h=c[l>>2]&3;e=c[((h|0)==3?l:i)+40>>2]|0;j=l+-48|0;if((e|0)==(c[((h|0)==2?l:j)+40>>2]|0)){lh(l);d=l;break}e=SL(e)|0;f=SL(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)|0;h=c[l>>2]&3;if((c[((h|0)==3?l:i)+40>>2]|0)==(e|0)?(c[((h|0)==2?l:j)+40>>2]|0)==(f|0):0){g=c[(c[e+16>>2]|0)+232>>2]|0;h=c[(c[f+16>>2]|0)+232>>2]|0;if((g|0)==(h|0)){vh(b,l);d=l;break}if((h|0)>(g|0)){Xk(b,e,f,l);d=l;break}e=Rx(b,f,e,0,0)|0;do if(e|0?(p=c[e>>2]&3,q=c[((p|0)==2?e:e+-48|0)+40>>2]|0,(q|0)!=(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)):0){f=e+16|0;if(!(c[(c[f>>2]|0)+172>>2]|0))Xk(b,c[((p|0)==3?e:e+48|0)+40>>2]|0,q,e);if((c[(c[k>>2]|0)+96>>2]|0)==0?(c[(c[f>>2]|0)+96>>2]|0)==0:0){if(!(wj(l,e)|0))break;if(!(a[191874]|0)){lh(l);Rk(b,l,c[(c[f>>2]|0)+172>>2]|0,1);break a}else{a[(c[k>>2]|0)+112>>0]=6;a[(c[f>>2]|0)+153>>0]=1;break a}}}while(0);d=c[l>>2]&3;Xk(b,c[((d|0)==2?l:j)+40>>2]|0,c[((d|0)==3?l:i)+40>>2]|0,l);d=l}}else d=l;while(0);l=Gx(b,l)|0}m=Ty(b,m)|0}if((ig(b)|0)!=(b|0)){d=c[(c[r>>2]|0)+216>>2]|0;if(!d)d=vH(4)|0;else d=xH(d,4)|0;r=c[r>>2]|0;c[r+216>>2]=d;c[d>>2]=c[r+192>>2]}return}function Vk(b){b=b|0;var d=0;d=c[b>>2]&3;if((a[(c[(c[((d|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7)b=1;else b=(a[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7&1;return b|0}function Wk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=_k(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;g=_k(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;i=(c[(c[f+16>>2]|0)+232>>2]|0)>(c[(c[g+16>>2]|0)+232>>2]|0);e=i?f:g;f=i?g:f;g=f+16|0;i=e+16|0;a:do if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[i>>2]|0)+212>>2]|0)){h=fh(f,e)|0;if(h|0){Rk(b,d,h,1);break}if((c[(c[g>>2]|0)+232>>2]|0)!=(c[(c[i>>2]|0)+232>>2]|0)){Xk(b,f,e,d);e=(c[d+16>>2]|0)+172|0;while(1){e=c[e>>2]|0;if(!e)break a;f=e+-48|0;if((c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[i>>2]|0)+232>>2]|0))break a;a[(c[e+16>>2]|0)+112>>0]=5;e=c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+180>>2]|0}}}while(0);return}function Xk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;f=c[k>>2]|0;if(!(c[f+96>>2]|0))j=-1;else j=((c[(c[d+16>>2]|0)+232>>2]|0)+(c[(c[b+16>>2]|0)+232>>2]|0)|0)/2|0;if(c[f+172>>2]|0)qa(87541,87520,89,87566);i=d+16|0;h=c[(c[b+16>>2]|0)+232>>2]|0;while(1){g=h+1|0;f=c[(c[i>>2]|0)+232>>2]|0;if((h|0)>=(f|0))break;if((g|0)<(f|0)){if((g|0)==(j|0))f=Yk(a,e)|0;else f=Zk(a)|0;c[(c[f+16>>2]|0)+232>>2]=g}else f=d;Ki(ph(b,f,e)|0);h=g;b=f}if(!(c[(c[k>>2]|0)+172>>2]|0))qa(87577,87520,103,87566);else return}function Yk(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0.0;i=d+16|0;g=c[(c[i>>2]|0)+96>>2]|0;e=+h[g+24>>3];f=+h[g+32>>3];g=uh(b)|0;d=g+16|0;c[(c[d>>2]|0)+104>>2]=c[(c[i>>2]|0)+96>>2];j=+(c[(c[(fz(g)|0)+16>>2]|0)+248>>2]|0);h[(c[d>>2]|0)+88>>3]=j;if(!(a[(c[i>>2]|0)+114>>0]|0)){b=(c[(c[(fz(b)|0)+16>>2]|0)+116>>2]&1|0)==0;i=c[d>>2]|0;h[i+80>>3]=b?f:e;h[i+96>>3]=b?e:f}return g|0}function Zk(a){a=a|0;var b=0;b=uh(a)|0;Sk(a,b);return b|0}function _k(b){b=b|0;var d=0;d=c[b+16>>2]|0;if((a[d+159>>0]|0)==7)b=c[(c[(c[(c[d+212>>2]|0)+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;else b=SL(b)|0;return b|0}function $k(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=ig(a)|0;h=Sy(a)|0;while(1){if(!h)break;b=Jx(j,h)|0;i=0;while(1){if(!b)break;l=Kx(j,b,h)|0;if(oz(a,b)|0){k=i;b=l;i=k;continue}k=(c[b>>2]&3|0)==2?b:b+-48|0;m=(Tk(i,k)|0)==0;e=c[k>>2]&3;b=c[((e|0)==3?k:k+48|0)+40>>2]|0;d=c[(c[b+16>>2]|0)+232>>2]|0;e=c[((e|0)==2?k:k+-48|0)+40>>2]|0;f=c[(c[e+16>>2]|0)+232>>2]|0;g=(d|0)==(f|0);if(!m){c[(c[k+16>>2]|0)+172>>2]=g?i:0;b=c[(c[i+16>>2]|0)+172>>2]|0;if(!b){m=i;b=l;i=m;continue}Rk(a,k,b,0);mh(k);m=i;b=l;i=m;continue}if(!g)if((f|0)>(d|0)){al(b,e,k);b=l;i=k;continue}else{al(e,b,k);b=l;i=k;continue}b=hh(b,e)|0;if(!b){vh(j,k);b=l;i=k;continue}if((k|0)==(b|0)){m=i;b=l;i=m;continue}mh(k);if(c[(c[k+16>>2]|0)+172>>2]|0){m=i;b=l;i=m;continue}xh(k,b);m=i;b=l;i=m}h=Ty(a,h)|0}return}function al(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=bl(a)|0;e=bl(b)|0;cl(f,e,d,c[(c[d+16>>2]|0)+172>>2]|0,(f|0)==(a|0)&(e|0)==(b|0)?1:5);return}function bl(b){b=b|0;var d=0,e=0,f=0;d=c[b+16>>2]|0;e=c[d+212>>2]|0;if((e|0)!=0?(f=c[e+16>>2]|0,(a[f+272>>0]|0)==0):0)b=c[(c[f+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;return b|0}function cl(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;k=c[(c[n>>2]|0)+232>>2]|0;o=e+16|0;i=c[(c[o>>2]|0)+232>>2]|0;if((i|0)<=(k|0))qa(87602,87630,81,87640);m=c[g>>2]&3;if(!((c[((m|0)==3?g:g+48|0)+40>>2]|0)==(d|0)?(c[((m|0)==2?g:g+-48|0)+40>>2]|0)==(e|0):0))l=5;a:do if((l|0)==5){if((b[(c[g+16>>2]|0)+168>>1]|0)>1){c[(c[f+16>>2]|0)+172>>2]=0;if(((i-k|0)==1?(j=fh(d,e)|0,j|0):0)?wj(f,j)|0:0){xh(f,j);if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;lh(f);break}m=h&255;h=d;l=c[(c[n>>2]|0)+232>>2]|0;while(1){i=c[(c[o>>2]|0)+232>>2]|0;if((l|0)>=(i|0))break a;if((l|0)<(i+-1|0)){i=ig(d)|0;j=g+-48|0;i=dl(i,c[((c[g>>2]&3|0)==2?g:j)+40>>2]|0)|0;k=g}else{i=e;j=g+-48|0;k=g}a[(c[(ph(h,i,f)|0)+16>>2]|0)+112>>0]=m;n=(c[g+16>>2]|0)+168|0;b[n>>1]=(b[n>>1]|0)+-1<<16>>16;h=i;l=l+1|0;g=c[c[(c[(c[((c[k>>2]&3|0)==2?g:j)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}}do if((i-k|0)==1){g=fh(d,e)|0;if(g|0?wj(f,g)|0:0){c[(c[f+16>>2]|0)+172>>2]=g;m=c[g+16>>2]|0;a[m+112>>0]=h;m=m+168|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16;if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;lh(f);break}c[(c[f+16>>2]|0)+172>>2]=0;g=ph(d,e,f)|0;a[(c[g+16>>2]|0)+112>>0]=h}while(0);i=c[(c[o>>2]|0)+232>>2]|0;if((i-(c[(c[n>>2]|0)+232>>2]|0)|0)>1){if((c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)==(d|0))l=i;else{n=f+16|0;c[(c[n>>2]|0)+172>>2]=0;l=ph(d,c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0,f)|0;c[(c[n>>2]|0)+172>>2]=l;kh(g);g=l;l=c[(c[o>>2]|0)+232>>2]|0}while(1){i=c[g>>2]&3;j=c[((i|0)==2?g:g+-48|0)+40>>2]|0;k=c[j+16>>2]|0;if((c[k+232>>2]|0)==(l|0))break;g=c[c[k+180>>2]>>2]|0}if((j|0)!=(e|0)){a[(c[(ph(c[((i|0)==3?g:g+48|0)+40>>2]|0,e,f)|0)+16>>2]|0)+112>>0]=h;kh(g)}}}while(0);return}function dl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=b+16|0;b=c[d>>2]|0;e=c[b+232>>2]|0;el(a,e,c[b+236>>2]|0,2);b=uh(a)|0;d=c[d>>2]|0;f=c[b+16>>2]|0;h[f+88>>3]=+h[d+88>>3];h[f+96>>3]=+h[d+96>>3];c[f+232>>2]=c[d+232>>2];d=(c[d+236>>2]|0)+1|0;c[f+236>>2]=d;c[(c[(c[(c[a+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return b|0}function el(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=a+16|0;f=c[(c[h>>2]|0)+196>>2]|0;i=c[f+(b<<6)+4>>2]|0;a:do if((e|0)<1){d=d-e|0;while(1){g=d+1|0;a=c[f+(b<<6)>>2]|0;if((g|0)>=(a|0))break;a=c[i+(g<<2)>>2]|0;f=d+e|0;c[(c[a+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=a;d=g;f=c[(c[h>>2]|0)+196>>2]|0}g=e+-1|0;d=g+a|0;while(1){if((d|0)>=(a|0))break a;c[i+(d<<2)>>2]=0;f=c[(c[h>>2]|0)+196>>2]|0;d=d+1|0;a=c[f+(b<<6)>>2]|0}}else{g=e+-1|0;a=c[f+(b<<6)>>2]|0;while(1){a=a+-1|0;if((a|0)<=(d|0))break;j=c[i+(a<<2)>>2]|0;f=g+a|0;c[(c[j+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=j}f=e+d|0;a=d;while(1){a=a+1|0;if((a|0)>=(f|0))break;c[i+(a<<2)>>2]=0}a=c[(c[h>>2]|0)+196>>2]|0;f=a;a=c[a+(b<<6)>>2]|0}while(0);c[f+(b<<6)>>2]=g+a;return}function fl(a){a=a|0;var b=0;Uk(a);b=c[a+16>>2]|0;c[b+220>>2]=1;c[c[b+216>>2]>>2]=c[b+192>>2];Hi(a);mi(a,0);gl(a);$k(a);hl(a);return}function gl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=ig(d)|0;l=d+16|0;f=c[l>>2]|0;j=b[f+236>>1]|0;e=j<<16>>16;m=k+16|0;if(j<<16>>16>0)a[(c[(c[m>>2]|0)+196>>2]|0)+(e+-1<<6)+49>>0]=0;j=e;while(1){if((j|0)>(b[f+238>>1]|0))break;i=c[(c[(c[(c[f+268>>2]|0)+(j<<2)>>2]|0)+16>>2]|0)+236>>2]|0;el(k,j,i,c[(c[f+196>>2]|0)+(j<<6)>>2]|0);g=0;h=i;while(1){f=c[l>>2]|0;e=c[f+196>>2]|0;if((g|0)>=(c[e+(j<<6)>>2]|0))break;e=c[(c[e+(j<<6)+4>>2]|0)+(g<<2)>>2]|0;c[(c[(c[(c[m>>2]|0)+196>>2]|0)+(j<<6)+4>>2]|0)+(h<<2)>>2]=e;f=c[e+16>>2]|0;c[f+236>>2]=h;if((a[f+156>>0]|0)==1)c[e+24>>2]=fz(k)|0;sh(d,e);qh(k,e);f=(c[m>>2]|0)+232|0;c[f>>2]=(c[f>>2]|0)+1;g=g+1|0;h=h+1|0}h=c[(c[m>>2]|0)+196>>2]|0;c[e+(j<<6)+4>>2]=(c[h+(j<<6)+4>>2]|0)+(i<<2);a[h+(j<<6)+49>>0]=0;j=j+1|0}e=c[m>>2]|0;if((j|0)<(b[e+238>>1]|0))a[(c[e+196>>2]|0)+(j<<6)+49>>0]=0;a[f+272>>0]=1;return}function hl(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;h=b[d+236>>1]|0;while(1){if((h|0)>(b[d+238>>1]|0))break;f=c[(c[d+268>>2]|0)+(h<<2)>>2]|0;g=f+16|0;while(1){d=c[g>>2]|0;e=c[c[d+180>>2]>>2]|0;if(!e)break;kh(e)}while(1){d=c[c[d+172>>2]>>2]|0;if(!d)break;kh(d);d=c[g>>2]|0}sh(ig(a)|0,f);c[(c[(c[i>>2]|0)+268>>2]|0)+(h<<2)>>2]=0;h=h+1|0;d=c[i>>2]|0}return}function il(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=Sy(b)|0;while(1){if(!f)break;e=f+16|0;d=c[e>>2]|0;if((a[d+159>>0]|0)==7){UL(f);d=c[e>>2]|0}c[d+212>>2]=0;f=Ty(b,f)|0}m=b+16|0;k=1;while(1){d=c[m>>2]|0;if((k|0)>(c[d+180>>2]|0))break;h=c[(c[d+184>>2]|0)+(k<<2)>>2]|0;i=h+16|0;d=Sy(h)|0;a:while(1){if(!d)break;j=Ty(h,d)|0;e=d+16|0;if(a[(c[e>>2]|0)+159>>0]|0){f=ry(d)|0;g=ry(b)|0;c[n>>2]=f;c[n+4>>2]=g;Pw(0,87649,n)|0;dz(h,d)|0;d=j;continue}VL(d,c[(c[i>>2]|0)+264>>2]|0);g=c[e>>2]|0;c[g+212>>2]=h;a[g+159>>0]=7;g=Ex(h,d)|0;while(1){if(!g){d=j;continue a}d=c[(c[g+16>>2]|0)+172>>2]|0;b:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break b;c[f+212>>2]=h;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Gx(h,g)|0}}k=k+1|0}l=o;return}function jl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;g=uH((b[(c[k>>2]|0)+238>>1]<<2)+8|0)|0;f=c[k>>2]|0;c[f+268>>2]=g;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>(b[f+238>>1]|0))break;f=uh(d)|0;c[(c[(c[k>>2]|0)+268>>2]|0)+(h<<2)>>2]=f;j=c[f+16>>2]|0;c[j+232>>2]=h;a[j+159>>0]=7;c[j+212>>2]=e;if(g|0){j=(c[(ph(g,f,0)|0)+16>>2]|0)+154|0;b[j>>1]=(b[j>>1]|0)*1e3}g=f;h=h+1|0;f=c[k>>2]|0}j=Sy(e)|0;while(1){f=c[k>>2]|0;if(!j)break;h=(c[(c[f+268>>2]|0)+(c[(c[j+16>>2]|0)+232>>2]<<2)>>2]|0)+16|0;f=(c[h>>2]|0)+216|0;c[f>>2]=(c[f>>2]|0)+1;f=Ex(e,j)|0;while(1){if(!f)break;i=c[f>>2]|0;d=f+-48|0;g=c[(c[(c[((i&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){if((g|0)>=(c[(c[(c[((i&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=(c[(c[c[(c[h>>2]|0)+180>>2]>>2]|0)+16>>2]|0)+168|0;b[i>>1]=(b[i>>1]|0)+1<<16>>16;g=g+1|0;i=c[f>>2]|0}f=Gx(e,f)|0}j=Ty(e,j)|0}d=b[f+238>>1]|0;i=f+268|0;f=b[f+236>>1]|0;while(1){if((f|0)>(d|0))break;g=(c[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+16>>2]|0)+216|0;h=c[g>>2]|0;if((h|0)>1)c[g>>2]=h+-1;f=f+1|0}return}function kl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[(c[e+16>>2]|0)+212>>2]|0)+16|0;e=c[k>>2]|0;j=f+1|0;if((j|0)!=(a[e+273>>0]|0)){i=b[e+236>>1]|0;while(1){h=b[e+238>>1]|0;if((i|0)>(h<<16>>16|0))break;Bi(d,c[(c[e+268>>2]|0)+(i<<2)>>2]|0);i=i+1|0;e=c[k>>2]|0}i=b[e+236>>1]|0;while(1){if((i|0)>(h<<16>>16|0))break;Ci(g,c[(c[e+268>>2]|0)+(i<<2)>>2]|0,f);d=c[k>>2]|0;i=i+1|0;h=b[d+238>>1]|0;e=d}a[e+273>>0]=j}return}function ll(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Sy(b)|0;while(1){if(!h)break;c[(c[h+16>>2]|0)+212>>2]=0;g=Ex(b,h)|0;while(1){if(!g)break;d=c[(c[g+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;c[f+212>>2]=0;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Gx(b,g)|0}h=Ty(b,h)|0}ml(b);return}function ml(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;ml(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}i=Sy(b)|0;while(1){if(!i)break;d=(c[i+16>>2]|0)+212|0;if(!(c[d>>2]|0))c[d>>2]=b;h=Ex(b,i)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=c[d>>2]|0;g=d+-48|0;f=c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;f=f+212|0;if(!(c[f>>2]|0)){c[f>>2]=b;e=c[d>>2]|0}d=c[c[(c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);h=Gx(b,h)|0}i=Ty(b,i)|0}return}function nl(a){a=a|0;var b=0,c=0,d=0;d=tM(a)|0;c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;ol(b,d);b=Gx(a,b)|0}c=Ty(a,c)|0}yw(d)|0;return} +function yH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;r=u+40|0;q=u+32|0;n=u+24|0;m=u;s=4;t=C_(40)|0;c[t>>2]=0;f=u+68|0;g=u+64|0;if(0){o=0;ka(62,a|0,f|0,g|0);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=E3(c[i>>2]|0,t|0,s|0)|0;if(!j)bb(i|0,p|0);z=p}else j=-1;if((j|0)!=1){j=c[15686]|0;i=c[f>>2]|0;f=c[g>>2]|0;o=0;c[m>>2]=99176;c[m+4>>2]=i;c[m+8>>2]=f;c[m+12>>2]=d;c[m+16>>2]=b;ca(29,j|0,99132,m|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){o=0;ha(1);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1)j=6;else{f=z;j=15}}else{f=z;j=15}}else{f=z;j=15}}else j=6;do if((j|0)==6){o=0;f=$(27,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)!=1){if(!f){o=0;ha(2);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}}if((d|0)<1){o=0;ha(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;break}else{c[46441]=(e|0)>-1?e:30;t=D3(185768,1,t|0,s|0)|0;s=z;o=0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;j=15;break}}else{f=z;j=15}}while(0);a:do if((j|0)==15){b:while(1){if(f|0){f=2;break a}o=0;ha(4);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}a=c[15686]|0;m=0;while(1){o=0;j=_(2)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}if(!j)break;o=0;f=$(28,j|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}o=0;ja(25,j|0,f|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}m=m+1|0;do if(((m|0)%100|0|0)==0&0!=0){f=(m|0)%1e3|0;if((f|0)==100){o=0;aa(91,99176,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;c[n>>2]=m;ca(29,a|0,99194,n|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}o=0;c[q>>2]=m;ca(29,a|0,99194,q|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}if(!f){o=0;aa(92,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}while(0);if((m|0)>=(d|0))break}switch(b|0){case 1:{o=0;ha(5);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}case 2:{o=0;ha(6);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}default:{o=0;ha(7);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;ha(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}if(!0){f=0;break a}if((m|0)>99){o=0;aa(92,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}}f=c[46481]|0;g=c[46482]|0;o=0;k=+X(1);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=E3(c[i>>2]|0,t|0,s|0)|0;if(!j)bb(i|0,p|0);z=p}else j=-1;if((j|0)==1){f=z;j=15;continue}o=0;c[r>>2]=99176;c[r+4>>2]=f;c[r+8>>2]=g;c[r+12>>2]=m;h[r+16>>3]=k;ca(29,a|0,99198,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15}else break}f=0}while(0);D_(t|0);l=u;return f|0}function zH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c[a+16>>2]|0)+192|0;e=0;h=0;while(1){a=c[a>>2]|0;if(!a)break;g=c[a+16>>2]|0;f=c[g+180>>2]|0;a=0;while(1){if(!(c[f+(a<<2)>>2]|0))break;a=a+1|0;e=e+1|0}a=g+164|0;h=h+1|0}c[b>>2]=h;c[d>>2]=e;return}function AH(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[46484]=b;c[46491]=0;c[46482]=0;c[46481]=0;i=b+16|0;b=(c[i>>2]|0)+192|0;h=0;f=0;while(1){b=c[b>>2]|0;if(!b)break;g=c[b+16>>2]|0;a[g+157>>0]=0;h=h+1|0;c[46481]=h;d=c[g+180>>2]|0;b=0;while(1){if(!(c[d+(b<<2)>>2]|0))break;k=f+1|0;c[46482]=k;b=b+1|0;f=k}b=g+164|0}b=c[46492]|0;if(!b)b=vH(h<<2)|0;else b=xH(b,h<<2)|0;c[46492]=b;c[46493]=0;b=c[46486]|0;if(!b)b=vH(c[46481]<<2)|0;else b=xH(b,c[46481]<<2)|0;c[46486]=b;c[46485]=0;d=1;b=(c[i>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;k=b+16|0;i=c[k>>2]|0;j=i+292|0;c[j>>2]=0;i=c[i+172>>2]|0;h=d;g=0;b=0;while(1){d=c[i+(g<<2)>>2]|0;if(!d)break;f=b+1|0;c[j>>2]=f;b=c[d+16>>2]|0;c[b+160>>2]=0;c[b+164>>2]=-1;if(!h)b=0;else{l=c[d>>2]&3;b=((c[(c[(c[((l|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((l|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)<(e[b+170>>1]|0|0)?0:h}h=b;g=g+1|0;b=f}b=uH((g<<2)+4|0)|0;d=c[k>>2]|0;c[d+264>>2]=b;c[d+268>>2]=0;d=c[d+180>>2]|0;b=0;do{l=b;b=b+1|0}while((c[d+(l<<2)>>2]|0)!=0);d=uH(b<<2)|0;b=c[k>>2]|0;c[b+272>>2]=d;c[b+276>>2]=0;d=h;b=b+164|0}return d|0}function BH(){var a=0,b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;k=o;m=GL(c[46481]|0)|0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b){j=0;break}d=b+16|0;a=c[d>>2]|0;if(!(c[a+292>>2]|0)){IL(m,b);a=c[d>>2]|0}a=a+164|0}while(1){a=JL(m)|0;if(!a)break;i=a+16|0;a=c[i>>2]|0;f=a+232|0;c[f>>2]=0;d=c[a+172>>2]|0;b=0;h=0;while(1){g=c[d+(b<<2)>>2]|0;if(!g){f=0;break}g=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[(c[g+16>>2]|0)+170>>1]|0)|0;g=(h|0)>(g|0)?h:g;c[f>>2]=g;b=b+1|0;h=g}while(1){b=c[(c[a+180>>2]|0)+(f<<2)>>2]|0;if(!b)break;d=b+-48|0;g=(c[(c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0)+16>>2]|0)+292|0;h=c[g>>2]|0;c[g>>2]=h+-1;if((h|0)<2){IL(m,c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0);a=c[i>>2]|0}f=f+1|0}j=j+1|0}a:do if((j|0)!=(c[46481]|0)){Pw(1,99530,k)|0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break a;d=b+16|0;a=c[d>>2]|0;if(c[a+292>>2]|0){k=ry(b)|0;a=c[(c[d>>2]|0)+292>>2]|0;c[n>>2]=k;c[n+4>>2]=a;Pw(3,99552,n)|0;a=c[d>>2]|0}a=a+164|0}}while(0);HL(m);l=o;return}function CH(){var b=0,d=0,e=0;b=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+264>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+272>>2]|0;if(d){D_(d);b=c[e>>2]|0}a[b+157>>0]=0;b=b+164|0}return}function DH(){var a=0,b=0,d=0,e=0,f=0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;a=c[a+16>>2]|0;c[a+280>>2]=0;a=a+164|0}f=uH(c[46481]<<2)|0;e=0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break;d=b+16|0;a=c[d>>2]|0;if(!(c[a+280>>2]|0)){c[f+(e<<2)>>2]=QH(b)|0;b=e+1|0;a=c[d>>2]|0}else b=e;e=b;a=a+164|0}a=RH(f,e)|0;while(1){if((SH(a)|0)<=1)break;WH(a,c[(VH(UH(TH(a)|0)|0)|0)+8>>2]|0)}D_(a);a=0;while(1){if((a|0)>=(e|0))break;D_(c[f+(a<<2)>>2]|0);a=a+1|0}D_(f);if((c[46485]|0)==((c[46481]|0)+-1|0)){XH();return}else qa(99275,99305,523,99310)}function EH(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[46491]|0;f=c[46485]|0;j=c[46486]|0;k=c[46441]|0;b=0;a=0;g=i;while(1){if((g|0)>=(f|0)){h=8;break}e=c[j+(g<<2)>>2]|0;d=c[(c[e+16>>2]|0)+160>>2]|0;if((d|0)<0){if(!a)a=e;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(d|0)?e:a;b=b+1|0;if((b|0)>=(k|0))break}e=g+1|0;c[46491]=e;g=e}if((h|0)==8)if((i|0)>0){f=0;while(1){if((f|0)>=(i|0))break;d=c[j+(f<<2)>>2]|0;e=c[(c[d+16>>2]|0)+160>>2]|0;if((e|0)<0){if(!a)a=d;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(e|0)?d:a;b=b+1|0;if((b|0)>=(k|0))break}f=f+1|0}c[46491]=f}return a|0}function FH(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;a=c[((b|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[d+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0);a=b?d:a;c[46487]=0;c[46488]=2147483647;d=c[a+16>>2]|0;c[46489]=c[d+284>>2];c[46490]=c[d+288>>2];if(b)PH(a);else OH(a);return c[46487]|0}function GH(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;g=c[b>>2]&3;m=b+-48|0;j=b+48|0;k=b+16|0;g=(c[(c[(c[((g|0)==2?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((g|0)==3?b:j)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[k>>2]|0)+170>>1]|0)|0;do if((g|0)>0){d=c[a>>2]&3;h=c[((d|0)==3?a:a+48|0)+40>>2]|0;i=c[h+16>>2]|0;if(((c[i+276>>2]|0)+(c[i+268>>2]|0)|0)==1){KH(h,g);break}d=c[((d|0)==2?a:a+-48|0)+40>>2]|0;f=c[d+16>>2]|0;if(((c[f+276>>2]|0)+(c[f+268>>2]|0)|0)==1){KH(d,0-g|0);break}if((c[i+288>>2]|0)<(c[f+288>>2]|0)){KH(h,g);break}else{KH(d,0-g|0);break}}while(0);d=a+16|0;f=c[(c[d>>2]|0)+160>>2]|0;g=c[b>>2]&3;g=LH(c[((g|0)==3?b:j)+40>>2]|0,c[((g|0)==2?b:m)+40>>2]|0,f,1)|0;i=c[b>>2]&3;if((LH(c[((i|0)==2?b:m)+40>>2]|0,c[((i|0)==3?b:j)+40>>2]|0,f,0)|0)==(g|0)){c[(c[k>>2]|0)+160>>2]=0-f;c[(c[d>>2]|0)+160>>2]=0;MH(a,b);n=c[g+16>>2]|0;NH(g,c[n+280>>2]|0,c[n+284>>2]|0)|0;l=o;return}else{Pw(1,99236,n)|0;bb(185768,1)}}function HH(){var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;JH();m=uH((c[46483]<<2)+4|0)|0;d=c[46483]|0;b=0;while(1){if((b|0)>(d|0))break;c[m+(b<<2)>>2]=0;b=b+1|0}b=(c[(c[46484]|0)+16>>2]|0)+192|0;d=b;while(1){d=c[d>>2]|0;if(!d)break;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){l=m+(c[d+232>>2]<<2)|0;c[l>>2]=(c[l>>2]|0)+1}d=d+164|0}while(1){b=c[b>>2]|0;if(!b)break;l=b+16|0;b=c[l>>2]|0;if(!(a[b+156>>0]|0)){h=c[46483]|0;f=c[b+172>>2]|0;k=0;j=0;d=0;while(1){g=c[f+(d<<2)>>2]|0;if(!g)break;n=c[g+16>>2]|0;i=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[n+170>>1]|0)|0;k=(c[n+156>>2]|0)+k|0;j=(j|0)>(i|0)?j:i;d=d+1|0}g=c[b+180>>2]|0;i=0;d=0;while(1){f=c[g+(d<<2)>>2]|0;if(!f)break;o=c[f+16>>2]|0;n=(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[o+170>>1]|0)|0;i=(c[o+156>>2]|0)+i|0;h=(h|0)<(n|0)?h:n;d=d+1|0}d=(j|0)>0?j:0;if((k|0)==(i|0)){g=d;f=d;while(1){d=f+1|0;if((f|0)>=(h|0))break;g=(c[m+(d<<2)>>2]|0)<(c[m+(g<<2)>>2]|0)?d:g;f=d}o=b+232|0;n=m+(c[o>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+-1;n=m+(g<<2)|0;c[n>>2]=(c[n>>2]|0)+1;c[o>>2]=g}d=c[b+264>>2]|0;if(d){D_(d);b=c[l>>2]|0}d=c[b+272>>2]|0;if(d){D_(d);b=c[l>>2]|0}a[b+157>>0]=0}b=b+164|0}D_(m);return}function IH(){var a=0,b=0,d=0,f=0,g=0,h=0;b=0;while(1){if((b|0)>=(c[46485]|0))break;a=c[(c[46486]|0)+(b<<2)>>2]|0;do if(((c[(c[a+16>>2]|0)+160>>2]|0)==0?(d=FH(a)|0,d|0):0)?(f=c[d>>2]&3,f=(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0,(f|0)>=2):0){h=c[a>>2]&3;g=c[((h|0)==3?a:a+48|0)+40>>2]|0;a=c[((h|0)==2?a:a+-48|0)+40>>2]|0;if((c[(c[g+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0)){KH(g,f>>>1);break}else{KH(a,(f|0)/-2|0);break}}while(0);b=b+1|0}CH();return}function JH(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;c[h>>2]=0;c[h>>2]=2147483647;c[46483]=-2147483647;b=(c[(c[46484]|0)+16>>2]|0)+192|0;e=b;g=2147483647;f=-2147483647;while(1){d=c[e>>2]|0;if(!d)break;e=c[d+16>>2]|0;if(!(a[e+156>>0]|0)){j=c[e+232>>2]|0;d=(g|0)<(j|0)?g:j;c[h>>2]=d;f=(f|0)>(j|0)?f:j;c[46483]=f}else d=g;e=e+164|0;g=d}if(g|0){while(1){b=c[b>>2]|0;if(!b)break;b=c[b+16>>2]|0;j=b+232|0;c[j>>2]=(c[j>>2]|0)-g;b=b+164|0}c[46483]=f-g;c[h>>2]=0}l=i;return}function KH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;a=c[f>>2]|0;e=a+232|0;c[e>>2]=(c[e>>2]|0)-b;e=0;while(1){d=c[(c[a+272>>2]|0)+(e<<2)>>2]|0;if(!d){e=0;break}if((d|0)!=(c[a+280>>2]|0)){KH(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(c[a+280>>2]|0)){KH(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}return}function LH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=(e|0)==0&1;h=0-d|0;f=c[(c[b+16>>2]|0)+288>>2]|0;b=a;while(1){a=c[b+16>>2]|0;if((c[a+284>>2]|0)<=(f|0)?(f|0)<=(c[a+288>>2]|0):0)break;a=c[a+280>>2]|0;i=a+48|0;j=(c[a+16>>2]|0)+160|0;c[j>>2]=(((b|0)==(c[((c[a>>2]&3|0)==3?a:i)+40>>2]|0)?e:g)|0?d:h)+(c[j>>2]|0);j=c[a>>2]&3;i=c[((j|0)==3?a:i)+40>>2]|0;a=c[((j|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[i+16>>2]|0)+288>>2]|0)>(c[(c[a+16>>2]|0)+288>>2]|0)?i:a}return b|0}function MH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+16|0;e=(c[i>>2]|0)+164|0;c[(c[b+16>>2]|0)+164>>2]=c[e>>2];c[(c[46486]|0)+(c[e>>2]<<2)>>2]=b;c[(c[i>>2]|0)+164>>2]=-1;i=(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+276|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+272|0;h=0;while(1){if((h|0)>=(f|0)){k=3;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==3)d=c[e+272>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+272>>2]|0)+(j<<2)>>2]=0;i=(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+268|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+264|0;h=0;while(1){if((h|0)>=(f|0)){k=8;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==8)d=c[e+264>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+264>>2]|0)+(j<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)+16|0;a=c[k>>2]|0;j=c[a+272>>2]|0;a=a+276|0;i=c[a>>2]|0;c[a>>2]=i+1;c[j+(i<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+272>>2]|0)+(c[k+276>>2]<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16|0;i=c[k>>2]|0;j=c[i+264>>2]|0;i=i+268|0;a=c[i>>2]|0;c[i>>2]=a+1;c[j+(a<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+264>>2]|0)+(c[k+268>>2]<<2)>>2]=0;return}function NH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;c[a+280>>2]=b;c[a+284>>2]=d;f=0;while(1){e=c[(c[a+272>>2]|0)+(f<<2)>>2]|0;if(!e){f=0;break}if((e|0)!=(b|0)){d=NH(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}while(1){e=c[(c[a+264>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)!=(b|0)){d=NH(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}c[a+288>>2]=d;return d+1|0}function OH(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+180>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[46489]|0)>(j|0)|(j|0)>(c[46490]|0)?(h=(c[b+232>>2]|0)-(c[(c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[46488]|0)|(c[46487]|0)==0):0){c[46487]=d;c[46488]=h}}else{b=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))OH(b)}g=g+1|0}while(1){b=c[(c[a+264>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[46488]|0)>0))break;b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){OH(b);a=c[i>>2]|0}d=d+1|0}return}function PH(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+172>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[46489]|0)>(j|0)|(j|0)>(c[46490]|0)?(h=(c[(c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[b+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[46488]|0)|(c[46487]|0)==0):0){c[46487]=d;c[46488]=h}}else{b=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))PH(b)}g=g+1|0}while(1){b=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[46488]|0)>0))break;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){PH(b);a=c[i>>2]|0}d=d+1|0}return}function QH(a){a=a|0;var b=0;b=uH(16)|0;c[b>>2]=a;c[b+4>>2]=eI(a,b)|0;c[b+12>>2]=b;return b|0}function RH(a,b){a=a|0;b=b|0;var d=0,e=0;e=uH(8)|0;c[e>>2]=a;c[e+4>>2]=b;d=0;while(1){if((d|0)>=(b|0))break;c[(c[a+(d<<2)>>2]|0)+8>>2]=d;d=d+1|0}d=(b|0)/2|0;while(1){if((d|0)<=-1)break;WH(e,d);d=d+-1|0}return e|0}function SH(a){a=a|0;return c[a+4>>2]|0}function TH(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[a>>2]|0;b=c[f>>2]|0;c[b+8>>2]=-1;d=a+4|0;e=(c[d>>2]|0)+-1|0;c[f>>2]=c[f+(e<<2)>>2];f=c[a>>2]|0;c[(c[f>>2]|0)+8>>2]=0;c[f+(e<<2)>>2]=b;c[d>>2]=e;WH(a,0);return b|0}function UH(a){a=a|0;return dI(c[a>>2]|0,0,0)|0}function VH(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0;b=a+16|0;if((c[(c[b>>2]|0)+164>>2]|0)>-1)qa(99324,99305,463,99338);g=a+48|0;d=$H(c[((c[a>>2]&3|0)==3?a:g)+40>>2]|0)|0;i=a+-48|0;f=$H(c[((c[a>>2]&3|0)==2?a:i)+40>>2]|0)|0;h=c[a>>2]&3;b=(c[(c[(c[((h|0)==2?a:i)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?a:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[b>>2]|0)+170>>1]|0)|0;if((c[d+8>>2]|0)==-1)aI(c[d>>2]|0,0,b);else aI(c[f>>2]|0,0,0-b|0);bI(a);return cI(d,f)|0}function WH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]|0;g=c[a+4>>2]|0;while(1){a=b<<1;f=a+2|0;a=a|1;if(!((a|0)<(g|0)?(c[(c[h+(a<<2)>>2]|0)+4>>2]|0)<(c[(c[h+(b<<2)>>2]|0)+4>>2]|0):0))a=b;if((f|0)>=(g|0))break;d=h+(f<<2)|0;e=c[d>>2]|0;if((f|0)==(b|0)?1:(c[e+4>>2]|0)>=(c[(c[h+(a<<2)>>2]|0)+4>>2]|0))break;i=h+(b<<2)|0;a=c[i>>2]|0;c[i>>2]=e;c[d>>2]=a;c[(c[i>>2]|0)+8>>2]=b;c[a+8>>2]=f;b=f}return}function XH(){NH(c[(c[(c[46484]|0)+16>>2]|0)+192>>2]|0,0,1)|0;YH(c[(c[(c[46484]|0)+16>>2]|0)+192>>2]|0,0);return}function YH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;d=0;while(1){a=c[f>>2]|0;e=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!e){e=0;break}if((e|0)!=(b|0))YH(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e);d=d+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(b|0)){YH(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,d);a=c[f>>2]|0}e=e+1|0}if(b|0)ZH(b);return}function ZH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;e=c[d+16>>2]|0;if((c[e+280>>2]|0)==(a|0))i=1;else{e=c[((b|0)==2?a:a+-48|0)+40>>2]|0;i=-1;d=e;e=c[e+16>>2]|0}g=c[e+180>>2]|0;b=0;f=0;while(1){h=c[g+(f<<2)>>2]|0;if(!h)break;b=(_H(h,d,i)|0)+b|0;f=f+1|0}g=c[e+172>>2]|0;e=0;while(1){f=c[g+(e<<2)>>2]|0;if(!f)break;b=(_H(f,d,i)|0)+b|0;e=e+1|0}c[(c[a+16>>2]|0)+160>>2]=b;return}function _H(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=(h|0)==3?a:a+48|0;e=c[i+40>>2]|0;if((e|0)==(b|0))e=c[((h|0)==2?a:a+-48|0)+40>>2]|0;g=c[b+16>>2]|0;f=c[(c[e+16>>2]|0)+288>>2]|0;if((c[g+284>>2]|0)<=(f|0)?(f|0)<=(c[g+288>>2]|0):0){f=c[a+16>>2]|0;if((c[f+164>>2]|0)>-1)e=c[f+160>>2]|0;else e=0;g=1;e=e-(c[f+156>>2]|0)|0}else{g=0;e=c[(c[a+16>>2]|0)+156>>2]|0}i=(c[((d|0)>0?((h|0)==2?a:a+-48|0):i)+40>>2]|0)==(b|0)?1:-1;return (((g?i:0-i|0)|0)<0?0-e|0:e)|0}function $H(a){a=a|0;var b=0,d=0;a=c[(c[a+16>>2]|0)+280>>2]|0;while(1){b=a+12|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[d+12>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function aI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=a+16|0;e=c[h>>2]|0;g=e+232|0;c[g>>2]=(c[g>>2]|0)+d;g=0;while(1){f=c[(c[e+264>>2]|0)+(g<<2)>>2]|0;if(!f){g=0;break}f=c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0;if((f|0)!=(b|0)){aI(f,a,d);e=c[h>>2]|0}g=g+1|0}while(1){f=c[(c[e+272>>2]|0)+(g<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((f|0)!=(b|0)){aI(f,a,d);e=c[h>>2]|0}g=g+1|0}return}function bI(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;d=(c[b+16>>2]|0)+164|0;if((c[d>>2]|0)>-1){Pw(1,99427,h)|0;bb(185768,1)}g=c[46485]|0;c[d>>2]=g;d=c[46486]|0;c[46485]=g+1;c[d+(g<<2)>>2]=b;d=c[b>>2]|0;g=b+48|0;e=c[((d&3|0)==3?b:g)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){f=c[46492]|0;d=c[46493]|0;c[46493]=d+1;c[f+(d<<2)>>2]=e;d=c[b>>2]|0}f=b+-48|0;e=c[((d&3|0)==2?b:f)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){i=c[46492]|0;d=c[46493]|0;c[46493]=d+1;c[i+(d<<2)>>2]=e;d=c[b>>2]|0}i=(c[((d&3|0)==3?b:g)+40>>2]|0)+16|0;d=c[i>>2]|0;a[d+157>>0]=1;e=c[d+272>>2]|0;d=d+276|0;g=c[d>>2]|0;c[d>>2]=g+1;c[e+(g<<2)>>2]=b;g=c[i>>2]|0;c[(c[g+272>>2]|0)+(c[g+276>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+180>>2]|0)+((c[i+276>>2]|0)+-1<<2)>>2]|0)){Pw(1,99461,h+8|0)|0;bb(185768,1)}i=(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16|0;e=c[i>>2]|0;a[e+157>>0]=1;f=c[e+264>>2]|0;e=e+268|0;g=c[e>>2]|0;c[e>>2]=g+1;c[f+(g<<2)>>2]=b;b=c[i>>2]|0;c[(c[b+264>>2]|0)+(c[b+268>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+172>>2]|0)+((c[i+268>>2]|0)+-1<<2)>>2]|0)){Pw(1,99496,h+16|0)|0;bb(185768,1)}else{l=h;return}}function cI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;while(1){g=a+12|0;d=c[g>>2]|0;if((d|0)==0|(d|0)==(a|0))break;else a=d}while(1){f=b+12|0;d=c[f>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else b=d}if((a|0)!=(b|0)){e=c[a+8>>2]|0;d=c[b+8>>2]|0;do if((e|0)>-1)if((d|0)==-1)h=a;else j=10;else if((d|0)>-1)if((e|0)==-1){h=b;break}else{j=10;break}else qa(99350,99305,327,99397);while(0);if((j|0)==10)h=(c[b+4>>2]|0)<(c[a+4>>2]|0)?a:b;c[f>>2]=h;c[g>>2]=h;c[h+4>>2]=(c[b+4>>2]|0)+(c[a+4>>2]|0);if((c[h+8>>2]|0)>-1)i=h;else qa(99408,99305,335,99397)}else i=a;return i|0}function dI(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=$H(a)|0;if(d){k=c[d>>2]&3;if(((c[(c[(c[((k|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((k|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)!=(e[(c[d+16>>2]|0)+170>>1]|0|0))f=3}else{d=0;f=3}a:do if((f|0)==3){k=a+16|0;j=0;while(1){f=c[k>>2]|0;i=c[(c[f+180>>2]|0)+(j<<2)>>2]|0;if(!i){j=0;break}f=i+16|0;g=i+-48|0;h=c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0;do if((c[(c[f>>2]|0)+164>>2]|0)>-1){if((h|0)!=(b|0))d=dI(h,a,d)|0}else if(($H(h)|0)!=(l|0)){if(d|0?(m=c[i>>2]&3,h=c[d>>2]&3,((c[(c[(c[((m|0)==2?i:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[f>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((h|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=i}while(0);j=j+1|0}while(1){f=c[(c[f+172>>2]|0)+(j<<2)>>2]|0;if(!f)break a;g=f+16|0;h=f+48|0;i=c[((c[f>>2]&3|0)==3?f:h)+40>>2]|0;do if((c[(c[g>>2]|0)+164>>2]|0)>-1){if((i|0)!=(b|0))d=dI(i,a,d)|0}else if(($H(i)|0)!=(l|0)){if(d|0?(i=c[f>>2]&3,m=c[d>>2]&3,((c[(c[(c[((i|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((i|0)==3?f:h)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[g>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((m|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=f}while(0);j=j+1|0;f=c[k>>2]|0}}while(0);return d|0}function eI(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;d=c[l>>2]|0;c[d+280>>2]=b;a=1;h=0;while(1){g=c[(c[d+172>>2]|0)+(h<<2)>>2]|0;if(!g){h=0;break}f=c[g+16>>2]|0;if(((c[f+164>>2]|0)<=-1?(i=c[g>>2]&3,j=g+48|0,k=c[(c[((i|0)==3?g:j)+40>>2]|0)+16>>2]|0,(c[k+280>>2]|0)==0):0)?((c[(c[(c[((i|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[k+232>>2]|0)|0)==(e[f+170>>1]|0|0):0){bI(g);a=(eI(c[((c[g>>2]&3|0)==3?g:j)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}while(1){f=c[(c[d+180>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;if(((c[g+164>>2]|0)<=-1?(m=c[f>>2]&3,n=f+-48|0,o=c[(c[((m|0)==2?f:n)+40>>2]|0)+16>>2]|0,(c[o+280>>2]|0)==0):0)?((c[o+232>>2]|0)-(c[(c[(c[((m|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)==(e[g+170>>1]|0|0):0){bI(f);a=(eI(c[((c[f>>2]&3|0)==2?f:n)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}return a|0}function fI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=xx(a,99560)|0;if(!d)d=30;else d=a2(d)|0;return yH(a,b,c,d)|0}function gI(a){a=+a;return +((c[46369]|0)==0?a:+h[22916]-a)}function hI(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0;r=l;l=l+16|0;q=r;c[46494]=c[(c[(c[d+64>>2]|0)+8>>2]|0)+4>>2];iI(d);i=c[d+16>>2]|0;t=+h[i+32>>3];s=+h[i+40>>3];jI(e,99571,+h[b+352>>3]);jI(e,99578,t*.013888888888888888);jI(e,99578,s*.013888888888888888);kI(e);i=Sy(d)|0;while(1){if(!i)break;g=i+16|0;if(!(a[(c[g>>2]|0)+118>>0]|0)){lI(e,99580,JA(ry(i)|0)|0);p=(c[g>>2]|0)+16|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];mI(e,q);if(!(a[(c[(c[g>>2]|0)+104>>2]|0)+82>>0]|0)){b=ez(i)|0;b=nI(b,c[c[(c[g>>2]|0)+104>>2]>>2]|0)|0}else b=JA(yx(i,c[46384]|0)|0)|0;jI(e,99578,+h[(c[g>>2]|0)+32>>3]);jI(e,99578,+h[(c[g>>2]|0)+40>>3]);lI(e,99578,b);lI(e,99578,OL(i,c[46387]|0,108041)|0);lI(e,99578,c[c[(c[g>>2]|0)+8>>2]>>2]|0);lI(e,99578,OL(i,c[46378]|0,134232)|0);b=OL(i,c[46379]|0,191979)|0;if(!(a[b>>0]|0))b=OL(i,c[46378]|0,131718)|0;lI(e,99578,b);kI(e)}i=Ty(d,i)|0}o=f<<24>>24==0;n=Sy(d)|0;while(1){if(!n)break;m=Ex(d,n)|0;while(1){if(!m)break;if(o){f=191979;j=191979}else{j=xx(m,108373)|0;f=xx(m,108382)|0;f=f|0?f:191979;j=j|0?j:191979}p=m+16|0;b=c[p>>2]|0;k=c[b+8>>2]|0;a:do if(k){i=c[k+4>>2]|0;b=0;g=0;while(1){if((b|0)>=(i|0))break;u=(c[(c[k>>2]|0)+(b*48|0)+4>>2]|0)+g|0;b=b+1|0;g=u}lI(e,0,108368);oI(e,c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0,j);oI(e,c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0,f);pI(e,g);f=0;while(1){b=c[p>>2]|0;g=c[b+8>>2]|0;if((f|0)>=(c[g+4>>2]|0))break a;i=c[g>>2]|0;g=c[i+(f*48|0)>>2]|0;i=c[i+(f*48|0)+4>>2]|0;b=0;while(1){if((b|0)>=(i|0))break;u=g+(b<<4)|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];mI(e,q);b=b+1|0}f=f+1|0}}while(0);if(c[b+96>>2]|0){u=ez(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;lI(e,99578,nI(u,c[c[(c[p>>2]|0)+96>>2]>>2]|0)|0);u=(c[(c[p>>2]|0)+96>>2]|0)+56|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];mI(e,q)}lI(e,99578,OL(m,c[46415]|0,108041)|0);lI(e,99578,OL(m,c[46406]|0,134232)|0);kI(e);m=Gx(d,m)|0}n=Ty(d,n)|0}qI(99586,e);l=r;return}function iI(a){a=a|0;var b=0.0;if(c[46369]|0){a=c[a+16>>2]|0;b=+h[a+24>>3]+ +h[a+40>>3];h[22916]=b;h[22917]=b*.013888888888888888}return}function jI(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;if(b|0)qI(b,a);h[e>>3]=c;Y0(d,99592,e)|0;qI(d,a);l=f;return}function kI(b){b=b|0;a[191875]=10;lb[c[46494]&127](b,191875)|0;return}function lI(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)qI(b,a);qI(c,a);return}function mI(a,b){a=a|0;b=b|0;var d=0.0;jI(a,99578,+h[b>>3]*.013888888888888888);if(!(c[46369]|0))d=+h[b+8>>3];else d=+h[22916]-+h[b+8>>3];jI(a,99578,d*.013888888888888888);return}function nI(a,b){a=a|0;b=b|0;var c=0;c=Oz(a,b)|0;b=JA(c)|0;Qz(a,c)|0;return b|0}function oI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!(a[(c[d+16>>2]|0)+118>>0]|0))d=JA(ry(d)|0)|0;else{f=ez(d)|0;d=nI(f,(A$(ry(d)|0,58)|0)+1|0)|0}lI(b,99578,d);if(e|0?a[e>>0]|0:0)lI(b,104958,JA(e)|0);return}function pI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;qI(99578,a);c[f>>2]=b;Y0(e,134313,f)|0;qI(e,a);l=d;return}function qI(a,b){a=a|0;b=b|0;lb[c[46494]&127](b,a)|0;return}function rI(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=l;l=l+2288|0;W=Y+208|0;V=Y+192|0;U=Y+176|0;T=Y+160|0;S=Y+144|0;R=Y+128|0;P=Y+112|0;O=Y+96|0;N=Y+80|0;M=Y+64|0;L=Y+56|0;K=Y+48|0;X=Y+32|0;Q=Y+24|0;J=Y;G=Y+1264|0;H=Y+224|0;I=d+16|0;C=(e[(c[I>>2]|0)+178>>1]|0)>2;CG(1);iI(d);Tw(H,1024,Y+240|0);LM(d,1,99597,191979)|0;LM(d,1,99601,191979)|0;c[46376]=LM(d,1,138034,191979)|0;c[46375]=LM(d,1,137966,191979)|0;LM(d,2,99597,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0;if(i&16){LM(d,1,99607,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&1){LM(d,2,99611,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&32){LM(d,2,99607,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&2){LM(d,2,99614,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&4){LM(d,2,99622,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(!(i&8)){v=0;w=0;x=0}else{x=LM(d,0,99611,191979)|0;w=LM(d,0,99630,191979)|0;v=LM(d,0,99637,191979)|0}z=LM(d,0,99645,191979)|0;A=H+4|0;B=H+8|0;u=0;i=0;y=Sy(d)|0;while(1){if(!y)break;t=y+16|0;k=c[t>>2]|0;o=+h[k+16>>3];j=(c[46369]|0)==0;if(C){if(j)m=+h[k+24>>3];else m=+h[22916]-+h[k+24>>3];q=+h[(c[k+132>>2]|0)+16>>3]*72.0;h[J>>3]=o;h[J+8>>3]=m;h[J+16>>3]=q;Y0(G,99648,J)|0;Ww(H,G)|0;j=3;while(1){if((j|0)>=(e[(c[I>>2]|0)+178>>1]|0))break;h[Q>>3]=+h[(c[(c[t>>2]|0)+132>>2]|0)+(j<<3)>>3]*72.0;Y0(G,99663,Q)|0;Ww(H,G)|0;j=j+1|0}j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;s=c[H>>2]|0;c[A>>2]=s;zx(y,99597,s)|0;s=y}else{if(j)m=+h[k+24>>3];else m=+h[22916]-+h[k+24>>3];h[X>>3]=o;h[X+8>>3]=m;Y0(G,99669,X)|0;zx(y,99597,G)|0;s=y}h[K>>3]=+h[(c[t>>2]|0)+80>>3]*.013888888888888888;Y0(G,99592,K)|0;rx(s,c[46375]|0,G)|0;j=c[t>>2]|0;h[L>>3]=(+h[j+96>>3]+ +h[j+88>>3])*.013888888888888888;Y0(G,99592,L)|0;rx(s,c[46376]|0,G)|0;j=c[t>>2]|0;k=c[j+108>>2]|0;if((k|0)!=0?(a[k+81>>0]|0)!=0:0){q=+h[k+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[M>>3]=+h[k+56>>3];h[M+8>>3]=q;Y0(G,99669,M)|0;zx(s,99607,G)|0;j=c[t>>2]|0}if(b$(c[c[j+8>>2]>>2]|0,103194)|0){if(c[46400]|0?(UJ(y)|0)<<24>>24:0){k=c[(c[t>>2]|0)+12>>2]|0;r=k+8|0;j=c[r>>2]|0;if((j|0)<3){j=xx(s,99679)|0;if(!j)j=8;else j=a2(j)|0;j=(j|0)<3?8:j}p=k+44|0;q=1.0/+(j|0);n=0;while(1){if((n|0)>=(j|0))break;if((n|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32}if((c[r>>2]|0)>2){k=c[p>>2]|0;if(!(c[46369]|0))m=+h[k+(n<<4)+8>>3]*.013888888888888888;else m=+h[22917]-+h[k+(n<<4)+8>>3]*.013888888888888888;h[N>>3]=+h[k+(n<<4)>>3]*.013888888888888888;h[N+8>>3]=m;Y0(G,99692,N)|0}else{k=c[t>>2]|0;m=q*+(n|0)*6.283185307179586;o=+h[k+32>>3]*.5*+E(+m);if(!(c[46369]|0))m=+h[k+40>>3]*.5*+F(+m);else m=+h[22917]-+h[k+40>>3]*.5*+F(+m);h[O>>3]=o;h[O+8>>3]=m;Y0(G,99692,O)|0}Ww(H,G)|0;n=n+1|0}k=c[46400]|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;rx(s,k,t)|0}}else{sI(y,c[j+12>>2]|0,H);Yw(H)|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;zx(s,99601,t)|0}a:do if((c[46367]|0)>0){t=Ex(d,y)|0;j=u;while(1){if(!t)break a;s=t+16|0;k=c[s>>2]|0;do if((a[k+112>>0]|0)!=6?(D=c[k+8>>2]|0,(D|0)!=0):0){r=0;k=D;while(1){if((r|0)>=(c[k+4>>2]|0))break;if((r|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=59;k=c[(c[s>>2]|0)+8>>2]|0}k=c[k>>2]|0;if(c[k+(r*48|0)+8>>2]|0){if(!(c[46369]|0))m=+h[k+(r*48|0)+24>>3];else m=+h[22916]-+h[k+(r*48|0)+24>>3];h[P>>3]=+h[k+(r*48|0)+16>>3];h[P+8>>3]=m;Y0(G,99702,P)|0;Ww(H,G)|0;i=1;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}if(c[k+(r*48|0)+12>>2]|0){if(!(c[46369]|0))m=+h[k+(r*48|0)+40>>3];else m=+h[22916]-+h[k+(r*48|0)+40>>3];h[R>>3]=+h[k+(r*48|0)+32>>3];h[R+8>>3]=m;Y0(G,99715,R)|0;Ww(H,G)|0;j=1}p=0;while(1){k=c[(c[s>>2]|0)+8>>2]|0;n=c[k>>2]|0;if((p|0)>=(c[n+(r*48|0)+4>>2]|0))break;if((p|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}else k=n;u=c[k+(r*48|0)>>2]|0;q=+h[u+(p<<4)+8>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[S>>3]=+h[u+(p<<4)>>3];h[S+8>>3]=q;Y0(G,99669,S)|0;Ww(H,G)|0;p=p+1|0}r=r+1|0}k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}a[k>>0]=0;k=c[H>>2]|0;c[A>>2]=k;zx(t,99597,k)|0;k=c[s>>2]|0;n=c[k+96>>2]|0;if(n){q=+h[n+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[T>>3]=+h[n+56>>3];h[T+8>>3]=q;Y0(G,99669,T)|0;zx(t,99611,G)|0;k=c[s>>2]|0}n=c[k+108>>2]|0;do if(n){if(!(a[n+81>>0]|0))break;q=+h[n+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[U>>3]=+h[n+56>>3];h[U+8>>3]=q;Y0(G,99669,U)|0;zx(t,99607,G)|0;k=c[s>>2]|0}while(0);n=c[k+100>>2]|0;if(n){q=+h[n+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[V>>3]=+h[n+56>>3];h[V+8>>3]=q;Y0(G,99669,V)|0;zx(t,99614,G)|0;k=c[s>>2]|0}k=c[k+104>>2]|0;if(!k)break;q=+h[k+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[W>>3]=+h[k+56>>3];h[W+8>>3]=q;Y0(G,99669,W)|0;zx(t,99622,G)|0}while(0);t=Gx(d,t)|0}}else j=u;while(0);u=j;y=Ty(d,y)|0}tI(d,z,x,w,v);Xw(H);if(b[(c[I>>2]|0)+136>>1]&1)FM(d);c[f>>2]=i;c[g>>2]=u;CG(0);l=Y;return}function sI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+1056|0;k=n;j=n+32|0;m=b+48|0;if(!(c[m>>2]|0)){e=c[a+16>>2]|0;i=+h[e+16>>3];if(!(c[46369]|0)){g=+h[e+24>>3];f=g+ +h[b+24>>3];g=g+ +h[b+40>>3]}else{g=+h[e+24>>3];f=+h[22916]-+h[b+24>>3]-g;g=+h[22916]-+h[b+40>>3]-g}o=i+ +h[b+32>>3];h[k>>3]=i+ +h[b+16>>3];h[k+8>>3]=f;h[k+16>>3]=o;h[k+24>>3]=g;Y0(j,99753,k)|0;Ww(d,j)|0}b=b+56|0;e=0;while(1){if((e|0)>=(c[m>>2]|0))break;sI(a,c[(c[b>>2]|0)+(e<<2)>>2]|0,d);e=e+1|0}l=n;return}function tI(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+1088|0;o=s+56|0;q=s+48|0;p=s+32|0;j=s;n=s+64|0;r=b+16|0;i=c[r>>2]|0;if(!(c[46369]|0)){k=+h[i+24>>3];m=+h[i+40>>3]}else{m=+h[22916];k=m-+h[i+24>>3];m=m-+h[i+40>>3]}t=+h[i+32>>3];h[j>>3]=+h[i+16>>3];h[j+8>>3]=k;h[j+16>>3]=t;h[j+24>>3]=m;Y0(n,99728,j)|0;rx(b,d,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;if((i|0)!=0?(a[c[i>>2]>>0]|0)!=0:0){t=+h[i+64>>3];t=(c[46369]|0)==0?t:+h[22916]-t;h[p>>3]=+h[i+56>>3];h[p+8>>3]=t;Y0(n,99669,p)|0;rx(b,e,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;t=+h[i+32>>3];h[q>>3]=+h[i+24>>3]*.013888888888888888;Y0(n,99748,q)|0;rx(b,f,n)|0;h[o>>3]=t*.013888888888888888;Y0(n,99748,o)|0;rx(b,g,n)|0;i=1}else i=1;while(1){j=c[r>>2]|0;if((i|0)>(c[j+180>>2]|0))break;tI(c[(c[j+184>>2]|0)+(i<<2)>>2]|0,d,e,f,g);i=i+1|0}l=s;return}function uI(a){a=a|0;var b=0;b=l;l=l+16|0;rI(a,b,b+4|0);l=b;return}function vI(){return Cw(20636,c[4555]|0)|0}function wI(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function xI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if((a|0)<=(e|0))if((a|0)<(e|0))a=-1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return ((b|0)>(d|0)?1:((b|0)<(d|0))<<31>>31)|0}else a=1;return a|0}function yI(a){a=a|0;yw(a)|0;return}function zI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];b=AI(e)|0;if((nb[c[a>>2]&63](a,b,1)|0)!=(b|0))D_(b);l=d;return}function AI(a){a=a|0;var b=0,d=0,e=0;b=uH(16)|0;e=a;d=c[e+4>>2]|0;a=b+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function BI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[g>>2]=b;c[g+4>>2]=d;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];b=AI(f)|0;if((nb[c[a>>2]&63](a,b,1)|0)!=(b|0))D_(b);l=e;return}function CI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d;g=b;f=c[g+4>>2]|0;b=e+8|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;b=(nb[c[a>>2]&63](a,e,4)|0)!=0&1;l=d;return b|0}function DI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f+8>>2]=b;c[f+12>>2]=d;d=(nb[c[a>>2]&63](a,f,4)|0)!=0&1;l=e;return d|0}function EI(a){a=a|0;return Ew(a)|0}function FI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=uH((Ew(a)|0)<<3)|0;b=d;a=Aw(a)|0;while(1){if(!a)break;g=a+8|0;f=c[g+4>>2]|0;e=b;c[e>>2]=c[g>>2];c[e+4>>2]=f;b=b+8|0;a=c[a>>2]|0}return d|0}function GI(){var a=0,b=0,d=0,e=0;a=vH(40)|0;b=a;d=20672;e=b+36|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[a+36>>2]=0;return Cw(a,c[4555]|0)|0}function HI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;d=d+36|0;a=c[d>>2]|0;if(!a)a=vH(20)|0;else c[d>>2]=c[a>>2];f=b+8|0;e=c[f+4>>2]|0;d=a+8|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+16>>2]=c[b+16>>2];return a|0}function II(a,b,d){a=a|0;b=b|0;d=d|0;d=d+36|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}function JI(a){a=a|0;nb[c[a>>2]&63](a,0,64)|0;return}function KI(a){a=a|0;var b=0,d=0;b=c[a+4>>2]|0;yw(a)|0;a=c[b+36>>2]|0;while(1){if(!a)break;d=c[a>>2]|0;D_(a);a=d}D_(b);return}function LI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[g+8>>2]=b;c[g+12>>2]=d;c[g+16>>2]=e;e=c[(nb[c[a>>2]&63](a,g,1)|0)+16>>2]|0;l=f;return e|0}function MI(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+160|0;q=t+144|0;d=t+48|0;j=t+128|0;k=t+112|0;m=t+96|0;n=t+80|0;o=t+32|0;p=t+16|0;r=t;s=a+16|0;a=c[s>>2]|0;e=+h[a+16>>3];f=+h[a+24>>3];g=+h[a+32>>3];i=+h[a+40>>3];if((b+-1|0)>>>0<2){NI(j,e,i);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];OI(d,q);p=d+16|0;NI(k,g,f);c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];OI(m,q);c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2]}else{NI(n,e,f);c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];OI(d,q);n=d+16|0;NI(o,g,i);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];OI(p,q);c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2]}a=(c[s>>2]|0)+16|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];a=c[(c[s>>2]|0)+12>>2]|0;if(!a)a=1;else{a=a+56|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];OI(r,q);c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];a=1}while(1){d=c[s>>2]|0;if((a|0)>(c[d+180>>2]|0))break;MI(c[(c[d+184>>2]|0)+(a<<2)>>2]|0,b);a=a+1|0}l=t;return}function NI(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function OI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;g=d+16|0;e=d;f=(c[46495]|0)*90|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];ZG(e,g,f);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];h[b>>3]=+h[b>>3]-+h[22918];e=b+8|0;h[e>>3]=+h[e>>3]-+h[22919];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function PI(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+1168|0;s=w+144|0;v=w+96|0;u=w+64|0;t=w+48|0;o=w+32|0;p=w+16|0;q=w;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;r=b+16|0;m=c[(c[r>>2]|0)+116>>2]|0;c[46495]=m&3;m=m&1;a[191877]=m;if(!(m<<24>>24))RI(b);else QI(b);SI(b);m=c[r>>2]|0;e=c[m+12>>2]|0;do if(e|0?(a[e+81>>0]|0)==0:0){g=e+24|0;c[t>>2]=c[g>>2];c[t+4>>2]=c[g+4>>2];c[t+8>>2]=c[g+8>>2];c[t+12>>2]=c[g+12>>2];n=+h[t>>3]+16.0;h[t>>3]=n;g=t+8|0;f=+h[g>>3]+8.0;h[g>>3]=f;g=(a[m+275>>0]&1)!=0;if(a[191877]|0){if(g){i=m+32|0;h[i>>3]=+h[i>>3]+f}else{i=m+16|0;h[i>>3]=+h[i>>3]-f}g=m+40|0;f=+h[g>>3];i=m+24|0;j=+h[i>>3];k=f-j;if(!(n>k))break;n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n;break}i=(c[46495]|0)==0;do if(g)if(i){i=m+40|0;h[i>>3]=+h[i>>3]+f;break}else{i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else if(i){i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else{i=m+40|0;h[i>>3]=+h[i>>3]+f;break}while(0);g=m+32|0;f=+h[g>>3];i=m+16|0;j=+h[i>>3];k=f-j;if(n>k){n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n}}while(0);if(d){switch(c[46495]|0){case 0:{q=m+16|0;c[45836]=c[q>>2];c[45837]=c[q+4>>2];c[45838]=c[q+8>>2];c[45839]=c[q+12>>2];break}case 1:{NI(o,-+h[m+40>>3],+h[m+16>>3]);c[45836]=c[o>>2];c[45837]=c[o+4>>2];c[45838]=c[o+8>>2];c[45839]=c[o+12>>2];break}case 2:{NI(p,+h[m+16>>3],-+h[m+40>>3]);c[45836]=c[p>>2];c[45837]=c[p+4>>2];c[45838]=c[p+8>>2];c[45839]=c[p+12>>2];break}case 3:{NI(q,+h[m+24>>3],+h[m+16>>3]);c[45836]=c[q>>2];c[45837]=c[q+4>>2];c[45838]=c[q+8>>2];c[45839]=c[q+12>>2];break}default:{}}TI(b);e=c[(c[r>>2]|0)+12>>2]|0}if(e|0?(a[e+81>>0]|0)==0:0){c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];UI(b,s)}if(!0){l=w;return}if(!(a[191877]|0)){n=+h[22919];k=+h[22918];h[v>>3]=n;h[v+8>>3]=k;h[v+16>>3]=n;h[v+24>>3]=k;h[v+32>>3]=-k;h[v+40>>3]=-n;Y0(s,99989,v)|0}else{k=+h[22918];n=+h[22919];h[u>>3]=k;h[u+8>>3]=n;h[u+16>>3]=k;h[u+24>>3]=n;Y0(s,99774,u)|0}n1(s)|0;ab()}function QI(b){b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=b+16|0;if(((fz(b)|0)!=(b|0)?(g=c[j>>2]|0,i=c[g+12>>2]|0,(i|0)!=0):0)?(a[i+81>>0]|0)==0:0){d=a[g+275>>0]|0;if(!(d&1)){f=+h[g+16>>3]+ +h[g+96>>3]*.5;b=g+104|0}else{f=+h[g+32>>3]-+h[g+64>>3]*.5;b=g+72|0}e=+h[b>>3];b=d<<24>>24;do if(!(b&4))if(!(b&2)){e=(+h[g+40>>3]+ +h[g+24>>3])*.5;break}else{e=+h[g+40>>3]-e*.5;break}else e=+h[g+24>>3]+e*.5;while(0);h[i+56>>3]=f;h[i+64>>3]=e;a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[j>>2]|0;if((b|0)>(c[d+180>>2]|0))break;QI(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function RI(b){b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0;k=b+16|0;if(((fz(b)|0)!=(b|0)?(i=c[k>>2]|0,j=c[i+12>>2]|0,(j|0)!=0):0)?(a[j+81>>0]|0)==0:0){d=a[i+275>>0]|0;if(!(d&1)){g=+h[i+24>>3]+ +h[i+56>>3]*.5;b=i+48|0}else{g=+h[i+40>>3]-+h[i+88>>3]*.5;b=i+80|0}f=+h[b>>3];b=d<<24>>24;do if(!(b&4)){e=+h[i+16>>3];if(!(b&2)){e=(+h[i+32>>3]+e)*.5;break}else{e=e+f*.5;break}}else e=+h[i+32>>3]-f*.5;while(0);h[j+56>>3]=e;h[j+64>>3]=g;a[(c[(c[k>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[k>>2]|0;if((b|0)>(c[d+180>>2]|0))break;RI(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function SI(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=l;l=l+544|0;L=S+504|0;R=S+416|0;Q=S+376|0;K=S+352|0;J=S+312|0;I=S+288|0;H=S+248|0;M=S+200|0;B=S+152|0;O=S+96|0;p=S+488|0;C=S+456|0;D=S+424|0;E=S+384|0;F=S+360|0;G=S+320|0;w=S+296|0;x=S+256|0;y=S+232|0;z=S+168|0;A=S+136|0;f=S+56|0;N=S+16|0;P=S;o=e+16|0;u=c[o>>2]|0;g=b[u+136>>1]&14;u=d[u+113>>0]|0;if(!((u&54|0)==0?(u&1|0)==0|(c[46368]|0)!=0:0)){u=g<<16>>16==0;n=Sy(e)|0;h=0;j=0;i=0;while(1){if(!n)break;g=c[(c[n+16>>2]|0)+108>>2]|0;do if(g)if(!(a[g+81>>0]|0)){i=i+1|0;break}else{h=h+1|0;break}while(0);m=Ex(e,n)|0;g=j;while(1){if(!m)break;k=c[m+16>>2]|0;j=c[k+108>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+100>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+104>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+96>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);m=Gx(e,m)|0}n=Ty(e,n)|0;j=g}if(!(a[(c[o>>2]|0)+113>>0]&8))o=0;else o=WI(e)|0;t=j+i|0;if(t|0){q=h+j+o+(ay(e)|0)|0;r=uH(q*40|0)|0;s=uH(t*40|0)|0;NI(M,2147483647.0,2147483647.0);g=M+16|0;NI(p,-2147483647.0,-2147483647.0);c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];g=s;i=r;n=Sy(e)|0;while(1){if(!n)break;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];XI(C,n,i,L);c[M>>2]=c[C>>2];c[M+4>>2]=c[C+4>>2];c[M+8>>2]=c[C+8>>2];c[M+12>>2]=c[C+12>>2];c[M+16>>2]=c[C+16>>2];c[M+20>>2]=c[C+20>>2];c[M+24>>2]=c[C+24>>2];c[M+28>>2]=c[C+28>>2];h=c[(c[n+16>>2]|0)+108>>2]|0;do if(h)if(!(a[h+81>>0]|0)){c[L>>2]=c[B>>2];c[L+4>>2]=c[B+4>>2];c[L+8>>2]=c[B+8>>2];c[L+12>>2]=c[B+12>>2];ZI(h,i,g,0,L);g=g+40|0;break}else{i=i+40|0;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(D,h,i,L);c[M>>2]=c[D>>2];c[M+4>>2]=c[D+4>>2];c[M+8>>2]=c[D+8>>2];c[M+12>>2]=c[D+12>>2];c[M+16>>2]=c[D+16>>2];c[M+20>>2]=c[D+20>>2];c[M+24>>2]=c[D+24>>2];c[M+28>>2]=c[D+28>>2];break}while(0);m=Ex(e,n)|0;i=i+40|0;while(1){if(!m)break;k=m+16|0;h=c[k>>2]|0;j=c[h+96>>2]|0;a:do if(!j)v=52;else{do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){gL(F,e,m);c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[H>>2]=c[j>>2];Pw(0,100801,H)|0;break a}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(E,j,i,L);c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[M+8>>2]=c[E+8>>2];c[M+12>>2]=c[E+12>>2];c[M+16>>2]=c[E+16>>2];c[M+20>>2]=c[E+20>>2];c[M+24>>2]=c[E+24>>2];c[M+28>>2]=c[E+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0;v=52}while(0);b:do if((v|0)==52){v=0;j=c[h+104>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){_I(w,m);c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];c[L+8>>2]=c[w+8>>2];c[L+12>>2]=c[w+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[I>>2]=c[j>>2];Pw(0,100836,I)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(G,j,i,L);c[M>>2]=c[G>>2];c[M+4>>2]=c[G+4>>2];c[M+8>>2]=c[G+8>>2];c[M+12>>2]=c[G+12>>2];c[M+16>>2]=c[G+16>>2];c[M+20>>2]=c[G+20>>2];c[M+24>>2]=c[G+24>>2];c[M+28>>2]=c[G+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+100>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){$I(y,m);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];c[L+8>>2]=c[y+8>>2];c[L+12>>2]=c[y+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[J>>2]=c[j>>2];Pw(0,100876,J)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(x,j,i,L);c[M>>2]=c[x>>2];c[M+4>>2]=c[x+4>>2];c[M+8>>2]=c[x+8>>2];c[M+12>>2]=c[x+12>>2];c[M+16>>2]=c[x+16>>2];c[M+20>>2]=c[x+20>>2];c[M+24>>2]=c[x+24>>2];c[M+28>>2]=c[x+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+108>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){gL(A,e,m);c[L>>2]=c[A>>2];c[L+4>>2]=c[A+4>>2];c[L+8>>2]=c[A+8>>2];c[L+12>>2]=c[A+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[K>>2]=c[j>>2];Pw(0,100916,K)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(z,j,i,L);c[M>>2]=c[z>>2];c[M+4>>2]=c[z+4>>2];c[M+8>>2]=c[z+8>>2];c[M+12>>2]=c[z+12>>2];c[M+16>>2]=c[z+16>>2];c[M+20>>2]=c[z+20>>2];c[M+24>>2]=c[z+24>>2];c[M+28>>2]=c[z+28>>2]}while(0);i=i+40|0}}while(0);m=Gx(e,m)|0}n=Ty(e,n)|0}if(o|0){c[f>>2]=c[M>>2];c[f+4>>2]=c[M+4>>2];c[f+8>>2]=c[M+8>>2];c[f+12>>2]=c[M+12>>2];c[f+16>>2]=c[M+16>>2];c[f+20>>2]=c[M+20>>2];c[f+24>>2]=c[M+24>>2];c[f+28>>2]=c[M+28>>2];c[f+32>>2]=i;h=L;g=h+40|0;do{c[h>>2]=c[f>>2];h=h+4|0;f=f+4|0}while((h|0)<(g|0));aJ(N,e,L);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];c[M+16>>2]=c[N+16>>2];c[M+20>>2]=c[N+20>>2];c[M+24>>2]=c[N+24>>2];c[M+28>>2]=c[N+28>>2]}a[O+32>>0]=PL(e,nx(e,0,100952,0)|0,1)|0;c[O>>2]=c[M>>2];c[O+4>>2]=c[M+4>>2];c[O+8>>2]=c[M+8>>2];c[O+12>>2]=c[M+12>>2];c[O+16>>2]=c[M+16>>2];c[O+20>>2]=c[M+20>>2];c[O+24>>2]=c[M+24>>2];c[O+28>>2]=c[M+28>>2];SP(r,q,s,t,O)|0;if(0)bJ(r,q,s,t,O);f=0;g=0;h=s;while(1){if((g|0)>=(t|0))break;if(a[h+36>>0]|0){O=c[h+32>>2]|0;a[O+81>>0]=1;N=O+56|0;cJ(P,h);c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];c[N+12>>2]=c[P+12>>2];kM(e,O);f=f+1|0}g=g+1|0;h=h+40|0}if(!0){if((f|0)!=(t|0)){c[R>>2]=f;c[R+4>>2]=t;Pw(0,100997,R)|0}}else{R=c[15686]|0;c[Q>>2]=f;c[Q+4>>2]=t;g1(R,100964,Q)|0}D_(r);D_(s)}}l=S;return}function TI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;i=l;l=l+48|0;e=i+32|0;f=i+16|0;g=i;if(+h[22918]!=0.0|+h[22919]!=0.0|(c[46495]|0)!=0){d=Sy(a)|0;while(1){if(!d)break;if(c[46495]|0)bN(d,0);b=d+16|0;j=(c[b>>2]|0)+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];OI(f,e);c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];b=c[(c[b>>2]|0)+108>>2]|0;if(b|0){j=b+56|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];OI(g,e);c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2]}a:do if((c[46367]|0)==1){b=Ex(a,d)|0;while(1){if(!b)break a;VI(b);b=Gx(a,b)|0}}while(0);d=Ty(a,d)|0}MI(a,c[(c[a+16>>2]|0)+116>>2]&3)}l=i;return}function UI(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0;i=b+16|0;j=c[i>>2]|0;g=a[j+275>>0]|0;b=g<<24>>24;do if(!(b&4)){e=+h[j+16>>3];if(!(b&2)){f=(+h[j+32>>3]+e)*.5;break}else{f=+h[d>>3]*.5+e;break}}else f=+h[j+32>>3]-+h[d>>3]*.5;while(0);if(!(g&1))e=+h[d+8>>3]*.5+ +h[j+24>>3];else e=+h[j+40>>3]-+h[d+8>>3]*.5;j=c[j+12>>2]|0;h[j+56>>3]=f;h[j+64>>3]=e;a[(c[(c[i>>2]|0)+12>>2]|0)+81>>0]=1;return}function VI(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+144|0;q=s+120|0;e=s+16|0;i=s+104|0;j=s+88|0;k=s+72|0;m=s+56|0;n=s+40|0;o=s+24|0;r=s;p=b+16|0;d=c[p>>2]|0;f=c[d+8>>2]|0;if(!f){if((a[191874]|0)==0?(a[d+112>>0]|0)!=6:0){q=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;r=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[e>>2]=q;c[e+4>>2]=r;Pw(1,100784,e)|0}}else{h=0;b=f;while(1){if((h|0)>=(c[b+4>>2]|0))break;g=c[b>>2]|0;b=c[g+(h*48|0)>>2]|0;e=c[g+(h*48|0)+4>>2]|0;f=c[g+(h*48|0)+8>>2]|0;g=c[g+(h*48|0)+12>>2]|0;d=0;while(1){if((d|0)>=(e|0))break;t=b+(d<<4)|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(i,q);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];c[t+12>>2]=c[i+12>>2];d=d+1|0}if(f|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+16|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(j,q);c[t>>2]=c[j>>2];c[t+4>>2]=c[j+4>>2];c[t+8>>2]=c[j+8>>2];c[t+12>>2]=c[j+12>>2]}if(g|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+32|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(k,q);c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2]}d=c[p>>2]|0;h=h+1|0;b=c[d+8>>2]|0}b=c[d+96>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];OI(m,q);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];d=c[p>>2]|0}b=c[d+108>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];OI(n,q);c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];d=c[p>>2]|0}b=c[d+100>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];OI(o,q);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];d=c[p>>2]|0}d=c[d+104>>2]|0;if(d|0){t=d+56|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(r,q);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2]}}l=s;return}function WI(b){b=b|0;var d=0,e=0,f=0;f=b+16|0;if((fz(b)|0)!=(b|0)?(d=c[(c[f>>2]|0)+12>>2]|0,(d|0)!=0):0){e=1;b=(a[d+81>>0]|0)!=0&1}else{e=1;b=0}while(1){d=c[f>>2]|0;if((e|0)>(c[d+180>>2]|0))break;d=(WI(c[(c[d+184>>2]|0)+(e<<2)>>2]|0)|0)+b|0;e=e+1|0;b=d}return b|0}function XI(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[191877]|0)==0;d=d+16|0;m=c[d>>2]|0;k=+h[(n?m+32|0:m+40|0)>>3];h[e+16>>3]=k*72.0;j=+h[(n?m+40|0:m+32|0)>>3];h[e+24>>3]=j*72.0;d=(c[d>>2]|0)+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*36.0;d=e+8|0;h[d>>3]=+h[d>>3]-j*36.0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];dJ(b,e,i);l=g;return}function YI(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[191877]|0)==0;m=d+24|0;k=+h[(n?m:d+32|0)>>3];h[e+16>>3]=k;j=+h[(n?d+32|0:m)>>3];h[e+24>>3]=j;d=d+56|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*.5;d=e+8|0;h[d>>3]=+h[d>>3]-j*.5;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];dJ(b,e,i);l=g;return}function ZI(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(f|0){f=d+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2]}if(!(a[191877]|0)){g=b+24|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2]}else{h[e>>3]=+h[b+32>>3];h[e+8>>3]=+h[b+24>>3]}c[e+32>>2]=b;a[e+36>>0]=0;c[d+32>>2]=e;return}function _I(a,b){a=a|0;b=b|0;b=fL(b)|0;do if(b){b=c[b>>2]|0;if(!(c[b+8>>2]|0)){b=c[b>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{b=b+16|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function $I(a,b){a=a|0;b=b|0;var d=0;b=fL(b)|0;do if(b){d=c[b>>2]|0;b=(c[b+4>>2]|0)+-1|0;if(!(c[d+(b*48|0)+12>>2]|0)){d=(c[d+(b*48|0)>>2]|0)+((c[d+(b*48|0)+4>>2]|0)+-1<<4)|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}else{d=d+(b*48|0)+32|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function aJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+112|0;k=q+72|0;n=q+32|0;o=q;p=d+16|0;j=1;while(1){f=c[p>>2]|0;if((j|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(j<<2)>>2]|0;g=k;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));aJ(n,f,k);g=e;h=n;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));j=j+1|0}if(((fz(d)|0)!=(d|0)?(m=c[(c[p>>2]|0)+12>>2]|0,m|0):0)?a[m+81>>0]|0:0){p=e+32|0;n=c[p>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];YI(o,m,n,k);c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];c[e+20>>2]=c[o+20>>2];c[e+24>>2]=c[o+24>>2];c[e+28>>2]=c[o+28>>2];c[p>>2]=(c[p>>2]|0)+40}g=b;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=q;return}function bJ(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+160|0;r=s+96|0;p=s+48|0;o=s;q=c[15686]|0;n=d[g+32>>0]|0;i=+h[g>>3];j=+h[g+8>>3];k=+h[g+16>>3];m=+h[g+24>>3];c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=n;h[o+16>>3]=i;h[o+24>>3]=j;h[o+32>>3]=k;h[o+40>>3]=m;g1(q,101039,o)|0;a:do if(0>=2){E1(101099,8,1,q)|0;o=0;while(1){if((o|0)>=(b|0))break;g=c[a+32>>2]|0;i=+h[a>>3];j=+h[a+8>>3];k=+h[a+16>>3];m=+h[a+24>>3];if(!g)n=191979;else n=c[c[g+32>>2]>>2]|0;c[p>>2]=o;h[p+8>>3]=i;h[p+16>>3]=j;h[p+24>>3]=k;h[p+32>>3]=m;c[p+40>>2]=g;c[p+44>>2]=n;g1(q,101108,p)|0;o=o+1|0;a=a+40|0}E1(101151,8,1,q)|0;g=0;while(1){if((g|0)>=(f|0))break a;b=d[e+36>>0]|0;i=+h[e+16>>3];j=+h[e+24>>3];k=+h[e>>3];m=+h[e+8>>3];p=c[c[e+32>>2]>>2]|0;c[r>>2]=g;c[r+4>>2]=e;c[r+8>>2]=b;h[r+16>>3]=i;h[r+24>>3]=j;h[r+32>>3]=k;h[r+40>>3]=m;c[r+48>>2]=p;g1(q,101160,r)|0;e=e+40|0;g=g+1|0}}while(0);l=s;return}function cJ(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b+8>>3]*.5+ +h[b+24>>3];h[a>>3]=+h[b>>3]*.5+ +h[b+16>>3];h[a+8>>3]=c;return}function dJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0;e=l;l=l+16|0;f=e;j=+h[b>>3];h[d>>3]=+h[(+h[d>>3]>3];g=d+8|0;i=+h[b+8>>3];h[g>>3]=+h[(+h[g>>3]>3];j=+h[b+16>>3]+j;h[f>>3]=j;i=+h[b+24>>3]+i;h[f+8>>3]=i;g=d+16|0;h[g>>3]=+h[(+h[g>>3]>j?g:f)>>3];b=d+24|0;h[b>>3]=+h[(+h[b>>3]>i?g:f)+8>>3];c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];l=e;return}function eJ(a){a=a|0;PI(a,1);return}function fJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e;b=ZL(xx(a,102500)|0)|0;if(b){b=gJ(b)|0;if(b|0){f=c[b+40>>2]|0;d=c[b+44>>2]|0;g=a+16|0;a=c[g>>2]|0;h[a+32>>3]=+(f|0)*.013888888888888888;h[a+40>>3]=+(d|0)*.013888888888888888;a=uH(12)|0;c[(c[g>>2]|0)+12>>2]=a;c[a>>2]=c[b+12>>2];c[a+4>>2]=((f|0)/-2|0)-(c[b+32>>2]|0);c[a+8>>2]=((d|0)/-2|0)-(c[b+36>>2]|0)}}else{c[d>>2]=ry(a)|0;Pw(0,101208,d)|0}l=e;return}function gJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+1152|0;i=p+24|0;h=p+8|0;e=p;f=p+120|0;j=p+44|0;k=p+40|0;m=p+36|0;n=p+32|0;o=p+28|0;d=c[46496]|0;if(!d){d=Cw(20708,c[4555]|0)|0;c[46496]=d}d=nb[c[d>>2]&63](d,b,512)|0;do if(!d){g=L1(b,135739)|0;if(!g){c[e>>2]=b;Pw(0,101257,e)|0;d=0;break}else{d=0;e=0}while(1){if(!(O0(f,1024,g)|0)){f=11;break}c[h>>2]=k;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=o;q=(N1(f,101285,h)|0)==4;e=q?1:e;if((a[f>>0]|0)!=37){q=(P0(f,101314)|0)==0;d=q?d:1}if((e|0)!=0&(d|0)!=0){f=12;break}}if((f|0)==11)if(!e){c[i>>2]=b;Pw(0,101319,i)|0;d=0}else f=12;if((f|0)==12){q=vH(64)|0;k=c[k>>2]|0;c[q+32>>2]=k;m=c[m>>2]|0;c[q+40>>2]=(c[n>>2]|0)-k;c[q+36>>2]=(c[o>>2]|0)-m;c[q+8>>2]=b;o=c[46497]|0;c[46497]=o+1;c[q+12>>2]=o;J1(j3(g)|0,j)|0;o=c[j+36>>2]|0;n=vH(o+1|0)|0;c[q+52>>2]=n;Z1(g,0,0)|0;g3(n,o,1,g)|0;a[n+o>>0]=0;o=c[46496]|0;nb[c[o>>2]&63](o,q,1)|0;a[q+16>>0]=d;d=q}s1(g)|0}while(0);l=p;return d|0}function hJ(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b+52>>2]|0);return}function iJ(a){a=a|0;D_(c[(c[a+16>>2]|0)+12>>2]|0);return}function jJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+8|0;k=n;j=(d|0)!=0;a:do if(j){h=0;f=0;b:while(1)while(1){if(h)break a;g=c[d+(f<<2)>>2]|0;if(!g){i=6;break a}f=f+1|0;if(!(a[g>>0]|0)){h=1;continue b}}}else i=6;while(0);c:do if((i|0)==6)while(1){f=c[e>>2]|0;if(!f)break c;$B(b,f)|0;$B(b,150517)|0;e=e+4|0;i=6}while(0);d:do if(j){h=0;while(1){f=c[d+(h<<2)>>2]|0;if(!f)break d;do if(a[f>>0]|0){e=ZL(f)|0;if(!e){c[k>>2]=f;Pw(0,101358,k)|0;break}g=L1(e,135739)|0;if(!g){c[m>>2]=e;Pw(0,101386,m)|0;break}while(1){f=YL(g)|0;if(!f)break;$B(b,f)|0}$B(b,150517)|0;s1(g)|0}while(0);h=h+1|0}}while(0);l=n;return}function kJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;d=c[d+52>>2]|0;a:while(1){e=a[d>>0]|0;b:do switch(e<<24>>24){case 0:break a;case 37:{if((a[d+1>>0]|0)==37){e=d+2|0;if((((V$(e,101414,3)|0)!=0?(V$(e,101418,5)|0)!=0:0)?(V$(e,101424,3)|0)!=0:0)?(V$(e,101428,7)|0)!=0:0){e=37;break b}else g=37;c:while(1){switch(g<<24>>24){case 13:{f=10;break c}case 10:case 0:{f=12;break c}default:{}}g=d+1|0;d=g;g=a[g>>0]|0}if((f|0)==10){e=d+1|0;if((a[e>>0]|0)==10){d=d+2|0;continue a}}else if((f|0)==12)e=d+1|0;d=g<<24>>24==0?d:e;continue a}else e=37;break}default:{}}while(0);d:while(1){switch(e<<24>>24){case 10:case 13:case 0:break d;default:{}}aC(b,e<<24>>24)|0;g=d+1|0;d=g;e=a[g>>0]|0}f=d+1|0;if(e<<24>>24==13?(a[f>>0]|0)==10:0)d=d+2|0;else d=e<<24>>24==0?d:f;aC(b,10)|0}return}function lJ(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;d=c[46496]|0;a:do if(d|0){d=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!d)break a;if(!(a[d+16>>0]|0)){c[e>>2]=c[d+12>>2];fC(b,101436,e);$B(b,101454)|0;kJ(b,d);$B(b,101472)|0;$B(b,101487)|0}g=c[46496]|0;d=nb[c[g>>2]&63](g,d,8)|0}}while(0);l=f;return}function mJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;a:do switch(d|0){case 0:{f=b;break}case 1:{f=SM(b)|0;break}default:{switch(nJ(b)|0){case 2:break;case 1:{f=SM(b)|0;break a}default:{f=b;break a}}if(!(c[46498]|0)){Pw(0,101499,e)|0;c[46498]=1;f=b}else f=b}}while(0);if(!(c[46499]|0))Tw(185996,0,0);d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}c[46500]=d+1;a[d>>0]=40;e=f;b:while(1){switch(a[e>>0]|0){case 0:break b;case 92:case 41:case 40:{d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}c[46500]=d+1;a[d>>0]=92;break}default:{}}d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}h=a[e>>0]|0;c[46500]=d+1;a[d>>0]=h;e=e+1|0}d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}c[46500]=d+1;a[d>>0]=41;if((f|0)!=(b|0))D_(f);d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}a[d>>0]=0;h=c[46499]|0;c[46500]=h;l=g;return h|0}function nJ(b){b=b|0;var c=0,d=0;c=0;a:while(1){while(1){d=a[b>>0]|0;if(!(d<<24>>24))break a;if((d&255)<127)b=b+1|0;else break}if((d&-4)<<24>>24==-64){c=1;b=b+2|0}else{c=2;break}}return c|0}function oJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+96|0;i=n+80|0;j=n+72|0;m=n+64|0;g=n+32|0;k=n;h[g>>3]=+h[a>>3];h[g+8>>3]=+h[a+8>>3];h[g+16>>3]=+h[b>>3];h[g+24>>3]=+h[b+8>>3];do if((TU(d,g,j)|0)>=0){if(!f){b=d+4|0;a=c[b>>2]|0;f=c[46504]|0;if((a|0)>(c[46503]|0)){if(!f)a=vH(a<<5)|0;else a=xH(f,a<<5)|0;c[46504]=a;g=c[b>>2]|0;c[46503]=g;f=a}else g=a;b=c[d>>2]|0;a=0;while(1){if((a|0)>=(g|0))break;o=f+(a<<5)|0;d=b+(a<<4)|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];o=f+(a<<5)+16|0;d=a+1|0;p=b+(((d|0)%(g|0)|0)<<4)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];a=d}c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];if((xU(f,g,i,k,m)|0)<0){a=0;break}}else{c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];oV(i,m)}a=m+4|0;if(!(pJ(c[a>>2]|0)|0)){g=c[a>>2]|0;a=c[46505]|0;f=c[m>>2]|0;b=0;while(1){if((b|0)>=(g|0))break;p=a+(b<<4)|0;o=f+(b<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];b=b+1|0}c[e>>2]=g}else a=0}else a=0;while(0);l=n;return a|0}function pJ(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[46506]|0;do if((b|0)<(a|0)){a=a+300-((a|0)%300|0)+b|0;b=xH(c[46505]|0,a<<4)|0;c[46505]=b;if(!b){Pw(1,101589,d)|0;a=1;break}else{c[46506]=a;a=0;break}}else a=0;while(0);l=e;return a|0}function qJ(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;d=c[46507]|0;c[46507]=d+1;do if((d|0)<=0){d=vH(4800)|0;c[46505]=d;if(!d){Pw(1,101612,a)|0;a=1;break}c[46506]=300;c[46508]=0;c[46509]=0;if(0){EL();a=0}else a=0}else a=0;while(0);l=b;return a|0}function rJ(){var a=0,b=0,d=0,e=0.0,f=0,g=0;b=l;l=l+16|0;a=b;d=c[46507]|0;c[46507]=d+-1;if((d|0)<=1?(D_(c[46505]|0),0):0){d=c[15686]|0;g=c[46508]|0;f=c[46509]|0;e=+FL();c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;g1(d,101650,a)|0}l=b;return}function sJ(a,b){a=a|0;b=b|0;return tJ(a,b,0)|0}function tJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;L=l;l=l+176|0;G=L+168|0;K=L+128|0;x=L+120|0;v=L+112|0;i=L+104|0;s=L+88|0;n=L+72|0;g=L+64|0;t=L+160|0;I=L+152|0;y=L+144|0;u=L+32|0;w=L;J=L+136|0;c[46508]=(c[46508]|0)+1;H=c[b+80>>2]|0;c[46509]=(c[46509]|0)+H;f=b+88|0;while(1){C=c[f>>2]|0;if(!C){D=4;break}f=c[C+16>>2]|0;if(!(a[f+112>>0]|0)){D=5;break}else f=f+116|0}do if((D|0)==4){Pw(1,101693,g)|0;f=0}else if((D|0)==5){B=c[b+84>>2]|0;if(!(uJ(H,B,b)|0)){g=H<<3;if((g|0)>(c[46510]|0)){f=c[46511]|0;if(!f)f=vH(H<<7)|0;else f=xH(f,H<<7)|0;c[46511]=f;c[46510]=g}a:do if((H|0)>1?+h[B+8>>3]>+h[B+40>>3]:0){f=0;while(1){if((f|0)==(H|0)){p=1;break a}z=B+(f<<5)+24|0;m=+h[z>>3];A=B+(f<<5)+8|0;h[z>>3]=-+h[A>>3];h[A>>3]=-m;f=f+1|0}}else p=0;while(0);r=c[C>>2]&3;z=C+48|0;f=c[((r|0)==3?C:z)+40>>2]|0;A=C+-48|0;if((f|0)==(c[((r|0)==2?C:A)+40>>2]|0)){c[i>>2]=ry(f)|0;Pw(1,101800,i)|0;f=0;break}o=H+-1|0;q=c[46511]|0;r=q;f=0;j=0;b:while(1){if((j|0)>=(H|0)){j=o;n=f;break}if((j|0)>0)g=+h[B+(j<<5)+8>>3]>+h[B+(j+-1<<5)+8>>3]?-1:1;else g=0;if((j|0)<(o|0))i=+h[B+(j+1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else i=0;c:do if((g|0)!=(i|0))if((g|0)==1|(i|0)==-1){g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29;break}else{g=B+(j<<5)+16|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+24|0;D=29;break}else{switch(g|0){case -1:break c;case 0:break;default:{D=28;break b}}g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29}while(0);if((D|0)==29){D=0;h[q+(i<<4)+8>>3]=+h[g>>3];f=f+2|0}j=j+1|0}if((D|0)==28){c[n>>2]=g;c[n+4>>2]=g;c[n+8>>2]=480;Pw(1,101735,n)|0;f=0;break}d:while(1){if((j|0)<=-1)break;if((j|0)<(o|0))f=+h[B+(j<<5)+8>>3]>+h[B+(j+1<<5)+8>>3]?-1:1;else f=0;if((j|0)>0)g=+h[B+(j+-1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else g=0;e:do if((f|0)!=(g|0))if((f|0)==1|(g|0)==-1){f=B+(j<<5)|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+8|0;i=2;break}else{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break}else switch(f|0){case 0:{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break e}case -1:{N=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[N>>3];f=B+(j<<5)+8|0;i=n+1|0;h[q+(n<<4)+8>>3]=+h[f>>3];h[q+(i<<4)>>3]=+h[N>>3];N=B+(j<<5)+24|0;M=n+2|0;h[q+(i<<4)+8>>3]=+h[N>>3];i=B+(j<<5)|0;h[q+(M<<4)>>3]=+h[i>>3];g=n+3|0;h[q+(M<<4)+8>>3]=+h[N>>3];h[q+(g<<4)>>3]=+h[i>>3];i=4;break e}default:{D=42;break d}}while(0);h[q+(g<<4)+8>>3]=+h[f>>3];j=j+-1|0;n=n+i|0}if((D|0)==42){c[s>>2]=f;c[s+4>>2]=f;c[s+8>>2]=513;Pw(1,101735,s)|0;f=0;break}f:do if(!p)f=0;else{f=0;while(1){if((f|0)>=(H|0)){f=0;break}M=B+(f<<5)+24|0;m=+h[M>>3];N=B+(f<<5)+8|0;h[M>>3]=-+h[N>>3];h[N>>3]=-m;f=f+1|0}while(1){if((f|0)>=(n|0)){f=0;break f}N=q+(f<<4)+8|0;h[N>>3]=-+h[N>>3];f=f+1|0}}while(0);while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}c[t>>2]=r;i=t+4|0;c[i>>2]=n;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[b+8>>3];h[u+16>>3]=+h[b+40>>3];h[u+24>>3]=+h[b+48>>3];if((TU(t,u,I)|0)<0){Pw(1,101839,v)|0;f=0;break}if(!e){g=c[i>>2]|0;f=c[46504]|0;if((g|0)>(c[46503]|0)){if(!f)f=vH(g<<5)|0;else f=xH(f,g<<5)|0;c[46504]=f;g=c[i>>2]|0;c[46503]=g}j=c[46511]|0;i=0;while(1){if((i|0)>=(g|0))break;M=f+(i<<5)|0;N=j+(i<<4)|0;c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];M=f+(i<<5)+16|0;N=i+1|0;v=j+(((N|0)%(g|0)|0)<<4)|0;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[M+8>>2]=c[v+8>>2];c[M+12>>2]=c[v+12>>2];i=N}if(!(a[b+29>>0]|0)){k=0.0;m=0.0}else{m=+h[b+16>>3];k=+E(+m);m=+F(+m)}h[w+8>>3]=m;h[w>>3]=k;if(!(a[b+69>>0]|0)){k=0.0;m=0.0}else{m=+h[b+56>>3];k=-+E(+m);m=-+F(+m)}h[w+24>>3]=m;h[w+16>>3]=k;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];if((xU(f,g,G,w,y)|0)<0){Pw(1,101878,x)|0;f=0;break}}else{c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];oV(G,y)}n=y+4|0;if(!(pJ(c[n>>2]|0)|0)){f=0;while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}i=c[n>>2]|0;j=c[46505]|0;g=c[y>>2]|0;f=0;while(1){if((f|0)>=(i|0)){i=1;f=10;g=0;break}N=j+(f<<4)|0;M=g+(f<<4)|0;c[N>>2]=c[M>>2];c[N+4>>2]=c[M+4>>2];c[N+8>>2]=c[M+8>>2];c[N+12>>2]=c[M+12>>2];f=f+1|0}while(1){if(!((g|0)<15&i<<24>>24!=0))break;vJ(B,H,c[46505]|0,c[n>>2]|0,f);j=0;while(1){if((j|0)>=(H|0))break;if(+h[B+(j<<5)>>3]==2147483647.0){D=82;break}if(+h[B+(j<<5)+16>>3]==-2147483648.0){D=82;break}j=j+1|0}if((D|0)==82){D=0;N=f<<1;f=N;g=(N|0)>(2147483647/(H|0)|0|0)?15:g}i=(j|0)==(H|0)?0:i;g=g+1|0}if(i<<24>>24){M=ry(c[((c[C>>2]&3|0)==3?C:z)+40>>2]|0)|0;N=ry(c[((c[C>>2]&3|0)==2?C:A)+40>>2]|0)|0;c[K>>2]=M;c[K+4>>2]=N;Pw(0,101916,K)|0;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];oV(G,J);vJ(B,H,c[J>>2]|0,c[J+4>>2]|0,10);D_(c[J>>2]|0)}c[d>>2]=c[n>>2];f=c[46505]|0}else f=0}else f=0}while(0);l=L;return f|0}function uJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0;R=l;l=l+32|0;I=R+16|0;H=R+8|0;k=R;e=0;j=0;while(1){if((j|0)>=(a|0))break;i=b+(j<<5)|0;s=+h[b+(j<<5)+8>>3]-+h[b+(j<<5)+24>>3];if(!((s>=0.0?s:-s)<.01)?(s=+h[i>>3]-+h[b+(j<<5)+16>>3],!((s>=0.0?s:-s)<.01)):0){if((e|0)!=(j|0)){P=b+(e<<5)|0;c[P>>2]=c[i>>2];c[P+4>>2]=c[i+4>>2];c[P+8>>2]=c[i+8>>2];c[P+12>>2]=c[i+12>>2];c[P+16>>2]=c[i+16>>2];c[P+20>>2]=c[i+20>>2];c[P+24>>2]=c[i+24>>2];c[P+28>>2]=c[i+28>>2]}e=e+1|0}j=j+1|0}J=b+16|0;do if(!(+h[b>>3]>+h[J>>3])?(L=b+8|0,N=b+24|0,!(+h[L>>3]>+h[N>>3])):0){P=e+-1|0;M=c[15686]|0;w=0;while(1){if((w|0)>=(P|0))break;D=w+1|0;E=b+(D<<5)|0;f=+h[E>>3];F=b+(D<<5)+16|0;g=+h[F>>3];if(f>g){Q=16;break}A=b+(D<<5)+8|0;m=+h[A>>3];B=b+(D<<5)+24|0;n=+h[B>>3];if(m>n){Q=16;break}G=b+(w<<5)+16|0;v=+h[G>>3]>3]>g;a=u&1;z=b+(w<<5)+24|0;t=+h[z>>3]>3]>n;i=k&1;x=a+e+j+i|0;o=(x|0)!=0;if(!(0==0|o^1)){c[I>>2]=w;c[I+4>>2]=D;g1(M,102116,I)|0;wJ(d)}a:do if(o){if(!v)if(!u)if(!t){if(k){k=0;o=e;e=B;i=y;Q=24}}else{k=i;j=0;o=e;e=A;i=z;Q=24}else{k=i;a=0;o=e;e=F;i=C;Q=24}else{k=i;o=0;e=E;i=G;Q=24}if((Q|0)==24){Q=0;w=~~+h[i>>3];h[i>>3]=+h[e>>3];h[e>>3]=+(w|0);i=k;e=o}o=x+-1|0;k=0;while(1){if((k|0)>=(o|0))break a;do if((e|0)!=1){if((a|0)==1){s=+(~~((+h[F>>3]+ +h[C>>3])*.5+.5)|0);h[F>>3]=s;h[C>>3]=s;a=0;break}if((j|0)==1){s=+(~~((+h[A>>3]+ +h[z>>3])*.5+.5)|0);h[A>>3]=s;h[z>>3]=s;j=0;break}if((i|0)==1){s=+(~~((+h[B>>3]+ +h[y>>3])*.5+.5)|0);h[B>>3]=s;h[y>>3]=s;i=0}}else{s=+(~~((+h[E>>3]+ +h[G>>3])*.5+.5)|0);h[E>>3]=s;h[G>>3]=s;e=0}while(0);k=k+1|0}}while(0);p=+h[C>>3];q=+h[G>>3];r=+h[E>>3];s=+h[F>>3];i=xJ(~~p,~~q,~~r,~~s)|0;n=+h[y>>3];m=+h[z>>3];g=+h[A>>3];f=+h[B>>3];e=xJ(~~n,~~m,~~g,~~f)|0;if(!((i|0)!=0&(e|0)!=0)){w=D;continue}if((i|0)<(e|0)){B=q-p>s-r;w=q>3]=B?(w?r:s):w?q:p;w=D;continue}else{B=m-n>f-g;w=m>3]=B?(w?g:f):w?m:n;w=D;continue}}if((Q|0)==16){c[H>>2]=D;Pw(1,102070,H)|0;wJ(d);e=1;break}f=+h[d>>3];g=+h[b>>3];if(!(((!(f+h[J>>3]):0)?(K=+h[d+8>>3],!(K<+h[L>>3])):0)?!(K>+h[N>>3]):0)){if(0){E1(102159,42,1,M)|0;wJ(d);g=+h[b>>3];f=+h[d>>3]}if(f>3]=g;else g=f;f=+h[J>>3];if(g>f)h[d>>3]=f;e=d+8|0;g=+h[e>>3];f=+h[L>>3];if(g>3]=f;g=f}f=+h[N>>3];if(g>f)h[e>>3]=f}i=d+40|0;f=+h[i>>3];e=b+(P<<5)|0;g=+h[e>>3];if(((!(f+h[b+(P<<5)+16>>3]):0)?(O=+h[d+48>>3],!(O<+h[b+(P<<5)+8>>3])):0)?!(O>+h[b+(P<<5)+24>>3]):0){e=0;break}if(0){E1(102202,39,1,M)|0;wJ(d);g=+h[e>>3];f=+h[i>>3]}if(f>3]=g;f=g}g=+h[b+(P<<5)+16>>3];if(f>g)h[i>>3]=g;e=d+48|0;f=+h[e>>3];g=+h[b+(P<<5)+8>>3];if(f>3]=g;else g=f;f=+h[b+(P<<5)+24>>3];if(g>f){h[e>>3]=f;e=0}else e=0}else Q=12;while(0);if((Q|0)==12){Pw(1,102025,k)|0;wJ(d);e=1}l=R;return e|0}function vJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;s=O(e,b)|0;t=1.0/+(s|0);e=0;a:while(1){u=e+3|0;if((u|0)>=(d|0))break;o=c+(e<<4)|0;p=c+(e<<4)+8|0;r=e+1|0;q=c+(r<<4)|0;r=c+(r<<4)+8|0;j=e+2|0;i=c+(j<<4)|0;j=c+(j<<4)+8|0;k=c+(u<<4)|0;l=c+(u<<4)+8|0;g=0;while(1){if((g|0)>(s|0)){e=u;continue a}v=t*+(g|0);m=+h[o>>3];n=+h[p>>3];y=+h[q>>3];w=+h[r>>3];z=+h[i>>3];x=+h[j>>3];m=(y-m)*v+m;n=(w-n)*v+n;y=(z-y)*v+y;w=(x-w)*v+w;m=(y-m)*v+m;n=(w-n)*v+n;m=((z-y+(+h[k>>3]-z)*v)*v+y-m)*v+m;n=((x-w+(+h[l>>3]-x)*v)*v+w-n)*v+n;f=0;while(1){if((f|0)>=(b|0))break;if(n<=+h[a+(f<<5)+24>>3]+.0001?n>=+h[a+(f<<5)+8>>3]+-.0001:0){e=a+(f<<5)|0;if(+h[e>>3]>m)h[e>>3]=m;e=a+(f<<5)+16|0;if(+h[e>>3]>3]=m}f=f+1|0}g=g+1|0}}return}function wJ(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=l;l=l+112|0;j=m+80|0;k=m+48|0;i=m+8|0;g=m;e=c[15686]|0;f=b+80|0;c[g>>2]=c[f>>2];g1(e,102242,g)|0;g=b+84|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;r=c[g>>2]|0;q=+h[r+(d<<5)>>3];p=+h[r+(d<<5)+8>>3];o=+h[r+(d<<5)+16>>3];n=+h[r+(d<<5)+24>>3];c[i>>2]=d;h[i+8>>3]=q;h[i+16>>3]=p;h[i+24>>3]=o;h[i+32>>3]=n;g1(e,102253,i)|0;d=d+1|0}q=+h[b+8>>3];p=+h[b+16>>3];r=a[b+29>>0]|0?102284:102296;h[k>>3]=+h[b>>3];h[k+8>>3]=q;h[k+16>>3]=p;c[k+24>>2]=r;g1(e,102312,k)|0;p=+h[b+48>>3];q=+h[b+56>>3];r=a[b+69>>0]|0?102284:102296;h[j>>3]=+h[b+40>>3];h[j+8>>3]=p;h[j+16>>3]=q;c[j+24>>2]=r;g1(e,102363,j)|0;l=m;return}function xJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if((b|0)>(c|0)&(d|0)>(a|0)){if(!((c|0)>(a|0)|(d|0)<(a|0))){a=d-a|0;break}if((b|0)<(c|0)|(b|0)>(d|0)){b=b-a|0;a=d-c|0;a=(b|0)<(a|0)?b:a;break}else{a=b-c|0;break}}else a=0;while(0);return a|0}function yJ(a,b){a=a|0;b=b|0;return tJ(a,b,1)|0}function zJ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;g=j;i=1;f=b;while(1){h=f;f=c[(c[f+16>>2]|0)+172>>2]|0;if(!((f|0)!=0&(h|0)!=(f|0)))break;else i=i+1|0}if((i|0)>=21)g=uH(i<<2)|0;h=0;f=b;while(1){if((h|0)>=(i|0))break;c[g+(h<<2)>>2]=f;h=h+1|0;f=c[(c[f+16>>2]|0)+172>>2]|0}AJ(a,g,i,d,e);if((i|0)>20)D_(g);l=j;return}function AJ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,P=0,Q=0;K=l;l=l+304|0;A=K+272|0;z=K+208|0;G=K+96|0;H=K+32|0;I=K+16|0;J=K;r=K+192|0;y=K+176|0;i=K+160|0;B=K+296|0;D=K+288|0;j=c[d>>2]|0;w=c[j>>2]&3;k=j+-48|0;E=c[((w|0)==2?j:k)+40>>2]|0;t=G+16|0;w=(c[(c[((w|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+16|0;x=j+16|0;F=(c[x>>2]|0)+16|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[F>>2];c[A+4>>2]=c[F+4>>2];c[A+8>>2]=c[F+8>>2];c[A+12>>2]=c[F+12>>2];BJ(r,z,A);c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[I>>2]=c[r>>2];c[I+4>>2]=c[r+4>>2];c[I+8>>2]=c[r+8>>2];c[I+12>>2]=c[r+12>>2];r=G+32|0;F=G+48|0;w=(c[E+16>>2]|0)+16|0;x=(c[x>>2]|0)+56|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];BJ(y,z,A);c[F>>2]=c[y>>2];c[F+4>>2]=c[y+4>>2];c[F+8>>2]=c[y+8>>2];c[F+12>>2]=c[y+12>>2];c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[J>>2]=c[y>>2];c[J+4>>2]=c[y+4>>2];c[J+8>>2]=c[y+8>>2];c[J+12>>2]=c[y+12>>2];a:do if((e|0)!=1&(a[191874]|0)==0){m=+h[G>>3];n=+h[F>>3];L=m-n;o=+h[G+8>>3];p=+h[G+56>>3];s=o-p;q=s*s;if(q+L*L<1.0e-06){c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];y=G+24|0;x=G+40|0;n=0.0;m=0.0}else{M=n-m;L=+C(+(q+M*M));w=c[(c[(c[b+60>>2]|0)+16>>2]|0)+248>>2]|0;N=+((O(w,e+-1|0)|0)/2|0|0);q=s*N/L;h[t>>3]=q+m;m=M*N/L;y=G+24|0;h[y>>3]=m+o;h[r>>3]=q+n;x=G+40|0;h[x>>3]=p+m;m=+(0-w|0);n=M*m/L;m=s*m/L}f=(f|0)==6;u=D+4|0;v=B+4|0;j=0;while(1){if((j|0)>=(e|0))break a;w=c[d+(j<<2)>>2]|0;k=w+-48|0;b:do if((c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0)==(E|0)){c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];i=0;while(1){if((i|0)==4)break b;P=H+(i<<4)|0;Q=G+(i<<4)|0;c[P>>2]=c[Q>>2];c[P+4>>2]=c[Q+4>>2];c[P+8>>2]=c[Q+8>>2];c[P+12>>2]=c[Q+12>>2];i=i+1|0}}else{c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];c[I+8>>2]=c[F+8>>2];c[I+12>>2]=c[F+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];i=0;while(1){if((i|0)==4)break b;Q=H+(3-i<<4)|0;P=G+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}}while(0);if(f){c[u>>2]=4;c[D>>2]=z;i=0;while(1){if((i|0)==4)break;Q=z+(i<<4)|0;P=H+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];oV(A,B);QK(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,c[B>>2]|0,c[v>>2]|0,g)}else QK(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,H,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];jL(b,w,z,A);h[t>>3]=+h[t>>3]+m;h[y>>3]=+h[y>>3]+n;h[r>>3]=+h[r>>3]+m;h[x>>3]=+h[x>>3]+n;j=j+1|0}}else{if((f|0)==4){CJ(i,b);c[A>>2]=c[i>>2];c[A+4>>2]=c[i+4>>2];c[A+8>>2]=c[i+8>>2];c[A+12>>2]=c[i+12>>2];DJ(G,A)}QK(j,c[((c[j>>2]&3|0)==2?j:k)+40>>2]|0,G,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];jL(b,j,z,A)}while(0);l=K;return}function BJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function CJ(a,b){a=a|0;b=b|0;b=c[b+16>>2]|0;h[22920]=(+h[b+32>>3]+ +h[b+16>>3])*.5;h[22921]=(+h[b+40>>3]+ +h[b+24>>3])*.5;c[a>>2]=c[45840];c[a+4>>2]=c[45841];c[a+8>>2]=c[45842];c[a+12>>2]=c[45843];return}function DJ(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;f=+h[a>>3];d=+h[a+48>>3];i=(d+f)*.5;g=+h[a+8>>3];c=+h[a+56>>3];e=(c+g)*.5;f=d-f;g=c-g;f=+C(+(g*g+f*f))*.2;g=+h[b>>3]-i;c=+h[b+8>>3]-e;d=+C(+(c*c+g*g));if(!(d==0.0)){g=i-g/d*f;i=e-c/d*f;h[a+32>>3]=g;h[a+16>>3]=g;h[a+40>>3]=i;h[a+24>>3]=i}return}function EJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0.0,G=0,H=0.0,I=0.0,J=0.0;E=l;l=l+208|0;t=E+192|0;s=E+176|0;B=E+32|0;w=E+16|0;x=E;y=E+160|0;z=E+144|0;u=E+128|0;v=E+112|0;g=e&2130706432;A=(e&8|0)==0?((g|0)==0?4:g):8;if((A|0)==436207616)FJ(a,b,d,f);else{D=uH((d<<6)+64|0)|0;p=d+-1|0;q=x+8|0;r=w+8|0;o=12.0;e=0;while(1){if((e|0)>=(d|0))break;n=b+(e<<4)|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];if((e|0)<(p|0)){e=e+1|0;n=b+(e<<4)|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2];e=e+1|0}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=+C(+(F*F+m*m))*.3333333333333333;o=o=(d|0))break;g=b+(i<<4)|0;c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if((i|0)<(p|0)){g=b+(i+1<<4)|0;c[x>>2]=c[g>>2];c[x+4>>2]=c[g+4>>2];c[x+8>>2]=c[g+8>>2];c[x+12>>2]=c[g+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2]}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=o/+C(+(F*F+m*m));m=k?m*.3333333333333333:j?m*.5:m;g=D+(e<<4)|0;if(n){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(y,m*.5,s,t);c[g>>2]=c[y>>2];c[g+4>>2]=c[y+4>>2];c[g+8>>2]=c[y+8>>2];c[g+12>>2]=c[y+12>>2]}else{c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2]}g=D+(e+1<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(z,m,s,t);c[g>>2]=c[z>>2];c[g+4>>2]=c[z+4>>2];c[g+8>>2]=c[z+8>>2];c[g+12>>2]=c[z+12>>2];g=e+3|0;G=D+(e+2<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(u,1.0-m,s,t);c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(n){G=D+(g<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(v,1.0-m*.5,s,t);c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[G+8>>2]=c[v+8>>2];c[G+12>>2]=c[v+12>>2];e=e+4|0}else e=g;i=i+1|0}k=D+(e<<4)|0;c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];k=D+(e+1<<4)|0;j=D+16|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];e=D+(e+2<<4)|0;k=D+32|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];e=A&2147483647;a:do if((e|0)<201326592){if((e|0)>=83886080){if((e|0)<134217728){if((e|0)<100663296){switch(e|0){case 83886080:break;default:break a}if((d|0)==4){G=uH(192)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];p=G+16|0;t=b+16|0;c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];p=D+48|0;t=D+64|0;o=+h[t>>3];n=G+32|0;h[n>>3]=o;q=D+56|0;r=D+72|0;H=+h[r>>3];z=G+40|0;h[z>>3]=H;F=+h[p>>3]+o-+h[k>>3];u=G+48|0;h[u>>3]=F;J=+h[q>>3]+H-+h[D+40>>3];x=G+56|0;h[x>>3]=J;I=+h[t>>3]+F-+h[p>>3];p=G+64|0;h[p>>3]=I;m=+h[r>>3]+J-+h[q>>3];q=G+72|0;h[q>>3]=m;r=G+80|0;h[r>>3]=o+I-F;h[G+88>>3]=H+m-J;t=D+96|0;v=D+80|0;J=+h[v>>3];d=G+144|0;h[d>>3]=J;w=D+104|0;s=D+88|0;m=+h[s>>3];h[G+152>>3]=m;H=+h[t>>3]+J-+h[D+112>>3];y=G+128|0;h[y>>3]=H;F=+h[w>>3]+m-+h[D+120>>3];A=G+136|0;h[A>>3]=F;I=+h[v>>3]+H-+h[t>>3];t=G+112|0;h[t>>3]=I;o=+h[s>>3]+F-+h[w>>3];w=G+120|0;h[w>>3]=o;s=G+96|0;h[s>>3]=J+I-H;v=G+104|0;h[v>>3]=m+o-F;k=G+160|0;j=b+32|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];k=G+176|0;b=b+48|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];_O(a,G,12,f);c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];F=+h[n>>3];o=+h[u>>3];F=F+F-o;u=B+16|0;h[u>>3]=F;m=+h[z>>3];H=+h[x>>3];m=m+m-H;x=B+24|0;h[x>>3]=m;z=B+32|0;h[z>>3]=+h[p>>3]+F-o;b=B+40|0;h[b>>3]=+h[q>>3]+m-H;f=B+48|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2];bP(a,B,4);c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];H=+h[s>>3];m=+h[t>>3];H=H-(m-H);h[u>>3]=H;o=+h[v>>3];F=+h[w>>3];o=o-(F-o);h[x>>3]=o;h[z>>3]=+h[y>>3]+H-m;h[b>>3]=+h[A>>3]+o-F;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];bP(a,B,4);D_(G);break}else qa(102412,102423,737,102432)}if((e|0)<117440512){switch(e|0){case 100663296:break;default:break a}y=d+5|0;G=uH(y<<4)|0;z=b+16|0;H=+h[z>>3];H=(+h[b>>3]-H)*.625+H;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;v=D+48|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*1.5;h[G+8>>3]=J;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+16>>3]=I;h[G+24>>3]=J;h[G+32>>3]=I;F=+h[A>>3];h[G+40>>3]=(+h[d>>3]-F)*.5+F;I=(+h[k>>3]-+h[v>>3])*.5+I;h[G+48>>3]=I;F=+h[A>>3];h[G+56>>3]=(+h[d>>3]-F)*.5+F;h[G+64>>3]=I;I=+h[A>>3];I=(+h[d>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3]);h[G+72>>3]=I;h[G+80>>3]=H;h[G+88>>3]=I;h[G+96>>3]=H;I=I-(+h[w>>3]-+h[x>>3])*.25;h[G+104>>3]=I;h[G+112>>3]=+h[k>>3]+H-+h[v>>3];h[G+120>>3]=(+h[w>>3]-+h[x>>3])*.5+I;h[G+128>>3]=+h[G>>3];h[G+136>>3]=(+h[w>>3]-+h[x>>3])*.25+J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 117440512:break;default:break a}d=d+1|0;G=uH(d<<4)|0;h[G>>3]=+h[j>>3];z=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[z>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[D+48>>3];J=+h[z>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];B=b+40|0;h[G+40>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];h[G+48>>3]=+h[j>>3];h[G+56>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];J=+h[b+8>>3];h[G+72>>3]=J-(J-+h[b+56>>3])*.5;h[G+64>>3]=+h[b>>3];_O(a,G,d,f);D_(G);break}}if((e|0)<167772160)if((e|0)<150994944){switch(e|0){case 134217728:break;default:break a}y=d+4|0;G=uH(y<<4)|0;z=b+16|0;F=+h[z>>3];x=D+48|0;F=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*.25;h[G>>3]=F;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=F;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.5+J;h[G+24>>3]=H;F=(+h[k>>3]-+h[x>>3])*.5+F;h[G+32>>3]=F;h[G+40>>3]=H;h[G+48>>3]=F;F=(+h[v>>3]-+h[w>>3])*.5+H;h[G+56>>3]=F;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=F;h[G+80>>3]=I;h[G+88>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.25;h[G+96>>3]=I;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 150994944:break;default:break a}y=d+2|0;G=uH(y<<4)|0;z=b+16|0;H=+h[z>>3];x=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[x>>3])*.75;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=H;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.25+J;h[G+24>>3]=H;I=+h[z>>3];h[G+32>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*.25;I=(+h[v>>3]-+h[w>>3])*.5+H;h[G+40>>3]=I;F=+h[z>>3];h[G+48>>3]=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*-.25;h[G+56>>3]=I;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=H;h[G+80>>3]=I;h[G+88>>3]=J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else if((e|0)<184549376){switch(e|0){case 167772160:break;default:break a}y=d+1|0;G=uH(y<<4)|0;z=b+16|0;H=+h[z>>3];v=D+48|0;H=+h[k>>3]+H+(+h[b>>3]-H)*.5-+h[v>>3];h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*.25;h[G+8>>3]=J;H=H-+h[k>>3]+ +h[v>>3];h[G+16>>3]=H;h[G+24>>3]=+h[w>>3]+J-+h[x>>3];h[G+32>>3]=H;H=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+48>>3]=I;h[G+56>>3]=H;h[G+64>>3]=I;h[G+72>>3]=J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 184549376:break;default:break a}z=d+4|0;G=uH(z<<4)|0;y=b+16|0;H=+h[y>>3];I=+h[b>>3]-H;u=D+48|0;I=I*.125+H+(+h[k>>3]-+h[u>>3]+I)*.5;h[G>>3]=I;w=b+40|0;H=+h[w>>3];x=b+24|0;d=D+56|0;v=D+72|0;H=(+h[x>>3]-H)*.5+H+(+h[d>>3]-+h[v>>3])*.25;h[G+8>>3]=H;J=+h[y>>3];J=(+h[b>>3]-J)*.375+J;h[G+16>>3]=J;h[G+24>>3]=H;h[G+32>>3]=J;H=(+h[d>>3]-+h[v>>3])*.5+H;h[G+40>>3]=H;J=J-(+h[k>>3]-+h[u>>3])*.5;h[G+48>>3]=J;h[G+56>>3]=H;A=G+64|0;h[A>>3]=J;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[d>>3]-+h[v>>3])*-.25;h[G+72>>3]=J;H=I-(+h[k>>3]-+h[u>>3])*.5;h[G+80>>3]=H;h[G+88>>3]=J;h[G+96>>3]=H;J=J-(+h[d>>3]-+h[v>>3])*.5;h[G+104>>3]=J;v=G+112|0;h[v>>3]=I;h[G+120>>3]=J;_O(a,G,z,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[A>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[b>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);D_(G);break}}if((e|0)<33554432){if((e|0)<8){switch(e|0){case 4:break;default:break a}i=vH((d*96|0)+32|0)|0;e=0;g=0;while(1){j=g|1;k=i+(g<<4)|0;if((e|0)>=(d|0))break;b=e<<2;G=D+(b<<4)|0;c[k>>2]=c[G>>2];c[k+4>>2]=c[G+4>>2];c[k+8>>2]=c[G+8>>2];c[k+12>>2]=c[G+12>>2];G=i+(j<<4)|0;B=D+((b|1)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+2<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+3<<4)|0;B=D+((b|2)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+4<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+5<<4)|0;b=D+((b|3)<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];e=e+1|0;g=g+6|0}c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];d=i+(j<<4)|0;G=i+16|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];aP(a,G,j,0,0,f&255);D_(i);break}if((e|0)<16777216){switch(e|0){case 8:break;default:break a}_O(a,b,d,f);g=B+16|0;e=0;while(1){if((e|0)>=(d|0))break a;G=e*3|0;f=D+(G+2<<4)|0;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];G=D+(G+4<<4)|0;c[g>>2]=c[G>>2];c[g+4>>2]=c[G+4>>2];c[g+8>>2]=c[G+8>>2];c[g+12>>2]=c[G+12>>2];bP(a,B,2);e=e+1|0}}switch(e|0){case 16777216:break;default:break a}g=d+1|0;i=uH(g<<4)|0;e=1;while(1){if((e|0)>=(d|0))break;G=i+(e<<4)|0;A=b+(e<<4)|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];e=e+1|0}b=d*3|0;A=D+(b+1<<4)|0;c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];d=i+(d<<4)|0;G=D+(b+-1<<4)|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];_O(a,i,g,f);D_(i);c[B>>2]=c[G>>2];c[B+4>>2]=c[G+4>>2];c[B+8>>2]=c[G+8>>2];c[B+12>>2]=c[G+12>>2];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];f=B+32|0;h[f>>3]=+h[B>>3]+ +h[G>>3]-+h[D+(b<<4)>>3];h[B+40>>3]=+h[B+8>>3]+ +h[B+24>>3]-+h[D+(b<<4)+8>>3];bP(a,G,2);c[G>>2]=c[f>>2];c[G+4>>2]=c[f+4>>2];c[G+8>>2]=c[f+8>>2];c[G+12>>2]=c[f+12>>2];bP(a,B,2);break}else{if((e|0)<50331648){switch(e|0){case 33554432:break;default:break a}g=d+2|0;i=uH(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];j=i+16|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];j=D+48|0;d=D+64|0;h[i+32>>3]=(+h[j>>3]-+h[d>>3])*.3333333333333333+ +h[k>>3];G=D+56|0;e=D+72|0;h[i+40>>3]=(+h[G>>3]-+h[e>>3])*.3333333333333333+ +h[D+40>>3];J=+h[j>>3];h[i+48>>3]=(J-+h[d>>3])*.3333333333333333+J;J=+h[G>>3];h[i+56>>3]=(J-+h[e>>3])*.3333333333333333+J;e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-2<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}_O(a,i,g,f);D_(i);c[B>>2]=c[j>>2];c[B+4>>2]=c[j+4>>2];c[B+8>>2]=c[j+8>>2];c[B+12>>2]=c[j+12>>2];G=B+16|0;c[G>>2]=c[k>>2];c[G+4>>2]=c[k+4>>2];c[G+8>>2]=c[k+8>>2];c[G+12>>2]=c[k+12>>2];bP(a,B,2);break}if((e|0)>=67108864){switch(e|0){case 67108864:break;default:break a}if((d|0)==4){G=uH(96)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];d=G+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];d=G+32|0;A=D+64|0;c[d>>2]=c[A>>2];c[d+4>>2]=c[A+4>>2];c[d+8>>2]=c[A+8>>2];c[d+12>>2]=c[A+12>>2];d=G+48|0;b=b+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=G+64|0;d=D+128|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=G+80|0;z=D+160|0;c[b>>2]=c[z>>2];c[b+4>>2]=c[z+4>>2];c[b+8>>2]=c[z+8>>2];c[b+12>>2]=c[z+12>>2];_O(a,G,6,f);D_(G);h[B>>3]=+h[D+176>>3]+ +h[j>>3]-+h[D>>3];h[B+8>>3]=+h[D+184>>3]+ +h[D+24>>3]-+h[D+8>>3];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];bP(a,B,2);c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];bP(a,B,2);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];bP(a,B,2);break}else qa(102412,102423,714,102432)}switch(e|0){case 50331648:break;default:break a}g=d+3|0;i=uH(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];J=+h[b>>3];h[i+16>>3]=J-(J-+h[j>>3])*.25;e=D+56|0;J=(+h[e>>3]-+h[D+72>>3])*.3333333333333333+ +h[b+8>>3];h[i+24>>3]=J;I=+h[b>>3];h[i+32>>3]=I-(I-+h[j>>3])*2.0;h[i+40>>3]=J;J=+h[b>>3];h[i+48>>3]=J-(J-+h[j>>3])*2.25;h[i+56>>3]=+h[e>>3];h[i+64>>3]=+h[D+48>>3];h[i+72>>3]=+h[e>>3];e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-3<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}_O(a,i,g,f);D_(i);break}}else if((e|0)<318767104){if((e|0)<251658240){if((e|0)<218103808){switch(e|0){case 201326592:break;default:break a}G=d<<4;u=uH(G)|0;v=b+16|0;J=+h[v>>3];h[u>>3]=J;z=b+40|0;I=+h[z>>3];A=b+24|0;y=D+48|0;w=D+56|0;x=D+72|0;I=(+h[A>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[w>>3]-+h[x>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;_O(a,u,d,f);D_(u);G=uH(G)|0;I=+h[k>>3]+ +h[v>>3]-+h[y>>3];h[G>>3]=I;J=+h[z>>3];J=(+h[A>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*-.625;h[G+8>>3]=J;H=+h[k>>3]-+h[y>>3]+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;_O(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}if((e|0)<234881024){switch(e|0){case 218103808:break;default:break a}G=d<<4;w=uH(G)|0;J=+h[b>>3];h[w>>3]=J;y=b+40|0;I=+h[y>>3];z=b+24|0;x=D+56|0;A=D+72|0;I=(+h[z>>3]-I)*.5+I+(+h[x>>3]-+h[A>>3])*.125;h[w+8>>3]=I;h[w+16>>3]=J;H=(+h[x>>3]-+h[A>>3])*.5+I;h[w+24>>3]=H;J=J-(+h[x>>3]-+h[A>>3])*2.0;h[w+32>>3]=J;h[w+40>>3]=H;h[w+48>>3]=J;h[w+56>>3]=I;_O(a,w,d,f);D_(w);G=uH(G)|0;I=+h[b>>3]-+h[k>>3]+ +h[D+48>>3];h[G>>3]=I;J=+h[y>>3];J=(+h[z>>3]-J)*.5+J+(+h[x>>3]-+h[A>>3])*-.625;h[G+8>>3]=J;h[G+16>>3]=I;H=(+h[x>>3]-+h[A>>3])*.5+J;h[G+24>>3]=H;I=I-(+h[x>>3]-+h[A>>3]);h[G+32>>3]=I;h[G+40>>3]=H;A=G+48|0;h[A>>3]=I;h[G+56>>3]=J;_O(a,G,d,f);h[B>>3]=+h[b+16>>3];J=+h[y>>3];h[B+8>>3]=(+h[z>>3]-J)*.5+J;h[B+16>>3]=+h[A>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 234881024:break;default:break a}G=d<<4;y=uH(G)|0;u=b+16|0;I=+h[u>>3];v=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=I;w=b+40|0;J=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*.125;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;_O(a,y,d,f);D_(y);y=uH(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;h[y+16>>3]=H;h[y+24>>3]=I;h[y+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=I;_O(a,y,d,f);D_(y);y=uH(G)|0;I=+h[u>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*.125;h[y>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;_O(a,y,d,f);D_(y);G=uH(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*.125;h[G>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[G+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;y=G+16|0;h[y>>3]=H;h[G+24>>3]=I;h[G+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[G+40>>3]=I;h[G+48>>3]=J;h[G+56>>3]=I;_O(a,G,d,f);h[B>>3]=+h[y>>3];I=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-I)*.5+I;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+I;bP(a,B,2);I=+h[u>>3];h[B>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=I;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);D_(G);break}}if((e|0)<285212672)if((e|0)<268435456){switch(e|0){case 251658240:break;default:break a}G=d<<4;u=uH(G)|0;v=b+16|0;J=+h[v>>3];y=D+48|0;J=J-+h[k>>3]+(+h[b>>3]-J)*.5+ +h[y>>3];h[u>>3]=J;w=b+40|0;I=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;_O(a,u,d,f);D_(u);G=uH(G)|0;I=+h[v>>3];I=I-+h[k>>3]+(+h[b>>3]-I)*.5+ +h[y>>3];h[G>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[G+8>>3]=J;H=(+h[k>>3]-+h[y>>3])*2.0+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;_O(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[G>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 268435456:break;default:break a}G=uH(d<<4)|0;h[G>>3]=+h[b>>3];v=D+48|0;x=D+56|0;y=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[x>>3]-+h[y>>3])*.5;h[G+16>>3]=+h[v>>3];J=+h[x>>3];h[G+24>>3]=J-(J-+h[y>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[b>>3];h[G+56>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];_O(a,G,d,f);w=b+16|0;J=(+h[k>>3]-+h[v>>3])*.25;I=J+ +h[w>>3];h[B>>3]=I;H=+h[z>>3];u=b+24|0;F=+h[x>>3]-+h[y>>3];H=(+h[u>>3]-H)*.5+H+F*.125;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J+I;f=B+24|0;h[f>>3]=H-F*.25;bP(a,B,2);F=(+h[k>>3]-+h[v>>3])*.25;H=F+ +h[w>>3];h[B>>3]=H;I=+h[z>>3];J=+h[x>>3]-+h[y>>3];I=(+h[u>>3]-I)*.5+I+J*-.125;h[A>>3]=I;h[d>>3]=F+H;h[f>>3]=J*.25+I;bP(a,B,2);I=(+h[k>>3]-+h[v>>3])*.25;h[B>>3]=I+ +h[w>>3];J=(+h[x>>3]-+h[y>>3])*.75+ +h[z>>3];h[A>>3]=J;h[d>>3]=+h[b>>3]-I;h[f>>3]=J;bP(a,B,2);D_(G);break}else if((e|0)<301989888){switch(e|0){case 285212672:break;default:break a}y=uH(d<<4)|0;v=b+16|0;I=+h[v>>3];z=D+48|0;I=(+h[k>>3]-+h[z>>3]+(+h[b>>3]-I))*.5+I;h[y>>3]=I;w=b+40|0;F=+h[w>>3];x=b+24|0;F=(+h[k>>3]-+h[z>>3]+(+h[x>>3]-F))*.5+F;h[y+8>>3]=F;h[y+16>>3]=I;I=+h[w>>3];o=+h[k>>3]-+h[z>>3];I=(+h[x>>3]-I-o)*.5+I;h[y+24>>3]=I;J=+h[v>>3];J=(+h[b>>3]-J-o)*.5+J;h[y+32>>3]=J;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=F;_O(a,y,d,f);D_(y);F=+h[v>>3];F=(+h[b>>3]-F)*.5+F;J=+h[k>>3]-+h[z>>3];I=J*.75;o=F+I;h[B>>3]=o;H=+h[w>>3];H=(+h[x>>3]-H)*.5+H;I=H+I;y=B+8|0;h[y>>3]=I;A=B+16|0;h[A>>3]=o;J=J*-.75;H=H+J;G=B+24|0;h[G>>3]=H;J=F+J;h[B+32>>3]=J;h[B+40>>3]=H;h[B+48>>3]=J;h[B+56>>3]=I;d=B+64|0;c[d>>2]=c[B>>2];c[d+4>>2]=c[B+4>>2];c[d+8>>2]=c[B+8>>2];c[d+12>>2]=c[B+12>>2];bP(a,B,5);I=+h[v>>3];J=+h[b>>3];h[B>>3]=(J-I)*.5+I+(+h[k>>3]-+h[z>>3])*.75;I=+h[w>>3];h[y>>3]=(+h[x>>3]-I)*.5+I;h[A>>3]=J;d=b+8|0;f=b+56|0;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+I;bP(a,B,2);I=+h[v>>3];h[B>>3]=I;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[A>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[z>>3])*-.75;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+J;bP(a,B,2);break}else{switch(e|0){case 301989888:break;default:break a}A=d+12|0;G=uH(A<<4)|0;x=b+16|0;m=+h[x>>3];s=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[s>>3])*.25;h[G>>3]=m;y=b+40|0;F=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;F=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-F))*.5+F;u=G+8|0;h[u>>3]=F;h[G+16>>3]=m;F=(+h[v>>3]-+h[w>>3])*.125+F;t=G+24|0;h[t>>3]=F;H=m-(+h[k>>3]-+h[s>>3])*.125;d=G+32|0;h[d>>3]=H;o=(+h[v>>3]-+h[w>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;I=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=I;h[G+64>>3]=m;m=(+h[v>>3]-+h[w>>3])*.125+I;h[G+72>>3]=m;h[G+80>>3]=H;h[G+88>>3]=m;H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[G+96>>3]=H;h[G+104>>3]=I;J=H-(+h[k>>3]-+h[s>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[s>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=I;I=(+h[k>>3]-+h[s>>3])*.125+J;h[G+160>>3]=I;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[u>>3];h[G+200>>3]=J;h[G+208>>3]=I;h[G+216>>3]=J;u=G+224|0;h[u>>3]=H;h[G+232>>3]=+h[t>>3];h[G+240>>3]=+h[d>>3];h[G+248>>3]=J;_O(a,G,A,f);J=+h[u>>3];h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;bP(a,B,2);H=+h[u>>3];h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;bP(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}}else{if((e|0)<369098752){if((e|0)<335544320){switch(e|0){case 318767104:break;default:break a}A=d+4|0;G=uH(A<<4)|0;x=b+16|0;H=+h[x>>3];d=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[d>>3])*.125;h[G>>3]=H;y=b+40|0;J=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;J=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-J))*.5+J;h[G+8>>3]=J;o=(+h[k>>3]-+h[d>>3])*.125+H;h[G+16>>3]=o;I=(+h[v>>3]-+h[w>>3])*.125+J;h[G+24>>3]=I;h[G+32>>3]=o;o=(+h[v>>3]-+h[w>>3])*.25+I;h[G+40>>3]=o;h[G+48>>3]=H;F=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=F;H=H-(+h[k>>3]-+h[d>>3])*.25;h[G+64>>3]=H;h[G+72>>3]=F;F=H-(+h[k>>3]-+h[d>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=I;h[G+112>>3]=H;h[G+120>>3]=J;_O(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;bP(a,B,2);H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;bP(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}if((e|0)<352321536){switch(e|0){case 335544320:break;default:break a}x=d+12|0;G=uH(x<<4)|0;y=b+16|0;m=+h[y>>3];u=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[u>>3])*.25;h[G>>3]=m;z=b+40|0;F=+h[z>>3];A=b+24|0;s=D+56|0;t=D+72|0;F=(+h[s>>3]-+h[t>>3]+(+h[A>>3]-F))*.5+F;d=G+8|0;h[d>>3]=F;h[G+16>>3]=m;F=(+h[s>>3]-+h[t>>3])*.125+F;v=G+24|0;h[v>>3]=F;I=m-(+h[k>>3]-+h[u>>3])*.125;w=G+32|0;h[w>>3]=I;o=(+h[s>>3]-+h[t>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;H=(+h[s>>3]-+h[t>>3])*.125+o;h[G+56>>3]=H;h[G+64>>3]=m;m=(+h[s>>3]-+h[t>>3])*.125+H;h[G+72>>3]=m;h[G+80>>3]=I;h[G+88>>3]=m;I=+h[y>>3];I=(+h[b>>3]-I)*.5+I;h[G+96>>3]=I;h[G+104>>3]=H;J=I-(+h[k>>3]-+h[u>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[u>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=H;H=(+h[k>>3]-+h[u>>3])*.125+J;h[G+160>>3]=H;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[d>>3];h[G+200>>3]=J;h[G+208>>3]=H;h[G+216>>3]=J;d=G+224|0;h[d>>3]=I;h[G+232>>3]=+h[v>>3];h[G+240>>3]=+h[w>>3];h[G+248>>3]=J;_O(a,G,x,f);c[B>>2]=c[d>>2];c[B+4>>2]=c[d+4>>2];c[B+8>>2]=c[d+8>>2];c[B+12>>2]=c[d+12>>2];d=B+16|0;h[d>>3]=+h[B>>3];J=+h[z>>3];f=B+24|0;h[f>>3]=(+h[A>>3]-J)*.5+J;bP(a,B,2);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 352321536:break;default:break a}A=d+4|0;G=uH(A<<4)|0;x=b+16|0;I=+h[x>>3];w=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[w>>3])*.125;h[G>>3]=I;y=b+40|0;J=+h[y>>3];z=b+24|0;u=D+56|0;v=D+72|0;J=(+h[u>>3]-+h[v>>3]+(+h[z>>3]-J))*.5+J;d=G+8|0;h[d>>3]=J;o=(+h[k>>3]-+h[w>>3])*.125+I;h[G+16>>3]=o;H=(+h[u>>3]-+h[v>>3])*.125+J;h[G+24>>3]=H;h[G+32>>3]=o;o=(+h[u>>3]-+h[v>>3])*.25+H;h[G+40>>3]=o;h[G+48>>3]=I;F=(+h[u>>3]-+h[v>>3])*.125+o;h[G+56>>3]=F;I=I-(+h[k>>3]-+h[w>>3])*.25;h[G+64>>3]=I;h[G+72>>3]=F;F=I-(+h[k>>3]-+h[w>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;_O(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;A=B+8|0;h[A>>3]=+h[d>>3];d=B+16|0;h[d>>3]=J;J=+h[y>>3];f=B+24|0;h[f>>3]=(+h[z>>3]-J)*.5+J;bP(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}}if((e|0)<402653184)if((e|0)<385875968){switch(e|0){case 369098752:break;default:break a}d=d+5|0;G=uH(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=+h[z>>3];J=+h[k>>3];h[G+48>>3]=(J-+h[B>>3])*.5+J;h[G+56>>3]=+h[z>>3];J=+h[k>>3];h[G+64>>3]=(J-+h[B>>3])*.5+J;h[G+72>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+80>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+88>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+104>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+120>>3]=J-(J-+h[z>>3])*.5;h[G+112>>3]=+h[b>>3];h[G+136>>3]=+h[A>>3];h[G+128>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;_O(a,G,d,f);D_(G);break}else{switch(e|0){case 385875968:break;default:break a}d=d+3|0;G=uH(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+56>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+64>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+72>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+88>>3]=J-(J-+h[z>>3])*.5;h[G+80>>3]=+h[b>>3];h[G+104>>3]=+h[A>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;_O(a,G,d,f);D_(G);break}else if((e|0)<419430400){switch(e|0){case 402653184:break;default:break a}d=d+3|0;G=uH(d<<4)|0;h[G>>3]=+h[b>>3];y=b+8|0;z=D+48|0;A=D+56|0;B=D+72|0;h[G+8>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[z>>3])*.5+J;h[G+24>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[z>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];y=b+40|0;h[G+56>>3]=J-(J-+h[y>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[z>>3])*.5+J;h[G+72>>3]=+h[y>>3];h[G+88>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[y>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[z>>3])*.5+J;h[G+104>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[b+56>>3];h[G+96>>3]=+h[b>>3];_O(a,G,d,f);D_(G);break}else{switch(e|0){case 419430400:break;default:break a}d=d+5|0;G=uH(d<<4)|0;h[G>>3]=+h[b>>3];B=b+8|0;A=D+48|0;y=D+56|0;z=D+72|0;h[G+8>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[A>>3])*.5+J;h[G+24>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[A>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];B=b+40|0;h[G+56>>3]=J-(J-+h[B>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[A>>3])*.5+J;h[G+72>>3]=+h[B>>3];h[G+88>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[A>>3])*.5+J;B=b+56|0;h[G+104>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+112>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+120>>3]=+h[B>>3];h[G+128>>3]=+h[b+48>>3];h[G+136>>3]=+h[B>>3];_O(a,G,d,f);D_(G);break}}while(0);D_(D)}l=E;return}function FJ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0;f=l;l=l+112|0;g=f;k=+h[b+8>>3]*2.0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[g+16>>3]=+h[b+16>>3];h[g+24>>3]=k-+h[b+24>>3];h[g+32>>3]=+h[b+32>>3];h[g+40>>3]=k-+h[b+40>>3];h[g+48>>3]=+h[b+48>>3];h[g+56>>3]=k-+h[b+56>>3];h[g+64>>3]=+h[b+64>>3];h[g+72>>3]=k-+h[b+72>>3];h[g+80>>3]=+h[b+80>>3];h[g+88>>3]=k-+h[b+88>>3];i=g+96|0;j=b+96|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];aP(a,b,d,0,0,e&255);aP(a,g,7,0,0,0);l=f;return}function GJ(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[c>>3];e=+h[c+8>>3];e=(+h[d+8>>3]-e)*b+e;h[a>>3]=(+h[d>>3]-f)*b+f;h[a+8>>3]=e;return}function HJ(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a){a=c[c[a+4>>2]>>2]|0;if((a|0)!=89)if((a|0)==92)a=2;else return ((a|0)==91?3:(a|0)==94?4:0)|0;else a=1}else a=0;return a|0}function IJ(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,D=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0.0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;aa=l;l=l+144|0;J=aa+112|0;N=aa+104|0;G=aa+96|0;H=aa+88|0;i=aa+80|0;Y=aa+64|0;_=aa+48|0;R=aa+40|0;S=aa+32|0;j=aa+24|0;p=aa+16|0;D=aa+136|0;A=aa+128|0;L=aa;$=uH(48)|0;Z=b+16|0;W=c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0;g=(W|0)==1616;X=c[W>>2]|0;d=c[W+4>>2]|0;e=c[W+8>>2]|0;m=+h[W+16>>3];n=+h[W+32>>3];o=+h[W+24>>3];X=X|(QL(xx(b,102485)|0)|0)&255;do if(!g){if(!X){W=c[Z>>2]|0;k=+h[W+32>>3]*72.0;f=+h[W+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);break}k=+SJ(b);if(k>0.0)f=k;else{W=c[Z>>2]|0;f=+h[W+32>>3];k=+h[W+40>>3];k=(f=0.0?.5:-.5))|0);f=k}}else{f=0.0;k=0.0}while(0);W=KL(b,c[46390]|0,d,0)|0;V=+LL(b,c[46392]|0,0.0,-360.0)+m;if(!e){U=+LL(b,c[46393]|0,0.0,-100.0);I=KL(b,c[46389]|0,4,0)|0;T=+LL(b,c[46394]|0,0.0,-100.0)}else{I=e;U=n;T=o}d=c[(c[Z>>2]|0)+104>>2]|0;e=d+24|0;c[Y>>2]=c[e>>2];c[Y+4>>2]=c[e+4>>2];c[Y+8>>2]=c[e+8>>2];c[Y+12>>2]=c[e+12>>2];q=+h[Y>>3];if(q>0.0){if(!g)M=11}else if(!(g|!(+h[Y+8>>3]>0.0)))M=11;if((M|0)==11){d=xx(b,102470)|0;do if(d){h[p>>3]=0.0;h[j>>3]=0.0;c[i>>2]=j;c[i+4>>2]=p;d=N1(d,102477,i)|0;m=+h[j>>3];if(m<0.0){h[j>>3]=0.0;m=0.0}n=+h[p>>3];if(n<0.0){h[p>>3]=0.0;o=0.0}else o=n;if((d|0)<=0){n=q+16.0;h[Y>>3]=n;m=8.0;break}m=m*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0);n=q+m;h[Y>>3]=n;if((d|0)!=1){m=o*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0)}}else{n=q+16.0;h[Y>>3]=n;m=8.0}while(0);d=Y+8|0;h[d>>3]=+h[d>>3]+m;d=c[(c[Z>>2]|0)+104>>2]|0;q=n}s=+h[d+24>>3];m=+h[c[(c[(ez(b)|0)+16>>2]|0)+8>>2]>>3];if(m>0.0){P=m*72.0;P=+(~~(P+(P>=0.0?.5:-.5))|0);Q=+TJ(q,P);h[Y>>3]=Q;p=Y+8|0;h[p>>3]=+TJ(+h[p>>3],P)}else Q=q;d=c[(c[Z>>2]|0)+8>>2]|0;do if(!(a[d+12>>0]|0)){e=xx(b,105999)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){CC(A,ez(b)|0,e);d=c[A>>2]|0;g=c[A+4>>2]|0;if((g&d|0)==-1){d=ry(b)|0;c[G>>2]=e;c[G+4>>2]=d;Pw(0,102561,G)|0;e=0;d=0;break}else{a[(c[(ez(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}else{d=c[d>>2]|0;if((a[d>>0]|0)==99?(b$(d,102493)|0)==0:0){e=xx(b,102500)|0;CC(D,ez(b)|0,e);d=c[D>>2]|0;g=c[D+4>>2]|0;if((g&d|0)==-1){d=ry(b)|0;c[H>>2]=e|0?e:102510;c[H+4>>2]=d;Pw(0,102516,H)|0;e=0;d=0;break}else{a[(c[(ez(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}while(0);P=+(e|0);h[_>>3]=Q>P?Q:P;P=+h[Y+8>>3];r=+(d|0);d=_+8|0;h[d>>3]=P>r?P:r;e=(I|0)<3&(T!=0.0|U!=0.0)?120:I;g=xx(b,102602)|0;if(!g)i=99;else{i=a[g>>0]|0;i=i<<24>>24==116?116:i<<24>>24==98?98:99}g=c[Z>>2]|0;a[(c[g+104>>2]|0)+80>>0]=i;if((e|0)==4?(T==0.0?((~~(V+(V>=0.0?.5:-.5))|0)%90|0|0)==0:0)&U==0.0:0)p=1;else M=39;do if((M|0)==39){g=c[(c[(c[g+8>>2]|0)+8>>2]|0)+44>>2]|0;if(g|0){p=c[g>>2]|0;c[J>>2]=c[_>>2];c[J+4>>2]=c[_+4>>2];c[J+8>>2]=c[_+8>>2];c[J+12>>2]=c[_+12>>2];ub[p&63](L,J);c[_>>2]=c[L>>2];c[_+4>>2]=c[L+4>>2];c[_+8>>2]=c[L+8>>2];c[_+12>>2]=c[L+12>>2];p=0;break}m=+h[d>>3];n=m*1.4142135623730951;if(f>n&i<<24>>24==99){o=m/f;o=+C(+(1.0/(1.0-o*o)));o=+h[_>>3]*o;h[_>>3]=o}else{o=+h[_>>3]*1.4142135623730951;h[_>>3]=o;h[d>>3]=n;m=n}if((e|0)>2){z=+E(+(3.141592653589793/+(e|0)));h[_>>3]=o/z;h[d>>3]=m/z;p=0}else p=0}while(0);m=+h[d>>3];g=NL(b,c[46395]|0,134226)|0;if((a[g>>0]|0)==115?(b$(g,105204)|0)==0:0){h[_>>3]=k;h[d>>3]=f;N=$+40|0;c[N>>2]=c[N>>2]|2048}else{if(!((QL(g)|0)<<24>>24)){z=+h[_>>3];k=k>z?k:z;h[_>>3]=k;z=+h[d>>3];f=f>z?f:z}else{M=c[(c[Z>>2]|0)+104>>2]|0;if(!(!(k<+h[M+24>>3])?!(f<+h[M+32>>3]):0)){L=ry(b)|0;M=ry(ez(b)|0)|0;c[N>>2]=L;c[N+4>>2]=M;Pw(0,102611,N)|0}h[_>>3]=k}h[d>>3]=f}if(!X){z=f;y=k}else{y=k>f?k:f;h[d>>3]=y;h[_>>3]=y;z=y}do if(!((QL(NL(b,c[46386]|0,134226)|0)|0)<<24>>24)){if(p){f=+h[(Q>+h[_>>3]?Y:_)>>3];break}f=+h[d>>3];if(P>3]*+C(+(1.0-P*P/(f*f)));f=Q>f?Q:f}else f=Q}else f=Q;while(0);g=c[(c[Z>>2]|0)+104>>2]|0;h[g+40>>3]=s-q+f;A=$+40|0;if(!(c[A>>2]&2048)){x=+h[d>>3]-m;h[g+48>>3]=(P1;g=j?W:1;a:do if((e|0)<3){g=uH(g<<5)|0;k=+h[_>>3]*.5;f=+h[d>>3]*.5;h[g>>3]=-k;h[g+8>>3]=-f;h[g+16>>3]=k;h[g+24>>3]=f;if(j){e=1;i=2;while(1){if((e|0)==(W|0))break;y=k+4.0;z=f+4.0;h[g+(i<<4)>>3]=-y;h[g+(i<<4)+8>>3]=-z;S=i|1;h[g+(S<<4)>>3]=y;h[g+(S<<4)+8>>3]=z;e=e+1|0;i=i+2|0;k=y;f=z}h[_>>3]=k*2.0;h[d>>3]=f*2.0;e=2}else e=2}else{g=uH(O(g<<4,e)|0)|0;i=c[(c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;b:do if(!i){q=6.283185307179586/+(e|0);t=q*.5;r=+F(+t);s=+u$(+B(+U)+ +B(+T),1.0);t=T*1.4142135623730951/+E(+t);u=U*.5;w$((q+-3.141592653589793)*.5,R,S);v=V*.017453292519943295;k=0.0;f=0.0;m=0.0;i=0;n=+h[S>>3]*.5;o=+h[R>>3]*.5;while(1){if((i|0)>=(e|0))break b;m=m+q;w$(m,R,S);n=+h[S>>3]*r+n;o=+h[R>>3]*r+o;x=(o*t+s)*n+u*o;w$(+K(+o,+x)+v,R,S);x=+u$(x,o);w=+h[S>>3]*x*+h[_>>3];x=+h[R>>3]*x*+h[d>>3];ba=+B(+w);f=ba>f?ba:f;ba=+B(+x);k=ba>k?ba:k;h[g+(i<<4)>>3]=w;h[g+(i<<4)+8>>3]=x;if(p)break;else i=i+1|0}ba=-w;h[g+16>>3]=ba;h[g+24>>3]=x;h[g+32>>3]=ba;ba=-x;h[g+40>>3]=ba;h[g+48>>3]=w;h[g+56>>3]=ba}else{ub[c[i+4>>2]&63](g,_);k=+h[d>>3]*.5;f=+h[_>>3]*.5}while(0);f=f*2.0;k=k*2.0;y=y>f?y:f;h[_>>3]=y;ba=z>k?z:k;h[d>>3]=ba;f=y/f;k=ba/k;i=0;while(1){if((i|0)>=(e|0))break;N=g+(i<<4)|0;b=g+(i<<4)+8|0;ba=+h[b>>3]*k;h[N>>3]=+h[N>>3]*f;h[b>>3]=ba;i=i+1|0}if(j){j=e+-1|0;k=+h[g>>3];m=+h[g+8>>3];f=+K(+(m-+h[g+(j<<4)+8>>3]),+(k-+h[g+(j<<4)>>3]));j=0;c:while(1){if((j|0)>=(e|0))break;p=j+1|0;i=(p|0)%(e|0)|0;n=+h[g+(i<<4)>>3];o=+h[g+(i<<4)+8>>3];q=+K(+(o-m),+(n-k));z=(f+3.141592653589793-q)*.5;ba=4.0/+F(+z);w$(f-z,R,S);h[R>>3]=+h[R>>3]*ba;h[S>>3]=+h[S>>3]*ba;i=1;f=m;while(1){if((i|0)==(W|0)){f=q;j=p;k=n;m=o;continue c}z=+h[S>>3]+k;ba=+h[R>>3]+f;b=(O(i,e)|0)+j|0;h[g+(b<<4)>>3]=z;h[g+(b<<4)+8>>3]=ba;i=i+1|0;k=z;f=ba}}j=O(e,W+-1|0)|0;i=0;while(1){if((i|0)>=(e|0))break a;S=i+j|0;z=+h[g+(S<<4)+8>>3];y=+B(+(+h[g+(S<<4)>>3]))*2.0;ba=+h[_>>3];h[_>>3]=y>ba?y:ba;z=+B(+z)*2.0;ba=+h[d>>3];h[d>>3]=z>ba?z:ba;i=i+1|0}}}while(0);c[$>>2]=X;c[$+4>>2]=W;c[$+8>>2]=e;h[$+16>>3]=V;h[$+32>>3]=U;h[$+24>>3]=T;c[$+44>>2]=g;f=+h[_>>3];if(!(c[A>>2]&2048)){e=c[Z>>2]|0;h[e+32>>3]=f*.013888888888888888}else{e=c[Z>>2]|0;h[e+32>>3]=+h[(Q>f?Y:_)>>3]*.013888888888888888;d=(P>+h[d>>3]?Y:_)+8|0}h[e+40>>3]=+h[d>>3]*.013888888888888888;c[e+12>>2]=$;l=aa;return}function JJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;j=o+40|0;e=o+32|0;k=o+16|0;n=o;d=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]|0)>>>2&1^1;m=a+16|0;f=c[c[(c[m>>2]|0)+104>>2]>>2]|0;c[46512]=f;f=W_(f)|0;f=uH(((f|0)>1?f:1)+1|0)|0;b=LJ(a,d,1,f)|0;if(!b){c[e>>2]=c[c[(c[m>>2]|0)+104>>2]>>2];Pw(1,102446,e)|0;c[46512]=102467;b=LJ(a,d,1,f)|0}D_(f);MJ(j,a,b);d=c[m>>2]|0;i=+h[d+32>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))|0);h[n>>3]=i;g=+h[d+40>>3]*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);d=n+8|0;h[d>>3]=g;if(!((QL(NL(a,c[46395]|0,134226)|0)|0)<<24>>24)){i=+h[(+h[b>>3]>i?b:n)>>3];h[n>>3]=i;e=b+8|0;g=+h[(+h[e>>3]>g?b:n)+8>>3];h[d>>3]=g;d=e;e=b}else{d=b+8|0;e=b}a=(QL(NL(a,c[46386]|0,134226)|0)|0)&255;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];NJ(b,j,a);OJ(k,i*-.5,g*.5);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];PJ(b,j,15);n=c[m>>2]|0;h[n+32>>3]=+h[e>>3]*.013888888888888888;h[n+40>>3]=(+h[d>>3]+1.0)*.013888888888888888;c[n+12>>2]=b;l=o;return}function KJ(a){a=a|0;var b=0.0,d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0.0,m=0;j=uH(48)|0;k=a+16|0;g=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;f=+LL(a,c[46376]|0,1797693134862315708145274.0e284,0.0);b=+LL(a,c[46375]|0,1797693134862315708145274.0e284,0.0);f=f0.0?(f>.0003?f:.0003):f;i=c[k>>2]|0;h[i+40>>3]=f;h[i+32>>3]=f;b=f*72.0;g=KL(a,c[46390]|0,g,0)|0;i=uH((g|0)<1?32:g<<5)|0;f=f*36.0;e=-f;h[i>>3]=e;h[i+8>>3]=e;h[i+16>>3]=f;h[i+24>>3]=f;if((g|0)>1){a=1;d=2;e=f;b=f;while(1){if((a|0)==(g|0))break;l=e+4.0;f=b+4.0;h[i+(d<<4)>>3]=-l;h[i+(d<<4)+8>>3]=-f;m=d|1;h[i+(m<<4)>>3]=l;h[i+(m<<4)+8>>3]=f;a=a+1|0;d=d+2|0;e=l;b=f}b=e*2.0}c[j>>2]=1;c[j+4>>2]=g;c[j+8>>2]=2;m=j+16|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j+44>>2]=i;l=b*.013888888888888888;m=c[k>>2]|0;h[m+32>>3]=l;h[m+40>>3]=l;c[m+12>>2]=j;return}function LJ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=uH(72)|0;n=c[(c[b+16>>2]|0)+104>>2]|0;m=0;i=1;j=c[46512]|0;a:while(1){k=a[j>>0]|0;switch(k<<24>>24){case 0:break a;case 92:{j=j+1|0;k=a[j>>0]|0;switch(k<<24>>24){case 124:case 125:case 123:case 92:{l=m;break}default:E=4}break}default:E=4}if((E|0)==4){E=0;switch(k<<24>>24){case 123:{l=m+1|0;break}case 125:{l=m+-1|0;break}default:{l=m;i=i+((m|0)==0&k<<24>>24==124&1)|0}}if((l|0)<0)break}m=l;j=j+1|0}B=g+56|0;c[B>>2]=uH(i<<2)|0;a[g+64>>0]=d;y=(d|0)==0&1;z=n+82|0;A=f+1|0;v=(e|0)!=0;w=n+16|0;x=n+4|0;u=n+8|0;k=0;m=0;d=0;t=0;l=0;e=0;n=f;i=0;j=0;b:while(1){p=k;k=0;c:while(1){d:while(1){s=e;e:while(1){r=k;o=i;f:while(1){q=m;g:while(1){while(1){if(t){E=78;break b}m=c[46512]|0;i=a[m>>0]|0;if((i+-1&255)>=31)break;c[46512]=m+1}switch(i<<24>>24|0){case 92:{E=53;break d}case 0:case 124:case 125:break e;case 60:break f;case 62:break g;case 123:break;default:{k=d;i=m;break d}}i=m+1|0;c[46512]=i;if(l|0){E=34;break b}if(!(a[i>>0]|0)){E=34;break b}e=LJ(b,y,0,f)|0;c[(c[B>>2]|0)+(q<<2)>>2]=e;if(!e){E=36;break b}else{q=q+1|0;l=4}}if(a[z>>0]|0){k=d;i=m;break d}if(!(l&16)){E=27;break b}if(o>>>0>A>>>0?(C=o+-1|0,(C|0)!=(s|0)):0)i=(a[C>>0]|0)==32?C:o;else i=o;a[i>>0]=0;r=n1(f)|0;c[46512]=(c[46512]|0)+1;m=q;l=l&-17;o=i}if(l&6|0){E=22;break b}if(a[z>>0]|0){k=d;i=m;break d}c[46512]=m+1;m=q;l=l|18;k=r;s=f;i=f}if(!((l&16|0)==0&(v|i<<24>>24!=0))){E=38;break b}if(!(l&4)){k=uH(72)|0;c[(c[B>>2]|0)+(q<<2)>>2]=k;m=q+1|0}else{k=p;m=q}if(r|0)c[k+60>>2]=r;if(!(l&5)){a[f+j>>0]=32;l=l|1;j=j+1|0}i=f+j|0;if(l&1){if((j|0)>1?(D=i+-1|0,(D|0)!=(n|0)):0)i=(a[D>>0]|0)==32?D:i;a[i>>0]=0;n=n1(f)|0;c[k+52>>2]=kH(b,n,a[z>>0]|0?2:0,+h[w>>3],c[x>>2]|0,c[u>>2]|0)|0;a[k+64>>0]=1;n=f;j=0}i=c[46512]|0;switch(a[i>>0]|0){case 0:{t=1;e=s;i=o;continue b}case 125:{E=51;break b}default:{}}c[46512]=i+1;p=k;l=0;k=0;e=s;i=o}h:do if((E|0)==53){E=0;k=f+j|0;i=m+1|0;switch(a[i>>0]|0){case 0:{k=d;i=m;break h}case 62:case 60:case 124:case 125:case 123:{k=d;break}case 32:{if(!(a[z>>0]|0))k=1;else E=55;break}default:E=55}if((E|0)==55){E=0;a[k>>0]=92;k=d;l=l|9;j=j+1|0}c[46512]=i}while(0);d=f+j|0;if(l&4|0?(a[i>>0]|0)!=32:0){E=59;break b}if(!(l&24))l=(a[i>>0]|0)==32?l:l|9;if(!(l&8))if(!(l&16))e=s;else{m=a[i>>0]|0;d=(k|0)!=0;if(!(d|m<<24>>24!=32))if((o|0)!=(f|0))if((a[o+-1>>0]|0)==32)m=o;else E=73;else m=f;else E=73;if((E|0)==73){E=0;a[o>>0]=m;m=o+1|0;i=c[46512]|0}e=d?m+-1|0:s;o=m}else{m=a[i>>0]|0;e=(k|0)!=0;if(!((!(e|m<<24>>24!=32)?(a[d+-1>>0]|0)==32:0)?(a[z>>0]|0)==0:0)){a[d>>0]=m;j=j+1|0}if(e){e=s;n=f+j+-1|0}else e=s}i=i+1|0;c[46512]=i;while(1){if((a[i>>0]|0)>=0){m=q;d=k;k=r;i=o;continue c}s=i+1|0;c[46512]=s;a[f+j>>0]=a[i>>0]|0;j=j+1|0;i=s}}}if((E|0)==22){QJ(g,r);g=0}else if((E|0)==27){QJ(g,r);g=0}else if((E|0)==34){QJ(g,r);g=0}else if((E|0)==36){QJ(g,r);g=0}else if((E|0)==38){QJ(g,r);g=0}else if((E|0)==51){c[46512]=i+1;c[g+48>>2]=m}else if((E|0)==59){QJ(g,r);g=0}else if((E|0)==78)c[g+48>>2]=q;return g|0}function MJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;k=u+48|0;m=u+40|0;n=u+32|0;t=u+16|0;s=u;j=c[e+52>>2]|0;a:do if(!j){n=t+8|0;o=e+48|0;p=e+56|0;q=e+64|0;r=s+8|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;j=0;while(1){if((j|0)>=(c[o>>2]|0))break a;MJ(s,d,c[(c[p>>2]|0)+(j<<2)>>2]|0);if(!(a[q>>0]|0)){h[n>>3]=+h[n>>3]+ +h[r>>3];k=t;m=+h[t>>3]>+h[s>>3]?t:s}else{h[t>>3]=+h[t>>3]+ +h[s>>3];k=n;m=(+h[n>>3]>+h[r>>3]?t:s)+8|0}h[k>>3]=+h[m>>3];j=j+1|0}}else{g=+h[j+24>>3];f=+h[j+32>>3];if(g>0.0|f>0.0){j=xx(d,102470)|0;do if(j){c[k>>2]=m;c[k+4>>2]=n;j=N1(j,102477,k)|0;if((j|0)<=0){i=8.0;g=g+16.0;break}i=+h[m>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0);g=g+i;if((j|0)!=1){i=+h[n>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0)}}else{i=8.0;g=g+16.0}while(0);f=i+f}h[t>>3]=g;h[t+8>>3]=f}while(0);c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[e+8>>2]=c[t+8>>2];c[e+12>>2]=c[t+12>>2];c[b>>2]=c[t>>2];c[b+4>>2]=c[t+4>>2];c[b+8>>2]=c[t+8>>2];c[b+12>>2]=c[t+12>>2];l=u;return}function NJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;s=l;l=l+32|0;o=s+16|0;p=s;q=+h[d>>3];i=q-+h[b>>3];r=+h[d+8>>3];f=r-+h[b+8>>3];c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];d=c[b+52>>2]|0;if(!((e|0)!=0|(d|0)==0)){n=d+40|0;h[n>>3]=+h[n>>3]+i;n=d+48|0;h[n>>3]=+h[n>>3]+f}m=b+48|0;d=c[m>>2]|0;a:do if(d|0){n=b+64|0;f=((a[n>>0]|0)==0?f:i)/+(d|0);k=b+56|0;j=0;while(1){if((j|0)>=(d|0))break a;b=c[(c[k>>2]|0)+(j<<2)>>2]|0;g=j+1|0;d=~~(f*+(g|0))-~~(f*+(j|0))|0;if(!(a[n>>0]|0))OJ(p,q,+h[b+8>>3]+ +(d|0));else OJ(p,+h[b>>3]+ +(d|0),r);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];NJ(b,o,e);j=g;d=c[m>>2]|0}}while(0);l=s;return}function OJ(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function PJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+48|0;j=q+32|0;n=q+16|0;m=q;a[b+65>>0]=e;k=b+16|0;s=+h[d>>3];p=d+8|0;r=+h[p>>3];OJ(n,s,r-+h[b+8>>3]);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];k=b+32|0;OJ(m,+h[b>>3]+s,r);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[b+48>>2]|0;m=k+-1|0;n=(e|0)==0;o=b+56|0;i=b+64|0;g=0;while(1){if((g|0)>=(k|0))break;do if(!n){b=(g|0)==0;f=(g|0)==(m|0);if(!(a[i>>0]|0))if(b){b=f?15:14;break}else{b=f?11:10;break}else if(b){b=f?15:13;break}else{b=f?7:5;break}}else b=0;while(0);f=c[(c[o>>2]|0)+(g<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];PJ(f,j,b&e);if(!(a[i>>0]|0))h[p>>3]=+h[p>>3]-+h[(c[(c[o>>2]|0)+(g<<2)>>2]|0)+8>>3];else h[d>>3]=+h[c[(c[o>>2]|0)+(g<<2)>>2]>>3]+ +h[d>>3];g=g+1|0}l=q;return}function QJ(a,b){a=a|0;b=b|0;RJ(a);D_(b);return}function RJ(a){a=a|0;var b=0,d=0,e=0;d=a+48|0;e=a+56|0;b=0;while(1){if((b|0)>=(c[d>>2]|0))break;RJ(c[(c[e>>2]|0)+(b<<2)>>2]|0);b=b+1|0}D_(c[a+60>>2]|0);nH(c[a+52>>2]|0);D_(c[e>>2]|0);D_(a);return}function SJ(a){a=a|0;var b=0.0,d=0.0;d=+LL(a,c[46376]|0,0.0,.01);b=+LL(a,c[46375]|0,0.0,.02);b=(d>b?d:b)*72.0;return +(+(~~(b+(b>=0.0?.5:-.5))|0))}function TJ(a,b){a=+a;b=+b;var c=0;c=~~(a/b);return +(+((+(c|0)*b+1.0e-05>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[c[a+4>>2]>>2]|0)==89&1;return a|0}function VJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[46513]|0;a:do if(!f)d=0;else{g=c[46514]|0;e=0;while(1){if((e|0)>=(g|0)){d=0;break a}d=c[f+(e<<2)>>2]|0;h=c[d>>2]|0;if((a[h>>0]|0)==(a[b>>0]|0)?(b$(h,b)|0)==0:0)break a;e=e+1|0}}while(0);return d|0}function WJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(ZL(xx(d,102500)|0)|0)if((a[b>>0]|0)==101?(b$(b,102659)|0)==0:0){d=101;g=6}else{b=102493;g=4}else g=4;if((g|0)==4){d=a[b>>0]|0;if(d<<24>>24==99)if(!(b$(b,102493)|0))g=11;else{d=99;g=6}else g=6}a:do if((g|0)==6){e=20744;while(1){f=c[e>>2]|0;if(!f){g=11;break a}if((a[f>>0]|0)==d<<24>>24?(b$(f,b)|0)==0:0){b=e;break a}e=e+16|0}}while(0);if((g|0)==11)b=XJ(b)|0;return b|0}function XJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=VJ(b)|0;if(!d){f=c[46514]|0;d=f+1|0;c[46514]=d;e=c[46513]|0;if(!e)d=vH(d<<2)|0;else d=xH(e,d<<2)|0;c[46513]=d;d=uH(16)|0;c[(c[46513]|0)+(f<<2)>>2]=d;c[d>>2]=c[5186];c[d+4>>2]=c[5187];c[d+8>>2]=c[5188];c[d+12>>2]=c[5189];e=n1(b)|0;c[d>>2]=e;do if(!0){if((a[b>>0]|0)==99?(b$(b,102493)|0)==0:0){e=1;break}c[g>>2]=c[5186];c[g+4>>2]=e;Pw(0,102664,g)|0;e=0}else e=1;while(0);a[d+12>>0]=e}l=h;return d|0}function YJ(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[b>>3]*.5257311121191336;c=+h[b+8>>3]*.8944271909999159;c=d>c?d:c;h[a>>3]=c*4.97979656976556;h[a+8>>3]=c*4.73606797749979;return}function ZJ(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0.0;d=+h[b>>3];k=b+8|0;e=+h[k>>3];c=e/d;if(!(c>.9510565162951536))if(c<.9510565162951536){j=d;e=d*.9510565162951536}else j=d;else j=e*1.0514622242382672;d=j*.5257311121191336;g=j*.20081141588622725;i=j*.05020285397155681;c=.3141592653589793;f=0;while(1){if((f|0)>=10)break;h[a+(f<<4)>>3]=+E(+c)*d;h[a+(f<<4)+8>>3]=+F(+c)*d-i;m=c+.6283185307179586;l=f|1;h[a+(l<<4)>>3]=+E(+m)*g;h[a+(l<<4)+8>>3]=+F(+m)*g-i;c=c+1.2566370614359172;f=f+2|0}h[b>>3]=j;h[k>>3]=e;return}function _J(a){a=a|0;a=c[(c[a+16>>2]|0)+12>>2]|0;if(a|0){D_(c[a+44>>2]|0);D_(a)}return}function $J(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+80|0;k=o+40|0;g=o;n=o+64|0;h=o+56|0;if(!(a[e>>0]|0)){g=4208;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}else{i=(f|0)==0?103330:f;c[n>>2]=15;j=d+16|0;f=c[j>>2]|0;do if(a[(c[f+104>>2]|0)+82>>0]|0){f=_Q(d,e,n)|0;if(!f){f=c[j>>2]|0;m=8;break}if(nK(d,f,g,i,c[n>>2]|0,0)|0){c[k>>2]=ry(d)|0;c[k+4>>2]=e;c[k+8>>2]=i;Pw(0,103332,k)|0}}else m=8;while(0);if((m|0)==8){if((c[(c[f+8>>2]|0)+8>>2]|0)==1664)h=0;else{c[h>>2]=d;c[h+4>>2]=0}if(nK(d,0,g,e,c[n>>2]|0,h)|0)oK(d,e)}c[g+36>>2]=0;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}l=o;return}function aK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0;r=l;l=l+112|0;n=r+96|0;m=r+80|0;p=r+64|0;k=r+48|0;q=r+32|0;o=r;f=r+16|0;if(!a){c[46517]=0;a=0}else{g=c[a+4>>2]|0;a=c[a>>2]|0;i=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];ZG(f,n,i);c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];a:do if(g){d=+h[g+8>>3];e=+h[g+24>>3];s=+h[q>>3];if((+h[g>>3]<=s?s<=+h[g+16>>3]:0)?(j=+h[q+8>>3],d<=j):0)a=j<=e&1;else a=0}else{if((a|0)==(c[46517]|0)){f=c[46518]|0;g=c[46520]|0;i=c[46519]|0}else{g=c[(c[a+16>>2]|0)+12>>2]|0;c[46521]=g;i=c[g+44>>2]|0;c[46519]=i;f=c[g+8>>2]|0;c[46518]=f;g=O((c[g+4>>2]|0)+-1|0,f)|0;g=(g|0)>0?g:0;c[46520]=g;c[46517]=a}a=0;b=0;while(1){if((a|0)>=(f|0)){a=1;break a}t=i+(g+a<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=i+(g+((a+4|0)%(f|0)|0)<<4)|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[p>>2]=c[45844];c[p+4>>2]=c[45845];c[p+8>>2]=c[45846];c[p+12>>2]=c[45847];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];b=b+((mK(k,p,m,n)|0)==0&1)|0;if((b|0)==2){a=0;break}else a=a+2|0}}while(0)}l=r;return a|0}function bK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;e=c[b+16>>2]|0;if((a[(c[e+104>>2]|0)+82>>0]|0)!=0?(a[e+145>>0]|0)!=0:0)b=bR(b,d,0,f,g)|0;else b=0;return b|0}function cK(e,f){e=e|0;f=f|0;var i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;P=l;l=l+48|0;H=P+24|0;G=P+16|0;A=P+8|0;z=P;L=P+32|0;n=P+28|0;M=c[e+16>>2]|0;N=M+208|0;i=c[N>>2]|0;if((i|0)==0?(b[M+260>>1]&1)==0:0)J=0;else E=4;if((E|0)==4)if(!(c[e+152>>2]&4)){PO(e,i,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);J=1}else J=1;I=f+16|0;i=c[I>>2]|0;r=c[i+12>>2]|0;F=c[r+44>>2]|0;K=c[r+8>>2]|0;r=c[r+4>>2]|0;if((c[46515]|0)<(K|0)){i=K+5|0;c[46515]=i;j=c[46516]|0;if(!j)i=vH(i<<4)|0;else i=xH(j,i<<4)|0;c[46516]=i;i=c[I>>2]|0}D=(c[i+104>>2]|0)+56|0;i=i+16|0;c[D>>2]=c[i>>2];c[D+4>>2]=c[i+4>>2];c[D+8>>2]=c[i+8>>2];c[D+12>>2]=c[i+12>>2];D=c[I>>2]|0;B=+h[D+32>>3]*72.0;B=(+h[D+96>>3]+ +h[D+88>>3])/+(~~(B+(B>=0.0?.5:-.5))|0);C=+h[D+40>>3]*72.0;C=+h[D+80>>3]/+(~~(C+(C>=0.0?.5:-.5))|0);D=dK(e,f)|0;c[L>>2]=0;i=d[(c[I>>2]|0)+117>>0]|0;do if(!(i&1)){if(i&2|0){s=OL(f,0,103230)|0;UO(e,s);WO(e,OL(f,0,103238)|0);j=0;i=1;break}if(i&8|0){s=OL(f,0,103246)|0;UO(e,s);WO(e,OL(f,0,103254)|0);j=0;i=1;break}if(i&4|0){s=OL(f,0,103262)|0;UO(e,s);WO(e,OL(f,0,103270)|0);j=0;i=1;break}if(!(D&1))if(!(D&576)){j=0;i=0}else{j=eK(f)|0;i=1}else{j=eK(f)|0;if(!((uG(j,L,n)|0)<<24>>24)){WO(e,j);i=1}else{WO(e,c[L>>2]|0);i=c[L+4>>2]|0;m=KL(f,c[46403]|0,0,0)|0;k=+g[n>>2];if(!i)XO(e,134232,m,k);else XO(e,i,m,k);i=(D&2)>>>1|2}}s=fK(e,f)|0}else{s=OL(f,0,103214)|0;UO(e,s);WO(e,OL(f,0,103222)|0);j=0;i=1}while(0);m=c[(c[I>>2]|0)+8>>2]|0;if(a[m+12>>0]|0){m=c[m>>2]|0;if((a[m>>0]|0)==99){m=(b$(m,102493)|0)==0;E=33}else u=1}else{m=1;E=33}if((E|0)==33){m=m^1;if((r|0)!=0|i<<24>>24==0|m)u=m;else{UO(e,134297);r=1;u=0}}v=(K|0)<3;w=(D&512|0)!=0;y=(D&8|0)==0;x=(D&64|0)==0;p=(D&1024|0)==0;q=(D&2130706444|0)==0;t=0;while(1){if((t|0)>=(r|0))break;n=O(t,K)|0;o=c[46516]|0;m=0;while(1){if((m|0)>=(K|0))break;R=m+n|0;k=+h[F+(R<<4)+8>>3];Q=c[I>>2]|0;h[o+(m<<4)>>3]=+h[Q+16>>3]+ +h[F+(R<<4)>>3]*B;h[o+(m<<4)+8>>3]=+h[Q+24>>3]+k*C;m=m+1|0}do if(v){if(w&(t|0)==0?(A$(j,58)|0)!=0:0)if((SE(e,o,j)|0)>1){c[z>>2]=ry(f)|0;Pw(3,103278,z)|0;i=0}else i=0;ZO(e,c[46516]|0,K,i&255);if(!y)gK(e,f)}else{if(!x){if((t|0)==0?(WE(e,o,j,1)|0)>1:0){c[A>>2]=ry(f)|0;Pw(3,103278,A)|0}_O(e,c[46516]|0,K,0);break}if(!p){UO(e,134297);_O(e,c[46516]|0,K,i&255);UO(e,s);bP(e,(c[46516]|0)+32|0,2);break}i=i&255;if(q){_O(e,o,K,i);break}else{EJ(e,o,K,D,i);break}}while(0);t=t+1|0;i=0}m=c[(c[I>>2]|0)+8>>2]|0;if(!(a[m+12>>0]|0)){m=xx(f,105999)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{m=c[m>>2]|0;if((a[m>>0]|0)==99?(b$(m,102493)|0)==0:0){m=xx(f,102500)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{o=m;E=65}}if((E|0)==65){n=c[46516]|0;m=0;while(1){if((m|0)>=(K|0))break;k=+h[F+(m<<4)+8>>3];R=c[I>>2]|0;h[n+(m<<4)>>3]=+h[R+16>>3]+ +h[F+(m<<4)>>3]*B;h[n+(m<<4)+8>>3]=+h[R+24>>3]+k*C;m=m+1|0}m=i&255;do if(!(u|i<<24>>24==0)){if(v){if(w&(t|0)==0?(A$(j,58)|0)!=0:0)if((SE(e,n,j)|0)>1){c[G>>2]=ry(f)|0;Pw(3,103278,G)|0;i=0}else i=0;ZO(e,c[46516]|0,K,i&255);if(y)break;gK(e,f);break}if(x)if(!(D&12)){_O(e,n,K,m);break}else{EJ(e,n,K,D,m);break}else{if((WE(e,n,j,1)|0)>1){c[H>>2]=ry(f)|0;Pw(3,103278,H)|0}_O(e,c[46516]|0,K,0);break}}while(0);R=c[46516]|0;dP(e,o,R,K,i,NL(f,c[46396]|0,134226)|0)}D_(c[L>>2]|0);oH(e,10,c[(c[I>>2]|0)+104>>2]|0);if(J){if(c[e+152>>2]&4|0)PO(e,c[N>>2]|0,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);QO(e)}l=P;return}function dK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;e=jK(d,f)|0;if(e|0)YO(b,e);e=c[46402]|0;if((e|0?(g=yx(d,e)|0,g|0):0)?a[g>>0]|0:0)fP(b,+LL(d,c[46402]|0,1.0,0.0));l=h;return c[f>>2]|0}function eK(a){a=a|0;return iK(a,131718)|0}function fK(b,d){b=b|0;d=d|0;d=OL(d,c[46378]|0,191979)|0;d=a[d>>0]|0?d:134232;UO(b,d);return d|0}function gK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0;d=l;l=l+96|0;j=d+80|0;k=d+64|0;e=d+32|0;m=d+16|0;g=d;b=c[b+16>>2]|0;f=+h[b+80>>3];h[m+8>>3]=f*.375;i=+h[b+96>>3];h[m>>3]=i*.6614;b=b+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];hK(g,k,j);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];g=e+8|0;b=e+24|0;h[b>>3]=+h[g>>3];h[e+16>>3]=+h[e>>3]-i*1.3228;bP(a,e,2);f=+h[g>>3]-f*.75;h[g>>3]=f;h[b>>3]=f;bP(a,e,2);l=d;return}function hK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function iK(b,d){b=b|0;d=d|0;var e=0;e=OL(b,c[46379]|0,191979)|0;if(!(a[e>>0]|0)){e=OL(b,c[46378]|0,191979)|0;return ((a[e>>0]|0)==0?d:e)|0}else return e|0;return 0}function jK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=OL(b,c[46387]|0,191979)|0;a:do if(!(a[e>>0]|0)){g=0;e=0}else{g=AF(e)|0;h=g;e=0;b:while(1){f=c[h>>2]|0;if(!f)break a;switch(a[f>>0]|0){case 102:{if(!(b$(f,108075)|0)){h=h+4|0;e=e|1;continue b}break}case 114:{if(!(b$(f,103290)|0)){f=h;do{j=f;f=f+4|0;i=c[f>>2]|0;c[j>>2]=i}while((i|0)!=0);j=h;e=e|4;h=j;continue b}if(!(b$(f,103308)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|3;h=j;continue b}break}case 100:{if(!(b$(f,103298)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|8;h=j;continue b}break}case 105:{if(!(b$(f,131253)|0)){h=h+4|0;e=e|32;continue b}break}case 115:{if((b$(f,103315)|0)==0?kK(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|64;h=j;continue b}break}case 119:{if((b$(f,103323)|0)==0?lK(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|512;h=j;continue b}break}default:{}}h=h+4|0}}while(0);f=c[(c[(c[b+16>>2]|0)+8>>2]|0)+8>>2]|0;if(f)e=c[f+40>>2]|e;c[d>>2]=e;return g|0}function kK(a){a=a|0;var b=0.0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if((((a|0)!=0?(c[a+8>>2]|0)==4:0)?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function lK(a){a=a|0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[a+8>>2]|0)<3&1;return a|0}function mK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;i=+h[c+8>>3];g=-(+h[d+8>>3]-i);f=+h[c>>3];e=+h[d>>3]-f;f=e*i+f*g;return (+h[a+8>>3]*e+ +h[a>>3]*g-f>=0.0^+h[b>>3]*g-f+ +h[b+8>>3]*e>=0.0^1)&1|0}function nK(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;G=l;l=l+192|0;B=G+176|0;E=G+160|0;m=G+144|0;z=G+128|0;A=G+112|0;n=G+96|0;o=G+80|0;p=G+64|0;v=G+48|0;w=G+32|0;x=G+16|0;D=G;if(!d){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;m=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)==0;C=c[b+16>>2]|0;q=+h[C+80>>3]*.5;j=+h[C+88>>3];t=m?q:j;q=m?j:q;m=0;C=E;j=0.0;k=-q;r=t;F=E+8|0;s=0.0;t=-t}else{k=+h[d>>3];t=+h[d+8>>3];q=+h[d+16>>3];r=+h[d+24>>3];OJ(m,(q+k)*.5,(r+t)*.5);c[E>>2]=c[m>>2];c[E+4>>2]=c[m+4>>2];c[E+8>>2]=c[m+8>>2];c[E+12>>2]=c[m+12>>2];H=E+8|0;m=1;C=E;j=+h[E>>3];F=H;s=+h[H>>3]}u=(q>r?q:r)*4.0;a:do if((f|0)!=0?(y=a[f>>0]|0,y<<24>>24!=0):0){f=f+1|0;switch(y<<24>>24|0){case 99:{p=1;g=0;f=0;n=0;j=0.0;o=0;break a}case 101:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=q;else{pK(z,i,s,u);c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2]}p=0;g=g&2;f=0;n=1;j=0.0;o=0;m=1;break a}case 115:{h[F>>3]=t;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{pK(A,i,-u,j);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2]}p=0;g=g&1;f=0;n=1;j=-1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{pK(n,i,-u,u);c[E>>2]=c[n>>2];c[E+4>>2]=c[n+4>>2];c[E+8>>2]=c[n+8>>2];c[E+12>>2]=c[n+12>>2]}p=0;g=g&3;f=0;n=1;j=-.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{u=-u;pK(o,i,u,u);c[E>>2]=c[o>>2];c[E+4>>2]=c[o+4>>2];c[E+8>>2]=c[o+8>>2];c[E+12>>2]=c[o+12>>2]}p=0;g=g&9;f=0;n=1;j=-2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 119:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=k;else{pK(p,i,s,-u);c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[E+8>>2]=c[p+8>>2];c[E+12>>2]=c[p+12>>2]}p=0;g=g&8;f=0;n=1;j=3.141592653589793;o=0;m=1;break a}case 110:{h[F>>3]=r;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{pK(v,i,u,j);c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2]}p=0;g=g&4;f=0;n=1;j=1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{pK(w,i,u,u);c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[E+8>>2]=c[w+8>>2];c[E+12>>2]=c[w+12>>2]}p=0;g=g&6;f=0;n=1;j=.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{pK(x,i,u,-u);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2]}p=0;g=g&12;f=0;n=1;j=2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 95:{p=1;f=1;n=0;j=0.0;o=0;break a}default:{p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}else{p=1;g=0;f=0;n=0;j=0.0;o=0}while(0);H=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&3)*90|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];YG(D,B,H);c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];if(!(f<<24>>24))g=qK(g,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&3)|0;a[e+33>>0]=g;c[e+24>>2]=d;k=+h[C>>3];h[e>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);k=+h[F>>3];h[e+8>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);h[e+16>>3]=+rK(j,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&3);k=+h[C>>3];j=+h[F>>3];if(k==0.0&j==0.0)g=-128;else{u=+K(+j,+k);t=u+4.71238898038469;g=~~((!(t>=6.283185307179586)?t:u+-1.5707963267948966)*40.74366543152521)&255}a[e+32>>0]=g;a[e+29>>0]=n;a[e+28>>0]=m;a[e+30>>0]=p;a[e+31>>0]=f;l=G;return o|0}function oK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=ry(a)|0;c[e+4>>2]=b;Pw(0,103393,e)|0;l=d;return}function pK(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+128|0;g=p+112|0;j=p+48|0;k=p+16|0;m=p+32|0;n=p;o=c[b>>2]|0;i=c[(c[(ez(o)|0)+16>>2]|0)+116>>2]&3;h[k>>3]=e;h[k+8>>3]=d;f=(i|0)!=0;if(f){c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];YG(m,g,i*90|0);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}m=j+48|0;q=j+32|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];MK(b,c[(c[(c[(c[o+16>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,j,1);if(f){c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];ZG(n,g,i*90|0);c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2]};c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=p;return}function qK(a,b){a=a|0;b=b|0;a:do switch(b|0){case 3:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=1;break a}case 2:{a=4;break a}default:break a}case 2:switch(a|0){case 4:{a=1;break a}case 1:{a=4;break a}default:break a}case 1:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=4;break a}case 2:{a=1;break a}default:break a}default:{}}while(0);return a|0}function rK(a,b){a=+a;b=b|0;switch(b|0){case 3:{if(!(a==3.141592653589793))if(!(a==2.356194490192345))if(!(a==1.5707963267948966))if(!(a==0.0))if(!(a==-.7853981633974483)){if(a==-1.5707963267948966)a=3.141592653589793}else a=2.356194490192345;else a=1.5707963267948966;else a=0.0;else a=-.7853981633974483;else a=-1.5707963267948966;break}case 2:{a=-a;break}case 1:{a=a+-1.5707963267948966;break}default:{}}return +a}function sK(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;e=l;l=l+32|0;k=e+16|0;i=e;a=c[a>>2]|0;j=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];ZG(i,k,j);d=+h[i>>3];g=+h[i+8>>3];a=c[a+16>>2]|0;f=+h[a+80>>3]*.5;if(!(!(g>=-f)|!(g<=f))?d>=-+h[a+88>>3]:0)a=d<=+h[a+96>>3]&1;else a=0;l=e;return a|0}function tK(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+32|0;m=n;i=c[a+16>>2]|0;j=i+208|0;g=c[j>>2]|0;if(!g)k=(b[i+260>>1]&1)!=0;else k=1;e=d+16|0;d=c[e>>2]|0;f=c[d+12>>2]|0;if(f|0){if(k?(c[a+152>>2]&4|0)==0:0){PO(a,g,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);d=c[e>>2]|0}g=c[a+36>>2]|0;p=+h[d+24>>3]+ +(c[f+8>>2]|0);o=c[f>>2]|0;h[m>>3]=+h[d+16>>3]+ +(c[f+4>>2]|0);h[m+8>>3]=p;c[m+16>>2]=o;g1(g,103424,m)|0;g=c[e>>2]|0;m=(c[g+104>>2]|0)+56|0;g=g+16|0;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];oH(a,10,c[(c[e>>2]|0)+104>>2]|0);if(k){if(c[a+152>>2]&4|0)PO(a,c[j>>2]|0,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);QO(a)}}l=n;return}function uK(a){a=a|0;RJ(c[(c[a+16>>2]|0)+12>>2]|0);return}function vK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;k=m+40|0;h=m;if(!(a[f>>0]|0)){h=4208;g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}else{g=(g|0)==0?103330:g;i=c[(c[e+16>>2]|0)+12>>2]|0;j=BK(i,f)|0;if(!j){if(nK(e,i+16|0,h,f,15,0)|0)oK(e,f)}else if(nK(e,j+16|0,h,g,d[j+65>>0]|0,0)|0){c[k>>2]=ry(e)|0;c[k+4>>2]=f;c[k+8>>2]=g;Pw(0,103332,k)|0}g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}l=m;return}function wK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0.0;k=l;l=l+32|0;m=k+16|0;i=k;f=c[a+4>>2]|0;a=c[a>>2]|0;g=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];ZG(i,m,g);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];if(!f){f=c[(c[a+16>>2]|0)+12>>2]|0;g=f+16|0;a=f+24|0;i=f+32|0;f=f+40|0}else{g=f;a=f+8|0;i=f+16|0;f=f+24|0}e=+h[a>>3];d=+h[f>>3];n=+h[b>>3];if((+h[g>>3]<=n?n<=+h[i>>3]:0)?(j=+h[b+8>>3],e<=j):0)a=j<=d&1;else a=0;l=k;return a|0}function xK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0;u=l;l=l+80|0;r=u+64|0;q=u+32|0;t=u;a:do if(!(a[d+28>>0]|0))e=0;else{i=+h[d>>3];p=b+16|0;m=c[(c[p>>2]|0)+12>>2]|0;k=m+48|0;m=m+56|0;d=0;while(1){if((d|0)>=(c[k>>2]|0))break a;n=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[(c[m>>2]|0)+(d<<2)>>2]|0;j=+(~~+h[(n?o+16|0:o+24|0)>>3]|0);if(i>=j?(s=+(~~+h[(n?o+32|0:o+40|0)>>3]|0),i<=s):0)break;d=d+1|0}if(!(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1)){t=c[p>>2]|0;v=+h[t+16>>3];h[f>>3]=v+j;j=+h[t+24>>3];i=+h[t+80>>3];h[f+8>>3]=j-i*.5;h[f+16>>3]=v+s}else{o=(c[(c[m>>2]|0)+(d<<2)>>2]|0)+16|0;b=(c[p>>2]|0)+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];c[q+16>>2]=c[o+16>>2];c[q+20>>2]=c[o+20>>2];c[q+24>>2]=c[o+24>>2];c[q+28>>2]=c[o+28>>2];c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];_G(t,q,r);c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];c[f+16>>2]=c[t+16>>2];c[f+20>>2]=c[t+20>>2];c[f+24>>2]=c[t+24>>2];c[f+28>>2]=c[t+28>>2];t=c[p>>2]|0;i=+h[t+80>>3];j=+h[t+24>>3]}h[f+24>>3]=i*.5+j;c[g>>2]=1}while(0);l=u;return e|0}function yK(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;w=l;l=l+144|0;n=w+96|0;p=w+64|0;r=w;s=w+128|0;t=c[d+16>>2]|0;u=t+208|0;f=c[u>>2]|0;if(!f)v=(b[t+260>>1]&1)!=0;else v=1;m=e+16|0;q=c[m>>2]|0;o=c[q+12>>2]|0;j=o+16|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];c[p+8>>2]=c[j+8>>2];c[p+12>>2]=c[j+12>>2];c[p+16>>2]=c[j+16>>2];c[p+20>>2]=c[j+20>>2];c[p+24>>2]=c[j+24>>2];c[p+28>>2]=c[j+28>>2];x=+h[q+16>>3];h[p>>3]=+h[p>>3]+x;k=+h[q+24>>3];q=p+8|0;h[q>>3]=+h[q>>3]+k;q=p+16|0;h[q>>3]=+h[q>>3]+x;j=p+24|0;h[j>>3]=+h[j>>3]+k;if(v?(c[d+152>>2]&4|0)==0:0)PO(d,f,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);f=dK(d,e)|0;fK(d,e)|0;c[s>>2]=0;if(!(f&1))i=0;else{i=eK(e)|0;if(!((uG(i,s,n)|0)<<24>>24)){WO(d,i);i=1}else{WO(d,c[s>>2]|0);i=c[s+4>>2]|0;j=KL(e,c[46403]|0,0,0)|0;k=+g[n>>2];if(!i)XO(d,134232,j,k);else XO(d,i,j,k);i=f>>>1&1|2}}j=c[c[(c[m>>2]|0)+8>>2]>>2]|0;if((a[j>>0]|0)==77){m=(b$(j,103201)|0)==0;f=m?f|4:f}if(!(f&2130706444)){c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[n+16>>2]=c[p+16>>2];c[n+20>>2]=c[p+20>>2];c[n+24>>2]=c[p+24>>2];c[n+28>>2]=c[p+28>>2];$O(d,n,i)}else{c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+32|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[r+16>>3]=+h[p>>3];h[r+24>>3]=+h[r+8>>3];h[r+48>>3]=+h[r>>3];h[r+56>>3]=+h[r+40>>3];EJ(d,r,4,f,i)}zK(d,e,o);D_(c[s>>2]|0);if(v){if(c[d+152>>2]&4|0)PO(d,c[u>>2]|0,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);QO(d)}l=w;return}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+144|0;p=u+128|0;o=u+112|0;q=u+16|0;r=u;g=u+96|0;i=u+80|0;s=u+64|0;t=u+48|0;j=e+52|0;f=c[j>>2]|0;if(!f)f=d+16|0;else{n=f+56|0;m=e+16|0;f=e+32|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];AK(g,o,p);f=d+16|0;m=(c[f>>2]|0)+16|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2];hK(i,o,p);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];oH(b,10,c[j>>2]|0);fK(b,d)|0}k=(c[f>>2]|0)+16|0;c[r>>2]=c[k>>2];c[r+4>>2]=c[k+4>>2];c[r+8>>2]=c[k+8>>2];c[r+12>>2]=c[k+12>>2];k=e+48|0;m=e+64|0;n=q+16|0;j=e+56|0;e=q+16|0;i=0;while(1){if((i|0)>=(c[k>>2]|0))break;if((i|0)>0){f=(c[j>>2]|0)+(i<<2)|0;g=c[f>>2]|0;if(!(a[m>>0]|0)){g=g+32|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];h[q>>3]=+h[(c[f>>2]|0)+16>>3];f=n;g=0}else{g=g+16|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[q+8>>2]=c[g+8>>2];c[q+12>>2]=c[g+12>>2];h[e>>3]=+h[q>>3];f=(c[f>>2]|0)+32|0;g=1}h[q+(g<<4)+8>>3]=+h[f+8>>3];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];hK(s,o,p);c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];hK(t,o,p);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];bP(b,q,2)}zK(b,d,c[(c[j>>2]|0)+(i<<2)>>2]|0);i=i+1|0}l=u;return}function AK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function BK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[b+60>>2]|0;if(!(((e|0)!=0?(a[e>>0]|0)==(a[d>>0]|0):0)?(b$(e,d)|0)==0:0))f=4;a:do if((f|0)==4){g=b+56|0;f=c[b+48>>2]|0;e=0;while(1){if((e|0)>=(f|0)){b=0;break a}b=BK(c[(c[g>>2]|0)+(e<<2)>>2]|0,d)|0;if(!b)e=e+1|0;else break}}while(0);return b|0}function CK(a,b){a=a|0;b=b|0;var d=0;d=b+8|0;h[d>>3]=+h[d>>3]*1.375;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function DK(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;k=+h[b>>3];f=k*.5;m=+h[b+8>>3];i=m*.5;h[a>>3]=f;e=m*.40909090909090906;h[a+8>>3]=e;h[a+16>>3]=f;g=m*.4592530909090909;h[a+24>>3]=g;j=k*.275892;h[a+32>>3]=j;h[a+40>>3]=i;h[a+48>>3]=0.0;h[a+56>>3]=i;k=k*-.275892;h[a+64>>3]=k;h[a+72>>3]=i;l=-f;h[a+80>>3]=l;h[a+88>>3]=g;d=a+96|0;h[d>>3]=l;h[a+104>>3]=e;b=a+112|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+128|0;h[b>>3]=l;h[a+136>>3]=m*-.40909090909090906;d=a+144|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[a+160>>3]=l;g=-g;h[a+168>>3]=g;h[a+176>>3]=k;i=-i;h[a+184>>3]=i;h[a+192>>3]=0.0;h[a+200>>3]=i;h[a+208>>3]=j;h[a+216>>3]=i;h[a+224>>3]=f;h[a+232>>3]=g;d=a+240|0;h[d>>3]=f;h[a+248>>3]=-e;b=a+256|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+288|0;d=a+272|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];return}function EK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+144|0;u=x+112|0;t=x+96|0;v=x+80|0;s=x+64|0;w=x+32|0;q=x+16|0;r=x;g=x+48|0;do if(a){j=c[a+4>>2]|0;k=c[a>>2]|0;o=(c[(c[(ez(k)|0)+16>>2]|0)+116>>2]&3)*90|0;c[u>>2]=c[b>>2];c[u+4>>2]=c[b+4>>2];c[u+8>>2]=c[b+8>>2];c[u+12>>2]=c[b+12>>2];ZG(g,u,o);c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if(j|0){d=+h[w>>3];if(!(+h[j>>3]<=d)){a=0;break}if(!(d<=+h[j+16>>3])){a=0;break}d=+h[w+8>>3];if(!(+h[j+8>>3]<=d)){a=0;break}a=d<=+h[j+24>>3];break}if((k|0)==(c[46522]|0)){d=+h[22924];e=+h[22925];i=+h[22926]}else{a=k+16|0;b=c[(c[a>>2]|0)+12>>2]|0;c[46523]=b;c[46524]=c[b+44>>2];c[46525]=c[b+8>>2];if(!(c[b+40>>2]&2048)){n=(c[(c[(ez(k)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[a>>2]|0;h[(n?183416:183424)>>3]=+h[o+96>>3]+ +h[o+88>>3];h[(n?183424:183416)>>3]=+h[o+80>>3];i=+h[o+32>>3]*72.0;f=+h[o+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);i=+(~~(i+(i>=0.0?.5:-.5))|0)}else{jM(u,b);i=+h[u+16>>3]-+h[u>>3];f=+h[u+24>>3]-+h[u+8>>3];o=(c[(c[(ez(k)|0)+16>>2]|0)+116>>2]&1|0)==0;h[(o?183416:183424)>>3]=i;h[(o?183424:183416)>>3]=f}d=+h[22927];if(d==0.0){h[22927]=1.0;d=1.0}e=+h[22928];if(e==0.0){h[22928]=1.0;e=1.0}d=i/d;h[22924]=d;e=f/e;h[22925]=e;i=i*.5;h[22926]=i;h[22929]=f*.5;o=O((c[(c[46523]|0)+4>>2]|0)+-1|0,c[46525]|0)|0;c[46526]=(o|0)>0?o:0;c[46522]=k}f=+h[w>>3]*d;h[w>>3]=f;o=w+8|0;d=+h[o>>3]*e;h[o>>3]=d;if(!(+B(+f)>i)?(e=+B(+d),p=+h[22929],!(e>p)):0){o=c[46525]|0;if((o|0)<3){a=+u$(f/i,d/p)<1.0;break}b=(c[46527]|0)%(o|0)|0;a=(b+1|0)%(o|0)|0;k=c[46524]|0;m=c[46526]|0;n=k+(m+b<<4)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];n=k+(m+a<<4)|0;c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[45860];c[v+4>>2]=c[45861];c[v+8>>2]=c[45862];c[v+12>>2]=c[45863];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];if(mK(s,v,t,u)|0){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];c[v+8>>2]=c[q+8>>2];c[v+12>>2]=c[q+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[u>>2]=c[45860];c[u+4>>2]=c[45861];c[u+8>>2]=c[45862];c[u+12>>2]=c[45863];n=(mK(s,v,t,u)|0)!=0;if(n?(c[s>>2]=c[w>>2],c[s+4>>2]=c[w+4>>2],c[s+8>>2]=c[w+8>>2],c[s+12>>2]=c[w+12>>2],c[v>>2]=c[r>>2],c[v+4>>2]=c[r+4>>2],c[v+8>>2]=c[r+8>>2],c[v+12>>2]=c[r+12>>2],c[t>>2]=c[45860],c[t+4>>2]=c[45861],c[t+8>>2]=c[45862],c[t+12>>2]=c[45863],c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],c[u+12>>2]=c[q+12>>2],(mK(s,v,t,u)|0)!=0):0){a=1;break}else{j=b;b=1}while(1){if((b|0)>=(o|0)){b=31;break}if(n){g=a;a=(a+1|0)%(o|0)|0}else{g=(j+-1+o|0)%(o|0)|0;a=j}q=k+(m+g<<4)|0;r=k+(m+a<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[45860];c[v+4>>2]=c[45861];c[v+8>>2]=c[45862];c[v+12>>2]=c[45863];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];if(!(mK(s,v,t,u)|0)){b=30;break}else{j=g;b=b+1|0}}if((b|0)==30){c[46527]=g;a=0;break}else if((b|0)==31){c[46527]=j;a=1;break}}else a=0}else a=0}else{c[46522]=0;a=0}while(0);l=x;return a&1|0}function FK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;j=l;l=l+32|0;f=j+16|0;i=j;if(a){a=c[a>>2]|0;k=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ZG(i,f,k);g=+h[i>>3];e=+h[i+8>>3];if((a|0)==(c[46530]|0))d=+h[22932];else{i=c[(c[a+16>>2]|0)+12>>2]|0;k=(c[i+4>>2]<<1)+-2|0;d=+h[(c[i+44>>2]|0)+((((k|0)>0?k:0)|1)<<4)>>3];h[22932]=d;c[46530]=a}if(+B(+g)>d|+B(+e)>d)a=0;else a=+u$(g,e)<=d&1}else{c[46530]=0;a=0}l=j;return a|0}function GK(e,f){e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0;t=l;l=l+16|0;j=t;r=c[e+16>>2]|0;s=r+208|0;g=c[s>>2]|0;if((g|0)==0?(b[r+260>>1]&1)==0:0)q=0;else if(!(c[e+152>>2]&4)){PO(e,g,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);q=1}else q=1;n=f+16|0;k=c[(c[n>>2]|0)+12>>2]|0;o=c[k+44>>2]|0;p=c[k+8>>2]|0;k=c[k+4>>2]|0;if((c[46528]|0)<(p|0)){g=p+2|0;c[46528]=g;i=c[46529]|0;if(!i)g=vH(g<<4)|0;else g=xH(i,g<<4)|0;c[46529]=g}jK(f,j)|0;if(!(c[j>>2]&32))YO(e,21916);else YO(e,21912);g=c[46402]|0;if(g|0)fP(e,+LL(f,g,1.0,0.0));g=d[(c[n>>2]|0)+117>>0]|0;do if(!(g&1)){if(g&2|0){UO(e,OL(f,0,103230)|0);g=OL(f,0,103238)|0;WO(e,g);break}if(g&8|0){UO(e,OL(f,0,103246)|0);g=OL(f,0,103254)|0;WO(e,g);break}if(!(g&4)){g=iK(f,134232)|0;WO(e,g);fK(e,f)|0;break}else{UO(e,OL(f,0,103262)|0);g=OL(f,0,103270)|0;WO(e,g);break}}else{UO(e,OL(f,0,103214)|0);g=OL(f,0,103222)|0;WO(e,g)}while(0);if(!k)if(!(a[g>>0]|0))i=1;else{UO(e,g);i=1}else i=k;j=1;f=0;while(1){if((f|0)>=(i|0))break;k=O(f,p)|0;m=c[46529]|0;g=0;while(1){if((g|0)>=(p|0))break;w=g+k|0;u=+h[o+(w<<4)+8>>3];v=c[n>>2]|0;h[m+(g<<4)>>3]=+h[v+16>>3]+ +h[o+(w<<4)>>3];h[m+(g<<4)+8>>3]=+h[v+24>>3]+u;g=g+1|0}ZO(e,m,p,j);j=0;f=f+1|0}if(q){if(c[e+152>>2]&4|0)PO(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);QO(e)}l=t;return}function HK(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+48|0;h=g;e=IK(b,e,f)|0;c[h+36>>2]=c[f+36>>2];nK(b,c[f+24>>2]|0,h,e,d[f+33>>0]|0,0)|0;b=h;e=a+40|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(e|0));l=g;return}function IK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;z=l;l=l+32|0;y=z;g=z+24|0;k=z+16|0;x=c[(c[(c[(ez(b)|0)+60>>2]|0)+16>>2]|0)+116>>2]&3;f=b+16|0;w=(c[f>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];JK(g,y,x);w=(c[d+16>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];JK(k,y,x);x=a[e+33>>0]|0;y=x&255;a:do switch(x<<24>>24){case 0:case 15:{d=0;break}default:{d=c[e+24>>2]|0;if(!d){x=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)==0;w=c[f>>2]|0;B=+h[w+80>>3]*.5;A=-B;m=+h[w+88>>3];j=-m;n=x?j:A;i=x?m:B;m=x?B:m;j=x?A:j}else{n=+h[d>>3];i=+h[d+16>>3];m=+h[d+24>>3];j=+h[d+8>>3]}x=c[g>>2]|0;v=c[g+4>>2]|0;w=c[k>>2]|0;s=c[k+4>>2]|0;t=~~j;u=~~((i+n)*.5);r=~~i;q=~~((m+j)*.5);p=~~m;o=~~n;g=0;k=0;d=0;e=0;b=0;while(1){if((k|0)==4)break a;if(1<>2]|0;else f=g}else f=g;g=f;k=k+1|0}}}while(0);l=z;return d|0}function JK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;switch(d|0){case 0:{f=+h[b>>3];e=+h[b+8>>3];break}case 2:{f=+h[b>>3];e=-+h[b+8>>3];break}case 1:{f=-+h[b+8>>3];e=+h[b>>3];break}case 3:{f=+h[b+8>>3];e=+h[b>>3];break}default:{f=0.0;e=0.0}}c[a>>2]=~~(f+(f>=0.0?.5:-.5));c[a+4>>2]=~~(e+(e>=0.0?.5:-.5));return}function KK(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;f=i+40|0;h=i;g=b+16|0;e=c[g>>2]|0;d=e+16|0;if(a[e+47>>0]|0){e=c[b>>2]&3;HK(f,c[((e|0)==3?b:b+48|0)+40>>2]|0,c[((e|0)==2?b:b+-48|0)+40>>2]|0,d);e=f;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));e=c[g>>2]|0}d=e+56|0;if(a[e+87>>0]|0){e=c[b>>2]&3;HK(h,c[((e|0)==2?b:b+-48|0)+40>>2]|0,c[((e|0)==3?b:b+48|0)+40>>2]|0,d);e=h;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0))}l=i;return}function LK(){var a=0,b=0,d=0;a=l;l=l+32|0;b=a+16|0;d=a;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];EK(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];FK(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];aK(0,b)|0;l=a;return}function MK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+192|0;s=z+176|0;x=z+112|0;y=z+48|0;t=z+32|0;u=z+24|0;v=z+16|0;w=z;if(!(e<<24>>24)){k=d+48|0;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];k=u;m=v;n=x;o=0}else{c[t>>2]=c[d>>2];c[t+4>>2]=c[d+4>>2];c[t+8>>2]=c[d+8>>2];c[t+12>>2]=c[d+12>>2];k=v;m=u;n=0;o=x}h[u>>3]=0.0;h[v>>3]=1.0;q=t+8|0;f=0.0;g=1.0;j=0;p=+h[t>>3];while(1){r=+h[q>>3];f=(f+g)*.5;XL(w,d,3,f,n,o);c[t>>2]=c[w>>2];c[t+4>>2]=c[w+4>>2];c[t+8>>2]=c[w+8>>2];c[t+12>>2]=c[w+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];a:do if(!((lb[b&127](a,s)|0)<<24>>24)){e=0;while(1){if((e|0)==4){e=k;j=1;break a}j=y+(e<<4)|0;A=x+(e<<4)|0;c[j>>2]=c[A>>2];c[j+4>>2]=c[A+4>>2];c[j+8>>2]=c[A+8>>2];c[j+12>>2]=c[A+12>>2];e=e+1|0}}else e=m;while(0);h[e>>3]=f;i=+h[t>>3];p=p-i;if(!((p>=0.0?p:-p)>.5)?(r=r-+h[q>>3],!((r>=0.0?r:-r)>.5)):0)break;f=+h[u>>3];g=+h[v>>3];p=i}b:do if(!(j<<24>>24)){e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;y=x+(e<<4)|0;c[A>>2]=c[y>>2];c[A+4>>2]=c[y+4>>2];c[A+8>>2]=c[y+8>>2];c[A+12>>2]=c[y+12>>2];e=e+1|0}}else{e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;x=y+(e<<4)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];e=e+1|0}}while(0);l=z;return}function NK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;d=m+16|0;e=m;f=m+32|0;g=a+16|0;i=c[g>>2]|0;j=c[i+8>>2]|0;if(j|0?(k=j+4|0,c[(c[k>>2]|0)+12>>2]|0):0){c[f>>2]=a;c[f+4>>2]=0;n=+h[i+96>>3];h[e>>3]=+h[b>>3]-+h[i+16>>3];h[e+8>>3]=+h[b+8>>3]-+h[i+24>>3];k=c[(c[k>>2]|0)+12>>2]|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];k=lb[k&127](f,d)|0;h[(c[g>>2]|0)+96>>3]=n;OK(f,a,b,k)}l=m;return}function OK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+64|0;m=n;j=b+16|0;g=c[j>>2]|0;k=+h[g+96>>3];i=g+16|0;f=g+24|0;b=0;while(1){if((b|0)==4)break;h[m+(b<<4)>>3]=+h[d+(b<<4)>>3]-+h[i>>3];h[m+(b<<4)+8>>3]=+h[d+(b<<4)+8>>3]-+h[f>>3];b=b+1|0}MK(a,c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0,m,e);b=0;while(1){if((b|0)==4)break;e=c[j>>2]|0;h[d+(b<<4)>>3]=+h[e+16>>3]+ +h[m+(b<<4)>>3];h[d+(b<<4)+8>>3]=+h[e+24>>3]+ +h[m+(b<<4)+8>>3];b=b+1|0}h[(c[j>>2]|0)+96>>3]=k;l=n;return}function PK(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=b+16|0;b=c[f>>2]|0;if(!(a[b+112>>0]|0))break;b=c[b+116>>2]|0}b=c[b+8>>2]|0;if(!b){b=uH(40)|0;c[(c[f>>2]|0)+8>>2]=b}e=c[b>>2]|0;if(!e)b=vH(((c[b+4>>2]|0)*48|0)+48|0)|0;else b=xH(e,((c[b+4>>2]|0)*48|0)+48|0)|0;f=c[(c[f>>2]|0)+8>>2]|0;c[f>>2]=b;f=f+4|0;e=c[f>>2]|0;c[f>>2]=e+1;f=b+(e*48|0)|0;c[f>>2]=uH(d<<4)|0;c[b+(e*48|0)+4>>2]=d;b=b+(e*48|0)+8|0;e=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));return f|0}function QK(b,e,f,g,i){b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;D=l;l=l+96|0;A=D+16|0;u=D;x=D+92|0;y=D+88|0;v=D+80|0;m=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;z=ez(m)|0;B=PK(b,g)|0;n=b;while(1){o=c[n+16>>2]|0;if(!(a[o+112>>0]|0))break;n=c[o+116>>2]|0}if((a[i+8>>0]|0)==0?(j=c[m+16>>2]|0,k=c[e+16>>2]|0,(c[j+232>>2]|0)==(c[k+232>>2]|0)):0){p=(c[j+236>>2]|0)>(c[k+236>>2]|0);w=p?m:e;m=p?e:m}else w=e;if((m|0)==(c[((c[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)){j=o+80|0;k=o+40|0;p=d[o+86>>0]|0;e=d[o+46>>0]|0}else{j=o+40|0;k=o+80|0;p=d[o+46>>0]|0;e=d[o+86>>0]|0}o=c[j>>2]|0;j=c[k>>2]|0;if(((e|0)!=0?(r=m+16|0,q=c[(c[r>>2]|0)+8>>2]|0,(q|0)!=0):0)?(c[(c[q+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=m;c[v+4>>2]=j;j=g+-4|0;e=u+8|0;k=0;while(1){if((k|0)>=(j|0))break;n=k+3|0;q=c[r>>2]|0;h[u>>3]=+h[f+(n<<4)>>3]-+h[q+16>>3];h[e>>3]=+h[f+(n<<4)+8>>3]-+h[q+24>>3];q=c[(c[(c[q+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((lb[q&127](v,A)|0)<<24>>24))break;else k=n}c[x>>2]=k;OK(v,m,f+(k<<4)|0,1)}else{c[x>>2]=0;k=0}if(((p|0)!=0?(t=w+16|0,s=c[(c[t>>2]|0)+8>>2]|0,(s|0)!=0):0)?(c[(c[s+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=w;c[v+4>>2]=o;m=g+-4|0;e=u+8|0;j=m;while(1){if((j|0)<=0)break;g=c[t>>2]|0;h[u>>3]=+h[f+(j<<4)>>3]-+h[g+16>>3];h[e>>3]=+h[f+(j<<4)+8>>3]-+h[g+24>>3];g=c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((lb[g&127](v,A)|0)<<24>>24))break;j=j+-3|0}c[y>>2]=j;OK(v,w,f+(j<<4)|0,0)}else{m=g+-4|0;c[y>>2]=m;j=m}while(1){if((k|0)>=(m|0))break;e=k+3|0;E=+h[f+(k<<4)>>3]-+h[f+(e<<4)>>3];F=+h[f+(k<<4)+8>>3]-+h[f+(e<<4)+8>>3];if(F*F+E*E<1.0e-06)k=e;else break}c[x>>2]=k;while(1){if((j|0)<=0)break;v=j+3|0;F=+h[f+(j<<4)>>3]-+h[f+(v<<4)>>3];E=+h[f+(j<<4)+8>>3]-+h[f+(v<<4)+8>>3];if(!(E*E+F*F<1.0e-06))break;j=j+-3|0}c[y>>2]=j;RK(b,w,f,x,y,B,i);r=c[x>>2]|0;n=c[y>>2]|0;m=n+4|0;n=n+3|0;o=A+16|0;p=A+32|0;q=A+48|0;k=z+16|0;j=r;while(1){if((j|0)>=(m|0))break;z=(c[B>>2]|0)+(j-r<<4)|0;e=f+(j<<4)|0;c[z>>2]=c[e>>2];c[z+4>>2]=c[e+4>>2];c[z+8>>2]=c[e+8>>2];c[z+12>>2]=c[e+12>>2];c[A>>2]=c[e>>2];c[A+4>>2]=c[e+4>>2];c[A+8>>2]=c[e+8>>2];c[A+12>>2]=c[e+12>>2];e=j+1|0;if((j|0)>=(n|0)){C=38;break}y=(c[B>>2]|0)+(e-r<<4)|0;z=f+(e<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[o>>2]=c[z>>2];c[o+4>>2]=c[z+4>>2];c[o+8>>2]=c[z+8>>2];c[o+12>>2]=c[z+12>>2];z=j+2|0;y=(c[B>>2]|0)+(z-r<<4)|0;z=f+(z<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[p>>2]=c[z>>2];c[p+4>>2]=c[z+4>>2];c[p+8>>2]=c[z+8>>2];c[p+12>>2]=c[z+12>>2];z=j+3|0;y=f+(z<<4)|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];YE((c[k>>2]|0)+16|0,A);j=z}c[B+4>>2]=m-r;l=D;return}function RK(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+4|0;n=p;o=b;while(1){j=c[(c[o+16>>2]|0)+116>>2]|0;if(!j)break;else o=j}if(!(a[i+8>>0]|0))j=(kb[c[i>>2]&63](o)|0)&255;else j=0;sE(o,m,n);k=i+4|0;if((kb[c[k>>2]&63](d)|0)<<24>>24)c[n>>2]=0;if((kb[c[k>>2]&63](c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)<<24>>24)c[m>>2]=0;if(j|0){d=c[m>>2]|0;c[m>>2]=c[n>>2];c[n>>2]=d}if(!(a[i+9>>0]|0)){j=c[m>>2]|0;if(j|0)c[f>>2]=HE(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0;j=c[n>>2]|0;if(j|0)c[g>>2]=FE(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0}else{k=c[n>>2]|0;j=c[m>>2]|0;if(j|k|0)IE(o,e,c[f>>2]|0,c[g>>2]|0,h,j,k)}l=p;return}function SK(a,b){a=a|0;b=b|0;var d=0,e=0;if(+h[b>>3]<+h[b+16>>3]?+h[b+8>>3]<+h[b+24>>3]:0){d=c[a+84>>2]|0;e=a+80|0;a=c[e>>2]|0;c[e>>2]=a+1;a=d+(a<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2]}return}function TK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;x=l;l=l+112|0;u=x+72|0;o=x+56|0;n=x+16|0;q=x;j=c[d>>2]&3;p=d+48|0;w=c[((j|0)==3?d:p)+40>>2]|0;t=d+16|0;r=c[t>>2]|0;i=r+16|0;if(a[r+47>>0]|0){HK(n,w,c[((j|0)==2?d:d+-48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}r=w+16|0;j=c[r>>2]|0;i=c[j+8>>2]|0;if(!i)n=0;else n=c[(c[i+4>>2]|0)+16>>2]|0;i=j+16|0;j=(c[t>>2]|0)+16|0;c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];UK(q,o,u);c[b>>2]=c[q>>2];c[b+4>>2]=c[q+4>>2];c[b+8>>2]=c[q+8>>2];c[b+12>>2]=c[q+12>>2];if(!(g<<24>>24)){i=c[t>>2]|0;if(!(a[i+45>>0]|0))i=0;else{k=+h[i+32>>3];v=9}}else{k=+VK(c[((c[d>>2]&3|0)==3?d:p)+40>>2]|0);v=9}if((v|0)==9){h[b+16>>3]=k;i=1}a[b+29>>0]=i;c[b+80>>2]=0;c[b+88>>2]=d;q=f+32|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];switch(e|0){case 1:{j=c[r>>2]|0;if((a[j+156>>0]|0)==0?(q=a[(c[t>>2]|0)+49>>0]|0,s=q&255,q<<24>>24!=0):0){c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(s&4)){if(s&1|0){c[f+48>>2]=1;i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}i=f+48|0;if(!(s&8)){c[i>>2]=2;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{c[i>>2]=8;h[u+16>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{c[f+48>>2]=4;k=+h[u>>3];if(+h[b>>3]<+h[j+16>>3]){z=k+-1.0;y=+h[b+8>>3];b=u+16|0;k=+h[b>>3];m=+h[j+80>>3]*.5+ +h[j+24>>3];m=m+ +((c[(c[(ez(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[r>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[u+24>>3]=y;h[u+8>>3]=+h[i+24>>3]-+h[i+80>>3]*.5;h[u>>3]=z;h[f+56>>3]=z;h[f+64>>3]=y;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{m=+h[b+8>>3];i=u+16|0;y=+h[i>>3]+1.0;z=+h[j+80>>3]*.5+ +h[j+24>>3];z=z+ +((c[(c[(ez(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+24>>3]=m;h[u+8>>3]=+h[b+24>>3]-+h[b+80>>3]*.5;h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0}else{j=1;v=47}break}case 2:{s=a[(c[t>>2]|0)+49>>0]|0;j=s&255;if(!(s<<24>>24))v=46;else{c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){i=c[r>>2]|0;z=+h[i+24>>3]-+h[i+80>>3]*.5;i=u+16|0;y=+h[i>>3]+1.0;k=+h[b>>3];m=z-+((c[(c[(ez(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+8>>3]=z;h[u+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}k=+h[b>>3];if(!(j&8)){h[u>>3]=k;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3];i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0;i=u+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{i=u+16|0;h[i>>3]=k+1.0;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3]+-1.0;i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{i=u+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+8>>3]?u:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0;c[f+48>>2]=j}break}default:v=46}if((v|0)==46){j=c[f+48>>2]|0;v=47}a:do if((v|0)==47){if(n){d=f+56|0;i=f+52|0;j=pb[n&127](w,(c[t>>2]|0)+16|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{qa(135312,103488,569,103498);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+8>>3];break a}case 1:{h[f+80>>3]=+h[b+8>>3];c[f+48>>2]=1;break a}default:break a}}while(0);l=x;return}function UK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function VK(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,l=0.0;i=c[a+16>>2]|0;j=c[i+172>>2]|0;f=0.0;g=0;while(1){a=c[j+(g<<2)>>2]|0;if(!a)break;f=+h[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16>>3]+f;g=g+1|0}e=c[i+180>>2]|0;b=0.0;a=0;while(1){d=c[e+(a<<2)>>2]|0;if(!d)break;b=+h[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+16>>3]+b;a=a+1|0}k=+h[i+16>>3];l=+h[i+24>>3];j=c[j>>2]|0;f=+K(+(l-+h[(c[(c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+24>>3]),+(k-f/+(g|0)));j=c[e>>2]|0;return +((+K(+(+h[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+24>>3]-l),+(b/+(a|0)-k))+f)*.5)}function WK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+112|0;w=z+72|0;p=z+56|0;n=z+16|0;t=z;j=c[d>>2]&3;r=d+-48|0;y=c[((j|0)==2?d:r)+40>>2]|0;u=d+16|0;s=c[u>>2]|0;i=s+56|0;if(a[s+87>>0]|0){HK(n,y,c[((j|0)==3?d:d+48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}s=y+16|0;j=c[s>>2]|0;i=c[j+8>>2]|0;if(!i)o=0;else o=c[(c[i+4>>2]|0)+16>>2]|0;n=b+40|0;i=j+16|0;j=(c[u>>2]|0)+56|0;c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];c[w>>2]=c[j>>2];c[w+4>>2]=c[j+4>>2];c[w+8>>2]=c[j+8>>2];c[w+12>>2]=c[j+12>>2];UK(t,p,w);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];if(!(g<<24>>24)){i=c[u>>2]|0;if(!(a[i+85>>0]|0))q=0;else{h[b+56>>3]=+h[i+72>>3];q=1}}else{m=+VK(c[((c[d>>2]&3|0)==2?d:r)+40>>2]|0)+3.141592653589793;h[b+56>>3]=m;if(m<6.283185307179586)q=1;else qa(103508,103488,606,103532)}a[b+69>>0]=q;t=f+32|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];switch(e|0){case 1:{j=c[s>>2]|0;if((a[j+156>>0]|0)==0?(t=a[(c[u>>2]|0)+89>>0]|0,v=t&255,t<<24>>24!=0):0){c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(v&4))if(!(v&1)){i=f+48|0;if(!(v&8)){c[i>>2]=2;h[w>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{c[i>>2]=8;h[w+16>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{c[f+48>>2]=1;k=+h[w>>3];if(+h[n>>3]<+h[j+16>>3]){B=k+-1.0;m=+h[b+48>>3];b=w+16|0;k=+h[b>>3];A=+h[j+80>>3]*-.5+ +h[j+24>>3];A=A-+((c[(c[(ez(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[w+8>>3]=m;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=B;h[f+56>>3]=B;h[f+64>>3]=A;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{B=+h[b+48>>3];i=w+16|0;A=+h[i>>3]+1.0;m=+h[j+80>>3]*-.5+ +h[j+24>>3];m=m-+((c[(c[(ez(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[s>>2]|0;h[w>>3]=+h[b+96>>3]+ +h[b+16>>3];h[w+8>>3]=B;h[w+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=A;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}}else{c[f+48>>2]=4;i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=v}else{j=4;x=47}break}case 2:{v=a[(c[u>>2]|0)+89>>0]|0;j=v&255;if(!(v<<24>>24))x=46;else{c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){k=+h[w>>3]+-1.0;i=c[s>>2]|0;B=+h[i+24>>3]-+h[i+80>>3]*.5;A=+h[n>>3];m=B-+((c[(c[(ez(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[w+16>>3]=+h[i+16>>3]+-2.0-+h[i+88>>3];h[w+8>>3]=B;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=k;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{i=w+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?w+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}k=+h[n>>3];if(!(j&8)){h[w>>3]=k+-1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3];i=w+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{i=w+16|0;h[i>>3]=k+1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=j}break}default:x=46}if((x|0)==46){j=c[f+48>>2]|0;x=47}a:do if((x|0)==47){if(o){d=f+56|0;i=f+52|0;j=pb[o&127](y,(c[u>>2]|0)+56|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{qa(135312,103488,765,103532);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+48>>3];break a}case 1:{h[f+64>>3]=+h[b+48>>3];c[f+48>>2]=4;break a}default:break a}}while(0);l=z;return}function XK(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;g=c[b+16>>2]|0;i=c[g+96>>2]|0;if((a[g+44>>0]|0)==0?(a[g+84>>0]|0)==0:0)j=6;else{d=a[g+49>>0]|0;e=d&255;if(((e&8|0)==0?(f=a[g+89>>0]|0,(f&8)==0):0)?((e&5|0)==0?1:d<<24>>24!=f<<24>>24):0)j=6;else b=0}if((j|0)==6)if(!i)b=18;else{b=(c[(c[(ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=~~(+h[(b?i+32|0:i+24|0)>>3]+18.0)}return b|0}function YK(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=i|0;var j=0,k=0,l=0,m=0;b=c[(c[d+(e<<2)>>2]|0)+16>>2]|0;if((a[b+44>>0]|0)==0?(a[b+84>>0]|0)==0:0)l=6;else l=3;do if((l|0)==3){j=a[b+49>>0]|0;k=j&255;if(!(k&8)){m=a[b+89>>0]|0;if((m&8)==0?((k&5|0)==0?1:j<<24>>24!=m<<24>>24):0){l=6;break}if(!(a[b+89>>0]&8)){if(k&4|0){_K(d,e,f,g,h,i);break}if(!(k&1))qa(135312,103488,1231,103540);else{aL(d,e,f,g,h,i);break}}}if((j&2)==0?(a[b+89>>0]&2)==0:0){$K(d,e,f,g,h,i);break}_K(d,e,f,g,h,i)}while(0);if((l|0)==6)ZK(d,e,f,g,h,i);return}function ZK(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+96>>3];switch(bL(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 65:case 32:{if(F==H)k=0-k|0;break}default:{}}Q=(p-m)*3.0;m=(p-i)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;cL(M,n*.3333333333333333+E,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=p+C;cL(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];cL(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;cL(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];cL(K,m*.3333333333333333+G,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*.5+p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;QK(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function _K(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0;Q=l;l=l+16080|0;M=Q+80|0;N=Q+64|0;O=Q+48|0;P=Q+32|0;K=Q+16|0;L=Q;C=c[b+(e<<2)>>2]|0;q=g*.5/+(f|0);q=q>2.0?q:2.0;E=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;m=c[E>>2]|0;H=+h[m+16>>3];D=+h[m+24>>3];C=c[C+16>>2]|0;k=+h[C+16>>3];p=+h[C+24>>3];F=k+H;G=p+D;g=+h[C+56>>3];o=+h[C+64>>3];H=g+H;I=o+D;n=!(F>=H)?-1.0:1.0;s=+h[m+80>>3]*.5;switch(bL(d[C+49>>0]|0,d[C+89>>0]|0)|0){case 15:{k=(q-g+ +h[m+96>>3])*n;break}case 38:{k=(g+q+ +h[m+88>>3])*n;break}case 41:{k=(q-k+ +h[m+96>>3])*n;break}case 48:{k=(q-k+ +h[m+96>>3])*n;break}case 58:case 57:case 51:case 47:case 37:case 14:{k=n*.3333333333333333*(k-g+ +h[m+88>>3]+ +h[m+96>>3]);break}case 73:{k=(k+q+ +h[m+88>>3])*n;break}case 83:{k=(+h[m+88>>3]+k)*n;break}case 84:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q)*n;break}case 85:case 75:case 74:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q*2.0)*n;break}default:k=0.0}p=(s-p)*3.0;o=(s-o)*3.0;q=n*q;w=M+8|0;x=M+16|0;y=M+32|0;z=M+48|0;A=(H+F)*.5;B=M+64|0;C=M+80|0;u=M+96|0;v=M+104|0;t=0;g=s;p=s=(f|0))break;r=e+1|0;e=c[b+(e<<2)>>2]|0;o=g+i;p=p+i;n=n+i;k=k+q;h[M>>3]=F;h[w>>3]=G;s=k+F;cL(N,s,p*.3333333333333333+G);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];R=o+D;cL(O,s,R);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];cL(P,A,R);c[z>>2]=c[P>>2];c[z+4>>2]=c[P+4>>2];c[z+8>>2]=c[P+8>>2];c[z+12>>2]=c[P+12>>2];s=H-k;cL(K,s,R);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];cL(L,s,n*.3333333333333333+I);c[C>>2]=c[L>>2];c[C+4>>2]=c[L+4>>2];c[C+8>>2]=c[L+8>>2];c[C+12>>2]=c[L+12>>2];h[u>>3]=H;h[v>>3]=I;m=e+16|0;if((c[(c[m>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,m=c[(c[m>>2]|0)+96>>2]|0,J=+h[(S?m+32|0:m+24|0)>>3],S=c[E>>2]|0,h[m+64>>3]=J*.5+o+ +h[S+24>>3],h[m+56>>3]=+h[S+16>>3],a[m+81>>0]=1,J>i):0)g=J+g;else g=o;QK(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,M,7,j);e=r;t=t+1|0}l=Q;return}function $K(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+88>>3];switch(bL(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 67:case 12:{if(F==H)k=0-k|0;break}default:{}}Q=(m+p)*3.0;m=(i+p)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;cL(M,E-n*.3333333333333333,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=C-p;cL(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];cL(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;cL(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];cL(K,G-m*.3333333333333333,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*-.5-p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;QK(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function aL(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;C=c[b+(e<<2)>>2]|0;B=g*.5/+(f|0);w=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;D=c[w>>2]|0;z=+h[D+16>>3];v=+h[D+24>>3];C=c[C+16>>2]|0;m=+h[C+24>>3];x=+h[C+16>>3]+z;y=m+v;n=+h[C+64>>3];z=+h[C+56>>3]+z;A=n+v;u=!(x>=z)?-1:1;o=+h[D+80>>3]*.5;C=(bL(d[C+49>>0]|0,d[C+89>>0]|0)|0)==67;m=(m+o)*3.0;n=(n+o)*3.0;B=(B>2.0?B:2.0)*+((C?0-u|0:u)|0);u=L+8|0;C=L+16|0;D=L+32|0;E=L+48|0;F=(z+x)*.5;G=L+64|0;H=L+80|0;s=L+96|0;t=L+104|0;g=o;k=0.0;m=o=(f|0))break;r=e+1|0;p=c[b+(e<<2)>>2]|0;o=g+i;m=m+i;n=n+i;k=k+B;h[L>>3]=x;h[u>>3]=y;Q=k+x;cL(M,Q,y-m*.3333333333333333);c[C>>2]=c[M>>2];c[C+4>>2]=c[M+4>>2];c[C+8>>2]=c[M+8>>2];c[C+12>>2]=c[M+12>>2];R=v-o;cL(N,Q,R);c[D>>2]=c[N>>2];c[D+4>>2]=c[N+4>>2];c[D+8>>2]=c[N+8>>2];c[D+12>>2]=c[N+12>>2];cL(O,F,R);c[E>>2]=c[O>>2];c[E+4>>2]=c[O+4>>2];c[E+8>>2]=c[O+8>>2];c[E+12>>2]=c[O+12>>2];Q=z-k;cL(J,Q,R);c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];cL(K,Q,A-n*.3333333333333333);c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];h[s>>3]=z;h[t>>3]=A;e=p+16|0;if((c[(c[e>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[p>>2]&3|0)==3?p:p+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,e=c[(c[e>>2]|0)+96>>2]|0,I=+h[(S?e+32|0:e+24|0)>>3],S=c[w>>2]|0,h[e+64>>3]=I*-.5-o+ +h[S+24>>3],h[e+56>>3]=+h[S+16>>3],a[e+81>>0]=1,I>i):0)g=I+g;else g=o;QK(p,c[((c[p>>2]&3|0)==2?p:p+-48|0)+40>>2]|0,L,7,j);e=r;q=q+1|0}l=P;return}function bL(a,b){a=a|0;b=b|0;var d=0;d=0;while(1){if((d|0)>=8){b=-1;break}if((c[21940+(d<<2)>>2]|0)==(b|0)){b=d;break}d=d+1|0}d=0;while(1){if((d|0)>=8){d=-1;break}if((c[21940+(d<<2)>>2]|0)==(a|0))break;d=d+1|0}if((d|b|0)<0)d=0;else d=c[21972+(d<<5)+(b<<2)>>2]|0;return d|0}function cL(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function dL(b){b=b|0;var d=0,e=0;if((c[46433]|0)!=0|(c[46432]|0)!=0){d=b+16|0;e=c[(c[d>>2]|0)+100>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?eL(b,1)|0:0){e=ez(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;kM(e,c[(c[d>>2]|0)+100>>2]|0)}e=c[(c[d>>2]|0)+104>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?eL(b,0)|0:0){e=ez(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;kM(e,c[(c[d>>2]|0)+104>>2]|0)}}return}function eL(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;o=q+32|0;m=q+16|0;n=q;i=b+16|0;do if((a[(c[i>>2]|0)+112>>0]|0)!=6){e=c[46433]|0;if(!((e|0)!=0?(a[(yx(b,e)|0)>>0]|0)!=0:0)){e=c[46432]|0;if(!e){e=0;break}if(!(a[(yx(b,e)|0)>>0]|0)){e=0;break}}d=d<<24>>24==0;p=c[i>>2]|0;p=c[(d?p+104|0:p+100|0)>>2]|0;e=fL(b)|0;if(e){k=c[e>>2]|0;do if(d){if(c[k+8>>2]|0){e=c[k>>2]|0;j=+h[e>>3];g=+h[k+16>>3];e=e+8|0;f=+h[k+24>>3];break}e=c[k>>2]|0;g=+h[e>>3];f=+h[e+8>>3];e=0;while(1){if((e|0)==4)break;n=o+(e<<4)|0;i=(c[k>>2]|0)+(e<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];e=e+1|0}XL(m,o,3,.1,0,0);j=+h[m>>3];e=m+8|0}else{d=(c[e+4>>2]|0)+-1|0;i=k+(d*48|0)|0;if(c[k+(d*48|0)+12>>2]|0){o=c[i>>2]|0;e=(c[k+(d*48|0)+4>>2]|0)+-1|0;j=+h[o+(e<<4)>>3];g=+h[k+(d*48|0)+32>>3];e=o+(e<<4)+8|0;f=+h[k+(d*48|0)+40>>3];break}m=c[i>>2]|0;d=k+(d*48|0)+4|0;e=(c[d>>2]|0)+-1|0;g=+h[m+(e<<4)>>3];f=+h[m+(e<<4)+8>>3];e=0;while(1){if((e|0)==4)break;m=o+(e<<4)|0;k=(c[i>>2]|0)+(e+-4+(c[d>>2]|0)<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];e=e+1|0}XL(n,o,3,.9,0,0);j=+h[n>>3];e=n+8|0}while(0);r=+K(+(+h[e>>3]-f),+(j-g));r=+LL(b,c[46433]|0,-25.0,-180.0)*.017453292519943295+r;j=+LL(b,c[46432]|0,1.0,0.0)*10.0;h[p+56>>3]=j*+E(+r)+g;h[p+64>>3]=+F(+r)*j+f;a[p+81>>0]=1;e=1}else e=0}else e=0;while(0);l=q;return e|0}function fL(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b;while(1){e=c[d+16>>2]|0;d=c[e+8>>2]|0;if(d|0)break;if(!(a[e+112>>0]|0)){g=5;break}d=c[e+116>>2]|0}if((g|0)==5){g=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;d=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[f>>2]=g;c[f+4>>2]=d;Pw(1,103553,f)|0;d=0}l=h;return d|0}function gL(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+96|0;m=s+80|0;n=s+64|0;o=s+48|0;p=s+32|0;q=s+16|0;r=s;k=b[(c[d+16>>2]|0)+136>>1]|0;d=e+16|0;hL(c[(c[d>>2]|0)+8>>2]|0,p,q);f=+h[p>>3];g=+h[q>>3];t=f-g;i=+h[p+8>>3];j=+h[q+8>>3];u=i-j;a:do if(u*u+t*t<1.0e-06){c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2]}else switch(k&14){case 4:case 10:{h[n>>3]=(g+f)*.5;h[n+8>>3]=(j+i)*.5;q=c[(c[d>>2]|0)+8>>2]|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];bM(r,q,m);c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];break a}default:{iL(o,c[(c[d>>2]|0)+8>>2]|0,p,q);break a}}while(0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];l=s;return}function hL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+32|0;g=h+16|0;f=h;j=c[a>>2]|0;e=c[j>>2]|0;i=c[j+8>>2]|0;k=j+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];j=j+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!i){c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}else{c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2]}i=c[a>>2]|0;j=(c[a+4>>2]|0)+-1|0;e=c[i+(j*48|0)>>2]|0;a=c[i+(j*48|0)+4>>2]|0;k=c[i+(j*48|0)+12>>2]|0;b=i+(j*48|0)+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];j=i+(j*48|0)+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!k){k=e+(a+-1<<4)|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2]}else{c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2]}l=h;return}function iL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0;r=c[b+4>>2]|0;g=0.0;f=0;while(1){if((f|0)>=(r|0))break;l=c[b>>2]|0;k=c[l+(f*48|0)>>2]|0;l=c[l+(f*48|0)+4>>2]|0;i=3;j=0;while(1){if((i|0)>=(l|0))break;q=+h[k+(j<<4)>>3]-+h[k+(i<<4)>>3];p=+h[k+(j<<4)+8>>3]-+h[k+(i<<4)+8>>3];i=i+3|0;j=j+3|0;g=+C(+(p*p+q*q))+g}f=f+1|0}l=0;g=g*.5;a:while(1){if((l|0)>=(r|0)){f=15;break}k=c[b>>2]|0;j=c[k+(l*48|0)>>2]|0;k=c[k+(l*48|0)+4>>2]|0;f=3;i=0;while(1){if((f|0)>=(k|0))break;m=+h[j+(i<<4)>>3];p=+h[j+(i<<4)+8>>3];n=+h[j+(f<<4)>>3];o=+h[j+(f<<4)+8>>3];q=m-n;s=p-o;q=+C(+(s*s+q*q));if(q>=g){f=12;break a}f=f+3|0;i=i+3|0;g=g-q}l=l+1|0}if((f|0)==12){h[d>>3]=m;h[d+8>>3]=p;h[e>>3]=n;h[e+8>>3]=o;s=q-g;h[a>>3]=(s*m+n*g)/q;h[a+8>>3]=(s*p+o*g)/q;return}else if((f|0)==15)qa(135630,103488,1316,103615)}function jL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;dL(b);return}function kL(b,d,e,f,g){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,G=0,H=0,I=0,J=0,K=0,L=0;J=lL(b)|0;I=c[J+4>>2]|0;K=c[J>>2]|0;H=I+-1|0;B=+h[K+(H<<6)+16>>3];C=+(I|0);D=(g|0)==2;G=(f|0)!=0;n=0;j=0.0;i=0.0;l=0.0;m=0.0;while(1){if((n|0)>=(I|0))break;b=~~+mL(+(n+-1|0),C);A=n+1|0;L=~~+mL(+(A|0),C);o=K+(n<<6)|0;m=+h[o>>3];z=K+(n<<6)+8|0;l=+h[z>>3];s=K+(n<<6)+16|0;t=+h[s>>3];u=K+(n<<6)+24|0;v=K+(n<<6)+32|0;w=K+(n<<6)+40|0;x=K+(n<<6)+48|0;y=K+(n<<6)+56|0;k=+nL(+h[K+(L<<6)+8>>3]-l,+h[K+(L<<6)>>3]-m);q=+nL(+h[K+(b<<6)+8>>3]-l,+h[K+(b<<6)>>3]-m);r=+hb[d&7](t,B,e);b=(n|0)==0;do if(b|(n|0)==(H|0))if(b){i=k+1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+k)*r;m=m-+E(+k)*r;break}else{i=q+-1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+q)*r;m=m-+E(+q)*r;break}else{p=k-q;p=1.5707963267948966-(p<0.0?p+6.283185307179586:p)*.5;j=+E(+p);j=j==0.0?0.0:r/j;i=k+1.5707963267948966;k=p+i;if(G|j>r*10.0){q=+mL(q+-1.5707963267948966,6.283185307179586);b=1;p=+mL(i,6.283185307179586);j=r;i=q}else{b=0;p=k;i=k}}while(0);h[o>>3]=m;h[z>>3]=l;h[s>>3]=t;a[u>>0]=108;h[v>>3]=i;h[w>>3]=j;c[x>>2]=b;h[y>>3]=p;n=A}o=uH(12)|0;b=0;while(1){if((b|0)>=(I|0))break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];i=+h[K+(b<<6)+32>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;k=+h[K+(b<<6)+56>>3];oL(o,+E(+i)*j+m,+F(+i)*j+l);if(L|0)pL(m,l,j,1,i,k,f,o);b=b+1|0}n=(g|0)==1;k=i+3.141592653589793;if(n)qL(o,m,l,j,i,k);else{oL(o,+E(+k)*j+m,+F(+k)*j+l);i=k}b=I+-2|0;k=m;while(1){if((b|0)<=-1)break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;i=+h[K+(b<<6)+32>>3]+3.141592653589793;k=+h[K+(b<<6)+56>>3]+3.141592653589793;oL(o,+E(+k)*j+m,+F(+k)*j+l);if(L|0)pL(m,l,j,0,i,k,f,o);b=b+-1|0;k=m}if(n)qL(o,k,l,j,i,i+3.141592653589793);rL(J);return o|0}function lL(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;q=l;l=l+144|0;i=q+128|0;h=q+112|0;j=q+96|0;k=q+64|0;m=q;n=q+80|0;o=sL()|0;p=c[a+4>>2]|0;f=c[a>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];tL(o,i,0.0);g=m+48|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];d=0;b=0.0;a:while(1){e=d+3|0;if((e|0)>=(p|0))break;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];a=1;while(1){if((a|0)==4)break;r=m+(a<<4)|0;s=f+(a+d<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];a=a+1|0}c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];a=1;while(1){if((a|0)==21){d=e;continue a}XL(n,m,3,+(a|0)*.05,0,0);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];t=+uL(h,i)+b;c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];tL(o,i,t);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];a=a+1|0;b=t}}vL(o);l=q;return o|0}function mL(a,b){a=+a;b=+b;var c=0.0;c=a-+A(+(a/b))*b;return +(!(a<0.0)&!(a>=b)?a:c)}function nL(a,b){a=+a;b=+b;if(!(a==0.0&b==0.0)){a=+K(+a,+b);if(!(a>=0.0))a=a+6.283185307179586}else a=0.0;return +a}function oL(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=c[a>>2]|0;f=a+4|0;if((e|0)<(c[f>>2]|0))f=c[a+8>>2]|0;else{c[f>>2]=2e3;e=a+8|0;f=xH(c[e>>2]|0,32e3)|0;c[e>>2]=f;e=c[a>>2]|0}c[a>>2]=e+1;h[f+(e<<4)>>3]=b;h[f+(e<<4)+8>>3]=d;return}function pL(a,b,c,d,e,f,g,h){a=+a;b=+b;c=+c;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0.0;d=(d|0)==0;i=d?e:f;do if((g|0)==1){e=(d?f:e)-i;e=!(e<=1.7453292519943296e-03)?e:e+6.283185307179586;if(e<3.141592653589793){qL(h,a,b,c,e+i,i);break}else{oL(h,+E(+i)*c+a,+F(+i)*c+a);break}}else oL(h,+E(+i)*c+a,+F(+i)*c+a);while(0);return}function qL(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0.0;oL(a,+E(+e)*d+b,+F(+e)*d+c);a:do if(!(d==0.0)){while(1){if(!(f>e))break;f=f+-6.283185307179586}f=e-f;while(1){if(!(f>6.283185307179586))break;f=f+-6.283185307179586}f=f*.05263157894736842;g=1;while(1){if((g|0)==20)break a;h=e-f*+(g|0);oL(a,+E(+h)*d+b,+F(+h)*d+c);g=g+1|0}}while(0);return}function rL(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function sL(){var a=0;a=uH(12)|0;c[a+4>>2]=0;c[a+8>>2]=2e3;c[a>>2]=uH(128e3)|0;return a|0}function tL(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=a+4|0;e=c[i>>2]|0;f=a+8|0;g=c[f>>2]|0;if((e|0)<(g|0))a=c[a>>2]|0;else{c[f>>2]=g<<1;e=xH(c[a>>2]|0,g<<7)|0;c[a>>2]=e;a=e;e=c[i>>2]|0}h[a+(e<<6)>>3]=+h[b>>3];h[a+(e<<6)+8>>3]=+h[b+8>>3];c[i>>2]=e+1;h[a+(e<<6)+16>>3]=d;return}function uL(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function vL(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((c[a+8>>2]|0)>(b|0))c[a>>2]=xH(c[a>>2]|0,b<<6)|0;return}function wL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;g=k+12|0;c[g>>2]=0;h=c[d+4>>2]|0;if(!h)qa(103632,103643,203,103654);e=c[h>>2]|0;if(!e)qa(103668,103643,206,103654);f=h+8|0;if(!(c[f>>2]|0))c[f>>2]=xL(e)|0;if(!0)e=0;else{e=(AG(c[h>>2]|0)|0)==0;e=e?0:g}if(!((OP(b,d,e)|0)<<24>>24))yL(d,e);do if(e|0){f=c[g>>2]|0;b=c[15686]|0;e=c[h>>2]|0;if(!f){c[j>>2]=e;g1(b,103711,j)|0;break}else{c[i>>2]=e;c[i+4>>2]=f;g1(b,103679,i)|0;break}}while(0);j=d+32|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=k;return}function xL(a){a=a|0;var b=0;b=c[46531]|0;if((b|0)!=0?(O$(b,a)|0)==0:0)a=c[46540]|0;else{D_(b);c[46531]=n1(a)|0;a=e2(186124,22228,35,36,93)|0;c[46540]=a}return a|0}function yL(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0.0;j=c[b+4>>2]|0;e=c[j>>2]|0;i=+h[j+16>>3];j=b+32|0;h[j>>3]=0.0;h[b+40>>3]=i*1.2;h[b+16>>3]=0.0;h[b+24>>3]=i*.1;c[b+8>>2]=0;c[b+12>>2]=0;if(V$(e,103745,4)|0)if((V$(e,103750,5)|0)!=0?(V$(e,103756,9)|0)!=0:0){g=4248;e=103766}else{g=8344;e=103802}else{g=6296;e=103783}if(d|0)c[d>>2]=e;e=c[b>>2]|0;if(e|0){f=0.0;while(1){b=a[e>>0]|0;if(!(b<<24>>24))break;k=f+ +h[g+((b&255)<<3)>>3];h[j>>3]=k;e=e+1|0;f=k}h[j>>3]=f*i}return}function zL(a,b){a=a|0;b=b|0;return O$(c[a>>2]|0,c[b>>2]|0)|0}function AL(a){a=a|0;var b=0;b=a+108|0;c[b>>2]=0;c[a+112>>2]=32;c[a+116>>2]=-1;c[a+120>>2]=30;c[a+124>>2]=63;c[a+128>>2]=55;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;b=Cw(b,c[4555]|0)|0;c[a+144>>2]=b;return b|0}function BL(a,b,d){a=a|0;b=b|0;d=d|0;d=E_(1,32)|0;a=c[b>>2]|0;if(a|0)c[d>>2]=n1(a)|0;a=c[b+4>>2]|0;if(a|0)c[d+4>>2]=n1(a)|0;c[d+24>>2]=c[b+24>>2]&127;h[d+16>>3]=+h[b+16>>3];c[d+8>>2]=c[b+8>>2];return d|0}function CL(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b>>2]|0);D_(c[b+4>>2]|0);D_(b);return}function DL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;a=c[b>>2]|0;e=c[d>>2]|0;i=(e|0)==0;if(!a)if(i)j=5;else a=-1;else if(!i){a=b$(a,e)|0;if(!a)j=5}else a=1;do if((j|0)==5){a=c[b+4>>2]|0;e=c[d+4>>2]|0;i=(e|0)==0;if(!a){if(!i){a=-1;break}}else{if(i){a=1;break}a=b$(a,e)|0;if(a|0)break}a=(c[b+24>>2]&127)-(c[d+24>>2]&127)|0;if(!a){g=+h[b+16>>3];f=+h[d+16>>3];if(gf&1}}while(0);return a|0}function EL(){eb(186164)|0;return}function FL(){var a=0,b=0;b=l;l=l+16|0;a=b;eb(a|0)|0;l=b;return +(+((c[a+4>>2]|0)+(c[a>>2]|0)-(c[46541]|0)-(c[46542]|0)|0)*.016666666666666666)}function GL(a){a=a|0;var b=0,d=0;b=uH(16)|0;a=(a|0)>2?a:2;d=uH(a<<2)|0;c[b>>2]=d;c[b+12>>2]=d;c[b+8>>2]=d;c[b+4>>2]=d+(a<<2);return b|0}function HL(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function IL(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;c[d>>2]=e+4;c[e>>2]=b;if((c[d>>2]|0)>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2];return}function JL(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;b=c[d>>2]|0;if((b|0)!=(c[a+12>>2]|0)){e=b+4|0;c[d>>2]=e;b=c[b>>2]|0;if(e>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2]}else b=0;return b|0}function KL(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;if(((d|0)!=0?(h=yx(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){d=i1(h,g,10)|0;e=(h|0)==(c[g>>2]|0)?e:(d|0)<(f|0)?f:d}l=i;return e|0}function LL(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;g=i;if(((b|0)!=0&(d|0)!=0?(h=yx(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){j=+c2(h,g);e=(h|0)==(c[g>>2]|0)?e:j0.0)){b=+LL(a,nx(a,0,104612,0)|0,-1.0,0.0);b=b==0.0?72.0:b}return +b}function NL(a,b,c){a=a|0;b=b|0;c=c|0;if((a|0)!=0&(b|0)!=0)c=yx(a,b)|0;return c|0}function OL(b,c,d){b=b|0;c=c|0;d=d|0;b=NL(b,c,d)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)d=b;return d|0}function PL(a,b,c){a=a|0;b=b|0;c=c|0;if(!b)a=c&255;else a=QL(yx(a,b)|0)|0;return a|0}function QL(a){a=a|0;return RL(a,0)|0}function RL(b,c){b=b|0;c=c|0;var d=0;if((b|0)!=0?(d=a[b>>0]|0,d<<24>>24!=0):0)if((O$(b,134226)|0)!=0?(O$(b,104623)|0)!=0:0)if((O$(b,104626)|0)!=0?(O$(b,104631)|0)!=0:0){if(((d<<24>>24)+-48|0)>>>0<10)c=(a2(b)|0)&255}else c=1;else c=0;return c|0}function SL(a){a=a|0;var b=0,d=0;while(1){b=(c[a+16>>2]|0)+220|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[(c[d+16>>2]|0)+220>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function TL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){d=c[a+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=a;c[d+216>>2]=1}else a=SL(a)|0;d=c[b+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=b;c[d+216>>2]=1}else{d=SL(b)|0;b=d;d=c[d+16>>2]|0}g=a+16|0;e=c[g>>2]|0;f=b+16|0;h=(c[e+120>>2]|0)>(c[d+120>>2]|0);a=h?b:a;c[(h?e:d)+220>>2]=a;e=(c[(h?f:g)>>2]|0)+216|0;c[e>>2]=(c[e>>2]|0)+(c[(c[(h?g:f)>>2]|0)+216>>2]|0)}return a|0}function UL(b){b=b|0;b=c[b+16>>2]|0;c[b+216>>2]=1;c[b+220>>2]=0;a[b+159>>0]=0;return}function VL(a,b){a=a|0;b=b|0;if((SL(a)|0)==(a|0)){a=c[a+16>>2]|0;c[a+220>>2]=b;b=(c[b+16>>2]|0)+216|0;c[b>>2]=(c[b>>2]|0)+(c[a+216>>2]|0);return}else qa(104643,104635,194,104659)}function WL(a,b){a=a|0;b=b|0;var d=0.0;b=c[(c[b+16>>2]|0)+132>>2]|0;d=+h[b+8>>3]*72.0;h[a>>3]=+h[b>>3]*72.0;h[a+8>>3]=d;return}function XL(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;o=l;l=l+576|0;n=o;i=0;while(1){if((i|0)>(d|0))break;k=n+(i<<4)|0;j=b+(i<<4)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];i=i+1|0}m=1.0-e;i=1;while(1){if((i|0)>(d|0))break;j=d-i|0;k=i+-1|0;b=0;while(1){if((b|0)>(j|0))break;p=b+1|0;h[n+(i*96|0)+(b<<4)>>3]=+h[n+(k*96|0)+(p<<4)>>3]*e+ +h[n+(k*96|0)+(b<<4)>>3]*m;h[n+(i*96|0)+(b<<4)+8>>3]=+h[n+(k*96|0)+(p<<4)+8>>3]*e+ +h[n+(k*96|0)+(b<<4)+8>>3]*m;b=p}i=i+1|0}a:do if(f|0){i=0;while(1){if((i|0)>(d|0))break a;p=f+(i<<4)|0;k=n+(i*96|0)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];i=i+1|0}}while(0);b:do if(g|0){i=0;while(1){if((i|0)>(d|0))break b;p=g+(i<<4)|0;f=n+((d-i|0)*96|0)+(i<<4)|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];i=i+1|0}}while(0);p=n+(d*96|0)|0;c[a>>2]=c[p>>2];c[a+4>>2]=c[p+4>>2];c[a+8>>2]=c[p+8>>2];c[a+12>>2]=c[p+12>>2];l=o;return}function YL(b){b=b|0;var d=0,e=0,f=0,g=0;e=0;do{d=c[46545]|0;f=d+1024|0;if((d-e|0)<1024){c[46545]=f;f=xH(c[46546]|0,f)|0;c[46546]=f;d=c[46545]|0}else f=c[46546]|0;d=O0(f+e|0,d-e|0,b)|0;if(!d){g=6;break}e=(W_(d)|0)+e|0;d=c[46546]|0}while((a[d+(e+-1)>>0]|0)!=10);if((g|0)==6)d=c[46546]|0;return ((e|0)>0?d:0)|0}function ZL(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0)if(!0){d=c[46362]|0;e=c[46548]|0;if((c[46547]|0)==(d|0))d=e;else{if(e){D_(c[e>>2]|0);D_(c[46548]|0);c[46548]=0;d=c[46362]|0}c[46547]=d;if(!d)break;if(!(a[d>>0]|0))break;d=_L(d)|0;c[46548]=d}if(!((a[b>>0]|0)!=47&(d|0)!=0))break;b=$L(d,c[46549]|0,b)|0;break}else S();else b=0;while(0);l=f;return b|0}function _L(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=0;f=0;g=0;b=n1(a)|0;d=0;while(1){b=k1(b,104958)|0;if(!b)break;a=(g<<2)+8|0;if(!f)a=vH(a)|0;else a=xH(d,a)|0;c[a+(g<<2)>>2]=b;f=W_(b)|0;e=e>>>0>f>>>0?e:f;f=a;g=g+1|0;b=0;d=a}c[f+(g<<2)>>2]=0;c[46549]=e;return f|0}function $L(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;h=c[46550]|0;c[46550]=F_(h,b+2+(W_(d)|0)|0)|0;while(1){b=c[a>>2]|0;if(!b){a=0;break}h=c[46550]|0;c[e>>2]=b;c[e+4>>2]=104956;c[e+8>>2]=d;Y0(h,104949,e)|0;if(!(K1(c[46550]|0,4)|0)){f=4;break}else a=a+4|0}if((f|0)==4)a=c[46550]|0;l=g;return a|0}function aM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=(b|0)==0;f=0;while(1){h=c[d+(f<<2)>>2]|0;if(!h)break;if((!g?(a[b>>0]|0)==(a[h>>0]|0):0)?(b$(b,h)|0)==0:0)break;f=f+1|0}return c[e+(f<<2)>>2]|0}function bM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;z=l;l=l+80|0;x=z+16|0;y=z;u=c[b+4>>2]|0;v=c[b>>2]|0;w=d+8|0;f=0;e=-1;g=1.e+38;b=-1;while(1){if((f|0)>=(u|0))break;s=c[v+(f*48|0)>>2]|0;t=c[v+(f*48|0)+4>>2]|0;r=0;while(1){if((r|0)>=(t|0))break;q=+h[s+(r<<4)>>3]-+h[d>>3];p=+h[s+(r<<4)+8>>3]-+h[w>>3];q=p*p+q*q;A=(e|0)==-1|q>2]|0;e=e+(((e|0)==((c[v+(b*48|0)+4>>2]|0)+-1|0))<<31>>31)|0;e=e-((e|0)%3|0)|0;b=0;while(1){if((b|0)==4)break;C=b+e|0;h[x+(b<<4)>>3]=+h[f+(C<<4)>>3];h[x+(b<<4)+8>>3]=+h[f+(C<<4)+8>>3];b=b+1|0}q=+h[d>>3];k=+h[x>>3]-q;o=+h[w>>3];p=+h[x+8>>3]-o;j=+h[x+48>>3]-q;n=+h[x+56>>3]-o;b=y+8|0;g=1.0;i=0.0;j=n*n+j*j;k=p*p+k*k;while(1){p=(g+i)*.5;XL(y,x,3,p,0,0);m=+h[y>>3];n=+h[b>>3];if(+B(+(k-j))<1.0)break;if(+B(+(g-i))<1.0e-05)break;C=k>3]=m;h[a+8>>3]=n;l=z;return}function cM(){return 0}function dM(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=+LL(b,c[46376]|0,.75,.01);g=b+16|0;h[(c[g>>2]|0)+32>>3]=d;d=+LL(b,c[46375]|0,.5,.02);h[(c[g>>2]|0)+40>>3]=d;l=WJ(OL(b,c[46377]|0,104960)|0,b)|0;c[(c[g>>2]|0)+8>>2]=l;l=yx(b,c[46384]|0)|0;d=+LL(b,c[46380]|0,14.0,1.0);e=OL(b,c[46381]|0,104968)|0;f=OL(b,c[46382]|0,134232)|0;i=(Rz(l)|0)!=0;k=(HJ(b)|0)==2;i=kH(b,l,(k?4:0)|(i?2:0),d,e,f)|0;c[(c[g>>2]|0)+104>>2]=i;i=c[46385]|0;if((i|0?(j=yx(b,i)|0,j|0):0)?a[j>>0]|0:0){l=(Rz(j)|0)!=0;l=kH(b,j,l?2:0,d,e,f)|0;c[(c[g>>2]|0)+108>>2]=l;l=(c[(ez(b)|0)+16>>2]|0)+113|0;a[l>>0]=a[l>>0]|16}k=(KL(b,c[46388]|0,0,0)|0)&255;l=c[g>>2]|0;a[l+144>>0]=k;tb[c[c[(c[l+8>>2]|0)+4>>2]>>2]&127](b);return}function eM(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+112|0;m=v+96|0;n=v+80|0;s=v+40|0;u=v;r=b+48|0;p=ez(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)|0;g=m+8|0;c[g>>2]=0;o=n+8|0;c[o>>2]=0;d=c[46412]|0;if(((d|0)!=0?(e=yx(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0){fM(b,m);t=(Rz(e)|0)!=0;i=+h[m>>3];f=c[g>>2]|0;d=c[m+12>>2]|0;e=kH(b,e,t?2:0,i,f,d)|0;t=b+16|0;c[(c[t>>2]|0)+96>>2]=e;e=(c[p+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|1;e=QL(NL(b,c[46422]|0,134226)|0)|0;a[(c[t>>2]|0)+114>>0]=e;t=1;e=f}else{t=0;d=0;i=0.0;e=0}f=c[46413]|0;if((f|0?(j=yx(b,f)|0,j|0):0)?a[j>>0]|0:0){if(!e){fM(b,m);i=+h[m>>3];e=c[g>>2]|0;d=c[m+12>>2]|0}g=(Rz(j)|0)!=0;j=kH(b,j,g?2:0,i,e,d)|0;c[(c[b+16>>2]|0)+108>>2]=j;j=(c[p+16>>2]|0)+113|0;a[j>>0]=a[j>>0]|32}d=c[46427]|0;if(((d|0)!=0?(k=yx(b,d)|0,(k|0)!=0):0)?(a[k>>0]|0)!=0:0){gM(b,m,n);j=(Rz(k)|0)!=0;i=+h[n>>3];d=c[o>>2]|0;e=c[n+12>>2]|0;k=kH(b,k,j?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+100>>2]=k;k=(c[p+16>>2]|0)+113|0;a[k>>0]=a[k>>0]|2}else{e=0;i=0.0;d=0}f=c[46428]|0;if((f|0?(q=yx(b,f)|0,q|0):0)?a[q>>0]|0:0){if(!d){gM(b,m,n);e=c[n+12>>2]|0;i=+h[n>>3];d=c[o>>2]|0}o=(Rz(q)|0)!=0;q=kH(b,q,o?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+104>>2]=q;q=(c[p+16>>2]|0)+113|0;a[q>>0]=a[q>>0]|4}d=xx(b,108373)|0;d=d|0?d:191979;if(a[d>>0]|0)a[(c[(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)+16>>2]|0)+145>>0]=1;g=b+16|0;f=(c[g>>2]|0)+16|0;e=c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0;hM(s,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=s;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((iM(b,c[46434]|0)|0)<<24>>24)a[(c[g>>2]|0)+46>>0]=0;d=xx(b,108382)|0;d=d|0?d:191979;if(!(a[d>>0]|0))e=b+-48|0;else{e=b+-48|0;a[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+145>>0]=1}f=(c[g>>2]|0)+56|0;e=c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0;hM(u,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=u;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((iM(b,c[46435]|0)|0)<<24>>24)a[(c[g>>2]|0)+86>>0]=0;l=v;return t|0}function fM(a,b){a=a|0;b=b|0;h[b>>3]=+LL(a,c[46409]|0,14.0,1.0);c[b+8>>2]=OL(a,c[46410]|0,104968)|0;c[b+12>>2]=OL(a,c[46411]|0,134232)|0;return}function gM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+8|0;if(!(c[e>>2]|0))fM(a,b);h[d>>3]=+LL(a,c[46429]|0,+h[b>>3],1.0);c[d+8>>2]=OL(a,c[46430]|0,c[e>>2]|0)|0;c[d+12>>2]=OL(a,c[46431]|0,c[b+12>>2]|0)|0;return}function hM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+128|0;k=m+80|0;h=m+40|0;g=m;if((f|0)!=0?(j=A$(f,58)|0,(j|0)!=0):0){a[j>>0]=0;i=j+1|0;xb[d&31](h,e,f,i);e=k;g=h;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));a[j>>0]=58;f=i}else{xb[d&31](g,e,f,0);e=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0))}e=b;g=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));c[b+36>>2]=f;l=m;return}function iM(b,c){b=b|0;c=c|0;var d=0;if(((c|0)!=0?(d=yx(b,c)|0,(d|0)!=0):0)?(a[d>>0]|0)!=0:0)b=(QL(d)|0)<<24>>24==0&1;else b=0;return b|0}function jM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;k=l;l=l+32|0;i=k;j=c[b+8>>2]|0;d=c[b+4>>2]|0;d=(c[b+44>>2]|0)+((O((d|0)>1?d+-1|0:0,j)|0)<<4)|0;e=i+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];f=i+8|0;g=i+24|0;b=1;while(1){if((b|0)>=(j|0))break;m=d+(b<<4)|0;o=+h[m>>3];h[i>>3]=+h[(+h[i>>3]>3];n=+h[m+8>>3];h[f>>3]=+h[(+h[f>>3]>3];h[e>>3]=+h[(+h[e>>3]>o?e:m)>>3];h[g>>3]=+h[(+h[g>>3]>n?e:m)+8>>3];b=b+1|0}c[a>>2]=c[i>>2];c[a+4>>2]=c[i+4>>2];c[a+8>>2]=c[i+8>>2];c[a+12>>2]=c[i+12>>2];c[a+16>>2]=c[i+16>>2];c[a+20>>2]=c[i+20>>2];c[a+24>>2]=c[i+24>>2];c[a+28>>2]=c[i+28>>2];l=k;return}function kM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+64|0;g=d+32|0;e=d;f=c[a+16>>2]|0;a=f+16|0;f=c[f+116>>2]&1;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];lM(e,g,b,f);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];l=d;return}function lM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;g=+h[d+56>>3];l=+h[d+64>>3];j=e<<24>>24==0;k=+h[d+24>>3];i=+h[d+32>>3];m=(j?k:i)*.5;f=g-m;g=m+g;if(f<+h[b>>3])h[b>>3]=f;e=b+16|0;if(g>+h[e>>3])h[e>>3]=g;g=(j?i:k)*.5;f=l-g;g=g+l;e=b+8|0;if(f<+h[e>>3])h[e>>3]=f;e=b+24|0;if(g>+h[e>>3])h[e>>3]=g;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function mM(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0;L=l;l=l+448|0;H=L+416|0;t=L+384|0;u=L+304|0;K=L+256|0;G=L+192|0;B=L+144|0;C=L+96|0;d=L+400|0;e=L+368|0;f=L+352|0;g=L+336|0;v=L+288|0;w=L+224|0;x=L+160|0;y=L+112|0;z=L+64|0;A=L+32|0;I=L;J=b+16|0;if((ay(b)|0)==0?(c[(c[J>>2]|0)+180>>2]|0)==0:0){nM(d,0.0,0.0);c[K>>2]=c[d>>2];c[K+4>>2]=c[d+4>>2];c[K+8>>2]=c[d+8>>2];c[K+12>>2]=c[d+12>>2];K=K+16|0;nM(e,0.0,0.0);c[K>>2]=c[e>>2];c[K+4>>2]=c[e+4>>2];c[K+8>>2]=c[e+8>>2];c[K+12>>2]=c[e+12>>2]}else{nM(f,2147483647.0,2147483647.0);c[K>>2]=c[f>>2];c[K+4>>2]=c[f+4>>2];c[K+8>>2]=c[f+8>>2];c[K+12>>2]=c[f+12>>2];F=K+16|0;nM(g,-2147483647.0,-2147483647.0);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];o=C+8|0;p=u+16|0;D=K+8|0;q=u+8|0;E=K+24|0;r=u+24|0;s=B+8|0;n=Sy(b)|0;while(1){if(!n)break;WL(B,n);d=n+16|0;m=c[d>>2]|0;h[C>>3]=(+h[m+96>>3]+ +h[m+88>>3])*.5;h[o>>3]=+h[m+80>>3]*.5;c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];oM(u,t,H);c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];pM(v,t,H);c[p>>2]=c[v>>2];c[p+4>>2]=c[v+4>>2];c[p+8>>2]=c[v+8>>2];c[p+12>>2]=c[v+12>>2];h[K>>3]=+h[(+h[K>>3]<+h[u>>3]?K:u)>>3];h[D>>3]=+h[(+h[D>>3]<+h[q>>3]?K:u)+8>>3];h[F>>3]=+h[(+h[F>>3]>+h[p>>3]?K:u)+16>>3];h[E>>3]=+h[(+h[E>>3]>+h[r>>3]?K:u)+24>>3];d=c[(c[d>>2]|0)+108>>2]|0;if(d|0?a[d+81>>0]|0:0){m=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(w,H,d,m);c[K>>2]=c[w>>2];c[K+4>>2]=c[w+4>>2];c[K+8>>2]=c[w+8>>2];c[K+12>>2]=c[w+12>>2];c[K+16>>2]=c[w+16>>2];c[K+20>>2]=c[w+20>>2];c[K+24>>2]=c[w+24>>2];c[K+28>>2]=c[w+28>>2]}m=Ex(b,n)|0;while(1){if(!m)break;k=m+16|0;d=c[k>>2]|0;j=d+8|0;e=c[j>>2]|0;if(e|0){i=0;while(1){if((i|0)<(c[e+4>>2]|0))g=0;else break;while(1){f=c[e>>2]|0;if((g|0)>=(c[f+(i*48|0)+4>>2]|0))break;e=(c[f+(i*48|0)>>2]|0)+(g<<4)|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];N=+h[B>>3];h[K>>3]=+h[(+h[K>>3]>3];M=+h[s>>3];h[D>>3]=+h[(+h[D>>3]>3];h[F>>3]=+h[(+h[F>>3]>N?F:B)>>3];h[E>>3]=+h[(+h[E>>3]>M?F:B)+8>>3];g=g+1|0;e=c[j>>2]|0}i=i+1|0}e=c[d+96>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(x,H,e,d);c[K>>2]=c[x>>2];c[K+4>>2]=c[x+4>>2];c[K+8>>2]=c[x+8>>2];c[K+12>>2]=c[x+12>>2];c[K+16>>2]=c[x+16>>2];c[K+20>>2]=c[x+20>>2];c[K+24>>2]=c[x+24>>2];c[K+28>>2]=c[x+28>>2];d=c[k>>2]|0}e=c[d+100>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(y,H,e,d);c[K>>2]=c[y>>2];c[K+4>>2]=c[y+4>>2];c[K+8>>2]=c[y+8>>2];c[K+12>>2]=c[y+12>>2];c[K+16>>2]=c[y+16>>2];c[K+20>>2]=c[y+20>>2];c[K+24>>2]=c[y+24>>2];c[K+28>>2]=c[y+28>>2];d=c[k>>2]|0}e=c[d+104>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(z,H,e,d);c[K>>2]=c[z>>2];c[K+4>>2]=c[z+4>>2];c[K+8>>2]=c[z+8>>2];c[K+12>>2]=c[z+12>>2];c[K+16>>2]=c[z+16>>2];c[K+20>>2]=c[z+20>>2];c[K+24>>2]=c[z+24>>2];c[K+28>>2]=c[z+28>>2];d=c[k>>2]|0}d=c[d+108>>2]|0;if(d|0?a[d+81>>0]|0:0){k=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(A,H,d,k);c[K>>2]=c[A>>2];c[K+4>>2]=c[A+4>>2];c[K+8>>2]=c[A+8>>2];c[K+12>>2]=c[A+12>>2];c[K+16>>2]=c[A+16>>2];c[K+20>>2]=c[A+20>>2];c[K+24>>2]=c[A+24>>2];c[K+28>>2]=c[A+28>>2]}}m=Gx(b,m)|0}n=Ty(b,n)|0}d=c[J>>2]|0;f=c[d+180>>2]|0;g=d+184|0;i=G+8|0;j=G+16|0;k=G+24|0;e=1;while(1){if((e|0)>(f|0))break;P=+h[(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+16>>3];h[G>>3]=P;C=c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0;O=+h[C+24>>3];h[i>>3]=O;M=+h[C+32>>3];h[j>>3]=M;N=+h[C+40>>3];h[k>>3]=N;h[K>>3]=+h[(+h[K>>3]>3];h[D>>3]=+h[(+h[D>>3]>3];h[F>>3]=+h[(+h[F>>3]>M?K:G)+16>>3];h[E>>3]=+h[(+h[E>>3]>N?K:G)+24>>3];e=e+1|0}e=c[d+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[d+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(I,H,e,d);c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[K+16>>2]=c[I+16>>2];c[K+20>>2]=c[I+20>>2];c[K+24>>2]=c[I+24>>2];c[K+28>>2]=c[I+28>>2];d=c[J>>2]|0}J=d+16|0;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];c[J+20>>2]=c[K+20>>2];c[J+24>>2]=c[K+24>>2];c[J+28>>2]=c[K+28>>2]}l=L;return}function nM(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function oM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function pM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function qM(a){a=a|0;if((c[a+60>>2]|0)==(a|0))a=1;else a=(V$(ry(a)|0,104980,7)|0)==0&1;return a|0}function rM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a:do if(!e)switch(pz(b)|0){case 0:{e=nx(a,0,c,191979)|0;break a}case 1:{e=nx(a,1,c,191979)|0;break a}case 2:{e=nx(a,2,c,191979)|0;break a}default:{e=0;break a}}while(0);rx(b,e,d)|0;return e|0}function sM(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+144|0;g=k;i=tM(d)|0;h=Cw(23488,c[4555]|0)|0;j=vA(d,104988,1)|0;Az(j,134401,280,1)|0;Tw(g,128,k+16|0);e=Sy(d)|0;while(1){if(!e)break;a:do if(!(a[(c[e+16>>2]|0)+118>>0]|0)){f=Ex(d,e)|0;while(1){if(!f)break a;uM(f,j,g,h,i);f=Gx(d,f)|0}}while(0);e=Ty(d,e)|0}Xw(g);yw(h)|0;f=ay(j)|0;e=Sy(j)|0;while(1){if(!e)break;h=Ty(j,e)|0;dz(d,e)|0;e=h}$x(j)|0;if(f|0){j=(c[d+16>>2]|0)+136|0;b[j>>1]=b[j>>1]|1}yw(i)|0;l=k;return f|0}function tM(a){a=a|0;var b=0;b=Cw(23524,c[4555]|0)|0;DM(a,b);return b|0}function uM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;p=t+24|0;s=t+16|0;r=t+8|0;k=t;n=c[b>>2]&3;m=c[((n|0)==3?b:b+48|0)+40>>2]|0;n=c[((n|0)==2?b:b+-48|0)+40>>2]|0;do if(!(a[(c[n+16>>2]|0)+118>>0]|0)){if(!(z$(ry(m)|0,104980,7)|0))o=vM(g,ry(m)|0)|0;else o=0;if(!(z$(ry(n)|0,104980,7)|0))i=vM(g,ry(n)|0)|0;else i=0;h=(o|0)!=0;j=(i|0)!=0;if(h|j){if((o|0)==(i|0)){r=ry(m)|0;s=ry(m)|0;c[k>>2]=r;c[k+4>>2]=s;Pw(0,105003,k)|0;break}g=wM(f,b)|0;if(g|0){xM(b,c[g+16>>2]|0,c[g+20>>2]|0)|0;break}if(!j)if(!(oz(o,n)|0)){zM(f,m,n,xM(b,yM(m,o,e,d)|0,n)|0);break}else{r=ry(n)|0;s=ry(o)|0;c[q>>2]=r;c[q+4>>2]=s;Pw(0,105158,q)|0;break}if(!h)if(!(oz(i,m)|0)){zM(f,m,n,xM(b,m,yM(n,i,e,d)|0)|0);break}else{r=ry(m)|0;s=ry(i)|0;c[p>>2]=r;c[p+4>>2]=s;Pw(0,105121,p)|0;break}if(oz(i,o)|0){q=ry(o)|0;s=ry(i)|0;c[r>>2]=q;c[r+4>>2]=s;Pw(0,105041,r)|0;break}if(!(oz(o,i)|0)){s=yM(m,o,e,d)|0;zM(f,m,n,xM(b,s,yM(n,i,e,d)|0)|0);break}else{q=ry(i)|0;r=ry(o)|0;c[s>>2]=q;c[s+4>>2]=r;Pw(0,105081,s)|0;break}}}while(0);l=t;return}function vM(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b,512)|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function wM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[b>>2]&3;c[e>>2]=c[((f|0)==3?b:b+48|0)+40>>2];c[e+4>>2]=c[((f|0)==2?b:b+-48|0)+40>>2];b=nb[c[a>>2]&63](a,e,512)|0;l=d;return b|0}function xM(a,b,c){a=a|0;b=b|0;c=c|0;c=Rx(ez(b)|0,b,c,0,1)|0;Az(c,134378,176,1)|0;Bx(a,c)|0;return c|0}function yM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+112|0;g=k;j=k+4|0;Ww(e,105195)|0;i=c[46551]|0;c[46551]=i+1;c[g>>2]=i;Y0(j,134313,g)|0;Ww(e,j)|0;j=e+4|0;g=c[j>>2]|0;i=e+8|0;if(g>>>0>=(c[i>>2]|0)>>>0){Uw(e,1)|0;g=c[j>>2]|0}c[j>>2]=g+1;a[g>>0]=58;Ww(e,ry(d)|0)|0;h=fz(d)|0;g=c[j>>2]|0;if(g>>>0>=(c[i>>2]|0)>>>0){Uw(e,1)|0;g=c[j>>2]|0}a[g>>0]=0;e=c[e>>2]|0;c[j>>2]=e;j=az(h,e,1)|0;Az(j,134365,304,1)|0;a[(c[j+16>>2]|0)+118>>0]=1;Xy(d,j,1)|0;Xy(f,b,1)|0;f=ez(j)|0;c[46384]=rM(f,j,105198,191979,c[46384]|0)|0;f=ez(j)|0;c[46387]=rM(f,j,138e3,131253,c[46387]|0)|0;f=ez(j)|0;c[46377]=rM(f,j,105204,105210,c[46377]|0)|0;l=k;return j|0}function zM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f;n=g+8|0;c[n>>2]=b;m=g+12|0;c[m>>2]=d;o=c[e>>2]&3;i=e+48|0;j=g+16|0;c[j>>2]=c[((o|0)==3?e:i)+40>>2];k=e+-48|0;h=g+20|0;c[h>>2]=c[((o|0)==2?e:k)+40>>2];nb[c[a>>2]&63](a,g,1)|0;c[n>>2]=d;c[m>>2]=b;d=c[e>>2]&3;c[j>>2]=c[((d|0)==2?e:k)+40>>2];c[h>>2]=c[((d|0)==3?e:i)+40>>2];nb[c[a>>2]&63](a,g,1)|0;l=f;return}function AM(a,b,d){a=a|0;b=b|0;d=d|0;d=uH(24)|0;c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];return d|0}function BM(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function CM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if(a>>>0>=e>>>0)if(a>>>0>e>>>0)a=1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return (b>>>0>>0?-1:b>>>0>d>>>0&1)|0}else a=-1;return a|0}function DM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;f=a+16|0;e=1;while(1){a=c[f>>2]|0;if((e|0)>(c[a+180>>2]|0))break;a=c[(c[a+184>>2]|0)+(e<<2)>>2]|0;d=ry(a)|0;if(!(nb[c[b>>2]&63](b,d,512)|0)){i=uH(16)|0;c[i+8>>2]=d;c[i+12>>2]=a;nb[c[b>>2]&63](b,i,1)|0}else{c[g>>2]=d;Pw(0,105214,g)|0}DM(a,b);e=e+1|0}l=h;return}function EM(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function FM(a){a=a|0;var b=0,c=0,d=0;d=vA(a,104988,1)|0;Az(d,134401,280,1)|0;b=Sy(a)|0;while(1){if(!b)break;c=Ex(a,b)|0;while(1){if(!c)break;GM(c,d);c=Gx(a,c)|0}b=Ty(a,b)|0}b=Sy(d)|0;while(1){if(!b)break;c=Ty(d,b)|0;HM(b);dz(a,b)|0;b=c}$x(d)|0;return}function GM(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]&3;f=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;if(!((a[(c[f+16>>2]|0)+118>>0]|0)==0?!(a[(c[e+16>>2]|0)+118>>0]|0):0)){f=IM(f,d)|0;e=xM(b,f,IM(e,d)|0)|0;f=c[b+16>>2]|0;d=f+8|0;e=c[e+16>>2]|0;c[e+8>>2]=c[d>>2];c[d>>2]=0;d=f+96|0;c[e+96>>2]=c[d>>2];c[d>>2]=0;d=f+108|0;c[e+108>>2]=c[d>>2];c[d>>2]=0;d=f+100|0;c[e+100>>2]=c[d>>2];c[d>>2]=0;f=f+104|0;c[e+104>>2]=c[f>>2];c[f>>2]=0;JM(b)}return}function HM(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+132>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+8>>2]|0;if(d){tb[c[(c[d+4>>2]|0)+4>>2]&127](a);b=c[e>>2]|0}nH(c[b+104>>2]|0);nH(c[(c[e>>2]|0)+108>>2]|0);Cz(a,134365)|0;return}function IM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=ez(b)|0;a:do if(a[(c[b+16>>2]|0)+118>>0]|0){Xy(d,b,1)|0;b=A$(ry(b)|0,58)|0;if(!b)qa(108182,104635,1225,105266);d=b+1|0;b=az(f,d,0)|0;if(!b){b=az(f,d,1)|0;Az(b,134365,304,1)|0;d=sx(f,1,0)|0;while(1){if(!d)break a;g=yx(b,d)|0;e=c[d+12>>2]|0;if((g|0)!=(e|0))rx(b,d,e)|0;d=sx(f,1,d)|0}}}while(0);return b|0}function JM(a){a=a|0;var b=0;b=a+16|0;D_(c[(c[b>>2]|0)+144>>2]|0);KM(a);nH(c[(c[b>>2]|0)+96>>2]|0);nH(c[(c[b>>2]|0)+108>>2]|0);nH(c[(c[b>>2]|0)+100>>2]|0);nH(c[(c[b>>2]|0)+104>>2]|0);Cz(a,134378)|0;return}function KM(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;a=c[e>>2]|0;b=c[a+8>>2]|0;if(b){d=0;while(1){a=c[b>>2]|0;if((d|0)>=(c[b+4>>2]|0))break;D_(c[a+(d*48|0)>>2]|0);d=d+1|0;b=c[(c[e>>2]|0)+8>>2]|0}D_(a);D_(c[(c[e>>2]|0)+8>>2]|0);a=c[e>>2]|0}c[a+8>>2]=0;return}function LM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=nx(a,b,c,0)|0;if(!e)e=nx(a,b,c,d)|0;return e|0}function MM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;i=o;h=o+8|0;j=o+16|0;m=A$(b,59)|0;n=d+4|0;e=c[n>>2]|0;k=d+8|0;if(e>>>0>=(c[k>>2]|0)>>>0){Uw(d,1)|0;e=c[n>>2]|0}c[n>>2]=e+1;a[e>>0]=38;if(((m|0)!=0?(f=m-b|0,(f+-2|0)>>>0<=6):0)?(U0(j,b,f)|0,a[j+f>>0]=0,c[h>>2]=j,g=e2(h,23560,252,8,94)|0,(g|0)!=0):0){c[i>>2]=c[g+4>>2];Y0(j,134313,i)|0;b=c[n>>2]|0;if(b>>>0>=(c[k>>2]|0)>>>0){Uw(d,1)|0;b=c[n>>2]|0}c[n>>2]=b+1;a[b>>0]=35;Ww(d,j)|0;b=c[n>>2]|0;if(b>>>0>=(c[k>>2]|0)>>>0){Uw(d,1)|0;b=c[n>>2]|0}c[n>>2]=b+1;a[b>>0]=59;b=m+1|0}l=o;return b|0}function NM(a,b){a=a|0;b=b|0;return b$(c[a>>2]|0,c[b>>2]|0)|0}function OM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+1072|0;k=q+8|0;j=q;i=q+16|0;o=q+24|0;c[i>>2]=b;if((c[46552]|0)!=(d|0)){c[46552]=d;a[191878]=0}Tw(o,1024,q+40|0);p=o+4|0;n=o+8|0;while(1){f=b+1|0;c[i>>2]=f;e=a[b>>0]|0;if(!(e<<24>>24))break;do if((e&255)<192)if(e<<24>>24==38){f=QM(i)|0;if(!f)e=38;else{if(f>>>0<127){e=f&255;break}b=c[p>>2]|0;e=b>>>0>=(c[n>>2]|0)>>>0;if(f>>>0<2047){if(e){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6|192;e=(f&63|128)&255;break}if(e){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>12|224;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6&63|128;e=(f&63|128)&255}}else{h=0;m=9}else if((e&255)>=224)if((e&255)>=240)if((e&255)<248){h=3;m=9}else{if(!(a[191878]|0)){c[j>>2]=ry(d)|0;Pw(0,106681,j)|0;a[191878]=1}h=-1;e=PM(e,o)|0;m=9}else{h=2;m=9}else{h=1;m=9}while(0);do if((m|0)==9){m=0;g=0;while(1){if((g|0)>=(h|0)){m=34;break}if((a[f>>0]&-64)<<24>>24!=-128)break;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;g=g+1|0;e=a[f>>0]|0;f=f+1|0}if((m|0)==34){m=0;c[i>>2]=f;break}c[i>>2]=f;if(!(a[191878]|0)){g=ry(d)|0;c[k>>2]=h+1;c[k+4>>2]=g;Pw(0,106802,k)|0;a[191878]=1}e=PM(e,o)|0}while(0);b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;b=c[i>>2]|0}b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}a[b>>0]=0;n=c[o>>2]|0;c[p>>2]=n;p=n1(n)|0;Xw(o);l=q;return p|0}function PM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;g=j;a[g>>0]=b;a[g+1>>0]=0;g=RM(g)|0;h=d+4|0;i=d+8|0;e=W_(g)|0;f=g;while(1){if((e|0)<=1)break;b=c[h>>2]|0;if(b>>>0>=(c[i>>2]|0)>>>0){Uw(d,1)|0;b=c[h>>2]|0}k=a[f>>0]|0;c[h>>2]=b+1;a[b>>0]=k;e=e+-1|0;f=f+1|0}k=a[f>>0]|0;D_(g);l=j;return k|0}function QM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;d=i+8|0;e=c[b>>2]|0;a:do if((a[e>>0]|0)!=35){c[h>>2]=d;g=0;b:while(1){if((g|0)>=8){d=0;break a}f=a[e+g>>0]|0;switch(f<<24>>24){case 0:{d=0;break a}case 59:break b;default:{}}a[d>>0]=f;d=d+1|0;g=g+1|0}a[d>>0]=0;d=e2(h,23560,252,8,94)|0;if(!d)d=0;else{e=e+(g+1)|0;d=c[d+4>>2]|0}}else{h=a[e+1>>0]|0;d=h&255;c:do if((h|32)<<24>>24==120){h=0;g=2;while(1){if((g|0)>=8){f=h;break c}f=a[e+g>>0]|0;d=f&255;if((f+-65&255)>=6)if((f+-97&255)>=6)if((f+-48&255)<10)f=-48;else{f=h;break c}else f=-87;else f=-55;d=f+d|0;h=d+(h<<4)|0;g=g+1|0}}else{f=0;g=1;while(1){if((g|0)>=8)break c;h=a[e+g>>0]|0;d=h&255;if((h+-48&255)>=10)break c;f=(f*10|0)+-48+d|0;g=g+1|0}}while(0);d=(d|0)==59;e=d?e+(g+1)|0:e;d=d?f:0}while(0);c[b>>2]=e;l=i;return d|0}function RM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1056|0;g=k;i=k+8|0;c[g>>2]=b;Tw(i,1024,k+24|0);j=i+4|0;h=i+8|0;while(1){c[g>>2]=b+1;d=a[b>>0]|0;if(!(d<<24>>24))break;b=d&255;if(d<<24>>24==38){b=QM(g)|0;if(!b){b=38;f=6}else f=5}else f=5;do if((f|0)==5){f=0;if(b>>>0<127)f=6;else{d=c[j>>2]|0;e=d>>>0>=(c[h>>2]|0)>>>0;if(b>>>0<2047){if(e){Uw(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6|192;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}b=b&63|128;break}if(e){Uw(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>12|224;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6&63|128;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}b=b&63|128}}while(0);if((f|0)==6){d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}}c[j>>2]=d+1;a[d>>0]=b;b=c[g>>2]|0}b=c[j>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;b=c[j>>2]|0}a[b>>0]=0;h=c[i>>2]|0;c[j>>2]=h;j=n1(h)|0;Xw(i);l=k;return j|0}function SM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+1040|0;g=i;Tw(g,1024,i+16|0);h=g+4|0;f=g+8|0;while(1){d=b+1|0;e=a[b>>0]|0;if(!(e<<24>>24))break;if((e&255)<127){b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){Uw(g,1)|0;b=c[h>>2]|0}c[h>>2]=b+1;a[b>>0]=e;b=d;continue}else{e=a[d>>0]&63|e<<6&255;d=c[h>>2]|0;if(d>>>0>=(c[f>>2]|0)>>>0){Uw(g,1)|0;d=c[h>>2]|0}c[h>>2]=d+1;a[d>>0]=e;b=b+2|0;continue}}b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){Uw(g,1)|0;b=c[h>>2]|0}a[b>>0]=0;f=c[g>>2]|0;c[h>>2]=f;h=n1(f)|0;Xw(g);l=i;return h|0}function TM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;e=n+48|0;d=n+32|0;f=n+64|0;g=n+16|0;i=n;j=b+16|0;k=a+16|0;m=c[k>>2]|0;if(((+h[j>>3]>=+h[m+48>>3]?+h[m+64>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=+h[m+56>>3]:0)?+h[m+72>>3]>=+h[b+8>>3]:0){m=m+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];UM(g,d,e);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];oM(i,d,e);c[f>>2]=a;c[f+4>>2]=0;d=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0;c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];d=lb[d&127](f,e)|0}else d=0;l=n;return d|0}function UM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function VM(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;e=l;l=l+80|0;j=e+64|0;k=e+48|0;m=e;n=e+32|0;g=e+16|0;h[m>>3]=+h[a+24>>3]*.5;h[m+8>>3]=+h[a+32>>3]*.5;a=a+56|0;c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];oM(n,k,j);i=+h[n>>3];f=+h[n+8>>3];c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];pM(g,k,j);d=+h[g+8>>3];if((+h[b+16>>3]>=i?+h[g>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=f:0)a=d>=+h[b+8>>3]&1;else a=0;l=e;return a|0}function WM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;k=n+48|0;j=n;h=a+16|0;a=c[h>>2]|0;i=c[a+8>>2]|0;a:do if((i|0)!=0?(g=i+8|0,c[j>>2]=c[g>>2],c[j+4>>2]=c[g+4>>2],c[j+8>>2]=c[g+8>>2],c[j+12>>2]=c[g+12>>2],c[j+16>>2]=c[g+16>>2],c[j+20>>2]=c[g+20>>2],c[j+24>>2]=c[g+24>>2],c[j+28>>2]=c[g+28>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(XM(j,k)|0)!=0):0){d=i+4|0;a=0;while(1){if((a|0)>=(c[d>>2]|0))break;e=j;f=(c[i>>2]|0)+(a*48|0)|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if(!((YM(j,k)|0)<<24>>24))a=a+1|0;else{a=1;break a}}a=c[h>>2]|0;m=7}else m=7;while(0);do if((m|0)==7){a=c[a+96>>2]|0;if(a|0?(c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(VM(a,k)|0)<<24>>24):0){a=1;break}a=0}while(0);l=n;return a|0}function XM(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function YM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n+64|0;j=n+48|0;i=n+32|0;f=n+16|0;g=n;m=a+4|0;d=c[m>>2]|0;if(!d)qa(106911,104635,1637,106919);e=c[a>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)>=(d|0)){h=7;break}d=(c[a>>2]|0)+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if((VG(i,j,k)|0)!=-1){d=1;break};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];e=e+1|0;d=c[m>>2]|0}do if((h|0)==7){d=c[a+8>>2]|0;if(d|0?(g=a+16|0,h=c[a>>2]|0,c[i>>2]=c[g>>2],c[i+4>>2]=c[g+4>>2],c[i+8>>2]=c[g+8>>2],c[i+12>>2]=c[g+12>>2],c[j>>2]=c[h>>2],c[j+4>>2]=c[h+4>>2],c[j+8>>2]=c[h+8>>2],c[j+12>>2]=c[h+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(ZM(i,j,d,k)|0)<<24>>24):0){d=1;break}d=c[a+12>>2]|0;if(d|0?(h=a+32|0,m=(c[a>>2]|0)+((c[m>>2]|0)+-1<<4)|0,c[i>>2]=c[h>>2],c[i+4>>2]=c[h+4>>2],c[i+8>>2]=c[h+8>>2],c[i+12>>2]=c[h+12>>2],c[j>>2]=c[m>>2],c[j+4>>2]=c[m+4>>2],c[j+8>>2]=c[m+8>>2],c[j+12>>2]=c[m+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(ZM(i,j,d,k)|0)<<24>>24):0){d=1;break}d=0}while(0);l=n;return d|0}function ZM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+160|0;g=m+144|0;f=m+128|0;n=m+96|0;i=m+64|0;j=m+32|0;k=m;o=+h[e+16>>3];c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];JE(n,f,g,1.0,d);if(((o>=+h[n>>3]?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],JE(i,f,g,1.0,d),+h[i+16>>3]>=+h[e>>3]):0)?(o=+h[e+24>>3],c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],JE(j,f,g,1.0,d),o>=+h[j+8>>3]):0)?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],JE(k,f,g,1.0,d),+h[k+24>>3]>=+h[e+8>>3]):0)f=1;else f=0;l=m;return f|0}function _M(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;a:do if((b|0)!=0?(e=a[b>>0]|0,e<<24>>24!=0):0){do switch(e<<24>>24|0){case 48:{d=2;break a}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{d=10;break a}case 67:case 99:{e=b+1|0;if(!(O$(e,106934)|0)){d=4;break a}if(!(O$(e,106940)|0)){d=12;break a}break}case 70:case 102:{if(!(O$(b+1|0,106948)|0)){d=2;break a}break}case 76:case 108:{if(!(O$(b+1|0,106953)|0)){d=2;break a}break}case 78:case 110:{e=b+1|0;if(!(O$(e,106957)|0)){d=0;break a}if(!(O$(e,106961)|0)){d=2;break a}break}case 79:case 111:{if(!(O$(b+1|0,106963)|0)){d=8;break a}break}case 80:case 112:{if(!(O$(b+1|0,106968)|0)){d=6;break a}break}case 83:case 115:{if(!(O$(b+1|0,106976)|0)){d=10;break a}break}case 84:case 116:{if(!(O$(b+1|0,106982)|0)){d=10;break a}break}case 89:case 121:{if(!(O$(b+1|0,106986)|0)){d=10;break a}break}default:{}}while(0);c[f>>2]=b;Pw(0,106989,f)|0}while(0);l=g;return d|0}function $M(d,f){d=d|0;f=f|0;var g=0;g=xx(d,107030)|0;if(g)if(!(a[g>>0]|0))f=0;else f=_M(g,f)|0;d=(c[d+16>>2]|0)+136|0;b[d>>1]=f|e[d>>1];return}function aN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0;v=l;l=l+32|0;p=v+16|0;r=v;t=e&1;u=e&2;a:do if((c|0)==2){s=+h[a+16>>3];f=+h[a>>3];j=+h[a+24>>3];i=+h[a+8>>3];f=f-(s-f);h[p>>3]=f;h[r>>3]=s;i=i-(j-i);h[p+8>>3]=i;h[r+8>>3]=j}else{g=+h[a>>3];h[r>>3]=g;h[p>>3]=g;j=+h[a+8>>3];m=r+8|0;h[m>>3]=j;n=p+8|0;h[n>>3]=j;e=0;f=g;i=j;while(1){if((e|0)>=(c|0)){s=g;break a}w=a+(e<<4)|0;q=+h[w>>3];k=+h[(q>3];h[p>>3]=k;s=+h[a+(e<<4)+8>>3];o=+h[(s>3];h[n>>3]=o;q=+h[(q>g?w:r)>>3];h[r>>3]=q;s=+h[(s>j?w:r)+8>>3];h[m>>3]=s;e=e+1|0;f=k;i=o;g=q;j=s}}while(0);g=(s-f)*.5;q=g+f;o=(j-i)*.5;k=o+i;if(!t){f=j-k;j=d;i=+F(+j);j=+E(+j);if(!u){g=i*f-k;f=-k-o*i}else{f=i*f;g=k-f;f=f+k}h[b+8>>3]=g;h[b+24>>3]=f;d=j*(s-q);h[b>>3]=q-d;h[b+16>>3]=d+q}else{d=+C(+(o*o+g*g));h[b+8>>3]=u|0?k:-k;h[b>>3]=q;h[b+16>>3]=d*.25;h[b+24>>3]=d}l=v;return}function bN(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=a+16|0;f=c[e>>2]|0;if(!(b<<24>>24)){d=+h[f+32>>3]*36.0;h[f+88>>3]=d;a=f+40|0}else{d=+h[f+40>>3]*36.0;h[f+88>>3]=d;a=f+32|0}h[f+96>>3]=d;h[(c[e>>2]|0)+80>>3]=+h[a>>3]*72.0;return}function cN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;y=l;l=l+16|0;j=y+8|0;x=4;w=C_(40)|0;c[w>>2]=0;s=y;o=0;e=$(29,b|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;a:do if((g|0)!=1){o=0;v=$(23,e<<3|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){e=E3(c[f>>2]|0,w|0,x|0)|0;if(!e)bb(f|0,p|0);z=p}else e=-1;if((e|0)!=1){if(!(a[191874]|0))t=0;else{o=0;e=_(3)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=0;k=0;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}t=e}o=0;e=aa(95,b|0,107038)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[46553]=0;b:do if(e|0?(i=a[e>>0]|0,i<<24>>24):0){h=e;f=i;g=0;while(1){i=h+1|0;if(!(f<<24>>24))break b;switch(f<<24>>24|0){case 99:{e=8;u=16;break}case 105:{e=18;u=16;break}case 109:{e=1;u=16;break}case 114:{e=4;u=16;break}case 115:{e=2;u=16;break}default:e=g}if((u|0)==16){u=0;e=g|e;c[46553]=e}h=i;f=a[i>>0]|0;g=e}}while(0);if(d|0){o=0;ca(20,0,107042,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}}o=0;r=aa(96,b|0,0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){m=c[r+16>>2]|0;if(c[46553]&2|0){o=0;ja(26,c[15686]|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break}}o=0;g=$(25,b|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){n=0;while(1){if(!g)break;o=0;e=aa(97,b|0,g|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}i=n;while(1){if(!e)break;if(!((c[46363]|0)==2?(c[(c[e+16>>2]|0)+8>>2]|0)!=0:0))u=32;c:do if((u|0)==32){u=0;do if(a[191874]|0){k=c[e>>2]&3;j=(c[c[((k|0)==3?e:e+48|0)+40>>2]>>2]|0)>>>4;k=(c[c[((k|0)==2?e:e+-48|0)+40>>2]>>2]|0)>>>4;if(j>>>0>k>>>0){o=0;f=ca(31,t|0,k|0,j|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=E3(c[h>>2]|0,w|0,x|0)|0;if(!d)bb(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ka(64,t|0,k|0,j|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}else{o=0;f=ca(31,t|0,j|0,k|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=E3(c[h>>2]|0,w|0,x|0)|0;if(!d)bb(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ka(64,t|0,j|0,k|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}}while(0);c[v+(i<<3)+4>>2]=e;o=0;d=$(30,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}c[v+(i<<3)>>2]=d;i=i+1|0}while(0);o=0;e=aa(98,b|0,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}}o=0;g=aa(84,b|0,g|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}n=i}o=0;j=$(31,n<<3|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;ma(28,v|0,n|0,8,99);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){g=c[m>>2]|0;o=0;ia(107,g+2|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){i=c[m+16>>2]|0;d=i+(g*40|0)|0;i=i+((g+1|0)*40|0)|0;q=c[15686]|0;h=0;while(1){if((h|0)>=(n|0))break;if((h|0)>0?c[46553]&16|0:0){o=0;ja(26,q|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}e=c[v+(h<<3)+4>>2]|0;k=c[e>>2]&3;g=c[(c[(c[((k|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;e=c[(c[(c[((k|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if((g|0)==(e|0)){o=0;ma(29,m|0,g|0,i|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}else{o=0;ka(65,m|0,e|0,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}o=0;ka(65,m|0,g|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}o=0;e=ca(32,m|0,i|0,d|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}if(e|0){k=t;m=j;i=r;d=v;h=v;break a}e=j+(h<<3)|0;o=0;ma(30,s|0,m|0,d|0,i|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}g=s;k=c[g+4>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=k;o=0;ia(108,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}h=h+1|0}o=0;ha(8);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;e=$(32,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+20>>2]=e;o=0;e=$(33,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+24>>2]=e;o=0;ka(66,n|0,j|0,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){w=D3(186216,1,w|0,x|0)|0;x=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){k=t;m=j;i=r;d=v;h=v;e=0;g=q;u=74}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=0;e=z;g=0;u=74}while(0);d:while(1){if((u|0)==74){u=0;if(e|0){q=g;continue}o=0;ia(109,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){A=g;f=h;q=d;r=i;s=j;t=m;v=k;u=n;e=z;g=A;h=f;d=q;i=r;j=s;m=t;k=v;n=u;u=74;continue}if(c[46553]&4|0){o=0;na(8,g|0,i|0,n|0,m|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}}o=0;oa(10,b|0,i|0,n|0,m|0,d|0,0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}q=g}if(!(a[191874]|0))e=0;else{o=0;ia(110,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}e=0}while(1){if((e|0)>=(n|0))break;o=0;ia(103,c[m+(e<<3)+4>>2]|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;g=q;u=74;continue d}e=e+1|0}o=0;ia(103,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;ia(111,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;ia(103,h|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74}else break}D_(w|0);l=y;return}function dN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;p=q+32|0;o=q+16|0;j=q;k=q+48|0;D1(107909,a)|0;D1(107920,a)|0;m=b+16|0;n=j+8|0;i=k+4|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;d=c[m>>2]|0;e=c[d+(g*40|0)+20>>2]|0;f=c[d+(g*40|0)+24>>2]|0;if((e|0)==(f|0)){YN(j,e);d=~~+h[j>>3];e=~~+h[n>>3]}else{_N(k,(c[e>>2]&1|0)==0?e:f,d+(g*40|0)|0);d=c[k>>2]|0;e=c[i>>2]|0}c[o>>2]=g;c[o+4>>2]=d;c[o+8>>2]=e;g1(a,107940,o)|0;g=g+1|0}f=b+4|0;e=b+20|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;o=c[e>>2]|0;b=c[o+(d*24|0)+16>>2]|0;r=+h[o+(d*24|0)>>3];c[p>>2]=c[o+(d*24|0)+12>>2];c[p+4>>2]=b;h[p+8>>3]=r;g1(a,107960,p)|0;d=d+1|0}D1(107982,a)|0;l=q;return}function eN(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;f=c[a>>2]&3;e=c[(c[((f|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;a=c[(c[((f|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;b=+h[e+16>>3]-+h[a+16>>3];d=+h[e+24>>3]-+h[a+24>>3];return ~~(d*d+b*b)|0}function fN(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function gN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n;YN(n+16|0,d);k=d+32|0;m=d+36|0;g=0;while(1){if((g|0)>=(c[k>>2]|0))break;h=c[(c[m>>2]|0)+(g<<2)>>2]|0;do if(!(a[h+36>>0]|0)){i=c[h+20>>2]|0;if((i|0)==(d|0)){WN(j,h,c[h+24>>2]|0);pO(b,f,h,0.0)|0;break}else{WN(j,h,i);pO(b,e,h,0.0)|0;break}}while(0);g=g+1|0}c[b>>2]=(c[b>>2]|0)+2;l=n;return}function hN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;h=k;YN(k+16|0,b);i=b+32|0;j=b+36|0;f=0;while(1){if((f|0)>=(c[i>>2]|0))break;g=c[(c[j>>2]|0)+(f<<2)>>2]|0;e=c[g+20>>2]|0;if((e|0)==(b|0))e=c[g+24>>2]|0;WN(h,g,e);pO(a,d,g,0.0)|0;f=f+1|0}c[a>>2]=(c[a>>2]|0)+1;c[d+24>>2]=b;c[d+20>>2]=b;l=k;return}function iN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+128|0;C=H+64|0;n=H+48|0;D=H+32|0;E=H+16|0;F=H;g=0;i=e;while(1){if(!i)break;g=g+1|0;i=c[i+8>>2]|0}B=uH((g*56|0)+-112|0)|0;c[C+52>>2]=0;c[C+48>>2]=0;A=e+8|0;e=c[A>>2]|0;i=c[e+8>>2]|0;g=c[e+20>>2]|0;if(c[g>>2]&1)g=c[e+24>>2]|0;WN(n,e,g);j=e;q=e;p=0.0;o=+h[n>>3];z=0;m=0.0;x=+h[n+8>>3];while(1){y=i+8|0;if(!(c[y>>2]|0))break;v=XN(j,i)|0;NR(d,v,c[q+12>>2]|0);t=q+36|0;u=i+36|0;if((a[t>>0]|0)==(a[u>>0]|0))if((c[y>>2]|0)==(f|0)){WN(E,i,v);e=E;G=12}else{j=q;e=z;k=x}else{YN(D,v);e=D;G=12}if((G|0)==12){G=0;w=+h[e>>3];k=+h[e+8>>3];e=a[t>>0]|0;s=e<<24>>24==0;r=(q|0)==(c[A>>2]|0);if(s){if(!(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?4:2;n=v+48|0;q=g+48|0;j=g+40|0;g=r?0:p>o?4:2}else{if(e<<24>>24==(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?1:3;n=v+40|0;q=g+40|0;j=g+48|0;g=r?0:m>x?1:3}ZN(C,s&1,+h[j>>3],+h[q>>3],+h[n>>3],g,e);q=z+1|0;g=B+(z*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));if((a[t>>0]|0)!=(a[u>>0]|0)?(c[y>>2]|0)==(f|0):0){WN(F,i,v);n=(a[u>>0]|0)==0;e=v+40|0;g=v+48|0;p=+h[(n?g:e)>>3];ZN(C,n&1,+h[(n?e:g)>>3],p,p,n?(o>w?4:2):x>k?1:3,0);n=z+2|0;g=B+(q*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));g=v;j=i;p=o;o=w;e=n;m=x}else{g=v;j=i;p=o;o=w;e=q;m=x}}v=i;i=c[y>>2]|0;q=j;z=e;x=k;j=v}i=F_(B,z*56|0)|0;e=z+-1|0;g=0;while(1){if((g|0)>=(z|0))break;if((g|0)>0)c[i+(g*56|0)+48>>2]=i+((g+-1|0)*56|0);if((g|0)<(e|0)){G=g+1|0;c[i+(g*56|0)+52>>2]=i+(G*56|0);g=G;continue}else{g=g+1|0;continue}}c[b>>2]=z;c[b+4>>2]=i;l=H;return}function jN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Cw(25588,c[4555]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&4)){while(1){d=c[(c[b+36>>2]|0)+8>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=uH(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+40>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|4;d=c[c[f+36>>2]>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+56>>3];RN(j,g,+h[b+48>>3])}i=i+1|0}return j|0}function kN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Cw(25588,c[4555]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&2)){while(1){d=c[(c[b+36>>2]|0)+12>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=uH(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+48>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|2;d=c[(c[f+36>>2]|0)+4>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+64>>3];RN(j,g,+h[b+40>>3])}i=i+1|0}return j|0}function lN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+20|0;i=e+24|0;e=0;while(1){if((e|0)>=(b|0))break;g=c[d+(e<<3)>>2]|0;h=c[d+(e<<3)+4>>2]|0;f=0;while(1){if((f|0)>=(g|0))break;k=h+(f*56|0)|0;QN(uN(c[((a[k>>0]|0)==0?j:i)>>2]|0,k)|0,k);f=f+1|0}e=e+1|0}return}function mN(a){a=a|0;var b=0,d=0;d=a+20|0;wN(c[d>>2]|0);b=a+24|0;wN(c[b>>2]|0);xN(c[d>>2]|0);xN(c[b>>2]|0);yN(c[d>>2]|0,a);yN(c[b>>2]|0,a);zN(c[d>>2]|0);zN(c[b>>2]|0);return}function nN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;z=l;l=l+224|0;n=z+176|0;m=z+208|0;x=z+160|0;y=z+128|0;k=z+96|0;t=z+64|0;u=z;o=z+32|0;v=u+8|0;h[v>>3]=1797693134862315708145274.0e284;h[u>>3]=1797693134862315708145274.0e284;w=u+24|0;h[w>>3]=-1797693134862315708145274.0e284;p=u+16|0;h[p>>3]=-1797693134862315708145274.0e284;D1(107157,a)|0;c[n>>2]=10;c[n+4>>2]=10;g1(a,107563,n)|0;D1(135183,a)|0;i=b+4|0;j=b+12|0;q=t+8|0;r=t+16|0;s=t+24|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;D=(c[j>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];C=+h[q>>3];B=+h[r>>3];A=+h[s>>3];h[k>>3]=+h[t>>3];h[k+8>>3]=C;h[k+16>>3]=B;h[k+24>>3]=A;g1(a,135202,k)|0;g=g+1|0}g=0;while(1){if((g|0)>=(d|0))break;D=c[f+(g<<3)+4>>2]|0;k=e+(g<<3)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];c[n+16>>2]=c[u+16>>2];c[n+20>>2]=c[u+20>>2];c[n+24>>2]=c[u+24>>2];c[n+28>>2]=c[u+28>>2];vN(o,a,D,m,b,n);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];c[u+20>>2]=c[o+20>>2];c[u+24>>2]=c[o+24>>2];c[u+28>>2]=c[o+28>>2];g=g+1|0}D1(107580,a)|0;i=b+8|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;D=(c[i>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];E=+h[t>>3];A=+h[q>>3];B=+h[r>>3];C=+h[s>>3];h[y>>3]=E;h[y+8>>3]=A;h[y+16>>3]=B;h[y+24>>3]=C;g1(a,135239,y)|0;h[u>>3]=+h[(+h[u>>3]>3];h[v>>3]=+h[(+h[v>>3]>3];h[p>>3]=+h[(+h[p>>3]>B?u:t)+16>>3];h[w>>3]=+h[(+h[w>>3]>C?u:t)+24>>3];g=g+1|0}v=~~(+h[v>>3]+10.0);y=~~(+h[p>>3]+10.0);D=~~(+h[w>>3]+10.0);c[x>>2]=~~(+h[u>>3]+10.0);c[x+4>>2]=v;c[x+8>>2]=y;c[x+12>>2]=D;g1(a,107605,x)|0;l=z;return}function oN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;N=l;l=l+112|0;F=N+88|0;E=N+72|0;M=N+32|0;I=N+16|0;J=N;K=N+56|0;L=N+40|0;G=c[15686]|0;w=(i|0)==0;x=J+8|0;y=I+8|0;v=0;m=0;n=0;o=0;p=0;i=0;while(1){if((v|0)>=(e|0))break;z=c[g+(v<<3)+4>>2]|0;A=z+48|0;u=(c[(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)+16>>2]|0)+16|0;B=z+16|0;C=(c[B>>2]|0)+16|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];pN(K,E,F);c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];C=z+-48|0;u=(c[(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)+16>>2]|0)+16|0;t=(c[B>>2]|0)+56|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];pN(L,E,F);c[J>>2]=c[L>>2];c[J+4>>2]=c[L+4>>2];c[J+8>>2]=c[L+8>>2];c[J+12>>2]=c[L+12>>2];t=c[f+(v<<3)>>2]|0;u=c[f+(v<<3)+4>>2]|0;s=t*3|0;D=s+1|0;if((s|0)>=(n|0)){if(m|0)D_(i);p=vH(D<<4)|0;m=p;n=D;o=p;i=p}if(!(a[u>>0]|0)){k=+(rN(u,d)|0);j=+h[I>>3]}else{j=+qN(u,d);k=+h[y>>3]}r=m+16|0;h[m+16>>3]=j;h[m+24>>3]=k;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];r=1;q=u;s=2;while(1){if((r|0)>=(t|0))break;q=u+(r*56|0)|0;if(!(a[q>>0]|0))k=+(rN(q,d)|0);else j=+qN(q,d);O=m+(s+2<<4)|0;Q=m+(s+1<<4)|0;P=m+(s<<4)|0;h[P>>3]=j;h[m+(s<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];r=r+1|0;s=s+3|0}if(!(a[q>>0]|0)){k=+(rN(q,d)|0);j=+h[J>>3]}else{j=+qN(q,d);k=+h[x>>3]}Q=m+(s<<4)|0;O=s+1|0;P=m+(O<<4)|0;h[P>>3]=j;h[m+(O<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];if(0>1){P=ry(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)|0;Q=ry(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)|0;c[M>>2]=P;c[M+4>>2]=Q;g1(G,107116,M)|0}QK(z,c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0,m,D,25576);if((!w?(H=c[(c[B>>2]|0)+96>>2]|0,H|0):0)?(a[H+81>>0]|0)==0:0){c[E>>2]=c[I>>2];c[E+4>>2]=c[I+4>>2];c[E+8>>2]=c[I+8>>2];c[E+12>>2]=c[I+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];jL(b,z,E,F)}v=v+1|0}D_(o);l=N;return}function pN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function qN(a,b){a=a|0;b=b|0;var d=0.0,e=0;b=uN(c[b+24>>2]|0,a)|0;e=c[b+36>>2]|0;d=+h[e+40>>3];return +((+h[e+56>>3]-d)*(+(c[a+44>>2]|0)/+((c[b+24>>2]|0)+1|0))+d)}function rN(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=uN(c[b+20>>2]|0,a)|0;b=c[e+36>>2]|0;d=+h[b+48>>3];return ~~((1.0-+(c[a+44>>2]|0)/+((c[e+24>>2]|0)+1|0))*(+h[b+64>>3]-d)+d)|0}function sN(a){a=a|0;return 0}function tN(a){a=a|0;return 0}function uN(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b+8|0,512)|0;if(!a)qa(107129,107135,423,107143);a=c[a+16>>2]|0;a=nb[c[a>>2]&63](a,b+16|0,512)|0;if(!a)qa(107154,107135,425,107143);else return a|0;return 0}function vN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;z=l;l=l+32|0;y=z+16|0;u=z+8|0;m=z;j=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;t=c[f+4>>2]|0;if(!(a[t>>0]|0)){k=+h[j+56>>3];s=+h[j+40>>3];j=rN(t,g)|0;k=(s+k)*.5}else{k=+h[j+64>>3];s=+h[j+48>>3];j=~~((s+k)*.5);k=+qN(t,g)}A=~~k;p=+h[i>>3];r=+(A|0);p=p>3]=p;v=i+8|0;q=+h[v>>3];s=+(j|0);q=q>3]=q;w=i+16|0;k=+h[w>>3];r=k>r?k:r;h[w>>3]=r;x=i+24|0;k=+h[x>>3];s=k>s?k:s;h[x>>3]=s;c[m>>2]=A;c[m+4>>2]=j;g1(d,107656,m)|0;o=c[f>>2]|0;m=t;n=1;f=A;while(1){if((n|0)>=(o|0))break;m=t+(n*56|0)|0;if(!(a[m>>0]|0))j=rN(m,g)|0;else f=~~+qN(m,g);B=+(f|0);D=p>3]=D;k=+(j|0);C=q>3]=C;B=r>B?r:B;h[w>>3]=B;k=s>k?s:k;h[x>>3]=k;c[u>>2]=f;c[u+4>>2]=j;g1(d,107678,u)|0;n=n+1|0;p=D;q=C;r=B;s=k}j=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if(!(a[m>>0]|0)){k=+h[j+56>>3];D=+h[j+40>>3];j=rN(m,g)|0;k=(D+k)*.5}else{k=+h[j+64>>3];D=+h[j+48>>3];j=~~((D+k)*.5);k=+qN(m,g)}A=~~k;C=+(A|0);h[i>>3]=p>3]=q>3]=r>C?r:C;h[x>>3]=s>D?s:D;c[y>>2]=A;c[y+4>>2]=j;g1(d,107692,y)|0;c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];c[b+16>>2]=c[i+16>>2];c[b+20>>2]=c[i+20>>2];c[b+24>>2]=c[i+24>>2];c[b+28>>2]=c[i+28>>2];l=z;return}function wN(a){a=a|0;var b=0;a=Aw(a)|0;while(1){if(!a)break;b=Aw(c[a+16>>2]|0)|0;while(1){if(!b)break;c[b+32>>2]=$N(c[b+24>>2]|0)|0;b=c[b>>2]|0}a=c[a>>2]|0}return}function xN(a){a=a|0;var b=0;a=Aw(a)|0;while(1){if(!a)break;b=Aw(c[a+16>>2]|0)|0;while(1){if(!b)break;if(c[b+24>>2]|0)PN(b);b=c[b>>2]|0}a=c[a>>2]|0}return}function yN(a,b){a=a|0;b=b|0;var d=0;d=Aw(a)|0;while(1){if(!d)break;a=Aw(c[d+16>>2]|0)|0;while(1){if(!a)break;DN(a,b);a=c[a>>2]|0}d=c[d>>2]|0}return}function zN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0;e=Aw(a)|0;while(1){if(!e)break;i=e+8|0;f=Aw(c[e+16>>2]|0)|0;while(1){if(!f)break;a=f+24|0;a:do if(c[a>>2]|0){if(c[46553]&8|0)AN(f,~~+h[i>>3]);g=f+32|0;eO(c[g>>2]|0);b=c[a>>2]|0;d=f+28|0;a=0;while(1){if((a|0)>=(b|0))break a;c[(c[(c[d>>2]|0)+(a<<2)>>2]|0)+44>>2]=(c[(c[(c[g>>2]|0)+4>>2]|0)+(a*12|0)+4>>2]|0)+1;a=a+1|0}}while(0);f=c[f>>2]|0}e=c[e>>2]|0}return}function AN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+32|0;d=j;g=a+24|0;a:do if((c[g>>2]|0)>=2){i=c[15686]|0;m=+h[a+8>>3];k=+h[a+16>>3];c[d>>2]=b;h[d+8>>3]=m;h[d+16>>3]=k;g1(i,107713,d)|0;f=a+32|0;a=a+28|0;b=0;while(1){if((b|0)>=(c[g>>2]|0))break a;e=c[(c[(c[f>>2]|0)+4>>2]|0)+(b*12|0)+8>>2]|0;b:do if(Ew(e)|0){BN(i,c[(c[a>>2]|0)+(b<<2)>>2]|0);D1(107733,i)|0;d=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!d)break b;D1(107738,i)|0;BN(i,c[(c[a>>2]|0)+(c[d>>2]<<2)>>2]|0);D1(150517,i)|0;d=nb[c[e>>2]&63](e,d,8)|0}}while(0);b=b+1|0}}while(0);l=j;return}function BN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+80|0;f=g+40|0;e=g;if(!(a[d>>0]|0)){m=+h[d+16>>3];j=+h[d+8>>3];k=+h[d+24>>3];i=CN(c[d+32>>2]|0)|0;e=CN(c[d+36>>2]|0)|0;h[f>>3]=m;h[f+8>>3]=j;h[f+16>>3]=k;h[f+24>>3]=j;c[f+32>>2]=i;c[f+36>>2]=e;g1(b,107744,f)|0}else{k=+h[d+8>>3];j=+h[d+16>>3];m=+h[d+24>>3];f=CN(c[d+32>>2]|0)|0;i=CN(c[d+36>>2]|0)|0;h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=k;h[e+24>>3]=m;c[e+32>>2]=f;c[e+36>>2]=i;g1(b,107744,e)|0}l=g;return}function CN(a){a=a|0;switch(a|0){case 0:{a=107795;break}case 1:{a=107790;break}case 2:{a=107783;break}case 3:{a=107776;break}case 4:{a=107768;break}default:a=0}return a|0}function DN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;r=w+8|0;t=w;u=c[a+32>>2]|0;v=c[a+28>>2]|0;p=a+24|0;m=r+4|0;n=t+4|0;j=0;a=c[p>>2]|0;a:while(1){q=j+1|0;if((q|0)>=(a|0))break;o=v+(j<<2)|0;k=q;while(1){if((k|0)>=(a|0)){j=q;continue a}b:do if(((dO(u,j,k)|0)==0?(dO(u,k,j)|0)==0:0)?(s=v+(k<<2)|0,EN(c[o>>2]|0,c[s>>2]|0)|0):0){f=c[o>>2]|0;a=c[f+48>>2]|0;i=c[s>>2]|0;d=c[i+48>>2]|0;e=(d|0)==0;if(a)if(e)a=1;else a=+h[a+8>>3]!=+h[d+8>>3];else a=e^1;g=a&1;FN(r,f,i,0,g);a=c[r>>2]|0;i=c[m>>2]|0;f=g^1;FN(t,c[o>>2]|0,c[s>>2]|0,1,f);d=c[t>>2]|0;e=c[n>>2]|0;switch(i|0){case -1:{GN(c[s>>2]|0,c[o>>2]|0,g,0,a,b);GN(c[s>>2]|0,c[o>>2]|0,f,1,d,b);if((e|0)!=1)break b;HN(c[o>>2]|0,c[s>>2]|0,f,b);break b}case 0:switch(e|0){case -1:{GN(c[s>>2]|0,c[o>>2]|0,g,0,a,b);GN(c[s>>2]|0,c[o>>2]|0,f,1,d,b);break b}case 0:{GN(c[o>>2]|0,c[s>>2]|0,0,g,a,b);GN(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}case 1:{GN(c[o>>2]|0,c[s>>2]|0,0,g,a,b);GN(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}default:break b}case 1:{GN(c[o>>2]|0,c[s>>2]|0,0,g,a,b);GN(c[o>>2]|0,c[s>>2]|0,1,f,d,b);if((e|0)!=-1)break b;HN(c[o>>2]|0,c[s>>2]|0,f,b);break b}default:break b}}while(0);k=k+1|0;a=c[p>>2]|0}}l=w;return}function EN(a,b){a=a|0;b=b|0;if(!(+h[a+8>>3]==+h[b+8>>3]))qa(107866,107135,843,107897);if((+h[a+16>>3]==+h[b+16>>3]?+h[a+24>>3]==+h[b+24>>3]:0)?(c[a+32>>2]|0)==(c[b+32>>2]|0):0)a=(c[a+36>>2]|0)==(c[b+36>>2]|0)&1;else a=0;return a|0}function FN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=0;while(1){b=IN(b,e)|0;if(!b){h=0;break}d=IN(d,f)|0;if(!d){i=6;break}if(!(EN(b,d)|0)){i=7;break}g=g+1|0}if((i|0)==6)qa(135312,107135,871,107815);else if((i|0)==7)h=KN(b,JN(b,d)|0,g+1|0,1-e|0)|0;c[a>>2]=g;c[a+4>>2]=h;return}function GN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i+20|0;n=i+24|0;i=uN(c[((a[b>>0]|0)==0?o:n)>>2]|0,b)|0;bO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0);k=1;while(1){if((k|0)>(g|0))break;l=IN(b,e)|0;m=IN(d,f)|0;do if(!(a[b>>0]|0)){j=uN(c[n>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==1;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==1;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}}else{j=uN(c[o>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==2;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==2;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}}while(0);b=l;d=m;k=k+1|0}return}function HN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;while(1){if(!(EN(b,d)|0))break;g=IN(b,1)|0;d=IN(d,e)|0;b=g}g=c[(uN(c[((a[b>>0]|0)==0?f+20|0:f+24|0)>>2]|0,b)|0)+32>>2]|0;cO(g,c[b+40>>2]|0,c[d+40>>2]|0);return}function IN(a,b){a=a|0;b=b|0;if(!a)qa(107802,107135,798,107806);else return c[((b|0)==0?a+48|0:a+52|0)>>2]|0;return 0}function JN(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=a[b>>0]|0;if(d<<24>>24==(a[c>>0]|0)?!(+h[b+8>>3]!=+h[c+8>>3]):0){if(!(d<<24>>24))b=LN(b,c,3,1)|0;else b=LN(b,c,4,2)|0;l=f;return b|0}Pw(1,107828,e)|0;bb(186216,1);return 0}function KN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0;j=1;while(1){if((j|0)>(e|0))break;i=IN(b,f)|0;g=+h[i+8>>3]==+h[b+16>>3];do if(!(a[b>>0]|0))if(g){g=(c[b+32>>2]|0)==1;break}else{g=(c[b+36>>2]|0)==3;break}else if(g){g=(c[b+32>>2]|0)==4;break}else{g=(c[b+36>>2]|0)==2;break}while(0);b=i;j=j+1|0;d=g?0-d|0:d}return d|0}function LN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;j=+h[a+24>>3];k=+h[b+16>>3];do if(!(j>3],i=+h[b+24>>3],!(g>i)):0){if(k>2]|0;return ((d|0)==(c[b+32>>2]|0)?0:(d|0)==(e|0)?1:-1)|0}else{d=c[a+32>>2]|0;b=(d|0)==(c[b+36>>2]|0)?0:(d|0)==(e|0)?1:-1;break}if(!(j==i))if(j>2]|0)==(d|0);d=ON(c[b+32>>2]|0,c[a+32>>2]|0,d,e)|0;return (o?d:0-d|0)|0}else{o=(c[b+36>>2]|0)==(e|0);b=ON(c[a+32>>2]|0,c[b+32>>2]|0,d,e)|0;b=o?b:0-b|0;break}o=c[a+32>>2]|0;n=c[b+32>>2]|0;if((o|0)==(n|0)){b=c[b+36>>2]|0;if((c[a+36>>2]|0)==(b|0)){b=0;break}}else b=c[b+36>>2]|0;m=(n|0)==(d|0);if((n|0)==(b|0)){if(m){b=1;break}if((n|0)==(e|0)){b=-1;break}if((o|0)!=(d|0)?(c[a+36>>2]|0)!=(d|0):0){b=1;break}if((o|0)!=(e|0)?(c[a+36>>2]|0)!=(e|0):0){b=-1;break}b=0;break}f=(b|0)==(e|0);if(m&f){b=(c[a+36>>2]|0)==(e|0);if((o|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}l=(b|0)==(d|0);if((n|0)==(e|0)&l){b=(o|0)==(e|0);if((c[a+36>>2]|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}if(!n){if(l){b=NN(o,c[a+36>>2]|0,d)|0;break}if(f){b=0-(NN(o,c[a+36>>2]|0,e)|0)|0;break}}f=c[a+36>>2]|0;if(m&(b|0)==0){b=NN(f,o,d)|0;break}else{b=0-(NN(f,o,e)|0)|0;break}}else b=0;while(0);return b|0}function MN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0;i=+h[a+24>>3];j=+h[b+24>>3];do if(i>2]|0;if((a|0)==(d|0)?(c[b+32>>2]|0)==(e|0):0){a=-1;break}if((a|0)==(e|0)?(c[b+32>>2]|0)==(d|0):0){a=1;break}a=0}else{f=c[b+32>>2]|0;g=(f|0)==(e|0);if(i==j)if(g){a=ON(c[a+36>>2]|0,c[b+36>>2]|0,d,e)|0;break}else{a=0-(ON(c[b+36>>2]|0,c[a+36>>2]|0,d,e)|0)|0;break}if(g?(c[b+36>>2]|0)==(e|0):0){a=-1;break}if((f|0)==(d|0)?(c[b+36>>2]|0)==(d|0):0){a=1;break}a=0}while(0);return a|0}function NN(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)==(c|0)?((b|0)==(c|0))<<31>>31:1)|0}function ON(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(d|0)){b=(a|0)==0;if(b)return 0;else b=b&1}return ((a|0)!=0|(b|0)!=(c|0))<<31>>31|0}function PN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=c[a+28>>2]|0;h=c[a+24>>2]|0;d=c[a+32>>2]|0;a=0;a:while(1){e=a+1|0;if((e|0)>=(h|0))break;f=g+(a<<2)|0;b=e;while(1){if((b|0)==(h|0)){a=e;continue a}switch(JN(c[f>>2]|0,c[g+(b<<2)>>2]|0)|0){case 1:{bO(d,a,b);break}case -1:{bO(d,b,a);break}default:{}}b=b+1|0}}return}function QN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+24|0;e=c[f>>2]|0;d=e+1|0;c[f>>2]=d;c[b+40>>2]=e;e=a+28|0;a=c[e>>2]|0;if(!a)a=vH(d<<2)|0;else a=xH(a,d<<2)|0;c[e>>2]=a;c[a+((c[f>>2]|0)+-1<<2)>>2]=b;return}function RN(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;h[f>>3]=d;e=nb[c[a>>2]&63](a,f,512)|0;if(!e){e=uH(24)|0;h[e+8>>3]=+h[f>>3];c[e+16>>2]=Cw(25624,c[4555]|0)|0;nb[c[a>>2]&63](a,e,1)|0}f=c[e+16>>2]|0;nb[c[f>>2]&63](f,b,1)|0;l=g;return}function SN(a,b,d){a=a|0;b=b|0;d=d|0;aO(c[b+32>>2]|0);D_(c[b+28>>2]|0);D_(b);return}function TN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(e>3]>=+h[c+8>>3])<<31>>31;else a=0;else a=!(+h[b+8>>3]<=+h[c+8>>3])&1;return a|0}function UN(a,b,d){a=a|0;b=b|0;d=d|0;yw(c[b+16>>2]|0)|0;D_(b);return}function VN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[b>>3];e=+h[c>>3];return (f>e?1:(f>31)|0}function WN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;i=(a[d+36>>0]|0)!=0;j=e+40|0;do if((c[d+24>>2]|0)==(e|0)){f=+h[j>>3];if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;break}else{g=+h[e+48>>3];f=(+h[e+56>>3]+f)*.5;break}}else if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;f=+h[e+56>>3];break}else{g=+h[e+64>>3];f=(+h[e+56>>3]+ +h[j>>3])*.5;break}while(0);h[b>>3]=f;h[b+8>>3]=g;return}function XN(a,b){a=a|0;b=b|0;var d=0;d=c[a+20>>2]|0;if((d|0)!=(c[b+20>>2]|0)?(d|0)!=(c[b+24>>2]|0):0)d=c[a+24>>2]|0;return d|0}function YN(a,b){a=a|0;b=b|0;var c=0.0;c=(+h[b+64>>3]+ +h[b+48>>3])*.5;h[a>>3]=(+h[b+56>>3]+ +h[b+40>>3])*.5;h[a+8>>3]=c;return}function ZN(b,d,e,f,g,i,j){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=0,l=0;a[b>>0]=d;h[b+8>>3]=e;if(f>3]=f;h[b+16>>3]=e;c[b+36>>2]=d;c[b+32>>2]=l;a[b+1>>0]=k;return}function _N(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+36>>2]|0;do if((c[e+4>>2]|0)!=(d|0)){if((c[e+12>>2]|0)==(d|0)){e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+48>>3];break}if((c[e+8>>2]|0)==(d|0)){e=~~+h[b+40>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5);break}if((c[e>>2]|0)==(d|0)){e=~~+h[b+56>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5)}else{e=0;d=0}}else{e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+64>>3]}while(0);c[a>>2]=e;c[a+4>>2]=d;return}function $N(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=uH(8)|0;c[d>>2]=a;e=d+4|0;c[e>>2]=uH(a*12|0)|0;b=0;while(1){if((b|0)>=(a|0))break;g=yR()|0;f=c[e>>2]|0;c[f+(b*12|0)+8>>2]=g;c[f+(b*12|0)>>2]=0;b=b+1|0}return d|0}function aO(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=0;while(1){e=c[d>>2]|0;if((b|0)>=(c[a>>2]|0))break;yw(c[e+(b*12|0)+8>>2]|0)|0;b=b+1|0}D_(e);D_(a);return}function bO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;nb[c[d>>2]&63](d,f,1)|0;l=e;return}function cO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=d;a=a+4|0;g=c[(c[a>>2]|0)+(b*12|0)+8>>2]|0;nb[c[g>>2]&63](g,f,2)|0;c[f>>2]=b;d=c[(c[a>>2]|0)+(d*12|0)+8>>2]|0;nb[c[d>>2]&63](d,f,2)|0;l=e;return}function dO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;d=(nb[c[d>>2]&63](d,f,512)|0)!=0&1;l=e;return d|0}function eO(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;switch(b|0){case 0:break;case 1:{c[(c[a+4>>2]|0)+4>>2]=0;break}default:{e=fO(b)|0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[a>>2]|0)){b=0;break}if(!(c[(c[f>>2]|0)+(d*12|0)>>2]|0))b=gO(a,d,b,e)|0;d=d+1|0}while(1){d=hO(e)|0;if((d|0)<=-1)break;c[(c[f>>2]|0)+(d*12|0)+4>>2]=b;b=b+1|0}iO(e)}}return}function fO(a){a=a|0;var b=0;b=uH(8)|0;c[b+4>>2]=uH(a<<2)|0;c[b>>2]=-1;return b|0}function gO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;g=c[i>>2]|0;j=g+(b*12|0)|0;c[j>>2]=1;g=c[g+(b*12|0)+8>>2]|0;h=g+4|0;d=d+1|0;g=Aw(g)|0;while(1){if(!g)break;f=c[(c[h>>2]|0)+8>>2]|0;if((f|0)<0)f=c[g+8>>2]|0;else f=g+(0-f)|0;f=c[f>>2]|0;if(!(c[(c[i>>2]|0)+(f*12|0)>>2]|0))d=gO(a,f,d,e)|0;g=c[g>>2]|0}c[j>>2]=2;jO(e,b);return d+1|0}function hO(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if((b|0)==-1)a=-1;else{d=c[(c[a+4>>2]|0)+(b<<2)>>2]|0;c[a>>2]=b+-1;a=d}return a|0}function iO(a){a=a|0;D_(c[a+4>>2]|0);D_(a);return}function jO(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[(c[a+4>>2]|0)+(d<<2)>>2]=b;return}function kO(a){a=a|0;var d=0,e=0,f=0;e=c[a>>2]|0;c[a+8>>2]=e;c[a+12>>2]=c[a+4>>2];d=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;f=c[d>>2]|0;b[f+(a*40|0)+18>>1]=b[f+(a*40|0)+16>>1]|0;a=a+1|0}return}function lO(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;c[a>>2]=d;c[a+4>>2]=c[a+12>>2];e=a+16|0;a=0;while(1){if((a|0)>=(d|0))break;f=c[e>>2]|0;b[f+(a*40|0)+16>>1]=b[f+(a*40|0)+18>>1]|0;a=a+1|0}d=d+2|0;while(1){if((a|0)>=(d|0))break;b[(c[e>>2]|0)+(a*40|0)+16>>1]=0;a=a+1|0}return}function mO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=uH(((c[a>>2]|0)*6|0)+(b<<1)<<2)|0;c[a+20>>2]=uH((((c[a>>2]|0)*3|0)+b|0)*24|0)|0;e=c[a>>2]|0;f=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+24|0;a=a+1|0}e=e+2|0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+(b<<2)|0;a=a+1|0}return}function nO(a){a=a|0;var b=0;b=uH(24)|0;c[b>>2]=0;c[b+16>>2]=uH(a*40|0)|0;return b|0}function oO(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=c[a>>2]|0;c[d+(b*40|0)+32>>2]=b;c[a>>2]=b+1;return d+(b*40|0)|0}function pO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=a+4|0;f=c[g>>2]|0;c[g>>2]=f+1;g=c[a+20>>2]|0;a=g+(f*24|0)|0;c[g+(f*24|0)+12>>2]=c[b+32>>2];c[g+(f*24|0)+16>>2]=c[d+32>>2];h[a>>3]=e;c[g+(f*24|0)+8>>2]=0;qO(b,f);qO(d,f);return a|0}function qO(a,d){a=a|0;d=d|0;var e=0,f=0;e=a+16|0;f=b[e>>1]|0;c[(c[a+28>>2]|0)+(f<<16>>16<<2)>>2]=d;b[e>>1]=f+1<<16>>16;return}function rO(a){a=a|0;var b=0;b=a+16|0;D_(c[(c[b>>2]|0)+28>>2]|0);D_(c[b>>2]|0);D_(c[a+20>>2]|0);D_(a);return}function sO(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[a>>2]|0;i=a+16|0;f=0;while(1){if((f|0)>=(g|0))break;c[(c[i>>2]|0)+(f*40|0)>>2]=-2147483648;f=f+1|0}GR();a:do if(!(JR(d)|0)){c[d+8>>2]=0;c[d>>2]=0;d=a+20|0;b:while(1){g=LR()|0;if(!g){f=0;break a}c[g>>2]=0-(c[g>>2]|0);if((g|0)==(e|0)){f=0;break a}i=g+16|0;j=g+28|0;f=0;while(1){if((f|0)>=(b[i>>1]|0))continue b;k=(c[d>>2]|0)+((c[(c[j>>2]|0)+(f<<2)>>2]|0)*24|0)|0;l=tO(a,k,g)|0;m=c[l>>2]|0;do if((m|0)<0){n=~~-(+h[k>>3]+ +(c[g>>2]|0));if((m|0)==-2147483648){c[l>>2]=n;if(JR(l)|0){f=1;break a}c[l+8>>2]=g;c[l+12>>2]=k;break}else{if((m|0)>=(n|0))break;MR(l,n);c[l+8>>2]=g;c[l+12>>2]=k;break}}while(0);f=f+1|0}}}else f=1;while(0);return f|0}function tO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+12>>2]|0;if((e|0)==(c[d+32>>2]|0))e=c[b+16>>2]|0;return (c[a+16>>2]|0)+(e*40|0)|0}function uO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;wC(g,3,b)|0;b=c[g+92>>2]|0;do if(b){d=c[b+16>>2]|0;h=c[d+12>>2]|0;c[a+76>>2]=h;e=c[d+16>>2]|0;c[a+84>>2]=e;f=a+80|0;c[f>>2]=c[d>>2];c[a+88>>2]=c[b+4>>2];d=a+152|0;e=c[d>>2]|c[e>>2];c[d>>2]=e;b=c[g+80>>2]|0;if(!b){c[a+60>>2]=0;b=999;break}else{g=c[b+16>>2]|0;c[a+60>>2]=c[g+12>>2];i=c[g+16>>2]|0;c[a+68>>2]=i;c[a+72>>2]=c[b+4>>2];c[d>>2]=e|c[i>>2];c[a+64>>2]=c[((h|0)==0?f:g)>>2];b=300;break}}else b=999;while(0);return b|0}function vO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(!(XB(a)|0))if((b|0)!=0?(d=c[b>>2]|0,(d|0)!=0):0){tb[d&127](a);a=0}else a=0;else a=1;return a|0}function wO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)tb[d&127](a);c[(c[a>>2]|0)+24>>2]=0;dC(a);return}function xO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;e=+h[b+504>>3];f=+h[b+512>>3];i=+h[b+352>>3];if(!(c[b+360>>2]|0)){g=+h[d>>3]+e;d=d+8|0;e=f}else g=-(f+ +h[d+8>>3]);f=+h[b+528>>3]*i*(+h[d>>3]+e);h[a>>3]=+h[b+520>>3]*i*g;h[a+8>>3]=f;return}function yO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;f=+h[a+504>>3];g=+h[a+512>>3];i=+h[a+352>>3];j=+h[a+520>>3]*i;i=+h[a+528>>3]*i;a:do if(!(c[a+360>>2]|0)){a=0;while(1){if((a|0)>=(e|0))break a;h[d+(a<<4)>>3]=(+h[b+(a<<4)>>3]+f)*j;h[d+(a<<4)+8>>3]=(+h[b+(a<<4)+8>>3]+g)*i;a=a+1|0}}else{a=0;while(1){if((a|0)>=(e|0))break a;k=-(j*(+h[b+(a<<4)+8>>3]+g));h[d+(a<<4)+8>>3]=(+h[b+(a<<4)>>3]+f)*i;h[d+(a<<4)>>3]=k;a=a+1|0}}while(0);return d|0}function zO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+8>>2]|0,d|0):0)tb[d&127](a);return}function AO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+12>>2]|0,d|0):0)tb[d&127](a);cC(a);return}function BO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+24>>2]|0,d|0):0)tb[d&127](a);return}function CO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+28>>2]|0,d|0):0)tb[d&127](a);return}function DO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+16>>2]|0,d|0):0){b=c[a+160>>2]|0;xb[d&31](a,c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0,b,c[a+156>>2]|0)}return}function EO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+20>>2]|0,d|0):0)tb[d&127](a);return}function FO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+32>>2]|0,d|0):0)tb[d&127](a);return}function GO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+36>>2]|0,d|0):0)tb[d&127](a);return}function HO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+40>>2]|0,d|0):0)tb[d&127](a);return}function IO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+44>>2]|0,d|0):0)tb[d&127](a);return}function JO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+48>>2]|0,d|0):0)tb[d&127](a);return}function KO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+52>>2]|0,d|0):0)tb[d&127](a);return}function LO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+56>>2]|0,d|0):0)tb[d&127](a);return}function MO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+60>>2]|0,d|0):0)tb[d&127](a);return}function NO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+64>>2]|0,d|0):0)tb[d&127](a);return}function OO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+68>>2]|0,d|0):0)tb[d&127](a);return}function PO(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+60>>2]|0;if(g|0?(h=c[g+72>>2]|0,h|0):0)yb[h&15](a,b,d,e,f);return}function QO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+76>>2]|0,d|0):0)tb[d&127](a);return}function RO(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if(d|0?(e=c[d+80>>2]|0,e|0):0)ub[e&63](a,b);return}function SO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+84>>2]|0,d|0):0)tb[d&127](a);return}function TO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;f=k+32|0;h=k;i=k+16|0;j=c[b+60>>2]|0;m=c[e>>2]|0;do if(m|0?a[m>>0]|0:0){m=c[b+16>>2]|0;if(m|0?(c[m+144>>2]|0)==0:0)break;if(!(c[b+152>>2]&8192)){c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];xO(i,b,f);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2]}else{c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2]}if(j|0?(g=c[j+88>>2]|0,g|0):0){c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];vb[g&127](b,f,e)}}while(0);l=k;return}function UO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+16|0;i=A$(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(VO(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)ub[e&63](b,g);if(h)a[i>>0]=58;return}function VO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;g=k+16|0;j=k+8|0;i=k;c[d>>2]=b;c[d+32>>2]=5;e=iQ(b)|0;f=c[a+16>>2]|0;if(!((f|0)!=0?(e2(e,f,c[a+20>>2]|0,4,100)|0)!=0:0))h=3;a:do if((h|0)==3){switch(jQ(b,d,c[a+24>>2]|0)|0){case 0:break a;case 1:break;default:{Pw(1,108020,g)|0;break a}}a=vH((W_(b)|0)+16|0)|0;c[i>>2]=b;Y0(a,107985,i)|0;if(AG(a)|0){c[j>>2]=b;Pw(0,107994,j)|0}D_(a)}while(0);l=k;return}function WO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+56|0;i=A$(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(VO(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)ub[e&63](b,g);if(h)a[i>>0]=58;return}function XO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;h=c[a+60>>2]|0;i=a+16|0;j=(c[i>>2]|0)+96|0;if(h|0?(VO(c[a+68>>2]|0,b,j),f=c[h+92>>2]|0,f|0):0)ub[f&63](a,j);j=c[i>>2]|0;c[j+136>>2]=d;g[j+140>>2]=e;return}function YO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m;j=c[b+60>>2]|0;b=c[b+16>>2]|0;c[b+160>>2]=d;a:do if((d|0)!=0&(j|0)!=0){j=b+144|0;i=b+152|0;g=b+148|0;b=d;b:while(1){f=b+4|0;b=c[b>>2]|0;if(!b)break a;c:do switch(a[b>>0]|0){case 115:{if(!(b$(b,108041)|0)){c[j>>2]=3;b=f;continue b}if(!(b$(b,108062)|0)){e=115;while(1){d=b+1|0;if(!(e<<24>>24))break;b=d;e=a[d>>0]|0}h[i>>3]=+b2(d);b=f;continue b}break}case 100:{if(!(b$(b,134245)|0)){c[j>>2]=1;b=f;continue b}if(!(b$(b,134238)|0)){c[j>>2]=2;b=f;continue b}break}case 105:{if(b$(b,131253)|0?b$(b,108047)|0:0)break c;c[j>>2]=0;b=f;continue b}case 98:{if(!(b$(b,108057)|0)){h[i>>3]=2.0;b=f;continue b}break}case 102:{if(!(b$(b,108075)|0)){c[g>>2]=1;b=f;continue b}break}case 117:{if(!(b$(b,108082)|0)){c[g>>2]=0;b=f;continue b}break}case 116:{if(!(b$(b,108091)|0)){b=f;continue b}break}default:{}}while(0);c[k>>2]=b;Pw(0,108099,k)|0;b=f}}while(0);l=m;return}function ZO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;d=c[a+60>>2]|0;if((d|0?(i=d+96|0,f=c[i>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){d=b+16|0;h[g>>3]=(+h[d>>3]+ +h[b>>3])*.5;h[g+8>>3]=(+h[b+24>>3]+ +h[b+8>>3])*.5;b=g+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];if(!(c[a+152>>2]&8192)){yO(a,g,g,2)|0;f=c[i>>2]|0}vb[f&127](a,g,e)}l=j;return}function _O(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o;f=c[a+60>>2]|0;if((f|0?(n=f+100|0,c[n>>2]|0):0)?(k=a+16|0,j=c[k>>2]|0,c[j+144>>2]|0):0){if(!(e&4)){f=e;g=0}else{f=e&-5;e=j+16|0;g=m;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=e;h=j+56|0;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=1}if(!(c[a+152>>2]&8192)){e=d+10|0;if((c[46593]|0)<(d|0)){c[46593]=e;e=xH(c[46594]|0,e<<4)|0;c[46594]=e}else e=c[46594]|0;yO(a,b,e,d)|0;xb[c[n>>2]&31](a,e,d,f)}else xb[c[n>>2]&31](a,b,d,f);if(g|0){g=(c[k>>2]|0)+16|0;h=m;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0))}}l=o;return}function $O(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+64|0;f=e;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];g=f+32|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[f+16>>3]=+h[f>>3];h[f+24>>3]=+h[f+40>>3];h[f+48>>3]=+h[g>>3];h[f+56>>3]=+h[f+8>>3];_O(a,f,4,d);l=e;return}function aP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=c[a+60>>2]|0;do if((i|0?(j=i+104|0,h=c[j>>2]|0,h|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){zb[h&15](a,b,d,e,f,g&255);break}h=d+10|0;if((c[46593]|0)<(d|0)){c[46593]=h;h=xH(c[46594]|0,h<<4)|0;c[46594]=h}else h=c[46594]|0;yO(a,b,h,d)|0;zb[c[j>>2]&15](a,h,d,e,f,g&255)}while(0);return}function bP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+60>>2]|0;do if((e|0?(g=e+108|0,f=c[g>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){vb[f&127](a,b,d);break}e=d+10|0;if((c[46593]|0)<(d|0)){c[46593]=e;e=xH(c[46594]|0,e<<4)|0;c[46594]=e}else e=c[46594]|0;yO(a,b,e,d)|0;vb[c[g>>2]&127](a,e,d)}while(0);return}function cP(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0?!((e|0)==0|(a[d>>0]|0)==0):0)?(f=c[e+112>>2]|0,f|0):0)ub[f&63](b,d);return}function dP(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+112|0;B=F+64|0;E=F;n=F+96|0;x=F+48|0;y=F+32|0;C=c[b+60>>2]|0;if(!b)qa(108200,108152,691,108163);if(!d)qa(108182,108152,692,108163);if(!(a[d>>0]|0))qa(108187,108152,693,108163);D=yC(d)|0;if(!D){if((C|0)!=0&(VJ(d)|0)!=0?(m=c[C+116>>2]|0,m|0):0)yb[m&15](b,d,e,f,g&255)}else{s=b+432|0;c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];BC(n,D,B);s=c[n>>2]|0;m=c[n+4>>2]|0;if(!((s|0)<1&(m|0)<1)){n=E+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];c[E>>2]=c[e>>2];c[E+4>>2]=c[e+4>>2];c[E+8>>2]=c[e+8>>2];c[E+12>>2]=c[e+12>>2];z=E+8|0;A=E+24|0;d=1;while(1){if((d|0)>=(f|0))break;G=e+(d<<4)|0;v=+h[G>>3];h[E>>3]=+h[(+h[E>>3]>3];w=+h[e+(d<<4)+8>>3];h[z>>3]=+h[(+h[z>>3]>3];h[n>>3]=+h[(+h[n>>3]>v?n:G)>>3];h[A>>3]=+h[(+h[A>>3]>w?n:G)+8>>3];d=d+1|0}k=+h[n>>3];j=+h[E>>3];t=k-j;u=+h[A>>3];v=+h[z>>3];w=u-v;o=+(m|0);p=+(s|0);q=t/p;r=w/o;a:do switch(eP(i)|0){case 1:if(q>3]=j;k=k-t;h[n>>3]=k}if(o>3]=v+w;h[A>>3]=u-w}if(!(c[b+152>>2]&8192)){c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];xO(x,b,B);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2];c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];xO(y,b,B);c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2];k=+h[n>>3];j=+h[E>>3]}if(j>k){h[E>>3]=k;h[n>>3]=j}j=+h[z>>3];k=+h[A>>3];if(j>k){h[z>>3]=k;h[A>>3]=j}if(C|0){G=c[b+72>>2]|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];c[B+16>>2]=c[E+16>>2];c[B+20>>2]=c[E+20>>2];c[B+24>>2]=c[E+24>>2];c[B+28>>2]=c[E+28>>2];gP(b,D,B,g,G)}}}l=F;return}function eP(b){b=b|0;if(a[b>>0]|0)if(O$(b,138034)|0)if(O$(b,137966)|0)if(!(O$(b,108195)|0))b=4;else b=(QL(b)|0)<<24>>24!=0&1;else b=3;else b=2;else b=0;return b|0}function fP(a,b){a=a|0;b=+b;if(c[a+60>>2]|0)h[(c[a+16>>2]|0)+152>>3]=b;return} +function SX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;e=e+h|0;b:while(1){h=f-e|0;if((h|0)<=0){f=-20;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=17;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=28;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=20;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=23;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,e)|0)){h=26;break b}else h=4;break}default:{h=29;break b}}e=e+h|0}if((h|0)==17){c[g>>2]=e;f=0;break}else if((h|0)==20){c[g>>2]=e;f=0;break}else if((h|0)==23){c[g>>2]=e;f=0;break}else if((h|0)==26){c[g>>2]=e;f=0;break}else if((h|0)==28){c[g>>2]=e;f=20;break}else if((h|0)==29){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function TX(){return 58116}function UX(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;c[g>>2]=d;h=c[b>>2]|0;a=f-(c[e>>2]|0)|0;if((d-h|0)>(a|0)){a=h+a|0;c[g>>2]=a;f=1}else{f=0;a=d}fX(h,g);h=c[g>>2]|0;d=c[b>>2]|0;g=h-d|0;F3(c[e>>2]|0,d|0,g|0)|0;c[b>>2]=(c[b>>2]|0)+g;c[e>>2]=(c[e>>2]|0)+g;l=i;return (f?2:h>>>0>>0&1)|0}function VX(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=d+72|0;k=f;l=h;m=c[e>>2]|0;n=c[g>>2]|0;a:while(1){d=m>>>0>>0;if(!(n>>>0>>0&d)){o=12;break}d=a[m>>0]|0;i=d&255;switch(a[j+i>>0]|0){case 5:{if((k-m|0)<2){d=1;break a}b[n>>1]=(d&31)<<6|a[m+1>>0]&63;m=m+2|0;n=n+2|0;continue a}case 6:{if((k-m|0)<3){d=1;break a}b[n>>1]=(a[m+1>>0]&63)<<6|i<<12|a[m+2>>0]&63;m=m+3|0;n=n+2|0;continue a}case 7:{if((l-n|0)<4){d=2;break a}if((k-m|0)<4){d=1;break a}i=((a[m+1>>0]&63)<<12|(d&7)<<18|(a[m+2>>0]&63)<<6|a[m+3>>0]&63)+-65536|0;b[n>>1]=i>>>10|55296;b[n+2>>1]=i&1023|56320;m=m+4|0;n=n+4|0;continue a}default:{b[n>>1]=d<<24>>24;m=m+1|0;n=n+2|0;continue a}}}if((o|0)==12)d=d?2:0;c[e>>2]=m;c[g>>2]=n;return d|0}function WX(a,b){a=a|0;b=b|0;a=d[b>>0]|0;b=d[b+1>>0]|0;return 1<<(b&31)&c[56836+(((d[140962+(a>>>2&7)>>0]|0)<<3|a<<1&6|b>>>5&1)<<2)>>2]|0}function XX(b,e){b=b|0;e=e|0;var f=0;f=d[e+1>>0]|0;b=d[e+2>>0]|0;return 1<<(b&31)&c[56836+(((d[140962+(f>>>2&15|a[e>>0]<<4&255)>>0]|0)<<3|f<<1&6|b>>>5&1)<<2)>>2]|0}function YX(a,b){a=a|0;b=b|0;return 0}function ZX(a,b){a=a|0;b=b|0;a=d[b>>0]|0;b=d[b+1>>0]|0;return 1<<(b&31)&c[56836+(((d[140706+(a>>>2&7)>>0]|0)<<3|a<<1&6|b>>>5&1)<<2)>>2]|0}function _X(b,e){b=b|0;e=e|0;var f=0;f=d[e+1>>0]|0;b=d[e+2>>0]|0;return 1<<(b&31)&c[56836+(((d[140706+(f>>>2&15|a[e>>0]<<4&255)>>0]|0)<<3|f<<1&6|b>>>5&1)<<2)>>2]|0}function $X(a,b){a=a|0;b=b|0;if((d[b>>0]|0)<194)return 1;else{b=d[b+1>>0]|0;return b>>>7^1|(b&192|0)==192|0}return 0}function aY(b,c){b=b|0;c=c|0;var d=0;b=a[c+2>>0]|0;do if(b<<24>>24>-1)b=1;else{d=a[c>>0]|0;if(d<<24>>24==-17?(a[c+1>>0]|0)==-65:0)if((b&255)>189){b=1;break}else{b=191;c=-65}else{if((b&255)>191){b=1;break}c=a[c+1>>0]|0;b=c&255;if(d<<24>>24==-32){b=(c&255)<160|(b&192|0)==192;break}}b=(b&128|0)==0?1:d<<24>>24==-19?(c&255)>159:(b&192|0)==192}while(0);return b&1|0}function bY(b,c){b=b|0;c=c|0;var e=0;e=d[c+3>>0]|0;do if(!((e&128|0)==0|(e&192|0)==192)?(e=d[c+2>>0]|0,!((e&128|0)==0|(e&192|0)==192)):0){e=a[c>>0]|0;b=a[c+1>>0]|0;c=b&255;if(e<<24>>24==-16){b=(b&255)<144|(c&192|0)==192;break}else{b=(c&128|0)==0?1:e<<24>>24==-12?(b&255)>143:(c&192|0)==192;break}}else b=1;while(0);return b&1|0}function cY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0>>0){i=e;m=f-i|0;k=(m&1|0)==0;m=m&-2;l=(m|0)==0;m=k|l?f:e+m|0;if(k|l^1){f=a[e+1>>0]|0;if(!(f<<24>>24)){h=a[e>>0]|0;j=h;h=d[b+72+(h&255)>>0]|0}else{h=a[e>>0]|0;j=h;h=sY(f,h)|0}do switch(h|0){case 12:{f=EY(12,b,e+2|0,m,g)|0;break a}case 13:{f=EY(13,b,e+2|0,m,g)|0;break a}case 2:{h=e+2|0;if((m-h|0)<=1){f=-1;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;switch(f|0){case 16:{f=FY(b,e+4|0,m,g)|0;break a}case 15:{f=AY(b,e+4|0,m,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;f=29;break a}default:{c[g>>2]=h;f=0;break a}}}case 9:{if((e+2|0)==(m|0)){c[g>>2]=m;f=-15;break a}else i=7;break}case 10:case 21:{i=7;break}case 30:{f=uY(b,e+2|0,m,g)|0;break a}case 35:{c[g>>2]=e+2;f=38;break a}case 20:{c[g>>2]=e+2;f=25;break a}case 4:{h=e+2|0;f=m-h|0;if((f|0)<=1){f=-26;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){if((f|0)<=3){f=-1;break a}if((a[e+5>>0]|0)==0?(a[e+4>>0]|0)==62:0){c[g>>2]=e+6;f=34;break a}}c[g>>2]=h;f=26;break a}case 31:{c[g>>2]=e+2;f=23;break a}case 32:{h=e+2|0;if((m-h|0)<=1){f=-24;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;switch(f|0){case 33:{c[g>>2]=e+4;f=36;break a}case 15:{c[g>>2]=e+4;f=35;break a}case 34:{c[g>>2]=e+4;f=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;f=24;break a}default:{c[g>>2]=h;f=0;break a}}}case 36:{c[g>>2]=e+2;f=21;break a}case 11:{c[g>>2]=e+2;f=17;break a}case 19:{f=GY(b,e+2|0,m,g)|0;break a}case 5:{if((m-i|0)<2){f=-2;break a}c[g>>2]=e;f=0;break a}case 6:{if((m-i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((m-i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 24:case 22:{f=18;i=61;break}case 23:case 27:case 26:case 25:{f=19;i=61;break}case 29:{i=f&255;h=j&255;f=h>>>5;h=1<<(h&31);if(!(h&c[56836+((f|d[140706+i>>0]<<3)<<2)>>2]))if(!(c[56836+((d[140962+i>>0]<<3|f)<<2)>>2]&h))i=64;else{f=19;i=61}else{f=18;i=61}break}default:i=64}while(0);if((i|0)==7){k=m;b=b+72|0;j=e;b:while(1){i=j;j=j+2|0;if((k-j|0)<=1){i=28;break}f=a[i+3>>0]|0;h=a[j>>0]|0;if(!(f<<24>>24))f=d[b+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 21:continue b;case 9:break;default:{i=27;break b}}if((i+4|0)==(m|0)){i=27;break}}if((i|0)==27){c[g>>2]=j;f=15;break}else if((i|0)==28){c[g>>2]=j;f=15;break}}else if((i|0)==61){l=b+72|0;h=e+2|0;c:while(1){e=f&255;d:while(1){k=m-h|0;if((k|0)<=1){i=104;break c}i=a[h+1>>0]|0;j=a[h>>0]|0;if(!(i<<24>>24))b=d[l+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 5:{i=73;break c}case 6:{i=74;break c}case 7:{i=76;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{i=78;break c}case 34:{i=94;break c}case 33:{i=97;break c}case 15:{i=100;break c}case 29:{k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){i=71;break c}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{k=h+2|0;switch(e&63){case 41:{f=19;h=k;continue c}case 18:break d;default:{h=k;continue d}}}default:{i=103;break c}}h=h+2|0}b=m-k|0;if((b|0)<=1){f=-1;break a}f=a[h+3>>0]|0;i=a[k>>0]|0;if(!(f<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(f,i)|0;switch(j|0){case 5:{i=89;break c}case 6:{i=90;break c}case 7:{i=92;break c}case 29:{e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(f&255)>>0]<<3)<<2)>>2])){i=87;break c}break}case 27:case 26:case 25:case 24:case 22:break;default:{f=19;h=k;continue c}}f=41;h=h+4|0}switch(i|0){case 71:{c[g>>2]=h;f=0;break a}case 73:{c[g>>2]=h;f=0;break a}case 74:{if((k|0)<3){f=-2;break a}c[g>>2]=h;f=0;break a}case 76:{if((k|0)<4){f=-2;break a}c[g>>2]=h;f=0;break a}case 78:{c[g>>2]=h;break a}case 87:{c[g>>2]=k;f=0;break a}case 89:{c[g>>2]=k;f=0;break a}case 90:{if((b|0)<3){f=-2;break a}c[g>>2]=k;f=0;break a}case 92:{if((b|0)<4){f=-2;break a}c[g>>2]=k;f=0;break a}case 94:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=32;break a}case 97:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=31;break a}case 100:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=30;break a}case 103:{c[g>>2]=h;f=0;break a}case 104:{f=0-f|0;break a}}}else if((i|0)==64){c[g>>2]=e;f=0;break}}else f=-1}else f=-4;while(0);return f|0}function dY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e+1>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e>>0]|0)>>0]|0;else f=sY(f,a[e>>0]|0)|0;do switch(f|0){case 2:{f=xY(b,e+2|0,i,g)|0;break a}case 3:{f=tY(b,e+2|0,i,g)|0;break a}case 9:{h=e+2|0;if((i-h|0)<=1){f=-3;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 4:{h=e+2|0;if((i-h|0)<=1){f=-5;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-5;break a}if((a[e+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=f;f=0;break a}else f=i}else f=i;break}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:{h=e+2|0;f=i}}while(0);j=b+72|0;b=h;b:while(1){e=f-b|0;if((e|0)<=1){h=52;break}h=a[b+1>>0]|0;i=a[b>>0]|0;if(!(h<<24>>24))h=d[j+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{h=50;break b}case 5:{b=b+2|0;continue b}case 6:{if((e|0)<3){h=38;break b}b=b+3|0;continue b}case 7:{if((e|0)<4){h=41;break b}b=b+4|0;continue b}case 4:{if((e|0)<=3){h=50;break b}h=b+2|0;if(a[b+3>>0]|0){b=h;continue b}if((a[h>>0]|0)!=93){b=h;continue b}if((e|0)<=5){h=50;break b}i=b+4|0;if(a[b+5>>0]|0){b=h;continue b}if((a[i>>0]|0)==62){h=49;break b}else{b=h;continue b}}default:{b=b+2|0;continue b}}}if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==41){c[g>>2]=b;f=6;break}else if((h|0)==49){c[g>>2]=i;f=0;break}else if((h|0)==50){c[g>>2]=b;f=6;break}else if((h|0)==52){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function eY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e+1>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e>>0]|0)>>0]|0;else f=sY(f,a[e>>0]|0)|0;switch(f|0){case 4:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-1;break a}if((a[e+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=e+6;f=40;break a}}break}case 9:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;i=f;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;i=f;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;i=f;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:h=e+2|0}j=b+72|0;b=h;b:while(1){e=i-b|0;if((e|0)<=1){h=40;break}f=a[b+1>>0]|0;h=a[b>>0]|0;if(!(f<<24>>24))f=d[j+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 4:{h=38;break b}case 6:{if((e|0)<3){h=35;break b}else f=3;break}case 7:{if((e|0)<4){h=37;break b}else f=4;break}default:f=2}b=b+f|0}if((h|0)==35){c[g>>2]=b;f=6;break}else if((h|0)==37){c[g>>2]=b;f=6;break}else if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==40){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function fY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f-e|0;k=(k&1|0)==0?f:e+(k&-2)|0;j=b+72|0;i=0;f=e;a:while(1){h=k-f|0;if((h|0)<=1){f=-1;break}b=a[f+1>>0]|0;e=a[f>>0]|0;if(!(b<<24>>24))b=d[j+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 8:case 1:case 0:{l=12;break a}case 5:{h=i;f=f+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}h=i;f=f+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}h=i;f=f+4|0;i=h;continue a}case 2:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[f+3>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=33){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[f+5>>0]|0){h=i;f=b;i=h;continue a}h=(a[b>>0]|0)==91;i=i+(h&1)|0;f=h?f+6|0:b;continue a}case 4:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[f+3>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=93){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[f+5>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=62){h=i;f=b;i=h;continue a}f=f+6|0;if(!i){l=26;break a}i=i+-1|0;continue a}default:{h=i;f=f+2|0;i=h;continue a}}}if((l|0)==12){c[g>>2]=f;f=0}else if((l|0)==26){c[g>>2]=f;f=42}return f|0}function gY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=30;break}h=a[j+1>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 2:{i=14;break a}case 10:{i=15;break a}case 9:{i=18;break a}case 21:{i=25;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=tY(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14){c[g>>2]=j;h=0;break}else if((i|0)==15)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==25)if((j|0)==(e|0)){c[g>>2]=e+2;h=39;break}else{c[g>>2]=j;h=6;break}else if((i|0)==30){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function hY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=29;break}h=a[j+1>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 30:{i=14;break a}case 10:{i=17;break a}case 9:{i=20;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=tY(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14)if((j|0)==(e|0)){h=uY(b,e+2|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=j;h=6;break}else if((i|0)==17)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==20){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==29){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function iY(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=7;break}if((f-b|0)<2){b=0;break}if(a[b+1>>0]|0){b=0;break}if((a[b>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+2|0}if((g|0)==7)b=(b|0)==(d|0)&1;return b|0}function jY(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=b+72|0;f=c;a:while(1){b=a[f+1>>0]|0;e=a[f>>0]|0;if(!(b<<24>>24))b=d[g+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 5:{b=2;break}case 6:{b=3;break}case 7:{b=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{b=2;break}default:break a}f=f+b|0}return f-c|0}function kY(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;a:while(1){b=a[c+1>>0]|0;e=a[c>>0]|0;if(!(b<<24>>24))b=d[f+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 21:case 9:case 10:break;default:break a}c=c+2|0}return c|0}function lY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+72|0;m=0;n=0;b=1;a:while(1){l=e+2|0;i=e+3|0;h=a[i>>0]|0;j=h<<24>>24==0;k=a[l>>0]|0;if(j)h=d[o+(k&255)>>0]|0;else h=sY(h,k)|0;do switch(h|0){case 5:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 6:{if(b|0){j=b;k=n;l=m;e=i;b=j;n=k;m=l;continue a}if((n|0)>=(f|0)){k=n;l=m;b=1;e=i;n=k;m=l;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;k=n;l=m;b=1;e=i;n=k;m=l;continue a}case 7:{if(!b)if((n|0)<(f|0)){c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;b=1}else b=1;k=n;l=m;e=e+4|0;n=k;m=l;continue a}case 24:case 22:case 29:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 12:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=12;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=12;b=2;e=l;n=k;continue a}if((m|0)!=12){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=12;n=n+1|0;b=0;e=l;continue a}case 13:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=13;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=13;b=2;e=l;n=k;continue a}if((m|0)!=13){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=13;n=n+1|0;b=0;e=l;continue a}case 3:{if((n|0)>=(f|0)){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}case 21:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}i=g+(n<<4)+12|0;if(!(a[i>>0]|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}do if(j&(l|0)!=(c[g+(n<<4)+4>>2]|0)&k<<24>>24==32){h=a[e+5>>0]|0;b=a[e+4>>0]|0;if(!(h<<24>>24)){if(b<<24>>24==32)break;b=d[o+(b&255)>>0]|0}else b=sY(h,b)|0;if((b|0)!=(m|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}}while(0);a[i>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 10:case 9:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 17:case 11:if((b|0)==2){j=n;k=m;b=2;e=l;n=j;m=k;continue a}else break a;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}while(0)}return n|0}function mY(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+4|0;a:do if((a[c+5>>0]|0)==0?(a[b>>0]|0)==120:0){c=c+6|0;b=0;while(1){b:while(1){if(!(a[c+1>>0]|0)){d=a[c>>0]|0;if(d<<24>>24==59){e=17;break a}d=d<<24>>24;switch(d|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=8;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=9;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=10;break b}default:{}}}c=c+2|0}if((e|0)==8){e=0;b=d+-48|b<<4}else if((e|0)==9){e=0;b=(b<<4)+-55+d|0}else if((e|0)==10){e=0;b=(b<<4)+-87+d|0}if((b|0)<1114112)c=c+2|0;else{b=-1;break}}}else{d=b;b=0;e=13}while(0);c:do if((e|0)==13)while(1){e=0;if(!(a[d+1>>0]|0)){c=a[d>>0]|0;if(c<<24>>24==59){e=17;break c}c=c<<24>>24}else c=-1;b=(b*10|0)+-48+c|0;if((b|0)>=1114112){b=-1;break}else{d=d+2|0;e=13}}while(0);if((e|0)==17)b=jX(b)|0;return b|0}function nY(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch((d-c|0)/2|0|0){case 2:{if((a[c+3>>0]|0)==0?(a[c+2>>0]|0)==116:0){if(!(a[c+1>>0]|0))b=a[c>>0]|0;else b=-1;b=(b|0)==108?60:(b|0)==103?62:0}else e=27;break}case 3:{if((((((a[c+1>>0]|0)==0?(a[c>>0]|0)==97:0)?(a[c+3>>0]|0)==0:0)?(a[c+2>>0]|0)==109:0)?(a[c+5>>0]|0)==0:0)?(a[c+4>>0]|0)==112:0)b=38;else e=27;break}case 4:{if(!(a[c+1>>0]|0))switch(a[c>>0]|0){case 113:{if(a[c+3>>0]|0){e=27;break a}if((a[c+2>>0]|0)!=117){e=27;break a}if(a[c+5>>0]|0){e=27;break a}if((a[c+4>>0]|0)!=111){e=27;break a}if(a[c+7>>0]|0){e=27;break a}if((a[c+6>>0]|0)==116){b=34;break a}else{e=27;break a}}case 97:{if(a[c+3>>0]|0){e=27;break a}if((a[c+2>>0]|0)!=112){e=27;break a}if(a[c+5>>0]|0){e=27;break a}if((a[c+4>>0]|0)!=111){e=27;break a}if(a[c+7>>0]|0){e=27;break a}if((a[c+6>>0]|0)==115){b=39;break a}else{e=27;break a}}default:{e=27;break a}}else e=27;break}default:e=27}while(0);if((e|0)==27)b=0;return b|0}function oY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=b+72|0;k=g+4|0;while(1){if((f-e|0)<=1)break;b=a[e+1>>0]|0;h=a[e>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;switch(b|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[k>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+2|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;i=e+2|0;if((f-i|0)>1){b=a[e+3>>0]|0;h=a[i>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;e=(b|0)==10?e+4|0:i}else e=i;c[k>>2]=-1;break}default:e=e+2|0}c[k>>2]=(c[k>>2]|0)+1}return}function pY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f+-2|0;i=b+72|0;f=e;a:while(1){h=f+2|0;if((j-h|0)<=1){f=1;break}f=a[f+3>>0]|0;b=f<<24>>24==0;e=a[h>>0]|0;if(b)f=d[i+(e&255)>>0]|0;else f=sY(f,e)|0;switch(f|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{f=h;continue a}case 21:if(b&e<<24>>24==9){k=12;break a}else{f=h;continue a}case 22:case 26:{if(!b){k=12;break a}if(e<<24>>24>=0){f=h;continue a}break}default:if(!b){k=12;break a}}switch(e<<24>>24|0){case 64:case 36:{f=h;break}default:{k=12;break a}}}if((k|0)==12){c[g>>2]=h;f=0}return f|0}function qY(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[e>>2]|0;k=j+(f-j&-2)|0;l=k;m=h;a:while(1){if(j>>>0>=k>>>0){b=0;break}i=a[j>>0]|0;b=a[j+1>>0]|0;f=b&255;switch(b<<24>>24){case 0:{if(i<<24>>24>-1){b=c[g>>2]|0;if((b|0)==(h|0)){b=2;break a}c[g>>2]=b+1;a[b>>0]=i;b=j}else n=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{n=7;break}case -37:case -38:case -39:case -40:{b=c[g>>2]|0;if((m-b|0)<4){b=2;break a}if((l-j|0)<4){b=1;break a}o=i&255;i=(f<<2&12|o>>>6)+1|0;c[g>>2]=b+1;a[b>>0]=i>>>2|240;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>2&15|i<<4&48|128;b=j+2|0;i=d[b>>0]|0;f=(o<<4&48|i>>>6|a[j+3>>0]<<2&12|128)&255;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=f;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=i&63|128;break}default:{b=c[g>>2]|0;if((m-b|0)<3){b=2;break a}c[g>>2]=b+1;a[b>>0]=f>>>4|224;o=i&255;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2&60|128;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}}if((n|0)==7){n=0;b=c[g>>2]|0;if((m-b|0)<2){b=2;break}o=i&255;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2|192;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}j=b+2|0}c[e>>2]=j;return b|0}function rY(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[f>>2]|0;l=g-j&-2;e=j+l|0;if((l|0)>(i-(c[h>>2]|0)|0)){k=e+-2|0;g=(a[k+1>>0]&-8)<<24>>24==-40;l=g&1;e=g?k:e}else l=0;g=j;while(1){j=g>>>0>>0;k=c[h>>2]|0;if(!(j&k>>>0>>0))break;j=((d[g+1>>0]|0)<<8|(d[g>>0]|0))&65535;c[h>>2]=k+2;b[k>>1]=j;k=(c[f>>2]|0)+2|0;c[f>>2]=k;g=k}return ((k|0)!=(i|0)|j^1?l:2)|0}function sY(a,b){a=a|0;b=b|0;var c=0;switch(a<<24>>24){case -37:case -38:case -39:case -40:{a=7;break}case -33:case -34:case -35:case -36:{a=8;break}case -1:{if((b&255)>253)a=0;else c=4;break}default:c=4}if((c|0)==4)a=29;return a|0}function tY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=f;j=l-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;b=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;b=0;break a}case 6:{if((j|0)<3){b=-2;break a}c[g>>2]=e;b=0;break a}case 7:{if((j|0)<4){b=-2;break a}c[g>>2]=e;b=0;break a}case 19:{b=vY(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;b=0;break a}}k=b+72|0;j=e;b:while(1){i=j+2|0;e=l-i|0;if((e|0)<=1){b=-1;break a}b=a[j+3>>0]|0;h=a[i>>0]|0;if(!(b<<24>>24))f=d[k+(h&255)>>0]|0;else f=sY(b,h)|0;switch(f|0){case 27:case 26:case 25:case 24:case 22:{j=i;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=h&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(b&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else j=i}if((h|0)==22){c[g>>2]=i;b=0;break}else if((h|0)==23){c[g>>2]=i;b=0;break}else if((h|0)==24){if((e|0)<3){b=-2;break}c[g>>2]=i;b=0;break}else if((h|0)==26){if((e|0)<4){b=-2;break}c[g>>2]=i;b=0;break}else if((h|0)==28){c[g>>2]=j+4;b=9;break}else if((h|0)==29){c[g>>2]=i;b=0;break}}else b=-1;while(0);return b|0}function uY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){k=b+2|0;e=f-k|0;if((e|0)<=1){f=-1;break a}h=a[b+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:{b=k;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else b=k}if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){c[g>>2]=k;f=0;break}else if((h|0)==24){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==26){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==28){c[g>>2]=b+4;f=28;break}else if((h|0)==29){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function vY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f;a:do if((k-e|0)>1){i=a[e+1>>0]|0;h=a[e>>0]|0;do if(!(i<<24>>24))if(h<<24>>24==120){h=wY(b,e+2|0,f,g)|0;break a}else{h=d[b+72+(h&255)>>0]|0;break}else h=sY(i,h)|0;while(0);if((h|0)!=25){c[g>>2]=e;h=0;break}j=b+72|0;b=e;b:while(1){i=b+2|0;if((k-i|0)<=1){h=-1;break a}h=a[b+3>>0]|0;f=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(f&255)>>0]|0;else h=sY(h,f)|0;switch(h|0){case 25:{b=i;break}case 18:{f=15;break b}default:{f=16;break b}}}if((f|0)==15){c[g>>2]=b+4;h=10;break}else if((f|0)==16){c[g>>2]=i;h=0;break}}else h=-1;while(0);return h|0}function wY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a:do if((f-e|0)>1){h=a[e+1>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e>>0]|0)>>0]|0;else h=sY(h,a[e>>0]|0)|0;if((h&-2|0)!=24){c[g>>2]=e;f=0;break}j=b+72|0;b:while(1){i=e+2|0;if((f-i|0)<=1){f=-1;break a}h=a[e+3>>0]|0;b=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 25:{e=i;break}case 18:{h=13;break b}default:{h=14;break b}}}if((h|0)==13){c[g>>2]=e+4;f=10;break}else if((h|0)==14){c[g>>2]=i;f=0;break}}else f=-1;while(0);return f|0}function xY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=f;j=o-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;h=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;h=0;break a}case 6:{if((j|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 7:{if((j|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 16:{i=e+2|0;if((o-i|0)<=1){h=-1;break a}h=a[e+3>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[i>>0]|0)>>0]|0;else h=sY(h,a[i>>0]|0)|0;switch(h|0){case 27:{h=yY(b,e+4|0,f,g)|0;break a}case 20:{h=zY(e+4|0,f,g)|0;break a}default:{c[g>>2]=i;h=0;break a}}}case 15:{h=AY(b,e+2|0,f,g)|0;break a}case 17:{h=BY(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}m=b+72|0;l=0;h=e+2|0;b:while(1){c:while(1){i=o-h|0;if((i|0)<=1){h=-1;break a}j=a[h+1>>0]|0;k=a[h>>0]|0;if(!(j<<24>>24))e=d[m+(k&255)>>0]|0;else e=sY(j,k)|0;switch(e|0){case 5:{n=34;break b}case 6:{n=35;break b}case 7:{n=37;break b}case 10:case 9:case 21:{n=55;break b}case 11:{n=69;break b}case 17:break b;case 23:break c;case 29:{e=k&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(j&255)>>0]<<3)<<2)>>2])){n=32;break b}break}case 27:case 26:case 25:case 24:case 22:break;default:{n=75;break b}}h=h+2|0}if(l|0){n=40;break}k=h+2|0;e=o-k|0;if((e|0)<=1){h=-1;break a}l=a[h+3>>0]|0;i=a[k>>0]|0;if(!(l<<24>>24))j=d[m+(i&255)>>0]|0;else j=sY(l,i)|0;switch(j|0){case 5:{n=49;break b}case 6:{n=50;break b}case 7:{n=52;break b}case 29:{e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140706+(l&255)>>0]<<3)<<2)>>2])){n=47;break b}break}case 24:case 22:break;default:{n=54;break b}}l=1;h=h+4|0}d:switch(n|0){case 32:{c[g>>2]=h;h=0;break a}case 34:{c[g>>2]=h;h=0;break a}case 35:{if((i|0)<3){h=-2;break a}c[g>>2]=h;h=0;break a}case 37:{if((i|0)<4){h=-2;break a}c[g>>2]=h;h=0;break a}case 40:{c[g>>2]=h;h=0;break a}case 47:{c[g>>2]=k;h=0;break a}case 49:{c[g>>2]=k;h=0;break a}case 50:{if((e|0)<3){h=-2;break a}c[g>>2]=k;h=0;break a}case 52:{if((e|0)<4){h=-2;break a}c[g>>2]=k;h=0;break a}case 54:{c[g>>2]=k;h=0;break a}case 55:{e:while(1){n=0;i=h+2|0;j=o-i|0;if((j|0)<=1){h=-1;break a}k=a[h+3>>0]|0;e=a[i>>0]|0;if(!(k<<24>>24))l=d[m+(e&255)>>0]|0;else l=sY(k,e)|0;switch(l|0){case 11:{h=i;n=69;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;n=55;break}case 29:{n=60;break e}case 24:case 22:break e;case 5:{n=63;break e}case 6:{n=64;break e}case 7:{n=66;break e}default:{n=68;break e}}}if((n|0)==60){o=e&255;if(!(1<<(o&31)&c[56836+((o>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=i;h=0;break a}}else if((n|0)==63){c[g>>2]=i;h=0;break a}else if((n|0)==64){if((j|0)<3){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==66){if((j|0)<4){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==68){c[g>>2]=i;h=0;break a}h=CY(b,h+4|0,f,g)|0;break a}case 75:{c[g>>2]=h;h=0;break a}}if((n|0)==69){c[g>>2]=h+2;h=2;break}i=h+2|0;if((o-i|0)>1){if((a[h+3>>0]|0)==0?(a[i>>0]|0)==62:0){c[g>>2]=h+4;h=4;break}c[g>>2]=i;h=0}else h=-1}else h=-1;while(0);return h|0}function yY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f;a:do if((j-e|0)>1){if((a[e+1>>0]|0)==0?(a[e>>0]|0)==45:0){i=b+72|0;h=e+2|0;b:while(1){e=j-h|0;if((e|0)<=1){f=-1;break a}f=a[h+1>>0]|0;b=a[h>>0]|0;if(!(f<<24>>24))f=d[i+(b&255)>>0]|0;else f=sY(f,b)|0;switch(f|0){case 8:case 1:case 0:{k=16;break b}case 5:{h=h+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}h=h+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}h=h+4|0;continue b}case 27:{f=h+2|0;if((j-f|0)<=1){f=-1;break a}if(a[h+3>>0]|0){h=f;continue b}if((a[f>>0]|0)==45)break b;else{h=f;continue b}}default:{h=h+2|0;continue b}}}if((k|0)==16){c[g>>2]=h;f=0;break}f=h+4|0;if((j-f|0)<=1){f=-1;break}if((a[h+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=h+6;f=13;break}c[g>>2]=f;f=0;break}c[g>>2]=e;f=0}else f=-1;while(0);return f|0}function zY(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>11){d=0;while(1){if((d|0)>=6){d=8;break}if(a[b+1>>0]|0){d=0;break}if((a[b>>0]|0)!=(a[141218+d>>0]|0)){d=0;break}d=d+1|0;b=b+2|0}c[e>>2]=b}else d=-1;return d|0}function AY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;j=o-e|0;a:do if((j|0)>1){f=a[e+1>>0]|0;if(!(f<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(f,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(f&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}m=b+72|0;k=e;b:while(1){f=k+2|0;h=o-f|0;if((h|0)<=1){f=-1;break a}i=a[k+3>>0]|0;j=a[f>>0]|0;if(!(i<<24>>24))b=d[m+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 27:case 26:case 25:case 24:case 22:{k=f;continue b}case 5:{n=22;break b}case 6:{n=23;break b}case 7:{n=25;break b}case 10:case 9:case 21:{n=27;break b}case 15:{n=46;break b}case 29:break;default:break b}k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){n=21;break}else k=f}if((n|0)==21){c[g>>2]=f;f=0;break}else if((n|0)==22){c[g>>2]=f;f=0;break}else if((n|0)==23){if((h|0)<3){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==25){if((h|0)<4){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==27){if(!(DY(e,f,p)|0)){c[g>>2]=f;f=0;break}j=k+4|0;c:while(1){i=o-j|0;if((i|0)<=1){f=-1;break a}f=a[j+1>>0]|0;h=a[j>>0]|0;if(!(f<<24>>24))f=d[m+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 8:case 1:case 0:{n=40;break c}case 5:{j=j+2|0;continue c}case 6:{if((i|0)<3){f=-2;break a}j=j+3|0;continue c}case 7:{if((i|0)<4){f=-2;break a}j=j+4|0;continue c}case 15:{f=j+2|0;if((o-f|0)<=1){f=-1;break a}if(a[j+3>>0]|0){j=f;continue c}if((a[f>>0]|0)==62){n=44;break c}else{j=f;continue c}}default:{j=j+2|0;continue c}}}if((n|0)==40){c[g>>2]=j;f=0;break}else if((n|0)==44){c[g>>2]=j+4;f=c[p>>2]|0;break}}else if((n|0)==46){if(!(DY(e,f,p)|0)){c[g>>2]=f;f=0;break}f=k+4|0;if((o-f|0)<=1){f=-1;break}if((a[k+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=k+6;f=c[p>>2]|0;break}}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function BY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){j=b+2|0;e=f-j|0;if((e|0)<=1){f=-1;break a}h=a[b+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))k=d[l+(i&255)>>0]|0;else k=sY(h,i)|0;switch(k|0){case 23:case 27:case 26:case 25:case 24:case 22:{b=j;continue b}case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 10:case 9:case 21:{h=27;break b}case 11:{h=34;break b}case 29:break;default:{h=35;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}else b=j}if((h|0)==21){c[g>>2]=j;f=0;break}else if((h|0)==22){c[g>>2]=j;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==27){c:while(1){k=j+2|0;if((f-k|0)<=1){f=-1;break a}h=a[j+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 21:{j=k;h=27;break}case 11:{h=32;break c}default:{h=33;break c}}}if((h|0)==32){c[g>>2]=j+4;f=5;break}else if((h|0)==33){c[g>>2]=k;f=0;break}}else if((h|0)==34){c[g>>2]=b+4;f=5;break}else if((h|0)==35){c[g>>2]=j;f=0;break}}else f=-1;while(0);return f|0}function CY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;c[q>>2]=e;r=f;o=b+72|0;h=0;a:while(1){b:while(1){m=r-e|0;if((m|0)<=1){e=-1;break a}i=a[e+1>>0]|0;j=a[e>>0]|0;if(!(i<<24>>24))k=d[o+(j&255)>>0]|0;else k=sY(i,j)|0;switch(k|0){case 5:{p=11;break a}case 6:{p=12;break a}case 7:{p=14;break a}case 23:{p=16;break b}case 10:case 9:case 21:{p=31;break b}case 14:{p=37;break b}case 29:{n=j&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){p=9;break a}break}case 27:case 26:case 25:case 24:case 22:break;default:{p=89;break a}}n=e+2|0;c[q>>2]=n;e=n}c:do if((p|0)==16){p=0;if(h|0){p=17;break a}h=e+2|0;c[q>>2]=h;i=h;j=r-i|0;if((j|0)<=1){e=-1;break a}k=a[e+3>>0]|0;m=a[h>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=25;break a}case 6:{p=26;break a}case 7:{p=28;break a}case 24:case 22:{h=1;break c}case 29:break;default:{p=30;break a}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=24;break a}else h=1}else if((p|0)==31)while(1){p=0;i=e+2|0;c[q>>2]=i;j=i;if((r-j|0)<=1){e=-1;break a}e=a[e+3>>0]|0;h=a[i>>0]|0;if(!(e<<24>>24))e=d[o+(h&255)>>0]|0;else e=sY(e,h)|0;switch(e|0){case 14:{e=i;p=37;break c}case 9:case 10:case 21:{e=i;p=31;break}default:{p=36;break a}}}while(0);d:do if((p|0)==37){while(1){p=0;j=e+2|0;c[q>>2]=j;k=j;if((r-k|0)<=1){e=-1;break a}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))m=d[o+(i&255)>>0]|0;else m=sY(h,i)|0;if((m|1|0)==13)break;switch(m|0){case 9:case 10:case 21:{e=j;p=37;break}default:{p=43;break a}}}e=e+4|0;c[q>>2]=e;e:while(1){j=r-e|0;if((j|0)<=1){e=-1;break a}h=a[e+1>>0]|0;i=a[e>>0]|0;if(!(h<<24>>24))h=d[o+(i&255)>>0]|0;else h=sY(h,i)|0;if((h|0)==(m|0))break;switch(h|0){case 8:case 1:case 0:{p=56;break a}case 2:{p=61;break a}case 5:{n=e+2|0;c[q>>2]=n;e=n;continue e}case 6:{if((j|0)<3){e=-2;break a}n=e+3|0;c[q>>2]=n;e=n;continue e}case 7:{if((j|0)<4){e=-2;break a}n=e+4|0;c[q>>2]=n;e=n;continue e}case 3:{e=tY(b,e+2|0,f,q)|0;if((e|0)<1){p=59;break a}e=c[q>>2]|0;continue e}default:{n=e+2|0;c[q>>2]=n;e=n;continue e}}}i=e+2|0;c[q>>2]=i;k=i;if((r-k|0)<=1){e=-1;break a}h=a[e+3>>0]|0;j=a[i>>0]|0;if(!(h<<24>>24))h=d[o+(j&255)>>0]|0;else h=sY(h,j)|0;switch(h|0){case 11:{p=81;break a}case 17:{p=82;break a}case 10:case 9:case 21:{e=i;break}default:{p=68;break a}}f:while(1){i=e+2|0;c[q>>2]=i;h=i;j=r-h|0;if((j|0)<=1){e=-1;break a}k=a[e+3>>0]|0;m=a[i>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=76;break a}case 6:{p=77;break a}case 7:{p=79;break a}case 11:{p=81;break a}case 17:{p=82;break a}case 24:case 22:{h=0;break d}case 10:case 9:case 21:{e=i;break}case 29:break f;default:{p=87;break a}}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=75;break a}else h=0}while(0);e=e+4|0;c[q>>2]=e}switch(p|0){case 9:{c[g>>2]=e;e=0;break}case 11:{c[g>>2]=e;e=0;break}case 12:{if((m|0)<3)e=-2;else{c[g>>2]=e;e=0}break}case 14:{if((m|0)<4)e=-2;else{c[g>>2]=e;e=0}break}case 17:{c[g>>2]=e;e=0;break}case 24:{c[g>>2]=h;e=0;break}case 25:{c[g>>2]=h;e=0;break}case 26:{if((j|0)<3)e=-2;else{c[g>>2]=h;e=0}break}case 28:{if((j|0)<4)e=-2;else{c[g>>2]=h;e=0}break}case 30:{c[g>>2]=i;e=0;break}case 36:{c[g>>2]=j;e=0;break}case 43:{c[g>>2]=k;e=0;break}case 56:{c[g>>2]=e;e=0;break}case 59:{if(!e){c[g>>2]=c[q>>2];e=0}break}case 61:{c[g>>2]=e;e=0;break}case 68:{c[g>>2]=k;e=0;break}case 75:{c[g>>2]=i;e=0;break}case 76:{c[g>>2]=i;e=0;break}case 77:{if((j|0)<3)e=-2;else{c[g>>2]=i;e=0}break}case 79:{if((j|0)<4)e=-2;else{c[g>>2]=i;e=0}break}case 81:{c[g>>2]=e+4;e=1;break}case 82:{h=i+2|0;c[q>>2]=h;e=h;if((r-e|0)>1){if((a[i+3>>0]|0)==0?(a[h>>0]|0)==62:0){c[g>>2]=i+4;e=3;break}c[g>>2]=e;e=0}else e=-1;break}case 87:{c[g>>2]=h;e=0;break}case 89:{c[g>>2]=e;e=0;break}}l=s;return e|0}function DY(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==6?(a[b+1>>0]|0)==0:0){switch(a[b>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}if(!(a[b+3>>0]|0)){switch(a[b+2>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}if(!(a[b+5>>0]|0)){switch(a[b+4>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1}else d=1}else d=1;while(0);return d|0}function EY(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;k=e+72|0;a:while(1){b:while(1){j=g-f|0;if((j|0)<=1){f=-1;break a}e=a[f+1>>0]|0;i=a[f>>0]|0;if(!(e<<24>>24))e=d[k+(i&255)>>0]|0;else e=sY(e,i)|0;switch(e|0){case 8:case 1:case 0:{l=10;break a}case 6:{l=9;break b}case 7:{l=19;break b}case 5:{f=f+2|0;continue b}case 13:case 12:{i=f+2|0;if((e|0)==(b|0)){l=12;break a}else{f=i;continue b}}default:{f=f+2|0;continue b}}}if((l|0)==9){l=0;if((j|0)<3){f=-2;break}else{f=f+3|0;continue}}else if((l|0)==19){l=0;if((j|0)<4){f=-2;break}else{f=f+4|0;continue}}}c:do if((l|0)==10){c[h>>2]=f;f=0}else if((l|0)==12)if((g-i|0)>1){c[h>>2]=i;g=a[f+3>>0]|0;f=a[i>>0]|0;if(!(g<<24>>24))f=d[k+(f&255)>>0]|0;else f=sY(g,f)|0;switch(f|0){case 20:case 30:case 11:case 10:case 9:case 21:{f=27;break c}default:{}}f=0}else f=-27;while(0);return f|0}function FY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;a:do if((k-e|0)>1){h=a[e+1>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e>>0]|0)>>0]|0;else h=sY(h,a[e>>0]|0)|0;switch(h|0){case 27:{h=yY(b,e+2|0,f,g)|0;break a}case 20:{c[g>>2]=e+2;h=33;break a}case 24:case 22:{j=b+72|0;b:while(1){i=e+2|0;f=k-i|0;if((f|0)<=1){h=-1;break a}h=a[e+3>>0]|0;b=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 22:{e=i;break}case 30:{l=15;break b}case 10:case 9:case 21:break b;default:{l=22;break b}}}if((l|0)==22){c[g>>2]=i;h=0;break a}c:do if((l|0)==15){if((f|0)<=3){h=-1;break a}b=a[e+5>>0]|0;h=a[e+4>>0]|0;if(!(b<<24>>24))h=d[j+(h&255)>>0]|0;else h=sY(b,h)|0;switch(h|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=i;h=0;break a}while(0);c[g>>2]=i;h=16;break a}default:{c[g>>2]=e;h=0;break a}}}else h=-1;while(0);return h|0}function GY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}b=b+72|0;k=e;b:while(1){h=k;k=k+2|0;e=f-k|0;if((e|0)<=1){f=-20;break a}h=a[h+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))j=d[b+(i&255)>>0]|0;else j=sY(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:continue b;case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=27;break b}case 29:break;default:{h=28;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}}if((h|0)==21){c[g>>2]=k;f=0;break}else if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==27){c[g>>2]=k;f=20;break}else if((h|0)==28){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function HY(b,d,e){b=b|0;d=d|0;e=e|0;e=IY(e)|0;if((e|0)==-1)e=0;else{a[b+69>>0]=e;c[b>>2]=67;c[b+4>>2]=68;c[b+48>>2]=31;c[b+72>>2]=d;c[d>>2]=b;e=1}return e|0}function IY(a){a=a|0;var b=0;a:do if(!a)b=6;else{b=0;while(1){if((b|0)>=6){b=-1;break a}if(qZ(a,c[59964+(b<<2)>>2]|0)|0)break a;b=b+1|0}}while(0);return b|0}function JY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(58844,a,0,b,c,d)|0}function KY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(58844,a,1,b,c,d)|0}function LY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;BX(58480,b,c,d);return}function MY(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;a:do if(f>>>0>>0){l=c[d+72>>2]|0;i=f+1|0;b:do if((i|0)==(g|0)){i=a[d+69>>0]|0;if(((i<<24>>24)+-3|0)>>>0<3){i=-1;break a}switch(a[f>>0]|0){case 60:case 0:{i=-1;break a}case -17:case -1:case -2:break;default:break b}if(!((e|0)==1&i<<24>>24==0)){i=-1;break a}}else{k=a[f>>0]|0;i=a[i>>0]|0;j=((k&255)<<8|i&255)&65535;c:do if(j<<16>>16<-2){if(j<<16>>16>=-257){switch(j<<16>>16){case -257:break;default:break c}if((e|0)==1&(a[d+69>>0]|0)==0)break b;c[h>>2]=f+2;c[l>>2]=c[b+16>>2];i=14;break a}switch(j<<16>>16){case -4165:break;default:break c}if((e|0)==1)switch(a[d+69>>0]|0){case 0:case 3:case 4:case 5:break b;default:{}}i=f+2|0;if((i|0)==(g|0)){i=-1;break a}if((a[i>>0]|0)!=-65)break b;c[h>>2]=f+3;c[l>>2]=c[b+8>>2];i=14;break a}else{if(j<<16>>16<15360){switch(j<<16>>16){case -2:break;default:break c}if((e|0)==1&(a[d+69>>0]|0)==0)break b;c[h>>2]=f+2;c[l>>2]=c[b+20>>2];i=14;break a}switch(j<<16>>16){case 15360:break;default:break c}i=a[d+69>>0]|0;if(i<<24>>24==4){if((e|0)==1)break b}else if((e|0)==1&i<<24>>24==3)break b;i=c[b+20>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}while(0);if(k<<24>>24){if((e|0)==1|i<<24>>24!=0)break;i=c[b+20>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}if((e|0)==1?(a[d+69>>0]|0)==5:0)break;i=c[b+16>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}while(0);i=c[b+(a[d+69>>0]<<2)>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0}else i=-4;while(0);return i|0}function NY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0>>0){i=e;m=f-i|0;k=(m&1|0)==0;m=m&-2;l=(m|0)==0;m=k|l?f:e+m|0;if(k|l^1){f=a[e>>0]|0;if(!(f<<24>>24)){h=a[e+1>>0]|0;j=h;h=d[b+72+(h&255)>>0]|0}else{h=a[e+1>>0]|0;j=h;h=sY(f,h)|0}do switch(h|0){case 12:{f=mZ(12,b,e+2|0,m,g)|0;break a}case 13:{f=mZ(13,b,e+2|0,m,g)|0;break a}case 2:{h=e+2|0;if((m-h|0)<=1){f=-1;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;switch(f|0){case 16:{f=nZ(b,e+4|0,m,g)|0;break a}case 15:{f=iZ(b,e+4|0,m,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;f=29;break a}default:{c[g>>2]=h;f=0;break a}}}case 9:{if((e+2|0)==(m|0)){c[g>>2]=m;f=-15;break a}else i=7;break}case 10:case 21:{i=7;break}case 30:{f=cZ(b,e+2|0,m,g)|0;break a}case 35:{c[g>>2]=e+2;f=38;break a}case 20:{c[g>>2]=e+2;f=25;break a}case 4:{h=e+2|0;f=m-h|0;if((f|0)<=1){f=-26;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){if((f|0)<=3){f=-1;break a}if((a[e+4>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=e+6;f=34;break a}}c[g>>2]=h;f=26;break a}case 31:{c[g>>2]=e+2;f=23;break a}case 32:{h=e+2|0;if((m-h|0)<=1){f=-24;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;switch(f|0){case 33:{c[g>>2]=e+4;f=36;break a}case 15:{c[g>>2]=e+4;f=35;break a}case 34:{c[g>>2]=e+4;f=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;f=24;break a}default:{c[g>>2]=h;f=0;break a}}}case 36:{c[g>>2]=e+2;f=21;break a}case 11:{c[g>>2]=e+2;f=17;break a}case 19:{f=oZ(b,e+2|0,m,g)|0;break a}case 5:{if((m-i|0)<2){f=-2;break a}c[g>>2]=e;f=0;break a}case 6:{if((m-i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((m-i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 24:case 22:{f=18;i=61;break}case 23:case 27:case 26:case 25:{f=19;i=61;break}case 29:{i=f&255;h=j&255;f=h>>>5;h=1<<(h&31);if(!(h&c[56836+((f|d[140706+i>>0]<<3)<<2)>>2]))if(!(c[56836+((d[140962+i>>0]<<3|f)<<2)>>2]&h))i=64;else{f=19;i=61}else{f=18;i=61}break}default:i=64}while(0);if((i|0)==7){k=m;b=b+72|0;j=e;b:while(1){i=j;j=j+2|0;if((k-j|0)<=1){i=28;break}f=a[j>>0]|0;h=a[i+3>>0]|0;if(!(f<<24>>24))f=d[b+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 21:continue b;case 9:break;default:{i=27;break b}}if((i+4|0)==(m|0)){i=27;break}}if((i|0)==27){c[g>>2]=j;f=15;break}else if((i|0)==28){c[g>>2]=j;f=15;break}}else if((i|0)==61){l=b+72|0;h=e+2|0;c:while(1){e=f&255;d:while(1){k=m-h|0;if((k|0)<=1){i=104;break c}i=a[h>>0]|0;j=a[h+1>>0]|0;if(!(i<<24>>24))b=d[l+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 5:{i=73;break c}case 6:{i=74;break c}case 7:{i=76;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{i=78;break c}case 34:{i=94;break c}case 33:{i=97;break c}case 15:{i=100;break c}case 29:{k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){i=71;break c}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{k=h+2|0;switch(e&63){case 41:{f=19;h=k;continue c}case 18:break d;default:{h=k;continue d}}}default:{i=103;break c}}h=h+2|0}b=m-k|0;if((b|0)<=1){f=-1;break a}f=a[k>>0]|0;i=a[h+3>>0]|0;if(!(f<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(f,i)|0;switch(j|0){case 5:{i=89;break c}case 6:{i=90;break c}case 7:{i=92;break c}case 29:{e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(f&255)>>0]<<3)<<2)>>2])){i=87;break c}break}case 27:case 26:case 25:case 24:case 22:break;default:{f=19;h=k;continue c}}f=41;h=h+4|0}switch(i|0){case 71:{c[g>>2]=h;f=0;break a}case 73:{c[g>>2]=h;f=0;break a}case 74:{if((k|0)<3){f=-2;break a}c[g>>2]=h;f=0;break a}case 76:{if((k|0)<4){f=-2;break a}c[g>>2]=h;f=0;break a}case 78:{c[g>>2]=h;break a}case 87:{c[g>>2]=k;f=0;break a}case 89:{c[g>>2]=k;f=0;break a}case 90:{if((b|0)<3){f=-2;break a}c[g>>2]=k;f=0;break a}case 92:{if((b|0)<4){f=-2;break a}c[g>>2]=k;f=0;break a}case 94:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=32;break a}case 97:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=31;break a}case 100:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=30;break a}case 103:{c[g>>2]=h;f=0;break a}case 104:{f=0-f|0;break a}}}else if((i|0)==64){c[g>>2]=e;f=0;break}}else f=-1}else f=-4;while(0);return f|0}function OY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+1>>0]|0)>>0]|0;else f=sY(f,a[e+1>>0]|0)|0;do switch(f|0){case 2:{f=fZ(b,e+2|0,i,g)|0;break a}case 3:{f=bZ(b,e+2|0,i,g)|0;break a}case 9:{h=e+2|0;if((i-h|0)<=1){f=-3;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 4:{h=e+2|0;if((i-h|0)<=1){f=-5;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-5;break a}if((a[f>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=f;f=0;break a}else f=i}else f=i;break}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:{h=e+2|0;f=i}}while(0);j=b+72|0;b=h;b:while(1){e=f-b|0;if((e|0)<=1){h=52;break}h=a[b>>0]|0;i=a[b+1>>0]|0;if(!(h<<24>>24))h=d[j+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{h=50;break b}case 5:{b=b+2|0;continue b}case 6:{if((e|0)<3){h=38;break b}b=b+3|0;continue b}case 7:{if((e|0)<4){h=41;break b}b=b+4|0;continue b}case 4:{if((e|0)<=3){h=50;break b}h=b+2|0;if(a[h>>0]|0){b=h;continue b}if((a[b+3>>0]|0)!=93){b=h;continue b}if((e|0)<=5){h=50;break b}i=b+4|0;if(a[i>>0]|0){b=h;continue b}if((a[b+5>>0]|0)==62){h=49;break b}else{b=h;continue b}}default:{b=b+2|0;continue b}}}if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==41){c[g>>2]=b;f=6;break}else if((h|0)==49){c[g>>2]=i;f=0;break}else if((h|0)==50){c[g>>2]=b;f=6;break}else if((h|0)==52){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function PY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+1>>0]|0)>>0]|0;else f=sY(f,a[e+1>>0]|0)|0;switch(f|0){case 4:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-1;break a}if((a[f>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=e+6;f=40;break a}}break}case 9:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;i=f;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;i=f;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;i=f;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:h=e+2|0}j=b+72|0;b=h;b:while(1){e=i-b|0;if((e|0)<=1){h=40;break}f=a[b>>0]|0;h=a[b+1>>0]|0;if(!(f<<24>>24))f=d[j+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 4:{h=38;break b}case 6:{if((e|0)<3){h=35;break b}else f=3;break}case 7:{if((e|0)<4){h=37;break b}else f=4;break}default:f=2}b=b+f|0}if((h|0)==35){c[g>>2]=b;f=6;break}else if((h|0)==37){c[g>>2]=b;f=6;break}else if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==40){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function QY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f-e|0;k=(k&1|0)==0?f:e+(k&-2)|0;j=b+72|0;i=0;f=e;a:while(1){h=k-f|0;if((h|0)<=1){f=-1;break}b=a[f>>0]|0;e=a[f+1>>0]|0;if(!(b<<24>>24))b=d[j+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 8:case 1:case 0:{l=12;break a}case 5:{h=i;f=f+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}h=i;f=f+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}h=i;f=f+4|0;i=h;continue a}case 2:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+3>>0]|0)!=33){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}h=(a[f+5>>0]|0)==91;i=i+(h&1)|0;f=h?f+6|0:b;continue a}case 4:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+3>>0]|0)!=93){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+5>>0]|0)!=62){h=i;f=b;i=h;continue a}f=f+6|0;if(!i){l=26;break a}i=i+-1|0;continue a}default:{h=i;f=f+2|0;i=h;continue a}}}if((l|0)==12){c[g>>2]=f;f=0}else if((l|0)==26){c[g>>2]=f;f=42}return f|0}function RY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=30;break}h=a[j>>0]|0;i=a[j+1>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 2:{i=14;break a}case 10:{i=15;break a}case 9:{i=18;break a}case 21:{i=25;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=bZ(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14){c[g>>2]=j;h=0;break}else if((i|0)==15)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==25)if((j|0)==(e|0)){c[g>>2]=e+2;h=39;break}else{c[g>>2]=j;h=6;break}else if((i|0)==30){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function SY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=29;break}h=a[j>>0]|0;i=a[j+1>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 30:{i=14;break a}case 10:{i=17;break a}case 9:{i=20;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=bZ(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14)if((j|0)==(e|0)){h=cZ(b,e+2|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=j;h=6;break}else if((i|0)==17)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==20){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==29){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function TY(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=7;break}if((f-b|0)<2){b=0;break}if(a[b>>0]|0){b=0;break}if((a[b+1>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+2|0}if((g|0)==7)b=(b|0)==(d|0)&1;return b|0}function UY(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=b+72|0;f=c;a:while(1){b=a[f>>0]|0;e=a[f+1>>0]|0;if(!(b<<24>>24))b=d[g+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 5:{b=2;break}case 6:{b=3;break}case 7:{b=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{b=2;break}default:break a}f=f+b|0}return f-c|0}function VY(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;a:while(1){b=a[c>>0]|0;e=a[c+1>>0]|0;if(!(b<<24>>24))b=d[f+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 21:case 9:case 10:break;default:break a}c=c+2|0}return c|0}function WY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+72|0;m=0;n=0;b=1;a:while(1){l=e+2|0;h=a[l>>0]|0;j=h<<24>>24==0;i=e+3|0;k=a[i>>0]|0;if(j)h=d[o+(k&255)>>0]|0;else h=sY(h,k)|0;do switch(h|0){case 5:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 6:{if(b|0){j=b;k=n;l=m;e=i;b=j;n=k;m=l;continue a}if((n|0)>=(f|0)){k=n;l=m;b=1;e=i;n=k;m=l;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;k=n;l=m;b=1;e=i;n=k;m=l;continue a}case 7:{if(!b)if((n|0)<(f|0)){c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;b=1}else b=1;k=n;l=m;e=e+4|0;n=k;m=l;continue a}case 24:case 22:case 29:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 12:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=12;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=12;b=2;e=l;n=k;continue a}if((m|0)!=12){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=12;n=n+1|0;b=0;e=l;continue a}case 13:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=13;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=13;b=2;e=l;n=k;continue a}if((m|0)!=13){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=13;n=n+1|0;b=0;e=l;continue a}case 3:{if((n|0)>=(f|0)){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}case 21:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}i=g+(n<<4)+12|0;if(!(a[i>>0]|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}do if(j&(l|0)!=(c[g+(n<<4)+4>>2]|0)&k<<24>>24==32){h=a[e+4>>0]|0;b=a[e+5>>0]|0;if(!(h<<24>>24)){if(b<<24>>24==32)break;b=d[o+(b&255)>>0]|0}else b=sY(h,b)|0;if((b|0)!=(m|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}}while(0);a[i>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 10:case 9:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 17:case 11:if((b|0)==2){j=n;k=m;b=2;e=l;n=j;m=k;continue a}else break a;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}while(0)}return n|0}function XY(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+4|0;a:do if(!(a[b>>0]|0))if((a[c+5>>0]|0)==120){c=c+6|0;b=0;while(1){b:while(1){if(!(a[c>>0]|0)){d=a[c+1>>0]|0;if(d<<24>>24==59){e=18;break a}d=d<<24>>24;switch(d|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=8;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=9;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=10;break b}default:{}}}c=c+2|0}if((e|0)==8)b=d+-48|b<<4;else if((e|0)==9)b=(b<<4)+-55+d|0;else if((e|0)==10)b=(b<<4)+-87+d|0;if((b|0)<1114112)c=c+2|0;else{b=-1;e=19;break}}}else{c=b;b=0;e=13}else{d=b;b=0;c=-1;e=16}while(0);while(1)if((e|0)==13){if(a[c>>0]|0){d=c;c=-1;e=16;continue}if((a[c+1>>0]|0)==59){e=18;continue}d=c;c=a[c+1>>0]|0;e=16;continue}else if((e|0)==16){b=(b*10|0)+-48+c|0;if((b|0)>=1114112){b=-1;e=19;continue}c=d+2|0;e=13;continue}else if((e|0)==18){b=jX(b)|0;e=19;continue}else if((e|0)==19)return b|0;return 0}function YY(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch((d-c|0)/2|0|0){case 2:{if((a[c+2>>0]|0)==0?(a[c+3>>0]|0)==116:0){if(!(a[c>>0]|0))b=a[c+1>>0]|0;else b=-1;b=(b|0)==108?60:(b|0)==103?62:0}else e=27;break}case 3:{if((((((a[c>>0]|0)==0?(a[c+1>>0]|0)==97:0)?(a[c+2>>0]|0)==0:0)?(a[c+3>>0]|0)==109:0)?(a[c+4>>0]|0)==0:0)?(a[c+5>>0]|0)==112:0)b=38;else e=27;break}case 4:{if(!(a[c>>0]|0))switch(a[c+1>>0]|0){case 113:{if(a[c+2>>0]|0){e=27;break a}if((a[c+3>>0]|0)!=117){e=27;break a}if(a[c+4>>0]|0){e=27;break a}if((a[c+5>>0]|0)!=111){e=27;break a}if(a[c+6>>0]|0){e=27;break a}if((a[c+7>>0]|0)==116){b=34;break a}else{e=27;break a}}case 97:{if(a[c+2>>0]|0){e=27;break a}if((a[c+3>>0]|0)!=112){e=27;break a}if(a[c+4>>0]|0){e=27;break a}if((a[c+5>>0]|0)!=111){e=27;break a}if(a[c+6>>0]|0){e=27;break a}if((a[c+7>>0]|0)==115){b=39;break a}else{e=27;break a}}default:{e=27;break a}}else e=27;break}default:e=27}while(0);if((e|0)==27)b=0;return b|0}function ZY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=b+72|0;k=g+4|0;while(1){if((f-e|0)<=1)break;b=a[e>>0]|0;h=a[e+1>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;switch(b|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[k>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+2|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;i=e+2|0;if((f-i|0)>1){b=a[i>>0]|0;h=a[e+3>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;e=(b|0)==10?e+4|0:i}else e=i;c[k>>2]=-1;break}default:e=e+2|0}c[k>>2]=(c[k>>2]|0)+1}return}function _Y(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f+-2|0;j=b+72|0;a:while(1){h=e+2|0;if((k-h|0)<=1){f=1;break}f=a[h>>0]|0;i=f<<24>>24==0;b=a[e+3>>0]|0;if(i)f=d[j+(b&255)>>0]|0;else f=sY(f,b)|0;switch(f|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{e=h;continue a}case 21:if(i&b<<24>>24==9){l=12;break a}else{e=h;continue a}case 22:case 26:{if(!i){l=12;break a}if(b<<24>>24>=0){e=h;continue a}break}default:if(!i){l=12;break a}}switch(b<<24>>24|0){case 64:case 36:{e=h;break}default:{l=12;break a}}}if((l|0)==12){c[g>>2]=h;f=0}return f|0}function $Y(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[e>>2]|0;k=j+(f-j&-2)|0;l=k;m=h;a:while(1){if(j>>>0>=k>>>0){b=0;break}i=a[j+1>>0]|0;b=a[j>>0]|0;f=b&255;switch(b<<24>>24){case 0:{if(i<<24>>24>-1){b=c[g>>2]|0;if((b|0)==(h|0)){b=2;break a}c[g>>2]=b+1;a[b>>0]=i;b=j}else n=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{n=7;break}case -37:case -38:case -39:case -40:{b=c[g>>2]|0;if((m-b|0)<4){b=2;break a}if((l-j|0)<4){b=1;break a}o=i&255;i=(f<<2&12|o>>>6)+1|0;c[g>>2]=b+1;a[b>>0]=i>>>2|240;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>2&15|i<<4&48|128;b=j+2|0;i=d[j+3>>0]|0;f=(o<<4&48|i>>>6|a[b>>0]<<2&12|128)&255;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=f;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=i&63|128;break}default:{b=c[g>>2]|0;if((m-b|0)<3){b=2;break a}c[g>>2]=b+1;a[b>>0]=f>>>4|224;o=i&255;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2&60|128;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}}if((n|0)==7){n=0;b=c[g>>2]|0;if((m-b|0)<2){b=2;break}o=i&255;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2|192;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}j=b+2|0}c[e>>2]=j;return b|0}function aZ(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[f>>2]|0;l=g-j&-2;e=j+l|0;if((l|0)>(i-(c[h>>2]|0)|0)){k=e+-2|0;g=(a[k>>0]&-8)<<24>>24==-40;l=g&1;e=g?k:e}else l=0;g=j;while(1){j=g>>>0>>0;k=c[h>>2]|0;if(!(j&k>>>0>>0))break;j=((d[g>>0]|0)<<8|(d[g+1>>0]|0))&65535;c[h>>2]=k+2;b[k>>1]=j;k=(c[f>>2]|0)+2|0;c[f>>2]=k;g=k}return ((k|0)!=(i|0)|j^1?l:2)|0}function bZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=f;j=l-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;b=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;b=0;break a}case 6:{if((j|0)<3){b=-2;break a}c[g>>2]=e;b=0;break a}case 7:{if((j|0)<4){b=-2;break a}c[g>>2]=e;b=0;break a}case 19:{b=dZ(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;b=0;break a}}k=b+72|0;j=e;b:while(1){i=j+2|0;e=l-i|0;if((e|0)<=1){b=-1;break a}b=a[i>>0]|0;f=a[j+3>>0]|0;if(!(b<<24>>24))h=d[k+(f&255)>>0]|0;else h=sY(b,f)|0;switch(h|0){case 27:case 26:case 25:case 24:case 22:{j=i;continue b}case 5:{f=23;break b}case 6:{f=24;break b}case 7:{f=26;break b}case 18:{f=28;break b}case 29:break;default:{f=29;break b}}e=f&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(b&255)>>0]|0)<<3)<<2)>>2])){f=22;break}else j=i}if((f|0)==22){c[g>>2]=i;b=0;break}else if((f|0)==23){c[g>>2]=i;b=0;break}else if((f|0)==24){if((e|0)<3){b=-2;break}c[g>>2]=i;b=0;break}else if((f|0)==26){if((e|0)<4){b=-2;break}c[g>>2]=i;b=0;break}else if((f|0)==28){c[g>>2]=j+4;b=9;break}else if((f|0)==29){c[g>>2]=i;b=0;break}}else b=-1;while(0);return b|0}function cZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){k=b+2|0;e=f-k|0;if((e|0)<=1){f=-1;break a}h=a[k>>0]|0;i=a[b+3>>0]|0;if(!(h<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:{b=k;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else b=k}if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){c[g>>2]=k;f=0;break}else if((h|0)==24){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==26){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==28){c[g>>2]=b+4;f=28;break}else if((h|0)==29){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function dZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f;a:do if((k-e|0)>1){i=a[e>>0]|0;h=a[e+1>>0]|0;do if(!(i<<24>>24))if(h<<24>>24==120){h=eZ(b,e+2|0,f,g)|0;break a}else{h=d[b+72+(h&255)>>0]|0;break}else h=sY(i,h)|0;while(0);if((h|0)!=25){c[g>>2]=e;h=0;break}j=b+72|0;b=e;b:while(1){i=b+2|0;if((k-i|0)<=1){h=-1;break a}h=a[i>>0]|0;f=a[b+3>>0]|0;if(!(h<<24>>24))h=d[j+(f&255)>>0]|0;else h=sY(h,f)|0;switch(h|0){case 25:{b=i;break}case 18:{f=15;break b}default:{f=16;break b}}}if((f|0)==15){c[g>>2]=b+4;h=10;break}else if((f|0)==16){c[g>>2]=i;h=0;break}}else h=-1;while(0);return h|0}function eZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a:do if((f-e|0)>1){h=a[e>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+1>>0]|0)>>0]|0;else h=sY(h,a[e+1>>0]|0)|0;if((h&-2|0)!=24){c[g>>2]=e;f=0;break}j=b+72|0;b:while(1){i=e+2|0;if((f-i|0)<=1){f=-1;break a}h=a[i>>0]|0;b=a[e+3>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 25:{e=i;break}case 18:{h=13;break b}default:{h=14;break b}}}if((h|0)==13){c[g>>2]=e+4;f=10;break}else if((h|0)==14){c[g>>2]=i;f=0;break}}else f=-1;while(0);return f|0}function fZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=f;j=o-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;h=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;h=0;break a}case 6:{if((j|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 7:{if((j|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 16:{i=e+2|0;if((o-i|0)<=1){h=-1;break a}h=a[i>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+3>>0]|0)>>0]|0;else h=sY(h,a[e+3>>0]|0)|0;switch(h|0){case 27:{h=gZ(b,e+4|0,f,g)|0;break a}case 20:{h=hZ(e+4|0,f,g)|0;break a}default:{c[g>>2]=i;h=0;break a}}}case 15:{h=iZ(b,e+2|0,f,g)|0;break a}case 17:{h=jZ(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}m=b+72|0;l=0;h=e+2|0;b:while(1){c:while(1){i=o-h|0;if((i|0)<=1){h=-1;break a}j=a[h>>0]|0;k=a[h+1>>0]|0;if(!(j<<24>>24))e=d[m+(k&255)>>0]|0;else e=sY(j,k)|0;switch(e|0){case 5:{n=34;break b}case 6:{n=35;break b}case 7:{n=37;break b}case 10:case 9:case 21:{n=55;break b}case 11:{n=69;break b}case 17:break b;case 23:break c;case 29:{e=k&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(j&255)>>0]<<3)<<2)>>2])){n=32;break b}break}case 27:case 26:case 25:case 24:case 22:break;default:{n=75;break b}}h=h+2|0}if(l|0){n=40;break}e=h+2|0;l=o-e|0;if((l|0)<=1){h=-1;break a}i=a[e>>0]|0;j=a[h+3>>0]|0;if(!(i<<24>>24))k=d[m+(j&255)>>0]|0;else k=sY(i,j)|0;switch(k|0){case 5:{n=49;break b}case 6:{n=50;break b}case 7:{n=52;break b}case 29:{l=j&255;if(!(1<<(l&31)&c[56836+((l>>>5|d[140706+(i&255)>>0]<<3)<<2)>>2])){n=47;break b}break}case 24:case 22:break;default:{n=54;break b}}l=1;h=h+4|0}d:switch(n|0){case 32:{c[g>>2]=h;h=0;break a}case 34:{c[g>>2]=h;h=0;break a}case 35:{if((i|0)<3){h=-2;break a}c[g>>2]=h;h=0;break a}case 37:{if((i|0)<4){h=-2;break a}c[g>>2]=h;h=0;break a}case 40:{c[g>>2]=h;h=0;break a}case 47:{c[g>>2]=e;h=0;break a}case 49:{c[g>>2]=e;h=0;break a}case 50:{if((l|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 52:{if((l|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 54:{c[g>>2]=e;h=0;break a}case 55:{e:while(1){n=0;i=h+2|0;j=o-i|0;if((j|0)<=1){h=-1;break a}k=a[i>>0]|0;e=a[h+3>>0]|0;if(!(k<<24>>24))l=d[m+(e&255)>>0]|0;else l=sY(k,e)|0;switch(l|0){case 11:{h=i;n=69;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;n=55;break}case 29:{n=60;break e}case 24:case 22:break e;case 5:{n=63;break e}case 6:{n=64;break e}case 7:{n=66;break e}default:{n=68;break e}}}if((n|0)==60){o=e&255;if(!(1<<(o&31)&c[56836+((o>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=i;h=0;break a}}else if((n|0)==63){c[g>>2]=i;h=0;break a}else if((n|0)==64){if((j|0)<3){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==66){if((j|0)<4){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==68){c[g>>2]=i;h=0;break a}h=kZ(b,h+4|0,f,g)|0;break a}case 75:{c[g>>2]=h;h=0;break a}}if((n|0)==69){c[g>>2]=h+2;h=2;break}i=h+2|0;if((o-i|0)>1){if((a[i>>0]|0)==0?(a[h+3>>0]|0)==62:0){c[g>>2]=h+4;h=4;break}c[g>>2]=i;h=0}else h=-1}else h=-1;while(0);return h|0}function gZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f;a:do if((j-e|0)>1){if((a[e>>0]|0)==0?(a[e+1>>0]|0)==45:0){i=b+72|0;h=e+2|0;b:while(1){e=j-h|0;if((e|0)<=1){f=-1;break a}f=a[h>>0]|0;b=a[h+1>>0]|0;if(!(f<<24>>24))f=d[i+(b&255)>>0]|0;else f=sY(f,b)|0;switch(f|0){case 8:case 1:case 0:{k=16;break b}case 5:{h=h+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}h=h+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}h=h+4|0;continue b}case 27:{f=h+2|0;if((j-f|0)<=1){f=-1;break a}if(a[f>>0]|0){h=f;continue b}if((a[h+3>>0]|0)==45)break b;else{h=f;continue b}}default:{h=h+2|0;continue b}}}if((k|0)==16){c[g>>2]=h;f=0;break}f=h+4|0;if((j-f|0)<=1){f=-1;break}if((a[f>>0]|0)==0?(a[h+5>>0]|0)==62:0){c[g>>2]=h+6;f=13;break}c[g>>2]=f;f=0;break}c[g>>2]=e;f=0}else f=-1;while(0);return f|0}function hZ(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>11){d=0;while(1){if((d|0)>=6){d=8;break}if(a[b>>0]|0){d=0;break}if((a[b+1>>0]|0)!=(a[141218+d>>0]|0)){d=0;break}d=d+1|0;b=b+2|0}c[e>>2]=b}else d=-1;return d|0}function iZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;i=o-e|0;a:do if((i|0)>1){j=a[e>>0]|0;if(!(j<<24>>24)){h=a[e+1>>0]|0;f=d[b+72+(h&255)>>0]|0}else{h=a[e+1>>0]|0;f=sY(j,h)|0}switch(f|0){case 29:{m=h&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(j&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}m=b+72|0;k=e;b:while(1){f=k+2|0;h=o-f|0;if((h|0)<=1){f=-1;break a}i=a[f>>0]|0;j=a[k+3>>0]|0;if(!(i<<24>>24))b=d[m+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 27:case 26:case 25:case 24:case 22:{k=f;continue b}case 5:{n=22;break b}case 6:{n=23;break b}case 7:{n=25;break b}case 10:case 9:case 21:{n=27;break b}case 15:{n=46;break b}case 29:break;default:break b}k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){n=21;break}else k=f}if((n|0)==21){c[g>>2]=f;f=0;break}else if((n|0)==22){c[g>>2]=f;f=0;break}else if((n|0)==23){if((h|0)<3){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==25){if((h|0)<4){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==27){if(!(lZ(e,f,p)|0)){c[g>>2]=f;f=0;break}j=k+4|0;c:while(1){i=o-j|0;if((i|0)<=1){f=-1;break a}f=a[j>>0]|0;h=a[j+1>>0]|0;if(!(f<<24>>24))f=d[m+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 8:case 1:case 0:{n=40;break c}case 5:{j=j+2|0;continue c}case 6:{if((i|0)<3){f=-2;break a}j=j+3|0;continue c}case 7:{if((i|0)<4){f=-2;break a}j=j+4|0;continue c}case 15:{f=j+2|0;if((o-f|0)<=1){f=-1;break a}if(a[f>>0]|0){j=f;continue c}if((a[j+3>>0]|0)==62){n=44;break c}else{j=f;continue c}}default:{j=j+2|0;continue c}}}if((n|0)==40){c[g>>2]=j;f=0;break}else if((n|0)==44){c[g>>2]=j+4;f=c[p>>2]|0;break}}else if((n|0)==46){if(!(lZ(e,f,p)|0)){c[g>>2]=f;f=0;break}f=k+4|0;if((o-f|0)<=1){f=-1;break}if((a[f>>0]|0)==0?(a[k+5>>0]|0)==62:0){c[g>>2]=k+6;f=c[p>>2]|0;break}}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function jZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){j=b+2|0;e=f-j|0;if((e|0)<=1){f=-1;break a}h=a[j>>0]|0;i=a[b+3>>0]|0;if(!(h<<24>>24))k=d[l+(i&255)>>0]|0;else k=sY(h,i)|0;switch(k|0){case 23:case 27:case 26:case 25:case 24:case 22:{b=j;continue b}case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 10:case 9:case 21:{h=27;break b}case 11:{h=34;break b}case 29:break;default:{h=35;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}else b=j}if((h|0)==21){c[g>>2]=j;f=0;break}else if((h|0)==22){c[g>>2]=j;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==27){c:while(1){k=j+2|0;if((f-k|0)<=1){f=-1;break a}h=a[k>>0]|0;i=a[j+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 21:{j=k;h=27;break}case 11:{h=32;break c}default:{h=33;break c}}}if((h|0)==32){c[g>>2]=j+4;f=5;break}else if((h|0)==33){c[g>>2]=k;f=0;break}}else if((h|0)==34){c[g>>2]=b+4;f=5;break}else if((h|0)==35){c[g>>2]=j;f=0;break}}else f=-1;while(0);return f|0}function kZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;c[q>>2]=e;r=f;o=b+72|0;h=0;a:while(1){b:while(1){m=r-e|0;if((m|0)<=1){e=-1;break a}i=a[e>>0]|0;j=a[e+1>>0]|0;if(!(i<<24>>24))k=d[o+(j&255)>>0]|0;else k=sY(i,j)|0;switch(k|0){case 5:{p=11;break a}case 6:{p=12;break a}case 7:{p=14;break a}case 23:{p=16;break b}case 10:case 9:case 21:{p=31;break b}case 14:{p=37;break b}case 29:{n=j&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){p=9;break a}break}case 27:case 26:case 25:case 24:case 22:break;default:{p=89;break a}}n=e+2|0;c[q>>2]=n;e=n}c:do if((p|0)==16){p=0;if(h|0){p=17;break a}h=e+2|0;c[q>>2]=h;i=h;j=r-i|0;if((j|0)<=1){e=-1;break a}k=a[h>>0]|0;m=a[e+3>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=25;break a}case 6:{p=26;break a}case 7:{p=28;break a}case 24:case 22:{h=1;break c}case 29:break;default:{p=30;break a}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=24;break a}else h=1}else if((p|0)==31)while(1){p=0;i=e+2|0;c[q>>2]=i;j=i;if((r-j|0)<=1){e=-1;break a}h=a[i>>0]|0;e=a[e+3>>0]|0;if(!(h<<24>>24))e=d[o+(e&255)>>0]|0;else e=sY(h,e)|0;switch(e|0){case 14:{e=i;p=37;break c}case 9:case 10:case 21:{e=i;p=31;break}default:{p=36;break a}}}while(0);d:do if((p|0)==37){while(1){p=0;j=e+2|0;c[q>>2]=j;k=j;if((r-k|0)<=1){e=-1;break a}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))m=d[o+(i&255)>>0]|0;else m=sY(h,i)|0;if((m|1|0)==13)break;switch(m|0){case 9:case 10:case 21:{e=j;p=37;break}default:{p=43;break a}}}e=e+4|0;c[q>>2]=e;e:while(1){j=r-e|0;if((j|0)<=1){e=-1;break a}h=a[e>>0]|0;i=a[e+1>>0]|0;if(!(h<<24>>24))h=d[o+(i&255)>>0]|0;else h=sY(h,i)|0;if((h|0)==(m|0))break;switch(h|0){case 8:case 1:case 0:{p=56;break a}case 2:{p=61;break a}case 5:{n=e+2|0;c[q>>2]=n;e=n;continue e}case 6:{if((j|0)<3){e=-2;break a}n=e+3|0;c[q>>2]=n;e=n;continue e}case 7:{if((j|0)<4){e=-2;break a}n=e+4|0;c[q>>2]=n;e=n;continue e}case 3:{e=bZ(b,e+2|0,f,q)|0;if((e|0)<1){p=59;break a}e=c[q>>2]|0;continue e}default:{n=e+2|0;c[q>>2]=n;e=n;continue e}}}i=e+2|0;c[q>>2]=i;k=i;if((r-k|0)<=1){e=-1;break a}h=a[i>>0]|0;j=a[e+3>>0]|0;if(!(h<<24>>24))h=d[o+(j&255)>>0]|0;else h=sY(h,j)|0;switch(h|0){case 11:{p=81;break a}case 17:{p=82;break a}case 10:case 9:case 21:{e=i;break}default:{p=68;break a}}f:while(1){i=e+2|0;c[q>>2]=i;h=i;j=r-h|0;if((j|0)<=1){e=-1;break a}k=a[i>>0]|0;m=a[e+3>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=76;break a}case 6:{p=77;break a}case 7:{p=79;break a}case 11:{p=81;break a}case 17:{p=82;break a}case 24:case 22:{h=0;break d}case 10:case 9:case 21:{e=i;break}case 29:break f;default:{p=87;break a}}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=75;break a}else h=0}while(0);e=e+4|0;c[q>>2]=e}switch(p|0){case 9:{c[g>>2]=e;e=0;break}case 11:{c[g>>2]=e;e=0;break}case 12:{if((m|0)<3)e=-2;else{c[g>>2]=e;e=0}break}case 14:{if((m|0)<4)e=-2;else{c[g>>2]=e;e=0}break}case 17:{c[g>>2]=e;e=0;break}case 24:{c[g>>2]=h;e=0;break}case 25:{c[g>>2]=h;e=0;break}case 26:{if((j|0)<3)e=-2;else{c[g>>2]=h;e=0}break}case 28:{if((j|0)<4)e=-2;else{c[g>>2]=h;e=0}break}case 30:{c[g>>2]=i;e=0;break}case 36:{c[g>>2]=j;e=0;break}case 43:{c[g>>2]=k;e=0;break}case 56:{c[g>>2]=e;e=0;break}case 59:{if(!e){c[g>>2]=c[q>>2];e=0}break}case 61:{c[g>>2]=e;e=0;break}case 68:{c[g>>2]=k;e=0;break}case 75:{c[g>>2]=i;e=0;break}case 76:{c[g>>2]=i;e=0;break}case 77:{if((j|0)<3)e=-2;else{c[g>>2]=i;e=0}break}case 79:{if((j|0)<4)e=-2;else{c[g>>2]=i;e=0}break}case 81:{c[g>>2]=e+4;e=1;break}case 82:{h=i+2|0;c[q>>2]=h;e=h;if((r-e|0)>1){if((a[h>>0]|0)==0?(a[i+3>>0]|0)==62:0){c[g>>2]=i+4;e=3;break}c[g>>2]=e;e=0}else e=-1;break}case 87:{c[g>>2]=h;e=0;break}case 89:{c[g>>2]=e;e=0;break}}l=s;return e|0}function lZ(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==6?(a[b>>0]|0)==0:0){switch(a[b+1>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}if(!(a[b+2>>0]|0)){switch(a[b+3>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}if(!(a[b+4>>0]|0)){switch(a[b+5>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1}else d=1}else d=1;while(0);return d|0}function mZ(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;k=e+72|0;a:while(1){b:while(1){j=g-f|0;if((j|0)<=1){f=-1;break a}e=a[f>>0]|0;i=a[f+1>>0]|0;if(!(e<<24>>24))i=d[k+(i&255)>>0]|0;else i=sY(e,i)|0;switch(i|0){case 8:case 1:case 0:{l=10;break a}case 6:{l=9;break b}case 7:{l=19;break b}case 5:{f=f+2|0;continue b}case 13:case 12:{e=f+2|0;if((i|0)==(b|0)){l=12;break a}else{f=e;continue b}}default:{f=f+2|0;continue b}}}if((l|0)==9){l=0;if((j|0)<3){f=-2;break}else{f=f+3|0;continue}}else if((l|0)==19){l=0;if((j|0)<4){f=-2;break}else{f=f+4|0;continue}}}c:do if((l|0)==10){c[h>>2]=f;f=0}else if((l|0)==12)if((g-e|0)>1){c[h>>2]=e;g=a[e>>0]|0;f=a[f+3>>0]|0;if(!(g<<24>>24))f=d[k+(f&255)>>0]|0;else f=sY(g,f)|0;switch(f|0){case 20:case 30:case 11:case 10:case 9:case 21:{f=27;break c}default:{}}f=0}else f=-27;while(0);return f|0}function nZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;a:do if((k-e|0)>1){h=a[e>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+1>>0]|0)>>0]|0;else h=sY(h,a[e+1>>0]|0)|0;switch(h|0){case 27:{h=gZ(b,e+2|0,f,g)|0;break a}case 20:{c[g>>2]=e+2;h=33;break a}case 24:case 22:{j=b+72|0;b:while(1){i=e+2|0;f=k-i|0;if((f|0)<=1){h=-1;break a}h=a[i>>0]|0;b=a[e+3>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 22:{e=i;break}case 30:{l=15;break b}case 10:case 9:case 21:break b;default:{l=22;break b}}}if((l|0)==22){c[g>>2]=i;h=0;break a}c:do if((l|0)==15){if((f|0)<=3){h=-1;break a}b=a[e+4>>0]|0;h=a[e+5>>0]|0;if(!(b<<24>>24))h=d[j+(h&255)>>0]|0;else h=sY(b,h)|0;switch(h|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=i;h=0;break a}while(0);c[g>>2]=i;h=16;break a}default:{c[g>>2]=e;h=0;break a}}}else h=-1;while(0);return h|0}function oZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}b=b+72|0;k=e;b:while(1){h=k;k=k+2|0;e=f-k|0;if((e|0)<=1){f=-20;break a}j=a[k>>0]|0;h=a[h+3>>0]|0;if(!(j<<24>>24))i=d[b+(h&255)>>0]|0;else i=sY(j,h)|0;switch(i|0){case 27:case 26:case 25:case 24:case 22:continue b;case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=27;break b}case 29:break;default:{h=28;break b}}e=h&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(j&255)>>0]|0)<<3)<<2)>>2])){h=21;break}}if((h|0)==21){c[g>>2]=k;f=0;break}else if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==27){c[g>>2]=k;f=20;break}else if((h|0)==28){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function pZ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;while(1){b=c[d>>2]|0;h=b>>>0>>0;i=c[f>>2]|0;if(!(h&i>>>0>>0))break;c[d>>2]=b+1;h=a[b>>0]|0;i=c[f>>2]|0;c[f>>2]=i+1;a[i>>0]=h}return ((i|0)!=(g|0)|h^1?0:2)|0}function qZ(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:while(1){f=a[b>>0]|0;g=a[c>>0]|0;f=(f+-97&255)<26?(f&255)+224&255:f;switch((f<<24>>24==((g+-97&255)<26?(g&255)+224&255:g)<<24>>24?(f<<24>>24==0?2:0):1)&3){case 0:{c=c+1|0;b=b+1|0;break}case 1:{e=3;break a}case 2:{d=1;break a}default:{e=5;break a}}}if((e|0)==3)d=0;return d|0}function rZ(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return tZ(36,a,b,c,d,e,f,g,h,i,j)|0}function sZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+144|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+127|0)|0;do if((c[i>>2]|0)==(e|0)){a[c[g>>2]>>0]=0;if(qZ(f,141233)|0?(c[b+64>>2]|0)==2:0)break;b=IY(f)|0;if((b|0)!=-1)b=c[58844+(b<<2)>>2]|0;else b=0}else b=0;while(0);l=h;return b|0}function tZ(a,b,d,e,f,g,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;t=v+8|0;q=v+12|0;o=v+4|0;p=v;c[q>>2]=0;c[o>>2]=0;c[p>>2]=0;u=d+64|0;s=c[u>>2]|0;r=e+(s*5|0)|0;c[t>>2]=r;s=f+(0-(s<<1))|0;r=(uZ(d,r,s,o,p,q,t)|0)!=0;n=c[o>>2]|0;e=n;a:do if(r&(n|0)!=0){r=d+24|0;f=c[p>>2]|0;do if(!(ob[c[r>>2]&127](d,n,f,141258)|0)){if(!b){c[g>>2]=e;e=0;break a}}else{if(h|0)c[h>>2]=c[q>>2];if(!i)e=c[t>>2]|0;else{e=c[t>>2]|0;c[i>>2]=e}if(!(uZ(d,e,s,o,p,q,t)|0)){c[g>>2]=c[t>>2];e=0;break a}f=c[o>>2]|0;if(f|0){e=f;n=f;f=c[p>>2]|0;break}if(!b){e=1;break a}c[g>>2]=c[t>>2];e=0;break a}while(0);if(ob[c[r>>2]&127](d,n,f,141266)|0){f=c[q>>2]|0;e=f;if((((vZ(d,f,s)|0)&-33)+-65|0)>>>0>=26){c[g>>2]=e;e=0;break}if(j|0)c[j>>2]=e;e=c[t>>2]|0;if(k|0)c[k>>2]=nb[a&63](d,f,e+(0-(c[u>>2]|0))|0)|0;if(!(uZ(d,e,s,o,p,q,t)|0)){c[g>>2]=c[t>>2];e=0;break}e=c[o>>2]|0;if(!e){e=1;break}n=e;f=c[p>>2]|0}if((b|0)!=0|(ob[c[r>>2]&127](d,n,f,141275)|0)==0){c[g>>2]=e;e=0;break}f=c[q>>2]|0;e=c[t>>2]|0;n=f;if(!(ob[c[r>>2]&127](d,f,e+(0-(c[u>>2]|0))|0,104631)|0)){if(!(ob[c[r>>2]&127](d,f,e+(0-(c[u>>2]|0))|0,104623)|0)){c[g>>2]=n;e=0;break}if(m)c[m>>2]=0}else if(m)c[m>>2]=1;while(1){if(!(wZ(vZ(d,e,s)|0)|0))break;e=e+(c[u>>2]|0)|0}c[t>>2]=e;if((e|0)==(s|0))e=1;else{c[g>>2]=e;e=0}}else{c[g>>2]=c[t>>2];e=0}while(0);l=v;return e|0}function uZ(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;a:do if((b|0)!=(d|0)){if(!(wZ(vZ(a,b,d)|0)|0)){c[h>>2]=b;b=0;break}j=a+64|0;do b=b+(c[j>>2]|0)|0;while((wZ(vZ(a,b,d)|0)|0)!=0);if((b|0)==(d|0)){c[e>>2]=0;b=1;break}c[e>>2]=b;b:while(1){i=vZ(a,b,d)|0;switch(i|0){case -1:{i=11;break b}case 61:{i=12;break b}default:{}}if(wZ(i)|0){i=14;break}b=b+(c[j>>2]|0)|0}if((i|0)==11){c[h>>2]=b;b=0;break}else if((i|0)==12)c[f>>2]=b;else if((i|0)==14){c[f>>2]=b;do{b=b+(c[j>>2]|0)|0;i=vZ(a,b,d)|0}while((wZ(i)|0)!=0);if((i|0)!=61){c[h>>2]=b;b=0;break}}if((b|0)==(c[e>>2]|0)){c[h>>2]=b;b=0;break}do{b=b+(c[j>>2]|0)|0;i=vZ(a,b,d)|0}while((wZ(i)|0)!=0);switch(i|0){case 34:case 39:break;default:{c[h>>2]=b;b=0;break a}}f=b+(c[j>>2]|0)|0;c[g>>2]=f;b=i<<24>>24;c:while(1){i=vZ(a,f,d)|0;if((i|0)==(b|0)){i=30;break}if((i+-48|0)>>>0>9&((i&-33)+-65|0)>>>0>25)switch(i|0){case 45:case 46:case 95:break;default:{i=28;break c}}f=f+(c[j>>2]|0)|0}if((i|0)==28){c[h>>2]=f;b=0;break}else if((i|0)==30){c[h>>2]=f+(c[j>>2]|0);b=1;break}}else{c[e>>2]=0;b=1}while(0);return b|0}function vZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+16|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+1|0)|0;l=h;return ((c[g>>2]|0)==(f|0)?-1:a[f>>0]|0)|0}function wZ(a){a=a|0;switch(a|0){case 9:case 10:case 13:case 32:{a=1;break}default:a=0}return a|0}function xZ(){return 59988}function yZ(b,d,e){b=b|0;d=d|0;e=e|0;e=IY(e)|0;if((e|0)==-1)e=0;else{a[b+69>>0]=e;c[b>>2]=69;c[b+4>>2]=70;c[b+48>>2]=31;c[b+72>>2]=d;c[d>>2]=b;e=1}return e|0}function zZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(60352,a,0,b,c,d)|0}function AZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(60352,a,1,b,c,d)|0}function BZ(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return tZ(37,a,b,c,d,e,f,g,h,i,j)|0}function CZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+144|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+127|0)|0;do if((c[i>>2]|0)==(e|0)){a[c[g>>2]>>0]=0;if(qZ(f,141233)|0?(c[b+64>>2]|0)==2:0)break;b=IY(f)|0;if((b|0)!=-1)b=c[60352+(b<<2)>>2]|0;else b=0}else b=0;while(0);l=h;return b|0}function DZ(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;b=iX(b,c,d,e)|0;if(b|0)a[b+72+58>>0]=23;return b|0}function EZ(a){a=a|0;c[a>>2]=15;c[a+16>>2]=1;c[a+12>>2]=0;c[a+20>>2]=0;return}function FZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{c[a>>2]=16;a=0;break}case 12:{c[a>>2]=16;a=1;break}case 11:{c[a>>2]=16;a=55;break}case 13:{c[a>>2]=16;a=56;break}case 14:{a=0;break}case 16:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,141286)|0))g=9;else{c[a>>2]=17;a=3}break}case 29:{c[a>>2]=18;a=2;break}default:g=9}if((g|0)==9)a=JZ(a,b)|0;return a|0}function GZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 14:case 15:{a=0;break}case 11:{a=55;break}case 13:{a=56;break}case 16:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,141286)|0))g=7;else{c[a>>2]=17;a=3}break}case 29:{c[a>>2]=18;a=2;break}default:g=7}if((g|0)==7)a=JZ(a,b)|0;return a|0}function HZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 41:case 18:{c[a>>2]=19;a=4;break}default:a=JZ(a,b)|0}return a|0}function IZ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function JZ(a,b){a=a|0;b=b|0;if((b|0)==28&(c[a+16>>2]|0)==0)a=59;else{c[a>>2]=18;a=-1}return a|0}function KZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=3;break}case 25:{c[a>>2]=20;a=7;break}case 17:{c[a>>2]=21;a=8;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=22;a=3;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=8;else{c[a>>2]=23;a=3}break}default:h=8}while(0);if((h|0)==8)a=JZ(a,b)|0;return a|0}function LZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do switch(b|0){case -4:case 15:{a=0;break}case 16:{g=f+24|0;h=f+64|0;if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141308)|0){c[a>>2]=24;a=11;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141315)|0){c[a>>2]=25;a=33;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141323)|0){c[a>>2]=26;a=39;break a}if(!(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141331)|0))i=14;else{c[a>>2]=27;a=17}break}case 11:{a=55;break}case 13:{a=56;break}case 28:{a=60;break}case 26:{c[a>>2]=28;a=3;break}default:i=14}while(0);if((i|0)==14)a=JZ(a,b)|0;return a|0}function MZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;f=b+-11|0;switch(f>>>1|f<<31|0){case 2:{a=0;break}case 0:{a=55;break}case 1:{a=56;break}case 9:{c[a>>2]=18;a=2;break}default:a=JZ(a,b)|0}return a|0}function NZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 27:{c[a>>2]=29;a=5;break}default:a=JZ(a,b)|0}return a|0}function OZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 27:{c[a>>2]=22;a=6;break}default:a=JZ(a,b)|0}return a|0}function PZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 25:{c[a>>2]=20;a=7;break}case 17:{c[a>>2]=21;a=8;break}default:a=JZ(a,b)|0}return a|0}function QZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 22:{c[a>>2]=30;a=11;break}case 18:{c[a>>2]=31;a=9;break}default:a=JZ(a,b)|0}return a|0}function RZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 41:case 18:{c[a>>2]=32;a=34;break}default:a=JZ(a,b)|0}return a|0}function SZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 41:case 18:{c[a>>2]=33;a=40;break}default:a=JZ(a,b)|0}return a|0}function TZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 18:{c[a>>2]=34;a=18;break}default:a=JZ(a,b)|0}return a|0}function UZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 17:{c[a>>2]=21;a=8;break}default:a=JZ(a,b)|0}return a|0}function VZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=17;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=35;a=17;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=6;else{c[a>>2]=36;a=17}break}default:h=6}while(0);if((h|0)==6)a=JZ(a,b)|0;return a|0}function WZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=37;c[a+8>>2]=17;a=19;break}default:a=JZ(a,b)|0}return a|0}function XZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=38;a=21;break}default:a=JZ(a,b)|0}return a|0}function YZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=37;c[a+8>>2]=17;a=19;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=20;break}default:a=JZ(a,b)|0}return a|0}function ZZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=c[a+8>>2]|0;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=c[a+8>>2]|0;break}default:a=JZ(a,b)|0}return a|0}function _Z(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 33:{c[a>>2]=40;d=0;break}case 34:{d=a+12|0;e=c[d>>2]|0;if(!e)g=7;else{c[d>>2]=e+-1;d=0}break}case 15:{d=0;break}case 26:{g=7;break}case -4:{if(!(c[a+12>>2]|0))d=0;else g=7;break}default:d=LZ(a,b,d,e,f)|0}if((g|0)==7)d=JZ(a,b)|0;return d|0}function $Z(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=0;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141340)|0){c[a>>2]=41;a=0;break a}if(!(ob[c[g>>2]&127](f,d,e,141348)|0))h=6;else{c[a>>2]=42;a=0}break}default:h=6}while(0);if((h|0)==6)a=JZ(a,b)|0;return a|0}function a_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=0;break}case 25:{c[a>>2]=39;a=a+12|0;c[a>>2]=(c[a>>2]|0)+1;a=0;break}default:a=JZ(a,b)|0}return a|0}function b_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=0;break}case 25:{c[a>>2]=39;a=58;break}default:a=JZ(a,b)|0}return a|0}function c_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=39;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141355)|0){c[a>>2]=37;c[a+8>>2]=39;a=42;break a}if(!(ob[c[g>>2]&127](f,d,e,141361)|0))h=7;else{c[a>>2]=37;c[a+8>>2]=39;a=41}break}case 23:{c[a>>2]=43;c[a+4>>2]=1;a=44;break}default:h=7}while(0);if((h|0)==7)a=JZ(a,b)|0;return a|0}function d_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{a=39;break}case 20:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]|0)|0,e,141365)|0))g=9;else{c[a>>2]=44;a=43}break}case 23:{c[a+4>>2]=2;c[a>>2]=45;a=44;break}case 41:case 18:{c[a>>2]=46;a=51;break}case 30:{c[a>>2]=46;a=53;break}case 31:{c[a>>2]=46;a=52;break}case 32:{c[a>>2]=46;a=54;break}default:g=9}if((g|0)==9)a=JZ(a,b)|0;return a|0}function e_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 24:{c[a>>2]=37;c[a+8>>2]=39;a=45;break}case 36:{c[a>>2]=37;c[a+8>>2]=39;a=46;break}case 21:{c[a>>2]=47;a=39;break}default:a=JZ(a,b)|0}return a|0}function f_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 23:{a=a+4|0;c[a>>2]=(c[a>>2]|0)+1;a=44;break}case 41:case 18:{c[a>>2]=46;a=51;break}case 30:{c[a>>2]=46;a=53;break}case 31:{c[a>>2]=46;a=52;break}case 32:{c[a>>2]=46;a=54;break}default:a=JZ(a,b)|0}return a|0}function g_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 24:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=45}else a=45;break}case 36:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=46}else a=46;break}case 35:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=47}else a=47;break}case 37:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=48}else a=48;break}case 38:{c[a>>2]=45;a=50;break}case 21:{c[a>>2]=45;a=49;break}default:a=JZ(a,b)|0}return a|0}function h_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 41:case 18:{c[a>>2]=48;a=51;break}default:a=JZ(a,b)|0}return a|0}function i_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 36:{c[a>>2]=37;c[a+8>>2]=39;a=46;break}case 21:{c[a>>2]=47;a=39;break}default:a=JZ(a,b)|0}return a|0}function j_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=33;break}case 41:case 18:{c[a>>2]=49;a=22;break}default:a=JZ(a,b)|0}return a|0}function k_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a:do switch(b|0){case 15:{g=33;break}case 18:{h=f+24|0;g=0;while(1){i=c[h>>2]|0;if((g|0)>=8)break;if(ob[i&127](f,d,e,c[62200+(g<<2)>>2]|0)|0){j=6;break}g=g+1|0}if((j|0)==6){c[a>>2]=50;g=g+23|0;break a}if(!(ob[i&127](f,d,e,141331)|0))j=10;else{c[a>>2]=51;g=33}break}case 23:{c[a>>2]=52;g=33;break}default:j=10}while(0);if((j|0)==10)g=JZ(a,b)|0;return g|0}function l_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do switch(b|0){case 15:{a=33;break}case 20:{g=f+24|0;h=f+64|0;if(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,141372)|0){c[a>>2]=32;a=35;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,141380)|0){c[a>>2]=32;a=36;break a}if(!(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,141389)|0))i=9;else{c[a>>2]=53;a=33}break}case 27:{c[a>>2]=32;a=37;break}default:i=9}while(0);if((i|0)==9)a=JZ(a,b)|0;return a|0}function m_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 23:{c[a>>2]=54;a=33;break}default:a=JZ(a,b)|0}return a|0}function n_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 41:case 18:case 19:{c[a>>2]=55;a=31;break}default:a=JZ(a,b)|0}return a|0}function o_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 24:{c[a>>2]=50;a=33;break}case 21:{c[a>>2]=52;a=33;break}default:a=JZ(a,b)|0}return a|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 18:{c[a>>2]=56;a=32;break}default:a=JZ(a,b)|0}return a|0}function q_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 24:{c[a>>2]=50;a=33;break}case 21:{c[a>>2]=54;a=33;break}default:a=JZ(a,b)|0}return a|0}function r_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 27:{c[a>>2]=32;a=38;break}default:a=JZ(a,b)|0}return a|0}function s_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 18:{c[a>>2]=57;a=10;break}default:a=JZ(a,b)|0}return a|0}function t_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=11;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=58;a=11;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=7;else{c[a>>2]=59;a=11}break}case 27:{c[a>>2]=37;c[a+8>>2]=11;a=12;break}default:h=7}while(0);if((h|0)==7)a=JZ(a,b)|0;return a|0}function u_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=60;a=13;break}default:a=JZ(a,b)|0}return a|0}function v_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=58;a=14;break}default:a=JZ(a,b)|0}return a|0}function w_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{a=11;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=15;break}case 18:{if(!(ob[c[f+24>>2]&127](f,d,e,141443)|0))g=5;else{c[a>>2]=61;a=11}break}default:g=5}if((g|0)==5)a=JZ(a,b)|0;return a|0}function x_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 18:{c[a>>2]=37;c[a+8>>2]=11;a=16;break}default:a=JZ(a,b)|0}return a|0}function y_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=11;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=62;a=11;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=7;else{c[a>>2]=63;a=11}break}case 27:{c[a>>2]=37;c[a+8>>2]=11;a=12;break}default:h=7}while(0);if((h|0)==7)a=JZ(a,b)|0;return a|0}function z_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=64;a=13;break}default:a=JZ(a,b)|0}return a|0}function A_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=62;a=14;break}default:a=JZ(a,b)|0}return a|0}function B_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=15;break}default:a=JZ(a,b)|0}return a|0}function C_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[46749]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=187036+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[46749]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[46751]|0;if(m>>>0>n>>>0){if(d|0){b=2<>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=187036+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[46754]|0;b=n>>>3;d=187036+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[46751]=h;c[46754]=f;w=i;l=x;return w|0}j=c[46750]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[187300+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=187300+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[46750]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[46754]|0;b=n>>>3;d=187036+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[46751]=h;c[46754]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[46750]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[187300+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[187300+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[46751]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|0}f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=187300+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=187300+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[46751]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[46754]|0;if(b>>>0>15){w=a+n|0;c[46754]=w;c[46751]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[46751]=0;c[46754]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[46752]|0;if(i>>>0>n>>>0){u=i-n|0;c[46752]=u;w=c[46755]|0;v=w+n|0;c[46755]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[46867]|0)){c[46869]=4096;c[46868]=4096;c[46870]=-1;c[46871]=-1;c[46872]=0;c[46860]=0;c[46867]=p&-16^1431655768;a=4096}else a=c[46869]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[46859]|0;if(a|0?(o=c[46857]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[46860]&4)){d=c[46755]|0;c:do if(d){e=187444;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=I3(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=I3(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[46868]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[46857]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[46859]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=I3(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[46869]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((I3(a|0)|0)==(-1|0)){I3(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[46860]=c[46860]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=I3(m|0)|0,s=I3(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[46857]|0)+h|0;c[46857]=b;if(b>>>0>(c[46858]|0)>>>0)c[46858]=b;j=c[46755]|0;do if(j){b=187444;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[46752]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[46755]=v;c[46752]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[46756]=c[46871];break}if(g>>>0<(c[46753]|0)>>>0)c[46753]=g;a=g+h|0;b=187444;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=187444;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[46754]|0)==(b|0)){w=(c[46751]|0)+i|0;c[46751]=w;c[46754]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[46749]=c[46749]&~(1<>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=187300+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[46750]=c[46750]&~(1<>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=187300+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[46750]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[46752]|0)+i|0;c[46752]=w;c[46755]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=187444;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0>>0?j:a;b=a+8|0;d=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[46755]=v;c[46752]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[46756]=c[46871];d=a+4|0;c[d>>2]=27;c[b>>2]=c[46861];c[b+4>>2]=c[46862];c[b+8>>2]=c[46863];c[b+12>>2]=c[46864];c[46861]=g;c[46862]=h;c[46864]=0;c[46863]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=187300+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[46750]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[46753]|0;if((w|0)==0|g>>>0>>0)c[46753]=g;c[46861]=g;c[46862]=h;c[46864]=0;c[46758]=c[46867];c[46757]=-1;c[46762]=187036;c[46761]=187036;c[46764]=187044;c[46763]=187044;c[46766]=187052;c[46765]=187052;c[46768]=187060;c[46767]=187060;c[46770]=187068;c[46769]=187068;c[46772]=187076;c[46771]=187076;c[46774]=187084;c[46773]=187084;c[46776]=187092;c[46775]=187092;c[46778]=187100;c[46777]=187100;c[46780]=187108;c[46779]=187108;c[46782]=187116;c[46781]=187116;c[46784]=187124;c[46783]=187124;c[46786]=187132;c[46785]=187132;c[46788]=187140;c[46787]=187140;c[46790]=187148;c[46789]=187148;c[46792]=187156;c[46791]=187156;c[46794]=187164;c[46793]=187164;c[46796]=187172;c[46795]=187172;c[46798]=187180;c[46797]=187180;c[46800]=187188;c[46799]=187188;c[46802]=187196;c[46801]=187196;c[46804]=187204;c[46803]=187204;c[46806]=187212;c[46805]=187212;c[46808]=187220;c[46807]=187220;c[46810]=187228;c[46809]=187228;c[46812]=187236;c[46811]=187236;c[46814]=187244;c[46813]=187244;c[46816]=187252;c[46815]=187252;c[46818]=187260;c[46817]=187260;c[46820]=187268;c[46819]=187268;c[46822]=187276;c[46821]=187276;c[46824]=187284;c[46823]=187284;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[46755]=v;c[46752]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[46756]=c[46871]}while(0);b=c[46752]|0;if(b>>>0>n>>>0){u=b-n|0;c[46752]=u;w=c[46755]|0;v=w+n|0;c[46755]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(O_()|0)>>2]=12;w=0;l=x;return w|0}function D_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[46753]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0>>0)return;if((c[46754]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[46751]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[46749]=c[46749]&~(1<>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=187300+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[46750]=c[46750]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[46755]|0)==(j|0)){j=(c[46752]|0)+b|0;c[46752]=j;c[46755]=i;c[i+4>>2]=j|1;if((i|0)!=(c[46754]|0))return;c[46754]=0;c[46751]=0;return}if((c[46754]|0)==(j|0)){j=(c[46751]|0)+b|0;c[46751]=j;c[46754]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[46749]=c[46749]&~(1<>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=187300+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[46750]=c[46750]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[46754]|0)){c[46751]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=187036+(a<<1<<2)|0;b=c[46749]|0;a=1<>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=187300+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[46750]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=d;c[i+24>>2]=0;break}}else{c[46750]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[46757]|0)+-1|0;c[46757]=j;if(!j)a=187452;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[46757]=-1;return}function E_(a,b){a=a|0;b=b|0;var d=0;if(a){d=O(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=C_(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;H3(a|0,0,d|0)|0;return a|0}function F_(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=C_(b)|0;return b|0}if(b>>>0>4294967231){c[(O_()|0)>>2]=12;b=0;return b|0}d=G_(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=C_(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;F3(d|0,a|0,(e>>>0>>0?e:b)|0)|0;D_(a);b=d;return b|0}function G_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[46869]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;H_(k,d);return a|0}if((c[46755]|0)==(i|0)){k=(c[46752]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[46755]=e;c[46752]=d;return a|0}if((c[46754]|0)==(i|0)){e=(c[46751]|0)+d|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[46751]=d;c[46754]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[46749]=c[46749]&~(1<>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=187300+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[46750]=c[46750]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=j|m&1|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;H_(i,k);return a|0}return 0}function H_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[46754]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[46751]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[46749]=c[46749]&~(1<>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=187300+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[46750]=c[46750]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[46755]|0)==(i|0)){i=(c[46752]|0)+b|0;c[46752]=i;c[46755]=h;c[h+4>>2]=i|1;if((h|0)!=(c[46754]|0))return;c[46754]=0;c[46751]=0;return}if((c[46754]|0)==(i|0)){i=(c[46751]|0)+b|0;c[46751]=i;c[46754]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[46749]=c[46749]&~(1<>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=187300+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[46750]=c[46750]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[46754]|0)){c[46751]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=187300+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[46750]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=d;c[h+24>>2]=0;return}}function I_(a,b){a=a|0;b=b|0;if(a>>>0<9){b=C_(b)|0;return b|0}else{b=J_(a,b)|0;return b|0}return 0}function J_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){d=16;while(1)if(d>>>0>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(O_()|0)>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=C_(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;H_(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;H_(f,i)}i=b+8|0;return i|0}function K_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P_(c[a+60>>2]|0)|0;a=N_(Ja(6,d|0)|0)|0;l=b;return a|0}function L_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=N_(ya(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function M_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((N_(xa(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function N_(a){a=a|0;if(a>>>0>4294963200){c[(O_()|0)>>2]=0-a;a=-1}return a|0}function O_(){return 187492}function P_(a){a=a|0;return a|0}function Q_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=18;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ia(54,f|0)|0):0)a[b+75>>0]=-1;f=R_(b,d,e)|0;l=g;return f|0}function R_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=N_(za(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=N_(za(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function S_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=N_(Ka(91,e|0)|0)|0;l=d;return b|0}function T_(){return}function U_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=l;l=l+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){c[(O_()|0)>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=N_(Aa(192,h|0)|0)|0}else{c[(O_()|0)>>2]=22;a=-1}while(0);l=i;return a|0}function V_(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(W_(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=O(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function W_(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function X_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+48|0;g=h+16|0;f=h;e=h+32|0;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=Ha(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0}i=N_(e)|0;l=h;return i|0}function Y_(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[141449+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=141537;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=141537;else{f=141537;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return Z_(f,c[e+20>>2]|0)|0}function Z_(a,b){a=a|0;b=b|0;return __(a,b)|0}function __(a,b){a=a|0;b=b|0;if(!b)b=0;else b=$_(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function $_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=a$(c[b+8>>2]|0,o)|0;f=a$(c[b+12>>2]|0,o)|0;g=a$(c[b+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=d-(h<<2)|0,f>>>0>>0&g>>>0>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=a$(c[b+(g<<2)>>2]|0,o)|0;g=a$(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=b$(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=a$(c[b+(f<<2)>>2]|0,o)|0;f=a$(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function a$(a,b){a=a|0;b=b|0;var c=0;c=C3(a|0)|0;return ((b|0)==0?a:c)|0}function b$(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function c$(a){a=a|0;return Y_(a,c[(d$()|0)+188>>2]|0)|0}function d$(){return e$()|0}function e$(){return 62872}function f$(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0.0,f=0.0;f=a*a;d=f*(f*f)*(f*1.58969099521155e-10+-2.5050760253406863e-08)+(f*(f*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);e=f*a;if(!c)a=e*(f*d+-.16666666666666632)+a;else a=a-(e*.16666666666666632+(f*(b*.5-e*d)-b));return +a}function g$(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;m=+h[j>>3]+-1.0;k=m*(m*.5);i=m/(m+2.0);l=i*i;g=l*l;h[j>>3]=m-k;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=m-a-k+i*(k+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));l=a*1.4426950407214463;k=+(e+(f>>>20)|0);i=l+k;a=i+(l+(k-i)+(g*1.4426950407214463+(g+a)*1.6751713164886512e-10))}return +a}function h$(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=z3(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+h$(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function i$(a,b){a=+a;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*.5;f=1.0-e;return +(f+(1.0-f-e+(c*(c*(c*(c*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+d*d*(c*(2.087572321298175e-09-c*1.1359647557788195e-11)+-2.7557314351390663e-07))-a*b)))}function j$(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;k=+h[j>>3]+-1.0;i=k*(k*.5);l=k/(k+2.0);m=l*l;g=m*m;h[j>>3]=k-i;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=k-a-i+l*(i+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=a*.4342944818781689;i=+(e+(f>>>20)|0);l=i*.30102999566361177;k=l+m;a=k+(m+(l-k)+(g*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function k$(a,b){a=+a;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+48|0;m=r+16|0;n=r;h[j>>3]=a;d=c[j>>2]|0;i=c[j+4>>2]|0;o=z3(d|0,i|0,63)|0;q=i&2147483647;do if(q>>>0<1074752123)if((i&1048575|0)!=598523){d=(o|0)!=0;if(q>>>0<1073928573)if(d){g=a+1.5707963267341256;k=g+6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+6.077100506506192e-11;d=-1;break}else{g=a+-1.5707963267341256;k=g+-6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+-6.077100506506192e-11;d=1;break}else if(d){g=a+3.1415926534682512;k=g+1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.2154201013012384e-10;d=-2;break}else{g=a+-3.1415926534682512;k=g+-1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.2154201013012384e-10;d=2;break}}else p=21;else{if(q>>>0<1075594812)if(q>>>0<1075183037){if((q|0)==1074977148){p=21;break}if(!o){g=a+-4.712388980202377;k=g+-1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.8231301519518578e-10;d=3;break}else{g=a+4.712388980202377;k=g+1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.8231301519518578e-10;d=-3;break}}else{if((q|0)==1075388923){p=21;break}if(!o){g=a+-6.2831853069365025;k=g+-2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+-2.430840202602477e-10;d=4;break}else{g=a+6.2831853069365025;k=g+2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+2.430840202602477e-10;d=-4;break}}if(q>>>0>=1094263291){if(q>>>0>2146435071){k=a-a;h[b+8>>3]=k;h[b>>3]=k;d=0;break}c[j>>2]=d;c[j+4>>2]=i&1048575|1096810496;a=+h[j>>3];d=0;do{k=+(~~a|0);h[m+(d<<3)>>3]=k;a=(a-k)*16777216.0;d=d+1|0}while((d|0)!=2);h[m+16>>3]=a;if(a==0.0){d=1;while(1)if(+h[m+(d<<3)>>3]==0.0)d=d+-1|0;else break}else d=2;d=l$(m,n,(q>>>20)+-1046|0,d+1|0,1)|0;a=+h[n>>3];if(!o){h[b>>3]=a;h[b+8>>3]=+h[n+8>>3];break}else{h[b>>3]=-a;h[b+8>>3]=-+h[n+8>>3];d=0-d|0;break}}else p=21}while(0);if((p|0)==21){g=a*.6366197723675814+6755399441055744.0+-6755399441055744.0;d=~~g;e=a-g*1.5707963267341256;f=g*6.077100506506192e-11;a=e-f;h[b>>3]=a;h[j>>3]=a;p=z3(c[j>>2]|0,c[j+4>>2]|0,52)|0;i=q>>>20;if((i-(p&2047)|0)>16){f=g*6.077100506303966e-11;k=e-f;f=g*2.0222662487959506e-21-(e-k-f);a=k-f;h[b>>3]=a;h[j>>3]=a;q=z3(c[j>>2]|0,c[j+4>>2]|0,52)|0;s=g*2.0222662487111665e-21;e=k-s;g=g*8.4784276603689e-32-(k-e-s);if((i-(q&2047)|0)>49){a=e-g;h[b>>3]=a;f=g}else e=k}h[b+8>>3]=e-a-f}l=r;return d|0}function l$(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+560|0;C=H+480|0;z=H+320|0;G=H+160|0;E=H;D=c[63116+(f<<2)>>2]|0;p=e+-1|0;y=(d+-3|0)/24|0;y=(y|0)>0?y:0;B=O(y,-24)|0;j=d+-24+B|0;if((D+p|0)>=0){n=D+e|0;k=y-p|0;m=0;while(1){if((k|0)<0)g=0.0;else g=+(c[63132+(k<<2)>>2]|0);h[z+(m<<3)>>3]=g;m=m+1|0;if((m|0)==(n|0))break;else k=k+1|0}}o=(e|0)>0;n=0;while(1){if(o){m=n+p|0;g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(D|0))n=n+1|0;else break}t=(j|0)>0;u=24-j|0;v=23-j|0;w=(e|0)>0;x=(j|0)==0;k=D;a:while(1){g=+h[E+(k<<3)>>3];o=(k|0)>0;if(o){m=k;n=0;while(1){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(n<<2)>>2]=~~(g-i*16777216.0);s=m;m=m+-1|0;g=+h[E+(m<<3)>>3]+i;if((s|0)<=1)break;else n=n+1|0}}g=+m$(g,j);g=g-+A(+(g*.125))*8.0;m=~~g;g=g-+(m|0);do if(!t)if(!x)if(!(g>=.5)){p=0;s=m;break}else{n=2;F=20;break}else{n=c[C+(k+-1<<2)>>2]>>23;F=19;break}else{s=C+(k+-1<<2)|0;n=c[s>>2]|0;F=n>>u;n=n-(F<>2]=n;n=n>>v;m=F+m|0;F=19}while(0);if((F|0)==19){F=0;if((n|0)>0)F=20;else{p=n;s=m}}if((F|0)==20){F=0;s=m+1|0;if(o){m=0;r=0;do{p=C+(r<<2)|0;q=c[p>>2]|0;if(!m)if(!q)m=0;else{m=1;o=16777216;F=23}else{o=16777215;F=23}if((F|0)==23){F=0;c[p>>2]=o-q}r=r+1|0}while((r|0)!=(k|0))}else m=0;b:do if(t){switch(j|0){case 1:{o=8388607;break}case 2:{o=4194303;break}default:break b}r=C+(k+-1<<2)|0;c[r>>2]=c[r>>2]&o}while(0);if((n|0)==2){g=1.0-g;if(!m)p=2;else{p=2;g=g-+m$(1.0,j)}}else p=n}if(!(g==0.0)){F=42;break}if((k|0)>(D|0)){m=0;n=k;do{n=n+-1|0;m=c[C+(n<<2)>>2]|m}while((n|0)>(D|0));if(m){F=41;break}else m=1}else m=1;while(1)if(!(c[C+(D-m<<2)>>2]|0))m=m+1|0;else break;o=m+k|0;if((m|0)<=0){k=o;continue}while(1){n=k+1|0;m=k+e|0;h[z+(m<<3)>>3]=+(c[63132+(n+y<<2)>>2]|0);if(w){g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(o|0))k=n;else{k=o;continue a}}}if((F|0)==41)while(1){F=0;j=j+-24|0;k=k+-1|0;if(!(c[C+(k<<2)>>2]|0))F=41;else{o=k;break}}else if((F|0)==42){g=+m$(g,0-j|0);if(g>=16777216.0){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(k<<2)>>2]=~~(g-i*16777216.0);j=B+d|0;k=k+1|0;g=i}c[C+(k<<2)>>2]=~~g;o=k}g=+m$(1.0,j);n=(o|0)>-1;if(n){j=o;while(1){h[E+(j<<3)>>3]=g*+(c[C+(j<<2)>>2]|0);if((j|0)>0){g=g*5.9604644775390625e-08;j=j+-1|0}else break}if(n){k=o;while(1){m=o-k|0;j=0;g=0.0;while(1){g=g+ +h[10904+(j<<3)>>3]*+h[E+(j+k<<3)>>3];if((j|0)>=(D|0)|(j|0)>=(m|0))break;else j=j+1|0}h[G+(m<<3)>>3]=g;if((k|0)>0)k=k+-1|0;else break}}}switch(f|0){case 0:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;i=(p|0)==0?g:-g;F=72;break}case 2:case 1:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;k=(p|0)==0;h[b>>3]=k?g:-g;g=+h[G>>3]-g;if((o|0)>=1){j=1;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)==(o|0))break;else j=j+1|0}}i=k?g:-g;b=b+8|0;F=72;break}case 3:{if((o|0)>0){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;i=+h[E>>3];I=g;g=i+g;h[G+(F<<3)>>3]=I+(i-g);h[E>>3]=g}while((F|0)>1);k=(o|0)>1;if(k){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;I=+h[E>>3];i=g;g=I+g;h[G+(F<<3)>>3]=i+(I-g);h[E>>3]=g}while((F|0)>2);if(k){j=o;i=0.0;while(1){i=i+ +h[G+(j<<3)>>3];if((j|0)>2)j=j+-1|0;else break}}else i=0.0}else i=0.0}else i=0.0;g=+h[G>>3];if(!p){h[b>>3]=g;g=+h[G+8>>3]}else{h[b>>3]=-g;i=-i;g=-+h[G+8>>3]}h[b+8>>3]=g;b=b+16|0;F=72;break}default:{}}if((F|0)==72)h[b>>3]=i;l=H;return s&7|0}function m$(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=A3(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function n$(a){a=+a;var b=0,d=0,e=0,f=0.0,g=0.0;h[j>>3]=a;d=c[j+4>>2]|0;b=d&2147483647;do if(b>>>0>2146435071)a=a+a;else{if(b>>>0<1048576){h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;b=d&2147483647;if(!b)break;else e=696219795}else e=715094163;c[j>>2]=0;c[j+4>>2]=((b>>>0)/3|0)+e|d&-2147483648;f=+h[j>>3];g=f*f*(f/a);h[j>>3]=(g*(g*g)*(g*.14599619288661245+-.758397934778766)+(g*(g*1.6214297201053545+-1.8849797954337717)+1.87595182427177))*f;d=s3(c[j>>2]|0,c[j+4>>2]|0,-2147483648,0)|0;e=z;c[j>>2]=d&-1073741824;c[j+4>>2]=e;f=+h[j>>3];a=a/(f*f);a=(a-f)/(f+f+a)*f+f}while(0);return +a}function o$(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function p$(a,b){a=+a;b=+b;return +(+o$(a,b))}function q$(a,b){a=+a;b=b|0;return +(+m$(a,b))}function r$(a,b){a=+a;b=+b;return +(+s$(a,b))}function s$(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=z3(i|0,l|0,52)|0;e=e&2047;m=z3(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=A3(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=t$(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=A3(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=A3(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=A3(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=A3(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=A3(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=A3(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=A3(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=t3(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=A3(f|0,d|0,1)|0;g=z;e=e+-1|0;f=t3(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=A3(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=s3(f|0,d|0,0,-1048576)|0;d=z;e=A3(e|0,0,52)|0;d=d|z;e=o|e}else{e=z3(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function t$(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function u$(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,g=0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+32|0;m=q+24|0;n=q+16|0;o=q+8|0;p=q;h[j>>3]=a;t=c[j>>2]|0;g=c[j+4>>2]|0;h[j>>3]=b;e=c[j>>2]|0;g=g&2147483647;f=c[j+4>>2]&2147483647;i=g>>>0>>0|(g|0)==(f|0)&t>>>0>>0;s=i?e:t;r=i?f:g;e=i?t:e;f=i?g:f;g=z3(s|0,r|0,52)|0;i=z3(e|0,f|0,52)|0;c[j>>2]=s;c[j+4>>2]=r;a=+h[j>>3];c[j>>2]=e;c[j+4>>2]=f;k=+h[j>>3];do if((i|0)!=2047){if(!((e|0)==0&(f|0)==0|(g|0)==2047)){if((g-i|0)>64){a=a+k;break}if((g|0)>1533){d=5260135901548373507240989.0e186;b=a*1.90109156629516e-211;a=k*1.90109156629516e-211}else{t=(i|0)<573;d=t?1.90109156629516e-211:1.0;b=t?a*5260135901548373507240989.0e186:a;a=t?k*5260135901548373507240989.0e186:k}v$(m,n,b);v$(o,p,a);a=d*+C(+(+h[p>>3]+ +h[n>>3]+ +h[o>>3]+ +h[m>>3]))}}else a=k;while(0);l=q;return +a}function v$(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=c*134217729.0;e=e+(c-e);d=c-e;c=c*c;h[a>>3]=c;h[b>>3]=d*d+(e*e-c+e*2.0*d);return}function w$(a,b,d){a=+a;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,k=0,m=0;k=l;l=l+16|0;g=k;h[j>>3]=a;f=c[j+4>>2]&2147483647;do if(f>>>0<1072243196)if(f>>>0<1044816030){h[b>>3]=a;h[d>>3]=1.0;break}else{h[b>>3]=+f$(a,0.0,0);h[d>>3]=+i$(a,0.0);break}else{if(f>>>0>2146435071){i=a-a;h[d>>3]=i;h[b>>3]=i;break}f=k$(a,g)|0;m=g+8|0;e=+f$(+h[g>>3],+h[m>>3],1);a=+i$(+h[g>>3],+h[m>>3]);switch(f&3){case 0:{h[b>>3]=e;i=a;break}case 1:{h[b>>3]=a;i=-e;break}case 2:{h[b>>3]=-e;i=-a;break}case 3:{h[b>>3]=-a;i=e;break}default:{}}h[d>>3]=i}while(0);l=k;return}function x$(a,b){a=+a;b=b|0;return +(+h$(a,b))}function y$(a){a=a|0;if(a>>>0<131072)a=(d[143341+((d[143341+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=0;return a|0}function z$(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function A$(b,c){b=b|0;c=c|0;b=V_(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function B$(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function C$(a,b,c){a=a|0;b=b|0;c=c|0;c=F$(a,b,c,-1,0)|0;return c|0}function D$(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function E$(a){a=a|0;return (a+-48|0)>>>0<10|0}function F$(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+128|0;h=j;c[h>>2]=0;i=h+4|0;c[i>>2]=a;c[h+44>>2]=a;g=h+8|0;c[g>>2]=(a|0)<0?-1:a+2147483647|0;c[h+76>>2]=-1;G$(h,0);d=H$(h,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[i>>2]|0)+(c[h+108>>2]|0)-(c[g>>2]|0));l=j;return d|0}function G$(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function H$(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(O_()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0}while((B$(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=I$(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if((d[146510+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){G$(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[146510+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;G$(b,0);c[(O_()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=r3(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=s3(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=I$(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[146766+((e*23|0)>>>5&7)>>0]|0;f=a[146510+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=z3(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=A3(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[146510+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=w3(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=r3(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=s3(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[146510+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0}while(e>>>0>(d[146510+i>>0]|0)>>>0);c[(O_()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(O_()|0)>>2]=34;g=s3(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(O_()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=t3(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function I$(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=J$(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function J$(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((K$(a)|0)==0?(nb[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function K$(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)nb[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function L$(a){a=a|0;return (a+-48|0)>>>0<10|0}function M$(a){a=a|0;if(!(N$(a)|0))a=(E$(a)|0)!=0&1;else a=1;return a|0}function N$(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function O$(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;e=a[b>>0]|0;a:do if(!(e<<24>>24))b=0;else{g=b;b=e;f=e&255;while(1){e=a[c>>0]|0;if(!(e<<24>>24))break a;if(b<<24>>24!=e<<24>>24?(f=P$(f)|0,(f|0)!=(P$(d[c>>0]|0)|0)):0)break;b=g+1|0;c=c+1|0;e=a[b>>0]|0;if(!(e<<24>>24)){b=0;break a}else{g=b;b=e;f=e&255}}b=a[g>>0]|0}while(0);g=P$(b&255)|0;return g-(P$(d[c>>0]|0)|0)|0}function P$(a){a=a|0;var b=0;b=(Q$(a)|0)==0;return (b?a:a|32)|0}function Q$(a){a=a|0;return (a+-65|0)>>>0<26|0}function R$(a){a=a|0;return S$(a,0)|0}function S$(c,f){c=c|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=(f<<1)+-1|0;l=f+-1|0;a:do if(!((c+-43008|0)>>>0<22272|((c+-11776|0)>>>0<30784|((c+-1536|0)>>>0<2560|(T$(c)|0)==0)))){g=(f|0)!=0;if(g&(c+-4256|0)>>>0<46){if((c|0)>4293)switch(c|0){case 4295:case 4301:break;default:break a}c=c+7264|0;break}if((c+-11520|0)>>>0<38&(g^1)){c=c+-7264|0;break}else g=0;do{i=a[66242+(g<<2)+2>>0]|0;j=i<<24>>24;h=c-(e[66242+(g<<2)>>1]|0)|0;if((h-(l&j)|0)>>>0<(d[66242+(g<<2)+3>>0]|0)>>>0){m=11;break}g=g+1|0}while((g|0)!=61);if((m|0)==11)if(i<<24>>24==1){c=f+c-(h&1)|0;break}else{c=(O(k,j)|0)+c|0;break}i=1-f|0;g=b[65754+(i<<1)>>1]|0;b:do if(g<<16>>16){h=0;while(1){if((g&65535|0)==(c|0))break;h=h+1|0;g=b[65754+(h<<2)+(i<<1)>>1]|0;if(!(g<<16>>16))break b}c=e[65754+(h<<2)+(f<<1)>>1]|0;break a}while(0);return ((c+-66600+(f*40|0)|0)>>>0<40?c+-40+(f*80|0)|0:c)|0}while(0);return c|0}function T$(a){a=a|0;if(a>>>0<131072)a=(d[146775+((d[146775+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=a>>>0<196606&1;return a|0}function U$(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function V$(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;if(!e)b=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))b=0;else{h=b;b=f;f=f&255;while(1){e=e+-1|0;g=a[c>>0]|0;if(!((e|0)!=0&g<<24>>24!=0))break a;if(b<<24>>24!=g<<24>>24?(g=P$(f)|0,(g|0)!=(P$(d[c>>0]|0)|0)):0)break;b=h+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){b=0;break a}else{h=b;b=f;f=f&255}}b=a[h>>0]|0}while(0);b=P$(b&255)|0;b=b-(P$(d[c>>0]|0)|0)|0}return b|0}function W$(a){a=a|0;if(a>>>0>=255)if((a+-57344|0)>>>0<8185|(a>>>0<8232|(a+-8234|0)>>>0<47062))a=1;else return (a&65534|0)!=65534&(a+-65532|0)>>>0<1048580&1|0;else a=(a+1&127)>>>0>32&1;return a|0}function X$(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?187560:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[($$()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[62280+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(O_()|0)>>2]=84;f=-1}l=k;return f|0}function Y$(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Z$(a,b,0)|0;return a|0}function Z$(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(_$()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(O_()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(O_()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function _$(){return e$()|0}function $$(){return e$()|0}function a0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+272|0;n=p+8|0;o=p;do if(!(a[d>>0]|0)){d=Ta(149751)|0;if(d|0?a[d>>0]|0:0)break;d=Ta(149758+(b*12|0)|0)|0;if(d|0?a[d>>0]|0:0)break;d=Ta(149830)|0;if(d|0?a[d>>0]|0:0)break;d=149835}while(0);e=0;a:do{switch(a[d+e>>0]|0){case 47:case 0:break a;default:{}}e=e+1|0}while(e>>>0<15);f=a[d>>0]|0;if(f<<24>>24!=46?(a[d+e>>0]|0)==0:0)if(f<<24>>24==67)m=15;else{k=d;m=16}else{d=149835;m=15}if((m|0)==15)if(!(a[d+1>>0]|0))m=18;else{k=d;m=16}b:do if((m|0)==16)if((b$(k,149835)|0)!=0?(b$(k,149843)|0)!=0:0){d=c[46891]|0;if(d|0)do{if(!(b$(k,d+8|0)|0))break b;d=c[d+24>>2]|0}while((d|0)!=0);ta(187568);d=c[46891]|0;c:do if(d|0){while(1){if(!(b$(k,d+8|0)|0))break;d=c[d+24>>2]|0;if(!d)break c}La(187568);break b}while(0);d:do if(((c[46876]|0)==0?(g=Ta(149849)|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){i=254-e|0;j=e+1|0;f=g;while(1){h=V_(f,58)|0;d=a[h>>0]|0;g=h-f+((d<<24>>24!=0)<<31>>31)|0;if(g>>>0>>0){F3(n|0,f|0,g|0)|0;f=n+g|0;a[f>>0]=47;F3(f+1|0,k|0,e|0)|0;a[n+(j+g)>>0]=0;f=ua(n|0,o|0)|0;if(f|0)break;d=a[h>>0]|0}f=h+(d<<24>>24!=0&1)|0;if(!(a[f>>0]|0)){m=41;break d}}d=C_(28)|0;if(!d){S_(f,c[o>>2]|0)|0;m=41;break}else{c[d>>2]=f;c[d+4>>2]=c[o>>2];o=d+8|0;F3(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[46891];c[46891]=d;break}}else m=41;while(0);if((m|0)==41){d=C_(28)|0;if(d){c[d>>2]=c[15558];c[d+4>>2]=c[15559];o=d+8|0;F3(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[46891];c[46891]=d}}La(187568);d=(b|0)==0&(d|0)==0?62232:d}else{d=k;m=18}while(0);do if((m|0)==18){if((b|0)==0?(a[d+1>>0]|0)==46:0){d=62232;break}d=0}while(0);l=p;return d|0}function b0(a,b){a=a|0;b=b|0;c0(a,b)|0;return a|0}function c0(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function d0(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function e0(a){a=a|0;if(!a)a=0;else a=(f0(63396,a)|0)!=0&1;return a|0}function f0(a,b){a=a|0;b=b|0;var d=0;if(!b)a=a+((U$(a)|0)<<2)|0;else{while(1){d=c[a>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else a=a+4|0}a=d|0?a:0}return a|0}function g0(a,b){a=a|0;b=b|0;do switch(b|0){case 1:{a=h0(a)|0;break}case 2:{a=T$(a)|0;break}case 3:{a=i0(a)|0;break}case 4:{a=j0(a)|0;break}case 5:{a=L$(a)|0;break}case 6:{a=k0(a)|0;break}case 7:{a=l0(a)|0;break}case 8:{a=W$(a)|0;break}case 9:{a=y$(a)|0;break}case 10:{a=e0(a)|0;break}case 11:{a=m0(a)|0;break}case 12:{a=n0(a)|0;break}default:a=0}while(0);return a|0}function h0(a){a=a|0;if(!(L$(a)|0))a=(T$(a)|0)!=0&1;else a=1;return a|0}function i0(a){a=a|0;return d0(a)|0}function j0(a){a=a|0;return ((a+-65529|0)>>>0<3|((a&-2|0)==8232|(a>>>0<32|(a+-127|0)>>>0<33)))&1|0}function k0(a){a=a|0;if(!(e0(a)|0))a=(W$(a)|0)!=0&1;else a=0;return a|0}function l0(a){a=a|0;return (R$(a)|0)!=(a|0)|0}function m0(a){a=a|0;return (o0(a)|0)!=(a|0)|0}function n0(a){a=a|0;return ((a+-48|0)>>>0<10|((a|32)+-97|0)>>>0<6)&1|0}function o0(a){a=a|0;return S$(a,1)|0}function p0(a){a=a|0;return (a+-97|0)>>>0<26|0}function q0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=63484;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(O_()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=r0(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function r0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((s0(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=t0(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=s0(b,d,n,q,p)|0;if(h){nb[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=s0(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)u0(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function s0(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+64|0;D=I+16|0;E=I;A=I+24|0;G=I+8|0;H=I+20|0;c[D>>2]=e;w=(d|0)!=0;x=A+40|0;y=x;A=A+39|0;B=G+4|0;j=0;e=0;m=0;a:while(1){do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[(O_()|0)>>2]=75;e=-1;break}else{e=j+e|0;break}while(0);r=c[D>>2]|0;j=a[r>>0]|0;if(!(j<<24>>24)){v=88;break}else k=r;b:while(1){switch(j<<24>>24){case 37:{j=k;v=9;break b}case 0:{j=k;break b}default:{}}u=k+1|0;c[D>>2]=u;j=a[u>>0]|0;k=u}c:do if((v|0)==9)while(1){v=0;if((a[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;c[D>>2]=k;if((a[k>>0]|0)!=37)break;else v=9}while(0);j=j-r|0;if(w)v0(d,r,j);if(j|0)continue;u=(E$(a[(c[D>>2]|0)+1>>0]|0)|0)==0;k=c[D>>2]|0;if(!u?(a[k+2>>0]|0)==36:0){s=(a[k+1>>0]|0)+-48|0;n=1;j=3}else{s=-1;n=m;j=1}j=k+j|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0;if(u>>>0>31|(1<>24)+-32|m;j=j+1|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0}while(!(u>>>0>31|(1<>24==42){if((E$(a[j+1>>0]|0)|0)!=0?(F=c[D>>2]|0,(a[F+2>>0]|0)==36):0){j=F+1|0;c[i+((a[j>>0]|0)+-48<<2)>>2]=10;j=c[g+((a[j>>0]|0)+-48<<3)>>2]|0;k=1;n=F+3|0}else{if(n|0){e=-1;break}if(w){u=(c[f>>2]|0)+(4-1)&~(4-1);j=c[u>>2]|0;c[f>>2]=u+4}else j=0;k=0;n=(c[D>>2]|0)+1|0}c[D>>2]=n;t=(j|0)<0;u=t?0-j|0:j;m=t?m|8192:m;t=k;j=n}else{j=w0(D)|0;if((j|0)<0){e=-1;break}u=j;t=n;j=c[D>>2]|0}do if((a[j>>0]|0)==46){if((a[j+1>>0]|0)!=42){c[D>>2]=j+1;p=w0(D)|0;j=c[D>>2]|0;break}if(E$(a[j+2>>0]|0)|0?(C=c[D>>2]|0,(a[C+3>>0]|0)==36):0){p=C+2|0;c[i+((a[p>>0]|0)+-48<<2)>>2]=10;p=c[g+((a[p>>0]|0)+-48<<3)>>2]|0;j=C+4|0;c[D>>2]=j;break}if(t|0){e=-1;break a}if(w){q=(c[f>>2]|0)+(4-1)&~(4-1);j=c[q>>2]|0;c[f>>2]=q+4}else j=0;q=(c[D>>2]|0)+2|0;c[D>>2]=q;p=j;j=q}else p=-1;while(0);q=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}k=j;j=j+1|0;c[D>>2]=j;k=a[(a[k>>0]|0)+-65+(149862+(q*58|0))>>0]|0;n=k&255;if((n+-1|0)>>>0>=8)break;else q=n}if(!(k<<24>>24)){e=-1;break}o=(s|0)>-1;do if(k<<24>>24==19)if(o){e=-1;break a}else v=50;else{if(o){c[i+(s<<2)>>2]=n;o=g+(s<<3)|0;s=c[o+4>>2]|0;v=E;c[v>>2]=c[o>>2];c[v+4>>2]=s;v=50;break}if(!w){e=0;break a}x0(E,n,f);j=c[D>>2]|0}while(0);if((v|0)==50){v=0;if(!w){j=0;m=t;continue}}k=a[j+-1>>0]|0;k=(q|0)!=0&(k&15|0)==3?k&-33:k;j=m&-65537;s=(m&8192|0)==0?m:j;d:do switch(k|0){case 110:switch((q&255)<<24>>24){case 0:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 1:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 2:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}case 3:{b[c[E>>2]>>1]=e;j=0;m=t;continue a}case 4:{a[c[E>>2]>>0]=e;j=0;m=t;continue a}case 6:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 7:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}default:{j=0;m=t;continue a}}case 112:{k=120;j=p>>>0>8?p:8;m=s|8;v=62;break}case 88:case 120:{j=p;m=s;v=62;break}case 111:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;o=z0(j,k,x)|0;m=y-o|0;q=0;n=150326;p=(s&8|0)==0|(p|0)>(m|0)?p:m+1|0;m=s;v=68;break}case 105:case 100:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=t3(0,0,j|0,k|0)|0;k=z;m=E;c[m>>2]=j;c[m+4>>2]=k;m=1;n=150326;v=67;break d}else{m=(s&2049|0)!=0&1;n=(s&2048|0)==0?((s&1|0)==0?150326:150328):150327;v=67;break d}}case 117:{k=E;m=0;n=150326;j=c[k>>2]|0;k=c[k+4>>2]|0;v=67;break}case 99:{a[A>>0]=c[E>>2];r=A;q=0;n=150326;o=x;k=1;break}case 109:{k=c$(c[(O_()|0)>>2]|0)|0;v=72;break}case 115:{k=c[E>>2]|0;k=k|0?k:150336;v=72;break}case 67:{c[G>>2]=c[E>>2];c[B>>2]=0;c[E>>2]=G;p=-1;m=G;v=76;break}case 83:{j=c[E>>2]|0;if(!p){B0(d,32,u,0,s);j=0;v=85}else{m=j;v=76}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=C0(d,+h[E>>3],u,p,s,k)|0;m=t;continue a}default:{q=0;n=150326;o=x;k=p;j=s}}while(0);e:do if((v|0)==62){s=E;r=c[s>>2]|0;s=c[s+4>>2]|0;o=y0(r,s,x,k&32)|0;n=(m&8|0)==0|(r|0)==0&(s|0)==0;q=n?0:2;n=n?150326:150326+(k>>4)|0;p=j;j=r;k=s;v=68}else if((v|0)==67){o=A0(j,k,x)|0;q=m;m=s;v=68}else if((v|0)==72){v=0;s=D$(k,0,p)|0;m=(s|0)==0;r=k;q=0;n=150326;o=m?k+p|0:s;k=m?p:s-k|0}else if((v|0)==76){v=0;o=m;j=0;k=0;while(1){n=c[o>>2]|0;if(!n)break;k=Y$(H,n)|0;if((k|0)<0|k>>>0>(p-j|0)>>>0)break;j=k+j|0;if(p>>>0>j>>>0)o=o+4|0;else break}if((k|0)<0){e=-1;break a}B0(d,32,u,j,s);if(!j){j=0;v=85}else{n=0;while(1){k=c[m>>2]|0;if(!k){v=85;break e}k=Y$(H,k)|0;n=k+n|0;if((n|0)>(j|0)){v=85;break e}v0(d,H,k);if(n>>>0>=j>>>0){v=85;break}else m=m+4|0}}}while(0);if((v|0)==68){v=0;k=(j|0)!=0|(k|0)!=0;j=(p|0)!=0|k;k=y-o+((k^1)&1)|0;r=j?o:x;o=x;k=j?((p|0)>(k|0)?p:k):p;j=(p|0)>-1?m&-65537:m}else if((v|0)==85){v=0;B0(d,32,u,j,s^8192);j=(u|0)>(j|0)?u:j;m=t;continue}p=o-r|0;o=(k|0)<(p|0)?p:k;s=o+q|0;m=(u|0)<(s|0)?s:u;B0(d,32,m,s,j);v0(d,n,q);B0(d,48,m,s,j^65536);B0(d,48,o,p,0);v0(d,r,p);B0(d,32,m,s,j^8192);j=m;m=t}f:do if((v|0)==88)if(!d)if(m){e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;x0(g+(e<<3)|0,j,f);j=e+1|0;if((e|0)<9)e=j;else{e=j;break}}if((e|0)<10)while(1){if(c[i+(e<<2)>>2]|0){e=-1;break f}if((e|0)<9)e=e+1|0;else{e=1;break}}else e=1}else e=0;while(0);l=I;return e|0}function t0(a){a=a|0;return 0}function u0(a){a=a|0;return}function v0(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))E0(b,d,a)|0;return}function w0(b){b=b|0;var d=0,e=0;if(!(E$(a[c[b>>2]>>0]|0)|0))d=0;else{d=0;do{e=c[b>>2]|0;d=(d*10|0)+-48+(a[e>>0]|0)|0;e=e+1|0;c[b>>2]=e}while((E$(a[e>>0]|0)|0)!=0)}return d|0}function x0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function y0(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[150374+(b&15)>>0]|0|f;b=z3(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function z0(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=z3(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function A0(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=x3(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=w3(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function B0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;H3(f|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{v0(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}v0(a,f,e)}l=g;return}function C0(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;D0(e)|0;if((z|0)<0){e=-e;C=1;B=150343}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?150344:150349):150346}D0(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;B0(b,32,f,j,h&-65537);v0(b,B,C);v0(b,e!=e|0.0!=0.0?(G?150511:150370):G?150362:150366,3);B0(b,32,f,j,h^8192)}else{r=+x$(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=A0(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[150374+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;B0(b,32,f,F,h);v0(b,s,q);B0(b,48,f,F,h^65536);v0(b,G,k);B0(b,48,j-k|0,0,0);v0(b,o,E);B0(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=A3(c[j>>2]|0,0,o|0)|0;x=s3(x|0,z|0,m|0,0)|0;y=z;v=x3(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=w3(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=A0(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;B0(b,32,f,j,h);v0(b,B,C);B0(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=A0(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){H3(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}v0(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)v0(b,150390,1);if(n>>>0>>0&(k|0)>0)while(1){m=A0(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){H3(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}v0(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}B0(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=A0(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;v0(b,m,1);if(s&(k|0)<1){m=n;break}v0(b,150390,1);m=n}else{if(m>>>0<=G>>>0)break;H3(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;v0(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}B0(b,48,k+18|0,18,0);v0(b,v,E-v|0)}B0(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function D0(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function E0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(F0(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=nb[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=nb[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);F3(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function F0(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function G0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;F3(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function H0(b){b=b|0;var c=0,d=0,e=0,f=0;e=a[b>>0]|0;c=1;d=150392;f=97;while(1){if(e<<24>>24==f<<24>>24?(b$(b,d)|0)==0:0)break;d=d+6|0;f=a[d>>0]|0;if(!(f<<24>>24)){c=0;break}else c=c+1|0}return c|0}function I0(a){a=a|0;var b=0;b=(p0(a)|0)==0;return (b?a:a&95)|0}function J0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;do if(b>>>0>6)d=0;else{ta(187576);if((b|0)!=6){d=K0(b,d)|0;La(187576);break}if(!d){d=194052;b=0}else{b=g;e=150465;f=b+16|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));f=0;do{b=V_(d,59)|0;e=b-d|0;if((e|0)<16){F3(g|0,d|0,e|0)|0;a[g+e>>0]=0;d=(a[b>>0]|0)==0?d:b+1|0}K0(f,g)|0;f=f+1|0}while((f|0)!=6);d=194052;b=0}while(1){f=c[187536+(b<<2)>>2]|0;f=f|0?f+8|0:150481;e=W_(f)|0;F3(d|0,f|0,e|0)|0;f=d+e|0;a[f>>0]=59;b=b+1|0;if((b|0)==6)break;else d=d+(e+1)|0}a[f>>0]=0;La(187576);d=194052}while(0);l=h;return d|0}function K0(a,b){a=a|0;b=b|0;if(!b)a=c[187536+(a<<2)>>2]|0;else{b=a0(a,b)|0;c[187536+(a<<2)>>2]=b;a=b}return (a|0?a+8|0:150481)|0}function L0(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function M0(a){a=a|0;return N0(a)|0}function N0(a){a=a|0;return B3(a|0)|0}function O0(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((c[f+76>>2]|0)>-1)m=t0(f)|0;else m=0;g=e+-1|0;if((e|0)<2){n=f+74|0;l=a[n>>0]|0;a[n>>0]=l+255|l;if(m|0)u0(f);if(!g)a[b>>0]=0;else b=0}else{a:do if(g){k=f+4|0;l=f+8|0;e=b;while(1){h=c[k>>2]|0;o=h;p=(c[l>>2]|0)-o|0;i=D$(h,10,p)|0;j=(i|0)==0;i=j?p:1-o+i|0;i=i>>>0>>0?i:g;F3(e|0,h|0,i|0)|0;h=(c[k>>2]|0)+i|0;c[k>>2]=h;e=e+i|0;i=g-i|0;if(!(j&(i|0)!=0)){n=17;break a}if(h>>>0>=(c[l>>2]|0)>>>0){g=J$(f)|0;if((g|0)<0)break;else j=g}else{c[k>>2]=h+1;j=d[h>>0]|0}g=i+-1|0;h=e+1|0;a[e>>0]=j;if(!((g|0)!=0&(j&255|0)!=10)){e=h;n=17;break a}else e=h}if((e|0)!=(b|0)?(c[f>>2]&16|0)!=0:0)n=17;else b=0}else{e=b;n=17}while(0);if((n|0)==17)if(!b)b=0;else a[e>>0]=0;if(m)u0(f)}return b|0}function P0(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=A$(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=Q0(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=R0(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=S0(b,c)|0;break}else{b=T0(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function Q0(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function R0(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function S0(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function T0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(L0(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=D$(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function U0(a,b,c){a=a|0;b=b|0;c=c|0;V0(a,b,c)|0;return a|0}function V0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=11}}else e=0}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);H3(b|0,0,e|0)|0;return b|0}function W0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+32|0;f=g;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;e=a[d>>0]|0;do if(!(e<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==e<<24>>24)d=d+1|0;else break;d=d-b|0;break}do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;a:do if(!(e<<24>>24))d=b;else{d=b;do{if(!(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);l=g;return d|0}function X0(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P_(a)|0;a=Ja(6,d|0)|0;a=N_((a|0)==-4?0:a)|0;l=b;return a|0}function Y0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Z0(a,b,f)|0;l=e;return d|0}function Z0(a,b,c){a=a|0;b=b|0;c=c|0;return q0(a,2147483647,b,c)|0}function _0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)$0(a,d,e,f,j);else b1(a,d,e,k,f,0,j);if((f|0)==1){c1(k,1);f=0;break}else{c1(k,b);f=1;break}}else{$0(a,d,e,f,j);a1(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0>>0)}else{f=1;b=1}b1(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1){if(!(c[g>>2]|0))break a}else if((f|0)>=2){c1(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;a1(k,1);b1(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);c1(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;b1(h,d,e,k,n,1,j);a=h;f=n;continue}b=d1(k)|0;a1(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return}function $0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((lb[d&127](a,g)|0)>-1?(lb[d&127](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((lb[d&127](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);f1(b,m,e);l=n;return}function a1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function b1(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(lb[d&127](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((lb[d&127](g,j)|0)>-1){i=10;break a}if((lb[d&127](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=d1(n)|0;a1(n,q);f=q+f|0;if(!((c[n>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((lb[d&127](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){f1(b,o,e);$0(a,b,d,f,h)}l=p;return}function c1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<>2]=d<>2]|0)+-1|0)|0;if(!b){b=e1(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function e1(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function f1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;F3(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;F3(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);l=h;return}function g1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=r0(a,b,f)|0;l=e;return d|0}function h1(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;sa(0,e|0)|0;d=0;e=(c[e+4>>2]|0)*65537^(e>>>4)+b;while(1){a[b+d>>0]=(e&15)+65|e<<1&32;d=d+1|0;if((d|0)==6)break;else e=e>>>5}l=f;return b|0}function i1(a,b,c){a=a|0;b=b|0;c=c|0;c=F$(a,b,c,-2147483648,0)|0;return c|0}function j1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){H3(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{i=f+(((e&255)>>>5&255)<<2)|0;c[i>>2]=c[i>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{if(c[f+(((d&255)>>>5&255)<<2)>>2]&1<<(d&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=V_(b,e<<24>>24)|0;l=h;return e-b|0}function k1(b,d){b=b|0;d=d|0;var e=0;if(!b){b=c[46896]|0;if(!b)b=0;else e=3}else e=3;do if((e|0)==3){b=b+(W0(b,d)|0)|0;if(!(a[b>>0]|0)){c[46896]=0;b=0;break}d=b+(j1(b,d)|0)|0;c[46896]=d;if(!(a[d>>0]|0)){c[46896]=0;break}else{c[46896]=d+1;a[d>>0]=0;break}}while(0);return b|0}function l1(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=c&255;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=e<<24>>24);return c|0}function m1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!b){b=c[e>>2]|0;if(!b)b=0;else f=3}else f=3;do if((f|0)==3){b=b+(W0(b,d)|0)|0;if(!(a[b>>0]|0)){c[e>>2]=0;b=0;break}d=b+(j1(b,d)|0)|0;c[e>>2]=d;if(!(a[d>>0]|0)){c[e>>2]=0;break}else{c[e>>2]=d+1;a[d>>0]=0;break}}while(0);return b|0}function n1(a){a=a|0;var b=0,c=0;b=(W_(a)|0)+1|0;c=C_(b)|0;if(!c)a=0;else a=F3(c|0,a|0,b|0)|0;return a|0}function o1(a,b){a=a|0;b=b|0;return l1(a,b,(W_(a)|0)+1|0)|0}function p1(a,b){a=a|0;b=b|0;b0(a+(W_(a)|0)|0,b)|0;return a|0}function q1(b,c){b=b|0;c=c|0;c=b+(j1(b,c)|0)|0;return (a[c>>0]|0?c:0)|0}function r1(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(t0(a)|0)==0;a=(c[a>>2]|0)>>>4&1}else a=(c[a>>2]|0)>>>4&1;return a|0}function s1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=t0(a)|0;else f=0;t1(a);g=(c[a>>2]&1|0)!=0;if(!g){e=u1()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;v1()}b=w1(a)|0;b=kb[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)D_(d);if(g){if(f|0)u0(a)}else D_(a);return b|0}function t1(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(y1()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function u1(){ta(187588);return 187596}function v1(){La(187588);return}function w1(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=x1(a)|0;break}d=(t0(a)|0)==0;b=x1(a)|0;if(!d)u0(a)}else{if(!(c[15685]|0))b=0;else b=w1(c[15685]|0)|0;a=c[(u1()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=t0(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=x1(a)|0|b;if(d|0)u0(a);a=c[a+56>>2]|0}while((a|0)!=0);v1()}while(0);return b|0}function x1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(nb[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)nb[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function y1(){return e$()|0}function z1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+64|0;j=k+40|0;h=k+24|0;g=k+16|0;f=k;i=k+56|0;if(A$(150498,a[d>>0]|0)|0){e=C_(1156)|0;if(!e)e=0;else{H3(e|0,0,124)|0;if(!(A$(d,43)|0))c[e>>2]=(a[d>>0]|0)==114?8:4;if(A$(d,101)|0){c[f>>2]=b;c[f+4>>2]=2;c[f+8>>2]=1;Ea(221,f|0)|0}if((a[d>>0]|0)==97){c[g>>2]=b;c[g+4>>2]=3;d=Ea(221,g|0)|0;if(!(d&1024)){c[h>>2]=b;c[h+4>>2]=4;c[h+8>>2]=d|1024;Ea(221,h|0)|0}f=c[e>>2]|128;c[e>>2]=f}else f=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;d=e+75|0;a[d>>0]=-1;if((f&8|0)==0?(c[j>>2]=b,c[j+4>>2]=21523,c[j+8>>2]=i,(Ia(54,j|0)|0)==0):0)a[d>>0]=10;c[e+32>>2]=15;c[e+36>>2]=18;c[e+40>>2]=16;c[e+12>>2]=17;if(!(c[46875]|0))c[e+76>>2]=-1;A1(e)|0}}else{c[(O_()|0)>>2]=22;e=0}l=k;return e|0}function A1(a){a=a|0;var b=0,d=0;b=u1()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;v1();return a|0}function B1(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if(!e)b=0;else{do if(f|0){i=(b|0)==0?g:b;b=a[e>>0]|0;if(b<<24>>24>-1){c[i>>2]=b&255;b=b<<24>>24!=0&1;break a}h=(c[c[(C1()|0)+188>>2]>>2]|0)==0;b=a[e>>0]|0;if(h){c[i>>2]=b<<24>>24&57343;b=1;break a}b=(b&255)+-194|0;if(b>>>0<=50){g=e+1|0;h=c[62280+(b<<2)>>2]|0;if(f>>>0<4?h&-2147483648>>>((f*6|0)+-6|0)|0:0)break;b=d[g>>0]|0;f=b>>>3;if((f+-16|f+(h>>26))>>>0<=7){b=b+-128|h<<6;if((b|0)>=0){c[i>>2]=b;b=2;break a}g=(d[e+2>>0]|0)+-128|0;if(g>>>0<=63){g=g|b<<6;if((g|0)>=0){c[i>>2]=g;b=3;break a}b=(d[e+3>>0]|0)+-128|0;if(b>>>0<=63){c[i>>2]=b|g<<6;b=4;break a}}}}}while(0);c[(O_()|0)>>2]=84;b=-1}while(0);l=j;return b|0}function C1(){return e$()|0}function D1(a,b){a=a|0;b=b|0;var c=0;c=W_(a)|0;return ((E1(a,1,c,b)|0)!=(c|0))<<31>>31|0}function E1(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(t0(e)|0)==0;a=E0(a,f,e)|0;if(!g)u0(e)}else a=E0(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function F1(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(F0(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((nb[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function G1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=N_(Fa(3,f|0)|0)|0;l=e;return d|0}function H1(){var a=0,b=0;b=l;l=l+16|0;a=Da(20,b|0)|0;l=b;return a|0}function I1(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=150483;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;while(1){d=d+-1|0;a[b+d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}}return}function J1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g+40|0;e=g+8|0;d=g;c[d>>2]=a;c[d+4>>2]=b;d=Ca(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(Ea(221,e|0)|0)>=0):0){I1(e,a);c[f>>2]=e;c[f+4>>2]=b;b=N_(Ba(195,f|0)|0)|0}else b=N_(d)|0;l=g;return b|0}function K1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=N_(Ga(33,e|0)|0)|0;l=d;return b|0}function L1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(A$(150498,a[d>>0]|0)|0){f=M1(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=N_(Ha(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0}b=z1(e,d)|0;if(!b){c[h>>2]=e;Ja(6,h|0)|0;b=0}}else b=0}else{c[(O_()|0)>>2]=22;b=0}l=i;return b|0}function M1(b){b=b|0;var c=0,d=0,e=0;d=(A$(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(A$(b,120)|0)==0;d=e?d:d|128;b=(A$(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function N1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=O1(a,b,f)|0;l=e;return d|0}function O1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=38;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=Q1(e,b,d)|0;l=g;return h|0}function P1(a,b,c){a=a|0;b=b|0;c=c|0;return Y1(a,b,c)|0}function Q1(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=l;l=l+288|0;F=L+8|0;G=L+17|0;H=L;I=L+16|0;if((c[b+76>>2]|0)>-1)K=t0(b)|0;else K=0;i=a[e>>0]|0;a:do if(i<<24>>24){y=b+4|0;A=b+100|0;B=b+108|0;C=b+8|0;D=G+10|0;E=G+33|0;x=F+4|0;p=e;u=0;e=0;j=0;k=i;i=0;b:while(1){c:do if(!(B$(k&255)|0)){k=(a[p>>0]|0)==37;d:do if(k){m=p+1|0;n=a[m>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{w=0;m=p+2|0;break}default:{if(E$(n&255)|0?(a[p+2>>0]|0)==36:0){w=R1(f,(d[m>>0]|0)+-48|0)|0;m=p+3|0;break e}v=(c[f>>2]|0)+(4-1)&~(4-1);w=c[v>>2]|0;c[f>>2]=v+4}}while(0);if(!(E$(d[m>>0]|0)|0))s=0;else{k=0;do{k=(k*10|0)+-48+(d[m>>0]|0)|0;m=m+1|0}while((E$(d[m>>0]|0)|0)!=0);s=k}p=a[m>>0]|0;n=m+1|0;if(p<<24>>24==109){k=(w|0)!=0&1;j=0;m=n;p=a[n>>0]|0;i=0}else k=0;n=m+1|0;switch(p<<24>>24){case 104:{v=(a[n>>0]|0)==104;p=v?-2:-1;m=v?m+2|0:n;break}case 108:{v=(a[n>>0]|0)==108;p=v?3:1;m=v?m+2|0:n;break}case 106:{p=3;m=n;break}case 116:case 122:{p=1;m=n;break}case 76:{p=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{p=0;break}default:{J=136;break b}}r=d[m>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:p;q=r&255;switch(q<<24>>24){case 99:{s=(s|0)>1?s:1;break}case 91:break;case 110:{S1(w,t,u,((u|0)<0)<<31>>31);n=u;break c}default:{G$(b,0);do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=I$(b)|0}while((B$(n)|0)!=0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}u=(c[B>>2]|0)+u+n-(c[C>>2]|0)|0}}G$(b,s);p=c[y>>2]|0;n=c[A>>2]|0;if(p>>>0>>0)c[y>>2]=p+1;else{if((I$(b)|0)<0){J=136;break b}n=c[A>>2]|0}if(n|0)c[y>>2]=(c[y>>2]|0)+-1;f:do switch(q<<24>>24){case 91:case 99:case 115:{v=(r|0)==99;g:do if((r|16|0)==115){H3(G|0,-1,257)|0;a[G>>0]=0;if((r|0)==115){a[E>>0]=0;a[D>>0]=0;a[D+1>>0]=0;a[D+2>>0]=0;a[D+3>>0]=0;a[D+4>>0]=0}}else{n=m+1|0;q=(a[n>>0]|0)==94;r=q&1;m=q?m+2|0:n;H3(G|0,r|0,257)|0;a[G>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;J=65;break}case 93:{n=94;J=65;break}default:{}}while(1){if((J|0)==65){J=0;a[G+n>>0]=r^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{J=136;break b}case 93:break g;case 45:{q=m+1|0;n=a[q>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){p=(r^1)&255;m=m&255;do{m=m+1|0;a[G+m>>0]=p;n=a[q>>0]|0}while((m|0)<(n&255|0));m=q}else m=q;break}default:{}}while(0);n=(n&255)+1|0;J=65}}while(0);n=v?s+1|0:31;r=(t|0)==1;t=(k|0)!=0;i:do if(r){if(t){i=C_(n<<2)|0;if(!i){j=0;i=0;J=136;break b}}else i=w;c[F>>2]=0;c[x>>2]=0;q=n;j=0;j:while(1){p=(i|0)==0;do{k:while(1){n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=I$(b)|0;if(!(a[G+(n+1)>>0]|0))break j;a[I>>0]=n;switch(X$(H,I,1,F)|0){case -1:{j=0;J=136;break b}case -2:break;default:break k}}if(!p){c[i+(j<<2)>>2]=c[H>>2];j=j+1|0}}while(!(t&(j|0)==(q|0)));j=q<<1|1;n=F_(i,j<<2)|0;if(!n){j=0;J=136;break b}else{p=q;q=j;i=n;j=p}}if(!(T1(F)|0)){j=0;J=136;break b}else{q=j;j=0;p=i}}else{if(t){j=C_(n)|0;if(!j){j=0;i=0;J=136;break b}else{p=n;i=0}while(1){do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=I$(b)|0;if(!(a[G+(n+1)>>0]|0)){q=i;p=0;i=0;break i}a[j+i>>0]=n;i=i+1|0}while((i|0)!=(p|0));i=p<<1|1;n=F_(j,i)|0;if(!n){i=0;J=136;break b}else{q=p;p=i;j=n;i=q}}}if(!w)while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if(!(a[G+(i+1)>>0]|0)){q=0;j=0;p=0;i=0;break i}}else j=0;while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if(!(a[G+(i+1)>>0]|0)){q=j;j=w;p=0;i=0;break i}a[w+j>>0]=i;j=j+1|0}}while(0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}n=n-(c[C>>2]|0)+(c[B>>2]|0)|0;if(!n)break b;if(!((n|0)==(s|0)|v^1))break b;do if(t)if(r){c[w>>2]=p;break}else{c[w>>2]=j;break}while(0);if(!v){if(p|0)c[p+(q<<2)>>2]=0;if(!j){j=0;break f}a[j+q>>0]=0}break}case 120:case 88:case 112:{n=16;J=124;break}case 111:{n=8;J=124;break}case 117:case 100:{n=10;J=124;break}case 105:{n=0;J=124;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+U1(b,t,0);if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if(w)switch(t|0){case 0:{g[w>>2]=o;break f}case 1:{h[w>>3]=o;break f}case 2:{h[w>>3]=o;break f}default:break f}break}default:{}}while(0);do if((J|0)==124){J=0;n=H$(b,n,0,-1,-1)|0;if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if((w|0)!=0&(r|0)==112){c[w>>2]=n;break}else{S1(w,t,n,z);break}}while(0);e=e+((w|0)!=0&1)|0;n=(c[B>>2]|0)+u+(c[y>>2]|0)-(c[C>>2]|0)|0;break c}while(0);m=p+(k&1)|0;G$(b,0);k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=I$(b)|0;if((k|0)!=(d[m>>0]|0)){J=22;break b}n=u+1|0}else{m=p;while(1){k=m+1|0;if(!(B$(d[k>>0]|0)|0))break;else m=k}G$(b,0);do{k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=I$(b)|0}while((B$(k)|0)!=0);if(!(c[A>>2]|0))k=c[y>>2]|0;else{k=(c[y>>2]|0)+-1|0;c[y>>2]=k}n=(c[B>>2]|0)+u+k-(c[C>>2]|0)|0}while(0);p=m+1|0;k=a[p>>0]|0;if(!(k<<24>>24))break a;else u=n}if((J|0)==22){if(c[A>>2]|0)c[y>>2]=(c[y>>2]|0)+-1;if((e|0)!=0|(k|0)>-1)break;else{e=0;J=137}}else if((J|0)==136)if(!e){e=k;J=137}if((J|0)==137){k=e;e=-1}if(k){D_(j);D_(i)}}else e=0;while(0);if(K|0)u0(b);l=L;return e|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function S1(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function T1(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function U1(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0}while((B$(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=I$(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[150502+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=I$(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[150511+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=I$(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=I$(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(O_()|0)>>2]=22;G$(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0;if((e|32|0)==120){g=+V1(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+W1(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(O_()|0)>>2]=22;G$(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function V1(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=I$(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=I$(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=I$(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=I$(a)|0;l=s3(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=s3(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=I$(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else G$(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=s3(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=X1(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){G$(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=A3(q|0,p|0,2)|0;l=s3(l|0,z|0,-32,-1)|0;l=s3(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(O_()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(O_()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=s3(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=t3(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=s3(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+p$(+m$(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(O_()|0)>>2]=34;h=+q$(h,l)}while(0);return +h}function W1(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=I$(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=I$(a)|0;if((b|0)==48){k=0;b=0;while(1){k=s3(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=I$(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=s3(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=I$(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=X1(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){G$(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=s3(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(O_()|0)>>2]=22;G$(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(O_()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(O_()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[63608+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[63608+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[63608+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=A3(c[p>>2]|0,0,29)|0;k=s3(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=w3(k|0,m|0,1e9,0)|0;k=x3(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[63640+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+p$(+m$(1.0,105-n|0),j);r=+r$(j,+m$(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+r$(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(O_()|0)>>2]=34}while(0);i=+q$(i,b)}while(0);l=J;return +i}function X1(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=r3(g|0,b|0,10,0)|0;g=z;e=s3(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=s3(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=t3(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function Y1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=D$(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;F3(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function Z1(a,b,c){a=a|0;b=b|0;c=c|0;return _1(a,b,c)|0}function _1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(t0(a)|0)==0;b=$1(a,b,d)|0;if(!e)u0(a)}else b=$1(a,b,d)|0;return b|0}function $1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(nb[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((nb[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function a2(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){e=b+1|0;if(!(B$(a[b>>0]|0)|0))break;else b=e}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;c=b;b=d}}if((f|0)==5){g=b;c=e;b=a[e>>0]|0}if(!(E$(b<<24>>24)|0))b=0;else{b=0;do{b=(b*10|0)+48-(a[c>>0]|0)|0;c=c+1|0}while((E$(a[c>>0]|0)|0)!=0)}return (g|0?b:0-b|0)|0}function b2(a){a=a|0;return +(+c2(a,0))}function c2(a,b){a=a|0;b=b|0;return +(+d2(a,b,1))}function d2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=l;l=l+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;G$(h,0);e=+U1(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;l=i;return +e}function e2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if(!c)b=0;else{h=b;while(1){g=c>>>1;b=h+(O(g,d)|0)|0;f=lb[e&127](a,b)|0;if(!f)break a;if((c|0)==1){b=0;break a}f=(f|0)<0;c=f?g:c-g|0;if(!c){b=0;break}else h=f?h:b}}while(0);return b|0}function f2(a,c){a=a|0;c=c|0;var d=0,f=0,g=0;g=a+2|0;f=a+4|0;d=r3((e[c+2>>1]|0)<<16|(e[c>>1]|0)|0,e[c+4>>1]|0|0,(e[g>>1]|0)<<16|(e[a>>1]|0)|0,e[f>>1]|0|0)|0;c=s3(d|0,z|0,e[c+6>>1]|0|0,0)|0;d=z;b[a>>1]=c;a=z3(c|0,d|0,16)|0;b[g>>1]=a;b[f>>1]=d;z=d&65535;return c|0}function g2(){var a=0,b=0,d=0;b=183528;b=r3(c[b>>2]|0,c[b+4>>2]|0,1284865837,1481765933)|0;b=s3(b|0,z|0,1,0)|0;a=z;d=183528;c[d>>2]=b;c[d+4>>2]=a;a=z3(b|0,a|0,33)|0;return a|0}function h2(a){a=a|0;F3(190672,65740,6)|0;F3(65740,a|0,6)|0;return 190672}function i2(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=13070;b[d+2>>1]=a;b[d+4>>1]=a>>>16;h2(d)|0;l=c;return}function j2(a){a=a|0;var b=0;b=f2(a,65746)|0;b=A3(b|0,z|0,4)|0;a=z|1072693248;c[j>>2]=b;c[j+4>>2]=a;return +(+h[j>>3]+-1.0)}function k2(){return +(+j2(65740))}function l2(a,b){a=a|0;b=b|0;if(!a)b=E_(1,24)|0;else H3(b|0,0,24)|0;return b|0}function m2(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if(b|0)do{D_(c[b>>2]|0);d=b;b=c[b+4>>2]|0;D_(d)}while((b|0)!=0);D_(a);return}function n2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;h=a+16|0;a:do if(!(c[h>>2]|0)){k=a+12|0;g=c[k>>2]|0;if(g>>>0>>0){do if(b)if(!d){c[h>>2]=1;b=0;break a}else{h=a+8|0;c[h>>2]=d;g=1024;b=d;break}else{g=f<<3;g=g>>>0>1024?g:1024;j=C_(8)|0;if(!j){c[h>>2]=1;b=0;break a}b=C_(g)|0;c[j>>2]=b;d=b;if(!b){D_(j);c[h>>2]=1;b=0;break a}c[j+4>>2]=0;h=a+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;if(!(c[a>>2]|0))c[a>>2]=j;c[h>>2]=j;h=a+8|0;c[h>>2]=d}while(0);c[k>>2]=g}else{h=a+8|0;b=c[h>>2]|0;d=b}d=d+f&3;d=((d|0)==0?0:4-d|0)+f|0;c[h>>2]=b+d;c[k>>2]=g-d;if(e)H3(b|0,0,d|0)|0}else b=0;while(0);return b|0}function o2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+48|0;h=v;t=p2()|0;a:do if(!t)b=12;else{u=l2(0,0)|0;if(!u){q2(t);b=12;break}H3(h|0,0,36)|0;c[h>>2]=u;c[h+4>>2]=t;c[h+16>>2]=b;c[h+32>>2]=d;e=h+28|0;c[e>>2]=-1;b=r2(h)|0;b:do if(!b){g=h+20|0;r=c[g>>2]|0;c[a>>2]=r+-1;i=c[h+8>>2]|0;if((c[e>>2]|0)<(r|0)){r=E_(1,68)|0;if(r){q=(c[e>>2]|0)>>>31^1;c[r+60>>2]=q;c[r+64>>2]=0;c[r+28>>2]=c[g>>2];if((d&8|0)==0|(q|0)!=0){b=s2(0,t,i,r)|0;if(b|0){g=r;h=0;i=0;f=0;e=0;break}e=r+40|0;b=c[e>>2]|0;if((b|0)>0){b=C_((b<<2)+4|0)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+32>>2]=b;H3(b|0,-1,(c[e>>2]<<2)+4|0)|0;f=b;b=c[e>>2]|0}else f=0;q=E_(b<<1|1,4)|0;c[r+36>>2]=q;if(!q){g=r;h=0;i=0;b=12;f=0;e=0;break}b=E_(c[g>>2]|0,12)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+16>>2]=b;b=s2(u,t,i,r)|0;if(!b)b=f;else{g=r;h=0;i=0;f=0;e=0;break}}else b=0;p=h+24|0;b=t2(u,t,i,p,b)|0;if(!b){b=c[p>>2]|0;c[p>>2]=b+1;b=u2(u,0,0,b)|0;if((b|0)!=0?(s=v2(u,i,b)|0,(s|0)!=0):0){b=w2(u,t,s)|0;if(!b){o=C_(c[p>>2]<<2)|0;if(o){q=C_(c[p>>2]<<2)|0;if(q){b=c[p>>2]|0;if((b|0)>0)H3(o|0,0,b<<2|0)|0;x2(s,0,o,0)|0;f=c[p>>2]|0;if((f|0)>0){b=0;e=0;do{c[q+(e<<2)>>2]=b;n=o+(e<<2)|0;b=b+1+(c[n>>2]|0)|0;c[n>>2]=0;e=e+1|0}while((e|0)<(f|0));k=b}else k=0;m=E_(k+1|0,32)|0;if(m){c[r>>2]=m;n=r+4|0;c[n>>2]=k;b=x2(s,m,o,q)|0;if(!b){c[r+20>>2]=0;f=s+24|0;b=c[f>>2]|0;e=0;while(1){e=e+1|0;if((c[b>>2]|0)<=-1)break;else b=b+32|0}j=E_(e,32)|0;if(!j){g=r;h=o;i=q;b=12;f=o;e=q}else{c[r+8>>2]=j;f=c[f>>2]|0;e=c[f>>2]|0;if((e|0)>-1){b=0;do{c[j+(b<<5)+8>>2]=m+(c[q+(e<<2)>>2]<<5);c[j+(b<<5)+12>>2]=e;h=j+(b<<5)+16|0;c[h>>2]=0;i=f+12|0;g=c[i>>2]|0;if(g|0){e=0;do{w=e;e=e+1|0}while((c[g+(w<<2)>>2]|0)>-1);e=e<<2;g=C_(e)|0;c[h>>2]=g;if(!g){g=r;h=o;i=q;b=12;f=o;e=q;break b}F3(g|0,c[i>>2]|0,e|0)|0}c[j+(b<<5)+20>>2]=c[f+16>>2];b=b+1|0;f=f+32|0;e=c[f>>2]|0}while((e|0)>-1)}else b=0;c[j+(b<<5)+8>>2]=0;c[n>>2]=k;c[r+12>>2]=m+(c[q+(c[c[s+28>>2]>>2]<<2)>>2]<<5);c[r+52>>2]=c[p>>2];c[r+56>>2]=d;m2(u);q2(t);D_(o);D_(q);c[a+4>>2]=r;b=0;break a}}else{g=r;h=o;i=q;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=0}}else{g=r;h=o;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=0;h=0;i=0;b=6;f=0;e=0}}else{g=0;h=0;i=0;f=0;e=0}while(0);m2(u);q2(t);if(h|0)D_(f);if(i|0)D_(e);c[a+4>>2]=g;y2(a)}while(0);l=v;return b|0}function p2(){var a=0,b=0;a=C_(20)|0;do if(a){b=C_(2048)|0;c[a+16>>2]=b;if(!b){D_(a);a=0;break}else{c[a>>2]=512;c[a+4>>2]=1024e3;c[a+8>>2]=128;c[a+12>>2]=0;break}}while(0);return a|0}function q2(a){a=a|0;D_(c[a+16>>2]|0);D_(a);return}function r2(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;p=u+4|0;q=u;r=c[b+32>>2]&1;s=b+16|0;e=c[s>>2]|0;t=c[b+4>>2]|0;d=C2(t,0)|0;a:do if(!d){m=(r|0)!=0;n=b+8|0;o=b+12|0;d=0;k=1;b:while(1){g=0;h=d;f=0;c:while(1){d=a[e>>0]|0;if(m){if(d<<24>>24==40)break;if((h|0)!=0&d<<24>>24==41)j=13;else j=14}else if(d<<24>>24==92)switch(a[e+1>>0]|0){case 40:break c;case 41:{j=13;break}default:j=14}else j=14;if((j|0)==13){j=0;i=u2(c[b>>2]|0,-1,-1,-1)|0;c[n>>2]=i;if(!i){d=12;break a}else i=f}else if((j|0)==14){j=0;d=R2(b,e)|0;if(d|0)break a;i=f;e=c[o>>2]|0}d:while(1){e:while(1){d=a[e>>0]|0;switch(d<<24>>24){case 42:case 92:break;default:{if(!m)break e;switch(d<<24>>24){case 123:case 63:case 43:break;default:break e}}}d=d<<24>>24==92;if(m&d)break;f=e+1|0;if(d)switch(a[f>>0]|0){case 123:case 63:case 43:break;default:break e}e=d?f:e;if((!m?(e|0)==((c[s>>2]|0)+1|0):0)?(a[e+-1>>0]|0)==94:0)break;if((a[e>>0]|0)==123){e=S2(e+1|0,r,p,q)|0;if(!e){j=28;break b}d=c[q>>2]|0;f=c[b>>2]|0;if(!d)d=u2(f,-1,-1,-1)|0;else j=36}else{c[p>>2]=0;c[q>>2]=-1;d=a[e>>0]|0;if(d<<24>>24==43){c[p>>2]=1;d=a[e>>0]|0}if(d<<24>>24==63){c[q>>2]=1;d=1}else d=-1;e=e+1|0;f=c[b>>2]|0;j=36}if((j|0)==36){j=0;d=M2(f,c[n>>2]|0,c[p>>2]|0,d,0)|0}c[n>>2]=d;if(!d){d=12;break a}}d=v2(c[b>>2]|0,g,c[n>>2]|0)|0;f=a[e>>0]|0;f:do if(m){if(f<<24>>24==124){j=40;break d}if((h|0)!=0&f<<24>>24==41|f<<24>>24==0)j=47;else{g=d;f=i;continue c}}else{switch(f<<24>>24){case 0:{j=47;break f}case 92:break;default:{g=d;f=i;continue c}}switch(a[e+1>>0]|0){case 124:case 41:break;default:{g=d;f=i;continue c}}d=N2(c[b>>2]|0,i,d)|0;if((a[e+1>>0]|0)==124){f=2;break d}if(!h){d=8;break a}e=e+2|0;f=92}while(0);if((j|0)==47){j=0;d=N2(c[b>>2]|0,i,d)|0;e=f<<24>>24==41?e+1|0:e}d=T2(b,d,D2(t)|0)|0;if(d|0)break a;d=f<<24>>24==0;f=(h|0)<1;if(f&d){j=50;break b}if(f|d){d=8;break a}g=E2(t)|0;h=h+-1|0;i=E2(t)|0}if((j|0)==40){f=1;d=N2(c[b>>2]|0,i,d)|0}g=0;e=e+f|0;f=d}d=B2(t,f)|0;if(d|0)break a;d=B2(t,g)|0;if(d|0)break a;d=C2(t,k)|0;if(d|0)break a;d=h+1|0;k=k+1|0;e=m?e+1|0:e+2|0}if((j|0)==28){d=10;break}else if((j|0)==50){c[b+20>>2]=k;d=0;break}}while(0);l=u;return d|0}function s2(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;x=A2(d)|0;y=(b|0)==0|(f|0)==0;if(!y){c[f+48>>2]=0;c[c[f+36>>2]>>2]=-1}g=f+28|0;z=C_((c[g>>2]<<3)+8|0)|0;do if(!z)g=12;else{c[z>>2]=-1;A=C_((c[g>>2]<<2)+4|0)|0;if(!A){D_(z);g=12;break}c[A>>2]=-1;B=C_((c[g>>2]<<3)+8|0)|0;if(!B){D_(z);D_(A);g=12;break}h=c[g>>2]|0;g=0;do{c[B+(g<<3)>>2]=-1;g=g+1|0}while(g>>>0<=h>>>0);B2(d,e)|0;g=C2(d,0)|0;a:do if((g|0)!=0|(A2(d)|0)<=(x|0)){e=z;n=0;h=0;m=0;l=-1}else{u=f+32|0;v=f+36|0;w=f+16|0;e=z;n=0;h=0;m=0;t=1;l=-1;s=0;while(1){b:do switch(D2(d)|0){case 6:{i=D2(d)|0;g=0;do{j=e+(g<<2)|0;g=g+1|0}while((c[j>>2]|0)>-1);c[j>>2]=i<<1|1;c[e+(g<<2)>>2]=-1;g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[A+(g+-1<<2)>>2]=-1;g=0;j=t;i=s;break}case 0:{q=E2(d)|0;r=q+12|0;j=c[r>>2]|0;if((j|0)>-1){g=0;do{i=e+(g<<2)|0;g=g+1|0}while((c[i>>2]|0)>-1);c[i>>2]=j<<1;c[e+(g<<2)>>2]=-1;if(!y){g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[(c[w>>2]|0)+(j*12|0)+8>>2]=0;if((g|0)>0){g=C_((g<<2)+4|0)|0;if(!g){g=12;j=t;i=s;break b}c[(c[w>>2]|0)+(j*12|0)+8>>2]=g;i=c[A>>2]|0;if((i|0)>-1){k=0;j=g;do{c[j>>2]=i;k=k+1|0;i=c[A+(k<<2)>>2]|0;j=g+(k<<2)|0}while((i|0)>-1);g=j}c[g>>2]=-1}}g=C2(d,c[r>>2]|0)|0;if(g|0){j=t;i=s;break b}g=C2(d,6)|0;if(g|0){j=t;i=s;break b}}c:do switch(c[q>>2]|0){case 0:{p=c[c[q+4>>2]>>2]|0;if((p|0)>-1|(p|0)==-4?(c[e>>2]|0)>-1:0){if(y){c[q+20>>2]=1;g=0}else{g=O2(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}P2(e,f,m)}c[e>>2]=-1;p=t+1|0;o=s;n=n+1|0;m=t}else{p=t;g=0;o=s}break}case 1:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;g=B2(d,q)|0;if(!g){g=C2(d,5)|0;if(!g){g=B2(d,j)|0;if(!g){g=C2(d,0)|0;if(!g){i=k+20|0;g=C2(d,(c[i>>2]|0)+t|0)|0;if(!g){if((c[i>>2]|0)>0){i=(c[j+20>>2]|0)>0;g=i?t:-1;i=t+(i&1)|0}else{g=-1;i=t}g=C2(d,g)|0;if(!g){g=C2(d,4)|0;if(!g){g=B2(d,k)|0;if(!g){p=i;g=C2(d,0)|0;o=s}else{p=i;o=s}}else{p=i;o=s}}else{p=i;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 2:{i=c[q+4>>2]|0;if(y){if((c[e>>2]|0)>-1)g=1;else g=(a[i+12>>0]&1)!=0;g=C2(d,g&1)|0;if(g|0){p=t;o=s;break c}}else{g=C2(d,m)|0;if(g|0){p=t;o=s;break c}g=C2(d,a[i+12>>0]&1)|0;if(g|0){p=t;o=s;break c}}g=B2(d,q)|0;if(!g){g=C2(d,1)|0;if(!g){g=B2(d,c[i>>2]|0)|0;if(!g){g=C2(d,0)|0;if(!g){if((c[e>>2]|0)<=-1?(a[i+12>>0]&1)==0:0){p=t;g=0;o=0;break c}if(y)g=0;else{g=O2(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=(a[i+12>>0]&1)==0?s:1;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}P2(e,f,m)}c[e>>2]=-1;p=t+1|0;o=0;n=n+1|0;m=t}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 3:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;i=(c[e>>2]|0)>-1;p=t+1|0;g=C2(d,i?p:t)|0;if(!g){g=C2(d,i?t:m)|0;if(!g){g=B2(d,e)|0;if(!g){g=C2(d,(c[e>>2]|0)>>>31^1)|0;if(!g){g=B2(d,q)|0;if(!g){g=B2(d,j)|0;if(!g){g=B2(d,k)|0;if(!g){g=C2(d,3)|0;if(!g){g=B2(d,j)|0;if(!g){g=C2(d,0)|0;if(g|0){p=t;o=s;break c}g=C2(d,2)|0;if(g|0){p=t;o=s;break c}g=B2(d,k)|0;if(g|0){p=t;o=s;break c}g=C2(d,0)|0;if(g|0){p=t;o=s;break c}if((c[e>>2]|0)>-1){if(y)g=0;else{g=O2(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}P2(e,f,m)}c[e>>2]=-1;n=n+1|0;m=t;i=p}else{g=0;i=t}t=(c[q+16>>2]|0)>0;p=t?i+2|0:i;o=s;m=t?i+1|0:m}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}default:{p=t;g=0;o=s}}while(0);j=c[r>>2]|0;if((j|0)>-1){i=0;do{k=A+(i<<2)|0;i=i+1|0}while((c[k>>2]|0)>-1);c[k>>2]=j;c[A+(i<<2)>>2]=-1;j=p;i=o}else{j=p;i=o}break}case 1:{g=E2(d)|0;if(y){i=c[(c[c[g+4>>2]>>2]|0)+20>>2]|0;c[g+20>>2]=(D2(d)|0)+i;i=0;l=-1}else{q=D2(d)|0;r=D2(d)|0;i=q;l=(q|0)==0?l:r}g=0;j=t;i=y?s:(i|0)==0&1;break}case 4:{i=D2(d)|0;j=D2(d)|0;g=0;m=(i|0)>-1?i:m;i=s;break}case 5:{g=E2(d)|0;if(y){j=c[g+4>>2]|0;c[g+20>>2]=(c[(c[j+4>>2]|0)+20>>2]|0)+(c[(c[j>>2]|0)+20>>2]|0);g=0;j=t;i=s}else{g=0;j=t;i=s}break}case 2:{while(1)if((c[e>>2]|0)>-1)e=e+4|0;else{g=0;j=t;i=s;break}break}case 3:{j=E2(d)|0;o=E2(d)|0;g=E2(d)|0;e=D2(d)|0;if(y){r=c[g+4>>2]|0;s=g+16|0;c[g+20>>2]=(c[(c[r>>2]|0)+20>>2]|0)+e+(c[(c[r+4>>2]|0)+20>>2]|0)+((c[s>>2]|0)>0?2:0);g=s}else g=g+16|0;e=E2(d)|0;i=D2(d)|0;k=D2(d)|0;if((c[g>>2]|0)>0){if(y)g=0;else{g=Q2(b,j,i)|0;c[(c[u>>2]|0)+(i<<2)>>2]=1;if(!g)g=Q2(b,o,k)|0;c[(c[u>>2]|0)+(k<<2)>>2]=1}n=n+2|0;j=t;i=1}else{g=0;j=t;i=1}break}default:{g=0;j=t;i=s}}while(0);if((g|0)!=0|(A2(d)|0)<=(x|0))break a;else{t=j;s=i}}}while(0);if(!y?(P2(e,f,m),(l|0)>-1):0){i=c[f+36>>2]|0;e=0;while(1){j=i+(e<<2)|0;k=e+1|0;if((c[j>>2]|0)>-1)e=k;else break}c[j>>2]=m;c[i+(k<<2)>>2]=l;c[i+(e+2<<2)>>2]=-1;h=h+1|0}c[f+48>>2]=n;c[f+40>>2]=n;c[f+44>>2]=h;D_(z);D_(A);D_(B)}while(0);return g|0}function t2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;t=y+12|0;x=y+8|0;u=y+4|0;v=y;w=A2(b)|0;c[t>>2]=0;c[x>>2]=0;d=B2(b,d)|0;a:do if(!d){d=C2(b,0)|0;if(!d){b:do if((A2(b)|0)>(w|0)){g=0;i=0;j=0;c:while(1){q=D2(b)|0;r=E2(b)|0;d:do switch(q|0){case 0:{switch(c[r>>2]|0){case 0:{d=c[r+4>>2]|0;r=c[d>>2]|0;if(!((r|0)>-1|(r|0)==-4)){d=j;break d}r=d+8|0;d=(c[r>>2]|0)+j|0;c[r>>2]=d;if((d|0)<=(c[x>>2]|0)){d=j;break d}c[x>>2]=d;d=j;break d}case 3:{h=c[r+4>>2]|0;d=B2(b,c[h+4>>2]|0)|0;if(d|0)break b;d=C2(b,0)|0;if(d|0)break b;d=B2(b,c[h>>2]|0)|0;if(d|0)break b;break}case 1:{h=c[r+4>>2]|0;d=B2(b,c[h+4>>2]|0)|0;if(d|0)break b;d=C2(b,0)|0;if(d|0)break b;d=B2(b,c[h>>2]|0)|0;if(d|0)break b;break}case 2:{h=c[r+4>>2]|0;d=C2(b,j)|0;if(d|0)break b;d=B2(b,r)|0;if(d|0)break b;d=C2(b,1)|0;if(d|0)break b;d=B2(b,c[h>>2]|0)|0;if(d|0)break b;d=C2(b,0)|0;if(d|0)break b;if((c[h+4>>2]|0)<=1?(c[h+8>>2]|0)<=1:0)d=j;else{c[t>>2]=0;d=0}i=i+1|0;break d}default:{d=j;break d}}d=C2(b,0)|0;if(!d)d=j;else break b;break}case 1:{p=r+4|0;o=c[p>>2]|0;q=D2(b)|0;c[t>>2]=q;n=o+4|0;j=c[n>>2]|0;if((j|0)<=1)if((c[o+8>>2]|0)>1){c[u>>2]=0;if((j|0)>0)s=30;else{d=q;h=0;s=37}}else d=q;else{c[u>>2]=0;s=30}e:do if((s|0)==30){d=L2(a,b,c[o>>2]|0,(j|0)>1?1:2,t,f,v,x)|0;if(!d){h=0;k=q;m=1}else{s=34;break c}while(1){d=c[v>>2]|0;if(!h)h=d;else h=v2(a,h,d)|0;if(!h){d=12;s=34;break c}j=c[n>>2]|0;if((m|0)>=(j|0)){d=k;s=37;break e}k=c[t>>2]|0;m=m+1|0;d=L2(a,b,c[o>>2]|0,(m|0)<(j|0)?1:2,t,f,v,x)|0;if(d|0){s=34;break c}}}while(0);if((s|0)==37){s=0;n=o+8|0;k=c[n>>2]|0;if((k|0)==-1){k=c[t>>2]|0;d=L2(a,b,c[o>>2]|0,0,t,0,u,x)|0;if(d|0)break c;j=M2(a,c[u>>2]|0,0,-1,0)|0;c[u>>2]=j;if(!j){d=12;break c}else d=k}else if((j|0)<(k|0)){k=j;j=0;while(1){m=c[t>>2]|0;d=L2(a,b,c[o>>2]|0,0,t,0,v,x)|0;if(d|0){s=49;break c}if(!j){d=c[v>>2]|0;c[u>>2]=d}else{d=v2(a,c[v>>2]|0,j)|0;c[u>>2]=d}if(!d){d=12;s=49;break c}j=u2(a,-1,-1,-1)|0;if(!j){d=12;s=49;break c}j=N2(a,j,d)|0;c[u>>2]=j;if(!j){d=12;s=49;break c}k=k+1|0;if((k|0)>=(c[n>>2]|0)){d=m;break}}}else j=0;c[t>>2]=d;if(h){if(j){h=v2(a,h,j)|0;s=54}}else{h=j;s=54}if((s|0)==54){s=0;if(!h){d=12;break c}}c[p>>2]=c[h+4>>2];c[r>>2]=c[h>>2]}i=i+-1|0;h=d-q+g|0;if(!i){c[t>>2]=h;g=h;i=0;d=h}else g=h;break}default:d=j}while(0);if((A2(b)|0)>(w|0))j=d;else{d=0;break b}}break a}else{d=0;g=0}while(0);w=(c[e>>2]|0)+g|0;x=c[x>>2]|0;c[e>>2]=(x|0)>(w|0)?x:w}}while(0);l=y;return d|0}function u2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=n2(a,0,0,1,20)|0;a=K2(a,0,f)|0;if(!a)a=0;else{c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e}return a|0}function v2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=n2(a,0,0,1,8)|0;a=K2(a,1,e)|0;if(!a)d=0;else{c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}}return d|0}function w2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;j=o+4|0;k=o;m=A2(b)|0;d=B2(b,d)|0;a:do if(!d){d=C2(b,0)|0;if(!d)if((A2(b)|0)>(m|0)){b:while(1){h=D2(b)|0;i=E2(b)|0;c:do switch(h|0){case 0:switch(c[i>>2]|0){case 0:{g=c[i+4>>2]|0;f=c[g>>2]|0;if((f|0)==-4){c[i+8>>2]=0;d=g+8|0;h=F2(a,c[d>>2]|0,0,1114111,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=F2(a,c[d>>2]|0,0,1114111,0,0,c[g+4>>2]|0)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}d=i+8|0;if((f|0)<0){c[d>>2]=1;h=G2(a)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=G2(a)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}else{c[d>>2]=0;d=g+8|0;e=g+4|0;h=F2(a,c[d>>2]|0,f,c[e>>2]|0,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=F2(a,c[d>>2]|0,c[g>>2]|0,c[e>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,-1)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}}case 3:{d=B2(b,i)|0;if(d|0)break a;d=C2(b,1)|0;if(d|0)break a;e=i+4|0;d=B2(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(d|0)break a;d=B2(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(!d)break c;else break a}case 1:{d=B2(b,i)|0;if(d|0)break a;d=C2(b,2)|0;if(d|0)break a;e=i+4|0;d=B2(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(d|0)break a;d=B2(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(!d)break c;else break a}case 2:{d=B2(b,i)|0;if(d|0)break a;d=C2(b,3)|0;if(d|0)break a;d=B2(b,c[c[i+4>>2]>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(!d)break c;else break a}default:break c}case 1:{d=c[i+4>>2]|0;e=c[d>>2]|0;f=d+4|0;g=c[f>>2]|0;if(!(c[e+8>>2]|0))h=(c[g+8>>2]|0)!=0;else h=1;c[i+8>>2]=h&1;h=H2(a,c[e+24>>2]|0,c[g+24>>2]|0,0,0)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=H2(a,c[(c[d>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,0,0)|0;c[i+28>>2]=h;if(!h){d=12;break a}break}case 3:{h=c[i+4>>2]|0;d=c[h>>2]|0;if(!(c[h+4>>2]|0))e=1;else e=(c[d+8>>2]|0)!=0&1;c[i+8>>2]=e;c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];break}case 2:{g=c[i+4>>2]|0;d=c[g>>2]|0;e=d+8|0;if(!(c[e>>2]|0))f=0;else f=(c[(c[g+4>>2]|0)+8>>2]|0)!=0;c[i+8>>2]=f&1;if(c[e>>2]|0){d=I2(b,d,0,0,j)|0;if(d|0)break b;e=C_((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=I2(b,c[g>>2]|0,e,k,0)|0;if(d|0){n=45;break b}d=g+4|0;h=i+24|0;c[h>>2]=H2(a,c[(c[d>>2]|0)+24>>2]|0,c[(c[g>>2]|0)+24>>2]|0,e,c[k>>2]|0)|0;D_(e);if(!(c[h>>2]|0)){d=12;break b}else f=d}else{c[i+24>>2]=c[d+24>>2];f=g+4|0}d=c[f>>2]|0;if(c[d+8>>2]|0){d=I2(b,d,0,0,j)|0;if(d|0)break b;e=C_((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=I2(b,c[f>>2]|0,e,k,0)|0;if(d|0){n=52;break b}i=i+28|0;c[i>>2]=H2(a,c[(c[g>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,e,c[k>>2]|0)|0;D_(e);if(!(c[i>>2]|0)){d=12;break b}}else c[i+28>>2]=c[d+28>>2];break}default:{}}while(0);if((A2(b)|0)<=(m|0)){d=0;break a}}if((n|0)==45)D_(e);else if((n|0)==52)D_(e)}else d=0}while(0);l=o;return d|0}function x2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:while(1){switch(c[a>>2]|0){case 2:{a=c[a+4>>2]|0;if((c[a+8>>2]|0)==-1?(h=c[a>>2]|0,h=z2(c[h+28>>2]|0,c[h+24>>2]|0,b,d,e)|0,(h|0)!=0):0){a=h;break a}break}case 3:{f=c[a+4>>2]|0;a=x2(c[f>>2]|0,b,d,e)|0;if(a|0)break a;a=f+4|0;break}case 1:{f=c[a+4>>2]|0;g=f+4|0;a=z2(c[(c[f>>2]|0)+28>>2]|0,c[(c[g>>2]|0)+24>>2]|0,b,d,e)|0;if(a|0)break a;a=x2(c[f>>2]|0,b,d,e)|0;if(!a)a=g;else break a;break}default:{a=0;break a}}a=c[a>>2]|0}return a|0}function y2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=c[a+4>>2]|0;if(h|0){e=h+4|0;a=c[h>>2]|0;if(c[e>>2]|0){d=0;do{if(c[a+(d<<5)+8>>2]|0){b=c[a+(d<<5)+16>>2]|0;if(b){D_(b);a=c[h>>2]|0}b=c[a+(d<<5)+28>>2]|0;if(b){D_(b);a=c[h>>2]|0}}d=d+1|0}while(d>>>0<(c[e>>2]|0)>>>0)}if(a|0)D_(a);d=h+8|0;a=c[d>>2]|0;if(a|0){if(c[a+8>>2]|0){while(1){b=c[a+16>>2]|0;if(b|0)D_(b);if(!(c[a+40>>2]|0))break;else a=a+32|0}a=c[d>>2]|0}D_(a)}f=h+16|0;a=c[f>>2]|0;if(a|0){g=h+28|0;b=c[g>>2]|0;if(b){e=0;do{d=c[a+(e*12|0)+8>>2]|0;if(d){D_(d);b=c[g>>2]|0;a=c[f>>2]|0}e=e+1|0}while(e>>>0>>0)}D_(a)}a=c[h+32>>2]|0;if(a|0)D_(a);a=c[h+20>>2]|0;if(a|0)D_(a);a=c[h+36>>2]|0;if(a|0)D_(a);D_(h)}return}function z2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[a>>2]|0;h=(g|0)>-1;a:do if(!d)if(h){h=b+32|0;do{if((c[b>>2]|0)>-1?(y=e+(g<<2)|0,c[y>>2]=(c[y>>2]|0)+1,(c[h>>2]|0)>-1):0){g=h;do{y=e+(c[a>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;g=g+32|0}while((c[g>>2]|0)>-1)}a=a+32|0;g=c[a>>2]|0}while((g|0)>-1);g=0}else g=0;else if(h)while(1){h=c[b>>2]|0;b:do if((h|0)>-1){p=a+4|0;q=a+8|0;r=a+16|0;s=a+20|0;t=a+24|0;u=a+28|0;v=a+12|0;e=-1;g=b;while(1){o=h;while(1){if((o|0)!=(e|0))break;g=g+32|0;h=c[g>>2]|0;if((h|0)>-1)o=h;else break b}l=d+(c[f+(c[a>>2]<<2)>>2]<<5)|0;while(1){h=l+8|0;if(!(c[h>>2]|0))break;else l=l+32|0}c[l+40>>2]=0;c[l>>2]=c[p>>2];c[l+4>>2]=c[q>>2];c[h>>2]=d+(c[f+(o<<2)>>2]<<5);c[l+12>>2]=o;h=c[s>>2]|0;e=c[g+16>>2]|c[r>>2]|(h|0?4:0)|(c[t>>2]|0?8:0);i=l+20|0;c[i>>2]=e;j=c[u>>2]|0;if((j|0)>-1){c[i>>2]=e|256;h=j}c[l+24>>2]=h;e=c[t>>2]|0;if(!e)c[l+28>>2]=0;else{h=0;do{n=h;h=h+1|0}while((c[e+(n<<2)>>2]|0)!=0);h=C_(h<<2)|0;c[l+28>>2]=h;if(!h){g=12;break a}k=c[t>>2]|0;e=c[k>>2]|0;if(e){j=0;i=h;do{c[i>>2]=e;j=j+1|0;e=c[k+(j<<2)>>2]|0;i=h+(j<<2)|0}while((e|0)!=0);h=i}c[h>>2]=0}e=c[v>>2]|0;if(!e)h=0;else{h=0;while(1)if((c[e+(h<<2)>>2]|0)>-1)h=h+1|0;else break}k=g+12|0;i=c[k>>2]|0;if(!i)e=0;else{e=0;while(1)if((c[i+(e<<2)>>2]|0)>-1)e=e+1|0;else break}j=l+16|0;i=c[j>>2]|0;if(i|0)D_(i);c[j>>2]=0;h=e+h|0;if((h|0)>0){n=C_((h<<2)+4|0)|0;c[j>>2]=n;if(!n){g=12;break a}e=c[v>>2]|0;if((e|0)!=0?(w=c[e>>2]|0,(w|0)>-1):0){h=0;i=w;do{c[n+(h<<2)>>2]=i;h=h+1|0;i=c[e+(h<<2)>>2]|0}while((i|0)>-1);m=h}else m=0;j=c[k>>2]|0;if((j|0)!=0?(x=c[j>>2]|0,(x|0)>-1):0){k=(m|0)>0;h=m;i=0;l=x;do{c:do if(k){e=0;while(1){if((c[n+(e<<2)>>2]|0)==(l|0))break c;e=e+1|0;if((e|0)>=(m|0)){y=39;break}}}else y=39;while(0);if((y|0)==39){y=0;c[n+(h<<2)>>2]=l;h=h+1|0}i=i+1|0;l=c[j+(i<<2)>>2]|0}while((l|0)>-1)}else h=m;c[n+(h<<2)>>2]=-1}g=g+32|0;h=c[g>>2]|0;if((h|0)<=-1)break;else e=o}}while(0);a=a+32|0;if((c[a>>2]|0)<=-1){g=0;break}}else g=0;while(0);return g|0}function A2(a){a=a|0;return c[a+12>>2]|0}function B2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=J2(a,e)|0;l=d;return b|0}function C2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=J2(a,e)|0;l=d;return b|0}function D2(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function E2(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function F2(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=n2(a,0,0,1,64)|0;if(!a)a=0;else{c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+20>>2]=f;c[a+24>>2]=g;c[a+28>>2]=h;c[a+32>>2]=-1;c[a+36>>2]=-1;c[a+40>>2]=-1}return a|0}function G2(a){a=a|0;a=n2(a,0,0,1,32)|0;if(!a)a=0;else{c[a>>2]=-1;c[a+4>>2]=-1;c[a+8>>2]=-1}return a|0}function H2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(e|0)==0;if(o)n=0;else{g=0;while(1)if((c[e+(g<<2)>>2]|0)>-1)g=g+1|0;else{n=g;break}}h=0;while(1)if((c[b+(h<<5)>>2]|0)>-1)h=h+1|0;else{g=0;break}while(1)if((c[d+(g<<5)>>2]|0)>-1)g=g+1|0;else break;g=n2(a,0,0,1,(g+h<<5)+32|0)|0;a:do if(!g)g=0;else{h=c[b>>2]|0;if((h|0)>-1){m=(n|0)>0;i=0;while(1){c[g+(i<<5)>>2]=h;c[g+(i<<5)+4>>2]=c[b+(i<<5)+4>>2];c[g+(i<<5)+8>>2]=c[b+(i<<5)+8>>2];c[g+(i<<5)+16>>2]=c[b+(i<<5)+16>>2]|f;c[g+(i<<5)+20>>2]=c[b+(i<<5)+20>>2];c[g+(i<<5)+24>>2]=c[b+(i<<5)+24>>2];c[g+(i<<5)+28>>2]=c[b+(i<<5)+28>>2];l=b+(i<<5)+12|0;j=c[l>>2]|0;h=(j|0)==0;if(o&h)h=0;else{if(h)k=0;else{h=0;while(1)if((c[j+(h<<2)>>2]|0)>-1)h=h+1|0;else{k=h;break}}h=n2(a,0,0,0,(k+n<<2)+4|0)|0;if(!h){g=0;break a}if((k|0)>0){l=c[l>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[l+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}else k=0;if(m){j=0;do{c[h+(j+k<<2)>>2]=c[e+(j<<2)>>2];j=j+1|0}while((j|0)!=(n|0));j=n}else j=0;c[h+(j+k<<2)>>2]=-1}c[g+(i<<5)+12>>2]=h;i=i+1|0;h=c[b+(i<<5)>>2]|0;if((h|0)<=-1){n=i;break}}}else n=0;i=c[d>>2]|0;h=g+(n<<5)|0;if((i|0)>-1){m=0;l=n;do{c[h>>2]=i;c[g+(l<<5)+4>>2]=c[d+(m<<5)+4>>2];c[g+(l<<5)+8>>2]=c[d+(m<<5)+8>>2];c[g+(l<<5)+16>>2]=c[d+(m<<5)+16>>2];c[g+(l<<5)+20>>2]=c[d+(m<<5)+20>>2];c[g+(l<<5)+24>>2]=c[d+(m<<5)+24>>2];c[g+(l<<5)+28>>2]=c[d+(m<<5)+28>>2];j=d+(m<<5)+12|0;h=c[j>>2]|0;if(!h)h=0;else{i=0;while(1)if((c[h+(i<<2)>>2]|0)>-1)i=i+1|0;else break;h=n2(a,0,0,0,(i<<2)+4|0)|0;if(!h){g=0;break a}if((i|0)>0){k=c[j>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(i|0))}else i=0;c[h+(i<<2)>>2]=-1}c[g+(l<<5)+12>>2]=h;m=m+1|0;i=c[d+(m<<5)>>2]|0;l=m+n|0;h=g+(l<<5)|0}while((i|0)>-1)}c[h>>2]=-1}while(0);return g|0}function I2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=A2(a)|0;p=(f|0)!=0;if(p)c[f>>2]=0;b=B2(a,b)|0;a:do if(!b){m=(d|0)==0;l=(e|0)==0;if((A2(a)|0)>(o|0))while(1){b=E2(a)|0;b:do switch(c[b>>2]|0){case 0:{b=c[b+4>>2]|0;switch(c[b>>2]|0){case -3:break;case -2:{if(l)break b;c[e>>2]=c[e>>2]|c[b+4>>2];break b}default:break b}h=c[b+4>>2]|0;if((h|0)>-1){c:do if(!m){b=0;while(1){i=d+(b<<2)|0;j=c[i>>2]|0;if((j|0)<=-1)break;if((j|0)==(h|0))break c;else b=b+1|0}c[i>>2]=h;c[d+(b+1<<2)>>2]=-1}while(0);if(p)c[f>>2]=(c[f>>2]|0)+1}break}case 3:{b=c[b+4>>2]|0;h=c[b>>2]|0;if(c[h+8>>2]|0){k=h;n=6;break b}b=c[b+4>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}case 1:{b=c[b+4>>2]|0;h=B2(a,c[b>>2]|0)|0;if(h|0){g=h;break a}k=c[b+4>>2]|0;n=6;break}case 2:{b=c[c[b+4>>2]>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}default:{}}while(0);if((n|0)==6?(n=0,g=B2(a,k)|0,g|0):0)break a;if((A2(a)|0)<=(o|0)){g=0;break a}}else g=0}else g=b;while(0);return g|0}function J2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;d=a+12|0;e=c[d>>2]|0;j=c[a>>2]|0;if((e|0)>=(j|0)){d=c[a+4>>2]|0;if((j|0)<(d|0)?(f=(c[a+8>>2]|0)+j|0,f=(f|0)>(d|0)?d:f,h=a+16|0,i=F_(c[h>>2]|0,f<<2)|0,(i|0)!=0):0){c[a>>2]=f;c[h>>2]=i;c[g>>2]=c[b>>2];J2(a,g)|0;d=0}else d=12}else{c[(c[a+16>>2]|0)+(e<<2)>>2]=c[b>>2];c[d>>2]=(c[d>>2]|0)+1;d=0}l=k;return d|0}function K2(a,b,d){a=a|0;b=b|0;d=d|0;a=n2(a,0,0,1,32)|0;if((d|0)!=0&(a|0)!=0){c[a+4>>2]=d;c[a>>2]=b;c[a+8>>2]=-1;c[a+12>>2]=-1}else a=0;return a|0}function L2(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=A2(d)|0;B2(d,e)|0;e=C2(d,0)|0;a:do if(!e){q=(f&1|0)==0;p=(f&2|0)!=0;o=0;l=1;e=i;while(1){if((A2(d)|0)>(r|0))n=e;else{f=o;e=0;break a}b:while(1){c:while(1){switch(D2(d)|0){case 1:{i=7;break c}case 0:{e=E2(d)|0;switch(c[e>>2]|0){case 0:{i=9;break b}case 3:{i=19;break b}case 1:{i=26;break b}case 2:{i=33;break c}default:{}}break}default:{}}if((A2(d)|0)<=(r|0)){f=o;e=0;break a}}if((i|0)==7)e=E2(d)|0;else if((i|0)==33){f=c[e+4>>2]|0;e=B2(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=C2(d,0)|0;if(e|0){f=o;break a}e=M2(b,c[f>>2]|0,c[f+4>>2]|0,c[f+8>>2]|0,a[f+12>>0]&1)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}e=c[e+4>>2]|0}if((A2(d)|0)>(r|0))n=e;else{f=o;e=0;break a}}if((i|0)==9){m=c[e+4>>2]|0;i=c[m+8>>2]|0;f=c[m>>2]|0;e=c[m+4>>2]|0;if(!((f|0)>-1|(f|0)==-4))if(q|(f|0)!=-3)if((f|0)==-3)if(p&(l|0)!=0){c[h+(e<<2)>>2]=1;f=-3;k=o;l=0}else{f=-3;k=o}else k=o;else{e=-1;f=-1;i=-1;k=o}else{i=(c[g>>2]|0)+i|0;k=o+1|0}e=u2(b,f,e,i)|0;c[n>>2]=e;if(!e)e=12;else{e=c[e+4>>2]|0;c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=0}if((i|0)>(c[j>>2]|0)){c[j>>2]=i;f=n}else f=n}else if((i|0)==19){i=c[e+4>>2]|0;f=i+4|0;e=N2(b,c[i>>2]|0,c[f>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}m=c[e+4>>2]|0;e=B2(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=C2(d,0)|0;if(e|0){f=o;break a}e=B2(d,m+4|0)|0;if(e|0){f=o;break a}e=C2(d,1)|0;if(e|0){f=o;break a}e=B2(d,c[i>>2]|0)|0;if(e|0){f=o;break a}k=o;f=m;e=C2(d,0)|0}else if((i|0)==26){m=c[e+4>>2]|0;i=m+4|0;e=v2(b,c[m>>2]|0,c[i>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}f=c[e+4>>2]|0;c[f>>2]=0;k=f+4|0;c[k>>2]=0;e=B2(d,c[i>>2]|0)|0;if(e|0){f=o;break a}e=C2(d,0)|0;if(e|0){f=o;break a}e=B2(d,k)|0;if(e|0){f=o;break a}e=C2(d,1)|0;if(e|0){f=o;break a}e=B2(d,c[m>>2]|0)|0;if(e|0){f=o;break a}k=o;e=C2(d,0)|0}if(!e){o=k;e=f}else{f=k;break}}}else f=0;while(0);c[g>>2]=(c[g>>2]|0)+f;return e|0}function M2(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=n2(b,0,0,1,16)|0;b=K2(b,2,h)|0;if(!b)b=0;else{c[h>>2]=d;c[h+4>>2]=e;c[h+8>>2]=f;h=h+12|0;a[h>>0]=a[h>>0]&-2|g&1;c[b+16>>2]=c[d+16>>2]}return b|0}function N2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=n2(a,0,0,1,8)|0;a=K2(a,3,e)|0;if((d|0)!=0&(a|0)!=0){c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}else d=0}return d|0}function O2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=n2(a,0,0,0,8)|0;if(((e|0)!=0?(d=u2(a,-3,d,-1)|0,c[e>>2]=d,(d|0)!=0):0)?(f=n2(a,0,0,0,32)|0,c[e+4>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function P2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=c[a>>2]|0;if((f|0)>-1){g=c[b+16>>2]|0;e=0;b=f;do{f=b>>>1;c[((b&1|0)==0?g+(f*12|0)|0:g+(f*12|0)+4|0)>>2]=d;e=e+1|0;b=c[a+(e<<2)>>2]|0}while((b|0)>-1)}c[a>>2]=-1;return}function Q2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=n2(a,0,0,0,8)|0;if(((e|0)!=0?(d=u2(a,-3,d,-1)|0,c[e+4>>2]=d,(d|0)!=0):0)?(f=n2(a,0,0,0,32)|0,c[e>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function R2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;i=b+32|0;h=c[i>>2]|0;g=h&1;a:do switch(a[d>>0]|0){case 91:{e=V2(b,d+1|0)|0;break}case 92:{e=d+1|0;f=W2(e)|0;if(f|0){e=R2(b,f)|0;c[b+12>>2]=d+2;break a}f=a[e>>0]|0;switch(f|0){case 0:{e=5;break a}case 98:{f=u2(c[b>>2]|0,-2,64,-1)|0;break}case 66:{f=u2(c[b>>2]|0,-2,128,-1)|0;break}case 60:{f=u2(c[b>>2]|0,-2,16,-1)|0;break}case 62:{f=u2(c[b>>2]|0,-2,32,-1)|0;break}case 120:{h=d+2|0;i=(a[h>>0]|0)==123;g=i?8:2;h=i?d+3|0:h;e=0;f=0;do{d=X2(a[h+e>>0]|0)|0;if((d|0)<0)break;f=d+(f<<4)|0;e=e+1|0}while((f|0)<1114112&(e|0)<(g|0));e=h+e|0;if(i){if((a[e>>0]|0)!=125){e=9;break a}e=e+1|0}j=c[b>>2]|0;i=b+24|0;k=c[i>>2]|0;c[i>>2]=k+1;f=u2(j,f,f,k)|0;e=e+-1|0;break}case 63:case 43:case 123:if(!g){e=13;break a}else{k=37;break a}case 124:{if(g|0){k=37;break a}e=u2(c[b>>2]|0,-1,-1,-1)|0;k=45;break a}default:{if(!((g|0)==0&(f+-49|0)>>>0<9)){k=37;break a}j=f+-48|0;k=c[b>>2]|0;i=b+24|0;f=c[i>>2]|0;c[i>>2]=f+1;f=u2(k,-4,j,f)|0;k=b+28|0;i=c[k>>2]|0;c[k>>2]=(j|0)<(i|0)?i:j}}d=e+1|0;e=f;k=45;break}case 46:{e=c[b>>2]|0;g=b+24|0;f=c[g>>2]|0;c[g>>2]=f+1;if(h&4){f=u2(e,0,9,f)|0;k=c[b>>2]|0;e=c[g>>2]|0;c[g>>2]=e+1;e=u2(k,11,1114111,e)|0;if((f|0)!=0&(e|0)!=0)e=N2(c[b>>2]|0,f,e)|0;else e=0}else e=u2(e,0,1114111,f)|0;d=d+1|0;k=45;break}case 94:{if((g|0)==0?(c[b+16>>2]|0)!=(d|0):0){e=d;k=37;break a}d=d+1|0;e=u2(c[b>>2]|0,-2,1,-1)|0;k=45;break}case 36:{e=d+1|0;if((g|0)==0?a[e>>0]|0:0){e=d;k=37;break a}d=e;e=u2(c[b>>2]|0,-2,2,-1)|0;k=45;break}case 63:case 43:case 123:case 42:{if(!g){e=d;k=37}else e=13;break}case 124:{if(!g){e=d;k=37}else k=36;break}case 0:{k=36;break}default:{e=d;k=37}}while(0);if((k|0)==36){e=u2(c[b>>2]|0,-1,-1,-1)|0;k=45}else if((k|0)==37){h=B1(j,e,-1)|0;if((h|0)<0)e=2;else{do if(c[i>>2]&2){if((m0(c[j>>2]|0)|0)==0?(l0(c[j>>2]|0)|0)==0:0){k=43;break}i=c[b>>2]|0;n=R$(c[j>>2]|0)|0;g=R$(c[j>>2]|0)|0;f=b+24|0;g=u2(i,n,g,c[f>>2]|0)|0;n=c[b>>2]|0;i=o0(c[j>>2]|0)|0;d=o0(c[j>>2]|0)|0;d=u2(n,i,d,c[f>>2]|0)|0;if((g|0)!=0&(d|0)!=0)g=N2(c[b>>2]|0,g,d)|0;else g=0}else k=43;while(0);if((k|0)==43){g=c[j>>2]|0;f=b+24|0;g=u2(c[b>>2]|0,g,g,c[f>>2]|0)|0}c[f>>2]=(c[f>>2]|0)+1;d=e+h|0;e=g;k=45}}if((k|0)==45)if(!e)e=12;else{c[b+8>>2]=e;c[b+12>>2]=d;e=0}l=m;return e|0}function S2(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+4|0;g=j;b=U2(b,i)|0;if((a[b>>0]|0)==44){b=U2(b+1|0,g)|0;h=c[g>>2]|0;g=c[i>>2]|0}else{i=c[i>>2]|0;c[g>>2]=i;h=i;g=i}do if(!(g>>>0>255|((h|0)>255|(h|0)>-1&(h|0)<(g|0)))){if(!d)if((a[b>>0]|0)==92)b=b+1|0;else{b=0;break}if((a[b>>0]|0)==125){c[e>>2]=g;c[f>>2]=h;b=b+1|0}else b=0}else b=0;while(0);l=j;return b|0}function T2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[b+12>>2]|0)>-1){e=u2(c[a>>2]|0,-1,-1,-1)|0;if((e|0)!=0?(f=v2(c[a>>2]|0,e,b)|0,(f|0)!=0):0){e=c[b+16>>2]|0;c[f+16>>2]=e;g=6}else e=12}else{f=b;e=c[b+16>>2]|0;g=6}if((g|0)==6){c[f+12>>2]=d;c[f+16>>2]=e+1;c[a+8>>2]=f;e=0}return e|0}function U2(b,d){b=b|0;d=d|0;var e=0;c[d>>2]=-1;a:do if(E$(a[b>>0]|0)|0){c[d>>2]=0;e=0;do{c[d>>2]=(e*10|0)+-48+(a[b>>0]|0);b=b+1|0;if(!(E$(a[b>>0]|0)|0))break a;e=c[d>>2]|0}while((e|0)<=255)}while(0);return b|0}function V2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+288|0;e=s+264|0;g=s;c[e>>2]=c[b>>2];h=e+8|0;c[h>>2]=0;c[e+12>>2]=32;p=C_(128)|0;r=e+4|0;c[r>>2]=p;if(!p)d=12;else{f=g+4|0;c[f>>2]=0;p=(a[d>>0]|0)==94;c[g>>2]=p&1;d=Y2(b,p?d+1|0:d,e,g)|0;a:do if(!d){p=(c[g>>2]|0)==0;if(!p){_0(c[r>>2]|0,c[h>>2]|0,4,109);d=_2(e)|0;if(!d){d=12;e=0;break}c[d>>2]=1114112;c[d+4>>2]=1114112;c[d+8>>2]=-1;d=c[f>>2]|0;if(d){e=d<<2;f=n2(c[b>>2]|0,0,0,0,e+4|0)|0;if(!f){d=12;e=0;break}F3(f|0,g+8|0,e|0)|0;c[f+(d<<2)>>2]=0}else f=0}else f=0;m=c[h>>2]|0;if((m|0)>0){n=c[r>>2]|0;o=b+24|0;e=0;d=0;k=0;while(1){j=c[n+(k<<2)>>2]|0;g=c[j>>2]|0;h=j+4|0;i=c[h>>2]|0;do if(!p)if((g|0)>(d|0)){c[j>>2]=d;c[h>>2]=g+-1;d=i+1|0;q=14;break}else{j=i+1|0;d=(j|0)>=(d|0)?j:d;break}else q=14;while(0);if((q|0)==14){q=0;c[j+8>>2]=c[o>>2];c[j+16>>2]=f;j=K2(c[b>>2]|0,0,j)|0;e=N2(c[b>>2]|0,e,j)|0;if(!e){d=12;e=0;break a}}k=k+1|0;if((k|0)>=(m|0)){d=0;break}}}else{d=0;e=0}}else e=0;while(0);D_(c[r>>2]|0);r=b+24|0;c[r>>2]=(c[r>>2]|0)+1;c[b+8>>2]=e}l=s;return d|0}function W2(b){b=b|0;var d=0;d=a[b>>0]|0;b=0;while(1){if((a[63648+(b<<3)>>0]|0)==d<<24>>24)break;b=b+1|0;if((b|0)==12){b=12;break}}return c[63648+(b<<3)+4>>2]|0}function X2(a){a=a|0;var b=0;b=a+-48|0;if(b>>>0<10)return b|0;else{b=a|32;return ((b+-97|0)>>>0<6?b+-87|0:-1)|0}return 0}function Y2(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+32|0;o=t;q=t+4|0;i=B1(o,d,-1)|0;g=a[d>>0]|0;a:do if((i|0)>=1){r=f+4|0;n=b+32|0;h=d;j=i;b:while(1){i=(h|0)==(d|0);if(!(i|g<<24>>24!=93)){s=5;break}c:do if(!(i|g<<24>>24!=45)){switch(a[h+1>>0]|0){case 93:break c;case 45:break;default:{g=11;break a}}if((a[h+2>>0]|0)==93){g=11;break a}}while(0);d:do if(g<<24>>24==91){switch(a[h+1>>0]|0){case 61:case 46:{g=3;break a}case 58:break;default:{s=17;break d}}i=h+2|0;g=0;e:while(1){switch(a[i+g>>0]|0){case 0:{s=16;break b}case 58:break e;default:{}}if((g|0)<13)g=g+1|0;else{s=16;break b}}F3(q|0,i|0,g|0)|0;a[q+g>>0]=0;j=H0(q)|0;if(!j){s=16;break b}h=i+(g+2)|0;if((a[i+(g+1)>>0]|0)!=93){s=16;break b}if(!(c[f>>2]|0)){g=1114111;m=0;k=1;s=25}else{g=c[r>>2]|0;if((g|0)>63){g=12;break a}c[r>>2]=g+1;c[f+8+(g<<2)>>2]=j}}else s=17;while(0);if((s|0)==17){s=0;i=c[o>>2]|0;h=h+j|0;if((a[h>>0]|0)==45?(p=h+1|0,(a[p>>0]|0)!=93):0){h=B1(o,p,-1)|0;g=c[o>>2]|0;if((h|0)<1|(i|0)>(g|0)){g=11;break a}j=0;m=i;h=p+h|0;k=0;s=25}else{j=0;g=i;m=i;k=0;s=25}}if((s|0)==25){s=0;i=_2(e)|0;if(!i){g=12;break a}c[i>>2]=m;c[i+4>>2]=g;c[i+12>>2]=j;c[i+8>>2]=-1;if(!(k|(c[n>>2]&2|0)==0)?($2(e,m,g)|0)!=0:0){g=12;break a}}j=B1(o,h,-1)|0;g=a[h>>0]|0;if((j|0)<1){s=3;break a}}if((s|0)==5){c[b+12>>2]=h+1;g=0;break}else if((s|0)==16){g=4;break}}else s=3;while(0);if((s|0)==3)g=g<<24>>24?2:7;l=t;return g|0}function Z2(a,b){a=a|0;b=b|0;return (c[c[a>>2]>>2]|0)-(c[c[b>>2]>>2]|0)|0}function _2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=c[h>>2]|0;e=a+12|0;f=c[e>>2]|0;if((d|0)>=(f|0))if((f|0)<=32767?(c[e>>2]=f<<1,g=a+4|0,b=F_(c[g>>2]|0,f<<3)|0,(b|0)!=0):0){c[g>>2]=b;d=c[h>>2]|0;i=6}else b=0;else{b=c[a+4>>2]|0;i=6}if((i|0)==6){c[h>>2]=d+1;i=n2(c[a>>2]|0,0,0,1,20)|0;c[b+(d<<2)>>2]=i;b=i}return b|0}function $2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a:do if((b|0)>(d|0))b=0;else while(1){b:do if(!(l0(b)|0)){if(!(m0(b)|0)){b=b+1|0;break}f=o0(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((o0(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}else{f=R$(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((R$(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}while(0);if((g|0)==12){g=0;f=_2(a)|0;if(!f){b=-1;break a}c[f>>2]=h;c[f+4>>2]=e+-1;c[f+8>>2]=-1}if((b|0)>(d|0)){b=0;break}}while(0);return b|0}function a3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;i=c[a+4>>2]|0;j=i+56|0;h=(c[j>>2]&8|0)==0?d:0;a=c[i+40>>2]|0;if((a|0)>0&(h|0)!=0){a=C_(a<<2)|0;if(!a)a=12;else{g=a;d=a;m=3}}else{g=0;d=0;m=3}if((m|0)==3){if(!(c[i+60>>2]|0))a=c3(i,b,g,f,k)|0;else a=b3(i,b,g,f,k)|0;if(!a)d3(h,e,c[j>>2]|0,i,g,c[k>>2]|0);if(g)D_(d)}l=n;return a|0}function b3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=l;l=l+16|0;T=V;c[T>>2]=0;o=e&1;R=e&2;S=a+56|0;n=c[S>>2]&4;U=l2(0,0)|0;a:do if(U){p=n2(U,0,0,0,32)|0;if(!p){m2(U);e=12;break}c[p+24>>2]=0;c[p+28>>2]=0;Q=a+40|0;e=c[Q>>2]|0;if(e){e=C_(e<<2)|0;if(!e){m=0;k=0;j=e;e=12;i=0;h=0;g=0}else{j=e;i=e;C=6}}else{j=0;i=0;C=6}b:do if((C|0)==6){e=c[a+28>>2]|0;if(e){e=C_(e<<3)|0;if(!e){m=e;k=0;e=12;h=0;g=0;break}else{m=e;h=e}}else{m=0;h=0}P=a+52|0;e=c[P>>2]|0;if(e){e=C_(e<<2)|0;if(!e){k=e;e=12;g=0;break}else{k=e;g=e}}else{k=0;g=0}K=a+8|0;L=a+12|0;M=(d|0)==0;N=(d|0)!=0;O=a+32|0;J=(n|0)!=0;I=(o|0)==0;r=b;e=1;q=-1;v=-1;B=0;c:while(1){n=c[Q>>2]|0;if((n|0)>0){o=0;do{c[j+(o<<2)>>2]=-1;if(!M){c[d+(o<<2)>>2]=-1;n=c[Q>>2]|0}o=o+1|0}while((o|0)<(n|0))}n=c[P>>2]|0;if((n|0)>0)H3(g|0,0,n<<2|0)|0;G=e+q|0;e=B1(T,r,4)|0;if((e|0)<1)if((e|0)<0){e=1;break b}else e=1;F=r+e|0;H=c[T>>2]|0;n=c[K>>2]|0;o=n+8|0;if(c[o>>2]|0){w=(G|0)!=0;x=(B|0)==95;y=(G|0)==0;A=J&(B|0)==10;z=(G|0)<1&I;u=n;n=0;t=0;s=o;while(1){r=u+20|0;o=c[r>>2]|0;d:do if(o)if((o&1|0)==0|z|A){if(o&2|0?(E=c[T>>2]|0,!((E|R|0)==0|J&(E|0)==10)):0){q=t;break}do if(o&16|0){if(x){q=t;break d}if(h0(B)|0){q=t;break d}o=c[T>>2]|0;if((o|0)==95)break;if(!(h0(o)|0)){q=t;break d}}while(0);o=c[r>>2]|0;if(o&32){if(x){o=c[T>>2]|0;if((o|0)==95){q=t;break}}else{E=(h0(B)|0)==0;o=c[T>>2]|0;if(E|(o|0)==95){q=t;break}}if(h0(o)|0){q=t;break}o=c[r>>2]|0}q=c[T>>2]|0;do if((q|0)!=0&(w&(o&64|0)!=0)){if(x)o=1;else{o=(h0(B)|0)!=0;q=c[T>>2]|0}if((q|0)==95)if(o){q=t;break d}else break;else if(o^(h0(q)|0)!=0)break;else{q=t;break d}}while(0);if(!(c[r>>2]&128)){C=49;break}o=c[T>>2]|0;if(y|(o|0)==0){q=t;break}if(x)q=1;else{q=(h0(B)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(q){C=49;break}else{q=t;break}else if(q^(h0(o)|0)!=0){q=t;break}else{C=49;break}}else q=t;else C=49;while(0);do if((C|0)==49){C=0;if(!t){n=c[u+16>>2]|0;q=c[s>>2]|0;break}q=p+28|0;o=c[q>>2]|0;if(!o){o=n2(U,0,0,0,32)|0;if(!o){C=53;break c}c[o+24>>2]=p;c[o+28>>2]=0;E=n2(U,0,0,0,c[Q>>2]<<2)|0;c[o+20>>2]=E;if(!E){C=60;break c}c[q>>2]=o;p=o}else p=o;c[p>>2]=G;c[p+4>>2]=F;c[p+8>>2]=c[s>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){q=c[p+20>>2]|0;o=0;do{c[q+(o<<2)>>2]=c[j+(o<<2)>>2];o=o+1|0}while((o|0)<(c[Q>>2]|0))}o=c[u+16>>2]|0;if(!o)q=t;else{q=c[o>>2]|0;if((q|0)<=-1){q=t;break}r=c[p+20>>2]|0;do{o=o+4|0;c[r+(q<<2)>>2]=G;q=c[o>>2]|0}while((q|0)>-1);q=t}}while(0);s=u+40|0;if(!(c[s>>2]|0))break;else{u=u+32|0;t=q}}if(n){o=c[n>>2]|0;if((o|0)>-1)do{c[j+(o<<2)>>2]=G;n=n+4|0;o=c[n>>2]|0}while((o|0)>-1)}else n=0;if(!q)C=171;else{s=G;r=F;w=q;x=n;C=79}}else{n=0;C=171}e:while(1){if((C|0)==79){if((w|0)==(c[L>>2]|0)){if((v|0)>=(s|0)){if(!(N&(v|0)==(s|0))){n=x;C=171;continue}n=c[Q>>2]|0;if(!(f3(n,c[O>>2]|0,j,d)|0)){n=x;C=171;continue}}else{if(M){v=s;n=x;C=171;continue}n=c[Q>>2]|0}if((n|0)>0)n=0;else{v=s;n=x;C=171;continue}while(1){c[d+(n<<2)>>2]=c[j+(n<<2)>>2];n=n+1|0;if((n|0)>=(c[Q>>2]|0)){v=s;n=x;C=171;continue e}}}u=w+8|0;if((c[u>>2]|0)!=0?(c[w+20>>2]&256|0)!=0:0){o=c[w+24>>2]|0;d3(o+1|0,m,c[S>>2]&-9,a,j,s);E=c[m+(o<<3)>>2]|0;o=(c[m+(o<<3)+4>>2]|0)-E|0;if(z$(b+E|0,r+-1|0,o)|0){n=x;C=171;continue}E=(o|0)==0;n=E&1;q=c[w+12>>2]|0;if(E?c[k+(q<<2)>>2]|0:0){n=x;C=171;continue}c[k+(q<<2)>>2]=n;o=o+-1|0;r=r+o|0;o=o+s|0;q=c[T>>2]|0;n=B1(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;D=r+n|0;E=n}else{q=c[T>>2]|0;if(!q){n=x;C=171;continue}n=B1(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;o=s;D=r+n|0;E=n}s=o+e|0;if(!(c[u>>2]|0)){e=E;n=x;C=171;continue}y=(s|0)!=0;z=(q|0)==95;A=(s|0)==0;C=J&(q|0)==10;B=(s|0)<1&I;t=0;n=x;while(1){f:do if((c[w>>2]|0)>>>0<=q>>>0){if((c[w+4>>2]|0)>>>0>>0)break;r=w+20|0;e=c[r>>2]|0;do if(e|0){if(!((e&1|0)==0|B|C))break f;if(e&2|0?(x=c[T>>2]|0,!((x|R|0)==0|J&(x|0)==10)):0)break f;do if(e&16|0){if(z)break f;if(h0(q)|0)break f;e=c[T>>2]|0;if((e|0)==95)break;if(!(h0(e)|0))break f}while(0);e=c[r>>2]|0;if(e&32){if(z){e=c[T>>2]|0;if((e|0)==95)break f}else{x=(h0(q)|0)==0;e=c[T>>2]|0;if(x|(e|0)==95)break f}if(h0(e)|0)break f;e=c[r>>2]|0}o=c[T>>2]|0;do if((o|0)!=0&(y&(e&64|0)!=0)){if(z)e=1;else{e=(h0(q)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(e)break f;else break;else if(e^(h0(o)|0)!=0)break;else break f}while(0);do if(c[r>>2]&128|0){e=c[T>>2]|0;if(A|(e|0)==0)break f;if(z)o=1;else{o=(h0(q)|0)!=0;e=c[T>>2]|0}if((e|0)==95)if(o)break;else break f;else if(o^(h0(e)|0)!=0)break f;else break}while(0);e=c[r>>2]|0;do if(e&4){if(c[S>>2]&2|0)break;if(!(g0(q,c[w+24>>2]|0)|0))break f;e=c[r>>2]|0}while(0);do if(e&4|0){if(!(c[S>>2]&2))break;x=o0(q)|0;e=w+24|0;if(g0(x,c[e>>2]|0)|0)break;x=R$(q)|0;if(!(g0(x,c[e>>2]|0)|0))break f}while(0);if(!(c[r>>2]&8))break;if(e3(c[w+28>>2]|0,q,c[S>>2]&2)|0)break f}while(0);if(!t){t=c[u>>2]|0;n=c[w+16>>2]|0;break}o=p+28|0;e=c[o>>2]|0;if(!e){e=n2(U,0,0,0,32)|0;if(!e){C=145;break c}c[e+24>>2]=p;c[e+28>>2]=0;x=n2(U,0,0,0,c[Q>>2]<<2)|0;c[e+20>>2]=x;if(!x){C=152;break c}c[o>>2]=e;p=e}else p=e;c[p>>2]=s;c[p+4>>2]=D;c[p+8>>2]=c[u>>2];c[p+12>>2]=c[w+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){o=c[p+20>>2]|0;e=0;do{c[o+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)<(c[Q>>2]|0))}e=c[w+16>>2]|0;if(!e)break;o=c[e>>2]|0;if((o|0)<=-1)break;r=c[p+20>>2]|0;do{c[r+(o<<2)>>2]=s;e=e+4|0;o=c[e>>2]|0}while((o|0)>-1)}while(0);u=w+40|0;if(!(c[u>>2]|0))break;else w=w+32|0}if(!t){e=E;C=171;continue}if(n){e=c[n>>2]|0;if((e|0)>-1){do{n=n+4|0;c[j+(e<<2)>>2]=s;e=c[n>>2]|0}while((e|0)>-1);q=v;o=D;e=E}else{q=v;o=D;e=E}}else{q=v;o=D;e=E;n=0}}else if((C|0)==171){C=0;r=c[p+24>>2]|0;if(!r)break;t=c[p+8>>2]|0;if(c[t+20>>2]&256|0)c[k+(c[p+12>>2]<<2)>>2]=0;s=c[p>>2]|0;u=c[p+4>>2]|0;c[T>>2]=c[p+16>>2];q=c[Q>>2]|0;if((q|0)>0){p=c[p+20>>2]|0;o=0;do{c[j+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)<(q|0));p=r;q=v;o=u}else{p=r;q=v;o=u}}r=o;v=q;w=t;x=n;C=79}n=(v|0)>-1;if(n|(c[T>>2]|0)==0){C=180;break}c[T>>2]=H;r=F;q=G;B=H}if((C|0)==53){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==60){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==145){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==152){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==180){c[f>>2]=v;e=(n^1)&1;break}}while(0);m2(U);if(j|0)D_(i);if(m|0)D_(h);if(k)D_(g)}else e=12;while(0);l=V;return e|0}function c3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+16|0;T=W;c[T>>2]=0;k=e&1;Q=e&2;R=a+56|0;j=c[R>>2]&4;if(!d)N=0;else N=c[a+40>>2]|0;P=N<<2;i=a+52|0;e=c[i>>2]|0;h=e<<3;g=h+8|0;e=P+12+h+(g+(O(P,e)|0)<<1)|0;U=C_(e)|0;if(!U)e=12;else{H3(U|0,0,e|0)|0;e=U+P|0;m=e&3;m=e+((m|0)==0?0:4-m|0)|0;e=m+g|0;n=e&3;n=e+((n|0)==0?0:4-n|0)|0;e=n+g|0;M=e&3;M=e+((M|0)==0?0:4-M|0)|0;e=M+h|0;g=e&3;i=c[i>>2]|0;h=(i|0)>0;if(h){e=e+((g|0)==0?0:4-g|0)|0;g=0;while(1){c[n+(g<<3)+4>>2]=e;e=e+P|0;c[m+(g<<3)+4>>2]=e;g=g+1|0;if((g|0)>=(i|0))break;else e=e+P|0}if(h){e=0;do{c[M+(e<<3)>>2]=-1;e=e+1|0}while((e|0)<(i|0))}}e=B1(T,b,4)|0;if((e|0)<1)if((e|0)<0)e=1;else{i=1;V=11}else{i=e;V=11}a:do if((V|0)==11){L=a+8|0;K=(j|0)!=0;E=(k|0)==0;F=(N|0)>0;G=a+12|0;H=(N|0)<1;I=a+44|0;J=a+32|0;C=a+36|0;D=(N|0)==0;h=0;v=b+i|0;u=0;j=0;e=-1;g=m;A=U;x=m;w=n;while(1){if((e|0)<0){a=c[L>>2]|0;k=a+8|0;b:do if(c[k>>2]|0){p=(u|0)!=0;q=(h|0)==95;r=(u|0)==0;t=K&(h|0)==10;s=(u|0)<1&E;while(1){c:while(1){o=a+12|0;if((c[M+(c[o>>2]<<3)>>2]|0)>=(u|0))break;n=a+20|0;b=c[n>>2]|0;if(!b){V=46;break}d:do if((b&1|0)==0|s|t){if(b&2|0?(B=c[T>>2]|0,!((B|Q|0)==0|K&(B|0)==10)):0)break;do if(b&16|0){if(q)break d;if(h0(h)|0)break d;b=c[T>>2]|0;if((b|0)==95)break;if(!(h0(b)|0))break d}while(0);b=c[n>>2]|0;if(b&32){if(q){b=c[T>>2]|0;if((b|0)==95)break}else{B=(h0(h)|0)==0;b=c[T>>2]|0;if(B|(b|0)==95)break}if(h0(b)|0)break;b=c[n>>2]|0}m=c[T>>2]|0;do if((m|0)!=0&(p&(b&64|0)!=0)){if(q)b=1;else{b=(h0(h)|0)!=0;m=c[T>>2]|0}if((m|0)==95)if(b)break d;else break;else if(b^(h0(m)|0)!=0)break;else break d}while(0);if(!(c[n>>2]&128)){V=46;break c}b=c[T>>2]|0;if(r|(b|0)==0)break;if(q)m=1;else{m=(h0(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(m){V=46;break c}else break;else if(m^(h0(b)|0)!=0)break;else{V=46;break c}}while(0);k=a+40|0;if(!(c[k>>2]|0))break b;else a=a+32|0}if((V|0)==46){V=0;c[g>>2]=c[k>>2];if(F)H3(c[g+4>>2]|0,-1,P|0)|0;k=c[a+16>>2]|0;if(k|0?(S=c[k>>2]|0,(S|0)>-1):0){m=g+4|0;b=S;do{if((b|0)<(N|0))c[(c[m>>2]|0)+(b<<2)>>2]=u;k=k+4|0;b=c[k>>2]|0}while((b|0)>-1)}k=(c[g>>2]|0)!=(c[G>>2]|0);if(k|H){j=k?j:1;e=k?e:u;k=g+4|0}else{k=g+4|0;j=c[k>>2]|0;e=0;do{c[d+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)!=(N|0));j=1;e=u}B=c[o>>2]|0;c[M+(B<<3)>>2]=u;c[M+(B<<3)+4>>2]=k;g=g+8|0}k=a+40|0;if(!(c[k>>2]|0))break;else a=a+32|0}}while(0);c[g>>2]=0;g=c[T>>2]|0;if(!g)break;else h=g}else{if(D)break;h=c[T>>2]|0;if(!((g|0)!=(x|0)&(h|0)!=0))break}B=u+i|0;g=B1(T,v,4)|0;if((g|0)<1)if((g|0)<0){e=1;break a}else i=1;else i=g;z=v+i|0;if((j|0)!=0&(c[I>>2]|0)!=0){if(!(c[x>>2]|0))g=w;else{o=c[C>>2]|0;p=c[o>>2]|0;q=(p|0)>-1;n=x;g=w;do{m=n+4|0;e:do if(q){k=0;b=p;do{a=c[o+((k|1)<<2)>>2]|0;if((b|0)>=(N|0))break e;j=c[m>>2]|0;if((c[j+(a<<2)>>2]|0)==(c[d+(a<<2)>>2]|0)?(c[j+(b<<2)>>2]|0)<(c[d+(b<<2)>>2]|0):0)break e;k=k+2|0;b=c[o+(k<<2)>>2]|0}while((b|0)>-1);k=m;V=75}else{k=m;j=c[m>>2]|0;V=75}while(0);if((V|0)==75){V=0;c[g>>2]=c[n>>2];v=g+4|0;y=c[v>>2]|0;c[v>>2]=j;c[k>>2]=y;g=g+8|0}n=n+8|0}while((c[n>>2]|0)!=0)}c[g>>2]=0;y=x;j=0}else{y=w;w=x}k=c[w>>2]|0;if(!k){k=A;g=y}else{r=(B|0)!=0;s=(h|0)==95;t=(B|0)==0;v=K&(h|0)==10;u=(B|0)<1&E;q=w;a=A;g=y;while(1){b=k+8|0;if(c[b>>2]|0){p=q+4|0;o=a;n=b;while(1){f:do if((c[k>>2]|0)>>>0<=h>>>0?(c[k+4>>2]|0)>>>0>=h>>>0:0){m=k+20|0;a=c[m>>2]|0;do if(a|0){if(!((a&1|0)==0|u|v)){a=o;break f}if(a&2|0?(A=c[T>>2]|0,!((A|Q|0)==0|K&(A|0)==10)):0){a=o;break f}do if(a&16|0){if(s){a=o;break f}if(h0(h)|0){a=o;break f}a=c[T>>2]|0;if((a|0)==95)break;if(!(h0(a)|0)){a=o;break f}}while(0);a=c[m>>2]|0;if(a&32){if(s){a=c[T>>2]|0;if((a|0)==95){a=o;break f}}else{A=(h0(h)|0)==0;a=c[T>>2]|0;if(A|(a|0)==95){a=o;break f}}if(h0(a)|0){a=o;break f}a=c[m>>2]|0}b=c[T>>2]|0;do if((b|0)!=0&(r&(a&64|0)!=0)){if(s)a=1;else{a=(h0(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(a){a=o;break f}else break;else if(a^(h0(b)|0)!=0)break;else{a=o;break f}}while(0);do if(c[m>>2]&128|0){a=c[T>>2]|0;if(t|(a|0)==0){a=o;break f}if(s)b=1;else{b=(h0(h)|0)!=0;a=c[T>>2]|0}if((a|0)==95)if(b)break;else{a=o;break f}else if(b^(h0(a)|0)!=0){a=o;break f}else break}while(0);a=c[m>>2]|0;do if(a&4){if(c[R>>2]&2|0)break;if(!(g0(h,c[k+24>>2]|0)|0)){a=o;break f}a=c[m>>2]|0}while(0);do if(a&4|0){if(!(c[R>>2]&2))break;A=o0(h)|0;a=k+24|0;if(g0(A,c[a>>2]|0)|0)break;A=R$(h)|0;if(!(g0(A,c[a>>2]|0)|0)){a=o;break f}}while(0);if(!(c[m>>2]&8))break;if(e3(c[k+28>>2]|0,h,c[R>>2]&2)|0){a=o;break f}}while(0);if(F){b=c[p>>2]|0;a=0;do{c[o+(a<<2)>>2]=c[b+(a<<2)>>2];a=a+1|0}while((a|0)!=(N|0))}a=c[k+16>>2]|0;do if(a|0){b=c[a>>2]|0;if((b|0)<=-1)break;do{if((b|0)<(N|0))c[o+(b<<2)>>2]=B;a=a+4|0;b=c[a>>2]|0}while((b|0)>-1)}while(0);a=c[k+12>>2]|0;b=M+(a<<3)|0;if((c[b>>2]|0)>=(B|0)){a=c[M+(a<<3)+4>>2]|0;b=c[a>>2]|0;if(!(f3(N,c[J>>2]|0,o,b)|0)){a=o;break}c[a>>2]=o;if((c[n>>2]|0)!=(c[G>>2]|0)){a=b;break}if(F)e=0;else{j=1;a=b;e=B;break}while(1){c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0;if((e|0)==(N|0)){j=1;a=b;e=B;break f}}}A=c[n>>2]|0;c[g>>2]=A;x=g+4|0;m=c[x>>2]|0;c[x>>2]=o;c[b>>2]=B;c[M+(a<<3)+4>>2]=x;do if((c[G>>2]|0)==(A|0)){if((e|0)==-1)if(F)e=0;else{e=B;j=1;break}else{if(!F)break;if((c[o>>2]|0)>(c[d>>2]|0))break;else e=0}do{c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0}while((e|0)<(N|0));e=B;j=1}while(0);a=m;g=g+8|0}else a=o;while(0);n=k+40|0;if(!(c[n>>2]|0))break;else{k=k+32|0;o=a}}}q=q+8|0;k=c[q>>2]|0;if(!k){k=a;break}}}c[g>>2]=0;v=z;u=B;A=k;x=y}c[f>>2]=e;e=e>>>31}while(0);D_(U)}l=W;return e|0}function d3(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((d&8|0)==0&(g|0)>-1?(m=c[e+16>>2]|0,n=c[e+28>>2]|0,l=(a|0)!=0&(n|0)!=0,l):0){k=c[e+48>>2]|0;j=0;do{d=c[m+(j*12|0)>>2]|0;if((d|0)==(k|0))i=g;else i=c[f+(d<<2)>>2]|0;h=b+(j<<3)|0;c[h>>2]=i;d=c[m+(j*12|0)+4>>2]|0;if((d|0)==(k|0))d=g;else d=c[f+(d<<2)>>2]|0;e=b+(j<<3)+4|0;c[e>>2]=d;if((d|0)==-1|(i|0)==-1){c[e>>2]=-1;c[h>>2]=-1}j=j+1|0}while(j>>>0>>0&j>>>0>>0);if(l){d=0;do{i=b+(d<<3)+4|0;j=c[m+(d*12|0)+8>>2]|0;if(j|0?(o=c[j>>2]|0,(o|0)>-1):0){k=b+(d<<3)|0;h=0;f=o;e=c[k>>2]|0;do{if(!((e|0)>=(c[b+(f<<3)>>2]|0)?(c[i>>2]|0)<=(c[b+(f<<3)+4>>2]|0):0)){c[i>>2]=-1;c[k>>2]=-1;e=-1}h=h+1|0;f=c[j+(h<<2)>>2]|0}while((f|0)>-1)}d=d+1|0}while(d>>>0>>0&d>>>0>>0)}else d=0}else d=0;if(d>>>0>>0)H3(b+(d<<3)|0,-1,a-d<<3|0)|0;return}function e3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;a:do if(!e)d=0;else{f=(d|0)==0;d=e;while(1){if(f){if(g0(b,d)|0){d=1;break a}}else{e=R$(b)|0;if(g0(e,c[a>>2]|0)|0){d=1;break a}e=o0(b)|0;if(g0(e,c[a>>2]|0)|0){d=1;break a}}a=a+4|0;d=c[a>>2]|0;if(!d){d=0;break}}}while(0);return d|0}function f3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((a|0)>0){f=0;while(1){h=c[d+(f<<2)>>2]|0;g=c[e+(f<<2)>>2]|0;if(!(c[b+(f<<2)>>2]|0)){if((h|0)<(g|0)){f=1;break a}if((h|0)>(g|0)){f=0;break a}}else{if((h|0)>(g|0)){f=1;break a}if((h|0)<(g|0)){f=0;break a}}f=f+1|0;if((f|0)>=(a|0)){f=0;break}}}else f=0;while(0);return f|0}function g3(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=t0(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0>>0?i:k;F3(b|0,h|0,i|0)|0;c[g>>2]=(c[g>>2]|0)+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(K$(f)|0)break;h=nb[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)u0(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)u0(f);return e|0}function h3(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(t0(a)|0)==0;a=i3(a)|0}else a=i3(a)|0;return a|0}function i3(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=nb[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function j3(a){a=a|0;(c[a+76>>2]|0)>-1?t0(a)|0:0;return c[a+60>>2]|0}function k3(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[15653]|0;if((c[f+76>>2]|0)>-1)g=t0(f)|0;else g=0;do if((D1(b,f)|0)<0)b=-1;else{if((a[f+75>>0]|0)!=10?(d=f+20|0,e=c[d>>2]|0,e>>>0<(c[f+16>>2]|0)>>>0):0){c[d>>2]=e+1;a[e>>0]=10;b=0;break}b=(F1(f,10)|0)>>31}while(0);if(g|0)u0(f);return b|0}function l3(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+48|0;i=k+24|0;h=k+16|0;g=k;d=k+28|0;b=d;e=150604;f=b+20|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));e=d+13|0;b=0;while(1){h1(e)|0;c[g>>2]=d;c[g+4>>2]=32962;c[g+8>>2]=384;f=N_(Ha(5,g|0)|0)|0;if((f|0)>-1){j=4;break}if((b|0)<99)b=b+1|0;else{b=0;break}}if((j|0)==4){c[h>>2]=d;wa(10,h|0)|0;b=z1(f,150624)|0;if(!b){c[i>>2]=f;Ja(6,i|0)|0;b=0}}l=k;return b|0}function m3(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(t0(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=J$(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=J$(a)|0;break}}while(0);return b|0}function n3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(t0(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=F1(d,b)|0;u0(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=F1(d,b)|0}while(0);return e|0}function o3(a){a=a|0;return h3(a)|0}function p3(){}function q3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function r3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=q3(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function s3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function t3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (z=d,a-c>>>0|0)|0}function u3(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0} +function v3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (z=o,p)|0}else{p=u3(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (z=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (z=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((u3(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=s3(m|0,l|0,-1,-1)|0;d=z;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;t3(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=t3(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (z=o,p)|0}function w3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return v3(a,b,c,d,0)|0}function x3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;v3(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function y3(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>c;return a>>>c|(b&(1<>c-32|0}function z3(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function A3(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255|0}function C3(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function D3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;q=q+1|0;c[a>>2]=q;while((f|0)<(e|0)){if(!(c[d+(f<<3)>>2]|0)){c[d+(f<<3)>>2]=q;c[d+((f<<3)+4)>>2]=b;c[d+((f<<3)+8)>>2]=0;z=e;return d|0}f=f+1|0}e=e*2|0;d=F_(d|0,8*(e+1|0)|0)|0;d=D3(a|0,b|0,d|0,e|0)|0;z=e;return d|0}function E3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;while((f|0)<(d|0)){e=c[b+(f<<3)>>2]|0;if(!e)break;if((e|0)==(a|0))return c[b+((f<<3)+4)>>2]|0;f=f+1|0}return 0}function F3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return Ra(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function G3(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else F3(b,c,d)|0;return b|0}function H3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function I3(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){W()|0;va(12);return -1}c[i>>2]=b;if((b|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=d;va(12);return -1}return d|0}function J3(a){a=a|0;return +gb[a&1]()}function K3(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;return +hb[a&7](+b,+c,+d)}function L3(a,b){a=a|0;b=b|0;return +ib[a&1](b|0)}function M3(a){a=a|0;return jb[a&3]()|0}function N3(a,b){a=a|0;b=b|0;return kb[a&63](b|0)|0}function O3(a,b,c){a=a|0;b=b|0;c=c|0;return lb[a&127](b|0,c|0)|0}function P3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return mb[a&3](b|0,c|0,+d,+e)|0}function Q3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return nb[a&63](b|0,c|0,d|0)|0}function R3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ob[a&127](b|0,c|0,d|0,e|0)|0}function S3(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return pb[a&127](b|0,c|0,d|0,e|0,f|0)|0}function T3(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return qb[a&1](b|0,c|0,d|0,e|0,f|0,g|0)|0}function U3(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return rb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function V3(a){a=a|0;sb[a&15]()}function W3(a,b){a=a|0;b=b|0;tb[a&127](b|0)}function X3(a,b,c){a=a|0;b=b|0;c=c|0;ub[a&63](b|0,c|0)}function Y3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;vb[a&127](b|0,c|0,d|0)}function Z3(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;wb[a&15](b|0,c|0,d|0,+e,+f,g|0)}function _3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;xb[a&31](b|0,c|0,d|0,e|0)}function $3(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;yb[a&15](b|0,c|0,d|0,e|0,f|0)}function a4(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;zb[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function b4(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Ab[a&0](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function c4(){S(0);return 0.0}function d4(a,b,c){a=+a;b=+b;c=+c;S(1);return 0.0}function e4(a){a=a|0;S(2);return 0.0}function f4(){S(3);return 0}function g4(a){a=a|0;S(4);return 0}function h4(a,b){a=a|0;b=b|0;S(5);return 0}function i4(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(6);return 0}function j4(a,b,c){a=a|0;b=b|0;c=c|0;S(7);return 0}function k4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(8);return 0}function l4(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(9);return 0}function m4(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(10);return 0}function n4(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;S(11);return 0}function o4(){S(12)}function p4(a){a=a|0;S(13)}function q4(a,b){a=a|0;b=b|0;S(14)}function r4(a,b,c){a=a|0;b=b|0;c=c|0;S(15)}function s4(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;S(16)}function t4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(17)}function u4(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(18)}function v4(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(19)}function w4(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;S(20)} + +// EMSCRIPTEN_END_FUNCS +var gb=[c4,FL];var hb=[d4,RF,QF,SF,TF,d4,d4,d4];var ib=[e4,ML];var jb=[f4,eq,EH,vI];var kb=[g4,eh,zg,Nm,Om,Fy,Iy,sN,tN,iP,jP,kP,lP,mP,nP,oP,pP,K_,Ib,bC,Al,Dl,an,vH,ay,Sy,$x,AH,FH,by,eN,uH,jN,kN,bV,C_,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4];var lb=[h4,hy,Ey,Jy,EK,FK,wK,sK,aK,KT,LT,MT,NT,OT,PT,RT,ST,TT,UT,VT,WT,XT,YT,ZT,_T,$T,aU,bU,cU,dU,eU,fU,gU,hU,iU,jU,kU,lU,mU,nU,wX,xX,zX,WX,XX,YX,ZX,_X,$X,aY,bY,UY,VY,XY,jY,kY,mY,$B,pg,dh,Gh,ii,Ai,Lk,Jk,Bl,El,$o,oq,Kq,Mq,Oq,Pq,Rq,Qq,ar,is,ns,ps,tu,mB,lB,kB,gD,Ty,xH,tD,JD,ED,FD,GE,D1,n3,zL,NM,xx,PR,Ex,Gx,fN,b$,oQ,JT,ZU,_U,F_,kX,lX,mX,Z2,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4];var mb=[i4,qt,vt,i4];var nb=[j4,Jm,Mu,kw,sw,Bw,Gw,Dy,Hy,HI,AM,zR,AX,YY,nY,L_,M_,Q_,R_,G0,Pw,Zm,Au,tp,os,Iw,eD,Y0,vA,g1,BL,DI,sO,WU,HY,yZ,sZ,CZ,P1,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4];var ob=[k4,Lm,Wq,Nu,mw,uw,Cx,AA,Dx,Wx,jy,ly,wy,vy,Ky,Oy,Qy,xI,CM,VN,TN,PP,BR,XR,WR,pX,qX,rX,sX,tX,uX,vX,yX,CX,NY,OY,PY,QY,RY,SY,TY,WY,_Y,cY,dY,eY,fY,gY,hY,iY,lY,pY,Lw,Az,iD,DL,QV,TV,_V,jW,sW,yW,wW,zW,iX,DZ,XW,JY,KY,zZ,AZ,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4];var pb=[l4,iy,bK,xK,DX,EX,UX,VX,pZ,$Y,aZ,qY,rY,nX,oX,FZ,GZ,HZ,IZ,KZ,LZ,MZ,NZ,OZ,QZ,RZ,SZ,TZ,UZ,PZ,s_,t_,j_,c_,VZ,WZ,XZ,ZZ,YZ,_Z,$Z,a_,b_,d_,e_,f_,g_,h_,i_,k_,l_,m_,n_,r_,p_,o_,q_,y_,u_,v_,w_,x_,z_,A_,B_,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4];var qb=[m4,AU];var rb=[n4,rZ,BZ,n4];var sb=[o4,EL,BH,CH,DH,HH,IH,JH,FR,o4,o4,o4,o4,o4,o4,o4];var tb=[p4,Ob,Pb,Tb,Ub,Vb,nc,oc,Mc,Nc,Oc,Pc,Qc,Rc,Sc,cd,dd,gd,hd,id,jd,kd,ld,md,yd,zd,Ad,Cd,Dd,Ed,Fd,Gd,Hd,Id,Jd,Ud,Vd,Wd,Yd,Zd,_d,$d,ae,be,ce,de,ee,ge,te,ue,ve,we,He,Ie,Je,Le,Ye,Ze,_e,af,bf,cf,df,ef,ff,gf,hf,jf,sf,tf,uf,vf,Yf,Tf,rm,bm,fp,Go,ao,co,Np,Op,Zl,_l,fo,no,po,Ao,my,IJ,_J,KJ,JJ,uK,fJ,iJ,qP,vP,Mf,Fl,Ko,Oo,gp,D_,ax,jD,cF,ER,lO,mN,yI,YR,zU,UU,VU,$U,p4,p4,p4,p4,p4,p4,p4,p4,p4,p4,p4,p4];var ub=[q4,Uc,Zc,od,td,Qd,me,Ce,Re,pf,Bf,Ly,cK,GK,yK,tK,YJ,ZJ,CK,DK,tP,xP,PI,Sw,fD,GH,dN,AT,yU,XU,YU,aV,cV,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4];var vb=[r4,Wb,Xb,_b,Lc,Tc,Vc,Yc,nd,pd,sd,Ld,Md,Pd,he,ie,le,xe,ye,Be,Me,Ne,Qe,kf,lf,of,wf,xf,Af,qk,rk,sk,Km,lw,tw,Zw,ny,Py,wz,BA,YC,BG,wI,II,hJ,BM,EM,UN,SN,rP,sP,uP,wP,yP,AR,nT,mT,qx,Sx,bz,Ez,Hz,zH,CL,BI,hN,lN,oT,qT,rT,zT,BT,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4];var wb=[s4,xE,yE,zE,AE,BE,CE,DE,EE,s4,s4,s4,s4,s4,s4,s4];var xb=[t4,Yb,Wc,qd,Bd,Nd,Xd,je,ze,Oe,$e,mf,yf,Pf,Of,Nf,Lf,Kf,Jf,mc,If,Hf,ky,$J,vK,BX,ZY,oY,_0,gN,iN,LY];var yb=[u4,ed,Kd,Rd,fe,Ke,Cl,hD,nN,u4,u4,u4,u4,u4,u4,u4];var zb=[v4,Zb,Xc,rd,Od,ke,Ae,Pe,nf,zf,oN,v4,v4,v4,v4,v4];var Ab=[w4];return{___errno_location:O_,___muldi3:r3,___udivdi3:w3,___uremdi3:x3,_bitshift64Ashr:y3,_bitshift64Lshr:z3,_bitshift64Shl:A3,_dtextract:zw,_free:D_,_htons:M0,_i64Add:s3,_i64Subtract:t3,_llvm_bswap_i16:B3,_llvm_bswap_i32:C3,_malloc:C_,_memalign:I_,_memcpy:F3,_memmove:G3,_memset:H3,_realloc:F_,_saveSetjmp:D3,_sbrk:I3,_testSetjmp:E3,_vizCreateFile:Kb,_vizLastErrorMessage:Jb,_vizRenderFromString:Nb,_vizSetNop:Mb,_vizSetY_invert:Lb,dynCall_d:J3,dynCall_dddd:K3,dynCall_di:L3,dynCall_i:M3,dynCall_ii:N3,dynCall_iii:O3,dynCall_iiidd:P3,dynCall_iiii:Q3,dynCall_iiiii:R3,dynCall_iiiiii:S3,dynCall_iiiiiii:T3,dynCall_iiiiiiiiiii:U3,dynCall_v:V3,dynCall_vi:W3,dynCall_vii:X3,dynCall_viii:Y3,dynCall_viiiddi:Z3,dynCall_viiii:_3,dynCall_viiiii:$3,dynCall_viiiiii:a4,dynCall_viiiiiiiii:b4,establishStackSpace:Eb,getTempRet0:Hb,runPostSets:p3,setTempRet0:Gb,setThrew:Fb,stackAlloc:Bb,stackRestore:Db,stackSave:Cb}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _dtextract=Module["_dtextract"]=asm["_dtextract"];var _free=Module["_free"]=asm["_free"];var _htons=Module["_htons"]=asm["_htons"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i16=Module["_llvm_bswap_i16"]=asm["_llvm_bswap_i16"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memalign=Module["_memalign"]=asm["_memalign"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _realloc=Module["_realloc"]=asm["_realloc"];var _saveSetjmp=Module["_saveSetjmp"]=asm["_saveSetjmp"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _testSetjmp=Module["_testSetjmp"]=asm["_testSetjmp"];var _vizCreateFile=Module["_vizCreateFile"]=asm["_vizCreateFile"];var _vizLastErrorMessage=Module["_vizLastErrorMessage"]=asm["_vizLastErrorMessage"];var _vizRenderFromString=Module["_vizRenderFromString"]=asm["_vizRenderFromString"];var _vizSetNop=Module["_vizSetNop"]=asm["_vizSetNop"];var _vizSetY_invert=Module["_vizSetY_invert"]=asm["_vizSetY_invert"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_dddd=Module["dynCall_dddd"]=asm["dynCall_dddd"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=asm["dynCall_iiiiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiiddi=Module["dynCall_viiiddi"]=asm["dynCall_viiiddi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];Module["asm"]=asm;Module["ccall"]=ccall;Module["Pointer_stringify"]=Pointer_stringify;Module["UTF8ToString"]=UTF8ToString;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module["locateFile"]==="function"){memoryInitializer=Module["locateFile"](memoryInitializer)}else if(Module["memoryInitializerPrefixURL"]){memoryInitializer=Module["memoryInitializerPrefixURL"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")});function doBrowserLoad(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,(function(){throw"could not load memory initializer "+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + + return Module; +}; + +function render(instance, src, options) { + var i; + for (i = 0; i < options.files.length; i++) { + instance['ccall']('vizCreateFile', 'number', ['string', 'string'], [options.files[i].path, options.files[i].data]); + } + + instance['ccall']('vizSetY_invert', 'number', ['number'], [options.yInvert ? 1 : 0]); + instance['ccall']('vizSetNop', 'number', ['number'], [options.nop ? options.nop : 0]); + + var resultPointer = instance['ccall']('vizRenderFromString', 'number', ['string', 'string', 'string'], [src, options.format, options.engine]); + var resultString = instance['Pointer_stringify'](resultPointer); + instance['ccall']('free', 'number', ['number'], [resultPointer]); + + var errorMessagePointer = instance['ccall']('vizLastErrorMessage', 'number', [], []); + var errorMessageString = instance['Pointer_stringify'](errorMessagePointer); + instance['ccall']('free', 'number', ['number'], [errorMessagePointer]); + + if (errorMessageString != '') { + throw new Error(errorMessageString); + } + + return resultString; +} + +if (typeof importScripts === "function") { + var instance = Module(); + + onmessage = function(event) { + var id = event.data.id; + var src = event.data.src; + var options = event.data.options; + + try { + var result = render(instance, src, options); + postMessage({ id: id, result: result }); + } catch (e) { + var error; + if (e instanceof Error) { + error = { message: e.message, fileName: e.fileName, lineNumber: e.lineNumber }; + } else { + error = { message: e.toString() }; + } + postMessage({ id: id, error: error }); + } + } +} + +if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = { render: render, Module: Module }; +} else if (typeof define === 'function' && define.amd) { + define(function() { return { render: render, Module: Module }; }); +} + +if (typeof global.Viz !== 'undefined') { + global.Viz.render = render; + global.Viz.Module = Module; +} + +})(typeof self !== 'undefined' ? self : this); diff --git a/resources/public/index.min.js b/resources/public/index.min.js new file mode 100644 index 0000000..f72fa3d --- /dev/null +++ b/resources/public/index.min.js @@ -0,0 +1 @@ +!function(r,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((r=r||self)["@hpcc-js/wasm"]={})}(this,(function(r){"use strict";function t(r,t){return r(t={exports:{}},t.exports),t.exports}var e=t((function(r,t){var e,n=(e="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(r){var t,n=void 0!==(r=r||{})?r:{},o={};for(t in n)n.hasOwnProperty(t)&&(o[t]=n[t]);var i,a="./this.program",s="";document.currentScript&&(s=document.currentScript.src),e&&(s=e),s=0!==s.indexOf("blob:")?s.substr(0,s.lastIndexOf("/")+1):"",i=function(r){var t=new XMLHttpRequest;return t.open("GET",r,!1),t.send(null),t.responseText};var u,c,f=n.print||console.log.bind(console),l=n.printErr||console.warn.bind(console);for(t in o)o.hasOwnProperty(t)&&(n[t]=o[t]);o=null,n.arguments&&n.arguments,n.thisProgram&&(a=n.thisProgram),n.quit&&n.quit,n.wasmBinary&&(u=n.wasmBinary),n.noExitRuntime&&n.noExitRuntime,"object"!=typeof WebAssembly&&l("no native wasm support detected");var d=new WebAssembly.Table({initial:153,maximum:153,element:"anyfunc"}),p=!1;function m(r,t){r||H("Assertion failed: "+t)}var h,y,v,_,w,g="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function E(r,t,e){for(var n=t+e,o=t;r[o]&&!(o>=n);)++o;if(o-t>16&&r.subarray&&g)return g.decode(r.subarray(t,o));for(var i="";t>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function k(r,t){return r?E(v,r,t):""}function b(r,t,e,n){if(!(n>0))return 0;for(var o=e,i=e+n-1,a=0;a=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&r.charCodeAt(++a)),s<=127){if(e>=i)break;t[e++]=s}else if(s<=2047){if(e+1>=i)break;t[e++]=192|s>>6,t[e++]=128|63&s}else if(s<=65535){if(e+2>=i)break;t[e++]=224|s>>12,t[e++]=128|s>>6&63,t[e++]=128|63&s}else{if(e+3>=i)break;t[e++]=240|s>>18,t[e++]=128|s>>12&63,t[e++]=128|s>>6&63,t[e++]=128|63&s}}return t[e]=0,e-o}function D(r){for(var t=0,e=0;e=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&r.charCodeAt(++e)),n<=127?++t:t+=n<=2047?2:n<=65535?3:4}return t}function S(r){h=r,n.HEAP8=y=new Int8Array(r),n.HEAP16=new Int16Array(r),n.HEAP32=_=new Int32Array(r),n.HEAPU8=v=new Uint8Array(r),n.HEAPU16=new Uint16Array(r),n.HEAPU32=new Uint32Array(r),n.HEAPF32=new Float32Array(r),n.HEAPF64=w=new Float64Array(r)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var F=n.TOTAL_MEMORY||16777216;function P(r){for(;r.length>0;){var t=r.shift();if("function"!=typeof t){var e=t.func;"number"==typeof e?void 0===t.arg?n.dynCall_v(e):n.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}(c=n.wasmMemory?n.wasmMemory:new WebAssembly.Memory({initial:F/65536}))&&(h=c.buffer),F=h.byteLength,S(h),_[2080]=5251360;var x=[],A=[],M=[],C=[],R=!1,O=Math.abs,j=Math.ceil,T=Math.floor,z=Math.min,B=0,N=null;function L(r){B++,n.monitorRunDependencies&&n.monitorRunDependencies(B)}function I(r){if(B--,n.monitorRunDependencies&&n.monitorRunDependencies(B),0==B&&N){var t=N;N=null,t()}}function H(r){throw n.onAbort&&n.onAbort(r),f(r+=""),l(r),p=!0,r="abort("+r+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(r)}function U(r){return String.prototype.startsWith?r.startsWith("data:application/octet-stream;base64,"):0===r.indexOf("data:application/octet-stream;base64,")}n.preloadedImages={},n.preloadedAudios={};var W,q,Y,J="expatlib.wasm";function V(){try{if(u)return new Uint8Array(u);throw"both async and sync fetching of the wasm failed"}catch(r){H(r)}}U(J)||(W=J,J=n.locateFile?n.locateFile(W,s):s+W);var X={1184:function(r){var t=n.getCache(n.CExpatJS)[r];if(!t.hasOwnProperty("startElement"))throw"a JSImplementation must implement all functions, you forgot CExpatJS::startElement.";t.startElement()},1404:function(r){var t=n.getCache(n.CExpatJS)[r];if(!t.hasOwnProperty("endElement"))throw"a JSImplementation must implement all functions, you forgot CExpatJS::endElement.";t.endElement()},1616:function(r){var t=n.getCache(n.CExpatJS)[r];if(!t.hasOwnProperty("characterData"))throw"a JSImplementation must implement all functions, you forgot CExpatJS::characterData.";t.characterData()}};function G(){var r=function(){var r=new Error;if(!r.stack){try{throw new Error}catch(t){r=t}if(!r.stack)return"(no stack trace available)"}return r.stack.toString()}();return n.extraStackTrace&&(r+="\n"+n.extraStackTrace()),r.replace(/\b_Z[\w\d_]+/g,(function(r){return r==r?r:r+" ["+r+"]"}))}A.push({func:function(){dr()}});var Z=42,K={splitPath:function(r){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1)},normalizeArray:function(r,t){for(var e=0,n=r.length-1;n>=0;n--){var o=r[n];"."===o?r.splice(n,1):".."===o?(r.splice(n,1),e++):e&&(r.splice(n,1),e--)}if(t)for(;e;e--)r.unshift("..");return r},normalize:function(r){var t="/"===r.charAt(0),e="/"===r.substr(-1);return(r=K.normalizeArray(r.split("/").filter((function(r){return!!r})),!t).join("/"))||t||(r="."),r&&e&&(r+="/"),(t?"/":"")+r},dirname:function(r){var t=K.splitPath(r),e=t[0],n=t[1];return e||n?(n&&(n=n.substr(0,n.length-1)),e+n):"."},basename:function(r){if("/"===r)return"/";var t=r.lastIndexOf("/");return-1===t?r:r.substr(t+1)},extname:function(r){return K.splitPath(r)[3]},join:function(){var r=Array.prototype.slice.call(arguments,0);return K.normalize(r.join("/"))},join2:function(r,t){return K.normalize(r+"/"+t)}};function $(r){return n.___errno_location&&(_[n.___errno_location()>>2]=r),r}var Q={resolve:function(){for(var r="",t=!1,e=arguments.length-1;e>=-1&&!t;e--){var n=e>=0?arguments[e]:er.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";r=n+"/"+r,t="/"===n.charAt(0)}return(t?"/":"")+(r=K.normalizeArray(r.split("/").filter((function(r){return!!r})),!t).join("/"))||"."},relative:function(r,t){function e(r){for(var t=0;t=0&&""===r[e];e--);return t>e?[]:r.slice(t,e-t+1)}r=Q.resolve(r).substr(1),t=Q.resolve(t).substr(1);for(var n=e(r.split("/")),o=e(t.split("/")),i=Math.min(n.length,o.length),a=i,s=0;s0&&(f(E(r.output,0)),r.output=[])}},default_tty1_ops:{put_char:function(r,t){null===t||10===t?(l(E(r.output,0)),r.output=[]):0!=t&&r.output.push(t)},flush:function(r){r.output&&r.output.length>0&&(l(E(r.output,0)),r.output=[])}}},tr={ops_table:null,mount:function(r){return tr.createNode(null,"/",16895,0)},createNode:function(r,t,e,n){if(er.isBlkdev(e)||er.isFIFO(e))throw new er.ErrnoError(63);tr.ops_table||(tr.ops_table={dir:{node:{getattr:tr.node_ops.getattr,setattr:tr.node_ops.setattr,lookup:tr.node_ops.lookup,mknod:tr.node_ops.mknod,rename:tr.node_ops.rename,unlink:tr.node_ops.unlink,rmdir:tr.node_ops.rmdir,readdir:tr.node_ops.readdir,symlink:tr.node_ops.symlink},stream:{llseek:tr.stream_ops.llseek}},file:{node:{getattr:tr.node_ops.getattr,setattr:tr.node_ops.setattr},stream:{llseek:tr.stream_ops.llseek,read:tr.stream_ops.read,write:tr.stream_ops.write,allocate:tr.stream_ops.allocate,mmap:tr.stream_ops.mmap,msync:tr.stream_ops.msync}},link:{node:{getattr:tr.node_ops.getattr,setattr:tr.node_ops.setattr,readlink:tr.node_ops.readlink},stream:{}},chrdev:{node:{getattr:tr.node_ops.getattr,setattr:tr.node_ops.setattr},stream:er.chrdev_stream_ops}});var o=er.createNode(r,t,e,n);return er.isDir(o.mode)?(o.node_ops=tr.ops_table.dir.node,o.stream_ops=tr.ops_table.dir.stream,o.contents={}):er.isFile(o.mode)?(o.node_ops=tr.ops_table.file.node,o.stream_ops=tr.ops_table.file.stream,o.usedBytes=0,o.contents=null):er.isLink(o.mode)?(o.node_ops=tr.ops_table.link.node,o.stream_ops=tr.ops_table.link.stream):er.isChrdev(o.mode)&&(o.node_ops=tr.ops_table.chrdev.node,o.stream_ops=tr.ops_table.chrdev.stream),o.timestamp=Date.now(),r&&(r.contents[t]=o),o},getFileDataAsRegularArray:function(r){if(r.contents&&r.contents.subarray){for(var t=[],e=0;e=t)){t=Math.max(t,e*(e<1048576?2:1.125)|0),0!=e&&(t=Math.max(t,256));var n=r.contents;r.contents=new Uint8Array(t),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage:function(r,t){if(r.usedBytes!=t){if(0==t)return r.contents=null,void(r.usedBytes=0);if(!r.contents||r.contents.subarray){var e=r.contents;return r.contents=new Uint8Array(t),e&&r.contents.set(e.subarray(0,Math.min(t,r.usedBytes))),void(r.usedBytes=t)}if(r.contents||(r.contents=[]),r.contents.length>t)r.contents.length=t;else for(;r.contents.length=r.node.usedBytes)return 0;var a=Math.min(r.node.usedBytes-o,n);if(a>8&&i.subarray)t.set(i.subarray(o,o+a),e);else for(var s=0;s0||o+n8)throw new er.ErrnoError(32);for(var o=K.normalizeArray(r.split("/").filter((function(r){return!!r})),!1),i=er.root,a="/",s=0;s40)throw new er.ErrnoError(32)}}return{path:a,node:i}},getPath:function(r){for(var t;;){if(er.isRoot(r)){var e=r.mount.mountpoint;return t?"/"!==e[e.length-1]?e+"/"+t:e+t:e}t=t?r.name+"/"+t:r.name,r=r.parent}},hashName:function(r,t){for(var e=0,n=0;n>>0)%er.nameTable.length},hashAddNode:function(r){var t=er.hashName(r.parent.id,r.name);r.name_next=er.nameTable[t],er.nameTable[t]=r},hashRemoveNode:function(r){var t=er.hashName(r.parent.id,r.name);if(er.nameTable[t]===r)er.nameTable[t]=r.name_next;else for(var e=er.nameTable[t];e;){if(e.name_next===r){e.name_next=r.name_next;break}e=e.name_next}},lookupNode:function(r,t){var e=er.mayLookup(r);if(e)throw new er.ErrnoError(e,r);for(var n=er.hashName(r.id,t),o=er.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===r.id&&i===t)return o}return er.lookup(r,t)},createNode:function(r,t,e,n){er.FSNode||(er.FSNode=function(r,t,e,n){r||(r=this),this.parent=r,this.mount=r.mount,this.mounted=null,this.id=er.nextInode++,this.name=t,this.mode=e,this.node_ops={},this.stream_ops={},this.rdev=n},er.FSNode.prototype={},Object.defineProperties(er.FSNode.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(r){r?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(r){r?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return er.isDir(this.mode)}},isDevice:{get:function(){return er.isChrdev(this.mode)}}}));var o=new er.FSNode(r,t,e,n);return er.hashAddNode(o),o},destroyNode:function(r){er.hashRemoveNode(r)},isRoot:function(r){return r===r.parent},isMountpoint:function(r){return!!r.mounted},isFile:function(r){return 32768==(61440&r)},isDir:function(r){return 16384==(61440&r)},isLink:function(r){return 40960==(61440&r)},isChrdev:function(r){return 8192==(61440&r)},isBlkdev:function(r){return 24576==(61440&r)},isFIFO:function(r){return 4096==(61440&r)},isSocket:function(r){return 49152==(49152&r)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(r){var t=er.flagModes[r];if(void 0===t)throw new Error("Unknown file open mode: "+r);return t},flagsToPermissionString:function(r){var t=["r","w","rw"][3&r];return 512&r&&(t+="w"),t},nodePermissions:function(r,t){return er.ignorePermissions||(-1===t.indexOf("r")||292&r.mode)&&(-1===t.indexOf("w")||146&r.mode)&&(-1===t.indexOf("x")||73&r.mode)?0:2},mayLookup:function(r){var t=er.nodePermissions(r,"x");return t||(r.node_ops.lookup?0:2)},mayCreate:function(r,t){try{return er.lookupNode(r,t),20}catch(r){}return er.nodePermissions(r,"wx")},mayDelete:function(r,t,e){var n;try{n=er.lookupNode(r,t)}catch(r){return r.errno}var o=er.nodePermissions(r,"wx");if(o)return o;if(e){if(!er.isDir(n.mode))return 54;if(er.isRoot(n)||er.getPath(n)===er.cwd())return 10}else if(er.isDir(n.mode))return 31;return 0},mayOpen:function(r,t){return r?er.isLink(r.mode)?32:er.isDir(r.mode)&&("r"!==er.flagsToPermissionString(t)||512&t)?31:er.nodePermissions(r,er.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd:function(r,t){r=r||0,t=t||er.MAX_OPEN_FDS;for(var e=r;e<=t;e++)if(!er.streams[e])return e;throw new er.ErrnoError(33)},getStream:function(r){return er.streams[r]},createStream:function(r,t,e){er.FSStream||(er.FSStream=function(){},er.FSStream.prototype={},Object.defineProperties(er.FSStream.prototype,{object:{get:function(){return this.node},set:function(r){this.node=r}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var n=new er.FSStream;for(var o in r)n[o]=r[o];r=n;var i=er.nextfd(t,e);return r.fd=i,er.streams[i]=r,r},closeStream:function(r){er.streams[r]=null},chrdev_stream_ops:{open:function(r){var t=er.getDevice(r.node.rdev);r.stream_ops=t.stream_ops,r.stream_ops.open&&r.stream_ops.open(r)},llseek:function(){throw new er.ErrnoError(70)}},major:function(r){return r>>8},minor:function(r){return 255&r},makedev:function(r,t){return r<<8|t},registerDevice:function(r,t){er.devices[r]={stream_ops:t}},getDevice:function(r){return er.devices[r]},getMounts:function(r){for(var t=[],e=[r];e.length;){var n=e.pop();t.push(n),e.push.apply(e,n.mounts)}return t},syncfs:function(r,t){"function"==typeof r&&(t=r,r=!1),er.syncFSRequests++,er.syncFSRequests>1&&l("warning: "+er.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var e=er.getMounts(er.root.mount),n=0;function o(r){return er.syncFSRequests--,t(r)}function i(r){if(r)return i.errored?void 0:(i.errored=!0,o(r));++n>=e.length&&o(null)}e.forEach((function(t){if(!t.type.syncfs)return i(null);t.type.syncfs(t,r,i)}))},mount:function(r,t,e){var n,o="/"===e,i=!e;if(o&&er.root)throw new er.ErrnoError(10);if(!o&&!i){var a=er.lookupPath(e,{follow_mount:!1});if(e=a.path,n=a.node,er.isMountpoint(n))throw new er.ErrnoError(10);if(!er.isDir(n.mode))throw new er.ErrnoError(54)}var s={type:r,opts:t,mountpoint:e,mounts:[]},u=r.mount(s);return u.mount=s,s.root=u,o?er.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:function(r){var t=er.lookupPath(r,{follow_mount:!1});if(!er.isMountpoint(t.node))throw new er.ErrnoError(28);var e=t.node,n=e.mounted,o=er.getMounts(n);Object.keys(er.nameTable).forEach((function(r){for(var t=er.nameTable[r];t;){var e=t.name_next;-1!==o.indexOf(t.mount)&&er.destroyNode(t),t=e}})),e.mounted=null;var i=e.mount.mounts.indexOf(n);e.mount.mounts.splice(i,1)},lookup:function(r,t){return r.node_ops.lookup(r,t)},mknod:function(r,t,e){var n=er.lookupPath(r,{parent:!0}).node,o=K.basename(r);if(!o||"."===o||".."===o)throw new er.ErrnoError(28);var i=er.mayCreate(n,o);if(i)throw new er.ErrnoError(i);if(!n.node_ops.mknod)throw new er.ErrnoError(63);return n.node_ops.mknod(n,o,t,e)},create:function(r,t){return t=void 0!==t?t:438,t&=4095,t|=32768,er.mknod(r,t,0)},mkdir:function(r,t){return t=void 0!==t?t:511,t&=1023,t|=16384,er.mknod(r,t,0)},mkdirTree:function(r,t){for(var e=r.split("/"),n="",o=0;othis.length-1||r<0)){var t=r%this.chunkSize,e=r/this.chunkSize|0;return this.getter(e)[t]}},i.prototype.setDataGetter=function(r){this.getter=r},i.prototype.cacheLength=function(){var r=new XMLHttpRequest;if(r.open("HEAD",e,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error("Couldn't load "+e+". Status: "+r.status);var t,n=Number(r.getResponseHeader("Content-length")),o=(t=r.getResponseHeader("Accept-Ranges"))&&"bytes"===t,i=(t=r.getResponseHeader("Content-Encoding"))&&"gzip"===t,a=1048576;o||(a=n);var s=this;s.setDataGetter((function(r){var t=r*a,o=(r+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=function(r,t){if(r>t)throw new Error("invalid range ("+r+", "+t+") or no bytes requested!");if(t>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",e,!1),n!==a&&o.setRequestHeader("Range","bytes="+r+"-"+t),"undefined"!=typeof Uint8Array&&(o.responseType="arraybuffer"),o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+e+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):ur(o.responseText||"",!0)}(t,o)),void 0===s.chunks[r])throw new Error("doXHR failed!");return s.chunks[r]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,f("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a={isDevice:!1,url:e},s=er.createFile(r,t,a,n,o);a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(s.stream_ops).forEach((function(r){var t=s.stream_ops[r];u[r]=function(){if(!er.forceLoadFile(s))throw new er.ErrnoError(29);return t.apply(null,arguments)}})),u.read=function(r,t,e,n,o){if(!er.forceLoadFile(s))throw new er.ErrnoError(29);var i=r.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var u=0;u>2]=n.dev,_[e+4>>2]=0,_[e+8>>2]=n.ino,_[e+12>>2]=n.mode,_[e+16>>2]=n.nlink,_[e+20>>2]=n.uid,_[e+24>>2]=n.gid,_[e+28>>2]=n.rdev,_[e+32>>2]=0,Y=[n.size>>>0,(q=n.size,+O(q)>=1?q>0?(0|z(+T(q/4294967296),4294967295))>>>0:~~+j((q-+(~~q>>>0))/4294967296)>>>0:0)],_[e+40>>2]=Y[0],_[e+44>>2]=Y[1],_[e+48>>2]=4096,_[e+52>>2]=n.blocks,_[e+56>>2]=n.atime.getTime()/1e3|0,_[e+60>>2]=0,_[e+64>>2]=n.mtime.getTime()/1e3|0,_[e+68>>2]=0,_[e+72>>2]=n.ctime.getTime()/1e3|0,_[e+76>>2]=0,Y=[n.ino>>>0,(q=n.ino,+O(q)>=1?q>0?(0|z(+T(q/4294967296),4294967295))>>>0:~~+j((q-+(~~q>>>0))/4294967296)>>>0:0)],_[e+80>>2]=Y[0],_[e+84>>2]=Y[1],0},doMsync:function(r,t,e,n,o){var i=v.slice(r,r+e);er.msync(t,i,o,e,n)},doMkdir:function(r,t){return"/"===(r=K.normalize(r))[r.length-1]&&(r=r.substr(0,r.length-1)),er.mkdir(r,t,0),0},doMknod:function(r,t,e){switch(61440&t){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return er.mknod(r,t,e),0},doReadlink:function(r,t,e){if(e<=0)return-28;var n=er.readlink(r),o=Math.min(e,D(n)),i=y[t+o];return b(n,v,t,e+1),y[t+o]=i,o},doAccess:function(r,t){if(-8&t)return-28;var e;if(!(e=er.lookupPath(r,{follow:!0}).node))return-44;var n="";return 4&t&&(n+="r"),2&t&&(n+="w"),1&t&&(n+="x"),n&&er.nodePermissions(e,n)?-2:0},doDup:function(r,t,e){var n=er.getStream(e);return n&&er.close(n),er.open(r,t,0,e,e).fd},doReadv:function(r,t,e,n){for(var o=0,i=0;i>2],s=_[t+(8*i+4)>>2],u=er.read(r,y,a,s,n);if(u<0)return-1;if(o+=u,u>2],s=_[t+(8*i+4)>>2],u=er.write(r,y,a,s,n);if(u<0)return-1;o+=u}return o},varargs:0,get:function(r){return nr.varargs+=4,_[nr.varargs-4>>2]},getStr:function(){return k(nr.get())},getStreamFromFD:function(r){void 0===r&&(r=nr.get());var t=er.getStream(r);if(!t)throw new er.ErrnoError(8);return t},get64:function(){var r=nr.get();return nr.get(),r},getZero:function(){nr.get()}};function or(r){try{return c.grow(r-h.byteLength+65535>>16),S(c.buffer),1}catch(r){}}var ir={};function ar(){if(!ar.strings){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:a||"./this.program"};for(var t in ir)r[t]=ir[t];var e=[];for(var t in r)e.push(t+"="+r[t]);ar.strings=e}return ar.strings}function sr(r,t){sr.array||(sr.array=[]);var e,n=sr.array;for(n.length=0;e=v[r++];)100===e||102===e?(t=t+7&-8,n.push(w[t>>3]),t+=8):(t=t+3&-4,n.push(_[t>>2]),t+=4);return n}function ur(r,t,e){var n=e>0?e:D(r)+1,o=new Array(n),i=b(r,o,0,o.length);return t&&(o.length=i),o}er.staticInit();var cr={h:function(r,t){nr.varargs=t;try{return Z}catch(r){return void 0!==er&&r instanceof er.ErrnoError||H(r),-r.errno}},e:function(){H()},a:function(r,t,e){var n=sr(t,e);return X[r].apply(null,n)},c:function(r,t,e){v.set(v.subarray(t,t+e),r)},d:function(r){var t=v.length;if(r>2147418112)return!1;for(var e,n,o=1;o<=4;o*=2){var i=t*(1+.2/o);if(i=Math.min(i,r+100663296),or(Math.min(2147418112,((e=Math.max(16777216,r,i))%(n=65536)>0&&(e+=n-e%n),e))))return!0}return!1},f:function(r,t){var e=ar(),n=0;return e.forEach((function(e,o){var i=t+n;_[r+4*o>>2]=i,function(r,t,e){for(var n=0;n>0]=r.charCodeAt(n);e||(y[t>>0]=0)}(e,i),n+=e.length+1})),0},g:function(r,t){var e=ar();_[r>>2]=e.length;var n=0;return e.forEach((function(r){n+=r.length+1})),_[t>>2]=n,0},j:function(r){try{var t=nr.getStreamFromFD(r);return er.close(t),0}catch(r){return void 0!==er&&r instanceof er.ErrnoError||H(r),r.errno}},i:function(r,t,e,n,o){try{var i=nr.getStreamFromFD(r),a=4294967296*e+(t>>>0);return a<=-9007199254740992||a>=9007199254740992?-61:(er.llseek(i,a,n),Y=[i.position>>>0,(q=i.position,+O(q)>=1?q>0?(0|z(+T(q/4294967296),4294967295))>>>0:~~+j((q-+(~~q>>>0))/4294967296)>>>0:0)],_[o>>2]=Y[0],_[o+4>>2]=Y[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(r){return void 0!==er&&r instanceof er.ErrnoError||H(r),r.errno}},b:function(r,t,e,n){try{var o=nr.getStreamFromFD(r),i=nr.doWritev(o,t,e);return _[n>>2]=i,0}catch(r){return void 0!==er&&r instanceof er.ErrnoError||H(r),r.errno}},k:function(r){var t=Date.now();return _[r>>2]=t/1e3|0,_[r+4>>2]=t%1e3*1e3|0,0},memory:c,table:d},fr=function(){var r={a:cr};function t(r,t){var e=r.exports;n.asm=e,I()}function e(r){t(r.instance)}function o(t){return(u||"function"!=typeof fetch?new Promise((function(r,t){r(V())})):fetch(J,{credentials:"same-origin"}).then((function(r){if(!r.ok)throw"failed to load wasm binary file at '"+J+"'";return r.arrayBuffer()})).catch((function(){return V()}))).then((function(t){return WebAssembly.instantiate(t,r)})).then(t,(function(r){l("failed to asynchronously prepare wasm: "+r),H(r)}))}if(L(),n.instantiateWasm)try{return n.instantiateWasm(r,t)}catch(r){return l("Module.instantiateWasm callback failed with error: "+r),!1}return function(){if(u||"function"!=typeof WebAssembly.instantiateStreaming||U(J)||"function"!=typeof fetch)return o(e);fetch(J,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(e,(function(r){l("wasm streaming compile failed: "+r),l("falling back to ArrayBuffer instantiation"),o(e)}))}))}(),{}}();n.asm=fr;var lr,dr=n.___wasm_call_ctors=function(){return(dr=n.___wasm_call_ctors=n.asm.l).apply(null,arguments)},pr=n._emscripten_bind_CExpat_CExpat_0=function(){return(pr=n._emscripten_bind_CExpat_CExpat_0=n.asm.m).apply(null,arguments)},mr=n._emscripten_bind_CExpat_create_0=function(){return(mr=n._emscripten_bind_CExpat_create_0=n.asm.n).apply(null,arguments)},hr=n._emscripten_bind_CExpat_destroy_0=function(){return(hr=n._emscripten_bind_CExpat_destroy_0=n.asm.o).apply(null,arguments)},yr=n._emscripten_bind_CExpat_parse_1=function(){return(yr=n._emscripten_bind_CExpat_parse_1=n.asm.p).apply(null,arguments)},vr=n._emscripten_bind_CExpat_tag_0=function(){return(vr=n._emscripten_bind_CExpat_tag_0=n.asm.q).apply(null,arguments)},_r=n._emscripten_bind_CExpat_attrs_0=function(){return(_r=n._emscripten_bind_CExpat_attrs_0=n.asm.r).apply(null,arguments)},wr=n._emscripten_bind_CExpat_content_0=function(){return(wr=n._emscripten_bind_CExpat_content_0=n.asm.s).apply(null,arguments)},gr=n._emscripten_bind_CExpat_startElement_0=function(){return(gr=n._emscripten_bind_CExpat_startElement_0=n.asm.t).apply(null,arguments)},Er=n._emscripten_bind_CExpat_endElement_0=function(){return(Er=n._emscripten_bind_CExpat_endElement_0=n.asm.u).apply(null,arguments)},kr=n._emscripten_bind_CExpat_characterData_0=function(){return(kr=n._emscripten_bind_CExpat_characterData_0=n.asm.v).apply(null,arguments)},br=n._emscripten_bind_CExpat___destroy___0=function(){return(br=n._emscripten_bind_CExpat___destroy___0=n.asm.w).apply(null,arguments)},Dr=n._emscripten_bind_CExpatJS_CExpatJS_0=function(){return(Dr=n._emscripten_bind_CExpatJS_CExpatJS_0=n.asm.x).apply(null,arguments)},Sr=n._emscripten_bind_CExpatJS_startElement_0=function(){return(Sr=n._emscripten_bind_CExpatJS_startElement_0=n.asm.y).apply(null,arguments)},Fr=n._emscripten_bind_CExpatJS_endElement_0=function(){return(Fr=n._emscripten_bind_CExpatJS_endElement_0=n.asm.z).apply(null,arguments)},Pr=n._emscripten_bind_CExpatJS_characterData_0=function(){return(Pr=n._emscripten_bind_CExpatJS_characterData_0=n.asm.A).apply(null,arguments)},xr=n._emscripten_bind_CExpatJS___destroy___0=function(){return(xr=n._emscripten_bind_CExpatJS___destroy___0=n.asm.B).apply(null,arguments)},Ar=n._emscripten_bind_VoidPtr___destroy___0=function(){return(Ar=n._emscripten_bind_VoidPtr___destroy___0=n.asm.C).apply(null,arguments)},Mr=n._malloc=function(){return(Mr=n._malloc=n.asm.D).apply(null,arguments)};function Cr(r){function t(){lr||(lr=!0,p||(R=!0,n.noFSInit||er.init.initialized||er.init(),rr.init(),P(A),er.ignorePermissions=!1,P(M),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)r=n.postRun.shift(),C.unshift(r);var r;P(C)}()))}B>0||(function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)r=n.preRun.shift(),x.unshift(r);var r;P(x)}(),B>0||(n.setStatus?(n.setStatus("Running..."),setTimeout((function(){setTimeout((function(){n.setStatus("")}),1),t()}),1)):t()))}if(n._free=function(){return(n._free=n.asm.E).apply(null,arguments)},n.___errno_location=function(){return(n.___errno_location=n.asm.F).apply(null,arguments)},n.stackAlloc=function(){return(n.stackAlloc=n.asm.G).apply(null,arguments)},n.dynCall_vi=function(){return(n.dynCall_vi=n.asm.H).apply(null,arguments)},n.asm=fr,n.then=function(r){if(lr)r(n);else{var t=n.onRuntimeInitialized;n.onRuntimeInitialized=function(){t&&t(),r(n)}}return n},N=function r(){lr||Cr(),lr||(N=r)},n.run=Cr,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();function Rr(){}function Or(r){return(r||Rr).__cache__}function jr(r,t){var e=Or(t),n=e[r];return n||((n=Object.create((t||Rr).prototype)).ptr=r,e[r]=n)}Cr(),Rr.prototype=Object.create(Rr.prototype),Rr.prototype.constructor=Rr,Rr.prototype.__class__=Rr,Rr.__cache__={},n.WrapperObject=Rr,n.getCache=Or,n.wrapPointer=jr,n.castObject=function(r,t){return jr(r.ptr,t)},n.NULL=jr(0),n.destroy=function(r){if(!r.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";r.__destroy__(),delete Or(r.__class__)[r.ptr]},n.compare=function(r,t){return r.ptr===t.ptr},n.getPointer=function(r){return r.ptr},n.getClass=function(r){return r.__class__};var Tr,zr={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(zr.needed){for(var r=0;r=zr.size?(m(i>0),zr.needed+=i,e=n._malloc(i),zr.temps.push(e)):(e=zr.buffer+zr.pos,zr.pos+=i),e},copy:function(r,t,e){var n=e;switch(t.BYTES_PER_ELEMENT){case 2:n>>=1;break;case 4:n>>=2;break;case 8:n>>=3}for(var o=0;o=n);)++o;if(o-t>16&&r.subarray&&S)return S.decode(r.subarray(t,o));for(var i="";t>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function P(r,t){return r?F(E,r,t):""}function x(r,t,e,n){if(!(n>0))return 0;for(var o=e,i=e+n-1,a=0;a=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&r.charCodeAt(++a)),s<=127){if(e>=i)break;t[e++]=s}else if(s<=2047){if(e+1>=i)break;t[e++]=192|s>>6,t[e++]=128|63&s}else if(s<=65535){if(e+2>=i)break;t[e++]=224|s>>12,t[e++]=128|s>>6&63,t[e++]=128|63&s}else{if(e+3>=i)break;t[e++]=240|s>>18,t[e++]=128|s>>12&63,t[e++]=128|s>>6&63,t[e++]=128|63&s}}return t[e]=0,e-o}function A(r){for(var t=0,e=0;e=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&r.charCodeAt(++e)),n<=127?++t:t+=n<=2047?2:n<=65535?3:4}return t}function M(r){w=r,n.HEAP8=g=new Int8Array(r),n.HEAP16=k=new Int16Array(r),n.HEAP32=b=new Int32Array(r),n.HEAPU8=E=new Uint8Array(r),n.HEAPU16=new Uint16Array(r),n.HEAPU32=new Uint32Array(r),n.HEAPF32=new Float32Array(r),n.HEAPF64=D=new Float64Array(r)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var C=n.TOTAL_MEMORY||16777216;function R(r){for(;r.length>0;){var t=r.shift();if("function"!=typeof t){var e=t.func;"number"==typeof e?void 0===t.arg?n.dynCall_v(e):n.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}(p=n.wasmMemory?n.wasmMemory:new WebAssembly.Memory({initial:C/65536}))&&(w=p.buffer),C=w.byteLength,M(w),b[54044]=5459216;var O=[],j=[],T=[],z=[],B=!1,N=Math.abs,L=Math.ceil,I=Math.floor,H=Math.min,U=0,W=null;function q(r){U++,n.monitorRunDependencies&&n.monitorRunDependencies(U)}function Y(r){if(U--,n.monitorRunDependencies&&n.monitorRunDependencies(U),0==U&&W){var t=W;W=null,t()}}function J(r){throw n.onAbort&&n.onAbort(r),c(r+=""),f(r),v=!0,r="abort("+r+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(r)}function V(r){return String.prototype.startsWith?r.startsWith("data:application/octet-stream;base64,"):0===r.indexOf("data:application/octet-stream;base64,")}n.preloadedImages={},n.preloadedAudios={};var X,G,Z,K="graphvizlib.wasm";function $(){try{if(l)return new Uint8Array(l);throw"both async and sync fetching of the wasm failed"}catch(r){J(r)}}V(K)||(X=K,K=n.locateFile?n.locateFile(X,u):u+X);var Q={1088:function(r,t){var e=P(r),n=P(t);sr.createPath("/",nr.dirname(e)),sr.writeFile(nr.join("/",e),n)}};function rr(){var r=function(){var r=new Error;if(!r.stack){try{throw new Error}catch(t){r=t}if(!r.stack)return"(no stack trace available)"}return r.stack.toString()}();return n.extraStackTrace&&(r+="\n"+n.extraStackTrace()),r.replace(/\b_Z[\w\d_]+/g,(function(r){return r==r?r:r+" ["+r+"]"}))}function tr(){J()}function er(r){return n.___errno_location&&(b[n.___errno_location()>>2]=r),r}j.push({func:function(){Fr()}});var nr={splitPath:function(r){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1)},normalizeArray:function(r,t){for(var e=0,n=r.length-1;n>=0;n--){var o=r[n];"."===o?r.splice(n,1):".."===o?(r.splice(n,1),e++):e&&(r.splice(n,1),e--)}if(t)for(;e;e--)r.unshift("..");return r},normalize:function(r){var t="/"===r.charAt(0),e="/"===r.substr(-1);return(r=nr.normalizeArray(r.split("/").filter((function(r){return!!r})),!t).join("/"))||t||(r="."),r&&e&&(r+="/"),(t?"/":"")+r},dirname:function(r){var t=nr.splitPath(r),e=t[0],n=t[1];return e||n?(n&&(n=n.substr(0,n.length-1)),e+n):"."},basename:function(r){if("/"===r)return"/";var t=r.lastIndexOf("/");return-1===t?r:r.substr(t+1)},extname:function(r){return nr.splitPath(r)[3]},join:function(){var r=Array.prototype.slice.call(arguments,0);return nr.normalize(r.join("/"))},join2:function(r,t){return nr.normalize(r+"/"+t)}},or={resolve:function(){for(var r="",t=!1,e=arguments.length-1;e>=-1&&!t;e--){var n=e>=0?arguments[e]:sr.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";r=n+"/"+r,t="/"===n.charAt(0)}return(t?"/":"")+(r=nr.normalizeArray(r.split("/").filter((function(r){return!!r})),!t).join("/"))||"."},relative:function(r,t){function e(r){for(var t=0;t=0&&""===r[e];e--);return t>e?[]:r.slice(t,e-t+1)}r=or.resolve(r).substr(1),t=or.resolve(t).substr(1);for(var n=e(r.split("/")),o=e(t.split("/")),i=Math.min(n.length,o.length),a=i,s=0;s0&&(c(F(r.output,0)),r.output=[])}},default_tty1_ops:{put_char:function(r,t){null===t||10===t?(f(F(r.output,0)),r.output=[]):0!=t&&r.output.push(t)},flush:function(r){r.output&&r.output.length>0&&(f(F(r.output,0)),r.output=[])}}},ar={ops_table:null,mount:function(r){return ar.createNode(null,"/",16895,0)},createNode:function(r,t,e,n){if(sr.isBlkdev(e)||sr.isFIFO(e))throw new sr.ErrnoError(63);ar.ops_table||(ar.ops_table={dir:{node:{getattr:ar.node_ops.getattr,setattr:ar.node_ops.setattr,lookup:ar.node_ops.lookup,mknod:ar.node_ops.mknod,rename:ar.node_ops.rename,unlink:ar.node_ops.unlink,rmdir:ar.node_ops.rmdir,readdir:ar.node_ops.readdir,symlink:ar.node_ops.symlink},stream:{llseek:ar.stream_ops.llseek}},file:{node:{getattr:ar.node_ops.getattr,setattr:ar.node_ops.setattr},stream:{llseek:ar.stream_ops.llseek,read:ar.stream_ops.read,write:ar.stream_ops.write,allocate:ar.stream_ops.allocate,mmap:ar.stream_ops.mmap,msync:ar.stream_ops.msync}},link:{node:{getattr:ar.node_ops.getattr,setattr:ar.node_ops.setattr,readlink:ar.node_ops.readlink},stream:{}},chrdev:{node:{getattr:ar.node_ops.getattr,setattr:ar.node_ops.setattr},stream:sr.chrdev_stream_ops}});var o=sr.createNode(r,t,e,n);return sr.isDir(o.mode)?(o.node_ops=ar.ops_table.dir.node,o.stream_ops=ar.ops_table.dir.stream,o.contents={}):sr.isFile(o.mode)?(o.node_ops=ar.ops_table.file.node,o.stream_ops=ar.ops_table.file.stream,o.usedBytes=0,o.contents=null):sr.isLink(o.mode)?(o.node_ops=ar.ops_table.link.node,o.stream_ops=ar.ops_table.link.stream):sr.isChrdev(o.mode)&&(o.node_ops=ar.ops_table.chrdev.node,o.stream_ops=ar.ops_table.chrdev.stream),o.timestamp=Date.now(),r&&(r.contents[t]=o),o},getFileDataAsRegularArray:function(r){if(r.contents&&r.contents.subarray){for(var t=[],e=0;e=t)){t=Math.max(t,e*(e<1048576?2:1.125)|0),0!=e&&(t=Math.max(t,256));var n=r.contents;r.contents=new Uint8Array(t),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage:function(r,t){if(r.usedBytes!=t){if(0==t)return r.contents=null,void(r.usedBytes=0);if(!r.contents||r.contents.subarray){var e=r.contents;return r.contents=new Uint8Array(t),e&&r.contents.set(e.subarray(0,Math.min(t,r.usedBytes))),void(r.usedBytes=t)}if(r.contents||(r.contents=[]),r.contents.length>t)r.contents.length=t;else for(;r.contents.length=r.node.usedBytes)return 0;var a=Math.min(r.node.usedBytes-o,n);if(a>8&&i.subarray)t.set(i.subarray(o,o+a),e);else for(var s=0;s0||o+n8)throw new sr.ErrnoError(32);for(var o=nr.normalizeArray(r.split("/").filter((function(r){return!!r})),!1),i=sr.root,a="/",s=0;s40)throw new sr.ErrnoError(32)}}return{path:a,node:i}},getPath:function(r){for(var t;;){if(sr.isRoot(r)){var e=r.mount.mountpoint;return t?"/"!==e[e.length-1]?e+"/"+t:e+t:e}t=t?r.name+"/"+t:r.name,r=r.parent}},hashName:function(r,t){for(var e=0,n=0;n>>0)%sr.nameTable.length},hashAddNode:function(r){var t=sr.hashName(r.parent.id,r.name);r.name_next=sr.nameTable[t],sr.nameTable[t]=r},hashRemoveNode:function(r){var t=sr.hashName(r.parent.id,r.name);if(sr.nameTable[t]===r)sr.nameTable[t]=r.name_next;else for(var e=sr.nameTable[t];e;){if(e.name_next===r){e.name_next=r.name_next;break}e=e.name_next}},lookupNode:function(r,t){var e=sr.mayLookup(r);if(e)throw new sr.ErrnoError(e,r);for(var n=sr.hashName(r.id,t),o=sr.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===r.id&&i===t)return o}return sr.lookup(r,t)},createNode:function(r,t,e,n){sr.FSNode||(sr.FSNode=function(r,t,e,n){r||(r=this),this.parent=r,this.mount=r.mount,this.mounted=null,this.id=sr.nextInode++,this.name=t,this.mode=e,this.node_ops={},this.stream_ops={},this.rdev=n},sr.FSNode.prototype={},Object.defineProperties(sr.FSNode.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(r){r?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(r){r?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return sr.isDir(this.mode)}},isDevice:{get:function(){return sr.isChrdev(this.mode)}}}));var o=new sr.FSNode(r,t,e,n);return sr.hashAddNode(o),o},destroyNode:function(r){sr.hashRemoveNode(r)},isRoot:function(r){return r===r.parent},isMountpoint:function(r){return!!r.mounted},isFile:function(r){return 32768==(61440&r)},isDir:function(r){return 16384==(61440&r)},isLink:function(r){return 40960==(61440&r)},isChrdev:function(r){return 8192==(61440&r)},isBlkdev:function(r){return 24576==(61440&r)},isFIFO:function(r){return 4096==(61440&r)},isSocket:function(r){return 49152==(49152&r)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(r){var t=sr.flagModes[r];if(void 0===t)throw new Error("Unknown file open mode: "+r);return t},flagsToPermissionString:function(r){var t=["r","w","rw"][3&r];return 512&r&&(t+="w"),t},nodePermissions:function(r,t){return sr.ignorePermissions||(-1===t.indexOf("r")||292&r.mode)&&(-1===t.indexOf("w")||146&r.mode)&&(-1===t.indexOf("x")||73&r.mode)?0:2},mayLookup:function(r){var t=sr.nodePermissions(r,"x");return t||(r.node_ops.lookup?0:2)},mayCreate:function(r,t){try{return sr.lookupNode(r,t),20}catch(r){}return sr.nodePermissions(r,"wx")},mayDelete:function(r,t,e){var n;try{n=sr.lookupNode(r,t)}catch(r){return r.errno}var o=sr.nodePermissions(r,"wx");if(o)return o;if(e){if(!sr.isDir(n.mode))return 54;if(sr.isRoot(n)||sr.getPath(n)===sr.cwd())return 10}else if(sr.isDir(n.mode))return 31;return 0},mayOpen:function(r,t){return r?sr.isLink(r.mode)?32:sr.isDir(r.mode)&&("r"!==sr.flagsToPermissionString(t)||512&t)?31:sr.nodePermissions(r,sr.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd:function(r,t){r=r||0,t=t||sr.MAX_OPEN_FDS;for(var e=r;e<=t;e++)if(!sr.streams[e])return e;throw new sr.ErrnoError(33)},getStream:function(r){return sr.streams[r]},createStream:function(r,t,e){sr.FSStream||(sr.FSStream=function(){},sr.FSStream.prototype={},Object.defineProperties(sr.FSStream.prototype,{object:{get:function(){return this.node},set:function(r){this.node=r}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var n=new sr.FSStream;for(var o in r)n[o]=r[o];r=n;var i=sr.nextfd(t,e);return r.fd=i,sr.streams[i]=r,r},closeStream:function(r){sr.streams[r]=null},chrdev_stream_ops:{open:function(r){var t=sr.getDevice(r.node.rdev);r.stream_ops=t.stream_ops,r.stream_ops.open&&r.stream_ops.open(r)},llseek:function(){throw new sr.ErrnoError(70)}},major:function(r){return r>>8},minor:function(r){return 255&r},makedev:function(r,t){return r<<8|t},registerDevice:function(r,t){sr.devices[r]={stream_ops:t}},getDevice:function(r){return sr.devices[r]},getMounts:function(r){for(var t=[],e=[r];e.length;){var n=e.pop();t.push(n),e.push.apply(e,n.mounts)}return t},syncfs:function(r,t){"function"==typeof r&&(t=r,r=!1),sr.syncFSRequests++,sr.syncFSRequests>1&&f("warning: "+sr.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var e=sr.getMounts(sr.root.mount),n=0;function o(r){return sr.syncFSRequests--,t(r)}function i(r){if(r)return i.errored?void 0:(i.errored=!0,o(r));++n>=e.length&&o(null)}e.forEach((function(t){if(!t.type.syncfs)return i(null);t.type.syncfs(t,r,i)}))},mount:function(r,t,e){var n,o="/"===e,i=!e;if(o&&sr.root)throw new sr.ErrnoError(10);if(!o&&!i){var a=sr.lookupPath(e,{follow_mount:!1});if(e=a.path,n=a.node,sr.isMountpoint(n))throw new sr.ErrnoError(10);if(!sr.isDir(n.mode))throw new sr.ErrnoError(54)}var s={type:r,opts:t,mountpoint:e,mounts:[]},u=r.mount(s);return u.mount=s,s.root=u,o?sr.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:function(r){var t=sr.lookupPath(r,{follow_mount:!1});if(!sr.isMountpoint(t.node))throw new sr.ErrnoError(28);var e=t.node,n=e.mounted,o=sr.getMounts(n);Object.keys(sr.nameTable).forEach((function(r){for(var t=sr.nameTable[r];t;){var e=t.name_next;-1!==o.indexOf(t.mount)&&sr.destroyNode(t),t=e}})),e.mounted=null;var i=e.mount.mounts.indexOf(n);e.mount.mounts.splice(i,1)},lookup:function(r,t){return r.node_ops.lookup(r,t)},mknod:function(r,t,e){var n=sr.lookupPath(r,{parent:!0}).node,o=nr.basename(r);if(!o||"."===o||".."===o)throw new sr.ErrnoError(28);var i=sr.mayCreate(n,o);if(i)throw new sr.ErrnoError(i);if(!n.node_ops.mknod)throw new sr.ErrnoError(63);return n.node_ops.mknod(n,o,t,e)},create:function(r,t){return t=void 0!==t?t:438,t&=4095,t|=32768,sr.mknod(r,t,0)},mkdir:function(r,t){return t=void 0!==t?t:511,t&=1023,t|=16384,sr.mknod(r,t,0)},mkdirTree:function(r,t){for(var e=r.split("/"),n="",o=0;othis.length-1||r<0)){var t=r%this.chunkSize,e=r/this.chunkSize|0;return this.getter(e)[t]}},i.prototype.setDataGetter=function(r){this.getter=r},i.prototype.cacheLength=function(){var r=new XMLHttpRequest;if(r.open("HEAD",e,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error("Couldn't load "+e+". Status: "+r.status);var t,n=Number(r.getResponseHeader("Content-length")),o=(t=r.getResponseHeader("Accept-Ranges"))&&"bytes"===t,i=(t=r.getResponseHeader("Content-Encoding"))&&"gzip"===t,a=1048576;o||(a=n);var s=this;s.setDataGetter((function(r){var t=r*a,o=(r+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=function(r,t){if(r>t)throw new Error("invalid range ("+r+", "+t+") or no bytes requested!");if(t>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",e,!1),n!==a&&o.setRequestHeader("Range","bytes="+r+"-"+t),"undefined"!=typeof Uint8Array&&(o.responseType="arraybuffer"),o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+e+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):kr(o.responseText||"",!0)}(t,o)),void 0===s.chunks[r])throw new Error("doXHR failed!");return s.chunks[r]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,c("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a={isDevice:!1,url:e},s=sr.createFile(r,t,a,n,o);a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(s.stream_ops).forEach((function(r){var t=s.stream_ops[r];u[r]=function(){if(!sr.forceLoadFile(s))throw new sr.ErrnoError(29);return t.apply(null,arguments)}})),u.read=function(r,t,e,n,o){if(!sr.forceLoadFile(s))throw new sr.ErrnoError(29);var i=r.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var u=0;u>2]=n.dev,b[e+4>>2]=0,b[e+8>>2]=n.ino,b[e+12>>2]=n.mode,b[e+16>>2]=n.nlink,b[e+20>>2]=n.uid,b[e+24>>2]=n.gid,b[e+28>>2]=n.rdev,b[e+32>>2]=0,Z=[n.size>>>0,(G=n.size,+N(G)>=1?G>0?(0|H(+I(G/4294967296),4294967295))>>>0:~~+L((G-+(~~G>>>0))/4294967296)>>>0:0)],b[e+40>>2]=Z[0],b[e+44>>2]=Z[1],b[e+48>>2]=4096,b[e+52>>2]=n.blocks,b[e+56>>2]=n.atime.getTime()/1e3|0,b[e+60>>2]=0,b[e+64>>2]=n.mtime.getTime()/1e3|0,b[e+68>>2]=0,b[e+72>>2]=n.ctime.getTime()/1e3|0,b[e+76>>2]=0,Z=[n.ino>>>0,(G=n.ino,+N(G)>=1?G>0?(0|H(+I(G/4294967296),4294967295))>>>0:~~+L((G-+(~~G>>>0))/4294967296)>>>0:0)],b[e+80>>2]=Z[0],b[e+84>>2]=Z[1],0},doMsync:function(r,t,e,n,o){var i=E.slice(r,r+e);sr.msync(t,i,o,e,n)},doMkdir:function(r,t){return"/"===(r=nr.normalize(r))[r.length-1]&&(r=r.substr(0,r.length-1)),sr.mkdir(r,t,0),0},doMknod:function(r,t,e){switch(61440&t){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return sr.mknod(r,t,e),0},doReadlink:function(r,t,e){if(e<=0)return-28;var n=sr.readlink(r),o=Math.min(e,A(n)),i=g[t+o];return x(n,E,t,e+1),g[t+o]=i,o},doAccess:function(r,t){if(-8&t)return-28;var e;if(!(e=sr.lookupPath(r,{follow:!0}).node))return-44;var n="";return 4&t&&(n+="r"),2&t&&(n+="w"),1&t&&(n+="x"),n&&sr.nodePermissions(e,n)?-2:0},doDup:function(r,t,e){var n=sr.getStream(e);return n&&sr.close(n),sr.open(r,t,0,e,e).fd},doReadv:function(r,t,e,n){for(var o=0,i=0;i>2],s=b[t+(8*i+4)>>2],u=sr.read(r,g,a,s,n);if(u<0)return-1;if(o+=u,u>2],s=b[t+(8*i+4)>>2],u=sr.write(r,g,a,s,n);if(u<0)return-1;o+=u}return o},varargs:0,get:function(r){return ur.varargs+=4,b[ur.varargs-4>>2]},getStr:function(){return P(ur.get())},getStreamFromFD:function(r){void 0===r&&(r=ur.get());var t=sr.getStream(r);if(!t)throw new sr.ErrnoError(8);return t},get64:function(){var r=ur.get();return ur.get(),r},getZero:function(){ur.get()}};function cr(r,t,e){t|=0;var n,o=0,i=0,a=0;if(n=(r|=0)+(e|=0)|0,t&=255,(0|e)>=67){for(;0!=(3&r);)g[r>>0]=t,r=r+1|0;for(a=t|t<<8|t<<16|t<<24,i=(o=-4&n|0)-64|0;(0|r)<=(0|i);)b[r>>2]=a,b[r+4>>2]=a,b[r+8>>2]=a,b[r+12>>2]=a,b[r+16>>2]=a,b[r+20>>2]=a,b[r+24>>2]=a,b[r+28>>2]=a,b[r+32>>2]=a,b[r+36>>2]=a,b[r+40>>2]=a,b[r+44>>2]=a,b[r+48>>2]=a,b[r+52>>2]=a,b[r+56>>2]=a,b[r+60>>2]=a,r=r+64|0;for(;(0|r)<(0|o);)b[r>>2]=a,r=r+4|0}for(;(0|r)<(0|n);)g[r>>0]=t,r=r+1|0;return n-e|0}var fr=42,lr=0;function dr(r){try{return p.grow(r-w.byteLength+65535>>16),M(p.buffer),1}catch(r){}}var pr={};function mr(){if(!mr.strings){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:a||"./this.program"};for(var t in pr)r[t]=pr[t];var e=[];for(var t in r)e.push(t+"="+r[t]);mr.strings=e}return mr.strings}function hr(r){return r%4==0&&(r%100!=0||r%400==0)}function yr(r,t){for(var e=0,n=0;n<=t;e+=r[n++]);return e}var vr=[31,29,31,30,31,30,31,31,30,31,30,31],_r=[31,28,31,30,31,30,31,31,30,31,30,31];function wr(r,t){for(var e=new Date(r.getTime());t>0;){var n=hr(e.getFullYear()),o=e.getMonth(),i=(n?vr:_r)[o];if(!(t>i-e.getDate()))return e.setDate(e.getDate()+t),e;t-=i-e.getDate()+1,e.setDate(1),o<11?e.setMonth(o+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return e}function gr(r,t,e,n){var o=b[n+40>>2],i={tm_sec:b[n>>2],tm_min:b[n+4>>2],tm_hour:b[n+8>>2],tm_mday:b[n+12>>2],tm_mon:b[n+16>>2],tm_year:b[n+20>>2],tm_wday:b[n+24>>2],tm_yday:b[n+28>>2],tm_isdst:b[n+32>>2],tm_gmtoff:b[n+36>>2],tm_zone:o?P(o):""},a=P(e),s={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var u in s)a=a.replace(new RegExp(u,"g"),s[u]);var c=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],f=["January","February","March","April","May","June","July","August","September","October","November","December"];function l(r,t,e){for(var n="number"==typeof r?r.toString():r||"";n.length0?1:0}var n;return 0===(n=e(r.getFullYear()-t.getFullYear()))&&0===(n=e(r.getMonth()-t.getMonth()))&&(n=e(r.getDate()-t.getDate())),n}function m(r){switch(r.getDay()){case 0:return new Date(r.getFullYear()-1,11,29);case 1:return r;case 2:return new Date(r.getFullYear(),0,3);case 3:return new Date(r.getFullYear(),0,2);case 4:return new Date(r.getFullYear(),0,1);case 5:return new Date(r.getFullYear()-1,11,31);case 6:return new Date(r.getFullYear()-1,11,30)}}function h(r){var t=wr(new Date(r.tm_year+1900,0,1),r.tm_yday),e=new Date(t.getFullYear(),0,4),n=new Date(t.getFullYear()+1,0,4),o=m(e),i=m(n);return p(o,t)<=0?p(i,t)<=0?t.getFullYear()+1:t.getFullYear():t.getFullYear()-1}var y={"%a":function(r){return c[r.tm_wday].substring(0,3)},"%A":function(r){return c[r.tm_wday]},"%b":function(r){return f[r.tm_mon].substring(0,3)},"%B":function(r){return f[r.tm_mon]},"%C":function(r){return d((r.tm_year+1900)/100|0,2)},"%d":function(r){return d(r.tm_mday,2)},"%e":function(r){return l(r.tm_mday,2," ")},"%g":function(r){return h(r).toString().substring(2)},"%G":function(r){return h(r)},"%H":function(r){return d(r.tm_hour,2)},"%I":function(r){var t=r.tm_hour;return 0==t?t=12:t>12&&(t-=12),d(t,2)},"%j":function(r){return d(r.tm_mday+yr(hr(r.tm_year+1900)?vr:_r,r.tm_mon-1),3)},"%m":function(r){return d(r.tm_mon+1,2)},"%M":function(r){return d(r.tm_min,2)},"%n":function(){return"\n"},"%p":function(r){return r.tm_hour>=0&&r.tm_hour<12?"AM":"PM"},"%S":function(r){return d(r.tm_sec,2)},"%t":function(){return"\t"},"%u":function(r){return r.tm_wday||7},"%U":function(r){var t=new Date(r.tm_year+1900,0,1),e=0===t.getDay()?t:wr(t,7-t.getDay()),n=new Date(r.tm_year+1900,r.tm_mon,r.tm_mday);if(p(e,n)<0){var o=yr(hr(n.getFullYear())?vr:_r,n.getMonth()-1)-31,i=31-e.getDate()+o+n.getDate();return d(Math.ceil(i/7),2)}return 0===p(e,t)?"01":"00"},"%V":function(r){var t,e=new Date(r.tm_year+1900,0,4),n=new Date(r.tm_year+1901,0,4),o=m(e),i=m(n),a=wr(new Date(r.tm_year+1900,0,1),r.tm_yday);return p(a,o)<0?"53":p(i,a)<=0?"01":(t=o.getFullYear()=0;return t=(t=Math.abs(t)/60)/60*100+t%60,(e?"+":"-")+String("0000"+t).slice(-4)},"%Z":function(r){return r.tm_zone},"%%":function(){return"%"}};for(var u in y)a.indexOf(u)>=0&&(a=a.replace(new RegExp(u,"g"),y[u](i)));var v=kr(a,!1);return v.length>t?0:(function(r,t){g.set(r,t)}(v,r),v.length-1)}function Er(r,t){Er.array||(Er.array=[]);var e,n=Er.array;for(n.length=0;e=E[r++];)100===e||102===e?(t=t+7&-8,n.push(D[t>>3]),t+=8):(t=t+3&-4,n.push(b[t>>2]),t+=4);return n}function kr(r,t,e){var n=e>0?e:A(r)+1,o=new Array(n),i=x(r,o,0,o.length);return t&&(o.length=i),o}tr=function(){return performance.now()},sr.staticInit();var br={M:function(r,t){return function(r,t){var e;if(0===r)e=Date.now();else{if(1!==r&&4!==r)return er(28),-1;e=tr()}return b[t>>2]=e/1e3|0,b[t+4>>2]=e%1e3*1e3*1e3|0,0}(r,t)},k:function(r){return Rr(r)},j:function(r,t,e){throw"uncaught_exception"in zr?zr.uncaught_exceptions++:zr.uncaught_exceptions=1,r},q:function(){},U:function(r,t){return er(63),-1},P:function(r,t){ur.varargs=t;try{var e=ur.getStr();return sr.unlink(e),0}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},R:function(r,t){ur.varargs=t;try{return function(r,t,e,n,o,i){var a;i<<=12;var s=!1;if(0!=(16&n)&&r%16384!=0)return-28;if(0!=(32&n)){if(!(a=Br(16384,t)))return-48;cr(a,0,t),s=!0}else{var u=sr.getStream(o);if(!u)return-8;var c=sr.mmap(u,E,r,t,i,e,n);a=c.ptr,s=c.allocated}return ur.mappings[a]={malloc:a,len:t,allocated:s,fd:o,flags:n,offset:i},a}(ur.get(),ur.get(),ur.get(),ur.get(),ur.get(),ur.get())}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},S:function(r,t){ur.varargs=t;try{var e=ur.getStr(),n=ur.get();return ur.doStat(sr.stat,e,n)}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},T:function(r,t){ur.varargs=t;try{var e=ur.getStreamFromFD(),n=ur.get();return ur.doStat(sr.stat,e.path,n)}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},L:function(r,t){ur.varargs=t;try{return fr}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},y:function(r,t){ur.varargs=t;try{var e=ur.getStreamFromFD();switch(ur.get()){case 0:return(n=ur.get())<0?-28:sr.open(e.path,e.flags,0,n).fd;case 1:case 2:return 0;case 3:return e.flags;case 4:var n=ur.get();return e.flags|=n,0;case 12:return n=ur.get(),k[n+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return er(28),-1;default:return-28}}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},K:function(r,t){ur.varargs=t;try{var e=ur.getStr(),n=ur.get();return ur.doAccess(e,n)}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},z:function(r,t){ur.varargs=t;try{var e=ur.getStr(),n=ur.get(),o=ur.get();return sr.open(e,n,o).fd}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},O:function(r,t){ur.varargs=t;try{var e=ur.getStreamFromFD(),n=ur.get();switch(n){case 21509:case 21505:return e.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return e.tty?0:-59;case 21519:if(!e.tty)return-59;var o=ur.get();return b[o>>2]=0,0;case 21520:return e.tty?-28:-59;case 21531:return o=ur.get(),sr.ioctl(e,n,o);case 21523:case 21524:return e.tty?0:-59;default:J("bad ioctl syscall "+n)}}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},Q:function(r,t){ur.varargs=t;try{return function(r,t){if(-1===r||0===t)return-28;var e=ur.mappings[r];if(!e)return 0;if(t===e.len){var n=sr.getStream(e.fd);ur.doMsync(r,n,t,e.flags,e.offset),sr.munmap(n),ur.mappings[r]=null,e.allocated&&Or(e.malloc)}return 0}(ur.get(),ur.get())}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),-r.errno}},m:function(){},w:function(){J()},C:function(r,t,e){var n=Er(t,e);return Q[r].apply(null,n)},d:function(r,t){!function(r,t){throw Tr(r,t||1),"longjmp"}(r,t)},E:function(r,t,e){E.set(E.subarray(t,t+e),r)},F:function(r){var t=E.length;if(r>2147418112)return!1;for(var e,n,o=1;o<=4;o*=2){var i=t*(1+.2/o);if(i=Math.min(i,r+100663296),dr(Math.min(2147418112,((e=Math.max(16777216,r,i))%(n=65536)>0&&(e+=n-e%n),e))))return!0}return!1},I:function(r,t){var e=mr(),n=0;return e.forEach((function(e,o){var i=t+n;b[r+4*o>>2]=i,function(r,t,e){for(var n=0;n>0]=r.charCodeAt(n);e||(g[t>>0]=0)}(e,i),n+=e.length+1})),0},J:function(r,t){var e=mr();b[r>>2]=e.length;var n=0;return e.forEach((function(r){n+=r.length+1})),b[t>>2]=n,0},l:function(r){!function(r,t){t&&d&&0===r||(d||(v=!0,n.onExit&&n.onExit(r)),s(r,new rt(r)))}(r)},p:function(r){try{var t=ur.getStreamFromFD(r);return sr.close(t),0}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),r.errno}},H:function(r,t){try{var e=ur.getStreamFromFD(r),n=e.tty?2:sr.isDir(e.mode)?3:sr.isLink(e.mode)?7:4;return g[t>>0]=n,0}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),r.errno}},N:function(r,t,e,n){try{var o=ur.getStreamFromFD(r),i=ur.doReadv(o,t,e);return b[n>>2]=i,0}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),r.errno}},D:function(r,t,e,n,o){try{var i=ur.getStreamFromFD(r),a=4294967296*e+(t>>>0);return a<=-9007199254740992||a>=9007199254740992?-61:(sr.llseek(i,a,n),Z=[i.position>>>0,(G=i.position,+N(G)>=1?G>0?(0|H(+I(G/4294967296),4294967295))>>>0:~~+L((G-+(~~G>>>0))/4294967296)>>>0:0)],b[o>>2]=Z[0],b[o+4>>2]=Z[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),r.errno}},x:function(r,t,e,n){try{var o=ur.getStreamFromFD(r),i=ur.doWritev(o,t,e);return b[n>>2]=i,0}catch(r){return void 0!==sr&&r instanceof sr.ErrnoError||J(r),r.errno}},a:function(){return 0|m},X:function(r){var t=Date.now();return b[r>>2]=t/1e3|0,b[r+4>>2]=t%1e3*1e3|0,0},Y:function(r){var t=$r();try{return Zr(r)}catch(r){if(Qr(t),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},V:function(r,t){var e=$r();try{return Kr(r,t)}catch(r){if(Qr(e),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},v:function(r){var t=$r();try{return qr(r)}catch(r){if(Qr(t),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},f:function(r,t){var e=$r();try{return Yr(r,t)}catch(r){if(Qr(e),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},e:function(r,t,e){var n=$r();try{return Jr(r,t,e)}catch(r){if(Qr(n),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},g:function(r,t,e,n){var o=$r();try{return Vr(r,t,e,n)}catch(r){if(Qr(o),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},n:function(r,t,e,n,o){var i=$r();try{return Xr(r,t,e,n,o)}catch(r){if(Qr(i),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},W:function(r,t,e,n,o,i,a){var s=$r();try{return Gr(r,t,e,n,o,i,a)}catch(r){if(Qr(s),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},s:function(r){var t=$r();try{Nr(r)}catch(r){if(Qr(t),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},h:function(r,t){var e=$r();try{Lr(r,t)}catch(r){if(Qr(e),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},o:function(r,t,e){var n=$r();try{Ir(r,t,e)}catch(r){if(Qr(n),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},u:function(r,t,e,n){var o=$r();try{Hr(r,t,e,n)}catch(r){if(Qr(o),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},t:function(r,t,e,n,o){var i=$r();try{Ur(r,t,e,n,o)}catch(r){if(Qr(i),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},r:function(r,t,e,n,o,i){var a=$r();try{Wr(r,t,e,n,o,i)}catch(r){if(Qr(a),r!==r+0&&"longjmp"!==r)throw r;Tr(1,0)}},memory:p,i:function r(t,e,n,o){e|=0,n|=0,o|=0;var i=0;for(lr=lr+1|0,b[(t|=0)>>2]=lr;(0|i)<(0|o);){if(0==(0|b[n+(i<<3)>>2]))return b[n+(i<<3)>>2]=lr,b[n+(4+(i<<3))>>2]=e,b[n+(8+(i<<3))>>2]=0,h(0|o),0|n;i=i+1|0}return n=0|r(0|t,0|e,0|(n=0|jr(0|n,8*(1+(o=2*o|0)|0)|0)),0|o),h(0|o),0|n},b:function(r){h(0|r)},G:function(r,t,e,n){return gr(r,t,e,n)},table:y,c:function(r,t,e){r|=0,t|=0,e|=0;for(var n=0,o=0;(0|n)<(0|e)&&0!=(0|(o=0|b[t+(n<<3)>>2]));){if((0|o)==(0|r))return 0|b[t+(4+(n<<3))>>2];n=n+1|0}return 0},A:function(r){var t=Date.now()/1e3|0;return r&&(b[r>>2]=t),t},B:function(r){return 0!==r&&cr(r,0,16),0}},Dr=function(){var r={a:br};function t(r,t){var e=r.exports;n.asm=e,Y()}function e(r){t(r.instance)}function o(t){return(l||"function"!=typeof fetch?new Promise((function(r,t){r($())})):fetch(K,{credentials:"same-origin"}).then((function(r){if(!r.ok)throw"failed to load wasm binary file at '"+K+"'";return r.arrayBuffer()})).catch((function(){return $()}))).then((function(t){return WebAssembly.instantiate(t,r)})).then(t,(function(r){f("failed to asynchronously prepare wasm: "+r),J(r)}))}if(q(),n.instantiateWasm)try{return n.instantiateWasm(r,t)}catch(r){return f("Module.instantiateWasm callback failed with error: "+r),!1}return function(){if(l||"function"!=typeof WebAssembly.instantiateStreaming||V(K)||"function"!=typeof fetch)return o(e);fetch(K,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(e,(function(r){f("wasm streaming compile failed: "+r),f("falling back to ArrayBuffer instantiation"),o(e)}))}))}(),{}}();n.asm=Dr;var Sr,Fr=n.___wasm_call_ctors=function(){return(Fr=n.___wasm_call_ctors=n.asm.Z).apply(null,arguments)},Pr=n._emscripten_bind_VoidPtr___destroy___0=function(){return(Pr=n._emscripten_bind_VoidPtr___destroy___0=n.asm._).apply(null,arguments)},xr=n._emscripten_bind_Main_layout_3=function(){return(xr=n._emscripten_bind_Main_layout_3=n.asm.$).apply(null,arguments)},Ar=n._emscripten_bind_Main_lastError_0=function(){return(Ar=n._emscripten_bind_Main_lastError_0=n.asm.aa).apply(null,arguments)},Mr=n._emscripten_bind_Main_createFile_2=function(){return(Mr=n._emscripten_bind_Main_createFile_2=n.asm.ba).apply(null,arguments)},Cr=n._emscripten_bind_Main___destroy___0=function(){return(Cr=n._emscripten_bind_Main___destroy___0=n.asm.ca).apply(null,arguments)},Rr=n._malloc=function(){return(Rr=n._malloc=n.asm.da).apply(null,arguments)},Or=n._free=function(){return(Or=n._free=n.asm.ea).apply(null,arguments)},jr=n._realloc=function(){return(jr=n._realloc=n.asm.fa).apply(null,arguments)},Tr=(n.___errno_location=function(){return(n.___errno_location=n.asm.ga).apply(null,arguments)},n._setThrew=function(){return(Tr=n._setThrew=n.asm.ha).apply(null,arguments)}),zr=n.__ZSt18uncaught_exceptionv=function(){return(zr=n.__ZSt18uncaught_exceptionv=n.asm.ia).apply(null,arguments)},Br=n._memalign=function(){return(Br=n._memalign=n.asm.ja).apply(null,arguments)},Nr=n.dynCall_v=function(){return(Nr=n.dynCall_v=n.asm.ka).apply(null,arguments)},Lr=n.dynCall_vi=function(){return(Lr=n.dynCall_vi=n.asm.la).apply(null,arguments)},Ir=n.dynCall_vii=function(){return(Ir=n.dynCall_vii=n.asm.ma).apply(null,arguments)},Hr=n.dynCall_viii=function(){return(Hr=n.dynCall_viii=n.asm.na).apply(null,arguments)},Ur=n.dynCall_viiii=function(){return(Ur=n.dynCall_viiii=n.asm.oa).apply(null,arguments)},Wr=n.dynCall_viiiii=function(){return(Wr=n.dynCall_viiiii=n.asm.pa).apply(null,arguments)},qr=n.dynCall_i=function(){return(qr=n.dynCall_i=n.asm.qa).apply(null,arguments)},Yr=n.dynCall_ii=function(){return(Yr=n.dynCall_ii=n.asm.ra).apply(null,arguments)},Jr=n.dynCall_iii=function(){return(Jr=n.dynCall_iii=n.asm.sa).apply(null,arguments)},Vr=n.dynCall_iiii=function(){return(Vr=n.dynCall_iiii=n.asm.ta).apply(null,arguments)},Xr=n.dynCall_iiiii=function(){return(Xr=n.dynCall_iiiii=n.asm.ua).apply(null,arguments)},Gr=n.dynCall_iiiiiii=function(){return(Gr=n.dynCall_iiiiiii=n.asm.va).apply(null,arguments)},Zr=n.dynCall_d=function(){return(Zr=n.dynCall_d=n.asm.wa).apply(null,arguments)},Kr=n.dynCall_di=function(){return(Kr=n.dynCall_di=n.asm.xa).apply(null,arguments)},$r=n.stackSave=function(){return($r=n.stackSave=n.asm.ya).apply(null,arguments)},Qr=(n.stackAlloc=function(){return(n.stackAlloc=n.asm.za).apply(null,arguments)},n.stackRestore=function(){return(Qr=n.stackRestore=n.asm.Aa).apply(null,arguments)});function rt(r){this.name="ExitStatus",this.message="Program terminated with exit("+r+")",this.status=r}function tt(r){function t(){Sr||(Sr=!0,v||(B=!0,n.noFSInit||sr.init.initialized||sr.init(),ir.init(),R(j),sr.ignorePermissions=!1,R(T),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)r=n.postRun.shift(),z.unshift(r);var r;R(z)}()))}U>0||(function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)r=n.preRun.shift(),O.unshift(r);var r;R(O)}(),U>0||(n.setStatus?(n.setStatus("Running..."),setTimeout((function(){setTimeout((function(){n.setStatus("")}),1),t()}),1)):t()))}if(n.asm=Dr,n.then=function(r){if(Sr)r(n);else{var t=n.onRuntimeInitialized;n.onRuntimeInitialized=function(){t&&t(),r(n)}}return n},W=function r(){Sr||tt(),Sr||(W=r)},n.run=tt,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();function et(){}function nt(r){return(r||et).__cache__}function ot(r,t){var e=nt(t),n=e[r];return n||((n=Object.create((t||et).prototype)).ptr=r,e[r]=n)}d=!0,tt(),et.prototype=Object.create(et.prototype),et.prototype.constructor=et,et.prototype.__class__=et,et.__cache__={},n.WrapperObject=et,n.getCache=nt,n.wrapPointer=ot,n.castObject=function(r,t){return ot(r.ptr,t)},n.NULL=ot(0),n.destroy=function(r){if(!r.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";r.__destroy__(),delete nt(r.__class__)[r.ptr]},n.compare=function(r,t){return r.ptr===t.ptr},n.getPointer=function(r){return r.ptr},n.getClass=function(r){return r.__class__};var it,at={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(at.needed){for(var r=0;r=at.size?(_(i>0),at.needed+=i,e=n._malloc(i),at.temps.push(e)):(e=at.buffer+at.pos,at.pos+=i),e},copy:function(r,t,e){var n=e;switch(t.BYTES_PER_ELEMENT){case 2:n>>=1;break;case 4:n>>=2;break;case 8:n>>=3}for(var o=0;o\n\n'}}function h(r,t){var e,n=d({images:[],files:[]},t);p(n.files,(e=n.images,e.map(m))).forEach((function(t){return r.Main.prototype.createFile(t.path,t.data)}))}var y={layout:function(r,t,e,n){return void 0===t&&(t="svg"),void 0===e&&(e="dot"),r?a(l).then((function(o){h(o,n);var i=o.Main.prototype.layout(r,t,e);if(!i)throw new Error(o.Main.prototype.lastError());return i})):Promise.resolve("")},circo:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"circo",e)},dot:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"dot",e)},fdp:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"fdp",e)},neato:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"neato",e)},osage:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"osage",e)},patchwork:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"patchwork",e)},twopi:function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"twopi",e)}},v=function(){function r(r){this._wasm=r}return r.prototype.layout=function(r,t,e,n){if(void 0===t&&(t="svg"),void 0===e&&(e="dot"),!r)return"";h(this._wasm,n);var o=this._wasm.Main.prototype.layout(r,t,e);if(!o)throw new Error(this._wasm.Main.prototype.lastError());return o},r.prototype.circo=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"circo",e)},r.prototype.dot=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"dot",e)},r.prototype.fdp=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"fdp",e)},r.prototype.neato=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"neato",e)},r.prototype.osage=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"osage",e)},r.prototype.patchwork=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"patchwork",e)},r.prototype.twopi=function(r,t,e){return void 0===t&&(t="svg"),this.layout(r,t,"twopi",e)},r}();r.StackParser=u,r.graphviz=y,r.graphvizSync=function(){return a(l).then((function(r){return new v(r)}))},r.parse=c,r.wasmFolder=i,Object.defineProperty(r,"__esModule",{value:!0})})); \ No newline at end of file diff --git a/resources/public/jquery-2.2.4.min.js b/resources/public/jquery-2.2.4.min.js new file mode 100644 index 0000000..4024b66 --- /dev/null +++ b/resources/public/jquery-2.2.4.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("